@nativescript-community/sqlite 3.4.1 → 3.4.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.
@@ -0,0 +1,487 @@
1
+ /* eslint-disable @typescript-eslint/unified-signatures */
2
+
3
+ declare const enum FMDBCheckpointMode {
4
+
5
+ Passive = 0,
6
+
7
+ Full = 1,
8
+
9
+ Restart = 2,
10
+
11
+ Truncate = 3
12
+ }
13
+
14
+ declare let FMDBVersionNumber: number;
15
+
16
+ declare let FMDBVersionNumberVar: number;
17
+
18
+ declare let FMDBVersionString: interop.Reference<number>;
19
+
20
+ declare let FMDBVersionStringVar: interop.Reference<number>;
21
+
22
+ declare class FMDatabase extends NSObject {
23
+
24
+ static FMDBUserVersion(): string;
25
+
26
+ static FMDBVersion(): number;
27
+
28
+ static alloc(): FMDatabase; // inherited from NSObject
29
+
30
+ static databaseWithPath(inPath: string): FMDatabase;
31
+
32
+ static databaseWithURL(url: NSURL): FMDatabase;
33
+
34
+ static isSQLiteThreadSafe(): boolean;
35
+
36
+ static new(): FMDatabase; // inherited from NSObject
37
+
38
+ static sqliteLibVersion(): string;
39
+
40
+ static storeableDateFormat(format: string): NSDateFormatter;
41
+
42
+ applicationID: number;
43
+
44
+ cachedStatements: NSMutableDictionary<any, any>;
45
+
46
+ readonly changes: number;
47
+
48
+ checkedOut: boolean;
49
+
50
+ crashOnErrors: boolean;
51
+
52
+ readonly databasePath: string;
53
+
54
+ readonly databaseURL: NSURL;
55
+
56
+ readonly goodConnection: boolean;
57
+
58
+ readonly hasOpenResultSets: boolean;
59
+
60
+ readonly isInTransaction: boolean;
61
+
62
+ isOpen: boolean;
63
+
64
+ readonly lastInsertRowId: number;
65
+
66
+ logsErrors: boolean;
67
+
68
+ maxBusyRetryTimeInterval: number;
69
+
70
+ shouldCacheStatements: boolean;
71
+
72
+ readonly sqliteHandle: interop.Pointer | interop.Reference<any>;
73
+
74
+ traceExecution: boolean;
75
+
76
+ userVersion: number;
77
+
78
+ constructor(o: { path: string });
79
+
80
+ constructor(o: { URL: NSURL });
81
+
82
+ beginDeferredTransaction(): boolean;
83
+
84
+ beginExclusiveTransaction(): boolean;
85
+
86
+ beginImmediateTransaction(): boolean;
87
+
88
+ beginTransaction(): boolean;
89
+
90
+ checkpointError(checkpointMode: FMDBCheckpointMode): boolean;
91
+
92
+ checkpointNameError(checkpointMode: FMDBCheckpointMode, name: string): boolean;
93
+
94
+ checkpointNameLogFrameCountCheckpointCountError(checkpointMode: FMDBCheckpointMode, name: string, logFrameCount: interop.Pointer | interop.Reference<number>, checkpointCount: interop.Pointer | interop.Reference<number>): boolean;
95
+
96
+ clearCachedStatements(): void;
97
+
98
+ close(): boolean;
99
+
100
+ closeOpenResultSets(): void;
101
+
102
+ columnExistsColumnName(tableName: string, columnName: string): boolean;
103
+
104
+ columnExistsInTableWithName(columnName: string, tableName: string): boolean;
105
+
106
+ commit(): boolean;
107
+
108
+ dateFromString(s: string): Date;
109
+
110
+ executeQueryValuesError(sql: string, values: NSArray<any> | any[]): FMResultSet;
111
+
112
+ executeQueryWithArgumentsInArray(sql: string, _arguments: NSArray<any> | any[]): FMResultSet;
113
+
114
+ executeQueryWithParameterDictionary(sql: string, _arguments: NSDictionary<any, any>): FMResultSet;
115
+
116
+ executeStatements(sql: string): boolean;
117
+
118
+ executeStatementsWithResultBlock(sql: string, block: (p1: NSDictionary<any, any>) => number): boolean;
119
+
120
+ executeUpdateValuesError(sql: string, values: NSArray<any> | any[]): boolean;
121
+
122
+ executeUpdateWithArgumentsInArray(sql: string, _arguments: NSArray<any> | any[]): boolean;
123
+
124
+ executeUpdateWithParameterDictionary(sql: string, _arguments: NSDictionary<any, any>): boolean;
125
+
126
+ getSchema(): FMResultSet;
127
+
128
+ getTableSchema(tableName: string): FMResultSet;
129
+
130
+ hadError(): boolean;
131
+
132
+ hasDateFormatter(): boolean;
133
+
134
+ inSavePoint(block: (p1: interop.Pointer | interop.Reference<boolean>) => void): NSError;
135
+
136
+ inTransaction(): boolean;
137
+
138
+ initWithPath(path: string): this;
139
+
140
+ initWithURL(url: NSURL): this;
141
+
142
+ interrupt(): boolean;
143
+
144
+ lastError(): NSError;
145
+
146
+ lastErrorCode(): number;
147
+
148
+ lastErrorMessage(): string;
149
+
150
+ lastExtendedErrorCode(): number;
151
+
152
+ makeFunctionNamedArgumentsBlock(name: string, _arguments: number, block: (p1: interop.Pointer | interop.Reference<any>, p2: number, p3: interop.Pointer | interop.Reference<interop.Pointer | interop.Reference<any>>) => void): void;
153
+
154
+ makeFunctionNamedMaximumArgumentsWithBlock(name: string, count: number, block: (p1: interop.Pointer | interop.Reference<any>, p2: number, p3: interop.Pointer | interop.Reference<interop.Pointer | interop.Reference<any>>) => void): void;
155
+
156
+ open(): boolean;
157
+
158
+ openWithFlags(flags: number): boolean;
159
+
160
+ openWithFlagsVfs(flags: number, vfsName: string): boolean;
161
+
162
+ rekey(key: string): boolean;
163
+
164
+ rekeyWithData(keyData: NSData): boolean;
165
+
166
+ releaseSavePointWithNameError(name: string): boolean;
167
+
168
+ resultDataContext(data: NSData, context: interop.Pointer | interop.Reference<any>): void;
169
+
170
+ resultDoubleContext(value: number, context: interop.Pointer | interop.Reference<any>): void;
171
+
172
+ resultErrorCodeContext(errorCode: number, context: interop.Pointer | interop.Reference<any>): void;
173
+
174
+ resultErrorContext(error: string, context: interop.Pointer | interop.Reference<any>): void;
175
+
176
+ resultErrorNoMemoryInContext(context: interop.Pointer | interop.Reference<any>): void;
177
+
178
+ resultErrorTooBigInContext(context: interop.Pointer | interop.Reference<any>): void;
179
+
180
+ resultIntContext(value: number, context: interop.Pointer | interop.Reference<any>): void;
181
+
182
+ resultLongContext(value: number, context: interop.Pointer | interop.Reference<any>): void;
183
+
184
+ resultNullInContext(context: interop.Pointer | interop.Reference<any>): void;
185
+
186
+ resultStringContext(value: string, context: interop.Pointer | interop.Reference<any>): void;
187
+
188
+ rollback(): boolean;
189
+
190
+ rollbackToSavePointWithNameError(name: string): boolean;
191
+
192
+ setDateFormat(format: NSDateFormatter): void;
193
+
194
+ setKey(key: string): boolean;
195
+
196
+ setKeyWithData(keyData: NSData): boolean;
197
+
198
+ startSavePointWithNameError(name: string): boolean;
199
+
200
+ stringFromDate(date: Date): string;
201
+
202
+ tableExists(tableName: string): boolean;
203
+
204
+ validateSQLError(sql: string): boolean;
205
+
206
+ valueData(value: interop.Pointer | interop.Reference<any>): NSData;
207
+
208
+ valueDouble(value: interop.Pointer | interop.Reference<any>): number;
209
+
210
+ valueInt(value: interop.Pointer | interop.Reference<any>): number;
211
+
212
+ valueLong(value: interop.Pointer | interop.Reference<any>): number;
213
+
214
+ valueString(value: interop.Pointer | interop.Reference<any>): string;
215
+
216
+ valueType(argv: interop.Pointer | interop.Reference<any>): SqliteValueType;
217
+ }
218
+
219
+ declare class FMDatabasePool extends NSObject {
220
+
221
+ static alloc(): FMDatabasePool; // inherited from NSObject
222
+
223
+ static databaseClass(): typeof NSObject;
224
+
225
+ static databasePoolWithPath(aPath: string): FMDatabasePool;
226
+
227
+ static databasePoolWithPathFlags(aPath: string, openFlags: number): FMDatabasePool;
228
+
229
+ static databasePoolWithURL(url: NSURL): FMDatabasePool;
230
+
231
+ static databasePoolWithURLFlags(url: NSURL, openFlags: number): FMDatabasePool;
232
+
233
+ static new(): FMDatabasePool; // inherited from NSObject
234
+
235
+ readonly countOfCheckedInDatabases: number;
236
+
237
+ readonly countOfCheckedOutDatabases: number;
238
+
239
+ readonly countOfOpenDatabases: number;
240
+
241
+ delegate: any;
242
+
243
+ maximumNumberOfDatabasesToCreate: number;
244
+
245
+ readonly openFlags: number;
246
+
247
+ path: string;
248
+
249
+ vfsName: string;
250
+
251
+ constructor(o: { path: string });
252
+
253
+ constructor(o: { path: string; flags: number });
254
+
255
+ constructor(o: { path: string; flags: number; vfs: string });
256
+
257
+ constructor(o: { URL: NSURL });
258
+
259
+ constructor(o: { URL: NSURL; flags: number });
260
+
261
+ constructor(o: { URL: NSURL; flags: number; vfs: string });
262
+
263
+ inDatabase(block: (p1: FMDatabase) => void): void;
264
+
265
+ inDeferredTransaction(block: (p1: FMDatabase, p2: interop.Pointer | interop.Reference<boolean>) => void): void;
266
+
267
+ inExclusiveTransaction(block: (p1: FMDatabase, p2: interop.Pointer | interop.Reference<boolean>) => void): void;
268
+
269
+ inImmediateTransaction(block: (p1: FMDatabase, p2: interop.Pointer | interop.Reference<boolean>) => void): void;
270
+
271
+ inSavePoint(block: (p1: FMDatabase, p2: interop.Pointer | interop.Reference<boolean>) => void): NSError;
272
+
273
+ inTransaction(block: (p1: FMDatabase, p2: interop.Pointer | interop.Reference<boolean>) => void): void;
274
+
275
+ initWithPath(aPath: string): this;
276
+
277
+ initWithPathFlags(aPath: string, openFlags: number): this;
278
+
279
+ initWithPathFlagsVfs(aPath: string, openFlags: number, vfsName: string): this;
280
+
281
+ initWithURL(url: NSURL): this;
282
+
283
+ initWithURLFlags(url: NSURL, openFlags: number): this;
284
+
285
+ initWithURLFlagsVfs(url: NSURL, openFlags: number, vfsName: string): this;
286
+
287
+ releaseAllDatabases(): void;
288
+ }
289
+
290
+ declare class FMDatabaseQueue extends NSObject {
291
+
292
+ static alloc(): FMDatabaseQueue; // inherited from NSObject
293
+
294
+ static databaseClass(): typeof NSObject;
295
+
296
+ static databaseQueueWithPath(aPath: string): FMDatabaseQueue;
297
+
298
+ static databaseQueueWithPathFlags(aPath: string, openFlags: number): FMDatabaseQueue;
299
+
300
+ static databaseQueueWithURL(url: NSURL): FMDatabaseQueue;
301
+
302
+ static databaseQueueWithURLFlags(url: NSURL, openFlags: number): FMDatabaseQueue;
303
+
304
+ static new(): FMDatabaseQueue; // inherited from NSObject
305
+
306
+ readonly openFlags: number;
307
+
308
+ path: string;
309
+
310
+ vfsName: string;
311
+
312
+ constructor(o: { path: string });
313
+
314
+ constructor(o: { path: string; flags: number });
315
+
316
+ constructor(o: { path: string; flags: number; vfs: string });
317
+
318
+ constructor(o: { URL: NSURL });
319
+
320
+ constructor(o: { URL: NSURL; flags: number });
321
+
322
+ constructor(o: { URL: NSURL; flags: number; vfs: string });
323
+
324
+ checkpointError(checkpointMode: FMDBCheckpointMode): boolean;
325
+
326
+ checkpointNameError(checkpointMode: FMDBCheckpointMode, name: string): boolean;
327
+
328
+ checkpointNameLogFrameCountCheckpointCountError(checkpointMode: FMDBCheckpointMode, name: string, logFrameCount: interop.Pointer | interop.Reference<number>, checkpointCount: interop.Pointer | interop.Reference<number>): boolean;
329
+
330
+ close(): void;
331
+
332
+ inDatabase(block: (p1: FMDatabase) => void): void;
333
+
334
+ inDeferredTransaction(block: (p1: FMDatabase, p2: interop.Pointer | interop.Reference<boolean>) => void): void;
335
+
336
+ inExclusiveTransaction(block: (p1: FMDatabase, p2: interop.Pointer | interop.Reference<boolean>) => void): void;
337
+
338
+ inImmediateTransaction(block: (p1: FMDatabase, p2: interop.Pointer | interop.Reference<boolean>) => void): void;
339
+
340
+ inSavePoint(block: (p1: FMDatabase, p2: interop.Pointer | interop.Reference<boolean>) => void): NSError;
341
+
342
+ inTransaction(block: (p1: FMDatabase, p2: interop.Pointer | interop.Reference<boolean>) => void): void;
343
+
344
+ initWithPath(aPath: string): this;
345
+
346
+ initWithPathFlags(aPath: string, openFlags: number): this;
347
+
348
+ initWithPathFlagsVfs(aPath: string, openFlags: number, vfsName: string): this;
349
+
350
+ initWithURL(url: NSURL): this;
351
+
352
+ initWithURLFlags(url: NSURL, openFlags: number): this;
353
+
354
+ initWithURLFlagsVfs(url: NSURL, openFlags: number, vfsName: string): this;
355
+
356
+ interrupt(): void;
357
+ }
358
+
359
+ declare class FMResultSet extends NSObject {
360
+
361
+ static alloc(): FMResultSet; // inherited from NSObject
362
+
363
+ static new(): FMResultSet; // inherited from NSObject
364
+
365
+ static resultSetWithStatementUsingParentDatabase(statement: FMStatement, aDB: FMDatabase): FMResultSet;
366
+
367
+ readonly columnCount: number;
368
+
369
+ readonly columnNameToIndexMap: NSMutableDictionary<any, any>;
370
+
371
+ parentDB: FMDatabase;
372
+
373
+ query: string;
374
+
375
+ readonly resultDictionary: NSDictionary<any, any>;
376
+
377
+ statement: FMStatement;
378
+ [index: number]: any;
379
+
380
+ UTF8StringForColumn(columnName: string): string;
381
+
382
+ UTF8StringForColumnIndex(columnIdx: number): string;
383
+
384
+ UTF8StringForColumnName(columnName: string): string;
385
+
386
+ boolForColumn(columnName: string): boolean;
387
+
388
+ boolForColumnIndex(columnIdx: number): boolean;
389
+
390
+ close(): void;
391
+
392
+ columnIndexForName(columnName: string): number;
393
+
394
+ columnIndexIsNull(columnIdx: number): boolean;
395
+
396
+ columnIsNull(columnName: string): boolean;
397
+
398
+ columnNameForIndex(columnIdx: number): string;
399
+
400
+ dataForColumn(columnName: string): NSData;
401
+
402
+ dataForColumnIndex(columnIdx: number): NSData;
403
+
404
+ dataNoCopyForColumn(columnName: string): NSData;
405
+
406
+ dataNoCopyForColumnIndex(columnIdx: number): NSData;
407
+
408
+ dateForColumn(columnName: string): Date;
409
+
410
+ dateForColumnIndex(columnIdx: number): Date;
411
+
412
+ doubleForColumn(columnName: string): number;
413
+
414
+ doubleForColumnIndex(columnIdx: number): number;
415
+
416
+ hasAnotherRow(): boolean;
417
+
418
+ intForColumn(columnName: string): number;
419
+
420
+ intForColumnIndex(columnIdx: number): number;
421
+
422
+ kvcMagic(object: any): void;
423
+
424
+ longForColumn(columnName: string): number;
425
+
426
+ longForColumnIndex(columnIdx: number): number;
427
+
428
+ longLongIntForColumn(columnName: string): number;
429
+
430
+ longLongIntForColumnIndex(columnIdx: number): number;
431
+
432
+ next(): boolean;
433
+
434
+ nextWithError(): boolean;
435
+
436
+ objectAtIndexedSubscript(columnIdx: number): any;
437
+
438
+ objectForColumn(columnName: string): any;
439
+
440
+ objectForColumnIndex(columnIdx: number): any;
441
+
442
+ objectForColumnName(columnName: string): any;
443
+
444
+ objectForKeyedSubscript(columnName: string): any;
445
+
446
+ resultDict(): NSDictionary<any, any>;
447
+
448
+ stringForColumn(columnName: string): string;
449
+
450
+ stringForColumnIndex(columnIdx: number): string;
451
+
452
+ unsignedLongLongIntForColumn(columnName: string): number;
453
+
454
+ unsignedLongLongIntForColumnIndex(columnIdx: number): number;
455
+ }
456
+
457
+ declare class FMStatement extends NSObject {
458
+
459
+ static alloc(): FMStatement; // inherited from NSObject
460
+
461
+ static new(): FMStatement; // inherited from NSObject
462
+
463
+ inUse: boolean;
464
+
465
+ query: string;
466
+
467
+ statement: interop.Pointer | interop.Reference<any>;
468
+
469
+ useCount: number;
470
+
471
+ close(): void;
472
+
473
+ reset(): void;
474
+ }
475
+
476
+ declare const enum SqliteValueType {
477
+
478
+ Integer = 1,
479
+
480
+ Float = 2,
481
+
482
+ Text = 3,
483
+
484
+ Blob = 4,
485
+
486
+ Null = 5
487
+ }
package/worker.js CHANGED
@@ -1,10 +1,26 @@
1
1
  const context = self;
