@dynamic-labs-wallet/svm 0.0.74 → 0.0.75-preview.1

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/index.cjs.js CHANGED
@@ -15,11 +15,6 @@ function _extends() {
15
15
  return _extends.apply(this, arguments);
16
16
  }
17
17
 
18
- const addSignatureToTransaction = ({ transaction, signature, signerPublicKey })=>{
19
- transaction.addSignature(signerPublicKey, Buffer.from(signature));
20
- return transaction;
21
- };
22
-
23
18
  const ERROR_CREATE_WALLET_ACCOUNT = 'Error creating svm wallet account';
24
19
 
25
20
  class DynamicSvmWalletClient extends browser.DynamicWalletClient {
@@ -52,8 +47,6 @@ class DynamicSvmWalletClient extends browser.DynamicWalletClient {
52
47
  }
53
48
  const { accountAddress } = await this.deriveAccountAddress(rawPublicKey);
54
49
  // Update client key shares in wallet map
55
- // warning: this might result in race condition if `onCeremonyComplete` executes at the same time
56
- // TODO: remove this once iframe handling for secret shares is implemented
57
50
  await this.setClientKeySharesToLocalStorage({
58
51
  accountAddress,
59
52
  clientKeyShares,
@@ -67,8 +60,7 @@ class DynamicSvmWalletClient extends browser.DynamicWalletClient {
67
60
  });
68
61
  return {
69
62
  accountAddress,
70
- rawPublicKey: rawPublicKey,
71
- clientKeyShares
63
+ rawPublicKey
72
64
  };
73
65
  } catch (error) {
74
66
  this.logger.error(ERROR_CREATE_WALLET_ACCOUNT, error);
@@ -118,18 +110,8 @@ class DynamicSvmWalletClient extends browser.DynamicWalletClient {
118
110
  walletOperation: browser.WalletOperation.SIGN_TRANSACTION
119
111
  });
120
112
  try {
121
- let messageToSign;
122
- if (transaction instanceof web3_js.VersionedTransaction) {
123
- // For versioned transactions, we need to sign the message directly
124
- const messageBytes = transaction.message.serialize();
125
- messageToSign = Buffer.from(messageBytes).toString('hex');
126
- } else {
127
- // For legacy transactions, serialize the message
128
- const messageBytes = transaction.serializeMessage();
129
- messageToSign = Buffer.from(messageBytes).toString('hex');
130
- }
131
113
  const signatureEd25519 = await this.sign({
132
- message: messageToSign,
114
+ message: transaction,
133
115
  accountAddress: senderAddress,
134
116
  chainName: this.chainName,
135
117
  password
@@ -137,13 +119,7 @@ class DynamicSvmWalletClient extends browser.DynamicWalletClient {
137
119
  if (!signatureEd25519) {
138
120
  throw new Error('Signature is undefined');
139
121
  }
140
- const senderPublicKey = new web3_js.PublicKey(senderAddress);
141
- const signedTransaction = addSignatureToTransaction({
142
- transaction,
143
- signature: signatureEd25519,
144
- signerPublicKey: senderPublicKey
145
- });
146
- return signedTransaction;
122
+ return Buffer.from(signatureEd25519).toString('hex');
147
123
  } catch (error) {
148
124
  this.logger.error('Error in signTransaction:', error);
149
125
  if (error instanceof Error) {
@@ -158,8 +134,7 @@ class DynamicSvmWalletClient extends browser.DynamicWalletClient {
158
134
  * @param accountAddress The account address to export the private key for
159
135
  * @param password The password for encrypted backup shares
160
136
  * @returns The private key
161
- */ async exportPrivateKey({ accountAddress, displayContainer, password = undefined }) {
162
- var _derivedPrivateKey_match;
137
+ */ async exportPrivateKey({ accountAddress, password = undefined }) {
163
138
  await this.verifyPassword({
164
139
  accountAddress,
165
140
  password,
@@ -174,12 +149,8 @@ class DynamicSvmWalletClient extends browser.DynamicWalletClient {
174
149
  throw new Error('Derived private key is undefined');
175
150
  }
176
151
  // Convert hex string to Uint8Array
177
- const privateKeyBytes = new Uint8Array(((_derivedPrivateKey_match = derivedPrivateKey.match(/.{1,2}/g)) == null ? void 0 : _derivedPrivateKey_match.map((byte)=>parseInt(byte, 16))) || []);
178
- // Display the private key in the container via iframe
179
- const { iframeDisplay } = await this.initializeIframeDisplayForContainer({
180
- container: displayContainer
181
- });
182
- iframeDisplay.displayPrivateKey(JSON.stringify(Array.from(privateKeyBytes)));
152
+ const privateKeyBytes = Buffer.from(derivedPrivateKey, 'hex');
153
+ return JSON.stringify(privateKeyBytes);
183
154
  }
184
155
  /**
185
156
  * Exports the private key for a given account address
@@ -226,7 +197,7 @@ class DynamicSvmWalletClient extends browser.DynamicWalletClient {
226
197
  */ async importPrivateKey({ privateKey, chainName, thresholdSignatureScheme, password = undefined, onError }) {
227
198
  //get public key from private key
228
199
  const publicKey = this.getPublicKeyFromPrivateKey(privateKey);
229
- const formattedPrivateKey = await this.decodePrivateKeyForSolana(privateKey);
200
+ const formattedPrivateKey = this.decodePrivateKeyForSolana(privateKey);
230
201
  const { rawPublicKey, clientKeyShares } = await this.importRawPrivateKey({
231
202
  chainName,
232
203
  privateKey: formattedPrivateKey,
@@ -251,8 +222,6 @@ class DynamicSvmWalletClient extends browser.DynamicWalletClient {
251
222
  throw new Error(`Public key mismatch: derived address ${accountAddress} !== public key ${publicKey}`);
252
223
  }
253
224
  // Update client key shares in wallet map
254
- // warning: this might result in race condition if `onCeremonyComplete` executes at the same time
255
- // TODO: remove this once iframe handling for secret shares is implemented
256
225
  await this.setClientKeySharesToLocalStorage({
257
226
  accountAddress,
258
227
  clientKeyShares,
@@ -266,8 +235,7 @@ class DynamicSvmWalletClient extends browser.DynamicWalletClient {
266
235
  });
267
236
  return {
268
237
  accountAddress,
269
- rawPublicKey: rawPublicKey,
270
- clientKeyShares
238
+ rawPublicKey: rawPublicKey
271
239
  };
272
240
  }
273
241
  async getSvmWallets() {
package/index.esm.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { DynamicWalletClient, getClientKeyShareBackupInfo, WalletOperation } from '@dynamic-labs-wallet/browser';
2
2
  import bs58 from 'bs58';
3
- import { VersionedTransaction, PublicKey, Keypair } from '@solana/web3.js';
3
+ import { Keypair } from '@solana/web3.js';
4
4
 
5
5
  function _extends() {
6
6
  _extends = Object.assign || function assign(target) {
@@ -13,11 +13,6 @@ function _extends() {
13
13
  return _extends.apply(this, arguments);
14
14
  }
15
15
 
16
- const addSignatureToTransaction = ({ transaction, signature, signerPublicKey })=>{
17
- transaction.addSignature(signerPublicKey, Buffer.from(signature));
18
- return transaction;
19
- };
20
-
21
16
  const ERROR_CREATE_WALLET_ACCOUNT = 'Error creating svm wallet account';
22
17
 
23
18
  class DynamicSvmWalletClient extends DynamicWalletClient {
@@ -50,8 +45,6 @@ class DynamicSvmWalletClient extends DynamicWalletClient {
50
45
  }
51
46
  const { accountAddress } = await this.deriveAccountAddress(rawPublicKey);
52
47
  // Update client key shares in wallet map
53
- // warning: this might result in race condition if `onCeremonyComplete` executes at the same time
54
- // TODO: remove this once iframe handling for secret shares is implemented
55
48
  await this.setClientKeySharesToLocalStorage({
56
49
  accountAddress,
57
50
  clientKeyShares,
@@ -65,8 +58,7 @@ class DynamicSvmWalletClient extends DynamicWalletClient {
65
58
  });
66
59
  return {
67
60
  accountAddress,
68
- rawPublicKey: rawPublicKey,
69
- clientKeyShares
61
+ rawPublicKey
70
62
  };
71
63
  } catch (error) {
72
64
  this.logger.error(ERROR_CREATE_WALLET_ACCOUNT, error);
@@ -116,18 +108,8 @@ class DynamicSvmWalletClient extends DynamicWalletClient {
116
108
  walletOperation: WalletOperation.SIGN_TRANSACTION
117
109
  });
118
110
  try {
119
- let messageToSign;
120
- if (transaction instanceof VersionedTransaction) {
121
- // For versioned transactions, we need to sign the message directly
122
- const messageBytes = transaction.message.serialize();
123
- messageToSign = Buffer.from(messageBytes).toString('hex');
124
- } else {
125
- // For legacy transactions, serialize the message
126
- const messageBytes = transaction.serializeMessage();
127
- messageToSign = Buffer.from(messageBytes).toString('hex');
128
- }
129
111
  const signatureEd25519 = await this.sign({
130
- message: messageToSign,
112
+ message: transaction,
131
113
  accountAddress: senderAddress,
132
114
  chainName: this.chainName,
133
115
  password
@@ -135,13 +117,7 @@ class DynamicSvmWalletClient extends DynamicWalletClient {
135
117
  if (!signatureEd25519) {
136
118
  throw new Error('Signature is undefined');
137
119
  }
138
- const senderPublicKey = new PublicKey(senderAddress);
139
- const signedTransaction = addSignatureToTransaction({
140
- transaction,
141
- signature: signatureEd25519,
142
- signerPublicKey: senderPublicKey
143
- });
144
- return signedTransaction;
120
+ return Buffer.from(signatureEd25519).toString('hex');
145
121
  } catch (error) {
146
122
  this.logger.error('Error in signTransaction:', error);
147
123
  if (error instanceof Error) {
@@ -156,8 +132,7 @@ class DynamicSvmWalletClient extends DynamicWalletClient {
156
132
  * @param accountAddress The account address to export the private key for
157
133
  * @param password The password for encrypted backup shares
158
134
  * @returns The private key
159
- */ async exportPrivateKey({ accountAddress, displayContainer, password = undefined }) {
160
- var _derivedPrivateKey_match;
135
+ */ async exportPrivateKey({ accountAddress, password = undefined }) {
161
136
  await this.verifyPassword({
162
137
  accountAddress,
163
138
  password,
@@ -172,12 +147,8 @@ class DynamicSvmWalletClient extends DynamicWalletClient {
172
147
  throw new Error('Derived private key is undefined');
173
148
  }
174
149
  // Convert hex string to Uint8Array
175
- const privateKeyBytes = new Uint8Array(((_derivedPrivateKey_match = derivedPrivateKey.match(/.{1,2}/g)) == null ? void 0 : _derivedPrivateKey_match.map((byte)=>parseInt(byte, 16))) || []);
176
- // Display the private key in the container via iframe
177
- const { iframeDisplay } = await this.initializeIframeDisplayForContainer({
178
- container: displayContainer
179
- });
180
- iframeDisplay.displayPrivateKey(JSON.stringify(Array.from(privateKeyBytes)));
150
+ const privateKeyBytes = Buffer.from(derivedPrivateKey, 'hex');
151
+ return JSON.stringify(privateKeyBytes);
181
152
  }
182
153
  /**
183
154
  * Exports the private key for a given account address
@@ -224,7 +195,7 @@ class DynamicSvmWalletClient extends DynamicWalletClient {
224
195
  */ async importPrivateKey({ privateKey, chainName, thresholdSignatureScheme, password = undefined, onError }) {
225
196
  //get public key from private key
226
197
  const publicKey = this.getPublicKeyFromPrivateKey(privateKey);
227
- const formattedPrivateKey = await this.decodePrivateKeyForSolana(privateKey);
198
+ const formattedPrivateKey = this.decodePrivateKeyForSolana(privateKey);
228
199
  const { rawPublicKey, clientKeyShares } = await this.importRawPrivateKey({
229
200
  chainName,
230
201
  privateKey: formattedPrivateKey,
@@ -249,8 +220,6 @@ class DynamicSvmWalletClient extends DynamicWalletClient {
249
220
  throw new Error(`Public key mismatch: derived address ${accountAddress} !== public key ${publicKey}`);
250
221
  }
251
222
  // Update client key shares in wallet map
252
- // warning: this might result in race condition if `onCeremonyComplete` executes at the same time
253
- // TODO: remove this once iframe handling for secret shares is implemented
254
223
  await this.setClientKeySharesToLocalStorage({
255
224
  accountAddress,
256
225
  clientKeyShares,
@@ -264,8 +233,7 @@ class DynamicSvmWalletClient extends DynamicWalletClient {
264
233
  });
265
234
  return {
266
235
  accountAddress,
267
- rawPublicKey: rawPublicKey,
268
- clientKeyShares
236
+ rawPublicKey: rawPublicKey
269
237
  };
270
238
  }
271
239
  async getSvmWallets() {
package/package.json CHANGED
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "name": "@dynamic-labs-wallet/svm",
3
- "version": "0.0.74",
3
+ "version": "0.0.75-preview.1",
4
4
  "license": "MIT",
5
5
  "dependencies": {
6
- "@dynamic-labs-wallet/browser": "0.0.74",
6
+ "@dynamic-labs-wallet/browser": "0.0.75-preview.1",
7
7
  "@solana/web3.js": "^1.98.2",
8
8
  "bs58": "^6.0.0"
9
9
  },
@@ -1,5 +1,4 @@
1
- import { ClientKeyShare, DynamicWalletClient, Ed25519KeygenResult, ThresholdSignatureScheme } from '@dynamic-labs-wallet/browser';
2
- import { Transaction, VersionedTransaction } from '@solana/web3.js';
1
+ import { DynamicWalletClient, Ed25519KeygenResult, ThresholdSignatureScheme } from '@dynamic-labs-wallet/browser';
3
2
  export declare class DynamicSvmWalletClient extends DynamicWalletClient {
4
3
  readonly chainName = "SOL";
5
4
  accountAddress?: string;
@@ -20,8 +19,7 @@ export declare class DynamicSvmWalletClient extends DynamicWalletClient {
20
19
  password?: string;
21
20
  }): Promise<{
22
21
  accountAddress: string;
23
- rawPublicKey: Uint8Array;
24
- clientKeyShares: ClientKeyShare[];
22
+ rawPublicKey: Uint8Array | string;
25
23
  }>;
26
24
  deriveAccountAddress(rawPublicKey: string | Uint8Array): Promise<{
27
25
  accountAddress: string;
@@ -40,9 +38,9 @@ export declare class DynamicSvmWalletClient extends DynamicWalletClient {
40
38
  }): Promise<string>;
41
39
  signTransaction({ senderAddress, transaction, password, }: {
42
40
  senderAddress: string;
43
- transaction: VersionedTransaction | Transaction;
41
+ transaction: string;
44
42
  password?: string;
45
- }): Promise<VersionedTransaction | Transaction>;
43
+ }): Promise<string>;
46
44
  /**
47
45
  * Exports the private key for a given account address
48
46
  *
@@ -50,11 +48,10 @@ export declare class DynamicSvmWalletClient extends DynamicWalletClient {
50
48
  * @param password The password for encrypted backup shares
51
49
  * @returns The private key
52
50
  */
53
- exportPrivateKey({ accountAddress, displayContainer, password, }: {
51
+ exportPrivateKey({ accountAddress, password, }: {
54
52
  accountAddress: string;
55
- displayContainer: HTMLElement;
56
53
  password?: string;
57
- }): Promise<void>;
54
+ }): Promise<string>;
58
55
  /**
59
56
  * Exports the private key for a given account address
60
57
  *
@@ -94,8 +91,7 @@ export declare class DynamicSvmWalletClient extends DynamicWalletClient {
94
91
  }): Promise<{
95
92
  accountAddress: string;
96
93
  rawPublicKey: Uint8Array | undefined;
97
- clientKeyShares: ClientKeyShare[];
98
94
  }>;
99
95
  getSvmWallets(): Promise<any>;
100
96
  }
101
- //# sourceMappingURL=svm.d.ts.map
97
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/svm/client.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,wBAAwB,EAGzB,MAAM,8BAA8B,CAAC;AAKtC,qBAAa,sBAAuB,SAAQ,mBAAmB;IAC7D,QAAQ,CAAC,SAAS,SAAS;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;gBAEZ,EACV,aAAa,EACb,SAAS,EACT,UAAU,EACV,kBAAkB,GACnB,EAAE;QACD,aAAa,EAAE,MAAM,CAAC;QACtB,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,kBAAkB,CAAC,EAAE,MAAM,CAAC;KAC7B;IASD;;;;;OAKG;IACG,mBAAmB,CAAC,EACxB,wBAAwB,EACxB,QAAoB,GACrB,EAAE;QACD,wBAAwB,EAAE,wBAAwB,CAAC;QACnD,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,GAAG,OAAO,CAAC;QACV,cAAc,EAAE,MAAM,CAAC;QACvB,YAAY,EAAE,UAAU,GAAG,MAAM,CAAC;KACnC,CAAC;IA2DI,oBAAoB,CAAC,YAAY,EAAE,MAAM,GAAG,UAAU;;;IAY5D;;;;;;OAMG;IACG,WAAW,CAAC,EAChB,OAAO,EACP,cAAc,EACd,QAAoB,GACrB,EAAE;QACD,OAAO,EAAE,MAAM,CAAC;QAChB,cAAc,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB;IA2BK,eAAe,CAAC,EACpB,aAAa,EACb,WAAW,EACX,QAAoB,GACrB,EAAE;QACD,aAAa,EAAE,MAAM,CAAC;QACtB,WAAW,EAAE,MAAM,CAAC;QACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,GAAG,OAAO,CAAC,MAAM,CAAC;IA6BnB;;;;;;OAMG;IACG,gBAAgB,CAAC,EACrB,cAAc,EACd,QAAoB,GACrB,EAAE;QACD,cAAc,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,GAAG,OAAO,CAAC,MAAM,CAAC;IAsBnB;;;;;OAKG;IACG,uBAAuB,CAAC,EAC5B,SAAS,EACT,cAAc,GACf,EAAE;QACD,SAAS,EAAE,mBAAmB,EAAE,CAAC;QACjC,cAAc,CAAC,EAAE,MAAM,CAAC;KACzB;;;IASD;;;;;OAKG;IACH,yBAAyB,CAAC,UAAU,EAAE,MAAM;IAM5C,0BAA0B,CAAC,UAAU,EAAE,MAAM;IAQ7C,eAAe,CAAC,SAAS,EAAE,UAAU,GAAG,MAAM;IAI9C;;;;;;;;OAQG;IACG,gBAAgB,CAAC,EACrB,UAAU,EACV,SAAS,EACT,wBAAwB,EACxB,QAAoB,EACpB,OAAO,GACR,EAAE;QACD,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,EAAE,MAAM,CAAC;QAClB,wBAAwB,EAAE,wBAAwB,CAAC;QACnD,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;KAClC,GAAG,OAAO,CAAC;QACV,cAAc,EAAE,MAAM,CAAC;QACvB,YAAY,EAAE,UAAU,GAAG,SAAS,CAAC;KACtC,CAAC;IAwDI,aAAa;CAOpB"}
@@ -1,2 +1,2 @@
1
- export * from './svm';
1
+ export * from './client';
2
2
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/svm/index.ts"],"names":[],"mappings":"AAAA,cAAc,OAAO,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/svm/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"svm.d.ts","sourceRoot":"","sources":["../../src/svm/svm.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,mBAAmB,EACnB,mBAAmB,EACnB,wBAAwB,EAGzB,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EAEL,WAAW,EACX,oBAAoB,EAErB,MAAM,iBAAiB,CAAC;AAIzB,qBAAa,sBAAuB,SAAQ,mBAAmB;IAC7D,QAAQ,CAAC,SAAS,SAAS;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;gBAEZ,EACV,aAAa,EACb,SAAS,EACT,UAAU,EACV,kBAAkB,GACnB,EAAE;QACD,aAAa,EAAE,MAAM,CAAC;QACtB,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,kBAAkB,CAAC,EAAE,MAAM,CAAC;KAC7B;IASD;;;;;OAKG;IACG,mBAAmB,CAAC,EACxB,wBAAwB,EACxB,QAAoB,GACrB,EAAE;QACD,wBAAwB,EAAE,wBAAwB,CAAC;QACnD,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,GAAG,OAAO,CAAC;QACV,cAAc,EAAE,MAAM,CAAC;QACvB,YAAY,EAAE,UAAU,CAAC;QACzB,eAAe,EAAE,cAAc,EAAE,CAAC;KACnC,CAAC;IAgEI,oBAAoB,CAAC,YAAY,EAAE,MAAM,GAAG,UAAU;;;IAY5D;;;;;;OAMG;IACG,WAAW,CAAC,EAChB,OAAO,EACP,cAAc,EACd,QAAoB,GACrB,EAAE;QACD,OAAO,EAAE,MAAM,CAAC;QAChB,cAAc,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB;IA2BK,eAAe,CAAC,EACpB,aAAa,EACb,WAAW,EACX,QAAoB,GACrB,EAAE;QACD,aAAa,EAAE,MAAM,CAAC;QACtB,WAAW,EAAE,oBAAoB,GAAG,WAAW,CAAC;QAChD,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,GAAG,OAAO,CAAC,oBAAoB,GAAG,WAAW,CAAC;IAgD/C;;;;;;OAMG;IACG,gBAAgB,CAAC,EACrB,cAAc,EACd,gBAAgB,EAChB,QAAoB,GACrB,EAAE;QACD,cAAc,EAAE,MAAM,CAAC;QACvB,gBAAgB,EAAE,WAAW,CAAC;QAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB;IA8BD;;;;;OAKG;IACG,uBAAuB,CAAC,EAC5B,SAAS,EACT,cAAc,GACf,EAAE;QACD,SAAS,EAAE,mBAAmB,EAAE,CAAC;QACjC,cAAc,CAAC,EAAE,MAAM,CAAC;KACzB;;;IASD;;;;;OAKG;IACH,yBAAyB,CAAC,UAAU,EAAE,MAAM;IAM5C,0BAA0B,CAAC,UAAU,EAAE,MAAM;IAQ7C,eAAe,CAAC,SAAS,EAAE,UAAU,GAAG,MAAM;IAI9C;;;;;;;;OAQG;IACG,gBAAgB,CAAC,EACrB,UAAU,EACV,SAAS,EACT,wBAAwB,EACxB,QAAoB,EACpB,OAAO,GACR,EAAE;QACD,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,EAAE,MAAM,CAAC;QAClB,wBAAwB,EAAE,wBAAwB,CAAC;QACnD,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;KAClC,GAAG,OAAO,CAAC;QACV,cAAc,EAAE,MAAM,CAAC;QACvB,YAAY,EAAE,UAAU,GAAG,SAAS,CAAC;QACrC,eAAe,EAAE,cAAc,EAAE,CAAC;KACnC,CAAC;IA6DI,aAAa;CAOpB"}