@dynamic-labs-wallet/svm 0.0.73 → 0.0.75-preview

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,
@@ -173,13 +148,7 @@ class DynamicSvmWalletClient extends browser.DynamicWalletClient {
173
148
  if (!derivedPrivateKey) {
174
149
  throw new Error('Derived private key is undefined');
175
150
  }
176
- // 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)));
151
+ return derivedPrivateKey;
183
152
  }
184
153
  /**
185
154
  * Exports the private key for a given account address
@@ -226,7 +195,7 @@ class DynamicSvmWalletClient extends browser.DynamicWalletClient {
226
195
  */ async importPrivateKey({ privateKey, chainName, thresholdSignatureScheme, password = undefined, onError }) {
227
196
  //get public key from private key
228
197
  const publicKey = this.getPublicKeyFromPrivateKey(privateKey);
229
- const formattedPrivateKey = await this.decodePrivateKeyForSolana(privateKey);
198
+ const formattedPrivateKey = this.decodePrivateKeyForSolana(privateKey);
230
199
  const { rawPublicKey, clientKeyShares } = await this.importRawPrivateKey({
231
200
  chainName,
232
201
  privateKey: formattedPrivateKey,
@@ -251,8 +220,6 @@ class DynamicSvmWalletClient extends browser.DynamicWalletClient {
251
220
  throw new Error(`Public key mismatch: derived address ${accountAddress} !== public key ${publicKey}`);
252
221
  }
253
222
  // 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
223
  await this.setClientKeySharesToLocalStorage({
257
224
  accountAddress,
258
225
  clientKeyShares,
@@ -266,8 +233,7 @@ class DynamicSvmWalletClient extends browser.DynamicWalletClient {
266
233
  });
267
234
  return {
268
235
  accountAddress,
269
- rawPublicKey: rawPublicKey,
270
- clientKeyShares
236
+ rawPublicKey: rawPublicKey
271
237
  };
272
238
  }
273
239
  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,
@@ -171,13 +146,7 @@ class DynamicSvmWalletClient extends DynamicWalletClient {
171
146
  if (!derivedPrivateKey) {
172
147
  throw new Error('Derived private key is undefined');
173
148
  }
174
- // 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)));
149
+ return derivedPrivateKey;
181
150
  }
182
151
  /**
183
152
  * Exports the private key for a given account address
@@ -224,7 +193,7 @@ class DynamicSvmWalletClient extends DynamicWalletClient {
224
193
  */ async importPrivateKey({ privateKey, chainName, thresholdSignatureScheme, password = undefined, onError }) {
225
194
  //get public key from private key
226
195
  const publicKey = this.getPublicKeyFromPrivateKey(privateKey);
227
- const formattedPrivateKey = await this.decodePrivateKeyForSolana(privateKey);
196
+ const formattedPrivateKey = this.decodePrivateKeyForSolana(privateKey);
228
197
  const { rawPublicKey, clientKeyShares } = await this.importRawPrivateKey({
229
198
  chainName,
230
199
  privateKey: formattedPrivateKey,
@@ -249,8 +218,6 @@ class DynamicSvmWalletClient extends DynamicWalletClient {
249
218
  throw new Error(`Public key mismatch: derived address ${accountAddress} !== public key ${publicKey}`);
250
219
  }
251
220
  // 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
221
  await this.setClientKeySharesToLocalStorage({
255
222
  accountAddress,
256
223
  clientKeyShares,
@@ -264,8 +231,7 @@ class DynamicSvmWalletClient extends DynamicWalletClient {
264
231
  });
265
232
  return {
266
233
  accountAddress,
267
- rawPublicKey: rawPublicKey,
268
- clientKeyShares
234
+ rawPublicKey: rawPublicKey
269
235
  };
270
236
  }
271
237
  async getSvmWallets() {
package/package.json CHANGED
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "name": "@dynamic-labs-wallet/svm",
3
- "version": "0.0.73",
3
+ "version": "0.0.75-preview",
4
4
  "license": "MIT",
5
5
  "dependencies": {
6
- "@dynamic-labs-wallet/browser": "0.0.73",
6
+ "@dynamic-labs-wallet/browser": "0.0.75-preview",
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;IAmBnB;;;;;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"}