diff --git a/app/handle-event.go b/app/handle-event.go index f6b5275..bcffaee 100644 --- a/app/handle-event.go +++ b/app/handle-event.go @@ -18,6 +18,7 @@ import ( ) func (l *Listener) HandleEvent(msg []byte) (err error) { + log.D.F("handling event: %s", msg) // decode the envelope env := eventenvelope.NewSubmission() if msg, err = env.Unmarshal(msg); chk.E(err) { diff --git a/app/handle-message.go b/app/handle-message.go index ba516a2..e314058 100644 --- a/app/handle-message.go +++ b/app/handle-message.go @@ -19,64 +19,78 @@ func (l *Listener) HandleMessage(msg []byte, remote string) { if len(msgPreview) > 150 { msgPreview = msgPreview[:150] + "..." } - log.D.F("%s processing message (len=%d): %s", remote, len(msg), msgPreview) - + // log.D.F("%s processing message (len=%d): %s", remote, len(msg), msgPreview) + l.msgCount++ var err error var t string var rem []byte - + // Attempt to identify the envelope type if t, rem, err = envelopes.Identify(msg); err != nil { - log.E.F("%s envelope identification FAILED (len=%d): %v", remote, len(msg), err) - log.D.F("%s malformed message content: %q", remote, msgPreview) + log.E.F( + "%s envelope identification FAILED (len=%d): %v", remote, len(msg), + err, + ) + log.T.F("%s malformed message content: %q", remote, msgPreview) chk.E(err) // Send error notice to client if noticeErr := noticeenvelope.NewFrom("malformed message: " + err.Error()).Write(l); noticeErr != nil { - log.E.F("%s failed to send malformed message notice: %v", remote, noticeErr) + log.E.F( + "%s failed to send malformed message notice: %v", remote, + noticeErr, + ) } return } - - log.D.F("%s identified envelope type: %s (payload_len=%d)", remote, t, len(rem)) - + + log.T.F( + "%s identified envelope type: %s (payload_len=%d)", remote, t, len(rem), + ) + // Process the identified envelope type switch t { case eventenvelope.L: - log.D.F("%s processing EVENT envelope", remote) + log.T.F("%s processing EVENT envelope", remote) l.eventCount++ err = l.HandleEvent(rem) case reqenvelope.L: - log.D.F("%s processing REQ envelope", remote) + log.T.F("%s processing REQ envelope", remote) l.reqCount++ err = l.HandleReq(rem) case closeenvelope.L: - log.D.F("%s processing CLOSE envelope", remote) + log.T.F("%s processing CLOSE envelope", remote) err = l.HandleClose(rem) case authenvelope.L: - log.D.F("%s processing AUTH envelope", remote) + log.T.F("%s processing AUTH envelope", remote) err = l.HandleAuth(rem) case countenvelope.L: - log.D.F("%s processing COUNT envelope", remote) + log.T.F("%s processing COUNT envelope", remote) err = l.HandleCount(rem) default: err = fmt.Errorf("unknown envelope type %s", t) - log.E.F("%s unknown envelope type: %s (payload: %q)", remote, t, string(rem)) + log.E.F( + "%s unknown envelope type: %s (payload: %q)", remote, t, + string(rem), + ) } - + // Handle any processing errors if err != nil { log.E.F("%s message processing FAILED (type=%s): %v", remote, t, err) - log.D.F("%s error context - original message: %q", remote, msgPreview) - + log.T.F("%s error context - original message: %q", remote, msgPreview) + // Send error notice to client noticeMsg := fmt.Sprintf("%s: %s", t, err.Error()) if noticeErr := noticeenvelope.NewFrom(noticeMsg).Write(l); noticeErr != nil { - log.E.F("%s failed to send error notice after %s processing failure: %v", remote, t, noticeErr) + log.E.F( + "%s failed to send error notice after %s processing failure: %v", + remote, t, noticeErr, + ) return } - log.D.F("%s sent error notice for %s processing failure", remote, t) + log.T.F("%s sent error notice for %s processing failure", remote, t) } else { - log.D.F("%s message processing SUCCESS (type=%s)", remote, t) + log.T.F("%s message processing SUCCESS (type=%s)", remote, t) } } diff --git a/app/handle-req.go b/app/handle-req.go index d04dcc7..3b6ad88 100644 --- a/app/handle-req.go +++ b/app/handle-req.go @@ -29,13 +29,20 @@ import ( ) func (l *Listener) HandleReq(msg []byte) (err error) { - log.D.F("HandleReq: START processing from %s", l.remote) + log.D.F("handling REQ: %s", msg) + log.T.F("HandleReq: START processing from %s", l.remote) // var rem []byte env := reqenvelope.New() if _, err = env.Unmarshal(msg); chk.E(err) { return normalize.Error.Errorf(err.Error()) } - log.D.C(func() string { return fmt.Sprintf("REQ sub=%s filters=%d", env.Subscription, len(*env.Filters)) }) + log.T.C( + func() string { + return fmt.Sprintf( + "REQ sub=%s filters=%d", env.Subscription, len(*env.Filters), + ) + }, + ) // send a challenge to the client to auth if an ACL is active if acl.Registry.Active.Load() != "none" { if err = authenvelope.NewChallengeWith(l.challenge.Load()). @@ -100,9 +107,15 @@ func (l *Listener) HandleReq(msg []byte) (err error) { if f.Until != nil { until = f.Until.Int() } - log.D.C(func() string { - return fmt.Sprintf("REQ %s filter: kinds.len=%d authors.len=%d ids.len=%d d=%q limit=%v since=%v until=%v", env.Subscription, kindsLen, authorsLen, idsLen, dtag, lim, since, until) - }) + log.T.C( + func() string { + return fmt.Sprintf( + "REQ %s filter: kinds.len=%d authors.len=%d ids.len=%d d=%q limit=%v since=%v until=%v", + env.Subscription, kindsLen, authorsLen, idsLen, dtag, + lim, since, until, + ) + }, + ) } if f != nil && pointers.Present(f.Limit) { if *f.Limit == 0 { @@ -229,7 +242,7 @@ privCheck: events = tmp seen := make(map[string]struct{}) for _, ev := range events { - log.D.C( + log.T.C( func() string { return fmt.Sprintf( "REQ %s: sending EVENT id=%s kind=%d", env.Subscription, @@ -256,7 +269,7 @@ privCheck: } // write the EOSE to signal to the client that all events found have been // sent. - log.D.F("sending EOSE to %s", l.remote) + log.T.F("sending EOSE to %s", l.remote) if err = eoseenvelope.NewFrom(env.Subscription). Write(l); chk.E(err) { return @@ -264,7 +277,7 @@ privCheck: // if the query was for just Ids, we know there can't be any more results, // so cancel the subscription. cancel := true - log.D.F( + log.T.F( "REQ %s: computing cancel/subscription; events_sent=%d", env.Subscription, len(events), ) @@ -318,6 +331,6 @@ privCheck: } else { // suppress server-sent CLOSED; client will close subscription if desired } - log.D.F("HandleReq: COMPLETED processing from %s", l.remote) + log.T.F("HandleReq: COMPLETED processing from %s", l.remote) return } diff --git a/app/handle-websocket.go b/app/handle-websocket.go index 8254b1f..ff4444e 100644 --- a/app/handle-websocket.go +++ b/app/handle-websocket.go @@ -244,7 +244,7 @@ func (s *Server) Pinger( pingCancel() case <-ctx.Done(): - log.D.F("pinger context cancelled after %d pings", pingCount) + log.T.F("pinger context cancelled after %d pings", pingCount) return } } diff --git a/app/listener.go b/app/listener.go index 08283ab..ea023e4 100644 --- a/app/listener.go +++ b/app/listener.go @@ -21,9 +21,9 @@ type Listener struct { authedPubkey atomic.Bytes startTime time.Time // Diagnostics: per-connection counters - msgCount int - reqCount int - eventCount int + msgCount int + reqCount int + eventCount int } // Ctx returns the listener's context, but creates a new context for each operation @@ -35,14 +35,16 @@ func (l *Listener) Ctx() context.Context { func (l *Listener) Write(p []byte) (n int, err error) { start := time.Now() msgLen := len(p) - + // Log message attempt with content preview (first 200 chars for diagnostics) preview := string(p) if len(preview) > 200 { preview = preview[:200] + "..." } - log.D.F("ws->%s attempting write: len=%d preview=%q", l.remote, msgLen, preview) - + log.T.F( + "ws->%s attempting write: len=%d preview=%q", l.remote, msgLen, preview, + ) + // Use a separate context with timeout for writes to prevent race conditions // where the main connection context gets cancelled while writing events writeCtx, cancel := context.WithTimeout( @@ -55,37 +57,50 @@ func (l *Listener) Write(p []byte) (n int, err error) { if err = l.conn.Write(writeCtx, websocket.MessageText, p); err != nil { writeDuration := time.Since(writeStart) totalDuration := time.Since(start) - + // Log detailed failure information - log.E.F("ws->%s WRITE FAILED: len=%d duration=%v write_duration=%v error=%v preview=%q", - l.remote, msgLen, totalDuration, writeDuration, err, preview) - + log.E.F( + "ws->%s WRITE FAILED: len=%d duration=%v write_duration=%v error=%v preview=%q", + l.remote, msgLen, totalDuration, writeDuration, err, preview, + ) + // Check if this is a context timeout if writeCtx.Err() != nil { - log.E.F("ws->%s write timeout after %v (limit=%v)", l.remote, writeDuration, DefaultWriteTimeout) + log.E.F( + "ws->%s write timeout after %v (limit=%v)", l.remote, + writeDuration, DefaultWriteTimeout, + ) } - + // Check connection state if l.conn != nil { - log.D.F("ws->%s connection state during failure: remote_addr=%v", l.remote, l.req.RemoteAddr) + log.T.F( + "ws->%s connection state during failure: remote_addr=%v", + l.remote, l.req.RemoteAddr, + ) } - + chk.E(err) // Still call the original error handler return } - + // Log successful write with timing writeDuration := time.Since(writeStart) totalDuration := time.Since(start) n = msgLen - - log.D.F("ws->%s WRITE SUCCESS: len=%d duration=%v write_duration=%v", - l.remote, n, totalDuration, writeDuration) - + + log.T.F( + "ws->%s WRITE SUCCESS: len=%d duration=%v write_duration=%v", + l.remote, n, totalDuration, writeDuration, + ) + // Log slow writes for performance diagnostics if writeDuration > time.Millisecond*100 { - log.D.F("ws->%s SLOW WRITE detected: %v (>100ms) len=%d", l.remote, writeDuration, n) + log.T.F( + "ws->%s SLOW WRITE detected: %v (>100ms) len=%d", l.remote, + writeDuration, n, + ) } - + return } diff --git a/app/web.go b/app/web.go index 71faa29..c85d376 100644 --- a/app/web.go +++ b/app/web.go @@ -16,4 +16,4 @@ func GetReactAppFS() http.FileSystem { panic("Failed to load embedded web app: " + err.Error()) } return http.FS(webDist) -} \ No newline at end of file +} diff --git a/app/web/.gitignore b/app/web/.gitignore index 95bd4c3..f84807d 100644 --- a/app/web/.gitignore +++ b/app/web/.gitignore @@ -1,30 +1,11 @@ -# Dependencies -node_modules -.pnp -.pnp.js - -# Bun -.bunfig.toml -bun.lockb - -# Build directories -build - -# Cache and logs -.cache -.temp -.log -*.log - -# Environment variables -.env -.env.local -.env.development.local -.env.test.local -.env.production.local - -# Editor directories and files -.idea -.vscode -*.swp -*.swo \ No newline at end of file +node_modules/ +dist/ +.vite/ +.tanstack/ +.idea/ +.DS_Store +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +/.idea/ diff --git a/app/web/README.md b/app/web/README.md deleted file mode 100644 index 6226e13..0000000 --- a/app/web/README.md +++ /dev/null @@ -1,89 +0,0 @@ -# Orly Web Application - -This is a React web application that uses Bun for building and bundling, and is automatically embedded into the Go binary when built. - -## Prerequisites - -- [Bun](https://bun.sh/) - JavaScript runtime and toolkit -- Go 1.16+ (for embedding functionality) - -## Development - -There are two ways to develop the web app: - -1) Standalone (recommended for hot reload) -- Start the Go relay with the embedded web UI disabled so the React app can run on its own dev server with HMR. -- Configure the relay via environment variables: - -```bash -# In another shell at repo root -export ORLY_WEB_DISABLE=true -# Optional: if you want same-origin URLs, you can set a proxy target and access the relay on the same port -# export ORLY_WEB_DEV_PROXY_URL=http://localhost:5173 - -# Start the relay as usual -go run . -``` - -- Then start the React dev server: - -```bash -cd app/web -bun install -bun dev -``` - -When ORLY_WEB_DISABLE=true is set, the Go server still serves the API and websocket endpoints and sends permissive CORS headers, so the dev server can access them cross-origin. If ORLY_WEB_DEV_PROXY_URL is set, the Go server will reverse-proxy non-/api paths to the dev server so you can use the same origin. - -2) Embedded (no hot reload) -- Build the web app and run the Go server with defaults: - -```bash -cd app/web -bun install -bun run build -cd ../../ -go run . -``` - -## Building - -The React application needs to be built before compiling the Go binary to ensure that the embedded files are available: - -```bash -# Build the React application -cd app/web -bun install -bun run build - -# Build the Go binary from project root -cd ../../ -go build -``` - -## How it works - -1. The React application is built to the `app/web/dist` directory -2. The Go embed directive in `app/web.go` embeds these files into the binary -3. When the server runs, it serves the embedded React app at the root path - -## Build Automation - -You can create a shell script to automate the build process: - -```bash -#!/bin/bash -# build.sh -echo "Building React app..." -cd app/web -bun install -bun run build - -echo "Building Go binary..." -cd ../../ -go build - -echo "Build complete!" -``` - -Make it executable with `chmod +x build.sh` and run with `./build.sh`. \ No newline at end of file diff --git a/app/web/bun.lock b/app/web/bun.lock index 440fcaa..e5baa9d 100644 --- a/app/web/bun.lock +++ b/app/web/bun.lock @@ -2,44 +2,189 @@ "lockfileVersion": 1, "workspaces": { "": { - "name": "orly-web", + "name": "svelte-app", "dependencies": { - "react": "^18.2.0", - "react-dom": "^18.2.0", - "react-json-pretty": "^2.2.0", + "sirv-cli": "^2.0.0", }, "devDependencies": { - "bun-types": "latest", + "@rollup/plugin-commonjs": "^24.0.0", + "@rollup/plugin-node-resolve": "^15.0.0", + "@rollup/plugin-terser": "^0.4.0", + "rollup": "^3.15.0", + "rollup-plugin-css-only": "^4.3.0", + "rollup-plugin-livereload": "^2.0.0", + "rollup-plugin-svelte": "^7.1.2", + "svelte": "^3.55.0", }, }, }, "packages": { - "@types/node": ["@types/node@24.5.2", "", { "dependencies": { "undici-types": "~7.12.0" } }, "sha512-FYxk1I7wPv3K2XBaoyH2cTnocQEu8AOZ60hPbsyukMPLv5/5qr7V1i8PLHdl6Zf87I+xZXFvPCXYjiTFq+YSDQ=="], + "@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], - "@types/react": ["@types/react@19.1.13", "", { "dependencies": { "csstype": "^3.0.2" } }, "sha512-hHkbU/eoO3EG5/MZkuFSKmYqPbSVk5byPFa3e7y/8TybHiLMACgI8seVYlicwk7H5K/rI2px9xrQp/C+AUDTiQ=="], + "@jridgewell/resolve-uri": ["@jridgewell/resolve-uri@3.1.2", "", {}, "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw=="], - "bun-types": ["bun-types@1.2.22", "", { "dependencies": { "@types/node": "*" }, "peerDependencies": { "@types/react": "^19" } }, "sha512-hwaAu8tct/Zn6Zft4U9BsZcXkYomzpHJX28ofvx7k0Zz2HNz54n1n+tDgxoWFGB4PcFvJXJQloPhaV2eP3Q6EA=="], + "@jridgewell/source-map": ["@jridgewell/source-map@0.3.11", "", { "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25" } }, "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA=="], - "csstype": ["csstype@3.1.3", "", {}, "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="], + "@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.5.5", "", {}, "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og=="], - "js-tokens": ["js-tokens@4.0.0", "", {}, "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="], + "@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.31", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw=="], - "loose-envify": ["loose-envify@1.4.0", "", { "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" }, "bin": { "loose-envify": "cli.js" } }, "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q=="], + "@polka/url": ["@polka/url@1.0.0-next.29", "", {}, "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww=="], - "object-assign": ["object-assign@4.1.1", "", {}, "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg=="], + "@rollup/plugin-commonjs": ["@rollup/plugin-commonjs@24.1.0", "", { "dependencies": { "@rollup/pluginutils": "^5.0.1", "commondir": "^1.0.1", "estree-walker": "^2.0.2", "glob": "^8.0.3", "is-reference": "1.2.1", "magic-string": "^0.27.0" }, "peerDependencies": { "rollup": "^2.68.0||^3.0.0" }, "optionalPeers": ["rollup"] }, "sha512-eSL45hjhCWI0jCCXcNtLVqM5N1JlBGvlFfY0m6oOYnLCJ6N0qEXoZql4sY2MOUArzhH4SA/qBpTxvvZp2Sc+DQ=="], - "prop-types": ["prop-types@15.8.1", "", { "dependencies": { "loose-envify": "^1.4.0", "object-assign": "^4.1.1", "react-is": "^16.13.1" } }, "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg=="], + "@rollup/plugin-node-resolve": ["@rollup/plugin-node-resolve@15.3.1", "", { "dependencies": { "@rollup/pluginutils": "^5.0.1", "@types/resolve": "1.20.2", "deepmerge": "^4.2.2", "is-module": "^1.0.0", "resolve": "^1.22.1" }, "peerDependencies": { "rollup": "^2.78.0||^3.0.0||^4.0.0" }, "optionalPeers": ["rollup"] }, "sha512-tgg6b91pAybXHJQMAAwW9VuWBO6Thi+q7BCNARLwSqlmsHz0XYURtGvh/AuwSADXSI4h/2uHbs7s4FzlZDGSGA=="], - "react": ["react@18.3.1", "", { "dependencies": { "loose-envify": "^1.1.0" } }, "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ=="], + "@rollup/plugin-terser": ["@rollup/plugin-terser@0.4.4", "", { "dependencies": { "serialize-javascript": "^6.0.1", "smob": "^1.0.0", "terser": "^5.17.4" }, "peerDependencies": { "rollup": "^2.0.0||^3.0.0||^4.0.0" }, "optionalPeers": ["rollup"] }, "sha512-XHeJC5Bgvs8LfukDwWZp7yeqin6ns8RTl2B9avbejt6tZqsqvVoWI7ZTQrcNsfKEDWBTnTxM8nMDkO2IFFbd0A=="], - "react-dom": ["react-dom@18.3.1", "", { "dependencies": { "loose-envify": "^1.1.0", "scheduler": "^0.23.2" }, "peerDependencies": { "react": "^18.3.1" } }, "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw=="], + "@rollup/pluginutils": ["@rollup/pluginutils@5.3.0", "", { "dependencies": { "@types/estree": "^1.0.0", "estree-walker": "^2.0.2", "picomatch": "^4.0.2" }, "peerDependencies": { "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" }, "optionalPeers": ["rollup"] }, "sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q=="], - "react-is": ["react-is@16.13.1", "", {}, "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="], + "@types/estree": ["@types/estree@1.0.8", "", {}, "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w=="], - "react-json-pretty": ["react-json-pretty@2.2.0", "", { "dependencies": { "prop-types": "^15.6.2" }, "peerDependencies": { "react": ">=15.0", "react-dom": ">=15.0" } }, "sha512-3UMzlAXkJ4R8S4vmkRKtvJHTewG4/rn1Q18n0zqdu/ipZbUPLVZD+QwC7uVcD/IAY3s8iNVHlgR2dMzIUS0n1A=="], + "@types/resolve": ["@types/resolve@1.20.2", "", {}, "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q=="], - "scheduler": ["scheduler@0.23.2", "", { "dependencies": { "loose-envify": "^1.1.0" } }, "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ=="], + "acorn": ["acorn@8.15.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg=="], - "undici-types": ["undici-types@7.12.0", "", {}, "sha512-goOacqME2GYyOZZfb5Lgtu+1IDmAlAEu5xnD3+xTzS10hT0vzpf0SPjkXwAw9Jm+4n/mQGDP3LO8CPbYROeBfQ=="], + "anymatch": ["anymatch@3.1.3", "", { "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" } }, "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw=="], + + "balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], + + "binary-extensions": ["binary-extensions@2.3.0", "", {}, "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw=="], + + "brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], + + "braces": ["braces@3.0.3", "", { "dependencies": { "fill-range": "^7.1.1" } }, "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA=="], + + "buffer-from": ["buffer-from@1.1.2", "", {}, "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="], + + "chokidar": ["chokidar@3.6.0", "", { "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", "readdirp": "~3.6.0" }, "optionalDependencies": { "fsevents": "~2.3.2" } }, "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw=="], + + "commander": ["commander@2.20.3", "", {}, "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="], + + "commondir": ["commondir@1.0.1", "", {}, "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg=="], + + "console-clear": ["console-clear@1.1.1", "", {}, "sha512-pMD+MVR538ipqkG5JXeOEbKWS5um1H4LUUccUQG68qpeqBYbzYy79Gh55jkd2TtPdRfUaLWdv6LPP//5Zt0aPQ=="], + + "deepmerge": ["deepmerge@4.3.1", "", {}, "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A=="], + + "estree-walker": ["estree-walker@2.0.2", "", {}, "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="], + + "fill-range": ["fill-range@7.1.1", "", { "dependencies": { "to-regex-range": "^5.0.1" } }, "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg=="], + + "fs.realpath": ["fs.realpath@1.0.0", "", {}, "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="], + + "fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="], + + "function-bind": ["function-bind@1.1.2", "", {}, "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="], + + "get-port": ["get-port@3.2.0", "", {}, "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg=="], + + "glob": ["glob@8.1.0", "", { "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^5.0.1", "once": "^1.3.0" } }, "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ=="], + + "glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], + + "hasown": ["hasown@2.0.2", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ=="], + + "inflight": ["inflight@1.0.6", "", { "dependencies": { "once": "^1.3.0", "wrappy": "1" } }, "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA=="], + + "inherits": ["inherits@2.0.4", "", {}, "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="], + + "is-binary-path": ["is-binary-path@2.1.0", "", { "dependencies": { "binary-extensions": "^2.0.0" } }, "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw=="], + + "is-core-module": ["is-core-module@2.16.1", "", { "dependencies": { "hasown": "^2.0.2" } }, "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w=="], + + "is-extglob": ["is-extglob@2.1.1", "", {}, "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ=="], + + "is-glob": ["is-glob@4.0.3", "", { "dependencies": { "is-extglob": "^2.1.1" } }, "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg=="], + + "is-module": ["is-module@1.0.0", "", {}, "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g=="], + + "is-number": ["is-number@7.0.0", "", {}, "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="], + + "is-reference": ["is-reference@1.2.1", "", { "dependencies": { "@types/estree": "*" } }, "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ=="], + + "kleur": ["kleur@4.1.5", "", {}, "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ=="], + + "livereload": ["livereload@0.9.3", "", { "dependencies": { "chokidar": "^3.5.0", "livereload-js": "^3.3.1", "opts": ">= 1.2.0", "ws": "^7.4.3" }, "bin": { "livereload": "bin/livereload.js" } }, "sha512-q7Z71n3i4X0R9xthAryBdNGVGAO2R5X+/xXpmKeuPMrteg+W2U8VusTKV3YiJbXZwKsOlFlHe+go6uSNjfxrZw=="], + + "livereload-js": ["livereload-js@3.4.1", "", {}, "sha512-5MP0uUeVCec89ZbNOT/i97Mc+q3SxXmiUGhRFOTmhrGPn//uWVQdCvcLJDy64MSBR5MidFdOR7B9viumoavy6g=="], + + "local-access": ["local-access@1.1.0", "", {}, "sha512-XfegD5pyTAfb+GY6chk283Ox5z8WexG56OvM06RWLpAc/UHozO8X6xAxEkIitZOtsSMM1Yr3DkHgW5W+onLhCw=="], + + "magic-string": ["magic-string@0.27.0", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.4.13" } }, "sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA=="], + + "minimatch": ["minimatch@5.1.6", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g=="], + + "mri": ["mri@1.2.0", "", {}, "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA=="], + + "mrmime": ["mrmime@2.0.1", "", {}, "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ=="], + + "normalize-path": ["normalize-path@3.0.0", "", {}, "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="], + + "once": ["once@1.4.0", "", { "dependencies": { "wrappy": "1" } }, "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w=="], + + "opts": ["opts@2.0.2", "", {}, "sha512-k41FwbcLnlgnFh69f4qdUfvDQ+5vaSDnVPFI/y5XuhKRq97EnVVneO9F1ESVCdiVu4fCS2L8usX3mU331hB7pg=="], + + "path-parse": ["path-parse@1.0.7", "", {}, "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="], + + "picomatch": ["picomatch@4.0.3", "", {}, "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q=="], + + "randombytes": ["randombytes@2.1.0", "", { "dependencies": { "safe-buffer": "^5.1.0" } }, "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ=="], + + "readdirp": ["readdirp@3.6.0", "", { "dependencies": { "picomatch": "^2.2.1" } }, "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA=="], + + "resolve": ["resolve@1.22.10", "", { "dependencies": { "is-core-module": "^2.16.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" } }, "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w=="], + + "resolve.exports": ["resolve.exports@2.0.3", "", {}, "sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A=="], + + "rollup": ["rollup@3.29.5", "", { "optionalDependencies": { "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-GVsDdsbJzzy4S/v3dqWPJ7EfvZJfCHiDqe80IyrF59LYuP+e6U1LJoUqeuqRbwAWoMNoXivMNeNAOf5E22VA1w=="], + + "rollup-plugin-css-only": ["rollup-plugin-css-only@4.5.5", "", { "dependencies": { "@rollup/pluginutils": "5" }, "peerDependencies": { "rollup": "<5" } }, "sha512-O2m2Sj8qsAtjUVqZyGTDXJypaOFFNV4knz8OlS6wJBws6XEICIiLsXmI56SbQEmWDqYU5TgRgWmslGj4THofJQ=="], + + "rollup-plugin-livereload": ["rollup-plugin-livereload@2.0.5", "", { "dependencies": { "livereload": "^0.9.1" } }, "sha512-vqQZ/UQowTW7VoiKEM5ouNW90wE5/GZLfdWuR0ELxyKOJUIaj+uismPZZaICU4DnWPVjnpCDDxEqwU7pcKY/PA=="], + + "rollup-plugin-svelte": ["rollup-plugin-svelte@7.2.3", "", { "dependencies": { "@rollup/pluginutils": "^4.1.0", "resolve.exports": "^2.0.0" }, "peerDependencies": { "rollup": ">=2.0.0", "svelte": ">=3.5.0" } }, "sha512-LlniP+h00DfM+E4eav/Kk8uGjgPUjGIBfrAS/IxQvsuFdqSM0Y2sXf31AdxuIGSW9GsmocDqOfaxR5QNno/Tgw=="], + + "sade": ["sade@1.8.1", "", { "dependencies": { "mri": "^1.1.0" } }, "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A=="], + + "safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="], + + "semiver": ["semiver@1.1.0", "", {}, "sha512-QNI2ChmuioGC1/xjyYwyZYADILWyW6AmS1UH6gDj/SFUUUS4MBAWs/7mxnkRPc/F4iHezDP+O8t0dO8WHiEOdg=="], + + "serialize-javascript": ["serialize-javascript@6.0.2", "", { "dependencies": { "randombytes": "^2.1.0" } }, "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g=="], + + "sirv": ["sirv@2.0.4", "", { "dependencies": { "@polka/url": "^1.0.0-next.24", "mrmime": "^2.0.0", "totalist": "^3.0.0" } }, "sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ=="], + + "sirv-cli": ["sirv-cli@2.0.2", "", { "dependencies": { "console-clear": "^1.1.0", "get-port": "^3.2.0", "kleur": "^4.1.4", "local-access": "^1.0.1", "sade": "^1.6.0", "semiver": "^1.0.0", "sirv": "^2.0.0", "tinydate": "^1.0.0" }, "bin": { "sirv": "bin.js" } }, "sha512-OtSJDwxsF1NWHc7ps3Sa0s+dPtP15iQNJzfKVz+MxkEo3z72mCD+yu30ct79rPr0CaV1HXSOBp+MIY5uIhHZ1A=="], + + "smob": ["smob@1.5.0", "", {}, "sha512-g6T+p7QO8npa+/hNx9ohv1E5pVCmWrVCUzUXJyLdMmftX6ER0oiWY/w9knEonLpnOp6b6FenKnMfR8gqwWdwig=="], + + "source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], + + "source-map-support": ["source-map-support@0.5.21", "", { "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" } }, "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w=="], + + "supports-preserve-symlinks-flag": ["supports-preserve-symlinks-flag@1.0.0", "", {}, "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="], + + "svelte": ["svelte@3.59.2", "", {}, "sha512-vzSyuGr3eEoAtT/A6bmajosJZIUWySzY2CzB3w2pgPvnkUjGqlDnsNnA0PMO+mMAhuyMul6C2uuZzY6ELSkzyA=="], + + "terser": ["terser@5.44.0", "", { "dependencies": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.15.0", "commander": "^2.20.0", "source-map-support": "~0.5.20" }, "bin": { "terser": "bin/terser" } }, "sha512-nIVck8DK+GM/0Frwd+nIhZ84pR/BX7rmXMfYwyg+Sri5oGVE99/E3KvXqpC2xHFxyqXyGHTKBSioxxplrO4I4w=="], + + "tinydate": ["tinydate@1.3.0", "", {}, "sha512-7cR8rLy2QhYHpsBDBVYnnWXm8uRTr38RoZakFSW7Bs7PzfMPNZthuMLkwqZv7MTu8lhQ91cOFYS5a7iFj2oR3w=="], + + "to-regex-range": ["to-regex-range@5.0.1", "", { "dependencies": { "is-number": "^7.0.0" } }, "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ=="], + + "totalist": ["totalist@3.0.1", "", {}, "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ=="], + + "wrappy": ["wrappy@1.0.2", "", {}, "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="], + + "ws": ["ws@7.5.10", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": "^5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ=="], + + "anymatch/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], + + "readdirp/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], + + "rollup-plugin-svelte/@rollup/pluginutils": ["@rollup/pluginutils@4.2.1", "", { "dependencies": { "estree-walker": "^2.0.1", "picomatch": "^2.2.2" } }, "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ=="], + + "rollup-plugin-svelte/@rollup/pluginutils/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], } } diff --git a/app/web/dist/index-kk1m7jg4.js b/app/web/dist/index-kk1m7jg4.js deleted file mode 100644 index 880a99c..0000000 --- a/app/web/dist/index-kk1m7jg4.js +++ /dev/null @@ -1,161 +0,0 @@ -var gA=Object.create;var{getPrototypeOf:fA,defineProperty:dH,getOwnPropertyNames:hA}=Object;var TA=Object.prototype.hasOwnProperty;var o4=(_,n,T)=>{T=_!=null?gA(fA(_)):{};let Z0=n||!_||!_.__esModule?dH(T,"default",{value:_,enumerable:!0}):T;for(let $ of hA(_))if(!TA.call(Z0,$))dH(Z0,$,{get:()=>_[$],enumerable:!0});return Z0};var L8=(_,n)=>()=>(n||_((n={exports:{}}).exports,n),n.exports);var Z6=L8((EA,WG)=>{(function(){if(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__!=="undefined"&&typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart==="function")__REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(new Error);var _="18.3.1",n=Symbol.for("react.element"),T=Symbol.for("react.portal"),Z0=Symbol.for("react.fragment"),$=Symbol.for("react.strict_mode"),_0=Symbol.for("react.profiler"),t=Symbol.for("react.provider"),s=Symbol.for("react.context"),q0=Symbol.for("react.forward_ref"),c=Symbol.for("react.suspense"),I0=Symbol.for("react.suspense_list"),p=Symbol.for("react.memo"),y0=Symbol.for("react.lazy"),F1=Symbol.for("react.offscreen"),Y1=Symbol.iterator,z4="@@iterator";function k1(U){if(U===null||typeof U!=="object")return null;var M=Y1&&U[Y1]||U[z4];if(typeof M==="function")return M;return null}var L0={current:null},I1={transition:null},O0={current:null,isBatchingLegacy:!1,didScheduleLegacyUpdate:!1},N0={current:null},i0={},e1=null;function i1(U){e1=U}i0.setExtraStackFrame=function(U){e1=U},i0.getCurrentStack=null,i0.getStackAddendum=function(){var U="";if(e1)U+=e1;var M=i0.getCurrentStack;if(M)U+=M()||"";return U};var Z4=!1,s0=!1,A1=!1,S1=!1,a0=!1,N={ReactCurrentDispatcher:L0,ReactCurrentBatchConfig:I1,ReactCurrentOwner:N0};N.ReactDebugCurrentFrame=i0,N.ReactCurrentActQueue=O0;function y(U){{for(var M=arguments.length,P=new Array(M>1?M-1:0),k=1;k1?M-1:0),k=1;k1){var T1=Array(R1);for(var E1=0;E11){var m1=Array(E1);for(var a1=0;a1 is not supported and will be removed in a future major release. Did you mean to render instead?");return M.Provider},set:function(U0){M.Provider=U0}},_currentValue:{get:function(){return M._currentValue},set:function(U0){M._currentValue=U0}},_currentValue2:{get:function(){return M._currentValue2},set:function(U0){M._currentValue2=U0}},_threadCount:{get:function(){return M._threadCount},set:function(U0){M._threadCount=U0}},Consumer:{get:function(){if(!P)P=!0,l("Rendering is not supported and will be removed in a future major release. Did you mean to render instead?");return M.Consumer}},displayName:{get:function(){return M.displayName},set:function(U0){if(!m)y("Setting `displayName` on Context.Consumer has no effect. You should set it directly on the context with Context.displayName = '%s'.",U0),m=!0}}}),M.Consumer=g0}return M._currentRenderer=null,M._currentRenderer2=null,M}var v4=-1,x8=0,C8=1,t4=2;function O8(U){if(U._status===v4){var M=U._result,P=M();if(P.then(function(g0){if(U._status===x8||U._status===v4){var U0=U;U0._status=C8,U0._result=g0}},function(g0){if(U._status===x8||U._status===v4){var U0=U;U0._status=t4,U0._result=g0}}),U._status===v4){var k=U;k._status=x8,k._result=P}}if(U._status===C8){var m=U._result;if(m===void 0)l(`lazy: Expected the result of a dynamic import() call. Instead received: %s - -Your code should look like: - const MyComponent = lazy(() => import('./MyComponent')) - -Did you accidentally put curly braces around the import?`,m);if(!("default"in m))l(`lazy: Expected the result of a dynamic import() call. Instead received: %s - -Your code should look like: - const MyComponent = lazy(() => import('./MyComponent'))`,m);return m.default}else throw U._result}function g8(U){var M={_status:v4,_result:U},P={$$typeof:y0,_payload:M,_init:O8};{var k,m;Object.defineProperties(P,{defaultProps:{configurable:!0,get:function(){return k},set:function(g0){l("React.lazy(...): It is not supported to assign `defaultProps` to a lazy component import. Either specify them where the component is defined, or create a wrapping component around it."),k=g0,Object.defineProperty(P,"defaultProps",{enumerable:!0})}},propTypes:{configurable:!0,get:function(){return m},set:function(g0){l("React.lazy(...): It is not supported to assign `propTypes` to a lazy component import. Either specify them where the component is defined, or create a wrapping component around it."),m=g0,Object.defineProperty(P,"propTypes",{enumerable:!0})}}})}return P}function L(U){{if(U!=null&&U.$$typeof===p)l("forwardRef requires a render function but received a `memo` component. Instead of forwardRef(memo(...)), use memo(forwardRef(...)).");else if(typeof U!=="function")l("forwardRef requires a render function but was given %s.",U===null?"null":typeof U);else if(U.length!==0&&U.length!==2)l("forwardRef render functions accept exactly two parameters: props and ref. %s",U.length===1?"Did you forget to use the ref parameter?":"Any additional parameter will be undefined.");if(U!=null){if(U.defaultProps!=null||U.propTypes!=null)l("forwardRef render functions do not support propTypes or defaultProps. Did you accidentally pass a React component?")}}var M={$$typeof:q0,render:U};{var P;Object.defineProperty(M,"displayName",{enumerable:!1,configurable:!0,get:function(){return P},set:function(k){if(P=k,!U.name&&!U.displayName)U.displayName=k}})}return M}var h=Symbol.for("react.module.reference");function a(U){if(typeof U==="string"||typeof U==="function")return!0;if(U===Z0||U===_0||a0||U===$||U===c||U===I0||S1||U===F1||Z4||s0||A1)return!0;if(typeof U==="object"&&U!==null){if(U.$$typeof===y0||U.$$typeof===p||U.$$typeof===t||U.$$typeof===s||U.$$typeof===q0||U.$$typeof===h||U.getModuleId!==void 0)return!0}return!1}function D0(U,M){if(!a(U))l("memo: The first argument must be a component. Instead received: %s",U===null?"null":typeof U);var P={$$typeof:p,type:U,compare:M===void 0?null:M};{var k;Object.defineProperty(P,"displayName",{enumerable:!1,configurable:!0,get:function(){return k},set:function(m){if(k=m,!U.name&&!U.displayName)U.displayName=m}})}return P}function g(){var U=L0.current;if(U===null)l(`Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons: -1. You might have mismatching versions of React and the renderer (such as React DOM) -2. You might be breaking the Rules of Hooks -3. You might have more than one copy of React in the same app -See https://reactjs.org/link/invalid-hook-call for tips about how to debug and fix this problem.`);return U}function n0(U){var M=g();if(U._context!==void 0){var P=U._context;if(P.Consumer===U)l("Calling useContext(Context.Consumer) is not supported, may cause bugs, and will be removed in a future major release. Did you mean to call useContext(Context) instead?");else if(P.Provider===U)l("Calling useContext(Context.Provider) is not supported. Did you mean to call useContext(Context) instead?")}return M.useContext(U)}function i(U){var M=g();return M.useState(U)}function h0(U,M,P){var k=g();return k.useReducer(U,M,P)}function X1(U){var M=g();return M.useRef(U)}function P1(U,M){var P=g();return P.useEffect(U,M)}function Y(U,M){var P=g();return P.useInsertionEffect(U,M)}function j(U,M){var P=g();return P.useLayoutEffect(U,M)}function v(U,M){var P=g();return P.useCallback(U,M)}function C(U,M){var P=g();return P.useMemo(U,M)}function b(U,M,P){var k=g();return k.useImperativeHandle(U,M,P)}function u(U,M){{var P=g();return P.useDebugValue(U,M)}}function d(){var U=g();return U.useTransition()}function B0(U){var M=g();return M.useDeferredValue(U)}function J0(){var U=g();return U.useId()}function U1(U,M,P){var k=g();return k.useSyncExternalStore(U,M,P)}var r0=0,b0,M0,j0,F0,c0,o1,e4;function c5(){}c5.__reactDisabledLog=!0;function $G(){{if(r0===0){b0=console.log,M0=console.info,j0=console.warn,F0=console.error,c0=console.group,o1=console.groupCollapsed,e4=console.groupEnd;var U={configurable:!0,enumerable:!0,value:c5,writable:!0};Object.defineProperties(console,{info:U,log:U,warn:U,error:U,group:U,groupCollapsed:U,groupEnd:U})}r0++}}function J6(){{if(r0--,r0===0){var U={configurable:!0,enumerable:!0,writable:!0};Object.defineProperties(console,{log:w0({},U,{value:b0}),info:w0({},U,{value:M0}),warn:w0({},U,{value:j0}),error:w0({},U,{value:F0}),group:w0({},U,{value:c0}),groupCollapsed:w0({},U,{value:o1}),groupEnd:w0({},U,{value:e4})})}if(r0<0)l("disabledDepth fell below zero. This is a bug in React. Please file an issue.")}}var _9=N.ReactCurrentDispatcher,f8;function l5(U,M,P){{if(f8===void 0)try{throw Error()}catch(m){var k=m.stack.trim().match(/\n( *(at )?)/);f8=k&&k[1]||""}return` -`+f8+U}}var o5=!1,Q7;{var B6=typeof WeakMap==="function"?WeakMap:Map;Q7=new B6}function oZ(U,M){if(!U||o5)return"";{var P=Q7.get(U);if(P!==void 0)return P}var k;o5=!0;var m=Error.prepareStackTrace;Error.prepareStackTrace=void 0;var g0;g0=_9.current,_9.current=null,$G();try{if(M){var U0=function(){throw Error()};if(Object.defineProperty(U0.prototype,"props",{set:function(){throw Error()}}),typeof Reflect==="object"&&Reflect.construct){try{Reflect.construct(U0,[])}catch(M1){k=M1}Reflect.construct(U,[],U0)}else{try{U0.call()}catch(M1){k=M1}U.call(U0.prototype)}}else{try{throw Error()}catch(M1){k=M1}U()}}catch(M1){if(M1&&k&&typeof M1.stack==="string"){var v0=M1.stack.split(` -`),G1=k.stack.split(` -`),R1=v0.length-1,T1=G1.length-1;while(R1>=1&&T1>=0&&v0[R1]!==G1[T1])T1--;for(;R1>=1&&T1>=0;R1--,T1--)if(v0[R1]!==G1[T1]){if(R1!==1||T1!==1)do if(R1--,T1--,T1<0||v0[R1]!==G1[T1]){var E1=` -`+v0[R1].replace(" at new "," at ");if(U.displayName&&E1.includes(""))E1=E1.replace("",U.displayName);if(typeof U==="function")Q7.set(U,E1);return E1}while(R1>=1&&T1>=0);break}}}finally{o5=!1,_9.current=g0,J6(),Error.prepareStackTrace=m}var m1=U?U.displayName||U.name:"",a1=m1?l5(m1):"";if(typeof U==="function")Q7.set(U,a1);return a1}function W6(U,M,P){return oZ(U,!1)}function qG(U){var M=U.prototype;return!!(M&&M.isReactComponent)}function s5(U,M,P){if(U==null)return"";if(typeof U==="function")return oZ(U,qG(U));if(typeof U==="string")return l5(U);switch(U){case c:return l5("Suspense");case I0:return l5("SuspenseList")}if(typeof U==="object")switch(U.$$typeof){case q0:return W6(U.render);case p:return s5(U.type,M,P);case y0:{var k=U,m=k._payload,g0=k._init;try{return s5(g0(m),M,P)}catch(U0){}}}return""}var sZ={},U6=N.ReactDebugCurrentFrame;function G7(U){if(U){var M=U._owner,P=s5(U.type,U._source,M?M.type:null);U6.setExtraStackFrame(P)}else U6.setExtraStackFrame(null)}function nZ(U,M,P,k,m){{var g0=Function.call.bind(B8);for(var U0 in U)if(g0(U,U0)){var v0=void 0;try{if(typeof U[U0]!=="function"){var G1=Error((k||"React class")+": "+P+" type `"+U0+"` is invalid; it must be a function, usually from the `prop-types` package, but received `"+typeof U[U0]+"`.This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.");throw G1.name="Invariant Violation",G1}v0=U[U0](M,U0,k,P,null,"SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED")}catch(R1){v0=R1}if(v0&&!(v0 instanceof Error))G7(m),l("%s: type specification of %s `%s` is invalid; the type checker function must return `null` or an `Error` but returned a %s. You may have forgotten to pass an argument to the type checker creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and shape all require an argument).",k||"React class",P,U0,typeof v0),G7(null);if(v0 instanceof Error&&!(v0.message in sZ))sZ[v0.message]=!0,G7(m),l("Failed %s type: %s",P,v0.message),G7(null)}}}function H1(U){if(U){var M=U._owner,P=s5(U.type,U._source,M?M.type:null);i1(P)}else i1(null)}var pZ=!1;function H6(){if(N0.current){var U=_1(N0.current.type);if(U)return` - -Check the render method of \``+U+"`."}return""}function o0(U){if(U!==void 0){var M=U.fileName.replace(/^.*[\\\/]/,""),P=U.lineNumber;return` - -Check your code at `+M+":"+P+"."}return""}function aZ(U){if(U!==null&&U!==void 0)return o0(U.__source);return""}var d4={};function P9(U){var M=H6();if(!M){var P=typeof U==="string"?U:U.displayName||U.name;if(P)M=` - -Check the top-level render call using <`+P+">."}return M}function n5(U,M){if(!U._store||U._store.validated||U.key!=null)return;U._store.validated=!0;var P=P9(M);if(d4[P])return;d4[P]=!0;var k="";if(U&&U._owner&&U._owner!==N0.current)k=" It was passed a child from "+_1(U._owner.type)+".";H1(U),l('Each child in a list should have a unique "key" prop.%s%s See https://reactjs.org/link/warning-keys for more information.',P,k),H1(null)}function rZ(U,M){if(typeof U!=="object")return;if(v1(U))for(var P=0;P",m=" Did you accidentally export a JSX literal instead of a component?";else U0=typeof U;l("React.createElement: type is invalid -- expected a string (for built-in components) or a class/function (for composite components) but got: %s.%s",U0,m)}var v0=Q4.apply(this,arguments);if(v0==null)return v0;if(k)for(var G1=2;G110)y("Detected a large number of updates inside startTransition. If this is due to a subscription please re-write it to use React provided hooks. Otherwise concurrent mode guarantees are off the table.");k._updatedFibers.clear()}}}var z7=!1,R9=null;function eZ(U){if(R9===null)try{var M=("require"+Math.random()).slice(0,7),P=WG&&WG[M];R9=P.call(WG,"timers").setImmediate}catch(k){R9=function(m){if(z7===!1){if(z7=!0,typeof MessageChannel==="undefined")l("This browser does not have a MessageChannel implementation, so enqueuing tasks via await act(async () => ...) will fail. Please file an issue at https://github.com/facebook/react/issues if you encounter this warning.")}var g0=new MessageChannel;g0.port1.onmessage=m,g0.port2.postMessage(void 0)}}return R9(U)}var p5=0,ZX=!1;function XX(U){{var M=p5;if(p5++,O0.current===null)O0.current=[];var P=O0.isBatchingLegacy,k;try{if(O0.isBatchingLegacy=!0,k=U(),!P&&O0.didScheduleLegacyUpdate){var m=O0.current;if(m!==null)O0.didScheduleLegacyUpdate=!1,J7(m)}}catch(m1){throw O5(M),m1}finally{O0.isBatchingLegacy=P}if(k!==null&&typeof k==="object"&&typeof k.then==="function"){var g0=k,U0=!1,v0={then:function(m1,a1){U0=!0,g0.then(function(M1){if(O5(M),p5===0)K7(M1,m1,a1);else m1(M1)},function(M1){O5(M),a1(M1)})}};if(!ZX&&typeof Promise!=="undefined")Promise.resolve().then(function(){}).then(function(){if(!U0)ZX=!0,l("You called act(async () => ...) without await. This could lead to unexpected testing behaviour, interleaving multiple act calls and mixing their scopes. You should - await act(async () => ...);")});return v0}else{var G1=k;if(O5(M),p5===0){var R1=O0.current;if(R1!==null)J7(R1),O0.current=null;var T1={then:function(m1,a1){if(O0.current===null)O0.current=[],K7(G1,m1,a1);else m1(G1)}};return T1}else{var E1={then:function(m1,a1){m1(G1)}};return E1}}}}function O5(U){{if(U!==p5-1)l("You seem to have overlapping act() calls, this is not supported. Be sure to await previous act() calls before making a new one. ");p5=U}}function K7(U,M,P){{var k=O0.current;if(k!==null)try{J7(k),eZ(function(){if(k.length===0)O0.current=null,M(U);else K7(U,M,P)})}catch(m){P(m)}else M(U)}}var a5=!1;function J7(U){if(!a5){a5=!0;var M=0;try{for(;M{(function(){if(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__!=="undefined"&&typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart==="function")__REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(new Error);var _=!1,n=!1,T=5;function Z0(X0,H0){var R0=X0.length;X0.push(H0),t(X0,H0,R0)}function $(X0){return X0.length===0?null:X0[0]}function _0(X0){if(X0.length===0)return null;var H0=X0[0],R0=X0.pop();if(R0!==H0)X0[0]=R0,s(X0,R0,0);return H0}function t(X0,H0,R0){var B1=R0;while(B1>0){var x1=B1-1>>>1,l1=X0[x1];if(q0(l1,H0)>0)X0[x1]=H0,X0[B1]=l1,B1=x1;else return}}function s(X0,H0,R0){var B1=R0,x1=X0.length,l1=x1>>>1;while(B1R0&&(!X0||B8()))break;var B1=a0.callback;if(typeof B1==="function"){a0.callback=null,N=a0.priorityLevel;var x1=a0.expirationTime<=R0,l1=B1(x1);if(R0=uA.unstable_now(),typeof l1==="function")a0.callback=l1;else if(a0===$(s0))_0(s0);x0(R0)}else _0(s0);a0=$(s0)}if(a0!==null)return!0;else{var C1=$(A1);if(C1!==null)k8(u0,C1.startTime-R0);return!1}}function O1(X0,H0){switch(X0){case c:case I0:case p:case y0:case F1:break;default:X0=p}var R0=N;N=X0;try{return H0()}finally{N=R0}}function c1(X0){var H0;switch(N){case c:case I0:case p:H0=p;break;default:H0=N;break}var R0=N;N=H0;try{return X0()}finally{N=R0}}function p1(X0){var H0=N;return function(){var R0=N;N=H0;try{return X0.apply(this,arguments)}finally{N=R0}}}function C0(X0,H0,R0){var B1=uA.unstable_now(),x1;if(typeof R0==="object"&&R0!==null){var l1=R0.delay;if(typeof l1==="number"&&l1>0)x1=B1+l1;else x1=B1}else x1=B1;var C1;switch(X0){case c:C1=N0;break;case I0:C1=i0;break;case F1:C1=Z4;break;case y0:C1=i1;break;case p:default:C1=e1;break}var A4=x1+C1,Z1={id:S1++,callback:H0,priorityLevel:X0,startTime:x1,expirationTime:A4,sortIndex:-1};if(x1>B1){if(Z1.sortIndex=x1,Z0(A1,Z1),$(s0)===null&&Z1===$(A1)){if(Y0)S8();else Y0=!0;k8(u0,x1-B1)}}else if(Z1.sortIndex=A4,Z0(s0,Z1),!l&&!y)l=!0,H4(E0);return Z1}function K4(){}function V4(){if(!l&&!y)l=!0,H4(E0)}function v1(){return $(s0)}function o(X0){X0.callback=null}function F4(){return N}var f1=!1,N1=null,E4=-1,I8=T,_1=-1;function B8(){var X0=uA.unstable_now()-_1;if(X0125){console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported");return}if(X0>0)I8=Math.floor(1000/X0);else I8=T}var n4=function(){if(N1!==null){var X0=uA.unstable_now();_1=X0;var H0=!0,R0=!0;try{R0=N1(H0,X0)}finally{if(R0)X4();else f1=!1,N1=null}}else f1=!1},X4;if(typeof k0==="function")X4=function(){k0(n4)};else if(typeof MessageChannel!=="undefined"){var p4=new MessageChannel,J4=p4.port2;p4.port1.onmessage=n4,X4=function(){J4.postMessage(null)}}else X4=function(){P0(n4,0)};function H4(X0){if(N1=X0,!f1)f1=!0,X4()}function k8(X0,H0){E4=P0(function(){X0(uA.unstable_now())},H0)}function S8(){T0(E4),E4=-1}var a4=h1,Q4=null;if(uA.unstable_IdlePriority=F1,uA.unstable_ImmediatePriority=c,uA.unstable_LowPriority=y0,uA.unstable_NormalPriority=p,uA.unstable_Profiling=Q4,uA.unstable_UserBlockingPriority=I0,uA.unstable_cancelCallback=o,uA.unstable_continueExecution=V4,uA.unstable_forceFrameRate=s4,uA.unstable_getCurrentPriorityLevel=F4,uA.unstable_getFirstCallbackNode=v1,uA.unstable_next=c1,uA.unstable_pauseExecution=K4,uA.unstable_requestPaint=a4,uA.unstable_runWithPriority=O1,uA.unstable_scheduleCallback=C0,uA.unstable_shouldYield=B8,uA.unstable_wrapCallback=p1,typeof __REACT_DEVTOOLS_GLOBAL_HOOK__!=="undefined"&&typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop==="function")__REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(new Error)})()});var yH=L8((vA)=>{var iZ=o4(Z6(),1),b1=o4(mH(),1);(function(){if(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__!=="undefined"&&typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart==="function")__REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(new Error);var _=iZ.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,n=!1;function T(Z){n=Z}function Z0(Z){if(!n){for(var X=arguments.length,Q=new Array(X>1?X-1:0),G=1;G1?X-1:0),G=1;G2&&(Z[0]==="o"||Z[0]==="O")&&(Z[1]==="n"||Z[1]==="N"))return!0;return!1}function l1(Z,X,Q,G){if(Q!==null&&Q.type===n4)return!1;switch(typeof X){case"function":case"symbol":return!0;case"boolean":{if(G)return!1;if(Q!==null)return!Q.acceptsBooleans;else{var z=Z.toLowerCase().slice(0,5);return z!=="data-"&&z!=="aria-"}}default:return!1}}function C1(Z,X,Q,G){if(X===null||typeof X==="undefined")return!0;if(l1(Z,X,Q,G))return!0;if(G)return!1;if(Q!==null)switch(Q.type){case J4:return!X;case H4:return X===!1;case k8:return isNaN(X);case S8:return isNaN(X)||X<1}return!1}function A4(Z){return Q1.hasOwnProperty(Z)?Q1[Z]:null}function Z1(Z,X,Q,G,z,K,J){this.acceptsBooleans=X===p4||X===J4||X===H4,this.attributeName=G,this.attributeNamespace=z,this.mustUseProperty=Q,this.propertyName=Z,this.type=X,this.sanitizeURL=K,this.removeEmptyString=J}var Q1={},w8=["children","dangerouslySetInnerHTML","defaultValue","defaultChecked","innerHTML","suppressContentEditableWarning","suppressHydrationWarning","style"];w8.forEach(function(Z){Q1[Z]=new Z1(Z,n4,!1,Z,null,!1,!1)}),[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(Z){var X=Z[0],Q=Z[1];Q1[X]=new Z1(X,X4,!1,Q,null,!1,!1)}),["contentEditable","draggable","spellCheck","value"].forEach(function(Z){Q1[Z]=new Z1(Z,p4,!1,Z.toLowerCase(),null,!1,!1)}),["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(Z){Q1[Z]=new Z1(Z,p4,!1,Z,null,!1,!1)}),["allowFullScreen","async","autoFocus","autoPlay","controls","default","defer","disabled","disablePictureInPicture","disableRemotePlayback","formNoValidate","hidden","loop","noModule","noValidate","open","playsInline","readOnly","required","reversed","scoped","seamless","itemScope"].forEach(function(Z){Q1[Z]=new Z1(Z,J4,!1,Z.toLowerCase(),null,!1,!1)}),["checked","multiple","muted","selected"].forEach(function(Z){Q1[Z]=new Z1(Z,J4,!0,Z,null,!1,!1)}),["capture","download"].forEach(function(Z){Q1[Z]=new Z1(Z,H4,!1,Z,null,!1,!1)}),["cols","rows","size","span"].forEach(function(Z){Q1[Z]=new Z1(Z,S8,!1,Z,null,!1,!1)}),["rowSpan","start"].forEach(function(Z){Q1[Z]=new Z1(Z,k8,!1,Z.toLowerCase(),null,!1,!1)});var u4=/[\-\:]([a-z])/g,N8=function(Z){return Z[1].toUpperCase()};["accent-height","alignment-baseline","arabic-form","baseline-shift","cap-height","clip-path","clip-rule","color-interpolation","color-interpolation-filters","color-profile","color-rendering","dominant-baseline","enable-background","fill-opacity","fill-rule","flood-color","flood-opacity","font-family","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-weight","glyph-name","glyph-orientation-horizontal","glyph-orientation-vertical","horiz-adv-x","horiz-origin-x","image-rendering","letter-spacing","lighting-color","marker-end","marker-mid","marker-start","overline-position","overline-thickness","paint-order","panose-1","pointer-events","rendering-intent","shape-rendering","stop-color","stop-opacity","strikethrough-position","strikethrough-thickness","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","text-anchor","text-decoration","text-rendering","underline-position","underline-thickness","unicode-bidi","unicode-range","units-per-em","v-alphabetic","v-hanging","v-ideographic","v-mathematical","vector-effect","vert-adv-y","vert-origin-x","vert-origin-y","word-spacing","writing-mode","xmlns:xlink","x-height"].forEach(function(Z){var X=Z.replace(u4,N8);Q1[X]=new Z1(X,X4,!1,Z,null,!1,!1)}),["xlink:actuate","xlink:arcrole","xlink:role","xlink:show","xlink:title","xlink:type"].forEach(function(Z){var X=Z.replace(u4,N8);Q1[X]=new Z1(X,X4,!1,Z,"http://www.w3.org/1999/xlink",!1,!1)}),["xml:base","xml:lang","xml:space"].forEach(function(Z){var X=Z.replace(u4,N8);Q1[X]=new Z1(X,X4,!1,Z,"http://www.w3.org/XML/1998/namespace",!1,!1)}),["tabIndex","crossOrigin"].forEach(function(Z){Q1[Z]=new Z1(Z,X4,!1,Z.toLowerCase(),null,!1,!1)});var A9="xlinkHref";Q1[A9]=new Z1("xlinkHref",X4,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1),["src","href","action","formAction"].forEach(function(Z){Q1[Z]=new Z1(Z,X4,!1,Z.toLowerCase(),null,!0,!0)});var r4=/^[\u0000-\u001F ]*j[\r\n\t]*a[\r\n\t]*v[\r\n\t]*a[\r\n\t]*s[\r\n\t]*c[\r\n\t]*r[\r\n\t]*i[\r\n\t]*p[\r\n\t]*t[\r\n\t]*\:/i,i5=!1;function w5(Z){if(!i5&&r4.test(Z))i5=!0,$("A future version of React will block javascript: URLs as a security precaution. Use event handlers instead if you can. If you need to generate unsafe HTML try using dangerouslySetInnerHTML instead. React was passed %s.",JSON.stringify(Z))}function v4(Z,X,Q,G){if(G.mustUseProperty){var z=G.propertyName;return Z[z]}else{if(E4(Q,X),G.sanitizeURL)w5(""+Q);var K=G.attributeName,J=null;if(G.type===H4){if(Z.hasAttribute(K)){var B=Z.getAttribute(K);if(B==="")return!0;if(C1(X,Q,G,!1))return B;if(B===""+Q)return Q;return B}}else if(Z.hasAttribute(K)){if(C1(X,Q,G,!1))return Z.getAttribute(K);if(G.type===J4)return Q;J=Z.getAttribute(K)}if(C1(X,Q,G,!1))return J===null?Q:J;else if(J===""+Q)return Q;else return J}}function x8(Z,X,Q,G){{if(!B1(X))return;if(!Z.hasAttribute(X))return Q===void 0?void 0:null;var z=Z.getAttribute(X);if(E4(Q,X),z===""+Q)return Q;return z}}function C8(Z,X,Q,G){var z=A4(X);if(x1(X,z,G))return;if(C1(X,Q,z,G))Q=null;if(G||z===null){if(B1(X)){var K=X;if(Q===null)Z.removeAttribute(K);else E4(Q,X),Z.setAttribute(K,""+Q)}return}var J=z.mustUseProperty;if(J){var B=z.propertyName;if(Q===null){var W=z.type;Z[B]=W===J4?!1:""}else Z[B]=Q;return}var{attributeName:H,attributeNamespace:q}=z;if(Q===null)Z.removeAttribute(H);else{var w=z.type,I;if(w===J4||w===H4&&Q===!0)I="";else if(E4(Q,H),I=""+Q,z.sanitizeURL)w5(I.toString());if(q)Z.setAttributeNS(q,H,I);else Z.setAttribute(H,I)}}var t4=Symbol.for("react.element"),O8=Symbol.for("react.portal"),g8=Symbol.for("react.fragment"),L=Symbol.for("react.strict_mode"),h=Symbol.for("react.profiler"),a=Symbol.for("react.provider"),D0=Symbol.for("react.context"),g=Symbol.for("react.forward_ref"),n0=Symbol.for("react.suspense"),i=Symbol.for("react.suspense_list"),h0=Symbol.for("react.memo"),X1=Symbol.for("react.lazy"),P1=Symbol.for("react.scope"),Y=Symbol.for("react.debug_trace_mode"),j=Symbol.for("react.offscreen"),v=Symbol.for("react.legacy_hidden"),C=Symbol.for("react.cache"),b=Symbol.for("react.tracing_marker"),u=Symbol.iterator,d="@@iterator";function B0(Z){if(Z===null||typeof Z!=="object")return null;var X=u&&Z[u]||Z[d];if(typeof X==="function")return X;return null}var J0=Object.assign,U1=0,r0,b0,M0,j0,F0,c0,o1;function e4(){}e4.__reactDisabledLog=!0;function c5(){{if(U1===0){r0=console.log,b0=console.info,M0=console.warn,j0=console.error,F0=console.group,c0=console.groupCollapsed,o1=console.groupEnd;var Z={configurable:!0,enumerable:!0,value:e4,writable:!0};Object.defineProperties(console,{info:Z,log:Z,warn:Z,error:Z,group:Z,groupCollapsed:Z,groupEnd:Z})}U1++}}function $G(){{if(U1--,U1===0){var Z={configurable:!0,enumerable:!0,writable:!0};Object.defineProperties(console,{log:J0({},Z,{value:r0}),info:J0({},Z,{value:b0}),warn:J0({},Z,{value:M0}),error:J0({},Z,{value:j0}),group:J0({},Z,{value:F0}),groupCollapsed:J0({},Z,{value:c0}),groupEnd:J0({},Z,{value:o1})})}if(U1<0)$("disabledDepth fell below zero. This is a bug in React. Please file an issue.")}}var J6=_.ReactCurrentDispatcher,_9;function f8(Z,X,Q){{if(_9===void 0)try{throw Error()}catch(z){var G=z.stack.trim().match(/\n( *(at )?)/);_9=G&&G[1]||""}return` -`+_9+Z}}var l5=!1,o5;{var Q7=typeof WeakMap==="function"?WeakMap:Map;o5=new Q7}function B6(Z,X){if(!Z||l5)return"";{var Q=o5.get(Z);if(Q!==void 0)return Q}var G;l5=!0;var z=Error.prepareStackTrace;Error.prepareStackTrace=void 0;var K;K=J6.current,J6.current=null,c5();try{if(X){var J=function(){throw Error()};if(Object.defineProperty(J.prototype,"props",{set:function(){throw Error()}}),typeof Reflect==="object"&&Reflect.construct){try{Reflect.construct(J,[])}catch(D){G=D}Reflect.construct(Z,[],J)}else{try{J.call()}catch(D){G=D}Z.call(J.prototype)}}else{try{throw Error()}catch(D){G=D}Z()}}catch(D){if(D&&G&&typeof D.stack==="string"){var B=D.stack.split(` -`),W=G.stack.split(` -`),H=B.length-1,q=W.length-1;while(H>=1&&q>=0&&B[H]!==W[q])q--;for(;H>=1&&q>=0;H--,q--)if(B[H]!==W[q]){if(H!==1||q!==1)do if(H--,q--,q<0||B[H]!==W[q]){var w=` -`+B[H].replace(" at new "," at ");if(Z.displayName&&w.includes(""))w=w.replace("",Z.displayName);if(typeof Z==="function")o5.set(Z,w);return w}while(H>=1&&q>=0);break}}}finally{l5=!1,J6.current=K,$G(),Error.prepareStackTrace=z}var I=Z?Z.displayName||Z.name:"",R=I?f8(I):"";if(typeof Z==="function")o5.set(Z,R);return R}function oZ(Z,X,Q){return B6(Z,!0)}function W6(Z,X,Q){return B6(Z,!1)}function qG(Z){var X=Z.prototype;return!!(X&&X.isReactComponent)}function s5(Z,X,Q){if(Z==null)return"";if(typeof Z==="function")return B6(Z,qG(Z));if(typeof Z==="string")return f8(Z);switch(Z){case n0:return f8("Suspense");case i:return f8("SuspenseList")}if(typeof Z==="object")switch(Z.$$typeof){case g:return W6(Z.render);case h0:return s5(Z.type,X,Q);case X1:{var G=Z,z=G._payload,K=G._init;try{return s5(K(z),X,Q)}catch(J){}}}return""}function sZ(Z){var X=Z._debugOwner?Z._debugOwner.type:null,Q=Z._debugSource;switch(Z.tag){case p:return f8(Z.type);case e1:return f8("Lazy");case O0:return f8("Suspense");case s0:return f8("SuspenseList");case t:case q0:case i0:return W6(Z.type);case L0:return W6(Z.type.render);case s:return oZ(Z.type);default:return""}}function U6(Z){try{var X="",Q=Z;do X+=sZ(Q),Q=Q.return;while(Q);return X}catch(G){return` -Error generating stack: `+G.message+` -`+G.stack}}function G7(Z,X,Q){var G=Z.displayName;if(G)return G;var z=X.displayName||X.name||"";return z!==""?Q+"("+z+")":Q}function nZ(Z){return Z.displayName||"Context"}function H1(Z){if(Z==null)return null;if(typeof Z.tag==="number")$("Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue.");if(typeof Z==="function")return Z.displayName||Z.name||null;if(typeof Z==="string")return Z;switch(Z){case g8:return"Fragment";case O8:return"Portal";case h:return"Profiler";case L:return"StrictMode";case n0:return"Suspense";case i:return"SuspenseList"}if(typeof Z==="object")switch(Z.$$typeof){case D0:var X=Z;return nZ(X)+".Consumer";case a:var Q=Z;return nZ(Q._context)+".Provider";case g:return G7(Z,Z.render,"ForwardRef");case h0:var G=Z.displayName||null;if(G!==null)return G;return H1(Z.type)||"Memo";case X1:{var z=Z,K=z._payload,J=z._init;try{return H1(J(K))}catch(B){return null}}}return null}function pZ(Z,X,Q){var G=X.displayName||X.name||"";return Z.displayName||(G!==""?Q+"("+G+")":Q)}function H6(Z){return Z.displayName||"Context"}function o0(Z){var{tag:X,type:Q}=Z;switch(X){case N:return"Cache";case z4:var G=Q;return H6(G)+".Consumer";case k1:var z=Q;return H6(z._context)+".Provider";case Z4:return"DehydratedFragment";case L0:return pZ(Q,Q.render,"ForwardRef");case F1:return"Fragment";case p:return Q;case I0:return"Portal";case c:return"Root";case y0:return"Text";case e1:return H1(Q);case Y1:if(Q===L)return"StrictMode";return"Mode";case S1:return"Offscreen";case I1:return"Profiler";case A1:return"Scope";case O0:return"Suspense";case s0:return"SuspenseList";case y:return"TracingMarker";case s:case t:case i1:case q0:case N0:case i0:if(typeof Q==="function")return Q.displayName||Q.name||null;if(typeof Q==="string")return Q;break}return null}var aZ=_.ReactDebugCurrentFrame,d4=null,P9=!1;function n5(){{if(d4===null)return null;var Z=d4._debugOwner;if(Z!==null&&typeof Z!=="undefined")return o0(Z)}return null}function rZ(){{if(d4===null)return"";return U6(d4)}}function _4(){aZ.getCurrentStack=null,d4=null,P9=!1}function s1(Z){aZ.getCurrentStack=Z===null?null:rZ,d4=Z,P9=!1}function tZ(){return d4}function F8(Z){P9=Z}function W8(Z){return""+Z}function Q5(Z){switch(typeof Z){case"boolean":case"number":case"string":case"undefined":return Z;case"object":return s4(Z),Z;default:return""}}var YG={button:!0,checkbox:!0,image:!0,hidden:!0,radio:!0,reset:!0,submit:!0};function z7(Z,X){{if(!(YG[X.type]||X.onChange||X.onInput||X.readOnly||X.disabled||X.value==null))$("You provided a `value` prop to a form field without an `onChange` handler. This will render a read-only field. If the field should be mutable use `defaultValue`. Otherwise, set either `onChange` or `readOnly`.");if(!(X.onChange||X.readOnly||X.disabled||X.checked==null))$("You provided a `checked` prop to a form field without an `onChange` handler. This will render a read-only field. If the field should be mutable use `defaultChecked`. Otherwise, set either `onChange` or `readOnly`.")}}function R9(Z){var{type:X,nodeName:Q}=Z;return Q&&Q.toLowerCase()==="input"&&(X==="checkbox"||X==="radio")}function eZ(Z){return Z._valueTracker}function p5(Z){Z._valueTracker=null}function ZX(Z){var X="";if(!Z)return X;if(R9(Z))X=Z.checked?"true":"false";else X=Z.value;return X}function XX(Z){var X=R9(Z)?"checked":"value",Q=Object.getOwnPropertyDescriptor(Z.constructor.prototype,X);s4(Z[X]);var G=""+Z[X];if(Z.hasOwnProperty(X)||typeof Q==="undefined"||typeof Q.get!=="function"||typeof Q.set!=="function")return;var{get:z,set:K}=Q;Object.defineProperty(Z,X,{configurable:!0,get:function(){return z.call(this)},set:function(B){s4(B),G=""+B,K.call(this,B)}}),Object.defineProperty(Z,X,{enumerable:Q.enumerable});var J={getValue:function(){return G},setValue:function(B){s4(B),G=""+B},stopTracking:function(){p5(Z),delete Z[X]}};return J}function O5(Z){if(eZ(Z))return;Z._valueTracker=XX(Z)}function K7(Z){if(!Z)return!1;var X=eZ(Z);if(!X)return!0;var Q=X.getValue(),G=ZX(Z);if(G!==Q)return X.setValue(G),!0;return!1}function a5(Z){if(Z=Z||(typeof document!=="undefined"?document:void 0),typeof Z==="undefined")return null;try{return Z.activeElement||Z.body}catch(X){return Z.body}}var J7=!1,QX=!1,GX=!1,zX=!1;function KX(Z){var X=Z.type==="checkbox"||Z.type==="radio";return X?Z.checked!=null:Z.value!=null}function U(Z,X){var Q=Z,G=X.checked,z=J0({},X,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:G!=null?G:Q._wrapperState.initialChecked});return z}function M(Z,X){{if(z7("input",X),X.checked!==void 0&&X.defaultChecked!==void 0&&!QX)$("%s contains an input of type %s with both checked and defaultChecked props. Input elements must be either controlled or uncontrolled (specify either the checked prop, or the defaultChecked prop, but not both). Decide between using a controlled or uncontrolled input element and remove one of these props. More info: https://reactjs.org/link/controlled-components",n5()||"A component",X.type),QX=!0;if(X.value!==void 0&&X.defaultValue!==void 0&&!J7)$("%s contains an input of type %s with both value and defaultValue props. Input elements must be either controlled or uncontrolled (specify either the value prop, or the defaultValue prop, but not both). Decide between using a controlled or uncontrolled input element and remove one of these props. More info: https://reactjs.org/link/controlled-components",n5()||"A component",X.type),J7=!0}var Q=Z,G=X.defaultValue==null?"":X.defaultValue;Q._wrapperState={initialChecked:X.checked!=null?X.checked:X.defaultChecked,initialValue:Q5(X.value!=null?X.value:G),controlled:KX(X)}}function P(Z,X){var Q=Z,G=X.checked;if(G!=null)C8(Q,"checked",G,!1)}function k(Z,X){var Q=Z;{var G=KX(X);if(!Q._wrapperState.controlled&&G&&!zX)$("A component is changing an uncontrolled input to be controlled. This is likely caused by the value changing from undefined to a defined value, which should not happen. Decide between using a controlled or uncontrolled input element for the lifetime of the component. More info: https://reactjs.org/link/controlled-components"),zX=!0;if(Q._wrapperState.controlled&&!G&&!GX)$("A component is changing a controlled input to be uncontrolled. This is likely caused by the value changing from a defined to undefined, which should not happen. Decide between using a controlled or uncontrolled input element for the lifetime of the component. More info: https://reactjs.org/link/controlled-components"),GX=!0}P(Z,X);var z=Q5(X.value),K=X.type;if(z!=null){if(K==="number"){if(z===0&&Q.value===""||Q.value!=z)Q.value=W8(z)}else if(Q.value!==W8(z))Q.value=W8(z)}else if(K==="submit"||K==="reset"){Q.removeAttribute("value");return}if(X.hasOwnProperty("value"))v0(Q,X.type,z);else if(X.hasOwnProperty("defaultValue"))v0(Q,X.type,Q5(X.defaultValue));if(X.checked==null&&X.defaultChecked!=null)Q.defaultChecked=!!X.defaultChecked}function m(Z,X,Q){var G=Z;if(X.hasOwnProperty("value")||X.hasOwnProperty("defaultValue")){var z=X.type,K=z==="submit"||z==="reset";if(K&&(X.value===void 0||X.value===null))return;var J=W8(G._wrapperState.initialValue);if(!Q){if(J!==G.value)G.value=J}G.defaultValue=J}var B=G.name;if(B!=="")G.name="";if(G.defaultChecked=!G.defaultChecked,G.defaultChecked=!!G._wrapperState.initialChecked,B!=="")G.name=B}function g0(Z,X){var Q=Z;k(Q,X),U0(Q,X)}function U0(Z,X){var Q=X.name;if(X.type==="radio"&&Q!=null){var G=Z;while(G.parentNode)G=G.parentNode;E4(Q,"name");var z=G.querySelectorAll("input[name="+JSON.stringify(""+Q)+'][type="radio"]');for(var K=0;K.")});else if(X.dangerouslySetInnerHTML!=null){if(!T1)T1=!0,$("Pass a `value` prop if you set dangerouslyInnerHTML so React knows which value should be selected.")}}if(X.selected!=null&&!G1)$("Use the `defaultValue` or `value` props on must be an array if `multiple` is true.%s",Q,B7());else if(!Z.multiple&&G)$("The `%s` prop supplied to