@lobehub/chat 0.77.2 → 0.78.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,41 @@
1
+ {
2
+ "pluginSettings": {
3
+ "desc": "完成以下設定後,即可開始使用此外掛",
4
+ "title": "{{name}} 外掛設定"
5
+ },
6
+ "response": {
7
+ "400": "抱歉,伺服器無法理解您的請求。請確認您的請求參數是否正確。",
8
+ "401": "抱歉,伺服器已拒絕您的請求,可能是因為權限不足或身分驗證無效。",
9
+ "403": "抱歉,伺服器已拒絕您的請求。您沒有權限存取此內容。",
10
+ "404": "抱歉,伺服器無法找到您請求的頁面或資源。請確認您的 URL 是否正確。",
11
+ "405": "抱歉,伺服器不支援您正在使用的請求方法。請確認您的請求方法是否正確。",
12
+ "429": "抱歉,您的請求太頻繁,伺服器有點累了。請稍後再試。",
13
+ "500": "抱歉,伺服器似乎遇到一些困難,暫時無法完成您的請求。請稍後再試。",
14
+ "502": "抱歉,伺服器似乎迷失了方向,暫時無法提供服務。請稍後再試。",
15
+ "503": "抱歉,伺服器目前無法處理您的請求,可能是因為過載或正在進行維護。請稍後再試。",
16
+ "504": "抱歉,伺服器沒有收到上游伺服器的回應。請稍後再試。",
17
+ "InvalidAccessCode": "密碼不正確或為空。請輸入正確的存取密碼,或新增自定義的 OpenAI API Key。",
18
+ "OpenAIBizError": "請求 OpenAI 服務出錯。請根據以下資訊進行排查或重試。",
19
+ "PluginMarketIndexNotFound": "抱歉,伺服器找不到外掛索引。請檢查索引地址是否正確",
20
+ "PluginMarketIndexInvalid": "抱歉,外掛索引驗證失敗。請檢查索引檔案格式是否正確",
21
+ "PluginMetaNotFound": "抱歉,索引中找不到該外掛。請檢查索引中的外掛設定資訊",
22
+ "PluginMetaInvalid": "抱歉,外掛的元資料驗證失敗。請檢查外掛元資料格式是否正確",
23
+ "PluginManifestNotFound": "抱歉,伺服器找不到該外掛的描述檔案 (manifest.json)。請檢查外掛描述檔案地址是否正確",
24
+ "PluginManifestInvalid": "抱歉,外掛的描述檔案驗證失敗。請檢查描述檔案格式是否正確",
25
+ "PluginApiNotFound": "抱歉,外掛描述檔案中不存在該 API。請檢查您的請求方法與外掛清單 API 是否相符",
26
+ "PluginApiParamsError": "抱歉,該外掛請求的輸入參數驗證失敗。請檢查輸入參數與 API 描述資訊是否相符",
27
+ "PluginSettingsInvalid": "該外掛需要正確設定後才可以使用。請檢查您的設定是否正確",
28
+ "PluginServerError": "外掛伺服器請求回傳錯誤。請根據下面的錯誤資訊檢查您的外掛描述檔案、外掛設定或伺服器實作"
29
+ },
30
+ "unlock": {
31
+ "apikey": {
32
+ "description": "輸入您的 OpenAI API Key 以繞過密碼驗證。應用程式不會記錄您的 API Key。",
33
+ "title": "使用自定義 API Key"
34
+ },
35
+ "confirm": "確認並重試",
36
+ "password": {
37
+ "description": "管理員已啟用應用程式加密,輸入應用程式密碼後即可解鎖應用程式。密碼只需填寫一次。",
38
+ "title": "輸入密碼解鎖應用程式"
39
+ }
40
+ }
41
+ }
@@ -0,0 +1,16 @@
1
+ {
2
+ "addAgent": "新增助理",
3
+ "search": {
4
+ "placeholder": "搜尋助理名稱、描述或關鍵字..."
5
+ },
6
+ "sidebar": {
7
+ "comment": "評論",
8
+ "prompt": "提示",
9
+ "title": "助理詳細資訊"
10
+ },
11
+ "submitAgent": "上傳助理",
12
+ "title": {
13
+ "recentSubmits": "最新上傳",
14
+ "allAgents": "所有助理"
15
+ }
16
+ }
@@ -0,0 +1,126 @@
1
+ {
2
+ "debug": {
3
+ "arguments": "參數",
4
+ "function_call": "函式呼叫",
5
+ "response": "回應"
6
+ },
7
+ "dev": {
8
+ "confirmDeleteDevPlugin": "您確定要刪除此本機外掛嗎?一旦刪除,將無法復原。",
9
+ "deleteSuccess": "外掛已成功刪除",
10
+ "manifest": {
11
+ "identifier": {
12
+ "desc": "外掛的唯一識別碼",
13
+ "label": "識別碼"
14
+ },
15
+ "mode": {
16
+ "local": "視覺設定",
17
+ "local-tooltip": "目前不支援視覺設定",
18
+ "url": "線上連結"
19
+ },
20
+ "name": {
21
+ "desc": "外掛的名稱",
22
+ "label": "名稱",
23
+ "placeholder": "搜尋引擎"
24
+ }
25
+ },
26
+ "meta": {
27
+ "author": {
28
+ "desc": "外掛的作者",
29
+ "label": "作者"
30
+ },
31
+ "avatar": {
32
+ "desc": "外掛的圖示,可以是 Emoji 或網址",
33
+ "label": "圖示"
34
+ },
35
+ "description": {
36
+ "desc": "外掛的描述",
37
+ "label": "描述",
38
+ "placeholder": "從搜尋引擎取得資訊"
39
+ },
40
+ "formFieldRequired": "此欄位必填",
41
+ "homepage": {
42
+ "desc": "外掛的官方首頁",
43
+ "label": "首頁"
44
+ },
45
+ "identifier": {
46
+ "desc": "外掛的唯一識別碼,只支援英數字元、連字號 -,以及底線 _",
47
+ "errorDuplicate": "此識別碼已被其他外掛使用,請更改識別碼",
48
+ "label": "識別碼",
49
+ "pattenErrorMessage": "只允許英數字元、連字號 -,以及底線 _"
50
+ },
51
+ "manifest": {
52
+ "desc": "LobeChat 會使用此連結安裝外掛",
53
+ "invalid": "輸入的 manifest 連結不正確或不符合標準",
54
+ "label": "外掛 Manifest 網址",
55
+ "urlError": "請輸入有效的網址",
56
+ "jsonInvalid": "manifest 不正確,驗證結果:\n\n {{error}}",
57
+ "preview": "預覽 Manifest",
58
+ "refresh": "重新載入",
59
+ "requestError": "連結請求失敗,請確認網址是否正確且允許跨域存取"
60
+ },
61
+ "title": {
62
+ "desc": "外掛的名稱",
63
+ "label": "名稱",
64
+ "placeholder": "搜尋引擎"
65
+ }
66
+ },
67
+ "metaConfig": "外掛後設資料設定",
68
+ "modalDesc": "新增自訂外掛後,可用於外掛開發測試或直接在對話中使用。請參考外掛開發文件以取得更多資訊。",
69
+ "preview": {
70
+ "card": "外掛顯示預覽",
71
+ "desc": "外掛描述預覽",
72
+ "title": "外掛名稱預覽"
73
+ },
74
+ "save": "儲存",
75
+ "saveSuccess": "外掛設定已成功儲存",
76
+ "tabs": {
77
+ "manifest": "功能描述清單 (Manifest)",
78
+ "meta": "外掛後設資料"
79
+ },
80
+ "title": "新增自訂外掛",
81
+ "update": "更新",
82
+ "updateSuccess": "外掛設定已成功更新"
83
+ },
84
+ "list": {
85
+ "item": {
86
+ "local.config": "設定",
87
+ "local.title": "本機",
88
+ "deprecated.title": "已刪除"
89
+ }
90
+ },
91
+ "loading": {
92
+ "content": "載入中...",
93
+ "plugin": "外掛執行中..."
94
+ },
95
+ "pluginList": "外掛清單",
96
+ "plugins": {
97
+ "realtimeWeather": "即時天氣",
98
+ "searchEngine": "搜尋引擎",
99
+ "undefined": "正在偵測外掛...",
100
+ "websiteCrawler": "網站爬蟲",
101
+ "unknown": "外掛偵測進行中..."
102
+ },
103
+ "realtimeWeather": {
104
+ "data": {
105
+ "date": "日期",
106
+ "daytemp_float": "日間溫度",
107
+ "dayweather": "日間天氣",
108
+ "daywind": "日間風向",
109
+ "nighttemp_float": "夜間溫度",
110
+ "nightweather": "夜間天氣",
111
+ "nightwind": "夜間風向",
112
+ "week": "週"
113
+ },
114
+ "title": "未來 7 天的天氣資料 ({{city}})",
115
+ "updateAt": "最後更新時間"
116
+ },
117
+ "responseData": "回應資料",
118
+ "settings": {
119
+ "indexUrl": {
120
+ "title": "外掛市集索引",
121
+ "tooltip": "目前不支援編輯"
122
+ },
123
+ "modalDesc": "設定外掛市集的網址後,您可以使用自訂的外掛市集",
124
+ "title": "設定外掛市集"
125
+ }
126
+ }
@@ -0,0 +1,237 @@
1
+ {
2
+ "danger": {
3
+ "clear": {
4
+ "action": "立即清除",
5
+ "confirm": "確定要清除所有聊天資料嗎?",
6
+ "desc": "清除所有對話資料",
7
+ "success": "已清除所有對話訊息",
8
+ "title": "清除所有對話訊息"
9
+ },
10
+ "reset": {
11
+ "action": "立即重設",
12
+ "confirm": "確定要重設所有設定嗎?",
13
+ "currentVersion": "目前版本",
14
+ "desc": "將所有設定重設為預設值",
15
+ "title": "重設所有設定"
16
+ }
17
+ },
18
+ "header": {
19
+ "global": "全域設定",
20
+ "session": "對話設定",
21
+ "sessionWithName": "對話設定 · {{name}}"
22
+ },
23
+ "llm": {
24
+ "AzureOpenAI": {
25
+ "endpoint": {
26
+ "desc": "在 Azure 網站檢查資源時,可以在「金鑰和端點」部分找到此值。",
27
+ "placeholder": "https://docs-test-001.openai.azure.com",
28
+ "title": "Azure API 網址"
29
+ },
30
+ "models": {
31
+ "desc": "支援的模型",
32
+ "title": "模型列表"
33
+ },
34
+ "title": "Azure OpenAI 設定",
35
+ "token": {
36
+ "desc": "在 Azure 網站檢查資源時,可以在「金鑰和端點」部分找到此值。可以使用 KEY1 或 KEY2",
37
+ "placeholder": "Azure API 金鑰",
38
+ "title": "API 金鑰"
39
+ }
40
+ },
41
+ "OpenAI": {
42
+ "azureApiVersion": {
43
+ "desc": "Azure API 版本,遵循 YYYY-MM-DD 格式,查詢[最新版本](https://learn.microsoft.com/zh-cn/azure/ai-services/openai/reference#chat-completions)",
44
+ "fetch": "取得列表",
45
+ "title": "Azure API 版本"
46
+ },
47
+ "check": {
48
+ "button": "檢查",
49
+ "desc": "檢查 API 金鑰和代理伺服器網址是否正確填寫。",
50
+ "pass": "連線成功",
51
+ "title": "檢查連線狀態"
52
+ },
53
+ "endpoint": {
54
+ "desc": "除了預設網址外,必須包含 http(s)://",
55
+ "placeholder": "https://api.openai.com/v1",
56
+ "title": "API 代理網址"
57
+ },
58
+ "models": {
59
+ "count": "總共支援 {{count}} 個模型",
60
+ "desc": "支援的模型",
61
+ "fetch": "取得模型列表",
62
+ "notSupport": "Azure OpenAI 目前不支援檢視模型列表",
63
+ "notSupportTip": "請確保部署名稱與模型名稱相符",
64
+ "refetch": "重新取得模型列表",
65
+ "title": "模型列表"
66
+ },
67
+ "title": "OpenAI 設定",
68
+ "token": {
69
+ "desc": "使用自己的 OpenAI 金鑰",
70
+ "placeholder": "OpenAI API 金鑰",
71
+ "title": "API 金鑰"
72
+ },
73
+ "useAzure": {
74
+ "desc": "使用 Azure 提供的 OpenAI 服務",
75
+ "fetch": "取得列表",
76
+ "title": "Azure OpenAI",
77
+ "serverConfig": "管理員已在伺服器端啟用 Azure OpenAI,禁止切換"
78
+ }
79
+ },
80
+ "waitingForMore": "<1>計劃支援其他模型</1>,敬請期待 ✨"
81
+ },
82
+ "settingAgent": {
83
+ "avatar": {
84
+ "title": "頭像"
85
+ },
86
+ "backgroundColor": {
87
+ "title": "背景色"
88
+ },
89
+ "description": {
90
+ "placeholder": "請輸入助理描述",
91
+ "title": "助理描述"
92
+ },
93
+ "name": {
94
+ "placeholder": "請輸入助理名稱",
95
+ "title": "名稱"
96
+ },
97
+ "prompt": {
98
+ "placeholder": "請輸入角色提示",
99
+ "title": "角色提示"
100
+ },
101
+ "tag": {
102
+ "placeholder": "請輸入標籤",
103
+ "title": "標籤"
104
+ },
105
+ "title": "助理資訊"
106
+ },
107
+ "settingChat": {
108
+ "chatStyleType": {
109
+ "title": "聊天視窗樣式",
110
+ "type": {
111
+ "chat": "對話模式",
112
+ "docs": "文件模式"
113
+ }
114
+ },
115
+ "compressThreshold": {
116
+ "desc": "當未壓縮的歷史訊息超過此值時,將進行壓縮",
117
+ "title": "歷史訊息長度壓縮閾值"
118
+ },
119
+ "enableCompressThreshold": {
120
+ "title": "是否啟用歷史訊息長度壓縮閾值"
121
+ },
122
+ "enableHistoryCount": {
123
+ "alias": "不限制",
124
+ "limited": "只包含 {{number}} 條對話訊息",
125
+ "title": "限制歷史訊息數",
126
+ "unlimited": "不限歷史訊息數"
127
+ },
128
+ "historyCount": {
129
+ "desc": "每次請求攜帶的歷史訊息數",
130
+ "title": "附帶歷史訊息數"
131
+ },
132
+ "inputTemplate": {
133
+ "desc": "使用者最新的一條訊息會填充到此範本",
134
+ "placeholder": "前置處理範本 {{text}} 將替換為即時輸入資訊",
135
+ "title": "使用者輸入前置處理"
136
+ },
137
+ "title": "聊天設定"
138
+ },
139
+ "settingModel": {
140
+ "enableMaxTokens": {
141
+ "title": "啟用單次回覆限制"
142
+ },
143
+ "frequencyPenalty": {
144
+ "desc": "值越大,越有可能降低重複字詞",
145
+ "title": "頻率懲罰度"
146
+ },
147
+ "maxTokens": {
148
+ "desc": "單次互動所用的最大 Token 數",
149
+ "title": "單次回覆限制"
150
+ },
151
+ "model": {
152
+ "desc": "ChatGPT 模型",
153
+ "list": {
154
+ "gpt-3.5-turbo": "GPT 3.5",
155
+ "gpt-3.5-turbo-16k": "GPT 3.5 (16K)",
156
+ "gpt-4": "GPT 4",
157
+ "gpt-4-32k": "GPT 4 (32K)"
158
+ },
159
+ "title": "模型"
160
+ },
161
+ "presencePenalty": {
162
+ "desc": "值越大,越有可能延伸到新話題",
163
+ "title": "話題新鮮度"
164
+ },
165
+ "temperature": {
166
+ "desc": "值越大,回覆越隨機",
167
+ "title": "隨機性",
168
+ "titleWithValue": "隨機性 {{value}}"
169
+ },
170
+ "title": "模型設定",
171
+ "topP": {
172
+ "desc": "與隨機性類似,但不要和隨機性一起更改",
173
+ "title": "核心抽樣參數"
174
+ }
175
+ },
176
+ "settingOpenAI": {
177
+ "endpoint": {
178
+ "desc": "除了預設網址外,必須包含 http(s)://",
179
+ "placeholder": "https://api.openai.com/v1",
180
+ "title": "API 代理網址"
181
+ },
182
+ "title": "OpenAI 設定",
183
+ "token": {
184
+ "desc": "使用自己的 OpenAI 金鑰",
185
+ "placeholder": "OpenAI API 金鑰",
186
+ "title": "API 金鑰"
187
+ }
188
+ },
189
+ "settingPlugin": {
190
+ "add": "新增",
191
+ "addTooltip": "新增自訂外掛",
192
+ "clearDeprecated": "移除過時外掛",
193
+ "config": "{{id}} 外掛設定",
194
+ "settings": "設定外掛市場",
195
+ "title": "外掛列表"
196
+ },
197
+ "settingSystem": {
198
+ "accessCode": {
199
+ "desc": "管理員已啟用加密存取",
200
+ "placeholder": "請輸入存取密碼",
201
+ "title": "存取密碼"
202
+ },
203
+ "title": "系統設定"
204
+ },
205
+ "settingTheme": {
206
+ "avatar": {
207
+ "title": "頭像"
208
+ },
209
+ "fontSize": {
210
+ "desc": "聊天內容的字型大小",
211
+ "title": "字型大小"
212
+ },
213
+ "lang": {
214
+ "title": "語言設定"
215
+ },
216
+ "neutralColor": {
217
+ "desc": "不同色彩傾向的灰階自訂",
218
+ "title": "中性色"
219
+ },
220
+ "primaryColor": {
221
+ "desc": "自訂主題顏色",
222
+ "title": "主題顏色"
223
+ },
224
+ "themeMode": {
225
+ "auto": "自動",
226
+ "dark": "深色",
227
+ "light": "淺色",
228
+ "title": "主題"
229
+ },
230
+ "title": "主題設定"
231
+ },
232
+ "tab": {
233
+ "agent": "預設助理",
234
+ "common": "通用設定",
235
+ "llm": "語言模型"
236
+ }
237
+ }
@@ -0,0 +1,14 @@
1
+ {
2
+ "button": {
3
+ "import": "匯入設定檔",
4
+ "start": "馬上開始"
5
+ },
6
+ "header": "歡迎",
7
+ "pickAgent": "或從以下助理範本中選擇",
8
+ "skip": "跳過建立步驟",
9
+ "slogan": {
10
+ "desc1": "釋放你腦力的潛能,點燃你的創意火花。你的智慧型助理,隨時待命。",
11
+ "desc2": "建立你的第一個助理,讓我們一起開始吧~",
12
+ "title": "為自己賦予一個更聰明的大腦"
13
+ }
14
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lobehub/chat",
3
- "version": "0.77.2",
3
+ "version": "0.78.1",
4
4
  "description": "Lobe Chat is an open-source chatbot client using Vercel AI SDK, Typescript and Next.js",
5
5
  "keywords": [
6
6
  "chatbot",
@@ -69,7 +69,7 @@
69
69
  "@emoji-mart/react": "^1",
70
70
  "@icons-pack/react-simple-icons": "^9",
71
71
  "@lobehub/chat-plugin-sdk": "^1.17.7",
72
- "@lobehub/chat-plugins-gateway": "^1.5.1",
72
+ "@lobehub/chat-plugins-gateway": "^1.5.3",
73
73
  "@lobehub/ui": "latest",
74
74
  "@vercel/analytics": "^1",
75
75
  "ahooks": "^3",
@@ -86,16 +86,16 @@
86
86
  "immer": "^10",
87
87
  "lodash-es": "^4",
88
88
  "lucide-react": "latest",
89
- "nanoid": "^4",
89
+ "nanoid": "^5",
90
90
  "next": "13.4.7",
91
- "openai": "^4.6.0",
91
+ "openai": "^4.7.1",
92
92
  "polished": "^4",
93
93
  "react": "^18",
94
94
  "react-dom": "^18",
95
95
  "react-hotkeys-hook": "^4",
96
96
  "react-i18next": "^13",
97
97
  "react-intersection-observer": "^9",
98
- "react-layout-kit": "^1.7.1",
98
+ "react-layout-kit": "^1.7.2",
99
99
  "swr": "^2",
100
100
  "systemjs": "^6.14.2",
101
101
  "ts-md5": "^1",
@@ -12,6 +12,10 @@ export const localeOptions: LocaleOptions = [
12
12
  label: '简体中文',
13
13
  value: 'zh-CN',
14
14
  },
15
+ {
16
+ label: '繁體中文',
17
+ value: 'zh-TW',
18
+ },
15
19
  {
16
20
  label: 'English',
17
21
  value: 'en-US',
@@ -1,11 +1,13 @@
1
1
  import en_US from './en_US';
2
2
  import ru_RU from './ru_RU';
3
3
  import zh_CN from './zh_CN';
4
+ import zh_TW from './zh_TW';
4
5
 
5
6
  const resources = {
6
7
  'en-US': en_US,
7
8
  'ru-RU': ru_RU,
8
9
  'zh-CN': zh_CN,
10
+ 'zh-TW': zh_TW,
9
11
  } as const;
10
12
  export default resources;
11
13
  export const defaultResources = zh_CN;
@@ -0,0 +1,19 @@
1
+ import common from '../../../locales/zh_TW/common.json';
2
+ import empty from '../../../locales/zh_TW/empty.json';
3
+ import error from '../../../locales/zh_TW/error.json';
4
+ import market from '../../../locales/zh_TW/market.json';
5
+ import plugin from '../../../locales/zh_TW/plugin.json';
6
+ import setting from '../../../locales/zh_TW/setting.json';
7
+ import welcome from '../../../locales/zh_TW/welcome.json';
8
+
9
+ const resources = {
10
+ common,
11
+ empty,
12
+ error,
13
+ market,
14
+ plugin,
15
+ setting,
16
+ welcome,
17
+ } as const;
18
+
19
+ export default resources;
@@ -97,7 +97,7 @@ const TopicContent = memo<TopicContentProps>(({ id, title, fav }) => {
97
97
  {!editing ? (
98
98
  <Paragraph
99
99
  className={styles.title}
100
- ellipsis={{ rows: 1, tooltip: title }}
100
+ ellipsis={{ rows: 1, tooltip: { placement: 'left', title } }}
101
101
  style={{ margin: 0 }}
102
102
  >
103
103
  {title}
@@ -270,21 +270,24 @@ export const chatMessage: StateCreator<
270
270
  const userId = nanoid();
271
271
  dispatchMessage({ id: userId, message, role: 'user', type: 'addMessage' });
272
272
 
273
- // 如果有 activeTopicId,则添加 topicId
273
+ // if there is activeTopicId,then add topicId to message
274
274
  if (activeTopicId) {
275
275
  dispatchMessage({ id: userId, key: 'topicId', type: 'updateMessage', value: activeTopicId });
276
276
  }
277
277
 
278
- // 先拿到当前的 messages
278
+ // Get the current messages to generate AI response
279
279
  const messages = chatSelectors.currentChats(get());
280
280
 
281
281
  await realFetchAIResponse(messages, userId);
282
282
 
283
- // TODO: AgentSettings 提供一个外部调用的 hooks
284
- // const chats = chatSelectors.currentChats(get());
285
- // if (chats.length >= 4) {
286
- // autocompleteSessionAgentMeta(session.id);
287
- // }
283
+ // check activeTopic and then auto create topic
284
+ const chats = chatSelectors.currentChats(get());
285
+
286
+ if (!activeTopicId && chats.length >= 2) {
287
+ const { saveToTopic, toggleTopic } = get();
288
+ const id = saveToTopic();
289
+ if (id) toggleTopic(id);
290
+ }
288
291
  },
289
292
 
290
293
  stopGenerateMessage: () => {
@@ -26,7 +26,7 @@ export interface ChatTopicAction {
26
26
  /**
27
27
  * 将当前消息保存为主题
28
28
  */
29
- saveToTopic: () => void;
29
+ saveToTopic: () => string | undefined;
30
30
  /**
31
31
  * 切换主题
32
32
  * @param id - 要切换的主题的 ID
@@ -118,6 +118,8 @@ export const chatTopic: StateCreator<
118
118
  },
119
119
  params: promptSummaryTitle(messages),
120
120
  });
121
+
122
+ return topicId;
121
123
  },
122
124
  toggleTopic: (id) => {
123
125
  set({ activeTopicId: id }, false, t('toggleTopic'));
package/.gitpod.yml DELETED
@@ -1,3 +0,0 @@
1
- tasks:
2
- - init: pnpm install
3
- command: pnpm run start
package/bun.lockb DELETED
Binary file