diff --git a/.gitea/workflows/docker-build.yml b/.gitea/workflows/docker-build.yml
index 525d1ad..06cef12 100644
--- a/.gitea/workflows/docker-build.yml
+++ b/.gitea/workflows/docker-build.yml
@@ -56,6 +56,12 @@ jobs:
- name: List images
run: docker images
+ - name: Apply DB migrations
+ # 仓库内的 prisma 迁移自动应用 (migrate deploy 幂等, 无新迁移时为 no-op)
+ env:
+ DATABASE_URL: ${{ secrets.DATABASE_URL }}
+ run: npx prisma migrate deploy
+
- name: Remove old container
run: docker rm -vf iboard || true
@@ -65,10 +71,13 @@ jobs:
- name: Run container
# DATABASE_URL 通过 gitea Actions secret 注入, 不进镜像层
# OTA_PACKAGE_DIR 已在 Dockerfile 设为 /app/ota-package
+ # 米家凭证 (auth.txt) 不进 git: 运维放宿主机 /app/iboard/cache, bind-mount 进容器 (MIHOME_CACHE_DIR=/app/cache)
run: |
docker run -d --name iboard -p 3001:3001 \
-e DATABASE_URL="${{ secrets.DATABASE_URL }}" \
-e JWT_SECRET="${{ secrets.JWT_SECRET }}" \
+ -e MIHOME_CACHE_DIR=/app/cache \
+ -v /app/iboard/cache:/app/cache \
iboard:latest
env:
DATABASE_URL: ${{ secrets.DATABASE_URL }}
diff --git a/.gitignore b/.gitignore
index 3076d28..9edb0b1 100644
--- a/.gitignore
+++ b/.gitignore
@@ -39,7 +39,9 @@ dist/*
ota-package/*
!ota-package/README.md
-# apizero 文件缓存 (运行时按需生成)
-cache/apizero/
-# Dockerfile 持久卷挂载点 (跟 ota-package 同类)
+# apizero 文件缓存 (运行时按需生成)
+cache/apizero/
+# Dockerfile 持久卷挂载点 (跟 ota-package 同类)
.cache/
+# 米家凭证缓存 (含 token, 绝不能提交)
+server/mihome/.cache/
diff --git a/docs/环境监控模块设计.md b/docs/环境监控模块设计.md
new file mode 100644
index 0000000..22783ca
--- /dev/null
+++ b/docs/环境监控模块设计.md
@@ -0,0 +1,392 @@
+# 环境监控模块设计(米家温湿度长期记录)
+
+> 目标项目: iboard(Tauri + React + Express + Prisma/MariaDB)
+> 状态: 设计稿 v1.1 · 2026-09-20 · 待评审(v1.1: 视图新增 今天/月/年三档粒度 + 标题显示电量)
+
+## 1. 需求与目标
+
+在监控页新增「环境监控」tab,实现**多家庭**下温湿度**长期记录**:
+
+1. 监控页新增一个 tab「环境监控」。
+2. 多家庭支持:每个家庭一个可折叠 group,**手风琴**式展开(同一时间只能展开一个)。
+3. 每个设备可独立修改**别名**(仅本应用展示用,不改动米家云端设备名)。
+4. 数据**非实时**(定时批量,不做推送):**每小时采样 1 次**落库小时档,每日聚合成日档。
+5. 记录保留**永久**(无清理任务)。
+6. 缺失补齐语义(用户确认):
+ - **应用停机**导致的缺失 → 应用恢复后自动重新获取补齐(有统计的型号经云端聚合真实回填,
+ 见 §2.2B;无统计的型号保持缺口标注);
+ - **设备自身原因**(离线/故障)的缺失 → 保持缺失,不伪造数据;
+ - 总原则:**本地数据不少于米家可提供的数据**。
+7. 米家授权失效 → 前端显示「重新授权」按钮,点击弹出**二维码**,人工扫码后恢复。
+8. 每设备数据**默认显示当天**,粒度**小时**。
+9. 每设备数据可切换为**月**,粒度**天**。
+10. 每设备数据可切换为**年**,粒度**周**。
+11. 设备卡片**标题 = 别名 + 电量**(电量取当天缓存值,不必频繁更新)。
+
+已确认的数据范围:仅**温湿度**(不含照度 / 人体存在)。
+
+## 2. 已验证事实(调研结论,作为设计地基)
+
+调研用的账号 `18814803393`,登录链路与数据能力已实测(脚本位于
+`C:\Users\xydkj\AppData\Local\Temp\opencode\mibridge-research\`):
+
+| 项目 | 结论 | 证据 |
+| --- | --- | --- |
+| 登录方式 | 密码登录被米家拒绝(`70016`);**扫码登录可行** | `qr-once.mjs` |
+| Token 有效期 | 30 天,`DiskCache` 持久化,脚本自动加载刷新 | `.mijia-cache/` |
+| 实时读值 | `api.getDevicesProp([{did,siid,piid}])` 稳定可用,100 项请求 10 轮 100% 成功 | `env-monitor.mjs` |
+| 单轮延迟 | p50 ≈ 520ms,p95 ≈ 612ms(10 项属性/轮) | 同上 |
+| VRF 空调目标温写入 | 整数生效但**生效延迟 5~6s**(updateTime 才更新);半度 26.5 被服务端拒收(`-704220043`) | `vrf-temp-test*.mjs` |
+| 温湿度历史读取 | **不可读**:`history-data(8.1)`/`start-time(8.3)` 返回 `-704010000`;`start-synic` 动作要求参数;`/v2/home/device/prop_history` 类端点不可达 | `dev-history-probe.mjs` |
+
+### 2.1 环境设备清单(共 3 台,均属家庭「黄金农场」505001017889)
+
+| 家庭 | 设备 | 型号 | did | 温度 | 湿度 | 电量 |
+| --- | --- | --- | --- | --- | --- | --- |
+| 黄金农场 | 炎米智能温湿度计 | `ym001.sensor_ht.ymwsdj` | `blt.3.1nmu8afgt0g00` | 2.1001 | 2.1002 | `3.1003` |
+| 黄金农场 | 炎米智能温湿度计 2 | `ym001.sensor_ht.ymwsdj` | `blt.3.1nmu8eunt0001` | 2.1001 | 2.1002 | `3.1003` |
+| 黄金农场 | 闹钟(青萍,含温湿) | `cgllc.clock.dove` | `blt.3.12cq3lu8glo00` | 2.1 | 2.2 | `2.3` |
+
+> 第二个家庭「韩家」(586001550228) 当前无环境设备,设计需容忍空家庭。
+
+### 2.2 关键约束:逐点历史不可达,但云端「聚合统计历史」可用(实测反转)
+
+原结论"云端历史完全不可达"已推翻。实测分两条:
+
+**A. 逐点历史(设备本地日志)云 API 不可达**
+- 炎米温湿度计:规格含 `8.1 history-data / 8.3 start-time / start-synic`,但 8.1/8.3 读取全返回
+ `-704010000`(不可读),`start-synic` 动作试了 8 种参数形态全部报 `-704220025 参数个数不匹配`,
+ 判定为"局域网直连通道",云侧无暴露;
+- 青萍闹钟:miot 规格仅 temperature / relative-humidity / battery-level,**无任何历史属性/动作**。
+
+**B. 云端聚合统计历史「可用」(%@zythum02/mijia-api 可直接打 `POST /v2/user/statistics`)**
+参数 `{ did, key(siid.piid), data_type, limit, time_start, time_end }`,用本库 `api.request()` 直连即可。
+
+| data_type | 桶(Asia/Shanghai) | value 语义 | 实测(炎米 ym001.sensor_ht.ymwsdj) |
+| --- | --- | --- | --- |
+| `stat_hour_v3` | 1 小时整点 | 小时均值 | 连续入库(炎米1 有部分缺档),如 `[28.8]` |
+| `stat_day_v3` | 1 天 00:00 | 当日 [min, max] | 45 天全有,如 `[28.1, 29.2]`,与实时读值吻合 |
+| `stat_month_v3` | 1 月 | 当月 [min, max] | 回溯到 2026-01(联网注册后云端一直记账) |
+| `stat_week_v3` | 1 周 | — | 该型号返回 `-8 invalid params`(未开通周档) |
+| 回补深度 | — | — | 两台炎米均回溯到接入米家日起(实测到 2026-01-03);缺席日=设备当天无上报 |
+
+- 青萍闹钟 `cgllc.clock.dove` 与 VRF `proxy.624017060.00001` 全部 data_type 报 `-8 invalid params`
+ → **云侧未为其开通统计**(青萍与其无历史服务一致)。
+- 证据:`mibridge-research/stats-probe.mjs` / `stats-probe2.json`。
+
+因此:
+
+- **停机缺口可补真值**:对开通统计的型号(炎米等),停机恢复后用 `stat_day_v3` 回填缺日
+ [min,max]、`stat_hour_v3` 补小时均值,`origin=vendor_history`(见 §5.3);
+- 「精确到某个刻的逐点值」仍不可得(那是设备本地日志,须走局域网 BLE/网关,见 §10);
+- 未开通统计的型号(青萍)维持「当天实时采样 + 缺口标注」。
+
+## 3. 总体方案
+
+- 后端新增 `server/mihome/` 模块,封装与米家的认证 + 采集 + 查询;
+- 依赖新增 `@zythum02/mijia-api`(扫码登录、`getDevicesProp`、`DiskCache`),
+ 认证缓存文件用 `DiskCache` 存于服务端磁盘(`.cache/`),与采集进程同机;
+- **每小时**采样 1 次写小时档(`MihomeEnvHour`),**每日 03:00** (Asia/Shanghai) 聚合日档
+ (均值/min/max)+ 读一次电量;服务启动时做**追赶同步**(缺小时/缺天则按序补齐),
+ 停机跨天的历史缺口由 `vendorHistoryFiller` 用 `/v2/user/statistics` 真实回填(有统计的型号);
+- 前端 `MonitorPage` 增加 tab,`antd-mobile Collapse`(手风琴)+ `recharts` 趋势图,
+ 别名用 `Dialog.Prompt` 编辑;每设备卡片标题=别名+电量,展开后 `Segmented` 切换
+ **今天(时)/月(天)/年(周)** 三档视图;
+- 数据永久保存,小时档按 `(deviceId, hour)`、日档按 `(deviceId, date)` 唯一,天然防重。
+
+## 4. 数据模型(Prisma)
+
+```prisma
+// ===== 环境监控:米家 =====
+
+// 米家授权状态(DiskCache 存凭证, 本表只存状态/错误供前端展示)
+model MihomeAccount {
+ id Int @id @default(autoincrement())
+ key String @unique @default("default")
+ userId String @default("")
+ status String @default("unknown") // ok | pending | expired
+ lastError String @default("")
+ updatedAt DateTime @updatedAt
+}
+
+model MihomeHome {
+ id Int @id @default(autoincrement())
+ homeId String @unique
+ name String
+ createdAt DateTime @default(now())
+ devices MihomeDevice[]
+}
+
+model MihomeDevice {
+ id Int @id @default(autoincrement())
+ did String @unique
+ homeId String
+ home MihomeHome @relation(fields: [homeId], references: [homeId])
+ model String
+ name String
+ alias String? // 用户别名, 仅本应用展示
+ tempSiid Int
+ tempPiid Int
+ humSiid Int
+ humPiid Int
+ battSiid Int // 电池电量属性(如炎米3.1003 / 青萍2.3)
+ battPiid Int
+ battery Int? // 最近一次电量(每天读一次, 标题展示用)
+ batteryAt DateTime? // 电量读取时间(当天缓存, 不频繁更新)
+ enabled Boolean @default(true)
+ lastSyncAt DateTime?
+ createdAt DateTime @default(now())
+ samples MihomeEnvSample[]
+ hours MihomeEnvHour[]
+}
+
+model MihomeEnvSample {
+ id Int @id @default(autoincrement())
+ deviceId Int
+ device MihomeDevice @relation(fields: [deviceId], references: [id], onDelete: Cascade)
+ date DateTime // 采样日(Asia/Shanghai 当日 00:00 存 UTC)
+ temperature Float? // 当日最后一次 live 值(或 vendor hour 均值)
+ humidity Float?
+ temperatureAvg Float? // 当日均值(由小时档聚合, 或 vendor_hour)
+ humidityAvg Float?
+ temperatureMin Float? // 当日最低
+ temperatureMax Float? // 当日最高
+ humidityMin Float?
+ humidityMax Float?
+ origin String @default("live") // live | vendor_history | backfill
+ sampledAt DateTime?
+ raw Json?
+ createdAt DateTime @default(now())
+
+ @@unique([deviceId, date]) // 一天一条, 防重
+ @@index([deviceId, date])
+}
+
+model MihomeEnvHour {
+ id Int @id @default(autoincrement())
+ deviceId Int
+ device MihomeDevice @relation(fields: [deviceId], references: [id], onDelete: Cascade)
+ hour DateTime // Asia/Shanghai 整点(存 UTC)
+ temperatureAvg Float? // 该小时均值(live 采样点聚合, 或 vendor_hour)
+ humidityAvg Float?
+ raw Json?
+ createdAt DateTime @default(now())
+
+ @@unique([deviceId, hour]) // 一小时一条, 防重
+ @@index([deviceId, hour])
+}
+```
+
+要点:
+- 凭证不进库,只在密钥盘(`server/mihome/.cache/`,需加入 `.gitignore`);
+- `MihomeHome` / `MihomeDevice` 随每次同步 **upsert**(以米家为准,重扫不漏不错);
+- 存储分三档:**小时档**(当天视图,逐小时)、**日档**(月视图,日均/min/max)、
+ **年视图按日档现场聚合周桶**(不落库,见 §5.6);
+- 电量只存在 `MihomeDevice.battery/batteryAt`,每天读 1 次覆盖当天展示用(需求 11);
+- `MihomeEnvSample.origin`:
+ - `live`——定时采样的真实值(小时档写入,日档由小时聚合);
+ - `vendor_history`——经 `/v2/user/statistics` 拉回的云端聚合历史(min/max/hour 均值);
+ - `backfill`——停机恢复后对**当天**的补记(仍用真实值,与 `live` 同字段)。
+
+## 5. 后端设计
+
+### 5.1 代码结构
+
+```
+server/mihome/
+ index.js # 模块入口: 初始化 MijiaAPI + DiskCache, 导出 service
+ auth.js # 认证管理 + 扫码流程(后台 QRlogin 循环 + pendingQr 状态机)
+ collector.js # 采集器: 每小时采样 / 每日聚合 / 追赶同步 / 电量 / 设备发现
+ vendorStats.js # /v2/user/statistics 封装(按型号探测可用性, 提供 hour/day 回填)
+ history.js # 查询聚合: today(时) / month(天) / year(周)
+ cache.js # DiskCache 路径与清理
+server/routes/mihome.js # REST 路由 (authRequired)
+```
+
+### 5.2 认证与「重新授权」
+
+- 启动时 `login()` 自动尝试加载/刷新 `DiskCache` 凭证;成功则 `status=ok`。
+- 失败(30 天过期 / 风控)→ `MihomeAccount.status=expired`,前端弹授权横幅。
+- 重新授权流程(服务端驱动,前端轮询):
+
+```
+POST /api/mihome/reauthorize
+ └─ 若 pendingQr 空闲 => 后台启动 QRlogin 循环(每轮 120s 超时自动续二维码)
+ └─ 立即返回 { state, qrImageUrl }
+
+GET /api/mihome/reauthorize/status
+ └─ 返回 { state: idle|waiting|scanning|ok|failed, qrImageUrl?, lastError? }
+ └─ 扫码成功(qrlogin 返回) => 保存凭证 => 状态 ok => 触发一次立即同步
+
+POST /api/mihome/reauthorize/cancel # 人工取消, 停掉后台循环
+```
+
+- `pendingQr` 为模块级单例,防并发(同一时间只允许一个扫码流程)。
+- 前端在弹窗内 `setInterval 3s` 轮询直到 `ok`,成功后关弹窗并刷新列表。
+
+### 5.3 采集器 collector
+
+1. **预检**:`whoami().login` 不为真 → 置 `expired`,本轮跳过(不产生记录)。
+2. **设备发现**:`getDevicesList()` → upsert 家庭/设备;仅保留具备
+ `temperature` + `relative-humidity` 属性的型号(经 `getDeviceInfo`/miot-spec 判定,
+ 当前命中 `ym001.sensor_ht.ymwsdj`、`cgllc.clock.dove` 白名单);记录其 `battSiid/battPiid`。
+3. **小时采样(每小时)**:批量 `getDevicesProp` 读温度+湿度 → upsert
+ `MihomeEnvHour(deviceId, hour=当前整点)`,写 `temperatureAvg/humidityAvg`(此小时第一个有效点
+ 即视为小时值)。每台独立 try/catch:
+ - 设备离线/超时 → 该小时不写(缺口保持);
+ - 网络/API 异常 → 整体捕获,本轮不误标,留待下次。
+4. **电量(每天 1 次)**:每日首轮采样顺带读 `battery-level` → 写
+ `MihomeDevice.battery/batteryAt`(当天缓存,标题展示用,不频繁更新)。读不到不报错。
+5. **每日聚合(03:00 + 启动追赶)**: upsert `MihomeEnvSample(deviceId, date)`:
+ - `temperatureAvg/humidityAvg` = 当日各小时均值;`temperatureMin/Max`、
+ `humidityMin/Max` = 当日小时 min/max;`temperature/humidity` = 当日最后一次 live 值;
+ - 当日采样小时数 < 8h 且设备在线的 → 判定硬件故障?**否**:仅当设备整天在线的阈值外仍缺,
+ 视为设备离线缺档(保持缺口,不伪造)。
+6. **追赶同步(补齐)**:每次轮询/同步结束后检查——对每个设备
+ 「缺小时档且采集入口健康」→ 按序补齐小时档;「今天就无样本」→ 立即执行每日聚合。
+ 服务启动时触发一轮,实现**停机恢复当天即补**。
+7. **历史补齐(vendorHistoryFiller / vendorStats.js)**:每台设备先探测一次各 data_type
+ 可用性(实测:炎米 ✅ / 青萍、VRF ❌`-8 invalid params`),仅对可用型号扫描近 45 天缺口:
+ - 缺小时 → `stat_hour_v3` 回填 `MihomeEnvHour.temperatureAvg/humidityAvg`;
+ - 缺天 → `stat_day_v3` 回填日档 min/max,再由小时档均值回填 avg;
+ - 命中即写 `origin=vendor_history`;对「服务端停机跨天」缺口尤其有效。
+8. **缺口标记**:`GET /status` 计算每设备最近 30 天缺样本日期列表(`missingDays`):
+ 今天缺=待采;历史缺=先尝试 vendor 统计补齐,补不了则标注不可得。
+
+> 补数边界(诚实策略):已开通统计的型号(炎米等)停机跨天缺口可用**云端聚合真值**补齐
+> ([min,max]/小时均值,`origin=vendor_history`);未开通的型号(青萍)保持缺口标注、不伪造。
+> 「精确逐点历史」仍不可得,只能走局域网 BLE/网关(§10 可选项 C)。
+
+### 5.4 路由表(均在 `/api/mihome`,`authRequired`)
+
+| 方法 | 路径 | 说明 |
+| --- | --- | --- |
+| GET | `/status` | 授权状态 + 家庭/设备(含别名、**电量、最新样本**、30 天缺口、统计可用性探测结果) |
+| GET | `/device/:did/history?range=today` | 当天逐小时(见 §5.6);缺省 `range=today` |
+| GET | `/device/:did/history?range=month` | 近 30 天逐日(日均 + min/max) |
+| GET | `/device/:did/history?range=year` | 近 52 周逐周(周均值 + min/max,服务端按日档聚合) |
+| PUT | `/device/:did` | `{ alias }` 改别名(可清空) |
+| POST | `/sync` | 手动触发一次采集(前端「立即同步」) |
+| POST | `/reauthorize` | 开始扫码(返回二维码 URL) |
+| GET | `/reauthorize/status` | 轮询扫码状态 |
+| POST | `/reauthorize/cancel` | 取消扫码 |
+
+### 5.5 定时任务(并入 `server/cron.js`)
+
+- `0 * * * *`(Asia/Shanghai):小时采样(温度+湿度,每小时整点 +5min 缓冲)。
+- `5 0,3 * * *`:每日聚合 → `battery` 读取 → vendor 补齐扫描。
+- 兼容表达式:`npm run data:mihome`(手动跑一次采集器)备用。
+
+### 5.6 历史查询聚合(history.js)
+
+| range | 时间窗 | 粒度 | 数据源/算法 |
+| --- | --- | --- | --- |
+| `today` | 当天 00:00→now | 小时 | `MihomeEnvHour` 当日行;未来小时返回 null |
+| `month` | 近 30 天 | 天 | `MihomeEnvSample`:`temperatureAvg/humidityAvg`(折线)+ min/max(区间带) |
+| `year` | 近 52 周 | 周 | 按日档**现场聚合**:每周 `avg`(日 avg 均值)、`min`(日 min 最小)、`max`(日 max 最大),不落库 |
+
+响应统一形如 `[{ t, temperature, temperatureMin, temperatureMax, humidity, humidityMin, humidityMax }]`,
+`t` 为桶起始(Asia/Shanghai),缺数据字段为 null。
+
+## 6. 前端设计
+
+`src/pages/MonitorPage.jsx` 的 `tabs` 增加 `{ key: 'env', label: '环境监控' }`,
+对应 `src/pages/monitor/EnvView.jsx`。
+
+### EnvView 结构
+
+1. **授权横幅**(`status !== ok`):
+ `米家授权已失效/待授权` + 【重新授权】按钮 → `Popup` 内 `
`
+ 3s 轮询 `/reauthorize/status` → 成功自动关闭并刷新。
+2. **顶部操作**:`立即同步`(POST `/sync`)。
+3. **家庭列表**:`antd-mobile ` 按家庭分组;组展开后显示该家庭
+ 下的**环境设备卡片**;无环境设备的家庭 → 折叠标题旁标「无环境设备」占位。
+4. **设备卡片**(不可折叠,点击进入详情/趋势):
+ - 标题:**别名(无别名则原名)+ 电量**(如 `卧室 78%`,电量用 `battery` 当天缓存值,
+ 不频繁请求);附带编辑别名按钮(`Dialog.Prompt` → `PUT`);
+ - 概览:`温度 28.1℃ · 湿度 71%`(最新样本)+ 「缺 N 天」暗红角标;
+ - 图表区:`Segmented`(antd-mobile) 切换 **今天/月/年**,默认**今天**;
+ `recharts LineChart` 双线(温度/湿度)+ 可选 min/max 区间带(`Area` band):
+ - `今天` → X 轴逐小时(00:00→当前),数据 `/device/:did/history?range=today`;
+ - `月` → X 轴逐日(近 30 天),数据 `?range=month`(日均折线 + 日 min/max 影带);
+ - `年` → X 轴逐周(近 52 周),数据 `?range=year`(周均值折线 + 周 min/max 影带);
+ - 视图切换/拉数据留在卡片内部(不用全局 tab),逻辑沿用现有 `ServerDetail.jsx` /
+ `DataView.jsx` 图表写法。
+5. 样式复用 `globals.css` 的 `.card`/`.monitor-*` 体系,新增少量 collapse 样式。
+
+> 手风琴用 `Collapse accordion`;「不同时打开」即一次仅一个家庭展开。
+
+## 7. 迁移与部署
+
+1. `npm i @zythum02/mijia-api`(加入 dependencies)。
+2. `schema.prisma` 追加 5 个模型 → `npx prisma migrate dev --name add_mihome_env`。
+3. `.env` 可选 `MIHOME_CACHE_DIR`(默认 `server/mihome/.cache`);
+ 服务端放 `.cache/` 于 `.gitignore`。
+4. 首次部署:在服务器上人工跑一次扫码授权(`npm run data:mihome` 的初始化提示
+ 会输出二维码),写入服务器本地的 `.cache/`。
+5. 数据库迁移走现有 `prisma migrate deploy` 流程。
+
+## 8. 风险与开放问题
+
+| # | 风险/问题 | 应对 |
+| --- | --- | --- |
+| 1 | **逐点历史不可读**(设备本地日志),停机期要精确到刻的值补不上 | 已找到云端聚合通道(`/v2/user/statistics`,min/max/时均值,实测可行);按模型开通情况补齐(炎米 ✅ / 青萍 ❌);精确逐点 → 可选 §10 C |
+| 2 | token 30 天过期需人工扫码 | 需求 4 的重新授权流程已覆盖;扫码流程 120s 超时自动换码 |
+| 3 | 采样时刻固定凌晨,代表性一般 | 已改**每小时采样**,当天小时视图/日均/周均代表性充分;03:00 仅做日档聚合 |
+| 4 | 第三方 `@zythum02` 库上游变动 | 锁定版本;模块边界隔离,只暴露我们自己需要的函数 |
+| 5 | VRF/其他设备写入延迟 5~6s | 仅影响将来的控制功能,本模块只读,无影响 |
+
+## 9. 实施步骤(里程碑)
+
+- **M1 后端地基**:依赖 + Prisma 迁移(5 模型)+ `server/mihome`
+ (认证 + collector 小时采样/每日聚合/电量 + vendorStats 补齐 + history.js 三段聚合 + 路由)+ cron。
+- **M2 前端**:`EnvView`(授权弹窗 / 手风琴家庭组 / 设备卡=别名+电量 /
+ 别名编辑 / Segmented 今天·月·年视图与图表 / 缺口角标)。
+- **M3 联调**:真机/Web 端到端 —— 小时采样与日聚合、停机恢复追赶与 vendor 补齐、
+ 扫码重授权、别名、电量、三个粒度的图表与缺口展示。
+- **M4(可选,已基本闭环)**:`/v2/user/statistics` 云端聚合历史通道已实测打通,
+ 直接并入 M1 的 `vendorHistoryFiller`(无需再抓包 App)。
+- **M5(可选)**:可选项 C 家侧本地采样代理(见 §10),用于「精确逐点」与分钟级采样。
+
+## 10. 可选项 C:家侧本地采样代理 + 缓冲补数
+
+> 背景:主线「云 API 每日采样」的停机跨天缺口现可由云端聚合统计(§2.2B)补齐到 [min,max]/小时
+> 粒度;可选项 C 是把它做到**精确逐点 / 分钟级**——家侧一个常驻采集进程(可选配合小米中枢网关),
+> 本地连续采样并缓冲,服务端恢复后拉真值回填。
+> 与主线**并行可选**,不影响 §1~§9 落地;仅在追求细粒度历史时投入。
+
+### 10.1 事实依据(已调研)
+
+| 事实 | 结论 |
+| --- | --- |
+| 家庭现有网关 | 无中枢/多模网关;`blt.*` 设备挂在「小爱音箱 Play 增强版」上转发,该音箱**不开放局域网 API** |
+| 局域网直连设备本身 | 需本地 BLE 适配器;青萍闹钟(CGD1)协议已逆向但**仅有实时/设置**、无历史通道;炎米 ym001 **零社区支持**,需自行逆向厂商 GATT + 推导 MiKey,把握低 |
+| 若有小米中枢网关 | 官方 HA 集成走网关**内置本地 MQTT Broker**,可本地化 WiFi+BLE 设备、断外网可用、延迟 10~50ms(社区实测 `ha_xiaomi_home`);但本地 Broker **只推实时 props,不提供历史** |
+| 概率评估 | 本地实时读取:无网关走蓝牙 ~60~85%(青萍高/炎米中);加中枢网关 ~85%。补停机期历史:三条局域网路线均**不直接提供**,只能靠「本地连续采样 + 缓冲」自建 |
+
+### 10.2 方案
+
+```
+家庭内常驻小机(现有 Windows 机 / 树莓派) 跑 server/mihome-agent/
+ ├─ 采样源(可切换): a) 云 getDevicesProp (同 §5.3, 无需新硬件)
+ │ b) 加中枢网关后走本地 MQTT(断外网可用, 秒级粒度)
+ │ c) 未来本地 BLE 嗅探(青萍 CGD1 优先)
+ ├─ 每 N 分钟采样 → 写本地缓冲 SQLite/JSONL(本地保留 180 天)
+ └─ 提供 GET /samples?from&to&did 供服务端拉取
+服务端(iboard)
+ └─ 停机恢复/每日同步时: 调 agent 拉缺口区间真实值 → 写 MihomeEnvSample(origin=backfill)
+ (服务端主动拉 agent,agent 无需入公网,可用内网/隧道)
+```
+
+### 10.3 效果与代价
+
+- **效果**:停机期 agent 缓冲持续采样,恢复后以**精确逐点/分钟级**真值回填(粒度高于 §2.2B 的
+ 聚合统计);加中枢网关后数据链路断外网可用、秒级推送。
+- **代价**:家中常驻进程(可复用现有 Windows 开发机);可选购买中枢网关(~¥349);
+ agent 与服务端的传输通道需内网/VPN/隧道。
+- **决策点**:是否投入属产品决策。当前「补齐停机缺口」已被 §2.2B 的云端统计覆盖(满足
+ 「数据不比米家少」);C 只对「要更细粒度」有增量价值。接入点:agent 值写入
+ `MihomeEnvSample`,`origin=backfill`。
+- **本地直连协议现状**(中枢/蓝牙):官方 HA 集成走中枢内置 MQTT Broker(需 HA 或移植其
+ `MipsLocalClient` 的证书鉴权+微链路,无公开协议,自有 Node agent 直连把握中低);纯 BLE
+ 嗅探见 §10.1 表格(青萍 CGD1 有逆向基础、炎米零资料)。
\ No newline at end of file
diff --git a/generated/prisma/browser.ts b/generated/prisma/browser.ts
index 209e28b..2b1f0eb 100644
--- a/generated/prisma/browser.ts
+++ b/generated/prisma/browser.ts
@@ -82,3 +82,28 @@ export type ScraperCache = Prisma.ScraperCacheModel
*
*/
export type OilPriceHistory = Prisma.OilPriceHistoryModel
+/**
+ * Model MihomeAccount
+ *
+ */
+export type MihomeAccount = Prisma.MihomeAccountModel
+/**
+ * Model MihomeHome
+ *
+ */
+export type MihomeHome = Prisma.MihomeHomeModel
+/**
+ * Model MihomeDevice
+ *
+ */
+export type MihomeDevice = Prisma.MihomeDeviceModel
+/**
+ * Model MihomeEnvSample
+ *
+ */
+export type MihomeEnvSample = Prisma.MihomeEnvSampleModel
+/**
+ * Model MihomeEnvHour
+ *
+ */
+export type MihomeEnvHour = Prisma.MihomeEnvHourModel
diff --git a/generated/prisma/client.ts b/generated/prisma/client.ts
index 3e172a1..5eb90db 100644
--- a/generated/prisma/client.ts
+++ b/generated/prisma/client.ts
@@ -106,3 +106,28 @@ export type ScraperCache = Prisma.ScraperCacheModel
*
*/
export type OilPriceHistory = Prisma.OilPriceHistoryModel
+/**
+ * Model MihomeAccount
+ *
+ */
+export type MihomeAccount = Prisma.MihomeAccountModel
+/**
+ * Model MihomeHome
+ *
+ */
+export type MihomeHome = Prisma.MihomeHomeModel
+/**
+ * Model MihomeDevice
+ *
+ */
+export type MihomeDevice = Prisma.MihomeDeviceModel
+/**
+ * Model MihomeEnvSample
+ *
+ */
+export type MihomeEnvSample = Prisma.MihomeEnvSampleModel
+/**
+ * Model MihomeEnvHour
+ *
+ */
+export type MihomeEnvHour = Prisma.MihomeEnvHourModel
diff --git a/generated/prisma/commonInputTypes.ts b/generated/prisma/commonInputTypes.ts
index 8eadb9c..d0d5081 100644
--- a/generated/prisma/commonInputTypes.ts
+++ b/generated/prisma/commonInputTypes.ts
@@ -306,6 +306,85 @@ export type JsonNullableWithAggregatesFilterBase<$PrismaModel = never> = {
_max?: Prisma.NestedJsonNullableFilter<$PrismaModel>
}
+export type IntNullableFilter<$PrismaModel = never> = {
+ equals?: number | Prisma.IntFieldRefInput<$PrismaModel> | null
+ in?: number[] | null
+ notIn?: number[] | null
+ lt?: number | Prisma.IntFieldRefInput<$PrismaModel>
+ lte?: number | Prisma.IntFieldRefInput<$PrismaModel>
+ gt?: number | Prisma.IntFieldRefInput<$PrismaModel>
+ gte?: number | Prisma.IntFieldRefInput<$PrismaModel>
+ not?: Prisma.NestedIntNullableFilter<$PrismaModel> | number | null
+}
+
+export type DateTimeNullableFilter<$PrismaModel = never> = {
+ equals?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel> | null
+ in?: Date[] | string[] | null
+ notIn?: Date[] | string[] | null
+ lt?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>
+ lte?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>
+ gt?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>
+ gte?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>
+ not?: Prisma.NestedDateTimeNullableFilter<$PrismaModel> | Date | string | null
+}
+
+export type IntNullableWithAggregatesFilter<$PrismaModel = never> = {
+ equals?: number | Prisma.IntFieldRefInput<$PrismaModel> | null
+ in?: number[] | null
+ notIn?: number[] | null
+ lt?: number | Prisma.IntFieldRefInput<$PrismaModel>
+ lte?: number | Prisma.IntFieldRefInput<$PrismaModel>
+ gt?: number | Prisma.IntFieldRefInput<$PrismaModel>
+ gte?: number | Prisma.IntFieldRefInput<$PrismaModel>
+ not?: Prisma.NestedIntNullableWithAggregatesFilter<$PrismaModel> | number | null
+ _count?: Prisma.NestedIntNullableFilter<$PrismaModel>
+ _avg?: Prisma.NestedFloatNullableFilter<$PrismaModel>
+ _sum?: Prisma.NestedIntNullableFilter<$PrismaModel>
+ _min?: Prisma.NestedIntNullableFilter<$PrismaModel>
+ _max?: Prisma.NestedIntNullableFilter<$PrismaModel>
+}
+
+export type DateTimeNullableWithAggregatesFilter<$PrismaModel = never> = {
+ equals?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel> | null
+ in?: Date[] | string[] | null
+ notIn?: Date[] | string[] | null
+ lt?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>
+ lte?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>
+ gt?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>
+ gte?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>
+ not?: Prisma.NestedDateTimeNullableWithAggregatesFilter<$PrismaModel> | Date | string | null
+ _count?: Prisma.NestedIntNullableFilter<$PrismaModel>
+ _min?: Prisma.NestedDateTimeNullableFilter<$PrismaModel>
+ _max?: Prisma.NestedDateTimeNullableFilter<$PrismaModel>
+}
+
+export type FloatNullableFilter<$PrismaModel = never> = {
+ equals?: number | Prisma.FloatFieldRefInput<$PrismaModel> | null
+ in?: number[] | null
+ notIn?: number[] | null
+ lt?: number | Prisma.FloatFieldRefInput<$PrismaModel>
+ lte?: number | Prisma.FloatFieldRefInput<$PrismaModel>
+ gt?: number | Prisma.FloatFieldRefInput<$PrismaModel>
+ gte?: number | Prisma.FloatFieldRefInput<$PrismaModel>
+ not?: Prisma.NestedFloatNullableFilter<$PrismaModel> | number | null
+}
+
+export type FloatNullableWithAggregatesFilter<$PrismaModel = never> = {
+ equals?: number | Prisma.FloatFieldRefInput<$PrismaModel> | null
+ in?: number[] | null
+ notIn?: number[] | null
+ lt?: number | Prisma.FloatFieldRefInput<$PrismaModel>
+ lte?: number | Prisma.FloatFieldRefInput<$PrismaModel>
+ gt?: number | Prisma.FloatFieldRefInput<$PrismaModel>
+ gte?: number | Prisma.FloatFieldRefInput<$PrismaModel>
+ not?: Prisma.NestedFloatNullableWithAggregatesFilter<$PrismaModel> | number | null
+ _count?: Prisma.NestedIntNullableFilter<$PrismaModel>
+ _avg?: Prisma.NestedFloatNullableFilter<$PrismaModel>
+ _sum?: Prisma.NestedFloatNullableFilter<$PrismaModel>
+ _min?: Prisma.NestedFloatNullableFilter<$PrismaModel>
+ _max?: Prisma.NestedFloatNullableFilter<$PrismaModel>
+}
+
export type NestedIntFilter<$PrismaModel = never> = {
equals?: number | Prisma.IntFieldRefInput<$PrismaModel>
in?: number[]
@@ -550,4 +629,72 @@ export type NestedJsonNullableFilterBase<$PrismaModel = never> = {
not?: runtime.InputJsonValue | Prisma.JsonFieldRefInput<$PrismaModel> | Prisma.JsonNullValueFilter
}
+export type NestedDateTimeNullableFilter<$PrismaModel = never> = {
+ equals?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel> | null
+ in?: Date[] | string[] | null
+ notIn?: Date[] | string[] | null
+ lt?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>
+ lte?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>
+ gt?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>
+ gte?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>
+ not?: Prisma.NestedDateTimeNullableFilter<$PrismaModel> | Date | string | null
+}
+
+export type NestedIntNullableWithAggregatesFilter<$PrismaModel = never> = {
+ equals?: number | Prisma.IntFieldRefInput<$PrismaModel> | null
+ in?: number[] | null
+ notIn?: number[] | null
+ lt?: number | Prisma.IntFieldRefInput<$PrismaModel>
+ lte?: number | Prisma.IntFieldRefInput<$PrismaModel>
+ gt?: number | Prisma.IntFieldRefInput<$PrismaModel>
+ gte?: number | Prisma.IntFieldRefInput<$PrismaModel>
+ not?: Prisma.NestedIntNullableWithAggregatesFilter<$PrismaModel> | number | null
+ _count?: Prisma.NestedIntNullableFilter<$PrismaModel>
+ _avg?: Prisma.NestedFloatNullableFilter<$PrismaModel>
+ _sum?: Prisma.NestedIntNullableFilter<$PrismaModel>
+ _min?: Prisma.NestedIntNullableFilter<$PrismaModel>
+ _max?: Prisma.NestedIntNullableFilter<$PrismaModel>
+}
+
+export type NestedFloatNullableFilter<$PrismaModel = never> = {
+ equals?: number | Prisma.FloatFieldRefInput<$PrismaModel> | null
+ in?: number[] | null
+ notIn?: number[] | null
+ lt?: number | Prisma.FloatFieldRefInput<$PrismaModel>
+ lte?: number | Prisma.FloatFieldRefInput<$PrismaModel>
+ gt?: number | Prisma.FloatFieldRefInput<$PrismaModel>
+ gte?: number | Prisma.FloatFieldRefInput<$PrismaModel>
+ not?: Prisma.NestedFloatNullableFilter<$PrismaModel> | number | null
+}
+
+export type NestedDateTimeNullableWithAggregatesFilter<$PrismaModel = never> = {
+ equals?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel> | null
+ in?: Date[] | string[] | null
+ notIn?: Date[] | string[] | null
+ lt?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>
+ lte?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>
+ gt?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>
+ gte?: Date | string | Prisma.DateTimeFieldRefInput<$PrismaModel>
+ not?: Prisma.NestedDateTimeNullableWithAggregatesFilter<$PrismaModel> | Date | string | null
+ _count?: Prisma.NestedIntNullableFilter<$PrismaModel>
+ _min?: Prisma.NestedDateTimeNullableFilter<$PrismaModel>
+ _max?: Prisma.NestedDateTimeNullableFilter<$PrismaModel>
+}
+
+export type NestedFloatNullableWithAggregatesFilter<$PrismaModel = never> = {
+ equals?: number | Prisma.FloatFieldRefInput<$PrismaModel> | null
+ in?: number[] | null
+ notIn?: number[] | null
+ lt?: number | Prisma.FloatFieldRefInput<$PrismaModel>
+ lte?: number | Prisma.FloatFieldRefInput<$PrismaModel>
+ gt?: number | Prisma.FloatFieldRefInput<$PrismaModel>
+ gte?: number | Prisma.FloatFieldRefInput<$PrismaModel>
+ not?: Prisma.NestedFloatNullableWithAggregatesFilter<$PrismaModel> | number | null
+ _count?: Prisma.NestedIntNullableFilter<$PrismaModel>
+ _avg?: Prisma.NestedFloatNullableFilter<$PrismaModel>
+ _sum?: Prisma.NestedFloatNullableFilter<$PrismaModel>
+ _min?: Prisma.NestedFloatNullableFilter<$PrismaModel>
+ _max?: Prisma.NestedFloatNullableFilter<$PrismaModel>
+}
+
diff --git a/generated/prisma/internal/class.ts b/generated/prisma/internal/class.ts
index 41977bd..9d85193 100644
--- a/generated/prisma/internal/class.ts
+++ b/generated/prisma/internal/class.ts
@@ -20,7 +20,7 @@ const config: runtime.GetPrismaClientConfig = {
"clientVersion": "7.7.0",
"engineVersion": "75cbdc1eb7150937890ad5465d861175c6624711",
"activeProvider": "mysql",
- "inlineSchema": "// This is your Prisma schema file,\n// learn more about it in the docs: https://pris.ly/d/prisma-schema\n\n// Get a free hosted Postgres database in seconds: `npx create-db`\n\ngenerator client {\n provider = \"prisma-client\"\n output = \"../generated/prisma\"\n}\n\ndatasource db {\n provider = \"mysql\"\n}\n\nmodel User {\n id Int @id @default(autoincrement())\n name String\n email String @unique\n password String\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n}\n\nmodel Article {\n id Int @id @default(autoincrement())\n title String\n slug String @unique\n content String\n date String\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n}\n\nmodel Strategy {\n id Int @id @default(autoincrement())\n name String\n description String\n data Json\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n}\n\nmodel Indicator {\n id Int @id @default(autoincrement())\n name String @unique\n groupName String\n title String @default(\"\")\n unit String @default(\"\")\n source String @default(\"\")\n frequency String @default(\"month\") // year | quarter | month | day\n hidden Boolean @default(false) // true = 数据/脚本保留, 但不在前端展示\n points IndicatorPoint[]\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n}\n\nmodel IndicatorPoint {\n id Int @id @default(autoincrement())\n indicatorId Int\n indicator Indicator @relation(fields: [indicatorId], references: [id], onDelete: Cascade)\n period String // \"2024\" | \"2024-Q1\" | \"2024-01\" | \"2024-01-15\"\n value Float\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n @@unique([indicatorId, period])\n}\n\n// 新闻: 每天 3 点由 mx_finance_search_news 拉取, 按影响大小排序, 累加多日供首页无限滚动\nmodel News {\n id Int @id @default(autoincrement())\n title String\n summary String @default(\"\")\n content String? @db.Text\n source String @default(\"\")\n url String @default(\"\")\n publishedAt DateTime\n impactRank Int\n createdAt DateTime @default(now())\n\n @@unique([title, publishedAt])\n @@index([publishedAt])\n}\n\n// 报警: refresh 写库时比对同 (indicatorName, period) 的跨源数据, 差异超阈值记录\nmodel Alert {\n id Int @id @default(autoincrement())\n indicatorName String\n period String\n valueA Float\n valueB Float\n sourceA String\n sourceB String\n diff Float\n diffRatio Float\n createdAt DateTime @default(now())\n\n @@index([createdAt])\n}\n\n// 服务器监控: 对接 komari 公开 API\nmodel ServerNode {\n id Int @id @default(autoincrement())\n uuid String @unique\n name String\n cpuName String @default(\"\")\n os String @default(\"\")\n region String @default(\"\")\n memTotal BigInt @default(0)\n diskTotal BigInt @default(0)\n cpuCores Int @default(0)\n // 最新实时快照\n cpuUsage Float @default(0)\n ramUsed BigInt @default(0)\n swapUsed BigInt @default(0)\n load1 Float @default(0)\n load5 Float @default(0)\n load15 Float @default(0)\n diskUsed BigInt @default(0)\n netIn BigInt @default(0)\n netOut BigInt @default(0)\n uptime BigInt @default(0)\n process Int @default(0)\n connections Int @default(0)\n status String @default(\"unknown\") // online | offline | unknown\n recordedAt DateTime\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n}\n\n// 时序历史: 每节点每分钟一条 (komari records 1 分钟粒度)\nmodel ServerNodeHistory {\n id Int @id @default(autoincrement())\n uuid String\n period DateTime\n cpu Float @default(0)\n ram BigInt @default(0)\n load Float @default(0)\n disk BigInt @default(0)\n netIn BigInt @default(0)\n netOut BigInt @default(0)\n process Int @default(0)\n connections Int @default(0)\n createdAt DateTime @default(now())\n\n @@unique([uuid, period])\n @@index([uuid, period])\n}\n\n// 服务健康检查: 本应用自检 (健康端点 / DB / 第三方)\nmodel ServiceCheck {\n id Int @id @default(autoincrement())\n name String @unique\n url String\n status String @default(\"unknown\") // up | down | unknown\n latencyMs Int @default(0)\n message String @default(\"\")\n lastCheckAt DateTime\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n}\n\nmodel Econ_SowInventory {\n id Int @id @default(autoincrement())\n month String @unique\n inventory Int // 能繁母猪数量(万头)\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n}\n\nmodel ScraperCache {\n id Int @id @default(autoincrement())\n scraperName String @unique // 爬虫名称,如:sow-inventory\n lastDataHash String? // 上次数据指纹\n lastUpdateAt DateTime // 上次更新时间\n metadata Json? // 其他元数据\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n}\n\n// 浙江省油价历史 (apizero price 接口每日抓取)\n// 每天 04:00 cron 触发: 检查 schedule 里待定且 <= 昨天的调价日, 抓 price?province=浙江 存本表\n// unique (date, province, fuel) 防重复\nmodel OilPriceHistory {\n id Int @id @default(autoincrement())\n date DateTime // 调价日次日 (即数据实际抓取日)\n province String // '浙江'\n fuel String // '92' | '95' | '98' | '0'\n price Float // 油价 (元/升, 4 位小数足够)\n source String @default(\"apizero\")\n createdAt DateTime @default(now())\n\n @@unique([date, province, fuel])\n @@index([province, fuel, date])\n}\n",
+ "inlineSchema": "// This is your Prisma schema file,\n// learn more about it in the docs: https://pris.ly/d/prisma-schema\n\n// Get a free hosted Postgres database in seconds: `npx create-db`\n\ngenerator client {\n provider = \"prisma-client\"\n output = \"../generated/prisma\"\n}\n\ndatasource db {\n provider = \"mysql\"\n}\n\nmodel User {\n id Int @id @default(autoincrement())\n name String\n email String @unique\n password String\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n}\n\nmodel Article {\n id Int @id @default(autoincrement())\n title String\n slug String @unique\n content String\n date String\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n}\n\nmodel Strategy {\n id Int @id @default(autoincrement())\n name String\n description String\n data Json\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n}\n\nmodel Indicator {\n id Int @id @default(autoincrement())\n name String @unique\n groupName String\n title String @default(\"\")\n unit String @default(\"\")\n source String @default(\"\")\n frequency String @default(\"month\") // year | quarter | month | day\n hidden Boolean @default(false) // true = 数据/脚本保留, 但不在前端展示\n points IndicatorPoint[]\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n}\n\nmodel IndicatorPoint {\n id Int @id @default(autoincrement())\n indicatorId Int\n indicator Indicator @relation(fields: [indicatorId], references: [id], onDelete: Cascade)\n period String // \"2024\" | \"2024-Q1\" | \"2024-01\" | \"2024-01-15\"\n value Float\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n @@unique([indicatorId, period])\n}\n\n// 新闻: 每天 3 点由 mx_finance_search_news 拉取, 按影响大小排序, 累加多日供首页无限滚动\nmodel News {\n id Int @id @default(autoincrement())\n title String\n summary String @default(\"\")\n content String? @db.Text\n source String @default(\"\")\n url String @default(\"\")\n publishedAt DateTime\n impactRank Int\n createdAt DateTime @default(now())\n\n @@unique([title, publishedAt])\n @@index([publishedAt])\n}\n\n// 报警: refresh 写库时比对同 (indicatorName, period) 的跨源数据, 差异超阈值记录\nmodel Alert {\n id Int @id @default(autoincrement())\n indicatorName String\n period String\n valueA Float\n valueB Float\n sourceA String\n sourceB String\n diff Float\n diffRatio Float\n createdAt DateTime @default(now())\n\n @@index([createdAt])\n}\n\n// 服务器监控: 对接 komari 公开 API\nmodel ServerNode {\n id Int @id @default(autoincrement())\n uuid String @unique\n name String\n cpuName String @default(\"\")\n os String @default(\"\")\n region String @default(\"\")\n memTotal BigInt @default(0)\n diskTotal BigInt @default(0)\n cpuCores Int @default(0)\n // 最新实时快照\n cpuUsage Float @default(0)\n ramUsed BigInt @default(0)\n swapUsed BigInt @default(0)\n load1 Float @default(0)\n load5 Float @default(0)\n load15 Float @default(0)\n diskUsed BigInt @default(0)\n netIn BigInt @default(0)\n netOut BigInt @default(0)\n uptime BigInt @default(0)\n process Int @default(0)\n connections Int @default(0)\n status String @default(\"unknown\") // online | offline | unknown\n recordedAt DateTime\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n}\n\n// 时序历史: 每节点每分钟一条 (komari records 1 分钟粒度)\nmodel ServerNodeHistory {\n id Int @id @default(autoincrement())\n uuid String\n period DateTime\n cpu Float @default(0)\n ram BigInt @default(0)\n load Float @default(0)\n disk BigInt @default(0)\n netIn BigInt @default(0)\n netOut BigInt @default(0)\n process Int @default(0)\n connections Int @default(0)\n createdAt DateTime @default(now())\n\n @@unique([uuid, period])\n @@index([uuid, period])\n}\n\n// 服务健康检查: 本应用自检 (健康端点 / DB / 第三方)\nmodel ServiceCheck {\n id Int @id @default(autoincrement())\n name String @unique\n url String\n status String @default(\"unknown\") // up | down | unknown\n latencyMs Int @default(0)\n message String @default(\"\")\n lastCheckAt DateTime\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n}\n\nmodel Econ_SowInventory {\n id Int @id @default(autoincrement())\n month String @unique\n inventory Int // 能繁母猪数量(万头)\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n}\n\nmodel ScraperCache {\n id Int @id @default(autoincrement())\n scraperName String @unique // 爬虫名称,如:sow-inventory\n lastDataHash String? // 上次数据指纹\n lastUpdateAt DateTime // 上次更新时间\n metadata Json? // 其他元数据\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n}\n\n// 浙江省油价历史 (apizero price 接口每日抓取)\n// 每天 04:00 cron 触发: 检查 schedule 里待定且 <= 昨天的调价日, 抓 price?province=浙江 存本表\n// unique (date, province, fuel) 防重复\nmodel OilPriceHistory {\n id Int @id @default(autoincrement())\n date DateTime // 调价日次日 (即数据实际抓取日)\n province String // '浙江'\n fuel String // '92' | '95' | '0'\n price Float // 油价 (元/升, 4 位小数足够)\n source String @default(\"apizero\")\n createdAt DateTime @default(now())\n\n @@unique([date, province, fuel])\n @@index([province, fuel, date])\n}\n\n// ==================== 环境监控:米家 ====================\n\n// 米家授权状态 (DiskCache 存凭证, 本表只存状态/错误供前端展示)\nmodel MihomeAccount {\n id Int @id @default(autoincrement())\n key String @unique @default(\"default\")\n userId String @default(\"\")\n status String @default(\"unknown\") // ok | pending | expired\n lastError String @default(\"\")\n updatedAt DateTime @updatedAt\n}\n\nmodel MihomeHome {\n id Int @id @default(autoincrement())\n homeId String @unique\n name String\n createdAt DateTime @default(now())\n devices MihomeDevice[]\n}\n\nmodel MihomeDevice {\n id Int @id @default(autoincrement())\n did String @unique\n homeId String\n home MihomeHome @relation(fields: [homeId], references: [homeId])\n model String\n name String\n alias String? // 用户别名, 仅本应用展示\n tempSiid Int\n tempPiid Int\n humSiid Int\n humPiid Int\n battSiid Int // 电池电量属性 (炎米 3.1003 / 青萍 2.3)\n battPiid Int\n battery Int? // 最近一次电量 (每天读一次, 标题展示用)\n batteryAt DateTime? // 电量读取时间 (当天缓存, 不频繁更新)\n enabled Boolean @default(true)\n lastSyncAt DateTime?\n createdAt DateTime @default(now())\n samples MihomeEnvSample[]\n hours MihomeEnvHour[]\n}\n\n// 日档: 月视图(逐日)数据源; unique (deviceId, date) 防重\nmodel MihomeEnvSample {\n id Int @id @default(autoincrement())\n deviceId Int\n device MihomeDevice @relation(fields: [deviceId], references: [id], onDelete: Cascade)\n date DateTime // 采样日 (Asia/Shanghai 当日 00:00 存 UTC)\n temperature Float? // 当日最后一次实时值 (或 vendor hour 均值)\n humidity Float?\n temperatureAvg Float? // 当日均值 (由小时档聚合, 或 vendor_hour)\n humidityAvg Float?\n temperatureMin Float? // 当日最低\n temperatureMax Float? // 当日最高\n humidityMin Float?\n humidityMax Float?\n origin String @default(\"live\") // live | vendor_history | backfill\n sampledAt DateTime?\n raw Json?\n createdAt DateTime @default(now())\n\n @@unique([deviceId, date])\n @@index([deviceId, date])\n}\n\n// 小时档: 当天视图(逐小时)数据源; unique (deviceId, hour) 防重\nmodel MihomeEnvHour {\n id Int @id @default(autoincrement())\n deviceId Int\n device MihomeDevice @relation(fields: [deviceId], references: [id], onDelete: Cascade)\n hour DateTime // Asia/Shanghai 整点 (存 UTC)\n temperatureAvg Float? // 该小时均值 (live 采样点, 或 vendor_hour)\n humidityAvg Float?\n raw Json?\n createdAt DateTime @default(now())\n\n @@unique([deviceId, hour])\n @@index([deviceId, hour])\n}\n",
"runtimeDataModel": {
"models": {},
"enums": {},
@@ -32,10 +32,10 @@ const config: runtime.GetPrismaClientConfig = {
}
}
-config.runtimeDataModel = JSON.parse("{\"models\":{\"User\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"email\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"password\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"Article\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"title\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"slug\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"content\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"date\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"Strategy\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"description\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"data\",\"kind\":\"scalar\",\"type\":\"Json\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"Indicator\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"groupName\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"title\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"unit\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"source\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"frequency\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"hidden\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"points\",\"kind\":\"object\",\"type\":\"IndicatorPoint\",\"relationName\":\"IndicatorToIndicatorPoint\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"IndicatorPoint\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"indicatorId\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"indicator\",\"kind\":\"object\",\"type\":\"Indicator\",\"relationName\":\"IndicatorToIndicatorPoint\"},{\"name\":\"period\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"value\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"News\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"title\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"summary\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"content\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"source\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"url\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"publishedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"impactRank\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"Alert\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"indicatorName\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"period\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"valueA\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"valueB\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"sourceA\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"sourceB\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"diff\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"diffRatio\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"ServerNode\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"uuid\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"cpuName\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"os\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"region\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"memTotal\",\"kind\":\"scalar\",\"type\":\"BigInt\"},{\"name\":\"diskTotal\",\"kind\":\"scalar\",\"type\":\"BigInt\"},{\"name\":\"cpuCores\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"cpuUsage\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"ramUsed\",\"kind\":\"scalar\",\"type\":\"BigInt\"},{\"name\":\"swapUsed\",\"kind\":\"scalar\",\"type\":\"BigInt\"},{\"name\":\"load1\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"load5\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"load15\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"diskUsed\",\"kind\":\"scalar\",\"type\":\"BigInt\"},{\"name\":\"netIn\",\"kind\":\"scalar\",\"type\":\"BigInt\"},{\"name\":\"netOut\",\"kind\":\"scalar\",\"type\":\"BigInt\"},{\"name\":\"uptime\",\"kind\":\"scalar\",\"type\":\"BigInt\"},{\"name\":\"process\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"connections\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"status\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"recordedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"ServerNodeHistory\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"uuid\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"period\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"cpu\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"ram\",\"kind\":\"scalar\",\"type\":\"BigInt\"},{\"name\":\"load\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"disk\",\"kind\":\"scalar\",\"type\":\"BigInt\"},{\"name\":\"netIn\",\"kind\":\"scalar\",\"type\":\"BigInt\"},{\"name\":\"netOut\",\"kind\":\"scalar\",\"type\":\"BigInt\"},{\"name\":\"process\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"connections\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"ServiceCheck\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"url\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"status\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"latencyMs\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"message\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"lastCheckAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"Econ_SowInventory\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"month\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"inventory\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"ScraperCache\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"scraperName\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"lastDataHash\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"lastUpdateAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"metadata\",\"kind\":\"scalar\",\"type\":\"Json\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"OilPriceHistory\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"date\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"province\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"fuel\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"price\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"source\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null}},\"enums\":{},\"types\":{}}")
+config.runtimeDataModel = JSON.parse("{\"models\":{\"User\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"email\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"password\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"Article\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"title\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"slug\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"content\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"date\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"Strategy\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"description\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"data\",\"kind\":\"scalar\",\"type\":\"Json\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"Indicator\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"groupName\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"title\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"unit\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"source\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"frequency\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"hidden\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"points\",\"kind\":\"object\",\"type\":\"IndicatorPoint\",\"relationName\":\"IndicatorToIndicatorPoint\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"IndicatorPoint\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"indicatorId\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"indicator\",\"kind\":\"object\",\"type\":\"Indicator\",\"relationName\":\"IndicatorToIndicatorPoint\"},{\"name\":\"period\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"value\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"News\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"title\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"summary\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"content\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"source\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"url\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"publishedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"impactRank\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"Alert\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"indicatorName\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"period\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"valueA\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"valueB\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"sourceA\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"sourceB\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"diff\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"diffRatio\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"ServerNode\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"uuid\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"cpuName\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"os\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"region\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"memTotal\",\"kind\":\"scalar\",\"type\":\"BigInt\"},{\"name\":\"diskTotal\",\"kind\":\"scalar\",\"type\":\"BigInt\"},{\"name\":\"cpuCores\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"cpuUsage\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"ramUsed\",\"kind\":\"scalar\",\"type\":\"BigInt\"},{\"name\":\"swapUsed\",\"kind\":\"scalar\",\"type\":\"BigInt\"},{\"name\":\"load1\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"load5\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"load15\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"diskUsed\",\"kind\":\"scalar\",\"type\":\"BigInt\"},{\"name\":\"netIn\",\"kind\":\"scalar\",\"type\":\"BigInt\"},{\"name\":\"netOut\",\"kind\":\"scalar\",\"type\":\"BigInt\"},{\"name\":\"uptime\",\"kind\":\"scalar\",\"type\":\"BigInt\"},{\"name\":\"process\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"connections\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"status\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"recordedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"ServerNodeHistory\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"uuid\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"period\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"cpu\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"ram\",\"kind\":\"scalar\",\"type\":\"BigInt\"},{\"name\":\"load\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"disk\",\"kind\":\"scalar\",\"type\":\"BigInt\"},{\"name\":\"netIn\",\"kind\":\"scalar\",\"type\":\"BigInt\"},{\"name\":\"netOut\",\"kind\":\"scalar\",\"type\":\"BigInt\"},{\"name\":\"process\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"connections\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"ServiceCheck\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"url\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"status\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"latencyMs\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"message\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"lastCheckAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"Econ_SowInventory\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"month\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"inventory\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"ScraperCache\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"scraperName\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"lastDataHash\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"lastUpdateAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"metadata\",\"kind\":\"scalar\",\"type\":\"Json\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"OilPriceHistory\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"date\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"province\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"fuel\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"price\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"source\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"MihomeAccount\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"key\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"status\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"lastError\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"MihomeHome\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"homeId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"devices\",\"kind\":\"object\",\"type\":\"MihomeDevice\",\"relationName\":\"MihomeDeviceToMihomeHome\"}],\"dbName\":null},\"MihomeDevice\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"did\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"homeId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"home\",\"kind\":\"object\",\"type\":\"MihomeHome\",\"relationName\":\"MihomeDeviceToMihomeHome\"},{\"name\":\"model\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"alias\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"tempSiid\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"tempPiid\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"humSiid\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"humPiid\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"battSiid\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"battPiid\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"battery\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"batteryAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"enabled\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"lastSyncAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"samples\",\"kind\":\"object\",\"type\":\"MihomeEnvSample\",\"relationName\":\"MihomeDeviceToMihomeEnvSample\"},{\"name\":\"hours\",\"kind\":\"object\",\"type\":\"MihomeEnvHour\",\"relationName\":\"MihomeDeviceToMihomeEnvHour\"}],\"dbName\":null},\"MihomeEnvSample\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"deviceId\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"device\",\"kind\":\"object\",\"type\":\"MihomeDevice\",\"relationName\":\"MihomeDeviceToMihomeEnvSample\"},{\"name\":\"date\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"temperature\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"humidity\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"temperatureAvg\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"humidityAvg\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"temperatureMin\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"temperatureMax\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"humidityMin\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"humidityMax\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"origin\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"sampledAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"raw\",\"kind\":\"scalar\",\"type\":\"Json\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"MihomeEnvHour\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"deviceId\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"device\",\"kind\":\"object\",\"type\":\"MihomeDevice\",\"relationName\":\"MihomeDeviceToMihomeEnvHour\"},{\"name\":\"hour\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"temperatureAvg\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"humidityAvg\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"raw\",\"kind\":\"scalar\",\"type\":\"Json\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null}},\"enums\":{},\"types\":{}}")
config.parameterizationSchema = {
- strings: JSON.parse("[\"where\",\"User.findUnique\",\"User.findUniqueOrThrow\",\"orderBy\",\"cursor\",\"User.findFirst\",\"User.findFirstOrThrow\",\"User.findMany\",\"data\",\"User.createOne\",\"User.createMany\",\"User.updateOne\",\"User.updateMany\",\"create\",\"update\",\"User.upsertOne\",\"User.deleteOne\",\"User.deleteMany\",\"having\",\"_count\",\"_avg\",\"_sum\",\"_min\",\"_max\",\"User.groupBy\",\"User.aggregate\",\"Article.findUnique\",\"Article.findUniqueOrThrow\",\"Article.findFirst\",\"Article.findFirstOrThrow\",\"Article.findMany\",\"Article.createOne\",\"Article.createMany\",\"Article.updateOne\",\"Article.updateMany\",\"Article.upsertOne\",\"Article.deleteOne\",\"Article.deleteMany\",\"Article.groupBy\",\"Article.aggregate\",\"Strategy.findUnique\",\"Strategy.findUniqueOrThrow\",\"Strategy.findFirst\",\"Strategy.findFirstOrThrow\",\"Strategy.findMany\",\"Strategy.createOne\",\"Strategy.createMany\",\"Strategy.updateOne\",\"Strategy.updateMany\",\"Strategy.upsertOne\",\"Strategy.deleteOne\",\"Strategy.deleteMany\",\"Strategy.groupBy\",\"Strategy.aggregate\",\"indicator\",\"points\",\"Indicator.findUnique\",\"Indicator.findUniqueOrThrow\",\"Indicator.findFirst\",\"Indicator.findFirstOrThrow\",\"Indicator.findMany\",\"Indicator.createOne\",\"Indicator.createMany\",\"Indicator.updateOne\",\"Indicator.updateMany\",\"Indicator.upsertOne\",\"Indicator.deleteOne\",\"Indicator.deleteMany\",\"Indicator.groupBy\",\"Indicator.aggregate\",\"IndicatorPoint.findUnique\",\"IndicatorPoint.findUniqueOrThrow\",\"IndicatorPoint.findFirst\",\"IndicatorPoint.findFirstOrThrow\",\"IndicatorPoint.findMany\",\"IndicatorPoint.createOne\",\"IndicatorPoint.createMany\",\"IndicatorPoint.updateOne\",\"IndicatorPoint.updateMany\",\"IndicatorPoint.upsertOne\",\"IndicatorPoint.deleteOne\",\"IndicatorPoint.deleteMany\",\"IndicatorPoint.groupBy\",\"IndicatorPoint.aggregate\",\"News.findUnique\",\"News.findUniqueOrThrow\",\"News.findFirst\",\"News.findFirstOrThrow\",\"News.findMany\",\"News.createOne\",\"News.createMany\",\"News.updateOne\",\"News.updateMany\",\"News.upsertOne\",\"News.deleteOne\",\"News.deleteMany\",\"News.groupBy\",\"News.aggregate\",\"Alert.findUnique\",\"Alert.findUniqueOrThrow\",\"Alert.findFirst\",\"Alert.findFirstOrThrow\",\"Alert.findMany\",\"Alert.createOne\",\"Alert.createMany\",\"Alert.updateOne\",\"Alert.updateMany\",\"Alert.upsertOne\",\"Alert.deleteOne\",\"Alert.deleteMany\",\"Alert.groupBy\",\"Alert.aggregate\",\"ServerNode.findUnique\",\"ServerNode.findUniqueOrThrow\",\"ServerNode.findFirst\",\"ServerNode.findFirstOrThrow\",\"ServerNode.findMany\",\"ServerNode.createOne\",\"ServerNode.createMany\",\"ServerNode.updateOne\",\"ServerNode.updateMany\",\"ServerNode.upsertOne\",\"ServerNode.deleteOne\",\"ServerNode.deleteMany\",\"ServerNode.groupBy\",\"ServerNode.aggregate\",\"ServerNodeHistory.findUnique\",\"ServerNodeHistory.findUniqueOrThrow\",\"ServerNodeHistory.findFirst\",\"ServerNodeHistory.findFirstOrThrow\",\"ServerNodeHistory.findMany\",\"ServerNodeHistory.createOne\",\"ServerNodeHistory.createMany\",\"ServerNodeHistory.updateOne\",\"ServerNodeHistory.updateMany\",\"ServerNodeHistory.upsertOne\",\"ServerNodeHistory.deleteOne\",\"ServerNodeHistory.deleteMany\",\"ServerNodeHistory.groupBy\",\"ServerNodeHistory.aggregate\",\"ServiceCheck.findUnique\",\"ServiceCheck.findUniqueOrThrow\",\"ServiceCheck.findFirst\",\"ServiceCheck.findFirstOrThrow\",\"ServiceCheck.findMany\",\"ServiceCheck.createOne\",\"ServiceCheck.createMany\",\"ServiceCheck.updateOne\",\"ServiceCheck.updateMany\",\"ServiceCheck.upsertOne\",\"ServiceCheck.deleteOne\",\"ServiceCheck.deleteMany\",\"ServiceCheck.groupBy\",\"ServiceCheck.aggregate\",\"Econ_SowInventory.findUnique\",\"Econ_SowInventory.findUniqueOrThrow\",\"Econ_SowInventory.findFirst\",\"Econ_SowInventory.findFirstOrThrow\",\"Econ_SowInventory.findMany\",\"Econ_SowInventory.createOne\",\"Econ_SowInventory.createMany\",\"Econ_SowInventory.updateOne\",\"Econ_SowInventory.updateMany\",\"Econ_SowInventory.upsertOne\",\"Econ_SowInventory.deleteOne\",\"Econ_SowInventory.deleteMany\",\"Econ_SowInventory.groupBy\",\"Econ_SowInventory.aggregate\",\"ScraperCache.findUnique\",\"ScraperCache.findUniqueOrThrow\",\"ScraperCache.findFirst\",\"ScraperCache.findFirstOrThrow\",\"ScraperCache.findMany\",\"ScraperCache.createOne\",\"ScraperCache.createMany\",\"ScraperCache.updateOne\",\"ScraperCache.updateMany\",\"ScraperCache.upsertOne\",\"ScraperCache.deleteOne\",\"ScraperCache.deleteMany\",\"ScraperCache.groupBy\",\"ScraperCache.aggregate\",\"OilPriceHistory.findUnique\",\"OilPriceHistory.findUniqueOrThrow\",\"OilPriceHistory.findFirst\",\"OilPriceHistory.findFirstOrThrow\",\"OilPriceHistory.findMany\",\"OilPriceHistory.createOne\",\"OilPriceHistory.createMany\",\"OilPriceHistory.updateOne\",\"OilPriceHistory.updateMany\",\"OilPriceHistory.upsertOne\",\"OilPriceHistory.deleteOne\",\"OilPriceHistory.deleteMany\",\"OilPriceHistory.groupBy\",\"OilPriceHistory.aggregate\",\"AND\",\"OR\",\"NOT\",\"id\",\"date\",\"province\",\"fuel\",\"price\",\"source\",\"createdAt\",\"equals\",\"in\",\"notIn\",\"lt\",\"lte\",\"gt\",\"gte\",\"not\",\"contains\",\"startsWith\",\"endsWith\",\"search\",\"date_province_fuel\",\"scraperName\",\"lastDataHash\",\"lastUpdateAt\",\"metadata\",\"updatedAt\",\"string_contains\",\"string_starts_with\",\"string_ends_with\",\"array_starts_with\",\"array_ends_with\",\"array_contains\",\"month\",\"inventory\",\"name\",\"url\",\"status\",\"latencyMs\",\"message\",\"lastCheckAt\",\"uuid\",\"period\",\"cpu\",\"ram\",\"load\",\"disk\",\"netIn\",\"netOut\",\"process\",\"connections\",\"uuid_period\",\"cpuName\",\"os\",\"region\",\"memTotal\",\"diskTotal\",\"cpuCores\",\"cpuUsage\",\"ramUsed\",\"swapUsed\",\"load1\",\"load5\",\"load15\",\"diskUsed\",\"uptime\",\"recordedAt\",\"indicatorName\",\"valueA\",\"valueB\",\"sourceA\",\"sourceB\",\"diff\",\"diffRatio\",\"title\",\"summary\",\"content\",\"publishedAt\",\"impactRank\",\"title_publishedAt\",\"indicatorId\",\"value\",\"groupName\",\"unit\",\"frequency\",\"hidden\",\"every\",\"some\",\"none\",\"indicatorId_period\",\"description\",\"slug\",\"email\",\"password\",\"is\",\"isNot\",\"_relevance\",\"connectOrCreate\",\"upsert\",\"createMany\",\"set\",\"disconnect\",\"delete\",\"connect\",\"updateMany\",\"deleteMany\",\"increment\",\"decrement\",\"multiply\",\"divide\"]"),
- graph: "3gNqtgEJxAEAAPACADDFAQAABAAQxgEAAPACADDHAQIAAAABzQFAAL0CACHfAUAAvQIAIegBAQC-AgAhoQIBAAAAAaICAQC-AgAhAQAAAAEAIAEAAAABACAJxAEAAPACADDFAQAABAAQxgEAAPACADDHAQIAvAIAIc0BQAC9AgAh3wFAAL0CACHoAQEAvgIAIaECAQC-AgAhogIBAL4CACEBpQIAANgDACADAAAABAAgAwAABQAwBAAAAQAgAwAAAAQAIAMAAAUAMAQAAAEAIAMAAAAEACADAAAFADAEAAABACAGxwECAAAAAc0BQAAAAAHfAUAAAAAB6AEBAAAAAaECAQAAAAGiAgEAAAABAQgAAAkAIAbHAQIAAAABzQFAAAAAAd8BQAAAAAHoAQEAAAABoQIBAAAAAaICAQAAAAEBCAAACwAwBscBAgD5AgAhzQFAAPYCACHfAUAA9gIAIegBAQD3AgAhoQIBAPcCACGiAgEA9wIAIQIAAAABACAIAAANACAGxwECAPkCACHNAUAA9gIAId8BQAD2AgAh6AEBAPcCACGhAgEA9wIAIaICAQD3AgAhAgAAAAQAIAgAAA8AIAMAAAABACANAAAJACAOAAANACABAAAAAQAgAQAAAAQAIAUTAADTAwAgFAAA1AMAIBUAANcDACAWAADWAwAgFwAA1QMAIAnEAQAA7wIAMMUBAAAVABDGAQAA7wIAMMcBAgCvAgAhzQFAALACACHfAUAAsAIAIegBAQCxAgAhoQIBALECACGiAgEAsQIAIQMAAAAEACADAAAUADASAAAVACADAAAABAAgAwAABQAwBAAAAQAgCsQBAADuAgAwxQEAABsAEMYBAADuAgAwxwECAAAAAcgBAQC-AgAhzQFAAL0CACHfAUAAvQIAIY8CAQC-AgAhkQIBAL4CACGgAgEAAAABAQAAABgAIAEAAAAYACAKxAEAAO4CADDFAQAAGwAQxgEAAO4CADDHAQIAvAIAIcgBAQC-AgAhzQFAAL0CACHfAUAAvQIAIY8CAQC-AgAhkQIBAL4CACGgAgEAvgIAIQGlAgAA0gMAIAMAAAAbACADAAAcADAEAAAYACADAAAAGwAgAwAAHAAwBAAAGAAgAwAAABsAIAMAABwAMAQAABgAIAfHAQIAAAAByAEBAAAAAc0BQAAAAAHfAUAAAAABjwIBAAAAAZECAQAAAAGgAgEAAAABAQgAACAAIAfHAQIAAAAByAEBAAAAAc0BQAAAAAHfAUAAAAABjwIBAAAAAZECAQAAAAGgAgEAAAABAQgAACIAMAfHAQIA-QIAIcgBAQD3AgAhzQFAAPYCACHfAUAA9gIAIY8CAQD3AgAhkQIBAPcCACGgAgEA9wIAIQIAAAAYACAIAAAkACAHxwECAPkCACHIAQEA9wIAIc0BQAD2AgAh3wFAAPYCACGPAgEA9wIAIZECAQD3AgAhoAIBAPcCACECAAAAGwAgCAAAJgAgAwAAABgAIA0AACAAIA4AACQAIAEAAAAYACABAAAAGwAgBRMAAM0DACAUAADOAwAgFQAA0QMAIBYAANADACAXAADPAwAgCsQBAADtAgAwxQEAACwAEMYBAADtAgAwxwECAK8CACHIAQEAsQIAIc0BQACwAgAh3wFAALACACGPAgEAsQIAIZECAQCxAgAhoAIBALECACEDAAAAGwAgAwAAKwAwEgAALAAgAwAAABsAIAMAABwAMAQAABgAIAkIAADsAgAgxAEAAOsCADDFAQAAMgAQxgEAAOsCADDHAQIAAAABzQFAAL0CACHfAUAAvQIAIegBAQC-AgAhnwIBAL4CACEBAAAALwAgAQAAAC8AIAkIAADsAgAgxAEAAOsCADDFAQAAMgAQxgEAAOsCADDHAQIAvAIAIc0BQAC9AgAh3wFAAL0CACHoAQEAvgIAIZ8CAQC-AgAhAaUCAADMAwAgAwAAADIAIAMAADMAMAQAAC8AIAMAAAAyACADAAAzADAEAAAvACADAAAAMgAgAwAAMwAwBAAALwAgBgiAAAAAAccBAgAAAAHNAUAAAAAB3wFAAAAAAegBAQAAAAGfAgEAAAABAQgAADcAIAYIgAAAAAHHAQIAAAABzQFAAAAAAd8BQAAAAAHoAQEAAAABnwIBAAAAAQEIAAA5ADAGCIAAAAABxwECAPkCACHNAUAA9gIAId8BQAD2AgAh6AEBAPcCACGfAgEA9wIAIQIAAAAvACAIAAA7ACAGCIAAAAABxwECAPkCACHNAUAA9gIAId8BQAD2AgAh6AEBAPcCACGfAgEA9wIAIQIAAAAyACAIAAA9ACADAAAALwAgDQAANwAgDgAAOwAgAQAAAC8AIAEAAAAyACAFEwAAxwMAIBQAAMgDACAVAADLAwAgFgAAygMAIBcAAMkDACAJCAAA6QIAIMQBAADoAgAwxQEAAEMAEMYBAADoAgAwxwECAK8CACHNAUAAsAIAId8BQACwAgAh6AEBALECACGfAgEAsQIAIQMAAAAyACADAABCADASAABDACADAAAAMgAgAwAAMwAwBAAALwAgDjcAAOQCACDEAQAA4gIAMMUBAABOABDGAQAA4gIAMMcBAgAAAAHMAQEAvgIAIc0BQAC9AgAh3wFAAL0CACHoAQEAAAABjwIBAL4CACGXAgEAvgIAIZgCAQC-AgAhmQIBAL4CACGaAiAA4wIAIQEAAABGACAKNgAA5wIAIMQBAADmAgAwxQEAAEgAEMYBAADmAgAwxwECALwCACHNAUAAvQIAId8BQAC9AgAh7wEBAL4CACGVAgIAvAIAIZYCCAC_AgAhAjYAAMUDACClAgAAxgMAIAs2AADnAgAgxAEAAOYCADDFAQAASAAQxgEAAOYCADDHAQIAAAABzQFAAL0CACHfAUAAvQIAIe8BAQC-AgAhlQICALwCACGWAggAvwIAIZ4CAADlAgAgAwAAAEgAIAMAAEkAMAQAAEoAIAEAAABIACABAAAARgAgDjcAAOQCACDEAQAA4gIAMMUBAABOABDGAQAA4gIAMMcBAgC8AgAhzAEBAL4CACHNAUAAvQIAId8BQAC9AgAh6AEBAL4CACGPAgEAvgIAIZcCAQC-AgAhmAIBAL4CACGZAgEAvgIAIZoCIADjAgAhAjcAAMMDACClAgAAxAMAIAMAAABOACADAABPADAEAABGACADAAAATgAgAwAATwAwBAAARgAgAwAAAE4AIAMAAE8AMAQAAEYAIAs3AADCAwAgxwECAAAAAcwBAQAAAAHNAUAAAAAB3wFAAAAAAegBAQAAAAGPAgEAAAABlwIBAAAAAZgCAQAAAAGZAgEAAAABmgIgAAAAAQEIAABTACAKxwECAAAAAcwBAQAAAAHNAUAAAAAB3wFAAAAAAegBAQAAAAGPAgEAAAABlwIBAAAAAZgCAQAAAAGZAgEAAAABmgIgAAAAAQEIAABVADALNwAAtQMAIMcBAgD5AgAhzAEBAPcCACHNAUAA9gIAId8BQAD2AgAh6AEBAPcCACGPAgEA9wIAIZcCAQD3AgAhmAIBAPcCACGZAgEA9wIAIZoCIAC0AwAhAgAAAEYAIAgAAFcAIArHAQIA-QIAIcwBAQD3AgAhzQFAAPYCACHfAUAA9gIAIegBAQD3AgAhjwIBAPcCACGXAgEA9wIAIZgCAQD3AgAhmQIBAPcCACGaAiAAtAMAIQIAAABOACAIAABZACADAAAARgAgDQAAUwAgDgAAVwAgAQAAAEYAIAEAAABOACAFEwAArwMAIBQAALADACAVAACzAwAgFgAAsgMAIBcAALEDACANxAEAAN4CADDFAQAAXwAQxgEAAN4CADDHAQIArwIAIcwBAQCxAgAhzQFAALACACHfAUAAsAIAIegBAQCxAgAhjwIBALECACGXAgEAsQIAIZgCAQCxAgAhmQIBALECACGaAiAA3wIAIQMAAABOACADAABeADASAABfACADAAAATgAgAwAATwAwBAAARgAgAQAAAEoAIAEAAABKACADAAAASAAgAwAASQAwBAAASgAgAwAAAEgAIAMAAEkAMAQAAEoAIAMAAABIACADAABJADAEAABKACAHNgAArgMAIMcBAgAAAAHNAUAAAAAB3wFAAAAAAe8BAQAAAAGVAgIAAAABlgIIAAAAAQEIAABnACAGxwECAAAAAc0BQAAAAAHfAUAAAAAB7wEBAAAAAZUCAgAAAAGWAggAAAABAQgAAGkAMAc2AACtAwAgxwECAPkCACHNAUAA9gIAId8BQAD2AgAh7wEBAPcCACGVAgIA-QIAIZYCCAD4AgAhAgAAAEoAIAgAAGsAIAbHAQIA-QIAIc0BQAD2AgAh3wFAAPYCACHvAQEA9wIAIZUCAgD5AgAhlgIIAPgCACECAAAASAAgCAAAbQAgAwAAAEoAIA0AAGcAIA4AAGsAIAEAAABKACABAAAASAAgBRMAAKgDACAUAACpAwAgFQAArAMAIBYAAKsDACAXAACqAwAgCcQBAADdAgAwxQEAAHMAEMYBAADdAgAwxwECAK8CACHNAUAAsAIAId8BQACwAgAh7wEBALECACGVAgIArwIAIZYCCACyAgAhAwAAAEgAIAMAAHIAMBIAAHMAIAMAAABIACADAABJADAEAABKACANxAEAANsCADDFAQAAeQAQxgEAANsCADDHAQIAAAABzAEBAL4CACHNAUAAvQIAIekBAQC-AgAhjwIBAL4CACGQAgEAvgIAIZECAQDJAgAhkgJAAL0CACGTAgIAvAIAIZQCAADcAgAgAQAAAHYAIAEAAAB2ACAMxAEAANsCADDFAQAAeQAQxgEAANsCADDHAQIAvAIAIcwBAQC-AgAhzQFAAL0CACHpAQEAvgIAIY8CAQC-AgAhkAIBAL4CACGRAgEAyQIAIZICQAC9AgAhkwICALwCACECkQIAAPsCACClAgAApwMAIAMAAAB5ACADAAB6ADAEAAB2ACADAAAAeQAgAwAAegAwBAAAdgAgAwAAAHkAIAMAAHoAMAQAAHYAIAnHAQIAAAABzAEBAAAAAc0BQAAAAAHpAQEAAAABjwIBAAAAAZACAQAAAAGRAgEAAAABkgJAAAAAAZMCAgAAAAEBCAAAfgAgCccBAgAAAAHMAQEAAAABzQFAAAAAAekBAQAAAAGPAgEAAAABkAIBAAAAAZECAQAAAAGSAkAAAAABkwICAAAAAQEIAACAAQAwCccBAgD5AgAhzAEBAPcCACHNAUAA9gIAIekBAQD3AgAhjwIBAPcCACGQAgEA9wIAIZECAQCBAwAhkgJAAPYCACGTAgIA-QIAIQIAAAB2ACAIAACCAQAgCccBAgD5AgAhzAEBAPcCACHNAUAA9gIAIekBAQD3AgAhjwIBAPcCACGQAgEA9wIAIZECAQCBAwAhkgJAAPYCACGTAgIA-QIAIQIAAAB5ACAIAACEAQAgAwAAAHYAIA0AAH4AIA4AAIIBACABAAAAdgAgAQAAAHkAIAYTAACiAwAgFAAAowMAIBUAAKYDACAWAAClAwAgFwAApAMAIJECAAD7AgAgDMQBAADaAgAwxQEAAIoBABDGAQAA2gIAMMcBAgCvAgAhzAEBALECACHNAUAAsAIAIekBAQCxAgAhjwIBALECACGQAgEAsQIAIZECAQDCAgAhkgJAALACACGTAgIArwIAIQMAAAB5ACADAACJAQAwEgAAigEAIAMAAAB5ACADAAB6ADAEAAB2ACANxAEAANkCADDFAQAAkAEAEMYBAADZAgAwxwECAAAAAc0BQAC9AgAh7wEBAL4CACGIAgEAvgIAIYkCCAC_AgAhigIIAL8CACGLAgEAvgIAIYwCAQC-AgAhjQIIAL8CACGOAggAvwIAIQEAAACNAQAgAQAAAI0BACANxAEAANkCADDFAQAAkAEAEMYBAADZAgAwxwECALwCACHNAUAAvQIAIe8BAQC-AgAhiAIBAL4CACGJAggAvwIAIYoCCAC_AgAhiwIBAL4CACGMAgEAvgIAIY0CCAC_AgAhjgIIAL8CACEBpQIAAKEDACADAAAAkAEAIAMAAJEBADAEAACNAQAgAwAAAJABACADAACRAQAwBAAAjQEAIAMAAACQAQAgAwAAkQEAMAQAAI0BACAKxwECAAAAAc0BQAAAAAHvAQEAAAABiAIBAAAAAYkCCAAAAAGKAggAAAABiwIBAAAAAYwCAQAAAAGNAggAAAABjgIIAAAAAQEIAACVAQAgCscBAgAAAAHNAUAAAAAB7wEBAAAAAYgCAQAAAAGJAggAAAABigIIAAAAAYsCAQAAAAGMAgEAAAABjQIIAAAAAY4CCAAAAAEBCAAAlwEAMArHAQIA-QIAIc0BQAD2AgAh7wEBAPcCACGIAgEA9wIAIYkCCAD4AgAhigIIAPgCACGLAgEA9wIAIYwCAQD3AgAhjQIIAPgCACGOAggA-AIAIQIAAACNAQAgCAAAmQEAIArHAQIA-QIAIc0BQAD2AgAh7wEBAPcCACGIAgEA9wIAIYkCCAD4AgAhigIIAPgCACGLAgEA9wIAIYwCAQD3AgAhjQIIAPgCACGOAggA-AIAIQIAAACQAQAgCAAAmwEAIAMAAACNAQAgDQAAlQEAIA4AAJkBACABAAAAjQEAIAEAAACQAQAgBRMAAJwDACAUAACdAwAgFQAAoAMAIBYAAJ8DACAXAACeAwAgDcQBAADYAgAwxQEAAKEBABDGAQAA2AIAMMcBAgCvAgAhzQFAALACACHvAQEAsQIAIYgCAQCxAgAhiQIIALICACGKAggAsgIAIYsCAQCxAgAhjAIBALECACGNAggAsgIAIY4CCACyAgAhAwAAAJABACADAACgAQAwEgAAoQEAIAMAAACQAQAgAwAAkQEAMAQAAI0BACAcxAEAANcCADDFAQAApwEAEMYBAADXAgAwxwECAAAAAc0BQAC9AgAh3wFAAL0CACHoAQEAvgIAIeoBAQC-AgAh7gEBAAAAAfQBBADUAgAh9QEEANQCACH2AQIAvAIAIfcBAgC8AgAh-QEBAL4CACH6AQEAvgIAIfsBAQC-AgAh_AEEANQCACH9AQQA1AIAIf4BAgC8AgAh_wEIAL8CACGAAgQA1AIAIYECBADUAgAhggIIAL8CACGDAggAvwIAIYQCCAC_AgAhhQIEANQCACGGAgQA1AIAIYcCQAC9AgAhAQAAAKQBACABAAAApAEAIBzEAQAA1wIAMMUBAACnAQAQxgEAANcCADDHAQIAvAIAIc0BQAC9AgAh3wFAAL0CACHoAQEAvgIAIeoBAQC-AgAh7gEBAL4CACH0AQQA1AIAIfUBBADUAgAh9gECALwCACH3AQIAvAIAIfkBAQC-AgAh-gEBAL4CACH7AQEAvgIAIfwBBADUAgAh_QEEANQCACH-AQIAvAIAIf8BCAC_AgAhgAIEANQCACGBAgQA1AIAIYICCAC_AgAhgwIIAL8CACGEAggAvwIAIYUCBADUAgAhhgIEANQCACGHAkAAvQIAIQGlAgAAmwMAIAMAAACnAQAgAwAAqAEAMAQAAKQBACADAAAApwEAIAMAAKgBADAEAACkAQAgAwAAAKcBACADAACoAQAwBAAApAEAIBnHAQIAAAABzQFAAAAAAd8BQAAAAAHoAQEAAAAB6gEBAAAAAe4BAQAAAAH0AQQAAAAB9QEEAAAAAfYBAgAAAAH3AQIAAAAB-QEBAAAAAfoBAQAAAAH7AQEAAAAB_AEEAAAAAf0BBAAAAAH-AQIAAAAB_wEIAAAAAYACBAAAAAGBAgQAAAABggIIAAAAAYMCCAAAAAGEAggAAAABhQIEAAAAAYYCBAAAAAGHAkAAAAABAQgAAKwBACAZxwECAAAAAc0BQAAAAAHfAUAAAAAB6AEBAAAAAeoBAQAAAAHuAQEAAAAB9AEEAAAAAfUBBAAAAAH2AQIAAAAB9wECAAAAAfkBAQAAAAH6AQEAAAAB-wEBAAAAAfwBBAAAAAH9AQQAAAAB_gECAAAAAf8BCAAAAAGAAgQAAAABgQIEAAAAAYICCAAAAAGDAggAAAABhAIIAAAAAYUCBAAAAAGGAgQAAAABhwJAAAAAAQEIAACuAQAwGccBAgD5AgAhzQFAAPYCACHfAUAA9gIAIegBAQD3AgAh6gEBAPcCACHuAQEA9wIAIfQBBACUAwAh9QEEAJQDACH2AQIA-QIAIfcBAgD5AgAh-QEBAPcCACH6AQEA9wIAIfsBAQD3AgAh_AEEAJQDACH9AQQAlAMAIf4BAgD5AgAh_wEIAPgCACGAAgQAlAMAIYECBACUAwAhggIIAPgCACGDAggA-AIAIYQCCAD4AgAhhQIEAJQDACGGAgQAlAMAIYcCQAD2AgAhAgAAAKQBACAIAACwAQAgGccBAgD5AgAhzQFAAPYCACHfAUAA9gIAIegBAQD3AgAh6gEBAPcCACHuAQEA9wIAIfQBBACUAwAh9QEEAJQDACH2AQIA-QIAIfcBAgD5AgAh-QEBAPcCACH6AQEA9wIAIfsBAQD3AgAh_AEEAJQDACH9AQQAlAMAIf4BAgD5AgAh_wEIAPgCACGAAgQAlAMAIYECBACUAwAhggIIAPgCACGDAggA-AIAIYQCCAD4AgAhhQIEAJQDACGGAgQAlAMAIYcCQAD2AgAhAgAAAKcBACAIAACyAQAgAwAAAKQBACANAACsAQAgDgAAsAEAIAEAAACkAQAgAQAAAKcBACAFEwAAlgMAIBQAAJcDACAVAACaAwAgFgAAmQMAIBcAAJgDACAcxAEAANYCADDFAQAAuAEAEMYBAADWAgAwxwECAK8CACHNAUAAsAIAId8BQACwAgAh6AEBALECACHqAQEAsQIAIe4BAQCxAgAh9AEEANACACH1AQQA0AIAIfYBAgCvAgAh9wECAK8CACH5AQEAsQIAIfoBAQCxAgAh-wEBALECACH8AQQA0AIAIf0BBADQAgAh_gECAK8CACH_AQgAsgIAIYACBADQAgAhgQIEANACACGCAggAsgIAIYMCCACyAgAhhAIIALICACGFAgQA0AIAIYYCBADQAgAhhwJAALACACEDAAAApwEAIAMAALcBADASAAC4AQAgAwAAAKcBACADAACoAQAwBAAApAEAIBDEAQAA0wIAMMUBAAC-AQAQxgEAANMCADDHAQIAAAABzQFAAL0CACHuAQEAvgIAIe8BQAC9AgAh8AEIAL8CACHxAQQA1AIAIfIBCAC_AgAh8wEEANQCACH0AQQA1AIAIfUBBADUAgAh9gECALwCACH3AQIAvAIAIfgBAADVAgAgAQAAALsBACABAAAAuwEAIA_EAQAA0wIAMMUBAAC-AQAQxgEAANMCADDHAQIAvAIAIc0BQAC9AgAh7gEBAL4CACHvAUAAvQIAIfABCAC_AgAh8QEEANQCACHyAQgAvwIAIfMBBADUAgAh9AEEANQCACH1AQQA1AIAIfYBAgC8AgAh9wECALwCACEBpQIAAJUDACADAAAAvgEAIAMAAL8BADAEAAC7AQAgAwAAAL4BACADAAC_AQAwBAAAuwEAIAMAAAC-AQAgAwAAvwEAMAQAALsBACAMxwECAAAAAc0BQAAAAAHuAQEAAAAB7wFAAAAAAfABCAAAAAHxAQQAAAAB8gEIAAAAAfMBBAAAAAH0AQQAAAAB9QEEAAAAAfYBAgAAAAH3AQIAAAABAQgAAMMBACAMxwECAAAAAc0BQAAAAAHuAQEAAAAB7wFAAAAAAfABCAAAAAHxAQQAAAAB8gEIAAAAAfMBBAAAAAH0AQQAAAAB9QEEAAAAAfYBAgAAAAH3AQIAAAABAQgAAMUBADAMxwECAPkCACHNAUAA9gIAIe4BAQD3AgAh7wFAAPYCACHwAQgA-AIAIfEBBACUAwAh8gEIAPgCACHzAQQAlAMAIfQBBACUAwAh9QEEAJQDACH2AQIA-QIAIfcBAgD5AgAhAgAAALsBACAIAADHAQAgDMcBAgD5AgAhzQFAAPYCACHuAQEA9wIAIe8BQAD2AgAh8AEIAPgCACHxAQQAlAMAIfIBCAD4AgAh8wEEAJQDACH0AQQAlAMAIfUBBACUAwAh9gECAPkCACH3AQIA-QIAIQIAAAC-AQAgCAAAyQEAIAMAAAC7AQAgDQAAwwEAIA4AAMcBACABAAAAuwEAIAEAAAC-AQAgBRMAAI8DACAUAACQAwAgFQAAkwMAIBYAAJIDACAXAACRAwAgD8QBAADPAgAwxQEAAM8BABDGAQAAzwIAMMcBAgCvAgAhzQFAALACACHuAQEAsQIAIe8BQACwAgAh8AEIALICACHxAQQA0AIAIfIBCACyAgAh8wEEANACACH0AQQA0AIAIfUBBADQAgAh9gECAK8CACH3AQIArwIAIQMAAAC-AQAgAwAAzgEAMBIAAM8BACADAAAAvgEAIAMAAL8BADAEAAC7AQAgDMQBAADOAgAwxQEAANUBABDGAQAAzgIAMMcBAgAAAAHNAUAAvQIAId8BQAC9AgAh6AEBAAAAAekBAQC-AgAh6gEBAL4CACHrAQIAvAIAIewBAQC-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-AgAg3AEAAPsCACDeAQAA-wIAIArEAQAAwQIAMMUBAACUAgAQxgEAAMECADDHAQIArwIAIc0BQACwAgAh2wEBALECACHcAQEAwgIAId0BQACwAgAh3gEAAMMCACDfAUAAsAIAIQMAAACDAgAgAwAAkwIAMBIAAJQCACADAAAAgwIAIAMAAIQCADAEAACAAgAgC8QBAAC7AgAwxQEAAJoCABDGAQAAuwIAMMcBAgAAAAHIAUAAvQIAIckBAQC-AgAhygEBAL4CACHLAQgAvwIAIcwBAQC-AgAhzQFAAL0CACHaAQAAwAIAIAEAAACXAgAgAQAAAJcCACAKxAEAALsCADDFAQAAmgIAEMYBAAC7AgAwxwECALwCACHIAUAAvQIAIckBAQC-AgAhygEBAL4CACHLAQgAvwIAIcwBAQC-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_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_EAQAAzwIAMMUBAADPAQAQxgEAAM8CADDHAQIArwIAIc0BQACwAgAh7gEBALECACHvAUAAsAIAIfABCACyAgAh8QEEANACACHyAQgAsgIAIfMBBADQAgAh9AEEANACACH1AQQA0AIAIfYBAgCvAgAh9wECAK8CACENEwAAtAIAIBQAALUCACAVAADSAgAgFgAA0gIAIBcAANICACDOAQQAAAABzwEEAAAABNABBAAAAATRAQQAAAAB0gEEAAAAAdMBBAAAAAHUAQQAAAAB1QEEANECACENEwAAtAIAIBQAALUCACAVAADSAgAgFgAA0gIAIBcAANICACDOAQQAAAABzwEEAAAABNABBAAAAATRAQQAAAAB0gEEAAAAAdMBBAAAAAHUAQQAAAAB1QEEANECACEIzgEEAAAAAc8BBAAAAATQAQQAAAAE0QEEAAAAAdIBBAAAAAHTAQQAAAAB1AEEAAAAAdUBBADSAgAhD8QBAADTAgAwxQEAAL4BABDGAQAA0wIAMMcBAgC8AgAhzQFAAL0CACHuAQEAvgIAIe8BQAC9AgAh8AEIAL8CACHxAQQA1AIAIfIBCAC_AgAh8wEEANQCACH0AQQA1AIAIfUBBADUAgAh9gECALwCACH3AQIAvAIAIQjOAQQAAAABzwEEAAAABNABBAAAAATRAQQAAAAB0gEEAAAAAdMBBAAAAAHUAQQAAAAB1QEEANICACEC7gEBAAAAAe8BQAAAAAEcxAEAANYCADDFAQAAuAEAEMYBAADWAgAwxwECAK8CACHNAUAAsAIAId8BQACwAgAh6AEBALECACHqAQEAsQIAIe4BAQCxAgAh9AEEANACACH1AQQA0AIAIfYBAgCvAgAh9wECAK8CACH5AQEAsQIAIfoBAQCxAgAh-wEBALECACH8AQQA0AIAIf0BBADQAgAh_gECAK8CACH_AQgAsgIAIYACBADQAgAhgQIEANACACGCAggAsgIAIYMCCACyAgAhhAIIALICACGFAgQA0AIAIYYCBADQAgAhhwJAALACACEcxAEAANcCADDFAQAApwEAEMYBAADXAgAwxwECALwCACHNAUAAvQIAId8BQAC9AgAh6AEBAL4CACHqAQEAvgIAIe4BAQC-AgAh9AEEANQCACH1AQQA1AIAIfYBAgC8AgAh9wECALwCACH5AQEAvgIAIfoBAQC-AgAh-wEBAL4CACH8AQQA1AIAIf0BBADUAgAh_gECALwCACH_AQgAvwIAIYACBADUAgAhgQIEANQCACGCAggAvwIAIYMCCAC_AgAhhAIIAL8CACGFAgQA1AIAIYYCBADUAgAhhwJAAL0CACENxAEAANgCADDFAQAAoQEAEMYBAADYAgAwxwECAK8CACHNAUAAsAIAIe8BAQCxAgAhiAIBALECACGJAggAsgIAIYoCCACyAgAhiwIBALECACGMAgEAsQIAIY0CCACyAgAhjgIIALICACENxAEAANkCADDFAQAAkAEAEMYBAADZAgAwxwECALwCACHNAUAAvQIAIe8BAQC-AgAhiAIBAL4CACGJAggAvwIAIYoCCAC_AgAhiwIBAL4CACGMAgEAvgIAIY0CCAC_AgAhjgIIAL8CACEMxAEAANoCADDFAQAAigEAEMYBAADaAgAwxwECAK8CACHMAQEAsQIAIc0BQACwAgAh6QEBALECACGPAgEAsQIAIZACAQCxAgAhkQIBAMICACGSAkAAsAIAIZMCAgCvAgAhDMQBAADbAgAwxQEAAHkAEMYBAADbAgAwxwECALwCACHMAQEAvgIAIc0BQAC9AgAh6QEBAL4CACGPAgEAvgIAIZACAQC-AgAhkQIBAMkCACGSAkAAvQIAIZMCAgC8AgAhAo8CAQAAAAGSAkAAAAABCcQBAADdAgAwxQEAAHMAEMYBAADdAgAwxwECAK8CACHNAUAAsAIAId8BQACwAgAh7wEBALECACGVAgIArwIAIZYCCACyAgAhDcQBAADeAgAwxQEAAF8AEMYBAADeAgAwxwECAK8CACHMAQEAsQIAIc0BQACwAgAh3wFAALACACHoAQEAsQIAIY8CAQCxAgAhlwIBALECACGYAgEAsQIAIZkCAQCxAgAhmgIgAN8CACEFEwAAtAIAIBYAAOECACAXAADhAgAgzgEgAAAAAdUBIADgAgAhBRMAALQCACAWAADhAgAgFwAA4QIAIM4BIAAAAAHVASAA4AIAIQLOASAAAAAB1QEgAOECACEONwAA5AIAIMQBAADiAgAwxQEAAE4AEMYBAADiAgAwxwECALwCACHMAQEAvgIAIc0BQAC9AgAh3wFAAL0CACHoAQEAvgIAIY8CAQC-AgAhlwIBAL4CACGYAgEAvgIAIZkCAQC-AgAhmgIgAOMCACECzgEgAAAAAdUBIADhAgAhA5sCAABIACCcAgAASAAgnQIAAEgAIALvAQEAAAABlQICAAAAAQo2AADnAgAgxAEAAOYCADDFAQAASAAQxgEAAOYCADDHAQIAvAIAIc0BQAC9AgAh3wFAAL0CACHvAQEAvgIAIZUCAgC8AgAhlgIIAL8CACEQNwAA5AIAIMQBAADiAgAwxQEAAE4AEMYBAADiAgAwxwECALwCACHMAQEAvgIAIc0BQAC9AgAh3wFAAL0CACHoAQEAvgIAIY8CAQC-AgAhlwIBAL4CACGYAgEAvgIAIZkCAQC-AgAhmgIgAOMCACGjAgAATgAgpAIAAE4AIAkIAADpAgAgxAEAAOgCADDFAQAAQwAQxgEAAOgCADDHAQIArwIAIc0BQACwAgAh3wFAALACACHoAQEAsQIAIZ8CAQCxAgAhDxMAALQCACAWAADqAgAgFwAA6gIAIM4BgAAAAAHRAYAAAAAB0gGAAAAAAdMBgAAAAAHUAYAAAAAB1QGAAAAAAeABAQAAAAHhAQEAAAAB4gEBAAAAAeMBgAAAAAHkAYAAAAAB5QGAAAAAAQzOAYAAAAAB0QGAAAAAAdIBgAAAAAHTAYAAAAAB1AGAAAAAAdUBgAAAAAHgAQEAAAAB4QEBAAAAAeIBAQAAAAHjAYAAAAAB5AGAAAAAAeUBgAAAAAEJCAAA7AIAIMQBAADrAgAwxQEAADIAEMYBAADrAgAwxwECALwCACHNAUAAvQIAId8BQAC9AgAh6AEBAL4CACGfAgEAvgIAIQzOAYAAAAAB0QGAAAAAAdIBgAAAAAHTAYAAAAAB1AGAAAAAAdUBgAAAAAHgAQEAAAAB4QEBAAAAAeIBAQAAAAHjAYAAAAAB5AGAAAAAAeUBgAAAAAEKxAEAAO0CADDFAQAALAAQxgEAAO0CADDHAQIArwIAIcgBAQCxAgAhzQFAALACACHfAUAAsAIAIY8CAQCxAgAhkQIBALECACGgAgEAsQIAIQrEAQAA7gIAMMUBAAAbABDGAQAA7gIAMMcBAgC8AgAhyAEBAL4CACHNAUAAvQIAId8BQAC9AgAhjwIBAL4CACGRAgEAvgIAIaACAQC-AgAhCcQBAADvAgAwxQEAABUAEMYBAADvAgAwxwECAK8CACHNAUAAsAIAId8BQACwAgAh6AEBALECACGhAgEAsQIAIaICAQCxAgAhCcQBAADwAgAwxQEAAAQAEMYBAADwAgAwxwECALwCACHNAUAAvQIAId8BQAC9AgAh6AEBAL4CACGhAgEAvgIAIaICAQC-AgAhAAAAAAABqQJAAAAAAQGpAgEAAAABBakCCAAAAAGvAggAAAABsAIIAAAAAbECCAAAAAGyAggAAAABBakCAgAAAAGvAgIAAAABsAICAAAAAbECAgAAAAGyAgIAAAABAdkBAQAAAAEAAAAAAAABqQIBAAAAAQHZAQEAAAABAAAAAAAB2QEBAAAAAQAAAAAAAdkBAQAAAAEAAAAAAAWpAgQAAAABrwIEAAAAAbACBAAAAAGxAgQAAAABsgIEAAAAAQHZAQEAAAABAAAAAAAB2QEBAAAAAQAAAAAAAdkBAQAAAAEAAAAAAAHZAQEAAAABAAAAAAAFDQAA2gMAIA4AAN0DACCmAgAA2wMAIKcCAADcAwAgrAIAAEYAIAMNAADaAwAgpgIAANsDACCsAgAARgAgAAAAAAABqQIgAAAAAQsNAAC2AwAwDgAAuwMAMKYCAAC3AwAwpwIAALgDADCoAgAAuQMAIKkCAAC6AwAwqgIAALoDADCrAgAAugMAMKwCAAC6AwAwrQIAALwDADCuAgAAvQMAMAXHAQIAAAABzQFAAAAAAd8BQAAAAAHvAQEAAAABlgIIAAAAAQIAAABKACANAADBAwAgAwAAAEoAIA0AAMEDACAOAADAAwAgAQgAANkDADALNgAA5wIAIMQBAADmAgAwxQEAAEgAEMYBAADmAgAwxwECAAAAAc0BQAC9AgAh3wFAAL0CACHvAQEAvgIAIZUCAgC8AgAhlgIIAL8CACGeAgAA5QIAIAIAAABKACAIAADAAwAgAgAAAL4DACAIAAC_AwAgCcQBAAC9AwAwxQEAAL4DABDGAQAAvQMAMMcBAgC8AgAhzQFAAL0CACHfAUAAvQIAIe8BAQC-AgAhlQICALwCACGWAggAvwIAIQnEAQAAvQMAMMUBAAC-AwAQxgEAAL0DADDHAQIAvAIAIc0BQAC9AgAh3wFAAL0CACHvAQEAvgIAIZUCAgC8AgAhlgIIAL8CACEFxwECAPkCACHNAUAA9gIAId8BQAD2AgAh7wEBAPcCACGWAggA-AIAIQXHAQIA-QIAIc0BQAD2AgAh3wFAAPYCACHvAQEA9wIAIZYCCAD4AgAhBccBAgAAAAHNAUAAAAAB3wFAAAAAAe8BAQAAAAGWAggAAAABBA0AALYDADCmAgAAtwMAMKgCAAC5AwAgrAIAALoDADAAAdkBAQAAAAECNwAAwwMAIKUCAADEAwAgAdkBAQAAAAEAAAAAAAHZAQEAAAABAAAAAAAB2QEBAAAAAQAAAAAAAdkBAQAAAAEFxwECAAAAAc0BQAAAAAHfAUAAAAAB7wEBAAAAAZYCCAAAAAEKxwECAAAAAcwBAQAAAAHNAUAAAAAB3wFAAAAAAegBAQAAAAGPAgEAAAABlwIBAAAAAZgCAQAAAAGZAgEAAAABmgIgAAAAAQIAAABGACANAADaAwAgAwAAAE4AIA0AANoDACAOAADeAwAgDAAAAE4AIAgAAN4DACDHAQIA-QIAIcwBAQD3AgAhzQFAAPYCACHfAUAA9gIAIegBAQD3AgAhjwIBAPcCACGXAgEA9wIAIZgCAQD3AgAhmQIBAPcCACGaAiAAtAMAIQrHAQIA-QIAIcwBAQD3AgAhzQFAAPYCACHfAUAA9gIAIegBAQD3AgAhjwIBAPcCACGXAgEA9wIAIZgCAQD3AgAhmQIBAPcCACGaAiAAtAMAIQAABRMABBQABRUABhYABxcACAAAAAAABRMABBQABRUABhYABxcACAAFEwAMFAANFQAOFgAPFwAQAAAAAAAFEwAMFAANFQAOFgAPFwAQAAUTABQUABUVABYWABcXABgAAAAAAAUTABQUABUVABYWABcXABgCEwAcN0sbATYAGgE3TAAFEwAeFAAfFQAgFgAhFwAiAAAAAAAFEwAeFAAfFQAgFgAhFwAiBRMAJRQAJhUAJxYAKBcAKQAAAAAABRMAJRQAJhUAJxYAKBcAKQAFEwAtFAAuFQAvFgAwFwAxAAAAAAAFEwAtFAAuFQAvFgAwFwAxAAUTADUUADYVADcWADgXADkAAAAAAAUTADUUADYVADcWADgXADkABRMAPRQAPhUAPxYAQBcAQQAAAAAABRMAPRQAPhUAPxYAQBcAQQAFEwBFFABGFQBHFgBIFwBJAAAAAAAFEwBFFABGFQBHFgBIFwBJAAUTAE0UAE4VAE8WAFAXAFEAAAAAAAUTAE0UAE4VAE8WAFAXAFEABRMAVRQAVhUAVxYAWBcAWQAAAAAABRMAVRQAVhUAVxYAWBcAWQAFEwBdFABeFQBfFgBgFwBhAAAAAAAFEwBdFABeFQBfFgBgFwBhAAUTAGUUAGYVAGcWAGgXAGkAAAAAAAUTAGUUAGYVAGcWAGgXAGkBAgECAwEFBgEGBwEHCAEJCgEKDAILDgEMEAIPEQEQEgEREwIYFgMZFwkaGQobGgocHQodHgoeHwofIQogIwIhJQoiJwIjKAokKQolKgImLQsnLhEoMBIpMRIqNBIrNRIsNhItOBIuOgIvPBIwPgIxPxIyQBIzQQI0RBM1RRk4Rxo5TRo6UBo7URo8Uho9VBo-VgI_WBpAWgJBWxpCXBpDXQJEYB1FYSNGYhtHYxtIZBtJZRtKZhtLaBtMagJNbBtObgJPbxtQcBtRcQJSdCRTdSpUdytVeCtWeytXfCtYfStZfytagQECW4MBK1yFAQJdhgErXocBK1-IAQJgiwEsYYwBMmKOATNjjwEzZJIBM2WTATNmlAEzZ5YBM2iYAQJpmgEzapwBAmudATNsngEzbZ8BAm6iATRvowE6cKUBO3GmATtyqQE7c6oBO3SrATt1rQE7dq8BAnexATt4swECebQBO3q1ATt7tgECfLkBPH26AUJ-vAFDf70BQ4ABwAFDgQHBAUOCAcIBQ4MBxAFDhAHGAQKFAcgBQ4YBygEChwHLAUOIAcwBQ4kBzQECigHQAUSLAdEBSowB0wFLjQHUAUuOAdcBS48B2AFLkAHZAUuRAdsBS5IB3QECkwHfAUuUAeEBApUB4gFLlgHjAUuXAeQBApgB5wFMmQHoAVKaAeoBU5sB6wFTnAHuAVOdAe8BU54B8AFTnwHyAVOgAfQBAqEB9gFTogH4AQKjAfkBU6QB-gFTpQH7AQKmAf4BVKcB_wFaqAGBAlupAYICW6oBhQJbqwGGAlusAYcCW60BiQJbrgGLAgKvAY0CW7ABjwICsQGQAluyAZECW7MBkgICtAGVAly1AZYCYrYBmAJjtwGZAmO4AZwCY7kBnQJjugGeAmO7AaACY7wBogICvQGkAmO-AaYCAr8BpwJjwAGoAmPBAakCAsIBrAJkwwGtAmo"
+ strings: JSON.parse("[\"where\",\"User.findUnique\",\"User.findUniqueOrThrow\",\"orderBy\",\"cursor\",\"User.findFirst\",\"User.findFirstOrThrow\",\"User.findMany\",\"data\",\"User.createOne\",\"User.createMany\",\"User.updateOne\",\"User.updateMany\",\"create\",\"update\",\"User.upsertOne\",\"User.deleteOne\",\"User.deleteMany\",\"having\",\"_count\",\"_avg\",\"_sum\",\"_min\",\"_max\",\"User.groupBy\",\"User.aggregate\",\"Article.findUnique\",\"Article.findUniqueOrThrow\",\"Article.findFirst\",\"Article.findFirstOrThrow\",\"Article.findMany\",\"Article.createOne\",\"Article.createMany\",\"Article.updateOne\",\"Article.updateMany\",\"Article.upsertOne\",\"Article.deleteOne\",\"Article.deleteMany\",\"Article.groupBy\",\"Article.aggregate\",\"Strategy.findUnique\",\"Strategy.findUniqueOrThrow\",\"Strategy.findFirst\",\"Strategy.findFirstOrThrow\",\"Strategy.findMany\",\"Strategy.createOne\",\"Strategy.createMany\",\"Strategy.updateOne\",\"Strategy.updateMany\",\"Strategy.upsertOne\",\"Strategy.deleteOne\",\"Strategy.deleteMany\",\"Strategy.groupBy\",\"Strategy.aggregate\",\"indicator\",\"points\",\"Indicator.findUnique\",\"Indicator.findUniqueOrThrow\",\"Indicator.findFirst\",\"Indicator.findFirstOrThrow\",\"Indicator.findMany\",\"Indicator.createOne\",\"Indicator.createMany\",\"Indicator.updateOne\",\"Indicator.updateMany\",\"Indicator.upsertOne\",\"Indicator.deleteOne\",\"Indicator.deleteMany\",\"Indicator.groupBy\",\"Indicator.aggregate\",\"IndicatorPoint.findUnique\",\"IndicatorPoint.findUniqueOrThrow\",\"IndicatorPoint.findFirst\",\"IndicatorPoint.findFirstOrThrow\",\"IndicatorPoint.findMany\",\"IndicatorPoint.createOne\",\"IndicatorPoint.createMany\",\"IndicatorPoint.updateOne\",\"IndicatorPoint.updateMany\",\"IndicatorPoint.upsertOne\",\"IndicatorPoint.deleteOne\",\"IndicatorPoint.deleteMany\",\"IndicatorPoint.groupBy\",\"IndicatorPoint.aggregate\",\"News.findUnique\",\"News.findUniqueOrThrow\",\"News.findFirst\",\"News.findFirstOrThrow\",\"News.findMany\",\"News.createOne\",\"News.createMany\",\"News.updateOne\",\"News.updateMany\",\"News.upsertOne\",\"News.deleteOne\",\"News.deleteMany\",\"News.groupBy\",\"News.aggregate\",\"Alert.findUnique\",\"Alert.findUniqueOrThrow\",\"Alert.findFirst\",\"Alert.findFirstOrThrow\",\"Alert.findMany\",\"Alert.createOne\",\"Alert.createMany\",\"Alert.updateOne\",\"Alert.updateMany\",\"Alert.upsertOne\",\"Alert.deleteOne\",\"Alert.deleteMany\",\"Alert.groupBy\",\"Alert.aggregate\",\"ServerNode.findUnique\",\"ServerNode.findUniqueOrThrow\",\"ServerNode.findFirst\",\"ServerNode.findFirstOrThrow\",\"ServerNode.findMany\",\"ServerNode.createOne\",\"ServerNode.createMany\",\"ServerNode.updateOne\",\"ServerNode.updateMany\",\"ServerNode.upsertOne\",\"ServerNode.deleteOne\",\"ServerNode.deleteMany\",\"ServerNode.groupBy\",\"ServerNode.aggregate\",\"ServerNodeHistory.findUnique\",\"ServerNodeHistory.findUniqueOrThrow\",\"ServerNodeHistory.findFirst\",\"ServerNodeHistory.findFirstOrThrow\",\"ServerNodeHistory.findMany\",\"ServerNodeHistory.createOne\",\"ServerNodeHistory.createMany\",\"ServerNodeHistory.updateOne\",\"ServerNodeHistory.updateMany\",\"ServerNodeHistory.upsertOne\",\"ServerNodeHistory.deleteOne\",\"ServerNodeHistory.deleteMany\",\"ServerNodeHistory.groupBy\",\"ServerNodeHistory.aggregate\",\"ServiceCheck.findUnique\",\"ServiceCheck.findUniqueOrThrow\",\"ServiceCheck.findFirst\",\"ServiceCheck.findFirstOrThrow\",\"ServiceCheck.findMany\",\"ServiceCheck.createOne\",\"ServiceCheck.createMany\",\"ServiceCheck.updateOne\",\"ServiceCheck.updateMany\",\"ServiceCheck.upsertOne\",\"ServiceCheck.deleteOne\",\"ServiceCheck.deleteMany\",\"ServiceCheck.groupBy\",\"ServiceCheck.aggregate\",\"Econ_SowInventory.findUnique\",\"Econ_SowInventory.findUniqueOrThrow\",\"Econ_SowInventory.findFirst\",\"Econ_SowInventory.findFirstOrThrow\",\"Econ_SowInventory.findMany\",\"Econ_SowInventory.createOne\",\"Econ_SowInventory.createMany\",\"Econ_SowInventory.updateOne\",\"Econ_SowInventory.updateMany\",\"Econ_SowInventory.upsertOne\",\"Econ_SowInventory.deleteOne\",\"Econ_SowInventory.deleteMany\",\"Econ_SowInventory.groupBy\",\"Econ_SowInventory.aggregate\",\"ScraperCache.findUnique\",\"ScraperCache.findUniqueOrThrow\",\"ScraperCache.findFirst\",\"ScraperCache.findFirstOrThrow\",\"ScraperCache.findMany\",\"ScraperCache.createOne\",\"ScraperCache.createMany\",\"ScraperCache.updateOne\",\"ScraperCache.updateMany\",\"ScraperCache.upsertOne\",\"ScraperCache.deleteOne\",\"ScraperCache.deleteMany\",\"ScraperCache.groupBy\",\"ScraperCache.aggregate\",\"OilPriceHistory.findUnique\",\"OilPriceHistory.findUniqueOrThrow\",\"OilPriceHistory.findFirst\",\"OilPriceHistory.findFirstOrThrow\",\"OilPriceHistory.findMany\",\"OilPriceHistory.createOne\",\"OilPriceHistory.createMany\",\"OilPriceHistory.updateOne\",\"OilPriceHistory.updateMany\",\"OilPriceHistory.upsertOne\",\"OilPriceHistory.deleteOne\",\"OilPriceHistory.deleteMany\",\"OilPriceHistory.groupBy\",\"OilPriceHistory.aggregate\",\"MihomeAccount.findUnique\",\"MihomeAccount.findUniqueOrThrow\",\"MihomeAccount.findFirst\",\"MihomeAccount.findFirstOrThrow\",\"MihomeAccount.findMany\",\"MihomeAccount.createOne\",\"MihomeAccount.createMany\",\"MihomeAccount.updateOne\",\"MihomeAccount.updateMany\",\"MihomeAccount.upsertOne\",\"MihomeAccount.deleteOne\",\"MihomeAccount.deleteMany\",\"MihomeAccount.groupBy\",\"MihomeAccount.aggregate\",\"home\",\"device\",\"samples\",\"hours\",\"devices\",\"MihomeHome.findUnique\",\"MihomeHome.findUniqueOrThrow\",\"MihomeHome.findFirst\",\"MihomeHome.findFirstOrThrow\",\"MihomeHome.findMany\",\"MihomeHome.createOne\",\"MihomeHome.createMany\",\"MihomeHome.updateOne\",\"MihomeHome.updateMany\",\"MihomeHome.upsertOne\",\"MihomeHome.deleteOne\",\"MihomeHome.deleteMany\",\"MihomeHome.groupBy\",\"MihomeHome.aggregate\",\"MihomeDevice.findUnique\",\"MihomeDevice.findUniqueOrThrow\",\"MihomeDevice.findFirst\",\"MihomeDevice.findFirstOrThrow\",\"MihomeDevice.findMany\",\"MihomeDevice.createOne\",\"MihomeDevice.createMany\",\"MihomeDevice.updateOne\",\"MihomeDevice.updateMany\",\"MihomeDevice.upsertOne\",\"MihomeDevice.deleteOne\",\"MihomeDevice.deleteMany\",\"MihomeDevice.groupBy\",\"MihomeDevice.aggregate\",\"MihomeEnvSample.findUnique\",\"MihomeEnvSample.findUniqueOrThrow\",\"MihomeEnvSample.findFirst\",\"MihomeEnvSample.findFirstOrThrow\",\"MihomeEnvSample.findMany\",\"MihomeEnvSample.createOne\",\"MihomeEnvSample.createMany\",\"MihomeEnvSample.updateOne\",\"MihomeEnvSample.updateMany\",\"MihomeEnvSample.upsertOne\",\"MihomeEnvSample.deleteOne\",\"MihomeEnvSample.deleteMany\",\"MihomeEnvSample.groupBy\",\"MihomeEnvSample.aggregate\",\"MihomeEnvHour.findUnique\",\"MihomeEnvHour.findUniqueOrThrow\",\"MihomeEnvHour.findFirst\",\"MihomeEnvHour.findFirstOrThrow\",\"MihomeEnvHour.findMany\",\"MihomeEnvHour.createOne\",\"MihomeEnvHour.createMany\",\"MihomeEnvHour.updateOne\",\"MihomeEnvHour.updateMany\",\"MihomeEnvHour.upsertOne\",\"MihomeEnvHour.deleteOne\",\"MihomeEnvHour.deleteMany\",\"MihomeEnvHour.groupBy\",\"MihomeEnvHour.aggregate\",\"AND\",\"OR\",\"NOT\",\"id\",\"deviceId\",\"hour\",\"temperatureAvg\",\"humidityAvg\",\"raw\",\"createdAt\",\"equals\",\"string_contains\",\"string_starts_with\",\"string_ends_with\",\"array_starts_with\",\"array_ends_with\",\"array_contains\",\"lt\",\"lte\",\"gt\",\"gte\",\"not\",\"in\",\"notIn\",\"date\",\"temperature\",\"humidity\",\"temperatureMin\",\"temperatureMax\",\"humidityMin\",\"humidityMax\",\"origin\",\"sampledAt\",\"contains\",\"startsWith\",\"endsWith\",\"search\",\"did\",\"homeId\",\"model\",\"name\",\"alias\",\"tempSiid\",\"tempPiid\",\"humSiid\",\"humPiid\",\"battSiid\",\"battPiid\",\"battery\",\"batteryAt\",\"enabled\",\"lastSyncAt\",\"every\",\"some\",\"none\",\"deviceId_hour\",\"deviceId_date\",\"key\",\"userId\",\"status\",\"lastError\",\"updatedAt\",\"province\",\"fuel\",\"price\",\"source\",\"date_province_fuel\",\"scraperName\",\"lastDataHash\",\"lastUpdateAt\",\"metadata\",\"month\",\"inventory\",\"url\",\"latencyMs\",\"message\",\"lastCheckAt\",\"uuid\",\"period\",\"cpu\",\"ram\",\"load\",\"disk\",\"netIn\",\"netOut\",\"process\",\"connections\",\"uuid_period\",\"cpuName\",\"os\",\"region\",\"memTotal\",\"diskTotal\",\"cpuCores\",\"cpuUsage\",\"ramUsed\",\"swapUsed\",\"load1\",\"load5\",\"load15\",\"diskUsed\",\"uptime\",\"recordedAt\",\"indicatorName\",\"valueA\",\"valueB\",\"sourceA\",\"sourceB\",\"diff\",\"diffRatio\",\"title\",\"summary\",\"content\",\"publishedAt\",\"impactRank\",\"title_publishedAt\",\"indicatorId\",\"value\",\"groupName\",\"unit\",\"frequency\",\"hidden\",\"indicatorId_period\",\"description\",\"slug\",\"email\",\"password\",\"is\",\"isNot\",\"connectOrCreate\",\"upsert\",\"createMany\",\"set\",\"disconnect\",\"delete\",\"connect\",\"updateMany\",\"deleteMany\",\"_relevance\",\"increment\",\"decrement\",\"multiply\",\"divide\"]"),
+ graph: "2gWUAfwBCY8CAACFBAAwkAIAAAQAEJECAACFBAAwkgICAAAAAZgCQADJAwAhtwIBAMgDACHMAkAAyQMAIYwDAQAAAAGNAwEAyAMAIQEAAAABACABAAAAAQAgCY8CAACFBAAwkAIAAAQAEJECAACFBAAwkgICAMcDACGYAkAAyQMAIbcCAQDIAwAhzAJAAMkDACGMAwEAyAMAIY0DAQDIAwAhAZkDAADCBQAgAwAAAAQAIAMAAAUAMAQAAAEAIAMAAAAEACADAAAFADAEAAABACADAAAABAAgAwAABQAwBAAAAQAgBpICAgAAAAGYAkAAAAABtwIBAAAAAcwCQAAAAAGMAwEAAAABjQMBAAAAAQEIAAAJACAGkgICAAAAAZgCQAAAAAG3AgEAAAABzAJAAAAAAYwDAQAAAAGNAwEAAAABAQgAAAsAMAaSAgIAjgQAIZgCQACMBAAhtwIBAJYEACHMAkAAjAQAIYwDAQCWBAAhjQMBAJYEACECAAAAAQAgCAAADQAgBpICAgCOBAAhmAJAAIwEACG3AgEAlgQAIcwCQACMBAAhjAMBAJYEACGNAwEAlgQAIQIAAAAEACAIAAAPACADAAAAAQAgDQAACQAgDgAADQAgAQAAAAEAIAEAAAAEACAFEwAAvQUAIBQAAL4FACAVAADBBQAgFgAAwAUAIBcAAL8FACAJjwIAAIQEADCQAgAAFQAQkQIAAIQEADCSAgIAqAMAIZgCQACpAwAhtwIBALYDACHMAkAAqQMAIYwDAQC2AwAhjQMBALYDACEDAAAABAAgAwAAFAAwEgAAFQAgAwAAAAQAIAMAAAUAMAQAAAEAIAqPAgAAgwQAMJACAAAbABCRAgAAgwQAMJICAgAAAAGYAkAAyQMAIacCAQDIAwAhzAJAAMkDACH9AgEAyAMAIf8CAQDIAwAhiwMBAAAAAQEAAAAYACABAAAAGAAgCo8CAACDBAAwkAIAABsAEJECAACDBAAwkgICAMcDACGYAkAAyQMAIacCAQDIAwAhzAJAAMkDACH9AgEAyAMAIf8CAQDIAwAhiwMBAMgDACEBmQMAALwFACADAAAAGwAgAwAAHAAwBAAAGAAgAwAAABsAIAMAABwAMAQAABgAIAMAAAAbACADAAAcADAEAAAYACAHkgICAAAAAZgCQAAAAAGnAgEAAAABzAJAAAAAAf0CAQAAAAH_AgEAAAABiwMBAAAAAQEIAAAgACAHkgICAAAAAZgCQAAAAAGnAgEAAAABzAJAAAAAAf0CAQAAAAH_AgEAAAABiwMBAAAAAQEIAAAiADAHkgICAI4EACGYAkAAjAQAIacCAQCWBAAhzAJAAIwEACH9AgEAlgQAIf8CAQCWBAAhiwMBAJYEACECAAAAGAAgCAAAJAAgB5ICAgCOBAAhmAJAAIwEACGnAgEAlgQAIcwCQACMBAAh_QIBAJYEACH_AgEAlgQAIYsDAQCWBAAhAgAAABsAIAgAACYAIAMAAAAYACANAAAgACAOAAAkACABAAAAGAAgAQAAABsAIAUTAAC3BQAgFAAAuAUAIBUAALsFACAWAAC6BQAgFwAAuQUAIAqPAgAAggQAMJACAAAsABCRAgAAggQAMJICAgCoAwAhmAJAAKkDACGnAgEAtgMAIcwCQACpAwAh_QIBALYDACH_AgEAtgMAIYsDAQC2AwAhAwAAABsAIAMAACsAMBIAACwAIAMAAAAbACADAAAcADAEAAAYACAJCAAAgQQAII8CAACABAAwkAIAADIAEJECAACABAAwkgICAAAAAZgCQADJAwAhtwIBAMgDACHMAkAAyQMAIYoDAQDIAwAhAQAAAC8AIAEAAAAvACAJCAAAgQQAII8CAACABAAwkAIAADIAEJECAACABAAwkgICAMcDACGYAkAAyQMAIbcCAQDIAwAhzAJAAMkDACGKAwEAyAMAIQGZAwAAtgUAIAMAAAAyACADAAAzADAEAAAvACADAAAAMgAgAwAAMwAwBAAALwAgAwAAADIAIAMAADMAMAQAAC8AIAYIgAAAAAGSAgIAAAABmAJAAAAAAbcCAQAAAAHMAkAAAAABigMBAAAAAQEIAAA3ACAGCIAAAAABkgICAAAAAZgCQAAAAAG3AgEAAAABzAJAAAAAAYoDAQAAAAEBCAAAOQAwBgiAAAAAAZICAgCOBAAhmAJAAIwEACG3AgEAlgQAIcwCQACMBAAhigMBAJYEACECAAAALwAgCAAAOwAgBgiAAAAAAZICAgCOBAAhmAJAAIwEACG3AgEAlgQAIcwCQACMBAAhigMBAJYEACECAAAAMgAgCAAAPQAgAwAAAC8AIA0AADcAIA4AADsAIAEAAAAvACABAAAAMgAgBRMAALEFACAUAACyBQAgFQAAtQUAIBYAALQFACAXAACzBQAgCQgAAP4DACCPAgAA_QMAMJACAABDABCRAgAA_QMAMJICAgCoAwAhmAJAAKkDACG3AgEAtgMAIcwCQACpAwAhigMBALYDACEDAAAAMgAgAwAAQgAwEgAAQwAgAwAAADIAIAMAADMAMAQAAC8AIA43AAD5AwAgjwIAAPgDADCQAgAATgAQkQIAAPgDADCSAgIAAAABmAJAAMkDACG3AgEAAAABzAJAAMkDACHQAgEAyAMAIf0CAQDIAwAhhQMBAMgDACGGAwEAyAMAIYcDAQDIAwAhiAMgANYDACEBAAAARgAgCjYAAPwDACCPAgAA-wMAMJACAABIABCRAgAA-wMAMJICAgDHAwAhmAJAAMkDACHMAkAAyQMAId0CAQDIAwAhgwMCAMcDACGEAwgA4AMAIQI2AACvBQAgmQMAALAFACALNgAA_AMAII8CAAD7AwAwkAIAAEgAEJECAAD7AwAwkgICAAAAAZgCQADJAwAhzAJAAMkDACHdAgEAyAMAIYMDAgDHAwAhhAMIAOADACGJAwAA-gMAIAMAAABIACADAABJADAEAABKACABAAAASAAgAQAAAEYAIA43AAD5AwAgjwIAAPgDADCQAgAATgAQkQIAAPgDADCSAgIAxwMAIZgCQADJAwAhtwIBAMgDACHMAkAAyQMAIdACAQDIAwAh_QIBAMgDACGFAwEAyAMAIYYDAQDIAwAhhwMBAMgDACGIAyAA1gMAIQI3AACtBQAgmQMAAK4FACADAAAATgAgAwAATwAwBAAARgAgAwAAAE4AIAMAAE8AMAQAAEYAIAMAAABOACADAABPADAEAABGACALNwAArAUAIJICAgAAAAGYAkAAAAABtwIBAAAAAcwCQAAAAAHQAgEAAAAB_QIBAAAAAYUDAQAAAAGGAwEAAAABhwMBAAAAAYgDIAAAAAEBCAAAUwAgCpICAgAAAAGYAkAAAAABtwIBAAAAAcwCQAAAAAHQAgEAAAAB_QIBAAAAAYUDAQAAAAGGAwEAAAABhwMBAAAAAYgDIAAAAAEBCAAAVQAwCzcAAJ8FACCSAgIAjgQAIZgCQACMBAAhtwIBAJYEACHMAkAAjAQAIdACAQCWBAAh_QIBAJYEACGFAwEAlgQAIYYDAQCWBAAhhwMBAJYEACGIAyAAoQQAIQIAAABGACAIAABXACAKkgICAI4EACGYAkAAjAQAIbcCAQCWBAAhzAJAAIwEACHQAgEAlgQAIf0CAQCWBAAhhQMBAJYEACGGAwEAlgQAIYcDAQCWBAAhiAMgAKEEACECAAAATgAgCAAAWQAgAwAAAEYAIA0AAFMAIA4AAFcAIAEAAABGACABAAAATgAgBRMAAJoFACAUAACbBQAgFQAAngUAIBYAAJ0FACAXAACcBQAgDY8CAAD3AwAwkAIAAF8AEJECAAD3AwAwkgICAKgDACGYAkAAqQMAIbcCAQC2AwAhzAJAAKkDACHQAgEAtgMAIf0CAQC2AwAhhQMBALYDACGGAwEAtgMAIYcDAQC2AwAhiAMgAL8DACEDAAAATgAgAwAAXgAwEgAAXwAgAwAAAE4AIAMAAE8AMAQAAEYAIAEAAABKACABAAAASgAgAwAAAEgAIAMAAEkAMAQAAEoAIAMAAABIACADAABJADAEAABKACADAAAASAAgAwAASQAwBAAASgAgBzYAAJkFACCSAgIAAAABmAJAAAAAAcwCQAAAAAHdAgEAAAABgwMCAAAAAYQDCAAAAAEBCAAAZwAgBpICAgAAAAGYAkAAAAABzAJAAAAAAd0CAQAAAAGDAwIAAAABhAMIAAAAAQEIAABpADAHNgAAmAUAIJICAgCOBAAhmAJAAIwEACHMAkAAjAQAId0CAQCWBAAhgwMCAI4EACGEAwgA5gQAIQIAAABKACAIAABrACAGkgICAI4EACGYAkAAjAQAIcwCQACMBAAh3QIBAJYEACGDAwIAjgQAIYQDCADmBAAhAgAAAEgAIAgAAG0AIAMAAABKACANAABnACAOAABrACABAAAASgAgAQAAAEgAIAUTAACTBQAgFAAAlAUAIBUAAJcFACAWAACWBQAgFwAAlQUAIAmPAgAA9gMAMJACAABzABCRAgAA9gMAMJICAgCoAwAhmAJAAKkDACHMAkAAqQMAId0CAQC2AwAhgwMCAKgDACGEAwgA3QMAIQMAAABIACADAAByADASAABzACADAAAASAAgAwAASQAwBAAASgAgDY8CAAD0AwAwkAIAAHkAEJECAAD0AwAwkgICAAAAAZgCQADJAwAh0AIBAMgDACHYAgEAyAMAIf0CAQDIAwAh_gIBAMgDACH_AgEA1AMAIYADQADJAwAhgQMCAMcDACGCAwAA9QMAIAEAAAB2ACABAAAAdgAgDI8CAAD0AwAwkAIAAHkAEJECAAD0AwAwkgICAMcDACGYAkAAyQMAIdACAQDIAwAh2AIBAMgDACH9AgEAyAMAIf4CAQDIAwAh_wIBANQDACGAA0AAyQMAIYEDAgDHAwAhAv8CAACGBAAgmQMAAJIFACADAAAAeQAgAwAAegAwBAAAdgAgAwAAAHkAIAMAAHoAMAQAAHYAIAMAAAB5ACADAAB6ADAEAAB2ACAJkgICAAAAAZgCQAAAAAHQAgEAAAAB2AIBAAAAAf0CAQAAAAH-AgEAAAAB_wIBAAAAAYADQAAAAAGBAwIAAAABAQgAAH4AIAmSAgIAAAABmAJAAAAAAdACAQAAAAHYAgEAAAAB_QIBAAAAAf4CAQAAAAH_AgEAAAABgANAAAAAAYEDAgAAAAEBCAAAgAEAMAmSAgIAjgQAIZgCQACMBAAh0AIBAJYEACHYAgEAlgQAIf0CAQCWBAAh_gIBAJYEACH_AgEAnwQAIYADQACMBAAhgQMCAI4EACECAAAAdgAgCAAAggEAIAmSAgIAjgQAIZgCQACMBAAh0AIBAJYEACHYAgEAlgQAIf0CAQCWBAAh_gIBAJYEACH_AgEAnwQAIYADQACMBAAhgQMCAI4EACECAAAAeQAgCAAAhAEAIAMAAAB2ACANAAB-ACAOAACCAQAgAQAAAHYAIAEAAAB5ACAGEwAAjQUAIBQAAI4FACAVAACRBQAgFgAAkAUAIBcAAI8FACD_AgAAhgQAIAyPAgAA8wMAMJACAACKAQAQkQIAAPMDADCSAgIAqAMAIZgCQACpAwAh0AIBALYDACHYAgEAtgMAIf0CAQC2AwAh_gIBALYDACH_AgEAvQMAIYADQACpAwAhgQMCAKgDACEDAAAAeQAgAwAAiQEAMBIAAIoBACADAAAAeQAgAwAAegAwBAAAdgAgDY8CAADyAwAwkAIAAJABABCRAgAA8gMAMJICAgAAAAGYAkAAyQMAId0CAQDIAwAh9gIBAMgDACH3AggA4AMAIfgCCADgAwAh-QIBAMgDACH6AgEAyAMAIfsCCADgAwAh_AIIAOADACEBAAAAjQEAIAEAAACNAQAgDY8CAADyAwAwkAIAAJABABCRAgAA8gMAMJICAgDHAwAhmAJAAMkDACHdAgEAyAMAIfYCAQDIAwAh9wIIAOADACH4AggA4AMAIfkCAQDIAwAh-gIBAMgDACH7AggA4AMAIfwCCADgAwAhAZkDAACMBQAgAwAAAJABACADAACRAQAwBAAAjQEAIAMAAACQAQAgAwAAkQEAMAQAAI0BACADAAAAkAEAIAMAAJEBADAEAACNAQAgCpICAgAAAAGYAkAAAAAB3QIBAAAAAfYCAQAAAAH3AggAAAAB-AIIAAAAAfkCAQAAAAH6AgEAAAAB-wIIAAAAAfwCCAAAAAEBCAAAlQEAIAqSAgIAAAABmAJAAAAAAd0CAQAAAAH2AgEAAAAB9wIIAAAAAfgCCAAAAAH5AgEAAAAB-gIBAAAAAfsCCAAAAAH8AggAAAABAQgAAJcBADAKkgICAI4EACGYAkAAjAQAId0CAQCWBAAh9gIBAJYEACH3AggA5gQAIfgCCADmBAAh-QIBAJYEACH6AgEAlgQAIfsCCADmBAAh_AIIAOYEACECAAAAjQEAIAgAAJkBACAKkgICAI4EACGYAkAAjAQAId0CAQCWBAAh9gIBAJYEACH3AggA5gQAIfgCCADmBAAh-QIBAJYEACH6AgEAlgQAIfsCCADmBAAh_AIIAOYEACECAAAAkAEAIAgAAJsBACADAAAAjQEAIA0AAJUBACAOAACZAQAgAQAAAI0BACABAAAAkAEAIAUTAACHBQAgFAAAiAUAIBUAAIsFACAWAACKBQAgFwAAiQUAIA2PAgAA8QMAMJACAAChAQAQkQIAAPEDADCSAgIAqAMAIZgCQACpAwAh3QIBALYDACH2AgEAtgMAIfcCCADdAwAh-AIIAN0DACH5AgEAtgMAIfoCAQC2AwAh-wIIAN0DACH8AggA3QMAIQMAAACQAQAgAwAAoAEAMBIAAKEBACADAAAAkAEAIAMAAJEBADAEAACNAQAgHI8CAADwAwAwkAIAAKcBABCRAgAA8AMAMJICAgAAAAGYAkAAyQMAIbcCAQDIAwAhygIBAMgDACHMAkAAyQMAIdwCAQAAAAHiAgQA7QMAIeMCBADtAwAh5AICAMcDACHlAgIAxwMAIecCAQDIAwAh6AIBAMgDACHpAgEAyAMAIeoCBADtAwAh6wIEAO0DACHsAgIAxwMAIe0CCADgAwAh7gIEAO0DACHvAgQA7QMAIfACCADgAwAh8QIIAOADACHyAggA4AMAIfMCBADtAwAh9AIEAO0DACH1AkAAyQMAIQEAAACkAQAgAQAAAKQBACAcjwIAAPADADCQAgAApwEAEJECAADwAwAwkgICAMcDACGYAkAAyQMAIbcCAQDIAwAhygIBAMgDACHMAkAAyQMAIdwCAQDIAwAh4gIEAO0DACHjAgQA7QMAIeQCAgDHAwAh5QICAMcDACHnAgEAyAMAIegCAQDIAwAh6QIBAMgDACHqAgQA7QMAIesCBADtAwAh7AICAMcDACHtAggA4AMAIe4CBADtAwAh7wIEAO0DACHwAggA4AMAIfECCADgAwAh8gIIAOADACHzAgQA7QMAIfQCBADtAwAh9QJAAMkDACEBmQMAAIYFACADAAAApwEAIAMAAKgBADAEAACkAQAgAwAAAKcBACADAACoAQAwBAAApAEAIAMAAACnAQAgAwAAqAEAMAQAAKQBACAZkgICAAAAAZgCQAAAAAG3AgEAAAABygIBAAAAAcwCQAAAAAHcAgEAAAAB4gIEAAAAAeMCBAAAAAHkAgIAAAAB5QICAAAAAecCAQAAAAHoAgEAAAAB6QIBAAAAAeoCBAAAAAHrAgQAAAAB7AICAAAAAe0CCAAAAAHuAgQAAAAB7wIEAAAAAfACCAAAAAHxAggAAAAB8gIIAAAAAfMCBAAAAAH0AgQAAAAB9QJAAAAAAQEIAACsAQAgGZICAgAAAAGYAkAAAAABtwIBAAAAAcoCAQAAAAHMAkAAAAAB3AIBAAAAAeICBAAAAAHjAgQAAAAB5AICAAAAAeUCAgAAAAHnAgEAAAAB6AIBAAAAAekCAQAAAAHqAgQAAAAB6wIEAAAAAewCAgAAAAHtAggAAAAB7gIEAAAAAe8CBAAAAAHwAggAAAAB8QIIAAAAAfICCAAAAAHzAgQAAAAB9AIEAAAAAfUCQAAAAAEBCAAArgEAMBmSAgIAjgQAIZgCQACMBAAhtwIBAJYEACHKAgEAlgQAIcwCQACMBAAh3AIBAJYEACHiAgQA_wQAIeMCBAD_BAAh5AICAI4EACHlAgIAjgQAIecCAQCWBAAh6AIBAJYEACHpAgEAlgQAIeoCBAD_BAAh6wIEAP8EACHsAgIAjgQAIe0CCADmBAAh7gIEAP8EACHvAgQA_wQAIfACCADmBAAh8QIIAOYEACHyAggA5gQAIfMCBAD_BAAh9AIEAP8EACH1AkAAjAQAIQIAAACkAQAgCAAAsAEAIBmSAgIAjgQAIZgCQACMBAAhtwIBAJYEACHKAgEAlgQAIcwCQACMBAAh3AIBAJYEACHiAgQA_wQAIeMCBAD_BAAh5AICAI4EACHlAgIAjgQAIecCAQCWBAAh6AIBAJYEACHpAgEAlgQAIeoCBAD_BAAh6wIEAP8EACHsAgIAjgQAIe0CCADmBAAh7gIEAP8EACHvAgQA_wQAIfACCADmBAAh8QIIAOYEACHyAggA5gQAIfMCBAD_BAAh9AIEAP8EACH1AkAAjAQAIQIAAACnAQAgCAAAsgEAIAMAAACkAQAgDQAArAEAIA4AALABACABAAAApAEAIAEAAACnAQAgBRMAAIEFACAUAACCBQAgFQAAhQUAIBYAAIQFACAXAACDBQAgHI8CAADvAwAwkAIAALgBABCRAgAA7wMAMJICAgCoAwAhmAJAAKkDACG3AgEAtgMAIcoCAQC2AwAhzAJAAKkDACHcAgEAtgMAIeICBADpAwAh4wIEAOkDACHkAgIAqAMAIeUCAgCoAwAh5wIBALYDACHoAgEAtgMAIekCAQC2AwAh6gIEAOkDACHrAgQA6QMAIewCAgCoAwAh7QIIAN0DACHuAgQA6QMAIe8CBADpAwAh8AIIAN0DACHxAggA3QMAIfICCADdAwAh8wIEAOkDACH0AgQA6QMAIfUCQACpAwAhAwAAAKcBACADAAC3AQAwEgAAuAEAIAMAAACnAQAgAwAAqAEAMAQAAKQBACAQjwIAAOwDADCQAgAAvgEAEJECAADsAwAwkgICAAAAAZgCQADJAwAh3AIBAMgDACHdAkAAyQMAId4CCADgAwAh3wIEAO0DACHgAggA4AMAIeECBADtAwAh4gIEAO0DACHjAgQA7QMAIeQCAgDHAwAh5QICAMcDACHmAgAA7gMAIAEAAAC7AQAgAQAAALsBACAPjwIAAOwDADCQAgAAvgEAEJECAADsAwAwkgICAMcDACGYAkAAyQMAIdwCAQDIAwAh3QJAAMkDACHeAggA4AMAId8CBADtAwAh4AIIAOADACHhAgQA7QMAIeICBADtAwAh4wIEAO0DACHkAgIAxwMAIeUCAgDHAwAhAZkDAACABQAgAwAAAL4BACADAAC_AQAwBAAAuwEAIAMAAAC-AQAgAwAAvwEAMAQAALsBACADAAAAvgEAIAMAAL8BADAEAAC7AQAgDJICAgAAAAGYAkAAAAAB3AIBAAAAAd0CQAAAAAHeAggAAAAB3wIEAAAAAeACCAAAAAHhAgQAAAAB4gIEAAAAAeMCBAAAAAHkAgIAAAAB5QICAAAAAQEIAADDAQAgDJICAgAAAAGYAkAAAAAB3AIBAAAAAd0CQAAAAAHeAggAAAAB3wIEAAAAAeACCAAAAAHhAgQAAAAB4gIEAAAAAeMCBAAAAAHkAgIAAAAB5QICAAAAAQEIAADFAQAwDJICAgCOBAAhmAJAAIwEACHcAgEAlgQAId0CQACMBAAh3gIIAOYEACHfAgQA_wQAIeACCADmBAAh4QIEAP8EACHiAgQA_wQAIeMCBAD_BAAh5AICAI4EACHlAgIAjgQAIQIAAAC7AQAgCAAAxwEAIAySAgIAjgQAIZgCQACMBAAh3AIBAJYEACHdAkAAjAQAId4CCADmBAAh3wIEAP8EACHgAggA5gQAIeECBAD_BAAh4gIEAP8EACHjAgQA_wQAIeQCAgCOBAAh5QICAI4EACECAAAAvgEAIAgAAMkBACADAAAAuwEAIA0AAMMBACAOAADHAQAgAQAAALsBACABAAAAvgEAIAUTAAD6BAAgFAAA-wQAIBUAAP4EACAWAAD9BAAgFwAA_AQAIA-PAgAA6AMAMJACAADPAQAQkQIAAOgDADCSAgIAqAMAIZgCQACpAwAh3AIBALYDACHdAkAAqQMAId4CCADdAwAh3wIEAOkDACHgAggA3QMAIeECBADpAwAh4gIEAOkDACHjAgQA6QMAIeQCAgCoAwAh5QICAKgDACEDAAAAvgEAIAMAAM4BADASAADPAQAgAwAAAL4BACADAAC_AQAwBAAAuwEAIAyPAgAA5wMAMJACAADVAQAQkQIAAOcDADCSAgIAAAABmAJAAMkDACG3AgEAAAABygIBAMgDACHMAkAAyQMAIdgCAQDIAwAh2QICAMcDACHaAgEAyAMAIdsCQADJAwAhAQAAANIBACABAAAA0gEAIAyPAgAA5wMAMJACAADVAQAQkQIAAOcDADCSAgIAxwMAIZgCQADJAwAhtwIBAMgDACHKAgEAyAMAIcwCQADJAwAh2AIBAMgDACHZAgIAxwMAIdoCAQDIAwAh2wJAAMkDACEBmQMAAPkEACADAAAA1QEAIAMAANYBADAEAADSAQAgAwAAANUBACADAADWAQAwBAAA0gEAIAMAAADVAQAgAwAA1gEAMAQAANIBACAJkgICAAAAAZgCQAAAAAG3AgEAAAABygIBAAAAAcwCQAAAAAHYAgEAAAAB2QICAAAAAdoCAQAAAAHbAkAAAAABAQgAANoBACAJkgICAAAAAZgCQAAAAAG3AgEAAAABygIBAAAAAcwCQAAAAAHYAgEAAAAB2QICAAAAAdoCAQAAAAHbAkAAAAABAQgAANwBADAJkgICAI4EACGYAkAAjAQAIbcCAQCWBAAhygIBAJYEACHMAkAAjAQAIdgCAQCWBAAh2QICAI4EACHaAgEAlgQAIdsCQACMBAAhAgAAANIBACAIAADeAQAgCZICAgCOBAAhmAJAAIwEACG3AgEAlgQAIcoCAQCWBAAhzAJAAIwEACHYAgEAlgQAIdkCAgCOBAAh2gIBAJYEACHbAkAAjAQAIQIAAADVAQAgCAAA4AEAIAMAAADSAQAgDQAA2gEAIA4AAN4BACABAAAA0gEAIAEAAADVAQAgBRMAAPQEACAUAAD1BAAgFQAA-AQAIBYAAPcEACAXAAD2BAAgDI8CAADmAwAwkAIAAOYBABCRAgAA5gMAMJICAgCoAwAhmAJAAKkDACG3AgEAtgMAIcoCAQC2AwAhzAJAAKkDACHYAgEAtgMAIdkCAgCoAwAh2gIBALYDACHbAkAAqQMAIQMAAADVAQAgAwAA5QEAMBIAAOYBACADAAAA1QEAIAMAANYBADAEAADSAQAgCI8CAADlAwAwkAIAAOwBABCRAgAA5QMAMJICAgAAAAGYAkAAyQMAIcwCQADJAwAh1gIBAAAAAdcCAgDHAwAhAQAAAOkBACABAAAA6QEAIAiPAgAA5QMAMJACAADsAQAQkQIAAOUDADCSAgIAxwMAIZgCQADJAwAhzAJAAMkDACHWAgEAyAMAIdcCAgDHAwAhAZkDAADzBAAgAwAAAOwBACADAADtAQAwBAAA6QEAIAMAAADsAQAgAwAA7QEAMAQAAOkBACADAAAA7AEAIAMAAO0BADAEAADpAQAgBZICAgAAAAGYAkAAAAABzAJAAAAAAdYCAQAAAAHXAgIAAAABAQgAAPEBACAFkgICAAAAAZgCQAAAAAHMAkAAAAAB1gIBAAAAAdcCAgAAAAEBCAAA8wEAMAWSAgIAjgQAIZgCQACMBAAhzAJAAIwEACHWAgEAlgQAIdcCAgCOBAAhAgAAAOkBACAIAAD1AQAgBZICAgCOBAAhmAJAAIwEACHMAkAAjAQAIdYCAQCWBAAh1wICAI4EACECAAAA7AEAIAgAAPcBACADAAAA6QEAIA0AAPEBACAOAAD1AQAgAQAAAOkBACABAAAA7AEAIAUTAADuBAAgFAAA7wQAIBUAAPIEACAWAADxBAAgFwAA8AQAIAiPAgAA5AMAMJACAAD9AQAQkQIAAOQDADCSAgIAqAMAIZgCQACpAwAhzAJAAKkDACHWAgEAtgMAIdcCAgCoAwAhAwAAAOwBACADAAD8AQAwEgAA_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wIBAAAAAcwCQAAAAAEBCAAAuAIAMAaSAgIAjgQAIcgCAQCWBAAhyQIBAJYEACHKAgEAlgQAIcsCAQCWBAAhzAJAAIwEACECAAAArgIAIAgAALoCACAGkgICAI4EACHIAgEAlgQAIckCAQCWBAAhygIBAJYEACHLAgEAlgQAIcwCQACMBAAhAgAAALECACAIAAC8AgAgAwAAAK4CACANAAC2AgAgDgAAugIAIAEAAACuAgAgAQAAALECACAFEwAA2wQAIBQAANwEACAVAADfBAAgFgAA3gQAIBcAAN0EACAJjwIAANoDADCQAgAAwgIAEJECAADaAwAwkgICAKgDACHIAgEAtgMAIckCAQC2AwAhygIBALYDACHLAgEAtgMAIcwCQACpAwAhAwAAALECACADAADBAgAwEgAAwgIAIAMAAACxAgAgAwAAsgIAMAQAAK4CACAI1gEAAMoDACCPAgAAxgMAMJACAADXAgAQkQIAAMYDADCSAgIAAAABmAJAAMkDACG1AgEAAAABtwIBAMgDACEBAAAAxQIAIBfSAQAA1wMAINQBAADYAwAg1QEAANkDACCPAgAA0wMAMJACAADHAgAQkQIAANMDADCSAgIAxwMAIZgCQADJAwAhtAIBAMgDACG1AgEAyAMAIbYCAQDIAwAhtwIBAMgDACG4AgEA1AMAIbkCAgDHAwAhugICAMcDACG7AgIAxwMAIbwCAgDHAwAhvQICAMcDACG-AgIAxwMAIb8CAgDVAwAhwAJAANIDACHBAiAA1gMAIcICQADSAwAhCNIBAADXBAAg1AEAANgEACDVAQAA2QQAILgCAACGBAAgvwIAAIYEACDAAgAAhgQAIMICAACGBAAgmQMAANoEACAX0gEAANcDACDUAQAA2AMAINUBAADZAwAgjwIAANMDADCQAgAAxwIAEJECAADTAwAwkgICAAAAAZgCQADJAwAhtAIBAAAAAbUCAQDIAwAhtgIBAMgDACG3AgEAyAMAIbgCAQDUAwAhuQICAMcDACG6AgIAxwMAIbsCAgDHAwAhvAICAMcDACG9AgIAxwMAIb4CAgDHAwAhvwICANUDACHAAkAA0gMAIcECIADWAwAhwgJAANIDACEDAAAAxwIAIAMAAMgCADAEAADJAgAgE9MBAADPAwAgjwIAANEDADCQAgAAywIAEJECAADRAwAwkgICAMcDACGTAgIAxwMAIZUCCADNAwAhlgIIAM0DACGXAgAAzgMAIJgCQADJAwAhpwJAAMkDACGoAggAzQMAIakCCADNAwAhqgIIAM0DACGrAggAzQMAIawCCADNAwAhrQIIAM0DACGuAgEAyAMAIa8CQADSAwAhDNMBAADVBAAglQIAAIYEACCWAgAAhgQAIJcCAACGBAAgqAIAAIYEACCpAgAAhgQAIKoCAACGBAAgqwIAAIYEACCsAgAAhgQAIK0CAACGBAAgrwIAAIYEACCZAwAA1gQAIBTTAQAAzwMAII8CAADRAwAwkAIAAMsCABCRAgAA0QMAMJICAgAAAAGTAgIAxwMAIZUCCADNAwAhlgIIAM0DACGXAgAAzgMAIJgCQADJAwAhpwJAAMkDACGoAggAzQMAIakCCADNAwAhqgIIAM0DACGrAggAzQMAIawCCADNAwAhrQIIAM0DACGuAgEAyAMAIa8CQADSAwAhxwIAANADACADAAAAywIAIAMAAMwCADAEAADNAgAgC9MBAADPAwAgjwIAAMwDADCQAgAAzwIAEJECAADMAwAwkgICAMcDACGTAgIAxwMAIZQCQADJAwAhlQIIAM0DACGWAggAzQMAIZcCAADOAwAgmAJAAMkDACEE0wEAANUEACCVAgAAhgQAIJYCAACGBAAglwIAAIYEACAM0wEAAM8DACCPAgAAzAMAMJACAADPAgAQkQIAAMwDADCSAgIAAAABkwICAMcDACGUAkAAyQMAIZUCCADNAwAhlgIIAM0DACGXAgAAzgMAIJgCQADJAwAhxgIAAMsDACADAAAAzwIAIAMAANACADAEAADRAgAgAQAAAMsCACABAAAAzwIAIAEAAADHAgAgAQAAAMUCACAI1gEAAMoDACCPAgAAxgMAMJACAADXAgAQkQIAAMYDADCSAgIAxwMAIZgCQADJAwAhtQIBAMgDACG3AgEAyAMAIQLWAQAA0wQAIJkDAADUBAAgAwAAANcCACADAADYAgAwBAAAxQIAIAMAAADXAgAgAwAA2AIAMAQAAMUCACADAAAA1wIAIAMAANgCADAEAADFAgAgBdYBAADSBAAgkgICAAAAAZgCQAAAAAG1AgEAAAABtwIBAAAAAQEIAADcAgAgBJICAgAAAAGYAkAAAAABtQIBAAAAAbcCAQAAAAEBCAAA3gIAMAXWAQAAxQQAIJICAgCOBAAhmAJAAIwEACG1AgEAlgQAIbcCAQCWBAAhAgAAAMUCACAIAADgAgAgBJICAgCOBAAhmAJAAIwEACG1AgEAlgQAIbcCAQCWBAAhAgAAANcCACAIAADiAgAgAwAAAMUCACANAADcAgAgDgAA4AIAIAEAAADFAgAgAQAAANcCACAFEwAAwAQAIBQAAMEEACAVAADEBAAgFgAAwwQAIBcAAMIEACAHjwIAAMUDADCQAgAA6AIAEJECAADFAwAwkgICAKgDACGYAkAAqQMAIbUCAQC2AwAhtwIBALYDACEDAAAA1wIAIAMAAOcCADASAADoAgAgAwAAANcCACADAADYAgAwBAAAxQIAIAEAAADJAgAgAQAAAMkCACADAAAAxwIAIAMAAMgCADAEAADJAgAgAwAAAMcCACADAADIAgAwBAAAyQIAIAMAAADHAgAgAwAAyAIAMAQAAMkCACAU0gEAAL0EACDUAQAAvgQAINUBAAC_BAAgkgICAAAAAZgCQAAAAAG0AgEAAAABtQIBAAAAAbYCAQAAAAG3AgEAAAABuAIBAAAAAbkCAgAAAAG6AgIAAAABuwICAAAAAbwCAgAAAAG9AgIAAAABvgICAAAAAb8CAgAAAAHAAkAAAAABwQIgAAAAAcICQAAAAAEBCAAA8AIAIBGSAgIAAAABmAJAAAAAAbQCAQAAAAG1AgEAAAABtgIBAAAAAbcCAQAAAAG4AgEAAAABuQICAAAAAboCAgAAAAG7AgIAAAABvAICAAAAAb0CAgAAAAG-AgIAAAABvwICAAAAAcACQAAAAAHBAiAAAAABwgJAAAAAAQEIAADyAgAwFNIBAACiBAAg1AEAAKMEACDVAQAApAQAIJICAgCOBAAhmAJAAIwEACG0AgEAlgQAIbUCAQCWBAAhtgIBAJYEACG3AgEAlgQAIbgCAQCfBAAhuQICAI4EACG6AgIAjgQAIbsCAgCOBAAhvAICAI4EACG9AgIAjgQAIb4CAgCOBAAhvwICAKAEACHAAkAAlwQAIcECIAChBAAhwgJAAJcEACECAAAAyQIAIAgAAPQCACARkgICAI4EACGYAkAAjAQAIbQCAQCWBAAhtQIBAJYEACG2AgEAlgQAIbcCAQCWBAAhuAIBAJ8EACG5AgIAjgQAIboCAgCOBAAhuwICAI4EACG8AgIAjgQAIb0CAgCOBAAhvgICAI4EACG_AgIAoAQAIcACQACXBAAhwQIgAKEEACHCAkAAlwQAIQIAAADHAgAgCAAA9gIAIAMAAADJAgAgDQAA8AIAIA4AAPQCACABAAAAyQIAIAEAAADHAgAgCRMAAJoEACAUAACbBAAgFQAAngQAIBYAAJ0EACAXAACcBAAguAIAAIYEACC_AgAAhgQAIMACAACGBAAgwgIAAIYEACAUjwIAALwDADCQAgAA_AIAEJECAAC8AwAwkgICAKgDACGYAkAAqQMAIbQCAQC2AwAhtQIBALYDACG2AgEAtgMAIbcCAQC2AwAhuAIBAL0DACG5AgIAqAMAIboCAgCoAwAhuwICAKgDACG8AgIAqAMAIb0CAgCoAwAhvgICAKgDACG_AgIAvgMAIcACQAC3AwAhwQIgAL8DACHCAkAAtwMAIQMAAADHAgAgAwAA-wIAMBIAAPwCACADAAAAxwIAIAMAAMgCADAEAADJAgAgAQAAAM0CACABAAAAzQIAIAMAAADLAgAgAwAAzAIAMAQAAM0CACADAAAAywIAIAMAAMwCADAEAADNAgAgAwAAAMsCACADAADMAgAwBAAAzQIAIBDTAQAAmQQAIJICAgAAAAGTAgIAAAABlQIIAAAAAZYCCAAAAAGXAoAAAAABmAJAAAAAAacCQAAAAAGoAggAAAABqQIIAAAAAaoCCAAAAAGrAggAAAABrAIIAAAAAa0CCAAAAAGuAgEAAAABrwJAAAAAAQEIAACEAwAgD5ICAgAAAAGTAgIAAAABlQIIAAAAAZYCCAAAAAGXAoAAAAABmAJAAAAAAacCQAAAAAGoAggAAAABqQIIAAAAAaoCCAAAAAGrAggAAAABrAIIAAAAAa0CCAAAAAGuAgEAAAABrwJAAAAAAQEIAACGAwAwENMBAACYBAAgkgICAI4EACGTAgIAjgQAIZUCCACNBAAhlgIIAI0EACGXAoAAAAABmAJAAIwEACGnAkAAjAQAIagCCACNBAAhqQIIAI0EACGqAggAjQQAIasCCACNBAAhrAIIAI0EACGtAggAjQQAIa4CAQCWBAAhrwJAAJcEACECAAAAzQIAIAgAAIgDACAPkgICAI4EACGTAgIAjgQAIZUCCACNBAAhlgIIAI0EACGXAoAAAAABmAJAAIwEACGnAkAAjAQAIagCCACNBAAhqQIIAI0EACGqAggAjQQAIasCCACNBAAhrAIIAI0EACGtAggAjQQAIa4CAQCWBAAhrwJAAJcEACECAAAAywIAIAgAAIoDACADAAAAzQIAIA0AAIQDACAOAACIAwAgAQAAAM0CACABAAAAywIAIA8TAACRBAAgFAAAkgQAIBUAAJUEACAWAACUBAAgFwAAkwQAIJUCAACGBAAglgIAAIYEACCXAgAAhgQAIKgCAACGBAAgqQIAAIYEACCqAgAAhgQAIKsCAACGBAAgrAIAAIYEACCtAgAAhgQAIK8CAACGBAAgEo8CAAC1AwAwkAIAAJADABCRAgAAtQMAMJICAgCoAwAhkwICAKgDACGVAggAqgMAIZYCCACqAwAhlwIAAKsDACCYAkAAqQMAIacCQACpAwAhqAIIAKoDACGpAggAqgMAIaoCCACqAwAhqwIIAKoDACGsAggAqgMAIa0CCACqAwAhrgIBALYDACGvAkAAtwMAIQMAAADLAgAgAwAAjwMAMBIAAJADACADAAAAywIAIAMAAMwCADAEAADNAgAgAQAAANECACABAAAA0QIAIAMAAADPAgAgAwAA0AIAMAQAANECACADAAAAzwIAIAMAANACADAEAADRAgAgAwAAAM8CACADAADQAgAwBAAA0QIAIAjTAQAAkAQAIJICAgAAAAGTAgIAAAABlAJAAAAAAZUCCAAAAAGWAggAAAABlwKAAAAAAZgCQAAAAAEBCAAAmAMAIAeSAgIAAAABkwICAAAAAZQCQAAAAAGVAggAAAABlgIIAAAAAZcCgAAAAAGYAkAAAAABAQgAAJoDADAI0wEAAI8EACCSAgIAjgQAIZMCAgCOBAAhlAJAAIwEACGVAggAjQQAIZYCCACNBAAhlwKAAAAAAZgCQACMBAAhAgAAANECACAIAACcAwAgB5ICAgCOBAAhkwICAI4EACGUAkAAjAQAIZUCCACNBAAhlgIIAI0EACGXAoAAAAABmAJAAIwEACECAAAAzwIAIAgAAJ4DACADAAAA0QIAIA0AAJgDACAOAACcAwAgAQAAANECACABAAAAzwIAIAgTAACHBAAgFAAAiAQAIBUAAIsEACAWAACKBAAgFwAAiQQAIJUCAACGBAAglgIAAIYEACCXAgAAhgQAIAqPAgAApwMAMJACAACkAwAQkQIAAKcDADCSAgIAqAMAIZMCAgCoAwAhlAJAAKkDACGVAggAqgMAIZYCCACqAwAhlwIAAKsDACCYAkAAqQMAIQMAAADPAgAgAwAAowMAMBIAAKQDACADAAAAzwIAIAMAANACADAEAADRAgAgCo8CAACnAwAwkAIAAKQDABCRAgAApwMAMJICAgCoAwAhkwICAKgDACGUAkAAqQMAIZUCCACqAwAhlgIIAKoDACGXAgAAqwMAIJgCQACpAwAhDRMAALEDACAUAAC0AwAgFQAAsQMAIBYAALEDACAXAACxAwAgmQICAAAAAaACAgAAAAGhAgIAAAABogICAAAAAaMCAgAAAAGkAgIAswMAIaUCAgAAAASmAgIAAAAECxMAALEDACAWAACyAwAgFwAAsgMAIJkCQAAAAAGgAkAAAAABoQJAAAAAAaICQAAAAAGjAkAAAAABpAJAALADACGlAkAAAAAEpgJAA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-AgIAqAMAIb8CAgC-AwAhwAJAALcDACHBAiAAvwMAIcICQAC3AwAhDxMAAKwDACAWAADEAwAgFwAAxAMAIJkCAQAAAAGgAgEAAAABoQIBAAAAAaICAQAAAAGjAgEAAAABpAIBAMMDACGlAgEAAAAFpgIBAAAABbACAQAAAAGxAgEAAAABsgIBAAAAAbMCAQAAAAENEwAArAMAIBQAAK8DACAVAACsAwAgFgAArAMAIBcAAKwDACCZAgIAAAABoAICAAAAAaECAgAAAAGiAgIAAAABowICAAAAAaQCAgDCAwAhpQICAAAABaYCAgAAAAUFEwAAsQMAIBYAAMEDACAXAADBAwAgmQIgAAAAAaQCIADAAwAhBRMAALEDACAWAADBAwAgFwAAwQMAIJkCIAAAAAGkAiAAwAMAIQKZAiAAAAABpAIgAMEDACENEwAArAMAIBQAAK8DACAVAACsAwAgFgAArAMAIBcAAKwDACCZAgIAAAABoAICAAAAAaECAgAAAAGiAgIAAAABowICAAAAAaQCAgDCAwAhpQICAAAABaYCAgAAAAUPEwAArAMAIBYAAMQDACAXAADEAwAgmQIBAAAAAaACAQAAAAGhAgEAAAABogIBAAAAAaMCAQAAAAGkAgEAwwMAIaUCAQAAAAWmAgEAAAAFsAIBAAAAAbECAQAAAAGyAgEAAAABswIBAAAAAQyZAgEAAAABoAIBAAAAAaECAQAAAAGiAgEAAAABowIBAAAAAaQCAQDEAwAhpQIBAAAABaYCAQAAAAWwAgEAAAABsQIBAAAAAbICAQAAAAGzAgEAAAABB48CAADFAwAwkAIAAOgCABCRAgAAxQMAMJICAgCoAwAhmAJAAKkDACG1AgEAtgMAIbcCAQC2AwAhCNYBAADKAwAgjwIAAMYDADCQAgAA1wIAEJECAADGAwAwkgICAMcDACGYAkAAyQMAIbUCAQDIAwAhtwIBAMgDACEImQICAAAAAaACAgAAAAGhAgIAAAABogICAAAAAaMCAgAAAAGkAgIAsQMAIaUCAgAAAASmAgIAAAAEDJkCAQAAAAGgAgEAAAABoQIBAAAAAaICAQAAAAGjAgEAAAABpAIBALsDACGlAgEAAAAEpgIBAAAABLACAQAAAAGxAgEAAAABsgIBAAAAAbMCAQAAAAEImQJAAAAAAaACQAAAAAGhAkAAAAABogJAAAAAAaMCQAAAAAGkAkAAsgMAIaUCQAAAAASmAkAAAAAEA8MCAADHAgAgxAIAAMcCACDFAgAAxwIAIAKTAgIAAAABlAJAAAAAAQvTAQAAzwMAII8CAADMAwAwkAIAAM8CABCRAgAAzAMAMJICAgDHAwAhkwICAMcDACGUAkAAyQMAIZUCCADNAwAhlgIIAM0DACGXAgAAzgMAIJgCQADJAwAhCJkCCAAAAAGgAggAAAABoQIIAAAAAaICCAAAAAGjAggAAAABpAIIAK8DACGlAggAAAAFpgIIAAAABQyZAoAAAAABmgIBAAAAAZsCAQAAAAGcAgEAAAABnQKAAAAAAZ4CgAAAAAGfAoAAAAABoAKAAAAAAaECgAAAAAGiAoAAAAABowKAAAAAAaQCgAAAAAEZ0gEAANcDACDUAQAA2AMAINUBAADZAwAgjwIAANMDADCQAgAAxwIAEJECAADTAwAwkgICAMcDACGYAkAAyQMAIbQCAQDIAwAhtQIBAMgDACG2AgEAyAMAIbcCAQDIAwAhuAIBANQDACG5AgIAxwMAIboCAgDHAwAhuwICAMcDACG8AgIAxwMAIb0CAgDHAwAhvgICAMcDACG_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-AIIAN0DACH5AgEAtgMAIfoCAQC2AwAh-wIIAN0DACH8AggA3QMAIQ2PAgAA8gMAMJACAACQAQAQkQIAAPIDADCSAgIAxwMAIZgCQADJAwAh3QIBAMgDACH2AgEAyAMAIfcCCADgAwAh-AIIAOADACH5AgEAyAMAIfoCAQDIAwAh-wIIAOADACH8AggA4AMAIQyPAgAA8wMAMJACAACKAQAQkQIAAPMDADCSAgIAqAMAIZgCQACpAwAh0AIBALYDACHYAgEAtgMAIf0CAQC2AwAh_gIBALYDACH_AgEAvQMAIYADQACpAwAhgQMCAKgDACEMjwIAAPQDADCQAgAAeQAQkQIAAPQDADCSAgIAxwMAIZgCQADJAwAh0AIBAMgDACHYAgEAyAMAIf0CAQDIAwAh_gIBAMgDACH_AgEA1AMAIYADQADJAwAhgQMCAMcDACEC_QIBAAAAAYADQAAAAAEJjwIAAPYDADCQAgAAcwAQkQIAAPYDADCSAgIAqAMAIZgCQACpAwAhzAJAAKkDACHdAgEAtgMAIYMDAgCoAwAhhAMIAN0DACENjwIAAPcDADCQAgAAXwAQkQIAAPcDADCSAgIAqAMAIZgCQACpAwAhtwIBALYDACHMAkAAqQMAIdACAQC2AwAh_QIBALYDACGFAwEAtgMAIYYDAQC2AwAhhwMBALYDACGIAyAAvwMAIQ43AAD5AwAgjwIAAPgDADCQAgAATgAQkQIAAPgDADCSAgIAxwMAIZgCQADJAwAhtwIBAMgDACHMAkAAyQMAIdACAQDIAwAh_QIBAMgDACGFAwEAyAMAIYYDAQDIAwAhhwMBAMgDACGIAyAA1gMAIQPDAgAASAAgxAIAAEgAIMUCAABIACAC3QIBAAAAAYMDAgAAAAEKNgAA_AMAII8CAAD7AwAwkAIAAEgAEJECAAD7AwAwkgICAMcDACGYAkAAyQMAIcwCQADJAwAh3QIBAMgDACGDAwIAxwMAIYQDCADgAwAhEDcAAPkDACCPAgAA-AMAMJACAABOABCRAgAA-AMAMJICAgDHAwAhmAJAAMkDACG3AgEAyAMAIcwCQADJAwAh0AIBAMgDACH9AgEAyAMAIYUDAQDIAwAhhgMBAMgDACGHAwEAyAMAIYgDIADWAwAhjgMAAE4AII8DAABOACAJCAAA_gMAII8CAAD9AwAwkAIAAEMAEJECAAD9AwAwkgICAKgDACGYAkAAqQMAIbcCAQC2AwAhzAJAAKkDACGKAwEAtgMAIQ8TAACxAwAgFgAA_wMAIBcAAP8DACCZAoAAAAABmgIBAAAAAZsCAQAAAAGcAgEAAAABnQKAAAAAAZ4CgAAAAAGfAoAAAAABoAKAAAAAAaECgAAAAAGiAoAAAAABowKAAAAAAaQCgAAAAAEMmQKAAAAAAZoCAQAAAAGbAgEAAAABnAIBAAAAAZ0CgAAAAAGeAoAAAAABnwKAAAAAAaACgAAAAAGhAoAAAAABogKAAAAAAaMCgAAAAAGkAoAAAAABCQgAAIEEACCPAgAAgAQAMJACAAAyABCRAgAAgAQAMJICAgDHAwAhmAJAAMkDACG3AgEAyAMAIcwCQADJAwAhigMBAMgDACEMmQKAAAAAAZoCAQAAAAGbAgEAAAABnAIBAAAAAZ0CgAAAAAGeAoAAAAABnwKAAAAAAaACgAAAAAGhAoAAAAABogKAAAAAAaMCgAAAAAGkAoAAAAABCo8CAACCBAAwkAIAACwAEJECAACCBAAwkgICAKgDACGYAkAAqQMAIacCAQC2AwAhzAJAAKkDACH9AgEAtgMAIf8CAQC2AwAhiwMBALYDACEKjwIAAIMEADCQAgAAGwAQkQIAAIMEADCSAgIAxwMAIZgCQADJAwAhpwIBAMgDACHMAkAAyQMAIf0CAQDIAwAh_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_BAAgkgICAAAAAZgCQAAAAAG0AgEAAAABtgIBAAAAAbcCAQAAAAG4AgEAAAABuQICAAAAAboCAgAAAAG7AgIAAAABvAICAAAAAb0CAgAAAAG-AgIAAAABvwICAAAAAcACQAAAAAHBAiAAAAABwgJAAAAAAQIAAADJAgAgDQAA0QQAIAMAAADJAgAgDQAA0QQAIA4AANAEACABCAAAyQUAMBfSAQAA1wMAINQBAADYAwAg1QEAANkDACCPAgAA0wMAMJACAADHAgAQkQIAANMDADCSAgIAAAABmAJAAMkDACG0AgEAAAABtQIBAMgDACG2AgEAyAMAIbcCAQDIAwAhuAIBANQDACG5AgIAxwMAIboCAgDHAwAhuwICAMcDACG8AgIAxwMAIb0CAgDHAwAhvgICAMcDACG_AgIA1QMAIcACQADSAwAhwQIgANYDACHCAkAA0gMAIQIAAADJAgAgCAAA0AQAIAIAAADOBAAgCAAAzwQAIBSPAgAAzQQAMJACAADOBAAQkQIAAM0EADCSAgIAxwMAIZgCQADJAwAhtAIBAMgDACG1AgEAyAMAIbYCAQDIAwAhtwIBAMgDACG4AgEA1AMAIbkCAgDHAwAhugICAMcDACG7AgIAxwMAIbwCAgDHAwAhvQICAMcDACG-AgIAxwMAIb8CAgDVAwAhwAJAANIDACHBAiAA1gMAIcICQADSAwAhFI8CAADNBAAwkAIAAM4EABCRAgAAzQQAMJICAgDHAwAhmAJAAMkDACG0AgEAyAMAIbUCAQDIAwAhtgIBAMgDACG3AgEAyAMAIbgCAQDUAwAhuQICAMcDACG6AgIAxwMAIbsCAgDHAwAhvAICAMcDACG9AgIAxwMAIb4CAgDHAwAhvwICANUDACHAAkAA0gMAIcECIADWAwAhwgJAANIDACEQkgICAI4EACGYAkAAjAQAIbQCAQCWBAAhtgIBAJYEACG3AgEAlgQAIbgCAQCfBAAhuQICAI4EACG6AgIAjgQAIbsCAgCOBAAhvAICAI4EACG9AgIAjgQAIb4CAgCOBAAhvwICAKAEACHAAkAAlwQAIcECIAChBAAhwgJAAJcEACES1AEAAKMEACDVAQAApAQAIJICAgCOBAAhmAJAAIwEACG0AgEAlgQAIbYCAQCWBAAhtwIBAJYEACG4AgEAnwQAIbkCAgCOBAAhugICAI4EACG7AgIAjgQAIbwCAgCOBAAhvQICAI4EACG-AgIAjgQAIb8CAgCgBAAhwAJAAJcEACHBAiAAoQQAIcICQACXBAAhEtQBAAC-BAAg1QEAAL8EACCSAgIAAAABmAJAAAAAAbQCAQAAAAG2AgEAAAABtwIBAAAAAbgCAQAAAAG5AgIAAAABugICAAAAAbsCAgAAAAG8AgIAAAABvQICAAAAAb4CAgAAAAG_AgIAAAABwAJAAAAAAcECIAAAAAHCAkAAAAABBA0AAMYEADCQAwAAxwQAMJIDAADJBAAglgMAAMoEADAAAbMCAQAAAAEI0gEAANcEACDUAQAA2AQAINUBAADZBAAguAIAAIYEACC_AgAAhgQAIMACAACGBAAgwgIAAIYEACCZAwAA2gQAIAGzAgEAAAABAtYBAADTBAAgmQMAANQEACAAAAGzAgEAAAABAAAAAAABswIBAAAAAQAAAAAABZMDCAAAAAGaAwgAAAABmwMIAAAAAZwDCAAAAAGdAwgAAAABAbMCAQAAAAEAAAAAAAGzAgEAAAABAAAAAAABswIBAAAAAQAAAAAAAbMCAQAAAAEAAAAAAAWTAwQAAAABmgMEAAAAAZsDBAAAAAGcAwQAAAABnQMEAAAAAQGzAgEAAAABAAAAAAABswIBAAAAAQAAAAAAAbMCAQAAAAEAAAAAAAGzAgEAAAABAAAAAAAFDQAAxAUAIA4AAMcFACCQAwAAxQUAIJEDAADGBQAglgMAAEYAIAMNAADEBQAgkAMAAMUFACCWAwAARgAgAAAAAAALDQAAoAUAMA4AAKUFADCQAwAAoQUAMJEDAACiBQAwkgMAAKMFACCTAwAApAUAMJQDAACkBQAwlQMAAKQFADCWAwAApAUAMJcDAACmBQAwmAMAAKcFADAFkgICAAAAAZgCQAAAAAHMAkAAAAAB3QIBAAAAAYQDCAAAAAECAAAASgAgDQAAqwUAIAMAAABKACANAACrBQAgDgAAqgUAIAEIAADDBQAwCzYAAPwDACCPAgAA-wMAMJACAABIABCRAgAA-wMAMJICAgAAAAGYAkAAyQMAIcwCQADJAwAh3QIBAMgDACGDAwIAxwMAIYQDCADgAwAhiQMAAPoDACACAAAASgAgCAAAqgUAIAIAAACoBQAgCAAAqQUAIAmPAgAApwUAMJACAACoBQAQkQIAAKcFADCSAgIAxwMAIZgCQADJAwAhzAJAAMkDACHdAgEAyAMAIYMDAgDHAwAhhAMIAOADACEJjwIAAKcFADCQAgAAqAUAEJECAACnBQAwkgICAMcDACGYAkAAyQMAIcwCQADJAwAh3QIBAMgDACGDAwIAxwMAIYQDCADgAwAhBZICAgCOBAAhmAJAAIwEACHMAkAAjAQAId0CAQCWBAAhhAMIAOYEACEFkgICAI4EACGYAkAAjAQAIcwCQACMBAAh3QIBAJYEACGEAwgA5gQAIQWSAgIAAAABmAJAAAAAAcwCQAAAAAHdAgEAAAABhAMIAAAAAQQNAACgBQAwkAMAAKEFADCSAwAAowUAIJYDAACkBQAwAAGzAgEAAAABAjcAAK0FACCZAwAArgUAIAGzAgEAAAABAAAAAAABswIBAAAAAQAAAAAAAbMCAQAAAAEAAAAAAAGzAgEAAAABBZICAgAAAAGYAkAAAAABzAJAAAAAAd0CAQAAAAGEAwgAAAABCpICAgAAAAGYAkAAAAABtwIBAAAAAcwCQAAAAAHQAgEAAAAB_QIBAAAAAYUDAQAAAAGGAwEAAAABhwMBAAAAAYgDIAAAAAECAAAARgAgDQAAxAUAIAMAAABOACANAADEBQAgDgAAyAUAIAwAAABOACAIAADIBQAgkgICAI4EACGYAkAAjAQAIbcCAQCWBAAhzAJAAIwEACHQAgEAlgQAIf0CAQCWBAAhhQMBAJYEACGGAwEAlgQAIYcDAQCWBAAhiAMgAKEEACEKkgICAI4EACGYAkAAjAQAIbcCAQCWBAAhzAJAAIwEACHQAgEAlgQAIf0CAQCWBAAhhQMBAJYEACGGAwEAlgQAIYcDAQCWBAAhiAMgAKEEACEQkgICAAAAAZgCQAAAAAG0AgEAAAABtgIBAAAAAbcCAQAAAAG4AgEAAAABuQICAAAAAboCAgAAAAG7AgIAAAABvAICAAAAAb0CAgAAAAG-AgIAAAABvwICAAAAAcACQAAAAAHBAiAAAAABwgJAAAAAAQSSAgIAAAABmAJAAAAAAbUCAQAAAAG3AgEAAAABAgAAAMUCACANAADKBQAgDpICAgAAAAGVAggAAAABlgIIAAAAAZcCgAAAAAGYAkAAAAABpwJAAAAAAagCCAAAAAGpAggAAAABqgIIAAAAAasCCAAAAAGsAggAAAABrQIIAAAAAa4CAQAAAAGvAkAAAAABBpICAgAAAAGUAkAAAAABlQIIAAAAAZYCCAAAAAGXAoAAAAABmAJAAAAAAQMAAADXAgAgDQAAygUAIA4AANAFACAGAAAA1wIAIAgAANAFACCSAgIAjgQAIZgCQACMBAAhtQIBAJYEACG3AgEAlgQAIQSSAgIAjgQAIZgCQACMBAAhtQIBAJYEACG3AgEAlgQAIRPSAQAAvQQAINUBAAC_BAAgkgICAAAAAZgCQAAAAAG0AgEAAAABtQIBAAAAAbYCAQAAAAG3AgEAAAABuAIBAAAAAbkCAgAAAAG6AgIAAAABuwICAAAAAbwCAgAAAAG9AgIAAAABvgICAAAAAb8CAgAAAAHAAkAAAAABwQIgAAAAAcICQAAAAAECAAAAyQIAIA0AANEFACADAAAAxwIAIA0AANEFACAOAADVBQAgFQAAAMcCACAIAADVBQAg0gEAAKIEACDVAQAApAQAIJICAgCOBAAhmAJAAIwEACG0AgEAlgQAIbUCAQCWBAAhtgIBAJYEACG3AgEAlgQAIbgCAQCfBAAhuQICAI4EACG6AgIAjgQAIbsCAgCOBAAhvAICAI4EACG9AgIAjgQAIb4CAgCOBAAhvwICAKAEACHAAkAAlwQAIcECIAChBAAhwgJAAJcEACET0gEAAKIEACDVAQAApAQAIJICAgCOBAAhmAJAAIwEACG0AgEAlgQAIbUCAQCWBAAhtgIBAJYEACG3AgEAlgQAIbgCAQCfBAAhuQICAI4EACG6AgIAjgQAIbsCAgCOBAAhvAICAI4EACG9AgIAjgQAIb4CAgCOBAAhvwICAKAEACHAAkAAlwQAIcECIAChBAAhwgJAAJcEACET0gEAAL0EACDUAQAAvgQAIJICAgAAAAGYAkAAAAABtAIBAAAAAbUCAQAAAAG2AgEAAAABtwIBAAAAAbgCAQAAAAG5AgIAAAABugICAAAAAbsCAgAAAAG8AgIAAAABvQICAAAAAb4CAgAAAAG_AgIAAAABwAJAAAAAAcECIAAAAAHCAkAAAAABAgAAAMkCACANAADWBQAgAwAAAMcCACANAADWBQAgDgAA2gUAIBUAAADHAgAgCAAA2gUAINIBAACiBAAg1AEAAKMEACCSAgIAjgQAIZgCQACMBAAhtAIBAJYEACG1AgEAlgQAIbYCAQCWBAAhtwIBAJYEACG4AgEAnwQAIbkCAgCOBAAhugICAI4EACG7AgIAjgQAIbwCAgCOBAAhvQICAI4EACG-AgIAjgQAIb8CAgCgBAAhwAJAAJcEACHBAiAAoQQAIcICQACXBAAhE9IBAACiBAAg1AEAAKMEACCSAgIAjgQAIZgCQACMBAAhtAIBAJYEACG1AgEAlgQAIbYCAQCWBAAhtwIBAJYEACG4AgEAnwQAIbkCAgCOBAAhugICAI4EACG7AgIAjgQAIbwCAgCOBAAhvQICAI4EACG-AgIAjgQAIb8CAgCgBAAhwAJAAJcEACHBAiAAoQQAIcICQACXBAAhAAAFEwAEFAAFFQAGFgAHFwAIAAAAAAAFEwAEFAAFFQAGFgAHFwAIAAUTAAwUAA0VAA4WAA8XABAAAAAAAAUTAAwUAA0VAA4WAA8XABAABRMAFBQAFRUAFhYAFxcAGAAAAAAABRMAFBQAFRUAFhYAFxcAGAITABw3SxsBNgAaATdMAAUTAB4UAB8VACAWACEXACIAAAAAAAUTAB4UAB8VACAWACEXACIFEwAlFAAmFQAnFgAoFwApAAAAAAAFEwAlFAAmFQAnFgAoFwApAAUTAC0UAC4VAC8WADAXADEAAAAAAAUTAC0UAC4VAC8WADAXADEABRMANRQANhUANxYAOBcAOQAAAAAABRMANRQANhUANxYAOBcAOQAFEwA9FAA-FQA_FgBAFwBBAAAAAAAFEwA9FAA-FQA_FgBAFwBBAAUTAEUUAEYVAEcWAEgXAEkAAAAAAAUTAEUUAEYVAEcWAEgXAEkABRMATRQAThUATxYAUBcAUQAAAAAABRMATRQAThUATxYAUBcAUQAFEwBVFABWFQBXFgBYFwBZAAAAAAAFEwBVFABWFQBXFgBYFwBZAAUTAF0UAF4VAF8WAGAXAGEAAAAAAAUTAF0UAF4VAF8WAGAXAGEABRMAZRQAZhUAZxYAaBcAaQAAAAAABRMAZRQAZhUAZxYAaBcAaQAFEwBtFABuFQBvFgBwFwBxAAAAAAAFEwBtFABuFQBvFgBwFwBxAhMAeNYBygJ0BBMAd9IBAHPUAc4CddUB0gJ2AdMBAHQB0wEAdALUAdMCANUB1AIAAdYB1QIABRMAehQAexUAfBYAfRcAfgAAAAAABRMAehQAexUAfBYAfRcAfgUTAIEBFACCARUAgwEWAIQBFwCFAQAAAAAABRMAgQEUAIIBFQCDARYAhAEXAIUBBRMAiAEUAIkBFQCKARYAiwEXAIwBAAAAAAAFEwCIARQAiQEVAIoBFgCLARcAjAEFEwCPARQAkAEVAJEBFgCSARcAkwEAAAAAAAUTAI8BFACQARUAkQEWAJIBFwCTAQECAQIDAQUGAQYHAQcIAQkKAQoMAgsOAQwQAg8RARASARETAhgWAxkXCRoZChsaChwdCh0eCh4fCh8hCiAjAiElCiInAiMoCiQpCiUqAiYtCycuESgwEikxEio0Eis1Eiw2Ei04Ei46Ai88EjA-AjE_EjJAEjNBAjREEzVFGThHGjlNGjpQGjtRGjxSGj1UGj5WAj9YGkBaAkFbGkJcGkNdAkRgHUVhI0ZiG0djG0hkG0llG0pmG0toG0xqAk1sG05uAk9vG1BwG1FxAlJ0JFN1KlR3K1V4K1Z7K1d8K1h9K1l_K1qBAQJbgwErXIUBAl2GAStehwErX4gBAmCLASxhjAEyYo4BM2OPATNkkgEzZZMBM2aUATNnlgEzaJgBAmmaATNqnAECa50BM2yeATNtnwECbqIBNG-jATpwpQE7caYBO3KpATtzqgE7dKsBO3WtATt2rwECd7EBO3izAQJ5tAE7erUBO3u2AQJ8uQE8fboBQn68AUN_vQFDgAHAAUOBAcEBQ4IBwgFDgwHEAUOEAcYBAoUByAFDhgHKAQKHAcsBQ4gBzAFDiQHNAQKKAdABRIsB0QFKjAHTAUuNAdQBS44B1wFLjwHYAUuQAdkBS5EB2wFLkgHdAQKTAd8BS5QB4QEClQHiAUuWAeMBS5cB5AECmAHnAUyZAegBUpoB6gFTmwHrAVOcAe4BU50B7wFTngHwAVOfAfIBU6AB9AECoQH2AVOiAfgBAqMB-QFTpAH6AVOlAfsBAqYB_gFUpwH_AVqoAYECW6kBggJbqgGFAlurAYYCW6wBhwJbrQGJAluuAYsCAq8BjQJbsAGPAgKxAZACW7IBkQJbswGSAgK0AZUCXLUBlgJitgGYAmO3AZkCY7gBnAJjuQGdAmO6AZ4CY7sBoAJjvAGiAgK9AaQCY74BpgICvwGnAmPAAagCY8EBqQICwgGsAmTDAa0CasQBrwJrxQGwAmvGAbMCa8cBtAJryAG1AmvJAbcCa8oBuQICywG7AmvMAb0CAs0BvgJrzgG_AmvPAcACAtABwwJs0QHEAnLXAcYCc9gB1gJz2QHZAnPaAdoCc9sB2wJz3AHdAnPdAd8CAt4B4QJz3wHjAgLgAeQCc-EB5QJz4gHmAgLjAekCeeQB6gJ_5QHrAnTmAewCdOcB7QJ06AHuAnTpAe8CdOoB8QJ06wHzAgLsAfUCdO0B9wIC7gH4AnTvAfkCdPAB-gIC8QH9AoAB8gH-AoYB8wH_AnX0AYADdfUBgQN19gGCA3X3AYMDdfgBhQN1-QGHAwL6AYkDdfsBiwMC_AGMA3X9AY0Ddf4BjgMC_wGRA4cBgAKSA40BgQKTA3aCApQDdoMClQN2hAKWA3aFApcDdoYCmQN2hwKbAwKIAp0DdokCnwMCigKgA3aLAqEDdowCogMCjQKlA44BjgKmA5QB"
}
async function decodeBase64AsWasm(wasmBase64: string): Promise {
@@ -317,6 +317,56 @@ export interface PrismaClient<
* ```
*/
get oilPriceHistory(): Prisma.OilPriceHistoryDelegate;
+
+ /**
+ * `prisma.mihomeAccount`: Exposes CRUD operations for the **MihomeAccount** model.
+ * Example usage:
+ * ```ts
+ * // Fetch zero or more MihomeAccounts
+ * const mihomeAccounts = await prisma.mihomeAccount.findMany()
+ * ```
+ */
+ get mihomeAccount(): Prisma.MihomeAccountDelegate;
+
+ /**
+ * `prisma.mihomeHome`: Exposes CRUD operations for the **MihomeHome** model.
+ * Example usage:
+ * ```ts
+ * // Fetch zero or more MihomeHomes
+ * const mihomeHomes = await prisma.mihomeHome.findMany()
+ * ```
+ */
+ get mihomeHome(): Prisma.MihomeHomeDelegate;
+
+ /**
+ * `prisma.mihomeDevice`: Exposes CRUD operations for the **MihomeDevice** model.
+ * Example usage:
+ * ```ts
+ * // Fetch zero or more MihomeDevices
+ * const mihomeDevices = await prisma.mihomeDevice.findMany()
+ * ```
+ */
+ get mihomeDevice(): Prisma.MihomeDeviceDelegate;
+
+ /**
+ * `prisma.mihomeEnvSample`: Exposes CRUD operations for the **MihomeEnvSample** model.
+ * Example usage:
+ * ```ts
+ * // Fetch zero or more MihomeEnvSamples
+ * const mihomeEnvSamples = await prisma.mihomeEnvSample.findMany()
+ * ```
+ */
+ get mihomeEnvSample(): Prisma.MihomeEnvSampleDelegate;
+
+ /**
+ * `prisma.mihomeEnvHour`: Exposes CRUD operations for the **MihomeEnvHour** model.
+ * Example usage:
+ * ```ts
+ * // Fetch zero or more MihomeEnvHours
+ * const mihomeEnvHours = await prisma.mihomeEnvHour.findMany()
+ * ```
+ */
+ get mihomeEnvHour(): Prisma.MihomeEnvHourDelegate;
}
export function getPrismaClientClass(): PrismaClientConstructor {
diff --git a/generated/prisma/internal/prismaNamespace.ts b/generated/prisma/internal/prismaNamespace.ts
index 61326f2..2a1166a 100644
--- a/generated/prisma/internal/prismaNamespace.ts
+++ b/generated/prisma/internal/prismaNamespace.ts
@@ -396,7 +396,12 @@ export const ModelName = {
ServiceCheck: 'ServiceCheck',
Econ_SowInventory: 'Econ_SowInventory',
ScraperCache: 'ScraperCache',
- OilPriceHistory: 'OilPriceHistory'
+ OilPriceHistory: 'OilPriceHistory',
+ MihomeAccount: 'MihomeAccount',
+ MihomeHome: 'MihomeHome',
+ MihomeDevice: 'MihomeDevice',
+ MihomeEnvSample: 'MihomeEnvSample',
+ MihomeEnvHour: 'MihomeEnvHour'
} as const
export type ModelName = (typeof ModelName)[keyof typeof ModelName]
@@ -412,7 +417,7 @@ export type TypeMap
+ fields: Prisma.MihomeAccountFieldRefs
+ operations: {
+ findUnique: {
+ args: Prisma.MihomeAccountFindUniqueArgs
+ result: runtime.Types.Utils.PayloadToResult | null
+ }
+ findUniqueOrThrow: {
+ args: Prisma.MihomeAccountFindUniqueOrThrowArgs
+ result: runtime.Types.Utils.PayloadToResult
+ }
+ findFirst: {
+ args: Prisma.MihomeAccountFindFirstArgs
+ result: runtime.Types.Utils.PayloadToResult | null
+ }
+ findFirstOrThrow: {
+ args: Prisma.MihomeAccountFindFirstOrThrowArgs
+ result: runtime.Types.Utils.PayloadToResult
+ }
+ findMany: {
+ args: Prisma.MihomeAccountFindManyArgs
+ result: runtime.Types.Utils.PayloadToResult[]
+ }
+ create: {
+ args: Prisma.MihomeAccountCreateArgs
+ result: runtime.Types.Utils.PayloadToResult
+ }
+ createMany: {
+ args: Prisma.MihomeAccountCreateManyArgs
+ result: BatchPayload
+ }
+ delete: {
+ args: Prisma.MihomeAccountDeleteArgs
+ result: runtime.Types.Utils.PayloadToResult
+ }
+ update: {
+ args: Prisma.MihomeAccountUpdateArgs
+ result: runtime.Types.Utils.PayloadToResult
+ }
+ deleteMany: {
+ args: Prisma.MihomeAccountDeleteManyArgs
+ result: BatchPayload
+ }
+ updateMany: {
+ args: Prisma.MihomeAccountUpdateManyArgs
+ result: BatchPayload
+ }
+ upsert: {
+ args: Prisma.MihomeAccountUpsertArgs
+ result: runtime.Types.Utils.PayloadToResult
+ }
+ aggregate: {
+ args: Prisma.MihomeAccountAggregateArgs
+ result: runtime.Types.Utils.Optional
+ }
+ groupBy: {
+ args: Prisma.MihomeAccountGroupByArgs
+ result: runtime.Types.Utils.Optional[]
+ }
+ count: {
+ args: Prisma.MihomeAccountCountArgs
+ result: runtime.Types.Utils.Optional | number
+ }
+ }
+ }
+ MihomeHome: {
+ payload: Prisma.$MihomeHomePayload
+ fields: Prisma.MihomeHomeFieldRefs
+ operations: {
+ findUnique: {
+ args: Prisma.MihomeHomeFindUniqueArgs
+ result: runtime.Types.Utils.PayloadToResult | null
+ }
+ findUniqueOrThrow: {
+ args: Prisma.MihomeHomeFindUniqueOrThrowArgs
+ result: runtime.Types.Utils.PayloadToResult
+ }
+ findFirst: {
+ args: Prisma.MihomeHomeFindFirstArgs
+ result: runtime.Types.Utils.PayloadToResult | null
+ }
+ findFirstOrThrow: {
+ args: Prisma.MihomeHomeFindFirstOrThrowArgs
+ result: runtime.Types.Utils.PayloadToResult
+ }
+ findMany: {
+ args: Prisma.MihomeHomeFindManyArgs
+ result: runtime.Types.Utils.PayloadToResult[]
+ }
+ create: {
+ args: Prisma.MihomeHomeCreateArgs
+ result: runtime.Types.Utils.PayloadToResult
+ }
+ createMany: {
+ args: Prisma.MihomeHomeCreateManyArgs
+ result: BatchPayload
+ }
+ delete: {
+ args: Prisma.MihomeHomeDeleteArgs
+ result: runtime.Types.Utils.PayloadToResult
+ }
+ update: {
+ args: Prisma.MihomeHomeUpdateArgs
+ result: runtime.Types.Utils.PayloadToResult
+ }
+ deleteMany: {
+ args: Prisma.MihomeHomeDeleteManyArgs
+ result: BatchPayload
+ }
+ updateMany: {
+ args: Prisma.MihomeHomeUpdateManyArgs
+ result: BatchPayload
+ }
+ upsert: {
+ args: Prisma.MihomeHomeUpsertArgs
+ result: runtime.Types.Utils.PayloadToResult
+ }
+ aggregate: {
+ args: Prisma.MihomeHomeAggregateArgs
+ result: runtime.Types.Utils.Optional
+ }
+ groupBy: {
+ args: Prisma.MihomeHomeGroupByArgs
+ result: runtime.Types.Utils.Optional[]
+ }
+ count: {
+ args: Prisma.MihomeHomeCountArgs
+ result: runtime.Types.Utils.Optional | number
+ }
+ }
+ }
+ MihomeDevice: {
+ payload: Prisma.$MihomeDevicePayload
+ fields: Prisma.MihomeDeviceFieldRefs
+ operations: {
+ findUnique: {
+ args: Prisma.MihomeDeviceFindUniqueArgs
+ result: runtime.Types.Utils.PayloadToResult | null
+ }
+ findUniqueOrThrow: {
+ args: Prisma.MihomeDeviceFindUniqueOrThrowArgs
+ result: runtime.Types.Utils.PayloadToResult
+ }
+ findFirst: {
+ args: Prisma.MihomeDeviceFindFirstArgs
+ result: runtime.Types.Utils.PayloadToResult | null
+ }
+ findFirstOrThrow: {
+ args: Prisma.MihomeDeviceFindFirstOrThrowArgs
+ result: runtime.Types.Utils.PayloadToResult
+ }
+ findMany: {
+ args: Prisma.MihomeDeviceFindManyArgs
+ result: runtime.Types.Utils.PayloadToResult[]
+ }
+ create: {
+ args: Prisma.MihomeDeviceCreateArgs
+ result: runtime.Types.Utils.PayloadToResult
+ }
+ createMany: {
+ args: Prisma.MihomeDeviceCreateManyArgs
+ result: BatchPayload
+ }
+ delete: {
+ args: Prisma.MihomeDeviceDeleteArgs
+ result: runtime.Types.Utils.PayloadToResult
+ }
+ update: {
+ args: Prisma.MihomeDeviceUpdateArgs
+ result: runtime.Types.Utils.PayloadToResult
+ }
+ deleteMany: {
+ args: Prisma.MihomeDeviceDeleteManyArgs
+ result: BatchPayload
+ }
+ updateMany: {
+ args: Prisma.MihomeDeviceUpdateManyArgs
+ result: BatchPayload
+ }
+ upsert: {
+ args: Prisma.MihomeDeviceUpsertArgs
+ result: runtime.Types.Utils.PayloadToResult
+ }
+ aggregate: {
+ args: Prisma.MihomeDeviceAggregateArgs
+ result: runtime.Types.Utils.Optional
+ }
+ groupBy: {
+ args: Prisma.MihomeDeviceGroupByArgs
+ result: runtime.Types.Utils.Optional[]
+ }
+ count: {
+ args: Prisma.MihomeDeviceCountArgs
+ result: runtime.Types.Utils.Optional | number
+ }
+ }
+ }
+ MihomeEnvSample: {
+ payload: Prisma.$MihomeEnvSamplePayload
+ fields: Prisma.MihomeEnvSampleFieldRefs
+ operations: {
+ findUnique: {
+ args: Prisma.MihomeEnvSampleFindUniqueArgs
+ result: runtime.Types.Utils.PayloadToResult | null
+ }
+ findUniqueOrThrow: {
+ args: Prisma.MihomeEnvSampleFindUniqueOrThrowArgs
+ result: runtime.Types.Utils.PayloadToResult
+ }
+ findFirst: {
+ args: Prisma.MihomeEnvSampleFindFirstArgs
+ result: runtime.Types.Utils.PayloadToResult | null
+ }
+ findFirstOrThrow: {
+ args: Prisma.MihomeEnvSampleFindFirstOrThrowArgs
+ result: runtime.Types.Utils.PayloadToResult
+ }
+ findMany: {
+ args: Prisma.MihomeEnvSampleFindManyArgs
+ result: runtime.Types.Utils.PayloadToResult[]
+ }
+ create: {
+ args: Prisma.MihomeEnvSampleCreateArgs
+ result: runtime.Types.Utils.PayloadToResult
+ }
+ createMany: {
+ args: Prisma.MihomeEnvSampleCreateManyArgs
+ result: BatchPayload
+ }
+ delete: {
+ args: Prisma.MihomeEnvSampleDeleteArgs
+ result: runtime.Types.Utils.PayloadToResult
+ }
+ update: {
+ args: Prisma.MihomeEnvSampleUpdateArgs
+ result: runtime.Types.Utils.PayloadToResult
+ }
+ deleteMany: {
+ args: Prisma.MihomeEnvSampleDeleteManyArgs
+ result: BatchPayload
+ }
+ updateMany: {
+ args: Prisma.MihomeEnvSampleUpdateManyArgs
+ result: BatchPayload
+ }
+ upsert: {
+ args: Prisma.MihomeEnvSampleUpsertArgs
+ result: runtime.Types.Utils.PayloadToResult
+ }
+ aggregate: {
+ args: Prisma.MihomeEnvSampleAggregateArgs
+ result: runtime.Types.Utils.Optional
+ }
+ groupBy: {
+ args: Prisma.MihomeEnvSampleGroupByArgs
+ result: runtime.Types.Utils.Optional[]
+ }
+ count: {
+ args: Prisma.MihomeEnvSampleCountArgs
+ result: runtime.Types.Utils.Optional | number
+ }
+ }
+ }
+ MihomeEnvHour: {
+ payload: Prisma.$MihomeEnvHourPayload
+ fields: Prisma.MihomeEnvHourFieldRefs
+ operations: {
+ findUnique: {
+ args: Prisma.MihomeEnvHourFindUniqueArgs
+ result: runtime.Types.Utils.PayloadToResult | null
+ }
+ findUniqueOrThrow: {
+ args: Prisma.MihomeEnvHourFindUniqueOrThrowArgs
+ result: runtime.Types.Utils.PayloadToResult
+ }
+ findFirst: {
+ args: Prisma.MihomeEnvHourFindFirstArgs
+ result: runtime.Types.Utils.PayloadToResult | null
+ }
+ findFirstOrThrow: {
+ args: Prisma.MihomeEnvHourFindFirstOrThrowArgs
+ result: runtime.Types.Utils.PayloadToResult
+ }
+ findMany: {
+ args: Prisma.MihomeEnvHourFindManyArgs
+ result: runtime.Types.Utils.PayloadToResult[]
+ }
+ create: {
+ args: Prisma.MihomeEnvHourCreateArgs
+ result: runtime.Types.Utils.PayloadToResult
+ }
+ createMany: {
+ args: Prisma.MihomeEnvHourCreateManyArgs
+ result: BatchPayload
+ }
+ delete: {
+ args: Prisma.MihomeEnvHourDeleteArgs
+ result: runtime.Types.Utils.PayloadToResult
+ }
+ update: {
+ args: Prisma.MihomeEnvHourUpdateArgs
+ result: runtime.Types.Utils.PayloadToResult
+ }
+ deleteMany: {
+ args: Prisma.MihomeEnvHourDeleteManyArgs
+ result: BatchPayload
+ }
+ updateMany: {
+ args: Prisma.MihomeEnvHourUpdateManyArgs
+ result: BatchPayload
+ }
+ upsert: {
+ args: Prisma.MihomeEnvHourUpsertArgs
+ result: runtime.Types.Utils.PayloadToResult
+ }
+ aggregate: {
+ args: Prisma.MihomeEnvHourAggregateArgs
+ result: runtime.Types.Utils.Optional
+ }
+ groupBy: {
+ args: Prisma.MihomeEnvHourGroupByArgs
+ result: runtime.Types.Utils.Optional[]
+ }
+ count: {
+ args: Prisma.MihomeEnvHourCountArgs
+ result: runtime.Types.Utils.Optional | number
+ }
+ }
+ }
}
} & {
other: {
@@ -1510,6 +1845,85 @@ export const OilPriceHistoryScalarFieldEnum = {
export type OilPriceHistoryScalarFieldEnum = (typeof OilPriceHistoryScalarFieldEnum)[keyof typeof OilPriceHistoryScalarFieldEnum]
+export const MihomeAccountScalarFieldEnum = {
+ id: 'id',
+ key: 'key',
+ userId: 'userId',
+ status: 'status',
+ lastError: 'lastError',
+ updatedAt: 'updatedAt'
+} as const
+
+export type MihomeAccountScalarFieldEnum = (typeof MihomeAccountScalarFieldEnum)[keyof typeof MihomeAccountScalarFieldEnum]
+
+
+export const MihomeHomeScalarFieldEnum = {
+ id: 'id',
+ homeId: 'homeId',
+ name: 'name',
+ createdAt: 'createdAt'
+} as const
+
+export type MihomeHomeScalarFieldEnum = (typeof MihomeHomeScalarFieldEnum)[keyof typeof MihomeHomeScalarFieldEnum]
+
+
+export const MihomeDeviceScalarFieldEnum = {
+ id: 'id',
+ did: 'did',
+ homeId: 'homeId',
+ model: 'model',
+ name: 'name',
+ alias: 'alias',
+ tempSiid: 'tempSiid',
+ tempPiid: 'tempPiid',
+ humSiid: 'humSiid',
+ humPiid: 'humPiid',
+ battSiid: 'battSiid',
+ battPiid: 'battPiid',
+ battery: 'battery',
+ batteryAt: 'batteryAt',
+ enabled: 'enabled',
+ lastSyncAt: 'lastSyncAt',
+ createdAt: 'createdAt'
+} as const
+
+export type MihomeDeviceScalarFieldEnum = (typeof MihomeDeviceScalarFieldEnum)[keyof typeof MihomeDeviceScalarFieldEnum]
+
+
+export const MihomeEnvSampleScalarFieldEnum = {
+ id: 'id',
+ deviceId: 'deviceId',
+ date: 'date',
+ temperature: 'temperature',
+ humidity: 'humidity',
+ temperatureAvg: 'temperatureAvg',
+ humidityAvg: 'humidityAvg',
+ temperatureMin: 'temperatureMin',
+ temperatureMax: 'temperatureMax',
+ humidityMin: 'humidityMin',
+ humidityMax: 'humidityMax',
+ origin: 'origin',
+ sampledAt: 'sampledAt',
+ raw: 'raw',
+ createdAt: 'createdAt'
+} as const
+
+export type MihomeEnvSampleScalarFieldEnum = (typeof MihomeEnvSampleScalarFieldEnum)[keyof typeof MihomeEnvSampleScalarFieldEnum]
+
+
+export const MihomeEnvHourScalarFieldEnum = {
+ id: 'id',
+ deviceId: 'deviceId',
+ hour: 'hour',
+ temperatureAvg: 'temperatureAvg',
+ humidityAvg: 'humidityAvg',
+ raw: 'raw',
+ createdAt: 'createdAt'
+} as const
+
+export type MihomeEnvHourScalarFieldEnum = (typeof MihomeEnvHourScalarFieldEnum)[keyof typeof MihomeEnvHourScalarFieldEnum]
+
+
export const SortOrder = {
asc: 'asc',
desc: 'desc'
@@ -1678,6 +2092,42 @@ export const OilPriceHistoryOrderByRelevanceFieldEnum = {
export type OilPriceHistoryOrderByRelevanceFieldEnum = (typeof OilPriceHistoryOrderByRelevanceFieldEnum)[keyof typeof OilPriceHistoryOrderByRelevanceFieldEnum]
+export const MihomeAccountOrderByRelevanceFieldEnum = {
+ key: 'key',
+ userId: 'userId',
+ status: 'status',
+ lastError: 'lastError'
+} as const
+
+export type MihomeAccountOrderByRelevanceFieldEnum = (typeof MihomeAccountOrderByRelevanceFieldEnum)[keyof typeof MihomeAccountOrderByRelevanceFieldEnum]
+
+
+export const MihomeHomeOrderByRelevanceFieldEnum = {
+ homeId: 'homeId',
+ name: 'name'
+} as const
+
+export type MihomeHomeOrderByRelevanceFieldEnum = (typeof MihomeHomeOrderByRelevanceFieldEnum)[keyof typeof MihomeHomeOrderByRelevanceFieldEnum]
+
+
+export const MihomeDeviceOrderByRelevanceFieldEnum = {
+ did: 'did',
+ homeId: 'homeId',
+ model: 'model',
+ name: 'name',
+ alias: 'alias'
+} as const
+
+export type MihomeDeviceOrderByRelevanceFieldEnum = (typeof MihomeDeviceOrderByRelevanceFieldEnum)[keyof typeof MihomeDeviceOrderByRelevanceFieldEnum]
+
+
+export const MihomeEnvSampleOrderByRelevanceFieldEnum = {
+ origin: 'origin'
+} as const
+
+export type MihomeEnvSampleOrderByRelevanceFieldEnum = (typeof MihomeEnvSampleOrderByRelevanceFieldEnum)[keyof typeof MihomeEnvSampleOrderByRelevanceFieldEnum]
+
+
/**
* Field references
@@ -1847,6 +2297,11 @@ export type GlobalOmitConfig = {
econ_SowInventory?: Prisma.Econ_SowInventoryOmit
scraperCache?: Prisma.ScraperCacheOmit
oilPriceHistory?: Prisma.OilPriceHistoryOmit
+ mihomeAccount?: Prisma.MihomeAccountOmit
+ mihomeHome?: Prisma.MihomeHomeOmit
+ mihomeDevice?: Prisma.MihomeDeviceOmit
+ mihomeEnvSample?: Prisma.MihomeEnvSampleOmit
+ mihomeEnvHour?: Prisma.MihomeEnvHourOmit
}
/* Types for Logging */
diff --git a/generated/prisma/internal/prismaNamespaceBrowser.ts b/generated/prisma/internal/prismaNamespaceBrowser.ts
index 957cf8e..96969ba 100644
--- a/generated/prisma/internal/prismaNamespaceBrowser.ts
+++ b/generated/prisma/internal/prismaNamespaceBrowser.ts
@@ -63,7 +63,12 @@ export const ModelName = {
ServiceCheck: 'ServiceCheck',
Econ_SowInventory: 'Econ_SowInventory',
ScraperCache: 'ScraperCache',
- OilPriceHistory: 'OilPriceHistory'
+ OilPriceHistory: 'OilPriceHistory',
+ MihomeAccount: 'MihomeAccount',
+ MihomeHome: 'MihomeHome',
+ MihomeDevice: 'MihomeDevice',
+ MihomeEnvSample: 'MihomeEnvSample',
+ MihomeEnvHour: 'MihomeEnvHour'
} as const
export type ModelName = (typeof ModelName)[keyof typeof ModelName]
@@ -279,6 +284,85 @@ export const OilPriceHistoryScalarFieldEnum = {
export type OilPriceHistoryScalarFieldEnum = (typeof OilPriceHistoryScalarFieldEnum)[keyof typeof OilPriceHistoryScalarFieldEnum]
+export const MihomeAccountScalarFieldEnum = {
+ id: 'id',
+ key: 'key',
+ userId: 'userId',
+ status: 'status',
+ lastError: 'lastError',
+ updatedAt: 'updatedAt'
+} as const
+
+export type MihomeAccountScalarFieldEnum = (typeof MihomeAccountScalarFieldEnum)[keyof typeof MihomeAccountScalarFieldEnum]
+
+
+export const MihomeHomeScalarFieldEnum = {
+ id: 'id',
+ homeId: 'homeId',
+ name: 'name',
+ createdAt: 'createdAt'
+} as const
+
+export type MihomeHomeScalarFieldEnum = (typeof MihomeHomeScalarFieldEnum)[keyof typeof MihomeHomeScalarFieldEnum]
+
+
+export const MihomeDeviceScalarFieldEnum = {
+ id: 'id',
+ did: 'did',
+ homeId: 'homeId',
+ model: 'model',
+ name: 'name',
+ alias: 'alias',
+ tempSiid: 'tempSiid',
+ tempPiid: 'tempPiid',
+ humSiid: 'humSiid',
+ humPiid: 'humPiid',
+ battSiid: 'battSiid',
+ battPiid: 'battPiid',
+ battery: 'battery',
+ batteryAt: 'batteryAt',
+ enabled: 'enabled',
+ lastSyncAt: 'lastSyncAt',
+ createdAt: 'createdAt'
+} as const
+
+export type MihomeDeviceScalarFieldEnum = (typeof MihomeDeviceScalarFieldEnum)[keyof typeof MihomeDeviceScalarFieldEnum]
+
+
+export const MihomeEnvSampleScalarFieldEnum = {
+ id: 'id',
+ deviceId: 'deviceId',
+ date: 'date',
+ temperature: 'temperature',
+ humidity: 'humidity',
+ temperatureAvg: 'temperatureAvg',
+ humidityAvg: 'humidityAvg',
+ temperatureMin: 'temperatureMin',
+ temperatureMax: 'temperatureMax',
+ humidityMin: 'humidityMin',
+ humidityMax: 'humidityMax',
+ origin: 'origin',
+ sampledAt: 'sampledAt',
+ raw: 'raw',
+ createdAt: 'createdAt'
+} as const
+
+export type MihomeEnvSampleScalarFieldEnum = (typeof MihomeEnvSampleScalarFieldEnum)[keyof typeof MihomeEnvSampleScalarFieldEnum]
+
+
+export const MihomeEnvHourScalarFieldEnum = {
+ id: 'id',
+ deviceId: 'deviceId',
+ hour: 'hour',
+ temperatureAvg: 'temperatureAvg',
+ humidityAvg: 'humidityAvg',
+ raw: 'raw',
+ createdAt: 'createdAt'
+} as const
+
+export type MihomeEnvHourScalarFieldEnum = (typeof MihomeEnvHourScalarFieldEnum)[keyof typeof MihomeEnvHourScalarFieldEnum]
+
+
export const SortOrder = {
asc: 'asc',
desc: 'desc'
@@ -446,3 +530,39 @@ export const OilPriceHistoryOrderByRelevanceFieldEnum = {
export type OilPriceHistoryOrderByRelevanceFieldEnum = (typeof OilPriceHistoryOrderByRelevanceFieldEnum)[keyof typeof OilPriceHistoryOrderByRelevanceFieldEnum]
+
+export const MihomeAccountOrderByRelevanceFieldEnum = {
+ key: 'key',
+ userId: 'userId',
+ status: 'status',
+ lastError: 'lastError'
+} as const
+
+export type MihomeAccountOrderByRelevanceFieldEnum = (typeof MihomeAccountOrderByRelevanceFieldEnum)[keyof typeof MihomeAccountOrderByRelevanceFieldEnum]
+
+
+export const MihomeHomeOrderByRelevanceFieldEnum = {
+ homeId: 'homeId',
+ name: 'name'
+} as const
+
+export type MihomeHomeOrderByRelevanceFieldEnum = (typeof MihomeHomeOrderByRelevanceFieldEnum)[keyof typeof MihomeHomeOrderByRelevanceFieldEnum]
+
+
+export const MihomeDeviceOrderByRelevanceFieldEnum = {
+ did: 'did',
+ homeId: 'homeId',
+ model: 'model',
+ name: 'name',
+ alias: 'alias'
+} as const
+
+export type MihomeDeviceOrderByRelevanceFieldEnum = (typeof MihomeDeviceOrderByRelevanceFieldEnum)[keyof typeof MihomeDeviceOrderByRelevanceFieldEnum]
+
+
+export const MihomeEnvSampleOrderByRelevanceFieldEnum = {
+ origin: 'origin'
+} as const
+
+export type MihomeEnvSampleOrderByRelevanceFieldEnum = (typeof MihomeEnvSampleOrderByRelevanceFieldEnum)[keyof typeof MihomeEnvSampleOrderByRelevanceFieldEnum]
+
diff --git a/generated/prisma/models.ts b/generated/prisma/models.ts
index 2396f9c..05ae935 100644
--- a/generated/prisma/models.ts
+++ b/generated/prisma/models.ts
@@ -21,4 +21,9 @@ export type * from './models/ServiceCheck.ts'
export type * from './models/Econ_SowInventory.ts'
export type * from './models/ScraperCache.ts'
export type * from './models/OilPriceHistory.ts'
+export type * from './models/MihomeAccount.ts'
+export type * from './models/MihomeHome.ts'
+export type * from './models/MihomeDevice.ts'
+export type * from './models/MihomeEnvSample.ts'
+export type * from './models/MihomeEnvHour.ts'
export type * from './commonInputTypes.ts'
\ No newline at end of file
diff --git a/generated/prisma/models/MihomeAccount.ts b/generated/prisma/models/MihomeAccount.ts
new file mode 100644
index 0000000..e0452c3
--- /dev/null
+++ b/generated/prisma/models/MihomeAccount.ts
@@ -0,0 +1,1110 @@
+
+/* !!! This is code generated by Prisma. Do not edit directly. !!! */
+/* eslint-disable */
+// biome-ignore-all lint: generated file
+// @ts-nocheck
+/*
+ * This file exports the `MihomeAccount` model and its related types.
+ *
+ * 🟢 You can import this file directly.
+ */
+import type * as runtime from "@prisma/client/runtime/client"
+import type * as $Enums from "../enums.ts"
+import type * as Prisma from "../internal/prismaNamespace.ts"
+
+/**
+ * Model MihomeAccount
+ *
+ */
+export type MihomeAccountModel = runtime.Types.Result.DefaultSelection
+
+export type AggregateMihomeAccount = {
+ _count: MihomeAccountCountAggregateOutputType | null
+ _avg: MihomeAccountAvgAggregateOutputType | null
+ _sum: MihomeAccountSumAggregateOutputType | null
+ _min: MihomeAccountMinAggregateOutputType | null
+ _max: MihomeAccountMaxAggregateOutputType | null
+}
+
+export type MihomeAccountAvgAggregateOutputType = {
+ id: number | null
+}
+
+export type MihomeAccountSumAggregateOutputType = {
+ id: number | null
+}
+
+export type MihomeAccountMinAggregateOutputType = {
+ id: number | null
+ key: string | null
+ userId: string | null
+ status: string | null
+ lastError: string | null
+ updatedAt: Date | null
+}
+
+export type MihomeAccountMaxAggregateOutputType = {
+ id: number | null
+ key: string | null
+ userId: string | null
+ status: string | null
+ lastError: string | null
+ updatedAt: Date | null
+}
+
+export type MihomeAccountCountAggregateOutputType = {
+ id: number
+ key: number
+ userId: number
+ status: number
+ lastError: number
+ updatedAt: number
+ _all: number
+}
+
+
+export type MihomeAccountAvgAggregateInputType = {
+ id?: true
+}
+
+export type MihomeAccountSumAggregateInputType = {
+ id?: true
+}
+
+export type MihomeAccountMinAggregateInputType = {
+ id?: true
+ key?: true
+ userId?: true
+ status?: true
+ lastError?: true
+ updatedAt?: true
+}
+
+export type MihomeAccountMaxAggregateInputType = {
+ id?: true
+ key?: true
+ userId?: true
+ status?: true
+ lastError?: true
+ updatedAt?: true
+}
+
+export type MihomeAccountCountAggregateInputType = {
+ id?: true
+ key?: true
+ userId?: true
+ status?: true
+ lastError?: true
+ updatedAt?: true
+ _all?: true
+}
+
+export type MihomeAccountAggregateArgs = {
+ /**
+ * Filter which MihomeAccount to aggregate.
+ */
+ where?: Prisma.MihomeAccountWhereInput
+ /**
+ * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
+ *
+ * Determine the order of MihomeAccounts to fetch.
+ */
+ orderBy?: Prisma.MihomeAccountOrderByWithRelationInput | Prisma.MihomeAccountOrderByWithRelationInput[]
+ /**
+ * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
+ *
+ * Sets the start position
+ */
+ cursor?: Prisma.MihomeAccountWhereUniqueInput
+ /**
+ * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
+ *
+ * Take `±n` MihomeAccounts from the position of the cursor.
+ */
+ take?: number
+ /**
+ * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
+ *
+ * Skip the first `n` MihomeAccounts.
+ */
+ skip?: number
+ /**
+ * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
+ *
+ * Count returned MihomeAccounts
+ **/
+ _count?: true | MihomeAccountCountAggregateInputType
+ /**
+ * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
+ *
+ * Select which fields to average
+ **/
+ _avg?: MihomeAccountAvgAggregateInputType
+ /**
+ * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
+ *
+ * Select which fields to sum
+ **/
+ _sum?: MihomeAccountSumAggregateInputType
+ /**
+ * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
+ *
+ * Select which fields to find the minimum value
+ **/
+ _min?: MihomeAccountMinAggregateInputType
+ /**
+ * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
+ *
+ * Select which fields to find the maximum value
+ **/
+ _max?: MihomeAccountMaxAggregateInputType
+}
+
+export type GetMihomeAccountAggregateType = {
+ [P in keyof T & keyof AggregateMihomeAccount]: P extends '_count' | 'count'
+ ? T[P] extends true
+ ? number
+ : Prisma.GetScalarType
+ : Prisma.GetScalarType
+}
+
+
+
+
+export type MihomeAccountGroupByArgs = {
+ where?: Prisma.MihomeAccountWhereInput
+ orderBy?: Prisma.MihomeAccountOrderByWithAggregationInput | Prisma.MihomeAccountOrderByWithAggregationInput[]
+ by: Prisma.MihomeAccountScalarFieldEnum[] | Prisma.MihomeAccountScalarFieldEnum
+ having?: Prisma.MihomeAccountScalarWhereWithAggregatesInput
+ take?: number
+ skip?: number
+ _count?: MihomeAccountCountAggregateInputType | true
+ _avg?: MihomeAccountAvgAggregateInputType
+ _sum?: MihomeAccountSumAggregateInputType
+ _min?: MihomeAccountMinAggregateInputType
+ _max?: MihomeAccountMaxAggregateInputType
+}
+
+export type MihomeAccountGroupByOutputType = {
+ id: number
+ key: string
+ userId: string
+ status: string
+ lastError: string
+ updatedAt: Date
+ _count: MihomeAccountCountAggregateOutputType | null
+ _avg: MihomeAccountAvgAggregateOutputType | null
+ _sum: MihomeAccountSumAggregateOutputType | null
+ _min: MihomeAccountMinAggregateOutputType | null
+ _max: MihomeAccountMaxAggregateOutputType | null
+}
+
+export type GetMihomeAccountGroupByPayload = Prisma.PrismaPromise<
+ Array<
+ Prisma.PickEnumerable &
+ {
+ [P in ((keyof T) & (keyof MihomeAccountGroupByOutputType))]: P extends '_count'
+ ? T[P] extends boolean
+ ? number
+ : Prisma.GetScalarType
+ : Prisma.GetScalarType
+ }
+ >
+ >
+
+
+
+export type MihomeAccountWhereInput = {
+ AND?: Prisma.MihomeAccountWhereInput | Prisma.MihomeAccountWhereInput[]
+ OR?: Prisma.MihomeAccountWhereInput[]
+ NOT?: Prisma.MihomeAccountWhereInput | Prisma.MihomeAccountWhereInput[]
+ id?: Prisma.IntFilter<"MihomeAccount"> | number
+ key?: Prisma.StringFilter<"MihomeAccount"> | string
+ userId?: Prisma.StringFilter<"MihomeAccount"> | string
+ status?: Prisma.StringFilter<"MihomeAccount"> | string
+ lastError?: Prisma.StringFilter<"MihomeAccount"> | string
+ updatedAt?: Prisma.DateTimeFilter<"MihomeAccount"> | Date | string
+}
+
+export type MihomeAccountOrderByWithRelationInput = {
+ id?: Prisma.SortOrder
+ key?: Prisma.SortOrder
+ userId?: Prisma.SortOrder
+ status?: Prisma.SortOrder
+ lastError?: Prisma.SortOrder
+ updatedAt?: Prisma.SortOrder
+ _relevance?: Prisma.MihomeAccountOrderByRelevanceInput
+}
+
+export type MihomeAccountWhereUniqueInput = Prisma.AtLeast<{
+ id?: number
+ key?: string
+ AND?: Prisma.MihomeAccountWhereInput | Prisma.MihomeAccountWhereInput[]
+ OR?: Prisma.MihomeAccountWhereInput[]
+ NOT?: Prisma.MihomeAccountWhereInput | Prisma.MihomeAccountWhereInput[]
+ userId?: Prisma.StringFilter<"MihomeAccount"> | string
+ status?: Prisma.StringFilter<"MihomeAccount"> | string
+ lastError?: Prisma.StringFilter<"MihomeAccount"> | string
+ updatedAt?: Prisma.DateTimeFilter<"MihomeAccount"> | Date | string
+}, "id" | "key">
+
+export type MihomeAccountOrderByWithAggregationInput = {
+ id?: Prisma.SortOrder
+ key?: Prisma.SortOrder
+ userId?: Prisma.SortOrder
+ status?: Prisma.SortOrder
+ lastError?: Prisma.SortOrder
+ updatedAt?: Prisma.SortOrder
+ _count?: Prisma.MihomeAccountCountOrderByAggregateInput
+ _avg?: Prisma.MihomeAccountAvgOrderByAggregateInput
+ _max?: Prisma.MihomeAccountMaxOrderByAggregateInput
+ _min?: Prisma.MihomeAccountMinOrderByAggregateInput
+ _sum?: Prisma.MihomeAccountSumOrderByAggregateInput
+}
+
+export type MihomeAccountScalarWhereWithAggregatesInput = {
+ AND?: Prisma.MihomeAccountScalarWhereWithAggregatesInput | Prisma.MihomeAccountScalarWhereWithAggregatesInput[]
+ OR?: Prisma.MihomeAccountScalarWhereWithAggregatesInput[]
+ NOT?: Prisma.MihomeAccountScalarWhereWithAggregatesInput | Prisma.MihomeAccountScalarWhereWithAggregatesInput[]
+ id?: Prisma.IntWithAggregatesFilter<"MihomeAccount"> | number
+ key?: Prisma.StringWithAggregatesFilter<"MihomeAccount"> | string
+ userId?: Prisma.StringWithAggregatesFilter<"MihomeAccount"> | string
+ status?: Prisma.StringWithAggregatesFilter<"MihomeAccount"> | string
+ lastError?: Prisma.StringWithAggregatesFilter<"MihomeAccount"> | string
+ updatedAt?: Prisma.DateTimeWithAggregatesFilter<"MihomeAccount"> | Date | string
+}
+
+export type MihomeAccountCreateInput = {
+ key?: string
+ userId?: string
+ status?: string
+ lastError?: string
+ updatedAt?: Date | string
+}
+
+export type MihomeAccountUncheckedCreateInput = {
+ id?: number
+ key?: string
+ userId?: string
+ status?: string
+ lastError?: string
+ updatedAt?: Date | string
+}
+
+export type MihomeAccountUpdateInput = {
+ key?: Prisma.StringFieldUpdateOperationsInput | string
+ userId?: Prisma.StringFieldUpdateOperationsInput | string
+ status?: Prisma.StringFieldUpdateOperationsInput | string
+ lastError?: Prisma.StringFieldUpdateOperationsInput | string
+ updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
+}
+
+export type MihomeAccountUncheckedUpdateInput = {
+ id?: Prisma.IntFieldUpdateOperationsInput | number
+ key?: Prisma.StringFieldUpdateOperationsInput | string
+ userId?: Prisma.StringFieldUpdateOperationsInput | string
+ status?: Prisma.StringFieldUpdateOperationsInput | string
+ lastError?: Prisma.StringFieldUpdateOperationsInput | string
+ updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
+}
+
+export type MihomeAccountCreateManyInput = {
+ id?: number
+ key?: string
+ userId?: string
+ status?: string
+ lastError?: string
+ updatedAt?: Date | string
+}
+
+export type MihomeAccountUpdateManyMutationInput = {
+ key?: Prisma.StringFieldUpdateOperationsInput | string
+ userId?: Prisma.StringFieldUpdateOperationsInput | string
+ status?: Prisma.StringFieldUpdateOperationsInput | string
+ lastError?: Prisma.StringFieldUpdateOperationsInput | string
+ updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
+}
+
+export type MihomeAccountUncheckedUpdateManyInput = {
+ id?: Prisma.IntFieldUpdateOperationsInput | number
+ key?: Prisma.StringFieldUpdateOperationsInput | string
+ userId?: Prisma.StringFieldUpdateOperationsInput | string
+ status?: Prisma.StringFieldUpdateOperationsInput | string
+ lastError?: Prisma.StringFieldUpdateOperationsInput | string
+ updatedAt?: Prisma.DateTimeFieldUpdateOperationsInput | Date | string
+}
+
+export type MihomeAccountOrderByRelevanceInput = {
+ fields: Prisma.MihomeAccountOrderByRelevanceFieldEnum | Prisma.MihomeAccountOrderByRelevanceFieldEnum[]
+ sort: Prisma.SortOrder
+ search: string
+}
+
+export type MihomeAccountCountOrderByAggregateInput = {
+ id?: Prisma.SortOrder
+ key?: Prisma.SortOrder
+ userId?: Prisma.SortOrder
+ status?: Prisma.SortOrder
+ lastError?: Prisma.SortOrder
+ updatedAt?: Prisma.SortOrder
+}
+
+export type MihomeAccountAvgOrderByAggregateInput = {
+ id?: Prisma.SortOrder
+}
+
+export type MihomeAccountMaxOrderByAggregateInput = {
+ id?: Prisma.SortOrder
+ key?: Prisma.SortOrder
+ userId?: Prisma.SortOrder
+ status?: Prisma.SortOrder
+ lastError?: Prisma.SortOrder
+ updatedAt?: Prisma.SortOrder
+}
+
+export type MihomeAccountMinOrderByAggregateInput = {
+ id?: Prisma.SortOrder
+ key?: Prisma.SortOrder
+ userId?: Prisma.SortOrder
+ status?: Prisma.SortOrder
+ lastError?: Prisma.SortOrder
+ updatedAt?: Prisma.SortOrder
+}
+
+export type MihomeAccountSumOrderByAggregateInput = {
+ id?: Prisma.SortOrder
+}
+
+
+
+export type MihomeAccountSelect = runtime.Types.Extensions.GetSelect<{
+ id?: boolean
+ key?: boolean
+ userId?: boolean
+ status?: boolean
+ lastError?: boolean
+ updatedAt?: boolean
+}, ExtArgs["result"]["mihomeAccount"]>
+
+
+
+export type MihomeAccountSelectScalar = {
+ id?: boolean
+ key?: boolean
+ userId?: boolean
+ status?: boolean
+ lastError?: boolean
+ updatedAt?: boolean
+}
+
+export type MihomeAccountOmit = runtime.Types.Extensions.GetOmit<"id" | "key" | "userId" | "status" | "lastError" | "updatedAt", ExtArgs["result"]["mihomeAccount"]>
+
+export type $MihomeAccountPayload = {
+ name: "MihomeAccount"
+ objects: {}
+ scalars: runtime.Types.Extensions.GetPayloadResult<{
+ id: number
+ key: string
+ userId: string
+ status: string
+ lastError: string
+ updatedAt: Date
+ }, ExtArgs["result"]["mihomeAccount"]>
+ composites: {}
+}
+
+export type MihomeAccountGetPayload = runtime.Types.Result.GetResult
+
+export type MihomeAccountCountArgs =
+ Omit & {
+ select?: MihomeAccountCountAggregateInputType | true
+ }
+
+export interface MihomeAccountDelegate {
+ [K: symbol]: { types: Prisma.TypeMap['model']['MihomeAccount'], meta: { name: 'MihomeAccount' } }
+ /**
+ * Find zero or one MihomeAccount that matches the filter.
+ * @param {MihomeAccountFindUniqueArgs} args - Arguments to find a MihomeAccount
+ * @example
+ * // Get one MihomeAccount
+ * const mihomeAccount = await prisma.mihomeAccount.findUnique({
+ * where: {
+ * // ... provide filter here
+ * }
+ * })
+ */
+ findUnique(args: Prisma.SelectSubset>): Prisma.Prisma__MihomeAccountClient, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>
+
+ /**
+ * Find one MihomeAccount that matches the filter or throw an error with `error.code='P2025'`
+ * if no matches were found.
+ * @param {MihomeAccountFindUniqueOrThrowArgs} args - Arguments to find a MihomeAccount
+ * @example
+ * // Get one MihomeAccount
+ * const mihomeAccount = await prisma.mihomeAccount.findUniqueOrThrow({
+ * where: {
+ * // ... provide filter here
+ * }
+ * })
+ */
+ findUniqueOrThrow(args: Prisma.SelectSubset>): Prisma.Prisma__MihomeAccountClient, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>
+
+ /**
+ * Find the first MihomeAccount that matches the filter.
+ * Note, that providing `undefined` is treated as the value not being there.
+ * Read more here: https://pris.ly/d/null-undefined
+ * @param {MihomeAccountFindFirstArgs} args - Arguments to find a MihomeAccount
+ * @example
+ * // Get one MihomeAccount
+ * const mihomeAccount = await prisma.mihomeAccount.findFirst({
+ * where: {
+ * // ... provide filter here
+ * }
+ * })
+ */
+ findFirst(args?: Prisma.SelectSubset>): Prisma.Prisma__MihomeAccountClient, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>
+
+ /**
+ * Find the first MihomeAccount that matches the filter or
+ * throw `PrismaKnownClientError` with `P2025` code if no matches were found.
+ * Note, that providing `undefined` is treated as the value not being there.
+ * Read more here: https://pris.ly/d/null-undefined
+ * @param {MihomeAccountFindFirstOrThrowArgs} args - Arguments to find a MihomeAccount
+ * @example
+ * // Get one MihomeAccount
+ * const mihomeAccount = await prisma.mihomeAccount.findFirstOrThrow({
+ * where: {
+ * // ... provide filter here
+ * }
+ * })
+ */
+ findFirstOrThrow(args?: Prisma.SelectSubset>): Prisma.Prisma__MihomeAccountClient, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>
+
+ /**
+ * Find zero or more MihomeAccounts that matches the filter.
+ * Note, that providing `undefined` is treated as the value not being there.
+ * Read more here: https://pris.ly/d/null-undefined
+ * @param {MihomeAccountFindManyArgs} args - Arguments to filter and select certain fields only.
+ * @example
+ * // Get all MihomeAccounts
+ * const mihomeAccounts = await prisma.mihomeAccount.findMany()
+ *
+ * // Get first 10 MihomeAccounts
+ * const mihomeAccounts = await prisma.mihomeAccount.findMany({ take: 10 })
+ *
+ * // Only select the `id`
+ * const mihomeAccountWithIdOnly = await prisma.mihomeAccount.findMany({ select: { id: true } })
+ *
+ */
+ findMany(args?: Prisma.SelectSubset>): Prisma.PrismaPromise, T, "findMany", GlobalOmitOptions>>
+
+ /**
+ * Create a MihomeAccount.
+ * @param {MihomeAccountCreateArgs} args - Arguments to create a MihomeAccount.
+ * @example
+ * // Create one MihomeAccount
+ * const MihomeAccount = await prisma.mihomeAccount.create({
+ * data: {
+ * // ... data to create a MihomeAccount
+ * }
+ * })
+ *
+ */
+ create(args: Prisma.SelectSubset>): Prisma.Prisma__MihomeAccountClient, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>
+
+ /**
+ * Create many MihomeAccounts.
+ * @param {MihomeAccountCreateManyArgs} args - Arguments to create many MihomeAccounts.
+ * @example
+ * // Create many MihomeAccounts
+ * const mihomeAccount = await prisma.mihomeAccount.createMany({
+ * data: [
+ * // ... provide data here
+ * ]
+ * })
+ *
+ */
+ createMany(args?: Prisma.SelectSubset>): Prisma.PrismaPromise
+
+ /**
+ * Delete a MihomeAccount.
+ * @param {MihomeAccountDeleteArgs} args - Arguments to delete one MihomeAccount.
+ * @example
+ * // Delete one MihomeAccount
+ * const MihomeAccount = await prisma.mihomeAccount.delete({
+ * where: {
+ * // ... filter to delete one MihomeAccount
+ * }
+ * })
+ *
+ */
+ delete(args: Prisma.SelectSubset>): Prisma.Prisma__MihomeAccountClient, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>
+
+ /**
+ * Update one MihomeAccount.
+ * @param {MihomeAccountUpdateArgs} args - Arguments to update one MihomeAccount.
+ * @example
+ * // Update one MihomeAccount
+ * const mihomeAccount = await prisma.mihomeAccount.update({
+ * where: {
+ * // ... provide filter here
+ * },
+ * data: {
+ * // ... provide data here
+ * }
+ * })
+ *
+ */
+ update(args: Prisma.SelectSubset>): Prisma.Prisma__MihomeAccountClient, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>
+
+ /**
+ * Delete zero or more MihomeAccounts.
+ * @param {MihomeAccountDeleteManyArgs} args - Arguments to filter MihomeAccounts to delete.
+ * @example
+ * // Delete a few MihomeAccounts
+ * const { count } = await prisma.mihomeAccount.deleteMany({
+ * where: {
+ * // ... provide filter here
+ * }
+ * })
+ *
+ */
+ deleteMany(args?: Prisma.SelectSubset>): Prisma.PrismaPromise
+
+ /**
+ * Update zero or more MihomeAccounts.
+ * Note, that providing `undefined` is treated as the value not being there.
+ * Read more here: https://pris.ly/d/null-undefined
+ * @param {MihomeAccountUpdateManyArgs} args - Arguments to update one or more rows.
+ * @example
+ * // Update many MihomeAccounts
+ * const mihomeAccount = await prisma.mihomeAccount.updateMany({
+ * where: {
+ * // ... provide filter here
+ * },
+ * data: {
+ * // ... provide data here
+ * }
+ * })
+ *
+ */
+ updateMany(args: Prisma.SelectSubset>): Prisma.PrismaPromise
+
+ /**
+ * Create or update one MihomeAccount.
+ * @param {MihomeAccountUpsertArgs} args - Arguments to update or create a MihomeAccount.
+ * @example
+ * // Update or create a MihomeAccount
+ * const mihomeAccount = await prisma.mihomeAccount.upsert({
+ * create: {
+ * // ... data to create a MihomeAccount
+ * },
+ * update: {
+ * // ... in case it already exists, update
+ * },
+ * where: {
+ * // ... the filter for the MihomeAccount we want to update
+ * }
+ * })
+ */
+ upsert(args: Prisma.SelectSubset>): Prisma.Prisma__MihomeAccountClient, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>
+
+
+ /**
+ * Count the number of MihomeAccounts.
+ * Note, that providing `undefined` is treated as the value not being there.
+ * Read more here: https://pris.ly/d/null-undefined
+ * @param {MihomeAccountCountArgs} args - Arguments to filter MihomeAccounts to count.
+ * @example
+ * // Count the number of MihomeAccounts
+ * const count = await prisma.mihomeAccount.count({
+ * where: {
+ * // ... the filter for the MihomeAccounts we want to count
+ * }
+ * })
+ **/
+ count(
+ args?: Prisma.Subset,
+ ): Prisma.PrismaPromise<
+ T extends runtime.Types.Utils.Record<'select', any>
+ ? T['select'] extends true
+ ? number
+ : Prisma.GetScalarType
+ : number
+ >
+
+ /**
+ * Allows you to perform aggregations operations on a MihomeAccount.
+ * Note, that providing `undefined` is treated as the value not being there.
+ * Read more here: https://pris.ly/d/null-undefined
+ * @param {MihomeAccountAggregateArgs} args - Select which aggregations you would like to apply and on what fields.
+ * @example
+ * // Ordered by age ascending
+ * // Where email contains prisma.io
+ * // Limited to the 10 users
+ * const aggregations = await prisma.user.aggregate({
+ * _avg: {
+ * age: true,
+ * },
+ * where: {
+ * email: {
+ * contains: "prisma.io",
+ * },
+ * },
+ * orderBy: {
+ * age: "asc",
+ * },
+ * take: 10,
+ * })
+ **/
+ aggregate(args: Prisma.Subset): Prisma.PrismaPromise>
+
+ /**
+ * Group by MihomeAccount.
+ * Note, that providing `undefined` is treated as the value not being there.
+ * Read more here: https://pris.ly/d/null-undefined
+ * @param {MihomeAccountGroupByArgs} args - Group by arguments.
+ * @example
+ * // Group by city, order by createdAt, get count
+ * const result = await prisma.user.groupBy({
+ * by: ['city', 'createdAt'],
+ * orderBy: {
+ * createdAt: true
+ * },
+ * _count: {
+ * _all: true
+ * },
+ * })
+ *
+ **/
+ groupBy<
+ T extends MihomeAccountGroupByArgs,
+ HasSelectOrTake extends Prisma.Or<
+ Prisma.Extends<'skip', Prisma.Keys>,
+ Prisma.Extends<'take', Prisma.Keys>
+ >,
+ OrderByArg extends Prisma.True extends HasSelectOrTake
+ ? { orderBy: MihomeAccountGroupByArgs['orderBy'] }
+ : { orderBy?: MihomeAccountGroupByArgs['orderBy'] },
+ OrderFields extends Prisma.ExcludeUnderscoreKeys>>,
+ ByFields extends Prisma.MaybeTupleToUnion,
+ ByValid extends Prisma.Has,
+ HavingFields extends Prisma.GetHavingFields,
+ HavingValid extends Prisma.Has,
+ ByEmpty extends T['by'] extends never[] ? Prisma.True : Prisma.False,
+ InputErrors extends ByEmpty extends Prisma.True
+ ? `Error: "by" must not be empty.`
+ : HavingValid extends Prisma.False
+ ? {
+ [P in HavingFields]: P extends ByFields
+ ? never
+ : P extends string
+ ? `Error: Field "${P}" used in "having" needs to be provided in "by".`
+ : [
+ Error,
+ 'Field ',
+ P,
+ ` in "having" needs to be provided in "by"`,
+ ]
+ }[HavingFields]
+ : 'take' extends Prisma.Keys
+ ? 'orderBy' extends Prisma.Keys
+ ? ByValid extends Prisma.True
+ ? {}
+ : {
+ [P in OrderFields]: P extends ByFields
+ ? never
+ : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
+ }[OrderFields]
+ : 'Error: If you provide "take", you also need to provide "orderBy"'
+ : 'skip' extends Prisma.Keys
+ ? 'orderBy' extends Prisma.Keys
+ ? ByValid extends Prisma.True
+ ? {}
+ : {
+ [P in OrderFields]: P extends ByFields
+ ? never
+ : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
+ }[OrderFields]
+ : 'Error: If you provide "skip", you also need to provide "orderBy"'
+ : ByValid extends Prisma.True
+ ? {}
+ : {
+ [P in OrderFields]: P extends ByFields
+ ? never
+ : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
+ }[OrderFields]
+ >(args: Prisma.SubsetIntersection & InputErrors): {} extends InputErrors ? GetMihomeAccountGroupByPayload : Prisma.PrismaPromise
+/**
+ * Fields of the MihomeAccount model
+ */
+readonly fields: MihomeAccountFieldRefs;
+}
+
+/**
+ * The delegate class that acts as a "Promise-like" for MihomeAccount.
+ * Why is this prefixed with `Prisma__`?
+ * Because we want to prevent naming conflicts as mentioned in
+ * https://github.com/prisma/prisma-client-js/issues/707
+ */
+export interface Prisma__MihomeAccountClient extends Prisma.PrismaPromise {
+ readonly [Symbol.toStringTag]: "PrismaPromise"
+ /**
+ * Attaches callbacks for the resolution and/or rejection of the Promise.
+ * @param onfulfilled The callback to execute when the Promise is resolved.
+ * @param onrejected The callback to execute when the Promise is rejected.
+ * @returns A Promise for the completion of which ever callback is executed.
+ */
+ then(onfulfilled?: ((value: T) => TResult1 | PromiseLike) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike) | undefined | null): runtime.Types.Utils.JsPromise
+ /**
+ * Attaches a callback for only the rejection of the Promise.
+ * @param onrejected The callback to execute when the Promise is rejected.
+ * @returns A Promise for the completion of the callback.
+ */
+ catch(onrejected?: ((reason: any) => TResult | PromiseLike) | undefined | null): runtime.Types.Utils.JsPromise
+ /**
+ * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The
+ * resolved value cannot be modified from the callback.
+ * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).
+ * @returns A Promise for the completion of the callback.
+ */
+ finally(onfinally?: (() => void) | undefined | null): runtime.Types.Utils.JsPromise
+}
+
+
+
+
+/**
+ * Fields of the MihomeAccount model
+ */
+export interface MihomeAccountFieldRefs {
+ readonly id: Prisma.FieldRef<"MihomeAccount", 'Int'>
+ readonly key: Prisma.FieldRef<"MihomeAccount", 'String'>
+ readonly userId: Prisma.FieldRef<"MihomeAccount", 'String'>
+ readonly status: Prisma.FieldRef<"MihomeAccount", 'String'>
+ readonly lastError: Prisma.FieldRef<"MihomeAccount", 'String'>
+ readonly updatedAt: Prisma.FieldRef<"MihomeAccount", 'DateTime'>
+}
+
+
+// Custom InputTypes
+/**
+ * MihomeAccount findUnique
+ */
+export type MihomeAccountFindUniqueArgs = {
+ /**
+ * Select specific fields to fetch from the MihomeAccount
+ */
+ select?: Prisma.MihomeAccountSelect | null
+ /**
+ * Omit specific fields from the MihomeAccount
+ */
+ omit?: Prisma.MihomeAccountOmit | null
+ /**
+ * Filter, which MihomeAccount to fetch.
+ */
+ where: Prisma.MihomeAccountWhereUniqueInput
+}
+
+/**
+ * MihomeAccount findUniqueOrThrow
+ */
+export type MihomeAccountFindUniqueOrThrowArgs = {
+ /**
+ * Select specific fields to fetch from the MihomeAccount
+ */
+ select?: Prisma.MihomeAccountSelect | null
+ /**
+ * Omit specific fields from the MihomeAccount
+ */
+ omit?: Prisma.MihomeAccountOmit | null
+ /**
+ * Filter, which MihomeAccount to fetch.
+ */
+ where: Prisma.MihomeAccountWhereUniqueInput
+}
+
+/**
+ * MihomeAccount findFirst
+ */
+export type MihomeAccountFindFirstArgs = {
+ /**
+ * Select specific fields to fetch from the MihomeAccount
+ */
+ select?: Prisma.MihomeAccountSelect | null
+ /**
+ * Omit specific fields from the MihomeAccount
+ */
+ omit?: Prisma.MihomeAccountOmit | null
+ /**
+ * Filter, which MihomeAccount to fetch.
+ */
+ where?: Prisma.MihomeAccountWhereInput
+ /**
+ * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
+ *
+ * Determine the order of MihomeAccounts to fetch.
+ */
+ orderBy?: Prisma.MihomeAccountOrderByWithRelationInput | Prisma.MihomeAccountOrderByWithRelationInput[]
+ /**
+ * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
+ *
+ * Sets the position for searching for MihomeAccounts.
+ */
+ cursor?: Prisma.MihomeAccountWhereUniqueInput
+ /**
+ * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
+ *
+ * Take `±n` MihomeAccounts from the position of the cursor.
+ */
+ take?: number
+ /**
+ * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
+ *
+ * Skip the first `n` MihomeAccounts.
+ */
+ skip?: number
+ /**
+ * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
+ *
+ * Filter by unique combinations of MihomeAccounts.
+ */
+ distinct?: Prisma.MihomeAccountScalarFieldEnum | Prisma.MihomeAccountScalarFieldEnum[]
+}
+
+/**
+ * MihomeAccount findFirstOrThrow
+ */
+export type MihomeAccountFindFirstOrThrowArgs = {
+ /**
+ * Select specific fields to fetch from the MihomeAccount
+ */
+ select?: Prisma.MihomeAccountSelect | null
+ /**
+ * Omit specific fields from the MihomeAccount
+ */
+ omit?: Prisma.MihomeAccountOmit | null
+ /**
+ * Filter, which MihomeAccount to fetch.
+ */
+ where?: Prisma.MihomeAccountWhereInput
+ /**
+ * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
+ *
+ * Determine the order of MihomeAccounts to fetch.
+ */
+ orderBy?: Prisma.MihomeAccountOrderByWithRelationInput | Prisma.MihomeAccountOrderByWithRelationInput[]
+ /**
+ * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
+ *
+ * Sets the position for searching for MihomeAccounts.
+ */
+ cursor?: Prisma.MihomeAccountWhereUniqueInput
+ /**
+ * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
+ *
+ * Take `±n` MihomeAccounts from the position of the cursor.
+ */
+ take?: number
+ /**
+ * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
+ *
+ * Skip the first `n` MihomeAccounts.
+ */
+ skip?: number
+ /**
+ * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
+ *
+ * Filter by unique combinations of MihomeAccounts.
+ */
+ distinct?: Prisma.MihomeAccountScalarFieldEnum | Prisma.MihomeAccountScalarFieldEnum[]
+}
+
+/**
+ * MihomeAccount findMany
+ */
+export type MihomeAccountFindManyArgs = {
+ /**
+ * Select specific fields to fetch from the MihomeAccount
+ */
+ select?: Prisma.MihomeAccountSelect | null
+ /**
+ * Omit specific fields from the MihomeAccount
+ */
+ omit?: Prisma.MihomeAccountOmit | null
+ /**
+ * Filter, which MihomeAccounts to fetch.
+ */
+ where?: Prisma.MihomeAccountWhereInput
+ /**
+ * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
+ *
+ * Determine the order of MihomeAccounts to fetch.
+ */
+ orderBy?: Prisma.MihomeAccountOrderByWithRelationInput | Prisma.MihomeAccountOrderByWithRelationInput[]
+ /**
+ * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
+ *
+ * Sets the position for listing MihomeAccounts.
+ */
+ cursor?: Prisma.MihomeAccountWhereUniqueInput
+ /**
+ * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
+ *
+ * Take `±n` MihomeAccounts from the position of the cursor.
+ */
+ take?: number
+ /**
+ * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
+ *
+ * Skip the first `n` MihomeAccounts.
+ */
+ skip?: number
+ /**
+ * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
+ *
+ * Filter by unique combinations of MihomeAccounts.
+ */
+ distinct?: Prisma.MihomeAccountScalarFieldEnum | Prisma.MihomeAccountScalarFieldEnum[]
+}
+
+/**
+ * MihomeAccount create
+ */
+export type MihomeAccountCreateArgs = {
+ /**
+ * Select specific fields to fetch from the MihomeAccount
+ */
+ select?: Prisma.MihomeAccountSelect | null
+ /**
+ * Omit specific fields from the MihomeAccount
+ */
+ omit?: Prisma.MihomeAccountOmit | null
+ /**
+ * The data needed to create a MihomeAccount.
+ */
+ data: Prisma.XOR
+}
+
+/**
+ * MihomeAccount createMany
+ */
+export type MihomeAccountCreateManyArgs = {
+ /**
+ * The data used to create many MihomeAccounts.
+ */
+ data: Prisma.MihomeAccountCreateManyInput | Prisma.MihomeAccountCreateManyInput[]
+ skipDuplicates?: boolean
+}
+
+/**
+ * MihomeAccount update
+ */
+export type MihomeAccountUpdateArgs = {
+ /**
+ * Select specific fields to fetch from the MihomeAccount
+ */
+ select?: Prisma.MihomeAccountSelect