2
2
  import { SQLiteDatabaseBase } from './sqlitedatabase';
3
+ // function nativeArray(array) {
4
+ // if (global.isAndroid) {
5
+ // const nArray = Array.create(java.lang.Object, array.length);
6
+ // for (let index = 0; index < array.length; index++) {
7
+ // nArray[index] = array[index];
8
+ // }
9
+ // return nArray;
10
+ // }
11
+ // return array;
12
+ // }
13
+ // export default class DBWorker {
14
+ // processing = false;
15
+ // }
16
+ // const worker = new DBWorker();
3
17
  const fakeDatabase = new SQLiteDatabaseBase(null);
4
18
  context.onmessage = (async (event) => {
5
19
  const data = event.data;
6
20
  switch (data.type) {
7
21
  case 'terminate':
22
+ // worker.log('terminating worker');
23
+ // worker.stop();
8
24
  context.close();
9
25
  break;
10
26
  case 'call':
@@ -19,17 +35,30 @@ context.onmessage = (async (event) => {
19
35
  }
20
36
  try {
21
37
  const result = await fakeDatabase[call].apply(fakeDatabase, args);
38
+ // console.log('Worker.onmessage done ', id, call, !!result);
22
39
  global.postMessage({
23
40
  id,
24
- result,
41
+ result
25
42
  });
26
43
  }
27
44
  catch (err) {
28
45
  global.postMessage(Object.assign(data, {
29
46
  id,
30
- error: err.toString(),
47
+ error: err.toString()
31
48
  }));
49
+ // console.log('error in worker', err.toString());
32
50
  }
51
+ // if (worker.processing) {
52
+ // console.log('ignoring processing');
53
+ // (global as any).postMessage(
54
+ // Object.assign(data, {
55
+ // type: 'error',
56
+ // id,
57
+ // error: 'processing',
58
+ // })
59
+ // );
60
+ // return;
61
+ // }
33
62
  break;
34
63
  }
35
64
  });
package/worker.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"worker.js","sourceRoot":"","sources":["../src/worker.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,GAAW,IAAW,CAAC;AACpC,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAgBtD,MAAM,YAAY,GAAG,IAAI,kBAAkB,CAAC,IAAI,CAAC,CAAC;AAClD,OAAO,CAAC,SAAS,GAAG,CAAC,KAAK,EAAE,KAAe,EAAE,EAAE;IAC3C,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;IACxB,QAAQ,IAAI,CAAC,IAAI,EAAE;QACf,KAAK,WAAW;YAGX,OAAe,CAAC,KAAK,EAAE,CAAC;YACzB,MAAM;QACV,KAAK,MAAM;YACP,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;YACnB,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC;YAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;YACvB,MAAM,EAAE,GAAI,GAAW,CAAC,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YAC1E,YAAY,CAAC,EAAE,GAAG,EAAE,CAAC;YACrB,YAAY,CAAC,SAAS,GAAG,KAAK,CAAC;YAC/B,IAAI,IAAI,CAAC,SAAS,EAAE;gBAChB,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;aAE/C;YACD,IAAI;gBACA,MAAM,MAAM,GAAE,MAAO,YAAY,CAAC,IAAI,CAAc,CAAC,KAAK,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;gBAE9E,MAAc,CAAC,WAAW,CACvB;oBACI,EAAE;oBACF,MAAM;iBACT,CACJ,CAAC;aACL;YAAC,OAAO,GAAG,EAAE;gBACT,MAAc,CAAC,WAAW,CACvB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE;oBAChB,EAAE;oBACF,KAAK,EAAE,GAAG,CAAC,QAAQ,EAAE;iBACxB,CAAC,CACL,CAAC;aAEL;YAcD,MAAM;KACb;AACL,CAAC,CAAQ,CAAC"}
1
+ {"version":3,"file":"worker.js","sourceRoot":"../src/","sources":["worker.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,GAAW,IAAW,CAAC;AACpC,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAEtD,gCAAgC;AAChC,8BAA8B;AAC9B,uEAAuE;AACvE,+DAA+D;AAC/D,4CAA4C;AAC5C,YAAY;AACZ,yBAAyB;AACzB,QAAQ;AACR,oBAAoB;AACpB,IAAI;AACJ,kCAAkC;AAClC,0BAA0B;AAC1B,IAAI;AACJ,iCAAiC;AACjC,MAAM,YAAY,GAAG,IAAI,kBAAkB,CAAC,IAAI,CAAC,CAAC;AAClD,OAAO,CAAC,SAAS,GAAG,CAAC,KAAK,EAAE,KAAiB,EAAE,EAAE;IAC7C,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;IACxB,QAAQ,IAAI,CAAC,IAAI,EAAE;QACf,KAAK,WAAW;YACZ,oCAAoC;YACpC,iBAAiB;YAChB,OAAe,CAAC,KAAK,EAAE,CAAC;YACzB,MAAM;QACV,KAAK,MAAM;YACP,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;YACnB,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC;YAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;YACvB,MAAM,EAAE,GAAI,GAAW,CAAC,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YAC1E,YAAY,CAAC,EAAE,GAAG,EAAE,CAAC;YACrB,YAAY,CAAC,SAAS,GAAG,KAAK,CAAC;YAC/B,IAAI,IAAI,CAAC,SAAS,EAAE;gBAChB,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;aAC/C;YACD,IAAI;gBACA,MAAM,MAAM,GAAG,MAAO,YAAY,CAAC,IAAI,CAAc,CAAC,KAAK,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;gBAChF,6DAA6D;gBAC5D,MAAc,CAAC,WAAW,CAAC;oBACxB,EAAE;oBACF,MAAM;iBACT,CAAC,CAAC;aACN;YAAC,OAAO,GAAG,EAAE;gBACT,MAAc,CAAC,WAAW,CACvB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE;oBAChB,EAAE;oBACF,KAAK,EAAE,GAAG,CAAC,QAAQ,EAAE;iBACxB,CAAC,CACL,CAAC;gBACF,kDAAkD;aACrD;YAED,2BAA2B;YAC3B,0CAA0C;YAC1C,mCAAmC;YACnC,gCAAgC;YAChC,6BAA6B;YAC7B,kBAAkB;YAClB,mCAAmC;YACnC,aAAa;YACb,SAAS;YACT,cAAc;YACd,IAAI;YAEJ,MAAM;KACb;AACL,CAAC,CAAQ,CAAC"}