agenticpool 1.0.19 → 2.0.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 (132) hide show
  1. package/README.md +68 -118
  2. package/bin/agenticpool.js +6 -0
  3. package/dist/adapters/autogen.d.ts +33 -0
  4. package/dist/adapters/autogen.d.ts.map +1 -0
  5. package/dist/adapters/autogen.js +49 -0
  6. package/dist/adapters/autogen.js.map +1 -0
  7. package/dist/adapters/crewai.d.ts +30 -0
  8. package/dist/adapters/crewai.d.ts.map +1 -0
  9. package/dist/adapters/crewai.js +48 -0
  10. package/dist/adapters/crewai.js.map +1 -0
  11. package/dist/adapters/langchain.d.ts +30 -0
  12. package/dist/adapters/langchain.d.ts.map +1 -0
  13. package/dist/adapters/langchain.js +53 -0
  14. package/dist/adapters/langchain.js.map +1 -0
  15. package/dist/adapters/llamaindex.d.ts +29 -0
  16. package/dist/adapters/llamaindex.d.ts.map +1 -0
  17. package/dist/adapters/llamaindex.js +47 -0
  18. package/dist/adapters/llamaindex.js.map +1 -0
  19. package/dist/adapters/openai.d.ts +21 -0
  20. package/dist/adapters/openai.d.ts.map +1 -0
  21. package/dist/adapters/openai.js +51 -0
  22. package/dist/adapters/openai.js.map +1 -0
  23. package/dist/cli.d.ts +3 -0
  24. package/dist/cli.d.ts.map +1 -0
  25. package/dist/cli.js +187 -0
  26. package/dist/cli.js.map +1 -0
  27. package/dist/client.d.ts +115 -0
  28. package/dist/client.d.ts.map +1 -0
  29. package/dist/client.js +251 -0
  30. package/dist/client.js.map +1 -0
  31. package/dist/commands/balance.d.ts +4 -0
  32. package/dist/commands/balance.d.ts.map +1 -0
  33. package/dist/commands/balance.js +34 -0
  34. package/dist/commands/balance.js.map +1 -0
  35. package/dist/commands/contract.d.ts +20 -0
  36. package/dist/commands/contract.d.ts.map +1 -0
  37. package/dist/commands/contract.js +188 -0
  38. package/dist/commands/contract.js.map +1 -0
  39. package/dist/commands/favor.d.ts +21 -0
  40. package/dist/commands/favor.d.ts.map +1 -0
  41. package/dist/commands/favor.js +144 -0
  42. package/dist/commands/favor.js.map +1 -0
  43. package/dist/commands/init.d.ts +5 -0
  44. package/dist/commands/init.d.ts.map +1 -0
  45. package/dist/commands/init.js +77 -0
  46. package/dist/commands/init.js.map +1 -0
  47. package/dist/commands/reputation.d.ts +2 -0
  48. package/dist/commands/reputation.d.ts.map +1 -0
  49. package/dist/commands/reputation.js +38 -0
  50. package/dist/commands/reputation.js.map +1 -0
  51. package/dist/commands/serve.d.ts +7 -0
  52. package/dist/commands/serve.d.ts.map +1 -0
  53. package/dist/commands/serve.js +110 -0
  54. package/dist/commands/serve.js.map +1 -0
  55. package/dist/commands/services.d.ts +16 -0
  56. package/dist/commands/services.d.ts.map +1 -0
  57. package/dist/commands/services.js +93 -0
  58. package/dist/commands/services.js.map +1 -0
  59. package/dist/commands/trust.d.ts +2 -0
  60. package/dist/commands/trust.d.ts.map +1 -0
  61. package/dist/commands/trust.js +44 -0
  62. package/dist/commands/trust.js.map +1 -0
  63. package/dist/commands/whoami.d.ts +2 -0
  64. package/dist/commands/whoami.d.ts.map +1 -0
  65. package/dist/commands/whoami.js +32 -0
  66. package/dist/commands/whoami.js.map +1 -0
  67. package/dist/config.d.ts +30 -0
  68. package/dist/config.d.ts.map +1 -0
  69. package/dist/config.js +72 -0
  70. package/dist/config.js.map +1 -0
  71. package/dist/economy/duckies.d.ts +75 -0
  72. package/dist/economy/duckies.d.ts.map +1 -0
  73. package/dist/economy/duckies.js +386 -0
  74. package/dist/economy/duckies.js.map +1 -0
  75. package/dist/index.d.ts +12 -2
  76. package/dist/index.d.ts.map +1 -0
  77. package/dist/index.js +12 -29
  78. package/dist/index.js.map +1 -0
  79. package/dist/types.d.ts +90 -0
  80. package/dist/types.d.ts.map +1 -0
  81. package/dist/types.js +5 -0
  82. package/dist/types.js.map +1 -0
  83. package/package.json +28 -38
  84. package/LICENSE +0 -1
  85. package/dist/api/ApiClient.d.ts +0 -37
  86. package/dist/api/ApiClient.js +0 -160
  87. package/dist/api/index.d.ts +0 -1
  88. package/dist/api/index.js +0 -6
  89. package/dist/auth/AuthHelper.d.ts +0 -17
  90. package/dist/auth/AuthHelper.js +0 -197
  91. package/dist/commands/auth.d.ts +0 -2
  92. package/dist/commands/auth.js +0 -206
  93. package/dist/commands/config.d.ts +0 -2
  94. package/dist/commands/config.js +0 -51
  95. package/dist/commands/connections.d.ts +0 -2
  96. package/dist/commands/connections.js +0 -244
  97. package/dist/commands/contacts.d.ts +0 -2
  98. package/dist/commands/contacts.js +0 -205
  99. package/dist/commands/conversations.d.ts +0 -2
  100. package/dist/commands/conversations.js +0 -251
  101. package/dist/commands/errors.d.ts +0 -2
  102. package/dist/commands/errors.js +0 -73
  103. package/dist/commands/humans.d.ts +0 -2
  104. package/dist/commands/humans.js +0 -161
  105. package/dist/commands/identities.d.ts +0 -2
  106. package/dist/commands/identities.js +0 -141
  107. package/dist/commands/index.d.ts +0 -11
  108. package/dist/commands/index.js +0 -26
  109. package/dist/commands/messages.d.ts +0 -2
  110. package/dist/commands/messages.js +0 -216
  111. package/dist/commands/networks.d.ts +0 -2
  112. package/dist/commands/networks.js +0 -430
  113. package/dist/commands/profile.d.ts +0 -2
  114. package/dist/commands/profile.js +0 -257
  115. package/dist/config/ConfigManager.d.ts +0 -47
  116. package/dist/config/ConfigManager.js +0 -234
  117. package/dist/config/index.d.ts +0 -1
  118. package/dist/config/index.js +0 -7
  119. package/dist/datamodel/index.d.ts +0 -3
  120. package/dist/datamodel/index.js +0 -20
  121. package/dist/datamodel/models/humans.d.ts +0 -81
  122. package/dist/datamodel/models/humans.js +0 -3
  123. package/dist/datamodel/models/index.d.ts +0 -110
  124. package/dist/datamodel/models/index.js +0 -3
  125. package/dist/datamodel/toon/index.d.ts +0 -5
  126. package/dist/datamodel/toon/index.js +0 -225
  127. package/dist/limits/LimitsManager.d.ts +0 -23
  128. package/dist/limits/LimitsManager.js +0 -99
  129. package/dist/utils/colors.d.ts +0 -16
  130. package/dist/utils/colors.js +0 -23
  131. package/dist/utils/logger.d.ts +0 -11
  132. package/dist/utils/logger.js +0 -34
