diff --git a/.env.example b/.env.example index d99b9fb..f2edb4b 100644 --- a/.env.example +++ b/.env.example @@ -10,3 +10,5 @@ RUST_LOG=farm_service=info # FARM_ASSET_MANIFEST=./assets/manifest.json # Optional: independent Xiaolai font archive, including the complete OFL license. # FARM_FONT_MANIFEST=./fonts/manifest.json +# Optional: crop catalogue latest plus all immutable history; reload by restart. +# FARM_CATALOGUE_DIR=./catalogue diff --git a/README.md b/README.md index d42eca7..bb424b7 100644 --- a/README.md +++ b/README.md @@ -11,6 +11,10 @@ - `GET /v1/assets/{sha256}/assets.zip`:下载启动时校验过的素材快照,支持ETag。 - `GET /v1/fonts/manifest.json`:独立字体资源清单。 - `GET /v1/fonts/{sha256}/assets.zip`:原版小赖字体与完整 OFL 许可,支持 ETag。 +- `GET /v1/catalogue/manifest.json`:独立作物目录的最新完整版本。 +- `GET /v1/catalogue/releases/{release}/{file}`:公开只读历史目录文件,支持 ETag。 +- [作物数据、图片维护与不可变发布步骤](docs/catalogue.md);正式来源为 + `catalogue/source/`,机器人启动时检查更新。 - [资源分发接口与三端接入约定](docs/assets.md)。 - 素材发布文件位于根目录 `assets/manifest.json` 和 `assets/assets.zip`; ZIP 仅由本服务仓库发布,三个插件分发包不包含 ZIP。 @@ -68,6 +72,7 @@ cargo run --locked | `RUST_LOG` | `farm_service=info` | | `FARM_ASSET_MANIFEST` | 可选,建议 `./assets/manifest.json`;同目录须有assets.zip;未设置时资源接口返回503 | | `FARM_FONT_MANIFEST` | 可选,设为 `./fonts/manifest.json`;同目录须有 assets.zip;未设置时字体接口返回503 | +| `FARM_CATALOGUE_DIR` | 可选,设为 `./catalogue`;启动校验最新及全部历史版本,未设置返回503;更新后重启生效 | 相对目录以进程工作目录为基准;生产建议使用固定绝对路径。 `.env.example` 只是模板,程序**不会自动加载 .env**。 @@ -129,6 +134,8 @@ Invoke-RestMethod -Uri "http://127.0.0.1:8080/v1/users/qq/12345678" ` cargo fmt --check cargo test --locked --all-targets cargo clippy --locked --all-targets -- -D warnings +python -m unittest discover -s tests -p test_prepare_catalogue.py +python scripts/prepare_catalogue.py --version catalogue-20261026-1 --check ``` 测试覆盖鉴权、资料校验、昵称更新、重启持久化、平台隔离、并发建档、 diff --git a/catalogue/.gitignore b/catalogue/.gitignore new file mode 100644 index 0000000..83497e3 --- /dev/null +++ b/catalogue/.gitignore @@ -0,0 +1 @@ +.publish.lock diff --git a/catalogue/manifest.json b/catalogue/manifest.json new file mode 100644 index 0000000..2061c08 --- /dev/null +++ b/catalogue/manifest.json @@ -0,0 +1,23 @@ +{ + "files": { + "assets.zip": { + "sha256": "78d6e8e448fd5296b21d471b98ea7d58c81ef78a82b0e192a1ed041bb5fddad9", + "size_bytes": 21264561 + }, + "land-soils.zip": { + "sha256": "e27151f0b92c36842c23d9bf3d4855e786ef5a9db37c736e751b53be8d3ebda9", + "size_bytes": 57889 + }, + "metadata.json": { + "sha256": "6ba1c2134d1a853cd4c2bfd6489e68bd59a0c6068cd79289a1f4bcaa62f2444d", + "size_bytes": 197449 + }, + "plants.json": { + "sha256": "e05e4430643710ccbeeeb1c7c8640ec5962ee097de6b3d5fad0fb7860c596a2b", + "size_bytes": 87259 + } + }, + "release": "4c88736c2e9b1b5eec4568e953152d59a6918242802da72a6eec1a615a17f18b", + "schema": 1, + "version": "catalogue-20261026-1" +} diff --git a/catalogue/source/images/background/decorateIcon/decorate_autumn_1.jpg b/catalogue/source/images/background/decorateIcon/decorate_autumn_1.jpg new file mode 100644 index 0000000..bb0b278 Binary files /dev/null and b/catalogue/source/images/background/decorateIcon/decorate_autumn_1.jpg differ diff --git a/catalogue/source/images/background/decorateIcon/decorate_autumn_2.png b/catalogue/source/images/background/decorateIcon/decorate_autumn_2.png new file mode 100644 index 0000000..71ed359 Binary files /dev/null and b/catalogue/source/images/background/decorateIcon/decorate_autumn_2.png differ diff --git a/catalogue/source/images/background/decorateIcon/decorate_autumn_3.png b/catalogue/source/images/background/decorateIcon/decorate_autumn_3.png new file mode 100644 index 0000000..5d416b9 Binary files /dev/null and b/catalogue/source/images/background/decorateIcon/decorate_autumn_3.png differ diff --git a/catalogue/source/images/background/decorateIcon/decorate_autumn_4.png b/catalogue/source/images/background/decorateIcon/decorate_autumn_4.png new file mode 100644 index 0000000..ffb49b5 Binary files /dev/null and b/catalogue/source/images/background/decorateIcon/decorate_autumn_4.png differ diff --git a/catalogue/source/images/background/decorateIcon/decorate_autumn_5.png b/catalogue/source/images/background/decorateIcon/decorate_autumn_5.png new file mode 100644 index 0000000..f747220 Binary files /dev/null and b/catalogue/source/images/background/decorateIcon/decorate_autumn_5.png differ diff --git a/catalogue/source/images/background/decorateIcon/decorate_autumn_6.png b/catalogue/source/images/background/decorateIcon/decorate_autumn_6.png new file mode 100644 index 0000000..377d0e7 Binary files /dev/null and b/catalogue/source/images/background/decorateIcon/decorate_autumn_6.png differ diff --git a/catalogue/source/images/background/decorateIcon/decorate_autumn_7.png b/catalogue/source/images/background/decorateIcon/decorate_autumn_7.png new file mode 100644 index 0000000..9b8cc94 Binary files /dev/null and b/catalogue/source/images/background/decorateIcon/decorate_autumn_7.png differ diff --git a/catalogue/source/images/background/decorateIcon/decorate_bee_1.jpg b/catalogue/source/images/background/decorateIcon/decorate_bee_1.jpg new file mode 100644 index 0000000..c8f359d Binary files /dev/null and b/catalogue/source/images/background/decorateIcon/decorate_bee_1.jpg differ diff --git a/catalogue/source/images/background/decorateIcon/decorate_bee_2.png b/catalogue/source/images/background/decorateIcon/decorate_bee_2.png new file mode 100644 index 0000000..3ccbace Binary files /dev/null and b/catalogue/source/images/background/decorateIcon/decorate_bee_2.png differ diff --git a/catalogue/source/images/background/decorateIcon/decorate_bee_3.png b/catalogue/source/images/background/decorateIcon/decorate_bee_3.png new file mode 100644 index 0000000..b741838 Binary files /dev/null and b/catalogue/source/images/background/decorateIcon/decorate_bee_3.png differ diff --git a/catalogue/source/images/background/decorateIcon/decorate_bee_4.png b/catalogue/source/images/background/decorateIcon/decorate_bee_4.png new file mode 100644 index 0000000..67e42c8 Binary files /dev/null and b/catalogue/source/images/background/decorateIcon/decorate_bee_4.png differ diff --git a/catalogue/source/images/background/decorateIcon/decorate_bee_5.png b/catalogue/source/images/background/decorateIcon/decorate_bee_5.png new file mode 100644 index 0000000..08d45d8 Binary files /dev/null and b/catalogue/source/images/background/decorateIcon/decorate_bee_5.png differ diff --git a/catalogue/source/images/background/decorateIcon/decorate_bee_6.png b/catalogue/source/images/background/decorateIcon/decorate_bee_6.png new file mode 100644 index 0000000..76254cf Binary files /dev/null and b/catalogue/source/images/background/decorateIcon/decorate_bee_6.png differ diff --git a/catalogue/source/images/background/decorateIcon/decorate_bee_7.png b/catalogue/source/images/background/decorateIcon/decorate_bee_7.png new file mode 100644 index 0000000..ab29a85 Binary files /dev/null and b/catalogue/source/images/background/decorateIcon/decorate_bee_7.png differ diff --git a/catalogue/source/images/background/decorateIcon/decorate_bee_8.png b/catalogue/source/images/background/decorateIcon/decorate_bee_8.png new file mode 100644 index 0000000..328ca23 Binary files /dev/null and b/catalogue/source/images/background/decorateIcon/decorate_bee_8.png differ diff --git a/catalogue/source/images/background/decorateIcon/decorate_bee_9.png b/catalogue/source/images/background/decorateIcon/decorate_bee_9.png new file mode 100644 index 0000000..a330bb9 Binary files /dev/null and b/catalogue/source/images/background/decorateIcon/decorate_bee_9.png differ diff --git a/catalogue/source/images/background/decorateIcon/decorate_default_1.jpg b/catalogue/source/images/background/decorateIcon/decorate_default_1.jpg new file mode 100644 index 0000000..b2c5683 Binary files /dev/null and b/catalogue/source/images/background/decorateIcon/decorate_default_1.jpg differ diff --git a/catalogue/source/images/background/decorateIcon/decorate_default_10.png b/catalogue/source/images/background/decorateIcon/decorate_default_10.png new file mode 100644 index 0000000..148ee66 Binary files /dev/null and b/catalogue/source/images/background/decorateIcon/decorate_default_10.png differ diff --git a/catalogue/source/images/background/decorateIcon/decorate_default_2.png b/catalogue/source/images/background/decorateIcon/decorate_default_2.png new file mode 100644 index 0000000..0ce80db Binary files /dev/null and b/catalogue/source/images/background/decorateIcon/decorate_default_2.png differ diff --git a/catalogue/source/images/background/decorateIcon/decorate_default_3.png b/catalogue/source/images/background/decorateIcon/decorate_default_3.png new file mode 100644 index 0000000..ba6fd03 Binary files /dev/null and b/catalogue/source/images/background/decorateIcon/decorate_default_3.png differ diff --git a/catalogue/source/images/background/decorateIcon/decorate_default_4.png b/catalogue/source/images/background/decorateIcon/decorate_default_4.png new file mode 100644 index 0000000..4dd467f Binary files /dev/null and b/catalogue/source/images/background/decorateIcon/decorate_default_4.png differ diff --git a/catalogue/source/images/background/decorateIcon/decorate_default_5.png b/catalogue/source/images/background/decorateIcon/decorate_default_5.png new file mode 100644 index 0000000..421ad13 Binary files /dev/null and b/catalogue/source/images/background/decorateIcon/decorate_default_5.png differ diff --git a/catalogue/source/images/background/decorateIcon/decorate_default_6.png b/catalogue/source/images/background/decorateIcon/decorate_default_6.png new file mode 100644 index 0000000..c1d8484 Binary files /dev/null and b/catalogue/source/images/background/decorateIcon/decorate_default_6.png differ diff --git a/catalogue/source/images/background/decorateIcon/decorate_default_7.png b/catalogue/source/images/background/decorateIcon/decorate_default_7.png new file mode 100644 index 0000000..b667060 Binary files /dev/null and b/catalogue/source/images/background/decorateIcon/decorate_default_7.png differ diff --git a/catalogue/source/images/background/decorateIcon/decorate_default_8.png b/catalogue/source/images/background/decorateIcon/decorate_default_8.png new file mode 100644 index 0000000..3a73ec7 Binary files /dev/null and b/catalogue/source/images/background/decorateIcon/decorate_default_8.png differ diff --git a/catalogue/source/images/background/decorateIcon/decorate_default_9.png b/catalogue/source/images/background/decorateIcon/decorate_default_9.png new file mode 100644 index 0000000..a0a745f Binary files /dev/null and b/catalogue/source/images/background/decorateIcon/decorate_default_9.png differ diff --git a/catalogue/source/images/background/decorateIcon/decorate_spring_1.jpg b/catalogue/source/images/background/decorateIcon/decorate_spring_1.jpg new file mode 100644 index 0000000..2915662 Binary files /dev/null and b/catalogue/source/images/background/decorateIcon/decorate_spring_1.jpg differ diff --git a/catalogue/source/images/background/decorateIcon/decorate_spring_2.png b/catalogue/source/images/background/decorateIcon/decorate_spring_2.png new file mode 100644 index 0000000..a83cfe0 Binary files /dev/null and b/catalogue/source/images/background/decorateIcon/decorate_spring_2.png differ diff --git a/catalogue/source/images/background/decorateIcon/decorate_spring_3.png b/catalogue/source/images/background/decorateIcon/decorate_spring_3.png new file mode 100644 index 0000000..480cc4a Binary files /dev/null and b/catalogue/source/images/background/decorateIcon/decorate_spring_3.png differ diff --git a/catalogue/source/images/background/decorateIcon/decorate_spring_4.png b/catalogue/source/images/background/decorateIcon/decorate_spring_4.png new file mode 100644 index 0000000..17198fe Binary files /dev/null and b/catalogue/source/images/background/decorateIcon/decorate_spring_4.png differ diff --git a/catalogue/source/images/background/decorateIcon/decorate_spring_5.png b/catalogue/source/images/background/decorateIcon/decorate_spring_5.png new file mode 100644 index 0000000..2b8e035 Binary files /dev/null and b/catalogue/source/images/background/decorateIcon/decorate_spring_5.png differ diff --git a/catalogue/source/images/background/decorateIcon/decorate_spring_6.png b/catalogue/source/images/background/decorateIcon/decorate_spring_6.png new file mode 100644 index 0000000..6e41c70 Binary files /dev/null and b/catalogue/source/images/background/decorateIcon/decorate_spring_6.png differ diff --git a/catalogue/source/images/background/decorateIcon/decorate_spring_7.png b/catalogue/source/images/background/decorateIcon/decorate_spring_7.png new file mode 100644 index 0000000..a0202e7 Binary files /dev/null and b/catalogue/source/images/background/decorateIcon/decorate_spring_7.png differ diff --git a/catalogue/source/images/background/decorateIcon/decorate_spring_9.png b/catalogue/source/images/background/decorateIcon/decorate_spring_9.png new file mode 100644 index 0000000..68bcb6f Binary files /dev/null and b/catalogue/source/images/background/decorateIcon/decorate_spring_9.png differ diff --git a/catalogue/source/images/background/decorateIcon/decorate_summer_1.jpg b/catalogue/source/images/background/decorateIcon/decorate_summer_1.jpg new file mode 100644 index 0000000..d4b12ac Binary files /dev/null and b/catalogue/source/images/background/decorateIcon/decorate_summer_1.jpg differ diff --git a/catalogue/source/images/background/decorateIcon/decorate_summer_2.png b/catalogue/source/images/background/decorateIcon/decorate_summer_2.png new file mode 100644 index 0000000..05805e3 Binary files /dev/null and b/catalogue/source/images/background/decorateIcon/decorate_summer_2.png differ diff --git a/catalogue/source/images/background/decorateIcon/decorate_summer_3.png b/catalogue/source/images/background/decorateIcon/decorate_summer_3.png new file mode 100644 index 0000000..f8c170d Binary files /dev/null and b/catalogue/source/images/background/decorateIcon/decorate_summer_3.png differ diff --git a/catalogue/source/images/background/decorateIcon/decorate_summer_4.png b/catalogue/source/images/background/decorateIcon/decorate_summer_4.png new file mode 100644 index 0000000..fa98f94 Binary files /dev/null and b/catalogue/source/images/background/decorateIcon/decorate_summer_4.png differ diff --git a/catalogue/source/images/background/decorateIcon/decorate_summer_5.png b/catalogue/source/images/background/decorateIcon/decorate_summer_5.png new file mode 100644 index 0000000..ad3569a Binary files /dev/null and b/catalogue/source/images/background/decorateIcon/decorate_summer_5.png differ diff --git a/catalogue/source/images/background/decorateIcon/decorate_summer_6.png b/catalogue/source/images/background/decorateIcon/decorate_summer_6.png new file mode 100644 index 0000000..4a3f52c Binary files /dev/null and b/catalogue/source/images/background/decorateIcon/decorate_summer_6.png differ diff --git a/catalogue/source/images/background/decorateIcon/decorate_summer_7.png b/catalogue/source/images/background/decorateIcon/decorate_summer_7.png new file mode 100644 index 0000000..579d66a Binary files /dev/null and b/catalogue/source/images/background/decorateIcon/decorate_summer_7.png differ diff --git a/catalogue/source/images/background/decorateIcon/decorate_summer_9.png b/catalogue/source/images/background/decorateIcon/decorate_summer_9.png new file mode 100644 index 0000000..8860868 Binary files /dev/null and b/catalogue/source/images/background/decorateIcon/decorate_summer_9.png differ diff --git a/catalogue/source/images/background/decorateIcon/decorate_winter_1.jpg b/catalogue/source/images/background/decorateIcon/decorate_winter_1.jpg new file mode 100644 index 0000000..6383b22 Binary files /dev/null and b/catalogue/source/images/background/decorateIcon/decorate_winter_1.jpg differ diff --git a/catalogue/source/images/background/decorateIcon/decorate_winter_2.png b/catalogue/source/images/background/decorateIcon/decorate_winter_2.png new file mode 100644 index 0000000..f43ddca Binary files /dev/null and b/catalogue/source/images/background/decorateIcon/decorate_winter_2.png differ diff --git a/catalogue/source/images/background/decorateIcon/decorate_winter_3.png b/catalogue/source/images/background/decorateIcon/decorate_winter_3.png new file mode 100644 index 0000000..8588704 Binary files /dev/null and b/catalogue/source/images/background/decorateIcon/decorate_winter_3.png differ diff --git a/catalogue/source/images/background/decorateIcon/decorate_winter_4.png b/catalogue/source/images/background/decorateIcon/decorate_winter_4.png new file mode 100644 index 0000000..e269a85 Binary files /dev/null and b/catalogue/source/images/background/decorateIcon/decorate_winter_4.png differ diff --git a/catalogue/source/images/background/decorateIcon/decorate_winter_5.png b/catalogue/source/images/background/decorateIcon/decorate_winter_5.png new file mode 100644 index 0000000..813e0c8 Binary files /dev/null and b/catalogue/source/images/background/decorateIcon/decorate_winter_5.png differ diff --git a/catalogue/source/images/background/decorateIcon/decorate_winter_6.png b/catalogue/source/images/background/decorateIcon/decorate_winter_6.png new file mode 100644 index 0000000..a4caae1 Binary files /dev/null and b/catalogue/source/images/background/decorateIcon/decorate_winter_6.png differ diff --git a/catalogue/source/images/background/decorateIcon/decorate_winter_7.png b/catalogue/source/images/background/decorateIcon/decorate_winter_7.png new file mode 100644 index 0000000..620ce93 Binary files /dev/null and b/catalogue/source/images/background/decorateIcon/decorate_winter_7.png differ diff --git a/catalogue/source/images/background/decorateIcon/decorate_winter_8.png b/catalogue/source/images/background/decorateIcon/decorate_winter_8.png new file mode 100644 index 0000000..439ff79 Binary files /dev/null and b/catalogue/source/images/background/decorateIcon/decorate_winter_8.png differ diff --git a/catalogue/source/images/background/decorateIcon/decorate_winter_9.png b/catalogue/source/images/background/decorateIcon/decorate_winter_9.png new file mode 100644 index 0000000..af0828f Binary files /dev/null and b/catalogue/source/images/background/decorateIcon/decorate_winter_9.png differ diff --git a/catalogue/source/images/background/expansion.png b/catalogue/source/images/background/expansion.png new file mode 100644 index 0000000..f056606 Binary files /dev/null and b/catalogue/source/images/background/expansion.png differ diff --git a/catalogue/source/images/background/frame/frame.png b/catalogue/source/images/background/frame/frame.png new file mode 100644 index 0000000..a37e8bb Binary files /dev/null and b/catalogue/source/images/background/frame/frame.png differ diff --git a/catalogue/source/images/background/ripe.png b/catalogue/source/images/background/ripe.png new file mode 100644 index 0000000..4f5b5db Binary files /dev/null and b/catalogue/source/images/background/ripe.png differ diff --git a/catalogue/source/images/background/userInfo.png b/catalogue/source/images/background/userInfo.png new file mode 100644 index 0000000..1616766 Binary files /dev/null and b/catalogue/source/images/background/userInfo.png differ diff --git a/catalogue/source/images/pest/pest1.png b/catalogue/source/images/pest/pest1.png new file mode 100644 index 0000000..3d3a469 Binary files /dev/null and b/catalogue/source/images/pest/pest1.png differ diff --git a/catalogue/source/images/pest/pest11.png b/catalogue/source/images/pest/pest11.png new file mode 100644 index 0000000..570d77b Binary files /dev/null and b/catalogue/source/images/pest/pest11.png differ diff --git a/catalogue/source/images/pest/pest13.png b/catalogue/source/images/pest/pest13.png new file mode 100644 index 0000000..0fe0ec6 Binary files /dev/null and b/catalogue/source/images/pest/pest13.png differ diff --git a/catalogue/source/images/pest/pest15.png b/catalogue/source/images/pest/pest15.png new file mode 100644 index 0000000..71e3ea7 Binary files /dev/null and b/catalogue/source/images/pest/pest15.png differ diff --git a/catalogue/source/images/pest/pest17.png b/catalogue/source/images/pest/pest17.png new file mode 100644 index 0000000..2a1d01d Binary files /dev/null and b/catalogue/source/images/pest/pest17.png differ diff --git a/catalogue/source/images/pest/pest19.png b/catalogue/source/images/pest/pest19.png new file mode 100644 index 0000000..2a1d01d Binary files /dev/null and b/catalogue/source/images/pest/pest19.png differ diff --git a/catalogue/source/images/pest/pest21.png b/catalogue/source/images/pest/pest21.png new file mode 100644 index 0000000..74b4a97 Binary files /dev/null and b/catalogue/source/images/pest/pest21.png differ diff --git a/catalogue/source/images/pest/pest23.png b/catalogue/source/images/pest/pest23.png new file mode 100644 index 0000000..2a1d01d Binary files /dev/null and b/catalogue/source/images/pest/pest23.png differ diff --git a/catalogue/source/images/pest/pest25.png b/catalogue/source/images/pest/pest25.png new file mode 100644 index 0000000..c9ef6b2 Binary files /dev/null and b/catalogue/source/images/pest/pest25.png differ diff --git a/catalogue/source/images/pest/pest27.png b/catalogue/source/images/pest/pest27.png new file mode 100644 index 0000000..c13e68a Binary files /dev/null and b/catalogue/source/images/pest/pest27.png differ diff --git a/catalogue/source/images/pest/pest29.png b/catalogue/source/images/pest/pest29.png new file mode 100644 index 0000000..2a1d01d Binary files /dev/null and b/catalogue/source/images/pest/pest29.png differ diff --git a/catalogue/source/images/pest/pest3.png b/catalogue/source/images/pest/pest3.png new file mode 100644 index 0000000..79024d2 Binary files /dev/null and b/catalogue/source/images/pest/pest3.png differ diff --git a/catalogue/source/images/pest/pest31.png b/catalogue/source/images/pest/pest31.png new file mode 100644 index 0000000..2a1d01d Binary files /dev/null and b/catalogue/source/images/pest/pest31.png differ diff --git a/catalogue/source/images/pest/pest33.png b/catalogue/source/images/pest/pest33.png new file mode 100644 index 0000000..49f73c5 Binary files /dev/null and b/catalogue/source/images/pest/pest33.png differ diff --git a/catalogue/source/images/pest/pest35.png b/catalogue/source/images/pest/pest35.png new file mode 100644 index 0000000..4c6e270 Binary files /dev/null and b/catalogue/source/images/pest/pest35.png differ diff --git a/catalogue/source/images/pest/pest37.png b/catalogue/source/images/pest/pest37.png new file mode 100644 index 0000000..c9835e0 Binary files /dev/null and b/catalogue/source/images/pest/pest37.png differ diff --git a/catalogue/source/images/pest/pest39.png b/catalogue/source/images/pest/pest39.png new file mode 100644 index 0000000..c13e68a Binary files /dev/null and b/catalogue/source/images/pest/pest39.png differ diff --git a/catalogue/source/images/pest/pest41.png b/catalogue/source/images/pest/pest41.png new file mode 100644 index 0000000..4caf0ee Binary files /dev/null and b/catalogue/source/images/pest/pest41.png differ diff --git a/catalogue/source/images/pest/pest43.png b/catalogue/source/images/pest/pest43.png new file mode 100644 index 0000000..d243c49 Binary files /dev/null and b/catalogue/source/images/pest/pest43.png differ diff --git a/catalogue/source/images/pest/pest45.png b/catalogue/source/images/pest/pest45.png new file mode 100644 index 0000000..d058e70 Binary files /dev/null and b/catalogue/source/images/pest/pest45.png differ diff --git a/catalogue/source/images/pest/pest47.png b/catalogue/source/images/pest/pest47.png new file mode 100644 index 0000000..2a1d01d Binary files /dev/null and b/catalogue/source/images/pest/pest47.png differ diff --git a/catalogue/source/images/pest/pest49.png b/catalogue/source/images/pest/pest49.png new file mode 100644 index 0000000..2a1d01d Binary files /dev/null and b/catalogue/source/images/pest/pest49.png differ diff --git a/catalogue/source/images/pest/pest5.png b/catalogue/source/images/pest/pest5.png new file mode 100644 index 0000000..d620481 Binary files /dev/null and b/catalogue/source/images/pest/pest5.png differ diff --git a/catalogue/source/images/pest/pest51.png b/catalogue/source/images/pest/pest51.png new file mode 100644 index 0000000..c7fea96 Binary files /dev/null and b/catalogue/source/images/pest/pest51.png differ diff --git a/catalogue/source/images/pest/pest53.png b/catalogue/source/images/pest/pest53.png new file mode 100644 index 0000000..4eb67b7 Binary files /dev/null and b/catalogue/source/images/pest/pest53.png differ diff --git a/catalogue/source/images/pest/pest55.png b/catalogue/source/images/pest/pest55.png new file mode 100644 index 0000000..9f8c66b Binary files /dev/null and b/catalogue/source/images/pest/pest55.png differ diff --git a/catalogue/source/images/pest/pest57.png b/catalogue/source/images/pest/pest57.png new file mode 100644 index 0000000..e6734d2 Binary files /dev/null and b/catalogue/source/images/pest/pest57.png differ diff --git a/catalogue/source/images/pest/pest59.png b/catalogue/source/images/pest/pest59.png new file mode 100644 index 0000000..9f8c66b Binary files /dev/null and b/catalogue/source/images/pest/pest59.png differ diff --git a/catalogue/source/images/pest/pest61.png b/catalogue/source/images/pest/pest61.png new file mode 100644 index 0000000..7804a9b Binary files /dev/null and b/catalogue/source/images/pest/pest61.png differ diff --git a/catalogue/source/images/pest/pest63.png b/catalogue/source/images/pest/pest63.png new file mode 100644 index 0000000..bbe3480 Binary files /dev/null and b/catalogue/source/images/pest/pest63.png differ diff --git a/catalogue/source/images/pest/pest65.png b/catalogue/source/images/pest/pest65.png new file mode 100644 index 0000000..9f8c66b Binary files /dev/null and b/catalogue/source/images/pest/pest65.png differ diff --git a/catalogue/source/images/pest/pest67.png b/catalogue/source/images/pest/pest67.png new file mode 100644 index 0000000..9f8c66b Binary files /dev/null and b/catalogue/source/images/pest/pest67.png differ diff --git a/catalogue/source/images/pest/pest69.png b/catalogue/source/images/pest/pest69.png new file mode 100644 index 0000000..e834098 Binary files /dev/null and b/catalogue/source/images/pest/pest69.png differ diff --git a/catalogue/source/images/pest/pest7.png b/catalogue/source/images/pest/pest7.png new file mode 100644 index 0000000..0f41ff8 Binary files /dev/null and b/catalogue/source/images/pest/pest7.png differ diff --git a/catalogue/source/images/pest/pest71.png b/catalogue/source/images/pest/pest71.png new file mode 100644 index 0000000..90934d1 Binary files /dev/null and b/catalogue/source/images/pest/pest71.png differ diff --git a/catalogue/source/images/pest/pest73.png b/catalogue/source/images/pest/pest73.png new file mode 100644 index 0000000..52e620f Binary files /dev/null and b/catalogue/source/images/pest/pest73.png differ diff --git a/catalogue/source/images/pest/pest75.png b/catalogue/source/images/pest/pest75.png new file mode 100644 index 0000000..9d65f21 Binary files /dev/null and b/catalogue/source/images/pest/pest75.png differ diff --git a/catalogue/source/images/pest/pest9.png b/catalogue/source/images/pest/pest9.png new file mode 100644 index 0000000..84795b5 Binary files /dev/null and b/catalogue/source/images/pest/pest9.png differ diff --git a/catalogue/source/images/plant/ATTomato/1.png b/catalogue/source/images/plant/ATTomato/1.png new file mode 100644 index 0000000..470bbe2 Binary files /dev/null and b/catalogue/source/images/plant/ATTomato/1.png differ diff --git a/catalogue/source/images/plant/ATTomato/2.png b/catalogue/source/images/plant/ATTomato/2.png new file mode 100644 index 0000000..1c729bc Binary files /dev/null and b/catalogue/source/images/plant/ATTomato/2.png differ diff --git a/catalogue/source/images/plant/ATTomato/3.png b/catalogue/source/images/plant/ATTomato/3.png new file mode 100644 index 0000000..fa2521a Binary files /dev/null and b/catalogue/source/images/plant/ATTomato/3.png differ diff --git a/catalogue/source/images/plant/ATTomato/4.png b/catalogue/source/images/plant/ATTomato/4.png new file mode 100644 index 0000000..b399ef0 Binary files /dev/null and b/catalogue/source/images/plant/ATTomato/4.png differ diff --git a/catalogue/source/images/plant/ATTomato/5.png b/catalogue/source/images/plant/ATTomato/5.png new file mode 100644 index 0000000..3ddc306 Binary files /dev/null and b/catalogue/source/images/plant/ATTomato/5.png differ diff --git a/catalogue/source/images/plant/ATTomato/icon.png b/catalogue/source/images/plant/ATTomato/icon.png new file mode 100644 index 0000000..7d09384 Binary files /dev/null and b/catalogue/source/images/plant/ATTomato/icon.png differ diff --git a/catalogue/source/images/plant/basic/0.png b/catalogue/source/images/plant/basic/0.png new file mode 100644 index 0000000..aee0a5c Binary files /dev/null and b/catalogue/source/images/plant/basic/0.png differ diff --git a/catalogue/source/images/plant/basic/9.png b/catalogue/source/images/plant/basic/9.png new file mode 100644 index 0000000..312fc6d Binary files /dev/null and b/catalogue/source/images/plant/basic/9.png differ diff --git a/catalogue/source/images/plant/一点红/1.png b/catalogue/source/images/plant/一点红/1.png new file mode 100644 index 0000000..8d72eb9 Binary files /dev/null and b/catalogue/source/images/plant/一点红/1.png differ diff --git a/catalogue/source/images/plant/一点红/2.png b/catalogue/source/images/plant/一点红/2.png new file mode 100644 index 0000000..dc12c51 Binary files /dev/null and b/catalogue/source/images/plant/一点红/2.png differ diff --git a/catalogue/source/images/plant/一点红/3.png b/catalogue/source/images/plant/一点红/3.png new file mode 100644 index 0000000..d5a10c5 Binary files /dev/null and b/catalogue/source/images/plant/一点红/3.png differ diff --git a/catalogue/source/images/plant/一点红/4.png b/catalogue/source/images/plant/一点红/4.png new file mode 100644 index 0000000..318a988 Binary files /dev/null and b/catalogue/source/images/plant/一点红/4.png differ diff --git a/catalogue/source/images/plant/一点红/5.png b/catalogue/source/images/plant/一点红/5.png new file mode 100644 index 0000000..22904b4 Binary files /dev/null and b/catalogue/source/images/plant/一点红/5.png differ diff --git a/catalogue/source/images/plant/一点红/icon.png b/catalogue/source/images/plant/一点红/icon.png new file mode 100644 index 0000000..74ebe5e Binary files /dev/null and b/catalogue/source/images/plant/一点红/icon.png differ diff --git a/catalogue/source/images/plant/三七/1.png b/catalogue/source/images/plant/三七/1.png new file mode 100644 index 0000000..ba2096b Binary files /dev/null and b/catalogue/source/images/plant/三七/1.png differ diff --git a/catalogue/source/images/plant/三七/2.png b/catalogue/source/images/plant/三七/2.png new file mode 100644 index 0000000..2f58eea Binary files /dev/null and b/catalogue/source/images/plant/三七/2.png differ diff --git a/catalogue/source/images/plant/三七/3.png b/catalogue/source/images/plant/三七/3.png new file mode 100644 index 0000000..a7f9bea Binary files /dev/null and b/catalogue/source/images/plant/三七/3.png differ diff --git a/catalogue/source/images/plant/三七/4.png b/catalogue/source/images/plant/三七/4.png new file mode 100644 index 0000000..c2dd16c Binary files /dev/null and b/catalogue/source/images/plant/三七/4.png differ diff --git a/catalogue/source/images/plant/三七/5.png b/catalogue/source/images/plant/三七/5.png new file mode 100644 index 0000000..10c536c Binary files /dev/null and b/catalogue/source/images/plant/三七/5.png differ diff --git a/catalogue/source/images/plant/三七/icon.png b/catalogue/source/images/plant/三七/icon.png new file mode 100644 index 0000000..95c87b2 Binary files /dev/null and b/catalogue/source/images/plant/三七/icon.png differ diff --git a/catalogue/source/images/plant/丝瓜/1.png b/catalogue/source/images/plant/丝瓜/1.png new file mode 100644 index 0000000..2bb3b17 Binary files /dev/null and b/catalogue/source/images/plant/丝瓜/1.png differ diff --git a/catalogue/source/images/plant/丝瓜/2.png b/catalogue/source/images/plant/丝瓜/2.png new file mode 100644 index 0000000..0584835 Binary files /dev/null and b/catalogue/source/images/plant/丝瓜/2.png differ diff --git a/catalogue/source/images/plant/丝瓜/3.png b/catalogue/source/images/plant/丝瓜/3.png new file mode 100644 index 0000000..82f48fe Binary files /dev/null and b/catalogue/source/images/plant/丝瓜/3.png differ diff --git a/catalogue/source/images/plant/丝瓜/4.png b/catalogue/source/images/plant/丝瓜/4.png new file mode 100644 index 0000000..a6cf753 Binary files /dev/null and b/catalogue/source/images/plant/丝瓜/4.png differ diff --git a/catalogue/source/images/plant/丝瓜/5.png b/catalogue/source/images/plant/丝瓜/5.png new file mode 100644 index 0000000..db204bb Binary files /dev/null and b/catalogue/source/images/plant/丝瓜/5.png differ diff --git a/catalogue/source/images/plant/丝瓜/icon.png b/catalogue/source/images/plant/丝瓜/icon.png new file mode 100644 index 0000000..47c3297 Binary files /dev/null and b/catalogue/source/images/plant/丝瓜/icon.png differ diff --git a/catalogue/source/images/plant/乌饭子/1.png b/catalogue/source/images/plant/乌饭子/1.png new file mode 100644 index 0000000..d6b78f6 Binary files /dev/null and b/catalogue/source/images/plant/乌饭子/1.png differ diff --git a/catalogue/source/images/plant/乌饭子/2.png b/catalogue/source/images/plant/乌饭子/2.png new file mode 100644 index 0000000..f488ed3 Binary files /dev/null and b/catalogue/source/images/plant/乌饭子/2.png differ diff --git a/catalogue/source/images/plant/乌饭子/3.png b/catalogue/source/images/plant/乌饭子/3.png new file mode 100644 index 0000000..a7e015b Binary files /dev/null and b/catalogue/source/images/plant/乌饭子/3.png differ diff --git a/catalogue/source/images/plant/乌饭子/4.png b/catalogue/source/images/plant/乌饭子/4.png new file mode 100644 index 0000000..db6d0b2 Binary files /dev/null and b/catalogue/source/images/plant/乌饭子/4.png differ diff --git a/catalogue/source/images/plant/乌饭子/5.png b/catalogue/source/images/plant/乌饭子/5.png new file mode 100644 index 0000000..a1fbde6 Binary files /dev/null and b/catalogue/source/images/plant/乌饭子/5.png differ diff --git a/catalogue/source/images/plant/乌饭子/icon.png b/catalogue/source/images/plant/乌饭子/icon.png new file mode 100644 index 0000000..ea8a2e6 Binary files /dev/null and b/catalogue/source/images/plant/乌饭子/icon.png differ diff --git a/catalogue/source/images/plant/兔儿伞/1.png b/catalogue/source/images/plant/兔儿伞/1.png new file mode 100644 index 0000000..aec4715 Binary files /dev/null and b/catalogue/source/images/plant/兔儿伞/1.png differ diff --git a/catalogue/source/images/plant/兔儿伞/2.png b/catalogue/source/images/plant/兔儿伞/2.png new file mode 100644 index 0000000..dc1317f Binary files /dev/null and b/catalogue/source/images/plant/兔儿伞/2.png differ diff --git a/catalogue/source/images/plant/兔儿伞/3.png b/catalogue/source/images/plant/兔儿伞/3.png new file mode 100644 index 0000000..d0385ac Binary files /dev/null and b/catalogue/source/images/plant/兔儿伞/3.png differ diff --git a/catalogue/source/images/plant/兔儿伞/4.png b/catalogue/source/images/plant/兔儿伞/4.png new file mode 100644 index 0000000..9378c51 Binary files /dev/null and b/catalogue/source/images/plant/兔儿伞/4.png differ diff --git a/catalogue/source/images/plant/兔儿伞/5.png b/catalogue/source/images/plant/兔儿伞/5.png new file mode 100644 index 0000000..e4864b2 Binary files /dev/null and b/catalogue/source/images/plant/兔儿伞/5.png differ diff --git a/catalogue/source/images/plant/兔儿伞/icon.png b/catalogue/source/images/plant/兔儿伞/icon.png new file mode 100644 index 0000000..b6998f9 Binary files /dev/null and b/catalogue/source/images/plant/兔儿伞/icon.png differ diff --git a/catalogue/source/images/plant/关白附子/1.png b/catalogue/source/images/plant/关白附子/1.png new file mode 100644 index 0000000..8e41d4b Binary files /dev/null and b/catalogue/source/images/plant/关白附子/1.png differ diff --git a/catalogue/source/images/plant/关白附子/2.png b/catalogue/source/images/plant/关白附子/2.png new file mode 100644 index 0000000..d5800db Binary files /dev/null and b/catalogue/source/images/plant/关白附子/2.png differ diff --git a/catalogue/source/images/plant/关白附子/3.png b/catalogue/source/images/plant/关白附子/3.png new file mode 100644 index 0000000..367b760 Binary files /dev/null and b/catalogue/source/images/plant/关白附子/3.png differ diff --git a/catalogue/source/images/plant/关白附子/4.png b/catalogue/source/images/plant/关白附子/4.png new file mode 100644 index 0000000..c53dc3f Binary files /dev/null and b/catalogue/source/images/plant/关白附子/4.png differ diff --git a/catalogue/source/images/plant/关白附子/5.png b/catalogue/source/images/plant/关白附子/5.png new file mode 100644 index 0000000..965e710 Binary files /dev/null and b/catalogue/source/images/plant/关白附子/5.png differ diff --git a/catalogue/source/images/plant/关白附子/icon.png b/catalogue/source/images/plant/关白附子/icon.png new file mode 100644 index 0000000..428cd19 Binary files /dev/null and b/catalogue/source/images/plant/关白附子/icon.png differ diff --git a/catalogue/source/images/plant/关苍术/1.png b/catalogue/source/images/plant/关苍术/1.png new file mode 100644 index 0000000..45c3eb1 Binary files /dev/null and b/catalogue/source/images/plant/关苍术/1.png differ diff --git a/catalogue/source/images/plant/关苍术/2.png b/catalogue/source/images/plant/关苍术/2.png new file mode 100644 index 0000000..f244047 Binary files /dev/null and b/catalogue/source/images/plant/关苍术/2.png differ diff --git a/catalogue/source/images/plant/关苍术/3.png b/catalogue/source/images/plant/关苍术/3.png new file mode 100644 index 0000000..e14c78d Binary files /dev/null and b/catalogue/source/images/plant/关苍术/3.png differ diff --git a/catalogue/source/images/plant/关苍术/4.png b/catalogue/source/images/plant/关苍术/4.png new file mode 100644 index 0000000..0ffc792 Binary files /dev/null and b/catalogue/source/images/plant/关苍术/4.png differ diff --git a/catalogue/source/images/plant/关苍术/5.png b/catalogue/source/images/plant/关苍术/5.png new file mode 100644 index 0000000..1250c74 Binary files /dev/null and b/catalogue/source/images/plant/关苍术/5.png differ diff --git a/catalogue/source/images/plant/关苍术/icon.png b/catalogue/source/images/plant/关苍术/icon.png new file mode 100644 index 0000000..d042edc Binary files /dev/null and b/catalogue/source/images/plant/关苍术/icon.png differ diff --git a/catalogue/source/images/plant/冬凌草/1.png b/catalogue/source/images/plant/冬凌草/1.png new file mode 100644 index 0000000..5688adc Binary files /dev/null and b/catalogue/source/images/plant/冬凌草/1.png differ diff --git a/catalogue/source/images/plant/冬凌草/2.png b/catalogue/source/images/plant/冬凌草/2.png new file mode 100644 index 0000000..3c9f4a3 Binary files /dev/null and b/catalogue/source/images/plant/冬凌草/2.png differ diff --git a/catalogue/source/images/plant/冬凌草/3.png b/catalogue/source/images/plant/冬凌草/3.png new file mode 100644 index 0000000..d064e30 Binary files /dev/null and b/catalogue/source/images/plant/冬凌草/3.png differ diff --git a/catalogue/source/images/plant/冬凌草/4.png b/catalogue/source/images/plant/冬凌草/4.png new file mode 100644 index 0000000..a3a5681 Binary files /dev/null and b/catalogue/source/images/plant/冬凌草/4.png differ diff --git a/catalogue/source/images/plant/冬凌草/5.png b/catalogue/source/images/plant/冬凌草/5.png new file mode 100644 index 0000000..cb80a5a Binary files /dev/null and b/catalogue/source/images/plant/冬凌草/5.png differ diff --git a/catalogue/source/images/plant/冬凌草/icon.png b/catalogue/source/images/plant/冬凌草/icon.png new file mode 100644 index 0000000..caeb467 Binary files /dev/null and b/catalogue/source/images/plant/冬凌草/icon.png differ diff --git a/catalogue/source/images/plant/冬瓜/1.png b/catalogue/source/images/plant/冬瓜/1.png new file mode 100644 index 0000000..8e1ec4a Binary files /dev/null and b/catalogue/source/images/plant/冬瓜/1.png differ diff --git a/catalogue/source/images/plant/冬瓜/2.png b/catalogue/source/images/plant/冬瓜/2.png new file mode 100644 index 0000000..5fff0b5 Binary files /dev/null and b/catalogue/source/images/plant/冬瓜/2.png differ diff --git a/catalogue/source/images/plant/冬瓜/3.png b/catalogue/source/images/plant/冬瓜/3.png new file mode 100644 index 0000000..7868747 Binary files /dev/null and b/catalogue/source/images/plant/冬瓜/3.png differ diff --git a/catalogue/source/images/plant/冬瓜/4.png b/catalogue/source/images/plant/冬瓜/4.png new file mode 100644 index 0000000..6722ddd Binary files /dev/null and b/catalogue/source/images/plant/冬瓜/4.png differ diff --git a/catalogue/source/images/plant/冬瓜/5.png b/catalogue/source/images/plant/冬瓜/5.png new file mode 100644 index 0000000..43b0b36 Binary files /dev/null and b/catalogue/source/images/plant/冬瓜/5.png differ diff --git a/catalogue/source/images/plant/冬瓜/icon.png b/catalogue/source/images/plant/冬瓜/icon.png new file mode 100644 index 0000000..6a2c2e9 Binary files /dev/null and b/catalogue/source/images/plant/冬瓜/icon.png differ diff --git a/catalogue/source/images/plant/决明子/1.png b/catalogue/source/images/plant/决明子/1.png new file mode 100644 index 0000000..e793278 Binary files /dev/null and b/catalogue/source/images/plant/决明子/1.png differ diff --git a/catalogue/source/images/plant/决明子/2.png b/catalogue/source/images/plant/决明子/2.png new file mode 100644 index 0000000..d8ea9de Binary files /dev/null and b/catalogue/source/images/plant/决明子/2.png differ diff --git a/catalogue/source/images/plant/决明子/3.png b/catalogue/source/images/plant/决明子/3.png new file mode 100644 index 0000000..0438e4b Binary files /dev/null and b/catalogue/source/images/plant/决明子/3.png differ diff --git a/catalogue/source/images/plant/决明子/4.png b/catalogue/source/images/plant/决明子/4.png new file mode 100644 index 0000000..6c70643 Binary files /dev/null and b/catalogue/source/images/plant/决明子/4.png differ diff --git a/catalogue/source/images/plant/决明子/5.png b/catalogue/source/images/plant/决明子/5.png new file mode 100644 index 0000000..33ddbb7 Binary files /dev/null and b/catalogue/source/images/plant/决明子/5.png differ diff --git a/catalogue/source/images/plant/决明子/icon.png b/catalogue/source/images/plant/决明子/icon.png new file mode 100644 index 0000000..6322715 Binary files /dev/null and b/catalogue/source/images/plant/决明子/icon.png differ diff --git a/catalogue/source/images/plant/南瓜/1.png b/catalogue/source/images/plant/南瓜/1.png new file mode 100644 index 0000000..ef8d7a0 Binary files /dev/null and b/catalogue/source/images/plant/南瓜/1.png differ diff --git a/catalogue/source/images/plant/南瓜/2.png b/catalogue/source/images/plant/南瓜/2.png new file mode 100644 index 0000000..452b604 Binary files /dev/null and b/catalogue/source/images/plant/南瓜/2.png differ diff --git a/catalogue/source/images/plant/南瓜/3.png b/catalogue/source/images/plant/南瓜/3.png new file mode 100644 index 0000000..0424ecd Binary files /dev/null and b/catalogue/source/images/plant/南瓜/3.png differ diff --git a/catalogue/source/images/plant/南瓜/4.png b/catalogue/source/images/plant/南瓜/4.png new file mode 100644 index 0000000..9393f6d Binary files /dev/null and b/catalogue/source/images/plant/南瓜/4.png differ diff --git a/catalogue/source/images/plant/南瓜/5.png b/catalogue/source/images/plant/南瓜/5.png new file mode 100644 index 0000000..ae3e356 Binary files /dev/null and b/catalogue/source/images/plant/南瓜/5.png differ diff --git a/catalogue/source/images/plant/南瓜/icon.png b/catalogue/source/images/plant/南瓜/icon.png new file mode 100644 index 0000000..25c3a94 Binary files /dev/null and b/catalogue/source/images/plant/南瓜/icon.png differ diff --git a/catalogue/source/images/plant/双玉兰/1.png b/catalogue/source/images/plant/双玉兰/1.png new file mode 100644 index 0000000..0aa9045 Binary files /dev/null and b/catalogue/source/images/plant/双玉兰/1.png differ diff --git a/catalogue/source/images/plant/双玉兰/2.png b/catalogue/source/images/plant/双玉兰/2.png new file mode 100644 index 0000000..214922f Binary files /dev/null and b/catalogue/source/images/plant/双玉兰/2.png differ diff --git a/catalogue/source/images/plant/双玉兰/3.png b/catalogue/source/images/plant/双玉兰/3.png new file mode 100644 index 0000000..c8d7729 Binary files /dev/null and b/catalogue/source/images/plant/双玉兰/3.png differ diff --git a/catalogue/source/images/plant/双玉兰/4.png b/catalogue/source/images/plant/双玉兰/4.png new file mode 100644 index 0000000..dcc2b8d Binary files /dev/null and b/catalogue/source/images/plant/双玉兰/4.png differ diff --git a/catalogue/source/images/plant/双玉兰/5.png b/catalogue/source/images/plant/双玉兰/5.png new file mode 100644 index 0000000..3410590 Binary files /dev/null and b/catalogue/source/images/plant/双玉兰/5.png differ diff --git a/catalogue/source/images/plant/双玉兰/icon.png b/catalogue/source/images/plant/双玉兰/icon.png new file mode 100644 index 0000000..a2823ae Binary files /dev/null and b/catalogue/source/images/plant/双玉兰/icon.png differ diff --git a/catalogue/source/images/plant/可可豆/1.png b/catalogue/source/images/plant/可可豆/1.png new file mode 100644 index 0000000..1627f13 Binary files /dev/null and b/catalogue/source/images/plant/可可豆/1.png differ diff --git a/catalogue/source/images/plant/可可豆/2.png b/catalogue/source/images/plant/可可豆/2.png new file mode 100644 index 0000000..3d99ce5 Binary files /dev/null and b/catalogue/source/images/plant/可可豆/2.png differ diff --git a/catalogue/source/images/plant/可可豆/3.png b/catalogue/source/images/plant/可可豆/3.png new file mode 100644 index 0000000..f56adca Binary files /dev/null and b/catalogue/source/images/plant/可可豆/3.png differ diff --git a/catalogue/source/images/plant/可可豆/4.png b/catalogue/source/images/plant/可可豆/4.png new file mode 100644 index 0000000..87910b4 Binary files /dev/null and b/catalogue/source/images/plant/可可豆/4.png differ diff --git a/catalogue/source/images/plant/可可豆/5.png b/catalogue/source/images/plant/可可豆/5.png new file mode 100644 index 0000000..ad2edb7 Binary files /dev/null and b/catalogue/source/images/plant/可可豆/5.png differ diff --git a/catalogue/source/images/plant/可可豆/icon.png b/catalogue/source/images/plant/可可豆/icon.png new file mode 100644 index 0000000..7f16cad Binary files /dev/null and b/catalogue/source/images/plant/可可豆/icon.png differ diff --git a/catalogue/source/images/plant/哈密瓜/1.png b/catalogue/source/images/plant/哈密瓜/1.png new file mode 100644 index 0000000..f860837 Binary files /dev/null and b/catalogue/source/images/plant/哈密瓜/1.png differ diff --git a/catalogue/source/images/plant/哈密瓜/2.png b/catalogue/source/images/plant/哈密瓜/2.png new file mode 100644 index 0000000..6fb68fb Binary files /dev/null and b/catalogue/source/images/plant/哈密瓜/2.png differ diff --git a/catalogue/source/images/plant/哈密瓜/3.png b/catalogue/source/images/plant/哈密瓜/3.png new file mode 100644 index 0000000..abc0ec7 Binary files /dev/null and b/catalogue/source/images/plant/哈密瓜/3.png differ diff --git a/catalogue/source/images/plant/哈密瓜/4.png b/catalogue/source/images/plant/哈密瓜/4.png new file mode 100644 index 0000000..c81e0ea Binary files /dev/null and b/catalogue/source/images/plant/哈密瓜/4.png differ diff --git a/catalogue/source/images/plant/哈密瓜/5.png b/catalogue/source/images/plant/哈密瓜/5.png new file mode 100644 index 0000000..de84adf Binary files /dev/null and b/catalogue/source/images/plant/哈密瓜/5.png differ diff --git a/catalogue/source/images/plant/哈密瓜/icon.png b/catalogue/source/images/plant/哈密瓜/icon.png new file mode 100644 index 0000000..1c6a3f9 Binary files /dev/null and b/catalogue/source/images/plant/哈密瓜/icon.png differ diff --git a/catalogue/source/images/plant/园艺世/1.png b/catalogue/source/images/plant/园艺世/1.png new file mode 100644 index 0000000..9b88efa Binary files /dev/null and b/catalogue/source/images/plant/园艺世/1.png differ diff --git a/catalogue/source/images/plant/园艺世/2.png b/catalogue/source/images/plant/园艺世/2.png new file mode 100644 index 0000000..9770149 Binary files /dev/null and b/catalogue/source/images/plant/园艺世/2.png differ diff --git a/catalogue/source/images/plant/园艺世/3.png b/catalogue/source/images/plant/园艺世/3.png new file mode 100644 index 0000000..af474c3 Binary files /dev/null and b/catalogue/source/images/plant/园艺世/3.png differ diff --git a/catalogue/source/images/plant/园艺世/4.png b/catalogue/source/images/plant/园艺世/4.png new file mode 100644 index 0000000..cc1943e Binary files /dev/null and b/catalogue/source/images/plant/园艺世/4.png differ diff --git a/catalogue/source/images/plant/园艺世/5.png b/catalogue/source/images/plant/园艺世/5.png new file mode 100644 index 0000000..b6fa942 Binary files /dev/null and b/catalogue/source/images/plant/园艺世/5.png differ diff --git a/catalogue/source/images/plant/园艺世/icon.png b/catalogue/source/images/plant/园艺世/icon.png new file mode 100644 index 0000000..e7990d8 Binary files /dev/null and b/catalogue/source/images/plant/园艺世/icon.png differ diff --git a/catalogue/source/images/plant/土豆/1.png b/catalogue/source/images/plant/土豆/1.png new file mode 100644 index 0000000..9a24c8c Binary files /dev/null and b/catalogue/source/images/plant/土豆/1.png differ diff --git a/catalogue/source/images/plant/土豆/2.png b/catalogue/source/images/plant/土豆/2.png new file mode 100644 index 0000000..587867c Binary files /dev/null and b/catalogue/source/images/plant/土豆/2.png differ diff --git a/catalogue/source/images/plant/土豆/3.png b/catalogue/source/images/plant/土豆/3.png new file mode 100644 index 0000000..867b55c Binary files /dev/null and b/catalogue/source/images/plant/土豆/3.png differ diff --git a/catalogue/source/images/plant/土豆/4.png b/catalogue/source/images/plant/土豆/4.png new file mode 100644 index 0000000..e3e4ed7 Binary files /dev/null and b/catalogue/source/images/plant/土豆/4.png differ diff --git a/catalogue/source/images/plant/土豆/5.png b/catalogue/source/images/plant/土豆/5.png new file mode 100644 index 0000000..a51a9f7 Binary files /dev/null and b/catalogue/source/images/plant/土豆/5.png differ diff --git a/catalogue/source/images/plant/土豆/icon.png b/catalogue/source/images/plant/土豆/icon.png new file mode 100644 index 0000000..40bfbae Binary files /dev/null and b/catalogue/source/images/plant/土豆/icon.png differ diff --git a/catalogue/source/images/plant/大白菜/1.png b/catalogue/source/images/plant/大白菜/1.png new file mode 100644 index 0000000..651ae57 Binary files /dev/null and b/catalogue/source/images/plant/大白菜/1.png differ diff --git a/catalogue/source/images/plant/大白菜/2.png b/catalogue/source/images/plant/大白菜/2.png new file mode 100644 index 0000000..cf4936e Binary files /dev/null and b/catalogue/source/images/plant/大白菜/2.png differ diff --git a/catalogue/source/images/plant/大白菜/3.png b/catalogue/source/images/plant/大白菜/3.png new file mode 100644 index 0000000..a649d85 Binary files /dev/null and b/catalogue/source/images/plant/大白菜/3.png differ diff --git a/catalogue/source/images/plant/大白菜/4.png b/catalogue/source/images/plant/大白菜/4.png new file mode 100644 index 0000000..64a011f Binary files /dev/null and b/catalogue/source/images/plant/大白菜/4.png differ diff --git a/catalogue/source/images/plant/大白菜/5.png b/catalogue/source/images/plant/大白菜/5.png new file mode 100644 index 0000000..9245a8a Binary files /dev/null and b/catalogue/source/images/plant/大白菜/5.png differ diff --git a/catalogue/source/images/plant/大白菜/icon.png b/catalogue/source/images/plant/大白菜/icon.png new file mode 100644 index 0000000..ff1fa65 Binary files /dev/null and b/catalogue/source/images/plant/大白菜/icon.png differ diff --git a/catalogue/source/images/plant/大蒜/1.png b/catalogue/source/images/plant/大蒜/1.png new file mode 100644 index 0000000..806cf3a Binary files /dev/null and b/catalogue/source/images/plant/大蒜/1.png differ diff --git a/catalogue/source/images/plant/大蒜/2.png b/catalogue/source/images/plant/大蒜/2.png new file mode 100644 index 0000000..fe4b800 Binary files /dev/null and b/catalogue/source/images/plant/大蒜/2.png differ diff --git a/catalogue/source/images/plant/大蒜/3.png b/catalogue/source/images/plant/大蒜/3.png new file mode 100644 index 0000000..ad56798 Binary files /dev/null and b/catalogue/source/images/plant/大蒜/3.png differ diff --git a/catalogue/source/images/plant/大蒜/4.png b/catalogue/source/images/plant/大蒜/4.png new file mode 100644 index 0000000..be0607c Binary files /dev/null and b/catalogue/source/images/plant/大蒜/4.png differ diff --git a/catalogue/source/images/plant/大蒜/5.png b/catalogue/source/images/plant/大蒜/5.png new file mode 100644 index 0000000..9188b12 Binary files /dev/null and b/catalogue/source/images/plant/大蒜/5.png differ diff --git a/catalogue/source/images/plant/大蒜/icon.png b/catalogue/source/images/plant/大蒜/icon.png new file mode 100644 index 0000000..8bf3c4d Binary files /dev/null and b/catalogue/source/images/plant/大蒜/icon.png differ diff --git a/catalogue/source/images/plant/富贵竹/1.png b/catalogue/source/images/plant/富贵竹/1.png new file mode 100644 index 0000000..8b0d3eb Binary files /dev/null and b/catalogue/source/images/plant/富贵竹/1.png differ diff --git a/catalogue/source/images/plant/富贵竹/2.png b/catalogue/source/images/plant/富贵竹/2.png new file mode 100644 index 0000000..e1452ae Binary files /dev/null and b/catalogue/source/images/plant/富贵竹/2.png differ diff --git a/catalogue/source/images/plant/富贵竹/3.png b/catalogue/source/images/plant/富贵竹/3.png new file mode 100644 index 0000000..ea9fbf3 Binary files /dev/null and b/catalogue/source/images/plant/富贵竹/3.png differ diff --git a/catalogue/source/images/plant/富贵竹/4.png b/catalogue/source/images/plant/富贵竹/4.png new file mode 100644 index 0000000..c9aad89 Binary files /dev/null and b/catalogue/source/images/plant/富贵竹/4.png differ diff --git a/catalogue/source/images/plant/富贵竹/5.png b/catalogue/source/images/plant/富贵竹/5.png new file mode 100644 index 0000000..81e8c73 Binary files /dev/null and b/catalogue/source/images/plant/富贵竹/5.png differ diff --git a/catalogue/source/images/plant/富贵竹/icon.png b/catalogue/source/images/plant/富贵竹/icon.png new file mode 100644 index 0000000..8a9721c Binary files /dev/null and b/catalogue/source/images/plant/富贵竹/icon.png differ diff --git a/catalogue/source/images/plant/小白菜/1.png b/catalogue/source/images/plant/小白菜/1.png new file mode 100644 index 0000000..0013afc Binary files /dev/null and b/catalogue/source/images/plant/小白菜/1.png differ diff --git a/catalogue/source/images/plant/小白菜/2.png b/catalogue/source/images/plant/小白菜/2.png new file mode 100644 index 0000000..c638121 Binary files /dev/null and b/catalogue/source/images/plant/小白菜/2.png differ diff --git a/catalogue/source/images/plant/小白菜/3.png b/catalogue/source/images/plant/小白菜/3.png new file mode 100644 index 0000000..5dd98cb Binary files /dev/null and b/catalogue/source/images/plant/小白菜/3.png differ diff --git a/catalogue/source/images/plant/小白菜/4.png b/catalogue/source/images/plant/小白菜/4.png new file mode 100644 index 0000000..3d68789 Binary files /dev/null and b/catalogue/source/images/plant/小白菜/4.png differ diff --git a/catalogue/source/images/plant/小白菜/icon.png b/catalogue/source/images/plant/小白菜/icon.png new file mode 100644 index 0000000..d9bdab1 Binary files /dev/null and b/catalogue/source/images/plant/小白菜/icon.png differ diff --git a/catalogue/source/images/plant/小麦/1.png b/catalogue/source/images/plant/小麦/1.png new file mode 100644 index 0000000..1ca3cd6 Binary files /dev/null and b/catalogue/source/images/plant/小麦/1.png differ diff --git a/catalogue/source/images/plant/小麦/2.png b/catalogue/source/images/plant/小麦/2.png new file mode 100644 index 0000000..d941c69 Binary files /dev/null and b/catalogue/source/images/plant/小麦/2.png differ diff --git a/catalogue/source/images/plant/小麦/3.png b/catalogue/source/images/plant/小麦/3.png new file mode 100644 index 0000000..bb81287 Binary files /dev/null and b/catalogue/source/images/plant/小麦/3.png differ diff --git a/catalogue/source/images/plant/小麦/4.png b/catalogue/source/images/plant/小麦/4.png new file mode 100644 index 0000000..82973e5 Binary files /dev/null and b/catalogue/source/images/plant/小麦/4.png differ diff --git a/catalogue/source/images/plant/小麦/5.png b/catalogue/source/images/plant/小麦/5.png new file mode 100644 index 0000000..47b16c9 Binary files /dev/null and b/catalogue/source/images/plant/小麦/5.png differ diff --git a/catalogue/source/images/plant/小麦/icon.png b/catalogue/source/images/plant/小麦/icon.png new file mode 100644 index 0000000..ab60a3d Binary files /dev/null and b/catalogue/source/images/plant/小麦/icon.png differ diff --git a/catalogue/source/images/plant/山竹/1.png b/catalogue/source/images/plant/山竹/1.png new file mode 100644 index 0000000..99ca5e4 Binary files /dev/null and b/catalogue/source/images/plant/山竹/1.png differ diff --git a/catalogue/source/images/plant/山竹/2.png b/catalogue/source/images/plant/山竹/2.png new file mode 100644 index 0000000..0f4e219 Binary files /dev/null and b/catalogue/source/images/plant/山竹/2.png differ diff --git a/catalogue/source/images/plant/山竹/3.png b/catalogue/source/images/plant/山竹/3.png new file mode 100644 index 0000000..a742f91 Binary files /dev/null and b/catalogue/source/images/plant/山竹/3.png differ diff --git a/catalogue/source/images/plant/山竹/4.png b/catalogue/source/images/plant/山竹/4.png new file mode 100644 index 0000000..14f17f3 Binary files /dev/null and b/catalogue/source/images/plant/山竹/4.png differ diff --git a/catalogue/source/images/plant/山竹/5.png b/catalogue/source/images/plant/山竹/5.png new file mode 100644 index 0000000..dde13bc Binary files /dev/null and b/catalogue/source/images/plant/山竹/5.png differ diff --git a/catalogue/source/images/plant/山竹/icon.png b/catalogue/source/images/plant/山竹/icon.png new file mode 100644 index 0000000..53f2f1e Binary files /dev/null and b/catalogue/source/images/plant/山竹/icon.png differ diff --git a/catalogue/source/images/plant/无花果/1.png b/catalogue/source/images/plant/无花果/1.png new file mode 100644 index 0000000..aa09740 Binary files /dev/null and b/catalogue/source/images/plant/无花果/1.png differ diff --git a/catalogue/source/images/plant/无花果/2.png b/catalogue/source/images/plant/无花果/2.png new file mode 100644 index 0000000..9037833 Binary files /dev/null and b/catalogue/source/images/plant/无花果/2.png differ diff --git a/catalogue/source/images/plant/无花果/3.png b/catalogue/source/images/plant/无花果/3.png new file mode 100644 index 0000000..9daf6f8 Binary files /dev/null and b/catalogue/source/images/plant/无花果/3.png differ diff --git a/catalogue/source/images/plant/无花果/4.png b/catalogue/source/images/plant/无花果/4.png new file mode 100644 index 0000000..c202d39 Binary files /dev/null and b/catalogue/source/images/plant/无花果/4.png differ diff --git a/catalogue/source/images/plant/无花果/5.png b/catalogue/source/images/plant/无花果/5.png new file mode 100644 index 0000000..0416c74 Binary files /dev/null and b/catalogue/source/images/plant/无花果/5.png differ diff --git a/catalogue/source/images/plant/无花果/icon.png b/catalogue/source/images/plant/无花果/icon.png new file mode 100644 index 0000000..eb7e6fc Binary files /dev/null and b/catalogue/source/images/plant/无花果/icon.png differ diff --git a/catalogue/source/images/plant/月柿/1.png b/catalogue/source/images/plant/月柿/1.png new file mode 100644 index 0000000..3d0b0a3 Binary files /dev/null and b/catalogue/source/images/plant/月柿/1.png differ diff --git a/catalogue/source/images/plant/月柿/2.png b/catalogue/source/images/plant/月柿/2.png new file mode 100644 index 0000000..bb59ca7 Binary files /dev/null and b/catalogue/source/images/plant/月柿/2.png differ diff --git a/catalogue/source/images/plant/月柿/3.png b/catalogue/source/images/plant/月柿/3.png new file mode 100644 index 0000000..fc1ab98 Binary files /dev/null and b/catalogue/source/images/plant/月柿/3.png differ diff --git a/catalogue/source/images/plant/月柿/4.png b/catalogue/source/images/plant/月柿/4.png new file mode 100644 index 0000000..867ac5a Binary files /dev/null and b/catalogue/source/images/plant/月柿/4.png differ diff --git a/catalogue/source/images/plant/月柿/5.png b/catalogue/source/images/plant/月柿/5.png new file mode 100644 index 0000000..7f1a0cf Binary files /dev/null and b/catalogue/source/images/plant/月柿/5.png differ diff --git a/catalogue/source/images/plant/月柿/icon.png b/catalogue/source/images/plant/月柿/icon.png new file mode 100644 index 0000000..d994504 Binary files /dev/null and b/catalogue/source/images/plant/月柿/icon.png differ diff --git a/catalogue/source/images/plant/木瓜/1.png b/catalogue/source/images/plant/木瓜/1.png new file mode 100644 index 0000000..aa6f8d1 Binary files /dev/null and b/catalogue/source/images/plant/木瓜/1.png differ diff --git a/catalogue/source/images/plant/木瓜/2.png b/catalogue/source/images/plant/木瓜/2.png new file mode 100644 index 0000000..59dbeda Binary files /dev/null and b/catalogue/source/images/plant/木瓜/2.png differ diff --git a/catalogue/source/images/plant/木瓜/3.png b/catalogue/source/images/plant/木瓜/3.png new file mode 100644 index 0000000..c8b3839 Binary files /dev/null and b/catalogue/source/images/plant/木瓜/3.png differ diff --git a/catalogue/source/images/plant/木瓜/4.png b/catalogue/source/images/plant/木瓜/4.png new file mode 100644 index 0000000..360aaaf Binary files /dev/null and b/catalogue/source/images/plant/木瓜/4.png differ diff --git a/catalogue/source/images/plant/木瓜/5.png b/catalogue/source/images/plant/木瓜/5.png new file mode 100644 index 0000000..a5b9c05 Binary files /dev/null and b/catalogue/source/images/plant/木瓜/5.png differ diff --git a/catalogue/source/images/plant/木瓜/icon.png b/catalogue/source/images/plant/木瓜/icon.png new file mode 100644 index 0000000..62f245d Binary files /dev/null and b/catalogue/source/images/plant/木瓜/icon.png differ diff --git a/catalogue/source/images/plant/李子/1.png b/catalogue/source/images/plant/李子/1.png new file mode 100644 index 0000000..44a7f74 Binary files /dev/null and b/catalogue/source/images/plant/李子/1.png differ diff --git a/catalogue/source/images/plant/李子/2.png b/catalogue/source/images/plant/李子/2.png new file mode 100644 index 0000000..aaa4ce5 Binary files /dev/null and b/catalogue/source/images/plant/李子/2.png differ diff --git a/catalogue/source/images/plant/李子/3.png b/catalogue/source/images/plant/李子/3.png new file mode 100644 index 0000000..ff86f1b Binary files /dev/null and b/catalogue/source/images/plant/李子/3.png differ diff --git a/catalogue/source/images/plant/李子/4.png b/catalogue/source/images/plant/李子/4.png new file mode 100644 index 0000000..ab3a742 Binary files /dev/null and b/catalogue/source/images/plant/李子/4.png differ diff --git a/catalogue/source/images/plant/李子/5.png b/catalogue/source/images/plant/李子/5.png new file mode 100644 index 0000000..b5c2753 Binary files /dev/null and b/catalogue/source/images/plant/李子/5.png differ diff --git a/catalogue/source/images/plant/李子/icon.png b/catalogue/source/images/plant/李子/icon.png new file mode 100644 index 0000000..1ae3e67 Binary files /dev/null and b/catalogue/source/images/plant/李子/icon.png differ diff --git a/catalogue/source/images/plant/杏子/1.png b/catalogue/source/images/plant/杏子/1.png new file mode 100644 index 0000000..4e426dd Binary files /dev/null and b/catalogue/source/images/plant/杏子/1.png differ diff --git a/catalogue/source/images/plant/杏子/2.png b/catalogue/source/images/plant/杏子/2.png new file mode 100644 index 0000000..78fe0f3 Binary files /dev/null and b/catalogue/source/images/plant/杏子/2.png differ diff --git a/catalogue/source/images/plant/杏子/3.png b/catalogue/source/images/plant/杏子/3.png new file mode 100644 index 0000000..4f69d17 Binary files /dev/null and b/catalogue/source/images/plant/杏子/3.png differ diff --git a/catalogue/source/images/plant/杏子/4.png b/catalogue/source/images/plant/杏子/4.png new file mode 100644 index 0000000..b87a5c0 Binary files /dev/null and b/catalogue/source/images/plant/杏子/4.png differ diff --git a/catalogue/source/images/plant/杏子/5.png b/catalogue/source/images/plant/杏子/5.png new file mode 100644 index 0000000..0a63c34 Binary files /dev/null and b/catalogue/source/images/plant/杏子/5.png differ diff --git a/catalogue/source/images/plant/杏子/icon.png b/catalogue/source/images/plant/杏子/icon.png new file mode 100644 index 0000000..2aa2ade Binary files /dev/null and b/catalogue/source/images/plant/杏子/icon.png differ diff --git a/catalogue/source/images/plant/杨桃/1.png b/catalogue/source/images/plant/杨桃/1.png new file mode 100644 index 0000000..048546c Binary files /dev/null and b/catalogue/source/images/plant/杨桃/1.png differ diff --git a/catalogue/source/images/plant/杨桃/2.png b/catalogue/source/images/plant/杨桃/2.png new file mode 100644 index 0000000..5159dc9 Binary files /dev/null and b/catalogue/source/images/plant/杨桃/2.png differ diff --git a/catalogue/source/images/plant/杨桃/3.png b/catalogue/source/images/plant/杨桃/3.png new file mode 100644 index 0000000..14b4b68 Binary files /dev/null and b/catalogue/source/images/plant/杨桃/3.png differ diff --git a/catalogue/source/images/plant/杨桃/4.png b/catalogue/source/images/plant/杨桃/4.png new file mode 100644 index 0000000..834bf66 Binary files /dev/null and b/catalogue/source/images/plant/杨桃/4.png differ diff --git a/catalogue/source/images/plant/杨桃/5.png b/catalogue/source/images/plant/杨桃/5.png new file mode 100644 index 0000000..d0a88da Binary files /dev/null and b/catalogue/source/images/plant/杨桃/5.png differ diff --git a/catalogue/source/images/plant/杨桃/icon.png b/catalogue/source/images/plant/杨桃/icon.png new file mode 100644 index 0000000..43bb6ee Binary files /dev/null and b/catalogue/source/images/plant/杨桃/icon.png differ diff --git a/catalogue/source/images/plant/杨梅/1.png b/catalogue/source/images/plant/杨梅/1.png new file mode 100644 index 0000000..16b90dc Binary files /dev/null and b/catalogue/source/images/plant/杨梅/1.png differ diff --git a/catalogue/source/images/plant/杨梅/2.png b/catalogue/source/images/plant/杨梅/2.png new file mode 100644 index 0000000..8b4ea37 Binary files /dev/null and b/catalogue/source/images/plant/杨梅/2.png differ diff --git a/catalogue/source/images/plant/杨梅/3.png b/catalogue/source/images/plant/杨梅/3.png new file mode 100644 index 0000000..ed57044 Binary files /dev/null and b/catalogue/source/images/plant/杨梅/3.png differ diff --git a/catalogue/source/images/plant/杨梅/4.png b/catalogue/source/images/plant/杨梅/4.png new file mode 100644 index 0000000..821e02e Binary files /dev/null and b/catalogue/source/images/plant/杨梅/4.png differ diff --git a/catalogue/source/images/plant/杨梅/5.png b/catalogue/source/images/plant/杨梅/5.png new file mode 100644 index 0000000..3f4ee0a Binary files /dev/null and b/catalogue/source/images/plant/杨梅/5.png differ diff --git a/catalogue/source/images/plant/杨梅/icon.png b/catalogue/source/images/plant/杨梅/icon.png new file mode 100644 index 0000000..2c1f8cd Binary files /dev/null and b/catalogue/source/images/plant/杨梅/icon.png differ diff --git a/catalogue/source/images/plant/枇杷/1.png b/catalogue/source/images/plant/枇杷/1.png new file mode 100644 index 0000000..1f73abb Binary files /dev/null and b/catalogue/source/images/plant/枇杷/1.png differ diff --git a/catalogue/source/images/plant/枇杷/2.png b/catalogue/source/images/plant/枇杷/2.png new file mode 100644 index 0000000..23fa9d4 Binary files /dev/null and b/catalogue/source/images/plant/枇杷/2.png differ diff --git a/catalogue/source/images/plant/枇杷/3.png b/catalogue/source/images/plant/枇杷/3.png new file mode 100644 index 0000000..a106d8a Binary files /dev/null and b/catalogue/source/images/plant/枇杷/3.png differ diff --git a/catalogue/source/images/plant/枇杷/4.png b/catalogue/source/images/plant/枇杷/4.png new file mode 100644 index 0000000..cf3ba3b Binary files /dev/null and b/catalogue/source/images/plant/枇杷/4.png differ diff --git a/catalogue/source/images/plant/枇杷/5.png b/catalogue/source/images/plant/枇杷/5.png new file mode 100644 index 0000000..24dd7db Binary files /dev/null and b/catalogue/source/images/plant/枇杷/5.png differ diff --git a/catalogue/source/images/plant/枇杷/icon.png b/catalogue/source/images/plant/枇杷/icon.png new file mode 100644 index 0000000..d000c5c Binary files /dev/null and b/catalogue/source/images/plant/枇杷/icon.png differ diff --git a/catalogue/source/images/plant/柚子/1.png b/catalogue/source/images/plant/柚子/1.png new file mode 100644 index 0000000..0de92fe Binary files /dev/null and b/catalogue/source/images/plant/柚子/1.png differ diff --git a/catalogue/source/images/plant/柚子/2.png b/catalogue/source/images/plant/柚子/2.png new file mode 100644 index 0000000..013dd75 Binary files /dev/null and b/catalogue/source/images/plant/柚子/2.png differ diff --git a/catalogue/source/images/plant/柚子/3.png b/catalogue/source/images/plant/柚子/3.png new file mode 100644 index 0000000..4d33b12 Binary files /dev/null and b/catalogue/source/images/plant/柚子/3.png differ diff --git a/catalogue/source/images/plant/柚子/4.png b/catalogue/source/images/plant/柚子/4.png new file mode 100644 index 0000000..283d68b Binary files /dev/null and b/catalogue/source/images/plant/柚子/4.png differ diff --git a/catalogue/source/images/plant/柚子/5.png b/catalogue/source/images/plant/柚子/5.png new file mode 100644 index 0000000..ab5cb5f Binary files /dev/null and b/catalogue/source/images/plant/柚子/5.png differ diff --git a/catalogue/source/images/plant/柚子/icon.png b/catalogue/source/images/plant/柚子/icon.png new file mode 100644 index 0000000..f74f0fd Binary files /dev/null and b/catalogue/source/images/plant/柚子/icon.png differ diff --git a/catalogue/source/images/plant/柠檬/1.png b/catalogue/source/images/plant/柠檬/1.png new file mode 100644 index 0000000..deb3a63 Binary files /dev/null and b/catalogue/source/images/plant/柠檬/1.png differ diff --git a/catalogue/source/images/plant/柠檬/2.png b/catalogue/source/images/plant/柠檬/2.png new file mode 100644 index 0000000..af0961b Binary files /dev/null and b/catalogue/source/images/plant/柠檬/2.png differ diff --git a/catalogue/source/images/plant/柠檬/3.png b/catalogue/source/images/plant/柠檬/3.png new file mode 100644 index 0000000..a907fa5 Binary files /dev/null and b/catalogue/source/images/plant/柠檬/3.png differ diff --git a/catalogue/source/images/plant/柠檬/4.png b/catalogue/source/images/plant/柠檬/4.png new file mode 100644 index 0000000..a1042a9 Binary files /dev/null and b/catalogue/source/images/plant/柠檬/4.png differ diff --git a/catalogue/source/images/plant/柠檬/5.png b/catalogue/source/images/plant/柠檬/5.png new file mode 100644 index 0000000..19ce4d4 Binary files /dev/null and b/catalogue/source/images/plant/柠檬/5.png differ diff --git a/catalogue/source/images/plant/柠檬/icon.png b/catalogue/source/images/plant/柠檬/icon.png new file mode 100644 index 0000000..7852f8c Binary files /dev/null and b/catalogue/source/images/plant/柠檬/icon.png differ diff --git a/catalogue/source/images/plant/栗子/1.png b/catalogue/source/images/plant/栗子/1.png new file mode 100644 index 0000000..efed9da Binary files /dev/null and b/catalogue/source/images/plant/栗子/1.png differ diff --git a/catalogue/source/images/plant/栗子/2.png b/catalogue/source/images/plant/栗子/2.png new file mode 100644 index 0000000..98f5486 Binary files /dev/null and b/catalogue/source/images/plant/栗子/2.png differ diff --git a/catalogue/source/images/plant/栗子/3.png b/catalogue/source/images/plant/栗子/3.png new file mode 100644 index 0000000..c95e4d7 Binary files /dev/null and b/catalogue/source/images/plant/栗子/3.png differ diff --git a/catalogue/source/images/plant/栗子/4.png b/catalogue/source/images/plant/栗子/4.png new file mode 100644 index 0000000..7d9c1d1 Binary files /dev/null and b/catalogue/source/images/plant/栗子/4.png differ diff --git a/catalogue/source/images/plant/栗子/5.png b/catalogue/source/images/plant/栗子/5.png new file mode 100644 index 0000000..78b3e96 Binary files /dev/null and b/catalogue/source/images/plant/栗子/5.png differ diff --git a/catalogue/source/images/plant/栗子/icon.png b/catalogue/source/images/plant/栗子/icon.png new file mode 100644 index 0000000..67b2681 Binary files /dev/null and b/catalogue/source/images/plant/栗子/icon.png differ diff --git a/catalogue/source/images/plant/核桃/1.png b/catalogue/source/images/plant/核桃/1.png new file mode 100644 index 0000000..46e6239 Binary files /dev/null and b/catalogue/source/images/plant/核桃/1.png differ diff --git a/catalogue/source/images/plant/核桃/2.png b/catalogue/source/images/plant/核桃/2.png new file mode 100644 index 0000000..e677dc9 Binary files /dev/null and b/catalogue/source/images/plant/核桃/2.png differ diff --git a/catalogue/source/images/plant/核桃/3.png b/catalogue/source/images/plant/核桃/3.png new file mode 100644 index 0000000..e6c0db4 Binary files /dev/null and b/catalogue/source/images/plant/核桃/3.png differ diff --git a/catalogue/source/images/plant/核桃/4.png b/catalogue/source/images/plant/核桃/4.png new file mode 100644 index 0000000..bff8d97 Binary files /dev/null and b/catalogue/source/images/plant/核桃/4.png differ diff --git a/catalogue/source/images/plant/核桃/5.png b/catalogue/source/images/plant/核桃/5.png new file mode 100644 index 0000000..4235eb7 Binary files /dev/null and b/catalogue/source/images/plant/核桃/5.png differ diff --git a/catalogue/source/images/plant/核桃/icon.png b/catalogue/source/images/plant/核桃/icon.png new file mode 100644 index 0000000..d6fcea1 Binary files /dev/null and b/catalogue/source/images/plant/核桃/icon.png differ diff --git a/catalogue/source/images/plant/桂圆/1.png b/catalogue/source/images/plant/桂圆/1.png new file mode 100644 index 0000000..8c59958 Binary files /dev/null and b/catalogue/source/images/plant/桂圆/1.png differ diff --git a/catalogue/source/images/plant/桂圆/2.png b/catalogue/source/images/plant/桂圆/2.png new file mode 100644 index 0000000..2c78345 Binary files /dev/null and b/catalogue/source/images/plant/桂圆/2.png differ diff --git a/catalogue/source/images/plant/桂圆/3.png b/catalogue/source/images/plant/桂圆/3.png new file mode 100644 index 0000000..d983ee7 Binary files /dev/null and b/catalogue/source/images/plant/桂圆/3.png differ diff --git a/catalogue/source/images/plant/桂圆/4.png b/catalogue/source/images/plant/桂圆/4.png new file mode 100644 index 0000000..d3e1c9e Binary files /dev/null and b/catalogue/source/images/plant/桂圆/4.png differ diff --git a/catalogue/source/images/plant/桂圆/5.png b/catalogue/source/images/plant/桂圆/5.png new file mode 100644 index 0000000..9916272 Binary files /dev/null and b/catalogue/source/images/plant/桂圆/5.png differ diff --git a/catalogue/source/images/plant/桂圆/icon.png b/catalogue/source/images/plant/桂圆/icon.png new file mode 100644 index 0000000..efe52fe Binary files /dev/null and b/catalogue/source/images/plant/桂圆/icon.png differ diff --git a/catalogue/source/images/plant/桃子/1.png b/catalogue/source/images/plant/桃子/1.png new file mode 100644 index 0000000..2b38d63 Binary files /dev/null and b/catalogue/source/images/plant/桃子/1.png differ diff --git a/catalogue/source/images/plant/桃子/2.png b/catalogue/source/images/plant/桃子/2.png new file mode 100644 index 0000000..972908f Binary files /dev/null and b/catalogue/source/images/plant/桃子/2.png differ diff --git a/catalogue/source/images/plant/桃子/3.png b/catalogue/source/images/plant/桃子/3.png new file mode 100644 index 0000000..abf6eeb Binary files /dev/null and b/catalogue/source/images/plant/桃子/3.png differ diff --git a/catalogue/source/images/plant/桃子/4.png b/catalogue/source/images/plant/桃子/4.png new file mode 100644 index 0000000..c476f01 Binary files /dev/null and b/catalogue/source/images/plant/桃子/4.png differ diff --git a/catalogue/source/images/plant/桃子/5.png b/catalogue/source/images/plant/桃子/5.png new file mode 100644 index 0000000..0ac0938 Binary files /dev/null and b/catalogue/source/images/plant/桃子/5.png differ diff --git a/catalogue/source/images/plant/桃子/icon.png b/catalogue/source/images/plant/桃子/icon.png new file mode 100644 index 0000000..598e779 Binary files /dev/null and b/catalogue/source/images/plant/桃子/icon.png differ diff --git a/catalogue/source/images/plant/桑葚/1.png b/catalogue/source/images/plant/桑葚/1.png new file mode 100644 index 0000000..8f0f05b Binary files /dev/null and b/catalogue/source/images/plant/桑葚/1.png differ diff --git a/catalogue/source/images/plant/桑葚/2.png b/catalogue/source/images/plant/桑葚/2.png new file mode 100644 index 0000000..c9b37cd Binary files /dev/null and b/catalogue/source/images/plant/桑葚/2.png differ diff --git a/catalogue/source/images/plant/桑葚/3.png b/catalogue/source/images/plant/桑葚/3.png new file mode 100644 index 0000000..7f53e94 Binary files /dev/null and b/catalogue/source/images/plant/桑葚/3.png differ diff --git a/catalogue/source/images/plant/桑葚/4.png b/catalogue/source/images/plant/桑葚/4.png new file mode 100644 index 0000000..b9cd892 Binary files /dev/null and b/catalogue/source/images/plant/桑葚/4.png differ diff --git a/catalogue/source/images/plant/桑葚/5.png b/catalogue/source/images/plant/桑葚/5.png new file mode 100644 index 0000000..2ffae21 Binary files /dev/null and b/catalogue/source/images/plant/桑葚/5.png differ diff --git a/catalogue/source/images/plant/桑葚/icon.png b/catalogue/source/images/plant/桑葚/icon.png new file mode 100644 index 0000000..acb61e9 Binary files /dev/null and b/catalogue/source/images/plant/桑葚/icon.png differ diff --git a/catalogue/source/images/plant/梨/1.png b/catalogue/source/images/plant/梨/1.png new file mode 100644 index 0000000..c31ec1d Binary files /dev/null and b/catalogue/source/images/plant/梨/1.png differ diff --git a/catalogue/source/images/plant/梨/2.png b/catalogue/source/images/plant/梨/2.png new file mode 100644 index 0000000..f869118 Binary files /dev/null and b/catalogue/source/images/plant/梨/2.png differ diff --git a/catalogue/source/images/plant/梨/3.png b/catalogue/source/images/plant/梨/3.png new file mode 100644 index 0000000..faa623d Binary files /dev/null and b/catalogue/source/images/plant/梨/3.png differ diff --git a/catalogue/source/images/plant/梨/4.png b/catalogue/source/images/plant/梨/4.png new file mode 100644 index 0000000..59b2cee Binary files /dev/null and b/catalogue/source/images/plant/梨/4.png differ diff --git a/catalogue/source/images/plant/梨/5.png b/catalogue/source/images/plant/梨/5.png new file mode 100644 index 0000000..b6c5fe2 Binary files /dev/null and b/catalogue/source/images/plant/梨/5.png differ diff --git a/catalogue/source/images/plant/梨/icon.png b/catalogue/source/images/plant/梨/icon.png new file mode 100644 index 0000000..b5de801 Binary files /dev/null and b/catalogue/source/images/plant/梨/icon.png differ diff --git a/catalogue/source/images/plant/椰子/1.png b/catalogue/source/images/plant/椰子/1.png new file mode 100644 index 0000000..921dee5 Binary files /dev/null and b/catalogue/source/images/plant/椰子/1.png differ diff --git a/catalogue/source/images/plant/椰子/2.png b/catalogue/source/images/plant/椰子/2.png new file mode 100644 index 0000000..5ec08d6 Binary files /dev/null and b/catalogue/source/images/plant/椰子/2.png differ diff --git a/catalogue/source/images/plant/椰子/3.png b/catalogue/source/images/plant/椰子/3.png new file mode 100644 index 0000000..ca9fbd4 Binary files /dev/null and b/catalogue/source/images/plant/椰子/3.png differ diff --git a/catalogue/source/images/plant/椰子/4.png b/catalogue/source/images/plant/椰子/4.png new file mode 100644 index 0000000..ffbded7 Binary files /dev/null and b/catalogue/source/images/plant/椰子/4.png differ diff --git a/catalogue/source/images/plant/椰子/5.png b/catalogue/source/images/plant/椰子/5.png new file mode 100644 index 0000000..0c377ce Binary files /dev/null and b/catalogue/source/images/plant/椰子/5.png differ diff --git a/catalogue/source/images/plant/椰子/icon.png b/catalogue/source/images/plant/椰子/icon.png new file mode 100644 index 0000000..c54bbbb Binary files /dev/null and b/catalogue/source/images/plant/椰子/icon.png differ diff --git a/catalogue/source/images/plant/榅桲/1.png b/catalogue/source/images/plant/榅桲/1.png new file mode 100644 index 0000000..b8c8c5e Binary files /dev/null and b/catalogue/source/images/plant/榅桲/1.png differ diff --git a/catalogue/source/images/plant/榅桲/2.png b/catalogue/source/images/plant/榅桲/2.png new file mode 100644 index 0000000..7b18d34 Binary files /dev/null and b/catalogue/source/images/plant/榅桲/2.png differ diff --git a/catalogue/source/images/plant/榅桲/3.png b/catalogue/source/images/plant/榅桲/3.png new file mode 100644 index 0000000..0892c90 Binary files /dev/null and b/catalogue/source/images/plant/榅桲/3.png differ diff --git a/catalogue/source/images/plant/榅桲/4.png b/catalogue/source/images/plant/榅桲/4.png new file mode 100644 index 0000000..f18b9ea Binary files /dev/null and b/catalogue/source/images/plant/榅桲/4.png differ diff --git a/catalogue/source/images/plant/榅桲/5.png b/catalogue/source/images/plant/榅桲/5.png new file mode 100644 index 0000000..570be3b Binary files /dev/null and b/catalogue/source/images/plant/榅桲/5.png differ diff --git a/catalogue/source/images/plant/榅桲/icon.png b/catalogue/source/images/plant/榅桲/icon.png new file mode 100644 index 0000000..1f0b2aa Binary files /dev/null and b/catalogue/source/images/plant/榅桲/icon.png differ diff --git a/catalogue/source/images/plant/榛子/1.png b/catalogue/source/images/plant/榛子/1.png new file mode 100644 index 0000000..b576097 Binary files /dev/null and b/catalogue/source/images/plant/榛子/1.png differ diff --git a/catalogue/source/images/plant/榛子/2.png b/catalogue/source/images/plant/榛子/2.png new file mode 100644 index 0000000..1d4ca4f Binary files /dev/null and b/catalogue/source/images/plant/榛子/2.png differ diff --git a/catalogue/source/images/plant/榛子/3.png b/catalogue/source/images/plant/榛子/3.png new file mode 100644 index 0000000..fd89a04 Binary files /dev/null and b/catalogue/source/images/plant/榛子/3.png differ diff --git a/catalogue/source/images/plant/榛子/4.png b/catalogue/source/images/plant/榛子/4.png new file mode 100644 index 0000000..f3d965d Binary files /dev/null and b/catalogue/source/images/plant/榛子/4.png differ diff --git a/catalogue/source/images/plant/榛子/5.png b/catalogue/source/images/plant/榛子/5.png new file mode 100644 index 0000000..afe7c5b Binary files /dev/null and b/catalogue/source/images/plant/榛子/5.png differ diff --git a/catalogue/source/images/plant/榛子/icon.png b/catalogue/source/images/plant/榛子/icon.png new file mode 100644 index 0000000..85ad3c4 Binary files /dev/null and b/catalogue/source/images/plant/榛子/icon.png differ diff --git a/catalogue/source/images/plant/榴莲/1.png b/catalogue/source/images/plant/榴莲/1.png new file mode 100644 index 0000000..a84c5ce Binary files /dev/null and b/catalogue/source/images/plant/榴莲/1.png differ diff --git a/catalogue/source/images/plant/榴莲/2.png b/catalogue/source/images/plant/榴莲/2.png new file mode 100644 index 0000000..1c009ed Binary files /dev/null and b/catalogue/source/images/plant/榴莲/2.png differ diff --git a/catalogue/source/images/plant/榴莲/3.png b/catalogue/source/images/plant/榴莲/3.png new file mode 100644 index 0000000..de07aee Binary files /dev/null and b/catalogue/source/images/plant/榴莲/3.png differ diff --git a/catalogue/source/images/plant/榴莲/4.png b/catalogue/source/images/plant/榴莲/4.png new file mode 100644 index 0000000..06e9288 Binary files /dev/null and b/catalogue/source/images/plant/榴莲/4.png differ diff --git a/catalogue/source/images/plant/榴莲/5.png b/catalogue/source/images/plant/榴莲/5.png new file mode 100644 index 0000000..1692fc3 Binary files /dev/null and b/catalogue/source/images/plant/榴莲/5.png differ diff --git a/catalogue/source/images/plant/榴莲/icon.png b/catalogue/source/images/plant/榴莲/icon.png new file mode 100644 index 0000000..5a2d678 Binary files /dev/null and b/catalogue/source/images/plant/榴莲/icon.png differ diff --git a/catalogue/source/images/plant/樱桃/1.png b/catalogue/source/images/plant/樱桃/1.png new file mode 100644 index 0000000..4b08792 Binary files /dev/null and b/catalogue/source/images/plant/樱桃/1.png differ diff --git a/catalogue/source/images/plant/樱桃/2.png b/catalogue/source/images/plant/樱桃/2.png new file mode 100644 index 0000000..044ac06 Binary files /dev/null and b/catalogue/source/images/plant/樱桃/2.png differ diff --git a/catalogue/source/images/plant/樱桃/3.png b/catalogue/source/images/plant/樱桃/3.png new file mode 100644 index 0000000..19e68ea Binary files /dev/null and b/catalogue/source/images/plant/樱桃/3.png differ diff --git a/catalogue/source/images/plant/樱桃/4.png b/catalogue/source/images/plant/樱桃/4.png new file mode 100644 index 0000000..5d3a996 Binary files /dev/null and b/catalogue/source/images/plant/樱桃/4.png differ diff --git a/catalogue/source/images/plant/樱桃/5.png b/catalogue/source/images/plant/樱桃/5.png new file mode 100644 index 0000000..0d90695 Binary files /dev/null and b/catalogue/source/images/plant/樱桃/5.png differ diff --git a/catalogue/source/images/plant/樱桃/icon.png b/catalogue/source/images/plant/樱桃/icon.png new file mode 100644 index 0000000..ba10028 Binary files /dev/null and b/catalogue/source/images/plant/樱桃/icon.png differ diff --git a/catalogue/source/images/plant/橄榄/1.png b/catalogue/source/images/plant/橄榄/1.png new file mode 100644 index 0000000..9265af1 Binary files /dev/null and b/catalogue/source/images/plant/橄榄/1.png differ diff --git a/catalogue/source/images/plant/橄榄/2.png b/catalogue/source/images/plant/橄榄/2.png new file mode 100644 index 0000000..70f5b95 Binary files /dev/null and b/catalogue/source/images/plant/橄榄/2.png differ diff --git a/catalogue/source/images/plant/橄榄/3.png b/catalogue/source/images/plant/橄榄/3.png new file mode 100644 index 0000000..04e2543 Binary files /dev/null and b/catalogue/source/images/plant/橄榄/3.png differ diff --git a/catalogue/source/images/plant/橄榄/4.png b/catalogue/source/images/plant/橄榄/4.png new file mode 100644 index 0000000..b4192ce Binary files /dev/null and b/catalogue/source/images/plant/橄榄/4.png differ diff --git a/catalogue/source/images/plant/橄榄/5.png b/catalogue/source/images/plant/橄榄/5.png new file mode 100644 index 0000000..f5cb6c9 Binary files /dev/null and b/catalogue/source/images/plant/橄榄/5.png differ diff --git a/catalogue/source/images/plant/橄榄/icon.png b/catalogue/source/images/plant/橄榄/icon.png new file mode 100644 index 0000000..5d395f0 Binary files /dev/null and b/catalogue/source/images/plant/橄榄/icon.png differ diff --git a/catalogue/source/images/plant/橙子/1.png b/catalogue/source/images/plant/橙子/1.png new file mode 100644 index 0000000..a444288 Binary files /dev/null and b/catalogue/source/images/plant/橙子/1.png differ diff --git a/catalogue/source/images/plant/橙子/2.png b/catalogue/source/images/plant/橙子/2.png new file mode 100644 index 0000000..f84d73f Binary files /dev/null and b/catalogue/source/images/plant/橙子/2.png differ diff --git a/catalogue/source/images/plant/橙子/3.png b/catalogue/source/images/plant/橙子/3.png new file mode 100644 index 0000000..3a1f926 Binary files /dev/null and b/catalogue/source/images/plant/橙子/3.png differ diff --git a/catalogue/source/images/plant/橙子/4.png b/catalogue/source/images/plant/橙子/4.png new file mode 100644 index 0000000..661ff6e Binary files /dev/null and b/catalogue/source/images/plant/橙子/4.png differ diff --git a/catalogue/source/images/plant/橙子/5.png b/catalogue/source/images/plant/橙子/5.png new file mode 100644 index 0000000..c37c566 Binary files /dev/null and b/catalogue/source/images/plant/橙子/5.png differ diff --git a/catalogue/source/images/plant/橙子/icon.png b/catalogue/source/images/plant/橙子/icon.png new file mode 100644 index 0000000..48bad24 Binary files /dev/null and b/catalogue/source/images/plant/橙子/icon.png differ diff --git a/catalogue/source/images/plant/水稻/1.png b/catalogue/source/images/plant/水稻/1.png new file mode 100644 index 0000000..3e4c81e Binary files /dev/null and b/catalogue/source/images/plant/水稻/1.png differ diff --git a/catalogue/source/images/plant/水稻/2.png b/catalogue/source/images/plant/水稻/2.png new file mode 100644 index 0000000..60f5139 Binary files /dev/null and b/catalogue/source/images/plant/水稻/2.png differ diff --git a/catalogue/source/images/plant/水稻/3.png b/catalogue/source/images/plant/水稻/3.png new file mode 100644 index 0000000..f7e4230 Binary files /dev/null and b/catalogue/source/images/plant/水稻/3.png differ diff --git a/catalogue/source/images/plant/水稻/4.png b/catalogue/source/images/plant/水稻/4.png new file mode 100644 index 0000000..d0185c0 Binary files /dev/null and b/catalogue/source/images/plant/水稻/4.png differ diff --git a/catalogue/source/images/plant/水稻/5.png b/catalogue/source/images/plant/水稻/5.png new file mode 100644 index 0000000..9f7f0c2 Binary files /dev/null and b/catalogue/source/images/plant/水稻/5.png differ diff --git a/catalogue/source/images/plant/水稻/icon.png b/catalogue/source/images/plant/水稻/icon.png new file mode 100644 index 0000000..51636b7 Binary files /dev/null and b/catalogue/source/images/plant/水稻/icon.png differ diff --git a/catalogue/source/images/plant/沙棘/1.png b/catalogue/source/images/plant/沙棘/1.png new file mode 100644 index 0000000..46b7791 Binary files /dev/null and b/catalogue/source/images/plant/沙棘/1.png differ diff --git a/catalogue/source/images/plant/沙棘/2.png b/catalogue/source/images/plant/沙棘/2.png new file mode 100644 index 0000000..0c91a60 Binary files /dev/null and b/catalogue/source/images/plant/沙棘/2.png differ diff --git a/catalogue/source/images/plant/沙棘/3.png b/catalogue/source/images/plant/沙棘/3.png new file mode 100644 index 0000000..26b7587 Binary files /dev/null and b/catalogue/source/images/plant/沙棘/3.png differ diff --git a/catalogue/source/images/plant/沙棘/4.png b/catalogue/source/images/plant/沙棘/4.png new file mode 100644 index 0000000..152709c Binary files /dev/null and b/catalogue/source/images/plant/沙棘/4.png differ diff --git a/catalogue/source/images/plant/沙棘/5.png b/catalogue/source/images/plant/沙棘/5.png new file mode 100644 index 0000000..786b678 Binary files /dev/null and b/catalogue/source/images/plant/沙棘/5.png differ diff --git a/catalogue/source/images/plant/沙棘/icon.png b/catalogue/source/images/plant/沙棘/icon.png new file mode 100644 index 0000000..67f8440 Binary files /dev/null and b/catalogue/source/images/plant/沙棘/icon.png differ diff --git a/catalogue/source/images/plant/油菜/1.png b/catalogue/source/images/plant/油菜/1.png new file mode 100644 index 0000000..b938d22 Binary files /dev/null and b/catalogue/source/images/plant/油菜/1.png differ diff --git a/catalogue/source/images/plant/油菜/2.png b/catalogue/source/images/plant/油菜/2.png new file mode 100644 index 0000000..1d85cae Binary files /dev/null and b/catalogue/source/images/plant/油菜/2.png differ diff --git a/catalogue/source/images/plant/油菜/3.png b/catalogue/source/images/plant/油菜/3.png new file mode 100644 index 0000000..9f3093b Binary files /dev/null and b/catalogue/source/images/plant/油菜/3.png differ diff --git a/catalogue/source/images/plant/油菜/4.png b/catalogue/source/images/plant/油菜/4.png new file mode 100644 index 0000000..d037f89 Binary files /dev/null and b/catalogue/source/images/plant/油菜/4.png differ diff --git a/catalogue/source/images/plant/油菜/icon.png b/catalogue/source/images/plant/油菜/icon.png new file mode 100644 index 0000000..ae3797a Binary files /dev/null and b/catalogue/source/images/plant/油菜/icon.png differ diff --git a/catalogue/source/images/plant/火龙果/1.png b/catalogue/source/images/plant/火龙果/1.png new file mode 100644 index 0000000..d39bcaa Binary files /dev/null and b/catalogue/source/images/plant/火龙果/1.png differ diff --git a/catalogue/source/images/plant/火龙果/2.png b/catalogue/source/images/plant/火龙果/2.png new file mode 100644 index 0000000..6ffa391 Binary files /dev/null and b/catalogue/source/images/plant/火龙果/2.png differ diff --git a/catalogue/source/images/plant/火龙果/3.png b/catalogue/source/images/plant/火龙果/3.png new file mode 100644 index 0000000..6bd5564 Binary files /dev/null and b/catalogue/source/images/plant/火龙果/3.png differ diff --git a/catalogue/source/images/plant/火龙果/4.png b/catalogue/source/images/plant/火龙果/4.png new file mode 100644 index 0000000..a2ce322 Binary files /dev/null and b/catalogue/source/images/plant/火龙果/4.png differ diff --git a/catalogue/source/images/plant/火龙果/5.png b/catalogue/source/images/plant/火龙果/5.png new file mode 100644 index 0000000..a9d97c7 Binary files /dev/null and b/catalogue/source/images/plant/火龙果/5.png differ diff --git a/catalogue/source/images/plant/火龙果/icon.png b/catalogue/source/images/plant/火龙果/icon.png new file mode 100644 index 0000000..f8b88f8 Binary files /dev/null and b/catalogue/source/images/plant/火龙果/icon.png differ diff --git a/catalogue/source/images/plant/灯笼果/1.png b/catalogue/source/images/plant/灯笼果/1.png new file mode 100644 index 0000000..df3028f Binary files /dev/null and b/catalogue/source/images/plant/灯笼果/1.png differ diff --git a/catalogue/source/images/plant/灯笼果/2.png b/catalogue/source/images/plant/灯笼果/2.png new file mode 100644 index 0000000..68f6a96 Binary files /dev/null and b/catalogue/source/images/plant/灯笼果/2.png differ diff --git a/catalogue/source/images/plant/灯笼果/3.png b/catalogue/source/images/plant/灯笼果/3.png new file mode 100644 index 0000000..d783bca Binary files /dev/null and b/catalogue/source/images/plant/灯笼果/3.png differ diff --git a/catalogue/source/images/plant/灯笼果/4.png b/catalogue/source/images/plant/灯笼果/4.png new file mode 100644 index 0000000..10eeb88 Binary files /dev/null and b/catalogue/source/images/plant/灯笼果/4.png differ diff --git a/catalogue/source/images/plant/灯笼果/5.png b/catalogue/source/images/plant/灯笼果/5.png new file mode 100644 index 0000000..82ef9bf Binary files /dev/null and b/catalogue/source/images/plant/灯笼果/5.png differ diff --git a/catalogue/source/images/plant/灯笼果/icon.png b/catalogue/source/images/plant/灯笼果/icon.png new file mode 100644 index 0000000..2db6d25 Binary files /dev/null and b/catalogue/source/images/plant/灯笼果/icon.png differ diff --git a/catalogue/source/images/plant/点地梅/1.png b/catalogue/source/images/plant/点地梅/1.png new file mode 100644 index 0000000..886c147 Binary files /dev/null and b/catalogue/source/images/plant/点地梅/1.png differ diff --git a/catalogue/source/images/plant/点地梅/2.png b/catalogue/source/images/plant/点地梅/2.png new file mode 100644 index 0000000..8797388 Binary files /dev/null and b/catalogue/source/images/plant/点地梅/2.png differ diff --git a/catalogue/source/images/plant/点地梅/3.png b/catalogue/source/images/plant/点地梅/3.png new file mode 100644 index 0000000..2a0ef99 Binary files /dev/null and b/catalogue/source/images/plant/点地梅/3.png differ diff --git a/catalogue/source/images/plant/点地梅/4.png b/catalogue/source/images/plant/点地梅/4.png new file mode 100644 index 0000000..88d13d3 Binary files /dev/null and b/catalogue/source/images/plant/点地梅/4.png differ diff --git a/catalogue/source/images/plant/点地梅/5.png b/catalogue/source/images/plant/点地梅/5.png new file mode 100644 index 0000000..8f129a3 Binary files /dev/null and b/catalogue/source/images/plant/点地梅/5.png differ diff --git a/catalogue/source/images/plant/点地梅/icon.png b/catalogue/source/images/plant/点地梅/icon.png new file mode 100644 index 0000000..fe30308 Binary files /dev/null and b/catalogue/source/images/plant/点地梅/icon.png differ diff --git a/catalogue/source/images/plant/牧草/1.png b/catalogue/source/images/plant/牧草/1.png new file mode 100644 index 0000000..dc3f72d Binary files /dev/null and b/catalogue/source/images/plant/牧草/1.png differ diff --git a/catalogue/source/images/plant/牧草/2.png b/catalogue/source/images/plant/牧草/2.png new file mode 100644 index 0000000..2464296 Binary files /dev/null and b/catalogue/source/images/plant/牧草/2.png differ diff --git a/catalogue/source/images/plant/牧草/3.png b/catalogue/source/images/plant/牧草/3.png new file mode 100644 index 0000000..f0d6beb Binary files /dev/null and b/catalogue/source/images/plant/牧草/3.png differ diff --git a/catalogue/source/images/plant/牧草/4.png b/catalogue/source/images/plant/牧草/4.png new file mode 100644 index 0000000..36acd79 Binary files /dev/null and b/catalogue/source/images/plant/牧草/4.png differ diff --git a/catalogue/source/images/plant/牧草/icon.png b/catalogue/source/images/plant/牧草/icon.png new file mode 100644 index 0000000..24d6b12 Binary files /dev/null and b/catalogue/source/images/plant/牧草/icon.png differ diff --git a/catalogue/source/images/plant/猕猴桃/1.png b/catalogue/source/images/plant/猕猴桃/1.png new file mode 100644 index 0000000..e2b51d2 Binary files /dev/null and b/catalogue/source/images/plant/猕猴桃/1.png differ diff --git a/catalogue/source/images/plant/猕猴桃/2.png b/catalogue/source/images/plant/猕猴桃/2.png new file mode 100644 index 0000000..54ac61d Binary files /dev/null and b/catalogue/source/images/plant/猕猴桃/2.png differ diff --git a/catalogue/source/images/plant/猕猴桃/3.png b/catalogue/source/images/plant/猕猴桃/3.png new file mode 100644 index 0000000..45ab33e Binary files /dev/null and b/catalogue/source/images/plant/猕猴桃/3.png differ diff --git a/catalogue/source/images/plant/猕猴桃/4.png b/catalogue/source/images/plant/猕猴桃/4.png new file mode 100644 index 0000000..647bf19 Binary files /dev/null and b/catalogue/source/images/plant/猕猴桃/4.png differ diff --git a/catalogue/source/images/plant/猕猴桃/5.png b/catalogue/source/images/plant/猕猴桃/5.png new file mode 100644 index 0000000..b59f0e8 Binary files /dev/null and b/catalogue/source/images/plant/猕猴桃/5.png differ diff --git a/catalogue/source/images/plant/猕猴桃/icon.png b/catalogue/source/images/plant/猕猴桃/icon.png new file mode 100644 index 0000000..d4bf34d Binary files /dev/null and b/catalogue/source/images/plant/猕猴桃/icon.png differ diff --git a/catalogue/source/images/plant/玉米/1.png b/catalogue/source/images/plant/玉米/1.png new file mode 100644 index 0000000..6b38c60 Binary files /dev/null and b/catalogue/source/images/plant/玉米/1.png differ diff --git a/catalogue/source/images/plant/玉米/2.png b/catalogue/source/images/plant/玉米/2.png new file mode 100644 index 0000000..1e171ff Binary files /dev/null and b/catalogue/source/images/plant/玉米/2.png differ diff --git a/catalogue/source/images/plant/玉米/3.png b/catalogue/source/images/plant/玉米/3.png new file mode 100644 index 0000000..dbb0efd Binary files /dev/null and b/catalogue/source/images/plant/玉米/3.png differ diff --git a/catalogue/source/images/plant/玉米/4.png b/catalogue/source/images/plant/玉米/4.png new file mode 100644 index 0000000..9b79db1 Binary files /dev/null and b/catalogue/source/images/plant/玉米/4.png differ diff --git a/catalogue/source/images/plant/玉米/5.png b/catalogue/source/images/plant/玉米/5.png new file mode 100644 index 0000000..3724e68 Binary files /dev/null and b/catalogue/source/images/plant/玉米/5.png differ diff --git a/catalogue/source/images/plant/玉米/icon.png b/catalogue/source/images/plant/玉米/icon.png new file mode 100644 index 0000000..921225d Binary files /dev/null and b/catalogue/source/images/plant/玉米/icon.png differ diff --git a/catalogue/source/images/plant/甘蔗/1.png b/catalogue/source/images/plant/甘蔗/1.png new file mode 100644 index 0000000..12f9f5f Binary files /dev/null and b/catalogue/source/images/plant/甘蔗/1.png differ diff --git a/catalogue/source/images/plant/甘蔗/2.png b/catalogue/source/images/plant/甘蔗/2.png new file mode 100644 index 0000000..dac7fa0 Binary files /dev/null and b/catalogue/source/images/plant/甘蔗/2.png differ diff --git a/catalogue/source/images/plant/甘蔗/3.png b/catalogue/source/images/plant/甘蔗/3.png new file mode 100644 index 0000000..fcc210f Binary files /dev/null and b/catalogue/source/images/plant/甘蔗/3.png differ diff --git a/catalogue/source/images/plant/甘蔗/4.png b/catalogue/source/images/plant/甘蔗/4.png new file mode 100644 index 0000000..32ee986 Binary files /dev/null and b/catalogue/source/images/plant/甘蔗/4.png differ diff --git a/catalogue/source/images/plant/甘蔗/5.png b/catalogue/source/images/plant/甘蔗/5.png new file mode 100644 index 0000000..e54c275 Binary files /dev/null and b/catalogue/source/images/plant/甘蔗/5.png differ diff --git a/catalogue/source/images/plant/甘蔗/icon.png b/catalogue/source/images/plant/甘蔗/icon.png new file mode 100644 index 0000000..efb1b9f Binary files /dev/null and b/catalogue/source/images/plant/甘蔗/icon.png differ diff --git a/catalogue/source/images/plant/生菜/1.png b/catalogue/source/images/plant/生菜/1.png new file mode 100644 index 0000000..a4d6abd Binary files /dev/null and b/catalogue/source/images/plant/生菜/1.png differ diff --git a/catalogue/source/images/plant/生菜/2.png b/catalogue/source/images/plant/生菜/2.png new file mode 100644 index 0000000..e397eaa Binary files /dev/null and b/catalogue/source/images/plant/生菜/2.png differ diff --git a/catalogue/source/images/plant/生菜/3.png b/catalogue/source/images/plant/生菜/3.png new file mode 100644 index 0000000..b9aeae4 Binary files /dev/null and b/catalogue/source/images/plant/生菜/3.png differ diff --git a/catalogue/source/images/plant/生菜/4.png b/catalogue/source/images/plant/生菜/4.png new file mode 100644 index 0000000..0d9aadd Binary files /dev/null and b/catalogue/source/images/plant/生菜/4.png differ diff --git a/catalogue/source/images/plant/生菜/5.png b/catalogue/source/images/plant/生菜/5.png new file mode 100644 index 0000000..13d1ae6 Binary files /dev/null and b/catalogue/source/images/plant/生菜/5.png differ diff --git a/catalogue/source/images/plant/生菜/icon.png b/catalogue/source/images/plant/生菜/icon.png new file mode 100644 index 0000000..2f8eef3 Binary files /dev/null and b/catalogue/source/images/plant/生菜/icon.png differ diff --git a/catalogue/source/images/plant/番石榴/1.png b/catalogue/source/images/plant/番石榴/1.png new file mode 100644 index 0000000..ce2bf14 Binary files /dev/null and b/catalogue/source/images/plant/番石榴/1.png differ diff --git a/catalogue/source/images/plant/番石榴/2.png b/catalogue/source/images/plant/番石榴/2.png new file mode 100644 index 0000000..f241333 Binary files /dev/null and b/catalogue/source/images/plant/番石榴/2.png differ diff --git a/catalogue/source/images/plant/番石榴/3.png b/catalogue/source/images/plant/番石榴/3.png new file mode 100644 index 0000000..15ac948 Binary files /dev/null and b/catalogue/source/images/plant/番石榴/3.png differ diff --git a/catalogue/source/images/plant/番石榴/4.png b/catalogue/source/images/plant/番石榴/4.png new file mode 100644 index 0000000..5b7258d Binary files /dev/null and b/catalogue/source/images/plant/番石榴/4.png differ diff --git a/catalogue/source/images/plant/番石榴/5.png b/catalogue/source/images/plant/番石榴/5.png new file mode 100644 index 0000000..6a88901 Binary files /dev/null and b/catalogue/source/images/plant/番石榴/5.png differ diff --git a/catalogue/source/images/plant/番石榴/icon.png b/catalogue/source/images/plant/番石榴/icon.png new file mode 100644 index 0000000..9efbfc8 Binary files /dev/null and b/catalogue/source/images/plant/番石榴/icon.png differ diff --git a/catalogue/source/images/plant/番茄/1.png b/catalogue/source/images/plant/番茄/1.png new file mode 100644 index 0000000..470bbe2 Binary files /dev/null and b/catalogue/source/images/plant/番茄/1.png differ diff --git a/catalogue/source/images/plant/番茄/2.png b/catalogue/source/images/plant/番茄/2.png new file mode 100644 index 0000000..1c729bc Binary files /dev/null and b/catalogue/source/images/plant/番茄/2.png differ diff --git a/catalogue/source/images/plant/番茄/3.png b/catalogue/source/images/plant/番茄/3.png new file mode 100644 index 0000000..fa2521a Binary files /dev/null and b/catalogue/source/images/plant/番茄/3.png differ diff --git a/catalogue/source/images/plant/番茄/4.png b/catalogue/source/images/plant/番茄/4.png new file mode 100644 index 0000000..b399ef0 Binary files /dev/null and b/catalogue/source/images/plant/番茄/4.png differ diff --git a/catalogue/source/images/plant/番茄/5.png b/catalogue/source/images/plant/番茄/5.png new file mode 100644 index 0000000..3ddc306 Binary files /dev/null and b/catalogue/source/images/plant/番茄/5.png differ diff --git a/catalogue/source/images/plant/番茄/icon.png b/catalogue/source/images/plant/番茄/icon.png new file mode 100644 index 0000000..7d09384 Binary files /dev/null and b/catalogue/source/images/plant/番茄/icon.png differ diff --git a/catalogue/source/images/plant/番荔枝/1.png b/catalogue/source/images/plant/番荔枝/1.png new file mode 100644 index 0000000..f136d05 Binary files /dev/null and b/catalogue/source/images/plant/番荔枝/1.png differ diff --git a/catalogue/source/images/plant/番荔枝/2.png b/catalogue/source/images/plant/番荔枝/2.png new file mode 100644 index 0000000..dffe8c4 Binary files /dev/null and b/catalogue/source/images/plant/番荔枝/2.png differ diff --git a/catalogue/source/images/plant/番荔枝/3.png b/catalogue/source/images/plant/番荔枝/3.png new file mode 100644 index 0000000..feea5dc Binary files /dev/null and b/catalogue/source/images/plant/番荔枝/3.png differ diff --git a/catalogue/source/images/plant/番荔枝/4.png b/catalogue/source/images/plant/番荔枝/4.png new file mode 100644 index 0000000..f21897f Binary files /dev/null and b/catalogue/source/images/plant/番荔枝/4.png differ diff --git a/catalogue/source/images/plant/番荔枝/5.png b/catalogue/source/images/plant/番荔枝/5.png new file mode 100644 index 0000000..aed01c9 Binary files /dev/null and b/catalogue/source/images/plant/番荔枝/5.png differ diff --git a/catalogue/source/images/plant/番荔枝/icon.png b/catalogue/source/images/plant/番荔枝/icon.png new file mode 100644 index 0000000..fe8f3a9 Binary files /dev/null and b/catalogue/source/images/plant/番荔枝/icon.png differ diff --git a/catalogue/source/images/plant/白萝卜/1.png b/catalogue/source/images/plant/白萝卜/1.png new file mode 100644 index 0000000..ffa3e70 Binary files /dev/null and b/catalogue/source/images/plant/白萝卜/1.png differ diff --git a/catalogue/source/images/plant/白萝卜/2.png b/catalogue/source/images/plant/白萝卜/2.png new file mode 100644 index 0000000..59bcb27 Binary files /dev/null and b/catalogue/source/images/plant/白萝卜/2.png differ diff --git a/catalogue/source/images/plant/白萝卜/3.png b/catalogue/source/images/plant/白萝卜/3.png new file mode 100644 index 0000000..73e06f0 Binary files /dev/null and b/catalogue/source/images/plant/白萝卜/3.png differ diff --git a/catalogue/source/images/plant/白萝卜/4.png b/catalogue/source/images/plant/白萝卜/4.png new file mode 100644 index 0000000..63f14a4 Binary files /dev/null and b/catalogue/source/images/plant/白萝卜/4.png differ diff --git a/catalogue/source/images/plant/白萝卜/icon.png b/catalogue/source/images/plant/白萝卜/icon.png new file mode 100644 index 0000000..2289998 Binary files /dev/null and b/catalogue/source/images/plant/白萝卜/icon.png differ diff --git a/catalogue/source/images/plant/百香果/1.png b/catalogue/source/images/plant/百香果/1.png new file mode 100644 index 0000000..248549e Binary files /dev/null and b/catalogue/source/images/plant/百香果/1.png differ diff --git a/catalogue/source/images/plant/百香果/2.png b/catalogue/source/images/plant/百香果/2.png new file mode 100644 index 0000000..ed17e30 Binary files /dev/null and b/catalogue/source/images/plant/百香果/2.png differ diff --git a/catalogue/source/images/plant/百香果/3.png b/catalogue/source/images/plant/百香果/3.png new file mode 100644 index 0000000..e13b128 Binary files /dev/null and b/catalogue/source/images/plant/百香果/3.png differ diff --git a/catalogue/source/images/plant/百香果/4.png b/catalogue/source/images/plant/百香果/4.png new file mode 100644 index 0000000..3864bbb Binary files /dev/null and b/catalogue/source/images/plant/百香果/4.png differ diff --git a/catalogue/source/images/plant/百香果/5.png b/catalogue/source/images/plant/百香果/5.png new file mode 100644 index 0000000..5d71fe3 Binary files /dev/null and b/catalogue/source/images/plant/百香果/5.png differ diff --git a/catalogue/source/images/plant/百香果/icon.png b/catalogue/source/images/plant/百香果/icon.png new file mode 100644 index 0000000..9bca84a Binary files /dev/null and b/catalogue/source/images/plant/百香果/icon.png differ diff --git a/catalogue/source/images/plant/益母草/1.png b/catalogue/source/images/plant/益母草/1.png new file mode 100644 index 0000000..af91d37 Binary files /dev/null and b/catalogue/source/images/plant/益母草/1.png differ diff --git a/catalogue/source/images/plant/益母草/2.png b/catalogue/source/images/plant/益母草/2.png new file mode 100644 index 0000000..d4cbabc Binary files /dev/null and b/catalogue/source/images/plant/益母草/2.png differ diff --git a/catalogue/source/images/plant/益母草/3.png b/catalogue/source/images/plant/益母草/3.png new file mode 100644 index 0000000..95a5f07 Binary files /dev/null and b/catalogue/source/images/plant/益母草/3.png differ diff --git a/catalogue/source/images/plant/益母草/4.png b/catalogue/source/images/plant/益母草/4.png new file mode 100644 index 0000000..897765f Binary files /dev/null and b/catalogue/source/images/plant/益母草/4.png differ diff --git a/catalogue/source/images/plant/益母草/5.png b/catalogue/source/images/plant/益母草/5.png new file mode 100644 index 0000000..a293528 Binary files /dev/null and b/catalogue/source/images/plant/益母草/5.png differ diff --git a/catalogue/source/images/plant/益母草/icon.png b/catalogue/source/images/plant/益母草/icon.png new file mode 100644 index 0000000..9202360 Binary files /dev/null and b/catalogue/source/images/plant/益母草/icon.png differ diff --git a/catalogue/source/images/plant/睡莲/1.png b/catalogue/source/images/plant/睡莲/1.png new file mode 100644 index 0000000..adcd22c Binary files /dev/null and b/catalogue/source/images/plant/睡莲/1.png differ diff --git a/catalogue/source/images/plant/睡莲/2.png b/catalogue/source/images/plant/睡莲/2.png new file mode 100644 index 0000000..004db27 Binary files /dev/null and b/catalogue/source/images/plant/睡莲/2.png differ diff --git a/catalogue/source/images/plant/睡莲/3.png b/catalogue/source/images/plant/睡莲/3.png new file mode 100644 index 0000000..aaff73d Binary files /dev/null and b/catalogue/source/images/plant/睡莲/3.png differ diff --git a/catalogue/source/images/plant/睡莲/4.png b/catalogue/source/images/plant/睡莲/4.png new file mode 100644 index 0000000..9af02b9 Binary files /dev/null and b/catalogue/source/images/plant/睡莲/4.png differ diff --git a/catalogue/source/images/plant/睡莲/5.png b/catalogue/source/images/plant/睡莲/5.png new file mode 100644 index 0000000..baf9603 Binary files /dev/null and b/catalogue/source/images/plant/睡莲/5.png differ diff --git a/catalogue/source/images/plant/睡莲/icon.png b/catalogue/source/images/plant/睡莲/icon.png new file mode 100644 index 0000000..8175cf6 Binary files /dev/null and b/catalogue/source/images/plant/睡莲/icon.png differ diff --git a/catalogue/source/images/plant/石榴/1.png b/catalogue/source/images/plant/石榴/1.png new file mode 100644 index 0000000..6fa446f Binary files /dev/null and b/catalogue/source/images/plant/石榴/1.png differ diff --git a/catalogue/source/images/plant/石榴/2.png b/catalogue/source/images/plant/石榴/2.png new file mode 100644 index 0000000..28a2785 Binary files /dev/null and b/catalogue/source/images/plant/石榴/2.png differ diff --git a/catalogue/source/images/plant/石榴/3.png b/catalogue/source/images/plant/石榴/3.png new file mode 100644 index 0000000..ec44ff8 Binary files /dev/null and b/catalogue/source/images/plant/石榴/3.png differ diff --git a/catalogue/source/images/plant/石榴/4.png b/catalogue/source/images/plant/石榴/4.png new file mode 100644 index 0000000..51513bf Binary files /dev/null and b/catalogue/source/images/plant/石榴/4.png differ diff --git a/catalogue/source/images/plant/石榴/5.png b/catalogue/source/images/plant/石榴/5.png new file mode 100644 index 0000000..9fa5f0c Binary files /dev/null and b/catalogue/source/images/plant/石榴/5.png differ diff --git a/catalogue/source/images/plant/石榴/icon.png b/catalogue/source/images/plant/石榴/icon.png new file mode 100644 index 0000000..a17a315 Binary files /dev/null and b/catalogue/source/images/plant/石榴/icon.png differ diff --git a/catalogue/source/images/plant/竹笋/1.png b/catalogue/source/images/plant/竹笋/1.png new file mode 100644 index 0000000..2a8dfdc Binary files /dev/null and b/catalogue/source/images/plant/竹笋/1.png differ diff --git a/catalogue/source/images/plant/竹笋/2.png b/catalogue/source/images/plant/竹笋/2.png new file mode 100644 index 0000000..10223a7 Binary files /dev/null and b/catalogue/source/images/plant/竹笋/2.png differ diff --git a/catalogue/source/images/plant/竹笋/3.png b/catalogue/source/images/plant/竹笋/3.png new file mode 100644 index 0000000..a0b1cd3 Binary files /dev/null and b/catalogue/source/images/plant/竹笋/3.png differ diff --git a/catalogue/source/images/plant/竹笋/4.png b/catalogue/source/images/plant/竹笋/4.png new file mode 100644 index 0000000..daf496e Binary files /dev/null and b/catalogue/source/images/plant/竹笋/4.png differ diff --git a/catalogue/source/images/plant/竹笋/5.png b/catalogue/source/images/plant/竹笋/5.png new file mode 100644 index 0000000..3a23e87 Binary files /dev/null and b/catalogue/source/images/plant/竹笋/5.png differ diff --git a/catalogue/source/images/plant/竹笋/icon.png b/catalogue/source/images/plant/竹笋/icon.png new file mode 100644 index 0000000..92150f5 Binary files /dev/null and b/catalogue/source/images/plant/竹笋/icon.png differ diff --git a/catalogue/source/images/plant/箬竹/1.png b/catalogue/source/images/plant/箬竹/1.png new file mode 100644 index 0000000..844e9df Binary files /dev/null and b/catalogue/source/images/plant/箬竹/1.png differ diff --git a/catalogue/source/images/plant/箬竹/2.png b/catalogue/source/images/plant/箬竹/2.png new file mode 100644 index 0000000..b912c71 Binary files /dev/null and b/catalogue/source/images/plant/箬竹/2.png differ diff --git a/catalogue/source/images/plant/箬竹/3.png b/catalogue/source/images/plant/箬竹/3.png new file mode 100644 index 0000000..790a82c Binary files /dev/null and b/catalogue/source/images/plant/箬竹/3.png differ diff --git a/catalogue/source/images/plant/箬竹/4.png b/catalogue/source/images/plant/箬竹/4.png new file mode 100644 index 0000000..06c45f2 Binary files /dev/null and b/catalogue/source/images/plant/箬竹/4.png differ diff --git a/catalogue/source/images/plant/箬竹/5.png b/catalogue/source/images/plant/箬竹/5.png new file mode 100644 index 0000000..bba504d Binary files /dev/null and b/catalogue/source/images/plant/箬竹/5.png differ diff --git a/catalogue/source/images/plant/箬竹/icon.png b/catalogue/source/images/plant/箬竹/icon.png new file mode 100644 index 0000000..d7ca187 Binary files /dev/null and b/catalogue/source/images/plant/箬竹/icon.png differ diff --git a/catalogue/source/images/plant/红叶梅/1.png b/catalogue/source/images/plant/红叶梅/1.png new file mode 100644 index 0000000..dbba79a Binary files /dev/null and b/catalogue/source/images/plant/红叶梅/1.png differ diff --git a/catalogue/source/images/plant/红叶梅/2.png b/catalogue/source/images/plant/红叶梅/2.png new file mode 100644 index 0000000..417f839 Binary files /dev/null and b/catalogue/source/images/plant/红叶梅/2.png differ diff --git a/catalogue/source/images/plant/红叶梅/3.png b/catalogue/source/images/plant/红叶梅/3.png new file mode 100644 index 0000000..ac9fb87 Binary files /dev/null and b/catalogue/source/images/plant/红叶梅/3.png differ diff --git a/catalogue/source/images/plant/红叶梅/4.png b/catalogue/source/images/plant/红叶梅/4.png new file mode 100644 index 0000000..7fe556f Binary files /dev/null and b/catalogue/source/images/plant/红叶梅/4.png differ diff --git a/catalogue/source/images/plant/红叶梅/5.png b/catalogue/source/images/plant/红叶梅/5.png new file mode 100644 index 0000000..0f259a3 Binary files /dev/null and b/catalogue/source/images/plant/红叶梅/5.png differ diff --git a/catalogue/source/images/plant/红叶梅/icon.png b/catalogue/source/images/plant/红叶梅/icon.png new file mode 100644 index 0000000..af4a5dc Binary files /dev/null and b/catalogue/source/images/plant/红叶梅/icon.png differ diff --git a/catalogue/source/images/plant/红枣/1.png b/catalogue/source/images/plant/红枣/1.png new file mode 100644 index 0000000..3466188 Binary files /dev/null and b/catalogue/source/images/plant/红枣/1.png differ diff --git a/catalogue/source/images/plant/红枣/2.png b/catalogue/source/images/plant/红枣/2.png new file mode 100644 index 0000000..1d82370 Binary files /dev/null and b/catalogue/source/images/plant/红枣/2.png differ diff --git a/catalogue/source/images/plant/红枣/3.png b/catalogue/source/images/plant/红枣/3.png new file mode 100644 index 0000000..4f9463a Binary files /dev/null and b/catalogue/source/images/plant/红枣/3.png differ diff --git a/catalogue/source/images/plant/红枣/4.png b/catalogue/source/images/plant/红枣/4.png new file mode 100644 index 0000000..542fd22 Binary files /dev/null and b/catalogue/source/images/plant/红枣/4.png differ diff --git a/catalogue/source/images/plant/红枣/5.png b/catalogue/source/images/plant/红枣/5.png new file mode 100644 index 0000000..0487787 Binary files /dev/null and b/catalogue/source/images/plant/红枣/5.png differ diff --git a/catalogue/source/images/plant/红枣/icon.png b/catalogue/source/images/plant/红枣/icon.png new file mode 100644 index 0000000..a3c9035 Binary files /dev/null and b/catalogue/source/images/plant/红枣/icon.png differ diff --git a/catalogue/source/images/plant/红毛丹/1.png b/catalogue/source/images/plant/红毛丹/1.png new file mode 100644 index 0000000..74a4fde Binary files /dev/null and b/catalogue/source/images/plant/红毛丹/1.png differ diff --git a/catalogue/source/images/plant/红毛丹/2.png b/catalogue/source/images/plant/红毛丹/2.png new file mode 100644 index 0000000..ddf3bd8 Binary files /dev/null and b/catalogue/source/images/plant/红毛丹/2.png differ diff --git a/catalogue/source/images/plant/红毛丹/3.png b/catalogue/source/images/plant/红毛丹/3.png new file mode 100644 index 0000000..c3c0960 Binary files /dev/null and b/catalogue/source/images/plant/红毛丹/3.png differ diff --git a/catalogue/source/images/plant/红毛丹/4.png b/catalogue/source/images/plant/红毛丹/4.png new file mode 100644 index 0000000..79f9f0e Binary files /dev/null and b/catalogue/source/images/plant/红毛丹/4.png differ diff --git a/catalogue/source/images/plant/红毛丹/5.png b/catalogue/source/images/plant/红毛丹/5.png new file mode 100644 index 0000000..3737869 Binary files /dev/null and b/catalogue/source/images/plant/红毛丹/5.png differ diff --git a/catalogue/source/images/plant/红毛丹/icon.png b/catalogue/source/images/plant/红毛丹/icon.png new file mode 100644 index 0000000..a40cb5f Binary files /dev/null and b/catalogue/source/images/plant/红毛丹/icon.png differ diff --git a/catalogue/source/images/plant/红玫瑰/1.png b/catalogue/source/images/plant/红玫瑰/1.png new file mode 100644 index 0000000..4a04a76 Binary files /dev/null and b/catalogue/source/images/plant/红玫瑰/1.png differ diff --git a/catalogue/source/images/plant/红玫瑰/2.png b/catalogue/source/images/plant/红玫瑰/2.png new file mode 100644 index 0000000..40fae8a Binary files /dev/null and b/catalogue/source/images/plant/红玫瑰/2.png differ diff --git a/catalogue/source/images/plant/红玫瑰/3.png b/catalogue/source/images/plant/红玫瑰/3.png new file mode 100644 index 0000000..ce8d4d5 Binary files /dev/null and b/catalogue/source/images/plant/红玫瑰/3.png differ diff --git a/catalogue/source/images/plant/红玫瑰/4.png b/catalogue/source/images/plant/红玫瑰/4.png new file mode 100644 index 0000000..ce55f8c Binary files /dev/null and b/catalogue/source/images/plant/红玫瑰/4.png differ diff --git a/catalogue/source/images/plant/红玫瑰/5.png b/catalogue/source/images/plant/红玫瑰/5.png new file mode 100644 index 0000000..145bad7 Binary files /dev/null and b/catalogue/source/images/plant/红玫瑰/5.png differ diff --git a/catalogue/source/images/plant/红玫瑰/icon.png b/catalogue/source/images/plant/红玫瑰/icon.png new file mode 100644 index 0000000..55073ef Binary files /dev/null and b/catalogue/source/images/plant/红玫瑰/icon.png differ diff --git a/catalogue/source/images/plant/胡萝卜/1.png b/catalogue/source/images/plant/胡萝卜/1.png new file mode 100644 index 0000000..810e456 Binary files /dev/null and b/catalogue/source/images/plant/胡萝卜/1.png differ diff --git a/catalogue/source/images/plant/胡萝卜/2.png b/catalogue/source/images/plant/胡萝卜/2.png new file mode 100644 index 0000000..07680e0 Binary files /dev/null and b/catalogue/source/images/plant/胡萝卜/2.png differ diff --git a/catalogue/source/images/plant/胡萝卜/3.png b/catalogue/source/images/plant/胡萝卜/3.png new file mode 100644 index 0000000..ba91e1b Binary files /dev/null and b/catalogue/source/images/plant/胡萝卜/3.png differ diff --git a/catalogue/source/images/plant/胡萝卜/4.png b/catalogue/source/images/plant/胡萝卜/4.png new file mode 100644 index 0000000..8507c1a Binary files /dev/null and b/catalogue/source/images/plant/胡萝卜/4.png differ diff --git a/catalogue/source/images/plant/胡萝卜/icon.png b/catalogue/source/images/plant/胡萝卜/icon.png new file mode 100644 index 0000000..2e51389 Binary files /dev/null and b/catalogue/source/images/plant/胡萝卜/icon.png differ diff --git a/catalogue/source/images/plant/芒果/1.png b/catalogue/source/images/plant/芒果/1.png new file mode 100644 index 0000000..3fe4348 Binary files /dev/null and b/catalogue/source/images/plant/芒果/1.png differ diff --git a/catalogue/source/images/plant/芒果/2.png b/catalogue/source/images/plant/芒果/2.png new file mode 100644 index 0000000..077e91b Binary files /dev/null and b/catalogue/source/images/plant/芒果/2.png differ diff --git a/catalogue/source/images/plant/芒果/3.png b/catalogue/source/images/plant/芒果/3.png new file mode 100644 index 0000000..56fd1da Binary files /dev/null and b/catalogue/source/images/plant/芒果/3.png differ diff --git a/catalogue/source/images/plant/芒果/4.png b/catalogue/source/images/plant/芒果/4.png new file mode 100644 index 0000000..e3d69e9 Binary files /dev/null and b/catalogue/source/images/plant/芒果/4.png differ diff --git a/catalogue/source/images/plant/芒果/5.png b/catalogue/source/images/plant/芒果/5.png new file mode 100644 index 0000000..74b927c Binary files /dev/null and b/catalogue/source/images/plant/芒果/5.png differ diff --git a/catalogue/source/images/plant/芒果/icon.png b/catalogue/source/images/plant/芒果/icon.png new file mode 100644 index 0000000..4d3f84e Binary files /dev/null and b/catalogue/source/images/plant/芒果/icon.png differ diff --git a/catalogue/source/images/plant/芦荟/0.png b/catalogue/source/images/plant/芦荟/0.png new file mode 100644 index 0000000..c1843bc Binary files /dev/null and b/catalogue/source/images/plant/芦荟/0.png differ diff --git a/catalogue/source/images/plant/芦荟/1.png b/catalogue/source/images/plant/芦荟/1.png new file mode 100644 index 0000000..9321bc0 Binary files /dev/null and b/catalogue/source/images/plant/芦荟/1.png differ diff --git a/catalogue/source/images/plant/芦荟/2.png b/catalogue/source/images/plant/芦荟/2.png new file mode 100644 index 0000000..e371d05 Binary files /dev/null and b/catalogue/source/images/plant/芦荟/2.png differ diff --git a/catalogue/source/images/plant/芦荟/3.png b/catalogue/source/images/plant/芦荟/3.png new file mode 100644 index 0000000..81d12b1 Binary files /dev/null and b/catalogue/source/images/plant/芦荟/3.png differ diff --git a/catalogue/source/images/plant/芦荟/4.png b/catalogue/source/images/plant/芦荟/4.png new file mode 100644 index 0000000..7dc80ba Binary files /dev/null and b/catalogue/source/images/plant/芦荟/4.png differ diff --git a/catalogue/source/images/plant/芦荟/5.png b/catalogue/source/images/plant/芦荟/5.png new file mode 100644 index 0000000..0b54c96 Binary files /dev/null and b/catalogue/source/images/plant/芦荟/5.png differ diff --git a/catalogue/source/images/plant/芦荟/icon.png b/catalogue/source/images/plant/芦荟/icon.png new file mode 100644 index 0000000..e2758c4 Binary files /dev/null and b/catalogue/source/images/plant/芦荟/icon.png differ diff --git a/catalogue/source/images/plant/芭蕉/1.png b/catalogue/source/images/plant/芭蕉/1.png new file mode 100644 index 0000000..4c053b2 Binary files /dev/null and b/catalogue/source/images/plant/芭蕉/1.png differ diff --git a/catalogue/source/images/plant/芭蕉/2.png b/catalogue/source/images/plant/芭蕉/2.png new file mode 100644 index 0000000..09234b0 Binary files /dev/null and b/catalogue/source/images/plant/芭蕉/2.png differ diff --git a/catalogue/source/images/plant/芭蕉/3.png b/catalogue/source/images/plant/芭蕉/3.png new file mode 100644 index 0000000..10756c2 Binary files /dev/null and b/catalogue/source/images/plant/芭蕉/3.png differ diff --git a/catalogue/source/images/plant/芭蕉/4.png b/catalogue/source/images/plant/芭蕉/4.png new file mode 100644 index 0000000..b252e67 Binary files /dev/null and b/catalogue/source/images/plant/芭蕉/4.png differ diff --git a/catalogue/source/images/plant/芭蕉/5.png b/catalogue/source/images/plant/芭蕉/5.png new file mode 100644 index 0000000..4894755 Binary files /dev/null and b/catalogue/source/images/plant/芭蕉/5.png differ diff --git a/catalogue/source/images/plant/芭蕉/icon.png b/catalogue/source/images/plant/芭蕉/icon.png new file mode 100644 index 0000000..df5b825 Binary files /dev/null and b/catalogue/source/images/plant/芭蕉/icon.png differ diff --git a/catalogue/source/images/plant/花生/1.png b/catalogue/source/images/plant/花生/1.png new file mode 100644 index 0000000..7a92deb Binary files /dev/null and b/catalogue/source/images/plant/花生/1.png differ diff --git a/catalogue/source/images/plant/花生/2.png b/catalogue/source/images/plant/花生/2.png new file mode 100644 index 0000000..06af7fd Binary files /dev/null and b/catalogue/source/images/plant/花生/2.png differ diff --git a/catalogue/source/images/plant/花生/3.png b/catalogue/source/images/plant/花生/3.png new file mode 100644 index 0000000..f4f8032 Binary files /dev/null and b/catalogue/source/images/plant/花生/3.png differ diff --git a/catalogue/source/images/plant/花生/4.png b/catalogue/source/images/plant/花生/4.png new file mode 100644 index 0000000..9e37310 Binary files /dev/null and b/catalogue/source/images/plant/花生/4.png differ diff --git a/catalogue/source/images/plant/花生/5.png b/catalogue/source/images/plant/花生/5.png new file mode 100644 index 0000000..90f4353 Binary files /dev/null and b/catalogue/source/images/plant/花生/5.png differ diff --git a/catalogue/source/images/plant/花生/icon.png b/catalogue/source/images/plant/花生/icon.png new file mode 100644 index 0000000..df4f253 Binary files /dev/null and b/catalogue/source/images/plant/花生/icon.png differ diff --git a/catalogue/source/images/plant/花菜/1.png b/catalogue/source/images/plant/花菜/1.png new file mode 100644 index 0000000..f63101d Binary files /dev/null and b/catalogue/source/images/plant/花菜/1.png differ diff --git a/catalogue/source/images/plant/花菜/2.png b/catalogue/source/images/plant/花菜/2.png new file mode 100644 index 0000000..715edd4 Binary files /dev/null and b/catalogue/source/images/plant/花菜/2.png differ diff --git a/catalogue/source/images/plant/花菜/3.png b/catalogue/source/images/plant/花菜/3.png new file mode 100644 index 0000000..2384e28 Binary files /dev/null and b/catalogue/source/images/plant/花菜/3.png differ diff --git a/catalogue/source/images/plant/花菜/4.png b/catalogue/source/images/plant/花菜/4.png new file mode 100644 index 0000000..0f459ca Binary files /dev/null and b/catalogue/source/images/plant/花菜/4.png differ diff --git a/catalogue/source/images/plant/花菜/5.png b/catalogue/source/images/plant/花菜/5.png new file mode 100644 index 0000000..5de7ea4 Binary files /dev/null and b/catalogue/source/images/plant/花菜/5.png differ diff --git a/catalogue/source/images/plant/花菜/icon.png b/catalogue/source/images/plant/花菜/icon.png new file mode 100644 index 0000000..a7a4b92 Binary files /dev/null and b/catalogue/source/images/plant/花菜/icon.png differ diff --git a/catalogue/source/images/plant/芹菜/1.png b/catalogue/source/images/plant/芹菜/1.png new file mode 100644 index 0000000..239784b Binary files /dev/null and b/catalogue/source/images/plant/芹菜/1.png differ diff --git a/catalogue/source/images/plant/芹菜/2.png b/catalogue/source/images/plant/芹菜/2.png new file mode 100644 index 0000000..c2d9ea4 Binary files /dev/null and b/catalogue/source/images/plant/芹菜/2.png differ diff --git a/catalogue/source/images/plant/芹菜/3.png b/catalogue/source/images/plant/芹菜/3.png new file mode 100644 index 0000000..4cc23f1 Binary files /dev/null and b/catalogue/source/images/plant/芹菜/3.png differ diff --git a/catalogue/source/images/plant/芹菜/4.png b/catalogue/source/images/plant/芹菜/4.png new file mode 100644 index 0000000..90e1eb2 Binary files /dev/null and b/catalogue/source/images/plant/芹菜/4.png differ diff --git a/catalogue/source/images/plant/芹菜/5.png b/catalogue/source/images/plant/芹菜/5.png new file mode 100644 index 0000000..0d6f5d7 Binary files /dev/null and b/catalogue/source/images/plant/芹菜/5.png differ diff --git a/catalogue/source/images/plant/芹菜/icon.png b/catalogue/source/images/plant/芹菜/icon.png new file mode 100644 index 0000000..f4d2d3e Binary files /dev/null and b/catalogue/source/images/plant/芹菜/icon.png differ diff --git a/catalogue/source/images/plant/苦瓜/1.png b/catalogue/source/images/plant/苦瓜/1.png new file mode 100644 index 0000000..a718f57 Binary files /dev/null and b/catalogue/source/images/plant/苦瓜/1.png differ diff --git a/catalogue/source/images/plant/苦瓜/2.png b/catalogue/source/images/plant/苦瓜/2.png new file mode 100644 index 0000000..fc04910 Binary files /dev/null and b/catalogue/source/images/plant/苦瓜/2.png differ diff --git a/catalogue/source/images/plant/苦瓜/3.png b/catalogue/source/images/plant/苦瓜/3.png new file mode 100644 index 0000000..34bd32f Binary files /dev/null and b/catalogue/source/images/plant/苦瓜/3.png differ diff --git a/catalogue/source/images/plant/苦瓜/4.png b/catalogue/source/images/plant/苦瓜/4.png new file mode 100644 index 0000000..21a7a18 Binary files /dev/null and b/catalogue/source/images/plant/苦瓜/4.png differ diff --git a/catalogue/source/images/plant/苦瓜/5.png b/catalogue/source/images/plant/苦瓜/5.png new file mode 100644 index 0000000..5c4f31a Binary files /dev/null and b/catalogue/source/images/plant/苦瓜/5.png differ diff --git a/catalogue/source/images/plant/苦瓜/icon.png b/catalogue/source/images/plant/苦瓜/icon.png new file mode 100644 index 0000000..d315897 Binary files /dev/null and b/catalogue/source/images/plant/苦瓜/icon.png differ diff --git a/catalogue/source/images/plant/苹果/1.png b/catalogue/source/images/plant/苹果/1.png new file mode 100644 index 0000000..73723c1 Binary files /dev/null and b/catalogue/source/images/plant/苹果/1.png differ diff --git a/catalogue/source/images/plant/苹果/2.png b/catalogue/source/images/plant/苹果/2.png new file mode 100644 index 0000000..b15422d Binary files /dev/null and b/catalogue/source/images/plant/苹果/2.png differ diff --git a/catalogue/source/images/plant/苹果/3.png b/catalogue/source/images/plant/苹果/3.png new file mode 100644 index 0000000..caec43b Binary files /dev/null and b/catalogue/source/images/plant/苹果/3.png differ diff --git a/catalogue/source/images/plant/苹果/4.png b/catalogue/source/images/plant/苹果/4.png new file mode 100644 index 0000000..64bd78f Binary files /dev/null and b/catalogue/source/images/plant/苹果/4.png differ diff --git a/catalogue/source/images/plant/苹果/5.png b/catalogue/source/images/plant/苹果/5.png new file mode 100644 index 0000000..fafcaf9 Binary files /dev/null and b/catalogue/source/images/plant/苹果/5.png differ diff --git a/catalogue/source/images/plant/苹果/icon.png b/catalogue/source/images/plant/苹果/icon.png new file mode 100644 index 0000000..cbfebd8 Binary files /dev/null and b/catalogue/source/images/plant/苹果/icon.png differ diff --git a/catalogue/source/images/plant/茄子/1.png b/catalogue/source/images/plant/茄子/1.png new file mode 100644 index 0000000..756cc45 Binary files /dev/null and b/catalogue/source/images/plant/茄子/1.png differ diff --git a/catalogue/source/images/plant/茄子/2.png b/catalogue/source/images/plant/茄子/2.png new file mode 100644 index 0000000..0e79a5d Binary files /dev/null and b/catalogue/source/images/plant/茄子/2.png differ diff --git a/catalogue/source/images/plant/茄子/3.png b/catalogue/source/images/plant/茄子/3.png new file mode 100644 index 0000000..d86d25b Binary files /dev/null and b/catalogue/source/images/plant/茄子/3.png differ diff --git a/catalogue/source/images/plant/茄子/4.png b/catalogue/source/images/plant/茄子/4.png new file mode 100644 index 0000000..29389cc Binary files /dev/null and b/catalogue/source/images/plant/茄子/4.png differ diff --git a/catalogue/source/images/plant/茄子/5.png b/catalogue/source/images/plant/茄子/5.png new file mode 100644 index 0000000..ea060b1 Binary files /dev/null and b/catalogue/source/images/plant/茄子/5.png differ diff --git a/catalogue/source/images/plant/茄子/icon.png b/catalogue/source/images/plant/茄子/icon.png new file mode 100644 index 0000000..84b4597 Binary files /dev/null and b/catalogue/source/images/plant/茄子/icon.png differ diff --git a/catalogue/source/images/plant/草莓/1.png b/catalogue/source/images/plant/草莓/1.png new file mode 100644 index 0000000..8e4679f Binary files /dev/null and b/catalogue/source/images/plant/草莓/1.png differ diff --git a/catalogue/source/images/plant/草莓/2.png b/catalogue/source/images/plant/草莓/2.png new file mode 100644 index 0000000..ae4c4f0 Binary files /dev/null and b/catalogue/source/images/plant/草莓/2.png differ diff --git a/catalogue/source/images/plant/草莓/3.png b/catalogue/source/images/plant/草莓/3.png new file mode 100644 index 0000000..baab9ac Binary files /dev/null and b/catalogue/source/images/plant/草莓/3.png differ diff --git a/catalogue/source/images/plant/草莓/4.png b/catalogue/source/images/plant/草莓/4.png new file mode 100644 index 0000000..5a795b7 Binary files /dev/null and b/catalogue/source/images/plant/草莓/4.png differ diff --git a/catalogue/source/images/plant/草莓/5.png b/catalogue/source/images/plant/草莓/5.png new file mode 100644 index 0000000..7bfd509 Binary files /dev/null and b/catalogue/source/images/plant/草莓/5.png differ diff --git a/catalogue/source/images/plant/草莓/icon.png b/catalogue/source/images/plant/草莓/icon.png new file mode 100644 index 0000000..8c1e2c2 Binary files /dev/null and b/catalogue/source/images/plant/草莓/icon.png differ diff --git a/catalogue/source/images/plant/荔枝/1.png b/catalogue/source/images/plant/荔枝/1.png new file mode 100644 index 0000000..35d2635 Binary files /dev/null and b/catalogue/source/images/plant/荔枝/1.png differ diff --git a/catalogue/source/images/plant/荔枝/2.png b/catalogue/source/images/plant/荔枝/2.png new file mode 100644 index 0000000..9520284 Binary files /dev/null and b/catalogue/source/images/plant/荔枝/2.png differ diff --git a/catalogue/source/images/plant/荔枝/3.png b/catalogue/source/images/plant/荔枝/3.png new file mode 100644 index 0000000..5d05fcd Binary files /dev/null and b/catalogue/source/images/plant/荔枝/3.png differ diff --git a/catalogue/source/images/plant/荔枝/4.png b/catalogue/source/images/plant/荔枝/4.png new file mode 100644 index 0000000..5b3adce Binary files /dev/null and b/catalogue/source/images/plant/荔枝/4.png differ diff --git a/catalogue/source/images/plant/荔枝/5.png b/catalogue/source/images/plant/荔枝/5.png new file mode 100644 index 0000000..12d52a0 Binary files /dev/null and b/catalogue/source/images/plant/荔枝/5.png differ diff --git a/catalogue/source/images/plant/荔枝/icon.png b/catalogue/source/images/plant/荔枝/icon.png new file mode 100644 index 0000000..1c36ae7 Binary files /dev/null and b/catalogue/source/images/plant/荔枝/icon.png differ diff --git a/catalogue/source/images/plant/莲藕/1.png b/catalogue/source/images/plant/莲藕/1.png new file mode 100644 index 0000000..c318b07 Binary files /dev/null and b/catalogue/source/images/plant/莲藕/1.png differ diff --git a/catalogue/source/images/plant/莲藕/2.png b/catalogue/source/images/plant/莲藕/2.png new file mode 100644 index 0000000..d9ca2b5 Binary files /dev/null and b/catalogue/source/images/plant/莲藕/2.png differ diff --git a/catalogue/source/images/plant/莲藕/3.png b/catalogue/source/images/plant/莲藕/3.png new file mode 100644 index 0000000..7ab1121 Binary files /dev/null and b/catalogue/source/images/plant/莲藕/3.png differ diff --git a/catalogue/source/images/plant/莲藕/4.png b/catalogue/source/images/plant/莲藕/4.png new file mode 100644 index 0000000..51d3179 Binary files /dev/null and b/catalogue/source/images/plant/莲藕/4.png differ diff --git a/catalogue/source/images/plant/莲藕/5.png b/catalogue/source/images/plant/莲藕/5.png new file mode 100644 index 0000000..f7280f8 Binary files /dev/null and b/catalogue/source/images/plant/莲藕/5.png differ diff --git a/catalogue/source/images/plant/莲藕/icon.png b/catalogue/source/images/plant/莲藕/icon.png new file mode 100644 index 0000000..9853d7b Binary files /dev/null and b/catalogue/source/images/plant/莲藕/icon.png differ diff --git a/catalogue/source/images/plant/莲雾/1.png b/catalogue/source/images/plant/莲雾/1.png new file mode 100644 index 0000000..94d269d Binary files /dev/null and b/catalogue/source/images/plant/莲雾/1.png differ diff --git a/catalogue/source/images/plant/莲雾/2.png b/catalogue/source/images/plant/莲雾/2.png new file mode 100644 index 0000000..fb8cc68 Binary files /dev/null and b/catalogue/source/images/plant/莲雾/2.png differ diff --git a/catalogue/source/images/plant/莲雾/3.png b/catalogue/source/images/plant/莲雾/3.png new file mode 100644 index 0000000..581d209 Binary files /dev/null and b/catalogue/source/images/plant/莲雾/3.png differ diff --git a/catalogue/source/images/plant/莲雾/4.png b/catalogue/source/images/plant/莲雾/4.png new file mode 100644 index 0000000..791f9d7 Binary files /dev/null and b/catalogue/source/images/plant/莲雾/4.png differ diff --git a/catalogue/source/images/plant/莲雾/5.png b/catalogue/source/images/plant/莲雾/5.png new file mode 100644 index 0000000..a721a88 Binary files /dev/null and b/catalogue/source/images/plant/莲雾/5.png differ diff --git a/catalogue/source/images/plant/莲雾/icon.png b/catalogue/source/images/plant/莲雾/icon.png new file mode 100644 index 0000000..dd6c163 Binary files /dev/null and b/catalogue/source/images/plant/莲雾/icon.png differ diff --git a/catalogue/source/images/plant/菠萝/1.png b/catalogue/source/images/plant/菠萝/1.png new file mode 100644 index 0000000..6812fa1 Binary files /dev/null and b/catalogue/source/images/plant/菠萝/1.png differ diff --git a/catalogue/source/images/plant/菠萝/2.png b/catalogue/source/images/plant/菠萝/2.png new file mode 100644 index 0000000..2dcd2b4 Binary files /dev/null and b/catalogue/source/images/plant/菠萝/2.png differ diff --git a/catalogue/source/images/plant/菠萝/3.png b/catalogue/source/images/plant/菠萝/3.png new file mode 100644 index 0000000..28283e4 Binary files /dev/null and b/catalogue/source/images/plant/菠萝/3.png differ diff --git a/catalogue/source/images/plant/菠萝/4.png b/catalogue/source/images/plant/菠萝/4.png new file mode 100644 index 0000000..35aac72 Binary files /dev/null and b/catalogue/source/images/plant/菠萝/4.png differ diff --git a/catalogue/source/images/plant/菠萝/5.png b/catalogue/source/images/plant/菠萝/5.png new file mode 100644 index 0000000..6aafc09 Binary files /dev/null and b/catalogue/source/images/plant/菠萝/5.png differ diff --git a/catalogue/source/images/plant/菠萝/icon.png b/catalogue/source/images/plant/菠萝/icon.png new file mode 100644 index 0000000..c1f6af2 Binary files /dev/null and b/catalogue/source/images/plant/菠萝/icon.png differ diff --git a/catalogue/source/images/plant/菠萝蜜/1.png b/catalogue/source/images/plant/菠萝蜜/1.png new file mode 100644 index 0000000..abd7222 Binary files /dev/null and b/catalogue/source/images/plant/菠萝蜜/1.png differ diff --git a/catalogue/source/images/plant/菠萝蜜/2.png b/catalogue/source/images/plant/菠萝蜜/2.png new file mode 100644 index 0000000..c0db282 Binary files /dev/null and b/catalogue/source/images/plant/菠萝蜜/2.png differ diff --git a/catalogue/source/images/plant/菠萝蜜/3.png b/catalogue/source/images/plant/菠萝蜜/3.png new file mode 100644 index 0000000..a7796e9 Binary files /dev/null and b/catalogue/source/images/plant/菠萝蜜/3.png differ diff --git a/catalogue/source/images/plant/菠萝蜜/4.png b/catalogue/source/images/plant/菠萝蜜/4.png new file mode 100644 index 0000000..82fb5e3 Binary files /dev/null and b/catalogue/source/images/plant/菠萝蜜/4.png differ diff --git a/catalogue/source/images/plant/菠萝蜜/5.png b/catalogue/source/images/plant/菠萝蜜/5.png new file mode 100644 index 0000000..35c4a93 Binary files /dev/null and b/catalogue/source/images/plant/菠萝蜜/5.png differ diff --git a/catalogue/source/images/plant/菠萝蜜/icon.png b/catalogue/source/images/plant/菠萝蜜/icon.png new file mode 100644 index 0000000..ee02d77 Binary files /dev/null and b/catalogue/source/images/plant/菠萝蜜/icon.png differ diff --git a/catalogue/source/images/plant/葡萄/1.png b/catalogue/source/images/plant/葡萄/1.png new file mode 100644 index 0000000..9d3468f Binary files /dev/null and b/catalogue/source/images/plant/葡萄/1.png differ diff --git a/catalogue/source/images/plant/葡萄/2.png b/catalogue/source/images/plant/葡萄/2.png new file mode 100644 index 0000000..ede6d7b Binary files /dev/null and b/catalogue/source/images/plant/葡萄/2.png differ diff --git a/catalogue/source/images/plant/葡萄/3.png b/catalogue/source/images/plant/葡萄/3.png new file mode 100644 index 0000000..b45c167 Binary files /dev/null and b/catalogue/source/images/plant/葡萄/3.png differ diff --git a/catalogue/source/images/plant/葡萄/4.png b/catalogue/source/images/plant/葡萄/4.png new file mode 100644 index 0000000..d123831 Binary files /dev/null and b/catalogue/source/images/plant/葡萄/4.png differ diff --git a/catalogue/source/images/plant/葡萄/5.png b/catalogue/source/images/plant/葡萄/5.png new file mode 100644 index 0000000..235a9b1 Binary files /dev/null and b/catalogue/source/images/plant/葡萄/5.png differ diff --git a/catalogue/source/images/plant/葡萄/icon.png b/catalogue/source/images/plant/葡萄/icon.png new file mode 100644 index 0000000..f55ca8e Binary files /dev/null and b/catalogue/source/images/plant/葡萄/icon.png differ diff --git a/catalogue/source/images/plant/葫芦/1.png b/catalogue/source/images/plant/葫芦/1.png new file mode 100644 index 0000000..ef9ae8c Binary files /dev/null and b/catalogue/source/images/plant/葫芦/1.png differ diff --git a/catalogue/source/images/plant/葫芦/2.png b/catalogue/source/images/plant/葫芦/2.png new file mode 100644 index 0000000..dbdfb0b Binary files /dev/null and b/catalogue/source/images/plant/葫芦/2.png differ diff --git a/catalogue/source/images/plant/葫芦/3.png b/catalogue/source/images/plant/葫芦/3.png new file mode 100644 index 0000000..3827138 Binary files /dev/null and b/catalogue/source/images/plant/葫芦/3.png differ diff --git a/catalogue/source/images/plant/葫芦/4.png b/catalogue/source/images/plant/葫芦/4.png new file mode 100644 index 0000000..711f403 Binary files /dev/null and b/catalogue/source/images/plant/葫芦/4.png differ diff --git a/catalogue/source/images/plant/葫芦/5.png b/catalogue/source/images/plant/葫芦/5.png new file mode 100644 index 0000000..d23c252 Binary files /dev/null and b/catalogue/source/images/plant/葫芦/5.png differ diff --git a/catalogue/source/images/plant/葫芦/icon.png b/catalogue/source/images/plant/葫芦/icon.png new file mode 100644 index 0000000..83e3559 Binary files /dev/null and b/catalogue/source/images/plant/葫芦/icon.png differ diff --git a/catalogue/source/images/plant/蓝莓/1.png b/catalogue/source/images/plant/蓝莓/1.png new file mode 100644 index 0000000..a9f5878 Binary files /dev/null and b/catalogue/source/images/plant/蓝莓/1.png differ diff --git a/catalogue/source/images/plant/蓝莓/2.png b/catalogue/source/images/plant/蓝莓/2.png new file mode 100644 index 0000000..dce2c96 Binary files /dev/null and b/catalogue/source/images/plant/蓝莓/2.png differ diff --git a/catalogue/source/images/plant/蓝莓/3.png b/catalogue/source/images/plant/蓝莓/3.png new file mode 100644 index 0000000..b0492d4 Binary files /dev/null and b/catalogue/source/images/plant/蓝莓/3.png differ diff --git a/catalogue/source/images/plant/蓝莓/4.png b/catalogue/source/images/plant/蓝莓/4.png new file mode 100644 index 0000000..8499c88 Binary files /dev/null and b/catalogue/source/images/plant/蓝莓/4.png differ diff --git a/catalogue/source/images/plant/蓝莓/5.png b/catalogue/source/images/plant/蓝莓/5.png new file mode 100644 index 0000000..a9e33d2 Binary files /dev/null and b/catalogue/source/images/plant/蓝莓/5.png differ diff --git a/catalogue/source/images/plant/蓝莓/icon.png b/catalogue/source/images/plant/蓝莓/icon.png new file mode 100644 index 0000000..b849329 Binary files /dev/null and b/catalogue/source/images/plant/蓝莓/icon.png differ diff --git a/catalogue/source/images/plant/薄荷/1.png b/catalogue/source/images/plant/薄荷/1.png new file mode 100644 index 0000000..e181ef5 Binary files /dev/null and b/catalogue/source/images/plant/薄荷/1.png differ diff --git a/catalogue/source/images/plant/薄荷/2.png b/catalogue/source/images/plant/薄荷/2.png new file mode 100644 index 0000000..3e966c0 Binary files /dev/null and b/catalogue/source/images/plant/薄荷/2.png differ diff --git a/catalogue/source/images/plant/薄荷/3.png b/catalogue/source/images/plant/薄荷/3.png new file mode 100644 index 0000000..1315a27 Binary files /dev/null and b/catalogue/source/images/plant/薄荷/3.png differ diff --git a/catalogue/source/images/plant/薄荷/4.png b/catalogue/source/images/plant/薄荷/4.png new file mode 100644 index 0000000..b9aea49 Binary files /dev/null and b/catalogue/source/images/plant/薄荷/4.png differ diff --git a/catalogue/source/images/plant/薄荷/5.png b/catalogue/source/images/plant/薄荷/5.png new file mode 100644 index 0000000..379116f Binary files /dev/null and b/catalogue/source/images/plant/薄荷/5.png differ diff --git a/catalogue/source/images/plant/薄荷/icon.png b/catalogue/source/images/plant/薄荷/icon.png new file mode 100644 index 0000000..1ca096c Binary files /dev/null and b/catalogue/source/images/plant/薄荷/icon.png differ diff --git a/catalogue/source/images/plant/蘑菇/1.png b/catalogue/source/images/plant/蘑菇/1.png new file mode 100644 index 0000000..e236a9b Binary files /dev/null and b/catalogue/source/images/plant/蘑菇/1.png differ diff --git a/catalogue/source/images/plant/蘑菇/2.png b/catalogue/source/images/plant/蘑菇/2.png new file mode 100644 index 0000000..658d5d8 Binary files /dev/null and b/catalogue/source/images/plant/蘑菇/2.png differ diff --git a/catalogue/source/images/plant/蘑菇/3.png b/catalogue/source/images/plant/蘑菇/3.png new file mode 100644 index 0000000..9a369f4 Binary files /dev/null and b/catalogue/source/images/plant/蘑菇/3.png differ diff --git a/catalogue/source/images/plant/蘑菇/4.png b/catalogue/source/images/plant/蘑菇/4.png new file mode 100644 index 0000000..5bc6fc1 Binary files /dev/null and b/catalogue/source/images/plant/蘑菇/4.png differ diff --git a/catalogue/source/images/plant/蘑菇/5.png b/catalogue/source/images/plant/蘑菇/5.png new file mode 100644 index 0000000..d4eb329 Binary files /dev/null and b/catalogue/source/images/plant/蘑菇/5.png differ diff --git a/catalogue/source/images/plant/蘑菇/icon.png b/catalogue/source/images/plant/蘑菇/icon.png new file mode 100644 index 0000000..2bb9b8f Binary files /dev/null and b/catalogue/source/images/plant/蘑菇/icon.png differ diff --git a/catalogue/source/images/plant/蛋黄果/1.png b/catalogue/source/images/plant/蛋黄果/1.png new file mode 100644 index 0000000..89aa0f3 Binary files /dev/null and b/catalogue/source/images/plant/蛋黄果/1.png differ diff --git a/catalogue/source/images/plant/蛋黄果/2.png b/catalogue/source/images/plant/蛋黄果/2.png new file mode 100644 index 0000000..49d746b Binary files /dev/null and b/catalogue/source/images/plant/蛋黄果/2.png differ diff --git a/catalogue/source/images/plant/蛋黄果/3.png b/catalogue/source/images/plant/蛋黄果/3.png new file mode 100644 index 0000000..7c9bfe3 Binary files /dev/null and b/catalogue/source/images/plant/蛋黄果/3.png differ diff --git a/catalogue/source/images/plant/蛋黄果/4.png b/catalogue/source/images/plant/蛋黄果/4.png new file mode 100644 index 0000000..e383979 Binary files /dev/null and b/catalogue/source/images/plant/蛋黄果/4.png differ diff --git a/catalogue/source/images/plant/蛋黄果/5.png b/catalogue/source/images/plant/蛋黄果/5.png new file mode 100644 index 0000000..f81ff0e Binary files /dev/null and b/catalogue/source/images/plant/蛋黄果/5.png differ diff --git a/catalogue/source/images/plant/蛋黄果/icon.png b/catalogue/source/images/plant/蛋黄果/icon.png new file mode 100644 index 0000000..3a23a5b Binary files /dev/null and b/catalogue/source/images/plant/蛋黄果/icon.png differ diff --git a/catalogue/source/images/plant/蜜思桃/1.png b/catalogue/source/images/plant/蜜思桃/1.png new file mode 100644 index 0000000..55fb940 Binary files /dev/null and b/catalogue/source/images/plant/蜜思桃/1.png differ diff --git a/catalogue/source/images/plant/蜜思桃/2.png b/catalogue/source/images/plant/蜜思桃/2.png new file mode 100644 index 0000000..00fdd1e Binary files /dev/null and b/catalogue/source/images/plant/蜜思桃/2.png differ diff --git a/catalogue/source/images/plant/蜜思桃/3.png b/catalogue/source/images/plant/蜜思桃/3.png new file mode 100644 index 0000000..d06c7ec Binary files /dev/null and b/catalogue/source/images/plant/蜜思桃/3.png differ diff --git a/catalogue/source/images/plant/蜜思桃/4.png b/catalogue/source/images/plant/蜜思桃/4.png new file mode 100644 index 0000000..412f9c8 Binary files /dev/null and b/catalogue/source/images/plant/蜜思桃/4.png differ diff --git a/catalogue/source/images/plant/蜜思桃/5.png b/catalogue/source/images/plant/蜜思桃/5.png new file mode 100644 index 0000000..1c7ea90 Binary files /dev/null and b/catalogue/source/images/plant/蜜思桃/5.png differ diff --git a/catalogue/source/images/plant/蜜思桃/icon.png b/catalogue/source/images/plant/蜜思桃/icon.png new file mode 100644 index 0000000..fff083d Binary files /dev/null and b/catalogue/source/images/plant/蜜思桃/icon.png differ diff --git a/catalogue/source/images/plant/西瓜/1.png b/catalogue/source/images/plant/西瓜/1.png new file mode 100644 index 0000000..aa3ede9 Binary files /dev/null and b/catalogue/source/images/plant/西瓜/1.png differ diff --git a/catalogue/source/images/plant/西瓜/2.png b/catalogue/source/images/plant/西瓜/2.png new file mode 100644 index 0000000..0f04356 Binary files /dev/null and b/catalogue/source/images/plant/西瓜/2.png differ diff --git a/catalogue/source/images/plant/西瓜/3.png b/catalogue/source/images/plant/西瓜/3.png new file mode 100644 index 0000000..5988384 Binary files /dev/null and b/catalogue/source/images/plant/西瓜/3.png differ diff --git a/catalogue/source/images/plant/西瓜/4.png b/catalogue/source/images/plant/西瓜/4.png new file mode 100644 index 0000000..f69c54c Binary files /dev/null and b/catalogue/source/images/plant/西瓜/4.png differ diff --git a/catalogue/source/images/plant/西瓜/5.png b/catalogue/source/images/plant/西瓜/5.png new file mode 100644 index 0000000..df47f0d Binary files /dev/null and b/catalogue/source/images/plant/西瓜/5.png differ diff --git a/catalogue/source/images/plant/西瓜/icon.png b/catalogue/source/images/plant/西瓜/icon.png new file mode 100644 index 0000000..63425ce Binary files /dev/null and b/catalogue/source/images/plant/西瓜/icon.png differ diff --git a/catalogue/source/images/plant/豌豆/1.png b/catalogue/source/images/plant/豌豆/1.png new file mode 100644 index 0000000..9d1fa0a Binary files /dev/null and b/catalogue/source/images/plant/豌豆/1.png differ diff --git a/catalogue/source/images/plant/豌豆/2.png b/catalogue/source/images/plant/豌豆/2.png new file mode 100644 index 0000000..0600ee0 Binary files /dev/null and b/catalogue/source/images/plant/豌豆/2.png differ diff --git a/catalogue/source/images/plant/豌豆/3.png b/catalogue/source/images/plant/豌豆/3.png new file mode 100644 index 0000000..d78380c Binary files /dev/null and b/catalogue/source/images/plant/豌豆/3.png differ diff --git a/catalogue/source/images/plant/豌豆/4.png b/catalogue/source/images/plant/豌豆/4.png new file mode 100644 index 0000000..ebdaf6b Binary files /dev/null and b/catalogue/source/images/plant/豌豆/4.png differ diff --git a/catalogue/source/images/plant/豌豆/5.png b/catalogue/source/images/plant/豌豆/5.png new file mode 100644 index 0000000..4e61f5b Binary files /dev/null and b/catalogue/source/images/plant/豌豆/5.png differ diff --git a/catalogue/source/images/plant/豌豆/icon.png b/catalogue/source/images/plant/豌豆/icon.png new file mode 100644 index 0000000..7bf7e81 Binary files /dev/null and b/catalogue/source/images/plant/豌豆/icon.png differ diff --git a/catalogue/source/images/plant/辣椒/1.png b/catalogue/source/images/plant/辣椒/1.png new file mode 100644 index 0000000..45796af Binary files /dev/null and b/catalogue/source/images/plant/辣椒/1.png differ diff --git a/catalogue/source/images/plant/辣椒/2.png b/catalogue/source/images/plant/辣椒/2.png new file mode 100644 index 0000000..95ab99b Binary files /dev/null and b/catalogue/source/images/plant/辣椒/2.png differ diff --git a/catalogue/source/images/plant/辣椒/3.png b/catalogue/source/images/plant/辣椒/3.png new file mode 100644 index 0000000..1897d68 Binary files /dev/null and b/catalogue/source/images/plant/辣椒/3.png differ diff --git a/catalogue/source/images/plant/辣椒/4.png b/catalogue/source/images/plant/辣椒/4.png new file mode 100644 index 0000000..0b4d2d0 Binary files /dev/null and b/catalogue/source/images/plant/辣椒/4.png differ diff --git a/catalogue/source/images/plant/辣椒/5.png b/catalogue/source/images/plant/辣椒/5.png new file mode 100644 index 0000000..6eceed0 Binary files /dev/null and b/catalogue/source/images/plant/辣椒/5.png differ diff --git a/catalogue/source/images/plant/辣椒/icon.png b/catalogue/source/images/plant/辣椒/icon.png new file mode 100644 index 0000000..d22314a Binary files /dev/null and b/catalogue/source/images/plant/辣椒/icon.png differ diff --git a/catalogue/source/images/plant/迎春花/1.png b/catalogue/source/images/plant/迎春花/1.png new file mode 100644 index 0000000..9c36d2e Binary files /dev/null and b/catalogue/source/images/plant/迎春花/1.png differ diff --git a/catalogue/source/images/plant/迎春花/2.png b/catalogue/source/images/plant/迎春花/2.png new file mode 100644 index 0000000..9bce08e Binary files /dev/null and b/catalogue/source/images/plant/迎春花/2.png differ diff --git a/catalogue/source/images/plant/迎春花/3.png b/catalogue/source/images/plant/迎春花/3.png new file mode 100644 index 0000000..a7bfc56 Binary files /dev/null and b/catalogue/source/images/plant/迎春花/3.png differ diff --git a/catalogue/source/images/plant/迎春花/4.png b/catalogue/source/images/plant/迎春花/4.png new file mode 100644 index 0000000..72a2ed8 Binary files /dev/null and b/catalogue/source/images/plant/迎春花/4.png differ diff --git a/catalogue/source/images/plant/迎春花/5.png b/catalogue/source/images/plant/迎春花/5.png new file mode 100644 index 0000000..4bf920b Binary files /dev/null and b/catalogue/source/images/plant/迎春花/5.png differ diff --git a/catalogue/source/images/plant/迎春花/icon.png b/catalogue/source/images/plant/迎春花/icon.png new file mode 100644 index 0000000..4273689 Binary files /dev/null and b/catalogue/source/images/plant/迎春花/icon.png differ diff --git a/catalogue/source/images/plant/金桔/1.png b/catalogue/source/images/plant/金桔/1.png new file mode 100644 index 0000000..a3c3f49 Binary files /dev/null and b/catalogue/source/images/plant/金桔/1.png differ diff --git a/catalogue/source/images/plant/金桔/2.png b/catalogue/source/images/plant/金桔/2.png new file mode 100644 index 0000000..38273b4 Binary files /dev/null and b/catalogue/source/images/plant/金桔/2.png differ diff --git a/catalogue/source/images/plant/金桔/3.png b/catalogue/source/images/plant/金桔/3.png new file mode 100644 index 0000000..3dd5b76 Binary files /dev/null and b/catalogue/source/images/plant/金桔/3.png differ diff --git a/catalogue/source/images/plant/金桔/4.png b/catalogue/source/images/plant/金桔/4.png new file mode 100644 index 0000000..f72ad68 Binary files /dev/null and b/catalogue/source/images/plant/金桔/4.png differ diff --git a/catalogue/source/images/plant/金桔/5.png b/catalogue/source/images/plant/金桔/5.png new file mode 100644 index 0000000..9568b0e Binary files /dev/null and b/catalogue/source/images/plant/金桔/5.png differ diff --git a/catalogue/source/images/plant/金桔/icon.png b/catalogue/source/images/plant/金桔/icon.png new file mode 100644 index 0000000..a28125e Binary files /dev/null and b/catalogue/source/images/plant/金桔/icon.png differ diff --git a/catalogue/source/images/plant/金针菇/1.png b/catalogue/source/images/plant/金针菇/1.png new file mode 100644 index 0000000..b4e88d8 Binary files /dev/null and b/catalogue/source/images/plant/金针菇/1.png differ diff --git a/catalogue/source/images/plant/金针菇/2.png b/catalogue/source/images/plant/金针菇/2.png new file mode 100644 index 0000000..23e1f39 Binary files /dev/null and b/catalogue/source/images/plant/金针菇/2.png differ diff --git a/catalogue/source/images/plant/金针菇/3.png b/catalogue/source/images/plant/金针菇/3.png new file mode 100644 index 0000000..774969c Binary files /dev/null and b/catalogue/source/images/plant/金针菇/3.png differ diff --git a/catalogue/source/images/plant/金针菇/4.png b/catalogue/source/images/plant/金针菇/4.png new file mode 100644 index 0000000..afbc2e8 Binary files /dev/null and b/catalogue/source/images/plant/金针菇/4.png differ diff --git a/catalogue/source/images/plant/金针菇/5.png b/catalogue/source/images/plant/金针菇/5.png new file mode 100644 index 0000000..bc42f76 Binary files /dev/null and b/catalogue/source/images/plant/金针菇/5.png differ diff --git a/catalogue/source/images/plant/金针菇/icon.png b/catalogue/source/images/plant/金针菇/icon.png new file mode 100644 index 0000000..2bc2f99 Binary files /dev/null and b/catalogue/source/images/plant/金针菇/icon.png differ diff --git a/catalogue/source/images/plant/韭菜/1.png b/catalogue/source/images/plant/韭菜/1.png new file mode 100644 index 0000000..9469c84 Binary files /dev/null and b/catalogue/source/images/plant/韭菜/1.png differ diff --git a/catalogue/source/images/plant/韭菜/2.png b/catalogue/source/images/plant/韭菜/2.png new file mode 100644 index 0000000..7377528 Binary files /dev/null and b/catalogue/source/images/plant/韭菜/2.png differ diff --git a/catalogue/source/images/plant/韭菜/3.png b/catalogue/source/images/plant/韭菜/3.png new file mode 100644 index 0000000..ee2588e Binary files /dev/null and b/catalogue/source/images/plant/韭菜/3.png differ diff --git a/catalogue/source/images/plant/韭菜/4.png b/catalogue/source/images/plant/韭菜/4.png new file mode 100644 index 0000000..a7c24b0 Binary files /dev/null and b/catalogue/source/images/plant/韭菜/4.png differ diff --git a/catalogue/source/images/plant/韭菜/5.png b/catalogue/source/images/plant/韭菜/5.png new file mode 100644 index 0000000..67b0c4f Binary files /dev/null and b/catalogue/source/images/plant/韭菜/5.png differ diff --git a/catalogue/source/images/plant/韭菜/icon.png b/catalogue/source/images/plant/韭菜/icon.png new file mode 100644 index 0000000..8f73979 Binary files /dev/null and b/catalogue/source/images/plant/韭菜/icon.png differ diff --git a/catalogue/source/images/plant/香瓜/1.png b/catalogue/source/images/plant/香瓜/1.png new file mode 100644 index 0000000..e0a9606 Binary files /dev/null and b/catalogue/source/images/plant/香瓜/1.png differ diff --git a/catalogue/source/images/plant/香瓜/2.png b/catalogue/source/images/plant/香瓜/2.png new file mode 100644 index 0000000..f9dcb96 Binary files /dev/null and b/catalogue/source/images/plant/香瓜/2.png differ diff --git a/catalogue/source/images/plant/香瓜/3.png b/catalogue/source/images/plant/香瓜/3.png new file mode 100644 index 0000000..5186877 Binary files /dev/null and b/catalogue/source/images/plant/香瓜/3.png differ diff --git a/catalogue/source/images/plant/香瓜/4.png b/catalogue/source/images/plant/香瓜/4.png new file mode 100644 index 0000000..3862f34 Binary files /dev/null and b/catalogue/source/images/plant/香瓜/4.png differ diff --git a/catalogue/source/images/plant/香瓜/5.png b/catalogue/source/images/plant/香瓜/5.png new file mode 100644 index 0000000..021152e Binary files /dev/null and b/catalogue/source/images/plant/香瓜/5.png differ diff --git a/catalogue/source/images/plant/香瓜/icon.png b/catalogue/source/images/plant/香瓜/icon.png new file mode 100644 index 0000000..a4a33f2 Binary files /dev/null and b/catalogue/source/images/plant/香瓜/icon.png differ diff --git a/catalogue/source/images/plant/香粽龙舟/1.png b/catalogue/source/images/plant/香粽龙舟/1.png new file mode 100644 index 0000000..2feafb4 Binary files /dev/null and b/catalogue/source/images/plant/香粽龙舟/1.png differ diff --git a/catalogue/source/images/plant/香粽龙舟/2.png b/catalogue/source/images/plant/香粽龙舟/2.png new file mode 100644 index 0000000..64b9a2a Binary files /dev/null and b/catalogue/source/images/plant/香粽龙舟/2.png differ diff --git a/catalogue/source/images/plant/香粽龙舟/3.png b/catalogue/source/images/plant/香粽龙舟/3.png new file mode 100644 index 0000000..e090a79 Binary files /dev/null and b/catalogue/source/images/plant/香粽龙舟/3.png differ diff --git a/catalogue/source/images/plant/香粽龙舟/4.png b/catalogue/source/images/plant/香粽龙舟/4.png new file mode 100644 index 0000000..8619dec Binary files /dev/null and b/catalogue/source/images/plant/香粽龙舟/4.png differ diff --git a/catalogue/source/images/plant/香粽龙舟/5.png b/catalogue/source/images/plant/香粽龙舟/5.png new file mode 100644 index 0000000..f857a33 Binary files /dev/null and b/catalogue/source/images/plant/香粽龙舟/5.png differ diff --git a/catalogue/source/images/plant/香粽龙舟/icon.png b/catalogue/source/images/plant/香粽龙舟/icon.png new file mode 100644 index 0000000..4328b05 Binary files /dev/null and b/catalogue/source/images/plant/香粽龙舟/icon.png differ diff --git a/catalogue/source/images/plant/香蕉/1.png b/catalogue/source/images/plant/香蕉/1.png new file mode 100644 index 0000000..70fd43c Binary files /dev/null and b/catalogue/source/images/plant/香蕉/1.png differ diff --git a/catalogue/source/images/plant/香蕉/2.png b/catalogue/source/images/plant/香蕉/2.png new file mode 100644 index 0000000..834962c Binary files /dev/null and b/catalogue/source/images/plant/香蕉/2.png differ diff --git a/catalogue/source/images/plant/香蕉/3.png b/catalogue/source/images/plant/香蕉/3.png new file mode 100644 index 0000000..ec4d60d Binary files /dev/null and b/catalogue/source/images/plant/香蕉/3.png differ diff --git a/catalogue/source/images/plant/香蕉/4.png b/catalogue/source/images/plant/香蕉/4.png new file mode 100644 index 0000000..885486f Binary files /dev/null and b/catalogue/source/images/plant/香蕉/4.png differ diff --git a/catalogue/source/images/plant/香蕉/5.png b/catalogue/source/images/plant/香蕉/5.png new file mode 100644 index 0000000..1bfc2d5 Binary files /dev/null and b/catalogue/source/images/plant/香蕉/5.png differ diff --git a/catalogue/source/images/plant/香蕉/icon.png b/catalogue/source/images/plant/香蕉/icon.png new file mode 100644 index 0000000..44640c0 Binary files /dev/null and b/catalogue/source/images/plant/香蕉/icon.png differ diff --git a/catalogue/source/images/plant/魔法神花/1.png b/catalogue/source/images/plant/魔法神花/1.png new file mode 100644 index 0000000..ccfa8bc Binary files /dev/null and b/catalogue/source/images/plant/魔法神花/1.png differ diff --git a/catalogue/source/images/plant/魔法神花/2.png b/catalogue/source/images/plant/魔法神花/2.png new file mode 100644 index 0000000..ae3d7fc Binary files /dev/null and b/catalogue/source/images/plant/魔法神花/2.png differ diff --git a/catalogue/source/images/plant/魔法神花/3.png b/catalogue/source/images/plant/魔法神花/3.png new file mode 100644 index 0000000..e111d31 Binary files /dev/null and b/catalogue/source/images/plant/魔法神花/3.png differ diff --git a/catalogue/source/images/plant/魔法神花/4.png b/catalogue/source/images/plant/魔法神花/4.png new file mode 100644 index 0000000..e61fa45 Binary files /dev/null and b/catalogue/source/images/plant/魔法神花/4.png differ diff --git a/catalogue/source/images/plant/魔法神花/5.png b/catalogue/source/images/plant/魔法神花/5.png new file mode 100644 index 0000000..e6d3956 Binary files /dev/null and b/catalogue/source/images/plant/魔法神花/5.png differ diff --git a/catalogue/source/images/plant/魔法神花/icon.png b/catalogue/source/images/plant/魔法神花/icon.png new file mode 100644 index 0000000..06f49c0 Binary files /dev/null and b/catalogue/source/images/plant/魔法神花/icon.png differ diff --git a/catalogue/source/images/plant/鳄梨/1.png b/catalogue/source/images/plant/鳄梨/1.png new file mode 100644 index 0000000..32dc54e Binary files /dev/null and b/catalogue/source/images/plant/鳄梨/1.png differ diff --git a/catalogue/source/images/plant/鳄梨/2.png b/catalogue/source/images/plant/鳄梨/2.png new file mode 100644 index 0000000..3d629a1 Binary files /dev/null and b/catalogue/source/images/plant/鳄梨/2.png differ diff --git a/catalogue/source/images/plant/鳄梨/3.png b/catalogue/source/images/plant/鳄梨/3.png new file mode 100644 index 0000000..e272b67 Binary files /dev/null and b/catalogue/source/images/plant/鳄梨/3.png differ diff --git a/catalogue/source/images/plant/鳄梨/4.png b/catalogue/source/images/plant/鳄梨/4.png new file mode 100644 index 0000000..d9cada3 Binary files /dev/null and b/catalogue/source/images/plant/鳄梨/4.png differ diff --git a/catalogue/source/images/plant/鳄梨/5.png b/catalogue/source/images/plant/鳄梨/5.png new file mode 100644 index 0000000..3034132 Binary files /dev/null and b/catalogue/source/images/plant/鳄梨/5.png differ diff --git a/catalogue/source/images/plant/鳄梨/icon.png b/catalogue/source/images/plant/鳄梨/icon.png new file mode 100644 index 0000000..8cd8099 Binary files /dev/null and b/catalogue/source/images/plant/鳄梨/icon.png differ diff --git a/catalogue/source/images/plant/鸾风玉/1.png b/catalogue/source/images/plant/鸾风玉/1.png new file mode 100644 index 0000000..7383d18 Binary files /dev/null and b/catalogue/source/images/plant/鸾风玉/1.png differ diff --git a/catalogue/source/images/plant/鸾风玉/2.png b/catalogue/source/images/plant/鸾风玉/2.png new file mode 100644 index 0000000..084ff84 Binary files /dev/null and b/catalogue/source/images/plant/鸾风玉/2.png differ diff --git a/catalogue/source/images/plant/鸾风玉/3.png b/catalogue/source/images/plant/鸾风玉/3.png new file mode 100644 index 0000000..472adba Binary files /dev/null and b/catalogue/source/images/plant/鸾风玉/3.png differ diff --git a/catalogue/source/images/plant/鸾风玉/4.png b/catalogue/source/images/plant/鸾风玉/4.png new file mode 100644 index 0000000..52be429 Binary files /dev/null and b/catalogue/source/images/plant/鸾风玉/4.png differ diff --git a/catalogue/source/images/plant/鸾风玉/5.png b/catalogue/source/images/plant/鸾风玉/5.png new file mode 100644 index 0000000..fcecec6 Binary files /dev/null and b/catalogue/source/images/plant/鸾风玉/5.png differ diff --git a/catalogue/source/images/plant/鸾风玉/icon.png b/catalogue/source/images/plant/鸾风玉/icon.png new file mode 100644 index 0000000..a7a9c63 Binary files /dev/null and b/catalogue/source/images/plant/鸾风玉/icon.png differ diff --git a/catalogue/source/images/plant/黄瓜/1.png b/catalogue/source/images/plant/黄瓜/1.png new file mode 100644 index 0000000..3b66895 Binary files /dev/null and b/catalogue/source/images/plant/黄瓜/1.png differ diff --git a/catalogue/source/images/plant/黄瓜/2.png b/catalogue/source/images/plant/黄瓜/2.png new file mode 100644 index 0000000..379da3e Binary files /dev/null and b/catalogue/source/images/plant/黄瓜/2.png differ diff --git a/catalogue/source/images/plant/黄瓜/3.png b/catalogue/source/images/plant/黄瓜/3.png new file mode 100644 index 0000000..fa0fd52 Binary files /dev/null and b/catalogue/source/images/plant/黄瓜/3.png differ diff --git a/catalogue/source/images/plant/黄瓜/4.png b/catalogue/source/images/plant/黄瓜/4.png new file mode 100644 index 0000000..c0f07a3 Binary files /dev/null and b/catalogue/source/images/plant/黄瓜/4.png differ diff --git a/catalogue/source/images/plant/黄瓜/5.png b/catalogue/source/images/plant/黄瓜/5.png new file mode 100644 index 0000000..881d1fc Binary files /dev/null and b/catalogue/source/images/plant/黄瓜/5.png differ diff --git a/catalogue/source/images/plant/黄瓜/icon.png b/catalogue/source/images/plant/黄瓜/icon.png new file mode 100644 index 0000000..521f8aa Binary files /dev/null and b/catalogue/source/images/plant/黄瓜/icon.png differ diff --git a/catalogue/source/images/plant/黄豆/1.png b/catalogue/source/images/plant/黄豆/1.png new file mode 100644 index 0000000..5432e0b Binary files /dev/null and b/catalogue/source/images/plant/黄豆/1.png differ diff --git a/catalogue/source/images/plant/黄豆/2.png b/catalogue/source/images/plant/黄豆/2.png new file mode 100644 index 0000000..b5166ea Binary files /dev/null and b/catalogue/source/images/plant/黄豆/2.png differ diff --git a/catalogue/source/images/plant/黄豆/3.png b/catalogue/source/images/plant/黄豆/3.png new file mode 100644 index 0000000..17a1181 Binary files /dev/null and b/catalogue/source/images/plant/黄豆/3.png differ diff --git a/catalogue/source/images/plant/黄豆/4.png b/catalogue/source/images/plant/黄豆/4.png new file mode 100644 index 0000000..194b675 Binary files /dev/null and b/catalogue/source/images/plant/黄豆/4.png differ diff --git a/catalogue/source/images/plant/黄豆/5.png b/catalogue/source/images/plant/黄豆/5.png new file mode 100644 index 0000000..487d95f Binary files /dev/null and b/catalogue/source/images/plant/黄豆/5.png differ diff --git a/catalogue/source/images/plant/黄豆/icon.png b/catalogue/source/images/plant/黄豆/icon.png new file mode 100644 index 0000000..e3fb0a8 Binary files /dev/null and b/catalogue/source/images/plant/黄豆/icon.png differ diff --git a/catalogue/source/images/plant/黄金果/1.png b/catalogue/source/images/plant/黄金果/1.png new file mode 100644 index 0000000..e609a35 Binary files /dev/null and b/catalogue/source/images/plant/黄金果/1.png differ diff --git a/catalogue/source/images/plant/黄金果/2.png b/catalogue/source/images/plant/黄金果/2.png new file mode 100644 index 0000000..d215917 Binary files /dev/null and b/catalogue/source/images/plant/黄金果/2.png differ diff --git a/catalogue/source/images/plant/黄金果/3.png b/catalogue/source/images/plant/黄金果/3.png new file mode 100644 index 0000000..11992c2 Binary files /dev/null and b/catalogue/source/images/plant/黄金果/3.png differ diff --git a/catalogue/source/images/plant/黄金果/4.png b/catalogue/source/images/plant/黄金果/4.png new file mode 100644 index 0000000..e561be7 Binary files /dev/null and b/catalogue/source/images/plant/黄金果/4.png differ diff --git a/catalogue/source/images/plant/黄金果/5.png b/catalogue/source/images/plant/黄金果/5.png new file mode 100644 index 0000000..b11718d Binary files /dev/null and b/catalogue/source/images/plant/黄金果/5.png differ diff --git a/catalogue/source/images/plant/黄金果/icon.png b/catalogue/source/images/plant/黄金果/icon.png new file mode 100644 index 0000000..60d32a1 Binary files /dev/null and b/catalogue/source/images/plant/黄金果/icon.png differ diff --git a/catalogue/source/images/plant/黑布仑/1.png b/catalogue/source/images/plant/黑布仑/1.png new file mode 100644 index 0000000..ff151c8 Binary files /dev/null and b/catalogue/source/images/plant/黑布仑/1.png differ diff --git a/catalogue/source/images/plant/黑布仑/2.png b/catalogue/source/images/plant/黑布仑/2.png new file mode 100644 index 0000000..799bfe2 Binary files /dev/null and b/catalogue/source/images/plant/黑布仑/2.png differ diff --git a/catalogue/source/images/plant/黑布仑/3.png b/catalogue/source/images/plant/黑布仑/3.png new file mode 100644 index 0000000..72d2eca Binary files /dev/null and b/catalogue/source/images/plant/黑布仑/3.png differ diff --git a/catalogue/source/images/plant/黑布仑/4.png b/catalogue/source/images/plant/黑布仑/4.png new file mode 100644 index 0000000..ef0f10a Binary files /dev/null and b/catalogue/source/images/plant/黑布仑/4.png differ diff --git a/catalogue/source/images/plant/黑布仑/5.png b/catalogue/source/images/plant/黑布仑/5.png new file mode 100644 index 0000000..9a9a85f Binary files /dev/null and b/catalogue/source/images/plant/黑布仑/5.png differ diff --git a/catalogue/source/images/plant/黑布仑/icon.png b/catalogue/source/images/plant/黑布仑/icon.png new file mode 100644 index 0000000..f6c1417 Binary files /dev/null and b/catalogue/source/images/plant/黑布仑/icon.png differ diff --git a/catalogue/source/images/soil/普通土地.png b/catalogue/source/images/soil/普通土地.png new file mode 100644 index 0000000..ac01d80 Binary files /dev/null and b/catalogue/source/images/soil/普通土地.png differ diff --git a/catalogue/source/images/soil/草土地.png b/catalogue/source/images/soil/草土地.png new file mode 100644 index 0000000..e8e028b Binary files /dev/null and b/catalogue/source/images/soil/草土地.png differ diff --git a/catalogue/source/images/webgl/panel/CouponIcon.png b/catalogue/source/images/webgl/panel/CouponIcon.png new file mode 100644 index 0000000..7874d98 Binary files /dev/null and b/catalogue/source/images/webgl/panel/CouponIcon.png differ diff --git a/catalogue/source/images/webgl/panel/ExpBar.png b/catalogue/source/images/webgl/panel/ExpBar.png new file mode 100644 index 0000000..969d9ca Binary files /dev/null and b/catalogue/source/images/webgl/panel/ExpBar.png differ diff --git a/catalogue/source/images/webgl/panel/ExpProgress.png b/catalogue/source/images/webgl/panel/ExpProgress.png new file mode 100644 index 0000000..1b7a0e5 Binary files /dev/null and b/catalogue/source/images/webgl/panel/ExpProgress.png differ diff --git a/catalogue/source/images/webgl/panel/GoldIcon.png b/catalogue/source/images/webgl/panel/GoldIcon.png new file mode 100644 index 0000000..532a386 Binary files /dev/null and b/catalogue/source/images/webgl/panel/GoldIcon.png differ diff --git a/catalogue/source/images/webgl/panel/HeadFrame.png b/catalogue/source/images/webgl/panel/HeadFrame.png new file mode 100644 index 0000000..444bc1f Binary files /dev/null and b/catalogue/source/images/webgl/panel/HeadFrame.png differ diff --git a/catalogue/source/images/webgl/panel/PersionInfoBG.png b/catalogue/source/images/webgl/panel/PersionInfoBG.png new file mode 100644 index 0000000..c26b7a6 Binary files /dev/null and b/catalogue/source/images/webgl/panel/PersionInfoBG.png differ diff --git a/catalogue/source/images/webgl/seed.png b/catalogue/source/images/webgl/seed.png new file mode 100644 index 0000000..c127c67 Binary files /dev/null and b/catalogue/source/images/webgl/seed.png differ diff --git a/catalogue/source/images/webgl/shop-board.png b/catalogue/source/images/webgl/shop-board.png new file mode 100644 index 0000000..54774a5 Binary files /dev/null and b/catalogue/source/images/webgl/shop-board.png differ diff --git a/catalogue/source/images/webgl/wither.png b/catalogue/source/images/webgl/wither.png new file mode 100644 index 0000000..52b172c Binary files /dev/null and b/catalogue/source/images/webgl/wither.png differ diff --git a/catalogue/source/land-soils.zip b/catalogue/source/land-soils.zip new file mode 100644 index 0000000..9077ef8 Binary files /dev/null and b/catalogue/source/land-soils.zip differ diff --git a/catalogue/source/metadata.json b/catalogue/source/metadata.json new file mode 100644 index 0000000..e8ffdc8 --- /dev/null +++ b/catalogue/source/metadata.json @@ -0,0 +1,8407 @@ +{ + "canvas": [ + 3072, + 1872 + ], + "decorations": { + "autumn": [ + { + "basis": "prefab parent and image transforms", + "fallback": false, + "layer": "background", + "name": "房屋", + "position": [ + 1675.75, + 261.2169213483146 + ], + "size": [ + 572.14, + 527.7830786516854 + ], + "source_theme": "autumn", + "sprite": "background/decorateIcon/decorate_autumn_2.png" + }, + { + "basis": "prefab geometry and inferred runtime origin", + "fallback": false, + "layer": "background", + "name": "矿洞", + "position": [ + 1385.61, + 256.06000000000006 + ], + "size": [ + 282.88, + 282.88 + ], + "source_theme": "autumn", + "sprite": "background/decorateIcon/decorate_autumn_3.png" + }, + { + "basis": "prefab geometry and inferred runtime origin", + "fallback": false, + "layer": "background", + "name": "主题入口", + "position": [ + 860.44, + 423.6792219679634 + ], + "size": [ + 294.97, + 249.07077803203663 + ], + "source_theme": "autumn", + "sprite": "background/decorateIcon/decorate_autumn_4.png" + }, + { + "basis": "approved screenshot inverse projection", + "fallback": false, + "layer": "background", + "name": "摊位", + "position": [ + 514.2, + 554.498515625 + ], + "size": [ + 298.97, + 287.29148437500004 + ], + "source_theme": "autumn", + "sprite": "background/decorateIcon/decorate_autumn_5.png" + }, + { + "basis": "approved screenshot inverse projection", + "fallback": false, + "layer": "background", + "name": "狗窝", + "position": [ + 277.95, + 763.445234375 + ], + "size": [ + 305.25, + 205.884765625 + ], + "source_theme": "autumn", + "sprite": "background/decorateIcon/decorate_autumn_6.png" + }, + { + "basis": "approved screenshot inverse projection", + "fallback": false, + "layer": "foreground", + "name": "码头", + "position": [ + 1074.51, + 1019.67921875 + ], + "size": [ + 355.42, + 397.07078125 + ], + "source_theme": "autumn", + "sprite": "background/decorateIcon/decorate_autumn_7.png" + }, + { + "basis": "approved screenshot inverse projection", + "fallback": true, + "layer": "background", + "name": "邮箱", + "position": [ + 790.18, + 576.9633333333334 + ], + "size": [ + 104.54, + 139.38666666666666 + ], + "source_theme": "default", + "sprite": "background/decorateIcon/decorate_default_8.png" + }, + { + "basis": "approved screenshot inverse projection", + "fallback": true, + "layer": "background", + "name": "加工坊标牌", + "position": [ + 2347.77, + 756.0799999999999 + ], + "size": [ + 269.7, + 269.7 + ], + "source_theme": "default", + "sprite": "background/decorateIcon/decorate_default_9.png" + }, + { + "basis": "approved screenshot inverse projection", + "fallback": true, + "layer": "background", + "name": "稻草人标牌", + "position": [ + 1120.51, + 300.29999999999995 + ], + "size": [ + 238.34, + 238.34 + ], + "source_theme": "default", + "sprite": "background/decorateIcon/decorate_default_10.png" + } + ], + "bee": [ + { + "basis": "prefab parent and image transforms", + "fallback": false, + "layer": "background", + "name": "房屋", + "position": [ + 1675.75, + 158.36029213483152 + ], + "size": [ + 572.14, + 630.6397078651685 + ], + "source_theme": "bee", + "sprite": "background/decorateIcon/decorate_bee_2.png" + }, + { + "basis": "prefab geometry and inferred runtime origin", + "fallback": false, + "layer": "background", + "name": "矿洞", + "position": [ + 1385.61, + 256.06000000000006 + ], + "size": [ + 282.88, + 282.88 + ], + "source_theme": "bee", + "sprite": "background/decorateIcon/decorate_bee_3.png" + }, + { + "basis": "prefab geometry and inferred runtime origin", + "fallback": false, + "layer": "background", + "name": "主题入口", + "position": [ + 860.44, + 423.6792219679634 + ], + "size": [ + 294.97, + 249.07077803203663 + ], + "source_theme": "bee", + "sprite": "background/decorateIcon/decorate_bee_4.png" + }, + { + "basis": "approved screenshot inverse projection", + "fallback": false, + "layer": "background", + "name": "摊位", + "position": [ + 514.2, + 554.498515625 + ], + "size": [ + 298.97, + 287.29148437500004 + ], + "source_theme": "bee", + "sprite": "background/decorateIcon/decorate_bee_5.png" + }, + { + "basis": "approved screenshot inverse projection", + "fallback": false, + "layer": "background", + "name": "狗窝", + "position": [ + 277.95, + 763.445234375 + ], + "size": [ + 305.25, + 205.884765625 + ], + "source_theme": "bee", + "sprite": "background/decorateIcon/decorate_bee_6.png" + }, + { + "basis": "approved screenshot inverse projection", + "fallback": false, + "layer": "foreground", + "name": "码头", + "position": [ + 1074.51, + 1019.67921875 + ], + "size": [ + 355.42, + 397.07078125 + ], + "source_theme": "bee", + "sprite": "background/decorateIcon/decorate_bee_7.png" + }, + { + "basis": "approved screenshot inverse projection", + "fallback": false, + "layer": "background", + "name": "邮箱", + "position": [ + 790.18, + 576.9633333333334 + ], + "size": [ + 104.54, + 139.38666666666666 + ], + "source_theme": "bee", + "sprite": "background/decorateIcon/decorate_bee_8.png" + }, + { + "basis": "approved screenshot inverse projection", + "fallback": false, + "layer": "background", + "name": "加工坊标牌", + "position": [ + 2347.77, + 756.0799999999999 + ], + "size": [ + 269.7, + 269.7 + ], + "source_theme": "bee", + "sprite": "background/decorateIcon/decorate_bee_9.png" + }, + { + "basis": "approved screenshot inverse projection", + "fallback": true, + "layer": "background", + "name": "稻草人标牌", + "position": [ + 1120.51, + 300.29999999999995 + ], + "size": [ + 238.34, + 238.34 + ], + "source_theme": "default", + "sprite": "background/decorateIcon/decorate_default_10.png" + } + ], + "default": [ + { + "basis": "prefab parent and image transforms", + "fallback": false, + "layer": "background", + "name": "房屋", + "position": [ + 1675.75, + 158.36029213483152 + ], + "size": [ + 572.14, + 630.6397078651685 + ], + "source_theme": "default", + "sprite": "background/decorateIcon/decorate_default_2.png" + }, + { + "basis": "prefab geometry and inferred runtime origin", + "fallback": false, + "layer": "background", + "name": "矿洞", + "position": [ + 1385.61, + 256.06000000000006 + ], + "size": [ + 282.88, + 282.88 + ], + "source_theme": "default", + "sprite": "background/decorateIcon/decorate_default_3.png" + }, + { + "basis": "prefab geometry and inferred runtime origin", + "fallback": false, + "layer": "background", + "name": "主题入口", + "position": [ + 860.44, + 423.6792219679634 + ], + "size": [ + 294.97, + 249.07077803203663 + ], + "source_theme": "default", + "sprite": "background/decorateIcon/decorate_default_4.png" + }, + { + "basis": "approved screenshot inverse projection", + "fallback": false, + "layer": "background", + "name": "摊位", + "position": [ + 514.2, + 554.498515625 + ], + "size": [ + 298.97, + 287.29148437500004 + ], + "source_theme": "default", + "sprite": "background/decorateIcon/decorate_default_5.png" + }, + { + "basis": "approved screenshot inverse projection", + "fallback": false, + "layer": "background", + "name": "狗窝", + "position": [ + 277.95, + 763.445234375 + ], + "size": [ + 305.25, + 205.884765625 + ], + "source_theme": "default", + "sprite": "background/decorateIcon/decorate_default_6.png" + }, + { + "basis": "approved screenshot inverse projection", + "fallback": false, + "layer": "foreground", + "name": "码头", + "position": [ + 1074.51, + 1019.67921875 + ], + "size": [ + 355.42, + 397.07078125 + ], + "source_theme": "default", + "sprite": "background/decorateIcon/decorate_default_7.png" + }, + { + "basis": "approved screenshot inverse projection", + "fallback": false, + "layer": "background", + "name": "邮箱", + "position": [ + 790.18, + 576.9633333333334 + ], + "size": [ + 104.54, + 139.38666666666666 + ], + "source_theme": "default", + "sprite": "background/decorateIcon/decorate_default_8.png" + }, + { + "basis": "approved screenshot inverse projection", + "fallback": false, + "layer": "background", + "name": "加工坊标牌", + "position": [ + 2347.77, + 756.0799999999999 + ], + "size": [ + 269.7, + 269.7 + ], + "source_theme": "default", + "sprite": "background/decorateIcon/decorate_default_9.png" + }, + { + "basis": "approved screenshot inverse projection", + "fallback": false, + "layer": "background", + "name": "稻草人标牌", + "position": [ + 1120.51, + 300.29999999999995 + ], + "size": [ + 238.34, + 238.34 + ], + "source_theme": "default", + "sprite": "background/decorateIcon/decorate_default_10.png" + } + ], + "spring": [ + { + "basis": "prefab parent and image transforms", + "fallback": false, + "layer": "background", + "name": "房屋", + "position": [ + 1675.75, + 158.36029213483152 + ], + "size": [ + 572.14, + 630.6397078651685 + ], + "source_theme": "spring", + "sprite": "background/decorateIcon/decorate_spring_2.png" + }, + { + "basis": "prefab geometry and inferred runtime origin", + "fallback": false, + "layer": "background", + "name": "矿洞", + "position": [ + 1385.61, + 256.06000000000006 + ], + "size": [ + 282.88, + 282.88 + ], + "source_theme": "spring", + "sprite": "background/decorateIcon/decorate_spring_3.png" + }, + { + "basis": "prefab geometry and inferred runtime origin", + "fallback": false, + "layer": "background", + "name": "主题入口", + "position": [ + 860.44, + 423.6792219679634 + ], + "size": [ + 294.97, + 249.07077803203663 + ], + "source_theme": "spring", + "sprite": "background/decorateIcon/decorate_spring_4.png" + }, + { + "basis": "approved screenshot inverse projection", + "fallback": false, + "layer": "background", + "name": "摊位", + "position": [ + 514.2, + 554.498515625 + ], + "size": [ + 298.97, + 287.29148437500004 + ], + "source_theme": "spring", + "sprite": "background/decorateIcon/decorate_spring_5.png" + }, + { + "basis": "approved screenshot inverse projection", + "fallback": false, + "layer": "background", + "name": "狗窝", + "position": [ + 277.95, + 763.445234375 + ], + "size": [ + 305.25, + 205.884765625 + ], + "source_theme": "spring", + "sprite": "background/decorateIcon/decorate_spring_6.png" + }, + { + "basis": "approved screenshot inverse projection", + "fallback": false, + "layer": "foreground", + "name": "码头", + "position": [ + 1074.51, + 1019.67921875 + ], + "size": [ + 355.42, + 397.07078125 + ], + "source_theme": "spring", + "sprite": "background/decorateIcon/decorate_spring_7.png" + }, + { + "basis": "approved screenshot inverse projection", + "fallback": true, + "layer": "background", + "name": "邮箱", + "position": [ + 790.18, + 576.9633333333334 + ], + "size": [ + 104.54, + 139.38666666666666 + ], + "source_theme": "default", + "sprite": "background/decorateIcon/decorate_default_8.png" + }, + { + "basis": "approved screenshot inverse projection", + "fallback": false, + "layer": "background", + "name": "加工坊标牌", + "position": [ + 2347.77, + 756.0799999999999 + ], + "size": [ + 269.7, + 269.7 + ], + "source_theme": "spring", + "sprite": "background/decorateIcon/decorate_spring_9.png" + }, + { + "basis": "approved screenshot inverse projection", + "fallback": true, + "layer": "background", + "name": "稻草人标牌", + "position": [ + 1120.51, + 300.29999999999995 + ], + "size": [ + 238.34, + 238.34 + ], + "source_theme": "default", + "sprite": "background/decorateIcon/decorate_default_10.png" + } + ], + "summer": [ + { + "basis": "prefab parent and image transforms", + "fallback": false, + "layer": "background", + "name": "房屋", + "position": [ + 1675.75, + 158.36029213483152 + ], + "size": [ + 572.14, + 630.6397078651685 + ], + "source_theme": "summer", + "sprite": "background/decorateIcon/decorate_summer_2.png" + }, + { + "basis": "prefab geometry and inferred runtime origin", + "fallback": false, + "layer": "background", + "name": "矿洞", + "position": [ + 1385.61, + 256.06000000000006 + ], + "size": [ + 282.88, + 282.88 + ], + "source_theme": "summer", + "sprite": "background/decorateIcon/decorate_summer_3.png" + }, + { + "basis": "prefab geometry and inferred runtime origin", + "fallback": false, + "layer": "background", + "name": "主题入口", + "position": [ + 860.44, + 423.6792219679634 + ], + "size": [ + 294.97, + 249.07077803203663 + ], + "source_theme": "summer", + "sprite": "background/decorateIcon/decorate_summer_4.png" + }, + { + "basis": "approved screenshot inverse projection", + "fallback": false, + "layer": "background", + "name": "摊位", + "position": [ + 514.2, + 554.498515625 + ], + "size": [ + 298.97, + 287.29148437500004 + ], + "source_theme": "summer", + "sprite": "background/decorateIcon/decorate_summer_5.png" + }, + { + "basis": "approved screenshot inverse projection", + "fallback": false, + "layer": "background", + "name": "狗窝", + "position": [ + 277.95, + 763.445234375 + ], + "size": [ + 305.25, + 205.884765625 + ], + "source_theme": "summer", + "sprite": "background/decorateIcon/decorate_summer_6.png" + }, + { + "basis": "approved screenshot inverse projection", + "fallback": false, + "layer": "foreground", + "name": "码头", + "position": [ + 1074.51, + 1019.67921875 + ], + "size": [ + 355.42, + 397.07078125 + ], + "source_theme": "summer", + "sprite": "background/decorateIcon/decorate_summer_7.png" + }, + { + "basis": "approved screenshot inverse projection", + "fallback": true, + "layer": "background", + "name": "邮箱", + "position": [ + 790.18, + 576.9633333333334 + ], + "size": [ + 104.54, + 139.38666666666666 + ], + "source_theme": "default", + "sprite": "background/decorateIcon/decorate_default_8.png" + }, + { + "basis": "approved screenshot inverse projection", + "fallback": false, + "layer": "background", + "name": "加工坊标牌", + "position": [ + 2347.77, + 756.0799999999999 + ], + "size": [ + 269.7, + 269.7 + ], + "source_theme": "summer", + "sprite": "background/decorateIcon/decorate_summer_9.png" + }, + { + "basis": "approved screenshot inverse projection", + "fallback": true, + "layer": "background", + "name": "稻草人标牌", + "position": [ + 1120.51, + 300.29999999999995 + ], + "size": [ + 238.34, + 238.34 + ], + "source_theme": "default", + "sprite": "background/decorateIcon/decorate_default_10.png" + } + ], + "winter": [ + { + "basis": "prefab parent and image transforms", + "fallback": false, + "layer": "background", + "name": "房屋", + "position": [ + 1675.75, + 261.2169213483146 + ], + "size": [ + 572.14, + 527.7830786516854 + ], + "source_theme": "winter", + "sprite": "background/decorateIcon/decorate_winter_2.png" + }, + { + "basis": "prefab geometry and inferred runtime origin", + "fallback": false, + "layer": "background", + "name": "矿洞", + "position": [ + 1385.61, + 256.06000000000006 + ], + "size": [ + 282.88, + 282.88 + ], + "source_theme": "winter", + "sprite": "background/decorateIcon/decorate_winter_3.png" + }, + { + "basis": "prefab geometry and inferred runtime origin", + "fallback": false, + "layer": "background", + "name": "主题入口", + "position": [ + 860.44, + 423.6792219679634 + ], + "size": [ + 294.97, + 249.07077803203663 + ], + "source_theme": "winter", + "sprite": "background/decorateIcon/decorate_winter_4.png" + }, + { + "basis": "approved screenshot inverse projection", + "fallback": false, + "layer": "background", + "name": "摊位", + "position": [ + 514.2, + 554.498515625 + ], + "size": [ + 298.97, + 287.29148437500004 + ], + "source_theme": "winter", + "sprite": "background/decorateIcon/decorate_winter_5.png" + }, + { + "basis": "approved screenshot inverse projection", + "fallback": false, + "layer": "background", + "name": "狗窝", + "position": [ + 277.95, + 763.445234375 + ], + "size": [ + 305.25, + 205.884765625 + ], + "source_theme": "winter", + "sprite": "background/decorateIcon/decorate_winter_6.png" + }, + { + "basis": "approved screenshot inverse projection", + "fallback": false, + "layer": "foreground", + "name": "码头", + "position": [ + 1074.51, + 1019.67921875 + ], + "size": [ + 355.42, + 397.07078125 + ], + "source_theme": "winter", + "sprite": "background/decorateIcon/decorate_winter_7.png" + }, + { + "basis": "approved screenshot inverse projection", + "fallback": false, + "layer": "background", + "name": "邮箱", + "position": [ + 790.18, + 576.9633333333334 + ], + "size": [ + 104.54, + 139.38666666666666 + ], + "source_theme": "winter", + "sprite": "background/decorateIcon/decorate_winter_8.png" + }, + { + "basis": "approved screenshot inverse projection", + "fallback": false, + "layer": "background", + "name": "加工坊标牌", + "position": [ + 2347.77, + 756.0799999999999 + ], + "size": [ + 269.7, + 269.7 + ], + "source_theme": "winter", + "sprite": "background/decorateIcon/decorate_winter_9.png" + }, + { + "basis": "approved screenshot inverse projection", + "fallback": true, + "layer": "background", + "name": "稻草人标牌", + "position": [ + 1120.51, + 300.29999999999995 + ], + "size": [ + 238.34, + 238.34 + ], + "source_theme": "default", + "sprite": "background/decorateIcon/decorate_default_10.png" + } + ] + }, + "images": { + "background/decorateIcon/decorate_autumn_1.jpg": { + "sha256": "a3346953c2caeb4587da66046eb72b26ddc3120d8a03eb6d9fac3105d4876e02", + "size": [ + 3072, + 1872 + ] + }, + "background/decorateIcon/decorate_autumn_2.png": { + "sha256": "188d506956cfff3e3d4e0847b227f1128deb5a9b58451a9b4726cfca4ecff148", + "size": [ + 890, + 821 + ] + }, + "background/decorateIcon/decorate_autumn_3.png": { + "sha256": "5cf49b7475f7559c92ac8a6ab572da39c68b51aafe8106f683c05e422e5cdbc7", + "size": [ + 300, + 300 + ] + }, + "background/decorateIcon/decorate_autumn_4.png": { + "sha256": "5bcf66b8c24b385f690a3edc7c5cdf09e585f24594a243588ac60b634e14d804", + "size": [ + 437, + 369 + ] + }, + "background/decorateIcon/decorate_autumn_5.png": { + "sha256": "112675d95146b0ba0fe6a85ec8528e21ad4b3f786e653c512ca712f88c1c37cb", + "size": [ + 384, + 369 + ] + }, + "background/decorateIcon/decorate_autumn_6.png": { + "sha256": "53da880a0d1733b6c358e88a153925043a1a5f613a1d19e231ef50596410f4e6", + "size": [ + 384, + 259 + ] + }, + "background/decorateIcon/decorate_autumn_7.png": { + "sha256": "54d3e8333c5cbd828525d0a7eb6f1325783c08aa17a53b3e343801ca4637ba0f", + "size": [ + 384, + 429 + ] + }, + "background/decorateIcon/decorate_bee_1.jpg": { + "sha256": "85b8b1135801bcbd3789c06f7d99655ee4c229506313772ffda13c59c1daeb40", + "size": [ + 3072, + 1872 + ] + }, + "background/decorateIcon/decorate_bee_2.png": { + "sha256": "e6642aee792e67d1ac0156836e18e399cbf8eb1201843e0d4e6efbc9a054560d", + "size": [ + 890, + 981 + ] + }, + "background/decorateIcon/decorate_bee_3.png": { + "sha256": "828237611364a567cb634f6a5384147197be8c53b3b6a1dc916a5651eea2d315", + "size": [ + 300, + 300 + ] + }, + "background/decorateIcon/decorate_bee_4.png": { + "sha256": "eec209b03f25de33069f06a44431c60d7485321d2f36748d3d1112f34b65e890", + "size": [ + 437, + 369 + ] + }, + "background/decorateIcon/decorate_bee_5.png": { + "sha256": "d8814b7fd81361480e53bcb5b166affeaaf9b84d7a54370921fa4e16dd527143", + "size": [ + 384, + 369 + ] + }, + "background/decorateIcon/decorate_bee_6.png": { + "sha256": "fc4868215c771f0bb3552290c91e4e1fef26b19cb7b66d49b9411ce7cfe16992", + "size": [ + 384, + 259 + ] + }, + "background/decorateIcon/decorate_bee_7.png": { + "sha256": "e8bcaa8daaec9e7f564c41f3150b308031691603b4910bc99e7be8b755bb6bdb", + "size": [ + 384, + 429 + ] + }, + "background/decorateIcon/decorate_bee_8.png": { + "sha256": "da7a6a54d69cee5887fcce84e17167447aaf33e2c2213ae35c1f94e2c9f31a7e", + "size": [ + 150, + 200 + ] + }, + "background/decorateIcon/decorate_bee_9.png": { + "sha256": "f52e3817c5af2a56ccc492635e111932d352bebc54c7bc446d199f2895a4c196", + "size": [ + 200, + 200 + ] + }, + "background/decorateIcon/decorate_default_1.jpg": { + "sha256": "a8616f7e008125c868485186be104e58287c582cd86d7fdd2b314862932c9b40", + "size": [ + 3072, + 1872 + ] + }, + "background/decorateIcon/decorate_default_10.png": { + "sha256": "f3cd7bb3ddcc7040da4c239a8df4b3125e26070369c99e5ea2fd6d19663c11b3", + "size": [ + 200, + 200 + ] + }, + "background/decorateIcon/decorate_default_2.png": { + "sha256": "662a53b18cfe8b6fed270f5720eab8521d2718ed26bc254113bbabcaf4adb4d8", + "size": [ + 890, + 981 + ] + }, + "background/decorateIcon/decorate_default_3.png": { + "sha256": "d3dfb3d1c697c150177146225237b75b675d216d4b6bbb9108ed91719a0ee5e2", + "size": [ + 300, + 300 + ] + }, + "background/decorateIcon/decorate_default_4.png": { + "sha256": "8c9d0a225d4db217a5fd21348938abba4a27f28946de6d1adee63fade7bee322", + "size": [ + 437, + 369 + ] + }, + "background/decorateIcon/decorate_default_5.png": { + "sha256": "b380dd97570b13b3a213424092a5a5809ee08ef3b02e324e5b16dce5053bb00f", + "size": [ + 384, + 369 + ] + }, + "background/decorateIcon/decorate_default_6.png": { + "sha256": "209f5104156d5d1ed8a40f4dd28f270620ed38ae0cd2524bb0892bd16a48ca74", + "size": [ + 384, + 259 + ] + }, + "background/decorateIcon/decorate_default_7.png": { + "sha256": "0d4ed91a537d4beb3059e7cb69525e996dc6b931763a5c1b9f4b052a745f8405", + "size": [ + 384, + 429 + ] + }, + "background/decorateIcon/decorate_default_8.png": { + "sha256": "7409ae40b29be0014b1376e93ab130101e723df2d28d0f4394c0e883e7a70d53", + "size": [ + 150, + 200 + ] + }, + "background/decorateIcon/decorate_default_9.png": { + "sha256": "86ac74284eab4d3b8c05229d303ad3e6ab426a567f4a6b22c48e94c267e7231d", + "size": [ + 200, + 200 + ] + }, + "background/decorateIcon/decorate_spring_1.jpg": { + "sha256": "2278e8c410717ef5339b5343884b4b96bf446e3192b02f4ec72a526692bd0939", + "size": [ + 3072, + 1872 + ] + }, + "background/decorateIcon/decorate_spring_2.png": { + "sha256": "10772cdf83c0ec68007c6d940a056183d3f015759b6d03663b2ff625e528fc78", + "size": [ + 890, + 981 + ] + }, + "background/decorateIcon/decorate_spring_3.png": { + "sha256": "2f7605b7fc05badd7d7ab9338b1ed070fc0733bb05379d0ad99f277c7a7395fd", + "size": [ + 300, + 300 + ] + }, + "background/decorateIcon/decorate_spring_4.png": { + "sha256": "ebff83c417196ead949e9804be8cfe4aa4bb8c1f4bfe90973289a07c940057f6", + "size": [ + 437, + 369 + ] + }, + "background/decorateIcon/decorate_spring_5.png": { + "sha256": "5932c7f0b58255cd50ced8d11b7e4fe7172c10d3a892eb94ed3b598759a4b3c3", + "size": [ + 384, + 369 + ] + }, + "background/decorateIcon/decorate_spring_6.png": { + "sha256": "4c7e4d4699894b7dcf23300a9d7125caaa56c3bf086cd4876fe95ca13adee0cb", + "size": [ + 384, + 259 + ] + }, + "background/decorateIcon/decorate_spring_7.png": { + "sha256": "c2a4d78505fa1b167b634eea2a092368b64742af88a613a15e04d7f26b6f3c08", + "size": [ + 384, + 429 + ] + }, + "background/decorateIcon/decorate_spring_9.png": { + "sha256": "8217102f54988afd3904fc64c4dabbb56b6ceddc3a2cd2ed7efe5661ae95a244", + "size": [ + 200, + 200 + ] + }, + "background/decorateIcon/decorate_summer_1.jpg": { + "sha256": "1057135459c365a26dc3834ee96e04c8f8a728f24d52f1610274a112a7800e05", + "size": [ + 3072, + 1872 + ] + }, + "background/decorateIcon/decorate_summer_2.png": { + "sha256": "40abb58c9e388383669e7b3981d14441de38a237dc4920b7e943653ec69d8555", + "size": [ + 890, + 981 + ] + }, + "background/decorateIcon/decorate_summer_3.png": { + "sha256": "b63fe43714a82a53ed611b94cf3362aae836865be6a29464190404655f47a1ba", + "size": [ + 300, + 300 + ] + }, + "background/decorateIcon/decorate_summer_4.png": { + "sha256": "6a5bace564df8d5142e624008be6ff81004ac42375a558fbf401cda8a47f0f24", + "size": [ + 437, + 369 + ] + }, + "background/decorateIcon/decorate_summer_5.png": { + "sha256": "4e1b89a35d4f88182ea8683aa6a227c596ed57c7f27d9431a664cdee7ca85b07", + "size": [ + 384, + 369 + ] + }, + "background/decorateIcon/decorate_summer_6.png": { + "sha256": "0b7ebc6fde8723da8fc3e63853b384a30a52aa2168df0db13e03cdb83d8c910f", + "size": [ + 384, + 259 + ] + }, + "background/decorateIcon/decorate_summer_7.png": { + "sha256": "02b5c95d262974959e58428f51ca4f12d8c6b32446d4f4bde32ea50cff0fbc5e", + "size": [ + 384, + 429 + ] + }, + "background/decorateIcon/decorate_summer_9.png": { + "sha256": "5a3e0fa79d6db2931f6350a43dbc20383524115d0f64cfb96038758fc03951f1", + "size": [ + 200, + 200 + ] + }, + "background/decorateIcon/decorate_winter_1.jpg": { + "sha256": "6f1cd2c0aa3be43f9ef64d9c7b8965adebd794458285ce87fbe5a401f995fc43", + "size": [ + 3072, + 1872 + ] + }, + "background/decorateIcon/decorate_winter_2.png": { + "sha256": "78fca463daf00da06db83ef3f43d7bea444a57043cdce39fa23e8551b90c1a5b", + "size": [ + 890, + 821 + ] + }, + "background/decorateIcon/decorate_winter_3.png": { + "sha256": "dea09c184d23dd279d29c803678b5f17adf34fd1833f34d7df9fc8dabca3eb42", + "size": [ + 300, + 300 + ] + }, + "background/decorateIcon/decorate_winter_4.png": { + "sha256": "e42dc3bd0d168fc386ee10bf6e07b92e3ddfd2267d01bfa63d27bd8fb04c372f", + "size": [ + 437, + 369 + ] + }, + "background/decorateIcon/decorate_winter_5.png": { + "sha256": "c36c51e0b9f237233d10f9c921bf3a42dc960546fa08885ff5fa5ac2b261c773", + "size": [ + 384, + 369 + ] + }, + "background/decorateIcon/decorate_winter_6.png": { + "sha256": "8de23b47a1baedbd0958fd1f957b80b9ea272623605878346d2f78117c80b849", + "size": [ + 384, + 259 + ] + }, + "background/decorateIcon/decorate_winter_7.png": { + "sha256": "29be9ae301e0cd30f312d43cc0ad82d58dee99135183faee95331e5c981f5a60", + "size": [ + 384, + 429 + ] + }, + "background/decorateIcon/decorate_winter_8.png": { + "sha256": "5a736ae5940ec0f3a1846b8874b6b501b7e88bc1cc59aeb98684391692c8d15c", + "size": [ + 150, + 200 + ] + }, + "background/decorateIcon/decorate_winter_9.png": { + "sha256": "896ac8fdaa329934a56a08f8c84b3415259a3efbe34c119a2ee7993b2640e8c4", + "size": [ + 200, + 200 + ] + }, + "background/expansion.png": { + "sha256": "175e4a5e32b2e390801b554a0b6bda49a69ec660dec2c50d4dc395c231a157ab", + "size": [ + 92, + 92 + ] + }, + "background/frame/frame.png": { + "sha256": "93148c78e15295b623a857ee016768531854696ef28557bb28e044e32a5ce6ac", + "size": [ + 230, + 230 + ] + }, + "background/ripe.png": { + "sha256": "1c94af3e0b923defc85d200bd25538bf1ee9a2e744406266cdaf7103c1ea2cbd", + "size": [ + 92, + 92 + ] + }, + "background/userInfo.png": { + "sha256": "09e906c85d12491c297489ee6bcc31cd7f9e0c1527808c9c64d1783e8ae3cff3", + "size": [ + 580, + 275 + ] + }, + "pest/pest1.png": { + "sha256": "1ad3f1bd4521ef462056b88070728853fc93de85457eac1903d8dd11dc175642", + "size": [ + 44, + 60 + ] + }, + "pest/pest11.png": { + "sha256": "ea87a9e6ede36b36d492d641abe9c881ce57aecf130ebb5e9928276588923a52", + "size": [ + 44, + 60 + ] + }, + "pest/pest13.png": { + "sha256": "063d58763c1c06bf5cf88e73b946dbe9d35dc52709057911247d29528bd80346", + "size": [ + 44, + 60 + ] + }, + "pest/pest15.png": { + "sha256": "2927464be009a916862457a9dd1cf272e2face4809c8489496b8ca63f1064036", + "size": [ + 44, + 60 + ] + }, + "pest/pest17.png": { + "sha256": "fc3a21ed236cd2200704d2971c54dcf6f90fe92ada756da6acb70b78d2c9fd82", + "size": [ + 44, + 60 + ] + }, + "pest/pest19.png": { + "sha256": "fc3a21ed236cd2200704d2971c54dcf6f90fe92ada756da6acb70b78d2c9fd82", + "size": [ + 44, + 60 + ] + }, + "pest/pest21.png": { + "sha256": "863e604de7a63a6bc82d240b72fc0d16964a3536557400fd7e9e4251179efc0b", + "size": [ + 44, + 60 + ] + }, + "pest/pest23.png": { + "sha256": "fc3a21ed236cd2200704d2971c54dcf6f90fe92ada756da6acb70b78d2c9fd82", + "size": [ + 44, + 60 + ] + }, + "pest/pest25.png": { + "sha256": "17752162847dd22b45b041072dde51d9761f24179682794c14db4fe3a21b7843", + "size": [ + 44, + 60 + ] + }, + "pest/pest27.png": { + "sha256": "5827f8338358373507351449a8e82063c1683c3a0c4caaadf6e679c20306f376", + "size": [ + 44, + 60 + ] + }, + "pest/pest29.png": { + "sha256": "fc3a21ed236cd2200704d2971c54dcf6f90fe92ada756da6acb70b78d2c9fd82", + "size": [ + 44, + 60 + ] + }, + "pest/pest3.png": { + "sha256": "a88d9a45472167ad34af98e4a3e6db0bc02c3b7f3c441aef44908a97c136e37f", + "size": [ + 44, + 60 + ] + }, + "pest/pest31.png": { + "sha256": "fc3a21ed236cd2200704d2971c54dcf6f90fe92ada756da6acb70b78d2c9fd82", + "size": [ + 44, + 60 + ] + }, + "pest/pest33.png": { + "sha256": "eca7d05f269a417553ae38da5289caea9a8f4ba5bbc592a9477bc5dfa6a6ec1d", + "size": [ + 44, + 60 + ] + }, + "pest/pest35.png": { + "sha256": "d26b7c64ed82266c23ac90b5a8e7fd5996b15a6a65a9d4893f0f4a01c1facb16", + "size": [ + 44, + 60 + ] + }, + "pest/pest37.png": { + "sha256": "bb92d5687eb73be0a8bf1d9ae8c2aac5e67dcab6e5184d19e212b5931705c6b5", + "size": [ + 44, + 60 + ] + }, + "pest/pest39.png": { + "sha256": "5827f8338358373507351449a8e82063c1683c3a0c4caaadf6e679c20306f376", + "size": [ + 44, + 60 + ] + }, + "pest/pest41.png": { + "sha256": "fa5b7979e0d905454ddd515751e53646614680e6d29f850bdea40957bc6fbeb1", + "size": [ + 44, + 60 + ] + }, + "pest/pest43.png": { + "sha256": "d7f1eea15102154c623d82cd148126f34e82ef40602d7cae78a6e3ee94970b93", + "size": [ + 44, + 60 + ] + }, + "pest/pest45.png": { + "sha256": "c84fbc9a11d7e4a0e7ddff301d4dd79f75cc1882c76776fa617d189eec8f5eb4", + "size": [ + 44, + 60 + ] + }, + "pest/pest47.png": { + "sha256": "fc3a21ed236cd2200704d2971c54dcf6f90fe92ada756da6acb70b78d2c9fd82", + "size": [ + 44, + 60 + ] + }, + "pest/pest49.png": { + "sha256": "fc3a21ed236cd2200704d2971c54dcf6f90fe92ada756da6acb70b78d2c9fd82", + "size": [ + 44, + 60 + ] + }, + "pest/pest5.png": { + "sha256": "5ce899cd3c42a7919dea0b43686f261a94e80af9d122337b3c01c01df920a9b0", + "size": [ + 44, + 60 + ] + }, + "pest/pest51.png": { + "sha256": "3eeb2ef89514543ff616a51db2ad4a54da6fa67d3e573f3cda2b63d376d91d04", + "size": [ + 44, + 60 + ] + }, + "pest/pest53.png": { + "sha256": "d823df2c2b1d9b721a2727e8e60f496aa7791942b20ff894569819b47dfe7ce4", + "size": [ + 44, + 60 + ] + }, + "pest/pest55.png": { + "sha256": "8a78d0b046991de083334cabba06291fecc7739be501beb2caf3fcc87f5454f7", + "size": [ + 44, + 60 + ] + }, + "pest/pest57.png": { + "sha256": "526eca9a538b3a6acd8f9ef9a358a8df98d2c6cf29667e647b6fb3df5110f5d6", + "size": [ + 44, + 60 + ] + }, + "pest/pest59.png": { + "sha256": "8a78d0b046991de083334cabba06291fecc7739be501beb2caf3fcc87f5454f7", + "size": [ + 44, + 60 + ] + }, + "pest/pest61.png": { + "sha256": "6603a10d50bd88bb1032fd22fe482b0c9ba433ba25967408d64e07b47a6c9b64", + "size": [ + 44, + 60 + ] + }, + "pest/pest63.png": { + "sha256": "226c96b60648787fd457d2f968c0eee7c610444f191e6c73fdd071fa6e95bf14", + "size": [ + 44, + 60 + ] + }, + "pest/pest65.png": { + "sha256": "8a78d0b046991de083334cabba06291fecc7739be501beb2caf3fcc87f5454f7", + "size": [ + 44, + 60 + ] + }, + "pest/pest67.png": { + "sha256": "8a78d0b046991de083334cabba06291fecc7739be501beb2caf3fcc87f5454f7", + "size": [ + 44, + 60 + ] + }, + "pest/pest69.png": { + "sha256": "cc1fb7b27adcdab8bbb3872ab28dab66aee832b02ed36e588f214e03d19cbc8b", + "size": [ + 44, + 60 + ] + }, + "pest/pest7.png": { + "sha256": "e600a52be8e2aeb9ba01ad3b595fe9badb05a1987c2ec98b8d8bd6fe6fd73a65", + "size": [ + 44, + 60 + ] + }, + "pest/pest71.png": { + "sha256": "5bd1ed7e9db82572119403fce50ff9c7276df33ad4288869aeac3fa5896652e6", + "size": [ + 44, + 60 + ] + }, + "pest/pest73.png": { + "sha256": "d0d22707ce214b6c78b74315daa33f93c97e5c20368a002a094cd12964437726", + "size": [ + 44, + 60 + ] + }, + "pest/pest75.png": { + "sha256": "51e1142e2f4dd489cf392b0b25d2d8c04c3801b6d149254e7b7df7c86155b5e2", + "size": [ + 44, + 60 + ] + }, + "pest/pest9.png": { + "sha256": "cefc8172fd7f0a6137dd5c67c43ba6b165ee37faf58893ff8f37dbff2cc08d22", + "size": [ + 44, + 60 + ] + }, + "plant/ATTomato/1.png": { + "sha256": "48de2a54c2868852f70e981a0ef8228ad0bb09499e6c9e84057aaf82f16f7270", + "size": [ + 67, + 98 + ] + }, + "plant/ATTomato/2.png": { + "sha256": "d45b3e6896e6eaac51d40fe85ed460b686a8f1d91578a271369f0ea2250f9460", + "size": [ + 49, + 135 + ] + }, + "plant/ATTomato/3.png": { + "sha256": "86eb67cc3904bd2cf234cc30c27b01a911f1abdfeec6ccc58f9569a028ad0056", + "size": [ + 117, + 176 + ] + }, + "plant/ATTomato/4.png": { + "sha256": "14a494d9d0a42315cf09f7c48e7ad11e33a035bda5d0ae4de0b7e42832808c52", + "size": [ + 129, + 176 + ] + }, + "plant/ATTomato/5.png": { + "sha256": "52a455a943fa41d30db8c2d20861e2d6d465d6f28511933e2b2b3ec994b41a01", + "size": [ + 129, + 180 + ] + }, + "plant/ATTomato/icon.png": { + "sha256": "d068d503bc2abdee8037a02981d4511a9c0e3c8f9ebeec13a5ec52c14a4efb61", + "size": [ + 79, + 86 + ] + }, + "plant/basic/0.png": { + "sha256": "ae5a1a593c40f311862d4bc9fecb7e16f8a2d92307b7141295fe4fe5d2bab6c9", + "size": [ + 595, + 842 + ] + }, + "plant/basic/9.png": { + "sha256": "c63f5e7b4a948b5af1f8bf8ef52c6d93f52f0ed6fb0c68b35faae39fcdadd25d", + "size": [ + 150, + 145 + ] + }, + "plant/一点红/1.png": { + "sha256": "3c72c1f4768ab80d893b446bdd8507016eeb87a980b689b04c98b05b2ed95159", + "size": [ + 29, + 90 + ] + }, + "plant/一点红/2.png": { + "sha256": "15f013dbbfe4dcb1ddc4f9f425a262101a9a970ffaac151b995b252028d65c5a", + "size": [ + 78, + 95 + ] + }, + "plant/一点红/3.png": { + "sha256": "7f10a4e8a65323781db45befa1102b4c4d6a4ddc3195372c9da8ab28541fe8bb", + "size": [ + 107, + 114 + ] + }, + "plant/一点红/4.png": { + "sha256": "98b7ee9adc622b07dccb5985d002c8bbdb851a57c15b789e2d8b69b27b82b917", + "size": [ + 115, + 134 + ] + }, + "plant/一点红/5.png": { + "sha256": "2e798ef1d714b720359a2e367c0f752cb687f7cad7ede321e4402d056dd2a010", + "size": [ + 121, + 139 + ] + }, + "plant/一点红/icon.png": { + "sha256": "ad4068587a7cc6d5d956fc7d2f862812c5cf66d6e653409613f89be0d4e5c6e1", + "size": [ + 118, + 105 + ] + }, + "plant/三七/1.png": { + "sha256": "fe1d2a2a71b844052e685db09acd5bbc3df8dfce2b2838e9fcd7de1e1eeffe59", + "size": [ + 28, + 92 + ] + }, + "plant/三七/2.png": { + "sha256": "45ba5533d6f78b101358e2b3839293eabb12bf5bd481104da5e4a15f466cd741", + "size": [ + 61, + 104 + ] + }, + "plant/三七/3.png": { + "sha256": "1fa3239fba0a0df36096129080d28c2b9ea4e0440fecf5487b68ad6e1a535f95", + "size": [ + 79, + 127 + ] + }, + "plant/三七/4.png": { + "sha256": "3090215be724c0852d01648fe14b46b3cd4f55367bd6449df4bb4f1295bd5f54", + "size": [ + 85, + 139 + ] + }, + "plant/三七/5.png": { + "sha256": "efebadda237de8b7de613595c84f51c5ca043b00b7451b1e2f2e94a9a5d58457", + "size": [ + 90, + 152 + ] + }, + "plant/三七/icon.png": { + "sha256": "ef0d8011e9d7bd12d930f12b1781b027b335832d73ca0b42d0c1edf754140693", + "size": [ + 115, + 97 + ] + }, + "plant/丝瓜/1.png": { + "sha256": "b75580e6bd830d96da1840ebb45284998409e06e36b9001dc5011510d069b869", + "size": [ + 69, + 163 + ] + }, + "plant/丝瓜/2.png": { + "sha256": "95e82fb13a9c398df8d1e5ce1ace7aa95a4b75dc17a62cab88715c1c0bb7fbc5", + "size": [ + 81, + 138 + ] + }, + "plant/丝瓜/3.png": { + "sha256": "400af9e1eee70dc1848ac56273e34bcfd1be6b1c4205fd72e9021093c15fac18", + "size": [ + 95, + 164 + ] + }, + "plant/丝瓜/4.png": { + "sha256": "6077431d7a8db083c99c639ce51cdb85be07e0dd08e187183d0af62f86f04371", + "size": [ + 85, + 165 + ] + }, + "plant/丝瓜/5.png": { + "sha256": "cd311f081e56a940ea0227271818d44315ca03e0e8054e086dbede0e7d1b9572", + "size": [ + 98, + 159 + ] + }, + "plant/丝瓜/icon.png": { + "sha256": "00296af1512d7a17005f363db66c2ec7e0af7a1912d079cc1d846cd3d68c88a9", + "size": [ + 100, + 87 + ] + }, + "plant/乌饭子/1.png": { + "sha256": "2e0b0829f5ec28912f46c0c6d767655580a26c8e147a26771f936cb02115dadc", + "size": [ + 77, + 117 + ] + }, + "plant/乌饭子/2.png": { + "sha256": "f71428fe60ae693038a9e15cb5db70a5b666a03506f54f98c295b8f490251e1e", + "size": [ + 96, + 146 + ] + }, + "plant/乌饭子/3.png": { + "sha256": "2bdcb1ab9fba0085e73dbc7ef6ec2649d7b882f796139da028c95776fb129ac5", + "size": [ + 122, + 167 + ] + }, + "plant/乌饭子/4.png": { + "sha256": "efd432f290a460195d789fffecb91b24325899a880490ace6845473853ede42a", + "size": [ + 122, + 173 + ] + }, + "plant/乌饭子/5.png": { + "sha256": "3e15d27496b1c4f5c80410a29b8ba13d9b7c61ae1ea20d429e4a674b4016baad", + "size": [ + 125, + 169 + ] + }, + "plant/乌饭子/icon.png": { + "sha256": "a9706e469b128fd5b2b33d89b381851501049462c5ccac57d7639d06713999f6", + "size": [ + 110, + 94 + ] + }, + "plant/兔儿伞/1.png": { + "sha256": "ef15350890e305dc58c35c1610aec3557eab8870f596696bb50beeb8d3e54825", + "size": [ + 11, + 84 + ] + }, + "plant/兔儿伞/2.png": { + "sha256": "ff966e5852ad3edfbb39a89372ba2c775a7a336721c72ba7b35d65f0f18c1cd2", + "size": [ + 34, + 99 + ] + }, + "plant/兔儿伞/3.png": { + "sha256": "139d02f3e643937b7330f56f2a73339596a2cb36b5d08139962d85d152dc22c5", + "size": [ + 91, + 125 + ] + }, + "plant/兔儿伞/4.png": { + "sha256": "c965913561c318779c50a39792cb39bf3abc328abe819fd3d401fffe44a0a599", + "size": [ + 96, + 142 + ] + }, + "plant/兔儿伞/5.png": { + "sha256": "d3c9df81b724a3a52e692f6b973c07953802f38b3bc9e0ec380eb76d8e433b31", + "size": [ + 96, + 153 + ] + }, + "plant/兔儿伞/icon.png": { + "sha256": "e926dd93d2d40355f304921e7173b4f8de51a56a91e84271a49cbf64b01cb7a4", + "size": [ + 117, + 109 + ] + }, + "plant/关白附子/1.png": { + "sha256": "fbd4d75d0050e590ac8a28e5f14474f5c817b44e41ff96db0603d4bd40a0553a", + "size": [ + 51, + 77 + ] + }, + "plant/关白附子/2.png": { + "sha256": "26e4a917b247b4dfe1d37d8922c59e2e39a5a7ad10493b91c3b119464c0c86b4", + "size": [ + 65, + 115 + ] + }, + "plant/关白附子/3.png": { + "sha256": "c16a5e1624122a468e7ef8007aae5af05399a16568adf658ea43888a6a106b73", + "size": [ + 69, + 129 + ] + }, + "plant/关白附子/4.png": { + "sha256": "022f3953e86daf30a6590fed4948b742d79f790d90fa8dfdfe7471b480fd660f", + "size": [ + 84, + 156 + ] + }, + "plant/关白附子/5.png": { + "sha256": "9847cc567358d9198fd9fa28d978fdfcdbf257177b000f162c8b2f851c2984af", + "size": [ + 99, + 163 + ] + }, + "plant/关白附子/icon.png": { + "sha256": "d79e0be6debf78ac5a1ea853b7c45699d127fb3067c659cfc4d8d85e8c134992", + "size": [ + 118, + 109 + ] + }, + "plant/关苍术/1.png": { + "sha256": "bf10e095be420c3877ca6ebb553699e7c0604ab66db7a32b08d2b0a471c99aaa", + "size": [ + 23, + 87 + ] + }, + "plant/关苍术/2.png": { + "sha256": "f5ec24c0e5bd8eeb164558ced56ef702c0b7264ab32961ba462c516c77a302c8", + "size": [ + 48, + 103 + ] + }, + "plant/关苍术/3.png": { + "sha256": "5b2feb00c054e396b408d0e6461a58a2e27743a93286c354380341193cd34164", + "size": [ + 67, + 133 + ] + }, + "plant/关苍术/4.png": { + "sha256": "e8a7071f31d8d49f065fb195d8749d771257c56f354659c653980f872074a61a", + "size": [ + 70, + 140 + ] + }, + "plant/关苍术/5.png": { + "sha256": "4ef4d96c237638b20b6f63dbc05901d751ba6e334cc15c13ac93fb9b5254794f", + "size": [ + 77, + 151 + ] + }, + "plant/关苍术/icon.png": { + "sha256": "887c9d4f2f7514767c5075bd41ace5dffc4685c23ae7b031d5df2a62c266da6d", + "size": [ + 128, + 124 + ] + }, + "plant/冬凌草/1.png": { + "sha256": "a49b45a256120ecd3f243c4d15214a17907d980c937dc72e58db8ee2e0b7596b", + "size": [ + 33, + 81 + ] + }, + "plant/冬凌草/2.png": { + "sha256": "19d4fc927cc4f89d73df42aa7c906a7c38f8af875592f713c57e19b29aec3a50", + "size": [ + 49, + 110 + ] + }, + "plant/冬凌草/3.png": { + "sha256": "be6fbbe778b49ecf3fda5bfbe143ac7bb1f01c49d258ba35112989258b57042b", + "size": [ + 67, + 138 + ] + }, + "plant/冬凌草/4.png": { + "sha256": "e93c8eed1c2c92fa8fe12a2d4762a453119f6f98ff025668fc54666dd33f3909", + "size": [ + 80, + 150 + ] + }, + "plant/冬凌草/5.png": { + "sha256": "76716f373e1b7ce3a2988732cab3f30afbff47a7a2035a9a13cfdc3791b078d7", + "size": [ + 85, + 152 + ] + }, + "plant/冬凌草/icon.png": { + "sha256": "ed38c3b565204f904ed0142024132823f161e48dc6fa2c40ca1911f9e4104a40", + "size": [ + 98, + 125 + ] + }, + "plant/冬瓜/1.png": { + "sha256": "2c3431aa7b60595c43a127a9877582509cb4f3636939eeb09bf7183c45fc821f", + "size": [ + 46, + 117 + ] + }, + "plant/冬瓜/2.png": { + "sha256": "219fe9dc5c88659f659774dde963fc32cd3c849f5313f32f0cc67d4ae291afda", + "size": [ + 121, + 151 + ] + }, + "plant/冬瓜/3.png": { + "sha256": "353219c03bf3b4d534bfe0e45f8e36129b311cb860f2d6aa68c3a8e2895c00f5", + "size": [ + 130, + 151 + ] + }, + "plant/冬瓜/4.png": { + "sha256": "7a396acdb27af351102904df5477d1ac7c5e102fb8f02021111220257b2ee5b9", + "size": [ + 130, + 151 + ] + }, + "plant/冬瓜/5.png": { + "sha256": "18aa7676e59f6fd07f1625c9d594fce574aa500548d630f0d75946c2b82835cf", + "size": [ + 130, + 151 + ] + }, + "plant/冬瓜/icon.png": { + "sha256": "e5968bfce8e7abfc617ce7eec59001a0fcbc6109025c34d11cc83aea283c3bf9", + "size": [ + 100, + 79 + ] + }, + "plant/决明子/1.png": { + "sha256": "04fe55f4ae6204b073b37b149716f7add4e689f8ab24d2be6119789c3de0c348", + "size": [ + 42, + 80 + ] + }, + "plant/决明子/2.png": { + "sha256": "1f8f9aaed45514de83f2afa6d07480dde313be41242b8133154ae3c8aa473911", + "size": [ + 85, + 129 + ] + }, + "plant/决明子/3.png": { + "sha256": "89a3311d1b3c5c1808848236359b400c81b263747ada99baaa4b9864234349f1", + "size": [ + 95, + 145 + ] + }, + "plant/决明子/4.png": { + "sha256": "ee57cf04bd5ce0b54b836e836ae97e7ad743dadea754cd3c55b718f5940b6094", + "size": [ + 106, + 152 + ] + }, + "plant/决明子/5.png": { + "sha256": "0db21e2b5a269a76998c9fd320e5d6426f4be42bedd3d746c3dae39691335a3d", + "size": [ + 117, + 156 + ] + }, + "plant/决明子/icon.png": { + "sha256": "0c8c110c09f8ae87ad09003da6bbc65c19f291644356a523901573a237283256", + "size": [ + 121, + 121 + ] + }, + "plant/南瓜/1.png": { + "sha256": "a5bf0620aadb4fc9ca624dfb6a11b00c1d6f4028b5d6befd59cae59885085732", + "size": [ + 32, + 87 + ] + }, + "plant/南瓜/2.png": { + "sha256": "71153e744e97a506014f90569426b52a510af1fcc8c15db27dc2a1e58b359066", + "size": [ + 79, + 117 + ] + }, + "plant/南瓜/3.png": { + "sha256": "d2de11943128950bf708ec06ae440fa061760a05be9c08afc5d5d85f8878bae9", + "size": [ + 129, + 160 + ] + }, + "plant/南瓜/4.png": { + "sha256": "3fba9df28d1540a50ccfc3b0482ac7709d49bfc6c22210ab4b59b9a064628f06", + "size": [ + 129, + 160 + ] + }, + "plant/南瓜/5.png": { + "sha256": "1baa5daa917169081e61a1f4f2dc3044002b8afc66acec97b495b0777d31615d", + "size": [ + 111, + 158 + ] + }, + "plant/南瓜/icon.png": { + "sha256": "d359d58df510dd25ab5cb7469548fb2c3991516953e1346177128b79d6f40291", + "size": [ + 95, + 92 + ] + }, + "plant/双玉兰/1.png": { + "sha256": "030576ce164c3eb12ac3105dc4ce7c5b6d8ac676acc216f74ed13c4ebfa2f1b3", + "size": [ + 17, + 71 + ] + }, + "plant/双玉兰/2.png": { + "sha256": "d6dabbad486a58c0cda2850de4fe1491a23f85960b387b93dd8683c0625c59f5", + "size": [ + 46, + 99 + ] + }, + "plant/双玉兰/3.png": { + "sha256": "d6454d363f14dc44c35d867b426c6372fbc13e8ddc4babc1060e4ad31f8bc065", + "size": [ + 63, + 110 + ] + }, + "plant/双玉兰/4.png": { + "sha256": "4ed9f5b31c64728e996e54b682902d8b8e6abb31ab6c019f131c866857fbc18f", + "size": [ + 88, + 139 + ] + }, + "plant/双玉兰/5.png": { + "sha256": "a433966e33487cef0e7acd98fae419ff66d63c461a8fb63344fc2f516452fafe", + "size": [ + 114, + 167 + ] + }, + "plant/双玉兰/icon.png": { + "sha256": "c235b113f1a774bca8f13af972e2d2d7e40e5691b66ce20e6d48ddad732afacc", + "size": [ + 94, + 78 + ] + }, + "plant/可可豆/1.png": { + "sha256": "aba02a434f5404abfa50e7e500d775c4c0e9d2626e23171c84a4b0d22bcf3fd2", + "size": [ + 28, + 88 + ] + }, + "plant/可可豆/2.png": { + "sha256": "69468aaf7bb4fb752a43d1e0d215d2dbba3ecd8a655457907bc80071776f5a6a", + "size": [ + 101, + 121 + ] + }, + "plant/可可豆/3.png": { + "sha256": "45418c35d3add710805c403cd14c7c03f8c8edd4aeee230ffc874eaa2e009ff0", + "size": [ + 121, + 154 + ] + }, + "plant/可可豆/4.png": { + "sha256": "06de387193251997fac472f50a733464ef5e0497604bc1783c2de6ceafb853ba", + "size": [ + 125, + 155 + ] + }, + "plant/可可豆/5.png": { + "sha256": "22be6b287999ecb2ef1cd8ef6198281f5f566148c83b38dc9d0750bf8efb75c4", + "size": [ + 139, + 166 + ] + }, + "plant/可可豆/icon.png": { + "sha256": "9f76fca22a82122db0cea2ee6e60fe6e799f5b2be160ba80cf1ce0dea771633b", + "size": [ + 120, + 134 + ] + }, + "plant/哈密瓜/1.png": { + "sha256": "a5ae6c92787117b996a382424d9408e0dd642845eb94982e3374a93151bc5058", + "size": [ + 40, + 95 + ] + }, + "plant/哈密瓜/2.png": { + "sha256": "e2aa3e4ee2db805f1621b6345d03b58a353dd6e0abef04b6f6a9d492ef2e2091", + "size": [ + 100, + 152 + ] + }, + "plant/哈密瓜/3.png": { + "sha256": "417cb5f55e4c131dbcbab78295da853bb3a1bb3be8e769d159b5e4da995f8be3", + "size": [ + 100, + 159 + ] + }, + "plant/哈密瓜/4.png": { + "sha256": "c2686cda49c00606132d51d59b628a98c29db1a7efcdef262da6fda3c55574f5", + "size": [ + 100, + 157 + ] + }, + "plant/哈密瓜/5.png": { + "sha256": "73523941e8867e9047cab7bdd0e983280d23aba6051f28254abe39f687b96f56", + "size": [ + 104, + 161 + ] + }, + "plant/哈密瓜/icon.png": { + "sha256": "a5dd6edc3e4c2efe7546b2eec53a84598153070092b244b87d6804bbd89c01f9", + "size": [ + 104, + 73 + ] + }, + "plant/园艺世/1.png": { + "sha256": "aa9ab5450c0cf0db0d011e89184828b1c18a50878a614f4aad814b2d5048a126", + "size": [ + 26, + 78 + ] + }, + "plant/园艺世/2.png": { + "sha256": "b4eb08aca852b31b45f6c596e7bed0c3a041eb7daadeafef113580e26a7ceba7", + "size": [ + 42, + 85 + ] + }, + "plant/园艺世/3.png": { + "sha256": "63c059720d4f51b52d05861360f7c1a699cdcd189dd63d842e56ca30b99d2ed4", + "size": [ + 74, + 115 + ] + }, + "plant/园艺世/4.png": { + "sha256": "d5952ce94bab423bff3239b8197e0484f05cab594ae3fb3bcccfb1ff9f54f403", + "size": [ + 88, + 130 + ] + }, + "plant/园艺世/5.png": { + "sha256": "f0d7c8954db4a034c27b200462470e0cae457109bc567e0c7527d078e02e6053", + "size": [ + 124, + 157 + ] + }, + "plant/园艺世/icon.png": { + "sha256": "62cfbfafd48f213c19d5409a31362508e5a67d322751d36c93700629796ab18a", + "size": [ + 114, + 110 + ] + }, + "plant/土豆/1.png": { + "sha256": "90640b91dbb010e10cf084737a657776ea40fcaa0355c8764693ae3cac343d68", + "size": [ + 39, + 108 + ] + }, + "plant/土豆/2.png": { + "sha256": "1dea8e35473fc312abf0a9cfc1049c70f68f2e70171238533ab3c85d1850cdb6", + "size": [ + 72, + 123 + ] + }, + "plant/土豆/3.png": { + "sha256": "69a33de3754a8b9a491a3ed59d5704f57ccd54c7b821a69e133a1826b43325cf", + "size": [ + 109, + 138 + ] + }, + "plant/土豆/4.png": { + "sha256": "fbd3433c80a4a66f5ffcf88e7f05bbb187e593c4513d254f619a9dca3bfc01f0", + "size": [ + 109, + 138 + ] + }, + "plant/土豆/5.png": { + "sha256": "8b1639f4686cc8a27478c0035866848573fc300b639e7350e0cb89f983e26e88", + "size": [ + 114, + 183 + ] + }, + "plant/土豆/icon.png": { + "sha256": "81312cd03bccdf720c61aeb211aa1552d639900b9a3ae9d2fd944f89be8f2c97", + "size": [ + 87, + 105 + ] + }, + "plant/大白菜/1.png": { + "sha256": "f21fc639e3bea6023f1660b652bfdbd24d77384e6a17a9133fe28748bbb5744d", + "size": [ + 41, + 82 + ] + }, + "plant/大白菜/2.png": { + "sha256": "5e8875bceebcff36f74322e3b2aa64fa63336b4a40138fc66a7b8437c3a45d3a", + "size": [ + 66, + 113 + ] + }, + "plant/大白菜/3.png": { + "sha256": "ecaa0730d5e320a1035e622eba1a6c8f5ee30455405d48800a8ebbf6b50219c4", + "size": [ + 88, + 122 + ] + }, + "plant/大白菜/4.png": { + "sha256": "8c9919cb875a3399c98d2f56550c9f5008eae823472020d1351f7e7569c4c144", + "size": [ + 95, + 128 + ] + }, + "plant/大白菜/5.png": { + "sha256": "24f5a86b0c2be512532f2413d6d8e8b60519daec1687790e41b6be361f9e3f40", + "size": [ + 104, + 130 + ] + }, + "plant/大白菜/icon.png": { + "sha256": "2f38b02ecb284a20ad1eef4dd65c845b5bee02497da7fb9568b3db1e67b0e1b1", + "size": [ + 102, + 114 + ] + }, + "plant/大蒜/1.png": { + "sha256": "fe4fbce09d4d745f999b613d945ebc1e9233da84456e65a1bb997fc97f5a1f67", + "size": [ + 66, + 107 + ] + }, + "plant/大蒜/2.png": { + "sha256": "6f671f4a853501fd9a61c8f01dea70aeeda70482ccddd4c83d30a256e49b9c97", + "size": [ + 71, + 142 + ] + }, + "plant/大蒜/3.png": { + "sha256": "e904b29f1d9b26835d326609a63f11e0d9fa2655137a59a2a33b83a8c2edee76", + "size": [ + 82, + 177 + ] + }, + "plant/大蒜/4.png": { + "sha256": "cce558d74dadd1b0d61767fabab8f15c29ee063bdd5151914de05503104c0f93", + "size": [ + 106, + 170 + ] + }, + "plant/大蒜/5.png": { + "sha256": "c216e3aa78aca61c80a6b6828ca9e8aec596090fdf9c149c1586399ceec536f2", + "size": [ + 110, + 171 + ] + }, + "plant/大蒜/icon.png": { + "sha256": "716cc24764d083f9aa02a405c24f27e607161d86b7300baaaa20b777227c935d", + "size": [ + 93, + 100 + ] + }, + "plant/富贵竹/1.png": { + "sha256": "97b08fd5ff1d94b2750c0c45136c95b0dac23369efe12805748759a06423984a", + "size": [ + 25, + 77 + ] + }, + "plant/富贵竹/2.png": { + "sha256": "a68dcf801f26a503ffcb41f06d414d82384111a5d725991d36cba11b2bb62df6", + "size": [ + 47, + 104 + ] + }, + "plant/富贵竹/3.png": { + "sha256": "09a464c054b3bb0b6ed29a3debeeee74417301638d5d6072c8ae92be1d463a13", + "size": [ + 58, + 122 + ] + }, + "plant/富贵竹/4.png": { + "sha256": "811edb8c22798858e3572ec4260b957a9aac25c70b25ce9ffd357989fc907d79", + "size": [ + 79, + 136 + ] + }, + "plant/富贵竹/5.png": { + "sha256": "49887ea157c1d38ed44a22134c787047504095f480d341beacf8e938416a4190", + "size": [ + 114, + 169 + ] + }, + "plant/富贵竹/icon.png": { + "sha256": "9df2688d0f4ea9b352e3347b982854af1e956068193c097a7a60bba23a3cdedb", + "size": [ + 106, + 117 + ] + }, + "plant/小白菜/1.png": { + "sha256": "b49c2f942de76e46075ee18c0b0abf34dafd8dcae02cf0298692cb7aea5ba750", + "size": [ + 22, + 83 + ] + }, + "plant/小白菜/2.png": { + "sha256": "b8f5a211f90c881371d4f51476c579b625e82740a6f7e59902eec64c17f257bb", + "size": [ + 46, + 99 + ] + }, + "plant/小白菜/3.png": { + "sha256": "0e8105b45994155b95674fda949aaff0b6ec259e0d06fad1199a33fe463bfd5a", + "size": [ + 92, + 142 + ] + }, + "plant/小白菜/4.png": { + "sha256": "f879a0b07d43e6d4fca3122105d4de774b564095d49ef620a5fec5b9e849c375", + "size": [ + 92, + 142 + ] + }, + "plant/小白菜/icon.png": { + "sha256": "4328dd3d1ae61a811d4dfd003110156fb8e1520c90129c19c5307112b43cdaa8", + "size": [ + 78, + 115 + ] + }, + "plant/小麦/1.png": { + "sha256": "5883fd6220d7893eab3c0cdb80c55ebc8632d0dbaad24a7449efa3760c5c8f7f", + "size": [ + 36, + 106 + ] + }, + "plant/小麦/2.png": { + "sha256": "18a63e04f978fddd7964c35979244b2cc7518e860a44ef4e90faaa06cbad9024", + "size": [ + 65, + 141 + ] + }, + "plant/小麦/3.png": { + "sha256": "bf094c88ee84e392cc71673ef6b40b1262bb9b929ef2cc063cf10fc266142feb", + "size": [ + 103, + 154 + ] + }, + "plant/小麦/4.png": { + "sha256": "0a1a529994d6b38114926c43195f23d1a43cd8223f6804f0ffb8a853c06f8c20", + "size": [ + 111, + 165 + ] + }, + "plant/小麦/5.png": { + "sha256": "35853528cef793f746cfd957472e95e854f601ea86af0a3bfda79517ab6929a0", + "size": [ + 114, + 172 + ] + }, + "plant/小麦/icon.png": { + "sha256": "0b80564515c742e961010d99b4f6abd0958ea6238d1f8c4e669a6a198f2f42b9", + "size": [ + 91, + 100 + ] + }, + "plant/山竹/1.png": { + "sha256": "2bce5723615971a0c1ef0e5a2479ca32bd16d154121e0a8a246641707d222385", + "size": [ + 51, + 107 + ] + }, + "plant/山竹/2.png": { + "sha256": "252637660273ccd13f19faae6d4537f9d6adc1b05d2fbb504dc8429c7dc14328", + "size": [ + 79, + 125 + ] + }, + "plant/山竹/3.png": { + "sha256": "b51e21a124c33ef660dc0a8404dbe130268bf99858ac462c7402652180bd7895", + "size": [ + 118, + 166 + ] + }, + "plant/山竹/4.png": { + "sha256": "2e44afce34571872dd37516bd2fc13b57ad346188ac9645c69ed3e0bfd321dd1", + "size": [ + 123, + 171 + ] + }, + "plant/山竹/5.png": { + "sha256": "3af58c53778deabf2c643541ddffe8ce9ea5005906ea29c33e211d825ff33ffd", + "size": [ + 126, + 174 + ] + }, + "plant/山竹/icon.png": { + "sha256": "7b8309360ecd4bf3f26b7aafb7058c43fbd6614a0316faed3c765372c6a69f49", + "size": [ + 100, + 82 + ] + }, + "plant/无花果/1.png": { + "sha256": "08e10b4373c36b9c544b6fec4e4088568a4ecff3e58aabf6a8917ed09ce58466", + "size": [ + 49, + 81 + ] + }, + "plant/无花果/2.png": { + "sha256": "c844f93163145fdada632e15822806a22c3c56fbdeede5dadf3c92df9f9a905f", + "size": [ + 51, + 90 + ] + }, + "plant/无花果/3.png": { + "sha256": "efb4fe6f325dddfb689acecc9e95d9dc0438ee7ef5b8ddd176b956835b02ebfe", + "size": [ + 85, + 144 + ] + }, + "plant/无花果/4.png": { + "sha256": "b1624a555613d687b7868401f7151f3e4351b010cdeb1123af8fd3f993c86abe", + "size": [ + 101, + 174 + ] + }, + "plant/无花果/5.png": { + "sha256": "01648efa81b97857afdcb19680f54b2f5842c711b3273b05a6fb437b2d7dd2fd", + "size": [ + 104, + 174 + ] + }, + "plant/无花果/icon.png": { + "sha256": "f4c52eadecc25fdb020ae1bbc0cf8c5ae6bc112661b37ff0c4366e6b1d8ccd04", + "size": [ + 100, + 67 + ] + }, + "plant/月柿/1.png": { + "sha256": "c3c6be217b0253ec27062434ca7396c11e73ac05454b9eb515d7682b8680f97f", + "size": [ + 27, + 98 + ] + }, + "plant/月柿/2.png": { + "sha256": "ec07f1ec163b8b5a5877c0dad783f3ddd166a49ccb2e219c8a9a03b2e8d6a450", + "size": [ + 68, + 142 + ] + }, + "plant/月柿/3.png": { + "sha256": "4aec71a2a7b5e1429e27e36a2ffff694dd97711c81f1923f9d4cae5cc1a32531", + "size": [ + 109, + 153 + ] + }, + "plant/月柿/4.png": { + "sha256": "7cc2dd144b7a846a3a7f0f548c9400d90be838ab4b31cbb9c0d6345c1adb70a4", + "size": [ + 118, + 168 + ] + }, + "plant/月柿/5.png": { + "sha256": "8533c7965e707c999d3b4ac5b7d5c0c4d23c9c5adf3df50dbc00053ed2c1fd4b", + "size": [ + 111, + 169 + ] + }, + "plant/月柿/icon.png": { + "sha256": "e96a3afe563775b0362a5fdd2b546072096432f304c0cf16fdc2023196fcc9e2", + "size": [ + 99, + 57 + ] + }, + "plant/木瓜/1.png": { + "sha256": "0656a3f0be52e081ce87085689884a65ce1be441dea773ddb0e0c8e1ff9f0a20", + "size": [ + 47, + 83 + ] + }, + "plant/木瓜/2.png": { + "sha256": "b28f2056811282249db06ff6982b2b8a9aee596d0a636220ce2bb484bbe719f5", + "size": [ + 72, + 116 + ] + }, + "plant/木瓜/3.png": { + "sha256": "2e9826c1bb1955bb0dd63e4d40bd3fe11865c538c8a4b0f1dcb0a5a0abeaddcb", + "size": [ + 121, + 165 + ] + }, + "plant/木瓜/4.png": { + "sha256": "c5fddc12f721fce13567d8438574216f2c75c4779bec3fffa9c6192048e9f1ad", + "size": [ + 117, + 162 + ] + }, + "plant/木瓜/5.png": { + "sha256": "5e44f2e61ffce1afb60cdebdfd77788b6d4223310eb57a33469edc78c8ebe7e7", + "size": [ + 117, + 163 + ] + }, + "plant/木瓜/icon.png": { + "sha256": "6f9bb3eae80a7815068e949afe26c77f80b8452fa80a85896614abbd02456537", + "size": [ + 95, + 98 + ] + }, + "plant/李子/1.png": { + "sha256": "98cafe37c2c8bc0e9f108ccdc4564d58fcd31f1f0c24f00f3fc20a896be36728", + "size": [ + 26, + 77 + ] + }, + "plant/李子/2.png": { + "sha256": "fe4a5302d2c2655192e03e7a135398bf206a803e6ae26a07100ea360b8ecc8ac", + "size": [ + 53, + 100 + ] + }, + "plant/李子/3.png": { + "sha256": "a03b230085bfc4cc473c86a4a055f722649c504fbb168d1199652ba67f3c315c", + "size": [ + 102, + 158 + ] + }, + "plant/李子/4.png": { + "sha256": "b82dfdb582d7ffc05717ec499df35dff2a1fdb627398294b49a827aea792033e", + "size": [ + 116, + 166 + ] + }, + "plant/李子/5.png": { + "sha256": "421481fea1377808a9bf39c3b5fc2a6d12239e5149349fabbaf928800671bfbb", + "size": [ + 116, + 168 + ] + }, + "plant/李子/icon.png": { + "sha256": "60a02dab5df46e220ff0be75d2db713916c1ec59cbf2a1b67b3ce6aa226e4122", + "size": [ + 107, + 118 + ] + }, + "plant/杏子/1.png": { + "sha256": "24547cb06f1d83b9ee7a977a760da512ae94b0861733ff6cbfa5f108d84aafc3", + "size": [ + 49, + 115 + ] + }, + "plant/杏子/2.png": { + "sha256": "d151cb66f725ebacd671f782f805d57fb4921eb6e2e7597ddfae3c71ea95d279", + "size": [ + 90, + 167 + ] + }, + "plant/杏子/3.png": { + "sha256": "03dafcff7f620964411bf7cc761ca017ff67388391d15f3153731315c91bf251", + "size": [ + 100, + 179 + ] + }, + "plant/杏子/4.png": { + "sha256": "ee50bcf978cdb6f17ab4f448b80a30384223359b1ef3b758338f6485d7c080f6", + "size": [ + 100, + 179 + ] + }, + "plant/杏子/5.png": { + "sha256": "757e4a6e9cdf948efa7b31b565424ea317abf41d99b2730ff730b30700596ad2", + "size": [ + 100, + 179 + ] + }, + "plant/杏子/icon.png": { + "sha256": "c1a1347d7d32c0f958856080b61ebe7fa83c173b3da9f4e2747809f20db588fc", + "size": [ + 100, + 89 + ] + }, + "plant/杨桃/1.png": { + "sha256": "38c3a743d835af31e7ebe449391f30cb91598c95fa30efb925c2d2a4a682bc43", + "size": [ + 29, + 90 + ] + }, + "plant/杨桃/2.png": { + "sha256": "9588a6c33b87f24f2b39a64a50d8852cbd64ead49d83b17383025eff2bc10e10", + "size": [ + 75, + 143 + ] + }, + "plant/杨桃/3.png": { + "sha256": "9f2755680d7aca1907f3292a3916cea604871279dbe71cd8e7ac41bcd49a0f25", + "size": [ + 124, + 170 + ] + }, + "plant/杨桃/4.png": { + "sha256": "5a5f8694d0ea2b9d2cf81a1c0156291cb5227ca12b444d1878b72da432ae4047", + "size": [ + 124, + 168 + ] + }, + "plant/杨桃/5.png": { + "sha256": "2c589b9f82ab62898f7bf1474b8fdf1da14fc92b99fecb21ce5d21fd9a40b34a", + "size": [ + 128, + 168 + ] + }, + "plant/杨桃/icon.png": { + "sha256": "6cfe12632595a2ec0404d295d7f86804171fcc41a25c864d0cfc7699e7ca70fb", + "size": [ + 71, + 100 + ] + }, + "plant/杨梅/1.png": { + "sha256": "e1055ebf1c8cfff05e125201b0c762db7ea41f2a4c6468e49c61deb41bb3eb04", + "size": [ + 34, + 92 + ] + }, + "plant/杨梅/2.png": { + "sha256": "4aa64179780929c5f369476acd8ab6c19b42b68ac52684a1a74a0880987ee22c", + "size": [ + 74, + 134 + ] + }, + "plant/杨梅/3.png": { + "sha256": "dfdf16de981e04644e7ed6cc5eeac92ed58f3351262384d15df8a9e77e3d4af1", + "size": [ + 107, + 163 + ] + }, + "plant/杨梅/4.png": { + "sha256": "da2dff5da296195646fafc9e4461969dfd7b65a9d16093e101fbcad63f792d2e", + "size": [ + 110, + 164 + ] + }, + "plant/杨梅/5.png": { + "sha256": "a7b8ea1ea6798b451ef6a618727966c63d47541c17e0c0ad118e734dfc18a5a5", + "size": [ + 111, + 167 + ] + }, + "plant/杨梅/icon.png": { + "sha256": "9f274296080489dab5c7c38eb9a7466ed5a3004d638036850c971c341035dbd0", + "size": [ + 100, + 82 + ] + }, + "plant/枇杷/1.png": { + "sha256": "286052d49c675c1b82e5fad055bf087dfe3394ffc66a967194aa11570219561a", + "size": [ + 24, + 102 + ] + }, + "plant/枇杷/2.png": { + "sha256": "e86c199ae0a9a34ec1a9ab30d7ee11f362c14df728f680657ca8c9c944bbc2ce", + "size": [ + 55, + 106 + ] + }, + "plant/枇杷/3.png": { + "sha256": "79c24a14e067c802c9b185fcf99f82e2f48dfe1c494269d1610a90cecca10a9b", + "size": [ + 84, + 142 + ] + }, + "plant/枇杷/4.png": { + "sha256": "465b8c6df55413c4d834b3990ae4d41a2e4e275d0807a0cdbff8651244725b6d", + "size": [ + 88, + 151 + ] + }, + "plant/枇杷/5.png": { + "sha256": "3466dbe719f01df5afd442aca04383651fb3e97db804636b4f424a99c09c0e8b", + "size": [ + 98, + 163 + ] + }, + "plant/枇杷/icon.png": { + "sha256": "c3ae8df8df33cbc9abb7356397244ac1c5043b0bbbf153f9ca11c0ba1539e6f5", + "size": [ + 117, + 102 + ] + }, + "plant/柚子/1.png": { + "sha256": "44f6a6cfb3b47be10a4cd6955fbbf536d70317b0d7e6fad2306261ea24cd4c39", + "size": [ + 29, + 95 + ] + }, + "plant/柚子/2.png": { + "sha256": "37ae5033869e1930f918c1df5a12ddcedf9e07460a01efc1dedd3e64aad95cc9", + "size": [ + 78, + 118 + ] + }, + "plant/柚子/3.png": { + "sha256": "06ae06206d89bbe85982f5f34a57da1733a3c7eff4d4bd70b052bd62669d693e", + "size": [ + 118, + 174 + ] + }, + "plant/柚子/4.png": { + "sha256": "6a3981fddf6bdbe35ae49d3a459a958de9111ec5ea1c9979d3eb445600ad8b29", + "size": [ + 119, + 168 + ] + }, + "plant/柚子/5.png": { + "sha256": "bc3b7508bf5636fbdf8fd4f675df8561eadffbb19a841a198d4ccf7e1bcbe2f1", + "size": [ + 108, + 167 + ] + }, + "plant/柚子/icon.png": { + "sha256": "aab5ca9887ca2ee930a08bdc5fe4a95aaa2b4895acd82d14d10868c0aaf645c2", + "size": [ + 87, + 100 + ] + }, + "plant/柠檬/1.png": { + "sha256": "346dfe310bd976088251cedc1f69bc33f640c062aa9d60f69b4eb0932e22808d", + "size": [ + 30, + 87 + ] + }, + "plant/柠檬/2.png": { + "sha256": "aa47257d53f53a135d09325241bbdef7ac6349b146ade46e4478d377c936c0a2", + "size": [ + 47, + 116 + ] + }, + "plant/柠檬/3.png": { + "sha256": "be300a8be1bc6448e60d1d115fcbf809b92c63de173b1218e01d0820514263ea", + "size": [ + 107, + 141 + ] + }, + "plant/柠檬/4.png": { + "sha256": "630cdd5852744ba1e6174ec73ffdacdb6644954d0ab94c977938c1e1161755fa", + "size": [ + 127, + 162 + ] + }, + "plant/柠檬/5.png": { + "sha256": "c4ea033986a2efc1efd5bd6781b72f569cb07ac95d42f881fbe4b48974028815", + "size": [ + 137, + 170 + ] + }, + "plant/柠檬/icon.png": { + "sha256": "c4d3a8c19852859f2c75b8b1a4390bc864f389b49c64a97f08e51ada063fd105", + "size": [ + 102, + 105 + ] + }, + "plant/栗子/1.png": { + "sha256": "c74ed652d4d2d48da6bfeeb1aeb36ac5da598486fd4825c20fd64f7bf57b0694", + "size": [ + 31, + 91 + ] + }, + "plant/栗子/2.png": { + "sha256": "cba68c9034d987491fb49d58b8aa78dcf7ca725a22e45a4ac6350b6523ed4f0a", + "size": [ + 58, + 112 + ] + }, + "plant/栗子/3.png": { + "sha256": "f6587f6fe18c2db80e83b757ddbf0702b793a2006fb842357d9faddaad20b4cd", + "size": [ + 94, + 137 + ] + }, + "plant/栗子/4.png": { + "sha256": "15197d9e2e4470a7c75478812e594d8d672671c95e71b7ea2ea52512db99b769", + "size": [ + 123, + 169 + ] + }, + "plant/栗子/5.png": { + "sha256": "58039c65fc280d3f876c5ad6b4b99709e66cca7cb108bcbc6f5c49df97ca53b4", + "size": [ + 128, + 178 + ] + }, + "plant/栗子/icon.png": { + "sha256": "0ebbf495f0b8dbfd1752901fb529aad85fce9fc417223dc1f0045b7b839374aa", + "size": [ + 115, + 115 + ] + }, + "plant/核桃/1.png": { + "sha256": "34974dff3ea5a18f0e141cd44c0ad1efd5440119e8b60ae2f395d1521bfc5aac", + "size": [ + 32, + 92 + ] + }, + "plant/核桃/2.png": { + "sha256": "062e2c9dc607d894395bfa209bbab92f6e6751dc6548203824caa426447c8e8f", + "size": [ + 76, + 111 + ] + }, + "plant/核桃/3.png": { + "sha256": "afcffc0cbd458ef2112cd8446e7dca3541734e6f3c274e4d06e0e40c4c22f4d5", + "size": [ + 92, + 158 + ] + }, + "plant/核桃/4.png": { + "sha256": "9ffa676f2b2438419940f7cfcbfd47062b600e2062337c6d39f572f88a17d578", + "size": [ + 115, + 173 + ] + }, + "plant/核桃/5.png": { + "sha256": "c839e21dcd3bca16d148acf0a26d1514b2761e52e257e370f7a7790ece3bbd2e", + "size": [ + 115, + 173 + ] + }, + "plant/核桃/icon.png": { + "sha256": "cd44515f455488ca77e8a06d550215a332acd44a9ec7fed2b9d936f9139f5da3", + "size": [ + 103, + 104 + ] + }, + "plant/桂圆/1.png": { + "sha256": "9d924c2c55fc9e2898e262df37101d1b23ebd8a9a3e98cbe4b13e218b05dea33", + "size": [ + 28, + 103 + ] + }, + "plant/桂圆/2.png": { + "sha256": "67a038f9799f7bd988d9b48513085df99c8a309b88f33d2f0ed5b2be96d24261", + "size": [ + 47, + 107 + ] + }, + "plant/桂圆/3.png": { + "sha256": "200589c8736f4a5e38edaa0b21bd324fe481604f06c575cf652c93a816754ace", + "size": [ + 80, + 148 + ] + }, + "plant/桂圆/4.png": { + "sha256": "55c0d319be84ca549b1ca29fa7c47177d63533b8db7adc7537042076a320b986", + "size": [ + 103, + 157 + ] + }, + "plant/桂圆/5.png": { + "sha256": "93ccc38bbe880570f8619a9a91fc714042bd1150a57aea127302aa3e4452e840", + "size": [ + 107, + 164 + ] + }, + "plant/桂圆/icon.png": { + "sha256": "b1498fb415e942018484f76ee10e6119e30d8df1a7a8d9f64ca3a2bfd29b7c33", + "size": [ + 100, + 82 + ] + }, + "plant/桃子/1.png": { + "sha256": "c50a819fc51453ae5944a9cadbf8ad6631d209137bc2e117da2055f323f8000e", + "size": [ + 30, + 112 + ] + }, + "plant/桃子/2.png": { + "sha256": "87c5c2959df77af2ce2f1e5fdd2327aa5115173de3fb31dc35683c18c7bc2e11", + "size": [ + 98, + 145 + ] + }, + "plant/桃子/3.png": { + "sha256": "59acf7b4746949ac9cd1d61230a1f7b6d3edb94ec0d25c10b994c3e7a7475da3", + "size": [ + 109, + 156 + ] + }, + "plant/桃子/4.png": { + "sha256": "0ce1e58539c2d4973950c7af57fea61b7342b3a22fd2f39bc40f22c167850c50", + "size": [ + 110, + 152 + ] + }, + "plant/桃子/5.png": { + "sha256": "7759ec5cd17b1f5c2083e1aa20fae882f1902a98f13fbe79e3a512b03c025a24", + "size": [ + 109, + 156 + ] + }, + "plant/桃子/icon.png": { + "sha256": "1554571946f38ef51e69a32938d909be205dbd10d8312ef6aa16801e4c172029", + "size": [ + 112, + 86 + ] + }, + "plant/桑葚/1.png": { + "sha256": "e4af4860940f4861037d0758c1b306e2f47a3c234c7432bcb17924324876aa0c", + "size": [ + 37, + 97 + ] + }, + "plant/桑葚/2.png": { + "sha256": "818d3746182fbc9b57b69699814513e3c8802f8bcbea94c1d45a5514e093c53e", + "size": [ + 57, + 104 + ] + }, + "plant/桑葚/3.png": { + "sha256": "61fb6b1810b8ca8fb034f721f5adf0873a04c67e4f8cb9da98dddcd379cd2aed", + "size": [ + 107, + 149 + ] + }, + "plant/桑葚/4.png": { + "sha256": "b5010c6ed58a1a1be2f0f4b08b07e8df6ce47dbfa4b9f0ad4add3ae13ec87b20", + "size": [ + 119, + 161 + ] + }, + "plant/桑葚/5.png": { + "sha256": "7a540d5b1c73f5a9dfe2c3979bbe2a54696b2edac418cc1ebf11346be6c58f46", + "size": [ + 123, + 160 + ] + }, + "plant/桑葚/icon.png": { + "sha256": "b59e026d41fd79b2db6a96a4f1721ead48736dc1c53bffa3529faa7b5c422438", + "size": [ + 100, + 91 + ] + }, + "plant/梨/1.png": { + "sha256": "b22336d469ecec23ab9e0c9c51f822977526c5720239b83e3e8d481b4f64fa03", + "size": [ + 62, + 120 + ] + }, + "plant/梨/2.png": { + "sha256": "85e04af6e7119afa658ba9eae36fe34e041fc982ec5f35ae958de92d5769b8f8", + "size": [ + 117, + 170 + ] + }, + "plant/梨/3.png": { + "sha256": "b25b9f16d8415a13a6e6728d71ddec8dcd4380d157b6f940822d2c7eed37ee57", + "size": [ + 111, + 167 + ] + }, + "plant/梨/4.png": { + "sha256": "da7df2f49f62c7de5deef5ad89282694bebdc16a7f6b12f4de7099f6304fa08b", + "size": [ + 104, + 160 + ] + }, + "plant/梨/5.png": { + "sha256": "ca1e7348c8b932caf921a939503b75c407940277cf6abff1208c7d9d21ee36a3", + "size": [ + 119, + 172 + ] + }, + "plant/梨/icon.png": { + "sha256": "c036c59b9f73265616059e16045414fd1581053ecb1ec3d29868f88dd8e6ae02", + "size": [ + 59, + 102 + ] + }, + "plant/椰子/1.png": { + "sha256": "af1a0c2da0c515ec04e748f1c8a0bda3f7c7f8896c59752b48b74d76ed0c51cd", + "size": [ + 27, + 103 + ] + }, + "plant/椰子/2.png": { + "sha256": "f00c8d41de74b53c7d58565590739f49f5f8c9f316827cb4ca12f04ab6562f54", + "size": [ + 106, + 158 + ] + }, + "plant/椰子/3.png": { + "sha256": "f866bd18dde10b3b69b3788188a7a09bd1e9c9ba7d8287c01019e93ac5354324", + "size": [ + 132, + 154 + ] + }, + "plant/椰子/4.png": { + "sha256": "08053c89d953e8d0278376c8e2b64d9dfd587ee44bf21f9ea9e27d54047318f9", + "size": [ + 131, + 159 + ] + }, + "plant/椰子/5.png": { + "sha256": "8dcec7c86f93cbf284941422003df7314c7c49208251d9946264440e602c3ff8", + "size": [ + 131, + 160 + ] + }, + "plant/椰子/icon.png": { + "sha256": "680e371ec17489c49564dcd532c8c53b8e36a84c823282d48e0ae43977e7ef0a", + "size": [ + 97, + 100 + ] + }, + "plant/榅桲/1.png": { + "sha256": "63d469dd7ddb87840ae9dcbdb03280dfe148fae2a8fa9ccaad0bc6da4c8abc96", + "size": [ + 30, + 104 + ] + }, + "plant/榅桲/2.png": { + "sha256": "fcc8f41bf4ccfe76cd613d244b60a1e6c89bb917ed63d879f96d4c6bc8959794", + "size": [ + 61, + 131 + ] + }, + "plant/榅桲/3.png": { + "sha256": "0dca43a66b177f4c280e766f8bb78bf22c6dc25b9e8f12ea377732ce55f36cfa", + "size": [ + 114, + 160 + ] + }, + "plant/榅桲/4.png": { + "sha256": "de85f16c99bfe26dfb39b4a9e59454a28ab296a0670f874722decb40998ef58a", + "size": [ + 120, + 163 + ] + }, + "plant/榅桲/5.png": { + "sha256": "ba37f79b94f6b921e9876fd2f8dc38acd248c05b051448ec00d6739e1fc36820", + "size": [ + 130, + 169 + ] + }, + "plant/榅桲/icon.png": { + "sha256": "af1e97047e3d819736a032704e2ba1b9e89606236c983a553fb2164ae7e8738b", + "size": [ + 103, + 111 + ] + }, + "plant/榛子/1.png": { + "sha256": "57823524c2b59c12b3a7d181f4d20af6105daaa1718da051c70ca4068904e57e", + "size": [ + 21, + 123 + ] + }, + "plant/榛子/2.png": { + "sha256": "8d2cbe6d8ddfc309c24b2628e562f5d064861b4de1cb6268559274142068d10f", + "size": [ + 74, + 149 + ] + }, + "plant/榛子/3.png": { + "sha256": "684359711a897fca5faebf76e0ee3a07fedfca6f7ca41a197a467af8e28a6dac", + "size": [ + 94, + 160 + ] + }, + "plant/榛子/4.png": { + "sha256": "5d9655472465952bf09b35fe0e6a126237597ebdd1a3ff9d32d88e2ee794b890", + "size": [ + 105, + 172 + ] + }, + "plant/榛子/5.png": { + "sha256": "546cbcf436a582c1d8101831c0c7c60185a8ffd00bdda33d1ffe8aa6729fc328", + "size": [ + 110, + 178 + ] + }, + "plant/榛子/icon.png": { + "sha256": "252bb76bafadafbc806b3465b9cb7524ac533588560a8a3e6f42c4790e6396c3", + "size": [ + 100, + 88 + ] + }, + "plant/榴莲/1.png": { + "sha256": "069cfb168b19dda7e42bc9fc80a389013a0a187eb1a064442b0344172c447a6e", + "size": [ + 39, + 101 + ] + }, + "plant/榴莲/2.png": { + "sha256": "4d76eac2c861474420e631d98433a2a3bfab3fc80a19078262b7ac5faa136086", + "size": [ + 80, + 138 + ] + }, + "plant/榴莲/3.png": { + "sha256": "656bb4cf69bc0b4211afc3e479ba80f908212ff6077d60d68d8945f2d704ec67", + "size": [ + 114, + 171 + ] + }, + "plant/榴莲/4.png": { + "sha256": "421d013823ca76bc021ab35ecbb9edd1dfc33f227c0c51b285e924878505de80", + "size": [ + 114, + 171 + ] + }, + "plant/榴莲/5.png": { + "sha256": "4cffb0f238873bae35e96ce4e34bd0ee7ca141a15dc8c9de67681dd900427c10", + "size": [ + 121, + 180 + ] + }, + "plant/榴莲/icon.png": { + "sha256": "9e3deb57760570d9c3012abdbfb96244ff62b7e22bfe050a20de3bbe1ded9d88", + "size": [ + 100, + 117 + ] + }, + "plant/樱桃/1.png": { + "sha256": "f83084bc0c3f655f904074ab0a946ca0858127169ac3c6964b90b19fe2441704", + "size": [ + 32, + 90 + ] + }, + "plant/樱桃/2.png": { + "sha256": "9b62a5ce236a3793d4bc65d2509a48f5421fdb401699785312215f0a3b2e63b9", + "size": [ + 70, + 126 + ] + }, + "plant/樱桃/3.png": { + "sha256": "6cf8d0f8825fdcc5de1026a3f867b3fa29933828bc64c6b32f95864e51425834", + "size": [ + 121, + 142 + ] + }, + "plant/樱桃/4.png": { + "sha256": "50629768570c1c27dbe1c63fb3d8c37ad31500c12133303282c3901848c2917f", + "size": [ + 134, + 152 + ] + }, + "plant/樱桃/5.png": { + "sha256": "5b47c81b741383a8ec2fbeb6cb957ee2a8efcef07b27375f57b61d6eaa9d5e18", + "size": [ + 127, + 152 + ] + }, + "plant/樱桃/icon.png": { + "sha256": "e0847763add698cfbff5ba01c593e5c48e51c20cb49e4c520ee3d25ff049279b", + "size": [ + 95, + 100 + ] + }, + "plant/橄榄/1.png": { + "sha256": "d228b817f50c0b515e665bf36b169fd81a3cdb00afde9adb026e66132323d2cb", + "size": [ + 17, + 80 + ] + }, + "plant/橄榄/2.png": { + "sha256": "4c96df4a661164f805a566f5751f6a6cfa57459e3cfb62fc52fd818e4cd1603c", + "size": [ + 39, + 113 + ] + }, + "plant/橄榄/3.png": { + "sha256": "0e89a032b844ea12473470041f705eb7bfb1323cfbcd5684de3c8a89fadbaadf", + "size": [ + 96, + 139 + ] + }, + "plant/橄榄/4.png": { + "sha256": "5b71a2dd245498f03ea64e5607940a10badf6905eb4fa00bdde7526a9c23456c", + "size": [ + 125, + 180 + ] + }, + "plant/橄榄/5.png": { + "sha256": "2cbe55864dccf267849ac570d95b5b3dce3764c399a7d3242d1a780a78671536", + "size": [ + 124, + 178 + ] + }, + "plant/橄榄/icon.png": { + "sha256": "cc11e206890c9a73781e2caf094b6374789c1912b0cc531db754df22032d3d5a", + "size": [ + 100, + 56 + ] + }, + "plant/橙子/1.png": { + "sha256": "a457199742ec00115c8a79f5023b26d012ff9104439d9246b08bb9f1c5a6bada", + "size": [ + 29, + 85 + ] + }, + "plant/橙子/2.png": { + "sha256": "606959efc3385e4262339d3afc907f58a051fb2b23d19fc9104721ef89d9eb8e", + "size": [ + 49, + 128 + ] + }, + "plant/橙子/3.png": { + "sha256": "a17e0a18c50d9e2bf6d6af43d903c2ab660f45255faee7152070265be2a02771", + "size": [ + 130, + 157 + ] + }, + "plant/橙子/4.png": { + "sha256": "9158b672b6d6b14888ff65256bd1018ddb42815abc01d3070328d37ff5989341", + "size": [ + 132, + 155 + ] + }, + "plant/橙子/5.png": { + "sha256": "49e262b08f18f34184d476bb679d37788b456aa7573d842c8a2db877b93c7b22", + "size": [ + 131, + 153 + ] + }, + "plant/橙子/icon.png": { + "sha256": "d0f4b065f3c68793f7e8b50f942f2b15b3a8b80dc356fe3cf754b50927826c34", + "size": [ + 81, + 80 + ] + }, + "plant/水稻/1.png": { + "sha256": "9d59469abe1398826a6140e39a7f16147a8b2bf58c73580d9a5864977ccc0696", + "size": [ + 166, + 106 + ] + }, + "plant/水稻/2.png": { + "sha256": "a23e9b2c9c7576215f490957a0b2885387bacb90bfedbe183fe4d9472d3d77f4", + "size": [ + 167, + 160 + ] + }, + "plant/水稻/3.png": { + "sha256": "fa9243f259bdf6f67cf87948a52f23969990c2c79209efd06fef33f4e18b18db", + "size": [ + 166, + 185 + ] + }, + "plant/水稻/4.png": { + "sha256": "dce2247d47967c44edea8b298a0ad653347f126351d3c8cc7dccc3a1c5e31ba2", + "size": [ + 111, + 220 + ] + }, + "plant/水稻/5.png": { + "sha256": "c07e7dc220b78c3d68b12c6059cf0398dab34643b0f108a0dfe07c4b04ec9e51", + "size": [ + 120, + 245 + ] + }, + "plant/水稻/icon.png": { + "sha256": "716a384e906552ffd6a1840530f0c92a38a1c182445c3367847cf418dbf55413", + "size": [ + 104, + 97 + ] + }, + "plant/沙棘/1.png": { + "sha256": "2f874ca2c46c36f907f0a9add7bcd997add2dc103f35752c19f8e4a743defeff", + "size": [ + 37, + 107 + ] + }, + "plant/沙棘/2.png": { + "sha256": "db748357faad71fca5e11f8ec53785ba3255ce39658ac0d6b35230fe115f106f", + "size": [ + 66, + 126 + ] + }, + "plant/沙棘/3.png": { + "sha256": "946a9e346d433d1b9d79a34145efbfacac6e681ece32ed5d33bdc4d02e688e58", + "size": [ + 109, + 139 + ] + }, + "plant/沙棘/4.png": { + "sha256": "560d6830fc7ffb78cfa2f73697c83431124d3aca634895ae7561dbc3022d5193", + "size": [ + 134, + 158 + ] + }, + "plant/沙棘/5.png": { + "sha256": "edbf521399206ac3af3db272d9a9e5edf242c8c9ee260fd057991eb113ad96dc", + "size": [ + 135, + 157 + ] + }, + "plant/沙棘/icon.png": { + "sha256": "d6311cb8e16fb96232c695de7b782009af7bb87d8c0febc7b796143c89c1846a", + "size": [ + 110, + 101 + ] + }, + "plant/油菜/1.png": { + "sha256": "70f703c8a1782501341f1c231f45aeea58109b4eaf20185fd0eec4986dbb24c2", + "size": [ + 26, + 83 + ] + }, + "plant/油菜/2.png": { + "sha256": "07b03cb0b2a26ab10f3f850197ac387f87e3f86fdb33a49c2bfabcb17a23c20f", + "size": [ + 50, + 100 + ] + }, + "plant/油菜/3.png": { + "sha256": "5e2afe2d8ea659add5f61c01b581b0b9b42c7f6082dc3b0b898ca6fd486f6c60", + "size": [ + 88, + 125 + ] + }, + "plant/油菜/4.png": { + "sha256": "328998162674fa7db4dd1caf55214b59d7c4b5c86545c15456c0525884392e55", + "size": [ + 96, + 155 + ] + }, + "plant/油菜/icon.png": { + "sha256": "933a6980d88008c67d13d19deadd5390aa4c4c926556b420ce8ee23cf2882665", + "size": [ + 79, + 108 + ] + }, + "plant/火龙果/1.png": { + "sha256": "19b6b4b69d030d311449dbf1d4dc25e1ec8d2c0445a44fe6b0e789c103cce751", + "size": [ + 27, + 94 + ] + }, + "plant/火龙果/2.png": { + "sha256": "099efff46a25a31aefa1cf375591e0f144043b6cdfeab99c87993cf3da14976a", + "size": [ + 50, + 111 + ] + }, + "plant/火龙果/3.png": { + "sha256": "0ac5b5151c3b555ee9d3c638a271c59eecb0e5e6ae0610171d76e1daec7b4001", + "size": [ + 109, + 149 + ] + }, + "plant/火龙果/4.png": { + "sha256": "7a6280420c6a203b1ba95160d30e91d66ff4e03cc37dd57190174843d19117d8", + "size": [ + 112, + 151 + ] + }, + "plant/火龙果/5.png": { + "sha256": "ee95b3b0706f6b0729c677e52f86835022ab2fe93a460bb8acc99667190b7703", + "size": [ + 118, + 150 + ] + }, + "plant/火龙果/icon.png": { + "sha256": "d1085ac11285c860f3ef922007c84846534369c712631b721ba3d62d62e8244b", + "size": [ + 87, + 109 + ] + }, + "plant/灯笼果/1.png": { + "sha256": "29071a6239ff7c7d90a41cf1ad2a368fae8a5ce42e3bcf8e29d0d60b8da8f23c", + "size": [ + 39, + 112 + ] + }, + "plant/灯笼果/2.png": { + "sha256": "2d758cfdc362d6e339462feae7279d2c3148922ddc0e635c5c4b38d52a934976", + "size": [ + 63, + 126 + ] + }, + "plant/灯笼果/3.png": { + "sha256": "40638f68053c5e13a177a274cb1bd799ffeec229a0a050fd055fe752e8efcf80", + "size": [ + 95, + 162 + ] + }, + "plant/灯笼果/4.png": { + "sha256": "72eecf4ff531fc9fb43fd5e25d2188f00db08d117225a1a56bf767f98be945c8", + "size": [ + 106, + 175 + ] + }, + "plant/灯笼果/5.png": { + "sha256": "1663582e1cc5e4bc894b366b43cde2fc32ec7d572b220cc0b4aaed861f5ffe9f", + "size": [ + 117, + 187 + ] + }, + "plant/灯笼果/icon.png": { + "sha256": "47ed2b946f49cb4c55ca0898f2b1488c33b412fdf2eec81781c738cafd00d086", + "size": [ + 78, + 100 + ] + }, + "plant/点地梅/1.png": { + "sha256": "a92dcc6dd4bd1e76b38bc139b6153ec0b7751b57348a62ff2d254f55cfd77d39", + "size": [ + 45, + 76 + ] + }, + "plant/点地梅/2.png": { + "sha256": "6ffd408b3aa47270d823baefb604b4d85004c82b9083adb247a8e6c45785edc2", + "size": [ + 76, + 87 + ] + }, + "plant/点地梅/3.png": { + "sha256": "0ffb466ff4f52d0392348da29b7aebb364f245ef6c43f882ad13aa23ab0e0352", + "size": [ + 84, + 142 + ] + }, + "plant/点地梅/4.png": { + "sha256": "7d59cd9645dbd22d0b052b5424996930040f5b49e17e97fe3ac92be6c8b3ff8f", + "size": [ + 112, + 165 + ] + }, + "plant/点地梅/5.png": { + "sha256": "14789ff2158de1f21a8ee65c7cf91d205fa1c355bfde1c36fe298731f4509260", + "size": [ + 115, + 169 + ] + }, + "plant/点地梅/icon.png": { + "sha256": "116c898756079a2aefbaca110046ed6dc9676a9873369d6ed883b5d0aa873e36", + "size": [ + 109, + 109 + ] + }, + "plant/牧草/1.png": { + "sha256": "183d5a3119c4143cf6f9e6ccdd92deeb5f2ae2266962f9d86670d2952824cc50", + "size": [ + 39, + 117 + ] + }, + "plant/牧草/2.png": { + "sha256": "69ffc0934e2f81b0a17a83e25fa92b11674edf4979656a5f437c0c8613094335", + "size": [ + 63, + 119 + ] + }, + "plant/牧草/3.png": { + "sha256": "b7e126d771b7d2f388aa512a49aed59c1b40400389ea2b2776c1ff94ffb2fa1f", + "size": [ + 111, + 161 + ] + }, + "plant/牧草/4.png": { + "sha256": "d3599f32df48a5bb858b254c0197780683a02b9b383396d946b8d8cfc4d0e564", + "size": [ + 111, + 161 + ] + }, + "plant/牧草/icon.png": { + "sha256": "b98f6273c90c62deb6127769920ff95972011c8cd44564da4d2b9402686a843e", + "size": [ + 100, + 84 + ] + }, + "plant/猕猴桃/1.png": { + "sha256": "a3e09e2b953b0e88db555745cc3b8d169f0fa7e7187db497bbd35aeada448ce8", + "size": [ + 37, + 88 + ] + }, + "plant/猕猴桃/2.png": { + "sha256": "3448034012a68d2a7733f64bf38eb6900e80f8f8cfb87b73ad1bdb576101180a", + "size": [ + 59, + 103 + ] + }, + "plant/猕猴桃/3.png": { + "sha256": "b59790add2a110f871ed8795336bc0015d9a09ef6024a8146a1de5cd28528688", + "size": [ + 90, + 123 + ] + }, + "plant/猕猴桃/4.png": { + "sha256": "cfb163596ad42ffc3e1e8a564b54c83d26a843fd292bd9d13c14690831b61feb", + "size": [ + 117, + 149 + ] + }, + "plant/猕猴桃/5.png": { + "sha256": "3164533174d734b107c88b28e5b7137bab5c5f0156fa16bba488ab04894db179", + "size": [ + 128, + 158 + ] + }, + "plant/猕猴桃/icon.png": { + "sha256": "0cd8e030ea0c2580bbec2fdaa7fbdb1a130304b4d5450b62bc944db002421249", + "size": [ + 100, + 87 + ] + }, + "plant/玉米/1.png": { + "sha256": "ab6d85787babcb2f162c6a33a6ffe3531c617613a2cbe51fb847db2af12e5f72", + "size": [ + 43, + 103 + ] + }, + "plant/玉米/2.png": { + "sha256": "e678f97545bb8586918a2f53af95fe74d90fb70a2cc857621c24a8a0a2535b13", + "size": [ + 74, + 102 + ] + }, + "plant/玉米/3.png": { + "sha256": "3569183a08eb75819eada8330820eff378656cab8ee8f30a075e5fed5197a8ff", + "size": [ + 107, + 155 + ] + }, + "plant/玉米/4.png": { + "sha256": "ef83afb461d541d1aa5a0fabcd6e10aaab68d7b15f6cfe0daa02870e1a8d3438", + "size": [ + 119, + 164 + ] + }, + "plant/玉米/5.png": { + "sha256": "06ce289fbcb3caeb3d6f1436ed7bcfd4bdd6f13f7d0054952087d0ed0d27797f", + "size": [ + 116, + 157 + ] + }, + "plant/玉米/icon.png": { + "sha256": "ab85215c53ebb6494ae37a4b3f64f05091e76aef476282c0c77fab2ba5901ddd", + "size": [ + 98, + 92 + ] + }, + "plant/甘蔗/1.png": { + "sha256": "61b2bc787c83c3964f896d799c928fe206042d83de5ce446e297b3b0640f4464", + "size": [ + 41, + 108 + ] + }, + "plant/甘蔗/2.png": { + "sha256": "b1bdd2e4c2b3f2f67c7ff6949e34d6088548235472fed9fd918d4c29a2c8dd25", + "size": [ + 63, + 119 + ] + }, + "plant/甘蔗/3.png": { + "sha256": "15cb2142e0e4f03ed0150cbd385b1827732e93842eaab3164aab187f693a7f9a", + "size": [ + 77, + 134 + ] + }, + "plant/甘蔗/4.png": { + "sha256": "af3010905c65fcff73cbb352b237c8f3fecbe31f78599cb0adfeaa278255b147", + "size": [ + 104, + 158 + ] + }, + "plant/甘蔗/5.png": { + "sha256": "fef18ee638899247f25c8dfa5a1b2cdd9d13f2cfb87ee9a107780c9dc031e9fc", + "size": [ + 123, + 169 + ] + }, + "plant/甘蔗/icon.png": { + "sha256": "5166bee733ce7b1371e5cd688526259f8072de3f3f4a65f5fc9c259dd3075169", + "size": [ + 100, + 90 + ] + }, + "plant/生菜/1.png": { + "sha256": "63f58761cc51f774e6037cc1b2941667471ff5b0e2eb52da4f140ff4f078d390", + "size": [ + 25, + 80 + ] + }, + "plant/生菜/2.png": { + "sha256": "9e9cdad8809bb05f8cc9673ac89628f3728a1b2361e4f37871a82479a651e969", + "size": [ + 31, + 81 + ] + }, + "plant/生菜/3.png": { + "sha256": "6823949aa588389b388324e74edca069899e0069baf96dedd7871c17a0d401c4", + "size": [ + 54, + 97 + ] + }, + "plant/生菜/4.png": { + "sha256": "c806728b0409a36a2cfe71a2ff933c0c6448d72fc490a3b87b26eeee93f1923d", + "size": [ + 86, + 117 + ] + }, + "plant/生菜/5.png": { + "sha256": "6be682cd11eddac79891e62c587fd57655332f38943a4a24f20e3263397f842a", + "size": [ + 121, + 135 + ] + }, + "plant/生菜/icon.png": { + "sha256": "79b49f2a1ec0310ad5d2f4999ce210a06fbc55c4bdd825b0a944b29137719075", + "size": [ + 120, + 118 + ] + }, + "plant/番石榴/1.png": { + "sha256": "e0a46d739ac7f6295f7de980b0450f1f47f8c70b376e470411537db528b37964", + "size": [ + 49, + 110 + ] + }, + "plant/番石榴/2.png": { + "sha256": "ea27004deb2a6ea6ad905bf243cb485b8fb1caaf1b62efa169fbdf58f2b3a6fc", + "size": [ + 93, + 140 + ] + }, + "plant/番石榴/3.png": { + "sha256": "cc9a431e6595e18b734b23e675263214b1df065fc2ce070dfc0f0cb1fb9732cb", + "size": [ + 101, + 147 + ] + }, + "plant/番石榴/4.png": { + "sha256": "a02326c69787d63d4cacb57f462c6fec83a7ea7a2e0904604190e3f24922c910", + "size": [ + 109, + 154 + ] + }, + "plant/番石榴/5.png": { + "sha256": "4bb8636be46059f0adb39837a011370d6f1db791bfc3ce653240440ff1686012", + "size": [ + 117, + 162 + ] + }, + "plant/番石榴/icon.png": { + "sha256": "3092dbdcba62583f3b54e3f5568a51803815484f3b21770ec6c2b6d254d6a329", + "size": [ + 83, + 100 + ] + }, + "plant/番茄/1.png": { + "sha256": "48de2a54c2868852f70e981a0ef8228ad0bb09499e6c9e84057aaf82f16f7270", + "size": [ + 67, + 98 + ] + }, + "plant/番茄/2.png": { + "sha256": "d45b3e6896e6eaac51d40fe85ed460b686a8f1d91578a271369f0ea2250f9460", + "size": [ + 49, + 135 + ] + }, + "plant/番茄/3.png": { + "sha256": "86eb67cc3904bd2cf234cc30c27b01a911f1abdfeec6ccc58f9569a028ad0056", + "size": [ + 117, + 176 + ] + }, + "plant/番茄/4.png": { + "sha256": "14a494d9d0a42315cf09f7c48e7ad11e33a035bda5d0ae4de0b7e42832808c52", + "size": [ + 129, + 176 + ] + }, + "plant/番茄/5.png": { + "sha256": "52a455a943fa41d30db8c2d20861e2d6d465d6f28511933e2b2b3ec994b41a01", + "size": [ + 129, + 180 + ] + }, + "plant/番茄/icon.png": { + "sha256": "d068d503bc2abdee8037a02981d4511a9c0e3c8f9ebeec13a5ec52c14a4efb61", + "size": [ + 79, + 86 + ] + }, + "plant/番荔枝/1.png": { + "sha256": "0cbe9593e3491aec31c4ba8190e0d3209c7835b1744c118d054f9a22f7ab36ff", + "size": [ + 50, + 132 + ] + }, + "plant/番荔枝/2.png": { + "sha256": "486bb314164cf86f0112a95ce2ca1f0fb9ab902d306f5df038b742f9274f4a9e", + "size": [ + 76, + 147 + ] + }, + "plant/番荔枝/3.png": { + "sha256": "6fece8fd8f5ff7e802d532a9cfdcd5389a491d8c1e4c9236816ae72bc2f50457", + "size": [ + 118, + 171 + ] + }, + "plant/番荔枝/4.png": { + "sha256": "e639076ba0d039908193dc2a5d0eee4abe2ee45ebff74eb289588202c8b1a1c4", + "size": [ + 141, + 176 + ] + }, + "plant/番荔枝/5.png": { + "sha256": "6b4cc5b8b5ae659f34af621d3a7f096d127dadfc6503148973c1bf35d475d57a", + "size": [ + 142, + 174 + ] + }, + "plant/番荔枝/icon.png": { + "sha256": "946051b985a3195521f56e8e4741bb56440d9fb26e9e60323f8be81278353725", + "size": [ + 100, + 86 + ] + }, + "plant/白萝卜/1.png": { + "sha256": "dc2a69d8438e435b57870246d171a29b91d671b8b7846386e2535db68ab380c0", + "size": [ + 38, + 104 + ] + }, + "plant/白萝卜/2.png": { + "sha256": "79211fce07648b11a54e7c6b13e106c02accca504a4be3386371ec18d5c779c3", + "size": [ + 47, + 97 + ] + }, + "plant/白萝卜/3.png": { + "sha256": "4b77bb0f3db7fff21f873881de6c76df9bfc809f92f2fc521745c32550d720cc", + "size": [ + 63, + 118 + ] + }, + "plant/白萝卜/4.png": { + "sha256": "8e06fcb06a8081060dfbb8b6ac2db42a2a3cee14fab4ae57e083f907abc95632", + "size": [ + 133, + 177 + ] + }, + "plant/白萝卜/icon.png": { + "sha256": "ecb0e8d11a620b03f2fb990f1dab5b0ffa051eba136b7bf2c0119e6ec8d9f841", + "size": [ + 70, + 114 + ] + }, + "plant/百香果/1.png": { + "sha256": "0627e9f68daad4fb9dc83f930160e06e750f7c65e419b3cc8b7071108a8c0d70", + "size": [ + 38, + 95 + ] + }, + "plant/百香果/2.png": { + "sha256": "948bf55e5f667cd487237882a4eeddcfc57fbbe0d79f47b421debae0022bac7c", + "size": [ + 50, + 122 + ] + }, + "plant/百香果/3.png": { + "sha256": "c90f65069cd71ac64392dd0c990ddf7954e81d97d127d38e4911c7d4aa142267", + "size": [ + 112, + 171 + ] + }, + "plant/百香果/4.png": { + "sha256": "aeb0b24e74f80c9b842241613fe9c3303284565b56939415f93147a6b006139b", + "size": [ + 112, + 172 + ] + }, + "plant/百香果/5.png": { + "sha256": "a3f852c8ce2dc018411dfcdc651cc6a2adc632b103f82d49801a99b84b54592d", + "size": [ + 112, + 173 + ] + }, + "plant/百香果/icon.png": { + "sha256": "5eef021c067edf9610c4312362f25017b25c885553556e8fa0c86a2b89048b41", + "size": [ + 62, + 100 + ] + }, + "plant/益母草/1.png": { + "sha256": "9abf7208deb4fa48761c15ed825bc3a15c1afd751a1f6cf6a23d7b5b42a07809", + "size": [ + 19, + 77 + ] + }, + "plant/益母草/2.png": { + "sha256": "c542b2fd5605aa32e39e14535f974154fcfe2c8417f6376d0f481b6cac4615a0", + "size": [ + 47, + 99 + ] + }, + "plant/益母草/3.png": { + "sha256": "f09e31995ae863cda34334377066803145ad0c01abb725cafd5ca5ac18605821", + "size": [ + 71, + 118 + ] + }, + "plant/益母草/4.png": { + "sha256": "3a6f6bc009ad50466781f8a4386316c575f782ad50b8fbb7a9ec2285eeba80c6", + "size": [ + 98, + 145 + ] + }, + "plant/益母草/5.png": { + "sha256": "a08322b57a767d6b30f86824068da4c2ee10325c0fb85274dcac62dd34ee37f4", + "size": [ + 122, + 166 + ] + }, + "plant/益母草/icon.png": { + "sha256": "c7abe3edd448eb4af61edc53d25818f42c7ca35e5bb7f3bd5826216fb0f03a0b", + "size": [ + 119, + 101 + ] + }, + "plant/睡莲/1.png": { + "sha256": "345a197c7bd05671ee3183da48023b4d156ca798e8960d71c7db755f1c0575c5", + "size": [ + 133, + 97 + ] + }, + "plant/睡莲/2.png": { + "sha256": "1fabe9809448a903c3b744e9f39b8e21eb0512a544fb7e8f461622fb412db34b", + "size": [ + 133, + 113 + ] + }, + "plant/睡莲/3.png": { + "sha256": "e7d0692948e210901e91109a371c07c2ccad94e3469d7a416b96bbdb66f37a2a", + "size": [ + 133, + 113 + ] + }, + "plant/睡莲/4.png": { + "sha256": "914fe1078d65c61ea6cc9f877f9ca2056277ffa2d8e043a09681c2309718ff96", + "size": [ + 133, + 136 + ] + }, + "plant/睡莲/5.png": { + "sha256": "3f2cf80bac71a4302640a569d9ef8acf88f80ad5374548a965aebf96439ee190", + "size": [ + 133, + 137 + ] + }, + "plant/睡莲/icon.png": { + "sha256": "62bef47fa520c15eeaa8e48da03a669712a7f239f6257c2145d0280069a25884", + "size": [ + 121, + 101 + ] + }, + "plant/石榴/1.png": { + "sha256": "09544e01b3b9a13dcf538fa55beb8120c0c4a3393a08c1a4ce23abdd21c99dd7", + "size": [ + 32, + 119 + ] + }, + "plant/石榴/2.png": { + "sha256": "8888f07cde4e9b52eadbff4080440755c00724b82f2daec87d567e08c87e0f9d", + "size": [ + 79, + 122 + ] + }, + "plant/石榴/3.png": { + "sha256": "fef0b220cf10bb2ee23aabd0d5c68c49302addbbb9e8466336e2010dcef9c661", + "size": [ + 105, + 150 + ] + }, + "plant/石榴/4.png": { + "sha256": "ae5e7adf557381f3b0f7ac4e09f47589ad97ce3a20fe0059d6a364bfa26e945f", + "size": [ + 112, + 158 + ] + }, + "plant/石榴/5.png": { + "sha256": "6f5f68d91db058b781fc455b727ea935d982275d4bbfd0ce5fdb3006ace79d74", + "size": [ + 117, + 163 + ] + }, + "plant/石榴/icon.png": { + "sha256": "8b92d40654dadd72af99fa828d9cc426485e03e2c81bf72ce10bcf96e58f2a5b", + "size": [ + 97, + 100 + ] + }, + "plant/竹笋/1.png": { + "sha256": "1b683b134b5c5e851c6618e3869c3d116cab05a4cfa9d91d5be3ed4cae425f06", + "size": [ + 52, + 95 + ] + }, + "plant/竹笋/2.png": { + "sha256": "60543d08f856292fcc3248b6321b96561be4dce8e4c96a23d9f6d90663283c40", + "size": [ + 77, + 67 + ] + }, + "plant/竹笋/3.png": { + "sha256": "f8a17520b406b26d97caec5ab503311ebc95e9482dbceb8d154fa6c138e184b6", + "size": [ + 77, + 95 + ] + }, + "plant/竹笋/4.png": { + "sha256": "c7b62bd66d6ec765983d07b66d754a7163083b9c4494884b6a7fe327b536bb62", + "size": [ + 100, + 120 + ] + }, + "plant/竹笋/5.png": { + "sha256": "51665020450fcc59d3f00fd68f7d1483fac10d45f2d2854e7a17a3ccff269b36", + "size": [ + 108, + 130 + ] + }, + "plant/竹笋/icon.png": { + "sha256": "0869c695e8c4bdf0a4003069fa16c93329075a654fe0f56e2895c45ddb25a17a", + "size": [ + 117, + 124 + ] + }, + "plant/箬竹/1.png": { + "sha256": "b3413b8dcc810d21316b99c994c2cff60a74200c4fa65693418ba95ba0be027f", + "size": [ + 47, + 118 + ] + }, + "plant/箬竹/2.png": { + "sha256": "17eba0656d5c48f6819f34676b89d7b9f683a3a34ac502ac7eae468be464bf50", + "size": [ + 64, + 142 + ] + }, + "plant/箬竹/3.png": { + "sha256": "2f62b3036cc4cfc3ffe507932940ece597094b5d572e686d2507be47a563300f", + "size": [ + 80, + 152 + ] + }, + "plant/箬竹/4.png": { + "sha256": "3c81704c43db543e2bce11ca41b2ded23951ab7f81df1ec7e9243c17f682a6e1", + "size": [ + 103, + 169 + ] + }, + "plant/箬竹/5.png": { + "sha256": "4e208e53d927ba13b8a70eb79ad3d3485444e098a8cd62959dc4633fd01394fe", + "size": [ + 123, + 177 + ] + }, + "plant/箬竹/icon.png": { + "sha256": "3c2f04f7c6369210928e82821d86e071714d3eb46a21f41cbec80e06b619ae59", + "size": [ + 130, + 115 + ] + }, + "plant/红叶梅/1.png": { + "sha256": "980ad331b234d9d65a2d1bb7086251daf9847f1f161b0a66b422e09765725deb", + "size": [ + 24, + 76 + ] + }, + "plant/红叶梅/2.png": { + "sha256": "541b45ecb3c3f719e1a413ccabeb645ab72749ea692a3981cf901dbb93cafdf0", + "size": [ + 41, + 107 + ] + }, + "plant/红叶梅/3.png": { + "sha256": "1a443bec6a1aea5fbf58a9e3f0acfe6eba4343fd7143d3e165fe8ac97d5de1a7", + "size": [ + 74, + 122 + ] + }, + "plant/红叶梅/4.png": { + "sha256": "18336cebd29ecc8ef78b04b76d73841bd3f06c071aa088a61f907ceee7a34325", + "size": [ + 119, + 141 + ] + }, + "plant/红叶梅/5.png": { + "sha256": "366dcf64921244226cbd7045de0d8502202272fdb4636df9e7b23596eff21cb2", + "size": [ + 149, + 160 + ] + }, + "plant/红叶梅/icon.png": { + "sha256": "a068b39b571c99ad2c6b43d62388ac21a1139e1cfe6bffac5dec5414bb0f3148", + "size": [ + 102, + 95 + ] + }, + "plant/红枣/1.png": { + "sha256": "f94f0c732f1f31e35514fd74ff06d188d432ced16e080ae1e6b3a206bdedb600", + "size": [ + 51, + 101 + ] + }, + "plant/红枣/2.png": { + "sha256": "efe3074e67477714887ac8a5f6fc5b931dba585e11027ca91ebc1b48d020ab24", + "size": [ + 72, + 127 + ] + }, + "plant/红枣/3.png": { + "sha256": "fff959106d712a607c50e25def7891a54a1dd0b49ad3cc9e0c476bf8c398a3b1", + "size": [ + 99, + 149 + ] + }, + "plant/红枣/4.png": { + "sha256": "355b3b3ed414b21c540351b2179401da2983028bcc413eede019b8d8951a21bf", + "size": [ + 110, + 160 + ] + }, + "plant/红枣/5.png": { + "sha256": "8070f2acddee0670f8eb89442b44f9a7ac0cb46d2507a7bcc94dc02981ea4028", + "size": [ + 123, + 169 + ] + }, + "plant/红枣/icon.png": { + "sha256": "736a6d84f1fa93da922ef90fb578d42d27b7507b07b407434b0a0f75649fc3c4", + "size": [ + 85, + 100 + ] + }, + "plant/红毛丹/1.png": { + "sha256": "683062c1571ebdcd49dcdd3ca964d32dd06cab2ca4af1e5c62871d6ee2420ad7", + "size": [ + 41, + 111 + ] + }, + "plant/红毛丹/2.png": { + "sha256": "c74b738942b34582d81acfb4aaa4cef1981ea3439e8c893cdaa77aab138e319d", + "size": [ + 92, + 139 + ] + }, + "plant/红毛丹/3.png": { + "sha256": "a6896447e26ad0c29a880c9421fda654130e7cd78e73e21416a0107d863d1b04", + "size": [ + 107, + 160 + ] + }, + "plant/红毛丹/4.png": { + "sha256": "304c9c4357c71adcb12aebb9d2a391d741b7cf948ba64c19b8e60606589e0f04", + "size": [ + 119, + 174 + ] + }, + "plant/红毛丹/5.png": { + "sha256": "199fb4e700c3d5f006988842e667d15e01e93d608603b60b80a0a1157e555b80", + "size": [ + 129, + 176 + ] + }, + "plant/红毛丹/icon.png": { + "sha256": "3ad66e423f4951f8015a2cc9c34e8a8432e0d7aee65ce3f5c831180e86bef138", + "size": [ + 108, + 97 + ] + }, + "plant/红玫瑰/1.png": { + "sha256": "7277bfb069ef402cb85f021436a748289abdabc0076193b090bdefad1e7e8285", + "size": [ + 53, + 88 + ] + }, + "plant/红玫瑰/2.png": { + "sha256": "8d56e23c265555a755af863578d003895b2c5534c83384ba9b36cb9ff95b4ee2", + "size": [ + 73, + 127 + ] + }, + "plant/红玫瑰/3.png": { + "sha256": "479ce727328db8b8aa772829a7c7ec81d43aff8ed0ca00b740566cbab9283883", + "size": [ + 100, + 153 + ] + }, + "plant/红玫瑰/4.png": { + "sha256": "0b8e03a472d380b7429fb62b58903b6bc4df47cb8e20190b64835711e59c2fbc", + "size": [ + 118, + 159 + ] + }, + "plant/红玫瑰/5.png": { + "sha256": "0229e194e44ad2de8c2e57e8ab19fb333e2fbddd90852374b378178f3759195e", + "size": [ + 120, + 158 + ] + }, + "plant/红玫瑰/icon.png": { + "sha256": "5a1e4f71db8f8c432cc6e3078db0c3dbb083fd0590a64e72f6d8ca5dc5053f84", + "size": [ + 92, + 102 + ] + }, + "plant/胡萝卜/1.png": { + "sha256": "2bc84cb733bf8c1615d16c06c97b1ae75df7cab671a0163d289fc3abde0d6a85", + "size": [ + 38, + 100 + ] + }, + "plant/胡萝卜/2.png": { + "sha256": "d5413f0bcdae26d067fd4e1e227a03e823089c3fa4e81a9a6c24a818c52c812d", + "size": [ + 47, + 95 + ] + }, + "plant/胡萝卜/3.png": { + "sha256": "811422d67fb641c5df55ba30d0592329f58cfa8ac5ec2ce90eee4cd7c9cc460c", + "size": [ + 63, + 114 + ] + }, + "plant/胡萝卜/4.png": { + "sha256": "10761093cbaec3b308b688b4100a2ceb0ac91119b29cf08b37cb56a60c73b11a", + "size": [ + 84, + 168 + ] + }, + "plant/胡萝卜/icon.png": { + "sha256": "d1d1da2511f99fa843b671a187ca2d488ab2b6e925db3d13e0ceb6d5a88721b4", + "size": [ + 60, + 113 + ] + }, + "plant/芒果/1.png": { + "sha256": "f50cd34122a6fe5111d78e796889b4278edd5eac3bc9ae7a82df82628001e237", + "size": [ + 43, + 104 + ] + }, + "plant/芒果/2.png": { + "sha256": "365382d50026838bf45e2e47c641ce56739e91f5d34acb1a3ba0f680f2a77549", + "size": [ + 73, + 128 + ] + }, + "plant/芒果/3.png": { + "sha256": "971bc9a0191d746c76c1f43248c95ddef723433a8c8aa444b88ae9918d6a82a5", + "size": [ + 113, + 155 + ] + }, + "plant/芒果/4.png": { + "sha256": "896029f0f33861d0da6df61b489e44cb01b0c1fdbb7318a5caf2421cf1649fdc", + "size": [ + 124, + 173 + ] + }, + "plant/芒果/5.png": { + "sha256": "f2f218e287d15dfc2b9f89bf688ced2435db5421655b3828089ffbce1dbdd777", + "size": [ + 124, + 168 + ] + }, + "plant/芒果/icon.png": { + "sha256": "98146d3d643dec342ba0f19bb455d600eaba1e3cc7abd4d7bd150adec95a0bdd", + "size": [ + 110, + 104 + ] + }, + "plant/芦荟/0.png": { + "sha256": "555992a140d13779320cf1b529f0e579c0c9095ab8b6caddc442111bdb3ca8bb", + "size": [ + 23, + 25 + ] + }, + "plant/芦荟/1.png": { + "sha256": "3750257fc18884b444f0e7460ac564a816c5f665be999ce819a30f5a0d453467", + "size": [ + 30, + 80 + ] + }, + "plant/芦荟/2.png": { + "sha256": "b340b3dc41ca6bc63eacc269eac3c4dc6f4264be4c47c074460ba82945edf0a0", + "size": [ + 38, + 93 + ] + }, + "plant/芦荟/3.png": { + "sha256": "f019d7ceaa9ecb538acab0c56d921ef025941ddd26ce11ca1c7751d373d0e424", + "size": [ + 69, + 108 + ] + }, + "plant/芦荟/4.png": { + "sha256": "aab02531bc23d2942c498ebee86ae53a7e64465387e3a426b207ca43150c1b23", + "size": [ + 101, + 161 + ] + }, + "plant/芦荟/5.png": { + "sha256": "c58838bfb72c482045c9f884bca7439e9a700866484aa281404165281384ba7f", + "size": [ + 132, + 141 + ] + }, + "plant/芦荟/icon.png": { + "sha256": "430907d07e2bb080177537d79957f3cc1350e3f6ac09d578e5aeeac013386a4b", + "size": [ + 97, + 100 + ] + }, + "plant/芭蕉/1.png": { + "sha256": "06611ad6d2961b4e0c8d8993f6fe873159605ef90a7a698eeddefa352e31a4b2", + "size": [ + 39, + 96 + ] + }, + "plant/芭蕉/2.png": { + "sha256": "c6b9529d1f3561272b51ff54a07e31c501672e447f56e23f9566558ed12c248a", + "size": [ + 57, + 118 + ] + }, + "plant/芭蕉/3.png": { + "sha256": "e4a76d4524a8fab10425ae3c19809748aa385407ed9acc69ae7f2ce167213a8d", + "size": [ + 105, + 156 + ] + }, + "plant/芭蕉/4.png": { + "sha256": "27bfb6304efbf52a26cb148f10fb2d3484feac993b64c877de7d5ffd36fa22ea", + "size": [ + 111, + 162 + ] + }, + "plant/芭蕉/5.png": { + "sha256": "3bee0f94dc687fe3850ab4bdfdd1673777dc25248b500f20d847599913b9145f", + "size": [ + 119, + 170 + ] + }, + "plant/芭蕉/icon.png": { + "sha256": "b98968c8b9ed9530885b8b5b9f88b37ed3cd50c8d4d5ba80c5a79d1a470e6520", + "size": [ + 100, + 92 + ] + }, + "plant/花生/1.png": { + "sha256": "3396431e856ed6079f04f17678192767ced92c7bd3da74756c4a8e611ac7f8d7", + "size": [ + 55, + 86 + ] + }, + "plant/花生/2.png": { + "sha256": "924933797db6d9c2a8383284290d1c9cb380678ee12628b6cc85802a51b39ab6", + "size": [ + 74, + 112 + ] + }, + "plant/花生/3.png": { + "sha256": "e881d148a62c79e69e64bfcd1fb435fe4b6d5c2848c1facf19923f3ab2a15c8b", + "size": [ + 97, + 142 + ] + }, + "plant/花生/4.png": { + "sha256": "e443fd84beb6acb528e8112d40dfd907ed407ddc03b1d05ddddb7c440d964d09", + "size": [ + 100, + 141 + ] + }, + "plant/花生/5.png": { + "sha256": "7a8eccc6b558d2f8bfe9ca1e6e3585b262920f40ab8a4e2f07c9f6d622d96f64", + "size": [ + 112, + 154 + ] + }, + "plant/花生/icon.png": { + "sha256": "209782db4277b5fe74649b5903793ead7b7d15dd16a7ac1fe5c34e6916b3d2dc", + "size": [ + 96, + 100 + ] + }, + "plant/花菜/1.png": { + "sha256": "8af560b67bf18511011519606bfe7cf43fc25a6716edc9a7cdf6d8d4b44b4d29", + "size": [ + 22, + 67 + ] + }, + "plant/花菜/2.png": { + "sha256": "e910d20bbdd50bdd80383cb0a7d2fdaa6346d52373bce8eca5253d46696a891f", + "size": [ + 47, + 82 + ] + }, + "plant/花菜/3.png": { + "sha256": "2a6815eb90a55253d2729a8313d01d511f71969a6271d6ca55974cb2e3cf4088", + "size": [ + 78, + 108 + ] + }, + "plant/花菜/4.png": { + "sha256": "0789f207a19a6144b1b32e60bb2d33c4901792d27c1a7d81137a3349d61e1fc2", + "size": [ + 103, + 125 + ] + }, + "plant/花菜/5.png": { + "sha256": "1bcf80be3aeca323142277b7a3a3cc4600384e9c508d75dcd7609767ff927ea8", + "size": [ + 124, + 128 + ] + }, + "plant/花菜/icon.png": { + "sha256": "14f09974b3bd97262df037409ce645bdf4cf1d952393729a3c31474b4c817709", + "size": [ + 107, + 78 + ] + }, + "plant/芹菜/1.png": { + "sha256": "ce89731b1acb336204f5e6be67f1bd83ddb19fbe7b11c0b9f10a53c2f42ae1c4", + "size": [ + 21, + 69 + ] + }, + "plant/芹菜/2.png": { + "sha256": "9349654ca5a194ba634c2642561c58ef13713960062591ee0e1ff0f0d862a1c5", + "size": [ + 25, + 91 + ] + }, + "plant/芹菜/3.png": { + "sha256": "7613edaddce8c9ecd23fec87ff755cc87b7aa7f02d3f1920348089851009b521", + "size": [ + 46, + 113 + ] + }, + "plant/芹菜/4.png": { + "sha256": "a36164433a010e3df32bff1b80465a18be4671b94cfb4349ad33d09518e37caf", + "size": [ + 83, + 138 + ] + }, + "plant/芹菜/5.png": { + "sha256": "22eb46300650bab577002e22765e026d8e819dbcc5639d726f3c7459ffaa039e", + "size": [ + 121, + 162 + ] + }, + "plant/芹菜/icon.png": { + "sha256": "67d02f361300e5c35a857300246a6938f75327fc99796ff44da3aa0fa1693f5d", + "size": [ + 87, + 117 + ] + }, + "plant/苦瓜/1.png": { + "sha256": "1b867b253447c4017c088cb92f786a3bf69f04b30894c24e6ca036a8e595c0cf", + "size": [ + 40, + 120 + ] + }, + "plant/苦瓜/2.png": { + "sha256": "9d7a8dd73bb423b0ca16539562fc5acf91c8f4c63d413c962c5f69976c1eff62", + "size": [ + 132, + 120 + ] + }, + "plant/苦瓜/3.png": { + "sha256": "1c08fc26c01b608acd7066304bf12b29ecc1ede9f72aa297c1accd1b3f3c2173", + "size": [ + 135, + 125 + ] + }, + "plant/苦瓜/4.png": { + "sha256": "8b2ce7a3fa04bbd01c28c4049844f0b7b0e0798c3a3612564499608d3dbd3360", + "size": [ + 140, + 135 + ] + }, + "plant/苦瓜/5.png": { + "sha256": "0d565cc87eb81c53c91ee3a59ffc10104336e48950240048dcdc4ad815d432a8", + "size": [ + 140, + 136 + ] + }, + "plant/苦瓜/icon.png": { + "sha256": "7d27545e0e5fb484a07e11320d961a1adce233e4e79af0074a0075be05eb599b", + "size": [ + 121, + 113 + ] + }, + "plant/苹果/1.png": { + "sha256": "58489370ad633b70fb837d60182bb71fead19ac0d5d055b0b94848128d6ada09", + "size": [ + 26, + 104 + ] + }, + "plant/苹果/2.png": { + "sha256": "fa703b9efa2f95c7f22768d089c0ba0656aa0e5d040bc71e80de0b3e4fceebfb", + "size": [ + 58, + 99 + ] + }, + "plant/苹果/3.png": { + "sha256": "6181a433ba1100c1bc4efc4cce7c2ae4bd9e967fa7ce58000cf1e9348ec93035", + "size": [ + 128, + 154 + ] + }, + "plant/苹果/4.png": { + "sha256": "5210b120df524d38353ddc4b93fca03fcf7ad0b3e98ac8f609e91e50cf3978a3", + "size": [ + 128, + 154 + ] + }, + "plant/苹果/5.png": { + "sha256": "0a9b2c863dd1fd4f80f1568e5d809e6a97b2c8c0fdc9f7d8618f90556213d163", + "size": [ + 127, + 154 + ] + }, + "plant/苹果/icon.png": { + "sha256": "08205603d4cfbc1d48256c5a2454713f6b9ee19b7d2e02135b8fbedea3dd8bd2", + "size": [ + 81, + 84 + ] + }, + "plant/茄子/1.png": { + "sha256": "4cecea91a8855112274a9e5badc2ed4648395ee6ee25834027202ec884dd54e2", + "size": [ + 47, + 89 + ] + }, + "plant/茄子/2.png": { + "sha256": "b66daf3e5069b8688de1479fc9d33eda39141d18b6a478d48637620f236fe9da", + "size": [ + 87, + 109 + ] + }, + "plant/茄子/3.png": { + "sha256": "7442ba729f0d282109794491f2725fbb1cc9dd52134ea596a4910ddfcde01e4f", + "size": [ + 113, + 159 + ] + }, + "plant/茄子/4.png": { + "sha256": "54b2dd799b259cf486cd81b0590bb8dbfce2ca69ec367e69ad65dec776dce69a", + "size": [ + 113, + 160 + ] + }, + "plant/茄子/5.png": { + "sha256": "dfc35e0273b5855d488c7ffc550d04a1747d4b9053ef9e0d40508331a195a5f0", + "size": [ + 113, + 160 + ] + }, + "plant/茄子/icon.png": { + "sha256": "19024e5f6fa4531dd8d902e2516c9ee28838c1c05c609d1fce2a928b6b954995", + "size": [ + 71, + 114 + ] + }, + "plant/草莓/1.png": { + "sha256": "41e22d82821a2865861a1b033a1d6b3dd255fe1cfabb66dbee524ad1f856965f", + "size": [ + 32, + 81 + ] + }, + "plant/草莓/2.png": { + "sha256": "8b7b48aff4ebf32639d745f1cd6686a5b93d1e6a4186a3ec61d0b5d2fb2f5f9d", + "size": [ + 61, + 99 + ] + }, + "plant/草莓/3.png": { + "sha256": "0bad90f18f477e808d9c1a882c3df9f73342d0459dca3652b20ac6016c21b2ff", + "size": [ + 102, + 121 + ] + }, + "plant/草莓/4.png": { + "sha256": "b56e1cbe691afa90c0cba8d677faa55e0eb8f8f09caf882cce42e1d22701a57f", + "size": [ + 107, + 129 + ] + }, + "plant/草莓/5.png": { + "sha256": "7349d62a53c2bb81ecf737881b7e6e88849cd4d46869883be0329ab472087be8", + "size": [ + 112, + 139 + ] + }, + "plant/草莓/icon.png": { + "sha256": "944d31863cb42c60d4c966626ed22ef11aef830a59cc911cd3881415164c2c9d", + "size": [ + 68, + 85 + ] + }, + "plant/荔枝/1.png": { + "sha256": "ab9b782e02b4ca7986edd43806255d3d148ae37aab7464d8333448bdec03ae8f", + "size": [ + 49, + 108 + ] + }, + "plant/荔枝/2.png": { + "sha256": "269baba50df41791d84cfb31621f41b743fb3cdc0a0d993467d5c96c9c25a7e0", + "size": [ + 98, + 143 + ] + }, + "plant/荔枝/3.png": { + "sha256": "26589a2c99c4a98a0d26f90a0c7c2b318bb1a117648844508e6e25e80d5cb29c", + "size": [ + 119, + 163 + ] + }, + "plant/荔枝/4.png": { + "sha256": "c7db603fcf3957b5f1e4108f0082f33ad175e1a82e7e5b0ab9b198db49103d5a", + "size": [ + 123, + 163 + ] + }, + "plant/荔枝/5.png": { + "sha256": "cbf95c2fb840997fef4d2d3cdb6a8f29c548359707f0fc665a031d034ef692bc", + "size": [ + 123, + 168 + ] + }, + "plant/荔枝/icon.png": { + "sha256": "2aa93fd50fd3d04bf3711d831571502388943c8f0a3549bd623c78e1b435f8a4", + "size": [ + 96, + 94 + ] + }, + "plant/莲藕/1.png": { + "sha256": "a42bffcd5739905c108694800a2f9052ab598ef3142ceab32635c7d89fcca822", + "size": [ + 133, + 93 + ] + }, + "plant/莲藕/2.png": { + "sha256": "f1a8d16f644fc05f117ce260802f316c652500d9f184ca6f985de49aa576a533", + "size": [ + 133, + 94 + ] + }, + "plant/莲藕/3.png": { + "sha256": "d334a61e43e98dee4065cd2ae67aaf3f6ad916c0d79c576824c37e381fc035da", + "size": [ + 133, + 104 + ] + }, + "plant/莲藕/4.png": { + "sha256": "1c9dc807c9f1da6c5aaa852da5e2bbb756b55d3d1dd577f1e3dfa7d338bcc388", + "size": [ + 133, + 123 + ] + }, + "plant/莲藕/5.png": { + "sha256": "0994d5e20a46ea66ac8c797c0eb839200880bf9d5782e1e715683ed8aec647fb", + "size": [ + 133, + 124 + ] + }, + "plant/莲藕/icon.png": { + "sha256": "ea649264fa6a4f38130341d32ce5ee3012406bda3171be2650aa708d2bb7caa9", + "size": [ + 117, + 92 + ] + }, + "plant/莲雾/1.png": { + "sha256": "9431b91d919dd3d1437754974b794c916fcceb03b5951de2fa6bf34ffade136a", + "size": [ + 40, + 114 + ] + }, + "plant/莲雾/2.png": { + "sha256": "0b0f449a1250e128f788ef0b481a85ace5d344610405ddbaf03bbf8428e08f1a", + "size": [ + 98, + 130 + ] + }, + "plant/莲雾/3.png": { + "sha256": "3b956d1fad6b50c9240dbb4772806c035579995c7967fa9505932bdb400c29f2", + "size": [ + 117, + 161 + ] + }, + "plant/莲雾/4.png": { + "sha256": "22426916da13d9914b7f4f75ee929a4389a1f3bdf5d20e1074679220b1f3c11a", + "size": [ + 117, + 162 + ] + }, + "plant/莲雾/5.png": { + "sha256": "cd6f65f142652de62fb8527ed31349b1f0e4a7b350961f310dd9ccf5ef4b0e94", + "size": [ + 137, + 173 + ] + }, + "plant/莲雾/icon.png": { + "sha256": "00df393cf5a119b0f63af5450922fcc832f005096ad7462b0b9968e67d365060", + "size": [ + 110, + 115 + ] + }, + "plant/菠萝/1.png": { + "sha256": "095bc21487704ebff96be9dca7fec02109de462f7c1b3d16a1d1f0344431c8e5", + "size": [ + 34, + 78 + ] + }, + "plant/菠萝/2.png": { + "sha256": "251f18075ced808660aac387511f105fc3a6eaf36f55fb646e2146f7756a4e9c", + "size": [ + 89, + 103 + ] + }, + "plant/菠萝/3.png": { + "sha256": "8532c22701df600cafc33d46ce1aaae76098cd55f32b0ad7b269bac3750bf43d", + "size": [ + 134, + 134 + ] + }, + "plant/菠萝/4.png": { + "sha256": "d0c2ed6c65cd745cb6a3b6615eb60cf41001b3b2a1dc9d7707f44cf04f8ee11f", + "size": [ + 134, + 134 + ] + }, + "plant/菠萝/5.png": { + "sha256": "46f4d021e66b9ff16294971ee128f2f0583cf837fa8a04e5460ea9584c90b452", + "size": [ + 135, + 144 + ] + }, + "plant/菠萝/icon.png": { + "sha256": "bd917d4c1f654099c70c0d207d2f25b849dc8233bec2689e41058f59461fe354", + "size": [ + 52, + 98 + ] + }, + "plant/菠萝蜜/1.png": { + "sha256": "01e680897d54eb7760ac9d22fcc0885f39a3d6595816ee27e8468d87b70badc4", + "size": [ + 53, + 105 + ] + }, + "plant/菠萝蜜/2.png": { + "sha256": "bc7da7c643c85263cb276677aa495bbd447b77ee0b2928328cb23de27553356e", + "size": [ + 69, + 111 + ] + }, + "plant/菠萝蜜/3.png": { + "sha256": "4989ff8f7ce43ff6a59c9c43a369571a9ab01a6697dbf4cfd947ff2f123ed93d", + "size": [ + 104, + 137 + ] + }, + "plant/菠萝蜜/4.png": { + "sha256": "ee4520c2ed9cdb82517c5f25eb27c054c7dbc25adf7dc2ddced203645b373d8b", + "size": [ + 117, + 146 + ] + }, + "plant/菠萝蜜/5.png": { + "sha256": "201ba4fd4d32ba75791cd3afc1bdc5dcbb37dfa674fd7f76a9017967b1f9cb70", + "size": [ + 119, + 163 + ] + }, + "plant/菠萝蜜/icon.png": { + "sha256": "40bb7a2160585857fa2981b373f714ad28f5e26deaa47a5196d709a870bd4788", + "size": [ + 85, + 106 + ] + }, + "plant/葡萄/1.png": { + "sha256": "e05ea961bb08079022c11cdc0061567bd7d497952e259c8c9460331b57726715", + "size": [ + 47, + 108 + ] + }, + "plant/葡萄/2.png": { + "sha256": "0aa259ef712cb9a6c9c3aa876dd435d134702aa677c1d6a60d0d9692f8c8f3c3", + "size": [ + 63, + 135 + ] + }, + "plant/葡萄/3.png": { + "sha256": "ab6cad29787576494d550d2c22c4dd785d06c35dc8be4821dc7fc79bbbbe9f6d", + "size": [ + 112, + 167 + ] + }, + "plant/葡萄/4.png": { + "sha256": "3a68b89f6a2341337fd863c67cf77cdee17b5fd319d12bc867b86ad7ee3708b7", + "size": [ + 125, + 167 + ] + }, + "plant/葡萄/5.png": { + "sha256": "ad3b4a49da8a0c8ca9e9a22bdbbd29b29bda237d45bdc4ca85a0d342e7b128e7", + "size": [ + 121, + 164 + ] + }, + "plant/葡萄/icon.png": { + "sha256": "9f399f41d7edc4557f98173a18b52bf5bb08af54795c359a1ff93f0020d33c41", + "size": [ + 52, + 95 + ] + }, + "plant/葫芦/1.png": { + "sha256": "798cb9262f75503ca5afefdcd4c000a8722e4b9fb70246a4b457bef3c68d37fc", + "size": [ + 29, + 97 + ] + }, + "plant/葫芦/2.png": { + "sha256": "953d72d803c002de006564a2a56a3c05d5604644c7c946a0b94c814e000a04c7", + "size": [ + 67, + 115 + ] + }, + "plant/葫芦/3.png": { + "sha256": "5d78e1488b1ddb612700218f0c59eb6f5072c905215d5064f0d518b9df2d8721", + "size": [ + 102, + 141 + ] + }, + "plant/葫芦/4.png": { + "sha256": "e8170e24e1807ec40baf2f0dfd224a6bbce4505fffdd82d9538e45b7322987d6", + "size": [ + 113, + 158 + ] + }, + "plant/葫芦/5.png": { + "sha256": "809985462304c16907dc73c60d5e78be51bb214763f92bf899ed6d56a80e61b2", + "size": [ + 124, + 160 + ] + }, + "plant/葫芦/icon.png": { + "sha256": "0f14b06f23483b63133e2a238bdd7a5415db75fc3e9187b650cffb6d003a461c", + "size": [ + 72, + 102 + ] + }, + "plant/蓝莓/1.png": { + "sha256": "db60ee0cc1d84add18c184e2be8335f566f43b07bc33e6ee030af6676eb1cd61", + "size": [ + 37, + 93 + ] + }, + "plant/蓝莓/2.png": { + "sha256": "f955e71a0f0ef2bea245f9a9eff3dbf8b4d351018eb90b72f9235ae7ac007a03", + "size": [ + 59, + 100 + ] + }, + "plant/蓝莓/3.png": { + "sha256": "b61ce54acb086f0e879e218ccc1db52876506ee482bd2650a006054f54417eab", + "size": [ + 82, + 118 + ] + }, + "plant/蓝莓/4.png": { + "sha256": "984d082c1942607a3514841a00baa81f9e381bf359e2bbbf8d0fdabe39e3f50f", + "size": [ + 101, + 141 + ] + }, + "plant/蓝莓/5.png": { + "sha256": "6d2b91a09f7f7f084f25e4897d3487cb87b431b315391872cd6d20947a75b0b5", + "size": [ + 101, + 148 + ] + }, + "plant/蓝莓/icon.png": { + "sha256": "84e847a089565a529ca5d8a98f3624a70c8685dd81b5d13befa51659c419abcf", + "size": [ + 100, + 76 + ] + }, + "plant/薄荷/1.png": { + "sha256": "b3c640403fc3044c82a7b53deed4765c7deb566c33b4f194804f8b079096e99f", + "size": [ + 29, + 81 + ] + }, + "plant/薄荷/2.png": { + "sha256": "97f0efb30a0ca65b0536293e250848af0e2c1ddf16af51c103577f66d15578ac", + "size": [ + 60, + 130 + ] + }, + "plant/薄荷/3.png": { + "sha256": "675716bfaed63d2e6288a832ea8abe1ec239f9ef9f1abb55f0b520e43668af59", + "size": [ + 105, + 144 + ] + }, + "plant/薄荷/4.png": { + "sha256": "d04970084713fc4e795ca2beba6766aa167ab5cb175fb17304711c30c49af96a", + "size": [ + 114, + 155 + ] + }, + "plant/薄荷/5.png": { + "sha256": "ec1fd959ff6ad75c18e2d29da94a990691348ae67f1ffed3f0972b9cf4285a6e", + "size": [ + 129, + 166 + ] + }, + "plant/薄荷/icon.png": { + "sha256": "8f308a72fe8a928e0198a3d5e16c67359843f09e184be015607d5a3453f48b84", + "size": [ + 100, + 92 + ] + }, + "plant/蘑菇/1.png": { + "sha256": "f2bb06ef90351e4fb4f10efdcec33ef608ff0f2d173ddd7a707edc708302ed85", + "size": [ + 127, + 102 + ] + }, + "plant/蘑菇/2.png": { + "sha256": "388385d703e59ae9f1190a1ee6b1e74e1a628aba675b459a370fcb5c56d7eb02", + "size": [ + 127, + 97 + ] + }, + "plant/蘑菇/3.png": { + "sha256": "4bc6e6be409cbf6f1f0b6124a4263ad8689b6b32f6dbf133aaf43cdc48d0c44a", + "size": [ + 127, + 115 + ] + }, + "plant/蘑菇/4.png": { + "sha256": "a9006df5c6e663920657416da0a4928b3059f3d9e849e490266cbd1684902d80", + "size": [ + 127, + 121 + ] + }, + "plant/蘑菇/5.png": { + "sha256": "1aa4a1346b3d73e98165272f6ab9fd4a11c56ec85c50fb8188ad02b196fe74f9", + "size": [ + 127, + 121 + ] + }, + "plant/蘑菇/icon.png": { + "sha256": "34bf9bbcd9c989431852efc1eb7fddc50a0971afe481f463ff18a474a396f457", + "size": [ + 100, + 77 + ] + }, + "plant/蛋黄果/1.png": { + "sha256": "67b8e894d72adb0022f448223c0133e4437f83f9726f6f1cd52979c5ac01a573", + "size": [ + 47, + 94 + ] + }, + "plant/蛋黄果/2.png": { + "sha256": "3a1982519e8837f2d5d56941c3451907311655968ac01f15085e18f0fd216702", + "size": [ + 72, + 135 + ] + }, + "plant/蛋黄果/3.png": { + "sha256": "a4b75fe30365ff258a88604ad111c0810a188981d5f4abada5a9c076d80c492a", + "size": [ + 114, + 157 + ] + }, + "plant/蛋黄果/4.png": { + "sha256": "a95a9ca8b7cfae263af76c0315a6d47c3997273faf0e0bac2503363472ef6c63", + "size": [ + 120, + 161 + ] + }, + "plant/蛋黄果/5.png": { + "sha256": "da8ce79a68ad7452407a94203897da6cdcf845702325097b3a351a511381ad87", + "size": [ + 128, + 170 + ] + }, + "plant/蛋黄果/icon.png": { + "sha256": "711c9216c08ea14c123de56cf2c1229b66b2e61a4fc111bd9950af502ba27adb", + "size": [ + 130, + 118 + ] + }, + "plant/蜜思桃/1.png": { + "sha256": "95b415c1c8091082c25f7cd8260a11ba6849df5ce65902d55d7a17a4be2083f6", + "size": [ + 27, + 76 + ] + }, + "plant/蜜思桃/2.png": { + "sha256": "85eb9afcae07095dd3366ed6f1e3d0c64fbcc5fe09a7659e8d7dc9cc1b5a55d2", + "size": [ + 52, + 103 + ] + }, + "plant/蜜思桃/3.png": { + "sha256": "2cafd76d99c5f7e2930e538f186c3924ee35617d3539efd8a5b6783e8f76b478", + "size": [ + 78, + 132 + ] + }, + "plant/蜜思桃/4.png": { + "sha256": "2a34a2cc318e8494f07cf486b1448602478559d6216780f2e45191f51bcd7a40", + "size": [ + 112, + 162 + ] + }, + "plant/蜜思桃/5.png": { + "sha256": "6da6064944571b8842fba360ddec19f472938f9aa6504ce9dfb2628e5468f4b7", + "size": [ + 153, + 192 + ] + }, + "plant/蜜思桃/icon.png": { + "sha256": "023d21ce3726b4800c7489ac1344ca560060f5e137e87c1fe9aaad548be8d9e2", + "size": [ + 79, + 74 + ] + }, + "plant/西瓜/1.png": { + "sha256": "dc1504301ffd6d882aafe392838779efe4be07a8c2a935ac75368c5b70760637", + "size": [ + 62, + 101 + ] + }, + "plant/西瓜/2.png": { + "sha256": "6b518eca5d7360d82c863cd62bb277cf9e98b60d8c9cd71ecd8a1a31db650a95", + "size": [ + 119, + 158 + ] + }, + "plant/西瓜/3.png": { + "sha256": "b1db957942cf02dded0e8d436a1cb5ea8ddac30f431ae3982d5f08935186417d", + "size": [ + 129, + 139 + ] + }, + "plant/西瓜/4.png": { + "sha256": "d3dc0e03998fe57a4b07cde237c5beffe7056b506488c2ceef9c8221c1d62731", + "size": [ + 139, + 145 + ] + }, + "plant/西瓜/5.png": { + "sha256": "bd9002faa3cf03b6e6e43dbc1fca657a7365221d3bafe6abfcdcf9eeff3916f9", + "size": [ + 149, + 150 + ] + }, + "plant/西瓜/icon.png": { + "sha256": "565b1e9f2a759da7f298736360321a95a91931580f9a72b9af0c91186030f22c", + "size": [ + 94, + 101 + ] + }, + "plant/豌豆/1.png": { + "sha256": "463e53f03dabe321c89f38569b850adcbc79c6134ac83a079e339bec4ef9c917", + "size": [ + 35, + 109 + ] + }, + "plant/豌豆/2.png": { + "sha256": "5376878aa6176600b963150ed73fe72eb54eaa5ed8f5f25fb55fa3eb9fbea031", + "size": [ + 47, + 112 + ] + }, + "plant/豌豆/3.png": { + "sha256": "d615acb5bd4d4eebcc374dc10efc088c43d86b09582a58d68378c340059ab2b8", + "size": [ + 121, + 166 + ] + }, + "plant/豌豆/4.png": { + "sha256": "0fac42e995df75e4a36d600a36a6fba74b444522f2fcfe5a186331f4bc1a7f87", + "size": [ + 121, + 167 + ] + }, + "plant/豌豆/5.png": { + "sha256": "05ab191941e33e73b569978e2a44c2fb2273474e4321eaca16881e010341d44a", + "size": [ + 121, + 167 + ] + }, + "plant/豌豆/icon.png": { + "sha256": "7c26bda35e10a1ff1287c736b9eaf6bea56faf0cbf22e43b526adb6ab392fb14", + "size": [ + 58, + 95 + ] + }, + "plant/辣椒/1.png": { + "sha256": "cad6cf4f21be82b06e30f750b423d14e853fff2c34e05d224ecf7e684aba5c58", + "size": [ + 56, + 102 + ] + }, + "plant/辣椒/2.png": { + "sha256": "273b97ecead4aae60d04de144f0b82d24199284a4df494a40130c5edf54973e1", + "size": [ + 105, + 129 + ] + }, + "plant/辣椒/3.png": { + "sha256": "e1ff3074ac02ede871de0003972aac390abd6e9ea9ee226a618918eb8c48da67", + "size": [ + 115, + 161 + ] + }, + "plant/辣椒/4.png": { + "sha256": "99a54d6f5f7dbd3f39f99346a81a390654bb988cb074d8730697dc1409bb46c6", + "size": [ + 128, + 173 + ] + }, + "plant/辣椒/5.png": { + "sha256": "b13c5c25600e657f0eeeb255f365c540c97d52d3b80ae99f53312f0917435768", + "size": [ + 128, + 173 + ] + }, + "plant/辣椒/icon.png": { + "sha256": "a11c0b3b165b7ddaae6cffd7679bb7f0af747a02b9984f962193f4cb247ff6ed", + "size": [ + 60, + 92 + ] + }, + "plant/迎春花/1.png": { + "sha256": "e0149f31c9d867a370a6798bf0236fcd7f8628383b5ef0f2b144b20cc9d4eb6e", + "size": [ + 27, + 77 + ] + }, + "plant/迎春花/2.png": { + "sha256": "4c932cd6eeb59f3724d465f4e5edfc33e49de7aec364b4503f82a0030d78e31e", + "size": [ + 74, + 121 + ] + }, + "plant/迎春花/3.png": { + "sha256": "d85f5ea08431193d0e8d88c65ed36edfb7784f9d2f60b915e9c480365d16ac44", + "size": [ + 106, + 143 + ] + }, + "plant/迎春花/4.png": { + "sha256": "3f837da23e87f044faf4e1bfbc905f0ed9baefa1c79bda2c30a00ef63a90b8c4", + "size": [ + 124, + 157 + ] + }, + "plant/迎春花/5.png": { + "sha256": "f4a1df28db40b0d0edb415c34689a3ad9c276098ec0f941c579ac0a894242116", + "size": [ + 126, + 156 + ] + }, + "plant/迎春花/icon.png": { + "sha256": "d3716ccd92ba69849982cd4571be6987f663cd25364361d3134c2ecd098302d8", + "size": [ + 121, + 105 + ] + }, + "plant/金桔/1.png": { + "sha256": "0fce76a54e6b4c43171737eb2bcbabfc12c2185c195a644395ccc48705e7e8f6", + "size": [ + 52, + 100 + ] + }, + "plant/金桔/2.png": { + "sha256": "1758c9145210ad1e853a2879bb3face9190c994c726d61a0f1e7f2e14fa1bd14", + "size": [ + 74, + 123 + ] + }, + "plant/金桔/3.png": { + "sha256": "0c944112f99244ade5b6398e6ff3398257a3b2c25cf23dd3c4a0c4c129fd5dbf", + "size": [ + 79, + 158 + ] + }, + "plant/金桔/4.png": { + "sha256": "291db6a7e1227629c72a5953162cffac7cad834103d63e3532078470239edfb0", + "size": [ + 85, + 163 + ] + }, + "plant/金桔/5.png": { + "sha256": "bd3eab848d57122e153daf8975786c98f77c5b05339bad5117c15b6f0d82632b", + "size": [ + 89, + 167 + ] + }, + "plant/金桔/icon.png": { + "sha256": "82a1ce985cd3610d4491f3866fac3a287932bcf48915984e58e7f1895ac07989", + "size": [ + 101, + 75 + ] + }, + "plant/金针菇/1.png": { + "sha256": "1efed26ac1425139ffa3d98d11f611bac4477b8a79e92cc853b858775051062d", + "size": [ + 105, + 81 + ] + }, + "plant/金针菇/2.png": { + "sha256": "e566734bc86cca91b6a88f4ee2ce46327433a1a8475609b5ca6f11b08b64c44c", + "size": [ + 105, + 87 + ] + }, + "plant/金针菇/3.png": { + "sha256": "c5efbe64b713192e8c73b874797296e2450325e4e5fc4aa7c175175eaa212030", + "size": [ + 105, + 109 + ] + }, + "plant/金针菇/4.png": { + "sha256": "c6ad828cc46f5587c62027bed8ab544a0ef27b133153eda4668da732811fac4f", + "size": [ + 105, + 119 + ] + }, + "plant/金针菇/5.png": { + "sha256": "d38c274278c5cbadacddaf75d4b1da6c51f9757d611291352c4d56b33b8aecc6", + "size": [ + 106, + 146 + ] + }, + "plant/金针菇/icon.png": { + "sha256": "b041fa88ca183a60fd86041bf4f496c05ac939a878c1b6a19609aa781b7f7a9a", + "size": [ + 98, + 96 + ] + }, + "plant/韭菜/1.png": { + "sha256": "6484bed7cc56f4f063e43df193c227524ad39e2b4c231c5bd31f911e410f09d5", + "size": [ + 29, + 80 + ] + }, + "plant/韭菜/2.png": { + "sha256": "e561364959b91bc9a2ca12f74da149e303110b707862583d380c475e901c66dc", + "size": [ + 37, + 115 + ] + }, + "plant/韭菜/3.png": { + "sha256": "c78ffd20a16d626ef2adac8d593efe3f52cb6accae03a76a525ed0d35f501f94", + "size": [ + 74, + 143 + ] + }, + "plant/韭菜/4.png": { + "sha256": "98b83721285dbb372956bb1f80f579ec051cf80755173d300dc0c43eff667e45", + "size": [ + 104, + 167 + ] + }, + "plant/韭菜/5.png": { + "sha256": "1a7874a3d67e31cb3313aa7e0fcd2ff92e999ee52ce919a7f6b9b81717f6634e", + "size": [ + 136, + 171 + ] + }, + "plant/韭菜/icon.png": { + "sha256": "09ec856ee984c8f99b0ddb2c3e1a26f77cebb3213e8fe9ae2434970bce0fb8ca", + "size": [ + 119, + 127 + ] + }, + "plant/香瓜/1.png": { + "sha256": "e9a0f7426ea94c97464bb5fd90b5473373f6657a705dd426898dcb358dfb4f09", + "size": [ + 39, + 93 + ] + }, + "plant/香瓜/2.png": { + "sha256": "797b3798001f6b6bc7b597ebfed40642a2eec38c431cb821c2ea9c9cf19a4f8d", + "size": [ + 55, + 116 + ] + }, + "plant/香瓜/3.png": { + "sha256": "bc2d5b0eb47ce0525c52e28ef95ff81a285e9be8702cb89c91e9d31a76f33e70", + "size": [ + 135, + 129 + ] + }, + "plant/香瓜/4.png": { + "sha256": "18c616bf3235796e4d3dfa3fef58ecb7247b708bb99970de2c0f927ce4647b1d", + "size": [ + 135, + 129 + ] + }, + "plant/香瓜/5.png": { + "sha256": "160c9d7f91c2ddf4d734fcd5d8f16fefb83918e982f126b70ce0b859a20208bc", + "size": [ + 135, + 129 + ] + }, + "plant/香瓜/icon.png": { + "sha256": "7f2054256e9c745f1ba3c1feaffe0e660eb3b7851a72477cabc0401f89021416", + "size": [ + 120, + 94 + ] + }, + "plant/香粽龙舟/1.png": { + "sha256": "793cf8100c4ae38f23a9a49446f3eb5a06ae5fa3238653cd4f36ec54486850f5", + "size": [ + 140, + 89 + ] + }, + "plant/香粽龙舟/2.png": { + "sha256": "54242b5a4c6bf02a6a12656a9daae3ebcb8e7dae2dea38e2338df2eded747193", + "size": [ + 140, + 91 + ] + }, + "plant/香粽龙舟/3.png": { + "sha256": "0bf9282bf472fcef60211b725fe355fccd1ff93532961abf8b9399e8ebe34897", + "size": [ + 140, + 109 + ] + }, + "plant/香粽龙舟/4.png": { + "sha256": "31aecd0505949f08abfc76f409d1ae7e6fed97a85c3c5e43362bc9ec0a391ff8", + "size": [ + 140, + 137 + ] + }, + "plant/香粽龙舟/5.png": { + "sha256": "c7ac99320e206eb7e3d4af5e2ef4462bb3dc8cd251b8920825acfd9c71fac54c", + "size": [ + 152, + 156 + ] + }, + "plant/香粽龙舟/icon.png": { + "sha256": "3f6004e1e6c217d47caf8d7af37d1bc507088501613f3847270539e267db6a00", + "size": [ + 114, + 117 + ] + }, + "plant/香蕉/1.png": { + "sha256": "26113d5aea6bdd7a8683facc6d59c6e84fe003e910239968a776ccff807636f4", + "size": [ + 46, + 96 + ] + }, + "plant/香蕉/2.png": { + "sha256": "678283113bd1726485a08d3468d029669dc79784d054dba37998e5d63fc54761", + "size": [ + 85, + 61 + ] + }, + "plant/香蕉/3.png": { + "sha256": "29252b848974569d837d344f802749001359bcafbf4f67c5a837f24cbf1c3a4c", + "size": [ + 110, + 88 + ] + }, + "plant/香蕉/4.png": { + "sha256": "79ea86f7b89b758b0c7f3d57efec071f89a439a177af7b29a206b06a62ce0e38", + "size": [ + 112, + 109 + ] + }, + "plant/香蕉/5.png": { + "sha256": "f3d01f1eadacdf5d6686dc591377db8c28ef59872f8961bfce568ebd3f679b0f", + "size": [ + 125, + 122 + ] + }, + "plant/香蕉/icon.png": { + "sha256": "d1178061c5c8ff223bf1f39f240fae211567f623379f78b46329515c811f6bab", + "size": [ + 111, + 87 + ] + }, + "plant/魔法神花/1.png": { + "sha256": "bf44267bd05bc2998321c53891d14cc1e94d4434a6af0cb4fce114aa5fb7b5d9", + "size": [ + 31, + 89 + ] + }, + "plant/魔法神花/2.png": { + "sha256": "6b45f47e76bf971da657093b1a1f56dddfeb194d59b03503d285a1468c7aa878", + "size": [ + 59, + 98 + ] + }, + "plant/魔法神花/3.png": { + "sha256": "1f26b8348d48a8ffc4244000a74124205ca50bd581bd08231db5c101ed356fe4", + "size": [ + 93, + 155 + ] + }, + "plant/魔法神花/4.png": { + "sha256": "16036cb12a04bfd29e42b3a5479d8f8e14ac34a786dd12c25a400409349398b3", + "size": [ + 93, + 160 + ] + }, + "plant/魔法神花/5.png": { + "sha256": "7447674dd8efe1702ff39be9264f5e5ef6483a417c831124d1680500022e9736", + "size": [ + 115, + 186 + ] + }, + "plant/魔法神花/icon.png": { + "sha256": "617a0fe04f538f41e8eba451c2c10dfb870185e4dcc50b76610c4b003a43f8e7", + "size": [ + 121, + 122 + ] + }, + "plant/鳄梨/1.png": { + "sha256": "1a7b47812af0c21ea1f53efc98650c66b880c7a18311e0832680620ac2f533ae", + "size": [ + 67, + 112 + ] + }, + "plant/鳄梨/2.png": { + "sha256": "6768e030a436831e80ef12d9a8ae52fa9a90fc17954ddd136d0ccb5b6d089b86", + "size": [ + 102, + 137 + ] + }, + "plant/鳄梨/3.png": { + "sha256": "914ba6a762a18c68cf650ac9e86539be73ff83d48e9b553b2deb8d9a93db9342", + "size": [ + 137, + 158 + ] + }, + "plant/鳄梨/4.png": { + "sha256": "7ef94de28e332b8e520c1a34e97d5e0a638a12d1b31ec50239e551c7bcff5689", + "size": [ + 137, + 159 + ] + }, + "plant/鳄梨/5.png": { + "sha256": "0ad96b0ebdc828ecd946fd36c5e230bb631538dddb165ffdd7595cd74e8676f0", + "size": [ + 135, + 162 + ] + }, + "plant/鳄梨/icon.png": { + "sha256": "97e6ecca16bb17dc8f7f6563fa8dd1e3dcf18f7f69282b9bd998b0899d35c1bb", + "size": [ + 105, + 115 + ] + }, + "plant/鸾风玉/1.png": { + "sha256": "78e0d517e688d84f7a5802ba141098c6d9213d76b505cc590c51867c52fb6e90", + "size": [ + 17, + 80 + ] + }, + "plant/鸾风玉/2.png": { + "sha256": "6d0e5821868427e2a02b6727c2cbb6d6d4ff55026026c09cd3dc1341e7bd321f", + "size": [ + 22, + 87 + ] + }, + "plant/鸾风玉/3.png": { + "sha256": "f63e678de50abd562bad26af022e05b69040ba47d69a2bad146e9ef78de6ee2f", + "size": [ + 40, + 99 + ] + }, + "plant/鸾风玉/4.png": { + "sha256": "82e0661e13984347cc814696e9987779d6bbf30e4d2777d6517525b0edfa859a", + "size": [ + 47, + 133 + ] + }, + "plant/鸾风玉/5.png": { + "sha256": "609e48fb623d3fd15ad9534aa3aa26ac6ecf9320a85a966a0458a20149bfb8c9", + "size": [ + 59, + 163 + ] + }, + "plant/鸾风玉/icon.png": { + "sha256": "f31e3df709911938f57e1fcc945cffca9672bdecfe2c414abd4a0efda0f1b585", + "size": [ + 79, + 104 + ] + }, + "plant/黄瓜/1.png": { + "sha256": "1723dadabbf560369da0e36135481a03c8b841f3eaf5b778b0834d865080a3a7", + "size": [ + 47, + 116 + ] + }, + "plant/黄瓜/2.png": { + "sha256": "ee7895a1fc9821ef501d65130238e61ac4eba744d5b6e8e44515eb20f8484f0c", + "size": [ + 109, + 162 + ] + }, + "plant/黄瓜/3.png": { + "sha256": "4d94e5c0c41db9438e56df7a6cdfcd6744e67c121ec4b8bb0e378f11e3275a12", + "size": [ + 112, + 162 + ] + }, + "plant/黄瓜/4.png": { + "sha256": "e92042585b90cc6f914872106eff5ca50bd8ba0ac5a667a23b0697130ce8fd98", + "size": [ + 118, + 162 + ] + }, + "plant/黄瓜/5.png": { + "sha256": "de0bd5d49d6041cd020890c96ffda6a42f843d11779026643d0052c33519d993", + "size": [ + 118, + 162 + ] + }, + "plant/黄瓜/icon.png": { + "sha256": "c6fa3643a120a6fe8c27612b5c47148f7113220b3b38c638f94bacd372858376", + "size": [ + 96, + 100 + ] + }, + "plant/黄豆/1.png": { + "sha256": "ff6415449012472d8e6b3bec8bc6f715eef0e54b5a01fb1b5f0d85df831a4fdd", + "size": [ + 26, + 82 + ] + }, + "plant/黄豆/2.png": { + "sha256": "70cc8d13d023c0568f2fc808b459efc6415c7e5cd2bdf128c46c5feb7cdaebcd", + "size": [ + 42, + 105 + ] + }, + "plant/黄豆/3.png": { + "sha256": "2d9424f17e0c05a8453faee7b193d2ce53b5a2c81cfacc01987fd5487c02dcd5", + "size": [ + 79, + 124 + ] + }, + "plant/黄豆/4.png": { + "sha256": "7b2869bfbad9361e529cbb7f6355e2f56633c98b683f0c75fe5a2975905daffa", + "size": [ + 101, + 133 + ] + }, + "plant/黄豆/5.png": { + "sha256": "62fa2ff226d544c5161d3c0e89a7a2cf56dd17c6178df6816765a9fc44d97cb0", + "size": [ + 113, + 152 + ] + }, + "plant/黄豆/icon.png": { + "sha256": "7069a8142199e179732b3bbeeec5a0cb695e9ae60e2ef03fd525293303026516", + "size": [ + 103, + 117 + ] + }, + "plant/黄金果/1.png": { + "sha256": "8e0cf31997462d93f09657dab30d73f51cd8ee4b89135a074ff1574aa073d55b", + "size": [ + 20, + 78 + ] + }, + "plant/黄金果/2.png": { + "sha256": "9e718a303342baef2b4e1ab5d96d8448d8eb088d6834876d3dc3afe0e7c5515e", + "size": [ + 58, + 121 + ] + }, + "plant/黄金果/3.png": { + "sha256": "534bb23664b33a8cd1b16225ae883cb1936a850a404de251be5cbde0b833f070", + "size": [ + 118, + 151 + ] + }, + "plant/黄金果/4.png": { + "sha256": "01014d13fb7c3f73842aa71df861f8dc5207e64f33e80182f7928b60b3c5dec5", + "size": [ + 131, + 164 + ] + }, + "plant/黄金果/5.png": { + "sha256": "3b3167c728b87a47f9ee0fe203f83ed4cbe2757bf50579c26979181c5405daa5", + "size": [ + 139, + 167 + ] + }, + "plant/黄金果/icon.png": { + "sha256": "4945db2c8b11bad1048b3b01958d9ca7aaed72e35d1fb1da0fc2018553bf76f1", + "size": [ + 99, + 105 + ] + }, + "plant/黑布仑/1.png": { + "sha256": "ccf4770a84d99074922b0b968ecf4abb0a842a6716c8bc25983897c88a3ac58c", + "size": [ + 27, + 96 + ] + }, + "plant/黑布仑/2.png": { + "sha256": "e2b55bcf9a6719cff7079128da38f2d063b1fe0ed398486319b0ebde71d239f3", + "size": [ + 85, + 129 + ] + }, + "plant/黑布仑/3.png": { + "sha256": "257d1e1786b53c93f85dbd18e03fd3a4c4e19dc8583767fd0b15f1d511165814", + "size": [ + 126, + 144 + ] + }, + "plant/黑布仑/4.png": { + "sha256": "962bf983d96eaff024fdabe097fb1dca7f95065a5f949c354a174a4179c60c2a", + "size": [ + 154, + 158 + ] + }, + "plant/黑布仑/5.png": { + "sha256": "aad1daadc5775a7cef642fea6904c7dfee5e0dd859fa378571f87e3fe6494859", + "size": [ + 159, + 168 + ] + }, + "plant/黑布仑/icon.png": { + "sha256": "e37560c9702a3791acb2855fbe6fa9f1df8ebfb59606734218db31fdedb2e590", + "size": [ + 97, + 101 + ] + }, + "soil/普通土地.png": { + "sha256": "3df323044913fe5fd1a3aa5f4b35e244c78ef68b4357a88068a5390556ce582e", + "size": [ + 180, + 120 + ] + }, + "soil/草土地.png": { + "sha256": "7c88025b4018a1899acb519f51540100b8f8983a573c1698f5cc0556be6f6003", + "size": [ + 180, + 120 + ] + }, + "webgl/panel/CouponIcon.png": { + "sha256": "8f564bf9da5c0fbeb65a3e320cfb47d66648405f09e2309a42825c1f5404caf1", + "size": [ + 64, + 64 + ] + }, + "webgl/panel/ExpBar.png": { + "sha256": "efb13c2dcb1ecd49689ed561d3f816312738f84887e01496385914e86dcf87d5", + "size": [ + 223, + 30 + ] + }, + "webgl/panel/ExpProgress.png": { + "sha256": "fcb1bdc9a568758460e005a1be58c04d8346eaedfcbc3fef59b29ad0dedcfdc0", + "size": [ + 225, + 23 + ] + }, + "webgl/panel/GoldIcon.png": { + "sha256": "5389afb3a3b1245e9fdc8d3a8839c8ff07a653ebf160bb8e43882a461e73ce49", + "size": [ + 64, + 64 + ] + }, + "webgl/panel/HeadFrame.png": { + "sha256": "74e8f716f58f9055d873657eb8fbaea2170ea19365fe83299b8e32f8484b0b62", + "size": [ + 230, + 230 + ] + }, + "webgl/panel/PersionInfoBG.png": { + "sha256": "62971e70743418988982667625f3e6e4e61073e74610c5279919be2e71c1bd10", + "size": [ + 492, + 236 + ] + }, + "webgl/seed.png": { + "sha256": "353ff338fd5ab3f7812e9d2d7f98df11d0de4e04af6de7f9d5aa0249d40b3609", + "size": [ + 69, + 30 + ] + }, + "webgl/shop-board.png": { + "sha256": "88730b82d88cb33fae45c7180a88954fcc0241b2b4f5de095fc6b22b30296645", + "size": [ + 1024, + 1536 + ] + }, + "webgl/wither.png": { + "sha256": "1c87f05e0b7bd8287926351e07746bc9e36371a860afaef0e4b00c51536dc472", + "size": [ + 209, + 92 + ] + } + }, + "panel": { + "anchor": "top_left", + "avatar": [ + 32.2744255065918, + 39.76182556152344, + 111.38700103759766, + 107.70719909667969 + ], + "fields": [ + { + "alignment": 3, + "color": [ + 74, + 31, + 0 + ], + "field": "name", + "rect": [ + 161.24510192871094, + 40.90002250671387, + 298.0353088378906, + 31.200000762939453 + ] + }, + { + "alignment": 4, + "color": [ + 91, + 110, + 3 + ], + "field": "experience", + "rect": [ + 177.60003662109375, + 89.78792595863342, + 223.0, + 22.024199962615967 + ] + }, + { + "alignment": 4, + "color": [ + 216, + 112, + 0 + ], + "field": "level", + "rect": [ + 400.9734191894531, + 85.36273193359375, + 56.0, + 30.0 + ] + }, + { + "alignment": 3, + "color": [ + 255, + 255, + 255 + ], + "field": "point", + "rect": [ + 178.46239471435547, + 128.23919677734375, + 123.61039733886719, + 30.0 + ] + }, + { + "alignment": 3, + "color": [ + 255, + 255, + 255 + ], + "field": "vip_point", + "rect": [ + 342.0, + 128.23919677734375, + 108.0, + 30.0 + ] + } + ], + "reference_canvas": [ + 1920, + 1080 + ], + "source_prefab": "mainscene#WebGLPersionInfo", + "sprites": [ + { + "name": "PersionInfoBG", + "rect": [ + 0.0, + 0.0, + 492.0, + 236.0 + ], + "sprite": "webgl/panel/PersionInfoBG.png" + }, + { + "name": "HeadFrame", + "rect": [ + 3.092998504638672, + 8.865001678466797, + 169.75, + 169.5 + ], + "sprite": "webgl/panel/HeadFrame.png" + }, + { + "name": "ExpBar", + "rect": [ + 177.60000610351562, + 85.89997100830078, + 223.0, + 30.0 + ], + "sprite": "webgl/panel/ExpBar.png" + }, + { + "name": "ExpProgress", + "rect": [ + 179.90000915527344, + 89.89997100830078, + 215.0, + 22.0 + ], + "sprite": "webgl/panel/ExpProgress.png" + }, + { + "name": "GoldIcon", + "rect": [ + 146.5999984741211, + 128.8000030517578, + 30.0, + 30.0 + ], + "sprite": "webgl/panel/GoldIcon.png" + }, + { + "name": "CouponIcon", + "rect": [ + 310.5, + 128.8000030517578, + 30.0, + 30.0 + ], + "sprite": "webgl/panel/CouponIcon.png" + } + ] + }, + "pest": { + "display_size": [ + 22, + 30 + ], + "frames": [ + "pest/pest1.png", + "pest/pest3.png", + "pest/pest5.png", + "pest/pest7.png", + "pest/pest9.png", + "pest/pest11.png", + "pest/pest13.png", + "pest/pest15.png", + "pest/pest17.png", + "pest/pest19.png", + "pest/pest21.png", + "pest/pest23.png", + "pest/pest25.png", + "pest/pest27.png", + "pest/pest29.png", + "pest/pest31.png", + "pest/pest33.png", + "pest/pest35.png", + "pest/pest37.png", + "pest/pest39.png", + "pest/pest41.png", + "pest/pest43.png", + "pest/pest45.png", + "pest/pest47.png", + "pest/pest49.png", + "pest/pest51.png", + "pest/pest53.png", + "pest/pest55.png", + "pest/pest57.png", + "pest/pest59.png", + "pest/pest61.png", + "pest/pest63.png", + "pest/pest65.png", + "pest/pest67.png", + "pest/pest69.png", + "pest/pest71.png", + "pest/pest73.png", + "pest/pest75.png" + ], + "loop": true, + "pivot": [ + 0.5, + 0.5 + ], + "positions": [ + [ + -26, + 13 + ], + [ + -5, + 42 + ], + [ + 24, + 24 + ] + ], + "sample_rate": 24 + }, + "placement": { + "basis": "Local visible ground-contact centroid aligned to actual land center; upright uniform sprite scaling", + "common_scale": 0.5, + "contact_alpha_threshold": 32, + "contact_band_fraction": 0.2, + "grid_fit": { + "maximum": 9.08256808, + "points": 30, + "rms": 4.17863333 + }, + "growth_scale": 0.75, + "mode": "visible_contact_center", + "reference_soil_height": 79.5, + "reference_soil_width": 153, + "scene_transform": [ + [ + 1.46742305, + 0.07509807 + ], + [ + 0.02736506, + -1.47153079 + ] + ], + "schema": 4, + "source_land_centers": [ + [ + -55.50004959106445, + 162.5499725341797 + ], + [ + 24.300010681152344, + 123.5999984741211 + ], + [ + 104.4000015258789, + 84.69998168945312 + ], + [ + 180.5999298095703, + 45.89997100830078 + ], + [ + 256.9000244140625, + 7.49997615814209 + ], + [ + 335.9000244140625, + -30.500019073486328 + ], + [ + -132.0, + 122.80000305175781 + ], + [ + -52.199981689453125, + 83.8499984741211 + ], + [ + 27.899959564208984, + 44.95000076293945 + ], + [ + 104.09992218017578, + 6.14999532699585 + ], + [ + 180.40000915527344, + -32.25 + ], + [ + 259.4000244140625, + -70.25 + ], + [ + -208.50010681152344, + 83.05000305175781 + ], + [ + -128.6999969482422, + 44.099998474121094 + ], + [ + -48.60007095336914, + 5.200003623962402 + ], + [ + 27.599895477294922, + -33.600006103515625 + ], + [ + 103.89999389648438, + -72.0 + ], + [ + 182.89999389648438, + -110.0 + ], + [ + -285.0, + 43.29999923706055 + ], + [ + -205.199951171875, + 4.350001811981201 + ], + [ + -125.10001373291016, + -34.549991607666016 + ], + [ + -48.90004348754883, + -73.3499984741211 + ], + [ + 27.400035858154297, + -111.74999237060547 + ], + [ + 106.40003967285156, + -149.74998474121094 + ], + [ + -361.5000305175781, + 3.5499942302703857 + ], + [ + -281.6999206542969, + -35.400001525878906 + ], + [ + -201.60000610351562, + -74.30000305175781 + ], + [ + -125.40000915527344, + -113.0999984741211 + ], + [ + -49.09993362426758, + -151.49998474121094 + ], + [ + 29.900068283081055, + -189.49998474121094 + ] + ], + "source_land_order": [ + 1, + 4, + 7, + 10, + 13, + 16, + 2, + 5, + 8, + 11, + 14, + 17, + 3, + 6, + 9, + 12, + 15, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30 + ], + "sprite_axes": "upright" + }, + "plants": { + "ATTomato": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "7200,18000,32400,46800,61200" + }, + "一星丁香水仙": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "14400,28800,46800,64800,86400" + }, + "一星书生捧墨": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "3600,10800,21600,32400,43200" + }, + "一星五彩椒": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "14400,28800,46800,64800,86400" + }, + "一星什样锦牡丹": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "7200,14400,25200,36000,46800" + }, + "一星卷丹百合": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "7200,14400,25200,36000,46800" + }, + "一星喇叭水仙": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "7200,14400,25200,36000,46800" + }, + "一星围裙水仙": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "14400,28800,46800,64800,86400" + }, + "一星巨峰葡萄": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "3600,10800,21600,32400,43200" + }, + "一星白玉霓": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "10800,21600,32400,46800,68400" + }, + "一星百叶蔷薇": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "3600,10800,21600,32400,43200" + }, + "一星秦椒": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "14400,28800,46800,64800,86400" + }, + "一星红富士": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "7200,14400,25200,36000,46800" + }, + "一星绿绒蒿": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "14400,28800,46800,64800,86400" + }, + "一星荷花蔷薇": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "3600,10800,21600,32400,43200" + }, + "一星葛巾紫": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "14400,28800,46800,64800,86400" + }, + "一星香水百合": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "14400,28800,46800,64800,86400" + }, + "一点红": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "32400,64800,97200,129600,162000" + }, + "丁香水仙": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "14400,28800,46800,64800,86400" + }, + "三七": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "32400,64800,97200,133200,169200" + }, + "三星丁香水仙": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "14400,28800,46800,64800,86400" + }, + "三星书生捧墨": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "3600,10800,21600,32400,43200" + }, + "三星五彩椒": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "14400,28800,46800,64800,86400" + }, + "三星什样锦牡丹": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "7200,14400,25200,36000,46800" + }, + "三星卷丹百合": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "7200,14400,25200,36000,46800" + }, + "三星喇叭水仙": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "7200,14400,25200,36000,46800" + }, + "三星围裙水仙": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "14400,28800,46800,64800,86400" + }, + "三星巨峰葡萄": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "3600,10800,21600,32400,43200" + }, + "三星果藤": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "10800,21600,32400,46800,68400" + }, + "三星白玉霓": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "10800,21600,32400,46800,68400" + }, + "三星百叶蔷薇": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "3600,10800,21600,32400,43200" + }, + "三星秦椒": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "14400,28800,46800,64800,86400" + }, + "三星红富士": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "7200,14400,25200,36000,46800" + }, + "三星绿绒蒿": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "14400,28800,46800,64800,86400" + }, + "三星荷花蔷薇": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "3600,10800,21600,32400,43200" + }, + "三星葛巾紫": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "14400,28800,46800,64800,86400" + }, + "三星香水百合": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "14400,28800,46800,64800,86400" + }, + "丝瓜": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "18000,39600,61200,86400,111600" + }, + "乌饭子": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "21600,39600,61200,82800,104400" + }, + "二星丁香水仙": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "14400,28800,46800,64800,86400" + }, + "二星书生捧墨": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "3600,10800,21600,32400,43200" + }, + "二星五彩椒": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "14400,28800,46800,64800,86400" + }, + "二星什样锦牡丹": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "7200,14400,25200,36000,46800" + }, + "二星卷丹百合": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "7200,14400,25200,36000,46800" + }, + "二星喇叭水仙": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "7200,14400,25200,36000,46800" + }, + "二星围裙水仙": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "14400,28800,46800,64800,86400" + }, + "二星巨峰葡萄": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "3600,10800,21600,32400,43200" + }, + "二星白玉霓": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "10800,21600,32400,46800,68400" + }, + "二星百叶蔷薇": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "3600,10800,21600,32400,43200" + }, + "二星秦椒": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "14400,28800,46800,64800,86400" + }, + "二星红富士": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "7200,14400,25200,36000,46800" + }, + "二星绿绒蒿": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "14400,28800,46800,64800,86400" + }, + "二星荷花蔷薇": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "3600,10800,21600,32400,43200" + }, + "二星葛巾紫": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "14400,28800,46800,64800,86400" + }, + "二星香水百合": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "14400,28800,46800,64800,86400" + }, + "五彩椒": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "14400,28800,46800,64800,86400" + }, + "五星丁香水仙": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "14400,28800,46800,64800,86400" + }, + "五星书生捧墨": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "3600,10800,21600,32400,43200" + }, + "五星五彩椒": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "14400,28800,46800,64800,86400" + }, + "五星什样锦牡丹": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "7200,14400,25200,36000,46800" + }, + "五星卷丹百合": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "7200,14400,25200,36000,46800" + }, + "五星喇叭水仙": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "7200,14400,25200,36000,46800" + }, + "五星围裙水仙": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "14400,28800,46800,64800,86400" + }, + "五星巨峰葡萄": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "3600,10800,21600,32400,43200" + }, + "五星潜水镜": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "21600,43200,64800,90000,115200" + }, + "五星白玉霓": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "10800,21600,32400,46800,68400" + }, + "五星百叶蔷薇": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "3600,10800,21600,32400,43200" + }, + "五星秦椒": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "14400,28800,46800,64800,86400" + }, + "五星红富士": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "7200,14400,25200,36000,46800" + }, + "五星绿绒蒿": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "14400,28800,46800,64800,86400" + }, + "五星荷花蔷薇": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "3600,10800,21600,32400,43200" + }, + "五星葛巾紫": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "14400,28800,46800,64800,86400" + }, + "五星香水百合": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "14400,28800,46800,64800,86400" + }, + "兔儿伞": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "32400,64800,100800,133200,165600" + }, + "关白附子": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "32400,64800,97200,129600,165600" + }, + "关苍术": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "32400,64800,100800,133200,165600" + }, + "冬凌草": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "36000,68400,100800,133200,165600" + }, + "冬瓜": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "18000,39600,61200,86400,111600" + }, + "决明子": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "32400,64800,97200,129600,162000" + }, + "南瓜": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "10800,25200,43200,61200,79200" + }, + "双玉兰": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "10800,21600,32400,46800,68400" + }, + "可可豆": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "28800,57600,86400,115200,144000" + }, + "哈密瓜": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "18000,39600,61200,86400,111600" + }, + "四星丁香水仙": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "14400,28800,46800,64800,86400" + }, + "四星书生捧墨": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "3600,10800,21600,32400,43200" + }, + "四星五彩椒": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "14400,28800,46800,64800,86400" + }, + "四星什样锦牡丹": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "7200,14400,25200,36000,46800" + }, + "四星卷丹百合": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "7200,14400,25200,36000,46800" + }, + "四星喇叭水仙": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "7200,14400,25200,36000,46800" + }, + "四星围裙水仙": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "14400,28800,46800,64800,86400" + }, + "四星巨峰葡萄": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "3600,10800,21600,32400,43200" + }, + "四星白玉霓": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "10800,21600,32400,46800,68400" + }, + "四星百叶蔷薇": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "3600,10800,21600,32400,43200" + }, + "四星秦椒": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "14400,28800,46800,64800,86400" + }, + "四星红富士": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "7200,14400,25200,36000,46800" + }, + "四星绿绒蒿": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "14400,28800,46800,64800,86400" + }, + "四星荷花蔷薇": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "3600,10800,21600,32400,43200" + }, + "四星葛巾紫": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "14400,28800,46800,64800,86400" + }, + "四星香水百合": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "14400,28800,46800,64800,86400" + }, + "园艺世": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "10800,21600,32400,46800,68400" + }, + "围裙水仙": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "14400,28800,46800,64800,86400" + }, + "土豆": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "7200,14400,25200,39600,54000" + }, + "大白菜": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "7200,14400,25200,36000,50400" + }, + "大蒜": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "7200,18000,25200,36000,50400" + }, + "富贵竹": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "10800,21600,32400,46800,68400" + }, + "小白菜": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "7200,14400,25200,39600,39600" + }, + "小麦": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "7200,14400,25200,36000,50400" + }, + "山竹": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "18000,39600,61200,86400,111600" + }, + "无花果": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "28800,57600,86400,118800,151200" + }, + "月柿": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "18000,39600,61200,86400,111600" + }, + "木瓜": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "28800,61200,93600,129600,165600" + }, + "李子": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "50400,100800,151200,205200,259200" + }, + "杏子": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "18000,39600,61200,86400,111600" + }, + "杨桃": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "28800,61200,93600,129600,165600" + }, + "杨梅": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "18000,39600,61200,86400,111600" + }, + "枇杷": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "28800,57600,86400,118800,151200" + }, + "柚子": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "39600,82800,126000,172800,219600" + }, + "柠檬": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "18000,39600,61200,86400,111600" + }, + "栗子": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "21600,43200,64800,86400,108000" + }, + "核桃": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "10800,25200,43200,43200,61200" + }, + "桂圆": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "18000,39600,61200,86400,111600" + }, + "桃子": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "28800,57600,86400,118800,151200" + }, + "桑葚": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "18000,39600,61200,86400,111600" + }, + "梨": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "21600,43200,64800,90000,115200" + }, + "椒蕉树": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "10800,21600,32400,46800,68400" + }, + "椰子": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "36000,75600,115200,154800,198000" + }, + "榅桲": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "36000,72000,108000,144000,180000" + }, + "榛子": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "28800,61200,93600,129600,165600" + }, + "榴莲": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "18000,39600,61200,86400,111600" + }, + "樱桃": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "50400,100800,151200,205200,259200" + }, + "橄榄": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "21600,43200,61200,82800,108000" + }, + "橙子": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "25200,50400,75600,104400,133200" + }, + "水稻": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "7200,14400,25200,36000,50400" + }, + "沙棘": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "32400,68400,104400,136800,169200" + }, + "油菜": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "14400,28800,46800,61200,61200" + }, + "澳洲青苹果": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "14400,28800,46800,64800,86400" + }, + "火龙果": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "46800,97200,147600,198000,252000" + }, + "灯笼果": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "21600,39600,57600,79200,104400" + }, + "点地梅": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "10800,21600,32400,46800,68400" + }, + "牧草": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "7200,14400,21600,28800,28800" + }, + "猕猴桃": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "28800,61200,93600,129600,165600" + }, + "玉米": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "7200,14400,25200,36000,50400" + }, + "甘蔗": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "18000,39600,61200,86400,111600" + }, + "生菜": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "10800,21600,36000,50400,68400" + }, + "番石榴": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "18000,39600,61200,86400,111600" + }, + "番茄": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "7200,18000,32400,46800,61200" + }, + "番荔枝": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "18000,43200,64800,93600,111600" + }, + "白萝卜": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "7200,14400,25200,36000,36000" + }, + "百香果": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "21600,43200,64800,86400,108000" + }, + "益母草": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "32400,64800,97200,133200,169200" + }, + "睡莲": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "39600,82800,126000,172800,219600" + }, + "石榴": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "36000,72000,108000,147600,187200" + }, + "秦椒": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "14400,28800,46800,64800,86400" + }, + "竹笋": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "18000,36000,54000,72000,90000" + }, + "箬竹": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "21600,43200,64800,86400,108000" + }, + "红叶梅": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "10800,21600,32400,46800,68400" + }, + "红枣": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "7200,18000,28800,43200,57600" + }, + "红毛丹": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "21600,46800,64800,90000,118800" + }, + "红玫瑰": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "10800,21600,32400,46800,64800" + }, + "绿绒蒿": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "14400,28800,46800,64800,86400" + }, + "胡萝卜": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "7200,18000,32400,46800,46800" + }, + "芒果": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "18000,39600,61200,86400,111600" + }, + "芦荟": { + "general": 0, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "21600,39600,57600,79200,104400" + }, + "芭蕉": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "21600,39600,57600,79200,104400" + }, + "花生": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "28800,57600,86400,118800,151200" + }, + "花菜": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "21600,43200,64800,82800,100800" + }, + "芹菜": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "10800,25200,39600,54000,72000" + }, + "苦瓜": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "18000,39600,61200,86400,111600" + }, + "苹果": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "14400,28800,43200,57600,75600" + }, + "茄子": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "7200,18000,28800,43200,57600" + }, + "草莓": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "14400,28800,46800,64800,86400" + }, + "荔枝": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "54000,108000,165600,219600,277200" + }, + "莲藕": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "21600,46800,75600,100800,122400" + }, + "莲雾": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "18000,39600,64800,93600,126000" + }, + "菠萝": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "43200,90000,136800,183600,230400" + }, + "菠萝蜜": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "28800,46800,64800,86400,100800" + }, + "葛巾紫": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "14400,28800,46800,64800,86400" + }, + "葡萄": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "28800,61200,93600,129600,165600" + }, + "葫芦": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "39600,82800,126000,172800,219600" + }, + "蓝莓": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "18000,39600,61200,86400,111600" + }, + "薄荷": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "21600,39600,57600,82800,108000" + }, + "蘑菇": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "25200,50400,79200,108000,108000" + }, + "蛋黄果": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "32400,64800,97200,129600,162000" + }, + "蜜思桃": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "14400,32400,54000,79200,108000" + }, + "西瓜": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "14400,32400,54000,75600,100800" + }, + "豌豆": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "10800,21600,32400,46800,64800" + }, + "辣椒": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "10800,25200,39600,54000,72000" + }, + "迎春花": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "10800,21600,39600,57600,86400" + }, + "金桔": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "18000,39600,61200,86400,111600" + }, + "金针菇": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "28800,57600,86400,118800,151200" + }, + "韭菜": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "7200,18000,32400,46800,61200" + }, + "香水百合": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "14400,28800,46800,64800,86400" + }, + "香瓜": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "21600,43200,68400,97200,126000" + }, + "香粽龙舟": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "28800,61200,93600,129600,165600" + }, + "香蕉": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "18000,39600,61200,86400,111600" + }, + "魔法神花": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "14400,32400,54000,75600,100800" + }, + "鳄梨": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "25200,54000,75600,97200,115200" + }, + "鸾风玉": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "10800,21600,32400,46800,68400" + }, + "黄瓜": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "14400,32400,54000,79200,100800" + }, + "黄豆": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "14400,32400,54000,75600,100800" + }, + "黄金果": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "32400,64800,97200,133200,169200" + }, + "黑布仑": { + "general": 1, + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "18000,36000,54000,72000,90000" + } + }, + "positions": [ + { + "x": 1352, + "y": 552 + }, + { + "x": 1237, + "y": 606 + }, + { + "x": 1462, + "y": 611 + }, + { + "x": 1350, + "y": 665 + }, + { + "x": 1572, + "y": 670 + }, + { + "x": 1457, + "y": 724 + }, + { + "x": 1682, + "y": 729 + }, + { + "x": 1567, + "y": 783 + }, + { + "x": 1792, + "y": 788 + }, + { + "x": 1677, + "y": 842 + }, + { + "x": 1902, + "y": 847 + }, + { + "x": 1787, + "y": 901 + }, + { + "x": 1116, + "y": 663 + }, + { + "x": 1226, + "y": 722 + }, + { + "x": 1336, + "y": 782 + }, + { + "x": 1455, + "y": 840 + }, + { + "x": 1565, + "y": 899 + }, + { + "x": 1671, + "y": 958 + }, + { + "x": 1002, + "y": 720 + }, + { + "x": 1105, + "y": 779 + }, + { + "x": 1224, + "y": 838 + }, + { + "x": 1343, + "y": 897 + }, + { + "x": 1449, + "y": 956 + }, + { + "x": 1563, + "y": 1015 + }, + { + "x": 883, + "y": 777 + }, + { + "x": 995, + "y": 836 + }, + { + "x": 1112, + "y": 895 + }, + { + "x": 1222, + "y": 954 + }, + { + "x": 1336, + "y": 1013 + }, + { + "x": 1451, + "y": 1072 + } + ], + "schema": 1, + "soil_size": [ + 234, + 156 + ] +} diff --git a/catalogue/source/plants.json b/catalogue/source/plants.json new file mode 100644 index 0000000..c7b8b78 --- /dev/null +++ b/catalogue/source/plants.json @@ -0,0 +1,4449 @@ +{ + "plants": [ + { + "buy": 163, + "crop": 1, + "experience": 18, + "general": 1, + "harvest": 17, + "id": 1, + "isBuy": 1, + "isVip": 0, + "level": 0, + "name": "胡萝卜", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "7200,18000,32400,46800,46800", + "price": 21, + "sell": 0, + "soil": 0, + "time": 13, + "vipBuy": 0 + }, + { + "buy": 125, + "crop": 1, + "experience": 15, + "general": 1, + "harvest": 16, + "id": 2, + "isBuy": 1, + "isVip": 0, + "level": 0, + "name": "白萝卜", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "7200,14400,25200,36000,36000", + "price": 17, + "sell": 0, + "soil": 0, + "time": 10, + "vipBuy": 0 + }, + { + "buy": 80, + "crop": 1, + "experience": 10, + "general": 1, + "harvest": 25, + "id": 3, + "isBuy": 1, + "isVip": 0, + "level": 0, + "name": "牧草", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "7200,14400,21600,28800,28800", + "price": 6, + "sell": 0, + "soil": 0, + "time": 8, + "vipBuy": 0 + }, + { + "buy": 168, + "crop": 1, + "experience": 19, + "general": 1, + "harvest": 17, + "id": 4, + "isBuy": 1, + "isVip": 0, + "level": 1, + "name": "大白菜", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "7200,14400,25200,36000,50400", + "price": 22, + "sell": 0, + "soil": 0, + "time": 14, + "vipBuy": 0 + }, + { + "buy": 169, + "crop": 1, + "experience": 19, + "general": 1, + "harvest": 17, + "id": 5, + "isBuy": 1, + "isVip": 0, + "level": 1, + "name": "大蒜", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "7200,18000,25200,36000,50400", + "price": 22, + "sell": 0, + "soil": 0, + "time": 14, + "vipBuy": 0 + }, + { + "buy": 168, + "crop": 1, + "experience": 19, + "general": 1, + "harvest": 18, + "id": 6, + "isBuy": 1, + "isVip": 0, + "level": 2, + "name": "水稻", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "7200,14400,25200,36000,50400", + "price": 21, + "sell": 0, + "soil": 0, + "time": 14, + "vipBuy": 0 + }, + { + "buy": 168, + "crop": 1, + "experience": 19, + "general": 1, + "harvest": 18, + "id": 7, + "isBuy": 1, + "isVip": 0, + "level": 2, + "name": "小麦", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "7200,14400,25200,36000,50400", + "price": 21, + "sell": 0, + "soil": 0, + "time": 14, + "vipBuy": 0 + }, + { + "buy": 175, + "crop": 1, + "experience": 19, + "general": 1, + "harvest": 17, + "id": 8, + "isBuy": 1, + "isVip": 0, + "level": 3, + "name": "玉米", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "7200,14400,25200,36000,50400", + "price": 23, + "sell": 0, + "soil": 0, + "time": 14, + "vipBuy": 0 + }, + { + "buy": 194, + "crop": 1, + "experience": 29, + "general": 1, + "harvest": 23, + "id": 9, + "isBuy": 1, + "isVip": 0, + "level": 4, + "name": "油菜", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "14400,28800,46800,61200,61200", + "price": 24, + "sell": 0, + "soil": 0, + "time": 17, + "vipBuy": 0 + }, + { + "buy": 195, + "crop": 1, + "experience": 25, + "general": 1, + "harvest": 21, + "id": 10, + "isBuy": 1, + "isVip": 0, + "level": 4, + "name": "生菜", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "10800,21600,36000,50400,68400", + "price": 24, + "sell": 0, + "soil": 0, + "time": 19, + "vipBuy": 0 + }, + { + "buy": 195, + "crop": 1, + "experience": 15, + "general": 1, + "harvest": 18, + "id": 11, + "isBuy": 1, + "isVip": 0, + "level": 4, + "name": "小白菜", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "7200,14400,25200,39600,39600", + "price": 21, + "sell": 0, + "soil": 0, + "time": 11, + "vipBuy": 0 + }, + { + "buy": 188, + "crop": 1, + "experience": 20, + "general": 1, + "harvest": 18, + "id": 12, + "isBuy": 1, + "isVip": 0, + "level": 4, + "name": "土豆", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "7200,14400,25200,39600,54000", + "price": 24, + "sell": 0, + "soil": 0, + "time": 15, + "vipBuy": 0 + }, + { + "buy": 237, + "crop": 1, + "experience": 21, + "general": 1, + "harvest": 20, + "id": 13, + "isBuy": 1, + "isVip": 0, + "level": 5, + "name": "红枣", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "7200,18000,28800,43200,57600", + "price": 25, + "sell": 0, + "soil": 0, + "time": 16, + "vipBuy": 0 + }, + { + "buy": 237, + "crop": 1, + "experience": 21, + "general": 1, + "harvest": 20, + "id": 14, + "isBuy": 1, + "isVip": 0, + "level": 5, + "name": "茄子", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "7200,18000,28800,43200,57600", + "price": 25, + "sell": 0, + "soil": 0, + "time": 16, + "vipBuy": 0 + }, + { + "buy": 258, + "crop": 1, + "experience": 37, + "general": 1, + "harvest": 28, + "id": 15, + "isBuy": 1, + "isVip": 0, + "level": 6, + "name": "花菜", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "21600,43200,64800,82800,100800", + "price": 26, + "sell": 0, + "soil": 0, + "time": 28, + "vipBuy": 0 + }, + { + "buy": 251, + "crop": 1, + "experience": 22, + "general": 1, + "harvest": 21, + "id": 16, + "isBuy": 1, + "isVip": 0, + "level": 6, + "name": "韭菜", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "7200,18000,32400,46800,61200", + "price": 26, + "sell": 0, + "soil": 0, + "time": 17, + "vipBuy": 0 + }, + { + "buy": 251, + "crop": 1, + "experience": 22, + "general": 1, + "harvest": 21, + "id": 17, + "isBuy": 1, + "isVip": 0, + "level": 6, + "name": "番茄", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "7200,18000,32400,46800,61200", + "price": 26, + "sell": 0, + "soil": 0, + "time": 17, + "vipBuy": 0 + }, + { + "buy": 99999, + "crop": 1, + "experience": 22, + "general": 1, + "harvest": 21, + "id": 18, + "isBuy": 1, + "isVip": 0, + "level": 6, + "name": "ATTomato", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "7200,18000,32400,46800,61200", + "price": 7000, + "sell": 0, + "soil": 0, + "time": 17, + "vipBuy": 0 + }, + { + "buy": 251, + "crop": 1, + "experience": 23, + "general": 1, + "harvest": 22, + "id": 19, + "isBuy": 1, + "isVip": 0, + "level": 7, + "name": "红玫瑰", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "10800,21600,32400,46800,64800", + "price": 27, + "sell": 0, + "soil": 0, + "time": 18, + "vipBuy": 0 + }, + { + "buy": 264, + "crop": 1, + "experience": 44, + "general": 1, + "harvest": 34, + "id": 20, + "isBuy": 1, + "isVip": 0, + "level": 7, + "name": "莲藕", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "21600,46800,75600,100800,122400", + "price": 26, + "sell": 0, + "soil": 0, + "time": 34, + "vipBuy": 0 + }, + { + "buy": 266, + "crop": 1, + "experience": 23, + "general": 1, + "harvest": 22, + "id": 21, + "isBuy": 1, + "isVip": 0, + "level": 7, + "name": "豌豆", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "10800,21600,32400,46800,64800", + "price": 27, + "sell": 0, + "soil": 0, + "time": 18, + "vipBuy": 0 + }, + { + "buy": 280, + "crop": 1, + "experience": 35, + "general": 1, + "harvest": 29, + "id": 41, + "isBuy": 1, + "isVip": 0, + "level": 8, + "name": "黄瓜", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "14400,32400,54000,79200,100800", + "price": 28, + "sell": 0, + "soil": 0, + "time": 28, + "vipBuy": 0 + }, + { + "buy": 296, + "crop": 1, + "experience": 25, + "general": 1, + "harvest": 24, + "id": 42, + "isBuy": 1, + "isVip": 0, + "level": 8, + "name": "辣椒", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "10800,25200,39600,54000,72000", + "price": 28, + "sell": 0, + "soil": 0, + "time": 20, + "vipBuy": 0 + }, + { + "buy": 296, + "crop": 1, + "experience": 25, + "general": 1, + "harvest": 24, + "id": 43, + "isBuy": 1, + "isVip": 0, + "level": 8, + "name": "芹菜", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "10800,25200,39600,54000,72000", + "price": 28, + "sell": 0, + "soil": 0, + "time": 20, + "vipBuy": 0 + }, + { + "buy": 325, + "crop": 1, + "experience": 27, + "general": 1, + "harvest": 25, + "id": 44, + "isBuy": 1, + "isVip": 0, + "level": 9, + "name": "南瓜", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "10800,25200,43200,61200,79200", + "price": 30, + "sell": 0, + "soil": 0, + "time": 22, + "vipBuy": 0 + }, + { + "buy": 362, + "crop": 1, + "experience": 21, + "general": 1, + "harvest": 24, + "id": 45, + "isBuy": 1, + "isVip": 0, + "level": 9, + "name": "核桃", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "10800,25200,43200,43200,61200", + "price": 29, + "sell": 0, + "soil": 0, + "time": 17, + "vipBuy": 0 + }, + { + "buy": 605, + "crop": 2, + "experience": 20, + "general": 1, + "harvest": 24, + "id": 46, + "isBuy": 1, + "isVip": 0, + "level": 10, + "name": "草莓", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "14400,28800,46800,64800,86400", + "price": 27, + "sell": 0, + "soil": 0, + "time": 24, + "vipBuy": 0 + }, + { + "buy": 578, + "crop": 2, + "experience": 18, + "general": 1, + "harvest": 23, + "id": 47, + "isBuy": 1, + "isVip": 0, + "level": 10, + "name": "苹果", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "14400,28800,43200,57600,75600", + "price": 24, + "sell": 0, + "soil": 0, + "time": 21, + "vipBuy": 0 + }, + { + "buy": 708, + "crop": 2, + "experience": 23, + "general": 1, + "harvest": 27, + "id": 48, + "isBuy": 1, + "isVip": 0, + "level": 11, + "name": "西瓜", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "14400,32400,54000,75600,100800", + "price": 29, + "sell": 0, + "soil": 0, + "time": 28, + "vipBuy": 0 + }, + { + "buy": 700, + "crop": 2, + "experience": 23, + "general": 1, + "harvest": 27, + "id": 49, + "isBuy": 1, + "isVip": 0, + "level": 11, + "name": "魔法神花", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "14400,32400,54000,75600,100800", + "price": 29, + "sell": 0, + "soil": 0, + "time": 28, + "vipBuy": 0 + }, + { + "buy": 708, + "crop": 2, + "experience": 23, + "general": 1, + "harvest": 27, + "id": 50, + "isBuy": 1, + "isVip": 0, + "level": 11, + "name": "黄豆", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "14400,32400,54000,75600,100800", + "price": 29, + "sell": 0, + "soil": 0, + "time": 28, + "vipBuy": 0 + }, + { + "buy": 900, + "crop": 2, + "experience": 25, + "general": 1, + "harvest": 29, + "id": 51, + "isBuy": 1, + "isVip": 0, + "level": 12, + "name": "香蕉", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "18000,39600,61200,86400,111600", + "price": 32, + "sell": 0, + "soil": 0, + "time": 31, + "vipBuy": 0 + }, + { + "buy": 800, + "crop": 2, + "experience": 20, + "general": 1, + "harvest": 28, + "id": 52, + "isBuy": 1, + "isVip": 0, + "level": 12, + "name": "竹笋", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "18000,36000,54000,72000,90000", + "price": 28, + "sell": 0, + "soil": 0, + "time": 25, + "vipBuy": 0 + }, + { + "buy": 1330, + "crop": 2, + "experience": 25, + "general": 1, + "harvest": 28, + "id": 53, + "isBuy": 1, + "isVip": 0, + "level": 13, + "name": "甘蔗", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "18000,39600,61200,86400,111600", + "price": 42, + "sell": 0, + "soil": 0, + "time": 31, + "vipBuy": 0 + }, + { + "buy": 1200, + "crop": 2, + "experience": 33, + "general": 1, + "harvest": 32, + "id": 54, + "isBuy": 1, + "isVip": 0, + "level": 13, + "name": "桃子", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "28800,57600,86400,118800,151200", + "price": 40, + "sell": 0, + "soil": 0, + "time": 42, + "vipBuy": 0 + }, + { + "buy": 1587, + "crop": 2, + "experience": 25, + "general": 1, + "harvest": 26, + "id": 55, + "isBuy": 1, + "isVip": 0, + "level": 14, + "name": "橙子", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "25200,50400,75600,104400,133200", + "price": 41, + "sell": 0, + "soil": 0, + "time": 37, + "vipBuy": 0 + }, + { + "buy": 6666, + "crop": 6, + "experience": 48, + "general": 1, + "harvest": 57, + "id": 56, + "isBuy": 0, + "isVip": 0, + "level": 63, + "name": "香粽龙舟", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "28800,61200,93600,129600,165600", + "price": 510, + "sell": 1, + "soil": 0, + "time": 46, + "vipBuy": 0 + }, + { + "buy": 2860, + "crop": 2, + "experience": 21, + "general": 1, + "harvest": 32, + "id": 57, + "isBuy": 0, + "isVip": 0, + "level": 28, + "name": "园艺世", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "10800,21600,32400,46800,68400", + "price": 118, + "sell": 0, + "soil": 0, + "time": 19, + "vipBuy": 0 + }, + { + "buy": 780, + "crop": 1, + "experience": 16, + "general": 1, + "harvest": 5, + "id": 58, + "isBuy": 0, + "isVip": 0, + "level": 5, + "name": "蜜思桃", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "14400,32400,54000,79200,108000", + "price": 168, + "sell": 0, + "soil": 0, + "time": 30, + "vipBuy": 0 + }, + { + "buy": 100, + "crop": 1, + "experience": 30, + "general": 1, + "harvest": 18, + "id": 59, + "isBuy": 1, + "isVip": 0, + "level": 15, + "name": "迎春花", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "10800,21600,39600,57600,86400", + "price": 30, + "sell": 0, + "soil": 0, + "time": 24, + "vipBuy": 0 + }, + { + "buy": 1978, + "crop": 3, + "experience": 30, + "general": 1, + "harvest": 29, + "id": 60, + "isBuy": 1, + "isVip": 0, + "level": 15, + "name": "葡萄", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "28800,61200,93600,129600,165600", + "price": 47, + "sell": 0, + "soil": 0, + "time": 46, + "vipBuy": 0 + }, + { + "buy": 2130, + "crop": 3, + "experience": 20, + "general": 1, + "harvest": 24, + "id": 61, + "isBuy": 1, + "isVip": 0, + "level": 15, + "name": "丝瓜", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "18000,39600,61200,86400,111600", + "price": 50, + "sell": 0, + "soil": 0, + "time": 31, + "vipBuy": 0 + }, + { + "buy": 1978, + "crop": 3, + "experience": 30, + "general": 1, + "harvest": 29, + "id": 62, + "isBuy": 1, + "isVip": 0, + "level": 15, + "name": "榛子", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "28800,61200,93600,129600,165600", + "price": 47, + "sell": 0, + "soil": 0, + "time": 46, + "vipBuy": 0 + }, + { + "buy": 1600, + "crop": 3, + "experience": 19, + "general": 1, + "harvest": 20, + "id": 63, + "isBuy": 1, + "isVip": 0, + "level": 16, + "name": "栗子", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "21600,43200,64800,86400,108000", + "price": 49, + "sell": 0, + "soil": 0, + "time": 30, + "vipBuy": 0 + }, + { + "buy": 2425, + "crop": 3, + "experience": 34, + "general": 1, + "harvest": 30, + "id": 64, + "isBuy": 1, + "isVip": 0, + "level": 16, + "name": "石榴", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "36000,72000,108000,147600,187200", + "price": 54, + "sell": 0, + "soil": 0, + "time": 52, + "vipBuy": 0 + }, + { + "buy": 2855, + "crop": 3, + "experience": 39, + "general": 1, + "harvest": 33, + "id": 65, + "isBuy": 1, + "isVip": 0, + "level": 17, + "name": "柚子", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "39600,82800,126000,172800,219600", + "price": 58, + "sell": 0, + "soil": 0, + "time": 61, + "vipBuy": 0 + }, + { + "buy": 2600, + "crop": 3, + "experience": 16, + "general": 1, + "harvest": 27, + "id": 66, + "isBuy": 1, + "isVip": 0, + "level": 17, + "name": "蘑菇", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "25200,50400,79200,108000,108000", + "price": 55, + "sell": 0, + "soil": 0, + "time": 30, + "vipBuy": 0 + }, + { + "buy": 1700, + "crop": 3, + "experience": 27, + "general": 1, + "harvest": 29, + "id": 67, + "isBuy": 1, + "isVip": 0, + "level": 18, + "name": "无花果", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "28800,57600,86400,118800,151200", + "price": 43, + "sell": 0, + "soil": 0, + "time": 42, + "vipBuy": 0 + }, + { + "buy": 1600, + "crop": 3, + "experience": 19, + "general": 1, + "harvest": 16, + "id": 68, + "isBuy": 1, + "isVip": 0, + "level": 18, + "name": "箬竹", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "21600,43200,64800,86400,108000", + "price": 64, + "sell": 0, + "soil": 0, + "time": 30, + "vipBuy": 0 + }, + { + "buy": 3480, + "crop": 3, + "experience": 40, + "general": 1, + "harvest": 35, + "id": 69, + "isBuy": 1, + "isVip": 0, + "level": 18, + "name": "菠萝", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "43200,90000,136800,183600,230400", + "price": 62, + "sell": 0, + "soil": 0, + "time": 64, + "vipBuy": 0 + }, + { + "buy": 1200, + "crop": 4, + "experience": 25, + "general": 1, + "harvest": 25, + "id": 70, + "isBuy": 1, + "isVip": 0, + "level": 19, + "name": "金针菇", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "28800,57600,86400,118800,151200", + "price": 38, + "sell": 0, + "soil": 0, + "time": 42, + "vipBuy": 0 + }, + { + "buy": 1200, + "crop": 4, + "experience": 25, + "general": 1, + "harvest": 25, + "id": 71, + "isBuy": 1, + "isVip": 0, + "level": 19, + "name": "花生", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "28800,57600,86400,118800,151200", + "price": 38, + "sell": 0, + "soil": 0, + "time": 42, + "vipBuy": 0 + }, + { + "buy": 3720, + "crop": 4, + "experience": 32, + "general": 1, + "harvest": 27, + "id": 72, + "isBuy": 1, + "isVip": 0, + "level": 19, + "name": "椰子", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "36000,75600,115200,154800,198000", + "price": 65, + "sell": 0, + "soil": 0, + "time": 55, + "vipBuy": 0 + }, + { + "buy": 4742, + "crop": 4, + "experience": 36, + "general": 1, + "harvest": 30, + "id": 73, + "isBuy": 1, + "isVip": 0, + "level": 20, + "name": "葫芦", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "39600,82800,126000,172800,219600", + "price": 71, + "sell": 0, + "soil": 0, + "time": 61, + "vipBuy": 0 + }, + { + "buy": 4742, + "crop": 4, + "experience": 36, + "general": 1, + "harvest": 30, + "id": 74, + "isBuy": 1, + "isVip": 0, + "level": 20, + "name": "睡莲", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "39600,82800,126000,172800,219600", + "price": 71, + "sell": 0, + "soil": 0, + "time": 61, + "vipBuy": 0 + }, + { + "buy": 1360, + "crop": 4, + "experience": 19, + "general": 1, + "harvest": 24, + "id": 75, + "isBuy": 1, + "isVip": 0, + "level": 20, + "name": "梨", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "21600,43200,64800,90000,115200", + "price": 35, + "sell": 0, + "soil": 0, + "time": 32, + "vipBuy": 0 + }, + { + "buy": 4700, + "crop": 4, + "experience": 27, + "general": 1, + "harvest": 27, + "id": 76, + "isBuy": 1, + "isVip": 0, + "level": 20, + "name": "猕猴桃", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "28800,61200,93600,129600,165600", + "price": 75, + "sell": 0, + "soil": 0, + "time": 46, + "vipBuy": 0 + }, + { + "buy": 4800, + "crop": 4, + "experience": 25, + "general": 1, + "harvest": 27, + "id": 77, + "isBuy": 1, + "isVip": 0, + "level": 21, + "name": "枇杷", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "28800,57600,86400,118800,151200", + "price": 77, + "sell": 0, + "soil": 0, + "time": 42, + "vipBuy": 0 + }, + { + "buy": 5356, + "crop": 4, + "experience": 41, + "general": 1, + "harvest": 32, + "id": 78, + "isBuy": 1, + "isVip": 0, + "level": 21, + "name": "火龙果", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "46800,97200,147600,198000,252000", + "price": 77, + "sell": 0, + "soil": 0, + "time": 70, + "vipBuy": 0 + }, + { + "buy": 5527, + "crop": 4, + "experience": 42, + "general": 1, + "harvest": 33, + "id": 79, + "isBuy": 1, + "isVip": 0, + "level": 22, + "name": "樱桃", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "50400,100800,151200,205200,259200", + "price": 78, + "sell": 0, + "soil": 0, + "time": 72, + "vipBuy": 0 + }, + { + "buy": 5527, + "crop": 4, + "experience": 42, + "general": 1, + "harvest": 33, + "id": 80, + "isBuy": 1, + "isVip": 0, + "level": 22, + "name": "李子", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "50400,100800,151200,205200,259200", + "price": 78, + "sell": 0, + "soil": 0, + "time": 72, + "vipBuy": 0 + }, + { + "buy": 1480, + "crop": 4, + "experience": 22, + "general": 1, + "harvest": 26, + "id": 81, + "isBuy": 1, + "isVip": 0, + "level": 23, + "name": "香瓜", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "21600,43200,68400,97200,126000", + "price": 38, + "sell": 0, + "soil": 0, + "time": 35, + "vipBuy": 0 + }, + { + "buy": 6588, + "crop": 4, + "experience": 44, + "general": 1, + "harvest": 34, + "id": 82, + "isBuy": 1, + "isVip": 0, + "level": 23, + "name": "荔枝", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "54000,108000,165600,219600,277200", + "price": 86, + "sell": 0, + "soil": 0, + "time": 77, + "vipBuy": 0 + }, + { + "buy": 2300, + "crop": 5, + "experience": 18, + "general": 1, + "harvest": 27, + "id": 83, + "isBuy": 1, + "isVip": 0, + "level": 24, + "name": "桂圆", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "18000,39600,61200,86400,111600", + "price": 38, + "sell": 0, + "soil": 0, + "time": 31, + "vipBuy": 0 + }, + { + "buy": 6590, + "crop": 5, + "experience": 26, + "general": 1, + "harvest": 28, + "id": 84, + "isBuy": 1, + "isVip": 0, + "level": 24, + "name": "木瓜", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "28800,61200,93600,129600,165600", + "price": 80, + "sell": 0, + "soil": 0, + "time": 46, + "vipBuy": 0 + }, + { + "buy": 2300, + "crop": 5, + "experience": 18, + "general": 1, + "harvest": 27, + "id": 85, + "isBuy": 1, + "isVip": 0, + "level": 24, + "name": "月柿", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "18000,39600,61200,86400,111600", + "price": 38, + "sell": 0, + "soil": 0, + "time": 31, + "vipBuy": 0 + }, + { + "buy": 2400, + "crop": 5, + "experience": 18, + "general": 1, + "harvest": 27, + "id": 86, + "isBuy": 1, + "isVip": 0, + "level": 25, + "name": "哈密瓜", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "18000,39600,61200,86400,111600", + "price": 39, + "sell": 0, + "soil": 0, + "time": 31, + "vipBuy": 0 + }, + { + "buy": 2400, + "crop": 5, + "experience": 18, + "general": 1, + "harvest": 27, + "id": 87, + "isBuy": 1, + "isVip": 0, + "level": 25, + "name": "桑葚", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "18000,39600,61200,86400,111600", + "price": 39, + "sell": 0, + "soil": 0, + "time": 31, + "vipBuy": 0 + }, + { + "buy": 7000, + "crop": 5, + "experience": 27, + "general": 1, + "harvest": 29, + "id": 88, + "isBuy": 1, + "isVip": 0, + "level": 25, + "name": "杨桃", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "28800,61200,93600,129600,165600", + "price": 82, + "sell": 0, + "soil": 0, + "time": 46, + "vipBuy": 0 + }, + { + "buy": 6300, + "crop": 5, + "experience": 18, + "general": 1, + "harvest": 26, + "id": 89, + "isBuy": 1, + "isVip": 0, + "level": 26, + "name": "柠檬", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "18000,39600,61200,86400,111600", + "price": 83, + "sell": 0, + "soil": 0, + "time": 31, + "vipBuy": 0 + }, + { + "buy": 2500, + "crop": 5, + "experience": 18, + "general": 1, + "harvest": 27, + "id": 90, + "isBuy": 1, + "isVip": 0, + "level": 26, + "name": "芒果", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "18000,39600,61200,86400,111600", + "price": 40, + "sell": 0, + "soil": 0, + "time": 31, + "vipBuy": 0 + }, + { + "buy": 2600, + "crop": 5, + "experience": 18, + "general": 1, + "harvest": 27, + "id": 91, + "isBuy": 1, + "isVip": 0, + "level": 27, + "name": "榴莲", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "18000,39600,61200,86400,111600", + "price": 41, + "sell": 0, + "soil": 0, + "time": 31, + "vipBuy": 0 + }, + { + "buy": 6600, + "crop": 5, + "experience": 18, + "general": 1, + "harvest": 27, + "id": 92, + "isBuy": 1, + "isVip": 0, + "level": 27, + "name": "杨梅", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "18000,39600,61200,86400,111600", + "price": 84, + "sell": 0, + "soil": 0, + "time": 31, + "vipBuy": 0 + }, + { + "buy": 2873, + "crop": 5, + "experience": 18, + "general": 1, + "harvest": 28, + "id": 93, + "isBuy": 1, + "isVip": 0, + "level": 28, + "name": "番石榴", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "18000,39600,61200,86400,111600", + "price": 42, + "sell": 0, + "soil": 0, + "time": 31, + "vipBuy": 0 + }, + { + "buy": 2976, + "crop": 5, + "experience": 18, + "general": 1, + "harvest": 28, + "id": 94, + "isBuy": 1, + "isVip": 0, + "level": 29, + "name": "蓝莓", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "18000,39600,61200,86400,111600", + "price": 43, + "sell": 0, + "soil": 0, + "time": 31, + "vipBuy": 0 + }, + { + "buy": 3110, + "crop": 5, + "experience": 18, + "general": 1, + "harvest": 28, + "id": 95, + "isBuy": 1, + "isVip": 0, + "level": 30, + "name": "山竹", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "18000,39600,61200,86400,111600", + "price": 44, + "sell": 0, + "soil": 0, + "time": 31, + "vipBuy": 0 + }, + { + "buy": 3210, + "crop": 5, + "experience": 18, + "general": 1, + "harvest": 28, + "id": 96, + "isBuy": 1, + "isVip": 0, + "level": 31, + "name": "苦瓜", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "18000,39600,61200,86400,111600", + "price": 45, + "sell": 0, + "soil": 0, + "time": 31, + "vipBuy": 0 + }, + { + "buy": 3300, + "crop": 5, + "experience": 18, + "general": 1, + "harvest": 28, + "id": 97, + "isBuy": 1, + "isVip": 0, + "level": 32, + "name": "冬瓜", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "18000,39600,61200,86400,111600", + "price": 46, + "sell": 0, + "soil": 0, + "time": 31, + "vipBuy": 0 + }, + { + "buy": 3376, + "crop": 5, + "experience": 18, + "general": 1, + "harvest": 29, + "id": 98, + "isBuy": 1, + "isVip": 0, + "level": 33, + "name": "杏子", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "18000,39600,61200,86400,111600", + "price": 45, + "sell": 0, + "soil": 0, + "time": 31, + "vipBuy": 0 + }, + { + "buy": 3470, + "crop": 5, + "experience": 18, + "general": 1, + "harvest": 29, + "id": 99, + "isBuy": 1, + "isVip": 0, + "level": 34, + "name": "金桔", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "18000,39600,61200,86400,111600", + "price": 46, + "sell": 0, + "soil": 0, + "time": 31, + "vipBuy": 0 + }, + { + "buy": 3520, + "crop": 5, + "experience": 19, + "general": 1, + "harvest": 30, + "id": 100, + "isBuy": 1, + "isVip": 0, + "level": 35, + "name": "红毛丹", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "21600,46800,64800,90000,118800", + "price": 47, + "sell": 0, + "soil": 0, + "time": 33, + "vipBuy": 0 + }, + { + "buy": 3630, + "crop": 5, + "experience": 16, + "general": 1, + "harvest": 28, + "id": 101, + "isBuy": 1, + "isVip": 0, + "level": 36, + "name": "芭蕉", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "21600,39600,57600,79200,104400", + "price": 48, + "sell": 0, + "soil": 0, + "time": 29, + "vipBuy": 0 + }, + { + "buy": 3840, + "crop": 6, + "experience": 16, + "general": 1, + "harvest": 26, + "id": 102, + "isBuy": 1, + "isVip": 0, + "level": 37, + "name": "番荔枝", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "18000,43200,64800,93600,111600", + "price": 49, + "sell": 0, + "soil": 0, + "time": 31, + "vipBuy": 0 + }, + { + "buy": 3970, + "crop": 6, + "experience": 16, + "general": 1, + "harvest": 26, + "id": 103, + "isBuy": 1, + "isVip": 0, + "level": 38, + "name": "橄榄", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "21600,43200,61200,82800,108000", + "price": 50, + "sell": 0, + "soil": 0, + "time": 30, + "vipBuy": 0 + }, + { + "buy": 4130, + "crop": 6, + "experience": 15, + "general": 1, + "harvest": 26, + "id": 104, + "isBuy": 1, + "isVip": 0, + "level": 39, + "name": "百香果", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "21600,43200,64800,86400,108000", + "price": 50, + "sell": 0, + "soil": 0, + "time": 30, + "vipBuy": 0 + }, + { + "buy": 4200, + "crop": 6, + "experience": 16, + "general": 1, + "harvest": 26, + "id": 105, + "isBuy": 1, + "isVip": 0, + "level": 40, + "name": "灯笼果", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "21600,39600,57600,79200,104400", + "price": 52, + "sell": 0, + "soil": 0, + "time": 29, + "vipBuy": 0 + }, + { + "buy": 4280, + "crop": 6, + "experience": 16, + "general": 0, + "harvest": 26, + "id": 106, + "isBuy": 1, + "isVip": 0, + "level": 41, + "name": "芦荟", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "21600,39600,57600,79200,104400", + "price": 53, + "sell": 0, + "soil": 0, + "time": 29, + "vipBuy": 0 + }, + { + "buy": 4380, + "crop": 6, + "experience": 17, + "general": 1, + "harvest": 27, + "id": 107, + "isBuy": 1, + "isVip": 0, + "level": 42, + "name": "薄荷", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "21600,39600,57600,82800,108000", + "price": 54, + "sell": 0, + "soil": 0, + "time": 30, + "vipBuy": 0 + }, + { + "buy": 4470, + "crop": 7, + "experience": 13, + "general": 1, + "harvest": 22, + "id": 108, + "isBuy": 1, + "isVip": 0, + "level": 43, + "name": "菠萝蜜", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "28800,46800,64800,86400,100800", + "price": 55, + "sell": 0, + "soil": 0, + "time": 28, + "vipBuy": 0 + }, + { + "buy": 4500, + "crop": 7, + "experience": 14, + "general": 1, + "harvest": 23, + "id": 109, + "isBuy": 1, + "isVip": 0, + "level": 44, + "name": "鳄梨", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "25200,54000,75600,97200,115200", + "price": 56, + "sell": 0, + "soil": 0, + "time": 32, + "vipBuy": 0 + }, + { + "buy": 4510, + "crop": 7, + "experience": 14, + "general": 1, + "harvest": 23, + "id": 110, + "isBuy": 1, + "isVip": 0, + "level": 45, + "name": "乌饭子", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "21600,39600,61200,82800,104400", + "price": 57, + "sell": 0, + "soil": 0, + "time": 29, + "vipBuy": 0 + }, + { + "buy": 4540, + "crop": 7, + "experience": 12, + "general": 1, + "harvest": 21, + "id": 111, + "isBuy": 1, + "isVip": 0, + "level": 46, + "name": "黑布仑", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "18000,36000,54000,72000,90000", + "price": 58, + "sell": 0, + "soil": 0, + "time": 25, + "vipBuy": 0 + }, + { + "buy": 4690, + "crop": 7, + "experience": 19, + "general": 1, + "harvest": 27, + "id": 112, + "isBuy": 1, + "isVip": 0, + "level": 47, + "name": "可可豆", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "28800,57600,86400,115200,144000", + "price": 59, + "sell": 0, + "soil": 0, + "time": 40, + "vipBuy": 0 + }, + { + "buy": 4720, + "crop": 7, + "experience": 19, + "general": 1, + "harvest": 27, + "id": 113, + "isBuy": 1, + "isVip": 0, + "level": 48, + "name": "莲雾", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "18000,39600,64800,93600,126000", + "price": 60, + "sell": 0, + "soil": 0, + "time": 35, + "vipBuy": 0 + }, + { + "buy": 4760, + "crop": 7, + "experience": 21, + "general": 1, + "harvest": 29, + "id": 114, + "isBuy": 1, + "isVip": 0, + "level": 49, + "name": "蛋黄果", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "32400,64800,97200,129600,162000", + "price": 61, + "sell": 0, + "soil": 0, + "time": 45, + "vipBuy": 0 + }, + { + "buy": 4790, + "crop": 7, + "experience": 21, + "general": 1, + "harvest": 29, + "id": 115, + "isBuy": 1, + "isVip": 0, + "level": 50, + "name": "沙棘", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "32400,68400,104400,136800,169200", + "price": 62, + "sell": 0, + "soil": 0, + "time": 47, + "vipBuy": 0 + }, + { + "buy": 4820, + "crop": 7, + "experience": 23, + "general": 1, + "harvest": 31, + "id": 116, + "isBuy": 1, + "isVip": 0, + "level": 51, + "name": "榅桲", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "36000,72000,108000,144000,180000", + "price": 63, + "sell": 0, + "soil": 0, + "time": 50, + "vipBuy": 0 + }, + { + "buy": 4830, + "crop": 7, + "experience": 22, + "general": 1, + "harvest": 31, + "id": 117, + "isBuy": 1, + "isVip": 0, + "level": 52, + "name": "黄金果", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "32400,64800,97200,133200,169200", + "price": 64, + "sell": 0, + "soil": 0, + "time": 47, + "vipBuy": 0 + }, + { + "buy": 4860, + "crop": 7, + "experience": 20, + "general": 1, + "harvest": 31, + "id": 118, + "isBuy": 1, + "isVip": 0, + "level": 53, + "name": "决明子", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "32400,64800,97200,129600,162000", + "price": 65, + "sell": 0, + "soil": 0, + "time": 45, + "vipBuy": 0 + }, + { + "buy": 4940, + "crop": 7, + "experience": 20, + "general": 1, + "harvest": 31, + "id": 119, + "isBuy": 1, + "isVip": 0, + "level": 54, + "name": "关苍术", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "32400,64800,100800,133200,165600", + "price": 66, + "sell": 0, + "soil": 0, + "time": 46, + "vipBuy": 0 + }, + { + "buy": 4990, + "crop": 7, + "experience": 20, + "general": 1, + "harvest": 31, + "id": 120, + "isBuy": 1, + "isVip": 0, + "level": 55, + "name": "冬凌草", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "36000,68400,100800,133200,165600", + "price": 67, + "sell": 0, + "soil": 0, + "time": 46, + "vipBuy": 0 + }, + { + "buy": 5000, + "crop": 7, + "experience": 21, + "general": 1, + "harvest": 32, + "id": 121, + "isBuy": 1, + "isVip": 0, + "level": 56, + "name": "关白附子", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "32400,64800,97200,129600,165600", + "price": 68, + "sell": 0, + "soil": 0, + "time": 46, + "vipBuy": 0 + }, + { + "buy": 5100, + "crop": 7, + "experience": 21, + "general": 1, + "harvest": 32, + "id": 122, + "isBuy": 1, + "isVip": 0, + "level": 57, + "name": "兔儿伞", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "32400,64800,100800,133200,165600", + "price": 69, + "sell": 0, + "soil": 0, + "time": 46, + "vipBuy": 0 + }, + { + "buy": 5150, + "crop": 7, + "experience": 21, + "general": 1, + "harvest": 33, + "id": 123, + "isBuy": 1, + "isVip": 0, + "level": 58, + "name": "益母草", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "32400,64800,97200,133200,169200", + "price": 69, + "sell": 0, + "soil": 0, + "time": 47, + "vipBuy": 0 + }, + { + "buy": 5180, + "crop": 8, + "experience": 20, + "general": 1, + "harvest": 33, + "id": 124, + "isBuy": 1, + "isVip": 0, + "level": 59, + "name": "一点红", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "32400,64800,97200,129600,162000", + "price": 69, + "sell": 0, + "soil": 0, + "time": 45, + "vipBuy": 0 + }, + { + "buy": 5300, + "crop": 7, + "experience": 21, + "general": 1, + "harvest": 34, + "id": 125, + "isBuy": 1, + "isVip": 0, + "level": 60, + "name": "三七", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "32400,64800,97200,133200,169200", + "price": 70, + "sell": 0, + "soil": 0, + "time": 47, + "vipBuy": 0 + }, + { + "buy": 6048, + "crop": 2, + "experience": 30, + "general": 1, + "harvest": 30, + "id": 126, + "isBuy": 1, + "isVip": 0, + "level": 88, + "name": "富贵竹", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "10800,21600,32400,46800,68400", + "price": 189, + "sell": 0, + "soil": 0, + "time": 19, + "vipBuy": 0 + }, + { + "buy": 6070, + "crop": 2, + "experience": 30, + "general": 1, + "harvest": 30, + "id": 127, + "isBuy": 1, + "isVip": 0, + "level": 92, + "name": "点地梅", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "10800,21600,32400,46800,68400", + "price": 199, + "sell": 0, + "soil": 0, + "time": 19, + "vipBuy": 0 + }, + { + "buy": 5400, + "crop": 2, + "experience": 30, + "general": 1, + "harvest": 39, + "id": 128, + "isBuy": 1, + "isVip": 0, + "level": 50, + "name": "双玉兰", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "10800,21600,32400,46800,68400", + "price": 152, + "sell": 0, + "soil": 0, + "time": 19, + "vipBuy": 0 + }, + { + "buy": 3888, + "crop": 2, + "experience": 45, + "general": 1, + "harvest": 35, + "id": 129, + "isBuy": 1, + "isVip": 0, + "level": 44, + "name": "红叶梅", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "10800,21600,32400,46800,68400", + "price": 148, + "sell": 0, + "soil": 0, + "time": 19, + "vipBuy": 0 + }, + { + "buy": 5200, + "crop": 2, + "experience": 28, + "general": 1, + "harvest": 34, + "id": 130, + "isBuy": 1, + "isVip": 0, + "level": 38, + "name": "鸾风玉", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "10800,21600,32400,46800,68400", + "price": 138, + "sell": 0, + "soil": 0, + "time": 19, + "vipBuy": 0 + }, + { + "buy": 0, + "crop": 1, + "experience": 8, + "general": 1, + "harvest": 27, + "id": 1001, + "isBuy": 1, + "isVip": 1, + "level": 5, + "name": "澳洲青苹果", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "14400,28800,46800,64800,86400", + "price": 1, + "sell": 0, + "soil": 0, + "time": 24, + "vipBuy": 23 + }, + { + "buy": 0, + "crop": 1, + "experience": 16, + "general": 1, + "harvest": 40, + "id": 1002, + "isBuy": 1, + "isVip": 1, + "level": 80, + "name": "椒蕉树", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "10800,21600,32400,46800,68400", + "price": 1, + "sell": 0, + "soil": 0, + "time": 19, + "vipBuy": 30 + }, + { + "buy": 0, + "crop": 1, + "experience": 11, + "general": 1, + "harvest": 30, + "id": 1003, + "isBuy": 1, + "isVip": 1, + "level": 90, + "name": "丁香水仙", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "14400,28800,46800,64800,86400", + "price": 1, + "sell": 0, + "soil": 0, + "time": 24, + "vipBuy": 23 + }, + { + "buy": 0, + "crop": 1, + "experience": 11, + "general": 1, + "harvest": 31, + "id": 1004, + "isBuy": 1, + "isVip": 1, + "level": 95, + "name": "围裙水仙", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "14400,28800,46800,64800,86400", + "price": 1, + "sell": 0, + "soil": 0, + "time": 24, + "vipBuy": 24 + }, + { + "buy": 0, + "crop": 1, + "experience": 11, + "general": 1, + "harvest": 33, + "id": 1005, + "isBuy": 1, + "isVip": 1, + "level": 100, + "name": "绿绒蒿", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "14400,28800,46800,64800,86400", + "price": 1, + "sell": 0, + "soil": 0, + "time": 24, + "vipBuy": 25 + }, + { + "buy": 0, + "crop": 1, + "experience": 12, + "general": 1, + "harvest": 34, + "id": 1006, + "isBuy": 1, + "isVip": 1, + "level": 105, + "name": "秦椒", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "14400,28800,46800,64800,86400", + "price": 1, + "sell": 0, + "soil": 0, + "time": 24, + "vipBuy": 26 + }, + { + "buy": 0, + "crop": 1, + "experience": 13, + "general": 1, + "harvest": 36, + "id": 1007, + "isBuy": 1, + "isVip": 1, + "level": 110, + "name": "五彩椒", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "14400,28800,46800,64800,86400", + "price": 1, + "sell": 0, + "soil": 0, + "time": 24, + "vipBuy": 26 + }, + { + "buy": 0, + "crop": 1, + "experience": 13, + "general": 1, + "harvest": 37, + "id": 1008, + "isBuy": 1, + "isVip": 1, + "level": 115, + "name": "香水百合", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "14400,28800,46800,64800,86400", + "price": 1, + "sell": 0, + "soil": 0, + "time": 24, + "vipBuy": 28 + }, + { + "buy": 0, + "crop": 1, + "experience": 15, + "general": 1, + "harvest": 39, + "id": 1009, + "isBuy": 1, + "isVip": 1, + "level": 120, + "name": "葛巾紫", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "14400,28800,46800,64800,86400", + "price": 1, + "sell": 0, + "soil": 0, + "time": 24, + "vipBuy": 29 + }, + { + "buy": 0, + "crop": 1, + "experience": 13, + "general": 1, + "harvest": 43, + "id": 1010, + "isBuy": 1, + "isVip": 1, + "level": 110, + "name": "一星五彩椒", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "14400,28800,46800,64800,86400", + "price": 2, + "sell": 0, + "soil": 0, + "time": 24, + "vipBuy": 32 + }, + { + "buy": 0, + "crop": 1, + "experience": 12, + "general": 1, + "harvest": 37, + "id": 1011, + "isBuy": 1, + "isVip": 1, + "level": 95, + "name": "一星围裙水仙", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "14400,28800,46800,64800,86400", + "price": 2, + "sell": 0, + "soil": 0, + "time": 24, + "vipBuy": 29 + }, + { + "buy": 0, + "crop": 1, + "experience": 12, + "general": 1, + "harvest": 41, + "id": 1012, + "isBuy": 1, + "isVip": 1, + "level": 105, + "name": "一星秦椒", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "14400,28800,46800,64800,86400", + "price": 2, + "sell": 0, + "soil": 0, + "time": 24, + "vipBuy": 31 + }, + { + "buy": 0, + "crop": 1, + "experience": 12, + "general": 1, + "harvest": 36, + "id": 1013, + "isBuy": 1, + "isVip": 1, + "level": 90, + "name": "一星丁香水仙", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "14400,28800,46800,64800,86400", + "price": 2, + "sell": 0, + "soil": 0, + "time": 24, + "vipBuy": 28 + }, + { + "buy": 0, + "crop": 1, + "experience": 12, + "general": 1, + "harvest": 40, + "id": 1014, + "isBuy": 1, + "isVip": 1, + "level": 100, + "name": "一星绿绒蒿", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "14400,28800,46800,64800,86400", + "price": 2, + "sell": 0, + "soil": 0, + "time": 24, + "vipBuy": 30 + }, + { + "buy": 0, + "crop": 1, + "experience": 15, + "general": 1, + "harvest": 47, + "id": 1015, + "isBuy": 1, + "isVip": 1, + "level": 120, + "name": "一星葛巾紫", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "14400,28800,46800,64800,86400", + "price": 2, + "sell": 0, + "soil": 0, + "time": 24, + "vipBuy": 35 + }, + { + "buy": 0, + "crop": 1, + "experience": 13, + "general": 1, + "harvest": 44, + "id": 1016, + "isBuy": 1, + "isVip": 1, + "level": 115, + "name": "一星香水百合", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "14400,28800,46800,64800,86400", + "price": 2, + "sell": 0, + "soil": 0, + "time": 24, + "vipBuy": 34 + }, + { + "buy": 100, + "crop": 3, + "experience": 12, + "general": 1, + "harvest": 28, + "id": 1017, + "isBuy": 1, + "isVip": 0, + "level": 81, + "name": "一星喇叭水仙", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "7200,14400,25200,36000,46800", + "price": 405, + "sell": 0, + "soil": 0, + "time": 13, + "vipBuy": 0 + }, + { + "buy": 100, + "crop": 3, + "experience": 12, + "general": 1, + "harvest": 28, + "id": 1018, + "isBuy": 1, + "isVip": 0, + "level": 76, + "name": "一星什样锦牡丹", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "7200,14400,25200,36000,46800", + "price": 400, + "sell": 0, + "soil": 0, + "time": 13, + "vipBuy": 0 + }, + { + "buy": 100, + "crop": 3, + "experience": 12, + "general": 1, + "harvest": 28, + "id": 1019, + "isBuy": 1, + "isVip": 0, + "level": 84, + "name": "一星卷丹百合", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "7200,14400,25200,36000,46800", + "price": 408, + "sell": 0, + "soil": 0, + "time": 13, + "vipBuy": 0 + }, + { + "buy": 100, + "crop": 3, + "experience": 12, + "general": 1, + "harvest": 28, + "id": 1020, + "isBuy": 1, + "isVip": 0, + "level": 70, + "name": "一星红富士", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "7200,14400,25200,36000,46800", + "price": 390, + "sell": 0, + "soil": 0, + "time": 13, + "vipBuy": 0 + }, + { + "buy": 100, + "crop": 3, + "experience": 12, + "general": 1, + "harvest": 32, + "id": 1021, + "isBuy": 1, + "isVip": 0, + "level": 64, + "name": "一星白玉霓", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "10800,21600,32400,46800,68400", + "price": 390, + "sell": 0, + "soil": 0, + "time": 19, + "vipBuy": 0 + }, + { + "buy": 100, + "crop": 3, + "experience": 12, + "general": 1, + "harvest": 28, + "id": 1022, + "isBuy": 1, + "isVip": 0, + "level": 49, + "name": "一星百叶蔷薇", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "3600,10800,21600,32400,43200", + "price": 400, + "sell": 0, + "soil": 0, + "time": 12, + "vipBuy": 0 + }, + { + "buy": 100, + "crop": 3, + "experience": 12, + "general": 1, + "harvest": 28, + "id": 1023, + "isBuy": 1, + "isVip": 0, + "level": 58, + "name": "一星巨峰葡萄", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "3600,10800,21600,32400,43200", + "price": 400, + "sell": 0, + "soil": 0, + "time": 12, + "vipBuy": 0 + }, + { + "buy": 100, + "crop": 3, + "experience": 12, + "general": 1, + "harvest": 22, + "id": 1024, + "isBuy": 1, + "isVip": 0, + "level": 40, + "name": "一星荷花蔷薇", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "3600,10800,21600,32400,43200", + "price": 324, + "sell": 0, + "soil": 0, + "time": 12, + "vipBuy": 0 + }, + { + "buy": 100, + "crop": 3, + "experience": 10, + "general": 1, + "harvest": 23, + "id": 1025, + "isBuy": 1, + "isVip": 0, + "level": 28, + "name": "一星书生捧墨", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "3600,10800,21600,32400,43200", + "price": 250, + "sell": 0, + "soil": 0, + "time": 12, + "vipBuy": 0 + }, + { + "buy": 0, + "crop": 1, + "experience": 14, + "general": 1, + "harvest": 50, + "id": 1026, + "isBuy": 1, + "isVip": 1, + "level": 110, + "name": "二星五彩椒", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "14400,28800,46800,64800,86400", + "price": 3, + "sell": 0, + "soil": 0, + "time": 24, + "vipBuy": 38 + }, + { + "buy": 0, + "crop": 1, + "experience": 14, + "general": 1, + "harvest": 43, + "id": 1027, + "isBuy": 1, + "isVip": 1, + "level": 95, + "name": "二星围裙水仙", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "14400,28800,46800,64800,86400", + "price": 3, + "sell": 0, + "soil": 0, + "time": 24, + "vipBuy": 34 + }, + { + "buy": 0, + "crop": 1, + "experience": 14, + "general": 1, + "harvest": 48, + "id": 1028, + "isBuy": 1, + "isVip": 1, + "level": 105, + "name": "二星秦椒", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "14400,28800,46800,64800,86400", + "price": 3, + "sell": 0, + "soil": 0, + "time": 24, + "vipBuy": 36 + }, + { + "buy": 0, + "crop": 1, + "experience": 12, + "general": 1, + "harvest": 42, + "id": 1029, + "isBuy": 1, + "isVip": 1, + "level": 90, + "name": "二星丁香水仙", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "14400,28800,46800,64800,86400", + "price": 3, + "sell": 0, + "soil": 0, + "time": 24, + "vipBuy": 32 + }, + { + "buy": 0, + "crop": 1, + "experience": 14, + "general": 1, + "harvest": 46, + "id": 1030, + "isBuy": 1, + "isVip": 1, + "level": 100, + "name": "二星绿绒蒿", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "14400,28800,46800,64800,86400", + "price": 3, + "sell": 0, + "soil": 0, + "time": 24, + "vipBuy": 35 + }, + { + "buy": 0, + "crop": 1, + "experience": 15, + "general": 1, + "harvest": 55, + "id": 1031, + "isBuy": 1, + "isVip": 1, + "level": 120, + "name": "二星葛巾紫", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "14400,28800,46800,64800,86400", + "price": 3, + "sell": 0, + "soil": 0, + "time": 24, + "vipBuy": 41 + }, + { + "buy": 0, + "crop": 1, + "experience": 14, + "general": 1, + "harvest": 52, + "id": 1032, + "isBuy": 1, + "isVip": 1, + "level": 115, + "name": "二星香水百合", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "14400,28800,46800,64800,86400", + "price": 3, + "sell": 0, + "soil": 0, + "time": 24, + "vipBuy": 39 + }, + { + "buy": 100, + "crop": 3, + "experience": 14, + "general": 1, + "harvest": 33, + "id": 1033, + "isBuy": 1, + "isVip": 0, + "level": 81, + "name": "二星喇叭水仙", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "7200,14400,25200,36000,46800", + "price": 410, + "sell": 0, + "soil": 0, + "time": 13, + "vipBuy": 0 + }, + { + "buy": 100, + "crop": 3, + "experience": 14, + "general": 1, + "harvest": 33, + "id": 1034, + "isBuy": 1, + "isVip": 0, + "level": 76, + "name": "二星什样锦牡丹", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "7200,14400,25200,36000,46800", + "price": 405, + "sell": 0, + "soil": 0, + "time": 13, + "vipBuy": 0 + }, + { + "buy": 100, + "crop": 3, + "experience": 14, + "general": 1, + "harvest": 33, + "id": 1035, + "isBuy": 1, + "isVip": 0, + "level": 84, + "name": "二星卷丹百合", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "7200,14400,25200,36000,46800", + "price": 412, + "sell": 0, + "soil": 0, + "time": 13, + "vipBuy": 0 + }, + { + "buy": 100, + "crop": 3, + "experience": 14, + "general": 1, + "harvest": 33, + "id": 1036, + "isBuy": 1, + "isVip": 0, + "level": 70, + "name": "二星红富士", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "7200,14400,25200,36000,46800", + "price": 392, + "sell": 0, + "soil": 0, + "time": 13, + "vipBuy": 0 + }, + { + "buy": 100, + "crop": 3, + "experience": 14, + "general": 1, + "harvest": 33, + "id": 1037, + "isBuy": 1, + "isVip": 0, + "level": 64, + "name": "二星白玉霓", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "10800,21600,32400,46800,68400", + "price": 390, + "sell": 0, + "soil": 0, + "time": 19, + "vipBuy": 0 + }, + { + "buy": 100, + "crop": 3, + "experience": 14, + "general": 1, + "harvest": 32, + "id": 1038, + "isBuy": 1, + "isVip": 0, + "level": 49, + "name": "二星百叶蔷薇", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "3600,10800,21600,32400,43200", + "price": 410, + "sell": 0, + "soil": 0, + "time": 12, + "vipBuy": 0 + }, + { + "buy": 100, + "crop": 3, + "experience": 14, + "general": 1, + "harvest": 32, + "id": 1039, + "isBuy": 1, + "isVip": 0, + "level": 58, + "name": "二星巨峰葡萄", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "3600,10800,21600,32400,43200", + "price": 420, + "sell": 0, + "soil": 0, + "time": 12, + "vipBuy": 0 + }, + { + "buy": 100, + "crop": 3, + "experience": 13, + "general": 1, + "harvest": 30, + "id": 1040, + "isBuy": 1, + "isVip": 0, + "level": 40, + "name": "二星荷花蔷薇", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "3600,10800,21600,32400,43200", + "price": 400, + "sell": 0, + "soil": 0, + "time": 12, + "vipBuy": 0 + }, + { + "buy": 100, + "crop": 3, + "experience": 11, + "general": 1, + "harvest": 35, + "id": 1041, + "isBuy": 1, + "isVip": 0, + "level": 28, + "name": "二星书生捧墨", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "3600,10800,21600,32400,43200", + "price": 300, + "sell": 0, + "soil": 0, + "time": 12, + "vipBuy": 0 + }, + { + "buy": 9438, + "crop": 2, + "experience": 45, + "general": 1, + "harvest": 35, + "id": 1042, + "isBuy": 1, + "isVip": 0, + "level": 86, + "name": "三星果藤", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "10800,21600,32400,46800,68400", + "price": 166, + "sell": 0, + "soil": 0, + "time": 19, + "vipBuy": 0 + }, + { + "buy": 0, + "crop": 1, + "experience": 14, + "general": 1, + "harvest": 58, + "id": 1043, + "isBuy": 1, + "isVip": 1, + "level": 110, + "name": "三星五彩椒", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "14400,28800,46800,64800,86400", + "price": 4, + "sell": 0, + "soil": 0, + "time": 24, + "vipBuy": 43 + }, + { + "buy": 0, + "crop": 1, + "experience": 14, + "general": 1, + "harvest": 50, + "id": 1044, + "isBuy": 1, + "isVip": 1, + "level": 95, + "name": "三星围裙水仙", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "14400,28800,46800,64800,86400", + "price": 4, + "sell": 0, + "soil": 0, + "time": 24, + "vipBuy": 38 + }, + { + "buy": 0, + "crop": 1, + "experience": 14, + "general": 1, + "harvest": 54, + "id": 1045, + "isBuy": 1, + "isVip": 1, + "level": 105, + "name": "三星秦椒", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "14400,28800,46800,64800,86400", + "price": 4, + "sell": 0, + "soil": 0, + "time": 24, + "vipBuy": 42 + }, + { + "buy": 0, + "crop": 1, + "experience": 14, + "general": 1, + "harvest": 39, + "id": 1046, + "isBuy": 1, + "isVip": 1, + "level": 90, + "name": "三星丁香水仙", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "14400,28800,46800,64800,86400", + "price": 4, + "sell": 0, + "soil": 0, + "time": 24, + "vipBuy": 37 + }, + { + "buy": 0, + "crop": 1, + "experience": 14, + "general": 1, + "harvest": 53, + "id": 1047, + "isBuy": 1, + "isVip": 1, + "level": 100, + "name": "三星绿绒蒿", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "14400,28800,46800,64800,86400", + "price": 4, + "sell": 0, + "soil": 0, + "time": 24, + "vipBuy": 40 + }, + { + "buy": 0, + "crop": 1, + "experience": 15, + "general": 1, + "harvest": 62, + "id": 1048, + "isBuy": 1, + "isVip": 1, + "level": 120, + "name": "三星葛巾紫", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "14400,28800,46800,64800,86400", + "price": 4, + "sell": 0, + "soil": 0, + "time": 24, + "vipBuy": 46 + }, + { + "buy": 0, + "crop": 1, + "experience": 14, + "general": 1, + "harvest": 59, + "id": 1049, + "isBuy": 1, + "isVip": 1, + "level": 115, + "name": "三星香水百合", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "14400,28800,46800,64800,86400", + "price": 4, + "sell": 0, + "soil": 0, + "time": 24, + "vipBuy": 45 + }, + { + "buy": 100, + "crop": 3, + "experience": 14, + "general": 1, + "harvest": 45, + "id": 1050, + "isBuy": 1, + "isVip": 0, + "level": 81, + "name": "三星喇叭水仙", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "7200,14400,25200,36000,46800", + "price": 568, + "sell": 0, + "soil": 0, + "time": 13, + "vipBuy": 0 + }, + { + "buy": 100, + "crop": 3, + "experience": 14, + "general": 1, + "harvest": 45, + "id": 1051, + "isBuy": 1, + "isVip": 0, + "level": 76, + "name": "三星什样锦牡丹", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "7200,14400,25200,36000,46800", + "price": 565, + "sell": 0, + "soil": 0, + "time": 13, + "vipBuy": 0 + }, + { + "buy": 100, + "crop": 3, + "experience": 14, + "general": 1, + "harvest": 45, + "id": 1052, + "isBuy": 1, + "isVip": 0, + "level": 84, + "name": "三星卷丹百合", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "7200,14400,25200,36000,46800", + "price": 570, + "sell": 0, + "soil": 0, + "time": 13, + "vipBuy": 0 + }, + { + "buy": 100, + "crop": 3, + "experience": 14, + "general": 1, + "harvest": 45, + "id": 1053, + "isBuy": 1, + "isVip": 0, + "level": 70, + "name": "三星红富士", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "7200,14400,25200,36000,46800", + "price": 560, + "sell": 0, + "soil": 0, + "time": 13, + "vipBuy": 0 + }, + { + "buy": 100, + "crop": 3, + "experience": 14, + "general": 1, + "harvest": 45, + "id": 1054, + "isBuy": 1, + "isVip": 0, + "level": 64, + "name": "三星白玉霓", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "10800,21600,32400,46800,68400", + "price": 560, + "sell": 0, + "soil": 0, + "time": 19, + "vipBuy": 0 + }, + { + "buy": 100, + "crop": 3, + "experience": 15, + "general": 1, + "harvest": 40, + "id": 1055, + "isBuy": 1, + "isVip": 0, + "level": 49, + "name": "三星百叶蔷薇", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "3600,10800,21600,32400,43200", + "price": 560, + "sell": 0, + "soil": 0, + "time": 12, + "vipBuy": 0 + }, + { + "buy": 100, + "crop": 3, + "experience": 14, + "general": 1, + "harvest": 40, + "id": 1056, + "isBuy": 1, + "isVip": 0, + "level": 58, + "name": "三星巨峰葡萄", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "3600,10800,21600,32400,43200", + "price": 560, + "sell": 0, + "soil": 0, + "time": 12, + "vipBuy": 0 + }, + { + "buy": 100, + "crop": 3, + "experience": 14, + "general": 1, + "harvest": 40, + "id": 1057, + "isBuy": 1, + "isVip": 0, + "level": 40, + "name": "三星荷花蔷薇", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "3600,10800,21600,32400,43200", + "price": 520, + "sell": 0, + "soil": 0, + "time": 12, + "vipBuy": 0 + }, + { + "buy": 100, + "crop": 3, + "experience": 12, + "general": 1, + "harvest": 40, + "id": 1058, + "isBuy": 1, + "isVip": 0, + "level": 28, + "name": "三星书生捧墨", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "3600,10800,21600,32400,43200", + "price": 450, + "sell": 0, + "soil": 0, + "time": 12, + "vipBuy": 0 + }, + { + "buy": 0, + "crop": 1, + "experience": 15, + "general": 1, + "harvest": 65, + "id": 1059, + "isBuy": 1, + "isVip": 1, + "level": 110, + "name": "四星五彩椒", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "14400,28800,46800,64800,86400", + "price": 5, + "sell": 0, + "soil": 0, + "time": 24, + "vipBuy": 49 + }, + { + "buy": 0, + "crop": 1, + "experience": 15, + "general": 1, + "harvest": 56, + "id": 1060, + "isBuy": 1, + "isVip": 1, + "level": 95, + "name": "四星围裙水仙", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "14400,28800,46800,64800,86400", + "price": 5, + "sell": 0, + "soil": 0, + "time": 24, + "vipBuy": 43 + }, + { + "buy": 0, + "crop": 1, + "experience": 15, + "general": 1, + "harvest": 61, + "id": 1061, + "isBuy": 1, + "isVip": 1, + "level": 105, + "name": "四星秦椒", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "14400,28800,46800,64800,86400", + "price": 5, + "sell": 0, + "soil": 0, + "time": 24, + "vipBuy": 47 + }, + { + "buy": 0, + "crop": 1, + "experience": 15, + "general": 1, + "harvest": 54, + "id": 1062, + "isBuy": 1, + "isVip": 1, + "level": 90, + "name": "四星丁香水仙", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "14400,28800,46800,64800,86400", + "price": 5, + "sell": 0, + "soil": 0, + "time": 24, + "vipBuy": 41 + }, + { + "buy": 0, + "crop": 1, + "experience": 15, + "general": 1, + "harvest": 59, + "id": 1063, + "isBuy": 1, + "isVip": 1, + "level": 100, + "name": "四星绿绒蒿", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "14400,28800,46800,64800,86400", + "price": 5, + "sell": 0, + "soil": 0, + "time": 24, + "vipBuy": 45 + }, + { + "buy": 0, + "crop": 1, + "experience": 16, + "general": 1, + "harvest": 70, + "id": 1064, + "isBuy": 1, + "isVip": 1, + "level": 120, + "name": "四星葛巾紫", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "14400,28800,46800,64800,86400", + "price": 5, + "sell": 0, + "soil": 0, + "time": 24, + "vipBuy": 52 + }, + { + "buy": 0, + "crop": 1, + "experience": 15, + "general": 1, + "harvest": 67, + "id": 1065, + "isBuy": 1, + "isVip": 1, + "level": 115, + "name": "四星香水百合", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "14400,28800,46800,64800,86400", + "price": 5, + "sell": 0, + "soil": 0, + "time": 24, + "vipBuy": 50 + }, + { + "buy": 100, + "crop": 3, + "experience": 15, + "general": 1, + "harvest": 50, + "id": 1066, + "isBuy": 1, + "isVip": 0, + "level": 81, + "name": "四星喇叭水仙", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "7200,14400,25200,36000,46800", + "price": 584, + "sell": 0, + "soil": 0, + "time": 13, + "vipBuy": 0 + }, + { + "buy": 100, + "crop": 3, + "experience": 14, + "general": 1, + "harvest": 45, + "id": 1067, + "isBuy": 1, + "isVip": 0, + "level": 76, + "name": "四星什样锦牡丹", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "7200,14400,25200,36000,46800", + "price": 565, + "sell": 0, + "soil": 0, + "time": 13, + "vipBuy": 0 + }, + { + "buy": 100, + "crop": 3, + "experience": 15, + "general": 1, + "harvest": 50, + "id": 1068, + "isBuy": 1, + "isVip": 0, + "level": 84, + "name": "四星卷丹百合", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "7200,14400,25200,36000,46800", + "price": 586, + "sell": 0, + "soil": 0, + "time": 13, + "vipBuy": 0 + }, + { + "buy": 100, + "crop": 3, + "experience": 15, + "general": 1, + "harvest": 50, + "id": 1069, + "isBuy": 1, + "isVip": 0, + "level": 70, + "name": "四星红富士", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "7200,14400,25200,36000,46800", + "price": 576, + "sell": 0, + "soil": 0, + "time": 13, + "vipBuy": 0 + }, + { + "buy": 100, + "crop": 3, + "experience": 15, + "general": 1, + "harvest": 50, + "id": 1070, + "isBuy": 1, + "isVip": 0, + "level": 64, + "name": "四星白玉霓", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "10800,21600,32400,46800,68400", + "price": 575, + "sell": 0, + "soil": 0, + "time": 19, + "vipBuy": 0 + }, + { + "buy": 100, + "crop": 3, + "experience": 15, + "general": 1, + "harvest": 55, + "id": 1071, + "isBuy": 1, + "isVip": 0, + "level": 49, + "name": "四星百叶蔷薇", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "3600,10800,21600,32400,43200", + "price": 575, + "sell": 0, + "soil": 0, + "time": 12, + "vipBuy": 0 + }, + { + "buy": 100, + "crop": 3, + "experience": 15, + "general": 1, + "harvest": 55, + "id": 1072, + "isBuy": 1, + "isVip": 0, + "level": 58, + "name": "四星巨峰葡萄", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "3600,10800,21600,32400,43200", + "price": 575, + "sell": 0, + "soil": 0, + "time": 12, + "vipBuy": 0 + }, + { + "buy": 100, + "crop": 3, + "experience": 14, + "general": 1, + "harvest": 55, + "id": 1073, + "isBuy": 1, + "isVip": 0, + "level": 40, + "name": "四星荷花蔷薇", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "3600,10800,21600,32400,43200", + "price": 560, + "sell": 0, + "soil": 0, + "time": 12, + "vipBuy": 0 + }, + { + "buy": 100, + "crop": 3, + "experience": 12, + "general": 1, + "harvest": 50, + "id": 1074, + "isBuy": 1, + "isVip": 0, + "level": 28, + "name": "四星书生捧墨", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "3600,10800,21600,32400,43200", + "price": 600, + "sell": 0, + "soil": 0, + "time": 12, + "vipBuy": 0 + }, + { + "buy": 0, + "crop": 1, + "experience": 15, + "general": 1, + "harvest": 72, + "id": 1075, + "isBuy": 1, + "isVip": 1, + "level": 110, + "name": "五星五彩椒", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "14400,28800,46800,64800,86400", + "price": 6, + "sell": 0, + "soil": 0, + "time": 24, + "vipBuy": 54 + }, + { + "buy": 0, + "crop": 1, + "experience": 15, + "general": 1, + "harvest": 62, + "id": 1076, + "isBuy": 1, + "isVip": 1, + "level": 95, + "name": "五星围裙水仙", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "14400,28800,46800,64800,86400", + "price": 6, + "sell": 0, + "soil": 0, + "time": 24, + "vipBuy": 48 + }, + { + "buy": 0, + "crop": 1, + "experience": 15, + "general": 1, + "harvest": 68, + "id": 1077, + "isBuy": 1, + "isVip": 1, + "level": 105, + "name": "五星秦椒", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "14400,28800,46800,64800,86400", + "price": 6, + "sell": 0, + "soil": 0, + "time": 24, + "vipBuy": 52 + }, + { + "buy": 0, + "crop": 1, + "experience": 15, + "general": 1, + "harvest": 60, + "id": 1078, + "isBuy": 1, + "isVip": 1, + "level": 90, + "name": "五星丁香水仙", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "14400,28800,46800,64800,86400", + "price": 6, + "sell": 0, + "soil": 0, + "time": 24, + "vipBuy": 46 + }, + { + "buy": 0, + "crop": 1, + "experience": 15, + "general": 1, + "harvest": 66, + "id": 1079, + "isBuy": 1, + "isVip": 1, + "level": 100, + "name": "五星绿绒蒿", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "14400,28800,46800,64800,86400", + "price": 6, + "sell": 0, + "soil": 0, + "time": 24, + "vipBuy": 50 + }, + { + "buy": 0, + "crop": 1, + "experience": 16, + "general": 1, + "harvest": 78, + "id": 1080, + "isBuy": 1, + "isVip": 1, + "level": 120, + "name": "五星葛巾紫", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "14400,28800,46800,64800,86400", + "price": 6, + "sell": 0, + "soil": 0, + "time": 24, + "vipBuy": 58 + }, + { + "buy": 0, + "crop": 1, + "experience": 15, + "general": 1, + "harvest": 74, + "id": 1081, + "isBuy": 1, + "isVip": 1, + "level": 115, + "name": "五星香水百合", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "14400,28800,46800,64800,86400", + "price": 6, + "sell": 0, + "soil": 0, + "time": 24, + "vipBuy": 56 + }, + { + "buy": 100, + "crop": 3, + "experience": 15, + "general": 1, + "harvest": 51, + "id": 1082, + "isBuy": 1, + "isVip": 0, + "level": 81, + "name": "五星喇叭水仙", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "7200,14400,25200,36000,46800", + "price": 642, + "sell": 0, + "soil": 0, + "time": 13, + "vipBuy": 0 + }, + { + "buy": 100, + "crop": 3, + "experience": 15, + "general": 1, + "harvest": 51, + "id": 1083, + "isBuy": 1, + "isVip": 0, + "level": 76, + "name": "五星什样锦牡丹", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "7200,14400,25200,36000,46800", + "price": 640, + "sell": 0, + "soil": 0, + "time": 13, + "vipBuy": 0 + }, + { + "buy": 100, + "crop": 3, + "experience": 15, + "general": 1, + "harvest": 51, + "id": 1084, + "isBuy": 1, + "isVip": 0, + "level": 84, + "name": "五星卷丹百合", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "7200,14400,25200,36000,46800", + "price": 644, + "sell": 0, + "soil": 0, + "time": 13, + "vipBuy": 0 + }, + { + "buy": 100, + "crop": 3, + "experience": 15, + "general": 1, + "harvest": 51, + "id": 1085, + "isBuy": 1, + "isVip": 0, + "level": 70, + "name": "五星红富士", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "7200,14400,25200,36000,46800", + "price": 635, + "sell": 0, + "soil": 0, + "time": 13, + "vipBuy": 0 + }, + { + "buy": 100, + "crop": 3, + "experience": 15, + "general": 1, + "harvest": 51, + "id": 1086, + "isBuy": 1, + "isVip": 0, + "level": 64, + "name": "五星白玉霓", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "10800,21600,32400,46800,68400", + "price": 630, + "sell": 0, + "soil": 0, + "time": 19, + "vipBuy": 0 + }, + { + "buy": 100, + "crop": 3, + "experience": 15, + "general": 1, + "harvest": 56, + "id": 1087, + "isBuy": 1, + "isVip": 0, + "level": 49, + "name": "五星百叶蔷薇", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "3600,10800,21600,32400,43200", + "price": 620, + "sell": 0, + "soil": 0, + "time": 12, + "vipBuy": 0 + }, + { + "buy": 100, + "crop": 3, + "experience": 15, + "general": 1, + "harvest": 56, + "id": 1088, + "isBuy": 1, + "isVip": 0, + "level": 58, + "name": "五星巨峰葡萄", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "3600,10800,21600,32400,43200", + "price": 630, + "sell": 0, + "soil": 0, + "time": 12, + "vipBuy": 0 + }, + { + "buy": 100, + "crop": 3, + "experience": 15, + "general": 1, + "harvest": 56, + "id": 1089, + "isBuy": 1, + "isVip": 0, + "level": 40, + "name": "五星荷花蔷薇", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "3600,10800,21600,32400,43200", + "price": 600, + "sell": 0, + "soil": 0, + "time": 12, + "vipBuy": 0 + }, + { + "buy": 100, + "crop": 3, + "experience": 13, + "general": 1, + "harvest": 50, + "id": 1090, + "isBuy": 1, + "isVip": 0, + "level": 28, + "name": "五星书生捧墨", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "3600,10800,21600,32400,43200", + "price": 650, + "sell": 0, + "soil": 0, + "time": 12, + "vipBuy": 0 + }, + { + "buy": 1360, + "crop": 4, + "experience": 19, + "general": 1, + "harvest": 48, + "id": 1091, + "isBuy": 1, + "isVip": 0, + "level": 20, + "name": "五星潜水镜", + "offsetH": 0, + "offsetW": 0, + "offsetX": 0, + "offsetY": 0, + "phase": "21600,43200,64800,90000,115200", + "price": 35, + "sell": 0, + "soil": 0, + "time": 32, + "vipBuy": 0 + } + ], + "schema": 1 +} diff --git a/docs/catalogue.md b/docs/catalogue.md new file mode 100644 index 0000000..92b9aa9 --- /dev/null +++ b/docs/catalogue.md @@ -0,0 +1,114 @@ +# 作物目录独立维护与发布 + +`catalogue/source/` 是日常维护的正式来源,不再读取 Farm 仓库或旧作物库。 +首次迁出保留 202 条作物的全部业务字段、768 张图片的原始字节及现有布局。 +原 `assets.zip` 和小型 `land-soils.zip` 字节不变,旧迁移基线保持原样。 + +## 源目录 + +- `plants.json`:根对象仅含 `schema: 1` 和 `plants` 数组。 +- `metadata.json`:维护画布、布局、定位、panel 等绘图配置;发布工具重建 + `plants` 和 `images`,不要手工修改这两个生成字段。 +- `images/<原 ZIP 路径>`:PNG/JPEG 等原始图片,每个文件对应同名 ZIP 成员。 +- `land-soils.zip`:精确包含 `soil/红土地.png`、`soil/黑土地.png`、 + `soil/金土地.png` 三张可解码图片。 + +作物 `id` 为永久编号,不能重排、复用、删除或更名。名称唯一且不超过 +128 字符,不能为 `.`、`..` 或包含 `/`、`\`。数值仅允许 64 位有符号 +范围内非负整数,`id`、`time`、`crop`、 +`harvest` 必须为正;`time` 为小时,转换为秒仍须在范围内。 +`level/buy/vipBuy/experience/price` 分别控制等级、种子普通币价格、点券价格、 +经验和收获物售价。`isVip`、`isBuy` 和可选 `enabled` 仅允许 0 或 1; +可选 `crop_type` 默认为 1,只有类型 1 可新种植。 + +`phase` 为逗号分隔的正整数秒值,按首次出现去重后须严格递增且至少两项; +它与 `general/offsetH/offsetW/offsetX/offsetY` 一并生成展示元数据。 +其他已有字段原样保留。图片原有缺图占位行为保留,但不能删除已经发布的 +图片路径;新增作物应同时补充所需阶段图片。 + +发布工具独立校验完整展示契约:30 个地块位置、schema 4 作物放置、 +面板字段及贴图、虫动画、六主题装饰、画布与图片尺寸,以及所有必需 +背景和通用图片引用。schema 不接受布尔值,坐标不接受布尔值或非有限数。 + +## 编辑、检查、生成 + +需要 Python 3.10+ 和 Pillow;发布脚本不安装依赖、不访问网络或玩家数据库。 +从本仓库根目录运行: + +```text +python scripts/prepare_catalogue.py --source catalogue/source --output catalogue --version catalogue-20261026-1 --check +python -m unittest discover -s tests -p test_prepare_catalogue.py +``` + +`--check` 只读核对源与当前最新发布版本,源已修改时会拒绝,且不会生成 +目录或替换清单。变更后先运行测试,再显式生成: + +```text +python scripts/prepare_catalogue.py --source catalogue/source --output catalogue --version catalogue-20261027-1 +python scripts/prepare_catalogue.py --source catalogue/source --output catalogue --version catalogue-20261027-1 --check +``` + +例如把已有条目的 `price` 改为新售价,或新增从未使用过的 ID;不要把 +旧 ID 改成另一个作物。`isBuy=0` 表示禁售,`enabled=0` 禁止新购买和新播种。 +生成时对照当前已校验版本,拒绝删除/更名旧 ID 或丢失已有图片路径。 + +产物位于 `catalogue/releases//`,包含清单和精确四个文件: +`plants.json`、`metadata.json`、`assets.zip`、`land-soils.zip`。 +生成完整目录后,最后原子替换 `catalogue/manifest.json` 发现入口;失败 +不会切换最新版本。已存在版本必须逐字节相同,不能原地覆盖。相同内容 +重复生成须沿用相同版本标签;仅更换标签不能覆盖相同内容的历史清单。 +已经发布的标签也不能用于内容不同的新版本,修改内容时必须使用新标签。 + +发布操作按输出目录同时使用进程内线程锁和系统文件锁,锁覆盖读取最新 +版本、兼容性检查与最终替换,防止并发旧发布删除刚新增的 ID。系统锁在 +进程退出时自动释放;`.publish.lock` 是应保留的空状态锁文件,不应删除, +仓库已忽略它。`--check` 保持只读,不创建或修改锁文件。 + +ZIP 使用固定成员顺序、2020-01-01 时间、Unix 0644 文件权限和 STORED 格式, +保留图片原始字节。输出不依赖文件修改时间或 Farm 相邻工作区。 +临时 `.prepare-*` 目录不是有效发布版本,可在确认没有发布进程后清理。 + +## 清单协议与 HTTP + +清单严格包含 `schema/version/release/files`:schema 固定 1;version 为 +1~64 个字母数字或 `._-`;files 精确对应四文件,每项仅含正整数 +`size_bytes` 和 64 位小写 `sha256`。release 为 files 对象经键排序、紧凑 +UTF-8 JSON 序列化后的 SHA256,不接受 URL 或自定义路径。 + +清单最大 16 KiB;plants 2 MiB;metadata 4 MiB;各 ZIP 64 MiB;两个 ZIP +解压后图片总量不超过 256 MiB。源发布工具校验业务数据与图片,Rust 服务 +启动校验各历史清单关系、文件大小和摘要;客户端也校验完整版本。 +这些摘要检测不一致和损坏,不构成发布账号被接管时的真实性保证。 + +设置 `FARM_CATALOGUE_DIR=./catalogue` 后,服务启动加载最新清单及所有 +历史版本为不可变内存快照: + +| 接口 | 行为 | +|---|---| +| `GET /v1/catalogue/manifest.json` | 最新清单,`no-cache`,支持 ETag | +| `GET /v1/catalogue/releases/{release}/{file}` | 精确白名单四文件和该版本 `manifest.json`;一年 immutable 缓存,支持 ETag | + +接口公开只读,不需要用户资料接口令牌。未配置目录时返回 503;未知版本 +和文件返回 404;无效目录或摘要导致启动失败,并写入既有日志。 +运行中不重读磁盘,发布后须重启 Service。旧素材/字体接口及用户资料鉴权 +保持独立。所有历史版本都会驻留内存,部署前须按版本数量规划内存。 + +GitHub/Gitea 同样从本仓库 raw 根路径的 `catalogue/manifest.json` 和 +`catalogue/releases//` 获取相同字节。应先发布完整版本目录, +最后发布发现入口,保留历史版本;本工具仅准备本地文件,不执行提交、 +推送或部署。真实远端下载与生产重启需在发布后另行验证。 + +## 重启生效与兼容回滚 + +机器人仅在启动时检查一次更新,同一次运行使用一个完整版本,失败优先 +回退已校验缓存,再回退插件初始版本。若选定版本无法覆盖玩家已持有或 +已种植的 ID,应拒绝业务初始化,恢复兼容版本后再启动,不能清空玩家数据。 + +新播种使用本次启动目录;已经播种的地块继续使用原结算快照。出售使用 +当前目录售价,调价也会影响旧库存。回滚应从当前源发布一个新兼容版本: +恢复旧数值,但保留期间新增的全部 ID、名称及图片,需要下架时使用禁售/ +禁播字段。不能把最新清单直接退回缺少新 ID 的老版本。 + +Farm 随包的轻量 bootstrap 由显式同步工具从本地完整 release 刷新,日常 +Service 发布不要求同时改 Farm;三个机器人分发包继续不捆绑大型素材 ZIP。 +字体保持独立发布,不纳入四文件目录版本。 diff --git a/docs/crop-catalogue-design.md b/docs/crop-catalogue-design.md new file mode 100644 index 0000000..db111c7 --- /dev/null +++ b/docs/crop-catalogue-design.md @@ -0,0 +1,126 @@ +# 作物数据与素材独立维护设计 + +日期:2026-10-26。状态:用户已确认,实施中;本地完成后记录验证证据。 + +## 目标与已确认决定 + +- 作物数值及可维护素材的正式来源迁入 `farm_service`,不再从农场插件的 + `legacy` 基线生成日常发布数据。 +- 用户已明确选择:机器人仅在启动时检查更新。运行中不定时更新, + 本次启动选定的版本持续使用到关闭。 +- 真寻、NoneBot、AstrBot 共用同一加载实现,沿用已有 Github、Gitea、 + farm_service 资源源选择与独立的服务基础地址配置。 +- 保留玩家数据库、地块中保存的作物结算快照及旧迁移基线。 +- 本轮只完成本地实现、验证和维护说明;提交、推送、部署及安装另行授权。 + +## 方案取舍 + +1. 启动时检查完整资源版本:用户最终选择。可以独立发布作物更新, + 同一次机器人运行期间不切换规则,生命周期与缓存管理较简单。 +2. 运行中定时更新:用户已改为不采用。需要额外处理交易和渲染任务 + 跨版本切换、任务取消与长期更新调度。 +3. 只迁移维护源、插件固定版本:不采用。更新数值仍需重新发插件。 + +## 正式来源与发布产物 + +- Service 仓库保存可编辑的作物目录、图片源和绘图配置。旧目录中的 + 202 条作物及现有图片仅作为首次迁出的来源;迁出后不修改旧基线。 +- 作物保留有业务意义的字段;移除将旧数据库摘要当成日常维护来源 + 的依赖。新增数据协议说明、字段校验和维护示例。 +- 发布工具由上述来源可复现生成 `plants.json`、`metadata.json` 和 + `assets.zip`、`land-soils.zip`,以及绑定四者的发布清单。字体继续单独维护。 +- 清单包含协议版本、发布版本和各文件的大小、SHA256;下载路径固定, + 不接受玩家输入路径。每个发布版本存于不可变版本目录,最新清单 + 仅作为版本发现入口,保留历史版本供旧客户端和回滚使用。 +- GitHub/Gitea 从 Service 仓库读取公开文件;Service 提供等价的公开 + 只读清单及版本文件接口,不复用用户资料接口令牌。 +- 发布工具先生成并校验完整版本,最后才更新最新版本指针。 + 发布后的版本目录不得原地覆盖;修正内容应生成新版本。 + +## 插件启动与失败处理 + +1. 日志初始化后、玩家数据库迁移和业务服务初始化前,读取本地当前版本。 +2. 在线检查所选资源源的最新清单,限制大小、超时及 HTTPS 地址格式; + 不自动跨源下载,不请求占位 Service 地址。 +3. 若版本未变化,复核并复用本地内容;否则下载缺少文件至独立临时目录。 +4. 校验协议、大小、SHA256、作物业务字段、唯一编号及名称、展示配置 + 与目录对应关系、ZIP 成员集合和图片内容。任何一项失败都不切换版本。 +5. 校验全部通过后,以不可变目录保存候选版本,原子更新本地当前版本 + 指针。业务目录、绘图元数据和图片始终取自同一完整版本。 +6. 在线检查或下载失败时使用当前已验证缓存;缓存缺失或损坏时使用 + 随插件生成的初始作物目录与匹配展示配置。初始版本图片仍按已有 + 外部资源策略加载;完全离线且没有图片缓存时提供文字功能。 +7. 本次运行不再次切换目录,不创建更新定时任务。网络操作在后台线程 + 执行;超时、拒绝原因、采用版本和回退来源写入日志,不记录凭据。 + +启动前须确认选定目录覆盖现有玩家库使用的作物 ID。若缓存损坏且 +初始目录不包含玩家已持有的新作物,应明确拒绝业务初始化并提示恢复 +兼容版本;不得清除库存、替换 ID 或伪装成正常启动。空数据目录仍可 +通过初始目录离线启动。读取玩家库仅用于兼容性检查,不导出真实数据。 + +最新清单通过已有发布方 HTTPS 地址获取,摘要用于一致性和损坏检测, +不宣称其可防御发布账号或源站被接管。未知协议版本必须拒绝并回退。 + +## 存量兼容与字段约束 + +- 作物 ID 永不重排、复用或更换含义。新增作物使用从未使用过的新 ID。 +- 本轮不支持删除或更名已有作物;发布工具对照前一版本拒绝这类操作。 + 下架用 `isBuy=0`,禁止新购买和新播种用 `enabled=0`,保留旧库存结算。 +- 已播种地块继续使用数据库中的不可变作物定义,更新不重写成熟时间、 + 产量、经验、季数和再生长规则;新播种使用本次启动加载的目录。 +- 出售使用当前目录价格,包含更新前已存在的库存。这沿用现有行为, + 必须在维护说明中提示调价影响。 +- 新版本应保留已有作物的展示资源引用及存量绘制所需阶段图片; + 原有缺图占位行为保留,不要求首次迁移凭空补齐历史缺图。 +- 回滚采用“发布新的兼容版本恢复旧数值”,保留期间新增的全部 ID + 及其图片,必要时禁售或禁播。不能将最新指针直接退回缺少新增作物 + 的历史版本。客户端对照本地已验证版本拒绝删除和更名,避免旧库存 + 无法查询或出售。这是实现者根据稳定 ID 约束提出的回滚方案。 +- 不执行玩家数据清理、重置、隐式批量迁移或远程管理写入。 + +## 代码和 CI 调整 + +- Service 实现发布文件校验、公开只读分发与可重复构建工具;提供独立 + 源目录和更新步骤,日常维护不要求旁边存在 Farm 开发仓库。 +- Farm 核心继续只处理已校验的离线目录,不增加网络或 Pillow 依赖。 +- 共享适配层负责启动下载、完整版本选择和故障回退;渲染器支持传入 + 同版本元数据,避免继续强制读取插件内固定 `metadata.json`。 +- Farm 保留一套可复现的初始数据产物,提供显式刷新初始版本的工具; + CI 校验该版本自身一致性,不访问生产最新数据,不要求相邻 Service + 仓库,也不再要求日常目录与旧 `plant.db` 字节导出一致。 +- 旧基线完整性与迁移测试继续独立运行;不能通过刷新基线哈希来放行 + 新作物。三个框架打包包含共享加载模块及必要初始数据,继续不捆绑 + 大型 `assets.zip` 或字体 ZIP。 + +## 验收场景 + +1. 首次迁出作物数值、图片与现有版本一致,旧基线保持原样。 +2. 在 Service 正式来源新增作物或调整数值,发布工具生成有效新版本; + 不修改 Farm 业务源码或旧基线,重启测试运行实例即可加载。 +3. 一次启动只采用一个完整版本;文件混用、摘要错误、非法字段、未知 + 协议、删除/复用旧 ID 等情况被拒绝,当前缓存不受损。 +4. 网络超时、404、资源源不可用时优先复用已验证缓存;无缓存时初始 + 目录仍能提供文字业务,图片不可用有明确日志。 +5. 旧种植快照结算不变,新播种使用新规则,旧库存按当前价格出售。 + 更新后新增作物已进入库存时,缺少该 ID 的回滚版本会被拒绝; + 兼容回滚保留该 ID。缓存丢失且初始目录不兼容时拒绝业务初始化。 +6. Service 与 GitHub/Gitea 使用同样的发布内容;历史版本可读取,未知 + 路径和版本拒绝,用户资料鉴权及字体分发行为保持有效。 +7. 三框架包与离线 CI 通过,不依赖真实远端或相邻开发仓库;提供 + “编辑—检查—生成—发布—重启生效—回滚”的维护说明。 + +## 实施与验证边界 + +使用 Python 标准库为主的共享下载与缓存,沿用 Rust/Axum 服务结构。 +开发测试使用临时目录和人工测试数据,不访问真实玩家库或启动机器人。 +覆盖发布生成、HTTP 路由、异常缓存、并发写入、规则快照及三端打包; +Rust 执行格式、测试和静态检查,Python 执行针对性与最终离线检查。 +真实 GitHub/Gitea 发布、生产下载、Service 部署及宿主消息验证不作为 +本地通过的结论,单独列出尚未执行事项。 + +## 实施决定 + +- 用户已确认本设计作为实施与验收依据,采用当前工作区,不提交、合并或推送。 +- 实施前重新查询 Comet,返回无可恢复的 active change,未强建额外工作流。 +- Service 已迁出独立源并生成初始四文件版本,提供启动校验和公开只读分发; + 维护步骤见 `catalogue.md`。跨端最终验证由实施计划统一记录。 diff --git a/scripts/__pycache__/catalogue_validation.cpython-312.pyc b/scripts/__pycache__/catalogue_validation.cpython-312.pyc new file mode 100644 index 0000000..9ba846d Binary files /dev/null and b/scripts/__pycache__/catalogue_validation.cpython-312.pyc differ diff --git a/scripts/__pycache__/prepare_catalogue.cpython-312.pyc b/scripts/__pycache__/prepare_catalogue.cpython-312.pyc new file mode 100644 index 0000000..4a2f935 Binary files /dev/null and b/scripts/__pycache__/prepare_catalogue.cpython-312.pyc differ diff --git a/scripts/__pycache__/publication_lock.cpython-312.pyc b/scripts/__pycache__/publication_lock.cpython-312.pyc new file mode 100644 index 0000000..8e616dc Binary files /dev/null and b/scripts/__pycache__/publication_lock.cpython-312.pyc differ diff --git a/scripts/catalogue_validation.py b/scripts/catalogue_validation.py new file mode 100644 index 0000000..364bf95 --- /dev/null +++ b/scripts/catalogue_validation.py @@ -0,0 +1,138 @@ +"""Independent Service-side render contract; never imports a Farm checkout.""" + +import math +from pathlib import PurePosixPath + +SOIL_MEMBERS = {"soil/红土地.png", "soil/黑土地.png", "soil/金土地.png"} +REQUIRED_IMAGES = {"webgl/seed.png", "webgl/wither.png", "background/ripe.png", + "soil/草土地.png", "soil/普通土地.png"} + + +def numbers(values, length): + if (type(values) is not list or len(values) != length + or any(type(v) not in (int, float) or abs(v) > 10000000 + or not math.isfinite(v) for v in values)): + raise ValueError("invalid render coordinates") + return values + + +def image_size(values): + numbers(values, 2) + if (any(type(v) is not int or not 0 < v <= 8192 for v in values) + or values[0] * values[1] > 32 * 1024 * 1024): + raise ValueError("invalid image dimensions") + + +def rectangle(values): + numbers(values, 4) + if values[2] <= 0 or values[3] <= 0: + raise ValueError("invalid render rectangle") + + +def safe_member(name): + if (not isinstance(name, str) or not name or len(name) > 512 + or "\\" in name or ":" in name): + raise ValueError("invalid image path") + path = PurePosixPath(name) + if path.is_absolute() or any(p in ("", ".", "..") for p in name.split("/")): + raise ValueError("invalid image path") + return name + + +def validate_metadata(value, rows): + """Validate every renderer-required field; keep legacy phase placeholders.""" + try: + if type(value["schema"]) is not int or value["schema"] != 1: + raise ValueError("unknown render metadata schema") + image_size(value["canvas"]) + image_size(value["soil_size"]) + if type(value["positions"]) is not list or len(value["positions"]) != 30: + raise ValueError("expected 30 plot positions") + for position in value["positions"]: + numbers([position["x"], position["y"]], 2) + images = value["images"] + if type(images) is not dict or not 0 < len(images) <= 10000: + raise ValueError("invalid image manifest") + for name, item in images.items(): + safe_member(name) + image_size(item["size"]) + checksum = item["sha256"] + if (not isinstance(checksum, str) or len(checksum) != 64 + or any(c not in "0123456789abcdef" for c in checksum)): + raise ValueError("invalid image checksum") + plants = value["plants"] + if type(plants) is not dict or set(plants) != {row["name"] for row in rows}: + raise ValueError("catalogue and render plants differ") + for row in rows: + if plants[row["name"]]["phase"] != row["phase"]: + raise ValueError("catalogue and render phases differ") + placement = value["placement"] + if (type(placement["schema"]) is not int or placement["schema"] != 4 + or placement["mode"] != "visible_contact_center"): + raise ValueError("unknown crop placement") + for key in ("common_scale", "growth_scale", "reference_soil_height", + "reference_soil_width"): + numbers([placement[key]], 1) + if placement[key] <= 0: + raise ValueError("invalid crop scale") + numbers([placement["contact_alpha_threshold"]], 1) + numbers([placement["contact_band_fraction"]], 1) + if (not 0 <= placement["contact_alpha_threshold"] <= 255 + or not 0 < placement["contact_band_fraction"] <= 1): + raise ValueError("invalid ground contact rule") + matrix = placement["scene_transform"] + if type(matrix) is not list or len(matrix) != 2: + raise ValueError("invalid scene transform") + a, b = numbers(matrix[0], 2) + c, d = numbers(matrix[1], 2) + if abs(a * d - b * c) < 1e-8: + raise ValueError("degenerate scene transform") + pest = value["pest"] + image_size(pest["display_size"]) + frames = pest["frames"] + if (type(frames) is not list or len(frames) < 3 + or len(set(frames)) != len(frames)): + raise ValueError("invalid pest frames") + if any(name not in images for name in frames): + raise ValueError("missing pest image") + if type(pest["positions"]) is not list or len(pest["positions"]) < 3: + raise ValueError("missing pest positions") + for position in pest["positions"]: + numbers(position, 2) + panel = value["panel"] + image_size(panel["reference_canvas"]) + rectangle(panel["avatar"]) + fields = {"name", "experience", "level", "point", "vip_point"} + if (type(panel["fields"]) is not list + or {entry["field"] for entry in panel["fields"]} != fields): + raise ValueError("invalid panel fields") + for entry in panel["fields"]: + rectangle(entry["rect"]) + numbers(entry["color"], 3) + if (any(not 0 <= v <= 255 for v in entry["color"]) + or type(entry["alignment"]) is not int + or entry["alignment"] not in (3, 4)): + raise ValueError("invalid panel text") + if type(panel["sprites"]) is not list: + raise ValueError("invalid panel sprites") + for entry in panel["sprites"]: + rectangle(entry["rect"]) + if entry["sprite"] not in images: + raise ValueError("missing panel sprite") + if set(value["decorations"]) != {"default", "spring", "summer", + "autumn", "winter", "bee"}: + raise ValueError("invalid decoration themes") + for entries in value["decorations"].values(): + if type(entries) is not list: + raise ValueError("invalid decorations") + for entry in entries: + numbers(entry["position"], 2) + numbers(entry["size"], 2) + if (min(entry["size"]) <= 0 + or entry["layer"] not in ("background", "foreground") + or entry["sprite"] not in images): + raise ValueError("invalid decoration") + if not REQUIRED_IMAGES <= set(images): + raise ValueError("missing required farm sprite") + except (KeyError, TypeError, IndexError, AttributeError) as error: + raise ValueError("invalid render metadata") from error diff --git a/scripts/prepare_catalogue.py b/scripts/prepare_catalogue.py new file mode 100644 index 0000000..320e193 --- /dev/null +++ b/scripts/prepare_catalogue.py @@ -0,0 +1,280 @@ +"""Build immutable crop releases from this repository's independent source.""" + +import argparse +import hashlib +from io import BytesIO +import json +import os +from pathlib import Path +import re +import shutil +import tempfile +import zipfile + +from PIL import Image + +from catalogue_validation import SOIL_MEMBERS, image_size, safe_member, validate_metadata +from publication_lock import publication_lock + +LIMITS = {"plants.json": 2 * 1024**2, "metadata.json": 4 * 1024**2, + "assets.zip": 64 * 1024**2, "land-soils.zip": 64 * 1024**2} +MAX_EXPANDED = 256 * 1024**2 +MAX_VALUE = 2**63 - 1 +DISPLAY = ("general", "offsetH", "offsetW", "offsetX", "offsetY", "phase") + + +def json_bytes(value): + return (json.dumps(value, ensure_ascii=False, sort_keys=True, + indent=2, allow_nan=False) + "\n").encode("utf-8") + + +def digest(content): + return hashlib.sha256(content).hexdigest() + + +def read_bounded(path, maximum): + with path.open("rb") as stream: + content = stream.read(maximum + 1) + if not content or len(content) > maximum: + raise ValueError("empty or oversized file: " + path.name) + return content + + +def validate_zip(content): + total = 0 + names = set() + with zipfile.ZipFile(BytesIO(content)) as archive: + for info in archive.infolist(): + safe_member(info.filename) + if (info.filename in names or info.is_dir() or info.flag_bits & 1 + or info.file_size > 32 * 1024**2 + or (info.external_attr >> 16) & 0o170000 == 0o120000): + raise ValueError("invalid ZIP member") + names.add(info.filename) + total += info.file_size + if total > MAX_EXPANDED: + raise ValueError("ZIP expanded size exceeds limit") + picture = archive.read(info) + with Image.open(BytesIO(picture)) as image: + image_size(list(image.size)) + image.verify() + if names != SOIL_MEMBERS: + raise ValueError("soil ZIP requires exactly the three soil sprites") + return total + + +def validate_plants(document): + if (not isinstance(document, dict) or type(document.get("schema")) is not int + or document["schema"] != 1 or set(document) != {"schema", "plants"} + or not isinstance(document["plants"], list) or not document["plants"]): + raise ValueError("invalid plants document") + identities, names = {}, set() + for row in document["plants"]: + if not isinstance(row, dict): + raise ValueError("invalid plant") + for key in ("id", "level", "buy", "isVip", "vipBuy", "experience", + "harvest", "price", "time", "crop"): + if type(row.get(key)) is not int or not 0 <= row[key] <= MAX_VALUE: + raise ValueError("invalid plant integer: " + key) + if any(row[key] < 1 for key in ("id", "harvest", "time", "crop")): + raise ValueError("invalid positive plant integer") + if row["time"] * 3600 > MAX_VALUE: + raise ValueError("growth seconds exceed client domain limit") + for key in ("isVip", "isBuy", "enabled"): + if type(row.get(key, 1)) is not int or row.get(key, 1) not in (0, 1): + raise ValueError("invalid plant flag") + if (type(row.get("crop_type", 1)) is not int + or not 1 <= row.get("crop_type", 1) <= MAX_VALUE): + raise ValueError("invalid crop type") + name = row.get("name") + if (not isinstance(name, str) or not name.strip() or len(name) > 128 + or any(ord(c) < 32 for c in name) or name in names + or name in (".", "..") or "/" in name or "\\" in name + or row["id"] in identities): + raise ValueError("invalid or duplicate plant identity") + phase = row.get("phase") + if not isinstance(phase, str) or not re.fullmatch(r"[0-9]+(,[0-9]+)+", phase): + raise ValueError("invalid phase") + phases = list(dict.fromkeys(int(p) for p in phase.split(","))) + if len(phases) < 2 or min(phases) < 1 or phases != sorted(phases): + raise ValueError("invalid phase order") + if max(phases) > MAX_VALUE or sum(phases[1:]) > MAX_VALUE: + raise ValueError("phase seconds exceed client domain limit") + for key in DISPLAY[:-1]: + if type(row.get(key)) is not int: + raise ValueError("invalid display integer") + identities[row["id"]] = name + names.add(name) + return identities + + +def validate_manifest(document): + if (set(document) != {"schema", "version", "release", "files"} + or type(document["schema"]) is not int or document["schema"] != 1 + or not re.fullmatch(r"[A-Za-z0-9._-]{1,64}", document["version"]) + or set(document["files"]) != set(LIMITS)): + raise ValueError("invalid manifest") + for name, descriptor in document["files"].items(): + if (set(descriptor) != {"size_bytes", "sha256"} + or type(descriptor["size_bytes"]) is not int + or not 0 < descriptor["size_bytes"] <= LIMITS[name] + or not re.fullmatch(r"[a-f0-9]{64}", descriptor["sha256"])): + raise ValueError("invalid file descriptor") + canonical = json.dumps(document["files"], sort_keys=True, + separators=(",", ":")).encode("utf-8") + if document["release"] != digest(canonical): + raise ValueError("invalid release digest") + + +def verified_current(output): + latest = output / "manifest.json" + if not latest.exists(): + return None + content = read_bounded(latest, 16 * 1024) + manifest = json.loads(content) + validate_manifest(manifest) + directory = output / "releases" / manifest["release"] + if read_bounded(directory / "manifest.json", 16 * 1024) != content: + raise ValueError("latest manifest differs from immutable release") + for name, descriptor in manifest["files"].items(): + value = read_bounded(directory / name, LIMITS[name]) + if len(value) != descriptor["size_bytes"] or digest(value) != descriptor["sha256"]: + raise ValueError("current release is corrupt") + return directory + + +def build(source, version): + if not re.fullmatch(r"[A-Za-z0-9._-]{1,64}", version): + raise ValueError("invalid version") + plants = json.loads(read_bounded(source / "plants.json", LIMITS["plants.json"])) + validate_plants(plants) + metadata = json.loads(read_bounded(source / "metadata.json", LIMITS["metadata.json"])) + if type(metadata.get("schema")) is not int or metadata["schema"] != 1: + raise ValueError("invalid metadata schema") + metadata["plants"] = {row["name"]: {key: row[key] for key in DISPLAY} + for row in plants["plants"]} + pictures = {} + metadata["images"] = {} + total = 0 + for path in sorted((source / "images").rglob("*")): + if path.is_symlink(): + raise ValueError("symlink in image source") + if not path.is_file(): + continue + name = safe_member(path.relative_to(source / "images").as_posix()) + content = read_bounded(path, min(MAX_EXPANDED, 32 * 1024**2)) + total += len(content) + if total > MAX_EXPANDED: + raise ValueError("images exceed expanded size limit") + with Image.open(BytesIO(content)) as image: + size = list(image.size) + image_size(size) + image.verify() + pictures[name] = content + metadata["images"][name] = {"size": size, "sha256": digest(content)} + if not pictures: + raise ValueError("empty images directory") + validate_metadata(metadata, plants["plants"]) + buffer = BytesIO() + with zipfile.ZipFile(buffer, "w", compression=zipfile.ZIP_STORED) as archive: + for name, content in sorted(pictures.items()): + info = zipfile.ZipInfo(name, (2020, 1, 1, 0, 0, 0)) + info.compress_type = zipfile.ZIP_STORED + info.create_system = 3 + info.external_attr = 0o100644 << 16 + archive.writestr(info, content) + soils = read_bounded(source / "land-soils.zip", LIMITS["land-soils.zip"]) + if total + validate_zip(soils) > MAX_EXPANDED: + raise ValueError("combined ZIP expanded size exceeds limit") + files = {"plants.json": json_bytes(plants), "metadata.json": json_bytes(metadata), + "assets.zip": buffer.getvalue(), "land-soils.zip": soils} + descriptors = {} + for name, content in files.items(): + if len(content) > LIMITS[name]: + raise ValueError("release file exceeds size limit") + descriptors[name] = {"size_bytes": len(content), "sha256": digest(content)} + canonical = json.dumps(descriptors, sort_keys=True, separators=(",", ":")).encode() + manifest = {"schema": 1, "version": version, "release": digest(canonical), + "files": descriptors} + files["manifest.json"] = json_bytes(manifest) + return manifest, files + + +def prepare(source, output, version, check=False): + if check: + # Read-only checks never create a lock file or an output directory. + return _prepare(source, output, version, True) + with publication_lock(output): + return _prepare(source, output, version, False) + + +def _prepare(source, output, version, check): + current = verified_current(output) + manifest, files = build(source, version) + for history in (output / "releases").glob("*/manifest.json"): + if history.parent.name.startswith(".prepare-"): + continue + if not re.fullmatch(r"[a-f0-9]{64}", history.parent.name): + raise ValueError("invalid published release directory") + old = json.loads(read_bounded(history, 16 * 1024)) + validate_manifest(old) + if old["release"] != history.parent.name: + raise ValueError("published manifest differs from release directory") + if old["version"] == version and old["release"] != manifest["release"]: + raise ValueError("published version label cannot be reused for changed files") + if current: + old_plants = json.loads((current / "plants.json").read_bytes()) + identities = validate_plants(json.loads(files["plants.json"])) + if any(identities.get(key) != name for key, name in validate_plants(old_plants).items()): + raise ValueError("cannot delete or rename a published crop ID") + old_images = json.loads((current / "metadata.json").read_bytes())["images"] + if not set(old_images) <= set(json.loads(files["metadata.json"])["images"]): + raise ValueError("cannot remove published image paths") + destination = output / "releases" / manifest["release"] + if destination.exists(): + if any(not (destination / name).is_file() or + (destination / name).read_bytes() != content for name, content in files.items()): + raise ValueError("immutable release already exists with different content or label") + if check: + if current != destination or not destination.is_dir(): + raise ValueError("source differs from latest; publish explicitly") + return manifest + output.mkdir(parents=True, exist_ok=True) + destination.parent.mkdir(parents=True, exist_ok=True) + staging = Path(tempfile.mkdtemp(prefix=".prepare-", dir=destination.parent)) + try: + for name, content in files.items(): + (staging / name).write_bytes(content) + if not destination.exists(): + os.rename(staging, destination) + with tempfile.NamedTemporaryFile(prefix=".manifest-", dir=output, delete=False) as stream: + pointer = Path(stream.name) + stream.write(files["manifest.json"]) + stream.flush() + os.fsync(stream.fileno()) + try: + os.replace(pointer, output / "manifest.json") + finally: + pointer.unlink(missing_ok=True) + finally: + shutil.rmtree(staging, ignore_errors=True) + return manifest + + +def main(): + root = Path(__file__).resolve().parents[1] + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--source", type=Path, default=root / "catalogue/source") + parser.add_argument("--output", type=Path, default=root / "catalogue") + parser.add_argument("--version", required=True) + parser.add_argument("--check", action="store_true") + args = parser.parse_args() + try: + manifest = prepare(args.source, args.output, args.version, args.check) + except (OSError, ValueError, KeyError, TypeError, zipfile.BadZipFile) as exc: + parser.exit(1, f"Catalogue rejected: {exc}\n") + print(f"Catalogue {'checked' if args.check else 'prepared'}: {manifest['release']}") + + +if __name__ == "__main__": + main() diff --git a/scripts/publication_lock.py b/scripts/publication_lock.py new file mode 100644 index 0000000..51a39ce --- /dev/null +++ b/scripts/publication_lock.py @@ -0,0 +1,50 @@ +"""Serialize publishers for one output; process exit releases OS locks.""" + +from contextlib import contextmanager +import errno +import os +import threading +import time + +_LOCKS = {} +_REGISTRY_GUARD = threading.Lock() + + +@contextmanager +def publication_lock(output): + key = os.path.normcase(str(output.resolve())) + with _REGISTRY_GUARD: + local = _LOCKS.setdefault(key, threading.Lock()) + # Some OS record locks are process-scoped, so threads also need a mutex. + with local: + output.mkdir(parents=True, exist_ok=True) + # Keep this inode/path permanently: unlinking it could split waiters + # between different locks. It contains no publication state or secrets. + with (output / ".publish.lock").open("a+b") as stream: + if os.name == "nt": + import msvcrt + if os.fstat(stream.fileno()).st_size == 0: + stream.write(b"\0") + stream.flush() + stream.seek(0) + while True: + try: + msvcrt.locking(stream.fileno(), msvcrt.LK_NBLCK, 1) + break + except OSError as error: + if error.errno not in (errno.EACCES, errno.EAGAIN, + errno.EDEADLK): + raise + time.sleep(0.05) + try: + yield + finally: + stream.seek(0) + msvcrt.locking(stream.fileno(), msvcrt.LK_UNLCK, 1) + else: + import fcntl + fcntl.flock(stream.fileno(), fcntl.LOCK_EX) + try: + yield + finally: + fcntl.flock(stream.fileno(), fcntl.LOCK_UN) diff --git a/src/catalogue.rs b/src/catalogue.rs new file mode 100644 index 0000000..738ff85 --- /dev/null +++ b/src/catalogue.rs @@ -0,0 +1,298 @@ +//! Public crop releases verified once at startup, independent of profile tokens. + +use std::{collections::BTreeMap, fs::File, io::Read, path::Path, sync::Arc}; + +use anyhow::{Context, Result, ensure}; +use axum::{ + Json, Router, + body::Bytes, + extract::{Path as RoutePath, State}, + http::{HeaderMap, StatusCode, header}, + response::{IntoResponse, Response}, + routing::get, +}; +use serde::{Deserialize, Serialize}; + +use crate::assets::digest; + +const MAX_MANIFEST: usize = 16 * 1024; +const FILES: [&str; 4] = [ + "plants.json", + "metadata.json", + "assets.zip", + "land-soils.zip", +]; + +/// A bounded file whose bytes are bound into the release identifier. +#[derive(Clone, Debug, Deserialize, Serialize, PartialEq, Eq)] +#[serde(deny_unknown_fields)] +pub struct FileDescriptor { + /// Exact lowercase SHA256 of the published file bytes. + pub sha256: String, + /// Positive byte length checked before serving the snapshot. + pub size_bytes: u64, +} + +/// Versioned discovery contract shared with the independent Farm client. +#[derive(Clone, Debug, Deserialize, Serialize, PartialEq, Eq)] +#[serde(deny_unknown_fields)] +pub struct Manifest { + /// Contract schema, currently one. + pub schema: u32, + /// Human selected immutable label, limited to safe ASCII characters. + pub version: String, + /// SHA256 of the sorted compact JSON files object. + pub release: String, + /// Exactly the four required release files, without arbitrary paths or URLs. + pub files: BTreeMap, +} + +fn valid_digest(value: &str) -> bool { + value.len() == 64 + && value + .bytes() + .all(|b| b.is_ascii_digit() || (b'a'..=b'f').contains(&b)) +} + +fn file_limit(name: &str) -> Option { + match name { + "plants.json" => Some(2 * 1024 * 1024), + "metadata.json" => Some(4 * 1024 * 1024), + "assets.zip" | "land-soils.zip" => Some(64 * 1024 * 1024), + "manifest.json" => Some(MAX_MANIFEST), + _ => None, + } +} + +impl Manifest { + fn validate(&self) -> Result<()> { + ensure!(self.schema == 1, "unsupported catalogue schema"); + ensure!( + !self.version.is_empty() + && self.version.len() <= 64 + && self + .version + .bytes() + .all(|b| b.is_ascii_alphanumeric() || b"._-".contains(&b)), + "invalid catalogue version" + ); + ensure!(valid_digest(&self.release), "invalid catalogue release"); + ensure!( + self.files.len() == FILES.len() + && FILES.iter().all(|name| self.files.contains_key(*name)), + "catalogue requires exactly four release files" + ); + for (name, descriptor) in &self.files { + ensure!( + valid_digest(&descriptor.sha256), + "invalid catalogue file digest" + ); + ensure!( + descriptor.size_bytes > 0 + && descriptor.size_bytes + <= file_limit(name).expect("validated file name") as u64, + "invalid catalogue file size" + ); + } + // Value uses sorted maps, including the fields inside each descriptor. + let canonical = serde_json::to_vec(&serde_json::to_value(&self.files)?)?; + ensure!( + digest(&canonical) == self.release, + "catalogue release digest mismatch" + ); + Ok(()) + } +} + +fn read_bounded(path: &Path, maximum: usize) -> Result> { + ensure!(!path.is_symlink(), "catalogue files cannot be symlinks"); + let file = File::open(path).context("cannot open catalogue file")?; + let mut content = Vec::new(); + file.take(maximum as u64 + 1).read_to_end(&mut content)?; + ensure!( + !content.is_empty() && content.len() <= maximum, + "catalogue file exceeds size limit" + ); + Ok(content) +} + +fn read_manifest(path: &Path) -> Result<(Manifest, Bytes)> { + let content = read_bounded(path, MAX_MANIFEST)?; + let manifest: Manifest = + serde_json::from_slice(&content).context("invalid catalogue manifest JSON")?; + manifest.validate()?; + Ok((manifest, Bytes::from(content))) +} + +struct ReleaseSnapshot { + files: BTreeMap, + manifest: Manifest, +} + +struct CatalogueSnapshot { + latest: Bytes, + latest_digest: String, + releases: BTreeMap, +} + +/// Shared immutable memory snapshot of latest and all published history. +#[derive(Clone)] +pub struct CatalogueStore(Arc); + +impl CatalogueStore { + /// Reject invalid manifests, missing history or corrupt bytes before startup. + pub fn load(directory: &Path) -> Result { + let (latest_manifest, latest) = read_manifest(&directory.join("manifest.json"))?; + let release_root = directory.join("releases"); + ensure!( + !release_root.is_symlink(), + "catalogue releases cannot be a symlink" + ); + let mut releases = BTreeMap::new(); + for entry in std::fs::read_dir(&release_root).context("cannot read catalogue releases")? { + let entry = entry?; + let name = entry.file_name(); + let Some(release) = name.to_str() else { + anyhow::bail!("invalid release directory name") + }; + // Incomplete publication directories are never publicly discoverable. + if release.starts_with(".prepare-") { + continue; + } + ensure!(valid_digest(release), "invalid release directory name"); + ensure!(entry.file_type()?.is_dir(), "release must be a directory"); + let (manifest, manifest_bytes) = read_manifest(&entry.path().join("manifest.json"))?; + ensure!( + manifest.release == release, + "release directory digest mismatch" + ); + let mut files = BTreeMap::new(); + for (name, descriptor) in &manifest.files { + let content = read_bounded(&entry.path().join(name), file_limit(name).unwrap())?; + ensure!( + content.len() as u64 == descriptor.size_bytes, + "catalogue file size mismatch" + ); + ensure!( + digest(&content) == descriptor.sha256, + "catalogue file SHA256 mismatch" + ); + files.insert(name.clone(), Bytes::from(content)); + } + files.insert("manifest.json".into(), manifest_bytes); + releases.insert(release.to_string(), ReleaseSnapshot { files, manifest }); + } + let selected = releases + .get(&latest_manifest.release) + .context("latest release is missing")?; + ensure!( + selected.manifest == latest_manifest, + "latest manifest differs from release manifest" + ); + tracing::info!(release = %latest_manifest.release, releases = releases.len(), "catalogue_verified"); + Ok(Self(Arc::new(CatalogueSnapshot { + latest_digest: digest(&latest), + latest, + releases, + }))) + } +} + +/// The catalogue API is public and read-only; None exposes only unavailable status. +pub fn router(store: Option) -> Router { + Router::new() + .route("/v1/catalogue/manifest.json", get(get_manifest)) + .route("/v1/catalogue/releases/{release}/{file}", get(download)) + .with_state(store) +} + +async fn get_manifest(State(store): State>, headers: HeaderMap) -> Response { + let Some(store) = store else { + return unavailable(); + }; + respond( + store.0.latest.clone(), + &store.0.latest_digest, + "application/json", + false, + &headers, + ) +} + +async fn download( + State(store): State>, + RoutePath((release, file)): RoutePath<(String, String)>, + headers: HeaderMap, +) -> Response { + let Some(store) = store else { + return unavailable(); + }; + if !valid_digest(&release) || file_limit(&file).is_none() { + return StatusCode::NOT_FOUND.into_response(); + } + let Some(snapshot) = store.0.releases.get(&release) else { + return StatusCode::NOT_FOUND.into_response(); + }; + let Some(content) = snapshot.files.get(&file) else { + return StatusCode::NOT_FOUND.into_response(); + }; + let checksum = snapshot + .manifest + .files + .get(&file) + .map(|f| f.sha256.clone()) + .unwrap_or_else(|| digest(content)); + let content_type = if file.ends_with(".zip") { + "application/zip" + } else { + "application/json" + }; + respond(content.clone(), &checksum, content_type, true, &headers) +} + +fn respond( + content: Bytes, + checksum: &str, + content_type: &'static str, + immutable: bool, + headers: &HeaderMap, +) -> Response { + let etag = format!("\"{checksum}\""); + let cached = headers + .get(header::IF_NONE_MATCH) + .and_then(|v| v.to_str().ok()) + .is_some_and(|value| { + value + .split(',') + .map(str::trim) + .any(|v| v == "*" || v.trim_start_matches("W/") == etag) + }); + let mut response = if cached { + StatusCode::NOT_MODIFIED.into_response() + } else { + ([(header::CONTENT_TYPE, content_type)], content).into_response() + }; + response + .headers_mut() + .insert(header::ETAG, etag.parse().expect("digest header")); + let cache = if immutable { + "public, max-age=31536000, immutable" + } else { + "no-cache" + }; + response.headers_mut().insert( + header::CACHE_CONTROL, + cache.parse().expect("constant header"), + ); + response +} + +fn unavailable() -> Response { + ( + StatusCode::SERVICE_UNAVAILABLE, + Json(serde_json::json!({ + "code": "catalogue_unavailable", "message": "catalogue distribution is not configured" + })), + ) + .into_response() +} diff --git a/src/config.rs b/src/config.rs index 77b7f53..6123f08 100644 --- a/src/config.rs +++ b/src/config.rs @@ -16,6 +16,8 @@ pub struct Config { pub asset_manifest: Option, /// Optional font archive manifest; includes the original OFL license. pub font_manifest: Option, + /// Optional catalogue root containing latest and immutable releases. + pub catalogue_dir: Option, } impl Config { @@ -36,6 +38,7 @@ impl Config { api_token, asset_manifest: env::var_os("FARM_ASSET_MANIFEST").map(PathBuf::from), font_manifest: env::var_os("FARM_FONT_MANIFEST").map(PathBuf::from), + catalogue_dir: env::var_os("FARM_CATALOGUE_DIR").map(PathBuf::from), data_dir: env::var_os("FARM_DATA_DIR") .map(PathBuf::from) .unwrap_or_else(|| PathBuf::from("data")), diff --git a/src/lib.rs b/src/lib.rs index 17ded9c..eb5a2f3 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,4 +1,5 @@ pub mod api; pub mod assets; +pub mod catalogue; pub mod config; pub mod db; diff --git a/src/main.rs b/src/main.rs index 8ab8d72..312fa09 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,5 +1,5 @@ use anyhow::{Context, Result}; -use farm_service::{api, assets, config::Config, db}; +use farm_service::{api, assets, catalogue, config::Config, db}; use tracing_subscriber::EnvFilter; #[tokio::main] @@ -30,6 +30,12 @@ async fn main() -> Result<()> { .map(assets::AssetBundle::load_font) .transpose() .context("font startup verification failed")?; + let catalogue = config + .catalogue_dir + .as_deref() + .map(catalogue::CatalogueStore::load) + .transpose() + .context("catalogue startup verification failed")?; std::fs::create_dir_all(&config.data_dir)?; let pool = db::open_database(&config.data_dir.join("farm_service.sqlite3")) .await @@ -38,7 +44,8 @@ async fn main() -> Result<()> { tracing::info!(address = %listener.local_addr()?, "service_ready"); let app = api::router(pool.clone(), config.api_token) .merge(assets::router(bundle)) - .merge(assets::font_router(fonts)); + .merge(assets::font_router(fonts)) + .merge(catalogue::router(catalogue)); let result = axum::serve(listener, app) .with_graceful_shutdown(shutdown()) .await; diff --git a/tests/__pycache__/test_prepare_catalogue.cpython-312.pyc b/tests/__pycache__/test_prepare_catalogue.cpython-312.pyc new file mode 100644 index 0000000..6546e4a Binary files /dev/null and b/tests/__pycache__/test_prepare_catalogue.cpython-312.pyc differ diff --git a/tests/catalogue.rs b/tests/catalogue.rs new file mode 100644 index 0000000..9dbac76 --- /dev/null +++ b/tests/catalogue.rs @@ -0,0 +1,256 @@ +use axum::{ + body::{Body, to_bytes}, + http::{Request, StatusCode}, +}; +use farm_service::{ + assets::digest, + catalogue::{self, CatalogueStore}, +}; +use serde_json::{Value, json}; +use std::{collections::BTreeMap, path::Path}; +use tower::ServiceExt; + +fn publish(root: &Path, version: &str, plants: &[u8]) -> Value { + let content = BTreeMap::from([ + ("plants.json", plants), + ("metadata.json", b"{\"schema\":1}".as_slice()), + ("assets.zip", b"PK\x03\x04pictures".as_slice()), + ("land-soils.zip", b"PK\x03\x04soils".as_slice()), + ]); + let files: BTreeMap<_, _> = content + .iter() + .map(|(name, bytes)| { + ( + *name, + json!({"sha256": digest(bytes), "size_bytes": bytes.len()}), + ) + }) + .collect(); + let release = digest(&serde_json::to_vec(&files).unwrap()); + let manifest = json!({"schema": 1, "version": version, "release": release, + "files": files}); + let directory = root.join("releases").join(&release); + std::fs::create_dir_all(&directory).unwrap(); + for (name, bytes) in content { + std::fs::write(directory.join(name), bytes).unwrap(); + } + let bytes = serde_json::to_vec(&manifest).unwrap(); + std::fs::write(directory.join("manifest.json"), &bytes).unwrap(); + std::fs::write(root.join("manifest.json"), bytes).unwrap(); + manifest +} + +#[tokio::test] +async fn serves_latest_history_etags_and_verified_memory_snapshot() { + let directory = tempfile::tempdir().unwrap(); + let old = publish(directory.path(), "one", b"{\"schema\":1,\"plants\":[1]}"); + let latest = publish(directory.path(), "two", b"{\"schema\":1,\"plants\":[2]}"); + let store = CatalogueStore::load(directory.path()).unwrap(); + let app = catalogue::router(Some(store)); + let response = app + .clone() + .oneshot( + Request::builder() + .uri("/v1/catalogue/manifest.json") + .body(Body::empty()) + .unwrap(), + ) + .await + .unwrap(); + assert_eq!(response.status(), StatusCode::OK); + let etag = response.headers()["etag"].clone(); + assert_eq!( + serde_json::from_slice::(&to_bytes(response.into_body(), 16384).await.unwrap()) + .unwrap(), + latest + ); + let response = app + .clone() + .oneshot( + Request::builder() + .uri("/v1/catalogue/manifest.json") + .header("if-none-match", etag) + .body(Body::empty()) + .unwrap(), + ) + .await + .unwrap(); + assert_eq!(response.status(), StatusCode::NOT_MODIFIED); + let release = old["release"].as_str().unwrap(); + std::fs::write( + directory + .path() + .join("releases") + .join(release) + .join("plants.json"), + b"changed", + ) + .unwrap(); + let uri = format!("/v1/catalogue/releases/{release}/plants.json"); + let response = app + .clone() + .oneshot(Request::builder().uri(&uri).body(Body::empty()).unwrap()) + .await + .unwrap(); + assert_eq!(response.status(), StatusCode::OK); + assert_eq!( + response.headers()["cache-control"], + "public, max-age=31536000, immutable" + ); + let etag = response.headers()["etag"].clone(); + assert_eq!( + to_bytes(response.into_body(), 4096).await.unwrap(), + b"{\"schema\":1,\"plants\":[1]}".as_slice() + ); + let response = app + .clone() + .oneshot( + Request::builder() + .uri(uri) + .header("if-none-match", etag) + .body(Body::empty()) + .unwrap(), + ) + .await + .unwrap(); + assert_eq!(response.status(), StatusCode::NOT_MODIFIED); + for file in [ + "metadata.json", + "assets.zip", + "land-soils.zip", + "manifest.json", + ] { + let uri = format!("/v1/catalogue/releases/{release}/{file}"); + let response = app + .clone() + .oneshot(Request::builder().uri(uri).body(Body::empty()).unwrap()) + .await + .unwrap(); + assert_eq!(response.status(), StatusCode::OK); + } +} + +#[tokio::test] +async fn disabled_unknown_paths_and_profile_authentication_remain_separate() { + let response = catalogue::router(None) + .oneshot( + Request::builder() + .uri("/v1/catalogue/manifest.json") + .body(Body::empty()) + .unwrap(), + ) + .await + .unwrap(); + assert_eq!(response.status(), StatusCode::SERVICE_UNAVAILABLE); + let directory = tempfile::tempdir().unwrap(); + let manifest = publish(directory.path(), "test", b"{}"); + let store = CatalogueStore::load(directory.path()).unwrap(); + let pool = farm_service::db::open_database(&directory.path().join("test.sqlite3")) + .await + .unwrap(); + let app = farm_service::api::router(pool.clone(), "test-only-token".into()) + .merge(catalogue::router(Some(store))); + let release = manifest["release"].as_str().unwrap(); + for (uri, expected) in [ + ( + format!("/v1/catalogue/releases/{release}/secret.txt"), + StatusCode::NOT_FOUND, + ), + ( + "/v1/catalogue/releases/unknown/plants.json".into(), + StatusCode::NOT_FOUND, + ), + ("/v1/catalogue/manifest.json".into(), StatusCode::OK), + ("/v1/users/qq/123456".into(), StatusCode::UNAUTHORIZED), + ] { + let response = app + .clone() + .oneshot(Request::builder().uri(uri).body(Body::empty()).unwrap()) + .await + .unwrap(); + assert_eq!(response.status(), expected); + } + pool.close().await; +} + +#[test] +fn rejects_missing_corrupt_oversized_or_unbound_release_files() { + let directory = tempfile::tempdir().unwrap(); + let manifest = publish(directory.path(), "test", b"{}"); + let release = manifest["release"].as_str().unwrap(); + let file = directory + .path() + .join("releases") + .join(release) + .join("plants.json"); + std::fs::write(&file, b"bad").unwrap(); + assert!(CatalogueStore::load(directory.path()).is_err()); + std::fs::write(&file, b"[]").unwrap(); + assert!(CatalogueStore::load(directory.path()).is_err()); + std::fs::remove_file(&file).unwrap(); + assert!(CatalogueStore::load(directory.path()).is_err()); + std::fs::write(&file, b"{}").unwrap(); + let mut invalid = manifest.clone(); + invalid["files"]["plants.json"]["size_bytes"] = json!(2 * 1024 * 1024 + 1); + std::fs::write( + directory.path().join("manifest.json"), + serde_json::to_vec(&invalid).unwrap(), + ) + .unwrap(); + assert!(CatalogueStore::load(directory.path()).is_err()); + invalid = manifest.clone(); + invalid["release"] = json!("a".repeat(64)); + std::fs::write( + directory.path().join("manifest.json"), + serde_json::to_vec(&invalid).unwrap(), + ) + .unwrap(); + assert!(CatalogueStore::load(directory.path()).is_err()); +} + +#[test] +fn rejects_unknown_schema_fields_missing_latest_history_and_bad_historical_manifest() { + for kind in ["schema", "extra", "missing", "label", "history"] { + let directory = tempfile::tempdir().unwrap(); + let mut manifest = publish(directory.path(), "test", b"{}"); + let release = manifest["release"].as_str().unwrap().to_string(); + match kind { + "schema" => manifest["schema"] = json!(2), + "extra" => { + manifest["files"]["private.txt"] = + json!({"sha256": "a".repeat(64), "size_bytes": 1}) + } + "missing" => { + std::fs::remove_dir_all(directory.path().join("releases").join(&release)).unwrap(); + } + "label" => manifest["version"] = json!("different-label"), + "history" => { + let old = publish(directory.path(), "old", b"[]"); + std::fs::write( + directory + .path() + .join("releases") + .join(old["release"].as_str().unwrap()) + .join("manifest.json"), + b"{}", + ) + .unwrap(); + } + _ => unreachable!(), + } + std::fs::write( + directory.path().join("manifest.json"), + serde_json::to_vec(&manifest).unwrap(), + ) + .unwrap(); + assert!( + CatalogueStore::load(directory.path()).is_err(), + "accepted {kind}" + ); + } +} + +#[test] +fn independently_published_repository_release_is_accepted_by_rust() { + CatalogueStore::load(&Path::new(env!("CARGO_MANIFEST_DIR")).join("catalogue")).unwrap(); +} diff --git a/tests/test_prepare_catalogue.py b/tests/test_prepare_catalogue.py new file mode 100644 index 0000000..a58767d --- /dev/null +++ b/tests/test_prepare_catalogue.py @@ -0,0 +1,370 @@ +"""Offline publication contract; every fixture lives in a temporary directory.""" + +import hashlib +import copy +import json +from pathlib import Path +import subprocess +import shutil +import sys +import tempfile +import time +import unittest +import zipfile + +from PIL import Image + +SCRIPT = Path(__file__).resolve().parents[1] / "scripts/prepare_catalogue.py" +sys.path.insert(0, str(SCRIPT.parent)) + + +class PublicationTests(unittest.TestCase): + def setUp(self): + self.temp = tempfile.TemporaryDirectory() + self.addCleanup(self.temp.cleanup) + self.root = Path(self.temp.name) + self.source = self.root / "source" + self.output = self.root / "output" + (self.source / "images/plants").mkdir(parents=True) + Image.new("RGBA", (2, 3), "red").save( + self.source / "images/plants/carrot.png") + self.plant = dict(id=1, name="Carrot", level=0, buy=1, isVip=0, + vipBuy=0, experience=1, harvest=1, price=2, + time=1, crop=1, phase="1,2", general=1, + offsetH=0, offsetW=0, offsetX=0, offsetY=0) + self.save_plants([self.plant]) + self.metadata = { + "schema": 1, "canvas": [2, 3], "soil_size": [2, 3], + "positions": [{"x": 1, "y": 1} for _ in range(30)], + "plants": {}, "images": {}, + "placement": {"schema": 4, "mode": "visible_contact_center", + "common_scale": 1, "growth_scale": 1, + "reference_soil_height": 1, "reference_soil_width": 1, + "contact_alpha_threshold": 32, "contact_band_fraction": 0.2, + "scene_transform": [[1, 0], [0, 1]]}, + "pest": {"display_size": [2, 3], + "frames": ["pest/1.png", "pest/2.png", "pest/3.png"], + "positions": [[1, 1], [1, 2], [2, 1]]}, + "panel": {"reference_canvas": [2, 3], "avatar": [0, 0, 1, 1], + "fields": [{"field": field, "rect": [0, 0, 1, 1], + "color": [0, 0, 0], "alignment": 3} for field in + ["name", "experience", "level", "point", "vip_point"]], + "sprites": [{"sprite": "background/ripe.png", "rect": [0, 0, 1, 1]}]}, + "decorations": {theme: [{"position": [1, 1], "size": [2, 3], + "layer": "background", "sprite": "background/ripe.png"}] + for theme in ["default", "spring", "summer", "autumn", "winter", "bee"]}, + } + self.save_metadata(self.metadata) + for name in ["webgl/seed.png", "webgl/wither.png", "background/ripe.png", + "soil/草土地.png", "soil/普通土地.png", *self.metadata["pest"]["frames"]]: + path = self.source / "images" / name + path.parent.mkdir(parents=True, exist_ok=True) + shutil.copyfile(self.source / "images/plants/carrot.png", path) + with zipfile.ZipFile(self.source / "land-soils.zip", "w") as archive: + for name in ("soil/红土地.png", "soil/黑土地.png", "soil/金土地.png"): + archive.writestr(name, (self.source / + "images/plants/carrot.png").read_bytes()) + + def save_metadata(self, metadata): + (self.source / "metadata.json").write_text(json.dumps(metadata), encoding="utf-8") + + def save_plants(self, plants): + (self.source / "plants.json").write_text(json.dumps({ + "schema": 1, "plants": plants}), encoding="utf-8") + + def run_tool(self, *extra): + return subprocess.run([sys.executable, str(SCRIPT), "--source", + str(self.source), "--output", str(self.output), "--version", + "test-1", *extra], capture_output=True, text=True) + + def publish(self): + result = self.run_tool() + self.assertEqual(result.returncode, 0, result.stderr) + return json.loads((self.output / "manifest.json").read_bytes()) + + def test_release_binds_four_files_and_is_reproducible(self): + manifest = self.publish() + self.assertEqual(set(manifest["files"]), { + "plants.json", "metadata.json", "assets.zip", "land-soils.zip"}) + canonical = json.dumps(manifest["files"], sort_keys=True, + separators=(",", ":")).encode() + self.assertEqual(manifest["release"], hashlib.sha256(canonical).hexdigest()) + release = self.output / "releases" / manifest["release"] + before = {p.name: p.read_bytes() for p in release.iterdir()} + self.publish() + self.assertEqual(before, {p.name: p.read_bytes() for p in release.iterdir()}) + metadata = json.loads(before["metadata.json"]) + self.assertEqual(metadata["plants"]["Carrot"]["phase"], "1,2") + self.assertEqual(metadata["images"]["plants/carrot.png"]["size"], [2, 3]) + self.assertEqual(self.run_tool("--check").returncode, 0) + self.plant["price"] = 3 + self.save_plants([self.plant]) + self.assertNotEqual(self.run_tool("--check").returncode, 0) + self.assertEqual(json.loads((self.output / "manifest.json").read_bytes()), manifest) + + def test_rejects_removed_or_renamed_ids_without_changing_latest(self): + manifest = self.publish() + for rows in ([], [dict(self.plant, name="Renamed")]): + self.save_plants(rows) + self.assertNotEqual(self.run_tool("--version", "test-2").returncode, 0) + self.assertEqual(json.loads((self.output / "manifest.json").read_bytes()), manifest) + + def test_rejects_removed_images_corrupt_files_and_duplicate_ids(self): + manifest = self.publish() + (self.source / "images/plants/carrot.png").unlink() + self.assertNotEqual(self.run_tool("--version", "test-2").returncode, 0) + Image.new("RGB", (1, 1)).save(self.source / "images/plants/carrot.png") + self.save_plants([self.plant, self.plant]) + self.assertNotEqual(self.run_tool().returncode, 0) + self.save_plants([self.plant]) + release = self.output / "releases" / manifest["release"] + (release / "plants.json").write_bytes(b"corrupt") + self.assertNotEqual(self.run_tool().returncode, 0) + + def test_rejects_unsafe_soil_zip_before_publication(self): + with zipfile.ZipFile(self.source / "land-soils.zip", "w") as archive: + archive.writestr("../escape.png", b"bad") + self.assertNotEqual(self.run_tool().returncode, 0) + self.assertFalse((self.output / "manifest.json").exists()) + + def test_numeric_update_and_new_id_keep_old_release_immutable(self): + first = self.publish() + old_release = self.output / "releases" / first["release"] + old_bytes = (old_release / "plants.json").read_bytes() + self.plant["price"] = 20 + second_plant = dict(self.plant, id=2, name="Turnip") + self.save_plants([self.plant, second_plant]) + result = self.run_tool("--version", "test-2") + self.assertEqual(result.returncode, 0, result.stderr) + second = json.loads((self.output / "manifest.json").read_bytes()) + self.assertNotEqual(second["release"], first["release"]) + self.assertEqual((old_release / "plants.json").read_bytes(), old_bytes) + self.assertEqual(self.run_tool("--version", "test-2", "--check").returncode, 0) + + def test_combined_expanded_limit_applies_to_both_archives(self): + # A valid image twice is permitted individually, but the total is bounded. + import importlib.util + spec = importlib.util.spec_from_file_location("prepare_catalogue", SCRIPT) + module = importlib.util.module_from_spec(spec) + spec.loader.exec_module(module) + picture_size = (self.source / "images/plants/carrot.png").stat().st_size + module.MAX_EXPANDED = picture_size * 10 + with self.assertRaises(ValueError): + module.prepare(self.source, self.output, "test-1") + + def test_rejects_values_outside_client_domain_limits(self): + for changes in ({"price": 2**63}, {"time": 2**63 // 3600 + 1}, + {"name": "x" * 129}, {"phase": "1,9223372036854775808"}): + with self.subTest(changes=changes): + shutil.rmtree(self.output, ignore_errors=True) + self.save_plants([dict(self.plant, **changes)]) + self.assertNotEqual(self.run_tool().returncode, 0) + + def test_rejects_names_that_cannot_be_safe_crop_asset_components(self): + for name in (".", "..", "Carrot/Turnip", "Carrot\\Turnip"): + with self.subTest(name=name): + shutil.rmtree(self.output, ignore_errors=True) + self.save_plants([dict(self.plant, name=name)]) + self.assertNotEqual(self.run_tool().returncode, 0) + self.assertFalse((self.output / "manifest.json").exists()) + + def test_oversized_integer_coordinates_raise_validation_error(self): + from catalogue_validation import numbers + for value in (10**1000, -(10**1000)): + with self.subTest(value_sign=value > 0): + try: + numbers([value], 1) + except Exception as error: + self.assertIsInstance(error, ValueError) + else: + self.fail("oversized coordinate was accepted") + + def test_rejects_malformed_metadata_before_publication(self): + changes = [ + lambda m: m.pop("soil_size"), + lambda m: m.update(schema=True), + lambda m: m.update(canvas=[True, 3]), + lambda m: m.update(positions=[{"x": 1, "y": 1}]), + lambda m: m["placement"].update(schema=True), + lambda m: m["placement"].update(common_scale=float("nan")), + lambda m: m["placement"].update(growth_scale=-1), + lambda m: m["placement"].update(scene_transform=[[1, 1], [1, 1]]), + lambda m: m["pest"].update(frames=["pest/1.png"] * 3), + lambda m: m["pest"].update(display_size=[8193, 1]), + lambda m: m["panel"].update(fields=[]), + lambda m: m["panel"]["fields"][0].update(color=[0, float("inf"), 0]), + lambda m: m["panel"]["fields"][0].update(alignment=True), + lambda m: m["panel"]["sprites"][0].update(rect=[0, 0, 0, 1]), + lambda m: m["decorations"].pop("winter"), + lambda m: m["decorations"]["winter"][0].update(layer="unknown"), + ] + for change in changes: + with self.subTest(change=change): + shutil.rmtree(self.output, ignore_errors=True) + metadata = copy.deepcopy(self.metadata) + change(metadata) + self.save_metadata(metadata) + self.assertNotEqual(self.run_tool().returncode, 0) + self.assertFalse((self.output / "manifest.json").exists()) + + def test_rejects_required_missing_sprite_references(self): + for kind in ("required", "pest", "panel", "decoration"): + with self.subTest(kind=kind): + shutil.rmtree(self.output, ignore_errors=True) + metadata = copy.deepcopy(self.metadata) + required = self.source / "images/webgl/seed.png" + if kind == "required": + content = required.read_bytes() + required.unlink() + elif kind == "pest": + metadata["pest"]["frames"][0] = "missing.png" + elif kind == "panel": + metadata["panel"]["sprites"][0]["sprite"] = "missing.png" + else: + metadata["decorations"]["winter"][0]["sprite"] = "missing.png" + self.save_metadata(metadata) + self.assertNotEqual(self.run_tool().returncode, 0) + if kind == "required": + required.write_bytes(content) + + def test_rejects_incomplete_soil_bundle(self): + with zipfile.ZipFile(self.source / "land-soils.zip", "w") as archive: + archive.writestr("soil/红土地.png", (self.source / + "images/plants/carrot.png").read_bytes()) + self.assertNotEqual(self.run_tool().returncode, 0) + + def test_rejects_reusing_version_label_for_changed_release(self): + first = self.publish() + self.plant["price"] = 30 + self.save_plants([self.plant]) + self.assertNotEqual(self.run_tool().returncode, 0) + self.assertEqual(json.loads((self.output / "manifest.json").read_bytes()), first) + + def paused_publisher(self, source, version): + ready, proceed = self.root / "ready", self.root / "proceed" + code = """ +import sys, time +from pathlib import Path +sys.path.insert(0, sys.argv[1]) +import prepare_catalogue as module +original = module.build +def paused(*args): + Path(sys.argv[5]).touch() + deadline = time.monotonic() + 20 + while not Path(sys.argv[6]).exists(): + if time.monotonic() > deadline: + raise RuntimeError('test barrier timed out') + time.sleep(0.01) + return original(*args) +module.build = paused +module.prepare(Path(sys.argv[2]), Path(sys.argv[3]), sys.argv[4]) +""" + process = subprocess.Popen([sys.executable, "-c", code, + str(SCRIPT.parent), str(source), str(self.output), version, + str(ready), str(proceed)], stdout=subprocess.PIPE, stderr=subprocess.PIPE) + self.addCleanup(lambda: process.kill() if process.poll() is None else None) + deadline = time.monotonic() + 10 + while not ready.exists() and time.monotonic() < deadline: + self.assertIsNone(process.poll()) + time.sleep(0.01) + self.assertTrue(ready.exists()) + return process, proceed + + def test_cross_process_publishers_cannot_erase_concurrently_added_ids(self): + self.publish() + newer = self.root / "newer" + shutil.copytree(self.source, newer) + (newer / "plants.json").write_text(json.dumps({"schema": 1, "plants": [ + self.plant, dict(self.plant, id=2, name="Turnip")]}), encoding="utf-8") + self.plant["price"] = 50 + self.save_plants([self.plant]) + old, proceed = self.paused_publisher(self.source, "test-old-writer") + added = subprocess.Popen([sys.executable, str(SCRIPT), "--source", str(newer), + "--output", str(self.output), "--version", "test-new-writer"], + stdout=subprocess.PIPE, stderr=subprocess.PIPE) + self.addCleanup(lambda: added.kill() if added.poll() is None else None) + try: + added.wait(timeout=1.5) + except subprocess.TimeoutExpired: + pass + proceed.touch() + old_out, old_error = old.communicate(timeout=10) + added_out, added_error = added.communicate(timeout=10) + self.assertEqual(old.returncode, 0, (old_out, old_error)) + self.assertEqual(added.returncode, 0, (added_out, added_error)) + latest = json.loads((self.output / "manifest.json").read_bytes()) + rows = json.loads((self.output / "releases" / latest["release"] / + "plants.json").read_bytes())["plants"] + self.assertEqual({row["id"] for row in rows}, {1, 2}) + + def test_process_exit_releases_publication_lock(self): + self.publish() + process, _ = self.paused_publisher(self.source, "test-interrupted") + process.kill() + process.communicate(timeout=10) + self.assertEqual(self.run_tool().returncode, 0) + + def test_threads_publish_without_losing_new_ids(self): + from concurrent.futures import ThreadPoolExecutor, TimeoutError + import threading + from unittest.mock import patch + import prepare_catalogue as module + + self.publish() + newer = self.root / "newer" + shutil.copytree(self.source, newer) + (newer / "plants.json").write_text(json.dumps({"schema": 1, "plants": [ + self.plant, dict(self.plant, id=2, name="Turnip")]}), encoding="utf-8") + self.plant["price"] = 50 + self.save_plants([self.plant]) + ready, proceed = threading.Event(), threading.Event() + original = module.build + + def paused(source, version): + if version == "old-thread": + ready.set() + if not proceed.wait(10): + raise RuntimeError("test barrier timed out") + return original(source, version) + + with patch.object(module, "build", paused), ThreadPoolExecutor(2) as executor: + old = executor.submit(module.prepare, self.source, self.output, "old-thread") + self.assertTrue(ready.wait(10)) + added = executor.submit(module.prepare, newer, self.output, "new-thread") + try: + added.result(timeout=0.5) + except TimeoutError: + pass + finally: + proceed.set() + old.result(timeout=10) + latest = added.result(timeout=10) + rows = json.loads((self.output / "releases" / latest["release"] / + "plants.json").read_bytes())["plants"] + self.assertEqual({row["id"] for row in rows}, {1, 2}) + + def test_check_does_not_create_or_modify_output_files(self): + self.assertNotEqual(self.run_tool("--check").returncode, 0) + self.assertFalse(self.output.exists()) + self.publish() + before = {p.relative_to(self.output): (p.read_bytes(), p.stat().st_mtime_ns) + for p in self.output.rglob("*") if p.is_file()} + self.assertEqual(self.run_tool("--check").returncode, 0) + after = {p.relative_to(self.output): (p.read_bytes(), p.stat().st_mtime_ns) + for p in self.output.rglob("*") if p.is_file()} + self.assertEqual(after, before) + + def test_interrupted_staging_manifest_does_not_reserve_version_label(self): + first = self.publish() + orphan = self.output / "releases/.prepare-interrupted" + orphan.mkdir() + orphan_manifest = dict(first, version="test-2") + (orphan / "manifest.json").write_text(json.dumps(orphan_manifest), encoding="utf-8") + self.plant["price"] = 25 + self.save_plants([self.plant]) + result = self.run_tool("--version", "test-2") + self.assertEqual(result.returncode, 0, result.stderr) + + +if __name__ == "__main__": + unittest.main()