summaryrefslogtreecommitdiff
path: root/build/server
diff options
context:
space:
mode:
Diffstat (limited to 'build/server')
-rw-r--r--build/server/chunks/624.js2510
-rw-r--r--build/server/font-manifest.json1
-rw-r--r--build/server/pages-manifest.json7
-rw-r--r--build/server/pages/404.html1
-rw-r--r--build/server/pages/500.html1
-rw-r--r--build/server/pages/_app.js66
-rw-r--r--build/server/pages/_document.js1209
-rw-r--r--build/server/pages/_error.js151
-rw-r--r--build/server/pages/index.html1
-rw-r--r--build/server/webpack-runtime.js160
10 files changed, 4107 insertions, 0 deletions
diff --git a/build/server/chunks/624.js b/build/server/chunks/624.js
new file mode 100644
index 0000000..8fd3f14
--- /dev/null
+++ b/build/server/chunks/624.js
@@ -0,0 +1,2510 @@
+exports.id = 624;
+exports.ids = [624];
+exports.modules = {
+
+/***/ 265:
+/***/ (function(__unused_webpack_module, exports) {
+
+// https://github.com/vasturiano/d3-binarytree v0.2.0 Copyright 2021 Vasco Asturiano
+(function (global, factory) {
+ true ? factory(exports) : 0;
+})(this, function (exports) {
+ 'use strict';
+
+ function tree_add(d) {
+ var x = +this._x.call(null, d);
+ return add(this.cover(x), x, d);
+ }
+
+ function add(tree, x, d) {
+ if (isNaN(x)) return tree; // ignore invalid points
+
+ var parent,
+ node = tree._root,
+ leaf = {
+ data: d
+ },
+ x0 = tree._x0,
+ x1 = tree._x1,
+ xm,
+ xp,
+ right,
+ i,
+ j; // If the tree is empty, initialize the root as a leaf.
+
+ if (!node) return tree._root = leaf, tree; // Find the existing leaf for the new point, or add it.
+
+ while (node.length) {
+ if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm;else x1 = xm;
+ if (parent = node, !(node = node[i = +right])) return parent[i] = leaf, tree;
+ } // Is the new point is exactly coincident with the existing point?
+
+
+ xp = +tree._x.call(null, node.data);
+ if (x === xp) return leaf.next = node, parent ? parent[i] = leaf : tree._root = leaf, tree; // Otherwise, split the leaf node until the old and new point are separated.
+
+ do {
+ parent = parent ? parent[i] = new Array(2) : tree._root = new Array(2);
+ if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm;else x1 = xm;
+ } while ((i = +right) === (j = +(xp >= xm)));
+
+ return parent[j] = node, parent[i] = leaf, tree;
+ }
+
+ function addAll(data) {
+ var i,
+ n = data.length,
+ x,
+ xz = new Array(n),
+ x0 = Infinity,
+ x1 = -Infinity; // Compute the points and their extent.
+
+ for (i = 0; i < n; ++i) {
+ if (isNaN(x = +this._x.call(null, data[i]))) continue;
+ xz[i] = x;
+ if (x < x0) x0 = x;
+ if (x > x1) x1 = x;
+ } // If there were no (valid) points, abort.
+
+
+ if (x0 > x1) return this; // Expand the tree to cover the new points.
+
+ this.cover(x0).cover(x1); // Add the new points.
+
+ for (i = 0; i < n; ++i) {
+ add(this, xz[i], data[i]);
+ }
+
+ return this;
+ }
+
+ function tree_cover(x) {
+ if (isNaN(x = +x)) return this; // ignore invalid points
+
+ var x0 = this._x0,
+ x1 = this._x1; // If the binarytree has no extent, initialize them.
+ // Integer extent are necessary so that if we later double the extent,
+ // the existing half boundaries don’t change due to floating point error!
+
+ if (isNaN(x0)) {
+ x1 = (x0 = Math.floor(x)) + 1;
+ } // Otherwise, double repeatedly to cover.
+ else {
+ var z = x1 - x0 || 1,
+ node = this._root,
+ parent,
+ i;
+
+ while (x0 > x || x >= x1) {
+ i = +(x < x0);
+ parent = new Array(2), parent[i] = node, node = parent, z *= 2;
+
+ switch (i) {
+ case 0:
+ x1 = x0 + z;
+ break;
+
+ case 1:
+ x0 = x1 - z;
+ break;
+ }
+ }
+
+ if (this._root && this._root.length) this._root = node;
+ }
+
+ this._x0 = x0;
+ this._x1 = x1;
+ return this;
+ }
+
+ function tree_data() {
+ var data = [];
+ this.visit(function (node) {
+ if (!node.length) do data.push(node.data); while (node = node.next);
+ });
+ return data;
+ }
+
+ function tree_extent(_) {
+ return arguments.length ? this.cover(+_[0][0]).cover(+_[1][0]) : isNaN(this._x0) ? undefined : [[this._x0], [this._x1]];
+ }
+
+ function Half(node, x0, x1) {
+ this.node = node;
+ this.x0 = x0;
+ this.x1 = x1;
+ }
+
+ function tree_find(x, radius) {
+ var data,
+ x0 = this._x0,
+ x1,
+ x2,
+ x3 = this._x1,
+ halves = [],
+ node = this._root,
+ q,
+ i;
+ if (node) halves.push(new Half(node, x0, x3));
+ if (radius == null) radius = Infinity;else {
+ x0 = x - radius;
+ x3 = x + radius;
+ }
+
+ while (q = halves.pop()) {
+ // Stop searching if this half can’t contain a closer node.
+ if (!(node = q.node) || (x1 = q.x0) > x3 || (x2 = q.x1) < x0) continue; // Bisect the current half.
+
+ if (node.length) {
+ var xm = (x1 + x2) / 2;
+ halves.push(new Half(node[1], xm, x2), new Half(node[0], x1, xm)); // Visit the closest half first.
+
+ if (i = +(x >= xm)) {
+ q = halves[halves.length - 1];
+ halves[halves.length - 1] = halves[halves.length - 1 - i];
+ halves[halves.length - 1 - i] = q;
+ }
+ } // Visit this point. (Visiting coincident points isn’t necessary!)
+ else {
+ var d = Math.abs(x - +this._x.call(null, node.data));
+
+ if (d < radius) {
+ radius = d;
+ x0 = x - d;
+ x3 = x + d;
+ data = node.data;
+ }
+ }
+ }
+
+ return data;
+ }
+
+ function tree_remove(d) {
+ if (isNaN(x = +this._x.call(null, d))) return this; // ignore invalid points
+
+ var parent,
+ node = this._root,
+ retainer,
+ previous,
+ next,
+ x0 = this._x0,
+ x1 = this._x1,
+ x,
+ xm,
+ right,
+ i,
+ j; // If the tree is empty, initialize the root as a leaf.
+
+ if (!node) return this; // Find the leaf node for the point.
+ // While descending, also retain the deepest parent with a non-removed sibling.
+
+ if (node.length) while (true) {
+ if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm;else x1 = xm;
+ if (!(parent = node, node = node[i = +right])) return this;
+ if (!node.length) break;
+ if (parent[i + 1 & 1]) retainer = parent, j = i;
+ } // Find the point to remove.
+
+ while (node.data !== d) if (!(previous = node, node = node.next)) return this;
+
+ if (next = node.next) delete node.next; // If there are multiple coincident points, remove just the point.
+
+ if (previous) return next ? previous.next = next : delete previous.next, this; // If this is the root point, remove it.
+
+ if (!parent) return this._root = next, this; // Remove this leaf.
+
+ next ? parent[i] = next : delete parent[i]; // If the parent now contains exactly one leaf, collapse superfluous parents.
+
+ if ((node = parent[0] || parent[1]) && node === (parent[1] || parent[0]) && !node.length) {
+ if (retainer) retainer[j] = node;else this._root = node;
+ }
+
+ return this;
+ }
+
+ function removeAll(data) {
+ for (var i = 0, n = data.length; i < n; ++i) this.remove(data[i]);
+
+ return this;
+ }
+
+ function tree_root() {
+ return this._root;
+ }
+
+ function tree_size() {
+ var size = 0;
+ this.visit(function (node) {
+ if (!node.length) do ++size; while (node = node.next);
+ });
+ return size;
+ }
+
+ function tree_visit(callback) {
+ var halves = [],
+ q,
+ node = this._root,
+ child,
+ x0,
+ x1;
+ if (node) halves.push(new Half(node, this._x0, this._x1));
+
+ while (q = halves.pop()) {
+ if (!callback(node = q.node, x0 = q.x0, x1 = q.x1) && node.length) {
+ var xm = (x0 + x1) / 2;
+ if (child = node[1]) halves.push(new Half(child, xm, x1));
+ if (child = node[0]) halves.push(new Half(child, x0, xm));
+ }
+ }
+
+ return this;
+ }
+
+ function tree_visitAfter(callback) {
+ var halves = [],
+ next = [],
+ q;
+ if (this._root) halves.push(new Half(this._root, this._x0, this._x1));
+
+ while (q = halves.pop()) {
+ var node = q.node;
+
+ if (node.length) {
+ var child,
+ x0 = q.x0,
+ x1 = q.x1,
+ xm = (x0 + x1) / 2;
+ if (child = node[0]) halves.push(new Half(child, x0, xm));
+ if (child = node[1]) halves.push(new Half(child, xm, x1));
+ }
+
+ next.push(q);
+ }
+
+ while (q = next.pop()) {
+ callback(q.node, q.x0, q.x1);
+ }
+
+ return this;
+ }
+
+ function defaultX(d) {
+ return d[0];
+ }
+
+ function tree_x(_) {
+ return arguments.length ? (this._x = _, this) : this._x;
+ }
+
+ function binarytree(nodes, x) {
+ var tree = new Binarytree(x == null ? defaultX : x, NaN, NaN);
+ return nodes == null ? tree : tree.addAll(nodes);
+ }
+
+ function Binarytree(x, x0, x1) {
+ this._x = x;
+ this._x0 = x0;
+ this._x1 = x1;
+ this._root = undefined;
+ }
+
+ function leaf_copy(leaf) {
+ var copy = {
+ data: leaf.data
+ },
+ next = copy;
+
+ while (leaf = leaf.next) next = next.next = {
+ data: leaf.data
+ };
+
+ return copy;
+ }
+
+ var treeProto = binarytree.prototype = Binarytree.prototype;
+
+ treeProto.copy = function () {
+ var copy = new Binarytree(this._x, this._x0, this._x1),
+ node = this._root,
+ nodes,
+ child;
+ if (!node) return copy;
+ if (!node.length) return copy._root = leaf_copy(node), copy;
+ nodes = [{
+ source: node,
+ target: copy._root = new Array(2)
+ }];
+
+ while (node = nodes.pop()) {
+ for (var i = 0; i < 2; ++i) {
+ if (child = node.source[i]) {
+ if (child.length) nodes.push({
+ source: child,
+ target: node.target[i] = new Array(2)
+ });else node.target[i] = leaf_copy(child);
+ }
+ }
+ }
+
+ return copy;
+ };
+
+ treeProto.add = tree_add;
+ treeProto.addAll = addAll;
+ treeProto.cover = tree_cover;
+ treeProto.data = tree_data;
+ treeProto.extent = tree_extent;
+ treeProto.find = tree_find;
+ treeProto.remove = tree_remove;
+ treeProto.removeAll = removeAll;
+ treeProto.root = tree_root;
+ treeProto.size = tree_size;
+ treeProto.visit = tree_visit;
+ treeProto.visitAfter = tree_visitAfter;
+ treeProto.x = tree_x;
+ exports.binarytree = binarytree;
+ Object.defineProperty(exports, '__esModule', {
+ value: true
+ });
+});
+
+/***/ }),
+
+/***/ 624:
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+// ESM COMPAT FLAG
+__webpack_require__.r(__webpack_exports__);
+
+// EXPORTS
+__webpack_require__.d(__webpack_exports__, {
+ "forceCenter": function() { return /* reexport */ center; },
+ "forceCollide": function() { return /* reexport */ collide; },
+ "forceLink": function() { return /* reexport */ src_link; },
+ "forceManyBody": function() { return /* reexport */ manyBody; },
+ "forceRadial": function() { return /* reexport */ radial; },
+ "forceSimulation": function() { return /* reexport */ simulation; },
+ "forceX": function() { return /* reexport */ src_x; },
+ "forceY": function() { return /* reexport */ src_y; },
+ "forceZ": function() { return /* reexport */ src_z; }
+});
+
+;// CONCATENATED MODULE: ./node_modules/d3-force-3d/src/center.js
+/* harmony default export */ function center(x, y, z) {
+ var nodes,
+ strength = 1;
+ if (x == null) x = 0;
+ if (y == null) y = 0;
+ if (z == null) z = 0;
+
+ function force() {
+ var i,
+ n = nodes.length,
+ node,
+ sx = 0,
+ sy = 0,
+ sz = 0;
+
+ for (i = 0; i < n; ++i) {
+ node = nodes[i], sx += node.x || 0, sy += node.y || 0, sz += node.z || 0;
+ }
+
+ for (sx = (sx / n - x) * strength, sy = (sy / n - y) * strength, sz = (sz / n - z) * strength, i = 0; i < n; ++i) {
+ node = nodes[i];
+
+ if (sx) {
+ node.x -= sx;
+ }
+
+ if (sy) {
+ node.y -= sy;
+ }
+
+ if (sz) {
+ node.z -= sz;
+ }
+ }
+ }
+
+ force.initialize = function (_) {
+ nodes = _;
+ };
+
+ force.x = function (_) {
+ return arguments.length ? (x = +_, force) : x;
+ };
+
+ force.y = function (_) {
+ return arguments.length ? (y = +_, force) : y;
+ };
+
+ force.z = function (_) {
+ return arguments.length ? (z = +_, force) : z;
+ };
+
+ force.strength = function (_) {
+ return arguments.length ? (strength = +_, force) : strength;
+ };
+
+ return force;
+}
+// EXTERNAL MODULE: ./node_modules/d3-binarytree/dist/d3-binarytree.js
+var d3_binarytree = __webpack_require__(265);
+;// CONCATENATED MODULE: ./node_modules/d3-quadtree/src/add.js
+/* harmony default export */ function add(d) {
+ const x = +this._x.call(null, d),
+ y = +this._y.call(null, d);
+ return add_add(this.cover(x, y), x, y, d);
+}
+
+function add_add(tree, x, y, d) {
+ if (isNaN(x) || isNaN(y)) return tree; // ignore invalid points
+
+ var parent,
+ node = tree._root,
+ leaf = {
+ data: d
+ },
+ x0 = tree._x0,
+ y0 = tree._y0,
+ x1 = tree._x1,
+ y1 = tree._y1,
+ xm,
+ ym,
+ xp,
+ yp,
+ right,
+ bottom,
+ i,
+ j; // If the tree is empty, initialize the root as a leaf.
+
+ if (!node) return tree._root = leaf, tree; // Find the existing leaf for the new point, or add it.
+
+ while (node.length) {
+ if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm;else x1 = xm;
+ if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym;else y1 = ym;
+ if (parent = node, !(node = node[i = bottom << 1 | right])) return parent[i] = leaf, tree;
+ } // Is the new point is exactly coincident with the existing point?
+
+
+ xp = +tree._x.call(null, node.data);
+ yp = +tree._y.call(null, node.data);
+ if (x === xp && y === yp) return leaf.next = node, parent ? parent[i] = leaf : tree._root = leaf, tree; // Otherwise, split the leaf node until the old and new point are separated.
+
+ do {
+ parent = parent ? parent[i] = new Array(4) : tree._root = new Array(4);
+ if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm;else x1 = xm;
+ if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym;else y1 = ym;
+ } while ((i = bottom << 1 | right) === (j = (yp >= ym) << 1 | xp >= xm));
+
+ return parent[j] = node, parent[i] = leaf, tree;
+}
+
+function addAll(data) {
+ var d,
+ i,
+ n = data.length,
+ x,
+ y,
+ xz = new Array(n),
+ yz = new Array(n),
+ x0 = Infinity,
+ y0 = Infinity,
+ x1 = -Infinity,
+ y1 = -Infinity; // Compute the points and their extent.
+
+ for (i = 0; i < n; ++i) {
+ if (isNaN(x = +this._x.call(null, d = data[i])) || isNaN(y = +this._y.call(null, d))) continue;
+ xz[i] = x;
+ yz[i] = y;
+ if (x < x0) x0 = x;
+ if (x > x1) x1 = x;
+ if (y < y0) y0 = y;
+ if (y > y1) y1 = y;
+ } // If there were no (valid) points, abort.
+
+
+ if (x0 > x1 || y0 > y1) return this; // Expand the tree to cover the new points.
+
+ this.cover(x0, y0).cover(x1, y1); // Add the new points.
+
+ for (i = 0; i < n; ++i) {
+ add_add(this, xz[i], yz[i], data[i]);
+ }
+
+ return this;
+}
+;// CONCATENATED MODULE: ./node_modules/d3-quadtree/src/cover.js
+/* harmony default export */ function cover(x, y) {
+ if (isNaN(x = +x) || isNaN(y = +y)) return this; // ignore invalid points
+
+ var x0 = this._x0,
+ y0 = this._y0,
+ x1 = this._x1,
+ y1 = this._y1; // If the quadtree has no extent, initialize them.
+ // Integer extent are necessary so that if we later double the extent,
+ // the existing quadrant boundaries don’t change due to floating point error!
+
+ if (isNaN(x0)) {
+ x1 = (x0 = Math.floor(x)) + 1;
+ y1 = (y0 = Math.floor(y)) + 1;
+ } // Otherwise, double repeatedly to cover.
+ else {
+ var z = x1 - x0 || 1,
+ node = this._root,
+ parent,
+ i;
+
+ while (x0 > x || x >= x1 || y0 > y || y >= y1) {
+ i = (y < y0) << 1 | x < x0;
+ parent = new Array(4), parent[i] = node, node = parent, z *= 2;
+
+ switch (i) {
+ case 0:
+ x1 = x0 + z, y1 = y0 + z;
+ break;
+
+ case 1:
+ x0 = x1 - z, y1 = y0 + z;
+ break;
+
+ case 2:
+ x1 = x0 + z, y0 = y1 - z;
+ break;
+
+ case 3:
+ x0 = x1 - z, y0 = y1 - z;
+ break;
+ }
+ }
+
+ if (this._root && this._root.length) this._root = node;
+ }
+
+ this._x0 = x0;
+ this._y0 = y0;
+ this._x1 = x1;
+ this._y1 = y1;
+ return this;
+}
+;// CONCATENATED MODULE: ./node_modules/d3-quadtree/src/data.js
+/* harmony default export */ function data() {
+ var data = [];
+ this.visit(function (node) {
+ if (!node.length) do data.push(node.data); while (node = node.next);
+ });
+ return data;
+}
+;// CONCATENATED MODULE: ./node_modules/d3-quadtree/src/extent.js
+/* harmony default export */ function extent(_) {
+ return arguments.length ? this.cover(+_[0][0], +_[0][1]).cover(+_[1][0], +_[1][1]) : isNaN(this._x0) ? undefined : [[this._x0, this._y0], [this._x1, this._y1]];
+}
+;// CONCATENATED MODULE: ./node_modules/d3-quadtree/src/quad.js
+/* harmony default export */ function quad(node, x0, y0, x1, y1) {
+ this.node = node;
+ this.x0 = x0;
+ this.y0 = y0;
+ this.x1 = x1;
+ this.y1 = y1;
+}
+;// CONCATENATED MODULE: ./node_modules/d3-quadtree/src/find.js
+
+/* harmony default export */ function find(x, y, radius) {
+ var data,
+ x0 = this._x0,
+ y0 = this._y0,
+ x1,
+ y1,
+ x2,
+ y2,
+ x3 = this._x1,
+ y3 = this._y1,
+ quads = [],
+ node = this._root,
+ q,
+ i;
+ if (node) quads.push(new quad(node, x0, y0, x3, y3));
+ if (radius == null) radius = Infinity;else {
+ x0 = x - radius, y0 = y - radius;
+ x3 = x + radius, y3 = y + radius;
+ radius *= radius;
+ }
+
+ while (q = quads.pop()) {
+ // Stop searching if this quadrant can’t contain a closer node.
+ if (!(node = q.node) || (x1 = q.x0) > x3 || (y1 = q.y0) > y3 || (x2 = q.x1) < x0 || (y2 = q.y1) < y0) continue; // Bisect the current quadrant.
+
+ if (node.length) {
+ var xm = (x1 + x2) / 2,
+ ym = (y1 + y2) / 2;
+ quads.push(new quad(node[3], xm, ym, x2, y2), new quad(node[2], x1, ym, xm, y2), new quad(node[1], xm, y1, x2, ym), new quad(node[0], x1, y1, xm, ym)); // Visit the closest quadrant first.
+
+ if (i = (y >= ym) << 1 | x >= xm) {
+ q = quads[quads.length - 1];
+ quads[quads.length - 1] = quads[quads.length - 1 - i];
+ quads[quads.length - 1 - i] = q;
+ }
+ } // Visit this point. (Visiting coincident points isn’t necessary!)
+ else {
+ var dx = x - +this._x.call(null, node.data),
+ dy = y - +this._y.call(null, node.data),
+ d2 = dx * dx + dy * dy;
+
+ if (d2 < radius) {
+ var d = Math.sqrt(radius = d2);
+ x0 = x - d, y0 = y - d;
+ x3 = x + d, y3 = y + d;
+ data = node.data;
+ }
+ }
+ }
+
+ return data;
+}
+;// CONCATENATED MODULE: ./node_modules/d3-quadtree/src/remove.js
+/* harmony default export */ function remove(d) {
+ if (isNaN(x = +this._x.call(null, d)) || isNaN(y = +this._y.call(null, d))) return this; // ignore invalid points
+
+ var parent,
+ node = this._root,
+ retainer,
+ previous,
+ next,
+ x0 = this._x0,
+ y0 = this._y0,
+ x1 = this._x1,
+ y1 = this._y1,
+ x,
+ y,
+ xm,
+ ym,
+ right,
+ bottom,
+ i,
+ j; // If the tree is empty, initialize the root as a leaf.
+
+ if (!node) return this; // Find the leaf node for the point.
+ // While descending, also retain the deepest parent with a non-removed sibling.
+
+ if (node.length) while (true) {
+ if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm;else x1 = xm;
+ if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym;else y1 = ym;
+ if (!(parent = node, node = node[i = bottom << 1 | right])) return this;
+ if (!node.length) break;
+ if (parent[i + 1 & 3] || parent[i + 2 & 3] || parent[i + 3 & 3]) retainer = parent, j = i;
+ } // Find the point to remove.
+
+ while (node.data !== d) if (!(previous = node, node = node.next)) return this;
+
+ if (next = node.next) delete node.next; // If there are multiple coincident points, remove just the point.
+
+ if (previous) return next ? previous.next = next : delete previous.next, this; // If this is the root point, remove it.
+
+ if (!parent) return this._root = next, this; // Remove this leaf.
+
+ next ? parent[i] = next : delete parent[i]; // If the parent now contains exactly one leaf, collapse superfluous parents.
+
+ if ((node = parent[0] || parent[1] || parent[2] || parent[3]) && node === (parent[3] || parent[2] || parent[1] || parent[0]) && !node.length) {
+ if (retainer) retainer[j] = node;else this._root = node;
+ }
+
+ return this;
+}
+function removeAll(data) {
+ for (var i = 0, n = data.length; i < n; ++i) this.remove(data[i]);
+
+ return this;
+}
+;// CONCATENATED MODULE: ./node_modules/d3-quadtree/src/root.js
+/* harmony default export */ function root() {
+ return this._root;
+}
+;// CONCATENATED MODULE: ./node_modules/d3-quadtree/src/size.js
+/* harmony default export */ function size() {
+ var size = 0;
+ this.visit(function (node) {
+ if (!node.length) do ++size; while (node = node.next);
+ });
+ return size;
+}
+;// CONCATENATED MODULE: ./node_modules/d3-quadtree/src/visit.js
+
+/* harmony default export */ function visit(callback) {
+ var quads = [],
+ q,
+ node = this._root,
+ child,
+ x0,
+ y0,
+ x1,
+ y1;
+ if (node) quads.push(new quad(node, this._x0, this._y0, this._x1, this._y1));
+
+ while (q = quads.pop()) {
+ if (!callback(node = q.node, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1) && node.length) {
+ var xm = (x0 + x1) / 2,
+ ym = (y0 + y1) / 2;
+ if (child = node[3]) quads.push(new quad(child, xm, ym, x1, y1));
+ if (child = node[2]) quads.push(new quad(child, x0, ym, xm, y1));
+ if (child = node[1]) quads.push(new quad(child, xm, y0, x1, ym));
+ if (child = node[0]) quads.push(new quad(child, x0, y0, xm, ym));
+ }
+ }
+
+ return this;
+}
+;// CONCATENATED MODULE: ./node_modules/d3-quadtree/src/visitAfter.js
+
+/* harmony default export */ function visitAfter(callback) {
+ var quads = [],
+ next = [],
+ q;
+ if (this._root) quads.push(new quad(this._root, this._x0, this._y0, this._x1, this._y1));
+
+ while (q = quads.pop()) {
+ var node = q.node;
+
+ if (node.length) {
+ var child,
+ x0 = q.x0,
+ y0 = q.y0,
+ x1 = q.x1,
+ y1 = q.y1,
+ xm = (x0 + x1) / 2,
+ ym = (y0 + y1) / 2;
+ if (child = node[0]) quads.push(new quad(child, x0, y0, xm, ym));
+ if (child = node[1]) quads.push(new quad(child, xm, y0, x1, ym));
+ if (child = node[2]) quads.push(new quad(child, x0, ym, xm, y1));
+ if (child = node[3]) quads.push(new quad(child, xm, ym, x1, y1));
+ }
+
+ next.push(q);
+ }
+
+ while (q = next.pop()) {
+ callback(q.node, q.x0, q.y0, q.x1, q.y1);
+ }
+
+ return this;
+}
+;// CONCATENATED MODULE: ./node_modules/d3-quadtree/src/x.js
+function defaultX(d) {
+ return d[0];
+}
+/* harmony default export */ function x(_) {
+ return arguments.length ? (this._x = _, this) : this._x;
+}
+;// CONCATENATED MODULE: ./node_modules/d3-quadtree/src/y.js
+function defaultY(d) {
+ return d[1];
+}
+/* harmony default export */ function y(_) {
+ return arguments.length ? (this._y = _, this) : this._y;
+}
+;// CONCATENATED MODULE: ./node_modules/d3-quadtree/src/quadtree.js
+
+
+
+
+
+
+
+
+
+
+
+
+function quadtree(nodes, x, y) {
+ var tree = new Quadtree(x == null ? defaultX : x, y == null ? defaultY : y, NaN, NaN, NaN, NaN);
+ return nodes == null ? tree : tree.addAll(nodes);
+}
+
+function Quadtree(x, y, x0, y0, x1, y1) {
+ this._x = x;
+ this._y = y;
+ this._x0 = x0;
+ this._y0 = y0;
+ this._x1 = x1;
+ this._y1 = y1;
+ this._root = undefined;
+}
+
+function leaf_copy(leaf) {
+ var copy = {
+ data: leaf.data
+ },
+ next = copy;
+
+ while (leaf = leaf.next) next = next.next = {
+ data: leaf.data
+ };
+
+ return copy;
+}
+
+var treeProto = quadtree.prototype = Quadtree.prototype;
+
+treeProto.copy = function () {
+ var copy = new Quadtree(this._x, this._y, this._x0, this._y0, this._x1, this._y1),
+ node = this._root,
+ nodes,
+ child;
+ if (!node) return copy;
+ if (!node.length) return copy._root = leaf_copy(node), copy;
+ nodes = [{
+ source: node,
+ target: copy._root = new Array(4)
+ }];
+
+ while (node = nodes.pop()) {
+ for (var i = 0; i < 4; ++i) {
+ if (child = node.source[i]) {
+ if (child.length) nodes.push({
+ source: child,
+ target: node.target[i] = new Array(4)
+ });else node.target[i] = leaf_copy(child);
+ }
+ }
+ }
+
+ return copy;
+};
+
+treeProto.add = add;
+treeProto.addAll = addAll;
+treeProto.cover = cover;
+treeProto.data = data;
+treeProto.extent = extent;
+treeProto.find = find;
+treeProto.remove = remove;
+treeProto.removeAll = removeAll;
+treeProto.root = root;
+treeProto.size = size;
+treeProto.visit = visit;
+treeProto.visitAfter = visitAfter;
+treeProto.x = x;
+treeProto.y = y;
+// EXTERNAL MODULE: ./node_modules/d3-octree/dist/d3-octree.js
+var d3_octree = __webpack_require__(681);
+;// CONCATENATED MODULE: ./node_modules/d3-force-3d/src/constant.js
+/* harmony default export */ function constant(x) {
+ return function () {
+ return x;
+ };
+}
+;// CONCATENATED MODULE: ./node_modules/d3-force-3d/src/jiggle.js
+/* harmony default export */ function jiggle(random) {
+ return (random() - 0.5) * 1e-6;
+}
+;// CONCATENATED MODULE: ./node_modules/d3-force-3d/src/collide.js
+
+
+
+
+
+
+function collide_x(d) {
+ return d.x + d.vx;
+}
+
+function collide_y(d) {
+ return d.y + d.vy;
+}
+
+function z(d) {
+ return d.z + d.vz;
+}
+
+/* harmony default export */ function collide(radius) {
+ var nodes,
+ nDim,
+ radii,
+ random,
+ strength = 1,
+ iterations = 1;
+ if (typeof radius !== "function") radius = constant(radius == null ? 1 : +radius);
+
+ function force() {
+ var i,
+ n = nodes.length,
+ tree,
+ node,
+ xi,
+ yi,
+ zi,
+ ri,
+ ri2;
+
+ for (var k = 0; k < iterations; ++k) {
+ tree = (nDim === 1 ? (0,d3_binarytree.binarytree)(nodes, collide_x) : nDim === 2 ? quadtree(nodes, collide_x, collide_y) : nDim === 3 ? (0,d3_octree.octree)(nodes, collide_x, collide_y, z) : null).visitAfter(prepare);
+
+ for (i = 0; i < n; ++i) {
+ node = nodes[i];
+ ri = radii[node.index], ri2 = ri * ri;
+ xi = node.x + node.vx;
+
+ if (nDim > 1) {
+ yi = node.y + node.vy;
+ }
+
+ if (nDim > 2) {
+ zi = node.z + node.vz;
+ }
+
+ tree.visit(apply);
+ }
+ }
+
+ function apply(treeNode, arg1, arg2, arg3, arg4, arg5, arg6) {
+ var args = [arg1, arg2, arg3, arg4, arg5, arg6];
+ var x0 = args[0],
+ y0 = args[1],
+ z0 = args[2],
+ x1 = args[nDim],
+ y1 = args[nDim + 1],
+ z1 = args[nDim + 2];
+ var data = treeNode.data,
+ rj = treeNode.r,
+ r = ri + rj;
+
+ if (data) {
+ if (data.index > node.index) {
+ var x = xi - data.x - data.vx,
+ y = nDim > 1 ? yi - data.y - data.vy : 0,
+ z = nDim > 2 ? zi - data.z - data.vz : 0,
+ l = x * x + y * y + z * z;
+
+ if (l < r * r) {
+ if (x === 0) x = jiggle(random), l += x * x;
+ if (nDim > 1 && y === 0) y = jiggle(random), l += y * y;
+ if (nDim > 2 && z === 0) z = jiggle(random), l += z * z;
+ l = (r - (l = Math.sqrt(l))) / l * strength;
+ node.vx += (x *= l) * (r = (rj *= rj) / (ri2 + rj));
+
+ if (nDim > 1) {
+ node.vy += (y *= l) * r;
+ }
+
+ if (nDim > 2) {
+ node.vz += (z *= l) * r;
+ }
+
+ data.vx -= x * (r = 1 - r);
+
+ if (nDim > 1) {
+ data.vy -= y * r;
+ }
+
+ if (nDim > 2) {
+ data.vz -= z * r;
+ }
+ }
+ }
+
+ return;
+ }
+
+ return x0 > xi + r || x1 < xi - r || nDim > 1 && (y0 > yi + r || y1 < yi - r) || nDim > 2 && (z0 > zi + r || z1 < zi - r);
+ }
+ }
+
+ function prepare(treeNode) {
+ if (treeNode.data) return treeNode.r = radii[treeNode.data.index];
+
+ for (var i = treeNode.r = 0; i < Math.pow(2, nDim); ++i) {
+ if (treeNode[i] && treeNode[i].r > treeNode.r) {
+ treeNode.r = treeNode[i].r;
+ }
+ }
+ }
+
+ function initialize() {
+ if (!nodes) return;
+ var i,
+ n = nodes.length,
+ node;
+ radii = new Array(n);
+
+ for (i = 0; i < n; ++i) node = nodes[i], radii[node.index] = +radius(node, i, nodes);
+ }
+
+ force.initialize = function (_nodes, ...args) {
+ nodes = _nodes;
+ random = args.find(arg => typeof arg === 'function') || Math.random;
+ nDim = args.find(arg => [1, 2, 3].includes(arg)) || 2;
+ initialize();
+ };
+
+ force.iterations = function (_) {
+ return arguments.length ? (iterations = +_, force) : iterations;
+ };
+
+ force.strength = function (_) {
+ return arguments.length ? (strength = +_, force) : strength;
+ };
+
+ force.radius = function (_) {
+ return arguments.length ? (radius = typeof _ === "function" ? _ : constant(+_), initialize(), force) : radius;
+ };
+
+ return force;
+}
+;// CONCATENATED MODULE: ./node_modules/d3-force-3d/src/link.js
+
+
+
+function index(d) {
+ return d.index;
+}
+
+function link_find(nodeById, nodeId) {
+ var node = nodeById.get(nodeId);
+ if (!node) throw new Error("node not found: " + nodeId);
+ return node;
+}
+
+/* harmony default export */ function src_link(links) {
+ var id = index,
+ strength = defaultStrength,
+ strengths,
+ distance = constant(30),
+ distances,
+ nodes,
+ nDim,
+ count,
+ bias,
+ random,
+ iterations = 1;
+ if (links == null) links = [];
+
+ function defaultStrength(link) {
+ return 1 / Math.min(count[link.source.index], count[link.target.index]);
+ }
+
+ function force(alpha) {
+ for (var k = 0, n = links.length; k < iterations; ++k) {
+ for (var i = 0, link, source, target, x = 0, y = 0, z = 0, l, b; i < n; ++i) {
+ link = links[i], source = link.source, target = link.target;
+ x = target.x + target.vx - source.x - source.vx || jiggle(random);
+
+ if (nDim > 1) {
+ y = target.y + target.vy - source.y - source.vy || jiggle(random);
+ }
+
+ if (nDim > 2) {
+ z = target.z + target.vz - source.z - source.vz || jiggle(random);
+ }
+
+ l = Math.sqrt(x * x + y * y + z * z);
+ l = (l - distances[i]) / l * alpha * strengths[i];
+ x *= l, y *= l, z *= l;
+ target.vx -= x * (b = bias[i]);
+
+ if (nDim > 1) {
+ target.vy -= y * b;
+ }
+
+ if (nDim > 2) {
+ target.vz -= z * b;
+ }
+
+ source.vx += x * (b = 1 - b);
+
+ if (nDim > 1) {
+ source.vy += y * b;
+ }
+
+ if (nDim > 2) {
+ source.vz += z * b;
+ }
+ }
+ }
+ }
+
+ function initialize() {
+ if (!nodes) return;
+ var i,
+ n = nodes.length,
+ m = links.length,
+ nodeById = new Map(nodes.map((d, i) => [id(d, i, nodes), d])),
+ link;
+
+ for (i = 0, count = new Array(n); i < m; ++i) {
+ link = links[i], link.index = i;
+ if (typeof link.source !== "object") link.source = link_find(nodeById, link.source);
+ if (typeof link.target !== "object") link.target = link_find(nodeById, link.target);
+ count[link.source.index] = (count[link.source.index] || 0) + 1;
+ count[link.target.index] = (count[link.target.index] || 0) + 1;
+ }
+
+ for (i = 0, bias = new Array(m); i < m; ++i) {
+ link = links[i], bias[i] = count[link.source.index] / (count[link.source.index] + count[link.target.index]);
+ }
+
+ strengths = new Array(m), initializeStrength();
+ distances = new Array(m), initializeDistance();
+ }
+
+ function initializeStrength() {
+ if (!nodes) return;
+
+ for (var i = 0, n = links.length; i < n; ++i) {
+ strengths[i] = +strength(links[i], i, links);
+ }
+ }
+
+ function initializeDistance() {
+ if (!nodes) return;
+
+ for (var i = 0, n = links.length; i < n; ++i) {
+ distances[i] = +distance(links[i], i, links);
+ }
+ }
+
+ force.initialize = function (_nodes, ...args) {
+ nodes = _nodes;
+ random = args.find(arg => typeof arg === 'function') || Math.random;
+ nDim = args.find(arg => [1, 2, 3].includes(arg)) || 2;
+ initialize();
+ };
+
+ force.links = function (_) {
+ return arguments.length ? (links = _, initialize(), force) : links;
+ };
+
+ force.id = function (_) {
+ return arguments.length ? (id = _, force) : id;
+ };
+
+ force.iterations = function (_) {
+ return arguments.length ? (iterations = +_, force) : iterations;
+ };
+
+ force.strength = function (_) {
+ return arguments.length ? (strength = typeof _ === "function" ? _ : constant(+_), initializeStrength(), force) : strength;
+ };
+
+ force.distance = function (_) {
+ return arguments.length ? (distance = typeof _ === "function" ? _ : constant(+_), initializeDistance(), force) : distance;
+ };
+
+ return force;
+}
+;// CONCATENATED MODULE: ./node_modules/d3-dispatch/src/dispatch.js
+var noop = {
+ value: () => {}
+};
+
+function dispatch() {
+ for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {
+ if (!(t = arguments[i] + "") || t in _ || /[\s.]/.test(t)) throw new Error("illegal type: " + t);
+ _[t] = [];
+ }
+
+ return new Dispatch(_);
+}
+
+function Dispatch(_) {
+ this._ = _;
+}
+
+function parseTypenames(typenames, types) {
+ return typenames.trim().split(/^|\s+/).map(function (t) {
+ var name = "",
+ i = t.indexOf(".");
+ if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);
+ if (t && !types.hasOwnProperty(t)) throw new Error("unknown type: " + t);
+ return {
+ type: t,
+ name: name
+ };
+ });
+}
+
+Dispatch.prototype = dispatch.prototype = {
+ constructor: Dispatch,
+ on: function (typename, callback) {
+ var _ = this._,
+ T = parseTypenames(typename + "", _),
+ t,
+ i = -1,
+ n = T.length; // If no callback was specified, return the callback of the given type and name.
+
+ if (arguments.length < 2) {
+ while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;
+
+ return;
+ } // If a type was specified, set the callback for the given type and name.
+ // Otherwise, if a null callback was specified, remove callbacks of the given name.
+
+
+ if (callback != null && typeof callback !== "function") throw new Error("invalid callback: " + callback);
+
+ while (++i < n) {
+ if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null);
+ }
+
+ return this;
+ },
+ copy: function () {
+ var copy = {},
+ _ = this._;
+
+ for (var t in _) copy[t] = _[t].slice();
+
+ return new Dispatch(copy);
+ },
+ call: function (type, that) {
+ if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];
+ if (!this._.hasOwnProperty(type)) throw new Error("unknown type: " + type);
+
+ for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);
+ },
+ apply: function (type, that, args) {
+ if (!this._.hasOwnProperty(type)) throw new Error("unknown type: " + type);
+
+ for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);
+ }
+};
+
+function get(type, name) {
+ for (var i = 0, n = type.length, c; i < n; ++i) {
+ if ((c = type[i]).name === name) {
+ return c.value;
+ }
+ }
+}
+
+function set(type, name, callback) {
+ for (var i = 0, n = type.length; i < n; ++i) {
+ if (type[i].name === name) {
+ type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1));
+ break;
+ }
+ }
+
+ if (callback != null) type.push({
+ name: name,
+ value: callback
+ });
+ return type;
+}
+
+/* harmony default export */ var src_dispatch = (dispatch);
+;// CONCATENATED MODULE: ./node_modules/d3-timer/src/timer.js
+var timer_frame = 0,
+ // is an animation frame pending?
+timeout = 0,
+ // is a timeout pending?
+interval = 0,
+ // are any timers active?
+pokeDelay = 1000,
+ // how frequently we check for clock skew
+taskHead,
+ taskTail,
+ clockLast = 0,
+ clockNow = 0,
+ clockSkew = 0,
+ clock = typeof performance === "object" && performance.now ? performance : Date,
+ setFrame = false ? 0 : function (f) {
+ setTimeout(f, 17);
+};
+function now() {
+ return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);
+}
+
+function clearNow() {
+ clockNow = 0;
+}
+
+function Timer() {
+ this._call = this._time = this._next = null;
+}
+Timer.prototype = timer.prototype = {
+ constructor: Timer,
+ restart: function (callback, delay, time) {
+ if (typeof callback !== "function") throw new TypeError("callback is not a function");
+ time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);
+
+ if (!this._next && taskTail !== this) {
+ if (taskTail) taskTail._next = this;else taskHead = this;
+ taskTail = this;
+ }
+
+ this._call = callback;
+ this._time = time;
+ sleep();
+ },
+ stop: function () {
+ if (this._call) {
+ this._call = null;
+ this._time = Infinity;
+ sleep();
+ }
+ }
+};
+function timer(callback, delay, time) {
+ var t = new Timer();
+ t.restart(callback, delay, time);
+ return t;
+}
+function timerFlush() {
+ now(); // Get the current time, if not already set.
+
+ ++timer_frame; // Pretend we’ve set an alarm, if we haven’t already.
+
+ var t = taskHead,
+ e;
+
+ while (t) {
+ if ((e = clockNow - t._time) >= 0) t._call.call(undefined, e);
+ t = t._next;
+ }
+
+ --timer_frame;
+}
+
+function wake() {
+ clockNow = (clockLast = clock.now()) + clockSkew;
+ timer_frame = timeout = 0;
+
+ try {
+ timerFlush();
+ } finally {
+ timer_frame = 0;
+ nap();
+ clockNow = 0;
+ }
+}
+
+function poke() {
+ var now = clock.now(),
+ delay = now - clockLast;
+ if (delay > pokeDelay) clockSkew -= delay, clockLast = now;
+}
+
+function nap() {
+ var t0,
+ t1 = taskHead,
+ t2,
+ time = Infinity;
+
+ while (t1) {
+ if (t1._call) {
+ if (time > t1._time) time = t1._time;
+ t0 = t1, t1 = t1._next;
+ } else {
+ t2 = t1._next, t1._next = null;
+ t1 = t0 ? t0._next = t2 : taskHead = t2;
+ }
+ }
+
+ taskTail = t0;
+ sleep(time);
+}
+
+function sleep(time) {
+ if (timer_frame) return; // Soonest alarm already set, or will be.
+
+ if (timeout) timeout = clearTimeout(timeout);
+ var delay = time - clockNow; // Strictly less than if we recomputed clockNow.
+
+ if (delay > 24) {
+ if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew);
+ if (interval) interval = clearInterval(interval);
+ } else {
+ if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);
+ timer_frame = 1, setFrame(wake);
+ }
+}
+;// CONCATENATED MODULE: ./node_modules/d3-force-3d/src/lcg.js
+// https://en.wikipedia.org/wiki/Linear_congruential_generator#Parameters_in_common_use
+const a = 1664525;
+const c = 1013904223;
+const m = 4294967296; // 2^32
+
+/* harmony default export */ function lcg() {
+ let s = 1;
+ return () => (s = (a * s + c) % m) / m;
+}
+;// CONCATENATED MODULE: ./node_modules/d3-force-3d/src/simulation.js
+
+
+
+var MAX_DIMENSIONS = 3;
+function simulation_x(d) {
+ return d.x;
+}
+function simulation_y(d) {
+ return d.y;
+}
+function simulation_z(d) {
+ return d.z;
+}
+var initialRadius = 10,
+ initialAngleRoll = Math.PI * (3 - Math.sqrt(5)),
+ // Golden ratio angle
+initialAngleYaw = Math.PI * 20 / (9 + Math.sqrt(221)); // Markov irrational number
+
+/* harmony default export */ function simulation(nodes, numDimensions) {
+ numDimensions = numDimensions || 2;
+ var nDim = Math.min(MAX_DIMENSIONS, Math.max(1, Math.round(numDimensions))),
+ simulation,
+ alpha = 1,
+ alphaMin = 0.001,
+ alphaDecay = 1 - Math.pow(alphaMin, 1 / 300),
+ alphaTarget = 0,
+ velocityDecay = 0.6,
+ forces = new Map(),
+ stepper = timer(step),
+ event = src_dispatch("tick", "end"),
+ random = lcg();
+ if (nodes == null) nodes = [];
+
+ function step() {
+ tick();
+ event.call("tick", simulation);
+
+ if (alpha < alphaMin) {
+ stepper.stop();
+ event.call("end", simulation);
+ }
+ }
+
+ function tick(iterations) {
+ var i,
+ n = nodes.length,
+ node;
+ if (iterations === undefined) iterations = 1;
+
+ for (var k = 0; k < iterations; ++k) {
+ alpha += (alphaTarget - alpha) * alphaDecay;
+ forces.forEach(function (force) {
+ force(alpha);
+ });
+
+ for (i = 0; i < n; ++i) {
+ node = nodes[i];
+ if (node.fx == null) node.x += node.vx *= velocityDecay;else node.x = node.fx, node.vx = 0;
+
+ if (nDim > 1) {
+ if (node.fy == null) node.y += node.vy *= velocityDecay;else node.y = node.fy, node.vy = 0;
+ }
+
+ if (nDim > 2) {
+ if (node.fz == null) node.z += node.vz *= velocityDecay;else node.z = node.fz, node.vz = 0;
+ }
+ }
+ }
+
+ return simulation;
+ }
+
+ function initializeNodes() {
+ for (var i = 0, n = nodes.length, node; i < n; ++i) {
+ node = nodes[i], node.index = i;
+ if (node.fx != null) node.x = node.fx;
+ if (node.fy != null) node.y = node.fy;
+ if (node.fz != null) node.z = node.fz;
+
+ if (isNaN(node.x) || nDim > 1 && isNaN(node.y) || nDim > 2 && isNaN(node.z)) {
+ var radius = initialRadius * (nDim > 2 ? Math.cbrt(0.5 + i) : nDim > 1 ? Math.sqrt(0.5 + i) : i),
+ rollAngle = i * initialAngleRoll,
+ yawAngle = i * initialAngleYaw;
+
+ if (nDim === 1) {
+ node.x = radius;
+ } else if (nDim === 2) {
+ node.x = radius * Math.cos(rollAngle);
+ node.y = radius * Math.sin(rollAngle);
+ } else {
+ // 3 dimensions: use spherical distribution along 2 irrational number angles
+ node.x = radius * Math.sin(rollAngle) * Math.cos(yawAngle);
+ node.y = radius * Math.cos(rollAngle);
+ node.z = radius * Math.sin(rollAngle) * Math.sin(yawAngle);
+ }
+ }
+
+ if (isNaN(node.vx) || nDim > 1 && isNaN(node.vy) || nDim > 2 && isNaN(node.vz)) {
+ node.vx = 0;
+
+ if (nDim > 1) {
+ node.vy = 0;
+ }
+
+ if (nDim > 2) {
+ node.vz = 0;
+ }
+ }
+ }
+ }
+
+ function initializeForce(force) {
+ if (force.initialize) force.initialize(nodes, random, nDim);
+ return force;
+ }
+
+ initializeNodes();
+ return simulation = {
+ tick: tick,
+ restart: function () {
+ return stepper.restart(step), simulation;
+ },
+ stop: function () {
+ return stepper.stop(), simulation;
+ },
+ numDimensions: function (_) {
+ return arguments.length ? (nDim = Math.min(MAX_DIMENSIONS, Math.max(1, Math.round(_))), forces.forEach(initializeForce), simulation) : nDim;
+ },
+ nodes: function (_) {
+ return arguments.length ? (nodes = _, initializeNodes(), forces.forEach(initializeForce), simulation) : nodes;
+ },
+ alpha: function (_) {
+ return arguments.length ? (alpha = +_, simulation) : alpha;
+ },
+ alphaMin: function (_) {
+ return arguments.length ? (alphaMin = +_, simulation) : alphaMin;
+ },
+ alphaDecay: function (_) {
+ return arguments.length ? (alphaDecay = +_, simulation) : +alphaDecay;
+ },
+ alphaTarget: function (_) {
+ return arguments.length ? (alphaTarget = +_, simulation) : alphaTarget;
+ },
+ velocityDecay: function (_) {
+ return arguments.length ? (velocityDecay = 1 - _, simulation) : 1 - velocityDecay;
+ },
+ randomSource: function (_) {
+ return arguments.length ? (random = _, forces.forEach(initializeForce), simulation) : random;
+ },
+ force: function (name, _) {
+ return arguments.length > 1 ? (_ == null ? forces.delete(name) : forces.set(name, initializeForce(_)), simulation) : forces.get(name);
+ },
+ find: function () {
+ var args = Array.prototype.slice.call(arguments);
+ var x = args.shift() || 0,
+ y = (nDim > 1 ? args.shift() : null) || 0,
+ z = (nDim > 2 ? args.shift() : null) || 0,
+ radius = args.shift() || Infinity;
+ var i = 0,
+ n = nodes.length,
+ dx,
+ dy,
+ dz,
+ d2,
+ node,
+ closest;
+ radius *= radius;
+
+ for (i = 0; i < n; ++i) {
+ node = nodes[i];
+ dx = x - node.x;
+ dy = y - (node.y || 0);
+ dz = z - (node.z || 0);
+ d2 = dx * dx + dy * dy + dz * dz;
+ if (d2 < radius) closest = node, radius = d2;
+ }
+
+ return closest;
+ },
+ on: function (name, _) {
+ return arguments.length > 1 ? (event.on(name, _), simulation) : event.on(name);
+ }
+ };
+}
+;// CONCATENATED MODULE: ./node_modules/d3-force-3d/src/manyBody.js
+
+
+
+
+
+
+/* harmony default export */ function manyBody() {
+ var nodes,
+ nDim,
+ node,
+ random,
+ alpha,
+ strength = constant(-30),
+ strengths,
+ distanceMin2 = 1,
+ distanceMax2 = Infinity,
+ theta2 = 0.81;
+
+ function force(_) {
+ var i,
+ n = nodes.length,
+ tree = (nDim === 1 ? (0,d3_binarytree.binarytree)(nodes, simulation_x) : nDim === 2 ? quadtree(nodes, simulation_x, simulation_y) : nDim === 3 ? (0,d3_octree.octree)(nodes, simulation_x, simulation_y, simulation_z) : null).visitAfter(accumulate);
+
+ for (alpha = _, i = 0; i < n; ++i) node = nodes[i], tree.visit(apply);
+ }
+
+ function initialize() {
+ if (!nodes) return;
+ var i,
+ n = nodes.length,
+ node;
+ strengths = new Array(n);
+
+ for (i = 0; i < n; ++i) node = nodes[i], strengths[node.index] = +strength(node, i, nodes);
+ }
+
+ function accumulate(treeNode) {
+ var strength = 0,
+ q,
+ c,
+ weight = 0,
+ x,
+ y,
+ z,
+ i;
+ var numChildren = treeNode.length; // For internal nodes, accumulate forces from children.
+
+ if (numChildren) {
+ for (x = y = z = i = 0; i < numChildren; ++i) {
+ if ((q = treeNode[i]) && (c = Math.abs(q.value))) {
+ strength += q.value, weight += c, x += c * (q.x || 0), y += c * (q.y || 0), z += c * (q.z || 0);
+ }
+ }
+
+ strength *= Math.sqrt(4 / numChildren); // scale accumulated strength according to number of dimensions
+
+ treeNode.x = x / weight;
+
+ if (nDim > 1) {
+ treeNode.y = y / weight;
+ }
+
+ if (nDim > 2) {
+ treeNode.z = z / weight;
+ }
+ } // For leaf nodes, accumulate forces from coincident nodes.
+ else {
+ q = treeNode;
+ q.x = q.data.x;
+
+ if (nDim > 1) {
+ q.y = q.data.y;
+ }
+
+ if (nDim > 2) {
+ q.z = q.data.z;
+ }
+
+ do strength += strengths[q.data.index]; while (q = q.next);
+ }
+
+ treeNode.value = strength;
+ }
+
+ function apply(treeNode, x1, arg1, arg2, arg3) {
+ if (!treeNode.value) return true;
+ var x2 = [arg1, arg2, arg3][nDim - 1];
+ var x = treeNode.x - node.x,
+ y = nDim > 1 ? treeNode.y - node.y : 0,
+ z = nDim > 2 ? treeNode.z - node.z : 0,
+ w = x2 - x1,
+ l = x * x + y * y + z * z; // Apply the Barnes-Hut approximation if possible.
+ // Limit forces for very close nodes; randomize direction if coincident.
+
+ if (w * w / theta2 < l) {
+ if (l < distanceMax2) {
+ if (x === 0) x = jiggle(random), l += x * x;
+ if (nDim > 1 && y === 0) y = jiggle(random), l += y * y;
+ if (nDim > 2 && z === 0) z = jiggle(random), l += z * z;
+ if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l);
+ node.vx += x * treeNode.value * alpha / l;
+
+ if (nDim > 1) {
+ node.vy += y * treeNode.value * alpha / l;
+ }
+
+ if (nDim > 2) {
+ node.vz += z * treeNode.value * alpha / l;
+ }
+ }
+
+ return true;
+ } // Otherwise, process points directly.
+ else if (treeNode.length || l >= distanceMax2) return; // Limit forces for very close nodes; randomize direction if coincident.
+
+
+ if (treeNode.data !== node || treeNode.next) {
+ if (x === 0) x = jiggle(random), l += x * x;
+ if (nDim > 1 && y === 0) y = jiggle(random), l += y * y;
+ if (nDim > 2 && z === 0) z = jiggle(random), l += z * z;
+ if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l);
+ }
+
+ do if (treeNode.data !== node) {
+ w = strengths[treeNode.data.index] * alpha / l;
+ node.vx += x * w;
+
+ if (nDim > 1) {
+ node.vy += y * w;
+ }
+
+ if (nDim > 2) {
+ node.vz += z * w;
+ }
+ } while (treeNode = treeNode.next);
+ }
+
+ force.initialize = function (_nodes, ...args) {
+ nodes = _nodes;
+ random = args.find(arg => typeof arg === 'function') || Math.random;
+ nDim = args.find(arg => [1, 2, 3].includes(arg)) || 2;
+ initialize();
+ };
+
+ force.strength = function (_) {
+ return arguments.length ? (strength = typeof _ === "function" ? _ : constant(+_), initialize(), force) : strength;
+ };
+
+ force.distanceMin = function (_) {
+ return arguments.length ? (distanceMin2 = _ * _, force) : Math.sqrt(distanceMin2);
+ };
+
+ force.distanceMax = function (_) {
+ return arguments.length ? (distanceMax2 = _ * _, force) : Math.sqrt(distanceMax2);
+ };
+
+ force.theta = function (_) {
+ return arguments.length ? (theta2 = _ * _, force) : Math.sqrt(theta2);
+ };
+
+ return force;
+}
+;// CONCATENATED MODULE: ./node_modules/d3-force-3d/src/radial.js
+
+/* harmony default export */ function radial(radius, x, y, z) {
+ var nodes,
+ nDim,
+ strength = constant(0.1),
+ strengths,
+ radiuses;
+ if (typeof radius !== "function") radius = constant(+radius);
+ if (x == null) x = 0;
+ if (y == null) y = 0;
+ if (z == null) z = 0;
+
+ function force(alpha) {
+ for (var i = 0, n = nodes.length; i < n; ++i) {
+ var node = nodes[i],
+ dx = node.x - x || 1e-6,
+ dy = (node.y || 0) - y || 1e-6,
+ dz = (node.z || 0) - z || 1e-6,
+ r = Math.sqrt(dx * dx + dy * dy + dz * dz),
+ k = (radiuses[i] - r) * strengths[i] * alpha / r;
+ node.vx += dx * k;
+
+ if (nDim > 1) {
+ node.vy += dy * k;
+ }
+
+ if (nDim > 2) {
+ node.vz += dz * k;
+ }
+ }
+ }
+
+ function initialize() {
+ if (!nodes) return;
+ var i,
+ n = nodes.length;
+ strengths = new Array(n);
+ radiuses = new Array(n);
+
+ for (i = 0; i < n; ++i) {
+ radiuses[i] = +radius(nodes[i], i, nodes);
+ strengths[i] = isNaN(radiuses[i]) ? 0 : +strength(nodes[i], i, nodes);
+ }
+ }
+
+ force.initialize = function (initNodes, ...args) {
+ nodes = initNodes;
+ nDim = args.find(arg => [1, 2, 3].includes(arg)) || 2;
+ initialize();
+ };
+
+ force.strength = function (_) {
+ return arguments.length ? (strength = typeof _ === "function" ? _ : constant(+_), initialize(), force) : strength;
+ };
+
+ force.radius = function (_) {
+ return arguments.length ? (radius = typeof _ === "function" ? _ : constant(+_), initialize(), force) : radius;
+ };
+
+ force.x = function (_) {
+ return arguments.length ? (x = +_, force) : x;
+ };
+
+ force.y = function (_) {
+ return arguments.length ? (y = +_, force) : y;
+ };
+
+ force.z = function (_) {
+ return arguments.length ? (z = +_, force) : z;
+ };
+
+ return force;
+}
+;// CONCATENATED MODULE: ./node_modules/d3-force-3d/src/x.js
+
+/* harmony default export */ function src_x(x) {
+ var strength = constant(0.1),
+ nodes,
+ strengths,
+ xz;
+ if (typeof x !== "function") x = constant(x == null ? 0 : +x);
+
+ function force(alpha) {
+ for (var i = 0, n = nodes.length, node; i < n; ++i) {
+ node = nodes[i], node.vx += (xz[i] - node.x) * strengths[i] * alpha;
+ }
+ }
+
+ function initialize() {
+ if (!nodes) return;
+ var i,
+ n = nodes.length;
+ strengths = new Array(n);
+ xz = new Array(n);
+
+ for (i = 0; i < n; ++i) {
+ strengths[i] = isNaN(xz[i] = +x(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes);
+ }
+ }
+
+ force.initialize = function (_) {
+ nodes = _;
+ initialize();
+ };
+
+ force.strength = function (_) {
+ return arguments.length ? (strength = typeof _ === "function" ? _ : constant(+_), initialize(), force) : strength;
+ };
+
+ force.x = function (_) {
+ return arguments.length ? (x = typeof _ === "function" ? _ : constant(+_), initialize(), force) : x;
+ };
+
+ return force;
+}
+;// CONCATENATED MODULE: ./node_modules/d3-force-3d/src/y.js
+
+/* harmony default export */ function src_y(y) {
+ var strength = constant(0.1),
+ nodes,
+ strengths,
+ yz;
+ if (typeof y !== "function") y = constant(y == null ? 0 : +y);
+
+ function force(alpha) {
+ for (var i = 0, n = nodes.length, node; i < n; ++i) {
+ node = nodes[i], node.vy += (yz[i] - node.y) * strengths[i] * alpha;
+ }
+ }
+
+ function initialize() {
+ if (!nodes) return;
+ var i,
+ n = nodes.length;
+ strengths = new Array(n);
+ yz = new Array(n);
+
+ for (i = 0; i < n; ++i) {
+ strengths[i] = isNaN(yz[i] = +y(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes);
+ }
+ }
+
+ force.initialize = function (_) {
+ nodes = _;
+ initialize();
+ };
+
+ force.strength = function (_) {
+ return arguments.length ? (strength = typeof _ === "function" ? _ : constant(+_), initialize(), force) : strength;
+ };
+
+ force.y = function (_) {
+ return arguments.length ? (y = typeof _ === "function" ? _ : constant(+_), initialize(), force) : y;
+ };
+
+ return force;
+}
+;// CONCATENATED MODULE: ./node_modules/d3-force-3d/src/z.js
+
+/* harmony default export */ function src_z(z) {
+ var strength = constant(0.1),
+ nodes,
+ strengths,
+ zz;
+ if (typeof z !== "function") z = constant(z == null ? 0 : +z);
+
+ function force(alpha) {
+ for (var i = 0, n = nodes.length, node; i < n; ++i) {
+ node = nodes[i], node.vz += (zz[i] - node.z) * strengths[i] * alpha;
+ }
+ }
+
+ function initialize() {
+ if (!nodes) return;
+ var i,
+ n = nodes.length;
+ strengths = new Array(n);
+ zz = new Array(n);
+
+ for (i = 0; i < n; ++i) {
+ strengths[i] = isNaN(zz[i] = +z(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes);
+ }
+ }
+
+ force.initialize = function (_) {
+ nodes = _;
+ initialize();
+ };
+
+ force.strength = function (_) {
+ return arguments.length ? (strength = typeof _ === "function" ? _ : constant(+_), initialize(), force) : strength;
+ };
+
+ force.z = function (_) {
+ return arguments.length ? (z = typeof _ === "function" ? _ : constant(+_), initialize(), force) : z;
+ };
+
+ return force;
+}
+;// CONCATENATED MODULE: ./node_modules/d3-force-3d/src/index.js
+
+
+
+
+
+
+
+
+
+
+/***/ }),
+
+/***/ 681:
+/***/ (function(__unused_webpack_module, exports) {
+
+// https://github.com/vasturiano/d3-octree v0.2.0 Copyright 2021 Vasco Asturiano
+(function (global, factory) {
+ true ? factory(exports) : 0;
+})(this, function (exports) {
+ 'use strict';
+
+ function tree_add(d) {
+ var x = +this._x.call(null, d),
+ y = +this._y.call(null, d),
+ z = +this._z.call(null, d);
+ return add(this.cover(x, y, z), x, y, z, d);
+ }
+
+ function add(tree, x, y, z, d) {
+ if (isNaN(x) || isNaN(y) || isNaN(z)) return tree; // ignore invalid points
+
+ var parent,
+ node = tree._root,
+ leaf = {
+ data: d
+ },
+ x0 = tree._x0,
+ y0 = tree._y0,
+ z0 = tree._z0,
+ x1 = tree._x1,
+ y1 = tree._y1,
+ z1 = tree._z1,
+ xm,
+ ym,
+ zm,
+ xp,
+ yp,
+ zp,
+ right,
+ bottom,
+ deep,
+ i,
+ j; // If the tree is empty, initialize the root as a leaf.
+
+ if (!node) return tree._root = leaf, tree; // Find the existing leaf for the new point, or add it.
+
+ while (node.length) {
+ if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm;else x1 = xm;
+ if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym;else y1 = ym;
+ if (deep = z >= (zm = (z0 + z1) / 2)) z0 = zm;else z1 = zm;
+ if (parent = node, !(node = node[i = deep << 2 | bottom << 1 | right])) return parent[i] = leaf, tree;
+ } // Is the new point is exactly coincident with the existing point?
+
+
+ xp = +tree._x.call(null, node.data);
+ yp = +tree._y.call(null, node.data);
+ zp = +tree._z.call(null, node.data);
+ if (x === xp && y === yp && z === zp) return leaf.next = node, parent ? parent[i] = leaf : tree._root = leaf, tree; // Otherwise, split the leaf node until the old and new point are separated.
+
+ do {
+ parent = parent ? parent[i] = new Array(8) : tree._root = new Array(8);
+ if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm;else x1 = xm;
+ if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym;else y1 = ym;
+ if (deep = z >= (zm = (z0 + z1) / 2)) z0 = zm;else z1 = zm;
+ } while ((i = deep << 2 | bottom << 1 | right) === (j = (zp >= zm) << 2 | (yp >= ym) << 1 | xp >= xm));
+
+ return parent[j] = node, parent[i] = leaf, tree;
+ }
+
+ function addAll(data) {
+ var d,
+ i,
+ n = data.length,
+ x,
+ y,
+ z,
+ xz = new Array(n),
+ yz = new Array(n),
+ zz = new Array(n),
+ x0 = Infinity,
+ y0 = Infinity,
+ z0 = Infinity,
+ x1 = -Infinity,
+ y1 = -Infinity,
+ z1 = -Infinity; // Compute the points and their extent.
+
+ for (i = 0; i < n; ++i) {
+ if (isNaN(x = +this._x.call(null, d = data[i])) || isNaN(y = +this._y.call(null, d)) || isNaN(z = +this._z.call(null, d))) continue;
+ xz[i] = x;
+ yz[i] = y;
+ zz[i] = z;
+ if (x < x0) x0 = x;
+ if (x > x1) x1 = x;
+ if (y < y0) y0 = y;
+ if (y > y1) y1 = y;
+ if (z < z0) z0 = z;
+ if (z > z1) z1 = z;
+ } // If there were no (valid) points, abort.
+
+
+ if (x0 > x1 || y0 > y1 || z0 > z1) return this; // Expand the tree to cover the new points.
+
+ this.cover(x0, y0, z0).cover(x1, y1, z1); // Add the new points.
+
+ for (i = 0; i < n; ++i) {
+ add(this, xz[i], yz[i], zz[i], data[i]);
+ }
+
+ return this;
+ }
+
+ function tree_cover(x, y, z) {
+ if (isNaN(x = +x) || isNaN(y = +y) || isNaN(z = +z)) return this; // ignore invalid points
+
+ var x0 = this._x0,
+ y0 = this._y0,
+ z0 = this._z0,
+ x1 = this._x1,
+ y1 = this._y1,
+ z1 = this._z1; // If the octree has no extent, initialize them.
+ // Integer extent are necessary so that if we later double the extent,
+ // the existing octant boundaries don’t change due to floating point error!
+
+ if (isNaN(x0)) {
+ x1 = (x0 = Math.floor(x)) + 1;
+ y1 = (y0 = Math.floor(y)) + 1;
+ z1 = (z0 = Math.floor(z)) + 1;
+ } // Otherwise, double repeatedly to cover.
+ else {
+ var t = x1 - x0 || 1,
+ node = this._root,
+ parent,
+ i;
+
+ while (x0 > x || x >= x1 || y0 > y || y >= y1 || z0 > z || z >= z1) {
+ i = (z < z0) << 2 | (y < y0) << 1 | x < x0;
+ parent = new Array(8), parent[i] = node, node = parent, t *= 2;
+
+ switch (i) {
+ case 0:
+ x1 = x0 + t, y1 = y0 + t, z1 = z0 + t;
+ break;
+
+ case 1:
+ x0 = x1 - t, y1 = y0 + t, z1 = z0 + t;
+ break;
+
+ case 2:
+ x1 = x0 + t, y0 = y1 - t, z1 = z0 + t;
+ break;
+
+ case 3:
+ x0 = x1 - t, y0 = y1 - t, z1 = z0 + t;
+ break;
+
+ case 4:
+ x1 = x0 + t, y1 = y0 + t, z0 = z1 - t;
+ break;
+
+ case 5:
+ x0 = x1 - t, y1 = y0 + t, z0 = z1 - t;
+ break;
+
+ case 6:
+ x1 = x0 + t, y0 = y1 - t, z0 = z1 - t;
+ break;
+
+ case 7:
+ x0 = x1 - t, y0 = y1 - t, z0 = z1 - t;
+ break;
+ }
+ }
+
+ if (this._root && this._root.length) this._root = node;
+ }
+
+ this._x0 = x0;
+ this._y0 = y0;
+ this._z0 = z0;
+ this._x1 = x1;
+ this._y1 = y1;
+ this._z1 = z1;
+ return this;
+ }
+
+ function tree_data() {
+ var data = [];
+ this.visit(function (node) {
+ if (!node.length) do data.push(node.data); while (node = node.next);
+ });
+ return data;
+ }
+
+ function tree_extent(_) {
+ return arguments.length ? this.cover(+_[0][0], +_[0][1], +_[0][2]).cover(+_[1][0], +_[1][1], +_[1][2]) : isNaN(this._x0) ? undefined : [[this._x0, this._y0, this._z0], [this._x1, this._y1, this._z1]];
+ }
+
+ function Octant(node, x0, y0, z0, x1, y1, z1) {
+ this.node = node;
+ this.x0 = x0;
+ this.y0 = y0;
+ this.z0 = z0;
+ this.x1 = x1;
+ this.y1 = y1;
+ this.z1 = z1;
+ }
+
+ function tree_find(x, y, z, radius) {
+ var data,
+ x0 = this._x0,
+ y0 = this._y0,
+ z0 = this._z0,
+ x1,
+ y1,
+ z1,
+ x2,
+ y2,
+ z2,
+ x3 = this._x1,
+ y3 = this._y1,
+ z3 = this._z1,
+ octs = [],
+ node = this._root,
+ q,
+ i;
+ if (node) octs.push(new Octant(node, x0, y0, z0, x3, y3, z3));
+ if (radius == null) radius = Infinity;else {
+ x0 = x - radius, y0 = y - radius, z0 = z - radius;
+ x3 = x + radius, y3 = y + radius, z3 = z + radius;
+ radius *= radius;
+ }
+
+ while (q = octs.pop()) {
+ // Stop searching if this octant can’t contain a closer node.
+ if (!(node = q.node) || (x1 = q.x0) > x3 || (y1 = q.y0) > y3 || (z1 = q.z0) > z3 || (x2 = q.x1) < x0 || (y2 = q.y1) < y0 || (z2 = q.z1) < z0) continue; // Bisect the current octant.
+
+ if (node.length) {
+ var xm = (x1 + x2) / 2,
+ ym = (y1 + y2) / 2,
+ zm = (z1 + z2) / 2;
+ octs.push(new Octant(node[7], xm, ym, zm, x2, y2, z2), new Octant(node[6], x1, ym, zm, xm, y2, z2), new Octant(node[5], xm, y1, zm, x2, ym, z2), new Octant(node[4], x1, y1, zm, xm, ym, z2), new Octant(node[3], xm, ym, z1, x2, y2, zm), new Octant(node[2], x1, ym, z1, xm, y2, zm), new Octant(node[1], xm, y1, z1, x2, ym, zm), new Octant(node[0], x1, y1, z1, xm, ym, zm)); // Visit the closest octant first.
+
+ if (i = (z >= zm) << 2 | (y >= ym) << 1 | x >= xm) {
+ q = octs[octs.length - 1];
+ octs[octs.length - 1] = octs[octs.length - 1 - i];
+ octs[octs.length - 1 - i] = q;
+ }
+ } // Visit this point. (Visiting coincident points isn’t necessary!)
+ else {
+ var dx = x - +this._x.call(null, node.data),
+ dy = y - +this._y.call(null, node.data),
+ dz = z - +this._z.call(null, node.data),
+ d2 = dx * dx + dy * dy + dz * dz;
+
+ if (d2 < radius) {
+ var d = Math.sqrt(radius = d2);
+ x0 = x - d, y0 = y - d, z0 = z - d;
+ x3 = x + d, y3 = y + d, z3 = z + d;
+ data = node.data;
+ }
+ }
+ }
+
+ return data;
+ }
+
+ function tree_remove(d) {
+ if (isNaN(x = +this._x.call(null, d)) || isNaN(y = +this._y.call(null, d)) || isNaN(z = +this._z.call(null, d))) return this; // ignore invalid points
+
+ var parent,
+ node = this._root,
+ retainer,
+ previous,
+ next,
+ x0 = this._x0,
+ y0 = this._y0,
+ z0 = this._z0,
+ x1 = this._x1,
+ y1 = this._y1,
+ z1 = this._z1,
+ x,
+ y,
+ z,
+ xm,
+ ym,
+ zm,
+ right,
+ bottom,
+ deep,
+ i,
+ j; // If the tree is empty, initialize the root as a leaf.
+
+ if (!node) return this; // Find the leaf node for the point.
+ // While descending, also retain the deepest parent with a non-removed sibling.
+
+ if (node.length) while (true) {
+ if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm;else x1 = xm;
+ if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym;else y1 = ym;
+ if (deep = z >= (zm = (z0 + z1) / 2)) z0 = zm;else z1 = zm;
+ if (!(parent = node, node = node[i = deep << 2 | bottom << 1 | right])) return this;
+ if (!node.length) break;
+ if (parent[i + 1 & 7] || parent[i + 2 & 7] || parent[i + 3 & 7] || parent[i + 4 & 7] || parent[i + 5 & 7] || parent[i + 6 & 7] || parent[i + 7 & 7]) retainer = parent, j = i;
+ } // Find the point to remove.
+
+ while (node.data !== d) if (!(previous = node, node = node.next)) return this;
+
+ if (next = node.next) delete node.next; // If there are multiple coincident points, remove just the point.
+
+ if (previous) return next ? previous.next = next : delete previous.next, this; // If this is the root point, remove it.
+
+ if (!parent) return this._root = next, this; // Remove this leaf.
+
+ next ? parent[i] = next : delete parent[i]; // If the parent now contains exactly one leaf, collapse superfluous parents.
+
+ if ((node = parent[0] || parent[1] || parent[2] || parent[3] || parent[4] || parent[5] || parent[6] || parent[7]) && node === (parent[7] || parent[6] || parent[5] || parent[4] || parent[3] || parent[2] || parent[1] || parent[0]) && !node.length) {
+ if (retainer) retainer[j] = node;else this._root = node;
+ }
+
+ return this;
+ }
+
+ function removeAll(data) {
+ for (var i = 0, n = data.length; i < n; ++i) this.remove(data[i]);
+
+ return this;
+ }
+
+ function tree_root() {
+ return this._root;
+ }
+
+ function tree_size() {
+ var size = 0;
+ this.visit(function (node) {
+ if (!node.length) do ++size; while (node = node.next);
+ });
+ return size;
+ }
+
+ function tree_visit(callback) {
+ var octs = [],
+ q,
+ node = this._root,
+ child,
+ x0,
+ y0,
+ z0,
+ x1,
+ y1,
+ z1;
+ if (node) octs.push(new Octant(node, this._x0, this._y0, this._z0, this._x1, this._y1, this._z1));
+
+ while (q = octs.pop()) {
+ if (!callback(node = q.node, x0 = q.x0, y0 = q.y0, z0 = q.z0, x1 = q.x1, y1 = q.y1, z1 = q.z1) && node.length) {
+ var xm = (x0 + x1) / 2,
+ ym = (y0 + y1) / 2,
+ zm = (z0 + z1) / 2;
+ if (child = node[7]) octs.push(new Octant(child, xm, ym, zm, x1, y1, z1));
+ if (child = node[6]) octs.push(new Octant(child, x0, ym, zm, xm, y1, z1));
+ if (child = node[5]) octs.push(new Octant(child, xm, y0, zm, x1, ym, z1));
+ if (child = node[4]) octs.push(new Octant(child, x0, y0, zm, xm, ym, z1));
+ if (child = node[3]) octs.push(new Octant(child, xm, ym, z0, x1, y1, zm));
+ if (child = node[2]) octs.push(new Octant(child, x0, ym, z0, xm, y1, zm));
+ if (child = node[1]) octs.push(new Octant(child, xm, y0, z0, x1, ym, zm));
+ if (child = node[0]) octs.push(new Octant(child, x0, y0, z0, xm, ym, zm));
+ }
+ }
+
+ return this;
+ }
+
+ function tree_visitAfter(callback) {
+ var octs = [],
+ next = [],
+ q;
+ if (this._root) octs.push(new Octant(this._root, this._x0, this._y0, this._z0, this._x1, this._y1, this._z1));
+
+ while (q = octs.pop()) {
+ var node = q.node;
+
+ if (node.length) {
+ var child,
+ x0 = q.x0,
+ y0 = q.y0,
+ z0 = q.z0,
+ x1 = q.x1,
+ y1 = q.y1,
+ z1 = q.z1,
+ xm = (x0 + x1) / 2,
+ ym = (y0 + y1) / 2,
+ zm = (z0 + z1) / 2;
+ if (child = node[0]) octs.push(new Octant(child, x0, y0, z0, xm, ym, zm));
+ if (child = node[1]) octs.push(new Octant(child, xm, y0, z0, x1, ym, zm));
+ if (child = node[2]) octs.push(new Octant(child, x0, ym, z0, xm, y1, zm));
+ if (child = node[3]) octs.push(new Octant(child, xm, ym, z0, x1, y1, zm));
+ if (child = node[4]) octs.push(new Octant(child, x0, y0, zm, xm, ym, z1));
+ if (child = node[5]) octs.push(new Octant(child, xm, y0, zm, x1, ym, z1));
+ if (child = node[6]) octs.push(new Octant(child, x0, ym, zm, xm, y1, z1));
+ if (child = node[7]) octs.push(new Octant(child, xm, ym, zm, x1, y1, z1));
+ }
+
+ next.push(q);
+ }
+
+ while (q = next.pop()) {
+ callback(q.node, q.x0, q.y0, q.z0, q.x1, q.y1, q.z1);
+ }
+
+ return this;
+ }
+
+ function defaultX(d) {
+ return d[0];
+ }
+
+ function tree_x(_) {
+ return arguments.length ? (this._x = _, this) : this._x;
+ }
+
+ function defaultY(d) {
+ return d[1];
+ }
+
+ function tree_y(_) {
+ return arguments.length ? (this._y = _, this) : this._y;
+ }
+
+ function defaultZ(d) {
+ return d[2];
+ }
+
+ function tree_z(_) {
+ return arguments.length ? (this._z = _, this) : this._z;
+ }
+
+ function octree(nodes, x, y, z) {
+ var tree = new Octree(x == null ? defaultX : x, y == null ? defaultY : y, z == null ? defaultZ : z, NaN, NaN, NaN, NaN, NaN, NaN);
+ return nodes == null ? tree : tree.addAll(nodes);
+ }
+
+ function Octree(x, y, z, x0, y0, z0, x1, y1, z1) {
+ this._x = x;
+ this._y = y;
+ this._z = z;
+ this._x0 = x0;
+ this._y0 = y0;
+ this._z0 = z0;
+ this._x1 = x1;
+ this._y1 = y1;
+ this._z1 = z1;
+ this._root = undefined;
+ }
+
+ function leaf_copy(leaf) {
+ var copy = {
+ data: leaf.data
+ },
+ next = copy;
+
+ while (leaf = leaf.next) next = next.next = {
+ data: leaf.data
+ };
+
+ return copy;
+ }
+
+ var treeProto = octree.prototype = Octree.prototype;
+
+ treeProto.copy = function () {
+ var copy = new Octree(this._x, this._y, this._z, this._x0, this._y0, this._z0, this._x1, this._y1, this._z1),
+ node = this._root,
+ nodes,
+ child;
+ if (!node) return copy;
+ if (!node.length) return copy._root = leaf_copy(node), copy;
+ nodes = [{
+ source: node,
+ target: copy._root = new Array(8)
+ }];
+
+ while (node = nodes.pop()) {
+ for (var i = 0; i < 8; ++i) {
+ if (child = node.source[i]) {
+ if (child.length) nodes.push({
+ source: child,
+ target: node.target[i] = new Array(8)
+ });else node.target[i] = leaf_copy(child);
+ }
+ }
+ }
+
+ return copy;
+ };
+
+ treeProto.add = tree_add;
+ treeProto.addAll = addAll;
+ treeProto.cover = tree_cover;
+ treeProto.data = tree_data;
+ treeProto.extent = tree_extent;
+ treeProto.find = tree_find;
+ treeProto.remove = tree_remove;
+ treeProto.removeAll = removeAll;
+ treeProto.root = tree_root;
+ treeProto.size = tree_size;
+ treeProto.visit = tree_visit;
+ treeProto.visitAfter = tree_visitAfter;
+ treeProto.x = tree_x;
+ treeProto.y = tree_y;
+ treeProto.z = tree_z;
+ exports.octree = octree;
+ Object.defineProperty(exports, '__esModule', {
+ value: true
+ });
+});
+
+/***/ })
+
+};
+; \ No newline at end of file
diff --git a/build/server/font-manifest.json b/build/server/font-manifest.json
new file mode 100644
index 0000000..0637a08
--- /dev/null
+++ b/build/server/font-manifest.json
@@ -0,0 +1 @@
+[] \ No newline at end of file
diff --git a/build/server/pages-manifest.json b/build/server/pages-manifest.json
new file mode 100644
index 0000000..bfb04b4
--- /dev/null
+++ b/build/server/pages-manifest.json
@@ -0,0 +1,7 @@
+{
+ "/_app": "pages/_app.js",
+ "/": "pages/index.html",
+ "/_error": "pages/_error.js",
+ "/_document": "pages/_document.js",
+ "/404": "pages/404.html"
+} \ No newline at end of file
diff --git a/build/server/pages/404.html b/build/server/pages/404.html
new file mode 100644
index 0000000..d3dfff6
--- /dev/null
+++ b/build/server/pages/404.html
@@ -0,0 +1 @@
+<!DOCTYPE html><html><head><meta name="viewport" content="width=device-width"/><meta charSet="utf-8"/><title>404: This page could not be found</title><meta name="next-head-count" content="3"/><link rel="preload" href="/_next/static/css/120f2e2270820d49a21f.css" as="style"/><link rel="stylesheet" href="/_next/static/css/120f2e2270820d49a21f.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/_next/static/chunks/polyfills-a54b4f32bdc1ef890ddd.js"></script><script src="/_next/static/chunks/webpack-f6b94a473b4a21f6bdce.js" defer=""></script><script src="/_next/static/chunks/framework-0441fae7fd130f37dee1.js" defer=""></script><script src="/_next/static/chunks/main-a3a79aff3ff232b41814.js" defer=""></script><script src="/_next/static/chunks/pages/_app-5bb503dca4dae114eb0c.js" defer=""></script><script src="/_next/static/chunks/pages/_error-a0e21b9b223f827fe1f2.js" defer=""></script><script src="/_next/static/Ci3EcXz8ajkhs7MVidKTf/_buildManifest.js" defer=""></script><script src="/_next/static/Ci3EcXz8ajkhs7MVidKTf/_ssgManifest.js" defer=""></script></head><body><div id="__next"><style data-emotion="css-global o7558t">:host,:root{--chakra-ring-inset:var(--chakra-empty,/*!*/ /*!*/);--chakra-ring-offset-width:0px;--chakra-ring-offset-color:#fff;--chakra-ring-color:rgba(66, 153, 225, 0.6);--chakra-ring-offset-shadow:0 0 #0000;--chakra-ring-shadow:0 0 #0000;--chakra-space-x-reverse:0;--chakra-space-y-reverse:0;--chakra-colors-transparent:transparent;--chakra-colors-current:currentColor;--chakra-colors-black:#000000;--chakra-colors-white:#FFFFFF;--chakra-colors-whiteAlpha-50:rgba(255, 255, 255, 0.04);--chakra-colors-whiteAlpha-100:rgba(255, 255, 255, 0.06);--chakra-colors-whiteAlpha-200:rgba(255, 255, 255, 0.08);--chakra-colors-whiteAlpha-300:rgba(255, 255, 255, 0.16);--chakra-colors-whiteAlpha-400:rgba(255, 255, 255, 0.24);--chakra-colors-whiteAlpha-500:rgba(255, 255, 255, 0.36);--chakra-colors-whiteAlpha-600:rgba(255, 255, 255, 0.48);--chakra-colors-whiteAlpha-700:rgba(255, 255, 255, 0.64);--chakra-colors-whiteAlpha-800:rgba(255, 255, 255, 0.80);--chakra-colors-whiteAlpha-900:rgba(255, 255, 255, 0.92);--chakra-colors-blackAlpha-50:rgba(0, 0, 0, 0.04);--chakra-colors-blackAlpha-100:rgba(0, 0, 0, 0.06);--chakra-colors-blackAlpha-200:rgba(0, 0, 0, 0.08);--chakra-colors-blackAlpha-300:rgba(0, 0, 0, 0.16);--chakra-colors-blackAlpha-400:rgba(0, 0, 0, 0.24);--chakra-colors-blackAlpha-500:rgba(0, 0, 0, 0.36);--chakra-colors-blackAlpha-600:rgba(0, 0, 0, 0.48);--chakra-colors-blackAlpha-700:rgba(0, 0, 0, 0.64);--chakra-colors-blackAlpha-800:rgba(0, 0, 0, 0.80);--chakra-colors-blackAlpha-900:rgba(0, 0, 0, 0.92);--chakra-colors-gray-50:#F7FAFC;--chakra-colors-gray-100:#EDF2F7;--chakra-colors-gray-200:#E2E8F0;--chakra-colors-gray-300:#CBD5E0;--chakra-colors-gray-400:#A0AEC0;--chakra-colors-gray-500:#718096;--chakra-colors-gray-600:#4A5568;--chakra-colors-gray-700:#2D3748;--chakra-colors-gray-800:#1A202C;--chakra-colors-gray-900:#171923;--chakra-colors-red-50:#FFF5F5;--chakra-colors-red-100:#FED7D7;--chakra-colors-red-200:#FEB2B2;--chakra-colors-red-300:#FC8181;--chakra-colors-red-400:#F56565;--chakra-colors-red-500:#E53E3E;--chakra-colors-red-600:#C53030;--chakra-colors-red-700:#9B2C2C;--chakra-colors-red-800:#822727;--chakra-colors-red-900:#63171B;--chakra-colors-orange-50:#FFFAF0;--chakra-colors-orange-100:#FEEBC8;--chakra-colors-orange-200:#FBD38D;--chakra-colors-orange-300:#F6AD55;--chakra-colors-orange-400:#ED8936;--chakra-colors-orange-500:#DD6B20;--chakra-colors-orange-600:#C05621;--chakra-colors-orange-700:#9C4221;--chakra-colors-orange-800:#7B341E;--chakra-colors-orange-900:#652B19;--chakra-colors-yellow-50:#FFFFF0;--chakra-colors-yellow-100:#FEFCBF;--chakra-colors-yellow-200:#FAF089;--chakra-colors-yellow-300:#F6E05E;--chakra-colors-yellow-400:#ECC94B;--chakra-colors-yellow-500:#D69E2E;--chakra-colors-yellow-600:#B7791F;--chakra-colors-yellow-700:#975A16;--chakra-colors-yellow-800:#744210;--chakra-colors-yellow-900:#5F370E;--chakra-colors-green-50:#F0FFF4;--chakra-colors-green-100:#C6F6D5;--chakra-colors-green-200:#9AE6B4;--chakra-colors-green-300:#68D391;--chakra-colors-green-400:#48BB78;--chakra-colors-green-500:#38A169;--chakra-colors-green-600:#2F855A;--chakra-colors-green-700:#276749;--chakra-colors-green-800:#22543D;--chakra-colors-green-900:#1C4532;--chakra-colors-teal-50:#E6FFFA;--chakra-colors-teal-100:#B2F5EA;--chakra-colors-teal-200:#81E6D9;--chakra-colors-teal-300:#4FD1C5;--chakra-colors-teal-400:#38B2AC;--chakra-colors-teal-500:#319795;--chakra-colors-teal-600:#2C7A7B;--chakra-colors-teal-700:#285E61;--chakra-colors-teal-800:#234E52;--chakra-colors-teal-900:#1D4044;--chakra-colors-blue-50:#ebf8ff;--chakra-colors-blue-100:#bee3f8;--chakra-colors-blue-200:#90cdf4;--chakra-colors-blue-300:#63b3ed;--chakra-colors-blue-400:#4299e1;--chakra-colors-blue-500:#3182ce;--chakra-colors-blue-600:#2b6cb0;--chakra-colors-blue-700:#2c5282;--chakra-colors-blue-800:#2a4365;--chakra-colors-blue-900:#1A365D;--chakra-colors-cyan-50:#EDFDFD;--chakra-colors-cyan-100:#C4F1F9;--chakra-colors-cyan-200:#9DECF9;--chakra-colors-cyan-300:#76E4F7;--chakra-colors-cyan-400:#0BC5EA;--chakra-colors-cyan-500:#00B5D8;--chakra-colors-cyan-600:#00A3C4;--chakra-colors-cyan-700:#0987A0;--chakra-colors-cyan-800:#086F83;--chakra-colors-cyan-900:#065666;--chakra-colors-purple-50:#FAF5FF;--chakra-colors-purple-100:#E9D8FD;--chakra-colors-purple-200:#D6BCFA;--chakra-colors-purple-300:#B794F4;--chakra-colors-purple-400:#9F7AEA;--chakra-colors-purple-500:#805AD5;--chakra-colors-purple-600:#6B46C1;--chakra-colors-purple-700:#553C9A;--chakra-colors-purple-800:#44337A;--chakra-colors-purple-900:#322659;--chakra-colors-pink-50:#FFF5F7;--chakra-colors-pink-100:#FED7E2;--chakra-colors-pink-200:#FBB6CE;--chakra-colors-pink-300:#F687B3;--chakra-colors-pink-400:#ED64A6;--chakra-colors-pink-500:#D53F8C;--chakra-colors-pink-600:#B83280;--chakra-colors-pink-700:#97266D;--chakra-colors-pink-800:#702459;--chakra-colors-pink-900:#521B41;--chakra-colors-linkedin-50:#E8F4F9;--chakra-colors-linkedin-100:#CFEDFB;--chakra-colors-linkedin-200:#9BDAF3;--chakra-colors-linkedin-300:#68C7EC;--chakra-colors-linkedin-400:#34B3E4;--chakra-colors-linkedin-500:#00A0DC;--chakra-colors-linkedin-600:#008CC9;--chakra-colors-linkedin-700:#0077B5;--chakra-colors-linkedin-800:#005E93;--chakra-colors-linkedin-900:#004471;--chakra-colors-facebook-50:#E8F4F9;--chakra-colors-facebook-100:#D9DEE9;--chakra-colors-facebook-200:#B7C2DA;--chakra-colors-facebook-300:#6482C0;--chakra-colors-facebook-400:#4267B2;--chakra-colors-facebook-500:#385898;--chakra-colors-facebook-600:#314E89;--chakra-colors-facebook-700:#29487D;--chakra-colors-facebook-800:#223B67;--chakra-colors-facebook-900:#1E355B;--chakra-colors-messenger-50:#D0E6FF;--chakra-colors-messenger-100:#B9DAFF;--chakra-colors-messenger-200:#A2CDFF;--chakra-colors-messenger-300:#7AB8FF;--chakra-colors-messenger-400:#2E90FF;--chakra-colors-messenger-500:#0078FF;--chakra-colors-messenger-600:#0063D1;--chakra-colors-messenger-700:#0052AC;--chakra-colors-messenger-800:#003C7E;--chakra-colors-messenger-900:#002C5C;--chakra-colors-whatsapp-50:#dffeec;--chakra-colors-whatsapp-100:#b9f5d0;--chakra-colors-whatsapp-200:#90edb3;--chakra-colors-whatsapp-300:#65e495;--chakra-colors-whatsapp-400:#3cdd78;--chakra-colors-whatsapp-500:#22c35e;--chakra-colors-whatsapp-600:#179848;--chakra-colors-whatsapp-700:#0c6c33;--chakra-colors-whatsapp-800:#01421c;--chakra-colors-whatsapp-900:#001803;--chakra-colors-twitter-50:#E5F4FD;--chakra-colors-twitter-100:#C8E9FB;--chakra-colors-twitter-200:#A8DCFA;--chakra-colors-twitter-300:#83CDF7;--chakra-colors-twitter-400:#57BBF5;--chakra-colors-twitter-500:#1DA1F2;--chakra-colors-twitter-600:#1A94DA;--chakra-colors-twitter-700:#1681BF;--chakra-colors-twitter-800:#136B9E;--chakra-colors-twitter-900:#0D4D71;--chakra-colors-telegram-50:#E3F2F9;--chakra-colors-telegram-100:#C5E4F3;--chakra-colors-telegram-200:#A2D4EC;--chakra-colors-telegram-300:#7AC1E4;--chakra-colors-telegram-400:#47A9DA;--chakra-colors-telegram-500:#0088CC;--chakra-colors-telegram-600:#007AB8;--chakra-colors-telegram-700:#006BA1;--chakra-colors-telegram-800:#005885;--chakra-colors-telegram-900:#003F5E;--chakra-borders-none:0;--chakra-borders-1px:1px solid;--chakra-borders-2px:2px solid;--chakra-borders-4px:4px solid;--chakra-borders-8px:8px solid;--chakra-fonts-heading:-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";--chakra-fonts-body:-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";--chakra-fonts-mono:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--chakra-fontSizes-xs:0.75rem;--chakra-fontSizes-sm:0.875rem;--chakra-fontSizes-md:1rem;--chakra-fontSizes-lg:1.125rem;--chakra-fontSizes-xl:1.25rem;--chakra-fontSizes-2xl:1.5rem;--chakra-fontSizes-3xl:1.875rem;--chakra-fontSizes-4xl:2.25rem;--chakra-fontSizes-5xl:3rem;--chakra-fontSizes-6xl:3.75rem;--chakra-fontSizes-7xl:4.5rem;--chakra-fontSizes-8xl:6rem;--chakra-fontSizes-9xl:8rem;--chakra-fontWeights-hairline:100;--chakra-fontWeights-thin:200;--chakra-fontWeights-light:300;--chakra-fontWeights-normal:400;--chakra-fontWeights-medium:500;--chakra-fontWeights-semibold:600;--chakra-fontWeights-bold:700;--chakra-fontWeights-extrabold:800;--chakra-fontWeights-black:900;--chakra-letterSpacings-tighter:-0.05em;--chakra-letterSpacings-tight:-0.025em;--chakra-letterSpacings-normal:0;--chakra-letterSpacings-wide:0.025em;--chakra-letterSpacings-wider:0.05em;--chakra-letterSpacings-widest:0.1em;--chakra-lineHeights-3:.75rem;--chakra-lineHeights-4:1rem;--chakra-lineHeights-5:1.25rem;--chakra-lineHeights-6:1.5rem;--chakra-lineHeights-7:1.75rem;--chakra-lineHeights-8:2rem;--chakra-lineHeights-9:2.25rem;--chakra-lineHeights-10:2.5rem;--chakra-lineHeights-normal:normal;--chakra-lineHeights-none:1;--chakra-lineHeights-shorter:1.25;--chakra-lineHeights-short:1.375;--chakra-lineHeights-base:1.5;--chakra-lineHeights-tall:1.625;--chakra-lineHeights-taller:2;--chakra-radii-none:0;--chakra-radii-sm:0.125rem;--chakra-radii-base:0.25rem;--chakra-radii-md:0.375rem;--chakra-radii-lg:0.5rem;--chakra-radii-xl:0.75rem;--chakra-radii-2xl:1rem;--chakra-radii-3xl:1.5rem;--chakra-radii-full:9999px;--chakra-space-1:0.25rem;--chakra-space-2:0.5rem;--chakra-space-3:0.75rem;--chakra-space-4:1rem;--chakra-space-5:1.25rem;--chakra-space-6:1.5rem;--chakra-space-7:1.75rem;--chakra-space-8:2rem;--chakra-space-9:2.25rem;--chakra-space-10:2.5rem;--chakra-space-12:3rem;--chakra-space-14:3.5rem;--chakra-space-16:4rem;--chakra-space-20:5rem;--chakra-space-24:6rem;--chakra-space-28:7rem;--chakra-space-32:8rem;--chakra-space-36:9rem;--chakra-space-40:10rem;--chakra-space-44:11rem;--chakra-space-48:12rem;--chakra-space-52:13rem;--chakra-space-56:14rem;--chakra-space-60:15rem;--chakra-space-64:16rem;--chakra-space-72:18rem;--chakra-space-80:20rem;--chakra-space-96:24rem;--chakra-space-px:1px;--chakra-space-0\.5:0.125rem;--chakra-space-1\.5:0.375rem;--chakra-space-2\.5:0.625rem;--chakra-space-3\.5:0.875rem;--chakra-shadows-xs:0 0 0 1px rgba(0, 0, 0, 0.05);--chakra-shadows-sm:0 1px 2px 0 rgba(0, 0, 0, 0.05);--chakra-shadows-base:0 1px 3px 0 rgba(0, 0, 0, 0.1),0 1px 2px 0 rgba(0, 0, 0, 0.06);--chakra-shadows-md:0 4px 6px -1px rgba(0, 0, 0, 0.1),0 2px 4px -1px rgba(0, 0, 0, 0.06);--chakra-shadows-lg:0 10px 15px -3px rgba(0, 0, 0, 0.1),0 4px 6px -2px rgba(0, 0, 0, 0.05);--chakra-shadows-xl:0 20px 25px -5px rgba(0, 0, 0, 0.1),0 10px 10px -5px rgba(0, 0, 0, 0.04);--chakra-shadows-2xl:0 25px 50px -12px rgba(0, 0, 0, 0.25);--chakra-shadows-outline:0 0 0 3px rgba(66, 153, 225, 0.6);--chakra-shadows-inner:inset 0 2px 4px 0 rgba(0,0,0,0.06);--chakra-shadows-none:none;--chakra-shadows-dark-lg:rgba(0, 0, 0, 0.1) 0px 0px 0px 1px,rgba(0, 0, 0, 0.2) 0px 5px 10px,rgba(0, 0, 0, 0.4) 0px 15px 40px;--chakra-sizes-1:0.25rem;--chakra-sizes-2:0.5rem;--chakra-sizes-3:0.75rem;--chakra-sizes-4:1rem;--chakra-sizes-5:1.25rem;--chakra-sizes-6:1.5rem;--chakra-sizes-7:1.75rem;--chakra-sizes-8:2rem;--chakra-sizes-9:2.25rem;--chakra-sizes-10:2.5rem;--chakra-sizes-12:3rem;--chakra-sizes-14:3.5rem;--chakra-sizes-16:4rem;--chakra-sizes-20:5rem;--chakra-sizes-24:6rem;--chakra-sizes-28:7rem;--chakra-sizes-32:8rem;--chakra-sizes-36:9rem;--chakra-sizes-40:10rem;--chakra-sizes-44:11rem;--chakra-sizes-48:12rem;--chakra-sizes-52:13rem;--chakra-sizes-56:14rem;--chakra-sizes-60:15rem;--chakra-sizes-64:16rem;--chakra-sizes-72:18rem;--chakra-sizes-80:20rem;--chakra-sizes-96:24rem;--chakra-sizes-px:1px;--chakra-sizes-0\.5:0.125rem;--chakra-sizes-1\.5:0.375rem;--chakra-sizes-2\.5:0.625rem;--chakra-sizes-3\.5:0.875rem;--chakra-sizes-max:max-content;--chakra-sizes-min:min-content;--chakra-sizes-full:100%;--chakra-sizes-3xs:14rem;--chakra-sizes-2xs:16rem;--chakra-sizes-xs:20rem;--chakra-sizes-sm:24rem;--chakra-sizes-md:28rem;--chakra-sizes-lg:32rem;--chakra-sizes-xl:36rem;--chakra-sizes-2xl:42rem;--chakra-sizes-3xl:48rem;--chakra-sizes-4xl:56rem;--chakra-sizes-5xl:64rem;--chakra-sizes-6xl:72rem;--chakra-sizes-7xl:80rem;--chakra-sizes-8xl:90rem;--chakra-sizes-container-sm:640px;--chakra-sizes-container-md:768px;--chakra-sizes-container-lg:1024px;--chakra-sizes-container-xl:1280px;--chakra-zIndices-hide:-1;--chakra-zIndices-auto:auto;--chakra-zIndices-base:0;--chakra-zIndices-docked:10;--chakra-zIndices-dropdown:1000;--chakra-zIndices-sticky:1100;--chakra-zIndices-banner:1200;--chakra-zIndices-overlay:1300;--chakra-zIndices-modal:1400;--chakra-zIndices-popover:1500;--chakra-zIndices-skipLink:1600;--chakra-zIndices-toast:1700;--chakra-zIndices-tooltip:1800;--chakra-transition-property-common:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform;--chakra-transition-property-colors:background-color,border-color,color,fill,stroke;--chakra-transition-property-dimensions:width,height;--chakra-transition-property-position:left,right,top,bottom;--chakra-transition-property-background:background-color,background-image,background-position;--chakra-transition-easing-ease-in:cubic-bezier(0.4, 0, 1, 1);--chakra-transition-easing-ease-out:cubic-bezier(0, 0, 0.2, 1);--chakra-transition-easing-ease-in-out:cubic-bezier(0.4, 0, 0.2, 1);--chakra-transition-duration-ultra-fast:50ms;--chakra-transition-duration-faster:100ms;--chakra-transition-duration-fast:150ms;--chakra-transition-duration-normal:200ms;--chakra-transition-duration-slow:300ms;--chakra-transition-duration-slower:400ms;--chakra-transition-duration-ultra-slow:500ms;--chakra-blur-none:0;--chakra-blur-sm:4px;--chakra-blur-base:8px;--chakra-blur-md:12px;--chakra-blur-lg:16px;--chakra-blur-xl:24px;--chakra-blur-2xl:40px;--chakra-blur-3xl:64px;}</style><style data-emotion="css-global 1syi0wy">html{line-height:1.5;-webkit-text-size-adjust:100%;font-family:system-ui,sans-serif;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;-moz-osx-font-smoothing:grayscale;touch-action:manipulation;}body{position:relative;min-height:100%;font-feature-settings:'kern';}*,*::before,*::after{border-width:0;border-style:solid;box-sizing:border-box;}main{display:block;}hr{border-top-width:1px;box-sizing:content-box;height:0;overflow:visible;}pre,code,kbd,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-size:1em;}a{background-color:transparent;color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit;}abbr[title]{border-bottom:none;-webkit-text-decoration:underline;text-decoration:underline;-webkit-text-decoration:underline dotted;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;}b,strong{font-weight:bold;}small{font-size:80%;}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline;}sub{bottom:-0.25em;}sup{top:-0.5em;}img{border-style:none;}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0;}button,input{overflow:visible;}button,select{text-transform:none;}button::-moz-focus-inner,[type="button"]::-moz-focus-inner,[type="reset"]::-moz-focus-inner,[type="submit"]::-moz-focus-inner{border-style:none;padding:0;}fieldset{padding:0.35em 0.75em 0.625em;}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal;}progress{vertical-align:baseline;}textarea{overflow:auto;}[type="checkbox"],[type="radio"]{box-sizing:border-box;padding:0;}[type="number"]::-webkit-inner-spin-button,[type="number"]::-webkit-outer-spin-button{-webkit-appearance:none!important;}input[type="number"]{-moz-appearance:textfield;}[type="search"]{-webkit-appearance:textfield;outline-offset:-2px;}[type="search"]::-webkit-search-decoration{-webkit-appearance:none!important;}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit;}details{display:block;}summary{display:-webkit-box;display:-webkit-list-item;display:-ms-list-itembox;display:list-item;}template{display:none;}[hidden]{display:none!important;}body,blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0;}button{background:transparent;padding:0;}fieldset{margin:0;padding:0;}ol,ul{margin:0;padding:0;}textarea{resize:vertical;}button,[role="button"]{cursor:pointer;}button::-moz-focus-inner{border:0!important;}table{border-collapse:collapse;}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit;}button,input,optgroup,select,textarea{padding:0;line-height:inherit;color:inherit;}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle;}img,video{max-width:100%;height:auto;}[data-js-focus-visible] :focus:not([data-focus-visible-added]){outline:none;box-shadow:none;}select::-ms-expand{display:none;}</style><style data-emotion="css-global 1baqkrf">body{font-family:var(--chakra-fonts-body);color:var(--chakra-colors-gray-800);background:var(--chakra-colors-white);transition-property:background-color;transition-duration:var(--chakra-transition-duration-normal);line-height:var(--chakra-lineHeights-base);}*::-webkit-input-placeholder{color:var(--chakra-colors-gray-400);}*::-moz-placeholder{color:var(--chakra-colors-gray-400);}*:-ms-input-placeholder{color:var(--chakra-colors-gray-400);}*::placeholder{color:var(--chakra-colors-gray-400);}*,*::before,::after{border-color:var(--chakra-colors-gray-200);word-wrap:break-word;}</style><div style="color:#000;background:#fff;font-family:-apple-system, BlinkMacSystemFont, Roboto, &quot;Segoe UI&quot;, &quot;Fira Sans&quot;, Avenir, &quot;Helvetica Neue&quot;, &quot;Lucida Grande&quot;, sans-serif;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>body { margin: 0 }</style><h1 style="display:inline-block;border-right:1px solid rgba(0, 0, 0,.3);margin:0;margin-right:20px;padding:10px 23px 10px 0;font-size:24px;font-weight:500;vertical-align:top">404</h1><div style="display:inline-block;text-align:left;line-height:49px;height:49px;vertical-align:middle"><h2 style="font-size:14px;font-weight:normal;line-height:inherit;margin:0;padding:0">This page could not be found<!-- -->.</h2></div></div></div><span></span></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"statusCode":404}},"page":"/_error","query":{},"buildId":"Ci3EcXz8ajkhs7MVidKTf","nextExport":true,"isFallback":false,"gip":true,"scriptLoader":[]}</script></body></html> \ No newline at end of file
diff --git a/build/server/pages/500.html b/build/server/pages/500.html
new file mode 100644
index 0000000..2ec9c31
--- /dev/null
+++ b/build/server/pages/500.html
@@ -0,0 +1 @@
+<!DOCTYPE html><html><head><meta name="viewport" content="width=device-width"/><meta charSet="utf-8"/><title>500: Internal Server Error</title><meta name="next-head-count" content="3"/><link rel="preload" href="/_next/static/css/120f2e2270820d49a21f.css" as="style"/><link rel="stylesheet" href="/_next/static/css/120f2e2270820d49a21f.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/_next/static/chunks/polyfills-a54b4f32bdc1ef890ddd.js"></script><script src="/_next/static/chunks/webpack-f6b94a473b4a21f6bdce.js" defer=""></script><script src="/_next/static/chunks/framework-0441fae7fd130f37dee1.js" defer=""></script><script src="/_next/static/chunks/main-a3a79aff3ff232b41814.js" defer=""></script><script src="/_next/static/chunks/pages/_app-5bb503dca4dae114eb0c.js" defer=""></script><script src="/_next/static/chunks/pages/_error-a0e21b9b223f827fe1f2.js" defer=""></script><script src="/_next/static/Ci3EcXz8ajkhs7MVidKTf/_buildManifest.js" defer=""></script><script src="/_next/static/Ci3EcXz8ajkhs7MVidKTf/_ssgManifest.js" defer=""></script></head><body><div id="__next"><style data-emotion="css-global o7558t">:host,:root{--chakra-ring-inset:var(--chakra-empty,/*!*/ /*!*/);--chakra-ring-offset-width:0px;--chakra-ring-offset-color:#fff;--chakra-ring-color:rgba(66, 153, 225, 0.6);--chakra-ring-offset-shadow:0 0 #0000;--chakra-ring-shadow:0 0 #0000;--chakra-space-x-reverse:0;--chakra-space-y-reverse:0;--chakra-colors-transparent:transparent;--chakra-colors-current:currentColor;--chakra-colors-black:#000000;--chakra-colors-white:#FFFFFF;--chakra-colors-whiteAlpha-50:rgba(255, 255, 255, 0.04);--chakra-colors-whiteAlpha-100:rgba(255, 255, 255, 0.06);--chakra-colors-whiteAlpha-200:rgba(255, 255, 255, 0.08);--chakra-colors-whiteAlpha-300:rgba(255, 255, 255, 0.16);--chakra-colors-whiteAlpha-400:rgba(255, 255, 255, 0.24);--chakra-colors-whiteAlpha-500:rgba(255, 255, 255, 0.36);--chakra-colors-whiteAlpha-600:rgba(255, 255, 255, 0.48);--chakra-colors-whiteAlpha-700:rgba(255, 255, 255, 0.64);--chakra-colors-whiteAlpha-800:rgba(255, 255, 255, 0.80);--chakra-colors-whiteAlpha-900:rgba(255, 255, 255, 0.92);--chakra-colors-blackAlpha-50:rgba(0, 0, 0, 0.04);--chakra-colors-blackAlpha-100:rgba(0, 0, 0, 0.06);--chakra-colors-blackAlpha-200:rgba(0, 0, 0, 0.08);--chakra-colors-blackAlpha-300:rgba(0, 0, 0, 0.16);--chakra-colors-blackAlpha-400:rgba(0, 0, 0, 0.24);--chakra-colors-blackAlpha-500:rgba(0, 0, 0, 0.36);--chakra-colors-blackAlpha-600:rgba(0, 0, 0, 0.48);--chakra-colors-blackAlpha-700:rgba(0, 0, 0, 0.64);--chakra-colors-blackAlpha-800:rgba(0, 0, 0, 0.80);--chakra-colors-blackAlpha-900:rgba(0, 0, 0, 0.92);--chakra-colors-gray-50:#F7FAFC;--chakra-colors-gray-100:#EDF2F7;--chakra-colors-gray-200:#E2E8F0;--chakra-colors-gray-300:#CBD5E0;--chakra-colors-gray-400:#A0AEC0;--chakra-colors-gray-500:#718096;--chakra-colors-gray-600:#4A5568;--chakra-colors-gray-700:#2D3748;--chakra-colors-gray-800:#1A202C;--chakra-colors-gray-900:#171923;--chakra-colors-red-50:#FFF5F5;--chakra-colors-red-100:#FED7D7;--chakra-colors-red-200:#FEB2B2;--chakra-colors-red-300:#FC8181;--chakra-colors-red-400:#F56565;--chakra-colors-red-500:#E53E3E;--chakra-colors-red-600:#C53030;--chakra-colors-red-700:#9B2C2C;--chakra-colors-red-800:#822727;--chakra-colors-red-900:#63171B;--chakra-colors-orange-50:#FFFAF0;--chakra-colors-orange-100:#FEEBC8;--chakra-colors-orange-200:#FBD38D;--chakra-colors-orange-300:#F6AD55;--chakra-colors-orange-400:#ED8936;--chakra-colors-orange-500:#DD6B20;--chakra-colors-orange-600:#C05621;--chakra-colors-orange-700:#9C4221;--chakra-colors-orange-800:#7B341E;--chakra-colors-orange-900:#652B19;--chakra-colors-yellow-50:#FFFFF0;--chakra-colors-yellow-100:#FEFCBF;--chakra-colors-yellow-200:#FAF089;--chakra-colors-yellow-300:#F6E05E;--chakra-colors-yellow-400:#ECC94B;--chakra-colors-yellow-500:#D69E2E;--chakra-colors-yellow-600:#B7791F;--chakra-colors-yellow-700:#975A16;--chakra-colors-yellow-800:#744210;--chakra-colors-yellow-900:#5F370E;--chakra-colors-green-50:#F0FFF4;--chakra-colors-green-100:#C6F6D5;--chakra-colors-green-200:#9AE6B4;--chakra-colors-green-300:#68D391;--chakra-colors-green-400:#48BB78;--chakra-colors-green-500:#38A169;--chakra-colors-green-600:#2F855A;--chakra-colors-green-700:#276749;--chakra-colors-green-800:#22543D;--chakra-colors-green-900:#1C4532;--chakra-colors-teal-50:#E6FFFA;--chakra-colors-teal-100:#B2F5EA;--chakra-colors-teal-200:#81E6D9;--chakra-colors-teal-300:#4FD1C5;--chakra-colors-teal-400:#38B2AC;--chakra-colors-teal-500:#319795;--chakra-colors-teal-600:#2C7A7B;--chakra-colors-teal-700:#285E61;--chakra-colors-teal-800:#234E52;--chakra-colors-teal-900:#1D4044;--chakra-colors-blue-50:#ebf8ff;--chakra-colors-blue-100:#bee3f8;--chakra-colors-blue-200:#90cdf4;--chakra-colors-blue-300:#63b3ed;--chakra-colors-blue-400:#4299e1;--chakra-colors-blue-500:#3182ce;--chakra-colors-blue-600:#2b6cb0;--chakra-colors-blue-700:#2c5282;--chakra-colors-blue-800:#2a4365;--chakra-colors-blue-900:#1A365D;--chakra-colors-cyan-50:#EDFDFD;--chakra-colors-cyan-100:#C4F1F9;--chakra-colors-cyan-200:#9DECF9;--chakra-colors-cyan-300:#76E4F7;--chakra-colors-cyan-400:#0BC5EA;--chakra-colors-cyan-500:#00B5D8;--chakra-colors-cyan-600:#00A3C4;--chakra-colors-cyan-700:#0987A0;--chakra-colors-cyan-800:#086F83;--chakra-colors-cyan-900:#065666;--chakra-colors-purple-50:#FAF5FF;--chakra-colors-purple-100:#E9D8FD;--chakra-colors-purple-200:#D6BCFA;--chakra-colors-purple-300:#B794F4;--chakra-colors-purple-400:#9F7AEA;--chakra-colors-purple-500:#805AD5;--chakra-colors-purple-600:#6B46C1;--chakra-colors-purple-700:#553C9A;--chakra-colors-purple-800:#44337A;--chakra-colors-purple-900:#322659;--chakra-colors-pink-50:#FFF5F7;--chakra-colors-pink-100:#FED7E2;--chakra-colors-pink-200:#FBB6CE;--chakra-colors-pink-300:#F687B3;--chakra-colors-pink-400:#ED64A6;--chakra-colors-pink-500:#D53F8C;--chakra-colors-pink-600:#B83280;--chakra-colors-pink-700:#97266D;--chakra-colors-pink-800:#702459;--chakra-colors-pink-900:#521B41;--chakra-colors-linkedin-50:#E8F4F9;--chakra-colors-linkedin-100:#CFEDFB;--chakra-colors-linkedin-200:#9BDAF3;--chakra-colors-linkedin-300:#68C7EC;--chakra-colors-linkedin-400:#34B3E4;--chakra-colors-linkedin-500:#00A0DC;--chakra-colors-linkedin-600:#008CC9;--chakra-colors-linkedin-700:#0077B5;--chakra-colors-linkedin-800:#005E93;--chakra-colors-linkedin-900:#004471;--chakra-colors-facebook-50:#E8F4F9;--chakra-colors-facebook-100:#D9DEE9;--chakra-colors-facebook-200:#B7C2DA;--chakra-colors-facebook-300:#6482C0;--chakra-colors-facebook-400:#4267B2;--chakra-colors-facebook-500:#385898;--chakra-colors-facebook-600:#314E89;--chakra-colors-facebook-700:#29487D;--chakra-colors-facebook-800:#223B67;--chakra-colors-facebook-900:#1E355B;--chakra-colors-messenger-50:#D0E6FF;--chakra-colors-messenger-100:#B9DAFF;--chakra-colors-messenger-200:#A2CDFF;--chakra-colors-messenger-300:#7AB8FF;--chakra-colors-messenger-400:#2E90FF;--chakra-colors-messenger-500:#0078FF;--chakra-colors-messenger-600:#0063D1;--chakra-colors-messenger-700:#0052AC;--chakra-colors-messenger-800:#003C7E;--chakra-colors-messenger-900:#002C5C;--chakra-colors-whatsapp-50:#dffeec;--chakra-colors-whatsapp-100:#b9f5d0;--chakra-colors-whatsapp-200:#90edb3;--chakra-colors-whatsapp-300:#65e495;--chakra-colors-whatsapp-400:#3cdd78;--chakra-colors-whatsapp-500:#22c35e;--chakra-colors-whatsapp-600:#179848;--chakra-colors-whatsapp-700:#0c6c33;--chakra-colors-whatsapp-800:#01421c;--chakra-colors-whatsapp-900:#001803;--chakra-colors-twitter-50:#E5F4FD;--chakra-colors-twitter-100:#C8E9FB;--chakra-colors-twitter-200:#A8DCFA;--chakra-colors-twitter-300:#83CDF7;--chakra-colors-twitter-400:#57BBF5;--chakra-colors-twitter-500:#1DA1F2;--chakra-colors-twitter-600:#1A94DA;--chakra-colors-twitter-700:#1681BF;--chakra-colors-twitter-800:#136B9E;--chakra-colors-twitter-900:#0D4D71;--chakra-colors-telegram-50:#E3F2F9;--chakra-colors-telegram-100:#C5E4F3;--chakra-colors-telegram-200:#A2D4EC;--chakra-colors-telegram-300:#7AC1E4;--chakra-colors-telegram-400:#47A9DA;--chakra-colors-telegram-500:#0088CC;--chakra-colors-telegram-600:#007AB8;--chakra-colors-telegram-700:#006BA1;--chakra-colors-telegram-800:#005885;--chakra-colors-telegram-900:#003F5E;--chakra-borders-none:0;--chakra-borders-1px:1px solid;--chakra-borders-2px:2px solid;--chakra-borders-4px:4px solid;--chakra-borders-8px:8px solid;--chakra-fonts-heading:-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";--chakra-fonts-body:-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";--chakra-fonts-mono:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--chakra-fontSizes-xs:0.75rem;--chakra-fontSizes-sm:0.875rem;--chakra-fontSizes-md:1rem;--chakra-fontSizes-lg:1.125rem;--chakra-fontSizes-xl:1.25rem;--chakra-fontSizes-2xl:1.5rem;--chakra-fontSizes-3xl:1.875rem;--chakra-fontSizes-4xl:2.25rem;--chakra-fontSizes-5xl:3rem;--chakra-fontSizes-6xl:3.75rem;--chakra-fontSizes-7xl:4.5rem;--chakra-fontSizes-8xl:6rem;--chakra-fontSizes-9xl:8rem;--chakra-fontWeights-hairline:100;--chakra-fontWeights-thin:200;--chakra-fontWeights-light:300;--chakra-fontWeights-normal:400;--chakra-fontWeights-medium:500;--chakra-fontWeights-semibold:600;--chakra-fontWeights-bold:700;--chakra-fontWeights-extrabold:800;--chakra-fontWeights-black:900;--chakra-letterSpacings-tighter:-0.05em;--chakra-letterSpacings-tight:-0.025em;--chakra-letterSpacings-normal:0;--chakra-letterSpacings-wide:0.025em;--chakra-letterSpacings-wider:0.05em;--chakra-letterSpacings-widest:0.1em;--chakra-lineHeights-3:.75rem;--chakra-lineHeights-4:1rem;--chakra-lineHeights-5:1.25rem;--chakra-lineHeights-6:1.5rem;--chakra-lineHeights-7:1.75rem;--chakra-lineHeights-8:2rem;--chakra-lineHeights-9:2.25rem;--chakra-lineHeights-10:2.5rem;--chakra-lineHeights-normal:normal;--chakra-lineHeights-none:1;--chakra-lineHeights-shorter:1.25;--chakra-lineHeights-short:1.375;--chakra-lineHeights-base:1.5;--chakra-lineHeights-tall:1.625;--chakra-lineHeights-taller:2;--chakra-radii-none:0;--chakra-radii-sm:0.125rem;--chakra-radii-base:0.25rem;--chakra-radii-md:0.375rem;--chakra-radii-lg:0.5rem;--chakra-radii-xl:0.75rem;--chakra-radii-2xl:1rem;--chakra-radii-3xl:1.5rem;--chakra-radii-full:9999px;--chakra-space-1:0.25rem;--chakra-space-2:0.5rem;--chakra-space-3:0.75rem;--chakra-space-4:1rem;--chakra-space-5:1.25rem;--chakra-space-6:1.5rem;--chakra-space-7:1.75rem;--chakra-space-8:2rem;--chakra-space-9:2.25rem;--chakra-space-10:2.5rem;--chakra-space-12:3rem;--chakra-space-14:3.5rem;--chakra-space-16:4rem;--chakra-space-20:5rem;--chakra-space-24:6rem;--chakra-space-28:7rem;--chakra-space-32:8rem;--chakra-space-36:9rem;--chakra-space-40:10rem;--chakra-space-44:11rem;--chakra-space-48:12rem;--chakra-space-52:13rem;--chakra-space-56:14rem;--chakra-space-60:15rem;--chakra-space-64:16rem;--chakra-space-72:18rem;--chakra-space-80:20rem;--chakra-space-96:24rem;--chakra-space-px:1px;--chakra-space-0\.5:0.125rem;--chakra-space-1\.5:0.375rem;--chakra-space-2\.5:0.625rem;--chakra-space-3\.5:0.875rem;--chakra-shadows-xs:0 0 0 1px rgba(0, 0, 0, 0.05);--chakra-shadows-sm:0 1px 2px 0 rgba(0, 0, 0, 0.05);--chakra-shadows-base:0 1px 3px 0 rgba(0, 0, 0, 0.1),0 1px 2px 0 rgba(0, 0, 0, 0.06);--chakra-shadows-md:0 4px 6px -1px rgba(0, 0, 0, 0.1),0 2px 4px -1px rgba(0, 0, 0, 0.06);--chakra-shadows-lg:0 10px 15px -3px rgba(0, 0, 0, 0.1),0 4px 6px -2px rgba(0, 0, 0, 0.05);--chakra-shadows-xl:0 20px 25px -5px rgba(0, 0, 0, 0.1),0 10px 10px -5px rgba(0, 0, 0, 0.04);--chakra-shadows-2xl:0 25px 50px -12px rgba(0, 0, 0, 0.25);--chakra-shadows-outline:0 0 0 3px rgba(66, 153, 225, 0.6);--chakra-shadows-inner:inset 0 2px 4px 0 rgba(0,0,0,0.06);--chakra-shadows-none:none;--chakra-shadows-dark-lg:rgba(0, 0, 0, 0.1) 0px 0px 0px 1px,rgba(0, 0, 0, 0.2) 0px 5px 10px,rgba(0, 0, 0, 0.4) 0px 15px 40px;--chakra-sizes-1:0.25rem;--chakra-sizes-2:0.5rem;--chakra-sizes-3:0.75rem;--chakra-sizes-4:1rem;--chakra-sizes-5:1.25rem;--chakra-sizes-6:1.5rem;--chakra-sizes-7:1.75rem;--chakra-sizes-8:2rem;--chakra-sizes-9:2.25rem;--chakra-sizes-10:2.5rem;--chakra-sizes-12:3rem;--chakra-sizes-14:3.5rem;--chakra-sizes-16:4rem;--chakra-sizes-20:5rem;--chakra-sizes-24:6rem;--chakra-sizes-28:7rem;--chakra-sizes-32:8rem;--chakra-sizes-36:9rem;--chakra-sizes-40:10rem;--chakra-sizes-44:11rem;--chakra-sizes-48:12rem;--chakra-sizes-52:13rem;--chakra-sizes-56:14rem;--chakra-sizes-60:15rem;--chakra-sizes-64:16rem;--chakra-sizes-72:18rem;--chakra-sizes-80:20rem;--chakra-sizes-96:24rem;--chakra-sizes-px:1px;--chakra-sizes-0\.5:0.125rem;--chakra-sizes-1\.5:0.375rem;--chakra-sizes-2\.5:0.625rem;--chakra-sizes-3\.5:0.875rem;--chakra-sizes-max:max-content;--chakra-sizes-min:min-content;--chakra-sizes-full:100%;--chakra-sizes-3xs:14rem;--chakra-sizes-2xs:16rem;--chakra-sizes-xs:20rem;--chakra-sizes-sm:24rem;--chakra-sizes-md:28rem;--chakra-sizes-lg:32rem;--chakra-sizes-xl:36rem;--chakra-sizes-2xl:42rem;--chakra-sizes-3xl:48rem;--chakra-sizes-4xl:56rem;--chakra-sizes-5xl:64rem;--chakra-sizes-6xl:72rem;--chakra-sizes-7xl:80rem;--chakra-sizes-8xl:90rem;--chakra-sizes-container-sm:640px;--chakra-sizes-container-md:768px;--chakra-sizes-container-lg:1024px;--chakra-sizes-container-xl:1280px;--chakra-zIndices-hide:-1;--chakra-zIndices-auto:auto;--chakra-zIndices-base:0;--chakra-zIndices-docked:10;--chakra-zIndices-dropdown:1000;--chakra-zIndices-sticky:1100;--chakra-zIndices-banner:1200;--chakra-zIndices-overlay:1300;--chakra-zIndices-modal:1400;--chakra-zIndices-popover:1500;--chakra-zIndices-skipLink:1600;--chakra-zIndices-toast:1700;--chakra-zIndices-tooltip:1800;--chakra-transition-property-common:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform;--chakra-transition-property-colors:background-color,border-color,color,fill,stroke;--chakra-transition-property-dimensions:width,height;--chakra-transition-property-position:left,right,top,bottom;--chakra-transition-property-background:background-color,background-image,background-position;--chakra-transition-easing-ease-in:cubic-bezier(0.4, 0, 1, 1);--chakra-transition-easing-ease-out:cubic-bezier(0, 0, 0.2, 1);--chakra-transition-easing-ease-in-out:cubic-bezier(0.4, 0, 0.2, 1);--chakra-transition-duration-ultra-fast:50ms;--chakra-transition-duration-faster:100ms;--chakra-transition-duration-fast:150ms;--chakra-transition-duration-normal:200ms;--chakra-transition-duration-slow:300ms;--chakra-transition-duration-slower:400ms;--chakra-transition-duration-ultra-slow:500ms;--chakra-blur-none:0;--chakra-blur-sm:4px;--chakra-blur-base:8px;--chakra-blur-md:12px;--chakra-blur-lg:16px;--chakra-blur-xl:24px;--chakra-blur-2xl:40px;--chakra-blur-3xl:64px;}</style><style data-emotion="css-global 1syi0wy">html{line-height:1.5;-webkit-text-size-adjust:100%;font-family:system-ui,sans-serif;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;-moz-osx-font-smoothing:grayscale;touch-action:manipulation;}body{position:relative;min-height:100%;font-feature-settings:'kern';}*,*::before,*::after{border-width:0;border-style:solid;box-sizing:border-box;}main{display:block;}hr{border-top-width:1px;box-sizing:content-box;height:0;overflow:visible;}pre,code,kbd,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-size:1em;}a{background-color:transparent;color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit;}abbr[title]{border-bottom:none;-webkit-text-decoration:underline;text-decoration:underline;-webkit-text-decoration:underline dotted;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;}b,strong{font-weight:bold;}small{font-size:80%;}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline;}sub{bottom:-0.25em;}sup{top:-0.5em;}img{border-style:none;}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0;}button,input{overflow:visible;}button,select{text-transform:none;}button::-moz-focus-inner,[type="button"]::-moz-focus-inner,[type="reset"]::-moz-focus-inner,[type="submit"]::-moz-focus-inner{border-style:none;padding:0;}fieldset{padding:0.35em 0.75em 0.625em;}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal;}progress{vertical-align:baseline;}textarea{overflow:auto;}[type="checkbox"],[type="radio"]{box-sizing:border-box;padding:0;}[type="number"]::-webkit-inner-spin-button,[type="number"]::-webkit-outer-spin-button{-webkit-appearance:none!important;}input[type="number"]{-moz-appearance:textfield;}[type="search"]{-webkit-appearance:textfield;outline-offset:-2px;}[type="search"]::-webkit-search-decoration{-webkit-appearance:none!important;}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit;}details{display:block;}summary{display:-webkit-box;display:-webkit-list-item;display:-ms-list-itembox;display:list-item;}template{display:none;}[hidden]{display:none!important;}body,blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0;}button{background:transparent;padding:0;}fieldset{margin:0;padding:0;}ol,ul{margin:0;padding:0;}textarea{resize:vertical;}button,[role="button"]{cursor:pointer;}button::-moz-focus-inner{border:0!important;}table{border-collapse:collapse;}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit;}button,input,optgroup,select,textarea{padding:0;line-height:inherit;color:inherit;}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle;}img,video{max-width:100%;height:auto;}[data-js-focus-visible] :focus:not([data-focus-visible-added]){outline:none;box-shadow:none;}select::-ms-expand{display:none;}</style><style data-emotion="css-global 1baqkrf">body{font-family:var(--chakra-fonts-body);color:var(--chakra-colors-gray-800);background:var(--chakra-colors-white);transition-property:background-color;transition-duration:var(--chakra-transition-duration-normal);line-height:var(--chakra-lineHeights-base);}*::-webkit-input-placeholder{color:var(--chakra-colors-gray-400);}*::-moz-placeholder{color:var(--chakra-colors-gray-400);}*:-ms-input-placeholder{color:var(--chakra-colors-gray-400);}*::placeholder{color:var(--chakra-colors-gray-400);}*,*::before,::after{border-color:var(--chakra-colors-gray-200);word-wrap:break-word;}</style><div style="color:#000;background:#fff;font-family:-apple-system, BlinkMacSystemFont, Roboto, &quot;Segoe UI&quot;, &quot;Fira Sans&quot;, Avenir, &quot;Helvetica Neue&quot;, &quot;Lucida Grande&quot;, sans-serif;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>body { margin: 0 }</style><h1 style="display:inline-block;border-right:1px solid rgba(0, 0, 0,.3);margin:0;margin-right:20px;padding:10px 23px 10px 0;font-size:24px;font-weight:500;vertical-align:top">500</h1><div style="display:inline-block;text-align:left;line-height:49px;height:49px;vertical-align:middle"><h2 style="font-size:14px;font-weight:normal;line-height:inherit;margin:0;padding:0">Internal Server Error<!-- -->.</h2></div></div></div><span></span></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"statusCode":500}},"page":"/_error","query":{},"buildId":"Ci3EcXz8ajkhs7MVidKTf","nextExport":true,"isFallback":false,"gip":true,"scriptLoader":[]}</script></body></html> \ No newline at end of file
diff --git a/build/server/pages/_app.js b/build/server/pages/_app.js
new file mode 100644
index 0000000..75dc828
--- /dev/null
+++ b/build/server/pages/_app.js
@@ -0,0 +1,66 @@
+(function() {
+var exports = {};
+exports.id = 888;
+exports.ids = [888];
+exports.modules = {
+
+/***/ 476:
+/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(282);
+/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var _chakra_ui_react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(426);
+/* harmony import */ var _chakra_ui_react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_chakra_ui_react__WEBPACK_IMPORTED_MODULE_1__);
+
+
+function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
+
+function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
+
+function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
+
+
+
+
+function MyApp({
+ Component,
+ pageProps
+}) {
+ return /*#__PURE__*/react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(_chakra_ui_react__WEBPACK_IMPORTED_MODULE_1__.ChakraProvider, {
+ children: /*#__PURE__*/react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx(Component, _objectSpread({}, pageProps))
+ });
+}
+
+/* harmony default export */ __webpack_exports__["default"] = (MyApp);
+
+/***/ }),
+
+/***/ 426:
+/***/ (function(module) {
+
+"use strict";
+module.exports = require("@chakra-ui/react");;
+
+/***/ }),
+
+/***/ 282:
+/***/ (function(module) {
+
+"use strict";
+module.exports = require("react/jsx-runtime");;
+
+/***/ })
+
+};
+;
+
+// load runtime
+var __webpack_require__ = require("../webpack-runtime.js");
+__webpack_require__.C(exports);
+var __webpack_exec__ = function(moduleId) { return __webpack_require__(__webpack_require__.s = moduleId); }
+var __webpack_exports__ = (__webpack_exec__(476));
+module.exports = __webpack_exports__;
+
+})(); \ No newline at end of file
diff --git a/build/server/pages/_document.js b/build/server/pages/_document.js
new file mode 100644
index 0000000..f4167fc
--- /dev/null
+++ b/build/server/pages/_document.js
@@ -0,0 +1,1209 @@
+(function() {
+var exports = {};
+exports.id = 660;
+exports.ids = [660];
+exports.modules = {
+
+/***/ 154:
+/***/ (function(module) {
+
+function _extends() {
+ module.exports = _extends = Object.assign || function (target) {
+ for (var i = 1; i < arguments.length; i++) {
+ var source = arguments[i];
+
+ for (var key in source) {
+ if (Object.prototype.hasOwnProperty.call(source, key)) {
+ target[key] = source[key];
+ }
+ }
+ }
+
+ return target;
+ };
+
+ return _extends.apply(this, arguments);
+}
+
+module.exports = _extends;
+
+/***/ }),
+
+/***/ 318:
+/***/ (function(module) {
+
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {
+ "default": obj
+ };
+}
+
+module.exports = _interopRequireDefault;
+
+/***/ }),
+
+/***/ 316:
+/***/ (function(module) {
+
+function _objectWithoutPropertiesLoose(source, excluded) {
+ if (source == null) return {};
+ var target = {};
+ var sourceKeys = Object.keys(source);
+ var key, i;
+
+ for (i = 0; i < sourceKeys.length; i++) {
+ key = sourceKeys[i];
+ if (excluded.indexOf(key) >= 0) continue;
+ target[key] = source[key];
+ }
+
+ return target;
+}
+
+module.exports = _objectWithoutPropertiesLoose;
+
+/***/ }),
+
+/***/ 792:
+/***/ (function(__unused_webpack_module, exports) {
+
+"use strict";
+
+
+exports.__esModule = true;
+exports.default = initHeadManager;
+exports.DOMAttributeNames = void 0;
+const DOMAttributeNames = {
+ acceptCharset: 'accept-charset',
+ className: 'class',
+ htmlFor: 'for',
+ httpEquiv: 'http-equiv',
+ noModule: 'noModule'
+};
+exports.DOMAttributeNames = DOMAttributeNames;
+
+function reactElementToDOM({
+ type,
+ props
+}) {
+ const el = document.createElement(type);
+
+ for (const p in props) {
+ if (!props.hasOwnProperty(p)) continue;
+ if (p === 'children' || p === 'dangerouslySetInnerHTML') continue; // we don't render undefined props to the DOM
+
+ if (props[p] === undefined) continue;
+ const attr = DOMAttributeNames[p] || p.toLowerCase();
+
+ if (type === 'script' && (attr === 'async' || attr === 'defer' || attr === 'noModule')) {
+ ;
+ el[attr] = !!props[p];
+ } else {
+ el.setAttribute(attr, props[p]);
+ }
+ }
+
+ const {
+ children,
+ dangerouslySetInnerHTML
+ } = props;
+
+ if (dangerouslySetInnerHTML) {
+ el.innerHTML = dangerouslySetInnerHTML.__html || '';
+ } else if (children) {
+ el.textContent = typeof children === 'string' ? children : Array.isArray(children) ? children.join('') : '';
+ }
+
+ return el;
+}
+
+function updateElements(type, components) {
+ const headEl = document.getElementsByTagName('head')[0];
+ const headCountEl = headEl.querySelector('meta[name=next-head-count]');
+
+ if (false) {}
+
+ const headCount = Number(headCountEl.content);
+ const oldTags = [];
+
+ for (let i = 0, j = headCountEl.previousElementSibling; i < headCount; i++, j = j.previousElementSibling) {
+ if (j.tagName.toLowerCase() === type) {
+ oldTags.push(j);
+ }
+ }
+
+ const newTags = components.map(reactElementToDOM).filter(newTag => {
+ for (let k = 0, len = oldTags.length; k < len; k++) {
+ const oldTag = oldTags[k];
+
+ if (oldTag.isEqualNode(newTag)) {
+ oldTags.splice(k, 1);
+ return false;
+ }
+ }
+
+ return true;
+ });
+ oldTags.forEach(t => t.parentNode.removeChild(t));
+ newTags.forEach(t => headEl.insertBefore(t, headCountEl));
+ headCountEl.content = (headCount - oldTags.length + newTags.length).toString();
+}
+
+function initHeadManager() {
+ let updatePromise = null;
+ return {
+ mountedInstances: new Set(),
+ updateHead: head => {
+ const promise = updatePromise = Promise.resolve().then(() => {
+ if (promise !== updatePromise) return;
+ updatePromise = null;
+ const tags = {};
+ head.forEach(h => {
+ if ( // If the font tag is loaded only on client navigation
+ // it won't be inlined. In this case revert to the original behavior
+ h.type === 'link' && h.props['data-optimized-fonts'] && !document.querySelector(`style[data-href="${h.props['data-href']}"]`)) {
+ h.props.href = h.props['data-href'];
+ h.props['data-href'] = undefined;
+ }
+
+ const components = tags[h.type] || [];
+ components.push(h);
+ tags[h.type] = components;
+ });
+ const titleComponent = tags.title ? tags.title[0] : null;
+ let title = '';
+
+ if (titleComponent) {
+ const {
+ children
+ } = titleComponent.props;
+ title = typeof children === 'string' ? children : Array.isArray(children) ? children.join('') : '';
+ }
+
+ if (title !== document.title) document.title = title;
+ ['meta', 'base', 'link', 'style', 'script'].forEach(type => {
+ updateElements(type, tags[type] || []);
+ });
+ });
+ }
+ };
+}
+
+/***/ }),
+
+/***/ 447:
+/***/ (function(__unused_webpack_module, exports) {
+
+"use strict";
+
+
+exports.__esModule = true;
+exports.cancelIdleCallback = exports.requestIdleCallback = void 0;
+
+const requestIdleCallback = typeof self !== 'undefined' && self.requestIdleCallback || function (cb) {
+ let start = Date.now();
+ return setTimeout(function () {
+ cb({
+ didTimeout: false,
+ timeRemaining: function () {
+ return Math.max(0, 50 - (Date.now() - start));
+ }
+ });
+ }, 1);
+};
+
+exports.requestIdleCallback = requestIdleCallback;
+
+const cancelIdleCallback = typeof self !== 'undefined' && self.cancelIdleCallback || function (id) {
+ return clearTimeout(id);
+};
+
+exports.cancelIdleCallback = cancelIdleCallback;
+
+/***/ }),
+
+/***/ 926:
+/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var _interopRequireDefault = __webpack_require__(318);
+
+exports.__esModule = true;
+exports.initScriptLoader = initScriptLoader;
+exports.default = void 0;
+
+var _extends2 = _interopRequireDefault(__webpack_require__(154));
+
+var _objectWithoutPropertiesLoose2 = _interopRequireDefault(__webpack_require__(316));
+
+var _react = __webpack_require__(297);
+
+var _headManagerContext = __webpack_require__(816);
+
+var _headManager = __webpack_require__(792);
+
+var _requestIdleCallback = __webpack_require__(447);
+
+const ScriptCache = new Map();
+const LoadCache = new Set();
+const ignoreProps = ['onLoad', 'dangerouslySetInnerHTML', 'children', 'onError', 'strategy'];
+
+const loadScript = props => {
+ const {
+ src,
+ id,
+ onLoad = () => {},
+ dangerouslySetInnerHTML,
+ children = '',
+ onError
+ } = props;
+ const cacheKey = id || src;
+
+ if (ScriptCache.has(src)) {
+ if (!LoadCache.has(cacheKey)) {
+ LoadCache.add(cacheKey); // Execute onLoad since the script loading has begun
+
+ ScriptCache.get(src).then(onLoad, onError);
+ }
+
+ return;
+ }
+
+ const el = document.createElement('script');
+ const loadPromise = new Promise((resolve, reject) => {
+ el.addEventListener('load', function () {
+ resolve();
+
+ if (onLoad) {
+ onLoad.call(this);
+ }
+ });
+ el.addEventListener('error', function () {
+ reject();
+
+ if (onError) {
+ onError();
+ }
+ });
+ });
+
+ if (src) {
+ ScriptCache.set(src, loadPromise);
+ LoadCache.add(cacheKey);
+ }
+
+ if (dangerouslySetInnerHTML) {
+ el.innerHTML = dangerouslySetInnerHTML.__html || '';
+ } else if (children) {
+ el.textContent = typeof children === 'string' ? children : Array.isArray(children) ? children.join('') : '';
+ } else if (src) {
+ el.src = src;
+ }
+
+ for (const [k, value] of Object.entries(props)) {
+ if (value === undefined || ignoreProps.includes(k)) {
+ continue;
+ }
+
+ const attr = _headManager.DOMAttributeNames[k] || k.toLowerCase();
+ el.setAttribute(attr, value);
+ }
+
+ document.body.appendChild(el);
+};
+
+function handleClientScriptLoad(props) {
+ const {
+ strategy = 'afterInteractive'
+ } = props;
+
+ if (strategy === 'afterInteractive') {
+ loadScript(props);
+ } else if (strategy === 'lazyOnload') {
+ window.addEventListener('load', () => {
+ (0, _requestIdleCallback.requestIdleCallback)(() => loadScript(props));
+ });
+ }
+}
+
+function loadLazyScript(props) {
+ if (document.readyState === 'complete') {
+ (0, _requestIdleCallback.requestIdleCallback)(() => loadScript(props));
+ } else {
+ window.addEventListener('load', () => {
+ (0, _requestIdleCallback.requestIdleCallback)(() => loadScript(props));
+ });
+ }
+}
+
+function initScriptLoader(scriptLoaderItems) {
+ scriptLoaderItems.forEach(handleClientScriptLoad);
+}
+
+function Script(props) {
+ const {
+ src = '',
+ onLoad = () => {},
+ strategy = 'afterInteractive',
+ onError
+ } = props,
+ restProps = (0, _objectWithoutPropertiesLoose2.default)(props, ["src", "onLoad", "dangerouslySetInnerHTML", "strategy", "onError"]); // Context is available only during SSR
+
+ const {
+ updateScripts,
+ scripts
+ } = (0, _react.useContext)(_headManagerContext.HeadManagerContext);
+ (0, _react.useEffect)(() => {
+ if (strategy === 'afterInteractive') {
+ loadScript(props);
+ } else if (strategy === 'lazyOnload') {
+ loadLazyScript(props);
+ }
+ }, [props, strategy]);
+
+ if (strategy === 'beforeInteractive') {
+ if (updateScripts) {
+ scripts.beforeInteractive = (scripts.beforeInteractive || []).concat([(0, _extends2.default)({
+ src,
+ onLoad,
+ onError
+ }, restProps)]);
+ updateScripts(scripts);
+ }
+ }
+
+ return null;
+}
+
+var _default = Script;
+exports.default = _default;
+
+/***/ }),
+
+/***/ 881:
+/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
+
+"use strict";
+
+
+function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
+
+function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
+
+function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
+
+function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
+
+function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
+
+exports.__esModule = true;
+exports.Html = Html;
+exports.Main = Main;
+exports.NextScript = exports.Head = exports.default = void 0;
+
+var _propTypes = _interopRequireDefault(__webpack_require__(229));
+
+var _react = _interopRequireWildcard(__webpack_require__(297));
+
+var _server = _interopRequireDefault(__webpack_require__(168));
+
+var _constants = __webpack_require__(227);
+
+var _documentContext = __webpack_require__(932);
+
+var _utils = __webpack_require__(579);
+
+exports.DocumentContext = _utils.DocumentContext;
+exports.DocumentInitialProps = _utils.DocumentInitialProps;
+exports.DocumentProps = _utils.DocumentProps;
+
+var _getPageFiles = __webpack_require__(171);
+
+var _utils2 = __webpack_require__(105);
+
+var _htmlescape = __webpack_require__(630);
+
+var _script = _interopRequireDefault(__webpack_require__(926));
+
+function _getRequireWildcardCache() {
+ if (typeof WeakMap !== "function") return null;
+ var cache = new WeakMap();
+
+ _getRequireWildcardCache = function () {
+ return cache;
+ };
+
+ return cache;
+}
+
+function _interopRequireWildcard(obj) {
+ if (obj && obj.__esModule) {
+ return obj;
+ }
+
+ if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
+ return {
+ default: obj
+ };
+ }
+
+ var cache = _getRequireWildcardCache();
+
+ if (cache && cache.has(obj)) {
+ return cache.get(obj);
+ }
+
+ var newObj = {};
+ var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
+
+ for (var key in obj) {
+ if (Object.prototype.hasOwnProperty.call(obj, key)) {
+ var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
+
+ if (desc && (desc.get || desc.set)) {
+ Object.defineProperty(newObj, key, desc);
+ } else {
+ newObj[key] = obj[key];
+ }
+ }
+ }
+
+ newObj.default = obj;
+
+ if (cache) {
+ cache.set(obj, newObj);
+ }
+
+ return newObj;
+}
+
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {
+ default: obj
+ };
+}
+
+function getDocumentFiles(buildManifest, pathname, inAmpMode) {
+ const sharedFiles = (0, _getPageFiles.getPageFiles)(buildManifest, '/_app');
+ const pageFiles = inAmpMode ? [] : (0, _getPageFiles.getPageFiles)(buildManifest, pathname);
+ return {
+ sharedFiles,
+ pageFiles,
+ allFiles: [...new Set([...sharedFiles, ...pageFiles])]
+ };
+}
+
+function getPolyfillScripts(context, props) {
+ // polyfills.js has to be rendered as nomodule without async
+ // It also has to be the first script to load
+ const {
+ assetPrefix,
+ buildManifest,
+ devOnlyCacheBusterQueryString,
+ disableOptimizedLoading
+ } = context;
+ return buildManifest.polyfillFiles.filter(polyfill => polyfill.endsWith('.js') && !polyfill.endsWith('.module.js')).map(polyfill => /*#__PURE__*/_react.default.createElement("script", {
+ key: polyfill,
+ defer: !disableOptimizedLoading,
+ nonce: props.nonce,
+ crossOrigin: props.crossOrigin || undefined,
+ noModule: true,
+ src: `${assetPrefix}/_next/${polyfill}${devOnlyCacheBusterQueryString}`
+ }));
+}
+
+function getPreNextScripts(context, props) {
+ const {
+ scriptLoader,
+ disableOptimizedLoading
+ } = context;
+ return (scriptLoader.beforeInteractive || []).map(file => {
+ const {
+ strategy
+ } = file,
+ scriptProps = _objectWithoutProperties(file, ["strategy"]);
+
+ return /*#__PURE__*/_react.default.createElement("script", Object.assign({}, scriptProps, {
+ defer: !disableOptimizedLoading,
+ nonce: props.nonce,
+ crossOrigin: props.crossOrigin || undefined
+ }));
+ });
+}
+
+function getDynamicChunks(context, props, files) {
+ const {
+ dynamicImports,
+ assetPrefix,
+ isDevelopment,
+ devOnlyCacheBusterQueryString,
+ disableOptimizedLoading
+ } = context;
+ return dynamicImports.map(file => {
+ if (!file.endsWith('.js') || files.allFiles.includes(file)) return null;
+ return /*#__PURE__*/_react.default.createElement("script", {
+ async: !isDevelopment && disableOptimizedLoading,
+ defer: !disableOptimizedLoading,
+ key: file,
+ src: `${assetPrefix}/_next/${encodeURI(file)}${devOnlyCacheBusterQueryString}`,
+ nonce: props.nonce,
+ crossOrigin: props.crossOrigin || undefined
+ });
+ });
+}
+
+function getScripts(context, props, files) {
+ var _buildManifest$lowPri;
+
+ const {
+ assetPrefix,
+ buildManifest,
+ isDevelopment,
+ devOnlyCacheBusterQueryString,
+ disableOptimizedLoading
+ } = context;
+ const normalScripts = files.allFiles.filter(file => file.endsWith('.js'));
+ const lowPriorityScripts = (_buildManifest$lowPri = buildManifest.lowPriorityFiles) == null ? void 0 : _buildManifest$lowPri.filter(file => file.endsWith('.js'));
+ return [...normalScripts, ...lowPriorityScripts].map(file => {
+ return /*#__PURE__*/_react.default.createElement("script", {
+ key: file,
+ src: `${assetPrefix}/_next/${encodeURI(file)}${devOnlyCacheBusterQueryString}`,
+ nonce: props.nonce,
+ async: !isDevelopment && disableOptimizedLoading,
+ defer: !disableOptimizedLoading,
+ crossOrigin: props.crossOrigin || undefined
+ });
+ });
+}
+/**
+* `Document` component handles the initial `document` markup and renders only on the server side.
+* Commonly used for implementing server side rendering for `css-in-js` libraries.
+*/
+
+
+class Document extends _react.Component {
+ /**
+ * `getInitialProps` hook returns the context object with the addition of `renderPage`.
+ * `renderPage` callback executes `React` rendering logic synchronously to support server-rendering wrappers
+ */
+ static async getInitialProps(ctx) {
+ const enhanceApp = App => {
+ return props => /*#__PURE__*/_react.default.createElement(App, props);
+ };
+
+ const {
+ html,
+ head
+ } = await ctx.renderPage({
+ enhanceApp
+ });
+ const styles = [...(0, _server.default)()];
+ return {
+ html,
+ head,
+ styles
+ };
+ }
+
+ static renderDocument(DocumentComponent, props) {
+ return /*#__PURE__*/_react.default.createElement(_documentContext.DocumentContext.Provider, {
+ value: props
+ }, /*#__PURE__*/_react.default.createElement(DocumentComponent, props));
+ }
+
+ render() {
+ return /*#__PURE__*/_react.default.createElement(Html, null, /*#__PURE__*/_react.default.createElement(Head, null), /*#__PURE__*/_react.default.createElement("body", null, /*#__PURE__*/_react.default.createElement(Main, null), /*#__PURE__*/_react.default.createElement(NextScript, null)));
+ }
+
+}
+
+exports.default = Document;
+
+function Html(props) {
+ const {
+ inAmpMode,
+ docComponentsRendered,
+ locale
+ } = (0, _react.useContext)(_documentContext.DocumentContext);
+ docComponentsRendered.Html = true;
+ return /*#__PURE__*/_react.default.createElement("html", Object.assign({}, props, {
+ lang: props.lang || locale || undefined,
+ amp: inAmpMode ? '' : undefined,
+ "data-ampdevmode": inAmpMode && false ? '' : undefined
+ }));
+}
+
+class Head extends _react.Component {
+ constructor(...args) {
+ super(...args);
+ this.context = void 0;
+ }
+
+ getCssLinks(files) {
+ const {
+ assetPrefix,
+ devOnlyCacheBusterQueryString,
+ dynamicImports
+ } = this.context;
+ const cssFiles = files.allFiles.filter(f => f.endsWith('.css'));
+ const sharedFiles = new Set(files.sharedFiles); // Unmanaged files are CSS files that will be handled directly by the
+ // webpack runtime (`mini-css-extract-plugin`).
+
+ let unmangedFiles = new Set([]);
+ let dynamicCssFiles = Array.from(new Set(dynamicImports.filter(file => file.endsWith('.css'))));
+
+ if (dynamicCssFiles.length) {
+ const existing = new Set(cssFiles);
+ dynamicCssFiles = dynamicCssFiles.filter(f => !(existing.has(f) || sharedFiles.has(f)));
+ unmangedFiles = new Set(dynamicCssFiles);
+ cssFiles.push(...dynamicCssFiles);
+ }
+
+ let cssLinkElements = [];
+ cssFiles.forEach(file => {
+ const isSharedFile = sharedFiles.has(file);
+
+ if (true) {
+ cssLinkElements.push( /*#__PURE__*/_react.default.createElement("link", {
+ key: `${file}-preload`,
+ nonce: this.props.nonce,
+ rel: "preload",
+ href: `${assetPrefix}/_next/${encodeURI(file)}${devOnlyCacheBusterQueryString}`,
+ as: "style",
+ crossOrigin: this.props.crossOrigin || undefined
+ }));
+ }
+
+ const isUnmanagedFile = unmangedFiles.has(file);
+ cssLinkElements.push( /*#__PURE__*/_react.default.createElement("link", {
+ key: file,
+ nonce: this.props.nonce,
+ rel: "stylesheet",
+ href: `${assetPrefix}/_next/${encodeURI(file)}${devOnlyCacheBusterQueryString}`,
+ crossOrigin: this.props.crossOrigin || undefined,
+ "data-n-g": isUnmanagedFile ? undefined : isSharedFile ? '' : undefined,
+ "data-n-p": isUnmanagedFile ? undefined : isSharedFile ? undefined : ''
+ }));
+ });
+
+ if (true) {
+ cssLinkElements = this.makeStylesheetInert(cssLinkElements);
+ }
+
+ return cssLinkElements.length === 0 ? null : cssLinkElements;
+ }
+
+ getPreloadDynamicChunks() {
+ const {
+ dynamicImports,
+ assetPrefix,
+ devOnlyCacheBusterQueryString
+ } = this.context;
+ return dynamicImports.map(file => {
+ if (!file.endsWith('.js')) {
+ return null;
+ }
+
+ return /*#__PURE__*/_react.default.createElement("link", {
+ rel: "preload",
+ key: file,
+ href: `${assetPrefix}/_next/${encodeURI(file)}${devOnlyCacheBusterQueryString}`,
+ as: "script",
+ nonce: this.props.nonce,
+ crossOrigin: this.props.crossOrigin || undefined
+ });
+ }) // Filter out nulled scripts
+ .filter(Boolean);
+ }
+
+ getPreloadMainLinks(files) {
+ const {
+ assetPrefix,
+ devOnlyCacheBusterQueryString,
+ scriptLoader
+ } = this.context;
+ const preloadFiles = files.allFiles.filter(file => {
+ return file.endsWith('.js');
+ });
+ return [...(scriptLoader.beforeInteractive || []).map(file => /*#__PURE__*/_react.default.createElement("link", {
+ key: file.src,
+ nonce: this.props.nonce,
+ rel: "preload",
+ href: file.src,
+ as: "script",
+ crossOrigin: this.props.crossOrigin || undefined
+ })), ...preloadFiles.map(file => /*#__PURE__*/_react.default.createElement("link", {
+ key: file,
+ nonce: this.props.nonce,
+ rel: "preload",
+ href: `${assetPrefix}/_next/${encodeURI(file)}${devOnlyCacheBusterQueryString}`,
+ as: "script",
+ crossOrigin: this.props.crossOrigin || undefined
+ }))];
+ }
+
+ getDynamicChunks(files) {
+ return getDynamicChunks(this.context, this.props, files);
+ }
+
+ getPreNextScripts() {
+ return getPreNextScripts(this.context, this.props);
+ }
+
+ getScripts(files) {
+ return getScripts(this.context, this.props, files);
+ }
+
+ getPolyfillScripts() {
+ return getPolyfillScripts(this.context, this.props);
+ }
+
+ handleDocumentScriptLoaderItems(children) {
+ const {
+ scriptLoader
+ } = this.context;
+ const scriptLoaderItems = [];
+ const filteredChildren = [];
+
+ _react.default.Children.forEach(children, child => {
+ if (child.type === _script.default) {
+ if (child.props.strategy === 'beforeInteractive') {
+ scriptLoader.beforeInteractive = (scriptLoader.beforeInteractive || []).concat([_objectSpread({}, child.props)]);
+ return;
+ } else if (['lazyOnload', 'afterInteractive'].includes(child.props.strategy)) {
+ scriptLoaderItems.push(child.props);
+ return;
+ }
+ }
+
+ filteredChildren.push(child);
+ });
+
+ this.context.__NEXT_DATA__.scriptLoader = scriptLoaderItems;
+ return filteredChildren;
+ }
+
+ makeStylesheetInert(node) {
+ return _react.default.Children.map(node, c => {
+ if (c.type === 'link' && c.props['href'] && _constants.OPTIMIZED_FONT_PROVIDERS.some(({
+ url
+ }) => c.props['href'].startsWith(url))) {
+ const newProps = _objectSpread({}, c.props || {});
+
+ newProps['data-href'] = newProps['href'];
+ newProps['href'] = undefined;
+ return /*#__PURE__*/_react.default.cloneElement(c, newProps);
+ } else if (c.props && c.props['children']) {
+ c.props['children'] = this.makeStylesheetInert(c.props['children']);
+ }
+
+ return c;
+ });
+ }
+
+ render() {
+ var _this$props$nonce, _this$props$nonce2;
+
+ const {
+ styles,
+ ampPath,
+ inAmpMode,
+ hybridAmp,
+ canonicalBase,
+ __NEXT_DATA__,
+ dangerousAsPath,
+ headTags,
+ unstable_runtimeJS,
+ unstable_JsPreload,
+ disableOptimizedLoading
+ } = this.context;
+ const disableRuntimeJS = unstable_runtimeJS === false;
+ const disableJsPreload = unstable_JsPreload === false || !disableOptimizedLoading;
+ this.context.docComponentsRendered.Head = true;
+ let {
+ head
+ } = this.context;
+ let cssPreloads = [];
+ let otherHeadElements = [];
+
+ if (head) {
+ head.forEach(c => {
+ if (c && c.type === 'link' && c.props['rel'] === 'preload' && c.props['as'] === 'style') {
+ cssPreloads.push(c);
+ } else {
+ c && otherHeadElements.push(c);
+ }
+ });
+ head = cssPreloads.concat(otherHeadElements);
+ }
+
+ let children = _react.default.Children.toArray(this.props.children).filter(Boolean); // show a warning if Head contains <title> (only in development)
+
+
+ if (false) {}
+
+ if ( true && !inAmpMode) {
+ children = this.makeStylesheetInert(children);
+ }
+
+ children = this.handleDocumentScriptLoaderItems(children);
+ let hasAmphtmlRel = false;
+ let hasCanonicalRel = false; // show warning and remove conflicting amp head tags
+
+ head = _react.default.Children.map(head || [], child => {
+ if (!child) return child;
+ const {
+ type,
+ props
+ } = child;
+
+ if (inAmpMode) {
+ let badProp = '';
+
+ if (type === 'meta' && props.name === 'viewport') {
+ badProp = 'name="viewport"';
+ } else if (type === 'link' && props.rel === 'canonical') {
+ hasCanonicalRel = true;
+ } else if (type === 'script') {
+ // only block if
+ // 1. it has a src and isn't pointing to ampproject's CDN
+ // 2. it is using dangerouslySetInnerHTML without a type or
+ // a type of text/javascript
+ if (props.src && props.src.indexOf('ampproject') < -1 || props.dangerouslySetInnerHTML && (!props.type || props.type === 'text/javascript')) {
+ badProp = '<script';
+ Object.keys(props).forEach(prop => {
+ badProp += ` ${prop}="${props[prop]}"`;
+ });
+ badProp += '/>';
+ }
+ }
+
+ if (badProp) {
+ console.warn(`Found conflicting amp tag "${child.type}" with conflicting prop ${badProp} in ${__NEXT_DATA__.page}. https://nextjs.org/docs/messages/conflicting-amp-tag`);
+ return null;
+ }
+ } else {
+ // non-amp mode
+ if (type === 'link' && props.rel === 'amphtml') {
+ hasAmphtmlRel = true;
+ }
+ }
+
+ return child;
+ }); // try to parse styles from fragment for backwards compat
+
+ const curStyles = Array.isArray(styles) ? styles : [];
+
+ if (inAmpMode && styles && // @ts-ignore Property 'props' does not exist on type ReactElement
+ styles.props && // @ts-ignore Property 'props' does not exist on type ReactElement
+ Array.isArray(styles.props.children)) {
+ const hasStyles = el => {
+ var _el$props, _el$props$dangerously;
+
+ return el == null ? void 0 : (_el$props = el.props) == null ? void 0 : (_el$props$dangerously = _el$props.dangerouslySetInnerHTML) == null ? void 0 : _el$props$dangerously.__html;
+ }; // @ts-ignore Property 'props' does not exist on type ReactElement
+
+
+ styles.props.children.forEach(child => {
+ if (Array.isArray(child)) {
+ child.forEach(el => hasStyles(el) && curStyles.push(el));
+ } else if (hasStyles(child)) {
+ curStyles.push(child);
+ }
+ });
+ }
+
+ const files = getDocumentFiles(this.context.buildManifest, this.context.__NEXT_DATA__.page, inAmpMode);
+ return /*#__PURE__*/_react.default.createElement("head", this.props, this.context.isDevelopment && /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("style", {
+ "data-next-hide-fouc": true,
+ "data-ampdevmode": inAmpMode ? 'true' : undefined,
+ dangerouslySetInnerHTML: {
+ __html: `body{display:none}`
+ }
+ }), /*#__PURE__*/_react.default.createElement("noscript", {
+ "data-next-hide-fouc": true,
+ "data-ampdevmode": inAmpMode ? 'true' : undefined
+ }, /*#__PURE__*/_react.default.createElement("style", {
+ dangerouslySetInnerHTML: {
+ __html: `body{display:block}`
+ }
+ }))), children, true && /*#__PURE__*/_react.default.createElement("meta", {
+ name: "next-font-preconnect"
+ }), head, /*#__PURE__*/_react.default.createElement("meta", {
+ name: "next-head-count",
+ content: _react.default.Children.count(head || []).toString()
+ }), inAmpMode && /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("meta", {
+ name: "viewport",
+ content: "width=device-width,minimum-scale=1,initial-scale=1"
+ }), !hasCanonicalRel && /*#__PURE__*/_react.default.createElement("link", {
+ rel: "canonical",
+ href: canonicalBase + (0, _utils2.cleanAmpPath)(dangerousAsPath)
+ }), /*#__PURE__*/_react.default.createElement("link", {
+ rel: "preload",
+ as: "script",
+ href: "https://cdn.ampproject.org/v0.js"
+ }), styles && /*#__PURE__*/_react.default.createElement("style", {
+ "amp-custom": "",
+ dangerouslySetInnerHTML: {
+ __html: curStyles.map(style => style.props.dangerouslySetInnerHTML.__html).join('').replace(/\/\*# sourceMappingURL=.*\*\//g, '').replace(/\/\*@ sourceURL=.*?\*\//g, '')
+ }
+ }), /*#__PURE__*/_react.default.createElement("style", {
+ "amp-boilerplate": "",
+ dangerouslySetInnerHTML: {
+ __html: `body{-webkit-animation:-amp-start 8s steps(1,end) 0s 1 normal both;-moz-animation:-amp-start 8s steps(1,end) 0s 1 normal both;-ms-animation:-amp-start 8s steps(1,end) 0s 1 normal both;animation:-amp-start 8s steps(1,end) 0s 1 normal both}@-webkit-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-moz-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-ms-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-o-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}`
+ }
+ }), /*#__PURE__*/_react.default.createElement("noscript", null, /*#__PURE__*/_react.default.createElement("style", {
+ "amp-boilerplate": "",
+ dangerouslySetInnerHTML: {
+ __html: `body{-webkit-animation:none;-moz-animation:none;-ms-animation:none;animation:none}`
+ }
+ })), /*#__PURE__*/_react.default.createElement("script", {
+ async: true,
+ src: "https://cdn.ampproject.org/v0.js"
+ })), !inAmpMode && /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, !hasAmphtmlRel && hybridAmp && /*#__PURE__*/_react.default.createElement("link", {
+ rel: "amphtml",
+ href: canonicalBase + getAmpPath(ampPath, dangerousAsPath)
+ }), true && this.getCssLinks(files), true && /*#__PURE__*/_react.default.createElement("noscript", {
+ "data-n-css": (_this$props$nonce = this.props.nonce) != null ? _this$props$nonce : ''
+ }), false && /*#__PURE__*/0, !disableRuntimeJS && !disableJsPreload && this.getPreloadDynamicChunks(), !disableRuntimeJS && !disableJsPreload && this.getPreloadMainLinks(files), !disableOptimizedLoading && !disableRuntimeJS && this.getPolyfillScripts(), !disableOptimizedLoading && !disableRuntimeJS && this.getPreNextScripts(), !disableOptimizedLoading && !disableRuntimeJS && this.getDynamicChunks(files), !disableOptimizedLoading && !disableRuntimeJS && this.getScripts(files), false && 0, false && /*#__PURE__*/0, this.context.isDevelopment &&
+ /*#__PURE__*/
+ // this element is used to mount development styles so the
+ // ordering matches production
+ // (by default, style-loader injects at the bottom of <head />)
+ _react.default.createElement("noscript", {
+ id: "__next_css__DO_NOT_USE__"
+ }), styles || null), /*#__PURE__*/_react.default.createElement(_react.default.Fragment, {}, ...(headTags || [])));
+ }
+
+}
+
+exports.Head = Head;
+Head.contextType = _documentContext.DocumentContext;
+Head.propTypes = {
+ nonce: _propTypes.default.string,
+ crossOrigin: _propTypes.default.string
+};
+
+function Main() {
+ const {
+ inAmpMode,
+ html,
+ docComponentsRendered
+ } = (0, _react.useContext)(_documentContext.DocumentContext);
+ docComponentsRendered.Main = true;
+ if (inAmpMode) return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, _constants.AMP_RENDER_TARGET);
+ return /*#__PURE__*/_react.default.createElement("div", {
+ id: "__next",
+ dangerouslySetInnerHTML: {
+ __html: html
+ }
+ });
+}
+
+class NextScript extends _react.Component {
+ constructor(...args) {
+ super(...args);
+ this.context = void 0;
+ }
+
+ getDynamicChunks(files) {
+ return getDynamicChunks(this.context, this.props, files);
+ }
+
+ getPreNextScripts() {
+ return getPreNextScripts(this.context, this.props);
+ }
+
+ getScripts(files) {
+ return getScripts(this.context, this.props, files);
+ }
+
+ getPolyfillScripts() {
+ return getPolyfillScripts(this.context, this.props);
+ }
+
+ static getInlineScriptSource(documentProps) {
+ const {
+ __NEXT_DATA__
+ } = documentProps;
+
+ try {
+ const data = JSON.stringify(__NEXT_DATA__);
+ return (0, _htmlescape.htmlEscapeJsonString)(data);
+ } catch (err) {
+ if (err.message.indexOf('circular structure')) {
+ throw new Error(`Circular structure in "getInitialProps" result of page "${__NEXT_DATA__.page}". https://nextjs.org/docs/messages/circular-structure`);
+ }
+
+ throw err;
+ }
+ }
+
+ render() {
+ const {
+ assetPrefix,
+ inAmpMode,
+ buildManifest,
+ unstable_runtimeJS,
+ docComponentsRendered,
+ devOnlyCacheBusterQueryString,
+ disableOptimizedLoading
+ } = this.context;
+ const disableRuntimeJS = unstable_runtimeJS === false;
+ docComponentsRendered.NextScript = true;
+
+ if (inAmpMode) {
+ if (true) {
+ return null;
+ }
+
+ const ampDevFiles = [...buildManifest.devFiles, ...buildManifest.polyfillFiles, ...buildManifest.ampDevFiles];
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, disableRuntimeJS ? null : /*#__PURE__*/_react.default.createElement("script", {
+ id: "__NEXT_DATA__",
+ type: "application/json",
+ nonce: this.props.nonce,
+ crossOrigin: this.props.crossOrigin || undefined,
+ dangerouslySetInnerHTML: {
+ __html: NextScript.getInlineScriptSource(this.context)
+ },
+ "data-ampdevmode": true
+ }), ampDevFiles.map(file => /*#__PURE__*/_react.default.createElement("script", {
+ key: file,
+ src: `${assetPrefix}/_next/${file}${devOnlyCacheBusterQueryString}`,
+ nonce: this.props.nonce,
+ crossOrigin: this.props.crossOrigin || undefined,
+ "data-ampdevmode": true
+ })));
+ }
+
+ if (false) {}
+
+ const files = getDocumentFiles(this.context.buildManifest, this.context.__NEXT_DATA__.page, inAmpMode);
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, !disableRuntimeJS && buildManifest.devFiles ? buildManifest.devFiles.map(file => /*#__PURE__*/_react.default.createElement("script", {
+ key: file,
+ src: `${assetPrefix}/_next/${encodeURI(file)}${devOnlyCacheBusterQueryString}`,
+ nonce: this.props.nonce,
+ crossOrigin: this.props.crossOrigin || undefined
+ })) : null, disableRuntimeJS ? null : /*#__PURE__*/_react.default.createElement("script", {
+ id: "__NEXT_DATA__",
+ type: "application/json",
+ nonce: this.props.nonce,
+ crossOrigin: this.props.crossOrigin || undefined,
+ dangerouslySetInnerHTML: {
+ __html: NextScript.getInlineScriptSource(this.context)
+ }
+ }), disableOptimizedLoading && !disableRuntimeJS && this.getPolyfillScripts(), disableOptimizedLoading && !disableRuntimeJS && this.getPreNextScripts(), disableOptimizedLoading && !disableRuntimeJS && this.getDynamicChunks(files), disableOptimizedLoading && !disableRuntimeJS && this.getScripts(files));
+ }
+
+}
+
+exports.NextScript = NextScript;
+NextScript.contextType = _documentContext.DocumentContext;
+NextScript.propTypes = {
+ nonce: _propTypes.default.string,
+ crossOrigin: _propTypes.default.string
+};
+NextScript.safariNomoduleFix = '!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()},!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();';
+
+function getAmpPath(ampPath, asPath) {
+ return ampPath || `${asPath}${asPath.includes('?') ? '&' : '?'}amp=1`;
+}
+
+/***/ }),
+
+/***/ 630:
+/***/ (function(__unused_webpack_module, exports) {
+
+"use strict";
+exports.__esModule=true;exports.htmlEscapeJsonString=htmlEscapeJsonString;// This utility is based on https://github.com/zertosh/htmlescape
+// License: https://github.com/zertosh/htmlescape/blob/0527ca7156a524d256101bb310a9f970f63078ad/LICENSE
+const ESCAPE_LOOKUP={'&':'\\u0026','>':'\\u003e','<':'\\u003c','\u2028':'\\u2028','\u2029':'\\u2029'};const ESCAPE_REGEX=/[&><\u2028\u2029]/g;function htmlEscapeJsonString(str){return str.replace(ESCAPE_REGEX,match=>ESCAPE_LOOKUP[match]);}
+//# sourceMappingURL=htmlescape.js.map
+
+/***/ }),
+
+/***/ 227:
+/***/ (function(module) {
+
+"use strict";
+module.exports = require("next/dist/next-server/lib/constants.js");;
+
+/***/ }),
+
+/***/ 932:
+/***/ (function(module) {
+
+"use strict";
+module.exports = require("next/dist/next-server/lib/document-context.js");;
+
+/***/ }),
+
+/***/ 816:
+/***/ (function(module) {
+
+"use strict";
+module.exports = require("next/dist/next-server/lib/head-manager-context.js");;
+
+/***/ }),
+
+/***/ 579:
+/***/ (function(module) {
+
+"use strict";
+module.exports = require("next/dist/next-server/lib/utils.js");;
+
+/***/ }),
+
+/***/ 171:
+/***/ (function(module) {
+
+"use strict";
+module.exports = require("next/dist/next-server/server/get-page-files.js");;
+
+/***/ }),
+
+/***/ 105:
+/***/ (function(module) {
+
+"use strict";
+module.exports = require("next/dist/next-server/server/utils.js");;
+
+/***/ }),
+
+/***/ 229:
+/***/ (function(module) {
+
+"use strict";
+module.exports = require("prop-types");;
+
+/***/ }),
+
+/***/ 297:
+/***/ (function(module) {
+
+"use strict";
+module.exports = require("react");;
+
+/***/ }),
+
+/***/ 168:
+/***/ (function(module) {
+
+"use strict";
+module.exports = require("styled-jsx/server");;
+
+/***/ })
+
+};
+;
+
+// load runtime
+var __webpack_require__ = require("../webpack-runtime.js");
+__webpack_require__.C(exports);
+var __webpack_exec__ = function(moduleId) { return __webpack_require__(__webpack_require__.s = moduleId); }
+var __webpack_exports__ = (__webpack_exec__(881));
+module.exports = __webpack_exports__;
+
+})(); \ No newline at end of file
diff --git a/build/server/pages/_error.js b/build/server/pages/_error.js
new file mode 100644
index 0000000..d9c78d4
--- /dev/null
+++ b/build/server/pages/_error.js
@@ -0,0 +1,151 @@
+(function() {
+var exports = {};
+exports.id = 820;
+exports.ids = [820];
+exports.modules = {
+
+/***/ 318:
+/***/ (function(module) {
+
+function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {
+ "default": obj
+ };
+}
+
+module.exports = _interopRequireDefault;
+
+/***/ }),
+
+/***/ 359:
+/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var _interopRequireDefault = __webpack_require__(318);
+
+exports.__esModule = true;
+exports.default = void 0;
+
+var _react = _interopRequireDefault(__webpack_require__(297));
+
+var _head = _interopRequireDefault(__webpack_require__(273));
+
+const statusCodes = {
+ 400: 'Bad Request',
+ 404: 'This page could not be found',
+ 405: 'Method Not Allowed',
+ 500: 'Internal Server Error'
+};
+
+function _getInitialProps({
+ res,
+ err
+}) {
+ const statusCode = res && res.statusCode ? res.statusCode : err ? err.statusCode : 404;
+ return {
+ statusCode
+ };
+}
+/**
+* `Error` component used for handling errors.
+*/
+
+
+class Error extends _react.default.Component {
+ render() {
+ const {
+ statusCode
+ } = this.props;
+ const title = this.props.title || statusCodes[statusCode] || 'An unexpected error has occurred';
+ return /*#__PURE__*/_react.default.createElement("div", {
+ style: styles.error
+ }, /*#__PURE__*/_react.default.createElement(_head.default, null, /*#__PURE__*/_react.default.createElement("title", null, statusCode ? `${statusCode}: ${title}` : 'Application error: a client-side exception has occurred')), /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement("style", {
+ dangerouslySetInnerHTML: {
+ __html: 'body { margin: 0 }'
+ }
+ }), statusCode ? /*#__PURE__*/_react.default.createElement("h1", {
+ style: styles.h1
+ }, statusCode) : null, /*#__PURE__*/_react.default.createElement("div", {
+ style: styles.desc
+ }, /*#__PURE__*/_react.default.createElement("h2", {
+ style: styles.h2
+ }, this.props.title || statusCode ? title : /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, "Application error: a client-side exception has occurred (", /*#__PURE__*/_react.default.createElement("a", {
+ href: "https://nextjs.org/docs/messages/client-side-exception-occurred"
+ }, "developer guidance"), ")"), "."))));
+ }
+
+}
+
+exports.default = Error;
+Error.displayName = 'ErrorPage';
+Error.getInitialProps = _getInitialProps;
+Error.origGetInitialProps = _getInitialProps;
+const styles = {
+ error: {
+ color: '#000',
+ background: '#fff',
+ fontFamily: '-apple-system, BlinkMacSystemFont, Roboto, "Segoe UI", "Fira Sans", Avenir, "Helvetica Neue", "Lucida Grande", sans-serif',
+ height: '100vh',
+ textAlign: 'center',
+ display: 'flex',
+ flexDirection: 'column',
+ alignItems: 'center',
+ justifyContent: 'center'
+ },
+ desc: {
+ display: 'inline-block',
+ textAlign: 'left',
+ lineHeight: '49px',
+ height: '49px',
+ verticalAlign: 'middle'
+ },
+ h1: {
+ display: 'inline-block',
+ borderRight: '1px solid rgba(0, 0, 0,.3)',
+ margin: 0,
+ marginRight: '20px',
+ padding: '10px 23px 10px 0',
+ fontSize: '24px',
+ fontWeight: 500,
+ verticalAlign: 'top'
+ },
+ h2: {
+ fontSize: '14px',
+ fontWeight: 'normal',
+ lineHeight: 'inherit',
+ margin: 0,
+ padding: 0
+ }
+};
+
+/***/ }),
+
+/***/ 273:
+/***/ (function(module) {
+
+"use strict";
+module.exports = require("next/dist/next-server/lib/head.js");;
+
+/***/ }),
+
+/***/ 297:
+/***/ (function(module) {
+
+"use strict";
+module.exports = require("react");;
+
+/***/ })
+
+};
+;
+
+// load runtime
+var __webpack_require__ = require("../webpack-runtime.js");
+__webpack_require__.C(exports);
+var __webpack_exec__ = function(moduleId) { return __webpack_require__(__webpack_require__.s = moduleId); }
+var __webpack_exports__ = (__webpack_exec__(359));
+module.exports = __webpack_exports__;
+
+})(); \ No newline at end of file
diff --git a/build/server/pages/index.html b/build/server/pages/index.html
new file mode 100644
index 0000000..c733d59
--- /dev/null
+++ b/build/server/pages/index.html
@@ -0,0 +1 @@
+<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/_next/static/css/120f2e2270820d49a21f.css" as="style"/><link rel="stylesheet" href="/_next/static/css/120f2e2270820d49a21f.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/_next/static/chunks/polyfills-a54b4f32bdc1ef890ddd.js"></script><script src="/_next/static/chunks/webpack-f6b94a473b4a21f6bdce.js" defer=""></script><script src="/_next/static/chunks/framework-0441fae7fd130f37dee1.js" defer=""></script><script src="/_next/static/chunks/main-a3a79aff3ff232b41814.js" defer=""></script><script src="/_next/static/chunks/pages/_app-5bb503dca4dae114eb0c.js" defer=""></script><script src="/_next/static/chunks/fb7d5399-a8c606efbc9e7c0edf90.js" defer=""></script><script src="/_next/static/chunks/d25bd147-65fcc4c92edba8b370fb.js" defer=""></script><script src="/_next/static/chunks/283-1d245e6e2271fd76c328.js" defer=""></script><script src="/_next/static/chunks/pages/index-b7e9a3c26de1eb7c41cc.js" defer=""></script><script src="/_next/static/Ci3EcXz8ajkhs7MVidKTf/_buildManifest.js" defer=""></script><script src="/_next/static/Ci3EcXz8ajkhs7MVidKTf/_ssgManifest.js" defer=""></script></head><body><div id="__next"><style data-emotion="css-global o7558t">:host,:root{--chakra-ring-inset:var(--chakra-empty,/*!*/ /*!*/);--chakra-ring-offset-width:0px;--chakra-ring-offset-color:#fff;--chakra-ring-color:rgba(66, 153, 225, 0.6);--chakra-ring-offset-shadow:0 0 #0000;--chakra-ring-shadow:0 0 #0000;--chakra-space-x-reverse:0;--chakra-space-y-reverse:0;--chakra-colors-transparent:transparent;--chakra-colors-current:currentColor;--chakra-colors-black:#000000;--chakra-colors-white:#FFFFFF;--chakra-colors-whiteAlpha-50:rgba(255, 255, 255, 0.04);--chakra-colors-whiteAlpha-100:rgba(255, 255, 255, 0.06);--chakra-colors-whiteAlpha-200:rgba(255, 255, 255, 0.08);--chakra-colors-whiteAlpha-300:rgba(255, 255, 255, 0.16);--chakra-colors-whiteAlpha-400:rgba(255, 255, 255, 0.24);--chakra-colors-whiteAlpha-500:rgba(255, 255, 255, 0.36);--chakra-colors-whiteAlpha-600:rgba(255, 255, 255, 0.48);--chakra-colors-whiteAlpha-700:rgba(255, 255, 255, 0.64);--chakra-colors-whiteAlpha-800:rgba(255, 255, 255, 0.80);--chakra-colors-whiteAlpha-900:rgba(255, 255, 255, 0.92);--chakra-colors-blackAlpha-50:rgba(0, 0, 0, 0.04);--chakra-colors-blackAlpha-100:rgba(0, 0, 0, 0.06);--chakra-colors-blackAlpha-200:rgba(0, 0, 0, 0.08);--chakra-colors-blackAlpha-300:rgba(0, 0, 0, 0.16);--chakra-colors-blackAlpha-400:rgba(0, 0, 0, 0.24);--chakra-colors-blackAlpha-500:rgba(0, 0, 0, 0.36);--chakra-colors-blackAlpha-600:rgba(0, 0, 0, 0.48);--chakra-colors-blackAlpha-700:rgba(0, 0, 0, 0.64);--chakra-colors-blackAlpha-800:rgba(0, 0, 0, 0.80);--chakra-colors-blackAlpha-900:rgba(0, 0, 0, 0.92);--chakra-colors-gray-50:#F7FAFC;--chakra-colors-gray-100:#EDF2F7;--chakra-colors-gray-200:#E2E8F0;--chakra-colors-gray-300:#CBD5E0;--chakra-colors-gray-400:#A0AEC0;--chakra-colors-gray-500:#718096;--chakra-colors-gray-600:#4A5568;--chakra-colors-gray-700:#2D3748;--chakra-colors-gray-800:#1A202C;--chakra-colors-gray-900:#171923;--chakra-colors-red-50:#FFF5F5;--chakra-colors-red-100:#FED7D7;--chakra-colors-red-200:#FEB2B2;--chakra-colors-red-300:#FC8181;--chakra-colors-red-400:#F56565;--chakra-colors-red-500:#E53E3E;--chakra-colors-red-600:#C53030;--chakra-colors-red-700:#9B2C2C;--chakra-colors-red-800:#822727;--chakra-colors-red-900:#63171B;--chakra-colors-orange-50:#FFFAF0;--chakra-colors-orange-100:#FEEBC8;--chakra-colors-orange-200:#FBD38D;--chakra-colors-orange-300:#F6AD55;--chakra-colors-orange-400:#ED8936;--chakra-colors-orange-500:#DD6B20;--chakra-colors-orange-600:#C05621;--chakra-colors-orange-700:#9C4221;--chakra-colors-orange-800:#7B341E;--chakra-colors-orange-900:#652B19;--chakra-colors-yellow-50:#FFFFF0;--chakra-colors-yellow-100:#FEFCBF;--chakra-colors-yellow-200:#FAF089;--chakra-colors-yellow-300:#F6E05E;--chakra-colors-yellow-400:#ECC94B;--chakra-colors-yellow-500:#D69E2E;--chakra-colors-yellow-600:#B7791F;--chakra-colors-yellow-700:#975A16;--chakra-colors-yellow-800:#744210;--chakra-colors-yellow-900:#5F370E;--chakra-colors-green-50:#F0FFF4;--chakra-colors-green-100:#C6F6D5;--chakra-colors-green-200:#9AE6B4;--chakra-colors-green-300:#68D391;--chakra-colors-green-400:#48BB78;--chakra-colors-green-500:#38A169;--chakra-colors-green-600:#2F855A;--chakra-colors-green-700:#276749;--chakra-colors-green-800:#22543D;--chakra-colors-green-900:#1C4532;--chakra-colors-teal-50:#E6FFFA;--chakra-colors-teal-100:#B2F5EA;--chakra-colors-teal-200:#81E6D9;--chakra-colors-teal-300:#4FD1C5;--chakra-colors-teal-400:#38B2AC;--chakra-colors-teal-500:#319795;--chakra-colors-teal-600:#2C7A7B;--chakra-colors-teal-700:#285E61;--chakra-colors-teal-800:#234E52;--chakra-colors-teal-900:#1D4044;--chakra-colors-blue-50:#ebf8ff;--chakra-colors-blue-100:#bee3f8;--chakra-colors-blue-200:#90cdf4;--chakra-colors-blue-300:#63b3ed;--chakra-colors-blue-400:#4299e1;--chakra-colors-blue-500:#3182ce;--chakra-colors-blue-600:#2b6cb0;--chakra-colors-blue-700:#2c5282;--chakra-colors-blue-800:#2a4365;--chakra-colors-blue-900:#1A365D;--chakra-colors-cyan-50:#EDFDFD;--chakra-colors-cyan-100:#C4F1F9;--chakra-colors-cyan-200:#9DECF9;--chakra-colors-cyan-300:#76E4F7;--chakra-colors-cyan-400:#0BC5EA;--chakra-colors-cyan-500:#00B5D8;--chakra-colors-cyan-600:#00A3C4;--chakra-colors-cyan-700:#0987A0;--chakra-colors-cyan-800:#086F83;--chakra-colors-cyan-900:#065666;--chakra-colors-purple-50:#FAF5FF;--chakra-colors-purple-100:#E9D8FD;--chakra-colors-purple-200:#D6BCFA;--chakra-colors-purple-300:#B794F4;--chakra-colors-purple-400:#9F7AEA;--chakra-colors-purple-500:#805AD5;--chakra-colors-purple-600:#6B46C1;--chakra-colors-purple-700:#553C9A;--chakra-colors-purple-800:#44337A;--chakra-colors-purple-900:#322659;--chakra-colors-pink-50:#FFF5F7;--chakra-colors-pink-100:#FED7E2;--chakra-colors-pink-200:#FBB6CE;--chakra-colors-pink-300:#F687B3;--chakra-colors-pink-400:#ED64A6;--chakra-colors-pink-500:#D53F8C;--chakra-colors-pink-600:#B83280;--chakra-colors-pink-700:#97266D;--chakra-colors-pink-800:#702459;--chakra-colors-pink-900:#521B41;--chakra-colors-linkedin-50:#E8F4F9;--chakra-colors-linkedin-100:#CFEDFB;--chakra-colors-linkedin-200:#9BDAF3;--chakra-colors-linkedin-300:#68C7EC;--chakra-colors-linkedin-400:#34B3E4;--chakra-colors-linkedin-500:#00A0DC;--chakra-colors-linkedin-600:#008CC9;--chakra-colors-linkedin-700:#0077B5;--chakra-colors-linkedin-800:#005E93;--chakra-colors-linkedin-900:#004471;--chakra-colors-facebook-50:#E8F4F9;--chakra-colors-facebook-100:#D9DEE9;--chakra-colors-facebook-200:#B7C2DA;--chakra-colors-facebook-300:#6482C0;--chakra-colors-facebook-400:#4267B2;--chakra-colors-facebook-500:#385898;--chakra-colors-facebook-600:#314E89;--chakra-colors-facebook-700:#29487D;--chakra-colors-facebook-800:#223B67;--chakra-colors-facebook-900:#1E355B;--chakra-colors-messenger-50:#D0E6FF;--chakra-colors-messenger-100:#B9DAFF;--chakra-colors-messenger-200:#A2CDFF;--chakra-colors-messenger-300:#7AB8FF;--chakra-colors-messenger-400:#2E90FF;--chakra-colors-messenger-500:#0078FF;--chakra-colors-messenger-600:#0063D1;--chakra-colors-messenger-700:#0052AC;--chakra-colors-messenger-800:#003C7E;--chakra-colors-messenger-900:#002C5C;--chakra-colors-whatsapp-50:#dffeec;--chakra-colors-whatsapp-100:#b9f5d0;--chakra-colors-whatsapp-200:#90edb3;--chakra-colors-whatsapp-300:#65e495;--chakra-colors-whatsapp-400:#3cdd78;--chakra-colors-whatsapp-500:#22c35e;--chakra-colors-whatsapp-600:#179848;--chakra-colors-whatsapp-700:#0c6c33;--chakra-colors-whatsapp-800:#01421c;--chakra-colors-whatsapp-900:#001803;--chakra-colors-twitter-50:#E5F4FD;--chakra-colors-twitter-100:#C8E9FB;--chakra-colors-twitter-200:#A8DCFA;--chakra-colors-twitter-300:#83CDF7;--chakra-colors-twitter-400:#57BBF5;--chakra-colors-twitter-500:#1DA1F2;--chakra-colors-twitter-600:#1A94DA;--chakra-colors-twitter-700:#1681BF;--chakra-colors-twitter-800:#136B9E;--chakra-colors-twitter-900:#0D4D71;--chakra-colors-telegram-50:#E3F2F9;--chakra-colors-telegram-100:#C5E4F3;--chakra-colors-telegram-200:#A2D4EC;--chakra-colors-telegram-300:#7AC1E4;--chakra-colors-telegram-400:#47A9DA;--chakra-colors-telegram-500:#0088CC;--chakra-colors-telegram-600:#007AB8;--chakra-colors-telegram-700:#006BA1;--chakra-colors-telegram-800:#005885;--chakra-colors-telegram-900:#003F5E;--chakra-borders-none:0;--chakra-borders-1px:1px solid;--chakra-borders-2px:2px solid;--chakra-borders-4px:4px solid;--chakra-borders-8px:8px solid;--chakra-fonts-heading:-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";--chakra-fonts-body:-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";--chakra-fonts-mono:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--chakra-fontSizes-xs:0.75rem;--chakra-fontSizes-sm:0.875rem;--chakra-fontSizes-md:1rem;--chakra-fontSizes-lg:1.125rem;--chakra-fontSizes-xl:1.25rem;--chakra-fontSizes-2xl:1.5rem;--chakra-fontSizes-3xl:1.875rem;--chakra-fontSizes-4xl:2.25rem;--chakra-fontSizes-5xl:3rem;--chakra-fontSizes-6xl:3.75rem;--chakra-fontSizes-7xl:4.5rem;--chakra-fontSizes-8xl:6rem;--chakra-fontSizes-9xl:8rem;--chakra-fontWeights-hairline:100;--chakra-fontWeights-thin:200;--chakra-fontWeights-light:300;--chakra-fontWeights-normal:400;--chakra-fontWeights-medium:500;--chakra-fontWeights-semibold:600;--chakra-fontWeights-bold:700;--chakra-fontWeights-extrabold:800;--chakra-fontWeights-black:900;--chakra-letterSpacings-tighter:-0.05em;--chakra-letterSpacings-tight:-0.025em;--chakra-letterSpacings-normal:0;--chakra-letterSpacings-wide:0.025em;--chakra-letterSpacings-wider:0.05em;--chakra-letterSpacings-widest:0.1em;--chakra-lineHeights-3:.75rem;--chakra-lineHeights-4:1rem;--chakra-lineHeights-5:1.25rem;--chakra-lineHeights-6:1.5rem;--chakra-lineHeights-7:1.75rem;--chakra-lineHeights-8:2rem;--chakra-lineHeights-9:2.25rem;--chakra-lineHeights-10:2.5rem;--chakra-lineHeights-normal:normal;--chakra-lineHeights-none:1;--chakra-lineHeights-shorter:1.25;--chakra-lineHeights-short:1.375;--chakra-lineHeights-base:1.5;--chakra-lineHeights-tall:1.625;--chakra-lineHeights-taller:2;--chakra-radii-none:0;--chakra-radii-sm:0.125rem;--chakra-radii-base:0.25rem;--chakra-radii-md:0.375rem;--chakra-radii-lg:0.5rem;--chakra-radii-xl:0.75rem;--chakra-radii-2xl:1rem;--chakra-radii-3xl:1.5rem;--chakra-radii-full:9999px;--chakra-space-1:0.25rem;--chakra-space-2:0.5rem;--chakra-space-3:0.75rem;--chakra-space-4:1rem;--chakra-space-5:1.25rem;--chakra-space-6:1.5rem;--chakra-space-7:1.75rem;--chakra-space-8:2rem;--chakra-space-9:2.25rem;--chakra-space-10:2.5rem;--chakra-space-12:3rem;--chakra-space-14:3.5rem;--chakra-space-16:4rem;--chakra-space-20:5rem;--chakra-space-24:6rem;--chakra-space-28:7rem;--chakra-space-32:8rem;--chakra-space-36:9rem;--chakra-space-40:10rem;--chakra-space-44:11rem;--chakra-space-48:12rem;--chakra-space-52:13rem;--chakra-space-56:14rem;--chakra-space-60:15rem;--chakra-space-64:16rem;--chakra-space-72:18rem;--chakra-space-80:20rem;--chakra-space-96:24rem;--chakra-space-px:1px;--chakra-space-0\.5:0.125rem;--chakra-space-1\.5:0.375rem;--chakra-space-2\.5:0.625rem;--chakra-space-3\.5:0.875rem;--chakra-shadows-xs:0 0 0 1px rgba(0, 0, 0, 0.05);--chakra-shadows-sm:0 1px 2px 0 rgba(0, 0, 0, 0.05);--chakra-shadows-base:0 1px 3px 0 rgba(0, 0, 0, 0.1),0 1px 2px 0 rgba(0, 0, 0, 0.06);--chakra-shadows-md:0 4px 6px -1px rgba(0, 0, 0, 0.1),0 2px 4px -1px rgba(0, 0, 0, 0.06);--chakra-shadows-lg:0 10px 15px -3px rgba(0, 0, 0, 0.1),0 4px 6px -2px rgba(0, 0, 0, 0.05);--chakra-shadows-xl:0 20px 25px -5px rgba(0, 0, 0, 0.1),0 10px 10px -5px rgba(0, 0, 0, 0.04);--chakra-shadows-2xl:0 25px 50px -12px rgba(0, 0, 0, 0.25);--chakra-shadows-outline:0 0 0 3px rgba(66, 153, 225, 0.6);--chakra-shadows-inner:inset 0 2px 4px 0 rgba(0,0,0,0.06);--chakra-shadows-none:none;--chakra-shadows-dark-lg:rgba(0, 0, 0, 0.1) 0px 0px 0px 1px,rgba(0, 0, 0, 0.2) 0px 5px 10px,rgba(0, 0, 0, 0.4) 0px 15px 40px;--chakra-sizes-1:0.25rem;--chakra-sizes-2:0.5rem;--chakra-sizes-3:0.75rem;--chakra-sizes-4:1rem;--chakra-sizes-5:1.25rem;--chakra-sizes-6:1.5rem;--chakra-sizes-7:1.75rem;--chakra-sizes-8:2rem;--chakra-sizes-9:2.25rem;--chakra-sizes-10:2.5rem;--chakra-sizes-12:3rem;--chakra-sizes-14:3.5rem;--chakra-sizes-16:4rem;--chakra-sizes-20:5rem;--chakra-sizes-24:6rem;--chakra-sizes-28:7rem;--chakra-sizes-32:8rem;--chakra-sizes-36:9rem;--chakra-sizes-40:10rem;--chakra-sizes-44:11rem;--chakra-sizes-48:12rem;--chakra-sizes-52:13rem;--chakra-sizes-56:14rem;--chakra-sizes-60:15rem;--chakra-sizes-64:16rem;--chakra-sizes-72:18rem;--chakra-sizes-80:20rem;--chakra-sizes-96:24rem;--chakra-sizes-px:1px;--chakra-sizes-0\.5:0.125rem;--chakra-sizes-1\.5:0.375rem;--chakra-sizes-2\.5:0.625rem;--chakra-sizes-3\.5:0.875rem;--chakra-sizes-max:max-content;--chakra-sizes-min:min-content;--chakra-sizes-full:100%;--chakra-sizes-3xs:14rem;--chakra-sizes-2xs:16rem;--chakra-sizes-xs:20rem;--chakra-sizes-sm:24rem;--chakra-sizes-md:28rem;--chakra-sizes-lg:32rem;--chakra-sizes-xl:36rem;--chakra-sizes-2xl:42rem;--chakra-sizes-3xl:48rem;--chakra-sizes-4xl:56rem;--chakra-sizes-5xl:64rem;--chakra-sizes-6xl:72rem;--chakra-sizes-7xl:80rem;--chakra-sizes-8xl:90rem;--chakra-sizes-container-sm:640px;--chakra-sizes-container-md:768px;--chakra-sizes-container-lg:1024px;--chakra-sizes-container-xl:1280px;--chakra-zIndices-hide:-1;--chakra-zIndices-auto:auto;--chakra-zIndices-base:0;--chakra-zIndices-docked:10;--chakra-zIndices-dropdown:1000;--chakra-zIndices-sticky:1100;--chakra-zIndices-banner:1200;--chakra-zIndices-overlay:1300;--chakra-zIndices-modal:1400;--chakra-zIndices-popover:1500;--chakra-zIndices-skipLink:1600;--chakra-zIndices-toast:1700;--chakra-zIndices-tooltip:1800;--chakra-transition-property-common:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform;--chakra-transition-property-colors:background-color,border-color,color,fill,stroke;--chakra-transition-property-dimensions:width,height;--chakra-transition-property-position:left,right,top,bottom;--chakra-transition-property-background:background-color,background-image,background-position;--chakra-transition-easing-ease-in:cubic-bezier(0.4, 0, 1, 1);--chakra-transition-easing-ease-out:cubic-bezier(0, 0, 0.2, 1);--chakra-transition-easing-ease-in-out:cubic-bezier(0.4, 0, 0.2, 1);--chakra-transition-duration-ultra-fast:50ms;--chakra-transition-duration-faster:100ms;--chakra-transition-duration-fast:150ms;--chakra-transition-duration-normal:200ms;--chakra-transition-duration-slow:300ms;--chakra-transition-duration-slower:400ms;--chakra-transition-duration-ultra-slow:500ms;--chakra-blur-none:0;--chakra-blur-sm:4px;--chakra-blur-base:8px;--chakra-blur-md:12px;--chakra-blur-lg:16px;--chakra-blur-xl:24px;--chakra-blur-2xl:40px;--chakra-blur-3xl:64px;}</style><style data-emotion="css-global 1syi0wy">html{line-height:1.5;-webkit-text-size-adjust:100%;font-family:system-ui,sans-serif;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;-moz-osx-font-smoothing:grayscale;touch-action:manipulation;}body{position:relative;min-height:100%;font-feature-settings:'kern';}*,*::before,*::after{border-width:0;border-style:solid;box-sizing:border-box;}main{display:block;}hr{border-top-width:1px;box-sizing:content-box;height:0;overflow:visible;}pre,code,kbd,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-size:1em;}a{background-color:transparent;color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit;}abbr[title]{border-bottom:none;-webkit-text-decoration:underline;text-decoration:underline;-webkit-text-decoration:underline dotted;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;}b,strong{font-weight:bold;}small{font-size:80%;}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline;}sub{bottom:-0.25em;}sup{top:-0.5em;}img{border-style:none;}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0;}button,input{overflow:visible;}button,select{text-transform:none;}button::-moz-focus-inner,[type="button"]::-moz-focus-inner,[type="reset"]::-moz-focus-inner,[type="submit"]::-moz-focus-inner{border-style:none;padding:0;}fieldset{padding:0.35em 0.75em 0.625em;}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal;}progress{vertical-align:baseline;}textarea{overflow:auto;}[type="checkbox"],[type="radio"]{box-sizing:border-box;padding:0;}[type="number"]::-webkit-inner-spin-button,[type="number"]::-webkit-outer-spin-button{-webkit-appearance:none!important;}input[type="number"]{-moz-appearance:textfield;}[type="search"]{-webkit-appearance:textfield;outline-offset:-2px;}[type="search"]::-webkit-search-decoration{-webkit-appearance:none!important;}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit;}details{display:block;}summary{display:-webkit-box;display:-webkit-list-item;display:-ms-list-itembox;display:list-item;}template{display:none;}[hidden]{display:none!important;}body,blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0;}button{background:transparent;padding:0;}fieldset{margin:0;padding:0;}ol,ul{margin:0;padding:0;}textarea{resize:vertical;}button,[role="button"]{cursor:pointer;}button::-moz-focus-inner{border:0!important;}table{border-collapse:collapse;}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit;}button,input,optgroup,select,textarea{padding:0;line-height:inherit;color:inherit;}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle;}img,video{max-width:100%;height:auto;}[data-js-focus-visible] :focus:not([data-focus-visible-added]){outline:none;box-shadow:none;}select::-ms-expand{display:none;}</style><style data-emotion="css-global 1baqkrf">body{font-family:var(--chakra-fonts-body);color:var(--chakra-colors-gray-800);background:var(--chakra-colors-white);transition-property:background-color;transition-duration:var(--chakra-transition-duration-normal);line-height:var(--chakra-lineHeights-base);}*::-webkit-input-placeholder{color:var(--chakra-colors-gray-400);}*::-moz-placeholder{color:var(--chakra-colors-gray-400);}*:-ms-input-placeholder{color:var(--chakra-colors-gray-400);}*::placeholder{color:var(--chakra-colors-gray-400);}*,*::before,::after{border-color:var(--chakra-colors-gray-200);word-wrap:break-word;}</style><span></span></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/","query":{},"buildId":"Ci3EcXz8ajkhs7MVidKTf","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html> \ No newline at end of file
diff --git a/build/server/webpack-runtime.js b/build/server/webpack-runtime.js
new file mode 100644
index 0000000..ee76987
--- /dev/null
+++ b/build/server/webpack-runtime.js
@@ -0,0 +1,160 @@
+/******/ (function() { // webpackBootstrap
+/******/ "use strict";
+/******/ var __webpack_modules__ = ({});
+/************************************************************************/
+/******/ // The module cache
+/******/ var __webpack_module_cache__ = {};
+/******/
+/******/ // The require function
+/******/ function __webpack_require__(moduleId) {
+/******/ // Check if module is in cache
+/******/ var cachedModule = __webpack_module_cache__[moduleId];
+/******/ if (cachedModule !== undefined) {
+/******/ return cachedModule.exports;
+/******/ }
+/******/ // Create a new module (and put it into the cache)
+/******/ var module = __webpack_module_cache__[moduleId] = {
+/******/ // no module.id needed
+/******/ // no module.loaded needed
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ var threw = true;
+/******/ try {
+/******/ __webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/ threw = false;
+/******/ } finally {
+/******/ if(threw) delete __webpack_module_cache__[moduleId];
+/******/ }
+/******/
+/******/ // Return the exports of the module
+/******/ return module.exports;
+/******/ }
+/******/
+/******/ // expose the modules object (__webpack_modules__)
+/******/ __webpack_require__.m = __webpack_modules__;
+/******/
+/************************************************************************/
+/******/ /* webpack/runtime/compat get default export */
+/******/ !function() {
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function() { return module['default']; } :
+/******/ function() { return module; };
+/******/ __webpack_require__.d(getter, { a: getter });
+/******/ return getter;
+/******/ };
+/******/ }();
+/******/
+/******/ /* webpack/runtime/define property getters */
+/******/ !function() {
+/******/ // define getter functions for harmony exports
+/******/ __webpack_require__.d = function(exports, definition) {
+/******/ for(var key in definition) {
+/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
+/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
+/******/ }
+/******/ }
+/******/ };
+/******/ }();
+/******/
+/******/ /* webpack/runtime/ensure chunk */
+/******/ !function() {
+/******/ __webpack_require__.f = {};
+/******/ // This file contains only the entry chunk.
+/******/ // The chunk loading function for additional chunks
+/******/ __webpack_require__.e = function(chunkId) {
+/******/ return Promise.all(Object.keys(__webpack_require__.f).reduce(function(promises, key) {
+/******/ __webpack_require__.f[key](chunkId, promises);
+/******/ return promises;
+/******/ }, []));
+/******/ };
+/******/ }();
+/******/
+/******/ /* webpack/runtime/get javascript chunk filename */
+/******/ !function() {
+/******/ // This function allow to reference async chunks and sibling chunks for the entrypoint
+/******/ __webpack_require__.u = function(chunkId) {
+/******/ // return url for filenames based on template
+/******/ return "" + chunkId + ".js";
+/******/ };
+/******/ }();
+/******/
+/******/ /* webpack/runtime/hasOwnProperty shorthand */
+/******/ !function() {
+/******/ __webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }
+/******/ }();
+/******/
+/******/ /* webpack/runtime/make namespace object */
+/******/ !function() {
+/******/ // define __esModule on exports
+/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
+/******/ Object.defineProperty(exports, '__esModule', { value: true });
+/******/ };
+/******/ }();
+/******/
+/******/ /* webpack/runtime/startup entrypoint */
+/******/ !function() {
+/******/ __webpack_require__.X = function(result, chunkIds, fn) {
+/******/ // arguments: chunkIds, moduleId are deprecated
+/******/ var moduleId = chunkIds;
+/******/ if(!fn) chunkIds = result, fn = function() { return __webpack_require__(__webpack_require__.s = moduleId); };
+/******/ chunkIds.map(__webpack_require__.e, __webpack_require__)
+/******/ var r = fn();
+/******/ return r === undefined ? result : r;
+/******/ }
+/******/ }();
+/******/
+/******/ /* webpack/runtime/require chunk loading */
+/******/ !function() {
+/******/ // no baseURI
+/******/
+/******/ // object to store loaded chunks
+/******/ // "1" means "loaded", otherwise not loaded yet
+/******/ var installedChunks = {
+/******/ 658: 1
+/******/ };
+/******/
+/******/ // no on chunks loaded
+/******/
+/******/ var installChunk = function(chunk) {
+/******/ var moreModules = chunk.modules, chunkIds = chunk.ids, runtime = chunk.runtime;
+/******/ for(var moduleId in moreModules) {
+/******/ if(__webpack_require__.o(moreModules, moduleId)) {
+/******/ __webpack_require__.m[moduleId] = moreModules[moduleId];
+/******/ }
+/******/ }
+/******/ if(runtime) runtime(__webpack_require__);
+/******/ for(var i = 0; i < chunkIds.length; i++)
+/******/ installedChunks[chunkIds[i]] = 1;
+/******/
+/******/ };
+/******/
+/******/ // require() chunk loading for javascript
+/******/ __webpack_require__.f.require = function(chunkId, promises) {
+/******/ // "1" is the signal for "already loaded"
+/******/ if(!installedChunks[chunkId]) {
+/******/ if(658 != chunkId) {
+/******/ installChunk(require("./chunks/" + __webpack_require__.u(chunkId)));
+/******/ } else installedChunks[chunkId] = 1;
+/******/ }
+/******/ };
+/******/
+/******/ module.exports = __webpack_require__;
+/******/ __webpack_require__.C = installChunk;
+/******/
+/******/ // no HMR
+/******/
+/******/ // no HMR manifest
+/******/ }();
+/******/
+/************************************************************************/
+/******/
+/******/
+/******/ })()
+; \ No newline at end of file