psadk 1.4.7 → 1.5.0

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.
Files changed (207) hide show
  1. package/README.md +153 -0
  2. package/build/main/index.d.ts +1 -0
  3. package/build/main/lib/PSAI.js +1 -2
  4. package/build/main/lib/PSAgent.d.ts +50 -13
  5. package/build/main/lib/PSAgent.js +179 -502
  6. package/build/main/lib/PSAgentConfig.d.ts +114 -2
  7. package/build/main/lib/PSAgentLogger.js +1 -2
  8. package/build/main/lib/PSAgentTool.d.ts +8 -3
  9. package/build/main/lib/PSAgentTool.js +3 -3
  10. package/build/main/lib/agent-core/package.json +1 -1
  11. package/build/main/lib/agent-core/{agent-loop.d.ts → src/agent-loop.d.ts} +1 -1
  12. package/build/main/lib/agent-core/src/agent-loop.js +514 -0
  13. package/build/{module/lib/agent-core → main/lib/agent-core/src}/agent.d.ts +2 -2
  14. package/build/main/lib/agent-core/src/agent.js +419 -0
  15. package/build/main/lib/agent-core/{harness → src/harness}/agent-harness.d.ts +36 -26
  16. package/build/main/lib/agent-core/src/harness/agent-harness.js +1028 -0
  17. package/build/main/lib/agent-core/src/harness/compaction/branch-summarization.d.ts +52 -0
  18. package/build/main/lib/agent-core/src/harness/compaction/branch-summarization.js +182 -0
  19. package/build/main/lib/agent-core/src/harness/compaction/compaction.d.ts +94 -0
  20. package/build/main/lib/agent-core/src/harness/compaction/compaction.js +550 -0
  21. package/build/main/lib/agent-core/src/harness/compaction/utils.d.ts +24 -0
  22. package/build/main/lib/agent-core/src/harness/compaction/utils.js +131 -0
  23. package/build/main/lib/agent-core/src/harness/env/nodejs.d.ts +50 -0
  24. package/build/main/lib/agent-core/src/harness/env/nodejs.js +494 -0
  25. package/build/main/lib/agent-core/{harness → src/harness}/messages.d.ts +2 -2
  26. package/build/{module/lib/agent-core → main/lib/agent-core/src}/harness/messages.js +1 -1
  27. package/build/main/lib/agent-core/{harness → src/harness}/prompt-templates.d.ts +4 -1
  28. package/build/main/lib/agent-core/src/harness/prompt-templates.js +235 -0
  29. package/build/{module/lib/agent-core/harness/session/repo/jsonl.d.ts → main/lib/agent-core/src/harness/session/jsonl-repo.d.ts} +7 -1
  30. package/build/main/lib/agent-core/src/harness/session/jsonl-repo.js +106 -0
  31. package/build/{module/lib/agent-core/harness/session/storage/jsonl.d.ts → main/lib/agent-core/src/harness/session/jsonl-storage.d.ts} +7 -4
  32. package/build/main/lib/agent-core/src/harness/session/jsonl-storage.js +234 -0
  33. package/build/main/lib/agent-core/{harness/session/repo/memory.d.ts → src/harness/session/memory-repo.d.ts} +1 -1
  34. package/build/main/lib/agent-core/src/harness/session/memory-repo.js +45 -0
  35. package/build/main/lib/agent-core/{harness/session/storage/memory.d.ts → src/harness/session/memory-storage.d.ts} +4 -5
  36. package/build/main/lib/agent-core/src/harness/session/memory-storage.js +116 -0
  37. package/build/main/lib/agent-core/{harness/session/repo/shared.d.ts → src/harness/session/repo-utils.d.ts} +3 -2
  38. package/build/main/lib/agent-core/src/harness/session/repo-utils.js +39 -0
  39. package/build/{module/lib/agent-core → main/lib/agent-core/src}/harness/session/session.d.ts +3 -2
  40. package/build/main/lib/agent-core/src/harness/session/session.js +213 -0
  41. package/build/main/lib/agent-core/src/harness/session/uuid.d.ts +1 -0
  42. package/build/main/lib/agent-core/src/harness/session/uuid.js +54 -0
  43. package/build/main/lib/agent-core/{harness → src/harness}/skills.d.ts +4 -1
  44. package/build/main/lib/agent-core/src/harness/skills.js +353 -0
  45. package/build/main/lib/agent-core/{harness → src/harness}/system-prompt.d.ts +1 -1
  46. package/build/main/lib/agent-core/src/harness/system-prompt.js +30 -0
  47. package/build/{module/lib/agent-core → main/lib/agent-core/src}/harness/types.d.ts +160 -70
  48. package/build/main/lib/agent-core/src/harness/types.js +94 -0
  49. package/build/main/lib/agent-core/{harness → src/harness}/utils/shell-output.d.ts +2 -2
  50. package/build/main/lib/agent-core/src/harness/utils/shell-output.js +134 -0
  51. package/build/main/lib/agent-core/src/harness/utils/truncate.js +294 -0
  52. package/build/main/lib/agent-core/src/index.d.ts +19 -0
  53. package/build/main/lib/agent-core/src/index.js +25 -0
  54. package/build/main/lib/agent-core/src/node.d.ts +2 -0
  55. package/build/main/lib/agent-core/src/node.js +3 -0
  56. package/build/main/lib/agent-core/{proxy.js → src/proxy.js} +3 -2
  57. package/build/{module/lib/agent-core → main/lib/agent-core/src}/types.d.ts +13 -1
  58. package/build/{module/lib/agent-core → main/lib/agent-core/src}/types.js +1 -1
  59. package/build/main/lib/localAgent.d.ts +35 -0
  60. package/build/main/lib/localAgent.js +329 -0
  61. package/build/main/lib/remoteAgent.d.ts +25 -0
  62. package/build/main/lib/remoteAgent.js +311 -0
  63. package/build/main/lib/tools/BraveWebSearchTool.js +1 -2
  64. package/build/main/lib/tools/PSArtifactTool.js +1 -2
  65. package/build/main/lib/tools/PSClarifyTool.js +1 -2
  66. package/build/main/lib/tools/PSCommandLineTool.js +1 -2
  67. package/build/main/lib/tools/PSMemoryTool.js +1 -2
  68. package/build/main/lib/tools/PSReadFileTool.js +1 -2
  69. package/build/main/lib/tools/PSRetrievalTool.js +1 -2
  70. package/build/main/lib/tools/PSSkillTool.js +1 -2
  71. package/build/main/lib/tools/PSSubAgentTool.js +1 -1
  72. package/build/main/lib/tools/PSWriteFileTool.js +1 -2
  73. package/build/main/lib/tools/TodoTool.js +1 -2
  74. package/build/main/lib/utils/debuglogger.js +1 -2
  75. package/build/main/lib/utils/helpers.js +1 -6
  76. package/build/module/index.d.ts +1 -0
  77. package/build/module/lib/PSAI.js +1 -2
  78. package/build/module/lib/PSAgent.d.ts +50 -13
  79. package/build/module/lib/PSAgent.js +179 -502
  80. package/build/module/lib/PSAgentConfig.d.ts +114 -2
  81. package/build/module/lib/PSAgentLogger.js +1 -2
  82. package/build/module/lib/PSAgentTool.d.ts +8 -3
  83. package/build/module/lib/PSAgentTool.js +3 -3
  84. package/build/module/lib/agent-core/{agent-loop.d.ts → src/agent-loop.d.ts} +1 -1
  85. package/build/module/lib/agent-core/src/agent-loop.js +514 -0
  86. package/build/{main/lib/agent-core → module/lib/agent-core/src}/agent.d.ts +2 -2
  87. package/build/module/lib/agent-core/src/agent.js +419 -0
  88. package/build/module/lib/agent-core/{harness → src/harness}/agent-harness.d.ts +36 -26
  89. package/build/module/lib/agent-core/src/harness/agent-harness.js +1028 -0
  90. package/build/module/lib/agent-core/src/harness/compaction/branch-summarization.d.ts +52 -0
  91. package/build/module/lib/agent-core/src/harness/compaction/branch-summarization.js +182 -0
  92. package/build/module/lib/agent-core/src/harness/compaction/compaction.d.ts +94 -0
  93. package/build/module/lib/agent-core/src/harness/compaction/compaction.js +550 -0
  94. package/build/module/lib/agent-core/src/harness/compaction/utils.d.ts +24 -0
  95. package/build/module/lib/agent-core/src/harness/compaction/utils.js +131 -0
  96. package/build/module/lib/agent-core/src/harness/env/nodejs.d.ts +50 -0
  97. package/build/module/lib/agent-core/src/harness/env/nodejs.js +494 -0
  98. package/build/module/lib/agent-core/{harness → src/harness}/messages.d.ts +2 -2
  99. package/build/{main/lib/agent-core → module/lib/agent-core/src}/harness/messages.js +1 -1
  100. package/build/module/lib/agent-core/{harness → src/harness}/prompt-templates.d.ts +4 -1
  101. package/build/module/lib/agent-core/src/harness/prompt-templates.js +235 -0
  102. package/build/{main/lib/agent-core/harness/session/repo/jsonl.d.ts → module/lib/agent-core/src/harness/session/jsonl-repo.d.ts} +7 -1
  103. package/build/module/lib/agent-core/src/harness/session/jsonl-repo.js +106 -0
  104. package/build/{main/lib/agent-core/harness/session/storage/jsonl.d.ts → module/lib/agent-core/src/harness/session/jsonl-storage.d.ts} +7 -4
  105. package/build/module/lib/agent-core/src/harness/session/jsonl-storage.js +234 -0
  106. package/build/module/lib/agent-core/{harness/session/repo/memory.d.ts → src/harness/session/memory-repo.d.ts} +1 -1
  107. package/build/module/lib/agent-core/src/harness/session/memory-repo.js +45 -0
  108. package/build/module/lib/agent-core/{harness/session/storage/memory.d.ts → src/harness/session/memory-storage.d.ts} +4 -5
  109. package/build/module/lib/agent-core/src/harness/session/memory-storage.js +116 -0
  110. package/build/module/lib/agent-core/{harness/session/repo/shared.d.ts → src/harness/session/repo-utils.d.ts} +3 -2
  111. package/build/module/lib/agent-core/src/harness/session/repo-utils.js +39 -0
  112. package/build/{main/lib/agent-core → module/lib/agent-core/src}/harness/session/session.d.ts +3 -2
  113. package/build/module/lib/agent-core/src/harness/session/session.js +213 -0
  114. package/build/module/lib/agent-core/src/harness/session/uuid.d.ts +1 -0
  115. package/build/module/lib/agent-core/src/harness/session/uuid.js +54 -0
  116. package/build/module/lib/agent-core/{harness → src/harness}/skills.d.ts +4 -1
  117. package/build/module/lib/agent-core/src/harness/skills.js +353 -0
  118. package/build/module/lib/agent-core/{harness → src/harness}/system-prompt.d.ts +1 -1
  119. package/build/module/lib/agent-core/src/harness/system-prompt.js +30 -0
  120. package/build/{main/lib/agent-core → module/lib/agent-core/src}/harness/types.d.ts +160 -70
  121. package/build/module/lib/agent-core/src/harness/types.js +94 -0
  122. package/build/module/lib/agent-core/{harness → src/harness}/utils/shell-output.d.ts +2 -2
  123. package/build/module/lib/agent-core/src/harness/utils/shell-output.js +134 -0
  124. package/build/module/lib/agent-core/src/harness/utils/truncate.js +294 -0
  125. package/build/module/lib/agent-core/src/index.d.ts +19 -0
  126. package/build/module/lib/agent-core/src/index.js +25 -0
  127. package/build/module/lib/agent-core/src/node.d.ts +2 -0
  128. package/build/module/lib/agent-core/src/node.js +3 -0
  129. package/build/module/lib/agent-core/{proxy.js → src/proxy.js} +3 -2
  130. package/build/{main/lib/agent-core → module/lib/agent-core/src}/types.d.ts +13 -1
  131. package/build/{main/lib/agent-core → module/lib/agent-core/src}/types.js +1 -1
  132. package/build/module/lib/localAgent.d.ts +35 -0
  133. package/build/module/lib/localAgent.js +329 -0
  134. package/build/module/lib/remoteAgent.d.ts +25 -0
  135. package/build/module/lib/remoteAgent.js +311 -0
  136. package/build/module/lib/tools/BraveWebSearchTool.js +1 -2
  137. package/build/module/lib/tools/PSArtifactTool.js +1 -2
  138. package/build/module/lib/tools/PSClarifyTool.js +1 -2
  139. package/build/module/lib/tools/PSCommandLineTool.js +1 -2
  140. package/build/module/lib/tools/PSMemoryTool.js +1 -2
  141. package/build/module/lib/tools/PSReadFileTool.js +1 -2
  142. package/build/module/lib/tools/PSRetrievalTool.js +1 -2
  143. package/build/module/lib/tools/PSSkillTool.js +1 -2
  144. package/build/module/lib/tools/PSSubAgentTool.js +1 -1
  145. package/build/module/lib/tools/PSWriteFileTool.js +1 -2
  146. package/build/module/lib/tools/TodoTool.js +1 -2
  147. package/build/module/lib/utils/debuglogger.js +1 -2
  148. package/build/module/lib/utils/helpers.js +1 -6
  149. package/package.json +3 -2
  150. package/build/main/lib/agent-core/agent-loop.js +0 -483
  151. package/build/main/lib/agent-core/agent.js +0 -419
  152. package/build/main/lib/agent-core/harness/agent-harness.js +0 -772
  153. package/build/main/lib/agent-core/harness/compaction/branch-summarization.d.ts +0 -87
  154. package/build/main/lib/agent-core/harness/compaction/branch-summarization.js +0 -246
  155. package/build/main/lib/agent-core/harness/compaction/compaction.d.ts +0 -121
  156. package/build/main/lib/agent-core/harness/compaction/compaction.js +0 -637
  157. package/build/main/lib/agent-core/harness/compaction/utils.d.ts +0 -37
  158. package/build/main/lib/agent-core/harness/compaction/utils.js +0 -153
  159. package/build/main/lib/agent-core/harness/env/nodejs.d.ts +0 -43
  160. package/build/main/lib/agent-core/harness/env/nodejs.js +0 -353
  161. package/build/main/lib/agent-core/harness/execution-env.d.ts +0 -3
  162. package/build/main/lib/agent-core/harness/execution-env.js +0 -3
  163. package/build/main/lib/agent-core/harness/prompt-templates.js +0 -204
  164. package/build/main/lib/agent-core/harness/session/repo/jsonl.js +0 -98
  165. package/build/main/lib/agent-core/harness/session/repo/memory.js +0 -46
  166. package/build/main/lib/agent-core/harness/session/repo/shared.js +0 -31
  167. package/build/main/lib/agent-core/harness/session/session.js +0 -199
  168. package/build/main/lib/agent-core/harness/session/storage/jsonl.js +0 -170
  169. package/build/main/lib/agent-core/harness/session/storage/memory.js +0 -94
  170. package/build/main/lib/agent-core/harness/skills.js +0 -266
  171. package/build/main/lib/agent-core/harness/system-prompt.js +0 -30
  172. package/build/main/lib/agent-core/harness/types.js +0 -16
  173. package/build/main/lib/agent-core/harness/utils/shell-output.js +0 -101
  174. package/build/main/lib/agent-core/harness/utils/truncate.js +0 -208
  175. package/build/main/lib/agent-core/index.d.ts +0 -19
  176. package/build/main/lib/agent-core/index.js +0 -25
  177. package/build/module/lib/agent-core/agent-loop.js +0 -483
  178. package/build/module/lib/agent-core/agent.js +0 -419
  179. package/build/module/lib/agent-core/harness/agent-harness.js +0 -772
  180. package/build/module/lib/agent-core/harness/compaction/branch-summarization.d.ts +0 -87
  181. package/build/module/lib/agent-core/harness/compaction/branch-summarization.js +0 -246
  182. package/build/module/lib/agent-core/harness/compaction/compaction.d.ts +0 -121
  183. package/build/module/lib/agent-core/harness/compaction/compaction.js +0 -637
  184. package/build/module/lib/agent-core/harness/compaction/utils.d.ts +0 -37
  185. package/build/module/lib/agent-core/harness/compaction/utils.js +0 -153
  186. package/build/module/lib/agent-core/harness/env/nodejs.d.ts +0 -43
  187. package/build/module/lib/agent-core/harness/env/nodejs.js +0 -353
  188. package/build/module/lib/agent-core/harness/execution-env.d.ts +0 -3
  189. package/build/module/lib/agent-core/harness/execution-env.js +0 -3
  190. package/build/module/lib/agent-core/harness/prompt-templates.js +0 -204
  191. package/build/module/lib/agent-core/harness/session/repo/jsonl.js +0 -98
  192. package/build/module/lib/agent-core/harness/session/repo/memory.js +0 -46
  193. package/build/module/lib/agent-core/harness/session/repo/shared.js +0 -31
  194. package/build/module/lib/agent-core/harness/session/session.js +0 -199
  195. package/build/module/lib/agent-core/harness/session/storage/jsonl.js +0 -170
  196. package/build/module/lib/agent-core/harness/session/storage/memory.js +0 -94
  197. package/build/module/lib/agent-core/harness/skills.js +0 -266
  198. package/build/module/lib/agent-core/harness/system-prompt.js +0 -30
  199. package/build/module/lib/agent-core/harness/types.js +0 -16
  200. package/build/module/lib/agent-core/harness/utils/shell-output.js +0 -101
  201. package/build/module/lib/agent-core/harness/utils/truncate.js +0 -208
  202. package/build/module/lib/agent-core/index.d.ts +0 -19
  203. package/build/module/lib/agent-core/index.js +0 -25
  204. /package/build/main/lib/agent-core/{harness → src/harness}/utils/truncate.d.ts +0 -0
  205. /package/build/main/lib/agent-core/{proxy.d.ts → src/proxy.d.ts} +0 -0
  206. /package/build/module/lib/agent-core/{harness → src/harness}/utils/truncate.d.ts +0 -0
  207. /package/build/module/lib/agent-core/{proxy.d.ts → src/proxy.d.ts} +0 -0
