diff --git a/Makefile b/Makefile
index 7ea47f4c9a7603e9be809586fbbf1319e6345464..4bbe3b2c9215f96f239832bdf353c0a70c4f9bba 100644
--- a/Makefile
+++ b/Makefile
@@ -5,7 +5,7 @@ build-client:
 	cd frontend && npm install && npm run build && rm -rf ../static && cp -r build/ ../static/
 
 build-dev:
-	cd frontend && rm -rf node_modules && npm install && NODE_ENV=development npm run build && rm -rf ../static 2>&1 && cp -rv build/ ../static/
+	cd frontend && rm -rf node-modules && npm install && NODE_ENV=development npm run build && rm -rf ../static 2>&1 && cp -r build/ ../static/
 
 run-dev:
 	FLASK_DEBUG=development python app.py
diff --git a/README.md b/README.md
index 1fb007e621c7ce6031a59deaab1b09d0ec847cee..a4b8f4072cf4845a9d8f0f5d0a6338399e19749e 100644
--- a/README.md
+++ b/README.md
@@ -1,5 +1,5 @@
 ---
-title: Drawing2Map
+title: Drawing2Map-api
 emoji: 🎨
 colorFrom: blue
 colorTo: green
diff --git a/app.py b/app.py
index 31afa06050f205c782a1ede9bce0beb039d6cc26..cca64144d7143c917c31903f628ca133a3d96f68 100644
--- a/app.py
+++ b/app.py
@@ -28,16 +28,17 @@ def encode_image_to_base64(filepath):
 
 @app.route('/predict', methods=['POST'])
 def predict():
-    global client
-    if not client:
-      client = Client(base_gradio_url)
-    
     data = request.get_json()
-    
+
     base64Image = data['data'][0]
     prompt = data['data'][1]
     steps = data['data'][2]
     seed = data['data'][3]
+    
+    global client
+    if not client:
+      client = Client(base_gradio_url)
+    
 
     b64meta, b64_data = base64Image.split(',')
 
@@ -47,6 +48,7 @@ def predict():
         image_path, prompt, steps, seed, fn_index=0
     )
 
+
     return b64meta + ',' + encode_image_to_base64(result)
 
 
diff --git a/frontend/.svelte-kit/build/hooks.js b/frontend/.svelte-kit/build/hooks.js
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/frontend/.svelte-kit/build/index.js b/frontend/.svelte-kit/build/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..d2819cb3366fd995572cce90e26f3ed5865dc9e5
--- /dev/null
+++ b/frontend/.svelte-kit/build/index.js
@@ -0,0 +1,81 @@
+
+import root from '__GENERATED__/root.svelte';
+import { respond } from '/workspaces/Drawing2Map/frontend/.svelte-kit/runtime/server/index.js';
+import { set_paths, assets, base } from '/workspaces/Drawing2Map/frontend/.svelte-kit/runtime/paths.js';
+import { set_prerendering } from '/workspaces/Drawing2Map/frontend/.svelte-kit/runtime/env.js';
+
+const template = ({ head, body, assets, nonce }) => "<!DOCTYPE html>\n<html lang=\"en\">\n\t<head>\n\t\t<meta charset=\"utf-8\" />\n\t\t<link rel=\"icon\" href=\"" + assets + "/favicon.png\" />\n\t\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n\t\t<script src=\"https://cdnjs.cloudflare.com/ajax/libs/iframe-resizer/4.3.1/iframeResizer.contentWindow.min.js\"></script>\n\t\t" + head + "\n\t</head>\n\t<body class=\"\">\n\t\t" + body + "\n\t</body>\t\n</html>\n";
+
+let read = null;
+
+set_paths({"base":"/static","assets":""});
+
+let default_protocol = 'https';
+
+// allow paths to be globally overridden
+// in svelte-kit preview and in prerendering
+export function override(settings) {
+	default_protocol = settings.protocol || default_protocol;
+	set_paths(settings.paths);
+	set_prerendering(settings.prerendering);
+	read = settings.read;
+}
+
+export class Server {
+	constructor(manifest) {
+		this.options = {
+			csp: {"mode":"auto","directives":{"upgrade-insecure-requests":false,"block-all-mixed-content":false}},
+			dev: false,
+			floc: false,
+			get_stack: error => String(error), // for security
+			handle_error: (error, event) => {
+				this.options.hooks.handleError({
+					error,
+					event,
+
+					// TODO remove for 1.0
+					// @ts-expect-error
+					get request() {
+						throw new Error('request in handleError has been replaced with event. See https://github.com/sveltejs/kit/pull/3384 for details');
+					}
+				});
+				error.stack = this.options.get_stack(error);
+			},
+			hooks: null,
+			hydrate: true,
+			manifest,
+			method_override: {"parameter":"_method","allowed":[]},
+			paths: { base, assets },
+			prefix: assets + '/_app/immutable/',
+			prerender: {
+				default: true,
+				enabled: true
+			},
+			read,
+			root,
+			service_worker: null,
+			router: true,
+			template,
+			template_contains_nonce: false,
+			trailing_slash: "never"
+		};
+	}
+
+	async respond(request, options = {}) {
+		if (!(request instanceof Request)) {
+			throw new Error('The first argument to server.respond must be a Request object. See https://github.com/sveltejs/kit/pull/3384 for details');
+		}
+
+		if (!this.options.hooks) {
+			const module = await import("./hooks.js");
+			this.options.hooks = {
+				getSession: module.getSession || (() => ({})),
+				handle: module.handle || (({ event, resolve }) => resolve(event)),
+				handleError: module.handleError || (({ error }) => console.error(error.stack)),
+				externalFetch: module.externalFetch || fetch
+			};
+		}
+
+		return respond(request, this.options, options);
+	}
+}
diff --git a/frontend/.svelte-kit/output/client/_app/immutable/assets/pages/__layout.svelte-b67cf61d.css b/frontend/.svelte-kit/output/client/_app/immutable/assets/pages/__layout.svelte-b67cf61d.css
new file mode 100644
index 0000000000000000000000000000000000000000..11acbae8955923742bb73fadde38166957d5d33b
--- /dev/null
+++ b/frontend/.svelte-kit/output/client/_app/immutable/assets/pages/__layout.svelte-b67cf61d.css
@@ -0,0 +1 @@
+@import"https://fonts.googleapis.com/css2?family=Open+Sans:wght@100;200;300;400;500;600;700;800&display=swap";*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji"}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;font-weight:inherit;line-height:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}html{font-family:Open Sans,sans-serif}*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::-webkit-backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.prose{color:var(--tw-prose-body);max-width:65ch}.prose :where([class~="lead"]):not(:where([class~="not-prose"] *)){color:var(--tw-prose-lead);font-size:1.25em;line-height:1.6;margin-top:1.2em;margin-bottom:1.2em}.prose :where(a):not(:where([class~="not-prose"] *)){color:var(--tw-prose-links);text-decoration:underline;font-weight:500}.prose :where(strong):not(:where([class~="not-prose"] *)){color:var(--tw-prose-bold);font-weight:600}.prose :where(ol):not(:where([class~="not-prose"] *)){list-style-type:decimal;padding-left:1.625em}.prose :where(ol[type="A"]):not(:where([class~="not-prose"] *)){list-style-type:upper-alpha}.prose :where(ol[type="a"]):not(:where([class~="not-prose"] *)){list-style-type:lower-alpha}.prose :where(ol[type="A" s]):not(:where([class~="not-prose"] *)){list-style-type:upper-alpha}.prose :where(ol[type="a" s]):not(:where([class~="not-prose"] *)){list-style-type:lower-alpha}.prose :where(ol[type="I"]):not(:where([class~="not-prose"] *)){list-style-type:upper-roman}.prose :where(ol[type="i"]):not(:where([class~="not-prose"] *)){list-style-type:lower-roman}.prose :where(ol[type="I" s]):not(:where([class~="not-prose"] *)){list-style-type:upper-roman}.prose :where(ol[type="i" s]):not(:where([class~="not-prose"] *)){list-style-type:lower-roman}.prose :where(ol[type="1"]):not(:where([class~="not-prose"] *)){list-style-type:decimal}.prose :where(ul):not(:where([class~="not-prose"] *)){list-style-type:disc;padding-left:1.625em}.prose :where(ol > li):not(:where([class~="not-prose"] *))::marker{font-weight:400;color:var(--tw-prose-counters)}.prose :where(ul > li):not(:where([class~="not-prose"] *))::marker{color:var(--tw-prose-bullets)}.prose :where(hr):not(:where([class~="not-prose"] *)){border-color:var(--tw-prose-hr);border-top-width:1px;margin-top:3em;margin-bottom:3em}.prose :where(blockquote):not(:where([class~="not-prose"] *)){font-weight:500;font-style:italic;color:var(--tw-prose-quotes);border-left-width:.25rem;border-left-color:var(--tw-prose-quote-borders);quotes:"\201c""\201d""\2018""\2019";margin-top:1.6em;margin-bottom:1.6em;padding-left:1em}.prose :where(h1):not(:where([class~="not-prose"] *)){color:var(--tw-prose-headings);font-weight:800;font-size:2.25em;margin-top:0;margin-bottom:.8888889em;line-height:1.1111111}.prose :where(h1 strong):not(:where([class~="not-prose"] *)){font-weight:900}.prose :where(h2):not(:where([class~="not-prose"] *)){color:var(--tw-prose-headings);font-weight:700;font-size:1.5em;margin-top:2em;margin-bottom:1em;line-height:1.3333333}.prose :where(h2 strong):not(:where([class~="not-prose"] *)){font-weight:800}.prose :where(h3):not(:where([class~="not-prose"] *)){color:var(--tw-prose-headings);font-weight:600;font-size:1.25em;margin-top:1.6em;margin-bottom:.6em;line-height:1.6}.prose :where(h3 strong):not(:where([class~="not-prose"] *)){font-weight:700}.prose :where(h4):not(:where([class~="not-prose"] *)){color:var(--tw-prose-headings);font-weight:600;margin-top:1.5em;margin-bottom:.5em;line-height:1.5}.prose :where(h4 strong):not(:where([class~="not-prose"] *)){font-weight:700}.prose :where(figure > *):not(:where([class~="not-prose"] *)){margin-top:0;margin-bottom:0}.prose :where(figcaption):not(:where([class~="not-prose"] *)){color:var(--tw-prose-captions);font-size:.875em;line-height:1.4285714;margin-top:.8571429em}.prose :where(a code):not(:where([class~="not-prose"] *)){color:var(--tw-prose-links)}.prose :where(pre code):not(:where([class~="not-prose"] *)):before{content:none}.prose :where(pre code):not(:where([class~="not-prose"] *)):after{content:none}.prose :where(table):not(:where([class~="not-prose"] *)){width:100%;table-layout:auto;text-align:left;margin-top:2em;margin-bottom:2em;font-size:.875em;line-height:1.7142857}.prose :where(thead):not(:where([class~="not-prose"] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-th-borders)}.prose :where(thead th):not(:where([class~="not-prose"] *)){color:var(--tw-prose-headings);font-weight:600;vertical-align:bottom;padding-right:.5714286em;padding-bottom:.5714286em;padding-left:.5714286em}.prose :where(tbody tr):not(:where([class~="not-prose"] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-td-borders)}.prose :where(tbody tr:last-child):not(:where([class~="not-prose"] *)){border-bottom-width:0}.prose :where(tbody td):not(:where([class~="not-prose"] *)){vertical-align:baseline;padding:.5714286em}.prose{--tw-prose-body: #374151;--tw-prose-headings: #111827;--tw-prose-lead: #4b5563;--tw-prose-links: #111827;--tw-prose-bold: #111827;--tw-prose-counters: #6b7280;--tw-prose-bullets: #d1d5db;--tw-prose-hr: #e5e7eb;--tw-prose-quotes: #111827;--tw-prose-quote-borders: #e5e7eb;--tw-prose-captions: #6b7280;--tw-prose-code: #111827;--tw-prose-pre-code: #e5e7eb;--tw-prose-pre-bg: #1f2937;--tw-prose-th-borders: #d1d5db;--tw-prose-td-borders: #e5e7eb;--tw-prose-invert-body: #d1d5db;--tw-prose-invert-headings: #fff;--tw-prose-invert-lead: #9ca3af;--tw-prose-invert-links: #fff;--tw-prose-invert-bold: #fff;--tw-prose-invert-counters: #9ca3af;--tw-prose-invert-bullets: #4b5563;--tw-prose-invert-hr: #374151;--tw-prose-invert-quotes: #f3f4f6;--tw-prose-invert-quote-borders: #374151;--tw-prose-invert-captions: #9ca3af;--tw-prose-invert-code: #fff;--tw-prose-invert-pre-code: #d1d5db;--tw-prose-invert-pre-bg: rgb(0 0 0 / 50%);--tw-prose-invert-th-borders: #4b5563;--tw-prose-invert-td-borders: #374151;font-size:1rem;line-height:1.75}.prose :where(p):not(:where([class~="not-prose"] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where(img):not(:where([class~="not-prose"] *)){margin-top:2em;margin-bottom:2em}.prose :where(video):not(:where([class~="not-prose"] *)){margin-top:2em;margin-bottom:2em}.prose :where(figure):not(:where([class~="not-prose"] *)){margin-top:2em;margin-bottom:2em}.prose :where(h2 code):not(:where([class~="not-prose"] *)){font-size:.875em}.prose :where(h3 code):not(:where([class~="not-prose"] *)){font-size:.9em}.prose :where(li):not(:where([class~="not-prose"] *)){margin-top:.5em;margin-bottom:.5em}.prose :where(ol > li):not(:where([class~="not-prose"] *)){padding-left:.375em}.prose :where(ul > li):not(:where([class~="not-prose"] *)){padding-left:.375em}.prose>:where(ul > li p):not(:where([class~="not-prose"] *)){margin-top:.75em;margin-bottom:.75em}.prose>:where(ul > li > *:first-child):not(:where([class~="not-prose"] *)){margin-top:1.25em}.prose>:where(ul > li > *:last-child):not(:where([class~="not-prose"] *)){margin-bottom:1.25em}.prose>:where(ol > li > *:first-child):not(:where([class~="not-prose"] *)){margin-top:1.25em}.prose>:where(ol > li > *:last-child):not(:where([class~="not-prose"] *)){margin-bottom:1.25em}.prose :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~="not-prose"] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(hr + *):not(:where([class~="not-prose"] *)){margin-top:0}.prose :where(h2 + *):not(:where([class~="not-prose"] *)){margin-top:0}.prose :where(h3 + *):not(:where([class~="not-prose"] *)){margin-top:0}.prose :where(h4 + *):not(:where([class~="not-prose"] *)){margin-top:0}.prose :where(thead th:first-child):not(:where([class~="not-prose"] *)){padding-left:0}.prose :where(thead th:last-child):not(:where([class~="not-prose"] *)){padding-right:0}.prose :where(tbody td:first-child):not(:where([class~="not-prose"] *)){padding-left:0}.prose :where(tbody td:last-child):not(:where([class~="not-prose"] *)){padding-right:0}.prose>:where(:first-child):not(:where([class~="not-prose"] *)){margin-top:0}.prose>:where(:last-child):not(:where([class~="not-prose"] *)){margin-bottom:0}.pointer-events-none{pointer-events:none}.absolute{position:absolute}.relative{position:relative}.bottom-0{bottom:0px}.left-0{left:0px}.top-0{top:0px}.right-0{right:0px}.z-0{z-index:0}.z-10{z-index:10}.z-20{z-index:20}.my-3{margin-top:.75rem;margin-bottom:.75rem}.my-6{margin-top:1.5rem;margin-bottom:1.5rem}.mx-auto{margin-left:auto;margin-right:auto}.-mx-3{margin-left:-.75rem;margin-right:-.75rem}.mt-6{margin-top:1.5rem}.mb-2{margin-bottom:.5rem}.box-border{box-sizing:border-box}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.aspect-\[512\/512\]{aspect-ratio:512/512}.h-0{height:0px}.h-full{height:100%}.max-h-\[9rem\]{max-height:9rem}.max-h-24{max-height:6rem}.w-0{width:0px}.w-full{width:100%}.max-w-full{max-width:100%}.max-w-\[3rem\]{max-width:3rem}.max-w-screen-md{max-width:768px}.-translate-x-1\/2{--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@-webkit-keyframes spin{to{transform:rotate(360deg)}}@keyframes spin{to{transform:rotate(360deg)}}.animate-spin{-webkit-animation:spin 1s linear infinite;animation:spin 1s linear infinite}.cursor-pointer{cursor:pointer}.snap-x{scroll-snap-type:x var(--tw-scroll-snap-strictness)}.snap-y{scroll-snap-type:y var(--tw-scroll-snap-strictness)}.snap-mandatory{--tw-scroll-snap-strictness: mandatory}.snap-start{scroll-snap-align:start}.snap-always{scroll-snap-stop:always}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-\[2fr_1\.5fr\]{grid-template-columns:2fr 1.5fr}.flex-col{flex-direction:column}.flex-nowrap{flex-wrap:nowrap}.items-center{align-items:center}.justify-center{justify-content:center}.gap-2{gap:.5rem}.gap-1{gap:.25rem}.overflow-hidden{overflow:hidden}.overflow-clip{overflow:clip}.overflow-scroll{overflow:scroll}.overflow-x-scroll{overflow-x:scroll}.whitespace-nowrap{white-space:nowrap}.rounded-lg{border-radius:.5rem}.border{border-width:1px}.border-gray-500{--tw-border-opacity: 1;border-color:rgb(107 114 128 / var(--tw-border-opacity))}.border-gray-300{--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity))}.bg-gray-50{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity))}.p-3{padding:.75rem}.p-1{padding:.25rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.py-5{padding-top:1.25rem;padding-bottom:1.25rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.pl-2{padding-left:.5rem}.text-base{font-size:1rem;line-height:1.5rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.leading-6{line-height:1.5rem}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}.text-gray-900{--tw-text-opacity: 1;color:rgb(17 24 39 / var(--tw-text-opacity))}.opacity-0{opacity:0}.opacity-30{opacity:.3}.outline{outline-style:solid}.outline-2{outline-width:2px}.outline-offset-\[-2px\]{outline-offset:-2px}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-200{transition-duration:.2s}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.hover\:outline:hover{outline-style:solid}.focus\:border-blue-500:focus{--tw-border-opacity: 1;border-color:rgb(59 130 246 / var(--tw-border-opacity))}.focus\:ring-blue-500:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity))}.disabled\:opacity-50:disabled{opacity:.5}@media (prefers-color-scheme: dark){.dark\:border-gray-300{--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity))}.dark\:bg-gray-50{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity))}.dark\:focus\:ring-blue-500:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity))}}@media (min-width: 530px){.sm\:max-h-\[none\]{max-height:none}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}}
diff --git a/frontend/.svelte-kit/output/client/_app/immutable/assets/pages/index.svelte-f2b33456.css b/frontend/.svelte-kit/output/client/_app/immutable/assets/pages/index.svelte-f2b33456.css
new file mode 100644
index 0000000000000000000000000000000000000000..61b850a78a83d50591e09b5bda91d1c3e3b2d906
--- /dev/null
+++ b/frontend/.svelte-kit/output/client/_app/immutable/assets/pages/index.svelte-f2b33456.css
@@ -0,0 +1 @@
+form.svelte-1gwcbp.svelte-1gwcbp{width:100%;overflow:hidden}.samples.svelte-1gwcbp.svelte-1gwcbp{display:flex;scroll-snap-type:x var(--tw-scroll-snap-strictness);--tw-scroll-snap-strictness:mandatory;flex-wrap:nowrap;gap:.25rem;overflow-x:scroll;-ms-overflow-style:none;scrollbar-width:none}.samples.svelte-1gwcbp.svelte-1gwcbp::-webkit-scrollbar{display:none}input[type=radio].svelte-1gwcbp.svelte-1gwcbp{position:absolute;display:none;height:0px;width:0px;opacity:0}input[type=radio].svelte-1gwcbp.svelte-1gwcbp:disabled{opacity:.5}input[type=radio].svelte-1gwcbp:checked~label.svelte-1gwcbp{outline-style:solid;outline-width:2px;outline-color:#eab308}input[type=radio].svelte-1gwcbp:disabled+label.svelte-1gwcbp{opacity:.5}label.svelte-1gwcbp.svelte-1gwcbp{display:flex;cursor:pointer;outline-width:2px;outline-offset:-2px;outline-color:#eab308;transition-property:all;transition-duration:.2s;transition-timing-function:cubic-bezier(.4,0,.2,1)}label.svelte-1gwcbp.svelte-1gwcbp:hover{outline-style:solid}img.svelte-1gwcbp.svelte-1gwcbp{max-height:6rem;max-width:none}.colors.svelte-1oy4poo.svelte-1oy4poo{display:grid;max-height:9rem;scroll-snap-type:y var(--tw-scroll-snap-strictness);--tw-scroll-snap-strictness:mandatory;grid-template-columns:repeat(2,minmax(0,1fr));gap:.5rem;overflow:scroll}@media (min-width: 530px){.colors.svelte-1oy4poo.svelte-1oy4poo{max-height:none;grid-template-columns:repeat(3,minmax(0,1fr))}}.colors.svelte-1oy4poo span.svelte-1oy4poo{margin-left:.5rem}.colors.svelte-1oy4poo svg.svelte-1oy4poo{display:block}input[type=radio].svelte-1oy4poo.svelte-1oy4poo{position:absolute;display:none;height:0px;width:0px;opacity:0}input[type=radio].svelte-1oy4poo:checked~label.svelte-1oy4poo{outline-style:solid;outline-width:2px;outline-color:#eab308}label.svelte-1oy4poo.svelte-1oy4poo{display:flex;cursor:pointer;white-space:nowrap;outline-width:2px;outline-offset:-2px;outline-color:#eab308;transition-property:all;transition-duration:.2s;transition-timing-function:cubic-bezier(.4,0,.2,1)}label.svelte-1oy4poo.svelte-1oy4poo:hover{outline-style:solid}.brush.svelte-1oy4poo.svelte-1oy4poo{display:flex}select.svelte-7to72y.svelte-7to72y,button.svelte-7to72y.svelte-7to72y,input.svelte-7to72y.svelte-7to72y{border-radius:.5rem;border-width:1px;--tw-border-opacity:1;border-color:rgb(209 213 219 / var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(249 250 251 / var(--tw-bg-opacity));padding:.25rem;font-size:.875rem;line-height:1.25rem;--tw-text-opacity:1;color:rgb(17 24 39 / var(--tw-text-opacity))}select.svelte-7to72y.svelte-7to72y:focus,button.svelte-7to72y.svelte-7to72y:focus,input.svelte-7to72y.svelte-7to72y:focus{--tw-border-opacity:1;border-color:rgb(59 130 246 / var(--tw-border-opacity));--tw-ring-opacity:1;--tw-ring-color:rgb(59 130 246 / var(--tw-ring-opacity)) }select.svelte-7to72y.svelte-7to72y:disabled,button.svelte-7to72y.svelte-7to72y:disabled,input.svelte-7to72y.svelte-7to72y:disabled{opacity:.5}@media (prefers-color-scheme: dark){select.svelte-7to72y.svelte-7to72y,button.svelte-7to72y.svelte-7to72y,input.svelte-7to72y.svelte-7to72y{--tw-border-opacity:1;border-color:rgb(209 213 219 / var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(249 250 251 / var(--tw-bg-opacity))}select.svelte-7to72y.svelte-7to72y:focus,button.svelte-7to72y.svelte-7to72y:focus,input.svelte-7to72y.svelte-7to72y:focus{--tw-border-opacity:1;border-color:rgb(59 130 246 / var(--tw-border-opacity));--tw-ring-opacity:1;--tw-ring-color:rgb(59 130 246 / var(--tw-ring-opacity)) }}input.svelte-7to72y:disabled+label.svelte-7to72y{opacity:.5}input.svelte-7to72y.svelte-7to72y{padding-left:.75rem}.canvas.svelte-vhujxn{z-index:0;aspect-ratio:512/512;width:100%;max-width:100%;border-width:1px;--tw-border-opacity:1;border-color:rgb(107 114 128 / var(--tw-border-opacity))}.brush.svelte-vhujxn{pointer-events:none;position:absolute;z-index:10;--tw-translate-x:-50%;--tw-translate-y:-50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.label.svelte-vhujxn{pointer-events:none;position:absolute;top:0px;left:0px;z-index:20;-webkit-user-select:none;-moz-user-select:none;user-select:none;padding-left:.5rem;padding-right:.5rem;font-size:1rem;line-height:1.5rem;--tw-text-opacity:1;color:rgb(255 255 255 / var(--tw-text-opacity));color:#fff;font-weight:bolder;-webkit-text-stroke:1px black;-webkit-text-fill-color:white}.image.svelte-1t0h0rs{z-index:0;box-sizing:border-box;aspect-ratio:512/512;border-width:1px;--tw-border-opacity:1;border-color:rgb(107 114 128 / var(--tw-border-opacity))}@media (prefers-color-scheme: dark){.image.svelte-1t0h0rs{--tw-border-opacity:1;border-color:rgb(209 213 219 / var(--tw-border-opacity))}}.loading.svelte-1t0h0rs{position:absolute;top:0px;left:0px;right:0px;bottom:0px;display:flex;flex-direction:column;align-items:center;justify-content:center}.drawings.svelte-1sy339h{display:grid;grid-template-columns:2fr 1.5fr;place-items:center}@media (min-width: 530px){.drawings.svelte-1sy339h{grid-template-columns:repeat(2,minmax(0,1fr))}}button.svelte-1sy339h{border-radius:.5rem;border-width:1px;--tw-border-opacity:1;border-color:rgb(209 213 219 / var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(249 250 251 / var(--tw-bg-opacity));padding:.25rem;font-size:.875rem;line-height:1.25rem;--tw-text-opacity:1;color:rgb(17 24 39 / var(--tw-text-opacity))}button.svelte-1sy339h:focus{--tw-border-opacity:1;border-color:rgb(59 130 246 / var(--tw-border-opacity));--tw-ring-opacity:1;--tw-ring-color:rgb(59 130 246 / var(--tw-ring-opacity))}button.svelte-1sy339h:disabled{opacity:.5}@media (prefers-color-scheme: dark){button.svelte-1sy339h{--tw-border-opacity:1;border-color:rgb(209 213 219 / var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(249 250 251 / var(--tw-bg-opacity))}button.svelte-1sy339h:focus{--tw-border-opacity:1;border-color:rgb(59 130 246 / var(--tw-border-opacity));--tw-ring-opacity:1;--tw-ring-color:rgb(59 130 246 / var(--tw-ring-opacity))}}.green.svelte-1sy339h{background-color:#90ee90;font-weight:700;font-size:1.2em}
diff --git a/frontend/.svelte-kit/output/client/_app/immutable/chunks/index-bcf2726a.js b/frontend/.svelte-kit/output/client/_app/immutable/chunks/index-bcf2726a.js
new file mode 100644
index 0000000000000000000000000000000000000000..2d47b275bdcb23c7324444798fdc9687822aeb28
--- /dev/null
+++ b/frontend/.svelte-kit/output/client/_app/immutable/chunks/index-bcf2726a.js
@@ -0,0 +1 @@
+function N(){}function H(t,n){for(const e in n)t[e]=n[e];return t}function B(t){return t()}function M(){return Object.create(null)}function p(t){t.forEach(B)}function I(t){return typeof t=="function"}function lt(t,n){return t!=t?n==n:t!==n||t&&typeof t=="object"||typeof t=="function"}let g;function ot(t,n){return g||(g=document.createElement("a")),g.href=n,t===g.href}function W(t){return Object.keys(t).length===0}function G(t,...n){if(t==null)return N;const e=t.subscribe(...n);return e.unsubscribe?()=>e.unsubscribe():e}function st(t,n,e){t.$$.on_destroy.push(G(n,e))}function at(t,n,e,i){if(t){const c=L(t,n,e,i);return t[0](c)}}function L(t,n,e,i){return t[1]&&i?H(e.ctx.slice(),t[1](i(n))):e.ctx}function ft(t,n,e,i){if(t[2]&&i){const c=t[2](i(e));if(n.dirty===void 0)return c;if(typeof c=="object"){const s=[],u=Math.max(n.dirty.length,c.length);for(let l=0;l<u;l+=1)s[l]=n.dirty[l]|c[l];return s}return n.dirty|c}return n.dirty}function _t(t,n,e,i,c,s){if(c){const u=L(n,e,i,s);t.p(u,c)}}function dt(t){if(t.ctx.length>32){const n=[],e=t.ctx.length/32;for(let i=0;i<e;i++)n[i]=-1;return n}return-1}function ht(t,n,e){return t.set(e),n}let w=!1;function J(){w=!0}function K(){w=!1}function Q(t,n,e,i){for(;t<n;){const c=t+(n-t>>1);e(c)<=i?t=c+1:n=c}return t}function R(t){if(t.hydrate_init)return;t.hydrate_init=!0;let n=t.childNodes;if(t.nodeName==="HEAD"){const r=[];for(let o=0;o<n.length;o++){const f=n[o];f.claim_order!==void 0&&r.push(f)}n=r}const e=new Int32Array(n.length+1),i=new Int32Array(n.length);e[0]=-1;let c=0;for(let r=0;r<n.length;r++){const o=n[r].claim_order,f=(c>0&&n[e[c]].claim_order<=o?c+1:Q(1,c,y=>n[e[y]].claim_order,o))-1;i[r]=e[f]+1;const a=f+1;e[a]=r,c=Math.max(a,c)}const s=[],u=[];let l=n.length-1;for(let r=e[c]+1;r!=0;r=i[r-1]){for(s.push(n[r-1]);l>=r;l--)u.push(n[l]);l--}for(;l>=0;l--)u.push(n[l]);s.reverse(),u.sort((r,o)=>r.claim_order-o.claim_order);for(let r=0,o=0;r<u.length;r++){for(;o<s.length&&u[r].claim_order>=s[o].claim_order;)o++;const f=o<s.length?s[o]:null;t.insertBefore(u[r],f)}}function U(t,n){if(w){for(R(t),(t.actual_end_child===void 0||t.actual_end_child!==null&&t.actual_end_child.parentElement!==t)&&(t.actual_end_child=t.firstChild);t.actual_end_child!==null&&t.actual_end_child.claim_order===void 0;)t.actual_end_child=t.actual_end_child.nextSibling;n!==t.actual_end_child?(n.claim_order!==void 0||n.parentNode!==t)&&t.insertBefore(n,t.actual_end_child):t.actual_end_child=n.nextSibling}else(n.parentNode!==t||n.nextSibling!==null)&&t.appendChild(n)}function mt(t,n,e){w&&!e?U(t,n):(n.parentNode!==t||n.nextSibling!=e)&&t.insertBefore(n,e||null)}function V(t){t.parentNode.removeChild(t)}function pt(t,n){for(let e=0;e<t.length;e+=1)t[e]&&t[e].d(n)}function X(t){return document.createElement(t)}function Y(t){return document.createElementNS("http://www.w3.org/2000/svg",t)}function j(t){return document.createTextNode(t)}function yt(){return j(" ")}function gt(){return j("")}function bt(t,n,e,i){return t.addEventListener(n,e,i),()=>t.removeEventListener(n,e,i)}function xt(t){return function(n){return n.preventDefault(),t.call(this,n)}}function $t(t,n,e){e==null?t.removeAttribute(n):t.getAttribute(n)!==e&&t.setAttribute(n,e)}function wt(t){return t===""?null:+t}function Z(t){return Array.from(t.childNodes)}function tt(t){t.claim_info===void 0&&(t.claim_info={last_index:0,total_claimed:0})}function O(t,n,e,i,c=!1){tt(t);const s=(()=>{for(let u=t.claim_info.last_index;u<t.length;u++){const l=t[u];if(n(l)){const r=e(l);return r===void 0?t.splice(u,1):t[u]=r,c||(t.claim_info.last_index=u),l}}for(let u=t.claim_info.last_index-1;u>=0;u--){const l=t[u];if(n(l)){const r=e(l);return r===void 0?t.splice(u,1):t[u]=r,c?r===void 0&&t.claim_info.last_index--:t.claim_info.last_index=u,l}}return i()})();return s.claim_order=t.claim_info.total_claimed,t.claim_info.total_claimed+=1,s}function P(t,n,e,i){return O(t,c=>c.nodeName===n,c=>{const s=[];for(let u=0;u<c.attributes.length;u++){const l=c.attributes[u];e[l.name]||s.push(l.name)}s.forEach(u=>c.removeAttribute(u))},()=>i(n))}function vt(t,n,e){return P(t,n,e,X)}function Et(t,n,e){return P(t,n,e,Y)}function nt(t,n){return O(t,e=>e.nodeType===3,e=>{const i=""+n;if(e.data.startsWith(i)){if(e.data.length!==i.length)return e.splitText(i.length)}else e.data=i},()=>j(n),!0)}function kt(t){return nt(t," ")}function Nt(t,n){n=""+n,t.wholeText!==n&&(t.data=n)}function jt(t,n){t.value=n==null?"":n}function St(t,n,e,i){e===null?t.style.removeProperty(n):t.style.setProperty(n,e,i?"important":"")}let m;function h(t){m=t}function S(){if(!m)throw new Error("Function called outside component initialization");return m}function At(t){S().$$.on_mount.push(t)}function Ct(t){S().$$.after_update.push(t)}function Mt(t,n){return S().$$.context.set(t,n),n}const d=[],T=[],x=[],q=[],D=Promise.resolve();let E=!1;function z(){E||(E=!0,D.then(F))}function Tt(){return z(),D}function k(t){x.push(t)}const v=new Set;let b=0;function F(){const t=m;do{for(;b<d.length;){const n=d[b];b++,h(n),et(n.$$)}for(h(null),d.length=0,b=0;T.length;)T.pop()();for(let n=0;n<x.length;n+=1){const e=x[n];v.has(e)||(v.add(e),e())}x.length=0}while(d.length);for(;q.length;)q.pop()();E=!1,v.clear(),h(t)}function et(t){if(t.fragment!==null){t.update(),p(t.before_update);const n=t.dirty;t.dirty=[-1],t.fragment&&t.fragment.p(t.ctx,n),t.after_update.forEach(k)}}const $=new Set;let _;function qt(){_={r:0,c:[],p:_}}function Bt(){_.r||p(_.c),_=_.p}function it(t,n){t&&t.i&&($.delete(t),t.i(n))}function Lt(t,n,e,i){if(t&&t.o){if($.has(t))return;$.add(t),_.c.push(()=>{$.delete(t),i&&(e&&t.d(1),i())}),t.o(n)}}function Ot(t,n){const e={},i={},c={$$scope:1};let s=t.length;for(;s--;){const u=t[s],l=n[s];if(l){for(const r in u)r in l||(i[r]=1);for(const r in l)c[r]||(e[r]=l[r],c[r]=1);t[s]=l}else for(const r in u)c[r]=1}for(const u in i)u in e||(e[u]=void 0);return e}function Pt(t){return typeof t=="object"&&t!==null?t:{}}function Dt(t){t&&t.c()}function zt(t,n){t&&t.l(n)}function rt(t,n,e,i){const{fragment:c,on_mount:s,on_destroy:u,after_update:l}=t.$$;c&&c.m(n,e),i||k(()=>{const r=s.map(B).filter(I);u?u.push(...r):p(r),t.$$.on_mount=[]}),l.forEach(k)}function ct(t,n){const e=t.$$;e.fragment!==null&&(p(e.on_destroy),e.fragment&&e.fragment.d(n),e.on_destroy=e.fragment=null,e.ctx=[])}function ut(t,n){t.$$.dirty[0]===-1&&(d.push(t),z(),t.$$.dirty.fill(0)),t.$$.dirty[n/31|0]|=1<<n%31}function Ft(t,n,e,i,c,s,u,l=[-1]){const r=m;h(t);const o=t.$$={fragment:null,ctx:null,props:s,update:N,not_equal:c,bound:M(),on_mount:[],on_destroy:[],on_disconnect:[],before_update:[],after_update:[],context:new Map(n.context||(r?r.$$.context:[])),callbacks:M(),dirty:l,skip_bound:!1,root:n.target||r.$$.root};u&&u(o.root);let f=!1;if(o.ctx=e?e(t,n.props||{},(a,y,...A)=>{const C=A.length?A[0]:y;return o.ctx&&c(o.ctx[a],o.ctx[a]=C)&&(!o.skip_bound&&o.bound[a]&&o.bound[a](C),f&&ut(t,a)),y}):[],o.update(),f=!0,p(o.before_update),o.fragment=i?i(o.ctx):!1,n.target){if(n.hydrate){J();const a=Z(n.target);o.fragment&&o.fragment.l(a),a.forEach(V)}else o.fragment&&o.fragment.c();n.intro&&it(t.$$.fragment),rt(t,n.target,n.anchor,n.customElement),K(),F()}h(r)}class Ht{$destroy(){ct(this,1),this.$destroy=N}$on(n,e){const i=this.$$.callbacks[n]||(this.$$.callbacks[n]=[]);return i.push(e),()=>{const c=i.indexOf(e);c!==-1&&i.splice(c,1)}}$set(n){this.$$set&&!W(n)&&(this.$$.skip_bound=!0,this.$$set(n),this.$$.skip_bound=!1)}}export{Pt as A,ct as B,H as C,Tt as D,N as E,at as F,_t as G,dt as H,ft as I,U as J,ot as K,bt as L,pt as M,st as N,ht as O,Y as P,Et as Q,jt as R,Ht as S,xt as T,p as U,wt as V,T as W,Z as a,$t as b,vt as c,V as d,X as e,St as f,mt as g,nt as h,Ft as i,Nt as j,yt as k,gt as l,kt as m,qt as n,Lt as o,Bt as p,it as q,Mt as r,lt as s,j as t,Ct as u,At as v,Dt as w,zt as x,rt as y,Ot as z};
diff --git a/frontend/.svelte-kit/output/client/_app/immutable/chunks/paths-d3bcbd10.js b/frontend/.svelte-kit/output/client/_app/immutable/chunks/paths-d3bcbd10.js
new file mode 100644
index 0000000000000000000000000000000000000000..0911f4acc85b0ac94f242f9bc4ab5effba088495
--- /dev/null
+++ b/frontend/.svelte-kit/output/client/_app/immutable/chunks/paths-d3bcbd10.js
@@ -0,0 +1 @@
+import{E as f,s as p}from"./index-bcf2726a.js";const n=[];function _(t,b=f){let o;const i=new Set;function r(e){if(p(t,e)&&(t=e,o)){const c=!n.length;for(const s of i)s[1](),n.push(s,t);if(c){for(let s=0;s<n.length;s+=2)n[s][0](n[s+1]);n.length=0}}}function a(e){r(e(t))}function l(e,c=f){const s=[e,c];return i.add(s),i.size===1&&(o=b(r)||f),e(t),()=>{i.delete(s),i.size===0&&(o(),o=null)}}return{set:r,update:a,subscribe:l}}let u="",d="";function g(t){u=t.base,d=t.assets||u}export{d as a,u as b,g as s,_ as w};
diff --git a/frontend/.svelte-kit/output/client/_app/immutable/error.svelte-d9523301.js b/frontend/.svelte-kit/output/client/_app/immutable/error.svelte-d9523301.js
new file mode 100644
index 0000000000000000000000000000000000000000..1c200845989d5bbde3173a928c2ca48d13743a81
--- /dev/null
+++ b/frontend/.svelte-kit/output/client/_app/immutable/error.svelte-d9523301.js
@@ -0,0 +1 @@
+import{S as w,i as y,s as z,e as E,t as v,c as d,a as b,h as P,d as o,g as u,J as R,j as N,k as S,l as C,m as j,E as H}from"./chunks/index-bcf2726a.js";function J(r){let l,t=r[1].frame+"",a;return{c(){l=E("pre"),a=v(t)},l(f){l=d(f,"PRE",{});var s=b(l);a=P(s,t),s.forEach(o)},m(f,s){u(f,l,s),R(l,a)},p(f,s){s&2&&t!==(t=f[1].frame+"")&&N(a,t)},d(f){f&&o(l)}}}function h(r){let l,t=r[1].stack+"",a;return{c(){l=E("pre"),a=v(t)},l(f){l=d(f,"PRE",{});var s=b(l);a=P(s,t),s.forEach(o)},m(f,s){u(f,l,s),R(l,a)},p(f,s){s&2&&t!==(t=f[1].stack+"")&&N(a,t)},d(f){f&&o(l)}}}function A(r){let l,t,a,f,s=r[1].message+"",c,k,n,p,i=r[1].frame&&J(r),_=r[1].stack&&h(r);return{c(){l=E("h1"),t=v(r[0]),a=S(),f=E("pre"),c=v(s),k=S(),i&&i.c(),n=S(),_&&_.c(),p=C()},l(e){l=d(e,"H1",{});var m=b(l);t=P(m,r[0]),m.forEach(o),a=j(e),f=d(e,"PRE",{});var q=b(f);c=P(q,s),q.forEach(o),k=j(e),i&&i.l(e),n=j(e),_&&_.l(e),p=C()},m(e,m){u(e,l,m),R(l,t),u(e,a,m),u(e,f,m),R(f,c),u(e,k,m),i&&i.m(e,m),u(e,n,m),_&&_.m(e,m),u(e,p,m)},p(e,[m]){m&1&&N(t,e[0]),m&2&&s!==(s=e[1].message+"")&&N(c,s),e[1].frame?i?i.p(e,m):(i=J(e),i.c(),i.m(n.parentNode,n)):i&&(i.d(1),i=null),e[1].stack?_?_.p(e,m):(_=h(e),_.c(),_.m(p.parentNode,p)):_&&(_.d(1),_=null)},i:H,o:H,d(e){e&&o(l),e&&o(a),e&&o(f),e&&o(k),i&&i.d(e),e&&o(n),_&&_.d(e),e&&o(p)}}}function F({error:r,status:l}){return{props:{error:r,status:l}}}function B(r,l,t){let{status:a}=l,{error:f}=l;return r.$$set=s=>{"status"in s&&t(0,a=s.status),"error"in s&&t(1,f=s.error)},[a,f]}class G extends w{constructor(l){super(),y(this,l,B,A,z,{status:0,error:1})}}export{G as default,F as load};
diff --git a/frontend/.svelte-kit/output/client/_app/immutable/manifest.json b/frontend/.svelte-kit/output/client/_app/immutable/manifest.json
new file mode 100644
index 0000000000000000000000000000000000000000..8cc5be7786f98f6a3ebb6610e16193ae827aba04
--- /dev/null
+++ b/frontend/.svelte-kit/output/client/_app/immutable/manifest.json
@@ -0,0 +1,59 @@
+{
+  ".svelte-kit/runtime/client/start.js": {
+    "file": "start-1d6beeeb.js",
+    "src": ".svelte-kit/runtime/client/start.js",
+    "isEntry": true,
+    "imports": [
+      "_index-bcf2726a.js",
+      "_paths-d3bcbd10.js"
+    ],
+    "dynamicImports": [
+      "src/routes/__layout.svelte",
+      ".svelte-kit/runtime/components/error.svelte",
+      "src/routes/index.svelte"
+    ]
+  },
+  "src/routes/__layout.svelte": {
+    "file": "pages/__layout.svelte-f5a1b718.js",
+    "src": "src/routes/__layout.svelte",
+    "isEntry": true,
+    "isDynamicEntry": true,
+    "imports": [
+      "_index-bcf2726a.js"
+    ],
+    "css": [
+      "assets/pages/__layout.svelte-b67cf61d.css"
+    ]
+  },
+  ".svelte-kit/runtime/components/error.svelte": {
+    "file": "error.svelte-d9523301.js",
+    "src": ".svelte-kit/runtime/components/error.svelte",
+    "isEntry": true,
+    "isDynamicEntry": true,
+    "imports": [
+      "_index-bcf2726a.js"
+    ]
+  },
+  "src/routes/index.svelte": {
+    "file": "pages/index.svelte-1f940fb6.js",
+    "src": "src/routes/index.svelte",
+    "isEntry": true,
+    "isDynamicEntry": true,
+    "imports": [
+      "_index-bcf2726a.js",
+      "_paths-d3bcbd10.js"
+    ],
+    "css": [
+      "assets/pages/index.svelte-f2b33456.css"
+    ]
+  },
+  "_index-bcf2726a.js": {
+    "file": "chunks/index-bcf2726a.js"
+  },
+  "_paths-d3bcbd10.js": {
+    "file": "chunks/paths-d3bcbd10.js",
+    "imports": [
+      "_index-bcf2726a.js"
+    ]
+  }
+}
\ No newline at end of file
diff --git a/frontend/.svelte-kit/output/client/_app/immutable/pages/__layout.svelte-f5a1b718.js b/frontend/.svelte-kit/output/client/_app/immutable/pages/__layout.svelte-f5a1b718.js
new file mode 100644
index 0000000000000000000000000000000000000000..63e70ca5daaba53129ea6b569dcab68b8e44eaae
--- /dev/null
+++ b/frontend/.svelte-kit/output/client/_app/immutable/pages/__layout.svelte-f5a1b718.js
@@ -0,0 +1 @@
+import{S as n,i,s as p,F as l,G as w,H as c,I as d,q as h,o as m}from"../chunks/index-bcf2726a.js";function g(s){let o;const a=s[1].default,t=l(a,s,s[0],null);return{c(){t&&t.c()},l(e){t&&t.l(e)},m(e,r){t&&t.m(e,r),o=!0},p(e,[r]){t&&t.p&&(!o||r&1)&&w(t,a,e,e[0],o?d(a,e[0],r,null):c(e[0]),null)},i(e){o||(h(t,e),o=!0)},o(e){m(t,e),o=!1},d(e){t&&t.d(e)}}}function b(s,o,a){let{$$slots:t={},$$scope:e}=o;return s.$$set=r=>{"$$scope"in r&&a(0,e=r.$$scope)},[e,t]}class u extends n{constructor(o){super(),i(this,o,b,g,p,{})}}export{u as default};
diff --git a/frontend/.svelte-kit/output/client/_app/immutable/pages/index.svelte-1f940fb6.js b/frontend/.svelte-kit/output/client/_app/immutable/pages/index.svelte-1f940fb6.js
new file mode 100644
index 0000000000000000000000000000000000000000..ecb049b7a08dd918b98554c8f0187dfb452fe2e7
--- /dev/null
+++ b/frontend/.svelte-kit/output/client/_app/immutable/pages/index.svelte-1f940fb6.js
@@ -0,0 +1 @@
+import{S as se,i as ne,s as ie,e as C,k as A,c as T,a as z,m as D,d as I,b as s,K as Oe,g as Z,J as p,t as V,h as F,L as U,E as Q,M as Ne,N as Y,O as K,P as me,Q as ge,j as Le,f as $e,R as oe,T as Se,U as Ue,V as ct,W as Re,w as ue,x as pe,y as de,q as he,o as fe,B as ve,v as ut}from"../chunks/index-bcf2726a.js";import{w as ae,b as at}from"../chunks/paths-d3bcbd10.js";const Pe=[{color:[219,14,154],label:"building"},{color:[147,142,123],label:"pervious surface"},{color:[248,12,0],label:"impervious surface"},{color:[169,113,1],label:"bare soil"},{color:[21,83,174],label:"water"},{color:[25,74,38],label:"coniferous"},{color:[70,228,131],label:"deciduous"},{color:[243,166,13],label:"brushwood"},{color:[102,0,130],label:"vineyard"},{color:[85,255,0],label:"herbaceous vegetation"},{color:[255,243,13],label:"agricultural land"},{color:[228,223,124],label:"plowed land"},{color:[61,230,235],label:"swimming pool"},{color:[255,255,255],label:"snow"},{color:[138,179,160],label:"clear cut"},{color:[107,113,79],label:"mixed"}],Be=["/samples/default.jpg","/samples/example0.png","/samples/example1.png","/samples/example2.png","/samples/example3.png","/samples/example4.png","/samples/example5.png","/samples/example6.jpg"],ke=[["High resolution satellite image, 4K, ultra detailed","Realistic"],["Colorful lego bricks","Lego brick"],["Black and white paper pencil drawing","Pencil"],["Oil on canvas painting","Painting"]];function st(){return BigInt(0xb7dd73e137d20800&((1<<63)-1)*Math.random())}const _e=ae(new Map),je=ae(),Ae=ae(),De=ae(),xe=ae(),Ie=ae({prompt:"Aerial view of rue des Lilas, Toulouse, Haute-Garonne, France",modifier:ke[0][0],seed:st(),steps:20}),be=ae(!1),Me=ae(!1);function Ye(l,e,t){const r=l.slice();return r[3]=e[t],r[5]=t,r}function Je(l){let e,t,r,a,o,n,d,i,k,E,b,P;return{c(){e=C("div"),t=C("input"),n=A(),d=C("label"),i=C("img"),P=A(),this.h()},l(g){e=T(g,"DIV",{class:!0});var v=z(e);t=T(v,"INPUT",{type:!0,name:!0,id:!0,class:!0}),n=D(v),d=T(v,"LABEL",{for:!0,class:!0});var x=z(d);i=T(x,"IMG",{src:!0,alt:!0,class:!0}),x.forEach(I),P=D(v),v.forEach(I),this.h()},h(){s(t,"type","radio"),s(t,"name","samples"),s(t,"id",r="sample-"+l[5]),t.value=a=l[5],t.disabled=o=l[0]===!0,s(t,"class","svelte-1gwcbp"),Oe(i.src,k=at+l[3])||s(i,"src",k),s(i,"alt",E=l[3]),s(i,"class","svelte-1gwcbp"),s(d,"for",b="sample-"+l[5]),s(d,"class","svelte-1gwcbp"),s(e,"class","snap-always snap-start")},m(g,v){Z(g,e,v),p(e,t),p(e,n),p(e,d),p(d,i),p(e,P)},p(g,v){v&1&&o!==(o=g[0]===!0)&&(t.disabled=o)},d(g){g&&I(e)}}}function pt(l){let e,t,r,a,o,n,d,i,k=Be,E=[];for(let b=0;b<k.length;b+=1)E[b]=Je(Ye(l,k,b));return{c(){e=C("div"),t=C("h4"),r=V("Select a Template"),a=A(),o=C("form"),n=C("div");for(let b=0;b<E.length;b+=1)E[b].c();this.h()},l(b){e=T(b,"DIV",{});var P=z(e);t=T(P,"H4",{class:!0});var g=z(t);r=F(g,"Select a Template"),g.forEach(I),a=D(P),o=T(P,"FORM",{class:!0});var v=z(o);n=T(v,"DIV",{class:!0});var x=z(n);for(let u=0;u<E.length;u+=1)E[u].l(x);x.forEach(I),v.forEach(I),P.forEach(I),this.h()},h(){s(t,"class","font-bold mt-6 mb-2 my-6 leading-6"),s(n,"class","samples  svelte-1gwcbp"),s(o,"class","svelte-1gwcbp")},m(b,P){Z(b,e,P),p(e,t),p(t,r),p(e,a),p(e,o),p(o,n);for(let g=0;g<E.length;g+=1)E[g].m(n,null);d||(i=U(o,"input",l[1]),d=!0)},p(b,[P]){if(P&1){k=Be;let g;for(g=0;g<k.length;g+=1){const v=Ye(b,k,g);E[g]?E[g].p(v,P):(E[g]=Je(v),E[g].c(),E[g].m(n,null))}for(;g<E.length;g+=1)E[g].d(1);E.length=k.length}},i:Q,o:Q,d(b){b&&I(e),Ne(E,b),d=!1,i()}}}async function dt(l){return new Promise((e,t)=>{const r=new Image;r.onload=()=>{URL.revokeObjectURL(r.src),e(r)},r.onerror=a=>{t(a)},r.src=URL.createObjectURL(l)})}function ht(l,e,t){let r,a;return Y(l,De,n=>t(2,r=n)),Y(l,be,n=>t(0,a=n)),[a,async n=>{n.preventDefault();const d=Be[parseInt(n.target.value)];if(d){const i=await fetch(at+d).then(E=>E.blob()),k=await dt(i);K(De,r=k,r)}}]}class ft extends se{constructor(e){super(),ne(this,e,ht,pt,ie,{})}}function Xe(l,e,t){const r=l.slice();return r[2]=e[t],r[7]=t,r}function Ke(l){let e,t,r,a,o,n,d,i,k,E,b,P,g=l[2].label+"",v,x,u;return{c(){e=C("div"),t=C("input"),n=A(),d=C("label"),i=me("svg"),k=me("rect"),b=A(),P=C("span"),v=V(g),u=A(),this.h()},l(f){e=T(f,"DIV",{class:!0});var h=z(e);t=T(h,"INPUT",{name:!0,type:!0,id:!0,class:!0}),n=D(h),d=T(h,"LABEL",{for:!0,class:!0});var c=z(d);i=ge(c,"svg",{width:!0,height:!0,viewBox:!0,class:!0});var m=z(i);k=ge(m,"rect",{x:!0,y:!0,width:!0,height:!0,fill:!0}),z(k).forEach(I),m.forEach(I),b=D(c),P=T(c,"SPAN",{class:!0});var w=z(P);v=F(w,g),w.forEach(I),c.forEach(I),u=D(h),h.forEach(I),this.h()},h(){s(t,"name","color"),t.checked=r=l[7]==nt,s(t,"type","radio"),s(t,"id",a="color-"+l[7]),t.value=o=l[7],s(t,"class","svelte-1oy4poo"),s(k,"x","0"),s(k,"y","0"),s(k,"width","20"),s(k,"height","20"),s(k,"fill",E="rgb("+l[2].color.join(",")+")"),s(i,"width","20"),s(i,"height","20"),s(i,"viewBox","0 0 20 20"),s(i,"class","svelte-1oy4poo"),s(P,"class","svelte-1oy4poo"),s(d,"for",x="color-"+l[7]),s(d,"class","svelte-1oy4poo"),s(e,"class","snap-always snap-start")},m(f,h){Z(f,e,h),p(e,t),p(e,n),p(e,d),p(d,i),p(i,k),p(d,b),p(d,P),p(P,v),p(e,u)},p:Q,d(f){f&&I(e)}}}function vt(l){let e,t,r,a,o,n,d,i,k,E,b,P,g,v=l[0].size+"",x,u,f,h=Pe,c=[];for(let m=0;m<h.length;m+=1)c[m]=Ke(Xe(l,h,m));return{c(){e=C("form"),t=C("h4"),r=V("Brush Type"),a=A(),o=C("div");for(let m=0;m<c.length;m+=1)c[m].c();n=A(),d=C("h4"),i=V("Brush Size"),k=A(),E=C("div"),b=C("input"),P=A(),g=C("label"),x=V(v),this.h()},l(m){e=T(m,"FORM",{});var w=z(e);t=T(w,"H4",{class:!0});var y=z(t);r=F(y,"Brush Type"),y.forEach(I),a=D(w),o=T(w,"DIV",{class:!0,name:!0});var M=z(o);for(let B=0;B<c.length;B+=1)c[B].l(M);M.forEach(I),n=D(w),d=T(w,"H4",{class:!0});var _=z(d);i=F(_,"Brush Size"),_.forEach(I),k=D(w),E=T(w,"DIV",{class:!0});var S=z(E);b=T(S,"INPUT",{min:!0,max:!0,step:!0,name:!0,type:!0}),P=D(S),g=T(S,"LABEL",{class:!0,for:!0});var N=z(g);x=F(N,v),N.forEach(I),S.forEach(I),w.forEach(I),this.h()},h(){s(t,"class","font-bold mt-6 mb-2 leading-6 my-3"),s(o,"class","colors svelte-1oy4poo"),s(o,"name","colors"),s(d,"class","font-bold mt-6 mb-2 my-6 leading-6"),b.value="10",s(b,"min","1"),s(b,"max","150"),s(b,"step","1"),s(b,"name","brush"),s(b,"type","range"),s(g,"class","pl-2 svelte-1oy4poo"),s(g,"for","brush"),s(E,"class","brush svelte-1oy4poo")},m(m,w){Z(m,e,w),p(e,t),p(t,r),p(e,a),p(e,o);for(let y=0;y<c.length;y+=1)c[y].m(o,null);p(e,n),p(e,d),p(d,i),p(e,k),p(e,E),p(E,b),p(E,P),p(E,g),p(g,x),u||(f=U(e,"input",l[1]),u=!0)},p(m,[w]){if(w&0){h=Pe;let y;for(y=0;y<h.length;y+=1){const M=Xe(m,h,y);c[y]?c[y].p(M,w):(c[y]=Ke(M),c[y].c(),c[y].m(o,null))}for(;y<c.length;y+=1)c[y].d(1);c.length=h.length}w&1&&v!==(v=m[0].size+"")&&Le(x,v)},i:Q,o:Q,d(m){m&&I(e),Ne(c,m),u=!1,f()}}}const nt=6;function mt(l,e,t){let r;Y(l,xe,k=>t(0,r=k));const{color:a,label:o}=Pe[nt];let n=`rgb(${a.join(",")})`,d=40;return K(xe,r={color:n,size:d,label:o},r),[r,async k=>{const E=k.target;if(E.name==="color"){const b=parseInt(E.value),{color:P,label:g}=Pe[b];n=`rgb(${P.join(",")})`,K(xe,r={color:n,size:d,label:g},r)}else E.name==="brush"&&(d=parseInt(E.value),K(xe,r={color:n,size:d,label:o},r))},a]}class gt extends se{constructor(e){super(),ne(this,e,mt,vt,ie,{})}}function Ze(l,e,t){const r=l.slice();return r[15]=e[t],r}function Qe(l){let e,t=l[15][1]+"",r,a,o;return{c(){e=C("option"),r=V(t),o=V("`"),this.h()},l(n){e=T(n,"OPTION",{});var d=z(e);r=F(d,t),d.forEach(I),o=F(n,"`"),this.h()},h(){e.__value=a=l[15][0],e.value=e.__value},m(n,d){Z(n,e,d),p(e,r),Z(n,o,d)},p:Q,d(n){n&&I(e),n&&I(o)}}}function bt(l){let e,t,r,a,o,n,d,i,k,E,b,P,g,v,x,u,f,h,c,m,w,y,M,_,S,N,B,q,$,J,te,X,O,L,re,ee,le,ce,ye,W=ke,G=[];for(let j=0;j<W.length;j+=1)G[j]=Qe(Ze(l,W,j));return{c(){e=C("form"),t=C("h4"),r=V("Prompt"),a=A(),o=C("input"),d=A(),i=C("h4"),k=V("Modifier"),E=A(),b=C("input"),g=A(),v=C("select"),x=C("option"),u=V("preset");for(let j=0;j<G.length;j+=1)G[j].c();h=A(),c=C("h4"),m=V("Random Seed"),w=A(),y=C("input"),_=A(),S=C("button"),N=V("Random"),q=A(),$=C("h4"),J=V("Sample Steps"),te=A(),X=C("div"),O=C("input"),re=A(),ee=C("label"),le=V(l[2]),this.h()},l(j){e=T(j,"FORM",{});var R=z(e);t=T(R,"H4",{class:!0});var H=z(t);r=F(H,"Prompt"),H.forEach(I),a=D(R),o=T(R,"INPUT",{name:!0,placeholder:!0,style:!0,class:!0}),d=D(R),i=T(R,"H4",{class:!0});var we=z(i);k=F(we,"Modifier"),we.forEach(I),E=D(R),b=T(R,"INPUT",{name:!0,placeholder:!0,style:!0,class:!0}),g=D(R),v=T(R,"SELECT",{name:!0,class:!0});var Ce=z(v);x=T(Ce,"OPTION",{});var Ve=z(x);u=F(Ve,"preset"),Ve.forEach(I);for(let Te=0;Te<G.length;Te+=1)G[Te].l(Ce);Ce.forEach(I),h=D(R),c=T(R,"H4",{class:!0});var Fe=z(c);m=F(Fe,"Random Seed"),Fe.forEach(I),w=D(R),y=T(R,"INPUT",{type:!0,name:!0,placeholder:!0,class:!0}),_=D(R),S=T(R,"BUTTON",{class:!0});var Ge=z(S);N=F(Ge,"Random"),Ge.forEach(I),q=D(R),$=T(R,"H4",{class:!0});var He=z($);J=F(He,"Sample Steps"),He.forEach(I),te=D(R),X=T(R,"DIV",{class:!0});var Ee=z(X);O=T(Ee,"INPUT",{type:!0,name:!0,min:!0,max:!0,step:!0,class:!0}),re=D(Ee),ee=T(Ee,"LABEL",{class:!0,for:!0});var qe=z(ee);le=F(qe,l[2]),qe.forEach(I),Ee.forEach(I),R.forEach(I),this.h()},h(){s(t,"class","font-bold mt-6 mb-2 my-6 leading-6"),s(o,"name","prompt"),s(o,"placeholder","Aerial view of ..., France."),o.disabled=n=l[6]===!0,$e(o,"width","500px"),s(o,"class","svelte-7to72y"),s(i,"class","font-bold mt-6 mb-2 my-6 leading-6"),s(b,"name","modifier"),s(b,"placeholder","High resolution satellite image"),b.disabled=P=l[6]===!0,$e(b,"width","500px"),s(b,"class","svelte-7to72y"),x.disabled=!0,x.selected=!0,x.__value="preset",x.value=x.__value,s(v,"name","presets"),v.disabled=f=l[6]===!0,s(v,"class","svelte-7to72y"),s(c,"class","font-bold mt-6 mb-2 my-6 leading-6"),s(y,"type","Number"),s(y,"name","seed"),s(y,"placeholder","Integer Seed"),y.disabled=M=l[6]===!0,s(y,"class","svelte-7to72y"),S.disabled=B=l[6]===!0,s(S,"class","svelte-7to72y"),s($,"class","font-bold mt-6 mb-2 my-6 leading-6"),s(O,"type","range"),s(O,"name","steps"),s(O,"min","10"),s(O,"max","30"),s(O,"step","1"),O.disabled=L=l[6]===!0,s(O,"class","svelte-7to72y"),s(ee,"class","pl-2 svelte-7to72y"),s(ee,"for","steps"),s(X,"class","flex")},m(j,R){Z(j,e,R),p(e,t),p(t,r),p(e,a),p(e,o),oe(o,l[3]),p(e,d),p(e,i),p(i,k),p(e,E),p(e,b),oe(b,l[4]),p(e,g),p(e,v),p(v,x),p(x,u);for(let H=0;H<G.length;H+=1)G[H].m(v,null);p(e,h),p(e,c),p(c,m),p(e,w),p(e,y),oe(y,l[1]),p(e,_),p(e,S),p(S,N),p(e,q),p(e,$),p($,J),p(e,te),p(e,X),p(X,O),oe(O,l[2]),p(X,re),p(X,ee),p(ee,le),l[14](e),ce||(ye=[U(o,"input",l[8]),U(b,"input",l[9]),U(v,"change",l[10]),U(y,"input",l[11]),U(S,"click",Se(l[12])),U(O,"change",l[13]),U(O,"input",l[13]),U(e,"input",l[7])],ce=!0)},p(j,[R]){if(R&64&&n!==(n=j[6]===!0)&&(o.disabled=n),R&8&&o.value!==j[3]&&oe(o,j[3]),R&64&&P!==(P=j[6]===!0)&&(b.disabled=P),R&16&&b.value!==j[4]&&oe(b,j[4]),R&0){W=ke;let H;for(H=0;H<W.length;H+=1){const we=Ze(j,W,H);G[H]?G[H].p(we,R):(G[H]=Qe(we),G[H].c(),G[H].m(v,null))}for(;H<G.length;H+=1)G[H].d(1);G.length=W.length}R&64&&f!==(f=j[6]===!0)&&(v.disabled=f),R&64&&M!==(M=j[6]===!0)&&(y.disabled=M),R&2&&oe(y,j[1]),R&64&&B!==(B=j[6]===!0)&&(S.disabled=B),R&64&&L!==(L=j[6]===!0)&&(O.disabled=L),R&4&&oe(O,j[2]),R&4&&Le(le,j[2])},i:Q,o:Q,d(j){j&&I(e),Ne(G,j),l[14](null),ce=!1,Ue(ye)}}}function yt(l,e,t){let r,a;Y(l,Ie,h=>t(5,r=h)),Y(l,be,h=>t(6,a=h));function o(){const h=n.elements;K(Ie,r={prompt:h.prompt.value,modifier:h.modifier.value,seed:BigInt(h.seed.value),steps:parseInt(h.steps.value)},r)}let n,d=r.seed,i=r.steps,k=r.prompt,E=r.modifier;function b(){k=this.value,t(3,k)}function P(){E=this.value,t(4,E)}const g=h=>{const c=h.currentTarget.selectedIndex-1;t(4,E=ke[c][0]),K(Ie,r.modifier=ke[c][0],r)};function v(){d=this.value,t(1,d)}const x=()=>{t(1,d=st()),o()};function u(){i=ct(this.value),t(2,i)}function f(h){Re[h?"unshift":"push"](()=>{n=h,t(0,n)})}return[n,d,i,k,E,r,a,o,b,P,g,v,x,u,f]}class wt extends se{constructor(e){super(),ne(this,e,yt,bt,ie,{})}}let _t=(l=21)=>crypto.getRandomValues(new Uint8Array(l)).reduce((e,t)=>(t&=63,t<36?e+=t.toString(36):t<62?e+=(t-26).toString(36).toUpperCase():t>62?e+="-":e+="_",e),"");var xt=typeof globalThis!="undefined"?globalThis:typeof window!="undefined"?window:typeof global!="undefined"?global:typeof self!="undefined"?self:{};function kt(l){return l&&l.__esModule&&Object.prototype.hasOwnProperty.call(l,"default")?l.default:l}var it={exports:{}};(function(l,e){(function(t,r){l.exports=r()})(typeof self!="undefined"?self:xt,function(){return function(t){var r={};function a(o){if(r[o])return r[o].exports;var n=r[o]={i:o,l:!1,exports:{}};return t[o].call(n.exports,n,n.exports,a),n.l=!0,n.exports}return a.m=t,a.c=r,a.d=function(o,n,d){a.o(o,n)||Object.defineProperty(o,n,{enumerable:!0,get:d})},a.r=function(o){typeof Symbol!="undefined"&&Symbol.toStringTag&&Object.defineProperty(o,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(o,"__esModule",{value:!0})},a.t=function(o,n){if(1&n&&(o=a(o)),8&n||4&n&&typeof o=="object"&&o&&o.__esModule)return o;var d=Object.create(null);if(a.r(d),Object.defineProperty(d,"default",{enumerable:!0,value:o}),2&n&&typeof o!="string")for(var i in o)a.d(d,i,function(k){return o[k]}.bind(null,i));return d},a.n=function(o){var n=o&&o.__esModule?function(){return o.default}:function(){return o};return a.d(n,"a",n),n},a.o=function(o,n){return Object.prototype.hasOwnProperty.call(o,n)},a.p="",a(a.s=0)}([function(t,r,a){function o(g,v){return function(x){if(Array.isArray(x))return x}(g)||function(x,u){if(Symbol.iterator in Object(x)||Object.prototype.toString.call(x)==="[object Arguments]"){var f=[],h=!0,c=!1,m=void 0;try{for(var w,y=x[Symbol.iterator]();!(h=(w=y.next()).done)&&(f.push(w.value),!u||f.length!==u);h=!0);}catch(M){c=!0,m=M}finally{try{h||y.return==null||y.return()}finally{if(c)throw m}}return f}}(g,v)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function n(g){return function(v){if(Array.isArray(v)){for(var x=0,u=new Array(v.length);x<v.length;x++)u[x]=v[x];return u}}(g)||function(v){if(Symbol.iterator in Object(v)||Object.prototype.toString.call(v)==="[object Arguments]")return Array.from(v)}(g)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance")}()}function d(g,v){for(var x=0;x<v.length;x++){var u=v[x];u.enumerable=u.enumerable||!1,u.configurable=!0,"value"in u&&(u.writable=!0),Object.defineProperty(g,u.key,u)}}a.r(r);var i=/^#?[0-9A-Fa-f]{1,2}[0-9A-Fa-f]{1,2}[0-9A-Fa-f]{1,2}$/,k=/^rgb\((\s+)?[0-9]{1,3},(\s+)?[0-9]{1,3},(\s+)?[0-9]{1,3}(\s+)?\)$/,E=function(){function g(){(function(u,f){if(!(u instanceof f))throw new TypeError("Cannot call a class as a function")})(this,g),this.canvases={}}var v,x;return v=g,(x=[{key:"parseColor",value:function(u){var f=i.test(u),h=k.test(u);if(!f&&!h)throw new Error("Color is not correct format. #123123 or rgb(123, 123, 123) format required.");if(f){var c=u[0]==="#"?u.slice(1):u;return c=c.length===3?c.split("").reduce(function(_,S){return[].concat(n(_),[S,S])},[]).join(""):c,{r:parseInt(c.slice(0,2),16),g:parseInt(c.slice(2,4),16),b:parseInt(c.slice(4,6),16)}}if(h){var m=o(u.replace(/rgb|\s+|\(|\)/g,"").split(",").map(function(_){return parseInt(_)}),3),w=m[0],y=m[1],M=m[2];return{r:w=w>255?255:w,g:y=y>255?255:y,b:M=M>255?255:M}}}},{key:"make",value:function(u){var f=u.size,h=u.color;try{f*=window.devicePixelRatio;var c=this.parseColor(h),m=JSON.stringify(c);if(this.canvases[m]=this.canvases[m]||{},this.canvases[m][f]!=null)return this.canvases[m][f];var w=document.createElement("canvas");f+=f%2,w.width=f,w.height=f;for(var y=w.getContext("2d"),M=y.createImageData(f,f),_=0;_<M.data.length;_+=4)M.data[_]=255,M.data[_+1]=255,M.data[_+2]=255,M.data[_+3]=0;return this.plotCircle(2*f,4*f*(f/2),f/2,M,f,c),this.fillCircle(M,c),y.putImageData(M,0,0),this.canvases[m][f]=w,w}catch(S){console.error(S)}}},{key:"plotCircle",value:function(u,f,h,c,m,w){var y=-h,M=0,_=2-2*h;do{var S=u-4*(y+1)+(f+4*m*(M-1));c.data[S+0]=w.r,c.data[S+1]=w.g,c.data[S+2]=w.b,c.data[S+3]=255;var N=u-M*(4*m)+(f-4*(y+1));c.data[N+0]=w.r,c.data[N+1]=w.g,c.data[N+2]=w.b,c.data[N+3]=255;var B=u+4*y+(f-M*(4*m));c.data[B+0]=w.r,c.data[B+1]=w.g,c.data[B+2]=w.b,c.data[B+3]=255;var q=u+4*m*(M-1)+(f+4*y);c.data[q+0]=w.r,c.data[q+1]=w.g,c.data[q+2]=w.b,c.data[q+3]=255,(h=_)<=M&&(_+=2*++M+1),(h>y||_>M)&&(_+=2*++y+1)}while(y<0)}},{key:"fillCircle",value:function(u,f){for(var h=4*u.width,c=1;c<u.height-1;c+=1)for(var m=!1,w=!1,y=!1,M=0;M<h;M+=4){var _=h*c+M,S=u.data[_+3],N=S===255;N&&!m?m=!0:S===0&&m?w=!0:N&&m&&w&&(y=!0),m&&w&&!y&&(u.data[_]=f.r,u.data[_+1]=f.g,u.data[_+2]=f.b,u.data[_+3]=255)}}}])&&d(v.prototype,x),g}();function b(g,v){for(var x=0;x<v.length;x++){var u=v[x];u.enumerable=u.enumerable||!1,u.configurable=!0,"value"in u&&(u.writable=!0),Object.defineProperty(g,u.key,u)}}var P=function(){function g(u){(function(f,h){if(!(f instanceof h))throw new TypeError("Cannot call a class as a function")})(this,g),this.canvas=u,this.context=u.getContext("2d"),this.stampMaker=new E,this.configPixelRatio()}var v,x;return v=g,(x=[{key:"configPixelRatio",value:function(){var u=this.canvas,f=u.width,h=u.height;this.canvas.width=f*this.dpr,this.canvas.height=h*this.dpr,this.canvas.style.width="".concat(f,"px"),this.canvas.style.height="".concat(h,"px"),this.context.scale(this.dpr,this.dpr),this.context.imageSmoothingEnabled=!1}},{key:"exportAsPNG",value:function(u){var f=this;return new Promise(function(h){var c=document.createElement("canvas"),m=c.getContext("2d"),w=f.canvas,y=w.width,M=w.height,_=y/f.dpr,S=M/f.dpr;c.width=_,c.height=S,m.imageSmoothingEnabled=!1,m.drawImage(f.canvas,0,0,y,M,0,0,_,S),c.toBlob(function(N){N.lastModifedDate=new Date,N.name=u,h(N)})})}},{key:"distanceBetween",value:function(u,f){return Math.sqrt(Math.pow(f.x-u.x,2)+Math.pow(f.y-u.y,2))}},{key:"angleBetween",value:function(u,f){return Math.atan2(f.x-u.x,f.y-u.y)}},{key:"draw",value:function(u){var f=u.from,h=u.to,c=u.size,m=u.color;this.context.globalCompositeOperation="source-over",this.brush({from:f,to:h,size:c,color:m})}},{key:"erase",value:function(u){var f=u.from,h=u.to,c=u.size;this.context.globalCompositeOperation="destination-out",this.brush({from:f,to:h,size:c,color:"#000000"})}},{key:"brush",value:function(u){var f=this,h=u.from,c=u.to,m=u.size,w=u.color,y=(m-m%2)/2,M=this.stampMaker.make({size:m,color:w});if(h.x!==c.x||h.y!==c.y)for(var _=this.distanceBetween(h,c),S=this.angleBetween(h,c),N=function(J){var te=h.x+Math.sin(S)*J-y,X=h.y+Math.cos(S)*J-y;window.requestAnimationFrame(function(){f.context.drawImage(M,Math.round(te),Math.round(X),m,m)})},B=0;B<_;B+=1)N(B);else{var q=h.x-y,$=h.y-y;this.context.drawImage(M,Math.round(q),Math.round($),m,m)}}},{key:"dpr",get:function(){return window.devicePixelRatio||1}}])&&b(v.prototype,x),g}();r.default=P}])})})(it);var We=kt(it.exports);function Et(l){let e,t;return{c(){e=me("svg"),t=me("path"),this.h()},l(r){e=ge(r,"svg",{xmlns:!0,width:!0,viewBox:!0,class:!0});var a=z(e);t=ge(a,"path",{fill:!0,stroke:!0,"stroke-width":!0,d:!0}),z(t).forEach(I),a.forEach(I),this.h()},h(){s(t,"fill","white"),s(t,"stroke","black"),s(t,"stroke-width","30"),s(t,"d","M480 256c0 123.4-100.5 223.9-223.9 223.9c-48.84 0-95.17-15.58-134.2-44.86c-14.12-10.59-16.97-30.66-6.375-44.81c10.59-14.12 30.62-16.94 44.81-6.375c27.84 20.91 61 31.94 95.88 31.94C344.3 415.8 416 344.1 416 256s-71.69-159.8-159.8-159.8c-37.46 0-73.09 13.49-101.3 36.64l45.12 45.14c17.01 17.02 4.955 46.1-19.1 46.1H35.17C24.58 224.1 16 215.5 16 204.9V59.04c0-24.04 29.07-36.08 46.07-19.07l47.6 47.63C149.9 52.71 201.5 32.11 256.1 32.11C379.5 32.11 480 132.6 480 256z"),s(e,"xmlns","http://www.w3.org/2000/svg"),s(e,"width","20"),s(e,"viewBox","0 0 512 512"),s(e,"class",l[0])},m(r,a){Z(r,e,a),p(e,t)},p(r,[a]){a&1&&s(e,"class",r[0])},i:Q,o:Q,d(r){r&&I(e)}}}function It(l,e,t){let{classNames:r=""}=e;return l.$$set=a=>{"classNames"in a&&t(0,r=a.classNames)},[r]}class St extends se{constructor(e){super(),ne(this,e,It,Et,ie,{classNames:0})}}function Pt(l){var f;let e,t,r,a,o,n,d,i=((f=l[0])==null?void 0:f.label)+"",k,E,b,P,g,v,x,u;return P=new St({}),{c(){e=C("div"),t=C("div"),r=C("canvas"),a=A(),o=C("canvas"),n=A(),d=C("span"),k=V(i),E=A(),b=C("button"),ue(P.$$.fragment),this.h()},l(h){e=T(h,"DIV",{});var c=z(e);t=T(c,"DIV",{class:!0});var m=z(t);r=T(m,"CANVAS",{class:!0,width:!0,height:!0}),z(r).forEach(I),a=D(m),o=T(m,"CANVAS",{class:!0,width:!0,height:!0}),z(o).forEach(I),n=D(m),d=T(m,"SPAN",{class:!0});var w=z(d);k=F(w,i),w.forEach(I),E=D(m),b=T(m,"BUTTON",{class:!0});var y=z(b);pe(P.$$.fragment,y),y.forEach(I),m.forEach(I),c.forEach(I),this.h()},h(){s(r,"class","canvas svelte-vhujxn"),s(r,"width","512"),s(r,"height","512"),s(o,"class","brush svelte-vhujxn"),s(o,"width","10"),s(o,"height","10"),s(d,"class","label svelte-vhujxn"),s(b,"class","absolute bottom-0 left-0 p-3"),b.disabled=g=l[3].size<=0,s(t,"class","relative overflow-clip")},m(h,c){Z(h,e,c),p(e,t),p(t,r),l[11](r),p(t,a),p(t,o),l[12](o),p(t,n),p(t,d),p(d,k),p(t,E),p(t,b),de(P,b,null),v=!0,x||(u=[U(r,"touchmove",Ct),U(r,"pointerenter",Mt),U(r,"pointerup",l[4]),U(r,"pointerleave",l[4]),U(r,"pointercancel",l[4]),U(r,"pointerout",l[4]),U(r,"pointermove",l[6]),U(r,"pointerdown",l[5]),U(b,"click",Se(l[13]))],x=!0)},p(h,[c]){var m;(!v||c&1)&&i!==(i=((m=h[0])==null?void 0:m.label)+"")&&Le(k,i),(!v||c&8&&g!==(g=h[3].size<=0))&&(b.disabled=g)},i(h){v||(he(P.$$.fragment,h),v=!0)},o(h){fe(P.$$.fragment,h),v=!1},d(h){h&&I(e),l[11](null),l[12](null),ve(P),x=!1,Ue(u)}}}function Mt(){}function et(l,e){const t=l.getBoundingClientRect();return{x:(e.clientX-t.left)*(l.width/t.width),y:(e.clientY-t.top)*(l.height/t.height)}}function tt(l){l.fillStyle="#46e483",l.fillRect(0,0,l.canvas.width,l.canvas.height)}function ze(l,e){l.drawImage(e,0,0,l.canvas.width,l.canvas.height)}const Ct=l=>l.preventDefault();function Tt(l,e,t){let r,a,o,n;Y(l,_e,_=>t(3,r=_)),Y(l,De,_=>t(10,a=_)),Y(l,xe,_=>t(0,o=_)),Y(l,Ae,_=>t(18,n=_));let d,i,k,E,b={x:0,y:0},P;ut(()=>{t(9,E=d.getContext("2d")),t(8,k=i.getContext("2d")),window.devicePixelRatio=1,P=new We(d),t(1,d.style.height="unset",d),t(1,d.style.width="unset",d),K(Ae,n=d,n),tt(E)});let g=!1,v;function x(){t(2,i.style.top=`${10+o.size/2}px`,i),t(2,i.style.left=`${10+o.size/2}px`,i),g=!1}function u(_){g=!0,b=et(d,_),P.draw({from:b,to:b,size:o.size,color:o.color}),v=_t(),_e.update(S=>(S.set(v,{brush:o,points:[{from:b,to:b}]}),S))}function f(_){const S=et(d,_);t(2,i.style.top=`${_.offsetY}px`,i),t(2,i.style.left=`${_.offsetX}px`,i),g&&(P.draw({from:b,to:S,size:o.size,color:o.color}),_e.update(N=>{const B=N.get(v);return B==null||B.points.push({from:b,to:S}),N}),b=S)}function h(_){const{size:S,color:N}=_;t(2,i.width=S,i),t(2,i.height=S,i),t(8,k.fillStyle=N,k),k.arc(S/2,S/2,S/2,0,2*Math.PI),k.fill()}function c(){if(r.size<=0)return;const _=Array.from(r.keys());_e.update(S=>(S.delete(_[_.length-1]),S)),m(E)}function m(_){const S=document.createElement("canvas");S.width=512,S.height=512,window.devicePixelRatio=1;const N=new We(S);tt(_),a&&ze(_,a),Array.from(r.values()).forEach(B=>{B.points.forEach((q,$)=>{N.draw({from:q.from,to:q.to,size:B.brush.size,color:B.brush.color})})}),requestAnimationFrame(()=>{ze(_,S)})}function w(_){Re[_?"unshift":"push"](()=>{d=_,t(1,d)})}function y(_){Re[_?"unshift":"push"](()=>{i=_,t(2,i),t(8,k),t(0,o)})}const M=()=>c();return l.$$.update=()=>{l.$$.dirty&257&&k&&o&&(h(o),t(2,i.style.top=`${10+o.size/2}px`,i),t(2,i.style.left=`${10+o.size/2}px`,i)),l.$$.dirty&1536&&a&&(ze(E,a),K(_e,r=new Map,r))},[o,d,i,r,x,u,f,c,k,E,a,w,y,M]}class zt extends se{constructor(e){super(),ne(this,e,Tt,Pt,ie,{})}}function rt(l){let e,t,r;return{c(){e=C("img"),this.h()},l(a){e=T(a,"IMG",{class:!0,alt:!0,src:!0,width:!0,height:!0}),this.h()},h(){s(e,"class",t="image "+(l[1]?"opacity-30":"")+" svelte-1t0h0rs"),s(e,"alt","Generative Map Result"),Oe(e.src,r=l[0])||s(e,"src",r),s(e,"width","512"),s(e,"height","512")},m(a,o){Z(a,e,o)},p(a,o){o&2&&t!==(t="image "+(a[1]?"opacity-30":"")+" svelte-1t0h0rs")&&s(e,"class",t),o&1&&!Oe(e.src,r=a[0])&&s(e,"src",r)},d(a){a&&I(e)}}}function lt(l){let e,t,r,a,o,n;return{c(){e=C("div"),t=me("svg"),r=me("path"),a=A(),o=C("span"),n=V(ot),this.h()},l(d){e=T(d,"DIV",{class:!0});var i=z(e);t=ge(i,"svg",{xmlns:!0,fill:!0,viewBox:!0,class:!0});var k=z(t);r=ge(k,"path",{fill:!0,d:!0}),z(r).forEach(I),k.forEach(I),a=D(i),o=T(i,"SPAN",{class:!0});var E=z(o);n=F(E,ot),E.forEach(I),i.forEach(I),this.h()},h(){s(r,"fill","currentColor"),s(r,"d","M20 12a8 8 0 0 1-8 8v4a12 12 0 0 0 12-12h-4Zm-2-5.3a8 8 0 0 1 2 5.3h4c0-3-1.1-5.8-3-8l-3 2.7Z"),s(t,"xmlns","http://www.w3.org/2000/svg"),s(t,"fill","none"),s(t,"viewBox","0 0 24 24"),s(t,"class","animate-spin max-w-[3rem]"),s(o,"class","text-xs"),s(e,"class","loading svelte-1t0h0rs")},m(d,i){Z(d,e,i),p(e,t),p(t,r),p(e,a),p(e,o),p(o,n)},p:Q,d(d){d&&I(e)}}}function Ot(l){let e,t,r=l[0]&&rt(l),a=l[1]&&lt();return{c(){e=C("div"),r&&r.c(),t=A(),a&&a.c(),this.h()},l(o){e=T(o,"DIV",{class:!0});var n=z(e);r&&r.l(n),t=D(n),a&&a.l(n),n.forEach(I),this.h()},h(){s(e,"class","relative overflow-clip flex flex-col justify-center items-center w-full h-full")},m(o,n){Z(o,e,n),r&&r.m(e,null),p(e,t),a&&a.m(e,null)},p(o,[n]){o[0]?r?r.p(o,n):(r=rt(o),r.c(),r.m(e,t)):r&&(r.d(1),r=null),o[1]?a?a.p(o,n):(a=lt(),a.c(),a.m(e,null)):a&&(a.d(1),a=null)},i:Q,o:Q,d(o){o&&I(e),r&&r.d(),a&&a.d()}}}let ot="";async function Rt(l){return new Promise((e,t)=>{try{const r=document.createElement("a");r.download=`sucess-${Date.now()}.png`,r.target="_self",r.onclick=async a=>{r.href&&URL.revokeObjectURL(r.href),r.href=l},requestAnimationFrame(()=>{console.log("Downloading image."),r.click(),e(null)})}catch{t()}})}async function Bt(l,{prompt:e,modifier:t,steps:r,seed:a}){const o=await fetch("/predict",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({data:[l,e+". "+t,r,a.toString()]})});if(!o.ok)throw new Error("Prediction request failed.");return await o.text()}function jt(l,e,t){let r,a,o,n,d;return Y(l,Me,i=>t(2,r=i)),Y(l,je,i=>t(0,a=i)),Y(l,be,i=>t(1,o=i)),Y(l,Ie,i=>t(3,n=i)),Y(l,Ae,i=>t(4,d=i)),l.$$.update=()=>{l.$$.dirty&26&&(async()=>{if(o){const i=await Bt(d.toDataURL(),n);K(je,a=i,a),K(be,o=!1,o)}})(),l.$$.dirty&5&&(async()=>r&&(await Rt(a),K(Me,r=!1,r)))()},[a,o,r,n,d]}class At extends se{constructor(e){super(),ne(this,e,jt,Ot,ie,{})}}function Dt(l){let e,t,r,a,o,n,d,i,k,E,b,P,g,v,x,u,f,h,c,m,w,y,M,_,S,N,B,q,$,J,te,X;return P=new gt({}),x=new zt({}),f=new At({}),B=new ft({}),$=new wt({}),{c(){e=C("div"),t=C("article"),r=C("h1"),a=V("Drawing to Map"),o=A(),n=C("p"),d=V("This space is for the ControlNet model "),i=C("a"),k=C("span"),E=V("Drawing2Map"),b=A(),ue(P.$$.fragment),g=A(),v=C("div"),ue(x.$$.fragment),u=A(),ue(f.$$.fragment),h=A(),c=C("button"),m=V("Generate Map"),y=A(),M=C("button"),_=V("Save Result"),N=A(),ue(B.$$.fragment),q=A(),ue($.$$.fragment),this.h()},l(O){e=T(O,"DIV",{class:!0});var L=z(e);t=T(L,"ARTICLE",{class:!0});var re=z(t);r=T(re,"H1",{});var ee=z(r);a=F(ee,"Drawing to Map"),ee.forEach(I),o=D(re),n=T(re,"P",{});var le=z(n);d=F(le,"This space is for the ControlNet model "),i=T(le,"A",{href:!0,target:!0});var ce=z(i);k=T(ce,"SPAN",{});var ye=z(k);E=F(ye,"Drawing2Map"),ye.forEach(I),ce.forEach(I),le.forEach(I),re.forEach(I),b=D(L),pe(P.$$.fragment,L),g=D(L),v=T(L,"DIV",{class:!0});var W=z(v);pe(x.$$.fragment,W),u=D(W),pe(f.$$.fragment,W),W.forEach(I),h=D(L),c=T(L,"BUTTON",{class:!0});var G=z(c);m=F(G,"Generate Map"),G.forEach(I),y=D(L),M=T(L,"BUTTON",{class:!0});var j=z(M);_=F(j,"Save Result"),j.forEach(I),N=D(L),pe(B.$$.fragment,L),q=D(L),pe($.$$.fragment,L),L.forEach(I),this.h()},h(){s(i,"href","https://github.com/RubenGres/Drawing2Map"),s(i,"target","_blank"),s(t,"class","prose"),s(v,"class","drawings py-3 -mx-3 svelte-1sy339h"),c.disabled=w=l[0]===!0,s(c,"class","green svelte-1sy339h"),M.disabled=S=l[1]===!0||!l[2],s(M,"class","svelte-1sy339h"),s(e,"class","max-w-screen-md mx-auto px-3 py-5 relative z-0")},m(O,L){Z(O,e,L),p(e,t),p(t,r),p(r,a),p(t,o),p(t,n),p(n,d),p(n,i),p(i,k),p(k,E),p(e,b),de(P,e,null),p(e,g),p(e,v),de(x,v,null),p(v,u),de(f,v,null),p(e,h),p(e,c),p(c,m),p(e,y),p(e,M),p(M,_),p(e,N),de(B,e,null),p(e,q),de($,e,null),J=!0,te||(X=[U(c,"click",Se(l[3])),U(M,"click",Se(l[4]))],te=!0)},p(O,[L]){(!J||L&1&&w!==(w=O[0]===!0))&&(c.disabled=w),(!J||L&6&&S!==(S=O[1]===!0||!O[2]))&&(M.disabled=S)},i(O){J||(he(P.$$.fragment,O),he(x.$$.fragment,O),he(f.$$.fragment,O),he(B.$$.fragment,O),he($.$$.fragment,O),J=!0)},o(O){fe(P.$$.fragment,O),fe(x.$$.fragment,O),fe(f.$$.fragment,O),fe(B.$$.fragment,O),fe($.$$.fragment,O),J=!1},d(O){O&&I(e),ve(P),ve(x),ve(f),ve(B),ve($),te=!1,Ue(X)}}}function Nt(l,e,t){let r,a,o;return Y(l,be,i=>t(0,r=i)),Y(l,Me,i=>t(1,a=i)),Y(l,je,i=>t(2,o=i)),[r,a,o,()=>K(be,r=!0,r),()=>K(Me,a=!0,a)]}class Vt extends se{constructor(e){super(),ne(this,e,Nt,Dt,ie,{})}}export{Vt as default};
diff --git a/frontend/build/_app/immutable/start-b4d3a4a1.js b/frontend/.svelte-kit/output/client/_app/immutable/start-1d6beeeb.js
similarity index 99%
rename from frontend/build/_app/immutable/start-b4d3a4a1.js
rename to frontend/.svelte-kit/output/client/_app/immutable/start-1d6beeeb.js
index f165897f4c21568181fa506a1647b8873ec965ce..dcd012ae0238efd15f345c37e96564368e90ec86 100644
--- a/frontend/build/_app/immutable/start-b4d3a4a1.js
+++ b/frontend/.svelte-kit/output/client/_app/immutable/start-1d6beeeb.js
@@ -1 +1 @@
-import{S as Ye,i as Ge,s as Me,e as Fe,c as Xe,a as He,d as D,b as me,f as K,g as V,t as Ze,h as Qe,j as et,k as tt,l as P,m as nt,n as Y,o as C,p as G,q as T,r as st,u as rt,v as ye,w as z,x as ne,y as q,z as se,A as re,B as J,C as ie,D as Ce}from"./chunks/index-bcf2726a.js";import{s as it,w as ce,a as at}from"./chunks/paths-d3bcbd10.js";function ot(s){let e,t,i;const l=[s[1]||{}];var c=s[0][0];function f(n){let r={};for(let a=0;a<l.length;a+=1)r=ie(r,l[a]);return{props:r}}return c&&(e=new c(f())),{c(){e&&z(e.$$.fragment),t=P()},l(n){e&&ne(e.$$.fragment,n),t=P()},m(n,r){e&&q(e,n,r),V(n,t,r),i=!0},p(n,r){const a=r&2?se(l,[re(n[1]||{})]):{};if(c!==(c=n[0][0])){if(e){Y();const d=e;C(d.$$.fragment,1,0,()=>{J(d,1)}),G()}c?(e=new c(f()),z(e.$$.fragment),T(e.$$.fragment,1),q(e,t.parentNode,t)):e=null}else c&&e.$set(a)},i(n){i||(e&&T(e.$$.fragment,n),i=!0)},o(n){e&&C(e.$$.fragment,n),i=!1},d(n){n&&D(t),e&&J(e,n)}}}function ct(s){let e,t,i;const l=[s[1]||{}];var c=s[0][0];function f(n){let r={$$slots:{default:[dt]},$$scope:{ctx:n}};for(let a=0;a<l.length;a+=1)r=ie(r,l[a]);return{props:r}}return c&&(e=new c(f(s))),{c(){e&&z(e.$$.fragment),t=P()},l(n){e&&ne(e.$$.fragment,n),t=P()},m(n,r){e&&q(e,n,r),V(n,t,r),i=!0},p(n,r){const a=r&2?se(l,[re(n[1]||{})]):{};if(r&525&&(a.$$scope={dirty:r,ctx:n}),c!==(c=n[0][0])){if(e){Y();const d=e;C(d.$$.fragment,1,0,()=>{J(d,1)}),G()}c?(e=new c(f(n)),z(e.$$.fragment),T(e.$$.fragment,1),q(e,t.parentNode,t)):e=null}else c&&e.$set(a)},i(n){i||(e&&T(e.$$.fragment,n),i=!0)},o(n){e&&C(e.$$.fragment,n),i=!1},d(n){n&&D(t),e&&J(e,n)}}}function lt(s){let e,t,i;const l=[s[2]||{}];var c=s[0][1];function f(n){let r={};for(let a=0;a<l.length;a+=1)r=ie(r,l[a]);return{props:r}}return c&&(e=new c(f())),{c(){e&&z(e.$$.fragment),t=P()},l(n){e&&ne(e.$$.fragment,n),t=P()},m(n,r){e&&q(e,n,r),V(n,t,r),i=!0},p(n,r){const a=r&4?se(l,[re(n[2]||{})]):{};if(c!==(c=n[0][1])){if(e){Y();const d=e;C(d.$$.fragment,1,0,()=>{J(d,1)}),G()}c?(e=new c(f()),z(e.$$.fragment),T(e.$$.fragment,1),q(e,t.parentNode,t)):e=null}else c&&e.$set(a)},i(n){i||(e&&T(e.$$.fragment,n),i=!0)},o(n){e&&C(e.$$.fragment,n),i=!1},d(n){n&&D(t),e&&J(e,n)}}}function ft(s){let e,t,i;const l=[s[2]||{}];var c=s[0][1];function f(n){let r={$$slots:{default:[ut]},$$scope:{ctx:n}};for(let a=0;a<l.length;a+=1)r=ie(r,l[a]);return{props:r}}return c&&(e=new c(f(s))),{c(){e&&z(e.$$.fragment),t=P()},l(n){e&&ne(e.$$.fragment,n),t=P()},m(n,r){e&&q(e,n,r),V(n,t,r),i=!0},p(n,r){const a=r&4?se(l,[re(n[2]||{})]):{};if(r&521&&(a.$$scope={dirty:r,ctx:n}),c!==(c=n[0][1])){if(e){Y();const d=e;C(d.$$.fragment,1,0,()=>{J(d,1)}),G()}c?(e=new c(f(n)),z(e.$$.fragment),T(e.$$.fragment,1),q(e,t.parentNode,t)):e=null}else c&&e.$set(a)},i(n){i||(e&&T(e.$$.fragment,n),i=!0)},o(n){e&&C(e.$$.fragment,n),i=!1},d(n){n&&D(t),e&&J(e,n)}}}function ut(s){let e,t,i;const l=[s[3]||{}];var c=s[0][2];function f(n){let r={};for(let a=0;a<l.length;a+=1)r=ie(r,l[a]);return{props:r}}return c&&(e=new c(f())),{c(){e&&z(e.$$.fragment),t=P()},l(n){e&&ne(e.$$.fragment,n),t=P()},m(n,r){e&&q(e,n,r),V(n,t,r),i=!0},p(n,r){const a=r&8?se(l,[re(n[3]||{})]):{};if(c!==(c=n[0][2])){if(e){Y();const d=e;C(d.$$.fragment,1,0,()=>{J(d,1)}),G()}c?(e=new c(f()),z(e.$$.fragment),T(e.$$.fragment,1),q(e,t.parentNode,t)):e=null}else c&&e.$set(a)},i(n){i||(e&&T(e.$$.fragment,n),i=!0)},o(n){e&&C(e.$$.fragment,n),i=!1},d(n){n&&D(t),e&&J(e,n)}}}function dt(s){let e,t,i,l;const c=[ft,lt],f=[];function n(r,a){return r[0][2]?0:1}return e=n(s),t=f[e]=c[e](s),{c(){t.c(),i=P()},l(r){t.l(r),i=P()},m(r,a){f[e].m(r,a),V(r,i,a),l=!0},p(r,a){let d=e;e=n(r),e===d?f[e].p(r,a):(Y(),C(f[d],1,1,()=>{f[d]=null}),G(),t=f[e],t?t.p(r,a):(t=f[e]=c[e](r),t.c()),T(t,1),t.m(i.parentNode,i))},i(r){l||(T(t),l=!0)},o(r){C(t),l=!1},d(r){f[e].d(r),r&&D(i)}}}function Te(s){let e,t=s[5]&&je(s);return{c(){e=Fe("div"),t&&t.c(),this.h()},l(i){e=Xe(i,"DIV",{id:!0,"aria-live":!0,"aria-atomic":!0,style:!0});var l=He(e);t&&t.l(l),l.forEach(D),this.h()},h(){me(e,"id","svelte-announcer"),me(e,"aria-live","assertive"),me(e,"aria-atomic","true"),K(e,"position","absolute"),K(e,"left","0"),K(e,"top","0"),K(e,"clip","rect(0 0 0 0)"),K(e,"clip-path","inset(50%)"),K(e,"overflow","hidden"),K(e,"white-space","nowrap"),K(e,"width","1px"),K(e,"height","1px")},m(i,l){V(i,e,l),t&&t.m(e,null)},p(i,l){i[5]?t?t.p(i,l):(t=je(i),t.c(),t.m(e,null)):t&&(t.d(1),t=null)},d(i){i&&D(e),t&&t.d()}}}function je(s){let e;return{c(){e=Ze(s[6])},l(t){e=Qe(t,s[6])},m(t,i){V(t,e,i)},p(t,i){i&64&&et(e,t[6])},d(t){t&&D(e)}}}function pt(s){let e,t,i,l,c;const f=[ct,ot],n=[];function r(d,L){return d[0][1]?0:1}e=r(s),t=n[e]=f[e](s);let a=s[4]&&Te(s);return{c(){t.c(),i=tt(),a&&a.c(),l=P()},l(d){t.l(d),i=nt(d),a&&a.l(d),l=P()},m(d,L){n[e].m(d,L),V(d,i,L),a&&a.m(d,L),V(d,l,L),c=!0},p(d,[L]){let E=e;e=r(d),e===E?n[e].p(d,L):(Y(),C(n[E],1,1,()=>{n[E]=null}),G(),t=n[e],t?t.p(d,L):(t=n[e]=f[e](d),t.c()),T(t,1),t.m(i.parentNode,i)),d[4]?a?a.p(d,L):(a=Te(d),a.c(),a.m(l.parentNode,l)):a&&(a.d(1),a=null)},i(d){c||(T(t),c=!0)},o(d){C(t),c=!1},d(d){n[e].d(d),d&&D(i),a&&a.d(d),d&&D(l)}}}function ht(s,e,t){let{stores:i}=e,{page:l}=e,{components:c}=e,{props_0:f=null}=e,{props_1:n=null}=e,{props_2:r=null}=e;st("__svelte__",i),rt(i.page.notify);let a=!1,d=!1,L=null;return ye(()=>{const E=i.page.subscribe(()=>{a&&(t(5,d=!0),t(6,L=document.title||"untitled page"))});return t(4,a=!0),E}),s.$$set=E=>{"stores"in E&&t(7,i=E.stores),"page"in E&&t(8,l=E.page),"components"in E&&t(0,c=E.components),"props_0"in E&&t(1,f=E.props_0),"props_1"in E&&t(2,n=E.props_1),"props_2"in E&&t(3,r=E.props_2)},s.$$.update=()=>{s.$$.dirty&384&&i.page.set(l)},[c,f,n,r,a,d,L,i,l]}class _t extends Ye{constructor(e){super(),Ge(this,e,ht,pt,Me,{stores:7,page:8,components:0,props_0:1,props_1:2,props_2:3})}}const mt="modulepreload",Ie={},gt="/static/_app/immutable/",ge=function(e,t){return!t||t.length===0?e():Promise.all(t.map(i=>{if(i=`${gt}${i}`,i in Ie)return;Ie[i]=!0;const l=i.endsWith(".css"),c=l?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${i}"]${c}`))return;const f=document.createElement("link");if(f.rel=l?"stylesheet":mt,l||(f.as="script",f.crossOrigin=""),f.href=i,document.head.appendChild(f),l)return new Promise((n,r)=>{f.addEventListener("load",n),f.addEventListener("error",()=>r(new Error(`Unable to preload CSS for ${i}`)))})})).then(()=>e())},wt={},le=[()=>ge(()=>import("./pages/__layout.svelte-f5a1b718.js"),["pages/__layout.svelte-f5a1b718.js","assets/pages/__layout.svelte-b67cf61d.css","chunks/index-bcf2726a.js"]),()=>ge(()=>import("./error.svelte-d9523301.js"),["error.svelte-d9523301.js","chunks/index-bcf2726a.js"]),()=>ge(()=>import("./pages/index.svelte-e78f0615.js"),["pages/index.svelte-e78f0615.js","assets/pages/index.svelte-f2b33456.css","chunks/index-bcf2726a.js","chunks/paths-d3bcbd10.js"])],bt={"":[[0,2],[1]]};function yt(s){s.client}function De(s){return s instanceof Error||s&&s.name&&s.message?s:new Error(JSON.stringify(s))}function Ve(s){if(s.fallthrough)throw new Error("fallthrough is no longer supported. Use matchers instead: https://kit.svelte.dev/docs/routing#advanced-routing-matching");if("maxage"in s)throw new Error("maxage should be replaced with cache: { maxage }");const e=s.status&&s.status>=400&&s.status<=599&&!s.redirect;if(s.error||e){const t=s.status;if(!s.error&&e)return{status:t||500,error:new Error};const i=typeof s.error=="string"?new Error(s.error):s.error;return i instanceof Error?!t||t<400||t>599?(console.warn('"error" returned from load() without a valid status code \u2014 defaulting to 500'),{status:500,error:i}):{status:t,error:i}:{status:500,error:new Error(`"error" property returned from load() must be a string or instance of Error, received type "${typeof i}"`)}}if(s.redirect){if(!s.status||Math.floor(s.status/100)!==3)throw new Error('"redirect" property returned from load() must be accompanied by a 3xx status code');if(typeof s.redirect!="string")throw new Error('"redirect" property returned from load() must be a string')}if(s.dependencies&&(!Array.isArray(s.dependencies)||s.dependencies.some(t=>typeof t!="string")))throw new Error('"dependencies" property returned from load() must be of type string[]');if(s.context)throw new Error('You are returning "context" from a load function. "context" was renamed to "stuff", please adjust your code accordingly.');return s}function vt(s,e){return s==="/"||e==="ignore"?s:e==="never"?s.endsWith("/")?s.slice(0,-1):s:e==="always"&&!s.endsWith("/")?s+"/":s}class $t extends URL{get hash(){throw new Error("url.hash is inaccessible from load. Consider accessing hash from the page store within the script tag of your component.")}}function ze(s){let e=s.baseURI;if(!e){const t=s.getElementsByTagName("base");e=t.length?t[0].href:s.URL}return e}function ve(){return{x:pageXOffset,y:pageYOffset}}function qe(s){return s.composedPath().find(t=>t instanceof Node&&t.nodeName.toUpperCase()==="A")}function Je(s){return s instanceof SVGAElement?new URL(s.href.baseVal,document.baseURI):new URL(s.href)}function Ke(s){const e=ce(s);let t=!0;function i(){t=!0,e.update(f=>f)}function l(f){t=!1,e.set(f)}function c(f){let n;return e.subscribe(r=>{(n===void 0||t&&r!==n)&&f(n=r)})}return{notify:i,set:l,subscribe:c}}function kt(){const{set:s,subscribe:e}=ce(!1),t="1685758204608";let i;async function l(){clearTimeout(i);const f=await fetch(`${at}/_app/version.json`,{headers:{pragma:"no-cache","cache-control":"no-cache"}});if(f.ok){const{version:n}=await f.json(),r=n!==t;return r&&(s(!0),clearTimeout(i)),r}else throw new Error(`Version check failed: ${f.status}`)}return{subscribe:e,check:l}}function Et(s){let e=5381,t=s.length;if(typeof s=="string")for(;t;)e=e*33^s.charCodeAt(--t);else for(;t;)e=e*33^s[--t];return(e>>>0).toString(36)}const $e=window.fetch;function Rt(s,e){let i=`script[sveltekit\\:data-type="data"][sveltekit\\:data-url=${JSON.stringify(typeof s=="string"?s:s.url)}]`;e&&typeof e.body=="string"&&(i+=`[sveltekit\\:data-body="${Et(e.body)}"]`);const l=document.querySelector(i);if(l&&l.textContent){const{body:c,...f}=JSON.parse(l.textContent);return Promise.resolve(new Response(c,f))}return $e(s,e)}const Lt=/^(\.\.\.)?(\w+)(?:=(\w+))?$/;function St(s){const e=[],t=[];let i=!0;return{pattern:s===""?/^\/$/:new RegExp(`^${decodeURIComponent(s).split(/(?:@[a-zA-Z0-9_-]+)?(?:\/|$)/).map((c,f,n)=>{const r=/^\[\.\.\.(\w+)(?:=(\w+))?\]$/.exec(c);if(r)return e.push(r[1]),t.push(r[2]),"(?:/(.*))?";const a=f===n.length-1;return c&&"/"+c.split(/\[(.+?)\]/).map((d,L)=>{if(L%2){const[,E,X,M]=Lt.exec(d);return e.push(X),t.push(M),E?"(.*?)":"([^/]+?)"}return a&&d.includes(".")&&(i=!1),d.normalize().replace(/%5[Bb]/g,"[").replace(/%5[Dd]/g,"]").replace(/#/g,"%23").replace(/\?/g,"%3F").replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}).join("")}).join("")}${i?"/?":""}$`),names:e,types:t}}function Ut(s,e,t,i){const l={};for(let c=0;c<e.length;c+=1){const f=e[c],n=t[c],r=s[c+1]||"";if(n){const a=i[n];if(!a)throw new Error(`Missing "${n}" param matcher`);if(!a(r))return}l[f]=r}return l}function At(s,e,t){return Object.entries(e).map(([l,[c,f,n]])=>{const{pattern:r,names:a,types:d}=St(l);return{id:l,exec:L=>{const E=r.exec(L);if(E)return Ut(E,a,d,t)},a:c.map(L=>s[L]),b:f.map(L=>s[L]),has_shadow:!!n}})}const We="sveltekit:scroll",B="sveltekit:index",we=At(le,bt,wt),Nt=le[0](),Ot=le[1](),Be={};let te={};try{te=JSON.parse(sessionStorage[We])}catch{}function be(s){te[s]=ve()}function xt({target:s,session:e,base:t,trailing_slash:i}){var xe;const l=new Map,c=[],f={url:Ke({}),page:Ke({}),navigating:ce(null),session:ce(e),updated:kt()},n={id:null,promise:null},r={before_navigate:[],after_navigate:[]};let a={branch:[],error:null,session_id:0,stuff:Be,url:null},d=!1,L=!0,E=!1,X=1,M=null,ke,Ee,Re=!1;f.session.subscribe(async o=>{Ee=o,Re&&(X+=1,pe(new URL(location.href),[],!0))}),Re=!0;let F=!0,j=(xe=history.state)==null?void 0:xe[B];j||(j=Date.now(),history.replaceState({...history.state,[B]:j},"",location.href));const fe=te[j];fe&&(history.scrollRestoration="manual",scrollTo(fe.x,fe.y));let ue=!1,de,Le;async function Se(o,{noscroll:p=!1,replaceState:w=!1,keepfocus:u=!1,state:h={}},b){if(typeof o=="string"&&(o=new URL(o,ze(document))),F)return _e({url:o,scroll:p?ve():null,keepfocus:u,redirect_chain:b,details:{state:h,replaceState:w},accepted:()=>{},blocked:()=>{}});await Q(o)}async function Ue(o){const p=Oe(o);if(!p)throw new Error("Attempted to prefetch a URL that does not belong to this app");return n.promise=Ne(p,!1),n.id=p.id,n.promise}async function pe(o,p,w,u,h){var R,S,N;const b=Oe(o),v=Le={};let _=b&&await Ne(b,w);if(!_&&o.origin===location.origin&&o.pathname===location.pathname&&(_=await Z({status:404,error:new Error(`Not found: ${o.pathname}`),url:o,routeId:null})),!_)return await Q(o),!1;if(Le!==v)return!1;if(c.length=0,_.redirect)if(p.length>10||p.includes(o.pathname))_=await Z({status:500,error:new Error("Redirect loop"),url:o,routeId:null});else return F?Se(new URL(_.redirect,o).href,{},[...p,o.pathname]):await Q(new URL(_.redirect,location.href)),!1;else((S=(R=_.props)==null?void 0:R.page)==null?void 0:S.status)>=400&&await f.updated.check()&&await Q(o);if(E=!0,u&&u.details){const{details:$}=u,y=$.replaceState?0:1;$.state[B]=j+=y,history[$.replaceState?"replaceState":"pushState"]($.state,"",o)}if(d?(a=_.state,_.props.page&&(_.props.page.url=o),ke.$set(_.props)):Ae(_),u){const{scroll:$,keepfocus:y}=u;if(!y){const U=document.body,g=U.getAttribute("tabindex");(N=getSelection())==null||N.removeAllRanges(),U.tabIndex=-1,U.focus({preventScroll:!0}),g!==null?U.setAttribute("tabindex",g):U.removeAttribute("tabindex")}if(await Ce(),L){const U=o.hash&&document.getElementById(o.hash.slice(1));$?scrollTo($.x,$.y):U?U.scrollIntoView():scrollTo(0,0)}}else await Ce();n.promise=null,n.id=null,L=!0,_.props.page&&(de=_.props.page);const m=_.state.branch[_.state.branch.length-1];F=(m==null?void 0:m.module.router)!==!1,h&&h(),E=!1}function Ae(o){a=o.state;const p=document.querySelector("style[data-sveltekit]");if(p&&p.remove(),de=o.props.page,ke=new _t({target:s,props:{...o.props,stores:f},hydrate:!0}),F){const w={from:null,to:new URL(location.href)};r.after_navigate.forEach(u=>u(w))}d=!0}async function he({url:o,params:p,stuff:w,branch:u,status:h,error:b,routeId:v}){var y,U;const _=u.filter(Boolean),m=_.find(g=>{var O;return(O=g.loaded)==null?void 0:O.redirect}),R={redirect:(y=m==null?void 0:m.loaded)==null?void 0:y.redirect,state:{url:o,params:p,branch:u,error:b,stuff:w,session_id:X},props:{components:_.map(g=>g.module.default)}};for(let g=0;g<_.length;g+=1){const O=_[g].loaded;R.props[`props_${g}`]=O?await O.props:null}if(!a.url||o.href!==a.url.href||a.error!==b||a.stuff!==w){R.props.page={error:b,params:p,routeId:v,status:h,stuff:w,url:o};const g=(O,k)=>{Object.defineProperty(R.props.page,O,{get:()=>{throw new Error(`$page.${O} has been replaced by $page.url.${k}`)}})};g("origin","origin"),g("path","pathname"),g("query","searchParams")}const N=_[_.length-1],$=(U=N==null?void 0:N.loaded)==null?void 0:U.cache;if($){const g=o.pathname+o.search;let O=!1;const k=()=>{l.get(g)===R&&l.delete(g),x(),clearTimeout(A)},A=setTimeout(k,$.maxage*1e3),x=f.session.subscribe(()=>{O&&k()});O=!0,l.set(g,R)}return R}async function H({status:o,error:p,module:w,url:u,params:h,stuff:b,props:v,routeId:_}){const m={module:w,uses:{params:new Set,url:!1,session:!1,stuff:!1,dependencies:new Set},loaded:null,stuff:b};function R(y){const{href:U}=new URL(y,u);m.uses.dependencies.add(U)}v&&m.uses.dependencies.add(u.href);const S={};for(const y in h)Object.defineProperty(S,y,{get(){return m.uses.params.add(y),h[y]},enumerable:!0});const N=Ee,$=new $t(u);if(w.load){const y={routeId:_,params:S,props:v||{},get url(){return m.uses.url=!0,$},get session(){return m.uses.session=!0,N},get stuff(){return m.uses.stuff=!0,{...b}},async fetch(g,O){let k;typeof g=="string"?k=g:(k=g.url,O={body:g.method==="GET"||g.method==="HEAD"?void 0:await g.blob(),cache:g.cache,credentials:g.credentials,headers:g.headers,integrity:g.integrity,keepalive:g.keepalive,method:g.method,mode:g.mode,redirect:g.redirect,referrer:g.referrer,referrerPolicy:g.referrerPolicy,signal:g.signal,...O});const A=new URL(k,u).href;return R(A),d?$e(A,O):Rt(k,O)},status:o!=null?o:null,error:p!=null?p:null};let U;if(U=await w.load.call(null,y),!U)throw new Error("load function must return a value");m.loaded=Ve(U),m.loaded.stuff&&(m.stuff=m.loaded.stuff),m.loaded.dependencies&&m.loaded.dependencies.forEach(R)}else v&&(m.loaded=Ve({props:v}));return m}async function Ne({id:o,url:p,params:w,route:u},h){var U,g,O;if(n.id===o&&n.promise)return n.promise;if(!h){const k=l.get(o);if(k)return k}const{a:b,b:v,has_shadow:_}=u,m=a.url&&{url:o!==a.url.pathname+a.url.search,params:Object.keys(w).filter(k=>a.params[k]!==w[k]),session:X!==a.session_id};let R=[],S=Be,N=!1,$=200,y=null;b.forEach(k=>k().catch(()=>{}));e:for(let k=0;k<b.length;k+=1){let A;try{if(!b[k])continue;const x=await b[k](),I=a.branch[k];if(!I||x!==I.module||m.url&&I.uses.url||m.params.some(W=>I.uses.params.has(W))||m.session&&I.uses.session||Array.from(I.uses.dependencies).some(W=>c.some(oe=>oe(W)))||N&&I.uses.stuff){let W={};const oe=_&&k===b.length-1;if(oe){const ee=await $e(`${p.pathname}${p.pathname.endsWith("/")?"":"/"}__data.json${p.search}`,{headers:{"x-sveltekit-load":"true"}});if(ee.ok){const Pe=ee.headers.get("x-sveltekit-location");if(Pe)return{redirect:Pe,props:{},state:a};W=ee.status===204?{}:await ee.json()}else $=ee.status,y=new Error("Failed to load data")}if(y||(A=await H({module:x,url:p,params:w,props:W,stuff:S,routeId:u.id})),A&&(oe&&(A.uses.url=!0),A.loaded)){if(A.loaded.error&&($=A.loaded.status,y=A.loaded.error),A.loaded.redirect)return{redirect:A.loaded.redirect,props:{},state:a};A.loaded.stuff&&(N=!0)}}else A=I}catch(x){$=500,y=De(x)}if(y){for(;k--;)if(v[k]){let x,I,ae=k;for(;!(I=R[ae]);)ae-=1;try{if(x=await H({status:$,error:y,module:await v[k](),url:p,params:w,stuff:I.stuff,routeId:u.id}),(U=x==null?void 0:x.loaded)!=null&&U.error)continue;(g=x==null?void 0:x.loaded)!=null&&g.stuff&&(S={...S,...x.loaded.stuff}),R=R.slice(0,ae+1).concat(x);break e}catch{continue}}return await Z({status:$,error:y,url:p,routeId:u.id})}else(O=A==null?void 0:A.loaded)!=null&&O.stuff&&(S={...S,...A.loaded.stuff}),R.push(A)}return await he({url:p,params:w,stuff:S,branch:R,status:$,error:y,routeId:u.id})}async function Z({status:o,error:p,url:w,routeId:u}){var _,m;const h={},b=await H({module:await Nt,url:w,params:h,stuff:{},routeId:u}),v=await H({status:o,error:p,module:await Ot,url:w,params:h,stuff:b&&b.loaded&&b.loaded.stuff||{},routeId:u});return await he({url:w,params:h,stuff:{...(_=b==null?void 0:b.loaded)==null?void 0:_.stuff,...(m=v==null?void 0:v.loaded)==null?void 0:m.stuff},branch:[b,v],status:o,error:p,routeId:u})}function Oe(o){if(o.origin!==location.origin||!o.pathname.startsWith(t))return;const p=decodeURI(o.pathname.slice(t.length)||"/");for(const w of we){const u=w.exec(p);if(u)return{id:o.pathname+o.search,route:w,params:u,url:o}}}async function _e({url:o,scroll:p,keepfocus:w,redirect_chain:u,details:h,accepted:b,blocked:v}){const _=a.url;let m=!1;const R={from:_,to:o,cancel:()=>m=!0};if(r.before_navigate.forEach($=>$(R)),m){v();return}const S=vt(o.pathname,i),N=new URL(o.origin+S+o.search+o.hash);be(j),b(),d&&f.navigating.set({from:a.url,to:N}),await pe(N,u,!1,{scroll:p,keepfocus:w,details:h},()=>{const $={from:_,to:N};r.after_navigate.forEach(y=>y($)),f.navigating.set(null)})}function Q(o){return location.href=o.href,new Promise(()=>{})}return{after_navigate:o=>{ye(()=>(r.after_navigate.push(o),()=>{const p=r.after_navigate.indexOf(o);r.after_navigate.splice(p,1)}))},before_navigate:o=>{ye(()=>(r.before_navigate.push(o),()=>{const p=r.before_navigate.indexOf(o);r.before_navigate.splice(p,1)}))},disable_scroll_handling:()=>{(E||!d)&&(L=!1)},goto:(o,p={})=>Se(o,p,[]),invalidate:o=>{if(typeof o=="function")c.push(o);else{const{href:p}=new URL(o,location.href);c.push(w=>w===p)}return M||(M=Promise.resolve().then(async()=>{await pe(new URL(location.href),[],!0),M=null})),M},prefetch:async o=>{const p=new URL(o,ze(document));await Ue(p)},prefetch_routes:async o=>{const w=(o?we.filter(u=>o.some(h=>u.exec(h))):we).map(u=>Promise.all(u.a.map(h=>h())));await Promise.all(w)},_start_router:()=>{history.scrollRestoration="manual",addEventListener("beforeunload",u=>{let h=!1;const b={from:a.url,to:null,cancel:()=>h=!0};r.before_navigate.forEach(v=>v(b)),h?(u.preventDefault(),u.returnValue=""):history.scrollRestoration="auto"}),addEventListener("visibilitychange",()=>{if(document.visibilityState==="hidden"){be(j);try{sessionStorage[We]=JSON.stringify(te)}catch{}}});const o=u=>{const h=qe(u);h&&h.href&&h.hasAttribute("sveltekit:prefetch")&&Ue(Je(h))};let p;const w=u=>{clearTimeout(p),p=setTimeout(()=>{var h;(h=u.target)==null||h.dispatchEvent(new CustomEvent("sveltekit:trigger_prefetch",{bubbles:!0}))},20)};addEventListener("touchstart",o),addEventListener("mousemove",w),addEventListener("sveltekit:trigger_prefetch",o),addEventListener("click",u=>{if(!F||u.button||u.which!==1||u.metaKey||u.ctrlKey||u.shiftKey||u.altKey||u.defaultPrevented)return;const h=qe(u);if(!h||!h.href)return;const b=h instanceof SVGAElement,v=Je(h);if(!b&&v.origin==="null")return;const _=(h.getAttribute("rel")||"").split(/\s+/);if(h.hasAttribute("download")||_.includes("external")||h.hasAttribute("sveltekit:reload")||(b?h.target.baseVal:h.target))return;const[m,R]=v.href.split("#");if(R!==void 0&&m===location.href.split("#")[0]){ue=!0,be(j),f.page.set({...de,url:v}),f.page.notify();return}_e({url:v,scroll:h.hasAttribute("sveltekit:noscroll")?ve():null,keepfocus:!1,redirect_chain:[],details:{state:{},replaceState:v.href===location.href},accepted:()=>u.preventDefault(),blocked:()=>u.preventDefault()})}),addEventListener("popstate",u=>{if(u.state&&F){if(u.state[B]===j)return;_e({url:new URL(location.href),scroll:te[u.state[B]],keepfocus:!1,redirect_chain:[],details:null,accepted:()=>{j=u.state[B]},blocked:()=>{const h=j-u.state[B];history.go(h)}})}}),addEventListener("hashchange",()=>{ue&&(ue=!1,history.replaceState({...history.state,[B]:++j},"",location.href))})},_hydrate:async({status:o,error:p,nodes:w,params:u,routeId:h})=>{const b=new URL(location.href),v=[];let _={},m,R;try{for(let S=0;S<w.length;S+=1){const N=S===w.length-1;let $;if(N){const U=document.querySelector('script[sveltekit\\:data-type="props"]');U&&($=JSON.parse(U.textContent))}const y=await H({module:await le[w[S]](),url:b,params:u,stuff:_,status:N?o:void 0,error:N?p:void 0,props:$,routeId:h});if($&&(y.uses.dependencies.add(b.href),y.uses.url=!0),v.push(y),y&&y.loaded)if(y.loaded.error){if(p)throw y.loaded.error;R={status:y.loaded.status,error:y.loaded.error,url:b,routeId:h}}else y.loaded.stuff&&(_={..._,...y.loaded.stuff})}m=R?await Z(R):await he({url:b,params:u,stuff:_,branch:v,status:o,error:p,routeId:h})}catch(S){if(p)throw S;m=await Z({status:500,error:De(S),url:b,routeId:h})}m.redirect&&await Q(new URL(m.redirect,location.href)),Ae(m)}}}async function Tt({paths:s,target:e,session:t,route:i,spa:l,trailing_slash:c,hydrate:f}){const n=xt({target:e,session:t,base:s.base,trailing_slash:c});yt({client:n}),it(s),f&&await n._hydrate(f),i&&(l&&n.goto(location.href,{replaceState:!0}),n._start_router()),dispatchEvent(new CustomEvent("sveltekit:start"))}export{Tt as start};
+import{S as Ye,i as Ge,s as Me,e as Fe,c as Xe,a as He,d as D,b as me,f as K,g as V,t as Ze,h as Qe,j as et,k as tt,l as P,m as nt,n as Y,o as C,p as G,q as T,r as st,u as rt,v as ye,w as z,x as ne,y as q,z as se,A as re,B as J,C as ie,D as Ce}from"./chunks/index-bcf2726a.js";import{s as it,w as ce,a as at}from"./chunks/paths-d3bcbd10.js";function ot(s){let e,t,i;const l=[s[1]||{}];var c=s[0][0];function f(n){let r={};for(let a=0;a<l.length;a+=1)r=ie(r,l[a]);return{props:r}}return c&&(e=new c(f())),{c(){e&&z(e.$$.fragment),t=P()},l(n){e&&ne(e.$$.fragment,n),t=P()},m(n,r){e&&q(e,n,r),V(n,t,r),i=!0},p(n,r){const a=r&2?se(l,[re(n[1]||{})]):{};if(c!==(c=n[0][0])){if(e){Y();const d=e;C(d.$$.fragment,1,0,()=>{J(d,1)}),G()}c?(e=new c(f()),z(e.$$.fragment),T(e.$$.fragment,1),q(e,t.parentNode,t)):e=null}else c&&e.$set(a)},i(n){i||(e&&T(e.$$.fragment,n),i=!0)},o(n){e&&C(e.$$.fragment,n),i=!1},d(n){n&&D(t),e&&J(e,n)}}}function ct(s){let e,t,i;const l=[s[1]||{}];var c=s[0][0];function f(n){let r={$$slots:{default:[dt]},$$scope:{ctx:n}};for(let a=0;a<l.length;a+=1)r=ie(r,l[a]);return{props:r}}return c&&(e=new c(f(s))),{c(){e&&z(e.$$.fragment),t=P()},l(n){e&&ne(e.$$.fragment,n),t=P()},m(n,r){e&&q(e,n,r),V(n,t,r),i=!0},p(n,r){const a=r&2?se(l,[re(n[1]||{})]):{};if(r&525&&(a.$$scope={dirty:r,ctx:n}),c!==(c=n[0][0])){if(e){Y();const d=e;C(d.$$.fragment,1,0,()=>{J(d,1)}),G()}c?(e=new c(f(n)),z(e.$$.fragment),T(e.$$.fragment,1),q(e,t.parentNode,t)):e=null}else c&&e.$set(a)},i(n){i||(e&&T(e.$$.fragment,n),i=!0)},o(n){e&&C(e.$$.fragment,n),i=!1},d(n){n&&D(t),e&&J(e,n)}}}function lt(s){let e,t,i;const l=[s[2]||{}];var c=s[0][1];function f(n){let r={};for(let a=0;a<l.length;a+=1)r=ie(r,l[a]);return{props:r}}return c&&(e=new c(f())),{c(){e&&z(e.$$.fragment),t=P()},l(n){e&&ne(e.$$.fragment,n),t=P()},m(n,r){e&&q(e,n,r),V(n,t,r),i=!0},p(n,r){const a=r&4?se(l,[re(n[2]||{})]):{};if(c!==(c=n[0][1])){if(e){Y();const d=e;C(d.$$.fragment,1,0,()=>{J(d,1)}),G()}c?(e=new c(f()),z(e.$$.fragment),T(e.$$.fragment,1),q(e,t.parentNode,t)):e=null}else c&&e.$set(a)},i(n){i||(e&&T(e.$$.fragment,n),i=!0)},o(n){e&&C(e.$$.fragment,n),i=!1},d(n){n&&D(t),e&&J(e,n)}}}function ft(s){let e,t,i;const l=[s[2]||{}];var c=s[0][1];function f(n){let r={$$slots:{default:[ut]},$$scope:{ctx:n}};for(let a=0;a<l.length;a+=1)r=ie(r,l[a]);return{props:r}}return c&&(e=new c(f(s))),{c(){e&&z(e.$$.fragment),t=P()},l(n){e&&ne(e.$$.fragment,n),t=P()},m(n,r){e&&q(e,n,r),V(n,t,r),i=!0},p(n,r){const a=r&4?se(l,[re(n[2]||{})]):{};if(r&521&&(a.$$scope={dirty:r,ctx:n}),c!==(c=n[0][1])){if(e){Y();const d=e;C(d.$$.fragment,1,0,()=>{J(d,1)}),G()}c?(e=new c(f(n)),z(e.$$.fragment),T(e.$$.fragment,1),q(e,t.parentNode,t)):e=null}else c&&e.$set(a)},i(n){i||(e&&T(e.$$.fragment,n),i=!0)},o(n){e&&C(e.$$.fragment,n),i=!1},d(n){n&&D(t),e&&J(e,n)}}}function ut(s){let e,t,i;const l=[s[3]||{}];var c=s[0][2];function f(n){let r={};for(let a=0;a<l.length;a+=1)r=ie(r,l[a]);return{props:r}}return c&&(e=new c(f())),{c(){e&&z(e.$$.fragment),t=P()},l(n){e&&ne(e.$$.fragment,n),t=P()},m(n,r){e&&q(e,n,r),V(n,t,r),i=!0},p(n,r){const a=r&8?se(l,[re(n[3]||{})]):{};if(c!==(c=n[0][2])){if(e){Y();const d=e;C(d.$$.fragment,1,0,()=>{J(d,1)}),G()}c?(e=new c(f()),z(e.$$.fragment),T(e.$$.fragment,1),q(e,t.parentNode,t)):e=null}else c&&e.$set(a)},i(n){i||(e&&T(e.$$.fragment,n),i=!0)},o(n){e&&C(e.$$.fragment,n),i=!1},d(n){n&&D(t),e&&J(e,n)}}}function dt(s){let e,t,i,l;const c=[ft,lt],f=[];function n(r,a){return r[0][2]?0:1}return e=n(s),t=f[e]=c[e](s),{c(){t.c(),i=P()},l(r){t.l(r),i=P()},m(r,a){f[e].m(r,a),V(r,i,a),l=!0},p(r,a){let d=e;e=n(r),e===d?f[e].p(r,a):(Y(),C(f[d],1,1,()=>{f[d]=null}),G(),t=f[e],t?t.p(r,a):(t=f[e]=c[e](r),t.c()),T(t,1),t.m(i.parentNode,i))},i(r){l||(T(t),l=!0)},o(r){C(t),l=!1},d(r){f[e].d(r),r&&D(i)}}}function Te(s){let e,t=s[5]&&je(s);return{c(){e=Fe("div"),t&&t.c(),this.h()},l(i){e=Xe(i,"DIV",{id:!0,"aria-live":!0,"aria-atomic":!0,style:!0});var l=He(e);t&&t.l(l),l.forEach(D),this.h()},h(){me(e,"id","svelte-announcer"),me(e,"aria-live","assertive"),me(e,"aria-atomic","true"),K(e,"position","absolute"),K(e,"left","0"),K(e,"top","0"),K(e,"clip","rect(0 0 0 0)"),K(e,"clip-path","inset(50%)"),K(e,"overflow","hidden"),K(e,"white-space","nowrap"),K(e,"width","1px"),K(e,"height","1px")},m(i,l){V(i,e,l),t&&t.m(e,null)},p(i,l){i[5]?t?t.p(i,l):(t=je(i),t.c(),t.m(e,null)):t&&(t.d(1),t=null)},d(i){i&&D(e),t&&t.d()}}}function je(s){let e;return{c(){e=Ze(s[6])},l(t){e=Qe(t,s[6])},m(t,i){V(t,e,i)},p(t,i){i&64&&et(e,t[6])},d(t){t&&D(e)}}}function pt(s){let e,t,i,l,c;const f=[ct,ot],n=[];function r(d,L){return d[0][1]?0:1}e=r(s),t=n[e]=f[e](s);let a=s[4]&&Te(s);return{c(){t.c(),i=tt(),a&&a.c(),l=P()},l(d){t.l(d),i=nt(d),a&&a.l(d),l=P()},m(d,L){n[e].m(d,L),V(d,i,L),a&&a.m(d,L),V(d,l,L),c=!0},p(d,[L]){let E=e;e=r(d),e===E?n[e].p(d,L):(Y(),C(n[E],1,1,()=>{n[E]=null}),G(),t=n[e],t?t.p(d,L):(t=n[e]=f[e](d),t.c()),T(t,1),t.m(i.parentNode,i)),d[4]?a?a.p(d,L):(a=Te(d),a.c(),a.m(l.parentNode,l)):a&&(a.d(1),a=null)},i(d){c||(T(t),c=!0)},o(d){C(t),c=!1},d(d){n[e].d(d),d&&D(i),a&&a.d(d),d&&D(l)}}}function ht(s,e,t){let{stores:i}=e,{page:l}=e,{components:c}=e,{props_0:f=null}=e,{props_1:n=null}=e,{props_2:r=null}=e;st("__svelte__",i),rt(i.page.notify);let a=!1,d=!1,L=null;return ye(()=>{const E=i.page.subscribe(()=>{a&&(t(5,d=!0),t(6,L=document.title||"untitled page"))});return t(4,a=!0),E}),s.$$set=E=>{"stores"in E&&t(7,i=E.stores),"page"in E&&t(8,l=E.page),"components"in E&&t(0,c=E.components),"props_0"in E&&t(1,f=E.props_0),"props_1"in E&&t(2,n=E.props_1),"props_2"in E&&t(3,r=E.props_2)},s.$$.update=()=>{s.$$.dirty&384&&i.page.set(l)},[c,f,n,r,a,d,L,i,l]}class _t extends Ye{constructor(e){super(),Ge(this,e,ht,pt,Me,{stores:7,page:8,components:0,props_0:1,props_1:2,props_2:3})}}const mt="modulepreload",Ie={},gt="/static/_app/immutable/",ge=function(e,t){return!t||t.length===0?e():Promise.all(t.map(i=>{if(i=`${gt}${i}`,i in Ie)return;Ie[i]=!0;const l=i.endsWith(".css"),c=l?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${i}"]${c}`))return;const f=document.createElement("link");if(f.rel=l?"stylesheet":mt,l||(f.as="script",f.crossOrigin=""),f.href=i,document.head.appendChild(f),l)return new Promise((n,r)=>{f.addEventListener("load",n),f.addEventListener("error",()=>r(new Error(`Unable to preload CSS for ${i}`)))})})).then(()=>e())},wt={},le=[()=>ge(()=>import("./pages/__layout.svelte-f5a1b718.js"),["pages/__layout.svelte-f5a1b718.js","assets/pages/__layout.svelte-b67cf61d.css","chunks/index-bcf2726a.js"]),()=>ge(()=>import("./error.svelte-d9523301.js"),["error.svelte-d9523301.js","chunks/index-bcf2726a.js"]),()=>ge(()=>import("./pages/index.svelte-1f940fb6.js"),["pages/index.svelte-1f940fb6.js","assets/pages/index.svelte-f2b33456.css","chunks/index-bcf2726a.js","chunks/paths-d3bcbd10.js"])],bt={"":[[0,2],[1]]};function yt(s){s.client}function De(s){return s instanceof Error||s&&s.name&&s.message?s:new Error(JSON.stringify(s))}function Ve(s){if(s.fallthrough)throw new Error("fallthrough is no longer supported. Use matchers instead: https://kit.svelte.dev/docs/routing#advanced-routing-matching");if("maxage"in s)throw new Error("maxage should be replaced with cache: { maxage }");const e=s.status&&s.status>=400&&s.status<=599&&!s.redirect;if(s.error||e){const t=s.status;if(!s.error&&e)return{status:t||500,error:new Error};const i=typeof s.error=="string"?new Error(s.error):s.error;return i instanceof Error?!t||t<400||t>599?(console.warn('"error" returned from load() without a valid status code \u2014 defaulting to 500'),{status:500,error:i}):{status:t,error:i}:{status:500,error:new Error(`"error" property returned from load() must be a string or instance of Error, received type "${typeof i}"`)}}if(s.redirect){if(!s.status||Math.floor(s.status/100)!==3)throw new Error('"redirect" property returned from load() must be accompanied by a 3xx status code');if(typeof s.redirect!="string")throw new Error('"redirect" property returned from load() must be a string')}if(s.dependencies&&(!Array.isArray(s.dependencies)||s.dependencies.some(t=>typeof t!="string")))throw new Error('"dependencies" property returned from load() must be of type string[]');if(s.context)throw new Error('You are returning "context" from a load function. "context" was renamed to "stuff", please adjust your code accordingly.');return s}function vt(s,e){return s==="/"||e==="ignore"?s:e==="never"?s.endsWith("/")?s.slice(0,-1):s:e==="always"&&!s.endsWith("/")?s+"/":s}class $t extends URL{get hash(){throw new Error("url.hash is inaccessible from load. Consider accessing hash from the page store within the script tag of your component.")}}function ze(s){let e=s.baseURI;if(!e){const t=s.getElementsByTagName("base");e=t.length?t[0].href:s.URL}return e}function ve(){return{x:pageXOffset,y:pageYOffset}}function qe(s){return s.composedPath().find(t=>t instanceof Node&&t.nodeName.toUpperCase()==="A")}function Je(s){return s instanceof SVGAElement?new URL(s.href.baseVal,document.baseURI):new URL(s.href)}function Ke(s){const e=ce(s);let t=!0;function i(){t=!0,e.update(f=>f)}function l(f){t=!1,e.set(f)}function c(f){let n;return e.subscribe(r=>{(n===void 0||t&&r!==n)&&f(n=r)})}return{notify:i,set:l,subscribe:c}}function kt(){const{set:s,subscribe:e}=ce(!1),t="1685809076710";let i;async function l(){clearTimeout(i);const f=await fetch(`${at}/_app/version.json`,{headers:{pragma:"no-cache","cache-control":"no-cache"}});if(f.ok){const{version:n}=await f.json(),r=n!==t;return r&&(s(!0),clearTimeout(i)),r}else throw new Error(`Version check failed: ${f.status}`)}return{subscribe:e,check:l}}function Et(s){let e=5381,t=s.length;if(typeof s=="string")for(;t;)e=e*33^s.charCodeAt(--t);else for(;t;)e=e*33^s[--t];return(e>>>0).toString(36)}const $e=window.fetch;function Rt(s,e){let i=`script[sveltekit\\:data-type="data"][sveltekit\\:data-url=${JSON.stringify(typeof s=="string"?s:s.url)}]`;e&&typeof e.body=="string"&&(i+=`[sveltekit\\:data-body="${Et(e.body)}"]`);const l=document.querySelector(i);if(l&&l.textContent){const{body:c,...f}=JSON.parse(l.textContent);return Promise.resolve(new Response(c,f))}return $e(s,e)}const Lt=/^(\.\.\.)?(\w+)(?:=(\w+))?$/;function St(s){const e=[],t=[];let i=!0;return{pattern:s===""?/^\/$/:new RegExp(`^${decodeURIComponent(s).split(/(?:@[a-zA-Z0-9_-]+)?(?:\/|$)/).map((c,f,n)=>{const r=/^\[\.\.\.(\w+)(?:=(\w+))?\]$/.exec(c);if(r)return e.push(r[1]),t.push(r[2]),"(?:/(.*))?";const a=f===n.length-1;return c&&"/"+c.split(/\[(.+?)\]/).map((d,L)=>{if(L%2){const[,E,X,M]=Lt.exec(d);return e.push(X),t.push(M),E?"(.*?)":"([^/]+?)"}return a&&d.includes(".")&&(i=!1),d.normalize().replace(/%5[Bb]/g,"[").replace(/%5[Dd]/g,"]").replace(/#/g,"%23").replace(/\?/g,"%3F").replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}).join("")}).join("")}${i?"/?":""}$`),names:e,types:t}}function Ut(s,e,t,i){const l={};for(let c=0;c<e.length;c+=1){const f=e[c],n=t[c],r=s[c+1]||"";if(n){const a=i[n];if(!a)throw new Error(`Missing "${n}" param matcher`);if(!a(r))return}l[f]=r}return l}function At(s,e,t){return Object.entries(e).map(([l,[c,f,n]])=>{const{pattern:r,names:a,types:d}=St(l);return{id:l,exec:L=>{const E=r.exec(L);if(E)return Ut(E,a,d,t)},a:c.map(L=>s[L]),b:f.map(L=>s[L]),has_shadow:!!n}})}const We="sveltekit:scroll",B="sveltekit:index",we=At(le,bt,wt),Nt=le[0](),Ot=le[1](),Be={};let te={};try{te=JSON.parse(sessionStorage[We])}catch{}function be(s){te[s]=ve()}function xt({target:s,session:e,base:t,trailing_slash:i}){var xe;const l=new Map,c=[],f={url:Ke({}),page:Ke({}),navigating:ce(null),session:ce(e),updated:kt()},n={id:null,promise:null},r={before_navigate:[],after_navigate:[]};let a={branch:[],error:null,session_id:0,stuff:Be,url:null},d=!1,L=!0,E=!1,X=1,M=null,ke,Ee,Re=!1;f.session.subscribe(async o=>{Ee=o,Re&&(X+=1,pe(new URL(location.href),[],!0))}),Re=!0;let F=!0,j=(xe=history.state)==null?void 0:xe[B];j||(j=Date.now(),history.replaceState({...history.state,[B]:j},"",location.href));const fe=te[j];fe&&(history.scrollRestoration="manual",scrollTo(fe.x,fe.y));let ue=!1,de,Le;async function Se(o,{noscroll:p=!1,replaceState:w=!1,keepfocus:u=!1,state:h={}},b){if(typeof o=="string"&&(o=new URL(o,ze(document))),F)return _e({url:o,scroll:p?ve():null,keepfocus:u,redirect_chain:b,details:{state:h,replaceState:w},accepted:()=>{},blocked:()=>{}});await Q(o)}async function Ue(o){const p=Oe(o);if(!p)throw new Error("Attempted to prefetch a URL that does not belong to this app");return n.promise=Ne(p,!1),n.id=p.id,n.promise}async function pe(o,p,w,u,h){var R,S,N;const b=Oe(o),v=Le={};let _=b&&await Ne(b,w);if(!_&&o.origin===location.origin&&o.pathname===location.pathname&&(_=await Z({status:404,error:new Error(`Not found: ${o.pathname}`),url:o,routeId:null})),!_)return await Q(o),!1;if(Le!==v)return!1;if(c.length=0,_.redirect)if(p.length>10||p.includes(o.pathname))_=await Z({status:500,error:new Error("Redirect loop"),url:o,routeId:null});else return F?Se(new URL(_.redirect,o).href,{},[...p,o.pathname]):await Q(new URL(_.redirect,location.href)),!1;else((S=(R=_.props)==null?void 0:R.page)==null?void 0:S.status)>=400&&await f.updated.check()&&await Q(o);if(E=!0,u&&u.details){const{details:$}=u,y=$.replaceState?0:1;$.state[B]=j+=y,history[$.replaceState?"replaceState":"pushState"]($.state,"",o)}if(d?(a=_.state,_.props.page&&(_.props.page.url=o),ke.$set(_.props)):Ae(_),u){const{scroll:$,keepfocus:y}=u;if(!y){const U=document.body,g=U.getAttribute("tabindex");(N=getSelection())==null||N.removeAllRanges(),U.tabIndex=-1,U.focus({preventScroll:!0}),g!==null?U.setAttribute("tabindex",g):U.removeAttribute("tabindex")}if(await Ce(),L){const U=o.hash&&document.getElementById(o.hash.slice(1));$?scrollTo($.x,$.y):U?U.scrollIntoView():scrollTo(0,0)}}else await Ce();n.promise=null,n.id=null,L=!0,_.props.page&&(de=_.props.page);const m=_.state.branch[_.state.branch.length-1];F=(m==null?void 0:m.module.router)!==!1,h&&h(),E=!1}function Ae(o){a=o.state;const p=document.querySelector("style[data-sveltekit]");if(p&&p.remove(),de=o.props.page,ke=new _t({target:s,props:{...o.props,stores:f},hydrate:!0}),F){const w={from:null,to:new URL(location.href)};r.after_navigate.forEach(u=>u(w))}d=!0}async function he({url:o,params:p,stuff:w,branch:u,status:h,error:b,routeId:v}){var y,U;const _=u.filter(Boolean),m=_.find(g=>{var O;return(O=g.loaded)==null?void 0:O.redirect}),R={redirect:(y=m==null?void 0:m.loaded)==null?void 0:y.redirect,state:{url:o,params:p,branch:u,error:b,stuff:w,session_id:X},props:{components:_.map(g=>g.module.default)}};for(let g=0;g<_.length;g+=1){const O=_[g].loaded;R.props[`props_${g}`]=O?await O.props:null}if(!a.url||o.href!==a.url.href||a.error!==b||a.stuff!==w){R.props.page={error:b,params:p,routeId:v,status:h,stuff:w,url:o};const g=(O,k)=>{Object.defineProperty(R.props.page,O,{get:()=>{throw new Error(`$page.${O} has been replaced by $page.url.${k}`)}})};g("origin","origin"),g("path","pathname"),g("query","searchParams")}const N=_[_.length-1],$=(U=N==null?void 0:N.loaded)==null?void 0:U.cache;if($){const g=o.pathname+o.search;let O=!1;const k=()=>{l.get(g)===R&&l.delete(g),x(),clearTimeout(A)},A=setTimeout(k,$.maxage*1e3),x=f.session.subscribe(()=>{O&&k()});O=!0,l.set(g,R)}return R}async function H({status:o,error:p,module:w,url:u,params:h,stuff:b,props:v,routeId:_}){const m={module:w,uses:{params:new Set,url:!1,session:!1,stuff:!1,dependencies:new Set},loaded:null,stuff:b};function R(y){const{href:U}=new URL(y,u);m.uses.dependencies.add(U)}v&&m.uses.dependencies.add(u.href);const S={};for(const y in h)Object.defineProperty(S,y,{get(){return m.uses.params.add(y),h[y]},enumerable:!0});const N=Ee,$=new $t(u);if(w.load){const y={routeId:_,params:S,props:v||{},get url(){return m.uses.url=!0,$},get session(){return m.uses.session=!0,N},get stuff(){return m.uses.stuff=!0,{...b}},async fetch(g,O){let k;typeof g=="string"?k=g:(k=g.url,O={body:g.method==="GET"||g.method==="HEAD"?void 0:await g.blob(),cache:g.cache,credentials:g.credentials,headers:g.headers,integrity:g.integrity,keepalive:g.keepalive,method:g.method,mode:g.mode,redirect:g.redirect,referrer:g.referrer,referrerPolicy:g.referrerPolicy,signal:g.signal,...O});const A=new URL(k,u).href;return R(A),d?$e(A,O):Rt(k,O)},status:o!=null?o:null,error:p!=null?p:null};let U;if(U=await w.load.call(null,y),!U)throw new Error("load function must return a value");m.loaded=Ve(U),m.loaded.stuff&&(m.stuff=m.loaded.stuff),m.loaded.dependencies&&m.loaded.dependencies.forEach(R)}else v&&(m.loaded=Ve({props:v}));return m}async function Ne({id:o,url:p,params:w,route:u},h){var U,g,O;if(n.id===o&&n.promise)return n.promise;if(!h){const k=l.get(o);if(k)return k}const{a:b,b:v,has_shadow:_}=u,m=a.url&&{url:o!==a.url.pathname+a.url.search,params:Object.keys(w).filter(k=>a.params[k]!==w[k]),session:X!==a.session_id};let R=[],S=Be,N=!1,$=200,y=null;b.forEach(k=>k().catch(()=>{}));e:for(let k=0;k<b.length;k+=1){let A;try{if(!b[k])continue;const x=await b[k](),I=a.branch[k];if(!I||x!==I.module||m.url&&I.uses.url||m.params.some(W=>I.uses.params.has(W))||m.session&&I.uses.session||Array.from(I.uses.dependencies).some(W=>c.some(oe=>oe(W)))||N&&I.uses.stuff){let W={};const oe=_&&k===b.length-1;if(oe){const ee=await $e(`${p.pathname}${p.pathname.endsWith("/")?"":"/"}__data.json${p.search}`,{headers:{"x-sveltekit-load":"true"}});if(ee.ok){const Pe=ee.headers.get("x-sveltekit-location");if(Pe)return{redirect:Pe,props:{},state:a};W=ee.status===204?{}:await ee.json()}else $=ee.status,y=new Error("Failed to load data")}if(y||(A=await H({module:x,url:p,params:w,props:W,stuff:S,routeId:u.id})),A&&(oe&&(A.uses.url=!0),A.loaded)){if(A.loaded.error&&($=A.loaded.status,y=A.loaded.error),A.loaded.redirect)return{redirect:A.loaded.redirect,props:{},state:a};A.loaded.stuff&&(N=!0)}}else A=I}catch(x){$=500,y=De(x)}if(y){for(;k--;)if(v[k]){let x,I,ae=k;for(;!(I=R[ae]);)ae-=1;try{if(x=await H({status:$,error:y,module:await v[k](),url:p,params:w,stuff:I.stuff,routeId:u.id}),(U=x==null?void 0:x.loaded)!=null&&U.error)continue;(g=x==null?void 0:x.loaded)!=null&&g.stuff&&(S={...S,...x.loaded.stuff}),R=R.slice(0,ae+1).concat(x);break e}catch{continue}}return await Z({status:$,error:y,url:p,routeId:u.id})}else(O=A==null?void 0:A.loaded)!=null&&O.stuff&&(S={...S,...A.loaded.stuff}),R.push(A)}return await he({url:p,params:w,stuff:S,branch:R,status:$,error:y,routeId:u.id})}async function Z({status:o,error:p,url:w,routeId:u}){var _,m;const h={},b=await H({module:await Nt,url:w,params:h,stuff:{},routeId:u}),v=await H({status:o,error:p,module:await Ot,url:w,params:h,stuff:b&&b.loaded&&b.loaded.stuff||{},routeId:u});return await he({url:w,params:h,stuff:{...(_=b==null?void 0:b.loaded)==null?void 0:_.stuff,...(m=v==null?void 0:v.loaded)==null?void 0:m.stuff},branch:[b,v],status:o,error:p,routeId:u})}function Oe(o){if(o.origin!==location.origin||!o.pathname.startsWith(t))return;const p=decodeURI(o.pathname.slice(t.length)||"/");for(const w of we){const u=w.exec(p);if(u)return{id:o.pathname+o.search,route:w,params:u,url:o}}}async function _e({url:o,scroll:p,keepfocus:w,redirect_chain:u,details:h,accepted:b,blocked:v}){const _=a.url;let m=!1;const R={from:_,to:o,cancel:()=>m=!0};if(r.before_navigate.forEach($=>$(R)),m){v();return}const S=vt(o.pathname,i),N=new URL(o.origin+S+o.search+o.hash);be(j),b(),d&&f.navigating.set({from:a.url,to:N}),await pe(N,u,!1,{scroll:p,keepfocus:w,details:h},()=>{const $={from:_,to:N};r.after_navigate.forEach(y=>y($)),f.navigating.set(null)})}function Q(o){return location.href=o.href,new Promise(()=>{})}return{after_navigate:o=>{ye(()=>(r.after_navigate.push(o),()=>{const p=r.after_navigate.indexOf(o);r.after_navigate.splice(p,1)}))},before_navigate:o=>{ye(()=>(r.before_navigate.push(o),()=>{const p=r.before_navigate.indexOf(o);r.before_navigate.splice(p,1)}))},disable_scroll_handling:()=>{(E||!d)&&(L=!1)},goto:(o,p={})=>Se(o,p,[]),invalidate:o=>{if(typeof o=="function")c.push(o);else{const{href:p}=new URL(o,location.href);c.push(w=>w===p)}return M||(M=Promise.resolve().then(async()=>{await pe(new URL(location.href),[],!0),M=null})),M},prefetch:async o=>{const p=new URL(o,ze(document));await Ue(p)},prefetch_routes:async o=>{const w=(o?we.filter(u=>o.some(h=>u.exec(h))):we).map(u=>Promise.all(u.a.map(h=>h())));await Promise.all(w)},_start_router:()=>{history.scrollRestoration="manual",addEventListener("beforeunload",u=>{let h=!1;const b={from:a.url,to:null,cancel:()=>h=!0};r.before_navigate.forEach(v=>v(b)),h?(u.preventDefault(),u.returnValue=""):history.scrollRestoration="auto"}),addEventListener("visibilitychange",()=>{if(document.visibilityState==="hidden"){be(j);try{sessionStorage[We]=JSON.stringify(te)}catch{}}});const o=u=>{const h=qe(u);h&&h.href&&h.hasAttribute("sveltekit:prefetch")&&Ue(Je(h))};let p;const w=u=>{clearTimeout(p),p=setTimeout(()=>{var h;(h=u.target)==null||h.dispatchEvent(new CustomEvent("sveltekit:trigger_prefetch",{bubbles:!0}))},20)};addEventListener("touchstart",o),addEventListener("mousemove",w),addEventListener("sveltekit:trigger_prefetch",o),addEventListener("click",u=>{if(!F||u.button||u.which!==1||u.metaKey||u.ctrlKey||u.shiftKey||u.altKey||u.defaultPrevented)return;const h=qe(u);if(!h||!h.href)return;const b=h instanceof SVGAElement,v=Je(h);if(!b&&v.origin==="null")return;const _=(h.getAttribute("rel")||"").split(/\s+/);if(h.hasAttribute("download")||_.includes("external")||h.hasAttribute("sveltekit:reload")||(b?h.target.baseVal:h.target))return;const[m,R]=v.href.split("#");if(R!==void 0&&m===location.href.split("#")[0]){ue=!0,be(j),f.page.set({...de,url:v}),f.page.notify();return}_e({url:v,scroll:h.hasAttribute("sveltekit:noscroll")?ve():null,keepfocus:!1,redirect_chain:[],details:{state:{},replaceState:v.href===location.href},accepted:()=>u.preventDefault(),blocked:()=>u.preventDefault()})}),addEventListener("popstate",u=>{if(u.state&&F){if(u.state[B]===j)return;_e({url:new URL(location.href),scroll:te[u.state[B]],keepfocus:!1,redirect_chain:[],details:null,accepted:()=>{j=u.state[B]},blocked:()=>{const h=j-u.state[B];history.go(h)}})}}),addEventListener("hashchange",()=>{ue&&(ue=!1,history.replaceState({...history.state,[B]:++j},"",location.href))})},_hydrate:async({status:o,error:p,nodes:w,params:u,routeId:h})=>{const b=new URL(location.href),v=[];let _={},m,R;try{for(let S=0;S<w.length;S+=1){const N=S===w.length-1;let $;if(N){const U=document.querySelector('script[sveltekit\\:data-type="props"]');U&&($=JSON.parse(U.textContent))}const y=await H({module:await le[w[S]](),url:b,params:u,stuff:_,status:N?o:void 0,error:N?p:void 0,props:$,routeId:h});if($&&(y.uses.dependencies.add(b.href),y.uses.url=!0),v.push(y),y&&y.loaded)if(y.loaded.error){if(p)throw y.loaded.error;R={status:y.loaded.status,error:y.loaded.error,url:b,routeId:h}}else y.loaded.stuff&&(_={..._,...y.loaded.stuff})}m=R?await Z(R):await he({url:b,params:u,stuff:_,branch:v,status:o,error:p,routeId:h})}catch(S){if(p)throw S;m=await Z({status:500,error:De(S),url:b,routeId:h})}m.redirect&&await Q(new URL(m.redirect,location.href)),Ae(m)}}}async function Tt({paths:s,target:e,session:t,route:i,spa:l,trailing_slash:c,hydrate:f}){const n=xt({target:e,session:t,base:s.base,trailing_slash:c});yt({client:n}),it(s),f&&await n._hydrate(f),i&&(l&&n.goto(location.href,{replaceState:!0}),n._start_router()),dispatchEvent(new CustomEvent("sveltekit:start"))}export{Tt as start};
diff --git a/frontend/.svelte-kit/output/client/_app/version.json b/frontend/.svelte-kit/output/client/_app/version.json
new file mode 100644
index 0000000000000000000000000000000000000000..9628b89623cf35cfd9037564c255ffc0d64cfd70
--- /dev/null
+++ b/frontend/.svelte-kit/output/client/_app/version.json
@@ -0,0 +1 @@
+{"version":"1685809076710"}
\ No newline at end of file
diff --git a/frontend/.svelte-kit/output/prerendered/fallback.html b/frontend/.svelte-kit/output/prerendered/fallback.html
new file mode 100644
index 0000000000000000000000000000000000000000..1f324c58561089aa0c8bd4cc2d1c6c1c1721842a
--- /dev/null
+++ b/frontend/.svelte-kit/output/prerendered/fallback.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<html lang="en">
+	<head>
+		<meta charset="utf-8" />
+		<link rel="icon" href="/static/favicon.png" />
+		<meta name="viewport" content="width=device-width, initial-scale=1" />
+		<script src="https://cdnjs.cloudflare.com/ajax/libs/iframe-resizer/4.3.1/iframeResizer.contentWindow.min.js"></script>
+		<meta http-equiv="content-security-policy" content="">
+	<link rel="modulepreload" href="/static/_app/immutable/start-1d6beeeb.js">
+	<link rel="modulepreload" href="/static/_app/immutable/chunks/index-bcf2726a.js">
+	<link rel="modulepreload" href="/static/_app/immutable/chunks/paths-d3bcbd10.js">
+	</head>
+	<body class="">
+		
+		<script type="module" data-sveltekit-hydrate="45h">
+		import { start } from "/static/_app/immutable/start-1d6beeeb.js";
+		start({
+			target: document.querySelector('[data-sveltekit-hydrate="45h"]').parentNode,
+			paths: {"base":"/static","assets":"/static"},
+			session: {},
+			route: true,
+			spa: true,
+			trailing_slash: "never",
+			hydrate: null
+		});
+	</script>
+	</body>	
+</html>
diff --git a/frontend/.svelte-kit/output/prerendered/pages/index.html b/frontend/.svelte-kit/output/prerendered/pages/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..9b731799bc677509f03b9466bae29e1d0016eefa
--- /dev/null
+++ b/frontend/.svelte-kit/output/prerendered/pages/index.html
@@ -0,0 +1,152 @@
+<!DOCTYPE html>
+<html lang="en">
+	<head>
+		<meta charset="utf-8" />
+		<link rel="icon" href="/static/favicon.png" />
+		<meta name="viewport" content="width=device-width, initial-scale=1" />
+		<script src="https://cdnjs.cloudflare.com/ajax/libs/iframe-resizer/4.3.1/iframeResizer.contentWindow.min.js"></script>
+		<meta http-equiv="content-security-policy" content="">
+	<link rel="stylesheet" href="/static/_app/immutable/assets/pages/__layout.svelte-b67cf61d.css">
+	<link rel="stylesheet" href="/static/_app/immutable/assets/pages/index.svelte-f2b33456.css">
+	<link rel="modulepreload" href="/static/_app/immutable/start-1d6beeeb.js">
+	<link rel="modulepreload" href="/static/_app/immutable/chunks/index-bcf2726a.js">
+	<link rel="modulepreload" href="/static/_app/immutable/chunks/paths-d3bcbd10.js">
+	<link rel="modulepreload" href="/static/_app/immutable/pages/__layout.svelte-f5a1b718.js">
+	<link rel="modulepreload" href="/static/_app/immutable/pages/index.svelte-1f940fb6.js">
+	</head>
+	<body class="">
+		
+
+
+<div class="max-w-screen-md mx-auto px-3 py-5 relative z-0"><article class="prose"><h1>Drawing to Map</h1>
+		<p>This space is for the ControlNet model <a href="https://github.com/RubenGres/Drawing2Map" target="_blank"><span>Drawing2Map</span></a></p></article>
+
+
+	<form><h4 class="font-bold mt-6 mb-2 leading-6 my-3">Brush Type</h4>
+	<div class="colors svelte-1oy4poo" name="colors"><div class="snap-always snap-start"><input name="color"  type="radio" id="color-0" value="0" class="svelte-1oy4poo">
+				<label for="color-0" class="svelte-1oy4poo"><svg width="20" height="20" viewBox="0 0 20 20" class="svelte-1oy4poo"><rect x="0" y="0" width="20" height="20" fill="rgb(219,14,154)"></rect></svg>
+					<span class="svelte-1oy4poo">building</span></label>
+			</div><div class="snap-always snap-start"><input name="color"  type="radio" id="color-1" value="1" class="svelte-1oy4poo">
+				<label for="color-1" class="svelte-1oy4poo"><svg width="20" height="20" viewBox="0 0 20 20" class="svelte-1oy4poo"><rect x="0" y="0" width="20" height="20" fill="rgb(147,142,123)"></rect></svg>
+					<span class="svelte-1oy4poo">pervious surface</span></label>
+			</div><div class="snap-always snap-start"><input name="color"  type="radio" id="color-2" value="2" class="svelte-1oy4poo">
+				<label for="color-2" class="svelte-1oy4poo"><svg width="20" height="20" viewBox="0 0 20 20" class="svelte-1oy4poo"><rect x="0" y="0" width="20" height="20" fill="rgb(248,12,0)"></rect></svg>
+					<span class="svelte-1oy4poo">impervious surface</span></label>
+			</div><div class="snap-always snap-start"><input name="color"  type="radio" id="color-3" value="3" class="svelte-1oy4poo">
+				<label for="color-3" class="svelte-1oy4poo"><svg width="20" height="20" viewBox="0 0 20 20" class="svelte-1oy4poo"><rect x="0" y="0" width="20" height="20" fill="rgb(169,113,1)"></rect></svg>
+					<span class="svelte-1oy4poo">bare soil</span></label>
+			</div><div class="snap-always snap-start"><input name="color"  type="radio" id="color-4" value="4" class="svelte-1oy4poo">
+				<label for="color-4" class="svelte-1oy4poo"><svg width="20" height="20" viewBox="0 0 20 20" class="svelte-1oy4poo"><rect x="0" y="0" width="20" height="20" fill="rgb(21,83,174)"></rect></svg>
+					<span class="svelte-1oy4poo">water</span></label>
+			</div><div class="snap-always snap-start"><input name="color"  type="radio" id="color-5" value="5" class="svelte-1oy4poo">
+				<label for="color-5" class="svelte-1oy4poo"><svg width="20" height="20" viewBox="0 0 20 20" class="svelte-1oy4poo"><rect x="0" y="0" width="20" height="20" fill="rgb(25,74,38)"></rect></svg>
+					<span class="svelte-1oy4poo">coniferous</span></label>
+			</div><div class="snap-always snap-start"><input name="color" checked type="radio" id="color-6" value="6" class="svelte-1oy4poo">
+				<label for="color-6" class="svelte-1oy4poo"><svg width="20" height="20" viewBox="0 0 20 20" class="svelte-1oy4poo"><rect x="0" y="0" width="20" height="20" fill="rgb(70,228,131)"></rect></svg>
+					<span class="svelte-1oy4poo">deciduous</span></label>
+			</div><div class="snap-always snap-start"><input name="color"  type="radio" id="color-7" value="7" class="svelte-1oy4poo">
+				<label for="color-7" class="svelte-1oy4poo"><svg width="20" height="20" viewBox="0 0 20 20" class="svelte-1oy4poo"><rect x="0" y="0" width="20" height="20" fill="rgb(243,166,13)"></rect></svg>
+					<span class="svelte-1oy4poo">brushwood</span></label>
+			</div><div class="snap-always snap-start"><input name="color"  type="radio" id="color-8" value="8" class="svelte-1oy4poo">
+				<label for="color-8" class="svelte-1oy4poo"><svg width="20" height="20" viewBox="0 0 20 20" class="svelte-1oy4poo"><rect x="0" y="0" width="20" height="20" fill="rgb(102,0,130)"></rect></svg>
+					<span class="svelte-1oy4poo">vineyard</span></label>
+			</div><div class="snap-always snap-start"><input name="color"  type="radio" id="color-9" value="9" class="svelte-1oy4poo">
+				<label for="color-9" class="svelte-1oy4poo"><svg width="20" height="20" viewBox="0 0 20 20" class="svelte-1oy4poo"><rect x="0" y="0" width="20" height="20" fill="rgb(85,255,0)"></rect></svg>
+					<span class="svelte-1oy4poo">herbaceous vegetation</span></label>
+			</div><div class="snap-always snap-start"><input name="color"  type="radio" id="color-10" value="10" class="svelte-1oy4poo">
+				<label for="color-10" class="svelte-1oy4poo"><svg width="20" height="20" viewBox="0 0 20 20" class="svelte-1oy4poo"><rect x="0" y="0" width="20" height="20" fill="rgb(255,243,13)"></rect></svg>
+					<span class="svelte-1oy4poo">agricultural land</span></label>
+			</div><div class="snap-always snap-start"><input name="color"  type="radio" id="color-11" value="11" class="svelte-1oy4poo">
+				<label for="color-11" class="svelte-1oy4poo"><svg width="20" height="20" viewBox="0 0 20 20" class="svelte-1oy4poo"><rect x="0" y="0" width="20" height="20" fill="rgb(228,223,124)"></rect></svg>
+					<span class="svelte-1oy4poo">plowed land</span></label>
+			</div><div class="snap-always snap-start"><input name="color"  type="radio" id="color-12" value="12" class="svelte-1oy4poo">
+				<label for="color-12" class="svelte-1oy4poo"><svg width="20" height="20" viewBox="0 0 20 20" class="svelte-1oy4poo"><rect x="0" y="0" width="20" height="20" fill="rgb(61,230,235)"></rect></svg>
+					<span class="svelte-1oy4poo">swimming pool</span></label>
+			</div><div class="snap-always snap-start"><input name="color"  type="radio" id="color-13" value="13" class="svelte-1oy4poo">
+				<label for="color-13" class="svelte-1oy4poo"><svg width="20" height="20" viewBox="0 0 20 20" class="svelte-1oy4poo"><rect x="0" y="0" width="20" height="20" fill="rgb(255,255,255)"></rect></svg>
+					<span class="svelte-1oy4poo">snow</span></label>
+			</div><div class="snap-always snap-start"><input name="color"  type="radio" id="color-14" value="14" class="svelte-1oy4poo">
+				<label for="color-14" class="svelte-1oy4poo"><svg width="20" height="20" viewBox="0 0 20 20" class="svelte-1oy4poo"><rect x="0" y="0" width="20" height="20" fill="rgb(138,179,160)"></rect></svg>
+					<span class="svelte-1oy4poo">clear cut</span></label>
+			</div><div class="snap-always snap-start"><input name="color"  type="radio" id="color-15" value="15" class="svelte-1oy4poo">
+				<label for="color-15" class="svelte-1oy4poo"><svg width="20" height="20" viewBox="0 0 20 20" class="svelte-1oy4poo"><rect x="0" y="0" width="20" height="20" fill="rgb(107,113,79)"></rect></svg>
+					<span class="svelte-1oy4poo">mixed</span></label>
+			</div></div>
+	<h4 class="font-bold mt-6 mb-2 my-6 leading-6">Brush Size</h4>
+	<div class="brush svelte-1oy4poo"><input value="10" min="1" max="150" step="1" name="brush" type="range">
+		<label class="pl-2 svelte-1oy4poo" for="brush">40</label></div>
+</form>
+	<div class="drawings py-3 -mx-3 svelte-1sy339h"><div><div class="relative overflow-clip"><canvas class="canvas svelte-vhujxn" width="512" height="512"></canvas>
+		<canvas class="brush svelte-vhujxn" width="10" height="10"></canvas>
+		<span class="label svelte-vhujxn">deciduous</span>
+		<button class="absolute bottom-0 left-0 p-3" disabled><svg xmlns="http://www.w3.org/2000/svg" width="20" viewBox="0 0 512 512" class=""><path fill="white" stroke="black" stroke-width="30" d="M480 256c0 123.4-100.5 223.9-223.9 223.9c-48.84 0-95.17-15.58-134.2-44.86c-14.12-10.59-16.97-30.66-6.375-44.81c10.59-14.12 30.62-16.94 44.81-6.375c27.84 20.91 61 31.94 95.88 31.94C344.3 415.8 416 344.1 416 256s-71.69-159.8-159.8-159.8c-37.46 0-73.09 13.49-101.3 36.64l45.12 45.14c17.01 17.02 4.955 46.1-19.1 46.1H35.17C24.58 224.1 16 215.5 16 204.9V59.04c0-24.04 29.07-36.08 46.07-19.07l47.6 47.63C149.9 52.71 201.5 32.11 256.1 32.11C379.5 32.11 480 132.6 480 256z"></path></svg></button></div>
+</div>
+		<div class="relative overflow-clip flex flex-col justify-center items-center w-full h-full">
+	</div>
+
+</div>
+
+	<button  class="green svelte-1sy339h">Generate Map
+	</button>
+
+	<button disabled class="svelte-1sy339h">Save Result
+	</button>
+
+	<div><h4 class="font-bold mt-6 mb-2 my-6 leading-6">Select a Template</h4>
+	<form class="svelte-1gwcbp"><div class="samples  svelte-1gwcbp"><div class="snap-always snap-start"><input type="radio" name="samples" id="sample-0" value="0"  class="svelte-1gwcbp">
+					<label for="sample-0" class="svelte-1gwcbp"><img src="/static/samples/default.jpg" alt="/samples/default.jpg" class="svelte-1gwcbp"></label>
+				</div><div class="snap-always snap-start"><input type="radio" name="samples" id="sample-1" value="1"  class="svelte-1gwcbp">
+					<label for="sample-1" class="svelte-1gwcbp"><img src="/static/samples/example0.png" alt="/samples/example0.png" class="svelte-1gwcbp"></label>
+				</div><div class="snap-always snap-start"><input type="radio" name="samples" id="sample-2" value="2"  class="svelte-1gwcbp">
+					<label for="sample-2" class="svelte-1gwcbp"><img src="/static/samples/example1.png" alt="/samples/example1.png" class="svelte-1gwcbp"></label>
+				</div><div class="snap-always snap-start"><input type="radio" name="samples" id="sample-3" value="3"  class="svelte-1gwcbp">
+					<label for="sample-3" class="svelte-1gwcbp"><img src="/static/samples/example2.png" alt="/samples/example2.png" class="svelte-1gwcbp"></label>
+				</div><div class="snap-always snap-start"><input type="radio" name="samples" id="sample-4" value="4"  class="svelte-1gwcbp">
+					<label for="sample-4" class="svelte-1gwcbp"><img src="/static/samples/example3.png" alt="/samples/example3.png" class="svelte-1gwcbp"></label>
+				</div><div class="snap-always snap-start"><input type="radio" name="samples" id="sample-5" value="5"  class="svelte-1gwcbp">
+					<label for="sample-5" class="svelte-1gwcbp"><img src="/static/samples/example4.png" alt="/samples/example4.png" class="svelte-1gwcbp"></label>
+				</div><div class="snap-always snap-start"><input type="radio" name="samples" id="sample-6" value="6"  class="svelte-1gwcbp">
+					<label for="sample-6" class="svelte-1gwcbp"><img src="/static/samples/example5.png" alt="/samples/example5.png" class="svelte-1gwcbp"></label>
+				</div><div class="snap-always snap-start"><input type="radio" name="samples" id="sample-7" value="7"  class="svelte-1gwcbp">
+					<label for="sample-7" class="svelte-1gwcbp"><img src="/static/samples/example6.jpg" alt="/samples/example6.jpg" class="svelte-1gwcbp"></label>
+				</div></div></form>
+</div>
+
+	<form><h4 class="font-bold mt-6 mb-2 my-6 leading-6">Prompt</h4>
+	<input name="prompt" placeholder="Aerial view of ..., France."  style="width: 500px;" class="svelte-7to72y" value="Aerial view of rue des Lilas, Toulouse, Haute-Garonne, France">
+
+	<h4 class="font-bold mt-6 mb-2 my-6 leading-6">Modifier</h4>
+	<input name="modifier" placeholder="High resolution satellite image"  style="width: 500px;" class="svelte-7to72y" value="High resolution satellite image, 4K, ultra detailed">
+	<select name="presets"  class="svelte-7to72y"><option disabled selected value="preset">preset</option><option value="High resolution satellite image, 4K, ultra detailed">Realistic</option>`<option value="Colorful lego bricks">Lego brick</option>`<option value="Black and white paper pencil drawing">Pencil</option>`<option value="Oil on canvas painting">Painting</option>`</select>
+
+	<h4 class="font-bold mt-6 mb-2 my-6 leading-6">Random Seed</h4>
+	<input type="Number" name="seed" placeholder="Integer Seed"  class="svelte-7to72y" value="398460928">
+	<button  class="svelte-7to72y">Random
+	</button>
+	<h4 class="font-bold mt-6 mb-2 my-6 leading-6">Sample Steps</h4>
+	<div class="flex"><input type="range" name="steps" min="10" max="30" step="1"  class="svelte-7to72y" value="20">
+		<label class="pl-2 svelte-7to72y" for="steps">20</label></div>
+</form>
+</div>
+
+
+		<script type="module" data-sveltekit-hydrate="1meyvr0">
+		import { start } from "/static/_app/immutable/start-1d6beeeb.js";
+		start({
+			target: document.querySelector('[data-sveltekit-hydrate="1meyvr0"]').parentNode,
+			paths: {"base":"/static","assets":"/static"},
+			session: {},
+			route: true,
+			spa: false,
+			trailing_slash: "never",
+			hydrate: {
+				status: 200,
+				error: null,
+				nodes: [0, 2],
+				params: {},
+				routeId: ""
+			}
+		});
+	</script>
+	</body>	
+</html>
diff --git a/frontend/.svelte-kit/output/server/chunks/hooks-1c45ba0b.js b/frontend/.svelte-kit/output/server/chunks/hooks-1c45ba0b.js
new file mode 100644
index 0000000000000000000000000000000000000000..8b137891791fe96927ad78e64b0aad7bded08bdc
--- /dev/null
+++ b/frontend/.svelte-kit/output/server/chunks/hooks-1c45ba0b.js
@@ -0,0 +1 @@
+
diff --git a/frontend/.svelte-kit/output/server/chunks/index-445fd704.js b/frontend/.svelte-kit/output/server/chunks/index-445fd704.js
new file mode 100644
index 0000000000000000000000000000000000000000..f727e08d4c18d97d5ff37c6525f3d71c156ac5ab
--- /dev/null
+++ b/frontend/.svelte-kit/output/server/chunks/index-445fd704.js
@@ -0,0 +1,112 @@
+function noop() {
+}
+function run(fn) {
+  return fn();
+}
+function blank_object() {
+  return /* @__PURE__ */ Object.create(null);
+}
+function run_all(fns) {
+  fns.forEach(run);
+}
+function safe_not_equal(a, b) {
+  return a != a ? b == b : a !== b || (a && typeof a === "object" || typeof a === "function");
+}
+function subscribe(store, ...callbacks) {
+  if (store == null) {
+    return noop;
+  }
+  const unsub = store.subscribe(...callbacks);
+  return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub;
+}
+function set_store_value(store, ret, value) {
+  store.set(value);
+  return ret;
+}
+let current_component;
+function set_current_component(component) {
+  current_component = component;
+}
+function get_current_component() {
+  if (!current_component)
+    throw new Error("Function called outside component initialization");
+  return current_component;
+}
+function setContext(key, context) {
+  get_current_component().$$.context.set(key, context);
+  return context;
+}
+Promise.resolve();
+const escaped = {
+  '"': "&quot;",
+  "'": "&#39;",
+  "&": "&amp;",
+  "<": "&lt;",
+  ">": "&gt;"
+};
+function escape(html) {
+  return String(html).replace(/["'&<>]/g, (match) => escaped[match]);
+}
+function escape_attribute_value(value) {
+  return typeof value === "string" ? escape(value) : value;
+}
+function each(items, fn) {
+  let str = "";
+  for (let i = 0; i < items.length; i += 1) {
+    str += fn(items[i], i);
+  }
+  return str;
+}
+const missing_component = {
+  $$render: () => ""
+};
+function validate_component(component, name) {
+  if (!component || !component.$$render) {
+    if (name === "svelte:component")
+      name += " this={...}";
+    throw new Error(`<${name}> is not a valid SSR component. You may need to review your build config to ensure that dependencies are compiled, rather than imported as pre-compiled modules`);
+  }
+  return component;
+}
+let on_destroy;
+function create_ssr_component(fn) {
+  function $$render(result, props, bindings, slots, context) {
+    const parent_component = current_component;
+    const $$ = {
+      on_destroy,
+      context: new Map(context || (parent_component ? parent_component.$$.context : [])),
+      on_mount: [],
+      before_update: [],
+      after_update: [],
+      callbacks: blank_object()
+    };
+    set_current_component({ $$ });
+    const html = fn(result, props, bindings, slots);
+    set_current_component(parent_component);
+    return html;
+  }
+  return {
+    render: (props = {}, { $$slots = {}, context = /* @__PURE__ */ new Map() } = {}) => {
+      on_destroy = [];
+      const result = { title: "", head: "", css: /* @__PURE__ */ new Set() };
+      const html = $$render(result, props, {}, $$slots, context);
+      run_all(on_destroy);
+      return {
+        html,
+        css: {
+          code: Array.from(result.css).map((css) => css.code).join("\n"),
+          map: null
+        },
+        head: result.title + result.head
+      };
+    },
+    $$render
+  };
+}
+function add_attribute(name, value, boolean) {
+  if (value == null || boolean && !value)
+    return "";
+  const assignment = boolean && value === true ? "" : `="${escape_attribute_value(value.toString())}"`;
+  return ` ${name}${assignment}`;
+}
+export { safe_not_equal as a, subscribe as b, create_ssr_component as c, each as d, escape as e, add_attribute as f, set_store_value as g, missing_component as m, noop as n, setContext as s, validate_component as v };
diff --git a/frontend/.svelte-kit/output/server/chunks/paths-396f020f.js b/frontend/.svelte-kit/output/server/chunks/paths-396f020f.js
new file mode 100644
index 0000000000000000000000000000000000000000..f70164ed4de441e2a3cd51056913d8e9aea4f56b
--- /dev/null
+++ b/frontend/.svelte-kit/output/server/chunks/paths-396f020f.js
@@ -0,0 +1,7 @@
+let base = "";
+let assets = "";
+function set_paths(paths) {
+  base = paths.base;
+  assets = paths.assets || base;
+}
+export { assets as a, base as b, set_paths as s };
diff --git a/frontend/.svelte-kit/output/server/entries/fallbacks/error.svelte.js b/frontend/.svelte-kit/output/server/entries/fallbacks/error.svelte.js
new file mode 100644
index 0000000000000000000000000000000000000000..5fc2e43da603772c8d72bfb31c7dec7021c834c3
--- /dev/null
+++ b/frontend/.svelte-kit/output/server/entries/fallbacks/error.svelte.js
@@ -0,0 +1,21 @@
+import { c as create_ssr_component, e as escape } from "../../chunks/index-445fd704.js";
+function load({ error, status }) {
+  return { props: { error, status } };
+}
+const Error = create_ssr_component(($$result, $$props, $$bindings, slots) => {
+  let { status } = $$props;
+  let { error } = $$props;
+  if ($$props.status === void 0 && $$bindings.status && status !== void 0)
+    $$bindings.status(status);
+  if ($$props.error === void 0 && $$bindings.error && error !== void 0)
+    $$bindings.error(error);
+  return `<h1>${escape(status)}</h1>
+
+<pre>${escape(error.message)}</pre>
+
+
+
+${error.frame ? `<pre>${escape(error.frame)}</pre>` : ``}
+${error.stack ? `<pre>${escape(error.stack)}</pre>` : ``}`;
+});
+export { Error as default, load };
diff --git a/frontend/.svelte-kit/output/server/entries/pages/__layout.svelte.js b/frontend/.svelte-kit/output/server/entries/pages/__layout.svelte.js
new file mode 100644
index 0000000000000000000000000000000000000000..58eb65a3debd66c652e39459ee167c324628fda4
--- /dev/null
+++ b/frontend/.svelte-kit/output/server/entries/pages/__layout.svelte.js
@@ -0,0 +1,6 @@
+import { c as create_ssr_component } from "../../chunks/index-445fd704.js";
+var app = /* @__PURE__ */ (() => '@import url(\'https://fonts.googleapis.com/css2?family=Open+Sans:wght@100;200;300;400;500;600;700;800&display=swap\');\n/*\n! tailwindcss v3.1.4 | MIT License | https://tailwindcss.com\n*/\n/*\n1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)\n2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116)\n*/\n*,\n::before,\n::after {\n  box-sizing: border-box; /* 1 */\n  border-width: 0; /* 2 */\n  border-style: solid; /* 2 */\n  border-color: #e5e7eb; /* 2 */\n}\n::before,\n::after {\n  --tw-content: \'\';\n}\n/*\n1. Use a consistent sensible line-height in all browsers.\n2. Prevent adjustments of font size after orientation changes in iOS.\n3. Use a more readable tab size.\n4. Use the user\'s configured `sans` font-family by default.\n*/\nhtml {\n  line-height: 1.5; /* 1 */\n  -webkit-text-size-adjust: 100%; /* 2 */\n  -moz-tab-size: 4; /* 3 */\n  -o-tab-size: 4;\n     tab-size: 4; /* 3 */\n  font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; /* 4 */\n}\n/*\n1. Remove the margin in all browsers.\n2. Inherit line-height from `html` so users can set them as a class directly on the `html` element.\n*/\nbody {\n  margin: 0; /* 1 */\n  line-height: inherit; /* 2 */\n}\n/*\n1. Add the correct height in Firefox.\n2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)\n3. Ensure horizontal rules are visible by default.\n*/\nhr {\n  height: 0; /* 1 */\n  color: inherit; /* 2 */\n  border-top-width: 1px; /* 3 */\n}\n/*\nAdd the correct text decoration in Chrome, Edge, and Safari.\n*/\nabbr:where([title]) {\n  -webkit-text-decoration: underline dotted;\n          text-decoration: underline dotted;\n}\n/*\nRemove the default font size and weight for headings.\n*/\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n  font-size: inherit;\n  font-weight: inherit;\n}\n/*\nReset links to optimize for opt-in styling instead of opt-out.\n*/\na {\n  color: inherit;\n  text-decoration: inherit;\n}\n/*\nAdd the correct font weight in Edge and Safari.\n*/\nb,\nstrong {\n  font-weight: bolder;\n}\n/*\n1. Use the user\'s configured `mono` font family by default.\n2. Correct the odd `em` font sizing in all browsers.\n*/\ncode,\nkbd,\nsamp,\npre {\n  font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; /* 1 */\n  font-size: 1em; /* 2 */\n}\n/*\nAdd the correct font size in all browsers.\n*/\nsmall {\n  font-size: 80%;\n}\n/*\nPrevent `sub` and `sup` elements from affecting the line height in all browsers.\n*/\nsub,\nsup {\n  font-size: 75%;\n  line-height: 0;\n  position: relative;\n  vertical-align: baseline;\n}\nsub {\n  bottom: -0.25em;\n}\nsup {\n  top: -0.5em;\n}\n/*\n1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)\n2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)\n3. Remove gaps between table borders by default.\n*/\ntable {\n  text-indent: 0; /* 1 */\n  border-color: inherit; /* 2 */\n  border-collapse: collapse; /* 3 */\n}\n/*\n1. Change the font styles in all browsers.\n2. Remove the margin in Firefox and Safari.\n3. Remove default padding in all browsers.\n*/\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n  font-family: inherit; /* 1 */\n  font-size: 100%; /* 1 */\n  font-weight: inherit; /* 1 */\n  line-height: inherit; /* 1 */\n  color: inherit; /* 1 */\n  margin: 0; /* 2 */\n  padding: 0; /* 3 */\n}\n/*\nRemove the inheritance of text transform in Edge and Firefox.\n*/\nbutton,\nselect {\n  text-transform: none;\n}\n/*\n1. Correct the inability to style clickable types in iOS and Safari.\n2. Remove default button styles.\n*/\nbutton,\n[type=\'button\'],\n[type=\'reset\'],\n[type=\'submit\'] {\n  -webkit-appearance: button; /* 1 */\n  background-color: transparent; /* 2 */\n  background-image: none; /* 2 */\n}\n/*\nUse the modern Firefox focus style for all focusable elements.\n*/\n:-moz-focusring {\n  outline: auto;\n}\n/*\nRemove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737)\n*/\n:-moz-ui-invalid {\n  box-shadow: none;\n}\n/*\nAdd the correct vertical alignment in Chrome and Firefox.\n*/\nprogress {\n  vertical-align: baseline;\n}\n/*\nCorrect the cursor style of increment and decrement buttons in Safari.\n*/\n::-webkit-inner-spin-button,\n::-webkit-outer-spin-button {\n  height: auto;\n}\n/*\n1. Correct the odd appearance in Chrome and Safari.\n2. Correct the outline style in Safari.\n*/\n[type=\'search\'] {\n  -webkit-appearance: textfield; /* 1 */\n  outline-offset: -2px; /* 2 */\n}\n/*\nRemove the inner padding in Chrome and Safari on macOS.\n*/\n::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\n/*\n1. Correct the inability to style clickable types in iOS and Safari.\n2. Change font properties to `inherit` in Safari.\n*/\n::-webkit-file-upload-button {\n  -webkit-appearance: button; /* 1 */\n  font: inherit; /* 2 */\n}\n/*\nAdd the correct display in Chrome and Safari.\n*/\nsummary {\n  display: list-item;\n}\n/*\nRemoves the default spacing and border for appropriate elements.\n*/\nblockquote,\ndl,\ndd,\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\nhr,\nfigure,\np,\npre {\n  margin: 0;\n}\nfieldset {\n  margin: 0;\n  padding: 0;\n}\nlegend {\n  padding: 0;\n}\nol,\nul,\nmenu {\n  list-style: none;\n  margin: 0;\n  padding: 0;\n}\n/*\nPrevent resizing textareas horizontally by default.\n*/\ntextarea {\n  resize: vertical;\n}\n/*\n1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300)\n2. Set the default placeholder color to the user\'s configured gray 400 color.\n*/\ninput::-moz-placeholder, textarea::-moz-placeholder {\n  opacity: 1; /* 1 */\n  color: #9ca3af; /* 2 */\n}\ninput::placeholder,\ntextarea::placeholder {\n  opacity: 1; /* 1 */\n  color: #9ca3af; /* 2 */\n}\n/*\nSet the default cursor for buttons.\n*/\nbutton,\n[role="button"] {\n  cursor: pointer;\n}\n/*\nMake sure disabled buttons don\'t get the pointer cursor.\n*/\n:disabled {\n  cursor: default;\n}\n/*\n1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14)\n2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210)\n   This can trigger a poorly considered lint error in some tools but is included by design.\n*/\nimg,\nsvg,\nvideo,\ncanvas,\naudio,\niframe,\nembed,\nobject {\n  display: block; /* 1 */\n  vertical-align: middle; /* 2 */\n}\n/*\nConstrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14)\n*/\nimg,\nvideo {\n  max-width: 100%;\n  height: auto;\n}\nhtml {\n		font-family: \'Open Sans\', sans-serif;\n	}\n*, ::before, ::after{\n  --tw-border-spacing-x: 0;\n  --tw-border-spacing-y: 0;\n  --tw-translate-x: 0;\n  --tw-translate-y: 0;\n  --tw-rotate: 0;\n  --tw-skew-x: 0;\n  --tw-skew-y: 0;\n  --tw-scale-x: 1;\n  --tw-scale-y: 1;\n  --tw-pan-x:  ;\n  --tw-pan-y:  ;\n  --tw-pinch-zoom:  ;\n  --tw-scroll-snap-strictness: proximity;\n  --tw-ordinal:  ;\n  --tw-slashed-zero:  ;\n  --tw-numeric-figure:  ;\n  --tw-numeric-spacing:  ;\n  --tw-numeric-fraction:  ;\n  --tw-ring-inset:  ;\n  --tw-ring-offset-width: 0px;\n  --tw-ring-offset-color: #fff;\n  --tw-ring-color: rgb(59 130 246 / 0.5);\n  --tw-ring-offset-shadow: 0 0 #0000;\n  --tw-ring-shadow: 0 0 #0000;\n  --tw-shadow: 0 0 #0000;\n  --tw-shadow-colored: 0 0 #0000;\n  --tw-blur:  ;\n  --tw-brightness:  ;\n  --tw-contrast:  ;\n  --tw-grayscale:  ;\n  --tw-hue-rotate:  ;\n  --tw-invert:  ;\n  --tw-saturate:  ;\n  --tw-sepia:  ;\n  --tw-drop-shadow:  ;\n  --tw-backdrop-blur:  ;\n  --tw-backdrop-brightness:  ;\n  --tw-backdrop-contrast:  ;\n  --tw-backdrop-grayscale:  ;\n  --tw-backdrop-hue-rotate:  ;\n  --tw-backdrop-invert:  ;\n  --tw-backdrop-opacity:  ;\n  --tw-backdrop-saturate:  ;\n  --tw-backdrop-sepia:  ;\n}\n::-webkit-backdrop{\n  --tw-border-spacing-x: 0;\n  --tw-border-spacing-y: 0;\n  --tw-translate-x: 0;\n  --tw-translate-y: 0;\n  --tw-rotate: 0;\n  --tw-skew-x: 0;\n  --tw-skew-y: 0;\n  --tw-scale-x: 1;\n  --tw-scale-y: 1;\n  --tw-pan-x:  ;\n  --tw-pan-y:  ;\n  --tw-pinch-zoom:  ;\n  --tw-scroll-snap-strictness: proximity;\n  --tw-ordinal:  ;\n  --tw-slashed-zero:  ;\n  --tw-numeric-figure:  ;\n  --tw-numeric-spacing:  ;\n  --tw-numeric-fraction:  ;\n  --tw-ring-inset:  ;\n  --tw-ring-offset-width: 0px;\n  --tw-ring-offset-color: #fff;\n  --tw-ring-color: rgb(59 130 246 / 0.5);\n  --tw-ring-offset-shadow: 0 0 #0000;\n  --tw-ring-shadow: 0 0 #0000;\n  --tw-shadow: 0 0 #0000;\n  --tw-shadow-colored: 0 0 #0000;\n  --tw-blur:  ;\n  --tw-brightness:  ;\n  --tw-contrast:  ;\n  --tw-grayscale:  ;\n  --tw-hue-rotate:  ;\n  --tw-invert:  ;\n  --tw-saturate:  ;\n  --tw-sepia:  ;\n  --tw-drop-shadow:  ;\n  --tw-backdrop-blur:  ;\n  --tw-backdrop-brightness:  ;\n  --tw-backdrop-contrast:  ;\n  --tw-backdrop-grayscale:  ;\n  --tw-backdrop-hue-rotate:  ;\n  --tw-backdrop-invert:  ;\n  --tw-backdrop-opacity:  ;\n  --tw-backdrop-saturate:  ;\n  --tw-backdrop-sepia:  ;\n}\n::backdrop{\n  --tw-border-spacing-x: 0;\n  --tw-border-spacing-y: 0;\n  --tw-translate-x: 0;\n  --tw-translate-y: 0;\n  --tw-rotate: 0;\n  --tw-skew-x: 0;\n  --tw-skew-y: 0;\n  --tw-scale-x: 1;\n  --tw-scale-y: 1;\n  --tw-pan-x:  ;\n  --tw-pan-y:  ;\n  --tw-pinch-zoom:  ;\n  --tw-scroll-snap-strictness: proximity;\n  --tw-ordinal:  ;\n  --tw-slashed-zero:  ;\n  --tw-numeric-figure:  ;\n  --tw-numeric-spacing:  ;\n  --tw-numeric-fraction:  ;\n  --tw-ring-inset:  ;\n  --tw-ring-offset-width: 0px;\n  --tw-ring-offset-color: #fff;\n  --tw-ring-color: rgb(59 130 246 / 0.5);\n  --tw-ring-offset-shadow: 0 0 #0000;\n  --tw-ring-shadow: 0 0 #0000;\n  --tw-shadow: 0 0 #0000;\n  --tw-shadow-colored: 0 0 #0000;\n  --tw-blur:  ;\n  --tw-brightness:  ;\n  --tw-contrast:  ;\n  --tw-grayscale:  ;\n  --tw-hue-rotate:  ;\n  --tw-invert:  ;\n  --tw-saturate:  ;\n  --tw-sepia:  ;\n  --tw-drop-shadow:  ;\n  --tw-backdrop-blur:  ;\n  --tw-backdrop-brightness:  ;\n  --tw-backdrop-contrast:  ;\n  --tw-backdrop-grayscale:  ;\n  --tw-backdrop-hue-rotate:  ;\n  --tw-backdrop-invert:  ;\n  --tw-backdrop-opacity:  ;\n  --tw-backdrop-saturate:  ;\n  --tw-backdrop-sepia:  ;\n}\n.prose{\n  color: var(--tw-prose-body);\n  max-width: 65ch;\n}\n.prose :where([class~="lead"]):not(:where([class~="not-prose"] *)){\n  color: var(--tw-prose-lead);\n  font-size: 1.25em;\n  line-height: 1.6;\n  margin-top: 1.2em;\n  margin-bottom: 1.2em;\n}\n.prose :where(a):not(:where([class~="not-prose"] *)){\n  color: var(--tw-prose-links);\n  text-decoration: underline;\n  font-weight: 500;\n}\n.prose :where(strong):not(:where([class~="not-prose"] *)){\n  color: var(--tw-prose-bold);\n  font-weight: 600;\n}\n.prose :where(ol):not(:where([class~="not-prose"] *)){\n  list-style-type: decimal;\n  padding-left: 1.625em;\n}\n.prose :where(ol[type="A"]):not(:where([class~="not-prose"] *)){\n  list-style-type: upper-alpha;\n}\n.prose :where(ol[type="a"]):not(:where([class~="not-prose"] *)){\n  list-style-type: lower-alpha;\n}\n.prose :where(ol[type="A" s]):not(:where([class~="not-prose"] *)){\n  list-style-type: upper-alpha;\n}\n.prose :where(ol[type="a" s]):not(:where([class~="not-prose"] *)){\n  list-style-type: lower-alpha;\n}\n.prose :where(ol[type="I"]):not(:where([class~="not-prose"] *)){\n  list-style-type: upper-roman;\n}\n.prose :where(ol[type="i"]):not(:where([class~="not-prose"] *)){\n  list-style-type: lower-roman;\n}\n.prose :where(ol[type="I" s]):not(:where([class~="not-prose"] *)){\n  list-style-type: upper-roman;\n}\n.prose :where(ol[type="i" s]):not(:where([class~="not-prose"] *)){\n  list-style-type: lower-roman;\n}\n.prose :where(ol[type="1"]):not(:where([class~="not-prose"] *)){\n  list-style-type: decimal;\n}\n.prose :where(ul):not(:where([class~="not-prose"] *)){\n  list-style-type: disc;\n  padding-left: 1.625em;\n}\n.prose :where(ol > li):not(:where([class~="not-prose"] *))::marker{\n  font-weight: 400;\n  color: var(--tw-prose-counters);\n}\n.prose :where(ul > li):not(:where([class~="not-prose"] *))::marker{\n  color: var(--tw-prose-bullets);\n}\n.prose :where(hr):not(:where([class~="not-prose"] *)){\n  border-color: var(--tw-prose-hr);\n  border-top-width: 1px;\n  margin-top: 3em;\n  margin-bottom: 3em;\n}\n.prose :where(blockquote):not(:where([class~="not-prose"] *)){\n  font-weight: 500;\n  font-style: italic;\n  color: var(--tw-prose-quotes);\n  border-left-width: 0.25rem;\n  border-left-color: var(--tw-prose-quote-borders);\n  quotes: "\\201C""\\201D""\\2018""\\2019";\n  margin-top: 1.6em;\n  margin-bottom: 1.6em;\n  padding-left: 1em;\n}\n.prose :where(h1):not(:where([class~="not-prose"] *)){\n  color: var(--tw-prose-headings);\n  font-weight: 800;\n  font-size: 2.25em;\n  margin-top: 0;\n  margin-bottom: 0.8888889em;\n  line-height: 1.1111111;\n}\n.prose :where(h1 strong):not(:where([class~="not-prose"] *)){\n  font-weight: 900;\n}\n.prose :where(h2):not(:where([class~="not-prose"] *)){\n  color: var(--tw-prose-headings);\n  font-weight: 700;\n  font-size: 1.5em;\n  margin-top: 2em;\n  margin-bottom: 1em;\n  line-height: 1.3333333;\n}\n.prose :where(h2 strong):not(:where([class~="not-prose"] *)){\n  font-weight: 800;\n}\n.prose :where(h3):not(:where([class~="not-prose"] *)){\n  color: var(--tw-prose-headings);\n  font-weight: 600;\n  font-size: 1.25em;\n  margin-top: 1.6em;\n  margin-bottom: 0.6em;\n  line-height: 1.6;\n}\n.prose :where(h3 strong):not(:where([class~="not-prose"] *)){\n  font-weight: 700;\n}\n.prose :where(h4):not(:where([class~="not-prose"] *)){\n  color: var(--tw-prose-headings);\n  font-weight: 600;\n  margin-top: 1.5em;\n  margin-bottom: 0.5em;\n  line-height: 1.5;\n}\n.prose :where(h4 strong):not(:where([class~="not-prose"] *)){\n  font-weight: 700;\n}\n.prose :where(figure > *):not(:where([class~="not-prose"] *)){\n  margin-top: 0;\n  margin-bottom: 0;\n}\n.prose :where(figcaption):not(:where([class~="not-prose"] *)){\n  color: var(--tw-prose-captions);\n  font-size: 0.875em;\n  line-height: 1.4285714;\n  margin-top: 0.8571429em;\n}\n.prose :where(a code):not(:where([class~="not-prose"] *)){\n  color: var(--tw-prose-links);\n}\n.prose :where(pre code):not(:where([class~="not-prose"] *))::before{\n  content: none;\n}\n.prose :where(pre code):not(:where([class~="not-prose"] *))::after{\n  content: none;\n}\n.prose :where(table):not(:where([class~="not-prose"] *)){\n  width: 100%;\n  table-layout: auto;\n  text-align: left;\n  margin-top: 2em;\n  margin-bottom: 2em;\n  font-size: 0.875em;\n  line-height: 1.7142857;\n}\n.prose :where(thead):not(:where([class~="not-prose"] *)){\n  border-bottom-width: 1px;\n  border-bottom-color: var(--tw-prose-th-borders);\n}\n.prose :where(thead th):not(:where([class~="not-prose"] *)){\n  color: var(--tw-prose-headings);\n  font-weight: 600;\n  vertical-align: bottom;\n  padding-right: 0.5714286em;\n  padding-bottom: 0.5714286em;\n  padding-left: 0.5714286em;\n}\n.prose :where(tbody tr):not(:where([class~="not-prose"] *)){\n  border-bottom-width: 1px;\n  border-bottom-color: var(--tw-prose-td-borders);\n}\n.prose :where(tbody tr:last-child):not(:where([class~="not-prose"] *)){\n  border-bottom-width: 0;\n}\n.prose :where(tbody td):not(:where([class~="not-prose"] *)){\n  vertical-align: baseline;\n  padding-top: 0.5714286em;\n  padding-right: 0.5714286em;\n  padding-bottom: 0.5714286em;\n  padding-left: 0.5714286em;\n}\n.prose{\n  --tw-prose-body: #374151;\n  --tw-prose-headings: #111827;\n  --tw-prose-lead: #4b5563;\n  --tw-prose-links: #111827;\n  --tw-prose-bold: #111827;\n  --tw-prose-counters: #6b7280;\n  --tw-prose-bullets: #d1d5db;\n  --tw-prose-hr: #e5e7eb;\n  --tw-prose-quotes: #111827;\n  --tw-prose-quote-borders: #e5e7eb;\n  --tw-prose-captions: #6b7280;\n  --tw-prose-code: #111827;\n  --tw-prose-pre-code: #e5e7eb;\n  --tw-prose-pre-bg: #1f2937;\n  --tw-prose-th-borders: #d1d5db;\n  --tw-prose-td-borders: #e5e7eb;\n  --tw-prose-invert-body: #d1d5db;\n  --tw-prose-invert-headings: #fff;\n  --tw-prose-invert-lead: #9ca3af;\n  --tw-prose-invert-links: #fff;\n  --tw-prose-invert-bold: #fff;\n  --tw-prose-invert-counters: #9ca3af;\n  --tw-prose-invert-bullets: #4b5563;\n  --tw-prose-invert-hr: #374151;\n  --tw-prose-invert-quotes: #f3f4f6;\n  --tw-prose-invert-quote-borders: #374151;\n  --tw-prose-invert-captions: #9ca3af;\n  --tw-prose-invert-code: #fff;\n  --tw-prose-invert-pre-code: #d1d5db;\n  --tw-prose-invert-pre-bg: rgb(0 0 0 / 50%);\n  --tw-prose-invert-th-borders: #4b5563;\n  --tw-prose-invert-td-borders: #374151;\n  font-size: 1rem;\n  line-height: 1.75;\n}\n.prose :where(p):not(:where([class~="not-prose"] *)){\n  margin-top: 1.25em;\n  margin-bottom: 1.25em;\n}\n.prose :where(img):not(:where([class~="not-prose"] *)){\n  margin-top: 2em;\n  margin-bottom: 2em;\n}\n.prose :where(video):not(:where([class~="not-prose"] *)){\n  margin-top: 2em;\n  margin-bottom: 2em;\n}\n.prose :where(figure):not(:where([class~="not-prose"] *)){\n  margin-top: 2em;\n  margin-bottom: 2em;\n}\n.prose :where(h2 code):not(:where([class~="not-prose"] *)){\n  font-size: 0.875em;\n}\n.prose :where(h3 code):not(:where([class~="not-prose"] *)){\n  font-size: 0.9em;\n}\n.prose :where(li):not(:where([class~="not-prose"] *)){\n  margin-top: 0.5em;\n  margin-bottom: 0.5em;\n}\n.prose :where(ol > li):not(:where([class~="not-prose"] *)){\n  padding-left: 0.375em;\n}\n.prose :where(ul > li):not(:where([class~="not-prose"] *)){\n  padding-left: 0.375em;\n}\n.prose > :where(ul > li p):not(:where([class~="not-prose"] *)){\n  margin-top: 0.75em;\n  margin-bottom: 0.75em;\n}\n.prose > :where(ul > li > *:first-child):not(:where([class~="not-prose"] *)){\n  margin-top: 1.25em;\n}\n.prose > :where(ul > li > *:last-child):not(:where([class~="not-prose"] *)){\n  margin-bottom: 1.25em;\n}\n.prose > :where(ol > li > *:first-child):not(:where([class~="not-prose"] *)){\n  margin-top: 1.25em;\n}\n.prose > :where(ol > li > *:last-child):not(:where([class~="not-prose"] *)){\n  margin-bottom: 1.25em;\n}\n.prose :where(ul ul, ul ol, ol ul, ol ol):not(:where([class~="not-prose"] *)){\n  margin-top: 0.75em;\n  margin-bottom: 0.75em;\n}\n.prose :where(hr + *):not(:where([class~="not-prose"] *)){\n  margin-top: 0;\n}\n.prose :where(h2 + *):not(:where([class~="not-prose"] *)){\n  margin-top: 0;\n}\n.prose :where(h3 + *):not(:where([class~="not-prose"] *)){\n  margin-top: 0;\n}\n.prose :where(h4 + *):not(:where([class~="not-prose"] *)){\n  margin-top: 0;\n}\n.prose :where(thead th:first-child):not(:where([class~="not-prose"] *)){\n  padding-left: 0;\n}\n.prose :where(thead th:last-child):not(:where([class~="not-prose"] *)){\n  padding-right: 0;\n}\n.prose :where(tbody td:first-child):not(:where([class~="not-prose"] *)){\n  padding-left: 0;\n}\n.prose :where(tbody td:last-child):not(:where([class~="not-prose"] *)){\n  padding-right: 0;\n}\n.prose > :where(:first-child):not(:where([class~="not-prose"] *)){\n  margin-top: 0;\n}\n.prose > :where(:last-child):not(:where([class~="not-prose"] *)){\n  margin-bottom: 0;\n}\n.pointer-events-none{\n  pointer-events: none;\n}\n.absolute{\n  position: absolute;\n}\n.relative{\n  position: relative;\n}\n.bottom-0{\n  bottom: 0px;\n}\n.left-0{\n  left: 0px;\n}\n.top-0{\n  top: 0px;\n}\n.right-0{\n  right: 0px;\n}\n.z-0{\n  z-index: 0;\n}\n.z-10{\n  z-index: 10;\n}\n.z-20{\n  z-index: 20;\n}\n.my-3{\n  margin-top: 0.75rem;\n  margin-bottom: 0.75rem;\n}\n.my-6{\n  margin-top: 1.5rem;\n  margin-bottom: 1.5rem;\n}\n.mx-auto{\n  margin-left: auto;\n  margin-right: auto;\n}\n.-mx-3{\n  margin-left: -0.75rem;\n  margin-right: -0.75rem;\n}\n.mt-6{\n  margin-top: 1.5rem;\n}\n.mb-2{\n  margin-bottom: 0.5rem;\n}\n.box-border{\n  box-sizing: border-box;\n}\n.block{\n  display: block;\n}\n.flex{\n  display: flex;\n}\n.grid{\n  display: grid;\n}\n.hidden{\n  display: none;\n}\n.aspect-\\[512\\/512\\]{\n  aspect-ratio: 512/512;\n}\n.h-0{\n  height: 0px;\n}\n.h-full{\n  height: 100%;\n}\n.max-h-\\[9rem\\]{\n  max-height: 9rem;\n}\n.max-h-24{\n  max-height: 6rem;\n}\n.w-0{\n  width: 0px;\n}\n.w-full{\n  width: 100%;\n}\n.max-w-full{\n  max-width: 100%;\n}\n.max-w-\\[3rem\\]{\n  max-width: 3rem;\n}\n.max-w-screen-md{\n  max-width: 768px;\n}\n.-translate-x-1\\/2{\n  --tw-translate-x: -50%;\n  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n@-webkit-keyframes spin{\n  to{\n    transform: rotate(360deg);\n  }\n}\n@keyframes spin{\n  to{\n    transform: rotate(360deg);\n  }\n}\n.animate-spin{\n  -webkit-animation: spin 1s linear infinite;\n          animation: spin 1s linear infinite;\n}\n.cursor-pointer{\n  cursor: pointer;\n}\n.snap-x{\n  scroll-snap-type: x var(--tw-scroll-snap-strictness);\n}\n.snap-y{\n  scroll-snap-type: y var(--tw-scroll-snap-strictness);\n}\n.snap-mandatory{\n  --tw-scroll-snap-strictness: mandatory;\n}\n.snap-start{\n  scroll-snap-align: start;\n}\n.snap-always{\n  scroll-snap-stop: always;\n}\n.grid-cols-2{\n  grid-template-columns: repeat(2, minmax(0, 1fr));\n}\n.grid-cols-\\[2fr_1\\.5fr\\]{\n  grid-template-columns: 2fr 1.5fr;\n}\n.flex-col{\n  flex-direction: column;\n}\n.flex-nowrap{\n  flex-wrap: nowrap;\n}\n.items-center{\n  align-items: center;\n}\n.justify-center{\n  justify-content: center;\n}\n.gap-2{\n  gap: 0.5rem;\n}\n.gap-1{\n  gap: 0.25rem;\n}\n.overflow-hidden{\n  overflow: hidden;\n}\n.overflow-clip{\n  overflow: clip;\n}\n.overflow-scroll{\n  overflow: scroll;\n}\n.overflow-x-scroll{\n  overflow-x: scroll;\n}\n.whitespace-nowrap{\n  white-space: nowrap;\n}\n.rounded-lg{\n  border-radius: 0.5rem;\n}\n.border{\n  border-width: 1px;\n}\n.border-gray-500{\n  --tw-border-opacity: 1;\n  border-color: rgb(107 114 128 / var(--tw-border-opacity));\n}\n.border-gray-300{\n  --tw-border-opacity: 1;\n  border-color: rgb(209 213 219 / var(--tw-border-opacity));\n}\n.bg-gray-50{\n  --tw-bg-opacity: 1;\n  background-color: rgb(249 250 251 / var(--tw-bg-opacity));\n}\n.p-3{\n  padding: 0.75rem;\n}\n.p-1{\n  padding: 0.25rem;\n}\n.px-2{\n  padding-left: 0.5rem;\n  padding-right: 0.5rem;\n}\n.px-3{\n  padding-left: 0.75rem;\n  padding-right: 0.75rem;\n}\n.py-5{\n  padding-top: 1.25rem;\n  padding-bottom: 1.25rem;\n}\n.py-3{\n  padding-top: 0.75rem;\n  padding-bottom: 0.75rem;\n}\n.pl-2{\n  padding-left: 0.5rem;\n}\n.text-base{\n  font-size: 1rem;\n  line-height: 1.5rem;\n}\n.text-sm{\n  font-size: 0.875rem;\n  line-height: 1.25rem;\n}\n.text-xs{\n  font-size: 0.75rem;\n  line-height: 1rem;\n}\n.font-bold{\n  font-weight: 700;\n}\n.leading-6{\n  line-height: 1.5rem;\n}\n.text-white{\n  --tw-text-opacity: 1;\n  color: rgb(255 255 255 / var(--tw-text-opacity));\n}\n.text-gray-900{\n  --tw-text-opacity: 1;\n  color: rgb(17 24 39 / var(--tw-text-opacity));\n}\n.opacity-0{\n  opacity: 0;\n}\n.opacity-30{\n  opacity: 0.3;\n}\n.outline{\n  outline-style: solid;\n}\n.outline-2{\n  outline-width: 2px;\n}\n.outline-offset-\\[-2px\\]{\n  outline-offset: -2px;\n}\n.transition-all{\n  transition-property: all;\n  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n  transition-duration: 150ms;\n}\n.duration-200{\n  transition-duration: 200ms;\n}\n.ease-in-out{\n  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n}\n.hover\\:outline:hover{\n  outline-style: solid;\n}\n.focus\\:border-blue-500:focus{\n  --tw-border-opacity: 1;\n  border-color: rgb(59 130 246 / var(--tw-border-opacity));\n}\n.focus\\:ring-blue-500:focus{\n  --tw-ring-opacity: 1;\n  --tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity));\n}\n.disabled\\:opacity-50:disabled{\n  opacity: 0.5;\n}\n@media (prefers-color-scheme: dark){\n  .dark\\:border-gray-300{\n    --tw-border-opacity: 1;\n    border-color: rgb(209 213 219 / var(--tw-border-opacity));\n  }\n  .dark\\:bg-gray-50{\n    --tw-bg-opacity: 1;\n    background-color: rgb(249 250 251 / var(--tw-bg-opacity));\n  }\n  .dark\\:focus\\:ring-blue-500:focus{\n    --tw-ring-opacity: 1;\n    --tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity));\n  }\n}\n@media (min-width: 530px){\n  .sm\\:max-h-\\[none\\]{\n    max-height: none;\n  }\n  .sm\\:grid-cols-3{\n    grid-template-columns: repeat(3, minmax(0, 1fr));\n  }\n  .sm\\:grid-cols-2{\n    grid-template-columns: repeat(2, minmax(0, 1fr));\n  }\n  .sm\\:flex-row{\n    flex-direction: row;\n  }\n}\n')();
+const _layout = create_ssr_component(($$result, $$props, $$bindings, slots) => {
+  return `${slots.default ? slots.default({}) : ``}`;
+});
+export { _layout as default };
diff --git a/frontend/.svelte-kit/output/server/entries/pages/index.svelte.js b/frontend/.svelte-kit/output/server/entries/pages/index.svelte.js
new file mode 100644
index 0000000000000000000000000000000000000000..259af01855a97739709a1fad0992e2b4b9ae7318
--- /dev/null
+++ b/frontend/.svelte-kit/output/server/entries/pages/index.svelte.js
@@ -0,0 +1,347 @@
+import { n as noop, a as safe_not_equal, c as create_ssr_component, b as subscribe, d as each, e as escape, f as add_attribute, g as set_store_value, v as validate_component } from "../../chunks/index-445fd704.js";
+import { b as base } from "../../chunks/paths-396f020f.js";
+import "nanoid";
+import "px-brush";
+const COLOR_LIST = [
+  { color: [219, 14, 154], label: "building" },
+  { color: [147, 142, 123], label: "pervious surface" },
+  { color: [248, 12, 0], label: "impervious surface" },
+  { color: [169, 113, 1], label: "bare soil" },
+  { color: [21, 83, 174], label: "water" },
+  { color: [25, 74, 38], label: "coniferous" },
+  { color: [70, 228, 131], label: "deciduous" },
+  { color: [243, 166, 13], label: "brushwood" },
+  { color: [102, 0, 130], label: "vineyard" },
+  { color: [85, 255, 0], label: "herbaceous vegetation" },
+  { color: [255, 243, 13], label: "agricultural land" },
+  { color: [228, 223, 124], label: "plowed land" },
+  { color: [61, 230, 235], label: "swimming pool" },
+  { color: [255, 255, 255], label: "snow" },
+  { color: [138, 179, 160], label: "clear cut" },
+  { color: [107, 113, 79], label: "mixed" }
+];
+const IMAGES_LIST = [
+  "/samples/default.jpg",
+  "/samples/example0.png",
+  "/samples/example1.png",
+  "/samples/example2.png",
+  "/samples/example3.png",
+  "/samples/example4.png",
+  "/samples/example5.png",
+  "/samples/example6.jpg"
+];
+const PRESETS = [
+  ["High resolution satellite image, 4K, ultra detailed", "Realistic"],
+  ["Colorful lego bricks", "Lego brick"],
+  ["Black and white paper pencil drawing", "Pencil"],
+  ["Oil on canvas painting", "Painting"]
+];
+const subscriber_queue = [];
+function writable(value, start = noop) {
+  let stop;
+  const subscribers = /* @__PURE__ */ new Set();
+  function set(new_value) {
+    if (safe_not_equal(value, new_value)) {
+      value = new_value;
+      if (stop) {
+        const run_queue = !subscriber_queue.length;
+        for (const subscriber of subscribers) {
+          subscriber[1]();
+          subscriber_queue.push(subscriber, value);
+        }
+        if (run_queue) {
+          for (let i = 0; i < subscriber_queue.length; i += 2) {
+            subscriber_queue[i][0](subscriber_queue[i + 1]);
+          }
+          subscriber_queue.length = 0;
+        }
+      }
+    }
+  }
+  function update(fn) {
+    set(fn(value));
+  }
+  function subscribe2(run, invalidate = noop) {
+    const subscriber = [run, invalidate];
+    subscribers.add(subscriber);
+    if (subscribers.size === 1) {
+      stop = start(set) || noop;
+    }
+    run(value);
+    return () => {
+      subscribers.delete(subscriber);
+      if (subscribers.size === 0) {
+        stop();
+        stop = null;
+      }
+    };
+  }
+  return { set, update, subscribe: subscribe2 };
+}
+function randomSeed() {
+  return BigInt(13248873089935215e3 & ((1 << 63) - 1) * Math.random());
+}
+const drawingLayers = writable(/* @__PURE__ */ new Map());
+const resultImage = writable();
+const currentCanvas = writable();
+const selectedImage = writable();
+const selectedBrush = writable();
+const selectedParams = writable({
+  prompt: "Aerial view of rue des Lilas, Toulouse, Haute-Garonne, France",
+  modifier: PRESETS[0][0],
+  seed: randomSeed(),
+  steps: 20
+});
+const generateMap = writable(false);
+const saveResult = writable(false);
+var TemplateGallery_svelte_svelte_type_style_lang = /* @__PURE__ */ (() => "form.svelte-1gwcbp.svelte-1gwcbp{width:100%;overflow:hidden\n}.samples.svelte-1gwcbp.svelte-1gwcbp{display:flex;scroll-snap-type:x var(--tw-scroll-snap-strictness);--tw-scroll-snap-strictness:mandatory;flex-wrap:nowrap;gap:0.25rem;overflow-x:scroll;-ms-overflow-style:none;scrollbar-width:none\n}.samples.svelte-1gwcbp.svelte-1gwcbp::-webkit-scrollbar{display:none\n}input[type='radio'].svelte-1gwcbp.svelte-1gwcbp{position:absolute;display:none;height:0px;width:0px;opacity:0\n}input[type='radio'].svelte-1gwcbp.svelte-1gwcbp:disabled{opacity:0.5\n}input[type='radio'].svelte-1gwcbp:checked~label.svelte-1gwcbp{outline-style:solid;outline-width:2px;outline-color:#eab308\n}input[type='radio'].svelte-1gwcbp:disabled+label.svelte-1gwcbp{opacity:0.5\n}label.svelte-1gwcbp.svelte-1gwcbp{display:flex;cursor:pointer;outline-width:2px;outline-offset:-2px;outline-color:#eab308;transition-property:all;transition-duration:200ms;transition-timing-function:cubic-bezier(0.4, 0, 0.2, 1)\n}label.svelte-1gwcbp.svelte-1gwcbp:hover{outline-style:solid\n}img.svelte-1gwcbp.svelte-1gwcbp{max-height:6rem;max-width:none\n}")();
+const css$5 = {
+  code: "form.svelte-1gwcbp.svelte-1gwcbp{width:100%;overflow:hidden\n}.samples.svelte-1gwcbp.svelte-1gwcbp{display:flex;scroll-snap-type:x var(--tw-scroll-snap-strictness);--tw-scroll-snap-strictness:mandatory;flex-wrap:nowrap;gap:0.25rem;overflow-x:scroll;-ms-overflow-style:none;scrollbar-width:none\n}.samples.svelte-1gwcbp.svelte-1gwcbp::-webkit-scrollbar{display:none\n}input[type='radio'].svelte-1gwcbp.svelte-1gwcbp{position:absolute;display:none;height:0px;width:0px;opacity:0\n}input[type='radio'].svelte-1gwcbp.svelte-1gwcbp:disabled{opacity:0.5\n}input[type='radio'].svelte-1gwcbp:checked~label.svelte-1gwcbp{outline-style:solid;outline-width:2px;outline-color:#eab308\n}input[type='radio'].svelte-1gwcbp:disabled+label.svelte-1gwcbp{opacity:0.5\n}label.svelte-1gwcbp.svelte-1gwcbp{display:flex;cursor:pointer;outline-width:2px;outline-offset:-2px;outline-color:#eab308;transition-property:all;transition-duration:200ms;transition-timing-function:cubic-bezier(0.4, 0, 0.2, 1)\n}label.svelte-1gwcbp.svelte-1gwcbp:hover{outline-style:solid\n}img.svelte-1gwcbp.svelte-1gwcbp{max-height:6rem;max-width:none\n}",
+  map: null
+};
+const TemplateGallery = create_ssr_component(($$result, $$props, $$bindings, slots) => {
+  let $$unsubscribe_selectedImage;
+  let $generateMap, $$unsubscribe_generateMap;
+  $$unsubscribe_selectedImage = subscribe(selectedImage, (value) => value);
+  $$unsubscribe_generateMap = subscribe(generateMap, (value) => $generateMap = value);
+  $$result.css.add(css$5);
+  $$unsubscribe_selectedImage();
+  $$unsubscribe_generateMap();
+  return `<div><h4 class="${"font-bold mt-6 mb-2 my-6 leading-6"}">Select a Template</h4>
+	<form class="${"svelte-1gwcbp"}"><div class="${"samples  svelte-1gwcbp"}">${each(IMAGES_LIST, (file_name, id) => {
+    return `<div class="${"snap-always snap-start"}"><input type="${"radio"}" name="${"samples"}" id="${"sample-" + escape(id)}"${add_attribute("value", id, 0)} ${$generateMap === true ? "disabled" : ""} class="${"svelte-1gwcbp"}">
+					<label for="${"sample-" + escape(id)}" class="${"svelte-1gwcbp"}"><img${add_attribute("src", base + file_name, 0)}${add_attribute("alt", file_name, 0)} class="${"svelte-1gwcbp"}"></label>
+				</div>`;
+  })}</div></form>
+</div>`;
+});
+var BrushSelector_svelte_svelte_type_style_lang = /* @__PURE__ */ (() => ".colors.svelte-1oy4poo.svelte-1oy4poo{display:grid;max-height:9rem;scroll-snap-type:y var(--tw-scroll-snap-strictness);--tw-scroll-snap-strictness:mandatory;grid-template-columns:repeat(2, minmax(0, 1fr));gap:0.5rem;overflow:scroll\n}@media(min-width: 530px){.colors.svelte-1oy4poo.svelte-1oy4poo{max-height:none;grid-template-columns:repeat(3, minmax(0, 1fr))\n    }}.colors.svelte-1oy4poo span.svelte-1oy4poo{margin-left:0.5rem\n}.colors.svelte-1oy4poo svg.svelte-1oy4poo{display:block\n}input[type='radio'].svelte-1oy4poo.svelte-1oy4poo{position:absolute;display:none;height:0px;width:0px;opacity:0\n}input[type='radio'].svelte-1oy4poo:checked~label.svelte-1oy4poo{outline-style:solid;outline-width:2px;outline-color:#eab308\n}label.svelte-1oy4poo.svelte-1oy4poo{display:flex;cursor:pointer;white-space:nowrap;outline-width:2px;outline-offset:-2px;outline-color:#eab308;transition-property:all;transition-duration:200ms;transition-timing-function:cubic-bezier(0.4, 0, 0.2, 1)\n}label.svelte-1oy4poo.svelte-1oy4poo:hover{outline-style:solid\n}.brush.svelte-1oy4poo.svelte-1oy4poo{display:flex\n}")();
+const css$4 = {
+  code: ".colors.svelte-1oy4poo.svelte-1oy4poo{display:grid;max-height:9rem;scroll-snap-type:y var(--tw-scroll-snap-strictness);--tw-scroll-snap-strictness:mandatory;grid-template-columns:repeat(2, minmax(0, 1fr));gap:0.5rem;overflow:scroll\n}@media(min-width: 530px){.colors.svelte-1oy4poo.svelte-1oy4poo{max-height:none;grid-template-columns:repeat(3, minmax(0, 1fr))\n    }}.colors.svelte-1oy4poo span.svelte-1oy4poo{margin-left:0.5rem\n}.colors.svelte-1oy4poo svg.svelte-1oy4poo{display:block\n}input[type='radio'].svelte-1oy4poo.svelte-1oy4poo{position:absolute;display:none;height:0px;width:0px;opacity:0\n}input[type='radio'].svelte-1oy4poo:checked~label.svelte-1oy4poo{outline-style:solid;outline-width:2px;outline-color:#eab308\n}label.svelte-1oy4poo.svelte-1oy4poo{display:flex;cursor:pointer;white-space:nowrap;outline-width:2px;outline-offset:-2px;outline-color:#eab308;transition-property:all;transition-duration:200ms;transition-timing-function:cubic-bezier(0.4, 0, 0.2, 1)\n}label.svelte-1oy4poo.svelte-1oy4poo:hover{outline-style:solid\n}.brush.svelte-1oy4poo.svelte-1oy4poo{display:flex\n}",
+  map: null
+};
+const STARTCOLORID = 6;
+const BrushSelector = create_ssr_component(($$result, $$props, $$bindings, slots) => {
+  let $selectedBrush, $$unsubscribe_selectedBrush;
+  $$unsubscribe_selectedBrush = subscribe(selectedBrush, (value) => $selectedBrush = value);
+  const { color, label } = COLOR_LIST[STARTCOLORID];
+  let brushColor = `rgb(${color.join(",")})`;
+  let brushSize = 40;
+  set_store_value(selectedBrush, $selectedBrush = {
+    color: brushColor,
+    size: brushSize,
+    label
+  }, $selectedBrush);
+  $$result.css.add(css$4);
+  $$unsubscribe_selectedBrush();
+  return `<form><h4 class="${"font-bold mt-6 mb-2 leading-6 my-3"}">Brush Type</h4>
+	<div class="${"colors svelte-1oy4poo"}" name="${"colors"}">${each(COLOR_LIST, (color2, id) => {
+    return `<div class="${"snap-always snap-start"}"><input name="${"color"}" ${id == STARTCOLORID ? "checked" : ""} type="${"radio"}" id="${"color-" + escape(id)}"${add_attribute("value", id, 0)} class="${"svelte-1oy4poo"}">
+				<label for="${"color-" + escape(id)}" class="${"svelte-1oy4poo"}"><svg width="${"20"}" height="${"20"}" viewBox="${"0 0 20 20"}" class="${"svelte-1oy4poo"}"><rect x="${"0"}" y="${"0"}" width="${"20"}" height="${"20"}" fill="${"rgb(" + escape(color2.color.join(",")) + ")"}"></rect></svg>
+					<span class="${"svelte-1oy4poo"}">${escape(color2.label)}</span></label>
+			</div>`;
+  })}</div>
+	<h4 class="${"font-bold mt-6 mb-2 my-6 leading-6"}">Brush Size</h4>
+	<div class="${"brush svelte-1oy4poo"}"><input value="${"10"}" min="${"1"}" max="${"150"}" step="${"1"}" name="${"brush"}" type="${"range"}">
+		<label class="${"pl-2 svelte-1oy4poo"}" for="${"brush"}">${escape($selectedBrush.size)}</label></div>
+</form>`;
+});
+var ParamsSelector_svelte_svelte_type_style_lang = /* @__PURE__ */ (() => "@media(min-width: 530px){}select.svelte-7to72y.svelte-7to72y,button.svelte-7to72y.svelte-7to72y,input.svelte-7to72y.svelte-7to72y{border-radius:0.5rem;border-width:1px;--tw-border-opacity:1;border-color:rgb(209 213 219 / var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(249 250 251 / var(--tw-bg-opacity));padding:0.25rem;font-size:0.875rem;line-height:1.25rem;--tw-text-opacity:1;color:rgb(17 24 39 / var(--tw-text-opacity))\n}select.svelte-7to72y.svelte-7to72y:focus,button.svelte-7to72y.svelte-7to72y:focus,input.svelte-7to72y.svelte-7to72y:focus{--tw-border-opacity:1;border-color:rgb(59 130 246 / var(--tw-border-opacity));--tw-ring-opacity:1;--tw-ring-color:rgb(59 130 246 / var(--tw-ring-opacity))\n}select.svelte-7to72y.svelte-7to72y:disabled,button.svelte-7to72y.svelte-7to72y:disabled,input.svelte-7to72y.svelte-7to72y:disabled{opacity:0.5\n}@media(prefers-color-scheme: dark){select.svelte-7to72y.svelte-7to72y,button.svelte-7to72y.svelte-7to72y,input.svelte-7to72y.svelte-7to72y{--tw-border-opacity:1;border-color:rgb(209 213 219 / var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(249 250 251 / var(--tw-bg-opacity))\n    }select.svelte-7to72y.svelte-7to72y:focus,button.svelte-7to72y.svelte-7to72y:focus,input.svelte-7to72y.svelte-7to72y:focus{--tw-border-opacity:1;border-color:rgb(59 130 246 / var(--tw-border-opacity));--tw-ring-opacity:1;--tw-ring-color:rgb(59 130 246 / var(--tw-ring-opacity))\n    }}input.svelte-7to72y:disabled+label.svelte-7to72y{opacity:0.5\n}input.svelte-7to72y.svelte-7to72y{padding-left:0.75rem\n}")();
+const css$3 = {
+  code: "@media(min-width: 530px){}select.svelte-7to72y.svelte-7to72y,button.svelte-7to72y.svelte-7to72y,input.svelte-7to72y.svelte-7to72y{border-radius:0.5rem;border-width:1px;--tw-border-opacity:1;border-color:rgb(209 213 219 / var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(249 250 251 / var(--tw-bg-opacity));padding:0.25rem;font-size:0.875rem;line-height:1.25rem;--tw-text-opacity:1;color:rgb(17 24 39 / var(--tw-text-opacity))\n}select.svelte-7to72y.svelte-7to72y:focus,button.svelte-7to72y.svelte-7to72y:focus,input.svelte-7to72y.svelte-7to72y:focus{--tw-border-opacity:1;border-color:rgb(59 130 246 / var(--tw-border-opacity));--tw-ring-opacity:1;--tw-ring-color:rgb(59 130 246 / var(--tw-ring-opacity))\n}select.svelte-7to72y.svelte-7to72y:disabled,button.svelte-7to72y.svelte-7to72y:disabled,input.svelte-7to72y.svelte-7to72y:disabled{opacity:0.5\n}@media(prefers-color-scheme: dark){select.svelte-7to72y.svelte-7to72y,button.svelte-7to72y.svelte-7to72y,input.svelte-7to72y.svelte-7to72y{--tw-border-opacity:1;border-color:rgb(209 213 219 / var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(249 250 251 / var(--tw-bg-opacity))\n    }select.svelte-7to72y.svelte-7to72y:focus,button.svelte-7to72y.svelte-7to72y:focus,input.svelte-7to72y.svelte-7to72y:focus{--tw-border-opacity:1;border-color:rgb(59 130 246 / var(--tw-border-opacity));--tw-ring-opacity:1;--tw-ring-color:rgb(59 130 246 / var(--tw-ring-opacity))\n    }}input.svelte-7to72y:disabled+label.svelte-7to72y{opacity:0.5\n}input.svelte-7to72y.svelte-7to72y{padding-left:0.75rem\n}",
+  map: null
+};
+const ParamsSelector = create_ssr_component(($$result, $$props, $$bindings, slots) => {
+  let $selectedParams, $$unsubscribe_selectedParams;
+  let $generateMap, $$unsubscribe_generateMap;
+  $$unsubscribe_selectedParams = subscribe(selectedParams, (value) => $selectedParams = value);
+  $$unsubscribe_generateMap = subscribe(generateMap, (value) => $generateMap = value);
+  let form;
+  let seed = $selectedParams.seed;
+  let sampleSteps = $selectedParams.steps;
+  let prompt = $selectedParams.prompt;
+  let modifier = $selectedParams.modifier;
+  $$result.css.add(css$3);
+  $$unsubscribe_selectedParams();
+  $$unsubscribe_generateMap();
+  return `<form${add_attribute("this", form, 0)}><h4 class="${"font-bold mt-6 mb-2 my-6 leading-6"}">Prompt</h4>
+	<input name="${"prompt"}" placeholder="${"Aerial view of ..., France."}" ${$generateMap === true ? "disabled" : ""} style="${"width: 500px;"}" class="${"svelte-7to72y"}"${add_attribute("value", prompt, 0)}>
+
+	<h4 class="${"font-bold mt-6 mb-2 my-6 leading-6"}">Modifier</h4>
+	<input name="${"modifier"}" placeholder="${"High resolution satellite image"}" ${$generateMap === true ? "disabled" : ""} style="${"width: 500px;"}" class="${"svelte-7to72y"}"${add_attribute("value", modifier, 0)}>
+	<select name="${"presets"}" ${$generateMap === true ? "disabled" : ""} class="${"svelte-7to72y"}"><option disabled selected value="${"preset"}">preset</option>${each(PRESETS, (preset) => {
+    return `<option${add_attribute("value", preset[0], 0)}>${escape(preset[1])}</option>\``;
+  })}</select>
+
+	<h4 class="${"font-bold mt-6 mb-2 my-6 leading-6"}">Random Seed</h4>
+	<input type="${"Number"}" name="${"seed"}" placeholder="${"Integer Seed"}" ${$generateMap === true ? "disabled" : ""} class="${"svelte-7to72y"}"${add_attribute("value", seed, 0)}>
+	<button ${$generateMap === true ? "disabled" : ""} class="${"svelte-7to72y"}">Random
+	</button>
+	<h4 class="${"font-bold mt-6 mb-2 my-6 leading-6"}">Sample Steps</h4>
+	<div class="${"flex"}"><input type="${"range"}" name="${"steps"}" min="${"10"}" max="${"30"}" step="${"1"}" ${$generateMap === true ? "disabled" : ""} class="${"svelte-7to72y"}"${add_attribute("value", sampleSteps, 0)}>
+		<label class="${"pl-2 svelte-7to72y"}" for="${"steps"}">${escape(sampleSteps)}</label></div>
+</form>`;
+});
+const Undo = create_ssr_component(($$result, $$props, $$bindings, slots) => {
+  let { classNames = "" } = $$props;
+  if ($$props.classNames === void 0 && $$bindings.classNames && classNames !== void 0)
+    $$bindings.classNames(classNames);
+  return `<svg xmlns="${"http://www.w3.org/2000/svg"}" width="${"20"}" viewBox="${"0 0 512 512"}"${add_attribute("class", classNames, 0)}><path fill="${"white"}" stroke="${"black"}" stroke-width="${"30"}" d="${"M480 256c0 123.4-100.5 223.9-223.9 223.9c-48.84 0-95.17-15.58-134.2-44.86c-14.12-10.59-16.97-30.66-6.375-44.81c10.59-14.12 30.62-16.94 44.81-6.375c27.84 20.91 61 31.94 95.88 31.94C344.3 415.8 416 344.1 416 256s-71.69-159.8-159.8-159.8c-37.46 0-73.09 13.49-101.3 36.64l45.12 45.14c17.01 17.02 4.955 46.1-19.1 46.1H35.17C24.58 224.1 16 215.5 16 204.9V59.04c0-24.04 29.07-36.08 46.07-19.07l47.6 47.63C149.9 52.71 201.5 32.11 256.1 32.11C379.5 32.11 480 132.6 480 256z"}"></path></svg>`;
+});
+var DrawingCanvas_svelte_svelte_type_style_lang = /* @__PURE__ */ (() => ".canvas.svelte-vhujxn{z-index:0;aspect-ratio:512/512;width:100%;max-width:100%;border-width:1px;--tw-border-opacity:1;border-color:rgb(107 114 128 / var(--tw-border-opacity))\n}.brush.svelte-vhujxn{pointer-events:none;position:absolute;z-index:10;--tw-translate-x:-50%;--tw-translate-y:-50%;transform:translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))\n}.label.svelte-vhujxn{pointer-events:none;position:absolute;top:0px;left:0px;z-index:20;-webkit-user-select:none;-moz-user-select:none;user-select:none;padding-left:0.5rem;padding-right:0.5rem;font-size:1rem;line-height:1.5rem;--tw-text-opacity:1;color:rgb(255 255 255 / var(--tw-text-opacity));color:white;font-weight:bolder;-webkit-text-stroke:1px black;-webkit-text-fill-color:white\n}")();
+const css$2 = {
+  code: ".canvas.svelte-vhujxn{z-index:0;aspect-ratio:512/512;width:100%;max-width:100%;border-width:1px;--tw-border-opacity:1;border-color:rgb(107 114 128 / var(--tw-border-opacity))\n}.brush.svelte-vhujxn{pointer-events:none;position:absolute;z-index:10;--tw-translate-x:-50%;--tw-translate-y:-50%;transform:translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))\n}.label.svelte-vhujxn{pointer-events:none;position:absolute;top:0px;left:0px;z-index:20;-webkit-user-select:none;-moz-user-select:none;user-select:none;padding-left:0.5rem;padding-right:0.5rem;font-size:1rem;line-height:1.5rem;--tw-text-opacity:1;color:rgb(255 255 255 / var(--tw-text-opacity));color:white;font-weight:bolder;-webkit-text-stroke:1px black;-webkit-text-fill-color:white\n}",
+  map: null
+};
+function drawImage(ctx, img) {
+  ctx.drawImage(img, 0, 0, ctx.canvas.width, ctx.canvas.height);
+}
+const DrawingCanvas = create_ssr_component(($$result, $$props, $$bindings, slots) => {
+  let $drawingLayers, $$unsubscribe_drawingLayers;
+  let $selectedImage, $$unsubscribe_selectedImage;
+  let $selectedBrush, $$unsubscribe_selectedBrush;
+  let $$unsubscribe_currentCanvas;
+  $$unsubscribe_drawingLayers = subscribe(drawingLayers, (value) => $drawingLayers = value);
+  $$unsubscribe_selectedImage = subscribe(selectedImage, (value) => $selectedImage = value);
+  $$unsubscribe_selectedBrush = subscribe(selectedBrush, (value) => $selectedBrush = value);
+  $$unsubscribe_currentCanvas = subscribe(currentCanvas, (value) => value);
+  let canvas;
+  let brush;
+  let ctx;
+  $$result.css.add(css$2);
+  {
+    {
+      if ($selectedImage) {
+        drawImage(ctx, $selectedImage);
+        set_store_value(drawingLayers, $drawingLayers = /* @__PURE__ */ new Map(), $drawingLayers);
+      }
+    }
+  }
+  $$unsubscribe_drawingLayers();
+  $$unsubscribe_selectedImage();
+  $$unsubscribe_selectedBrush();
+  $$unsubscribe_currentCanvas();
+  return `<div><div class="${"relative overflow-clip"}"><canvas class="${"canvas svelte-vhujxn"}" width="${"512"}" height="${"512"}"${add_attribute("this", canvas, 0)}></canvas>
+		<canvas class="${"brush svelte-vhujxn"}" width="${"10"}" height="${"10"}"${add_attribute("this", brush, 0)}></canvas>
+		<span class="${"label svelte-vhujxn"}">${escape($selectedBrush == null ? void 0 : $selectedBrush.label)}</span>
+		<button class="${"absolute bottom-0 left-0 p-3"}" ${$drawingLayers.size <= 0 ? "disabled" : ""}>${validate_component(Undo, "UndoIcon").$$render($$result, {}, {}, {})}</button></div>
+</div>`;
+});
+var ResultCanvas_svelte_svelte_type_style_lang = /* @__PURE__ */ (() => ".image.svelte-1t0h0rs{z-index:0;box-sizing:border-box;aspect-ratio:512/512;border-width:1px;--tw-border-opacity:1;border-color:rgb(107 114 128 / var(--tw-border-opacity))\n}@media(prefers-color-scheme: dark){.image.svelte-1t0h0rs{--tw-border-opacity:1;border-color:rgb(209 213 219 / var(--tw-border-opacity))\n    }}.loading.svelte-1t0h0rs{position:absolute;top:0px;left:0px;right:0px;bottom:0px;display:flex;flex-direction:column;align-items:center;justify-content:center\n}")();
+const css$1 = {
+  code: ".image.svelte-1t0h0rs{z-index:0;box-sizing:border-box;aspect-ratio:512/512;border-width:1px;--tw-border-opacity:1;border-color:rgb(107 114 128 / var(--tw-border-opacity))\n}@media(prefers-color-scheme: dark){.image.svelte-1t0h0rs{--tw-border-opacity:1;border-color:rgb(209 213 219 / var(--tw-border-opacity))\n    }}.loading.svelte-1t0h0rs{position:absolute;top:0px;left:0px;right:0px;bottom:0px;display:flex;flex-direction:column;align-items:center;justify-content:center\n}",
+  map: null
+};
+let predictStatus = "";
+async function saveImage(base64Image) {
+  return new Promise((resolve, reject) => {
+    try {
+      const a = document.createElement("a");
+      a.download = `sucess-${Date.now()}.png`;
+      a.target = "_self";
+      a.onclick = async (e) => {
+        if (a.href) {
+          URL.revokeObjectURL(a.href);
+        }
+        a.href = base64Image;
+      };
+      requestAnimationFrame(() => {
+        console.log("Downloading image.");
+        a.click();
+        resolve(null);
+      });
+    } catch (err) {
+      reject();
+    }
+  });
+}
+async function predict(base64Image, { prompt, modifier, steps, seed }) {
+  const response = await fetch("/predict", {
+    method: "POST",
+    headers: { "Content-Type": "application/json" },
+    body: JSON.stringify({
+      data: [base64Image, prompt + ". " + modifier, steps, seed.toString()]
+    })
+  });
+  if (!response.ok) {
+    throw new Error("Prediction request failed.");
+  }
+  const result = await response.text();
+  return result;
+}
+const ResultCanvas = create_ssr_component(($$result, $$props, $$bindings, slots) => {
+  let $saveResult, $$unsubscribe_saveResult;
+  let $resultImage, $$unsubscribe_resultImage;
+  let $generateMap, $$unsubscribe_generateMap;
+  let $selectedParams, $$unsubscribe_selectedParams;
+  let $currentCanvas, $$unsubscribe_currentCanvas;
+  $$unsubscribe_saveResult = subscribe(saveResult, (value) => $saveResult = value);
+  $$unsubscribe_resultImage = subscribe(resultImage, (value) => $resultImage = value);
+  $$unsubscribe_generateMap = subscribe(generateMap, (value) => $generateMap = value);
+  $$unsubscribe_selectedParams = subscribe(selectedParams, (value) => $selectedParams = value);
+  $$unsubscribe_currentCanvas = subscribe(currentCanvas, (value) => $currentCanvas = value);
+  $$result.css.add(css$1);
+  {
+    (async () => {
+      if ($generateMap) {
+        const results = await predict($currentCanvas.toDataURL(), $selectedParams);
+        set_store_value(resultImage, $resultImage = results, $resultImage);
+        set_store_value(generateMap, $generateMap = false, $generateMap);
+      }
+    })();
+  }
+  {
+    (async () => {
+      if ($saveResult) {
+        await saveImage($resultImage);
+        set_store_value(saveResult, $saveResult = false, $saveResult);
+      }
+    })();
+  }
+  $$unsubscribe_saveResult();
+  $$unsubscribe_resultImage();
+  $$unsubscribe_generateMap();
+  $$unsubscribe_selectedParams();
+  $$unsubscribe_currentCanvas();
+  return `<div class="${"relative overflow-clip flex flex-col justify-center items-center w-full h-full"}">${$resultImage ? `<img class="${"image " + escape($generateMap ? "opacity-30" : "") + " svelte-1t0h0rs"}" alt="${"Generative Map Result"}"${add_attribute("src", $resultImage, 0)} width="${"512"}" height="${"512"}">` : ``}
+	${$generateMap ? `<div class="${"loading svelte-1t0h0rs"}"><svg xmlns="${"http://www.w3.org/2000/svg"}" fill="${"none"}" viewBox="${"0 0 24 24"}" class="${"animate-spin max-w-[3rem]"}"><path fill="${"currentColor"}" d="${"M20 12a8 8 0 0 1-8 8v4a12 12 0 0 0 12-12h-4Zm-2-5.3a8 8 0 0 1 2 5.3h4c0-3-1.1-5.8-3-8l-3 2.7Z"}"></path></svg>
+			<span class="${"text-xs"}">${escape(predictStatus)}</span></div>` : ``}</div>
+
+`;
+});
+var index_svelte_svelte_type_style_lang = /* @__PURE__ */ (() => ".drawings.svelte-1sy339h{display:grid;grid-template-columns:2fr 1.5fr;place-items:center}@media(min-width: 530px){.drawings.svelte-1sy339h{grid-template-columns:repeat(2, minmax(0, 1fr))}}button.svelte-1sy339h{border-radius:0.5rem;border-width:1px;--tw-border-opacity:1;border-color:rgb(209 213 219 / var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(249 250 251 / var(--tw-bg-opacity));padding:0.25rem;font-size:0.875rem;line-height:1.25rem;--tw-text-opacity:1;color:rgb(17 24 39 / var(--tw-text-opacity))}button.svelte-1sy339h:focus{--tw-border-opacity:1;border-color:rgb(59 130 246 / var(--tw-border-opacity));--tw-ring-opacity:1;--tw-ring-color:rgb(59 130 246 / var(--tw-ring-opacity))}button.svelte-1sy339h:disabled{opacity:0.5}@media(prefers-color-scheme: dark){button.svelte-1sy339h{--tw-border-opacity:1;border-color:rgb(209 213 219 / var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(249 250 251 / var(--tw-bg-opacity))}button.svelte-1sy339h:focus{--tw-border-opacity:1;border-color:rgb(59 130 246 / var(--tw-border-opacity));--tw-ring-opacity:1;--tw-ring-color:rgb(59 130 246 / var(--tw-ring-opacity))}}.green.svelte-1sy339h{background-color:lightgreen;font-weight:bold;font-size:1.2em}")();
+const css = {
+  code: ".drawings.svelte-1sy339h{display:grid;grid-template-columns:2fr 1.5fr;place-items:center}@media(min-width: 530px){.drawings.svelte-1sy339h{grid-template-columns:repeat(2, minmax(0, 1fr))}}button.svelte-1sy339h{border-radius:0.5rem;border-width:1px;--tw-border-opacity:1;border-color:rgb(209 213 219 / var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(249 250 251 / var(--tw-bg-opacity));padding:0.25rem;font-size:0.875rem;line-height:1.25rem;--tw-text-opacity:1;color:rgb(17 24 39 / var(--tw-text-opacity))}button.svelte-1sy339h:focus{--tw-border-opacity:1;border-color:rgb(59 130 246 / var(--tw-border-opacity));--tw-ring-opacity:1;--tw-ring-color:rgb(59 130 246 / var(--tw-ring-opacity))}button.svelte-1sy339h:disabled{opacity:0.5}@media(prefers-color-scheme: dark){button.svelte-1sy339h{--tw-border-opacity:1;border-color:rgb(209 213 219 / var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(249 250 251 / var(--tw-bg-opacity))}button.svelte-1sy339h:focus{--tw-border-opacity:1;border-color:rgb(59 130 246 / var(--tw-border-opacity));--tw-ring-opacity:1;--tw-ring-color:rgb(59 130 246 / var(--tw-ring-opacity))}}.green.svelte-1sy339h{background-color:lightgreen;font-weight:bold;font-size:1.2em}",
+  map: null
+};
+const Routes = create_ssr_component(($$result, $$props, $$bindings, slots) => {
+  let $generateMap, $$unsubscribe_generateMap;
+  let $saveResult, $$unsubscribe_saveResult;
+  let $resultImage, $$unsubscribe_resultImage;
+  $$unsubscribe_generateMap = subscribe(generateMap, (value) => $generateMap = value);
+  $$unsubscribe_saveResult = subscribe(saveResult, (value) => $saveResult = value);
+  $$unsubscribe_resultImage = subscribe(resultImage, (value) => $resultImage = value);
+  $$result.css.add(css);
+  $$unsubscribe_generateMap();
+  $$unsubscribe_saveResult();
+  $$unsubscribe_resultImage();
+  return `<div class="${"max-w-screen-md mx-auto px-3 py-5 relative z-0"}"><article class="${"prose"}"><h1>Drawing to Map</h1>
+		<p>This space is for the ControlNet model <a href="${"https://github.com/RubenGres/Drawing2Map"}" target="${"_blank"}"><span>Drawing2Map</span></a></p></article>
+
+
+	${validate_component(BrushSelector, "BrushSelector").$$render($$result, {}, {}, {})}
+	<div class="${"drawings py-3 -mx-3 svelte-1sy339h"}">${validate_component(DrawingCanvas, "DrawingCanvas").$$render($$result, {}, {}, {})}
+		${validate_component(ResultCanvas, "ResultCanvas").$$render($$result, {}, {}, {})}</div>
+
+	<button ${$generateMap === true ? "disabled" : ""} class="${"green svelte-1sy339h"}">Generate Map
+	</button>
+
+	<button ${$saveResult === true || !$resultImage ? "disabled" : ""} class="${"svelte-1sy339h"}">Save Result
+	</button>
+
+	${validate_component(TemplateGallery, "TemplateGallery").$$render($$result, {}, {}, {})}
+
+	${validate_component(ParamsSelector, "ParamSelector").$$render($$result, {}, {}, {})}
+</div>`;
+});
+export { Routes as default };
diff --git a/frontend/.svelte-kit/output/server/index.js b/frontend/.svelte-kit/output/server/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..bafb745ca8a919b2f400e0c4c83666c10eb4ffb9
--- /dev/null
+++ b/frontend/.svelte-kit/output/server/index.js
@@ -0,0 +1,2291 @@
+import { c as create_ssr_component, s as setContext, v as validate_component, m as missing_component } from "./chunks/index-445fd704.js";
+import { s as set_paths, b as base, a as assets } from "./chunks/paths-396f020f.js";
+function afterUpdate() {
+}
+const Root = create_ssr_component(($$result, $$props, $$bindings, slots) => {
+  let { stores } = $$props;
+  let { page } = $$props;
+  let { components } = $$props;
+  let { props_0 = null } = $$props;
+  let { props_1 = null } = $$props;
+  let { props_2 = null } = $$props;
+  setContext("__svelte__", stores);
+  afterUpdate(stores.page.notify);
+  if ($$props.stores === void 0 && $$bindings.stores && stores !== void 0)
+    $$bindings.stores(stores);
+  if ($$props.page === void 0 && $$bindings.page && page !== void 0)
+    $$bindings.page(page);
+  if ($$props.components === void 0 && $$bindings.components && components !== void 0)
+    $$bindings.components(components);
+  if ($$props.props_0 === void 0 && $$bindings.props_0 && props_0 !== void 0)
+    $$bindings.props_0(props_0);
+  if ($$props.props_1 === void 0 && $$bindings.props_1 && props_1 !== void 0)
+    $$bindings.props_1(props_1);
+  if ($$props.props_2 === void 0 && $$bindings.props_2 && props_2 !== void 0)
+    $$bindings.props_2(props_2);
+  {
+    stores.page.set(page);
+  }
+  return `
+
+
+${components[1] ? `${validate_component(components[0] || missing_component, "svelte:component").$$render($$result, Object.assign(props_0 || {}), {}, {
+    default: () => {
+      return `${components[2] ? `${validate_component(components[1] || missing_component, "svelte:component").$$render($$result, Object.assign(props_1 || {}), {}, {
+        default: () => {
+          return `${validate_component(components[2] || missing_component, "svelte:component").$$render($$result, Object.assign(props_2 || {}), {}, {})}`;
+        }
+      })}` : `${validate_component(components[1] || missing_component, "svelte:component").$$render($$result, Object.assign(props_1 || {}), {}, {})}`}`;
+    }
+  })}` : `${validate_component(components[0] || missing_component, "svelte:component").$$render($$result, Object.assign(props_0 || {}), {}, {})}`}
+
+${``}`;
+});
+function to_headers(object) {
+  const headers = new Headers();
+  if (object) {
+    for (const key2 in object) {
+      const value = object[key2];
+      if (!value)
+        continue;
+      if (Array.isArray(value)) {
+        value.forEach((value2) => {
+          headers.append(key2, value2);
+        });
+      } else {
+        headers.set(key2, value);
+      }
+    }
+  }
+  return headers;
+}
+function hash(value) {
+  let hash2 = 5381;
+  let i = value.length;
+  if (typeof value === "string") {
+    while (i)
+      hash2 = hash2 * 33 ^ value.charCodeAt(--i);
+  } else {
+    while (i)
+      hash2 = hash2 * 33 ^ value[--i];
+  }
+  return (hash2 >>> 0).toString(36);
+}
+function lowercase_keys(obj) {
+  const clone = {};
+  for (const key2 in obj) {
+    clone[key2.toLowerCase()] = obj[key2];
+  }
+  return clone;
+}
+function decode_params(params) {
+  for (const key2 in params) {
+    params[key2] = params[key2].replace(/%23/g, "#").replace(/%3[Bb]/g, ";").replace(/%2[Cc]/g, ",").replace(/%2[Ff]/g, "/").replace(/%3[Ff]/g, "?").replace(/%3[Aa]/g, ":").replace(/%40/g, "@").replace(/%26/g, "&").replace(/%3[Dd]/g, "=").replace(/%2[Bb]/g, "+").replace(/%24/g, "$");
+  }
+  return params;
+}
+function is_pojo(body) {
+  if (typeof body !== "object")
+    return false;
+  if (body) {
+    if (body instanceof Uint8Array)
+      return false;
+    if (body instanceof ReadableStream)
+      return false;
+    if (body._readableState && typeof body.pipe === "function") {
+      throw new Error("Node streams are no longer supported \u2014 use a ReadableStream instead");
+    }
+  }
+  return true;
+}
+function normalize_request_method(event) {
+  const method = event.request.method.toLowerCase();
+  return method === "delete" ? "del" : method;
+}
+function error(body) {
+  return new Response(body, {
+    status: 500
+  });
+}
+function is_string(s2) {
+  return typeof s2 === "string" || s2 instanceof String;
+}
+const text_types = /* @__PURE__ */ new Set([
+  "application/xml",
+  "application/json",
+  "application/x-www-form-urlencoded",
+  "multipart/form-data"
+]);
+const bodyless_status_codes = /* @__PURE__ */ new Set([101, 204, 205, 304]);
+function is_text(content_type) {
+  if (!content_type)
+    return true;
+  const type = content_type.split(";")[0].toLowerCase();
+  return type.startsWith("text/") || type.endsWith("+xml") || text_types.has(type);
+}
+async function render_endpoint(event, mod) {
+  const method = normalize_request_method(event);
+  let handler = mod[method];
+  if (!handler && method === "head") {
+    handler = mod.get;
+  }
+  if (!handler) {
+    const allowed = [];
+    for (const method2 in ["get", "post", "put", "patch"]) {
+      if (mod[method2])
+        allowed.push(method2.toUpperCase());
+    }
+    if (mod.del)
+      allowed.push("DELETE");
+    if (mod.get || mod.head)
+      allowed.push("HEAD");
+    return event.request.headers.get("x-sveltekit-load") ? new Response(void 0, {
+      status: 204
+    }) : new Response(`${event.request.method} method not allowed`, {
+      status: 405,
+      headers: {
+        allow: allowed.join(", ")
+      }
+    });
+  }
+  const response = await handler(event);
+  const preface = `Invalid response from route ${event.url.pathname}`;
+  if (typeof response !== "object") {
+    return error(`${preface}: expected an object, got ${typeof response}`);
+  }
+  if (response.fallthrough) {
+    throw new Error("fallthrough is no longer supported. Use matchers instead: https://kit.svelte.dev/docs/routing#advanced-routing-matching");
+  }
+  const { status = 200, body = {} } = response;
+  const headers = response.headers instanceof Headers ? new Headers(response.headers) : to_headers(response.headers);
+  const type = headers.get("content-type");
+  if (!is_text(type) && !(body instanceof Uint8Array || is_string(body))) {
+    return error(`${preface}: body must be an instance of string or Uint8Array if content-type is not a supported textual content-type`);
+  }
+  let normalized_body;
+  if (is_pojo(body) && (!type || type.startsWith("application/json"))) {
+    headers.set("content-type", "application/json; charset=utf-8");
+    normalized_body = JSON.stringify(body);
+  } else {
+    normalized_body = body;
+  }
+  if ((typeof normalized_body === "string" || normalized_body instanceof Uint8Array) && !headers.has("etag")) {
+    const cache_control = headers.get("cache-control");
+    if (!cache_control || !/(no-store|immutable)/.test(cache_control)) {
+      headers.set("etag", `"${hash(normalized_body)}"`);
+    }
+  }
+  return new Response(method !== "head" && !bodyless_status_codes.has(status) ? normalized_body : void 0, {
+    status,
+    headers
+  });
+}
+var chars$1 = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_$";
+var unsafeChars = /[<>\b\f\n\r\t\0\u2028\u2029]/g;
+var reserved = /^(?:do|if|in|for|int|let|new|try|var|byte|case|char|else|enum|goto|long|this|void|with|await|break|catch|class|const|final|float|short|super|throw|while|yield|delete|double|export|import|native|return|switch|throws|typeof|boolean|default|extends|finally|package|private|abstract|continue|debugger|function|volatile|interface|protected|transient|implements|instanceof|synchronized)$/;
+var escaped = {
+  "<": "\\u003C",
+  ">": "\\u003E",
+  "/": "\\u002F",
+  "\\": "\\\\",
+  "\b": "\\b",
+  "\f": "\\f",
+  "\n": "\\n",
+  "\r": "\\r",
+  "	": "\\t",
+  "\0": "\\0",
+  "\u2028": "\\u2028",
+  "\u2029": "\\u2029"
+};
+var objectProtoOwnPropertyNames = Object.getOwnPropertyNames(Object.prototype).sort().join("\0");
+function devalue(value) {
+  var counts = /* @__PURE__ */ new Map();
+  function walk(thing) {
+    if (typeof thing === "function") {
+      throw new Error("Cannot stringify a function");
+    }
+    if (counts.has(thing)) {
+      counts.set(thing, counts.get(thing) + 1);
+      return;
+    }
+    counts.set(thing, 1);
+    if (!isPrimitive(thing)) {
+      var type = getType(thing);
+      switch (type) {
+        case "Number":
+        case "String":
+        case "Boolean":
+        case "Date":
+        case "RegExp":
+          return;
+        case "Array":
+          thing.forEach(walk);
+          break;
+        case "Set":
+        case "Map":
+          Array.from(thing).forEach(walk);
+          break;
+        default:
+          var proto = Object.getPrototypeOf(thing);
+          if (proto !== Object.prototype && proto !== null && Object.getOwnPropertyNames(proto).sort().join("\0") !== objectProtoOwnPropertyNames) {
+            throw new Error("Cannot stringify arbitrary non-POJOs");
+          }
+          if (Object.getOwnPropertySymbols(thing).length > 0) {
+            throw new Error("Cannot stringify POJOs with symbolic keys");
+          }
+          Object.keys(thing).forEach(function(key2) {
+            return walk(thing[key2]);
+          });
+      }
+    }
+  }
+  walk(value);
+  var names = /* @__PURE__ */ new Map();
+  Array.from(counts).filter(function(entry) {
+    return entry[1] > 1;
+  }).sort(function(a, b) {
+    return b[1] - a[1];
+  }).forEach(function(entry, i) {
+    names.set(entry[0], getName(i));
+  });
+  function stringify(thing) {
+    if (names.has(thing)) {
+      return names.get(thing);
+    }
+    if (isPrimitive(thing)) {
+      return stringifyPrimitive(thing);
+    }
+    var type = getType(thing);
+    switch (type) {
+      case "Number":
+      case "String":
+      case "Boolean":
+        return "Object(" + stringify(thing.valueOf()) + ")";
+      case "RegExp":
+        return "new RegExp(" + stringifyString(thing.source) + ', "' + thing.flags + '")';
+      case "Date":
+        return "new Date(" + thing.getTime() + ")";
+      case "Array":
+        var members = thing.map(function(v, i) {
+          return i in thing ? stringify(v) : "";
+        });
+        var tail = thing.length === 0 || thing.length - 1 in thing ? "" : ",";
+        return "[" + members.join(",") + tail + "]";
+      case "Set":
+      case "Map":
+        return "new " + type + "([" + Array.from(thing).map(stringify).join(",") + "])";
+      default:
+        var obj = "{" + Object.keys(thing).map(function(key2) {
+          return safeKey(key2) + ":" + stringify(thing[key2]);
+        }).join(",") + "}";
+        var proto = Object.getPrototypeOf(thing);
+        if (proto === null) {
+          return Object.keys(thing).length > 0 ? "Object.assign(Object.create(null)," + obj + ")" : "Object.create(null)";
+        }
+        return obj;
+    }
+  }
+  var str = stringify(value);
+  if (names.size) {
+    var params_1 = [];
+    var statements_1 = [];
+    var values_1 = [];
+    names.forEach(function(name, thing) {
+      params_1.push(name);
+      if (isPrimitive(thing)) {
+        values_1.push(stringifyPrimitive(thing));
+        return;
+      }
+      var type = getType(thing);
+      switch (type) {
+        case "Number":
+        case "String":
+        case "Boolean":
+          values_1.push("Object(" + stringify(thing.valueOf()) + ")");
+          break;
+        case "RegExp":
+          values_1.push(thing.toString());
+          break;
+        case "Date":
+          values_1.push("new Date(" + thing.getTime() + ")");
+          break;
+        case "Array":
+          values_1.push("Array(" + thing.length + ")");
+          thing.forEach(function(v, i) {
+            statements_1.push(name + "[" + i + "]=" + stringify(v));
+          });
+          break;
+        case "Set":
+          values_1.push("new Set");
+          statements_1.push(name + "." + Array.from(thing).map(function(v) {
+            return "add(" + stringify(v) + ")";
+          }).join("."));
+          break;
+        case "Map":
+          values_1.push("new Map");
+          statements_1.push(name + "." + Array.from(thing).map(function(_a) {
+            var k = _a[0], v = _a[1];
+            return "set(" + stringify(k) + ", " + stringify(v) + ")";
+          }).join("."));
+          break;
+        default:
+          values_1.push(Object.getPrototypeOf(thing) === null ? "Object.create(null)" : "{}");
+          Object.keys(thing).forEach(function(key2) {
+            statements_1.push("" + name + safeProp(key2) + "=" + stringify(thing[key2]));
+          });
+      }
+    });
+    statements_1.push("return " + str);
+    return "(function(" + params_1.join(",") + "){" + statements_1.join(";") + "}(" + values_1.join(",") + "))";
+  } else {
+    return str;
+  }
+}
+function getName(num) {
+  var name = "";
+  do {
+    name = chars$1[num % chars$1.length] + name;
+    num = ~~(num / chars$1.length) - 1;
+  } while (num >= 0);
+  return reserved.test(name) ? name + "_" : name;
+}
+function isPrimitive(thing) {
+  return Object(thing) !== thing;
+}
+function stringifyPrimitive(thing) {
+  if (typeof thing === "string")
+    return stringifyString(thing);
+  if (thing === void 0)
+    return "void 0";
+  if (thing === 0 && 1 / thing < 0)
+    return "-0";
+  var str = String(thing);
+  if (typeof thing === "number")
+    return str.replace(/^(-)?0\./, "$1.");
+  return str;
+}
+function getType(thing) {
+  return Object.prototype.toString.call(thing).slice(8, -1);
+}
+function escapeUnsafeChar(c) {
+  return escaped[c] || c;
+}
+function escapeUnsafeChars(str) {
+  return str.replace(unsafeChars, escapeUnsafeChar);
+}
+function safeKey(key2) {
+  return /^[_$a-zA-Z][_$a-zA-Z0-9]*$/.test(key2) ? key2 : escapeUnsafeChars(JSON.stringify(key2));
+}
+function safeProp(key2) {
+  return /^[_$a-zA-Z][_$a-zA-Z0-9]*$/.test(key2) ? "." + key2 : "[" + escapeUnsafeChars(JSON.stringify(key2)) + "]";
+}
+function stringifyString(str) {
+  var result = '"';
+  for (var i = 0; i < str.length; i += 1) {
+    var char = str.charAt(i);
+    var code = char.charCodeAt(0);
+    if (char === '"') {
+      result += '\\"';
+    } else if (char in escaped) {
+      result += escaped[char];
+    } else if (code >= 55296 && code <= 57343) {
+      var next = str.charCodeAt(i + 1);
+      if (code <= 56319 && (next >= 56320 && next <= 57343)) {
+        result += char + str[++i];
+      } else {
+        result += "\\u" + code.toString(16).toUpperCase();
+      }
+    } else {
+      result += char;
+    }
+  }
+  result += '"';
+  return result;
+}
+function noop() {
+}
+function safe_not_equal(a, b) {
+  return a != a ? b == b : a !== b || (a && typeof a === "object" || typeof a === "function");
+}
+Promise.resolve();
+const subscriber_queue = [];
+function readable(value, start) {
+  return {
+    subscribe: writable(value, start).subscribe
+  };
+}
+function writable(value, start = noop) {
+  let stop;
+  const subscribers = /* @__PURE__ */ new Set();
+  function set(new_value) {
+    if (safe_not_equal(value, new_value)) {
+      value = new_value;
+      if (stop) {
+        const run_queue = !subscriber_queue.length;
+        for (const subscriber of subscribers) {
+          subscriber[1]();
+          subscriber_queue.push(subscriber, value);
+        }
+        if (run_queue) {
+          for (let i = 0; i < subscriber_queue.length; i += 2) {
+            subscriber_queue[i][0](subscriber_queue[i + 1]);
+          }
+          subscriber_queue.length = 0;
+        }
+      }
+    }
+  }
+  function update(fn) {
+    set(fn(value));
+  }
+  function subscribe(run, invalidate = noop) {
+    const subscriber = [run, invalidate];
+    subscribers.add(subscriber);
+    if (subscribers.size === 1) {
+      stop = start(set) || noop;
+    }
+    run(value);
+    return () => {
+      subscribers.delete(subscriber);
+      if (subscribers.size === 0) {
+        stop();
+        stop = null;
+      }
+    };
+  }
+  return { set, update, subscribe };
+}
+function coalesce_to_error(err) {
+  return err instanceof Error || err && err.name && err.message ? err : new Error(JSON.stringify(err));
+}
+const render_json_payload_script_dict = {
+  "<": "\\u003C",
+  "\u2028": "\\u2028",
+  "\u2029": "\\u2029"
+};
+const render_json_payload_script_regex = new RegExp(`[${Object.keys(render_json_payload_script_dict).join("")}]`, "g");
+function render_json_payload_script(attrs, payload) {
+  const safe_payload = JSON.stringify(payload).replace(render_json_payload_script_regex, (match) => render_json_payload_script_dict[match]);
+  let safe_attrs = "";
+  for (const [key2, value] of Object.entries(attrs)) {
+    if (value === void 0)
+      continue;
+    safe_attrs += ` sveltekit:data-${key2}=${escape_html_attr(value)}`;
+  }
+  return `<script type="application/json"${safe_attrs}>${safe_payload}<\/script>`;
+}
+const escape_html_attr_dict = {
+  "&": "&amp;",
+  '"': "&quot;"
+};
+const escape_html_attr_regex = new RegExp(`[${Object.keys(escape_html_attr_dict).join("")}]|[\\ud800-\\udbff](?![\\udc00-\\udfff])|[\\ud800-\\udbff][\\udc00-\\udfff]|[\\udc00-\\udfff]`, "g");
+function escape_html_attr(str) {
+  const escaped_str = str.replace(escape_html_attr_regex, (match) => {
+    if (match.length === 2) {
+      return match;
+    }
+    return escape_html_attr_dict[match] ?? `&#${match.charCodeAt(0)};`;
+  });
+  return `"${escaped_str}"`;
+}
+const s = JSON.stringify;
+const encoder = new TextEncoder();
+function sha256(data) {
+  if (!key[0])
+    precompute();
+  const out = init.slice(0);
+  const array2 = encode$1(data);
+  for (let i = 0; i < array2.length; i += 16) {
+    const w = array2.subarray(i, i + 16);
+    let tmp;
+    let a;
+    let b;
+    let out0 = out[0];
+    let out1 = out[1];
+    let out2 = out[2];
+    let out3 = out[3];
+    let out4 = out[4];
+    let out5 = out[5];
+    let out6 = out[6];
+    let out7 = out[7];
+    for (let i2 = 0; i2 < 64; i2++) {
+      if (i2 < 16) {
+        tmp = w[i2];
+      } else {
+        a = w[i2 + 1 & 15];
+        b = w[i2 + 14 & 15];
+        tmp = w[i2 & 15] = (a >>> 7 ^ a >>> 18 ^ a >>> 3 ^ a << 25 ^ a << 14) + (b >>> 17 ^ b >>> 19 ^ b >>> 10 ^ b << 15 ^ b << 13) + w[i2 & 15] + w[i2 + 9 & 15] | 0;
+      }
+      tmp = tmp + out7 + (out4 >>> 6 ^ out4 >>> 11 ^ out4 >>> 25 ^ out4 << 26 ^ out4 << 21 ^ out4 << 7) + (out6 ^ out4 & (out5 ^ out6)) + key[i2];
+      out7 = out6;
+      out6 = out5;
+      out5 = out4;
+      out4 = out3 + tmp | 0;
+      out3 = out2;
+      out2 = out1;
+      out1 = out0;
+      out0 = tmp + (out1 & out2 ^ out3 & (out1 ^ out2)) + (out1 >>> 2 ^ out1 >>> 13 ^ out1 >>> 22 ^ out1 << 30 ^ out1 << 19 ^ out1 << 10) | 0;
+    }
+    out[0] = out[0] + out0 | 0;
+    out[1] = out[1] + out1 | 0;
+    out[2] = out[2] + out2 | 0;
+    out[3] = out[3] + out3 | 0;
+    out[4] = out[4] + out4 | 0;
+    out[5] = out[5] + out5 | 0;
+    out[6] = out[6] + out6 | 0;
+    out[7] = out[7] + out7 | 0;
+  }
+  const bytes = new Uint8Array(out.buffer);
+  reverse_endianness(bytes);
+  return base64(bytes);
+}
+const init = new Uint32Array(8);
+const key = new Uint32Array(64);
+function precompute() {
+  function frac(x) {
+    return (x - Math.floor(x)) * 4294967296;
+  }
+  let prime = 2;
+  for (let i = 0; i < 64; prime++) {
+    let is_prime = true;
+    for (let factor = 2; factor * factor <= prime; factor++) {
+      if (prime % factor === 0) {
+        is_prime = false;
+        break;
+      }
+    }
+    if (is_prime) {
+      if (i < 8) {
+        init[i] = frac(prime ** (1 / 2));
+      }
+      key[i] = frac(prime ** (1 / 3));
+      i++;
+    }
+  }
+}
+function reverse_endianness(bytes) {
+  for (let i = 0; i < bytes.length; i += 4) {
+    const a = bytes[i + 0];
+    const b = bytes[i + 1];
+    const c = bytes[i + 2];
+    const d = bytes[i + 3];
+    bytes[i + 0] = d;
+    bytes[i + 1] = c;
+    bytes[i + 2] = b;
+    bytes[i + 3] = a;
+  }
+}
+function encode$1(str) {
+  const encoded = encoder.encode(str);
+  const length = encoded.length * 8;
+  const size = 512 * Math.ceil((length + 65) / 512);
+  const bytes = new Uint8Array(size / 8);
+  bytes.set(encoded);
+  bytes[encoded.length] = 128;
+  reverse_endianness(bytes);
+  const words = new Uint32Array(bytes.buffer);
+  words[words.length - 2] = Math.floor(length / 4294967296);
+  words[words.length - 1] = length;
+  return words;
+}
+const chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split("");
+function base64(bytes) {
+  const l = bytes.length;
+  let result = "";
+  let i;
+  for (i = 2; i < l; i += 3) {
+    result += chars[bytes[i - 2] >> 2];
+    result += chars[(bytes[i - 2] & 3) << 4 | bytes[i - 1] >> 4];
+    result += chars[(bytes[i - 1] & 15) << 2 | bytes[i] >> 6];
+    result += chars[bytes[i] & 63];
+  }
+  if (i === l + 1) {
+    result += chars[bytes[i - 2] >> 2];
+    result += chars[(bytes[i - 2] & 3) << 4];
+    result += "==";
+  }
+  if (i === l) {
+    result += chars[bytes[i - 2] >> 2];
+    result += chars[(bytes[i - 2] & 3) << 4 | bytes[i - 1] >> 4];
+    result += chars[(bytes[i - 1] & 15) << 2];
+    result += "=";
+  }
+  return result;
+}
+let csp_ready;
+const array = new Uint8Array(16);
+function generate_nonce() {
+  crypto.getRandomValues(array);
+  return base64(array);
+}
+const quoted = /* @__PURE__ */ new Set([
+  "self",
+  "unsafe-eval",
+  "unsafe-hashes",
+  "unsafe-inline",
+  "none",
+  "strict-dynamic",
+  "report-sample"
+]);
+const crypto_pattern = /^(nonce|sha\d\d\d)-/;
+class Csp {
+  #use_hashes;
+  #dev;
+  #script_needs_csp;
+  #style_needs_csp;
+  #directives;
+  #script_src;
+  #style_src;
+  constructor({ mode, directives }, { dev, prerender, needs_nonce }) {
+    this.#use_hashes = mode === "hash" || mode === "auto" && prerender;
+    this.#directives = dev ? { ...directives } : directives;
+    this.#dev = dev;
+    const d = this.#directives;
+    if (dev) {
+      const effective_style_src2 = d["style-src"] || d["default-src"];
+      if (effective_style_src2 && !effective_style_src2.includes("unsafe-inline")) {
+        d["style-src"] = [...effective_style_src2, "unsafe-inline"];
+      }
+    }
+    this.#script_src = [];
+    this.#style_src = [];
+    const effective_script_src = d["script-src"] || d["default-src"];
+    const effective_style_src = d["style-src"] || d["default-src"];
+    this.#script_needs_csp = !!effective_script_src && effective_script_src.filter((value) => value !== "unsafe-inline").length > 0;
+    this.#style_needs_csp = !dev && !!effective_style_src && effective_style_src.filter((value) => value !== "unsafe-inline").length > 0;
+    this.script_needs_nonce = this.#script_needs_csp && !this.#use_hashes;
+    this.style_needs_nonce = this.#style_needs_csp && !this.#use_hashes;
+    if (this.script_needs_nonce || this.style_needs_nonce || needs_nonce) {
+      this.nonce = generate_nonce();
+    }
+  }
+  add_script(content) {
+    if (this.#script_needs_csp) {
+      if (this.#use_hashes) {
+        this.#script_src.push(`sha256-${sha256(content)}`);
+      } else if (this.#script_src.length === 0) {
+        this.#script_src.push(`nonce-${this.nonce}`);
+      }
+    }
+  }
+  add_style(content) {
+    if (this.#style_needs_csp) {
+      if (this.#use_hashes) {
+        this.#style_src.push(`sha256-${sha256(content)}`);
+      } else if (this.#style_src.length === 0) {
+        this.#style_src.push(`nonce-${this.nonce}`);
+      }
+    }
+  }
+  get_header(is_meta = false) {
+    const header = [];
+    const directives = { ...this.#directives };
+    if (this.#style_src.length > 0) {
+      directives["style-src"] = [
+        ...directives["style-src"] || directives["default-src"] || [],
+        ...this.#style_src
+      ];
+    }
+    if (this.#script_src.length > 0) {
+      directives["script-src"] = [
+        ...directives["script-src"] || directives["default-src"] || [],
+        ...this.#script_src
+      ];
+    }
+    for (const key2 in directives) {
+      if (is_meta && (key2 === "frame-ancestors" || key2 === "report-uri" || key2 === "sandbox")) {
+        continue;
+      }
+      const value = directives[key2];
+      if (!value)
+        continue;
+      const directive = [key2];
+      if (Array.isArray(value)) {
+        value.forEach((value2) => {
+          if (quoted.has(value2) || crypto_pattern.test(value2)) {
+            directive.push(`'${value2}'`);
+          } else {
+            directive.push(value2);
+          }
+        });
+      }
+      header.push(directive.join(" "));
+    }
+    return header.join("; ");
+  }
+  get_meta() {
+    const content = escape_html_attr(this.get_header(true));
+    return `<meta http-equiv="content-security-policy" content=${content}>`;
+  }
+}
+const absolute = /^([a-z]+:)?\/?\//;
+const scheme = /^[a-z]+:/;
+function resolve(base2, path) {
+  if (scheme.test(path))
+    return path;
+  const base_match = absolute.exec(base2);
+  const path_match = absolute.exec(path);
+  if (!base_match) {
+    throw new Error(`bad base path: "${base2}"`);
+  }
+  const baseparts = path_match ? [] : base2.slice(base_match[0].length).split("/");
+  const pathparts = path_match ? path.slice(path_match[0].length).split("/") : path.split("/");
+  baseparts.pop();
+  for (let i = 0; i < pathparts.length; i += 1) {
+    const part = pathparts[i];
+    if (part === ".")
+      continue;
+    else if (part === "..")
+      baseparts.pop();
+    else
+      baseparts.push(part);
+  }
+  const prefix = path_match && path_match[0] || base_match && base_match[0] || "";
+  return `${prefix}${baseparts.join("/")}`;
+}
+function is_root_relative(path) {
+  return path[0] === "/" && path[1] !== "/";
+}
+function normalize_path(path, trailing_slash) {
+  if (path === "/" || trailing_slash === "ignore")
+    return path;
+  if (trailing_slash === "never") {
+    return path.endsWith("/") ? path.slice(0, -1) : path;
+  } else if (trailing_slash === "always" && !path.endsWith("/")) {
+    return path + "/";
+  }
+  return path;
+}
+class LoadURL extends URL {
+  get hash() {
+    throw new Error("url.hash is inaccessible from load. Consider accessing hash from the page store within the script tag of your component.");
+  }
+}
+class PrerenderingURL extends URL {
+  get search() {
+    throw new Error("Cannot access url.search on a page with prerendering enabled");
+  }
+  get searchParams() {
+    throw new Error("Cannot access url.searchParams on a page with prerendering enabled");
+  }
+}
+const updated = {
+  ...readable(false),
+  check: () => false
+};
+async function render_response({
+  branch,
+  options,
+  state,
+  $session,
+  page_config,
+  status,
+  error: error2 = null,
+  event,
+  resolve_opts,
+  stuff
+}) {
+  if (state.prerendering) {
+    if (options.csp.mode === "nonce") {
+      throw new Error('Cannot use prerendering if config.kit.csp.mode === "nonce"');
+    }
+    if (options.template_contains_nonce) {
+      throw new Error("Cannot use prerendering if page template contains %sveltekit.nonce%");
+    }
+  }
+  const stylesheets = new Set(options.manifest._.entry.css);
+  const modulepreloads = new Set(options.manifest._.entry.js);
+  const styles = /* @__PURE__ */ new Map();
+  const serialized_data = [];
+  let shadow_props;
+  let rendered;
+  let is_private = false;
+  let cache;
+  if (error2) {
+    error2.stack = options.get_stack(error2);
+  }
+  if (resolve_opts.ssr) {
+    branch.forEach(({ node, props: props2, loaded, fetched, uses_credentials }) => {
+      if (node.css)
+        node.css.forEach((url) => stylesheets.add(url));
+      if (node.js)
+        node.js.forEach((url) => modulepreloads.add(url));
+      if (node.styles)
+        Object.entries(node.styles).forEach(([k, v]) => styles.set(k, v));
+      if (fetched && page_config.hydrate)
+        serialized_data.push(...fetched);
+      if (props2)
+        shadow_props = props2;
+      cache = loaded == null ? void 0 : loaded.cache;
+      is_private = (cache == null ? void 0 : cache.private) ?? uses_credentials;
+    });
+    const session = writable($session);
+    const props = {
+      stores: {
+        page: writable(null),
+        navigating: writable(null),
+        session: {
+          ...session,
+          subscribe: (fn) => {
+            is_private = (cache == null ? void 0 : cache.private) ?? true;
+            return session.subscribe(fn);
+          }
+        },
+        updated
+      },
+      page: {
+        error: error2,
+        params: event.params,
+        routeId: event.routeId,
+        status,
+        stuff,
+        url: state.prerendering ? new PrerenderingURL(event.url) : event.url
+      },
+      components: branch.map(({ node }) => node.module.default)
+    };
+    const print_error = (property, replacement) => {
+      Object.defineProperty(props.page, property, {
+        get: () => {
+          throw new Error(`$page.${property} has been replaced by $page.url.${replacement}`);
+        }
+      });
+    };
+    print_error("origin", "origin");
+    print_error("path", "pathname");
+    print_error("query", "searchParams");
+    for (let i = 0; i < branch.length; i += 1) {
+      props[`props_${i}`] = await branch[i].loaded.props;
+    }
+    rendered = options.root.render(props);
+  } else {
+    rendered = { head: "", html: "", css: { code: "", map: null } };
+  }
+  let { head, html: body } = rendered;
+  const inlined_style = Array.from(styles.values()).join("\n");
+  await csp_ready;
+  const csp = new Csp(options.csp, {
+    dev: options.dev,
+    prerender: !!state.prerendering,
+    needs_nonce: options.template_contains_nonce
+  });
+  const target = hash(body);
+  const init_app = `
+		import { start } from ${s(options.prefix + options.manifest._.entry.file)};
+		start({
+			target: document.querySelector('[data-sveltekit-hydrate="${target}"]').parentNode,
+			paths: ${s(options.paths)},
+			session: ${try_serialize($session, (error3) => {
+    throw new Error(`Failed to serialize session data: ${error3.message}`);
+  })},
+			route: ${!!page_config.router},
+			spa: ${!resolve_opts.ssr},
+			trailing_slash: ${s(options.trailing_slash)},
+			hydrate: ${resolve_opts.ssr && page_config.hydrate ? `{
+				status: ${status},
+				error: ${serialize_error(error2)},
+				nodes: [${branch.map(({ node }) => node.index).join(", ")}],
+				params: ${devalue(event.params)},
+				routeId: ${s(event.routeId)}
+			}` : "null"}
+		});
+	`;
+  const init_service_worker = `
+		if ('serviceWorker' in navigator) {
+			addEventListener('load', () => {
+				navigator.serviceWorker.register('${options.service_worker}');
+			});
+		}
+	`;
+  if (inlined_style) {
+    const attributes = [];
+    if (options.dev)
+      attributes.push(" data-sveltekit");
+    if (csp.style_needs_nonce)
+      attributes.push(` nonce="${csp.nonce}"`);
+    csp.add_style(inlined_style);
+    head += `
+	<style${attributes.join("")}>${inlined_style}</style>`;
+  }
+  head += Array.from(stylesheets).map((dep) => {
+    const attributes = [
+      'rel="stylesheet"',
+      `href="${options.prefix + dep}"`
+    ];
+    if (csp.style_needs_nonce) {
+      attributes.push(`nonce="${csp.nonce}"`);
+    }
+    if (styles.has(dep)) {
+      attributes.push("disabled", 'media="(max-width: 0)"');
+    }
+    return `
+	<link ${attributes.join(" ")}>`;
+  }).join("");
+  if (page_config.router || page_config.hydrate) {
+    head += Array.from(modulepreloads).map((dep) => `
+	<link rel="modulepreload" href="${options.prefix + dep}">`).join("");
+    const attributes = ['type="module"', `data-sveltekit-hydrate="${target}"`];
+    csp.add_script(init_app);
+    if (csp.script_needs_nonce) {
+      attributes.push(`nonce="${csp.nonce}"`);
+    }
+    body += `
+		<script ${attributes.join(" ")}>${init_app}<\/script>`;
+    body += serialized_data.map(({ url, body: body2, response }) => render_json_payload_script({ type: "data", url, body: typeof body2 === "string" ? hash(body2) : void 0 }, response)).join("\n	");
+    if (shadow_props) {
+      body += render_json_payload_script({ type: "props" }, shadow_props);
+    }
+  }
+  if (options.service_worker) {
+    csp.add_script(init_service_worker);
+    head += `
+			<script${csp.script_needs_nonce ? ` nonce="${csp.nonce}"` : ""}>${init_service_worker}<\/script>`;
+  }
+  if (state.prerendering) {
+    const http_equiv = [];
+    const csp_headers = csp.get_meta();
+    if (csp_headers) {
+      http_equiv.push(csp_headers);
+    }
+    if (cache) {
+      http_equiv.push(`<meta http-equiv="cache-control" content="max-age=${cache.maxage}">`);
+    }
+    if (http_equiv.length > 0) {
+      head = http_equiv.join("\n") + head;
+    }
+  }
+  const segments = event.url.pathname.slice(options.paths.base.length).split("/").slice(2);
+  const assets2 = options.paths.assets || (segments.length > 0 ? segments.map(() => "..").join("/") : ".");
+  const html = await resolve_opts.transformPage({
+    html: options.template({ head, body, assets: assets2, nonce: csp.nonce })
+  });
+  const headers = new Headers({
+    "content-type": "text/html",
+    etag: `"${hash(html)}"`
+  });
+  if (cache) {
+    headers.set("cache-control", `${is_private ? "private" : "public"}, max-age=${cache.maxage}`);
+  }
+  if (!options.floc) {
+    headers.set("permissions-policy", "interest-cohort=()");
+  }
+  if (!state.prerendering) {
+    const csp_header = csp.get_header();
+    if (csp_header) {
+      headers.set("content-security-policy", csp_header);
+    }
+  }
+  return new Response(html, {
+    status,
+    headers
+  });
+}
+function try_serialize(data, fail) {
+  try {
+    return devalue(data);
+  } catch (err) {
+    if (fail)
+      fail(coalesce_to_error(err));
+    return null;
+  }
+}
+function serialize_error(error2) {
+  if (!error2)
+    return null;
+  let serialized = try_serialize(error2);
+  if (!serialized) {
+    const { name, message, stack } = error2;
+    serialized = try_serialize({ ...error2, name, message, stack });
+  }
+  if (!serialized) {
+    serialized = "{}";
+  }
+  return serialized;
+}
+/*!
+ * cookie
+ * Copyright(c) 2012-2014 Roman Shtylman
+ * Copyright(c) 2015 Douglas Christopher Wilson
+ * MIT Licensed
+ */
+var parse_1 = parse$1;
+var serialize_1 = serialize;
+var __toString = Object.prototype.toString;
+var fieldContentRegExp = /^[\u0009\u0020-\u007e\u0080-\u00ff]+$/;
+function parse$1(str, options) {
+  if (typeof str !== "string") {
+    throw new TypeError("argument str must be a string");
+  }
+  var obj = {};
+  var opt = options || {};
+  var dec = opt.decode || decode;
+  var index = 0;
+  while (index < str.length) {
+    var eqIdx = str.indexOf("=", index);
+    if (eqIdx === -1) {
+      break;
+    }
+    var endIdx = str.indexOf(";", index);
+    if (endIdx === -1) {
+      endIdx = str.length;
+    } else if (endIdx < eqIdx) {
+      index = str.lastIndexOf(";", eqIdx - 1) + 1;
+      continue;
+    }
+    var key2 = str.slice(index, eqIdx).trim();
+    if (obj[key2] === void 0) {
+      var val = str.slice(eqIdx + 1, endIdx).trim();
+      if (val.charCodeAt(0) === 34) {
+        val = val.slice(1, -1);
+      }
+      obj[key2] = tryDecode(val, dec);
+    }
+    index = endIdx + 1;
+  }
+  return obj;
+}
+function serialize(name, val, options) {
+  var opt = options || {};
+  var enc = opt.encode || encode;
+  if (typeof enc !== "function") {
+    throw new TypeError("option encode is invalid");
+  }
+  if (!fieldContentRegExp.test(name)) {
+    throw new TypeError("argument name is invalid");
+  }
+  var value = enc(val);
+  if (value && !fieldContentRegExp.test(value)) {
+    throw new TypeError("argument val is invalid");
+  }
+  var str = name + "=" + value;
+  if (opt.maxAge != null) {
+    var maxAge = opt.maxAge - 0;
+    if (isNaN(maxAge) || !isFinite(maxAge)) {
+      throw new TypeError("option maxAge is invalid");
+    }
+    str += "; Max-Age=" + Math.floor(maxAge);
+  }
+  if (opt.domain) {
+    if (!fieldContentRegExp.test(opt.domain)) {
+      throw new TypeError("option domain is invalid");
+    }
+    str += "; Domain=" + opt.domain;
+  }
+  if (opt.path) {
+    if (!fieldContentRegExp.test(opt.path)) {
+      throw new TypeError("option path is invalid");
+    }
+    str += "; Path=" + opt.path;
+  }
+  if (opt.expires) {
+    var expires = opt.expires;
+    if (!isDate(expires) || isNaN(expires.valueOf())) {
+      throw new TypeError("option expires is invalid");
+    }
+    str += "; Expires=" + expires.toUTCString();
+  }
+  if (opt.httpOnly) {
+    str += "; HttpOnly";
+  }
+  if (opt.secure) {
+    str += "; Secure";
+  }
+  if (opt.priority) {
+    var priority = typeof opt.priority === "string" ? opt.priority.toLowerCase() : opt.priority;
+    switch (priority) {
+      case "low":
+        str += "; Priority=Low";
+        break;
+      case "medium":
+        str += "; Priority=Medium";
+        break;
+      case "high":
+        str += "; Priority=High";
+        break;
+      default:
+        throw new TypeError("option priority is invalid");
+    }
+  }
+  if (opt.sameSite) {
+    var sameSite = typeof opt.sameSite === "string" ? opt.sameSite.toLowerCase() : opt.sameSite;
+    switch (sameSite) {
+      case true:
+        str += "; SameSite=Strict";
+        break;
+      case "lax":
+        str += "; SameSite=Lax";
+        break;
+      case "strict":
+        str += "; SameSite=Strict";
+        break;
+      case "none":
+        str += "; SameSite=None";
+        break;
+      default:
+        throw new TypeError("option sameSite is invalid");
+    }
+  }
+  return str;
+}
+function decode(str) {
+  return str.indexOf("%") !== -1 ? decodeURIComponent(str) : str;
+}
+function encode(val) {
+  return encodeURIComponent(val);
+}
+function isDate(val) {
+  return __toString.call(val) === "[object Date]" || val instanceof Date;
+}
+function tryDecode(str, decode2) {
+  try {
+    return decode2(str);
+  } catch (e) {
+    return str;
+  }
+}
+var setCookie = { exports: {} };
+var defaultParseOptions = {
+  decodeValues: true,
+  map: false,
+  silent: false
+};
+function isNonEmptyString(str) {
+  return typeof str === "string" && !!str.trim();
+}
+function parseString(setCookieValue, options) {
+  var parts = setCookieValue.split(";").filter(isNonEmptyString);
+  var nameValue = parts.shift().split("=");
+  var name = nameValue.shift();
+  var value = nameValue.join("=");
+  options = options ? Object.assign({}, defaultParseOptions, options) : defaultParseOptions;
+  try {
+    value = options.decodeValues ? decodeURIComponent(value) : value;
+  } catch (e) {
+    console.error("set-cookie-parser encountered an error while decoding a cookie with value '" + value + "'. Set options.decodeValues to false to disable this feature.", e);
+  }
+  var cookie = {
+    name,
+    value
+  };
+  parts.forEach(function(part) {
+    var sides = part.split("=");
+    var key2 = sides.shift().trimLeft().toLowerCase();
+    var value2 = sides.join("=");
+    if (key2 === "expires") {
+      cookie.expires = new Date(value2);
+    } else if (key2 === "max-age") {
+      cookie.maxAge = parseInt(value2, 10);
+    } else if (key2 === "secure") {
+      cookie.secure = true;
+    } else if (key2 === "httponly") {
+      cookie.httpOnly = true;
+    } else if (key2 === "samesite") {
+      cookie.sameSite = value2;
+    } else {
+      cookie[key2] = value2;
+    }
+  });
+  return cookie;
+}
+function parse(input, options) {
+  options = options ? Object.assign({}, defaultParseOptions, options) : defaultParseOptions;
+  if (!input) {
+    if (!options.map) {
+      return [];
+    } else {
+      return {};
+    }
+  }
+  if (input.headers && input.headers["set-cookie"]) {
+    input = input.headers["set-cookie"];
+  } else if (input.headers) {
+    var sch = input.headers[Object.keys(input.headers).find(function(key2) {
+      return key2.toLowerCase() === "set-cookie";
+    })];
+    if (!sch && input.headers.cookie && !options.silent) {
+      console.warn("Warning: set-cookie-parser appears to have been called on a request object. It is designed to parse Set-Cookie headers from responses, not Cookie headers from requests. Set the option {silent: true} to suppress this warning.");
+    }
+    input = sch;
+  }
+  if (!Array.isArray(input)) {
+    input = [input];
+  }
+  options = options ? Object.assign({}, defaultParseOptions, options) : defaultParseOptions;
+  if (!options.map) {
+    return input.filter(isNonEmptyString).map(function(str) {
+      return parseString(str, options);
+    });
+  } else {
+    var cookies = {};
+    return input.filter(isNonEmptyString).reduce(function(cookies2, str) {
+      var cookie = parseString(str, options);
+      cookies2[cookie.name] = cookie;
+      return cookies2;
+    }, cookies);
+  }
+}
+function splitCookiesString(cookiesString) {
+  if (Array.isArray(cookiesString)) {
+    return cookiesString;
+  }
+  if (typeof cookiesString !== "string") {
+    return [];
+  }
+  var cookiesStrings = [];
+  var pos = 0;
+  var start;
+  var ch;
+  var lastComma;
+  var nextStart;
+  var cookiesSeparatorFound;
+  function skipWhitespace() {
+    while (pos < cookiesString.length && /\s/.test(cookiesString.charAt(pos))) {
+      pos += 1;
+    }
+    return pos < cookiesString.length;
+  }
+  function notSpecialChar() {
+    ch = cookiesString.charAt(pos);
+    return ch !== "=" && ch !== ";" && ch !== ",";
+  }
+  while (pos < cookiesString.length) {
+    start = pos;
+    cookiesSeparatorFound = false;
+    while (skipWhitespace()) {
+      ch = cookiesString.charAt(pos);
+      if (ch === ",") {
+        lastComma = pos;
+        pos += 1;
+        skipWhitespace();
+        nextStart = pos;
+        while (pos < cookiesString.length && notSpecialChar()) {
+          pos += 1;
+        }
+        if (pos < cookiesString.length && cookiesString.charAt(pos) === "=") {
+          cookiesSeparatorFound = true;
+          pos = nextStart;
+          cookiesStrings.push(cookiesString.substring(start, lastComma));
+          start = pos;
+        } else {
+          pos = lastComma + 1;
+        }
+      } else {
+        pos += 1;
+      }
+    }
+    if (!cookiesSeparatorFound || pos >= cookiesString.length) {
+      cookiesStrings.push(cookiesString.substring(start, cookiesString.length));
+    }
+  }
+  return cookiesStrings;
+}
+setCookie.exports = parse;
+setCookie.exports.parse = parse;
+var parseString_1 = setCookie.exports.parseString = parseString;
+var splitCookiesString_1 = setCookie.exports.splitCookiesString = splitCookiesString;
+function normalize(loaded) {
+  if (loaded.fallthrough) {
+    throw new Error("fallthrough is no longer supported. Use matchers instead: https://kit.svelte.dev/docs/routing#advanced-routing-matching");
+  }
+  if ("maxage" in loaded) {
+    throw new Error("maxage should be replaced with cache: { maxage }");
+  }
+  const has_error_status = loaded.status && loaded.status >= 400 && loaded.status <= 599 && !loaded.redirect;
+  if (loaded.error || has_error_status) {
+    const status = loaded.status;
+    if (!loaded.error && has_error_status) {
+      return { status: status || 500, error: new Error() };
+    }
+    const error2 = typeof loaded.error === "string" ? new Error(loaded.error) : loaded.error;
+    if (!(error2 instanceof Error)) {
+      return {
+        status: 500,
+        error: new Error(`"error" property returned from load() must be a string or instance of Error, received type "${typeof error2}"`)
+      };
+    }
+    if (!status || status < 400 || status > 599) {
+      console.warn('"error" returned from load() without a valid status code \u2014 defaulting to 500');
+      return { status: 500, error: error2 };
+    }
+    return { status, error: error2 };
+  }
+  if (loaded.redirect) {
+    if (!loaded.status || Math.floor(loaded.status / 100) !== 3) {
+      throw new Error('"redirect" property returned from load() must be accompanied by a 3xx status code');
+    }
+    if (typeof loaded.redirect !== "string") {
+      throw new Error('"redirect" property returned from load() must be a string');
+    }
+  }
+  if (loaded.dependencies) {
+    if (!Array.isArray(loaded.dependencies) || loaded.dependencies.some((dep) => typeof dep !== "string")) {
+      throw new Error('"dependencies" property returned from load() must be of type string[]');
+    }
+  }
+  if (loaded.context) {
+    throw new Error('You are returning "context" from a load function. "context" was renamed to "stuff", please adjust your code accordingly.');
+  }
+  return loaded;
+}
+function domain_matches(hostname, constraint) {
+  if (!constraint)
+    return true;
+  const normalized = constraint[0] === "." ? constraint.slice(1) : constraint;
+  if (hostname === normalized)
+    return true;
+  return hostname.endsWith("." + normalized);
+}
+function path_matches(path, constraint) {
+  if (!constraint)
+    return true;
+  const normalized = constraint.endsWith("/") ? constraint.slice(0, -1) : constraint;
+  if (path === normalized)
+    return true;
+  return path.startsWith(normalized + "/");
+}
+async function load_node({
+  event,
+  options,
+  state,
+  route,
+  node,
+  $session,
+  stuff,
+  is_error,
+  is_leaf,
+  status,
+  error: error2
+}) {
+  const { module } = node;
+  let uses_credentials = false;
+  const fetched = [];
+  const cookies = parse_1(event.request.headers.get("cookie") || "");
+  const new_cookies = [];
+  let loaded;
+  const should_prerender = node.module.prerender ?? options.prerender.default;
+  const shadow = is_leaf ? await load_shadow_data(route, event, options, should_prerender) : {};
+  if (shadow.cookies) {
+    shadow.cookies.forEach((header) => {
+      new_cookies.push(parseString_1(header));
+    });
+  }
+  if (shadow.error) {
+    loaded = {
+      status: shadow.status,
+      error: shadow.error
+    };
+  } else if (shadow.redirect) {
+    loaded = {
+      status: shadow.status,
+      redirect: shadow.redirect
+    };
+  } else if (module.load) {
+    const load_input = {
+      url: state.prerendering ? new PrerenderingURL(event.url) : new LoadURL(event.url),
+      params: event.params,
+      props: shadow.body || {},
+      routeId: event.routeId,
+      get session() {
+        if (node.module.prerender ?? options.prerender.default) {
+          throw Error("Attempted to access session from a prerendered page. Session would never be populated.");
+        }
+        uses_credentials = true;
+        return $session;
+      },
+      fetch: async (resource, opts = {}) => {
+        let requested;
+        if (typeof resource === "string") {
+          requested = resource;
+        } else {
+          requested = resource.url;
+          opts = {
+            method: resource.method,
+            headers: resource.headers,
+            body: resource.body,
+            mode: resource.mode,
+            credentials: resource.credentials,
+            cache: resource.cache,
+            redirect: resource.redirect,
+            referrer: resource.referrer,
+            integrity: resource.integrity,
+            ...opts
+          };
+        }
+        opts.headers = new Headers(opts.headers);
+        for (const [key2, value] of event.request.headers) {
+          if (key2 !== "authorization" && key2 !== "cookie" && key2 !== "host" && key2 !== "if-none-match" && !opts.headers.has(key2)) {
+            opts.headers.set(key2, value);
+          }
+        }
+        const resolved = resolve(event.url.pathname, requested.split("?")[0]);
+        let response;
+        let dependency;
+        const prefix = options.paths.assets || options.paths.base;
+        const filename = decodeURIComponent(resolved.startsWith(prefix) ? resolved.slice(prefix.length) : resolved).slice(1);
+        const filename_html = `${filename}/index.html`;
+        const is_asset = options.manifest.assets.has(filename);
+        const is_asset_html = options.manifest.assets.has(filename_html);
+        if (is_asset || is_asset_html) {
+          const file = is_asset ? filename : filename_html;
+          if (options.read) {
+            const type = is_asset ? options.manifest.mimeTypes[filename.slice(filename.lastIndexOf("."))] : "text/html";
+            response = new Response(options.read(file), {
+              headers: type ? { "content-type": type } : {}
+            });
+          } else {
+            response = await fetch(`${event.url.origin}/${file}`, opts);
+          }
+        } else if (is_root_relative(resolved)) {
+          if (opts.credentials !== "omit") {
+            uses_credentials = true;
+            const authorization = event.request.headers.get("authorization");
+            const combined_cookies = { ...cookies };
+            for (const cookie2 of new_cookies) {
+              if (!domain_matches(event.url.hostname, cookie2.domain))
+                continue;
+              if (!path_matches(resolved, cookie2.path))
+                continue;
+              combined_cookies[cookie2.name] = cookie2.value;
+            }
+            const cookie = Object.entries(combined_cookies).map(([name, value]) => `${name}=${value}`).join("; ");
+            if (cookie) {
+              opts.headers.set("cookie", cookie);
+            }
+            if (authorization && !opts.headers.has("authorization")) {
+              opts.headers.set("authorization", authorization);
+            }
+          }
+          if (opts.body && typeof opts.body !== "string") {
+            throw new Error("Request body must be a string");
+          }
+          response = await respond(new Request(new URL(requested, event.url).href, { ...opts }), options, {
+            ...state,
+            initiator: route
+          });
+          if (state.prerendering) {
+            dependency = { response, body: null };
+            state.prerendering.dependencies.set(resolved, dependency);
+          }
+        } else {
+          if (resolved.startsWith("//")) {
+            requested = event.url.protocol + requested;
+          }
+          if (`.${new URL(requested).hostname}`.endsWith(`.${event.url.hostname}`) && opts.credentials !== "omit") {
+            uses_credentials = true;
+            const cookie = event.request.headers.get("cookie");
+            if (cookie)
+              opts.headers.set("cookie", cookie);
+          }
+          opts.headers.delete("connection");
+          const external_request = new Request(requested, opts);
+          response = await options.hooks.externalFetch.call(null, external_request);
+        }
+        const set_cookie = response.headers.get("set-cookie");
+        if (set_cookie) {
+          new_cookies.push(...splitCookiesString_1(set_cookie).map((str) => parseString_1(str)));
+        }
+        const proxy = new Proxy(response, {
+          get(response2, key2, _receiver) {
+            async function text() {
+              const body = await response2.text();
+              const headers = {};
+              for (const [key3, value] of response2.headers) {
+                if (key3 !== "set-cookie" && key3 !== "etag") {
+                  headers[key3] = value;
+                }
+              }
+              if (!opts.body || typeof opts.body === "string") {
+                const status_number = Number(response2.status);
+                if (isNaN(status_number)) {
+                  throw new Error(`response.status is not a number. value: "${response2.status}" type: ${typeof response2.status}`);
+                }
+                fetched.push({
+                  url: requested,
+                  body: opts.body,
+                  response: {
+                    status: status_number,
+                    statusText: response2.statusText,
+                    headers,
+                    body
+                  }
+                });
+              }
+              if (dependency) {
+                dependency.body = body;
+              }
+              return body;
+            }
+            if (key2 === "arrayBuffer") {
+              return async () => {
+                const buffer = await response2.arrayBuffer();
+                if (dependency) {
+                  dependency.body = new Uint8Array(buffer);
+                }
+                return buffer;
+              };
+            }
+            if (key2 === "text") {
+              return text;
+            }
+            if (key2 === "json") {
+              return async () => {
+                return JSON.parse(await text());
+              };
+            }
+            return Reflect.get(response2, key2, response2);
+          }
+        });
+        return proxy;
+      },
+      stuff: { ...stuff },
+      status: is_error ? status ?? null : null,
+      error: is_error ? error2 ?? null : null
+    };
+    if (options.dev) {
+      Object.defineProperty(load_input, "page", {
+        get: () => {
+          throw new Error("`page` in `load` functions has been replaced by `url` and `params`");
+        }
+      });
+    }
+    loaded = await module.load.call(null, load_input);
+    if (!loaded) {
+      throw new Error(`load function must return a value${options.dev ? ` (${node.entry})` : ""}`);
+    }
+  } else if (shadow.body) {
+    loaded = {
+      props: shadow.body
+    };
+  } else {
+    loaded = {};
+  }
+  if (shadow.body && state.prerendering) {
+    const pathname = `${event.url.pathname.replace(/\/$/, "")}/__data.json`;
+    const dependency = {
+      response: new Response(void 0),
+      body: JSON.stringify(shadow.body)
+    };
+    state.prerendering.dependencies.set(pathname, dependency);
+  }
+  return {
+    node,
+    props: shadow.body,
+    loaded: normalize(loaded),
+    stuff: loaded.stuff || stuff,
+    fetched,
+    set_cookie_headers: new_cookies.map((new_cookie) => {
+      const { name, value, ...options2 } = new_cookie;
+      return serialize_1(name, value, options2);
+    }),
+    uses_credentials
+  };
+}
+async function load_shadow_data(route, event, options, prerender) {
+  if (!route.shadow)
+    return {};
+  try {
+    const mod = await route.shadow();
+    if (prerender && (mod.post || mod.put || mod.del || mod.patch)) {
+      throw new Error("Cannot prerender pages that have endpoints with mutative methods");
+    }
+    const method = normalize_request_method(event);
+    const is_get = method === "head" || method === "get";
+    const handler = method === "head" ? mod.head || mod.get : mod[method];
+    if (!handler && !is_get) {
+      return {
+        status: 405,
+        error: new Error(`${method} method not allowed`)
+      };
+    }
+    const data = {
+      status: 200,
+      cookies: [],
+      body: {}
+    };
+    if (!is_get) {
+      const result = await handler(event);
+      if (result.fallthrough) {
+        throw new Error("fallthrough is no longer supported. Use matchers instead: https://kit.svelte.dev/docs/routing#advanced-routing-matching");
+      }
+      const { status, headers, body } = validate_shadow_output(result);
+      data.status = status;
+      add_cookies(data.cookies, headers);
+      if (status >= 300 && status < 400) {
+        data.redirect = headers instanceof Headers ? headers.get("location") : headers.location;
+        return data;
+      }
+      data.body = body;
+    }
+    const get = method === "head" && mod.head || mod.get;
+    if (get) {
+      const result = await get(event);
+      if (result.fallthrough) {
+        throw new Error("fallthrough is no longer supported. Use matchers instead: https://kit.svelte.dev/docs/routing#advanced-routing-matching");
+      }
+      const { status, headers, body } = validate_shadow_output(result);
+      add_cookies(data.cookies, headers);
+      data.status = status;
+      if (status >= 400) {
+        data.error = new Error("Failed to load data");
+        return data;
+      }
+      if (status >= 300) {
+        data.redirect = headers instanceof Headers ? headers.get("location") : headers.location;
+        return data;
+      }
+      data.body = { ...body, ...data.body };
+    }
+    return data;
+  } catch (e) {
+    const error2 = coalesce_to_error(e);
+    options.handle_error(error2, event);
+    return {
+      status: 500,
+      error: error2
+    };
+  }
+}
+function add_cookies(target, headers) {
+  const cookies = headers["set-cookie"];
+  if (cookies) {
+    if (Array.isArray(cookies)) {
+      target.push(...cookies);
+    } else {
+      target.push(cookies);
+    }
+  }
+}
+function validate_shadow_output(result) {
+  const { status = 200, body = {} } = result;
+  let headers = result.headers || {};
+  if (headers instanceof Headers) {
+    if (headers.has("set-cookie")) {
+      throw new Error("Endpoint request handler cannot use Headers interface with Set-Cookie headers");
+    }
+  } else {
+    headers = lowercase_keys(headers);
+  }
+  if (!is_pojo(body)) {
+    throw new Error("Body returned from endpoint request handler must be a plain object");
+  }
+  return { status, headers, body };
+}
+async function respond_with_error({
+  event,
+  options,
+  state,
+  $session,
+  status,
+  error: error2,
+  resolve_opts
+}) {
+  try {
+    const branch = [];
+    let stuff = {};
+    if (resolve_opts.ssr) {
+      const default_layout = await options.manifest._.nodes[0]();
+      const default_error = await options.manifest._.nodes[1]();
+      const layout_loaded = await load_node({
+        event,
+        options,
+        state,
+        route: null,
+        node: default_layout,
+        $session,
+        stuff: {},
+        is_error: false,
+        is_leaf: false
+      });
+      const error_loaded = await load_node({
+        event,
+        options,
+        state,
+        route: null,
+        node: default_error,
+        $session,
+        stuff: layout_loaded ? layout_loaded.stuff : {},
+        is_error: true,
+        is_leaf: false,
+        status,
+        error: error2
+      });
+      branch.push(layout_loaded, error_loaded);
+      stuff = error_loaded.stuff;
+    }
+    return await render_response({
+      options,
+      state,
+      $session,
+      page_config: {
+        hydrate: options.hydrate,
+        router: options.router
+      },
+      stuff,
+      status,
+      error: error2,
+      branch,
+      event,
+      resolve_opts
+    });
+  } catch (err) {
+    const error3 = coalesce_to_error(err);
+    options.handle_error(error3, event);
+    return new Response(error3.stack, {
+      status: 500
+    });
+  }
+}
+async function respond$1(opts) {
+  const { event, options, state, $session, route, resolve_opts } = opts;
+  let nodes;
+  if (!resolve_opts.ssr) {
+    return await render_response({
+      ...opts,
+      branch: [],
+      page_config: {
+        hydrate: true,
+        router: true
+      },
+      status: 200,
+      error: null,
+      event,
+      stuff: {}
+    });
+  }
+  try {
+    nodes = await Promise.all(route.a.map((n) => n == void 0 ? n : options.manifest._.nodes[n]()));
+  } catch (err) {
+    const error3 = coalesce_to_error(err);
+    options.handle_error(error3, event);
+    return await respond_with_error({
+      event,
+      options,
+      state,
+      $session,
+      status: 500,
+      error: error3,
+      resolve_opts
+    });
+  }
+  const leaf = nodes[nodes.length - 1].module;
+  let page_config = get_page_config(leaf, options);
+  if (state.prerendering) {
+    const should_prerender = leaf.prerender ?? options.prerender.default;
+    if (!should_prerender) {
+      return new Response(void 0, {
+        status: 204
+      });
+    }
+  }
+  let branch = [];
+  let status = 200;
+  let error2 = null;
+  let set_cookie_headers = [];
+  let stuff = {};
+  ssr: {
+    for (let i = 0; i < nodes.length; i += 1) {
+      const node = nodes[i];
+      let loaded;
+      if (node) {
+        try {
+          loaded = await load_node({
+            ...opts,
+            node,
+            stuff,
+            is_error: false,
+            is_leaf: i === nodes.length - 1
+          });
+          set_cookie_headers = set_cookie_headers.concat(loaded.set_cookie_headers);
+          if (loaded.loaded.redirect) {
+            return with_cookies(new Response(void 0, {
+              status: loaded.loaded.status,
+              headers: {
+                location: loaded.loaded.redirect
+              }
+            }), set_cookie_headers);
+          }
+          if (loaded.loaded.error) {
+            ({ status, error: error2 } = loaded.loaded);
+          }
+        } catch (err) {
+          const e = coalesce_to_error(err);
+          options.handle_error(e, event);
+          status = 500;
+          error2 = e;
+        }
+        if (loaded && !error2) {
+          branch.push(loaded);
+        }
+        if (error2) {
+          while (i--) {
+            if (route.b[i]) {
+              const index = route.b[i];
+              const error_node = await options.manifest._.nodes[index]();
+              let node_loaded;
+              let j = i;
+              while (!(node_loaded = branch[j])) {
+                j -= 1;
+              }
+              try {
+                const error_loaded = await load_node({
+                  ...opts,
+                  node: error_node,
+                  stuff: node_loaded.stuff,
+                  is_error: true,
+                  is_leaf: false,
+                  status,
+                  error: error2
+                });
+                if (error_loaded.loaded.error) {
+                  continue;
+                }
+                page_config = get_page_config(error_node.module, options);
+                branch = branch.slice(0, j + 1).concat(error_loaded);
+                stuff = { ...node_loaded.stuff, ...error_loaded.stuff };
+                break ssr;
+              } catch (err) {
+                const e = coalesce_to_error(err);
+                options.handle_error(e, event);
+                continue;
+              }
+            }
+          }
+          return with_cookies(await respond_with_error({
+            event,
+            options,
+            state,
+            $session,
+            status,
+            error: error2,
+            resolve_opts
+          }), set_cookie_headers);
+        }
+      }
+      if (loaded && loaded.loaded.stuff) {
+        stuff = {
+          ...stuff,
+          ...loaded.loaded.stuff
+        };
+      }
+    }
+  }
+  try {
+    return with_cookies(await render_response({
+      ...opts,
+      stuff,
+      event,
+      page_config,
+      status,
+      error: error2,
+      branch: branch.filter(Boolean)
+    }), set_cookie_headers);
+  } catch (err) {
+    const error3 = coalesce_to_error(err);
+    options.handle_error(error3, event);
+    return with_cookies(await respond_with_error({
+      ...opts,
+      status: 500,
+      error: error3
+    }), set_cookie_headers);
+  }
+}
+function get_page_config(leaf, options) {
+  if ("ssr" in leaf) {
+    throw new Error("`export const ssr` has been removed \u2014 use the handle hook instead: https://kit.svelte.dev/docs/hooks#handle");
+  }
+  return {
+    router: "router" in leaf ? !!leaf.router : options.router,
+    hydrate: "hydrate" in leaf ? !!leaf.hydrate : options.hydrate
+  };
+}
+function with_cookies(response, set_cookie_headers) {
+  if (set_cookie_headers.length) {
+    set_cookie_headers.forEach((value) => {
+      response.headers.append("set-cookie", value);
+    });
+  }
+  return response;
+}
+async function render_page(event, route, options, state, resolve_opts) {
+  if (state.initiator === route) {
+    return new Response(`Not found: ${event.url.pathname}`, {
+      status: 404
+    });
+  }
+  if (route.shadow) {
+    const type = negotiate(event.request.headers.get("accept") || "text/html", [
+      "text/html",
+      "application/json"
+    ]);
+    if (type === "application/json") {
+      return render_endpoint(event, await route.shadow());
+    }
+  }
+  const $session = await options.hooks.getSession(event);
+  return respond$1({
+    event,
+    options,
+    state,
+    $session,
+    resolve_opts,
+    route
+  });
+}
+function negotiate(accept, types) {
+  const parts = accept.split(",").map((str, i) => {
+    const match = /([^/]+)\/([^;]+)(?:;q=([0-9.]+))?/.exec(str);
+    if (match) {
+      const [, type, subtype, q = "1"] = match;
+      return { type, subtype, q: +q, i };
+    }
+    throw new Error(`Invalid Accept header: ${accept}`);
+  }).sort((a, b) => {
+    if (a.q !== b.q) {
+      return b.q - a.q;
+    }
+    if (a.subtype === "*" !== (b.subtype === "*")) {
+      return a.subtype === "*" ? 1 : -1;
+    }
+    if (a.type === "*" !== (b.type === "*")) {
+      return a.type === "*" ? 1 : -1;
+    }
+    return a.i - b.i;
+  });
+  let accepted;
+  let min_priority = Infinity;
+  for (const mimetype of types) {
+    const [type, subtype] = mimetype.split("/");
+    const priority = parts.findIndex((part) => (part.type === type || part.type === "*") && (part.subtype === subtype || part.subtype === "*"));
+    if (priority !== -1 && priority < min_priority) {
+      accepted = mimetype;
+      min_priority = priority;
+    }
+  }
+  return accepted;
+}
+function exec(match, names, types, matchers) {
+  const params = {};
+  for (let i = 0; i < names.length; i += 1) {
+    const name = names[i];
+    const type = types[i];
+    const value = match[i + 1] || "";
+    if (type) {
+      const matcher = matchers[type];
+      if (!matcher)
+        throw new Error(`Missing "${type}" param matcher`);
+      if (!matcher(value))
+        return;
+    }
+    params[name] = value;
+  }
+  return params;
+}
+const DATA_SUFFIX = "/__data.json";
+const default_transform = ({ html }) => html;
+async function respond(request, options, state) {
+  var _a, _b, _c, _d;
+  let url = new URL(request.url);
+  const { parameter, allowed } = options.method_override;
+  const method_override = (_a = url.searchParams.get(parameter)) == null ? void 0 : _a.toUpperCase();
+  if (method_override) {
+    if (request.method === "POST") {
+      if (allowed.includes(method_override)) {
+        request = new Proxy(request, {
+          get: (target, property, _receiver) => {
+            if (property === "method")
+              return method_override;
+            return Reflect.get(target, property, target);
+          }
+        });
+      } else {
+        const verb = allowed.length === 0 ? "enabled" : "allowed";
+        const body = `${parameter}=${method_override} is not ${verb}. See https://kit.svelte.dev/docs/configuration#methodoverride`;
+        return new Response(body, {
+          status: 400
+        });
+      }
+    } else {
+      throw new Error(`${parameter}=${method_override} is only allowed with POST requests`);
+    }
+  }
+  let decoded;
+  try {
+    decoded = decodeURI(url.pathname);
+  } catch {
+    return new Response("Malformed URI", { status: 400 });
+  }
+  let route = null;
+  let params = {};
+  if (options.paths.base && !((_b = state.prerendering) == null ? void 0 : _b.fallback)) {
+    if (!decoded.startsWith(options.paths.base)) {
+      return new Response("Not found", { status: 404 });
+    }
+    decoded = decoded.slice(options.paths.base.length) || "/";
+  }
+  const is_data_request = decoded.endsWith(DATA_SUFFIX);
+  if (is_data_request) {
+    const data_suffix_length = DATA_SUFFIX.length - (options.trailing_slash === "always" ? 1 : 0);
+    decoded = decoded.slice(0, -data_suffix_length) || "/";
+    url = new URL(url.origin + url.pathname.slice(0, -data_suffix_length) + url.search);
+  }
+  if (!((_c = state.prerendering) == null ? void 0 : _c.fallback)) {
+    const matchers = await options.manifest._.matchers();
+    for (const candidate of options.manifest._.routes) {
+      const match = candidate.pattern.exec(decoded);
+      if (!match)
+        continue;
+      const matched = exec(match, candidate.names, candidate.types, matchers);
+      if (matched) {
+        route = candidate;
+        params = decode_params(matched);
+        break;
+      }
+    }
+  }
+  if (route) {
+    if (route.type === "page") {
+      const normalized = normalize_path(url.pathname, options.trailing_slash);
+      if (normalized !== url.pathname && !((_d = state.prerendering) == null ? void 0 : _d.fallback)) {
+        return new Response(void 0, {
+          status: 301,
+          headers: {
+            "x-sveltekit-normalize": "1",
+            location: (normalized.startsWith("//") ? url.origin + normalized : normalized) + (url.search === "?" ? "" : url.search)
+          }
+        });
+      }
+    } else if (is_data_request) {
+      return new Response(void 0, {
+        status: 404
+      });
+    }
+  }
+  const event = {
+    get clientAddress() {
+      if (!state.getClientAddress) {
+        throw new Error(`${"@sveltejs/adapter-static"} does not specify getClientAddress. Please raise an issue`);
+      }
+      Object.defineProperty(event, "clientAddress", {
+        value: state.getClientAddress()
+      });
+      return event.clientAddress;
+    },
+    locals: {},
+    params,
+    platform: state.platform,
+    request,
+    routeId: route && route.id,
+    url
+  };
+  const removed = (property, replacement, suffix = "") => ({
+    get: () => {
+      throw new Error(`event.${property} has been replaced by event.${replacement}` + suffix);
+    }
+  });
+  const details = ". See https://github.com/sveltejs/kit/pull/3384 for details";
+  const body_getter = {
+    get: () => {
+      throw new Error("To access the request body use the text/json/arrayBuffer/formData methods, e.g. `body = await request.json()`" + details);
+    }
+  };
+  Object.defineProperties(event, {
+    method: removed("method", "request.method", details),
+    headers: removed("headers", "request.headers", details),
+    origin: removed("origin", "url.origin"),
+    path: removed("path", "url.pathname"),
+    query: removed("query", "url.searchParams"),
+    body: body_getter,
+    rawBody: body_getter
+  });
+  let resolve_opts = {
+    ssr: true,
+    transformPage: default_transform
+  };
+  try {
+    const response = await options.hooks.handle({
+      event,
+      resolve: async (event2, opts) => {
+        var _a2;
+        if (opts) {
+          resolve_opts = {
+            ssr: opts.ssr !== false,
+            transformPage: opts.transformPage || default_transform
+          };
+        }
+        if ((_a2 = state.prerendering) == null ? void 0 : _a2.fallback) {
+          return await render_response({
+            event: event2,
+            options,
+            state,
+            $session: await options.hooks.getSession(event2),
+            page_config: { router: true, hydrate: true },
+            stuff: {},
+            status: 200,
+            error: null,
+            branch: [],
+            resolve_opts: {
+              ...resolve_opts,
+              ssr: false
+            }
+          });
+        }
+        if (route) {
+          let response2;
+          if (is_data_request && route.type === "page" && route.shadow) {
+            response2 = await render_endpoint(event2, await route.shadow());
+            if (request.headers.has("x-sveltekit-load")) {
+              if (response2.status >= 300 && response2.status < 400) {
+                const location = response2.headers.get("location");
+                if (location) {
+                  const headers = new Headers(response2.headers);
+                  headers.set("x-sveltekit-location", location);
+                  response2 = new Response(void 0, {
+                    status: 204,
+                    headers
+                  });
+                }
+              }
+            }
+          } else {
+            response2 = route.type === "endpoint" ? await render_endpoint(event2, await route.load()) : await render_page(event2, route, options, state, resolve_opts);
+          }
+          if (response2) {
+            if (response2.status === 200 && response2.headers.has("etag")) {
+              let if_none_match_value = request.headers.get("if-none-match");
+              if (if_none_match_value == null ? void 0 : if_none_match_value.startsWith('W/"')) {
+                if_none_match_value = if_none_match_value.substring(2);
+              }
+              const etag = response2.headers.get("etag");
+              if (if_none_match_value === etag) {
+                const headers = new Headers({ etag });
+                for (const key2 of [
+                  "cache-control",
+                  "content-location",
+                  "date",
+                  "expires",
+                  "vary"
+                ]) {
+                  const value = response2.headers.get(key2);
+                  if (value)
+                    headers.set(key2, value);
+                }
+                return new Response(void 0, {
+                  status: 304,
+                  headers
+                });
+              }
+            }
+            return response2;
+          }
+        }
+        if (!state.initiator) {
+          const $session = await options.hooks.getSession(event2);
+          return await respond_with_error({
+            event: event2,
+            options,
+            state,
+            $session,
+            status: 404,
+            error: new Error(`Not found: ${event2.url.pathname}`),
+            resolve_opts
+          });
+        }
+        if (state.prerendering) {
+          return new Response("not found", { status: 404 });
+        }
+        return await fetch(request);
+      },
+      get request() {
+        throw new Error("request in handle has been replaced with event" + details);
+      }
+    });
+    if (response && !(response instanceof Response)) {
+      throw new Error("handle must return a Response object" + details);
+    }
+    return response;
+  } catch (e) {
+    const error2 = coalesce_to_error(e);
+    options.handle_error(error2, event);
+    try {
+      const $session = await options.hooks.getSession(event);
+      return await respond_with_error({
+        event,
+        options,
+        state,
+        $session,
+        status: 500,
+        error: error2,
+        resolve_opts
+      });
+    } catch (e2) {
+      const error3 = coalesce_to_error(e2);
+      return new Response(options.dev ? error3.stack : error3.message, {
+        status: 500
+      });
+    }
+  }
+}
+function set_prerendering(value) {
+}
+const template = ({ head, body, assets: assets2, nonce }) => '<!DOCTYPE html>\n<html lang="en">\n	<head>\n		<meta charset="utf-8" />\n		<link rel="icon" href="' + assets2 + '/favicon.png" />\n		<meta name="viewport" content="width=device-width, initial-scale=1" />\n		<script src="https://cdnjs.cloudflare.com/ajax/libs/iframe-resizer/4.3.1/iframeResizer.contentWindow.min.js"><\/script>\n		' + head + '\n	</head>\n	<body class="">\n		' + body + "\n	</body>	\n</html>\n";
+let read = null;
+set_paths({ "base": "/static", "assets": "" });
+let default_protocol = "https";
+function override(settings) {
+  default_protocol = settings.protocol || default_protocol;
+  set_paths(settings.paths);
+  set_prerendering(settings.prerendering);
+  read = settings.read;
+}
+class Server {
+  constructor(manifest) {
+    this.options = {
+      csp: { "mode": "auto", "directives": { "upgrade-insecure-requests": false, "block-all-mixed-content": false } },
+      dev: false,
+      floc: false,
+      get_stack: (error2) => String(error2),
+      handle_error: (error2, event) => {
+        this.options.hooks.handleError({
+          error: error2,
+          event,
+          get request() {
+            throw new Error("request in handleError has been replaced with event. See https://github.com/sveltejs/kit/pull/3384 for details");
+          }
+        });
+        error2.stack = this.options.get_stack(error2);
+      },
+      hooks: null,
+      hydrate: true,
+      manifest,
+      method_override: { "parameter": "_method", "allowed": [] },
+      paths: { base, assets },
+      prefix: assets + "/_app/immutable/",
+      prerender: {
+        default: true,
+        enabled: true
+      },
+      read,
+      root: Root,
+      service_worker: null,
+      router: true,
+      template,
+      template_contains_nonce: false,
+      trailing_slash: "never"
+    };
+  }
+  async respond(request, options = {}) {
+    if (!(request instanceof Request)) {
+      throw new Error("The first argument to server.respond must be a Request object. See https://github.com/sveltejs/kit/pull/3384 for details");
+    }
+    if (!this.options.hooks) {
+      const module = await import("./chunks/hooks-1c45ba0b.js");
+      this.options.hooks = {
+        getSession: module.getSession || (() => ({})),
+        handle: module.handle || (({ event, resolve: resolve2 }) => resolve2(event)),
+        handleError: module.handleError || (({ error: error2 }) => console.error(error2.stack)),
+        externalFetch: module.externalFetch || fetch
+      };
+    }
+    return respond(request, this.options, options);
+  }
+}
+export { Server, override };
diff --git a/frontend/.svelte-kit/output/server/manifest.js b/frontend/.svelte-kit/output/server/manifest.js
new file mode 100644
index 0000000000000000000000000000000000000000..44ea140c09d78f113ecdefc327f7f07610e3627a
--- /dev/null
+++ b/frontend/.svelte-kit/output/server/manifest.js
@@ -0,0 +1,30 @@
+export const manifest = {
+	appDir: "_app",
+	assets: new Set(["favicon.png","robots.txt","samples/default.jpg","samples/example0.png","samples/example1.png","samples/example2.png","samples/example3.png","samples/example4.png","samples/example5.png","samples/example6.jpg","svelte-welcome.png","svelte-welcome.webp"]),
+	mimeTypes: {".png":"image/png",".txt":"text/plain",".jpg":"image/jpeg",".webp":"image/webp"},
+	_: {
+		entry: {"file":"start-1d6beeeb.js","js":["start-1d6beeeb.js","chunks/index-bcf2726a.js","chunks/paths-d3bcbd10.js"],"css":[]},
+		nodes: [
+			() => import('./nodes/0.js'),
+			() => import('./nodes/1.js'),
+			() => import('./nodes/2.js')
+		],
+		routes: [
+			{
+				type: 'page',
+				id: "",
+				pattern: /^\/$/,
+				names: [],
+				types: [],
+				path: "/",
+				shadow: null,
+				a: [0,2],
+				b: [1]
+			}
+		],
+		matchers: async () => {
+			
+			return {  };
+		}
+	}
+};
diff --git a/frontend/.svelte-kit/output/server/manifest.json b/frontend/.svelte-kit/output/server/manifest.json
new file mode 100644
index 0000000000000000000000000000000000000000..de81f4a277b4882d37f30e958948a4a9fbde693b
--- /dev/null
+++ b/frontend/.svelte-kit/output/server/manifest.json
@@ -0,0 +1,56 @@
+{
+  ".svelte-kit/build/index.js": {
+    "file": "index.js",
+    "src": ".svelte-kit/build/index.js",
+    "isEntry": true,
+    "imports": [
+      "_index-445fd704.js",
+      "_paths-396f020f.js"
+    ],
+    "dynamicImports": [
+      ".svelte-kit/build/hooks.js"
+    ]
+  },
+  "src/routes/__layout.svelte": {
+    "file": "entries/pages/__layout.svelte.js",
+    "src": "src/routes/__layout.svelte",
+    "isEntry": true,
+    "imports": [
+      "_index-445fd704.js"
+    ],
+    "css": [
+      "assets/entries/pages/__layout.svelte-0bf099f6.css"
+    ]
+  },
+  ".svelte-kit/runtime/components/error.svelte": {
+    "file": "entries/fallbacks/error.svelte.js",
+    "src": ".svelte-kit/runtime/components/error.svelte",
+    "isEntry": true,
+    "imports": [
+      "_index-445fd704.js"
+    ]
+  },
+  "src/routes/index.svelte": {
+    "file": "entries/pages/index.svelte.js",
+    "src": "src/routes/index.svelte",
+    "isEntry": true,
+    "imports": [
+      "_index-445fd704.js",
+      "_paths-396f020f.js"
+    ],
+    "css": [
+      "assets/entries/pages/index.svelte-c3297bef.css"
+    ]
+  },
+  "_paths-396f020f.js": {
+    "file": "chunks/paths-396f020f.js"
+  },
+  "_index-445fd704.js": {
+    "file": "chunks/index-445fd704.js"
+  },
+  ".svelte-kit/build/hooks.js": {
+    "file": "chunks/hooks-1c45ba0b.js",
+    "src": ".svelte-kit/build/hooks.js",
+    "isDynamicEntry": true
+  }
+}
\ No newline at end of file
diff --git a/frontend/.svelte-kit/output/server/nodes/0.js b/frontend/.svelte-kit/output/server/nodes/0.js
new file mode 100644
index 0000000000000000000000000000000000000000..2f3e369ca11b85635d73a3701de60fb8db7186e7
--- /dev/null
+++ b/frontend/.svelte-kit/output/server/nodes/0.js
@@ -0,0 +1,7 @@
+import * as module from '../entries/pages/__layout.svelte.js';
+
+export { module };
+export const index = 0;
+export const entry = 'pages/__layout.svelte-f5a1b718.js';
+export const js = ["pages/__layout.svelte-f5a1b718.js","chunks/index-bcf2726a.js"];
+export const css = ["assets/pages/__layout.svelte-b67cf61d.css"];
diff --git a/frontend/.svelte-kit/output/server/nodes/1.js b/frontend/.svelte-kit/output/server/nodes/1.js
new file mode 100644
index 0000000000000000000000000000000000000000..73ec4d7abd0ffa9c86b70fe72ad5530005398950
--- /dev/null
+++ b/frontend/.svelte-kit/output/server/nodes/1.js
@@ -0,0 +1,7 @@
+import * as module from '../entries/fallbacks/error.svelte.js';
+
+export { module };
+export const index = 1;
+export const entry = 'error.svelte-d9523301.js';
+export const js = ["error.svelte-d9523301.js","chunks/index-bcf2726a.js"];
+export const css = [];
diff --git a/frontend/.svelte-kit/output/server/nodes/2.js b/frontend/.svelte-kit/output/server/nodes/2.js
new file mode 100644
index 0000000000000000000000000000000000000000..31209de9cb21b96b5e4ff1d6170efbac1cd951f3
--- /dev/null
+++ b/frontend/.svelte-kit/output/server/nodes/2.js
@@ -0,0 +1,7 @@
+import * as module from '../entries/pages/index.svelte.js';
+
+export { module };
+export const index = 2;
+export const entry = 'pages/index.svelte-1f940fb6.js';
+export const js = ["pages/index.svelte-1f940fb6.js","chunks/index-bcf2726a.js","chunks/paths-d3bcbd10.js"];
+export const css = ["assets/pages/index.svelte-f2b33456.css"];
diff --git a/frontend/.svelte-kit/runtime/app/env.js b/frontend/.svelte-kit/runtime/app/env.js
old mode 100755
new mode 100644
diff --git a/frontend/.svelte-kit/runtime/app/navigation.js b/frontend/.svelte-kit/runtime/app/navigation.js
old mode 100755
new mode 100644
diff --git a/frontend/.svelte-kit/runtime/app/paths.js b/frontend/.svelte-kit/runtime/app/paths.js
old mode 100755
new mode 100644
diff --git a/frontend/.svelte-kit/runtime/app/stores.js b/frontend/.svelte-kit/runtime/app/stores.js
old mode 100755
new mode 100644
diff --git a/frontend/.svelte-kit/runtime/client/singletons.js b/frontend/.svelte-kit/runtime/client/singletons.js
old mode 100755
new mode 100644
diff --git a/frontend/.svelte-kit/runtime/client/start.js b/frontend/.svelte-kit/runtime/client/start.js
old mode 100755
new mode 100644
diff --git a/frontend/.svelte-kit/runtime/components/error.svelte b/frontend/.svelte-kit/runtime/components/error.svelte
old mode 100755
new mode 100644
diff --git a/frontend/.svelte-kit/runtime/components/layout.svelte b/frontend/.svelte-kit/runtime/components/layout.svelte
old mode 100755
new mode 100644
diff --git a/frontend/.svelte-kit/runtime/env.js b/frontend/.svelte-kit/runtime/env.js
old mode 100755
new mode 100644
diff --git a/frontend/.svelte-kit/runtime/paths.js b/frontend/.svelte-kit/runtime/paths.js
old mode 100755
new mode 100644
diff --git a/frontend/.svelte-kit/runtime/server/index.js b/frontend/.svelte-kit/runtime/server/index.js
old mode 100755
new mode 100644
diff --git a/frontend/build/_app/immutable/manifest.json b/frontend/build/_app/immutable/manifest.json
index 8fbccb9f726fdd49993866ccd703fbe1fdcf1add..8cc5be7786f98f6a3ebb6610e16193ae827aba04 100644
--- a/frontend/build/_app/immutable/manifest.json
+++ b/frontend/build/_app/immutable/manifest.json
@@ -1,6 +1,6 @@
 {
   ".svelte-kit/runtime/client/start.js": {
-    "file": "start-b4d3a4a1.js",
+    "file": "start-1d6beeeb.js",
     "src": ".svelte-kit/runtime/client/start.js",
     "isEntry": true,
     "imports": [
@@ -35,7 +35,7 @@
     ]
   },
   "src/routes/index.svelte": {
-    "file": "pages/index.svelte-e78f0615.js",
+    "file": "pages/index.svelte-1f940fb6.js",
     "src": "src/routes/index.svelte",
     "isEntry": true,
     "isDynamicEntry": true,
diff --git a/frontend/build/_app/immutable/pages/index.svelte-1f940fb6.js b/frontend/build/_app/immutable/pages/index.svelte-1f940fb6.js
new file mode 100644
index 0000000000000000000000000000000000000000..ecb049b7a08dd918b98554c8f0187dfb452fe2e7
--- /dev/null
+++ b/frontend/build/_app/immutable/pages/index.svelte-1f940fb6.js
@@ -0,0 +1 @@
+import{S as se,i as ne,s as ie,e as C,k as A,c as T,a as z,m as D,d as I,b as s,K as Oe,g as Z,J as p,t as V,h as F,L as U,E as Q,M as Ne,N as Y,O as K,P as me,Q as ge,j as Le,f as $e,R as oe,T as Se,U as Ue,V as ct,W as Re,w as ue,x as pe,y as de,q as he,o as fe,B as ve,v as ut}from"../chunks/index-bcf2726a.js";import{w as ae,b as at}from"../chunks/paths-d3bcbd10.js";const Pe=[{color:[219,14,154],label:"building"},{color:[147,142,123],label:"pervious surface"},{color:[248,12,0],label:"impervious surface"},{color:[169,113,1],label:"bare soil"},{color:[21,83,174],label:"water"},{color:[25,74,38],label:"coniferous"},{color:[70,228,131],label:"deciduous"},{color:[243,166,13],label:"brushwood"},{color:[102,0,130],label:"vineyard"},{color:[85,255,0],label:"herbaceous vegetation"},{color:[255,243,13],label:"agricultural land"},{color:[228,223,124],label:"plowed land"},{color:[61,230,235],label:"swimming pool"},{color:[255,255,255],label:"snow"},{color:[138,179,160],label:"clear cut"},{color:[107,113,79],label:"mixed"}],Be=["/samples/default.jpg","/samples/example0.png","/samples/example1.png","/samples/example2.png","/samples/example3.png","/samples/example4.png","/samples/example5.png","/samples/example6.jpg"],ke=[["High resolution satellite image, 4K, ultra detailed","Realistic"],["Colorful lego bricks","Lego brick"],["Black and white paper pencil drawing","Pencil"],["Oil on canvas painting","Painting"]];function st(){return BigInt(0xb7dd73e137d20800&((1<<63)-1)*Math.random())}const _e=ae(new Map),je=ae(),Ae=ae(),De=ae(),xe=ae(),Ie=ae({prompt:"Aerial view of rue des Lilas, Toulouse, Haute-Garonne, France",modifier:ke[0][0],seed:st(),steps:20}),be=ae(!1),Me=ae(!1);function Ye(l,e,t){const r=l.slice();return r[3]=e[t],r[5]=t,r}function Je(l){let e,t,r,a,o,n,d,i,k,E,b,P;return{c(){e=C("div"),t=C("input"),n=A(),d=C("label"),i=C("img"),P=A(),this.h()},l(g){e=T(g,"DIV",{class:!0});var v=z(e);t=T(v,"INPUT",{type:!0,name:!0,id:!0,class:!0}),n=D(v),d=T(v,"LABEL",{for:!0,class:!0});var x=z(d);i=T(x,"IMG",{src:!0,alt:!0,class:!0}),x.forEach(I),P=D(v),v.forEach(I),this.h()},h(){s(t,"type","radio"),s(t,"name","samples"),s(t,"id",r="sample-"+l[5]),t.value=a=l[5],t.disabled=o=l[0]===!0,s(t,"class","svelte-1gwcbp"),Oe(i.src,k=at+l[3])||s(i,"src",k),s(i,"alt",E=l[3]),s(i,"class","svelte-1gwcbp"),s(d,"for",b="sample-"+l[5]),s(d,"class","svelte-1gwcbp"),s(e,"class","snap-always snap-start")},m(g,v){Z(g,e,v),p(e,t),p(e,n),p(e,d),p(d,i),p(e,P)},p(g,v){v&1&&o!==(o=g[0]===!0)&&(t.disabled=o)},d(g){g&&I(e)}}}function pt(l){let e,t,r,a,o,n,d,i,k=Be,E=[];for(let b=0;b<k.length;b+=1)E[b]=Je(Ye(l,k,b));return{c(){e=C("div"),t=C("h4"),r=V("Select a Template"),a=A(),o=C("form"),n=C("div");for(let b=0;b<E.length;b+=1)E[b].c();this.h()},l(b){e=T(b,"DIV",{});var P=z(e);t=T(P,"H4",{class:!0});var g=z(t);r=F(g,"Select a Template"),g.forEach(I),a=D(P),o=T(P,"FORM",{class:!0});var v=z(o);n=T(v,"DIV",{class:!0});var x=z(n);for(let u=0;u<E.length;u+=1)E[u].l(x);x.forEach(I),v.forEach(I),P.forEach(I),this.h()},h(){s(t,"class","font-bold mt-6 mb-2 my-6 leading-6"),s(n,"class","samples  svelte-1gwcbp"),s(o,"class","svelte-1gwcbp")},m(b,P){Z(b,e,P),p(e,t),p(t,r),p(e,a),p(e,o),p(o,n);for(let g=0;g<E.length;g+=1)E[g].m(n,null);d||(i=U(o,"input",l[1]),d=!0)},p(b,[P]){if(P&1){k=Be;let g;for(g=0;g<k.length;g+=1){const v=Ye(b,k,g);E[g]?E[g].p(v,P):(E[g]=Je(v),E[g].c(),E[g].m(n,null))}for(;g<E.length;g+=1)E[g].d(1);E.length=k.length}},i:Q,o:Q,d(b){b&&I(e),Ne(E,b),d=!1,i()}}}async function dt(l){return new Promise((e,t)=>{const r=new Image;r.onload=()=>{URL.revokeObjectURL(r.src),e(r)},r.onerror=a=>{t(a)},r.src=URL.createObjectURL(l)})}function ht(l,e,t){let r,a;return Y(l,De,n=>t(2,r=n)),Y(l,be,n=>t(0,a=n)),[a,async n=>{n.preventDefault();const d=Be[parseInt(n.target.value)];if(d){const i=await fetch(at+d).then(E=>E.blob()),k=await dt(i);K(De,r=k,r)}}]}class ft extends se{constructor(e){super(),ne(this,e,ht,pt,ie,{})}}function Xe(l,e,t){const r=l.slice();return r[2]=e[t],r[7]=t,r}function Ke(l){let e,t,r,a,o,n,d,i,k,E,b,P,g=l[2].label+"",v,x,u;return{c(){e=C("div"),t=C("input"),n=A(),d=C("label"),i=me("svg"),k=me("rect"),b=A(),P=C("span"),v=V(g),u=A(),this.h()},l(f){e=T(f,"DIV",{class:!0});var h=z(e);t=T(h,"INPUT",{name:!0,type:!0,id:!0,class:!0}),n=D(h),d=T(h,"LABEL",{for:!0,class:!0});var c=z(d);i=ge(c,"svg",{width:!0,height:!0,viewBox:!0,class:!0});var m=z(i);k=ge(m,"rect",{x:!0,y:!0,width:!0,height:!0,fill:!0}),z(k).forEach(I),m.forEach(I),b=D(c),P=T(c,"SPAN",{class:!0});var w=z(P);v=F(w,g),w.forEach(I),c.forEach(I),u=D(h),h.forEach(I),this.h()},h(){s(t,"name","color"),t.checked=r=l[7]==nt,s(t,"type","radio"),s(t,"id",a="color-"+l[7]),t.value=o=l[7],s(t,"class","svelte-1oy4poo"),s(k,"x","0"),s(k,"y","0"),s(k,"width","20"),s(k,"height","20"),s(k,"fill",E="rgb("+l[2].color.join(",")+")"),s(i,"width","20"),s(i,"height","20"),s(i,"viewBox","0 0 20 20"),s(i,"class","svelte-1oy4poo"),s(P,"class","svelte-1oy4poo"),s(d,"for",x="color-"+l[7]),s(d,"class","svelte-1oy4poo"),s(e,"class","snap-always snap-start")},m(f,h){Z(f,e,h),p(e,t),p(e,n),p(e,d),p(d,i),p(i,k),p(d,b),p(d,P),p(P,v),p(e,u)},p:Q,d(f){f&&I(e)}}}function vt(l){let e,t,r,a,o,n,d,i,k,E,b,P,g,v=l[0].size+"",x,u,f,h=Pe,c=[];for(let m=0;m<h.length;m+=1)c[m]=Ke(Xe(l,h,m));return{c(){e=C("form"),t=C("h4"),r=V("Brush Type"),a=A(),o=C("div");for(let m=0;m<c.length;m+=1)c[m].c();n=A(),d=C("h4"),i=V("Brush Size"),k=A(),E=C("div"),b=C("input"),P=A(),g=C("label"),x=V(v),this.h()},l(m){e=T(m,"FORM",{});var w=z(e);t=T(w,"H4",{class:!0});var y=z(t);r=F(y,"Brush Type"),y.forEach(I),a=D(w),o=T(w,"DIV",{class:!0,name:!0});var M=z(o);for(let B=0;B<c.length;B+=1)c[B].l(M);M.forEach(I),n=D(w),d=T(w,"H4",{class:!0});var _=z(d);i=F(_,"Brush Size"),_.forEach(I),k=D(w),E=T(w,"DIV",{class:!0});var S=z(E);b=T(S,"INPUT",{min:!0,max:!0,step:!0,name:!0,type:!0}),P=D(S),g=T(S,"LABEL",{class:!0,for:!0});var N=z(g);x=F(N,v),N.forEach(I),S.forEach(I),w.forEach(I),this.h()},h(){s(t,"class","font-bold mt-6 mb-2 leading-6 my-3"),s(o,"class","colors svelte-1oy4poo"),s(o,"name","colors"),s(d,"class","font-bold mt-6 mb-2 my-6 leading-6"),b.value="10",s(b,"min","1"),s(b,"max","150"),s(b,"step","1"),s(b,"name","brush"),s(b,"type","range"),s(g,"class","pl-2 svelte-1oy4poo"),s(g,"for","brush"),s(E,"class","brush svelte-1oy4poo")},m(m,w){Z(m,e,w),p(e,t),p(t,r),p(e,a),p(e,o);for(let y=0;y<c.length;y+=1)c[y].m(o,null);p(e,n),p(e,d),p(d,i),p(e,k),p(e,E),p(E,b),p(E,P),p(E,g),p(g,x),u||(f=U(e,"input",l[1]),u=!0)},p(m,[w]){if(w&0){h=Pe;let y;for(y=0;y<h.length;y+=1){const M=Xe(m,h,y);c[y]?c[y].p(M,w):(c[y]=Ke(M),c[y].c(),c[y].m(o,null))}for(;y<c.length;y+=1)c[y].d(1);c.length=h.length}w&1&&v!==(v=m[0].size+"")&&Le(x,v)},i:Q,o:Q,d(m){m&&I(e),Ne(c,m),u=!1,f()}}}const nt=6;function mt(l,e,t){let r;Y(l,xe,k=>t(0,r=k));const{color:a,label:o}=Pe[nt];let n=`rgb(${a.join(",")})`,d=40;return K(xe,r={color:n,size:d,label:o},r),[r,async k=>{const E=k.target;if(E.name==="color"){const b=parseInt(E.value),{color:P,label:g}=Pe[b];n=`rgb(${P.join(",")})`,K(xe,r={color:n,size:d,label:g},r)}else E.name==="brush"&&(d=parseInt(E.value),K(xe,r={color:n,size:d,label:o},r))},a]}class gt extends se{constructor(e){super(),ne(this,e,mt,vt,ie,{})}}function Ze(l,e,t){const r=l.slice();return r[15]=e[t],r}function Qe(l){let e,t=l[15][1]+"",r,a,o;return{c(){e=C("option"),r=V(t),o=V("`"),this.h()},l(n){e=T(n,"OPTION",{});var d=z(e);r=F(d,t),d.forEach(I),o=F(n,"`"),this.h()},h(){e.__value=a=l[15][0],e.value=e.__value},m(n,d){Z(n,e,d),p(e,r),Z(n,o,d)},p:Q,d(n){n&&I(e),n&&I(o)}}}function bt(l){let e,t,r,a,o,n,d,i,k,E,b,P,g,v,x,u,f,h,c,m,w,y,M,_,S,N,B,q,$,J,te,X,O,L,re,ee,le,ce,ye,W=ke,G=[];for(let j=0;j<W.length;j+=1)G[j]=Qe(Ze(l,W,j));return{c(){e=C("form"),t=C("h4"),r=V("Prompt"),a=A(),o=C("input"),d=A(),i=C("h4"),k=V("Modifier"),E=A(),b=C("input"),g=A(),v=C("select"),x=C("option"),u=V("preset");for(let j=0;j<G.length;j+=1)G[j].c();h=A(),c=C("h4"),m=V("Random Seed"),w=A(),y=C("input"),_=A(),S=C("button"),N=V("Random"),q=A(),$=C("h4"),J=V("Sample Steps"),te=A(),X=C("div"),O=C("input"),re=A(),ee=C("label"),le=V(l[2]),this.h()},l(j){e=T(j,"FORM",{});var R=z(e);t=T(R,"H4",{class:!0});var H=z(t);r=F(H,"Prompt"),H.forEach(I),a=D(R),o=T(R,"INPUT",{name:!0,placeholder:!0,style:!0,class:!0}),d=D(R),i=T(R,"H4",{class:!0});var we=z(i);k=F(we,"Modifier"),we.forEach(I),E=D(R),b=T(R,"INPUT",{name:!0,placeholder:!0,style:!0,class:!0}),g=D(R),v=T(R,"SELECT",{name:!0,class:!0});var Ce=z(v);x=T(Ce,"OPTION",{});var Ve=z(x);u=F(Ve,"preset"),Ve.forEach(I);for(let Te=0;Te<G.length;Te+=1)G[Te].l(Ce);Ce.forEach(I),h=D(R),c=T(R,"H4",{class:!0});var Fe=z(c);m=F(Fe,"Random Seed"),Fe.forEach(I),w=D(R),y=T(R,"INPUT",{type:!0,name:!0,placeholder:!0,class:!0}),_=D(R),S=T(R,"BUTTON",{class:!0});var Ge=z(S);N=F(Ge,"Random"),Ge.forEach(I),q=D(R),$=T(R,"H4",{class:!0});var He=z($);J=F(He,"Sample Steps"),He.forEach(I),te=D(R),X=T(R,"DIV",{class:!0});var Ee=z(X);O=T(Ee,"INPUT",{type:!0,name:!0,min:!0,max:!0,step:!0,class:!0}),re=D(Ee),ee=T(Ee,"LABEL",{class:!0,for:!0});var qe=z(ee);le=F(qe,l[2]),qe.forEach(I),Ee.forEach(I),R.forEach(I),this.h()},h(){s(t,"class","font-bold mt-6 mb-2 my-6 leading-6"),s(o,"name","prompt"),s(o,"placeholder","Aerial view of ..., France."),o.disabled=n=l[6]===!0,$e(o,"width","500px"),s(o,"class","svelte-7to72y"),s(i,"class","font-bold mt-6 mb-2 my-6 leading-6"),s(b,"name","modifier"),s(b,"placeholder","High resolution satellite image"),b.disabled=P=l[6]===!0,$e(b,"width","500px"),s(b,"class","svelte-7to72y"),x.disabled=!0,x.selected=!0,x.__value="preset",x.value=x.__value,s(v,"name","presets"),v.disabled=f=l[6]===!0,s(v,"class","svelte-7to72y"),s(c,"class","font-bold mt-6 mb-2 my-6 leading-6"),s(y,"type","Number"),s(y,"name","seed"),s(y,"placeholder","Integer Seed"),y.disabled=M=l[6]===!0,s(y,"class","svelte-7to72y"),S.disabled=B=l[6]===!0,s(S,"class","svelte-7to72y"),s($,"class","font-bold mt-6 mb-2 my-6 leading-6"),s(O,"type","range"),s(O,"name","steps"),s(O,"min","10"),s(O,"max","30"),s(O,"step","1"),O.disabled=L=l[6]===!0,s(O,"class","svelte-7to72y"),s(ee,"class","pl-2 svelte-7to72y"),s(ee,"for","steps"),s(X,"class","flex")},m(j,R){Z(j,e,R),p(e,t),p(t,r),p(e,a),p(e,o),oe(o,l[3]),p(e,d),p(e,i),p(i,k),p(e,E),p(e,b),oe(b,l[4]),p(e,g),p(e,v),p(v,x),p(x,u);for(let H=0;H<G.length;H+=1)G[H].m(v,null);p(e,h),p(e,c),p(c,m),p(e,w),p(e,y),oe(y,l[1]),p(e,_),p(e,S),p(S,N),p(e,q),p(e,$),p($,J),p(e,te),p(e,X),p(X,O),oe(O,l[2]),p(X,re),p(X,ee),p(ee,le),l[14](e),ce||(ye=[U(o,"input",l[8]),U(b,"input",l[9]),U(v,"change",l[10]),U(y,"input",l[11]),U(S,"click",Se(l[12])),U(O,"change",l[13]),U(O,"input",l[13]),U(e,"input",l[7])],ce=!0)},p(j,[R]){if(R&64&&n!==(n=j[6]===!0)&&(o.disabled=n),R&8&&o.value!==j[3]&&oe(o,j[3]),R&64&&P!==(P=j[6]===!0)&&(b.disabled=P),R&16&&b.value!==j[4]&&oe(b,j[4]),R&0){W=ke;let H;for(H=0;H<W.length;H+=1){const we=Ze(j,W,H);G[H]?G[H].p(we,R):(G[H]=Qe(we),G[H].c(),G[H].m(v,null))}for(;H<G.length;H+=1)G[H].d(1);G.length=W.length}R&64&&f!==(f=j[6]===!0)&&(v.disabled=f),R&64&&M!==(M=j[6]===!0)&&(y.disabled=M),R&2&&oe(y,j[1]),R&64&&B!==(B=j[6]===!0)&&(S.disabled=B),R&64&&L!==(L=j[6]===!0)&&(O.disabled=L),R&4&&oe(O,j[2]),R&4&&Le(le,j[2])},i:Q,o:Q,d(j){j&&I(e),Ne(G,j),l[14](null),ce=!1,Ue(ye)}}}function yt(l,e,t){let r,a;Y(l,Ie,h=>t(5,r=h)),Y(l,be,h=>t(6,a=h));function o(){const h=n.elements;K(Ie,r={prompt:h.prompt.value,modifier:h.modifier.value,seed:BigInt(h.seed.value),steps:parseInt(h.steps.value)},r)}let n,d=r.seed,i=r.steps,k=r.prompt,E=r.modifier;function b(){k=this.value,t(3,k)}function P(){E=this.value,t(4,E)}const g=h=>{const c=h.currentTarget.selectedIndex-1;t(4,E=ke[c][0]),K(Ie,r.modifier=ke[c][0],r)};function v(){d=this.value,t(1,d)}const x=()=>{t(1,d=st()),o()};function u(){i=ct(this.value),t(2,i)}function f(h){Re[h?"unshift":"push"](()=>{n=h,t(0,n)})}return[n,d,i,k,E,r,a,o,b,P,g,v,x,u,f]}class wt extends se{constructor(e){super(),ne(this,e,yt,bt,ie,{})}}let _t=(l=21)=>crypto.getRandomValues(new Uint8Array(l)).reduce((e,t)=>(t&=63,t<36?e+=t.toString(36):t<62?e+=(t-26).toString(36).toUpperCase():t>62?e+="-":e+="_",e),"");var xt=typeof globalThis!="undefined"?globalThis:typeof window!="undefined"?window:typeof global!="undefined"?global:typeof self!="undefined"?self:{};function kt(l){return l&&l.__esModule&&Object.prototype.hasOwnProperty.call(l,"default")?l.default:l}var it={exports:{}};(function(l,e){(function(t,r){l.exports=r()})(typeof self!="undefined"?self:xt,function(){return function(t){var r={};function a(o){if(r[o])return r[o].exports;var n=r[o]={i:o,l:!1,exports:{}};return t[o].call(n.exports,n,n.exports,a),n.l=!0,n.exports}return a.m=t,a.c=r,a.d=function(o,n,d){a.o(o,n)||Object.defineProperty(o,n,{enumerable:!0,get:d})},a.r=function(o){typeof Symbol!="undefined"&&Symbol.toStringTag&&Object.defineProperty(o,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(o,"__esModule",{value:!0})},a.t=function(o,n){if(1&n&&(o=a(o)),8&n||4&n&&typeof o=="object"&&o&&o.__esModule)return o;var d=Object.create(null);if(a.r(d),Object.defineProperty(d,"default",{enumerable:!0,value:o}),2&n&&typeof o!="string")for(var i in o)a.d(d,i,function(k){return o[k]}.bind(null,i));return d},a.n=function(o){var n=o&&o.__esModule?function(){return o.default}:function(){return o};return a.d(n,"a",n),n},a.o=function(o,n){return Object.prototype.hasOwnProperty.call(o,n)},a.p="",a(a.s=0)}([function(t,r,a){function o(g,v){return function(x){if(Array.isArray(x))return x}(g)||function(x,u){if(Symbol.iterator in Object(x)||Object.prototype.toString.call(x)==="[object Arguments]"){var f=[],h=!0,c=!1,m=void 0;try{for(var w,y=x[Symbol.iterator]();!(h=(w=y.next()).done)&&(f.push(w.value),!u||f.length!==u);h=!0);}catch(M){c=!0,m=M}finally{try{h||y.return==null||y.return()}finally{if(c)throw m}}return f}}(g,v)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function n(g){return function(v){if(Array.isArray(v)){for(var x=0,u=new Array(v.length);x<v.length;x++)u[x]=v[x];return u}}(g)||function(v){if(Symbol.iterator in Object(v)||Object.prototype.toString.call(v)==="[object Arguments]")return Array.from(v)}(g)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance")}()}function d(g,v){for(var x=0;x<v.length;x++){var u=v[x];u.enumerable=u.enumerable||!1,u.configurable=!0,"value"in u&&(u.writable=!0),Object.defineProperty(g,u.key,u)}}a.r(r);var i=/^#?[0-9A-Fa-f]{1,2}[0-9A-Fa-f]{1,2}[0-9A-Fa-f]{1,2}$/,k=/^rgb\((\s+)?[0-9]{1,3},(\s+)?[0-9]{1,3},(\s+)?[0-9]{1,3}(\s+)?\)$/,E=function(){function g(){(function(u,f){if(!(u instanceof f))throw new TypeError("Cannot call a class as a function")})(this,g),this.canvases={}}var v,x;return v=g,(x=[{key:"parseColor",value:function(u){var f=i.test(u),h=k.test(u);if(!f&&!h)throw new Error("Color is not correct format. #123123 or rgb(123, 123, 123) format required.");if(f){var c=u[0]==="#"?u.slice(1):u;return c=c.length===3?c.split("").reduce(function(_,S){return[].concat(n(_),[S,S])},[]).join(""):c,{r:parseInt(c.slice(0,2),16),g:parseInt(c.slice(2,4),16),b:parseInt(c.slice(4,6),16)}}if(h){var m=o(u.replace(/rgb|\s+|\(|\)/g,"").split(",").map(function(_){return parseInt(_)}),3),w=m[0],y=m[1],M=m[2];return{r:w=w>255?255:w,g:y=y>255?255:y,b:M=M>255?255:M}}}},{key:"make",value:function(u){var f=u.size,h=u.color;try{f*=window.devicePixelRatio;var c=this.parseColor(h),m=JSON.stringify(c);if(this.canvases[m]=this.canvases[m]||{},this.canvases[m][f]!=null)return this.canvases[m][f];var w=document.createElement("canvas");f+=f%2,w.width=f,w.height=f;for(var y=w.getContext("2d"),M=y.createImageData(f,f),_=0;_<M.data.length;_+=4)M.data[_]=255,M.data[_+1]=255,M.data[_+2]=255,M.data[_+3]=0;return this.plotCircle(2*f,4*f*(f/2),f/2,M,f,c),this.fillCircle(M,c),y.putImageData(M,0,0),this.canvases[m][f]=w,w}catch(S){console.error(S)}}},{key:"plotCircle",value:function(u,f,h,c,m,w){var y=-h,M=0,_=2-2*h;do{var S=u-4*(y+1)+(f+4*m*(M-1));c.data[S+0]=w.r,c.data[S+1]=w.g,c.data[S+2]=w.b,c.data[S+3]=255;var N=u-M*(4*m)+(f-4*(y+1));c.data[N+0]=w.r,c.data[N+1]=w.g,c.data[N+2]=w.b,c.data[N+3]=255;var B=u+4*y+(f-M*(4*m));c.data[B+0]=w.r,c.data[B+1]=w.g,c.data[B+2]=w.b,c.data[B+3]=255;var q=u+4*m*(M-1)+(f+4*y);c.data[q+0]=w.r,c.data[q+1]=w.g,c.data[q+2]=w.b,c.data[q+3]=255,(h=_)<=M&&(_+=2*++M+1),(h>y||_>M)&&(_+=2*++y+1)}while(y<0)}},{key:"fillCircle",value:function(u,f){for(var h=4*u.width,c=1;c<u.height-1;c+=1)for(var m=!1,w=!1,y=!1,M=0;M<h;M+=4){var _=h*c+M,S=u.data[_+3],N=S===255;N&&!m?m=!0:S===0&&m?w=!0:N&&m&&w&&(y=!0),m&&w&&!y&&(u.data[_]=f.r,u.data[_+1]=f.g,u.data[_+2]=f.b,u.data[_+3]=255)}}}])&&d(v.prototype,x),g}();function b(g,v){for(var x=0;x<v.length;x++){var u=v[x];u.enumerable=u.enumerable||!1,u.configurable=!0,"value"in u&&(u.writable=!0),Object.defineProperty(g,u.key,u)}}var P=function(){function g(u){(function(f,h){if(!(f instanceof h))throw new TypeError("Cannot call a class as a function")})(this,g),this.canvas=u,this.context=u.getContext("2d"),this.stampMaker=new E,this.configPixelRatio()}var v,x;return v=g,(x=[{key:"configPixelRatio",value:function(){var u=this.canvas,f=u.width,h=u.height;this.canvas.width=f*this.dpr,this.canvas.height=h*this.dpr,this.canvas.style.width="".concat(f,"px"),this.canvas.style.height="".concat(h,"px"),this.context.scale(this.dpr,this.dpr),this.context.imageSmoothingEnabled=!1}},{key:"exportAsPNG",value:function(u){var f=this;return new Promise(function(h){var c=document.createElement("canvas"),m=c.getContext("2d"),w=f.canvas,y=w.width,M=w.height,_=y/f.dpr,S=M/f.dpr;c.width=_,c.height=S,m.imageSmoothingEnabled=!1,m.drawImage(f.canvas,0,0,y,M,0,0,_,S),c.toBlob(function(N){N.lastModifedDate=new Date,N.name=u,h(N)})})}},{key:"distanceBetween",value:function(u,f){return Math.sqrt(Math.pow(f.x-u.x,2)+Math.pow(f.y-u.y,2))}},{key:"angleBetween",value:function(u,f){return Math.atan2(f.x-u.x,f.y-u.y)}},{key:"draw",value:function(u){var f=u.from,h=u.to,c=u.size,m=u.color;this.context.globalCompositeOperation="source-over",this.brush({from:f,to:h,size:c,color:m})}},{key:"erase",value:function(u){var f=u.from,h=u.to,c=u.size;this.context.globalCompositeOperation="destination-out",this.brush({from:f,to:h,size:c,color:"#000000"})}},{key:"brush",value:function(u){var f=this,h=u.from,c=u.to,m=u.size,w=u.color,y=(m-m%2)/2,M=this.stampMaker.make({size:m,color:w});if(h.x!==c.x||h.y!==c.y)for(var _=this.distanceBetween(h,c),S=this.angleBetween(h,c),N=function(J){var te=h.x+Math.sin(S)*J-y,X=h.y+Math.cos(S)*J-y;window.requestAnimationFrame(function(){f.context.drawImage(M,Math.round(te),Math.round(X),m,m)})},B=0;B<_;B+=1)N(B);else{var q=h.x-y,$=h.y-y;this.context.drawImage(M,Math.round(q),Math.round($),m,m)}}},{key:"dpr",get:function(){return window.devicePixelRatio||1}}])&&b(v.prototype,x),g}();r.default=P}])})})(it);var We=kt(it.exports);function Et(l){let e,t;return{c(){e=me("svg"),t=me("path"),this.h()},l(r){e=ge(r,"svg",{xmlns:!0,width:!0,viewBox:!0,class:!0});var a=z(e);t=ge(a,"path",{fill:!0,stroke:!0,"stroke-width":!0,d:!0}),z(t).forEach(I),a.forEach(I),this.h()},h(){s(t,"fill","white"),s(t,"stroke","black"),s(t,"stroke-width","30"),s(t,"d","M480 256c0 123.4-100.5 223.9-223.9 223.9c-48.84 0-95.17-15.58-134.2-44.86c-14.12-10.59-16.97-30.66-6.375-44.81c10.59-14.12 30.62-16.94 44.81-6.375c27.84 20.91 61 31.94 95.88 31.94C344.3 415.8 416 344.1 416 256s-71.69-159.8-159.8-159.8c-37.46 0-73.09 13.49-101.3 36.64l45.12 45.14c17.01 17.02 4.955 46.1-19.1 46.1H35.17C24.58 224.1 16 215.5 16 204.9V59.04c0-24.04 29.07-36.08 46.07-19.07l47.6 47.63C149.9 52.71 201.5 32.11 256.1 32.11C379.5 32.11 480 132.6 480 256z"),s(e,"xmlns","http://www.w3.org/2000/svg"),s(e,"width","20"),s(e,"viewBox","0 0 512 512"),s(e,"class",l[0])},m(r,a){Z(r,e,a),p(e,t)},p(r,[a]){a&1&&s(e,"class",r[0])},i:Q,o:Q,d(r){r&&I(e)}}}function It(l,e,t){let{classNames:r=""}=e;return l.$$set=a=>{"classNames"in a&&t(0,r=a.classNames)},[r]}class St extends se{constructor(e){super(),ne(this,e,It,Et,ie,{classNames:0})}}function Pt(l){var f;let e,t,r,a,o,n,d,i=((f=l[0])==null?void 0:f.label)+"",k,E,b,P,g,v,x,u;return P=new St({}),{c(){e=C("div"),t=C("div"),r=C("canvas"),a=A(),o=C("canvas"),n=A(),d=C("span"),k=V(i),E=A(),b=C("button"),ue(P.$$.fragment),this.h()},l(h){e=T(h,"DIV",{});var c=z(e);t=T(c,"DIV",{class:!0});var m=z(t);r=T(m,"CANVAS",{class:!0,width:!0,height:!0}),z(r).forEach(I),a=D(m),o=T(m,"CANVAS",{class:!0,width:!0,height:!0}),z(o).forEach(I),n=D(m),d=T(m,"SPAN",{class:!0});var w=z(d);k=F(w,i),w.forEach(I),E=D(m),b=T(m,"BUTTON",{class:!0});var y=z(b);pe(P.$$.fragment,y),y.forEach(I),m.forEach(I),c.forEach(I),this.h()},h(){s(r,"class","canvas svelte-vhujxn"),s(r,"width","512"),s(r,"height","512"),s(o,"class","brush svelte-vhujxn"),s(o,"width","10"),s(o,"height","10"),s(d,"class","label svelte-vhujxn"),s(b,"class","absolute bottom-0 left-0 p-3"),b.disabled=g=l[3].size<=0,s(t,"class","relative overflow-clip")},m(h,c){Z(h,e,c),p(e,t),p(t,r),l[11](r),p(t,a),p(t,o),l[12](o),p(t,n),p(t,d),p(d,k),p(t,E),p(t,b),de(P,b,null),v=!0,x||(u=[U(r,"touchmove",Ct),U(r,"pointerenter",Mt),U(r,"pointerup",l[4]),U(r,"pointerleave",l[4]),U(r,"pointercancel",l[4]),U(r,"pointerout",l[4]),U(r,"pointermove",l[6]),U(r,"pointerdown",l[5]),U(b,"click",Se(l[13]))],x=!0)},p(h,[c]){var m;(!v||c&1)&&i!==(i=((m=h[0])==null?void 0:m.label)+"")&&Le(k,i),(!v||c&8&&g!==(g=h[3].size<=0))&&(b.disabled=g)},i(h){v||(he(P.$$.fragment,h),v=!0)},o(h){fe(P.$$.fragment,h),v=!1},d(h){h&&I(e),l[11](null),l[12](null),ve(P),x=!1,Ue(u)}}}function Mt(){}function et(l,e){const t=l.getBoundingClientRect();return{x:(e.clientX-t.left)*(l.width/t.width),y:(e.clientY-t.top)*(l.height/t.height)}}function tt(l){l.fillStyle="#46e483",l.fillRect(0,0,l.canvas.width,l.canvas.height)}function ze(l,e){l.drawImage(e,0,0,l.canvas.width,l.canvas.height)}const Ct=l=>l.preventDefault();function Tt(l,e,t){let r,a,o,n;Y(l,_e,_=>t(3,r=_)),Y(l,De,_=>t(10,a=_)),Y(l,xe,_=>t(0,o=_)),Y(l,Ae,_=>t(18,n=_));let d,i,k,E,b={x:0,y:0},P;ut(()=>{t(9,E=d.getContext("2d")),t(8,k=i.getContext("2d")),window.devicePixelRatio=1,P=new We(d),t(1,d.style.height="unset",d),t(1,d.style.width="unset",d),K(Ae,n=d,n),tt(E)});let g=!1,v;function x(){t(2,i.style.top=`${10+o.size/2}px`,i),t(2,i.style.left=`${10+o.size/2}px`,i),g=!1}function u(_){g=!0,b=et(d,_),P.draw({from:b,to:b,size:o.size,color:o.color}),v=_t(),_e.update(S=>(S.set(v,{brush:o,points:[{from:b,to:b}]}),S))}function f(_){const S=et(d,_);t(2,i.style.top=`${_.offsetY}px`,i),t(2,i.style.left=`${_.offsetX}px`,i),g&&(P.draw({from:b,to:S,size:o.size,color:o.color}),_e.update(N=>{const B=N.get(v);return B==null||B.points.push({from:b,to:S}),N}),b=S)}function h(_){const{size:S,color:N}=_;t(2,i.width=S,i),t(2,i.height=S,i),t(8,k.fillStyle=N,k),k.arc(S/2,S/2,S/2,0,2*Math.PI),k.fill()}function c(){if(r.size<=0)return;const _=Array.from(r.keys());_e.update(S=>(S.delete(_[_.length-1]),S)),m(E)}function m(_){const S=document.createElement("canvas");S.width=512,S.height=512,window.devicePixelRatio=1;const N=new We(S);tt(_),a&&ze(_,a),Array.from(r.values()).forEach(B=>{B.points.forEach((q,$)=>{N.draw({from:q.from,to:q.to,size:B.brush.size,color:B.brush.color})})}),requestAnimationFrame(()=>{ze(_,S)})}function w(_){Re[_?"unshift":"push"](()=>{d=_,t(1,d)})}function y(_){Re[_?"unshift":"push"](()=>{i=_,t(2,i),t(8,k),t(0,o)})}const M=()=>c();return l.$$.update=()=>{l.$$.dirty&257&&k&&o&&(h(o),t(2,i.style.top=`${10+o.size/2}px`,i),t(2,i.style.left=`${10+o.size/2}px`,i)),l.$$.dirty&1536&&a&&(ze(E,a),K(_e,r=new Map,r))},[o,d,i,r,x,u,f,c,k,E,a,w,y,M]}class zt extends se{constructor(e){super(),ne(this,e,Tt,Pt,ie,{})}}function rt(l){let e,t,r;return{c(){e=C("img"),this.h()},l(a){e=T(a,"IMG",{class:!0,alt:!0,src:!0,width:!0,height:!0}),this.h()},h(){s(e,"class",t="image "+(l[1]?"opacity-30":"")+" svelte-1t0h0rs"),s(e,"alt","Generative Map Result"),Oe(e.src,r=l[0])||s(e,"src",r),s(e,"width","512"),s(e,"height","512")},m(a,o){Z(a,e,o)},p(a,o){o&2&&t!==(t="image "+(a[1]?"opacity-30":"")+" svelte-1t0h0rs")&&s(e,"class",t),o&1&&!Oe(e.src,r=a[0])&&s(e,"src",r)},d(a){a&&I(e)}}}function lt(l){let e,t,r,a,o,n;return{c(){e=C("div"),t=me("svg"),r=me("path"),a=A(),o=C("span"),n=V(ot),this.h()},l(d){e=T(d,"DIV",{class:!0});var i=z(e);t=ge(i,"svg",{xmlns:!0,fill:!0,viewBox:!0,class:!0});var k=z(t);r=ge(k,"path",{fill:!0,d:!0}),z(r).forEach(I),k.forEach(I),a=D(i),o=T(i,"SPAN",{class:!0});var E=z(o);n=F(E,ot),E.forEach(I),i.forEach(I),this.h()},h(){s(r,"fill","currentColor"),s(r,"d","M20 12a8 8 0 0 1-8 8v4a12 12 0 0 0 12-12h-4Zm-2-5.3a8 8 0 0 1 2 5.3h4c0-3-1.1-5.8-3-8l-3 2.7Z"),s(t,"xmlns","http://www.w3.org/2000/svg"),s(t,"fill","none"),s(t,"viewBox","0 0 24 24"),s(t,"class","animate-spin max-w-[3rem]"),s(o,"class","text-xs"),s(e,"class","loading svelte-1t0h0rs")},m(d,i){Z(d,e,i),p(e,t),p(t,r),p(e,a),p(e,o),p(o,n)},p:Q,d(d){d&&I(e)}}}function Ot(l){let e,t,r=l[0]&&rt(l),a=l[1]&&lt();return{c(){e=C("div"),r&&r.c(),t=A(),a&&a.c(),this.h()},l(o){e=T(o,"DIV",{class:!0});var n=z(e);r&&r.l(n),t=D(n),a&&a.l(n),n.forEach(I),this.h()},h(){s(e,"class","relative overflow-clip flex flex-col justify-center items-center w-full h-full")},m(o,n){Z(o,e,n),r&&r.m(e,null),p(e,t),a&&a.m(e,null)},p(o,[n]){o[0]?r?r.p(o,n):(r=rt(o),r.c(),r.m(e,t)):r&&(r.d(1),r=null),o[1]?a?a.p(o,n):(a=lt(),a.c(),a.m(e,null)):a&&(a.d(1),a=null)},i:Q,o:Q,d(o){o&&I(e),r&&r.d(),a&&a.d()}}}let ot="";async function Rt(l){return new Promise((e,t)=>{try{const r=document.createElement("a");r.download=`sucess-${Date.now()}.png`,r.target="_self",r.onclick=async a=>{r.href&&URL.revokeObjectURL(r.href),r.href=l},requestAnimationFrame(()=>{console.log("Downloading image."),r.click(),e(null)})}catch{t()}})}async function Bt(l,{prompt:e,modifier:t,steps:r,seed:a}){const o=await fetch("/predict",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({data:[l,e+". "+t,r,a.toString()]})});if(!o.ok)throw new Error("Prediction request failed.");return await o.text()}function jt(l,e,t){let r,a,o,n,d;return Y(l,Me,i=>t(2,r=i)),Y(l,je,i=>t(0,a=i)),Y(l,be,i=>t(1,o=i)),Y(l,Ie,i=>t(3,n=i)),Y(l,Ae,i=>t(4,d=i)),l.$$.update=()=>{l.$$.dirty&26&&(async()=>{if(o){const i=await Bt(d.toDataURL(),n);K(je,a=i,a),K(be,o=!1,o)}})(),l.$$.dirty&5&&(async()=>r&&(await Rt(a),K(Me,r=!1,r)))()},[a,o,r,n,d]}class At extends se{constructor(e){super(),ne(this,e,jt,Ot,ie,{})}}function Dt(l){let e,t,r,a,o,n,d,i,k,E,b,P,g,v,x,u,f,h,c,m,w,y,M,_,S,N,B,q,$,J,te,X;return P=new gt({}),x=new zt({}),f=new At({}),B=new ft({}),$=new wt({}),{c(){e=C("div"),t=C("article"),r=C("h1"),a=V("Drawing to Map"),o=A(),n=C("p"),d=V("This space is for the ControlNet model "),i=C("a"),k=C("span"),E=V("Drawing2Map"),b=A(),ue(P.$$.fragment),g=A(),v=C("div"),ue(x.$$.fragment),u=A(),ue(f.$$.fragment),h=A(),c=C("button"),m=V("Generate Map"),y=A(),M=C("button"),_=V("Save Result"),N=A(),ue(B.$$.fragment),q=A(),ue($.$$.fragment),this.h()},l(O){e=T(O,"DIV",{class:!0});var L=z(e);t=T(L,"ARTICLE",{class:!0});var re=z(t);r=T(re,"H1",{});var ee=z(r);a=F(ee,"Drawing to Map"),ee.forEach(I),o=D(re),n=T(re,"P",{});var le=z(n);d=F(le,"This space is for the ControlNet model "),i=T(le,"A",{href:!0,target:!0});var ce=z(i);k=T(ce,"SPAN",{});var ye=z(k);E=F(ye,"Drawing2Map"),ye.forEach(I),ce.forEach(I),le.forEach(I),re.forEach(I),b=D(L),pe(P.$$.fragment,L),g=D(L),v=T(L,"DIV",{class:!0});var W=z(v);pe(x.$$.fragment,W),u=D(W),pe(f.$$.fragment,W),W.forEach(I),h=D(L),c=T(L,"BUTTON",{class:!0});var G=z(c);m=F(G,"Generate Map"),G.forEach(I),y=D(L),M=T(L,"BUTTON",{class:!0});var j=z(M);_=F(j,"Save Result"),j.forEach(I),N=D(L),pe(B.$$.fragment,L),q=D(L),pe($.$$.fragment,L),L.forEach(I),this.h()},h(){s(i,"href","https://github.com/RubenGres/Drawing2Map"),s(i,"target","_blank"),s(t,"class","prose"),s(v,"class","drawings py-3 -mx-3 svelte-1sy339h"),c.disabled=w=l[0]===!0,s(c,"class","green svelte-1sy339h"),M.disabled=S=l[1]===!0||!l[2],s(M,"class","svelte-1sy339h"),s(e,"class","max-w-screen-md mx-auto px-3 py-5 relative z-0")},m(O,L){Z(O,e,L),p(e,t),p(t,r),p(r,a),p(t,o),p(t,n),p(n,d),p(n,i),p(i,k),p(k,E),p(e,b),de(P,e,null),p(e,g),p(e,v),de(x,v,null),p(v,u),de(f,v,null),p(e,h),p(e,c),p(c,m),p(e,y),p(e,M),p(M,_),p(e,N),de(B,e,null),p(e,q),de($,e,null),J=!0,te||(X=[U(c,"click",Se(l[3])),U(M,"click",Se(l[4]))],te=!0)},p(O,[L]){(!J||L&1&&w!==(w=O[0]===!0))&&(c.disabled=w),(!J||L&6&&S!==(S=O[1]===!0||!O[2]))&&(M.disabled=S)},i(O){J||(he(P.$$.fragment,O),he(x.$$.fragment,O),he(f.$$.fragment,O),he(B.$$.fragment,O),he($.$$.fragment,O),J=!0)},o(O){fe(P.$$.fragment,O),fe(x.$$.fragment,O),fe(f.$$.fragment,O),fe(B.$$.fragment,O),fe($.$$.fragment,O),J=!1},d(O){O&&I(e),ve(P),ve(x),ve(f),ve(B),ve($),te=!1,Ue(X)}}}function Nt(l,e,t){let r,a,o;return Y(l,be,i=>t(0,r=i)),Y(l,Me,i=>t(1,a=i)),Y(l,je,i=>t(2,o=i)),[r,a,o,()=>K(be,r=!0,r),()=>K(Me,a=!0,a)]}class Vt extends se{constructor(e){super(),ne(this,e,Nt,Dt,ie,{})}}export{Vt as default};
diff --git a/frontend/build/_app/immutable/pages/index.svelte-e78f0615.js b/frontend/build/_app/immutable/pages/index.svelte-e78f0615.js
deleted file mode 100644
index 3b1d360cd06a08472b72c1b32b65d8bbc945d070..0000000000000000000000000000000000000000
--- a/frontend/build/_app/immutable/pages/index.svelte-e78f0615.js
+++ /dev/null
@@ -1 +0,0 @@
-import{S as re,i as le,s as oe,e as z,k as j,c as C,a as O,m as A,d as I,b as n,K as ze,g as Y,J as d,t as V,h as F,L as N,E as J,M as De,N as G,O as K,P as de,Q as he,j as Le,f as $e,R as W,T as _e,U as Ne,V as ct,W as Ce,w as se,x as ne,y as ie,q as ce,o as ue,B as pe,v as ut}from"../chunks/index-bcf2726a.js";import{w as ee,b as at}from"../chunks/paths-d3bcbd10.js";const xe=[{color:[219,14,154],label:"building"},{color:[147,142,123],label:"pervious surface"},{color:[248,12,0],label:"impervious surface"},{color:[169,113,1],label:"bare soil"},{color:[21,83,174],label:"water"},{color:[25,74,38],label:"coniferous"},{color:[70,228,131],label:"deciduous"},{color:[243,166,13],label:"brushwood"},{color:[102,0,130],label:"vineyard"},{color:[85,255,0],label:"herbaceous vegetation"},{color:[255,243,13],label:"agricultural land"},{color:[228,223,124],label:"plowed land"},{color:[61,230,235],label:"swimming pool"},{color:[255,255,255],label:"snow"},{color:[138,179,160],label:"clear cut"},{color:[107,113,79],label:"mixed"}],Te=["/samples/default.jpg","/samples/example0.png","/samples/example1.png","/samples/example2.png","/samples/example3.png","/samples/example4.png","/samples/example5.png","/samples/example6.jpg"],Oe=[["High resolution satellite image, 4K, ultra detailed","Realistic"],["Colorful lego bricks","Lego brick"],["Black and white paper pencil drawing","Pencil"],["Oil on canvas painting","Painting"]];function st(){return BigInt(0xb7dd73e137d20800&((1<<63)-1)*Math.random())}const me=ee(new Map),Be=ee(),Re=ee(),je=ee(),ge=ee(),Ae=ee({prompt:"Aerial view of rue des Lilas, Toulouse, Haute-Garonne, France",modifier:Oe[0][0],seed:st(),steps:20}),fe=ee(!1),ke=ee(!1);function Ye(l,e,t){const r=l.slice();return r[3]=e[t],r[5]=t,r}function Je(l){let e,t,r,a,o,s,u,i,x,k,m,M;return{c(){e=z("div"),t=z("input"),s=j(),u=z("label"),i=z("img"),M=j(),this.h()},l(v){e=C(v,"DIV",{class:!0});var b=O(e);t=C(b,"INPUT",{type:!0,name:!0,id:!0,class:!0}),s=A(b),u=C(b,"LABEL",{for:!0,class:!0});var E=O(u);i=C(E,"IMG",{src:!0,alt:!0,class:!0}),E.forEach(I),M=A(b),b.forEach(I),this.h()},h(){n(t,"type","radio"),n(t,"name","samples"),n(t,"id",r="sample-"+l[5]),t.value=a=l[5],t.disabled=o=l[0]===!0,n(t,"class","svelte-1gwcbp"),ze(i.src,x=at+l[3])||n(i,"src",x),n(i,"alt",k=l[3]),n(i,"class","svelte-1gwcbp"),n(u,"for",m="sample-"+l[5]),n(u,"class","svelte-1gwcbp"),n(e,"class","snap-always snap-start")},m(v,b){Y(v,e,b),d(e,t),d(e,s),d(e,u),d(u,i),d(e,M)},p(v,b){b&1&&o!==(o=v[0]===!0)&&(t.disabled=o)},d(v){v&&I(e)}}}function pt(l){let e,t,r,a,o,s,u,i,x=Te,k=[];for(let m=0;m<x.length;m+=1)k[m]=Je(Ye(l,x,m));return{c(){e=z("div"),t=z("h4"),r=V("Select a Template"),a=j(),o=z("form"),s=z("div");for(let m=0;m<k.length;m+=1)k[m].c();this.h()},l(m){e=C(m,"DIV",{});var M=O(e);t=C(M,"H4",{class:!0});var v=O(t);r=F(v,"Select a Template"),v.forEach(I),a=A(M),o=C(M,"FORM",{class:!0});var b=O(o);s=C(b,"DIV",{class:!0});var E=O(s);for(let c=0;c<k.length;c+=1)k[c].l(E);E.forEach(I),b.forEach(I),M.forEach(I),this.h()},h(){n(t,"class","font-bold mt-6 mb-2 my-6 leading-6"),n(s,"class","samples  svelte-1gwcbp"),n(o,"class","svelte-1gwcbp")},m(m,M){Y(m,e,M),d(e,t),d(t,r),d(e,a),d(e,o),d(o,s);for(let v=0;v<k.length;v+=1)k[v].m(s,null);u||(i=N(o,"input",l[1]),u=!0)},p(m,[M]){if(M&1){x=Te;let v;for(v=0;v<x.length;v+=1){const b=Ye(m,x,v);k[v]?k[v].p(b,M):(k[v]=Je(b),k[v].c(),k[v].m(s,null))}for(;v<k.length;v+=1)k[v].d(1);k.length=x.length}},i:J,o:J,d(m){m&&I(e),De(k,m),u=!1,i()}}}async function dt(l){return new Promise((e,t)=>{const r=new Image;r.onload=()=>{URL.revokeObjectURL(r.src),e(r)},r.onerror=a=>{t(a)},r.src=URL.createObjectURL(l)})}function ht(l,e,t){let r,a;return G(l,je,s=>t(2,r=s)),G(l,fe,s=>t(0,a=s)),[a,async s=>{s.preventDefault();const u=Te[parseInt(s.target.value)];if(u){const i=await fetch(at+u).then(k=>k.blob()),x=await dt(i);K(je,r=x,r)}}]}class ft extends re{constructor(e){super(),le(this,e,ht,pt,oe,{})}}function Xe(l,e,t){const r=l.slice();return r[2]=e[t],r[7]=t,r}function Ke(l){let e,t,r,a,o,s,u,i,x,k,m,M,v=l[2].label+"",b,E,c;return{c(){e=z("div"),t=z("input"),s=j(),u=z("label"),i=de("svg"),x=de("rect"),m=j(),M=z("span"),b=V(v),c=j(),this.h()},l(f){e=C(f,"DIV",{class:!0});var h=O(e);t=C(h,"INPUT",{name:!0,type:!0,id:!0,class:!0}),s=A(h),u=C(h,"LABEL",{for:!0,class:!0});var p=O(u);i=he(p,"svg",{width:!0,height:!0,viewBox:!0,class:!0});var g=O(i);x=he(g,"rect",{x:!0,y:!0,width:!0,height:!0,fill:!0}),O(x).forEach(I),g.forEach(I),m=A(p),M=C(p,"SPAN",{class:!0});var w=O(M);b=F(w,v),w.forEach(I),p.forEach(I),c=A(h),h.forEach(I),this.h()},h(){n(t,"name","color"),t.checked=r=l[7]==nt,n(t,"type","radio"),n(t,"id",a="color-"+l[7]),t.value=o=l[7],n(t,"class","svelte-1oy4poo"),n(x,"x","0"),n(x,"y","0"),n(x,"width","20"),n(x,"height","20"),n(x,"fill",k="rgb("+l[2].color.join(",")+")"),n(i,"width","20"),n(i,"height","20"),n(i,"viewBox","0 0 20 20"),n(i,"class","svelte-1oy4poo"),n(M,"class","svelte-1oy4poo"),n(u,"for",E="color-"+l[7]),n(u,"class","svelte-1oy4poo"),n(e,"class","snap-always snap-start")},m(f,h){Y(f,e,h),d(e,t),d(e,s),d(e,u),d(u,i),d(i,x),d(u,m),d(u,M),d(M,b),d(e,c)},p:J,d(f){f&&I(e)}}}function vt(l){let e,t,r,a,o,s,u,i,x,k,m,M,v,b=l[0].size+"",E,c,f,h=xe,p=[];for(let g=0;g<h.length;g+=1)p[g]=Ke(Xe(l,h,g));return{c(){e=z("form"),t=z("h4"),r=V("Brush Type"),a=j(),o=z("div");for(let g=0;g<p.length;g+=1)p[g].c();s=j(),u=z("h4"),i=V("Brush Size"),x=j(),k=z("div"),m=z("input"),M=j(),v=z("label"),E=V(b),this.h()},l(g){e=C(g,"FORM",{});var w=O(e);t=C(w,"H4",{class:!0});var y=O(t);r=F(y,"Brush Type"),y.forEach(I),a=A(w),o=C(w,"DIV",{class:!0,name:!0});var P=O(o);for(let T=0;T<p.length;T+=1)p[T].l(P);P.forEach(I),s=A(w),u=C(w,"H4",{class:!0});var _=O(u);i=F(_,"Brush Size"),_.forEach(I),x=A(w),k=C(w,"DIV",{class:!0});var S=O(k);m=C(S,"INPUT",{min:!0,max:!0,step:!0,name:!0,type:!0}),M=A(S),v=C(S,"LABEL",{class:!0,for:!0});var D=O(v);E=F(D,b),D.forEach(I),S.forEach(I),w.forEach(I),this.h()},h(){n(t,"class","font-bold mt-6 mb-2 leading-6 my-3"),n(o,"class","colors svelte-1oy4poo"),n(o,"name","colors"),n(u,"class","font-bold mt-6 mb-2 my-6 leading-6"),m.value="10",n(m,"min","1"),n(m,"max","150"),n(m,"step","1"),n(m,"name","brush"),n(m,"type","range"),n(v,"class","pl-2 svelte-1oy4poo"),n(v,"for","brush"),n(k,"class","brush svelte-1oy4poo")},m(g,w){Y(g,e,w),d(e,t),d(t,r),d(e,a),d(e,o);for(let y=0;y<p.length;y+=1)p[y].m(o,null);d(e,s),d(e,u),d(u,i),d(e,x),d(e,k),d(k,m),d(k,M),d(k,v),d(v,E),c||(f=N(e,"input",l[1]),c=!0)},p(g,[w]){if(w&0){h=xe;let y;for(y=0;y<h.length;y+=1){const P=Xe(g,h,y);p[y]?p[y].p(P,w):(p[y]=Ke(P),p[y].c(),p[y].m(o,null))}for(;y<p.length;y+=1)p[y].d(1);p.length=h.length}w&1&&b!==(b=g[0].size+"")&&Le(E,b)},i:J,o:J,d(g){g&&I(e),De(p,g),c=!1,f()}}}const nt=6;function mt(l,e,t){let r;G(l,ge,x=>t(0,r=x));const{color:a,label:o}=xe[nt];let s=`rgb(${a.join(",")})`,u=40;return K(ge,r={color:s,size:u,label:o},r),[r,async x=>{const k=x.target;if(k.name==="color"){const m=parseInt(k.value),{color:M,label:v}=xe[m];s=`rgb(${M.join(",")})`,K(ge,r={color:s,size:u,label:v},r)}else k.name==="brush"&&(u=parseInt(k.value),K(ge,r={color:s,size:u,label:o},r))},a]}class gt extends re{constructor(e){super(),le(this,e,mt,vt,oe,{})}}function Ze(l,e,t){const r=l.slice();return r[15]=e[t],r}function Qe(l){let e,t=l[15][1]+"",r,a,o;return{c(){e=z("option"),r=V(t),o=V("`"),this.h()},l(s){e=C(s,"OPTION",{});var u=O(e);r=F(u,t),u.forEach(I),o=F(s,"`"),this.h()},h(){e.__value=a=l[15][0],e.value=e.__value},m(s,u){Y(s,e,u),d(e,r),Y(s,o,u)},p:J,d(s){s&&I(e),s&&I(o)}}}function bt(l){let e,t,r,a,o,s,u,i,x,k,m,M,v,b,E,c,f,h,p,g,w,y,P,_,S,D,T,R,X,Q,Z,$,H,be,Ee,te,ye,Ie,Ue,ae=Oe,q=[];for(let L=0;L<ae.length;L+=1)q[L]=Qe(Ze(l,ae,L));return{c(){e=z("form"),t=z("h4"),r=V("Prompt"),a=j(),o=z("input"),u=j(),i=z("h4"),x=V("Modifier"),k=j(),m=z("input"),v=j(),b=z("select"),E=z("option"),c=V("preset");for(let L=0;L<q.length;L+=1)q[L].c();h=j(),p=z("h4"),g=V("Random Seed"),w=j(),y=z("input"),_=j(),S=z("button"),D=V("Random"),R=j(),X=z("h4"),Q=V("Sample Steps"),Z=j(),$=z("div"),H=z("input"),Ee=j(),te=z("label"),ye=V(l[2]),this.h()},l(L){e=C(L,"FORM",{});var B=O(e);t=C(B,"H4",{class:!0});var U=O(t);r=F(U,"Prompt"),U.forEach(I),a=A(B),o=C(B,"INPUT",{name:!0,placeholder:!0,style:!0,class:!0}),u=A(B),i=C(B,"H4",{class:!0});var ve=O(i);x=F(ve,"Modifier"),ve.forEach(I),k=A(B),m=C(B,"INPUT",{name:!0,placeholder:!0,style:!0,class:!0}),v=A(B),b=C(B,"SELECT",{name:!0,class:!0});var Se=O(b);E=C(Se,"OPTION",{});var Ve=O(E);c=F(Ve,"preset"),Ve.forEach(I);for(let Pe=0;Pe<q.length;Pe+=1)q[Pe].l(Se);Se.forEach(I),h=A(B),p=C(B,"H4",{class:!0});var Fe=O(p);g=F(Fe,"Random Seed"),Fe.forEach(I),w=A(B),y=C(B,"INPUT",{type:!0,name:!0,placeholder:!0,class:!0}),_=A(B),S=C(B,"BUTTON",{class:!0});var He=O(S);D=F(He,"Random"),He.forEach(I),R=A(B),X=C(B,"H4",{class:!0});var Ge=O(X);Q=F(Ge,"Sample Steps"),Ge.forEach(I),Z=A(B),$=C(B,"DIV",{class:!0});var we=O($);H=C(we,"INPUT",{type:!0,name:!0,min:!0,max:!0,step:!0,class:!0}),Ee=A(we),te=C(we,"LABEL",{class:!0,for:!0});var qe=O(te);ye=F(qe,l[2]),qe.forEach(I),we.forEach(I),B.forEach(I),this.h()},h(){n(t,"class","font-bold mt-6 mb-2 my-6 leading-6"),n(o,"name","prompt"),n(o,"placeholder","Aerial view of ..., France."),o.disabled=s=l[5]===!0,$e(o,"width","500px"),n(o,"class","svelte-7to72y"),n(i,"class","font-bold mt-6 mb-2 my-6 leading-6"),n(m,"name","modifier"),n(m,"placeholder","High resolution satellite image"),m.disabled=M=l[5]===!0,$e(m,"width","500px"),n(m,"class","svelte-7to72y"),E.disabled=!0,E.selected=!0,E.__value="preset",E.value=E.__value,n(b,"name","presets"),b.disabled=f=l[5]===!0,n(b,"class","svelte-7to72y"),n(p,"class","font-bold mt-6 mb-2 my-6 leading-6"),n(y,"type","Number"),n(y,"name","seed"),n(y,"placeholder","Integer Seed"),y.disabled=P=l[5]===!0,n(y,"class","svelte-7to72y"),S.disabled=T=l[5]===!0,n(S,"class","svelte-7to72y"),n(X,"class","font-bold mt-6 mb-2 my-6 leading-6"),n(H,"type","range"),n(H,"name","steps"),n(H,"min","10"),n(H,"max","30"),n(H,"step","1"),H.disabled=be=l[5]===!0,n(H,"class","svelte-7to72y"),n(te,"class","pl-2 svelte-7to72y"),n(te,"for","steps"),n($,"class","flex")},m(L,B){Y(L,e,B),d(e,t),d(t,r),d(e,a),d(e,o),W(o,l[3]),d(e,u),d(e,i),d(i,x),d(e,k),d(e,m),W(m,l[4]),d(e,v),d(e,b),d(b,E),d(E,c);for(let U=0;U<q.length;U+=1)q[U].m(b,null);d(e,h),d(e,p),d(p,g),d(e,w),d(e,y),W(y,l[1]),d(e,_),d(e,S),d(S,D),d(e,R),d(e,X),d(X,Q),d(e,Z),d(e,$),d($,H),W(H,l[2]),d($,Ee),d($,te),d(te,ye),l[13](e),Ie||(Ue=[N(o,"input",l[7]),N(m,"input",l[8]),N(b,"change",l[9]),N(y,"input",l[10]),N(S,"click",_e(l[11])),N(H,"change",l[12]),N(H,"input",l[12]),N(e,"input",l[6])],Ie=!0)},p(L,[B]){if(B&32&&s!==(s=L[5]===!0)&&(o.disabled=s),B&8&&o.value!==L[3]&&W(o,L[3]),B&32&&M!==(M=L[5]===!0)&&(m.disabled=M),B&16&&m.value!==L[4]&&W(m,L[4]),B&0){ae=Oe;let U;for(U=0;U<ae.length;U+=1){const ve=Ze(L,ae,U);q[U]?q[U].p(ve,B):(q[U]=Qe(ve),q[U].c(),q[U].m(b,null))}for(;U<q.length;U+=1)q[U].d(1);q.length=ae.length}B&32&&f!==(f=L[5]===!0)&&(b.disabled=f),B&32&&P!==(P=L[5]===!0)&&(y.disabled=P),B&2&&W(y,L[1]),B&32&&T!==(T=L[5]===!0)&&(S.disabled=T),B&32&&be!==(be=L[5]===!0)&&(H.disabled=be),B&4&&W(H,L[2]),B&4&&Le(ye,L[2])},i:J,o:J,d(L){L&&I(e),De(q,L),l[13](null),Ie=!1,Ne(Ue)}}}function yt(l,e,t){let r,a;G(l,Ae,h=>t(14,r=h)),G(l,fe,h=>t(5,a=h));function o(){const h=s.elements;K(Ae,r={prompt:h.prompt.value,modifier:h.modifier.value,seed:BigInt(h.seed.value),steps:parseInt(h.steps.value)},r)}let s,u=r.seed,i=r.steps,x=r.prompt,k=r.modifier;function m(){x=this.value,t(3,x)}function M(){k=this.value,t(4,k)}const v=h=>{t(4,k=h.currentTarget.value)};function b(){u=this.value,t(1,u)}const E=()=>{t(1,u=st()),o()};function c(){i=ct(this.value),t(2,i)}function f(h){Ce[h?"unshift":"push"](()=>{s=h,t(0,s)})}return[s,u,i,x,k,a,o,m,M,v,b,E,c,f]}class wt extends re{constructor(e){super(),le(this,e,yt,bt,oe,{})}}let _t=(l=21)=>crypto.getRandomValues(new Uint8Array(l)).reduce((e,t)=>(t&=63,t<36?e+=t.toString(36):t<62?e+=(t-26).toString(36).toUpperCase():t>62?e+="-":e+="_",e),"");var xt=typeof globalThis!="undefined"?globalThis:typeof window!="undefined"?window:typeof global!="undefined"?global:typeof self!="undefined"?self:{};function kt(l){return l&&l.__esModule&&Object.prototype.hasOwnProperty.call(l,"default")?l.default:l}var it={exports:{}};(function(l,e){(function(t,r){l.exports=r()})(typeof self!="undefined"?self:xt,function(){return function(t){var r={};function a(o){if(r[o])return r[o].exports;var s=r[o]={i:o,l:!1,exports:{}};return t[o].call(s.exports,s,s.exports,a),s.l=!0,s.exports}return a.m=t,a.c=r,a.d=function(o,s,u){a.o(o,s)||Object.defineProperty(o,s,{enumerable:!0,get:u})},a.r=function(o){typeof Symbol!="undefined"&&Symbol.toStringTag&&Object.defineProperty(o,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(o,"__esModule",{value:!0})},a.t=function(o,s){if(1&s&&(o=a(o)),8&s||4&s&&typeof o=="object"&&o&&o.__esModule)return o;var u=Object.create(null);if(a.r(u),Object.defineProperty(u,"default",{enumerable:!0,value:o}),2&s&&typeof o!="string")for(var i in o)a.d(u,i,function(x){return o[x]}.bind(null,i));return u},a.n=function(o){var s=o&&o.__esModule?function(){return o.default}:function(){return o};return a.d(s,"a",s),s},a.o=function(o,s){return Object.prototype.hasOwnProperty.call(o,s)},a.p="",a(a.s=0)}([function(t,r,a){function o(v,b){return function(E){if(Array.isArray(E))return E}(v)||function(E,c){if(Symbol.iterator in Object(E)||Object.prototype.toString.call(E)==="[object Arguments]"){var f=[],h=!0,p=!1,g=void 0;try{for(var w,y=E[Symbol.iterator]();!(h=(w=y.next()).done)&&(f.push(w.value),!c||f.length!==c);h=!0);}catch(P){p=!0,g=P}finally{try{h||y.return==null||y.return()}finally{if(p)throw g}}return f}}(v,b)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function s(v){return function(b){if(Array.isArray(b)){for(var E=0,c=new Array(b.length);E<b.length;E++)c[E]=b[E];return c}}(v)||function(b){if(Symbol.iterator in Object(b)||Object.prototype.toString.call(b)==="[object Arguments]")return Array.from(b)}(v)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance")}()}function u(v,b){for(var E=0;E<b.length;E++){var c=b[E];c.enumerable=c.enumerable||!1,c.configurable=!0,"value"in c&&(c.writable=!0),Object.defineProperty(v,c.key,c)}}a.r(r);var i=/^#?[0-9A-Fa-f]{1,2}[0-9A-Fa-f]{1,2}[0-9A-Fa-f]{1,2}$/,x=/^rgb\((\s+)?[0-9]{1,3},(\s+)?[0-9]{1,3},(\s+)?[0-9]{1,3}(\s+)?\)$/,k=function(){function v(){(function(c,f){if(!(c instanceof f))throw new TypeError("Cannot call a class as a function")})(this,v),this.canvases={}}var b,E;return b=v,(E=[{key:"parseColor",value:function(c){var f=i.test(c),h=x.test(c);if(!f&&!h)throw new Error("Color is not correct format. #123123 or rgb(123, 123, 123) format required.");if(f){var p=c[0]==="#"?c.slice(1):c;return p=p.length===3?p.split("").reduce(function(_,S){return[].concat(s(_),[S,S])},[]).join(""):p,{r:parseInt(p.slice(0,2),16),g:parseInt(p.slice(2,4),16),b:parseInt(p.slice(4,6),16)}}if(h){var g=o(c.replace(/rgb|\s+|\(|\)/g,"").split(",").map(function(_){return parseInt(_)}),3),w=g[0],y=g[1],P=g[2];return{r:w=w>255?255:w,g:y=y>255?255:y,b:P=P>255?255:P}}}},{key:"make",value:function(c){var f=c.size,h=c.color;try{f*=window.devicePixelRatio;var p=this.parseColor(h),g=JSON.stringify(p);if(this.canvases[g]=this.canvases[g]||{},this.canvases[g][f]!=null)return this.canvases[g][f];var w=document.createElement("canvas");f+=f%2,w.width=f,w.height=f;for(var y=w.getContext("2d"),P=y.createImageData(f,f),_=0;_<P.data.length;_+=4)P.data[_]=255,P.data[_+1]=255,P.data[_+2]=255,P.data[_+3]=0;return this.plotCircle(2*f,4*f*(f/2),f/2,P,f,p),this.fillCircle(P,p),y.putImageData(P,0,0),this.canvases[g][f]=w,w}catch(S){console.error(S)}}},{key:"plotCircle",value:function(c,f,h,p,g,w){var y=-h,P=0,_=2-2*h;do{var S=c-4*(y+1)+(f+4*g*(P-1));p.data[S+0]=w.r,p.data[S+1]=w.g,p.data[S+2]=w.b,p.data[S+3]=255;var D=c-P*(4*g)+(f-4*(y+1));p.data[D+0]=w.r,p.data[D+1]=w.g,p.data[D+2]=w.b,p.data[D+3]=255;var T=c+4*y+(f-P*(4*g));p.data[T+0]=w.r,p.data[T+1]=w.g,p.data[T+2]=w.b,p.data[T+3]=255;var R=c+4*g*(P-1)+(f+4*y);p.data[R+0]=w.r,p.data[R+1]=w.g,p.data[R+2]=w.b,p.data[R+3]=255,(h=_)<=P&&(_+=2*++P+1),(h>y||_>P)&&(_+=2*++y+1)}while(y<0)}},{key:"fillCircle",value:function(c,f){for(var h=4*c.width,p=1;p<c.height-1;p+=1)for(var g=!1,w=!1,y=!1,P=0;P<h;P+=4){var _=h*p+P,S=c.data[_+3],D=S===255;D&&!g?g=!0:S===0&&g?w=!0:D&&g&&w&&(y=!0),g&&w&&!y&&(c.data[_]=f.r,c.data[_+1]=f.g,c.data[_+2]=f.b,c.data[_+3]=255)}}}])&&u(b.prototype,E),v}();function m(v,b){for(var E=0;E<b.length;E++){var c=b[E];c.enumerable=c.enumerable||!1,c.configurable=!0,"value"in c&&(c.writable=!0),Object.defineProperty(v,c.key,c)}}var M=function(){function v(c){(function(f,h){if(!(f instanceof h))throw new TypeError("Cannot call a class as a function")})(this,v),this.canvas=c,this.context=c.getContext("2d"),this.stampMaker=new k,this.configPixelRatio()}var b,E;return b=v,(E=[{key:"configPixelRatio",value:function(){var c=this.canvas,f=c.width,h=c.height;this.canvas.width=f*this.dpr,this.canvas.height=h*this.dpr,this.canvas.style.width="".concat(f,"px"),this.canvas.style.height="".concat(h,"px"),this.context.scale(this.dpr,this.dpr),this.context.imageSmoothingEnabled=!1}},{key:"exportAsPNG",value:function(c){var f=this;return new Promise(function(h){var p=document.createElement("canvas"),g=p.getContext("2d"),w=f.canvas,y=w.width,P=w.height,_=y/f.dpr,S=P/f.dpr;p.width=_,p.height=S,g.imageSmoothingEnabled=!1,g.drawImage(f.canvas,0,0,y,P,0,0,_,S),p.toBlob(function(D){D.lastModifedDate=new Date,D.name=c,h(D)})})}},{key:"distanceBetween",value:function(c,f){return Math.sqrt(Math.pow(f.x-c.x,2)+Math.pow(f.y-c.y,2))}},{key:"angleBetween",value:function(c,f){return Math.atan2(f.x-c.x,f.y-c.y)}},{key:"draw",value:function(c){var f=c.from,h=c.to,p=c.size,g=c.color;this.context.globalCompositeOperation="source-over",this.brush({from:f,to:h,size:p,color:g})}},{key:"erase",value:function(c){var f=c.from,h=c.to,p=c.size;this.context.globalCompositeOperation="destination-out",this.brush({from:f,to:h,size:p,color:"#000000"})}},{key:"brush",value:function(c){var f=this,h=c.from,p=c.to,g=c.size,w=c.color,y=(g-g%2)/2,P=this.stampMaker.make({size:g,color:w});if(h.x!==p.x||h.y!==p.y)for(var _=this.distanceBetween(h,p),S=this.angleBetween(h,p),D=function(Q){var Z=h.x+Math.sin(S)*Q-y,$=h.y+Math.cos(S)*Q-y;window.requestAnimationFrame(function(){f.context.drawImage(P,Math.round(Z),Math.round($),g,g)})},T=0;T<_;T+=1)D(T);else{var R=h.x-y,X=h.y-y;this.context.drawImage(P,Math.round(R),Math.round(X),g,g)}}},{key:"dpr",get:function(){return window.devicePixelRatio||1}}])&&m(b.prototype,E),v}();r.default=M}])})})(it);var We=kt(it.exports);function Et(l){let e,t;return{c(){e=de("svg"),t=de("path"),this.h()},l(r){e=he(r,"svg",{xmlns:!0,width:!0,viewBox:!0,class:!0});var a=O(e);t=he(a,"path",{fill:!0,stroke:!0,"stroke-width":!0,d:!0}),O(t).forEach(I),a.forEach(I),this.h()},h(){n(t,"fill","white"),n(t,"stroke","black"),n(t,"stroke-width","30"),n(t,"d","M480 256c0 123.4-100.5 223.9-223.9 223.9c-48.84 0-95.17-15.58-134.2-44.86c-14.12-10.59-16.97-30.66-6.375-44.81c10.59-14.12 30.62-16.94 44.81-6.375c27.84 20.91 61 31.94 95.88 31.94C344.3 415.8 416 344.1 416 256s-71.69-159.8-159.8-159.8c-37.46 0-73.09 13.49-101.3 36.64l45.12 45.14c17.01 17.02 4.955 46.1-19.1 46.1H35.17C24.58 224.1 16 215.5 16 204.9V59.04c0-24.04 29.07-36.08 46.07-19.07l47.6 47.63C149.9 52.71 201.5 32.11 256.1 32.11C379.5 32.11 480 132.6 480 256z"),n(e,"xmlns","http://www.w3.org/2000/svg"),n(e,"width","20"),n(e,"viewBox","0 0 512 512"),n(e,"class",l[0])},m(r,a){Y(r,e,a),d(e,t)},p(r,[a]){a&1&&n(e,"class",r[0])},i:J,o:J,d(r){r&&I(e)}}}function It(l,e,t){let{classNames:r=""}=e;return l.$$set=a=>{"classNames"in a&&t(0,r=a.classNames)},[r]}class St extends re{constructor(e){super(),le(this,e,It,Et,oe,{classNames:0})}}function Pt(l){var f;let e,t,r,a,o,s,u,i=((f=l[0])==null?void 0:f.label)+"",x,k,m,M,v,b,E,c;return M=new St({}),{c(){e=z("div"),t=z("div"),r=z("canvas"),a=j(),o=z("canvas"),s=j(),u=z("span"),x=V(i),k=j(),m=z("button"),se(M.$$.fragment),this.h()},l(h){e=C(h,"DIV",{});var p=O(e);t=C(p,"DIV",{class:!0});var g=O(t);r=C(g,"CANVAS",{class:!0,width:!0,height:!0}),O(r).forEach(I),a=A(g),o=C(g,"CANVAS",{class:!0,width:!0,height:!0}),O(o).forEach(I),s=A(g),u=C(g,"SPAN",{class:!0});var w=O(u);x=F(w,i),w.forEach(I),k=A(g),m=C(g,"BUTTON",{class:!0});var y=O(m);ne(M.$$.fragment,y),y.forEach(I),g.forEach(I),p.forEach(I),this.h()},h(){n(r,"class","canvas svelte-vhujxn"),n(r,"width","512"),n(r,"height","512"),n(o,"class","brush svelte-vhujxn"),n(o,"width","10"),n(o,"height","10"),n(u,"class","label svelte-vhujxn"),n(m,"class","absolute bottom-0 left-0 p-3"),m.disabled=v=l[3].size<=0,n(t,"class","relative overflow-clip")},m(h,p){Y(h,e,p),d(e,t),d(t,r),l[11](r),d(t,a),d(t,o),l[12](o),d(t,s),d(t,u),d(u,x),d(t,k),d(t,m),ie(M,m,null),b=!0,E||(c=[N(r,"touchmove",zt),N(r,"pointerenter",Mt),N(r,"pointerup",l[4]),N(r,"pointerleave",l[4]),N(r,"pointercancel",l[4]),N(r,"pointerout",l[4]),N(r,"pointermove",l[6]),N(r,"pointerdown",l[5]),N(m,"click",_e(l[13]))],E=!0)},p(h,[p]){var g;(!b||p&1)&&i!==(i=((g=h[0])==null?void 0:g.label)+"")&&Le(x,i),(!b||p&8&&v!==(v=h[3].size<=0))&&(m.disabled=v)},i(h){b||(ce(M.$$.fragment,h),b=!0)},o(h){ue(M.$$.fragment,h),b=!1},d(h){h&&I(e),l[11](null),l[12](null),pe(M),E=!1,Ne(c)}}}function Mt(){}function et(l,e){const t=l.getBoundingClientRect();return{x:(e.clientX-t.left)*(l.width/t.width),y:(e.clientY-t.top)*(l.height/t.height)}}function tt(l){l.fillStyle="#46e483",l.fillRect(0,0,l.canvas.width,l.canvas.height)}function Me(l,e){l.drawImage(e,0,0,l.canvas.width,l.canvas.height)}const zt=l=>l.preventDefault();function Ct(l,e,t){let r,a,o,s;G(l,me,_=>t(3,r=_)),G(l,je,_=>t(10,a=_)),G(l,ge,_=>t(0,o=_)),G(l,Re,_=>t(18,s=_));let u,i,x,k,m={x:0,y:0},M;ut(()=>{t(9,k=u.getContext("2d")),t(8,x=i.getContext("2d")),window.devicePixelRatio=1,M=new We(u),t(1,u.style.height="unset",u),t(1,u.style.width="unset",u),K(Re,s=u,s),tt(k)});let v=!1,b;function E(){t(2,i.style.top=`${10+o.size/2}px`,i),t(2,i.style.left=`${10+o.size/2}px`,i),v=!1}function c(_){v=!0,m=et(u,_),M.draw({from:m,to:m,size:o.size,color:o.color}),b=_t(),me.update(S=>(S.set(b,{brush:o,points:[{from:m,to:m}]}),S))}function f(_){const S=et(u,_);t(2,i.style.top=`${_.offsetY}px`,i),t(2,i.style.left=`${_.offsetX}px`,i),v&&(M.draw({from:m,to:S,size:o.size,color:o.color}),me.update(D=>{const T=D.get(b);return T==null||T.points.push({from:m,to:S}),D}),m=S)}function h(_){const{size:S,color:D}=_;t(2,i.width=S,i),t(2,i.height=S,i),t(8,x.fillStyle=D,x),x.arc(S/2,S/2,S/2,0,2*Math.PI),x.fill()}function p(){if(r.size<=0)return;const _=Array.from(r.keys());me.update(S=>(S.delete(_[_.length-1]),S)),g(k)}function g(_){const S=document.createElement("canvas");S.width=512,S.height=512,window.devicePixelRatio=1;const D=new We(S);tt(_),a&&Me(_,a),Array.from(r.values()).forEach(T=>{T.points.forEach((R,X)=>{D.draw({from:R.from,to:R.to,size:T.brush.size,color:T.brush.color})})}),requestAnimationFrame(()=>{Me(_,S)})}function w(_){Ce[_?"unshift":"push"](()=>{u=_,t(1,u)})}function y(_){Ce[_?"unshift":"push"](()=>{i=_,t(2,i),t(8,x),t(0,o)})}const P=()=>p();return l.$$.update=()=>{l.$$.dirty&257&&x&&o&&(h(o),t(2,i.style.top=`${10+o.size/2}px`,i),t(2,i.style.left=`${10+o.size/2}px`,i)),l.$$.dirty&1536&&a&&(Me(k,a),K(me,r=new Map,r))},[o,u,i,r,E,c,f,p,x,k,a,w,y,P]}class Tt extends re{constructor(e){super(),le(this,e,Ct,Pt,oe,{})}}function rt(l){let e,t,r;return{c(){e=z("img"),this.h()},l(a){e=C(a,"IMG",{class:!0,alt:!0,src:!0,width:!0,height:!0}),this.h()},h(){n(e,"class",t="image "+(l[1]?"opacity-30":"")+" svelte-1t0h0rs"),n(e,"alt","Generative Map Result"),ze(e.src,r=l[0])||n(e,"src",r),n(e,"width","512"),n(e,"height","512")},m(a,o){Y(a,e,o)},p(a,o){o&2&&t!==(t="image "+(a[1]?"opacity-30":"")+" svelte-1t0h0rs")&&n(e,"class",t),o&1&&!ze(e.src,r=a[0])&&n(e,"src",r)},d(a){a&&I(e)}}}function lt(l){let e,t,r,a,o,s;return{c(){e=z("div"),t=de("svg"),r=de("path"),a=j(),o=z("span"),s=V(ot),this.h()},l(u){e=C(u,"DIV",{class:!0});var i=O(e);t=he(i,"svg",{xmlns:!0,fill:!0,viewBox:!0,class:!0});var x=O(t);r=he(x,"path",{fill:!0,d:!0}),O(r).forEach(I),x.forEach(I),a=A(i),o=C(i,"SPAN",{class:!0});var k=O(o);s=F(k,ot),k.forEach(I),i.forEach(I),this.h()},h(){n(r,"fill","currentColor"),n(r,"d","M20 12a8 8 0 0 1-8 8v4a12 12 0 0 0 12-12h-4Zm-2-5.3a8 8 0 0 1 2 5.3h4c0-3-1.1-5.8-3-8l-3 2.7Z"),n(t,"xmlns","http://www.w3.org/2000/svg"),n(t,"fill","none"),n(t,"viewBox","0 0 24 24"),n(t,"class","animate-spin max-w-[3rem]"),n(o,"class","text-xs"),n(e,"class","loading svelte-1t0h0rs")},m(u,i){Y(u,e,i),d(e,t),d(t,r),d(e,a),d(e,o),d(o,s)},p:J,d(u){u&&I(e)}}}function Ot(l){let e,t,r=l[0]&&rt(l),a=l[1]&&lt();return{c(){e=z("div"),r&&r.c(),t=j(),a&&a.c(),this.h()},l(o){e=C(o,"DIV",{class:!0});var s=O(e);r&&r.l(s),t=A(s),a&&a.l(s),s.forEach(I),this.h()},h(){n(e,"class","relative overflow-clip flex flex-col justify-center items-center w-full h-full")},m(o,s){Y(o,e,s),r&&r.m(e,null),d(e,t),a&&a.m(e,null)},p(o,[s]){o[0]?r?r.p(o,s):(r=rt(o),r.c(),r.m(e,t)):r&&(r.d(1),r=null),o[1]?a?a.p(o,s):(a=lt(),a.c(),a.m(e,null)):a&&(a.d(1),a=null)},i:J,o:J,d(o){o&&I(e),r&&r.d(),a&&a.d()}}}let ot="";async function Bt(l){return new Promise((e,t)=>{try{const r=document.createElement("a");r.download=`sucess-${Date.now()}.png`,r.target="_self",r.onclick=async a=>{r.href&&URL.revokeObjectURL(r.href),r.href=l},requestAnimationFrame(()=>{console.log("Downloading image."),r.click(),e(null)})}catch{t()}})}async function Rt(l,{prompt:e,modifier:t,steps:r,seed:a}){const o=await fetch("/predict",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({data:[l,e+". "+t,r,a.toString()]})});if(!o.ok)throw new Error("Prediction request failed.");return await o.text()}function jt(l,e,t){let r,a,o,s,u;return G(l,ke,i=>t(2,r=i)),G(l,Be,i=>t(0,a=i)),G(l,fe,i=>t(1,o=i)),G(l,Ae,i=>t(3,s=i)),G(l,Re,i=>t(4,u=i)),l.$$.update=()=>{l.$$.dirty&26&&(async()=>{if(o){const i=await Rt(u.toDataURL(),s);K(Be,a=i,a),K(fe,o=!1,o)}})(),l.$$.dirty&5&&(async()=>r&&(await Bt(a),K(ke,r=!1,r)))()},[a,o,r,s,u]}class At extends re{constructor(e){super(),le(this,e,jt,Ot,oe,{})}}function Dt(l){let e,t,r,a,o,s,u,i,x,k,m,M,v,b,E,c,f,h,p,g,w,y,P,_,S,D;return s=new gt({}),x=new Tt({}),m=new At({}),w=new ft({}),P=new wt({}),{c(){e=z("div"),t=z("article"),r=z("h1"),a=V("Drawing to Map"),o=j(),se(s.$$.fragment),u=j(),i=z("div"),se(x.$$.fragment),k=j(),se(m.$$.fragment),M=j(),v=z("button"),b=V("Generate Map"),c=j(),f=z("button"),h=V("Save Result"),g=j(),se(w.$$.fragment),y=j(),se(P.$$.fragment),this.h()},l(T){e=C(T,"DIV",{class:!0});var R=O(e);t=C(R,"ARTICLE",{class:!0});var X=O(t);r=C(X,"H1",{});var Q=O(r);a=F(Q,"Drawing to Map"),Q.forEach(I),X.forEach(I),o=A(R),ne(s.$$.fragment,R),u=A(R),i=C(R,"DIV",{class:!0});var Z=O(i);ne(x.$$.fragment,Z),k=A(Z),ne(m.$$.fragment,Z),Z.forEach(I),M=A(R),v=C(R,"BUTTON",{class:!0});var $=O(v);b=F($,"Generate Map"),$.forEach(I),c=A(R),f=C(R,"BUTTON",{class:!0});var H=O(f);h=F(H,"Save Result"),H.forEach(I),g=A(R),ne(w.$$.fragment,R),y=A(R),ne(P.$$.fragment,R),R.forEach(I),this.h()},h(){n(t,"class","prose"),n(i,"class","drawings py-3 -mx-3 svelte-1sy339h"),v.disabled=E=l[0]===!0,n(v,"class","green svelte-1sy339h"),f.disabled=p=l[1]===!0||!l[2],n(f,"class","svelte-1sy339h"),n(e,"class","max-w-screen-md mx-auto px-3 py-5 relative z-0")},m(T,R){Y(T,e,R),d(e,t),d(t,r),d(r,a),d(e,o),ie(s,e,null),d(e,u),d(e,i),ie(x,i,null),d(i,k),ie(m,i,null),d(e,M),d(e,v),d(v,b),d(e,c),d(e,f),d(f,h),d(e,g),ie(w,e,null),d(e,y),ie(P,e,null),_=!0,S||(D=[N(v,"click",_e(l[3])),N(f,"click",_e(l[4]))],S=!0)},p(T,[R]){(!_||R&1&&E!==(E=T[0]===!0))&&(v.disabled=E),(!_||R&6&&p!==(p=T[1]===!0||!T[2]))&&(f.disabled=p)},i(T){_||(ce(s.$$.fragment,T),ce(x.$$.fragment,T),ce(m.$$.fragment,T),ce(w.$$.fragment,T),ce(P.$$.fragment,T),_=!0)},o(T){ue(s.$$.fragment,T),ue(x.$$.fragment,T),ue(m.$$.fragment,T),ue(w.$$.fragment,T),ue(P.$$.fragment,T),_=!1},d(T){T&&I(e),pe(s),pe(x),pe(m),pe(w),pe(P),S=!1,Ne(D)}}}function Lt(l,e,t){let r,a,o;return G(l,fe,i=>t(0,r=i)),G(l,ke,i=>t(1,a=i)),G(l,Be,i=>t(2,o=i)),[r,a,o,()=>K(fe,r=!0,r),()=>K(ke,a=!0,a)]}class Vt extends re{constructor(e){super(),le(this,e,Lt,Dt,oe,{})}}export{Vt as default};
diff --git a/static/_app/immutable/start-b4d3a4a1.js b/frontend/build/_app/immutable/start-1d6beeeb.js
similarity index 99%
rename from static/_app/immutable/start-b4d3a4a1.js
rename to frontend/build/_app/immutable/start-1d6beeeb.js
index f165897f4c21568181fa506a1647b8873ec965ce..dcd012ae0238efd15f345c37e96564368e90ec86 100644
--- a/static/_app/immutable/start-b4d3a4a1.js
+++ b/frontend/build/_app/immutable/start-1d6beeeb.js
@@ -1 +1 @@
-import{S as Ye,i as Ge,s as Me,e as Fe,c as Xe,a as He,d as D,b as me,f as K,g as V,t as Ze,h as Qe,j as et,k as tt,l as P,m as nt,n as Y,o as C,p as G,q as T,r as st,u as rt,v as ye,w as z,x as ne,y as q,z as se,A as re,B as J,C as ie,D as Ce}from"./chunks/index-bcf2726a.js";import{s as it,w as ce,a as at}from"./chunks/paths-d3bcbd10.js";function ot(s){let e,t,i;const l=[s[1]||{}];var c=s[0][0];function f(n){let r={};for(let a=0;a<l.length;a+=1)r=ie(r,l[a]);return{props:r}}return c&&(e=new c(f())),{c(){e&&z(e.$$.fragment),t=P()},l(n){e&&ne(e.$$.fragment,n),t=P()},m(n,r){e&&q(e,n,r),V(n,t,r),i=!0},p(n,r){const a=r&2?se(l,[re(n[1]||{})]):{};if(c!==(c=n[0][0])){if(e){Y();const d=e;C(d.$$.fragment,1,0,()=>{J(d,1)}),G()}c?(e=new c(f()),z(e.$$.fragment),T(e.$$.fragment,1),q(e,t.parentNode,t)):e=null}else c&&e.$set(a)},i(n){i||(e&&T(e.$$.fragment,n),i=!0)},o(n){e&&C(e.$$.fragment,n),i=!1},d(n){n&&D(t),e&&J(e,n)}}}function ct(s){let e,t,i;const l=[s[1]||{}];var c=s[0][0];function f(n){let r={$$slots:{default:[dt]},$$scope:{ctx:n}};for(let a=0;a<l.length;a+=1)r=ie(r,l[a]);return{props:r}}return c&&(e=new c(f(s))),{c(){e&&z(e.$$.fragment),t=P()},l(n){e&&ne(e.$$.fragment,n),t=P()},m(n,r){e&&q(e,n,r),V(n,t,r),i=!0},p(n,r){const a=r&2?se(l,[re(n[1]||{})]):{};if(r&525&&(a.$$scope={dirty:r,ctx:n}),c!==(c=n[0][0])){if(e){Y();const d=e;C(d.$$.fragment,1,0,()=>{J(d,1)}),G()}c?(e=new c(f(n)),z(e.$$.fragment),T(e.$$.fragment,1),q(e,t.parentNode,t)):e=null}else c&&e.$set(a)},i(n){i||(e&&T(e.$$.fragment,n),i=!0)},o(n){e&&C(e.$$.fragment,n),i=!1},d(n){n&&D(t),e&&J(e,n)}}}function lt(s){let e,t,i;const l=[s[2]||{}];var c=s[0][1];function f(n){let r={};for(let a=0;a<l.length;a+=1)r=ie(r,l[a]);return{props:r}}return c&&(e=new c(f())),{c(){e&&z(e.$$.fragment),t=P()},l(n){e&&ne(e.$$.fragment,n),t=P()},m(n,r){e&&q(e,n,r),V(n,t,r),i=!0},p(n,r){const a=r&4?se(l,[re(n[2]||{})]):{};if(c!==(c=n[0][1])){if(e){Y();const d=e;C(d.$$.fragment,1,0,()=>{J(d,1)}),G()}c?(e=new c(f()),z(e.$$.fragment),T(e.$$.fragment,1),q(e,t.parentNode,t)):e=null}else c&&e.$set(a)},i(n){i||(e&&T(e.$$.fragment,n),i=!0)},o(n){e&&C(e.$$.fragment,n),i=!1},d(n){n&&D(t),e&&J(e,n)}}}function ft(s){let e,t,i;const l=[s[2]||{}];var c=s[0][1];function f(n){let r={$$slots:{default:[ut]},$$scope:{ctx:n}};for(let a=0;a<l.length;a+=1)r=ie(r,l[a]);return{props:r}}return c&&(e=new c(f(s))),{c(){e&&z(e.$$.fragment),t=P()},l(n){e&&ne(e.$$.fragment,n),t=P()},m(n,r){e&&q(e,n,r),V(n,t,r),i=!0},p(n,r){const a=r&4?se(l,[re(n[2]||{})]):{};if(r&521&&(a.$$scope={dirty:r,ctx:n}),c!==(c=n[0][1])){if(e){Y();const d=e;C(d.$$.fragment,1,0,()=>{J(d,1)}),G()}c?(e=new c(f(n)),z(e.$$.fragment),T(e.$$.fragment,1),q(e,t.parentNode,t)):e=null}else c&&e.$set(a)},i(n){i||(e&&T(e.$$.fragment,n),i=!0)},o(n){e&&C(e.$$.fragment,n),i=!1},d(n){n&&D(t),e&&J(e,n)}}}function ut(s){let e,t,i;const l=[s[3]||{}];var c=s[0][2];function f(n){let r={};for(let a=0;a<l.length;a+=1)r=ie(r,l[a]);return{props:r}}return c&&(e=new c(f())),{c(){e&&z(e.$$.fragment),t=P()},l(n){e&&ne(e.$$.fragment,n),t=P()},m(n,r){e&&q(e,n,r),V(n,t,r),i=!0},p(n,r){const a=r&8?se(l,[re(n[3]||{})]):{};if(c!==(c=n[0][2])){if(e){Y();const d=e;C(d.$$.fragment,1,0,()=>{J(d,1)}),G()}c?(e=new c(f()),z(e.$$.fragment),T(e.$$.fragment,1),q(e,t.parentNode,t)):e=null}else c&&e.$set(a)},i(n){i||(e&&T(e.$$.fragment,n),i=!0)},o(n){e&&C(e.$$.fragment,n),i=!1},d(n){n&&D(t),e&&J(e,n)}}}function dt(s){let e,t,i,l;const c=[ft,lt],f=[];function n(r,a){return r[0][2]?0:1}return e=n(s),t=f[e]=c[e](s),{c(){t.c(),i=P()},l(r){t.l(r),i=P()},m(r,a){f[e].m(r,a),V(r,i,a),l=!0},p(r,a){let d=e;e=n(r),e===d?f[e].p(r,a):(Y(),C(f[d],1,1,()=>{f[d]=null}),G(),t=f[e],t?t.p(r,a):(t=f[e]=c[e](r),t.c()),T(t,1),t.m(i.parentNode,i))},i(r){l||(T(t),l=!0)},o(r){C(t),l=!1},d(r){f[e].d(r),r&&D(i)}}}function Te(s){let e,t=s[5]&&je(s);return{c(){e=Fe("div"),t&&t.c(),this.h()},l(i){e=Xe(i,"DIV",{id:!0,"aria-live":!0,"aria-atomic":!0,style:!0});var l=He(e);t&&t.l(l),l.forEach(D),this.h()},h(){me(e,"id","svelte-announcer"),me(e,"aria-live","assertive"),me(e,"aria-atomic","true"),K(e,"position","absolute"),K(e,"left","0"),K(e,"top","0"),K(e,"clip","rect(0 0 0 0)"),K(e,"clip-path","inset(50%)"),K(e,"overflow","hidden"),K(e,"white-space","nowrap"),K(e,"width","1px"),K(e,"height","1px")},m(i,l){V(i,e,l),t&&t.m(e,null)},p(i,l){i[5]?t?t.p(i,l):(t=je(i),t.c(),t.m(e,null)):t&&(t.d(1),t=null)},d(i){i&&D(e),t&&t.d()}}}function je(s){let e;return{c(){e=Ze(s[6])},l(t){e=Qe(t,s[6])},m(t,i){V(t,e,i)},p(t,i){i&64&&et(e,t[6])},d(t){t&&D(e)}}}function pt(s){let e,t,i,l,c;const f=[ct,ot],n=[];function r(d,L){return d[0][1]?0:1}e=r(s),t=n[e]=f[e](s);let a=s[4]&&Te(s);return{c(){t.c(),i=tt(),a&&a.c(),l=P()},l(d){t.l(d),i=nt(d),a&&a.l(d),l=P()},m(d,L){n[e].m(d,L),V(d,i,L),a&&a.m(d,L),V(d,l,L),c=!0},p(d,[L]){let E=e;e=r(d),e===E?n[e].p(d,L):(Y(),C(n[E],1,1,()=>{n[E]=null}),G(),t=n[e],t?t.p(d,L):(t=n[e]=f[e](d),t.c()),T(t,1),t.m(i.parentNode,i)),d[4]?a?a.p(d,L):(a=Te(d),a.c(),a.m(l.parentNode,l)):a&&(a.d(1),a=null)},i(d){c||(T(t),c=!0)},o(d){C(t),c=!1},d(d){n[e].d(d),d&&D(i),a&&a.d(d),d&&D(l)}}}function ht(s,e,t){let{stores:i}=e,{page:l}=e,{components:c}=e,{props_0:f=null}=e,{props_1:n=null}=e,{props_2:r=null}=e;st("__svelte__",i),rt(i.page.notify);let a=!1,d=!1,L=null;return ye(()=>{const E=i.page.subscribe(()=>{a&&(t(5,d=!0),t(6,L=document.title||"untitled page"))});return t(4,a=!0),E}),s.$$set=E=>{"stores"in E&&t(7,i=E.stores),"page"in E&&t(8,l=E.page),"components"in E&&t(0,c=E.components),"props_0"in E&&t(1,f=E.props_0),"props_1"in E&&t(2,n=E.props_1),"props_2"in E&&t(3,r=E.props_2)},s.$$.update=()=>{s.$$.dirty&384&&i.page.set(l)},[c,f,n,r,a,d,L,i,l]}class _t extends Ye{constructor(e){super(),Ge(this,e,ht,pt,Me,{stores:7,page:8,components:0,props_0:1,props_1:2,props_2:3})}}const mt="modulepreload",Ie={},gt="/static/_app/immutable/",ge=function(e,t){return!t||t.length===0?e():Promise.all(t.map(i=>{if(i=`${gt}${i}`,i in Ie)return;Ie[i]=!0;const l=i.endsWith(".css"),c=l?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${i}"]${c}`))return;const f=document.createElement("link");if(f.rel=l?"stylesheet":mt,l||(f.as="script",f.crossOrigin=""),f.href=i,document.head.appendChild(f),l)return new Promise((n,r)=>{f.addEventListener("load",n),f.addEventListener("error",()=>r(new Error(`Unable to preload CSS for ${i}`)))})})).then(()=>e())},wt={},le=[()=>ge(()=>import("./pages/__layout.svelte-f5a1b718.js"),["pages/__layout.svelte-f5a1b718.js","assets/pages/__layout.svelte-b67cf61d.css","chunks/index-bcf2726a.js"]),()=>ge(()=>import("./error.svelte-d9523301.js"),["error.svelte-d9523301.js","chunks/index-bcf2726a.js"]),()=>ge(()=>import("./pages/index.svelte-e78f0615.js"),["pages/index.svelte-e78f0615.js","assets/pages/index.svelte-f2b33456.css","chunks/index-bcf2726a.js","chunks/paths-d3bcbd10.js"])],bt={"":[[0,2],[1]]};function yt(s){s.client}function De(s){return s instanceof Error||s&&s.name&&s.message?s:new Error(JSON.stringify(s))}function Ve(s){if(s.fallthrough)throw new Error("fallthrough is no longer supported. Use matchers instead: https://kit.svelte.dev/docs/routing#advanced-routing-matching");if("maxage"in s)throw new Error("maxage should be replaced with cache: { maxage }");const e=s.status&&s.status>=400&&s.status<=599&&!s.redirect;if(s.error||e){const t=s.status;if(!s.error&&e)return{status:t||500,error:new Error};const i=typeof s.error=="string"?new Error(s.error):s.error;return i instanceof Error?!t||t<400||t>599?(console.warn('"error" returned from load() without a valid status code \u2014 defaulting to 500'),{status:500,error:i}):{status:t,error:i}:{status:500,error:new Error(`"error" property returned from load() must be a string or instance of Error, received type "${typeof i}"`)}}if(s.redirect){if(!s.status||Math.floor(s.status/100)!==3)throw new Error('"redirect" property returned from load() must be accompanied by a 3xx status code');if(typeof s.redirect!="string")throw new Error('"redirect" property returned from load() must be a string')}if(s.dependencies&&(!Array.isArray(s.dependencies)||s.dependencies.some(t=>typeof t!="string")))throw new Error('"dependencies" property returned from load() must be of type string[]');if(s.context)throw new Error('You are returning "context" from a load function. "context" was renamed to "stuff", please adjust your code accordingly.');return s}function vt(s,e){return s==="/"||e==="ignore"?s:e==="never"?s.endsWith("/")?s.slice(0,-1):s:e==="always"&&!s.endsWith("/")?s+"/":s}class $t extends URL{get hash(){throw new Error("url.hash is inaccessible from load. Consider accessing hash from the page store within the script tag of your component.")}}function ze(s){let e=s.baseURI;if(!e){const t=s.getElementsByTagName("base");e=t.length?t[0].href:s.URL}return e}function ve(){return{x:pageXOffset,y:pageYOffset}}function qe(s){return s.composedPath().find(t=>t instanceof Node&&t.nodeName.toUpperCase()==="A")}function Je(s){return s instanceof SVGAElement?new URL(s.href.baseVal,document.baseURI):new URL(s.href)}function Ke(s){const e=ce(s);let t=!0;function i(){t=!0,e.update(f=>f)}function l(f){t=!1,e.set(f)}function c(f){let n;return e.subscribe(r=>{(n===void 0||t&&r!==n)&&f(n=r)})}return{notify:i,set:l,subscribe:c}}function kt(){const{set:s,subscribe:e}=ce(!1),t="1685758204608";let i;async function l(){clearTimeout(i);const f=await fetch(`${at}/_app/version.json`,{headers:{pragma:"no-cache","cache-control":"no-cache"}});if(f.ok){const{version:n}=await f.json(),r=n!==t;return r&&(s(!0),clearTimeout(i)),r}else throw new Error(`Version check failed: ${f.status}`)}return{subscribe:e,check:l}}function Et(s){let e=5381,t=s.length;if(typeof s=="string")for(;t;)e=e*33^s.charCodeAt(--t);else for(;t;)e=e*33^s[--t];return(e>>>0).toString(36)}const $e=window.fetch;function Rt(s,e){let i=`script[sveltekit\\:data-type="data"][sveltekit\\:data-url=${JSON.stringify(typeof s=="string"?s:s.url)}]`;e&&typeof e.body=="string"&&(i+=`[sveltekit\\:data-body="${Et(e.body)}"]`);const l=document.querySelector(i);if(l&&l.textContent){const{body:c,...f}=JSON.parse(l.textContent);return Promise.resolve(new Response(c,f))}return $e(s,e)}const Lt=/^(\.\.\.)?(\w+)(?:=(\w+))?$/;function St(s){const e=[],t=[];let i=!0;return{pattern:s===""?/^\/$/:new RegExp(`^${decodeURIComponent(s).split(/(?:@[a-zA-Z0-9_-]+)?(?:\/|$)/).map((c,f,n)=>{const r=/^\[\.\.\.(\w+)(?:=(\w+))?\]$/.exec(c);if(r)return e.push(r[1]),t.push(r[2]),"(?:/(.*))?";const a=f===n.length-1;return c&&"/"+c.split(/\[(.+?)\]/).map((d,L)=>{if(L%2){const[,E,X,M]=Lt.exec(d);return e.push(X),t.push(M),E?"(.*?)":"([^/]+?)"}return a&&d.includes(".")&&(i=!1),d.normalize().replace(/%5[Bb]/g,"[").replace(/%5[Dd]/g,"]").replace(/#/g,"%23").replace(/\?/g,"%3F").replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}).join("")}).join("")}${i?"/?":""}$`),names:e,types:t}}function Ut(s,e,t,i){const l={};for(let c=0;c<e.length;c+=1){const f=e[c],n=t[c],r=s[c+1]||"";if(n){const a=i[n];if(!a)throw new Error(`Missing "${n}" param matcher`);if(!a(r))return}l[f]=r}return l}function At(s,e,t){return Object.entries(e).map(([l,[c,f,n]])=>{const{pattern:r,names:a,types:d}=St(l);return{id:l,exec:L=>{const E=r.exec(L);if(E)return Ut(E,a,d,t)},a:c.map(L=>s[L]),b:f.map(L=>s[L]),has_shadow:!!n}})}const We="sveltekit:scroll",B="sveltekit:index",we=At(le,bt,wt),Nt=le[0](),Ot=le[1](),Be={};let te={};try{te=JSON.parse(sessionStorage[We])}catch{}function be(s){te[s]=ve()}function xt({target:s,session:e,base:t,trailing_slash:i}){var xe;const l=new Map,c=[],f={url:Ke({}),page:Ke({}),navigating:ce(null),session:ce(e),updated:kt()},n={id:null,promise:null},r={before_navigate:[],after_navigate:[]};let a={branch:[],error:null,session_id:0,stuff:Be,url:null},d=!1,L=!0,E=!1,X=1,M=null,ke,Ee,Re=!1;f.session.subscribe(async o=>{Ee=o,Re&&(X+=1,pe(new URL(location.href),[],!0))}),Re=!0;let F=!0,j=(xe=history.state)==null?void 0:xe[B];j||(j=Date.now(),history.replaceState({...history.state,[B]:j},"",location.href));const fe=te[j];fe&&(history.scrollRestoration="manual",scrollTo(fe.x,fe.y));let ue=!1,de,Le;async function Se(o,{noscroll:p=!1,replaceState:w=!1,keepfocus:u=!1,state:h={}},b){if(typeof o=="string"&&(o=new URL(o,ze(document))),F)return _e({url:o,scroll:p?ve():null,keepfocus:u,redirect_chain:b,details:{state:h,replaceState:w},accepted:()=>{},blocked:()=>{}});await Q(o)}async function Ue(o){const p=Oe(o);if(!p)throw new Error("Attempted to prefetch a URL that does not belong to this app");return n.promise=Ne(p,!1),n.id=p.id,n.promise}async function pe(o,p,w,u,h){var R,S,N;const b=Oe(o),v=Le={};let _=b&&await Ne(b,w);if(!_&&o.origin===location.origin&&o.pathname===location.pathname&&(_=await Z({status:404,error:new Error(`Not found: ${o.pathname}`),url:o,routeId:null})),!_)return await Q(o),!1;if(Le!==v)return!1;if(c.length=0,_.redirect)if(p.length>10||p.includes(o.pathname))_=await Z({status:500,error:new Error("Redirect loop"),url:o,routeId:null});else return F?Se(new URL(_.redirect,o).href,{},[...p,o.pathname]):await Q(new URL(_.redirect,location.href)),!1;else((S=(R=_.props)==null?void 0:R.page)==null?void 0:S.status)>=400&&await f.updated.check()&&await Q(o);if(E=!0,u&&u.details){const{details:$}=u,y=$.replaceState?0:1;$.state[B]=j+=y,history[$.replaceState?"replaceState":"pushState"]($.state,"",o)}if(d?(a=_.state,_.props.page&&(_.props.page.url=o),ke.$set(_.props)):Ae(_),u){const{scroll:$,keepfocus:y}=u;if(!y){const U=document.body,g=U.getAttribute("tabindex");(N=getSelection())==null||N.removeAllRanges(),U.tabIndex=-1,U.focus({preventScroll:!0}),g!==null?U.setAttribute("tabindex",g):U.removeAttribute("tabindex")}if(await Ce(),L){const U=o.hash&&document.getElementById(o.hash.slice(1));$?scrollTo($.x,$.y):U?U.scrollIntoView():scrollTo(0,0)}}else await Ce();n.promise=null,n.id=null,L=!0,_.props.page&&(de=_.props.page);const m=_.state.branch[_.state.branch.length-1];F=(m==null?void 0:m.module.router)!==!1,h&&h(),E=!1}function Ae(o){a=o.state;const p=document.querySelector("style[data-sveltekit]");if(p&&p.remove(),de=o.props.page,ke=new _t({target:s,props:{...o.props,stores:f},hydrate:!0}),F){const w={from:null,to:new URL(location.href)};r.after_navigate.forEach(u=>u(w))}d=!0}async function he({url:o,params:p,stuff:w,branch:u,status:h,error:b,routeId:v}){var y,U;const _=u.filter(Boolean),m=_.find(g=>{var O;return(O=g.loaded)==null?void 0:O.redirect}),R={redirect:(y=m==null?void 0:m.loaded)==null?void 0:y.redirect,state:{url:o,params:p,branch:u,error:b,stuff:w,session_id:X},props:{components:_.map(g=>g.module.default)}};for(let g=0;g<_.length;g+=1){const O=_[g].loaded;R.props[`props_${g}`]=O?await O.props:null}if(!a.url||o.href!==a.url.href||a.error!==b||a.stuff!==w){R.props.page={error:b,params:p,routeId:v,status:h,stuff:w,url:o};const g=(O,k)=>{Object.defineProperty(R.props.page,O,{get:()=>{throw new Error(`$page.${O} has been replaced by $page.url.${k}`)}})};g("origin","origin"),g("path","pathname"),g("query","searchParams")}const N=_[_.length-1],$=(U=N==null?void 0:N.loaded)==null?void 0:U.cache;if($){const g=o.pathname+o.search;let O=!1;const k=()=>{l.get(g)===R&&l.delete(g),x(),clearTimeout(A)},A=setTimeout(k,$.maxage*1e3),x=f.session.subscribe(()=>{O&&k()});O=!0,l.set(g,R)}return R}async function H({status:o,error:p,module:w,url:u,params:h,stuff:b,props:v,routeId:_}){const m={module:w,uses:{params:new Set,url:!1,session:!1,stuff:!1,dependencies:new Set},loaded:null,stuff:b};function R(y){const{href:U}=new URL(y,u);m.uses.dependencies.add(U)}v&&m.uses.dependencies.add(u.href);const S={};for(const y in h)Object.defineProperty(S,y,{get(){return m.uses.params.add(y),h[y]},enumerable:!0});const N=Ee,$=new $t(u);if(w.load){const y={routeId:_,params:S,props:v||{},get url(){return m.uses.url=!0,$},get session(){return m.uses.session=!0,N},get stuff(){return m.uses.stuff=!0,{...b}},async fetch(g,O){let k;typeof g=="string"?k=g:(k=g.url,O={body:g.method==="GET"||g.method==="HEAD"?void 0:await g.blob(),cache:g.cache,credentials:g.credentials,headers:g.headers,integrity:g.integrity,keepalive:g.keepalive,method:g.method,mode:g.mode,redirect:g.redirect,referrer:g.referrer,referrerPolicy:g.referrerPolicy,signal:g.signal,...O});const A=new URL(k,u).href;return R(A),d?$e(A,O):Rt(k,O)},status:o!=null?o:null,error:p!=null?p:null};let U;if(U=await w.load.call(null,y),!U)throw new Error("load function must return a value");m.loaded=Ve(U),m.loaded.stuff&&(m.stuff=m.loaded.stuff),m.loaded.dependencies&&m.loaded.dependencies.forEach(R)}else v&&(m.loaded=Ve({props:v}));return m}async function Ne({id:o,url:p,params:w,route:u},h){var U,g,O;if(n.id===o&&n.promise)return n.promise;if(!h){const k=l.get(o);if(k)return k}const{a:b,b:v,has_shadow:_}=u,m=a.url&&{url:o!==a.url.pathname+a.url.search,params:Object.keys(w).filter(k=>a.params[k]!==w[k]),session:X!==a.session_id};let R=[],S=Be,N=!1,$=200,y=null;b.forEach(k=>k().catch(()=>{}));e:for(let k=0;k<b.length;k+=1){let A;try{if(!b[k])continue;const x=await b[k](),I=a.branch[k];if(!I||x!==I.module||m.url&&I.uses.url||m.params.some(W=>I.uses.params.has(W))||m.session&&I.uses.session||Array.from(I.uses.dependencies).some(W=>c.some(oe=>oe(W)))||N&&I.uses.stuff){let W={};const oe=_&&k===b.length-1;if(oe){const ee=await $e(`${p.pathname}${p.pathname.endsWith("/")?"":"/"}__data.json${p.search}`,{headers:{"x-sveltekit-load":"true"}});if(ee.ok){const Pe=ee.headers.get("x-sveltekit-location");if(Pe)return{redirect:Pe,props:{},state:a};W=ee.status===204?{}:await ee.json()}else $=ee.status,y=new Error("Failed to load data")}if(y||(A=await H({module:x,url:p,params:w,props:W,stuff:S,routeId:u.id})),A&&(oe&&(A.uses.url=!0),A.loaded)){if(A.loaded.error&&($=A.loaded.status,y=A.loaded.error),A.loaded.redirect)return{redirect:A.loaded.redirect,props:{},state:a};A.loaded.stuff&&(N=!0)}}else A=I}catch(x){$=500,y=De(x)}if(y){for(;k--;)if(v[k]){let x,I,ae=k;for(;!(I=R[ae]);)ae-=1;try{if(x=await H({status:$,error:y,module:await v[k](),url:p,params:w,stuff:I.stuff,routeId:u.id}),(U=x==null?void 0:x.loaded)!=null&&U.error)continue;(g=x==null?void 0:x.loaded)!=null&&g.stuff&&(S={...S,...x.loaded.stuff}),R=R.slice(0,ae+1).concat(x);break e}catch{continue}}return await Z({status:$,error:y,url:p,routeId:u.id})}else(O=A==null?void 0:A.loaded)!=null&&O.stuff&&(S={...S,...A.loaded.stuff}),R.push(A)}return await he({url:p,params:w,stuff:S,branch:R,status:$,error:y,routeId:u.id})}async function Z({status:o,error:p,url:w,routeId:u}){var _,m;const h={},b=await H({module:await Nt,url:w,params:h,stuff:{},routeId:u}),v=await H({status:o,error:p,module:await Ot,url:w,params:h,stuff:b&&b.loaded&&b.loaded.stuff||{},routeId:u});return await he({url:w,params:h,stuff:{...(_=b==null?void 0:b.loaded)==null?void 0:_.stuff,...(m=v==null?void 0:v.loaded)==null?void 0:m.stuff},branch:[b,v],status:o,error:p,routeId:u})}function Oe(o){if(o.origin!==location.origin||!o.pathname.startsWith(t))return;const p=decodeURI(o.pathname.slice(t.length)||"/");for(const w of we){const u=w.exec(p);if(u)return{id:o.pathname+o.search,route:w,params:u,url:o}}}async function _e({url:o,scroll:p,keepfocus:w,redirect_chain:u,details:h,accepted:b,blocked:v}){const _=a.url;let m=!1;const R={from:_,to:o,cancel:()=>m=!0};if(r.before_navigate.forEach($=>$(R)),m){v();return}const S=vt(o.pathname,i),N=new URL(o.origin+S+o.search+o.hash);be(j),b(),d&&f.navigating.set({from:a.url,to:N}),await pe(N,u,!1,{scroll:p,keepfocus:w,details:h},()=>{const $={from:_,to:N};r.after_navigate.forEach(y=>y($)),f.navigating.set(null)})}function Q(o){return location.href=o.href,new Promise(()=>{})}return{after_navigate:o=>{ye(()=>(r.after_navigate.push(o),()=>{const p=r.after_navigate.indexOf(o);r.after_navigate.splice(p,1)}))},before_navigate:o=>{ye(()=>(r.before_navigate.push(o),()=>{const p=r.before_navigate.indexOf(o);r.before_navigate.splice(p,1)}))},disable_scroll_handling:()=>{(E||!d)&&(L=!1)},goto:(o,p={})=>Se(o,p,[]),invalidate:o=>{if(typeof o=="function")c.push(o);else{const{href:p}=new URL(o,location.href);c.push(w=>w===p)}return M||(M=Promise.resolve().then(async()=>{await pe(new URL(location.href),[],!0),M=null})),M},prefetch:async o=>{const p=new URL(o,ze(document));await Ue(p)},prefetch_routes:async o=>{const w=(o?we.filter(u=>o.some(h=>u.exec(h))):we).map(u=>Promise.all(u.a.map(h=>h())));await Promise.all(w)},_start_router:()=>{history.scrollRestoration="manual",addEventListener("beforeunload",u=>{let h=!1;const b={from:a.url,to:null,cancel:()=>h=!0};r.before_navigate.forEach(v=>v(b)),h?(u.preventDefault(),u.returnValue=""):history.scrollRestoration="auto"}),addEventListener("visibilitychange",()=>{if(document.visibilityState==="hidden"){be(j);try{sessionStorage[We]=JSON.stringify(te)}catch{}}});const o=u=>{const h=qe(u);h&&h.href&&h.hasAttribute("sveltekit:prefetch")&&Ue(Je(h))};let p;const w=u=>{clearTimeout(p),p=setTimeout(()=>{var h;(h=u.target)==null||h.dispatchEvent(new CustomEvent("sveltekit:trigger_prefetch",{bubbles:!0}))},20)};addEventListener("touchstart",o),addEventListener("mousemove",w),addEventListener("sveltekit:trigger_prefetch",o),addEventListener("click",u=>{if(!F||u.button||u.which!==1||u.metaKey||u.ctrlKey||u.shiftKey||u.altKey||u.defaultPrevented)return;const h=qe(u);if(!h||!h.href)return;const b=h instanceof SVGAElement,v=Je(h);if(!b&&v.origin==="null")return;const _=(h.getAttribute("rel")||"").split(/\s+/);if(h.hasAttribute("download")||_.includes("external")||h.hasAttribute("sveltekit:reload")||(b?h.target.baseVal:h.target))return;const[m,R]=v.href.split("#");if(R!==void 0&&m===location.href.split("#")[0]){ue=!0,be(j),f.page.set({...de,url:v}),f.page.notify();return}_e({url:v,scroll:h.hasAttribute("sveltekit:noscroll")?ve():null,keepfocus:!1,redirect_chain:[],details:{state:{},replaceState:v.href===location.href},accepted:()=>u.preventDefault(),blocked:()=>u.preventDefault()})}),addEventListener("popstate",u=>{if(u.state&&F){if(u.state[B]===j)return;_e({url:new URL(location.href),scroll:te[u.state[B]],keepfocus:!1,redirect_chain:[],details:null,accepted:()=>{j=u.state[B]},blocked:()=>{const h=j-u.state[B];history.go(h)}})}}),addEventListener("hashchange",()=>{ue&&(ue=!1,history.replaceState({...history.state,[B]:++j},"",location.href))})},_hydrate:async({status:o,error:p,nodes:w,params:u,routeId:h})=>{const b=new URL(location.href),v=[];let _={},m,R;try{for(let S=0;S<w.length;S+=1){const N=S===w.length-1;let $;if(N){const U=document.querySelector('script[sveltekit\\:data-type="props"]');U&&($=JSON.parse(U.textContent))}const y=await H({module:await le[w[S]](),url:b,params:u,stuff:_,status:N?o:void 0,error:N?p:void 0,props:$,routeId:h});if($&&(y.uses.dependencies.add(b.href),y.uses.url=!0),v.push(y),y&&y.loaded)if(y.loaded.error){if(p)throw y.loaded.error;R={status:y.loaded.status,error:y.loaded.error,url:b,routeId:h}}else y.loaded.stuff&&(_={..._,...y.loaded.stuff})}m=R?await Z(R):await he({url:b,params:u,stuff:_,branch:v,status:o,error:p,routeId:h})}catch(S){if(p)throw S;m=await Z({status:500,error:De(S),url:b,routeId:h})}m.redirect&&await Q(new URL(m.redirect,location.href)),Ae(m)}}}async function Tt({paths:s,target:e,session:t,route:i,spa:l,trailing_slash:c,hydrate:f}){const n=xt({target:e,session:t,base:s.base,trailing_slash:c});yt({client:n}),it(s),f&&await n._hydrate(f),i&&(l&&n.goto(location.href,{replaceState:!0}),n._start_router()),dispatchEvent(new CustomEvent("sveltekit:start"))}export{Tt as start};
+import{S as Ye,i as Ge,s as Me,e as Fe,c as Xe,a as He,d as D,b as me,f as K,g as V,t as Ze,h as Qe,j as et,k as tt,l as P,m as nt,n as Y,o as C,p as G,q as T,r as st,u as rt,v as ye,w as z,x as ne,y as q,z as se,A as re,B as J,C as ie,D as Ce}from"./chunks/index-bcf2726a.js";import{s as it,w as ce,a as at}from"./chunks/paths-d3bcbd10.js";function ot(s){let e,t,i;const l=[s[1]||{}];var c=s[0][0];function f(n){let r={};for(let a=0;a<l.length;a+=1)r=ie(r,l[a]);return{props:r}}return c&&(e=new c(f())),{c(){e&&z(e.$$.fragment),t=P()},l(n){e&&ne(e.$$.fragment,n),t=P()},m(n,r){e&&q(e,n,r),V(n,t,r),i=!0},p(n,r){const a=r&2?se(l,[re(n[1]||{})]):{};if(c!==(c=n[0][0])){if(e){Y();const d=e;C(d.$$.fragment,1,0,()=>{J(d,1)}),G()}c?(e=new c(f()),z(e.$$.fragment),T(e.$$.fragment,1),q(e,t.parentNode,t)):e=null}else c&&e.$set(a)},i(n){i||(e&&T(e.$$.fragment,n),i=!0)},o(n){e&&C(e.$$.fragment,n),i=!1},d(n){n&&D(t),e&&J(e,n)}}}function ct(s){let e,t,i;const l=[s[1]||{}];var c=s[0][0];function f(n){let r={$$slots:{default:[dt]},$$scope:{ctx:n}};for(let a=0;a<l.length;a+=1)r=ie(r,l[a]);return{props:r}}return c&&(e=new c(f(s))),{c(){e&&z(e.$$.fragment),t=P()},l(n){e&&ne(e.$$.fragment,n),t=P()},m(n,r){e&&q(e,n,r),V(n,t,r),i=!0},p(n,r){const a=r&2?se(l,[re(n[1]||{})]):{};if(r&525&&(a.$$scope={dirty:r,ctx:n}),c!==(c=n[0][0])){if(e){Y();const d=e;C(d.$$.fragment,1,0,()=>{J(d,1)}),G()}c?(e=new c(f(n)),z(e.$$.fragment),T(e.$$.fragment,1),q(e,t.parentNode,t)):e=null}else c&&e.$set(a)},i(n){i||(e&&T(e.$$.fragment,n),i=!0)},o(n){e&&C(e.$$.fragment,n),i=!1},d(n){n&&D(t),e&&J(e,n)}}}function lt(s){let e,t,i;const l=[s[2]||{}];var c=s[0][1];function f(n){let r={};for(let a=0;a<l.length;a+=1)r=ie(r,l[a]);return{props:r}}return c&&(e=new c(f())),{c(){e&&z(e.$$.fragment),t=P()},l(n){e&&ne(e.$$.fragment,n),t=P()},m(n,r){e&&q(e,n,r),V(n,t,r),i=!0},p(n,r){const a=r&4?se(l,[re(n[2]||{})]):{};if(c!==(c=n[0][1])){if(e){Y();const d=e;C(d.$$.fragment,1,0,()=>{J(d,1)}),G()}c?(e=new c(f()),z(e.$$.fragment),T(e.$$.fragment,1),q(e,t.parentNode,t)):e=null}else c&&e.$set(a)},i(n){i||(e&&T(e.$$.fragment,n),i=!0)},o(n){e&&C(e.$$.fragment,n),i=!1},d(n){n&&D(t),e&&J(e,n)}}}function ft(s){let e,t,i;const l=[s[2]||{}];var c=s[0][1];function f(n){let r={$$slots:{default:[ut]},$$scope:{ctx:n}};for(let a=0;a<l.length;a+=1)r=ie(r,l[a]);return{props:r}}return c&&(e=new c(f(s))),{c(){e&&z(e.$$.fragment),t=P()},l(n){e&&ne(e.$$.fragment,n),t=P()},m(n,r){e&&q(e,n,r),V(n,t,r),i=!0},p(n,r){const a=r&4?se(l,[re(n[2]||{})]):{};if(r&521&&(a.$$scope={dirty:r,ctx:n}),c!==(c=n[0][1])){if(e){Y();const d=e;C(d.$$.fragment,1,0,()=>{J(d,1)}),G()}c?(e=new c(f(n)),z(e.$$.fragment),T(e.$$.fragment,1),q(e,t.parentNode,t)):e=null}else c&&e.$set(a)},i(n){i||(e&&T(e.$$.fragment,n),i=!0)},o(n){e&&C(e.$$.fragment,n),i=!1},d(n){n&&D(t),e&&J(e,n)}}}function ut(s){let e,t,i;const l=[s[3]||{}];var c=s[0][2];function f(n){let r={};for(let a=0;a<l.length;a+=1)r=ie(r,l[a]);return{props:r}}return c&&(e=new c(f())),{c(){e&&z(e.$$.fragment),t=P()},l(n){e&&ne(e.$$.fragment,n),t=P()},m(n,r){e&&q(e,n,r),V(n,t,r),i=!0},p(n,r){const a=r&8?se(l,[re(n[3]||{})]):{};if(c!==(c=n[0][2])){if(e){Y();const d=e;C(d.$$.fragment,1,0,()=>{J(d,1)}),G()}c?(e=new c(f()),z(e.$$.fragment),T(e.$$.fragment,1),q(e,t.parentNode,t)):e=null}else c&&e.$set(a)},i(n){i||(e&&T(e.$$.fragment,n),i=!0)},o(n){e&&C(e.$$.fragment,n),i=!1},d(n){n&&D(t),e&&J(e,n)}}}function dt(s){let e,t,i,l;const c=[ft,lt],f=[];function n(r,a){return r[0][2]?0:1}return e=n(s),t=f[e]=c[e](s),{c(){t.c(),i=P()},l(r){t.l(r),i=P()},m(r,a){f[e].m(r,a),V(r,i,a),l=!0},p(r,a){let d=e;e=n(r),e===d?f[e].p(r,a):(Y(),C(f[d],1,1,()=>{f[d]=null}),G(),t=f[e],t?t.p(r,a):(t=f[e]=c[e](r),t.c()),T(t,1),t.m(i.parentNode,i))},i(r){l||(T(t),l=!0)},o(r){C(t),l=!1},d(r){f[e].d(r),r&&D(i)}}}function Te(s){let e,t=s[5]&&je(s);return{c(){e=Fe("div"),t&&t.c(),this.h()},l(i){e=Xe(i,"DIV",{id:!0,"aria-live":!0,"aria-atomic":!0,style:!0});var l=He(e);t&&t.l(l),l.forEach(D),this.h()},h(){me(e,"id","svelte-announcer"),me(e,"aria-live","assertive"),me(e,"aria-atomic","true"),K(e,"position","absolute"),K(e,"left","0"),K(e,"top","0"),K(e,"clip","rect(0 0 0 0)"),K(e,"clip-path","inset(50%)"),K(e,"overflow","hidden"),K(e,"white-space","nowrap"),K(e,"width","1px"),K(e,"height","1px")},m(i,l){V(i,e,l),t&&t.m(e,null)},p(i,l){i[5]?t?t.p(i,l):(t=je(i),t.c(),t.m(e,null)):t&&(t.d(1),t=null)},d(i){i&&D(e),t&&t.d()}}}function je(s){let e;return{c(){e=Ze(s[6])},l(t){e=Qe(t,s[6])},m(t,i){V(t,e,i)},p(t,i){i&64&&et(e,t[6])},d(t){t&&D(e)}}}function pt(s){let e,t,i,l,c;const f=[ct,ot],n=[];function r(d,L){return d[0][1]?0:1}e=r(s),t=n[e]=f[e](s);let a=s[4]&&Te(s);return{c(){t.c(),i=tt(),a&&a.c(),l=P()},l(d){t.l(d),i=nt(d),a&&a.l(d),l=P()},m(d,L){n[e].m(d,L),V(d,i,L),a&&a.m(d,L),V(d,l,L),c=!0},p(d,[L]){let E=e;e=r(d),e===E?n[e].p(d,L):(Y(),C(n[E],1,1,()=>{n[E]=null}),G(),t=n[e],t?t.p(d,L):(t=n[e]=f[e](d),t.c()),T(t,1),t.m(i.parentNode,i)),d[4]?a?a.p(d,L):(a=Te(d),a.c(),a.m(l.parentNode,l)):a&&(a.d(1),a=null)},i(d){c||(T(t),c=!0)},o(d){C(t),c=!1},d(d){n[e].d(d),d&&D(i),a&&a.d(d),d&&D(l)}}}function ht(s,e,t){let{stores:i}=e,{page:l}=e,{components:c}=e,{props_0:f=null}=e,{props_1:n=null}=e,{props_2:r=null}=e;st("__svelte__",i),rt(i.page.notify);let a=!1,d=!1,L=null;return ye(()=>{const E=i.page.subscribe(()=>{a&&(t(5,d=!0),t(6,L=document.title||"untitled page"))});return t(4,a=!0),E}),s.$$set=E=>{"stores"in E&&t(7,i=E.stores),"page"in E&&t(8,l=E.page),"components"in E&&t(0,c=E.components),"props_0"in E&&t(1,f=E.props_0),"props_1"in E&&t(2,n=E.props_1),"props_2"in E&&t(3,r=E.props_2)},s.$$.update=()=>{s.$$.dirty&384&&i.page.set(l)},[c,f,n,r,a,d,L,i,l]}class _t extends Ye{constructor(e){super(),Ge(this,e,ht,pt,Me,{stores:7,page:8,components:0,props_0:1,props_1:2,props_2:3})}}const mt="modulepreload",Ie={},gt="/static/_app/immutable/",ge=function(e,t){return!t||t.length===0?e():Promise.all(t.map(i=>{if(i=`${gt}${i}`,i in Ie)return;Ie[i]=!0;const l=i.endsWith(".css"),c=l?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${i}"]${c}`))return;const f=document.createElement("link");if(f.rel=l?"stylesheet":mt,l||(f.as="script",f.crossOrigin=""),f.href=i,document.head.appendChild(f),l)return new Promise((n,r)=>{f.addEventListener("load",n),f.addEventListener("error",()=>r(new Error(`Unable to preload CSS for ${i}`)))})})).then(()=>e())},wt={},le=[()=>ge(()=>import("./pages/__layout.svelte-f5a1b718.js"),["pages/__layout.svelte-f5a1b718.js","assets/pages/__layout.svelte-b67cf61d.css","chunks/index-bcf2726a.js"]),()=>ge(()=>import("./error.svelte-d9523301.js"),["error.svelte-d9523301.js","chunks/index-bcf2726a.js"]),()=>ge(()=>import("./pages/index.svelte-1f940fb6.js"),["pages/index.svelte-1f940fb6.js","assets/pages/index.svelte-f2b33456.css","chunks/index-bcf2726a.js","chunks/paths-d3bcbd10.js"])],bt={"":[[0,2],[1]]};function yt(s){s.client}function De(s){return s instanceof Error||s&&s.name&&s.message?s:new Error(JSON.stringify(s))}function Ve(s){if(s.fallthrough)throw new Error("fallthrough is no longer supported. Use matchers instead: https://kit.svelte.dev/docs/routing#advanced-routing-matching");if("maxage"in s)throw new Error("maxage should be replaced with cache: { maxage }");const e=s.status&&s.status>=400&&s.status<=599&&!s.redirect;if(s.error||e){const t=s.status;if(!s.error&&e)return{status:t||500,error:new Error};const i=typeof s.error=="string"?new Error(s.error):s.error;return i instanceof Error?!t||t<400||t>599?(console.warn('"error" returned from load() without a valid status code \u2014 defaulting to 500'),{status:500,error:i}):{status:t,error:i}:{status:500,error:new Error(`"error" property returned from load() must be a string or instance of Error, received type "${typeof i}"`)}}if(s.redirect){if(!s.status||Math.floor(s.status/100)!==3)throw new Error('"redirect" property returned from load() must be accompanied by a 3xx status code');if(typeof s.redirect!="string")throw new Error('"redirect" property returned from load() must be a string')}if(s.dependencies&&(!Array.isArray(s.dependencies)||s.dependencies.some(t=>typeof t!="string")))throw new Error('"dependencies" property returned from load() must be of type string[]');if(s.context)throw new Error('You are returning "context" from a load function. "context" was renamed to "stuff", please adjust your code accordingly.');return s}function vt(s,e){return s==="/"||e==="ignore"?s:e==="never"?s.endsWith("/")?s.slice(0,-1):s:e==="always"&&!s.endsWith("/")?s+"/":s}class $t extends URL{get hash(){throw new Error("url.hash is inaccessible from load. Consider accessing hash from the page store within the script tag of your component.")}}function ze(s){let e=s.baseURI;if(!e){const t=s.getElementsByTagName("base");e=t.length?t[0].href:s.URL}return e}function ve(){return{x:pageXOffset,y:pageYOffset}}function qe(s){return s.composedPath().find(t=>t instanceof Node&&t.nodeName.toUpperCase()==="A")}function Je(s){return s instanceof SVGAElement?new URL(s.href.baseVal,document.baseURI):new URL(s.href)}function Ke(s){const e=ce(s);let t=!0;function i(){t=!0,e.update(f=>f)}function l(f){t=!1,e.set(f)}function c(f){let n;return e.subscribe(r=>{(n===void 0||t&&r!==n)&&f(n=r)})}return{notify:i,set:l,subscribe:c}}function kt(){const{set:s,subscribe:e}=ce(!1),t="1685809076710";let i;async function l(){clearTimeout(i);const f=await fetch(`${at}/_app/version.json`,{headers:{pragma:"no-cache","cache-control":"no-cache"}});if(f.ok){const{version:n}=await f.json(),r=n!==t;return r&&(s(!0),clearTimeout(i)),r}else throw new Error(`Version check failed: ${f.status}`)}return{subscribe:e,check:l}}function Et(s){let e=5381,t=s.length;if(typeof s=="string")for(;t;)e=e*33^s.charCodeAt(--t);else for(;t;)e=e*33^s[--t];return(e>>>0).toString(36)}const $e=window.fetch;function Rt(s,e){let i=`script[sveltekit\\:data-type="data"][sveltekit\\:data-url=${JSON.stringify(typeof s=="string"?s:s.url)}]`;e&&typeof e.body=="string"&&(i+=`[sveltekit\\:data-body="${Et(e.body)}"]`);const l=document.querySelector(i);if(l&&l.textContent){const{body:c,...f}=JSON.parse(l.textContent);return Promise.resolve(new Response(c,f))}return $e(s,e)}const Lt=/^(\.\.\.)?(\w+)(?:=(\w+))?$/;function St(s){const e=[],t=[];let i=!0;return{pattern:s===""?/^\/$/:new RegExp(`^${decodeURIComponent(s).split(/(?:@[a-zA-Z0-9_-]+)?(?:\/|$)/).map((c,f,n)=>{const r=/^\[\.\.\.(\w+)(?:=(\w+))?\]$/.exec(c);if(r)return e.push(r[1]),t.push(r[2]),"(?:/(.*))?";const a=f===n.length-1;return c&&"/"+c.split(/\[(.+?)\]/).map((d,L)=>{if(L%2){const[,E,X,M]=Lt.exec(d);return e.push(X),t.push(M),E?"(.*?)":"([^/]+?)"}return a&&d.includes(".")&&(i=!1),d.normalize().replace(/%5[Bb]/g,"[").replace(/%5[Dd]/g,"]").replace(/#/g,"%23").replace(/\?/g,"%3F").replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}).join("")}).join("")}${i?"/?":""}$`),names:e,types:t}}function Ut(s,e,t,i){const l={};for(let c=0;c<e.length;c+=1){const f=e[c],n=t[c],r=s[c+1]||"";if(n){const a=i[n];if(!a)throw new Error(`Missing "${n}" param matcher`);if(!a(r))return}l[f]=r}return l}function At(s,e,t){return Object.entries(e).map(([l,[c,f,n]])=>{const{pattern:r,names:a,types:d}=St(l);return{id:l,exec:L=>{const E=r.exec(L);if(E)return Ut(E,a,d,t)},a:c.map(L=>s[L]),b:f.map(L=>s[L]),has_shadow:!!n}})}const We="sveltekit:scroll",B="sveltekit:index",we=At(le,bt,wt),Nt=le[0](),Ot=le[1](),Be={};let te={};try{te=JSON.parse(sessionStorage[We])}catch{}function be(s){te[s]=ve()}function xt({target:s,session:e,base:t,trailing_slash:i}){var xe;const l=new Map,c=[],f={url:Ke({}),page:Ke({}),navigating:ce(null),session:ce(e),updated:kt()},n={id:null,promise:null},r={before_navigate:[],after_navigate:[]};let a={branch:[],error:null,session_id:0,stuff:Be,url:null},d=!1,L=!0,E=!1,X=1,M=null,ke,Ee,Re=!1;f.session.subscribe(async o=>{Ee=o,Re&&(X+=1,pe(new URL(location.href),[],!0))}),Re=!0;let F=!0,j=(xe=history.state)==null?void 0:xe[B];j||(j=Date.now(),history.replaceState({...history.state,[B]:j},"",location.href));const fe=te[j];fe&&(history.scrollRestoration="manual",scrollTo(fe.x,fe.y));let ue=!1,de,Le;async function Se(o,{noscroll:p=!1,replaceState:w=!1,keepfocus:u=!1,state:h={}},b){if(typeof o=="string"&&(o=new URL(o,ze(document))),F)return _e({url:o,scroll:p?ve():null,keepfocus:u,redirect_chain:b,details:{state:h,replaceState:w},accepted:()=>{},blocked:()=>{}});await Q(o)}async function Ue(o){const p=Oe(o);if(!p)throw new Error("Attempted to prefetch a URL that does not belong to this app");return n.promise=Ne(p,!1),n.id=p.id,n.promise}async function pe(o,p,w,u,h){var R,S,N;const b=Oe(o),v=Le={};let _=b&&await Ne(b,w);if(!_&&o.origin===location.origin&&o.pathname===location.pathname&&(_=await Z({status:404,error:new Error(`Not found: ${o.pathname}`),url:o,routeId:null})),!_)return await Q(o),!1;if(Le!==v)return!1;if(c.length=0,_.redirect)if(p.length>10||p.includes(o.pathname))_=await Z({status:500,error:new Error("Redirect loop"),url:o,routeId:null});else return F?Se(new URL(_.redirect,o).href,{},[...p,o.pathname]):await Q(new URL(_.redirect,location.href)),!1;else((S=(R=_.props)==null?void 0:R.page)==null?void 0:S.status)>=400&&await f.updated.check()&&await Q(o);if(E=!0,u&&u.details){const{details:$}=u,y=$.replaceState?0:1;$.state[B]=j+=y,history[$.replaceState?"replaceState":"pushState"]($.state,"",o)}if(d?(a=_.state,_.props.page&&(_.props.page.url=o),ke.$set(_.props)):Ae(_),u){const{scroll:$,keepfocus:y}=u;if(!y){const U=document.body,g=U.getAttribute("tabindex");(N=getSelection())==null||N.removeAllRanges(),U.tabIndex=-1,U.focus({preventScroll:!0}),g!==null?U.setAttribute("tabindex",g):U.removeAttribute("tabindex")}if(await Ce(),L){const U=o.hash&&document.getElementById(o.hash.slice(1));$?scrollTo($.x,$.y):U?U.scrollIntoView():scrollTo(0,0)}}else await Ce();n.promise=null,n.id=null,L=!0,_.props.page&&(de=_.props.page);const m=_.state.branch[_.state.branch.length-1];F=(m==null?void 0:m.module.router)!==!1,h&&h(),E=!1}function Ae(o){a=o.state;const p=document.querySelector("style[data-sveltekit]");if(p&&p.remove(),de=o.props.page,ke=new _t({target:s,props:{...o.props,stores:f},hydrate:!0}),F){const w={from:null,to:new URL(location.href)};r.after_navigate.forEach(u=>u(w))}d=!0}async function he({url:o,params:p,stuff:w,branch:u,status:h,error:b,routeId:v}){var y,U;const _=u.filter(Boolean),m=_.find(g=>{var O;return(O=g.loaded)==null?void 0:O.redirect}),R={redirect:(y=m==null?void 0:m.loaded)==null?void 0:y.redirect,state:{url:o,params:p,branch:u,error:b,stuff:w,session_id:X},props:{components:_.map(g=>g.module.default)}};for(let g=0;g<_.length;g+=1){const O=_[g].loaded;R.props[`props_${g}`]=O?await O.props:null}if(!a.url||o.href!==a.url.href||a.error!==b||a.stuff!==w){R.props.page={error:b,params:p,routeId:v,status:h,stuff:w,url:o};const g=(O,k)=>{Object.defineProperty(R.props.page,O,{get:()=>{throw new Error(`$page.${O} has been replaced by $page.url.${k}`)}})};g("origin","origin"),g("path","pathname"),g("query","searchParams")}const N=_[_.length-1],$=(U=N==null?void 0:N.loaded)==null?void 0:U.cache;if($){const g=o.pathname+o.search;let O=!1;const k=()=>{l.get(g)===R&&l.delete(g),x(),clearTimeout(A)},A=setTimeout(k,$.maxage*1e3),x=f.session.subscribe(()=>{O&&k()});O=!0,l.set(g,R)}return R}async function H({status:o,error:p,module:w,url:u,params:h,stuff:b,props:v,routeId:_}){const m={module:w,uses:{params:new Set,url:!1,session:!1,stuff:!1,dependencies:new Set},loaded:null,stuff:b};function R(y){const{href:U}=new URL(y,u);m.uses.dependencies.add(U)}v&&m.uses.dependencies.add(u.href);const S={};for(const y in h)Object.defineProperty(S,y,{get(){return m.uses.params.add(y),h[y]},enumerable:!0});const N=Ee,$=new $t(u);if(w.load){const y={routeId:_,params:S,props:v||{},get url(){return m.uses.url=!0,$},get session(){return m.uses.session=!0,N},get stuff(){return m.uses.stuff=!0,{...b}},async fetch(g,O){let k;typeof g=="string"?k=g:(k=g.url,O={body:g.method==="GET"||g.method==="HEAD"?void 0:await g.blob(),cache:g.cache,credentials:g.credentials,headers:g.headers,integrity:g.integrity,keepalive:g.keepalive,method:g.method,mode:g.mode,redirect:g.redirect,referrer:g.referrer,referrerPolicy:g.referrerPolicy,signal:g.signal,...O});const A=new URL(k,u).href;return R(A),d?$e(A,O):Rt(k,O)},status:o!=null?o:null,error:p!=null?p:null};let U;if(U=await w.load.call(null,y),!U)throw new Error("load function must return a value");m.loaded=Ve(U),m.loaded.stuff&&(m.stuff=m.loaded.stuff),m.loaded.dependencies&&m.loaded.dependencies.forEach(R)}else v&&(m.loaded=Ve({props:v}));return m}async function Ne({id:o,url:p,params:w,route:u},h){var U,g,O;if(n.id===o&&n.promise)return n.promise;if(!h){const k=l.get(o);if(k)return k}const{a:b,b:v,has_shadow:_}=u,m=a.url&&{url:o!==a.url.pathname+a.url.search,params:Object.keys(w).filter(k=>a.params[k]!==w[k]),session:X!==a.session_id};let R=[],S=Be,N=!1,$=200,y=null;b.forEach(k=>k().catch(()=>{}));e:for(let k=0;k<b.length;k+=1){let A;try{if(!b[k])continue;const x=await b[k](),I=a.branch[k];if(!I||x!==I.module||m.url&&I.uses.url||m.params.some(W=>I.uses.params.has(W))||m.session&&I.uses.session||Array.from(I.uses.dependencies).some(W=>c.some(oe=>oe(W)))||N&&I.uses.stuff){let W={};const oe=_&&k===b.length-1;if(oe){const ee=await $e(`${p.pathname}${p.pathname.endsWith("/")?"":"/"}__data.json${p.search}`,{headers:{"x-sveltekit-load":"true"}});if(ee.ok){const Pe=ee.headers.get("x-sveltekit-location");if(Pe)return{redirect:Pe,props:{},state:a};W=ee.status===204?{}:await ee.json()}else $=ee.status,y=new Error("Failed to load data")}if(y||(A=await H({module:x,url:p,params:w,props:W,stuff:S,routeId:u.id})),A&&(oe&&(A.uses.url=!0),A.loaded)){if(A.loaded.error&&($=A.loaded.status,y=A.loaded.error),A.loaded.redirect)return{redirect:A.loaded.redirect,props:{},state:a};A.loaded.stuff&&(N=!0)}}else A=I}catch(x){$=500,y=De(x)}if(y){for(;k--;)if(v[k]){let x,I,ae=k;for(;!(I=R[ae]);)ae-=1;try{if(x=await H({status:$,error:y,module:await v[k](),url:p,params:w,stuff:I.stuff,routeId:u.id}),(U=x==null?void 0:x.loaded)!=null&&U.error)continue;(g=x==null?void 0:x.loaded)!=null&&g.stuff&&(S={...S,...x.loaded.stuff}),R=R.slice(0,ae+1).concat(x);break e}catch{continue}}return await Z({status:$,error:y,url:p,routeId:u.id})}else(O=A==null?void 0:A.loaded)!=null&&O.stuff&&(S={...S,...A.loaded.stuff}),R.push(A)}return await he({url:p,params:w,stuff:S,branch:R,status:$,error:y,routeId:u.id})}async function Z({status:o,error:p,url:w,routeId:u}){var _,m;const h={},b=await H({module:await Nt,url:w,params:h,stuff:{},routeId:u}),v=await H({status:o,error:p,module:await Ot,url:w,params:h,stuff:b&&b.loaded&&b.loaded.stuff||{},routeId:u});return await he({url:w,params:h,stuff:{...(_=b==null?void 0:b.loaded)==null?void 0:_.stuff,...(m=v==null?void 0:v.loaded)==null?void 0:m.stuff},branch:[b,v],status:o,error:p,routeId:u})}function Oe(o){if(o.origin!==location.origin||!o.pathname.startsWith(t))return;const p=decodeURI(o.pathname.slice(t.length)||"/");for(const w of we){const u=w.exec(p);if(u)return{id:o.pathname+o.search,route:w,params:u,url:o}}}async function _e({url:o,scroll:p,keepfocus:w,redirect_chain:u,details:h,accepted:b,blocked:v}){const _=a.url;let m=!1;const R={from:_,to:o,cancel:()=>m=!0};if(r.before_navigate.forEach($=>$(R)),m){v();return}const S=vt(o.pathname,i),N=new URL(o.origin+S+o.search+o.hash);be(j),b(),d&&f.navigating.set({from:a.url,to:N}),await pe(N,u,!1,{scroll:p,keepfocus:w,details:h},()=>{const $={from:_,to:N};r.after_navigate.forEach(y=>y($)),f.navigating.set(null)})}function Q(o){return location.href=o.href,new Promise(()=>{})}return{after_navigate:o=>{ye(()=>(r.after_navigate.push(o),()=>{const p=r.after_navigate.indexOf(o);r.after_navigate.splice(p,1)}))},before_navigate:o=>{ye(()=>(r.before_navigate.push(o),()=>{const p=r.before_navigate.indexOf(o);r.before_navigate.splice(p,1)}))},disable_scroll_handling:()=>{(E||!d)&&(L=!1)},goto:(o,p={})=>Se(o,p,[]),invalidate:o=>{if(typeof o=="function")c.push(o);else{const{href:p}=new URL(o,location.href);c.push(w=>w===p)}return M||(M=Promise.resolve().then(async()=>{await pe(new URL(location.href),[],!0),M=null})),M},prefetch:async o=>{const p=new URL(o,ze(document));await Ue(p)},prefetch_routes:async o=>{const w=(o?we.filter(u=>o.some(h=>u.exec(h))):we).map(u=>Promise.all(u.a.map(h=>h())));await Promise.all(w)},_start_router:()=>{history.scrollRestoration="manual",addEventListener("beforeunload",u=>{let h=!1;const b={from:a.url,to:null,cancel:()=>h=!0};r.before_navigate.forEach(v=>v(b)),h?(u.preventDefault(),u.returnValue=""):history.scrollRestoration="auto"}),addEventListener("visibilitychange",()=>{if(document.visibilityState==="hidden"){be(j);try{sessionStorage[We]=JSON.stringify(te)}catch{}}});const o=u=>{const h=qe(u);h&&h.href&&h.hasAttribute("sveltekit:prefetch")&&Ue(Je(h))};let p;const w=u=>{clearTimeout(p),p=setTimeout(()=>{var h;(h=u.target)==null||h.dispatchEvent(new CustomEvent("sveltekit:trigger_prefetch",{bubbles:!0}))},20)};addEventListener("touchstart",o),addEventListener("mousemove",w),addEventListener("sveltekit:trigger_prefetch",o),addEventListener("click",u=>{if(!F||u.button||u.which!==1||u.metaKey||u.ctrlKey||u.shiftKey||u.altKey||u.defaultPrevented)return;const h=qe(u);if(!h||!h.href)return;const b=h instanceof SVGAElement,v=Je(h);if(!b&&v.origin==="null")return;const _=(h.getAttribute("rel")||"").split(/\s+/);if(h.hasAttribute("download")||_.includes("external")||h.hasAttribute("sveltekit:reload")||(b?h.target.baseVal:h.target))return;const[m,R]=v.href.split("#");if(R!==void 0&&m===location.href.split("#")[0]){ue=!0,be(j),f.page.set({...de,url:v}),f.page.notify();return}_e({url:v,scroll:h.hasAttribute("sveltekit:noscroll")?ve():null,keepfocus:!1,redirect_chain:[],details:{state:{},replaceState:v.href===location.href},accepted:()=>u.preventDefault(),blocked:()=>u.preventDefault()})}),addEventListener("popstate",u=>{if(u.state&&F){if(u.state[B]===j)return;_e({url:new URL(location.href),scroll:te[u.state[B]],keepfocus:!1,redirect_chain:[],details:null,accepted:()=>{j=u.state[B]},blocked:()=>{const h=j-u.state[B];history.go(h)}})}}),addEventListener("hashchange",()=>{ue&&(ue=!1,history.replaceState({...history.state,[B]:++j},"",location.href))})},_hydrate:async({status:o,error:p,nodes:w,params:u,routeId:h})=>{const b=new URL(location.href),v=[];let _={},m,R;try{for(let S=0;S<w.length;S+=1){const N=S===w.length-1;let $;if(N){const U=document.querySelector('script[sveltekit\\:data-type="props"]');U&&($=JSON.parse(U.textContent))}const y=await H({module:await le[w[S]](),url:b,params:u,stuff:_,status:N?o:void 0,error:N?p:void 0,props:$,routeId:h});if($&&(y.uses.dependencies.add(b.href),y.uses.url=!0),v.push(y),y&&y.loaded)if(y.loaded.error){if(p)throw y.loaded.error;R={status:y.loaded.status,error:y.loaded.error,url:b,routeId:h}}else y.loaded.stuff&&(_={..._,...y.loaded.stuff})}m=R?await Z(R):await he({url:b,params:u,stuff:_,branch:v,status:o,error:p,routeId:h})}catch(S){if(p)throw S;m=await Z({status:500,error:De(S),url:b,routeId:h})}m.redirect&&await Q(new URL(m.redirect,location.href)),Ae(m)}}}async function Tt({paths:s,target:e,session:t,route:i,spa:l,trailing_slash:c,hydrate:f}){const n=xt({target:e,session:t,base:s.base,trailing_slash:c});yt({client:n}),it(s),f&&await n._hydrate(f),i&&(l&&n.goto(location.href,{replaceState:!0}),n._start_router()),dispatchEvent(new CustomEvent("sveltekit:start"))}export{Tt as start};
diff --git a/frontend/build/_app/version.json b/frontend/build/_app/version.json
index 6ec5fd3b769ac3f336b002eba23e9391d7a0497d..9628b89623cf35cfd9037564c255ffc0d64cfd70 100644
--- a/frontend/build/_app/version.json
+++ b/frontend/build/_app/version.json
@@ -1 +1 @@
-{"version":"1685758204608"}
\ No newline at end of file
+{"version":"1685809076710"}
\ No newline at end of file
diff --git a/frontend/build/index.html b/frontend/build/index.html
index c902601fe971f267adf651ab5464cdb6d770f962..9b731799bc677509f03b9466bae29e1d0016eefa 100644
--- a/frontend/build/index.html
+++ b/frontend/build/index.html
@@ -8,17 +8,20 @@
 		<meta http-equiv="content-security-policy" content="">
 	<link rel="stylesheet" href="/static/_app/immutable/assets/pages/__layout.svelte-b67cf61d.css">
 	<link rel="stylesheet" href="/static/_app/immutable/assets/pages/index.svelte-f2b33456.css">
-	<link rel="modulepreload" href="/static/_app/immutable/start-b4d3a4a1.js">
+	<link rel="modulepreload" href="/static/_app/immutable/start-1d6beeeb.js">
 	<link rel="modulepreload" href="/static/_app/immutable/chunks/index-bcf2726a.js">
 	<link rel="modulepreload" href="/static/_app/immutable/chunks/paths-d3bcbd10.js">
 	<link rel="modulepreload" href="/static/_app/immutable/pages/__layout.svelte-f5a1b718.js">
-	<link rel="modulepreload" href="/static/_app/immutable/pages/index.svelte-e78f0615.js">
+	<link rel="modulepreload" href="/static/_app/immutable/pages/index.svelte-1f940fb6.js">
 	</head>
 	<body class="">
 		
 
 
-<div class="max-w-screen-md mx-auto px-3 py-5 relative z-0"><article class="prose"><h1>Drawing to Map</h1></article>
+<div class="max-w-screen-md mx-auto px-3 py-5 relative z-0"><article class="prose"><h1>Drawing to Map</h1>
+		<p>This space is for the ControlNet model <a href="https://github.com/RubenGres/Drawing2Map" target="_blank"><span>Drawing2Map</span></a></p></article>
+
+
 	<form><h4 class="font-bold mt-6 mb-2 leading-6 my-3">Brush Type</h4>
 	<div class="colors svelte-1oy4poo" name="colors"><div class="snap-always snap-start"><input name="color"  type="radio" id="color-0" value="0" class="svelte-1oy4poo">
 				<label for="color-0" class="svelte-1oy4poo"><svg width="20" height="20" viewBox="0 0 20 20" class="svelte-1oy4poo"><rect x="0" y="0" width="20" height="20" fill="rgb(219,14,154)"></rect></svg>
@@ -117,7 +120,7 @@
 	<select name="presets"  class="svelte-7to72y"><option disabled selected value="preset">preset</option><option value="High resolution satellite image, 4K, ultra detailed">Realistic</option>`<option value="Colorful lego bricks">Lego brick</option>`<option value="Black and white paper pencil drawing">Pencil</option>`<option value="Oil on canvas painting">Painting</option>`</select>
 
 	<h4 class="font-bold mt-6 mb-2 my-6 leading-6">Random Seed</h4>
-	<input type="Number" name="seed" placeholder="Integer Seed"  class="svelte-7to72y" value="276955136">
+	<input type="Number" name="seed" placeholder="Integer Seed"  class="svelte-7to72y" value="398460928">
 	<button  class="svelte-7to72y">Random
 	</button>
 	<h4 class="font-bold mt-6 mb-2 my-6 leading-6">Sample Steps</h4>
@@ -127,10 +130,10 @@
 </div>
 
 
-		<script type="module" data-sveltekit-hydrate="xt24ky">
-		import { start } from "/static/_app/immutable/start-b4d3a4a1.js";
+		<script type="module" data-sveltekit-hydrate="1meyvr0">
+		import { start } from "/static/_app/immutable/start-1d6beeeb.js";
 		start({
-			target: document.querySelector('[data-sveltekit-hydrate="xt24ky"]').parentNode,
+			target: document.querySelector('[data-sveltekit-hydrate="1meyvr0"]').parentNode,
 			paths: {"base":"/static","assets":"/static"},
 			session: {},
 			route: true,
diff --git a/frontend/src/lib/ParamsSelector.svelte b/frontend/src/lib/ParamsSelector.svelte
index 4117ef5d4c4604c1f5c6b5aed246f2fa06eeb7f1..2d12bc19471eb4a9349b473816ce01f808f12719 100755
--- a/frontend/src/lib/ParamsSelector.svelte
+++ b/frontend/src/lib/ParamsSelector.svelte
@@ -3,7 +3,6 @@
 	import { selectedParams, generateMap } from '$lib/store';
 	import type { FormElements } from '../types';
 	import { randomSeed } from '$lib/utils';
-
 	function submit() {
 		const elements: FormElements = form.elements as FormElements;
 		$selectedParams = {
@@ -14,12 +13,6 @@
 		};
 	}
 
-	function updateModifier(event) {
-		const selectedIndex = event.currentTarget.selectedIndex - 1;
-		modifier = PRESETS[selectedIndex][0];
-		submit();
-	}
-
 	let form: HTMLFormElement;
 	let seed: bigint = $selectedParams.seed;
 	let sampleSteps: number = $selectedParams.steps;
@@ -48,7 +41,12 @@
 	<select
 		name="presets"
 		disabled={$generateMap === true}
-		on:change={updateModifier}
+		on:change={(event) => {
+			//modifier = event.currentTarget.value;
+			const selectedIndex = event.currentTarget.selectedIndex - 1;
+			modifier = PRESETS[selectedIndex][0];
+			$selectedParams.modifier = PRESETS[selectedIndex][0];
+	  	}}>
 		<option disabled selected>preset</option>
 		{#each PRESETS as preset}
 			<option value={preset[0]}>{preset[1]}</option>`
@@ -78,7 +76,7 @@
 			bind:value={sampleSteps}
 			type="range"
 			name="steps"
-			min="5"
+			min="10"
 			max="30"
 			step="1"
 			disabled={$generateMap === true}
diff --git a/frontend/src/lib/store.ts b/frontend/src/lib/store.ts
index 233e358140f1e4616e1e1b589bf97d775598c49b..ce562f9f0fc15ae4dcd13d9a63e821283c221cb6 100755
--- a/frontend/src/lib/store.ts
+++ b/frontend/src/lib/store.ts
@@ -10,9 +10,9 @@ export const selectedImage = writable<HTMLImageElement>();
 export const selectedBrush = writable<Brush>();
 export const selectedParams = writable<Params>({
 	prompt: "Aerial view of rue des Lilas, Toulouse, Haute-Garonne, France",
-	modifier: "",
+	modifier: PRESETS[0][0],
 	seed: randomSeed(),
-	steps: 10
+	steps: 20
 });
 
 export const generateMap = writable<boolean>(false);
diff --git a/frontend/src/routes/index.svelte b/frontend/src/routes/index.svelte
index 5cc834675d9ec66ed904d34216d2aa1bf5292b64..6ce2edbb90c6c7fd4d61e14b32409f940a496ca2 100755
--- a/frontend/src/routes/index.svelte
+++ b/frontend/src/routes/index.svelte
@@ -12,12 +12,11 @@
 <div class="max-w-screen-md mx-auto px-3 py-5 relative z-0">
 	<article class="prose">
 		<h1>Drawing to Map</h1>
+		<p> This space is for the ControlNet model <a href="https://github.com/RubenGres/Drawing2Map" target="_blank"><span>Drawing2Map</span></a></p>
 	</article>
 
-	<p>This is the official huggingface space for <a href="https://github.com/RubenGres/Drawing2Map">Drawing2Map</a></p>
 
 	<BrushSelector />
-	
 	<div class="drawings py-3 -mx-3">
 		<DrawingCanvas />
 		<ResultCanvas />
diff --git a/launch_full_interface.ipynb b/launch_full_interface.ipynb
new file mode 100644
index 0000000000000000000000000000000000000000..83f16dd8d860ecd35a4360a0a891fbcb59e02e04
--- /dev/null
+++ b/launch_full_interface.ipynb
@@ -0,0 +1,107 @@
+{
+  "cells": [
+    {
+      "attachments": {},
+      "cell_type": "markdown",
+      "metadata": {
+        "colab_type": "text",
+        "id": "view-in-github"
+      },
+      "source": [
+        "<a href=\"https://colab.research.google.com/github/RubenGres/Drawing2Map-hfspace/blob/main/Launch_interface.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": null,
+      "metadata": {
+        "id": "hsn_87UXrUn5"
+      },
+      "outputs": [],
+      "source": [
+        "!git clone https://github.com/RubenGres/Drawing2Map-hfspace.git\n",
+        "%cd Drawing2Map-hfspace/ui"
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": null,
+      "metadata": {
+        "id": "uVUasUqwr_Br"
+      },
+      "outputs": [],
+      "source": [
+        "!pip install -r requirements.txt\n",
+        "!npm install -g localtunnel"
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": null,
+      "metadata": {
+        "id": "9OIMlcM9OQWk"
+      },
+      "outputs": [],
+      "source": [
+        "!export URL_GRADIO='http://localhost:7860'"
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": null,
+      "metadata": {
+        "id": "yhLLdro5s-rf"
+      },
+      "outputs": [],
+      "source": [
+        "!echo \" \"\n",
+        "!echo \"Click the next link and when prompted enter:\"\n",
+        "!curl ipv4.icanhazip.com\n",
+        "!echo \" \"\n",
+        "!lt --port 8000 & make run-prod"
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": null,
+      "metadata": {
+        "colab": {
+          "base_uri": "https://localhost:8080/"
+        },
+        "id": "G2USPEr_4YOm",
+        "outputId": "36de5b2b-0cf7-410b-a225-2869138e5523"
+      },
+      "outputs": [
+        {
+          "name": "stdout",
+          "output_type": "stream",
+          "text": [
+            "killall python\n",
+            "python: no process found\n",
+            "make: *** [Makefile:20: stop-server] Error 1\n"
+          ]
+        }
+      ],
+      "source": [
+        "!make stop-server"
+      ]
+    }
+  ],
+  "metadata": {
+    "accelerator": "GPU",
+    "colab": {
+      "include_colab_link": true,
+      "provenance": []
+    },
+    "gpuClass": "standard",
+    "kernelspec": {
+      "display_name": "Python 3",
+      "name": "python3"
+    },
+    "language_info": {
+      "name": "python"
+    }
+  },
+  "nbformat": 4,
+  "nbformat_minor": 0
+}
diff --git a/static/_app/immutable/manifest.json b/static/_app/immutable/manifest.json
index 8fbccb9f726fdd49993866ccd703fbe1fdcf1add..8cc5be7786f98f6a3ebb6610e16193ae827aba04 100644
--- a/static/_app/immutable/manifest.json
+++ b/static/_app/immutable/manifest.json
@@ -1,6 +1,6 @@
 {
   ".svelte-kit/runtime/client/start.js": {
-    "file": "start-b4d3a4a1.js",
+    "file": "start-1d6beeeb.js",
     "src": ".svelte-kit/runtime/client/start.js",
     "isEntry": true,
     "imports": [
@@ -35,7 +35,7 @@
     ]
   },
   "src/routes/index.svelte": {
-    "file": "pages/index.svelte-e78f0615.js",
+    "file": "pages/index.svelte-1f940fb6.js",
     "src": "src/routes/index.svelte",
     "isEntry": true,
     "isDynamicEntry": true,
diff --git a/static/_app/immutable/pages/index.svelte-1f940fb6.js b/static/_app/immutable/pages/index.svelte-1f940fb6.js
new file mode 100644
index 0000000000000000000000000000000000000000..ecb049b7a08dd918b98554c8f0187dfb452fe2e7
--- /dev/null
+++ b/static/_app/immutable/pages/index.svelte-1f940fb6.js
@@ -0,0 +1 @@
+import{S as se,i as ne,s as ie,e as C,k as A,c as T,a as z,m as D,d as I,b as s,K as Oe,g as Z,J as p,t as V,h as F,L as U,E as Q,M as Ne,N as Y,O as K,P as me,Q as ge,j as Le,f as $e,R as oe,T as Se,U as Ue,V as ct,W as Re,w as ue,x as pe,y as de,q as he,o as fe,B as ve,v as ut}from"../chunks/index-bcf2726a.js";import{w as ae,b as at}from"../chunks/paths-d3bcbd10.js";const Pe=[{color:[219,14,154],label:"building"},{color:[147,142,123],label:"pervious surface"},{color:[248,12,0],label:"impervious surface"},{color:[169,113,1],label:"bare soil"},{color:[21,83,174],label:"water"},{color:[25,74,38],label:"coniferous"},{color:[70,228,131],label:"deciduous"},{color:[243,166,13],label:"brushwood"},{color:[102,0,130],label:"vineyard"},{color:[85,255,0],label:"herbaceous vegetation"},{color:[255,243,13],label:"agricultural land"},{color:[228,223,124],label:"plowed land"},{color:[61,230,235],label:"swimming pool"},{color:[255,255,255],label:"snow"},{color:[138,179,160],label:"clear cut"},{color:[107,113,79],label:"mixed"}],Be=["/samples/default.jpg","/samples/example0.png","/samples/example1.png","/samples/example2.png","/samples/example3.png","/samples/example4.png","/samples/example5.png","/samples/example6.jpg"],ke=[["High resolution satellite image, 4K, ultra detailed","Realistic"],["Colorful lego bricks","Lego brick"],["Black and white paper pencil drawing","Pencil"],["Oil on canvas painting","Painting"]];function st(){return BigInt(0xb7dd73e137d20800&((1<<63)-1)*Math.random())}const _e=ae(new Map),je=ae(),Ae=ae(),De=ae(),xe=ae(),Ie=ae({prompt:"Aerial view of rue des Lilas, Toulouse, Haute-Garonne, France",modifier:ke[0][0],seed:st(),steps:20}),be=ae(!1),Me=ae(!1);function Ye(l,e,t){const r=l.slice();return r[3]=e[t],r[5]=t,r}function Je(l){let e,t,r,a,o,n,d,i,k,E,b,P;return{c(){e=C("div"),t=C("input"),n=A(),d=C("label"),i=C("img"),P=A(),this.h()},l(g){e=T(g,"DIV",{class:!0});var v=z(e);t=T(v,"INPUT",{type:!0,name:!0,id:!0,class:!0}),n=D(v),d=T(v,"LABEL",{for:!0,class:!0});var x=z(d);i=T(x,"IMG",{src:!0,alt:!0,class:!0}),x.forEach(I),P=D(v),v.forEach(I),this.h()},h(){s(t,"type","radio"),s(t,"name","samples"),s(t,"id",r="sample-"+l[5]),t.value=a=l[5],t.disabled=o=l[0]===!0,s(t,"class","svelte-1gwcbp"),Oe(i.src,k=at+l[3])||s(i,"src",k),s(i,"alt",E=l[3]),s(i,"class","svelte-1gwcbp"),s(d,"for",b="sample-"+l[5]),s(d,"class","svelte-1gwcbp"),s(e,"class","snap-always snap-start")},m(g,v){Z(g,e,v),p(e,t),p(e,n),p(e,d),p(d,i),p(e,P)},p(g,v){v&1&&o!==(o=g[0]===!0)&&(t.disabled=o)},d(g){g&&I(e)}}}function pt(l){let e,t,r,a,o,n,d,i,k=Be,E=[];for(let b=0;b<k.length;b+=1)E[b]=Je(Ye(l,k,b));return{c(){e=C("div"),t=C("h4"),r=V("Select a Template"),a=A(),o=C("form"),n=C("div");for(let b=0;b<E.length;b+=1)E[b].c();this.h()},l(b){e=T(b,"DIV",{});var P=z(e);t=T(P,"H4",{class:!0});var g=z(t);r=F(g,"Select a Template"),g.forEach(I),a=D(P),o=T(P,"FORM",{class:!0});var v=z(o);n=T(v,"DIV",{class:!0});var x=z(n);for(let u=0;u<E.length;u+=1)E[u].l(x);x.forEach(I),v.forEach(I),P.forEach(I),this.h()},h(){s(t,"class","font-bold mt-6 mb-2 my-6 leading-6"),s(n,"class","samples  svelte-1gwcbp"),s(o,"class","svelte-1gwcbp")},m(b,P){Z(b,e,P),p(e,t),p(t,r),p(e,a),p(e,o),p(o,n);for(let g=0;g<E.length;g+=1)E[g].m(n,null);d||(i=U(o,"input",l[1]),d=!0)},p(b,[P]){if(P&1){k=Be;let g;for(g=0;g<k.length;g+=1){const v=Ye(b,k,g);E[g]?E[g].p(v,P):(E[g]=Je(v),E[g].c(),E[g].m(n,null))}for(;g<E.length;g+=1)E[g].d(1);E.length=k.length}},i:Q,o:Q,d(b){b&&I(e),Ne(E,b),d=!1,i()}}}async function dt(l){return new Promise((e,t)=>{const r=new Image;r.onload=()=>{URL.revokeObjectURL(r.src),e(r)},r.onerror=a=>{t(a)},r.src=URL.createObjectURL(l)})}function ht(l,e,t){let r,a;return Y(l,De,n=>t(2,r=n)),Y(l,be,n=>t(0,a=n)),[a,async n=>{n.preventDefault();const d=Be[parseInt(n.target.value)];if(d){const i=await fetch(at+d).then(E=>E.blob()),k=await dt(i);K(De,r=k,r)}}]}class ft extends se{constructor(e){super(),ne(this,e,ht,pt,ie,{})}}function Xe(l,e,t){const r=l.slice();return r[2]=e[t],r[7]=t,r}function Ke(l){let e,t,r,a,o,n,d,i,k,E,b,P,g=l[2].label+"",v,x,u;return{c(){e=C("div"),t=C("input"),n=A(),d=C("label"),i=me("svg"),k=me("rect"),b=A(),P=C("span"),v=V(g),u=A(),this.h()},l(f){e=T(f,"DIV",{class:!0});var h=z(e);t=T(h,"INPUT",{name:!0,type:!0,id:!0,class:!0}),n=D(h),d=T(h,"LABEL",{for:!0,class:!0});var c=z(d);i=ge(c,"svg",{width:!0,height:!0,viewBox:!0,class:!0});var m=z(i);k=ge(m,"rect",{x:!0,y:!0,width:!0,height:!0,fill:!0}),z(k).forEach(I),m.forEach(I),b=D(c),P=T(c,"SPAN",{class:!0});var w=z(P);v=F(w,g),w.forEach(I),c.forEach(I),u=D(h),h.forEach(I),this.h()},h(){s(t,"name","color"),t.checked=r=l[7]==nt,s(t,"type","radio"),s(t,"id",a="color-"+l[7]),t.value=o=l[7],s(t,"class","svelte-1oy4poo"),s(k,"x","0"),s(k,"y","0"),s(k,"width","20"),s(k,"height","20"),s(k,"fill",E="rgb("+l[2].color.join(",")+")"),s(i,"width","20"),s(i,"height","20"),s(i,"viewBox","0 0 20 20"),s(i,"class","svelte-1oy4poo"),s(P,"class","svelte-1oy4poo"),s(d,"for",x="color-"+l[7]),s(d,"class","svelte-1oy4poo"),s(e,"class","snap-always snap-start")},m(f,h){Z(f,e,h),p(e,t),p(e,n),p(e,d),p(d,i),p(i,k),p(d,b),p(d,P),p(P,v),p(e,u)},p:Q,d(f){f&&I(e)}}}function vt(l){let e,t,r,a,o,n,d,i,k,E,b,P,g,v=l[0].size+"",x,u,f,h=Pe,c=[];for(let m=0;m<h.length;m+=1)c[m]=Ke(Xe(l,h,m));return{c(){e=C("form"),t=C("h4"),r=V("Brush Type"),a=A(),o=C("div");for(let m=0;m<c.length;m+=1)c[m].c();n=A(),d=C("h4"),i=V("Brush Size"),k=A(),E=C("div"),b=C("input"),P=A(),g=C("label"),x=V(v),this.h()},l(m){e=T(m,"FORM",{});var w=z(e);t=T(w,"H4",{class:!0});var y=z(t);r=F(y,"Brush Type"),y.forEach(I),a=D(w),o=T(w,"DIV",{class:!0,name:!0});var M=z(o);for(let B=0;B<c.length;B+=1)c[B].l(M);M.forEach(I),n=D(w),d=T(w,"H4",{class:!0});var _=z(d);i=F(_,"Brush Size"),_.forEach(I),k=D(w),E=T(w,"DIV",{class:!0});var S=z(E);b=T(S,"INPUT",{min:!0,max:!0,step:!0,name:!0,type:!0}),P=D(S),g=T(S,"LABEL",{class:!0,for:!0});var N=z(g);x=F(N,v),N.forEach(I),S.forEach(I),w.forEach(I),this.h()},h(){s(t,"class","font-bold mt-6 mb-2 leading-6 my-3"),s(o,"class","colors svelte-1oy4poo"),s(o,"name","colors"),s(d,"class","font-bold mt-6 mb-2 my-6 leading-6"),b.value="10",s(b,"min","1"),s(b,"max","150"),s(b,"step","1"),s(b,"name","brush"),s(b,"type","range"),s(g,"class","pl-2 svelte-1oy4poo"),s(g,"for","brush"),s(E,"class","brush svelte-1oy4poo")},m(m,w){Z(m,e,w),p(e,t),p(t,r),p(e,a),p(e,o);for(let y=0;y<c.length;y+=1)c[y].m(o,null);p(e,n),p(e,d),p(d,i),p(e,k),p(e,E),p(E,b),p(E,P),p(E,g),p(g,x),u||(f=U(e,"input",l[1]),u=!0)},p(m,[w]){if(w&0){h=Pe;let y;for(y=0;y<h.length;y+=1){const M=Xe(m,h,y);c[y]?c[y].p(M,w):(c[y]=Ke(M),c[y].c(),c[y].m(o,null))}for(;y<c.length;y+=1)c[y].d(1);c.length=h.length}w&1&&v!==(v=m[0].size+"")&&Le(x,v)},i:Q,o:Q,d(m){m&&I(e),Ne(c,m),u=!1,f()}}}const nt=6;function mt(l,e,t){let r;Y(l,xe,k=>t(0,r=k));const{color:a,label:o}=Pe[nt];let n=`rgb(${a.join(",")})`,d=40;return K(xe,r={color:n,size:d,label:o},r),[r,async k=>{const E=k.target;if(E.name==="color"){const b=parseInt(E.value),{color:P,label:g}=Pe[b];n=`rgb(${P.join(",")})`,K(xe,r={color:n,size:d,label:g},r)}else E.name==="brush"&&(d=parseInt(E.value),K(xe,r={color:n,size:d,label:o},r))},a]}class gt extends se{constructor(e){super(),ne(this,e,mt,vt,ie,{})}}function Ze(l,e,t){const r=l.slice();return r[15]=e[t],r}function Qe(l){let e,t=l[15][1]+"",r,a,o;return{c(){e=C("option"),r=V(t),o=V("`"),this.h()},l(n){e=T(n,"OPTION",{});var d=z(e);r=F(d,t),d.forEach(I),o=F(n,"`"),this.h()},h(){e.__value=a=l[15][0],e.value=e.__value},m(n,d){Z(n,e,d),p(e,r),Z(n,o,d)},p:Q,d(n){n&&I(e),n&&I(o)}}}function bt(l){let e,t,r,a,o,n,d,i,k,E,b,P,g,v,x,u,f,h,c,m,w,y,M,_,S,N,B,q,$,J,te,X,O,L,re,ee,le,ce,ye,W=ke,G=[];for(let j=0;j<W.length;j+=1)G[j]=Qe(Ze(l,W,j));return{c(){e=C("form"),t=C("h4"),r=V("Prompt"),a=A(),o=C("input"),d=A(),i=C("h4"),k=V("Modifier"),E=A(),b=C("input"),g=A(),v=C("select"),x=C("option"),u=V("preset");for(let j=0;j<G.length;j+=1)G[j].c();h=A(),c=C("h4"),m=V("Random Seed"),w=A(),y=C("input"),_=A(),S=C("button"),N=V("Random"),q=A(),$=C("h4"),J=V("Sample Steps"),te=A(),X=C("div"),O=C("input"),re=A(),ee=C("label"),le=V(l[2]),this.h()},l(j){e=T(j,"FORM",{});var R=z(e);t=T(R,"H4",{class:!0});var H=z(t);r=F(H,"Prompt"),H.forEach(I),a=D(R),o=T(R,"INPUT",{name:!0,placeholder:!0,style:!0,class:!0}),d=D(R),i=T(R,"H4",{class:!0});var we=z(i);k=F(we,"Modifier"),we.forEach(I),E=D(R),b=T(R,"INPUT",{name:!0,placeholder:!0,style:!0,class:!0}),g=D(R),v=T(R,"SELECT",{name:!0,class:!0});var Ce=z(v);x=T(Ce,"OPTION",{});var Ve=z(x);u=F(Ve,"preset"),Ve.forEach(I);for(let Te=0;Te<G.length;Te+=1)G[Te].l(Ce);Ce.forEach(I),h=D(R),c=T(R,"H4",{class:!0});var Fe=z(c);m=F(Fe,"Random Seed"),Fe.forEach(I),w=D(R),y=T(R,"INPUT",{type:!0,name:!0,placeholder:!0,class:!0}),_=D(R),S=T(R,"BUTTON",{class:!0});var Ge=z(S);N=F(Ge,"Random"),Ge.forEach(I),q=D(R),$=T(R,"H4",{class:!0});var He=z($);J=F(He,"Sample Steps"),He.forEach(I),te=D(R),X=T(R,"DIV",{class:!0});var Ee=z(X);O=T(Ee,"INPUT",{type:!0,name:!0,min:!0,max:!0,step:!0,class:!0}),re=D(Ee),ee=T(Ee,"LABEL",{class:!0,for:!0});var qe=z(ee);le=F(qe,l[2]),qe.forEach(I),Ee.forEach(I),R.forEach(I),this.h()},h(){s(t,"class","font-bold mt-6 mb-2 my-6 leading-6"),s(o,"name","prompt"),s(o,"placeholder","Aerial view of ..., France."),o.disabled=n=l[6]===!0,$e(o,"width","500px"),s(o,"class","svelte-7to72y"),s(i,"class","font-bold mt-6 mb-2 my-6 leading-6"),s(b,"name","modifier"),s(b,"placeholder","High resolution satellite image"),b.disabled=P=l[6]===!0,$e(b,"width","500px"),s(b,"class","svelte-7to72y"),x.disabled=!0,x.selected=!0,x.__value="preset",x.value=x.__value,s(v,"name","presets"),v.disabled=f=l[6]===!0,s(v,"class","svelte-7to72y"),s(c,"class","font-bold mt-6 mb-2 my-6 leading-6"),s(y,"type","Number"),s(y,"name","seed"),s(y,"placeholder","Integer Seed"),y.disabled=M=l[6]===!0,s(y,"class","svelte-7to72y"),S.disabled=B=l[6]===!0,s(S,"class","svelte-7to72y"),s($,"class","font-bold mt-6 mb-2 my-6 leading-6"),s(O,"type","range"),s(O,"name","steps"),s(O,"min","10"),s(O,"max","30"),s(O,"step","1"),O.disabled=L=l[6]===!0,s(O,"class","svelte-7to72y"),s(ee,"class","pl-2 svelte-7to72y"),s(ee,"for","steps"),s(X,"class","flex")},m(j,R){Z(j,e,R),p(e,t),p(t,r),p(e,a),p(e,o),oe(o,l[3]),p(e,d),p(e,i),p(i,k),p(e,E),p(e,b),oe(b,l[4]),p(e,g),p(e,v),p(v,x),p(x,u);for(let H=0;H<G.length;H+=1)G[H].m(v,null);p(e,h),p(e,c),p(c,m),p(e,w),p(e,y),oe(y,l[1]),p(e,_),p(e,S),p(S,N),p(e,q),p(e,$),p($,J),p(e,te),p(e,X),p(X,O),oe(O,l[2]),p(X,re),p(X,ee),p(ee,le),l[14](e),ce||(ye=[U(o,"input",l[8]),U(b,"input",l[9]),U(v,"change",l[10]),U(y,"input",l[11]),U(S,"click",Se(l[12])),U(O,"change",l[13]),U(O,"input",l[13]),U(e,"input",l[7])],ce=!0)},p(j,[R]){if(R&64&&n!==(n=j[6]===!0)&&(o.disabled=n),R&8&&o.value!==j[3]&&oe(o,j[3]),R&64&&P!==(P=j[6]===!0)&&(b.disabled=P),R&16&&b.value!==j[4]&&oe(b,j[4]),R&0){W=ke;let H;for(H=0;H<W.length;H+=1){const we=Ze(j,W,H);G[H]?G[H].p(we,R):(G[H]=Qe(we),G[H].c(),G[H].m(v,null))}for(;H<G.length;H+=1)G[H].d(1);G.length=W.length}R&64&&f!==(f=j[6]===!0)&&(v.disabled=f),R&64&&M!==(M=j[6]===!0)&&(y.disabled=M),R&2&&oe(y,j[1]),R&64&&B!==(B=j[6]===!0)&&(S.disabled=B),R&64&&L!==(L=j[6]===!0)&&(O.disabled=L),R&4&&oe(O,j[2]),R&4&&Le(le,j[2])},i:Q,o:Q,d(j){j&&I(e),Ne(G,j),l[14](null),ce=!1,Ue(ye)}}}function yt(l,e,t){let r,a;Y(l,Ie,h=>t(5,r=h)),Y(l,be,h=>t(6,a=h));function o(){const h=n.elements;K(Ie,r={prompt:h.prompt.value,modifier:h.modifier.value,seed:BigInt(h.seed.value),steps:parseInt(h.steps.value)},r)}let n,d=r.seed,i=r.steps,k=r.prompt,E=r.modifier;function b(){k=this.value,t(3,k)}function P(){E=this.value,t(4,E)}const g=h=>{const c=h.currentTarget.selectedIndex-1;t(4,E=ke[c][0]),K(Ie,r.modifier=ke[c][0],r)};function v(){d=this.value,t(1,d)}const x=()=>{t(1,d=st()),o()};function u(){i=ct(this.value),t(2,i)}function f(h){Re[h?"unshift":"push"](()=>{n=h,t(0,n)})}return[n,d,i,k,E,r,a,o,b,P,g,v,x,u,f]}class wt extends se{constructor(e){super(),ne(this,e,yt,bt,ie,{})}}let _t=(l=21)=>crypto.getRandomValues(new Uint8Array(l)).reduce((e,t)=>(t&=63,t<36?e+=t.toString(36):t<62?e+=(t-26).toString(36).toUpperCase():t>62?e+="-":e+="_",e),"");var xt=typeof globalThis!="undefined"?globalThis:typeof window!="undefined"?window:typeof global!="undefined"?global:typeof self!="undefined"?self:{};function kt(l){return l&&l.__esModule&&Object.prototype.hasOwnProperty.call(l,"default")?l.default:l}var it={exports:{}};(function(l,e){(function(t,r){l.exports=r()})(typeof self!="undefined"?self:xt,function(){return function(t){var r={};function a(o){if(r[o])return r[o].exports;var n=r[o]={i:o,l:!1,exports:{}};return t[o].call(n.exports,n,n.exports,a),n.l=!0,n.exports}return a.m=t,a.c=r,a.d=function(o,n,d){a.o(o,n)||Object.defineProperty(o,n,{enumerable:!0,get:d})},a.r=function(o){typeof Symbol!="undefined"&&Symbol.toStringTag&&Object.defineProperty(o,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(o,"__esModule",{value:!0})},a.t=function(o,n){if(1&n&&(o=a(o)),8&n||4&n&&typeof o=="object"&&o&&o.__esModule)return o;var d=Object.create(null);if(a.r(d),Object.defineProperty(d,"default",{enumerable:!0,value:o}),2&n&&typeof o!="string")for(var i in o)a.d(d,i,function(k){return o[k]}.bind(null,i));return d},a.n=function(o){var n=o&&o.__esModule?function(){return o.default}:function(){return o};return a.d(n,"a",n),n},a.o=function(o,n){return Object.prototype.hasOwnProperty.call(o,n)},a.p="",a(a.s=0)}([function(t,r,a){function o(g,v){return function(x){if(Array.isArray(x))return x}(g)||function(x,u){if(Symbol.iterator in Object(x)||Object.prototype.toString.call(x)==="[object Arguments]"){var f=[],h=!0,c=!1,m=void 0;try{for(var w,y=x[Symbol.iterator]();!(h=(w=y.next()).done)&&(f.push(w.value),!u||f.length!==u);h=!0);}catch(M){c=!0,m=M}finally{try{h||y.return==null||y.return()}finally{if(c)throw m}}return f}}(g,v)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function n(g){return function(v){if(Array.isArray(v)){for(var x=0,u=new Array(v.length);x<v.length;x++)u[x]=v[x];return u}}(g)||function(v){if(Symbol.iterator in Object(v)||Object.prototype.toString.call(v)==="[object Arguments]")return Array.from(v)}(g)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance")}()}function d(g,v){for(var x=0;x<v.length;x++){var u=v[x];u.enumerable=u.enumerable||!1,u.configurable=!0,"value"in u&&(u.writable=!0),Object.defineProperty(g,u.key,u)}}a.r(r);var i=/^#?[0-9A-Fa-f]{1,2}[0-9A-Fa-f]{1,2}[0-9A-Fa-f]{1,2}$/,k=/^rgb\((\s+)?[0-9]{1,3},(\s+)?[0-9]{1,3},(\s+)?[0-9]{1,3}(\s+)?\)$/,E=function(){function g(){(function(u,f){if(!(u instanceof f))throw new TypeError("Cannot call a class as a function")})(this,g),this.canvases={}}var v,x;return v=g,(x=[{key:"parseColor",value:function(u){var f=i.test(u),h=k.test(u);if(!f&&!h)throw new Error("Color is not correct format. #123123 or rgb(123, 123, 123) format required.");if(f){var c=u[0]==="#"?u.slice(1):u;return c=c.length===3?c.split("").reduce(function(_,S){return[].concat(n(_),[S,S])},[]).join(""):c,{r:parseInt(c.slice(0,2),16),g:parseInt(c.slice(2,4),16),b:parseInt(c.slice(4,6),16)}}if(h){var m=o(u.replace(/rgb|\s+|\(|\)/g,"").split(",").map(function(_){return parseInt(_)}),3),w=m[0],y=m[1],M=m[2];return{r:w=w>255?255:w,g:y=y>255?255:y,b:M=M>255?255:M}}}},{key:"make",value:function(u){var f=u.size,h=u.color;try{f*=window.devicePixelRatio;var c=this.parseColor(h),m=JSON.stringify(c);if(this.canvases[m]=this.canvases[m]||{},this.canvases[m][f]!=null)return this.canvases[m][f];var w=document.createElement("canvas");f+=f%2,w.width=f,w.height=f;for(var y=w.getContext("2d"),M=y.createImageData(f,f),_=0;_<M.data.length;_+=4)M.data[_]=255,M.data[_+1]=255,M.data[_+2]=255,M.data[_+3]=0;return this.plotCircle(2*f,4*f*(f/2),f/2,M,f,c),this.fillCircle(M,c),y.putImageData(M,0,0),this.canvases[m][f]=w,w}catch(S){console.error(S)}}},{key:"plotCircle",value:function(u,f,h,c,m,w){var y=-h,M=0,_=2-2*h;do{var S=u-4*(y+1)+(f+4*m*(M-1));c.data[S+0]=w.r,c.data[S+1]=w.g,c.data[S+2]=w.b,c.data[S+3]=255;var N=u-M*(4*m)+(f-4*(y+1));c.data[N+0]=w.r,c.data[N+1]=w.g,c.data[N+2]=w.b,c.data[N+3]=255;var B=u+4*y+(f-M*(4*m));c.data[B+0]=w.r,c.data[B+1]=w.g,c.data[B+2]=w.b,c.data[B+3]=255;var q=u+4*m*(M-1)+(f+4*y);c.data[q+0]=w.r,c.data[q+1]=w.g,c.data[q+2]=w.b,c.data[q+3]=255,(h=_)<=M&&(_+=2*++M+1),(h>y||_>M)&&(_+=2*++y+1)}while(y<0)}},{key:"fillCircle",value:function(u,f){for(var h=4*u.width,c=1;c<u.height-1;c+=1)for(var m=!1,w=!1,y=!1,M=0;M<h;M+=4){var _=h*c+M,S=u.data[_+3],N=S===255;N&&!m?m=!0:S===0&&m?w=!0:N&&m&&w&&(y=!0),m&&w&&!y&&(u.data[_]=f.r,u.data[_+1]=f.g,u.data[_+2]=f.b,u.data[_+3]=255)}}}])&&d(v.prototype,x),g}();function b(g,v){for(var x=0;x<v.length;x++){var u=v[x];u.enumerable=u.enumerable||!1,u.configurable=!0,"value"in u&&(u.writable=!0),Object.defineProperty(g,u.key,u)}}var P=function(){function g(u){(function(f,h){if(!(f instanceof h))throw new TypeError("Cannot call a class as a function")})(this,g),this.canvas=u,this.context=u.getContext("2d"),this.stampMaker=new E,this.configPixelRatio()}var v,x;return v=g,(x=[{key:"configPixelRatio",value:function(){var u=this.canvas,f=u.width,h=u.height;this.canvas.width=f*this.dpr,this.canvas.height=h*this.dpr,this.canvas.style.width="".concat(f,"px"),this.canvas.style.height="".concat(h,"px"),this.context.scale(this.dpr,this.dpr),this.context.imageSmoothingEnabled=!1}},{key:"exportAsPNG",value:function(u){var f=this;return new Promise(function(h){var c=document.createElement("canvas"),m=c.getContext("2d"),w=f.canvas,y=w.width,M=w.height,_=y/f.dpr,S=M/f.dpr;c.width=_,c.height=S,m.imageSmoothingEnabled=!1,m.drawImage(f.canvas,0,0,y,M,0,0,_,S),c.toBlob(function(N){N.lastModifedDate=new Date,N.name=u,h(N)})})}},{key:"distanceBetween",value:function(u,f){return Math.sqrt(Math.pow(f.x-u.x,2)+Math.pow(f.y-u.y,2))}},{key:"angleBetween",value:function(u,f){return Math.atan2(f.x-u.x,f.y-u.y)}},{key:"draw",value:function(u){var f=u.from,h=u.to,c=u.size,m=u.color;this.context.globalCompositeOperation="source-over",this.brush({from:f,to:h,size:c,color:m})}},{key:"erase",value:function(u){var f=u.from,h=u.to,c=u.size;this.context.globalCompositeOperation="destination-out",this.brush({from:f,to:h,size:c,color:"#000000"})}},{key:"brush",value:function(u){var f=this,h=u.from,c=u.to,m=u.size,w=u.color,y=(m-m%2)/2,M=this.stampMaker.make({size:m,color:w});if(h.x!==c.x||h.y!==c.y)for(var _=this.distanceBetween(h,c),S=this.angleBetween(h,c),N=function(J){var te=h.x+Math.sin(S)*J-y,X=h.y+Math.cos(S)*J-y;window.requestAnimationFrame(function(){f.context.drawImage(M,Math.round(te),Math.round(X),m,m)})},B=0;B<_;B+=1)N(B);else{var q=h.x-y,$=h.y-y;this.context.drawImage(M,Math.round(q),Math.round($),m,m)}}},{key:"dpr",get:function(){return window.devicePixelRatio||1}}])&&b(v.prototype,x),g}();r.default=P}])})})(it);var We=kt(it.exports);function Et(l){let e,t;return{c(){e=me("svg"),t=me("path"),this.h()},l(r){e=ge(r,"svg",{xmlns:!0,width:!0,viewBox:!0,class:!0});var a=z(e);t=ge(a,"path",{fill:!0,stroke:!0,"stroke-width":!0,d:!0}),z(t).forEach(I),a.forEach(I),this.h()},h(){s(t,"fill","white"),s(t,"stroke","black"),s(t,"stroke-width","30"),s(t,"d","M480 256c0 123.4-100.5 223.9-223.9 223.9c-48.84 0-95.17-15.58-134.2-44.86c-14.12-10.59-16.97-30.66-6.375-44.81c10.59-14.12 30.62-16.94 44.81-6.375c27.84 20.91 61 31.94 95.88 31.94C344.3 415.8 416 344.1 416 256s-71.69-159.8-159.8-159.8c-37.46 0-73.09 13.49-101.3 36.64l45.12 45.14c17.01 17.02 4.955 46.1-19.1 46.1H35.17C24.58 224.1 16 215.5 16 204.9V59.04c0-24.04 29.07-36.08 46.07-19.07l47.6 47.63C149.9 52.71 201.5 32.11 256.1 32.11C379.5 32.11 480 132.6 480 256z"),s(e,"xmlns","http://www.w3.org/2000/svg"),s(e,"width","20"),s(e,"viewBox","0 0 512 512"),s(e,"class",l[0])},m(r,a){Z(r,e,a),p(e,t)},p(r,[a]){a&1&&s(e,"class",r[0])},i:Q,o:Q,d(r){r&&I(e)}}}function It(l,e,t){let{classNames:r=""}=e;return l.$$set=a=>{"classNames"in a&&t(0,r=a.classNames)},[r]}class St extends se{constructor(e){super(),ne(this,e,It,Et,ie,{classNames:0})}}function Pt(l){var f;let e,t,r,a,o,n,d,i=((f=l[0])==null?void 0:f.label)+"",k,E,b,P,g,v,x,u;return P=new St({}),{c(){e=C("div"),t=C("div"),r=C("canvas"),a=A(),o=C("canvas"),n=A(),d=C("span"),k=V(i),E=A(),b=C("button"),ue(P.$$.fragment),this.h()},l(h){e=T(h,"DIV",{});var c=z(e);t=T(c,"DIV",{class:!0});var m=z(t);r=T(m,"CANVAS",{class:!0,width:!0,height:!0}),z(r).forEach(I),a=D(m),o=T(m,"CANVAS",{class:!0,width:!0,height:!0}),z(o).forEach(I),n=D(m),d=T(m,"SPAN",{class:!0});var w=z(d);k=F(w,i),w.forEach(I),E=D(m),b=T(m,"BUTTON",{class:!0});var y=z(b);pe(P.$$.fragment,y),y.forEach(I),m.forEach(I),c.forEach(I),this.h()},h(){s(r,"class","canvas svelte-vhujxn"),s(r,"width","512"),s(r,"height","512"),s(o,"class","brush svelte-vhujxn"),s(o,"width","10"),s(o,"height","10"),s(d,"class","label svelte-vhujxn"),s(b,"class","absolute bottom-0 left-0 p-3"),b.disabled=g=l[3].size<=0,s(t,"class","relative overflow-clip")},m(h,c){Z(h,e,c),p(e,t),p(t,r),l[11](r),p(t,a),p(t,o),l[12](o),p(t,n),p(t,d),p(d,k),p(t,E),p(t,b),de(P,b,null),v=!0,x||(u=[U(r,"touchmove",Ct),U(r,"pointerenter",Mt),U(r,"pointerup",l[4]),U(r,"pointerleave",l[4]),U(r,"pointercancel",l[4]),U(r,"pointerout",l[4]),U(r,"pointermove",l[6]),U(r,"pointerdown",l[5]),U(b,"click",Se(l[13]))],x=!0)},p(h,[c]){var m;(!v||c&1)&&i!==(i=((m=h[0])==null?void 0:m.label)+"")&&Le(k,i),(!v||c&8&&g!==(g=h[3].size<=0))&&(b.disabled=g)},i(h){v||(he(P.$$.fragment,h),v=!0)},o(h){fe(P.$$.fragment,h),v=!1},d(h){h&&I(e),l[11](null),l[12](null),ve(P),x=!1,Ue(u)}}}function Mt(){}function et(l,e){const t=l.getBoundingClientRect();return{x:(e.clientX-t.left)*(l.width/t.width),y:(e.clientY-t.top)*(l.height/t.height)}}function tt(l){l.fillStyle="#46e483",l.fillRect(0,0,l.canvas.width,l.canvas.height)}function ze(l,e){l.drawImage(e,0,0,l.canvas.width,l.canvas.height)}const Ct=l=>l.preventDefault();function Tt(l,e,t){let r,a,o,n;Y(l,_e,_=>t(3,r=_)),Y(l,De,_=>t(10,a=_)),Y(l,xe,_=>t(0,o=_)),Y(l,Ae,_=>t(18,n=_));let d,i,k,E,b={x:0,y:0},P;ut(()=>{t(9,E=d.getContext("2d")),t(8,k=i.getContext("2d")),window.devicePixelRatio=1,P=new We(d),t(1,d.style.height="unset",d),t(1,d.style.width="unset",d),K(Ae,n=d,n),tt(E)});let g=!1,v;function x(){t(2,i.style.top=`${10+o.size/2}px`,i),t(2,i.style.left=`${10+o.size/2}px`,i),g=!1}function u(_){g=!0,b=et(d,_),P.draw({from:b,to:b,size:o.size,color:o.color}),v=_t(),_e.update(S=>(S.set(v,{brush:o,points:[{from:b,to:b}]}),S))}function f(_){const S=et(d,_);t(2,i.style.top=`${_.offsetY}px`,i),t(2,i.style.left=`${_.offsetX}px`,i),g&&(P.draw({from:b,to:S,size:o.size,color:o.color}),_e.update(N=>{const B=N.get(v);return B==null||B.points.push({from:b,to:S}),N}),b=S)}function h(_){const{size:S,color:N}=_;t(2,i.width=S,i),t(2,i.height=S,i),t(8,k.fillStyle=N,k),k.arc(S/2,S/2,S/2,0,2*Math.PI),k.fill()}function c(){if(r.size<=0)return;const _=Array.from(r.keys());_e.update(S=>(S.delete(_[_.length-1]),S)),m(E)}function m(_){const S=document.createElement("canvas");S.width=512,S.height=512,window.devicePixelRatio=1;const N=new We(S);tt(_),a&&ze(_,a),Array.from(r.values()).forEach(B=>{B.points.forEach((q,$)=>{N.draw({from:q.from,to:q.to,size:B.brush.size,color:B.brush.color})})}),requestAnimationFrame(()=>{ze(_,S)})}function w(_){Re[_?"unshift":"push"](()=>{d=_,t(1,d)})}function y(_){Re[_?"unshift":"push"](()=>{i=_,t(2,i),t(8,k),t(0,o)})}const M=()=>c();return l.$$.update=()=>{l.$$.dirty&257&&k&&o&&(h(o),t(2,i.style.top=`${10+o.size/2}px`,i),t(2,i.style.left=`${10+o.size/2}px`,i)),l.$$.dirty&1536&&a&&(ze(E,a),K(_e,r=new Map,r))},[o,d,i,r,x,u,f,c,k,E,a,w,y,M]}class zt extends se{constructor(e){super(),ne(this,e,Tt,Pt,ie,{})}}function rt(l){let e,t,r;return{c(){e=C("img"),this.h()},l(a){e=T(a,"IMG",{class:!0,alt:!0,src:!0,width:!0,height:!0}),this.h()},h(){s(e,"class",t="image "+(l[1]?"opacity-30":"")+" svelte-1t0h0rs"),s(e,"alt","Generative Map Result"),Oe(e.src,r=l[0])||s(e,"src",r),s(e,"width","512"),s(e,"height","512")},m(a,o){Z(a,e,o)},p(a,o){o&2&&t!==(t="image "+(a[1]?"opacity-30":"")+" svelte-1t0h0rs")&&s(e,"class",t),o&1&&!Oe(e.src,r=a[0])&&s(e,"src",r)},d(a){a&&I(e)}}}function lt(l){let e,t,r,a,o,n;return{c(){e=C("div"),t=me("svg"),r=me("path"),a=A(),o=C("span"),n=V(ot),this.h()},l(d){e=T(d,"DIV",{class:!0});var i=z(e);t=ge(i,"svg",{xmlns:!0,fill:!0,viewBox:!0,class:!0});var k=z(t);r=ge(k,"path",{fill:!0,d:!0}),z(r).forEach(I),k.forEach(I),a=D(i),o=T(i,"SPAN",{class:!0});var E=z(o);n=F(E,ot),E.forEach(I),i.forEach(I),this.h()},h(){s(r,"fill","currentColor"),s(r,"d","M20 12a8 8 0 0 1-8 8v4a12 12 0 0 0 12-12h-4Zm-2-5.3a8 8 0 0 1 2 5.3h4c0-3-1.1-5.8-3-8l-3 2.7Z"),s(t,"xmlns","http://www.w3.org/2000/svg"),s(t,"fill","none"),s(t,"viewBox","0 0 24 24"),s(t,"class","animate-spin max-w-[3rem]"),s(o,"class","text-xs"),s(e,"class","loading svelte-1t0h0rs")},m(d,i){Z(d,e,i),p(e,t),p(t,r),p(e,a),p(e,o),p(o,n)},p:Q,d(d){d&&I(e)}}}function Ot(l){let e,t,r=l[0]&&rt(l),a=l[1]&&lt();return{c(){e=C("div"),r&&r.c(),t=A(),a&&a.c(),this.h()},l(o){e=T(o,"DIV",{class:!0});var n=z(e);r&&r.l(n),t=D(n),a&&a.l(n),n.forEach(I),this.h()},h(){s(e,"class","relative overflow-clip flex flex-col justify-center items-center w-full h-full")},m(o,n){Z(o,e,n),r&&r.m(e,null),p(e,t),a&&a.m(e,null)},p(o,[n]){o[0]?r?r.p(o,n):(r=rt(o),r.c(),r.m(e,t)):r&&(r.d(1),r=null),o[1]?a?a.p(o,n):(a=lt(),a.c(),a.m(e,null)):a&&(a.d(1),a=null)},i:Q,o:Q,d(o){o&&I(e),r&&r.d(),a&&a.d()}}}let ot="";async function Rt(l){return new Promise((e,t)=>{try{const r=document.createElement("a");r.download=`sucess-${Date.now()}.png`,r.target="_self",r.onclick=async a=>{r.href&&URL.revokeObjectURL(r.href),r.href=l},requestAnimationFrame(()=>{console.log("Downloading image."),r.click(),e(null)})}catch{t()}})}async function Bt(l,{prompt:e,modifier:t,steps:r,seed:a}){const o=await fetch("/predict",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({data:[l,e+". "+t,r,a.toString()]})});if(!o.ok)throw new Error("Prediction request failed.");return await o.text()}function jt(l,e,t){let r,a,o,n,d;return Y(l,Me,i=>t(2,r=i)),Y(l,je,i=>t(0,a=i)),Y(l,be,i=>t(1,o=i)),Y(l,Ie,i=>t(3,n=i)),Y(l,Ae,i=>t(4,d=i)),l.$$.update=()=>{l.$$.dirty&26&&(async()=>{if(o){const i=await Bt(d.toDataURL(),n);K(je,a=i,a),K(be,o=!1,o)}})(),l.$$.dirty&5&&(async()=>r&&(await Rt(a),K(Me,r=!1,r)))()},[a,o,r,n,d]}class At extends se{constructor(e){super(),ne(this,e,jt,Ot,ie,{})}}function Dt(l){let e,t,r,a,o,n,d,i,k,E,b,P,g,v,x,u,f,h,c,m,w,y,M,_,S,N,B,q,$,J,te,X;return P=new gt({}),x=new zt({}),f=new At({}),B=new ft({}),$=new wt({}),{c(){e=C("div"),t=C("article"),r=C("h1"),a=V("Drawing to Map"),o=A(),n=C("p"),d=V("This space is for the ControlNet model "),i=C("a"),k=C("span"),E=V("Drawing2Map"),b=A(),ue(P.$$.fragment),g=A(),v=C("div"),ue(x.$$.fragment),u=A(),ue(f.$$.fragment),h=A(),c=C("button"),m=V("Generate Map"),y=A(),M=C("button"),_=V("Save Result"),N=A(),ue(B.$$.fragment),q=A(),ue($.$$.fragment),this.h()},l(O){e=T(O,"DIV",{class:!0});var L=z(e);t=T(L,"ARTICLE",{class:!0});var re=z(t);r=T(re,"H1",{});var ee=z(r);a=F(ee,"Drawing to Map"),ee.forEach(I),o=D(re),n=T(re,"P",{});var le=z(n);d=F(le,"This space is for the ControlNet model "),i=T(le,"A",{href:!0,target:!0});var ce=z(i);k=T(ce,"SPAN",{});var ye=z(k);E=F(ye,"Drawing2Map"),ye.forEach(I),ce.forEach(I),le.forEach(I),re.forEach(I),b=D(L),pe(P.$$.fragment,L),g=D(L),v=T(L,"DIV",{class:!0});var W=z(v);pe(x.$$.fragment,W),u=D(W),pe(f.$$.fragment,W),W.forEach(I),h=D(L),c=T(L,"BUTTON",{class:!0});var G=z(c);m=F(G,"Generate Map"),G.forEach(I),y=D(L),M=T(L,"BUTTON",{class:!0});var j=z(M);_=F(j,"Save Result"),j.forEach(I),N=D(L),pe(B.$$.fragment,L),q=D(L),pe($.$$.fragment,L),L.forEach(I),this.h()},h(){s(i,"href","https://github.com/RubenGres/Drawing2Map"),s(i,"target","_blank"),s(t,"class","prose"),s(v,"class","drawings py-3 -mx-3 svelte-1sy339h"),c.disabled=w=l[0]===!0,s(c,"class","green svelte-1sy339h"),M.disabled=S=l[1]===!0||!l[2],s(M,"class","svelte-1sy339h"),s(e,"class","max-w-screen-md mx-auto px-3 py-5 relative z-0")},m(O,L){Z(O,e,L),p(e,t),p(t,r),p(r,a),p(t,o),p(t,n),p(n,d),p(n,i),p(i,k),p(k,E),p(e,b),de(P,e,null),p(e,g),p(e,v),de(x,v,null),p(v,u),de(f,v,null),p(e,h),p(e,c),p(c,m),p(e,y),p(e,M),p(M,_),p(e,N),de(B,e,null),p(e,q),de($,e,null),J=!0,te||(X=[U(c,"click",Se(l[3])),U(M,"click",Se(l[4]))],te=!0)},p(O,[L]){(!J||L&1&&w!==(w=O[0]===!0))&&(c.disabled=w),(!J||L&6&&S!==(S=O[1]===!0||!O[2]))&&(M.disabled=S)},i(O){J||(he(P.$$.fragment,O),he(x.$$.fragment,O),he(f.$$.fragment,O),he(B.$$.fragment,O),he($.$$.fragment,O),J=!0)},o(O){fe(P.$$.fragment,O),fe(x.$$.fragment,O),fe(f.$$.fragment,O),fe(B.$$.fragment,O),fe($.$$.fragment,O),J=!1},d(O){O&&I(e),ve(P),ve(x),ve(f),ve(B),ve($),te=!1,Ue(X)}}}function Nt(l,e,t){let r,a,o;return Y(l,be,i=>t(0,r=i)),Y(l,Me,i=>t(1,a=i)),Y(l,je,i=>t(2,o=i)),[r,a,o,()=>K(be,r=!0,r),()=>K(Me,a=!0,a)]}class Vt extends se{constructor(e){super(),ne(this,e,Nt,Dt,ie,{})}}export{Vt as default};
diff --git a/static/_app/immutable/pages/index.svelte-e78f0615.js b/static/_app/immutable/pages/index.svelte-e78f0615.js
deleted file mode 100644
index 3b1d360cd06a08472b72c1b32b65d8bbc945d070..0000000000000000000000000000000000000000
--- a/static/_app/immutable/pages/index.svelte-e78f0615.js
+++ /dev/null
@@ -1 +0,0 @@
-import{S as re,i as le,s as oe,e as z,k as j,c as C,a as O,m as A,d as I,b as n,K as ze,g as Y,J as d,t as V,h as F,L as N,E as J,M as De,N as G,O as K,P as de,Q as he,j as Le,f as $e,R as W,T as _e,U as Ne,V as ct,W as Ce,w as se,x as ne,y as ie,q as ce,o as ue,B as pe,v as ut}from"../chunks/index-bcf2726a.js";import{w as ee,b as at}from"../chunks/paths-d3bcbd10.js";const xe=[{color:[219,14,154],label:"building"},{color:[147,142,123],label:"pervious surface"},{color:[248,12,0],label:"impervious surface"},{color:[169,113,1],label:"bare soil"},{color:[21,83,174],label:"water"},{color:[25,74,38],label:"coniferous"},{color:[70,228,131],label:"deciduous"},{color:[243,166,13],label:"brushwood"},{color:[102,0,130],label:"vineyard"},{color:[85,255,0],label:"herbaceous vegetation"},{color:[255,243,13],label:"agricultural land"},{color:[228,223,124],label:"plowed land"},{color:[61,230,235],label:"swimming pool"},{color:[255,255,255],label:"snow"},{color:[138,179,160],label:"clear cut"},{color:[107,113,79],label:"mixed"}],Te=["/samples/default.jpg","/samples/example0.png","/samples/example1.png","/samples/example2.png","/samples/example3.png","/samples/example4.png","/samples/example5.png","/samples/example6.jpg"],Oe=[["High resolution satellite image, 4K, ultra detailed","Realistic"],["Colorful lego bricks","Lego brick"],["Black and white paper pencil drawing","Pencil"],["Oil on canvas painting","Painting"]];function st(){return BigInt(0xb7dd73e137d20800&((1<<63)-1)*Math.random())}const me=ee(new Map),Be=ee(),Re=ee(),je=ee(),ge=ee(),Ae=ee({prompt:"Aerial view of rue des Lilas, Toulouse, Haute-Garonne, France",modifier:Oe[0][0],seed:st(),steps:20}),fe=ee(!1),ke=ee(!1);function Ye(l,e,t){const r=l.slice();return r[3]=e[t],r[5]=t,r}function Je(l){let e,t,r,a,o,s,u,i,x,k,m,M;return{c(){e=z("div"),t=z("input"),s=j(),u=z("label"),i=z("img"),M=j(),this.h()},l(v){e=C(v,"DIV",{class:!0});var b=O(e);t=C(b,"INPUT",{type:!0,name:!0,id:!0,class:!0}),s=A(b),u=C(b,"LABEL",{for:!0,class:!0});var E=O(u);i=C(E,"IMG",{src:!0,alt:!0,class:!0}),E.forEach(I),M=A(b),b.forEach(I),this.h()},h(){n(t,"type","radio"),n(t,"name","samples"),n(t,"id",r="sample-"+l[5]),t.value=a=l[5],t.disabled=o=l[0]===!0,n(t,"class","svelte-1gwcbp"),ze(i.src,x=at+l[3])||n(i,"src",x),n(i,"alt",k=l[3]),n(i,"class","svelte-1gwcbp"),n(u,"for",m="sample-"+l[5]),n(u,"class","svelte-1gwcbp"),n(e,"class","snap-always snap-start")},m(v,b){Y(v,e,b),d(e,t),d(e,s),d(e,u),d(u,i),d(e,M)},p(v,b){b&1&&o!==(o=v[0]===!0)&&(t.disabled=o)},d(v){v&&I(e)}}}function pt(l){let e,t,r,a,o,s,u,i,x=Te,k=[];for(let m=0;m<x.length;m+=1)k[m]=Je(Ye(l,x,m));return{c(){e=z("div"),t=z("h4"),r=V("Select a Template"),a=j(),o=z("form"),s=z("div");for(let m=0;m<k.length;m+=1)k[m].c();this.h()},l(m){e=C(m,"DIV",{});var M=O(e);t=C(M,"H4",{class:!0});var v=O(t);r=F(v,"Select a Template"),v.forEach(I),a=A(M),o=C(M,"FORM",{class:!0});var b=O(o);s=C(b,"DIV",{class:!0});var E=O(s);for(let c=0;c<k.length;c+=1)k[c].l(E);E.forEach(I),b.forEach(I),M.forEach(I),this.h()},h(){n(t,"class","font-bold mt-6 mb-2 my-6 leading-6"),n(s,"class","samples  svelte-1gwcbp"),n(o,"class","svelte-1gwcbp")},m(m,M){Y(m,e,M),d(e,t),d(t,r),d(e,a),d(e,o),d(o,s);for(let v=0;v<k.length;v+=1)k[v].m(s,null);u||(i=N(o,"input",l[1]),u=!0)},p(m,[M]){if(M&1){x=Te;let v;for(v=0;v<x.length;v+=1){const b=Ye(m,x,v);k[v]?k[v].p(b,M):(k[v]=Je(b),k[v].c(),k[v].m(s,null))}for(;v<k.length;v+=1)k[v].d(1);k.length=x.length}},i:J,o:J,d(m){m&&I(e),De(k,m),u=!1,i()}}}async function dt(l){return new Promise((e,t)=>{const r=new Image;r.onload=()=>{URL.revokeObjectURL(r.src),e(r)},r.onerror=a=>{t(a)},r.src=URL.createObjectURL(l)})}function ht(l,e,t){let r,a;return G(l,je,s=>t(2,r=s)),G(l,fe,s=>t(0,a=s)),[a,async s=>{s.preventDefault();const u=Te[parseInt(s.target.value)];if(u){const i=await fetch(at+u).then(k=>k.blob()),x=await dt(i);K(je,r=x,r)}}]}class ft extends re{constructor(e){super(),le(this,e,ht,pt,oe,{})}}function Xe(l,e,t){const r=l.slice();return r[2]=e[t],r[7]=t,r}function Ke(l){let e,t,r,a,o,s,u,i,x,k,m,M,v=l[2].label+"",b,E,c;return{c(){e=z("div"),t=z("input"),s=j(),u=z("label"),i=de("svg"),x=de("rect"),m=j(),M=z("span"),b=V(v),c=j(),this.h()},l(f){e=C(f,"DIV",{class:!0});var h=O(e);t=C(h,"INPUT",{name:!0,type:!0,id:!0,class:!0}),s=A(h),u=C(h,"LABEL",{for:!0,class:!0});var p=O(u);i=he(p,"svg",{width:!0,height:!0,viewBox:!0,class:!0});var g=O(i);x=he(g,"rect",{x:!0,y:!0,width:!0,height:!0,fill:!0}),O(x).forEach(I),g.forEach(I),m=A(p),M=C(p,"SPAN",{class:!0});var w=O(M);b=F(w,v),w.forEach(I),p.forEach(I),c=A(h),h.forEach(I),this.h()},h(){n(t,"name","color"),t.checked=r=l[7]==nt,n(t,"type","radio"),n(t,"id",a="color-"+l[7]),t.value=o=l[7],n(t,"class","svelte-1oy4poo"),n(x,"x","0"),n(x,"y","0"),n(x,"width","20"),n(x,"height","20"),n(x,"fill",k="rgb("+l[2].color.join(",")+")"),n(i,"width","20"),n(i,"height","20"),n(i,"viewBox","0 0 20 20"),n(i,"class","svelte-1oy4poo"),n(M,"class","svelte-1oy4poo"),n(u,"for",E="color-"+l[7]),n(u,"class","svelte-1oy4poo"),n(e,"class","snap-always snap-start")},m(f,h){Y(f,e,h),d(e,t),d(e,s),d(e,u),d(u,i),d(i,x),d(u,m),d(u,M),d(M,b),d(e,c)},p:J,d(f){f&&I(e)}}}function vt(l){let e,t,r,a,o,s,u,i,x,k,m,M,v,b=l[0].size+"",E,c,f,h=xe,p=[];for(let g=0;g<h.length;g+=1)p[g]=Ke(Xe(l,h,g));return{c(){e=z("form"),t=z("h4"),r=V("Brush Type"),a=j(),o=z("div");for(let g=0;g<p.length;g+=1)p[g].c();s=j(),u=z("h4"),i=V("Brush Size"),x=j(),k=z("div"),m=z("input"),M=j(),v=z("label"),E=V(b),this.h()},l(g){e=C(g,"FORM",{});var w=O(e);t=C(w,"H4",{class:!0});var y=O(t);r=F(y,"Brush Type"),y.forEach(I),a=A(w),o=C(w,"DIV",{class:!0,name:!0});var P=O(o);for(let T=0;T<p.length;T+=1)p[T].l(P);P.forEach(I),s=A(w),u=C(w,"H4",{class:!0});var _=O(u);i=F(_,"Brush Size"),_.forEach(I),x=A(w),k=C(w,"DIV",{class:!0});var S=O(k);m=C(S,"INPUT",{min:!0,max:!0,step:!0,name:!0,type:!0}),M=A(S),v=C(S,"LABEL",{class:!0,for:!0});var D=O(v);E=F(D,b),D.forEach(I),S.forEach(I),w.forEach(I),this.h()},h(){n(t,"class","font-bold mt-6 mb-2 leading-6 my-3"),n(o,"class","colors svelte-1oy4poo"),n(o,"name","colors"),n(u,"class","font-bold mt-6 mb-2 my-6 leading-6"),m.value="10",n(m,"min","1"),n(m,"max","150"),n(m,"step","1"),n(m,"name","brush"),n(m,"type","range"),n(v,"class","pl-2 svelte-1oy4poo"),n(v,"for","brush"),n(k,"class","brush svelte-1oy4poo")},m(g,w){Y(g,e,w),d(e,t),d(t,r),d(e,a),d(e,o);for(let y=0;y<p.length;y+=1)p[y].m(o,null);d(e,s),d(e,u),d(u,i),d(e,x),d(e,k),d(k,m),d(k,M),d(k,v),d(v,E),c||(f=N(e,"input",l[1]),c=!0)},p(g,[w]){if(w&0){h=xe;let y;for(y=0;y<h.length;y+=1){const P=Xe(g,h,y);p[y]?p[y].p(P,w):(p[y]=Ke(P),p[y].c(),p[y].m(o,null))}for(;y<p.length;y+=1)p[y].d(1);p.length=h.length}w&1&&b!==(b=g[0].size+"")&&Le(E,b)},i:J,o:J,d(g){g&&I(e),De(p,g),c=!1,f()}}}const nt=6;function mt(l,e,t){let r;G(l,ge,x=>t(0,r=x));const{color:a,label:o}=xe[nt];let s=`rgb(${a.join(",")})`,u=40;return K(ge,r={color:s,size:u,label:o},r),[r,async x=>{const k=x.target;if(k.name==="color"){const m=parseInt(k.value),{color:M,label:v}=xe[m];s=`rgb(${M.join(",")})`,K(ge,r={color:s,size:u,label:v},r)}else k.name==="brush"&&(u=parseInt(k.value),K(ge,r={color:s,size:u,label:o},r))},a]}class gt extends re{constructor(e){super(),le(this,e,mt,vt,oe,{})}}function Ze(l,e,t){const r=l.slice();return r[15]=e[t],r}function Qe(l){let e,t=l[15][1]+"",r,a,o;return{c(){e=z("option"),r=V(t),o=V("`"),this.h()},l(s){e=C(s,"OPTION",{});var u=O(e);r=F(u,t),u.forEach(I),o=F(s,"`"),this.h()},h(){e.__value=a=l[15][0],e.value=e.__value},m(s,u){Y(s,e,u),d(e,r),Y(s,o,u)},p:J,d(s){s&&I(e),s&&I(o)}}}function bt(l){let e,t,r,a,o,s,u,i,x,k,m,M,v,b,E,c,f,h,p,g,w,y,P,_,S,D,T,R,X,Q,Z,$,H,be,Ee,te,ye,Ie,Ue,ae=Oe,q=[];for(let L=0;L<ae.length;L+=1)q[L]=Qe(Ze(l,ae,L));return{c(){e=z("form"),t=z("h4"),r=V("Prompt"),a=j(),o=z("input"),u=j(),i=z("h4"),x=V("Modifier"),k=j(),m=z("input"),v=j(),b=z("select"),E=z("option"),c=V("preset");for(let L=0;L<q.length;L+=1)q[L].c();h=j(),p=z("h4"),g=V("Random Seed"),w=j(),y=z("input"),_=j(),S=z("button"),D=V("Random"),R=j(),X=z("h4"),Q=V("Sample Steps"),Z=j(),$=z("div"),H=z("input"),Ee=j(),te=z("label"),ye=V(l[2]),this.h()},l(L){e=C(L,"FORM",{});var B=O(e);t=C(B,"H4",{class:!0});var U=O(t);r=F(U,"Prompt"),U.forEach(I),a=A(B),o=C(B,"INPUT",{name:!0,placeholder:!0,style:!0,class:!0}),u=A(B),i=C(B,"H4",{class:!0});var ve=O(i);x=F(ve,"Modifier"),ve.forEach(I),k=A(B),m=C(B,"INPUT",{name:!0,placeholder:!0,style:!0,class:!0}),v=A(B),b=C(B,"SELECT",{name:!0,class:!0});var Se=O(b);E=C(Se,"OPTION",{});var Ve=O(E);c=F(Ve,"preset"),Ve.forEach(I);for(let Pe=0;Pe<q.length;Pe+=1)q[Pe].l(Se);Se.forEach(I),h=A(B),p=C(B,"H4",{class:!0});var Fe=O(p);g=F(Fe,"Random Seed"),Fe.forEach(I),w=A(B),y=C(B,"INPUT",{type:!0,name:!0,placeholder:!0,class:!0}),_=A(B),S=C(B,"BUTTON",{class:!0});var He=O(S);D=F(He,"Random"),He.forEach(I),R=A(B),X=C(B,"H4",{class:!0});var Ge=O(X);Q=F(Ge,"Sample Steps"),Ge.forEach(I),Z=A(B),$=C(B,"DIV",{class:!0});var we=O($);H=C(we,"INPUT",{type:!0,name:!0,min:!0,max:!0,step:!0,class:!0}),Ee=A(we),te=C(we,"LABEL",{class:!0,for:!0});var qe=O(te);ye=F(qe,l[2]),qe.forEach(I),we.forEach(I),B.forEach(I),this.h()},h(){n(t,"class","font-bold mt-6 mb-2 my-6 leading-6"),n(o,"name","prompt"),n(o,"placeholder","Aerial view of ..., France."),o.disabled=s=l[5]===!0,$e(o,"width","500px"),n(o,"class","svelte-7to72y"),n(i,"class","font-bold mt-6 mb-2 my-6 leading-6"),n(m,"name","modifier"),n(m,"placeholder","High resolution satellite image"),m.disabled=M=l[5]===!0,$e(m,"width","500px"),n(m,"class","svelte-7to72y"),E.disabled=!0,E.selected=!0,E.__value="preset",E.value=E.__value,n(b,"name","presets"),b.disabled=f=l[5]===!0,n(b,"class","svelte-7to72y"),n(p,"class","font-bold mt-6 mb-2 my-6 leading-6"),n(y,"type","Number"),n(y,"name","seed"),n(y,"placeholder","Integer Seed"),y.disabled=P=l[5]===!0,n(y,"class","svelte-7to72y"),S.disabled=T=l[5]===!0,n(S,"class","svelte-7to72y"),n(X,"class","font-bold mt-6 mb-2 my-6 leading-6"),n(H,"type","range"),n(H,"name","steps"),n(H,"min","10"),n(H,"max","30"),n(H,"step","1"),H.disabled=be=l[5]===!0,n(H,"class","svelte-7to72y"),n(te,"class","pl-2 svelte-7to72y"),n(te,"for","steps"),n($,"class","flex")},m(L,B){Y(L,e,B),d(e,t),d(t,r),d(e,a),d(e,o),W(o,l[3]),d(e,u),d(e,i),d(i,x),d(e,k),d(e,m),W(m,l[4]),d(e,v),d(e,b),d(b,E),d(E,c);for(let U=0;U<q.length;U+=1)q[U].m(b,null);d(e,h),d(e,p),d(p,g),d(e,w),d(e,y),W(y,l[1]),d(e,_),d(e,S),d(S,D),d(e,R),d(e,X),d(X,Q),d(e,Z),d(e,$),d($,H),W(H,l[2]),d($,Ee),d($,te),d(te,ye),l[13](e),Ie||(Ue=[N(o,"input",l[7]),N(m,"input",l[8]),N(b,"change",l[9]),N(y,"input",l[10]),N(S,"click",_e(l[11])),N(H,"change",l[12]),N(H,"input",l[12]),N(e,"input",l[6])],Ie=!0)},p(L,[B]){if(B&32&&s!==(s=L[5]===!0)&&(o.disabled=s),B&8&&o.value!==L[3]&&W(o,L[3]),B&32&&M!==(M=L[5]===!0)&&(m.disabled=M),B&16&&m.value!==L[4]&&W(m,L[4]),B&0){ae=Oe;let U;for(U=0;U<ae.length;U+=1){const ve=Ze(L,ae,U);q[U]?q[U].p(ve,B):(q[U]=Qe(ve),q[U].c(),q[U].m(b,null))}for(;U<q.length;U+=1)q[U].d(1);q.length=ae.length}B&32&&f!==(f=L[5]===!0)&&(b.disabled=f),B&32&&P!==(P=L[5]===!0)&&(y.disabled=P),B&2&&W(y,L[1]),B&32&&T!==(T=L[5]===!0)&&(S.disabled=T),B&32&&be!==(be=L[5]===!0)&&(H.disabled=be),B&4&&W(H,L[2]),B&4&&Le(ye,L[2])},i:J,o:J,d(L){L&&I(e),De(q,L),l[13](null),Ie=!1,Ne(Ue)}}}function yt(l,e,t){let r,a;G(l,Ae,h=>t(14,r=h)),G(l,fe,h=>t(5,a=h));function o(){const h=s.elements;K(Ae,r={prompt:h.prompt.value,modifier:h.modifier.value,seed:BigInt(h.seed.value),steps:parseInt(h.steps.value)},r)}let s,u=r.seed,i=r.steps,x=r.prompt,k=r.modifier;function m(){x=this.value,t(3,x)}function M(){k=this.value,t(4,k)}const v=h=>{t(4,k=h.currentTarget.value)};function b(){u=this.value,t(1,u)}const E=()=>{t(1,u=st()),o()};function c(){i=ct(this.value),t(2,i)}function f(h){Ce[h?"unshift":"push"](()=>{s=h,t(0,s)})}return[s,u,i,x,k,a,o,m,M,v,b,E,c,f]}class wt extends re{constructor(e){super(),le(this,e,yt,bt,oe,{})}}let _t=(l=21)=>crypto.getRandomValues(new Uint8Array(l)).reduce((e,t)=>(t&=63,t<36?e+=t.toString(36):t<62?e+=(t-26).toString(36).toUpperCase():t>62?e+="-":e+="_",e),"");var xt=typeof globalThis!="undefined"?globalThis:typeof window!="undefined"?window:typeof global!="undefined"?global:typeof self!="undefined"?self:{};function kt(l){return l&&l.__esModule&&Object.prototype.hasOwnProperty.call(l,"default")?l.default:l}var it={exports:{}};(function(l,e){(function(t,r){l.exports=r()})(typeof self!="undefined"?self:xt,function(){return function(t){var r={};function a(o){if(r[o])return r[o].exports;var s=r[o]={i:o,l:!1,exports:{}};return t[o].call(s.exports,s,s.exports,a),s.l=!0,s.exports}return a.m=t,a.c=r,a.d=function(o,s,u){a.o(o,s)||Object.defineProperty(o,s,{enumerable:!0,get:u})},a.r=function(o){typeof Symbol!="undefined"&&Symbol.toStringTag&&Object.defineProperty(o,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(o,"__esModule",{value:!0})},a.t=function(o,s){if(1&s&&(o=a(o)),8&s||4&s&&typeof o=="object"&&o&&o.__esModule)return o;var u=Object.create(null);if(a.r(u),Object.defineProperty(u,"default",{enumerable:!0,value:o}),2&s&&typeof o!="string")for(var i in o)a.d(u,i,function(x){return o[x]}.bind(null,i));return u},a.n=function(o){var s=o&&o.__esModule?function(){return o.default}:function(){return o};return a.d(s,"a",s),s},a.o=function(o,s){return Object.prototype.hasOwnProperty.call(o,s)},a.p="",a(a.s=0)}([function(t,r,a){function o(v,b){return function(E){if(Array.isArray(E))return E}(v)||function(E,c){if(Symbol.iterator in Object(E)||Object.prototype.toString.call(E)==="[object Arguments]"){var f=[],h=!0,p=!1,g=void 0;try{for(var w,y=E[Symbol.iterator]();!(h=(w=y.next()).done)&&(f.push(w.value),!c||f.length!==c);h=!0);}catch(P){p=!0,g=P}finally{try{h||y.return==null||y.return()}finally{if(p)throw g}}return f}}(v,b)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function s(v){return function(b){if(Array.isArray(b)){for(var E=0,c=new Array(b.length);E<b.length;E++)c[E]=b[E];return c}}(v)||function(b){if(Symbol.iterator in Object(b)||Object.prototype.toString.call(b)==="[object Arguments]")return Array.from(b)}(v)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance")}()}function u(v,b){for(var E=0;E<b.length;E++){var c=b[E];c.enumerable=c.enumerable||!1,c.configurable=!0,"value"in c&&(c.writable=!0),Object.defineProperty(v,c.key,c)}}a.r(r);var i=/^#?[0-9A-Fa-f]{1,2}[0-9A-Fa-f]{1,2}[0-9A-Fa-f]{1,2}$/,x=/^rgb\((\s+)?[0-9]{1,3},(\s+)?[0-9]{1,3},(\s+)?[0-9]{1,3}(\s+)?\)$/,k=function(){function v(){(function(c,f){if(!(c instanceof f))throw new TypeError("Cannot call a class as a function")})(this,v),this.canvases={}}var b,E;return b=v,(E=[{key:"parseColor",value:function(c){var f=i.test(c),h=x.test(c);if(!f&&!h)throw new Error("Color is not correct format. #123123 or rgb(123, 123, 123) format required.");if(f){var p=c[0]==="#"?c.slice(1):c;return p=p.length===3?p.split("").reduce(function(_,S){return[].concat(s(_),[S,S])},[]).join(""):p,{r:parseInt(p.slice(0,2),16),g:parseInt(p.slice(2,4),16),b:parseInt(p.slice(4,6),16)}}if(h){var g=o(c.replace(/rgb|\s+|\(|\)/g,"").split(",").map(function(_){return parseInt(_)}),3),w=g[0],y=g[1],P=g[2];return{r:w=w>255?255:w,g:y=y>255?255:y,b:P=P>255?255:P}}}},{key:"make",value:function(c){var f=c.size,h=c.color;try{f*=window.devicePixelRatio;var p=this.parseColor(h),g=JSON.stringify(p);if(this.canvases[g]=this.canvases[g]||{},this.canvases[g][f]!=null)return this.canvases[g][f];var w=document.createElement("canvas");f+=f%2,w.width=f,w.height=f;for(var y=w.getContext("2d"),P=y.createImageData(f,f),_=0;_<P.data.length;_+=4)P.data[_]=255,P.data[_+1]=255,P.data[_+2]=255,P.data[_+3]=0;return this.plotCircle(2*f,4*f*(f/2),f/2,P,f,p),this.fillCircle(P,p),y.putImageData(P,0,0),this.canvases[g][f]=w,w}catch(S){console.error(S)}}},{key:"plotCircle",value:function(c,f,h,p,g,w){var y=-h,P=0,_=2-2*h;do{var S=c-4*(y+1)+(f+4*g*(P-1));p.data[S+0]=w.r,p.data[S+1]=w.g,p.data[S+2]=w.b,p.data[S+3]=255;var D=c-P*(4*g)+(f-4*(y+1));p.data[D+0]=w.r,p.data[D+1]=w.g,p.data[D+2]=w.b,p.data[D+3]=255;var T=c+4*y+(f-P*(4*g));p.data[T+0]=w.r,p.data[T+1]=w.g,p.data[T+2]=w.b,p.data[T+3]=255;var R=c+4*g*(P-1)+(f+4*y);p.data[R+0]=w.r,p.data[R+1]=w.g,p.data[R+2]=w.b,p.data[R+3]=255,(h=_)<=P&&(_+=2*++P+1),(h>y||_>P)&&(_+=2*++y+1)}while(y<0)}},{key:"fillCircle",value:function(c,f){for(var h=4*c.width,p=1;p<c.height-1;p+=1)for(var g=!1,w=!1,y=!1,P=0;P<h;P+=4){var _=h*p+P,S=c.data[_+3],D=S===255;D&&!g?g=!0:S===0&&g?w=!0:D&&g&&w&&(y=!0),g&&w&&!y&&(c.data[_]=f.r,c.data[_+1]=f.g,c.data[_+2]=f.b,c.data[_+3]=255)}}}])&&u(b.prototype,E),v}();function m(v,b){for(var E=0;E<b.length;E++){var c=b[E];c.enumerable=c.enumerable||!1,c.configurable=!0,"value"in c&&(c.writable=!0),Object.defineProperty(v,c.key,c)}}var M=function(){function v(c){(function(f,h){if(!(f instanceof h))throw new TypeError("Cannot call a class as a function")})(this,v),this.canvas=c,this.context=c.getContext("2d"),this.stampMaker=new k,this.configPixelRatio()}var b,E;return b=v,(E=[{key:"configPixelRatio",value:function(){var c=this.canvas,f=c.width,h=c.height;this.canvas.width=f*this.dpr,this.canvas.height=h*this.dpr,this.canvas.style.width="".concat(f,"px"),this.canvas.style.height="".concat(h,"px"),this.context.scale(this.dpr,this.dpr),this.context.imageSmoothingEnabled=!1}},{key:"exportAsPNG",value:function(c){var f=this;return new Promise(function(h){var p=document.createElement("canvas"),g=p.getContext("2d"),w=f.canvas,y=w.width,P=w.height,_=y/f.dpr,S=P/f.dpr;p.width=_,p.height=S,g.imageSmoothingEnabled=!1,g.drawImage(f.canvas,0,0,y,P,0,0,_,S),p.toBlob(function(D){D.lastModifedDate=new Date,D.name=c,h(D)})})}},{key:"distanceBetween",value:function(c,f){return Math.sqrt(Math.pow(f.x-c.x,2)+Math.pow(f.y-c.y,2))}},{key:"angleBetween",value:function(c,f){return Math.atan2(f.x-c.x,f.y-c.y)}},{key:"draw",value:function(c){var f=c.from,h=c.to,p=c.size,g=c.color;this.context.globalCompositeOperation="source-over",this.brush({from:f,to:h,size:p,color:g})}},{key:"erase",value:function(c){var f=c.from,h=c.to,p=c.size;this.context.globalCompositeOperation="destination-out",this.brush({from:f,to:h,size:p,color:"#000000"})}},{key:"brush",value:function(c){var f=this,h=c.from,p=c.to,g=c.size,w=c.color,y=(g-g%2)/2,P=this.stampMaker.make({size:g,color:w});if(h.x!==p.x||h.y!==p.y)for(var _=this.distanceBetween(h,p),S=this.angleBetween(h,p),D=function(Q){var Z=h.x+Math.sin(S)*Q-y,$=h.y+Math.cos(S)*Q-y;window.requestAnimationFrame(function(){f.context.drawImage(P,Math.round(Z),Math.round($),g,g)})},T=0;T<_;T+=1)D(T);else{var R=h.x-y,X=h.y-y;this.context.drawImage(P,Math.round(R),Math.round(X),g,g)}}},{key:"dpr",get:function(){return window.devicePixelRatio||1}}])&&m(b.prototype,E),v}();r.default=M}])})})(it);var We=kt(it.exports);function Et(l){let e,t;return{c(){e=de("svg"),t=de("path"),this.h()},l(r){e=he(r,"svg",{xmlns:!0,width:!0,viewBox:!0,class:!0});var a=O(e);t=he(a,"path",{fill:!0,stroke:!0,"stroke-width":!0,d:!0}),O(t).forEach(I),a.forEach(I),this.h()},h(){n(t,"fill","white"),n(t,"stroke","black"),n(t,"stroke-width","30"),n(t,"d","M480 256c0 123.4-100.5 223.9-223.9 223.9c-48.84 0-95.17-15.58-134.2-44.86c-14.12-10.59-16.97-30.66-6.375-44.81c10.59-14.12 30.62-16.94 44.81-6.375c27.84 20.91 61 31.94 95.88 31.94C344.3 415.8 416 344.1 416 256s-71.69-159.8-159.8-159.8c-37.46 0-73.09 13.49-101.3 36.64l45.12 45.14c17.01 17.02 4.955 46.1-19.1 46.1H35.17C24.58 224.1 16 215.5 16 204.9V59.04c0-24.04 29.07-36.08 46.07-19.07l47.6 47.63C149.9 52.71 201.5 32.11 256.1 32.11C379.5 32.11 480 132.6 480 256z"),n(e,"xmlns","http://www.w3.org/2000/svg"),n(e,"width","20"),n(e,"viewBox","0 0 512 512"),n(e,"class",l[0])},m(r,a){Y(r,e,a),d(e,t)},p(r,[a]){a&1&&n(e,"class",r[0])},i:J,o:J,d(r){r&&I(e)}}}function It(l,e,t){let{classNames:r=""}=e;return l.$$set=a=>{"classNames"in a&&t(0,r=a.classNames)},[r]}class St extends re{constructor(e){super(),le(this,e,It,Et,oe,{classNames:0})}}function Pt(l){var f;let e,t,r,a,o,s,u,i=((f=l[0])==null?void 0:f.label)+"",x,k,m,M,v,b,E,c;return M=new St({}),{c(){e=z("div"),t=z("div"),r=z("canvas"),a=j(),o=z("canvas"),s=j(),u=z("span"),x=V(i),k=j(),m=z("button"),se(M.$$.fragment),this.h()},l(h){e=C(h,"DIV",{});var p=O(e);t=C(p,"DIV",{class:!0});var g=O(t);r=C(g,"CANVAS",{class:!0,width:!0,height:!0}),O(r).forEach(I),a=A(g),o=C(g,"CANVAS",{class:!0,width:!0,height:!0}),O(o).forEach(I),s=A(g),u=C(g,"SPAN",{class:!0});var w=O(u);x=F(w,i),w.forEach(I),k=A(g),m=C(g,"BUTTON",{class:!0});var y=O(m);ne(M.$$.fragment,y),y.forEach(I),g.forEach(I),p.forEach(I),this.h()},h(){n(r,"class","canvas svelte-vhujxn"),n(r,"width","512"),n(r,"height","512"),n(o,"class","brush svelte-vhujxn"),n(o,"width","10"),n(o,"height","10"),n(u,"class","label svelte-vhujxn"),n(m,"class","absolute bottom-0 left-0 p-3"),m.disabled=v=l[3].size<=0,n(t,"class","relative overflow-clip")},m(h,p){Y(h,e,p),d(e,t),d(t,r),l[11](r),d(t,a),d(t,o),l[12](o),d(t,s),d(t,u),d(u,x),d(t,k),d(t,m),ie(M,m,null),b=!0,E||(c=[N(r,"touchmove",zt),N(r,"pointerenter",Mt),N(r,"pointerup",l[4]),N(r,"pointerleave",l[4]),N(r,"pointercancel",l[4]),N(r,"pointerout",l[4]),N(r,"pointermove",l[6]),N(r,"pointerdown",l[5]),N(m,"click",_e(l[13]))],E=!0)},p(h,[p]){var g;(!b||p&1)&&i!==(i=((g=h[0])==null?void 0:g.label)+"")&&Le(x,i),(!b||p&8&&v!==(v=h[3].size<=0))&&(m.disabled=v)},i(h){b||(ce(M.$$.fragment,h),b=!0)},o(h){ue(M.$$.fragment,h),b=!1},d(h){h&&I(e),l[11](null),l[12](null),pe(M),E=!1,Ne(c)}}}function Mt(){}function et(l,e){const t=l.getBoundingClientRect();return{x:(e.clientX-t.left)*(l.width/t.width),y:(e.clientY-t.top)*(l.height/t.height)}}function tt(l){l.fillStyle="#46e483",l.fillRect(0,0,l.canvas.width,l.canvas.height)}function Me(l,e){l.drawImage(e,0,0,l.canvas.width,l.canvas.height)}const zt=l=>l.preventDefault();function Ct(l,e,t){let r,a,o,s;G(l,me,_=>t(3,r=_)),G(l,je,_=>t(10,a=_)),G(l,ge,_=>t(0,o=_)),G(l,Re,_=>t(18,s=_));let u,i,x,k,m={x:0,y:0},M;ut(()=>{t(9,k=u.getContext("2d")),t(8,x=i.getContext("2d")),window.devicePixelRatio=1,M=new We(u),t(1,u.style.height="unset",u),t(1,u.style.width="unset",u),K(Re,s=u,s),tt(k)});let v=!1,b;function E(){t(2,i.style.top=`${10+o.size/2}px`,i),t(2,i.style.left=`${10+o.size/2}px`,i),v=!1}function c(_){v=!0,m=et(u,_),M.draw({from:m,to:m,size:o.size,color:o.color}),b=_t(),me.update(S=>(S.set(b,{brush:o,points:[{from:m,to:m}]}),S))}function f(_){const S=et(u,_);t(2,i.style.top=`${_.offsetY}px`,i),t(2,i.style.left=`${_.offsetX}px`,i),v&&(M.draw({from:m,to:S,size:o.size,color:o.color}),me.update(D=>{const T=D.get(b);return T==null||T.points.push({from:m,to:S}),D}),m=S)}function h(_){const{size:S,color:D}=_;t(2,i.width=S,i),t(2,i.height=S,i),t(8,x.fillStyle=D,x),x.arc(S/2,S/2,S/2,0,2*Math.PI),x.fill()}function p(){if(r.size<=0)return;const _=Array.from(r.keys());me.update(S=>(S.delete(_[_.length-1]),S)),g(k)}function g(_){const S=document.createElement("canvas");S.width=512,S.height=512,window.devicePixelRatio=1;const D=new We(S);tt(_),a&&Me(_,a),Array.from(r.values()).forEach(T=>{T.points.forEach((R,X)=>{D.draw({from:R.from,to:R.to,size:T.brush.size,color:T.brush.color})})}),requestAnimationFrame(()=>{Me(_,S)})}function w(_){Ce[_?"unshift":"push"](()=>{u=_,t(1,u)})}function y(_){Ce[_?"unshift":"push"](()=>{i=_,t(2,i),t(8,x),t(0,o)})}const P=()=>p();return l.$$.update=()=>{l.$$.dirty&257&&x&&o&&(h(o),t(2,i.style.top=`${10+o.size/2}px`,i),t(2,i.style.left=`${10+o.size/2}px`,i)),l.$$.dirty&1536&&a&&(Me(k,a),K(me,r=new Map,r))},[o,u,i,r,E,c,f,p,x,k,a,w,y,P]}class Tt extends re{constructor(e){super(),le(this,e,Ct,Pt,oe,{})}}function rt(l){let e,t,r;return{c(){e=z("img"),this.h()},l(a){e=C(a,"IMG",{class:!0,alt:!0,src:!0,width:!0,height:!0}),this.h()},h(){n(e,"class",t="image "+(l[1]?"opacity-30":"")+" svelte-1t0h0rs"),n(e,"alt","Generative Map Result"),ze(e.src,r=l[0])||n(e,"src",r),n(e,"width","512"),n(e,"height","512")},m(a,o){Y(a,e,o)},p(a,o){o&2&&t!==(t="image "+(a[1]?"opacity-30":"")+" svelte-1t0h0rs")&&n(e,"class",t),o&1&&!ze(e.src,r=a[0])&&n(e,"src",r)},d(a){a&&I(e)}}}function lt(l){let e,t,r,a,o,s;return{c(){e=z("div"),t=de("svg"),r=de("path"),a=j(),o=z("span"),s=V(ot),this.h()},l(u){e=C(u,"DIV",{class:!0});var i=O(e);t=he(i,"svg",{xmlns:!0,fill:!0,viewBox:!0,class:!0});var x=O(t);r=he(x,"path",{fill:!0,d:!0}),O(r).forEach(I),x.forEach(I),a=A(i),o=C(i,"SPAN",{class:!0});var k=O(o);s=F(k,ot),k.forEach(I),i.forEach(I),this.h()},h(){n(r,"fill","currentColor"),n(r,"d","M20 12a8 8 0 0 1-8 8v4a12 12 0 0 0 12-12h-4Zm-2-5.3a8 8 0 0 1 2 5.3h4c0-3-1.1-5.8-3-8l-3 2.7Z"),n(t,"xmlns","http://www.w3.org/2000/svg"),n(t,"fill","none"),n(t,"viewBox","0 0 24 24"),n(t,"class","animate-spin max-w-[3rem]"),n(o,"class","text-xs"),n(e,"class","loading svelte-1t0h0rs")},m(u,i){Y(u,e,i),d(e,t),d(t,r),d(e,a),d(e,o),d(o,s)},p:J,d(u){u&&I(e)}}}function Ot(l){let e,t,r=l[0]&&rt(l),a=l[1]&&lt();return{c(){e=z("div"),r&&r.c(),t=j(),a&&a.c(),this.h()},l(o){e=C(o,"DIV",{class:!0});var s=O(e);r&&r.l(s),t=A(s),a&&a.l(s),s.forEach(I),this.h()},h(){n(e,"class","relative overflow-clip flex flex-col justify-center items-center w-full h-full")},m(o,s){Y(o,e,s),r&&r.m(e,null),d(e,t),a&&a.m(e,null)},p(o,[s]){o[0]?r?r.p(o,s):(r=rt(o),r.c(),r.m(e,t)):r&&(r.d(1),r=null),o[1]?a?a.p(o,s):(a=lt(),a.c(),a.m(e,null)):a&&(a.d(1),a=null)},i:J,o:J,d(o){o&&I(e),r&&r.d(),a&&a.d()}}}let ot="";async function Bt(l){return new Promise((e,t)=>{try{const r=document.createElement("a");r.download=`sucess-${Date.now()}.png`,r.target="_self",r.onclick=async a=>{r.href&&URL.revokeObjectURL(r.href),r.href=l},requestAnimationFrame(()=>{console.log("Downloading image."),r.click(),e(null)})}catch{t()}})}async function Rt(l,{prompt:e,modifier:t,steps:r,seed:a}){const o=await fetch("/predict",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({data:[l,e+". "+t,r,a.toString()]})});if(!o.ok)throw new Error("Prediction request failed.");return await o.text()}function jt(l,e,t){let r,a,o,s,u;return G(l,ke,i=>t(2,r=i)),G(l,Be,i=>t(0,a=i)),G(l,fe,i=>t(1,o=i)),G(l,Ae,i=>t(3,s=i)),G(l,Re,i=>t(4,u=i)),l.$$.update=()=>{l.$$.dirty&26&&(async()=>{if(o){const i=await Rt(u.toDataURL(),s);K(Be,a=i,a),K(fe,o=!1,o)}})(),l.$$.dirty&5&&(async()=>r&&(await Bt(a),K(ke,r=!1,r)))()},[a,o,r,s,u]}class At extends re{constructor(e){super(),le(this,e,jt,Ot,oe,{})}}function Dt(l){let e,t,r,a,o,s,u,i,x,k,m,M,v,b,E,c,f,h,p,g,w,y,P,_,S,D;return s=new gt({}),x=new Tt({}),m=new At({}),w=new ft({}),P=new wt({}),{c(){e=z("div"),t=z("article"),r=z("h1"),a=V("Drawing to Map"),o=j(),se(s.$$.fragment),u=j(),i=z("div"),se(x.$$.fragment),k=j(),se(m.$$.fragment),M=j(),v=z("button"),b=V("Generate Map"),c=j(),f=z("button"),h=V("Save Result"),g=j(),se(w.$$.fragment),y=j(),se(P.$$.fragment),this.h()},l(T){e=C(T,"DIV",{class:!0});var R=O(e);t=C(R,"ARTICLE",{class:!0});var X=O(t);r=C(X,"H1",{});var Q=O(r);a=F(Q,"Drawing to Map"),Q.forEach(I),X.forEach(I),o=A(R),ne(s.$$.fragment,R),u=A(R),i=C(R,"DIV",{class:!0});var Z=O(i);ne(x.$$.fragment,Z),k=A(Z),ne(m.$$.fragment,Z),Z.forEach(I),M=A(R),v=C(R,"BUTTON",{class:!0});var $=O(v);b=F($,"Generate Map"),$.forEach(I),c=A(R),f=C(R,"BUTTON",{class:!0});var H=O(f);h=F(H,"Save Result"),H.forEach(I),g=A(R),ne(w.$$.fragment,R),y=A(R),ne(P.$$.fragment,R),R.forEach(I),this.h()},h(){n(t,"class","prose"),n(i,"class","drawings py-3 -mx-3 svelte-1sy339h"),v.disabled=E=l[0]===!0,n(v,"class","green svelte-1sy339h"),f.disabled=p=l[1]===!0||!l[2],n(f,"class","svelte-1sy339h"),n(e,"class","max-w-screen-md mx-auto px-3 py-5 relative z-0")},m(T,R){Y(T,e,R),d(e,t),d(t,r),d(r,a),d(e,o),ie(s,e,null),d(e,u),d(e,i),ie(x,i,null),d(i,k),ie(m,i,null),d(e,M),d(e,v),d(v,b),d(e,c),d(e,f),d(f,h),d(e,g),ie(w,e,null),d(e,y),ie(P,e,null),_=!0,S||(D=[N(v,"click",_e(l[3])),N(f,"click",_e(l[4]))],S=!0)},p(T,[R]){(!_||R&1&&E!==(E=T[0]===!0))&&(v.disabled=E),(!_||R&6&&p!==(p=T[1]===!0||!T[2]))&&(f.disabled=p)},i(T){_||(ce(s.$$.fragment,T),ce(x.$$.fragment,T),ce(m.$$.fragment,T),ce(w.$$.fragment,T),ce(P.$$.fragment,T),_=!0)},o(T){ue(s.$$.fragment,T),ue(x.$$.fragment,T),ue(m.$$.fragment,T),ue(w.$$.fragment,T),ue(P.$$.fragment,T),_=!1},d(T){T&&I(e),pe(s),pe(x),pe(m),pe(w),pe(P),S=!1,Ne(D)}}}function Lt(l,e,t){let r,a,o;return G(l,fe,i=>t(0,r=i)),G(l,ke,i=>t(1,a=i)),G(l,Be,i=>t(2,o=i)),[r,a,o,()=>K(fe,r=!0,r),()=>K(ke,a=!0,a)]}class Vt extends re{constructor(e){super(),le(this,e,Lt,Dt,oe,{})}}export{Vt as default};
diff --git a/static/_app/immutable/start-1d6beeeb.js b/static/_app/immutable/start-1d6beeeb.js
new file mode 100644
index 0000000000000000000000000000000000000000..dcd012ae0238efd15f345c37e96564368e90ec86
--- /dev/null
+++ b/static/_app/immutable/start-1d6beeeb.js
@@ -0,0 +1 @@
+import{S as Ye,i as Ge,s as Me,e as Fe,c as Xe,a as He,d as D,b as me,f as K,g as V,t as Ze,h as Qe,j as et,k as tt,l as P,m as nt,n as Y,o as C,p as G,q as T,r as st,u as rt,v as ye,w as z,x as ne,y as q,z as se,A as re,B as J,C as ie,D as Ce}from"./chunks/index-bcf2726a.js";import{s as it,w as ce,a as at}from"./chunks/paths-d3bcbd10.js";function ot(s){let e,t,i;const l=[s[1]||{}];var c=s[0][0];function f(n){let r={};for(let a=0;a<l.length;a+=1)r=ie(r,l[a]);return{props:r}}return c&&(e=new c(f())),{c(){e&&z(e.$$.fragment),t=P()},l(n){e&&ne(e.$$.fragment,n),t=P()},m(n,r){e&&q(e,n,r),V(n,t,r),i=!0},p(n,r){const a=r&2?se(l,[re(n[1]||{})]):{};if(c!==(c=n[0][0])){if(e){Y();const d=e;C(d.$$.fragment,1,0,()=>{J(d,1)}),G()}c?(e=new c(f()),z(e.$$.fragment),T(e.$$.fragment,1),q(e,t.parentNode,t)):e=null}else c&&e.$set(a)},i(n){i||(e&&T(e.$$.fragment,n),i=!0)},o(n){e&&C(e.$$.fragment,n),i=!1},d(n){n&&D(t),e&&J(e,n)}}}function ct(s){let e,t,i;const l=[s[1]||{}];var c=s[0][0];function f(n){let r={$$slots:{default:[dt]},$$scope:{ctx:n}};for(let a=0;a<l.length;a+=1)r=ie(r,l[a]);return{props:r}}return c&&(e=new c(f(s))),{c(){e&&z(e.$$.fragment),t=P()},l(n){e&&ne(e.$$.fragment,n),t=P()},m(n,r){e&&q(e,n,r),V(n,t,r),i=!0},p(n,r){const a=r&2?se(l,[re(n[1]||{})]):{};if(r&525&&(a.$$scope={dirty:r,ctx:n}),c!==(c=n[0][0])){if(e){Y();const d=e;C(d.$$.fragment,1,0,()=>{J(d,1)}),G()}c?(e=new c(f(n)),z(e.$$.fragment),T(e.$$.fragment,1),q(e,t.parentNode,t)):e=null}else c&&e.$set(a)},i(n){i||(e&&T(e.$$.fragment,n),i=!0)},o(n){e&&C(e.$$.fragment,n),i=!1},d(n){n&&D(t),e&&J(e,n)}}}function lt(s){let e,t,i;const l=[s[2]||{}];var c=s[0][1];function f(n){let r={};for(let a=0;a<l.length;a+=1)r=ie(r,l[a]);return{props:r}}return c&&(e=new c(f())),{c(){e&&z(e.$$.fragment),t=P()},l(n){e&&ne(e.$$.fragment,n),t=P()},m(n,r){e&&q(e,n,r),V(n,t,r),i=!0},p(n,r){const a=r&4?se(l,[re(n[2]||{})]):{};if(c!==(c=n[0][1])){if(e){Y();const d=e;C(d.$$.fragment,1,0,()=>{J(d,1)}),G()}c?(e=new c(f()),z(e.$$.fragment),T(e.$$.fragment,1),q(e,t.parentNode,t)):e=null}else c&&e.$set(a)},i(n){i||(e&&T(e.$$.fragment,n),i=!0)},o(n){e&&C(e.$$.fragment,n),i=!1},d(n){n&&D(t),e&&J(e,n)}}}function ft(s){let e,t,i;const l=[s[2]||{}];var c=s[0][1];function f(n){let r={$$slots:{default:[ut]},$$scope:{ctx:n}};for(let a=0;a<l.length;a+=1)r=ie(r,l[a]);return{props:r}}return c&&(e=new c(f(s))),{c(){e&&z(e.$$.fragment),t=P()},l(n){e&&ne(e.$$.fragment,n),t=P()},m(n,r){e&&q(e,n,r),V(n,t,r),i=!0},p(n,r){const a=r&4?se(l,[re(n[2]||{})]):{};if(r&521&&(a.$$scope={dirty:r,ctx:n}),c!==(c=n[0][1])){if(e){Y();const d=e;C(d.$$.fragment,1,0,()=>{J(d,1)}),G()}c?(e=new c(f(n)),z(e.$$.fragment),T(e.$$.fragment,1),q(e,t.parentNode,t)):e=null}else c&&e.$set(a)},i(n){i||(e&&T(e.$$.fragment,n),i=!0)},o(n){e&&C(e.$$.fragment,n),i=!1},d(n){n&&D(t),e&&J(e,n)}}}function ut(s){let e,t,i;const l=[s[3]||{}];var c=s[0][2];function f(n){let r={};for(let a=0;a<l.length;a+=1)r=ie(r,l[a]);return{props:r}}return c&&(e=new c(f())),{c(){e&&z(e.$$.fragment),t=P()},l(n){e&&ne(e.$$.fragment,n),t=P()},m(n,r){e&&q(e,n,r),V(n,t,r),i=!0},p(n,r){const a=r&8?se(l,[re(n[3]||{})]):{};if(c!==(c=n[0][2])){if(e){Y();const d=e;C(d.$$.fragment,1,0,()=>{J(d,1)}),G()}c?(e=new c(f()),z(e.$$.fragment),T(e.$$.fragment,1),q(e,t.parentNode,t)):e=null}else c&&e.$set(a)},i(n){i||(e&&T(e.$$.fragment,n),i=!0)},o(n){e&&C(e.$$.fragment,n),i=!1},d(n){n&&D(t),e&&J(e,n)}}}function dt(s){let e,t,i,l;const c=[ft,lt],f=[];function n(r,a){return r[0][2]?0:1}return e=n(s),t=f[e]=c[e](s),{c(){t.c(),i=P()},l(r){t.l(r),i=P()},m(r,a){f[e].m(r,a),V(r,i,a),l=!0},p(r,a){let d=e;e=n(r),e===d?f[e].p(r,a):(Y(),C(f[d],1,1,()=>{f[d]=null}),G(),t=f[e],t?t.p(r,a):(t=f[e]=c[e](r),t.c()),T(t,1),t.m(i.parentNode,i))},i(r){l||(T(t),l=!0)},o(r){C(t),l=!1},d(r){f[e].d(r),r&&D(i)}}}function Te(s){let e,t=s[5]&&je(s);return{c(){e=Fe("div"),t&&t.c(),this.h()},l(i){e=Xe(i,"DIV",{id:!0,"aria-live":!0,"aria-atomic":!0,style:!0});var l=He(e);t&&t.l(l),l.forEach(D),this.h()},h(){me(e,"id","svelte-announcer"),me(e,"aria-live","assertive"),me(e,"aria-atomic","true"),K(e,"position","absolute"),K(e,"left","0"),K(e,"top","0"),K(e,"clip","rect(0 0 0 0)"),K(e,"clip-path","inset(50%)"),K(e,"overflow","hidden"),K(e,"white-space","nowrap"),K(e,"width","1px"),K(e,"height","1px")},m(i,l){V(i,e,l),t&&t.m(e,null)},p(i,l){i[5]?t?t.p(i,l):(t=je(i),t.c(),t.m(e,null)):t&&(t.d(1),t=null)},d(i){i&&D(e),t&&t.d()}}}function je(s){let e;return{c(){e=Ze(s[6])},l(t){e=Qe(t,s[6])},m(t,i){V(t,e,i)},p(t,i){i&64&&et(e,t[6])},d(t){t&&D(e)}}}function pt(s){let e,t,i,l,c;const f=[ct,ot],n=[];function r(d,L){return d[0][1]?0:1}e=r(s),t=n[e]=f[e](s);let a=s[4]&&Te(s);return{c(){t.c(),i=tt(),a&&a.c(),l=P()},l(d){t.l(d),i=nt(d),a&&a.l(d),l=P()},m(d,L){n[e].m(d,L),V(d,i,L),a&&a.m(d,L),V(d,l,L),c=!0},p(d,[L]){let E=e;e=r(d),e===E?n[e].p(d,L):(Y(),C(n[E],1,1,()=>{n[E]=null}),G(),t=n[e],t?t.p(d,L):(t=n[e]=f[e](d),t.c()),T(t,1),t.m(i.parentNode,i)),d[4]?a?a.p(d,L):(a=Te(d),a.c(),a.m(l.parentNode,l)):a&&(a.d(1),a=null)},i(d){c||(T(t),c=!0)},o(d){C(t),c=!1},d(d){n[e].d(d),d&&D(i),a&&a.d(d),d&&D(l)}}}function ht(s,e,t){let{stores:i}=e,{page:l}=e,{components:c}=e,{props_0:f=null}=e,{props_1:n=null}=e,{props_2:r=null}=e;st("__svelte__",i),rt(i.page.notify);let a=!1,d=!1,L=null;return ye(()=>{const E=i.page.subscribe(()=>{a&&(t(5,d=!0),t(6,L=document.title||"untitled page"))});return t(4,a=!0),E}),s.$$set=E=>{"stores"in E&&t(7,i=E.stores),"page"in E&&t(8,l=E.page),"components"in E&&t(0,c=E.components),"props_0"in E&&t(1,f=E.props_0),"props_1"in E&&t(2,n=E.props_1),"props_2"in E&&t(3,r=E.props_2)},s.$$.update=()=>{s.$$.dirty&384&&i.page.set(l)},[c,f,n,r,a,d,L,i,l]}class _t extends Ye{constructor(e){super(),Ge(this,e,ht,pt,Me,{stores:7,page:8,components:0,props_0:1,props_1:2,props_2:3})}}const mt="modulepreload",Ie={},gt="/static/_app/immutable/",ge=function(e,t){return!t||t.length===0?e():Promise.all(t.map(i=>{if(i=`${gt}${i}`,i in Ie)return;Ie[i]=!0;const l=i.endsWith(".css"),c=l?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${i}"]${c}`))return;const f=document.createElement("link");if(f.rel=l?"stylesheet":mt,l||(f.as="script",f.crossOrigin=""),f.href=i,document.head.appendChild(f),l)return new Promise((n,r)=>{f.addEventListener("load",n),f.addEventListener("error",()=>r(new Error(`Unable to preload CSS for ${i}`)))})})).then(()=>e())},wt={},le=[()=>ge(()=>import("./pages/__layout.svelte-f5a1b718.js"),["pages/__layout.svelte-f5a1b718.js","assets/pages/__layout.svelte-b67cf61d.css","chunks/index-bcf2726a.js"]),()=>ge(()=>import("./error.svelte-d9523301.js"),["error.svelte-d9523301.js","chunks/index-bcf2726a.js"]),()=>ge(()=>import("./pages/index.svelte-1f940fb6.js"),["pages/index.svelte-1f940fb6.js","assets/pages/index.svelte-f2b33456.css","chunks/index-bcf2726a.js","chunks/paths-d3bcbd10.js"])],bt={"":[[0,2],[1]]};function yt(s){s.client}function De(s){return s instanceof Error||s&&s.name&&s.message?s:new Error(JSON.stringify(s))}function Ve(s){if(s.fallthrough)throw new Error("fallthrough is no longer supported. Use matchers instead: https://kit.svelte.dev/docs/routing#advanced-routing-matching");if("maxage"in s)throw new Error("maxage should be replaced with cache: { maxage }");const e=s.status&&s.status>=400&&s.status<=599&&!s.redirect;if(s.error||e){const t=s.status;if(!s.error&&e)return{status:t||500,error:new Error};const i=typeof s.error=="string"?new Error(s.error):s.error;return i instanceof Error?!t||t<400||t>599?(console.warn('"error" returned from load() without a valid status code \u2014 defaulting to 500'),{status:500,error:i}):{status:t,error:i}:{status:500,error:new Error(`"error" property returned from load() must be a string or instance of Error, received type "${typeof i}"`)}}if(s.redirect){if(!s.status||Math.floor(s.status/100)!==3)throw new Error('"redirect" property returned from load() must be accompanied by a 3xx status code');if(typeof s.redirect!="string")throw new Error('"redirect" property returned from load() must be a string')}if(s.dependencies&&(!Array.isArray(s.dependencies)||s.dependencies.some(t=>typeof t!="string")))throw new Error('"dependencies" property returned from load() must be of type string[]');if(s.context)throw new Error('You are returning "context" from a load function. "context" was renamed to "stuff", please adjust your code accordingly.');return s}function vt(s,e){return s==="/"||e==="ignore"?s:e==="never"?s.endsWith("/")?s.slice(0,-1):s:e==="always"&&!s.endsWith("/")?s+"/":s}class $t extends URL{get hash(){throw new Error("url.hash is inaccessible from load. Consider accessing hash from the page store within the script tag of your component.")}}function ze(s){let e=s.baseURI;if(!e){const t=s.getElementsByTagName("base");e=t.length?t[0].href:s.URL}return e}function ve(){return{x:pageXOffset,y:pageYOffset}}function qe(s){return s.composedPath().find(t=>t instanceof Node&&t.nodeName.toUpperCase()==="A")}function Je(s){return s instanceof SVGAElement?new URL(s.href.baseVal,document.baseURI):new URL(s.href)}function Ke(s){const e=ce(s);let t=!0;function i(){t=!0,e.update(f=>f)}function l(f){t=!1,e.set(f)}function c(f){let n;return e.subscribe(r=>{(n===void 0||t&&r!==n)&&f(n=r)})}return{notify:i,set:l,subscribe:c}}function kt(){const{set:s,subscribe:e}=ce(!1),t="1685809076710";let i;async function l(){clearTimeout(i);const f=await fetch(`${at}/_app/version.json`,{headers:{pragma:"no-cache","cache-control":"no-cache"}});if(f.ok){const{version:n}=await f.json(),r=n!==t;return r&&(s(!0),clearTimeout(i)),r}else throw new Error(`Version check failed: ${f.status}`)}return{subscribe:e,check:l}}function Et(s){let e=5381,t=s.length;if(typeof s=="string")for(;t;)e=e*33^s.charCodeAt(--t);else for(;t;)e=e*33^s[--t];return(e>>>0).toString(36)}const $e=window.fetch;function Rt(s,e){let i=`script[sveltekit\\:data-type="data"][sveltekit\\:data-url=${JSON.stringify(typeof s=="string"?s:s.url)}]`;e&&typeof e.body=="string"&&(i+=`[sveltekit\\:data-body="${Et(e.body)}"]`);const l=document.querySelector(i);if(l&&l.textContent){const{body:c,...f}=JSON.parse(l.textContent);return Promise.resolve(new Response(c,f))}return $e(s,e)}const Lt=/^(\.\.\.)?(\w+)(?:=(\w+))?$/;function St(s){const e=[],t=[];let i=!0;return{pattern:s===""?/^\/$/:new RegExp(`^${decodeURIComponent(s).split(/(?:@[a-zA-Z0-9_-]+)?(?:\/|$)/).map((c,f,n)=>{const r=/^\[\.\.\.(\w+)(?:=(\w+))?\]$/.exec(c);if(r)return e.push(r[1]),t.push(r[2]),"(?:/(.*))?";const a=f===n.length-1;return c&&"/"+c.split(/\[(.+?)\]/).map((d,L)=>{if(L%2){const[,E,X,M]=Lt.exec(d);return e.push(X),t.push(M),E?"(.*?)":"([^/]+?)"}return a&&d.includes(".")&&(i=!1),d.normalize().replace(/%5[Bb]/g,"[").replace(/%5[Dd]/g,"]").replace(/#/g,"%23").replace(/\?/g,"%3F").replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}).join("")}).join("")}${i?"/?":""}$`),names:e,types:t}}function Ut(s,e,t,i){const l={};for(let c=0;c<e.length;c+=1){const f=e[c],n=t[c],r=s[c+1]||"";if(n){const a=i[n];if(!a)throw new Error(`Missing "${n}" param matcher`);if(!a(r))return}l[f]=r}return l}function At(s,e,t){return Object.entries(e).map(([l,[c,f,n]])=>{const{pattern:r,names:a,types:d}=St(l);return{id:l,exec:L=>{const E=r.exec(L);if(E)return Ut(E,a,d,t)},a:c.map(L=>s[L]),b:f.map(L=>s[L]),has_shadow:!!n}})}const We="sveltekit:scroll",B="sveltekit:index",we=At(le,bt,wt),Nt=le[0](),Ot=le[1](),Be={};let te={};try{te=JSON.parse(sessionStorage[We])}catch{}function be(s){te[s]=ve()}function xt({target:s,session:e,base:t,trailing_slash:i}){var xe;const l=new Map,c=[],f={url:Ke({}),page:Ke({}),navigating:ce(null),session:ce(e),updated:kt()},n={id:null,promise:null},r={before_navigate:[],after_navigate:[]};let a={branch:[],error:null,session_id:0,stuff:Be,url:null},d=!1,L=!0,E=!1,X=1,M=null,ke,Ee,Re=!1;f.session.subscribe(async o=>{Ee=o,Re&&(X+=1,pe(new URL(location.href),[],!0))}),Re=!0;let F=!0,j=(xe=history.state)==null?void 0:xe[B];j||(j=Date.now(),history.replaceState({...history.state,[B]:j},"",location.href));const fe=te[j];fe&&(history.scrollRestoration="manual",scrollTo(fe.x,fe.y));let ue=!1,de,Le;async function Se(o,{noscroll:p=!1,replaceState:w=!1,keepfocus:u=!1,state:h={}},b){if(typeof o=="string"&&(o=new URL(o,ze(document))),F)return _e({url:o,scroll:p?ve():null,keepfocus:u,redirect_chain:b,details:{state:h,replaceState:w},accepted:()=>{},blocked:()=>{}});await Q(o)}async function Ue(o){const p=Oe(o);if(!p)throw new Error("Attempted to prefetch a URL that does not belong to this app");return n.promise=Ne(p,!1),n.id=p.id,n.promise}async function pe(o,p,w,u,h){var R,S,N;const b=Oe(o),v=Le={};let _=b&&await Ne(b,w);if(!_&&o.origin===location.origin&&o.pathname===location.pathname&&(_=await Z({status:404,error:new Error(`Not found: ${o.pathname}`),url:o,routeId:null})),!_)return await Q(o),!1;if(Le!==v)return!1;if(c.length=0,_.redirect)if(p.length>10||p.includes(o.pathname))_=await Z({status:500,error:new Error("Redirect loop"),url:o,routeId:null});else return F?Se(new URL(_.redirect,o).href,{},[...p,o.pathname]):await Q(new URL(_.redirect,location.href)),!1;else((S=(R=_.props)==null?void 0:R.page)==null?void 0:S.status)>=400&&await f.updated.check()&&await Q(o);if(E=!0,u&&u.details){const{details:$}=u,y=$.replaceState?0:1;$.state[B]=j+=y,history[$.replaceState?"replaceState":"pushState"]($.state,"",o)}if(d?(a=_.state,_.props.page&&(_.props.page.url=o),ke.$set(_.props)):Ae(_),u){const{scroll:$,keepfocus:y}=u;if(!y){const U=document.body,g=U.getAttribute("tabindex");(N=getSelection())==null||N.removeAllRanges(),U.tabIndex=-1,U.focus({preventScroll:!0}),g!==null?U.setAttribute("tabindex",g):U.removeAttribute("tabindex")}if(await Ce(),L){const U=o.hash&&document.getElementById(o.hash.slice(1));$?scrollTo($.x,$.y):U?U.scrollIntoView():scrollTo(0,0)}}else await Ce();n.promise=null,n.id=null,L=!0,_.props.page&&(de=_.props.page);const m=_.state.branch[_.state.branch.length-1];F=(m==null?void 0:m.module.router)!==!1,h&&h(),E=!1}function Ae(o){a=o.state;const p=document.querySelector("style[data-sveltekit]");if(p&&p.remove(),de=o.props.page,ke=new _t({target:s,props:{...o.props,stores:f},hydrate:!0}),F){const w={from:null,to:new URL(location.href)};r.after_navigate.forEach(u=>u(w))}d=!0}async function he({url:o,params:p,stuff:w,branch:u,status:h,error:b,routeId:v}){var y,U;const _=u.filter(Boolean),m=_.find(g=>{var O;return(O=g.loaded)==null?void 0:O.redirect}),R={redirect:(y=m==null?void 0:m.loaded)==null?void 0:y.redirect,state:{url:o,params:p,branch:u,error:b,stuff:w,session_id:X},props:{components:_.map(g=>g.module.default)}};for(let g=0;g<_.length;g+=1){const O=_[g].loaded;R.props[`props_${g}`]=O?await O.props:null}if(!a.url||o.href!==a.url.href||a.error!==b||a.stuff!==w){R.props.page={error:b,params:p,routeId:v,status:h,stuff:w,url:o};const g=(O,k)=>{Object.defineProperty(R.props.page,O,{get:()=>{throw new Error(`$page.${O} has been replaced by $page.url.${k}`)}})};g("origin","origin"),g("path","pathname"),g("query","searchParams")}const N=_[_.length-1],$=(U=N==null?void 0:N.loaded)==null?void 0:U.cache;if($){const g=o.pathname+o.search;let O=!1;const k=()=>{l.get(g)===R&&l.delete(g),x(),clearTimeout(A)},A=setTimeout(k,$.maxage*1e3),x=f.session.subscribe(()=>{O&&k()});O=!0,l.set(g,R)}return R}async function H({status:o,error:p,module:w,url:u,params:h,stuff:b,props:v,routeId:_}){const m={module:w,uses:{params:new Set,url:!1,session:!1,stuff:!1,dependencies:new Set},loaded:null,stuff:b};function R(y){const{href:U}=new URL(y,u);m.uses.dependencies.add(U)}v&&m.uses.dependencies.add(u.href);const S={};for(const y in h)Object.defineProperty(S,y,{get(){return m.uses.params.add(y),h[y]},enumerable:!0});const N=Ee,$=new $t(u);if(w.load){const y={routeId:_,params:S,props:v||{},get url(){return m.uses.url=!0,$},get session(){return m.uses.session=!0,N},get stuff(){return m.uses.stuff=!0,{...b}},async fetch(g,O){let k;typeof g=="string"?k=g:(k=g.url,O={body:g.method==="GET"||g.method==="HEAD"?void 0:await g.blob(),cache:g.cache,credentials:g.credentials,headers:g.headers,integrity:g.integrity,keepalive:g.keepalive,method:g.method,mode:g.mode,redirect:g.redirect,referrer:g.referrer,referrerPolicy:g.referrerPolicy,signal:g.signal,...O});const A=new URL(k,u).href;return R(A),d?$e(A,O):Rt(k,O)},status:o!=null?o:null,error:p!=null?p:null};let U;if(U=await w.load.call(null,y),!U)throw new Error("load function must return a value");m.loaded=Ve(U),m.loaded.stuff&&(m.stuff=m.loaded.stuff),m.loaded.dependencies&&m.loaded.dependencies.forEach(R)}else v&&(m.loaded=Ve({props:v}));return m}async function Ne({id:o,url:p,params:w,route:u},h){var U,g,O;if(n.id===o&&n.promise)return n.promise;if(!h){const k=l.get(o);if(k)return k}const{a:b,b:v,has_shadow:_}=u,m=a.url&&{url:o!==a.url.pathname+a.url.search,params:Object.keys(w).filter(k=>a.params[k]!==w[k]),session:X!==a.session_id};let R=[],S=Be,N=!1,$=200,y=null;b.forEach(k=>k().catch(()=>{}));e:for(let k=0;k<b.length;k+=1){let A;try{if(!b[k])continue;const x=await b[k](),I=a.branch[k];if(!I||x!==I.module||m.url&&I.uses.url||m.params.some(W=>I.uses.params.has(W))||m.session&&I.uses.session||Array.from(I.uses.dependencies).some(W=>c.some(oe=>oe(W)))||N&&I.uses.stuff){let W={};const oe=_&&k===b.length-1;if(oe){const ee=await $e(`${p.pathname}${p.pathname.endsWith("/")?"":"/"}__data.json${p.search}`,{headers:{"x-sveltekit-load":"true"}});if(ee.ok){const Pe=ee.headers.get("x-sveltekit-location");if(Pe)return{redirect:Pe,props:{},state:a};W=ee.status===204?{}:await ee.json()}else $=ee.status,y=new Error("Failed to load data")}if(y||(A=await H({module:x,url:p,params:w,props:W,stuff:S,routeId:u.id})),A&&(oe&&(A.uses.url=!0),A.loaded)){if(A.loaded.error&&($=A.loaded.status,y=A.loaded.error),A.loaded.redirect)return{redirect:A.loaded.redirect,props:{},state:a};A.loaded.stuff&&(N=!0)}}else A=I}catch(x){$=500,y=De(x)}if(y){for(;k--;)if(v[k]){let x,I,ae=k;for(;!(I=R[ae]);)ae-=1;try{if(x=await H({status:$,error:y,module:await v[k](),url:p,params:w,stuff:I.stuff,routeId:u.id}),(U=x==null?void 0:x.loaded)!=null&&U.error)continue;(g=x==null?void 0:x.loaded)!=null&&g.stuff&&(S={...S,...x.loaded.stuff}),R=R.slice(0,ae+1).concat(x);break e}catch{continue}}return await Z({status:$,error:y,url:p,routeId:u.id})}else(O=A==null?void 0:A.loaded)!=null&&O.stuff&&(S={...S,...A.loaded.stuff}),R.push(A)}return await he({url:p,params:w,stuff:S,branch:R,status:$,error:y,routeId:u.id})}async function Z({status:o,error:p,url:w,routeId:u}){var _,m;const h={},b=await H({module:await Nt,url:w,params:h,stuff:{},routeId:u}),v=await H({status:o,error:p,module:await Ot,url:w,params:h,stuff:b&&b.loaded&&b.loaded.stuff||{},routeId:u});return await he({url:w,params:h,stuff:{...(_=b==null?void 0:b.loaded)==null?void 0:_.stuff,...(m=v==null?void 0:v.loaded)==null?void 0:m.stuff},branch:[b,v],status:o,error:p,routeId:u})}function Oe(o){if(o.origin!==location.origin||!o.pathname.startsWith(t))return;const p=decodeURI(o.pathname.slice(t.length)||"/");for(const w of we){const u=w.exec(p);if(u)return{id:o.pathname+o.search,route:w,params:u,url:o}}}async function _e({url:o,scroll:p,keepfocus:w,redirect_chain:u,details:h,accepted:b,blocked:v}){const _=a.url;let m=!1;const R={from:_,to:o,cancel:()=>m=!0};if(r.before_navigate.forEach($=>$(R)),m){v();return}const S=vt(o.pathname,i),N=new URL(o.origin+S+o.search+o.hash);be(j),b(),d&&f.navigating.set({from:a.url,to:N}),await pe(N,u,!1,{scroll:p,keepfocus:w,details:h},()=>{const $={from:_,to:N};r.after_navigate.forEach(y=>y($)),f.navigating.set(null)})}function Q(o){return location.href=o.href,new Promise(()=>{})}return{after_navigate:o=>{ye(()=>(r.after_navigate.push(o),()=>{const p=r.after_navigate.indexOf(o);r.after_navigate.splice(p,1)}))},before_navigate:o=>{ye(()=>(r.before_navigate.push(o),()=>{const p=r.before_navigate.indexOf(o);r.before_navigate.splice(p,1)}))},disable_scroll_handling:()=>{(E||!d)&&(L=!1)},goto:(o,p={})=>Se(o,p,[]),invalidate:o=>{if(typeof o=="function")c.push(o);else{const{href:p}=new URL(o,location.href);c.push(w=>w===p)}return M||(M=Promise.resolve().then(async()=>{await pe(new URL(location.href),[],!0),M=null})),M},prefetch:async o=>{const p=new URL(o,ze(document));await Ue(p)},prefetch_routes:async o=>{const w=(o?we.filter(u=>o.some(h=>u.exec(h))):we).map(u=>Promise.all(u.a.map(h=>h())));await Promise.all(w)},_start_router:()=>{history.scrollRestoration="manual",addEventListener("beforeunload",u=>{let h=!1;const b={from:a.url,to:null,cancel:()=>h=!0};r.before_navigate.forEach(v=>v(b)),h?(u.preventDefault(),u.returnValue=""):history.scrollRestoration="auto"}),addEventListener("visibilitychange",()=>{if(document.visibilityState==="hidden"){be(j);try{sessionStorage[We]=JSON.stringify(te)}catch{}}});const o=u=>{const h=qe(u);h&&h.href&&h.hasAttribute("sveltekit:prefetch")&&Ue(Je(h))};let p;const w=u=>{clearTimeout(p),p=setTimeout(()=>{var h;(h=u.target)==null||h.dispatchEvent(new CustomEvent("sveltekit:trigger_prefetch",{bubbles:!0}))},20)};addEventListener("touchstart",o),addEventListener("mousemove",w),addEventListener("sveltekit:trigger_prefetch",o),addEventListener("click",u=>{if(!F||u.button||u.which!==1||u.metaKey||u.ctrlKey||u.shiftKey||u.altKey||u.defaultPrevented)return;const h=qe(u);if(!h||!h.href)return;const b=h instanceof SVGAElement,v=Je(h);if(!b&&v.origin==="null")return;const _=(h.getAttribute("rel")||"").split(/\s+/);if(h.hasAttribute("download")||_.includes("external")||h.hasAttribute("sveltekit:reload")||(b?h.target.baseVal:h.target))return;const[m,R]=v.href.split("#");if(R!==void 0&&m===location.href.split("#")[0]){ue=!0,be(j),f.page.set({...de,url:v}),f.page.notify();return}_e({url:v,scroll:h.hasAttribute("sveltekit:noscroll")?ve():null,keepfocus:!1,redirect_chain:[],details:{state:{},replaceState:v.href===location.href},accepted:()=>u.preventDefault(),blocked:()=>u.preventDefault()})}),addEventListener("popstate",u=>{if(u.state&&F){if(u.state[B]===j)return;_e({url:new URL(location.href),scroll:te[u.state[B]],keepfocus:!1,redirect_chain:[],details:null,accepted:()=>{j=u.state[B]},blocked:()=>{const h=j-u.state[B];history.go(h)}})}}),addEventListener("hashchange",()=>{ue&&(ue=!1,history.replaceState({...history.state,[B]:++j},"",location.href))})},_hydrate:async({status:o,error:p,nodes:w,params:u,routeId:h})=>{const b=new URL(location.href),v=[];let _={},m,R;try{for(let S=0;S<w.length;S+=1){const N=S===w.length-1;let $;if(N){const U=document.querySelector('script[sveltekit\\:data-type="props"]');U&&($=JSON.parse(U.textContent))}const y=await H({module:await le[w[S]](),url:b,params:u,stuff:_,status:N?o:void 0,error:N?p:void 0,props:$,routeId:h});if($&&(y.uses.dependencies.add(b.href),y.uses.url=!0),v.push(y),y&&y.loaded)if(y.loaded.error){if(p)throw y.loaded.error;R={status:y.loaded.status,error:y.loaded.error,url:b,routeId:h}}else y.loaded.stuff&&(_={..._,...y.loaded.stuff})}m=R?await Z(R):await he({url:b,params:u,stuff:_,branch:v,status:o,error:p,routeId:h})}catch(S){if(p)throw S;m=await Z({status:500,error:De(S),url:b,routeId:h})}m.redirect&&await Q(new URL(m.redirect,location.href)),Ae(m)}}}async function Tt({paths:s,target:e,session:t,route:i,spa:l,trailing_slash:c,hydrate:f}){const n=xt({target:e,session:t,base:s.base,trailing_slash:c});yt({client:n}),it(s),f&&await n._hydrate(f),i&&(l&&n.goto(location.href,{replaceState:!0}),n._start_router()),dispatchEvent(new CustomEvent("sveltekit:start"))}export{Tt as start};
diff --git a/static/_app/version.json b/static/_app/version.json
index 6ec5fd3b769ac3f336b002eba23e9391d7a0497d..9628b89623cf35cfd9037564c255ffc0d64cfd70 100644
--- a/static/_app/version.json
+++ b/static/_app/version.json
@@ -1 +1 @@
-{"version":"1685758204608"}
\ No newline at end of file
+{"version":"1685809076710"}
\ No newline at end of file
diff --git a/static/index.html b/static/index.html
index c902601fe971f267adf651ab5464cdb6d770f962..9b731799bc677509f03b9466bae29e1d0016eefa 100644
--- a/static/index.html
+++ b/static/index.html
@@ -8,17 +8,20 @@
 		<meta http-equiv="content-security-policy" content="">
 	<link rel="stylesheet" href="/static/_app/immutable/assets/pages/__layout.svelte-b67cf61d.css">
 	<link rel="stylesheet" href="/static/_app/immutable/assets/pages/index.svelte-f2b33456.css">
-	<link rel="modulepreload" href="/static/_app/immutable/start-b4d3a4a1.js">
+	<link rel="modulepreload" href="/static/_app/immutable/start-1d6beeeb.js">
 	<link rel="modulepreload" href="/static/_app/immutable/chunks/index-bcf2726a.js">
 	<link rel="modulepreload" href="/static/_app/immutable/chunks/paths-d3bcbd10.js">
 	<link rel="modulepreload" href="/static/_app/immutable/pages/__layout.svelte-f5a1b718.js">
-	<link rel="modulepreload" href="/static/_app/immutable/pages/index.svelte-e78f0615.js">
+	<link rel="modulepreload" href="/static/_app/immutable/pages/index.svelte-1f940fb6.js">
 	</head>
 	<body class="">
 		
 
 
-<div class="max-w-screen-md mx-auto px-3 py-5 relative z-0"><article class="prose"><h1>Drawing to Map</h1></article>
+<div class="max-w-screen-md mx-auto px-3 py-5 relative z-0"><article class="prose"><h1>Drawing to Map</h1>
+		<p>This space is for the ControlNet model <a href="https://github.com/RubenGres/Drawing2Map" target="_blank"><span>Drawing2Map</span></a></p></article>
+
+
 	<form><h4 class="font-bold mt-6 mb-2 leading-6 my-3">Brush Type</h4>
 	<div class="colors svelte-1oy4poo" name="colors"><div class="snap-always snap-start"><input name="color"  type="radio" id="color-0" value="0" class="svelte-1oy4poo">
 				<label for="color-0" class="svelte-1oy4poo"><svg width="20" height="20" viewBox="0 0 20 20" class="svelte-1oy4poo"><rect x="0" y="0" width="20" height="20" fill="rgb(219,14,154)"></rect></svg>
@@ -117,7 +120,7 @@
 	<select name="presets"  class="svelte-7to72y"><option disabled selected value="preset">preset</option><option value="High resolution satellite image, 4K, ultra detailed">Realistic</option>`<option value="Colorful lego bricks">Lego brick</option>`<option value="Black and white paper pencil drawing">Pencil</option>`<option value="Oil on canvas painting">Painting</option>`</select>
 
 	<h4 class="font-bold mt-6 mb-2 my-6 leading-6">Random Seed</h4>
-	<input type="Number" name="seed" placeholder="Integer Seed"  class="svelte-7to72y" value="276955136">
+	<input type="Number" name="seed" placeholder="Integer Seed"  class="svelte-7to72y" value="398460928">
 	<button  class="svelte-7to72y">Random
 	</button>
 	<h4 class="font-bold mt-6 mb-2 my-6 leading-6">Sample Steps</h4>
@@ -127,10 +130,10 @@
 </div>
 
 
-		<script type="module" data-sveltekit-hydrate="xt24ky">
-		import { start } from "/static/_app/immutable/start-b4d3a4a1.js";
+		<script type="module" data-sveltekit-hydrate="1meyvr0">
+		import { start } from "/static/_app/immutable/start-1d6beeeb.js";
 		start({
-			target: document.querySelector('[data-sveltekit-hydrate="xt24ky"]').parentNode,
+			target: document.querySelector('[data-sveltekit-hydrate="1meyvr0"]').parentNode,
 			paths: {"base":"/static","assets":"/static"},
 			session: {},
 			route: true,