@truefoundry/tfy-auth-handler-lib 0.1.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.
@@ -0,0 +1,359 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TenantCache = void 0;
4
+ const logger_1 = require("./logger");
5
+ const types_1 = require("./types");
6
+ /**
7
+ * Holds all cached authorization data for a single tenant: grants, users,
8
+ * and teams. Exposes public query methods via ITenantCache and internal
9
+ * mutation methods used by the watcher layer.
10
+ */
11
+ class TenantCache {
12
+ constructor(logger) {
13
+ this.grantIndex = new Map();
14
+ this.cachedGrants = [];
15
+ this.userTeamIndex = new Map();
16
+ this.cachedUsers = [];
17
+ this.cachedTeams = [];
18
+ /** Raw KVStoreV2Data blobs — kept as-is because they are JWK key sets, not entity arrays. */
19
+ this.cachedExternalJwks = null;
20
+ this.cachedPrimaryJwks = null;
21
+ this.cachedMcpServers = [];
22
+ this.cachedRoles = [];
23
+ this.cachedAgents = [];
24
+ this.cachedExternalIdentities = [];
25
+ this.cachedModels = [];
26
+ this.cachedGuardrails = [];
27
+ this.cachedGatewayConfigs = [];
28
+ this.cachedServiceAccounts = [];
29
+ this.cachedVirtualAccounts = [];
30
+ this.cachedPats = [];
31
+ this.cachedExternalIdentityProviders = [];
32
+ this.logger = logger ?? (0, logger_1.createDefaultLogger)('TenantCache');
33
+ }
34
+ // ---------------------------------------------------------------------------
35
+ // Internal mutation API (called by AuthCache when the watcher delivers data)
36
+ // ---------------------------------------------------------------------------
37
+ updateEntity(entity, data) {
38
+ switch (entity) {
39
+ case types_1.AuthCacheEntity.AUTHORIZATION:
40
+ this.updateAuthorization(data);
41
+ break;
42
+ case types_1.AuthCacheEntity.USERS:
43
+ this.updateUsers(data);
44
+ break;
45
+ case types_1.AuthCacheEntity.TEAMS:
46
+ this.updateTeams(data);
47
+ break;
48
+ case types_1.AuthCacheEntity.MCP_SERVER:
49
+ this.updateMcpServers(data);
50
+ break;
51
+ case types_1.AuthCacheEntity.AGENT:
52
+ this.updateAgents(data);
53
+ break;
54
+ case types_1.AuthCacheEntity.EXTERNAL_IDENTITY:
55
+ this.updateExternalIdentities(data);
56
+ break;
57
+ case types_1.AuthCacheEntity.ROLE:
58
+ this.updateRoles(data);
59
+ break;
60
+ case types_1.AuthCacheEntity.EXTERNAL_JWKS:
61
+ this.updateExternalJwks(data);
62
+ break;
63
+ case types_1.AuthCacheEntity.PRIMARY_JWKS:
64
+ this.updatePrimaryJwks(data);
65
+ break;
66
+ case types_1.AuthCacheEntity.MODEL:
67
+ this.updateModels(data);
68
+ break;
69
+ case types_1.AuthCacheEntity.GUARDRAIL:
70
+ this.updateGuardrails(data);
71
+ break;
72
+ case types_1.AuthCacheEntity.GATEWAY_CONFIG:
73
+ this.updateGatewayConfigs(data);
74
+ break;
75
+ case types_1.AuthCacheEntity.SERVICE_ACCOUNT:
76
+ this.updateServiceAccounts(data);
77
+ break;
78
+ case types_1.AuthCacheEntity.VIRTUAL_ACCOUNT:
79
+ this.updateVirtualAccounts(data);
80
+ break;
81
+ case types_1.AuthCacheEntity.PAT:
82
+ this.updatePats(data);
83
+ break;
84
+ case types_1.AuthCacheEntity.EXTERNAL_IDENTITY_PROVIDER:
85
+ this.updateExternalIdentityProviders(data);
86
+ break;
87
+ default:
88
+ this.logger.warn(`Unrecognized entity type: "${entity}"`);
89
+ }
90
+ }
91
+ deleteEntity(entity) {
92
+ switch (entity) {
93
+ case types_1.AuthCacheEntity.AUTHORIZATION:
94
+ this.grantIndex = new Map();
95
+ this.cachedGrants = [];
96
+ break;
97
+ case types_1.AuthCacheEntity.USERS:
98
+ this.cachedUsers = [];
99
+ break;
100
+ case types_1.AuthCacheEntity.TEAMS:
101
+ this.cachedTeams = [];
102
+ this.userTeamIndex = new Map();
103
+ break;
104
+ case types_1.AuthCacheEntity.MCP_SERVER:
105
+ this.cachedMcpServers = [];
106
+ break;
107
+ case types_1.AuthCacheEntity.AGENT:
108
+ this.cachedAgents = [];
109
+ break;
110
+ case types_1.AuthCacheEntity.EXTERNAL_IDENTITY:
111
+ this.cachedExternalIdentities = [];
112
+ break;
113
+ case types_1.AuthCacheEntity.ROLE:
114
+ this.cachedRoles = [];
115
+ break;
116
+ case types_1.AuthCacheEntity.EXTERNAL_JWKS:
117
+ this.cachedExternalJwks = null;
118
+ break;
119
+ case types_1.AuthCacheEntity.PRIMARY_JWKS:
120
+ this.cachedPrimaryJwks = null;
121
+ break;
122
+ case types_1.AuthCacheEntity.MODEL:
123
+ this.cachedModels = [];
124
+ break;
125
+ case types_1.AuthCacheEntity.GUARDRAIL:
126
+ this.cachedGuardrails = [];
127
+ break;
128
+ case types_1.AuthCacheEntity.GATEWAY_CONFIG:
129
+ this.cachedGatewayConfigs = [];
130
+ break;
131
+ case types_1.AuthCacheEntity.SERVICE_ACCOUNT:
132
+ this.cachedServiceAccounts = [];
133
+ break;
134
+ case types_1.AuthCacheEntity.VIRTUAL_ACCOUNT:
135
+ this.cachedVirtualAccounts = [];
136
+ break;
137
+ case types_1.AuthCacheEntity.PAT:
138
+ this.cachedPats = [];
139
+ break;
140
+ case types_1.AuthCacheEntity.EXTERNAL_IDENTITY_PROVIDER:
141
+ this.cachedExternalIdentityProviders = [];
142
+ break;
143
+ default:
144
+ this.logger.warn(`Unrecognized entity type: "${entity}"`);
145
+ }
146
+ }
147
+ /**
148
+ * Builds the full index into a temporary map first, then swaps it in
149
+ * atomically so that concurrent reads never see a partially built or
150
+ * empty index.
151
+ */
152
+ updateAuthorization(grants) {
153
+ this.cachedGrants = grants;
154
+ const nextIndex = new Map();
155
+ for (const grant of grants) {
156
+ let subjectMap = nextIndex.get(grant.subjectIdentifier);
157
+ if (!subjectMap) {
158
+ subjectMap = new Map();
159
+ nextIndex.set(grant.subjectIdentifier, subjectMap);
160
+ }
161
+ let permSet = subjectMap.get(grant.resourceId);
162
+ if (!permSet) {
163
+ permSet = new Set();
164
+ subjectMap.set(grant.resourceId, permSet);
165
+ }
166
+ for (const perm of grant.permissions) {
167
+ permSet.add(perm);
168
+ }
169
+ }
170
+ this.grantIndex = nextIndex;
171
+ }
172
+ updateUsers(users) {
173
+ this.cachedUsers = users;
174
+ }
175
+ /**
176
+ * Stores the team list and builds a reverse index (userEmail → teamNames[])
177
+ * so that checkAccess can resolve team-inherited grants without the caller
178
+ * needing to supply team memberships.
179
+ */
180
+ updateTeams(teams) {
181
+ this.cachedTeams = teams;
182
+ const userTeamMap = new Map();
183
+ for (const team of teams) {
184
+ for (const memberEmail of team.members) {
185
+ const existing = userTeamMap.get(memberEmail);
186
+ if (existing) {
187
+ existing.push(team.name);
188
+ }
189
+ else {
190
+ userTeamMap.set(memberEmail, [team.name]);
191
+ }
192
+ }
193
+ }
194
+ this.userTeamIndex = userTeamMap;
195
+ }
196
+ updateExternalIdentities(kvStorePayload) {
197
+ this.cachedExternalIdentities = this.natsPayloadDataValues(kvStorePayload);
198
+ }
199
+ /** Kid → public key DTO map from `addExternalJWKSPublicKeysV2InNats` (`data` field). */
200
+ updateExternalJwks(data) {
201
+ this.cachedExternalJwks = data;
202
+ }
203
+ /** Kid → public key DTO map from `addPrimaryJWKSPublicKeysV2InNats` (`data` field). */
204
+ updatePrimaryJwks(data) {
205
+ this.cachedPrimaryJwks = data;
206
+ }
207
+ /** Virtual accounts from DB snapshot (`AuthInvalidationConsumerService`). */
208
+ updateVirtualAccounts(data) {
209
+ this.cachedVirtualAccounts = data;
210
+ }
211
+ /** PATs from DB snapshot (`AuthInvalidationConsumerService`). */
212
+ updatePats(data) {
213
+ this.cachedPats = data;
214
+ }
215
+ // ---------------------------------------------------------------------------
216
+ // Public API (ITenantCache)
217
+ // ---------------------------------------------------------------------------
218
+ checkAccessForResourceId(opts) {
219
+ const directPerms = this.getPermissionsByResourceId(opts.subjectIdentifier, opts.resourceId);
220
+ if (directPerms?.has(opts.requiredPermission)) {
221
+ return true;
222
+ }
223
+ const teamNames = this.getUserTeams(opts.subjectIdentifier);
224
+ for (const teamName of teamNames) {
225
+ const teamPerms = this.getPermissionsByResourceId(teamName, opts.resourceId);
226
+ if (teamPerms?.has(opts.requiredPermission)) {
227
+ return true;
228
+ }
229
+ }
230
+ return false;
231
+ }
232
+ getUserTeams(userEmail) {
233
+ return this.userTeamIndex.get(userEmail) ?? [];
234
+ }
235
+ searchUsers(substring, limit = 10) {
236
+ const lower = substring.toLowerCase();
237
+ const results = [];
238
+ for (const user of this.cachedUsers) {
239
+ if (results.length >= limit) {
240
+ break;
241
+ }
242
+ if (user.email.toLowerCase().includes(lower) || (user.displayName?.toLowerCase().includes(lower) ?? false)) {
243
+ results.push(user);
244
+ }
245
+ }
246
+ return results;
247
+ }
248
+ searchTeams(substring, limit = 10) {
249
+ const lower = substring.toLowerCase();
250
+ const results = [];
251
+ for (const team of this.cachedTeams) {
252
+ if (results.length >= limit) {
253
+ break;
254
+ }
255
+ if (team.name.toLowerCase().includes(lower)) {
256
+ results.push(team);
257
+ }
258
+ }
259
+ return results;
260
+ }
261
+ getGrants() {
262
+ return this.cachedGrants;
263
+ }
264
+ getUsers() {
265
+ return this.cachedUsers;
266
+ }
267
+ getTeams() {
268
+ return this.cachedTeams;
269
+ }
270
+ getMcpServers() {
271
+ return this.cachedMcpServers;
272
+ }
273
+ getRoles() {
274
+ return this.cachedRoles;
275
+ }
276
+ getExternalJwks() {
277
+ return this.cachedExternalJwks;
278
+ }
279
+ getPrimaryJwks() {
280
+ return this.cachedPrimaryJwks;
281
+ }
282
+ getAgents() {
283
+ return this.cachedAgents;
284
+ }
285
+ getExternalIdentities() {
286
+ return this.cachedExternalIdentities;
287
+ }
288
+ getModels() {
289
+ return this.cachedModels;
290
+ }
291
+ getGuardrails() {
292
+ return this.cachedGuardrails;
293
+ }
294
+ getGatewayConfigs() {
295
+ return this.cachedGatewayConfigs;
296
+ }
297
+ getServiceAccounts() {
298
+ return this.cachedServiceAccounts;
299
+ }
300
+ getVirtualAccounts() {
301
+ return this.cachedVirtualAccounts;
302
+ }
303
+ getPats() {
304
+ return this.cachedPats;
305
+ }
306
+ getExternalIdentityProviders() {
307
+ return this.cachedExternalIdentityProviders;
308
+ }
309
+ // ---------------------------------------------------------------------------
310
+ // Private helpers
311
+ // ---------------------------------------------------------------------------
312
+ natsPayloadDataValues(natsPayload) {
313
+ if (natsPayload === null || typeof natsPayload !== 'object') {
314
+ return [];
315
+ }
316
+ const inner = natsPayload.data;
317
+ if (!inner || typeof inner !== 'object') {
318
+ return [];
319
+ }
320
+ return Object.values(inner);
321
+ }
322
+ /** MCP servers and guardrails share the same `toNatsFormatIntegration` wire shape (llmgateway/utils). */
323
+ parseIntegrationRows(kvStorePayload) {
324
+ return this.natsPayloadDataValues(kvStorePayload);
325
+ }
326
+ updateMcpServers(kvStorePayload) {
327
+ this.cachedMcpServers = this.parseIntegrationRows(kvStorePayload);
328
+ }
329
+ updateGuardrails(kvStorePayload) {
330
+ this.cachedGuardrails = this.parseIntegrationRows(kvStorePayload);
331
+ }
332
+ updateRoles(kvStorePayload) {
333
+ this.cachedRoles = this.natsPayloadDataValues(kvStorePayload);
334
+ }
335
+ /** Value shape from `addAgentsV2InNats` (llmgateway/natsUtilsV2). */
336
+ updateAgents(kvStorePayload) {
337
+ this.cachedAgents = this.natsPayloadDataValues(kvStorePayload);
338
+ }
339
+ /** Provider account rows from `addModelsV2InNats` (`toNatsFormatProviderAccount` + integrations). */
340
+ updateModels(kvStorePayload) {
341
+ this.cachedModels = this.natsPayloadDataValues(kvStorePayload);
342
+ }
343
+ /** KV value is `config.manifest` (`addGatewayConfigsV2InNats`). */
344
+ updateGatewayConfigs(kvStorePayload) {
345
+ this.cachedGatewayConfigs = this.natsPayloadDataValues(kvStorePayload);
346
+ }
347
+ updateServiceAccounts(kvStorePayload) {
348
+ this.cachedServiceAccounts = this.natsPayloadDataValues(kvStorePayload);
349
+ }
350
+ updateExternalIdentityProviders(kvStorePayload) {
351
+ this.cachedExternalIdentityProviders =
352
+ this.natsPayloadDataValues(kvStorePayload);
353
+ }
354
+ getPermissionsByResourceId(subjectIdentifier, resourceId) {
355
+ return this.grantIndex.get(subjectIdentifier)?.get(resourceId);
356
+ }
357
+ }
358
+ exports.TenantCache = TenantCache;
359
+ //# sourceMappingURL=TenantCache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TenantCache.js","sourceRoot":"","sources":["../src/TenantCache.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function deserializeBlob(data: Uint8Array): Promise<string>;
2
+ //# sourceMappingURL=decompress.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decompress.d.ts","sourceRoot":"","sources":["../src/decompress.ts"],"names":[],"mappings":"AAYA,wBAAsB,eAAe,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAOvE"}
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.deserializeBlob = deserializeBlob;
4
+ const node_util_1 = require("node:util");
5
+ const node_zlib_1 = require("node:zlib");
6
+ const gunzipAsync = (0, node_util_1.promisify)(node_zlib_1.gunzip);
7
+ const GZIP_MAGIC_BYTE_0 = 0x1f;
8
+ const GZIP_MAGIC_BYTE_1 = 0x8b;
9
+ function isGzipped(data) {
10
+ return data.length >= 2 && data[0] === GZIP_MAGIC_BYTE_0 && data[1] === GZIP_MAGIC_BYTE_1;
11
+ }
12
+ async function deserializeBlob(data) {
13
+ if (isGzipped(data)) {
14
+ const buffer = Buffer.from(data.buffer, data.byteOffset, data.byteLength);
15
+ const decompressed = await gunzipAsync(buffer);
16
+ return decompressed.toString('utf-8');
17
+ }
18
+ return new TextDecoder().decode(data);
19
+ }
20
+ //# sourceMappingURL=decompress.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decompress.js","sourceRoot":"","sources":["../src/decompress.ts"],"names":[],"mappings":";;AAYA,0CAOC;AAnBD,yCAAsC;AACtC,yCAAmC;AAEnC,MAAM,WAAW,GAAG,IAAA,qBAAS,EAAC,kBAAM,CAAC,CAAC;AAEtC,MAAM,iBAAiB,GAAG,IAAI,CAAC;AAC/B,MAAM,iBAAiB,GAAG,IAAI,CAAC;AAE/B,SAAS,SAAS,CAAC,IAAgB;IACjC,OAAO,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,iBAAiB,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,iBAAiB,CAAC;AAC5F,CAAC;AAEM,KAAK,UAAU,eAAe,CAAC,IAAgB;IACpD,IAAI,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;QACpB,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QAC1E,MAAM,YAAY,GAAG,MAAM,WAAW,CAAC,MAAM,CAAC,CAAC;QAC/C,OAAO,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACxC,CAAC;IACD,OAAO,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACxC,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { AUTH_DATA_BUCKET_NAME, createAuthCache } from './AuthCache';
2
+ export { AuthCacheEntity } from './types';
3
+ export type { AuthCacheConfig, AuthCacheLogger, AuthGrant, CachedAgent, CachedExternalIdentity, CachedExternalIdentityProvider, CachedGatewayConfig, CachedGuardrail, CachedIntegrationProviderAccount, CachedMcpServer, CachedModel, CachedModelIntegration, CachedPAT, CachedProviderAccountRow, CachedProviderIntegrationRow, CachedRole, CachedServiceAccount, CachedTeam, CachedUser, CachedVirtualAccount, CheckAccessByResourceIdOptions, IAuthCache, ITenantCache, TenantCheckAccessByResourceIdOptions, } from './types';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC1C,YAAY,EACV,eAAe,EACf,eAAe,EACf,SAAS,EACT,WAAW,EACX,sBAAsB,EACtB,8BAA8B,EAC9B,mBAAmB,EACnB,eAAe,EACf,gCAAgC,EAChC,eAAe,EACf,WAAW,EACX,sBAAsB,EACtB,SAAS,EACT,wBAAwB,EACxB,4BAA4B,EAC5B,UAAU,EACV,oBAAoB,EACpB,UAAU,EACV,UAAU,EACV,oBAAoB,EACpB,8BAA8B,EAC9B,UAAU,EACV,YAAY,EACZ,oCAAoC,GACrC,MAAM,SAAS,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AuthCacheEntity = exports.createAuthCache = exports.AUTH_DATA_BUCKET_NAME = void 0;
4
+ var AuthCache_1 = require("./AuthCache");
5
+ Object.defineProperty(exports, "AUTH_DATA_BUCKET_NAME", { enumerable: true, get: function () { return AuthCache_1.AUTH_DATA_BUCKET_NAME; } });
6
+ Object.defineProperty(exports, "createAuthCache", { enumerable: true, get: function () { return AuthCache_1.createAuthCache; } });
7
+ var types_1 = require("./types");
8
+ Object.defineProperty(exports, "AuthCacheEntity", { enumerable: true, get: function () { return types_1.AuthCacheEntity; } });
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,yCAAqE;AAA5D,kHAAA,qBAAqB,OAAA;AAAE,4GAAA,eAAe,OAAA;AAC/C,iCAA0C;AAAjC,wGAAA,eAAe,OAAA"}
@@ -0,0 +1,3 @@
1
+ import type { AuthCacheLogger } from './types';
2
+ export declare function createDefaultLogger(context: string): AuthCacheLogger;
3
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE/C,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,eAAe,CAOpE"}
package/dist/logger.js ADDED
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createDefaultLogger = createDefaultLogger;
4
+ function createDefaultLogger(context) {
5
+ return {
6
+ log: (message, ...args) => console.log(`[${context}] ${message}`, ...args),
7
+ error: (message, ...args) => console.error(`[${context}] ${message}`, ...args),
8
+ warn: (message, ...args) => console.warn(`[${context}] ${message}`, ...args),
9
+ debug: (message, ...args) => console.debug(`[${context}] ${message}`, ...args),
10
+ };
11
+ }
12
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":";;AAEA,kDAOC;AAPD,SAAgB,mBAAmB,CAAC,OAAe;IACjD,OAAO;QACL,GAAG,EAAE,CAAC,OAAe,EAAE,GAAG,IAAe,EAAQ,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,OAAO,KAAK,OAAO,EAAE,EAAE,GAAG,IAAI,CAAC;QACnG,KAAK,EAAE,CAAC,OAAe,EAAE,GAAG,IAAe,EAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,OAAO,KAAK,OAAO,EAAE,EAAE,GAAG,IAAI,CAAC;QACvG,IAAI,EAAE,CAAC,OAAe,EAAE,GAAG,IAAe,EAAQ,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,OAAO,KAAK,OAAO,EAAE,EAAE,GAAG,IAAI,CAAC;QACrG,KAAK,EAAE,CAAC,OAAe,EAAE,GAAG,IAAe,EAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,OAAO,KAAK,OAAO,EAAE,EAAE,GAAG,IAAI,CAAC;KACxG,CAAC;AACJ,CAAC"}