@@ -5,7 +5,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.PSAgent = void 0;
7
7
  exports.sleep = sleep;
8
- /* eslint-disable @typescript-eslint/no-explicit-any */
9
8
  const node_fs_1 = __importDefault(require("node:fs"));
10
9
  const node_os_1 = __importDefault(require("node:os"));
11
10
  const node_path_1 = __importDefault(require("node:path"));
@@ -14,11 +13,12 @@ const express_1 = require("@a2a-js/sdk/server/express");
14
13
  const cors_1 = __importDefault(require("cors"));
15
14
  const express_2 = __importDefault(require("express"));
16
15
  const fetch_retry_1 = __importDefault(require("fetch-retry"));
17
- const uuid_1 = require("uuid"); // For generating unique IDs
18
16
  const yaml_1 = __importDefault(require("yaml"));
19
17
  const v4_1 = require("zod/v4");
20
18
  const PSAgentTask_1 = require("./PSAgentTask");
21
19
  const PSAgentTool_1 = require("./PSAgentTool");
20
+ const localAgent_1 = require("./localAgent");
21
+ const remoteAgent_1 = require("./remoteAgent");
22
22
  const PSSubAgentTool_1 = require("./tools/PSSubAgentTool");
23
23
  const apiEndpoints_1 = require("./utils/apiEndpoints");
24
24
  const debuglogger_1 = __importDefault(require("./utils/debuglogger"));
@@ -29,6 +29,14 @@ const fetch = (0, fetch_retry_1.default)(global.fetch);
29
29
  async function sleep(ms) {
30
30
  return new Promise((resolve) => setTimeout(resolve, ms));
31
31
  }
32
+ // ─── Type guard ──────────────────────────────────────────────────────────────────
33
+ /**
34
+ * Narrows a {@link PSAgentConfigWithLocal} to {@link PSAgentLocalConfig}.
35
+ * Used internally to provide TypeScript access to local-only options.
36
+ */
37
+ function isLocalConfig(config) {
38
+ return config.local === true;
39
+ }
32
40
  /**
33
41
  * PSAgent class to manage AI agents with tools and tasks
34
42
  * Implements AgentExecutor interface from A2A SDK
@@ -81,9 +89,15 @@ class PSAgent {
81
89
  log;
82
90
  serviceUrls;
83
91
  cancelledTasks = new Set();
92
+ /**
93
+ * Internal local-mode support module.
94
+ * Only populated when `config.local === true`.
95
+ * @internal
96
+ */
97
+ /** agent-core Agent instance. Only set when config.local === true. */
98
+ localCoreAgent;
84
99
  cancelTask = async (taskId) => {
85
100
  this.cancelledTasks.add(taskId);
86
- // The execute loop is responsible for publishing the final state
87
101
  };
88
102
  /**
89
103
  * create a new PSAgent with the given config
@@ -96,7 +110,11 @@ class PSAgent {
96
110
  if (services) {
97
111
  this.serviceUrls = services;
98
112
  }
113
+ if (isLocalConfig(config)) {
114
+ this.localCoreAgent = (0, localAgent_1.buildLocalAgent)(config, (s) => this.getBaseUrl(s), () => this.Tools, this.log);
115
+ }
99
116
  }
117
+ // ─── Original PSAgent public API (unchanged) ──────────────────────────────────
100
118
  /**
101
119
  * Get the Agent Class
102
120
  * @returns Agent class from config or default "LlmAgent"
@@ -170,7 +188,6 @@ class PSAgent {
170
188
  const mergedTools = [...(this.config.tools || []), ...this.tools];
171
189
  if (this.config.sub_agents && this.config.sub_agents.length > 0) {
172
190
  const subagents = [];
173
- // add a PSSubAgentTool for each sub_agent in config
174
191
  for (const subAgentConfig of this.config.sub_agents) {
175
192
  subagents.push(new PSAgent(Object.assign({}, subAgentConfig, { token: this.config.token })));
176
193
  }
@@ -225,17 +242,14 @@ class PSAgent {
225
242
  if (!this.tools) {
226
243
  this.tools = [];
227
244
  }
228
- let toolIndex = this.config.tools?.findIndex((t) => t.Name === tool.Name) || -1;
229
- if (toolIndex !== -1) {
245
+ let toolIndex = this.config.tools?.findIndex((t) => t.Name === tool.Name) ||
246
+ -1;
247
+ if (toolIndex !== -1)
230
248
  throw new Error(`Tool with name ${tool.Name} already exists in config`);
231
- }
232
249
  toolIndex = this.tools.findIndex((t) => t.Name === tool.Name);
233
- if (toolIndex !== -1) {
250
+ if (toolIndex !== -1)
234
251
  throw new Error(`Tool with name ${tool.Name} already exists in agent`);
235
- }
236
- else {
237
- this.tools.push(tool);
238
- }
252
+ this.tools.push(tool);
239
253
  }
240
254
  // get token from config or environment variable
241
255
  async getToken() {
@@ -255,24 +269,20 @@ class PSAgent {
255
269
  headers['x-client-id'] = process.env.PS_CLIENT_ID || '';
256
270
  headers['x-project-id'] = process.env.PS_PROJECT_ID || '';
257
271
  headers['x-workspace-id'] = process.env.PS_WORKSPACE_ID || '';
258
- if (this.config.additional_headers) {
272
+ if (this.config.additional_headers)
259
273
  Object.assign(headers, this.config.additional_headers);
260
- }
261
274
  return headers;
262
275
  }
263
276
  // Get base URL from environment variable or use default
264
277
  // uses env variable PS_API_URL if set, otherwise defaults to https://dev.lionis.ai
265
278
  getBaseUrl(service = 'agents') {
266
279
  if (this.serviceUrls) {
267
- // Use service-specific URL if available
268
280
  const serviceUrl = this.serviceUrls[service];
269
- if (serviceUrl) {
270
- return serviceUrl.replace(/\/+$/, ''); // Remove trailing slashes
271
- }
281
+ if (serviceUrl)
282
+ return serviceUrl.replace(/\/+$/, '');
272
283
  }
273
- // Fallback to environment variable or default
274
284
  const baseUrl = process.env.PS_API_URL || 'https://dev.lionis.ai';
275
- return baseUrl.replace(/\/+$/, ''); // Remove trailing slashes
285
+ return baseUrl.replace(/\/+$/, '');
276
286
  }
277
287
  /**
278
288
  * start a new temp agent on the agent platform
@@ -291,43 +301,21 @@ class PSAgent {
291
301
  title: 'query',
292
302
  description: 'The query by the user.',
293
303
  }),
294
- // history: z.array(z.object({
295
- // role: z.enum(["user", "model"]).meta({
296
- // title: "role",
297
- // description: "Role of the message sender"
298
- // }),
299
- // content: z.string().meta({
300
- // title: "content",
301
- // description: "Content of the message"
302
- // })
303
- // })).optional().meta({
304
- // title: "history",
305
- // description: "List of the User and Assistant chat history"
306
- // })
307
304
  })
308
305
  .meta({
309
306
  title: 'request_body',
310
307
  description: 'The request body parameters for the agent.',
311
308
  }), { io: 'input' }));
312
- //check if the input confirms to the input schema
313
- // const parseResult = z.object(ischema).safeParse(input);
314
- // if (!parseResult.success) {
315
- // log?.error('Input validation failed:', parseResult.error.message);
316
- // throw new Error(`Input validation failed: ${parseResult.error.issues.map(issue=>issue.message).join(', ')}`);
317
- // }
318
309
  if (ischema.properties) {
319
310
  Object.assign(ischema.properties, {
320
311
  history: {
321
312
  type: 'array',
322
- items: {
323
- type: 'object',
324
- },
313
+ items: { type: 'object' },
325
314
  description: 'List of the User and Assistant chat history',
326
315
  title: 'Chat history',
327
316
  },
328
317
  });
329
318
  }
330
- // console.log("input schema:", JSON.stringify(ischema, null, 2));
331
319
  const output_schema = this.OutputSchema ||
332
320
  (0, helpers_1.removeSchemaMetadata)(v4_1.z.toJSONSchema(v4_1.z
333
321
  .object({
@@ -347,7 +335,7 @@ class PSAgent {
347
335
  system_prompt: this.Instruction,
348
336
  llm: this.Model || 'gpt-5',
349
337
  input_schema: ischema,
350
- output_schema: output_schema,
338
+ output_schema,
351
339
  },
352
340
  input_params: Object.assign(input, { history: history || [] }),
353
341
  tasks: this.Tasks.map((task) => ({
@@ -378,17 +366,12 @@ class PSAgent {
378
366
  dlog.debug(`Starting agent with body: ${JSON.stringify(body, null, 2)}`);
379
367
  try {
380
368
  const headers = await this.getAuthHeaders();
381
- // log?.debug('Starting agent with headers:', headers);
382
- // log?.debug('Starting agent with body:', JSON.stringify(body.input_params, null, 2));
383
369
  const response = await fetch(apiEndpoints_1.API_ENDPOINTS.AGENTS_SERVICE(this.getBaseUrl('agents'), '/temp_agent'), {
384
370
  method: 'POST',
385
- headers: {
386
- 'Content-Type': 'application/json',
387
- ...headers,
388
- },
371
+ headers: { 'Content-Type': 'application/json', ...headers },
389
372
  body: JSON.stringify(body),
390
373
  retries: 3,
391
- retryOn: function (attempt, error, response) {
374
+ retryOn: (attempt, error, response) => {
392
375
  // retry on any network error, or 4xx or 5xx status codes
393
376
  if (error !== null || (response.status > 400 && attempt < 4)) {
394
377
  log?.warn(`retrying execute agent, attempt number ${attempt + 1}, status: ${response.status}`, error);
@@ -396,9 +379,7 @@ class PSAgent {
396
379
  }
397
380
  return false;
398
381
  },
399
- retryDelay: function (attempt) {
400
- return Math.pow(2, attempt) * 1000; // 1000, 2000, 4000
401
- },
382
+ retryDelay: (attempt) => Math.pow(2, attempt) * 1000, // 1000, 2000, 4000
402
383
  });
403
384
  if (!response.ok) {
404
385
  let errorDetails;
@@ -408,9 +389,8 @@ class PSAgent {
408
389
  catch (e) {
409
390
  throw new Error(`Unable to start agent. status: ${response.status}. ${e}`);
410
391
  }
411
- if (errorDetails) {
392
+ if (errorDetails)
412
393
  throw new Error(`Unable to start agent. status: ${response.status}, details: ${JSON.stringify(errorDetails, null, 2)}`);
413
- }
414
394
  }
415
395
  const responseData = await response.json();
416
396
  this.agentId = responseData.data.agent_id;
@@ -430,9 +410,8 @@ class PSAgent {
430
410
  */
