Compare commits

...

56 Commits

Author SHA1 Message Date
uye
fde7e7dfa4 Release v5.26.1 (#14351) 2025-10-10 01:08:02 +08:00
github-actions[bot]
0af9034bad docs: Auto Update Changelogs of v5.26.1 (#14352)
* docs: Auto Generate Changelog of Release v5.26.1

* docs: Release v5.26.1 with new features and fixes

This version introduces initial support for the Rebuilding Mandate and significant improvements to the Auto I.S. recruitment strategy, enhancing gameplay experience and fixing various issues.

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: uye <99072975+ABA2396@users.noreply.github.com>
2025-10-10 00:50:43 +08:00
uye
516d47bb9d fix: 游戏更新公招界面后无法确认招募 (#14335)
* fix: 游戏更新公招界面后无法确认招募

* chore: Auto update by pre-commit hooks [skip changelog]

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2025-10-10 00:32:48 +08:00
uye
afc16cf6e6 feat: 新增 cdk 被封禁的提示信息 2025-10-10 00:16:47 +08:00
uye
e52f573a7f fix: 第一次访问 mirror酱 失败时错误提示 cdk 已过期 2025-10-10 00:16:47 +08:00
MistEO
04206e7e5e ci: use sh install zsh to fix resource updater
https://github.com/MaaAssistantArknights/MaaAssistantArknights/actions/runs/18378946272/job/52360092110

Zsh seems to treat the array as a whole string and cannot split it, resulting in traversal errors @Constrat
2025-10-09 22:16:48 +08:00
MistEO
8c71f709db fix: resource version 2025-10-09 21:22:38 +08:00
github-actions[bot]
7f6b490d00 chore: Auto Update Game Resources - 2025-10-09
https://github.com/MaaAssistantArknights/MaaAssistantArknights/actions/runs/18377623299

[skip changelog]
2025-10-09 13:18:11 +00:00
github-actions[bot]
a0bd928f75 chore: Auto Update Game Resources - 2025-10-09
https://github.com/MaaAssistantArknights/MaaAssistantArknights/actions/runs/18370407108

[skip changelog]
2025-10-09 08:33:27 +00:00
github-actions[bot]
fc7c823b9f chore: Auto Update Game Resources - 2025-10-09
https://github.com/MaaAssistantArknights/MaaAssistantArknights/actions/runs/18367676923

[skip changelog]
2025-10-09 06:33:51 +00:00
MistEO
488b16e8e7 fix: Update last_updated date in version.json 2025-10-09 09:07:03 +08:00
MistEO
fcc146ad2a fix: Update last_updated timestamp in version.json 2025-10-09 09:06:16 +08:00
github-actions[bot]
64ec655631 chore: Auto Templates Optimization
Triggered by 35cf87547c

[skip changelog]
2025-10-08 23:09:46 +00:00
github-actions[bot]
35cf87547c chore: Auto Update Game Resources - 2025-10-08
https://github.com/MaaAssistantArknights/MaaAssistantArknights/actions/runs/18360388224

[skip changelog]
2025-10-08 23:08:38 +00:00
uye
4db7a06f01 fix: 手动关闭模拟器后未重启 MAA 时 minitouch 可能失效 2025-10-08 16:48:27 +08:00
Weiyou Wang
24bb443e08 docs: 补充 CopilotTask 的文档 (#14319) 2025-10-08 19:28:21 +11:00
Weiyou Wang
02133548c4 fix: 尝试修复生息演算任务识别并删除编队时卡住的问题 (#14290)
* fix: 尝试修复生息演算任务识别并删除编队时卡住的问题

* refactor: 改用 #self
2025-10-08 16:07:45 +08:00
uye
eff2818404 refactor: 使用 BeginAnimation 替代 新建 Storyboard 并添加动画 2025-10-07 21:38:43 +08:00
dependabot[bot]
8017430308 ci: bump the github-actions group across 1 directory with 2 updates (#14311)
Bumps the github-actions group with 2 updates in the /.github/workflows directory: [softprops/action-gh-release](https://github.com/softprops/action-gh-release) and [actions/upload-pages-artifact](https://github.com/actions/upload-pages-artifact).


Updates `softprops/action-gh-release` from 2.3.3 to 2.3.4
- [Release notes](https://github.com/softprops/action-gh-release/releases)
- [Changelog](https://github.com/softprops/action-gh-release/blob/master/CHANGELOG.md)
- [Commits](https://github.com/softprops/action-gh-release/compare/v2.3.3...v2.3.4)

Updates `actions/upload-pages-artifact` from 3 to 4
- [Release notes](https://github.com/actions/upload-pages-artifact/releases)
- [Commits](https://github.com/actions/upload-pages-artifact/compare/v3...v4)

---
updated-dependencies:
- dependency-name: softprops/action-gh-release
  dependency-version: 2.3.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: github-actions
- dependency-name: actions/upload-pages-artifact
  dependency-version: '4'
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: github-actions
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-10-07 15:28:22 +02:00
github-actions[bot]
9b10bb6e02 chore: Auto Update Game Resources - 2025-10-07
https://github.com/MaaAssistantArknights/MaaAssistantArknights/actions/runs/18306279350

[skip changelog]
2025-10-07 08:11:26 +00:00
Horror Proton
b89777ec07 chore: run smoke test in lldb 2025-10-07 05:41:49 +00:00
Lucien Shaw
e72b6d5e24 docs: 添加目录自动跳转组件并使locale自动生成 (#14299)
* feat: 文档站添加重定向vue小组件

* revert: "docs: 将文档中指向部分文档目录的链接改为指向对应目录下的第一篇文档 (#14292)"

This reverts commit a24c772880.

* docs: zh-tw 目录自动跳转

* docs: zh-cn 目录自动跳转

* docs: ko-kr 目录自动跳转

* docs: ja-jp 目录自动跳转

* docs: en-us 目录自动跳转

* docs: 修复了多语言faq文章中的外链对应语言错误的问题

* refactor: 将matter模块改为default import

* feat: 将文档站的i18n和导航相关设置改为全自动生成

* fix: 去除了冗余的locale属性

文档站根据文件目录名称进行索引,linkName和dirName不可能不相同,故简化为单属性name

* refactor: 调整导航组件生成模块中的部分数据类型

* style: prettier fix
2025-10-04 23:44:54 +08:00
Lucien Shaw
fb0bf0a510 docs: 文档站新增字符画组件 (#14270)
* docs: 拯救牛牛!

* chore: 字符画使用单独目录

* feat: 随机动态加载字符画

* feat: 文档站的开发者工具console会打印随机字符画

* fix: 调整字符画初始行高,修正比例

* refactor: 简化冗余的缩放逻辑

* fix: 测量基准宽度时添加100ms延迟

* chore: Auto update by pre-commit hooks [skip changelog]

* refactor: 加上类型注解,避免编辑器报错

* chore: 更改prettier配置,typescript行尾不使用分号

* chore: Auto update by pre-commit hooks [skip changelog]

* fix: 完善字符画大小调整算法,稳定后再调整字体

* fix: 字符画的自适应调整逻辑

* feat: 字符画支持自定义主题

* docs: 调整“字号不要用小数”的注释提示

* fix: 判断document是否定义,避免构建失败

* refactor: 完善字符画获取逻辑

* feat: 为console中展示的字符画添加自动检测主题功能

* fix: 避免因滚动条等原因造成的字符画尺寸抖动

* chore: Priestess

* refactor: 将字符画调取模块置于插件目录下

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2025-10-04 23:21:12 +08:00
Goat Boring(山羊博宁88)
a24c772880 docs: 将文档中指向部分文档目录的链接改为指向对应目录下的第一篇文档 (#14292)
* Update newbie.md

* Update newbie.md

* Update newbie.md

* Update newbie.md

* Update newbie.md

* Update readme.md

* Update readme.md

* Update readme.md

* Update readme.md

* Update readme.md
2025-10-04 02:12:26 +08:00
Pylinx171
7a3484dc52 chore: 将mac开发环境下的cmake_osx版本改为13.4 (#14283)
Co-authored-by: lihao2Gops5m9x <li@m8@cx7H5g3eM>
2025-10-03 19:12:11 +08:00
晓丶梦丶仁
2aa2e87fd6 fix: "MiniGame@RM-1@Wait" 2025-10-03 17:20:12 +08:00
Status102
2ef25416f9 perf: RegionOCRer 中 useRaw=false 时, 使用原图二值蒙版代替直接 OCR 二值图像 (#14276)
perf: RegionOCRer中useRaw=false时, 使用原图裁剪代替二值化图像
2025-10-03 16:13:59 +08:00
Rain Yang
435e17867e fix: 增强 playtools 关闭连接时的异常处理,确保套接字安全关闭 (#14280)
* fix: 增强playtools关闭连接时的异常处理,确保套接字安全关闭

* chore: Auto update by pre-commit hooks [skip changelog]

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2025-10-03 14:14:02 +08:00
Constrat
707d31bb30 fix: EN IS3 encounter ocr
fix MAA,EN服水月肉鸽 事件名识别错误bug
Fixes #1427214272
2025-10-01 15:32:24 +02:00
status102
de08a33db1 fix: 理智药使用数量ocr不准确时中断使用 2025-10-01 19:25:07 +08:00
status102
d724b8ff9c fix: 使用理智药 执行减少次数循环在asst_stop时缺少中断判断 2025-10-01 19:21:47 +08:00
萨拉托加
1bb7828255 chore: YostarJP ocr fix 2025-10-01 15:26:15 +08:00
萨拉托加
d2a81987b2 fix: 修复因失败导致次生预算出错 (#14267) 2025-10-01 07:38:13 +08:00
github-actions[bot]
ed7ee78952 chore: Auto Update Game Resources - 2025-09-30
https://github.com/MaaAssistantArknights/MaaAssistantArknights/actions/runs/18137728844

[skip changelog]
2025-09-30 17:07:49 +00:00
晓丶梦丶仁
2973ebbbdb feat: RM-1 (#14271) 2025-10-01 00:54:41 +08:00
Lucien Shaw
e461208bf9 chore: 完善容器配置及依赖安装 (#14208)
格式化工具部分:
1. pre-commit 引入 python 的格式化工具,包括 black(代码格式化)和 isort(对“包导入顺序”的规范)
2. 允许 prettier 对文档站的 markdown 文件格式化
3. 不允许 prettier 对 markdown 文件中的代码块的代码本身进行格式化
4. 升级了 pre-commit 的各个 hook 的版本
5. 优化了 pre-commit 的日志文本显示

容器总览部分:
1. 由原来的单一轻量环境转为区分空环境、轻量环境和全量环境
2. 空环境是裸 Linux 镜像(Ubuntu),为默认环境
3. 轻量环境适合开发文档站前端
4. 全量环境适合开发 MaaCore
5. 目前,全量环境完整包含了轻量环境,轻量环境完整包含了空环境
6. 在仓库 README.md 中更新了三个环境的描述,并将链接分别设置为对应环境的创建链接
   **注意:没有修改文档站中的对应文件**
7. 在各个语言的开发指南的最后,移除了 Codespace 部分的“安装额外依赖”相关描述,且将链接设置为全量环境的创建链接
   **注意:没有添加“开发文档站”的指南和对应 codespace 的使用方式**

容器的轻量环境和全量环境共有部分:
1. 安装 black 和 isort 包
2. 调整 VS Code 设置,取消先前(对 markdown 文件单独指定 markdownlint 扩展作为格式化工具)的错误设置,现在 markdown 文件仍然使用默认的 prettier 扩展作为格式化工具
3. 引入 markdown-all-in-one 扩展作为语法提示工具
4. 将 node_modules 和 3rdparty 排除在 VS Code 的文本的搜索路径之外

容器的全量环境部分:
1. 为 tools 下的所有 python 脚本安装依赖
2. 使用 tools/maadeps-download.py 下载 maadeps,且将必要二进制文件软链接到 /usr/local/bin/
3. 使用 apt 安装 cmake 和 clangd-20,将后者通过 update-alternatives 设置为系统 clangd 的默认版本
4. 使用 cmake tools 扩展,并按照 Linux 编译方法进行配置
5. 使用 clang-format 作为 c/cpp 的格式化工具,clang-format 程序主体来自 maadeps(已经软链接到 /usr/local/bin/)
6. 使用 clangd 作为 c/cpp 的语法提示工具
7. 将 MaaDeps、install 和 build 排除在 VS Code 的文本搜索路径之外

其它手动调整:
1. 更新文档站的 package.json,指定 pnpm 包管理器的版本
2. 手动保证 markdown 文件中的列表前后有空行(注意到 MarkdownLint 官方规则不一定能精准定位所有“列表前后空行”的问题,详见:https://github.com/DavidAnson/markdownlint/blob/main/doc/Rules.md#md032---lists-should-be-surrounded-by-blank-lines )
3. 修改了部分 markdown 文件中的 json 代码块的语法问题
   **注意:相同的问题并未全部发现,仅修改了两处**
4. 在 tools 目录中,一处 python 脚本的包名误用(本地包名和某个 pip 包重名),这里修改了相应代码
5. 在 tools 目录中,一处 python 脚本使用了弃用的包 cchardet 的问题,这里更换了推荐使用的功能相近的包并修改了相应代码

自动化脚本提交的修改:
1. 自动格式化了大量 tools 中的 python 脚本
2. 自动格式化了大量 docs 中的 markdown 文件

Commits:

* chore: pre-commit引入black和isort规范py文件

* chore: Auto update by pre-commit hooks [skip changelog]

* chore: devcontainer添加isort扩展,排序python导入

* chore: pre-commit任务命名及更名

* style: isort fix

* chore: Auto update by pre-commit hooks [skip changelog]

* chore: 更新pre-commit的hook版本

* fix: 模块名与第三方库重名,大忌

* chore: 容器构建时额外安装isort

* docs: md -> markdown

* chore: 容器安装python包和maadeps

* fix: 修复过时python包

* chore: 指定pnpm版本

* chore: container支持选择轻量环境

* chore: 去掉rust

* chore: add plain env

* chore: 使用clangd语言服务器

* chore: 无需单独设置markdown的格式化工具

* chore: 更新安装的clangd版本

* docs: 简易文档适配

* docs: 在仓库README中重新编排codespaces相关指引

* chore: Auto update by pre-commit hooks [skip changelog]

* style: 调整缩进

* chore: 格式化工具不用特意排除被gitignore忽略的文件

* chore: sh文件在gitattributes中单列一类

* chore: 格式化docs下的markdown文件

* chore: 暂时不修改md文件中的代码块

* style: 人为明确markdown中的部分列表相关格式

* docs: 补上部分markdown的json代码块中缺失的逗号

* chore: Auto update by pre-commit hooks [skip changelog]

* chore: Auto update by pre-commit hooks [skip changelog]

* fix: 补上tools的服务器排序相关代码中缺失的逗号

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* chore: 使用maadeps的clangd

* build: 更新maadeps工具链版本

* style: prettier fix

* revert: 还原maadeps版本

* revert: 取消使用maadeps的clangd依赖,改用系统apt安装

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-09-30 19:39:48 +08:00
github-actions[bot]
22faefe71a chore: Auto Update Game Resources - 2025-09-30
https://github.com/MaaAssistantArknights/MaaAssistantArknights/actions/runs/18121756589

[skip changelog]
2025-09-30 07:09:27 +00:00
uye
7d080de077 Release v5.26.0 (#14261) 2025-09-30 14:21:11 +08:00
github-actions[bot]
cc65a68384 docs: Auto Update Changelogs of v5.26.0 (#14262)
* docs: Auto Generate Changelog of Release v5.26.0

* docs: Update CHANGELOG for v5.26.0 enhancements and fixes

* docs: Update CHANGELOG with recent fixes and optimizations

* docs: 更新 CHANGELOG,添加次生预案支持和自动肉鸽优化说明

* docs: 修正 CHANGELOG 中关于次生预案的描述格式

* docs: 更新 CHANGELOG,添加「次生预案」和自动肉鸽的提示信息

* docs: 修正 CHANGELOG 中关于次生预案的描述,优化提示信息

* docs: 更新 CHANGELOG,修正次生预案部分的描述,优化资源点数说明

* docs: 修正 CHANGELOG 中关于次生预案提示信息的描述格式

* docs: 更新 CHANGELOG,完善次生预案功能描述,增加资源点数和材料信息

* docs: Revise CHANGELOG for recent updates and fixes

Updated the changelog to reflect changes in recruitment strategy, settings guide improvements, and documentation website redesign.

* docs: Revise CHANGELOG for new features and fixes

Updated the changelog to reflect changes in the '次生预案' feature and adjustments in the automatic meat pigeon recruitment strategy.

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: uye <99072975+ABA2396@users.noreply.github.com>
Co-authored-by: AnnAngela <naganjue@vip.qq.com>
2025-09-30 14:20:54 +08:00
萨拉托加
0bb19a7376 fix: 水月肉鸽委托任务完成检测优先级过低 2025-09-30 13:59:19 +08:00
Weiyou Wang
ea6540cf6b fix: 商店刷新两步走 (#14201)
* fix: 商店刷新两步走

* chore: Auto update by pre-commit hooks [skip changelog]

* refactor: buy once only when both steps succeed (suggested by status102)

Co-Authored-By: Status102 <102887808+status102@users.noreply.github.com>

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Status102 <102887808+status102@users.noreply.github.com>
2025-09-29 17:20:32 +08:00
萨拉托加
df75025dc5 perf: 调整界园肉鸽招募策略 (#14255) 2025-09-29 12:32:25 +08:00
Rbqwow
7ab8994ed8 docs: 更新文档 (#14236)
* docs: 补充自动战斗前提

* docs: 自动战斗傀影开局添加丰川祥子

* docs: 更新肉鸽闪断处理相关描述

* chore: Auto update by pre-commit hooks [skip changelog]

* docs: 更新肉鸽文档

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: 萨拉托加 <151550168+Saratoga-Official@users.noreply.github.com>
2025-09-29 12:29:40 +08:00
Manicsteiner
a263b62e63 feat: 萨卡兹肉鸽 待诉说的故事 二次选择 (#14246) 2025-09-29 12:21:24 +08:00
萨拉托加
bf7b2e633b fix: 水月肉鸽商店刷新延迟不够
fix #14256
2025-09-29 10:49:25 +08:00
github-actions[bot]
65b84f5dbd chore: Auto Update Game Resources - 2025-09-28
https://github.com/MaaAssistantArknights/MaaAssistantArknights/actions/runs/18079189511

[skip changelog]
2025-09-28 20:08:28 +00:00
Manicsteiner
347f1e191e chore: YostarJP roguelike edits (#14252) 2025-09-28 21:00:23 +02:00
uye
7905eb9fed fix: 按钮显示文字错误 2025-09-28 13:55:30 +08:00
萨拉托加
3a6c49de0c fix: 次生预案模拟器卡了容易点过头 2025-09-28 09:38:03 +08:00
Hao Guan
0be1253334 ci: update macOS runner 2025-09-27 23:29:43 +08:00
Hao Guan
a10ab607b0 chore(mac): 新图标和界面风格 2025-09-27 22:24:14 +08:00
Lancarus
45649de131 perf: 优化界园肉鸽部分关卡策略 (#14244)
* perf: 优化界园肉鸽部分关卡策略

* fix: 按照建议修改

* chore: Auto update by pre-commit hooks [skip changelog]

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2025-09-27 20:03:03 +08:00
uye
c3ebfce07b feat: mac 支持次生预案 2025-09-27 14:59:39 +08:00
Constrat
a57e5cf98a fix: clang 2025-09-26 21:54:06 +02:00
uye
78ff33d6f0 fix: 怎么还有人在用 adb input 2025-09-27 00:32:11 +08:00
uye
a64bfc5ba3 perf: 优化次生预案执行速度 2025-09-26 23:21:22 +08:00
369 changed files with 34208 additions and 5451 deletions

View File

@@ -17,11 +17,12 @@ RUN wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -
# Configure conda environment
RUN eval "$(conda shell.bash hook)" \
&& conda create -n maa python=$PYTHON_VERSION -y \
&& conda create -n maa \
&& conda activate maa \
&& conda install -y conda-forge::nodejs=$NODEJS_VERSION \
&& pip install pre-commit black \
&& npm install -g pnpm
&& conda install -y \
python=$PYTHON_VERSION \
conda-forge::nodejs=$NODEJS_VERSION \
&& pip install pre-commit black isort
# Finalize conda setup
RUN conda init \

View File

@@ -0,0 +1,64 @@
// For format details, see https://aka.ms/devcontainer.json. For config options, see the
// README at: https://github.com/devcontainers/templates/tree/main/src/javascript-node
{
"name": "MAA Docs Env (Light)",
// Or use a Dockerfile or Docker Compose file. More info: https://containers.dev/guide/dockerfile
// "image": "mcr.microsoft.com/devcontainers/base:ubuntu",
"build": {
"dockerfile": "Dockerfile"
},
// Features to add to the dev container. More info: https://containers.dev/features.
// "features": {},
// Use 'forwardPorts' to make a list of ports inside the container available locally.
"forwardPorts": [3001],
// Use 'postCreateCommand' to run commands after the container is created.
"postCreateCommand": "bash .devcontainer/0/post-create.sh",
// Configure tool-specific properties.
"customizations": {
"vscode": {
"extensions": [
"nekosu.maa-support",
"ms-python.python",
"ms-python.black-formatter",
"ms-python.isort",
"esbenp.prettier-vscode",
"DavidAnson.vscode-markdownlint",
"yzhang.markdown-all-in-one",
"vue.volar",
"mkxml.vscode-filesize"
],
"settings": {
// Editor formatting
"editor.formatOnSave": true,
"editor.defaultFormatter": "esbenp.prettier-vscode",
// Language-specific formatting
"[python]": {
"editor.defaultFormatter": "ms-python.black-formatter",
"editor.codeActionsOnSave": {
"source.organizeImports": "explicit"
}
},
// Python formatting and linting
"isort.args": ["--profile", "black"],
// Python runtime
"python.terminal.launchArgs": ["-u"],
"python.defaultInterpreterPath": "/home/vscode/miniconda/envs/maa/bin/python",
"python.terminal.activateEnvironment": false,
// Performance optimizations
"search.exclude": {
"**/node_modules": true,
"**/3rdparty": true
}
}
}
}
// Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root.
// "remoteUser": "root"
}

View File

@@ -4,18 +4,13 @@ WORKSPACE=$(pwd)
# conda activate maa
echo "===================="
echo "Setting up git safe.directory for $WORKSPACE and its submodules..."
cd "$WORKSPACE"
echo "Setting up git safe.directory for $WORKSPACE and its submodules..."
git config --global --add safe.directory "$WORKSPACE"
git submodule foreach --recursive 'git config --global --add safe.directory "$toplevel/$path"'
echo "===================="
cd "$WORKSPACE"
echo "Installing dependencies for python..."
# pip install -r tools/.../requirements.txt
# pip install -r tools/.../requirements-dev.txt
echo "===================="
echo "Installing dependencies for nodejs..."
cd "$WORKSPACE"/docs
echo "Installing node modules..."
npm install -g pnpm
pnpm install --frozen-lockfile

View File

@@ -0,0 +1,39 @@
FROM mcr.microsoft.com/devcontainers/base:ubuntu
USER vscode
ENV CONDA_DIR=/home/vscode/miniconda
ENV PATH="$CONDA_DIR/bin:$PATH"
ARG CLANGD_VERSION=20
ARG PYTHON_VERSION=3.12
ARG NODEJS_VERSION=24
# Install system dependencies
RUN sudo apt update \
&& sudo apt upgrade -y \
&& sudo apt install -y \
cmake clangd-${CLANGD_VERSION}
RUN sudo update-alternatives --install /usr/bin/clangd clangd /usr/bin/clangd-${CLANGD_VERSION} 100
# Install Miniconda
RUN wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O ~/miniconda.sh \
&& bash ~/miniconda.sh -b -p ${CONDA_DIR} \
&& rm ~/miniconda.sh \
&& conda tos accept --override-channels --channel https://repo.anaconda.com/pkgs/main \
&& conda tos accept --override-channels --channel https://repo.anaconda.com/pkgs/r
# Configure conda environment
RUN eval "$(conda shell.bash hook)" \
&& conda create -n maa \
&& conda activate maa \
&& conda install -y \
python=${PYTHON_VERSION} \
conda-forge::nodejs=${NODEJS_VERSION} \
&& pip install pre-commit black isort
# Finalize conda setup
RUN conda init \
&& conda config --set auto_activate false \
&& echo "conda activate maa" >> ~/.bashrc

View File

@@ -0,0 +1,83 @@
// For format details, see https://aka.ms/devcontainer.json. For config options, see the
// README at: https://github.com/devcontainers/templates/tree/main/src/javascript-node
{
"name": "MAA Core Env (Full)",
// Or use a Dockerfile or Docker Compose file. More info: https://containers.dev/guide/dockerfile
// "image": "mcr.microsoft.com/devcontainers/base:ubuntu",
"build": {
"dockerfile": "Dockerfile"
},
// Features to add to the dev container. More info: https://containers.dev/features.
// "features": {},
// Use 'forwardPorts' to make a list of ports inside the container available locally.
"forwardPorts": [3001],
// Use 'postCreateCommand' to run commands after the container is created.
"postCreateCommand": "bash .devcontainer/1/post-create.sh",
// Configure tool-specific properties.
"customizations": {
"vscode": {
"extensions": [
"nekosu.maa-support",
"ms-vscode.cmake-tools",
"xaver.clang-format",
"llvm-vs-code-extensions.vscode-clangd",
"ms-python.python",
"ms-python.black-formatter",
"ms-python.isort",
"esbenp.prettier-vscode",
"DavidAnson.vscode-markdownlint",
"yzhang.markdown-all-in-one",
"vue.volar",
"mkxml.vscode-filesize"
],
"settings": {
// Editor formatting
"editor.formatOnSave": true,
"editor.defaultFormatter": "esbenp.prettier-vscode",
// Language-specific formatting
"[python]": {
"editor.defaultFormatter": "ms-python.black-formatter",
"editor.codeActionsOnSave": {
"source.organizeImports": "explicit"
}
},
"[cpp]": {
"editor.defaultFormatter": "xaver.clang-format"
},
"[c]": {
"editor.defaultFormatter": "xaver.clang-format"
},
// Python formatting and linting
"isort.args": ["--profile", "black"],
// Python runtime
"python.terminal.launchArgs": ["-u"],
"python.defaultInterpreterPath": "/home/vscode/miniconda/envs/maa/bin/python",
"python.terminal.activateEnvironment": false,
// CMake settings
"cmake.configureSettings": {
"BUILD_DEBUG_DEMO": "ON",
"CMAKE_TOOLCHAIN_FILE": "MaaDeps/cmake/maa-x64-linux-toolchain.cmake"
},
"cmake.configureOnOpen": false,
// Performance optimizations
"search.exclude": {
"**/node_modules": true,
"**/build": true,
"**/install": true,
"**/MaaDeps": true,
"**/3rdparty": true
}
}
}
}
// Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root.
// "remoteUser": "root"
}

View File

@@ -0,0 +1,42 @@
#!/bin/bash
WORKSPACE=$(pwd)
# conda activate maa
echo "===================="
cd "$WORKSPACE"
echo "Setting up git safe.directory for $WORKSPACE and its submodules..."
git config --global --add safe.directory "$WORKSPACE"
git submodule foreach --recursive 'git config --global --add safe.directory "$toplevel/$path"'
echo "===================="
cd "$WORKSPACE"/docs
echo "Installing node modules..."
npm install -g pnpm
pnpm install --frozen-lockfile
echo "===================="
cd "$WORKSPACE"
echo "Installing Python dependencies..."
# Install Python dependencies from all tools
for req_file in tools/*/requirements.txt; do
if [ -f "$req_file" ]; then
echo "Installing from $req_file"
pip install -r "$req_file"
fi
done
for req_file in tools/*/requirements-dev.txt; do
if [ -f "$req_file" ]; then
echo "Installing from $req_file"
pip install -r "$req_file"
fi
done
echo "===================="
cd "$WORKSPACE"
echo "Installing MaaDeps..."
python tools/maadeps-download.py
# Link clang-format & clangd to /usr/local/bin for easy access
sudo ln -s $WORKSPACE/MaaDeps/x-tools/llvm/bin/clang-format /usr/local/bin/clang-format
# sudo ln -s $WORKSPACE/MaaDeps/x-tools/llvm/bin/clangd /usr/local/bin/clangd

View File

@@ -1,50 +1,5 @@
// For format details, see https://aka.ms/devcontainer.json. For config options, see the
// README at: https://github.com/devcontainers/templates/tree/main/src/javascript-node
{
"name": "MAA",
// Or use a Dockerfile or Docker Compose file. More info: https://containers.dev/guide/dockerfile
// "image": "mcr.microsoft.com/devcontainers/base:ubuntu",
"build": {
"dockerfile": "Dockerfile"
},
// Features to add to the dev container. More info: https://containers.dev/features.
// "features": {},
// Use 'forwardPorts' to make a list of ports inside the container available locally.
"forwardPorts": [3001],
// Use 'postCreateCommand' to run commands after the container is created.
"postCreateCommand": "bash .devcontainer/post-create.sh",
// Configure tool-specific properties.
"customizations": {
"vscode": {
"extensions": [
"mkxml.vscode-filesize",
"nekosu.maa-support",
"DavidAnson.vscode-markdownlint",
"esbenp.prettier-vscode",
"vue.volar",
"ms-python.python",
"ms-python.black-formatter"
],
"settings": {
// format
"editor.formatOnSave": true,
"editor.defaultFormatter": "esbenp.prettier-vscode",
"[markdown]": {
"editor.defaultFormatter": "DavidAnson.vscode-markdownlint"
},
"[python]": {
"editor.defaultFormatter": "ms-python.black-formatter"
},
// python
"python.terminal.launchArgs": ["-u"],
"python.defaultInterpreterPath": "/home/vscode/miniconda/envs/maa/bin/python",
"python.terminal.activateEnvironment": false
}
}
}
// Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root.
// "remoteUser": "root"
"name": "Plain Env (Nothing Installed)",
"image": "mcr.microsoft.com/devcontainers/base:ubuntu",
"postCreateCommand": "git config --global --add safe.directory \"$(pwd)\" && git submodule foreach --recursive 'git config --global --add safe.directory \"$toplevel/$path\"'"
}

2
.gitattributes vendored
View File

@@ -10,3 +10,5 @@
*.md text eol=lf
*.yml text eol=lf
*.yaml text eol=lf
*.sh text eol=lf

View File

@@ -338,7 +338,7 @@ jobs:
github.event.pull_request.base.repo.full_name
needs: meta
runs-on: macos-latest
runs-on: macos-26
strategy:
matrix:
arch: [arm64, x86_64]
@@ -396,7 +396,7 @@ jobs:
github.event.pull_request.base.repo.full_name
needs: [meta, macOS-Core]
runs-on: macos-latest
runs-on: macos-26
steps:
- name: Checkout code
uses: actions/checkout@v5
@@ -442,7 +442,7 @@ jobs:
api-private-key: ${{ secrets.HGUANDL_APPSTORE_KEY }}
- name: Setup Xcode Toolchain
if: true
if: false
run: |
sudo xcode-select -s /Applications/Xcode_16.1.app/Contents/Developer
@@ -575,7 +575,7 @@ jobs:
find . -type f | while read f; do mv -fvt . $f; done
- name: Release to Github
uses: softprops/action-gh-release@v2.3.3
uses: softprops/action-gh-release@v2.3.4
with:
body_path: CHANGELOG.md
files: |

View File

@@ -272,7 +272,7 @@ jobs:
- name: Update version.json date if necessary
id: update_version
run: |
./tools/ResourceUpdater/version.zsh
sh ./tools/ResourceUpdater/version.sh
- name: Setup python
if: steps.update_version.outputs.contains_png == 'True'
@@ -350,3 +350,14 @@ jobs:
# if: steps.add_files.outputs.have_commits == 'True'
# run: |
# gh workflow run release-nightly-ota -f release_body="Auto Release of Resource Updates"
- name: Create issue if failed
if: failure()
uses: actions-cool/issues-helper@v3
with:
actions: "create-issue"
title: "Failed to Update Game Resources"
body: |
${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
@MistEO @ABA2396 @Constrat

View File

@@ -59,7 +59,7 @@ jobs:
working-directory: "./docs"
- name: Upload artifact
uses: actions/upload-pages-artifact@v3
uses: actions/upload-pages-artifact@v4
with:
path: "./docs/.vuepress/dist"

View File

@@ -4,36 +4,50 @@ ci:
autofix_prs: true
repos:
- repo: https://github.com/shssoichiro/oxipng
rev: v9.1.4
rev: v9.1.5
hooks:
- id: oxipng
name: Image Compression
args: ["-q", "-o", "2", "-s", "--ng"]
- repo: https://github.com/pre-commit/mirrors-clang-format
rev: v20.1.0
rev: v21.1.1
hooks:
- id: clang-format
name: Clang-Format (MaaCore)
files: ^src/MaaCore/.*
args: ["--assume-filename", ".clang-format"]
- repo: https://github.com/rbubley/mirrors-prettier
rev: v3.5.3
rev: v3.6.2
hooks:
- id: prettier
name: prettier (config files)
name: Prettier (Config Files)
files: ^((\.github/ISSUE_TEMPLATE|resource|src|tools)/.*|\.pre-commit-config\.yaml|package-definition\.json)
types_or:
- yaml
- json
- repo: https://github.com/rbubley/mirrors-prettier
rev: v3.5.3
rev: v3.6.2
hooks:
- id: prettier
name: prettier (docs)
name: Prettier (Documentation)
files: ^docs/.*
- repo: https://github.com/psf/black
rev: 25.9.0
hooks:
- id: black
name: Black Formatter (Python)
- repo: https://github.com/pycqa/isort
rev: 6.0.1
hooks:
- id: isort
name: Isort (Python)
args: ["--profile", "black", "--filter-files"]
- repo: https://github.com/DavidAnson/markdownlint-cli2
rev: v0.17.2
rev: v0.18.1
hooks:
- id: markdownlint-cli2
name: MarkdownLint (Documentation)
files: ^docs/.*|^README\.md$
types:
- markdown
args: ["--fix", "--config", "docs/.markdownlint.yaml", "#**/node_modules"]
args: ["--fix", "--config", "docs/.markdownlint.yaml"]

View File

@@ -1,18 +1,12 @@
**/node_modules/
**/pnpm-lock.yaml
docs/**/*.md
MaaDeps/
3rdparty/
src/maa-cli
src/MaaMacGui
# website/
# docs/
resource/Arknights-Tile-Pos/
tools/OptimizeTemplates/optimize_templates.json
CITATION.cff
CHANGELOG.md
## FUCK FUCK

View File

@@ -1,31 +1,136 @@
## v5.26.0-beta.1
## v5.26.1
### 刺身鱼案,启动! | Highlight
这个版本我们上线了「次生预案」的初步支持,并且再次对自动肉鸽进行了大量优化。
#### 次生预案部分
你现在可以在 「小工具 - 小游戏」 部分找到 「RM-次生预案」 选项,在游戏的「次生预案」活动的 「前哨支点」 关卡列表里,找到 `RM-TR-1``RM-1`,点击 MAA 的 「Link Start!」 按钮即可开始自动刷取。
`RM-1` 支持更多资源产出,但需解锁前置要求,具体参考对应功能页描述。活动即将结束,建议尽快刷取足够启动材料并推进关卡。
**提示:** 「次生预案」玩法类似《循环勇士》,带有种田要素,越早布置生产产线,就能越早挂机产出资源。不要等到最后一天再开始刷,会来不及。
#### 自动肉鸽部分
本次我们对自动肉鸽的招募策略进行了较大幅度的调整,主要是为了提升肉鸽的通关率和稳定性。同时我们也修复了部分问题,比如傀影肉鸽无法识别四结局的问题。
#### 其他方面
我们在设置指引中新增了两个新的引导,不管你以前是否看过老的指引,这次都会再次弹出,帮助你避免因未正确配置而导致的问题。~~这下就不会有人问为什么 Linkstart 是灰的点不了了~~
我们也对文档站进行了较大幅度的改版,增加了不少新功能,提升了阅读体验,欢迎你前往查看。
----
In this version, we've added initial support for the *Rebuilding Mandate* and made significant improvements to the *Auto I.S.*.
#### [CN ONLY] *Rebuilding Mandate*
You can now find the *RM-Rebuilding Mandate* option in the *Minigames* section of the *Toolbox* menu. Within the *Rebuilding Mandate* event, locate `RM-TR-1` or `RM-1` in the *Outpost Support Point* stage list and click the *Link Start!* button to begin automated gameplay.
`RM-1` supports higher resource output but requires unlocking certain prerequisites. Please refer to the corresponding feature page for details. The event is ending soon, so it is recommended to quickly gather enough starting materials and advance through the stages.
**Tip:** *Rebuilding Mandate* is similar to *Loop Hero*, with resource-gathering elements. The sooner you set up your resource production in the stages, the sooner you can start passively generating resources. Don't wait until the last day to start farming; it will be too late.
#### *Auto I.S.*
We've made significant adjustments to the *Auto I.S.* recruitment strategy, primarily to improve the success rate and stability. We've also fixed some issues, such as the problem where the game couldn't recognize the Ending 4 in the *Phantom* Theme.
#### Other Improvements
We've added two new guides to the *Settings Guide*. No matter if you have already seen the old one before, these new guides will still pop up, helping you avoid incorrect configurations.
We've also redesigned our documentation website, adding many new features and improving the user experience. Please check it out!
----
以下是详细内容:
### 新增 | New
* 次生预案十里坡剑神 @ABA2396
* 设置指引添加更新设置 @ABA2396
* 设置指引添加性能设置 @ABA2396
* 新增 cdk 被封禁的提示信息 @ABA2396
* RM-1 (#14271) @Daydreamer114
### 改进 | Improved
* RegionOCRer 中 useRaw=false 时, 使用原图二值蒙版代替直接 OCR 二值图像 (#14276) @status102
### 修复 | Fix
* 游戏更新公招界面后无法确认招募 (#14335) @ABA2396
* 第一次访问 mirror酱 失败时错误提示 cdk 已过期 @ABA2396
* 手动关闭模拟器后未重启 MAA 时 minitouch 可能失效 @ABA2396
* 尝试修复生息演算任务识别并删除编队时卡住的问题 (#14290) @Alan-Charred
* 增强 playtools 关闭连接时的异常处理,确保套接字安全关闭 (#14280) @RainYangty
* EN IS3 encounter ocr fix MAA, EN 服水月肉鸽 事件名识别错误 bug Fixes @Constrat
* 理智药使用数量 ocr 不准确时中断使用 @status102
* 使用理智药 执行减少次数循环在 asst_stop 时缺少中断判断 @status102
* 修复因失败导致次生预算出错 (#14267) @Saratoga-Official
### 文档 | Docs
* 补充 CopilotTask 的文档 (#14319) @Alan-Charred
* 添加目录自动跳转组件并使 locale 自动生成 (#14299) @lucienshawls
* 文档站新增字符画组件 (#14270) @lucienshawls
* 将文档中指向部分文档目录的链接改为指向对应目录下的第一篇文档 (#14292) @JasonHuang79
### 其他 | Other
* 使用 `BeginAnimation` 替代 `新建 Storyboard 并添加动画` @ABA2396
* 将 mac 开发环境下的 cmake_osx 版本改为 13.4 (#14283) @Pylinx171
* 完善容器配置及依赖安装 (#14208) @lucienshawls
* run smoke test in lldb @horror-proton
* YostarJP ocr fix @Saratoga-Official
----
----
## v5.26.0
### 新增 | New
* 萨卡兹肉鸽 `待诉说的故事` 二次选择 (#14246) @Manicsteiner
* mac 支持次生预案 @ABA2396
* 次生预案十里坡剑神 @ABA2396
* 设置指引添加更新设置 @ABA2396
* 统一显示效果 @ABA2396
* 设置指引添加性能设置 @ABA2396
### 改进 | Improved
* 调整界园肉鸽招募策略 (#14255) @Saratoga-Official
* 优化界园肉鸽部分关卡策略 (#14244) @Lancarus
* 优化次生预案执行速度 @ABA2396
### 修复 | Fix
* 商店刷新两步走 (#14201) @Alan-Charred
* 水月肉鸽商店刷新延迟不够 @Saratoga-Official
* 按钮显示文字错误 @ABA2396
* 次生预案模拟器卡了容易点过头 @Saratoga-Official
* 怎么还有人在用 adb input @ABA2396
* 文档首页语言选择按钮的宽度定义方式 (#14199) @lucienshawls
* 傀影肉鸽无法识别四结局 (#14193) @Saratoga-Official
* GamePassSkip2 识别到错误的跳过 @Saratoga-Official
* 萨米肉鸽不期而遇避战 @Saratoga-Official
* clang @Constrat
* Google Play Games Developer shutdown @Constrat
* manual set resource version time @MistEO
* prettier @Constrat
### 文档 | Docs
* 补充vsc插件繁中文档 @Rbqwow
* 更新文档 (#14236) @Rbqwow @Saratoga-Official
* 补充 vsc 插件繁中文档 @Rbqwow
* 修复文档站 readme 盾换行 @Rbqwow
* 调整文档站的标题和尾注文本显示 (#14213) @lucienshawls
* 更新网页开发相关文档 (#14167) @Rbqwow @Manicsteiner
* 完善任务流程协议文档 (#13232) @zzyyyl
* 回调消息协议文档视觉更新 @SherkeyXD
* 集成文档视觉更新 @SherkeyXD
* 文档启用 b 站视频播放功能 @SherkeyXD
* 文档启用b站视频播放功能 @SherkeyXD
* 文档添加字段容器功能 @SherkeyXD
* 文档添加功能 @SherkeyXD
* 更新文档编写指南 @SherkeyXD
@@ -39,10 +144,11 @@
### 其他 | Other
* 统一显示效果 @ABA2396
* 新图标和界面风格 @hguandl
* 水月萨米肉鸽不期而遇避战 @Saratoga-Official
* 重写完成后动作仅一次的 ui 字符串 (#14196) @Rbqwow
* 重写完成后动作仅一次的ui字符串 (#14196) @Rbqwow
* 贸易站没其他好用的人再用锏 @ABA2396
* YostarJP roguelike edits (#14252) @Manicsteiner
* YostarJP Sarkaz roguelike StageEncounter (#14223) @Manicsteiner
* YostarJP sami roguelike 720p (#14210) @Manicsteiner
* YostarJP Mizuki StageEncounter (#14206) @Manicsteiner

View File

@@ -144,6 +144,24 @@ MAA 以中文(简体)为第一语言,翻译词条均以中文(简体)
[GitHub Pull Request 流程简述](https://docs.maa.plus/zh-cn/develop/development.html#github-pull-request-流程简述)
#### 想参与开发,但面对庞大的项目仓库望而却步?
请使用 GitHub Codespaces 在线开发环境,尽情尝试!
我们预置了多种不同的开发环境以供选择:
- 空白环境,裸 Linux 容器(默认)
[![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg?color=green)](https://codespaces.new/MaaAssistantArknights/MaaAssistantArknights?devcontainer_path=.devcontainer%2Fdevcontainer.json)
- 轻量环境,适合文档站前端开发
[![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg?color=green)](https://codespaces.new/MaaAssistantArknights/MaaAssistantArknights?devcontainer_path=.devcontainer%2F0%2Fdevcontainer.json)
- 全量环境,适合 MAA Core 相关开发
[![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg?color=green)](https://codespaces.new/MaaAssistantArknights/MaaAssistantArknights?devcontainer_path=.devcontainer%2F1%2Fdevcontainer.json)
#### Issue bot
请参阅 [Issue Bot 使用方法](https://docs.maa.plus/zh-cn/develop/issue-bot-usage.html)

View File

@@ -37,7 +37,7 @@ function(get_osx_architecture)
endfunction()
if(APPLE)
set(CMAKE_OSX_DEPLOYMENT_TARGET 13.3) # for to_chars
set(CMAKE_OSX_DEPLOYMENT_TARGET 13.4) # for to_chars
get_osx_architecture()
endif(APPLE)
@@ -70,4 +70,4 @@ function(create_resource_link TARGET_NAME OUTPUT_DIR)
COMMENT "Creating symlink for resource directory for ${TARGET_NAME}"
)
endif()
endfunction()
endfunction()

View File

@@ -1,2 +1 @@
**/pnpm-lock.yaml
**/*.md

View File

@@ -11,12 +11,6 @@ module.exports = {
arrowParens: 'always',
overrides: [
{
files: ['**/*.ts'],
options: {
semi: true,
},
},
{
files: ['**/*.*css'],
options: {
@@ -36,5 +30,11 @@ module.exports = {
tabWidth: 4,
},
},
{
files: ['**/*.md'],
options: {
embeddedLanguageFormatting: 'off',
},
},
],
}

View File

@@ -1,11 +1,21 @@
import { defineClientConfig } from 'vuepress/client';
import { defineClientConfig } from 'vuepress/client'
import ImageGrid from './components/ImageGrid.vue';
import { getAsciiArt } from './plugins/asciiArt.mts'
import './styles/index.scss';
import AsciiArt from './components/AsciiArt.vue'
import ImageGrid from './components/ImageGrid.vue'
import Redirect from './components/Redirect.vue'
import './styles/index.scss'
export default defineClientConfig({
enhance: ({ app }) => {
app.component('ImageGrid', ImageGrid);
app.component('AsciiArt', AsciiArt)
app.component('ImageGrid', ImageGrid)
app.component('Redirect', Redirect)
// 输出一个随机的字符画
const art = getAsciiArt(undefined, 'auto', 'console')
console.log('%c' + art, 'white-space: pre;')
},
});
})

View File

@@ -0,0 +1,163 @@
<template>
<div ref="wrapper" class="ascii-wrapper">
<pre ref="pre" class="ascii-art">{{ art }}</pre>
</div>
</template>
<script setup lang="ts">
import { ref, onMounted, onBeforeUnmount, computed } from 'vue'
import { getAsciiArt, ThemeType } from '../plugins/asciiArt.mts'
// -------- Props --------
interface AsciiArtProps {
name?: string
theme?: ThemeType
}
const props = defineProps<AsciiArtProps>()
// -------- Refs --------
const wrapper = ref<HTMLElement>()
const pre = ref<HTMLElement>()
// -------- Data --------
const art = computed(() => getAsciiArt(props.name, props.theme))
let observer: ResizeObserver | null = null
// 锁定状态下不能增加 fontSize
let isScaleLocked = false
function scaleFont(
currentFontSize: number,
currentWidth: number,
targetWidth: number,
): { newFontSize: number; newLineHeight: number } {
let newFontSize: number
if (isScaleLocked && currentWidth <= targetWidth) {
// 锁定状态不自动放大字号
newFontSize = currentFontSize
} else {
// 此次调整依旧
if (currentWidth > targetWidth) {
// 设置锁定状态防止立刻回弹
isScaleLocked = true
}
// 注意font-size 不要使用小数!
// iOS系统浏览器会用“这个小数”来渲染宽度
// 但是会用“这个小数无条件舍去所得的整数”来渲染高度,
// 导致字符画变扁。
const ratio = targetWidth / currentWidth
// 无条件舍去
newFontSize = ratio !== Infinity ? Math.floor(currentFontSize * ratio) : currentFontSize
}
return {
newFontSize: newFontSize,
newLineHeight: newFontSize, // 字符画的行高与字体大小保持一致
}
}
function adjustLayout() {
if (!wrapper.value || !pre.value) return
const currentFontSize = parseFloat(getComputedStyle(pre.value).fontSize)
const currentWidth = pre.value.scrollWidth
const targetWidth = wrapper.value.clientWidth
// 计算新的值
const { newFontSize, newLineHeight } = scaleFont(currentFontSize, currentWidth, targetWidth)
// 应用到字符画元素
pre.value.style.fontSize = newFontSize + 'px'
pre.value.style.lineHeight = newLineHeight + 'px'
}
function waitForStableScrollWidth(
el: HTMLElement,
stableThreshold: number, // 若连续 stableThreshold 次测量所得宽度值均相同,则认为已经稳定
timeoutThreshold: number, // 若在 timeoutThreshold 次测量后仍未稳定,则记为超时
): Promise<boolean> {
return new Promise<boolean>((resolve) => {
let totalCount = 0
let stableCount = 0
let lastWidth = -1
const stableCheck = () => {
totalCount++
const currentWidth = el.scrollWidth
if (currentWidth === lastWidth) {
stableCount++
} else {
// 宽度每变一次就调整一次
adjustLayout()
lastWidth = currentWidth
stableCount = 0
}
if (stableCount >= stableThreshold) {
resolve(true)
// 只resolve不return继续监测直到超时
// 因为首次加载时,字体完全渲染可能需要较长时间
// 先继续初始化进程,同时持续监测,宽度变化后立即触发一次调整
// return
}
if (totalCount >= timeoutThreshold) {
resolve(false)
return
}
requestAnimationFrame(stableCheck)
}
requestAnimationFrame(stableCheck)
})
}
onMounted(async () => {
if (!wrapper.value || !pre.value) return
// 等待等宽字体加载完毕
// 若连续 11 次测量所得宽度值均相同,则认为已经稳定
// 若在 451 次测量后仍未稳定,则记为超时
// 这两个数字是“随机”拟定的
const isStable = await waitForStableScrollWidth(pre.value, 11, 451)
if (!isStable) {
// 超时则不调整字符画的字体大小
pre.value.style.overflowX = 'auto'
return
}
// 监听 wrapper 的宽度或高度变化
observer = new ResizeObserver(adjustLayout)
observer.observe(wrapper.value)
window.addEventListener('resize', () => {
isScaleLocked = false
adjustLayout() // 解锁后立即尝试重新调整字体
})
})
onBeforeUnmount(() => {
if (observer && wrapper.value) {
observer.unobserve(wrapper.value)
observer.disconnect()
}
})
</script>
<style scoped>
.ascii-wrapper {
display: flex;
justify-content: center;
}
.ascii-art {
display: block;
white-space: pre;
margin: 0 auto;
line-height: 1;
max-width: 100%;
overflow: hidden;
font-family: 'JetBrains Mono', monospace;
}
</style>

View File

@@ -0,0 +1,25 @@
<template />
<script setup lang="ts">
import { onMounted } from 'vue'
import { useRouter, useRoute } from 'vuepress/client'
interface Props {
to?: string
}
const props = defineProps<Props>()
const route = useRoute()
const router = useRouter()
function resolvePath(to: string) {
const target = new URL(to, 'http://example.com' + route.path) // 使用一个虚拟的基础 URL
return target.pathname
}
onMounted(() => {
if (!props.to) return
const targetPath = resolvePath(props.to)
router.replace(targetPath)
})
</script>

View File

@@ -1,11 +1,13 @@
import { viteBundler } from '@vuepress/bundler-vite';
import { defineUserConfig } from 'vuepress';
import { googleAnalyticsPlugin } from '@vuepress/plugin-google-analytics';
import { plumeTheme } from 'vuepress-theme-plume';
import { viteBundler } from '@vuepress/bundler-vite'
import { defineUserConfig } from 'vuepress'
import { googleAnalyticsPlugin } from '@vuepress/plugin-google-analytics'
import { plumeTheme } from 'vuepress-theme-plume'
import DocSearchConfig from './plugins/search';
import { genSiteLocales } from './navigation/genLocales'
const isProd = process.env.NODE_ENV === 'production';
import DocSearchConfig from './plugins/search'
const isProd = process.env.NODE_ENV === 'production'
export default defineUserConfig({
base: '/',
@@ -15,33 +17,7 @@ export default defineUserConfig({
host: '0.0.0.0',
port: 3001,
locales: {
'/zh-cn/': {
lang: 'zh-CN',
title: 'MAA 文档站',
description: '文档',
},
'/zh-tw/': {
lang: 'zh-TW',
title: 'MAA 文件站',
description: '文件',
},
'/en-us/': {
lang: 'en-US',
title: 'MAA Documentation Site',
description: 'Documentation',
},
'/ja-jp/': {
lang: 'ja-JP',
title: 'MAA ドキュメントサイト',
description: 'ドキュメント',
},
'/ko-kr/': {
lang: 'ko-KR',
title: 'MAA 문서 사이트',
description: '문서',
},
},
locales: genSiteLocales(),
head: [
['link', { rel: 'preconnect', href: 'https://fonts.googleapis.com' }],
@@ -132,4 +108,4 @@ export default defineUserConfig({
id: 'G-FJQDKG394Z',
}),
],
});
})

View File

@@ -1,5 +1,7 @@
/// <reference types="vite/client" />
declare module '*.vue' {
import { DefineComponent } from 'vue';
const component: DefineComponent<{}, {}, any>;
export default component;
import { DefineComponent } from 'vue'
const component: DefineComponent<{}, {}, any>
export default component
}

View File

@@ -1,19 +0,0 @@
import { defineNavbarConfig } from 'vuepress-theme-plume';
export const enusNavbar = defineNavbarConfig([
{
text: 'User Manual',
icon: 'mdi:user',
link: '/en-us/manual/newbie.html',
},
{
text: 'Development Docs',
icon: 'ph:code-bold',
link: '/en-us/develop/development.html',
},
{
text: 'Protocol Docs',
icon: 'basil:document-solid',
link: '/en-us/protocol/integration.html',
},
]);

View File

@@ -1,5 +0,0 @@
export * from './zh-cn';
export * from './zh-tw';
export * from './en-us';
export * from './ja-jp';
export * from './ko-kr';

View File

@@ -1,19 +0,0 @@
import { defineNavbarConfig } from 'vuepress-theme-plume';
export const jajpNavbar = defineNavbarConfig([
{
text: '使用説明',
icon: 'mdi:user',
link: '/ja-jp/manual/newbie.html',
},
{
text: '開発関連',
icon: 'ph:code-bold',
link: '/ja-jp/develop/development.html',
},
{
text: 'プロトコルドキュメント',
icon: 'basil:document-solid',
link: '/ja-jp/protocol/integration.html',
},
]);

View File

@@ -1,19 +0,0 @@
import { defineNavbarConfig } from 'vuepress-theme-plume';
export const kokrNavbar = defineNavbarConfig([
{
text: '사용자 설명서',
icon: 'mdi:user',
link: '/ko-kr/manual/newbie.html',
},
{
text: '개발 문서',
icon: 'ph:code-bold',
link: '/ko-kr/develop/development.html',
},
{
text: '프로토콜 문서',
icon: 'basil:document-solid',
link: '/ko-kr/protocol/integration.html',
},
]);

View File

@@ -1,19 +0,0 @@
import { defineNavbarConfig } from 'vuepress-theme-plume';
export const zhcnNavbar = defineNavbarConfig([
{
text: '用户手册',
icon: 'mdi:user',
link: '/zh-cn/manual/newbie.html',
},
{
text: '开发文档',
icon: 'ph:code-bold',
link: '/zh-cn/develop/development.html',
},
{
text: '协议文档',
icon: 'basil:document-solid',
link: '/zh-cn/protocol/integration.html',
},
]);

View File

@@ -1,19 +0,0 @@
import { defineNavbarConfig } from 'vuepress-theme-plume';
export const zhtwNavbar = defineNavbarConfig([
{
text: '用戶說明書',
icon: 'mdi:user',
link: '/zh-tw/manual/newbie.html',
},
{
text: '開發文件',
icon: 'ph:code-bold',
link: '/zh-tw/develop/development.html',
},
{
text: '協議文件',
icon: 'basil:document-solid',
link: '/zh-tw/protocol/integration.html',
},
]);

View File

@@ -0,0 +1,33 @@
import { SiteLocaleConfig, LocaleConfig } from 'vuepress'
import { ThemeLocaleData } from 'vuepress-theme-plume'
import { locales } from './i18n'
import { genNavigationComponents } from './genNavigationComponents'
export function genSiteLocales(): SiteLocaleConfig {
const siteLocales: SiteLocaleConfig = {}
for (const locale of locales) {
siteLocales[`/${locale.name}/`] = {
lang: locale.htmlLang,
title: locale.siteTitle,
description: locale.siteDescription,
}
}
return siteLocales
}
export function genThemeLocales(): LocaleConfig<ThemeLocaleData> {
const themeLocales: LocaleConfig<ThemeLocaleData> = {}
for (const locale of locales) {
const navigationComponents = genNavigationComponents(locale)
themeLocales[`/${locale.name}/`] = {
navbar: navigationComponents.navbar,
notes: {
dir: locale.name,
link: `/${locale.name}/`,
notes: navigationComponents.notes,
},
}
}
return themeLocales
}

View File

@@ -0,0 +1,158 @@
import * as fs from 'fs'
import * as path from 'path'
import { default as matter } from 'gray-matter'
import { defineNoteConfig, ThemeNavItem, ThemeNote, ThemeSidebarItem } from 'vuepress-theme-plume'
import { Locale } from './i18n'
interface MetaData {
baseName: string
order: number
title: string
icon: string
index: boolean
}
interface NavigationComponents {
navbar: ThemeNavItem[]
notes: ThemeNote[]
}
function getMetaData(dir: string, entry: fs.Dirent): MetaData | null {
const currentPath = path.join(dir, entry.name)
if (!fs.existsSync(currentPath)) {
return null
}
let mdFilePath = ''
if (entry.isDirectory()) {
mdFilePath = path.join(currentPath, 'README.md')
} else if (entry.isFile() && entry.name.endsWith('.md') && entry.name.toLowerCase() !== 'readme.md') {
mdFilePath = currentPath
} else {
return null
}
if (!fs.existsSync(mdFilePath)) {
return null
}
const fileContent = fs.readFileSync(mdFilePath, 'utf-8')
const meta = matter(fileContent).data ?? {}
// 文件名,不含扩展名
const baseName = path.parse(entry.name).name
// 获取顺序目录的order在meta.dir.order里文件的order在meta.order里默认值为一个大数
const order = Number((entry.isDirectory() ? meta?.dir?.order : meta?.order) ?? Number.MAX_SAFE_INTEGER)
// 获取标题先从matter里找title再用正则获取一级标题最后fallback到文件名不含扩展名
const title = String(meta?.title ?? RegExp('# (.+)').exec(fileContent)?.[1] ?? baseName)
// 获取图标
const icon = String(meta?.icon ?? '')
// 是否添加到索引文件永远为true目录则看meta.index默认true
const index = entry.isDirectory() ? (Boolean(meta?.index) ?? true) : true
return {
baseName: baseName,
order: order,
title: title,
icon: icon,
index: index,
}
}
export function genNavigationComponents(
locale: Locale,
baseDir = path.resolve(__dirname, '../../'),
): NavigationComponents {
// 将内容与对应顺序进行包装
type NavbarItem = ThemeNavItem
type SidebarItem = ThemeNote | ThemeSidebarItem | string
interface IntermediateNavigationComponents {
navbar: NavbarItem[]
notes: SidebarItem[]
}
interface WrappedNavbarItem {
content: NavbarItem
order: number
}
interface WrappedSidebarItem {
content: SidebarItem
order: number
}
// 进入指定语言目录即docs/<i18n>/
const langDir = path.join(baseDir, locale.name)
// 递归获取目录和文件
function getItems(dir: string, isRoot: boolean): IntermediateNavigationComponents {
const navbarItemsWithOrder: WrappedNavbarItem[] = []
const sidebarItemsWithOrder: WrappedSidebarItem[] = []
// 获取所有非隐藏文件和目录
const entries = fs.readdirSync(dir, { withFileTypes: true }).filter((e) => !e.name.startsWith('.'))
for (const entry of entries) {
const metaData = getMetaData(dir, entry)
if (!metaData) {
continue
}
let sidebarItem: SidebarItem
let navbarItem: NavbarItem
if (entry.isDirectory()) {
// 递归获取子目录内容
const children = getItems(path.join(dir, entry.name), false)
if (isRoot) {
// 一级目录,作为“专题”
navbarItem = {
text: metaData.title,
icon: metaData.icon,
link: `/${locale.name}/${metaData.baseName}/`,
}
// 只在当前条件下才会有navbarItem
navbarItemsWithOrder.push({ content: navbarItem, order: metaData.order })
sidebarItem = defineNoteConfig({
dir: metaData.baseName,
link: `/${metaData.baseName}/`,
text: metaData.title,
sidebar: children.notes,
})
} else {
// 非一级目录,作为可折叠的子目录
sidebarItem = {
text: metaData.title,
// 只有当目录设置了index: true时才生成链接否则点击时不跳转、只切换折叠状态
link: metaData.index ? `${metaData.baseName}/` : null,
icon: metaData.icon,
// 目前没有文档使用了这个特性,故不处理
// badge: undefined,
collapsed: true,
// 前面不能加斜杠,必须用相对路径
prefix: `${metaData.baseName}/`,
items: children.notes,
}
}
} else if (entry.isFile() && entry.name.endsWith('.md') && entry.name.toLowerCase() !== 'readme.md') {
// 普通文件,取完整文件名作为链接
sidebarItem = entry.name
}
sidebarItemsWithOrder.push({ content: sidebarItem, order: metaData.order })
}
// 当前dir的内容读取完毕进行排序并返回返回时丢弃order
if (isRoot) {
navbarItemsWithOrder.sort((a, b) => a.order - b.order)
}
sidebarItemsWithOrder.sort((a, b) => a.order - b.order)
return {
navbar: navbarItemsWithOrder.map((i) => i.content),
notes: sidebarItemsWithOrder.map((i) => i.content),
}
}
// 递归起点只有这里是一级目录isRoot传true
return getItems(langDir, true) as NavigationComponents
}

View File

@@ -0,0 +1,45 @@
export interface Locale {
name: string
// displayName: string
htmlLang: string
siteTitle: string
siteDescription: string
}
export const locales: Locale[] = [
{
name: 'zh-cn',
// displayName: '简体中文',
htmlLang: 'zh-CN',
siteTitle: 'MAA 文档站',
siteDescription: '文档',
},
{
name: 'zh-tw',
// displayName: '繁體中文',
htmlLang: 'zh-TW',
siteTitle: 'MAA 文件站',
siteDescription: '文件',
},
{
name: 'en-us',
// displayName: 'English',
htmlLang: 'en-US',
siteTitle: 'MAA Documentation Site',
siteDescription: 'Documentation',
},
{
name: 'ja-jp',
// displayName: '日本語',
htmlLang: 'ja-JP',
siteTitle: 'MAA ドキュメントサイト',
siteDescription: 'ドキュメント',
},
{
name: 'ko-kr',
// displayName: '한국어',
htmlLang: 'ko-KR',
siteTitle: 'MAA 문서 사이트',
siteDescription: '문서',
},
]

View File

@@ -1,8 +0,0 @@
import { defineNotesConfig } from 'vuepress-theme-plume';
import { genNotes } from './genSidebar';
export const enusNotes = defineNotesConfig({
dir: 'en-us',
link: '/en-us/',
notes: genNotes('en-us'),
});

View File

@@ -1,119 +0,0 @@
import * as fs from 'fs';
import * as path from 'path';
import * as matterModule from 'gray-matter';
import { defineNoteConfig, ThemeNote, ThemeSidebarItem } from 'vuepress-theme-plume';
const matter = (matterModule as any).default;
interface MetaData {
baseName: string;
order: number;
title: string;
icon: string;
index: boolean;
}
function getMetaData(dir: string, entry: fs.Dirent): MetaData | null {
const currentPath = path.join(dir, entry.name);
if (!fs.existsSync(currentPath)) {
return null;
}
let mdFilePath = '';
if (entry.isDirectory()) {
mdFilePath = path.join(currentPath, 'README.md');
} else if (entry.isFile() && entry.name.endsWith('.md') && entry.name.toLowerCase() !== 'readme.md') {
mdFilePath = currentPath;
} else {
return null;
}
if (!fs.existsSync(mdFilePath)) {
return null;
}
const fileContent = fs.readFileSync(mdFilePath, 'utf-8');
const meta = matter(fileContent).data ?? {};
const baseName = path.parse(entry.name).name;
// 获取顺序目录的order在meta.dir.order里文件的order在meta.order里默认值为一个大数
const order = Number((entry.isDirectory() ? meta?.dir?.order : meta?.order) ?? Number.MAX_SAFE_INTEGER);
// 获取标题先从matter里找title再用正则获取一级标题最后fallback到文件名不含扩展名
const title = String(meta?.title ?? RegExp('# (.+)').exec(fileContent)?.[1] ?? baseName);
// 获取图标
const icon = String(meta?.icon ?? '');
// 是否作为索引页文件永远为true目录则看meta.index默认true
const index = entry.isDirectory() ? (Boolean(meta?.index) ?? true) : true;
return {
baseName: baseName,
order: order,
title: title,
icon: icon,
index: index,
};
}
export function genNotes(lang: string, baseDir = path.resolve(__dirname, '../../')): ThemeNote[] {
// 进入指定语言目录即docs/<i18n>/
const langDir = path.join(baseDir, lang);
// 递归获取目录和文件
function getItems(dir: string, isRoot: boolean): any[] {
// 将内容与对应顺序进行包装
interface Wrapped {
content: ThemeNote | ThemeSidebarItem | string;
order: number;
}
let itemsWithOrder: Wrapped[] = [];
// 获取所有非隐藏文件和目录
const entries = fs.readdirSync(dir, { withFileTypes: true }).filter((e) => !e.name.startsWith('.'));
for (const entry of entries) {
const metaData = getMetaData(dir, entry);
if (!metaData) {
continue;
}
if (entry.isDirectory()) {
// 递归获取子目录内容
const children = getItems(path.join(dir, entry.name), false);
if (isRoot) {
// 一级目录,作为“专题”
const item = defineNoteConfig({
dir: metaData.baseName,
link: `/${metaData.baseName}/`,
text: metaData.title,
sidebar: children,
});
itemsWithOrder.push({ content: item, order: metaData.order });
} else {
// 非一级目录,作为可折叠的子目录
const item: ThemeSidebarItem = {
text: metaData.title,
// 只有当目录设置了index: true时才生成链接否则点击时不跳转、只切换折叠状态
link: metaData.index ? `${metaData.baseName}/` : undefined,
icon: metaData.icon,
// 目前没有文档使用了这个特性,故不处理
// badge: undefined,
collapsed: true,
// 前面不能加斜杠,必须用相对路径
prefix: `${metaData.baseName}/`,
items: children,
};
itemsWithOrder.push({ content: item, order: metaData.order });
}
} else if (entry.isFile() && entry.name.endsWith('.md') && entry.name.toLowerCase() !== 'readme.md') {
// 普通文件,取完整文件名作为链接
const item = entry.name;
itemsWithOrder.push({ content: item, order: metaData.order });
}
}
// 当前dir的内容读取完毕进行排序并返回返回时丢弃order
itemsWithOrder.sort((a, b) => a.order - b.order);
return itemsWithOrder.map((i) => i.content);
}
// 递归起点只有这里是一级目录isRoot传true
return getItems(langDir, true);
}

View File

@@ -1,5 +0,0 @@
export * from './zh-cn';
export * from './zh-tw';
export * from './en-us';
export * from './ja-jp';
export * from './ko-kr';

View File

@@ -1,8 +0,0 @@
import { defineNotesConfig } from 'vuepress-theme-plume';
import { genNotes } from './genSidebar';
export const jajpNotes = defineNotesConfig({
dir: 'ja-jp',
link: '/ja-jp/',
notes: genNotes('ja-jp'),
});

View File

@@ -1,8 +0,0 @@
import { defineNotesConfig } from 'vuepress-theme-plume';
import { genNotes } from './genSidebar';
export const kokrNotes = defineNotesConfig({
dir: 'ko-kr',
link: '/ko-kr/',
notes: genNotes('ko-kr'),
});

View File

@@ -1,8 +0,0 @@
import { defineNotesConfig } from 'vuepress-theme-plume';
import { genNotes } from './genSidebar';
export const zhcnNotes = defineNotesConfig({
dir: 'zh-cn',
link: '/zh-cn/',
notes: genNotes('zh-cn'),
});

View File

@@ -1,8 +0,0 @@
import { defineNotesConfig } from 'vuepress-theme-plume';
import { genNotes } from './genSidebar';
export const zhtwNotes = defineNotesConfig({
dir: 'zh-tw',
link: '/zh-tw/',
notes: genNotes('zh-tw'),
});

View File

@@ -0,0 +1,52 @@
const modules = import.meta.glob<string>('../../asciiArts/*.txt', { query: '?raw', import: 'default', eager: true })
const asciiArts: Record<string, string> = {}
for (const path in modules) {
const name = path
.split('/')
.pop()
?.replace(/\.txt$/, '')!
asciiArts[name] = modules[path]
}
export type ThemeType = 'auto' | 'disable' | string
export type AsciiArtScope = 'web' | 'console'
function pickAsciiArt(arts: Record<string, string>, artFilter?: (key: string) => boolean): string {
const keys = artFilter ? Object.keys(arts).filter(artFilter) : Object.keys(arts)
if (keys.length === 0) return ''
if (keys.length === 1) return arts[keys[0]]
const randomKey = keys[Math.floor(Math.random() * keys.length)]
return arts[randomKey]
}
export function getAsciiArt(name?: string, theme: ThemeType = 'auto', scope: AsciiArtScope = 'web'): string {
let resolvedTheme: ThemeType = theme
// auto 模式
if (theme === 'auto') {
let current: string | null = null
if (scope === 'web' && typeof document !== 'undefined') {
// 浏览器中读取 HTML data-theme
current = document?.documentElement?.getAttribute('data-theme')
} else if (scope === 'console' && typeof window !== 'undefined' && window.matchMedia) {
// fallback: 检查系统首选主题
current = window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'
}
resolvedTheme = current ? current : 'disable'
}
if (resolvedTheme !== 'disable') {
// light/dark/... 模式
return name
? pickAsciiArt(asciiArts, (k) => k === name + '.' + resolvedTheme)
: pickAsciiArt(asciiArts, (k) => k.endsWith('.' + resolvedTheme))
} else {
// disable 模式
return name
? pickAsciiArt(asciiArts, (k) => k === name || k.startsWith(name + '.'))
: pickAsciiArt(asciiArts, () => true)
}
}

View File

@@ -81,4 +81,4 @@ export default {
},
},
},
};
}

View File

@@ -1,6 +1,5 @@
import { defineThemeConfig } from 'vuepress-theme-plume';
import { zhcnNavbar, zhtwNavbar, enusNavbar, jajpNavbar, kokrNavbar } from './navbar';
import { zhcnNotes, zhtwNotes, enusNotes, jajpNotes, kokrNotes } from './notes';
import { defineThemeConfig } from 'vuepress-theme-plume'
import { genThemeLocales } from './navigation/genLocales'
export default defineThemeConfig({
logo: '/images/maa-logo_512x512.png',
@@ -25,28 +24,7 @@ export default defineThemeConfig({
footer: false,
locales: {
'/zh-cn/': {
navbar: zhcnNavbar,
notes: zhcnNotes,
},
'/zh-tw/': {
navbar: zhtwNavbar,
notes: zhtwNotes,
},
'/en-us/': {
navbar: enusNavbar,
notes: enusNotes,
},
'/ja-jp/': {
navbar: jajpNavbar,
notes: jajpNotes,
},
'/ko-kr/': {
navbar: kokrNavbar,
notes: kokrNotes,
},
},
locales: genThemeLocales(),
autoFrontmatter: false,
@@ -126,4 +104,4 @@ export default defineThemeConfig({
// },
// ],
//},
});
})

View File

@@ -1,74 +1,14 @@
---
home: true
pageInfo: false
breadcrumb: false
pageLayout: home
navbar: false
sidebar: false
index: false
lastUpdated: false
editLink: false
contributors: false
prev: false
next: false
config:
- type: custom
---
!: .7:~!.
:. :?55 ?5~::~J?:
:P5YY?7~: .!JYYJG. 7P! .7Y!.
^5JJJY55PPG5!. .?JYYJYG. ~P?. ~YJ: :PY~.
^5YYYYYYY5PPPPYJ??7!!~^!?YYYYY5 :5Y. :J5!. :G&#5^
~PY5555555PPPGGPPPPPPPPJ5YJYPP???5?57::.. !5J: Y&##P:
^YPP5JJY5555PPGG55PP555PGPPPGGPPP555555555YYYJJ?77!~^::...~5P^:. P####7
!GPPJ?JYYYYY5P5PPG57:...:!5GG?~!?JJY55PPPPPPPPPPP555555555YJYPYY57!~^::... .#####!
.?PY?YYYYYYY5PP5G?..:!??JYYPYY7. .....:^~!?JJYY5PPPPPPPP555555555555YYYJJ?77!!B####P
.5Y5YYYYYY555PGY.!?JYJJYJ5P:.?5^...:.::^~^^:::... ....::::~!!7?J5P55PPPPPPPP5P55PPGG###P
.:~?P5555PPPPGY:J77YYJY55Y: ..Y5?Y5PPGGBBBBGGGGP555J!^. ^~...^!77YY5G5::~:.:!5#G
^5555PPPG5?.~5JYYYYY7: :~?5PPG5BBBBB########BBB####BGY7~~^:..:: .:^!~^~?Y7~. ~J7Y
P55PPPGY~...?5?~^:...:75PPGP5PG#####BGBBBBBBBBBB######BGGP5YJ???7!7JY?!!?YYYJYJ^^GJ..
.!?P5YPB^ ....... :!J5PGB#######BBGY7~!!7?PYJJ7!5GB#######BBGPYYYYYJJYYYYY55GB##5^...
75YYPG... .::::JPGB####BGPP55J5?^~~~~~~~~~~!!!?PGGBBBB#####GGBBBBBB##########&G^^~
Y5YYGY... ..:^7PBB#####GPJ!~~~^~?!~~~~~~~~~~~~!!J7!7?JPG###&###############&&&&#5~
.PYY5B!... ..^YBBBB####GPJ~~~~~~~?J!~~~^^~~^^~~^^~!!::^75GB####&&&&&&&&&&&&&&##BG5
^PYY5G:... .^^PB#B###GP5JJ7~~~~~~~!7?~~~^..^:^~~~!~~~!~^~~5JJ555G##&&&&&&&#BBBGGPB!
?5YYPP......:Y######G?!~!!~~~~~~~~~~!7^^^^:^~~~~~~!7~~!~^~~~~~!7?YGB###P77!:JGGGGB:
5YYYGJ..... 7#B####GP!^~!~~~~~~^::!~~!~^^~~~~!~~~~~!J!~7!^~~~~~~!?Y5GPPPP5!^PGGGGP
.7 .PYY5B^..:::^GBB####PP!^7!^^~~~^^:^7~~~!^~~~~~~7~!~~~?5J?J7:~~~~~~~!?YY5YY55PPPGGGP~^:
^5 ~PYYPG...:.!PP#####G5J!:?!^^~~~~~~~!~~~~^~~~~~!J7!??!!J!!JY~^~~~~~~~7?Y5YY55PPGGGGGB#P
^G J5YYGY ..:!5YB####G5!^~~?!~~~!~~~~~~~~~~~~~~~!!77..~7^7~ .:7^~~~~!!~JGPPGGGBGB#####GY^
^&! 5YY5B! ^J5YGB###B5!^~~~?7~~~!7~~^??!~~~!~~~~~~!! :77!.::~!^~~~7!~!Y#########BBP.
^&#~ :PYY5B:.!YYJG#####GG!~~~~7?~~~?J~7?P57~~~!7~~~!~7:..:~5PGBJ~^!^~~!J~~!7P##B###BGGG7
^&##Y^. ?P5PGGJYYYYPB#####BG!~~~~~J!~!55?7?!~J?!!77!777?::JPBBGP5J~ .!~~7J!~~!7YGG5BBGGGGB:
^&###BG555YYYY5GBBB#B#####GGJ~~~~^7775?J~!!. .~??J?7??J7..!:7?7YY~7.^!~?J!~~!!7JP55PBGGGGG
^&######BBBBB##########&#B5?!~~~~^~55~.7!~ .:~!7Y?J?!!~. :!~^~~.:^.??!!!7??YP5PPBGGGGY
^&###################&##PY7~~!~~~~:?~ ^7:.^?5GBG7?!:. ... .:.:J????JY?5P57^:^75B!
.G&&&############&&&###GYJ?~~7~~~~~:!:.!YBBBGP5J^ :?JJJJJYGPG!. .. .5:
!G#&&&&&&&&&&&&#B5?GGGY5?~~~~~~~~~^755^~Y??57~!. :!J55YYY55GGPY .. !.
.~YBBBB#GYJ?77~7BBP55P7~7!~!77~~~~~~~^^^!~^~! .. ^?PGGGGGGG#BP7 !.
^5YY5G^ ..!GP55555?YP5!~~!77!!7?J~. .^:. .. .^5#57GPBBBBBBP. ....:Y~
J5YYPP:...:7GP55555GP5G#P!~~~~!!!7?!:^:...:^: .^J?5GP:.YPY7JJGB#Y .:~YGB.
5YYYGJ:::^YGGY:?P5G#BB##B57!77777777???JJJYY: ..:~!!YP7YYP^ ??7~7?5BBBJ~!5GG5
:PYY5B!:^JGGPGBJ5G#####PJGPPJ5Y????JJJJJYY5PY?YYY??JJJ?7~!~JBG: !??~!?YBBB#BGGGB7
!5YYPG5GGGGB###?B###BB?!JG555PPYJ?77JYPP5GP57!J5G5YGGPY?!:~BP~^. .7J?~~?JBBB#5Y5GB:
Y5YY5Y5P5555^!PJPJ^?GGJYGPPGG!. .!Y55Y5Y: ..:~7J555JPPY!P~.~YJ?~~7JG#BBYYYPG
^7?JJYYYY5557:.^^:7PPY55YY5P7 :. !PPPBP^... .J!5B5BB57JYP7?~~!J5B#GYYYGY
...^J!~^.^JG55PPPPPGJ... . ~BP55PYJJJ?7~~^?5PGBBBGGPGGJ!^^~JYBBPYY5B!
^^^:.:::?. ...:^~~~~^^::~!.:PGGPPPP5555555555555555PPPGP??7?YYBB5YY5B.
...::^~!7?JYY5PPPPPPPP55555YYY555555555YYPP
...:^~!7??JY555PPPPP55555BJ
...:^^~!7?Y^
. . . . .
7^.::?7:^: :7?:...P:. :~~~7P~~~^. :Y ^~~G!~~. :J?:^.?^^5 !! Y^ :Y.. ~~~^~Y!^~~: :P. :^^^JY .7~!.!~::5.
.:. ~^ 7? :YJ.77.P:~? Y~~7P~~J: ~7J^~!!P7!!.::JY?J:Y ?^ ^G..5~:P^!J .YJ Y7^Y Y^ :? 5 Y. P
Y: :JY? .GY^?!.P.~? :!!~?P~~?7 .^? !?!!!7? .7YJ~~ Y ^7.~Y.!7!!!~7: :7!~Y.!!^ 5 ~7^^!G^^::? 5 7~^~?J
Y^ ^~^.~! 7?!.::.P::: ~!!~?P!!J5. .J JJ!!~7P .57:^P Y: Y^ J.5 !7 PY 7~ :5 ^^ .YP: P :5~5:^^^^.P
!!~7!^:::!~ ~! Y .~?7 .. .? ?^ .~!J ?7^~5 J::. J.7::^7^~! :5 .!: : :~J ^^!?
.
# Ciallo (∠・ω< )⌒★
<!-- markdownlint-disable-file -->
<!-- Use a Random Ascii Art -->
<AsciiArt theme="auto" />
<!-- Use a specific Ascii Art -->
<!-- <AsciiArt name="maa-logo-with-endorsement" theme="disable" /> -->

View File

@@ -0,0 +1,59 @@
!: .7:~!.
:. :?55 ?5~::~J?:
:P5YY?7~: .!JYYJG. 7P! .7Y!.
^5JJJY55PPG5!. .?JYYJYG. ~P?. ~YJ: :PY~.
^5YYYYYYY5PPPPYJ??7!!~^!?YYYYY5 :5Y. :J5!. :G&#5^
~PY5555555PPPGGPPPPPPPPJ5YJYPP???5?57::.. !5J: Y&##P:
^YPP5JJY5555PPGG55PP555PGPPPGGPPP555555555YYYJJ?77!~^::...~5P^:. P####7
!GPPJ?JYYYYY5P5PPG57:...:!5GG?~!?JJY55PPPPPPPPPPP555555555YJYPYY57!~^::... .#####!
.?PY?YYYYYYY5PP5G?..:!??JYYPYY7. .....:^~!?JJYY5PPPPPPPP555555555555YYYJJ?77!!B####P
.5Y5YYYYYY555PGY.!?JYJJYJ5P:.?5^...:.::^~^^:::... ....::::~!!7?J5P55PPPPPPPP5P55PPGG###P
.:~?P5555PPPPGY:J77YYJY55Y: ..Y5?Y5PPGGBBBBGGGGP555J!^. ^~...^!77YY5G5::~:.:!5#G
^5555PPPG5?.~5JYYYYY7: :~?5PPG5BBBBB########BBB####BGY7~~^:..:: .:^!~^~?Y7~. ~J7Y
P55PPPGY~...?5?~^:...:75PPGP5PG#####BGBBBBBBBBBB######BGGP5YJ???7!7JY?!!?YYYJYJ^^GJ..
.!?P5YPB^ ....... :!J5PGB#######BBGY7~!!7?PYJJ7!5GB#######BBGPYYYYYJJYYYYY55GB##5^...
75YYPG... .::::JPGB####BGPP55J5?^~~~~~~~~~~!!!?PGGBBBB#####GGBBBBBB##########&G^^~
Y5YYGY... ..:^7PBB#####GPJ!~~~^~?!~~~~~~~~~~~~!!J7!7?JPG###&###############&&&&#5~
.PYY5B!... ..^YBBBB####GPJ~~~~~~~?J!~~~^^~~^^~~^^~!!::^75GB####&&&&&&&&&&&&&&##BG5
^PYY5G:... .^^PB#B###GP5JJ7~~~~~~~!7?~~~^..^:^~~~!~~~!~^~~5JJ555G##&&&&&&&#BBBGGPB!
?5YYPP......:Y######G?!~!!~~~~~~~~~~!7^^^^:^~~~~~~!7~~!~^~~~~~!7?YGB###P77!:JGGGGB:
5YYYGJ..... 7#B####GP!^~!~~~~~~^::!~~!~^^~~~~!~~~~~!J!~7!^~~~~~~!?Y5GPPPP5!^PGGGGP
.7 .PYY5B^..:::^GBB####PP!^7!^^~~~^^:^7~~~!^~~~~~~7~!~~~?5J?J7:~~~~~~~!?YY5YY55PPPGGGP~^:
^5 ~PYYPG...:.!PP#####G5J!:?!^^~~~~~~~!~~~~^~~~~~!J7!??!!J!!JY~^~~~~~~~7?Y5YY55PPGGGGGB#P
^G J5YYGY ..:!5YB####G5!^~~?!~~~!~~~~~~~~~~~~~~~!!77..~7^7~ .:7^~~~~!!~JGPPGGGBGB#####GY^
^&! 5YY5B! ^J5YGB###B5!^~~~?7~~~!7~~^??!~~~!~~~~~~!! :77!.::~!^~~~7!~!Y#########BBP.
^&#~ :PYY5B:.!YYJG#####GG!~~~~7?~~~?J~7?P57~~~!7~~~!~7:..:~5PGBJ~^!^~~!J~~!7P##B###BGGG7
^&##Y^. ?P5PGGJYYYYPB#####BG!~~~~~J!~!55?7?!~J?!!77!777?::JPBBGP5J~ .!~~7J!~~!7YGG5BBGGGGB:
^&###BG555YYYY5GBBB#B#####GGJ~~~~^7775?J~!!. .~??J?7??J7..!:7?7YY~7.^!~?J!~~!!7JP55PBGGGGG
^&######BBBBB##########&#B5?!~~~~^~55~.7!~ .:~!7Y?J?!!~. :!~^~~.:^.??!!!7??YP5PPBGGGGY
^&###################&##PY7~~!~~~~:?~ ^7:.^?5GBG7?!:. ... .:.:J????JY?5P57^:^75B!
.G&&&############&&&###GYJ?~~7~~~~~:!:.!YBBBGP5J^ :?JJJJJYGPG!. .. .5:
!G#&&&&&&&&&&&&#B5?GGGY5?~~~~~~~~~^755^~Y??57~!. :!J55YYY55GGPY .. !.
.~YBBBB#GYJ?77~7BBP55P7~7!~!77~~~~~~~^^^!~^~! .. ^?PGGGGGGG#BP7 !.
^5YY5G^ ..!GP55555?YP5!~~!77!!7?J~. .^:. .. .^5#57GPBBBBBBP. ....:Y~
J5YYPP:...:7GP55555GP5G#P!~~~~!!!7?!:^:...:^: .^J?5GP:.YPY7JJGB#Y .:~YGB.
5YYYGJ:::^YGGY:?P5G#BB##B57!77777777???JJJYY: ..:~!!YP7YYP^ ??7~7?5BBBJ~!5GG5
:PYY5B!:^JGGPGBJ5G#####PJGPPJ5Y????JJJJJYY5PY?YYY??JJJ?7~!~JBG: !??~!?YBBB#BGGGB7
!5YYPG5GGGGB###?B###BB?!JG555PPYJ?77JYPP5GP57!J5G5YGGPY?!:~BP~^. .7J?~~?JBBB#5Y5GB:
Y5YY5Y5P5555^!PJPJ^?GGJYGPPGG!. .!Y55Y5Y: ..:~7J555JPPY!P~.~YJ?~~7JG#BBYYYPG
^7?JJYYYY5557:.^^:7PPY55YY5P7 :. !PPPBP^... .J!5B5BB57JYP7?~~!J5B#GYYYGY
...^J!~^.^JG55PPPPPGJ... . ~BP55PYJJJ?7~~^?5PGBBBGGPGGJ!^^~JYBBPYY5B!
^^^:.:::?. ...:^~~~~^^::~!.:PGGPPPP5555555555555555PPPGP??7?YYBB5YY5B.
...::^~!7?JYY5PPPPPPPP55555YYY555555555YYPP
...:^~!7??JY555PPPPP55555BJ
...:^^~!7?Y^
. . . . .
7^.::?7:^: :7?:...P:. :~~~7P~~~^. :Y ^~~G!~~. :J?:^.?^^5 !! Y^ :Y.. ~~~^~Y!^~~: :P. :^^^JY .7~!.!~::5.
.:. ~^ 7? :YJ.77.P:~? Y~~7P~~J: ~7J^~!!P7!!.::JY?J:Y ?^ ^G..5~:P^!J .YJ Y7^Y Y^ :? 5 Y. P
Y: :JY? .GY^?!.P.~? :!!~?P~~?7 .^? !?!!!7? .7YJ~~ Y ^7.~Y.!7!!!~7: :7!~Y.!!^ 5 ~7^^!G^^::? 5 7~^~?J
Y^ ^~^.~! 7?!.::.P::: ~!!~?P!!J5. .J JJ!!~7P .57:^P Y: Y^ J.5 !7 PY 7~ :5 ^^ .YP: P :5~5:^^^^.P
!!~7!^:::!~ ~! Y .~?7 .. .? ?^ .~!J ?7^~5 J::. J.7::^7^~! :5 .!: : :~J ^^!?
.

View File

@@ -0,0 +1,120 @@
.. ..cdd;.
':'. ..cNNN0.'.
.,lc;. .',..k00l..',.
,cllcc. .',. .,,.
',.. ..:olllcc'. ..,, .,'.
;::;;,,'.... .'coollllcc'. .',. .,'.
.,;;;;;;;;:;,,,.. .:xolcllllcc'. ..,, .,'.
.,:lodxxxoccc:::;;,''. 'cxllccllllcc'. .';' ,,'. .
.,:ooolllccccccc:::::;;,'. 'oxllccclllccc'. ..,,. .,'. .....
.:ccccccccccccccc::::::;,'. .lklccccccllccc'. .';' ','. .......
.;cccccccccccccccc:::::::,'........ 'Oolcccccllcccc' ..,;. ,,'. ........
.;ccccccccccccccccc::::::;,,:::;;;,,'''...... cOllcccccllcccc. .';,. .,,'. .........
.:ccccccccccccccccc:::::::;,:cccccccccc:::;;;,,cklccccccllccc:. .:l:' ,,'. ..........
,cccccccccccccccccc::::::::,;;;;:::ccccccccccc,klcccccclccc:'........'kKXXl. ,;'. ..........
.;ccccccc:;;,,;,;::;;;:::::',;,,,,,,,,,,;:cccc'olcc,ccllccc'':c:::;;,,,,;::..... .,,'. ..........
.';,;::;;;coolc::::::;;;;;;;;,,:::cccccc::;;;;;,':lc,ccccc:',ccccccccccccccc:::;;;,,,'...... .,,'. ...........
.,:c:;;,,lxdlcccccc::::::::;;,,';::::::::::cccc:;,';::c::;,';cccccccccccccccccccccccccccccc::;;;,,'''..... .,,'.... ...........
.;:::::,;xxlccccccccccc:::::::;';::::::::;,,;,',,:c:,,,,,,,,;;;;;;::::::ccccccccccccccccccccccccccccccc::;;;,,'''..... ..:dko', ...........
.::::::,cxdlccccccccccccc::::::,',;::::;,:okKXK0Okoc:;:;,'',,''',,,,,;;;;;;;;;;;:::::::ccccccccccccccccccccccccccccc:::;;;,,,'...'odxkc'. ............
'::::::;:kolllcccccccccccc:::::::;;,,:;,ckNNNNNNNNNNNXkl,;;,l00Okxdol::;,'''',,,,;;;;;;;;;;;;:::::cccccccccccccccccccccccccccccccc:::;;,,,''...... ............
,:::::;,xdlllccccccccccccc:::::::::;',:ONNNNNNNNNNNKOkdo:',:,:ONWWWWWWNNXKOkkdol:;;,,''',,,,;;;;;;;;;;;::::::ccccccccccccccccccccccccccccccccc::;;;,,''...... ............
.;:::,oxlllcccccccccccccc:::::::::;'xNNNNNNNX0xol:;,,;::::,;;;dNWWNNNNWWWNNNNNWX0XNX00kxdolc:;,,'',,,,;;;;;;;;;;;;::::cccccccccccccccccccccccccccccccccc::;;;,,,'...... ..'.........
.;;cxlccccccccccccccccc:::::::::'dNNNNN0xl:;:cclllccc:c:'kc,;c0NNXXNNNNNNNNNWWNNWWMMMMMMMMWWNXKOxoolclc::;,,',,,,,;;;;;;;;::::::::ccccccccccccccccccccccccccccccc:::;;;,,,,....,.........
.,dccccccccccccccccccc::::::::,:XNNXxl;:cllllllccccccc;,NNo,:,x00KKKXXNNNNNNWWWWWWNWWMMMWWWWWWWWNNNXNNNNNX0xdolcc:;,,''',,,,;;;;;;;;;;;;::::::cccccccccccccccccccccccccccccc'.:.........
'llcccccccccccccccccc::::::::,'ONN0;,lollooollccclllcc'lNNNo,:,k000KXKKKXNNNNNNNXK00KKKXXXNNNNWWNNNNNNWWNXK0O000KKKKK00Oxdolc:;;,''',,,;;;;;;;;;;;;;::::ccccccccccccc:,;cccc',l'........
'clccccccccccccccccc::::::::;,,x0Xk'cxxoollclllllllllc,;XNNNNd,;,OKKKKK00O00OkxdollccccllllllodxkO0XNNNWXKK0KXNNNWNNNNWMMNNNWNXWNKOOkxdl:;;::;,,,,,,,,;;;;;;;;;;;:::;,coc;,;:.,c,........
.;:cccccccccccccc::::::::;,;,o0Ox,dkxxdl::clllllllc:';KNNNNNNd,;:KK0Oxol:;''',,,,;;;;;;;:;;;;;;;,;;:cldk0KXNWWNNNNNNNWMMWNNNNNWWNXNNNNXxoxKXXXKOxool:;;;,''',,,,,;,,kKOOOd:dkxl;........
';;::cccccc::::::::;,,;;;OOk'lkxxdc;:lllllllc:;'c0NNNNNNNN::,oc:,,;;;;:::::;;,,,,,',,;;;,,,,,''''''..':ldkKNNNNNNWMWNNNNXXXNNNNNNXKdkKKNNNNNX0OOxxxOkocc:::;;''0KOOOkd0NWWWN0d:.....
.',;::::::;;;;;,,;;:;'kK0o,xoooc:lllllllcc:,,kNNNNNXO0KOc,:';:::::::;,,,,''''''...'',,,;;;:ccccc:;,.....';okXNNNNNNNNXKKKKXNNNXXkdkdKNNNNNK0KOxkkxddodxdool'ONOOOOkKNWWNNNNNNx;...
.,cc::::::;;;;;;;:::;;xNNK,ollclclllllcc:,';dXNNXXNNXx:,,;':,,;;;;,;,,,;;;,,''..'''....''''''',,,,;;;,''''''.,:lx0XNNNKKKKKKXNNXXOkk0XNNNNXKXXKOOkxxxxxkdddc'oKKOOKXNNNNNNNNXkkKd'.
':ccccc::::::::::::,ckKNNd,ollllllllc;,';oONNNNNkxOd;,;:::';:':l;.;,'''''''.'................''............'''','',:lodxO0KKKNXXXKx0XXNNNNNNNKKKOxxddxdxxdxdo,:cd0XNNNNNNNNXo,cdO0'
.;cccc:::::::::::;;,xXOONN;;lllllc:;,,:d0KXNNNNNNO:,,:cc::;d;;;lx:.'''''''............................''''''...',;:clcc:;,;:cldkOKKKXXXXNNNNNKOOxxdddk000XOxddl.,,,:d0XNNNNKl'.'cdXd
'ccc:::::::::;;,;cdKNNK0XX.:c:;;cldxOXNWNKKXXNNkc,;:ccc:;,,kxool:'.............,,,'.....''''''.''',''.....'''....''',;:clollcc:;;::cclodxkO00kkdllok0XXKOxo;,;;clolc;,ckXNXc'.':oKXX
.,cc:::;;;,,,',';XXXXNNNNNX.,':o0XNNNNXXWNKKNNO:,:cccc:,,;:,.'''.''......'''',.:c;',;;;;,,,,,'',;:;,';.''.......'..''''''',;:clooooollc::;;,,,,,,'',;::;,,;:clooooooool,.:kXx:,ldXXXN
.;:;,';;;::::;;'oNXNXNNKKNNOdONNNNXNNNK0KKXOKo,:cccc:,'','''...'......''''';:'coodoc;,;;:clcc::;,';cod;.;,..........'''''''''',;:clooooooooooolllllllllllooooooooooolc;'...oX0dxKXNWK
.'cccccc:;;.kNNNNNNK0XNNNNKXNXXXNNXKkkOo;;ccc:,'.'''''''......'''''',;:;;oxxkkkkkkxdol'.;::clodxkkx:'c:'...........'''''''''''';::ccllooooooooooooooooooolllcc:,'.......cXXXXNN0O
.,cccccc:;,.KNNNNNNNXNNNXKOOXX0O0NNXkx:,:cc:,.............'''''''',:c;,lxkkkkkkkkkkkkkocdxxddoodxkkkc'cc,'...'........'''''....';::;;:clllllllllllccc::;;,''.............;0KXX0OO
.;cccccc;;,'XXXNNNNNNNNNNKOOKK0kkKNKd,;:::,...........';;,,,,;;;:::;',dkkkkkkkkkkkkkkkkkkkkkkxdodxkkkl':l;''...'.........'......,;::;'''''''''''''''......................c0OOOOO
.:cccccc;;';NXXXXNNNNNNNNNKO000OOK0l':c:,.......'...';.'''',;;;;::cl',kkkkkkkkkkkkkkkkkkkkkkkkkxoodxkko;,ccc:;;,,,;;;'..........';:,.......................................k0OOOo
.ccccccc;;.dXXKXXXNNNNNNNXK000OOKk;,::;'.....''....'::.clooooddxxxkkxxkkkkkkkkkkkkkkkkkkkkkkkkkkkdoloxkk,.;;;;;;;;,,,;'...........'........................................'kOkc
'ccccccc;;.KXKKKXXNNNNNXXKKK0OOkx,;::'..''..'.....''l,,oodxxkkkkkkkkxldkkkkkkkkkkkkkkkkkkkkkkkkkkkkxolodllxxdolcccll'c:'....................................................ok,
.,cccccc:;,'XXKKKXXNNNNXKXKK0OOkd';:;..'''.'......'',o'cdxkkkkkkkkkkkxccokkkkkkkkkkkkkkkkkkkkkkkkkkkkkxolokkkkkkkxdoo:'c''...................................................,
.:cccccc;;,:XXKKXXXNNNXXXKKKOOkx,;;'.'''''.......'',c:,xkkkkkkkkkkkkkklllldkkkkkkkkkkkkkkkkkkkkkkkkkk0KOxdldkkKK0kkxdo:,c,''..............................................',,.
.ccccccc;;'oXXXKXXXNNNNXXKX0Okd';;..''''''....'''',c:,xkkkkkkkkkkkkkkkollllxkkkkkkkkkkkkkkkkkkkkkkkOkkOOkkxooxO0KKOkkxd:'c:,'...........................................',;;,.
'cccccc:;;.xXXXXXXXNNNNXKXN0Od';,.'''''''......'',c:'lxxkkkkkkkkkkkkkkxooollkkkkkkkkOK0kkkkOK0kkkkkkkkkkkkkkdlxkOKK0kkkxc';l:,'''..'..................................',;;;;'.
.,cccccc:;,.0XXXXXXXNNNNXKKK0x,',.'''''''....''',:c,:,'okkkkkkkkkkkkkkkxoooolxOkkkkkkKXXKOkkOXX0kkkkkkxxkkkkkkxodkkO0kkkkko'';cc:;,,,,;,'............................',;;;;;;.
.;cccccc:;,'XNXXXXXXNNNXOk00k,'',.''''.....,;:c::;:oxdoxkkkkkkkkkkkkkkkxoooool0kkkkkkkKXXKOkkO0KkkkkkkkddxkkkkkxddkkkOkkkkl.:occ:::c::;;,.'......................'.',;;;;;;;,.
.:cccccc;;'cNNXXXXXXNNNXxxkO:..;,.'......':c:;,;lxkxodxkkkkkkkkkkkkkkkkkdxxdoodKkkkk0kkKXXXOkkkkkkkkkkkkxodkkkkkkddkOkkkkkkdxkkkkxdlloolc,',.................,:cdx.,;;;;;;;;,.
.ccccccc;;'xXNXXXKXXNNXXOxkx..,,.....'....,:ccokkkkooxkkkkkkkkkkkkkkkkkkxkkkxooOOk0OKkkOKXXOkkkkkkkkkkkkkxodxkkkkxddK0kkkkkkkkkkkkkxoloool;',''........,:ldoodxOOx.,;;;;;;;;'.
'ccccccc;;.KXXXXKKKXNNXXXK0,..,...'''...'',oodkkkkxodkkkkkkkkkkkkkkkkkkkkkkkkxod0kOKOkkkkO0kkkkkkkkkkkkkkkxooxkkkkxddO0Okkkkkkkkkkkkkdooool:',,''....,cxKX0ddk0K0l.;;;;;;;;;'.
.,cccccc:;,'XXXXKKKKXXNXXXNl.''...'''....,;'odkkkkkkxkkkkkkkkkkkkkkkkOkkxkkkkkkdoOOk00kkkkkkkkkkkkkkkkkkkkkkxlldxkkkdoodKOkkkkkkkkkkkkkxdooool;,:;,,'.'..,codd0X0Oc';;;;;;;;;.
.:cccccc;;,:XXXXKKKKKXNNNNO'.'.''.'''...',:'odkkkkkokkkkkkkkkkkkkkkkkKKkdxkkkkkkoxKkkKkkkkkkkkkkxxkkkkkkkkkkkxlldxkkxdooOKkkkkkkkkkkkkkkkxlllll:,:cc:;;,,'..:xXXO0,,;;;;;;;;;.
.ccccccc;;'oXXXXKKKKKXNNNO,.,''''..'....',c'oxkkkkdlkkkkkkkkkkkkkk0kkXXkddkkkkkkddKOk0kkkkkkkkkkklxkkkkkkkkkkkdclodxkdoooO0kkkkkkkkkkkkkkkkoccll;.;;;;;;:::;;;:lox.,;;;;;;;;,.
'cccccc:;;.kXXXXKKKKKKXNNl.;'''''.......':c'dkkkkklokkkkkkkkkkkkk0XOOXKkddkkkkkkxoO0kkkkkkkkkkkkkdlkkkkkkkkkkkkl:cooodoool00kkkkkkkkkkkkkkkkdc:lc:llcccccccccc::;,''',,,,;;;'.
.. .,cccccc:;,.KNXXKKKKKkk0NX;';'''''.....'''l:;kkkkkkcdkkkOkkkkkkkkkOKkkK0kdokkkkkkkokKkkkkkkkkkkkkkk:kkkkkkkkkkkkx;:clooooollX0kkkkkkkkkkkxkkkkkoccllllcccccccccccccc:;;,,''''.....
.. .;cccccc:;,.NXXKKKKK0kxxXd.c''''''....''',o;,:ok0Ok:dkk0Xkkkkkkkkkkkkkkkkoxkkkkkkkxk0kkkkkkkkkkkkkkcx0xodkkkkkkkkl;oc:ooool:OXkkkkkkkkkkkxkkkkkkxol:::::cccccc::::::::::::::;;;,,,,,,
.. .:cccccc;;':NNXKKKKKK0kxd'::'''''......''cl'c;lkK0x:dkkOOkkkxxkkkkkkkkkkklxkkkkkkkkkO0kkkkkkkkkkkkkdckxo;:cllloooo;ldoc:cllllX0kkkkkkkkkkkkkkkkkkkkxoc;,ccccc::::::::::::::::::::;;;;
.. .ccccccc;;'xNNXKKKKKKKKx',l,''''......'':l':kkkk0OxcdkkkkkkkkkkkkkkkkkkkkokkkkkkkkkkkKkkkkkkkkkkkdoc;lodxx:lkkkkkklc000d::llckXkkkkkkkkkkkkkkdxdlcc;;;::ccccc::::;;;,',,,,,,,,,'''.''
.. 'ccccccc;;.KNNNKKKKKKK0;'cc''''......',c:':kkkkkkkdcdkkkkkkkkxxkkkkkkkkkkdkkkkkkkkkkk0kkkkkkkkkocclo:x0KXKOcckkkkkx;00XXKxc::cKOkkkkkkkkkkdkkkkxcllcclccccc::::;;;;;;'...............
... .,cccccc:;;,WWNXKKKKKKO;'co;'''......';;,'lkkkkkkkkdcdxkkkkkkkxdkkkkkkkkkkxkkkkkkkkkkkOkkkkkkkkkdxkkklc0KXNXKockkkkk:x0XXXXXOx:xKkkkkkkkkkkxxkkxxl,;::cc::,;;;;;;;;;,'..............
... .:cccccc;;,:WWNXKKKKOk;'col''''......,'':okkkkkkkkkdldxkkkkkkkkokkkkkkkkkxdkkkkkkkkkkkkkkkkkkkkkkkkkkd;0XNNNNNo:kkkkllKNNNNNNNkcXkkkkkkkkkkdokkxxd:'..',;;'.......................
... .ccccccc;;'oWWNXKKKKk,'lol;''''.......;loxkkkkkkkkkdldxkkkkkkkkokkkkkkkkkdokkkkkkkkkkkxkkkkkkkkkkkkkkx,0NNNNNNXlckkkl:XNNNNNNNX;KOkkkkkkkkkdokkkxdo;''''....'.................
.... .ccccccc;;.kWWNXKKKk,,loo:'''''.....,.looxkkkkkkkkkdlddkkkkkkkkoxkkkkkkkxcodkkkkkkkkkkdxkkkkkkkkkkkkkx,KNNNNNNNXcokkl:NNNNNNNNNcOOkkkkkkkkkookkkkxdo,.'.................'''''.
.... ,ccccccc;;.KWNNNX0l';lol:'''''......:',lokkkkkkkkkkdcddkkkkkkkklokkkkkkkx;cclokkkkkkkkddkkxxkkxkkkkkkdcNNNNNNNNN0;dkccKkxddoooo:x0kkkkkkkkdcdkkkxxxdc'................';;;;;'
..... ;cccccc:;,'NNNNNk,,cooll;'''........,c.cokkkkkkkkkkx:odkkkkkkkxclkkkkkkdc;:clkkkkkkkkkddxxxxkxxxxxkkkcKNNNNXKNNNNx:o;,'''''';cooo0kkkkkkkkccxkkxxxddo,'...'.....'....';;;;;;'
...... .:cccccc;;':WNNKc':loollc,''.........'c',okkkkkkkkkkk:odxkkkkkkd;cxkkkdc;;,:oodkkkkkkkxdoxxxxxxxxxxxxdcNNN0kOXN0ko;,c,''''cx0XNNOdOkkkkkkkd:lkkkxxxxdoc'............',;;;;;;;.
.....'.. .cccccc:;;'xKxl;:loollc:''............,;.okkkkkkkkkk0:lddkkkkkxo,:xko::ld,xc:lodkkkkxxxxlxxxxxxxxxxxxlO0OO0XOd:','''',,;;;dNWWNNOdOkkkkkkxcldkkkxxxxdol,'..':,.',,.,;;;;;;;;,.
......''. .cccccc:;,.;,;cooolllc;:'.............':.okkkkkkkkkk0clddkkkkkdc,,o::okko:00o:cooxkxxxxdcOxxxdxddddd:k0dXXo;'''''',,;:::clcOWWWNkxkkkkkkxcloxkkkxxxddoo;',';do',;;.;;;;;;;;;,.
.......,,'.. 'c::;;,'.';:lolllccc::c,.,,........'..'c.dkkkkkkkkkk0dcddxkkkxo;l,;lxkkk:dK00x::lodxxxdocKdddddddddccNKK0,''''',;::::::ldxdoWWWNdkkkkkkdccodkkkxxxxddoo:':;;;c,';,.;;;;;;;;;'
........';;;;,'''''',,;;;:lolllc:;,,::,..;:'...........,l.dkkkkkkkkkkO0coddkkdo:ll,dkkkkd:KXXXK0dcclodddo:0ddooooooclXNNNO.';o:;::cl::::lxxxdXWWWlOkkkkdllodkkkkxxxxddooc'::::;,','';;;;;;;;;.
..........';clllllllooooolllc:;,,''''.................'l:.':kkkkkkkkkkXdoodxdoc,cd'kkkkx;kXNNNNXX0dcclooocOoooooool,dNWWWxo0NWXclodxl;:;:xxxxONWXlkkkdc:looxkxkxxxxxddooc'::::::;,.,;;;;;;;;,.
............',:cllooolllc:;,,''''''...................:o';;;kkkkkkkkkk00oooolc,ckO,kkkkcdXNNNNNNNXKOo:cllcdooooooloo:ckNWNWWWWW0dxxxxlccdkxxdxNNlooxkko,loxxxxxxxxdddoooc'::::::::.,;;;;;;;;,.
...............''',,,,,'''''''.......................,c,,dxxkkkkkkkkkkO0clll:,l00x:kkkooXNNNNNXKOkkkxxdc;;ooooo:lddoolccdNWWWWWW0xxxxxxKXOOOcONX;cxKKKd;oxxxxxxxxddooollc'c::::::;.;;;;;;;;;'.
....................'''''..........................',;':dxxkkkkkkkkkkkkKccc;;o0XXdlkkooXNNNNNK0KXXNX0OKXx;dool:;clloodxk0NWWWWWWNKxdxkO0OOxoxNNNKX0XXNo:ddddxxddddoooooo:,c::::;;'.;;;;;;;;;'
..................................................''''cxxxxkkkkkkkkkkkkKx:;,o0XXNlxkcxNNNNNNNNXOxl:,'';xcldo:cOKKXNNWWWWWWWWWWWWWWXxddxdoldKNNN0KNo0XN:odddddddooooooooo;;c::;::c,',,,;;;;;;.
..................................................';cloxxxkkxxkkkkkkkkkOKc:d0KXXXcxckNNNNNXOdc,''''''',,,oclkNWWWWWWWWWWWWWWWWWWWWWWNK0O0XNNNNNklXKKXO;oooooooooollooooo,:cc:,:lodkxdl,,;;;;.
.................................................'loollxxxxkdokkkkkkkkkkK0lkKNNNk;l0NNNKxl;'''''''',d0Nxcd0NWWWWWWWWWWWWNNNNWWWWWWWWWNNNNNNNNNXXOXXXX:loollllolllll:cool,cc;:d0NWNNNNNKx:,;,.
................................................;.loollxxxxkdoxkkkkkkkkkOXO:ONNNKxXNXkc'''''''',;::::NWNWWWWWWWWWWNNNNNNNNNNNWWWWWWNNNNNNNNNNNXXXXXXdloollllllllllc',lo,;:;dXWNWNNNNNNNNXo,'
..............................................'c.coollxxxxxxodkkkkkkkkkkOKkc0NNNNNx;'''''',;:::::cccxWWWWWWWWWWWNNNNNNNNNNNNNNWWWWNNNNNNNNNNNNNNNNxllllllllllllll:,,,;':;0WWWNNNNXNNNNNNNl.
..........................................'.',c.cooclxxxxxxxdkkkkkkkkkkkOKx:ONNO:''''',;::::::coddxcKWWWWWWWWWNNNNNNNNNNNNNNWWWWNNNNNNNNNNNNNNNXxclcllcccclllllc,;:,',,OWWWWWNN0xddKNNNNk.
......................................'ck;',,;'llo;lxxkkxxkxkkkkkkkkkkkkk0kcdd'',:dd;::ccc::::oxxxdxWWWWWWWWNNNNNNNNNNNNNNWWWWWNNNNNNNNNNNNN0xlccccccccclllllc,;c;;;,oWWWWWNNNNNNKXNNNNx.
..................................,lkO:',,:.,lll,lxxkkkkkkkkkkkkkkkkkkkkOO;;,d0NWWo:codxo:;;oxxxxdNWWWWWWWNNNNNNNNNNNNWWWWWWWWNNNNNNNNNNOl;::::ccccccccclc:;c:'ll:'KWWWWNNNNNNNNNNNNNk.
.............................,cdkkk:.,,:',':ll,lxkkkkokkkdoxkkkkkkkkkkkd:o:dXWWWKcoxxxxdoxK0OOk:NWWWWWWWWNNNNNNNNWWWWWWWWWWWWWWWWWWNxc:cc:::::cccccc:;,,;,'..;l;,NWWWWNNNNNNNNNNNNNX,
...................',;cldkkkkx,',,,,:ccccl,oxkkkxdkkkkdlldkkkkkkkkkxxOkdloOXWXkxxxxxkKKOOOolNWWWWWWWWWNNNNWWWWWWWWWWWWWWWWWWWWWNdccccc:::::::;;,,,,,;'...'l,:WWWWNNNNNNNNNNNNNNX;
.;,,,,,,'''':lxO0KK00kkkkkk;.''';cccccc;;dxxxxodkkkkkkocldkkkkkkkkkkkkOxlcdOX0ddxkOOOOkolXWWWWWWWWWWWWWWWWWWWWNK0WWWWWWWWWWWWWWNOxl,',,,''''',,;cc;'''.:l;;NWWWNNNNNNNNNNNNNNO'
.ccccccc;;'c0XNNNNX0Okkkkkx'',;:c::::cc,cxxxxl,:okkkkkkxollodkkkkkkkkkkkkx;;xWXkooddollxXNWWWWWWWWWWWWWWWWWWXkdx0WWWWWWWWWWWWWWWNO:.',,,,',;,''..'''',.;;,,KWWWNNNNNNNNNNNNN0;
'ccccccc;;.d0XNNNNNXK0O0kd'':ccc::::cc:,oddo:,;:;xkkkkkkkxdoloddxxxxdolllokXNWWNN0OkkOXNNNNNNWWNNNWWWWWWWWWWK0NWWWWWWWWWWWWWWWNOl'''.:col,,oc,,,''..':'''''oNWWWNNNNNNXXNN0c,
.,cccccc:;,.k0XNNNNNNNNNNO'':::::::::cc;,ll:,,::;,cxxkkkkkkkxxxddolllc:,c0XNNNNXNNKXNNNNNNNNNNNNNNNNWWWWWWWWWWWWWWWWWWWWWWWWWNOl',''''kOO0:',,,,',,''''..''''dNWNNNNNNNXNXO:,.
.;cccccc:;,'O0XNNNNNNXKX0,';:::::::cccc:,,,;:cc;,''oxkkkkkkkkkkkkxxddddc;cONNNXlXNOxNNXNNNNNNNNNNNNNNWWWWWWWWWWWWWWWWWWWWWWNOcll',;'.cOX00;.'.,:loolc:;'.'''''kNXkkOOOOOxo;,,.
.:cccccc:;':O0XN0KKKK00O;';;;;:::::::cccc;:ccc;'''';dxxxxxxxxkkkxxxxxxxxoc;oOXXxKXXXXXXXXXNXKxKNNNNNNWWWWWWWWWWWWWWWWWWWWXk:':k;c,c''xKX0Kl.:lolxxooooo,''''''kNNXOOkkkc,,;;,.
.ccccccc;;'oOO00OO00OOk;';;;,;::;::::ccc;.;c:;''...';dxxxxxxxxxxxxxxxxxxxxdlccloxkO0000Oxdolc;0NNNNNWWWWWWWWWWWWWWWWWN0xdc,.,ko,d;c'oONKKNl,ooolkkooooo;''''''xNNNXK00k;,;;;,.
'ccccccc;;.xkkOOOOO00x,,;;;,lXXXl;::cc:,..','......'':xxxdddddddxxxddddddddxxxdolc::::::clllclWNNNWWWWWWWWWWWWWWWNKkolodc..:kx'ld:,;ONWKXWl;ooookkdoooo:,''''',dXNNNXx;,;;;;'
.;cccccc:;;'OOO00000Kx,,;;;;'kNNXx,::c;'............';,cdddddooddddddodddddddddddooooollllllc;KWWWWWWWWWWWWWWWN0kdlloxOd'.'okk:;:oc.dXNNNNNl:ooookkxoooo:,''''''':oxxl;,;;;;;.
.:cccccc;;,;OO00000Ol';;;;;;,:kxoc;c:,............'';;:,cdddloodddoooooooooooooooollllllcll:cKWWWWWWWNNXK0Oxdol:cccc:ldodoxkkd':'l;cXNNNNNXllooodkkkooooc,''''''''.,,,;;;;;;;.
.ccccccc;;'cO00KK0o',;;;;;;;;,'o,::;'...........'col.;::,:od::oddddddoooooollllllllllccccc;,clllclcccccool;,;:.',;;clOOdxkkkk,;'',:XNNNNNNKkdooodkkkdoool,'''''''..:;;;;;;;;,.
'ccccccc;;.dOO0Kd;',;;;;;;;,'.'k;:,............,oddc'::::,;lo',:looooooooollllcccccccccc:,;cc:::'.''''',:coxxxxkOOOOkOOdlkkxl';'''0NNNNNNN00oooookkkdoool,'''''''.'c:;;;;;;;'
.,ccccccc;,.xkxl;',;;;;;;;,'...'K'.''....''...,cdddd;,:::::;,;':;,,:cllllllllcccccccccc:;;::;,;,..'''''':dl;,;:ldxOOkOO00kKK;';,'.dNNNNNNNNKxoloookkkxoooo,'''''''',ccc;;;;;;'
.;cccccc:;;':;'',;;;;;;,,'...'''0,'''......'.'dddddo';:::::cc:;ccc;,'',:::::::ccccc::;,,::,:ldOOdlc:,'''coo;l,,,',:coxOKXNNO;.''.lKxxXNNNNNKooloookkkxoooo;.''''''.;cccc:;;;;.
.:cccccc:;;:;.',,,,,''.........'0'..''..',:c.:ddddd;,:::::::llc;;cdkO0KXXKK0koc;;;,';c;',''ockKKKKKK0xoc:;;':'''''',''',,dNNl.;;dNNN,;XNNNX0cdcoookkkkoooo:.''''''.:ccccc:;;,.
.ccccccc::ccc;,,,,,;;;;,';;,,,,'0,..',;c:;::.cddddl.;::::::'lc;dKNWWWWWWWWWWWWN0:,;'od:';lll;cKXNNXXXXXK0Odlc;,'''''':,'.':l.'oxNNNd,.ONNNKO:xcoldkkkkoooll'.'''''.ccccccc;;,.
'cccccccccccccccccccccc;ONXKd::;O;:;d0NNX;''',;:::'';;;::;,':lXWWWWWWWWWWWWWWWWWNOc;:,;loc::;'ckKXNNNNNNNNXXKK0kxolc:::;:k;.lo',clc;,;KXKKOd;kclldkkkkddoll,'.'''''cccccc:;;'
,cccccccccccccccccccccc:xWWNNKo,o,oXWNNKd,;;ccccc::;;,,,,''.;NWWWWWNNNWWWWWWWWWKNWNXx,clc:::;,'lx0XNNNNNNNNNNNNNNNNOlNNNNO'',o.....'l00xod;''koclxkkkkdxoco:,..''',cccccc:;;'
,,;;;::cccccccccccccccc;oXWNNNOdcKNNXkl,,;;ccccccccccccccc,0WNNNNNNNNNNNNNNNNWxOWWWWx,c::::;;,'xk0XNXXXNNNNNNNNNNN0.oKKOc''.;c,',;lOdx:cOd,.ddlckkkkkxkococ,,.''.,cccccc:;;.
.',;;;:::cccc::dKNNNNKkOkc,,;;;ccccccccccccccc;cNNNNNNNNNNNNNNNNNNNxkWWWW0',,;;;;;,''kx0XNKKXXXNNNNNNNNNc.',','..ol,'','',oO;cd:,ckdckkkkkkkocol,,'.'.:cccccc;;,.
..,,':OXNNNNO;,;;;;;::::ccccccccccc,oNNNNNNNNNNNNNNNNNNNdKNNNNK,,,;;,,,,'';oodO000KKXNNNNNNNNNol::cl.c':,'.','';l:,,,,;kdckkkkkkkocoo;','..ccccccc;;,
'dkddOXNNNXo,,,,,,,;;;;;;;::::::,:XNNNNXXXXNNNNNNNNNNONNNNWO,;;:ccccccc::;;;;;;:cclodkO0KX0k0ko:;':.,''',;;,,;:',,,,xcokkkkkkkocoo;',,'.ccccccc;;'
.;0NN0x;;kXNNNO:. .'''',,,,,;;,,cOXXXXXXXXXXXNNNNNNNNNNNWl,;;:cccccccccccccccccc:::;;;;;;:;.'''''',;,';;;:,';::;;,l;xkkkkkkkocoo;,,,',ccccccc;;'
.;XNXOc. .xKNNXd. .',;cx0XNXXXXXXNNXOXNNNN0,;;;;cccccccccccccccccccccccccccccc:::;;;,;,,,,,,,'';;,,,,lkkkkkkkxocoo;,,,.;ccccccc;;.
.lKdc lxOk, .:lodk0KKOx:'dNNNX;,;;;;;;;:::::cccccccccccccccccccccccccccccccccccc::;;;,,,,::cclooddlcoo;,,,.cccccccc;;.
:dl.''',,,,,;;;;;;;;;;::::::::ccccccccccccccccccccccccccccccccccc::;;;,;,,;;''''.ccccccc:;,.
..',,,,,,;;;;;;;;;:::::cccccccccccccccccccccccccccccccccccc:::;:c:ccccc;;'
..''',,,,;;;;;;;;::::::ccccccccccccccccccccccccccccccc;:cccc;;.
..''',,,,;;;;;;;;:::::cccccccccccccccccccccc:ccc:;,.
...'',,,,;;;;;;;:::::cccccccccccccccc:;,.
.'',,,,;;;;;;::::::cc:;;'.
.''',,,,,;;;;'
...

View File

@@ -0,0 +1,120 @@
oNX,
'KK: 0Ko::xKk
OOdOd kK0o .0OKX
Kklox0. .XOkxc,..l;:xk0X
'N0 Kkolloo0: kKOk: ;kk00
;Ok0KNd K0dclllooOl 00kk. okOKO
;xddxxkkO0KXXNl KOoccllllooOx oKOk: ;kOKX.
.KKkxxxxxxxxdxkkk0Xd :0d;clollllooOx 00kk. xkOKX
kKkdlc:;;;cooodddxxkOOKl cOo;lloollllooOx ;KOxO .xkOKK lXXo
;0kdccclllooooooodddddxxkOKk :Oc;llooollloooOx .X0kk; dkO0K '000KKX'
cdoooooooooooooooddddddxkOK0c. dl,loooooolloooOo oKOxO. kkO00 .O00000Xk
cxoooooooooooooooodddddddkO00KKKXXXNNOc' l'clooooollooooO. 00kxd .kkOKO O000000Kk
cxoooooooooooooooooddddddxkkdddxxxkkOOOKKKXXXNNKo'llooooollooooO 'XOxk: :kkOKd O0000000X'
xdooooooooooooooooodddddddxkdoooooooooodddxxxkko,loooooollooodd .N0dldOc .kkOKX c00000000X.
xooooooooooooooooooddddddddkxxxxdddoooooooooook,loooooolooodO00KKXXXKO,...l0. 'kxOK0 d00000000Kc
lxooooooodxxkkxkxddxxxdddddOkxkkkkkkkkkkxdooooOclookoolloooOOdodddxxkkkkxdd0KXXXNKd' lkkOKk .0000000000d
.XOxkxddxxxoccloddddddxxxxxxxxkkdddooooooddxxxxxkOdlokooooodOkooooooooooooooodddxxxkkkO00KKXXNNNN0l,. ;kkOKX .0000000000X
.0kdodxxkkl;:looooooddddddddxxkkOxddddddddddoooodxkOxddoddxkOxooooooooooooooooooooooooooooooddxxxkkOOO0KKXXNNKx,. ckkOKXXX, o0000000000k
:0xdddddkx;;looooooooooodddddddxOxddddddddxkkxkOkkdodkkkkkkkkxxxxxxddddddoooooooooooooooooooooooooooooooddxxxkkOOO0KXXXNNXk:. d0d:,cOk .00000000000d
l0ddddddko;:loooooooooooooddddddkOkxddddxkdc,....',codxdxkOOkkOOOkkkkkxxxxxxxxxxxdddddddooooooooooooooooooooooooooooodddxxxkkkO000Oc:;,oOO;. o00000000000l
cOddddddxd,cllloooooooooooodddddddxxkkdxko, .,lkxxkl..',;:clddxkOOOOkkkkxxxxxxxxxxxxdddddoooooooooooooooooooooooooooooooodddxxkkkOO0KKXXXNX0l. .000000000000
.xdddddxk;:lllooooooooooooodddddddddxOkd' .',:cdOkdkd' ..',,:cldxxkkOOOkkkkxxxxxxxxxxxddddddoooooooooooooooooooooooooooooooooddxxxkkOO0KKXXXNX0o. .000000000000
:xdddkc;llloooooooooooooodddddddddxO; ..;cldxkkxddddkxxx: ... ...,;:clodxkkOOkkkkxxxxxxxxxxxxddddooooooooooooooooooooooooooooooooooddxxxkkkO0KKXXXNNOd, k0O000000000
lxxo;looooooooooooooooodddddddddO: .;ldxdoolllooododO,okxo. .. ..';ccloloddxkkOkkkkkxxxxxxxxddddddddooooooooooooooooooooooooooooooodddxxxkkkk0000k000000000
dk:oooooooooooooooooooddddddddkd. .;lxdolllllloooooooxk ckdk;....... . ..;:cloodxkkOOOkkkkxxxxxxxxxxxxddddddooooooooooooooooooooooooooooooO0d000000000
oOllooooooooooooooooooddddddddkO' .xklcllcccllooolllooOl ckdk,......... .......... ...'..........';:clodxxkOOOkkkxxxxxxxxxxxxxddddooooooooooooodkxooooOklO00000000
kOoloooooooooooooooooddddddddxkk;..,Oo;;ccllolllllllllokx. :kxk'.......'..',;:clloooollllllc:;,'.. ...... . .'',;:ldxxddxkkkkkkkkxxxxxxxxxxxdddxkocoxkxd0kok00000000
;xdooooooooooooooddddddddxkxkc.';k:,;;:lddolllllllodOx. :kxd...';cldxOOOkkkkxxxxxxxdxxxxxxxkxxdol:,... . .;c;.....';ccldxxxkOOOkkkkkxkk,.''':d:,;lx00000000
.xxxddooooooddddddddxkkxxx'',Ol,;;:oxdlllllllodxOo. ddkcodkkxxxxdddddxxkkkkkOkkxxxkkkkkOOOOOO00Odl:,. ... ..:,.. ..'';;;',coodddxxOO..''',:. .:d00000
dOkxddddddxxxxxkkxxdxO,..ck;cccodllllllloodkk, .'..'okdOxdddddddxkkkkOOOOOO000OOkkkxxxdooooodxk00000Oxc,. ...... ..,:,:. ...';,,;::c:;:cclO' '''',. ;x000
0kooddddddxxxxxxxdddxx; .kcllolollllloodkOx:. .. .;dkkxOdkkxxxxkxkkkxxxkkOO00OOO0000OOOOOOOkkkkxxxkOOOOOO0kdl;.. ....... ..',,.. .....'',;;;;;,:::oOc..''.. .,,.:O0
:Odoooooddddddddddddko,. :kclllllllloxkOxc' ,;':xkxdddOxdOdlx0xkOOOOOOO0O0000000000000000OO000000000000OOOOkOOkdlc:;'.... ....;... ...';;::;:;;:;:ckdo:.. .cko:'.O
xxoooodddddddddddxxk;.'' xxlllllodxkkd:... 'dkkdooddx:xxxl;d0OOOOOOO0000000000000000000000000000OOOOOO000Okxdoloodxkxdol:,'....... .'';;:::,....';::l0kkkd:.. .lO0Oo:.:
'Oooodddddddddxxkxo:. ....0dodxxol:;'. .... ,okxdooodxkk,;ccldO0000000000000kkkO00000OOOOOO0OOOkOO00000OOO0000OOOkxdolclloodxxddoolc:;,'..,,:llc,....';cxkxxolcloxko,. .oO0Odc...
ckoodddxxxkkkOkOx.... .0kOdc.. .. .. 'dkdoooodkkxdk0OOO0OO000000OOOOk0doxOkxxxxkkkkkOOkxdxkOx0OO00K0000O00OOOOOOOkxdolccccclloddxxkkkkkkOOkxddxkkxdolcccccccclk0d,.;dkl:...
oxdxkOxxxddddxxOc . . .. ':' . .....'.ckdoooodkOOkOOO000O000000OOOOOxdOocc:coxkxxdolooddxkOxoc:x0xk0000000000OOOOOOOOOOkxdolccccccccccclllllllllllcccccccccccloxO000c..:;.. .
:Ooooooodxx0, ... .. ... ..,,'cxxooodkO0OOOOOOO000000OOOOOOkxdxxc;;,,,,,,;:clO0xddolc:;,,;dOodO00000000000OOOOOOOOOOOOxddoollcccccccccccccccccccllloodkO0000000o.... .'
xkoooooodxkK. . ..''...'. .,;dkdoodk0000000000000OOOOOOOOkdoxkl;,,,,,,,,,,,,,co:;;::cc:;,,,oOookO000O00000000OOOOO0000OxddxxdollllllllllloooddxxkOO0000000000000x.....''
0xooooooxxkO... .''...,,. .:kxdddk0K000000000OxxkkkkxxxdddxOk:,,,,,,,,,,,,,,,,,,,,,,;:c:;,,,lOdlxOO000O00000K000O000000kxddxOOOOOOOOOOOOOOO0000000000000000000000o.'''''
.0dooooooxxOx .... .'...''..lOdodk0000000O000Ox0OOOOkxxxxddolOk,,,,,,,,,,,,,,,,,,,,,,,,,;cc:;,,cxkooodxxkkkxxxO0000000000Oxdk000000000000000000000000000000000000000,.'''c
;0oooooooxx0:...... .....''.,xkddxO00000OO0000Odd0olcccc::;;;,,;;,,,,,,,,,,,,,,,,,,,,,,,,,,,:clc;,,k0xxxxxxxxkkkxO00KK0000000O0000000000000000000000000000000000000000O,',o.
lOoooooooxx0....... ......'',;kxddO00OO00O00K00OOlkkcc:;;,,,,,,,,;l:,,,,,,,,,,,,,,,,,,,,,,,,,,,,;clc:ll;;:clooollOodO000KKKK00000000000000000000000000000000000KKKKKKK000c,l
xkoooooodxkO....... ......'',:Oxdx00OOO0O000000OOkcOo:;,,,,,,,,,,,;ooc,,,,,,,,,,,,,,,,,,,,,,,,,,,,,;clc,,,,,,,;:ccdOoOO00000KKKKK0000000000000000000000000000KKKKKKKKKK000k.
Odooooooxxkd....... ......'',;kxxO0OOOOO0000000OOkodk;,,,,,,,,,,,,,,llll:,,,,,,,,,,,,,,,,,,,,,,,,,,..';:l:,,...,,;:cdkokOO00000KKKKKKKKKKK0000000000000000000KKKKKKKKKK0OkkO
.0oooooooxxOc....... .....',:Oxx00OOOOOO0000OOOOkodk;,,,,,,,,,,,,,,,cllll;,,,,,,,,,,,,,,,,,,,,,,,',,'',,;cc;'...',,;:dOodkO0000000KKKKKKKKKKKKKKKK0000KKKKKKKKKKKKKKK0Okxxkx
cOoooooodxx0;....... ... .':Oxk0OOOOOOO000000OOkodOl;;,,,,,,,,,,,,,,;cccll,,,,,,,,'..,,,,'..,,,,,,,,,,,,,,:l;,'...,,,;oOxldkOOO00O00KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK0OkxxxxOo
dkoooooodxkK........ .....;kOk0OOOOOOO0K00OOOkdokdkOc,,,,,,,,,,,,,,,;ccccl;',,,,,,....',,'...,,,,,,;;,,,,,,;c:,,'.,,,,,cOOxoodxkkkkxkOKKKKKKKKKKKKKKKKKKKKKKKKKKK0Okxxxxxx0:
OxoooooodxkO. ...... .',..,kOOk0OOOO000K0kxdoddxdc;:c;,,,,,,,,,,,,,,,;cccccl.,,,,,,,....',,'..,,,,,,,::;,,,,,;::,,,',,,,l0dcoodddoddxxk0O0KKKKKKKKKKKKKKKKKKKKKO0Okxxxxxxxk0.
.KdooooooxxOo ...... .;;,'d00xk0O000000Ododxkxl;,;c:;,,,,,,,,,,,,,,,,,:;;:cc:.,,,,.,,....',,,,,,,,,,,,;c:,,,,,,::,',,,,,,:;,,,,;:llcclokOk000KKKKKKKKKKKKK0kdo:;0kxxxxxxxxk0.
,0oooooooxxO;. ...... ..';,;00kk00000O0000kdooc,,,,cc;,,,,,,,,,,,,,,,,,,;,,,;cc'',.'.,,'...',,,,,,,,,,,,,;c:;,,,,;::..,,,,,,,,,,,,,;clccclxOkOO00000000kdl:cc:;'';KkxxxxxxxxOk
lOoooooooxx0......... .....k00k000OOO000OOkcc:,,,,;c:,,,,,,,,,,,,,,,,,,,,,,,,;c:.,'.',,,,'.,,,,,,,,,,,,,,,;cc;,,,,;::'.',,,,,,,,,,,,,:ccccldOkkOO0000ko;...::,...l0xxxxxxxxxO:
xkoooooodxkO.......... ... l0OO000OOO0000kxOc:,,,,,,;,,,,,,,,,,,,,,,,',,;,,,,,,:c'',..,,,,,,,,,,,,,,,,,,,,,,;ll:;,,,:cc:.',,,,,,,,,,,,,;:cccclxkdxkkO0O00koc::...'oOxxxxxxxxx0'
kdooooooxxkd.......... 'O0O0OO0OOO000OkdOc:,,,,,c,,,,,,,,,,,,,,,,,..,:;,,,,,,c;.,,.,,,,,,,,,,;;,,,,,,,,,,,;ll:;,,;:cc'.,,,,,,,,,,,,,,,;llllldkdoodxxkkO00d;..'.kkxxxxxxxxx0.
.0oooooooxxOc.......... 'k0kOOOO00O0000OkoOc;,,,,:l,,,,,,,,,,,,,,.,,..,::,,,,,,::.',.,,,,,,,,,,,l;,,,,,,,,,,,:olc:;,:ccc'.,,,,,,,,,,,,,,,,coollx0xxxxxxdddxxxdlc;0kxxxxxxxxkx
.O ;Ooooooodxx0,........... l0xOOOOO0000000OdoO:,,,,,lc,,,,,,,,,,,,,..''..,::,,,,,,;c'.,,,,,,,,,,,,,:l,,,,,,,,,,,,ldoccc:cccl..,,,,,,,,,,,,,,,,:odlodllooooooooooddxkOOOkkkkxxxOo
00; okoooooodxkK. .......,,. .xOxOOOOO00000OOOldx,,,,,,o:,,,',,,,,,,,,'.,,..,:c,,,,,,,c,.,,,,,,,,,,,,,,d,,,,,,,,,,,,;xdolcccccll..,,,,,,,,,,,;,,,,,coolllloooooooooooooodxxkkOOOO00XXXNNN
00. Oxoooooodxk0 ........,;;.:0oOOOOOO0000OOOkcxkdc,.',d:,,..,,,,,,,,,,,,,,,,c;,,,,,,,;,.,,,,,,,,,,,,,,o;.;c:,,,,,,,,lxcodccccld'.,,,,,,,,,,,;,,,,,,;cldddddooooooddddddddddddddxxxkkkkkk
00. .KdooooooxxOd ........,;:OddOOOOO000000OOolOoxl,..;d:,,'',,,;;,,,,,,,,,,,l;,,,,,,,,,'.,,,,,,,,,,,,,:o,;cxdolllccccxl:codollll..,,,,,,,,,,,,,,,,,,,,;coxkoooooddddddddddddddddddddxxxx
00. ,0oooooooxxO; .........;OklkOOOO000000OOdlOd,,,,.';o:,,,,,,,,,,,,,,,,,,,,c,,,,,,,,,,,.,,,,,,,,,,,:coxlc:;;dl,,,,,,lo...:ddllo,.,,,,,,,,,,,,,,:;:looxxxddoooooddddxxxkOkkkkkkkkkOOO0OO
00, cOoooooooxx0. ........xOooOOOO000000OkodOd,,,,,,,:o:,,,,,,,,;;,,,,,,,,,,:,,,,,,,,,,,.,,,,,,,,,coolcd;....'oo,,,,,;x.....;oddo.',,,,,,,,,,:,,,,;ollooloooooddddxxxxxxO000000000000000
00o dkoooooodxxk .......'xOocxOOO000000OxxkOl,,,,,,,,:o:;,,,,,,,;:,,,,,,,,,,;,,,,,,,,,,,',,,,,,,,,:;,,,lo... ..co,,,,,d;......';d;.,,,,,,,,,,;;,,;;lkxddooddkxxxxxxxxxkO00000000000000,
00O kdooooooxxkd .....',xOoclOOOO000000kOOdc,,,,,,,,,:l:;,,,,,,,,c,,,,,,,,,;:,,,,,,,,,,,,,,,,,,,,,,,,,,:x.. cd,,,,ll. ,o.,,,,,,,,,,:c,,;;:dO00OkxxO000000000000000000000O:
000: 0oooooooxxOc .....,kOlclxOOOO0000000xlc;,,,,,,,,,:l:;,,,,,,,,c,,,,,,,,,:c,,,,,,,,,,,;,,,,,,,,,,,,,,;k. .lo,,,ld. .x.',,,,,,,,,:c,,,;:cxOOOO0000O0000000000000000k
000O .0oooooooxx0, ....,kklccdOOOOO00000k0lcc;,,,,,,,,,:l::,,,,,,,,c;,,,,,,,;oc:,,,,,,,,,,:;,,,,,,,,,,,,,;k. .oc,,ld o'',,,,,,,,,cc,,,,;:ck0O00000000000000000OOOOOl
0000x :koooooooxx0. ..lOxlcldOOOOO000000dOklc,,,,,,,,,,:o::,,,,,,,,lc,,,,,,,;xoolc,,,,,,,,::,,;;,,;,,,,,,:o .x:,oo.,;::ccccd;.,,,,,,,,:o:,,,;;;:oO0000000000000000OxxxxxO;
00000l oxoooooodxkO ,kkoccllxOOO00000000ko0oc,,,,,,,,,,;dc:,,,,,,,;ol,,,,,,:oxdol,,,,,,,,,::;;;;,;;;;;,,,o. .. ;dcxkOOOOOOxoccc.,,,,,,,,oo;,,;;;::ckO000O00000O0000OxxxxxxO.
000000l xdooooooxxOd .oOdlccllokOO000000000OoOkc,,,,,,,,,,,dc:;,,,,,,:xo;,,,:oxxkdcc:,,,,,,,;:c;;;;;;;;;;;;:o .,'. .,cxkokOOOOo;.. ':',,,,,,,:dl,,,;;;;:coO000000000000Okxxxxxxx0
00000O0X. 0oooooodxxO;.;lxdlccllodOO000000000000kx0c,,,,,,,,,,.dl::,,,,,;ckd;,cddl:k;odlc:,,,,;;;;l;;;;;;;;;;;;l'.''..':dOkOOOOkkxxx: ':',,,,,,;ol:,,,;;;;:clkO00Odk0Okk0kxxxxxxxxkk
000000OOKd .0oooooodxk0xkxocccllloxdO0000000000000Od0c,,,,,,,,,,.ol::,,,,,:okkcddc,,cd..cdocc;,;;;;:o';;;:;:::::d,.:..cxOOOOOOkkxdddolo' ,;,,,,,,;olc;,,,;;;::ccxOkOx:cOkxx0xxxxxxxxxko
0000000kkOKXXkllkOoddxxkO0Oxdlcllloooddok0kk00000000O00Oo0:,,,,,,,,,,.:o::;,,,;cxlkxl;,,,d:...;ddlc:;;;:co.:::::::::oo ...kOOOOOkxddddddl:;:c :,,,,,,:ooc:,,,;;;;::ccdOdxxxokOxk0xxxxxxxxxOc
00000000OxxxxkOOOOOOkkxxxdlclllodxkkddk00xdO00000000000kl0:,,,,,,,,,,'.oc::,,:cdllk:,,,,:d......:oolc:::cd.::ccccccol. '0Oxcdxddolddddl;;;:. l',,,,:llc:,,,,;;;;::ccoOddddxkOkOOxxxxxxxxx0'
0000000000OxolllllllccccclllodxkkOOOO00000000000KK0000Old0Od,,,,,,,,,,.:cc:;:coko:O,,,,;x,. ...:oolccco'ccccccclk: ;c. .olc:;lxdxd;;;;' .l,,,:odlcc;,;,;;;;;::ccoOddddddxk0kxxxxxxxxk0.
000000000000OkdollccclllodxkkOOOOOO0000000000000K00000dcOxxx,,,,,,,,,,..ccccloko,'k,,,,o:. ..'cdollo:cccccclccdo, .:;;;;loo:,;;:; lcc;,,cklc;;;;;;;;:::cccoOdddddddd0kxxxxxxxxkO
000000000000000OOOkkkkkOOOOOOO00000000000000000KK0000kokk:;;,,,,,,,,,,'.ollldkl..;d,,,cc. ..',,,;;:oxxcccccdl::ccloo: .;;;;;;..'''o' .xo;...:xc;;;;;;;;::ccclloOoddddddx0xxxxxxxxxOo
00000000000000000000OOOOO000000000000000000000KK000OkxOd:;;,,,,,,,,,,,,.oooxxc...:l,,cc. ..... ..'..;x:ccldxollcc:;,. .;:;,'.'';c; ..... cd::::;;::::ccccccdkoddddxxO0xxxxxxxxxO;
000000000000000000000000000000000000000000000KKK00OOOOo;;;;,,,,,,,,,,,,.;dxkc... l;,o; .';ldkOOx;ol:cdo'... .;::;:cl:. .. c.. dc:::::::cccccccccxxoddxddokOkkkxxxxxx0.
00000000000000000000000000000000000000000000KK0000Oxolc;;;,,;;,,,,,,,,,'.od:.....o;o, .':okOOOOOOOkkkcol, ..'.. ,l....'xccccccccccllccccckdoodkdlc:,;:lkkxxxxO
KKKK00000000000000000000000000000000000000KKKK000Olccll;;;;,:c,,,,,,,,,,..l,. ,xl. .;lxOOOOOOOOk:. ;o:. ..'....dlccllllcllllldocclkooxd:. .;dkxko
0KKKKK000000000000000000000000000000000KKKKKK000x0lccll;;;;,:c;,,,,,,,,,'.'d' .;. .,oOOOOOOOOkxdddd ......:lcclllllllllloOklckxdx:. .ckOc
;0KKKKKK0000000000000000000000000000KKKKKKKK000Oo0occll;;;;;;c:,,,,,,,,,,'.,o. ;xOOOOOOkxdddddooo; ;lllllllllllllldkkkxOdx. . l0,
.00KKKKKKK000000000000KKKK000KKKKKKKKKKKKK0O0Oko0occol;;;;;;;:,,,,,,,,,,,'.;d' 'dOOOOOkxddddddoc::;o. .;ololloooolllllokxdkOkk' .;::. ,x'
:00KKKKKKKKKKKK00KKKKKKKKKKKKKKKKKKKKKOo,xOkkxOllcxl;;,,;;,;,,,,,,,,,,,,,.,o::OOkd::xddoooddddc;;;:; .;looooooooolllllokxoxxxkc .. ;O
x000KKKKKKKKKKKKKKKKKKKKKKKKKKKK00kl,'dOkkd0klllkl;;,,,,,,,,,,,,,,,,,,,,''xxk:. cdoc:;cdxxc;;;;: 'lxddddooooooooolodxodOlldO. ,0
o0000KKKKKKKKKKKKKKKKKKKKK000ko:,,,d0kkdOkOdllkl;,,,,c,,,:c;,,,,,,,,,,,:dcd:. .oc;;;;:c;..'',d ;odoodddddoooooodxkkxkO00xlxk .k,
l0000000KKKKKKKKKK0Okxol:,,,,;kOkkkkdoooolkc;,,,;:,,,,:ll:,,,,,,,,,;;',:lc'. .,;;;;;,..'''cl :ooooodddddddxxkkkkkxO000Olkd .x,
OxkkkkkkOOOOdl;'.....,,,,,,x0OOOxooooooxx:;;;;c:,,,,,,col:,,,,,,,,,,,,';lo:'..::;,'''',cl. .. ';lkOkkkOOOOOkkxooxOOO0dlxx 'o
.0oooooooxxOo.. ..',,,,,;OOkxdoddddooko;;;;lkdc,,,,,,;cllc:,,,,,,,,,,,,;xx; .,cc::cll;. .,:;. 'd0OkkkkOkxkOO00OOOOk0xxkk. .c
:Ooooooooxx0:.. ...'.,:OOdoooddddoodkc::cdkxdx;,,,,,,,;:clc::;;;;:clllc,. .',,'. .. 'lOOO0doclkkcokkkOO00OdOOOOOc .. .okc
lkoooooodxkK,.. 'OOdddddddddooxklldkkddxko;;,,,,,,,;;;::clllodko.. . .. 'lOkOOOO,''.dOkkkkOkkOOOO00OOOO: . .'dk0;
OxoooooodxkO'.. ....kOxdddddddoooodkkkxdooxkOOc;,,,,,,,,,,,,;;::::oxo' .l. '; . 'ollOkxO0o'...x0O0kdlcclodxO0OOOOO, .,,''''';cxkk0.
.KdoooooodxOd'.. .......'xOxxxxdddddddooooxdoooxOOOOx:;;;;;;;;,,,;;;;;;;;coxc'..;.......... ..;. .,dOd,xokoOO;....l0dlcl;;ccccckOOOOOO, .'',,,okkxxk0
,0oooooooxxOc''..''..'',xOxxxkxddxddddooox0xodxOO000Ox:;;;;;;;;;;;;;;;;;;;;:loolc;,'....';:clox. .;:ok0k,ck:xoOc' .. lkcccl,,cccccxOOOOOO; ....,xkxxxko
lOoooooooxx0;,,'''''..;kkxxxkl...lxddoodk00OkO000000OOd;;;:::::::;;;::::::::;;;:cloddddddolllol .,clc:o00d,;Ol:dkx' .. lxcccc,,:ccccdkOOOOOk:. .;xkxxxxO;
xxoooooodxxO'''......;kkxxxxO, .;kddoxO000000000000Oxko:::::cc::::::c:::::::::::cccccllllllox. .,:llc;':O0Oc,,dxdco0:. ldcccc,,;ccccdkOOOOOOOdc;;lxkxxxxx0.
Odooooooxxkx''.....'lOxxxxxxkd,;coxodk000000000000OOxxdko:::lcc:::ccccccccccccccccllllllolldo. ...';:cldoooodl:c:c;,,:OdOlxo. .llccc:,,,ccccokOOOOOOOO0kkkxxxxxxxO
.0oooooooxxOo'.....cOkxxxxxxxxkOckddxO00000000000Oocl0xddkdc:ddc::::::cccccclllllllllloooooxkolllolooooocclxkxd0Okxxol'':;,,,,kxOOkd. .,:ccc:,,,:ccclkOOOOOOO00dxxxxxxxxkd
,Ooooooooxx0:''..:xOkxxxxxxxkO0O,xdk000000000000kc::oOddddkxlcOkdlccccccccclllloooooooooodkxoodddO0OOOOOkdoc;;;;,'''','':l,,;lOxOOO. ..ccccc,,,:ccclkOOOOOOO0OodxxxxxxxOc
dkoooooooxkK;,;lxOkxxxxxxxkO000O.O0OO0000OO000ko::::xkdddddxkxOdxkkdolllllllloooooooooodxxddxkxk00OOOOOOd:lxkxdl:;'',''..,..xOxkO0: .;clccc,,,;cccckOOOOOOOOkoooxxxxxxO;
OxoooooodxxOdxOOkxxxxxxkkO000OOO.kOOO000000O0O:::::cOxdddddoodxoooxkOOkdddddddoooooddxkkddkdl:'':lodkOOOoccxlkkkOkdoc;'.. 'x0OO0l.;;. .cclccc,,,;ccccx0OOOOOO0xoooodxxxx0.
.0doooooodxxdx0OkkkkkOO000000000O.O00OO00OkdoKd:::::xkdddddddlloxxo:,'.......,coxxxkOxoxOkOOco,.......;codxxOdOOOOOOkOOOkk: l0xx: kx. ..o:occc,,,,ccccd0OOOOOO0dooooodxxkK
;0oooooooddoooxkkkkkxxxxkOxxkkkkO.k00Okxodxdd0o::::l0xddddddOlox:. .dkxOc:dOxlllxo.. .......':loxkOOOOOOdkO0Odl0Oc; :k0' .'d;ocl:,,,,cccllO0OOOOO0oooooooxxkx
lOoooooooooooooooooooooox' ..:ddx'xdx:. .xOOOkxdddOOxxxddxkOdl. 'oxdkxlcoddxOo,.. .....,;clodddxd,x0lcOkoloxkx....':x,oll:,,,,::cllkO0OOOOOoooooodxxO;
ckooooooooooooooooooooood; .ckckc. .:kxxoooooddxxkkkkOO0x . .;kolodddxkOl;.. 'l 'OOkc00000Ol..;c:xOO,col;,,,,:;cocdk00OOOkoooooodxxO.
'kkxxxddooooooooooooooooxc. ':o. .,lkkxxoooooooooooooook. ;' ;koddddxxkO;,.. ... .0c..'oOO0xokOkxl':;do':k0::lo,,,,,;,cocokk0OO0koooooodxxO
..:dkxxxdddoooodd:. .,',okkxxxoooooooooooooooxo ;, .OkkxxxxxkOO,;.. ..... o0OkOkO00clkOOkOOkc'xo:dko,:o,,,,,,,coclkkO0O0dooooooxxkd
.:dkkOd'. 'xkxxxxxddddoooooooooookc :. .kkkxxkkkkOOxcc:'...... clddol0oOdkO0OkOOxldkkkkx,:o,,,,,,,coccxOkO00oooooooxxkc
cO:,::'. .ckxkkkkkxxxxxxxddddddkd. .... ' 'kxxdoooooooddxxxxxxdoolc:,'....,.,cdxOd0kOOOkxxkkxdOkkkk;oc,,,,,,,coccxOkkO0oooooooxxO;
0x. .;co,. 'd0, .,okOOOkkkkkxxkko'........... lkxxdoooooooooooooooooodddxxxxxxdx0OOOOOOkxkOxxxdkOxddxxklx;,,,,,,,coccxkkkOkoooooooxxO.
kx. .';. ;;. .:0l 'ckkxo;.. ...... .'. .kxxxxoooooooooooooooooooooooooooooodddxxxkxkkkkkkkOOxxkkkkl,,,,,,,;coccxkkk0xoooooooxx0
:l.,o, .l;',k ,dlc:,...';dO: .xkxxxxxxxdddddooooooooooooooooooooooooooooooooooooddxxxkkkkddoolcc::loccxkkk0ooooooooxxk
.. :::lkOOkkkkkxxxxxxxxxxddddddddoooooooooooooooooooooooooooooooooooddxxxkxkkxxOOOO0ooooooodxko
.'cxOkkkkkkxxxxxxxxxdddddoooooooooooooooooooooooooooooooooooodddxdodoooooxxO:
':dOOOkkkkxxxxxxxxddddddoooooooooooooooooooooooooooooooxdooooxx0.
.;dkOOkkkkxxxxxxxxdddddoooooooooooooooooooooodooodxk0
.,lxOOkkkkxxxxxxxdddddoooooooooooooooodxk0
'oOOkkkkxxxxxxddddddoodxxOl
'ckOOkkkkkxxxxO,
'cxx

View File

@@ -0,0 +1,135 @@
WWWWWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWWWMMMMMMMMMMMMMMMMMMMMMMMWMMMMMMMMMMWMMMMWWWWWWMMMWMWWMWWMMMMMMMMMMMMMMMMMMMWMWX00Okxdoooxddddxxdooolcccc:::::::::::::::::::::::;;;;;;::cllollc:clllcc:::llc:cododONWWWWWWWWWWWWWWWWWWWWWWWWWWWWWMMMWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWMMMMMMMMWWMMWWWWWWWWWWWWWWWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMW
WWWWWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWWMMMMMWMMMMMMMMMMMMMMMMMMWMMMMMMMMMWWMMMMWMMWWMMMMWWMWWMMMMMMMMMMMMMMMMMMMWWNXKOOkxdoodxxxxxkxdddlcc::::::::::;;;;;;;;;;:;;;;;;;;;;;;;;;;::ccccccclcc:::;:::;;:cloxKNWWWWWWWWWWWWWWWWWWWWWWWWWWMWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWMMWWWWWWWWWWWWWWWWWWWWWWWWWWWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWWMMMMMMMMMMMMMMMMMMMWW
WWWWWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWMMMMMMMMMWWMWWWWWMMWMWWWMMWWMMMMMMMMMMMMMMMMMMWWNNK0OOkddoodxxxxxxdddoc::::::::::;;;;;;;;;;;;;;;;;;;;,;;;;;;;;;;;;;;:::::cc::::;;;:;;;;:ldONWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWMMMWWMWWWWWWMWWWWWWWWWWMMWWWWWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWMMMMMMMMMMMMMMMMMMMMMM
WWWWWMMMMMWMWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWWWWWWMWMMWWWMMWWWMMMMMMMMMMMMMMMMWWNNXK0Oxoddoddxxxxdoooolc:;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;,,,,,,,,,,,;;,,;::;:::;:;;;;;;;;;;;:okXNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWMMWWWWWWMMMWWMMWMMWWMMWMWWWWWWMMWWWWWWMMMMWWMMMMMWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
WMMMMMMMWWWMWMMWWMMMMMMMMMMMMMMMMMMMMMMMMMMWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWWWWWWWWMMWMMMMWWMMMMMMMMMMMWWWWWWNWWXK0xodxxdoddxxdolokkddc;;;;;;;;;;:ccccccc:::::::;;::;;;,,;;,,,,,,,,,,,,,;;;;;;;;;;;;;;;;;;;;;:okXWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWMMMWWWWWMMWMMMMMWWMMMMMMMWMMWWWWMMMMMWWWWWWMMMMMMMMMMMMMMMMMMMMMMMMMMMWWMMMMMMMMMMMMMMMMMMMMMMMMMMMWWWMM
WWMMMMMMMMMMWWWWWWMMMMMMMMMMMMMMMMWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWMMMMMWWWWWWWWWWMWMMMMMMMMMMMMMMMMWWWWWWWWWXXOddkOkooodxxdolx00Oxl;;::::;;;;::cclllllloolllcc:::ccc::;;;;,,,,,,,,,,,,,;;,;;;;;;;;;;,,;;;;;::lkKXWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWMMMMWWWMWWWWMWMMMMMWWWWWWWMMMMWWWWWWWWWMMMMMMMMMMMMMMMMMMWWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMW
WWMMWWMMMMMMMMWWMMMMMMMMMMMMWWMMMMWMMMMWWMMMMMMMMMMMMMMMMMMMMMMWMMMMMMMMMMMWMMMMWWWWWMWWWMMMMMMMMMMMMMMMWMMWWWWWN0OkO0Oxllldddood0XK0ko::::::;;;:::::clcccccccccccc:::::cc::cc:;:;,,,,,,,,,,,,;,;;;;;;;;;;,,,;;;;::cokOKWWWWWWWWWWWWWWWWWWWWWWWWWWWNWNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWMWWWWWWWWWMWWWWWWWWWWWWWMMMMMMMMMMMMMMMMMMMWWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMW
WWWMWWWMWWMWMMWWMMWMWWWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWMWWWWWWWWWWMWMMMMMMMMMMMWWWWWWWWWN0kk00Oxlllddolx0kkkxdl::;;;:::c:::::;;;::::::::::::::;;;;:::;::::cc:;,',,''''',,,,,,,;;;:;;,,,,,,,;::coxk0NWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWMMWWWWWWWWWWWWWWWWWWWWWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWWMMMMMM
WWWMMWWWWWWWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWMMMMMMMMMMMMMMMMMWWWWMMMWWWWWWWMMMMMMMMMMMMMWWWWWWWWN0kx00Odlccoooo0NWxddoc:;;::ccc::::::::::::::::::::::::::;,,;:;;;;;;cl:c:,,',,'''',,;,,,;;;:;;;,,,,,,,;:ccxOkkXWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWMWWWWWWWWWWWWWWWWWWWMWWWWWWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWMMMMMMMMMWWWWMWWWMM
WWWWWWWWWWWWMMMMMMMMMMMMMMWMMMMMMMMMMMMMMMMMMMMWMWWMMMMWMWMMMMWWWMMMMWMMMMMMMWWWWWWWWWMWMWMMMMMMMMMMMMMMWWWWMN0xx00OdcccllloXNWNddo:;;ccc:ccc::::::::::::::::::::::::::::;,;;:;,,,,;l::::;,',,,'',,;,,,;:;:;;;,',,,,,,;:ldkOdxXWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWMMMMMWWWWMMMMMMMMMMMMMMMMMMMMMMMMMWMMMMMMMWMMMMWWMMMMMMMMWWWWMMMMMMM
WWWWWWWMWWWWMMWMMMMMMMMWMWMMMMMMMMMMMMMMMMMMMMMWMMMWMMMMMMMMMMWMMMMMMMMMMMMMMWWWWWWWWWWWWWMMMMMMMMMMMWWWWWWWNKxx00Oxcccclll0NWWXlc;:lllcc:cccc::::::::::::::cccccc::::::::;;;::;;,,,;c:;::::,'',,'',;,,;;:;;;,;,,,,,,,,,:ldxOOxkXWWWWWWWWWWNWWWWWWWWWWWWWWWWWWNNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWMMMMMMMMMMMWWWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWWWMWMMMMM
WWWWWWWWWWWWWWWWMMMWWMMMWWWMWWWWWMMMMMMMMMMMMMMMWWWMMMMMMMMMMMWMMMMWMMMWMWWMMMWWWWWWWMWWWWWWMMMMMMWMMWWWWWMWXkx0xOxlc::cccxK0Okl;c:dlccc::ccccccccccc:::::c::cccccc::::::;;:;:::;;,,;;:c::;;;;,'','';;;,;;;;;,,,,,,,,,,;;;:oxxO0xxNWWWWWWWWNNNNNWNWWWWWWWNWWNNNWWWWWWWWWWWWWWWNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWMMMMMMWMWWWMMMMMMMWWMMMMMMMMMMMMMMWWWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
WWWWWWWWWMWWWWMMMWWWMMMMMWWWMMMWWWMWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWMMMMWMMWMWWWWWWWWWWWWWWMWMMMMMMMWWWWMMXOdKdxxlc:::cckOdol:,oolo:cc:::ccccccccccccllllllc:llllllcc::::;;:::::;;,;:,;l::;;;;;,''',;;;;;;;;;,,,,,,,,,,;;;;lkkx0KdkWWWWWWWWWWWWWNWWWWWWWWWWNNWWWWWWWWWWWWNNNNNWWNWWWWWWWWWWWWWNNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWMMWWWMMMMMMMMMWWMMMMMMMWWMMMMMMMMMMMMWWWMWMMMMMMMMMMMMMMMMMMMMWMMMMMMMMMMMMM
WWWWWWWWWMWWWMMMWWWWWWWMWMMMMMMWWWWWWWWMWMMMMMMMMMMMMMMMWWMMMMMMMMMMMMWMMWWMMWWWWWWWWWWWWWWMMMMMWMMMWWNMMMW0x0ddOoc:::ccdNdll;;;xlcc;cc:::ccccccclodxdxxxddxollxxxxxxdolccc::::::::;,;:,:l::;;;;::,'',;;;;;;;;,,,,,,,,;;,,;;;cxOxkK0xOWWWWWWWNNWWWWNWWWWWWWNNWWNWWWWWWWWWNWNWNNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWMWWWMMMMMMMWMMMMMMMMMMMWMMMMMMMMMMMMWWWWMMMMMMMMMMMMMMMMMMWWWWMMMMMMWWMMMMM
WMMWMWWWWWWWWWMWWWWWWWWMWWMMMMWWWMWWMMMMMMMMMMMMMMMMMMMMWMMMMMMMMMMMMMWWWWWWWWWWWWWWWWWWWWWWMMMWWWMMWWWMMMX00ddOll::::clNO:;;;;ld:;:;:c:::ccccclodxkxxdxxxdoxdlldxxxxxxddollclccccc:;;;;,:l;;;;;;::;'.,;;;;;;;,,',,,,,,;;;;;;;:dOkdOX0d0WWWWWWNWWWWNWWWWWWWNWWWNWWWNWNNWWNWNWWNWNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWMMMMMMMMMMMWMMMMMMMMMMMMMMMMMMMMMMMMWMWWWMMMMMMMMMMWMWWWWWWWWMMWWMMMWWM
WWWWWMWWWWWWWWMMWWWMMWWWWMWWWWWWWWWWWMMMMMMMMMMMMMMMMMMMMMWWWMMWMMMWMMMMMMWWWWWWWWWWWWWWWWWWWWWWWWMMWMMWMWK0oo0lo::::ccO0:,c;::ll;,;;:c::cccloddxxxxxxdoddooldolcodddxxxddollollllclc:;;;,:l;;;;;;:::'.,;;;;;,,,,',,;;,,;;;;;;;;ok0xx0NkdNWWWWWWWNNWWNWNWWWWWWWWWNWNNNWWNWWNNNWWWNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWMMMMMMMWWWWWMMMMMMMMMMMMMMMMMMMWWWWWWWWWMMMMMMMMMWMMMWMMMWMWWWWWWMMMMW
WWWWMMMWWWWMMMWMWWMMMMWWWMMWWWWWWWWWWWWWMMMMMMMMMMMMMMMMMMWWWWWWMMMMMMMWWMMWWWWWWWWWWWWWWWWMMWWWWWMWMMWWMNKlokdcl:::c::x:,clcc:cl;,;;c:c:llooodddddddddolollccolc:cloodxddooclolllllll::;,,ll:;;;::::;'';;;;,,,,,,',,;;,,,;;;;;;;lxOkdOKXxkNWWWWNWWWNWWNWWWWWWWWWNWWNWNNNWWWWNWWWWNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWMMMMMMWMMMMMWMMMMMMMMMMMMMMMMMWWWMWWMMWMMWMMMMMMWWMMMMWWWMMMMMWWWWWWW
WWWWWWWWWMMMMWWWWMWWWWWWMMMWMWMMWWWWWWWWWWWMMWMMMMMMMMMWWWWWWMMWMMMWWWMMWMWWWWWWWWWWWWWWWWWMWWWWWWMMMXWMMXdxxk:lcl;::;l;;lolol;clc;:;c:c:ooololoooloollllllccccllc:ccloodddolcolcc:ccll::;;;llc:::c::;;';;;;,,,'','';,:;,,,,;:;;:;:dkKxdOX0dKWWWWWWNNWNNNNNNNWWWWWWWWWNWWWNNNWNNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWMMMMMMMMWWMMMMMMMMMMMMMMMMMMMMMWMMMMMMMMMMMWMMMMMMMMMMWWWMMWWMWWWWWWW
WWWMMMMWWMMWWWWWMWWWWWWWWWWMWWWMWWWWWMWWWWWMMWWWWMWWWWMWWWWWMMMWMMMMMMMWMWWWWWWWWWWWWWWWWWWMWMWWWWMMNNWMNOdkkl:odc::::;:lloool,co::;::lcclllolllllccccccclcccc:clcc;cccllooollcllc:;l::c;;,;,lcc:cc:::;,';;,:,'''''',,,;:,,,,,;:::l:dkKOdxKNkxNWWNWNNWNNWNNNNNNWNNWNNWNWNWWWNNNNWWNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWMWWWMMMMWMMMMMMMMMMMMMMMMMMMMMWWWWMMMMMWMMMMMMMMMMMMMMWWWWMMWWWWWWWWWW
WWWMMMMWWMMMMWWWWWMWWWWWWWWWWWWWWWMWWWWWWWWWWWWWWWWWWMMMWWWWWMWWWMMWWWMWWWWWWWWWWWWWWWWWWWWWWMWXWMMWKMMMOkkKl::ld;::c,c:cooldl,:l:::cclcc:llolcccccccc::cllcccc::ccc;ccccccllccccc:;:c;::,,,;,l:ccccc:;,',;;,;''''''';;,;:;,,,,,;::llok0Xkd0XKoKWNWNNNWNWNNNNNNNNNNNWNNWNNNNNNNNWNWWNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWMMMWMMMMMMMMMMMMMMMMMMMMWWWWMMMMMMMMMMMWWWWMMMMMWWWWWWWWWWWWWWWWW
WWWWMMWWWWWWWWWWWWWWWWWMWWWWWWWWWWMWWWWWWWWWWWWWWWWWWMWWWWWWWWMWWWWWWWWWWWWWWWWWWWWWWWWWWMWWMWXWMMMXXWMNdx0kc:lol;:::;cccoocoo:c:o:::llc::ccclcccccccccccclllccc:::::;ccc::::c:::::;;::;:;;',,;cccc:c:;,,';;',,''''''',;,;::,,,,,,;:cooxOKKxxKXxkNNNWNNWNNWNWNNNNNNNNNNNNNWNWNNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWMMMWMMMMMMMMMMMMWMMMMMMMMMWWMMWWWWMMMWWMWWMMMMMMWWWWWWWWWWWWWWWWWWW
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWMMXNWMWWKWWM0ok0oc:lx;:::,:c;looloxcococ:;clc:;:ccllcccclcllccclollccc:::c;:c:c::;;:;:::;;;;;:;,;':oc:ccc:c;,,',;;';,''''''',;;,;:;,,,,,,,,ldkO0X0xxKOoKWWWNWNNNNNNNNNNNNWNWNNNNNNWNWNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWMWWWWMWWMMMMMMMMMMMMMMMMMMWWMWWWMMMWMMMMMMMMMWMMMMWWWWWWWWWWWWWWWWW
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWMWWWWWWWWWWWWWWWMMXXNMWXKXWMMxlKddc:oo;:;;,c;:loollkco::c:;;c::;;ccclccclllllollllollccc:::c::c:::;;;;;::;;,;;;:;;';lxc;;::;;,,'';,',;''''''',',:;,;:,,,,,,,,;dkO0XX0dO0l0NNNNWNNNNNWNNNNNNNNNNNNNWWWWWWWWNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWMMWWMMMMMMMMMMMMMMMMMMWMMMMWMMMMWMMWWWMMMMMMMMWWWWWWWWWWWWWWWWWW
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWMMWWWWWWWWWWWWWWWMWWWWWWWWWWWWWWWMNXXMMXNWKWMNoxOdd:,xc,:;',l;:lollox:c;:::;,;:;:;:ccllclllllloolllllcllccc::::cc:;;;;;;;;:;;;;;;:;;,cddc:;;;,,,,',,,.,;''''''',',:c,;:;,;,,,,,,:x0KXXXkx0okNNNNNNNNWNNNNNNNNNNNNNWNWWWWWWWNNWWWWWWWWWWWWWWWWWWWWWNWWWWWWWWWWWWWWWWWWMWWWWWWWWWWWWWMWMMMWMMMMMMMMMMMMMMMMMMMWWWWMMMMMMMMMMMMMMMWMMWWMWWWWWWWWWWWWWWWWWW
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWMMWMWWWWWWWWWWWWWMWMMWX0WMXKMNNMM0lOodo,,k:,;,':c;lllclll:c,c:;c;,;;::;cllllllclllloolllllclcccc::;;c::;;;;;;;;:;,,;;:;;,co0lxc;;,,,,'.;,..;,''''''''':cl:;::;,;;,;,',:x0KXXKxOkdXWNNNNWNNNNNNNNNWNNNNNNWWWWNNWWWWNWWWWWWWWWWWWWWWWNWWNWNNNWWWWWWWWWWWWWWWWWWWWMWWWWWWMWWWMMWWWMMMMMMMMMMMMMMMMMMWWWMMWWMMMMWMMWWMWWMMWWWWWWWWWWWWWWWWWWWWW
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWMMMMWKKNWKXNMKNMWxklcdl':x;,;';l::ll::::;cc;cc;::,,;::::lllllllcllllllllllccccccc:::::::;;;;;;,;;,,,;;;;;o:Okox;,,,',,''''..,''..''''.':loo:;c:,;;;;;,',:xK0KNOxOoKNNNNNNNNNWNNNNNNNNWNNNNNNNNWNNWWWWWWWWWNWNWWWWWWWNWWWWNNWWNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWMMWMMMMMMMMMMMMMMMMMMMWWWWWWWWWWMMMMMMMMWMWWMMMWWMMMWWWMMWWWWWWW
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWMMWWWMXXXWKXNMM0WMXdx::dc':d;,;,;l;ccc;;:;;::;:dc;::,,;:::cllllcllclllllllllccccccc::::;:::;;;;;;,;;,,,;:;;lcx0oOx:''''''.,,..',.'..''''..,lodc:::;;:;;:;,,,:x00XXdko0XNNWNNNNNNWNNNNWWNNNNNNNWWWNNWWWNNWWWWWWNNWNWWWNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWMWWWMWMMMMMMMMMMMMMMMMMMMMWWWMWWMWWMMMWMWWMMMWMWWWMMMMWWWMMWWWWWWWWWWW
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWMWWMWWWWWWWWWWWWWWMMMMWWWXXWXXXWWM0NMKOc;:o:'cd,;;;;l,::::;:,:;,c;ol;;:;,,;cc:lllllclccllllllllccccc:::;;;;;;::;;;;;;;;,,,;:;;lld0kd0x;'''''.,,...,'.'..'''...';cll:;;;;;;;::;',,cx0KXOdo0XNWNNNWNNNNNWWNNNNNNNNNNNNNNNWWWNWNWWWWNWWWWWWWWWWWNWWWWWWWWWWWNWWWWWWWWWWWWWWWWWWWWWWWMMMMMMMMMMMMMMMMMWWWWMMMMMWWMWWMMMWMMMMMWWWMWWWMMMMMMWWWWWWWWWW
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWMWWWWWWWWWWWWMWWMWWNWWNXNNWWW0XW0k,::o,'cd;c:;;l,:;:;;;,:;;:::dc,:::;,:clclllclclcclccccllcccccc::;;;,;;;;;;;;;;:;,,,;:;;lld00l00d;'''''',,...,'....'''..''',;lc;,;;;:;:c:,,,,:dOKKxoKXNNNNWNNWNNWNNNWNNNNNNNWWNNNNWWWWWWNNWNWWWWWNWWWWWWWWWWWWWWWWWNWWWWWWWWWWWWWWWWWWWWWWWWWWMMMMMMMMMMMMMWWMMMMWWWWWWWWWMMMWWWMMMMWWWWWWWWWWWWWWMMWMMMWW
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWMWWWWWWWWWWWWWWWWWWWWWWWWWWWNXWXWWWWO0WXc'::l',:dcl;;;:';;:;;,,::l:c:ll:;c:::,:llllllclcc::cccccccc:cc:::;:c:;;;;;;;;;;;c;;;;::;c:x00l00Ol;''''.,,....,......''..c,..,cc:,',;:;;cc;',,,;oOKkxNNNNNNNNNWNNNNNNWWNNNWNWNNNNNNNNWNNWWWWWWNWNWWWWWWWWWWNNWWWWWWWWWWWWWWWWWWWWWWWWWMWWWWWMWWWMMMMMMMMMWWWMMWWMWWWWWWWWWWWMWMMMMMMWWWWMMWWWMMWWWMMMWMMWW
WWWWWWWWWWWWWWWWWWWWWNNNWWWWWWWWWWWNWWWWWWWWWWWWWWWWWWWWWWWWMWMMWWWWWMWWWWWWWWWWWWWWWMMWWWKWNWNWWWOkN0;':::';;dcc,:,,';;;;;,,;:dk:cllc:cl:c:;cllllllccccc::cccccc:ccc:::cod,;c;;;;;;;;:l;;;;:;c,k00okOOxc,.'''','...'''.....'..'c:'.':c:,'',;:;cl:,',;,,cdoxXNWNNNNWWWNNWNNWWWWNWNNNNNNNNNWNNNNWWWNWWWNNWWWWWWNWWNNWWWNWNWWWNWWWWWWWWWWWWWWWWMMMMWWWWMMWMMMMWWWWMMWMWWWWWWWWWWMWMWWMMMMMMMMWWWWWWWWMMWWWWWMWMMWW
WWWWWWWWWWWWWWWWWWWWWNNWWWWWWWWWWNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWMWWWWWWWWWWWWWMWKWMWWWNWWkkKd,':;;':,ll,':'',,,;;,';;:k0k:locc:oc::::;:::clcccc:oc::::cc:ccc::ccxxl,,,,;;,;;;',,',,:;::O00dxOOOl:,.''.,'....,.......'..'c:,..;::;,''';::l:;,,;,,,;cdxOO0XNWWWNNWNNWWWWNNNNWNNWWWNNNNNNWNNNWWNNWWWWWWWWWWNNNWWNNWNNNNNNNWWWWWWWWWWWWWMMMMWWWWMWWMMMMWWMMWMWWWWWWWWWWWMWMWWWMMMWMWMWWWMWWMWWWMMMMWWWWWWWW
WWWWWWWWWWWWWNWWWNWWWWNNNNWWWNWWWWWWWWWWWNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWXNWMMXWNWNk00l,,:,'':'co..;.',,,;;'',:ck00Ocl:;::;lllc:;;:lllllcc:ooc::::;:c;olclxxx;;lc,;:oc;;oo:,';,,lxO0oxOOOd;;'.'..,.....'......''..':;,'',c;:;,'',;;:::,,;:,;,codkkxdk0KXNWWWWWNNNNNNNNWNWWNNNNWWWNNNNNNNNWWWWWWWNWNNWWWWWWWWWNNWWWWWWWWWWMWWWWWWMMWWWWWWWWMMWWWMWMWWWMWWWWWWWWWWWWWMMWWWMMMMWWWWWWWWWWMWWWWWWWWWW
WWWWWWWWWWWWWWWWWWNWWWNNWWWNWNWWWWWWWWWWWWWWNWWWWWWWWWWWWWWWWWWWWWWWWWWMMMWWWWWWWWWWWWWNXMMWWKXNWKOKKc,;:,'':':o..,'.,,;;;'',:lO0kxdlcocccoxxxol:;;::;:ccc;cdc;::;c:lol:dxxxccco':loo::ddo;';'d0kkkcOOOOO:;,'...,'....''......'...';;,'',c;;:;,'',;:c:;';::;,,cOXXXKOkkO0KXNWWWNNWNNNWWWWNWWNNNNNNNWNWWWWWWWWWWNWWWWWWWWWNNWWWWWWWWWWWMMWWWWWMWWWMMWWWWWWWWWWMWWMWWWWWWWWWWWWWWWWMWWWWWWWMMMMWWWWWWWWWWWWWWWWWWW
WWWWWWWNWWWWWWWWWWWWNWWNNWWNWWWWWWWWWWWWWNWWWWWWWWWWWWWWWWWWWWWWWWWWMWMMWWWWWWWWWWWWNNW0WMMWXXOWNKOKK;;:;,'':':c,.,'.',;;;,,c,oxkO000xclcccoxxxxdolccc;;:::::::cc::cxdxdxxxxllolcdxddd:ddx::;;O0O0OlOOOOOd,;'...'......,......'..'..,,,,,,:;;;:;,'',;::;;':cl;,ckXWWNNK00O00KKXNWWWNNNNWWWWWWNNNNNNNNWNWNWWWWNNNWWWWWWNWWWNWWNWWWWWWWWWMWWWWWWWWWWMWWWWWMWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWMWWWWWWWWWWWWWWWWWWWWWW
WNWWWWWWWWWWWWWWWWWWNWWWNWNNWWWWWNWWNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWMMMWMWWWWWWWWWWWMNXWKNWMMM0NOWX0O00,:l,''':,;;:.''.'',,,,,c'xk000000Oocll:ldxxxxxxddxdollllloc:coxxxxxxxxxoxxxxxxxxxoxxxxxxkOOOOdOOOOOOk,;''...'......,......'..'..,,;,,,::;;:::,'',;::;,':do;cdOXWWWNNNXXKXXKKXXWWWNWWWWNWWWNNWWNNWNWWNWNWNNNNWNWWWWNNWWWWWWWWWWWWWWWWWWWWWWMMWWWMWWWWWWWWWWWWWWMWWWWWWWWWWWWWWWWWMWWWWWWWWWWWWWWWWWWWWWWWWWW
WWWWWWWWWWWWNWWWWWWWWNWWWWNWNWWWNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWMMWWWWWWWWWWWWWKNWkMMMMNON0WX0O0k,,o,''.;,,;',''..',,,,,c,kkOOO00000kolol:oxxxxxxxxxxxxxxxdoxxxxxxxxxxxxxxxkxxxxxxdxkkxkOOOOOOOOOOOOOO:;'''..'.......'.....'...''.';:;,;:;,;;::;,'',;:c;''ckd:lk0NWWWWWWNXNNNWWWWWWWWWNNWNNNNWWWNNNWNNNWWNWWWNNWWNWWWWWWWWWWWWWWWWWWWWWWWWWWWMWWWWWWWWWWWWWWWMWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
WWWWWWWWWWWWWWWWWWWWWWWWNWWNWWNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWMMMMMWWWWWWWWWWWWWWWWWKNWXOMMWWK0KXNK0OOk,,l,''.;,;,.:''..''',;,:;kkkOO000OkkkdllclloodxxxxkkxxxxxxxxxxxxxxxxxxxxxdddooooooooodxkkkOOOOOOOOOOk:;'.'..''.............,...''.:l:;,;:;,;;;:;;,,,,;cl;',lkxloOKNNWWNWWNNXXWWWMMMMMWWWNNWNNWWWWNWWWWNNWWWWWWWWNWWWNWWWWWWWWWWWWMWWMMMWWWWWWWMWWWWWMWWWWWWWWWMWWWWWWWWWWWWWWWWWWWWWWWWWWWWWNWWWWWWWWWWWWWW
WWWWWWWWWWWWWWWWWWNWWNWWNWWNWNWWWWNNWWWWWWWWWWWWWWWWWWWWWWWWMMMWWWMWWWWWWWWWWWWWWNXWW0XMMWWOKOWXKKOOk',l','',.,,..c'....'';,;;kkkkkkxxddxddddddddxxdodxxkOOOOkkkOOOOOOOOOOxddxxxxxxoollllllloddxxkkOOOOOOO:;'.....,'......'......'....,';lc;,;::;;;::;;;,,,;;llc,,lkxlxKNNNWWWWWNNXNXXWWMMMMMMWWWNWWWWWWWWNNNNWNWNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWMWWMMWMWWWWWWWWWWMWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWNWW
WWWWWWWWWWWWWWWWWWWWWWNWWNWWNWWNWWNWWWWWWWWWWWWWWWWWWWWWMMWMMMWWWWWWWMWWWWWWWWWWWXWWXXWMMWXOX0WK0NkOd,,l''','.,,..':......;',:kxdlcc:;'''''''';;coxxkOkOO000000000000000Okxkxxo;'.......''''',;;coxkkkkkkO;,,.....','............''....,,,:c:,,;cc:;;:;;,;;,,,;ldl:;lkklkNWWWWWWWWWWWNXXXNWMMMMMMMWWNNNNNNNNWNWWWWWNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWMWMWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWNWWWWWWWWWWWWWWWNW
WWWWWWWWWWNWWWWWWNWWNWNWWWNNWNWWNWWWNWWWWWWWWWWWWWWWWWWWWMMWMWWWWWWWWWWWWWWWWWWWXWWNKMWMMW0kNXN00NxOo,;o''.,''';...,,.....,'';:,..,,''............,oOOO000000000000000000Okdl'....................',;ldkkk,''.....,,''....... ....''....',,:cc,';:cc;;::;;,;;,',:loll:lkklOWWWWWWWWWWNWWWXKKKNWMMMMMMMWWWNNNNNWNNWNWNWWWWWWWWWWNWWWWWWWWWWWWWWWWWWWWWWNWWMMWMWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWNWWWWWWWWWNW
WWWWWWWWWWWWWWWWWWWWNNWWWNWWWNNWNNWWWNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWMWWWWNNWKKNMMWWkOWWX0KXd0o,:o','','.,'...,'............:;''.'',;;;:;'...'ok0000000000000000000Okd,,;';,;loo::;,'.::;''.....:oko,... ....,,'........ ..'''..''',,,cc;';,::;,;::;;;;;;,,:clolcoxxd0WWNWWWNNNNNWNWWNK0KKXWMMMMMMMWWWWWWNNNNNNNWWWWWWWWWWWWWWWWWWWWWMWWWWWWWWWWWWWMMWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWNNNWWWWWWWNWWWW
WWWWWWWWWWWWWWWWWWNWWNNWWNNWWWNWWNNWWNWWNNWWWWWWWWWWWWWMWWWWWWWWWWWWWWWWWWWWWWWWNWK0KKMMWXkKWMK0KKoKo;cd',,';''.,...........'.';cdxo,:::odddxxoo;dxdkk00000OOOO00000000000OxO0ocoo0x0kOxdcl,xkxdoc;.....;,,.....'..,,,'....... ...'''..''',,,;c:;;';:;,',;:;,;,;;;,:cllold0OxONWWWNWNNWNNNWNNNNNK0KKNWMMMMMMMMWWWWWWNNNNNNWWWWWWWWWWWWWWWWWMWWWWWWWWWWWWMMMWWWMMWWWWWWWWWWWWWWWWWWWWWWNWWWWWWWWWWWNWWWWWNWWWWWW
WWWWWWWWWWWWWWWWWWWWWNWWWWWWNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWMWWWWWWWWWWWWWWWWWNWO00XNMM0xXWM0OXOo0o;cd,,'',''.............,,dkO0Kx;dxcOOxKxOkdok0000OO00OOOOOOOOOOOOOOOOO000ddkdKOOO0Odokck00OOxl':ooo,.......''.',;,'....... ..,,'.'',,',,,cc;c.';;,,',;:;;,,;;,;:llolld0KOOXNWWNNNNNNWWNNNNNNNNKKKXNMMMMMMMWWWWNWWNNNNNWWNNNWWWWWWWWWWWWWWWWMWWWMWWMMMMMWWMWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWNWWWWWWWWWWWWWW
WWWWWWWWWWWWWWWWWWWWWWNWWWWWNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWMWWWWWWWWWWWWWWWWWWWWWKO0OXKWWxkXWMOONxx0d;lo:;',','.............,,d0KKKO:dkokK0O0OkkdO000OOOOOOOOOOOOOOOOOOOOOOOOOxoxdxO0KOOdkxc00000xldkkkd.........,..,,,''...... .,;,,''',;,,,,;c::..,;;,,,,;:;,,,,;,;;clolloOXXXXXNWWWNNNNWNNWNNNWWNWNXXXXNWMMMMMMWWNNNNNWMMWNNNNXNXXXXXXNNWWWMWWWWWWWWMMMMMMMWWWWWWWWWWWWWWWWWWWMWWWWWWWWWWWWWWNWWWWWWWWWWWW
WWWWNWNWWWWWWWNWWWWNNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWNXWM0OOOXkWNx0KWMOOXxKOd;loc;.',','............:;clx0KKxdOOxxdoodkxkOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOkkxxolcldkdcokOOkxxkkkkx,.........''',,;'''...... ..,;,,,',;:;,,,,;l:'.,,;:;;,,;:;;,,,,,,::lloookXNWXXNWWWWWWNNNNNWWWWWWWWWWNXXXXNWMMMMMMWNNNNNNWWWWMMMWWWNNXXXXXXXNNXNNNNWMMMMMWWMWWWWWWWWWWWWWWWWWNWWWWWWWWWNWWWWWWWWWNWWWWWW
WWWWNWWWNWWWWWWWWWWWWWWNWNWWWWWWWWWWWWWWWNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW0WWNOOOO0OXKxK0WMkK0dNOk:llcc.,',',.............llxxkOkkdodxddxkkkkOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOkkkkkkkkkkkkkkkkkkkkkc.......'.;.,.';,;''...... ...,,;,,,,;:;,,,,,ll;',,;:::;,,;;;:;''',,;clcooox0XWWKKKXMMWWWWWWNWWNWWWWWWWWWWNXXXXXWMMMMMMMWWWWWWWWWWWMWWWWWWWWNWNXXK000KXNWNWWWWWWWWWWWWWWWWWWWWWWWNNWWWWWWWNNWWWNWWWWNWNW
WWWWWNWWWWWNWWWNWWWWWWWWWWWWWWWWWWWWWWWWWNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWOWW0OOOkkKxkoX0NWxXx0Xdxlccll.'','''.............:xkkkkkkkkkkkkkOOOOOOOOOOOOOOOOOkkkOOOOOOOOOOOOOkkkkkkkkkkkkkkkkkkkkkkkd........,';'','';,'''...... '.,;;,,,;;::;,,,:,c:,,;;;::::;,,;;;;;,,,,;clllloxOKXNN00KKWWWWWWWWWWWWWWWWWWWWWWWWNXXXXXNNMMMMMMMMMMMWWWWNNNNNNNNWWWWWWNNNXK00KXXNNNWWWWWWWWWWWWWWWWNNNWNWWWWNNNWWWWWWWWNNN
WWWWWNWWWNWWNWWNWNWWWWWWWWWWWWWWWWWNWWWWWNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWXXWWO0OOkkOxolX0XWkNdWOddoc:d:..,.''''.............ckkkkkkkkkkkkOOOOOOOOOOOOOOOOkxxxkOOOkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkx'..... .;o:,c.,,,,,,.'...... .,.,;;,,,;;::;;,,:',:;,:::cccc:;,,,,,;;::::;clollldkOKKXXK00KNWMWWWWWMMMMMMMMWWMMWMMWWNNXK0O0XXNNWMMMMMMMMWWWWWWWWWNNNNNNNNNNX00XXXXXXXNWNNWWWNWWWWWWWWWNWWNNNWWWWWNWWNWWWN
WWWWWWNNWWWWWNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWOWWW000OkkkOllKKKWOOKXxlcOc:x,'.,''''..............'dkkkkkkkkkkkkkOOOOOOOOOOOOOkxxxxdOkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkxxxx,.,'.. .'ldo'o:.,',,''.'...... ''.,;;;,,;;;:;;;:,,,;;';ccccllllc;;;,,,;:cllc:looloodk0XXNXN000KNWWNWWWWWWWWWWWMWWWWWWNNNXNXXXKXXXXKKKXNWWMMWWWWWWWWWWWWWMMWWWWWWMMMMXXXNNNWWWWWWWWWWNWWWWWWWWWWNWWWWNNNNN
WWWWWWWWWWWWWWWNNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWkWWXKKXOkxkkdd0X0XXxN0llcK::o,;..,,,'..... ........',xkkkkkkkkkkkkkkkkkkkkkkkkkxxxxxokkkkkkkkkkkkkkkkkkkkkkkkkkkkkkxxxx;.:o,..'cc:ddl.'.,:'''......... .',.;;:;;;;;;:::c:,,,;;',::ccclloooc:;;;;;::cccclooddodxk0KXXXXK000NWWWNNNNWWWWWWNNNNNNWWXKKKX000XXXK00OOkOO000KKKXXXXXXXNWMMMMMMMMMMMMMMMMMMMMMMMWWNXXNXXNNNNNNNNNNNXNNNN
WWWWWWWWWWWWWWWWWNNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWNkWN0KNW0OxxxokOKOXKKXxllodo:d,;'.,;;,'.... .........,dkkkkkkkkkkkkkkkkkkkkkkkkxxxxxkkkkkkkkkkkkkkkkkkkkkkkkkkkkxxxxxx,,odc..,clc:do,;.,.,;'........... ..''.;;:;;;;;:::;lc:;,,;,',:cccccloddolcc::::cccclloooooddxkOOO000OkkOOKNXKKKKKXXXXXXXXXNXXXK00KK0KKKK0OkkkkkkxkOOkOO0KK00000KXXNNNNNNNNNNNNNXXKKKKKXXNXXNNNNNNNNWWWWNNNNN
WWWWWWWWWWWWWWWWWWNNWWWNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWNWWWWWWWWWWWWWWWWWXOWKONWWN0kxdoOOXO0XN0dolo;O;k',;..;;;'''... .. ...,..lxkkkkkkkkkkkkkkkkkkkkkkxxxxkkkkkkkkkkkkkkkkkkkkkkkkkkkkxxxxxo,cxxl.':clcclo,c'''.';,'.......... .'''.;;::;;;;::,occc:;',;,';cllcccloodoooolllooooollooooooddxkO00KKXXK0O0K0KXXXXXKXXKKK0KK000K00Okxk00KKXXXXXXKXNNNXKKKKKKXXKKK000KXNXXXXKKKK00KKXNNNNWNNNNWNNNNXXNNWWWWW
WWWWWWWWWWWWWWWWWWWWWWNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWNXON0kNNWWXOdooOOXkXWXxxoll;d:x;.,'.';,,'''...'......,.'..cdkkkkkkkkkkkkkkkkkkkkkkkxkkkkkkkkkkkkkkkkkkkkkkkkkkkkxxxxxlcxxxo;;;;;cllocc.,,,..,;''.......... ..''.';;:::;;;:;occccll;.,;'.;clolclllloooooooodxkxocclloooooooddxkkO00KKK0O0KXWNKKK00OOkkkkkkxxOKK00XNXXNNNWWNXXXNNWWNNXKKKKK000000KNWWWXKXXNXk0000KXNNNWWNNNNNNNNNNNNNN
WWWWWWWWWWWWWWWWWWWWWWNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWNWWWWWWWWWWWWWWWWWWXKOXOkKXMWWXxkdOkXOWNO0dolc:.xlc.','.,,,,'.....:.....cd:'..:okkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkxxddoxxxxx;,';llllll:.,,','..,;'.......... ..'''.,;::::;;;;cclccclol,'','';:llollloloooolooodxkkdlccloodddoooooooodxxxkkkkO00000OkkkOOkkk0XNWWNXXXNWNNNNNXXK00OOOOO0KKKKXKKKKXXXXXKWMNXNXNXOKK0000KKXNNNNNNNNNWWNNNN
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWXKOKkkOXWWWWXOlOkXNWKKdoocc:.d:l.';;..,,,''....;l:. ..ckko:.'lxxkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkxxxxxxxxxc,;lllllcc;',,''',,.'','.......... ...'''.;;:c;;;;;c:cllccloo:''',',,,:clolololollooooodkkdolloooddddxxxxxddddxxkkkkkkOO00OOOkOKNNXXXXXXXXK00KOOOOOO0KNNWWWWWWNNNNNNNNNNNNNXMNMXNKWONNNXKKK0OKXNNNNNNNNNNNNN
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWNWWWWWNWWWWWWWWWWWWWWWWWWWWWWWWWWXX00xkkWXMWWN0oOOXXNXxddl:c:,:;l.,,;...'','.....cll;...;dkkk:.kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkxxxxxxxxxxd.lllllccc,,,,''''','.;','... ..... ..'''.';;:::,;,::cccclcclol;'',,,,',,;clooloooooloolddxxxlllodxddddxxxxxxxxxkkkkOOkkkkkkkkO00O000000000KKXXNNXK00KXNWNNWWWNNNNNNNWNNNNNXW0XWXONONNWNNNNNXKKKXNNNNNNNNNNN
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWNWWWNNNNNWWWWWWWWWWWWWWWWWNXKWddkkWKWWNNWOkX0NXOddolcc:;o,:'',,'.....''.. ..lc:.xl,.lxkko;kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkxxxxxxxxxx',;cccll,',,,,,,,,,,'.,,,'.... .........'''.,;;::,;,;:ccccclcccllc,',,,,,'.,::ccloooooooloooodkxolldOK0dOOOOO0K0000OOOO000000000K00KKXXWWWWWWWWWWWNNNKKK0XXNNNWNNNWNNNNNNNNXX0XXNW00XXNNNNNNXXNNXXXXNNXNNXXNN
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWNWWNNNWWWNWWNWWWWWWWWWWWWWWWWWNKKWldxkWWNWWWMKKOXN0xxollcc:,o'.c.,''.......'....,ol:;kkdodxkk:okkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkxxxxxxxxx:'cllll;'',,,,,,,,,,,....',..... ........,',.';;;::,,;:ccccccllcclcc:'',:;,,'',,::cldddodoododdodxkdolx0KO0NWWNNWWWWMWWWNNXXXXNNWWWWWWWWWWWNXXNNNNNNNNNNXKKKXNNNXNXNNNNNNNNXNNNXXXNOXXXNNNXNNXXNNXNNX0XXXXNNNN
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWNNNNNWWWWWWWWWWWWWWWWWWWWWKKWkldkWWWNWWO0kKX0xxdollc:;;c'.l.,.,.............,cccckkkkkkkxlkkkkkkkkkkkkxoddkkkkkkkkkkkkxooodxkkkkkkkxxxxxxxxxxxxxl'c:::::;::;'',,,,,,,'......'..... ........,,.,,;;;c;;;::cccccccllcllccc,,;c:;,,;,;:::cdxxxdodddddddxxxoodkK0XNWWWNNNWWNNWNNNXXNNNNNNNNNNWNNNXNNNXNNNNNNNNNXXXXXNNNNNNNNXXKKXXXNXXWNNNXXNNNNNNNNNNNNNNXOXNNNNNN
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWNWWWWWWWWWWWWWWWWWWWWWWWWKKWKcokXNNWWOOOxXKxxxdoolc::l,.'c','''.'.'.........,';:lkxxxxkxdkkkkkkkkkkkkkkkdxkkxxxxxkkkxddxkkkxxkkkxxxxxxxxxxxxxxo;c::cc:::::::,,,,,;;;,...;.,....... ........,,.,,,;;'l';;:ccccccc:clllccc;c:,;ll:;:::;:;:loxkddoodxxxxxxkkxxxONKKNWMNNNNNNWWNWNWNNXNXNNNXXNNXNNNNNNNNNNNNNNNNNXKXXXXXXNNNNXNNNNNNNNNNNNNNXNNNXXNNXXXXXXX0KNNXXNN
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWNWWWNNWWWWWWWWWWWWWWWWWN0WNlokXNWWkkOdOKxxxxooocc::l'..,,;,.'..'.'.........;::clxxxxxxxxxxxxxxxkkkkkkkkkkkkkkkkkkkkkkkkkkxxxxxxxxxxxxxxxxxxl:oooolcc:::::::;;;:;;;;..'';.,................;.,,,,:,,:;;::cccllllc:cllccc,:lc:clllllllcc:::cclooloddxkkxkkkkkOKNNKNMMWNNWWWNNWWWWNNNNXNNNNNNNNXNNNXXXNNNNNNNNNNXKXXNNNNNNNNNNNNNNNNNNNNNNXXXXXXXXXXXNXXXXXXXXNN
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWKNWko0NNW0kOok0xxxxoool:c::c'...:','''.''.'.........:::lcdxxxxxxxxxxxxxxxxxxxkkkkkkkkkkkkxxxxxxxxxxxxxxxxxxxxxxxxxccoooooollcc::;;;:::cc::;....;;.'................,,,,,;c'':';:clllllllc::cllcc''lllclloooooddddoollcllloooxxxxkkOOOO0KKKNWMWNNNNNWWWMWWWNNNNXNXXNNNNNNNXXNNXNNNNNNXNXKKXNNNNNNNNXNNXNNXNXXNNNNNXXXNXXXXXXXXXXNXNNXX
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWKNOxXONOXOloOxxxxdooocccc:;''..;',,.'..''.'.........:::lclxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxc:dddooooooollc::;;;;;:clcc;.'.'::.................,;;;;,;;'';,cclolllllllc::lllc,;:ollloooooddddddoodddddddxxxxkkOO0OO000KKNWWNXNXNNNNWWWWNNWWNXNNXXXXNNNNNNNNNNNNNNNNXXKKXWWWWNNXXNXNNXXNXNNNNNXXNNNNXXXXXXXXXNXXXX
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWNWWWWWWWWWWWWWWWNWWWWWWWWWWWWWWXK0XxkxO0llddxxxdoooll;cc;';,...,,,.'..'''..........':::llcoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxo:loddddddddddoollc:;;;;;cllll;.'.:::'... ............;;;;;,:;'':cllloollllolcc::ll::kcloooooooodddddddodxxxdodkkkOOOkOOOOOO000KXWWNNNNNNXXNNNWWWNWWWWNNNNNNWWWWWWWWNNWWWWWWNKKXNWWNXNXXXNNXNXNNXXXXXXNNXXXXXXXXXXNXXXX
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWNWWW0K0xok0llodxxxdodollx:c;;.;,...;',..'.''............,c:cllccoxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxllldddddddddddddddoolc::;;;;:clllc'.,::c. .. ...........';;;;;;:,,,;ooollooooooolllcclclxdcooooooooddddddxdxxxxxddkxkOOOO0OOOOkO0K00KXNNNNNNNNNNNNNWWNNNNXXXXNXNNXNXXNWNXNXXNNXXXKKXWMWNNNNXNNXXXXNXNXXXXXXXXNXXXXXXNXXNX
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWNNWWWWWWWWWWWWWWWNWWNWWN0XOdO0llldddddodolllO:c.',,'''.'','.'................;ccclllc:cdxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxdllodddddddddddddddddddoolc::::::cllll;.'ccc.... ...........';;;:;:;,l:,loooloooooooolllccoccoocooooooddddddddxxxxkkxO000kkOOOOO0OkkkK000KXKXXXNXXNNNNNNWWWNNNXXNNNNXNNXNNNNNXXNXXXXXXKKNWMNXNNNXXNNNXXNXXXXXXXXXNXXXKXXXXXX
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWNWWWWN0XKkO0llcododolddllloO:,.';',;;..'''........ ..........:lcclollc::lxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxolloooddddddddddddxdddddddooolllc::::llooc..:oc...' .'........,;:::::;:ol,lddolloooooooollloxolcdxooooddoooddddxkkkk00OxkKWX0kkOOOOOOOOXNXKKKKK0KKXXNNNNNXXNWNNNXXNNXNXXXXNWNNNNNNNNNNNNXKXNMNXXXXXNNXXXNXXNXXXXNXNXNXXXXXXXX
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWNWWWWWWWWWWWWWWWWWWWWWWWWWWWNW0KKOK0occloloolodlllldx:.';'.:c,'..','....... ...........:llclooloo:;:oxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoc,ldddddddddddddddddxxxdddxxddooodddoccccloo'c.'c:..... ..'.......,::::::;:do;:dddlcooodooddollxK0xooddodddddodddddxkkkkO0K0kOXMWKOkkOOOOOOKXNNNNXKK000KXXXXXXXXNWNNNXNNXXXXNXXXXXXXNNXXNXXXXKXWMWXXXXXXXXXNNXNXXXXXKXXXXXXXXXXX
WWWWWNNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWNWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWNWNX00OX0dc:collollolloooxd'.'c.':c,;..',,....... ..........'.;lllloolodd'',:oxxxxxxxxxxxxxxxxxxxxxxxoc,'':ddddddddddddddddddxxxxxxxxxxdddddxxxdollool;o:.,....'. ..''.....';ccc:::,;od:;oddocooddddddoloONMXOdddooddddddddddxkkkkkkOXK00NWWNKOOO00O0NNNNNWNNNNNXK0O0KXXXXNWNNWNNNXNNXXNXXXNXXNXXXXNXXXXXNMWXXXXXXXXXNXNNNXXXXXXXXXXXXKKK
NNNNWWWNNNWWWWWWWWWNWWWWWWWWWWNNNNWWWWNNNNWWWWWWWWWWWWWWWWWWWWNWWWWWWWWWWW0KOX0xo::lccllclcloooxO:..;c.;:;;:;'.;;...... ...,.......'.:lollooloo,;;,.':oxdxxxxxxxxxxxxxxxdl;',::,oddddddoodddddddddddxxxxxxxxxxxdddxxkkkkxdoo,odl,'... '....',....'':ccc:::,;odo;lddd:oddddddddoo0WMMNOxxdodddxxdddxdxkOkkkkkOKXKKNWWWN0kO0O0NWWNXWNNNNNNNXKO00KKNXXWNWWNXXXXXNXXXNNNNXNNXNXXXNNXNMMXXXXNNNNNNXXXXXXXXXKXXKXXXXK
NNNNNNNNNWNWWWWWWNNNWWWWWWWWWWWNNWWNWWWWNNWWWWWWWWWWWWWWWWWWWNNNWWWWWWWWWX0ON0kk::l:cccccclcooxxO..,c;.;;c:,;;,';...... ....,.'......'.:lllloolo,,,,,,'';coxddxxxxxxdxdl:,,;:;;;,ddddddddoddddddddddddxxxxxxxxxxxdddxxkkkOOkxd,xdd:''........',''.';,:llccc:;lood::dddcodddddxxdodOWMMWN0kdxdddxxxxxxxxkOOkkkOOOKXXNWWNWKOO0OOKXWWWNNNNNXXNXXKKKKKKXXNNNWXXNXNNNNXNNNXXNNNNXXXXXXXWMWXXXXNNNNXNXXXXXXXXXXXXXXKKX
NNNNNNNNNWNWWWWWNNNNNWWNWWNWWWNNNWNNNNWNNNNWWWWNNWNWWWWWWWWWWNWWWWNWWWWWNO0X0O0c:l::::clc:klddkxd..:l..;,c:;;::,;............',c,..'..'.:lollooo,;;,,,,,;,,;coddddxdl:;;;;;;;;;,'ddddooooooodddddddddddxxxxxxxxxxxxdxxkkkkOOOkclxxxd:'''.....','''.,l;cllccc:looodo:lddcldddxxxxxxdkNMMMWNXOxxxxxkkkkkxxOOOOOO0000KXNWWNN0000KOKKXWWWWNNNXNNXXNNXXXKKXNNNWNNNXNNXXNNNNNNNXXXNXXXXXNMMWXNXXNNNXXNXKXKKXKXXXXXKKXX
NNNNNNNNNNNNNWNNNNNWWNNNNNNNNNNWNNNNNNNNWWNNWWNNNNWNWWWNNNWNWWNNWWWNWWNWXkXO0Kxloc;;;:llllKodOOO'.,l'..,;:c:,:;l,............';:c:...,',.,looloo,;;;,;,,;;;;;;::ccc:;;;;;;;;,,,,.oddddooooooooddddddddddxxxxxxxxxxxxxxxkkkkOOOO,kkkkkl',,''.:'.;,''',o;cllccccooooddlcddlcxxxxxxxxxxx0WMMWWWWKOxxkkkkOOkkO00000KKKKKXXXNNWKKO0X0KXKNNWMWWWNNNXNNNNXXXKXNNNNNNNXXXXXXXNNXXNNXXXXNNXXWMMWNNNXXNXNXNXNXXXXXKKXKKXKK
NNNNNNNNNNNNWNNNNNNNNNNNNNNNNNNNNNNNNWWWWWNWNWWWWNWWWWWNNNNNWWNNWWWWWWWNXKkXXK0Od:;;:lookxKok0Od..l:...'c:c;,;;cl.... ,......',::cl'..,,,.'cdolo';;;;;;;;;;;;;;;;;;;;;;;;,,,,,''.odddddoooooooooodddddddddxxxxxxxxxxxxxxkkkOOOOx;OOkkkl;',,,''..',,.',l;loclllooooodxdlodocxxxxxxxxddxkXWMMWWWNN0kkkkkOOkk00KKXXXXXXXXXXNNNXXXXN0KXXNNNWWWWWWNNNNNNNXXXXNNNNXNNNNXXNXXXNKKXXNXXXXXXNMMNNNNNNNNNXXXXXXXXKKKKKKKKK
NNNNNNNNNNNNNWNNNNNNNNNNNNNNNNNNNNNNNWNWWWWWWWWWWWWWWWWNWNNNNNWWWNWWWNWW0d0XXXKOc:;;looOkxKo0OO..:l.''..:::;,,::l.. l.......,::::c,..';,..:ool.;;,;;;;;;;;;;;;;;;;;;;,,,,,''''.cddddddoooooooooodddddddddxxxxxxxxxxxxxxkkkOOOOcoOOOkk:;..',,,''',:,''c:llloooododddxxdodocxxxOxxxxkkddKWWWWWMWWKOOOkO0KOO0KXXXNNNNNNNNNNNK0KXWWXNXXXNNNWWNNWWNXNNNNXXKXNXXXXXNNNNNXXXNNXXXXXXXNNNNMMWKNNXXNXXXXXXXXXKXKKXXKKKX
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNWNNWWNNWWWWWWWWNWWWWWWWWWWWWWNWNNNNNWWNWWWKokXXNXKd:::lcdOOkoKkOk;.,l;.;'''':::',:c:.. ,o'. ...;::::cc;. .;;'..''..',;;;;;;;;;;;;;;;;;,,,,,,'''...:dddddddoooooooooodddddddddxxxxxxxxxxxxxxxkkOOOO;kOOOOk;,...',,,,,';:'';:llooooddddddxxxoddcdkkOxxddk0kxkXWMWMMWWX00K0OO0OOKXXNNNNNNNNNWWNNNXNWWWXXWNWNNNWWNXNWNXXNNNXX0XXXNXXNXXXXXNXXXXXXXXXXNXXNMMWXKXNXNXXXXNXXXKKXXKXXKKXX
WNNXXNNNNNNNNNNNNNNNWNNNNNNNNNNWWNNNNWWWNWWWWWNNWNNWWWWWWNWNNWWNNNNWWWkOx0XXNNOoccclkkxxloK0x:..:c.,c'''.:;:,,;:;.. oo;. ...lolc::c;'...':,..........;;;;;;;;;;;;;;,,,,,''''...'lloddddddooooooooooddddddddxxxxxxxxxxxxxxxkkOOOk,OOOOOO:,....,,;;,,,;'',:lodddddddd0OkxkdddcOOOxxxoxd0X0x0NWWWWWWWXKOXX0OOKXXNNNNNNNNNNNNNXNXNWWNOXXXXXNWWWWNNWNXXXNXXKXNNXXXNXXNXXXXXXXXXXXXXNXXXWMMNNKNNNNNXXKXXXXXXKKKXKKKK
NXXNNNNNNNNNWNNNNNNNNNNWNWWWNNWWNNNNWWWWWWWNWWNWWXNWWWWWWWWWWWWNWWNWWO0kkKXNNXOdo:o00XK0OkKd;;.'c.'cc'''.:,:,,,:,. .olo. ..ooooo;;'''....,,'...... ..;;:;,,,,,;;,,,,,,'','..'''',,:dddddddoodooooodddddddddddxxxxxxxxxxxxxkkOOOd:OOOOOOc,...,l:,;;,,,,,';lddddddddOW0kxxxxdoKOkxkoX0xKNKOOXNNXNWWNNXKKW0O0KXNNNNNNNNNNNNNNNWKXWWNKXXXXXXXNNNNNWWNNNWWNNNNXXXNNXXXXXXXXXXXXXXXXXXXMMMNXX0WNXXXKKXXXXXKKXXKKXKK
NNNNNNNWNNNNNNWNNNNNNNNWWNNNWNWNWWWWWWNWWNNNWXXNWXWWWWNWWWWWWWWNNWWWO0xkO0KXXKkdcxKNWWNNx0o,;,.;'.ccc,,;.;,:;;.;' .,cd' .'oooo':':,'''...';,..',...,:cc:::::;:::;,;:;;;;;;;:::;:;'oddddddddddoodoooddddddddddddddddxkkxxxxxkkO0llOOOOOkl''.';xo:,;:,,;:;:lddxddddOWWKkxxxxdx0kxkdXNXOOXX0OOXWNNWWWNNXK00KXXK0XNNNNNNNNWWWWNNXXMWXXXNXXXXXNWNXWNXXXXNNNNWWNNNNXXXXXXXXXXXXXXXXXXXMMMXXX0XNXXXXNKKXXXXKKKKKKKK
NNNNNNNNNNNNNNNXNNNNNNNNNNNNNWWWWWWWWWWWWNNWN0NWXXWWWWWWWWWWWWNNWWWXO0okOO0XXKklOXNWWNNOxc,::..,,cllc;,:.;,::;.;' . .;d,. .:xdl'clc;cc,......,,'....':cccc::::::::;;;;;;;:cc;:::;:c,oddddxxxdddddddddooddddddddxxddddddxkkkxkxxkOOloOOOOOkl''.,:xxdc:;;;;;,;;lodxdd0MWWOxxxxdxkOxkdXXWW0kXXXOkKNNXWWWNNN00NWNNX000XNNNNWWWWWWNNXWWNKXXXXXXXXWWNWNXXXXXXXXXXXNXNNWWNXXXXXXNXXXXXXXWMMNNXK0XWXXXXXXXXNXXK00KXKKK
NNNNNNNXNNNXNNNNNNNNNNNWNNNNNNNWNNWNNWWWNNNNN0NNNXWWNWWWWWWWWWWWWWWxXdokxkOKXOd0NNWWNNOl;,;c,.'c:llol:.:';,cc,';' .. .dc;. lOd;dooll:cc,......','...;::cc:::::;:::;,;;:::ccc;:cccll:oxxxxxxxxxxxxdddxokoddddddddddxxxddddxxkkkkxxkkcdOOOOOkl.'';lxxdodc,,;:;,;lllodNWNMKkxxkx0kkxkxXNWWNKkXXX0kKXXNNWMNN00XWWNXXXKO0XXXNNWWWNWNNWWWKNXXXXXXXNWNXXXXXXXXNNXXKXXXXNXNWWNNXXXXXXNXXNMMWNXKKXXNXNXXKXXKNNXXKKKXKKK
XXXNXXNNNNNNNNNNNNNNXNNNNNNNWNNWNNNNNWNNNNNNNXKXNKNWWWWWWWWWWWWWWWOKklodddOKkxXWWWWNNO:,,;cc..lclooll:.:,;,c:'.'..,. .Od: . lOcdxxdooc:cc;.......''..::cc::::::::::;,::cccccc:clllllclOkxkkkkkkkkkkxdxxdXOdxdddddddxxxxdddddxxkxkkkxkcoOOOOOkl.',;oxddodd:',;:::odook0NMXkxxkkK0xdkKNWXNWXKkKNNXOKKXXXWMN00XXWWWXKKXOKXXXXNWWMWNXWWW0XXXXXXXXXWNNXNXXXXXXXXXXXXXKXXXXNNWWNXNXKKXWMMWXXXXXXNXNXXXXNXXXXXXNXXXXKK
NXNXXNNNNNNNNXNNNWNNNNNNNNNNWNNNNNNNNNNNNNNNNNXNNKXNNWWWWWWWWWWWWNxKocloox0xOXMWMNNKo,'';c::.,oooolllc.c;:;c:'.. ,:. Odc . :cdxxxxdlol:cc'.......''..,ccccc:::::::c:ccccccllccllllll:OOO0OOkkOOOkkkkxxxxNW0kxddddddkkkkxdddddxkOkxxxkloOOOOOOl..,;oxddlddl:'',::cloO0OOOkxxkkKXOxkNWNXNWXXXkKXNX0XKXXXNK0KXXXWWWK000KXXXXNXNWMMNNMNKXXNXXXXXXNNNXXXXXXXXXXXXNNXXKXXXKXKXNNXXXNWMWNXXXXXXXNNXNNXXXXXXKXXXXXKKKK
NNXNXNNXNXXXNNNWNWNNNNNNXNNNNNNNNNNNWNNNNNNNNNNXXXKNNNWWWWWWWWWWWk0kccclokdKNWMWXOd;,,,;::ox.;odoolll;;ll;c:,;. .'c. ck. . 'dxxxxddololccc............,cc:::::::cllcloollooocclllcll;kO00NKkOOOOOOOOOkxxxNWWKOkxdddxx0KK0kOkxxdxOOkkxxolkkkOOOd'.';oxdocdodl,;;::cccokXKdodxkNN0xkWNNXXNWXXXkKXXNXKXXXK0KWWXNXNNNKKXXXXXXXKNNXWWNMKXXXXXKXXXXXXXXXXXXXXXXXXKXNNXXXXKKXXXNNXXNWNXXXXXXXXXXXXNNNNXNXXKXXXXXKKXXX
NNNNNNNNNXXNNNXNXXNXXXNNNNXXXXNNNNNNWNNNWWNWWNNNNXKXNWWWNNWNNNWWNo0occ:cdxK0kOOOdl;,,,;coxkd';ddooollcklx:l;,, '';.. 'x . dxxxxxdoollolc:;...... .....,c::::::loolcloolcllllclllcclc'ldxk0KKO0O0000000Ok0WMMWK0xxxxxkOKXKKXKK0000000kxolxkkkOOx;.';lxdkldddo:,:c::ccccooddooOKOxkXNXXXNWNXNXkKXXNKKX0OKXNWWNXXKXXXXXXNXNNKXNXNNWNKXXXXXKXXXXXXNXXXXXXXXXK00XNNXXXKKKKKKXXXXXKXKXKXXKXXXXXXNNNWXXXXKXXXXXXXXKK
NNNNNNXNNNNNNWNNNNNNNXNNXXNXXNNNNNNNNNNNWNNNNNWWNNNK0KKXWWNXNWNWkkOl:c,c:odkOkdl;;;;';oxkkkd,;ddddoooKOdNOo;;. .:.'...,' . 'kxxxxddool:cclc;. .. .::.....;::cllooolcllllcllllclllccll,..,codkkxxxxk000000O0NWMMWN0Okxxkk00KNWWNNWWMX0O0Oxooxxxkkko,.,cdkkloddol:;cc::lllcclodkxdoONNXNNXNWXXXXkKXNKOkKXNXNXNNWWNKXXXXXXXNNNXXXXWXKXXXXXXXXXXXXXXKKKXXKKXKKXKXXXXKKKKKKXKKKXKXKKXXXXKXKXNXXXXXXNNNXXXXXNXNNXKKK
NNNXNNNNNNNNNXNNNNNNNNNXXXNNNNNXNNWNNNNNNNNNNNNNNNNNXXK00000K00kdkxllcldxxdl::::;:::okkkkkkx;:oxxdddKNNxKMO;;. ':..'.. okxxxddooooccc:cc. ;:::;....,llllllllcllllcllllc:::;',,;,::'.';codxxood0K0K0000XWWWNXXKOOOkO00KNWWWWNWWX0OO0kooxxkkkxc'';lxxoododol::cccddllcccooddxkO0NNXNWXXXXXkXNXX0KNNNNXXXNNNXXXXXN0KWXXXXXNMNXXXXXXXXK0KKXKKKXXNXKKXXKKKKKXXXXKXXKKKKXKKKKKKKKXXKXKXKKKKXXXNNNXXXXXXXXXXKK
NNXXXXNXNNNNNNNNNNNNNNNNXNNNNNNXNNNNNNNNNNNNNNNNXNNNNWWWNXK0OOkkO0kxdo:llc:;coccclxxkOOkkkkk;:lkxxx0NWMxOWcc:..;c'.,.. ..kxxxxddoooooccc:'. .,::::,'..'lccccc::cccc:clllc;:;::::;:::;':::;;:coxxk00Ox0KXKKXNNNNWNNXKKOO0KKNMMMWWWNNK0OOkdodkkkkxc',ckxdooddddc:cccdOxoollclddxkxxk0XMXXNNXKkXXXK0XXNNNNXXXNK0XXNXXWNXXKXWMWNXXXXXKXXXKKXXKXKKKXXXXKXXXXXKXXKKKXNXXKXXXKXKXKKKXXKKXXKXXKXXXNXNXXXXXXKKXXKK
XXNXNNXNNNNNNNNNNNNNNNNNNNNNNXNXXNNNNNNNNNNNNNNNNNNWWWWWNNWWWK0K0XOkxd:odooodddooxkOOOkkkOOOc:lxkkONNNMKOxc:l;;,l' ,'. .cxxxxxddoolcc:;..... ....;:c:::,'..:cccc::c::::ccccc::cc::;;::::;;:loc:;,:dxxxOkdlokkxk0NNNNWMWNXK00KKXNNWWWWWWWX0kkOxxkkkkkxl;;lododddddlcllloOOkxdooddxxxkxdxO0XNNXXOOXXXOXNXXXXXXXKkOKKKNWMMMWMMMWXNXXXXXXXXXXXXXXXXXXXXXKXXXXXKKXKXXKXXXXXXXKKXKKKKKKXXKXXKXXXNXXNXXXXXXXNXXXXKX
NNNNNNNNNNNNNNNNXNNNNNNNNNNNNNNXNNNNNNNNNNNNNNNNNNNNWWWWWWWWXXX0KNOkxkloOkxdddodxxkOOkOOO0OOoccokkNWNNWWolcc:d,;Ok ',... .;c:',::ccll;......... loooodollc:cc;'..;:::::::::::::::::;;:c:cclc:;;:cllol,,oxxxkkOxxxkxddxkkO0KNWWNNXKKKXNNNXNNNWWNOxkkOOOkkkkxdlc:::lddxddlloloOk00XK0kkkxxxxkxddk0XXXOKK0KXXXXXNNXXKKXXXXNNWWWWWMNXXXXXXXKXXXXXXXXXKXXXXXXXXXXXKKKKXXXXXXKXXKKKKKKXKXKXXXXKKXXXXNXXNNXXKXXXXXXKKKX
NNNNNNNNNNNXXNXXXNXXNNNNNNNXNNXNNXNNNNNNNNNNNNNNNWWNWWWNWMWXXNNKXN0Ok0xc0OkxddxkkkOOOKK0X000xcclkOWXNXKdlc::0X::lX'., .. do:,;;;;;;. ' ..... .ooooddxxxxocc::;..;;;::::::::::;;;:clllccclolc::clllll;,oxxxxxkkkxdkkkkOOOOOO0KKKXNNXNXKNXXXXNWNXkdxkOOOkkkkkkOd::;;:llolooolkNNNNNNNXK0kxkxxkkxdk0OKXXXNNNNNXXXXXXXXXXXXKXXNWNXXKXXXXXXXXKXXXXXXXXXXXXXXXXXKXXXKXKXXXXKXXKKKKXKKXKKKKXXXXXXXXXXNNNNXXXKXNXXXXKX
NNNXNNNNNNNXXXXXXXXNNNNNNNNNNNNNNNNNNXNNNNNNNNNNNNNWWWWWWWWXNNXNNN0OOXxlKXXXXWNXXXXXXXKXOkkO0cooxWNWW0ool:lKKKO::od...... .;,;;;::..,;;;. ...,llloodxxxxxxddocc:'.,;,,::c:;;,;:clooollllllooolccllloolc;ldxxxxxxkkxxxxxxkkO0KKXXKKKKXXKXKKKKXNNNWXOxxxOOOkkkkOXKxdddxddxxxdooOWWNNNXNXXNK0kxkkkOkddx0XNNNXXNXNXXXXXXXXXXXXWNNXXXXXXXXXXXXXXXXXXXXXXXKNXKXXKKKXXXKKKXXXXXXKXKKXKKXKXKKXXXXKKXXXNNNNNNXNXXNXXXXKK
NNNNNNNNXXXXXXXXXNNNNNNNNNNNNNXXNNNNNNNNNNNNWWNNWWWWWWWWMWNNNNKWWN000N0xdNNNNWMNXK0000000XNWWdxooXWNklooxKWN000Oc;c;..'... .:ccl; .ooo,.;;...dooooxddxkxxxxxdddol;....:cc:,;:cloooooooooolllooolcolooolc:cdxxxxxxxxxxdxxxxxxxkOOOOOOOOOOOOOkkkOOO0000OkkOOOk0O0NXKxdxkxkkkkxdoo0WMWWNNWNNNNK0OkkkkOkxxk0XXXXXNXXXXNNNNNNNNXXXXXXXXXXXKXXXXXXXXXXXXKXKXXXKXXXXXKKKKXXXXXXXXKXKKXKXXKXKXKXXXKKKKXXXNXXXNXKXXXKKXK
NXXNXNNNNNNNNNNNNNNNNNNNNNNNNNNNNXNNNNNNNNNNNNNNWWNWWWNMWWNNNNNKWMKK0NNxdkWNX0K000KNNXXXXXXNOOo0odXxoooOWNKk00Okkl,;....... .:c. :ol.cc:,.cxdoooodxddxxxxxxkddol:'..clllloooooooooooooooollloollolooool:ldxdxxxxxxxxdddddddddxxxxxxxxxkkkOO00KKXKKXX0OOOOOOXOKNNNOdddXXK0kxxdlkKWWWWNXXXXXXXK0OOkkOOkdxOKXXNXXXXXXXXXXXXXXNXXXXXXXXXXKXXXXXXXXXXKKKKXNXXKKKKKKKKKKKKKXXKKXKKXKKXKKKKKXXXXXKXXKXXKXXXXXXXXXXXX
XXNNNXNNNNNNNNNNNNNNNNNNNNNNNNXNNNNNNXXNNNNNNNNWWWWWWWWMWNNNNNWKXWWWXNWOdxKKXNWWNXXXXXXXXKOOKWxOdlolloO00xxOOkkxxxx:,,...... .o'clc:.:xoxlololddxxxkkkkxkxl;,....:lllooooooooooooooooollllooooloooolcodddddddddxdddoodddddddddddddxxxxxkkkO0KXNWKlK00OOXK0NNNX0xddO0XK0kkxdkOXNNNNNXXXXXXXX00OOkkkkxdk0XNXXXXXXXXXXXXXXXXXXXXXXXXXXXNXXXXXXXXXKKKXXXKKKXXKKKKXXKKXXKKXXKKKXXXXXXXXXXXXXXXKXXXXXXXXXXXXXKX
XXNNNNNNNNXXXNNNNNNNNNNNNNNNNNNNNNNNNXNNNNNNNNWWNWNMWWMWNNNNWWWXNX0WWWNXWMMWNNXXXXKkOkOkxdkkddocolclxkkddxkkkkxxxxx,oc;;....... ....cllc,cdkxdolocolodxxxxkkko,.',;;;'..:lloooooooooooooooooolllloooooooolcldddddddddddddollodddddddddddxkkkOO00000KKOcXNOO0XKKNNNNNKkkOkkOO0kkkd0OOXXXXKOOXXXXXXXkK00Okxxxxdk0XXXXXXXXXKXXXXXXXXXXXXXXXXXXXXXXXXXXKXXXXKKXXXXKKKKKXXKKKKXXXKKXXXXXXXKKXXXXXXXXXXXXXXXXXXXXXXX
NNNNNNNNNNNXNNNNNNNNNNNNNNNNNXNNNNNNNNNNNNNNNNNNNNNMWWMWWWWWWWWXNW0NXxNXNNNXXXXXXXXKKKKK000OOOOk:ko:dkodkkkkkxxxxkO.OOdc,'.. ....,'c;lllll:ddxkoklllclloddkxxd,.',,,;;:c;..,::;:loooooooooooooooooooooooooool:cdddddddddddddddlllooooddddxOO00000000000kd0KWOkNNNNNNNNNXOkXKXK0OkxxokkdOOOOKXXXXXKXKOXXXKK0OkxxxdxkKXXXXXXXXXXXXXXXXKXXXXXXXXXXXXXXXXXXXXXKXXXXXXKKXKXXKXXKXXXXXKXXXXXXKKXKNXXXXXNNNXXXXXKXXXXXX
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNWNWMWWWWWWWWWWWXKNKWOkX0KNXXXXXXXXKKKKKKXXXXXXXXOlKd:o0000OOOOOOOO0.KOdcc:,'... .,,,cllll:oxokxdxlllclloddo,.''''',,;;::;'..;;,.;oooooooooooooooooooooooooool;lddddddddddddddddoccoddxxxOOOO000000OOO0kxO0KWO0NNNXXNNNNXOOXNXNNN0kkkxK0ONXXXXXXXK0OKXXXXXXKX0kxxxdxk0XKXKXXXXXXXXXXXXXXKXXXXXXXXXXXNXKKXXNKXKXXKKKXXXXXXXKXXXKXXXXXXXXKKKKKKXXKXXXXXXKKXXXXXXXX
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNXNNNNNNNNNNNNNNNNNNNNWWWWWMWWWWWWXKXXk0WX00XXXXXXXXXXXXXXXXXXXXXXXXxokxdx000000O00000.Kkdclooo:,,... ..,;llccolodoxlccclllc' .'''''',,,,,',,,...,''ooooooooooooooooooloooooooooc,oddddddddddddddddddoooxxOOOOOOOO00OOO000dk00KWOXNNNNNNNXXX0ONNNNNN0kOkONKOKXXXXXXKKXXXNXXXXXXXNXOkkxxxk0KXXXXXXXXXXXXXXXXXXXXXXXKXXXXXXXXXKXXXXXKKXXXXKXXKKXXXKXKXXXNXKXXKKXKXXXKKXXXXXKXXXXXXXX
NNNNNNNNXNNNNXXNNNNNNNNNNNNNNNXXNNNNNNNNNNNNNNNNNNNWWWWWWWWWWWWNKK00WNK00XXXXXXXXXXXXXXXXXXXXXXXX0kxK0OkOOO000O0O00.0dodxxdddddxl.. ...,;llllccc:cccc,... ...'...,,,,;;,,,'...loooooooooooooooooollooooooool:;odddddodddddddxxxkkkddkkkkkOOOOOOOOOO00dxO00XW0XNNNNXXNNNN00XXXXNXKkOkkXXk0XXXXXXXXXXXXXXNNXXXXNXXOkkxxk0XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXKXXXXKXNXXXXXXXXXXXXXXXXXXXXXXXKXXXXXKXXXXXXNXX
NNNNNNNNNNNNNNNNNNNNNNNXNNNNNNNXNNNNNXNNNNNNNNNNNNNWWMWWWWWWWWWWXK0WWWK00KXXNNXXXXXXXXNNXNXXNNXK00K0OK000OkkkO00000'loxxxxxxxddx::dl;.. ..,,,;,,'''......''',;:;,',,,,,,'...'looooolooooooooooooolloooooool,cddooooddddddxxxxxxxkkkdxkkkkkkkkkkOO00oxO00OXMXNNNNNNNXXXXKKXNNNXXXOOkkNXOOXXXXXXNXXXXXXXXNXXXXKXNOxxkxxkKXXXXXXNXXXXNXXXXXXXXXXXXXXXXXXXXXXXXKKXXXXKKXXXXXXXXXKXXXXXXXNXXXXXXKXXXNNXXXXXXNNXX
NNNNNNNNNNNNNNNNNNXNNNNNNNNXNXNNNNNNNNNNNNNNNNNNNNWWWWWWWWWWWWWWN0NWMWK00KXXXXXXXXXXXXXXXXXNNX00KKKK000000000000000:'xxxkkkkkkkl;oooodxl:'. .....';,,,,;;;:. ...',,,,,,.,ll'..;cllloooooooooolllllloooooolc:,ldddooddddddxxxxxxxxxxxdddkkkkkkkkkO00oxO00OONMNNNNNXXNXNNNXKNXXXNNXOOkONN0OXXXXXXXXXNXXNXXXXXXXKXXKOkxxkk0XXXXXXXXXXXXXXXXXXXXXXXXXXKXXXXXXXKKXXXXXXXXXXXXXXXXXKXXXXXXXXXXXKXXXXXXXXXXXXNXXXX
NNNNNNNNNNNNNNNNNNNNNNNNNNNXNNNNNNNNNNNNNNNNNNNNNNWWWWMWWWWWWWWWXXWWWN000KKKXXXXXXXXXXXXXNNXKO0KKKKKK000000000000kcd,;dxxxxxxxl:ooddxkxkkkdl;,... ........;:;.. ..',,,'':cccc,...loooooooooooooooolllloooolc::,odddddddddddxxxxxxxxxxxxxoodxxxkkkOO0oxO00OO0WWNNNNNNNXXNNNKKNXXNNXKkOkkNN0OXXXXXXXXXXXXXXXXXXXXXXKXXKOkxxOKXXXNXXXXXXXXXXXXXXXXXXNXKKKKXXXKKKKXXXXXKKXXXXXXXXXXXKXXKKXXXXKXXKXXXNXXNXXXNNXXX
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNWMWWWWWWWWW0WMWXK0000KKKXXXXXXXXXXNNNXOkKKKKKKKK00000000000xlxdd;,:oddool:ooddOOxxkkkkkxooolllc:;,'...................,;:loool...;oooooooooolllllllllllooolc:;:oddddddddddddxxxxxxxxxxxxxdoooxkkkOOoxO00OOOKWXXNNNNNNNXNNNX0XXNNXN0kOkONN0OXXXXXXXXXXXXXXXXXXXXXXXXKKX0kkxOKXXXXXXXXXXXXXXNXXXXXXXXXKKXXKKKXXXKXXXKXXXXXXXXXXXXXKXKXXKXXXXXXKXXXXNXXXXKXXXX
XXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNWWMWWNWWWWKNWMWX0Ok0000KKXXXXXXXXNNXXkOXXXXKKKKK0000000000xdkxxdddc;;:ol;doodO0kxkkkkkkkxdddooollll:cooc;,;llllll:,cooooooooooo..',loooolloollolllllllllooolcc,lddoddddddddddxxxxxxxxxxxxxxxo;xkkkOdxO00O0OOKNKNNNNNNNNNNNNK0XXNNNNOkOxONNk0XXXXXXXXXXXXXXXXXXXXXKKKKKKXX0xk0XXXNXXXXXXXXXKXKXKKXNNXKKXKXKKKXKKKKKXXNXXXXXKXKXKXXKKXXXXXXXXXXXXXXXXXXXXXXXX
XXXXNNNXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNWNNWWWMWWWNWNOWMWWKOkkO000KKKKKKXXXXXXKk0XXXXXXKKK00000000K0kxxkkxxxxddddo;doodkO0kdkkkkkkkkkxdddollllc;lollc,clllllloooooooooooooo,.:':oooooooooolllllllllloooc::;oddddddddddddddddxxxxxxxxxxxx;xxkkkddkOO000OOXXKNNNNNNNXXNNNK0XNXNNNxdOkKNXxXXXXXXXXXXNXXXNXXXXXXXXXXXXXXXKOxOXXXXXXXXXXXXXXXKKKKXXXXXXXXXXKKKXKKKXXXXXXNXXXXXXXXKKKXXXXXKXNXXXNKXXXXXXXXXX
NXXXNNXXXXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNWWNNWNWNWMWNNN0XMWWXOkkdO00O0K0KKKXXXXXOkXXXXXXXXXKK000000000xdxxxOOOOOkxdd;dxdxkO0OkO0Okkkkkkkkkxxdoolll,;llloo;ollloooooooooooooooll:.c;,loooolooooolllllllllloocc;codddddddddddddddxxxxxxxxxxxd:xxxxxxdxOO0K00O0N0NNNNNNNNNNNXN00XNNXNNooO0XN00XXNXXNNXXXXXXXNXXXXXXXXXXXXXXXX0xOKXXXXXXXXXXXXXKKKKKXKXXXXKKXKKXXXXXKKXXXXNXKKKXKKKKKXXXXXXXXXXXNXXXXXXXXXXXX
NXNNXXNNXXNNNXXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNWWWWWWNkWWWN0kkxoOO0O00000KKXXKkOXNXXXXXXXKKKKK000KKKK0xl;lxO00OOkkldkkkkO00OO00OOkkkkkkkkkOdoollo,;;lllocddooooooooooooooooolooc.l:':ooooooooooooooolllloollc;odddddddddxxxxxxxxxxxxxxxxx,dxddxxkodkO00000OKXKNNNNNNNNNXNNXOOXNNNNKlx0XXXxXXXXXXNXXXXNNXXXXXXXXXXXXXXXXKXXKx0KXXXXXKXXXXXXXXXXKKXXKXKXXKKKKKKXXKXXXXXXXXXXXXXKXXKXXXXXXXXXXXXXXXXXXXXXXX
XXXNXXXXNXNNNNNNNXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNWNNNNNWNNNKKWWN00kxxokO0OOO00000K0x0XXXXXXKKXXKKKKK000K0KKKXX0dlldOOOkdxOOOOOO00000000OkkkkkkkOOkdoooo:,;:ccll:kxooooooooooooooooooooc.ll,;ooooooooooooooooollooolccoddddddddxxxxxxxxxxxxxxxxl:ddxxddOldxO000000KNXXNNNNNNNNXNXXXOOXNNNXklkKXXxXXNXXXNXXKXXXXXXXXXXXXXXXXXXXKXXXkKXXXXXXKXXXXXXXXXXKXXXKKKXKXXKKXKXXKXXXKXXXXXKXXXKKKKXXXXXXXXXXXXKXXXXXXKXXX
NNXXXXXNNNNNNNNNXXNNNNXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOWWWK00OxxdxOOOOO00000OkKXXXXXXKKKKKKKKKKKKKKKKKXXXXK0koodxxkOOOO0O000K000000OkkkkkkOOkxdxool,::;:cccokkdoooooooooooooooooooc.lo:;ooooooooooooooooooloooo:lddddddddxxxxxxxxxxxxxxxo;ooodxxxOoddO00000KKXNXNNNNXXXXNXXXXX0OKXNXXooKXXkXXXXXXXXXXXXXNXXXXXXXXXXKXXXXKKX0OXXXXKXXXXXXXXXXXXKXXXXXXXXXXXXXXXKKKKXXXXKKXKKXXXXKKKXXXXXXXXXXXKXXXXXXXXKXX
XXXXXXXNXXXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNWNNNNNNNNNKXWWX000OxxxokOOkOOOO0kkXXXXKKKKKKKKK0KK0000000KKXXXK0OkdkOOOOO0O000KKKKK000000OkkkkOOOkxxkkdo::c:;:cc;kkkkxddooooddooooooooooc.oolcoooooooooooooooooolooolcoddddddxxxxxxxxxxxxxxxo:cloooddkkoxx0OOO00KKXWNNNNNXXXXNXXXNXX0OOXNX0ckKXkXXKKXXXXXNXXXXXXXXKKKXXKKXKK0OOO0KKKXXKXXXXXXXXXXXXXXXKKXXXXXXXXXXXXKXXXXXXKXXKKXXXXKKXXXXXXXXXXKKXXXXXXXXKXXX
XXXXXXNXXXXXXNNXXNNNNXXNXNNNNNNNNNNNNXXNNXNNNNNNNNNNNNNNNNNN0WMWK0O00xxxokOOkkkO0k0KKKKKKKKKKKKKKKKK0000KKKKXXXXKOOxxkOOOO00000KKKKKK00000000OkkOOOkxxkkkxo;c:;;;:clkkxxxxdoooddooooooooooo;;oo:ooooooooooooooooooolooocldddxxxxxxxxxxxxxxxxxd::cllooodxkoxOOOOO000KXNNXNNNNXXXNXXNXXXN0OOXXNooXXkXXXXXXXXXXXXXXXXXXKKKKK000000KKKXXXXXXXXXXXXXXXXXXXXXXKXXXXXXXXKXXXXXXXXXXXXXXXKKXXXKKXXXXXXXXXXXKXXXXXXXNXXXX
XXXXXXXXXXXNNNXXNNNNNNNNNXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNKXMMN0OO0OxxxdkkOkkkOk0KKKKKKKKKKKKKK00000000KKKKXXXK0OkdkkOOOOOO00KKKKKK00000000000OOOOOxxkkkkkccc::;ll;kkkkxxddoddooooooooooood'oo:ooooooooooooooooooooooolloxxxxxxxxxxxxxxxxxxd:::cllloodxddkOkxOOO00KXWWNNNNNXNXNNXXXNXXNK0OKNOcK00XXXXKXXXXXXXXXXXXXXXXKKXXXKKKKXXXXXXXXXKXXXXXXXXXXXXXXXXXXKXXXXXXXXXXXXXXXXXKKKXXKXXKKKKKKKKXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXNXXXNNNXNNNNXXNNNNNNNNNNNNNNNNNNNNNXNNNNNNNNNNX0WMMKOOOOkxxxxxkOkkkkxk00KK0KKKKKKKK0000000000KKXXXXK0OkdkOOOOOO000KKKKKK0000000000000O0Oxkkkkkkx:;;;,:l;lkkkxxdddddooooddoooodddl:dlddoooooooooooooooooooooolodxxxxxxxxxxxxxxxxd:::ccllloodxoxkkxdkOOO00KNNNXNNNXNXNNNNXXXXNXK0OKXc0OXXXXXXXXXXXKXXXXNXXXXXXKKKXKKXXXXXXXXXXXXXXXXXNXXXXXXXXXXXXXXXXXXXXXXXXNXXXXXXXNNXXXXXKKKKKKKKKKXKXXXKXKKXXXXXX
XXXXXXXXXXXXXXXXNNXXXXXXXXNXXNNNXNNNNNXNNNNNNNNXXNNNNNNNXN0XMMWOkkOkxxxxxxkkkkkkkxdk000KKKKKKK0000000000KKKXXXXKOOxxOOOOOO000KKKKKKK000000000000000OxkOOkkkkkxddddxxdkxxxxdddddddlodddddodddd:ddddddoooooooooooooooooooooloxxxxxxxxxxkkkkkd::::cclllooddcxkkxdxOOO000XNNXXXXXXXNNNNXXXXXXXK0O0okKXXXXXXXXKXKKXXXNXXXKXXXXXKKXXXXXXXKXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXNNNNNNNNNNXXXXXXXKKKXXXKXXXXXXXXKKXXXXXX
XKKKKXXXXXXXXXXXXXXXXXKXKXXXXXXNXXNXXNXXNNNNNNNNNNNNNXNXXX0WMMXkkkkxxxxxxxxkkkkxxxkxdk0K0KKKK000000000000KXXXXK0OkdkOOOOOO00KKKKKKKK0KKK00000000000OxkO0OOkkkkxddddxkkxxxxdddddddldxdddddddddldddddddododdooooooooooooooolodxxxxxxxxxkkkkx::::cccllooodo:xxkOxxkOO000KNWNXXXXNXXXXXXXXXXXXXK00dOXXXXXXXXXKKKXXXNXKXKXXKXXKKXXKKKXXXXXXKXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXNNXNNNXXNXNXXXXXXKXXXXXXXXXXNNXXXXXXXXX
XKKKXXXXXXXXXXXXXXXKXXXXXNXXXXXXXXXXXXXNNNNNNNNNNNXXXXXXX0NMMWOkkkkxxxxxxxxkkkkxxxxxxxxk0KKK000000000000KKXXXKK0OxdOOOOOOO0KKKKKKKKK00KK00000000000OkkO0OOkkkkkxddddkxkxxxddddddoodxddddddddddddddddddddddddodooooooooooolooxxxxxxxxkkkkk:;::ccclllooodlcddkkxxxOO0000XNNXXXXXXNXXXXXXXXXXXXK0dOKXXXXXKKXXXXXXXXXKKKKKXXKKKKKXXXXKXXKKXXXXKXXXXXXXKXKXXXKKKXXXXXXXNXXXXXXXXNXXNNNXXNXXXXXXXXXXXXXXXXXNNXXXXXXXXX
XKXXKXXXXXXXXXXXXXXXXXXXXXXXXXXNNNXXXXXNNNNNNNNNNNXXXXXXKKWMMKkkkkxxxxxxxxdxkxxxxxxxkkkxxxO000000000000KKXXXXX0OOxkOOOOOO0KKKKKKKKKK00K0000000000000kkO0OOOkkkkkxdddxkxkxxddddddloxxdddxdddxdddddddddddddddddddddooooooooolodxxxkkkkxkkxc;::ccllooooddocloxkkxkkkOOO00KNWNXXXXXXXXXXXXXXXXXXXXx0O0XXXXKKKXKKKXXXXXXKXXXXXKKKKXXXXXKKKKXXKXXXXXXKKKKKKXXKKKKXXXXXXXXXXXXXNNXXXNNNNNXXXXXXXXXKXXXXXXXXNNNNXXXXXXXX
KKKKKKXXXXXXXXXXXXXXXXXXXXXXXXXXNXXXXXXXXXXNNNNXXXXXXXXK0NMMWOxxkkxxxxxxxxdxxxkxxxxxxxxkdoxkO0000000000KXXXXXK0OkxOOOOOOOKKKKKKKKKKKK000000000000000kkOOOOOOkkkkkdddxkxxxddddddoldxxxddddddxxxdddddddddddddddddddddooooooolodxkxkkkkkkkc:::ccodxddddxxl;odxkxxkkkkOO000XNNNXXXXXKXXXXXXXXXXXXKK0000KKKXXXKKKKKXXXXXXKKKXKKKKKKKXKKKKKKXKXKXXXXKXXXKXKXKKKXXXXXXXXXXXXXXXXNXXXNNNNXNNXXXXXXKXXXXXXXXXNNXXXXXXXXXX
KKKKKXXXXXXXXXXKKXXXXXXXXKKXXXXXXXXXXXXXXXXXNXXXXXXXXXX0XMMMKkxkxxxxxxxxxxxdxxxxxxxxxxxdcxxolxk0000000KXXXXKXK0OkxOOOOOO0KKKKKKKKKKKKK00000000000000kkkO0OOOkkkkkxdddxkxxddddddolxxxxxddddxxxxdxxdxddddddddddddddddddooooolloxkkkkkkkkl::::cdxkxxdddxdc;ldkkxxkkkkOOOO0KNNNNXXXXXXXXKXXXXXXXXXXK00KO0KXXKKKKKKXKKXKKKKKXKKKKKKKKXKXKKKKXXXKKKXXXXXKKKKKKKKKXXKXKKXKXXXXXXNNXNNXXNNNNXXXXXXXXXXXXXXXXNXXXNXXXXXXX
KKKKKKXXXXXXXXXXXXXXXXXXXKKXXXXXXXXXXXXXXXXXNXXXNXXXXX0KWWMWOxxxxxxxxxxdxxxdxxxxxxxxxxxloxd;dxddxOK000KXKKKKK0OOkxOO0000KKKKKKKKKKKKK00000000000000OkkkOOOOOkkkkkkdddxkkxddddddloxxxxxxxxxxdddddxxxdxxxxddddddddddodddooooocodxkkkkkko;:ccldxkkxddddxd;codkkxxkkkOOO0OOKNNNNXXXXXXXXXXXXXXXXXXXKKKKKO0KKKKKKKKKKKXKKKKKKKKKKKKKKKKKKKKKKXXKKKKXXKXKKKKKKXXKKKKKXXXKXXXXXXNNNXXXNNXXXXXXXXXXXXXXXXXXNNXXXNNXXXNNX
KKKKKXXXXKXXXXXXXXKKXXXXKKKXXXXXXXXXXXXXXXXXXXXXXXNXX00WNWMXkxxxxxxxdxxxxxxddxxxxxxxxxocxx;cxxxxdlx0KKKKKKXXK0OkxkOOO000KKKKKKKKKKKKKK00000000000000kkkkOOOOOkkkkxxddxkkxdddddoldxdxxxdxxxxdxdxddxxxxxxxdxdddddddddddddoooocooxkkkkkk;:ccddxxkxxxdddxo,loxkxxxkkkkOO00O0XNNNNXXXXXXXKXXXXXXXXXXKKKKKK0O0KKKKKKKKKKKK0KKKKKKKKKKKKKKKKKKKKKKKKKXXKKKKKKKKKKKKKKKKKXXXKXXXXXXXXXNNNNXXXXXXXXXXXXXXXXXXXXNNNNXXNNXX
K0KKKKXXKKXXXXXXXXXKKXXXKKKKXXXXXXXXXXXXXXXXXXXXXXXXKONWXWWOxxxxxxxxdddxxxxxodxxdxddddcoxl;xxxxxxxolxKKKKKKK00OOxkOO0000KKKKK0KKKKKK0K00000000000000OkkkkkOOOkkkxxxddxkkkxddddllxxdxdddxxxdxdxdxxddxxxxxxxxdxddddddddddoooolcodkkkkko:cldxxxxkxxddddxl;odkkxxxkkkkOO000OKNWWNXXXXXXXXXKKXKKXXKXKKKKKKKK00KKKKKKKKKKKKKKK00KKKKKKKKKKKKKKKKKKKXKKKKKKKKKKKKKKKKKKKKXKKXXXXXXXNNNNXNXXNNNXXXXXXXXXXXXXXXNNNNNNNNXX
000KKKKKKKKKKKKKKXKXXXXXXXKKKXXXXXXXXXXXXNXXXNNXNXXXOKWKKWXkxxxxkxdxddddxxxxodxxdddddc:cl;oxxxxxxxxxolkKKKKK0OOkxOOOO000KKKKKKKKKKKK000000000000000Okkkkkkkkkkkkkkxddxkkxxdddoloxddddxxxxdddddxdxdxxxxxxxxddddddddddddddoooo:ooxkkkOlcoxxxxxxkxxxxxxxcldxkkkxxkkkkkO000O0XNNNXKXXXXKKKKXXXKKKKXXKKKKKKKK0O0KKKK0K0KK00KKK0KKKXKKKKKKKKKKKKKKKKKXKKKKKKKKKKKKKKKKXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXNNNNNNXXXXXX
K000KKK0KKKKKKKKKKKXXXXXKKKKXXXXXXXXXXXXXNNXXNXXNXX00N0kO0OxxxkkxxddddddxxxxdoxxddolcodddldxxxxxxxxxxxooOKKK0OOkxkOOO000KKK0KKK0KK0KK00000000000O0OOkkkkkkkkkkkkkxdddxkkxddddoloddddddddddddxdddxxdxxxxxxxdddddddddddddoooooccodkOkkkxollloxkkxxxxxxxldxkkkxxkkkkkkOO00OOKNWWWNXXXXKKXXXKKKKXXKKKKKKKKKKKKOO0000KKKKKKKKKKKKKKKKK0KKK0KKKKKKKKKKKKKKKKKKKKKKKKKKXXXKXXXXXXXXXXXXXXXNXXXXXXXXXXKXXXXXXXNXXXXNXXXX
000000000KKKKKKKXXXXXKKKKKKKKKKKKKKKXXNNXNNNNNNXNN0OX0kOOkxxxkkxxxddxddxxxxkxodxdc,;;;,,c:lxxxxxxxxxxxxxdk0KOOOkkOOOO000KKKKKKKK0K00000000000000OOOOkkxxxxkkkkkxxxddxxkxxddddolddddddddxdddxxddddddxxxxdxxdddddddddddddoooooo:ooxOOOOOOOkxooollodxxxxdxxkkkxxxxkkkOOO000O0XNNNNNX0KKKKXXKK0KKKKKKKKKKKKKKKKKKKKK0KK0KKKXKKKKKKKK0KKKKKKKKKKKKKKKKK00KKKKKKKKKKKKXXXKXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXNXXXXXXXXX
00000000KKKKKKKKKXKKXKKKKKXXXKKKKXKXXXXXXXXXNNNXNKOKOkO0OxxkkOkxdddddddxxxkkkdddc.'loo;:xookkkxxxxxxdoooxO00OOOxkOO00000KK0K00K00000000000000000OOOOkxxxxxkkkkkxxxdddxxxxddddoodddddddddddddddddxxdddxxxxxdddddddddddddooooooclodkOOOOOOOOOOOOkxdoooddxxxdddolkkkkOOO00OOOKNNNWWWNK0KKKKKKKKKKKKKKKKKKKXKKKKKKKK000KKKKKKKKKKKK00KKKKKKKKKKKKKKKK00KKKK0000KKKKKKXXKXXXXXXXXXXXXXXXXXXXKXXXKKXXXXXXXNXXXXXXXXXXX
00OO000KKKKKKKKKKKKKKKKKKXXXXXXKXXXXXXXXXXXNNNXXX0K0xO00OkkkO0kxddddddxxxxkkkxod:. ....;ooxkkkkxddddxkO00000OOkxkOOO00000KKKK000K00000000000000O0OOOkkxxxxxkkkkxxxdddxxxxdddoodddddddddddddddddxxddddddxdddddddddddddddooooooccooxOOOOOOOO000000000OOkkkkkxxl;kkkkOOOO0OOO0NNNNNNWWX0KKKKKKKKKKKK00KKKKK00KKKKK00000KKK00KKK0KKKKKK000K0KKKKKKKKK00KK000K0KKKKKKKXKKKKKXKKKXXKKXXKXXXXXXKXXXKXXXXXKXXXXXXXXXXXXX
000000KKKKKK0000KKKKKKKKKXKKXXXXXXXXXXXXXXXXXNXX0K0xk0K0OkOO00xdddddddxxxxkkkxodc. ...lkkkxxxxxkO00000000OOxxkOOOO0000000000000000K0000000O00OOkOkkkkkkkkkxxxxxxddxxxddddooddddddddddddddddddddddddddddddddddddddodoooooool:lodk0000000000000000000000OOOc;OkOOOOOO00OOOKNNNNNWWWN00KKKK0KKKK0000KKK00000KKK000000000000000KKK00KK0KK0KKKKK00K000KK00K00KKKKKKXKKKKKKKKXXKKKKKKXKKKKKKKKKKKKXKKXXXXXXXXXXXXXX
000000K000KK00000KKKKKKKKKKKXXXXXXXXXXXXXXXXXXXKKKkxO00OkkO00OOkdoodddxxxkkkkko:. .,',dkxxkkkkkkkOO00000OOOxxOOO00000K00K00000000000000000OO0OOOkkkkkkkkkxxxxxxxdddxxddddooddddddddddddddddddddddddddddddddddddddooooooooolccodxO00000000000000000000K0K0l:OOOOOOO000OOO0NNNNWWWWWWK000000K00K000000000000KK0000000KK00000000K0KKK0KK000KKKKKK00KKK00000KKKKKKKKK0K0KKKKKKXK0KKKKKKKKKKKKKKKKKXXXXXXXKKKXXXKK
OO00000000KK0000KKKKKKKKKKKKXXXXXXXXXXXXXXXXXXKKKkdxxkkkOO00OOOOkdllddxxxxkkkkd' ...lxkxxkkkkkkkOO00000OOkxxOOOO00000000000000000000000OO0OOOOkkkkkkkkkkxxxxxxxddddddddoodddddddddddddddddddddddddddddddddddddddoooooooollc:lodk000000000000000KK00KKKKKlc0OOOO00000OOOOXNNNNNWWWMMX0000KKKKKK0000000000000000000KKKKKK0000KK000000KK0000KK00000000000000KKKKKK00000KKKKKKKKKKKKKKKKKKKKKKKKKXKKXXXXXKKKKKKK
OOOOO00OO0000000000KKK000KKKKKKXKXXXXXXXXXXXKK0OxodkO000000000OOOOkdlodxxxkkxxdl;.. ..,dxxxxxkkkkkkkOOOO0OOkkdxOOOO000000000000000000000000OOOOOkOkkkkxkkxxxxxxxxdddddddddoodddddddddddddddddddddddddddddddddddooodoooooolllllccodxO00000000K000000K0KKKKK0llOOOO0000000OOOKNNNNWWWWWMMN0000KKKK000000000000000000000KK00000000000000000000000O000O0OOOOO000KKK00000000KK00KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK00KKK
OOkkkOOOOOOO0O0000K00K000KKXKKKKKXXXXXXXXK0OkxkOO000000000000OOOOOOOkddxxxddoxOOOko:,:coxxxxxxkkkxxxkkOOOOOOkxdkOOOOOO0000000000000000OOOO0OOOOOOOOkkkkkkxkkxxxxxxddddoddddoodddddddddddddddddddddddddddddddddddoooooooooolllllcclodk0000K00K00K000KKK0KKKKOld0O0O0000000OOO0XNNNNNNWWMMMWK000K0000000000O0000000000000000000OOOOOOO0O0OOOOOOOOO00OOOOO0000000KK000K0000000000KKK0KKKKK00000K00KKKKKKKK0KK00KKKK
kkOOOOOOOOOOO0000000000000KKKKKXXXXXKXKXKKOkO00KK000OkO00kkkOkkOkkkkkOxxxdclx0OO0kxoccooddxxxxxxxxxxxxkkkOkkkddxkkkkxkOOOOOOOOOOOOkOOkkkkkkkkkkkkkxxxxxxxxxxxdddddddoooooooooooooooooooooooooooooooooooooooooooooooooooolllllllcccloxO00000000000000000000OxlxOOOOOOO0000OOOOKXXXXKXNNNWWNN0O000O0000000OOOO0000OOOOOO0OOOOOOOOOOkOOOOOOOOOOOOOOOOOOOO00000000K0K00K000O000000KKKK000KK0000000K0000K00KKK0000KKK

View File

@@ -0,0 +1,135 @@
...',;:ccc;::::;;:cccloooodddddddddddddddddddddddxxxxxxddollcllodollloodddllodoc:c:'
..'',;:cc:;;;;;,;:::looddddddddddxxxxxxxxxxdxxxxxxxxxxxxxxxxddoooooooloodddxdddxxdolc;.
..'',::cc:;;;;;;:::coddddddddddxxxxxxxxxxxxxxxxxxxxkxxxxxxxxxxxxxxdddddooddddxxxdxxxxdl:'
...';c::c::;;;;:cccclodxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxkkkkkkkkkkkxxkkxddxdddxdxxxxxxxxxxxdc,.
...;c:;;:c::;;:clc,,::oxxxxxxxxxxdooooooodddddddxxddxxxkkxxkkkkkkkkkkkkkxxxxxxxxxxxxxxxxxxxxxdc,.
..'::,',ccc:;;:cl;..';lxxddddxxxxddoollllllccllloodddoooddxxxxkkkkkkkkkkkkkxxkxxxxxxxxxxkkxxxxxddl,..
.','.';lll:::cc:....,cddddddxxxdddddoloooooooooooodddddooddoodxdxkkkkkkkkkkkkxkxxxxxxxxxxkkkxxxxddoc,'.
.,,..';lll::cl;.,,,;:lddxxxdddodddddxxxddddddddddddddxxxxdddxddddoodxkOkkOOOOOkkkkkkkxxxdxxkkkkkkkxddoc;,.
.,;..':loocccc. ;::codxxddoooddddddddddddddddddddddddddxkkxdxxxxxxoldodkkOkkOOOOkkxkkkxxxdxxxkkkkkkkxdoo;',,.
.;;..':ooolllc. ::cdxxooodoooddddddddddddddddddddddddddddxkxxdxkkkkxlddddxkOkkkOOkkxkkkxdxdxxxkOkkkkkkxdl:,':;.
.;;..';oooolll. .loxdllloodooooddddddddddddddooooooddddddddxxxddxxkkkxodxddddkOOkkOOkxkkxxdxxxkxkkkkkkkkkdl:;'';,.
.,;.;';loddooo;..',lxod:loooddooooooooooodddddoddooooooddddddxxdxdddxxkkxxdoddxxxxkOOkOOxxxkxxxxxkkkkkkkkkkxxxdc;;'.;;
.':.:;;lodddoo,':cldkcclcdoodddoooooooooooollllllodllllllooddddxxdddddxxkxdkxlddxxxxxkOOOkxxxxxxxxxkkkkkkkkkkxxxxl,,;..:,
.;.::'codddoo: :llxxx;looxoodddooooooolc:;:;;;::;cll;;;;;;:cloooddddddddxkxdkdlddxxxxddkOOkxxxxxxxxkkkkkkkkxxkkxxxo;';,..;'
...::'llddddol 'dxxxxl:dxdxdodddooooolc:;,;;:;;;:c;:ll:;;;;;;::cllolooooodxxxxkdlxxxxxxddxO0kxxxxxxxkkOkkkkkkxxxxxxxd:',:'..:.
..cc.lcddddoo'.dkoxddllxkxxdoddooolc::;;;;;;:c::ccl:cloc:::;;;::cllcllllolodxxxkdlxxxxxxdddO0kxxxxxkkkkOkkxxkkxxxxxxxxc,.;;. ,:
.lc,:oldddodd;dkoloodolxkxxododllccc:::::::::clcllooclodolcc:;::ccolclllllllddxkklldxxxddddxOOxxxxkkkkkkOkkxxkkkxxxxxxxl;',:'..;,
. .:;;,dlolxddxlxxlclclxoloxdxododccclclccclcclllllloooollodoolcc:::clocloodoollddxxxllodddoddxxOxxxxkkkOOkOOxkdxkkkkxdxxdxd:,.;:'..:.
':,,ldc:oddddxdllccclkocddxddloolllcllllloooooooloooodolooxooollcccllollodxlddoxxkxkloodoodddxkOxxkdkOOOOOOkkkxdkkkkkxdddld:,.':;. ,;
. . ',,.lddl:xddokodoccl:lkdldddooloodllclooooooooddollooooddoooxoooooollooooodxdoxddkkkxkldooooodxkOkxxkxOOOOOOOxxkxdxkkkkkxddllc,..,:...c.
. .. :;.,odlclxdddxoooccoccdodcdddlloddoooloooooooooooolllooodddddxoooddddodddddxxddxdxxOkkxoooododxkkOxxOkkOOOOOOOkxkxddkkkkkkxdocc;'..;;..;,
. . .c,.codl;xdddkdoxlcclc;ococodxolodxdoolloooolollooolcllooodddoxdododdxxdxdddxxxxxdxkxOdcodooodoxkkOkxxOxkOOOOOOOkxxkxdxkkkkkkkkl:,'...;;.'c.
.. ... ;l.::odccxdxxkoxdlccll,ocddodxxoddxxooolooolllllcllllcllooodddoddodddxxxxxddxxkxxxdxxOxl;oxxddxxkkOOxkOkxOOOOOOOkOkdxkxdkkkkkkkkx:,'....:'.l.
.. . . c;'::dk;okdxOklxdlcllc;doxdddxkxdxdxdoollollllllcclllllolloooddddoodxxxxxxxxdxxxxxxdxxko::odxxxkkkkOkkk0kxOOOOOOOkOkdokxdxkxkkkkkkd;.....,;.c,
.. .. .l'c:ckk,dkxkOdoxlllollldokodxoxkxxddxollllllollllcclllllolooooddxxoddxxxxxxxxdxkkxxdxxkoc.l;oxxkkkkO0xk00xkOOOOOOOOOdoldxddxkxxkxkOkd;.....;',:.
.. .. . ;,lo:lOd;xkxOxlddllddddxooxooxddkkxddddlllllllollllllllllooooooodddddddxxxxxxkxxkkkxxxxxcd',c;xkkkOkkOOOO00kOO00OOOO0OdlccdxodkxxxxxkOkd;... ';'c.
... .. . .:;dd:oOd:xkxkxlxoooxxdxxddxd:oxddkkxdddollllollollllllllloooooooddddxdddxxxxxxkxxkkkxdxxlo;.c';dOOOOOO0kk00Ok0O00OOOO00klc:odddxxdxxdxkkkd;....:,c..
.. ... . .'oxdcdOo:kxxxxlkddddxdkdxkoxclxxdxkkxoodllllloloollllllllooooodddxxxxxxddxxxxxxxxkkkxdxxll:.,:.;xOOOOO0kk000kO0O00OOO000OxolldxxxxxxxddxOkko;...':c..
. .. .,kddckOo:xodxxlkdxdxxxkdxxddd:okdddxkdololllololooloooollooooooddxxxkxxxxxxxxxxdxkkkxdxxll:..l..:xOOOOOOkk000kO0000OOO00OOOkxloxkxxxdxdodkkkkd:'..;c..
. . '. .oOddlOkd:olxxxdOxxdxxkkddldodlldxodddkdllllllolooddoooooooodoodddxdodxxxxxxxxxxxoxxxxddxod;..l..'lxOOOO0kk0000k000000OO00ok00koodkOkxdxxooxOkkkxc'.,;
. ', .xOdddOxx:ookdkkOxxxxxkkxd:,dollodoldodxolllllloooooddoooooodooodddoc:kxoxxxxxxxxdlxxxxdxok,..c,'';ok0OOOOkO000OOO00000O00OodO0OdodkOOkxdxoldkOkxkko:c;.
. ,,.:kOdxxOdkllkOdOOkkkxxkOxxd,.,dlcoodcoddddxdddoloooodcoddddoodoooddoo;;lkkkkxxkxxxOkkOkkdxdd'..:;'''ldk0OO0kO00K0k0000000O0KOodk00xddxkOOOxddldxkkxkkkxo:;''..
. . ,..lkkdkOOdOoc00x0OkkkxxOOkdo,..'oldxddxlllodxxdllllloodccoddddxdoxclol;;;xxlokxdcoxxccdkOxkkl;'.c;''':xxO0O00k00K00O00000KOO0KOdxkOOkoxdxkOOkxxdddkkxdkxkoc:,,;:,...
. .. .'..okxdkOOdOdcK0kO0kkxxxOOkdl'.,;:locoooc;;;cldxxddxdoooxo:oxddxodlcld:;;;ooocOdlccdd::cxOxO:.,,,o'''''dxkO00KkO0KK0OOK00000O00KOxxkOOkoxxdxkOOkxdodxOxddxkko'....',,'...
. ..' .'..xxdxkOOdOdokKkO0Okxxxkkokc;,'...;oloooc;;;;:cloooxxdddddddooddo;:;:;;;;llclo:;:::d::;ddxx'.'.'l''''':kxO00XO000KKKk0KK00KOK0OK0kkkkkkdxxxdxkOOkxddxxOdolxko,. ...'.....
. . . ' ..'..kdlkOOOdkxxdKOO0OOkkkkkoO;,......'colldl:;;;;;;::;:clllllcodoc;;;;;;;;;c;;;;;;;;;c;;;;;;,'''':'''''',kxOO0X0O00KK0KkKXK0K0OKKO00kkxkkkddxxdddkOOkxddxkOd:cxo:'. .........
. , ' . ..'.,kkckOO0xkkxOkOOK0Okkkkkok,,'''.....,clcldc;;;;;;;;;;;;;;;:c;;;;;;;;;;;;;;;,;;;;;;:;,,;,''''''''''''''dxOOOXKO000KKK0OXXK0XO0KKOOKOxdxkxdxkxxddxkOOkxdoxOOo,:dl,. .
. .' .... ..'',kklkOO0xkxkKdOOK0OOOkxkdx,,,''...',,,:llollcc:;;;;,,;;;;;;;;;;;;;;;;;;;;;:::ccccccccc:;,,,'''''''''',dxO0OKXOO00KKKX0KXKKKKk0KKOO0dldxkxdxkxxxdxxkkkkxolxOkl,;lc'. ..
. .. '.' ...'',OklOkOOk0kk00oO0000OOxkxx,,,,,,;;::;::::::::;;:c:;;,'''',,,'''''''''';::;;;;;;cclllllllc::;;,,'''''''dxO0K0K0kO00KKKKOXXX0K0O0KK0kOxloxkxddxxxddxxxkkkxxllokkl,;l;. . ..
. .. .'.. .. ,':kklOOOkO0kkKKOd000000xOkd,;:loodxOOOOOOOOxxoc;;,',''...............',;,;;cxO0000000OOOOOkxxoc;,,,,,,'xkk0XK0KOkO0KKXX00XXX0KOO00K0kkkdodkkxoodxxdxxkxxkkkxl:ldxl,,l, ...
. . ., . .. ;'ckxcOO0kOOOx0KKkk00000kOOxdk00kkOOKKKKKKKKXXKKkc'''..................',:lOXK0KKK00K00KKK000KKKOkxl:,,,kOO0XX0KkkOO0KXXX0XNXX0KOO0000OkkdookOxdooxxddxxkxxkOkdlclldl,,l' ....
.. ,' ....:.ckdcOkOOkO0kOKK0kO00000K0KKK00dxOO0OOkxxxdxOK00Oc,...................',:kkxOxkxlccddxkO0ddxOO0KXX0dc,ck00KNKK00kkO0KKXXK0XNNXXOOO00OOOkkkooxOxkddxkxddxxxxxxkkdolcloc;;:. .....
.... .,. ....c.cxo:OkkOxOO0kKK0000KKXXKOKOxo:;ckdddc:::;;ccx:;:,,.....''''...........';'.cocc.;.,';:olk;,;:cox00KK0xkkKKXXKO0KkkkO0KXKX0KNNXXXOOO00OOOkkkxodxxOxdxkOkxdxkxkxxxkdollcl:.';' ....
'... .;. .'.'c.cxo:kkOOkOO000K0000KKKK0kk:,'..;x:;o'';.;',:c,....''..'''''''''''''''''...::,:.'''.':c,o,..'';lOdccck00KXXKXOO0OkxkO0KKKKKXNNNX0kkO0OOkkOkkkooxo0OxxkkOkxdxxkkxxkxdllcll:..''. ....
.'.'.. ;,. '' ;;.:xlcdxOkOkO0K0K00000KXKKkk:....'d:,c,..'.',,:'...''''''''''''''''''''''''';c;:;'..'':,;o.....;l:,,,:0KXXXKKXKk00kkkOOKXKXKXNNNNXkxkkOOOkxkkkkxodd00kxxkkkkxdxkkkkxkxxolcllc'..... .... . ......
. .'''., ;.. ''.;.':xlcox0OkOkO0KKK000K0XXKdxol;...;:'';;:cc:,;,'''''''''''''''''''''''''''''',,;;clol:,:oc,'',;;,,,,;k0KXXXK0XXOOOkkxOOOKKKXKXNNNXKkxkkkOkxdxkkkkxldO0kkxdxxkkxdxxkkkkkkddllccc,. .. .... ....... .
. ''''.'..;.. ,..: ',dlloo0kOkOk00KKK00KKKXXKll;;,',,:c:;::;,,,,''''''''''''''''''''''''''''''''',,,,,,,,,,,,,,,,,,,,,o0KXXXXKOKxKk0OxkxOO0KKXKKNNNX0KkkxkkkkxdxkkkkkllxOkkxdddxkkxxxdxOOOkkxoloccc;.. .... ..... ........
' .''',,.;,c.. ;.;..:;looll0OOkOOO0KKKK000KKXX0d;,,,,,,,,,,,,,''''''''''''''''',,,''''''''''''',,,,,,,,,,,,,,,,,,,,,,,:00KKXXXXkOxOOkOOxkOOOKKKXKXNNNNOKkxxkkkxxddxkkkdkodkkxxxddddxkkxxxxxkkkkxollllc;'.. .... ..... .......
.. '.'',,';cl... , : '::cod:d00k0OOOOKXKKKK0KKKXX0o,,,,,,,,,,,,'''''''''''''''',;;;,''',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,;O0K0KXNKxcdko0kkkkkk0O0K0XKKNNNNKkKkxxkkkxxddxxkkdOkdxkdddoooodxkkkkkxxddddxolclll:,'........ ...'... ..........
' ...',,,'ll... ''..;lo'od;kOKkOOOO00KKXKKKKKKXX0O:,,,,,,,,,,,,,''''''''''''',;;;;:',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,;;;;k0kOKKNKOl:cOcd0kOkkOO0OKKKXKXNNNNOO0kxxxkkxxxdxxxdkkkxxOxoooolllloxxxkkkxdollodlcclcc:,... . .... . ............ ...
, ....',;,,::.....; .llo.ddckx00kkkO000KXNXXKKKKXXOk;,,,,,,,,,,,,,,,,,,,,,,,,,;;;;;c,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,;;;;x0dckKKOood::l0O0kdOOO000KK0XKXNNNNKOk0xxdxxxxxxdddodkkkxxOkddooollcccodxxxxxddoooolcc::c:;,.......... ..............'',''............. .. .. .
, .. .';;;c,'.'....;llc:cd:kxO0kxxkO0KKKNNXXXXKK0K0k:,,,,,,,,,,,,,,,,,,,,,,,,;;;;;,,,,,,,,,,,,,,,,,,,,,,,,,,,,;;;;;;kkc:oKKkolod:ckxKk0kxO000K0KKKXKXNNNX0OO0xxdxxxxxdddxlodxkkxkOkdooooolc::clooddddoooollccccc::;,'''...',,''. ............... ..............',,,,,,;,'',''........... ......... ..
.' .' .,;:c''.'.. .:clcx'x,Okx00xxxOOOKKXNNKKNNXX0kXKl;,,,,,,,,,,,,,,,,,,,,,,;;;;,,,,,,,,,,,,,,,,,,,,,,,,,,,,;;;;;cko;;l0OdoloolckoOOO0OxkO0K0KKXKXKKNNNN0OOO0xxddxxxxddkcooodxOkxkOxollooolcc:cccclllcccccllcccccc::;,'........'........................',;,............ ................. ............. ..
.' ., .':cc''.,. .;;cllx:d;x0kO0OxkkOOOKKXOXKXXXKk0OKXo:,,,,,,,,,,,,,,,,,,,,,,,;,,,,,,,,,,,,,,,,,,,,,,,,,,,,;;;;;lo;;;cxxxxxollcoo0kkk0XkxOOKKKKXXKKKXNNNKKOO0Oxxdddxxxdxcoooollx0kxO0xolclollllcccccccc:;,;coollccccccc::;,,'......'... .....'',,,,,,;;'..... .. ... ............. .... .,......
..'.',.. .;,:',.' '.:clod0;loKOkO0kkkkO00XKKdKXXXXo:dOXXdc,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,;;::c;;;;;xkOxlllllld0kkOkO0KkxO0KKKXXKKXKNNNX0OOOKkxddddxxxxoolooolclkOOkOOxdllclllclcccclccc:;,,:loolcc:::cccccccc:;;;,,,,'.....',,,'',,,.. ... .....'''''................ . . .'.........
..'.,,'. .'l',. ..:ccood0:dlKOxxK0kkkOO0KXKxldKNXXo,,cd0Ol;;,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,;;;;;;;;;okxlllllooxOkkOOOkkKOOkO0KKXXXXKKXNNX00OOOKxxdoxxxxxodolloolccdOOOkOkkkdolclclclcllccccc:,,:cllccc::::;;;;;::::;;,,,,,,''..''','. ............''''''.. . . . ' .....'..
....;,, . .c''.. .;::ldodkdxlKkkx0K0OOkO00XXKollx00Xx:,,,d0,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,;;;;;;;;;;:KllllloookkkkOOOOOkO0xOkOKKKNNXXXXXNNKKOOOKOxxdddkxkddooooloolclxOOkkkkOkkxolcclccccclccl::;;;lllc:;::::;;;;;;;;;,,,,'',,,,,,,,'..'............. ...... . .. .' ' .....
.. ::,, . ',.. .'::cloodxckdOOkkOX00K0OO00NKKlod0;lk0l;,,cx,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,;;;;;;;;;;OkxooollkOkkkkkkkkkkOKkkkO0KXXNNXKXXXXXK0OOO0kxxddkxkxdooooolooollokOkkkkkO0kddoolccccccclcccc:,;cll:'..:'''''......''''................ ...... ..... .... .. .... . ..
.. l:;, ..'. .;;clloodkcO0o0kOOKK0KXK0OKKXKkcldx,,:c:;,,dc,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,;;;;;;;;;dOollllxOOkkkkkkkkkkk0K00Ok00KXXNNXXXXXXXKkOkKOxxxddkkxdoooooollooloodOOkdxkkOOkkddol:::c:cc:c::c:;,:cl;..'. .... .. ..... . . . ... '... . .. . ......
.. ,l:, '.,...;;:cllodxxoO0l0k0k0K00XXX00KKXKkoooo,,,,,,,;l,,,,,,,,,,,,;c::,,,,,,,,,,,,;ccc:;,,,,,,,;;;;;;;;;;;;;lOodddddxddxOOkkkkkkkO0K0K00O00KXXNNXXXXXKK0kkKkkxxxoxxxddooooooollolloookkxodxkkxkxdddo:;;;:c:::::::;;;cc:,... .. . . ..... ....... .. .. .'.
.. .oc,. ''';..;;;:ccloddlk0OoOkOOOKO0OXKXKKKXXKkOxdl,;;;;,;:,,,,,,,,,,,,,,,:;,,;;;;;,,,;::;,,,;;,,,;;;;;;;;;;;;;;cxoddoodddddddkkkkkxxxkK00xKkK0K0KXXNKXXX0XKKkkKkkkxxOlOxxdooooooodollloooxodkxlldxdddxdxdlc;,::cc:;;;;;;,,;;;' .. . . .. . ........ . . .. ......... ..
. lc,. ,,':'.;;;;cccooddlOK0kkxk0O00O0OXXXXXXXKKxddol;;;;;;;;;;;;;;;,,,,,,,,,,,,,,,,,,,,,,,,,,;;;;;;;;;;;;;;;;;;ldccccloodddddddxxxdxxxxXKOOxKkK0X0KXXXKXXKKXK0xKkkkkdkkdxxddooollllodolloookdlodollllllloodddoolcclc::;,,;,,,,,'. . . . ... .... ........... ........
. ,c. .,'c,.;;;;cccldoddoO000dOkOOO0OO0OXXXXXKXKKdddlo:;;;;;;;;;;;;;;;;;;;,,,,,,,,,,,,;;;;;;;;;;;;;;;;;;;;;;;;;ooccccccllooddxxxdddooddx000Kxx0O00X0KXXXXXXKKXK0kkkkkxoOOdOxdollllllloddollooOOlllollccccc::::ccllolllccc;;;;,,''''.... . .. .. . . .... . . . .. ... .......... . ..
. ';.' '.'lc';;;;:cccoooodxOOKKxOkk0O00OOKOXXXXXKXK0dddlol;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;od:::ccccccclloddxxxxxdolooxKOKOdd0K0KXK0XXXXKXKKXKkxxxxkxxOOxkoolcllllllloddlllokxdclllccccc::::::cc:::::::;;;;,,''.''..... . . . .... ..... .. . .. . .. ......... ....
....;,;'.ll::;;;:cccllxooxOxkXK0kkk0O0KOOO00XXXXXKXKOdddlloc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cdlc::::::::::ccllodxxxxxollllx0O0dddOX0XNK0KXXKKXK0X0xxxxxkdxOOdolllccllllclooddlldd,olcccccccc:::::::c:;;;:c:,,,''',''''''..... .. ... . ... . . ...... .......... ....
...;c,.llc:;;;:c:cll;doxx0xk0KXxOk00OKOO00X0XXXXKKXKkodollooc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;lll:::::::::::::::ccloddxxxxdollloO0kddo0N0KNK00XXXXX00XOxxxxxxdkkkxcccllcccccccllloolol;:occcccccc::::::;:;;;;;::,;,''''.'''','...... .... . . .. . .. ...... . .... . ........ ...... .. .
..':'.lll:::::c:clll'do0OkkOOOXOOkO0OX0000XX0XXXXK0KKxooolllodo:;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:llc:::::::::::::::::::ccloddddddollllx0OoooKX00NX00KXKXX00XOxxxdxdxkldklccclccccccccllloocooccocccccc::::::::;;;;,,;'...,,'''''.',,,.......... .. .. . . .. ........ . .. .. ......... ..........
...,'.lloc:c:cl::lllc'dk0OxOkxx0XOOO00X000XKNK0XXKKK0KKdloolclloddl;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cllccc::::::::::::;:::::::cccllloddddllcco0KdcoKX0ONN0O0KKXX00Xkxdddddxdclkl::cllcccccccclllc;clo:;cccc::ccc::::;,,,,..';,. ..,,''''''''. ........... .. .. . .... ... ..... ... .. .... . . ........
...'..coolclcclc:llll:;dKOxO0dokOX0OkO0K000KKNKKKXX0KX00Kdllolcclccdxdc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cokl:::::::::::::::::;;;:::;;::ccc:::coooolccOo0OodKX00XNK0O0KKK000kddddddxd:cxd:::loccc:cc::cll;..;cc::c:::::c:::::;,,,,'...,'. .',,''''''.. ............... . .... ....... .. ...... ......... . .................
...'..:odocllcllcllccc;:OKOo0Odokx0KOkk0KK00KKNKKK0XX00X0OKxllllcclc::OOkdc;;;;;;;;;;;;;;;;;;;;;;;cokOOd::::::::::::::::::;;;;;;;;;;:::::;;;:cllcclxcd0k00KXOXNX0OO0KK00Oxooodddkxc:dxc::cocc::::::clc' .':::cc::::::::::;,,,,,,'.... .'''..'. ...'...... . .. ... .. .... ..... ......... . ...............
..'..;cddloollololccc;'dK0xoXxdxxdxO0xx00X00KNNKKKkKKX00X0O0dlcllcclcckxxk0Odc;:;;;;;;;;;;;;;;;:lxOkddkc::::::cc:::::::::::;;;;;;;;;;;:::;;,,,,;:cckc:lkO00KNOKXX0Ok0KK0OOdooodddkxc:cxl:::dc::::::::cc. ';;:c:::;;:::;:;,',,,,,'.... .,'.'. . ..'.... .. ..... ... . . ... . .... ..................
..' .,,ddldoooooolocc;;'00koxKxxodkxxkOx0KX00KWXKKKkKO0XK0K0O0dllllcclckkkkkkOOxoc;::;;;;;;:;:ldkkxdxxxk::::::::c::::::::::::;;;;;;;;;;;:::;;,,,'',;:k;::dOO0KX00XK0OkOOKOxkdllooodxlcc:dd:::oc:::::;;:c:' .,:;:::;;;;;;;;,'',,,'''... .''.''.. .. .......... .. . . .. ....... .... . .................
'...'.odlddddolod,l::,;:K0dlKKxkodxxddkx0KX00XXXXKK0OkokXKO00O0dlcllccckxxkkkkkxkkxoc::::;:ldxxxxxxxxxkO::::ccccccc:::::::::::;;;;;;;;;;;;:;;,,,,''',ol;;;:dOOO0000KOkOOO0klxollooodlccc:cdl::ol:::;;;;;;:, .';;;;;,,,,,;;''''''...... .....'... . .. ...... . .. ... ..... . .. .. ................
.,.'..;lcoxxxdllll.c:'''OKklOK0kxdodkdxlk0KX0KXKXXXKKOxdod0K0kOk0klcclcckxxxkxkkxxxxxxddooodxxxxxxxxkkkk0c::::cccccccc::::::::::;;;;;;;;;;;;;;;,,,,''''k,,,,,lOkkOO0dO0xkOOOkcxolloooocccc::lo::lo;;;;;;;;;;;. .';;,,,,'',,'............. ..'...... . ..... ....... .. .... .. .. . . . .............
..,....':dxxdlcc,;.c,.':K0ld000Oodoxkxxol0XXXNkXXXXKXOkddolOKKkkkKOo:clcOxxxxxxxxxxxxxxxxxxxxxxxxkkkkkOO0c:::::cccccccccc:::::::::;;;;;;;;;;;;;;,,,'''';x'',,,lxOkkkOOK0Okk0Oklxlcolllccccc:;:lc:co;;;;;;;;::;,. .,,,,,'',,.............. .... .... .... . .. ... .... ...... .................
.:.....'odxxlcc',;.c.''0Kdl0OO00dddxkkddl0XNNNlXKXXXX0kddddokKXOxk0Kdccl0xxkxxxxxxxxxxxxxxxxxxxkkkkkOOOO0o::::::cccccccccc:::::::::;;;;;;;;;;;;;;,,,''''oc''',,dx00OkkkOOOkdkOOodlllcccc:c:::;;:c:co;;;';;;;,,::. .''','..''..... .... . ... . .... ..... ... ....... . .. ...................
.c,.. ..:dddlo:'',c.,',xXklxKxOOOOdddOkdod0XNWkcO0NNXX0xddddooxXN0xxOKXOOX0OkxxxxxxxxxxxxxxxxxkkkkkkOOO000d:::::::cccccccccc:::::::::;;;;;;;;;;;;;;;,,''''x,'''',xk0K0OkkkkkOxdOOxdllcccc::::::;;;c::o:,,';;::,.,;,. .....''.''... . .. . .. ...... .. ..... .......... .. ... . .... ..............
.. ,';... 'coool,,;;lc..;d0KdoKkoOOOKdxdkkxdx0XNNccxKNWXXXlcloddoxOKXKOdkKKKKKXXXK0xxxxxxxxxxxxxxkkkkkOOOO000Ollc::::::cccccccccc::::::::;;;;;;;;;;;;;;;,,''',k''''''dk0K00kkxxkkkxOOkdlc::::::::.',;,:::o''';;;c;:...;. ..'...''... . . '..... ... .... ... .. ............. ... . .................
.. . '.,,.. .':cdc.....',.:xxXOo0OooOOOKdkdkkkdkKNNXclcKNWNX0cccccxxOOO0XK0kkOKK000KNX0xxdxkkkkkxxkkkkkkOOkO00OOOOkkd:::::::cc:ccccc:::::::::::;;;;;;;;;;;;;,,''':d''''''ok000kldkxxkkkkkOxl::::::::' .,;;;;:c.',;,c..;. .''. . ... .'... .. ........ ... ................... ... ...................
.. . '.;,'.....,:o;. ;.ckxkXxO0oookkxKxkdxx0xONWNXko:ONWNXOccccOdOdkOOO0K0Oxk0KOkXKXkdoodddddxdddxkxdxxxxxxxdddxdxOc::::::::::cc:ccc::::::::::::::::;,,;;;;;,,'.ll''''',lOO0Ox;cdkxdkkxdxdl::;::::' .,;;;;:;.,;,:. .''...''. .......... .. ... ..... . .... ................... ..... .... ..............
. . .. .'.c,''....,l'. ';okdd0KkkolloxkdKxkddx0xONN0N0x:kXWNXd;:lOoloxook000KK0kkOKKK0Odooooddddddddxxxxxxxdooxdddxdokc::::;;;:::::::::cc::::::::;;::::::;,,,;,;;,''lc''''',lOO0kd;;:odxxxxxkxxlc:;::. ';;;;:;,';,:.. .,...',. . .. ..... . ......... ........... . ...... ....... .... ........ ..........
. . . . ;.:c,;,'..':. 'lxkxokKOodllcld0dOxkookOxOW00NK:oxKWNNl':x:cclldook000KXKOkOKX0xddoodddddxdddxkxxdddoooxdooolldc;;;;;;;;;;;;:::;c,c::::::::::;;;::::;;,,,,;;,,o:''''',l0OOxl;;:c:okkxdxkxlllc: .,;;,;.,,;,;. .,....,... ... ....'.... . ....... ........ ....... . ...... .. ..... . ...... .........
... .. . ... . '.,lc:::'.,;. 'dkkxooXKlolcclldKdkxkodO0OXKk0NX':dNWXNl'o:;;:ccodoox00KKXXKOO0Kddooddddddddddxkddoooooodolllllol',;,,,,,,,,,,;:;;:.':;:::::::;;;;:::::;;,;,,,;,oc''''',l0Okxc;::c::dOkxdddc:cc,. .,;;,,..;:,. . ..,. .'..... .... ....'..... . .......... . .................. . .... ...... . .... ...... ......
. .. . . .. ;.colcc;.;'. .ckOOxoddKkccccllloKoxdxodO0XWkdKNN':oWWXNdo:;;;;:lcldooOKKKKKXXOO0Kkooooodddddddodoooooolloolllllld'''.'',,''',,,,;;;; .,;::::::,,,,;:::::;,',;;;,lc''''''l00kxc;::l::ldOOkddolc'.''',;;,,..';, . ...,.. ....... ...... ......... . ... ...... ............ .......... ... ....... . ................
. . . ... . .... ,.,ooolc,:. .':xkkkxddc;0xc:cclllxxllxodkxXNKOoXNNo,0WXNNO:;;;;::clcloooX0KKKKXX0000koodddddddollolccllcccoolllollx,'.. .,''''''''',;;; .',;:::;;....,',;;:;'',,;;cl,,,''':O0Oxc;:co:c:lkxxddoooc,..:c:;, .;, .. ...,... ........ . . .......... . ........................... ......... .. ............ . .............
.. . .. ... .... ... c.coodo:;..,''':lxkkkxoc;,:Ox::cccllo,l;dlxkkNNOOxXXNO;WWXWW:;;;;;:ccllclodxX000XXN0K000koddddddlcclolcclollllolllooloOl:;,...'.'.......',. ..;;;;;,'..............,;cl;,,,'';x0Oxl;:,l:::cdkdoddoooocc::cc'.';,. ... . .,... ....'.. ......... . .. . ............. ............. ............................ ...............
. . .. .. ..... . ,,'ldokodc:,',:lxxxxOxc;,,,:kx::::ccc.': 'cxx0NXd0O0KKkOWXWWO,;;;;::ccldooloxKWX0WNKdd0K0KKxddollccclollllollllollloollkK0koc:,,;;;;,......'. .',;;,,... ..'.';cc;;;,,,ck0ko:,,lc::cldxooddllloolc:,;:c' . . ....,.. .',.. . . ........ .... ....................................................... ...... ..... . ....
. . ... . ...........,:,;llol:;;:lddddxdddc,,,,,,;xdc;;:::. ;. 'xxKNOd00O0KNNWWNWc,;;;::ccccooodooXNWWWNxdddx000KkllllllllollllollllodddxOkkxkddOKOxoc:;;cc:......... ...''','... ..''.,cc;;,,,;oOOxl;;cc:c:clddooo::llooocc::;,'. . .....,. .... ... ..... .. ..... .................. ........................................... ............
.... . . . . ...'',,'.,;:cdllodxocoool;;,'',,,,,xdl,;;;. ;' oodK0xoOKk0KNWWW00,;;;;::cccccooodOXNNNWMXkddddkO0KOloooooddoooodollloxdxddddxdddxOdddxxdoc;;,..';...... ...''... ..'',:c:,,,,;oOko,;:cc::::odooo:';ccllol::;,;;,.. .. ..,....... ... .... .. .... ................................... .......................... . ............
.. . . . .. .....',;:dc:ccc:::cc;,''',,,'''odl;,,' .';odlxxklONkOKNNWWKo;;;;;::ccloodx0KKKXNNK000xdodddkO00dooooddoddddoooooddooddxxddddxxdlcodxkd:;;;',:lc,,;,. ....... ..,,';;,,,,,;lxxlc:c:::::lolllc'',;:cc::;;;,;:;'.. ..''...'. ........,'... . ........................................................... .. ....... ......
. . ..... ',;,lc',;:::c:;;,'','''.''cooc,, clood:kx',NOkXXXN0xodOkddoollx00KXKKKKXNlcccc:cllodooxOKKxdddddddddddddddddxxdodoolodxxdollclkkc;;;,,';;;,;::;,,'.. ..... . ';,,''',,,,;:lodddl::;::llclc',.....,,,;;;;,;::,....'......... ........ .............................................................. .. .............
.. ... .. . . . .. .. .',.;o.',;::;,,,'''.......;ool,' . ..:lodd..ddl.OKkNKKNN:cdkxxxxxxKWOWNXKKKKNKcccc::;;;;cooddx0Xxxxddddddddddxxxdolllooolcloddolllllxkc;;;;;,,,;:,,,,''''''..... . .. .... .,:;,''',,,,,,':ddxxdllclcccl, ...,;,;;,,;:,.'.... ............... ................................................................. ..... ......
. ........ . . . .''.;l..... .........',,'.occ; .ccldl...'ddc:XX00XXN0xkxxxdd0KkxxxKWNXKKklllcc:;;;;;;::coodOKkxkkddodxxkxdolcccllllllcccloolllccloxl:;;;;;;,,;;;;;;,,'.................. .';;;''',,,,'..;:::;::;;;:cc' . .. ..,;,,,',::;.. .. . ............ ........................ ........................................ . .. ......
......... .. . ... .;: .......... :;cc. ,lcc;. ...'oxoxXKOKKXNXdoolxNNXccckXxx0KX:cccc;::;,;;;;;:::clx0XKKdoodkxdolcccccccccclllcccloclccclodo:;;;;;;;;;;:;;;;;;;,''''''''''''',,,'''....',,''',.'. ..;:;,;,,,,;:cc. ..',,,,',;;,...... .... ....................................................................... ... .........
.. . . . ... ;:, ....... ...... ''c.c:.;ccc' .,..',,lkxXXXXXKXNXdoKWNNNdcl0oodkKo;:cccc:;::;;;;;;,::cldOXKollllcccccccccccccccclllccllclccccldl:;:;;;;;;;;:::::::::;;;;;;;;;,,,''..........''''''.'. ':::....,;;:l,. .........'',,'',:;'... .............. .......................... .......................................................
.. . . .. .. . ':;... .........''. ;':lcllc'..;;'',,;;;;dkk0XXXKXNNNNNNNNKcOolod0d;c;lclcl::;;;,,,,;,;lxkK00Kdlllcccccccccccccccccllllcccclccccloc:::::::::;:::cc:::::::::::::;;;;;,,,'... .l...''... ..;::'....,,;:,'. ..........'',,,,;:,.. ........................... ....................................................................
.. ... . . .. . .....,',',;:,,::coclol;,,::;,,,,;;;;;kcoxx0KXXXX0NNNXKK0olloko:,;:clcoclc:;;;;,,,ck0OkxxxOK0dllccccccccccccccccccllllcccccccclol:::::::::::::cllc:::::::::::;,,,''.......'o. ''.... .,,',,''.,,,:.''.....''.......,...',;;;;:,................................................................................................
. . . . .; . ................'''',d,cd:,c:,,,,,;;;;,'0'':okO0KNXX00kOoxllllld::;,c,lllollc::,;;:k0Okkkxxdox0Xkddxdlcccccccccccccccccccccccccccldo:::::::::::::::lllcccc::::;''...........,:.. ', .',.....',;;c,,:''''.........'......',;;;:;,........................................................................ ..... ............
.. . ',... ......................'l.:dc....''''''''.0.':oodkO00KNWKkkkolllldc;c,;:;lllollc::ckKOOOOOkkxxddxOXKxxk0xccccccccccccccccccccccccccclxl::::::::::::::::cooc::;;;''''......'''.,;'.. '. .. .''. . .,,,;..' .........'..........,;;;:;,............................... ..... .....................................................
. ....,. ...........................;c,;:;......'.....0.,:olcccdkk0KXNN00kxllooclc:c;looollloONXOOOOOOkkkkkOkkk0X0kOOcccccccccccccccccclcccccccccokc::::::::::::::::::ccc;;''''''''..'''...:,... '. ....' .,',' .'............ ....... .',,;;;,............................................................. ...........................
. .. .. .... ............................,;..','''...'.'..X.:c:;;:::::;lKKNNWNXX0kxllllooodooookK0XNXK0O000kkkkxxkkkOXX0lccccccccccccccccccllccccccccldxc:::::c:::::::;;;,,,::,,,,,''''''''''..:;'... .. .. ...... ..,',,..,............... .... ..',,;;,............................................... .................................... ..
. . . ... ...... ........ . .. ......'....',,,'.....Olc;;;;;;;::;dd:lx0XWWWWWNK0kkkxkkOOO0KKKK0OOOkxdxkOkkkkkkOKKXOlccccclcccccccccccccllccccccclko::cccc::::::;;;;;;;,,,:;,,,,,,,,,,''..c;'..'. . ....... ...'',, .''...... ........ ...... ';;,;;,....... .... ................................................. .......... ...... ..
. . . . ..................... ......................dO;;;,,,,,,,lxcccc:;ldOXNNWNNXXX00Oxkkkkxxxd0NNXK0Okkkkkk0kllOX0xolllccccccccccllllllcccccclodkl:::cc::::::;;;;;;;;;;;:::,,,,,,,,,'..c;'..'' .. . .. ... .'',' .'......... .. ...........',;;,,............................................................................... ....
. .. ................... ..'...................,o:kx:;;;;;;;ldcc::;,;,,,:lxk0KXNNNNNXK0KKKKXxdx0XNXXOkkkOOdooookKK0lccccccccccccccccllllccccloddkc:::::::::::;;;;;;;;;;;;;cc:;;;,,,''.c;'..''. .. .. .. ..,',, .'..........................',;;'.... .................. .............................................. .. ... ...
. ................... .',...................;l;::xkdc::ccldcc::'';;,,,,,;ccclllodxkO0000KXXKKKKKKXXKK00kxdlccclK00xcccccccccclllllllllllccclodxdc::::::::::::;;;;;;;;;;;;;:ccc;,,,''c;'..'''. .. . .... . .,',' .'............................,,;'............... ...................................................... .........
.. . ..',.............. ..,'...................;:,;;:::oxxdclx:cc:'.,;,,,,,,,;:::ccclllldoccoxkxlllllldkoccccccccccc0KOklccccllccllclllllllllccclookl::c::::::::::;;;;;;;;;;;;;;;cx;,,,':;'..'.''. . .... ',';' ,...............................;,.... ................ ................. ......................................
.... . ' .',,'................,....................,;;,,;;;;::::cx:cc:,'.,:,,,,,,,,,;:::clllloxlcllokollllllcccccccccccccck0dOdccccccccccllllllllllcccoddxc::::::::::::::::;;;;;;;;;;;;x;;,,,::,''...''... .. ... . ;:',. .;.......... ... ................';'.......................................... .................. ... ...........
... .... .. .',,:'..'...........',....................;:;;;''''',;::x:;:;,'.','.',,,,,,,,,;;:cclllkxlllccxclllccccccccccccccclld0oxklcccclcccccllllllllllccooxoc:::::::::::::::;;;;;;;;;;;:d;;;;;;:;''....'. . . ... . cc'.. .... .. ....... .................;'......................................... ..................... ............
. .. .. .. , .,,;c''.'..........,'. ....................;lxl;'..'',,l:,,,,'..''..'',,,,,,,,,':ccllckxxlllco::ccccccccccccccccclccoKldOdcccccccccccccccllllcclloxc:::::::::;;;;;;;;;;;;;;;;;k:;::;;,c:,'.....'... . .''. .l;....;...... .... ....................;............................................................................
... .... . . .. ..,;;c,'.'''.......;...........................:ll:''',:;''''''........',,,,,,,'',:ccccdkxdoolld,;cccccccccccccccccccco0llkxcccccccccccccccccllccclooc::::::::;;;;;;;;;;;;;;;;ld::;;::'l:;'....... .. . ...''. .,l,...;.. ... ..........................,............................................................................
..... .. . ' ...';;:;'''''.....',..............................,cc:;;,''''.'..........',,,,,,'',;:;cclkddxdoooc,,:cccccccccccccccccccoKlcdxcccccccccccccccccclccccdl::::::::;;;;;;;;;;;;;;;cxccc:;;;'c::'........ . .... ......'.. ..cc...,............. ...................'............................................................................
....... ... .. ....';;;c,'',''''.,,..............................',:,'''''.'..............',,,,''',;;,,:cddodxdoox,,,,;::cccc::cccccccccco0cclocccccccccccccccccclcccloc::::::;;;;;;;;;;;;;;;cdolccc::,,c;;.'''..... .... ... ...''. ..o,..,......... ...................'''..............................................................................
...... ...... .. .. . .. . . ..'..;;;c,'',,,'.,...............................'';;,''''...................',,''',;;,,,;cxodxxxdol,,;;;;:ccc::cccccccccccxxccdccccccccccccccccccclcccol:::;;;;;;;;;;;;;;;;;:ddollccc:;,c;'''''..... . ... .. ... .''.. cc..,......................................................................................................... ....
........... .. . .. .''.';;;:,,',,,',................................',:,,''''''...................''''';;,,,,,oooddxllx,,,,;;::c::cccccccccccc:Occdcccccccccccccccccccccccllc;;;;;;;;;;;;;;;;;;:dddolllcc:;::,',;'''.... . . ... .. ..'. 'o.................................................................................................................
............ ... . .. . .. .'''',;;;;;,',,,,;,...............................',:,''''''......................'.';,,,,,,;dxxxkdlxl,,,;;:::::cccc::cccc:::ld:l::cccccccccccccccccccccclc:;;;;;;;;;;;;;;;;:dddoolllcc:;c;,,;:,'''... . . . .... ...'..o.'................ ............................. ........................ ....... ..............................
................ ........ .. . . .. . .. ',,',;;;;;;,,,,,,,;:,............................'';;''''''.........................';,'',,,,,;::::;;:,;;;;:::::::lc:::::c::::d::::::ccccccccccccccccccccclc;;;;;;;;;;,,,,,:ddddoolllcc::o;,,;:;'''.... ....... .........'.c,................ ....................................................... ..............................
............................... .. .. .. . .... .,,,,;;;;;;;;,,,,;;;,;:,..........................',:,''''''.........................';,'.'',,,,;::::;,,;;;;:::::::l:;:::::::::l:::::::c:c::ccccccccccccccclc:;;;;;;;;;,,,,;ddddooollccc:cd;;,';;,''.... .... ................:'............... ......................................................... . .. . ................. .........
......................... ............. ........ ',,,,;;;;;;;;,,,,;;;;;;;;,........................';:'''''''.........................',,'.'',,,,,;::::,;,;;;::::::cc:;::::::::::::::::::::::::c:ccccccccccclcc;;;;;;;;,,,,,dxddooolllccc:lo::,,;;;''..... ...... ..............:'.................................................................. ........ .. .. ................. .........
............................... ..... ........ .,,,,;;;;;;;;:;,;;;;;;;,,,;;;'....................'';,''''''...........................,,'.''',,,,,;:::;,;,;;::::::lc;;:::;:::;:::::::::::::::::::::ccccccccclc:;;;,,,,;,,;oxddoollcccc::colc;,,;,,,'''... ....................;.'....................................................................... ... .................. ........
................................ .......... .......... ';;,,;;;;;;;;:;;;,;;;;;;;;,:c;,'..................',;'''''''...........................,,'''''',,,,,:::;,;;;::::::cl:;;;::::::;;;:::::::::::::::::::::ccccccclc:;,;,,,,,,,odddooc:;::::;;lxc:;,;;,,,,''.... .............................................................................................. ... . ................ ..........
............................................ ............ .,;,;;;;;;;;;;;:;;;;;;;;;;;:o;;cl;,................',;''''''............................,,,'.''',,,,,;:::;,;;::::::cl;;;;;::::;;;;:;;:;::::::::::::::::::cccccllc;,,,,,,,,lddddo:;,;;:::;:oxl:,,;;,,,,''''.. .......................'..................................................................... . .. ................ ... .......
............................................ ... ....... ';;;;;;;;;;:;;;:;;;;;;;;;;;lc;:x:;::;'............'',;''...............................',,,''''',,,,,,:::;,,;::::::lc;;;;;;;;;;:::::;;;:;;;;::::::::::c:::cccccoc:;,,,,,,cxdool:;,,;::::;:xoc:,,;;,,,'''.''. ........................'.................................................................... ... .................. ... ... .
.................................................. .... .,;;;;;;;:;;;;;;::;;;;;;;;;co;;xo;;;;:l;...........',;,'''...............................,,,,''''',,,,;;::;,,;:::::cl:;:;;;:;;;;:;:;::;;;;;;;:;:::::::::::::ccccocc;,,,,,,xdoo::;;,;;;:::;cklc;,;;;,,,,''..'.. .........................'....................................................................... .................... .. ..
.....................................................' . ';;;;;;;;:::;;;;;c:;;:;::::oc;lx;;;;;;;cl;.........'';,''................................',,,,,''',,,;;;::;,,,;::::ll;;:;:::;;;:;:;:;;::;;;;;;;;:;::::::::::ccccloc:,,,,,cdol:;;;;,;;::::;lxc:,,;;;,,,,''...'. ............................................................................................... . .. ............... ..
......................................... ... . ...'. .. .,;;;;,;:;::::;;;;c:;;:::::odolxc;;;;;;;;;cl,......'',;''''..............................',,,,,,,,,,,,,,;::;,,;;:::clc;::::;;;;:::::;:;:;;;;;;;;::::::::::::::ccccdcc;,,,'loc;;;;;;,;;;;;;;ol:;,,,;;,,,,,'...'.. ............................'.......................................................................................... ......
......................................... .. .. .... .,'.';;;,,;;::::::;;;;:c;;::cloc:::l:;;;;;;;;;;;cc'....'',;,'''...........................'.'',,,,,,,,,,,,,;:::;,,;::::clc::::::::::::;:::;;:;;;;;;;:::::::::::::cccccooc:,',,,;clllc;,,;;;;;;;l:;,,,;;,,,,,,''..''. ...........................''....................................................................... .................. .... ....
...................................... . . .'..,'',;;;,,;;;::;::;;;;,;c:;:okxxxkkodl;;;;;;;;;;;;;:,..''',,''''...........................'''',,;;;;,,,,,;;;::;;,;;::::cl::::::::;:::;;::::::;;;;:;;:::::::::::::ccccccdcc;''''''',;cccllc:;;;;:;;,,,;;;;,,,'''...'.. ...................................................................................................................... .........
............................................ . .'.','.';;,,',;:::::::;;;,,,:::o0Olccxd;cc,,,;;;;;;:ccc;'..''';,''.............................'''',;;;;;,,,,,;;;:::;;;;::::cc:::::::::::::::::;;:::;;;;;:::::::::::::ccccccolc:,'''''''''''',;:ccc::;;;:::cl,,,,'''..'''. .................................................................................................................. ...........
..''....................................... ......;'..',,,'.,;::::::;;;;,,,;c:dXNXXKXxcc;,,,,;::::;,'.....'',;,'''...........................'.''',,;;;;;,,,,;;;:::;;;;:::cc:::::::::::::::::;;::::::;:::::::::::::::ccccccoocc;''''''''.........'',,,,,;;lx,,,,''''.'''. .............................................................................................................................
............................................. .....;,...',''..;:::::::;;;;,,,;c:oXWWWNXK0l,,,;;;;;,'........'';;,''''........................'..'',',,,,,,,,,;;;;;;::;;;::::cc::::::::::::::::::::::::::::::::::::::c:cccccccldlc:,......................'''ox',''''''..'''. ...........................................................................................................................
..................................................,;'..',,'..'',:cc:::;;;,,,,,cdKWWWNXkOk:,;;,,,,,,,''.....''';;'''..........................''.''',,,,,,,,,;;;;;;;:::;;::::cc::::::::::::::::::::::::::::::::::::::ccccccccclooc:;'........................ld'''''''...'''. ..........................................................................................................................
''...............................................,:;;,,,''..'''',:ll::;;;;,,,,:ONWMWWX00l;,;;,,,,,,,''.....'',;;''''.......................''.'''',,,,,,,,,,;;;;;;;::::::::cc:::::::::::::::::::::::::::::::::::::::ccccccccllodlc:,........................lo.''''.....''''. .........................................................................................................................
'''''..''......................................';c:,'.........'''',:lc:;;;,,;;:lx0XNNKKk:;;;;;,,,,,,,''''.'',,:;''''........................''''',',,,,;,,;;;;;;;;:::::::::cc:::::::::::::::::::::::::::::::::::ccc:cccccclllllooc:;'.......................ll''''.......'''. ......................................................'...'.'''''......................................................
'',,,'''''''.'.............................',;,''............''''''',::;;;::c;''',cdkdoc;;;;;;,,,;;;,,'''''',;:,''''''................''''.'''''''',,,,,,;,,;;;;;;::::c::::cc:::::::::::::::::::::::::::::::::::ccccccccccllllloolc:,......................'l:.'.'.......'''.. ...............'...................'''''''.'.'''''''''..'''''.........................................................
,,'''''''''''.............................','.......','..,,,',,',,,,,';;;:ol;.''.,;coocc::;;;;;;;;;;;;,,,',,,::;,,,,;,'''''''''''','',,,,,,,,,,,,,;;;;;;;;;;;:::::::cccccccccccccccccccccccccccccccccccccccccccccccccccclllllllooolc;'....................';l;'''''''....''''....... .'...'.......''''....''''''.'''''''''',''''''''''''''''''''.................'........................................

View File

@@ -6,4 +6,4 @@ dir:
order: 2
---
<Catalog base='/en-us/develop/' />
<Redirect to="development" />

View File

@@ -15,15 +15,15 @@ You can quickly navigate to the section you want to see by searching for CI file
Workflow files are all stored under `.github/workflows`, and each file can be categorized into the following functional parts:
+ [Code Testing](#code-testing)
+ [Code Building](#code-building)
+ [Version Release](#version-release)
+ [Resource Updates](#resource-updates)
+ [Website Building](#website-building)
+ [Issues Management](#issues-management)
+ [Pull Requests Management](#pull-requests-management)
+ [MirrorChyan Related](#mirrorchyan-related)
+ [Others](#others)
- [Code Testing](#code-testing)
- [Code Building](#code-building)
- [Version Release](#version-release)
- [Resource Updates](#resource-updates)
- [Website Building](#website-building)
- [Issues Management](#issues-management)
- [Pull Requests Management](#pull-requests-management)
- [MirrorChyan Related](#mirrorchyan-related)
- [Others](#others)
Additionally, we use [pre-commit.ci](https://pre-commit.ci/) to implement automatic code formatting and image resource optimization, which runs automatically after creating PRs and generally requires no special attention.
@@ -51,10 +51,10 @@ This workflow runs automatically on any new commit and PR. When triggered by a r
Version release is the necessary operation to publish updates to users, consisting of the following workflows:
+ `release-nightly-ota.yml` Release nightly builds
+ `release-ota.yml` Release stable/beta versions
+ `gen-changelog.yml` Generate changelog for stable/beta versions
+ `pr-auto-tag.yml` Generate tags for stable/beta versions
- `release-nightly-ota.yml` Release nightly builds
- `release-ota.yml` Release stable/beta versions
- `gen-changelog.yml` Generate changelog for stable/beta versions
- `pr-auto-tag.yml` Generate tags for stable/beta versions
::: tip
The "ota" in the above file names stands for Over-the-Air, which is what we commonly call "incremental update packages". Therefore, MAA's release process actually includes building OTA packages for past versions.
@@ -82,9 +82,9 @@ The release process for these two channels is relatively more complex. We'll exp
This section of workflows is mainly responsible for MAA's resource updates and optimization, with the following specific workflows:
+ `res-update-game.yml` Executes periodically to pull game resources from specified repositories
+ `sync-resource.yml` Syncs resources to the MaaResource repository for resource updates
+ `optimize-templates.yml` Optimizes template image sizes
- `res-update-game.yml` Executes periodically to pull game resources from specified repositories
- `sync-resource.yml` Syncs resources to the MaaResource repository for resource updates
- `optimize-templates.yml` Optimizes template image sizes
### Website Building
@@ -119,8 +119,8 @@ This workflow checks whether commit messages in PRs conform to [Conventional Com
MirrorChyan is a paid update mirror service, with the following related workflows:
+ `mirrorchyan.yml` Sync update packages to MirrorChyan
+ `mirrorchyan_release_note.yml` Generate MirrorChyan Release Notes
- `mirrorchyan.yml` Sync update packages to MirrorChyan
- `mirrorchyan_release_note.yml` Generate MirrorChyan Release Notes
### Others

View File

@@ -21,42 +21,40 @@ Welcome to the [Web-based PR Tutorial](./pr-tutorial.md) that anyone can underst
2. Visit the [MAA main repository](https://github.com/MaaAssistantArknights/MaaAssistantArknights), click `Fork`, then `Create fork`.
3. Clone the dev branch of your repository with submodules:
```bash
git clone --recurse-submodules <your repository link> -b dev
```
```bash
git clone --recurse-submodules <your repository link> -b dev
```
::: warning
If using Git GUI clients like Visual Studio without `--recurse-submodules` support, run `git submodule update --init` after cloning to initialize submodules.
:::
::: warning
If using Git GUI clients like Visual Studio without `--recurse-submodules` support, run `git submodule update --init` after cloning to initialize submodules.
:::
4. Download prebuilt third-party libraries
**Python environment required - search for Python installation tutorials if needed**
_(tools/maadeps-download.py is located in the project root)_
```cmd
python tools/maadeps-download.py
```
```cmd
python tools/maadeps-download.py
```
5. Configure development environment
- Download and install `Visual Studio 2022 Community`, selecting `Desktop development with C++` and `.NET Desktop Development` during installation.
- Download and install `Visual Studio 2022 Community`, selecting `Desktop development with C++` and `.NET Desktop Development` during installation.
6. Double-click `MAA.sln` to open the project in Visual Studio.
7. Configure Visual Studio settings
- Select `RelWithDebInfo` and `x64` in the top configuration bar (Skip for Release builds or ARM platforms)
- Right-click `MaaWpfGui` → Properties → Debug → Enable native debugging (This enables breakpoints in C++ Core)
- Select `RelWithDebInfo` and `x64` in the top configuration bar (Skip for Release builds or ARM platforms)
- Right-click `MaaWpfGui` → Properties → Debug → Enable native debugging (This enables breakpoints in C++ Core)
8. Now you're ready to happily ~~mess around~~ start developing!
9. Commit regularly with meaningful messages during development
If you're not familiar with git usage, you might want to create a new branch for changes instead of committing directly to `dev`:
```bash
git branch your_own_branch
git checkout your_own_branch
```
```bash
git branch your_own_branch
git checkout your_own_branch
```
This keeps your changes isolated from upstream `dev` updates.
This keeps your changes isolated from upstream `dev` updates.
10. After development, push your local branch (e.g. `dev`) to your remote repository:
@@ -66,30 +64,29 @@ Welcome to the [Web-based PR Tutorial](./pr-tutorial.md) that anyone can underst
11. Submit a Pull Request at the [MAA main repository](https://github.com/MaaAssistantArknights/MaaAssistantArknights). Ensure your changes are based on the `dev` branch, not `master`.
12. To sync upstream changes:
1. Add upstream repository:
```bash
git remote add upstream https://github.com/MaaAssistantArknights/MaaAssistantArknights.git
```
```bash
git remote add upstream https://github.com/MaaAssistantArknights/MaaAssistantArknights.git
```
2. Fetch updates:
```bash
git fetch upstream
```
```bash
git fetch upstream
```
3. Rebase (recommended) or merge:
```bash
git rebase upstream/dev # rebase
```
```bash
git rebase upstream/dev # rebase
```
or
or
```bash
git merge # merge
```
```bash
git merge # merge
```
4. Repeat steps 7, 8, 9, 10.
@@ -105,11 +102,11 @@ Please ensure that it has been formatted before submission, or [enable Pre-commi
The currently enabled formatting tools are as follows:
| File Type | Format Tool |
| --- | --- |
| C++ | [clang-format](https://clang.llvm.org/docs/ClangFormat.html) |
| Json/Yaml | [Prettier](https://prettier.io/) |
| Markdown | [markdownlint](https://github.com/DavidAnson/markdownlint-cli2) |
| File Type | Format Tool |
| --------- | --------------------------------------------------------------- |
| C++ | [clang-format](https://clang.llvm.org/docs/ClangFormat.html) |
| Json/Yaml | [Prettier](https://prettier.io/) |
| Markdown | [markdownlint](https://github.com/DavidAnson/markdownlint-cli2) |
### Use Pre-commit Hooks to Automatically Format Code
@@ -117,10 +114,10 @@ The currently enabled formatting tools are as follows:
2. Execute the following command in the root directory of the project:
```bash
pip install pre-commit
pre-commit install
```
```bash
pip install pre-commit
pre-commit install
```
If pre-commit still cannot be used after pip install, please check if the pip installation path has been added to the PATH.
@@ -130,9 +127,9 @@ The formatting tool will automatically run every time you submit to ensure that
1. Install clang-format version 20.1.0 or higher.
```bash
python -m pip install clang-format
```
```bash
python -m pip install clang-format
```
2. Use tools like 'Everything' to locate the installation location of clang-format.exe. As a reference, if you are using Anaconda, clang-format.exe will be installed in YourAnacondaPath/Scripts/clang-format.exe.
3. In Visual Studio, search for 'clang-format' in Tools-Options.
@@ -150,6 +147,4 @@ You can also format with `tools\ClangFormatter\clang-formatter.py` directly, by
Create GitHub codespace with pre-configured C++ dev environments:
[![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg?color=green)](https://codespaces.new/MaaAssistantArknights/MaaAssistantArknights)
Then follow the instructions in vscode or [Linux tutorial](./linux-tutorial.md) to configure GCC 12 and the CMake project.
[![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg?color=green)](https://codespaces.new/MaaAssistantArknights/MaaAssistantArknights?devcontainer_path=.devcontainer%2F1%2Fdevcontainer.json)

View File

@@ -16,8 +16,8 @@ Your pull request will be marked as `ambiguous` when you are not committing with
### Auto Notification
- Adds labels to issues and pull requests, e.g., `module`, `Client`, `ambiguous`, `translation required`, etc.
Issue Bot will add categories based on keywords.
Please refer to the [configuration file](https://github.com/MaaAssistantArknights/MaaAssistantArknights/blob/master/.github/issue-checker.yml) for the keywords.
Issue Bot will add categories based on keywords.
Please refer to the [configuration file](https://github.com/MaaAssistantArknights/MaaAssistantArknights/blob/master/.github/issue-checker.yml) for the keywords.
- Adds the `MAA Team` label to issues and pull requests for MAA public team members.
#### Issues and Their Comments

View File

@@ -18,63 +18,60 @@ Mac can use the `tools/build_macos_universal.zsh` script for compilation. It's r
## Compilation Process
1. Download compilation dependencies
- Ubuntu/Debian
- Ubuntu/Debian
```bash
sudo apt install cmake
```
```bash
sudo apt install cmake
```
- Arch Linux
- Arch Linux
```bash
sudo pacman -S --needed cmake
```
```bash
sudo pacman -S --needed cmake
```
2. Build third-party libraries
You can choose to download pre-built dependency libraries or compile from scratch
You can choose to download pre-built dependency libraries or compile from scratch
- Download pre-built third-party libraries (recommended)
- Download pre-built third-party libraries (recommended)
> **Note**
> ~~Contains dynamic libraries compiled on relatively new Linux distributions (Ubuntu 22.04). If your system's libstdc++ version is older, you may encounter ABI incompatibility issues.~~
> After introducing cross compiling to lower the runtime requirement, only glibc 2.31 (aka. ubuntu 20.04) is required now.
> **Note**
> ~~Contains dynamic libraries compiled on relatively new Linux distributions (Ubuntu 22.04). If your system's libstdc++ version is older, you may encounter ABI incompatibility issues.~~
> After introducing cross compiling to lower the runtime requirement, only glibc 2.31 (aka. ubuntu 20.04) is required now.
```bash
python tools/maadeps-download.py
```
```bash
python tools/maadeps-download.py
```
If you find the libraries downloaded above cannot run on your system due to ABI version issues and you don't want to use container solutions, you can also try compiling from scratch
- Build third-party libraries from scratch (will take considerable time)
If you find the libraries downloaded above cannot run on your system due to ABI version issues and you don't want to use container solutions, you can also try compiling from scratch
- Build third-party libraries from scratch (will take considerable time)
```bash
git clone https://github.com/MaaAssistantArknights/MaaDeps
cd MaaDeps
# If the system is too old to use our prebuilt llvm 20, please consider using local build enviroment instead of cross compiling.
# The toolchain config under MaaDeps/cmake needs to be modified.
python linux-toolchain-download.py
python build.py
```
```bash
git clone https://github.com/MaaAssistantArknights/MaaDeps
cd MaaDeps
# If the system is too old to use our prebuilt llvm 20, please consider using local build enviroment instead of cross compiling.
# The toolchain config under MaaDeps/cmake needs to be modified.
python linux-toolchain-download.py
python build.py
```
3. Compile MAA
```bash
cmake -B build \
-DINSTALL_RESOURCE=ON \
-DINSTALL_PYTHON=ON \
-DCMAKE_TOOLCHAIN_FILE=MaaDeps/cmake/maa-x64-linux-toolchain.cmake
cmake --build build
```
```bash
cmake -B build \
-DINSTALL_RESOURCE=ON \
-DINSTALL_PYTHON=ON \
-DCMAKE_TOOLCHAIN_FILE=MaaDeps/cmake/maa-x64-linux-toolchain.cmake
cmake --build build
```
To install MAA to target location, note that MAA is recommended to run by specifying `LD_LIBRARY_PATH`, don't use administrator privileges to install MAA into `/usr`
To install MAA to target location, note that MAA is recommended to run by specifying `LD_LIBRARY_PATH`, don't use administrator privileges to install MAA into `/usr`
> Now it shall be able to run without specifying `LD_LIBRARY_PATH`
> Now it shall be able to run without specifying `LD_LIBRARY_PATH`
```bash
cmake --install build --prefix <target_directory>
```
```bash
cmake --install build --prefix <target_directory>
```
## Integration Documentation

View File

@@ -72,21 +72,21 @@ Conflicts are somewhat troublesome to resolve. This section only explains the co
1. First, enter MAA's main repository and click the Fork button in the upper right corner to fork a copy of the code
<ImageGrid :imageList="[
{
light: 'images/zh-cn/pr-tutorial/fork-light.png',
dark: 'images/zh-cn/pr-tutorial/fork-dark.png'
}
]" />
<ImageGrid :imageList="[
{
light: 'images/zh-cn/pr-tutorial/fork-light.png',
dark: 'images/zh-cn/pr-tutorial/fork-dark.png'
}
]" />
2. Then directly click "Create Fork"
<ImageGrid :imageList="[
{
light: 'images/zh-cn/pr-tutorial/pr-2-light.png',
dark: 'images/zh-cn/pr-tutorial/pr-2-dark.png'
}
]" />
<ImageGrid :imageList="[
{
light: 'images/zh-cn/pr-tutorial/pr-2-light.png',
dark: 'images/zh-cn/pr-tutorial/pr-2-dark.png'
}
]" />
3. You'll arrive at your personal repository. You can see the title is "YourName/MaaAssistantArknights" with small text below saying "forked from MaaAssistantArknights/MaaAssistantArknights"
@@ -98,13 +98,13 @@ Conflicts are somewhat troublesome to resolve. This section only explains the co
7. After editing, click the button in the upper right corner to open the commit page and write what you changed
We have a simple commit title [naming format](https://www.conventionalcommits.org/en/v1.0.0/). It's best to follow it, but if you really can't understand it, you can write something simple first.
We have a simple commit title [naming format](https://www.conventionalcommits.org/en/v1.0.0/). It's best to follow it, but if you really can't understand it, you can write something simple first.
8. Have a second file to modify? Discovered an error after finishing? No problem! Just repeat steps 4-7!
9. After all modifications are complete, make a PR! Click "Code" to return to your **personal repository's** homepage
If there's a "Compare & Pull Request" button, that's great - click it directly!
If not, don't worry - click the "Contribute" button below, then "Open Pull Request" - it's the same thing.
If there's a "Compare & Pull Request" button, that's great - click it directly!
If not, don't worry - click the "Contribute" button below, then "Open Pull Request" - it's the same thing.
10. You'll arrive at the main repository's PR page. Please verify that what you want to PR is what you intend to submit.
As shown in the image, there's a leftward arrow in the middle, requesting to merge the right side's PersonalName/MAA dev branch into the main repository/MAA dev branch.

View File

@@ -5,8 +5,8 @@ icon: iconoir:code-brackets
# Dedicated VSCode Extension Tutorial
* [Extension Store](https://marketplace.visualstudio.com/items?itemName=nekosu.maa-support)
* [Repository](https://github.com/neko-para/maa-support-extension)
- [Extension Store](https://marketplace.visualstudio.com/items?itemName=nekosu.maa-support)
- [Repository](https://github.com/neko-para/maa-support-extension)
## Installation
@@ -60,10 +60,10 @@ When enabling the `Maa` compatible mode, the extension will be able to recursive
The extension supports scheduled scanning and diagnosing all tasks.
* Check if contains task defs with same names.
* Check if contains unknown task refs.
* Check if contains unknown image refs.
* Check if contains duplicated task refs in a single task.
- Check if contains task defs with same names.
- Check if contains unknown task refs.
- Check if contains unknown image refs.
- Check if contains duplicated task refs in a single task.
#### Multiple paths resource support
@@ -83,11 +83,11 @@ Searching and launching `Maa: open crop tool` inside VSCode command panel can op
> Use `Ctrl+Shift+P` (`Command+Shift+P` on MacOS) to open command panel
* After selecting and connecting to the controller, use `Screencap` button to obtain screenshots
* Use `Upload` button to manually upload images.
* Hold `Ctrl` key and select cropping area
* Use wheels to zoom
* After finishing cropping, use `Download` button to save the cropping result to the folder of the topest layer of the activated resource
- After selecting and connecting to the controller, use `Screencap` button to obtain screenshots
- Use `Upload` button to manually upload images.
- Hold `Ctrl` key and select cropping area
- Use wheels to zoom
- After finishing cropping, use `Download` button to save the cropping result to the folder of the topest layer of the activated resource
### Bottom status bar

View File

@@ -6,4 +6,4 @@ dir:
order: 1
---
<Catalog base='/en-us/manual/' />
<Redirect to="newbie" />

View File

@@ -63,7 +63,6 @@ For other emulators, refer to [Zhao Qingqing's blog](https://www.cnblogs.com/zha
::: details Alternative methods
- Method 1: Check emulator ports using ADB commands
1. Launch **one** emulator and ensure no other Android devices are connected to your computer.
2. Open a terminal in the folder containing the ADB executable.
3. Run the following command:
@@ -86,7 +85,6 @@ For other emulators, refer to [Zhao Qingqing's blog](https://www.cnblogs.com/zha
Use `127.0.0.1:<port>` or `emulator-<four digits>` as your connection address.
- Method 2: Find established ADB connections
1. Follow Method 1.
2. Press `Windows key+S` to open search, type `Resource Monitor` and open it.
3. Go to the `Network` tab and find the emulator process name in the `Listening Ports` name column, such as `HD-Player.exe`.
@@ -131,7 +129,6 @@ MAA now attempts to read the `bluestacks.conf` storage location from the registr
:::
1. Find the `bluestacks.conf` file in the BlueStacks data directory
- International version default: `C:\ProgramData\BlueStacks_nxt\bluestacks.conf`
- Chinese version default: `C:\ProgramData\BlueStacks_nxt_cn\bluestacks.conf`

View File

@@ -6,4 +6,4 @@ dir:
order: 5
---
<Catalog base='/en-us/manual/device/' />
<Redirect to="windows" />

View File

@@ -17,6 +17,7 @@ This method involves ADB command-line usage, has lower stability, and still requ
3. Since MAA only supports `16:9` aspect ratios, devices with non-`16:9` or `9:16` screen ratios (including most modern devices) need to have their resolution forcibly changed. If your device's native screen ratio is `16:9` or `9:16`, you can skip the `Change Resolution` section.
4. Switch your device's navigation method to something other than `Full Screen Gestures`, such as `Classic Navigation Keys`, to avoid accidental operations.
5. Please set the `Notched Screen UI Adaptation` option in the game settings to 0 to avoid task errors.
:::
::: tip
@@ -36,7 +37,6 @@ Typical `16:9` resolutions include `3840x2160` (4K), `2560x1440` (2K), `1920x108
```
- When executed successfully, it will show connected USB debugging devices.
- Example of a successful connection:
```bash
@@ -118,7 +118,6 @@ Strongly recommended to restore the default resolution **before** restarting you
```
2. Rename the first file to `startup.bat` and the second to `finish.bat`.
- If no confirmation dialog appears when changing the extension and the file icon doesn't change, search for "How to show file extensions in Windows."
3. In MAA's `Settings` - `Connection Settings`, set `Start Script` to `startup.bat` and `End Script` to `finish.bat`.
@@ -149,7 +148,6 @@ Wired connections don't need IP addresses or ports - just the device serial numb
```
2. Find your device's IP address:
- Go to your phone's `Settings` - `Wi-Fi`, tap the connected network to view the IP address.
- The location varies by manufacturer - search for instructions if needed.
@@ -165,7 +163,6 @@ Wired connections don't need IP addresses or ports - just the device serial numb
1. On your phone, go to Developer Options, tap `Wireless Debugging` and enable it. Tap `Pair device with pairing code` and keep the popup open until pairing completes.
2. Complete the pairing:
1. In the command prompt, type `adb pair <IP address and port shown in the device popup>` and press Enter.
2. Enter the six-digit pairing code from the device popup and press Enter.
3. When you see `Successfully paired to <IP:port>`, the device popup will close automatically, and your computer's name will appear in the paired devices list.

View File

@@ -59,7 +59,6 @@ Place the `MaaDesktopIntegration.so` generated by MAA Wine Bridge in the same di
#### 1. Installing MAA Dynamic Library
1. Download and extract the Linux dynamic library from the [MAA website](https://maa.plus/), or install from a software repository:
- AUR: [maa-assistant-arknights](https://aur.archlinux.org/packages/maa-assistant-arknights), follow the post-installation instructions
- Nixpkgs: [maa-assistant-arknights](https://github.com/NixOS/nixpkgs/blob/nixos-unstable/pkgs/by-name/ma/maa-assistant-arknights/package.nix)
@@ -75,7 +74,6 @@ You can refer to the [Linux Compilation Tutorial](../../develop/linux-tutorial.m
1. Find the line [`if asst.connect('adb.exe', '127.0.0.1:5554'):`](https://github.com/MaaAssistantArknights/MaaAssistantArknights/blob/b4fc3528decd6777441a8aca684c22d35d2b2574/src/Python/sample.py#L62)
2. ADB Tool Configuration
- If using `Android Studio`'s `AVD` emulator, it comes with ADB. You can directly specify the ADB path to replace `adb.exe`, typically found in `$HOME/Android/Sdk/platform-tools/`, for example:
```python
@@ -85,7 +83,6 @@ You can refer to the [Linux Compilation Tutorial](../../develop/linux-tutorial.m
- For other emulators, first install ADB: `$ sudo apt install adb`, then either specify the path or simply use `adb` if it's in your `PATH` environment variable.
3. Getting the Emulator's ADB Address
- Use the ADB tool directly: `$ adb_path devices`, for example:
```shell

View File

@@ -22,6 +22,7 @@ Or manually download and install these <u>**two**</u> runtime libraries to solve
- [Visual C++ Redistributable](https://aka.ms/vs/17/release/vc_redist.x64.exe)
- [.NET Desktop Runtime 8](https://aka.ms/dotnet/8.0/windowsdesktop-runtime-win-x64.exe)
:::
## Software won't run/crashes/shows errors
@@ -46,7 +47,7 @@ We cannot provide repair solutions other than reinstalling your system. Please a
#### Windows N/KN
For Windows N/KN (European/Korean versions), you also need to install the [Media Feature Pack](https://support.microsoft.com/zh-cn/topic/c1c6fffa-d052-8338-7a79-a4bb980a700a).
For Windows N/KN (European/Korean versions), you also need to install the [Media Feature Pack](https://support.microsoft.com/en-us/topic/c1c6fffa-d052-8338-7a79-a4bb980a700a).
#### Windows 7
@@ -54,7 +55,7 @@ For Windows N/KN (European/Korean versions), you also need to install the [Media
For Windows 7, before installing the two runtime libraries mentioned above, check if these patches are installed:
1. [Windows 7 Service Pack 1](https://support.microsoft.com/zh-cn/windows/b3da2c0f-cdb6-0572-8596-bab972897f61)
1. [Windows 7 Service Pack 1](https://support.microsoft.com/en-us/windows/b3da2c0f-cdb6-0572-8596-bab972897f61)
2. SHA-2 code signing patches:
- KB4474419: [Download link 1](https://catalog.s.download.windowsupdate.com/c/msdownload/update/software/secu/2019/09/windows6.1-kb4474419-v3-x64_b5614c6cea5cb4e198717789633dca16308ef79c.msu), [Download link 2](http://download.windowsupdate.com/c/msdownload/update/software/secu/2019/09/windows6.1-kb4474419-v3-x64_b5614c6cea5cb4e198717789633dca16308ef79c.msu)
- KB4490628: [Download link 1](https://catalog.s.download.windowsupdate.com/c/msdownload/update/software/secu/2019/03/windows6.1-kb4490628-x64_d3de52d6987f7c8bdc2c015dca69eac96047c76e.msu), [Download link 2](http://download.windowsupdate.com/c/msdownload/update/software/secu/2019/03/windows6.1-kb4490628-x64_d3de52d6987f7c8bdc2c015dca69eac96047c76e.msu)

View File

@@ -6,4 +6,4 @@ dir:
order: 4
---
<Catalog base='/en-us/manual/introduction/' />
<Redirect to="startup" />

View File

@@ -8,7 +8,6 @@ icon: hugeicons:brain-02
## General Settings
- The `Use Sanity Potion` + `Use Originium` and `Perform Battles`+ `Material` options work as OR conditions - the task will stop when any of these conditions is met.
- `Use Sanity Potion` specifies how many times to replenish sanity (may use multiple potions at once).
- `Use Originium` specifies how many Originium to use (one at a time). Originium won't be used if sanity potions are available.
- `Perform Battles` specifies the number of battles to complete (e.g., "stop after 15 runs").
@@ -19,19 +18,19 @@ icon: hugeicons:brain-02
::: details Examples
| Use Sanity Potion | Use Originium | Perform Battles | Material | Result |
| :---------------: | :-----------: | :-------------: | :------: | ------ |
| | | | | Uses current sanity and stops. |
| 2 | | | | Uses current sanity, then uses sanity potions up to 2 times, then stops. |
| _999_ | 2 | | | Uses current sanity, then all sanity potions, then Originium up to 2 times, then stops. |
| | | 2 | | Runs the selected stage 2 times, then stops. |
| | | | 2 | Farms until 2 of the specified material are obtained, then stops. |
| 2 | | 4 | | Runs the selected stage up to 4 times, using up to 2 sanity potions if needed, then stops. |
| 2 | | | 4 | Farms until 4 of the specified material are obtained, using up to 2 sanity potions if needed, then stops. |
| 2 | | 4 | 8 | Runs the selected stage up to 4 times, using up to 2 sanity potions if needed. Stops early if 8 of the specified material are obtained before reaching 4 runs. |
| _999_ | 4 | 8 | 16 | Runs the selected stage up to 8 times, using all sanity potions and up to 4 Originium if needed. Stops early if 16 of the specified material are obtained before reaching 8 runs. |
| | 2 | | | Uses current sanity, then stops if any sanity potions are available. If no potions, uses up to 2 Originium. _Not MAA GUI behavior_ |
| 2 | 4 | | | Uses current sanity, then up to 2 sanity potions. If potions remain, stops; if no potions remain after using ≤2 potions, uses up to 4 Originium. _Not MAA GUI behavior_ |
| Use Sanity Potion | Use Originium | Perform Battles | Material | Result |
| :---------------: | :-----------: | :-------------: | :------: | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| | | | | Uses current sanity and stops. |
| 2 | | | | Uses current sanity, then uses sanity potions up to 2 times, then stops. |
| _999_ | 2 | | | Uses current sanity, then all sanity potions, then Originium up to 2 times, then stops. |
| | | 2 | | Runs the selected stage 2 times, then stops. |
| | | | 2 | Farms until 2 of the specified material are obtained, then stops. |
| 2 | | 4 | | Runs the selected stage up to 4 times, using up to 2 sanity potions if needed, then stops. |
| 2 | | | 4 | Farms until 4 of the specified material are obtained, using up to 2 sanity potions if needed, then stops. |
| 2 | | 4 | 8 | Runs the selected stage up to 4 times, using up to 2 sanity potions if needed. Stops early if 8 of the specified material are obtained before reaching 4 runs. |
| _999_ | 4 | 8 | 16 | Runs the selected stage up to 8 times, using all sanity potions and up to 4 Originium if needed. Stops early if 16 of the specified material are obtained before reaching 8 runs. |
| | 2 | | | Uses current sanity, then stops if any sanity potions are available. If no potions, uses up to 2 Originium. _Not MAA GUI behavior_ |
| 2 | 4 | | | Uses current sanity, then up to 2 sanity potions. If potions remain, stops; if no potions remain after using ≤2 potions, uses up to 4 Originium. _Not MAA GUI behavior_ |
:::
@@ -46,7 +45,6 @@ icon: hugeicons:brain-02
- Skill summary, voucher, and carbon stages (level 5 only). Enter exact codes like `CA-5`, `AP-5`, or `SK-5`.
- All chip stages. Enter complete stage codes like `PR-A-1`.
- For Annihilation mode, use these specific values:
- Current annihilation: Annihilation
- Chernobog: Chernobog@Annihilation
- Lungmen Outskirts: LungmenOutskirts@Annihilation

View File

@@ -8,7 +8,11 @@ icon: ph:sword-bold
Welcome to use and share operation files on [prts.plus](https://prts.plus).
::: warning
All features involving automatic combat require a stable game frame rate of at least 60 FPS, including but not limited to Auto Combat and Integrated Strategy.
All features involving Copilot require the following prerequisites, including but not limited to Copilot and Auto I. S.
- At least 60 frames of **stable** framerate
- Touch mode set to Minitouch or MaaTouch
:::
## Using Operations

View File

@@ -8,7 +8,11 @@ icon: ri:game-fill
MAA selects the latest theme by default, which can be changed in `Auto Integrated Strategy` - `Integrated Strategy Theme`.
::: warning
All features involving automatic combat require a stable game frame rate of at least 60 FPS, including but not limited to Auto Combat and Integrated Strategy.
All features involving Copilot require the following prerequisites, including but not limited to Copilot and Auto I. S.
- At least 60 frames of **stable** framerate
- Touch mode set to Minitouch or MaaTouch
:::
- Please pin the corresponding Integrated Strategy theme at the terminal in-game. Although automatic navigation is currently possible, long-term functionality is not guaranteed.
@@ -52,10 +56,10 @@ For details, see the [Integrated Strategy Protocol](../../protocol/integrated-st
- Automatically recognizes operators and their levels, selecting optimal operators and skills.
- Recognizes shop items and prioritizes purchasing more powerful collectibles.
## Exception Handling
## Exception Detection
- Automatically reconnects and continues tasks after disconnections or the 4 AM server reset.
- For battles exceeding 5 minutes, automatically retreats all ground units; after 6 minutes, abandons the battle to avoid time-consuming deadlocks.
- If a task encounters problems, automatically abandons the current exploration and retries.
- If a task encounters problems, it will automatically abandon the current exploration and retry.
- If battle duration exceeds 5 minutes, all ground units will automatically retreat; if it exceeds 6 minutes, the current battle will be automatically abandoned to avoid time-consuming stalemates.
- To automatically reconnect and continue tasks after intermittent disconnections or updates, please also enable the Start Wake-Up Task and set the corresponding time for forced scheduled start.
If the program repeatedly gets stuck at the same point, please submit an Issue with logs
If the program gets stuck at the same location multiple times, please submit an Issue with logs and screenshots.

View File

@@ -11,31 +11,31 @@ Quick start guide!
1. Confirm system version
MAA on Windows only supports Windows 10 and 11. For older Windows versions, please refer to the system issues section in [FAQ](./faq.md#system-issues).
MAA on Windows only supports Windows 10 and 11. For older Windows versions, please refer to the system issues section in [FAQ](./faq.md#system-issues).
Non-Windows users, please refer to [Emulator and Device Support](./device/).
Non-Windows users, please refer to [Emulator and Device Support](./device/).
2. Download the correct version
The [MAA official website](https://maa.plus/) will automatically select the correct architecture for most users reading this article, which should be Windows x64.
The [MAA official website](https://maa.plus/) will automatically select the correct architecture for most users reading this article, which should be Windows x64.
3. Extract correctly
Ensure the extraction is complete, and make sure to extract MAA to a separate folder. Do not extract MAA to paths requiring UAC permissions such as `C:\` or `C:\Program Files\`.
Ensure the extraction is complete, and make sure to extract MAA to a separate folder. Do not extract MAA to paths requiring UAC permissions such as `C:\` or `C:\Program Files\`.
4. Install runtime libraries
MAA requires VCRedist x64 and .NET 8. Please run `DependencySetup_依赖库安装.bat` in the MAA directory to install them.
MAA requires VCRedist x64 and .NET 8. Please run `DependencySetup_依赖库安装.bat` in the MAA directory to install them.
For more information, please refer to the pinned section in [FAQ](./faq.md).
For more information, please refer to the pinned section in [FAQ](./faq.md).
5. Confirm emulator support
Check [Emulator and Device Support](./device/) to verify the compatibility of your emulator.
Check [Emulator and Device Support](./device/) to verify the compatibility of your emulator.
6. Set the correct emulator resolution
Emulator resolution should be landscape `1280x720` or `1920x1080`; for YostarEN players, it must be `1920x1080`.
Emulator resolution should be landscape `1280x720` or `1920x1080`; for YostarEN players, it must be `1920x1080`.
## Initial Configuration

View File

@@ -6,4 +6,4 @@ dir:
order: 3
---
<Catalog base='/en-us/protocol/' />
<Redirect to="integration" />

View File

@@ -202,7 +202,7 @@ Todo
#### Common `subtask` Field Values
- `ProcessTask`
- `ProcessTask`
```json
// Corresponding details field example

View File

@@ -51,12 +51,12 @@ The tools in `tools/RoguelikeRecruitmentTool` and `tools/RoguelikeOperSearch` ca
"team_complete_condition": [ // Conditions for squad completness
...
]
}
}
```
### Operator classification
Split operators in different ***groups*** according to your understanding of the game (Group concept references [Copilot Schema](./copilot-schema.md))
Split operators in different **_groups_** according to your understanding of the game (Group concept references [Copilot Schema](./copilot-schema.md))
::: info
@@ -67,6 +67,7 @@ Split operators in different ***groups*** according to your understanding of the
3. Please do not change the name of an existing group, as this may cause previous versions of the task to be unavailable when MAA is updated!
4. Please try not to add new groups, instead try to implement new operators added to the task into existing groups according to their usage
:::
::: tip
@@ -75,7 +76,7 @@ By default, only E1 Level 55 operators will be recruited
```json
{
"theme": "Phantom",
"theme": "Phantom",
"priority": [ // Groups, in order
{
"name": "棘刺", // Group name ("棘刺" = "Thorns")
@@ -91,7 +92,7 @@ By default, only E1 Level 55 operators will be recruited
}
]
},
"team_complete_condition": [
"team_complete_condition": [
...
]
]
@@ -100,60 +101,60 @@ By default, only E1 Level 55 operators will be recruited
1. Introduction to existing groups
Taking Sami's I.S. as an example: operators are mainly divided into:
Taking Sami's I.S. as an example: operators are mainly divided into:
| Group | Considerations | Class | Operators |
| :--- | :--- | :--- | :--- |
| ***地面阻挡*** (Ground Blocking) | Field presence and clearing enemies | Defenders, Guards | Healing defenders, cornerstones, Blacknight, Mountain, M3, Ling and Scene's summons, Spot, Defender reserve operators |
| ***地面单切/处决者*** (Ground Single-Target/Executors) | Solo elite enemies | Executor specialists | SilverAsh, Yato the Elegy, Kirara R Yato, M3, Red |
| ***高台C*** (Ranged Core) | Sustained and decisive output | Snipers, Casters | Weathered, Logos, Ch'en the Holungday, Chongyue |
| ***高台输出*** (Ranged DPS) | Anti-air and sustained output | Snipers, Casters | Archetto, Exusiai, Kroos, Steward |
| ***速狙*** (Fast Snipers) | Physical damage, standard range | Snipers | Eyjafjalla, Exusiai, Yeye, Kroos |
| ***术师*** (Casters) | Arts damage, standard range | Single-target Casters | Eyjafjalla, Logos, Steward |
| ***辅助*** (Supporters) | Can hit 1 tile behind | Supporters | Suzuran, Lily of the Valley, Yeye, Orchid |
| ***狙击*** (Long-range Snipers) | Longer range high ground | Artilleryman, Spreadshooter | Weathered, Toddifons, Rosa |
| ***奶*** (Healers) | Healing ability | Medics, Supporters | Kal'tsit, Skadi the Corrupting Heart, Hibiscus, Ansel |
| ***单奶*** (Single-target Healers) | Attack range depth >= 4 | Medics | Kal'tsit, Reed the Flame Shadow, Ptilopsis, Perfumer, Hibiscus, Ansel |
| ***群奶*** (AoE Healers) | Attack range depth < 4, can heal behind | Medics, Supporters | Nightingale, Ptilopsis, Skadi the Corrupting Heart |
| ***回费*** (DP Recovery) | Cost recovery | Vanguards | Myrtle, Ines, Fang, Vanilla |
| ***地刺*** (Ground Traps) | No blocking, provides DPS or slowing in front of defenders | Ambushers | Gladiia, Ascalon, Manticore |
| ***地面远程*** (Ground Ranged) | Ground long-range, can output behind shields | Instructors, Lords | Horn, Pallas, Thorns, SilverAsh |
| ***领主*** (Lords) | Ground attack range depth > 4, can target air | Fortress, Lord | Thorns, SilverAsh, Chouyu |
| ***盾法*** (Shield Casters) | Short attack range, some tanking ability | Arts Fighter Casters | Lin, Carnelian |
| ***炮灰*** (Fodder) | Absorb attacks, redeploy | Specialists, summons | M3, Red, Myrtle, reserve operators |
| ***大龙*** (Big Dragon) | Tank in front of blockers, easy to combine | Summons | Ling's dragons, Jessica the Flame Purifier's shield |
| ***补给站*** (Supply Stations) | Accelerate main DPS operator skill rotation | Summons | Support Supply Station, Artificer operator summons |
| ***无人机*** (Drones) | Ignore height restrictions for healing summons | Summons | Skadi's Seaborn, Silence's Medical Drone |
| ***支援陷阱*** (Support Traps) | Deployable ground explosives | Summons | Support Mist Generator, Support Rumble-Rumble |
| ***障碍物*** (Obstacles) | Don't take deployment slots, attract aggro or block | Summons | Cage, obstacles |
| ***其他地面*** (Other Ground) | Ground operators not preferred for priority use | Push/pull, block-1 vanguards, swordmasters | Bagpipe, Croissant |
| ***高台预备/其他高台*** (High Ground Reserve/Other High Ground) | High ground operators not preferred for priority use | AoE casters, chain casters, tacticians | Orchid, reserve operators |
| Group | Considerations | Class | Operators |
| :-------------------------------------------------------------- | :--------------------------------------------------------- | :----------------------------------------- | :-------------------------------------------------------------------------------------------------------------------- |
| **_地面阻挡_** (Ground Blocking) | Field presence and clearing enemies | Defenders, Guards | Healing defenders, cornerstones, Blacknight, Mountain, M3, Ling and Scene's summons, Spot, Defender reserve operators |
| **_地面单切/处决者_** (Ground Single-Target/Executors) | Solo elite enemies | Executor specialists | SilverAsh, Yato the Elegy, Kirara R Yato, M3, Red |
| **_高台C_** (Ranged Core) | Sustained and decisive output | Snipers, Casters | Weathered, Logos, Ch'en the Holungday, Chongyue |
| **_高台输出_** (Ranged DPS) | Anti-air and sustained output | Snipers, Casters | Archetto, Exusiai, Kroos, Steward |
| **_速狙_** (Fast Snipers) | Physical damage, standard range | Snipers | Eyjafjalla, Exusiai, Yeye, Kroos |
| **_术师_** (Casters) | Arts damage, standard range | Single-target Casters | Eyjafjalla, Logos, Steward |
| **_辅助_** (Supporters) | Can hit 1 tile behind | Supporters | Suzuran, Lily of the Valley, Yeye, Orchid |
| **_狙击_** (Long-range Snipers) | Longer range high ground | Artilleryman, Spreadshooter | Weathered, Toddifons, Rosa |
| **_奶_** (Healers) | Healing ability | Medics, Supporters | Kal'tsit, Skadi the Corrupting Heart, Hibiscus, Ansel |
| **_单奶_** (Single-target Healers) | Attack range depth >= 4 | Medics | Kal'tsit, Reed the Flame Shadow, Ptilopsis, Perfumer, Hibiscus, Ansel |
| **_群奶_** (AoE Healers) | Attack range depth < 4, can heal behind | Medics, Supporters | Nightingale, Ptilopsis, Skadi the Corrupting Heart |
| **_回费_** (DP Recovery) | Cost recovery | Vanguards | Myrtle, Ines, Fang, Vanilla |
| **_地刺_** (Ground Traps) | No blocking, provides DPS or slowing in front of defenders | Ambushers | Gladiia, Ascalon, Manticore |
| **_地面远程_** (Ground Ranged) | Ground long-range, can output behind shields | Instructors, Lords | Horn, Pallas, Thorns, SilverAsh |
| **_领主_** (Lords) | Ground attack range depth > 4, can target air | Fortress, Lord | Thorns, SilverAsh, Chouyu |
| **_盾法_** (Shield Casters) | Short attack range, some tanking ability | Arts Fighter Casters | Lin, Carnelian |
| **_炮灰_** (Fodder) | Absorb attacks, redeploy | Specialists, summons | M3, Red, Myrtle, reserve operators |
| **_大龙_** (Big Dragon) | Tank in front of blockers, easy to combine | Summons | Ling's dragons, Jessica the Flame Purifier's shield |
| **_补给站_** (Supply Stations) | Accelerate main DPS operator skill rotation | Summons | Support Supply Station, Artificer operator summons |
| **_无人机_** (Drones) | Ignore height restrictions for healing summons | Summons | Skadi's Seaborn, Silence's Medical Drone |
| **_支援陷阱_** (Support Traps) | Deployable ground explosives | Summons | Support Mist Generator, Support Rumble-Rumble |
| **_障碍物_** (Obstacles) | Don't take deployment slots, attract aggro or block | Summons | Cage, obstacles |
| **_其他地面_** (Other Ground) | Ground operators not preferred for priority use | Push/pull, block-1 vanguards, swordmasters | Bagpipe, Croissant |
| **_高台预备/其他高台_** (High Ground Reserve/Other High Ground) | High ground operators not preferred for priority use | AoE casters, chain casters, tacticians | Orchid, reserve operators |
::: tip
"Ground Blocking" mainly considers an operator's overall defensive capabilities (sometimes killing everything is also a form of defense), including "Ground Ranged" and "Lord" groups.
::: tip
"Ground Blocking" mainly considers an operator's overall defensive capabilities (sometimes killing everything is also a form of defense), including "Ground Ranged" and "Lord" groups.
"Healers" mainly considers overall healing ability, including single-target and AoE healers. Consider attack range coverage when deciding whether to use single-target healers (healing 4 tiles) or AoE healers (healing behind).
"Healers" mainly considers overall healing ability, including single-target and AoE healers. Consider attack range coverage when deciding whether to use single-target healers (healing 4 tiles) or AoE healers (healing behind).
"Ranged DPS" only considers output ability, mainly a mixed ordering of sniper and caster professions. Consider damage type, attack range and other restrictions when using specific groups like fast snipers, casters, supporters, or shield casters.
"Ranged DPS" only considers output ability, mainly a mixed ordering of sniper and caster professions. Consider damage type, attack range and other restrictions when using specific groups like fast snipers, casters, supporters, or shield casters.
For trap-type summons, because there are many of them, don't put them in the support trap group. It works better to let MAA deploy them automatically.
:::
For trap-type summons, because there are many of them, don't put them in the support trap group. It works better to let MAA deploy them automatically.
:::
2. Groups requiring special handling
In addition to those general groups, sometimes we need more custom tweaks for some operators or types such as
In addition to those general groups, sometimes we need more custom tweaks for some operators or types such as
| Group | Operators | Features |
| :--- | :--- | :--- |
| 益达 (Weathered) | 维什戴尔 (Weathered) | High ground DPS, prioritizing deployment can reduce pressure |
| 棘刺 (Thorns) | 棘刺 (Thorns), 号角 (Horn) | Ground ranged output, Phantom I.S. has some maps with very suitable positions |
| 召唤类 (Summoners) | 凯尔希 (Kal'tsit), 令 (Ling), 稀音 (Scene) | Self-contained ground blocking, some maps need priority deployment, summons can be used as blockers or fodder |
| 情报官 (Agents) | 晓歌 (Cantabile), 伊内丝 (Ines) | Can recover DP, provide side output, and can single cut |
| 浊心斯卡蒂 (Skadi Alter) | 浊心斯卡蒂 (Skadi the Corrupting Heart) | Decent healing under low pressure, but special range, some maps have suitable positions |
| 焰苇 (Reed Alter) | 焰影苇草 (Reed the Flame Shadow) | Commonly used opening operator in Sami I.S., combines healing and output, some maps have optimal positions |
| 玛恩纳 (SilverAsh) | 玛恩纳 (Closure), 银灰 (SilverAsh) | Ground large-area decisive output, can be deployed against bosses |
| 史尔特尔 (Surtr) | 史尔特尔 (Surtr) | Since Surtr always carries S3 at E2, field presence ability is almost zero, deployment priority is extremely low |
| 骰子 (Dice) | 骰子 (Dice) | In Mizuki I.S. the dice needs to be operated separately |
| Group | Operators | Features |
| :----------------------- | :----------------------------------------- | :--------------------------------------------------------------------------------------------------------------- |
| 益达 (Weathered) | 维什戴尔 (Weathered) | High ground DPS, prioritizing deployment can reduce pressure |
| 棘刺 (Thorns) | 棘刺 (Thorns), 号角 (Horn) | Ground ranged output, Phantom I.S. has some maps with very suitable positions |
| 召唤类 (Summoners) | 凯尔希 (Kal'tsit), 令 (Ling), 稀音 (Scene) | Self-contained ground blocking, some maps need priority deployment, summons can be used as blockers or fodder |
| 情报官 (Agents) | 晓歌 (Cantabile), 伊内丝 (Ines) | Can recover DP, provide side output, and can single cut |
| 浊心斯卡蒂 (Skadi Alter) | 浊心斯卡蒂 (Skadi the Corrupting Heart) | Decent healing under low pressure, but special range, some maps have suitable positions |
| 焰苇 (Reed Alter) | 焰影苇草 (Reed the Flame Shadow) | Commonly used opening operator in Sami I.S., combines healing and output, some maps have optimal positions |
| 玛恩纳 (SilverAsh) | 玛恩纳 (Closure), 银灰 (SilverAsh) | Ground large-area decisive output, can be deployed against bosses |
| 史尔特尔 (Surtr) | 史尔特尔 (Surtr) | Since Surtr always carries S3 at E2, field presence ability is almost zero, deployment priority is extremely low |
| 骰子 (Dice) | 骰子 (Dice) | In Mizuki I.S. the dice needs to be operated separately |
::: info
Currently fixed to group unidentified ground crews behind the penultimate formation (other ground), and unidentified high-platform crews behind the penultimate formation (other high-platform)
@@ -206,11 +207,11 @@ For beginner accounts: If 10 recruitments don't satisfy half the team's key oper
"groups": [
"奶" // ("奶" = "Healers") (This indicates a need for 1 healer)
],
"threshold": 1
"threshold": 1
}
...
]
}
}
```
::: caution
@@ -246,7 +247,7 @@ For example: Operator `焰影苇草` (Reed the Flame Shadow) may appear in both
"skill_usage": 2, // Skill usage mode, refer to Combat Operation Protocol, difference is default is 1 if empty
// (0 is don't use automatically, 1 is use when ready, 2 is use x times (x is set by "skill_times" field), 3 is not supported for now)
"skill_times": 2, // Skill usage times, default is 1, effective when "skill_usage" field is 2
"alternate_skill": 2, // Alternative skills used when there is no designated skill, usually 6-star operators who have not
"alternate_skill": 2, // Alternative skills used when there is no designated skill, usually 6-star operators who have not
// E2'd and use 3 skills after promotion
// (in this case, use skill 2 when skill 3 is not available)
"alternate_skill_usage": 1, // Skill use mode for alternative skills (this field has not yet been implemented)
@@ -262,7 +263,7 @@ For example: Operator `焰影苇草` (Reed the Flame Shadow) may appear in both
// If the lineup completeness test is not passed, only key and 0 hope are recruited, saving hope.
"is_start": true, // If true, the operator is a starter. Default to false if empty. If there is no start player in the team,
// only start players and 0 hope players will be recruited, and user-filled players will be recruited.
"auto_retreat": 0, // Auto-retreat after a few full-seconds of deployment, takes effect when greater than 0, mainly used for specialists and vanguards,
"auto_retreat": 0, // Auto-retreat after a few full-seconds of deployment, takes effect when greater than 0, mainly used for specialists and vanguards,
// since I.S. usually starts at 2x speed, it is recommended to set it to skill duration divided by 2
"recruit_priority_when_team_full": 850, // No need to set separately, recruitment priority when lineup completeness is met, default is recruitment priority -100
"promote_priority_when_team_full": 850, // No need to set separately, promotion priority when lineup completeness is met, default is E2 priority +300
@@ -299,7 +300,7 @@ For example: Operator `焰影苇草` (Reed the Flame Shadow) may appear in both
5. Add groups and operators as you see fit
When you add a new group, you can copy operators from existing groups. Refer to the ratings already given by the devs, and modify them on that basis.
When you add a new group, you can copy operators from existing groups. Refer to the ratings already given by the devs, and modify them on that basis.
## Integrated Strategy Step 2: Battle Logic
@@ -310,93 +311,91 @@ For example: Operator `焰影苇草` (Reed the Flame Shadow) may appear in both
(Effective when the combat logic file for the level name does not exist)
1. Perform basic combat operations based on the tile grid of the map
- MAA performs basic combat operations based on whether the grid on the map is a blue or red box, whether it's a high platform or ground, and whether it can be deployed or not.
- MAA performs basic combat operations based on whether the grid on the map is a blue or red box, whether it's a high platform or ground, and whether it can be deployed or not.
- MAA decides which job to use based on the name or number of the map only, and does not judge the map's **Standard**, **Emergency**, **Road Network**, **Foldartal Use**, etc.
- MAA decides which job to use based on the name or number of the map only, and does not judge the map's **Standard**, **Emergency**, **Road Network**, **Foldartal Use**, etc.
- MAA does not judge **in combat the situation of undefined squares on the map**, e.g. the position of the altar in the `Taming Hut`, the `follower effect` of monsters coming out of the left side or the right side.
- MAA does not judge **in combat the situation of undefined squares on the map**, e.g. the position of the altar in the `Taming Hut`, the `follower effect` of monsters coming out of the left side or the right side.
So in the future, you need to try to design a set of combat logic that can cope with **all the different scenarios of a map name** (the above-mentioned scenarios), and be careful of being hung up on the issue that this map operates in Emergency Mode.
2. MAA's Basic Battle Strategy -- Blocking the Blue Entry Point
1. Ground Crews are preferably deployed on (or around) the grid of the Blue Box (why the grid, scroll down), orientated towards the Red box (auto-calculated), and are not deployed on the Red box
1. Ground Crews are preferably deployed on (or around) the grid of the Blue Box (why the grid, scroll down), orientated towards the Red box (auto-calculated), and are not deployed on the Red box
2. Prioritise the ground units before healers and ranged operators, in a circle from the blue box to the perimeter
2. Prioritise the ground units before healers and ranged operators, in a circle from the blue box to the perimeter
3. It will keep deploying things that can be deployed according to the logic above (operators, summons, support items, etc.)
3. It will keep deploying things that can be deployed according to the logic above (operators, summons, support items, etc.)
### Optimise basic combat strategies
1. Blue box Alternative
It's obviously not smart to just pile up your operators in front of the blue box, some levels have tiles where you can't get through, and the defence is very efficient here
It's obviously not smart to just pile up your operators in front of the blue box, some levels have tiles where you can't get through, and the defence is very efficient here
Or if there are levels with multiple blue boxes, and the MAA doesn't know which blue box corresponds to which red box, they may deploy randomly
Or if there are levels with multiple blue boxes, and the MAA doesn't know which blue box corresponds to which red box, they may deploy randomly
At this point, you'll need to open the [map wiki](https://map.ark-nights.com/areas?coord_override=maa) while imagining the battle in your head
At this point, you'll need to open the [map wiki](https://map.ark-nights.com/areas?coord_override=maa) while imagining the battle in your head
First switch the `Coordinate Display` to `MAA` in `Settings`
First switch the `Coordinate Display` to `MAA` in `Settings`
Then, based on your experience, find the coordinates and orientation of the points that need to be prioritised for defence, and write them into the `replacement_home` of the json.
Then, based on your experience, find the coordinates and orientation of the points that need to be prioritised for defence, and write them into the `replacement_home` of the json.
```json
{
"stage_name": "蓄水池", // Level name ("蓄水池" = "Cistern")
"replacement_home": [ // Entry points (blue boxes replacement points),
// at least 1 to be complete
{
"location": [ // Grid coordinates, obtained from the map wiki
6,
4
],
"direction_Doc1": "Preferred direction, it doesn't mean it's definitely in that direction (the algorithm makes its own judgement)",
"direction_Doc2": "Default is none, i.e. there is no recommended direction, it is entirely up to the algorithm to decide",
"direction_Doc3": "none / left / right / up / down / 无 / 上 / 下 / 左 / 右",
"direction": "left" // (This indicates priority deployment of operators
// to the grid at coordinates 6,4 to the left.)
}
],
...
```
```json
{
"stage_name": "蓄水池", // Level name ("蓄水池" = "Cistern")
"replacement_home": [ // Entry points (blue boxes replacement points),
// at least 1 to be complete
{
"location": [ // Grid coordinates, obtained from the map wiki
6,
4
],
"direction_Doc1": "Preferred direction, it doesn't mean it's definitely in that direction (the algorithm makes its own judgement)",
"direction_Doc2": "Default is none, i.e. there is no recommended direction, it is entirely up to the algorithm to decide",
"direction_Doc3": "none / left / right / up / down / 无 / 上 / 下 / 左 / 右",
"direction": "left" // (This indicates priority deployment of operators
// to the grid at coordinates 6,4 to the left.)
}
],
...
```
::: tip
The blue box alternative will take effect when all steps in `deploy_plan` are completed but there are still operators to deploy in the waiting area, following the same logic as the general combat strategy
:::
::: tip
The blue box alternative will take effect when all steps in `deploy_plan` are completed but there are still operators to deploy in the waiting area, following the same logic as the general combat strategy
:::
2. Deployment tile blacklist
There are points of priority for defence and points of priority for not deploying operators, such as where the fireball passes through, under the boss's feet, and some locations that are not good for output.
There are points of priority for defence and points of priority for not deploying operators, such as where the fireball passes through, under the boss's feet, and some locations that are not good for output.
At this point, we introduce `blacklist_location` to blacklist the tiles that we don't want MAA to deploy operators on.
::: info
The tiles added here will not be used, even if they are included in the deployment strategy later on.
:::
At this point, we introduce `blacklist_location` to blacklist the tiles that we don't want MAA to deploy operators on.
::: info
The tiles added here will not be used, even if they are included in the deployment strategy later on.
:::
```json
...
"blacklist_location_Doc": "This is an example of usage, not that the map 'Cistern' needs ban.",
"blacklist_location": [ // Locations where the deployment of the operators is prohibited
[
0,
0
],
[
1,
1
]
],
```
```json
...
"blacklist_location_Doc": "This is an example of usage, not that the map 'Cistern' needs ban.",
"blacklist_location": [ // Locations where the deployment of the operators is prohibited
[
0,
0
],
[
1,
1
]
],
```
3. Alternative map strategies
For example, if there is a monster in the blue box in Mizuki I.S. should we use the dice to ease the pressure of stacking monsters?
For example, if there is a monster in the blue box in Mizuki I.S. should we use the dice to ease the pressure of stacking monsters?
```json
"not_use_dice_Doc": "When the Blue box operator is retreated does MAA need to use the dice. Defaults to false if empty",
"not_use_dice": false,
```
```json
"not_use_dice_Doc": "When the Blue box operator is retreated does MAA need to use the dice. Defaults to false if empty",
"not_use_dice": false,
```
### Or is it an Emergency Operation? It's time to show your true white skills - customised combat strategies
@@ -408,69 +407,68 @@ There is no need to set up too many customised plans when there is a problem. It
1. Deployment of operators using groups
```json
"deploy_plan": [ // Deployment logic: order from top-to-bottom, left-to-right
// Tries to deploy the first operator it finds, or skips it if it doesn't.
{
"groups": ["百嘉", "基石", "地面C", "号角", "挡人先锋"], // Looks for operators from these groups
// ("百嘉" = "Gavial Alter", "基石" = "Cornerstone", "地面C" = "Ground C", "号角" = "Horn", "挡人先锋" = "Blocking Vanguard")
"location": [ 6, 4 ], // Deploys the first agent it finds to coordinates 6,4 and faces left.
"direction": "left", // If it doesn't find it, proceed to the next deployment operation.
},
{
"groups": [ "召唤" ], // ("召唤" = "Summoner")
"location": [ 6, 3 ],
"direction": "left"
},
{
"groups": [ "单奶", "群奶" ], // ("单奶" = "Single-target Healer", "群奶" = "AoE Healer")
"location": [ 6, 2 ],
"direction": "down"
}
]
```
```json
"deploy_plan": [ // Deployment logic: order from top-to-bottom, left-to-right
// Tries to deploy the first operator it finds, or skips it if it doesn't.
{
"groups": ["百嘉", "基石", "地面C", "号角", "挡人先锋"], // Looks for operators from these groups
// ("百嘉" = "Gavial Alter", "基石" = "Cornerstone", "地面C" = "Ground C", "号角" = "Horn", "挡人先锋" = "Blocking Vanguard")
"location": [ 6, 4 ], // Deploys the first agent it finds to coordinates 6,4 and faces left.
"direction": "left", // If it doesn't find it, proceed to the next deployment operation.
},
{
"groups": [ "召唤" ], // ("召唤" = "Summoner")
"location": [ 6, 3 ],
"direction": "left"
},
{
"groups": [ "单奶", "群奶" ], // ("单奶" = "Single-target Healer", "群奶" = "AoE Healer")
"location": [ 6, 2 ],
"direction": "down"
}
]
```
::: info
MAA flattens all deployment commands and then executes the highest-priority deployment operations
Example: deploys [ "百嘉" (Gavial), "基石" (Cornerstone), "地面C" (Ground C)] on [6,4], deploys [ "基石" (Cornerstone), "地面C" (Ground C)] on [6,3], then MAA will flatten the deployment commands to [ "百嘉" (Gavial), "基石" (Cornerstone), "地面C" (Ground C), "基石" (Cornerstone), "地面C" (Ground C)]
If a "百嘉" (Gavial) operator on [6,4] is retreated during battle, the "基石" (Cornerstone) operator in hand, if available, will be deployed on [6,4], instead of [6,3]
::: info
MAA flattens all deployment commands and then executes the highest-priority deployment operations
Example: deploys [ "百嘉" (Gavial), "基石" (Cornerstone), "地面C" (Ground C)] on [6,4], deploys [ "基石" (Cornerstone), "地面C" (Ground C)] on [6,3], then MAA will flatten the deployment commands to [ "百嘉" (Gavial), "基石" (Cornerstone), "地面C" (Ground C), "基石" (Cornerstone), "地面C" (Ground C)]
If a "百嘉" (Gavial) operator on [6,4] is retreated during battle, the "基石" (Cornerstone) operator in hand, if available, will be deployed on [6,4], instead of [6,3]
This means that from a macro perspective, after each deployment action is completed, it will start checking for executable strategies from the beginning (the current step's position has no already placed operators, and there are operators in the deployment area belonging to this step's operator group)
:::
This means that from a macro perspective, after each deployment action is completed, it will start checking for executable strategies from the beginning (the current step's position has no already placed operators, and there are operators in the deployment area belonging to this step's operator group)
:::
::: tip
Some commonly used operator group usages:
::: tip
Some commonly used operator group usages:
1. In many operations, the main defensive point combination is [ "地面阻挡" (Ground Blocking), "处决者" (Executor), "其他地面" (Other Ground)], which means when the main tanking operator dies, it will try to use an executor to delay the CD; when there's too much survival pressure on this point, consider using [ "重装" (Heavy Defender), "地面阻挡" (Ground Blocking), "处决者" (Executor), "炮灰" (Fodder), "其他地面" (Other Ground)]; for positions behind defenders, prioritize [ "地面远程" (Ground Ranged), "地面阻挡" (Ground Blocking), "处决者" (Executor), "其他地面" (Other Ground)]; to purely attract aggro or sacrifice, use [ "炮灰" (Fodder), "障碍物" (Obstacles), "其他地面" (Other Ground)]
1. In many operations, the main defensive point combination is [ "地面阻挡" (Ground Blocking), "处决者" (Executor), "其他地面" (Other Ground)], which means when the main tanking operator dies, it will try to use an executor to delay the CD; when there's too much survival pressure on this point, consider using [ "重装" (Heavy Defender), "地面阻挡" (Ground Blocking), "处决者" (Executor), "炮灰" (Fodder), "其他地面" (Other Ground)]; for positions behind defenders, prioritize [ "地面远程" (Ground Ranged), "地面阻挡" (Ground Blocking), "处决者" (Executor), "其他地面" (Other Ground)]; to purely attract aggro or sacrifice, use [ "炮灰" (Fodder), "障碍物" (Obstacles), "其他地面" (Other Ground)]
2. High ground position combinations commonly use [ "高台输出" (Ranged DPS), "其他高台" (Other High Ground)], if you want any high ground to be placed you can use [ "高台输出" (Ranged DPS), "狙击" (Sniper), "辅助" (Supporter), "盾法" (Shield Caster), "其他高台" (Other High Ground)]
2. High ground position combinations commonly use [ "高台输出" (Ranged DPS), "其他高台" (Other High Ground)], if you want any high ground to be placed you can use [ "高台输出" (Ranged DPS), "狙击" (Sniper), "辅助" (Supporter), "盾法" (Shield Caster), "其他高台" (Other High Ground)]
3. Some ground positions are suitable for both SilverAsh and ground trap operators [ "玛恩纳" (SilverAsh), "地刺" (Ground Traps)]
:::
3. Some ground positions are suitable for both SilverAsh and ground trap operators [ "玛恩纳" (SilverAsh), "地刺" (Ground Traps)]
:::
2. Deployment of operators at a point in time
::: tip
Suitable for certain single-cutting operators or usage scenarios that require cannon fodder
:::
::: tip
Suitable for certain single-cutting operators or usage scenarios that require cannon fodder
:::
```json
"deploy_plan": [
{
"groups": [ "异德", "刺客", "挡人先锋", "其他地面" ],
// ("异德" = "Strange Virtue", "刺客" = "Assassin", "挡人先锋" = "Blocking Vanguard", "其他地面" = "Other Ground")
"location": [ 5, 3 ],
"direction": "left",
"condition": [ 0, 3 ] // This operation is only performed when the number of kills is 0 - 3
},
{
"groups": [ "异德", "刺客", "挡人先锋", "其他地面" ],
"location": [ 5, 3 ],
"direction": "left",
"condition": [ 6, 10 ]
},
...
]
```
```json
"deploy_plan": [
{
"groups": [ "异德", "刺客", "挡人先锋", "其他地面" ],
// ("异德" = "Strange Virtue", "刺客" = "Assassin", "挡人先锋" = "Blocking Vanguard", "其他地面" = "Other Ground")
"location": [ 5, 3 ],
"direction": "left",
"condition": [ 0, 3 ] // This operation is only performed when the number of kills is 0 - 3
},
{
"groups": [ "异德", "刺客", "挡人先锋", "其他地面" ],
"location": [ 5, 3 ],
"direction": "left",
"condition": [ 6, 10 ]
},
...
]
```
3. Retrieval of the operators at some point
::: tip
@@ -479,64 +477,64 @@ There is no need to set up too many customised plans when there is a problem. It
Deployment and retreat commands for the same position should have non-overlapping condition numbers, otherwise it will instantly retreat after deploying
:::
```json
"retreat_plan": [ // Retrieval targets at specific points in time
{
"location": [ 4, 1 ],
"condition": [ 7, 8 ] // At 7 - 8 kills, remove operator on [4,1], skip if there are none.
}
]
```
```json
"retreat_plan": [ // Retrieval targets at specific points in time
{
"location": [ 4, 1 ],
"condition": [ 7, 8 ] // At 7 - 8 kills, remove operator on [4,1], skip if there are none.
}
]
```
4. Disable a skill at a certain point in time (to do)
5. Additional fields (not recommended)
```json
"role_order_Doc": "Operator type deployment order, the unspecified parts will be filled in with the order of Guard, Vanguard, Medic, Defender, Sniper, Caster, Supporter, Specialist, Summoner, and so on.",
"role_order": [ // Not recommended, please configure the deploy_plan field.
"warrior",
"pioneer",
"medic",
"tank",
"sniper",
"caster",
"support",
"special",
"drone"
],
"force_air_defense_when_deploy_blocking_num_Doc": "When there are 10000 blocking units on the field, it will start to force deploying a total of 1 pair of empty units (fill in or not will not affect the normal deployment logic), during this period, it does not prohibit the deployment of medical units (no default is false).",
"force_air_defense_when_deploy_blocking_num": { // Not recommended, please configure the deploy_plan field.
"melee_num": 10000,
"air_defense_num": 1,
"ban_medic": false
},
"force_deploy_direction_Doc": "These points force deployment directions for certain occupation",
"force_deploy_direction": [ // Not recommended, please configure the deploy_plan field.
{
"location": [
1,
1
],
"role_Doc": "Application of mandatory orientation to the occupation entered",
"role": [
"warrior",
"pioneer"
],
"direction": "up"
},
{
"location": [
3,
1
],
"role": [
"sniper"
],
"direction": "left"
}
],
```
```json
"role_order_Doc": "Operator type deployment order, the unspecified parts will be filled in with the order of Guard, Vanguard, Medic, Defender, Sniper, Caster, Supporter, Specialist, Summoner, and so on.",
"role_order": [ // Not recommended, please configure the deploy_plan field.
"warrior",
"pioneer",
"medic",
"tank",
"sniper",
"caster",
"support",
"special",
"drone"
],
"force_air_defense_when_deploy_blocking_num_Doc": "When there are 10000 blocking units on the field, it will start to force deploying a total of 1 pair of empty units (fill in or not will not affect the normal deployment logic), during this period, it does not prohibit the deployment of medical units (no default is false).",
"force_air_defense_when_deploy_blocking_num": { // Not recommended, please configure the deploy_plan field.
"melee_num": 10000,
"air_defense_num": 1,
"ban_medic": false
},
"force_deploy_direction_Doc": "These points force deployment directions for certain occupation",
"force_deploy_direction": [ // Not recommended, please configure the deploy_plan field.
{
"location": [
1,
1
],
"role_Doc": "Application of mandatory orientation to the occupation entered",
"role": [
"warrior",
"pioneer"
],
"direction": "up"
},
{
"location": [
3,
1
],
"role": [
"sniper"
],
"direction": "left"
}
],
```
::: info
When MAA cannot find a customized combat strategy for the current level, it will automatically execute the general combat strategy.
@@ -634,7 +632,7 @@ The Encounter options can be modified to guide MAA towards special endings
// (does not affect the operation, useful for convenient sorting)
"no": 167 // Collectible number (can be found in the wiki, does not affect the operation)
},
...
{
"name": "扩散之手", // ("扩散之手" = "Hand of Diffusion")
@@ -643,7 +641,7 @@ The Encounter options can be modified to guide MAA towards special endings
// you will try to buy the Hand of Diffusion when you encounter it)
],
"effect": "【扩散术师】、【链术师】和【轰击术师】每对一个单位造成伤害就回复2点技力值", // ("[Diffusion Artist], [Chain Artist], and [Blast Artist] regain 2 SP for each unit they deal damage to.")
"no": 136
"no": 136
},
...
@@ -654,7 +652,7 @@ The Encounter options can be modified to guide MAA towards special endings
// you will try to buy a Halberd-Breaker when you encounter it)
],
"effect": "所有【近卫】干员的防御力-40%,但攻击力+40%,攻击速度+30", // ("All [Guard] Operators members have -40% Defence, but +40% Attack Power and +30% Attack Speed.")
"no": 16
"no": 16
},
...
@@ -761,7 +759,7 @@ Here is an example task configuration for farming hidden Collapsal Paradigms:
"squad": "远程战术分队", // ("远程战术分队" = "Ranged Tactics Squad")
"roles": "稳扎稳打", // ("稳扎稳打" = "Steady Approach")
"core_char": "维什戴尔", // ("维什戴尔" = "Weathered")
"expected_collapsal_paradigms": ["目空一些", "睁眼瞎", "图像损坏", "一抹黑"]
"expected_collapsal_paradigms": ["目空一些", "睁眼瞎", "图像损坏", "一抹黑"]
// ("目空一些" = "Blank Somewhat", "睁眼瞎" = "Blind Eye", "图像损坏" = "Image Distortion", "一抹黑" = "Pitch Black")
}
```

View File

@@ -22,22 +22,22 @@ Appends a task.
#### Return Value
- `TaskId`
The task ID if the task is successfully appended, for the following configuration;
0 if the task is not successfully appended.
The task ID if the task is successfully appended, for the following configuration;
0 if the task is not successfully appended.
#### Parameter Description
- `AsstHandle handle`
Instance handle
Instance handle
- `const char* type`
Task type
Task type
- `const char* params`
Task parameters in JSON
Task parameters in JSON
##### List of Task Types
- `StartUp`
Start-up
Start-up
```json5
// Corresponding task parameters
@@ -54,7 +54,7 @@ Appends a task.
```
- `CloseDown`
Close Game Client
Close Game Client
```json5
// Corresponding task parameters
@@ -66,7 +66,7 @@ Appends a task.
```
- `Fight`
Operation
Operation
```json5
// Corresponding task parameters
@@ -105,7 +105,7 @@ Appends a task.
Supports some of the special stages, please refer to [autoLocalization example](https://github.com/MaaAssistantArknights/MaaAssistantArknights/blob/master/tools/AutoLocalization/example/en-us.xaml#L260).
- `Recruit`
Recruitment
Recruitment
```json5
// Corresponding task parameters
@@ -149,7 +149,7 @@ Supports some of the special stages, please refer to [autoLocalization example](
```
- `Infrast`
Infrastructure shifting
Infrastructure shifting
```json5
{
@@ -182,8 +182,8 @@ Supports some of the special stages, please refer to [autoLocalization example](
```
- `Mall`
Collecting Credits and auto-purchasing.
Will buy items in order following `buy_first` list, buy other items from left to right ignoring items in `blacklist`, and buy other items from left to right ignoring the `blacklist` while credit overflows.
Collecting Credits and auto-purchasing.
Will buy items in order following `buy_first` list, buy other items from left to right ignoring items in `blacklist`, and buy other items from left to right ignoring the `blacklist` while credit overflows.
```json5
// Corresponding task parameters
@@ -209,7 +209,7 @@ Supports some of the special stages, please refer to [autoLocalization example](
```
- `Award`
Collecting various rewards
Collecting various rewards
```json5
// Corresponding task parameters
@@ -225,7 +225,7 @@ Supports some of the special stages, please refer to [autoLocalization example](
```
- `Roguelike`
Integrated Strategies
Integrated Strategies
```json5
// Task parameters
@@ -250,7 +250,7 @@ Supports some of the special stages, please refer to [autoLocalization example](
// 7 - Deep Dive rewards farming, same as mode 0 except for specific mode adaptations
"squad": string, // Starting squad name, optional, default is "指挥分队" (Command Squad);
"roles": string, // Starting role group, optional, default is "取长补短" (Complementary Strength);
"core_char": string, // Starting operator name, optional; supports only single operator **in Chinese**, regardless of server;
"core_char": string, // Starting operator name, optional; supports only single operator **in Chinese**, regardless of server;
// leave empty or set to "" to auto-select based on level
"use_support": bool, // Whether the starting operator is a support operator, optional, default is false
"use_nonfriend_support": bool, // Whether non-friend support operators are allowed, optional, default is false; only effective when `use_support` is true
@@ -309,7 +309,7 @@ Supports some of the special stages, please refer to [autoLocalization example](
For specific information about the Collapsal Paradigm farming feature, please refer to [Integrated Strategy Schema](./integrated-strategy-schema.md#sami-integrated-strategy-collapsal-paradigms)
- `Copilot`
Auto combat feature
Auto combat feature
```json5
{
@@ -322,7 +322,7 @@ For specific information about the Collapsal Paradigm farming feature, please re
For more details about auto-combat JSON, please refer to [Combat Operation Protocol](./copilot-schema.md)
- `SSSCopilot`
Auto combat feature for Stationary Security Service
Auto combat feature for Stationary Security Service
```json5
{
@@ -335,7 +335,7 @@ For more details about auto-combat JSON, please refer to [Combat Operation Proto
For more details about Stationary Security Service JSON, please refer to [SSS Schema](./sss-schema.md)
- `Depot`
Depot recognition
Depot recognition
```json5
// Corresponding task parameters
@@ -345,7 +345,7 @@ For more details about Stationary Security Service JSON, please refer to [SSS Sc
```
- `OperBox`
Operator box recognition
Operator box recognition
```json5
// Corresponding task parameters
@@ -355,7 +355,7 @@ For more details about Stationary Security Service JSON, please refer to [SSS Sc
```
- `Reclamation`
Reclamation Algorithm
Reclamation Algorithm
```json5
{
@@ -370,7 +370,7 @@ For more details about Stationary Security Service JSON, please refer to [SSS Sc
"tools_to_craft": [
string, // Automatically crafted items, optional, glow stick by default
...
]
]
// Suggested to fill in the substring
"increment_mode": int, // Click type, optional. 0 by default
// 0 - Rapid Click
@@ -380,7 +380,7 @@ For more details about Stationary Security Service JSON, please refer to [SSS Sc
```
- `Custom`
Custom Task
Custom Task
```json5
{
@@ -394,7 +394,7 @@ For more details about Stationary Security Service JSON, please refer to [SSS Sc
```
- `SingleStep`
Single-step task (currently only supports copilot)
Single-step task (currently only supports copilot)
```json5
{
@@ -412,7 +412,7 @@ For more details about Stationary Security Service JSON, please refer to [SSS Sc
```
- `VideoRecognition`
Video recognition, currently only supports operation (combat) video
Video recognition, currently only supports operation (combat) video
```json5
{
@@ -436,17 +436,17 @@ Set task parameters
#### Return Value
- `bool`
Whether the parameters are successfully set.
Whether the parameters are successfully set.
#### Parameter Description
- `AsstHandle handle`
Instance handle
Instance handle
- `TaskId task`
Task ID, the return value of `AsstAppendTask`
Task ID, the return value of `AsstAppendTask`
- `const char* params`
Task parameter in JSON, same as `AsstAppendTask`
For those fields that do not mention "Editing in run-time is not supported" can be changed during run-time. Otherwise these changes will be ignored when the task is running.
Task parameter in JSON, same as `AsstAppendTask`
For those fields that do not mention "Editing in run-time is not supported" can be changed during run-time. Otherwise these changes will be ignored when the task is running.
### `AsstSetStaticOption`
@@ -463,14 +463,14 @@ Set process-level parameters
#### Return Value
- `bool`
Is the setup successful
Is the setup successful
#### Parameter Description
- `AsstStaticOptionKey key`
key
key
- `const char* value`
value
value
##### List of Key and value
@@ -491,16 +491,16 @@ Set instance-level parameters
#### Return Value
- `bool`
Is the setup successful
Is the setup successful
#### Parameter Description
- `AsstHandle handle`
handle
handle
- `AsstInstanceOptionKey key`
key
key
- `const char* value`
value
value
##### List of Key and value

View File

@@ -88,6 +88,7 @@ The endpoint should be reentrant and repeatedly return tasks to execute, as MAA
- Settings-[SettingsName] task types include Settings-ConnectionAddress, Settings-Stage1
- Settings series tasks still execute sequentially rather than immediately, queuing behind previous tasks
- Multiple immediate execution tasks also execute in issued order, though since these tasks execute quickly, their order generally doesn't matter
:::
## Task Reporting Endpoint

View File

@@ -99,7 +99,7 @@ Please note that JSON files do not support comments. The comments in this docume
"highResolutionSwipeFix": false, // Optional, whether to enable high-resolution swipe fix
// Currently only needed for stage navigation which doesn't use unity swipe method
// Default is false
/* Fields below only valid when algorithm is MatchTemplate */
"template": "xxx.png", // Optional, image file to match, can be string or string list
@@ -165,7 +165,7 @@ Please note that JSON files do not support comments. The comments in this docume
/* Fields below only valid when algorithm is JustReturn and action is Input */
"inputText": "A string text.", // Required, text to input as string
/* Fields below only valid when algorithm is FeatureMatch */
"template": "xxx.png", // Optional, image file to match, can be string or string list
@@ -189,14 +189,14 @@ Please note that JSON files do not support comments. The comments in this docume
Task list type fields (`sub`, `next`, `onErrorNext`, `exceededNext`, `reduceOtherTimes`) support expression calculations.
| Symbol | Meaning | Example |
| :---------: | :---------------------------------------------------------: | :---------------------------------------: |
| `@` | `@`-type Task | `Fight@ReturnTo` |
| `#` (unary) | Virtual task | `#self` |
| `#` (binary)| Virtual task | `StartUpThemes#next` |
| `*` | Repeat tasks | `(ClickCornerAfterPRTS+ClickCorner)*5` |
| `+` | Task list merge (in next-type attributes, only first occurrence of same-name tasks kept) | `A+B` |
| `^` | Task list difference (in first but not second, order preserved) | `(A+A+B+C)^(A+B+D)` (result is `C`) |
| Symbol | Meaning | Example |
| :----------: | :--------------------------------------------------------------------------------------: | :------------------------------------: |
| `@` | `@`-type Task | `Fight@ReturnTo` |
| `#` (unary) | Virtual task | `#self` |
| `#` (binary) | Virtual task | `StartUpThemes#next` |
| `*` | Repeat tasks | `(ClickCornerAfterPRTS+ClickCorner)*5` |
| `+` | Task list merge (in next-type attributes, only first occurrence of same-name tasks kept) | `A+B` |
| `^` | Task list difference (in first but not second, order preserved) | `(A+A+B+C)^(A+B+D)` (result is `C`) |
Operators `@`, `#`, `*`, `+`, `^` have precedence: `#` (unary) > `@` = `#` (binary) > `*` > `+` = `^`.
@@ -204,31 +204,31 @@ Operators `@`, `#`, `*`, `+`, `^` have precedence: `#` (unary) > `@` = `#` (bina
### Template Task
**Template tasks** include derived tasks and `@`-type tasks. The core of the template task can be understood as **modifying the default values of fields** based on the *base task*.
**Template tasks** include derived tasks and `@`-type tasks. The core of the template task can be understood as **modifying the default values of fields** based on the _base task_.
#### Derived Task
Tasks with the `baseTask` field are derived tasks, and the task corresponding to the `baseTask` field is referred to as its *base task* of this derived task. For a derived task,
Tasks with the `baseTask` field are derived tasks, and the task corresponding to the `baseTask` field is referred to as its _base task_ of this derived task. For a derived task,
1. If it is an template matching task, the default value for the `template` field remains `"TaskName.png"`;
2. If the `algorithm` field differs from its *base task*, the derived class parameters are not inherited (only parameters defined in `TaskInfo` are inherited);
3. The default values for all other fields are the corresponding fields of its *base task*.
2. If the `algorithm` field differs from its _base task_, the derived class parameters are not inherited (only parameters defined in `TaskInfo` are inherited);
3. The default values for all other fields are the corresponding fields of its _base task_.
#### Implicit `@`-type Task
If task `"A"` exists and there is not a task directly defined in any task file such as `"B@A"`, it is an implicit `@`-type task, and task `"A"` is called the *base task* of task `"B@A"`. For an implicit `@`-type task,
If task `"A"` exists and there is not a task directly defined in any task file such as `"B@A"`, it is an implicit `@`-type task, and task `"A"` is called the _base task_ of task `"B@A"`. For an implicit `@`-type task,
1. The default values for task list type fields (`sub`, `next`, `onErrorNext`, `exceededNext`, `reduceOtherTimes`) are set to the base task's corresponding fields with the `B@` prefix directly appended (if the task name starts with `#`, the `B` prefix is appended);
2. The default values for all other fields (including the `template` field) are the corresponding fields of its *base task*.
2. The default values for all other fields (including the `template` field) are the corresponding fields of its _base task_.
#### Explicit `@`-type Task
If task `"A"` exists and there is a task directly defined in the task file such as `"B@A"`, it is an explicit `@`-type task, and task `"A"` is called the *base task* of task `"B@A"`. For an explicit `@`-type task,
If task `"A"` exists and there is a task directly defined in the task file such as `"B@A"`, it is an explicit `@`-type task, and task `"A"` is called the _base task_ of task `"B@A"`. For an explicit `@`-type task,
1. The default values for task list type fields (`sub`, `next`, `onErrorNext`, `exceededNext`, `reduceOtherTimes`) are set to the base task's corresponding fields with the `B@` prefix directly appended (if the task name starts with `#`, the `B` prefix is appended);
2. If it is an template matching task, the default value for the `template` field remains `"TaskName.png"`;
3. If the `algorithm` field differs from its *base task*, the derived class parameters are not inherited (only parameters defined in `TaskInfo` are inherited);
4. The default values for all other fields are the corresponding fields of its *base task*.
3. If the `algorithm` field differs from its _base task_, the derived class parameters are not inherited (only parameters defined in `TaskInfo` are inherited);
4. The default values for all other fields are the corresponding fields of its _base task_.
### Virtual Task (`#`-type Task)
@@ -236,18 +236,18 @@ Virtual tasks are tasks of the form `"#{sharp_type}"` or `"B#{sharp_type}"`, whe
Virtual tasks can be divided into **command virtual tasks** (`#none` / `#self` / `#back`) and **field virtual tasks** (`#next`, etc.).
| Virtual Task Type | Meaning | Simple example |
|:---------:|:---:|:--------:|
| none | Empty Task | Skip directly<sup>1</sup><br>`"A": {"next": ["#none", "T1"]}` is interpreted as `"A": {"next": ["T1"]}`<br>`"A#none + T1"` is interpreted as `"T1"` |
| self | Current Task Name | `"A": {"next": "#self"}` in `"#self"` is interpreted as `"A"`<br>`"B": {"next": "A@B@C#self"}` in `"A@B@C#self"` is interpreted as `"B"`.<sup>2</sup> |
| back | # Preceding task name | `"A@B#back"` is interpreted as `"A@B"`<br>`"#back"` will be skipped if it appears directly<sup>3</sup> |
| next, sub, etc. | # The field corresponding to the previous task name | Take `next` for example:<br>`"A#next"` is interpreted as `Task.get("A")->next`<br>`"#next"` will be skipped if it appears directly |
| Virtual Task Type | Meaning | Simple example |
| :---------------: | :-------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------: |
| none | Empty Task | Skip directly<sup>1</sup><br>`"A": {"next": ["#none", "T1"]}` is interpreted as `"A": {"next": ["T1"]}`<br>`"A#none + T1"` is interpreted as `"T1"` |
| self | Current Task Name | `"A": {"next": "#self"}` in `"#self"` is interpreted as `"A"`<br>`"B": {"next": "A@B@C#self"}` in `"A@B@C#self"` is interpreted as `"B"`.<sup>2</sup> |
| back | # Preceding task name | `"A@B#back"` is interpreted as `"A@B"`<br>`"#back"` will be skipped if it appears directly<sup>3</sup> |
| next, sub, etc. | # The field corresponding to the previous task name | Take `next` for example:<br>`"A#next"` is interpreted as `Task.get("A")->next`<br>`"#next"` will be skipped if it appears directly |
*Note<sup>1</sup>: `"#none"` generally used in conjunction with the template task to add prefixes, or used in the `baseTask` field to avoid unnecessary fields in multi-file inheritance.*
_Note<sup>1</sup>: `"#none"` generally used in conjunction with the template task to add prefixes, or used in the `baseTask` field to avoid unnecessary fields in multi-file inheritance._
*Note<sup>2</sup>: `"XXX#self"` has the same meaning as `"#self"`.*
_Note<sup>2</sup>: `"XXX#self"` has the same meaning as `"#self"`._
*Note<sup>3</sup>: When several tasks have `"next": [ "#back" ]`, `"T1@T2@T3"` represents executing `T3`, `T2`, and `T1` in sequence.*
_Note<sup>3</sup>: When several tasks have `"next": [ "#back" ]`, `"T1@T2@T3"` represents executing `T3`, `T2`, and `T1` in sequence._
### Multi-File Task
@@ -260,86 +260,86 @@ If a task defined in a later loaded task file (e.g. `tasks.json` for foreign ser
- Derived task example (field `baseTask`)
Assume the following two tasks are defined:
Assume the following two tasks are defined:
```json
"Return": {
"action": "ClickSelf",
"next": [ "Stop" ]
},
"Return2": {
"baseTask": "Return"
},
```
```json
"Return": {
"action": "ClickSelf",
"next": [ "Stop" ]
},
"Return2": {
"baseTask": "Return"
},
```
The parameters of the `"Return2"` task are directly inherited from the `"Return"` task, and actually include the following parameters:
The parameters of the `"Return2"` task are directly inherited from the `"Return"` task, and actually include the following parameters:
```json
"Return2": {
"algorithm": "MatchTemplate", // Directly inherited
"template": "Return2.png", // "TaskName.png"
"action": "ClickSelf", // Directly inherited
"next": [ "Stop" ] // Directly inherited, without any prefix compared to the Template Task
}
```
```json
"Return2": {
"algorithm": "MatchTemplate", // Directly inherited
"template": "Return2.png", // "TaskName.png"
"action": "ClickSelf", // Directly inherited
"next": [ "Stop" ] // Directly inherited, without any prefix compared to the Template Task
}
```
- `@`-type task example
Assume that a task `"A"` with the following parameters is defined:
Assume that a task `"A"` with the following parameters is defined:
```json
"A": {
"template": "A.png",
...,
"next": [ "N1", "#back" ]
},
```
```json
"A": {
"template": "A.png",
...,
"next": [ "N1", "#back" ]
},
```
If the task `"B@A"` is not directly defined, then the task `"B@A"` actually has the following parameters:
If the task `"B@A"` is not directly defined, then the task `"B@A"` actually has the following parameters:
```json
"B@A": {
"template": "A.png",
...,
"next": [ "B@N1", "B#back" ]
}
```
```json
"B@A": {
"template": "A.png",
...,
"next": [ "B@N1", "B#back" ]
}
```
If the task `"B@A"` is defined as `"B@A": {}`, then the task `"B@A"` actually has the following parameters:
If the task `"B@A"` is defined as `"B@A": {}`, then the task `"B@A"` actually has the following parameters:
```json
"B@A": {
"template": "B@A.png",
...,
"next": [ "B@N1", "B#back" ]
}
```
```json
"B@A": {
"template": "B@A.png",
...,
"next": [ "B@N1", "B#back" ]
}
```
- Virtual task example
```json
{
"A": { "next": ["N1", "N2"] },
"C": { "next": ["B@A#next"] },
```json
{
"A": { "next": ["N1", "N2"] },
"C": { "next": ["B@A#next"] },
"Loading": {
"next": ["#self", "#next", "#back"]
},
"B": {
"next": ["Other", "B@Loading"]
}
}
```
"Loading": {
"next": ["#self", "#next", "#back"]
},
"B": {
"next": ["Other", "B@Loading"]
}
}
```
Results in:
Results in:
```cpp
Task.get("C")->next = { "B@N1", "B@N2" };
```cpp
Task.get("C")->next = { "B@N1", "B@N2" };
Task.get("B@Loading")->next = { "B@Loading", "Other", "B" };
Task.get("Loading")->next = { "Loading" };
Task.get_raw("B@Loading")->next = { "B#self", "B#next", "B#back" };
```
Task.get("B@Loading")->next = { "B@Loading", "Other", "B" };
Task.get("Loading")->next = { "Loading" };
Task.get_raw("B@Loading")->next = { "B#self", "B#next", "B#back" };
```
### Precautions
@@ -347,41 +347,41 @@ If the tasks defined in the task list type field (`next`, etc.) contain low-prio
1. Special cases caused by the order of operations between `@` and double `#`
```json
{
"A": { "next": ["N0"] },
"B": { "next": ["A#next"] },
"C@A": { "next": ["N1"] }
}
```
```json
{
"A": { "next": ["N0"] },
"B": { "next": ["A#next"] },
"C@A": { "next": ["N1"] }
}
```
In the above case, `"C@B" -> next` (i.e., `C@A#next`) is `[ "N1" ]` rather than `[ "C@N0" ]`.
In the above case, `"C@B" -> next` (i.e., `C@A#next`) is `[ "N1" ]` rather than `[ "C@N0" ]`.
2. Special cases caused by the order of operations between `@` and `+`
```json
{
"A": { "next": ["#back + N0"] },
"B@A": {}
}
```
```json
{
"A": { "next": ["#back + N0"] },
"B@A": {}
}
```
In the above case,
In the above case,
```cpp
Task.get("A")->next = { "N0" };
```cpp
Task.get("A")->next = { "N0" };
Task.get_raw("B@A")->next = { "B#back + N0" };
Task.get("B@A")->next = { "B", "N0" }; // Note that it is not [ "B", "B@N0" ]
```
Task.get_raw("B@A")->next = { "B#back + N0" };
Task.get("B@A")->next = { "B", "N0" }; // Note that it is not [ "B", "B@N0" ]
```
In fact, you can use this feature to avoid adding unnecessary prefixes by simply defining
In fact, you can use this feature to avoid adding unnecessary prefixes by simply defining
```json
{
"A": { "next": ["#none + N0"] }
}
```
```json
{
"A": { "next": ["#none + N0"] }
}
```
## Runtime Task Modification

View File

@@ -12,6 +12,7 @@ dir:
![MAA Logo =256x256](/images/maa-logo_512x512.png)
<!-- markdownlint-restore -->
# MAA
![C++](https://img.shields.io/badge/C++-20-%2300599C?logo=cplusplus)
@@ -25,7 +26,7 @@ An Arknights assistant
Based on image recognition technology, complete all daily tasks with one click!
Development actively in progress ✿✿ヽ(°▽°)ノ✿
Development actively in progress ✿✿ヽ(°▽°)ノ✿
:::
@@ -194,9 +195,9 @@ User Exchange QQ Groups: [MAA Usage & Arknights Exchange QQ Group](https://api.m
Discord Server: [Invite Link](https://discord.gg/23DfZ9uA4V)
User Exchange Telegram Group: [Telegram Group](https://t.me/+Mgc2Zngr-hs3ZjU1)
Auto-battle JSON strategy sharing: [prts.plus](https://prts.plus)
Bilibili Live: [MrEO Live](https://live.bilibili.com/2808861) coding streams & [MAA-Official Live](https://live.bilibili.com/27548877) gaming/chat
Bilibili Live: [MrEO Live](https://live.bilibili.com/2808861) coding streams & [MAA-Official Live](https://live.bilibili.com/27548877) gaming/chat
Technical Group (non-Arknights, no casual chat): [Internal Competition Hell! (QQ Group)](https://jq.qq.com/?_wv=1027&k=ypbzXcA2)
Developer Group: [QQ Group](https://jq.qq.com/?_wv=1027&k=JM9oCk3C)
Developer Group: [QQ Group](https://jq.qq.com/?_wv=1027&k=JM9oCk3C)
If you find the software helpful, please give us a Star! ~ (the small star at the top right of the webpage), that's the biggest support

View File

@@ -6,4 +6,4 @@ dir:
order: 2
---
<Catalog base='/ja-jp/develop/' />
<Redirect to="development" />

View File

@@ -17,48 +17,46 @@ icon: iconoir:developer
2. [MAA メインリポジトリ](https://github.com/MaaAssistantArknights/MaaAssistantArknights)を開き、`Fork``Create fork` をクリック
3. 自身のリポジトリの dev ブランチをクローン(サブモジュール含む)
```bash
git clone --recurse-submodules <リポジトリの git リンク> -b dev
```
```bash
git clone --recurse-submodules <リポジトリの git リンク> -b dev
```
::: warning
Visual Studio など `--recurse-submodules` パラメータに対応していない Git GUI を使用する場合、クローン後に以下を実行:
::: warning
Visual Studio など `--recurse-submodules` パラメータに対応していない Git GUI を使用する場合、クローン後に以下を実行:
```bash
git submodule update --init
```
```bash
git submodule update --init
```
:::
:::
4. 事前ビルド済みサードパーティライブラリのダウンロード
**Python環境が必要インストール方法は各自検索**
_tools/maadeps-download.py はプロジェクトルートに配置_
**Python環境が必要インストール方法は各自検索**
_tools/maadeps-download.py はプロジェクトルートに配置_
```cmd
python tools/maadeps-download.py
```
```cmd
python tools/maadeps-download.py
```
5. 開発環境の設定
- `Visual Studio 2022 Community` をインストール時、`C++ によるデスクトップ開発` と `.NET デスクトップ開発` を選択必須
- `Visual Studio 2022 Community` をインストール時、`C++ によるデスクトップ開発` と `.NET デスクトップ開発` を選択必須
6. `MAA.sln` をダブルクリックで開き、Visual Studio にプロジェクトを自動ロード
7. VS の設定
- 上部設定バーで `RelWithDebInfo` `x64` を選択Release ビルド/ARM プラットフォームの場合は不要
- `MaaWpfGui` 右クリック → プロパティ → デバッグ → ネイティブデバッグを有効化C++ Core へのブレークポイント設定可能)
- 上部設定バーで `RelWithDebInfo` `x64` を選択Release ビルド/ARM プラットフォームの場合は不要)
- `MaaWpfGui` 右クリック → プロパティ → デバッグ → ネイティブデバッグを有効化C++ Core へのブレークポイント設定可能
8. これで自由に ~~改造~~ 開発を始められます
9. 一定量の変更ごにコミット(メッセージ記入必須)
Git 未経験者は dev ブランチ直接変更ではなく新規ブランチ作成推奨:
```bash
git branch your_own_branch
git checkout your_own_branch
```
```bash
git branch your_own_branch
git checkout your_own_branch
```
これで dev の更新影響を受けずに開発可能
これで dev の更新影響を受けずに開発可能
10. 開発完了後、変更をリモートリポジトリへプッシュ:
@@ -68,30 +66,29 @@ icon: iconoir:developer
11. [MAA メインリポジトリ](https://github.com/MaaAssistantArknights/MaaAssistantArknights) で Pull Request を提出master ではなく dev ブランチを指定)
12. 上流リポジトリの更新を同期する場合:
1. 上流リポジトリを追加:
```bash
git remote add upstream https://github.com/MaaAssistantArknights/MaaAssistantArknights.git
```
```bash
git remote add upstream https://github.com/MaaAssistantArknights/MaaAssistantArknights.git
```
2. 更新を取得:
```bash
git fetch upstream
```
```bash
git fetch upstream
```
3. リベース(推奨)またはマージ:
```bash
git rebase upstream/dev
```
```bash
git rebase upstream/dev
```
または
または
```bash
git merge
```
```bash
git merge
```
4. ステップ7、8、9、10 を繰り返し
@@ -103,9 +100,9 @@ Visual Studio 起動後、Git 操作は「Git 変更」画面からコマンド
1. clang-format バージョン20.1.0以上をインストールします。
```bash
python -m pip install clang-format
```
```bash
python -m pip install clang-format
```
2. 'Everything'などのツールを使用して、clang-format.exeのインストール場所を見つけます。参考までに、Anacondaを使用している場合、clang-format.exeはYourAnacondaPath/Scripts/clang-format.exeにインストールされます。
3. Visual Studioで、 Tools-Optionsで 'clang-format'を検索します。
@@ -125,6 +122,4 @@ Visual Studio 起動後、Git 操作は「Git 変更」画面からコマンド
GitHub codespace を作成して C++ 開発環境を自動的に構成する
[![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg?color=green)](https://codespaces.new/MaaAssistantArknights/MaaAssistantArknights)
次に、 vscode または [Linuxチュートリアル](./linux-tutorial.md) のプロンプトに従って、 GCC 12 および CMake プロジェクトを構成します。
[![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg?color=green)](https://codespaces.new/MaaAssistantArknights/MaaAssistantArknights?devcontainer_path=.devcontainer%2F1%2Fdevcontainer.json)

View File

@@ -14,7 +14,6 @@ MAAの構築方法はまだ議論されていますが、このチュートリ
## コンパイルプロセス
1. コンパイルに必要な依存をダウンロードして
- Ubuntu/Debian
```bash
@@ -24,7 +23,6 @@ MAAの構築方法はまだ議論されていますが、このチュートリ
2. サードパーティ製ライブラリのコンパイル
構築済みの依存ライブラリをダウンロードするか、最初からコンパイルするかを選択できます
- 事前構築されたサードパーティ製ライブラリのダウンロード(推奨)
> **Note**
@@ -35,7 +33,6 @@ MAAの構築方法はまだ議論されていますが、このチュートリ
```
上記の方法でダウンロードしたライブラリがABIバージョンなどの理由でシステム上で実行できず、コンテナなどのスキームを使用したくないことがわかった場合は、最初からコンパイルしてみることもできます
- サードパーティ製ライブラリを直接にコンパイルする(時間がかかる)
```bash

View File

@@ -43,7 +43,7 @@ icon: ri:earth-fill
例えば、切り取られた後の出力は次のようになる。
``` log
```log
src: Screenshot_xxx.png
dst: Screenshot_xxx.png_426,272,177,201.png
original roi: 476, 322, 77, 101,
@@ -60,8 +60,8 @@ amplified roi: 426, 272, 177, 201
- ENクライアントのテンプレートイメージフォルダの場所は `MaaAssistantArknights\resource\global\YoStarEN\resource\template`.
- 大陸版クライアントのテンプレートイメージフォルダの場所は `MaaAssistantArknights\resource\template`.
- ENクライアントのテンプレートイメージフォルダの場所は `MaaAssistantArknights\resource\global\YoStarEN\resource\template`.
- 大陸版クライアントのテンプレートイメージフォルダの場所は `MaaAssistantArknights\resource\template`.
task.json`ファイルに記載されているテンプレート画像を参照し、大陸版クライアントと海外クライアントのテンプレート画像を比較し、海外クライアントに不足しているテンプレートを特定します。
@@ -75,8 +75,8 @@ task.json`ファイルに記載されているテンプレート画像を参照
- ENクライアントの `task.json` の場所は `MaaAssistantArknights\resource\global\YoStarEN\resource\tasks.json`.
- 大陸版クライアントの `task.json` の場所は `MaaAssistantArknights\resource\tasks.json`.
- ENクライアントの `task.json` の場所は `MaaAssistantArknights\resource\global\YoStarEN\resource\tasks.json`.
- 大陸版クライアントの `task.json` の場所は `MaaAssistantArknights\resource\tasks.json`.
テキストを変更するには、対応するタスクを探し、`text`フィールドを対応するサーバーに表示されている内容に変更します。特定された内容は、ゲーム内の完全な内容の部分文字列である可能性があることに留意してください。一般的には、純粋なASCII文字として認識されない限り、テキストを含む`text`はすべて置き換える必要があります。
@@ -108,7 +108,7 @@ ROIの範囲を変更するには
ログを解析することは、プログラムに関する問題を特定するのに役立ちます。以下はログの例
``` log
```log
[2022-12-18 17:43:17.535][INF][Px7ec][Tx15c8] {"taskchain":"Award","details":{"to_be_recognized":["Award@ReturnTo","Award","ReceiveAward","DailyTask","WeeklyTask","Award@CloseAnno","Award@CloseAnnoTexas","Award@TodaysSupplies","Award@FromStageSN"],"cur_retry":10,"retry_times":20},"first":["AwardBegin"],"taskid":2,"class":"asst::ProcessTask","subtask":"ProcessTask","pre_task":"AwardBegin"}
[2022-12-18 17:43:18.398][INF][Px7ec][Tx15c8] Call ` C:\Program Files\BlueStacks_nxt\. \HD-Adb.exe -s 127.0.0.1:5555 exec-out "screencap | gzip -1" ` ret 0 , cost 862 ms , stdout size: 2074904 , socket size: 0
[2022-12-18 17:43:18.541][TRC][Px7ec][Tx15c8] OcrPack::recognize | roi: [ 500, 50, 300, 150 ]
@@ -130,6 +130,7 @@ ROIの範囲を変更するには
- `"taskid"` はタスク番号です。
- `"class"` と `subtask` はそれぞれ、タスクのクラスとサブタスクを表す。
- `"pre_task"` は一つ前のタスクを表す。
さらに、コマンドの実行結果 (例: `Call`) と `OCR` の情報 (例: `OcrPack::recognize`) がログに記録されます。
例えば、このログの `"to_be_recognized"`,`"cur_retry":3, "retry_times":20` は、タスクの認識を10回試行し、最大回数は20回であることを意味しています。最大回数に達すると、そのタスクはスキップされ、エラーが報告され、次のタスクが実行されます。前のタスクで問題がない場合、ここで認識に問題がある可能性があります。この問題をトラブルシューティングするには、ログに記載されているタスクに対応するテンプレートファイルがあるか、対応するタスクの `text` フィールドが正しくないか、タスク認識のための `roi` 範囲が正しくないかを確認し、必要な修正を加えてください。

View File

@@ -5,7 +5,7 @@ icon: mingcute:git-pull-request-fill
# 純WebサイトのPRチュートリアル
「パラスちゃん」も理解できるGitHubのPull Requestの使用ガイド (*´▽`)
「パラスちゃん」も理解できるGitHubのPull Requestの使用ガイド (\*´▽`)
この文書は機械翻訳です。もし可能であれば、中国語の文書を読んでください。もし誤りや修正の提案があれば、大変ありがたく思います。
@@ -75,79 +75,79 @@ Conflictを解決するのは少し面倒ですが、ここでは概念につい
1. まず、MAAのメインリポジトリにアクセスして、コードをforkします。
<ImageGrid :imageList="[
{
light: 'images/zh-cn/pr-tutorial/fork-light.png',
dark: 'images/zh-cn/pr-tutorial/fork-dark.png'
}
]" />
<ImageGrid :imageList="[
{
light: 'images/zh-cn/pr-tutorial/fork-light.png',
dark: 'images/zh-cn/pr-tutorial/fork-dark.png'
}
]" />
2. 「Copy the master branch only」オプションを外して、Create Forkをクリックします。
<ImageGrid :imageList="[
{
light: 'images/zh-cn/pr-tutorial/pr-2-light.png',
dark: 'images/zh-cn/pr-tutorial/pr-2-dark.png'
}
]" />
<ImageGrid :imageList="[
{
light: 'images/zh-cn/pr-tutorial/pr-2-light.png',
dark: 'images/zh-cn/pr-tutorial/pr-2-dark.png'
}
]" />
3. 次に、あなたの個人リポジトリに移動し、「あなたの名前/ MaaAssistantArknights」というタイトルが表示され、下に「MAAメインリポジトリから複製されたMaaAssistantArknights/MaaAssistantArknights」という文言が表示されます。
<ImageGrid :imageList="[
{
light: 'images/zh-cn/pr-tutorial/pr-3-light.png',
dark: 'images/zh-cn/pr-tutorial/pr-3-dark.png'
}
]" />
<ImageGrid :imageList="[
{
light: 'images/zh-cn/pr-tutorial/pr-3-light.png',
dark: 'images/zh-cn/pr-tutorial/pr-3-dark.png'
}
]" />
4. 変更するファイルを探します。 "Go to file" をクリックしてグローバル検索を行うか、下のフォルダーから直接検索することもできます(ファイルの場所を知っている場合)。
<ImageGrid :imageList="[
{
light: 'images/zh-cn/pr-tutorial/pr-4-light.png',
dark: 'images/zh-cn/pr-tutorial/pr-4-dark.png'
}
]" />
<ImageGrid :imageList="[
{
light: 'images/zh-cn/pr-tutorial/pr-4-light.png',
dark: 'images/zh-cn/pr-tutorial/pr-4-dark.png'
}
]" />
5. ファイルを開いたら、ファイルの右上隅にある✏️をクリックして編集を開始します。
<ImageGrid :imageList="[
{
light: 'images/zh-cn/pr-tutorial/pr-5-light.png',
dark: 'images/zh-cn/pr-tutorial/pr-5-dark.png'
}
]" />
<ImageGrid :imageList="[
{
light: 'images/zh-cn/pr-tutorial/pr-5-light.png',
dark: 'images/zh-cn/pr-tutorial/pr-5-dark.png'
}
]" />
6. 変更を加えますもちろん、リソースファイルなどの場合は、まずMAAフォルダー内で変更をテストし、問題がないことを確認してから、ウェブページに貼り付けて変更を行ってください
7. 変更が完了したら、一番下までスクロールして、変更内容を記述します。
<ImageGrid :imageList="[
{
light: 'images/zh-cn/pr-tutorial/pr-7-1-light.png',
dark: 'images/zh-cn/pr-tutorial/pr-7-1-dark.png'
}
]" />
<ImageGrid :imageList="[
{
light: 'images/zh-cn/pr-tutorial/pr-7-1-light.png',
dark: 'images/zh-cn/pr-tutorial/pr-7-1-dark.png'
}
]" />
<ImageGrid :imageList="[
{
light: 'images/zh-cn/pr-tutorial/pr-7-2-light.png',
dark: 'images/zh-cn/pr-tutorial/pr-7-2-dark.png'
}
]" />
<ImageGrid :imageList="[
{
light: 'images/zh-cn/pr-tutorial/pr-7-2-light.png',
dark: 'images/zh-cn/pr-tutorial/pr-7-2-dark.png'
}
]" />
8. 変更するもう1つのファイルがある場合は、5-8を繰り返してください。
9. 変更が完了したら、PRを行います個人リポジトリのPull Requestタブをクリックします。
「Compare & Pull Request」ボタンがある場合は、それをクリックしてください。ない場合は、「New Pull Request」をクリックしてください。
「Compare & Pull Request」ボタンがある場合は、それをクリックしてください。ない場合は、「New Pull Request」をクリックしてください。
<ImageGrid :imageList="[
{
light: 'images/zh-cn/pr-tutorial/pr-9-light.png',
dark: 'images/zh-cn/pr-tutorial/pr-9-dark.png'
}
]" />
<ImageGrid :imageList="[
{
light: 'images/zh-cn/pr-tutorial/pr-9-light.png',
dark: 'images/zh-cn/pr-tutorial/pr-9-dark.png'
}
]" />
10. これでメインリポジトリに移動します。PRする内容を確認してください。
スクリーンショットのように、真ん中に左向きの矢印があり、右側の「個人名/MAA」のdevブランチを「メインリポジトリ/MAA」のdevブランチにマージすることを申請しています。
スクリーンショットのように、真ん中に左向きの矢印があり、右側の「個人名/MAA」のdevブランチを「メインリポジトリ/MAA」のdevブランチにマージすることを申請しています。
<ImageGrid :imageList="[
{
@@ -166,25 +166,25 @@ Conflictを解決するのは少し面倒ですが、ここでは概念につい
]" />
11. MAAチームの大佬たちに承認していただきましょうもちろん、意見を提供してくださることもあるかもしれません
👇例えば(純粋に娯楽のために、本気にしないでください)
👇例えば(純粋に娯楽のために、本気にしないでください)
<ImageGrid :imageList="[
{
light: 'images/zh-cn/pr-tutorial/pr-11-light.png',
dark: 'images/zh-cn/pr-tutorial/pr-11-dark.png'
}
]" />
{
light: 'images/zh-cn/pr-tutorial/pr-11-light.png',
dark: 'images/zh-cn/pr-tutorial/pr-11-dark.png'
}
]" />
12. 大佬たちがさらに小さな問題を修正するように言った場合、あなたの個人のリポジトリに戻って、以前のdevブランチに切り替え、手順3-9を繰り返すだけで大丈夫です
手順2再度フォークするを実行する必要はなく、手順10再度プルリクエストするを実行する必要もありません。現在のプルリクエストはまだ承認待ちの状態にあり、後続の変更はこのプルリクエストに直接反映されます。
👇 以下は例です。最下部に「再度変更デモを変更」というメッセージが追加されたことがわかります。
手順2再度フォークするを実行する必要はなく、手順10再度プルリクエストするを実行する必要もありません。現在のプルリクエストはまだ承認待ちの状態にあり、後続の変更はこのプルリクエストに直接反映されます。
👇 以下は例です。最下部に「再度変更デモを変更」というメッセージが追加されたことがわかります。
<ImageGrid :imageList="[
{
light: 'images/zh-cn/pr-tutorial/pr-12-light.png',
dark: 'images/zh-cn/pr-tutorial/pr-12-dark.png'
}
]" />
{
light: 'images/zh-cn/pr-tutorial/pr-12-light.png',
dark: 'images/zh-cn/pr-tutorial/pr-12-dark.png'
}
]" />
13. 大佬たちの承認を得たら、すべて完了です! バージョンがリリースされた後、あなたのGitHubプロフィールアイコンは自動的に貢献者リストに追加されます。皆様のご奉仕に深く感謝申し上げます
~~なんで全部二次元キャラなんだろう、あ、私も二次元好きだったわ。ま、いいか~~
@@ -194,7 +194,7 @@ Conflictを解決するのは少し面倒ですが、ここでは概念につい
[![Contributors](https://contributors-img.web.app/image?repo=MaaAssistantArknights/MaaAssistantArknights&max=105&columns=15)](https://github.com/MaaAssistantArknights/MaaAssistantArknights/graphs/contributors)
:::
14. 次回別のPRを提出する場合は、まずdevブランチに切り替えて、以下の図のように直接操作してください。
14. 次回別のPRを提出する場合は、まずdevブランチに切り替えて、以下の図のように直接操作してください。
::: warning
この操作は、あなたの個人リポジトリをメインリポジトリとまったく同じ状態に強制的に同期するものであり、最も簡単で効果的な競合解消方法です。ただし、あなたの個人リポジトリにすでに追加されているものは削除されます!

View File

@@ -5,8 +5,8 @@ icon: iconoir:code-brackets
# Dedicated VSCode Extension Tutorial
* [Extension Store](https://marketplace.visualstudio.com/items?itemName=nekosu.maa-support)
* [Repository](https://github.com/neko-para/maa-support-extension)
- [Extension Store](https://marketplace.visualstudio.com/items?itemName=nekosu.maa-support)
- [Repository](https://github.com/neko-para/maa-support-extension)
## Installation
@@ -60,10 +60,10 @@ When enabling the `Maa` compatible mode, the extension will be able to recursive
The extension supports scheduled scanning and diagnosing all tasks.
* Check if contains task defs with same names.
* Check if contains unknown task refs.
* Check if contains unknown image refs.
* Check if contains duplicated task refs in a single task.
- Check if contains task defs with same names.
- Check if contains unknown task refs.
- Check if contains unknown image refs.
- Check if contains duplicated task refs in a single task.
#### Multiple paths resource support
@@ -83,11 +83,11 @@ Searching and launching `Maa: open crop tool` inside VSCode command panel can op
> Use `Ctrl+Shift+P` (`Command+Shift+P` on MacOS) to open command panel
* After selecting and connecting to the controller, use `Screencap` button to obtain screenshots
* Use `Upload` button to manually upload images.
* Hold `Ctrl` key and select cropping area
* Use wheels to zoom
* After finishing cropping, use `Download` button to save the cropping result to the folder of the topest layer of the activated resource
- After selecting and connecting to the controller, use `Screencap` button to obtain screenshots
- Use `Upload` button to manually upload images.
- Hold `Ctrl` key and select cropping area
- Use wheels to zoom
- After finishing cropping, use `Download` button to save the cropping result to the folder of the topest layer of the activated resource
### Bottom status bar

View File

@@ -6,4 +6,4 @@ dir:
order: 1
---
<Catalog base='/ja-jp/manual/' />
<Redirect to="newbie" />

View File

@@ -55,7 +55,6 @@ icon: mdi:plug
::: details 代替案
- オプション 1 : ADB コマンドを使用してエミュレータのポートを確認します
1. **単一**のエミュレータを起動し、他に Android デバイスがこのコンピュータに接続されていないことを確認します。
2. ADB 実行可能ファイルが格納されているフォルダでターミナルを起動します。
3. 次のコマンドを実行します。
@@ -78,7 +77,6 @@ icon: mdi:plug
使用 `127.0.0.1:<ポート>` または `emulator-<四桁の数字>` を接続アドレスとして使用します。
- 方法2すでに確立されたADB接続を検索する
1. 方法1を実行します。
2. `Windowsキー+S` を押して検索バーを開き、「リソースモニター」を入力して開きます。
3. `ネットワーク` タブに切り替えて、モニターするポート名であるシミュレータープロセス名(例:`HD-Player.exe`)を検索します。
@@ -175,7 +173,6 @@ MAA は現在 `bluestacks.conf` の保存場所をレジストリから読み取
:::
1. ブルースタックスシミュレータのデータディレクトリ内にある `bluestacks.conf` ファイルを見つけます。
- 国際版のデフォルトパスは `C:\ProgramData\BlueStacks_nxt\bluestacks.conf` です。
- 中国本土版のデフォルトパスは `C:\ProgramData\BlueStacks_nxt_cn\bluestacks.conf` です。

View File

@@ -6,4 +6,4 @@ dir:
order: 5
---
<Catalog base='/ja-jp/manual/device/' />
<Redirect to="windows" />

View File

@@ -11,11 +11,12 @@ icon: mingcute:android-fill
::: info 注意
1. Android 10 以降、SELinux が `Enforcing` モードの場合、Minitouch は使用できません、別のタッチモードに切り替えてください。または SELinux を **一時的に** `Permissive` モードに切り替え。
1. Android 10 以降、SELinux が `Enforcing` モードの場合、Minitouch は使用できません、別のタッチモードに切り替えてください。または SELinux を **一時的に** `Permissive` モードに切り替え。
2. Androidエコシステムは複雑なため、モードが正常に使用できるようになるまで、MAAの `設定` - `接続設定``接続構成``一般モード``互換モード``2番目の決議` または `一般モード(ブロックされた例外出力)`に変更してみてください。
3. MAAは `16:9` 比率の `720p` 以上の解像度にしか対応していません、ほとんどの近代的なデバイスを含む、`16:9` または `9:16` の画面比率でないデバイスは解像度を強制的に変更する必要があります。接続されているデバイスの画面解像度の比率がネイティブで `16:9` または `9:16`,の場合は、`解像度の変更` セクションをスキップできます。
4. 誤操作を避けるため、デバイスのナビゲーションモードを `クラシックナビゲーションキー` など、 `フルスクリーンジェスチャー` 以外の方法に切り替えてください。
5. エラーを避けるため、ゲーム内設定の `異形スクリーンUI対応` 項目を0に調整してください。
:::
::: tip
@@ -35,7 +36,6 @@ icon: mingcute:android-fill
```
- 実行に成功すると `USB デバッグ` デバイスが接続されたというメッセージが表示される。
- 成功した接続例:
```bash
@@ -102,7 +102,7 @@ icon: mingcute:android-fill
:: 解像度を 1080p に調整する
adb -s <ターゲット・デバイスのシリアル番号> shell wm size 1080x1920
:: 画面の輝度を下げる(オプション)
adb -s <ターゲット・デバイスのシリアル番号> shell settings put system screen_brightness 1
adb -s <ターゲット・デバイスのシリアル番号> shell settings put system screen_brightness 1
```
```bash
@@ -114,10 +114,9 @@ icon: mingcute:android-fill
adb -s <ターゲット・デバイスのシリアル番号> shell input keyevent 3
:: ロック画面(オプション)
adb -s <ターゲット・デバイスのシリアル番号> shell input keyevent 26
```
```
2. 最初のファイルを `startup.bat` に、2番目のファイルを `finish.bat` にリネームする。
- リネーム後、拡張子を変更するための2回目の確認ダイアログボックスが表示されず、ファイルアイコンも変更されない場合は、“Windowsでファイルの拡張子を表示する方法“をご自身で検索してください。
3. MAA の `設定` - `接続設定` - `スクリプトを使用して始めます` と `終了時にスクリプトを使用します` にそれぞれ `startup.bat` と `finish.bat` を記入してください。
@@ -148,7 +147,6 @@ icon: mingcute:android-fill
```
2. デバイスのIPアドレスを表示します。
- デバイスの `設定` - `WLAN` を開き、現在接続されているワイヤレスネットワークをタップしてIPアドレスを表示します。
- セッティング位置は各機器ブランドによって異なるので、各自で確認してほしい。
@@ -164,7 +162,6 @@ icon: mingcute:android-fill
1. デバイスの開発者向けオプションに移動し、 `ワイヤレスデバッグ` をクリックしてオンにし、OKをクリックして、 `ペアリングコードでデバイスをペアリング` をクリックして、ペアリングが完了するまで表示されるポップアップウィンドウを閉じないでください。
2. ペアリングします。
1. コマンドプロンプトウィンドウに `adb pair <デバイスのポップアップで指定されたIPアドレスとポート>` 、Enter キーを押します。
2. `<デバイスのポップアップウィンドウに表示される6桁のペアリングコード>` と入力し、Enter キーを押します。
3. ウィンドウに `Successfully paired to <IP:ポート>` と表示され、デバイスのポップアップウィンドウが自動的に消え、ペアリングされたデバイスの下部にコンピューター名が表示されます。

View File

@@ -25,7 +25,6 @@ icon: teenyicons:linux-alt-solid
1. [`if asst.connect('adb.exe', '127.0.0.1:5554'):`](https://github.com/MaaAssistantArknights/MaaAssistantArknights/blob/722f0ddd4765715199a5dc90ea1bec2940322344/src/Python/sample.py#L48) セクションを見つける
2. `adb` ツール呼び出し
- エミュレータが `Android Studio``avd` を使用している場合は、 `adb` が付属します。 `adb.exe` の欄に直接 `adb` パスを記入することができ、一般的には `$HOME/Android/Sdk/platform-tools/` で見つけることができます。例:
```python
@@ -35,7 +34,6 @@ icon: teenyicons:linux-alt-solid
- 他のエミュレータを使用する場合は、最初に `adb` をダウンロードして: `$ sudo apt install adb` 次に、パスを入力するか、 `PATH` 環境変数を使用して `adb` を直接入力します
3. エミュレータの `adb` パス取得
- adb ツールを直接使用できます: `$ adbパス devices` ,例:
```shell

View File

@@ -57,8 +57,8 @@ Windows 7 の場合、上記の 2 つのランタイムライブラリをイン
1. [Windows 7 Service Pack 1](https://support.microsoft.com/ja-jp/windows/windows-7-service-pack-1-sp1-%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B-b3da2c0f-cdb6-0572-8596-bab972897f61)
2. SHA-2 コード署名:
- KB4474419[ダウンロードリンク1](https://catalog.s.download.windowsupdate.com/c/msdownload/update/software/secu/2019/09/windows6.1-kb4474419-v3-x64_b5614c6cea5cb4e198717789633dca16308ef79c.msu)、[ダウンロードリンク2](http://download.windowsupdate.com/c/msdownload/update/software/secu/2019/09/windows6.1-kb4474419-v3-x64_b5614c6cea5cb4e198717789633dca16308ef79c.msu)
- KB4490628[ダウンロードリンク1](https://catalog.s.download.windowsupdate.com/c/msdownload/update/software/secu/2019/03/windows6.1-kb4490628-x64_d3de52d6987f7c8bdc2c015dca69eac96047c76e.msu)、[ダウンロードリンク2](http://download.windowsupdate.com/c/msdownload/update/software/secu/2019/03/windows6.1-kb4490628-x64_d3de52d6987f7c8bdc2c015dca69eac96047c76e.msu)
- KB4474419[ダウンロードリンク1](https://catalog.s.download.windowsupdate.com/c/msdownload/update/software/secu/2019/09/windows6.1-kb4474419-v3-x64_b5614c6cea5cb4e198717789633dca16308ef79c.msu)、[ダウンロードリンク2](http://download.windowsupdate.com/c/msdownload/update/software/secu/2019/09/windows6.1-kb4474419-v3-x64_b5614c6cea5cb4e198717789633dca16308ef79c.msu)
- KB4490628[ダウンロードリンク1](https://catalog.s.download.windowsupdate.com/c/msdownload/update/software/secu/2019/03/windows6.1-kb4490628-x64_d3de52d6987f7c8bdc2c015dca69eac96047c76e.msu)、[ダウンロードリンク2](http://download.windowsupdate.com/c/msdownload/update/software/secu/2019/03/windows6.1-kb4490628-x64_d3de52d6987f7c8bdc2c015dca69eac96047c76e.msu)
3. Platform Update for Windows 7DXGI 1.2、Direct3D 11.1KB2670838[ダウンロードリンク1](https://catalog.s.download.windowsupdate.com/msdownload/update/software/ftpk/2013/02/windows6.1-kb2670838-x64_9f667ff60e80b64cbed2774681302baeaf0fc6a6.msu)、[ダウンロードリンク2](http://download.windowsupdate.com/msdownload/update/software/ftpk/2013/02/windows6.1-kb2670838-x64_9f667ff60e80b64cbed2774681302baeaf0fc6a6.msu)
##### .NET 8 アプリケーションが Windows 7 で異常に動作する場合の緩和策 [#8238](https://github.com/MaaAssistantArknights/MaaAssistantArknights/issues/8238)
@@ -97,6 +97,7 @@ Windows 7 で .NET 8 アプリケーションを実行すると、メモリ使
- エミュレータのインストールパスを見つける。Windowsはエミュレータの実行中にタスクマネージャーでプロセスを右クリックし、 `ファイルの場所を開く` をクリックします。
- トップまたはボトムのディレクトリに高確率で `adb.exe` が存在する可能性があります(必ずしもこの名前で呼ばれているとは限りません。`nox_adb.exe``HD-adb.exe``adb_server.exe` などと呼ばれる場合があります。とにかく名前に `adb` が含まれるexeです 。それを選択してください。
:::
- 接続アドレスが正しく入力されていることを確認してください。使用しているエミュレータのadbアドレスをインターネットで検索できます。通常は `127.0.0.1:5555` のような形式ですLDPlayerを除く
@@ -105,7 +106,7 @@ Windows 7 で .NET 8 アプリケーションを実行すると、メモリ使
関連資料およびリファレンス adbポート
- [Bluestacks 5](https://support.bluestacks.com/hc/zh-tw/articles/360061342631-%E5%A6%82%E4%BD%95%E5%B0%87%E6%82%A8%E7%9A%84%E6%87%89%E7%94%A8%E5%BE%9EBlueStacks-4%E8%BD%89%E7%A7%BB%E5%88%B0BlueStacks-5#%E2%80%9C2%E2%80%9D) `5555`
- [Bluestacks 5](https://support.bluestacks.com/hc/ja/articles/360061342631-BlueStacks-5-BlueStacks-4%E3%81%8B%E3%82%89%E3%82%A2%E3%83%97%E3%83%AA%E3%82%92%E7%A7%BB%E8%A1%8C%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95) `5555`
- [MuMu Pro](https://mumu.163.com/mac/function/20240126/40028_1134600.html) `16384`
- [MuMu](https://mumu.163.com/help/20240807/40912_1073151.html?maa) `16384`
- [Nemu](https://bbs.xyaz.cn/forum.php?mod=viewthread&tid=365537) `21503`
@@ -179,9 +180,8 @@ MAA はレジストリから `bluestacks.conf` の保存場所を読み取ろう
:::
1. Bluestacksエミュレータのデータディレクトリにある`bluestacks.conf`ファイルを探します
- グローバル版のデフォルトパス `C:\ProgramData\BlueStacks_nxt\bluestacks.conf`
- 中国版のデフォルトパス `C:\ProgramData\BlueStacks_nxt_cn\bluestacks.conf`
- グローバル版のデフォルトパス `C:\ProgramData\BlueStacks_nxt\bluestacks.conf`
- 中国版のデフォルトパス `C:\ProgramData\BlueStacks_nxt_cn\bluestacks.conf`
2. 初めて MAA を使用する場合は、一度 MAA を起動してください。MAAの `config` ディレクトリに `gui.json` が生成されます。

View File

@@ -6,4 +6,4 @@ dir:
order: 4
---
<Catalog base='/ja-jp/manual/introduction/' />
<Redirect to="startup" />

View File

@@ -8,7 +8,6 @@ icon: hugeicons:brain-02
## 一般設定
- `理性剤使用数``割る源石の数`、および `周回数指定``素材の指定` はいずれもショートサーキット的なスイッチOR条件です。これら3つの条件のうちいずれかを満たした時点でタスク達成とみなし、作戦を停止します。
- `理性剤使用数` は理性を何回分補充するかを指定します1回で複数本使う場合あり
- `割る源石の数` は源石を何個割るかを指定します1回につき1個。倉庫に理性剤がある場合は源石を割りません。
- `周回数指定` は選択したステージを何回周回するかを指定します「15回周回後に停止」
@@ -19,19 +18,19 @@ icon: hugeicons:brain-02
::: details 例
| 理性剤使用数 | 割る源石の数 | 周回数指定 | 素材の指定→ドロップ数 | 結果 |
| :------: | :----: | :------: | :------: | -------------------------------------------------------------------------------------------------------------------------------------- |
| | | | | 所持理性を消費し切ったら終了。 |
| 2 | | | | まず所持理性を使い切り、その後理性剤を1回使用。合計 `2` 回分の補充後、理性を使い切って終了。 |
| _999_ | 2 | | | まず所持理性を使い切り、理性剤を使い切ってから源石を割る。源石は合計 `2` 回。理性を使い切って終了。 |
| | | 2 | | 選択ステージを `2` 回周回して終了。 |
| | | | 2 | ドロップ統計で指定素材を `2` 個入手した時点で終了。 |
| 2 | | 4 | | 最大 `2` 回まで理性剤を使用する前提で、選択ステージを `4` 回周回して終了。 |
| 2 | | | 4 | 最大 `2` 回まで理性剤を使用する前提で、ドロップ統計で指定素材を `4` 個入手したら終了。 |
| 2 | | 4 | 8 | 最大 `2` 回まで理性剤を使用する前提で、`4` 回周回したら終了。ただし `4` 回に到達する前に指定素材を `8` 個入手した場合は前倒しで終了。 |
| _999_ | 4 | 8 | 16 | 理性剤を使い切り、さらに源石を `4` 回割る前提で、`8` 回周回したら終了。ただし `8` 回に到達する前に指定素材を `16` 個入手した場合は前倒しで終了。 |
| | 2 | | | まず所持理性を使い切る。倉庫に理性剤があればそこで終了。理性剤がなければ源石を `2` 回割り、理性を使い切って終了。_MAA GUIの動作ではありません_ |
| 2 | 4 | | | まず所持理性を使い切る。`2` 回分の理性剤を使い終えても理性剤が残っていれば終了。`2` 回以内で理性剤が尽きた場合は源石を `4` 回割り、理性を使い切って終了。_MAA GUIの動作ではありません_ |
| 理性剤使用数 | 割る源石の数 | 周回数指定 | 素材の指定→ドロップ数 | 結果 |
| :----------: | :----------: | :--------: | :-------------------: | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| | | | | 所持理性を消費し切ったら終了。 |
| 2 | | | | まず所持理性を使い切り、その後理性剤を1回使用。合計 `2` 回分の補充後、理性を使い切って終了。 |
| _999_ | 2 | | | まず所持理性を使い切り、理性剤を使い切ってから源石を割る。源石は合計 `2` 回。理性を使い切って終了。 |
| | | 2 | | 選択ステージを `2` 回周回して終了。 |
| | | | 2 | ドロップ統計で指定素材を `2` 個入手した時点で終了。 |
| 2 | | 4 | | 最大 `2` 回まで理性剤を使用する前提で、選択ステージを `4` 回周回して終了。 |
| 2 | | | 4 | 最大 `2` 回まで理性剤を使用する前提で、ドロップ統計で指定素材を `4` 個入手したら終了。 |
| 2 | | 4 | 8 | 最大 `2` 回まで理性剤を使用する前提で、`4` 回周回したら終了。ただし `4` 回に到達する前に指定素材を `8` 個入手した場合は前倒しで終了。 |
| _999_ | 4 | 8 | 16 | 理性剤を使い切り、さらに源石を `4` 回割る前提で、`8` 回周回したら終了。ただし `8` 回に到達する前に指定素材を `16` 個入手した場合は前倒しで終了。 |
| | 2 | | | まず所持理性を使い切る。倉庫に理性剤があればそこで終了。理性剤がなければ源石を `2` 回割り、理性を使い切って終了。_MAA GUIの動作ではありません_ |
| 2 | 4 | | | まず所持理性を使い切る。`2` 回分の理性剤を使い終えても理性剤が残っていれば終了。`2` 回以内で理性剤が尽きた場合は源石を `4` 回割り、理性を使い切って終了。_MAA GUIの動作ではありません_ |
:::
@@ -46,7 +45,6 @@ icon: hugeicons:brain-02
- アーツ学・購買資格証・炭素材の第 5 ステージ。`CA-5` / `AP-5` / `SK-5` を入力してください。
- すべてのSoCステージ。`PR-A-1` のように完全な番号を入力してください。
- 殲滅作戦は以下の入力値に対応し、対応する Value を使用してください:
- 当期殲滅作戦Annihilation
- チェルボーグChernobog@Annihilation
- 龍門郊外LungmenOutskirts@Annihilation

View File

@@ -2,12 +2,17 @@
order: 9
icon: ph:sword-bold
---
# 自動戦闘
作業共有サイト [prts.plus](https://prts.plus) で作業ファイルをご利用・共有ください。
::: warning
自動戦闘に関るすべての機能は、最低60フレームの安定したゲームフレームレートが必要です。これには自動戦闘自動ローグライクが含まれますが、これに限定されません。
自動戦闘に関係するすべての機能は、以下の前提条件が必要です。これには自動戦闘自動ローグが含まれますが、これに限定されません。
- 少なくとも60フレームの**安定した**ゲームフレームレート
- タッチモードはMinitouchまたはMaaTouch
:::
## 自動攻略のコピー

View File

@@ -8,7 +8,11 @@ icon: ri:game-fill
MAAはデフォルトで最新のテーマを選択しますが、`自動ロゲット` - `ロゲットテーマ`でターゲットテーマを変更することができます。
::: warning
すべての自動バトルに関する機能は、少なくとも 60 フレームの安定したゲームフレームレートが必要です。これには自動バトルや自動ローグが含まれますが、これに限ません。
自動戦闘に関するすべての機能は、以下の前提条件が必要です。これには自動戦闘と自動ローグが含まれますが、これに限定されません。
- 少なくとも60フレームの**安定した**ゲームフレームレート
- タッチモードはMinitouchまたはMaaTouch
:::
- ゲーム内で該当のロゲットテーマを端末に追加してください。現在は自動ナビゲートも可能ですが、長期的な使用可否は保証されません。
@@ -33,13 +37,13 @@ MAAはデフォルトで最新のテーマを選択しますが、`自動ロゲ
難易度の推奨は、`敵の難易度``希望消費``スコア倍率`などの要素を総合的に考慮しています。高い練度でテストした場合、比較的安定しており、実際の状況やニーズに応じて自由に調整できます。
| テーマ | 備考 |
| ---------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| ファントム | `正式調査·3` およびそれ以上の難易度で開始すると、希望消費を減少させるアイテムが手に入る場合があり、そのため開始時に六星オペレーターを召集できないことがあります。 |
| ミヅキ | `波瀾万丈·4` およびそれ以上の難易度では、六星オペレーターの召集に必要な希望消費が+1されます。 `精神論分隊` を使用して開始した場合、六星オペレーターを召集できないことがあります。<br>`精神論分隊` はアカウントの練度が高い場合に適しており、運に頼る必要があります。 |
| サーミ | `自然の猛威·6` およびそれ以上の難易度では、六星オペレーターの召集に必要な希望消費が+1されます。 `特訓分隊` を使用して開始した場合、六星オペレーターを召集できないことがあります。 |
| サルカズ | `魂に直面·15` およびそれ以上の難易度では、六星オペレーターの召集に必要な希望消費が+1されます。 `歴史再編`内でまだ `位置測定分隊強化Ⅱ`を有効にしていない場合、 `位置測定分隊` を使用して開始した場合、六星オペレーターを召集できないことがあります。<br> `位置測定分隊`を選択した場合、回避戦略が採用され、 `魂のしおり`を素早く取得できますが、基本的にエンディングをクリアすることはできません。<br>源石錐を収集戦略を使用した場合、開始時の分隊は `破棘成金分隊` とならば、商店更新戦略を使用してプロセスを加速します。 |
| 界園 | `請君入園·15` およびそれ以上の難易度では、六星オペレーターの召集に必要な希望消費が+1されます。 `指揮分隊` を使用して開始した場合、六星オペレーターを召集できないことがあります。<br>難易度が `請君入園·3`に設定され、源石錐を収集戦略を使用して開始時の分隊が `指揮分隊` とならば、 `時の果て` でスキップ戦略を使用してプロセスを加速します。 |
| テーマ | 備考 |
| ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| ファントム | `正式調査·3` およびそれ以上の難易度で開始すると、希望消費を減少させるアイテムが手に入る場合があり、そのため開始時に六星オペレーターを召集できないことがあります。 |
| ミヅキ | `波瀾万丈·4` およびそれ以上の難易度では、六星オペレーターの召集に必要な希望消費が+1されます。 `精神論分隊` を使用して開始した場合、六星オペレーターを召集できないことがあります。<br>`精神論分隊` はアカウントの練度が高い場合に適しており、運に頼る必要があります。 |
| サーミ | `自然の猛威·6` およびそれ以上の難易度では、六星オペレーターの召集に必要な希望消費が+1されます。 `特訓分隊` を使用して開始した場合、六星オペレーターを召集できないことがあります。 |
| サルカズ | `魂に直面·15` およびそれ以上の難易度では、六星オペレーターの召集に必要な希望消費が+1されます。 `歴史再編`内でまだ `位置測定分隊強化Ⅱ`を有効にしていない場合、 `位置測定分隊` を使用して開始した場合、六星オペレーターを召集できないことがあります。<br> `位置測定分隊`を選択した場合、回避戦略が採用され、 `魂のしおり`を素早く取得できますが、基本的にエンディングをクリアすることはできません。<br>源石錐を収集戦略を使用した場合、開始時の分隊は `破棘成金分隊` とならば、商店更新戦略を使用してプロセスを加速します。 |
| 界園 | `請君入園·15` およびそれ以上の難易度では、六星オペレーターの召集に必要な希望消費が+1されます。 `指揮分隊` を使用して開始した場合、六星オペレーターを召集できないことがあります。<br>難易度が `請君入園·3`に設定され、源石錐を収集戦略を使用して開始時の分隊が `指揮分隊` とならば、 `時の果て` でスキップ戦略を使用してプロセスを加速します。 |
:::
@@ -54,8 +58,8 @@ MAA はゲーム内のすべての操作を予め設定された戦略で行い
## 異常検出
- 回線が切断されたり、午前4時に接続が中断された場合、タスクを再接続して続行します。
- 戦闘時間が5分を超えると、すべての地上ユニットを自動で撤退させ、6分を超えるとその戦闘を自動で放棄し、時間の無駄を避けます。
- タスクに問題が発生した場合、現在の探索を自動で放棄し、再試行します。
- 戦闘時間が5分を超えると、すべての地上ユニットが自動で撤退し、6分を超えるとその戦闘を自動で放棄して時間の無駄を避けます。
- 断続的な切断やアップデート後に自動的に再接続してタスクを継続するには、「開始ウェイクアップタスク」を有効にし、対応する時間に強制タイマー起動を設定してください。
ただし、同じ位置で何度もまる場合は、Issueを提出してフィードバックをお願いします。ログとスクリーンショット添付してください。
同じ位置で何度もまる場合は、ログとスクリーンショット添付してIssueを提出してください。

View File

@@ -32,12 +32,12 @@ icon: ic:baseline-article
- `周回数指定` ステージを何回周回するか指定例“15 周 で停止”)
- `素材を限定` 特定の素材のドロップ数が手に入るまで周回例“5 個 初級源岩獲得で停止”)
| 例 | 理性剤使用数 | 割る源石の数 | 周回数指定 | 素材を限定 | 結果 |
|:--:|:--------:|:------:|:--------:|:---------:|-----------------------------------------------------------------------------------------------------------------------------------------------|
| A | 999 | 10 | 1 | ✖ | 理性材/純正源石を**1回**以上摂取し、`周回数1`回の条件を完了すると、即座に停止。理性不足の状態で純正源石か理性剤が不足している場合は摂取せずに自動的に終了します。 |
| B || ✖ | 100 | ✖ | 100回ステージを実行しようとしますが、現在使用可能な理性を消費後おそらく数回に、`理性剤``純正源石`なしの条件が達成されるため、理性を消費できず、タスクは完了されます。 |
| C | 1 | ✖ | 100 | ✖ | 100回ステージを実行しようとしますが、理性剤を 1 個消費した後に理性が不足した場合、`理性剤使用数1``割る源石の数0`の条件を達成したためタスクは完了します。 |
| D | 999 | ✖ | 100 | 3個初級源岩 | 100回ステージを実行しようとし、最大 999 の理性剤を消費しようとしますが、実行中に3個の初級源岩を獲得した場合、`素材を限定3個の初級源岩`の条件を達成するため、その時点でタスクを完了し停止します。 |
| 例 | 理性剤使用数 | 割る源石の数 | 周回数指定 | 素材を限定 | 結果 |
| :-: | :----------: | :----------: | :--------: | :---------: | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| A | 999 | 10 | 1 | ✖ | 理性材/純正源石を**1回**以上摂取し、`周回数1`回の条件を完了すると、即座に停止。理性不足の状態で純正源石か理性剤が不足している場合は摂取せずに自動的に終了します。 |
| B | | | 100 | ✖ | 100回ステージを実行しようとしますが、現在使用可能な理性を消費後おそらく数回に、`理性剤``純正源石`なしの条件が達成されるため、理性を消費できず、タスクは完了されます。 |
| C | 1 | | 100 | ✖ | 100回ステージを実行しようとしますが、理性剤を 1 個消費した後に理性が不足した場合、`理性剤使用数1``割る源石の数0`の条件を達成したためタスクは完了します。 |
| D | 999 | ✖ | 100 | 3個初級源岩 | 100回ステージを実行しようとし、最大 999 の理性剤を消費しようとしますが、実行中に3個の初級源岩を獲得した場合、`素材を限定3個の初級源岩`の条件を達成するため、その時点でタスクを完了し停止します。 |
- `素材を限定``ステージ選択` は2つの別々のロジックです。
- `素材を限定` は、タスクを完了するための素材の数に基づいており、対応するステージに自動的に移動しません。
@@ -121,7 +121,7 @@ icon: ic:baseline-article
### 自動戦闘現在JP未対応
- 適応していないことが示されていますが、自動攻略ファイル内の中国語の指示を理解できる限り、ほとんどの機能を使用できます。アプリがバグで立ち往生した場合は、Issueを提出してフィードバックをお寄せください。
- 自動攻略ファイルのシェアは大歓迎です!
- 自動攻略ファイルのシェアは大歓迎です!
- [prts.plus](https://prts.plus) をご利用ください!
#### 使い方
@@ -129,9 +129,9 @@ icon: ic:baseline-article
`編成可能のステージ``保全駐在` モードでの自動戦闘をサポートします。
- この機能は、`行動開始` のある画面で開始する必要があります。
その後、 `攻略ファイルパス` または `ミステリーコード` をMAAの左上にあるボックスに入力するで、ジョブをインポートできます。
その後、 `攻略ファイルパス` または `ミステリーコード` をMAAの左上にあるボックスに入力するで、ジョブをインポートできます。
- さらに、ビデオ認識がサポートされており(テスト中)、ビデオファイルをドラッグすることでアクティブ化できます。
アスペクト比16:9、解像度720p以上の動画にのみ対応しています。動画には、黒枠、歪み補正、エミュレータの枠などが含まれていないことが必須です。
アスペクト比16:9、解像度720p以上の動画にのみ対応しています。動画には、黒枠、歪み補正、エミュレータの枠などが含まれていないことが必須です。
- `自動編成` 機能は、**現在の編成をクリアし**、ジョブに必要なオペレーターに基づいて編成を自動的に完了します。
- `自動編成` は、必要に応じてキャンセルして(たとえば、必要に応じて `戦友サポート` を使用する場合)、手動編成後に開始する。
- `カスタムオペレーターを追加する``信頼性の低いオペレーターを追加する` は、ミッションの必要に応じて自動編成に追加できます。
@@ -140,7 +140,7 @@ icon: ic:baseline-article
- 自動戦闘の「サイクル数」を設定できます(例:保全駐在)。
- `バトルリスト` 機能を使用して、同じエリア内のステージの連続した自動戦闘をキューに入れることができます。
- ジョブをインポートしたら、以下のリストのステージコードが正しいことを確認してから、ステージを追加します(代わりに右クリックして強襲作戦を追加します)。
追加後、対応するステージの作戦を行うかどうかのオンとオフを切り替えることができます。
追加後、対応するステージの作戦を行うかどうかのオンとオフを切り替えることができます。
- この機能をオンにすると、**ステージが配置されているマップ画面**で自動戦闘を開始できます。 自動戦闘キューは、理性不足/戦闘失敗した/星3以外で完了の場合に停止します。
- リスト内のステージが同じエリアにあることを確認してください(マップ画面を左右にスワイプすることでのみナビゲートできます)。
- **攻略ファイルの採点を高め、クリエイターを激励するために、必ず良質な攻略ファイルに「いいね!」を押してください。**
@@ -153,7 +153,7 @@ icon: ic:baseline-article
- マップ座標の取得:
- ジョブエディターでステージ名を入力すると、ドラッグ可能な座標マップが左下隅に自動的にロードされ、クリックして現在のオペレーターの位置を設定できます。
- ステージ名を入力して JSON をエクスポートすると、直接行動開始され、座標情報で覆われたマップのスクリーンショットが MAA ディレクトリの `debug\map` ディレクトリに生成されます。
- [PRTS.map](https://map.ark-nights.com/) `設定` から座標を `MAA` に変更し使います。
- [PRTS.map](https://map.ark-nights.com/) の `設定` から座標を `MAA` に変更し使います。
- 演習モードをサポートしている。
- 説明文には、自分の名前作者名、参考動画のURL、その他言いたいことなどを記入することをお勧めします
- QQディスカッショングループ [1169188429](https://jq.qq.com/?_wv=1027&k=QZcGcJ9G)(中国語のみ) に参加して、攻略ファイルの作成やその他の問題について私たちと議論することを歓迎します。
@@ -163,13 +163,13 @@ icon: ic:baseline-article
- 自動ジャンプに失敗した場合は、倉庫の `材料` インターフェースに手動で切り替え、**左端にスワイプ**して機能を開始してください。
- 現在の対応データサイトは、 [Arkplanner](https://penguin-stats.io/planner) 、 [アークナイツ ツールボックス](https://arkntools.app/#/material) 、 [ARK-NIGHTS.com](https://ark-nights.com/settings)。
- もしかしたら、後でもっと便利な機能を実行するために使われるかもしれません、多分。
- あなたがデータサイトのウェブマスターであるならば、あなたのサイトの材料JSONプロトコルを適応させるために私達に連絡することも大歓迎です。
- あなたがデータサイトのウェブマスターであるならば、あなたのサイトの材料JSONプロトコルを適応させるために私達に連絡することも大歓迎です。
## 設定の紹介
Windows MAAには `設定` タブの他に `タスク設定` もあります。 `スタート` のタスクリスト右側の `歯車` をクリックするとスタート内の異なるタスク設定に切り替えることができます〜
`一般設定` `高度な設定` をクリックすると、 `タスク設定` も切り替わるので注意してください~
`一般設定` `高度な設定` をクリックすると、 `タスク設定` も切り替わるので注意してください~
### カスタム接続
@@ -181,7 +181,6 @@ Windows MAAには `設定` タブの他に `タスク設定` もあります。
#### ポート番号の取得
- 方法1adbコマンドを使用して実行ポートを直接確認する
1. **一つの**エミュレータを起動し、このコンピューターに他の Android デバイスが接続されていないことを確認します。
2. ADB実行可能ファイルが保存されているフォルダ内のコマンドウィンドウを起動します。
3. 以下のコマンドを実行します:
@@ -203,7 +202,6 @@ Windows MAAには `設定` タブの他に `タスク設定` もあります。
接続アドレスとして `127.0.0.1:[ADBPORT]` を使用します(`[ADBPORT]`を実際の数字に置き換えます)。 `emulator-****` を出力する場合は、方法2を参照してください。
- 方法2: 確立されたADB接続を確認する
1. 方法1 を実行します。
2. `Logo Key + S` を押して検索バーを開き、 `Resource Monitor` と入力すると開きます。
3. `ネットワーク` タブに切り替えて、 `listening port` の `名前` 列でエミュレータ プロセス名 (`HD-Player.exe` など) を探します。
@@ -251,7 +249,7 @@ Windows MAAには `設定` タブの他に `タスク設定` もあります。
::: details 示例
```text
```text
マルチインスタンス1
エミュレータのパスC:\ProgramData\Microsoft\Windows\Start Menu\Programs\BlueStacks\マルチインスタンス1.lnk
マルチインスタンス2

View File

@@ -2,6 +2,7 @@
order: 11
icon: icon-park-solid:other
---
# その他
## GPU 推論加速
@@ -14,7 +15,7 @@ DirectML を使用して GPU による認識推論を加速<sup>[PR](https://git
メイン画面と設定での設定変更は通常自動保存されますが、以下の項目は MAA 再起動後にリセットされます。
- `*` マークが付いたオプション
- `(一回のみ)` マークが付いたオプション
- `(一回のみ)` マークが付いたオプション
- チェックボックスを右クリックして得られる半選択スイッチ
-

View File

@@ -2,6 +2,7 @@
order: 8
icon: solar:streets-map-point-linear
---
# 生息演算
::: important Translation Required

View File

@@ -2,6 +2,7 @@
order: 6
icon: lucide:gift
---
# 報酬受取
毎日の報酬と毎週の報酬を自動受取します。

View File

@@ -6,4 +6,4 @@ dir:
order: 3
---
<Catalog base='/ja-jp/protocol/' />
<Redirect to="integration" />

View File

@@ -22,41 +22,41 @@ typedef void(ASST_CALL* AsstCallback)(int msg, const char* details, void* custom
## 概要
- `int msg`
The message type
The message type
```cpp
enum class AsstMsg
{
/* Global Info */
InternalError = 0, // 内部エラー
InitFailed = 1, // 初期化に失敗しました
ConnectionInfo = 2, // 接続情報
AllTasksCompleted = 3, // すべてのタスクが完了したかどうか
AsyncCallInfo = 4, // 外部非同期呼び出し情報
```cpp
enum class AsstMsg
{
/* Global Info */
InternalError = 0, // 内部エラー
InitFailed = 1, // 初期化に失敗しました
ConnectionInfo = 2, // 接続情報
AllTasksCompleted = 3, // すべてのタスクが完了したかどうか
AsyncCallInfo = 4, // 外部非同期呼び出し情報
/* TaskChain Info */
TaskChainError = 10000, // 一連のタスク 実行/認識のエラー
TaskChainStart = 10001, // 一連のタスク 開始
TaskChainCompleted = 10002, // 一連のタスク 完了
TaskChainExtraInfo = 10003, // 一連のタスクの追加情報
TaskChainStopped = 10004, // 一連のタスク 手動停止
/* TaskChain Info */
TaskChainError = 10000, // 一連のタスク 実行/認識のエラー
TaskChainStart = 10001, // 一連のタスク 開始
TaskChainCompleted = 10002, // 一連のタスク 完了
TaskChainExtraInfo = 10003, // 一連のタスクの追加情報
TaskChainStopped = 10004, // 一連のタスク 手動停止
/* SubTask Info */
SubTaskError = 20000, // サブタスク 実行/認識におけるエラー
SubTaskStart = 20001, // サブタスク 実行
SubTaskCompleted = 20002, // サブタスク 完了
SubTaskExtraInfo = 20003, // サブタスクの追加情報
SubTaskStopped = 20004, // サブタスク 手動停止
/* SubTask Info */
SubTaskError = 20000, // サブタスク 実行/認識におけるエラー
SubTaskStart = 20001, // サブタスク 実行
SubTaskCompleted = 20002, // サブタスク 完了
SubTaskExtraInfo = 20003, // サブタスクの追加情報
SubTaskStopped = 20004, // サブタスク 手動停止
/* Web Request */
ReportRequest = 30000, // レポートリクエスト
};
```
/* Web Request */
ReportRequest = 30000, // レポートリクエスト
};
```
- `const char* details`
メッセージの詳細, JSON. 詳細: [Field Description](#field-description)
メッセージの詳細, JSON. 詳細: [Field Description](#field-description)
- `void* custom_arg`
呼び出し元のカスタム引数には、 `AsstCreateEx` インターフェースの `custom_arg` 引数が渡される。C ライクな言語では、`this` ポインタを一緒に渡すことができる。
呼び出し元のカスタム引数には、 `AsstCreateEx` インターフェースの `custom_arg` 引数が渡される。C ライクな言語では、`this` ポインタを一緒に渡すことができる。
## Field Description
@@ -92,25 +92,25 @@ Todo
### 多用される `What` フィルドの値
- `ConnectFailed`
接続失敗
接続失敗
- `Connected`
接続成功。現段階では `uuid` フィールドが空であることに注意してください (次のステップで取得されます)
接続成功。現段階では `uuid` フィールドが空であることに注意してください (次のステップで取得されます)
- `UuidGot`
UUID の取得
UUID の取得
- `UnsupportedResolution`
この解像度はサポートされていません
この解像度はサポートされていません
- `ResolutionError`
解像度を取得できない
解像度を取得できない
- `Reconnecting`
接続切断 (adb/emulator クラッシュ), 再接続開始
接続切断 (adb/emulator クラッシュ), 再接続開始
- `Reconnected`
接続切断 (adb/emulator クラッシュ), 再接続成功
接続切断 (adb/emulator クラッシュ), 再接続成功
- `Disconnect`
接続切断 (adb/emulator クラッシュ), 再接続失敗
接続切断 (adb/emulator クラッシュ), 再接続失敗
- `ScreencapFailed`
画面取得失敗 (adb/emulator クラッシュ), 再接続失敗
画面取得失敗 (adb/emulator クラッシュ), 再接続失敗
- `TouchModeNotAvailable`
サポートされていないタッチモード
サポートされていないタッチモード
### AsyncCallInfo
@@ -142,39 +142,39 @@ Todo
#### 多用される `taskchain` フィールドの値
- `StartUp`
ゲーム開始
ゲーム開始
- `CloseDown`
ゲームを閉じる
ゲームを閉じる
- `Fight`
作戦
作戦
- `Mall`
FPとFP交換所に買い物
FPとFP交換所に買い物
- `Recruit`
自動公開求人
自動公開求人
- `Infrast`
基地施設
基地施設
- `Award`
デイリー報酬を受け取る
デイリー報酬を受け取る
- `Roguelike`
統合戦略
統合戦略
- `Copilot`
自動作戦
自動作戦
- `SSSCopilot`
自動保全駐在作戦
自動保全駐在作戦
- `Depot`
倉庫の識別
倉庫の識別
- `OperBox`
オペレーターボックス識別
オペレーターボックス識別
- `Reclamation`
生息演算
生息演算
- `Custom`
カストム タスク
カストム タスク
- `SingleStep`
サブタスク
サブタスク
- `VideoRecognition`
ビデオ認識タスク
ビデオ認識タスク
- `Debug`
デバッグ
デバッグ
### TaskChain 関連情報
@@ -205,69 +205,69 @@ Todo
#### 多用される `subtask` フィールドの値
- `ProcessTask`
- `ProcessTask`
```json
// 対応する詳細フィールドの例
{
"task": "StartButton2", // タスク名
"action": 512,
"exec_times": 1, // 実行回数
"max_times": 999, // 最大実行回数
"algorithm": 0
}
```
```json
// 対応する詳細フィールドの例
{
"task": "StartButton2", // タスク名
"action": 512,
"exec_times": 1, // 実行回数
"max_times": 999, // 最大実行回数
"algorithm": 0
}
```
- Todo Other
##### 多用される `task` フィールドの値
- `StartButton2`
開始
開始
- `MedicineConfirm`
理性回復剤使用確認
理性回復剤使用確認
- `ExpiringMedicineConfirm`
48時間以内に期限が切れる理性回復剤使用確認
48時間以内に期限が切れる理性回復剤使用確認
- `StoneConfirm`
純正源石使用確認
純正源石使用確認
- `RecruitRefreshConfirm`
公開求人リストの更新確認
公開求人リストの更新確認
- `RecruitConfirm`
公開求人の確認
公開求人の確認
- `RecruitNowConfirm`
緊急招集票の使用確認
緊急招集票の使用確認
- `ReportToPenguinStats`
ペンギン急便への報告
ペンギン急便への報告
- `ReportToYituliu`
Yituliu へビッグデータの報告
Yituliu へビッグデータの報告
- `InfrastDormDoubleConfirmButton`
基地施設での二重確認は、他のオペレーターとの競合がある場合のみ発生します
基地施設での二重確認は、他のオペレーターとの競合がある場合のみ発生します
- `StartExplore`
統合戦略: 開始
統合戦略: 開始
- `StageTraderInvestConfirm`
統合戦略: 源石錐とアイテム交換
統合戦略: 源石錐とアイテム交換
- `StageTraderInvestSystemFull`
統合戦略: 投資満額
統合戦略: 投資満額
- `ExitThenAbandon`
統合戦略: 終了確認
統合戦略: 終了確認
- `MissionCompletedFlag`
統合戦略: ミッション完了
統合戦略: ミッション完了
- `MissionFailedFlag`
統合戦略: ミッション失敗
統合戦略: ミッション失敗
- `StageTraderEnter`
統合戦略: 怪しい旅商人
統合戦略: 怪しい旅商人
- `StageSafeHouseEnter`
統合戦略: 安全な片隅
統合戦略: 安全な片隅
- `StageEncounterEnter`
統合戦略: 思わぬ遭遇
統合戦略: 思わぬ遭遇
- `StageCombatDpsEnter`
統合戦略: 作戦
統合戦略: 作戦
- `StageEmergencyDps`
統合戦略: 緊急作戦
統合戦略: 緊急作戦
- `StageDreadfulFoe`
統合戦略: 悪路凶敵
統合戦略: 悪路凶敵
- `StartGameTask`
クライアントの起動に失敗 (client_type と設定ファイルの互換性なし)
クライアントの起動に失敗 (client_type と設定ファイルの互換性なし)
- Todo Other
### SubTaskExtraInfo
@@ -285,343 +285,343 @@ Todo
#### 多用される `what` と `details` フィールドの値
- `StageDrops`
ステージドロップインフォメーション
ステージドロップインフォメーション
```json
// 対応する詳細フィールドの例
{
"drops": [ // 今回のドロップされた素材
{
"itemId": "3301",
"quantity": 2,
"itemName": "アーツ学1"
},
{
"itemId": "3302",
"quantity": 1,
"itemName": "アーツ学2"
},
{
"itemId": "3303",
"quantity": 2,
"itemName": "アーツ学3"
}
],
"stage": { // レベル情報
"stageCode": "CA-5",
"stageId": "wk_fly_5"
},
"stars": 3, // ステージクリア評価
"stats": [ // この実行中にドロップされた素材の総量
{
"itemId": "3301",
"itemName": "アーツ学1",
"quantity": 4,
"addQuantity": 2 // 今回の新規ドロップ数
},
{
"itemId": "3302",
"itemName": "アーツ学2",
"quantity": 3,
"addQuantity": 1
},
{
"itemId": "3303",
"itemName": "アーツ学3",
"quantity": 4,
"addQuantity": 2
}
]
}
```
```json
// 対応する詳細フィールドの例
{
"drops": [ // 今回のドロップされた素材
{
"itemId": "3301",
"quantity": 2,
"itemName": "アーツ学1"
},
{
"itemId": "3302",
"quantity": 1,
"itemName": "アーツ学2"
},
{
"itemId": "3303",
"quantity": 2,
"itemName": "アーツ学3"
}
],
"stage": { // レベル情報
"stageCode": "CA-5",
"stageId": "wk_fly_5"
},
"stars": 3, // ステージクリア評価
"stats": [ // この実行中にドロップされた素材の総量
{
"itemId": "3301",
"itemName": "アーツ学1",
"quantity": 4,
"addQuantity": 2 // 今回の新規ドロップ数
},
{
"itemId": "3302",
"itemName": "アーツ学2",
"quantity": 3,
"addQuantity": 1
},
{
"itemId": "3303",
"itemName": "アーツ学3",
"quantity": 4,
"addQuantity": 2
}
]
}
```
- `RecruitTagsDetected`
採用タグの検出
採用タグの検出
```json
// 対応するフィールドの詳細
{
"tags": [
"COST回復",
"防御",
"先鋒タイプ",
"補助タイプ",
"近距離"
]
}
```
```json
// 対応するフィールドの詳細
{
"tags": [
"COST回復",
"防御",
"先鋒タイプ",
"補助タイプ",
"近距離"
]
}
```
- `RecruitSpecialTag`
特別な採用タグの検出
特別な採用タグの検出
```json
// 対応する詳細フィールドの例
{
"tag": "上級エリート"
}
```
```json
// 対応する詳細フィールドの例
{
"tag": "上級エリート"
}
```
- `RecruitResult`
公開求人結果
公開求人結果
```json
// 対応する詳細フィールドの例
{
"tags": [ // 全てのタグ、今のところは5つに違いない
"弱化",
"減速",
"術師タイプ",
"補助タイプ",
"近距離"
],
"level": 4, // 総合的なレアリティ
"result": [
{
"tags": [
"弱化"
],
"level": 4, // レアリティに対応するタグ
"opers": [
{
"name": "プラマニクス",
"level": 5 // レアリティに対応するオペレーター
},
{
"name": "メテオリーテ",
"level": 5
},
{
"name": "ワイフー",
"level": 5
},
{
"name": "ヘイズ",
"level": 4
},
{
"name": "メテオ",
"level": 4
}
]
},
{
"tags": [
"減速",
"術師タイプ"
],
"level": 4,
"opers": [
{
"name": "ナイトメア",
"level": 5
},
{
"name": "グレイ",
"level": 4
}
]
},
{
"tags": [
"弱化",
"術師タイプ"
],
"level": 4,
"opers": [
{
"name": "ヘイズ",
"level": 4
}
]
}
]
}
```
```json
// 対応する詳細フィールドの例
{
"tags": [ // 全てのタグ、今のところは5つに違いない
"弱化",
"減速",
"術師タイプ",
"補助タイプ",
"近距離"
],
"level": 4, // 総合的なレアリティ
"result": [
{
"tags": [
"弱化"
],
"level": 4, // レアリティに対応するタグ
"opers": [
{
"name": "プラマニクス",
"level": 5 // レアリティに対応するオペレーター
},
{
"name": "メテオリーテ",
"level": 5
},
{
"name": "ワイフー",
"level": 5
},
{
"name": "ヘイズ",
"level": 4
},
{
"name": "メテオ",
"level": 4
}
]
},
{
"tags": [
"減速",
"術師タイプ"
],
"level": 4,
"opers": [
{
"name": "ナイトメア",
"level": 5
},
{
"name": "グレイ",
"level": 4
}
]
},
{
"tags": [
"弱化",
"術師タイプ"
],
"level": 4,
"opers": [
{
"name": "ヘイズ",
"level": 4
}
]
}
]
}
```
- `RecruitTagsRefreshed`
公開求人タグの更新
公開求人タグの更新
```json
// 対応する詳細フィールドの例
{
"count": 1, // スロットが更新された回数
"refresh_limit": 3 // 更新最大回数
}
```
```json
// 対応する詳細フィールドの例
{
"count": 1, // スロットが更新された回数
"refresh_limit": 3 // 更新最大回数
}
```
- `RecruitNoPermit`
求人票が切れた
求人票が切れた
```json
// 対応する詳細フィールドの例
{
"continue": true, // 更新を続けるかどうか
}
```
```json
// 対応する詳細フィールドの例
{
"continue": true, // 更新を続けるかどうか
}
```
- `RecruitTagsSelected`
公開求人タグの選択
公開求人タグの選択
```json
// 対応する詳細フィールドの例
{
"tags": [
"減速",
"術師タイプ"
]
}
```
```json
// 対応する詳細フィールドの例
{
"tags": [
"減速",
"術師タイプ"
]
}
```
- `RecruitSlotCompleted`
公開求人スロットの完了
公開求人スロットの完了
- `RecruitError`
公開求人認識時のエラー
公開求人認識時のエラー
- `EnterFacility`
施設へ入る
施設へ入る
```json
// 対応する詳細フィールドの例
{
"facility": "Mfg", // 施設名
"index": 0 // 施設 ID
}
```
```json
// 対応する詳細フィールドの例
{
"facility": "Mfg", // 施設名
"index": 0 // 施設 ID
}
```
- `NotEnoughStaff`
オペレーター不足
オペレーター不足
```json
// 対応する詳細フィールドの例
{
"facility": "Mfg", // 施設名
"index": 0 // 施設 ID
}
```
```json
// 対応する詳細フィールドの例
{
"facility": "Mfg", // 施設名
"index": 0 // 施設 ID
}
```
- `ProductOfFacility`
施設の生産
施設の生産
```json
// 対応する詳細フィールドの例
{
"product": "Money", // 生産物
"facility": "Mfg", // 施設名
"index": 0 // 施設 ID
}
```
```json
// 対応する詳細フィールドの例
{
"product": "Money", // 生産物
"facility": "Mfg", // 施設名
"index": 0 // 施設 ID
}
```
- `StageInfo`
自動戦闘ステージの情報
自動戦闘ステージの情報
```json
// 対応する詳細フィールドの例
{
"name": string // ステージ名
}
```
```json
// 対応する詳細フィールドの例
{
"name": string // ステージ名
}
```
- `StageInfoError`
自動戦闘ステージの情報エラー
自動戦闘ステージの情報エラー
- `PenguinId`
PenguinStats ID
PenguinStats ID
```json
// 対応する詳細フィールドの例
{
"id": string
}
```
```json
// 対応する詳細フィールドの例
{
"id": string
}
```
- `DepotInfo`
倉庫のアイテムの認識結果
倉庫のアイテムの認識結果
```json
// 対応する詳細フィールドの例
"done": bool, // 認識が完了したかどうかfalse はまだ進行中かどうか(処理中のデータ)
"arkplanner": { // https://penguin-stats.cn/planner
"object": {
"items": [
{
"id": "2004",
"have": 4,
"name": "上級作戦記録"
},
{
"id": "mod_unlock_token",
"have": 25,
"name": "モジュールデータ"
},
{
"id": "2003",
"have": 20,
"name": "中級作戦記録"
}
],
"@type": "@penguin-statistics/depot"
},
"data": "{\"@type\":\"@penguin-statistics/depot\",\"items\":[{\"id\":\"2004\",\"have\":4,\"name\":\"上級作戦記録\"},{\"id\":\"mod_unlock_token\",\"have\":25,\"name\":\"モジュールデータ\"},{\"id\":\"2003\",\"have\":20,\"name\":\"中級作戦記録\"}]}"
},
"lolicon": { // https://arkntools.app/#/material
"object": {
"2004" : 4,
"mod_unlock_token": 25,
"2003": 20
},
"data": "{\"2003\":20,\"2004\": 4,\"mod_unlock_token\": 25}"
}
// 現在は ArkPlanner と Lolicon (Arkntools) 形式のみ対応、今後対応するサイトが増える可能性あり
```
```json
// 対応する詳細フィールドの例
"done": bool, // 認識が完了したかどうかfalse はまだ進行中かどうか(処理中のデータ)
"arkplanner": { // https://penguin-stats.cn/planner
"object": {
"items": [
{
"id": "2004",
"have": 4,
"name": "上級作戦記録"
},
{
"id": "mod_unlock_token",
"have": 25,
"name": "モジュールデータ"
},
{
"id": "2003",
"have": 20,
"name": "中級作戦記録"
}
],
"@type": "@penguin-statistics/depot"
},
"data": "{\"@type\":\"@penguin-statistics/depot\",\"items\":[{\"id\":\"2004\",\"have\":4,\"name\":\"上級作戦記録\"},{\"id\":\"mod_unlock_token\",\"have\":25,\"name\":\"モジュールデータ\"},{\"id\":\"2003\",\"have\":20,\"name\":\"中級作戦記録\"}]}"
},
"lolicon": { // https://arkntools.app/#/material
"object": {
"2004" : 4,
"mod_unlock_token": 25,
"2003": 20
},
"data": "{\"2003\":20,\"2004\": 4,\"mod_unlock_token\": 25}"
}
// 現在は ArkPlanner と Lolicon (Arkntools) 形式のみ対応、今後対応するサイトが増える可能性あり
```
- `OperBoxInfo`
オペレーターボックス識別結果
オペレーターボックス識別結果
```json
// 対応する詳細フィールドの例
"done": bool, // 認識が完了したかどうかfalse はまだ進行中かどうか(処理中のデータ)
"all_oper": [
{
"id": "char_002_amiya",
"name": "阿米娅",
"own": true
},
{
"id": "char_003_kalts",
"name": "凯尔希",
"own": true
},
{
"id": "char_1020_reed2",
"name": "焰影苇草",
"own": false
},
]
"own_opers": [
{
"id": "char_002_amiya", // オペレーターID
"name": "阿米娅", // 氏名、中国語で出力
"own": true, // 持っているかどうか
"elite": 2, // 昇進段階 0, 1, 2
"level": 50, // レベル
"potential": 6, // 潜在 [1, 6]
"rarity": 5 // レア度 [1, 6]
},
{
"id": "char_003_kalts",
"name": "凯尔希",
"own": true,
"elite": 2,
"level": 50,
"potential": 1,
"rarity": 6
}
]
```
```json
// 対応する詳細フィールドの例
"done": bool, // 認識が完了したかどうかfalse はまだ進行中かどうか(処理中のデータ)
"all_oper": [
{
"id": "char_002_amiya",
"name": "阿米娅",
"own": true
},
{
"id": "char_003_kalts",
"name": "凯尔希",
"own": true
},
{
"id": "char_1020_reed2",
"name": "焰影苇草",
"own": false
},
]
"own_opers": [
{
"id": "char_002_amiya", // オペレーターID
"name": "阿米娅", // 氏名、中国語で出力
"own": true, // 持っているかどうか
"elite": 2, // 昇進段階 0, 1, 2
"level": 50, // レベル
"potential": 6, // 潜在 [1, 6]
"rarity": 5 // レア度 [1, 6]
},
{
"id": "char_003_kalts",
"name": "凯尔希",
"own": true,
"elite": 2,
"level": 50,
"potential": 1,
"rarity": 6
}
]
```
- `UnsupportedLevel`
自動作戦で、サポートされていないレベル名
自動作戦で、サポートされていないレベル名
### ReportRequest

View File

@@ -28,7 +28,7 @@ JSONファイルはコメントをサポートしておらず、テキスト内
// 2 - X回使用例えば、マウンテン スキル2は1回、チョンユエ スキル3は5回、"skill_times" フィールドで設定)
// 3 - 自動判定 (未実装)
// 自動発動のスキルであれば0を記入
"skill_times": 5, // スキル使用回数。オプション、デフォルトは1
"requirements": { // 要件、予約フィールド、未実装、オプション、デフォルトは空白
@@ -110,7 +110,7 @@ JSONファイルはコメントをサポートしておらず、テキスト内
// 上記例の場合 1 に設定してください
"skill_times": 5, // スキル使用回数。オプション、デフォルトは1
"pre_delay": 0, // 事前遅延 msミリ秒, オプション, デフォルトは 0
"post_delay": 0, // 事後遅延 msミリ秒, オプション, デフォルトは 0

View File

@@ -52,6 +52,7 @@ JSONファイルはコメントをサポートしていません。テキスト
3. 既存のグループ名を変更しないでください。 MAA の更新時に以前のバージョンの作業が使用できなくなる可能性があります
4. 新しいグループを追加しないようにし、新しく追加されたユニットを使用法に基づいて既存のグループに組み込むようにしてください
:::
::: tip
@@ -87,31 +88,31 @@ JSONファイルはコメントをサポートしていません。テキスト
ファントムテーマを例に取ると:主にオペレーターを以下のように分類しています
| グループ | 主な考慮事項 | 主に職種を含む | オペレーターの例 |
| :--- | :--- | :--- | :--- |
| **_地面阻挡_** | 場に立つことと雑魚を清掃 | 重装、前衛 | 庇護衛士、基石、ラ・プルマ、マウンテン、M3、リィンとシーンの召喚ユニット、スポット、重装予備隊員 |
| **_地面单切_** | 一人でエリートモンスターと戦う | 執行者-特殊 | スルト、血掟テキサス、キリンRヤトウ、M3、レッド |
| **_高台 C_** | 常態と決戦DPS | 狙撃、術師 | 遊龍チェン、ゴールデングロー、エイヤフィヤトラ、フィアメッタ |
| **_高台输出_** | 対空および通常DPS | 狙撃、術師 | アルケット、エクシア、クルース、スチュワード |
| **_奶_** | 治療能力 | 医療、補助 | ケルシ、濁心スカジ、ハイビスカス、アンセル |
| **_回费_** | cost 回復 | 先鋒 | テンニンカ、イネス、フェン、バニラ |
| **_炮灰_** | 砲弾吸収、再配置 | 特殊、召喚ユニット | M3、レッド、テンニンカ、予備隊員 |
| **_高台预备_** | DPS能力を持っています | | オーキッド、予備隊員 |
| グループ | 主な考慮事項 | 主に職種を含む | オペレーターの例 |
| :------------- | :----------------------------- | :----------------- | :----------------------------------------------------------------------------------------------- |
| **_地面阻挡_** | 場に立つことと雑魚を清掃 | 重装、前衛 | 庇護衛士、基石、ラ・プルマ、マウンテン、M3、リィンとシーンの召喚ユニット、スポット、重装予備隊員 |
| **_地面单切_** | 一人でエリートモンスターと戦う | 執行者-特殊 | スルト、血掟テキサス、キリンRヤトウ、M3、レッド |
| **_高台 C_** | 常態と決戦DPS | 狙撃、術師 | 遊龍チェン、ゴールデングロー、エイヤフィヤトラ、フィアメッタ |
| **_高台输出_** | 対空および通常DPS | 狙撃、術師 | アルケット、エクシア、クルース、スチュワード |
| **_奶_** | 治療能力 | 医療、補助 | ケルシ、濁心スカジ、ハイビスカス、アンセル |
| **_回费_** | cost 回復 | 先鋒 | テンニンカ、イネス、フェン、バニラ |
| **_炮灰_** | 砲弾吸収、再配置 | 特殊、召喚ユニット | M3、レッド、テンニンカ、予備隊員 |
| **_高台预备_** | DPS能力を持っています | | オーキッド、予備隊員 |
2. 特別な操作が必要なグループ
上記のような一般的なグループ以外に、時折、特定のオペレーターやオペレーターの種類に対して細かいカスタマイズが必要な場合があります。例えば
| グループ | 含まれるオペレーター | 主な特徴 |
| :--- | :--- | :--- |
| 棘刺 | ソーンズ、ホルン | 地上遠隔攻撃、特定の位置に非常に適したマップがあります |
| 召唤类 | ケルシ、リィン、シーン | 地上ブロックを持ち、一部のマップでは優先的に配置する必要があり、召喚物はブロックまたは死体として使用できます |
| 情报官 | カンタービレ、イネス | コスト回収やサイドアウトプット、シングルカットが可能 |
| 浊心斯卡蒂 | 濁心スカジ | 低圧時の回復量はまあまあですが、範囲が特殊で、一部のマップには特に適しています |
| 焰苇 | 焔影リード | サーミローグはよく開局オペレーターを使い、治療と輸出を兼ねており、いくつかの図には比較的適切な位置がある |
| 银灰 | シルバーアッシュ、ムリナール | 地上の大規模な戦闘出力、ボスに対して配置できます |
| 史尔特尔 | スルト | 精二後、3スキルを固定搭載するため、この時点でのスタンバイ能力はほぼゼロで、ブロック位置の配置優先度は非常に低いです |
| 骰子 | ダイス | ミヅキテーマの中のダイスは個別に操作する必要があります |
| グループ | 含まれるオペレーター | 主な特徴 |
| :--------- | :--------------------------- | :------------------------------------------------------------------------------------------------------------------ |
| 棘刺 | ソーンズ、ホルン | 地上遠隔攻撃、特定の位置に非常に適したマップがあります |
| 召唤类 | ケルシ、リィン、シーン | 地上ブロックを持ち、一部のマップでは優先的に配置する必要があり、召喚物はブロックまたは死体として使用できます |
| 情报官 | カンタービレ、イネス | コスト回収やサイドアウトプット、シングルカットが可能 |
| 浊心斯卡蒂 | 濁心スカジ | 低圧時の回復量はまあまあですが、範囲が特殊で、一部のマップには特に適しています |
| 焰苇 | 焔影リード | サーミローグはよく開局オペレーターを使い、治療と輸出を兼ねており、いくつかの図には比較的適切な位置がある |
| 银灰 | シルバーアッシュ、ムリナール | 地上の大規模な戦闘出力、ボスに対して配置できます |
| 史尔特尔 | スルト | 精二後、3スキルを固定搭載するため、この時点でのスタンバイ能力はほぼゼロで、ブロック位置の配置優先度は非常に低いです |
| 骰子 | ダイス | ミヅキテーマの中のダイスは個別に操作する必要があります |
::: info 注意
現在、識別されていない近距離オペレーターは最後から2番目のグループ其他地面に分類され、識別されていない遠距離オペレーターは最後から1番目のグループ其他高台に分類されます
@@ -217,7 +218,6 @@ JSONファイルはコメントをサポートしていません。テキスト
### MAA ローグの基本戦闘ロジック--パラスちゃんの高血圧の源
1. マップ上のタイルの種類に基づいた基本的な戦闘操作
- MAA はマップ上のタイルが青い扉か赤い扉か、高台か地面か、配置可能かどうかに基づいて基本的な戦闘操作を行います。
- MAA はマップの名前や番号に基づいてどの作業を使用するかを決定し、マップの**一般**、**緊急**、**ルートネット**、**暗号板使用**などの状況を判断しません。
@@ -226,7 +226,6 @@ JSONファイルはコメントをサポートしていません。テキスト
したがって、後で、**すべての異なる状況**上記で言及した状況に対処できる戦闘ロジックを設計する必要があります。皆に「このマップの操作は高血圧だ」とissueで言われないように気をつけてください
2. MAA の基本的な作戦戦略--青い扉を封鎖
1. 地面オペレーターは青い扉のタイルに優先して配置されます(なぜタイル上なのかは後で説明)、またはその周囲に配置され、方向は赤い扉に向けられます(自動計算)。
2. 地面を優先して配置し、その後治療オペレーターや高台オペレーターを配置し、青い扉から周囲に向かって一周ずつ配置します。

View File

@@ -26,22 +26,22 @@ TaskId ASSTAPI AsstAppendTask(AsstHandle handle, const char* type, const char* p
#### Return Value
- `TaskId`
以下の構成で、タスクの追加に成功した場合のタスクID;
タスクの追加に失敗した場合は0。
以下の構成で、タスクの追加に成功した場合のタスクID;
タスクの追加に失敗した場合は0。
#### Parameter Description
- `AsstHandle handle`
Instance handle
Instance handle
- `const char* type`
Task type
Task type
- `const char* params`
Task parameters in JSON
Task parameters in JSON
##### List of Task Types
- `StartUp`
Start-up
Start-up
```json5
// 対応するタスクのパラメータ
@@ -58,7 +58,7 @@ TaskId ASSTAPI AsstAppendTask(AsstHandle handle, const char* type, const char* p
```
- `CloseDown`
ゲームを閉じる
ゲームを閉じる
```json5
// 対応するタスクのパラメータ
@@ -70,7 +70,7 @@ TaskId ASSTAPI AsstAppendTask(AsstHandle handle, const char* type, const char* p
```
- `Fight`
Operation
Operation
```json5
// 対応するタスクのパラメータ
@@ -109,7 +109,7 @@ TaskId ASSTAPI AsstAppendTask(AsstHandle handle, const char* type, const char* p
いくつかの特別ステージ名もサポートしています、[組み込み例](https://github.com/MaaAssistantArknights/MaaAssistantArknights/blob/master/tools/AutoLocalization/example/ja-jp.xaml#L230)をご参照ください
- `Recruit`
公開求人
公開求人
```json5
// 対応するタスクのパラメータ
@@ -151,7 +151,7 @@ TaskId ASSTAPI AsstAppendTask(AsstHandle handle, const char* type, const char* p
```
- `Infrast`
基地シフト
基地シフト
```json5
{
@@ -179,8 +179,8 @@ TaskId ASSTAPI AsstAppendTask(AsstHandle handle, const char* type, const char* p
```
- `Mall`
FPの回収と自動購入
最初に `buy_first` にあるものを左から右に押して順番に一度購入し、次に左から右に2回購入して`blacklist` を回避し、FPオーバーフローの場合はブラックリストを無視して、オーバーフローしなくなるまで左から右に3回目に購入します。
FPの回収と自動購入
最初に `buy_first` にあるものを左から右に押して順番に一度購入し、次に左から右に2回購入して`blacklist` を回避し、FPオーバーフローの場合はブラックリストを無視して、オーバーフローしなくなるまで左から右に3回目に購入します。
```json5
// 対応するタスクのパラメータ
@@ -206,7 +206,7 @@ TaskId ASSTAPI AsstAppendTask(AsstHandle handle, const char* type, const char* p
```
- `Award`
報酬の受け取り
報酬の受け取り
```json5
// 対応するタスクのパラメータ
@@ -216,7 +216,7 @@ TaskId ASSTAPI AsstAppendTask(AsstHandle handle, const char* type, const char* p
```
- `Roguelike`
統合戦略
統合戦略
```json5
// 対応するタスクパラメータ
@@ -282,7 +282,7 @@ TaskId ASSTAPI AsstAppendTask(AsstHandle handle, const char* type, const char* p
```
- `Copilot`
自動戦闘
自動戦闘
```json5
{
@@ -295,7 +295,7 @@ TaskId ASSTAPI AsstAppendTask(AsstHandle handle, const char* type, const char* p
自動操縦JSONの詳細については、[自動戦闘API](./copilot-schema.md)を参照してください
- `SSSCopilot`
保全駐在の自動戦闘
保全駐在の自動戦闘
```json5
{
@@ -308,7 +308,7 @@ TaskId ASSTAPI AsstAppendTask(AsstHandle handle, const char* type, const char* p
保全駐在の自動操縦JSONの詳細については、[保全駐在API](./sss-schema.md)
- `Depot`
倉庫アイテム認識
倉庫アイテム認識
```json5
// 対応するタスクのパラメータ
@@ -318,7 +318,7 @@ TaskId ASSTAPI AsstAppendTask(AsstHandle handle, const char* type, const char* p
```
- `OperBox`
カドレー識別
カドレー識別
```json5
// 対応するタスクのパラメータ
@@ -328,7 +328,7 @@ TaskId ASSTAPI AsstAppendTask(AsstHandle handle, const char* type, const char* p
```
- `Reclamation`
生息演算
生息演算
```json5
{
@@ -343,7 +343,7 @@ TaskId ASSTAPI AsstAppendTask(AsstHandle handle, const char* type, const char* p
"tools_to_craft": [
string, // 自動的に製造されるアイテム、オプション、デフォルトは螢光棒
...
]
]
// サブストリングを入力することをお勧めします
"increment_mode": int, // クリックタイプ、オプション、デフォルトは0
// 0 - 連続クリック
@@ -353,7 +353,7 @@ TaskId ASSTAPI AsstAppendTask(AsstHandle handle, const char* type, const char* p
```
- `Custom`
カスタム タスク
カスタム タスク
```json5
{
@@ -367,7 +367,7 @@ TaskId ASSTAPI AsstAppendTask(AsstHandle handle, const char* type, const char* p
```
- `SingleStep`
シングル ステップ タスク(現在は戦闘でのみ利用可能)
シングル ステップ タスク(現在は戦闘でのみ利用可能)
```json5
{
@@ -385,7 +385,7 @@ TaskId ASSTAPI AsstAppendTask(AsstHandle handle, const char* type, const char* p
```
- `VideoRecognition`
ビデオ認識、現在は作戦ビデオのみ対応
ビデオ認識、現在は作戦ビデオのみ対応
```json5
{
@@ -409,17 +409,17 @@ bool ASSTAPI AsstSetTaskParams(AsstHandle handle, TaskId id, const char* params)
#### Return Value
- `bool`
パラメータが正常に設定されたかどうか。
パラメータが正常に設定されたかどうか。
#### Parameter Description
- `AsstHandle handle`
Instance handle
Instance handle
- `TaskId task`
Task ID, `AsstAppendTask` の値を返します
Task ID, `AsstAppendTask` の値を返します
- `const char* params`
JSONのタスクパラメーター, `AsstAppendTask` と同じ
"動作中に変更はできません" と記載されていないフィールドはランタイム中に変更することができます. そうでなければ、タスクの実行中にこれらの変更は無視される.
JSONのタスクパラメーター, `AsstAppendTask` と同じ
"動作中に変更はできません" と記載されていないフィールドはランタイム中に変更することができます. そうでなければ、タスクの実行中にこれらの変更は無視される.
### `AsstSetStaticOption`
@@ -436,14 +436,14 @@ bool ASSTAPI AsstSetStaticOption(AsstStaticOptionKey key, const char* value);
#### Return Value
- `bool`
設定が成功したかどうか
設定が成功したかどうか
#### Parameter Description
- `AsstStaticOptionKey key`
key
key
- `const char* value`
value
value
##### List of Key and value
@@ -464,16 +464,16 @@ bool ASSTAPI AsstSetInstanceOption(AsstHandle handle, AsstInstanceOptionKey key,
#### Return Value
- `bool`
設定が成功したかどうか
設定が成功したかどうか
#### Parameter Description
- `AsstHandle handle`
handle
handle
- `AsstInstanceOptionKey key`
key
key
- `const char* value`
value
value
##### List of Key and value

View File

@@ -88,7 +88,8 @@ MAA は、エンドポイントを 1 秒間隔で継続的にポーリングし
- Settings-[SettingsName] タイプのタスクtypeのオプション値は Settings-ConnectionAddress, Settings-Stage1
- Settings シリーズのタスクは、タスクを受け取ったときにすぐに実行するのではなく、前のタスクの後ろに配置されています。
- すぐに実行される複数のタスクも送信順序で実行されますが、これらのタスクの実行速度は速いため、通常、彼らの順序に注目する必要はありません。
:::
:::
## タスクデータの報告エンドポイント

View File

@@ -193,28 +193,28 @@ Template task と base task は、**テンプレートタスク**と総称され
- もしタスク "B@A" が `tasks.json` で明示的に定義されていない場合、 `sub``next``onErrorNext``exceededNext``reduceOtherTimes` のフィールド(もしくはタスク名が `#` で始まる場合は `B`)に `B@` の接頭辞を追加し、残りのパラメータはタスク "A" のものと同じになります。つまり、タスク "A" が以下のパラメータを持つ場合、
```json
"A": {
"template": "A.png",
...,
"next": [ "N1", "N2" ]
}
```
```json
"A": {
"template": "A.png",
...,
"next": [ "N1", "N2" ]
}
```
以下の両方を定義することと同じです。
以下の両方を定義することと同じです。
```json
"B@A": {
"template": "A.png",
...,
"next": [ "B@N1", "B@N2" ]
}
```
```json
"B@A": {
"template": "A.png",
...,
"next": [ "B@N1", "B@N2" ]
}
```
- もしタスク "B@A" が `tasks.json` で定義されている場合、以下のルールに従います。
1. もし "B@A" の `algorithm` フィールドが "A" のものと異なる場合、派生クラスのパラメータは継承されません(`TaskInfo` によって定義されたパラメータのみが継承されます)。
2. 画像マッチングタスクの場合、明示的に定義されていない場合は `template` は `B@A.png` となります("A" の `template` 名を継承するのではなく、派生クラスのパラメータは直接 "A" タスクから継承されます)。
3. `TaskInfo` 基底クラスで定義されたパラメータ(`algorithm`、`roi`、`next` などの任意のタスクパラメータの種類)について、"B@A" で明示的に定義されていない場合、これらのパラメータは "A" タスクパラメータから直接継承されます。ただし、前述の5つのフィールド`sub` など)は、継承時に "B@" が接頭辞として付加されます。
1. もし "B@A" の `algorithm` フィールドが "A" のものと異なる場合、派生クラスのパラメータは継承されません(`TaskInfo` によって定義されたパラメータのみが継承されます)。
2. 画像マッチングタスクの場合、明示的に定義されていない場合は `template` は `B@A.png` となります("A" の `template` 名を継承するのではなく、派生クラスのパラメータは直接 "A" タスクから継承されます)。
3. `TaskInfo` 基底クラスで定義されたパラメータ(`algorithm`、`roi`、`next` などの任意のタスクパラメータの種類)について、"B@A" で明示的に定義されていない場合、これらのパラメータは "A" タスクパラメータから直接継承されます。ただし、前述の5つのフィールド`sub` など)は、継承時に "B@" が接頭辞として付加されます。
### Base Task
@@ -239,11 +239,11 @@ Virtual task は sharp task `#` タイプのタスク)とも呼ばれます
名前に `#` を含むタスクは virtual task です。`#` の後には `next`、`back`、`self`、`sub`、`on_error_next`、`exceeded_next`、`reduce_other_times` が続くことがあります。
| 仮想タスクタイプ | 意味 | 簡単な例 |
|:---------:|:---:|:--------:|
| self | 親タスク名 | `"A": {"next": "#self"}` の `"#self"` は `"A"` と解釈されます。<br>`"B": {"next": "A@B@C#self"}` の `"A@B@C#self"` は `"B"` と解釈されます。<sup>1</sup> |
| back | # の前のタスク名 | `"A@B#back"` は `"A@B"` と解釈されます。<br>もし直接現れた場合は `"#back"` はスキップされます。 |
| next、sub など | 前のタスク名に対応するフィールド | `next` を例に取ります。<br>`"A#next"` は `Task.get("A")->next` と解釈されます。<br>もし直接現れた場合は `"#next"` はスキップされます。 |
| 仮想タスクタイプ | 意味 | 簡単な例 |
| :--------------: | :------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------: |
| self | 親タスク名 | `"A": {"next": "#self"}` の `"#self"` は `"A"` と解釈されます。<br>`"B": {"next": "A@B@C#self"}` の `"A@B@C#self"` は `"B"` と解釈されます。<sup>1</sup> |
| back | # の前のタスク名 | `"A@B#back"` は `"A@B"` と解釈されます。<br>もし直接現れた場合は `"#back"` はスキップされます。 |
| next、sub など | 前のタスク名に対応するフィールド | `next` を例に取ります。<br>`"A#next"` は `Task.get("A")->next` と解釈されます。<br>もし直接現れた場合は `"#next"` はスキップされます。 |
_注<sup>1</sup>`"XXX#self"` は `"#self"` と同じ意味を持ちます。_
@@ -333,14 +333,14 @@ default:
## 式の計算
| 記号 | 意味 | 例 |
|:---------:|:---:|:--------:|
| `@` | テンプレートタスク | `Fight@ReturnTo` |
| `#`(単項) | 仮想タスク | `#self` |
| `#`(二項) | 仮想タスク | `StartUpThemes#next` |
| `*` | タスクの繰り返し | `(ClickCornerAfterPRTS+ClickCorner)*5` |
| `+` | タスクリストの結合next の一連のプロパティで同じ名前を持つ最初のタスクのみが保持されます) | `A+B` |
| `^` | タスクリストの差分(前者にあり、後者にないもので、順序は変わらない) | `(A+A+B+C)^(A+B+D)` (= `C`) |
| 記号 | 意味 | 例 |
| :---------: | :-----------------------------------------------------------------------------------------: | :------------------------------------: |
| `@` | テンプレートタスク | `Fight@ReturnTo` |
| `#`(単項) | 仮想タスク | `#self` |
| `#`(二項) | 仮想タスク | `StartUpThemes#next` |
| `*` | タスクの繰り返し | `(ClickCornerAfterPRTS+ClickCorner)*5` |
| `+` | タスクリストの結合next の一連のプロパティで同じ名前を持つ最初のタスクのみが保持されます) | `A+B` |
| `^` | タスクリストの差分(前者にあり、後者にないもので、順序は変わらない) | `(A+A+B+C)^(A+B+D)` (= `C`) |
演算子 `@`、`#`、`*`、`+`、`^` には優先順位があります: `#`(単項)> `@` = `#`(二項)> `*` > `+` = `^`。

Some files were not shown because too many files have changed in this diff Show More