diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..91ad12a
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2026 OxideJS contributors
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..08f933f
--- /dev/null
+++ b/README.md
@@ -0,0 +1,207 @@
+
+
+
+
OxideJS:�� AI Agent 的轻�级 JavaScript 执行引擎
+
+
+
+
+
+
+
+
+
+## 1. 项目简介
+
+OxideJS 是一个基于 Rust 的轻é‡�级 JavaScript æ‰§è¡Œå¼•æ“Žï¼Œæ“…é•¿çŸæ—¶ã€�高频ã€�å�³æ—¶æ‰§è¡Œçš„脚本è¿�行场景,主è¦�é�¢å�‘ Agent 工具调用ã€�脚本沙箱ã€�æ•°æ�®è½¬æ�¢æµ�水线和嵌入å¼�è¿�行时。
+
+当å‰�项目è�šç„¦äºŽå®žç”¨ ECMAScript å�集,并通过 [test262](https://github.com/tc39/test262) æŒ�ç»éªŒè¯�å…¼å®¹æ€§ã€‚æˆ‘ä»¬çš„æœ€ç»ˆç›®æ ‡æ˜¯æ��供一个å°�åž‹ã€�å�¯æ£€æŸ¥ã€�跨平å�°ã€�å�¯åЍæˆ�本å�¯é¢„测ã€�benchmark å�¯å¤�现的 JavaScript runtime。
+
+## 2. 特性概览
+
+- **Rust 实现**:使用 Cargo workspace 组织 parser�compiler�VM�runtime�CLI 和 test runner。
+- **è‡ªç ”å¼•æ“Ž**ï¼šè‡ªç ”å—节ç �ã€�寄å˜å™¨å¼�虚拟机ã€�对象模型和è¿�行时状æ€�管ç�†ã€‚
+- **寄å˜å™¨å¼� VM**:使用固定寄å˜å™¨æ–‡ä»¶æ‰§è¡Œå—节ç �,å‡�å°‘æ ˆå¼� VM ä¸é¢‘ç¹� push/pop 的开销。
+- **NaN-boxing 值表示**:用 64-bit 值统一表示 number�boolean�object�string�null 和 undefined。
+- **Shape 对象布局**:使用éš�è—�ç±»æ€�想æ��述对象属性布局,便于缓å˜å±žæ€§å��移。
+- **Inline Cache æ–¹å�‘**:围绕 shape/offset 缓å˜è®¾è®¡å±žæ€§è®¿é—®è·¯å¾„。
+- **共享è¿�行时 Kernel**:统一管ç�†å—符串驻留ã€�Shapeã€�编译缓å˜ã€�属性模æ�¿å’Œå†…置对象。
+- **test262 runner**:内置兼容性测试�行器,输出 pass / fail / skip 统计。
+
+## 3. æž¶æž„
+
+OxideJS 采用ç»�典的 parse -> compile -> execute æµ�水线,å�Œæ—¶ä½¿ç”¨ **å�• Kernelã€�多 VM** çš„è¿�行时结构:一个 `OxideKernel` ä¿�å˜å�¯å…±äº«çš„å—符串ã€�Shapeã€�编译缓å˜ã€�属性模æ�¿å’Œå†…置对象;多个 `oxide_vm` 实例é�¢å�‘ä¸�å�Œæ‰§è¡Œè¯·æ±‚独立è¿�行,并共å�Œå¼•用å�Œä¸€ä¸ª Kernel。
+
+```text
+ +----------------------+
+ | oxide_kernel |
+ |----------------------|
+ | StringForge |
+ | ShapeForge |
+ | CodeForge |
+ | PropForge |
+ | BuiltinWorld |
+ +----------+-----------+
+ |
+ shared Arc | shared Arc
+ +-----------------+-----------------+
+ | | |
+ v v v
+ +----------------+ +----------------+ +----------------+
+ | oxide_vm | | oxide_vm | | oxide_vm |
+ |----------------| |----------------| |----------------|
+ | registers | | registers | | registers |
+ | call frames | | call frames | | call frames |
+ | local epoch | | local epoch | | local epoch |
+ +-------+--------+ +-------+--------+ +-------+--------+
+ | | |
+ v v v
+ JsValue Result JsValue Result JsValue Result
+
+Per request pipeline:
+
+ JavaScript Source
+ |
+ v
++------------------+
+| oxide_parser | è§£æž�æº�ç �,生æˆ� AST
++------------------+
+ |
+ v
++------------------+
+| oxide_compiler | AST 编译为寄å˜å™¨å¼�å—节ç �ï¼›å�¯å‘½ä¸ Kernel.CodeForge
++------------------+
+ |
+ v
++------------------+
+| oxide_vm | 从 VM Pool 获å�–实例并执行å—节ç �
++------------------+
+```
+
+æ ¸å¿ƒç»„ä»¶ï¼š
+
+1. **Parser å‰�端**:通过 `oxide_parser` å°†æº�ç �è§£æž�为 AST。
+2. **å—节ç �编译器**:将 AST é™�低为 OxideJS å—节ç �ã€�常é‡�æ± å’Œå¯„å˜å™¨å¸ƒå±€ã€‚
+3. **寄å˜å™¨å¼� VM**:`oxide_vm` 读å�–å—节ç �并使用固定寄å˜å™¨æ–‡ä»¶æ‰§è¡Œï¼›æ¯�个 VM ä¿�æŒ�自己的寄å˜å™¨ã€�è°ƒç”¨æ ˆå’Œæœ¬åœ° epoch。
+4. **值系统**:`JsValue` 负责紧凑表示 JavaScript �行时值。
+5. **对象模型**:对象通过 Shape ID �述属性布局。
+6. **è¿�行时 Kernel**:`OxideKernel` ä¿�å˜å�¯è·¨ VM å¤�用的共享状æ€�;多个 VM 通过 `Arc` 引用å�Œä¸€ä¸ª Kernel,é�¿å…�é‡�å¤�åˆ�始化å—ç¬¦ä¸²æ± ã€�Shape 表ã€�内置对象和编译缓å˜ã€‚
+7. **内置对象层**:常用内置对象和方法由 Rust 原生实现。
+8. **兼容性测试层**:`oxide_test262` �行 test262 用例并输出统计结果。
+
+## 4. 仓库结构
+
+```text
+project-root/
+├── Cargo.toml
+├── README.md
+├── crates/
+│ ├── oxide_parser/ # JavaScript parser 接入层
+│ ├── oxide_compiler/ # AST -> bytecode 编译器
+│ ├── oxide_types/ # JsValueã€�JsObjectã€�Shapeã€�内å˜åŸºç¡€ç±»åž‹
+│ ├── oxide_kernel/ # 共享�行时状�和内置对象注册
+│ ├── oxide_vm/ # å—节ç � VM å’Œè¿�行时执行逻辑
+│ ├── oxide_api/ # 嵌入� API 预留层
+│ ├── oxide_cli/ # 命令行工具
+│ └── oxide_test262/ # test262 兼容性测试�行器
+└── tests/
+ └── test262/ # 本地 test262 测试套件
+```
+
+## 5. 构建
+
+### 构建全部 crate
+
+```bash
+cargo build --release
+```
+
+### �行�元测试
+
+```bash
+cargo test
+```
+
+## 6. CLI 使用
+
+### 执行æº�ç �片段
+
+```bash
+cargo run --release -p oxide_cli -- eval "1 + 2"
+```
+
+### 执行文件
+
+```bash
+cargo run --release -p oxide_cli -- run examples/demo.js
+```
+
+### 打å�°ç¼–译å�Žçš„å—节ç �
+
+```bash
+cargo run --release -p oxide_cli -- compile -e "1 + 2"
+```
+
+### �动 REPL
+
+```bash
+cargo run --release -p oxide_cli
+```
+
+## 7. test262 兼容性测试
+
+OxideJS 包�独立的 test262 runner:
+
+```bash
+cargo run --release -p oxide_test262
+```
+
+è¿�行指定å�目录:
+
+```bash
+cargo run --release -p oxide_test262 -- tests/test262/test language/expressions
+```
+
+runner 会输出:
+
+- �现的测试文件总数;
+- pass / fail / skip 数�;
+- 全�通过率;
+- å®žé™…æ‰§è¡Œæ ·æœ¬é€šè¿‡çŽ‡ï¼›
+- 失败类别统计;
+- 按目录拆分的结果(�决于 runner 版本)。
+
+兼容性数å—属于开å�‘è¿‡ç¨‹æŒ‡æ ‡ã€‚å�‘布æ£å¼� benchmark 或兼容性结论å‰�,应基于当å‰� checkout çš„ test262 版本é‡�新生æˆ�结果。
+
+## 8. Benchmark
+
+Benchmark 工作围绕��现脚本和�比较 baseline 展开。
+
+计划ä¸çš„ benchmark 分组:
+
+| 分组 | 目的 | 状� |
+|------|------|------|
+| 表达� microbenchmark | 算术�比较�逻辑�作 | planned |
+| 对象 / 属性访问 benchmark | 对象创建和属性访问路径 | planned |
+| Array / String benchmark | 常用内置对象�作 | planned |
+| 函数调用 benchmark | å—节ç � call/return 与 native call 开销 | planned |
+| Agent é£Žæ ¼ workload | çŸæ—¶ã€�é‡�å¤�结构脚本和数æ�®è½¬æ�¢ | planned |
+| JetStream 2.0 å�集 | ä¾�赖兼容性的 JS benchmark 覆盖 | planned |
+
+当å‰�ç ”ç©¶ç”¨ baseline:
+
+- QuickJS
+- Boa
+- JerryScript
+
+[TODO] 完工时放与其他 baseline çš„å¯¹æ¯”è¡¨æ ¼
+
+## 9. 主�使用的开�项目
+
+- [oxc](https://github.com/oxc-project/oxc) — JavaScript æº�ç �è§£æž�ï¼Œå› ä¸ºè¿™ä¸�是我们的工作ä¸å¿ƒï¼Œæ‰€ä»¥æ²¡æœ‰è‡ªå·±æž„建该系统
+- [bumpalo](https://github.com/fitzgen/bumpalo) — Bump allocator,构æˆ� `Epoch` arena 内å˜ç³»ç»Ÿçš„底层分é…�器
+- [dashmap](https://github.com/xacrimon/dashmap) — å¹¶å�‘ HashMap,用于 `CodeForge`ã€�`ShapeForge`ã€�`PropForge` è·¨ VM 缓å˜å…±äº«
+
+## 10. License
+
+本项目采用 MIT License 开��议。详� [LICENSE](LICENSE)。
diff --git a/benchmark/internal/results/chart_latency.png b/benchmark/internal/results/chart_latency.png
new file mode 100644
index 0000000..b1f8717
Binary files /dev/null and b/benchmark/internal/results/chart_latency.png differ
diff --git a/benchmark/internal/results/chart_memory.png b/benchmark/internal/results/chart_memory.png
new file mode 100644
index 0000000..98f4d5c
Binary files /dev/null and b/benchmark/internal/results/chart_memory.png differ
diff --git a/benchmark/internal/results/chart_single_stmt_8259cl.png b/benchmark/internal/results/chart_single_stmt_8259cl.png
new file mode 100644
index 0000000..1a0599c
Binary files /dev/null and b/benchmark/internal/results/chart_single_stmt_8259cl.png differ
diff --git a/benchmark/internal/results/chart_single_stmt_kunpeng.png b/benchmark/internal/results/chart_single_stmt_kunpeng.png
new file mode 100644
index 0000000..4da4413
Binary files /dev/null and b/benchmark/internal/results/chart_single_stmt_kunpeng.png differ
diff --git a/benchmark/internal/results/chart_stress_8259cl.png b/benchmark/internal/results/chart_stress_8259cl.png
new file mode 100644
index 0000000..3979c25
Binary files /dev/null and b/benchmark/internal/results/chart_stress_8259cl.png differ
diff --git a/benchmark/internal/results/chart_stress_kunpeng.png b/benchmark/internal/results/chart_stress_kunpeng.png
new file mode 100644
index 0000000..7d5c822
Binary files /dev/null and b/benchmark/internal/results/chart_stress_kunpeng.png differ
diff --git a/docs/assets/oxidejs-logo.svg b/docs/assets/oxidejs-logo.svg
new file mode 100644
index 0000000..eb7414d
--- /dev/null
+++ b/docs/assets/oxidejs-logo.svg
@@ -0,0 +1,125 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/设计方案文档.md b/设计方案文档.md
new file mode 100644
index 0000000..25287af
--- /dev/null
+++ b/设计方案文档.md
@@ -0,0 +1,1020 @@
+# �� AI Agent 的轻�级 JavaScript 执行引擎设计方案文档
+
+> 队�:爱特�羊队(T2026104239910027)
+> 团队æˆ�员:å�¤å®‡æ�’ã€�å½ä¿Šçš“ã€�æ�œæ–‡éŸ¬
+> 项目�称:OxideJS
+> 技术路线:Rust + è‡ªç ”å—节ç �编译器 + 寄å˜å™¨å¼�虚拟机 + å�• Kernel 多 VM è¿�行时
+
+---
+
+## 一�设计�路
+
+### 1.1 问题背景
+
+在 AI Agentã€�自动化工具调用ã€�脚本沙箱和数æ�®è½¬æ�¢æµ�水线ä¸ï¼ŒJavaScript 代ç �的执行模å¼�ä¸Žä¼ ç»Ÿæµ�览器场景ä¸�å�Œï¼š
+
+- **执行时间çŸ**:å�•次脚本通常å�ªæ‰§è¡Œä¸€ä¸ªè¡¨è¾¾å¼�ã€�一段数æ�®å¤„ç�†é€»è¾‘或一次工具调用;
+- **调用频率高**:Agent å�¯èƒ½è¿žç»å�‘起大é‡�çŸè„šæœ¬æ‰§è¡Œè¯·æ±‚ï¼›
+- **代ç �结构é‡�å¤�**:由大模型生æˆ�的代ç �往往å˜åœ¨ç›¸ä¼¼æ¨¡æ�¿ï¼›
+- **上下文隔离è¦�求高**:ä¸�å�Œè¯·æ±‚需è¦�独立寄å˜å™¨ã€�è°ƒç”¨æ ˆã€�临时对象和异常状æ€�ï¼›
+- **公共信æ�¯å�¯å¤�用**:å—符串ã€�对象 Shapeã€�内置对象ã€�编译缓å˜ç‰å�¯ä»¥è·¨è¯·æ±‚å¤�用;
+- **ä¸�适å�ˆé‡�é‡�级 Runtime**ï¼šä¼ ç»Ÿ JS 引擎é�¢å�‘æµ�览器或长期è¿�行应用,å�¯åЍã€�GCã€�上下文管ç�†éƒ½è¾ƒé‡�。
+
+å› æ¤ï¼ŒOxideJS çš„è®¾è®¡æ ¸å¿ƒä¸�是简å�•å¤�刻æµ�览器 JavaScript 引擎,而是围绕“**è½»é‡�ã€�å�¯å¤�用ã€�å�¯éš”离ã€�å�¯æµ‹è¯•**â€�å››ä¸ªç›®æ ‡ï¼Œæž„å»ºé�¢å�‘çŸæ—¶æ‰§è¡Œåœºæ™¯çš„ JS runtime。
+
+### 1.2 æ€»ä½“è®¾è®¡ç›®æ ‡
+
+OxideJS çš„æ€»ä½“ç›®æ ‡æ˜¯å®žçŽ°ä¸€ä¸ªåŸºäºŽ Rust 的轻é‡�级 JS 执行引擎,æ��供完整的æº�ç �è§£æž�ã€�å—节ç �编译ã€�虚拟机执行和兼容性测试链路。
+
+è®¾è®¡ç›®æ ‡å¦‚ä¸‹ï¼š
+
+| ç›®æ ‡ | 说明 |
+|------------|---------------------------------------------------------------|
+| 轻�执行与跨平� | ��在�个平�都能�畅快速的�行 |
+| 多请求隔离 | æ¯�个 VM 拥有独立寄å˜å™¨ã€�è°ƒç”¨æ ˆã€�临时内å˜å’Œå¼‚常状æ€� |
+| è·¨ VM å¤�用 | Kernel ä¿�å˜å—符串ã€�Shapeã€�编译缓å˜ã€�内置对象ç‰å…±äº«çжæ€� |
+| 低 GC 干扰 | 临时对象优先进入会è¯� arena,å‡�å°‘çŸæ—¶æ‰§è¡Œä¸çš„全局回收压力 |
+| test262 驱动 | 使用 ECMAScript Test Suite æŒ�ç»éªŒè¯�è¯ä¹‰æ£ç¡®æ€§ |
+| �扩展架构 | parser�compiler�types�kernel�vm�cli�test262 runner 分 crate 组织 |
+
+### 1.3 创新点 1: � Kernel 多 VM
+
+OxideJS 最��的�行时结构是 **� Kernel 多 VM**。
+
+```text
+ Process / Engine Instance
+
++===================================================================================+
+| OxideKernel |
+| |
+| 分为两层: KernelCore (immutable, 跨请求永久共享) |
+| KernelSession (per-session, 通过 full_reset() 完全�建) |
+| |
+| ┌── KernelCore (Arc) ─────────────────────────────────────────� |
+| | +----------------+ +----------------+ +----------------+ +----------+ | |
+| | | PermInterner | | ShapeForge | | CodeForge | | PropForge| | |
+| | |----------------| |----------------| |----------------| |----------| | |
+| | | append-only key| | hidden classes | | bytecode cache | | shape→slot| | |
+| | | leaked &'static| | property layout| | LRU ç¼“å˜ | | IC 模æ�¿ | | |
+| | | 64-bit hash | | shape graph | | structural hash| | | | |
+| | +----------------+ +----------------+ +----------------+ +----------+ | |
+| | KernelConfig (pool / step / max_cached_modules / log levels) | |
+| └──────────────────────────────────────────────────────────────────────────┘ |
+| |
+| ┌── KernelSession (per-session) ──────────────────────────────────────────� |
+| | BuiltinWorld | Global object | BuiltinSnapshot | |
+| | Object/Array/ | 全局对象与基础 | �检测 + 选择性�建 | |
+| | Function/... | 属性 | | |
+| └─────────────────────────────────────────────────────────────────────────┘ |
++==========================================+========================================+
+ |
+ | Arc + KernelSession
+ |
+ +-------------------------------+-------------------------------+
+ | | |
+ v v v
++----------------------+ +----------------------+ +----------------------+
+| VM #1 | | VM #2 | | VM #N |
+|----------------------| |----------------------| |----------------------|
+| registers[256] | | registers[256] | | registers[256] |
+| pc | | pc | | pc |
+| bytecode | | bytecode | | bytecode |
+| immutables_cache | | immutables_cache | .... | immutables_cache |
+| frames (SmallVec) | | frames (SmallVec) | | frames (SmallVec) |
+| save_stack (共享) | | save_stack (共享) | | save_stack (共享) |
+| try / except state | | try / except state | | try / except state |
+| Epoch Arena (会�) | | Epoch Arena (会�) | | Epoch Arena (会�) |
+| JsString GC + roots | | JsString GC + roots | | JsString GC + roots |
+| object_prototype | | object_prototype | | object_prototype |
++----------+-----------+ +----------+-----------+ +----------+-----------+
+ | | |
+ v v v
+ Request Result Request Result Request Result
+```
+
+说明:
+
+- **PermInterner** å�–代了早期的 `StringForge`: 它å�ª intern **key / identifier / method name** ç‰æ°¸ä¸�释放的å—符串, 用 leaked `&'static str` + 64-bit hash 索引, 没有 ref-count 也没有 maybe_sweep é‡�ç¼–å�·è·¯å¾„, å› è€Œæ— é”�读ã€�零冲çª�;
+- **è¿�行时 JsString 值** (用户代ç �里 `"hello" + name` 产出的临时å—符串) ä¸�在 Kernel, 而是由å�„ VM 自带的 **JsString æ ‡è®°æ¸…æ‰« GC** 管ç�† (commit `fe2d492`), é…�å�ˆ Epoch Arena 实现çŸå‘½å¯¹è±¡ O(1) 回收;
+- **KernelCore vs KernelSession** 的拆分让 test262 runner å�¯ä»¥åœ¨ä¸�ä¸¢å¼ƒç¼–è¯‘ç¼“å˜ / Shape 图 / Property IC 模æ�¿çš„å‰�æ��下, 通过 `full_reset()` é‡�建 BuiltinWorld 与 global object, 实现测试间完全隔离 (commit `d242d08`)。
+
+该结构将�行时状�分为两类:
+
+| 状�类型 | 所在�置 | 生命周期 | 示例 |
+|----------|----------|----------|------|
+| 永久共享状� | `KernelCore` | 进程级�永�释放 | PermInterner (key/identifier)�ShapeForge�CodeForge�PropForge |
+| 会�级共享状� | `KernelSession` | 测试 / 会�级�� `full_reset()` �建 | BuiltinWorld�global object�BuiltinSnapshot |
+| 请求ç§�有状æ€� | `Vm` | 请求级ã€�çŸç”Ÿå‘½å‘¨æœŸ | 寄å˜å™¨ã€�PCã€�è°ƒç”¨æ ˆã€�异常ã€�Epoch Arenaã€�JsString GC æ ¹ |
+
+这�分层使得 OxideJS 能够�时满足两类需求:
+
+1. **隔离性**:æ¯�个 VM 独立执行,ä¸�共享寄å˜å™¨å’Œä¸´æ—¶å¯¹è±¡ï¼›
+2. **å¤�用性**:多个 VM 共享 Kernel,é�¿å…�é‡�å¤�构建å—符串ã€�Shapeã€�内置对象和编译结果。
+
+### 1.4 创新点 2: çŸç”Ÿå‘½å‘¨æœŸå†…å˜ä¸Ž GC
+
+AI Agent 场景ä¸çš„大部分对象具有明显的çŸç”Ÿå‘½å‘¨æœŸç‰¹å¾�:对象在一次脚本执行ä¸åˆ›å»ºï¼Œåœ¨æ‰§è¡Œç»“æ�Ÿå�Žç«‹å�³å¤±æ•ˆã€‚OxideJS å› æ¤å°†è¿�行时内å˜åˆ†ä¸ºå¤šä¸ªå±‚级:
+
+```text
++====================================================================================+
+| Memory Model |
++====================================================================================+
+
+ Long-lived / shared memory
+ ┌──────────────────────────────────────────────────────────────────────────────�
+ │ KernelCore (Arc, 进程级永久共享) │
+ │ │
+ │ PermInterner ShapeForge CodeForge PropForge │
+ │ append-only hidden classes bytecode LRU IC 模� │
+ │ key / ident shape graph structural hash shape→slot │
+ │ │
+ │ 生命周期: éš�è¿›ç¨‹å˜æ´», 表结构 append-only, æ°¸ä¸�释放 │
+ └──────────────────────────────────────────────────────────────────────────────┘
+ ┌──────────────────────────────────────────────────────────────────────────────�
+ │ KernelSession (per-session, �通过 full_reset() �建) │
+ │ │
+ │ BuiltinWorld Global object BuiltinSnapshot │
+ │ Object/Array/ 全局对象 �检测 + 选择性�建 │
+ │ Function/... │
+ │ │
+ │ 生命周期: �次 session, 测试隔离时通过 full_reset() 完全�建 │
+ └──────────────────────────────────────────────────────────────────────────────┘
+ â–²
+ │ shared references
+ │
+ Per-VM / per-session memory │
+ ┌───────────────────────────────────┴──────────────────────────────────────────�
+ │ Vm │
+ │ │
+ │ registers[256] / call frames (SmallVec) / try-catch / exception state │
+ │ │
+ │ +----------------------------+ │
+ │ | Epoch Arena | bump allocation, O(1) epoch 回收 │
+ │ |----------------------------| │
+ │ | object allocations | │
+ │ | arrays / temporary values | │
+ │ | execution-local metadata | │
+ │ +----------------------------+ │
+ │ │
+ │ +----------------------------+ │
+ │ | JsString GC | æ ‡è®°æ¸…æ‰«, 管ç�†è¿�行时 JsString 值 │
+ │ |----------------------------| │
+ │ | tracked allocations | │
+ │ | roots from registers | │
+ │ | roots from frames | │
+ │ | GC 阈值: 32 MB (commit ad7b044) │
+ │ +----------------------------+ │
+ │ │
+ │ 生命周期: å�• VM / å�•执行会è¯�, 执行结æ�Ÿå�Ž Epoch 翻页, GC æ ‡è®°æ¸…æ‰«æ‰¹é‡�释放 │
+ └──────────────────────────────────────────────────────────────────────────────┘
+```
+
+内å˜ä¸Ž GC 设计的关键点:
+
+- **çŸå‘½å¯¹è±¡è¿›å…¥ VM 本地 Epoch Arena**: bump allocation, 整个 epoch 翻页时 O(1) 回收, ä¸�å�‚与é€�对象扫æ��;
+- **VM 拥有自己的 JsString GC**: è¿�行时å—符串 (`"hello" + name` ç‰) ç”±æ ‡è®°æ¸…æ‰« GC 管ç�†, 寄å˜å™¨ / è°ƒç”¨æ ˆ / 异常对象 / Map/Set/Array 容器都作为 root, GC 阈值 32 MB 触å�‘ (commit `ad7b044`);
+- **永久状æ€�与会è¯�状æ€�分层**: `KernelCore` æŒ�有 PermInterner / Shape / Code / Prop ç‰é•¿ç”Ÿå‘½å‘¨æœŸè¡¨, `KernelSession` æŒ�有å�¯é‡�建的 BuiltinWorld 与 global object;
+- **测试 / çŸä¼šè¯�隔离**: 通过 `KernelSession::full_reset()` + `BuiltinSnapshot` è„�检测å�¯ä»¥åœ¨ä¸�丢弃编译缓å˜çš„å‰�æ��下é‡�建 builtin 与全局对象;
+- **Map / Set / Array / Object ç‰å®¹å™¨å�‚与 GC 追踪**: é˜²æ¢ session 对象在容器ä¸è¢«é”™è¯¯é‡Šæ”¾ (commit `9db28b2` 修过 Map/Set GC 追踪丢失问题)。
+
+### 1.5 创新点 3: è‡ªç ”å—节ç �与寄å˜å™¨å¼� VM
+
+OxideJS ä¸�直接解释 AST,而是先将 AST 编译为自定义å—节ç �,å†�由寄å˜å™¨å¼� VM 执行。
+
+```text
+ AST
+ |
+ | compiler pass
+ v
++-------------------------------+
+| CompiledModule |
+|-------------------------------|
+| bytecode: Vec |
+| constants: Vec |
+| n_registers |
+| sub_modules for functions |
++-------------------------------+
+ |
+ | run(module)
+ v
++-------------------------------+
+| VM |
+|-------------------------------|
+| r0 r1 r2 ... r255 |
+| pc |
+| frames |
+| current bytecode |
+| current constants |
++-------------------------------+
+```
+
+采用寄å˜å™¨å¼� VM çš„åŽŸå› ï¼š
+
+- 表达å¼�ä¸é—´ç»“æžœå�¯ä»¥ç›´æŽ¥ä¿�å˜åœ¨å¯„å˜å™¨ä¸ï¼›
+- 对象属性访问和函数å�‚æ•°ä¼ é€’æ›´ç›´æŽ¥ï¼›
+- ç›¸æ¯”æ ˆå¼� VM,å‡�少大é‡� push/pop 指令;
+- 便于å�Žç»åŠ å…¥ç±»åž‹å��馈ã€�inline cache 和局部优化。
+
+---
+
+## 二�实现�述
+
+### 2.1 完整工作�程
+
+OxideJS 的一次执行请求从输入 JS æº�ç �到返回结果,ç»�过以下æµ�程:
+
+```text
+┌────────────────────────────────────────────────────────────────────────────────────�
+│ One Evaluation Request │
+└────────────────────────────────────────────────────────────────────────────────────┘
+
+ 1. Source Input
+ │
+ │ JavaScript source string / file
+ â–¼
+┌───────────────────────�
+│ oxide_parser │
+│-----------------------│
+│ - create allocator │
+│ - parse source │
+│ - produce AST Program │
+└──────────┬────────────┘
+ │ AST
+ â–¼
+┌────────────────────────────────────────────────────────────────────────────────────�
+│ oxide_compiler │
+│------------------------------------------------------------------------------------│
+│ │
+│ Pass 1: counter / symbol projection │
+│ - walk statements and expressions │
+│ - allocate registers │
+│ - assign labels for jumps, loops, try/catch, switch │
+│ - build lexical binding information │
+│ │
+│ Pass 2: emitter │
+│ - emit fixed-width bytecode │
+│ - build constant pool │
+│ - compile function bodies into sub-modules │
+│ - encode property access / call / control-flow instructions │
+│ │
+│ Hash: structural_hash │
+│ - normalize AST structure │
+│ - generate cache key for CodeForge │
+│ │
+└──────────┬─────────────────────────────────────────────────────────────────────────┘
+ │ CompiledModule
+ â–¼
+┌────────────────────────────────────────────────────────────────────────────────────�
+│ KernelCore.CodeForge │
+│------------------------------------------------------------------------------------│
+│ if cache hit: │
+│ reuse Arc │
+│ else: │
+│ insert newly compiled module │
+└──────────┬─────────────────────────────────────────────────────────────────────────┘
+ │ Arc
+ â–¼
+┌────────────────────────────────────────────────────────────────────────────────────�
+│ VmPool / VM Selection │
+│------------------------------------------------------------------------------------│
+│ - obtain an idle VM │
+│ - VM references the same Arc │
+│ - reset request-local state │
+│ - prepare registers, bytecode, constants, frames │
+└──────────┬─────────────────────────────────────────────────────────────────────────┘
+ │
+ â–¼
+┌────────────────────────────────────────────────────────────────────────────────────�
+│ VM Dispatch Loop │
+│------------------------------------------------------------------------------------│
+│ while pc < bytecode.len(): │
+│ instr = bytecode[pc] │
+│ decode opcode / rd / a / b │
+│ dispatch opcode │
+│ │
+│ examples: │
+│ LOAD_CONST -> load constant to register │
+│ ADD / SUB -> numeric or string operation │
+│ GET_PROP -> property lookup through Shape / object model │
+│ CALL -> push CallFrame and enter sub-module │
+│ CALL_NATIVE -> call Rust builtin │
+│ THROW -> build exception and unwind │
+│ RETURN -> restore caller frame │
+│ HALT -> finish execution │
+└──────────┬─────────────────────────────────────────────────────────────────────────┘
+ │ JsValue
+ â–¼
+ 6. Result Formatting / API Return
+```
+
+### 2.2 Parser 层
+
+Parser 层负责将 JavaScript æº�ç �转æ�¢ä¸º AST。它ä¸�承载è¿�行时è¯ä¹‰ï¼Œè€Œæ˜¯ä¸º compiler æ��ä¾›æ ‡å‡†åŒ–è¾“å…¥ã€‚
+
+�责:
+
+- 接收æº�ç �å—符串;
+- 创建 AST allocator;
+- 调用 parser 得到 Program;
+- 将 parser error 转�为项目内部错误。
+
+对应模�:
+
+```text
+crates/oxide_parser/
+├── src/lib.rs
+└── src/error.rs
+```
+
+### 2.3 Compiler 层
+
+Compiler 层是 AST 到å—节ç �çš„æ ¸å¿ƒè½¬æ�¢é˜¶æ®µã€‚
+
+```text
+crates/oxide_compiler/src/
+├── compiler.rs # 编译入�和上下文
+├── counter.rs # 第一é��:寄å˜å™¨ã€�æ ‡ç¾ã€�符å�·ç»Ÿè®¡
+├── emitter.rs # 第二é��:生æˆ�å—节ç �
+├── hash.rs # structural hash,用于 CodeForge 缓å˜
+├── module.rs # CompiledModule / Constant
+├── opcode.rs # OpCode å’Œ 32-bit 指令编ç �
+└── symbol_table.rs # �法绑定与作用域信�
+```
+
+#### 2.3.1 两�编译
+
+第一�编译�清:
+
+- 函数需è¦�多少寄å˜å™¨ï¼›
+- è·³è½¬æ ‡ç¾ä½�置;
+- 局部��和�法绑定;
+- control-flow 结构边界;
+- 函数å�模å�—结构。
+
+第二é��编译æ£å¼�工作:
+
+- 将表达å¼�编译为寄å˜å™¨æ“�作;
+- 将控制�编译为跳转;
+- 将对象/数组å—é�¢é‡�ç¼–è¯‘ä¸ºæž„é€ æŒ‡ä»¤ï¼›
+- 将函数体编译为å�模å�—ï¼›
+- 将常é‡�写入常é‡�æ± ã€‚
+
+#### 2.3.2 å—节ç �æ ¼å¼�
+
+OxideJS 使用固定 32-bit 指令:
+
+```text
+32-bit Instr
+
++----------+----------+----------+----------+
+| opcode | rd | a | b |
++----------+----------+----------+----------+
+ 8 bits 8 bits 8 bits 8 bits
+```
+
+å…¶ä¸ï¼š
+
+- `opcode` 表示�作类型;
+- `rd` é€šå¸¸è¡¨ç¤ºç›®æ ‡å¯„å˜å™¨ï¼›
+- `a` / `b` 表示æº�寄å˜å™¨ã€�ç«‹å�³æ•°ä½Žé«˜ä½�或其他æ“�作数。
+
+主è¦�æ“�作ç �类别:
+
+| 类别 | 示例 |
+|------|------|
+| 算术 | ADD�SUB�MUL�DIV�MOD |
+| ��算 | BIT_AND�BIT_OR�BIT_XOR�SHL�SHR |
+| 比较 | EQ�STRICT_EQ�LT�GTE |
+| 控制� | JMP�JMP_IF_FALSE�SWITCH_TABLE |
+| 异常 | THROW�TRY_BEGIN�TRY_END |
+| �� | LOAD_VAR�STORE_VAR�LOAD_CONST |
+| 函数 | CALL�RETURN�CALL_NATIVE |
+| 对象 | NEW_OBJECT�GET_PROP�SET_PROP |
+| 数组 | NEW_ARRAY�SET_ELEM |
+| æˆ�员更新 | MEMBER_INCã€�COMPOUND_MEMBER_ADD ç‰ |
+| 结� | HALT |
+
+### 2.4 VM 层
+
+VM 是å—节ç �æ‰§è¡Œæ ¸å¿ƒã€‚æ¯�个 VM 是一个独立执行上下文。
+
+```text
++------------------------------------------------------------------------------------+
+| Vm |
++------------------------------------------------------------------------------------+
+| registers[256] 固定寄å˜å™¨æ–‡ä»¶ |
+| pc 当�程�计数器 |
+| bytecode 当å‰�执行å—节ç � |
+| constants 当å‰�常é‡�æ± |
+| frames å‡½æ•°è°ƒç”¨æ ˆ |
+| try_stack 异常处ç�†æ ˆ |
+| exception_value 当�异常值 |
+| pending_error_kind 当�错误类型 |
+| for_in_iters for-in è¿ä»£çжæ€� |
+| session_arena çŸç”Ÿå‘½å‘¨æœŸå¯¹è±¡åˆ†é…�区 |
+| session_gc 当� VM 的 session GC 元数� |
+| kernel: Arc 指�共享 Kernel |
++------------------------------------------------------------------------------------+
+```
+
+VM 的执行循环大致如下:
+
+```text
+loop:
+ instr = bytecode[pc]
+ pc += 1
+
+ match opcode(instr):
+ LOAD_CONST => regs[rd] = constants[idx]
+ ADD => regs[rd] = add(regs[a], regs[b])
+ GET_PROP => object property lookup
+ SET_PROP => object property write
+ CALL => push frame and enter function
+ CALL_NATIVE => call Rust builtin function
+ RETURN => restore caller frame
+ THROW => unwind try stack
+ HALT => return regs[0]
+```
+
+### 2.5 Kernel 层
+
+Kernel 是å�•进程内的共享è¿�è¡Œæ—¶æ ¸å¿ƒã€‚å®ƒä¸�ä¿�å˜æŸ�一次执行请求的寄å˜å™¨å’Œè°ƒç”¨æ ˆï¼Œè€Œæ˜¯ä¿�å˜å�¯è·¨è¯·æ±‚å¤�用的结构。Kernel å†…éƒ¨è¿›ä¸€æ¥æ‹†åˆ†ä¸ºä¸¤å±‚ (commit `d242d08`):
+
+- **KernelCore**: 进程级永久共享, 表结构 append-only, 永��建;
+- **KernelSession**: 测试 / 会�级, �通过 `full_reset()` �� `BuiltinSnapshot` �检测实现选择性�建。
+
+```text
++------------------------------------------------------------------------------------+
+| OxideKernel |
++------------------------------------------------------------------------------------+
+| ── KernelCore (Arc, 跨请求永久共享) ────────────────────────────────── |
+| KernelConfig |
+| PermInterner Append-only key / identifier 驻留 (leaked &'static str, 64-bit hash)|
+| ShapeForge 全局 Shape / Hidden Class 表 |
+| CodeForge ç¼–è¯‘ç»“æžœç¼“å˜ (Mutex, max_cached_modules 上é™�) |
+| PropForge 属性访问 IC 模æ�¿ / shape→slot ç¼“å˜ |
+| |
+| ── KernelSession (per-session, � full_reset() �建) ────────────────────────────── |
+| BuiltinWorld Object / Array / Function / String / Number ç‰å†…置对象结构 |
+| Global object 全局对象�其基础属性 |
+| BuiltinSnapshot �检测快照, 支撑选择性�建 |
++------------------------------------------------------------------------------------+
+```
+
+#### 2.5.1 � Kernel 多 VM 的执行优势
+
+| 问题 | 普通� VM 独立 runtime | OxideJS � Kernel 多 VM |
+|------|------------------------|--------------------------|
+| 内置对象åˆ�始化 | æ¯�个 VM é‡�å¤�æž„é€ | KernelSession ä¸é›†ä¸æž„é€ ä¸Žå¤�用 |
+| Key / identifier 驻留 | æ¯�个 VM å�„自ä¿�å˜ | PermInterner 全局 append-only, æ— é”�读 |
+| 对象 Shape | �个 VM ��生� | ShapeForge 跨 VM 共享 |
+| 编译结果 | æ¯�次请求é‡�新编译 | CodeForge 按 structural hash 缓å˜å¤�用 |
+| 属性访问模� | �个 VM 冷�动 | PropForge 跨 VM 共享 IC 模� |
+| 请求隔离 | 需è¦�å°�心拆分 | VM 自带寄å˜å™¨ã€�æ ˆã€�Epoch Arenaã€�JsString GC, 天然隔离 |
+| 测试间é‡�ç½® | 整个 runtime 销æ¯�é‡�建 | `KernelSession::full_reset()` é‡�建 builtin + global, ä¿�ç•™ç¼“å˜ |
+
+#### 2.5.2 多 VM 执行示例
+
+```text
+Request A: "items.map(x => x.id)"
+Request B: "users.map(u => u.name)"
+Request C: "orders.map(o => o.price)"
+
+ +-------------------+
+ | OxideKernel |
+ | (Core + Session) |
+ |-------------------|
+ | CodeForge | 结构相似代ç �命ä¸ç¼–译缓å˜
+ | ShapeForge | 相似对象布局共享 Shape
+ | PermInterner | id / name / price ç‰ key 驻留
+ +---------+---------+
+ |
+ +---------------+---------------+
+ | | |
+ v v v
+ VM #1 VM #2 VM #3
+ Request A Request B Request C
+
+ å�„ VM ç§�有: 寄å˜å™¨ / Epoch Arena / JsString GC / 异常状æ€�
+```
+
+### 2.6 对象模型与属性访问
+
+对象通过 Shape �述属性布局。
+
+```text
+EMPTY_SHAPE
+ |
+ | add "x"
+ v
+Shape #2: property="x", offset=0
+ |
+ | add "y"
+ v
+Shape #3: property="y", offset=1
+```
+
+对象自身ä¿�å˜ï¼š
+
+- 当� Shape ID;
+- 原型指针;
+- 属性å˜å‚¨åŒºï¼›
+- 函数 / æ•°ç»„ç‰æ ‡å¿—ä½�ï¼›
+- native 函数指针或å�模å�—索引。
+
+属性访问�程:
+
+```text
+GET_PROP obj, key
+ |
+ | 1. 读�对象 shape_id
+ | 2. 查询属性 key 对应 offset
+ | 3. å‘½ä¸ Shape / PropForge 缓å˜åˆ™ç›´æŽ¥å�– slot
+ | 4. 未命ä¸åˆ™æ²¿åŽŸåž‹é“¾æŸ¥æ‰¾
+ v
+返回属性值或 undefined
+```
+
+### 2.7 内置对象
+
+内置对象由 Rust 原生实现,并通过 Kernel / BuiltinWorld 进行注册。
+
+```text
+crates/oxide_vm/src/builtins/
+├── array.rs
+├── array_buffer.rs
+├── boolean.rs
+├── data_view.rs
+├── date.rs
+├── error.rs
+├── function.rs
+├── global/
+├── iterator.rs
+├── json.rs
+├── map.rs
+├── math.rs
+├── number.rs
+├── object.rs
+├── reflect.rs
+├── regexp.rs
+├── set.rs
+├── string.rs
+├── symbol.rs
+└── typed_array.rs
+```
+
+绑定层�于:
+
+```text
+crates/oxide_vm/src/bindings/
+```
+
+å…¶è�Œè´£æ˜¯å°† Rust native å‡½æ•°æŒ‚è½½åˆ°å¯¹åº”æž„é€ å™¨ã€�原型对象或全局对象上。
+
+### 2.8 test262 Runner
+
+`oxide_test262` 用于自动�行 ECMAScript Test Suite。
+
+```text
++------------------------------------------------------------------------------------+
+| oxide_test262 |
++------------------------------------------------------------------------------------+
+| discover tests |
+| parse YAML metadata |
+| load harness includes |
+| apply skip / feature policy |
+| run parser -> compiler -> VM |
+| catch panic / runtime error |
+| classify pass / fail / skip |
+| summarize totals and failure categories |
++------------------------------------------------------------------------------------+
+```
+
+runner 的输出�以用于:
+
+- 统计当�兼容性;
+- 找出失败最多的è¯ä¹‰ç±»åˆ«ï¼›
+- 指导下一阶段实现;
+- 对比 QuickJSã€�Boaã€�JerryScript ç‰ baseline。
+
+---
+
+## 三ã€�代ç �说明
+
+### 3.1 顶层目录
+
+```text
+project-root/
+├── Cargo.toml
+├── Cargo.lock
+├── crates/
+├── tests/
+├── docs/
+├── README.md
+└── 设计方案文档.md
+```
+
+### 3.2 Crate 说明
+
+| Crate | 作用 |
+|-------|------|
+| `oxide_parser` | JavaScript parser 接入层,输出 AST Program |
+| `oxide_compiler` | AST 到å—节ç �的编译器 |
+| `oxide_types` | JS runtime 基础类型,如 JsValue�JsObject�Shape�Error�Arena |
+| `oxide_kernel` | å�• Kernel 多 VM æž¶æž„ä¸çš„共享è¿�è¡Œæ—¶æ ¸å¿ƒ |
+| `oxide_vm` | å—节ç �解释器ã€�内置对象ã€�VM poolã€�session arena / GC |
+| `oxide_api` | 对外 API 预留层 |
+| `oxide_cli` | 命令行工具,支� eval / run / compile / REPL |
+| `oxide_test262` | test262 自动化测试�行器 |
+
+### 3.3 `oxide_types`
+
+关键文件:
+
+```text
+crates/oxide_types/src/
+├── value.rs # JsValue, NaN-boxing 值表示
+├── object.rs # JsObject, 对象头ã€�属性å˜å‚¨ã€�函数/æ•°ç»„æ ‡è®°
+├── shape.rs # Shape, ShapeId, 属性布局信�
+├── mem.rs # P, arena / persistent object 相关基础结构
+├── error.rs # 内部错误类型
+└── private_key.rs # class private field / private name 支�结构
+```
+
+该 crate 处于�赖图底层,尽���赖上层模�。
+
+### 3.4 `oxide_kernel`
+
+关键文件:
+
+```text
+crates/oxide_kernel/src/
+├── kernel.rs # KernelCore + KernelSession + KernelConfig + global object
+├── string_forge.rs # PermInterner — append-only key / identifier 驻留
+├── shape_forge.rs # ShapeForge — Shape / Hidden Class 创建与查询
+├── code_forge.rs # CodeForge — CompiledModule LRU 缓å˜
+├── prop_forge.rs # PropForge — 属性访问 IC 模æ�¿ç¼“å˜
+├── builtin.rs # BuiltinWorld + BuiltinSnapshot 选择性�建
+└── kernel_log.rs # Kernel 层结构化日志包装
+```
+
+`oxide_kernel` 是å�• Kernel 多 VM çš„ä¸å¿ƒã€‚它通过 `KernelCore` ä¿�å˜æ°¸ä¹…共享状æ€�, 通过 `KernelSession` ä¿�å˜å�¯é‡�建的会è¯�级状æ€�, 而 VM ä¿�å˜çŸæœŸæ‰§è¡Œçжæ€�。
+
+### 3.5 `oxide_compiler`
+
+关键文件:
+
+```text
+crates/oxide_compiler/src/
+├── compiler.rs # 编译入�与上下文
+├── counter.rs # 第一é�� AST é��历,计算寄å˜å™¨å’Œæ ‡ç¾
+├── emitter.rs # 第二é�� AST é��历,生æˆ�å—节ç �
+├── opcode.rs # OpCode 和指令编ç �
+├── module.rs # CompiledModule / Constant
+├── hash.rs # structural hash
+└── symbol_table.rs # �法作用域和��绑定
+```
+
+编译器输出 `CompiledModule`,交由 VM 执行或写入 CodeForge 缓å˜ã€‚
+
+### 3.6 `oxide_vm`
+
+关键文件与目录:
+
+```text
+crates/oxide_vm/src/
+├── vm.rs # VM 主结构与执行入�
+├── vm_runtime.rs # �行时入�和状���
+├── vm_support.rs # VM 辅助逻辑
+├── vm_props.rs # 属性访问辅助逻辑
+├── vm_pool.rs # VM pool,多 VM �用
+├── session_arena.rs # 会�级 arena
+├── session_gc.rs # 会è¯�级 GC / æ ‡è®°æ¸…æ‰«è¾…åŠ©
+├── coercion.rs # ToNumber / ToString / ToBoolean ç‰ç±»åž‹è½¬æ�¢
+├── native.rs # Native function 调用接�
+├── dispatch/ # opcode 分�实现
+├── builtins/ # 内置对象实现
+└── bindings/ # 内置对象绑定到 BuiltinWorld / global object
+```
+
+VM 层是代ç �é‡�最大的模å�—,包å�«ï¼š
+
+- å—节ç � dispatchï¼›
+- 函数调用;
+- 异常处�;
+- 原型链属性访问;
+- 内置对象 native call;
+- session arena 与 GC;
+- VM pool。
+
+### 3.7 `oxide_cli`
+
+关键功能:
+
+```text
+cargo run --release -p oxide_cli -- eval "1 + 2"
+cargo run --release -p oxide_cli -- run file.js
+cargo run --release -p oxide_cli -- run file.js --repeat 1000 # �进程内�用 Kernel �跑 N 次
+cargo run --release -p oxide_cli -- compile -e "1 + 2"
+cargo run --release -p oxide_cli
+```
+
+CLI 主�用于:
+
+- 手工�行 JS 片段;
+- 打å�°ç¼–译å�Žçš„å—节ç �ï¼›
+- 执行文件;
+- `run --repeat N`: å�•进程内å¤�用 Kernel è¿žç» eval N 次 (commit `05d0c25`), 用于多会è¯�基准测试;
+- 进行 smoke test。
+
+### 3.8 `oxide_test262`
+
+关键文件:
+
+```text
+crates/oxide_test262/src/main.rs
+```
+
+�责:
+
+- �历 test262 测试目录;
+- 解� metadata;
+- 注入 harness;
+- æ ¹æ�® feature / flag 进行跳过或执行;
+- �获 panic;
+- 输出 pass / fail / skip;
+- 统计失败类别。
+
+### 3.9 代ç �工作æµ�总结
+
+```text
+Developer / CLI / test262
+ |
+ v
+ oxide_parser
+ |
+ v
+ oxide_compiler -----> KernelCore.CodeForge
+ | |
+ v |
+ CompiledModule <---------------+
+ |
+ v
+ VmPool selects Vm
+ |
+ v
+ Vm executes bytecode -----> KernelCore: PermInterner / ShapeForge / PropForge
+ ----> KernelSession: BuiltinWorld / global object
+ |
+ v
+ JsValue / Error / TestResult
+```
+
+### 3.10 创新点到代ç �快速导航
+
+| 创新点 | 代ç �ä½�ç½® | 说明 |
+|--------|----------|------|
+| � Kernel 多 VM | `oxide_kernel::kernel`, `oxide_vm::vm_pool`, `oxide_vm::vm` | Kernel 共享,VM 隔离 |
+| Key / identifier 驻留 | `string_forge.rs` (`PermInterner`) | è·¨ VM append-only 驻留, æ— é”�读 |
+| 共享 Shape | `shape_forge.rs`, `shape.rs` | 跨 VM 对象布局�用 |
+| ç¼–è¯‘ç¼“å˜ | `code_forge.rs`, `hash.rs` | structural hash -> CompiledModule |
+| å±žæ€§è®¿é—®ç¼“å˜ | `prop_forge.rs`, `vm_props.rs`, `dispatch/property.rs` | Shape / offset 快速路径 |
+| 会è¯�内å˜ä¸Ž GC | `session_arena.rs`, `session_gc.rs`, `vm.rs` | VM 本地çŸå‘½å¯¹è±¡ç®¡ç�† |
+| NaN-boxing | `value.rs` | 64-bit 统一值表示 |
+| 寄å˜å™¨å¼� VM | `opcode.rs`, `vm.rs`, `dispatch/` | 固定寄å˜å™¨æ‰§è¡Œæ¨¡åž‹ |
+
+---
+
+## 主�使用的开�项目与�赖说明
+
+- oxc — JavaScript æº�ç �è§£æž�(parser/ast/allocator/span/diagnostics/syntaxï¼‰ï¼Œå…¨é¡¹ç›®æœ€æ ¸å¿ƒçš„å¤–éƒ¨ä¾�èµ–
+- bumpalo — Bump allocator,构æˆ� `Epoch` arena 内å˜ç³»ç»Ÿçš„底层分é…�器
+- dashmap — å¹¶å�‘ HashMap,用于 `CodeForge`ã€�`ShapeForge`ã€�`PropForge` è·¨ VM 缓å˜å…±äº«
+
+---
+
+## 四�Benchmark 与评分体系
+
+### 4.1 测试套件设计
+
+在真实场景下,JS 引擎 “好ä¸�好用â€�,并ä¸�是å�ªçœ‹ä»£ç �执行的准确率,其è¿�行速度和资æº�å� 用情况也é�žå¸¸é‡�è¦�。为æ¤ï¼Œæˆ‘们采用了一套多维度的 benchmark 打分体系,针对 AI Agent 场景的特性进行验è¯�:
+
+| 维度 | 测试套件 | 测试项 | �� | 说明 |
+|------|---------|--------|------|------|
+| **æ£ç¡®æ€§** | test262 (ES æ ‡å‡†ä¸€è‡´æ€§) | 53,598 个官方测试 | 50% | ECMAScript 官方å�ˆè§„性测试 |
+| **性能** | JetStream 2.0 微基准 | 64 个代表性微基准 | 25% | å‡ ä½•å¹³å�‡ç›¸å¯¹ QuickJS baseline |
+| **å�¯åЍ** | 冷/çƒå�¯åŠ¨æµ‹é‡� | `oxide eval "1;"` 20 次 | 15% | Agent 调用å“�应速度 |
+| **内å˜** | 压力测试峰值 RSS | `tests/stress/*.js` | 10% | é•¿è¿�行场景内å˜å� 用 |
+
+### 4.2 综�评分公�
+
+$$
+S_{\text{total}} = 0.50 \cdot S_{\text{correctness}} + 0.25 \cdot S_{\text{perf}} + 0.15 \cdot S_{\text{startup}} + 0.10 \cdot S_{\text{memory}}
+$$
+
+#### 4.2.1 æ£ç¡®æ€§å¾—分 (Correctness)
+
+$$
+S_{\text{correctness}} = \frac{P_{\text{pass}}}{P_{\text{pass}} + P_{\text{fail}}} \times 100
+$$
+
+- $P_{\text{pass}}$: test262 通过测试数 (of ran, �计 skip)
+- $P_{\text{fail}}$: test262 失败测试数
+- **ç›®æ ‡**: $\geq 60$ (ES2020 æ ¸å¿ƒç‰¹æ€§è¦†ç›–)
+- **当å‰�** (2026-06-30): **pass 率 69.6%**, 已超出 v1.0 é‡Œç¨‹ç¢‘ç›®æ ‡
+
+#### 4.2.2 性能得分 (Performance)
+
+基于 JetStream 2.0 å‡ ä½•å¹³å�‡ï¼Œä»¥ QuickJS 为基准 (80 分 = æŒ�å¹³):
+
+$$
+T_{\text{geo}} = \left( \prod_{i=1}^{n} t_i \right)^{1/n}, \quad
+R = \frac{T_{\text{geo}}^{\text{QJS}}}{T_{\text{geo}}^{\text{Oxide}}}, \quad
+S_{\text{perf}} = 80 + 20 \cdot \log_2(R)
+$$
+
+- $R > 1$: OxideJS æ›´å¿«
+- $R = 1$: �平 (80 分)
+- $R = 0.5$: 慢 2 � (60 分)
+
+#### 4.2.3 �动速度得分 (Startup)
+
+$$
+S_{\text{startup}} = 100 - \min\left(50, \frac{t_{\text{cold}} - 50}{10}\right) - \min\left(30, \frac{t_{\text{warm}} - 20}{5}\right)
+$$
+
+- $t_{\text{cold}}$: 首次执行时间 (ms)ï¼Œç›®æ ‡ < 100ms
+- $t_{\text{warm}}$: å�Žç» 19 次平å�‡ (ms)ï¼Œç›®æ ‡ < 50ms
+- 冷å�¯åЍæ¯�è¶… 10ms 扣 1 分,çƒå�¯åЍæ¯�è¶… 5ms 扣 1 分
+
+#### 4.2.4 内å˜å� 用得分 (Memory)
+
+$$
+S_{\text{memory}} = \max\left(0, 100 - \frac{M_{\text{peak}} - 50}{5}\right)
+$$
+
+- $M_{\text{peak}}$: 压力测试峰值 RSS (MB)
+- ç›®æ ‡: < 150MB 得满分
+
+#### 4.2.5 四引擎综�得分对比
+
+以 QuickJS = 80 为基准, å�„å¼•æ“ŽæŒ‰ä¸Šè¿°å››ç»´åº¦åŠ æ�ƒå¾—到的综å�ˆåˆ†æ•°:
+
+| 引擎 | 综�得分 |
+|------|----------|
+| QuickJS | 80 |
+| BOA | 69 |
+| **OxideJS (本项目)** | **61** |
+| V8 (Node.js) | 53 |
+
+OxideJS 当� 61 分, 介于 BOA 与 V8 之间, 主�由 test262 通过率 (69.6%, �有 30% 失败) 拖累, 这是我们之�优化的工作�点。
+
+### 4.3 Agent åœºæ™¯ä¸“ç”¨åŠ æ�ƒ
+
+针对多轮对è¯� / è·¨ session 缓å˜ï¼š
+
+$$
+S_{\text{agent}} = 0.4 \cdot S_{\text{correctness}} + 0.2 \cdot S_{\text{perf}} + 0.2 \cdot S_{\text{session-reuse}} + 0.2 \cdot S_{\text{memory}}
+$$
+
+å…¶ä¸ session å¤�用收益:
+
+$$
+S_{\text{session-reuse}} = 100 \cdot \left(1 - \frac{t_{\text{session-N}}}{t_{\text{session-1}}}\right)
+$$
+
+è¡¡é‡� OxideKernel è·¨ VM 共享 (DashMap + Arc) çš„ç¼“å˜æ”¶ç›Šã€‚
+
+### 4.4 Baseline 对比
+
+#### 4.4.1 综�对比表
+
+| 引擎 | test262 pass% | �� JS 平�耗时 (ms) | 多会��次平� (ms) | �进程基线 RSS (MB) |
+|------|--------------|----------------------|---------------------|---------------------|
+| **QuickJS** | ~99% | 0.95 / 3.18 | 1.03 | 1.60 |
+| **Boa v0.21** | ~85% | 11.32 / 16.29 | 16.3 | 1.55 |
+| **V8 (Node.js)** | ~100% | 103.74 / 34.95 | 103.5 | 1.60 |
+| **OxideJS (当�)** | **69.6%** | **1.73 / 4.62** | **0.96** | **4.6** |
+
+> å�•æ�¡ JS å¹³å�‡è€—æ—¶æ ¼å¼�: *Intel 8259CL / é²²é¹� 920* (ms), å�–自 `benchmark/run_benchmark.py` çš„ 10 ç±»è¯å�¥æµ‹è¯•å�‡å€¼ã€‚
+
+#### 4.4.2 多会�耗时 (4 引擎 0–20K 会�)
+
+
+
+在 0–20,000 会è¯�的连ç»è´Ÿè½½ä¸‹:
+
+- **OxideJS** �进程共享 Kernel, 累积�值 **0.96 ms / 会�**, 40 个批次点全部�在 ≤ 1.2 ms 区间。
+- **QuickJS** �会�独立进程, ≈ 1.03 ms / 会�, 约为 OxideJS 的 1.07×。
+- **BOA** ≈ 16.3 ms / 会� (≈ 17× OxideJS), 实测至 5K 会��按稳�斜率外推。
+- **V8 (Node.js)** ≈ 103.5 ms / 会è¯� (≈ 108× OxideJS), 7,500 会è¯�å�Žä¸æ¢ (å�•次å�¯å�œæˆ�本过大), 之å�ŽæŒ‰ç¨³æ€�斜率外推。
+
+OxideJS 通过 Kernel + VM Pool å�•进程长驻消除了æ¯�会è¯� `fork/exec` 的开销, 是 4 引擎ä¸å”¯ä¸€åœ¨ Agent çŸä¼šè¯�场景下ä¿�æŒ�低延迟å�¯æŒ�ç»çš„æ–¹æ¡ˆã€‚
+æ¤å¤–ï¼Œç”±å›¾ä¸æ•°æ�®å�¯ä»¥çœ‹å‡ºï¼Œæˆ‘们 OxideJS 在é�¢å¯¹è¿™ç±»å¤šä¼šè¯�的情况时,ä¾�ç„¶å�¯ä»¥ä¿�æŒ�快速å“�应执行,其耗时明显少于其他引擎
+
+#### 4.4.3 多会è¯�内å˜å� 用 (峰值 RSS)
+
+
+
+- **OxideJS** å�•进程长驻, 典型会è¯� **基线 4.6 MB**; JSON Parse 工作负载å�¶å�‘出现峰值, 但æ¯�次峰值å�Žä¸‹ä¸€æ‰¹æ¬¡ç«‹å�³è¢« **Epoch Arena O(1) 回收** 至 4.6 MB, ä¸�退化为系统调用。然而内å˜å� 用总é‡�ä¾�ç„¶å��大,内å˜åˆ†é…�与回收机制ä»�需改进。
+- **QuickJS / V8 / BOA** �会�独立进程, RSS 由进程边界天然回收, 长期�� ≈ 1.5–1.6 MB。
+
+考虑到目å‰�çš„ PCã€�æœ�务器甚至嵌入å¼�设备的内å˜å¹¶ä¸�çŸç¼ºï¼Œåœ¨å®žé™…体验ä¸å��而更注é‡�è€—æ—¶ï¼Œå› æ¤æˆ‘们的工作é‡�心主è¦�在解决耗时上,其è¿�行时涉å�Šåˆ°è®¸å¤šå¯¹è±¡å†…容的å¤�用,所以我们的方案在内å˜å� 用上比其他方案略高
+
+#### 4.4.4 �� JS 执行耗时 (�平�对比)
+
+10 类基础è¯å�¥æ“�作 (算术 / å�˜é‡� / 对象 / 数组 / 函数调用 / 属性访问 / æ�¡ä»¶åˆ†æ”¯ / for / while / å—符串拼接) 在两个平å�°ä¸Šçš„对比:
+
+| 平� | 图表 |
+|------|------|
+| 鲲� 920 (ARM64) |  |
+| Intel Xeon 8259CL (x86_64) |  |
+
+关键观察:
+
+- **OxideJS** 在两个平å�°å�‡ç¨³å®š: é²²é¹� ≈ 4.6 ms, Intel ≈ 1.73 ms (Intel 上 2.7× 快于鲲é¹�,å�ŽæœŸæˆ‘ä»¬ä¼šæ›´åŠ å…³æ³¨å›½äº§å¹³å�°çš„优化)。
+- **QuickJS** 在 Intel 上 ≈ 0.97 ms (略快于 OxideJS), 但在 ARM64 上��作类型波动 (1.5–3.5 ms)。
+- **BOA** 两平�� ≈ 11–17 ms, 慢于 OxideJS 约 5–10×。
+- **V8** 两平�� ≈ 35 ms (鲲�) / 104 ms (Intel)。
+
+#### 4.4.5 压力测试 (�平�对比)
+
+8 项压力测试 (array / call / code_forge / coercion / gc / ic_cache / property / string):
+
+| 平� | 图表 |
+|------|------|
+| 鲲� 920 (ARM64) |  |
+| Intel Xeon 8259CL (x86_64) |  |
+
+关键观察:
+
+- **code_forge / ic_cache / property**: OxideJS å‡å€Ÿ Kernel 共享 bytecode cache + IC 缓å˜, 显著快于 QuickJS / BOA (é²²é¹�: code_forge OxideJS 2.4 ms vs QuickJS 37.1 ms vs BOA 127.6 ms)。
+- **gc / array / string**: OxideJS 在é‡� GC 场景下慢于 QuickJS (Tracing GC 暂未对çŸå‘½å¯¹è±¡å�š generational 优化), 这是 v1.1 的优化方å�‘。
+- **call**: OxideJS ≈ 2.5–3.4 ms, 介于 QuickJS (≈ 1.2–2.0 ms) 与 BOA (≈ 12–20 ms) 之间。
+
+### 4.6 测试命令
+
+我们�供现�的测试脚本
+
+```bash
+# 测试�构建环境
+bash benchmark/build.sh
+
+# benchmark
+python3 benchmark/run_benchmark.py
+```
+
+---
+
+## 五ã€�ç ”å�‘过程é�‡åˆ°çš„问题和解决方法
+
+### Compiler counter / emitter 指令计数漂移
+
+#### 现象
+
+OxideJS 编译器采用 **两é��编译 (counter pass + emitter pass)**: 第一é�� `counter` ä»…é��历 AST 计算æ¯�个跳转 / 循环 / try-catch 边界的 *预计 PC*, ä¸�实际写入å—节ç �; 第二é�� `emitter` æ‰�生æˆ�定宽指令。这ç§�结构本æ�¥ç”¨äºŽä¸€æ¬¡æ€§é¢„分é…�跳转表ã€�å‡�少回填, 但è¦�求 **两é��对å�Œä¸€æ®µ AST å¿…é¡»å�‘å‡ºä¸¥æ ¼ç›¸å�Œæ•°é‡�的指令**。
+
+在功能开å�‘和特性实现阶段, 我们æŒ�ç»è§‚察到 test262 上以下高频失败模å¼�:
+
+- `language/expressions/class` 桶大é‡�è¶…æ—¶, å�进程被 `--supervise` watchdog kill。
+- 解构å�‚æ•° / `??` / å¤�å�ˆèµ‹å€¼ / ç§�有方法 / 计算键 (`class { [computed]() {} }`) ç‰å�« *æ�¡ä»¶è·³è½¬* çš„è¯æ³•点å��å¤�出现æ»å¾ªçŽ¯ã€‚
+- å�•æ¥æ‰§è¡Œ `oxide_cli compile -e "..."` 与 `oxide_cli run` 出现 PC è�½åœ¨æŒ‡ä»¤å—段ä¸é—´å—节的诡异错误。
+
+#### æ ¹å›
+
+通过对 commit `6d52c46`, `242e94a`, `6a77742` 三处 fix çš„ diff 比较, 我们识别出有 **9 ä¸ªå…·ä½“è¯æ³•点** 上 counter 与 emitter å�‘出的指令æ�¡æ•°ä¸�一致。例如:
+
+- æ´¾ç”Ÿç±»æž„é€ å™¨ (`class B extends A { constructor() { ... } }`) å—æ®µæ³¨å…¥ä½�ç½®, counter æ¼�数了 1 æ�¡ `LOAD_CONST`;
+- `?? =` å¤�å�ˆèµ‹å€¼, counter 把çŸè·¯åˆ†æ”¯ç®—æˆ� 2 æ�¡, 但 emitter 实际生æˆ� 3 æ�¡;
+- `for (var x of arr)` çš„ var-init æ— åˆ�始值时, counter 跳过, emitter ä»�å�‘了 1 æ�¡ `LOAD_UNDEFINED`。
+
+æ¯�个漂移点导致 `projected_pc` 与真实 PC å��å·® 1–N æ�¡æŒ‡ä»¤ã€‚该å��å·®è¢«å†™å…¥è·³è½¬ç›®æ ‡å�Ž, 跳转指令è�½åˆ°ä¸‹ä¸€æ�¡æŒ‡ä»¤çš„ä¸é—´å—节, è§£ç �出错误 opcode → é€šå¸¸è¯¯å‘½ä¸ `JMP_IF_FALSE` 跳回, å½¢æˆ�æ»å¾ªçŽ¯ã€‚
+
+#### 解决�路
+
+1. **在 `Vm.dispatch_loop` å¢žåŠ debug-only `projected_pc` æ–言**: æ¯�æ�¡ emit 指令时å�Œæ¥æ£€æŸ¥ counter 预测的 PC 与实际写入的 PC 是å�¦ä¸€è‡´, ä¸�一致直接 panic 并打å�° AST 节点路径。
+2. **在 `crates/oxide_compiler/tests/compiler_alignment_*_tests.rs` æ·»åŠ 90+ æ�¡å¯¹é½�回归测试**: æ¯�ä¸ªè¯æ³•点用 `compile_and_diff_counts(src)` 直接对比两é��输出的指令数é‡�, é˜²æ¢æœªæ�¥è¯æ³•扩展时å†�次漂移。
+3. **é€�点对é½� 9 个漂移ä½�ç½®** (C1–C5, D1, S2, E1–E2): ä¿®å¤�方法主è¦�分两类 — counter åŠ 1 æ�¡è®¡æ•°, 或 emitter åˆ 1 æ�¡å†—余指令, å�–决于哪ç§�更接近 ES 规范的è¯ä¹‰ã€‚
+
+ä¿®å¤�å�Žï¼Œoxidejs å¢žåŠ äº† 4000–6000 个测试通过, 是整个项目最关键的修å¤�之一。
+
+---
+
+## å…ã€�AI 使用情况说明
+
+我们主è¦�在部分é�žæ ¸å¿ƒä»£ç �(如 benchmark 脚本)编写和功能测试使用 AI 以é™�低工作é‡�,ç»�ç”±äººå·¥å®¡æ ¸å’Œreviewå�Žæ��交, æ ¸å¿ƒåŠŸèƒ½ä»£ç �å�‡ä¸ºäººå·¥ä»£ç �。æ¤å¤–, AI 在é�žä»£ç �æ–¹é�¢çš„使用,主è¦�用于 commit message 编写与文档è¯è¨€æ¶¦è‰²ã€‚
+
+---
+
+## 七�未�计划
+
+1. **æ��å�‡å›½äº§å¹³å�°çš„优化**: 针对鲲é¹� / 飞腾 / 龙芯 ç‰å›½äº§å¹³å�°è¿›è¡Œä¸“门优化,让 OxideJS 更适å�ˆå›½äº§å¹³å�°ã€‚
+2. **打磨内å˜åˆ†é…�算法**: 让内å˜å� 用更稳定ã€�æ›´å°‘, 把 JSON Parse ç‰å·¥ä½œè´Ÿè½½çš„峰值 RSS 进一æ¥åŽ‹ç¼©ã€‚
+3. **ç»§ç»æ��å�‡ test262 pass 率**: ç›®æ ‡ 85% 以上, é‡�点补é½� ES2023+ ä¸�å�¯å�˜æ•°ç»„方法ã€�Proxy / Reflect è¯ä¹‰ã€�枚举顺åº�边角。
+4. **针对 AI Agent 环境进行优化**: 让 OxideJS 在 Vibe Coding 工作�下比其他引擎更方便好用。
+
+---
+
+## License
+
+本项目采用 MIT License å¼€æº�å��议。å��议全文è§�é¡¹ç›®æ ¹ç›®å½•çš„ [LICENSE](LICENSE) 文件。
diff --git a/设计方案文档.pdf b/设计方案文档.pdf
new file mode 100644
index 0000000..5bccb44
--- /dev/null
+++ b/设计方案文档.pdf
@@ -0,0 +1,24838 @@
+%PDF-1.4
+%Óëéá
+1 0 obj
+<
+/Creator (Mozilla/5.0 \(Windows NT 10.0; Win64; x64\) AppleWebKit/537.36 \(KHTML, like Gecko\) HeadlessChrome/149.0.0.0 Safari/537.36)
+/Producer (Skia/PDF m149)
+/CreationDate (D:20260630040149+00'00')
+/ModDate (D:20260630040149+00'00')>>
+endobj
+3 0 obj
+<>
+endobj
+5 0 obj
+<>
+/Extend [true true]
+/Coords [72 177.358 106.376999 193.049]
+/ShadingType 2
+/ColorSpace /DeviceRGB>>>>
+endobj
+6 0 obj
+<>
+endobj
+7 0 obj
+<>
+/Extend [true true]
+/Coords [106.945 149.335999 141.320999 165.026993]
+/ShadingType 2
+/ColorSpace /DeviceRGB>>>>
+endobj
+8 0 obj
+<>
+/Extend [true true]
+/Coords [141.889999 121.314003 176.26601 137.005005]
+/ShadingType 2
+/ColorSpace /DeviceRGB>>>>
+endobj
+9 0 obj
+<>
+/Extend [true true]
+/Coords [176.834 93.292198 211.211 108.984001]
+/ShadingType 2
+/ColorSpace /DeviceRGB>>>>
+endobj
+10 0 obj
+<>
+/Extend [true true]
+/Coords [211.77901 65.270401 246.15601 80.9618]
+/ShadingType 2
+/ColorSpace /DeviceRGB>>>>
+endobj
+11 0 obj
+<>
+/Extend [true true]
+/Coords [176.834 141.826996 211.211 157.518997]
+/ShadingType 2
+/ColorSpace /DeviceRGB>>>>
+endobj
+12 0 obj
+<>
+/Extend [true true]
+/Coords [176.834 190.36301 211.211 206.054]
+/ShadingType 2
+/ColorSpace /DeviceRGB>>>>
+endobj
+13 0 obj
+<>
+/Extend [true true]
+/Coords [72 322.96301 106.376999 338.65399]
+/ShadingType 2
+/ColorSpace /DeviceRGB>>>>
+endobj
+14 0 obj
+<>
+/Extend [true true]
+/Coords [176.834 238.89799 211.211 254.589]
+/ShadingType 2
+/ColorSpace /DeviceRGB>>>>
+endobj
+15 0 obj
+<>
+/Extend [true true]
+/Coords [106.945 343.47601 141.320999 359.168]
+/ShadingType 2
+/ColorSpace /DeviceRGB>>>>
+endobj
+16 0 obj
+<>
+/Extend [true true]
+/Coords [141.889999 315.45499 176.26601 331.146]
+/ShadingType 2
+/ColorSpace /DeviceRGB>>>>
+endobj
+17 0 obj
+<>
+/Extend [true true]
+/Coords [290.405 67.021797 330.13501 134.703003]
+/ShadingType 2
+/ColorSpace /DeviceRGB>>>>
+endobj
+18 0 obj
+<>
+/Extend [true true]
+/Coords [325.35001 95.043602 365.07999 162.723999]
+/ShadingType 2
+/ColorSpace /DeviceRGB>>>>
+endobj
+19 0 obj
+<>
+/Extend [true true]
+/Coords [360.29401 123.065002 400.02499 190.746]
+/ShadingType 2
+/ColorSpace /DeviceRGB>>>>
+endobj
+20 0 obj
+<>
+/Extend [true true]
+/Coords [395.23901 151.087006 434.96899 218.76801]
+/ShadingType 2
+/ColorSpace /DeviceRGB>>>>
+endobj
+21 0 obj
+<>
+/Extend [true true]
+/Coords [255.46001 87.535202 295.19 155.216003]
+/ShadingType 2
+/ColorSpace /DeviceRGB>>>>
+endobj
+22 0 obj
+<>
+/Extend [true true]
+/Coords [290.405 164.091995 330.13501 231.77299]
+/ShadingType 2
+/ColorSpace /DeviceRGB>>>>
+endobj
+23 0 obj
+<>
+/Extend [true true]
+/Coords [325.35001 192.114 365.07999 259.79501]
+/ShadingType 2
+/ColorSpace /DeviceRGB>>>>
+endobj
+24 0 obj
+<>
+/Extend [true true]
+/Coords [360.29401 220.136 400.02499 287.81699]
+/ShadingType 2
+/ColorSpace /DeviceRGB>>>>
+endobj
+25 0 obj
+<>
+/Extend [true true]
+/Coords [395.23901 296.69299 434.96899 364.37399]
+/ShadingType 2
+/ColorSpace /DeviceRGB>>>>
+endobj
+26 0 obj
+<>
+/Extend [true true]
+/Coords [255.46001 233.14101 295.19 300.82199]
+/ShadingType 2
+/ColorSpace /DeviceRGB>>>>
+endobj
+27 0 obj
+<>
+/Extend [true true]
+/Coords [290.405 261.16199 330.13501 328.84299]
+/ShadingType 2
+/ColorSpace /DeviceRGB>>>>
+endobj
+28 0 obj
+<>
+/Extend [true true]
+/Coords [325.35001 289.18399 365.07999 356.86499]
+/ShadingType 2
+/ColorSpace /DeviceRGB>>>>
+endobj
+29 0 obj
+<>
+/Extend [true true]
+/Coords [360.29401 317.20599 400.02499 384.88699]
+/ShadingType 2
+/ColorSpace /DeviceRGB>>>>
+endobj
+32 0 obj
+<> stream
+xœí\[�d7n~?¿â<X/%†�¾Í&»Ø�ÈsÐëuT;ðØûÿJ:ºtW—==íÍK0¦Ïwª$Š”(}$KÀbå¿wÜÿ ÓcFfy|Ú~Úü=‡Œ»DL�‰ãþùûí?þeÿqûi Ʊ6³>=>m@‰ã¤;D´¼ÿû÷—àç¶”ý‡Ÿ·ÿJû7ß|øÓÝ¿Ýï¸ûííýÝ–e—h»rÞÉ»þ{A”fy&Ê;ˆ†Tûy†}þa{øÓÝöáÏÿûãw¿|þÇã/½+j]Ý~Ú>|»PÝ?ý}£ªÚM€MsŠ;§¼zÚ¾ÁÛ¾Ý?ýÏ&
+Tƒî¸úÛþ
FÕó/¥¼ ‚DHÙré¼á!˜/>Ö¯ ‰0Ú×4îë‹ Áí+ãÅm}A£å!p¬Cd�BLa¼¸©�GH’1røu±òƒÍjÑ.ÖÍ]ž_HqKç_X–óM=ë=Mº¬opÊ$iŒ=c˜¢ðã]}��)Ò¤•õ:¾!u„ÌÀ¢iþF}AlŒq(>Ö¡“YDÍC�áã1
â4ƨ݊ “¾0Êçצ9ÿÚ4gRP4É»Öi®÷÷çgó�¼2ÍÕâù)Ê+M½¶bnÚ�^6•蕯u®éüdJm^>|ÚþºýuûiKš! ¥¸SH0›¥Ý‚@â¤ý�¼ AÎ)ÄXõ8žÎ¶ôø´}øËþòË÷ŸÜï¾ë>þüá/qÿîîÏþÏÏ�?±˜òãÿð�Ïßw;J³#!‚»«¦ f3ÓýiK
+¢™PvJ9Æý´%‹1aØ)EHÙöÄ;eL©>û㖸̄dŒä_å��‚ø{;Ìl>Ê£7&‰j¶?β1" ñ~Ú2Æ�,Å´HJˆ¼“ ä$+„™KcŒ (ÄTÚ›p�ŒlöÞKdÐ|W;¯©Çí¿6Ÿý .„H¾o,ÏekR7ÄUÙ_¯ìï^�ú©Ný4O}’" Qwb…¨‘ö§�ˆ@HÐÕ"da3)f0Ä"`H�üóq'T°PÄÈåm‡"”2æ†ä)Qi¬!Æ@LûܸŸÔöY#‰HÞÖ$vbÀ„Ű$ Ü$’àjƒ„±´¨rÄ¢±eˆ¥Á± {—§÷iFµ�ÚP èóò¬¿lò_Mñ;›âõ¥‘ëÒÈËÒHœy·1¨ ¸-‚Çäk�ÈOêèÛÍi£àÇ·è¤ Õ,¾O•#¿Ëç‹ÙÿœÑ’K�ÛŒ+B
+¹ÙyÆ åÚÊèQ#8{ð?'ùTs=ö±P€þÑ¢ÐÄ Ë׈¤è3Ðêb$AælÐ�D©I<`$ Âfú›ÛÆrñÑG_¦ DÙ{}¡à/[/WûüØçõEduÙ¼ˆ#0'ßg}ïÁ²›)0òžÍ7îPM”²?¸T©på�’B–à2!æ0#¾1[ñ?
!a?4º° JR6¶ÞEŽÎ·†Ê™uõC :'‹«RåÕéÄâa¿8A̸îòdåpx¶RNRýÚpv <|V�oÜ®&x_\XÜ¿²4y¿�æõñ+d]à4ÍBQ[S¤‰ï«Ó†L¦Ø&0¤fφˆ¸¯)ß:Úf vÇa Q^àŽK[C1îÞH¹ë™Q!'?8D r
Ÿt;!ŒóLª�ñÙìgfUt£�Õ×[çþUã_£ñS]ÚT—…B�(• –ø;-áÊ™!KÝ!AÆb�Å(�
+5
+ÔK´f‘îH