[{"content":"免费节点跑在 Cloudflare 上，订阅正常下发八十多个节点。免费额度有三条独立的线，每条都摸过一遍。\n第一条是 Workers 每日请求数，上限 10 万。实际每天约 9.5 万，只差 5%。有次凌晨收到 75% 告警，19 小时用了 7.5 万，赶不上早上 8 点重置才没断。结论是每天都在额度边缘，一忙就断。升付费版（每月 5 美元）还是先看控制台指标，还没定。\n第二条是 KV 读次数。有天连收 50% 告警，查了控制台才发现烧量的不是节点用的 Worker，而是另一个 Pages 项目：它两次部署后绑定的命名空间 24 小时读了 6.3 万次，占全账户约 98%。节点那个 Worker 当天只读了 25 次，是无辜的。处理那个项目还是升级付费版，等拍板。还有一封告警和控制台数字对不上，原因没查出来。\n第三条是 CPU 时间。过去 24 小时超限 100 多次，超限时 Worker 会被中途停掉、表现为报错或打不开。告警没点名是哪个 Worker 超限，进控制台查的那次中途断了，没拿到数据。查清之前，不替它选升付费还是停项目。\n另外 12 月 1 日起 Workers 日志改按量计费（摄入 GB 和存储 GB·月），免费版每天 0.5 GB、保留 7 天，超量当天暂停、不产生账单。平时不依赖日志的话不用管。\n还有个 ECH 的教训：有次全部节点不通，一度以为是 ECH 本身的问题，结果是配置里选的阿里 DoH 拉不到 ECH 配置导致握手失败，换个 DNS 源就全通了。以后排查 ECH 先换 DoH，再动 ECH 开关。\n","permalink":"https://blog.bd4two.eu.org/posts/cfnew-quota/","summary":"\u003cp\u003e免费节点跑在 Cloudflare 上，订阅正常下发八十多个节点。免费额度有三条独立的线，每条都摸过一遍。\u003c/p\u003e\n\u003cp\u003e第一条是 Workers 每日请求数，上限 10 万。实际每天约 9.5 万，只差 5%。有次凌晨收到 75% 告警，19 小时用了 7.5 万，赶不上早上 8 点重置才没断。结论是每天都在额度边缘，一忙就断。升付费版（每月 5 美元）还是先看控制台指标，还没定。\u003c/p\u003e\n\u003cp\u003e第二条是 KV 读次数。有天连收 50% 告警，查了控制台才发现烧量的不是节点用的 Worker，而是另一个 Pages 项目：它两次部署后绑定的命名空间 24 小时读了 6.3 万次，占全账户约 98%。节点那个 Worker 当天只读了 25 次，是无辜的。处理那个项目还是升级付费版，等拍板。还有一封告警和控制台数字对不上，原因没查出来。\u003c/p\u003e\n\u003cp\u003e第三条是 CPU 时间。过去 24 小时超限 100 多次，超限时 Worker 会被中途停掉、表现为报错或打不开。告警没点名是哪个 Worker 超限，进控制台查的那次中途断了，没拿到数据。查清之前，不替它选升付费还是停项目。\u003c/p\u003e\n\u003cp\u003e另外 12 月 1 日起 Workers 日志改按量计费（摄入 GB 和存储 GB·月），免费版每天 0.5 GB、保留 7 天，超量当天暂停、不产生账单。平时不依赖日志的话不用管。\u003c/p\u003e\n\u003cp\u003e还有个 ECH 的教训：有次全部节点不通，一度以为是 ECH 本身的问题，结果是配置里选的阿里 DoH 拉不到 ECH 配置导致握手失败，换个 DNS 源就全通了。以后排查 ECH 先换 DoH，再动 ECH 开关。\u003c/p\u003e","title":"Cloudflare 免费节点与额度线"},{"content":"11 月 4 日给自己定了一条规矩：这台 Mac 的系统停在当前版本，不再往上升。以后凡是涉及系统升级的建议，都先确认，不默认推荐升级。\n底线先落实。自动更新设置里，“下载可用的更新”和“安装 macOS 更新”都已关掉，应用更新和安全响应留着开。自动更新关了，系统就不会自己升，横幅只是碍眼。\n光有关自动更新还不够，系统还会推送新版本横幅。办法是装一个 90 天延迟描述文件，让新版本晚 90 天再出现。第一版没生效：查安装器列表，新版本那行延迟标志还是 NO。原因是第一版没写系统级作用域，装成了用户级。改了一版带系统级作用域的，准备重新装。\n这里有个坑：新系统上命令行安装描述文件已被废弃，必须走图形界面——系统设置、通用、设备管理里装。流程是先删掉旧的描述文件，再双击新文件，在设备管理里批准，装完重跑安装器列表，看新版本那行延迟标志是否变成 YES。\n现状：新版描述文件的图形安装结果还没验证。底线已经守住了，系统不会自己升级，剩下的只是让横幅晚点出现。另外提醒自己：系统更新后弹出的“以后将自动为你下载安装更新”不要点继续，点了会把自动更新重新打开；新版本横幅上的升级按钮也别点。\n","permalink":"https://blog.bd4two.eu.org/posts/macos-version-hold/","summary":"\u003cp\u003e11 月 4 日给自己定了一条规矩：这台 Mac 的系统停在当前版本，不再往上升。以后凡是涉及系统升级的建议，都先确认，不默认推荐升级。\u003c/p\u003e\n\u003cp\u003e底线先落实。自动更新设置里，“下载可用的更新”和“安装 macOS 更新”都已关掉，应用更新和安全响应留着开。自动更新关了，系统就不会自己升，横幅只是碍眼。\u003c/p\u003e\n\u003cp\u003e光有关自动更新还不够，系统还会推送新版本横幅。办法是装一个 90 天延迟描述文件，让新版本晚 90 天再出现。第一版没生效：查安装器列表，新版本那行延迟标志还是 NO。原因是第一版没写系统级作用域，装成了用户级。改了一版带系统级作用域的，准备重新装。\u003c/p\u003e\n\u003cp\u003e这里有个坑：新系统上命令行安装描述文件已被废弃，必须走图形界面——系统设置、通用、设备管理里装。流程是先删掉旧的描述文件，再双击新文件，在设备管理里批准，装完重跑安装器列表，看新版本那行延迟标志是否变成 YES。\u003c/p\u003e\n\u003cp\u003e现状：新版描述文件的图形安装结果还没验证。底线已经守住了，系统不会自己升级，剩下的只是让横幅晚点出现。另外提醒自己：系统更新后弹出的“以后将自动为你下载安装更新”不要点继续，点了会把自动更新重新打开；新版本横幅上的升级按钮也别点。\u003c/p\u003e","title":"Mac 系统停在 15.8.2"},{"content":"11 月初给 Mac 挑了几样小工具：动态壁纸、文本编辑器、终端。每一件都按实际需求分开算，不给笼统的“最好用”。\n动态壁纸想要黑客帝国瀑布式数字雨。做法是自己写一个单文件网页画数字雨，绿字拖尾、亮雨头，密度、速度、拖尾都能调；再用免费应用 Plash 把这个本地网页设为桌面。限制要先说清楚：只在解锁后的桌面可见，锁屏看不到；Plash 新版要求比较新的系统，老系统要用匹配的旧版。装好没有、显示正不正常，还没确认。\n文本编辑器问了三轮，答案得分开算。只装一个，选 VS Code，插件、Git、终端、调试一体。纯文本处理选 BBEdit，下载包最小，但界面只有英文，编辑中文内容不受影响。跑起来最轻快是 Zed，空闲内存比 VS Code 少得多。后来又补了一个同时满足小巧加中文界面的：CotEditor，免费、Mac 原生、带简体中文，下载包比 BBEdit 还小；但它是纯文本编辑器不是 IDE，写代码做项目还是 VS Code。选哪个还没定。\n终端默认推荐 Ghostty，功能最多的备选是 iTerm2，想要 AI 和分块功能的可以看 Warp。装没装还没确认。\n现状：壁纸和编辑器都等我自己确认结果，工具推荐不替我做决定。\n","permalink":"https://blog.bd4two.eu.org/posts/mac-tools/","summary":"\u003cp\u003e11 月初给 Mac 挑了几样小工具：动态壁纸、文本编辑器、终端。每一件都按实际需求分开算，不给笼统的“最好用”。\u003c/p\u003e\n\u003cp\u003e动态壁纸想要黑客帝国瀑布式数字雨。做法是自己写一个单文件网页画数字雨，绿字拖尾、亮雨头，密度、速度、拖尾都能调；再用免费应用 Plash 把这个本地网页设为桌面。限制要先说清楚：只在解锁后的桌面可见，锁屏看不到；Plash 新版要求比较新的系统，老系统要用匹配的旧版。装好没有、显示正不正常，还没确认。\u003c/p\u003e\n\u003cp\u003e文本编辑器问了三轮，答案得分开算。只装一个，选 VS Code，插件、Git、终端、调试一体。纯文本处理选 BBEdit，下载包最小，但界面只有英文，编辑中文内容不受影响。跑起来最轻快是 Zed，空闲内存比 VS Code 少得多。后来又补了一个同时满足小巧加中文界面的：CotEditor，免费、Mac 原生、带简体中文，下载包比 BBEdit 还小；但它是纯文本编辑器不是 IDE，写代码做项目还是 VS Code。选哪个还没定。\u003c/p\u003e\n\u003cp\u003e终端默认推荐 Ghostty，功能最多的备选是 iTerm2，想要 AI 和分块功能的可以看 Warp。装没装还没确认。\u003c/p\u003e\n\u003cp\u003e现状：壁纸和编辑器都等我自己确认结果，工具推荐不替我做决定。\u003c/p\u003e","title":"Mac 小工具"},{"content":"10 月 10 日开始在 Mac mini 上装一套硬件桥接：把 AI 会话接到一个终端设备上。包和固件都按校验和验过，没问题。\n装的过程中遇到一个小插曲：桥接代码写死走 Chrome，但我不想装 Chrome。解决办法是改一行代码，让它走我已有的 Edge，改之前原文件做了备份。\n真正卡住的地方在健康检查。桥要找会话页面的输入框来确认就绪，但我给它的地址是个侧边对话，页面结构和普通主会话不一样，输入框根本不存在，健康检查一直报未就绪。串口和刷固件的步骤必须等桥健康之后再做，顺序不能乱。\n下一步很具体：在桥专用的浏览器窗口里打开一个普通主会话，发一句问候，把新的会话地址给我，重启桥再验健康。\n现状：等这条普通主会话链接，桥接停在我这边。\n","permalink":"https://blog.bd4two.eu.org/posts/ai-passport/","summary":"\u003cp\u003e10 月 10 日开始在 Mac mini 上装一套硬件桥接：把 AI 会话接到一个终端设备上。包和固件都按校验和验过，没问题。\u003c/p\u003e\n\u003cp\u003e装的过程中遇到一个小插曲：桥接代码写死走 Chrome，但我不想装 Chrome。解决办法是改一行代码，让它走我已有的 Edge，改之前原文件做了备份。\u003c/p\u003e\n\u003cp\u003e真正卡住的地方在健康检查。桥要找会话页面的输入框来确认就绪，但我给它的地址是个侧边对话，页面结构和普通主会话不一样，输入框根本不存在，健康检查一直报未就绪。串口和刷固件的步骤必须等桥健康之后再做，顺序不能乱。\u003c/p\u003e\n\u003cp\u003e下一步很具体：在桥专用的浏览器窗口里打开一个普通主会话，发一句问候，把新的会话地址给我，重启桥再验健康。\u003c/p\u003e\n\u003cp\u003e现状：等这条普通主会话链接，桥接停在我这边。\u003c/p\u003e","title":"Muse Terminal AI Passport"},{"content":"手里这台 Newifi D1 是我的 MMDVM 数字热点用机。现用固件里塞了不少用不上的插件，11 月 5 日决定自己编一套精简版，只留要用的东西。\n规格先定死：全模式都要，热点板走板载串口，配置由我手动填、服务默认不启用。呼号 BD4TWO 预填进配置文件和网关模板，DMR ID、频率、服务器密码留空占位，绝不编造。型号栏显示我自己的呼号，仪表盘也要带上。底座用官方 OpenWrt 24.10.5，镜像上限 32MB，刷机走 Breed，不保留旧配置。\n第一版很快编出来了，约 13.9MB，刷上去却起不来：蓝灯一直闪，电脑拿不到地址。查编译日志没报错，镜像结构也对得上。起初怀疑网线插错了口——这台机器一共只有 3 个网口（1 个 WAN 加 2 个 LAN），我之前还错说成 4 个 LAN 口。Breed 重刷还是一样。\n第二版改按正规的 MMDVM 饲料包重编，同时编了一个纯净官方对照版。纯净版一刷就起了，证明硬件没问题；再刷第二版，还是蓝灯闪、拿不到地址。\n接着查到两个可疑点：饲料包的十几个启动脚本都在等一个默认关闭的无线接口，最坏要串行等十几分钟；几条首次启动脚本在停用服务前先调停止命令，首次启动时服务根本没跑过。第三版把两处都修了，仍然不行。\n于是做二分对照：干净底子加整份自定义文件层，起不来；干净底子只改 inittab 里的一行，也起不来。解包对比发现两份镜像唯一差别是 inittab 少了一行串口登录。按这个思路编了第四版，把 inittab 换回官方原版，结果还是不行。\n两次结论互相矛盾，说明有混杂因素：可能是纯净版能起只是当时的状态，之后设备、刷机或线路侧变了；也可能是后续刷写没生效，或电脑侧还留着手动地址没切回自动获取。继续盲刷没有意义。\n现状：停在重刷纯净对照版做决定性验证。能起，问题还在镜像里；起不来，问题就不在固件，改查设备、刷机和线路。教训是反复失败时先做一次决定性对照再编下一个版本，指示灯和地址分配说了算。\n","permalink":"https://blog.bd4two.eu.org/posts/d1-mmdvm-firmware/","summary":"\u003cp\u003e手里这台 Newifi D1 是我的 MMDVM 数字热点用机。现用固件里塞了不少用不上的插件，11 月 5 日决定自己编一套精简版，只留要用的东西。\u003c/p\u003e\n\u003cp\u003e规格先定死：全模式都要，热点板走板载串口，配置由我手动填、服务默认不启用。呼号 BD4TWO 预填进配置文件和网关模板，DMR ID、频率、服务器密码留空占位，绝不编造。型号栏显示我自己的呼号，仪表盘也要带上。底座用官方 OpenWrt 24.10.5，镜像上限 32MB，刷机走 Breed，不保留旧配置。\u003c/p\u003e\n\u003cp\u003e第一版很快编出来了，约 13.9MB，刷上去却起不来：蓝灯一直闪，电脑拿不到地址。查编译日志没报错，镜像结构也对得上。起初怀疑网线插错了口——这台机器一共只有 3 个网口（1 个 WAN 加 2 个 LAN），我之前还错说成 4 个 LAN 口。Breed 重刷还是一样。\u003c/p\u003e\n\u003cp\u003e第二版改按正规的 MMDVM 饲料包重编，同时编了一个纯净官方对照版。纯净版一刷就起了，证明硬件没问题；再刷第二版，还是蓝灯闪、拿不到地址。\u003c/p\u003e\n\u003cp\u003e接着查到两个可疑点：饲料包的十几个启动脚本都在等一个默认关闭的无线接口，最坏要串行等十几分钟；几条首次启动脚本在停用服务前先调停止命令，首次启动时服务根本没跑过。第三版把两处都修了，仍然不行。\u003c/p\u003e\n\u003cp\u003e于是做二分对照：干净底子加整份自定义文件层，起不来；干净底子只改 inittab 里的一行，也起不来。解包对比发现两份镜像唯一差别是 inittab 少了一行串口登录。按这个思路编了第四版，把 inittab 换回官方原版，结果还是不行。\u003c/p\u003e\n\u003cp\u003e两次结论互相矛盾，说明有混杂因素：可能是纯净版能起只是当时的状态，之后设备、刷机或线路侧变了；也可能是后续刷写没生效，或电脑侧还留着手动地址没切回自动获取。继续盲刷没有意义。\u003c/p\u003e\n\u003cp\u003e现状：停在重刷纯净对照版做决定性验证。能起，问题还在镜像里；起不来，问题就不在固件，改查设备、刷机和线路。教训是反复失败时先做一次决定性对照再编下一个版本，指示灯和地址分配说了算。\u003c/p\u003e","title":"Newifi D1 精简 MMDVM 固件"},{"content":"家里在用 Panabit 流控，有次想禁掉一个地址。管理页里现成的示范规则看着很像答案，但用错地方会白忙一场。\n关键区别是：DNS 管控只能断 DNS 查询。照着示范规则在 DNS 管控里仿一条，只能拦住域名解析，对方直接连 IP 地址照样通。想断掉某个地址的全部流量，得走流量控制：建一条策略组匹配那个地址，绑到一个上下行带宽都是 0 的数据通道上，等于阻断。\n策略组和地址对象、丢弃动作的用法，管理页里已有现成规则可以照着抄，照猫画虎不难。真正没验证过的是 0 带宽通道能不能保存下来——如果保存时报错，就把报错截图回来再看。还有一点：这条规则只对那一个地址生效，别误伤正常流量。\n现状：方法已定，0 带宽通道能否保存、实测效果如何，等反馈。\n","permalink":"https://blog.bd4two.eu.org/posts/panabit-block-ip/","summary":"\u003cp\u003e家里在用 Panabit 流控，有次想禁掉一个地址。管理页里现成的示范规则看着很像答案，但用错地方会白忙一场。\u003c/p\u003e\n\u003cp\u003e关键区别是：DNS 管控只能断 DNS 查询。照着示范规则在 DNS 管控里仿一条，只能拦住域名解析，对方直接连 IP 地址照样通。想断掉某个地址的全部流量，得走流量控制：建一条策略组匹配那个地址，绑到一个上下行带宽都是 0 的数据通道上，等于阻断。\u003c/p\u003e\n\u003cp\u003e策略组和地址对象、丢弃动作的用法，管理页里已有现成规则可以照着抄，照猫画虎不难。真正没验证过的是 0 带宽通道能不能保存下来——如果保存时报错，就把报错截图回来再看。还有一点：这条规则只对那一个地址生效，别误伤正常流量。\u003c/p\u003e\n\u003cp\u003e现状：方法已定，0 带宽通道能否保存、实测效果如何，等反馈。\u003c/p\u003e","title":"Panabit 上禁 IP"},{"content":"Steam 装在一台 Ubuntu 机器上，10 月 28 日启动失败。客户端能打开，但卡在下载更新清单那一步，报错提示需要联网更新——可机器明明是联网的。\n有意思的是，崩溃上报能上传成功，说明一般出网是通的。问题收窄到 Steam 更新服务器这一条线：客户端连不上更新服务器，但别的出网正常。先确认机器没搞错：这台是 Ubuntu，不是 Mac mini，跨机器排查必须先写死执行位置，之前就因为默认成 Mac mini 给错过办法。\n下一步是查两样东西：终端里的代理环境变量，和对更新服务器地址做一次带超时的连通性检查。代理如果配错了，Steam 这类程序可能走了错误的出口；连通性检查能区分是域名解析、连接还是传输层面的问题。\n现状：等这两项检查结果再判。顺带给自己立个规矩：在 Steam 修好之前，商店打折先别买，买了也玩不了。\n","permalink":"https://blog.bd4two.eu.org/posts/steam-ubuntu/","summary":"\u003cp\u003eSteam 装在一台 Ubuntu 机器上，10 月 28 日启动失败。客户端能打开，但卡在下载更新清单那一步，报错提示需要联网更新——可机器明明是联网的。\u003c/p\u003e\n\u003cp\u003e有意思的是，崩溃上报能上传成功，说明一般出网是通的。问题收窄到 Steam 更新服务器这一条线：客户端连不上更新服务器，但别的出网正常。先确认机器没搞错：这台是 Ubuntu，不是 Mac mini，跨机器排查必须先写死执行位置，之前就因为默认成 Mac mini 给错过办法。\u003c/p\u003e\n\u003cp\u003e下一步是查两样东西：终端里的代理环境变量，和对更新服务器地址做一次带超时的连通性检查。代理如果配错了，Steam 这类程序可能走了错误的出口；连通性检查能区分是域名解析、连接还是传输层面的问题。\u003c/p\u003e\n\u003cp\u003e现状：等这两项检查结果再判。顺带给自己立个规矩：在 Steam 修好之前，商店打折先别买，买了也玩不了。\u003c/p\u003e","title":"Ubuntu 上 Steam 打不开"},{"content":"11 月 5 日收到一封计费变更邮件：我的账号在用 X API 的按量计费。11 月 22 日起，请求里 expansions 返回的对象也要按标准费率计费，以前这部分是不计费的。\n单价是每个对象计费：帖子、媒体、投票、地点各一个价，用户对象最贵。以前只算主请求，现在展开带回来的每个对象都算钱，调用量大的话涨幅不小。\n要做的事很明确：11 月 22 日之前，把各个请求用的 expansions 检查一遍，不用的删掉。我的实际用量和调用程序还没核实，涨多少算不出来，先把能省的省掉。\n提醒已经发出过一次，不再重复。这篇就是留个记录：11 月 22 日是死线，检查 expansions，别等到账单来了才发现。\n","permalink":"https://blog.bd4two.eu.org/posts/x-api-billing/","summary":"\u003cp\u003e11 月 5 日收到一封计费变更邮件：我的账号在用 X API 的按量计费。11 月 22 日起，请求里 expansions 返回的对象也要按标准费率计费，以前这部分是不计费的。\u003c/p\u003e\n\u003cp\u003e单价是每个对象计费：帖子、媒体、投票、地点各一个价，用户对象最贵。以前只算主请求，现在展开带回来的每个对象都算钱，调用量大的话涨幅不小。\u003c/p\u003e\n\u003cp\u003e要做的事很明确：11 月 22 日之前，把各个请求用的 expansions 检查一遍，不用的删掉。我的实际用量和调用程序还没核实，涨多少算不出来，先把能省的省掉。\u003c/p\u003e\n\u003cp\u003e提醒已经发出过一次，不再重复。这篇就是留个记录：11 月 22 日是死线，检查 expansions，别等到账单来了才发现。\u003c/p\u003e","title":"X API 按量计费变更"},{"content":"今天把这个博客搭起来了，记录一下过程，免得以后忘了。\n目标 一个个人博客，域名用自己的 blog.bd4two.eu.org，以后写无线电、技术和生活方面的东西。要求就一个：免费、稳定、自己能控制。\n第一次尝试：GoogieHost，没成 一开始想走 GoogieHost 的免费主机，注册、选域名、下单都走完了，订单号都拿到了，结果被拒。拒的原因写得很直白：订单国家在中国，而中国在他们的禁用名单上。免费主机这条路就这么断了。\n改走 Cloudflare Pages + Hugo 免费主机被拒后，改成静态博客的路线：\nHugo：静态站点生成器，写 Markdown 就能出站，没有数据库、没有后台，简单可靠。 GitHub：源码放在 snjesus/hugo-blog，推到 main 分支即是发布。 Cloudflare Pages：接 GitHub 仓库，推代码自动构建部署，免费额度个人博客完全够用。 域名：blog.bd4two.eu.org，在 Cloudflare 上做 CNAME 指向 Pages，SSL 自动配好。 中间有个小插曲：GitHub 上本来已经有个 snjesus/blog 的库，里面是另一套完整的博客系统（Qingyu\u0026rsquo;Blog），不是空库。所以 Hugo 这套单独建了个新库 hugo-blog，没去动原来的那个。\n搭建步骤 本地用 Hugo 建站，标题定为“BD4TWO 的博客”，写了篇欢迎帖占位。 GitHub 上新建公开空仓库 snjesus/hugo-blog，把源码推上去。 Cloudflare 上新建 Pages 项目 hugo-blog，连接这个仓库，生产分支 main。 构建设置：框架 Hugo，构建命令 hugo，输出目录 public，环境变量 HUGO_VERSION=0.169.0。 首次部署成功后，给项目加自定义域名 blog.bd4two.eu.org，Cloudflare 自动加了 CNAME 记录并启用 SSL。 打开 https://blog.bd4two.eu.org/ 验证，首页正常，标题、简介、文章列表都在。 写文章的方法 以后写新文章很简单：在仓库的 content/posts/ 里新建一个 Markdown 文件，文件头写标题和日期，正文写内容，推到 main 分支，Pages 会自动重新部署，几分钟后就能在博客上看到。\n现状 博客已上线，地址是 https://blog.bd4two.eu.org/。全套免费，源码在 GitHub，部署在 Cloudflare Pages。先这样，内容慢慢写。\n","permalink":"https://blog.bd4two.eu.org/posts/blog-setup/","summary":"\u003cp\u003e今天把这个博客搭起来了，记录一下过程，免得以后忘了。\u003c/p\u003e\n\u003ch2 id=\"目标\"\u003e目标\u003c/h2\u003e\n\u003cp\u003e一个个人博客，域名用自己的 \u003ccode\u003eblog.bd4two.eu.org\u003c/code\u003e，以后写无线电、技术和生活方面的东西。要求就一个：免费、稳定、自己能控制。\u003c/p\u003e\n\u003ch2 id=\"第一次尝试googiehost没成\"\u003e第一次尝试：GoogieHost，没成\u003c/h2\u003e\n\u003cp\u003e一开始想走 GoogieHost 的免费主机，注册、选域名、下单都走完了，订单号都拿到了，结果被拒。拒的原因写得很直白：订单国家在中国，而中国在他们的禁用名单上。免费主机这条路就这么断了。\u003c/p\u003e\n\u003ch2 id=\"改走-cloudflare-pages--hugo\"\u003e改走 Cloudflare Pages + Hugo\u003c/h2\u003e\n\u003cp\u003e免费主机被拒后，改成静态博客的路线：\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eHugo\u003c/strong\u003e：静态站点生成器，写 Markdown 就能出站，没有数据库、没有后台，简单可靠。\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eGitHub\u003c/strong\u003e：源码放在 \u003ccode\u003esnjesus/hugo-blog\u003c/code\u003e，推到 main 分支即是发布。\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eCloudflare Pages\u003c/strong\u003e：接 GitHub 仓库，推代码自动构建部署，免费额度个人博客完全够用。\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e域名\u003c/strong\u003e：\u003ccode\u003eblog.bd4two.eu.org\u003c/code\u003e，在 Cloudflare 上做 CNAME 指向 Pages，SSL 自动配好。\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e中间有个小插曲：GitHub 上本来已经有个 \u003ccode\u003esnjesus/blog\u003c/code\u003e 的库，里面是另一套完整的博客系统（Qingyu\u0026rsquo;Blog），不是空库。所以 Hugo 这套单独建了个新库 \u003ccode\u003ehugo-blog\u003c/code\u003e，没去动原来的那个。\u003c/p\u003e\n\u003ch2 id=\"搭建步骤\"\u003e搭建步骤\u003c/h2\u003e\n\u003col\u003e\n\u003cli\u003e本地用 Hugo 建站，标题定为“BD4TWO 的博客”，写了篇欢迎帖占位。\u003c/li\u003e\n\u003cli\u003eGitHub 上新建公开空仓库 \u003ccode\u003esnjesus/hugo-blog\u003c/code\u003e，把源码推上去。\u003c/li\u003e\n\u003cli\u003eCloudflare 上新建 Pages 项目 \u003ccode\u003ehugo-blog\u003c/code\u003e，连接这个仓库，生产分支 main。\u003c/li\u003e\n\u003cli\u003e构建设置：框架 Hugo，构建命令 \u003ccode\u003ehugo\u003c/code\u003e，输出目录 \u003ccode\u003epublic\u003c/code\u003e，环境变量 \u003ccode\u003eHUGO_VERSION=0.169.0\u003c/code\u003e。\u003c/li\u003e\n\u003cli\u003e首次部署成功后，给项目加自定义域名 \u003ccode\u003eblog.bd4two.eu.org\u003c/code\u003e，Cloudflare 自动加了 CNAME 记录并启用 SSL。\u003c/li\u003e\n\u003cli\u003e打开 \u003ccode\u003ehttps://blog.bd4two.eu.org/\u003c/code\u003e 验证，首页正常，标题、简介、文章列表都在。\u003c/li\u003e\n\u003c/ol\u003e\n\u003ch2 id=\"写文章的方法\"\u003e写文章的方法\u003c/h2\u003e\n\u003cp\u003e以后写新文章很简单：在仓库的 \u003ccode\u003econtent/posts/\u003c/code\u003e 里新建一个 Markdown 文件，文件头写标题和日期，正文写内容，推到 main 分支，Pages 会自动重新部署，几分钟后就能在博客上看到。\u003c/p\u003e","title":"博客建站记录"},{"content":"博客上线之后又做了几处改动：换 PaperMod 主题、关于页加图片、标题栏图标换成头像图、关于页图片改小并挪到呼号前面。这里把每一步的原样记录下来，包括涉及的地址和细节。\n换 PaperMod 主题 上线时用的是自己写的极简模板，后来觉得功能太少，换成了 PaperMod。PaperMod 是 GitHub 上约 1.3 万星的开源主题，MIT 协议，零 JS 构建工具，自带搜索、深浅色切换、目录、面包屑、封面图、多语言支持，不用 Node 和 Ruby，Cloudflare Pages 自带的 Hugo 就能编。\n安装没走常规的子模块或 Hugo Modules 路线，而是把主题文件直接拷进仓库根目录的 layouts/、assets/、i18n/，一共 121 个文件。旧的 4 个自定义模板（layouts/_default/baseof.html、list.html、single.html、layouts/index.html）被 PaperMod 的对应内容覆盖，static/css/style.css 改成一行注释弃用。PaperMod 要求 Hugo 不低于 0.158.0，当前用的 0.169.0 符合。\nhugo.toml 按 PaperMod 的要求改了一遍：locale = \u0026quot;zh-cn\u0026quot;、defaultContentLanguage = \u0026quot;zh-cn\u0026quot;（languageCode 在 Hugo 0.158 起已废弃，改用 locale）、mainSections = [\u0026quot;posts\u0026quot;]（PaperMod 首页靠它取文章列表）、菜单加了首页、归档、搜索、关于，[outputs] home 加了 JSON（给搜索索引用），params 里阅读时间、分享按钮、上下篇导航、面包屑、代码复制按钮、目录都打开，defaultTheme = \u0026quot;auto\u0026quot;。另外新建了 content/archives.md 和 content/search.md。\n推送提交是 dbd66fcd48458e363ee461c52e2fd595b6476af3。本地构建通过，Pages 部署后复核：首页 200 且含 PaperMod 标记，搜索索引 index.json 200，归档和搜索页 200，文章页有 post-single 类，中文界面串（分钟、归档、搜索）正常，html lang=\u0026quot;zh-cn\u0026quot;。\n仓库地址是 github.com/snjesus/hugo-blog，main 分支。部署地址是 hugo-blog-5h6.pages.dev，自定义域名是 blog.bd4two.eu.org。\n关于页加图片 关于页原来只有两段文字，我把一张黑白鱼眼照片放了进去。照片是 1024×1024 的 JPEG，约 98KB，内容是走廊里两个人并立，其中一人手里拿着一瓶酒。\n图片进仓库遇到一个实在的障碍：GitHub 的 push-files 快照推送只接受 UTF-8 文本文件，二进制推不上去；create_or_update_file 的 content 是 JSON 字符串，也塞不进原始二进制。所以图没进仓库文件，而是以 data URI 的形式嵌进 content/about.md。做法是先把图缩到 400×400（约 32KB），base64 编码约 43KB，写进 about.md，用 PaperMod 的 figure 短代码引用，显示宽 400、居中。\n这里又踩了一个坑：PaperMod 的 figure 短代码原样输出 data URI，会被 Go 模板净化成 #ZgotmplZ，图片出不来。原因是 Go 的 html/template 认为 data: 链接不安全，直接给替换了。我把仓库里 layouts/_shortcodes/figure.html 的 src 改成过 safeURL 才放行。另外 base64 里的 + 会被转义成 \u0026amp;#43;，浏览器解析属性值时会还原，不影响显示；验证过解码后与原图逐字节一致，是合法 JPEG（以 FFD8 开头、FFD9 结尾）。\n推送提交是 4106eb6d715cfc77b38f8d468af8ad5fcad1901e。部署后复核：关于页 200，图在、宽 400、居中。\n标题栏图标换成头像图 浏览器标题栏原来是个默认的球标，我把它换成了上面那张图。favicon 不宜太大，我把图缩到 32×32（另有一份 16×16），以 data URI 写进 hugo.toml 的 [params.assets]，四项都填了：favicon、favicon16x16、favicon32x32、apple_touch_icon。32×32 的 data URI 只有约 1.5KB，每页 head 里带一份可以接受。\n同样的问题又出现一次：PaperMod 的 head.html 里五个 favicon 链接用的是 absURL，data URI 照样被净化成 #ZgotmplZ。我把 layouts/_partials/head.html 里五个 favicon 链接都改成 absURL 后再过 safeURL 才放行。\n关于页图片改小并挪到呼号前面 400 宽的图在关于页还是显得大，我把它改到 250 宽，图数据也重缩到 250×250（约 19KB base64），位置从文末挪到第一段之后、“呼号 BD4TWO”那段之前，仍居中。关于页现在是：第一段“这里是 BD4TWO 的个人博客。”，然后是图，再是“呼号 BD4TWO。博客主要写无线电、技术和生活方面的内容，想到什么写什么。”\n这次改动连同 favicon 一起推送，提交是 832445b66de0b33db76d11f467282c44297d2028。部署后复核：首页 favicon 是 data URI（32×32 合法 JPEG，无 #ZgotmplZ），关于页宽 250、图在呼号前面。\n一点提醒：浏览器会缓存旧 favicon，如果标题栏还是原来的球标，强制刷新一次（Ctrl+Shift+R）就能看到新的。\n","permalink":"https://blog.bd4two.eu.org/posts/blog-changes-after-launch/","summary":"\u003cp\u003e博客上线之后又做了几处改动：换 PaperMod 主题、关于页加图片、标题栏图标换成头像图、关于页图片改小并挪到呼号前面。这里把每一步的原样记录下来，包括涉及的地址和细节。\u003c/p\u003e\n\u003ch2 id=\"换-papermod-主题\"\u003e换 PaperMod 主题\u003c/h2\u003e\n\u003cp\u003e上线时用的是自己写的极简模板，后来觉得功能太少，换成了 PaperMod。PaperMod 是 GitHub 上约 1.3 万星的开源主题，MIT 协议，零 JS 构建工具，自带搜索、深浅色切换、目录、面包屑、封面图、多语言支持，不用 Node 和 Ruby，Cloudflare Pages 自带的 Hugo 就能编。\u003c/p\u003e\n\u003cp\u003e安装没走常规的子模块或 Hugo Modules 路线，而是把主题文件直接拷进仓库根目录的 \u003ccode\u003elayouts/\u003c/code\u003e、\u003ccode\u003eassets/\u003c/code\u003e、\u003ccode\u003ei18n/\u003c/code\u003e，一共 121 个文件。旧的 4 个自定义模板（\u003ccode\u003elayouts/_default/baseof.html\u003c/code\u003e、\u003ccode\u003elist.html\u003c/code\u003e、\u003ccode\u003esingle.html\u003c/code\u003e、\u003ccode\u003elayouts/index.html\u003c/code\u003e）被 PaperMod 的对应内容覆盖，\u003ccode\u003estatic/css/style.css\u003c/code\u003e 改成一行注释弃用。PaperMod 要求 Hugo 不低于 0.158.0，当前用的 0.169.0 符合。\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ehugo.toml\u003c/code\u003e 按 PaperMod 的要求改了一遍：\u003ccode\u003elocale = \u0026quot;zh-cn\u0026quot;\u003c/code\u003e、\u003ccode\u003edefaultContentLanguage = \u0026quot;zh-cn\u0026quot;\u003c/code\u003e（\u003ccode\u003elanguageCode\u003c/code\u003e 在 Hugo 0.158 起已废弃，改用 \u003ccode\u003elocale\u003c/code\u003e）、\u003ccode\u003emainSections = [\u0026quot;posts\u0026quot;]\u003c/code\u003e（PaperMod 首页靠它取文章列表）、菜单加了首页、归档、搜索、关于，\u003ccode\u003e[outputs] home\u003c/code\u003e 加了 \u003ccode\u003eJSON\u003c/code\u003e（给搜索索引用），params 里阅读时间、分享按钮、上下篇导航、面包屑、代码复制按钮、目录都打开，\u003ccode\u003edefaultTheme = \u0026quot;auto\u0026quot;\u003c/code\u003e。另外新建了 \u003ccode\u003econtent/archives.md\u003c/code\u003e 和 \u003ccode\u003econtent/search.md\u003c/code\u003e。\u003c/p\u003e\n\u003cp\u003e推送提交是 \u003ccode\u003edbd66fcd48458e363ee461c52e2fd595b6476af3\u003c/code\u003e。本地构建通过，Pages 部署后复核：首页 200 且含 PaperMod 标记，搜索索引 \u003ccode\u003eindex.json\u003c/code\u003e 200，归档和搜索页 200，文章页有 \u003ccode\u003epost-single\u003c/code\u003e 类，中文界面串（分钟、归档、搜索）正常，\u003ccode\u003ehtml lang=\u0026quot;zh-cn\u0026quot;\u003c/code\u003e。\u003c/p\u003e","title":"博客上线后的改动记录"},{"content":"手里有一台 Nintendo DS LL，11 月 2 日想在上面跑 NeoGeo 模拟器 NeoDS。它的源码是 2008 年的 v0.2.0，十八年前的老代码，要用现代的 devkitARM 和 libnds 编通。\n老源码和新工具链之间有不少不兼容的地方。做法是加了一个兼容补丁头文件，在编译时注入，修掉新旧接口对不上的地方，再配上合适的链接参数。内存是真正的硬约束：DS 模式下的可用内存有上限，ARM9 的堆必须缩小才能塞进去。最后把堆从原来的一兆多缩小到一兆出头，只影响大游戏的精灵缓存，不影响兼容性。\n成品编出来了，一个不到 400KB 的文件，拷到烧录卡的存储卡根目录就能跑。游戏 ROM 得自己准备：用仓库自带的转换工具把 MAME 格式的 NeoGeo ROM 和 BIOS 转成专用格式，BIOS 和游戏 ROM 都得自己提供。\n有一点必须说清楚：这份成品我这边没有真机验证过。编译通过不等于能跑，能进菜单、能列出游戏才算成。等我在 DS LL 上实测了再补结果。\n","permalink":"https://blog.bd4two.eu.org/posts/neods-build/","summary":"\u003cp\u003e手里有一台 Nintendo DS LL，11 月 2 日想在上面跑 NeoGeo 模拟器 NeoDS。它的源码是 2008 年的 v0.2.0，十八年前的老代码，要用现代的 devkitARM 和 libnds 编通。\u003c/p\u003e\n\u003cp\u003e老源码和新工具链之间有不少不兼容的地方。做法是加了一个兼容补丁头文件，在编译时注入，修掉新旧接口对不上的地方，再配上合适的链接参数。内存是真正的硬约束：DS 模式下的可用内存有上限，ARM9 的堆必须缩小才能塞进去。最后把堆从原来的一兆多缩小到一兆出头，只影响大游戏的精灵缓存，不影响兼容性。\u003c/p\u003e\n\u003cp\u003e成品编出来了，一个不到 400KB 的文件，拷到烧录卡的存储卡根目录就能跑。游戏 ROM 得自己准备：用仓库自带的转换工具把 MAME 格式的 NeoGeo ROM 和 BIOS 转成专用格式，BIOS 和游戏 ROM 都得自己提供。\u003c/p\u003e\n\u003cp\u003e有一点必须说清楚：这份成品我这边没有真机验证过。编译通过不等于能跑，能进菜单、能列出游戏才算成。等我在 DS LL 上实测了再补结果。\u003c/p\u003e","title":"给 Nintendo DS 编译 2008 年的 NeoDS"},{"content":"11 月 4 日开始折腾黑苹果装机，先是显卡选型，再是硬盘分区，两个都是决定成败的点。\n显卡是 RX 560 对 GTX 1050 Ti，两张都是 4G 显存。玩游戏在 Windows 上，1050 Ti 更强；但黑苹果只能选 RX 560——1050 Ti 自从 Mojave 起就没有官方驱动了，而 RX 560 是 macOS 原生免驱。选 RX 560 还有讲究：要 1024 个流处理器的满血版，避开 896 个流处理器的阉割版；避开 XFX 的卡，有 BIOS 兼容问题；蓝宝石 Pulse 相对稳。\n接着是装机盘。目标是一块 500GB 的内置盘，查分区表发现它没有 EFI 分区：容器直接就是第一个分区，正常应该是第一个分区是约 200MB 的 EFI、第二个才是容器。原因是之前抹盘时只抹了宗卷、没动分区表，所以没生出 EFI。修复办法是整盘重抹：磁盘工具里显示所有设备，选中整块盘，方案选 GUID 分区图、格式 APFS，抹完再查分区表，确认 EFI 分区出现。盘上那个空宗卷基本是空的，重抹不丢东西。另外一块 1TB 的内置盘标了不用，绝对不动；安装 U 盘也别动。\n挂载 EFI 用一条命令，挂载点在系统宗卷下；安装器终端是 root 权限不用加 sudo，装好的正常系统里要加。安装 U 盘没有独立 EFI，引导文件在它的主分区根目录。\n现状：等整盘重抹后 EFI 是否出现、挂载是否成功的反馈，再往下走。\n","permalink":"https://blog.bd4two.eu.org/posts/hackintosh/","summary":"\u003cp\u003e11 月 4 日开始折腾黑苹果装机，先是显卡选型，再是硬盘分区，两个都是决定成败的点。\u003c/p\u003e\n\u003cp\u003e显卡是 RX 560 对 GTX 1050 Ti，两张都是 4G 显存。玩游戏在 Windows 上，1050 Ti 更强；但黑苹果只能选 RX 560——1050 Ti 自从 Mojave 起就没有官方驱动了，而 RX 560 是 macOS 原生免驱。选 RX 560 还有讲究：要 1024 个流处理器的满血版，避开 896 个流处理器的阉割版；避开 XFX 的卡，有 BIOS 兼容问题；蓝宝石 Pulse 相对稳。\u003c/p\u003e\n\u003cp\u003e接着是装机盘。目标是一块 500GB 的内置盘，查分区表发现它没有 EFI 分区：容器直接就是第一个分区，正常应该是第一个分区是约 200MB 的 EFI、第二个才是容器。原因是之前抹盘时只抹了宗卷、没动分区表，所以没生出 EFI。修复办法是整盘重抹：磁盘工具里显示所有设备，选中整块盘，方案选 GUID 分区图、格式 APFS，抹完再查分区表，确认 EFI 分区出现。盘上那个空宗卷基本是空的，重抹不丢东西。另外一块 1TB 的内置盘标了不用，绝对不动；安装 U 盘也别动。\u003c/p\u003e\n\u003cp\u003e挂载 EFI 用一条命令，挂载点在系统宗卷下；安装器终端是 root 权限不用加 sudo，装好的正常系统里要加。安装 U 盘没有独立 EFI，引导文件在它的主分区根目录。\u003c/p\u003e\n\u003cp\u003e现状：等整盘重抹后 EFI 是否出现、挂载是否成功的反馈，再往下走。\u003c/p\u003e","title":"黑苹果装机"},{"content":"家里宽带有公网 IP，但运营商封了 80 和 443 入站。想不带端口访问内网服务，路子是两条：内网用 Lucky 反向代理，外网真免端口得走 Cloudflare Tunnel。\nLucky 是以 Docker 方式跑在爱快路由器上的。实测它自带的 Cloudflared 模块就能配隧道，不用另起容器。隧道在 Cloudflare 控制台建好，把令牌填进 Lucky 的隧道模块——第一次填错了，填的是隧道 ID 而不是真正的令牌，换对之后就通了，连接器状态正常。随后给 NAS 加了公网路由，一开始报 502，原因是 NAS 的自签证书过不了 Cloudflare 的 TLS 校验，开了 No TLS Verify 就好了，公网实测能打开 NAS 登录页。Lucky 管理后台只监听 HTTP，加路由时服务类型必须选 HTTP，公网侧仍走 HTTPS。\n后来两条隧道都删了。起因是 Cloudflare 发来 cloudflared 升级邮件，删了隧道升级事项也就随之关闭。经隧道走的公网路由随之失效，内网访问不受影响。\n还有一件没解决的：容器到爱快本机的流量被整段静默丢弃，ping 全丢、TCP 连网关也超时（不是拒绝）。而容器出网、Lucky 反代 NAS 都正常，拦截点在爱快本机 INPUT 侧，管转发的 ACL 大概率管不着。下一步是补测容器内连爱快局域网地址的 TCP 和 ARP 表，再决定要不要在爱快本机加放行规则。教训是：容器访问爱快本机走网关地址，局域网其他设备访问容器服务必须做端口映射。\n另外提醒自己一句：Lucky 默认账密挂公网前必须改掉，或者加一层访问验证。\n","permalink":"https://blog.bd4two.eu.org/posts/home-network/","summary":"\u003cp\u003e家里宽带有公网 IP，但运营商封了 80 和 443 入站。想不带端口访问内网服务，路子是两条：内网用 Lucky 反向代理，外网真免端口得走 Cloudflare Tunnel。\u003c/p\u003e\n\u003cp\u003eLucky 是以 Docker 方式跑在爱快路由器上的。实测它自带的 Cloudflared 模块就能配隧道，不用另起容器。隧道在 Cloudflare 控制台建好，把令牌填进 Lucky 的隧道模块——第一次填错了，填的是隧道 ID 而不是真正的令牌，换对之后就通了，连接器状态正常。随后给 NAS 加了公网路由，一开始报 502，原因是 NAS 的自签证书过不了 Cloudflare 的 TLS 校验，开了 No TLS Verify 就好了，公网实测能打开 NAS 登录页。Lucky 管理后台只监听 HTTP，加路由时服务类型必须选 HTTP，公网侧仍走 HTTPS。\u003c/p\u003e\n\u003cp\u003e后来两条隧道都删了。起因是 Cloudflare 发来 cloudflared 升级邮件，删了隧道升级事项也就随之关闭。经隧道走的公网路由随之失效，内网访问不受影响。\u003c/p\u003e\n\u003cp\u003e还有一件没解决的：容器到爱快本机的流量被整段静默丢弃，ping 全丢、TCP 连网关也超时（不是拒绝）。而容器出网、Lucky 反代 NAS 都正常，拦截点在爱快本机 INPUT 侧，管转发的 ACL 大概率管不着。下一步是补测容器内连爱快局域网地址的 TCP 和 ARP 表，再决定要不要在爱快本机加放行规则。教训是：容器访问爱快本机走网关地址，局域网其他设备访问容器服务必须做端口映射。\u003c/p\u003e\n\u003cp\u003e另外提醒自己一句：Lucky 默认账密挂公网前必须改掉，或者加一层访问验证。\u003c/p\u003e","title":"家里网络：爱快、Lucky 与隧道"},{"content":"这篇记两件不相干的硬件事：群晖 NAS 加万兆网卡，和已折腾的 PS4 能不能玩暗黑破坏神 3。\n群晖是 DS1621+，6 盘位，带一个 PCIe 插槽。官方兼容、免驱的答案是单口电口万兆卡，速率从百兆到万兆自动协商。别买带 M.2 的那款——这台机器自带两个 M.2 插槽，买了也是重复；另外一个系列的万兆卡没有这台机器的官方兼容记录，别碰。第三方芯片的卡要另外装驱动包，不算免驱。家里还有一台基于 Debian 的 NAS，它的驱动支持和群晖是两回事，答案别混在一起。\nPS4 是已折腾过的 9.00 系统。暗黑破坏神 3 的离线部分能玩：单人战役、非赛季内容、本地同屏都可以；赛季和在线联机不行。两条红线：别升级系统；每次彻底关机重启后，都要重跑一遍破解流程。\n现状：两件都已给出结论，网卡还没买，游戏还没试。\n","permalink":"https://blog.bd4two.eu.org/posts/synology-ps4/","summary":"\u003cp\u003e这篇记两件不相干的硬件事：群晖 NAS 加万兆网卡，和已折腾的 PS4 能不能玩暗黑破坏神 3。\u003c/p\u003e\n\u003cp\u003e群晖是 DS1621+，6 盘位，带一个 PCIe 插槽。官方兼容、免驱的答案是单口电口万兆卡，速率从百兆到万兆自动协商。别买带 M.2 的那款——这台机器自带两个 M.2 插槽，买了也是重复；另外一个系列的万兆卡没有这台机器的官方兼容记录，别碰。第三方芯片的卡要另外装驱动包，不算免驱。家里还有一台基于 Debian 的 NAS，它的驱动支持和群晖是两回事，答案别混在一起。\u003c/p\u003e\n\u003cp\u003ePS4 是已折腾过的 9.00 系统。暗黑破坏神 3 的离线部分能玩：单人战役、非赛季内容、本地同屏都可以；赛季和在线联机不行。两条红线：别升级系统；每次彻底关机重启后，都要重跑一遍破解流程。\u003c/p\u003e\n\u003cp\u003e现状：两件都已给出结论，网卡还没买，游戏还没试。\u003c/p\u003e","title":"群晖 DS1621+ 网卡与 PS4 9.00 玩暗黑 3"},{"content":"手机、Google、Outlook、iCloud 四处通讯录各存各的，数量对不上。11 月 1 日花了一天把它理了一遍，顺便把每周自动同步的规矩定下来。\n先是手机。起初直读返回 0 条，差点以为是空的，其实是通讯录权限没开——空列表不等于没数据，权限一开就读到 290 条。手机里 iCloud 和 Exchange 是两个独立账本，数量不同本身不是故障。清理掉 4 组重复（共用号码、同音不同名、两条同人）和 12 条只有名字、没有电话邮箱的空条，剩下 275 条。\n然后以 Outlook 为主归一。手机上有、Outlook 里没有的，40 条新建导入、18 条只有名字的补上号码；两条不导，一条是之前亲手删过的，一条是自己的名片。归一后 Outlook 从 233 条涨到 273 条，手机关掉 iCloud 通讯录后也是 273 条，两边对齐。iCloud 云端原数据还在，没动。\n接着是一份名义 579、实际 647 条的 VCF。去重后剩 332 条，其中 53 条两边云端都没有。39 条真新的导入 Outlook（273→312）和 Google（311→350）；另有 14 条是以前删过的、但 VCF 里带号码的，经确认恢复并同步，Outlook 新建 14 条到 326，Google 那边是给同名空条补号、总数 350 不变。有个人有 3 个号，Outlook 单条目电话上限 2 个，第三个放备注里。\niCloud 这边没闭环：它没有写入接口，Mac 那条路试点也证实走不通，手动导 VCF 的结果还没核实。Google 里还有 14 对新旧并存的条目，等定删旧留新还是合并，最好在下次周同步前定。\n现在每周日早上自动同步一次，只双向补新增，不删不改，删过的不会被恢复。当前基数：Outlook 326 条，Google 350 条。\n","permalink":"https://blog.bd4two.eu.org/posts/contacts-sync/","summary":"\u003cp\u003e手机、Google、Outlook、iCloud 四处通讯录各存各的，数量对不上。11 月 1 日花了一天把它理了一遍，顺便把每周自动同步的规矩定下来。\u003c/p\u003e\n\u003cp\u003e先是手机。起初直读返回 0 条，差点以为是空的，其实是通讯录权限没开——空列表不等于没数据，权限一开就读到 290 条。手机里 iCloud 和 Exchange 是两个独立账本，数量不同本身不是故障。清理掉 4 组重复（共用号码、同音不同名、两条同人）和 12 条只有名字、没有电话邮箱的空条，剩下 275 条。\u003c/p\u003e\n\u003cp\u003e然后以 Outlook 为主归一。手机上有、Outlook 里没有的，40 条新建导入、18 条只有名字的补上号码；两条不导，一条是之前亲手删过的，一条是自己的名片。归一后 Outlook 从 233 条涨到 273 条，手机关掉 iCloud 通讯录后也是 273 条，两边对齐。iCloud 云端原数据还在，没动。\u003c/p\u003e\n\u003cp\u003e接着是一份名义 579、实际 647 条的 VCF。去重后剩 332 条，其中 53 条两边云端都没有。39 条真新的导入 Outlook（273→312）和 Google（311→350）；另有 14 条是以前删过的、但 VCF 里带号码的，经确认恢复并同步，Outlook 新建 14 条到 326，Google 那边是给同名空条补号、总数 350 不变。有个人有 3 个号，Outlook 单条目电话上限 2 个，第三个放备注里。\u003c/p\u003e\n\u003cp\u003eiCloud 这边没闭环：它没有写入接口，Mac 那条路试点也证实走不通，手动导 VCF 的结果还没核实。Google 里还有 14 对新旧并存的条目，等定删旧留新还是合并，最好在下次周同步前定。\u003c/p\u003e","title":"通讯录大整理与自动同步"},{"content":"想在家里把网页端《传奇》跑起来，部署目标是爱快路由器的 Docker。选的方案是一个社区重制项目，不是官方原版，这点先说清楚。\n部署方式是 Docker，一条命令拉起。默认端口都只绑本机：玩家页面、网关、游戏端口各一个，局域网或外网访问要改网关地址配置。仓库自带的只是精简的 starter 素材，完整素材包约 18GB，是私有的，需要找作者授权才能拿到。首次运行还要在本地编译 Rust 代码，是开发环境的做法，比较吃内存和磁盘。\n动手之前先摸清机器底子：系统架构、内存、磁盘余量这些。内存和磁盘得够，架构得对得上镜像，否则编到一半才发现跑不起来。\n现状：等机器配置输出，达标再开始部署。素材授权和完整包的获取方式也还没定。\n","permalink":"https://blog.bd4two.eu.org/posts/mir2-web/","summary":"\u003cp\u003e想在家里把网页端《传奇》跑起来，部署目标是爱快路由器的 Docker。选的方案是一个社区重制项目，不是官方原版，这点先说清楚。\u003c/p\u003e\n\u003cp\u003e部署方式是 Docker，一条命令拉起。默认端口都只绑本机：玩家页面、网关、游戏端口各一个，局域网或外网访问要改网关地址配置。仓库自带的只是精简的 starter 素材，完整素材包约 18GB，是私有的，需要找作者授权才能拿到。首次运行还要在本地编译 Rust 代码，是开发环境的做法，比较吃内存和磁盘。\u003c/p\u003e\n\u003cp\u003e动手之前先摸清机器底子：系统架构、内存、磁盘余量这些。内存和磁盘得够，架构得对得上镜像，否则编到一半才发现跑不起来。\u003c/p\u003e\n\u003cp\u003e现状：等机器配置输出，达标再开始部署。素材授权和完整包的获取方式也还没定。\u003c/p\u003e","title":"网页端《传奇》部署准备"},{"content":"10 月 11 日把微信接进了现在的会话：从微信发文字任务过来，实际执行完，结果再回微信，全程中文。要求就一个实在：只回罐头文字不算接通，必须真的能执行。\n登录用扫码，扫一次会话保存下来，收发服务按 15 秒一个周期轮询。只处理绑定账号发来的私聊文字，群消息和别人的消息一律忽略；图片、视频、语音、文件这类内容暂时不处理，会回一句说明先用文字描述。\n验收分了两层，都在当天通过。第一层是我从微信发一句问候，回复到了，我确认收到。第二层是我从微信发任务，让打开一个网页读页面标题，执行端真的打开了页面，标题回到了微信，我又独立核对了一遍标题，确认无误。\n微信里的对话就留在微信，后台有个执行器在跑；只有需要我动手的事（比如掉线后重新扫码）才会在主聊天里提醒。如果哪项能力缺失，就直说缺什么，不拿半成品冒充完整接入。\n现状：桥已验收通过，日常使用中。掉线重扫是唯一需要我介入的环节。\n","permalink":"https://blog.bd4two.eu.org/posts/wechat-bridge/","summary":"\u003cp\u003e10 月 11 日把微信接进了现在的会话：从微信发文字任务过来，实际执行完，结果再回微信，全程中文。要求就一个实在：只回罐头文字不算接通，必须真的能执行。\u003c/p\u003e\n\u003cp\u003e登录用扫码，扫一次会话保存下来，收发服务按 15 秒一个周期轮询。只处理绑定账号发来的私聊文字，群消息和别人的消息一律忽略；图片、视频、语音、文件这类内容暂时不处理，会回一句说明先用文字描述。\u003c/p\u003e\n\u003cp\u003e验收分了两层，都在当天通过。第一层是我从微信发一句问候，回复到了，我确认收到。第二层是我从微信发任务，让打开一个网页读页面标题，执行端真的打开了页面，标题回到了微信，我又独立核对了一遍标题，确认无误。\u003c/p\u003e\n\u003cp\u003e微信里的对话就留在微信，后台有个执行器在跑；只有需要我动手的事（比如掉线后重新扫码）才会在主聊天里提醒。如果哪项能力缺失，就直说缺什么，不拿半成品冒充完整接入。\u003c/p\u003e\n\u003cp\u003e现状：桥已验收通过，日常使用中。掉线重扫是唯一需要我介入的环节。\u003c/p\u003e","title":"微信桥"},{"content":"有一台腾讯云香港的云服务器，2 核 2G，跑 Ubuntu。我的运行环境出口代理不放行 SSH，直连不上，所以维护方式定下来是：我给只读巡检脚本，他在机器上跑、把输出贴回来，我诊断、定维护动作。\n上面跑的服务有 x-ui、MTProto 代理和一个 openclaw 网关，之前还有一条 Cloudflare 隧道（后来删了）。第一次巡检时机器已稳定运行 116 天，30 个服务都在跑、没有失败的；磁盘用了约三分之二，内存还剩 1.4G；待更新包 297 个，防火墙没开，SSH 暴露在公网有扫描噪音；还有个 networkctl 的报错反复出现，像是有脚本在轮询不存在的网卡。\n维护建议给了几条：升包、开防火墙或确认安全组、确认 SSH 只允许密钥登录、查 networkctl 噪音来源。第二次巡检，待更新包从 297 清到 0，系统也升到了新版。但抓到一个新情况：网关进程的内存从 54MB 涨到 486MB，还带了 3 个浏览器进程，1 分钟负载 4.62，对 2 核机器偏高，像是在跑浏览器相关的重活，请他核查是不是他触发的。\nnetworkctl 噪音的来源还没定位到。新版巡检脚本里加了专门定位的一节，但那次没抓到现行：发作时没有进程残留，日志里也没有留下是谁拉起的。判断是阵发性的、无害的，不影响运行；要抓就跑一小时蹲守命令，或者先放着，他还没决定。\n现状：巡检脚本已有含噪音定位的新版，下次用新版；内存突增和噪音蹲守这两件事等他核查后定。\n","permalink":"https://blog.bd4two.eu.org/posts/vps-maintenance/","summary":"\u003cp\u003e有一台腾讯云香港的云服务器，2 核 2G，跑 Ubuntu。我的运行环境出口代理不放行 SSH，直连不上，所以维护方式定下来是：我给只读巡检脚本，他在机器上跑、把输出贴回来，我诊断、定维护动作。\u003c/p\u003e\n\u003cp\u003e上面跑的服务有 x-ui、MTProto 代理和一个 openclaw 网关，之前还有一条 Cloudflare 隧道（后来删了）。第一次巡检时机器已稳定运行 116 天，30 个服务都在跑、没有失败的；磁盘用了约三分之二，内存还剩 1.4G；待更新包 297 个，防火墙没开，SSH 暴露在公网有扫描噪音；还有个 networkctl 的报错反复出现，像是有脚本在轮询不存在的网卡。\u003c/p\u003e\n\u003cp\u003e维护建议给了几条：升包、开防火墙或确认安全组、确认 SSH 只允许密钥登录、查 networkctl 噪音来源。第二次巡检，待更新包从 297 清到 0，系统也升到了新版。但抓到一个新情况：网关进程的内存从 54MB 涨到 486MB，还带了 3 个浏览器进程，1 分钟负载 4.62，对 2 核机器偏高，像是在跑浏览器相关的重活，请他核查是不是他触发的。\u003c/p\u003e\n\u003cp\u003enetworkctl 噪音的来源还没定位到。新版巡检脚本里加了专门定位的一节，但那次没抓到现行：发作时没有进程残留，日志里也没有留下是谁拉起的。判断是阵发性的、无害的，不影响运行；要抓就跑一小时蹲守命令，或者先放着，他还没决定。\u003c/p\u003e\n\u003cp\u003e现状：巡检脚本已有含噪音定位的新版，下次用新版；内存突增和噪音蹲守这两件事等他核查后定。\u003c/p\u003e","title":"云服务器巡检手记"},{"content":"这里是 BD4TWO 的个人博客。\n呼号 BD4TWO。博客主要写无线电、技术和生活方面的内容，想到什么写什么。\n","permalink":"https://blog.bd4two.eu.org/about/","summary":"\u003cp\u003e这里是 BD4TWO 的个人博客。\u003c/p\u003e\n\u003cfigure class=\"align-center\"\u003e\n    \u003cimg loading=\"lazy\" src=\"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAUDBAQEAwUEBAQFBQUGBwwIBwcHBw8LCwkMEQ8SEhEPERETFhwXExQaFRERGCEYGh0dHx8fExciJCIeJBweHx7/2wBDAQUFBQcGBw4ICA4eFBEUHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh7/wAARCAD6APoDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4\u0026#43;Tl5ufo6erx8vP09fb3\u0026#43;Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3\u0026#43;Pn6/9oADAMBAAIRAxEAPwD5OhSO1t/MYDOKzLmdppCx6dhUuoXHnSbVPyL0x3qpQAUUUUAFFFFABTkRnOFGTV/R9Iu9TuFit4mYn0FeiWPhG30PTWvb9BLKi7lU9MnoPxoA4PT9ElmIab5V963rPT7a2A2oC3qetWt2Tk96fGMnNADkQ8ACp44if4adboCATVyJBgcDFAEKQe2abM8cCE8Cruz5SVGMUmmWInuDPKASDhAe3qaAM6OK9uCWjgIHq52//XqYadqI/hhPtuP\u0026#43;Fev/AA9\u0026#43;Gmv\u0026#43;KIhcabpc0trnBuHwkee\u0026#43;Gbg/hXoE/wAAteFqWSOzaTH3RcDP8qlysOx8usbu3OLi3YKP4l\u0026#43;YCrUSCRQykEEZGK9K8Z\u0026#43;CdW8MXYg1fT5rQuf3bSL8r/Ruhrh7qw\u0026#43;yXAeIbY3\u0026#43;8vYN6j6007iM1rfrlRUbQrj7tamwHtTGjzkHGPemBjTW\u0026#43;feqdxapINsihgfWt14j6Y9KrSRLySME96AOQ1HQlcF4OD/dP\u0026#43;Nc9c2s1u5SRGBHtXo7qACDx61TurGK7Ta6g8cGgDz2it7VPD9xCGlhVnQdcDkVhupVsMMGgBtFFFABRRRQAqkggg4NWhcDAzVSigAooooAKKKUcnAoAAMnArqPBXhG\u0026#43;1\u0026#43;9SOOI7CfmYjgVb\u0026#43;Hng261\u0026#43;\u0026#43;UmM\u0026#43;SD8zY4r6g8A\u0026#43;E7TSbIukQRIlxux6DmplLlGlc4/QfB9j4ftFgSJTIq75Xxz9K4/wCJM7m6is8/d/eyj3P3R\u0026#43;A/nXs19CnkvcTjaspMrk/wxr/\u0026#43;o/lXhOsTPf6pc3UoP\u0026#43;kuzqP7vov5Y/Kog23qNnN7Qrlfy\u0026#43;lTRdKLuIo4JzwcHikiPoelakl62I5Bq5DyPxqlbnkD1q7AccdM0AXhGpXHrWn4Uj03\u0026#43;39Nj1hjHppvIhdsD92IuN5/LNZ0DAkY/OrkCqxGcGgD9CrCK0gsoIbBIUtEjAgWEAIEx8u3HGMdMVPXxj4D\u0026#43;Jni3wjapZaZqglsU\u0026#43;7aXaedEnsvIZB7A49q7xf2iPEIhw/h/R2k/vCWUD8uf50rjse/\u0026#43;JtG0rX9EudK1q3jnspkPmB\u0026#43;Nn\u0026#43;2D/CR1z2xXwJdlHaSCGYTxRzOscuPvoGIVvxFekePfi14x8WWUunXV9DYadMNsttYxmPzF/uu5JYj2BAPevOfkXgAADpTEVhEFzwKhdRk46VbkPHXiqkzDJB4oArzDgnmqVwQuc9BVi4mUKapojzv047A96AIBGZnORgemKtQ2/HT6npWhFaEOBjocH2q9BYHdyOntQBmxQtFIJQm4L99T/EvcVU8afD9Luw/tfRUyGG5ox/Suut7BtuduexHXpXQ\u0026#43;BlCXVxpEw3If3sQP8SnqP5j8RSk7K40j5ZuYJbeVopUKsDggjFRV798XvhuJreXU9Oj/fR/6xQPvg8hq8FuIZIJmikUqynBBoTTBojooopiCiiigAooooAK6v4feFbvxFqscMUZKZG4\u0026#43;grG8PaXPquoxWsCFmdgABX1v8K/BkHh/SIlEQM7KC7Ec1MpKI0rl7wX4UtNG02GC3iAO35iB1ru7yyNto0FmigSzsE/qf6VLolh511GpXgnnjsK0tWBk1GRgBi2i2p/vtwP5j8q527mqjY8u\u0026#43;KUwsvDF15ZIa6dbWH12D7x/IfrXiNzFuBH3T1B9D2r1v41zD\u0026#43;1LHTEPy21v5jYP8Tnj/x1R\u0026#43;deYzxc8Z69q2prQzluc7qUW5PMIxkcj36VlxPg4/Oui1mLZGif7OeK5aZik59M4rQk0Yn6c1dgkyOuKxo5R6/nVqCchuaANyF8424q7BKAf51iRzjjHFTi4OOAMUAbq3Ixyad9p9zWIlxgcmnfaec5NAGs9wCODmonnP0rO\u0026#43;005VkeF7jdFFAgJaWaRY046jJ6n2GTQBZkn7nnFUbq5wDyaoXGqWpkMVu8t44OMW8LEH8Wxx\u0026#43;FVr2a\u0026#43;V0CaVPGSf8Al6kVAfoB/jQBfiV5nBPA7Vt6PaBrhV74LfUCuUi8RRafqTWd/DGQrlGlhl3KG/qAeMivQfC9qTq0DzEEyHYQOgB4/H60noBO1gROCV\u0026#43;\u0026#43;ATnv2Nadlp\u0026#43;UwVGSueRXRf2SfsMcrKdyNtIxzzkfzU/nVi0sQMcHg4GBnPr/ACqHNFmTBpwGDsYdzio7yD\u0026#43;z7y11WP5fIkG/H9w8H8uv4V1cVsMgBe4znIJpl7YLPZy28gBEo2kj1I/\u0026#43;vWfOB0Nxp8V5ao5RTHMvlsB6HJX8juH5V80/GnwE9ncTX9rDgq371V7\u0026#43;9fS3w4mfUfCiwSc3EO6FvXeh4/Vf/Hqp\u0026#43;P8ARorxEkMYKXUfOR6CiL5WNrQ\u0026#43;EXUoxU9RTa7n4qeEpdC1Z5Ioz9nkOVIHT2rhq6E7mYUUUUAFOjUu4UdSabXW/DLw9Jr3iGCEISm4FvpQB67\u0026#43;z34HAiXWbuLr9wMO1fQtna4xkc9KyvC\u0026#43;mw2GnxW0aKqIoHHfFdRZxkZ3Dk1yyd3c1itDX8OW6q0kzdFGB9O9Vo4nnXzOd1xM0n4Dp\u0026#43;rD8q1o1FvoUsgGGdSB\u0026#43;PFUpitrbSTNkLa228n3Clz/AEpFnzt8Rp/t3jDVLhDujFwYk/3U\u0026#43;QfyrljBulA9a375HkLO\u0026#43;SzHc31PJ/nVK0gLzuQOVQmumOxk1c5XW1BuXJH3FJ/SuL1EBZOnWu41oDN05/3fzIH9DXF6kNzEVRDKUcg9vxrtvCvgDxPrsiJBYPCHAdfNBLbT0OxQWx7nFaX7Nvg238VeOWuNRVW0/TV850fkSSfwrj07n2r6\u0026#43;021hgZre2jVYlxnYOGP94\u0026#43;prOVSzsi4xufMU3wQ8Tw6bNdLf2bTQru8iSN0L\u0026#43;wPIz9a82vIrqyuXtbuKSGaM4dHGCK\u0026#43;\u0026#43;7izRodpJ2sASGGa8R/aC\u0026#43;H9tq\u0026#43;kzaxpUKJqdoASmMechIBH\u0026#43;9z9KmNR31G4Kx83LORTxOe\u0026#43;KzRNj1o8/nrWxmXbu98i3kmI3BRnA4pfAfhzVPHfiRLVdspCbm3yFEt484ySAdo9FAyx/E1n3BWaF4mbh1K8V61\u0026#43;ztZ6do/hC813WJW08SXAVrkvgSqowEUdSevQHrUzdkVFXZ694D\u0026#43;DPgy0tEt72A38ucs\u0026#43;4xr9AByfxJpvjT9nr4d6hcA28GrWDY5aG7zn3\u0026#43;cNXX\u0026#43;Htd0y60\u0026#43;G80uSeZWTeokjaMlfowyKr61410yB7ibVvFmj6XEGBgsY4FMzL0\u0026#43;aRySzZ7Ko/GuZSk\u0026#43;p0uMbHyZ8WfhXrem69erolpe32mWoxDLKgLsoHIJAG4\u0026#43;9dd4Zh2pZYJJRIznHXAFfQqalbazpRvrLE9swyJAPlNePpYeRr88SRMsJmkWM7cAjngHvjPatY1LqzMZQ5WegCw3298ir2aRccdQsg/m1Z9tbhRwe3rgnmuu0uITNbsMFZ7aEk/UMh/mKw1hKkk8Y9Bz1/wA/nWQiHycKGOCe498//Xpzw4V9qDPGc9885q2IuRuwAOB06f5xT2j\u0026#43;VyF2jHB6jBoEZ3w8c2firV9OHSTZdRj6jDf\u0026#43;PIv51sXX2q6ttYt51iJ0vVCsOxcZt3RZEz77Xxn2rDtWFl4\u0026#43;0e6HyrcJLbOcdTgOv45WvSbi1R2uEVF/f2wB46lCVB/IrQylqjwT4l\u0026#43;F4dZ0e4haP5sfITjjjIr5P1zT5dN1Ga1mUqyMVNfcd9aFgYn5Vc5A6jjrXzv\u0026#43;0B4WFvMusW6fJJw\u0026#43;B39a1py6EM8VooorYkcil3CDqTX0z\u0026#43;zp4YW10salLH88uNvHQV8\u0026#43;\u0026#43;D9PfU9dt7VF3F3Ar7V8Gacmn6RbW8SABE6D6c1nUdlYqKOmsYgFBx27Vr2ceMKRnHH096oWUZXGRjj\u0026#43;lbOmxFpkUnJJFYGqNjVUK6dbWo\u0026#43;87qDge1c747mEPhTWpwdpkRol/wCBMFH6Cup1PnUrNP4UBkP4f/qriPidIY/BaJ3nuIwffGWoQPY8Uu4xgg5NN0mBfJvZiMBAoH55/kKtXQyD61NbR\u0026#43;X4bvpvViD\u0026#43;CH/Gtb2MzzbWU/0Bmz9\u0026#43;UZ/In/CuLvUzL689K7vxEm2xjXu0rn8gv\u0026#43;NcReD965HbNbEs99/Z1sYtOtNPENq1vLqFl50paXeJSWwsg7rnaRt7bcjrXbeOfEHxB0yWe3062g0ZI5NkM0tpLOLw7cjDRo6xjr8z4GfxNcv8Dtcg1PwXpWnwh/t\u0026#43;iO1vKzRhV2O7tEA3VhtznPQ/WvZxrMEWmA6g8LOMKuR1/wB5if51zSfvGsVoeZ/8Lb17S/h3BqOv6Q0\u0026#43;oT3psLe2aErNcSbd\u0026#43;doHQA9s5/HNWNF8f/2vDNaa1oNxoepW6pLLbzofmiYgBgG6/hXoGswWF61i\u0026#43;oW1vepKs6/OqyBQ6gZ9sgAZ/DvXinxh03wj4K8OS3uj6WtnqWwQwmIsIlQsMgoWwc01Z6CZ856o0Z1W8MOPLNzKUx/d3nH6VWPrmoZpjJM8pI3OxY4AAyTnoOBTd/HWugyLAbBwOtezfDv/AITVfDmkal4YtI7hIG8gybQ7QEt8zKvr7/nXiKy/vACea9Y\u0026#43;Afi6bS7mTS3mbyHm34J6EipnsVHc\u0026#43;ivAUGtprWj33i7UUvdTvHkhKLaLCjRgdwCdxHHJ56\u0026#43;2N5vA3gu51tLltNt/7QWb7QyMoDl1yokRiDg44wOPpXnHxD1jxm\u0026#43;seHH8LXunafbqkkt1fXoXy7cKwyzE87duc456V1/guzutQ0z\u0026#43;028cJ4m1GB1IWNIk\u0026#43;zjGZItqHnDHgnsB1zmuaz3OlNbG54wu4rS0/s6ztlt7WNdoUduK821CwWPTrHU2naSSa5CbfNcqipnaNp\u0026#43;VTjP3eoIJrtfGl0lpYSz3DYYrwD1ya8z1TWbaHVLHR7zVEikaMSQ2kkmAWY4yAeMnGPU4oJqS6HpWhEjStMkxyIHU/wDAGQ/41T1KAw31ymPlWQnJ\u0026#43;pxV3QQToduME7Zp0591Y/0FM10KNWmdTzuznGeCoP070Gb2KhDFWU4P8JDe3\u0026#43;RTWjMmMAqCwBxTymE4O4kevHSnvE/mBI0KgtgAjGBQSc54o3W0mm3u3aLS/gcnPVS20n8ia9VhwVtXz0LKfxUH\u0026#43;a15d4yiMnhi/wCCZI4S2T/s8jHvxXpekSi40i2uAc7vKk/M/wD2VBUexw/iSL7PeTpg5EjY44PNef8AjvSo9V0G5tJEDblOM9jXqnjaALqDvxyBwfcVxl/bne0Y5wMfUUJ2YmfEut2b2GpTW0ikFGK/lVKvTfjvoR0/XzdqmEmGePWvMq6k7q5mesfs66Ot74lW5kTckWDk\u0026#43;9fWNlEVTbheBivEf2ZtKWLSZLsjDSNgH2xXvVmq8EjoT\u0026#43;tYVHdmsNi7agg9hjj9a3dDUNew9OvPvWNbqPbJ6\u0026#43;grf8OLm\u0026#43;U\u0026#43;ik1BZa1Jv\u0026#43;JlO2P9VanH4g/41wfxecrpOmW4/ilZv\u0026#43;\u0026#43;Vx/Wu6v8A5rzUGPZEQfiVrz34xy/6TpcQPSORvzYChEy2PM7gYUg1NdL5fgyZh1kdv/QlFMuADnNS6vG3/CIW6RqWZ2HAH\u0026#43;2f8K06kHnXiXiC3TPZz\u0026#43;oH9K4m9AEsnp/9cV6Tqei3N6ICssaKqENwWIJYnsPp3qCz8KaZbzrcSNPcyxsH/eAKuQc/dHbvzmteZIVjoPgzbT\u0026#43;HLQzatJElrrU6wmPkGFlQlSx6AneOB0xXqMnjfTtKjaPUbCFtPkjMEt7ezpFG2Rh0Afgg8gscA8gZrkn0Aar4Nm013WC4d/Ot5WPCyD7pP\u0026#43;yclT7HPauO8P8AxM1rwdHcaFfWtvKkUjJNa30IZoX7jccg\u0026#43;oyCOhHFZOPNqUnbQ27G68CaD40Gtv4gvobVlf8As/T7ICSziDHACmKRwwXJwDgZOQBgV5x8d/EOpareJZs37oykrGF2lQnGSDzncSP\u0026#43;AmtbxD8TbC7L2XhzwzpWl32oMI5p7OELLIO\u0026#43;WCrwOWJ9vavM7x5Z9Qka4laRs4RmB\u0026#43;ZR93Ge2P5\u0026#43;taRj1ZLdzAHmqxVtwIOOakjzu65I5p04/wBJk4/ipEB3GrJEupGa5RifmYk8DFbfhGea28QKYm\u0026#43;Yo\u0026#43;R2OOR/KpPC/hHX/Fuu2mleHdNl1C8ZGk8pGVcIoUsxLEAAbh1Pet3xl4R1z4e\u0026#43;MVTxFpUthFLHLLakuj\u0026#43;bHkqCCpI64BB5FAHdeJvHFvrvhmw0qxtpJb61lDmxaPd9olHGxx/EmM/L3OPSux8KQ\u0026#43;LrmGW8v73wjostjF/o2l20JSSzyQxYOAFyehUEg5Oc4r5m1LxDc3Opf2kqeU2QIxCdrKBwDnufer1hrmqavfRRtNd3u1css8hEYjXklyD90d/y74qHDSyKUme8XXibVNSll1vxPfxHSbOTAeEcXco4CRj\u0026#43;Lkcn149ceX\u0026#43;L9SufEGsTarcKY5JMKiq3\u0026#43;rQfdXPqOufU1VvNR1PV7iOXUbrzlhXZbwxxiOKFBwAiD7vFSFVSEvJwijLH2oUbCbue4/DL4reHn8MWtj4k1NbHVYrk\u0026#43;a0sb\u0026#43;XKNrDzNwBAznkHHOe1egyXtnqM0d5p1zBewSRx/vbeRZF\u0026#43;4ARkHGc18cAtJI0uCu7oPSrWm319pd0LnTr24s5xyJIJCh/Tr\u0026#43;NS6a6D5tLH11GTtDJtYggjjjr/AFzXldmNcg\u0026#43;IsmjsmoQWI1Z7ya7ldgjRrIWRIznDbgAoTsSxNcx4d\u0026#43;L3iGwMceqxQarAvVmXypv\u0026#43;\u0026#43;l4J\u0026#43;q/jXovhfXvDvjHU0ls9b1K0uwBPJpxSKMHaRkhtpLjABODkAnoOk8rjuO5W8F6l/alj4g00TSukMJljV0I2b2fdx2/h/SvVvh3cfaPAOmzE5JsoyfwVP8DXjnwn8F\u0026#43;J/CWs6zb6y1hPYXFs7RTwTOzBtwO0KcYBGSePxr1H4QOz/D\u0026#43;0U/wwug/DeP8A2WplboVHc0vHCbp1OQCY\u0026#43;p9jXCXpO93DbRnr6d\u0026#43;ld94y\u0026#43;a3gfngZ4H0rhNQcJjafnAzyc59qkT3PI/jvpJvPDv2narNCeCOmK\u0026#43;bWRgxGOhx0r7B8aWi33h28hIwdrHkdcj/61fK89qUnkXB4Yjp71vTehDPrD4F2AtvB9pxy/wAxr1G1Hyj3OTXFfDeD7N4ZsY84GwEj2rtbfIQDIBP61jLc1jsXbf6g10HhoZuiQBgRmufgI/H6cmuh8LkGeTjonNIoddHdPfe88a/r/wDWrzb4uvu160TsloOPqxr0aZgz3R/6fE5/OvOPiPC1540itV4zbR7j6LySfyoRMtjhLy2nFmt0IiySyeVH7t3/AApbDSpJyHuy0m0fIhPAHsOwrptTuHNx9la22QcLE4YbRjoMU\u0026#43;BV8kMB9/t/SnzMgyksFiGEQAelMm0yCVQxiXPetzywVJ4pPLXGCo4pXAztHmMcrWMvE0YBUn\u0026#43;OPoD\u0026#43;B4Pvj1Fc/wDEnwPpvi\u0026#43;z3mcWGrW6YgvM4RkH/LOb1TrtbqnuvA6PVNOF4i\u0026#43;XM9tNGd0E8YBaJsdQDwwPQqeCOD2I5i80rx1qEyjVNa0OCxt5FkaGxtJN14itkq5dvkBA6DPPXIqoOzuByvhbwPYeFtNv2uLq21TVbr9w80J3pbwnB8sEjh36t6Lhe7V2fha10ebSfsWq6VHfQK7ABxnYO\u0026#43;AeOprLs9A1wy3Zu7yOC5WQ\u0026#43;RdBPMieMn5Y3TjcvU9mU8g810Og2F7bW23UVtFmJPyWxbYo\u0026#43;rckn9OKucuwHnfxC\u0026#43;E9lOJtR8IAwTDLSWE0nyOP\u0026#43;mbHlT7Hj3FeNeU6TvHIGR0YqysMEEdQfSvr1oSXXIwGG0n68f1r5q\u0026#43;JdjJZeNrtnVdt0kdym3uGUA/juVqdOTejJaPSv2QbcXHxmtU2F1i025LYGeojHT6gV1n7b2mwjxJ4amaPMb6fOmOnKyqT/wChCuD/AGatQ0bT/F\u0026#43;qXWtWF9f239nCNbe0XMjsZY2z95cAbPWu0/ao8T6T4jtfD0NjY31nJZvdR7bkIModnTa7cZHGccGtOodD53S3t7aPCQb2PCp3c\u0026#43;n/ANerV7Newp5lpChefa19bRrhm2dCWxgkk7gF4JGTzg1ZtbeNZN3LH\u0026#43;JmOSQO3/1qu2SEu8zkgk8ZpiG6TNb3dsLi3cPGePcHuCOxpuozec4toz8iH5z6t6fh/P6VWn063e8a6jee3lb/AFjQSFN/1xViCFUIVFwAMAUAJDEVx\u0026#43;VPaMdwMmrUUWBlqR0PJUUAUXiG9VOcHlvYCpNK1C70/VYNTspWhnt5RJE4HQg/y7EehNLIm9pAX2gYXP8AP\u0026#43;dU7ieKNdkfKrQB9Z\u0026#43;G9Yg17w1a6xANqXUfzIDnYw4ZR9GBH0xWp8Gj/wAUTGN2ds06flJLXhXwB8UTQ303hi9c/Z7vM1qpONkoGWX/AIEozj1X3r3H4OHHgwE8g3Vwc/8AbSSueStoaRNnxed1ja/NjIyPyFcPqe1mA53dT6EV2viw5sLT0C\u0026#43;nsK4e7IEpI42ryPaoB7mNqEIlgnjOM7TgfhXz1qGlAX9wPLP\u0026#43;tb\u0026#43;Zr6H1Ar5pwcEg8g\u0026#43;3NeX3tghvJjgcyMf1rWIj2vwiAmkW6rwAi54rpbdgSMkDjrngVyvhdz/ZkIXsgIJ9cAV01ufkB6cZPHvWb3KiadsxCjPAx\u0026#43;VdJ4WP\u0026#43;kTZ/uAVzFuTuwpOQO/XNdD4UY/aZV/2KRYTPgXR6f6av/s1cT4yCjxRc3Ab5mgijBB5AAyfzJH5V1Wo3EUEF/LK6xxx3oZ2Y4AHzZOa831TVBe3L38gPlyncFU5O3t\u0026#43;OAKCZMjvQWhKuNzD\u0026#43;IDr\u0026#43;FOsn3qUzx97Hfn/ACaoQ30eoRP/AGbdoXjPIdD\u0026#43;TA4P8qNNuZDfPFPAsMqplgsm4HnqM4P50EG7EcE\u0026#43;9OOOoyc1HA6kg46mpn60AROnoO2arXhEcXnFcrHy4/2e/wCXX8KuE9KTP0oArFFkRG4K7QwI7\u0026#43;hp\u0026#43;0Myk4455rA8S6ZrV3f6RLo\u0026#43;oC1t7SYm4i8worrkdgMNwCNp9citwPJ5Z37VfAOByBQBJLs28kd6\u0026#43;Zvi5crceObkRkslvEkC\u0026#43;mVzn9Sa\u0026#43;gruWOJvKeeUu4kUfPt3MBngjHtxXz38Wmsx4nuUgjgFw0rGVoWfJD8ruB\u0026#43;XJ7FT7EZrSluJknhnSZ/\u0026#43;EdvLy7ikSO8TZENvLKASSM\u0026#43;5GK1vEml6Qs17b\u0026#43;F3ubnTra5Mts06BZWjaFGYNjAJDBxkddpqPW7zULKyFsdJuY5VeKXE8DqqhAV24YDjn9Kl1/xpeeLvEV9qd14fs7O4ubeKJY7KEoisgxuA65I9K3JOetgCeTgE9R2FWWfbHsHQ1Uj3ROYpUZHViGVlIK4PQg9MVMrbnyT3oAVjyFAz\u0026#43;NTQI2Qdo/PmqEd1KrsrabeMcnlAhX9Wq2uoqgzJZX6D3gz/ACJoAulmC48v9aqyTbFJIwR6iqs2s2IOGnZMdnidf5iql9exTWjywSiRMH5l6GgBAZJYxhjhufw/xpsaJk5kjGzoqnO3/wCv71nWyXEkIV5XjgA5wfmY/wBB7CrOy62LFbWwhi7Fxyx9cUAaWmXUthqFtqEDeW9tKssXPdSD/Svrr4QyI/gG2nT7k0k0q/RnlI/SvjMw\u0026#43;WfMu5Gdv7p7/gK\u0026#43;q/2dtbg1H4XRWYcC501pYJYz95VwWjbHoQ2PqprKrsXB6na\u0026#43;L5CtnbAY\u0026#43;5/QVw17MQcqQGGfyzXY\u0026#43;M5AqwKpGQh71wd23UgE7jzkVihvcp3zlwuxGUKc9cge30rj54szyEYwWP8AOumvLkhdoJUEc\u0026#43;h9zXJzTYmcbz941skI9F8HXBfS7YqV5jH1ziuptWDHg5\u0026#43;UCuB\u0026#43;G9wLnw9Yupy2wAAc5NekWWmukQnvZUtIQMuXYZH\u0026#43;A\u0026#43;tZPcqJZtSWJYtnjn3NdD4Xkxeuuf4MZrn7u5gSxBs7WVYTIoFxIuA\u0026#43;eyg8ke\u0026#43;Me5rT8OzY1FMn7y4pFmB8UbgRaDq0G7mW\u0026#43;iGPUZYkV5TqE2tabI0\u0026#43;nlJ7WDg25QEheuR3zg9vSun\u0026#43;O3imx0zXJtLaG7uJNyyuLeFpNhKjAOOM4P6151H8Q9Lt5FFzbXtuo6maB0J/EjFaRi7Gb3J08Z\u0026#43;feb302AdmXzT8yn3xWtpur27axb28MlwDLA8hjcl9ihl79OprkPEXibwfqcIeyZYr0HIZSiZz1DDuKy/B15HJ4xkQtnbCqxyE9CeSAe2avlVibnuVrKduc4OeQK00YsgPbFc3ps2\u0026#43;3Bxzggj3zWzZy74uvOP6VgxlsNnI7ilGO9ZzysjBsnnrVgT5Q\u0026#43;o5oAeOJZVHqG/Mf/rpk5AkAHdcVn6pqkGmwT3t05SGNAztgnAzjgDknOBj6VQsNbi1SGK9hWRI5VZkDghgAdvI7EEY\u0026#43;oNFmBr614esbzS7a\u0026#43;vWmmtZoVmJibCo4OByOc8g9exryf4r2PgNrgnSbCSK6Plhm\u0026#43;0MSxDHIIJIODyCDznpXovh/VrrSrX7TONY0C0kh827Q2aahppVl\u0026#43;aVMNlDjJIzgHPFeLeJPsCGQ2d8k0Syny2lYK8g3YU49SMHHbNa01qErH174Y\u0026#43;ItjL4gi8Px6ZqdxFnyWvkAeBJQPmQ9/lxz/LHNdrPqcJvLc20o8pZczFI/wCDH0r5r8deKb\u0026#43;zMejaXbvpNrpUX2me8tYE3XEroEQjIC5ZtwJJJO080th4a\u0026#43;NNpbpf2PiCzu7SeMSxvLdJHlWAIUxsoIJyePXvTa7Fxa6nEeO/h345uPFOt6vH4burq0udQuJopIWSQsrSMynaG3dCO2a4i7srzTpRDqFlc2UvZLiFoz\u0026#43;AYDNfXHgLT/GItI5PF9zYxYwRbwOJGJ/2mHA/DNdNqlhperWEul3MMVxBKpjKSoHHzDGRnp9RSVXuHsrq58QIcDOM/hRI\u0026#43;fUYFaE2mxxXEsEoLPG7Rnnupwf5UjW8cMRRQcE1sYmJcSkHgtxx161larI32V9iGRsZCDkn2revYSqbudg4PHIquNORwHE0kOR95G65\u0026#43;ooAx9L1OOOILNbzrLjhNn9elPl1LUTIDDopMf8AeeUD\u0026#43;tX3090yGnFyoPKTRKR\u0026#43;YFUb3T7IK0ttbYUj5hExx\u0026#43;Kng0AV31M\u0026#43;YzGyH2jPKvcIoX9c17J\u0026#43;ytLeTeKdWkG1IP7OxOqSblYmVAnPrnd\u0026#43;teFytbQx/vreWS3HXa\u0026#43;9V\u0026#43;qtkr\u0026#43;Br1/9li3urH4lvFYSs\u0026#43;mXWnyvOp5wFKsn/j2MH3NTPYcdz6E8ZzD7YB2UKM9uc/41xd9NtJUEsBlSf5V0Pi6cNqMnJGGKnH\u0026#43;yAK5C/lMcmY3BIGD3zXPFXZb3KF26kMVyVB4zXE3VwBdSjceHP866y5k3Kf4TyT\u0026#43;VebXmoAXkw3dJG/nW8UI9G\u0026#43;A2pCTQ7MbuY5V/DBr3OK3hS1udRlX7TcxMxi805WLDY\u0026#43;VegOMc9fcV8q/s\u0026#43;6qfLltd4BGGGe1fSl3r\u0026#43;n6V4bvr7Up/Kt9gOQNzOzrgKq9SxI6f4VlNWY4vQztb1Se40uz1KT7TH5821VlGDxuwwHbOM/TFdFpVz5d9Awx95RgHp6V5RpF34i8Y3drPN/xLdF08l4YcZeUjP3j3/kO2etd1pF3mzifPz4GT3yOP8alqwJ2Mn9oq1s7O/wBM1qRQhuA9vLIBgZTDISR04JGfYV5Yzo6\u0026#43;a\u0026#43;11K7tzYK49c5z/AOPV7V8dXM/g7TbyONZSLoLhug3Rt\u0026#43;XIr54v9Q8QNKsFpounW8RPJeYOjH12gZ/IVtDVBLcj8RanZLpjSiLVLqFDiU2FqCm31LSAjr3XIqh4WtntNYupGtby1jubdGgW7jUSFQec7eMg49DjqK6/SdL1t7d7rUJEdQAfKtIBEW/FiWx\u0026#43;Va93FBcWK2MEKxvkSb41G1ZeeP8Aa4JUn0NNysKxo\u0026#43;HL8PEAx6jk5zz/AJ/pXQ6TdBnZCeQcc/596890O4aO42PlWVsEEdCPWujhuWhukkX8Rn86zlEDpnwXaNvrSwyKMA9DxzWdc3agQ3APGcN\u0026#43;WRQl0C0gUjhgwJ9xUWYBrwguB9kuoI57eaNkkjk5Vhx1H9a5uweK1gjWFREkt80caKDhIkYKqj9fqSat65eD7XESzfKG5GMe2fwFYEN2ZIYHts/ud4Vv7zux\u0026#43;7/LPua0jHQDy7x7d3Og63dWLWsEtsWLxO6klwx6gnIwDnjHWuVh1TzZ4l\u0026#43;zrkyKPvf7Q9q9B\u0026#43;K5iuoFiTa7wDCsPYgH8Oteb\u0026#43;RIhV1G1kdX/I1qtiGfdXxJuNb8Py2y6B4Mm1kXmJnngwQGQEAEMeDgk5HqazNL1L4t6zb5utF0fQLYH/W3t35kmP8ArnGTz9SK4XW/2hPD9/oV1pGp6Rqekvc26M93pEkcm1/lO5QxU5z1Bz3Ga8x1Xx0w3qvjLxW8HVlW3SM4PQY8wnP44qHC5opWPqaHULTS4Y7vxF4sFxMxASJIlgjJPQBcszewz\u0026#43;FdFb6ujSIQUCEjYO/5V8U6P8TtI0C\u0026#43;/tDSrXVrzUCc/a9SZJXUf3V5OAe56\u0026#43;/auz0n9oaxSTzr3SWR8cmPLMfz4FZum\u0026#43;haqoreJyF8TauAOBf3GP8Av61ZE0o5x1HSo01hNXEmrspi\u0026#43;3Sy3AU9V3OxxVKe6RGO0j34rdGLd2WLi5WMKsi/I3U\u0026#43;nvSRiJbV8Ebe3OR\u0026#43;FZss0U0bRu2CfWqBu/IDIW3AHqKYjadT65B79vxrPuLlEYgnA755BrLuNXCrgSfrVVr5LpNjcZ4/GgC1cxRs5lQBlfhwO9fRX7LHh2fRvDdzqdyhUagwa2Lj5vs65VT/ALpYuR6gZ9K81\u0026#43;Anw/i8Qa1Lqutqz6VZZ/0Vsj7RJjKhv9gcZHfIHTNfSl1cLbWV9Mu0BFEEYAwBtXaAB9SePasakuiLjHqctrk32i7lZZOrMckepz/hWDLYX9xZG/jtmlt1ZlZ4vmI29yOoGe/NPvborvOcYyfqK6v4e3ltHIthJMgeGJWeP\u0026#43;IluSf1qdhnl1/MI4JGz/CSfSvC73UWN5Mc9ZG7\u0026#43;9fSHx\u0026#43;/s3T9Mu7qCNY5i23chxu\u0026#43;o6E\u0026#43;9fJkl1mRieeT2raLurky3Os\u0026#43;EmrHTvEMQL7VY7STX1TFHY6xotoL2CK5jVihEg4B6g\u0026#43;3GRXxRps7W15HKpwVYHNfTPhDxJNd\u0026#43;C8WiCS5fZsBPCt0JPsB2qZrqgQvjfxVrem3sWn6fOnlyltzrjJY8DK4xjoB\u0026#43;XFd7oU0sem26zLIsnlBpFcfMGOCc/nXLWOjWo02eK9P2l7pSLh26t7j0x2x0xxV3wzqU81u9rey\u0026#43;ZeWj\u0026#43;RM5PL4Hyv/AMCXB\u0026#43;ufSokrrQZ6dqFlH4k8AX2lSkgtGwRl6pIvzIw9wRXz/b3MljIYLxEjuEJWQqMcjuPY9a908C6h\u0026#43;9lt3IbeNw9sV5h8U9C8u61G4gT95aMHIH8UROP03J\u0026#43;tKm9bDZlxeI4YBgODnjp0q/b6jbahOgUFWdCoLLtzwea85t2MhyZFAPQZ/nWvZXizM0Ts8yyA\u0026#43;cwJXMfdF9A3C59Ca25UTc0r77Qt\u0026#43;s6pJIJFRAoQliVjyzD\u0026#43;8vH1GO9Xo7\u0026#43;GSMK8ixyrwyOdpz64bBqlqFyY7YzxuqrBKrgKeAQfmx9Bx\u0026#43;BrZtJ5LuV1S1Bm3Yh38oM/xH2A598Ck9EMnju1ksigcMwIxg9f8aZHdkOQSVO0Y\u0026#43;oNaFvYaTI3lCGKVYMhnIGXYDJJ\u0026#43;p/wrlLy8Am8xGO0lgARjAzkf596mNmBNr1ws9vJ5Mqx3JBRWIB2kg4PuAefwrBjvJrTTYIZZcmJpHG12OWIIQZPJCgnsOp9aW8nRh5peXfuAQBQV685PX8qzLSY3uoQplWWE5bLYC456ZGTx\u0026#43;natLCbMrxXM1hap5tvG0k7lAHxk8An\u0026#43;fNcdeRlbYsqk46n0Fb/AItMM2qCUWoSaQh\u0026#43;pJ2kZAx24I\u0026#43;tZWqR7dNmO7O5QPzIpkmALuaPKo3BHdQR\u0026#43;tMkuZnXYzDb3CqBn8utSpavK8ahfvMFz\u0026#43;NattozK\u0026#43;WXvzQBziwSsMhDTGjdDhhtPvXbx2EajlRisfW7B3mXyh0oAhh165gt0giISOMbVHoKbJrtw/3mJqH\u0026#43;yZ2JJp40eXv0NAEMmqXDdGYGkWa4mODK3PrVgaM46sanjsWjPA5oA1NK8MrdWkd1cXrASDIRI\u0026#43;QM\u0026#43;p/wrdtNNsNOjzbwDzP\u0026#43;ejnc/wCfb8Kt2ieTawwjokar\u0026#43;Qp0FrJqOp2umwZMlzMsQx23HBP4DJ/CgD3X4N2o0zwNBPIu17km4kz6H5h/46Erb8U3pg0m3t8jzJD5j9vc/qahh2QWUFhBgLwmPRRz\u0026#43;W1VH41zPjXUPtGoSqGG2ABRz3HX9c1zL3pGl9LGfqUwljcRybCyn5iudv1FZGn65Pp\u0026#43;tpeXZEUrKI/NU5Rh2wTjB9j\u0026#43;tPuLzKYLYJGBz\u0026#43;tZN7coytuwRghsjOfrW6iS3Yw/jx4ma8tILVXb5sucnn8a8U4re8baj9u1VwrZjQ7UHoBWBTSsSLXpvwg8QtDcGwlfCvyvPf0rzGrelXcllexzRuVKsCCO1MD6rs7gSIMtkKM4781Sv5jYaza6ipCx3S/Zbj03Ekxn\u0026#43;a/iK5zwpra6hpsd0jjIADgHnNbup\u0026#43;XqNhc20pKB8AN3Rv4T\u0026#43;YzUcpZ2GhaiLG8imLBdkoD85BGf/wBVbvjeCF9UtZ3I8i8ja1lPb5hgH9VP4V5ZpGpvcadAZlAnicpMP7rLwf1r0O5uRrHghWDHzoFDDnkFf/rVnKNmFzwbxppdxol9HLHkW85YKD2IPI\u0026#43;tYra3PbqXbcwZgHcsWYD2r1D4hwrqvhy\u0026#43;lVQWQpfR47buJB/30GH4V45dxmW3dAecZHvW0XdEs6SPWUlgEYniZJSEB3dPqOoHrWzpOpzBvsukxzTxINpluLmR0A9QD0B9M159otnK8FzJhljQhnZfvIRxnHcc1uQz3PliF55Z0I\u0026#43;UK7bSPXA/lTFc7S/8WXVpALCz8gXEg2tLGvCA9cA8Z96o/aHKBWPzZ7n19ao6Xax28T3kgTcPXnFQi5csT0yeT3FKwXJL2f8AfxIEbKvnO4YB6elNmvDbactlMgjkkZnm2tvYx8YTI6jg\u0026#43;nX2qeNXETmNVKuMMykbiPQmsHWJd91iJC0jDCqvJJx/nmmBmXsr3Or7ivOSzDqB7f0pNVBOnygqv8JOAR3FS2Uax3UMRYF5MtKwz1wSF/D/ABqxrqoumSkEHjgZ75FAGNZqgeHOMmVf51th8CsCI4kg9pQf1rX80\u0026#43;goAld\u0026#43;OoqByGPPNDPu9Kjdu2KAHfL6UnBIGKZbSq8GWVWG5h09CRStIo6RL09KAJCwA5IAptuonvI41XOWH\u0026#43;NVJJ1LlFZd/ovb61teEbU3N7JMfuwoPzY/4A0Aa7RlY9x6VufCyz\u0026#43;0\u0026#43;JXv2DFbRdqtjozZGfwUN\u0026#43;dYuruscZXgV3/gOz/svwzGZExLcDzpPX5sYH5YH4mplsNHXPerEJ7tyB5MfA/2j/kCvPru8Mk7O7ZJJJ\u0026#43;tbXiy\u0026#43;EFklmrYdvnf/P1z\u0026#43;VcTPcEk84zUwjbUbZZuLslyOODXN\u0026#43;LNVFnpUrFsPJ8qc1dklYknPT8K868aap9tvfKjb93HwP6n8a0JMCVzJIzk5JNMoooAKKKKAOv\u0026#43;H2vHT74QTOfJfhvb3r1wXIdEctuRsH6187Ru0bh16ivTvAHiBby1Gn3LgSqMRMe49KAOt\u0026#43;0i01neSxgvshx0xIo6/iv/AKDXd\u0026#43;ANUEYksnbKyDIB7\u0026#43;o/KvNNZ3PZuQfnixIuf7w//Vir\u0026#43;jar5MkFzG2ejfhUyV0NM6\u0026#43;4UQTT2MpykcjRc94pRlT\u0026#43;DD/x6vGtRtntL2a2cYaJyteva9Mkz298rgJOnkyN6Z5Vj9CB\u0026#43;Ved\u0026#43;N4t\u0026#43;qR3YXabhfnHo4OGFEUNmPp1yba4DKuNpAY4yG3DkH8O1WtWsHif7XpSSNAeXRCQ0Z9vVf5VmoNyzMDjfIeM9hx/Sr\u0026#43;ka2qjY6GR4yQ21ufxFUSFrczzRqHaeZfReVH5VpWUUUswjkY2\u0026#43;OGLAnmqlydLum86zl\u0026#43;yXXfP3X\u0026#43;tVpb949q3IjUgY3BhzQB0UumvGzG3vWMQHO5NuT9Kxm/dT3NwZ1zs8oKozuB689B0A496pnUvMIVZXxj1JqJ2Xy3EffnPOc96AI7HdJfGQkkR5Az78VP4mwlg4ABzjnv1FTaUqq6jYWyQWwetTeKFSSyKCNlyMDOOPyoA5En5osdd6/zrQ3nPvWWxKyRgjHzirgkPrQBZD8e1IWOKhEnHUUeZ7igCs1gnmPIk00ZYknZIRzS\u0026#43;SgA3SzSf78hNPeTPf9KZuGehoAepCjCqAPQDFdn4NhMGjS3LDBuJPl/3V4H65rkNPtpL6\u0026#43;itYjhpDjP90dz\u0026#43;Aru7yWO1skghAWONAqL6AcUARWdt/auvW9q2fJDbpfZR1/w/GvTftCk7nIVF\u0026#43;cjsB2H5ZP5VwXgyMRQy38nPmnA/3R/ia1tX1MxWxh3YeTJYjpj/AD/Kk1cpaFPXb83V3JKW4J4HoO1Yc03PqabdXGGOehGTVO4vILG2e8uCPl4RT/G1Mkz/ABbqf9n2BgVsTyjnH8Irzx2LuWbqat6xfy6hevPIxOTVKgAoopcUAJRRRQAVPZXUtpOssTFSpzxUFFAHrHhvWotaswjsoukHzL/z0FGlytDCtuwO\u0026#43;3cxsD6dv0xXmOnXs1lcLNC5Uqc8V6Homq22shXykV6FwewkH\u0026#43;NAHdaTdpf6XNp8rA4GFOe/asDXS1xabpD\u0026#43;8jbe2eoZeH/Pg/jVOxvJbC8G/wCXBCsPUVo6o484Thd0c/JH\u0026#43;1jkfiP1xQBy1uG8lecjBPNc54it3ivBPFldwzkccj/IrqPJS3uHiyNg5RvVT0rK8SRF7IOoGUkH5EGgDnl1nVYRtS9kI9Hw38wasx\u0026#43;INSS2DpLFv3YJMCH\u0026#43;lZ1wFLjGOf0qzZ2D3UNxHGhaSNRIAO470AXF8T60FwLmMDOceQn\u0026#43;FW9H1XUdRv1iuZldFVmwI1XtjsPeuc8vA\u0026#43;\u0026#43;PoeorovBtvuuJ5BztAXGMnk//AFqAOz0e3LyByRtUcHPSneIYXe1ZQOQOwrQsIBHboucMRkjFSzBdvzbXB4I7ke9AHmd6FVVYjDhgMc/Sm7xxkitrxja28EUk0SEbcEjpnn0rk21BVH\u0026#43;pcf8AAh/hQBp7we4pPMFZn9opn/Vv\u0026#43;hpwvkPRW59QKAL7SHvUTSZqm12OyN\u0026#43;Jre8EwNPqrSzohjjiYkEdzwPx60AdF4b0/wDs20NxcbTcTKDwc7F6gfU9T\u0026#43;A7Ut7K91crbJxk8n0FRrcmG2ktXPzW5wue6Hoadp58oeaTmZ\u0026#43;n\u0026#43;z/n/PSgDpYJo7a1UAbY416D1/z/ADrEvr8yuZHIOSePQVVv9QLKIoydi9T/AHj3NRxxJHA19fuIbZO56v7CgBzuFt3u7lisCHOT39hXD\u0026#43;ItYk1G4IGViXhVHQCpfE2uyajP5cX7u3Q4RB2H\u0026#43;NYVABRRRQAU6m0tACUU51Knmm0AFFFFABU1rcSW8okjYgg54NQ0UAd9oniG21KNLbUG2TAYWb/Gt\u0026#43;MyLCbOc/IwBjkB49jmvJEZkYMpwRXQ6H4muLPENwPNh/ut2\u0026#43;npQB0moOyFWYYZGKnjt/nn8ar3mySymDsoXYST/d75q2ZLLWIC9rMBKRzG3BrE1iO6Sx8h4pMhsOQvJX6elAGKrwjM2zB9/Wu5\u0026#43;H\u0026#43;jPE015doFklUBBu6Drnj8PpXIafZteXUcawskCEGRmGM\u0026#43;wrube6KsGRymOBg4xQBg\u0026#43;ONNgsJFu0QKk7lXjxwG67h7H0qDwFOINXNu8SlLpTt46MASP0zXTXyw6laPb3g8xH6EcEH1HvWdpPh6Wx1SO6e8SRIclV2EMTjAz270AdUJGJ/1bEdj/hTJnWNGkcAKqndlscDv/wDXqEMCfvE575P9aranbx3tlLasXQSJtznkfn9KAOI8S6pPrN2YLJX\u0026#43;zrnAHJfHc/4Vhx2F1PJ5UMZmcc4jGa6pfDN2FMKX9usA5JERDH/H863NJsbXS4fLhYSSyffkYZLHsMdAKAPPbvSb60jV7iFkDcA1CttJjbhc\u0026#43;5rsPF9zvhitkUPJI\u0026#43;Rt64Ht9cVzV1DcW7Bbi3kjJ6BloAijt3Q7nZVHU967TwxCtnpW9gfNuMN3zt6AH\u0026#43;f41zGnWjS3CearLGGGdw689K6eaUsMBjj27/8A1qADUHQ3CTg4CjawH90\u0026#43;tH2gt\u0026#43;7gO9mGPlpUgzCzTMIoiMMz8DFZl74gtNNh\u0026#43;z6Wu\u0026#43;UDBmYc/gKANWZrPSYftGpMGl/ggB5P19q47xBrt1qs\u0026#43;XfbGOFReFUewrPvLqe7lMk8jOSc8moKACiiigAooooAKdhv7v6U\u0026#43;CMu3PTvVrdEOM9PegCuMSLg9aiZSpwadF98U\u0026#43;f7lAEFFFFABRRRQAUUUUASwTywOHjcqR6Gui07xTKFEV9GJ0Hduv51zFFAHodpd6XebTBcCNj/AAyf0NWTFMmeMjswORXm0JIkGCRXVeHJ5jNsM0m3HTccUAbwldRgjbg9alN6R84wOeR3P0qacDYpwOlUnABIAGKALAvZcHawUZpUvpAcgtyPXOapPxkjggAfzqPJwOe1AF571iM9D3xUMlwzYBAHHTPSmfx/hTH5AzQBz9zqMkGsSToGMsfyxY7e9S29rf39x9tv3dm6gO3J9M\u0026#43;1amxDLuKKWx1xzVPU3cRjDsPoaABpo9\u0026#43;JJAu3qfSku/EFrbArbR\u0026#43;ZJ03N/hXOXrN/eP51TFAF/UdVvL5900rEdh2FUaSigAooooAKKKKACnxIXbAplW4uI\u0026#43;OOKAFcrGm0YquZGyaJSd45ptAH/9k=\"\n         alt=\"关于\" width=\"250\"/\u003e \n\u003c/figure\u003e\n\n\u003cp\u003e呼号 BD4TWO。博客主要写无线电、技术和生活方面的内容，想到什么写什么。\u003c/p\u003e","title":"关于"}]