@indexnetwork/protocol 0.4.0-rc.12.1 → 0.4.0-rc.15.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/dist/agent/agent.tools.d.ts +3 -0
- package/dist/agent/agent.tools.d.ts.map +1 -0
- package/dist/agent/agent.tools.js +330 -0
- package/dist/agent/agent.tools.js.map +1 -0
- package/dist/chat/chat.agent.d.ts.map +1 -1
- package/dist/chat/chat.agent.js +7 -6
- package/dist/chat/chat.agent.js.map +1 -1
- package/dist/index.d.ts +6 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/mcp/mcp.server.d.ts +1 -1
- package/dist/mcp/mcp.server.d.ts.map +1 -1
- package/dist/mcp/mcp.server.js +6 -3
- package/dist/mcp/mcp.server.js.map +1 -1
- package/dist/negotiation/negotiation.agent.d.ts +30 -0
- package/dist/negotiation/negotiation.agent.d.ts.map +1 -0
- package/dist/negotiation/negotiation.agent.js +92 -0
- package/dist/negotiation/negotiation.agent.js.map +1 -0
- package/dist/negotiation/negotiation.graph.d.ts +138 -166
- package/dist/negotiation/negotiation.graph.d.ts.map +1 -1
- package/dist/negotiation/negotiation.graph.js +85 -80
- package/dist/negotiation/negotiation.graph.js.map +1 -1
- package/dist/negotiation/negotiation.state.d.ts +128 -34
- package/dist/negotiation/negotiation.state.d.ts.map +1 -1
- package/dist/negotiation/negotiation.state.js +45 -14
- package/dist/negotiation/negotiation.state.js.map +1 -1
- package/dist/negotiation/negotiation.tools.d.ts.map +1 -1
- package/dist/negotiation/negotiation.tools.js +183 -172
- package/dist/negotiation/negotiation.tools.js.map +1 -1
- package/dist/opportunity/opportunity.evaluator.d.ts.map +1 -1
- package/dist/opportunity/opportunity.evaluator.js +35 -10
- package/dist/opportunity/opportunity.evaluator.js.map +1 -1
- package/dist/opportunity/opportunity.graph.d.ts +30 -0
- package/dist/opportunity/opportunity.graph.d.ts.map +1 -1
- package/dist/opportunity/opportunity.graph.js +45 -8
- package/dist/opportunity/opportunity.graph.js.map +1 -1
- package/dist/opportunity/opportunity.tools.d.ts.map +1 -1
- package/dist/opportunity/opportunity.tools.js +12 -4
- package/dist/opportunity/opportunity.tools.js.map +1 -1
- package/dist/profile/profile.tools.d.ts.map +1 -1
- package/dist/profile/profile.tools.js +12 -1
- package/dist/profile/profile.tools.js.map +1 -1
- package/dist/shared/agent/model.config.d.ts +1 -4
- package/dist/shared/agent/model.config.d.ts.map +1 -1
- package/dist/shared/agent/model.config.js +1 -2
- package/dist/shared/agent/model.config.js.map +1 -1
- package/dist/shared/agent/tool.factory.d.ts.map +1 -1
- package/dist/shared/agent/tool.factory.js +12 -6
- package/dist/shared/agent/tool.factory.js.map +1 -1
- package/dist/shared/agent/tool.helpers.d.ts +17 -9
- package/dist/shared/agent/tool.helpers.d.ts.map +1 -1
- package/dist/shared/agent/tool.helpers.js.map +1 -1
- package/dist/shared/agent/tool.registry.d.ts.map +1 -1
- package/dist/shared/agent/tool.registry.js +2 -0
- package/dist/shared/agent/tool.registry.js.map +1 -1
- package/dist/shared/interfaces/agent-dispatcher.interface.d.ts +68 -0
- package/dist/shared/interfaces/agent-dispatcher.interface.d.ts.map +1 -0
- package/dist/shared/interfaces/agent-dispatcher.interface.js +9 -0
- package/dist/shared/interfaces/agent-dispatcher.interface.js.map +1 -0
- package/dist/shared/interfaces/agent.interface.d.ts +176 -0
- package/dist/shared/interfaces/agent.interface.d.ts.map +1 -0
- package/dist/shared/interfaces/agent.interface.js +15 -0
- package/dist/shared/interfaces/agent.interface.js.map +1 -0
- package/dist/shared/interfaces/auth.interface.d.ts +10 -3
- package/dist/shared/interfaces/auth.interface.d.ts.map +1 -1
- package/dist/shared/interfaces/database.interface.d.ts +1 -1
- package/dist/shared/interfaces/database.interface.d.ts.map +1 -1
- package/dist/shared/interfaces/negotiation-events.interface.d.ts +2 -34
- package/dist/shared/interfaces/negotiation-events.interface.d.ts.map +1 -1
- package/dist/shared/interfaces/negotiation-events.interface.js +2 -2
- package/package.json +1 -1
- package/dist/negotiation/negotiation.proposer.d.ts +0 -26
- package/dist/negotiation/negotiation.proposer.d.ts.map +0 -1
- package/dist/negotiation/negotiation.proposer.js +0 -67
- package/dist/negotiation/negotiation.proposer.js.map +0 -1
- package/dist/negotiation/negotiation.responder.d.ts +0 -26
- package/dist/negotiation/negotiation.responder.d.ts.map +0 -1
- package/dist/negotiation/negotiation.responder.js +0 -71
- package/dist/negotiation/negotiation.responder.js.map +0 -1
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
import { createModel } from "../shared/agent/model.config.js";
|
|
2
|
-
import { NegotiationTurnSchema } from "./negotiation.state.js";
|
|
3
|
-
const SYSTEM_PROMPT = `You are a negotiation agent representing your user in an opportunity matching system.
|
|
4
|
-
Your role is to PROPOSE and ARGUE FOR a potential match between your user and another user.
|
|
5
|
-
|
|
6
|
-
You will receive:
|
|
7
|
-
- Your user's profile, intents, and context
|
|
8
|
-
- The other user's profile, intents, and context
|
|
9
|
-
- An initial assessment from a pre-screening evaluator
|
|
10
|
-
- Any prior negotiation history
|
|
11
|
-
|
|
12
|
-
Your job:
|
|
13
|
-
1. On the FIRST turn: Propose the match. Explain why this connection would benefit both parties. Set action to "propose".
|
|
14
|
-
2. On SUBSEQUENT turns (after a counter from the other agent): Address their objections. Either:
|
|
15
|
-
- "counter" with updated reasoning if you still believe in the match
|
|
16
|
-
- "accept" if the other agent's counter is reasonable and you agree
|
|
17
|
-
- "reject" if their objections reveal this is genuinely not a good match
|
|
18
|
-
|
|
19
|
-
Rules:
|
|
20
|
-
- Be honest. Do not hallucinate fit where there is none.
|
|
21
|
-
- Focus on concrete intent alignment, not vague similarities.
|
|
22
|
-
- If the evaluator pre-screen score was low, acknowledge weaknesses.
|
|
23
|
-
- Your fitScore should reflect YOUR honest assessment, not just echo the seed score.
|
|
24
|
-
- suggestedRoles: "agent" = can help, "patient" = seeks help, "peer" = mutual benefit.`;
|
|
25
|
-
/**
|
|
26
|
-
* Negotiation agent that argues for the match.
|
|
27
|
-
* @remarks Uses structured output to produce a NegotiationTurn.
|
|
28
|
-
*/
|
|
29
|
-
export class NegotiationProposer {
|
|
30
|
-
constructor() {
|
|
31
|
-
this.model = createModel("negotiationProposer").withStructuredOutput(NegotiationTurnSchema, { name: "negotiation_proposer" });
|
|
32
|
-
}
|
|
33
|
-
/**
|
|
34
|
-
* Generate a proposal or counter-proposal turn.
|
|
35
|
-
* @param input - User contexts, seed assessment, and negotiation history
|
|
36
|
-
* @returns A structured NegotiationTurn
|
|
37
|
-
*/
|
|
38
|
-
async invoke(input) {
|
|
39
|
-
const historyText = input.history.length > 0
|
|
40
|
-
? `\n\nNegotiation history:\n${input.history.map((t, i) => `Turn ${i + 1}: ${t.action} — fitScore: ${t.assessment.fitScore}, reasoning: ${t.assessment.reasoning}`).join("\n")}`
|
|
41
|
-
: "";
|
|
42
|
-
const userMessage = `YOUR USER:
|
|
43
|
-
Name: ${input.ownUser.profile.name ?? "Unknown"}
|
|
44
|
-
Bio: ${input.ownUser.profile.bio ?? "N/A"}
|
|
45
|
-
Skills: ${input.ownUser.profile.skills?.join(", ") ?? "N/A"}
|
|
46
|
-
Intents: ${input.ownUser.intents.map((i) => `- ${i.title}: ${i.description} (confidence: ${i.confidence})`).join("\n")}
|
|
47
|
-
|
|
48
|
-
OTHER USER:
|
|
49
|
-
Name: ${input.otherUser.profile.name ?? "Unknown"}
|
|
50
|
-
Bio: ${input.otherUser.profile.bio ?? "N/A"}
|
|
51
|
-
Skills: ${input.otherUser.profile.skills?.join(", ") ?? "N/A"}
|
|
52
|
-
Intents: ${input.otherUser.intents.map((i) => `- ${i.title}: ${i.description} (confidence: ${i.confidence})`).join("\n")}
|
|
53
|
-
|
|
54
|
-
INDEX CONTEXT: ${input.indexContext.prompt || "General discovery"}
|
|
55
|
-
|
|
56
|
-
EVALUATOR PRE-SCREEN: Score ${input.seedAssessment.score}/100 — ${input.seedAssessment.reasoning}
|
|
57
|
-
Suggested role: ${input.seedAssessment.valencyRole}${historyText}
|
|
58
|
-
|
|
59
|
-
${input.history.length === 0 ? "This is the opening turn. Propose the match." : "The other agent countered. Respond to their objections."}`;
|
|
60
|
-
const result = await this.model.invoke([
|
|
61
|
-
{ role: "system", content: SYSTEM_PROMPT },
|
|
62
|
-
{ role: "user", content: userMessage },
|
|
63
|
-
]);
|
|
64
|
-
return result;
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
//# sourceMappingURL=negotiation.proposer.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"negotiation.proposer.js","sourceRoot":"","sources":["../../src/negotiation/negotiation.proposer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAA0E,MAAM,wBAAwB,CAAC;AAEvI,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;;uFAqBiE,CAAC;AAUxF;;;GAGG;AACH,MAAM,OAAO,mBAAmB;IAG9B;QACE,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC,qBAAqB,CAAC,CAAC,oBAAoB,CAClE,qBAAqB,EACrB,EAAE,IAAI,EAAE,sBAAsB,EAAE,CACjC,CAAC;IACJ,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,MAAM,CAAC,KAA+B;QAC1C,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;YAC1C,CAAC,CAAC,6BAA6B,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,MAAM,gBAAgB,CAAC,CAAC,UAAU,CAAC,QAAQ,gBAAgB,CAAC,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YAChL,CAAC,CAAC,EAAE,CAAC;QAEP,MAAM,WAAW,GAAG;QAChB,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,IAAI,SAAS;OACxC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI,KAAK;UAC/B,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK;WAChD,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,WAAW,iBAAiB,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;;;QAG9G,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,IAAI,SAAS;OAC1C,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,IAAI,KAAK;UACjC,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK;WAClD,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,WAAW,iBAAiB,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;;iBAEvG,KAAK,CAAC,YAAY,CAAC,MAAM,IAAI,mBAAmB;;8BAEnC,KAAK,CAAC,cAAc,CAAC,KAAK,UAAU,KAAK,CAAC,cAAc,CAAC,SAAS;kBAC9E,KAAK,CAAC,cAAc,CAAC,WAAW,GAAG,WAAW;;EAE9D,KAAK,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,8CAA8C,CAAC,CAAC,CAAC,yDAAyD,EAAE,CAAC;QAExI,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;YACrC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,aAAa,EAAE;YAC1C,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE;SACvC,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC;IAChB,CAAC;CACF"}
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import { type NegotiationTurn, type UserNegotiationContext, type SeedAssessment } from "./negotiation.state.js";
|
|
2
|
-
export interface NegotiationResponderInput {
|
|
3
|
-
ownUser: UserNegotiationContext;
|
|
4
|
-
otherUser: UserNegotiationContext;
|
|
5
|
-
indexContext: {
|
|
6
|
-
networkId: string;
|
|
7
|
-
prompt: string;
|
|
8
|
-
};
|
|
9
|
-
seedAssessment: SeedAssessment;
|
|
10
|
-
history: NegotiationTurn[];
|
|
11
|
-
}
|
|
12
|
-
/**
|
|
13
|
-
* Negotiation agent that evaluates proposals against its user's interests.
|
|
14
|
-
* @remarks Uses structured output to produce a NegotiationTurn.
|
|
15
|
-
*/
|
|
16
|
-
export declare class NegotiationResponder {
|
|
17
|
-
private model;
|
|
18
|
-
constructor();
|
|
19
|
-
/**
|
|
20
|
-
* Evaluate a proposal/counter and respond.
|
|
21
|
-
* @param input - User contexts, seed assessment, and negotiation history
|
|
22
|
-
* @returns A structured NegotiationTurn (accept/reject/counter)
|
|
23
|
-
*/
|
|
24
|
-
invoke(input: NegotiationResponderInput): Promise<NegotiationTurn>;
|
|
25
|
-
}
|
|
26
|
-
//# sourceMappingURL=negotiation.responder.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"negotiation.responder.d.ts","sourceRoot":"","sources":["../../src/negotiation/negotiation.responder.ts"],"names":[],"mappings":"AACA,OAAO,EAAyB,KAAK,eAAe,EAAE,KAAK,sBAAsB,EAAE,KAAK,cAAc,EAAE,MAAM,wBAAwB,CAAC;AA2BvI,MAAM,WAAW,yBAAyB;IACxC,OAAO,EAAE,sBAAsB,CAAC;IAChC,SAAS,EAAE,sBAAsB,CAAC;IAClC,YAAY,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IACpD,cAAc,EAAE,cAAc,CAAC;IAC/B,OAAO,EAAE,eAAe,EAAE,CAAC;CAC5B;AAED;;;GAGG;AACH,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,KAAK,CAAC;;IASd;;;;OAIG;IACG,MAAM,CAAC,KAAK,EAAE,yBAAyB,GAAG,OAAO,CAAC,eAAe,CAAC;CAiCzE"}
|
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
import { createModel } from "../shared/agent/model.config.js";
|
|
2
|
-
import { NegotiationTurnSchema } from "./negotiation.state.js";
|
|
3
|
-
const SYSTEM_PROMPT = `You are a negotiation agent representing your user in an opportunity matching system.
|
|
4
|
-
Your role is to EVALUATE proposals and PROTECT your user from poor matches.
|
|
5
|
-
|
|
6
|
-
You will receive:
|
|
7
|
-
- Your user's profile, intents, and context
|
|
8
|
-
- The other user's profile, intents, and context
|
|
9
|
-
- The proposal or counter-proposal from the other agent
|
|
10
|
-
- Full negotiation history
|
|
11
|
-
|
|
12
|
-
Your job:
|
|
13
|
-
1. Critically evaluate whether this match genuinely serves YOUR user's intents.
|
|
14
|
-
2. Respond with one of:
|
|
15
|
-
- "accept" — the match is genuinely valuable for your user. Both sides benefit.
|
|
16
|
-
- "reject" — the match does not serve your user's needs. Explain clearly why.
|
|
17
|
-
- "counter" — partially convinced but have specific objections. State what's missing or weak.
|
|
18
|
-
|
|
19
|
-
Rules:
|
|
20
|
-
- Be skeptical. Your job is to protect your user from noise.
|
|
21
|
-
- Don't accept just because the other agent is enthusiastic.
|
|
22
|
-
- Look for concrete intent alignment, not vague overlap.
|
|
23
|
-
- If the other agent addressed your previous objections well, acknowledge it.
|
|
24
|
-
- If their counter didn't address your concerns, reject.
|
|
25
|
-
- Your fitScore should reflect YOUR independent assessment.
|
|
26
|
-
- suggestedRoles: "agent" = can help, "patient" = seeks help, "peer" = mutual benefit.`;
|
|
27
|
-
/**
|
|
28
|
-
* Negotiation agent that evaluates proposals against its user's interests.
|
|
29
|
-
* @remarks Uses structured output to produce a NegotiationTurn.
|
|
30
|
-
*/
|
|
31
|
-
export class NegotiationResponder {
|
|
32
|
-
constructor() {
|
|
33
|
-
this.model = createModel("negotiationResponder").withStructuredOutput(NegotiationTurnSchema, { name: "negotiation_responder" });
|
|
34
|
-
}
|
|
35
|
-
/**
|
|
36
|
-
* Evaluate a proposal/counter and respond.
|
|
37
|
-
* @param input - User contexts, seed assessment, and negotiation history
|
|
38
|
-
* @returns A structured NegotiationTurn (accept/reject/counter)
|
|
39
|
-
*/
|
|
40
|
-
async invoke(input) {
|
|
41
|
-
const historyText = input.history
|
|
42
|
-
.map((t, i) => `Turn ${i + 1}: ${t.action} — fitScore: ${t.assessment.fitScore}, reasoning: ${t.assessment.reasoning}`)
|
|
43
|
-
.join("\n");
|
|
44
|
-
const userMessage = `YOUR USER:
|
|
45
|
-
Name: ${input.ownUser.profile.name ?? "Unknown"}
|
|
46
|
-
Bio: ${input.ownUser.profile.bio ?? "N/A"}
|
|
47
|
-
Skills: ${input.ownUser.profile.skills?.join(", ") ?? "N/A"}
|
|
48
|
-
Intents: ${input.ownUser.intents.map((i) => `- ${i.title}: ${i.description} (confidence: ${i.confidence})`).join("\n")}
|
|
49
|
-
|
|
50
|
-
OTHER USER (proposing the match):
|
|
51
|
-
Name: ${input.otherUser.profile.name ?? "Unknown"}
|
|
52
|
-
Bio: ${input.otherUser.profile.bio ?? "N/A"}
|
|
53
|
-
Skills: ${input.otherUser.profile.skills?.join(", ") ?? "N/A"}
|
|
54
|
-
Intents: ${input.otherUser.intents.map((i) => `- ${i.title}: ${i.description} (confidence: ${i.confidence})`).join("\n")}
|
|
55
|
-
|
|
56
|
-
INDEX CONTEXT: ${input.indexContext.prompt || "General discovery"}
|
|
57
|
-
|
|
58
|
-
EVALUATOR PRE-SCREEN: Score ${input.seedAssessment.score}/100 — ${input.seedAssessment.reasoning}
|
|
59
|
-
|
|
60
|
-
NEGOTIATION HISTORY:
|
|
61
|
-
${historyText}
|
|
62
|
-
|
|
63
|
-
Evaluate the latest proposal/counter from the other agent. Does this match genuinely serve your user?`;
|
|
64
|
-
const result = await this.model.invoke([
|
|
65
|
-
{ role: "system", content: SYSTEM_PROMPT },
|
|
66
|
-
{ role: "user", content: userMessage },
|
|
67
|
-
]);
|
|
68
|
-
return result;
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
//# sourceMappingURL=negotiation.responder.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"negotiation.responder.js","sourceRoot":"","sources":["../../src/negotiation/negotiation.responder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAA0E,MAAM,wBAAwB,CAAC;AAEvI,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;;;;uFAuBiE,CAAC;AAUxF;;;GAGG;AACH,MAAM,OAAO,oBAAoB;IAG/B;QACE,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC,sBAAsB,CAAC,CAAC,oBAAoB,CACnE,qBAAqB,EACrB,EAAE,IAAI,EAAE,uBAAuB,EAAE,CAClC,CAAC;IACJ,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,MAAM,CAAC,KAAgC;QAC3C,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO;aAC9B,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,MAAM,gBAAgB,CAAC,CAAC,UAAU,CAAC,QAAQ,gBAAgB,CAAC,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC;aACtH,IAAI,CAAC,IAAI,CAAC,CAAC;QAEd,MAAM,WAAW,GAAG;QAChB,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,IAAI,SAAS;OACxC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI,KAAK;UAC/B,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK;WAChD,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,WAAW,iBAAiB,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;;;QAG9G,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,IAAI,SAAS;OAC1C,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,IAAI,KAAK;UACjC,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK;WAClD,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,WAAW,iBAAiB,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;;iBAEvG,KAAK,CAAC,YAAY,CAAC,MAAM,IAAI,mBAAmB;;8BAEnC,KAAK,CAAC,cAAc,CAAC,KAAK,UAAU,KAAK,CAAC,cAAc,CAAC,SAAS;;;EAG9F,WAAW;;sGAEyF,CAAC;QAEnG,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;YACrC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,aAAa,EAAE;YAC1C,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE;SACvC,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC;IAChB,CAAC;CACF"}
|