@convai/web-sdk 1.2.0 → 1.2.1-beta.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.
- package/README.md +202 -27
- package/dist/core/ConvaiClient.d.ts +8 -7
- package/dist/core/ConvaiClient.d.ts.map +1 -1
- package/dist/core/ConvaiClient.js +109 -33
- package/dist/core/ConvaiClient.js.map +1 -1
- package/dist/core/MessageHandler.d.ts +1 -7
- package/dist/core/MessageHandler.d.ts.map +1 -1
- package/dist/core/MessageHandler.js +35 -27
- package/dist/core/MessageHandler.js.map +1 -1
- package/dist/core/types.d.ts +124 -8
- package/dist/core/types.d.ts.map +1 -1
- package/dist/index.d.ts +0 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/lipsync-helpers/mappingTypes.d.ts +1 -1
- package/dist/lipsync-helpers/mappingTypes.js +4 -4
- package/dist/react/components/ConvaiWidget.d.ts.map +1 -1
- package/dist/react/components/ConvaiWidget.js +1 -1
- package/dist/react/components/ConvaiWidget.js.map +1 -1
- package/dist/react/components/rtc-widget/components/conviComponents/ConviFooter.js +1 -1
- package/dist/react/components/rtc-widget/components/conviComponents/ConviFooter.js.map +1 -1
- package/dist/react/hooks/useConvaiClient.d.ts.map +1 -1
- package/dist/react/hooks/useConvaiClient.js +2 -1
- package/dist/react/hooks/useConvaiClient.js.map +1 -1
- package/dist/types/index.d.ts +122 -5
- package/dist/types/index.d.ts.map +1 -1
- package/dist/vanilla/ConvaiWidget.d.ts.map +1 -1
- package/dist/vanilla/ConvaiWidget.js +1 -1
- package/dist/vanilla/ConvaiWidget.js.map +1 -1
- package/dist/vanilla/index.d.ts +2 -1
- package/dist/vanilla/index.d.ts.map +1 -1
- package/dist/vanilla/index.js +2 -0
- package/dist/vanilla/index.js.map +1 -1
- package/dist/vanilla/types.d.ts +0 -1
- package/dist/vanilla/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/dist/dev.d.ts +0 -12
- package/dist/dev.d.ts.map +0 -1
- package/dist/dev.js +0 -12
- package/dist/dev.js.map +0 -1
- package/dist/utils/LatencyMonitor.d.ts +0 -88
- package/dist/utils/LatencyMonitor.d.ts.map +0 -1
- package/dist/utils/LatencyMonitor.js +0 -136
- package/dist/utils/LatencyMonitor.js.map +0 -1
- package/dist/utils/speakerManagement.d.ts +0 -22
- package/dist/utils/speakerManagement.d.ts.map +0 -1
- package/dist/utils/speakerManagement.js +0 -64
- package/dist/utils/speakerManagement.js.map +0 -1
package/README.md
CHANGED
|
@@ -55,10 +55,6 @@ Primary exports:
|
|
|
55
55
|
- `ScreenShareControls`
|
|
56
56
|
- `IConvaiClient`
|
|
57
57
|
- All exports from `@convai/web-sdk/lipsync-helpers`
|
|
58
|
-
- Type exports for latency models:
|
|
59
|
-
- `LatencyMonitor` (type)
|
|
60
|
-
- `LatencyMeasurement`
|
|
61
|
-
- `LatencyStats`
|
|
62
58
|
|
|
63
59
|
### `@convai/web-sdk/react`
|
|
64
60
|
|
|
@@ -212,6 +208,11 @@ const convaiClient = useConvaiClient({
|
|
|
212
208
|
apiKey: import.meta.env.VITE_CONVAI_API_KEY,
|
|
213
209
|
characterId: import.meta.env.VITE_CONVAI_CHARACTER_ID,
|
|
214
210
|
endUserId: "<UNIQUE_END_USER_ID>",
|
|
211
|
+
endUserMetadata: {
|
|
212
|
+
name: "John Doe",
|
|
213
|
+
age: "30",
|
|
214
|
+
// Add any additional metadata you want to send
|
|
215
|
+
},
|
|
215
216
|
enableVideo: true,
|
|
216
217
|
startWithVideoOn: false,
|
|
217
218
|
startWithAudioOn: false,
|
|
@@ -268,6 +269,16 @@ useEffect(() => {
|
|
|
268
269
|
|
|
269
270
|
const unsubState = convaiClient.on("stateChange", (state) => {
|
|
270
271
|
console.log("State:", state.agentState);
|
|
272
|
+
|
|
273
|
+
// Access end user information from connection response
|
|
274
|
+
if (state.endUserId) {
|
|
275
|
+
console.log("End User ID:", state.endUserId);
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
if (state.endUserMetadata) {
|
|
279
|
+
console.log("End User Metadata:", state.endUserMetadata);
|
|
280
|
+
// Example: { name: 'John', age: '30' }
|
|
281
|
+
}
|
|
271
282
|
});
|
|
272
283
|
|
|
273
284
|
const unsubMessages = convaiClient.on("messagesChange", (messages) => {
|
|
@@ -389,6 +400,9 @@ await client.disconnect();
|
|
|
389
400
|
- `state.isThinking`: model is generating response
|
|
390
401
|
- `state.isSpeaking`: model audio is currently speaking
|
|
391
402
|
- `state.agentState`: combined high-level state (`disconnected | connected | listening | thinking | speaking`)
|
|
403
|
+
- `state.endUserId`: end user ID returned from the connection response (if provided in config)
|
|
404
|
+
- `state.endUserMetadata`: end user metadata returned from the connection response (if provided in config)
|
|
405
|
+
- `state.metrics`: array of metrics events received during the current session (clears on `resetSession()`)
|
|
392
406
|
|
|
393
407
|
### Widget lifecycle
|
|
394
408
|
|
|
@@ -405,6 +419,7 @@ Both React and vanilla widgets:
|
|
|
405
419
|
| `apiKey` | `string` | Yes | - | Convai API key. |
|
|
406
420
|
| `characterId` | `string` | Yes | - | Target character identifier. |
|
|
407
421
|
| `endUserId` | `string` | No | `undefined` | Stable end-user identity for memory/analytics continuity. |
|
|
422
|
+
| `endUserMetadata` | `Record<string, unknown>` | No | `undefined` | Additional end-user metadata (e.g., name, age) sent with the connection request. |
|
|
408
423
|
| `url` | `string` | No | SDK internal default | Convai base URL. Set explicitly if your deployment requires a specific environment. |
|
|
409
424
|
| `enableVideo` | `boolean` | No | `false` | Enables video-capable connection type. |
|
|
410
425
|
| `startWithVideoOn` | `boolean` | No | `false` | Auto-enable camera after connect. |
|
|
@@ -423,6 +438,24 @@ Import:
|
|
|
423
438
|
import { ConvaiClient } from "@convai/web-sdk/core";
|
|
424
439
|
```
|
|
425
440
|
|
|
441
|
+
### ConvaiClient types
|
|
442
|
+
|
|
443
|
+
For TypeScript, use the types exported from the main package or core:
|
|
444
|
+
|
|
445
|
+
- **`IConvaiClient`** — Interface implemented by `ConvaiClient`. Use this when you need to type variables, props, or function parameters that accept the client (e.g. `client: IConvaiClient`).
|
|
446
|
+
- **`ConvaiClientState`** — Shape of `client.state` (connection and activity flags: `isConnected`, `isBotReady`, `agentState`, `emotion`, `endUserId`, `endUserMetadata`, `metrics`, etc.).
|
|
447
|
+
- **`ConvaiConfig`** — Configuration object for `new ConvaiClient(config)` and `client.connect(config)`.
|
|
448
|
+
- **`ChatMessage`** — Single message in `client.chatMessages`.
|
|
449
|
+
- **`ConvaiMetrics`** — Metrics event structure containing data, timestamp, and unique identifier.
|
|
450
|
+
- **`AudioControls`**, **`VideoControls`**, **`ScreenShareControls`** — Types for the control managers exposed as `client.audioControls`, `client.videoControls`, `client.screenShareControls`.
|
|
451
|
+
|
|
452
|
+
Example:
|
|
453
|
+
|
|
454
|
+
```ts
|
|
455
|
+
import type { IConvaiClient, ConvaiClientState, ConvaiConfig, ConvaiMetrics } from "@convai/web-sdk";
|
|
456
|
+
// or from "@convai/web-sdk/core" when using core-only
|
|
457
|
+
```
|
|
458
|
+
|
|
426
459
|
### Constructor
|
|
427
460
|
|
|
428
461
|
```ts
|
|
@@ -446,7 +479,6 @@ new ConvaiClient(config?: ConvaiConfig)
|
|
|
446
479
|
| `audioControls` | `AudioControls` | Microphone controls. |
|
|
447
480
|
| `videoControls` | `VideoControls` | Camera controls. |
|
|
448
481
|
| `screenShareControls` | `ScreenShareControls` | Screen sharing controls. |
|
|
449
|
-
| `latencyMonitor` | `LatencyMonitor` | Measurement manager used by the client for turn latency. |
|
|
450
482
|
| `blendshapeQueue` | `BlendshapeQueue` | Buffer queue for lipsync frames. |
|
|
451
483
|
| `conversationSessionId` | `number` | Incremental turn session ID used by conversation events. |
|
|
452
484
|
|
|
@@ -462,7 +494,7 @@ new ConvaiClient(config?: ConvaiConfig)
|
|
|
462
494
|
| `sendTriggerMessage` | `(triggerName?: string, triggerMessage?: string) => void` | Send trigger/action message. |
|
|
463
495
|
| `sendInterruptMessage` | `() => void` | Interrupt current bot response. |
|
|
464
496
|
| `updateTemplateKeys` | `(templateKeys: Record<string, string>) => void` | Update runtime template variables. |
|
|
465
|
-
| `updateDynamicInfo` | `(dynamicInfo:
|
|
497
|
+
| `updateDynamicInfo` | `(dynamicInfo: string) => void` | Update dynamic context with a text description. |
|
|
466
498
|
| `toggleTts` | `(enabled: boolean) => void` | Enable/disable TTS for subsequent responses. |
|
|
467
499
|
| `on` | `(event: string, callback: (...args: any[]) => void) => () => void` | Subscribe to an event and receive an unsubscribe function. |
|
|
468
500
|
| `off` | `(event: string, callback: (...args: any[]) => void) => void` | Remove a specific listener. |
|
|
@@ -484,7 +516,7 @@ new ConvaiClient(config?: ConvaiConfig)
|
|
|
484
516
|
| `turnEnd` | `{ sessionId, duration, timestamp }` | Server signaled end of turn (bot stopped speaking). Same semantics as `BlendshapeQueue.hasReceivedEndSignal()`. |
|
|
485
517
|
| `blendshapes` | `unknown` | Incoming blendshape chunk payload. |
|
|
486
518
|
| `blendshapeStatsReceived` | `unknown` | End-of-turn blendshape stats marker. |
|
|
487
|
-
| `
|
|
519
|
+
| `metrics` | `Record<string, unknown>` | Metrics data received from server. Multiple metrics events may occur per conversation. |
|
|
488
520
|
|
|
489
521
|
### Control manager APIs
|
|
490
522
|
|
|
@@ -547,30 +579,174 @@ Methods:
|
|
|
547
579
|
- `on("screenShareStateChange", callback)`
|
|
548
580
|
- `off("screenShareStateChange", callback)`
|
|
549
581
|
|
|
550
|
-
### `
|
|
582
|
+
### Using `updateDynamicInfo` for real-time context
|
|
551
583
|
|
|
552
|
-
`
|
|
584
|
+
The `updateDynamicInfo` method allows you to send real-time context to the character using a simple text description.
|
|
553
585
|
|
|
554
|
-
|
|
586
|
+
#### Basic usage
|
|
587
|
+
|
|
588
|
+
```tsx
|
|
589
|
+
// Simple text description
|
|
590
|
+
convaiClient.updateDynamicInfo("Player health is low");
|
|
591
|
+
```
|
|
555
592
|
|
|
556
|
-
|
|
557
|
-
- `disable()`
|
|
558
|
-
- `startMeasurement(type, userMessage?)`
|
|
559
|
-
- `endMeasurement()`
|
|
560
|
-
- `cancelMeasurement()`
|
|
561
|
-
- `getMeasurements()`
|
|
562
|
-
- `getLatestMeasurement()`
|
|
563
|
-
- `getStats()`
|
|
564
|
-
- `clear()`
|
|
565
|
-
- `getPendingMeasurement()`
|
|
566
|
-
- `on("measurement", callback)`
|
|
567
|
-
- `on("measurementsChange", callback)`
|
|
568
|
-
- `on("enabledChange", callback)`
|
|
593
|
+
#### Advanced usage with detailed context
|
|
569
594
|
|
|
570
|
-
|
|
595
|
+
```tsx
|
|
596
|
+
// Game state example
|
|
597
|
+
convaiClient.updateDynamicInfo(
|
|
598
|
+
"Player is in combat with 25% health and 40% stamina at battlefield location, 3 enemies nearby, equipped with sword"
|
|
599
|
+
);
|
|
600
|
+
```
|
|
601
|
+
|
|
602
|
+
#### Using in connect config
|
|
603
|
+
|
|
604
|
+
```tsx
|
|
605
|
+
const config: ConvaiConfig = {
|
|
606
|
+
apiKey: 'your-api-key',
|
|
607
|
+
characterId: 'your-character-id',
|
|
608
|
+
dynamicInfo: "Initial game state: Player at spawn point, level 1, tutorial not complete",
|
|
609
|
+
// Other config fields...
|
|
610
|
+
};
|
|
611
|
+
|
|
612
|
+
await convaiClient.connect(config);
|
|
613
|
+
```
|
|
614
|
+
|
|
615
|
+
#### Real-time updates example
|
|
616
|
+
|
|
617
|
+
```tsx
|
|
618
|
+
// Update context as game state changes
|
|
619
|
+
function updateCharacterContext(player: Player) {
|
|
620
|
+
const contextText = `Player health: ${player.health}%, mana: ${player.mana}%, location: ${player.location}, status: ${player.status}`;
|
|
621
|
+
|
|
622
|
+
convaiClient.updateDynamicInfo(contextText);
|
|
623
|
+
}
|
|
624
|
+
|
|
625
|
+
// Call whenever game state changes
|
|
626
|
+
player.on('stateChange', () => updateCharacterContext(player));
|
|
627
|
+
```
|
|
628
|
+
|
|
629
|
+
### Accessing metrics data
|
|
630
|
+
|
|
631
|
+
The SDK exposes metrics events received from the server through the client state. Multiple metrics events can be received during a single conversation.
|
|
632
|
+
|
|
633
|
+
#### Accessing metrics from client state
|
|
634
|
+
|
|
635
|
+
```tsx
|
|
636
|
+
// Access metrics array from state
|
|
637
|
+
const metrics = convaiClient.state.metrics;
|
|
638
|
+
|
|
639
|
+
// Log all metrics
|
|
640
|
+
console.log('Total metrics received:', metrics.length);
|
|
641
|
+
metrics.forEach(metric => {
|
|
642
|
+
console.log('Metric ID:', metric.id);
|
|
643
|
+
console.log('Timestamp:', metric.timestamp);
|
|
644
|
+
console.log('Data:', metric.data);
|
|
645
|
+
});
|
|
646
|
+
|
|
647
|
+
// Get latest metric
|
|
648
|
+
const latestMetric = metrics[metrics.length - 1];
|
|
649
|
+
if (latestMetric) {
|
|
650
|
+
console.log('Latest metric data:', latestMetric.data);
|
|
651
|
+
}
|
|
652
|
+
```
|
|
653
|
+
|
|
654
|
+
#### Listening to metrics events in real-time
|
|
655
|
+
|
|
656
|
+
```tsx
|
|
657
|
+
// Subscribe to metrics events
|
|
658
|
+
const unsubMetrics = convaiClient.on('metrics', (metricsData) => {
|
|
659
|
+
console.log('New metrics received:', metricsData);
|
|
660
|
+
|
|
661
|
+
// Process metrics data
|
|
662
|
+
if (metricsData.processingTime) {
|
|
663
|
+
console.log('Processing time:', metricsData.processingTime);
|
|
664
|
+
}
|
|
665
|
+
});
|
|
666
|
+
|
|
667
|
+
// Cleanup
|
|
668
|
+
unsubMetrics();
|
|
669
|
+
```
|
|
670
|
+
|
|
671
|
+
#### Accessing metrics in React
|
|
672
|
+
|
|
673
|
+
```tsx
|
|
674
|
+
import { useConvaiClient } from '@convai/web-sdk';
|
|
675
|
+
import { useEffect, useState } from 'react';
|
|
676
|
+
|
|
677
|
+
function MetricsDisplay() {
|
|
678
|
+
const convaiClient = useConvaiClient();
|
|
679
|
+
const [metrics, setMetrics] = useState<ConvaiMetrics[]>([]);
|
|
680
|
+
|
|
681
|
+
useEffect(() => {
|
|
682
|
+
// Subscribe to state changes
|
|
683
|
+
const unsubState = convaiClient.on('stateChange', (state) => {
|
|
684
|
+
setMetrics(state.metrics);
|
|
685
|
+
});
|
|
686
|
+
|
|
687
|
+
// Or subscribe to individual metrics events
|
|
688
|
+
const unsubMetrics = convaiClient.on('metrics', (metricsData) => {
|
|
689
|
+
console.log('New metrics:', metricsData);
|
|
690
|
+
});
|
|
571
691
|
|
|
572
|
-
|
|
573
|
-
|
|
692
|
+
return () => {
|
|
693
|
+
unsubState();
|
|
694
|
+
unsubMetrics();
|
|
695
|
+
};
|
|
696
|
+
}, [convaiClient]);
|
|
697
|
+
|
|
698
|
+
return (
|
|
699
|
+
<div>
|
|
700
|
+
<h3>Metrics ({metrics.length})</h3>
|
|
701
|
+
{metrics.map(metric => (
|
|
702
|
+
<div key={metric.id}>
|
|
703
|
+
<p>Time: {new Date(metric.timestamp).toLocaleTimeString()}</p>
|
|
704
|
+
<pre>{JSON.stringify(metric.data, null, 2)}</pre>
|
|
705
|
+
</div>
|
|
706
|
+
))}
|
|
707
|
+
</div>
|
|
708
|
+
);
|
|
709
|
+
}
|
|
710
|
+
```
|
|
711
|
+
|
|
712
|
+
#### Clearing metrics
|
|
713
|
+
|
|
714
|
+
Metrics are automatically cleared when you call `resetSession()` or `disconnect()`:
|
|
715
|
+
|
|
716
|
+
```tsx
|
|
717
|
+
// Clear conversation history and metrics
|
|
718
|
+
convaiClient.resetSession();
|
|
719
|
+
|
|
720
|
+
// Or disconnect (also clears metrics)
|
|
721
|
+
await convaiClient.disconnect();
|
|
722
|
+
```
|
|
723
|
+
|
|
724
|
+
#### Analyzing aggregated metrics
|
|
725
|
+
|
|
726
|
+
```tsx
|
|
727
|
+
function analyzeMetrics(client: IConvaiClient) {
|
|
728
|
+
const metrics = client.state.metrics;
|
|
729
|
+
|
|
730
|
+
// Calculate average processing time if present
|
|
731
|
+
const processingTimes = metrics
|
|
732
|
+
.map(m => m.data.processingTime as number)
|
|
733
|
+
.filter(t => typeof t === 'number');
|
|
734
|
+
|
|
735
|
+
if (processingTimes.length > 0) {
|
|
736
|
+
const avgTime = processingTimes.reduce((a, b) => a + b, 0) / processingTimes.length;
|
|
737
|
+
console.log('Average processing time:', avgTime.toFixed(2), 'ms');
|
|
738
|
+
}
|
|
739
|
+
|
|
740
|
+
// Count metrics by type if available
|
|
741
|
+
const metricsByType = metrics.reduce((acc, metric) => {
|
|
742
|
+
const type = (metric.data.type as string) || 'unknown';
|
|
743
|
+
acc[type] = (acc[type] || 0) + 1;
|
|
744
|
+
return acc;
|
|
745
|
+
}, {} as Record<string, number>);
|
|
746
|
+
|
|
747
|
+
console.log('Metrics by type:', metricsByType);
|
|
748
|
+
}
|
|
749
|
+
```
|
|
574
750
|
|
|
575
751
|
### Advanced core classes (`@convai/web-sdk/core`)
|
|
576
752
|
|
|
@@ -614,7 +790,6 @@ Properties:
|
|
|
614
790
|
Methods:
|
|
615
791
|
|
|
616
792
|
- `getBlendshapeQueue()`
|
|
617
|
-
- `setLatencyMonitor(monitor)`
|
|
618
793
|
- `getChatMessages()`
|
|
619
794
|
- `getUserTranscription()`
|
|
620
795
|
- `getIsBotResponding()`
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { Room } from "livekit-client";
|
|
2
|
-
import { ConvaiConfig, ConvaiClientState, ChatMessage, IConvaiClient, AudioControls, VideoControls, ScreenShareControls } from "./types";
|
|
2
|
+
import { ConvaiConfig, ConvaiClientState, ChatMessage, IConvaiClient, AudioControls, VideoControls, ScreenShareControls, DynamicInfo } from "./types";
|
|
3
3
|
import { EventEmitter } from "./EventEmitter";
|
|
4
|
-
import { LatencyMonitor } from "../utils/LatencyMonitor";
|
|
5
4
|
import { BlendshapeQueue } from "./BlendshapeQueue";
|
|
6
5
|
/**
|
|
7
6
|
* Main Convai client class for managing AI voice assistant connections
|
|
@@ -51,11 +50,12 @@ export declare class ConvaiClient extends EventEmitter implements IConvaiClient
|
|
|
51
50
|
private _participantSid;
|
|
52
51
|
private _audioSettings;
|
|
53
52
|
private _storedConfig;
|
|
53
|
+
private _endUserId;
|
|
54
|
+
private _endUserMetadata;
|
|
54
55
|
private _audioManager;
|
|
55
56
|
private _videoManager;
|
|
56
57
|
private _screenShareManager;
|
|
57
58
|
private _messageHandler;
|
|
58
|
-
private _latencyMonitor;
|
|
59
59
|
private _conversationSessionId;
|
|
60
60
|
private _conversationStartTime;
|
|
61
61
|
constructor(config?: ConvaiConfig);
|
|
@@ -72,7 +72,6 @@ export declare class ConvaiClient extends EventEmitter implements IConvaiClient
|
|
|
72
72
|
get audioControls(): AudioControls;
|
|
73
73
|
get videoControls(): VideoControls;
|
|
74
74
|
get screenShareControls(): ScreenShareControls;
|
|
75
|
-
get latencyMonitor(): LatencyMonitor;
|
|
76
75
|
get blendshapeQueue(): BlendshapeQueue;
|
|
77
76
|
get conversationSessionId(): number;
|
|
78
77
|
/**
|
|
@@ -138,12 +137,14 @@ export declare class ConvaiClient extends EventEmitter implements IConvaiClient
|
|
|
138
137
|
/**
|
|
139
138
|
* Update dynamic information about the current context
|
|
140
139
|
*/
|
|
141
|
-
updateDynamicInfo(dynamicInfo:
|
|
142
|
-
text: string;
|
|
143
|
-
}): void;
|
|
140
|
+
updateDynamicInfo(dynamicInfo: DynamicInfo): void;
|
|
144
141
|
/**
|
|
145
142
|
* Toggle text-to-speech on or off
|
|
146
143
|
*/
|
|
147
144
|
toggleTts(enabled: boolean): void;
|
|
145
|
+
/**
|
|
146
|
+
* Toggle speech-to-text on or off
|
|
147
|
+
*/
|
|
148
|
+
toggleStt(enabled: boolean): void;
|
|
148
149
|
}
|
|
149
150
|
//# sourceMappingURL=ConvaiClient.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConvaiClient.d.ts","sourceRoot":"","sources":["../../src/core/ConvaiClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,
|
|
1
|
+
{"version":3,"file":"ConvaiClient.d.ts","sourceRoot":"","sources":["../../src/core/ConvaiClient.ts"],"names":[],"mappings":"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"}
|