@explorins/pers-sdk 1.6.0 → 1.6.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunks/index-BfOoX87y.cjs +337 -0
- package/dist/chunks/index-BfOoX87y.cjs.map +1 -0
- package/dist/chunks/index-CJ9Jfa4A.js +615 -0
- package/dist/chunks/index-CJ9Jfa4A.js.map +1 -0
- package/dist/chunks/index-CM21r58m.js +331 -0
- package/dist/chunks/index-CM21r58m.js.map +1 -0
- package/dist/chunks/index-CzEluQmf.cjs +625 -0
- package/dist/chunks/index-CzEluQmf.cjs.map +1 -0
- package/dist/chunks/{pers-sdk-UNKbbSC_.cjs → pers-sdk-C3Sc2hyn.cjs} +398 -4
- package/dist/chunks/pers-sdk-C3Sc2hyn.cjs.map +1 -0
- package/dist/chunks/{pers-sdk-gnQ_VcEq.js → pers-sdk-CoKZ7rHG.js} +393 -5
- package/dist/chunks/pers-sdk-CoKZ7rHG.js.map +1 -0
- package/dist/core.cjs +12 -5
- package/dist/core.cjs.map +1 -1
- package/dist/core.js +6 -2
- package/dist/core.js.map +1 -1
- package/dist/file/api/file-api.d.ts +35 -0
- package/dist/file/api/file-api.d.ts.map +1 -0
- package/dist/file/api/index.d.ts +2 -0
- package/dist/file/api/index.d.ts.map +1 -0
- package/dist/file/index.d.ts +9 -0
- package/dist/file/index.d.ts.map +1 -0
- package/dist/file/models/index.d.ts +26 -0
- package/dist/file/models/index.d.ts.map +1 -0
- package/dist/file/services/file-service.d.ts +57 -0
- package/dist/file/services/file-service.d.ts.map +1 -0
- package/dist/file/services/index.d.ts +2 -0
- package/dist/file/services/index.d.ts.map +1 -0
- package/dist/index.cjs +19 -13
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -6
- package/dist/index.js.map +1 -1
- package/dist/managers/file-manager.d.ts +55 -0
- package/dist/managers/file-manager.d.ts.map +1 -0
- package/dist/managers/index.d.ts +3 -0
- package/dist/managers/index.d.ts.map +1 -1
- package/dist/managers/tenant-manager.d.ts +8 -0
- package/dist/managers/tenant-manager.d.ts.map +1 -1
- package/dist/managers/user-status-manager.d.ts +40 -0
- package/dist/managers/user-status-manager.d.ts.map +1 -0
- package/dist/managers/web3-manager.d.ts +76 -0
- package/dist/managers/web3-manager.d.ts.map +1 -0
- package/dist/package.json +1 -1
- package/dist/pers-sdk.d.ts +37 -1
- package/dist/pers-sdk.d.ts.map +1 -1
- package/dist/web3/index.d.ts +1 -0
- package/dist/web3/index.d.ts.map +1 -1
- package/dist/web3/utils/explorer.utils.d.ts +21 -0
- package/dist/web3/utils/explorer.utils.d.ts.map +1 -0
- package/dist/web3-chain.cjs +8 -307
- package/dist/web3-chain.cjs.map +1 -1
- package/dist/web3-chain.js +2 -305
- package/dist/web3-chain.js.map +1 -1
- package/dist/web3.cjs +9 -516
- package/dist/web3.cjs.map +1 -1
- package/dist/web3.js +3 -516
- package/dist/web3.js.map +1 -1
- package/package.json +1 -1
- package/dist/chunks/environment-C2AkkLPd.js +0 -46
- package/dist/chunks/environment-C2AkkLPd.js.map +0 -1
- package/dist/chunks/environment-CRROnwAY.cjs +0 -50
- package/dist/chunks/environment-CRROnwAY.cjs.map +0 -1
- package/dist/chunks/jwt.function-BYiyl-z_.cjs +0 -25
- package/dist/chunks/jwt.function-BYiyl-z_.cjs.map +0 -1
- package/dist/chunks/jwt.function-d6jPtBqI.js +0 -23
- package/dist/chunks/jwt.function-d6jPtBqI.js.map +0 -1
- package/dist/chunks/pers-sdk-UNKbbSC_.cjs.map +0 -1
- package/dist/chunks/pers-sdk-gnQ_VcEq.js.map +0 -1
|
@@ -0,0 +1,625 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var web3Chain = require('./index-BfOoX87y.cjs');
|
|
4
|
+
var ethers = require('@explorins/web3-ts/ethers');
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Environment Detection Utility
|
|
8
|
+
*
|
|
9
|
+
* Detects the runtime environment to handle platform-specific behaviors
|
|
10
|
+
* for bundling and module resolution.
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* Detects the current runtime environment
|
|
14
|
+
*/
|
|
15
|
+
function detectEnvironment() {
|
|
16
|
+
const isNode = typeof process !== 'undefined' &&
|
|
17
|
+
process.versions != null &&
|
|
18
|
+
process.versions.node != null &&
|
|
19
|
+
typeof globalThis.window === 'undefined';
|
|
20
|
+
const isBrowser = typeof globalThis.window !== 'undefined' &&
|
|
21
|
+
typeof globalThis.document !== 'undefined';
|
|
22
|
+
const isReactNative = typeof globalThis.navigator !== 'undefined' &&
|
|
23
|
+
typeof globalThis.navigator.product === 'string' &&
|
|
24
|
+
globalThis.navigator.product.toLowerCase() === 'reactnative';
|
|
25
|
+
const isWeb = isBrowser || isReactNative;
|
|
26
|
+
// Node.js streams: Only native in Node.js, need polyfills or avoidance in web
|
|
27
|
+
const needsNodeStreamPolyfills = isWeb;
|
|
28
|
+
return {
|
|
29
|
+
isNode,
|
|
30
|
+
isBrowser,
|
|
31
|
+
isReactNative,
|
|
32
|
+
isWeb,
|
|
33
|
+
needsNodeStreamPolyfills
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Global environment info (cached)
|
|
38
|
+
*/
|
|
39
|
+
const environment = detectEnvironment();
|
|
40
|
+
/**
|
|
41
|
+
* Warns if we're in an environment that might have bundling issues
|
|
42
|
+
*/
|
|
43
|
+
function warnIfProblematicEnvironment(feature) {
|
|
44
|
+
if (environment.needsNodeStreamPolyfills) {
|
|
45
|
+
console.warn(`[PERS SDK] ${feature} may require additional polyfills in web environments. ` +
|
|
46
|
+
`If you encounter 'readable-stream' errors, ensure proper polyfills are configured.`);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* TokenDomainService - Domain service for token operations
|
|
52
|
+
* Implements business logic for token balance, metadata, and collection operations
|
|
53
|
+
*/
|
|
54
|
+
class TokenDomainService {
|
|
55
|
+
constructor(web3Api, metadataService, contractService) {
|
|
56
|
+
this.web3Api = web3Api;
|
|
57
|
+
this.metadataService = metadataService;
|
|
58
|
+
this.contractService = contractService;
|
|
59
|
+
}
|
|
60
|
+
async getTokenBalance(request) {
|
|
61
|
+
const balance = await this.web3Api.getTokenBalance({
|
|
62
|
+
accountAddress: request.accountAddress,
|
|
63
|
+
contractAddress: request.contractAddress,
|
|
64
|
+
abi: ethers.convertAbiToInterface(request.abi),
|
|
65
|
+
tokenId: request.tokenId,
|
|
66
|
+
chainId: request.chainId
|
|
67
|
+
});
|
|
68
|
+
return {
|
|
69
|
+
tokenId: request.tokenId,
|
|
70
|
+
balance,
|
|
71
|
+
hasBalance: balance > 0,
|
|
72
|
+
metadata: null
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
async getTokenWithMetadata(params) {
|
|
76
|
+
try {
|
|
77
|
+
const balance = await this.web3Api.getTokenBalance({
|
|
78
|
+
accountAddress: params.accountAddress,
|
|
79
|
+
contractAddress: params.contractAddress,
|
|
80
|
+
abi: ethers.convertAbiToInterface(params.abi),
|
|
81
|
+
tokenId: params.tokenId,
|
|
82
|
+
chainId: params.chainId
|
|
83
|
+
});
|
|
84
|
+
let metadata = null;
|
|
85
|
+
if (balance > 0) {
|
|
86
|
+
const tokenUri = await this.web3Api.getTokenUri({
|
|
87
|
+
contractAddress: params.contractAddress,
|
|
88
|
+
abi: ethers.convertAbiToInterface(params.abi),
|
|
89
|
+
tokenId: params.tokenId,
|
|
90
|
+
chainId: params.chainId
|
|
91
|
+
});
|
|
92
|
+
if (tokenUri) {
|
|
93
|
+
metadata = await this.metadataService.fetchAndProcessMetadata(tokenUri, params.chainId);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
return {
|
|
97
|
+
tokenId: params.tokenId,
|
|
98
|
+
balance,
|
|
99
|
+
hasBalance: balance > 0,
|
|
100
|
+
metadata
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
catch (error) {
|
|
104
|
+
console.error('Error getting token with metadata:', error);
|
|
105
|
+
return {
|
|
106
|
+
tokenId: params.tokenId,
|
|
107
|
+
balance: 0,
|
|
108
|
+
hasBalance: false,
|
|
109
|
+
metadata: null
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
async getTokenCollection(params) {
|
|
114
|
+
params.abi = ethers.convertAbiToInterface(params.abi);
|
|
115
|
+
try {
|
|
116
|
+
const contractAnalysis = this.contractService.analyzeContract(params.abi);
|
|
117
|
+
const tokens = [];
|
|
118
|
+
if (!contractAnalysis.hasEnumeration && !contractAnalysis.isERC1155) {
|
|
119
|
+
console.warn('Contract does not support enumeration, cannot retrieve full collection');
|
|
120
|
+
return {
|
|
121
|
+
accountAddress: params.accountAddress,
|
|
122
|
+
contractAddress: params.contractAddress,
|
|
123
|
+
totalBalance: 0,
|
|
124
|
+
tokensRetrieved: 0,
|
|
125
|
+
tokens: [],
|
|
126
|
+
note: 'Contract does not support enumeration'
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
else if (contractAnalysis.isERC1155) {
|
|
130
|
+
const tokenIdsToProcess = params.tokenIds || [];
|
|
131
|
+
if (tokenIdsToProcess.length > 0) {
|
|
132
|
+
for (const tokenId of tokenIdsToProcess) {
|
|
133
|
+
const tokenBalance = await this.getTokenWithMetadata({
|
|
134
|
+
accountAddress: params.accountAddress,
|
|
135
|
+
contractAddress: params.contractAddress,
|
|
136
|
+
abi: params.abi,
|
|
137
|
+
tokenId,
|
|
138
|
+
chainId: params.chainId
|
|
139
|
+
});
|
|
140
|
+
tokens.push(tokenBalance);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
console.log('ERC-1155 User balances:', tokens);
|
|
144
|
+
// ERC-1155: Cannot enumerate without knowing token IDs
|
|
145
|
+
// Would need to use events or provide specific token IDs
|
|
146
|
+
console.warn('ERC-1155 collection retrieval requires specific token IDs or event analysis');
|
|
147
|
+
return {
|
|
148
|
+
accountAddress: params.accountAddress,
|
|
149
|
+
contractAddress: params.contractAddress,
|
|
150
|
+
totalBalance: 0,
|
|
151
|
+
tokensRetrieved: 0,
|
|
152
|
+
tokens: tokens,
|
|
153
|
+
note: 'ERC-1155 collection retrieval requires specific token IDs. Use getTokenWithMetadata() for individual tokens.'
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
// Handle different token standards
|
|
157
|
+
if (contractAnalysis.isERC721) {
|
|
158
|
+
// ERC-721: Get user's total balance and enumerate through tokens
|
|
159
|
+
const userBalance = await this.web3Api.getTokenBalance({
|
|
160
|
+
accountAddress: params.accountAddress,
|
|
161
|
+
contractAddress: params.contractAddress,
|
|
162
|
+
abi: params.abi,
|
|
163
|
+
tokenId: null, // null for ERC-721 total balance
|
|
164
|
+
chainId: params.chainId
|
|
165
|
+
});
|
|
166
|
+
console.log(`ERC-721 User balance for ${params.accountAddress}:`, userBalance);
|
|
167
|
+
if (userBalance === 0) {
|
|
168
|
+
return {
|
|
169
|
+
accountAddress: params.accountAddress,
|
|
170
|
+
contractAddress: params.contractAddress,
|
|
171
|
+
totalBalance: 0,
|
|
172
|
+
tokensRetrieved: 0,
|
|
173
|
+
tokens: []
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
// Enumerate through user's tokens
|
|
177
|
+
const maxTokens = params.maxTokens || userBalance;
|
|
178
|
+
const tokensToRetrieve = Math.min(maxTokens, userBalance);
|
|
179
|
+
for (let i = 0; i < tokensToRetrieve; i++) {
|
|
180
|
+
try {
|
|
181
|
+
const tokenId = await this.web3Api.getTokenOfOwnerByIndex({
|
|
182
|
+
contractAddress: params.contractAddress,
|
|
183
|
+
abi: params.abi,
|
|
184
|
+
accountAddress: params.accountAddress,
|
|
185
|
+
tokenIndex: i,
|
|
186
|
+
chainId: params.chainId
|
|
187
|
+
});
|
|
188
|
+
const tokenWithMetadata = await this.getTokenWithMetadata({
|
|
189
|
+
accountAddress: params.accountAddress,
|
|
190
|
+
contractAddress: params.contractAddress,
|
|
191
|
+
abi: params.abi,
|
|
192
|
+
tokenId,
|
|
193
|
+
chainId: params.chainId
|
|
194
|
+
});
|
|
195
|
+
if (tokenWithMetadata.hasBalance) {
|
|
196
|
+
tokens.push(tokenWithMetadata);
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
catch (error) {
|
|
200
|
+
console.warn(`Error retrieving ERC-721 token at index ${i}:`, error);
|
|
201
|
+
continue;
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
else {
|
|
206
|
+
// Unknown standard
|
|
207
|
+
return {
|
|
208
|
+
accountAddress: params.accountAddress,
|
|
209
|
+
contractAddress: params.contractAddress,
|
|
210
|
+
totalBalance: 0,
|
|
211
|
+
tokensRetrieved: 0,
|
|
212
|
+
tokens: [],
|
|
213
|
+
note: 'Unsupported token standard for collection retrieval'
|
|
214
|
+
};
|
|
215
|
+
}
|
|
216
|
+
// Calculate total balance based on retrieved tokens
|
|
217
|
+
let totalBalance = 0;
|
|
218
|
+
if (contractAnalysis.isERC721) {
|
|
219
|
+
// For ERC-721, total balance is the number of unique tokens owned
|
|
220
|
+
totalBalance = tokens.length;
|
|
221
|
+
}
|
|
222
|
+
else {
|
|
223
|
+
// For other standards, sum up individual token balances
|
|
224
|
+
totalBalance = tokens.reduce((sum, token) => sum + token.balance, 0);
|
|
225
|
+
}
|
|
226
|
+
return {
|
|
227
|
+
accountAddress: params.accountAddress,
|
|
228
|
+
contractAddress: params.contractAddress,
|
|
229
|
+
totalBalance,
|
|
230
|
+
tokensRetrieved: tokens.length,
|
|
231
|
+
tokens
|
|
232
|
+
};
|
|
233
|
+
}
|
|
234
|
+
catch (error) {
|
|
235
|
+
console.error('Error getting token collection:', error);
|
|
236
|
+
return {
|
|
237
|
+
accountAddress: params.accountAddress,
|
|
238
|
+
contractAddress: params.contractAddress,
|
|
239
|
+
totalBalance: 0,
|
|
240
|
+
tokensRetrieved: 0,
|
|
241
|
+
tokens: [],
|
|
242
|
+
note: 'Error retrieving collection'
|
|
243
|
+
};
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
async getTokenMetadata(params) {
|
|
247
|
+
params.abi = ethers.convertAbiToInterface(params.abi);
|
|
248
|
+
try {
|
|
249
|
+
const tokenUri = await this.web3Api.getTokenUri({
|
|
250
|
+
contractAddress: params.contractAddress,
|
|
251
|
+
abi: params.abi,
|
|
252
|
+
tokenId: params.tokenId,
|
|
253
|
+
chainId: params.chainId
|
|
254
|
+
});
|
|
255
|
+
let metadata = null;
|
|
256
|
+
if (tokenUri) {
|
|
257
|
+
metadata = await this.metadataService.fetchAndProcessMetadata(tokenUri, params.chainId);
|
|
258
|
+
}
|
|
259
|
+
return {
|
|
260
|
+
tokenId: params.tokenId,
|
|
261
|
+
tokenUri,
|
|
262
|
+
metadata
|
|
263
|
+
};
|
|
264
|
+
}
|
|
265
|
+
catch (error) {
|
|
266
|
+
console.error('Error getting token metadata:', error);
|
|
267
|
+
return {
|
|
268
|
+
tokenId: params.tokenId,
|
|
269
|
+
tokenUri: null,
|
|
270
|
+
metadata: null
|
|
271
|
+
};
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
/**
|
|
277
|
+
* MetadataDomainService - Clean IPFS metadata resolution
|
|
278
|
+
*/
|
|
279
|
+
class MetadataDomainService {
|
|
280
|
+
constructor(ipfsApi) {
|
|
281
|
+
this.ipfsApi = ipfsApi;
|
|
282
|
+
}
|
|
283
|
+
async fetchAndProcessMetadata(tokenUri, chainId) {
|
|
284
|
+
return this.ipfsApi.fetchAndProcessMetadata(tokenUri, chainId);
|
|
285
|
+
}
|
|
286
|
+
async resolveIPFSUrl(url, chainId) {
|
|
287
|
+
return this.ipfsApi.resolveIPFSUrl(url, chainId);
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
/**
|
|
292
|
+
* ContractDomainService - Clean contract analysis without external dependencies
|
|
293
|
+
*/
|
|
294
|
+
class ContractDomainService {
|
|
295
|
+
constructor() { }
|
|
296
|
+
analyzeContract(abi) {
|
|
297
|
+
abi = ethers.convertAbiToInterface(abi);
|
|
298
|
+
const methods = abi.fragments.filter(item => item.type === 'function').map(item => item.name);
|
|
299
|
+
// ERC-721 detection
|
|
300
|
+
const hasOwnerOf = methods.includes('ownerOf');
|
|
301
|
+
const hasTokenURI = methods.includes('tokenURI');
|
|
302
|
+
const hasTransferFrom = methods.includes('transferFrom');
|
|
303
|
+
const isERC721 = hasOwnerOf && hasTokenURI && hasTransferFrom;
|
|
304
|
+
// ERC-1155 detection
|
|
305
|
+
const hasBalanceOfBatch = methods.includes('balanceOfBatch');
|
|
306
|
+
const hasSafeBatchTransferFrom = methods.includes('safeBatchTransferFrom');
|
|
307
|
+
const hasURI = methods.includes('uri');
|
|
308
|
+
const isERC1155 = hasBalanceOfBatch && hasSafeBatchTransferFrom && hasURI;
|
|
309
|
+
return {
|
|
310
|
+
hasEnumeration: methods.includes('tokenByIndex') && methods.includes('totalSupply'),
|
|
311
|
+
hasOwnerOf,
|
|
312
|
+
hasBalanceOf: methods.includes('balanceOf'),
|
|
313
|
+
hasTokenURI,
|
|
314
|
+
hasTransfer: methods.includes('transfer') || methods.includes('transferFrom'),
|
|
315
|
+
hasApprove: methods.includes('approve'),
|
|
316
|
+
isERC721,
|
|
317
|
+
isERC1155
|
|
318
|
+
};
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
/**
|
|
323
|
+
* Web3ApplicationService - Application layer entrance point
|
|
324
|
+
* Orchestrates domain services and provides clean public interface
|
|
325
|
+
* Simplified architecture with concrete classes
|
|
326
|
+
*/
|
|
327
|
+
class Web3ApplicationService {
|
|
328
|
+
constructor(web3Api, ipfsApi) {
|
|
329
|
+
// Type-safe metadata conversion methods for ERC-721/ERC-1155 standards
|
|
330
|
+
this.metadataMapper = {
|
|
331
|
+
fromERCStandard: (ercMetadata) => ({
|
|
332
|
+
name: ercMetadata.name || '',
|
|
333
|
+
description: ercMetadata.description || '',
|
|
334
|
+
imageUrl: ercMetadata.image || '',
|
|
335
|
+
externalUrl: ercMetadata.external_url,
|
|
336
|
+
animationUrl: ercMetadata.animation_url,
|
|
337
|
+
animationUrlConverted: undefined, // Will be set by IPFS conversion
|
|
338
|
+
attributes: ercMetadata.attributes || [],
|
|
339
|
+
...ercMetadata
|
|
340
|
+
}),
|
|
341
|
+
toERCStandard: (metadata) => ({
|
|
342
|
+
name: metadata.name,
|
|
343
|
+
description: metadata.description,
|
|
344
|
+
image: metadata.imageUrl,
|
|
345
|
+
animation_url: metadata.animationUrl,
|
|
346
|
+
external_url: metadata.externalUrl,
|
|
347
|
+
attributes: metadata.attributes,
|
|
348
|
+
...Object.fromEntries(Object.entries(metadata).filter(([key]) => !['name', 'description', 'imageUrl', 'animationUrl', 'externalUrl', 'attributes', 'animationUrlConverted'].includes(key)))
|
|
349
|
+
})
|
|
350
|
+
};
|
|
351
|
+
// Create domain services with injected infrastructure dependencies
|
|
352
|
+
this.contractDomainService = new ContractDomainService();
|
|
353
|
+
this.metadataDomainService = new MetadataDomainService(ipfsApi);
|
|
354
|
+
this.tokenDomainService = new TokenDomainService(web3Api, this.metadataDomainService, this.contractDomainService);
|
|
355
|
+
}
|
|
356
|
+
/**
|
|
357
|
+
* Get balance and metadata for a specific token
|
|
358
|
+
*/
|
|
359
|
+
async getSpecificTokenBalance(request) {
|
|
360
|
+
if (!request.tokenId) {
|
|
361
|
+
return this.tokenDomainService.getTokenBalance({
|
|
362
|
+
accountAddress: request.accountAddress || '',
|
|
363
|
+
contractAddress: request.contractAddress,
|
|
364
|
+
abi: request.abi,
|
|
365
|
+
tokenId: '',
|
|
366
|
+
chainId: request.chainId
|
|
367
|
+
});
|
|
368
|
+
}
|
|
369
|
+
return this.tokenDomainService.getTokenWithMetadata({
|
|
370
|
+
accountAddress: request.accountAddress || '',
|
|
371
|
+
contractAddress: request.contractAddress,
|
|
372
|
+
abi: request.abi,
|
|
373
|
+
tokenId: request.tokenId || '',
|
|
374
|
+
chainId: request.chainId
|
|
375
|
+
});
|
|
376
|
+
}
|
|
377
|
+
/**
|
|
378
|
+
* Get metadata for a specific token from on-chain
|
|
379
|
+
*/
|
|
380
|
+
async getTokenMetadata(request) {
|
|
381
|
+
const domainResult = await this.tokenDomainService.getTokenMetadata({
|
|
382
|
+
contractAddress: request.contractAddress,
|
|
383
|
+
abi: request.abi,
|
|
384
|
+
tokenId: request.tokenId || '',
|
|
385
|
+
chainId: request.chainId
|
|
386
|
+
});
|
|
387
|
+
return domainResult.metadata;
|
|
388
|
+
}
|
|
389
|
+
/**
|
|
390
|
+
* Retrieve entire collection of tokens with balance and metadata
|
|
391
|
+
*/
|
|
392
|
+
async getTokenCollection(request) {
|
|
393
|
+
return this.tokenDomainService.getTokenCollection({
|
|
394
|
+
accountAddress: request.accountAddress || '',
|
|
395
|
+
contractAddress: request.contractAddress,
|
|
396
|
+
abi: request.abi,
|
|
397
|
+
chainId: request.chainId,
|
|
398
|
+
maxTokens: request.maxTokens,
|
|
399
|
+
tokenIds: request.tokenIds
|
|
400
|
+
});
|
|
401
|
+
}
|
|
402
|
+
/**
|
|
403
|
+
* Resolve IPFS URLs to HTTPS if needed
|
|
404
|
+
*/
|
|
405
|
+
async resolveIPFSUrl(url, chainId) {
|
|
406
|
+
return this.metadataDomainService.resolveIPFSUrl(url, chainId);
|
|
407
|
+
}
|
|
408
|
+
/**
|
|
409
|
+
* Fetch and process metadata from URI with IPFS conversion
|
|
410
|
+
*/
|
|
411
|
+
async fetchAndProcessMetadata(tokenUri, chainId) {
|
|
412
|
+
const domainMetadata = await this.metadataDomainService.fetchAndProcessMetadata(tokenUri, chainId);
|
|
413
|
+
if (!domainMetadata)
|
|
414
|
+
return null;
|
|
415
|
+
// Convert from ERC token standard to our clean interface
|
|
416
|
+
const cleanMetadata = this.metadataMapper.fromERCStandard(domainMetadata);
|
|
417
|
+
// Add IPFS conversion if needed
|
|
418
|
+
if (cleanMetadata.animationUrl?.startsWith('ipfs://')) {
|
|
419
|
+
return {
|
|
420
|
+
...cleanMetadata,
|
|
421
|
+
animationUrlConverted: await this.resolveIPFSUrl(cleanMetadata.animationUrl, chainId)
|
|
422
|
+
};
|
|
423
|
+
}
|
|
424
|
+
return cleanMetadata;
|
|
425
|
+
}
|
|
426
|
+
}
|
|
427
|
+
|
|
428
|
+
/**
|
|
429
|
+
* Web3InfrastructureApi - Infrastructure implementation for blockchain operations
|
|
430
|
+
* Uses @explorins/web3-ts for Web3 interactions
|
|
431
|
+
*/
|
|
432
|
+
class Web3InfrastructureApi {
|
|
433
|
+
constructor(web3ChainService) {
|
|
434
|
+
this.web3ChainService = web3ChainService;
|
|
435
|
+
}
|
|
436
|
+
async getTokenBalance(request) {
|
|
437
|
+
try {
|
|
438
|
+
if (request.tokenId !== null)
|
|
439
|
+
request.tokenId = request.tokenId.toString();
|
|
440
|
+
const ethersProvider = await this.web3ChainService.getEthersProviderByChainId(request.chainId);
|
|
441
|
+
console.log(`[getTokenBalance] Ethers provider obtained, creating contract instance...`, ethersProvider);
|
|
442
|
+
const contract = ethers.createSafeContract(request.contractAddress, request.abi, ethersProvider);
|
|
443
|
+
return await ethers.getAccountTokenBalance(contract, request.accountAddress, request.tokenId);
|
|
444
|
+
}
|
|
445
|
+
catch (error) {
|
|
446
|
+
console.error(`Failed to get token balance for ${request.accountAddress} for ${request.contractAddress} and tokenId ${request.tokenId}, return 0 instead:`, error);
|
|
447
|
+
return 0;
|
|
448
|
+
}
|
|
449
|
+
}
|
|
450
|
+
async getTokenUri(request) {
|
|
451
|
+
try {
|
|
452
|
+
const ethersProvider = await this.web3ChainService.getEthersProviderByChainId(request.chainId);
|
|
453
|
+
const contract = ethers.createSafeContract(request.contractAddress, request.abi, ethersProvider);
|
|
454
|
+
const tokenId = Number(request.tokenId);
|
|
455
|
+
const tokenUri = await ethers.getTokenUri(contract, tokenId);
|
|
456
|
+
return String(tokenUri);
|
|
457
|
+
}
|
|
458
|
+
catch (error) {
|
|
459
|
+
console.error(`Failed to get token URI for tokenId ${request.tokenId}:`, error);
|
|
460
|
+
throw error;
|
|
461
|
+
}
|
|
462
|
+
}
|
|
463
|
+
async getTokenOfOwnerByIndex(request) {
|
|
464
|
+
try {
|
|
465
|
+
const ethersProvider = await this.web3ChainService.getEthersProviderByChainId(request.chainId);
|
|
466
|
+
const tokenContract = ethers.createSafeContract(request.contractAddress, request.abi, ethersProvider);
|
|
467
|
+
const tokenId = await ethers.getTokenOfOwnerByIndex(tokenContract, request.accountAddress, request.tokenIndex);
|
|
468
|
+
return String(tokenId);
|
|
469
|
+
}
|
|
470
|
+
catch (error) {
|
|
471
|
+
console.error(`Failed to get token by index ${request.tokenIndex} for ${request.accountAddress}:`, error);
|
|
472
|
+
throw error;
|
|
473
|
+
}
|
|
474
|
+
}
|
|
475
|
+
}
|
|
476
|
+
|
|
477
|
+
/**
|
|
478
|
+
* IPFSInfrastructureApi - Infrastructure implementation for IPFS operations
|
|
479
|
+
* Uses Web3ChainService for IPFS gateway resolution
|
|
480
|
+
*/
|
|
481
|
+
class IPFSInfrastructureApi {
|
|
482
|
+
constructor(web3ChainService) {
|
|
483
|
+
this.web3ChainService = web3ChainService;
|
|
484
|
+
this.defaultIpfsGatewayDomain = 'pers.mypinata.cloud';
|
|
485
|
+
}
|
|
486
|
+
async getIpfsGatewayDomain(chainId) {
|
|
487
|
+
try {
|
|
488
|
+
const chainData = await this.web3ChainService.getChainDataWithCache(chainId);
|
|
489
|
+
return chainData.ipfsGatewayDomain || this.defaultIpfsGatewayDomain;
|
|
490
|
+
}
|
|
491
|
+
catch (error) {
|
|
492
|
+
console.warn(`Failed to get chain data for chainId ${chainId}, using default IPFS gateway:`, error);
|
|
493
|
+
return this.defaultIpfsGatewayDomain;
|
|
494
|
+
}
|
|
495
|
+
}
|
|
496
|
+
async resolveIPFSUrl(url, chainId) {
|
|
497
|
+
if (url.startsWith('ipfs://')) {
|
|
498
|
+
const gateway = await this.getIpfsGatewayDomain(chainId);
|
|
499
|
+
return url.replace('ipfs://', `https://${gateway}/ipfs/`);
|
|
500
|
+
}
|
|
501
|
+
return url;
|
|
502
|
+
}
|
|
503
|
+
async fetchAndProcessMetadata(tokenUri, chainId) {
|
|
504
|
+
try {
|
|
505
|
+
const resolvedUri = await this.resolveIPFSUrl(tokenUri, chainId);
|
|
506
|
+
const response = await fetch(resolvedUri);
|
|
507
|
+
if (!response.ok) {
|
|
508
|
+
throw new Error(`HTTP error! status: ${response.status}`);
|
|
509
|
+
}
|
|
510
|
+
const metadata = await response.json();
|
|
511
|
+
// Process and return clean metadata
|
|
512
|
+
return {
|
|
513
|
+
name: metadata.name || '',
|
|
514
|
+
description: metadata.description || '',
|
|
515
|
+
image: metadata.image ? await this.resolveIPFSUrl(metadata.image, chainId) : '',
|
|
516
|
+
attributes: metadata.attributes || [],
|
|
517
|
+
animation_url: metadata.animation_url ? await this.resolveIPFSUrl(metadata.animation_url, chainId) : undefined,
|
|
518
|
+
external_url: metadata.external_url || undefined
|
|
519
|
+
};
|
|
520
|
+
}
|
|
521
|
+
catch (error) {
|
|
522
|
+
console.error('Error fetching metadata:', error);
|
|
523
|
+
return null;
|
|
524
|
+
}
|
|
525
|
+
}
|
|
526
|
+
async fetchFromUrl(url) {
|
|
527
|
+
try {
|
|
528
|
+
const response = await fetch(url);
|
|
529
|
+
if (!response.ok) {
|
|
530
|
+
throw new Error(`Failed to fetch from ${url}: ${response.statusText}`);
|
|
531
|
+
}
|
|
532
|
+
return await response.json();
|
|
533
|
+
}
|
|
534
|
+
catch (error) {
|
|
535
|
+
console.error(`Error fetching from URL ${url}:`, error);
|
|
536
|
+
throw error;
|
|
537
|
+
}
|
|
538
|
+
}
|
|
539
|
+
}
|
|
540
|
+
|
|
541
|
+
/**
|
|
542
|
+
* Generate explorer URL for a given address or transaction
|
|
543
|
+
*
|
|
544
|
+
* @param chainData - Chain data containing explorer URL and chain ID
|
|
545
|
+
* @param address - Address or transaction hash
|
|
546
|
+
* @param type - Type of explorer URL ('address' or 'tx')
|
|
547
|
+
* @returns Explorer URL string
|
|
548
|
+
*/
|
|
549
|
+
function getExplorerUrl(chainData, address, type) {
|
|
550
|
+
if (chainData?.explorerUrl) {
|
|
551
|
+
return `${chainData.explorerUrl}/${type}/${address}`;
|
|
552
|
+
}
|
|
553
|
+
// Fallback to hardcoded URLs if no explorer URL in chain data
|
|
554
|
+
const chainId = chainData?.chainId;
|
|
555
|
+
let url = '';
|
|
556
|
+
switch (chainId) {
|
|
557
|
+
case 1:
|
|
558
|
+
url = `https://etherscan.io/${type}/${address}`;
|
|
559
|
+
break;
|
|
560
|
+
case 4:
|
|
561
|
+
url = `https://rinkeby.etherscan.io/${type}/${address}`;
|
|
562
|
+
break;
|
|
563
|
+
case 56:
|
|
564
|
+
url = `https://bscscan.com/${type}/${address}`;
|
|
565
|
+
break;
|
|
566
|
+
case 97:
|
|
567
|
+
url = `https://testnet.bscscan.com/${type}/${address}`;
|
|
568
|
+
break;
|
|
569
|
+
case 137:
|
|
570
|
+
url = `https://explorer-mainnet.maticvigil.com/${type}/${address}`;
|
|
571
|
+
break;
|
|
572
|
+
case 80001:
|
|
573
|
+
url = `https://explorer-mumbai.maticvigil.com/${type}/${address}`;
|
|
574
|
+
break;
|
|
575
|
+
case 80002:
|
|
576
|
+
url = `https://www.oklink.com/amoy/${type}/${address}`;
|
|
577
|
+
break;
|
|
578
|
+
default:
|
|
579
|
+
url = `https://etherscan.io/${type}/${address}`;
|
|
580
|
+
}
|
|
581
|
+
return url;
|
|
582
|
+
}
|
|
583
|
+
/**
|
|
584
|
+
* Generate explorer URL using chain ID (async version that fetches chain data)
|
|
585
|
+
*
|
|
586
|
+
* @param getChainData - Function to get chain data by ID
|
|
587
|
+
* @param chainId - Chain ID to get explorer URL for
|
|
588
|
+
* @param address - Address or transaction hash
|
|
589
|
+
* @param type - Type of explorer URL ('address' or 'tx')
|
|
590
|
+
* @returns Promise resolving to explorer URL string
|
|
591
|
+
*/
|
|
592
|
+
async function getExplorerUrlByChainId(getChainData, chainId, address, type) {
|
|
593
|
+
const chainData = await getChainData(chainId);
|
|
594
|
+
return getExplorerUrl(chainData, address, type);
|
|
595
|
+
}
|
|
596
|
+
|
|
597
|
+
function createWeb3SDK(apiClient) {
|
|
598
|
+
// Warn about potential bundling issues in web environments
|
|
599
|
+
warnIfProblematicEnvironment('Web3 functionality');
|
|
600
|
+
const web3ChainSDK = web3Chain.createWeb3ChainSDK(apiClient);
|
|
601
|
+
// Create Web3ApplicationService - main entry point for all Web3 operations
|
|
602
|
+
const web3InfrastructureApi = new Web3InfrastructureApi(web3ChainSDK.service);
|
|
603
|
+
const ipfsInfrastructureApi = new IPFSInfrastructureApi(web3ChainSDK.service);
|
|
604
|
+
const web3ApplicationService = new Web3ApplicationService(web3InfrastructureApi, ipfsInfrastructureApi);
|
|
605
|
+
// Clean SDK - all functions route through Web3ApplicationService
|
|
606
|
+
return {
|
|
607
|
+
getTokenBalance: (request) => web3ApplicationService.getSpecificTokenBalance(request),
|
|
608
|
+
getTokenMetadata: (request) => web3ApplicationService.getTokenMetadata(request),
|
|
609
|
+
getTokenCollection: (request) => web3ApplicationService.getTokenCollection(request),
|
|
610
|
+
resolveIPFSUrl: (url, chainId) => web3ApplicationService.resolveIPFSUrl(url, chainId),
|
|
611
|
+
fetchAndProcessMetadata: (tokenUri, chainId) => web3ApplicationService.fetchAndProcessMetadata(tokenUri, chainId),
|
|
612
|
+
applicationService: web3ApplicationService
|
|
613
|
+
};
|
|
614
|
+
}
|
|
615
|
+
|
|
616
|
+
exports.IPFSInfrastructureApi = IPFSInfrastructureApi;
|
|
617
|
+
exports.Web3ApplicationService = Web3ApplicationService;
|
|
618
|
+
exports.Web3InfrastructureApi = Web3InfrastructureApi;
|
|
619
|
+
exports.createWeb3SDK = createWeb3SDK;
|
|
620
|
+
exports.detectEnvironment = detectEnvironment;
|
|
621
|
+
exports.environment = environment;
|
|
622
|
+
exports.getExplorerUrl = getExplorerUrl;
|
|
623
|
+
exports.getExplorerUrlByChainId = getExplorerUrlByChainId;
|
|
624
|
+
exports.warnIfProblematicEnvironment = warnIfProblematicEnvironment;
|
|
625
|
+
//# sourceMappingURL=index-CzEluQmf.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-CzEluQmf.cjs","sources":["../../src/core/environment.ts","../../src/web3/domain/services/token-domain.service.ts","../../src/web3/domain/services/metadata-domain.service.ts","../../src/web3/domain/services/contract-domain.service.ts","../../src/web3/application/web3-application.service.ts","../../src/web3/infrastructure/api/web3-api.ts","../../src/web3/infrastructure/api/ipfs-api.ts","../../src/web3/utils/explorer.utils.ts","../../src/web3/index.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null],"names":["convertAbiToInterface","createSafeContract","getAccountTokenBalance","getTokenUri","getTokenOfOwnerByIndex","createWeb3ChainSDK"],"mappings":";;;;;AAAA;;;;;AAKG;AAUH;;AAEG;SACa,iBAAiB,GAAA;AAC/B,IAAA,MAAM,MAAM,GAAG,OAAO,OAAO,KAAK,WAAW;QAC9B,OAAO,CAAC,QAAQ,IAAI,IAAI;AACxB,QAAA,OAAO,CAAC,QAAQ,CAAC,IAAI,IAAI,IAAI;AAC7B,QAAA,OAAQ,UAAkB,CAAC,MAAM,KAAK,WAAW;AAEhE,IAAA,MAAM,SAAS,GAAG,OAAQ,UAAkB,CAAC,MAAM,KAAK,WAAW;AACjD,QAAA,OAAQ,UAAkB,CAAC,QAAQ,KAAK,WAAW;AAErE,IAAA,MAAM,aAAa,GAAG,OAAQ,UAAkB,CAAC,SAAS,KAAK,WAAW;AACpD,QAAA,OAAQ,UAAkB,CAAC,SAAS,CAAC,OAAO,KAAK,QAAQ;QACxD,UAAkB,CAAC,SAAS,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,aAAa;AAE3F,IAAA,MAAM,KAAK,GAAG,SAAS,IAAI,aAAa;;IAGxC,MAAM,wBAAwB,GAAG,KAAK;IAEtC,OAAO;QACL,MAAM;QACN,SAAS;QACT,aAAa;QACb,KAAK;QACL;KACD;AACH;AAEA;;AAEG;AACI,MAAM,WAAW,GAAG,iBAAiB;AAE5C;;AAEG;AACG,SAAU,4BAA4B,CAAC,OAAe,EAAA;AAC1D,IAAA,IAAI,WAAW,CAAC,wBAAwB,EAAE;AACxC,QAAA,OAAO,CAAC,IAAI,CACV,CAAA,WAAA,EAAc,OAAO,CAAA,uDAAA,CAAyD;AAC9E,YAAA,CAAA,kFAAA,CAAoF,CACrF;IACH;AACF;;ACtDA;;;AAGG;MACU,kBAAkB,CAAA;AAE7B,IAAA,WAAA,CACU,OAA8B,EAC9B,eAAsC,EACtC,eAAsC,EAAA;QAFtC,IAAA,CAAA,OAAO,GAAP,OAAO;QACP,IAAA,CAAA,eAAe,GAAf,eAAe;QACf,IAAA,CAAA,eAAe,GAAf,eAAe;IACtB;IAEH,MAAM,eAAe,CAAC,OAA+G,EAAA;QACnI,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC;YACjD,cAAc,EAAE,OAAO,CAAC,cAAc;YACtC,eAAe,EAAE,OAAO,CAAC,eAAe;AACxC,YAAA,GAAG,EAAEA,4BAAqB,CAAC,OAAO,CAAC,GAAG,CAAC;YACvC,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,OAAO,EAAE,OAAO,CAAC;AAClB,SAAA,CAAC;QAEF,OAAO;YACL,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,OAAO;YACP,UAAU,EAAE,OAAO,GAAG,CAAC;AACvB,YAAA,QAAQ,EAAE;SACX;IACH;IAEA,MAAM,oBAAoB,CAAC,MAM1B,EAAA;AACC,QAAA,IAAI;YACF,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC;gBACjD,cAAc,EAAE,MAAM,CAAC,cAAc;gBACrC,eAAe,EAAE,MAAM,CAAC,eAAe;AACvC,gBAAA,GAAG,EAAEA,4BAAqB,CAAC,MAAM,CAAC,GAAG,CAAC;gBACtC,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,OAAO,EAAE,MAAM,CAAC;AACjB,aAAA,CAAC;YAEF,IAAI,QAAQ,GAAyB,IAAI;AACzC,YAAA,IAAI,OAAO,GAAG,CAAC,EAAE;gBACf,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;oBAC9C,eAAe,EAAE,MAAM,CAAC,eAAe;AACvC,oBAAA,GAAG,EAAEA,4BAAqB,CAAC,MAAM,CAAC,GAAG,CAAC;oBACtC,OAAO,EAAE,MAAM,CAAC,OAAO;oBACvB,OAAO,EAAE,MAAM,CAAC;AACjB,iBAAA,CAAC;gBAEF,IAAI,QAAQ,EAAE;AACZ,oBAAA,QAAQ,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,uBAAuB,CAAC,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC;gBACzF;YACF;YAEA,OAAO;gBACL,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,OAAO;gBACP,UAAU,EAAE,OAAO,GAAG,CAAC;gBACvB;aACD;QACH;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,KAAK,CAAC,oCAAoC,EAAE,KAAK,CAAC;YAC1D,OAAO;gBACL,OAAO,EAAE,MAAM,CAAC,OAAO;AACvB,gBAAA,OAAO,EAAE,CAAC;AACV,gBAAA,UAAU,EAAE,KAAK;AACjB,gBAAA,QAAQ,EAAE;aACX;QACH;IACF;IAEA,MAAM,kBAAkB,CAAC,MAOxB,EAAA;QAEC,MAAM,CAAC,GAAG,GAAGA,4BAAqB,CAAC,MAAM,CAAC,GAAG,CAAC;AAC9C,QAAA,IAAI;AAEA,YAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC;YACzE,MAAM,MAAM,GAAmB,EAAE;YAEnC,IAAI,CAAC,gBAAgB,CAAC,cAAc,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE;AACnE,gBAAA,OAAO,CAAC,IAAI,CAAC,wEAAwE,CAAC;gBACtF,OAAO;oBACL,cAAc,EAAE,MAAM,CAAC,cAAc;oBACrC,eAAe,EAAE,MAAM,CAAC,eAAe;AACvC,oBAAA,YAAY,EAAE,CAAC;AACf,oBAAA,eAAe,EAAE,CAAC;AAClB,oBAAA,MAAM,EAAE,EAAE;AACV,oBAAA,IAAI,EAAE;iBACP;YACH;AAAO,iBAAA,IAAI,gBAAgB,CAAC,SAAS,EAAE;AAErC,gBAAA,MAAM,iBAAiB,GAAG,MAAM,CAAC,QAAQ,IAAI,EAAE;AAE/C,gBAAA,IAAG,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAC;AAC5B,oBAAA,KAAK,MAAM,OAAO,IAAI,iBAAiB,EAAE;AACrC,wBAAA,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC;4BACnD,cAAc,EAAE,MAAM,CAAC,cAAc;4BACnC,eAAe,EAAE,MAAM,CAAC,eAAe;4BACvC,GAAG,EAAE,MAAM,CAAC,GAAG;4BACf,OAAO;4BACP,OAAO,EAAE,MAAM,CAAC;AACnB,yBAAA,CAAC;AACF,wBAAA,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC;oBAC7B;gBACJ;AACA,gBAAA,OAAO,CAAC,GAAG,CAAC,yBAAyB,EAAE,MAAM,CAAC;;;AAI9C,gBAAA,OAAO,CAAC,IAAI,CAAC,6EAA6E,CAAC;gBAC3F,OAAO;oBACL,cAAc,EAAE,MAAM,CAAC,cAAc;oBACrC,eAAe,EAAE,MAAM,CAAC,eAAe;AACvC,oBAAA,YAAY,EAAE,CAAC;AACf,oBAAA,eAAe,EAAE,CAAC;AAClB,oBAAA,MAAM,EAAE,MAAM;AACd,oBAAA,IAAI,EAAE;iBACP;YACL;;AAKE,YAAA,IAAI,gBAAgB,CAAC,QAAQ,EAAE;;gBAE7B,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC;oBACrD,cAAc,EAAE,MAAM,CAAC,cAAc;oBACrC,eAAe,EAAE,MAAM,CAAC,eAAe;oBACvC,GAAG,EAAE,MAAM,CAAC,GAAG;oBACf,OAAO,EAAE,IAAI;oBACb,OAAO,EAAE,MAAM,CAAC;AACjB,iBAAA,CAAC;gBAEF,OAAO,CAAC,GAAG,CAAC,CAAA,yBAAA,EAA4B,MAAM,CAAC,cAAc,CAAA,CAAA,CAAG,EAAE,WAAW,CAAC;AAE9E,gBAAA,IAAI,WAAW,KAAK,CAAC,EAAE;oBACrB,OAAO;wBACL,cAAc,EAAE,MAAM,CAAC,cAAc;wBACrC,eAAe,EAAE,MAAM,CAAC,eAAe;AACvC,wBAAA,YAAY,EAAE,CAAC;AACf,wBAAA,eAAe,EAAE,CAAC;AAClB,wBAAA,MAAM,EAAE;qBACT;gBACH;;AAGA,gBAAA,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,WAAW;gBACjD,MAAM,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,WAAW,CAAC;AAEzD,gBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,gBAAgB,EAAE,CAAC,EAAE,EAAE;AACzC,oBAAA,IAAI;wBACF,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,sBAAsB,CAAC;4BACxD,eAAe,EAAE,MAAM,CAAC,eAAe;4BACvC,GAAG,EAAE,MAAM,CAAC,GAAG;4BACf,cAAc,EAAE,MAAM,CAAC,cAAc;AACrC,4BAAA,UAAU,EAAE,CAAC;4BACb,OAAO,EAAE,MAAM,CAAC;AACjB,yBAAA,CAAC;AAEF,wBAAA,MAAM,iBAAiB,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC;4BACxD,cAAc,EAAE,MAAM,CAAC,cAAc;4BACrC,eAAe,EAAE,MAAM,CAAC,eAAe;4BACvC,GAAG,EAAE,MAAM,CAAC,GAAG;4BACf,OAAO;4BACP,OAAO,EAAE,MAAM,CAAC;AACjB,yBAAA,CAAC;AAEF,wBAAA,IAAI,iBAAiB,CAAC,UAAU,EAAE;AAChC,4BAAA,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC;wBAChC;oBACF;oBAAE,OAAO,KAAK,EAAE;wBACd,OAAO,CAAC,IAAI,CAAC,CAAA,wCAAA,EAA2C,CAAC,CAAA,CAAA,CAAG,EAAE,KAAK,CAAC;wBACpE;oBACF;gBACF;YACF;iBAAO;;gBAEL,OAAO;oBACL,cAAc,EAAE,MAAM,CAAC,cAAc;oBACrC,eAAe,EAAE,MAAM,CAAC,eAAe;AACvC,oBAAA,YAAY,EAAE,CAAC;AACf,oBAAA,eAAe,EAAE,CAAC;AAClB,oBAAA,MAAM,EAAE,EAAE;AACV,oBAAA,IAAI,EAAE;iBACP;YACH;;YAGA,IAAI,YAAY,GAAG,CAAC;AACpB,YAAA,IAAI,gBAAgB,CAAC,QAAQ,EAAE;;AAE7B,gBAAA,YAAY,GAAG,MAAM,CAAC,MAAM;YAC9B;iBAAO;;gBAEL,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,KAAK,GAAG,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YACtE;YAEA,OAAO;gBACL,cAAc,EAAE,MAAM,CAAC,cAAc;gBACrC,eAAe,EAAE,MAAM,CAAC,eAAe;gBACvC,YAAY;gBACZ,eAAe,EAAE,MAAM,CAAC,MAAM;gBAC9B;aACD;QACH;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,KAAK,CAAC;YACvD,OAAO;gBACL,cAAc,EAAE,MAAM,CAAC,cAAc;gBACrC,eAAe,EAAE,MAAM,CAAC,eAAe;AACvC,gBAAA,YAAY,EAAE,CAAC;AACf,gBAAA,eAAe,EAAE,CAAC;AAClB,gBAAA,MAAM,EAAE,EAAE;AACV,gBAAA,IAAI,EAAE;aACP;QACH;IACF;IAEA,MAAM,gBAAgB,CAAC,MAKtB,EAAA;QAKC,MAAM,CAAC,GAAG,GAAGA,4BAAqB,CAAC,MAAM,CAAC,GAAG,CAAC;AAC9C,QAAA,IAAI;YACF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;gBAC9C,eAAe,EAAE,MAAM,CAAC,eAAe;gBACvC,GAAG,EAAE,MAAM,CAAC,GAAG;gBACf,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,OAAO,EAAE,MAAM,CAAC;AACjB,aAAA,CAAC;YAEF,IAAI,QAAQ,GAAyB,IAAI;YACzC,IAAI,QAAQ,EAAE;AACZ,gBAAA,QAAQ,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,uBAAuB,CAAC,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC;YACzF;YAEA,OAAO;gBACL,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,QAAQ;gBACR;aACD;QACH;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,KAAK,CAAC;YACrD,OAAO;gBACL,OAAO,EAAE,MAAM,CAAC,OAAO;AACvB,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,QAAQ,EAAE;aACX;QACH;IACF;AACD;;AC9QD;;AAEG;MACU,qBAAqB,CAAA;AAChC,IAAA,WAAA,CAAoB,OAA8B,EAAA;QAA9B,IAAA,CAAA,OAAO,GAAP,OAAO;IAA0B;AAErD,IAAA,MAAM,uBAAuB,CAAC,QAAgB,EAAE,OAAe,EAAA;QAC7D,OAAO,IAAI,CAAC,OAAO,CAAC,uBAAuB,CAAC,QAAQ,EAAE,OAAO,CAAC;IAChE;AAEA,IAAA,MAAM,cAAc,CAAC,GAAW,EAAE,OAAe,EAAA;QAC/C,OAAO,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,GAAG,EAAE,OAAO,CAAC;IAClD;AACD;;ACdD;;AAEG;MACU,qBAAqB,CAAA;AAChC,IAAA,WAAA,GAAA,EAAe;AAEf,IAAA,eAAe,CAAC,GAAc,EAAA;AAU5B,QAAA,GAAG,GAAGA,4BAAqB,CAAC,GAAG,CAAC;AAChC,QAAA,MAAM,OAAO,GAAG,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,GAAG,CAAC,IAAI,IAAK,IAAY,CAAC,IAAI,CAAC;;QAGtG,MAAM,UAAU,GAAG,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;QAC9C,MAAM,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC;QAChD,MAAM,eAAe,GAAG,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC;AACxD,QAAA,MAAM,QAAQ,GAAG,UAAU,IAAI,WAAW,IAAI,eAAe;;QAG7D,MAAM,iBAAiB,GAAG,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC;QAC5D,MAAM,wBAAwB,GAAG,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAC;QAC1E,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;AACtC,QAAA,MAAM,SAAS,GAAG,iBAAiB,IAAI,wBAAwB,IAAI,MAAM;QAEzE,OAAO;AACL,YAAA,cAAc,EAAE,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC;YACnF,UAAU;AACV,YAAA,YAAY,EAAE,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC;YAC3C,WAAW;AACX,YAAA,WAAW,EAAE,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC;AAC7E,YAAA,UAAU,EAAE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;YACvC,QAAQ;YACR;SACD;IACH;AACD;;ACVD;;;;AAIG;MACU,sBAAsB,CAAA;IAKjC,WAAA,CACE,OAA8B,EAC9B,OAA8B,EAAA;;AAgEf,QAAA,IAAA,CAAA,cAAc,GAAmB;AAChD,YAAA,eAAe,EAAE,CAAC,WAAW,MAAM;AACjC,gBAAA,IAAI,EAAE,WAAW,CAAC,IAAI,IAAI,EAAE;AAC5B,gBAAA,WAAW,EAAE,WAAW,CAAC,WAAW,IAAI,EAAE;AAC1C,gBAAA,QAAQ,EAAE,WAAW,CAAC,KAAK,IAAI,EAAE;gBACjC,WAAW,EAAE,WAAW,CAAC,YAAY;gBACrC,YAAY,EAAE,WAAW,CAAC,aAAa;gBACvC,qBAAqB,EAAE,SAAS;AAChC,gBAAA,UAAU,EAAE,WAAW,CAAC,UAAU,IAAI,EAAE;AACxC,gBAAA,GAAG;aACJ,CAAC;AAEF,YAAA,aAAa,EAAE,CAAC,QAAQ,MAAM;gBAC5B,IAAI,EAAE,QAAQ,CAAC,IAAI;gBACnB,WAAW,EAAE,QAAQ,CAAC,WAAW;gBACjC,KAAK,EAAE,QAAQ,CAAC,QAAQ;gBACxB,aAAa,EAAE,QAAQ,CAAC,YAAY;gBACpC,YAAY,EAAE,QAAQ,CAAC,WAAW;gBAClC,UAAU,EAAE,QAAQ,CAAC,UAAU;AAC/B,gBAAA,GAAG,MAAM,CAAC,WAAW,CACnB,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,KACpC,CAAC,CAAC,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,cAAc,EAAE,aAAa,EAAE,YAAY,EAAE,uBAAuB,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CACzH;aAEJ;SACF;;AAtFC,QAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI,qBAAqB,EAAE;QACxD,IAAI,CAAC,qBAAqB,GAAG,IAAI,qBAAqB,CAAC,OAAO,CAAC;AAC/D,QAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI,kBAAkB,CAC9C,OAAO,EACP,IAAI,CAAC,qBAAqB,EAC1B,IAAI,CAAC,qBAAqB,CAC3B;IACH;AAEA;;AAEG;IACH,MAAM,uBAAuB,CAAC,OAA4B,EAAA;AACxD,QAAA,IAAG,CAAC,OAAO,CAAC,OAAO,EAAC;AAChB,YAAA,OAAQ,IAAI,CAAC,kBAAkB,CAAC,eAAe,CAAC;AAC5C,gBAAA,cAAc,EAAE,OAAO,CAAC,cAAc,IAAI,EAAE;gBAC5C,eAAe,EAAE,OAAO,CAAC,eAAe;gBACxC,GAAG,EAAE,OAAO,CAAC,GAAG;AAChB,gBAAA,OAAO,EAAG,EAAE;gBACZ,OAAO,EAAE,OAAO,CAAC;AACpB,aAAA,CAAC;QACN;AAEA,QAAA,OAAO,IAAI,CAAC,kBAAkB,CAAC,oBAAoB,CAAC;AAClD,YAAA,cAAc,EAAE,OAAO,CAAC,cAAc,IAAI,EAAE;YAC5C,eAAe,EAAE,OAAO,CAAC,eAAe;YACxC,GAAG,EAAE,OAAO,CAAC,GAAG;AAChB,YAAA,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,EAAE;YAC9B,OAAO,EAAE,OAAO,CAAC;AAClB,SAAA,CAAC;IACJ;AAEA;;AAEG;IACH,MAAM,gBAAgB,CAAC,OAA4B,EAAA;QACjD,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,gBAAgB,CAAC;YAClE,eAAe,EAAE,OAAO,CAAC,eAAe;YACxC,GAAG,EAAE,OAAO,CAAC,GAAG;AAChB,YAAA,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,EAAE;YAC9B,OAAO,EAAE,OAAO,CAAC;AAClB,SAAA,CAAC;QAEF,OAAO,YAAY,CAAC,QAAQ;IAC9B;AAEA;;AAEG;IACH,MAAM,kBAAkB,CAAC,OAA+B,EAAA;AACtD,QAAA,OAAO,IAAI,CAAC,kBAAkB,CAAC,kBAAkB,CAAC;AAChD,YAAA,cAAc,EAAE,OAAO,CAAC,cAAc,IAAI,EAAE;YAC5C,eAAe,EAAE,OAAO,CAAC,eAAe;YACxC,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,QAAQ,EAAE,OAAO,CAAC;AACnB,SAAA,CAAC;IACJ;AA8BA;;AAEG;AACH,IAAA,MAAM,cAAc,CAAC,GAAW,EAAE,OAAe,EAAA;QAC/C,OAAO,IAAI,CAAC,qBAAqB,CAAC,cAAc,CAAC,GAAG,EAAE,OAAO,CAAC;IAChE;AAEA;;AAEG;AACH,IAAA,MAAM,uBAAuB,CAAC,QAAgB,EAAE,OAAe,EAAA;AAC7D,QAAA,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,uBAAuB,CAAC,QAAQ,EAAE,OAAO,CAAC;AAClG,QAAA,IAAI,CAAC,cAAc;AAAE,YAAA,OAAO,IAAI;;QAGhC,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,cAAc,CAAC;;QAGzE,IAAI,aAAa,CAAC,YAAY,EAAE,UAAU,CAAC,SAAS,CAAC,EAAE;YACrD,OAAO;AACL,gBAAA,GAAG,aAAa;gBAChB,qBAAqB,EAAE,MAAM,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,YAAY,EAAE,OAAO;aACrF;QACH;AAEA,QAAA,OAAO,aAAa;IACtB;AACD;;AC3JD;;;AAGG;MACU,qBAAqB,CAAA;AAEhC,IAAA,WAAA,CAAoB,gBAAkC,EAAA;QAAlC,IAAA,CAAA,gBAAgB,GAAhB,gBAAgB;IAAqB;IAEzD,MAAM,eAAe,CAAC,OAMrB,EAAA;AACC,QAAA,IAAI;AACF,YAAA,IAAG,OAAO,CAAC,OAAO,KAAK,IAAI;gBAAE,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE;AACzE,YAAA,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,0BAA0B,CAAC,OAAO,CAAC,OAAO,CAAC;AAE9F,YAAA,OAAO,CAAC,GAAG,CAAC,2EAA2E,EAAE,cAAc,CAAC;AACxG,YAAA,MAAM,QAAQ,GAAGC,yBAAkB,CAAC,OAAO,CAAC,eAAe,EAAE,OAAO,CAAC,GAAG,EAAE,cAAc,CAAC;AAEzF,YAAA,OAAO,MAAMC,6BAAsB,CAAC,QAAQ,EAAE,OAAO,CAAC,cAAc,EAAE,OAAO,CAAC,OAAO,CAAC;QACxF;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,KAAK,CAAC,mCAAmC,OAAO,CAAC,cAAc,CAAA,KAAA,EAAQ,OAAO,CAAC,eAAe,CAAA,aAAA,EAAgB,OAAO,CAAC,OAAO,qBAAqB,EAAE,KAAK,CAAC;AAClK,YAAA,OAAO,CAAC;QACV;IACF;IAEA,MAAM,WAAW,CAAC,OAKjB,EAAA;AACC,QAAA,IAAI;AACF,YAAA,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,0BAA0B,CAAC,OAAO,CAAC,OAAO,CAAC;AAC9F,YAAA,MAAM,QAAQ,GAAGD,yBAAkB,CAAC,OAAO,CAAC,eAAe,EAAE,OAAO,CAAC,GAAU,EAAE,cAAqB,CAAC;YAEvG,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC;YACvC,MAAM,QAAQ,GAAG,MAAME,kBAAW,CAAC,QAAQ,EAAE,OAAO,CAAC;AAErD,YAAA,OAAO,MAAM,CAAC,QAAQ,CAAC;QACzB;QAAE,OAAO,KAAK,EAAE;YACd,OAAO,CAAC,KAAK,CAAC,CAAA,oCAAA,EAAuC,OAAO,CAAC,OAAO,CAAA,CAAA,CAAG,EAAE,KAAK,CAAC;AAC/E,YAAA,MAAM,KAAK;QACb;IACF;IAEA,MAAM,sBAAsB,CAAC,OAM5B,EAAA;AACC,QAAA,IAAI;AACF,YAAA,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,0BAA0B,CAAC,OAAO,CAAC,OAAO,CAAC;AAC9F,YAAA,MAAM,aAAa,GAAGF,yBAAkB,CAAC,OAAO,CAAC,eAAe,EAAE,OAAO,CAAC,GAAU,EAAE,cAAqB,CAAC;AAE5G,YAAA,MAAM,OAAO,GAAG,MAAMG,6BAAsB,CAAC,aAAa,EAAE,OAAO,CAAC,cAAc,EAAE,OAAO,CAAC,UAAU,CAAC;AAEvG,YAAA,OAAO,MAAM,CAAC,OAAO,CAAC;QACxB;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,KAAK,CAAC,CAAA,6BAAA,EAAgC,OAAO,CAAC,UAAU,CAAA,KAAA,EAAQ,OAAO,CAAC,cAAc,CAAA,CAAA,CAAG,EAAE,KAAK,CAAC;AACzG,YAAA,MAAM,KAAK;QACb;IACF;AACD;;AC3ED;;;AAGG;MACU,qBAAqB,CAAA;AAGhC,IAAA,WAAA,CAAoB,gBAAkC,EAAA;QAAlC,IAAA,CAAA,gBAAgB,GAAhB,gBAAgB;QAFnB,IAAA,CAAA,wBAAwB,GAAG,qBAAqB;IAER;IAEzD,MAAM,oBAAoB,CAAC,OAAe,EAAA;AACxC,QAAA,IAAI;YACF,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,qBAAqB,CAAC,OAAO,CAAC;AAC5E,YAAA,OAAO,SAAS,CAAC,iBAAiB,IAAI,IAAI,CAAC,wBAAwB;QACrE;QAAE,OAAO,KAAK,EAAE;YACd,OAAO,CAAC,IAAI,CAAC,CAAA,qCAAA,EAAwC,OAAO,CAAA,6BAAA,CAA+B,EAAE,KAAK,CAAC;YACnG,OAAO,IAAI,CAAC,wBAAwB;QACtC;IACF;AAEA,IAAA,MAAM,cAAc,CAAC,GAAW,EAAE,OAAe,EAAA;AAC/C,QAAA,IAAI,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE;YAC7B,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC;YACxD,OAAO,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,CAAA,QAAA,EAAW,OAAO,CAAA,MAAA,CAAQ,CAAC;QAC3D;AACA,QAAA,OAAO,GAAG;IACZ;AAEA,IAAA,MAAM,uBAAuB,CAAC,QAAgB,EAAE,OAAe,EAAA;AAC7D,QAAA,IAAI;YACF,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,OAAO,CAAC;AAChE,YAAA,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,WAAW,CAAC;AACzC,YAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE;gBAChB,MAAM,IAAI,KAAK,CAAC,CAAA,oBAAA,EAAuB,QAAQ,CAAC,MAAM,CAAA,CAAE,CAAC;YAC3D;AAEA,YAAA,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE;;YAGtC,OAAO;AACL,gBAAA,IAAI,EAAE,QAAQ,CAAC,IAAI,IAAI,EAAE;AACzB,gBAAA,WAAW,EAAE,QAAQ,CAAC,WAAW,IAAI,EAAE;gBACvC,KAAK,EAAE,QAAQ,CAAC,KAAK,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,EAAE;AAC/E,gBAAA,UAAU,EAAE,QAAQ,CAAC,UAAU,IAAI,EAAE;gBACrC,aAAa,EAAE,QAAQ,CAAC,aAAa,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC,GAAG,SAAS;AAC9G,gBAAA,YAAY,EAAE,QAAQ,CAAC,YAAY,IAAI;aACxC;QACH;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,KAAK,CAAC;AAChD,YAAA,OAAO,IAAI;QACb;IACF;IAEA,MAAM,YAAY,CAAC,GAAW,EAAA;AAC5B,QAAA,IAAI;AACF,YAAA,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC;AAEjC,YAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE;gBAChB,MAAM,IAAI,KAAK,CAAC,CAAA,qBAAA,EAAwB,GAAG,CAAA,EAAA,EAAK,QAAQ,CAAC,UAAU,CAAA,CAAE,CAAC;YACxE;AAEA,YAAA,OAAO,MAAM,QAAQ,CAAC,IAAI,EAAE;QAC9B;QAAE,OAAO,KAAK,EAAE;YACd,OAAO,CAAC,KAAK,CAAC,CAAA,wBAAA,EAA2B,GAAG,CAAA,CAAA,CAAG,EAAE,KAAK,CAAC;AACvD,YAAA,MAAM,KAAK;QACb;IACF;AACD;;AClED;;;;;;;AAOG;SACa,cAAc,CAC5B,SAA2B,EAC3B,OAAe,EACf,IAAsB,EAAA;AAEtB,IAAA,IAAI,SAAS,EAAE,WAAW,EAAE;QAC1B,OAAO,CAAA,EAAG,SAAS,CAAC,WAAW,IAAI,IAAI,CAAA,CAAA,EAAI,OAAO,CAAA,CAAE;IACtD;;AAGA,IAAA,MAAM,OAAO,GAAG,SAAS,EAAE,OAAO;IAClC,IAAI,GAAG,GAAG,EAAE;IACZ,QAAQ,OAAO;AACb,QAAA,KAAK,CAAC;AACJ,YAAA,GAAG,GAAG,CAAA,qBAAA,EAAwB,IAAI,CAAA,CAAA,EAAI,OAAO,EAAE;YAC/C;AACF,QAAA,KAAK,CAAC;AACJ,YAAA,GAAG,GAAG,CAAA,6BAAA,EAAgC,IAAI,CAAA,CAAA,EAAI,OAAO,EAAE;YACvD;AACF,QAAA,KAAK,EAAE;AACL,YAAA,GAAG,GAAG,CAAA,oBAAA,EAAuB,IAAI,CAAA,CAAA,EAAI,OAAO,EAAE;YAC9C;AACF,QAAA,KAAK,EAAE;AACL,YAAA,GAAG,GAAG,CAAA,4BAAA,EAA+B,IAAI,CAAA,CAAA,EAAI,OAAO,EAAE;YACtD;AACF,QAAA,KAAK,GAAG;AACN,YAAA,GAAG,GAAG,CAAA,wCAAA,EAA2C,IAAI,CAAA,CAAA,EAAI,OAAO,EAAE;YAClE;AACF,QAAA,KAAK,KAAK;AACR,YAAA,GAAG,GAAG,CAAA,uCAAA,EAA0C,IAAI,CAAA,CAAA,EAAI,OAAO,EAAE;YACjE;AACF,QAAA,KAAK,KAAK;AACR,YAAA,GAAG,GAAG,CAAA,4BAAA,EAA+B,IAAI,CAAA,CAAA,EAAI,OAAO,EAAE;YACtD;AACF,QAAA;AACE,YAAA,GAAG,GAAG,CAAA,qBAAA,EAAwB,IAAI,CAAA,CAAA,EAAI,OAAO,EAAE;;AAEnD,IAAA,OAAO,GAAG;AACZ;AAEA;;;;;;;;AAQG;AACI,eAAe,uBAAuB,CAC3C,YAA4D,EAC5D,OAAe,EACf,OAAe,EACf,IAAsB,EAAA;AAEtB,IAAA,MAAM,SAAS,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC;IAC7C,OAAO,cAAc,CAAC,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC;AACjD;;ACrDM,SAAU,aAAa,CAC3B,SAAwB,EAAA;;IAGxB,4BAA4B,CAAC,oBAAoB,CAAC;AAElD,IAAA,MAAM,YAAY,GAAGC,4BAAkB,CAAC,SAAS,CAAC;;IAGlD,MAAM,qBAAqB,GAAG,IAAI,qBAAqB,CAAC,YAAY,CAAC,OAAO,CAAC;IAC7E,MAAM,qBAAqB,GAAG,IAAI,qBAAqB,CAAC,YAAY,CAAC,OAAO,CAAC;IAC7E,MAAM,sBAAsB,GAAG,IAAI,sBAAsB,CAAC,qBAAqB,EAAE,qBAAqB,CAAC;;IAGvG,OAAO;QACL,eAAe,EAAE,CAAC,OAA4B,KAC5C,sBAAsB,CAAC,uBAAuB,CAAC,OAAO,CAAC;QAEzD,gBAAgB,EAAE,CAAC,OAA4B,KAC7C,sBAAsB,CAAC,gBAAgB,CAAC,OAAO,CAAC;QAElD,kBAAkB,EAAE,CAAC,OAA4B,KAC/C,sBAAsB,CAAC,kBAAkB,CAAC,OAAO,CAAC;AAEpD,QAAA,cAAc,EAAE,CAAC,GAAW,EAAE,OAAe,KAC3C,sBAAsB,CAAC,cAAc,CAAC,GAAG,EAAE,OAAO,CAAC;AAErD,QAAA,uBAAuB,EAAE,CAAC,QAAgB,EAAE,OAAe,KACzD,sBAAsB,CAAC,uBAAuB,CAAC,QAAQ,EAAE,OAAO,CAAC;AAEnE,QAAA,kBAAkB,EAAE;KACrB;AACH;;;;;;;;;;;;"}
|