431
411
  async instruct(instruction) {
432
412
  const log = this.log;
433
- if (!this.agentId) {
413
+ if (!this.agentId)
434
414
  throw new Error('Agent ID is not set');
435
- }
436
415
  try {
437
416
  const response = await fetch(apiEndpoints_1.API_ENDPOINTS.AGENTS_SERVICE(this.getBaseUrl('agents'), `/${this.agentId}/instruct`), {
438
417
  method: 'POST',
@@ -442,20 +421,17 @@ class PSAgent {
442
421
  },
443
422
  body: JSON.stringify({
444
423
  correlation_id: this.CorrelationId,
445
- instruction: instruction,
424
+ instruction,
446
425
  }),
447
426
  retries: 3,
448
- retryOn: function (attempt, error, response) {
449
- // retry on any network error, or 4xx or 5xx status codes
427
+ retryOn: (attempt, error, response) => {
450
428
  if (error !== null || (response.status >= 400 && attempt < 4)) {
451
- log?.warn(`retrying instruct agent, attempt number ${attempt + 1} ${response.status} ${JSON.stringify(response)}`, error);
429
+ log?.warn(`retrying instruct agent, attempt number ${attempt + 1} ${response.status} ${JSON.stringify(response)}`, error);
452
430
  return true;
453
431
  }
454
432
  return false;
455
433
  },
456
- retryDelay: function (attempt) {
457
- return Math.pow(2, attempt) * 1000; // 1000, 2000, 4000
458
- },
434
+ retryDelay: (attempt) => Math.pow(2, attempt) * 1000,
459
435
  });
460
436
  if (!response.ok) {
461
437
  log?.error('Error instructing agent:', await response.json());
@@ -476,9 +452,10 @@ class PSAgent {
476
452
  */
477
453
  async resume(tooloutput) {
478
454
  const log = this.log;
479
- if (!this.agentId) {
455
+ if (this.localCoreAgent)
456
+ return {};
457
+ if (!this.agentId)
480
458
  throw new Error('Agent ID is not set');
481
- }
482
459
  try {
483
460
  const response = await fetch(apiEndpoints_1.API_ENDPOINTS.AGENTS_SERVICE(this.getBaseUrl('agents'), `/${this.agentId}/resume`), {
484
461
  method: 'POST',
@@ -491,7 +468,7 @@ class PSAgent {
491
468
  tool_output_override: tooloutput,
492
469
  }),
493
470
  retries: 3,
494
- retryOn: function (attempt, error, response) {
471
+ retryOn: (attempt, error, response) => {
495
472
  // retry on any network error, or 4xx or 5xx status codes
496
473
  if (error !== null || (response.status >= 400 && attempt < 4)) {
497
474
  log?.warn(`retrying resume, attempt number ${attempt + 1} ${response.status} ${JSON.stringify(response)}`, error);
@@ -499,9 +476,7 @@ class PSAgent {
499
476
  }
500
477
  return false;
501
478
  },
502
- retryDelay: function (attempt) {
503
- return Math.pow(2, attempt) * 1000; // 1000, 2000, 4000
504
- },
479
+ retryDelay: (attempt) => Math.pow(2, attempt) * 1000, // 1000, 2000, 4000
505
480
  });
506
481
  if (!response.ok) {
507
482
  log?.error('Error resuming agent:', await response.json());
@@ -522,9 +497,13 @@ class PSAgent {
522
497
  * @param log optional logger to use for logging, defaults to agent's logger
523
498
  */
524
499
  async cancel(log) {
525
- if (!this.AgentId) {
526
- throw new Error('Agent is not started');
500
+ if (this.localCoreAgent) {
501
+ if (this.localCoreAgent.state.isStreaming)
502
+ this.localCoreAgent.abort();
503
+ return;
527
504
  }
505
+ if (!this.AgentId)
506
+ throw new Error('Agent is not started');
528
507
  try {
529
508
  const response = await fetch(apiEndpoints_1.API_ENDPOINTS.AGENTS_SERVICE(this.getBaseUrl('agents'), `/${this.agentId}`), {
530
509
  method: 'DELETE',
@@ -533,7 +512,7 @@ class PSAgent {
533
512
  ...(await this.getAuthHeaders()),
534
513
  },
535
514
  retries: 3,
536
- retryOn: function (attempt, error, response) {
515
+ retryOn: (attempt, error, response) => {
537
516
  // retry on any network error, or 4xx or 5xx status codes
538
517
  if (error !== null || (response.status >= 400 && attempt < 4)) {
539
518
  log?.warn(`retrying cancel agent, attempt number ${attempt + 1}`);
@@ -541,9 +520,7 @@ class PSAgent {
541
520
  }
542
521
  return false;
543
522
  },
544
- retryDelay: function (attempt) {
545
- return Math.pow(2, attempt) * 1000; // 1000, 2000, 4000
546
- },
523
+ retryDelay: (attempt) => Math.pow(2, attempt) * 1000, // 1000, 2000, 4000
547
524
  });
548
525
  if (!response.ok) {
549
526
  let errorDetails;
@@ -554,9 +531,8 @@ class PSAgent {
554
531
  catch (e) {
555
532
  throw new Error(`Unable to cancel agent status: ${response.status}, ${e}`);
556
533
  }
557
- if (errorDetails) {
534
+ if (errorDetails)
558
535
  throw new Error(`Unable to cancel agent status: ${response.status}, details: ${JSON.stringify(errorDetails)}`);
559
- }
560
536
  }
561
537
  log?.info(`Agent ${this.agentId} cancelled successfully`);
562
538
  }
@@ -571,9 +547,10 @@ class PSAgent {
571
547
  * @see https://dev.lionis.ai/api/v1/events/events?correlationId={{correlation_id}}
572
548
  */
573
549
  async getEvents() {
574
- if (!this.CorrelationId) {
550
+ if (this.localCoreAgent)
551
+ return this.localCoreAgent.state.messages.map((m) => ({ ...m }));
552
+ if (!this.CorrelationId)
575
553
  throw new Error('Correlation ID is not set');
576
- }
577
554
  try {
578
555
  const response = await fetch(apiEndpoints_1.API_ENDPOINTS.EVENTS_SERVICE(this.getBaseUrl('events'), `/events?correlationId=${this.correlationId}`), {
579
556
  method: 'GET',
@@ -582,27 +559,19 @@ class PSAgent {
582
559
  ...(await this.getAuthHeaders()),
583
560
  },
584
561
  retries: 3,
585
- retryOn: function (attempt, error, response) {
562
+ retryOn: (attempt, error, response) => {
586
563
  // retry on any network error, or 4xx or 5xx status codes
587
- if (error !== null || (response.status >= 400 && attempt < 4)) {
588
- //log?.warn(`retrying getEvents, attempt number ${attempt + 1}`);
564
+ if (error !== null || (response.status >= 400 && attempt < 4))
589
565
  return true;
590
- }
591
566
  return false;
592
567
  },
593
- retryDelay: function (attempt) {
594
- return Math.pow(2, attempt) * 1000; // 1000, 2000, 4000
595
- },
568
+ retryDelay: (attempt) => Math.pow(2, attempt) * 1000,
596
569
  });
597
- if (!response.ok) {
598
- //log.error("Error fetching agent events:", await response.json());
570
+ if (!response.ok)
599
571
  throw new Error(`HTTP error! status: ${response.status}`);
600
- }
601
- const eventsData = await response.json();
602
- return eventsData;
572
+ return (await response.json());
603
573
  }
604
574
  catch (error) {
605
- //log.error("Error fetching agent events:", error);
606
575
  throw new Error(`Failed to fetch agent events: ${error instanceof Error ? error.message : String(error)}`);
607
576
  }
608
577
  }
@@ -620,9 +589,8 @@ class PSAgent {
620
589
  * ```
621
590
  */
622
591
  async getEvaluationData() {
623
- if (!this.agentId) {
592
+ if (!this.agentId)
624
593
  throw new Error('Agent ID is not set');
625
- }
626
594
  const requestUrl = `${this.getBaseUrl('llmtrack')}/web/v1/llmtrack-ui/api/getEvaluationData?agentId=${this.agentId}`;
627
595
  try {
628
596
  const response = await fetch(requestUrl, {
@@ -632,16 +600,12 @@ class PSAgent {
632
600
  Authorization: `${await this.getToken()}`,
633
601
  },
634
602
  retries: 3,
635
- retryOn: function (attempt, error, response) {
636
- // retry on any network error, or 4xx or 5xx status codes
637
- if (error !== null || (response.status >= 400 && attempt < 4)) {
603
+ retryOn: (attempt, error, response) => {
604
+ if (error !== null || (response.status >= 400 && attempt < 4))
638
605
  return true;
639
- }
640
606
  return false;
641
607
  },
642
- retryDelay: function (attempt) {
643
- return Math.pow(2, attempt) * 1000; // 1000, 2000, 4000
644
- },
608
+ retryDelay: (attempt) => Math.pow(2, attempt) * 1000,
645
609
  });
646
610
  if (!response.ok) {
647
611
  const errorText = await response.text();
@@ -708,377 +672,12 @@ class PSAgent {
708
672
  }
709
673
  return results;
710
674
  }
711
- /**
712
- *
713
- * @param requestContext
714
- * @param eventBus
715
- * @returns
716
- */
717
- async execute(requestContext, eventBus) {
718
- const log = this.log;
719
- const userMessage = requestContext.userMessage;
720
- const existingTask = requestContext.task;
721
- const taskId = existingTask?.id || (0, uuid_1.v4)();
722
- const contextId = userMessage.contextId || existingTask?.contextId || (0, uuid_1.v4)();
723
- log?.info(`[${this.Name}:AgentExecutor] Processing message ${userMessage.messageId} for task ${taskId} (context: ${contextId})`);
724
- // 1. Publish initial Task event if it's a new task
725
- if (!existingTask) {
726
- const initialTask = {
727
- kind: 'task',
728
- id: taskId,
729
- contextId: contextId,
730
- status: {
731
- state: 'submitted',
732
- timestamp: new Date().toISOString(),
733
- },
734
- history: [userMessage],
735
- metadata: userMessage.metadata,
736
- artifacts: [], // Initialize artifacts array
737
- };
738
- eventBus.publish(initialTask);
739
- }
740
- // 2. Publish "working" status update
741
- let workingStatusUpdate = {
742
- kind: 'status-update',
743
- taskId: taskId,
744
- contextId: contextId,
745
- status: {
746
- state: 'working',
747
- message: {
748
- kind: 'message',
749
- role: 'agent',
750
- messageId: (0, uuid_1.v4)(),
751
- parts: [{ kind: 'text', text: 'Initializing the agent...' }],
752
- taskId: taskId,
753
- contextId: contextId,
754
- },
755
- timestamp: new Date().toISOString(),
756
- },
757
- final: false,
758
- };
759
- eventBus.publish(workingStatusUpdate);
760
- // 3. Prepare messages for history
761
- const history = existingTask?.history ? [...existingTask.history] : [];
762
- if (!history.find((m) => m.messageId === userMessage.messageId)) {
763
- history.push(userMessage);
764
- }
765
- log?.debug(`[${this.Name}:AgentExecutor] Total messages in history: ${history.length}`);
766
- const messages = history
767
- .map((m) => ({
768
- role: (m.role === 'agent' ? 'model' : 'user'),
769
- content: m.parts
770
- .filter((p) => p.kind === 'text' && !!p.text)
771
- .map((p) => p.text)
772
- .join('\n'),
773
- // .map((p) => ({
774
- // text: (p as TextPart).text,
775
- // })),
776
- }))
777
- .filter((m) => m.content.length > 0);
778
- if (messages.length === 0) {
779
- log?.warn(`[${this.Name}:AgentExecutor] No valid text messages found in history for task ${taskId}.`);
780
- const failureUpdate = {
781
- kind: 'status-update',
782
- taskId: taskId,
783
- contextId: contextId,
784
- status: {
785
- state: 'failed',
786
- message: {
787
- kind: 'message',
788
- role: 'agent',
789
- messageId: (0, uuid_1.v4)(),
790
- parts: [
791
- { kind: 'text', text: 'No input message found to process.' },
792
- ],
793
- taskId: taskId,
794
- contextId: contextId,
795
- },
796
- timestamp: new Date().toISOString(),
797
- },
798
- final: true,
799
- };
800
- eventBus.publish(failureUpdate);
801
- return;
802
- }
803
- try {
804
- const input = {};
805
- if (userMessage.parts && userMessage.parts.length > 0) {
806
- for (const part of userMessage.parts) {
807
- if (part.kind === 'text' && part.text) {
808
- input['query'] = part.text;
809
- }
810
- // TODO: handle other part kinds (e.g., images, files) here as needed
811
- }
812
- }
813
- // if (this.Tools.length === 0) {
814
- // const ai=new PSAI(this.Token||'',this.getBaseUrl(),log);
815
- // const llmResponse:any = await ai.llm(input.query, this.Model);
816
- // //console.log("llmResponse:", llmResponse);
817
- // const completedUpdate: TaskStatusUpdateEvent = {
818
- // kind: 'status-update',
819
- // taskId: taskId,
820
- // contextId: contextId,
821
- // status: {
822
- // state: 'completed',
823
- // message: {
824
- // kind: 'message',
825
- // role: 'agent',
826
- // messageId: uuidv4(),
827
- // parts: [{ kind: 'text', text: llmResponse.choices[0].message.content }],
828
- // taskId: taskId,
829
- // contextId: contextId,
830
- // },
831
- // timestamp: new Date().toISOString(),
832
- // },
833
- // final: true,
834
- // };
835
- // eventBus.publish(completedUpdate);
836
- // return;
837
- // }
838
- this.log?.debug(`Agent input: ${JSON.stringify(input)}`);
839
- await this.start(input, messages.slice(0, -1), log);
840
- workingStatusUpdate = {
841
- kind: 'status-update',
842
- taskId: taskId,
843
- contextId: contextId,
844
- status: {
845
- state: 'working',
846
- message: {
847
- kind: 'message',
848
- role: 'agent',
849
- messageId: (0, uuid_1.v4)(),
850
- parts: [
851
- {
852
- kind: 'text',
853
- text: `started new agent ${this.AgentId}, correlationid: ${this.correlationId}`,
854
- },
855
- ],
856
- taskId: taskId,
857
- contextId: contextId,
858
- },
859
- timestamp: new Date().toISOString(),
860
- },
861
- final: false,
862
- };
863
- eventBus.publish(workingStatusUpdate);
864
- let events;
865
- let lastevent = {
866
- timestamp: Date.now(),
867
- };
868
- let processedEvents = 0;
869
- do {
870
- do {
871
- if (this.cancelledTasks.has(taskId)) {
872
- log?.info(`[${this.Name}:AgentExecutor] Task ${taskId} has been cancelled.`);
873
- // Publish the final 'canceled' status.
874
- const cancelledUpdate = {
875
- kind: 'status-update',
876
- taskId: taskId,
877
- contextId: contextId,
878
- status: {
879
- state: 'canceled',
880
- timestamp: new Date().toISOString(),
881
- },
882
- final: true,
883
- };
884
- eventBus.publish(cancelledUpdate);
885
- eventBus.finished();
886
- // Clean up and exit.
887
- this.cancelledTasks.delete(taskId);
888
- return;
889
- }
890
- await sleep(500);
891
- //log?.info(`[${this.Name}:AgentExecutor] Fetching events for correlation ID ${this.CorrelationId}`);
892
- events = await this.getEvents();
893
- if (events.length > processedEvents) {
894
- events = events.slice(processedEvents); // get only new events
895
- }
896
- } while (events.length === 0);
897
- const event = events[0];
898
- if (lastevent.timestamp !== event.timestamp) {
899
- //log?.debug(`[${this.Name}:AgentExecutor] New event: ${event.timestamp} Last Event: ${lastevent.timestamp} `);
900
- lastevent = event;
901
- if (lastevent.agentStatus === 'waiting') {
902
- if (lastevent.tool.startsWith('mcp_')) {
903
- //TODO: handle mcp tools
904
- log?.info(`[${this.Name}:AgentExecutor] waiting for mcp tool ${lastevent.tool} to complete...`);
905
- }
906
- else if (lastevent.tool) {
907
- log?.info(`[${this.Name}:AgentExecutor] toolcall: ${lastevent.tool}, ts:${lastevent.timestamp}, c:${processedEvents}\n`);
908
- let workingStatusUpdate = {
909
- kind: 'status-update',
910
- taskId: taskId,
911
- contextId: contextId,
912
- status: {
913
- state: 'working',
914
- message: {
915
- kind: 'message',
916
- role: 'agent',
917
- messageId: (0, uuid_1.v4)(),
918
- parts: [
919
- {
920
- kind: 'text',
921
- text: `invoking tool ${lastevent.tool}(${JSON.stringify(lastevent.toolInput.request_body)})...\n`,
922
- },
923
- ],
924
- taskId: taskId,
925
- contextId: contextId,
926
- metadata: {
927
- data: lastevent.toolInput.request_body,
928
- },
929
- },
930
- timestamp: new Date().toISOString(),
931
- },
932
- final: false,
933
- };
934
- eventBus.publish(workingStatusUpdate);
935
- const res = await this.executeTool(lastevent.tool, lastevent.toolInput.request_body, log);
936
- let statusMsg = `Tool ${lastevent.tool} executed `;
937
- if (res.error) {
938
- log?.error(`${res.error}`);
939
- statusMsg += `with error: ${res.error.message || res.error.toString()}`;
940
- }
941
- else {
942
- statusMsg += `successfully.`;
943
- }
944
- workingStatusUpdate = {
945
- kind: 'status-update',
946
- taskId: taskId,
947
- contextId: contextId,
948
- status: {
949
- state: 'working',
950
- message: {
951
- kind: 'message',
952
- role: 'agent',
953
- messageId: (0, uuid_1.v4)(),
954
- parts: [{ kind: 'text', text: statusMsg }],
955
- taskId: taskId,
956
- contextId: contextId,
957
- },
958
- timestamp: new Date().toISOString(),
959
- },
960
- final: false,
961
- };
962
- eventBus.publish(workingStatusUpdate);
963
- }
964
- }
965
- else if (lastevent.agentStatus === 'pending') {
966
- //log(`\n\n#### ${lastevent.agentStatus}:\n`);
967
- }
968
- else if (lastevent.agentStatus === 'in-progress') {
969
- if (lastevent.tool === 'generate_plan_tool' &&
970
- lastevent.toolOutput) {
971
- log?.info('```log-Agent_Plan\n' + lastevent.toolOutput + '\n```');
972
- }
973
- else if (lastevent.message.indexOf('resume')) {
974
- //log.info(`.`);
975
- }
976
- else
977
- log?.info(`\n\n#### ${lastevent.message}:\n`);
978
- }
979
- else if (lastevent.agentStatus === 'completed') {
980
- log?.info(`Agent Execution Completed`);
981
- log?.info(`---`);
982
- log?.done(JSON.stringify(lastevent.output, null, 2));
983
- }
984
- else {
985
- log?.warn(`#### ${lastevent.agentStatus}`);
986
- log?.warn('last event:', lastevent);
987
- log?.error(`Agent execution failed: ${JSON.stringify(lastevent)}`);
988
- log?.done(' Agent execution failed ');
989
- }
990
- processedEvents++;
991
- }
992
- } while (lastevent?.agentStatus !== 'failed' &&
993
- lastevent?.agentStatus !== 'completed');
994
- if (lastevent?.agentStatus === 'failed') {
995
- const failureUpdate = {
996
- kind: 'status-update',
997
- taskId: taskId,
998
- contextId: contextId,
999
- status: {
1000
- state: 'failed',
1001
- message: {
1002
- kind: 'message',
1003
- role: 'agent',
1004
- messageId: (0, uuid_1.v4)(),
1005
- parts: [
1006
- {
1007
- kind: 'text',
1008
- text: `Agent execution failed: ${lastevent?.message || ''}`,
1009
- },
1010
- ],
1011
- taskId: taskId,
1012
- contextId: contextId,
1013
- },
1014
- timestamp: new Date().toISOString(),
1015
- },
1016
- final: true,
1017
- };
1018
- eventBus.publish(failureUpdate);
1019
- }
1020
- else if (lastevent?.agentStatus === 'completed') {
1021
- const completedUpdate = {
1022
- kind: 'status-update',
1023
- taskId: taskId,
1024
- contextId: contextId,
1025
- status: {
1026
- state: 'completed',
1027
- message: {
1028
- kind: 'message',
1029
- role: 'agent',
1030
- messageId: (0, uuid_1.v4)(),
1031
- parts: [
1032
- { kind: 'text', text: lastevent.output.response },
1033
- { kind: 'data', data: lastevent.output },
1034
- ],
1035
- taskId: taskId,
1036
- contextId: contextId,
1037
- },
1038
- timestamp: new Date().toISOString(),
1039
- },
1040
- final: true,
1041
- };
1042
- eventBus.publish(completedUpdate);
1043
- }
1044
- return;
1045
- }
1046
- catch (error) {
1047
- log?.error(`[${this.Name}:AgentExecutor] Error processing task ${taskId}:`, error);
1048
- const errorUpdate = {
1049
- kind: 'status-update',
1050
- taskId: taskId,
1051
- contextId: contextId,
1052
- status: {
1053
- state: 'failed',
1054
- message: {
1055
- kind: 'message',
1056
- role: 'agent',
1057
- messageId: (0, uuid_1.v4)(),
1058
- parts: [
1059
- {
1060
- kind: 'text',
1061
- text: `Error processing your message: ${error instanceof Error ? error.message : String(error)}`,
1062
- },
1063
- ],
1064
- taskId: taskId,
1065
- contextId: contextId,
1066
- },
1067
- timestamp: new Date().toISOString(),
1068
- },
1069
- final: true,
1070
- };
1071
- eventBus.publish(errorUpdate);
1072
- }
1073
- }
1074
- // Function to get the host IP address
1075
675
  getHostIPAddress() {
1076
676
  const interfaces = node_os_1.default.networkInterfaces();
1077
677
  for (const interfaceName in interfaces) {
1078
678
  for (const interfaceInfo of interfaces[interfaceName] || []) {
1079
- if (interfaceInfo.family === 'IPv4' && !interfaceInfo.internal) {
679
+ if (interfaceInfo.family === 'IPv4' && !interfaceInfo.internal)
1080
680
  return interfaceInfo.address;
1081
- }
1082
681
  }
1083
682
  }
1084
683
  return 'localhost';
@@ -1096,11 +695,9 @@ class PSAgent {
1096
695
  * @returns A2A Express app
1097
696
  */
1098
697
  getA2AServer(taskStore = new server_1.InMemoryTaskStore()) {
1099
- // Set up the server.
1100
698
  const requestHandler = new server_1.DefaultRequestHandler(this.getAgentCard(), taskStore, this);
1101
699
  const appBuilder = new express_1.A2AExpressApp(requestHandler);
1102
700
  const expressApp = (0, express_2.default)();
1103
- // Add CORS middleware
1104
701
  expressApp.use([
1105
702
  (0, cors_1.default)({
1106
703
  origin: '*',
@@ -1117,20 +714,18 @@ class PSAgent {
1117
714
  version: '0.0.1', // Incremented version
1118
715
  protocolVersion: '0.3.0',
1119
716
  name: this.Name,
1120
- description: this.Description,
1121
- // Adjust the base URL and port in A2AExpressApp
1122
- url: `http://${this.getHostIPAddress()}:${this.getPort()}/`,
717
+ description: this.Description, // Adjust the base URL and port in A2AExpressApp
718
+ url: `http://${this.getHostIPAddress()}:${this.getPort()}/`, // Added provider URL
1123
719
  provider: {
1124
720
  organization: 'PS',
1125
- url: `https://${this.getHostIPAddress()}`, // Added provider URL
721
+ url: `https://${this.getHostIPAddress()}`,
1126
722
  },
1127
723
  capabilities: {
1128
724
  streaming: true, // The new framework supports streaming
1129
725
  pushNotifications: false, // Assuming not implemented for this agent yet
1130
726
  stateTransitionHistory: true, // Agent uses history
1131
727
  },
1132
- // authentication: null, // Property 'authentication' does not exist on type 'AgentCard'.
1133
- securitySchemes: undefined, // Or define actual security schemes if any
728
+ securitySchemes: undefined,
1134
729
  security: undefined,
1135
730
  defaultInputModes: ['text'],
1136
731
  defaultOutputModes: ['text', 'task-status'], // task-status is a common output mode
@@ -1158,44 +753,126 @@ class PSAgent {
1158
753
  };
1159
754
  }
1160
755
  static FromConfigFile(config_path) {
1161
- if (!node_fs_1.default.existsSync(config_path)) {
756
+ if (!node_fs_1.default.existsSync(config_path))
1162
757
  throw new Error(`Config file ${config_path} does not exist`);
1163
- }
1164
758
  const ext = node_path_1.default.extname(config_path).toLowerCase();
1165
759
  let configData;
1166
760
  if (ext === '.json') {
1167
- const fileContent = node_fs_1.default.readFileSync(config_path, 'utf-8');
1168
- configData = JSON.parse(fileContent);
761
+ configData = JSON.parse(node_fs_1.default.readFileSync(config_path, 'utf-8'));
1169
762
  }
1170
763
  else if (ext === '.yaml' || ext === '.yml') {
1171
- const fileContent = node_fs_1.default.readFileSync(config_path, 'utf-8');
1172
- configData = yaml_1.default.parse(fileContent);
764
+ configData = yaml_1.default.parse(node_fs_1.default.readFileSync(config_path, 'utf-8'));
1173
765
  }
1174
766
  else {
1175
767
  throw new Error('Unsupported config file format. Use JSON or YAML.');
1176
768
  }
1177
- // Basic validation of required fields
1178
- const requiredFields = ['name', 'description', 'instruction'];
1179
- for (const field of requiredFields) {
1180
- if (!configData[field]) {
769
+ for (const field of ['name', 'description', 'instruction']) {
770
+ if (!configData[field])
1181
771
  throw new Error(`Missing required field '${field}' in config file.`);
1182
- }
1183
- }
1184
- // Convert tools and tasks if present
1185
- if (configData.tools && Array.isArray(configData.tools)) {
1186
- configData.tools = configData.tools.map((toolConfig) => new PSAgentTool_1.PSAgentTool(toolConfig));
1187
- }
1188
- else {
1189
- configData.tools = [];
1190
- }
1191
- if (configData.tasks && Array.isArray(configData.tasks)) {
1192
- configData.tasks = configData.tasks.map((taskConfig) => new PSAgentTask_1.PSAgentTask(taskConfig.name, taskConfig.description));
1193
- }
1194
- else {
1195
- configData.tasks = [];
1196
772
  }
773
+ configData.tools = Array.isArray(configData.tools)
774
+ ? configData.tools.map((t) => new PSAgentTool_1.PSAgentTool(t))
775
+ : [];
776
+ configData.tasks = Array.isArray(configData.tasks)
777
+ ? configData.tasks.map((t) => new PSAgentTask_1.PSAgentTask(t.name, t.description))
778
+ : [];
1197
779
  return new PSAgent(configData);
1198
780
  }
781
+ // ─── Local Agent API ──────────────────────────────────────────────────────────
782
+ // this.localCoreAgent is the agent-core Agent, set only when local: true.
783
+ // Methods guard with _assertLocal(), then talk to this.localCoreAgent directly.
784
+ _assertLocal(method) {
785
+ if (!this.localCoreAgent)
786
+ throw new Error(`PSAgent.${method}() is only available when config.local === true. ` +
787
+ `Pass { local: true } to the PSAgent constructor to enable local mode.`);
788
+ }
789
+ /** The underlying agent-core Agent. Only set when local: true. */
790
+ get localAgent() {
791
+ return this.localCoreAgent;
792
+ }
793
+ /** Prompt the local Agent. @throws if not in local mode. */
794
+ async prompt(input, images) {
795
+ this._assertLocal('prompt');
796
+ if (typeof input === 'string')
797
+ return this.localCoreAgent.prompt(input, images);
798
+ return this.localCoreAgent.prompt(input);
799
+ }
800
+ /** Continue from the current transcript. @throws if not in local mode. */
801
+ async continueLocal() {
802
+ this._assertLocal('continueLocal');
803
+ return this.localCoreAgent.continue();
804
+ }
805
+ /** Abort the in-flight run. @throws if not in local mode. */
806
+ abortLocal() {
807
+ this._assertLocal('abortLocal');
808
+ this.localCoreAgent.abort();
809
+ }
810
+ /** Resolve when the current run settles. @throws if not in local mode. */
811
+ waitForLocalIdle() {
812
+ this._assertLocal('waitForLocalIdle');
813
+ return this.localCoreAgent.waitForIdle();
814
+ }
815
+ /** Reset the transcript and queues. @throws if not in local mode. */
816
+ resetLocal() {
817
+ this._assertLocal('resetLocal');
818
+ this.localCoreAgent.reset();
819
+ }
820
+ /** Queue a steering message. @throws if not in local mode. */
821
+ steerLocal(message) {
822
+ this._assertLocal('steerLocal');
823
+ this.localCoreAgent.steer(message);
824
+ }
825
+ /** Queue a follow-up message. @throws if not in local mode. */
826
+ followUpLocal(message) {
827
+ this._assertLocal('followUpLocal');
828
+ this.localCoreAgent.followUp(message);
829
+ }
830
+ /** Subscribe to lifecycle events. @throws if not in local mode. */
831
+ subscribeLocal(listener) {
832
+ this._assertLocal('subscribeLocal');
833
+ return this.localCoreAgent.subscribe(listener);
834
+ }
835
+ // ── Local state accessors ─────────────────────────────────────────────────────
836
+ /** Read-only view of the current agent state. Only set when local: true. */
837
+ get localState() {
838
+ return this.localCoreAgent?.state;
839
+ }
840
+ set localSteeringMode(mode) {
841
+ this._assertLocal('localSteeringMode');
842
+ this.localCoreAgent.steeringMode = mode;
843
+ }
844
+ get localSteeringMode() {
845
+ return this.localCoreAgent?.steeringMode;
846
+ }
847
+ set localFollowUpMode(mode) {
848
+ this._assertLocal('localFollowUpMode');
849
+ this.localCoreAgent.followUpMode = mode;
850
+ }
851
+ get localFollowUpMode() {
852
+ return this.localCoreAgent?.followUpMode;
853
+ }
854
+ // ─── A2A execute override: route by local flag ────────────────────────────────
855
+ /**
856
+ * A2A AgentExecutor entry point.
857
+ *
858
+ * When `config.local === true` the call is routed to the local support module.
859
+ * Otherwise the original remote platform path is used.
860
+ */
861
+ async execute(requestContext, eventBus) {
862
+ if (this.localCoreAgent) {
863
+ // Rebuild with current tool list so dynamically added tools are included.
864
+ this.localCoreAgent = (0, localAgent_1.buildLocalAgent)(this.config, (s) => this.getBaseUrl(s), () => this.Tools, this.log);
865
+ return (0, localAgent_1.executeLocalAgent)(this.localCoreAgent, requestContext, eventBus, this.cancelledTasks, this.config.name, this.log);
866
+ }
867
+ return (0, remoteAgent_1.executeRemoteAgent)({
868
+ name: this.Name,
869
+ log: this.log,
870
+ cancelledTasks: this.cancelledTasks,
871
+ start: (input, messages, log) => this.start(input, messages, log),
872
+ getEvents: () => this.getEvents(),
873
+ executeTool: (toolName, input, log) => this.executeTool(toolName, input, log),
874
+ }, requestContext, eventBus);
875
+ }
1199
876
  }
1200
877
  exports.PSAgent = PSAgent;
1201
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUFNBZ2VudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvUFNBZ2VudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFpREEsc0JBRUM7QUFuREQsdURBQXVEO0FBQ3ZELHNEQUF5QjtBQUN6QixzREFBeUI7QUFDekIsMERBQTZCO0FBUTdCLCtDQU80QjtBQUM1Qix3REFBMkQ7QUFDM0QsZ0RBQXdCO0FBQ3hCLHNEQUE4QjtBQUM5Qiw4REFBcUM7QUFDckMsK0JBQW9DLENBQUMsNEJBQTRCO0FBQ2pFLGdEQUF3QjtBQUN4QiwrQkFBMkI7QUFLM0IsK0NBQTRDO0FBQzVDLCtDQUFnRTtBQUNoRSwyREFBd0Q7QUFDeEQsdURBQXFEO0FBQ3JELHNFQUE4QztBQUM5Qyw2Q0FBdUQ7QUFTdkQsTUFBTSxJQUFJLEdBQUcsSUFBQSxxQkFBVyxFQUFDLGVBQWUsQ0FBQyxDQUFDO0FBRTFDLHVFQUF1RTtBQUN2RSxNQUFNLEtBQUssR0FBRyxJQUFBLHFCQUFVLEVBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBRWhDLEtBQUssVUFBVSxLQUFLLENBQUMsRUFBVTtJQUNwQyxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDM0QsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EwQ0c7QUFDSCxNQUFhLE9BQU87SUFDbEIsTUFBTSxDQUFnQjtJQUNkLEtBQUssR0FBa0IsRUFBRSxDQUFDO0lBQzFCLEtBQUssR0FBa0IsRUFBRSxDQUFDO0lBQzFCLE9BQU8sQ0FBVTtJQUNqQixhQUFhLENBQVU7SUFDZCxHQUFHLENBQWlCO0lBQzdCLFdBQVcsQ0FBZTtJQUUxQixjQUFjLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztJQUVwQyxVQUFVLEdBQUcsS0FBSyxFQUN2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
878
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUFNBZ2VudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvUFNBZ2VudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUF5REEsc0JBRUM7QUEzREQsc0RBQXlCO0FBQ3pCLHNEQUF5QjtBQUN6QiwwREFBNkI7QUFHN0IsK0NBTzRCO0FBQzVCLHdEQUEyRDtBQUUzRCxnREFBd0I7QUFDeEIsc0RBQThCO0FBQzlCLDhEQUFxQztBQUNyQyxnREFBd0I7QUFDeEIsK0JBQTJCO0FBTzNCLCtDQUE0QztBQUM1QywrQ0FBZ0U7QUFRaEUsNkNBQWtFO0FBQ2xFLCtDQUFtRDtBQUNuRCwyREFBd0Q7QUFDeEQsdURBQXFEO0FBQ3JELHNFQUE4QztBQUM5Qyw2Q0FBdUQ7QUFhdkQsTUFBTSxJQUFJLEdBQUcsSUFBQSxxQkFBVyxFQUFDLGVBQWUsQ0FBQyxDQUFDO0FBQzFDLHVFQUF1RTtBQUN2RSxNQUFNLEtBQUssR0FBRyxJQUFBLHFCQUFVLEVBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBRWhDLEtBQUssVUFBVSxLQUFLLENBQUMsRUFBVTtJQUNwQyxPQUFPLElBQUksT0FBTyxDQUFPLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDakUsQ0FBQztBQUVELG9GQUFvRjtBQUVwRjs7O0dBR0c7QUFDSCxTQUFTLGFBQWEsQ0FDcEIsTUFBOEI7SUFFOUIsT0FBUSxNQUE2QixDQUFDLEtBQUssS0FBSyxJQUFJLENBQUM7QUFDdkQsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EwQ0c7QUFFSCxNQUFhLE9BQU87SUFDbEIsTUFBTSxDQUF5QjtJQUN2QixLQUFLLEdBQWtCLEVBQUUsQ0FBQztJQUMxQixLQUFLLEdBQWtCLEVBQUUsQ0FBQztJQUMxQixPQUFPLENBQVU7SUFDakIsYUFBYSxDQUFVO0lBQ2QsR0FBRyxDQUFpQjtJQUM3QixXQUFXLENBQWU7SUFDMUIsY0FBYyxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7SUFFM0M7Ozs7T0FJRztJQUNILHNFQUFzRTtJQUM5RCxjQUFjLENBQVM7SUFFeEIsVUFBVSxHQUFHLEtBQUssRUFBRSxNQUFjLEVBQWlCLEVBQUU7UUFDMUQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDbEMsQ0FBQyxDQUFDO0lBQ0Y7Ozs7T0FJRztJQUVILFlBQVksTUFBOEIsRUFBRSxRQUFzQjtRQUNoRSxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUM7UUFFdEIsSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUNiLElBQUksQ0FBQyxXQUFXLEdBQUcsUUFBUSxDQUFDO1FBQzlCLENBQUM7UUFFRCxJQUFJLGFBQWEsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQzFCLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBQSw0QkFBZSxFQUNuQyxNQUFNLEVBQ04sQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQ3pCLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQ2hCLElBQUksQ0FBQyxHQUFHLENBQ1QsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0lBQ0QsaUZBQWlGO0lBQ2pGOzs7T0FHRztJQUNILElBQVcsVUFBVTtRQUNuQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxJQUFJLFVBQVUsQ0FBQztJQUMvQyxDQUFDO0lBQ0Q7Ozs7T0FJRztJQUNILElBQVcsSUFBSTtRQUNiLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7SUFDMUIsQ0FBQztJQUNEOzs7T0FHRztJQUNILElBQVcsV0FBVztRQUNwQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDO0lBQ2pDLENBQUM7SUFDRDs7O09BR0c7SUFDSCxJQUFXLFdBQVc7UUFDcEIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQztJQUNqQyxDQUFDO0lBQ0Q7OztPQUdHO0lBQ0gsSUFBVyxLQUFLO1FBQ2QsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztJQUMzQixDQUFDO0lBQ0Q7OztPQUdHO0lBQ0gsSUFBVyxXQUFXO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUM7SUFDbEMsQ0FBQztJQUNEOzs7T0FHRztJQUNILElBQVcsWUFBWTtRQUNyQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDO0lBQ25DLENBQUM7SUFDRDs7O09BR0c7SUFDSCxJQUFXLEtBQUs7UUFDZCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO0lBQzNCLENBQUM7SUFDRDs7O09BR0c7SUFDSCxJQUFXLEtBQUssQ0FBQyxLQUF5QjtRQUN4QyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7SUFDNUIsQ0FBQztJQUNEOzs7O09BSUc7SUFDSCxJQUFXLEtBQUs7UUFDZCxNQUFNLFdBQVcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsRSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNoRSxNQUFNLFNBQVMsR0FBYyxFQUFFLENBQUM7WUFDaEMsS0FBSyxNQUFNLGNBQWMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUNwRCxTQUFTLENBQUMsSUFBSSxDQUNaLElBQUksT0FBTyxDQUNULE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLGNBQWMsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQ2hFLENBQ0YsQ0FBQztZQUNKLENBQUM7WUFDRCxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksK0JBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBQ2xELENBQUM7UUFDRCxPQUFPLFdBQVcsQ0FBQztJQUNyQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILElBQVcsS0FBSztRQUNkLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVEOzs7T0FHRztJQUNILElBQVcsT0FBTztRQUNoQixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDdEIsQ0FBQztJQUNEOzs7T0FHRztJQUNILElBQVcsT0FBTyxDQUFDLEtBQXlCO1FBQzFDLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO0lBQ3ZCLENBQUM7SUFDRDs7O09BR0c7SUFDSCxJQUFXLGFBQWE7UUFDdEIsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQzVCLENBQUM7SUFDRDs7O09BR0c7SUFDSCxJQUFXLGFBQWEsQ0FBQyxLQUF5QjtRQUNoRCxJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztJQUM3QixDQUFDO0lBQ0QsSUFBVyxNQUFNO1FBQ2YsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3JCLENBQUM7SUFDRDs7O09BR0c7SUFDSSxPQUFPLENBQUMsSUFBaUI7UUFDOUIsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNoQixJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUNsQixDQUFDO1FBQ0QsSUFBSSxTQUFTLEdBQ1gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDdEUsQ0FBQyxDQUFDLENBQUM7UUFDTCxJQUFJLFNBQVMsS0FBSyxDQUFDLENBQUM7WUFDbEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxrQkFBa0IsSUFBSSxDQUFDLElBQUksMkJBQTJCLENBQUMsQ0FBQztRQUMxRSxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFjLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzNFLElBQUksU0FBUyxLQUFLLENBQUMsQ0FBQztZQUNsQixNQUFNLElBQUksS0FBSyxDQUFDLGtCQUFrQixJQUFJLENBQUMsSUFBSSwwQkFBMEIsQ0FBQyxDQUFDO1FBQ3pFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxnREFBZ0Q7SUFDeEMsS0FBSyxDQUFDLFFBQVE7UUFDcEIsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUs7WUFBRSxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO1FBQ2hELElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRO1lBQUUsT0FBTyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDOUQsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLFlBQVksSUFBSSxFQUFFLENBQUM7SUFDeEMsQ0FBQztJQUVELHFDQUFxQztJQUNyQyw4REFBOEQ7SUFDOUQsb0VBQW9FO0lBQ3BFLDREQUE0RDtJQUNwRCxLQUFLLENBQUMsY0FBYztRQUMxQixNQUFNLE9BQU8sR0FBMkIsRUFBRSxDQUFDO1FBQzNDLE9BQU8sQ0FBQyxlQUFlLENBQUMsR0FBRyxVQUFVLE1BQU0sSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUM7UUFDN0QsT0FBTyxDQUFDLGFBQWEsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsWUFBWSxJQUFJLEVBQUUsQ0FBQztRQUN4RCxPQUFPLENBQUMsY0FBYyxDQUFDLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxhQUFhLElBQUksRUFBRSxDQUFDO1FBQzFELE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsZUFBZSxJQUFJLEVBQUUsQ0FBQztRQUM5RCxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsa0JBQWtCO1lBQ2hDLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUN6RCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBQ0Qsd0RBQXdEO0lBQ3hELG1GQUFtRjtJQUMzRSxVQUFVLENBQ2hCLFVBQW9ELFFBQVE7UUFFNUQsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDckIsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUM3QyxJQUFJLFVBQVU7Z0JBQUUsT0FBTyxVQUFVLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN4RCxDQUFDO1FBQ0QsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLElBQUksdUJBQXVCLENBQUM7UUFDbEUsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBQ0Q7Ozs7OztPQU1HO0lBQ0ksS0FBSyxDQUFDLEtBQUssQ0FDaEIsS0FBYSxFQUNiLE9BQWUsRUFDZixHQUFtQjtRQUVuQixHQUFHLEdBQUcsR0FBRyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUM7UUFDdEIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFdBQVc7WUFDOUIsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXO1lBQ2xCLENBQUMsQ0FBQyxJQUFBLDhCQUFvQixFQUNsQixNQUFDLENBQUMsWUFBWSxDQUNaLE1BQUM7aUJBQ0UsTUFBTSxDQUFDO2dCQUNOLEtBQUssRUFBRSxNQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDO29CQUNyQixLQUFLLEVBQUUsT0FBTztvQkFDZCxXQUFXLEVBQUUsd0JBQXdCO2lCQUN0QyxDQUFDO2FBQ0gsQ0FBQztpQkFDRCxJQUFJLENBQUM7Z0JBQ0osS0FBSyxFQUFFLGNBQWM7Z0JBQ3JCLFdBQVcsRUFBRSw0Q0FBNEM7YUFDMUQsQ0FBQyxFQUNKLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUNoQixDQUNGLENBQUM7UUFFTixJQUFJLE9BQU8sQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUN2QixNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUU7Z0JBQ2hDLE9BQU8sRUFBRTtvQkFDUCxJQUFJLEVBQUUsT0FBTztvQkFDYixLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFO29CQUN6QixXQUFXLEVBQUUsNkNBQTZDO29CQUMxRCxLQUFLLEVBQUUsY0FBYztpQkFDdEI7YUFDRixDQUFDLENBQUM7UUFDTCxDQUFDO1FBRUQsTUFBTSxhQUFhLEdBQ2pCLElBQUksQ0FBQyxZQUFZO1lBQ2pCLElBQUEsOEJBQW9CLEVBQ2xCLE1BQUMsQ0FBQyxZQUFZLENBQ1osTUFBQztpQkFDRSxNQUFNLENBQUM7Z0JBQ04sUUFBUSxFQUFFLE1BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUM7b0JBQ3hCLEtBQUssRUFBRSxVQUFVO29CQUNqQixXQUFXLEVBQUUsNkJBQTZCO2lCQUMzQyxDQUFDO2FBQ0gsQ0FBQztpQkFDRCxJQUFJLENBQUM7Z0JBQ0osS0FBSyxFQUFFLGdCQUFnQjtnQkFDdkIsV0FBVyxFQUNULHdEQUF3RDthQUMzRCxDQUFDLEVBQ0osRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLENBQ2pCLENBQ0YsQ0FBQztRQUVKLE1BQU0sSUFBSSxHQUFHO1lBQ1gsS0FBSyxFQUFFO2dCQUNMLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtnQkFDZixXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVc7Z0JBQzdCLGFBQWEsRUFBRSxJQUFJLENBQUMsV0FBVztnQkFDL0IsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLElBQUksT0FBTztnQkFDMUIsWUFBWSxFQUFFLE9BQU87Z0JBQ3JCLGFBQWE7YUFDZDtZQUNELFlBQVksRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxFQUFFLE9BQU8sRUFBRSxPQUFPLElBQUksRUFBRSxFQUFFLENBQUM7WUFDOUQsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUMvQixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7Z0JBQ2YsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXO2FBQzlCLENBQUMsQ0FBQztZQUNILEtBQUssRUFBRTtnQkFDTCxTQUFTLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7b0JBQ25DLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtvQkFDZixXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVc7b0JBQzdCLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtvQkFDZixlQUFlLEVBQUUsSUFBSSxDQUFDLGNBQWM7b0JBQ3BDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtvQkFDZixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07aUJBQ3BCLENBQUMsQ0FBQztnQkFDSCxpQkFBaUIsRUFBRSxFQUFFO2FBQ3RCO1lBQ0QsUUFBUSxFQUFFO2dCQUNSLGFBQWEsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsSUFBSSxLQUFLO2dCQUM3QyxJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLElBQUksS0FBSzthQUN6QztZQUNELFVBQVUsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVU7WUFDbEMsVUFBVSxFQUFFO2dCQUNWLGFBQWEsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxhQUFhLElBQUksSUFBSTtnQkFDNUQseUJBQXlCLEVBQ3ZCLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLHlCQUF5QixJQUFJLElBQUk7YUFDNUQ7U0FDRixDQUFDO1FBQ0YsSUFBSSxDQUFDLEtBQUssQ0FBQyw2QkFBNkIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN6RSxJQUFJLENBQUM7WUFDSCxNQUFNLE9BQU8sR0FBRyxNQUFNLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUM1QyxNQUFNLFFBQVEsR0FBRyxNQUFNLEtBQUssQ0FDMUIsNEJBQWEsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsRUFBRSxhQUFhLENBQUMsRUFDdEU7Z0JBQ0UsTUFBTSxFQUFFLE1BQU07Z0JBQ2QsT0FBTyxFQUFFLEVBQUUsY0FBYyxFQUFFLGtCQUFrQixFQUFFLEdBQUcsT0FBTyxFQUFFO2dCQUMzRCxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUM7Z0JBQzFCLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE9BQU8sRUFBRSxDQUFDLE9BQVksRUFBRSxLQUFVLEVBQUUsUUFBYSxFQUFFLEVBQUU7b0JBQ25ELHlEQUF5RDtvQkFDekQsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxHQUFHLElBQUksT0FBTyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7d0JBQzdELEdBQUcsRUFBRSxJQUFJLENBQ1AsMENBQTBDLE9BQU8sR0FBRyxDQUFDLGFBQWEsUUFBUSxDQUFDLE1BQU0sRUFBRSxFQUNuRixLQUFLLENBQ04sQ0FBQzt3QkFDRixPQUFPLElBQUksQ0FBQztvQkFDZCxDQUFDO29CQUNELE9BQU8sS0FBSyxDQUFDO2dCQUNmLENBQUM7Z0JBQ0QsVUFBVSxFQUFFLENBQUMsT0FBWSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsR0FBRyxJQUFJLEVBQUUsbUJBQW1CO2FBQy9FLENBQ0YsQ0FBQztZQUVGLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQ2pCLElBQUksWUFBWSxDQUFDO2dCQUNqQixJQUFJLENBQUM7b0JBQ0gsWUFBWSxHQUFHLE1BQU0sUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUN2QyxDQUFDO2dCQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7b0JBQ1gsTUFBTSxJQUFJLEtBQUssQ0FDYixrQ0FBa0MsUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FDMUQsQ0FBQztnQkFDSixDQUFDO2dCQUNELElBQUksWUFBWTtvQkFDZCxNQUFNLElBQUksS0FBSyxDQUNiLGtDQUFrQyxRQUFRLENBQUMsTUFBTSxjQUFjLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUN2RyxDQUFDO1lBQ04sQ0FBQztZQUVELE1BQU0sWUFBWSxHQUFRLE1BQU0sUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2hELElBQUksQ0FBQyxPQUFPLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7WUFDMUMsSUFBSSxDQUFDLGFBQWEsR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQztZQUN0RCxHQUFHLEVBQUUsSUFBSSxDQUNQLDBCQUEwQixJQUFJLENBQUMsT0FBTyxxQkFBcUIsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUNoRixDQUFDO1lBQ0YsT0FBTyxJQUFJLENBQUMsYUFBdUIsQ0FBQztRQUN0QyxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLEdBQUcsRUFBRSxLQUFLLENBQUMsd0JBQXdCLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDNUMsTUFBTSxLQUFLLENBQUM7UUFDZCxDQUFDO0lBQ0gsQ0FBQztJQUNEOzs7O09BSUc7SUFDSSxLQUFLLENBQUMsUUFBUSxDQUFDLFdBQW1CO1FBQ3ZDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7UUFDckIsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQzFELElBQUksQ0FBQztZQUNILE1BQU0sUUFBUSxHQUFHLE1BQU0sS0FBSyxDQUMxQiw0QkFBYSxDQUFDLGNBQWMsQ0FDMUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsRUFDekIsSUFBSSxJQUFJLENBQUMsT0FBTyxXQUFXLENBQzVCLEVBQ0Q7Z0JBQ0UsTUFBTSxFQUFFLE1BQU07Z0JBQ2QsT0FBTyxFQUFFO29CQUNQLGNBQWMsRUFBRSxrQkFBa0I7b0JBQ2xDLEdBQUcsQ0FBQyxNQUFNLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztpQkFDakM7Z0JBQ0QsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUM7b0JBQ25CLGNBQWMsRUFBRSxJQUFJLENBQUMsYUFBYTtvQkFDbEMsV0FBVztpQkFDWixDQUFDO2dCQUNGLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE9BQU8sRUFBRSxDQUFDLE9BQVksRUFBRSxLQUFVLEVBQUUsUUFBYSxFQUFFLEVBQUU7b0JBQ25ELElBQUksS0FBSyxLQUFLLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLElBQUksR0FBRyxJQUFJLE9BQU8sR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO3dCQUM5RCxHQUFHLEVBQUUsSUFBSSxDQUNQLDJDQUEyQyxPQUFPLEdBQUcsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUN4RyxLQUFLLENBQ04sQ0FBQzt3QkFDRixPQUFPLElBQUksQ0FBQztvQkFDZCxDQUFDO29CQUNELE9BQU8sS0FBSyxDQUFDO2dCQUNmLENBQUM7Z0JBQ0QsVUFBVSxFQUFFLENBQUMsT0FBWSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsR0FBRyxJQUFJO2FBQzFELENBQ0YsQ0FBQztZQUNGLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQ2pCLEdBQUcsRUFBRSxLQUFLLENBQUMsMEJBQTBCLEVBQUUsTUFBTSxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztnQkFDOUQsTUFBTSxJQUFJLEtBQUssQ0FBQyx1QkFBdUIsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7WUFDNUQsQ0FBQztZQUNELE1BQU0sWUFBWSxHQUNmLENBQUMsTUFBTSxRQUFRLENBQUMsSUFBSSxFQUFFLENBQXlCLElBQUksRUFBRSxDQUFDO1lBQ3pELE9BQU8sWUFBWSxDQUFDO1FBQ3RCLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsR0FBRyxFQUFFLEtBQUssQ0FBQywwQkFBMEIsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUM5QyxNQUFNLElBQUksS0FBSyxDQUNiLDZCQUE2QixLQUFLLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FDdEYsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLEtBQUssQ0FBQyxNQUFNLENBQ2pCLFVBQStCO1FBRS9CLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7UUFDckIsSUFBSSxJQUFJLENBQUMsY0FBYztZQUFFLE9BQU8sRUFBRSxDQUFDO1FBQ25DLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTztZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUMxRCxJQUFJLENBQUM7WUFDSCxNQUFNLFFBQVEsR0FBRyxNQUFNLEtBQUssQ0FDMUIsNEJBQWEsQ0FBQyxjQUFjLENBQzFCLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEVBQ3pCLElBQUksSUFBSSxDQUFDLE9BQU8sU0FBUyxDQUMxQixFQUNEO2dCQUNFLE1BQU0sRUFBRSxNQUFNO2dCQUNkLE9BQU8sRUFBRTtvQkFDUCxjQUFjLEVBQUUsa0JBQWtCO29CQUNsQyxHQUFHLENBQUMsTUFBTSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7aUJBQ2pDO2dCQUNELElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDO29CQUNuQixjQUFjLEVBQUUsSUFBSSxDQUFDLGFBQWE7b0JBQ2xDLG9CQUFvQixFQUFFLFVBQVU7aUJBQ2pDLENBQUM7Z0JBQ0YsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsT0FBTyxFQUFFLENBQUMsT0FBWSxFQUFFLEtBQVUsRUFBRSxRQUFhLEVBQUUsRUFBRTtvQkFDbkQseURBQXlEO29CQUN6RCxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxJQUFJLEdBQUcsSUFBSSxPQUFPLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQzt3QkFDOUQsR0FBRyxFQUFFLElBQUksQ0FDUCxtQ0FBbUMsT0FBTyxHQUFHLENBQUMsSUFBSSxRQUFRLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFDL0YsS0FBSyxDQUNOLENBQUM7d0JBQ0YsT0FBTyxJQUFJLENBQUM7b0JBQ2QsQ0FBQztvQkFDRCxPQUFPLEtBQUssQ0FBQztnQkFDZixDQUFDO2dCQUNELFVBQVUsRUFBRSxDQUFDLE9BQVksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLEdBQUcsSUFBSSxFQUFFLG1CQUFtQjthQUMvRSxDQUNGLENBQUM7WUFDRixJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxDQUFDO2dCQUNqQixHQUFHLEVBQUUsS0FBSyxDQUFDLHVCQUF1QixFQUFFLE1BQU0sUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7Z0JBQzNELE1BQU0sSUFBSSxLQUFLLENBQUMsdUJBQXVCLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1lBQzVELENBQUM7WUFDRCxNQUFNLFVBQVUsR0FBRyxDQUFDLE1BQU0sUUFBUSxDQUFDLElBQUksRUFBRSxDQUF3QixDQUFDO1lBQ2xFLE9BQU8sVUFBVSxDQUFDO1FBQ3BCLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsR0FBRyxFQUFFLEtBQUssQ0FBQyx1QkFBdUIsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUMzQyxHQUFHLEVBQUUsS0FBSyxDQUFDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUNsRCxHQUFHLEVBQUUsS0FBSyxDQUFDLGNBQWMsRUFBRSxVQUFVLENBQUMsQ0FBQztZQUN2QyxNQUFNLElBQUksS0FBSyxDQUNiLDJCQUEyQixLQUFLLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FDcEYsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0lBQ0Q7OztPQUdHO0lBQ0ksS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFtQjtRQUNyQyxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN4QixJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLFdBQVc7Z0JBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUN2RSxPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTztZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUMzRCxJQUFJLENBQUM7WUFDSCxNQUFNLFFBQVEsR0FBRyxNQUFNLEtBQUssQ0FDMUIsNEJBQWEsQ0FBQyxjQUFjLENBQzFCLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEVBQ3pCLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUNuQixFQUNEO2dCQUNFLE1BQU0sRUFBRSxRQUFRO2dCQUNoQixPQUFPLEVBQUU7b0JBQ1AsY0FBYyxFQUFFLGtCQUFrQjtvQkFDbEMsR0FBRyxDQUFDLE1BQU0sSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO2lCQUNqQztnQkFDRCxPQUFPLEVBQUUsQ0FBQztnQkFDVixPQUFPLEVBQUUsQ0FBQyxPQUFZLEVBQUUsS0FBVSxFQUFFLFFBQWEsRUFBRSxFQUFFO29CQUNuRCx5REFBeUQ7b0JBQ3pELElBQUksS0FBSyxLQUFLLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLElBQUksR0FBRyxJQUFJLE9BQU8sR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO3dCQUM5RCxHQUFHLEVBQUUsSUFBSSxDQUFDLHlDQUF5QyxPQUFPLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQzt3QkFDbEUsT0FBTyxJQUFJLENBQUM7b0JBQ2QsQ0FBQztvQkFDRCxPQUFPLEtBQUssQ0FBQztnQkFDZixDQUFDO2dCQUNELFVBQVUsRUFBRSxDQUFDLE9BQVksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLEdBQUcsSUFBSSxFQUFFLG1CQUFtQjthQUMvRSxDQUNGLENBQUM7WUFDRixJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxDQUFDO2dCQUNqQixJQUFJLFlBQVksQ0FBQztnQkFDakIsSUFBSSxDQUFDO29CQUNILFlBQVksR0FBRyxNQUFNLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztvQkFDckMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDLE1BQU0sUUFBUSxDQUFDLElBQUksRUFBRSxDQUFRLENBQUMsQ0FBQztnQkFDN0MsQ0FBQztnQkFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO29CQUNYLE1BQU0sSUFBSSxLQUFLLENBQ2Isa0NBQWtDLFFBQVEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQzFELENBQUM7Z0JBQ0osQ0FBQztnQkFDRCxJQUFJLFlBQVk7b0JBQ2QsTUFBTSxJQUFJLEtBQUssQ0FDYixrQ0FBa0MsUUFBUSxDQUFDLE1BQU0sY0FBYyxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQzlGLENBQUM7WUFDTixDQUFDO1lBQ0QsR0FBRyxFQUFFLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxPQUFPLHlCQUF5QixDQUFDLENBQUM7UUFDNUQsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixHQUFHLEVBQUUsS0FBSyxDQUFDLHlCQUF5QixFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQzdDLE1BQU0sS0FBSyxDQUFDO1FBQ2QsQ0FBQztJQUNILENBQUM7SUFDRDs7OztPQUlHO0lBQ0ksS0FBSyxDQUFDLFNBQVM7UUFDcEIsSUFBSSxJQUFJLENBQUMsY0FBYztZQUNyQixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNuRSxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWE7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLDJCQUEyQixDQUFDLENBQUM7UUFDdEUsSUFBSSxDQUFDO1lBQ0gsTUFBTSxRQUFRLEdBQUcsTUFBTSxLQUFLLENBQzFCLDRCQUFhLENBQUMsY0FBYyxDQUMxQixJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxFQUN6Qix5QkFBeUIsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUM5QyxFQUNEO2dCQUNFLE1BQU0sRUFBRSxLQUFLO2dCQUNiLE9BQU8sRUFBRTtvQkFDUCxjQUFjLEVBQUUsa0JBQWtCO29CQUNsQyxHQUFHLENBQUMsTUFBTSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7aUJBQ2pDO2dCQUNELE9BQU8sRUFBRSxDQUFDO2dCQUNWLE9BQU8sRUFBRSxDQUFDLE9BQVksRUFBRSxLQUFVLEVBQUUsUUFBYSxFQUFFLEVBQUU7b0JBQ25ELHlEQUF5RDtvQkFDekQsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sSUFBSSxHQUFHLElBQUksT0FBTyxHQUFHLENBQUMsQ0FBQzt3QkFDM0QsT0FBTyxJQUFJLENBQUM7b0JBQ2QsT0FBTyxLQUFLLENBQUM7Z0JBQ2YsQ0FBQztnQkFDRCxVQUFVLEVBQUUsQ0FBQyxPQUFZLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxHQUFHLElBQUk7YUFDMUQsQ0FDRixDQUFDO1lBQ0YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFO2dCQUNkLE1BQU0sSUFBSSxLQUFLLENBQUMsdUJBQXVCLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1lBQzVELE9BQU8sQ0FBQyxNQUFNLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBK0IsQ0FBQztRQUMvRCxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE1BQU0sSUFBSSxLQUFLLENBQ2IsaUNBQWlDLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUMxRixDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7SUFDRDs7Ozs7Ozs7Ozs7O09BWUc7SUFDSSxLQUFLLENBQUMsaUJBQWlCO1FBQzVCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTztZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUMxRCxNQUFNLFVBQVUsR0FBRyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLHFEQUFxRCxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDckgsSUFBSSxDQUFDO1lBQ0gsTUFBTSxRQUFRLEdBQUcsTUFBTSxLQUFLLENBQUMsVUFBVSxFQUFFO2dCQUN2QyxNQUFNLEVBQUUsS0FBSztnQkFDYixPQUFPLEVBQUU7b0JBQ1AsY0FBYyxFQUFFLGtCQUFrQjtvQkFDbEMsYUFBYSxFQUFFLEdBQUcsTUFBTSxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUU7aUJBQzFDO2dCQUNELE9BQU8sRUFBRSxDQUFDO2dCQUNWLE9BQU8sRUFBRSxDQUFDLE9BQVksRUFBRSxLQUFVLEVBQUUsUUFBYSxFQUFFLEVBQUU7b0JBQ25ELElBQUksS0FBSyxLQUFLLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLElBQUksR0FBRyxJQUFJLE9BQU8sR0FBRyxDQUFDLENBQUM7d0JBQzNELE9BQU8sSUFBSSxDQUFDO29CQUNkLE9BQU8sS0FBSyxDQUFDO2dCQUNmLENBQUM7Z0JBQ0QsVUFBVSxFQUFFLENBQUMsT0FBWSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsR0FBRyxJQUFJO2FBQzFELENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQ2pCLE1BQU0sU0FBUyxHQUFHLE1BQU0sUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUN4QyxJQUFJLENBQUMsS0FBSyxDQUFDLDBDQUEwQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO2dCQUNsRSxNQUFNLElBQUksS0FBSyxDQUNiLHVCQUF1QixRQUFRLENBQUMsTUFBTSxXQUFXLFNBQVMsRUFBRSxDQUM3RCxDQUFDO1lBQ0osQ0FBQztZQUNELE1BQU0sY0FBYyxHQUFHLE1BQU0sUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQzdDLE9BQU8sY0FBcUMsQ0FBQztRQUMvQyxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLElBQUksQ0FBQyxLQUFLLENBQUMsMENBQTBDLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDOUQsTUFBTSxJQUFJLEtBQUssQ0FDYixvQ0FBb0MsS0FBSyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQzdGLENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O09BbUJHO0lBQ0ksS0FBSyxDQUFDLFdBQVcsQ0FDdEIsUUFBZ0IsRUFDaEIsS0FBMEIsRUFDMUIsR0FBbUI7UUFFbkIsTUFBTSxPQUFPLEdBQXVCLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDO1FBQ3BELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLFFBQVEsQ0FBQyxDQUFDO1FBQ3pELElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNWLE9BQU8sQ0FBQyxLQUFLLEdBQUcsSUFBSSxLQUFLLENBQUMsa0JBQWtCLFFBQVEsWUFBWSxDQUFDLENBQUM7UUFDcEUsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUM7Z0JBQ0gsT0FBTyxDQUFDLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQzlDLENBQUM7WUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO2dCQUNmLE9BQU8sQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDO2dCQUMzQixPQUFPLENBQUMsS0FBSyxHQUFHLElBQUksS0FBSyxDQUN2QixHQUFHLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUM1RCxDQUFDO1lBQ0osQ0FBQztRQUNILENBQUM7UUFDRCxJQUFJLENBQUM7WUFDSCxJQUFJLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDbEIsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDO29CQUNoQixLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUU7aUJBQ3pELENBQUMsQ0FBQztZQUNMLENBQUM7aUJBQU0sQ0FBQztnQkFDTixNQUFNLElBQUksQ0FBQyxNQUFNLENBQ2YsT0FBTyxDQUFDLE1BQU0sSUFBSTtvQkFDaEIsTUFBTSxFQUFFLHdDQUF3QztpQkFDakQsQ0FDRixDQUFDO1lBQ0osQ0FBQztRQUNILENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsT0FBTyxDQUFDLEtBQUssR0FBRyxJQUFJLEtBQUssQ0FDdkIsOENBQThDLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUN2RyxDQUFDO1FBQ0osQ0FBQztRQUNELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFTyxnQkFBZ0I7UUFDdEIsTUFBTSxVQUFVLEdBQUcsaUJBQUUsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQzFDLEtBQUssTUFBTSxhQUFhLElBQUksVUFBVSxFQUFFLENBQUM7WUFDdkMsS0FBSyxNQUFNLGFBQWEsSUFBSSxVQUFVLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUM7Z0JBQzVELElBQUksYUFBYSxDQUFDLE1BQU0sS0FBSyxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUTtvQkFDNUQsT0FBTyxhQUFhLENBQUMsT0FBTyxDQUFDO1lBQ2pDLENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQztJQUNEOzs7T0FHRztJQUNLLE9BQU87UUFDYixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQztJQUNuQyxDQUFDO0lBQ0Q7Ozs7T0FJRztJQUNJLFlBQVksQ0FBQyxZQUF1QixJQUFJLDBCQUFpQixFQUFFO1FBQ2hFLE1BQU0sY0FBYyxHQUFHLElBQUksOEJBQXFCLENBQzlDLElBQUksQ0FBQyxZQUFZLEVBQUUsRUFDbkIsU0FBUyxFQUNULElBQUksQ0FDTCxDQUFDO1FBQ0YsTUFBTSxVQUFVLEdBQUcsSUFBSSx1QkFBYSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3JELE1BQU0sVUFBVSxHQUFHLElBQUEsaUJBQU8sR0FBRSxDQUFDO1FBQzdCLFVBQVUsQ0FBQyxHQUFHLENBQUM7WUFDYixJQUFBLGNBQUksRUFBQztnQkFDSCxNQUFNLEVBQUUsR0FBRztnQkFDWCxPQUFPLEVBQUUsZ0NBQWdDO2dCQUN6QyxpQkFBaUIsRUFBRSxLQUFLO2dCQUN4QixvQkFBb0IsRUFBRSxHQUFHO2FBQzFCLENBQUM7U0FDSCxDQUFDLENBQUM7UUFDSCxVQUFVLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ25DLE9BQU8sRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztJQUNuRCxDQUFDO0lBRU0sWUFBWTtRQUNqQixPQUFPO1lBQ0wsT0FBTyxFQUFFLE9BQU8sRUFBRSxzQkFBc0I7WUFDeEMsZUFBZSxFQUFFLE9BQU87WUFDeEIsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO1lBQ2YsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsZ0RBQWdEO1lBQy9FLEdBQUcsRUFBRSxVQUFVLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLHFCQUFxQjtZQUNsRixRQUFRLEVBQUU7Z0JBQ1IsWUFBWSxFQUFFLElBQUk7Z0JBQ2xCLEdBQUcsRUFBRSxXQUFXLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFO2FBQzFDO1lBQ0QsWUFBWSxFQUFFO2dCQUNaLFNBQVMsRUFBRSxJQUFJLEVBQUUsdUNBQXVDO2dCQUN4RCxpQkFBaUIsRUFBRSxLQUFLLEVBQUUsOENBQThDO2dCQUN4RSxzQkFBc0IsRUFBRSxJQUFJLEVBQUUscUJBQXFCO2FBQ3BEO1lBQ0QsZUFBZSxFQUFFLFNBQVM7WUFDMUIsUUFBUSxFQUFFLFNBQVM7WUFDbkIsaUJBQWlCLEVBQUUsQ0FBQyxNQUFNLENBQUM7WUFDM0Isa0JBQWtCLEVBQUUsQ0FBQyxNQUFNLEVBQUUsYUFBYSxDQUFDLEVBQUUsc0NBQXNDO1lBQ25GLE1BQU0sRUFBRTtnQkFDTjtvQkFDRSxFQUFFLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQztvQkFDaEQsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO29CQUNmLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVztvQkFDN0IsSUFBSSxFQUFFLENBQUMsU0FBUyxDQUFDO29CQUNqQixRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLElBQUksRUFBRTtvQkFDcEMsVUFBVSxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsZ0NBQWdDO29CQUN0RCxXQUFXLEVBQUUsQ0FBQyxNQUFNLEVBQUUsYUFBYSxDQUFDLEVBQUUsZ0NBQWdDO2lCQUN2RTtnQkFDRCxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO29CQUMzQixFQUFFLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQztvQkFDaEQsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO29CQUNmLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVztvQkFDN0IsSUFBSSxFQUFFLENBQUMsY0FBYyxDQUFDO29CQUN0QixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7b0JBQ3ZCLFVBQVUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLGdDQUFnQztvQkFDdEQsV0FBVyxFQUFFLENBQUMsTUFBTSxFQUFFLGFBQWEsQ0FBQyxFQUFFLDRDQUE0QztpQkFDbkYsQ0FBQyxDQUFDO2FBQ0o7WUFDRCxpQ0FBaUMsRUFBRSxLQUFLO1NBQ3pDLENBQUM7SUFDSixDQUFDO0lBRU0sTUFBTSxDQUFDLGNBQWMsQ0FBQyxXQUFtQjtRQUM5QyxJQUFJLENBQUMsaUJBQUUsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDO1lBQzdCLE1BQU0sSUFBSSxLQUFLLENBQUMsZUFBZSxXQUFXLGlCQUFpQixDQUFDLENBQUM7UUFDL0QsTUFBTSxHQUFHLEdBQUcsbUJBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDcEQsSUFBSSxVQUFlLENBQUM7UUFDcEIsSUFBSSxHQUFHLEtBQUssT0FBTyxFQUFFLENBQUM7WUFDcEIsVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsaUJBQUUsQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDakUsQ0FBQzthQUFNLElBQUksR0FBRyxLQUFLLE9BQU8sSUFBSSxHQUFHLEtBQUssTUFBTSxFQUFFLENBQUM7WUFDN0MsVUFBVSxHQUFHLGNBQUksQ0FBQyxLQUFLLENBQUMsaUJBQUUsQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDakUsQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLElBQUksS0FBSyxDQUFDLG1EQUFtRCxDQUFDLENBQUM7UUFDdkUsQ0FBQztRQUNELEtBQUssTUFBTSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsYUFBYSxFQUFFLGFBQWEsQ0FBQyxFQUFFLENBQUM7WUFDM0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUM7Z0JBQ3BCLE1BQU0sSUFBSSxLQUFLLENBQUMsMkJBQTJCLEtBQUssbUJBQW1CLENBQUMsQ0FBQztRQUN6RSxDQUFDO1FBQ0QsVUFBVSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUM7WUFDaEQsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLHlCQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEQsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNQLFVBQVUsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDO1lBQ2hELENBQUMsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsSUFBSSx5QkFBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQzFFLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDUCxPQUFPLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRCxpRkFBaUY7SUFDakYsMEVBQTBFO0lBQzFFLGdGQUFnRjtJQUV4RSxZQUFZLENBQUMsTUFBYztRQUNqQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWM7WUFDdEIsTUFBTSxJQUFJLEtBQUssQ0FDYixXQUFXLE1BQU0sbURBQW1EO2dCQUNsRSx1RUFBdUUsQ0FDMUUsQ0FBQztJQUNOLENBQUM7SUFFRCxrRUFBa0U7SUFDbEUsSUFBVyxVQUFVO1FBQ25CLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQztJQUM3QixDQUFDO0lBRUQsNERBQTREO0lBQ3JELEtBQUssQ0FBQyxNQUFNLENBQ2pCLEtBQTZDLEVBQzdDLE1BQXVCO1FBRXZCLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDNUIsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRO1lBQzNCLE9BQU8sSUFBSSxDQUFDLGNBQWUsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3BELE9BQU8sSUFBSSxDQUFDLGNBQWUsQ0FBQyxNQUFNLENBQUMsS0FBWSxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVELDBFQUEwRTtJQUNuRSxLQUFLLENBQUMsYUFBYTtRQUN4QixJQUFJLENBQUMsWUFBWSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ25DLE9BQU8sSUFBSSxDQUFDLGNBQWUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUN6QyxDQUFDO0lBRUQsNkRBQTZEO0lBQ3RELFVBQVU7UUFDZixJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxjQUFlLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUVELDBFQUEwRTtJQUNuRSxnQkFBZ0I7UUFDckIsSUFBSSxDQUFDLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ3RDLE9BQU8sSUFBSSxDQUFDLGNBQWUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUM1QyxDQUFDO0lBRUQscUVBQXFFO0lBQzlELFVBQVU7UUFDZixJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxjQUFlLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUVELDhEQUE4RDtJQUN2RCxVQUFVLENBQUMsT0FBcUI7UUFDckMsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNoQyxJQUFJLENBQUMsY0FBZSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQsK0RBQStEO0lBQ3hELGFBQWEsQ0FBQyxPQUFxQjtRQUN4QyxJQUFJLENBQUMsWUFBWSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ25DLElBQUksQ0FBQyxjQUFlLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFRCxtRUFBbUU7SUFDNUQsY0FBYyxDQUNuQixRQUEwRTtRQUUxRSxJQUFJLENBQUMsWUFBWSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDcEMsT0FBTyxJQUFJLENBQUMsY0FBZSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRUQsaUZBQWlGO0lBRWpGLDRFQUE0RTtJQUM1RSxJQUFXLFVBQVU7UUFDbkIsT0FBTyxJQUFJLENBQUMsY0FBYyxFQUFFLEtBQUssQ0FBQztJQUNwQyxDQUFDO0lBRUQsSUFBVyxpQkFBaUIsQ0FBQyxJQUFlO1FBQzFDLElBQUksQ0FBQyxZQUFZLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUN2QyxJQUFJLENBQUMsY0FBZSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7SUFDM0MsQ0FBQztJQUNELElBQVcsaUJBQWlCO1FBQzFCLE9BQU8sSUFBSSxDQUFDLGNBQWMsRUFBRSxZQUFZLENBQUM7SUFDM0MsQ0FBQztJQUVELElBQVcsaUJBQWlCLENBQUMsSUFBZTtRQUMxQyxJQUFJLENBQUMsWUFBWSxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDdkMsSUFBSSxDQUFDLGNBQWUsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO0lBQzNDLENBQUM7SUFDRCxJQUFXLGlCQUFpQjtRQUMxQixPQUFPLElBQUksQ0FBQyxjQUFjLEVBQUUsWUFBWSxDQUFDO0lBQzNDLENBQUM7SUFFRCxpRkFBaUY7SUFFakY7Ozs7O09BS0c7SUFDSCxLQUFLLENBQUMsT0FBTyxDQUNYLGNBQThCLEVBQzlCLFFBQTJCO1FBRTNCLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3hCLDBFQUEwRTtZQUMxRSxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUEsNEJBQWUsRUFDbkMsSUFBSSxDQUFDLE1BQTRCLEVBQ2pDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUN6QixHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUNoQixJQUFJLENBQUMsR0FBRyxDQUNULENBQUM7WUFDRixPQUFPLElBQUEsOEJBQWlCLEVBQ3RCLElBQUksQ0FBQyxjQUFjLEVBQ25CLGNBQWMsRUFDZCxRQUFRLEVBQ1IsSUFBSSxDQUFDLGNBQWMsRUFDbkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQ2hCLElBQUksQ0FBQyxHQUFHLENBQ1QsQ0FBQztRQUNKLENBQUM7UUFDRCxPQUFPLElBQUEsZ0NBQWtCLEVBQ3ZCO1lBQ0UsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO1lBQ2YsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHO1lBQ2IsY0FBYyxFQUFFLElBQUksQ0FBQyxjQUFjO1lBQ25DLEtBQUssRUFBRSxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsR0FBRyxDQUFDO1lBQ2pFLFNBQVMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ2pDLFdBQVcsRUFBRSxDQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FDcEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQztTQUN6QyxFQUNELGNBQWMsRUFDZCxRQUFRLENBQ1QsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQXQ2QkQsMEJBczZCQyJ9