@arcaelas/whatsapp 1.0.21 → 1.2.2
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.
- package/API.md +776 -0
- package/DOC.md +532 -0
- package/build/Chat.d.ts +335 -0
- package/build/Chat.js +396 -0
- package/build/Chat.js.map +1 -0
- package/build/Contact.d.ts +828 -0
- package/build/Contact.js +188 -0
- package/build/Contact.js.map +1 -0
- package/build/Message.d.ts +525 -0
- package/build/Message.js +445 -0
- package/build/Message.js.map +1 -0
- package/build/WhatsApp.d.ts +68 -0
- package/build/WhatsApp.js +399 -0
- package/build/WhatsApp.js.map +1 -0
- package/build/index.d.ts +11 -107
- package/build/index.js +1 -1
- package/build/index.js.map +3 -3
- package/build/store/driver/FileEngine.d.ts +23 -0
- package/build/store/driver/FileEngine.js +90 -0
- package/build/store/driver/FileEngine.js.map +1 -0
- package/build/store/driver/RedisEngine.d.ts +38 -0
- package/build/store/driver/RedisEngine.js +69 -0
- package/build/store/driver/RedisEngine.js.map +1 -0
- package/build/store/engine.d.ts +54 -0
- package/build/store/engine.js +7 -0
- package/build/store/engine.js.map +1 -0
- package/build/store/index.d.ts +8 -0
- package/build/store/index.js +12 -0
- package/build/store/index.js.map +1 -0
- package/context7.json +4 -0
- package/package.json +59 -52
- package/tsconfig.json +25 -25
- package/build/model/base.d.ts +0 -28
- package/build/model/base.js +0 -65
- package/build/model/base.js.map +0 -1
- package/build/model/chat.d.ts +0 -112
- package/build/model/chat.js +0 -105
- package/build/model/chat.js.map +0 -1
- package/build/model/contact.d.ts +0 -16
- package/build/model/contact.js +0 -22
- package/build/model/contact.js.map +0 -1
- package/build/model/message.d.ts +0 -159
- package/build/model/message.js +0 -206
- package/build/model/message.js.map +0 -1
- package/build/static/Store.d.ts +0 -137
- package/build/static/Store.js +0 -238
- package/build/static/Store.js.map +0 -1
- package/build/static/useCache.d.ts +0 -12
- package/build/static/useCache.js +0 -43
- package/build/static/useCache.js.map +0 -1
package/build/Chat.js
ADDED
|
@@ -0,0 +1,396 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @file Chat.ts
|
|
4
|
+
* @description Clase Chat para gestión de conversaciones de WhatsApp
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.Chat = void 0;
|
|
8
|
+
exports.build_chat = build_chat;
|
|
9
|
+
exports.chat = chat;
|
|
10
|
+
const baileys_1 = require("baileys");
|
|
11
|
+
/**
|
|
12
|
+
* @description Construye IChat desde raw.
|
|
13
|
+
* @param raw Objeto raw del chat.
|
|
14
|
+
* @returns IChat normalizado.
|
|
15
|
+
*/
|
|
16
|
+
function build_chat(raw) {
|
|
17
|
+
return {
|
|
18
|
+
id: raw.id,
|
|
19
|
+
type: raw.id.endsWith('@g.us') ? 'group' : 'contact',
|
|
20
|
+
name: raw.name ?? raw.displayName ?? raw.id.split('@')[0],
|
|
21
|
+
content: raw.description ?? '',
|
|
22
|
+
pined: raw.pinned !== null && raw.pinned !== undefined,
|
|
23
|
+
archived: raw.archived ?? false,
|
|
24
|
+
muted: raw.muteEndTime ?? false,
|
|
25
|
+
readed: (raw.unreadCount === 0 || raw.unreadCount === null) && !raw.markedAsUnread,
|
|
26
|
+
readonly: raw.readOnly ?? false,
|
|
27
|
+
labels: [],
|
|
28
|
+
raw,
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* @description
|
|
33
|
+
* Clase base para representar una conversación de WhatsApp.
|
|
34
|
+
* Usar Chat.get() para obtener instancias.
|
|
35
|
+
*/
|
|
36
|
+
class Chat {
|
|
37
|
+
constructor(data) {
|
|
38
|
+
this.raw = data.raw;
|
|
39
|
+
}
|
|
40
|
+
/** JID único del chat */
|
|
41
|
+
get id() {
|
|
42
|
+
return this.raw.id;
|
|
43
|
+
}
|
|
44
|
+
/** Tipo de chat */
|
|
45
|
+
get type() {
|
|
46
|
+
return this.raw.id.endsWith('@g.us') ? 'group' : 'contact';
|
|
47
|
+
}
|
|
48
|
+
/** Nombre del chat */
|
|
49
|
+
get name() {
|
|
50
|
+
return this.raw.name ?? this.raw.displayName ?? this.raw.id.split('@')[0];
|
|
51
|
+
}
|
|
52
|
+
/** Descripción del chat/grupo */
|
|
53
|
+
get content() {
|
|
54
|
+
return this.raw.description ?? '';
|
|
55
|
+
}
|
|
56
|
+
/** Si está fijado */
|
|
57
|
+
get pined() {
|
|
58
|
+
return this.raw.pinned !== null && this.raw.pinned !== undefined;
|
|
59
|
+
}
|
|
60
|
+
/** Si está archivado */
|
|
61
|
+
get archived() {
|
|
62
|
+
return this.raw.archived ?? false;
|
|
63
|
+
}
|
|
64
|
+
/** Timestamp cuando expira el silencio o false */
|
|
65
|
+
get muted() {
|
|
66
|
+
return this.raw.muteEndTime ?? false;
|
|
67
|
+
}
|
|
68
|
+
/** Si está leído */
|
|
69
|
+
get readed() {
|
|
70
|
+
return (this.raw.unreadCount === 0 || this.raw.unreadCount === null) && !this.raw.markedAsUnread;
|
|
71
|
+
}
|
|
72
|
+
/** Si es solo lectura */
|
|
73
|
+
get readonly() {
|
|
74
|
+
return this.raw.readOnly ?? false;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
exports.Chat = Chat;
|
|
78
|
+
/**
|
|
79
|
+
* @description Factory que retorna la clase Chat enlazada al contexto.
|
|
80
|
+
* @param wa Instancia de WhatsApp.
|
|
81
|
+
* @returns Clase _Chat que extiende Chat.
|
|
82
|
+
*/
|
|
83
|
+
function chat(wa) {
|
|
84
|
+
/** Obtiene el último mensaje raw del chat para chatModify */
|
|
85
|
+
async function _last_messages(cid) {
|
|
86
|
+
const messages_index = await wa.engine.get(`chat/${cid}/messages`);
|
|
87
|
+
if (!messages_index)
|
|
88
|
+
return [];
|
|
89
|
+
const first_line = messages_index.trim().split('\n')[0];
|
|
90
|
+
if (!first_line)
|
|
91
|
+
return [];
|
|
92
|
+
const [timestamp, mid] = first_line.split(' ');
|
|
93
|
+
const msg = await wa.Message.get(cid, mid);
|
|
94
|
+
if (!msg)
|
|
95
|
+
return [];
|
|
96
|
+
return [{ key: { remoteJid: cid, id: msg.id, fromMe: msg.me }, messageTimestamp: Math.floor(Number(timestamp) / 1000) }];
|
|
97
|
+
}
|
|
98
|
+
const _Chat = class extends Chat {
|
|
99
|
+
/**
|
|
100
|
+
* @description Obtiene un chat por su ID.
|
|
101
|
+
* @param cid ID del chat (JID).
|
|
102
|
+
* @returns Chat o null si no existe.
|
|
103
|
+
*/
|
|
104
|
+
static async get(cid) {
|
|
105
|
+
const stored = await wa.engine.get(`chat/${cid}/index`);
|
|
106
|
+
if (stored)
|
|
107
|
+
return new _Chat(JSON.parse(stored, baileys_1.BufferJSON.reviver));
|
|
108
|
+
const contact = await wa.Contact.get(cid);
|
|
109
|
+
if (!contact)
|
|
110
|
+
return null;
|
|
111
|
+
const raw = { id: cid, name: contact.name };
|
|
112
|
+
const data = build_chat(raw);
|
|
113
|
+
await wa.engine.set(`chat/${cid}/index`, JSON.stringify(data, baileys_1.BufferJSON.replacer));
|
|
114
|
+
return new _Chat(data);
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* @description Actualiza los datos del chat desde WhatsApp.
|
|
118
|
+
* @param cid ID del chat.
|
|
119
|
+
* @returns Chat actualizado o null.
|
|
120
|
+
*/
|
|
121
|
+
static async refresh(cid) {
|
|
122
|
+
if (!wa.socket)
|
|
123
|
+
return null;
|
|
124
|
+
const stored = await wa.engine.get(`chat/${cid}/index`);
|
|
125
|
+
const data = stored ? JSON.parse(stored, baileys_1.BufferJSON.reviver) : build_chat({ id: cid });
|
|
126
|
+
// Para grupos, obtener metadata actualizada
|
|
127
|
+
if (cid.endsWith('@g.us')) {
|
|
128
|
+
try {
|
|
129
|
+
const meta = await wa.socket.groupMetadata(cid);
|
|
130
|
+
data.raw.name = meta.subject;
|
|
131
|
+
data.raw.description = meta.desc ?? null;
|
|
132
|
+
data.raw.participant = meta.participants.map((p) => ({ id: p.id, admin: p.admin ?? null }));
|
|
133
|
+
data.raw.createdBy = meta.owner ?? null;
|
|
134
|
+
data.raw.createdAt = meta.creation ?? null;
|
|
135
|
+
data.name = meta.subject;
|
|
136
|
+
data.content = meta.desc ?? '';
|
|
137
|
+
}
|
|
138
|
+
catch { }
|
|
139
|
+
}
|
|
140
|
+
else {
|
|
141
|
+
// Para contactos individuales, actualizar desde Contact
|
|
142
|
+
const contact = await wa.Contact.refresh(cid);
|
|
143
|
+
if (contact) {
|
|
144
|
+
data.raw.name = contact.name;
|
|
145
|
+
data.name = contact.name;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
await wa.engine.set(`chat/${cid}/index`, JSON.stringify(data, baileys_1.BufferJSON.replacer));
|
|
149
|
+
return new _Chat(data);
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* @description Obtiene chats paginados.
|
|
153
|
+
* @param offset Inicio de paginación.
|
|
154
|
+
* @param limit Cantidad máxima de resultados.
|
|
155
|
+
* @returns Array de chats.
|
|
156
|
+
*/
|
|
157
|
+
static async paginate(offset = 0, limit = 50) {
|
|
158
|
+
const chats = [];
|
|
159
|
+
for (const key of await wa.engine.list('chat/', offset, limit, '/index')) {
|
|
160
|
+
const stored = await wa.engine.get(key);
|
|
161
|
+
if (stored)
|
|
162
|
+
chats.push(new _Chat(JSON.parse(stored, baileys_1.BufferJSON.reviver)));
|
|
163
|
+
}
|
|
164
|
+
return chats;
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* @description Fija o desfija un chat.
|
|
168
|
+
* @param cid ID del chat.
|
|
169
|
+
* @param value true para fijar, false para desfijar.
|
|
170
|
+
* @returns true si se actualizó correctamente.
|
|
171
|
+
*/
|
|
172
|
+
static async pin(cid, value) {
|
|
173
|
+
if (!wa.socket)
|
|
174
|
+
return false;
|
|
175
|
+
const last_messages = await _last_messages(cid);
|
|
176
|
+
await wa.socket.chatModify({ pin: value, lastMessages: last_messages }, cid);
|
|
177
|
+
const stored = await wa.engine.get(`chat/${cid}/index`);
|
|
178
|
+
if (!stored)
|
|
179
|
+
return true;
|
|
180
|
+
const data = JSON.parse(stored, baileys_1.BufferJSON.reviver);
|
|
181
|
+
data.raw.pinned = value ? Date.now() : null;
|
|
182
|
+
data.pined = value;
|
|
183
|
+
await wa.engine.set(`chat/${cid}/index`, JSON.stringify(data, baileys_1.BufferJSON.replacer));
|
|
184
|
+
return true;
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* @description Archiva o desarchiva un chat.
|
|
188
|
+
* @param cid ID del chat.
|
|
189
|
+
* @param value true para archivar, false para desarchivar.
|
|
190
|
+
* @returns true si se actualizó correctamente.
|
|
191
|
+
*/
|
|
192
|
+
static async archive(cid, value) {
|
|
193
|
+
if (!wa.socket)
|
|
194
|
+
return false;
|
|
195
|
+
const last_messages = await _last_messages(cid);
|
|
196
|
+
await wa.socket.chatModify({ archive: value, lastMessages: last_messages }, cid);
|
|
197
|
+
const stored = await wa.engine.get(`chat/${cid}/index`);
|
|
198
|
+
if (!stored)
|
|
199
|
+
return true;
|
|
200
|
+
const data = JSON.parse(stored, baileys_1.BufferJSON.reviver);
|
|
201
|
+
data.raw.archived = value;
|
|
202
|
+
data.archived = value;
|
|
203
|
+
await wa.engine.set(`chat/${cid}/index`, JSON.stringify(data, baileys_1.BufferJSON.replacer));
|
|
204
|
+
return true;
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* @description Silencia o quita silencio de un chat.
|
|
208
|
+
* @param cid ID del chat.
|
|
209
|
+
* @param duration Duración en milisegundos (0 o null para quitar silencio).
|
|
210
|
+
* @returns true si se actualizó correctamente.
|
|
211
|
+
*/
|
|
212
|
+
static async mute(cid, duration) {
|
|
213
|
+
if (!wa.socket)
|
|
214
|
+
return false;
|
|
215
|
+
const mute_end = duration ? Date.now() + duration : null;
|
|
216
|
+
const last_messages = await _last_messages(cid);
|
|
217
|
+
await wa.socket.chatModify({ mute: mute_end, lastMessages: last_messages }, cid);
|
|
218
|
+
const stored = await wa.engine.get(`chat/${cid}/index`);
|
|
219
|
+
if (!stored)
|
|
220
|
+
return true;
|
|
221
|
+
const data = JSON.parse(stored, baileys_1.BufferJSON.reviver);
|
|
222
|
+
data.raw.muteEndTime = mute_end;
|
|
223
|
+
data.muted = mute_end ?? false;
|
|
224
|
+
await wa.engine.set(`chat/${cid}/index`, JSON.stringify(data, baileys_1.BufferJSON.replacer));
|
|
225
|
+
return true;
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* @description Marca un chat como leído.
|
|
229
|
+
* @param cid ID del chat.
|
|
230
|
+
* @returns true si se marcó correctamente.
|
|
231
|
+
*/
|
|
232
|
+
static async seen(cid) {
|
|
233
|
+
if (!wa.socket)
|
|
234
|
+
return false;
|
|
235
|
+
const last_messages = await _last_messages(cid);
|
|
236
|
+
if (!last_messages.length)
|
|
237
|
+
return false;
|
|
238
|
+
const msg = last_messages[0];
|
|
239
|
+
await wa.socket.readMessages([{ remoteJid: cid, id: msg.key.id, participant: msg.key.fromMe ? undefined : msg.key.remoteJid }]);
|
|
240
|
+
// Actualizar estado del chat
|
|
241
|
+
const stored = await wa.engine.get(`chat/${cid}/index`);
|
|
242
|
+
if (stored) {
|
|
243
|
+
const data = JSON.parse(stored, baileys_1.BufferJSON.reviver);
|
|
244
|
+
data.raw.unreadCount = 0;
|
|
245
|
+
data.raw.markedAsUnread = false;
|
|
246
|
+
data.readed = true;
|
|
247
|
+
await wa.engine.set(`chat/${cid}/index`, JSON.stringify(data, baileys_1.BufferJSON.replacer));
|
|
248
|
+
}
|
|
249
|
+
return true;
|
|
250
|
+
}
|
|
251
|
+
/**
|
|
252
|
+
* @description Limpia todos los datos del chat del storage (cascade delete).
|
|
253
|
+
* @param cid ID del chat.
|
|
254
|
+
*/
|
|
255
|
+
static async cascade_delete(cid) {
|
|
256
|
+
await wa.engine.delete_prefix(`chat/${cid}/`);
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* @description Elimina un chat con cascade delete.
|
|
260
|
+
* @param cid ID del chat.
|
|
261
|
+
* @returns true si se eliminó correctamente.
|
|
262
|
+
*/
|
|
263
|
+
static async remove(cid) {
|
|
264
|
+
if (!wa.socket)
|
|
265
|
+
return false;
|
|
266
|
+
const stored = await wa.engine.get(`chat/${cid}/index`);
|
|
267
|
+
if (!stored)
|
|
268
|
+
return false;
|
|
269
|
+
const data = JSON.parse(stored, baileys_1.BufferJSON.reviver);
|
|
270
|
+
if (data.type === 'group') {
|
|
271
|
+
await wa.socket.groupLeave(cid);
|
|
272
|
+
}
|
|
273
|
+
else {
|
|
274
|
+
await wa.socket.chatModify({ delete: true, lastMessages: [] }, cid);
|
|
275
|
+
}
|
|
276
|
+
await _Chat.cascade_delete(cid);
|
|
277
|
+
return true;
|
|
278
|
+
}
|
|
279
|
+
/**
|
|
280
|
+
* @description Agrega un mensaje al índice del chat.
|
|
281
|
+
* @param cid ID del chat.
|
|
282
|
+
* @param mid ID del mensaje.
|
|
283
|
+
* @param timestamp Timestamp de creación.
|
|
284
|
+
*/
|
|
285
|
+
static async add_message(cid, mid, timestamp) {
|
|
286
|
+
const key = `chat/${cid}/messages`;
|
|
287
|
+
const line = `${timestamp} ${mid}`;
|
|
288
|
+
const current = await wa.engine.get(key);
|
|
289
|
+
await wa.engine.set(key, current ? `${line}\n${current}` : line);
|
|
290
|
+
}
|
|
291
|
+
/**
|
|
292
|
+
* @description Elimina un mensaje del índice del chat.
|
|
293
|
+
* @param cid ID del chat.
|
|
294
|
+
* @param mid ID del mensaje.
|
|
295
|
+
*/
|
|
296
|
+
static async remove_message(cid, mid) {
|
|
297
|
+
const key = `chat/${cid}/messages`;
|
|
298
|
+
const content = await wa.engine.get(key);
|
|
299
|
+
if (!content)
|
|
300
|
+
return;
|
|
301
|
+
const filtered = content
|
|
302
|
+
.trim()
|
|
303
|
+
.split('\n')
|
|
304
|
+
.filter((line) => !line.endsWith(` ${mid}`))
|
|
305
|
+
.join('\n');
|
|
306
|
+
await wa.engine.set(key, filtered || null);
|
|
307
|
+
}
|
|
308
|
+
/**
|
|
309
|
+
* @description Lista IDs de mensajes del chat (paginado).
|
|
310
|
+
* @param cid ID del chat.
|
|
311
|
+
* @param offset Inicio de paginación.
|
|
312
|
+
* @param limit Cantidad máxima.
|
|
313
|
+
* @returns Array de IDs de mensajes.
|
|
314
|
+
*/
|
|
315
|
+
static async list_messages(cid, offset = 0, limit = 50) {
|
|
316
|
+
const content = await wa.engine.get(`chat/${cid}/messages`);
|
|
317
|
+
if (!content)
|
|
318
|
+
return [];
|
|
319
|
+
return content
|
|
320
|
+
.trim()
|
|
321
|
+
.split('\n')
|
|
322
|
+
.slice(offset, offset + limit)
|
|
323
|
+
.map((line) => line.split(' ')[1])
|
|
324
|
+
.filter(Boolean);
|
|
325
|
+
}
|
|
326
|
+
/**
|
|
327
|
+
* @description Cuenta mensajes del chat.
|
|
328
|
+
* @param cid ID del chat.
|
|
329
|
+
* @returns Cantidad de mensajes.
|
|
330
|
+
*/
|
|
331
|
+
static async count_messages(cid) {
|
|
332
|
+
const content = await wa.engine.get(`chat/${cid}/messages`);
|
|
333
|
+
if (!content)
|
|
334
|
+
return 0;
|
|
335
|
+
return content.trim().split('\n').filter(Boolean).length;
|
|
336
|
+
}
|
|
337
|
+
/**
|
|
338
|
+
* @description Obtiene los miembros de un chat.
|
|
339
|
+
* @param cid ID del chat.
|
|
340
|
+
* @param offset Inicio de paginación.
|
|
341
|
+
* @param limit Cantidad máxima de resultados.
|
|
342
|
+
* @returns Array de contactos.
|
|
343
|
+
*/
|
|
344
|
+
static async members(cid, offset = 0, limit = 50) {
|
|
345
|
+
if (!cid.endsWith('@g.us') || !wa.socket) {
|
|
346
|
+
const contact = await wa.Contact.get(cid);
|
|
347
|
+
return contact ? [contact] : [];
|
|
348
|
+
}
|
|
349
|
+
const members = [];
|
|
350
|
+
for (const p of (await wa.socket.groupMetadata(cid)).participants.slice(offset, offset + limit)) {
|
|
351
|
+
const existing = await wa.Contact.get(p.id);
|
|
352
|
+
if (existing) {
|
|
353
|
+
members.push(existing);
|
|
354
|
+
}
|
|
355
|
+
else {
|
|
356
|
+
const raw = { id: p.id };
|
|
357
|
+
const data = (0, Contact_1.build_contact)(raw);
|
|
358
|
+
await wa.engine.set(`contact/${p.id}/index`, JSON.stringify(data, baileys_1.BufferJSON.replacer));
|
|
359
|
+
members.push(new wa.Contact(data));
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
return members;
|
|
363
|
+
}
|
|
364
|
+
/**
|
|
365
|
+
* @description Obtiene mensajes del chat (paginados).
|
|
366
|
+
* @param offset Inicio de paginación.
|
|
367
|
+
* @param limit Cantidad máxima de resultados.
|
|
368
|
+
* @returns Array de mensajes.
|
|
369
|
+
*/
|
|
370
|
+
async messages(offset = 0, limit = 50) {
|
|
371
|
+
const ids = await _Chat.list_messages(this.id, offset, limit);
|
|
372
|
+
const messages = [];
|
|
373
|
+
for (const mid of ids) {
|
|
374
|
+
const msg = await wa.Message.get(this.id, mid);
|
|
375
|
+
if (msg)
|
|
376
|
+
messages.push(msg);
|
|
377
|
+
}
|
|
378
|
+
return messages;
|
|
379
|
+
}
|
|
380
|
+
/**
|
|
381
|
+
* @description Actualiza los datos del chat desde WhatsApp.
|
|
382
|
+
* @returns this con datos actualizados, o null si falla.
|
|
383
|
+
*/
|
|
384
|
+
async refresh() {
|
|
385
|
+
const updated = await _Chat.refresh(this.id);
|
|
386
|
+
if (!updated)
|
|
387
|
+
return null;
|
|
388
|
+
Object.assign(this.raw, updated.raw);
|
|
389
|
+
return this;
|
|
390
|
+
}
|
|
391
|
+
};
|
|
392
|
+
return _Chat;
|
|
393
|
+
}
|
|
394
|
+
// Import para la factory
|
|
395
|
+
const Contact_1 = require("./Contact");
|
|
396
|
+
//# sourceMappingURL=Chat.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Chat.js","sourceRoot":"","sources":["../src/Chat.ts"],"names":[],"mappings":"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"}
|