Skip to content

Commit

Permalink
Fix standalone mode with appDir running in a single process (#49116)
Browse files Browse the repository at this point in the history
Fixes #49055, fixes #48918. 

App dir will always require the server to run in the workers mode, so it
can keep a separate Node.js process for pages. This PR updates the
standalone server to initialize a "standalone server" (which works
similar to `start-server`), and changes the tracked files to include
Jest worker.
  • Loading branch information
shuding authored May 4, 2023
1 parent c5406fc commit 83b774e
Show file tree
Hide file tree
Showing 17 changed files with 217 additions and 84 deletions.
2 changes: 1 addition & 1 deletion docs/advanced-features/custom-server.md
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ app.prepare().then(() => {
} catch (err) {
console.error('Error occurred handling', req.url, err)
res.statusCode = 500
res.end('internal server error')
res.end('Internal Server Error')
}
})
.once('error', (err) => {
Expand Down
50 changes: 37 additions & 13 deletions packages/next/src/build/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1899,10 +1899,21 @@ export default async function build(
config.experimental?.turbotrace?.contextDirectory ??
outputFileTracingRoot

// Under standalone mode, we need to trace the extra IPC server and
// worker files.
const isStandalone = config.output === 'standalone'

const nextServerEntry = require.resolve(
'next/dist/server/next-server'
)
const toTrace = [nextServerEntry]
const toTrace = [
nextServerEntry,
isStandalone
? require.resolve(
'next/dist/server/lib/render-server-standalone'
)
: null,
].filter(nonNullable)

// ensure we trace any dependencies needed for custom
// incremental cache handler
Expand All @@ -1927,7 +1938,7 @@ export default async function build(
'**/*.d.ts',
'**/*.map',
'**/next/dist/pages/**/*',
'**/next/dist/compiled/jest-worker/**/*',
isStandalone ? null : '**/next/dist/compiled/jest-worker/**/*',
'**/next/dist/compiled/webpack/(bundle4|bundle5).js',
'**/node_modules/webpack5/**/*',
'**/next/dist/server/lib/squoosh/**/*.wasm',
Expand All @@ -1944,7 +1955,8 @@ export default async function build(
? ['**/next/dist/compiled/@ampproject/toolbox-optimizer/**/*']
: []),
...additionalIgnores,
]
].filter(nonNullable)

const ignoreFn = (pathname: string) => {
if (path.isAbsolute(pathname) && !pathname.startsWith(root)) {
return true
Expand All @@ -1957,6 +1969,26 @@ export default async function build(
}
const traceContext = path.join(nextServerEntry, '..', '..')
const tracedFiles = new Set<string>()

function addToTracedFiles(base: string, file: string) {
tracedFiles.add(
path
.relative(distDir, path.join(base, file))
.replace(/\\/g, '/')
)
}

if (isStandalone) {
addToTracedFiles(
'',
require.resolve('next/dist/compiled/jest-worker/processChild')
)
addToTracedFiles(
'',
require.resolve('next/dist/compiled/jest-worker/threadChild')
)
}

if (config.experimental.turbotrace) {
const files: string[] = await nodeFileTrace(
{
Expand All @@ -1972,11 +2004,7 @@ export default async function build(
)
for (const file of files) {
if (!ignoreFn(path.join(traceContext, file))) {
tracedFiles.add(
path
.relative(distDir, path.join(traceContext, file))
.replace(/\\/g, '/')
)
addToTracedFiles(traceContext, file)
}
}
} else {
Expand All @@ -1987,11 +2015,7 @@ export default async function build(
})

serverResult.fileList.forEach((file) => {
tracedFiles.add(
path
.relative(distDir, path.join(root, file))
.replace(/\\/g, '/')
)
addToTracedFiles(root, file)
})
}
await promises.writeFile(
Expand Down
38 changes: 15 additions & 23 deletions packages/next/src/build/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1913,17 +1913,20 @@ export async function copyTracedFiles(
serverOutputPath,
`${
moduleType
? `import Server from 'next/dist/server/next-server.js'
import http from 'http'
? `import http from 'http'
import path from 'path'
import { fileURLToPath } from 'url'
const __dirname = fileURLToPath(new URL('.', import.meta.url))
const NextServer = Server.default`
import { createServerHandler } from 'next/dist/server/lib/render-server-standalone.js'
`
: `
const NextServer = require('next/dist/server/next-server').default
const http = require('http')
const path = require('path')`
const path = require('path')
const { createServerHandler } = require('next/dist/server/lib/render-server-standalone')`
}
const dir = path.join(__dirname)
process.env.NODE_ENV = 'production'
process.chdir(__dirname)
Expand All @@ -1944,24 +1947,15 @@ const nextConfig = ${JSON.stringify({
distDir: `./${path.relative(dir, distDir)}`,
})}
${
// In standalone mode, we don't have separated render workers so if both
// app and pages are used, we need to resolve to the prebundled React
// to ensure the correctness of the version for app.
`\
if (nextConfig && nextConfig.experimental && nextConfig.experimental.appDir) {
process.env.__NEXT_PRIVATE_PREBUNDLED_REACT = nextConfig.experimental.serverActions ? 'experimental' : 'next'
}
`
}
process.env.__NEXT_PRIVATE_STANDALONE_CONFIG = JSON.stringify(nextConfig)
const server = http.createServer(async (req, res) => {
try {
await handler(req, res)
} catch (err) {
console.error(err);
res.statusCode = 500
res.end('internal server error')
res.end('Internal Server Error')
}
})
Expand All @@ -1972,20 +1966,18 @@ if (
) {
server.keepAliveTimeout = keepAliveTimeout
}
server.listen(currentPort, (err) => {
server.listen(currentPort, async (err) => {
if (err) {
console.error("Failed to start server", err)
process.exit(1)
}
const nextServer = new NextServer({
hostname,
handler = await createServerHandler({
port: currentPort,
dir: path.join(__dirname),
dev: false,
customServer: false,
hostname,
dir,
conf: nextConfig,
})
handler = nextServer.getRequestHandler()
console.log(
'Listening on port',
Expand Down
4 changes: 4 additions & 0 deletions packages/next/src/server/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -689,6 +689,10 @@ export default async function loadConfig(
rawConfig?: boolean,
silent?: boolean
): Promise<NextConfigComplete> {
if (process.env.__NEXT_PRIVATE_STANDALONE_CONFIG) {
return JSON.parse(process.env.__NEXT_PRIVATE_STANDALONE_CONFIG)
}

const curLog = silent
? {
warn: () => {},
Expand Down
2 changes: 1 addition & 1 deletion packages/next/src/server/image-optimizer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -460,7 +460,7 @@ export async function optimizeImage({
console.error(
`Error: 'sharp' is required to be installed in standalone mode for the image optimization to function correctly. Read more at: https://nextjs.org/docs/messages/sharp-missing-in-production`
)
throw new ImageError(500, 'internal server error')
throw new ImageError(500, 'Internal Server Error')
}
// Show sharp warning in production once
if (showSharpMissingWarning) {
Expand Down
107 changes: 107 additions & 0 deletions packages/next/src/server/lib/render-server-standalone.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@
import type { IncomingMessage, ServerResponse } from 'http'
import type { ChildProcess } from 'child_process'

import httpProxy from 'next/dist/compiled/http-proxy'
import { Worker } from 'next/dist/compiled/jest-worker'
import { normalizeRepeatedSlashes } from '../../shared/lib/utils'

const renderServerPath = require.resolve('./render-server')

export const createServerHandler = async ({
port,
hostname,
dir,
minimalMode,
}: {
port: number
hostname: string
dir: string
minimalMode: boolean
}) => {
const routerWorker = new Worker(renderServerPath, {
numWorkers: 1,
maxRetries: 10,
forkOptions: {
env: {
FORCE_COLOR: '1',
...process.env,
},
},
exposedMethods: ['initialize'],
}) as any as InstanceType<typeof Worker> & {
initialize: typeof import('./render-server').initialize
}

let didInitialize = false

for (const _worker of ((routerWorker as any)._workerPool?._workers || []) as {
_child: ChildProcess
}[]) {
// eslint-disable-next-line no-loop-func
_worker._child.on('exit', (code, signal) => {
// catch failed initializing without retry
if ((code || signal) && !didInitialize) {
routerWorker?.end()
process.exit(1)
}
})
}

const workerStdout = routerWorker.getStdout()
const workerStderr = routerWorker.getStderr()

workerStdout.on('data', (data) => {
process.stdout.write(data)
})
workerStderr.on('data', (data) => {
process.stderr.write(data)
})

const { port: routerPort } = await routerWorker.initialize({
dir,
port,
dev: false,
hostname,
minimalMode,
workerType: 'router',
})
didInitialize = true

const getProxyServer = (pathname: string) => {
const targetUrl = `http://${hostname}:${routerPort}${pathname}`
const proxyServer = httpProxy.createProxy({
target: targetUrl,
changeOrigin: false,
ignorePath: true,
xfwd: true,
ws: true,
followRedirects: false,
})
return proxyServer
}

// proxy to router worker
return async (req: IncomingMessage, res: ServerResponse) => {
const urlParts = (req.url || '').split('?')
const urlNoQuery = urlParts[0]

// this normalizes repeated slashes in the path e.g. hello//world ->
// hello/world or backslashes to forward slashes, this does not
// handle trailing slash as that is handled the same as a next.config.js
// redirect
if (urlNoQuery?.match(/(\\|\/\/)/)) {
const cleanUrl = normalizeRepeatedSlashes(req.url!)
res.statusCode = 308
res.setHeader('Location', cleanUrl)
res.end(cleanUrl)
return
}
const proxyServer = getProxyServer(req.url || '/')
proxyServer.web(req, res)
proxyServer.on('error', (err) => {
res.statusCode = 500
res.end('Internal Server Error')
console.error(err)
})
}
}
31 changes: 19 additions & 12 deletions packages/next/src/server/lib/render-server.ts
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ export async function initialize(opts: {
dir: string
port: number
dev: boolean
minimalMode?: boolean
hostname?: string
workerType: 'router' | 'render'
keepAliveTimeout?: number
Expand All @@ -54,18 +55,24 @@ export async function initialize(opts: {
let requestHandler: RequestHandler

const server = http.createServer((req, res) => {
return requestHandler(req, res).finally(() => {
if (
process.memoryUsage().heapUsed / 1024 / 1024 >
MAXIMUM_HEAP_SIZE_ALLOWED
) {
warn(
'The server is running out of memory, restarting to free up memory.'
)
server.close()
process.exit(WORKER_SELF_EXIT_CODE)
}
})
return requestHandler(req, res)
.catch((err) => {
res.statusCode = 500
res.end('Internal Server Error')
console.error(err)
})
.finally(() => {
if (
process.memoryUsage().heapUsed / 1024 / 1024 >
MAXIMUM_HEAP_SIZE_ALLOWED
) {
warn(
'The server is running out of memory, restarting to free up memory.'
)
server.close()
process.exit(WORKER_SELF_EXIT_CODE)
}
})
})

if (opts.keepAliveTimeout) {
Expand Down
2 changes: 2 additions & 0 deletions packages/next/src/server/lib/server-ipc/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,8 @@ export const createWorker = (
__NEXT_PRIVATE_RENDER_WORKER: type,
__NEXT_PRIVATE_ROUTER_IPC_PORT: ipcPort + '',
__NEXT_PRIVATE_ROUTER_IPC_KEY: ipcValidationKey,
__NEXT_PRIVATE_STANDALONE_CONFIG:
process.env.__NEXT_PRIVATE_STANDALONE_CONFIG,
NODE_ENV: process.env.NODE_ENV,
...(type === 'app'
? {
Expand Down
1 change: 1 addition & 0 deletions packages/next/src/server/next-server.ts
Original file line number Diff line number Diff line change
Expand Up @@ -263,6 +263,7 @@ export default class NextNodeServer extends BaseServer {
dir: this.dir,
workerType: 'render',
hostname: this.hostname,
minimalMode: this.minimalMode,
dev: !!options.dev,
}
const { createWorker, createIpcServer } =
Expand Down
8 changes: 5 additions & 3 deletions packages/next/src/server/next.ts
Original file line number Diff line number Diff line change
Expand Up @@ -169,9 +169,11 @@ export class NextServer {
this.serverPromise = this.loadConfig().then(async (conf) => {
if (!this.options.dev) {
if (conf.output === 'standalone') {
log.warn(
`"next start" does not work with "output: standalone" configuration. Use "node .next/standalone/server.js" instead.`
)
if (!process.env.__NEXT_PRIVATE_STANDALONE_CONFIG) {
log.warn(
`"next start" does not work with "output: standalone" configuration. Use "node .next/standalone/server.js" instead.`
)
}
} else if (conf.output === 'export') {
throw new Error(
`"next start" does not work with "output: export" configuration. Use "npx serve@latest out" instead.`
Expand Down
2 changes: 1 addition & 1 deletion test/e2e/streaming-ssr/custom-server/server.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ const server = http.createServer(async (req, res) => {
} catch (err) {
console.error(err)
res.statusCode = 500
res.end('internal server error')
res.end('Internal Server Error')
}
})
const currentPort = parseInt(process.env.PORT, 10) || 3000
Expand Down
Loading

1 comment on commit 83b774e

@ijjk
Copy link
Member

@ijjk ijjk commented on 83b774e May 4, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Stats from current release

Default Build (Increase detected ⚠️)
General Overall increase ⚠️
vercel/next.js canary v13.3.4 vercel/next.js refs/heads/canary Change
buildDuration 36.1s 38.3s ⚠️ +2.2s
buildDurationCached 10.5s 11s ⚠️ +481ms
nodeModulesSize 128 MB 130 MB ⚠️ +2.03 MB
nextStartRea..uration (ms) 426ms 423ms -3ms
Client Bundles (main, webpack) Overall increase ⚠️
vercel/next.js canary v13.3.4 vercel/next.js refs/heads/canary Change
846-HASH.js gzip 23.5 kB 24.5 kB ⚠️ +991 B
869.HASH.js gzip 181 B 180 B -1 B
974ec2d0-HASH.js gzip 50.5 kB 50.5 kB ⚠️ +70 B
main-app-HASH.js gzip 216 B 212 B -4 B
main-HASH.js gzip 83.9 kB 84 kB ⚠️ +97 B
webpack-HASH.js gzip 1.7 kB 1.7 kB -2 B
Overall change 160 kB 161 kB ⚠️ +1.15 kB
Legacy Client Bundles (polyfills)
vercel/next.js canary v13.3.4 vercel/next.js refs/heads/canary Change
polyfills-HASH.js gzip 31 kB 31 kB
Overall change 31 kB 31 kB
Client Pages Overall decrease ✓
vercel/next.js canary v13.3.4 vercel/next.js refs/heads/canary Change
_app-HASH.js gzip 192 B 192 B
_error-HASH.js gzip 180 B 179 B -1 B
amp-HASH.js gzip 503 B 500 B -3 B
css-HASH.js gzip 801 B 799 B -2 B
dynamic-HASH.js gzip 2.29 kB 2.28 kB -7 B
edge-ssr-HASH.js gzip 253 B 253 B
head-HASH.js gzip 828 B 827 B -1 B
hooks-HASH.js gzip 849 B 847 B -2 B
image-HASH.js gzip 4.27 kB 4.26 kB -8 B
index-HASH.js gzip 252 B 254 B ⚠️ +2 B
link-HASH.js gzip 3.03 kB 3.04 kB ⚠️ +12 B
routerDirect..HASH.js gzip 781 B 782 B ⚠️ +1 B
script-HASH.js gzip 858 B 856 B -2 B
withRouter-HASH.js gzip 782 B 779 B -3 B
85e02e95b279..7e3.css gzip 107 B 107 B
Overall change 16 kB 16 kB -14 B
Client Build Manifests
vercel/next.js canary v13.3.4 vercel/next.js refs/heads/canary Change
_buildManifest.js gzip 482 B 482 B
Overall change 482 B 482 B
Rendered Page Sizes Overall decrease ✓
vercel/next.js canary v13.3.4 vercel/next.js refs/heads/canary Change
index.html gzip 491 B 490 B -1 B
link.html gzip 506 B 505 B -1 B
withRouter.html gzip 487 B 486 B -1 B
Overall change 1.48 kB 1.48 kB -3 B
Edge SSR bundle Size Overall increase ⚠️
vercel/next.js canary v13.3.4 vercel/next.js refs/heads/canary Change
edge-ssr.js gzip 77.7 kB 78 kB ⚠️ +293 B
page.js gzip 124 kB 126 kB ⚠️ +1.74 kB
Overall change 202 kB 204 kB ⚠️ +2.04 kB
Middleware size Overall increase ⚠️
vercel/next.js canary v13.3.4 vercel/next.js refs/heads/canary Change
middleware-b..fest.js gzip 603 B 606 B ⚠️ +3 B
middleware-r..fest.js gzip 145 B 144 B -1 B
middleware.js gzip 21.2 kB 21.2 kB ⚠️ +5 B
edge-runtime..pack.js gzip 1.83 kB 1.83 kB
Overall change 23.7 kB 23.8 kB ⚠️ +7 B

Diffs

Diff for page.js

Diff too large to display

Diff for middleware-b..-manifest.js
@@ -7,82 +7,82 @@ self.__BUILD_MANIFEST = {
     "static/BUILD_ID/_ssgManifest.js",
   ],
   rootMainFiles: [
-    "static/chunks/webpack-d9965445ebce461e.js",
-    "static/chunks/974ec2d0-ebc295971fdc0876.js",
-    "static/chunks/846-32099dc947789360.js",
-    "static/chunks/main-app-9f2469593a0cf7ee.js",
+    "static/chunks/webpack-c61449b956bd4ddc.js",
+    "static/chunks/39549b6b-d84f1b6a8670acf0.js",
+    "static/chunks/992-1e79df9c61d7a30a.js",
+    "static/chunks/main-app-4271fe74eadabaae.js",
   ],
   pages: {
     "/": [
-      "static/chunks/webpack-d9965445ebce461e.js",
-      "static/chunks/main-3f40b1ab38b79545.js",
-      "static/chunks/pages/index-96b4df8f97c0f01a.js",
+      "static/chunks/webpack-c61449b956bd4ddc.js",
+      "static/chunks/main-c75524de2a35a0cd.js",
+      "static/chunks/pages/index-b21e2d2005e858d6.js",
     ],
     "/_app": [
-      "static/chunks/webpack-d9965445ebce461e.js",
-      "static/chunks/main-3f40b1ab38b79545.js",
-      "static/chunks/pages/_app-39c49a32fdfb4902.js",
+      "static/chunks/webpack-c61449b956bd4ddc.js",
+      "static/chunks/main-c75524de2a35a0cd.js",
+      "static/chunks/pages/_app-fd2fd11c0153c1f4.js",
     ],
     "/_error": [
-      "static/chunks/webpack-d9965445ebce461e.js",
-      "static/chunks/main-3f40b1ab38b79545.js",
-      "static/chunks/pages/_error-d79135b4d7090152.js",
+      "static/chunks/webpack-c61449b956bd4ddc.js",
+      "static/chunks/main-c75524de2a35a0cd.js",
+      "static/chunks/pages/_error-65d572d29e2548b7.js",
     ],
     "/amp": [
-      "static/chunks/webpack-d9965445ebce461e.js",
-      "static/chunks/main-3f40b1ab38b79545.js",
-      "static/chunks/pages/amp-274faba37a339e17.js",
+      "static/chunks/webpack-c61449b956bd4ddc.js",
+      "static/chunks/main-c75524de2a35a0cd.js",
+      "static/chunks/pages/amp-648f2b01fe81161d.js",
     ],
     "/css": [
-      "static/chunks/webpack-d9965445ebce461e.js",
-      "static/chunks/main-3f40b1ab38b79545.js",
+      "static/chunks/webpack-c61449b956bd4ddc.js",
+      "static/chunks/main-c75524de2a35a0cd.js",
       "static/css/94fdbc56eafa2039.css",
-      "static/chunks/pages/css-dceecca19c67df2f.js",
+      "static/chunks/pages/css-ac86cb27ef341466.js",
     ],
     "/dynamic": [
-      "static/chunks/webpack-d9965445ebce461e.js",
-      "static/chunks/main-3f40b1ab38b79545.js",
-      "static/chunks/pages/dynamic-c209669767e97b48.js",
+      "static/chunks/webpack-c61449b956bd4ddc.js",
+      "static/chunks/main-c75524de2a35a0cd.js",
+      "static/chunks/pages/dynamic-1b6396304af9a231.js",
     ],
     "/edge-ssr": [
-      "static/chunks/webpack-d9965445ebce461e.js",
-      "static/chunks/main-3f40b1ab38b79545.js",
-      "static/chunks/pages/edge-ssr-8fc8ab80d42f93e7.js",
+      "static/chunks/webpack-c61449b956bd4ddc.js",
+      "static/chunks/main-c75524de2a35a0cd.js",
+      "static/chunks/pages/edge-ssr-227038c60ef6104e.js",
     ],
     "/head": [
-      "static/chunks/webpack-d9965445ebce461e.js",
-      "static/chunks/main-3f40b1ab38b79545.js",
-      "static/chunks/pages/head-c50c98836e5e388a.js",
+      "static/chunks/webpack-c61449b956bd4ddc.js",
+      "static/chunks/main-c75524de2a35a0cd.js",
+      "static/chunks/pages/head-80b2a5deecd9aaf0.js",
     ],
     "/hooks": [
-      "static/chunks/webpack-d9965445ebce461e.js",
-      "static/chunks/main-3f40b1ab38b79545.js",
-      "static/chunks/pages/hooks-2ff3838a24ad32e8.js",
+      "static/chunks/webpack-c61449b956bd4ddc.js",
+      "static/chunks/main-c75524de2a35a0cd.js",
+      "static/chunks/pages/hooks-00630999feaad71f.js",
     ],
     "/image": [
-      "static/chunks/webpack-d9965445ebce461e.js",
-      "static/chunks/main-3f40b1ab38b79545.js",
-      "static/chunks/pages/image-83bb7184c6d95af7.js",
+      "static/chunks/webpack-c61449b956bd4ddc.js",
+      "static/chunks/main-c75524de2a35a0cd.js",
+      "static/chunks/pages/image-a9946a9b6f619122.js",
     ],
     "/link": [
-      "static/chunks/webpack-d9965445ebce461e.js",
-      "static/chunks/main-3f40b1ab38b79545.js",
-      "static/chunks/pages/link-9852e766f2d5caf3.js",
+      "static/chunks/webpack-c61449b956bd4ddc.js",
+      "static/chunks/main-c75524de2a35a0cd.js",
+      "static/chunks/pages/link-3a7bb39cf39dd521.js",
     ],
     "/routerDirect": [
-      "static/chunks/webpack-d9965445ebce461e.js",
-      "static/chunks/main-3f40b1ab38b79545.js",
-      "static/chunks/pages/routerDirect-aab44264666858ac.js",
+      "static/chunks/webpack-c61449b956bd4ddc.js",
+      "static/chunks/main-c75524de2a35a0cd.js",
+      "static/chunks/pages/routerDirect-8e71be3181f26659.js",
     ],
     "/script": [
-      "static/chunks/webpack-d9965445ebce461e.js",
-      "static/chunks/main-3f40b1ab38b79545.js",
-      "static/chunks/pages/script-e2e495a834a22421.js",
+      "static/chunks/webpack-c61449b956bd4ddc.js",
+      "static/chunks/main-c75524de2a35a0cd.js",
+      "static/chunks/pages/script-4f00101dadfc5ea1.js",
     ],
     "/withRouter": [
-      "static/chunks/webpack-d9965445ebce461e.js",
-      "static/chunks/main-3f40b1ab38b79545.js",
-      "static/chunks/pages/withRouter-331bb6165873d961.js",
+      "static/chunks/webpack-c61449b956bd4ddc.js",
+      "static/chunks/main-c75524de2a35a0cd.js",
+      "static/chunks/pages/withRouter-829c5d0ec0bf0aa7.js",
     ],
   },
   ampFirstPages: [],
Diff for middleware-r..-manifest.js
@@ -1,6 +1,6 @@
 self.__REACT_LOADABLE_MANIFEST = {
   "dynamic.js -> ../components/hello": {
-    id: 4869,
-    files: ["static/chunks/869.cb3f1602da3175db.js"],
+    id: 959,
+    files: ["static/chunks/959.34508e89b1d2d329.js"],
   },
 };
Diff for middleware.js
@@ -2,7 +2,7 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [826],
   {
-    /***/ 2583: /***/ (
+    /***/ 949: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -15,7 +15,7 @@
       __webpack_require__.d(__webpack_exports__, {
         default: () =>
           /* binding */ next_middleware_loaderabsolutePagePath_private_next_root_dir_2Fmiddleware_js_page_2Fmiddleware_rootDir_2Ftmp_2Fnext_statscRRoMI_2Fstats_app_matchers_,
-      }); // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/server/web/error.js
+      }); // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/server/web/error.js
 
       class PageSignatureError extends Error {
         constructor({ page }) {
@@ -42,7 +42,7 @@
   Read more: https://nextjs.org/docs/messages/middleware-parse-user-agent
   `);
         }
-      } // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/server/web/utils.js
+      } // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/server/web/utils.js
 
       //# sourceMappingURL=error.js.map
       function fromNodeHeaders(object) {
@@ -164,7 +164,7 @@
             }
           );
         }
-      } // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/server/web/spec-extension/fetch-event.js
+      } // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/server/web/spec-extension/fetch-event.js
 
       //# sourceMappingURL=utils.js.map
       const responseSymbol = Symbol("response");
@@ -211,7 +211,7 @@
             page: this.sourcePage,
           });
         }
-      } // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/shared/lib/i18n/detect-domain-locale.js
+      } // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/shared/lib/i18n/detect-domain-locale.js
 
       //# sourceMappingURL=fetch-event.js.map
       function detectDomainLocale(domainItems, hostname, detectedLocale) {
@@ -238,7 +238,7 @@
             return item;
           }
         }
-      } //# sourceMappingURL=detect-domain-locale.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/shared/lib/router/utils/remove-trailing-slash.js
+      } //# sourceMappingURL=detect-domain-locale.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/shared/lib/router/utils/remove-trailing-slash.js
 
       /**
        * Removes the trailing slash for a given route or page path. Preserves the
@@ -248,7 +248,7 @@
        *   - `/` -> `/`
        */ function removeTrailingSlash(route) {
         return route.replace(/\/$/, "") || "/";
-      } //# sourceMappingURL=remove-trailing-slash.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/shared/lib/router/utils/parse-path.js
+      } //# sourceMappingURL=remove-trailing-slash.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/shared/lib/router/utils/parse-path.js
 
       /**
        * Given a path this function will find the pathname, query and hash and return
@@ -276,7 +276,7 @@
           query: "",
           hash: "",
         };
-      } //# sourceMappingURL=parse-path.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/shared/lib/router/utils/add-path-prefix.js
+      } //# sourceMappingURL=parse-path.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/shared/lib/router/utils/add-path-prefix.js
 
       /**
        * Adds the provided prefix to the given path. It first ensures that the path
@@ -287,7 +287,7 @@
         }
         const { pathname, query, hash } = parsePath(path);
         return "" + prefix + pathname + query + hash;
-      } //# sourceMappingURL=add-path-prefix.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/shared/lib/router/utils/add-path-suffix.js
+      } //# sourceMappingURL=add-path-prefix.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/shared/lib/router/utils/add-path-suffix.js
 
       /**
        * Similarly to `addPathPrefix`, this function adds a suffix at the end on the
@@ -299,7 +299,7 @@
         }
         const { pathname, query, hash } = parsePath(path);
         return "" + pathname + suffix + query + hash;
-      } //# sourceMappingURL=add-path-suffix.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/shared/lib/router/utils/path-has-prefix.js
+      } //# sourceMappingURL=add-path-suffix.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/shared/lib/router/utils/path-has-prefix.js
 
       /**
        * Checks if a given path starts with a given prefix. It ensures it matches
@@ -313,7 +313,7 @@
         }
         const { pathname } = parsePath(path);
         return pathname === prefix || pathname.startsWith(prefix + "/");
-      } //# sourceMappingURL=path-has-prefix.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/shared/lib/router/utils/add-locale.js
+      } //# sourceMappingURL=path-has-prefix.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/shared/lib/router/utils/add-locale.js
 
       /**
        * For a given path and a locale, if the locale is given, it will prefix the
@@ -332,7 +332,7 @@
         }
         // Add the locale prefix to the path.
         return addPathPrefix(path, "/" + locale);
-      } //# sourceMappingURL=add-locale.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/shared/lib/router/utils/format-next-pathname-info.js
+      } //# sourceMappingURL=add-locale.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/shared/lib/router/utils/format-next-pathname-info.js
 
       function formatNextPathnameInfo(info) {
         let pathname = addLocale(
@@ -356,7 +356,7 @@
             ? addPathSuffix(pathname, "/")
             : pathname
           : removeTrailingSlash(pathname);
-      } //# sourceMappingURL=format-next-pathname-info.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/shared/lib/get-hostname.js
+      } //# sourceMappingURL=format-next-pathname-info.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/shared/lib/get-hostname.js
 
       /**
        * Takes an object with a hostname property (like a parsed URL) and some
@@ -376,7 +376,7 @@
           hostname = parsed.hostname;
         } else return;
         return hostname.toLowerCase();
-      } //# sourceMappingURL=get-hostname.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/shared/lib/i18n/normalize-locale-path.js
+      } //# sourceMappingURL=get-hostname.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/shared/lib/i18n/normalize-locale-path.js
 
       /**
        * For a pathname that may include a locale from a list of locales, it
@@ -406,7 +406,7 @@
           pathname,
           detectedLocale,
         };
-      } //# sourceMappingURL=normalize-locale-path.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/shared/lib/router/utils/remove-path-prefix.js
+      } //# sourceMappingURL=normalize-locale-path.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/shared/lib/router/utils/remove-path-prefix.js
 
       /**
        * Given a path and a prefix it will remove the prefix when it exists in the
@@ -440,7 +440,7 @@
         // If the path without the prefix doesn't start with a `/` we need to add it
         // back to the path to make sure it's a valid path.
         return "/" + withoutPrefix;
-      } //# sourceMappingURL=remove-path-prefix.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/shared/lib/router/utils/get-next-pathname-info.js
+      } //# sourceMappingURL=remove-path-prefix.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/shared/lib/router/utils/get-next-pathname-info.js
 
       function getNextPathnameInfo(pathname, options) {
         var _options_nextConfig;
@@ -491,7 +491,7 @@
               : info.pathname;
         }
         return info;
-      } //# sourceMappingURL=get-next-pathname-info.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/server/web/next-url.js
+      } //# sourceMappingURL=get-next-pathname-info.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/server/web/next-url.js
 
       const REGEX_LOCALHOST_HOSTNAME =
         /(?!^https?:\/\/)(127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}|::1|localhost)/;
@@ -719,8 +719,8 @@
       }
 
       //# sourceMappingURL=next-url.js.map
-      // EXTERNAL MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/compiled/@edge-runtime/cookies/index.js
-      var cookies = __webpack_require__(29); // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/server/web/spec-extension/cookies.js // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/server/web/spec-extension/request.js
+      // EXTERNAL MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/compiled/@edge-runtime/cookies/index.js
+      var cookies = __webpack_require__(8432); // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/server/web/spec-extension/cookies.js // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/server/web/spec-extension/request.js
       //# sourceMappingURL=cookies.js.map
       const INTERNALS = Symbol("internal request");
       class NextRequest extends Request {
@@ -795,7 +795,7 @@
         get url() {
           return this[INTERNALS].url;
         }
-      } // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/server/web/spec-extension/response.js
+      } // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/server/web/spec-extension/response.js
 
       //# sourceMappingURL=request.js.map
       const response_INTERNALS = Symbol("internal response");
@@ -895,7 +895,7 @@
             headers,
           });
         }
-      } // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/shared/lib/router/utils/relativize-url.js
+      } // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/shared/lib/router/utils/relativize-url.js
 
       //# sourceMappingURL=response.js.map
       /**
@@ -909,7 +909,7 @@
         return relative.protocol + "//" + relative.host === origin
           ? relative.toString().replace(origin, "")
           : relative.toString();
-      } //# sourceMappingURL=relativize-url.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/server/internal-utils.js
+      } //# sourceMappingURL=relativize-url.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/server/internal-utils.js
 
       const INTERNAL_QUERY_NAMES = [
         "__nextFallback",
@@ -934,7 +934,7 @@
           }
         }
         return searchParams;
-      } // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/shared/lib/router/utils/app-paths.js
+      } // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/shared/lib/router/utils/app-paths.js
 
       //# sourceMappingURL=internal-utils.js.map
       /**
@@ -986,7 +986,7 @@
        * Since this function is used on full urls it checks `?` for searchParams handling.
        */ function normalizeRscPath(pathname, enabled) {
         return enabled ? pathname.replace(/\.rsc($|\?)/, "$1") : pathname;
-      } //# sourceMappingURL=app-paths.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/client/components/app-router-headers.js
+      } //# sourceMappingURL=app-paths.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/client/components/app-router-headers.js
 
       const RSC = "RSC";
       const ACTION = "Next-Action";
@@ -1001,7 +1001,7 @@
         [RSC],
         [NEXT_ROUTER_STATE_TREE],
         [NEXT_ROUTER_PREFETCH],
-      ]; //# sourceMappingURL=app-router-headers.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/lib/constants.js
+      ]; //# sourceMappingURL=app-router-headers.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/lib/constants.js
 
       const NEXT_QUERY_PARAM_PREFIX = "nxtP";
       const PRERENDER_REVALIDATE_HEADER = "x-prerender-revalidate";
@@ -1096,7 +1096,7 @@
         middleware: "middleware",
         edgeAsset: "edge-asset",
         appClient: "app-client",
-      }; // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/server/web/adapter.js
+      }; // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/server/web/adapter.js
 
       //# sourceMappingURL=constants.js.map
       class NextRequestHint extends NextRequest {
@@ -1388,12 +1388,12 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
         });
         // Eagerly fire instrumentation hook to make the startup faster.
         void ensureInstrumentationRegistered();
-      } // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/build/webpack/loaders/next-middleware-loader.js?absolutePagePath=private-next-root-dir%2Fmiddleware.js&page=%2Fmiddleware&rootDir=%2Ftmp%2Fnext-statscRRoMI%2Fstats-app&matchers=!
+      } // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/build/webpack/loaders/next-middleware-loader.js?absolutePagePath=private-next-root-dir%2Fmiddleware.js&page=%2Fmiddleware&rootDir=%2Ftmp%2Fnext-statscRRoMI%2Fstats-app&matchers=!
 
       //# sourceMappingURL=adapter.js.map
       enhanceGlobals();
 
-      var mod = __webpack_require__(7917);
+      var mod = __webpack_require__(619);
       var handler = mod.middleware || mod.default;
 
       if (typeof handler !== "function") {
@@ -1415,7 +1415,7 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
       /***/
     },
 
-    /***/ 7917: /***/ (
+    /***/ 619: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -1427,7 +1427,7 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
         /* harmony export */
       });
       /* harmony import */ var next_dist_server_web_exports_next_response__WEBPACK_IMPORTED_MODULE_0__ =
-        __webpack_require__(7721);
+        __webpack_require__(4716);
 
       async function middleware() {
         return next_dist_server_web_exports_next_response__WEBPACK_IMPORTED_MODULE_0__ /* ["default"].next */.Z.next();
@@ -1436,7 +1436,7 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
       /***/
     },
 
-    /***/ 1710: /***/ (__unused_webpack_module, exports) => {
+    /***/ 3426: /***/ (__unused_webpack_module, exports) => {
       "use strict";
 
       Object.defineProperty(exports, "__esModule", {
@@ -1466,7 +1466,7 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
       /***/
     },
 
-    /***/ 8771: /***/ (__unused_webpack_module, exports) => {
+    /***/ 5253: /***/ (__unused_webpack_module, exports) => {
       "use strict";
 
       Object.defineProperty(exports, "__esModule", {
@@ -1507,7 +1507,7 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
       /***/
     },
 
-    /***/ 6567: /***/ (__unused_webpack_module, exports) => {
+    /***/ 1425: /***/ (__unused_webpack_module, exports) => {
       "use strict";
 
       Object.defineProperty(exports, "__esModule", {
@@ -1544,7 +1544,7 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
       /***/
     },
 
-    /***/ 7139: /***/ (
+    /***/ 5259: /***/ (
       __unused_webpack_module,
       exports,
       __webpack_require__
@@ -1560,8 +1560,8 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
           return addLocale;
         },
       });
-      const _addpathprefix = __webpack_require__(1330);
-      const _pathhasprefix = __webpack_require__(4434);
+      const _addpathprefix = __webpack_require__(4208);
+      const _pathhasprefix = __webpack_require__(9301);
       function addLocale(path, locale, defaultLocale, ignorePrefix) {
         // If no locale was given or the locale is the default locale, we don't need
         // to prefix the path.
@@ -1583,7 +1583,7 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
       /***/
     },
 
-    /***/ 1330: /***/ (
+    /***/ 4208: /***/ (
       __unused_webpack_module,
       exports,
       __webpack_require__
@@ -1599,7 +1599,7 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
           return addPathPrefix;
         },
       });
-      const _parsepath = __webpack_require__(211);
+      const _parsepath = __webpack_require__(2929);
       function addPathPrefix(path, prefix) {
         if (!path.startsWith("/") || !prefix) {
           return path;
@@ -1611,7 +1611,7 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
       /***/
     },
 
-    /***/ 8756: /***/ (
+    /***/ 9670: /***/ (
       __unused_webpack_module,
       exports,
       __webpack_require__
@@ -1627,7 +1627,7 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
           return addPathSuffix;
         },
       });
-      const _parsepath = __webpack_require__(211);
+      const _parsepath = __webpack_require__(2929);
       function addPathSuffix(path, suffix) {
         if (!path.startsWith("/") || !suffix) {
           return path;
@@ -1639,7 +1639,7 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
       /***/
     },
 
-    /***/ 1442: /***/ (
+    /***/ 8265: /***/ (
       __unused_webpack_module,
       exports,
       __webpack_require__
@@ -1655,10 +1655,10 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
           return formatNextPathnameInfo;
         },
       });
-      const _removetrailingslash = __webpack_require__(4877);
-      const _addpathprefix = __webpack_require__(1330);
-      const _addpathsuffix = __webpack_require__(8756);
-      const _addlocale = __webpack_require__(7139);
+      const _removetrailingslash = __webpack_require__(7876);
+      const _addpathprefix = __webpack_require__(4208);
+      const _addpathsuffix = __webpack_require__(9670);
+      const _addlocale = __webpack_require__(5259);
       function formatNextPathnameInfo(info) {
         let pathname = (0, _addlocale.addLocale)(
           info.pathname,
@@ -1689,7 +1689,7 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
       /***/
     },
 
-    /***/ 4132: /***/ (
+    /***/ 4751: /***/ (
       __unused_webpack_module,
       exports,
       __webpack_require__
@@ -1705,9 +1705,9 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
           return getNextPathnameInfo;
         },
       });
-      const _normalizelocalepath = __webpack_require__(6567);
-      const _removepathprefix = __webpack_require__(6881);
-      const _pathhasprefix = __webpack_require__(4434);
+      const _normalizelocalepath = __webpack_require__(1425);
+      const _removepathprefix = __webpack_require__(2576);
+      const _pathhasprefix = __webpack_require__(9301);
       function getNextPathnameInfo(pathname, options) {
         var _options_nextConfig;
         const { basePath, i18n, trailingSlash } =
@@ -1771,7 +1771,7 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
       /***/
     },
 
-    /***/ 211: /***/ (__unused_webpack_module, exports) => {
+    /***/ 2929: /***/ (__unused_webpack_module, exports) => {
       "use strict";
       /**
        * Given a path this function will find the pathname, query and hash and return
@@ -1814,7 +1814,7 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
       /***/
     },
 
-    /***/ 4434: /***/ (
+    /***/ 9301: /***/ (
       __unused_webpack_module,
       exports,
       __webpack_require__
@@ -1830,7 +1830,7 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
           return pathHasPrefix;
         },
       });
-      const _parsepath = __webpack_require__(211);
+      const _parsepath = __webpack_require__(2929);
       function pathHasPrefix(path, prefix) {
         if (typeof path !== "string") {
           return false;
@@ -1842,7 +1842,7 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
       /***/
     },
 
-    /***/ 6881: /***/ (
+    /***/ 2576: /***/ (
       __unused_webpack_module,
       exports,
       __webpack_require__
@@ -1858,7 +1858,7 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
           return removePathPrefix;
         },
       });
-      const _pathhasprefix = __webpack_require__(4434);
+      const _pathhasprefix = __webpack_require__(9301);
       function removePathPrefix(path, prefix) {
         // If the path doesn't start with the prefix we can return it as is. This
         // protects us from situations where the prefix is a substring of the path
@@ -1889,7 +1889,7 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
       /***/
     },
 
-    /***/ 4877: /***/ (__unused_webpack_module, exports) => {
+    /***/ 7876: /***/ (__unused_webpack_module, exports) => {
       "use strict";
       /**
        * Removes the trailing slash for a given route or page path. Preserves the
@@ -1914,7 +1914,7 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
       /***/
     },
 
-    /***/ 29: /***/ (module) => {
+    /***/ 8432: /***/ (module) => {
       "use strict";
 
       var __defProp = Object.defineProperty;
@@ -2244,7 +2244,7 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
       /***/
     },
 
-    /***/ 7721: /***/ (
+    /***/ 4716: /***/ (
       __unused_webpack_module,
       exports,
       __webpack_require__
@@ -2262,14 +2262,14 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
           return _response.NextResponse;
         },
       });
-      const _response = __webpack_require__(5277);
+      const _response = __webpack_require__(5165);
 
       //# sourceMappingURL=next-response.js.map
 
       /***/
     },
 
-    /***/ 3062: /***/ (
+    /***/ 4901: /***/ (
       __unused_webpack_module,
       exports,
       __webpack_require__
@@ -2285,10 +2285,10 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
           return NextURL;
         },
       });
-      const _detectdomainlocale = __webpack_require__(8771);
-      const _formatnextpathnameinfo = __webpack_require__(1442);
-      const _gethostname = __webpack_require__(1710);
-      const _getnextpathnameinfo = __webpack_require__(4132);
+      const _detectdomainlocale = __webpack_require__(5253);
+      const _formatnextpathnameinfo = __webpack_require__(8265);
+      const _gethostname = __webpack_require__(3426);
+      const _getnextpathnameinfo = __webpack_require__(4751);
       const REGEX_LOCALHOST_HOSTNAME =
         /(?!^https?:\/\/)(127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}|::1|localhost)/;
       function parseURL(url, base) {
@@ -2522,7 +2522,7 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
       /***/
     },
 
-    /***/ 3868: /***/ (
+    /***/ 4570: /***/ (
       __unused_webpack_module,
       exports,
       __webpack_require__
@@ -2533,7 +2533,7 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
         value: true,
       });
       0 && 0;
-      _export_star(__webpack_require__(29), exports);
+      _export_star(__webpack_require__(8432), exports);
       function _export_star(from, to) {
         Object.keys(from).forEach(function (k) {
           if (k !== "default" && !Object.prototype.hasOwnProperty.call(to, k)) {
@@ -2553,7 +2553,7 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
       /***/
     },
 
-    /***/ 5277: /***/ (
+    /***/ 5165: /***/ (
       __unused_webpack_module,
       exports,
       __webpack_require__
@@ -2569,9 +2569,9 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
           return NextResponse;
         },
       });
-      const _nexturl = __webpack_require__(3062);
-      const _utils = __webpack_require__(88);
-      const _cookies = __webpack_require__(3868);
+      const _nexturl = __webpack_require__(4901);
+      const _utils = __webpack_require__(30);
+      const _cookies = __webpack_require__(4570);
       const INTERNALS = Symbol("internal response");
       const REDIRECTS = new Set([301, 302, 303, 307, 308]);
       function handleMiddlewareField(init, headers) {
@@ -2679,7 +2679,7 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
       /***/
     },
 
-    /***/ 88: /***/ (__unused_webpack_module, exports) => {
+    /***/ 30: /***/ (__unused_webpack_module, exports) => {
       "use strict";
 
       Object.defineProperty(exports, "__esModule", {
@@ -2826,7 +2826,7 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
     // webpackRuntimeModules
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
-    /******/ var __webpack_exports__ = __webpack_exec__(2583);
+    /******/ var __webpack_exports__ = __webpack_exec__(949);
     /******/ (_ENTRIES =
       typeof _ENTRIES === "undefined" ? {} : _ENTRIES).middleware_middleware =
       __webpack_exports__;
Diff for edge-ssr.js

Diff too large to display

Diff for _buildManifest.js
@@ -1,28 +1,28 @@
 self.__BUILD_MANIFEST = {
   __rewrites: { beforeFiles: [], afterFiles: [], fallback: [] },
-  "/": ["static\u002Fchunks\u002Fpages\u002Findex-96b4df8f97c0f01a.js"],
-  "/_error": ["static\u002Fchunks\u002Fpages\u002F_error-d79135b4d7090152.js"],
-  "/amp": ["static\u002Fchunks\u002Fpages\u002Famp-274faba37a339e17.js"],
+  "/": ["static\u002Fchunks\u002Fpages\u002Findex-b21e2d2005e858d6.js"],
+  "/_error": ["static\u002Fchunks\u002Fpages\u002F_error-65d572d29e2548b7.js"],
+  "/amp": ["static\u002Fchunks\u002Fpages\u002Famp-648f2b01fe81161d.js"],
   "/css": [
     "static\u002Fcss\u002F94fdbc56eafa2039.css",
-    "static\u002Fchunks\u002Fpages\u002Fcss-dceecca19c67df2f.js",
+    "static\u002Fchunks\u002Fpages\u002Fcss-ac86cb27ef341466.js",
   ],
   "/dynamic": [
-    "static\u002Fchunks\u002Fpages\u002Fdynamic-c209669767e97b48.js",
+    "static\u002Fchunks\u002Fpages\u002Fdynamic-1b6396304af9a231.js",
   ],
   "/edge-ssr": [
-    "static\u002Fchunks\u002Fpages\u002Fedge-ssr-8fc8ab80d42f93e7.js",
+    "static\u002Fchunks\u002Fpages\u002Fedge-ssr-227038c60ef6104e.js",
   ],
-  "/head": ["static\u002Fchunks\u002Fpages\u002Fhead-c50c98836e5e388a.js"],
-  "/hooks": ["static\u002Fchunks\u002Fpages\u002Fhooks-2ff3838a24ad32e8.js"],
-  "/image": ["static\u002Fchunks\u002Fpages\u002Fimage-83bb7184c6d95af7.js"],
-  "/link": ["static\u002Fchunks\u002Fpages\u002Flink-9852e766f2d5caf3.js"],
+  "/head": ["static\u002Fchunks\u002Fpages\u002Fhead-80b2a5deecd9aaf0.js"],
+  "/hooks": ["static\u002Fchunks\u002Fpages\u002Fhooks-00630999feaad71f.js"],
+  "/image": ["static\u002Fchunks\u002Fpages\u002Fimage-a9946a9b6f619122.js"],
+  "/link": ["static\u002Fchunks\u002Fpages\u002Flink-3a7bb39cf39dd521.js"],
   "/routerDirect": [
-    "static\u002Fchunks\u002Fpages\u002FrouterDirect-aab44264666858ac.js",
+    "static\u002Fchunks\u002Fpages\u002FrouterDirect-8e71be3181f26659.js",
   ],
-  "/script": ["static\u002Fchunks\u002Fpages\u002Fscript-e2e495a834a22421.js"],
+  "/script": ["static\u002Fchunks\u002Fpages\u002Fscript-4f00101dadfc5ea1.js"],
   "/withRouter": [
-    "static\u002Fchunks\u002Fpages\u002FwithRouter-331bb6165873d961.js",
+    "static\u002Fchunks\u002Fpages\u002FwithRouter-829c5d0ec0bf0aa7.js",
   ],
   sortedPages: [
     "\u002F",
Diff for _app-HASH.js
@@ -1,7 +1,7 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [888],
   {
-    /***/ 3115: /***/ function (
+    /***/ 1113: /***/ function (
       __unused_webpack_module,
       __unused_webpack_exports,
       __webpack_require__
@@ -9,7 +9,7 @@
       (window.__NEXT_P = window.__NEXT_P || []).push([
         "/_app",
         function () {
-          return __webpack_require__(9618);
+          return __webpack_require__(6822);
         },
       ]);
       if (false) {
@@ -24,7 +24,7 @@
       return __webpack_require__((__webpack_require__.s = moduleId));
     };
     /******/ __webpack_require__.O(0, [179], function () {
-      return __webpack_exec__(3115), __webpack_exec__(5038);
+      return __webpack_exec__(1113), __webpack_exec__(1556);
     });
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for _error-HASH.js
@@ -1,7 +1,7 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [820],
   {
-    /***/ 5374: /***/ function (
+    /***/ 3363: /***/ function (
       __unused_webpack_module,
       __unused_webpack_exports,
       __webpack_require__
@@ -9,7 +9,7 @@
       (window.__NEXT_P = window.__NEXT_P || []).push([
         "/_error",
         function () {
-          return __webpack_require__(1261);
+          return __webpack_require__(3972);
         },
       ]);
       if (false) {
@@ -24,7 +24,7 @@
       return __webpack_require__((__webpack_require__.s = moduleId));
     };
     /******/ __webpack_require__.O(0, [888, 179], function () {
-      return __webpack_exec__(5374);
+      return __webpack_exec__(3363);
     });
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for amp-HASH.js
@@ -1,17 +1,17 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [216],
   {
-    /***/ 8510: /***/ function (
+    /***/ 8753: /***/ function (
       module,
       __unused_webpack_exports,
       __webpack_require__
     ) {
-      module.exports = __webpack_require__(6863);
+      module.exports = __webpack_require__(1088);
 
       /***/
     },
 
-    /***/ 7010: /***/ function (
+    /***/ 5348: /***/ function (
       __unused_webpack_module,
       __unused_webpack_exports,
       __webpack_require__
@@ -19,7 +19,7 @@
       (window.__NEXT_P = window.__NEXT_P || []).push([
         "/amp",
         function () {
-          return __webpack_require__(8381);
+          return __webpack_require__(1458);
         },
       ]);
       if (false) {
@@ -28,7 +28,7 @@
       /***/
     },
 
-    /***/ 6863: /***/ function (module, exports, __webpack_require__) {
+    /***/ 1088: /***/ function (module, exports, __webpack_require__) {
       "use strict";
 
       Object.defineProperty(exports, "__esModule", {
@@ -42,10 +42,10 @@
       });
       const _interop_require_default = __webpack_require__(8266);
       const _react = /*#__PURE__*/ _interop_require_default._(
-        __webpack_require__(2947)
+        __webpack_require__(465)
       );
-      const _ampcontext = __webpack_require__(7218);
-      const _ampmode = __webpack_require__(9569);
+      const _ampcontext = __webpack_require__(583);
+      const _ampmode = __webpack_require__(8881);
       function useAmp() {
         // Don't assign the context value to a variable to save bytes
         return (0, _ampmode.isInAmpMode)(
@@ -67,7 +67,7 @@
       /***/
     },
 
-    /***/ 8381: /***/ function (
+    /***/ 1458: /***/ function (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -84,7 +84,7 @@
         /* harmony export */
       });
       /* harmony import */ var next_amp__WEBPACK_IMPORTED_MODULE_0__ =
-        __webpack_require__(8510);
+        __webpack_require__(8753);
       /* harmony import */ var next_amp__WEBPACK_IMPORTED_MODULE_0___default =
         /*#__PURE__*/ __webpack_require__.n(
           next_amp__WEBPACK_IMPORTED_MODULE_0__
@@ -108,7 +108,7 @@
       return __webpack_require__((__webpack_require__.s = moduleId));
     };
     /******/ __webpack_require__.O(0, [888, 179], function () {
-      return __webpack_exec__(7010);
+      return __webpack_exec__(5348);
     });
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for css-HASH.js
@@ -1,7 +1,7 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [706],
   {
-    /***/ 860: /***/ function (
+    /***/ 6437: /***/ function (
       __unused_webpack_module,
       __unused_webpack_exports,
       __webpack_require__
@@ -9,7 +9,7 @@
       (window.__NEXT_P = window.__NEXT_P || []).push([
         "/css",
         function () {
-          return __webpack_require__(3215);
+          return __webpack_require__(5701);
         },
       ]);
       if (false) {
@@ -18,7 +18,7 @@
       /***/
     },
 
-    /***/ 3215: /***/ function (
+    /***/ 5701: /***/ function (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -26,9 +26,9 @@
       "use strict";
       __webpack_require__.r(__webpack_exports__);
       /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
-        __webpack_require__(3268);
+        __webpack_require__(9701);
       /* harmony import */ var _css_module_css__WEBPACK_IMPORTED_MODULE_1__ =
-        __webpack_require__(4294);
+        __webpack_require__(5725);
       /* harmony import */ var _css_module_css__WEBPACK_IMPORTED_MODULE_1___default =
         /*#__PURE__*/ __webpack_require__.n(
           _css_module_css__WEBPACK_IMPORTED_MODULE_1__
@@ -48,14 +48,14 @@
       /***/
     },
 
-    /***/ 4294: /***/ function (module) {
+    /***/ 5725: /***/ function (module) {
       // extracted by mini-css-extract-plugin
       module.exports = { helloWorld: "css_helloWorld__qqNwY" };
 
       /***/
     },
 
-    /***/ 6205: /***/ function (
+    /***/ 1963: /***/ function (
       __unused_webpack_module,
       exports,
       __webpack_require__
@@ -70,7 +70,7 @@
        * This source code is licensed under the MIT license found in the
        * LICENSE file in the root directory of this source tree.
        */
-      var f = __webpack_require__(2947),
+      var f = __webpack_require__(465),
         k = Symbol.for("react.element"),
         l = Symbol.for("react.fragment"),
         m = Object.prototype.hasOwnProperty,
@@ -105,7 +105,7 @@
       /***/
     },
 
-    /***/ 3268: /***/ function (
+    /***/ 9701: /***/ function (
       module,
       __unused_webpack_exports,
       __webpack_require__
@@ -113,7 +113,7 @@
       "use strict";
 
       if (true) {
-        module.exports = __webpack_require__(6205);
+        module.exports = __webpack_require__(1963);
       } else {
       }
 
@@ -126,7 +126,7 @@
       return __webpack_require__((__webpack_require__.s = moduleId));
     };
     /******/ __webpack_require__.O(0, [888, 179], function () {
-      return __webpack_exec__(860);
+      return __webpack_exec__(6437);
     });
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for dynamic-HASH.js
@@ -1,7 +1,7 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [739],
   {
-    /***/ 3995: /***/ function (
+    /***/ 7753: /***/ function (
       __unused_webpack_module,
       __unused_webpack_exports,
       __webpack_require__
@@ -9,7 +9,7 @@
       (window.__NEXT_P = window.__NEXT_P || []).push([
         "/dynamic",
         function () {
-          return __webpack_require__(8267);
+          return __webpack_require__(825);
         },
       ]);
       if (false) {
@@ -18,7 +18,7 @@
       /***/
     },
 
-    /***/ 6854: /***/ function (module, exports, __webpack_require__) {
+    /***/ 1678: /***/ function (module, exports, __webpack_require__) {
       "use strict";
 
       Object.defineProperty(exports, "__esModule", {
@@ -42,10 +42,10 @@
       });
       const _interop_require_default = __webpack_require__(8266);
       const _react = /*#__PURE__*/ _interop_require_default._(
-        __webpack_require__(2947)
+        __webpack_require__(465)
       );
       const _loadable = /*#__PURE__*/ _interop_require_default._(
-        __webpack_require__(8673)
+        __webpack_require__(899)
       );
       const isServerSide = "object" === "undefined";
       // Normalize loader to return the module as form { default: Component } for `React.lazy`.
@@ -146,7 +146,7 @@
       /***/
     },
 
-    /***/ 3611: /***/ function (
+    /***/ 6601: /***/ function (
       __unused_webpack_module,
       exports,
       __webpack_require__
@@ -164,7 +164,7 @@
       });
       const _interop_require_default = __webpack_require__(8266);
       const _react = /*#__PURE__*/ _interop_require_default._(
-        __webpack_require__(2947)
+        __webpack_require__(465)
       );
       const LoadableContext = _react.default.createContext(null);
       if (false) {
@@ -173,7 +173,7 @@
       /***/
     },
 
-    /***/ 8673: /***/ function (
+    /***/ 899: /***/ function (
       __unused_webpack_module,
       exports,
       __webpack_require__
@@ -213,9 +213,9 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE
       });
       const _interop_require_default = __webpack_require__(8266);
       const _react = /*#__PURE__*/ _interop_require_default._(
-        __webpack_require__(2947)
+        __webpack_require__(465)
       );
-      const _loadablecontext = __webpack_require__(3611);
+      const _loadablecontext = __webpack_require__(6601);
       function resolve(obj) {
         return obj && obj.default ? obj.default : obj;
       }
@@ -281,7 +281,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE
           if (moduleIds) {
             READY_INITIALIZERS.push((ids) => {
               for (const moduleId of moduleIds) {
-                if (ids.indexOf(moduleId) !== -1) {
+                if (ids.includes(moduleId)) {
                   return init();
                 }
               }
@@ -450,7 +450,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE
       /***/
     },
 
-    /***/ 8267: /***/ function (
+    /***/ 825: /***/ function (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -464,9 +464,9 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE
         /* harmony export */
       });
       /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
-        __webpack_require__(3268);
+        __webpack_require__(9701);
       /* harmony import */ var next_dynamic__WEBPACK_IMPORTED_MODULE_1__ =
-        __webpack_require__(6113);
+        __webpack_require__(2677);
       /* harmony import */ var next_dynamic__WEBPACK_IMPORTED_MODULE_1___default =
         /*#__PURE__*/ __webpack_require__.n(
           next_dynamic__WEBPACK_IMPORTED_MODULE_1__
@@ -475,11 +475,11 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE
       const DynamicHello = next_dynamic__WEBPACK_IMPORTED_MODULE_1___default()(
         () =>
           __webpack_require__
-            .e(/* import() */ 869)
-            .then(__webpack_require__.bind(__webpack_require__, 4869)),
+            .e(/* import() */ 959)
+            .then(__webpack_require__.bind(__webpack_require__, 959)),
         {
           loadableGenerated: {
-            webpack: () => [/*require.resolve*/ 4869],
+            webpack: () => [/*require.resolve*/ 959],
           },
         }
       );
@@ -506,7 +506,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE
       /***/
     },
 
-    /***/ 6205: /***/ function (
+    /***/ 1963: /***/ function (
       __unused_webpack_module,
       exports,
       __webpack_require__
@@ -521,7 +521,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE
        * This source code is licensed under the MIT license found in the
        * LICENSE file in the root directory of this source tree.
        */
-      var f = __webpack_require__(2947),
+      var f = __webpack_require__(465),
         k = Symbol.for("react.element"),
         l = Symbol.for("react.fragment"),
         m = Object.prototype.hasOwnProperty,
@@ -556,7 +556,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE
       /***/
     },
 
-    /***/ 3268: /***/ function (
+    /***/ 9701: /***/ function (
       module,
       __unused_webpack_exports,
       __webpack_require__
@@ -564,19 +564,19 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE
       "use strict";
 
       if (true) {
-        module.exports = __webpack_require__(6205);
+        module.exports = __webpack_require__(1963);
       } else {
       }
 
       /***/
     },
 
-    /***/ 6113: /***/ function (
+    /***/ 2677: /***/ function (
       module,
       __unused_webpack_exports,
       __webpack_require__
     ) {
-      module.exports = __webpack_require__(6854);
+      module.exports = __webpack_require__(1678);
 
       /***/
     },
@@ -587,7 +587,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE
       return __webpack_require__((__webpack_require__.s = moduleId));
     };
     /******/ __webpack_require__.O(0, [888, 179], function () {
-      return __webpack_exec__(3995);
+      return __webpack_exec__(7753);
     });
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for edge-ssr-HASH.js
@@ -1,7 +1,7 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [800],
   {
-    /***/ 6219: /***/ function (
+    /***/ 6027: /***/ function (
       __unused_webpack_module,
       __unused_webpack_exports,
       __webpack_require__
@@ -9,7 +9,7 @@
       (window.__NEXT_P = window.__NEXT_P || []).push([
         "/edge-ssr",
         function () {
-          return __webpack_require__(7322);
+          return __webpack_require__(9526);
         },
       ]);
       if (false) {
@@ -18,7 +18,7 @@
       /***/
     },
 
-    /***/ 7322: /***/ function (
+    /***/ 9526: /***/ function (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -48,7 +48,7 @@
       return __webpack_require__((__webpack_require__.s = moduleId));
     };
     /******/ __webpack_require__.O(0, [888, 179], function () {
-      return __webpack_exec__(6219);
+      return __webpack_exec__(6027);
     });
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for head-HASH.js
@@ -1,7 +1,7 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [645],
   {
-    /***/ 2899: /***/ function (
+    /***/ 6955: /***/ function (
       __unused_webpack_module,
       __unused_webpack_exports,
       __webpack_require__
@@ -9,7 +9,7 @@
       (window.__NEXT_P = window.__NEXT_P || []).push([
         "/head",
         function () {
-          return __webpack_require__(4463);
+          return __webpack_require__(157);
         },
       ]);
       if (false) {
@@ -18,7 +18,7 @@
       /***/
     },
 
-    /***/ 4463: /***/ function (
+    /***/ 157: /***/ function (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -32,9 +32,9 @@
         /* harmony export */
       });
       /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
-        __webpack_require__(3268);
+        __webpack_require__(9701);
       /* harmony import */ var next_head__WEBPACK_IMPORTED_MODULE_1__ =
-        __webpack_require__(8412);
+        __webpack_require__(9046);
       /* harmony import */ var next_head__WEBPACK_IMPORTED_MODULE_1___default =
         /*#__PURE__*/ __webpack_require__.n(
           next_head__WEBPACK_IMPORTED_MODULE_1__
@@ -68,7 +68,7 @@
       /***/
     },
 
-    /***/ 6205: /***/ function (
+    /***/ 1963: /***/ function (
       __unused_webpack_module,
       exports,
       __webpack_require__
@@ -83,7 +83,7 @@
        * This source code is licensed under the MIT license found in the
        * LICENSE file in the root directory of this source tree.
        */
-      var f = __webpack_require__(2947),
+      var f = __webpack_require__(465),
         k = Symbol.for("react.element"),
         l = Symbol.for("react.fragment"),
         m = Object.prototype.hasOwnProperty,
@@ -118,7 +118,7 @@
       /***/
     },
 
-    /***/ 3268: /***/ function (
+    /***/ 9701: /***/ function (
       module,
       __unused_webpack_exports,
       __webpack_require__
@@ -126,19 +126,19 @@
       "use strict";
 
       if (true) {
-        module.exports = __webpack_require__(6205);
+        module.exports = __webpack_require__(1963);
       } else {
       }
 
       /***/
     },
 
-    /***/ 8412: /***/ function (
+    /***/ 9046: /***/ function (
       module,
       __unused_webpack_exports,
       __webpack_require__
     ) {
-      module.exports = __webpack_require__(6593);
+      module.exports = __webpack_require__(6732);
 
       /***/
     },
@@ -149,7 +149,7 @@
       return __webpack_require__((__webpack_require__.s = moduleId));
     };
     /******/ __webpack_require__.O(0, [888, 179], function () {
-      return __webpack_exec__(2899);
+      return __webpack_exec__(6955);
     });
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for hooks-HASH.js
@@ -1,7 +1,7 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [757],
   {
-    /***/ 2304: /***/ function (
+    /***/ 7819: /***/ function (
       __unused_webpack_module,
       __unused_webpack_exports,
       __webpack_require__
@@ -9,7 +9,7 @@
       (window.__NEXT_P = window.__NEXT_P || []).push([
         "/hooks",
         function () {
-          return __webpack_require__(59);
+          return __webpack_require__(58);
         },
       ]);
       if (false) {
@@ -18,7 +18,7 @@
       /***/
     },
 
-    /***/ 59: /***/ function (
+    /***/ 58: /***/ function (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -26,9 +26,9 @@
       "use strict";
       __webpack_require__.r(__webpack_exports__);
       /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
-        __webpack_require__(3268);
+        __webpack_require__(9701);
       /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ =
-        __webpack_require__(2947);
+        __webpack_require__(465);
 
       /* harmony default export */ __webpack_exports__["default"] = () => {
         const [clicks1, setClicks1] =
@@ -73,7 +73,7 @@
       /***/
     },
 
-    /***/ 6205: /***/ function (
+    /***/ 1963: /***/ function (
       __unused_webpack_module,
       exports,
       __webpack_require__
@@ -88,7 +88,7 @@
        * This source code is licensed under the MIT license found in the
        * LICENSE file in the root directory of this source tree.
        */
-      var f = __webpack_require__(2947),
+      var f = __webpack_require__(465),
         k = Symbol.for("react.element"),
         l = Symbol.for("react.fragment"),
         m = Object.prototype.hasOwnProperty,
@@ -123,7 +123,7 @@
       /***/
     },
 
-    /***/ 3268: /***/ function (
+    /***/ 9701: /***/ function (
       module,
       __unused_webpack_exports,
       __webpack_require__
@@ -131,7 +131,7 @@
       "use strict";
 
       if (true) {
-        module.exports = __webpack_require__(6205);
+        module.exports = __webpack_require__(1963);
       } else {
       }
 
@@ -144,7 +144,7 @@
       return __webpack_require__((__webpack_require__.s = moduleId));
     };
     /******/ __webpack_require__.O(0, [888, 179], function () {
-      return __webpack_exec__(2304);
+      return __webpack_exec__(7819);
     });
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for image-HASH.js
@@ -1,7 +1,7 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [358],
   {
-    /***/ 5885: /***/ function (
+    /***/ 801: /***/ function (
       __unused_webpack_module,
       __unused_webpack_exports,
       __webpack_require__
@@ -9,7 +9,7 @@
       (window.__NEXT_P = window.__NEXT_P || []).push([
         "/image",
         function () {
-          return __webpack_require__(3428);
+          return __webpack_require__(2018);
         },
       ]);
       if (false) {
@@ -18,7 +18,7 @@
       /***/
     },
 
-    /***/ 2957: /***/ function (module, exports, __webpack_require__) {
+    /***/ 1568: /***/ function (module, exports, __webpack_require__) {
       "use strict";
       /* __next_internal_client_entry_do_not_use__  cjs */
       Object.defineProperty(exports, "__esModule", {
@@ -33,17 +33,17 @@
       const _interop_require_default = __webpack_require__(8266);
       const _interop_require_wildcard = __webpack_require__(7144);
       const _react = /*#__PURE__*/ _interop_require_wildcard._(
-        __webpack_require__(2947)
+        __webpack_require__(465)
       );
       const _head = /*#__PURE__*/ _interop_require_default._(
-        __webpack_require__(6593)
+        __webpack_require__(6732)
       );
-      const _imageblursvg = __webpack_require__(3811);
-      const _imageconfig = __webpack_require__(8419);
-      const _imageconfigcontext = __webpack_require__(8147);
-      const _warnonce = __webpack_require__(5664);
+      const _imageblursvg = __webpack_require__(3681);
+      const _imageconfig = __webpack_require__(8394);
+      const _imageconfigcontext = __webpack_require__(11);
+      const _warnonce = __webpack_require__(2485);
       const _imageloader = /*#__PURE__*/ _interop_require_default._(
-        __webpack_require__(5324)
+        __webpack_require__(4439)
       );
       const configEnv = {
         deviceSizes: [640, 750, 828, 1080, 1200, 1920, 2048, 3840],
@@ -288,92 +288,88 @@
             ...rest
           } = param;
           loading = isLazy ? "lazy" : loading;
-          return /*#__PURE__*/ _react.default.createElement(
-            _react.default.Fragment,
-            null,
-            /*#__PURE__*/ _react.default.createElement("img", {
-              ...rest,
-              ...getDynamicProps(fetchPriority),
-              loading: loading,
-              width: widthInt,
-              height: heightInt,
-              decoding: "async",
-              "data-nimg": fill ? "fill" : "1",
-              className: className,
-              style: {
-                ...imgStyle,
-                ...blurStyle,
-              },
-              ...imgAttributes,
-              ref: (0, _react.useCallback)(
-                (img) => {
-                  if (forwardedRef) {
-                    if (typeof forwardedRef === "function") forwardedRef(img);
-                    else if (typeof forwardedRef === "object") {
-                      // @ts-ignore - .current is read only it's usually assigned by react internally
-                      forwardedRef.current = img;
-                    }
-                  }
-                  if (!img) {
-                    return;
-                  }
-                  if (onError) {
-                    // If the image has an error before react hydrates, then the error is lost.
-                    // The workaround is to wait until the image is mounted which is after hydration,
-                    // then we set the src again to trigger the error handler (if there was an error).
-                    // eslint-disable-next-line no-self-assign
-                    img.src = img.src;
-                  }
-                  if (false) {
-                  }
-                  if (img.complete) {
-                    handleLoading(
-                      img,
-                      srcString,
-                      placeholder,
-                      onLoadRef,
-                      onLoadingCompleteRef,
-                      setBlurComplete,
-                      unoptimized
-                    );
+          return /*#__PURE__*/ _react.default.createElement("img", {
+            ...rest,
+            ...getDynamicProps(fetchPriority),
+            loading: loading,
+            width: widthInt,
+            height: heightInt,
+            decoding: "async",
+            "data-nimg": fill ? "fill" : "1",
+            className: className,
+            style: {
+              ...imgStyle,
+              ...blurStyle,
+            },
+            ...imgAttributes,
+            ref: (0, _react.useCallback)(
+              (img) => {
+                if (forwardedRef) {
+                  if (typeof forwardedRef === "function") forwardedRef(img);
+                  else if (typeof forwardedRef === "object") {
+                    // @ts-ignore - .current is read only it's usually assigned by react internally
+                    forwardedRef.current = img;
                   }
-                },
-                [
-                  srcString,
-                  placeholder,
-                  onLoadRef,
-                  onLoadingCompleteRef,
-                  setBlurComplete,
-                  onError,
-                  unoptimized,
-                  forwardedRef,
-                ]
-              ),
-              onLoad: (event) => {
-                const img = event.currentTarget;
-                handleLoading(
-                  img,
-                  srcString,
-                  placeholder,
-                  onLoadRef,
-                  onLoadingCompleteRef,
-                  setBlurComplete,
-                  unoptimized
-                );
-              },
-              onError: (event) => {
-                // if the real image fails to load, this will ensure "alt" is visible
-                setShowAltText(true);
-                if (placeholder === "blur") {
-                  // If the real image fails to load, this will still remove the placeholder.
-                  setBlurComplete(true);
+                }
+                if (!img) {
+                  return;
                 }
                 if (onError) {
-                  onError(event);
+                  // If the image has an error before react hydrates, then the error is lost.
+                  // The workaround is to wait until the image is mounted which is after hydration,
+                  // then we set the src again to trigger the error handler (if there was an error).
+                  // eslint-disable-next-line no-self-assign
+                  img.src = img.src;
+                }
+                if (false) {
+                }
+                if (img.complete) {
+                  handleLoading(
+                    img,
+                    srcString,
+                    placeholder,
+                    onLoadRef,
+                    onLoadingCompleteRef,
+                    setBlurComplete,
+                    unoptimized
+                  );
                 }
               },
-            })
-          );
+              [
+                srcString,
+                placeholder,
+                onLoadRef,
+                onLoadingCompleteRef,
+                setBlurComplete,
+                onError,
+                unoptimized,
+                forwardedRef,
+              ]
+            ),
+            onLoad: (event) => {
+              const img = event.currentTarget;
+              handleLoading(
+                img,
+                srcString,
+                placeholder,
+                onLoadRef,
+                onLoadingCompleteRef,
+                setBlurComplete,
+                unoptimized
+              );
+            },
+            onError: (event) => {
+              // if the real image fails to load, this will ensure "alt" is visible
+              setShowAltText(true);
+              if (placeholder === "blur") {
+                // If the real image fails to load, this will still remove the placeholder.
+                setBlurComplete(true);
+              }
+              if (onError) {
+                onError(event);
+              }
+            },
+          });
         }
       );
       const Image = /*#__PURE__*/ (0, _react.forwardRef)(
@@ -672,7 +668,7 @@
       /***/
     },
 
-    /***/ 3811: /***/ function (__unused_webpack_module, exports) {
+    /***/ 3681: /***/ function (__unused_webpack_module, exports) {
       "use strict";
       /**
        * A shared function, used on both client and server, to generate a SVG blur placeholder.
@@ -734,7 +730,7 @@
       /***/
     },
 
-    /***/ 5324: /***/ function (__unused_webpack_module, exports) {
+    /***/ 4439: /***/ function (__unused_webpack_module, exports) {
       "use strict";
 
       Object.defineProperty(exports, "__esModule", {
@@ -768,7 +764,7 @@
       /***/
     },
 
-    /***/ 3428: /***/ function (
+    /***/ 2018: /***/ function (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -787,10 +783,10 @@
         },
       });
 
-      // EXTERNAL MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/compiled/react/jsx-runtime.js
-      var jsx_runtime = __webpack_require__(3268);
-      // EXTERNAL MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/image.js
-      var next_image = __webpack_require__(3960);
+      // EXTERNAL MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/compiled/react/jsx-runtime.js
+      var jsx_runtime = __webpack_require__(9701);
+      // EXTERNAL MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/image.js
+      var next_image = __webpack_require__(8249);
       var image_default = /*#__PURE__*/ __webpack_require__.n(next_image); // CONCATENATED MODULE: ./pages/nextjs.png
       /* harmony default export */ var nextjs = {
         src: "/_next/static/media/nextjs.cae0b805.png",
@@ -820,7 +816,7 @@
       /***/
     },
 
-    /***/ 6205: /***/ function (
+    /***/ 1963: /***/ function (
       __unused_webpack_module,
       exports,
       __webpack_require__
@@ -835,7 +831,7 @@
        * This source code is licensed under the MIT license found in the
        * LICENSE file in the root directory of this source tree.
        */
-      var f = __webpack_require__(2947),
+      var f = __webpack_require__(465),
         k = Symbol.for("react.element"),
         l = Symbol.for("react.fragment"),
         m = Object.prototype.hasOwnProperty,
@@ -870,7 +866,7 @@
       /***/
     },
 
-    /***/ 3268: /***/ function (
+    /***/ 9701: /***/ function (
       module,
       __unused_webpack_exports,
       __webpack_require__
@@ -878,19 +874,19 @@
       "use strict";
 
       if (true) {
-        module.exports = __webpack_require__(6205);
+        module.exports = __webpack_require__(1963);
       } else {
       }
 
       /***/
     },
 
-    /***/ 3960: /***/ function (
+    /***/ 8249: /***/ function (
       module,
       __unused_webpack_exports,
       __webpack_require__
     ) {
-      module.exports = __webpack_require__(2957);
+      module.exports = __webpack_require__(1568);
 
       /***/
     },
@@ -901,7 +897,7 @@
       return __webpack_require__((__webpack_require__.s = moduleId));
     };
     /******/ __webpack_require__.O(0, [888, 179], function () {
-      return __webpack_exec__(5885);
+      return __webpack_exec__(801);
     });
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for index-HASH.js
@@ -1,7 +1,7 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [405],
   {
-    /***/ 3558: /***/ function (
+    /***/ 6481: /***/ function (
       __unused_webpack_module,
       __unused_webpack_exports,
       __webpack_require__
@@ -9,7 +9,7 @@
       (window.__NEXT_P = window.__NEXT_P || []).push([
         "/",
         function () {
-          return __webpack_require__(580);
+          return __webpack_require__(7126);
         },
       ]);
       if (false) {
@@ -18,7 +18,7 @@
       /***/
     },
 
-    /***/ 580: /***/ function (
+    /***/ 7126: /***/ function (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -44,7 +44,7 @@
       return __webpack_require__((__webpack_require__.s = moduleId));
     };
     /******/ __webpack_require__.O(0, [888, 179], function () {
-      return __webpack_exec__(3558);
+      return __webpack_exec__(6481);
     });
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for link-HASH.js
@@ -1,7 +1,7 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [644],
   {
-    /***/ 8662: /***/ function (
+    /***/ 7014: /***/ function (
       __unused_webpack_module,
       __unused_webpack_exports,
       __webpack_require__
@@ -9,7 +9,7 @@
       (window.__NEXT_P = window.__NEXT_P || []).push([
         "/link",
         function () {
-          return __webpack_require__(2592);
+          return __webpack_require__(4920);
         },
       ]);
       if (false) {
@@ -18,7 +18,7 @@
       /***/
     },
 
-    /***/ 3540: /***/ function (module, exports) {
+    /***/ 3571: /***/ function (module, exports) {
       "use strict";
 
       Object.defineProperty(exports, "__esModule", {
@@ -54,6 +54,9 @@
         ACTION_FAST_REFRESH: function () {
           return ACTION_FAST_REFRESH;
         },
+        ACTION_SERVER_ACTION: function () {
+          return ACTION_SERVER_ACTION;
+        },
       });
       const ACTION_REFRESH = "refresh";
       const ACTION_NAVIGATE = "navigate";
@@ -61,6 +64,7 @@
       const ACTION_SERVER_PATCH = "server-patch";
       const ACTION_PREFETCH = "prefetch";
       const ACTION_FAST_REFRESH = "fast-refresh";
+      const ACTION_SERVER_ACTION = "server-action";
       var PrefetchKind;
       (function (PrefetchKind) {
         PrefetchKind["AUTO"] = "auto";
@@ -82,7 +86,7 @@
       /***/
     },
 
-    /***/ 8651: /***/ function (module, exports) {
+    /***/ 9147: /***/ function (module, exports) {
       "use strict";
 
       Object.defineProperty(exports, "__esModule", {
@@ -117,7 +121,7 @@
       /***/
     },
 
-    /***/ 681: /***/ function (module, exports, __webpack_require__) {
+    /***/ 3051: /***/ function (module, exports, __webpack_require__) {
       "use strict";
       /* __next_internal_client_entry_do_not_use__  cjs */
       Object.defineProperty(exports, "__esModule", {
@@ -131,19 +135,19 @@
       });
       const _interop_require_default = __webpack_require__(8266);
       const _react = /*#__PURE__*/ _interop_require_default._(
-        __webpack_require__(2947)
+        __webpack_require__(465)
       );
-      const _resolvehref = __webpack_require__(9560);
-      const _islocalurl = __webpack_require__(2790);
-      const _formaturl = __webpack_require__(8782);
-      const _utils = __webpack_require__(1205);
-      const _addlocale = __webpack_require__(31);
-      const _routercontext = __webpack_require__(562);
-      const _approutercontext = __webpack_require__(8557);
-      const _useintersection = __webpack_require__(4723);
-      const _getdomainlocale = __webpack_require__(8651);
-      const _addbasepath = __webpack_require__(695);
-      const _routerreducertypes = __webpack_require__(3540);
+      const _resolvehref = __webpack_require__(7247);
+      const _islocalurl = __webpack_require__(4552);
+      const _formaturl = __webpack_require__(7090);
+      const _utils = __webpack_require__(9452);
+      const _addlocale = __webpack_require__(5899);
+      const _routercontext = __webpack_require__(9718);
+      const _approutercontext = __webpack_require__(3651);
+      const _useintersection = __webpack_require__(3882);
+      const _getdomainlocale = __webpack_require__(9147);
+      const _addbasepath = __webpack_require__(3852);
+      const _routerreducertypes = __webpack_require__(3571);
       const prefetched = new Set();
       function prefetch(router, href, as, options, appOptions, isAppRouter) {
         if (false) {
@@ -557,7 +561,7 @@
       /***/
     },
 
-    /***/ 4723: /***/ function (module, exports, __webpack_require__) {
+    /***/ 3882: /***/ function (module, exports, __webpack_require__) {
       "use strict";
 
       Object.defineProperty(exports, "__esModule", {
@@ -569,8 +573,8 @@
           return useIntersection;
         },
       });
-      const _react = __webpack_require__(2947);
-      const _requestidlecallback = __webpack_require__(235);
+      const _react = __webpack_require__(465);
+      const _requestidlecallback = __webpack_require__(5426);
       const hasIntersectionObserver =
         typeof IntersectionObserver === "function";
       const observers = new Map();
@@ -683,7 +687,7 @@
       /***/
     },
 
-    /***/ 2592: /***/ function (
+    /***/ 4920: /***/ function (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -697,9 +701,9 @@
         /* harmony export */
       });
       /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
-        __webpack_require__(3268);
+        __webpack_require__(9701);
       /* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_1__ =
-        __webpack_require__(4595);
+        __webpack_require__(9495);
       /* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_1___default =
         /*#__PURE__*/ __webpack_require__.n(
           next_link__WEBPACK_IMPORTED_MODULE_1__
@@ -730,7 +734,7 @@
       /***/
     },
 
-    /***/ 6205: /***/ function (
+    /***/ 1963: /***/ function (
       __unused_webpack_module,
       exports,
       __webpack_require__
@@ -745,7 +749,7 @@
        * This source code is licensed under the MIT license found in the
        * LICENSE file in the root directory of this source tree.
        */
-      var f = __webpack_require__(2947),
+      var f = __webpack_require__(465),
         k = Symbol.for("react.element"),
         l = Symbol.for("react.fragment"),
         m = Object.prototype.hasOwnProperty,
@@ -780,7 +784,7 @@
       /***/
     },
 
-    /***/ 3268: /***/ function (
+    /***/ 9701: /***/ function (
       module,
       __unused_webpack_exports,
       __webpack_require__
@@ -788,19 +792,19 @@
       "use strict";
 
       if (true) {
-        module.exports = __webpack_require__(6205);
+        module.exports = __webpack_require__(1963);
       } else {
       }
 
       /***/
     },
 
-    /***/ 4595: /***/ function (
+    /***/ 9495: /***/ function (
       module,
       __unused_webpack_exports,
       __webpack_require__
     ) {
-      module.exports = __webpack_require__(681);
+      module.exports = __webpack_require__(3051);
 
       /***/
     },
@@ -811,7 +815,7 @@
       return __webpack_require__((__webpack_require__.s = moduleId));
     };
     /******/ __webpack_require__.O(0, [888, 179], function () {
-      return __webpack_exec__(8662);
+      return __webpack_exec__(7014);
     });
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for routerDirect-HASH.js
@@ -1,7 +1,7 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [58],
   {
-    /***/ 2188: /***/ function (
+    /***/ 7288: /***/ function (
       __unused_webpack_module,
       __unused_webpack_exports,
       __webpack_require__
@@ -9,7 +9,7 @@
       (window.__NEXT_P = window.__NEXT_P || []).push([
         "/routerDirect",
         function () {
-          return __webpack_require__(2453);
+          return __webpack_require__(3223);
         },
       ]);
       if (false) {
@@ -18,7 +18,7 @@
       /***/
     },
 
-    /***/ 2453: /***/ function (
+    /***/ 3223: /***/ function (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -32,9 +32,9 @@
         /* harmony export */
       });
       /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
-        __webpack_require__(3268);
+        __webpack_require__(9701);
       /* harmony import */ var next_router__WEBPACK_IMPORTED_MODULE_1__ =
-        __webpack_require__(5866);
+        __webpack_require__(5664);
       /* harmony import */ var next_router__WEBPACK_IMPORTED_MODULE_1___default =
         /*#__PURE__*/ __webpack_require__.n(
           next_router__WEBPACK_IMPORTED_MODULE_1__
@@ -54,7 +54,7 @@
       /***/
     },
 
-    /***/ 6205: /***/ function (
+    /***/ 1963: /***/ function (
       __unused_webpack_module,
       exports,
       __webpack_require__
@@ -69,7 +69,7 @@
        * This source code is licensed under the MIT license found in the
        * LICENSE file in the root directory of this source tree.
        */
-      var f = __webpack_require__(2947),
+      var f = __webpack_require__(465),
         k = Symbol.for("react.element"),
         l = Symbol.for("react.fragment"),
         m = Object.prototype.hasOwnProperty,
@@ -104,7 +104,7 @@
       /***/
     },
 
-    /***/ 3268: /***/ function (
+    /***/ 9701: /***/ function (
       module,
       __unused_webpack_exports,
       __webpack_require__
@@ -112,19 +112,19 @@
       "use strict";
 
       if (true) {
-        module.exports = __webpack_require__(6205);
+        module.exports = __webpack_require__(1963);
       } else {
       }
 
       /***/
     },
 
-    /***/ 5866: /***/ function (
+    /***/ 5664: /***/ function (
       module,
       __unused_webpack_exports,
       __webpack_require__
     ) {
-      module.exports = __webpack_require__(5038);
+      module.exports = __webpack_require__(1556);
 
       /***/
     },
@@ -135,7 +135,7 @@
       return __webpack_require__((__webpack_require__.s = moduleId));
     };
     /******/ __webpack_require__.O(0, [888, 179], function () {
-      return __webpack_exec__(2188);
+      return __webpack_exec__(7288);
     });
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for script-HASH.js
@@ -1,7 +1,7 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [797],
   {
-    /***/ 1136: /***/ function (
+    /***/ 6695: /***/ function (
       __unused_webpack_module,
       __unused_webpack_exports,
       __webpack_require__
@@ -9,7 +9,7 @@
       (window.__NEXT_P = window.__NEXT_P || []).push([
         "/script",
         function () {
-          return __webpack_require__(6159);
+          return __webpack_require__(3323);
         },
       ]);
       if (false) {
@@ -18,7 +18,7 @@
       /***/
     },
 
-    /***/ 6159: /***/ function (
+    /***/ 3323: /***/ function (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -32,9 +32,9 @@
         /* harmony export */
       });
       /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
-        __webpack_require__(3268);
+        __webpack_require__(9701);
       /* harmony import */ var next_script__WEBPACK_IMPORTED_MODULE_1__ =
-        __webpack_require__(9096);
+        __webpack_require__(6071);
       /* harmony import */ var next_script__WEBPACK_IMPORTED_MODULE_1___default =
         /*#__PURE__*/ __webpack_require__.n(
           next_script__WEBPACK_IMPORTED_MODULE_1__
@@ -67,7 +67,7 @@
       /***/
     },
 
-    /***/ 6205: /***/ function (
+    /***/ 1963: /***/ function (
       __unused_webpack_module,
       exports,
       __webpack_require__
@@ -82,7 +82,7 @@
        * This source code is licensed under the MIT license found in the
        * LICENSE file in the root directory of this source tree.
        */
-      var f = __webpack_require__(2947),
+      var f = __webpack_require__(465),
         k = Symbol.for("react.element"),
         l = Symbol.for("react.fragment"),
         m = Object.prototype.hasOwnProperty,
@@ -117,7 +117,7 @@
       /***/
     },
 
-    /***/ 3268: /***/ function (
+    /***/ 9701: /***/ function (
       module,
       __unused_webpack_exports,
       __webpack_require__
@@ -125,19 +125,19 @@
       "use strict";
 
       if (true) {
-        module.exports = __webpack_require__(6205);
+        module.exports = __webpack_require__(1963);
       } else {
       }
 
       /***/
     },
 
-    /***/ 9096: /***/ function (
+    /***/ 6071: /***/ function (
       module,
       __unused_webpack_exports,
       __webpack_require__
     ) {
-      module.exports = __webpack_require__(550);
+      module.exports = __webpack_require__(1787);
 
       /***/
     },
@@ -148,7 +148,7 @@
       return __webpack_require__((__webpack_require__.s = moduleId));
     };
     /******/ __webpack_require__.O(0, [888, 179], function () {
-      return __webpack_exec__(1136);
+      return __webpack_exec__(6695);
     });
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for withRouter-HASH.js
@@ -1,7 +1,7 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [807],
   {
-    /***/ 3551: /***/ function (
+    /***/ 8118: /***/ function (
       __unused_webpack_module,
       __unused_webpack_exports,
       __webpack_require__
@@ -9,7 +9,7 @@
       (window.__NEXT_P = window.__NEXT_P || []).push([
         "/withRouter",
         function () {
-          return __webpack_require__(1459);
+          return __webpack_require__(7107);
         },
       ]);
       if (false) {
@@ -18,7 +18,7 @@
       /***/
     },
 
-    /***/ 1459: /***/ function (
+    /***/ 7107: /***/ function (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -32,9 +32,9 @@
         /* harmony export */
       });
       /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
-        __webpack_require__(3268);
+        __webpack_require__(9701);
       /* harmony import */ var next_router__WEBPACK_IMPORTED_MODULE_1__ =
-        __webpack_require__(5866);
+        __webpack_require__(5664);
       /* harmony import */ var next_router__WEBPACK_IMPORTED_MODULE_1___default =
         /*#__PURE__*/ __webpack_require__.n(
           next_router__WEBPACK_IMPORTED_MODULE_1__
@@ -53,7 +53,7 @@
       /***/
     },
 
-    /***/ 6205: /***/ function (
+    /***/ 1963: /***/ function (
       __unused_webpack_module,
       exports,
       __webpack_require__
@@ -68,7 +68,7 @@
        * This source code is licensed under the MIT license found in the
        * LICENSE file in the root directory of this source tree.
        */
-      var f = __webpack_require__(2947),
+      var f = __webpack_require__(465),
         k = Symbol.for("react.element"),
         l = Symbol.for("react.fragment"),
         m = Object.prototype.hasOwnProperty,
@@ -103,7 +103,7 @@
       /***/
     },
 
-    /***/ 3268: /***/ function (
+    /***/ 9701: /***/ function (
       module,
       __unused_webpack_exports,
       __webpack_require__
@@ -111,19 +111,19 @@
       "use strict";
 
       if (true) {
-        module.exports = __webpack_require__(6205);
+        module.exports = __webpack_require__(1963);
       } else {
       }
 
       /***/
     },
 
-    /***/ 5866: /***/ function (
+    /***/ 5664: /***/ function (
       module,
       __unused_webpack_exports,
       __webpack_require__
     ) {
-      module.exports = __webpack_require__(5038);
+      module.exports = __webpack_require__(1556);
 
       /***/
     },
@@ -134,7 +134,7 @@
       return __webpack_require__((__webpack_require__.s = moduleId));
     };
     /******/ __webpack_require__.O(0, [888, 179], function () {
-      return __webpack_exec__(3551);
+      return __webpack_exec__(8118);
     });
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for 846-HASH.js

Diff too large to display

Diff for 869.HASH.js
@@ -1,8 +1,8 @@
 "use strict";
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
-  [869],
+  [959],
   {
-    /***/ 4869: /***/ function (
+    /***/ 959: /***/ function (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -15,7 +15,7 @@
         /* harmony export */
       });
       /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
-        __webpack_require__(3268);
+        __webpack_require__(9701);
 
       const Hello = () => {
         return /*#__PURE__*/ (0,
Diff for 974ec2d0-HASH.js

Diff too large to display

Diff for page-0f3d25a7c0ecb2fe.js
@@ -1,7 +1,7 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [760, 185, 952],
   {
-    /***/ 8372: /***/ function () {
+    /***/ 7746: /***/ function () {
       /***/
     },
   },
@@ -10,8 +10,8 @@
     /******/ var __webpack_exec__ = function (moduleId) {
       return __webpack_require__((__webpack_require__.s = moduleId));
     };
-    /******/ __webpack_require__.O(0, [961, 846, 744], function () {
-      return __webpack_exec__(8372);
+    /******/ __webpack_require__.O(0, [972, 992, 744], function () {
+      return __webpack_exec__(7746);
     });
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for page-12bf7c84b5879789.js
@@ -1,7 +1,7 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [952, 185, 760],
   {
-    /***/ 8372: /***/ function () {
+    /***/ 7746: /***/ function () {
       /***/
     },
   },
@@ -10,8 +10,8 @@
     /******/ var __webpack_exec__ = function (moduleId) {
       return __webpack_require__((__webpack_require__.s = moduleId));
     };
-    /******/ __webpack_require__.O(0, [961, 846, 744], function () {
-      return __webpack_exec__(8372);
+    /******/ __webpack_require__.O(0, [972, 992, 744], function () {
+      return __webpack_exec__(7746);
     });
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for layout-ccf26..8433d050e.js
@@ -1,7 +1,7 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [185, 952, 760],
   {
-    /***/ 8372: /***/ function () {
+    /***/ 7746: /***/ function () {
       /***/
     },
   },
@@ -10,8 +10,8 @@
     /******/ var __webpack_exec__ = function (moduleId) {
       return __webpack_require__((__webpack_require__.s = moduleId));
     };
-    /******/ __webpack_require__.O(0, [961, 846, 744], function () {
-      return __webpack_exec__(8372);
+    /******/ __webpack_require__.O(0, [972, 992, 744], function () {
+      return __webpack_exec__(7746);
     });
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for main-HASH.js

Diff too large to display

Diff for main-app-HASH.js
@@ -1,25 +1,25 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [744],
   {
-    /***/ 8082: /***/ function (
+    /***/ 7128: /***/ function (
       __unused_webpack_module,
       __unused_webpack_exports,
       __webpack_require__
     ) {
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 4507, 23)
+        __webpack_require__.t.bind(__webpack_require__, 9963, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 8550, 23)
+        __webpack_require__.t.bind(__webpack_require__, 3851, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 3625, 23)
+        __webpack_require__.t.bind(__webpack_require__, 3152, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 6982, 23)
+        __webpack_require__.t.bind(__webpack_require__, 709, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 6690, 23)
+        __webpack_require__.t.bind(__webpack_require__, 905, 23)
       );
 
       /***/
@@ -30,8 +30,8 @@
     /******/ var __webpack_exec__ = function (moduleId) {
       return __webpack_require__((__webpack_require__.s = moduleId));
     };
-    /******/ __webpack_require__.O(0, [961, 846], function () {
-      return __webpack_exec__(808), __webpack_exec__(8082);
+    /******/ __webpack_require__.O(0, [972, 992], function () {
+      return __webpack_exec__(5962), __webpack_exec__(7128);
     });
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for webpack-HASH.js
@@ -219,7 +219,7 @@
     /******/ __webpack_require__.u = function (chunkId) {
       /******/ // return url for filenames based on template
       /******/ return (
-        "static/chunks/" + chunkId + "." + "cb3f1602da3175db" + ".js"
+        "static/chunks/" + chunkId + "." + "34508e89b1d2d329" + ".js"
       );
       /******/
     };
Diff for index.html
@@ -11,19 +11,19 @@
       src="/_next/static/chunks/polyfills-c67a75d1b6f99dc8.js"
     ></script>
     <script
-      src="/_next/static/chunks/webpack-d9965445ebce461e.js"
+      src="/_next/static/chunks/webpack-c61449b956bd4ddc.js"
       defer=""
     ></script>
     <script
-      src="/_next/static/chunks/main-3f40b1ab38b79545.js"
+      src="/_next/static/chunks/main-c75524de2a35a0cd.js"
       defer=""
     ></script>
     <script
-      src="/_next/static/chunks/pages/_app-39c49a32fdfb4902.js"
+      src="/_next/static/chunks/pages/_app-fd2fd11c0153c1f4.js"
       defer=""
     ></script>
     <script
-      src="/_next/static/chunks/pages/index-96b4df8f97c0f01a.js"
+      src="/_next/static/chunks/pages/index-b21e2d2005e858d6.js"
       defer=""
     ></script>
     <script src="/_next/static/BUILD_ID/_buildManifest.js" defer=""></script>
Diff for link.html
@@ -11,19 +11,19 @@
       src="/_next/static/chunks/polyfills-c67a75d1b6f99dc8.js"
     ></script>
     <script
-      src="/_next/static/chunks/webpack-d9965445ebce461e.js"
+      src="/_next/static/chunks/webpack-c61449b956bd4ddc.js"
       defer=""
     ></script>
     <script
-      src="/_next/static/chunks/main-3f40b1ab38b79545.js"
+      src="/_next/static/chunks/main-c75524de2a35a0cd.js"
       defer=""
     ></script>
     <script
-      src="/_next/static/chunks/pages/_app-39c49a32fdfb4902.js"
+      src="/_next/static/chunks/pages/_app-fd2fd11c0153c1f4.js"
       defer=""
     ></script>
     <script
-      src="/_next/static/chunks/pages/link-9852e766f2d5caf3.js"
+      src="/_next/static/chunks/pages/link-3a7bb39cf39dd521.js"
       defer=""
     ></script>
     <script src="/_next/static/BUILD_ID/_buildManifest.js" defer=""></script>
Diff for withRouter.html
@@ -11,19 +11,19 @@
       src="/_next/static/chunks/polyfills-c67a75d1b6f99dc8.js"
     ></script>
     <script
-      src="/_next/static/chunks/webpack-d9965445ebce461e.js"
+      src="/_next/static/chunks/webpack-c61449b956bd4ddc.js"
       defer=""
     ></script>
     <script
-      src="/_next/static/chunks/main-3f40b1ab38b79545.js"
+      src="/_next/static/chunks/main-c75524de2a35a0cd.js"
       defer=""
     ></script>
     <script
-      src="/_next/static/chunks/pages/_app-39c49a32fdfb4902.js"
+      src="/_next/static/chunks/pages/_app-fd2fd11c0153c1f4.js"
       defer=""
     ></script>
     <script
-      src="/_next/static/chunks/pages/withRouter-331bb6165873d961.js"
+      src="/_next/static/chunks/pages/withRouter-829c5d0ec0bf0aa7.js"
       defer=""
     ></script>
     <script src="/_next/static/BUILD_ID/_buildManifest.js" defer=""></script>

Please sign in to comment.