@@ -1,7 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.configManager = exports.ConfigManager = void 0;
4
- var ConfigManager_1 = require("./ConfigManager");
5
- Object.defineProperty(exports, "ConfigManager", { enumerable: true, get: function () { return ConfigManager_1.ConfigManager; } });
6
- Object.defineProperty(exports, "configManager", { enumerable: true, get: function () { return ConfigManager_1.configManager; } });
7
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29uZmlnL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLGlEQUFpRztBQUF4Riw4R0FBQSxhQUFhLE9BQUE7QUFBRSw4R0FBQSxhQUFhLE9BQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBDb25maWdNYW5hZ2VyLCBjb25maWdNYW5hZ2VyLCBHbG9iYWxDb25maWcsIE5ldHdvcmtDcmVkZW50aWFscyB9IGZyb20gJy4vQ29uZmlnTWFuYWdlcic7XG4iXX0=
@@ -1,3 +0,0 @@
1
- export * from './models';
2
- export * from './models/humans';
3
- export * from './toon';
@@ -1,20 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
- };
16
- Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./models"), exports);
18
- __exportStar(require("./models/humans"), exports);
19
- __exportStar(require("./toon"), exports);
20
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZGF0YW1vZGVsL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwyQ0FBeUI7QUFDekIsa0RBQWdDO0FBQ2hDLHlDQUF1QiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vbW9kZWxzJztcbmV4cG9ydCAqIGZyb20gJy4vbW9kZWxzL2h1bWFucyc7XG5leHBvcnQgKiBmcm9tICcuL3Rvb24nO1xuIl19
@@ -1,81 +0,0 @@
1
- import type { Timestamp } from './index';
2
- export type ConnectionStatus = 'proposed' | 'agent_accepted' | 'human_pending' | 'connected' | 'rejected' | 'revoked';
3
- export interface HumanProfile {
4
- uid?: string;
5
- displayName: string;
6
- phone: string;
7
- email: string;
8
- telegram: string;
9
- photoUrl: string;
10
- notes: string;
11
- createdAt?: Timestamp;
12
- updatedAt?: Timestamp;
13
- }
14
- export interface NetworkIdentity {
15
- id?: string;
16
- humanUid: string;
17
- networkId: string;
18
- publicToken: string;
19
- agentDescription: string;
20
- addedAt?: Timestamp;
21
- }
22
- export interface ConnectionProposal {
23
- id?: string;
24
- fromHumanUid: string;
25
- toHumanUid: string;
26
- fromAgentToken: string;
27
- toAgentToken: string;
28
- networkId: string;
29
- fromExplanation: string;
30
- toExplanation: string;
31
- status: ConnectionStatus;
32
- proposedAt?: Timestamp;
33
- agentAcceptedAt?: Timestamp;
34
- humanAcceptedAt?: Timestamp;
35
- revokedAt?: Timestamp;
36
- revokedBy?: string;
37
- }
38
- export interface Contact {
39
- id?: string;
40
- ownerUid: string;
41
- contactUid: string;
42
- contactDisplayName: string;
43
- contactPhone: string;
44
- contactEmail: string;
45
- contactTelegram: string;
46
- contactPhotoUrl: string;
47
- notes: string;
48
- linkedIdentities: ContactIdentity[];
49
- connectionId: string;
50
- status: 'active' | 'blocked';
51
- createdAt?: Timestamp;
52
- updatedAt?: Timestamp;
53
- }
54
- export interface ContactIdentity {
55
- networkId: string;
56
- publicToken: string;
57
- agentDescription: string;
58
- }
59
- export interface HumanAuthCredentials {
60
- humanUid: string;
61
- email: string;
62
- jwt?: string;
63
- expiresAt?: number;
64
- }
65
- export interface ConnectionProposalInput {
66
- toAgentToken: string;
67
- networkId: string;
68
- fromExplanation: string;
69
- }
70
- export interface ConnectionAcceptInput {
71
- toExplanation: string;
72
- }
73
- export interface IdentityRegisterInput {
74
- networkId: string;
75
- publicToken: string;
76
- agentDescription: string;
77
- }
78
- export interface ContactUpdateInput {
79
- notes?: string;
80
- linkIdentity?: ContactIdentity;
81
- }
@@ -1,3 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHVtYW5zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2RhdGFtb2RlbC9tb2RlbHMvaHVtYW5zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFRpbWVzdGFtcCB9IGZyb20gJy4vaW5kZXgnO1xuXG5leHBvcnQgdHlwZSBDb25uZWN0aW9uU3RhdHVzID1cbiAgfCAncHJvcG9zZWQnXG4gIHwgJ2FnZW50X2FjY2VwdGVkJ1xuICB8ICdodW1hbl9wZW5kaW5nJ1xuICB8ICdjb25uZWN0ZWQnXG4gIHwgJ3JlamVjdGVkJ1xuICB8ICdyZXZva2VkJztcblxuZXhwb3J0IGludGVyZmFjZSBIdW1hblByb2ZpbGUge1xuICB1aWQ/OiBzdHJpbmc7XG4gIGRpc3BsYXlOYW1lOiBzdHJpbmc7XG4gIHBob25lOiBzdHJpbmc7XG4gIGVtYWlsOiBzdHJpbmc7XG4gIHRlbGVncmFtOiBzdHJpbmc7XG4gIHBob3RvVXJsOiBzdHJpbmc7XG4gIG5vdGVzOiBzdHJpbmc7XG4gIGNyZWF0ZWRBdD86IFRpbWVzdGFtcDtcbiAgdXBkYXRlZEF0PzogVGltZXN0YW1wO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5ldHdvcmtJZGVudGl0eSB7XG4gIGlkPzogc3RyaW5nO1xuICBodW1hblVpZDogc3RyaW5nO1xuICBuZXR3b3JrSWQ6IHN0cmluZztcbiAgcHVibGljVG9rZW46IHN0cmluZztcbiAgYWdlbnREZXNjcmlwdGlvbjogc3RyaW5nO1xuICBhZGRlZEF0PzogVGltZXN0YW1wO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbm5lY3Rpb25Qcm9wb3NhbCB7XG4gIGlkPzogc3RyaW5nO1xuICBmcm9tSHVtYW5VaWQ6IHN0cmluZztcbiAgdG9IdW1hblVpZDogc3RyaW5nO1xuICBmcm9tQWdlbnRUb2tlbjogc3RyaW5nO1xuICB0b0FnZW50VG9rZW46IHN0cmluZztcbiAgbmV0d29ya0lkOiBzdHJpbmc7XG4gIGZyb21FeHBsYW5hdGlvbjogc3RyaW5nO1xuICB0b0V4cGxhbmF0aW9uOiBzdHJpbmc7XG4gIHN0YXR1czogQ29ubmVjdGlvblN0YXR1cztcbiAgcHJvcG9zZWRBdD86IFRpbWVzdGFtcDtcbiAgYWdlbnRBY2NlcHRlZEF0PzogVGltZXN0YW1wO1xuICBodW1hbkFjY2VwdGVkQXQ/OiBUaW1lc3RhbXA7XG4gIHJldm9rZWRBdD86IFRpbWVzdGFtcDtcbiAgcmV2b2tlZEJ5Pzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbnRhY3Qge1xuICBpZD86IHN0cmluZztcbiAgb3duZXJVaWQ6IHN0cmluZztcbiAgY29udGFjdFVpZDogc3RyaW5nO1xuICBjb250YWN0RGlzcGxheU5hbWU6IHN0cmluZztcbiAgY29udGFjdFBob25lOiBzdHJpbmc7XG4gIGNvbnRhY3RFbWFpbDogc3RyaW5nO1xuICBjb250YWN0VGVsZWdyYW06IHN0cmluZztcbiAgY29udGFjdFBob3RvVXJsOiBzdHJpbmc7XG4gIG5vdGVzOiBzdHJpbmc7XG4gIGxpbmtlZElkZW50aXRpZXM6IENvbnRhY3RJZGVudGl0eVtdO1xuICBjb25uZWN0aW9uSWQ6IHN0cmluZztcbiAgc3RhdHVzOiAnYWN0aXZlJyB8ICdibG9ja2VkJztcbiAgY3JlYXRlZEF0PzogVGltZXN0YW1wO1xuICB1cGRhdGVkQXQ/OiBUaW1lc3RhbXA7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29udGFjdElkZW50aXR5IHtcbiAgbmV0d29ya0lkOiBzdHJpbmc7XG4gIHB1YmxpY1Rva2VuOiBzdHJpbmc7XG4gIGFnZW50RGVzY3JpcHRpb246IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBIdW1hbkF1dGhDcmVkZW50aWFscyB7XG4gIGh1bWFuVWlkOiBzdHJpbmc7XG4gIGVtYWlsOiBzdHJpbmc7XG4gIGp3dD86IHN0cmluZztcbiAgZXhwaXJlc0F0PzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbm5lY3Rpb25Qcm9wb3NhbElucHV0IHtcbiAgdG9BZ2VudFRva2VuOiBzdHJpbmc7XG4gIG5ldHdvcmtJZDogc3RyaW5nO1xuICBmcm9tRXhwbGFuYXRpb246IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb25uZWN0aW9uQWNjZXB0SW5wdXQge1xuICB0b0V4cGxhbmF0aW9uOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSWRlbnRpdHlSZWdpc3RlcklucHV0IHtcbiAgbmV0d29ya0lkOiBzdHJpbmc7XG4gIHB1YmxpY1Rva2VuOiBzdHJpbmc7XG4gIGFnZW50RGVzY3JpcHRpb246IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb250YWN0VXBkYXRlSW5wdXQge1xuICBub3Rlcz86IHN0cmluZztcbiAgbGlua0lkZW50aXR5PzogQ29udGFjdElkZW50aXR5O1xufVxuIl19
@@ -1,110 +0,0 @@
1
- export type NetworkStatus = 'live' | 'testing';
2
- export type MemberRole = 'member' | 'admin';
3
- export type ConversationType = 'topic' | 'direct' | 'group';
4
- export type InvitationStatus = 'pending' | 'accepted' | 'rejected';
5
- export interface FirestoreTimestamp {
6
- _seconds: number;
7
- _nanoseconds: number;
8
- toDate(): Date;
9
- }
10
- export type Timestamp = Date | FirestoreTimestamp;
11
- export interface Network {
12
- id?: string;
13
- name: string;
14
- description: string;
15
- longDescription: string;
16
- logoUrl: string;
17
- status: NetworkStatus;
18
- isPublic: boolean;
19
- users: number;
20
- createdBy: string;
21
- createdAt?: Timestamp;
22
- }
23
- export interface Member {
24
- id?: string;
25
- networkId: string;
26
- publicToken: string;
27
- privateKeyHash: string;
28
- shortDescription: string;
29
- longDescription: string;
30
- joinedAt?: Timestamp;
31
- lastAccessReason?: string;
32
- role: MemberRole;
33
- }
34
- export interface Invitation {
35
- id?: string;
36
- networkId: string;
37
- fromUserId: string;
38
- toPublicToken?: string;
39
- status: InvitationStatus;
40
- createdAt?: Timestamp;
41
- }
42
- export interface ProfileQuestion {
43
- id?: string;
44
- networkId: string;
45
- question: string;
46
- order: number;
47
- required: boolean;
48
- }
49
- export interface Conversation {
50
- id?: string;
51
- networkId: string;
52
- title: string;
53
- type: ConversationType;
54
- maxMembers: number;
55
- createdBy: string;
56
- createdAt?: Timestamp;
57
- }
58
- export interface Participant {
59
- id?: string;
60
- conversationId: string;
61
- userId: string;
62
- joinedAt?: Timestamp;
63
- }
64
- export interface Message {
65
- id?: string;
66
- conversationId: string;
67
- senderId: string;
68
- receiverId: string | null;
69
- content: string;
70
- replyTo?: string;
71
- createdAt?: Timestamp;
72
- }
73
- export interface NetworkShort {
74
- id: string;
75
- name: string;
76
- description: string;
77
- logoUrl: string;
78
- status: NetworkStatus;
79
- users: number;
80
- }
81
- export interface MemberShort {
82
- publicToken: string;
83
- shortDescription: string;
84
- role: MemberRole;
85
- }
86
- export interface ConversationShort {
87
- id: string;
88
- title: string;
89
- type: ConversationType;
90
- maxMembers: number;
91
- }
92
- export interface AuthCredentials {
93
- publicToken: string;
94
- privateKey: string;
95
- }
96
- export interface AuthTokens {
97
- jwt: string;
98
- expiresAt: number;
99
- publicToken: string;
100
- }
101
- export interface ApiError {
102
- code: string;
103
- message: string;
104
- details?: Record<string, unknown>;
105
- }
106
- export interface ApiResponse<T> {
107
- success: boolean;
108
- data?: T;
109
- error?: ApiError;
110
- }
@@ -1,3 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZGF0YW1vZGVsL21vZGVscy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHR5cGUgTmV0d29ya1N0YXR1cyA9ICdsaXZlJyB8ICd0ZXN0aW5nJztcbmV4cG9ydCB0eXBlIE1lbWJlclJvbGUgPSAnbWVtYmVyJyB8ICdhZG1pbic7XG5leHBvcnQgdHlwZSBDb252ZXJzYXRpb25UeXBlID0gJ3RvcGljJyB8ICdkaXJlY3QnIHwgJ2dyb3VwJztcbmV4cG9ydCB0eXBlIEludml0YXRpb25TdGF0dXMgPSAncGVuZGluZycgfCAnYWNjZXB0ZWQnIHwgJ3JlamVjdGVkJztcblxuZXhwb3J0IGludGVyZmFjZSBGaXJlc3RvcmVUaW1lc3RhbXAge1xuICBfc2Vjb25kczogbnVtYmVyO1xuICBfbmFub3NlY29uZHM6IG51bWJlcjtcbiAgdG9EYXRlKCk6IERhdGU7XG59XG5cbmV4cG9ydCB0eXBlIFRpbWVzdGFtcCA9IERhdGUgfCBGaXJlc3RvcmVUaW1lc3RhbXA7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmV0d29yayB7XG4gIGlkPzogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIGxvbmdEZXNjcmlwdGlvbjogc3RyaW5nO1xuICBsb2dvVXJsOiBzdHJpbmc7XG4gIHN0YXR1czogTmV0d29ya1N0YXR1cztcbiAgaXNQdWJsaWM6IGJvb2xlYW47XG4gIHVzZXJzOiBudW1iZXI7XG4gIGNyZWF0ZWRCeTogc3RyaW5nO1xuICBjcmVhdGVkQXQ/OiBUaW1lc3RhbXA7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWVtYmVyIHtcbiAgaWQ/OiBzdHJpbmc7XG4gIG5ldHdvcmtJZDogc3RyaW5nO1xuICBwdWJsaWNUb2tlbjogc3RyaW5nO1xuICBwcml2YXRlS2V5SGFzaDogc3RyaW5nO1xuICBzaG9ydERlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIGxvbmdEZXNjcmlwdGlvbjogc3RyaW5nO1xuICBqb2luZWRBdD86IFRpbWVzdGFtcDtcbiAgbGFzdEFjY2Vzc1JlYXNvbj86IHN0cmluZztcbiAgcm9sZTogTWVtYmVyUm9sZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJbnZpdGF0aW9uIHtcbiAgaWQ/OiBzdHJpbmc7XG4gIG5ldHdvcmtJZDogc3RyaW5nO1xuICBmcm9tVXNlcklkOiBzdHJpbmc7XG4gIHRvUHVibGljVG9rZW4/OiBzdHJpbmc7XG4gIHN0YXR1czogSW52aXRhdGlvblN0YXR1cztcbiAgY3JlYXRlZEF0PzogVGltZXN0YW1wO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFByb2ZpbGVRdWVzdGlvbiB7XG4gIGlkPzogc3RyaW5nO1xuICBuZXR3b3JrSWQ6IHN0cmluZztcbiAgcXVlc3Rpb246IHN0cmluZztcbiAgb3JkZXI6IG51bWJlcjtcbiAgcmVxdWlyZWQ6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29udmVyc2F0aW9uIHtcbiAgaWQ/OiBzdHJpbmc7XG4gIG5ldHdvcmtJZDogc3RyaW5nO1xuICB0aXRsZTogc3RyaW5nO1xuICB0eXBlOiBDb252ZXJzYXRpb25UeXBlO1xuICBtYXhNZW1iZXJzOiBudW1iZXI7XG4gIGNyZWF0ZWRCeTogc3RyaW5nO1xuICBjcmVhdGVkQXQ/OiBUaW1lc3RhbXA7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFydGljaXBhbnQge1xuICBpZD86IHN0cmluZztcbiAgY29udmVyc2F0aW9uSWQ6IHN0cmluZztcbiAgdXNlcklkOiBzdHJpbmc7XG4gIGpvaW5lZEF0PzogVGltZXN0YW1wO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1lc3NhZ2Uge1xuICBpZD86IHN0cmluZztcbiAgY29udmVyc2F0aW9uSWQ6IHN0cmluZztcbiAgc2VuZGVySWQ6IHN0cmluZztcbiAgcmVjZWl2ZXJJZDogc3RyaW5nIHwgbnVsbDtcbiAgY29udGVudDogc3RyaW5nO1xuICByZXBseVRvPzogc3RyaW5nO1xuICBjcmVhdGVkQXQ/OiBUaW1lc3RhbXA7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmV0d29ya1Nob3J0IHtcbiAgaWQ6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICBsb2dvVXJsOiBzdHJpbmc7XG4gIHN0YXR1czogTmV0d29ya1N0YXR1cztcbiAgdXNlcnM6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNZW1iZXJTaG9ydCB7XG4gIHB1YmxpY1Rva2VuOiBzdHJpbmc7XG4gIHNob3J0RGVzY3JpcHRpb246IHN0cmluZztcbiAgcm9sZTogTWVtYmVyUm9sZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb252ZXJzYXRpb25TaG9ydCB7XG4gIGlkOiBzdHJpbmc7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIHR5cGU6IENvbnZlcnNhdGlvblR5cGU7XG4gIG1heE1lbWJlcnM6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBdXRoQ3JlZGVudGlhbHMge1xuICBwdWJsaWNUb2tlbjogc3RyaW5nO1xuICBwcml2YXRlS2V5OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXV0aFRva2VucyB7XG4gIGp3dDogc3RyaW5nO1xuICBleHBpcmVzQXQ6IG51bWJlcjtcbiAgcHVibGljVG9rZW46IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBcGlFcnJvciB7XG4gIGNvZGU6IHN0cmluZztcbiAgbWVzc2FnZTogc3RyaW5nO1xuICBkZXRhaWxzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXBpUmVzcG9uc2U8VD4ge1xuICBzdWNjZXNzOiBib29sZWFuO1xuICBkYXRhPzogVDtcbiAgZXJyb3I/OiBBcGlFcnJvcjtcbn1cbiJdfQ==
@@ -1,5 +0,0 @@
1
- export declare function encode(data: unknown): string;
2
- export declare function decode<T = unknown>(str: string): T;
3
- export declare function isToonFormat(content: string): boolean;
4
- export declare function safeEncode(data: unknown): string | null;
5
- export declare function safeDecode<T = unknown>(str: string): T | null;
@@ -1,225 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.encode = encode;
4
- exports.decode = decode;
5
- exports.isToonFormat = isToonFormat;
6
- exports.safeEncode = safeEncode;
7
- exports.safeDecode = safeDecode;
8
- function encode(data) {
9
- if (data === null || data === undefined)
10
- return "null";
11
- if (typeof data === "boolean")
12
- return data ? "true" : "false";
13
- if (typeof data === "number")
14
- return String(data);
15
- if (typeof data === "string") {
16
- if (/^[a-zA-Z0-9_-]+$/.test(data) && data.length < 500)
17
- return data;
18
- return `"${data}"`;
19
- }
20
- if (Array.isArray(data)) {
21
- if (data.length === 0)
22
- return "[]";
23
- const firstItem = data[0];
24
- if (typeof firstItem === "object" && firstItem !== null && !Array.isArray(firstItem)) {
25
- const keys = Object.keys(firstItem);
26
- const header = `[${data.length}]{${keys.join(",")}}:`;
27
- const lines = data.map((item) => {
28
- const values = keys.map((key) => encode(item[key]));
29
- return values.join(",");
30
- });
31
- return header + "\n" + lines.map((line) => ` ${line}`).join("\n");
32
- }
33
- return `[${data.length}]:` + data.map((item) => encode(item)).join(",");
34
- }
35
- if (typeof data === "object") {
36
- const obj = data;
37
- const keys = Object.keys(obj).filter(k => obj[k] !== undefined && !k.startsWith('_'));
38
- if (keys.length === 0)
39
- return "{}";
40
- const lines = keys.map((key) => {
41
- const val = encode(obj[key]);
42
- if (val.includes("\n"))
43
- return `${key}:\n${val.split("\n").map(l => ` ${l}`).join("\n")}`;
44
- return `${key}:${val}`;
45
- });
46
- return lines.join("\n");
47
- }
48
- return String(data);
49
- }
50
- function decode(str) {
51
- if (!str)
52
- return null;
53
- const trimmed = str.trim();
54
- if (trimmed.startsWith('{') || trimmed.startsWith('[')) {
55
- try {
56
- return JSON.parse(trimmed);
57
- }
58
- catch (e) { }
59
- }
60
- const lines = str.split("\n");
61
- const result = {};
62
- let hasKeyValues = false;
63
- for (let i = 0; i < lines.length; i++) {
64
- const line = lines[i];
65
- if (!line.trim() && !line.startsWith(" "))
66
- continue;
67
- const colonIndex = line.indexOf(":");
68
- // A key:value pair must have a colon and the key shouldn't start with space (top-level)
69
- if (colonIndex > 0 && !line.startsWith(" ")) {
70
- const key = line.substring(0, colonIndex).trim();
71
- let valuePart = line.substring(colonIndex + 1).trim();
72
- // Check if it's a multiline/nested block (next lines are indented)
73
- if (i + 1 < lines.length && lines[i + 1].startsWith(" ")) {
74
- const nestedLines = [];
75
- if (valuePart)
76
- nestedLines.push(valuePart);
77
- let j = i + 1;
78
- while (j < lines.length && (lines[j].startsWith(" ") || !lines[j].trim())) {
79
- if (lines[j].startsWith(" ")) {
80
- nestedLines.push(lines[j].substring(2));
81
- }
82
- else {
83
- nestedLines.push("");
84
- }
85
- j++;
86
- }
87
- i = j - 1;
88
- result[key] = decodeValue(nestedLines.join("\n"));
89
- }
90
- else {
91
- // Just a regular value on the same line
92
- result[key] = decodeValue(valuePart);
93
- }
94
- hasKeyValues = true;
95
- }
96
- }
97
- if (hasKeyValues) {
98
- // Specific logic for common API patterns: if root has 'data' and 'success', and 'data' is an object,
99
- // merge 'data' properties into root IF it helps matching the expected interface
100
- if (result.data && typeof result.data === 'object' && !Array.isArray(result.data)) {
101
- // For generate-keys pattern: Merge privateKey into data
102
- if (result.privateKey && !result.data.privateKey) {
103
- result.data.privateKey = result.privateKey;
104
- }
105
- }
106
- return result;
107
- }
108
- return decodeValue(trimmed);
109
- }
110
- function decodeValue(str) {
111
- const trimmed = str.trim();
112
- if (!trimmed || trimmed === "null")
113
- return null;
114
- if (trimmed === "true")
115
- return true;
116
- if (trimmed === "false")
117
- return false;
118
- const lines = str.split("\n");
119
- const firstLine = lines[0].trim();
120
- // Tabular array [count]{key1,key2}:
121
- if (firstLine.startsWith("[") && firstLine.includes("]{")) {
122
- const headerMatch = firstLine.match(/^\[(\d+)\]\{([^}]+)\}:?$/);
123
- if (headerMatch) {
124
- const keys = headerMatch[2].split(",").map((k) => k.trim());
125
- const res = [];
126
- for (let i = 1; i < lines.length; i++) {
127
- const line = lines[i].trim();
128
- if (!line)
129
- continue;
130
- const values = parseCommaSeparated(line);
131
- const item = {};
132
- keys.forEach((key, j) => {
133
- if (j < values.length)
134
- item[key] = parseValue(values[j]);
135
- });
136
- res.push(item);
137
- }
138
- return res;
139
- }
140
- }
141
- // Simple array [count]:val1,val2
142
- if (firstLine.startsWith("[") && firstLine.includes("]:")) {
143
- const headerMatch = firstLine.match(/^\[(\d+)\]:(.*)$/);
144
- if (headerMatch) {
145
- const remaining = headerMatch[2] + (lines.length > 1 ? "\n" + lines.slice(1).join("\n") : "");
146
- return parseCommaSeparated(remaining.trim()).map(parseValue);
147
- }
148
- }
149
- // If it's a multiline string that isn't a tabular array, it might be an object
150
- if (lines.length > 1 && lines.some(l => l.includes(":") && !l.startsWith(" "))) {
151
- return decode(str);
152
- }
153
- // If it still looks like an object (key:value) but was passed as a single line value
154
- if (trimmed.includes(":") && !trimmed.startsWith('"') && !trimmed.includes("\n")) {
155
- const res = {};
156
- const parts = parseCommaSeparated(trimmed);
157
- let isObj = false;
158
- parts.forEach(part => {
159
- const cIndex = part.indexOf(":");
160
- if (cIndex > 0) {
161
- res[part.substring(0, cIndex).trim()] = parseValue(part.substring(cIndex + 1).trim());
162
- isObj = true;
163
- }
164
- });
165
- if (isObj)
166
- return res;
167
- }
168
- return parseValue(trimmed);
169
- }
170
- function parseValue(val) {
171
- let v = val.trim();
172
- if (!v || v === "null")
173
- return null;
174
- if (v === "true" || v === '"true"')
175
- return true;
176
- if (v === "false" || v === '"false"')
177
- return false;
178
- if (v.startsWith('"') && v.endsWith('"')) {
179
- return v.substring(1, v.length - 1);
180
- }
181
- if (/^-?\d+(\.\d+)?$/.test(v) && v.length < 15) {
182
- return Number(v);
183
- }
184
- return v;
185
- }
186
- function parseCommaSeparated(str) {
187
- const result = [];
188
- let current = "";
189
- let inQuotes = false;
190
- for (let i = 0; i < str.length; i++) {
191
- const char = str[i];
192
- if (char === '"')
193
- inQuotes = !inQuotes;
194
- if (char === "," && !inQuotes) {
195
- result.push(current.trim());
196
- current = "";
197
- }
198
- else
199
- current += char;
200
- }
201
- result.push(current.trim());
202
- return result;
203
- }
204
- function isToonFormat(content) {
205
- const trimmed = content.trim();
206
- return (trimmed.startsWith("[") && (trimmed.includes("]{") || trimmed.includes("]:"))) ||
207
- (trimmed.includes(":") && !trimmed.startsWith("{"));
208
- }
209
- function safeEncode(data) {
210
- try {
211
- return encode(data);
212
- }
213
- catch {
214
- return null;
215
- }
216
- }
217
- function safeDecode(str) {
218
- try {
219
- return decode(str);
220
- }
221
- catch {
222
- return null;
223
- }
224
- }
225
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZGF0YW1vZGVsL3Rvb24vaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSx3QkFrQ0M7QUFFRCx3QkF3REM7QUFnR0Qsb0NBSUM7QUFFRCxnQ0FFQztBQUVELGdDQUVDO0FBeE1ELFNBQWdCLE1BQU0sQ0FBQyxJQUFhO0lBQ2xDLElBQUksSUFBSSxLQUFLLElBQUksSUFBSSxJQUFJLEtBQUssU0FBUztRQUFFLE9BQU8sTUFBTSxDQUFDO0lBQ3ZELElBQUksT0FBTyxJQUFJLEtBQUssU0FBUztRQUFFLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztJQUM5RCxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVE7UUFBRSxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNsRCxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQzdCLElBQUksa0JBQWtCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsR0FBRztZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQ3BFLE9BQU8sSUFBSSxJQUFJLEdBQUcsQ0FBQztJQUNyQixDQUFDO0lBQ0QsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDeEIsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUM7WUFBRSxPQUFPLElBQUksQ0FBQztRQUNuQyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUIsSUFBSSxPQUFPLFNBQVMsS0FBSyxRQUFRLElBQUksU0FBUyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztZQUNyRixNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3BDLE1BQU0sTUFBTSxHQUFHLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUM7WUFDdEQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO2dCQUM5QixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUUsSUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDN0QsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzFCLENBQUMsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxNQUFNLEdBQUcsSUFBSSxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDckUsQ0FBQztRQUNELE9BQU8sSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzFFLENBQUM7SUFDRCxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQzdCLE1BQU0sR0FBRyxHQUFHLElBQStCLENBQUM7UUFDNUMsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxJQUFJLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3RGLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDbkMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQzdCLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUM3QixJQUFJLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO2dCQUFFLE9BQU8sR0FBRyxHQUFHLE1BQU0sR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDM0YsT0FBTyxHQUFHLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUN6QixDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBQ0QsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdEIsQ0FBQztBQUVELFNBQWdCLE1BQU0sQ0FBYyxHQUFXO0lBQzdDLElBQUksQ0FBQyxHQUFHO1FBQUUsT0FBTyxJQUFvQixDQUFDO0lBQ3RDLE1BQU0sT0FBTyxHQUFHLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUMzQixJQUFJLE9BQU8sQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ3ZELElBQUksQ0FBQztZQUFDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQU0sQ0FBQztRQUFDLENBQUM7UUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUEsQ0FBQztJQUN2RCxDQUFDO0lBRUQsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM5QixNQUFNLE1BQU0sR0FBd0IsRUFBRSxDQUFDO0lBQ3ZDLElBQUksWUFBWSxHQUFHLEtBQUssQ0FBQztJQUV6QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ3RDLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUM7WUFBRSxTQUFTO1FBRXBELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDckMsd0ZBQXdGO1FBQ3hGLElBQUksVUFBVSxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUM1QyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNqRCxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUV0RCxtRUFBbUU7WUFDbkUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDeEQsTUFBTSxXQUFXLEdBQUcsRUFBRSxDQUFDO2dCQUN2QixJQUFJLFNBQVM7b0JBQUUsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDM0MsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDZCxPQUFPLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7b0JBQzNFLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO3dCQUM5QixXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDMUMsQ0FBQzt5QkFBTSxDQUFDO3dCQUNOLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQ3ZCLENBQUM7b0JBQ0QsQ0FBQyxFQUFFLENBQUM7Z0JBQ04sQ0FBQztnQkFDRCxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDVixNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsV0FBVyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUNwRCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sd0NBQXdDO2dCQUN4QyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3ZDLENBQUM7WUFDRCxZQUFZLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLENBQUM7SUFDSCxDQUFDO0lBRUQsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNqQixxR0FBcUc7UUFDckcsZ0ZBQWdGO1FBQ2hGLElBQUksTUFBTSxDQUFDLElBQUksSUFBSSxPQUFPLE1BQU0sQ0FBQyxJQUFJLEtBQUssUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNsRix3REFBd0Q7WUFDeEQsSUFBSSxNQUFNLENBQUMsVUFBVSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDakQsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQztZQUM3QyxDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sTUFBc0IsQ0FBQztJQUNoQyxDQUFDO0lBQ0QsT0FBTyxXQUFXLENBQUMsT0FBTyxDQUFpQixDQUFDO0FBQzlDLENBQUM7QUFFRCxTQUFTLFdBQVcsQ0FBQyxHQUFXO0lBQzlCLE1BQU0sT0FBTyxHQUFHLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUMzQixJQUFJLENBQUMsT0FBTyxJQUFJLE9BQU8sS0FBSyxNQUFNO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFDaEQsSUFBSSxPQUFPLEtBQUssTUFBTTtRQUFFLE9BQU8sSUFBSSxDQUFDO0lBQ3BDLElBQUksT0FBTyxLQUFLLE9BQU87UUFBRSxPQUFPLEtBQUssQ0FBQztJQUV0QyxNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzlCLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUVsQyxvQ0FBb0M7SUFDcEMsSUFBSSxTQUFTLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUMxRCxNQUFNLFdBQVcsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLDBCQUEwQixDQUFDLENBQUM7UUFDaEUsSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUNoQixNQUFNLElBQUksR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7WUFDNUQsTUFBTSxHQUFHLEdBQVUsRUFBRSxDQUFDO1lBQ3RCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQ3RDLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDN0IsSUFBSSxDQUFDLElBQUk7b0JBQUUsU0FBUztnQkFDcEIsTUFBTSxNQUFNLEdBQUcsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3pDLE1BQU0sSUFBSSxHQUF3QixFQUFFLENBQUM7Z0JBQ3JDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7b0JBQ3RCLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNO3dCQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzNELENBQUMsQ0FBQyxDQUFDO2dCQUNILEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDakIsQ0FBQztZQUNELE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQztJQUNILENBQUM7SUFFRCxpQ0FBaUM7SUFDakMsSUFBSSxTQUFTLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUMxRCxNQUFNLFdBQVcsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDeEQsSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUNoQixNQUFNLFNBQVMsR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUM5RixPQUFPLG1CQUFtQixDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMvRCxDQUFDO0lBQ0gsQ0FBQztJQUVELCtFQUErRTtJQUMvRSxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDL0UsT0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDckIsQ0FBQztJQUVELHFGQUFxRjtJQUNyRixJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ2pGLE1BQU0sR0FBRyxHQUF3QixFQUFFLENBQUM7UUFDcEMsTUFBTSxLQUFLLEdBQUcsbUJBQW1CLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDM0MsSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ2xCLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDbkIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNqQyxJQUFJLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDZixHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztnQkFDdEYsS0FBSyxHQUFHLElBQUksQ0FBQztZQUNmLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksS0FBSztZQUFFLE9BQU8sR0FBRyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxPQUFPLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUM3QixDQUFDO0FBRUQsU0FBUyxVQUFVLENBQUMsR0FBVztJQUM3QixJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDbkIsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssTUFBTTtRQUFFLE9BQU8sSUFBSSxDQUFDO0lBQ3BDLElBQUksQ0FBQyxLQUFLLE1BQU0sSUFBSSxDQUFDLEtBQUssUUFBUTtRQUFFLE9BQU8sSUFBSSxDQUFDO0lBQ2hELElBQUksQ0FBQyxLQUFLLE9BQU8sSUFBSSxDQUFDLEtBQUssU0FBUztRQUFFLE9BQU8sS0FBSyxDQUFDO0lBRW5ELElBQUksQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDekMsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRCxJQUFJLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLEVBQUUsRUFBRSxDQUFDO1FBQy9DLE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ25CLENBQUM7SUFFRCxPQUFPLENBQUMsQ0FBQztBQUNYLENBQUM7QUFFRCxTQUFTLG1CQUFtQixDQUFDLEdBQVc7SUFDdEMsTUFBTSxNQUFNLEdBQWEsRUFBRSxDQUFDO0lBQzVCLElBQUksT0FBTyxHQUFHLEVBQUUsQ0FBQztJQUNqQixJQUFJLFFBQVEsR0FBRyxLQUFLLENBQUM7SUFDckIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUNwQyxNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEIsSUFBSSxJQUFJLEtBQUssR0FBRztZQUFFLFFBQVEsR0FBRyxDQUFDLFFBQVEsQ0FBQztRQUN2QyxJQUFJLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUM5QixNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQzVCLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFDZixDQUFDOztZQUFNLE9BQU8sSUFBSSxJQUFJLENBQUM7SUFDekIsQ0FBQztJQUNELE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDNUIsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUVELFNBQWdCLFlBQVksQ0FBQyxPQUFlO0lBQzFDLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUMvQixPQUFPLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQy9FLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM3RCxDQUFDO0FBRUQsU0FBZ0IsVUFBVSxDQUFDLElBQWE7SUFDdEMsSUFBSSxDQUFDO1FBQUMsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7SUFBQyxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQUMsT0FBTyxJQUFJLENBQUM7SUFBQyxDQUFDO0FBQ3JELENBQUM7QUFFRCxTQUFnQixVQUFVLENBQWMsR0FBVztJQUNqRCxJQUFJLENBQUM7UUFBQyxPQUFPLE1BQU0sQ0FBSSxHQUFHLENBQUMsQ0FBQztJQUFDLENBQUM7SUFBQyxNQUFNLENBQUM7UUFBQyxPQUFPLElBQUksQ0FBQztJQUFDLENBQUM7QUFDdkQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBmdW5jdGlvbiBlbmNvZGUoZGF0YTogdW5rbm93bik6IHN0cmluZyB7XG4gIGlmIChkYXRhID09PSBudWxsIHx8IGRhdGEgPT09IHVuZGVmaW5lZCkgcmV0dXJuIFwibnVsbFwiO1xuICBpZiAodHlwZW9mIGRhdGEgPT09IFwiYm9vbGVhblwiKSByZXR1cm4gZGF0YSA/IFwidHJ1ZVwiIDogXCJmYWxzZVwiO1xuICBpZiAodHlwZW9mIGRhdGEgPT09IFwibnVtYmVyXCIpIHJldHVybiBTdHJpbmcoZGF0YSk7XG4gIGlmICh0eXBlb2YgZGF0YSA9PT0gXCJzdHJpbmdcIikge1xuICAgIGlmICgvXlthLXpBLVowLTlfLV0rJC8udGVzdChkYXRhKSAmJiBkYXRhLmxlbmd0aCA8IDUwMCkgcmV0dXJuIGRhdGE7XG4gICAgcmV0dXJuIGBcIiR7ZGF0YX1cImA7XG4gIH1cbiAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICBpZiAoZGF0YS5sZW5ndGggPT09IDApIHJldHVybiBcIltdXCI7XG4gICAgY29uc3QgZmlyc3RJdGVtID0gZGF0YVswXTtcbiAgICBpZiAodHlwZW9mIGZpcnN0SXRlbSA9PT0gXCJvYmplY3RcIiAmJiBmaXJzdEl0ZW0gIT09IG51bGwgJiYgIUFycmF5LmlzQXJyYXkoZmlyc3RJdGVtKSkge1xuICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGZpcnN0SXRlbSk7XG4gICAgICBjb25zdCBoZWFkZXIgPSBgWyR7ZGF0YS5sZW5ndGh9XXske2tleXMuam9pbihcIixcIil9fTpgO1xuICAgICAgY29uc3QgbGluZXMgPSBkYXRhLm1hcCgoaXRlbSkgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZXMgPSBrZXlzLm1hcCgoa2V5KSA9PiBlbmNvZGUoKGl0ZW0gYXMgYW55KVtrZXldKSk7XG4gICAgICAgIHJldHVybiB2YWx1ZXMuam9pbihcIixcIik7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBoZWFkZXIgKyBcIlxcblwiICsgbGluZXMubWFwKChsaW5lKSA9PiBgICAke2xpbmV9YCkuam9pbihcIlxcblwiKTtcbiAgICB9XG4gICAgcmV0dXJuIGBbJHtkYXRhLmxlbmd0aH1dOmAgKyBkYXRhLm1hcCgoaXRlbSkgPT4gZW5jb2RlKGl0ZW0pKS5qb2luKFwiLFwiKTtcbiAgfVxuICBpZiAodHlwZW9mIGRhdGEgPT09IFwib2JqZWN0XCIpIHtcbiAgICBjb25zdCBvYmogPSBkYXRhIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhvYmopLmZpbHRlcihrID0+IG9ialtrXSAhPT0gdW5kZWZpbmVkICYmICFrLnN0YXJ0c1dpdGgoJ18nKSk7XG4gICAgaWYgKGtleXMubGVuZ3RoID09PSAwKSByZXR1cm4gXCJ7fVwiO1xuICAgIGNvbnN0IGxpbmVzID0ga2V5cy5tYXAoKGtleSkgPT4ge1xuICAgICAgY29uc3QgdmFsID0gZW5jb2RlKG9ialtrZXldKTtcbiAgICAgIGlmICh2YWwuaW5jbHVkZXMoXCJcXG5cIikpIHJldHVybiBgJHtrZXl9OlxcbiR7dmFsLnNwbGl0KFwiXFxuXCIpLm1hcChsID0+IGAgICR7bH1gKS5qb2luKFwiXFxuXCIpfWA7XG4gICAgICByZXR1cm4gYCR7a2V5fToke3ZhbH1gO1xuICAgIH0pO1xuICAgIHJldHVybiBsaW5lcy5qb2luKFwiXFxuXCIpO1xuICB9XG4gIHJldHVybiBTdHJpbmcoZGF0YSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGU8VCA9IHVua25vd24+KHN0cjogc3RyaW5nKTogVCB7XG4gIGlmICghc3RyKSByZXR1cm4gbnVsbCBhcyB1bmtub3duIGFzIFQ7XG4gIGNvbnN0IHRyaW1tZWQgPSBzdHIudHJpbSgpO1xuICBpZiAodHJpbW1lZC5zdGFydHNXaXRoKCd7JykgfHwgdHJpbW1lZC5zdGFydHNXaXRoKCdbJykpIHtcbiAgICB0cnkgeyByZXR1cm4gSlNPTi5wYXJzZSh0cmltbWVkKSBhcyBUOyB9IGNhdGNoIChlKSB7fVxuICB9XG5cbiAgY29uc3QgbGluZXMgPSBzdHIuc3BsaXQoXCJcXG5cIik7XG4gIGNvbnN0IHJlc3VsdDogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuICBsZXQgaGFzS2V5VmFsdWVzID0gZmFsc2U7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGxpbmUgPSBsaW5lc1tpXTtcbiAgICBpZiAoIWxpbmUudHJpbSgpICYmICFsaW5lLnN0YXJ0c1dpdGgoXCIgXCIpKSBjb250aW51ZTtcblxuICAgIGNvbnN0IGNvbG9uSW5kZXggPSBsaW5lLmluZGV4T2YoXCI6XCIpO1xuICAgIC8vIEEga2V5OnZhbHVlIHBhaXIgbXVzdCBoYXZlIGEgY29sb24gYW5kIHRoZSBrZXkgc2hvdWxkbid0IHN0YXJ0IHdpdGggc3BhY2UgKHRvcC1sZXZlbClcbiAgICBpZiAoY29sb25JbmRleCA+IDAgJiYgIWxpbmUuc3RhcnRzV2l0aChcIiBcIikpIHtcbiAgICAgIGNvbnN0IGtleSA9IGxpbmUuc3Vic3RyaW5nKDAsIGNvbG9uSW5kZXgpLnRyaW0oKTtcbiAgICAgIGxldCB2YWx1ZVBhcnQgPSBsaW5lLnN1YnN0cmluZyhjb2xvbkluZGV4ICsgMSkudHJpbSgpO1xuXG4gICAgICAvLyBDaGVjayBpZiBpdCdzIGEgbXVsdGlsaW5lL25lc3RlZCBibG9jayAobmV4dCBsaW5lcyBhcmUgaW5kZW50ZWQpXG4gICAgICBpZiAoaSArIDEgPCBsaW5lcy5sZW5ndGggJiYgbGluZXNbaSsxXS5zdGFydHNXaXRoKFwiICBcIikpIHtcbiAgICAgICAgY29uc3QgbmVzdGVkTGluZXMgPSBbXTtcbiAgICAgICAgaWYgKHZhbHVlUGFydCkgbmVzdGVkTGluZXMucHVzaCh2YWx1ZVBhcnQpO1xuICAgICAgICBsZXQgaiA9IGkgKyAxO1xuICAgICAgICB3aGlsZSAoaiA8IGxpbmVzLmxlbmd0aCAmJiAobGluZXNbal0uc3RhcnRzV2l0aChcIiAgXCIpIHx8ICFsaW5lc1tqXS50cmltKCkpKSB7XG4gICAgICAgICAgaWYgKGxpbmVzW2pdLnN0YXJ0c1dpdGgoXCIgIFwiKSkge1xuICAgICAgICAgICAgbmVzdGVkTGluZXMucHVzaChsaW5lc1tqXS5zdWJzdHJpbmcoMikpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBuZXN0ZWRMaW5lcy5wdXNoKFwiXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBqKys7XG4gICAgICAgIH1cbiAgICAgICAgaSA9IGogLSAxO1xuICAgICAgICByZXN1bHRba2V5XSA9IGRlY29kZVZhbHVlKG5lc3RlZExpbmVzLmpvaW4oXCJcXG5cIikpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gSnVzdCBhIHJlZ3VsYXIgdmFsdWUgb24gdGhlIHNhbWUgbGluZVxuICAgICAgICByZXN1bHRba2V5XSA9IGRlY29kZVZhbHVlKHZhbHVlUGFydCk7XG4gICAgICB9XG4gICAgICBoYXNLZXlWYWx1ZXMgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGlmIChoYXNLZXlWYWx1ZXMpIHtcbiAgICAvLyBTcGVjaWZpYyBsb2dpYyBmb3IgY29tbW9uIEFQSSBwYXR0ZXJuczogaWYgcm9vdCBoYXMgJ2RhdGEnIGFuZCAnc3VjY2VzcycsIGFuZCAnZGF0YScgaXMgYW4gb2JqZWN0LFxuICAgIC8vIG1lcmdlICdkYXRhJyBwcm9wZXJ0aWVzIGludG8gcm9vdCBJRiBpdCBoZWxwcyBtYXRjaGluZyB0aGUgZXhwZWN0ZWQgaW50ZXJmYWNlXG4gICAgaWYgKHJlc3VsdC5kYXRhICYmIHR5cGVvZiByZXN1bHQuZGF0YSA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkocmVzdWx0LmRhdGEpKSB7XG4gICAgICAvLyBGb3IgZ2VuZXJhdGUta2V5cyBwYXR0ZXJuOiBNZXJnZSBwcml2YXRlS2V5IGludG8gZGF0YVxuICAgICAgaWYgKHJlc3VsdC5wcml2YXRlS2V5ICYmICFyZXN1bHQuZGF0YS5wcml2YXRlS2V5KSB7XG4gICAgICAgIHJlc3VsdC5kYXRhLnByaXZhdGVLZXkgPSByZXN1bHQucHJpdmF0ZUtleTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdCBhcyB1bmtub3duIGFzIFQ7XG4gIH1cbiAgcmV0dXJuIGRlY29kZVZhbHVlKHRyaW1tZWQpIGFzIHVua25vd24gYXMgVDtcbn1cblxuZnVuY3Rpb24gZGVjb2RlVmFsdWUoc3RyOiBzdHJpbmcpOiBhbnkge1xuICBjb25zdCB0cmltbWVkID0gc3RyLnRyaW0oKTtcbiAgaWYgKCF0cmltbWVkIHx8IHRyaW1tZWQgPT09IFwibnVsbFwiKSByZXR1cm4gbnVsbDtcbiAgaWYgKHRyaW1tZWQgPT09IFwidHJ1ZVwiKSByZXR1cm4gdHJ1ZTtcbiAgaWYgKHRyaW1tZWQgPT09IFwiZmFsc2VcIikgcmV0dXJuIGZhbHNlO1xuXG4gIGNvbnN0IGxpbmVzID0gc3RyLnNwbGl0KFwiXFxuXCIpO1xuICBjb25zdCBmaXJzdExpbmUgPSBsaW5lc1swXS50cmltKCk7XG5cbiAgLy8gVGFidWxhciBhcnJheSBbY291bnRde2tleTEsa2V5Mn06XG4gIGlmIChmaXJzdExpbmUuc3RhcnRzV2l0aChcIltcIikgJiYgZmlyc3RMaW5lLmluY2x1ZGVzKFwiXXtcIikpIHtcbiAgICBjb25zdCBoZWFkZXJNYXRjaCA9IGZpcnN0TGluZS5tYXRjaCgvXlxcWyhcXGQrKVxcXVxceyhbXn1dKylcXH06PyQvKTtcbiAgICBpZiAoaGVhZGVyTWF0Y2gpIHtcbiAgICAgIGNvbnN0IGtleXMgPSBoZWFkZXJNYXRjaFsyXS5zcGxpdChcIixcIikubWFwKChrKSA9PiBrLnRyaW0oKSk7XG4gICAgICBjb25zdCByZXM6IGFueVtdID0gW107XG4gICAgICBmb3IgKGxldCBpID0gMTsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGxpbmUgPSBsaW5lc1tpXS50cmltKCk7XG4gICAgICAgIGlmICghbGluZSkgY29udGludWU7XG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IHBhcnNlQ29tbWFTZXBhcmF0ZWQobGluZSk7XG4gICAgICAgIGNvbnN0IGl0ZW06IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcbiAgICAgICAga2V5cy5mb3JFYWNoKChrZXksIGopID0+IHtcbiAgICAgICAgICBpZiAoaiA8IHZhbHVlcy5sZW5ndGgpIGl0ZW1ba2V5XSA9IHBhcnNlVmFsdWUodmFsdWVzW2pdKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJlcy5wdXNoKGl0ZW0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG4gIH1cblxuICAvLyBTaW1wbGUgYXJyYXkgW2NvdW50XTp2YWwxLHZhbDJcbiAgaWYgKGZpcnN0TGluZS5zdGFydHNXaXRoKFwiW1wiKSAmJiBmaXJzdExpbmUuaW5jbHVkZXMoXCJdOlwiKSkge1xuICAgIGNvbnN0IGhlYWRlck1hdGNoID0gZmlyc3RMaW5lLm1hdGNoKC9eXFxbKFxcZCspXFxdOiguKikkLyk7XG4gICAgaWYgKGhlYWRlck1hdGNoKSB7XG4gICAgICBjb25zdCByZW1haW5pbmcgPSBoZWFkZXJNYXRjaFsyXSArIChsaW5lcy5sZW5ndGggPiAxID8gXCJcXG5cIiArIGxpbmVzLnNsaWNlKDEpLmpvaW4oXCJcXG5cIikgOiBcIlwiKTtcbiAgICAgIHJldHVybiBwYXJzZUNvbW1hU2VwYXJhdGVkKHJlbWFpbmluZy50cmltKCkpLm1hcChwYXJzZVZhbHVlKTtcbiAgICB9XG4gIH1cblxuICAvLyBJZiBpdCdzIGEgbXVsdGlsaW5lIHN0cmluZyB0aGF0IGlzbid0IGEgdGFidWxhciBhcnJheSwgaXQgbWlnaHQgYmUgYW4gb2JqZWN0XG4gIGlmIChsaW5lcy5sZW5ndGggPiAxICYmIGxpbmVzLnNvbWUobCA9PiBsLmluY2x1ZGVzKFwiOlwiKSAmJiAhbC5zdGFydHNXaXRoKFwiIFwiKSkpIHtcbiAgICByZXR1cm4gZGVjb2RlKHN0cik7XG4gIH1cblxuICAvLyBJZiBpdCBzdGlsbCBsb29rcyBsaWtlIGFuIG9iamVjdCAoa2V5OnZhbHVlKSBidXQgd2FzIHBhc3NlZCBhcyBhIHNpbmdsZSBsaW5lIHZhbHVlXG4gIGlmICh0cmltbWVkLmluY2x1ZGVzKFwiOlwiKSAmJiAhdHJpbW1lZC5zdGFydHNXaXRoKCdcIicpICYmICF0cmltbWVkLmluY2x1ZGVzKFwiXFxuXCIpKSB7XG4gICAgY29uc3QgcmVzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG4gICAgY29uc3QgcGFydHMgPSBwYXJzZUNvbW1hU2VwYXJhdGVkKHRyaW1tZWQpO1xuICAgIGxldCBpc09iaiA9IGZhbHNlO1xuICAgIHBhcnRzLmZvckVhY2gocGFydCA9PiB7XG4gICAgICBjb25zdCBjSW5kZXggPSBwYXJ0LmluZGV4T2YoXCI6XCIpO1xuICAgICAgaWYgKGNJbmRleCA+IDApIHtcbiAgICAgICAgcmVzW3BhcnQuc3Vic3RyaW5nKDAsIGNJbmRleCkudHJpbSgpXSA9IHBhcnNlVmFsdWUocGFydC5zdWJzdHJpbmcoY0luZGV4ICsgMSkudHJpbSgpKTtcbiAgICAgICAgaXNPYmogPSB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmIChpc09iaikgcmV0dXJuIHJlcztcbiAgfVxuXG4gIHJldHVybiBwYXJzZVZhbHVlKHRyaW1tZWQpO1xufVxuXG5mdW5jdGlvbiBwYXJzZVZhbHVlKHZhbDogc3RyaW5nKTogYW55IHtcbiAgbGV0IHYgPSB2YWwudHJpbSgpO1xuICBpZiAoIXYgfHwgdiA9PT0gXCJudWxsXCIpIHJldHVybiBudWxsO1xuICBpZiAodiA9PT0gXCJ0cnVlXCIgfHwgdiA9PT0gJ1widHJ1ZVwiJykgcmV0dXJuIHRydWU7XG4gIGlmICh2ID09PSBcImZhbHNlXCIgfHwgdiA9PT0gJ1wiZmFsc2VcIicpIHJldHVybiBmYWxzZTtcbiAgXG4gIGlmICh2LnN0YXJ0c1dpdGgoJ1wiJykgJiYgdi5lbmRzV2l0aCgnXCInKSkge1xuICAgIHJldHVybiB2LnN1YnN0cmluZygxLCB2Lmxlbmd0aCAtIDEpO1xuICB9XG5cbiAgaWYgKC9eLT9cXGQrKFxcLlxcZCspPyQvLnRlc3QodikgJiYgdi5sZW5ndGggPCAxNSkge1xuICAgIHJldHVybiBOdW1iZXIodik7XG4gIH1cbiAgXG4gIHJldHVybiB2O1xufVxuXG5mdW5jdGlvbiBwYXJzZUNvbW1hU2VwYXJhdGVkKHN0cjogc3RyaW5nKTogc3RyaW5nW10ge1xuICBjb25zdCByZXN1bHQ6IHN0cmluZ1tdID0gW107XG4gIGxldCBjdXJyZW50ID0gXCJcIjtcbiAgbGV0IGluUXVvdGVzID0gZmFsc2U7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgY2hhciA9IHN0cltpXTtcbiAgICBpZiAoY2hhciA9PT0gJ1wiJykgaW5RdW90ZXMgPSAhaW5RdW90ZXM7XG4gICAgaWYgKGNoYXIgPT09IFwiLFwiICYmICFpblF1b3Rlcykge1xuICAgICAgcmVzdWx0LnB1c2goY3VycmVudC50cmltKCkpO1xuICAgICAgY3VycmVudCA9IFwiXCI7XG4gICAgfSBlbHNlIGN1cnJlbnQgKz0gY2hhcjtcbiAgfVxuICByZXN1bHQucHVzaChjdXJyZW50LnRyaW0oKSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1Rvb25Gb3JtYXQoY29udGVudDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGNvbnN0IHRyaW1tZWQgPSBjb250ZW50LnRyaW0oKTtcbiAgcmV0dXJuICh0cmltbWVkLnN0YXJ0c1dpdGgoXCJbXCIpICYmICh0cmltbWVkLmluY2x1ZGVzKFwiXXtcIikgfHwgdHJpbW1lZC5pbmNsdWRlcyhcIl06XCIpKSkgfHxcbiAgICAgICAgICh0cmltbWVkLmluY2x1ZGVzKFwiOlwiKSAmJiAhdHJpbW1lZC5zdGFydHNXaXRoKFwie1wiKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzYWZlRW5jb2RlKGRhdGE6IHVua25vd24pOiBzdHJpbmcgfCBudWxsIHtcbiAgdHJ5IHsgcmV0dXJuIGVuY29kZShkYXRhKTsgfSBjYXRjaCB7IHJldHVybiBudWxsOyB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzYWZlRGVjb2RlPFQgPSB1bmtub3duPihzdHI6IHN0cmluZyk6IFQgfCBudWxsIHtcbiAgdHJ5IHsgcmV0dXJuIGRlY29kZTxUPihzdHIpOyB9IGNhdGNoIHsgcmV0dXJuIG51bGw7IH1cbn1cbiJdfQ==
@@ -1,23 +0,0 @@
1
- export interface PlanLimits {
2
- plan: 'starter' | 'pro' | 'elite';
3
- maxNetworks: number;
4
- skills: string[];
5
- premiumLlms: boolean;
6
- stripePriceId?: string;
7
- stripeCustomerId?: string;
8
- }
9
- export declare class LimitsManager {
10
- private cached;
11
- getLimits(): Promise<PlanLimits | null>;
12
- canJoinNetwork(currentNetworkCount: number): Promise<{
13
- allowed: boolean;
14
- reason?: string;
15
- }>;
16
- canCreateNetwork(currentNetworkCount: number): Promise<{
17
- allowed: boolean;
18
- reason?: string;
19
- }>;
20
- hasSkill(skill: string): boolean;
21
- clearCache(): void;
22
- }
23
- export declare const limitsManager: LimitsManager;
@@ -1,99 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.limitsManager = exports.LimitsManager = void 0;
37
- const path = __importStar(require("path"));
38
- const os = __importStar(require("os"));
39
- const fs = __importStar(require("fs-extra"));
40
- const CONFIG_DIR = path.join(os.homedir(), '.agenticpool');
41
- const LIMITS_FILE = path.join(CONFIG_DIR, 'limits.json');
42
- const PLAN_DEFAULTS = {
43
- starter: { maxNetworks: 1, skills: ['agenticpool-social', 'openclaw-free'], premiumLlms: false },
44
- pro: { maxNetworks: 3, skills: ['agenticpool-social', 'openclaw-free', 'google-search', 'web-scraper', 'translation'], premiumLlms: false },
45
- elite: { maxNetworks: Infinity, skills: ['agenticpool-social', 'openclaw-free', 'google-search', 'web-scraper', 'translation', 'news-api', 'advanced-summarization'], premiumLlms: true },
46
- };
47
- class LimitsManager {
48
- constructor() {
49
- this.cached = null;
50
- }
51
- async getLimits() {
52
- if (this.cached)
53
- return this.cached;
54
- const exists = await fs.pathExists(LIMITS_FILE);
55
- if (!exists)
56
- return null;
57
- try {
58
- const raw = await fs.readJson(LIMITS_FILE);
59
- this.cached = {
60
- plan: raw.plan || 'starter',
61
- maxNetworks: raw.maxNetworks ?? PLAN_DEFAULTS[raw.plan]?.maxNetworks ?? 1,
62
- skills: raw.skills || PLAN_DEFAULTS[raw.plan]?.skills || [],
63
- premiumLlms: raw.premiumLlms ?? PLAN_DEFAULTS[raw.plan]?.premiumLlms ?? false,
64
- stripePriceId: raw.stripePriceId,
65
- stripeCustomerId: raw.stripeCustomerId,
66
- };
67
- return this.cached;
68
- }
69
- catch {
70
- return null;
71
- }
72
- }
73
- async canJoinNetwork(currentNetworkCount) {
74
- const limits = await this.getLimits();
75
- if (!limits)
76
- return { allowed: true };
77
- if (currentNetworkCount >= limits.maxNetworks) {
78
- return {
79
- allowed: false,
80
- reason: `Limit reached: Your ${limits.plan} plan allows a maximum of ${limits.maxNetworks} network(s). Upgrade at shop.agenticpool.net`,
81
- };
82
- }
83
- return { allowed: true };
84
- }
85
- async canCreateNetwork(currentNetworkCount) {
86
- return this.canJoinNetwork(currentNetworkCount);
87
- }
88
- hasSkill(skill) {
89
- if (!this.cached)
90
- return true;
91
- return this.cached.skills.includes(skill);
92
- }
93
- clearCache() {
94
- this.cached = null;
95
- }
96
- }
97
- exports.LimitsManager = LimitsManager;
98
- exports.limitsManager = new LimitsManager();
99
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTGltaXRzTWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saW1pdHMvTGltaXRzTWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwyQ0FBNkI7QUFDN0IsdUNBQXlCO0FBQ3pCLDZDQUErQjtBQUUvQixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxjQUFjLENBQUMsQ0FBQztBQUMzRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxhQUFhLENBQUMsQ0FBQztBQVd6RCxNQUFNLGFBQWEsR0FBd0M7SUFDekQsT0FBTyxFQUFFLEVBQUUsV0FBVyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxvQkFBb0IsRUFBRSxlQUFlLENBQUMsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFO0lBQ2hHLEdBQUcsRUFBRSxFQUFFLFdBQVcsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsb0JBQW9CLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsYUFBYSxDQUFDLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRTtJQUMzSSxLQUFLLEVBQUUsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFDLG9CQUFvQixFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsd0JBQXdCLENBQUMsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFO0NBQzFMLENBQUM7QUFFRixNQUFhLGFBQWE7SUFBMUI7UUFDVSxXQUFNLEdBQXNCLElBQUksQ0FBQztJQWtEM0MsQ0FBQztJQWhEQyxLQUFLLENBQUMsU0FBUztRQUNiLElBQUksSUFBSSxDQUFDLE1BQU07WUFBRSxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7UUFFcEMsTUFBTSxNQUFNLEdBQUcsTUFBTSxFQUFFLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ2hELElBQUksQ0FBQyxNQUFNO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFFekIsSUFBSSxDQUFDO1lBQ0gsTUFBTSxHQUFHLEdBQUcsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQzNDLElBQUksQ0FBQyxNQUFNLEdBQUc7Z0JBQ1osSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLElBQUksU0FBUztnQkFDM0IsV0FBVyxFQUFFLEdBQUcsQ0FBQyxXQUFXLElBQUksYUFBYSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxXQUFXLElBQUksQ0FBQztnQkFDekUsTUFBTSxFQUFFLEdBQUcsQ0FBQyxNQUFNLElBQUksYUFBYSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLElBQUksRUFBRTtnQkFDM0QsV0FBVyxFQUFFLEdBQUcsQ0FBQyxXQUFXLElBQUksYUFBYSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxXQUFXLElBQUksS0FBSztnQkFDN0UsYUFBYSxFQUFFLEdBQUcsQ0FBQyxhQUFhO2dCQUNoQyxnQkFBZ0IsRUFBRSxHQUFHLENBQUMsZ0JBQWdCO2FBQ3ZDLENBQUM7WUFDRixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDckIsQ0FBQztRQUFDLE1BQU0sQ0FBQztZQUNQLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsY0FBYyxDQUFDLG1CQUEyQjtRQUM5QyxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUN0QyxJQUFJLENBQUMsTUFBTTtZQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFFdEMsSUFBSSxtQkFBbUIsSUFBSSxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDOUMsT0FBTztnQkFDTCxPQUFPLEVBQUUsS0FBSztnQkFDZCxNQUFNLEVBQUUsdUJBQXVCLE1BQU0sQ0FBQyxJQUFJLDZCQUE2QixNQUFNLENBQUMsV0FBVyw4Q0FBOEM7YUFDeEksQ0FBQztRQUNKLENBQUM7UUFFRCxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRCxLQUFLLENBQUMsZ0JBQWdCLENBQUMsbUJBQTJCO1FBQ2hELE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFRCxRQUFRLENBQUMsS0FBYTtRQUNwQixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU07WUFBRSxPQUFPLElBQUksQ0FBQztRQUM5QixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQsVUFBVTtRQUNSLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0lBQ3JCLENBQUM7Q0FDRjtBQW5ERCxzQ0FtREM7QUFFWSxRQUFBLGFBQWEsR0FBRyxJQUFJLGFBQWEsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCAqIGFzIG9zIGZyb20gJ29zJztcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzLWV4dHJhJztcblxuY29uc3QgQ09ORklHX0RJUiA9IHBhdGguam9pbihvcy5ob21lZGlyKCksICcuYWdlbnRpY3Bvb2wnKTtcbmNvbnN0IExJTUlUU19GSUxFID0gcGF0aC5qb2luKENPTkZJR19ESVIsICdsaW1pdHMuanNvbicpO1xuXG5leHBvcnQgaW50ZXJmYWNlIFBsYW5MaW1pdHMge1xuICBwbGFuOiAnc3RhcnRlcicgfCAncHJvJyB8ICdlbGl0ZSc7XG4gIG1heE5ldHdvcmtzOiBudW1iZXI7XG4gIHNraWxsczogc3RyaW5nW107XG4gIHByZW1pdW1MbG1zOiBib29sZWFuO1xuICBzdHJpcGVQcmljZUlkPzogc3RyaW5nO1xuICBzdHJpcGVDdXN0b21lcklkPzogc3RyaW5nO1xufVxuXG5jb25zdCBQTEFOX0RFRkFVTFRTOiBSZWNvcmQ8c3RyaW5nLCBQYXJ0aWFsPFBsYW5MaW1pdHM+PiA9IHtcbiAgc3RhcnRlcjogeyBtYXhOZXR3b3JrczogMSwgc2tpbGxzOiBbJ2FnZW50aWNwb29sLXNvY2lhbCcsICdvcGVuY2xhdy1mcmVlJ10sIHByZW1pdW1MbG1zOiBmYWxzZSB9LFxuICBwcm86IHsgbWF4TmV0d29ya3M6IDMsIHNraWxsczogWydhZ2VudGljcG9vbC1zb2NpYWwnLCAnb3BlbmNsYXctZnJlZScsICdnb29nbGUtc2VhcmNoJywgJ3dlYi1zY3JhcGVyJywgJ3RyYW5zbGF0aW9uJ10sIHByZW1pdW1MbG1zOiBmYWxzZSB9LFxuICBlbGl0ZTogeyBtYXhOZXR3b3JrczogSW5maW5pdHksIHNraWxsczogWydhZ2VudGljcG9vbC1zb2NpYWwnLCAnb3BlbmNsYXctZnJlZScsICdnb29nbGUtc2VhcmNoJywgJ3dlYi1zY3JhcGVyJywgJ3RyYW5zbGF0aW9uJywgJ25ld3MtYXBpJywgJ2FkdmFuY2VkLXN1bW1hcml6YXRpb24nXSwgcHJlbWl1bUxsbXM6IHRydWUgfSxcbn07XG5cbmV4cG9ydCBjbGFzcyBMaW1pdHNNYW5hZ2VyIHtcbiAgcHJpdmF0ZSBjYWNoZWQ6IFBsYW5MaW1pdHMgfCBudWxsID0gbnVsbDtcblxuICBhc3luYyBnZXRMaW1pdHMoKTogUHJvbWlzZTxQbGFuTGltaXRzIHwgbnVsbD4ge1xuICAgIGlmICh0aGlzLmNhY2hlZCkgcmV0dXJuIHRoaXMuY2FjaGVkO1xuXG4gICAgY29uc3QgZXhpc3RzID0gYXdhaXQgZnMucGF0aEV4aXN0cyhMSU1JVFNfRklMRSk7XG4gICAgaWYgKCFleGlzdHMpIHJldHVybiBudWxsO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJhdyA9IGF3YWl0IGZzLnJlYWRKc29uKExJTUlUU19GSUxFKTtcbiAgICAgIHRoaXMuY2FjaGVkID0ge1xuICAgICAgICBwbGFuOiByYXcucGxhbiB8fCAnc3RhcnRlcicsXG4gICAgICAgIG1heE5ldHdvcmtzOiByYXcubWF4TmV0d29ya3MgPz8gUExBTl9ERUZBVUxUU1tyYXcucGxhbl0/Lm1heE5ldHdvcmtzID8/IDEsXG4gICAgICAgIHNraWxsczogcmF3LnNraWxscyB8fCBQTEFOX0RFRkFVTFRTW3Jhdy5wbGFuXT8uc2tpbGxzIHx8IFtdLFxuICAgICAgICBwcmVtaXVtTGxtczogcmF3LnByZW1pdW1MbG1zID8/IFBMQU5fREVGQVVMVFNbcmF3LnBsYW5dPy5wcmVtaXVtTGxtcyA/PyBmYWxzZSxcbiAgICAgICAgc3RyaXBlUHJpY2VJZDogcmF3LnN0cmlwZVByaWNlSWQsXG4gICAgICAgIHN0cmlwZUN1c3RvbWVySWQ6IHJhdy5zdHJpcGVDdXN0b21lcklkLFxuICAgICAgfTtcbiAgICAgIHJldHVybiB0aGlzLmNhY2hlZDtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGNhbkpvaW5OZXR3b3JrKGN1cnJlbnROZXR3b3JrQ291bnQ6IG51bWJlcik6IFByb21pc2U8eyBhbGxvd2VkOiBib29sZWFuOyByZWFzb24/OiBzdHJpbmcgfT4ge1xuICAgIGNvbnN0IGxpbWl0cyA9IGF3YWl0IHRoaXMuZ2V0TGltaXRzKCk7XG4gICAgaWYgKCFsaW1pdHMpIHJldHVybiB7IGFsbG93ZWQ6IHRydWUgfTtcblxuICAgIGlmIChjdXJyZW50TmV0d29ya0NvdW50ID49IGxpbWl0cy5tYXhOZXR3b3Jrcykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYWxsb3dlZDogZmFsc2UsXG4gICAgICAgIHJlYXNvbjogYExpbWl0IHJlYWNoZWQ6IFlvdXIgJHtsaW1pdHMucGxhbn0gcGxhbiBhbGxvd3MgYSBtYXhpbXVtIG9mICR7bGltaXRzLm1heE5ldHdvcmtzfSBuZXR3b3JrKHMpLiBVcGdyYWRlIGF0IHNob3AuYWdlbnRpY3Bvb2wubmV0YCxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgYWxsb3dlZDogdHJ1ZSB9O1xuICB9XG5cbiAgYXN5bmMgY2FuQ3JlYXRlTmV0d29yayhjdXJyZW50TmV0d29ya0NvdW50OiBudW1iZXIpOiBQcm9taXNlPHsgYWxsb3dlZDogYm9vbGVhbjsgcmVhc29uPzogc3RyaW5nIH0+IHtcbiAgICByZXR1cm4gdGhpcy5jYW5Kb2luTmV0d29yayhjdXJyZW50TmV0d29ya0NvdW50KTtcbiAgfVxuXG4gIGhhc1NraWxsKHNraWxsOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuY2FjaGVkKSByZXR1cm4gdHJ1ZTtcbiAgICByZXR1cm4gdGhpcy5jYWNoZWQuc2tpbGxzLmluY2x1ZGVzKHNraWxsKTtcbiAgfVxuXG4gIGNsZWFyQ2FjaGUoKTogdm9pZCB7XG4gICAgdGhpcy5jYWNoZWQgPSBudWxsO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBsaW1pdHNNYW5hZ2VyID0gbmV3IExpbWl0c01hbmFnZXIoKTtcbiJdfQ==