@wireapp/core-crypto 9.3.4 → 9.3.5

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wireapp/core-crypto",
3
- "version": "9.3.4",
3
+ "version": "9.3.5",
4
4
  "author": "Wire CoreCrypto team <team.corecrypto@wire.com>",
5
5
  "repository": {
6
6
  "type": "git",
@@ -241,16 +241,16 @@ export const __wbg_get_acmedirectory_newAccount: (a: number) => [number, number]
241
241
  export const __wbg_get_acmedirectory_newOrder: (a: number) => [number, number];
242
242
  export const __wbg_get_newacmeauthz_identifier: (a: number) => [number, number];
243
243
  export const welcome_new: (a: number, b: number) => number;
244
- export const keypackage_new: (a: number, b: number) => number;
244
+ export const groupinfo_new: (a: number, b: number) => number;
245
+ export const __wbg_get_welcomebundle_id: (a: number) => number;
245
246
  export const externalsenderkey_new: (a: number, b: number) => number;
246
247
  export const conversationid_new: (a: number, b: number) => number;
247
- export const __wbg_get_welcomebundle_id: (a: number) => number;
248
- export const secretkey_new: (a: number, b: number) => number;
249
- export const groupinfo_new: (a: number, b: number) => number;
250
248
  export const __wbg_get_historysecret_clientId: (a: number) => number;
249
+ export const keypackage_new: (a: number, b: number) => number;
250
+ export const secretkey_new: (a: number, b: number) => number;
251
251
  export const keypackage_copyBytes: (a: number) => [number, number];
252
- export const groupinfo_copyBytes: (a: number) => [number, number];
253
252
  export const welcome_copyBytes: (a: number) => [number, number];
253
+ export const groupinfo_copyBytes: (a: number) => [number, number];
254
254
  export const secretkey_copyBytes: (a: number) => [number, number];
255
255
  export const __wbg_welcome_free: (a: number, b: number) => void;
256
256
  export const __wbg_secretkey_free: (a: number, b: number) => void;
@@ -272,7 +272,7 @@ export const __externref_drop_slice: (a: number, b: number) => void;
272
272
  export const __wbindgen_export_7: WebAssembly.Table;
273
273
  export const __externref_table_dealloc: (a: number) => void;
274
274
  export const closure2505_externref_shim: (a: number, b: number, c: any) => void;
275
- export const closure2882_externref_shim: (a: number, b: number, c: any) => void;
275
+ export const closure2883_externref_shim: (a: number, b: number, c: any) => void;
276
276
  export const closure942_externref_shim: (a: number, b: number, c: any) => void;
277
- export const closure2985_externref_shim: (a: number, b: number, c: any, d: any) => void;
277
+ export const closure2986_externref_shim: (a: number, b: number, c: any, d: any) => void;
278
278
  export const __wbindgen_start: () => void;
@@ -2,14 +2,14 @@
2
2
 
3
3
  /* tslint:disable */
4
4
  /* eslint-disable */
5
- /**
6
- * Get an instance of the default ciphersuite.
7
- */
8
- export function ciphersuiteDefault(): Ciphersuite;
9
5
  /**
10
6
  * Construct a ciphersuite enum instance from its discriminant.
11
7
  */
12
8
  export function ciphersuiteFromU16(discriminant: number): Ciphersuite;
9
+ /**
10
+ * Get an instance of the default ciphersuite.
11
+ */
12
+ export function ciphersuiteDefault(): Ciphersuite;
13
13
  /**
14
14
  * Open or create a [Database].
15
15
  */
package/src/corecrypto.js CHANGED
@@ -1,11 +1,3 @@
1
- var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
2
- get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
3
- }) : x)(function(x) {
4
- if (typeof require !== "undefined")
5
- return require.apply(this, arguments);
6
- throw Error('Dynamic require of "' + x + '" is not supported');
7
- });
8
-
9
1
  // src/CoreCryptoError.ts
10
2
  class CoreCryptoError extends Error {
11
3
  errorStack;
@@ -60,12 +52,12 @@ class CoreCryptoError extends Error {
60
52
  }
61
53
  }
62
54
  var ErrorType;
63
- ((ErrorType2) => {
64
- ErrorType2["Mls"] = "Mls";
65
- ErrorType2["Proteus"] = "Proteus";
66
- ErrorType2["E2ei"] = "E2ei";
67
- ErrorType2["TransactionFailed"] = "TransactionFailed";
68
- ErrorType2["Other"] = "Other";
55
+ ((ErrorType) => {
56
+ ErrorType["Mls"] = "Mls";
57
+ ErrorType["Proteus"] = "Proteus";
58
+ ErrorType["E2ei"] = "E2ei";
59
+ ErrorType["TransactionFailed"] = "TransactionFailed";
60
+ ErrorType["Other"] = "Other";
69
61
  })(ErrorType ||= {});
70
62
  function isCcErrorGeneric(error) {
71
63
  return typeof error === "object" && error !== null && "errorStack" in error && "context" in error && "type" in error;
@@ -83,20 +75,20 @@ function isOtherError(error) {
83
75
  return isCcError(error, "Other" /* Other */);
84
76
  }
85
77
  var MlsErrorType;
86
- ((MlsErrorType2) => {
87
- MlsErrorType2["ConversationAlreadyExists"] = "ConversationAlreadyExists";
88
- MlsErrorType2["DuplicateMessage"] = "DuplicateMessage";
89
- MlsErrorType2["BufferedFutureMessage"] = "BufferedFutureMessage";
90
- MlsErrorType2["WrongEpoch"] = "WrongEpoch";
91
- MlsErrorType2["BufferedCommit"] = "BufferedCommit";
92
- MlsErrorType2["MessageEpochTooOld"] = "MessageEpochTooOld";
93
- MlsErrorType2["SelfCommitIgnored"] = "SelfCommitIgnored";
94
- MlsErrorType2["UnmergedPendingGroup"] = "UnmergedPendingGroup";
95
- MlsErrorType2["StaleProposal"] = "StaleProposal";
96
- MlsErrorType2["StaleCommit"] = "StaleCommit";
97
- MlsErrorType2["OrphanWelcome"] = "OrphanWelcome";
98
- MlsErrorType2["MessageRejected"] = "MessageRejected";
99
- MlsErrorType2["Other"] = "Other";
78
+ ((MlsErrorType) => {
79
+ MlsErrorType["ConversationAlreadyExists"] = "ConversationAlreadyExists";
80
+ MlsErrorType["DuplicateMessage"] = "DuplicateMessage";
81
+ MlsErrorType["BufferedFutureMessage"] = "BufferedFutureMessage";
82
+ MlsErrorType["WrongEpoch"] = "WrongEpoch";
83
+ MlsErrorType["BufferedCommit"] = "BufferedCommit";
84
+ MlsErrorType["MessageEpochTooOld"] = "MessageEpochTooOld";
85
+ MlsErrorType["SelfCommitIgnored"] = "SelfCommitIgnored";
86
+ MlsErrorType["UnmergedPendingGroup"] = "UnmergedPendingGroup";
87
+ MlsErrorType["StaleProposal"] = "StaleProposal";
88
+ MlsErrorType["StaleCommit"] = "StaleCommit";
89
+ MlsErrorType["OrphanWelcome"] = "OrphanWelcome";
90
+ MlsErrorType["MessageRejected"] = "MessageRejected";
91
+ MlsErrorType["Other"] = "Other";
100
92
  })(MlsErrorType ||= {});
101
93
  function isMlsError(error, errorType) {
102
94
  return isCcError(error, "Mls" /* Mls */) && error.context !== undefined && error.context.type === errorType;
@@ -138,11 +130,11 @@ function isMlsOtherError(error) {
138
130
  return isMlsError(error, "Other" /* Other */);
139
131
  }
140
132
  var ProteusErrorType;
141
- ((ProteusErrorType2) => {
142
- ProteusErrorType2["SessionNotFound"] = "SessionNotFound";
143
- ProteusErrorType2["DuplicateMessage"] = "DuplicateMessage";
144
- ProteusErrorType2["RemoteIdentityChanged"] = "RemoteIdentityChanged";
145
- ProteusErrorType2["Other"] = "Other";
133
+ ((ProteusErrorType) => {
134
+ ProteusErrorType["SessionNotFound"] = "SessionNotFound";
135
+ ProteusErrorType["DuplicateMessage"] = "DuplicateMessage";
136
+ ProteusErrorType["RemoteIdentityChanged"] = "RemoteIdentityChanged";
137
+ ProteusErrorType["Other"] = "Other";
146
138
  })(ProteusErrorType ||= {});
147
139
  function isProteusError(error, errorType) {
148
140
  return isCcError(error, "Proteus" /* Proteus */) && error.context !== undefined && error.context.type === errorType;
@@ -200,10 +192,10 @@ if (!("encodeInto" in cachedTextEncoder)) {
200
192
  function passStringToWasm0(arg, malloc, realloc) {
201
193
  if (realloc === undefined) {
202
194
  const buf = cachedTextEncoder.encode(arg);
203
- const ptr2 = malloc(buf.length, 1) >>> 0;
204
- getUint8ArrayMemory0().subarray(ptr2, ptr2 + buf.length).set(buf);
195
+ const ptr = malloc(buf.length, 1) >>> 0;
196
+ getUint8ArrayMemory0().subarray(ptr, ptr + buf.length).set(buf);
205
197
  WASM_VECTOR_LEN = buf.length;
206
- return ptr2;
198
+ return ptr;
207
199
  }
208
200
  let len = arg.length;
209
201
  let ptr = malloc(len, 1) >>> 0;
@@ -345,10 +337,6 @@ function makeMutClosure(arg0, arg1, dtor, f) {
345
337
  CLOSURE_DTORS.register(real, state, state);
346
338
  return real;
347
339
  }
348
- function ciphersuiteDefault() {
349
- const ret = wasm.ciphersuiteDefault();
350
- return ret;
351
- }
352
340
  function takeFromExternrefTable0(idx) {
353
341
  const value = wasm.__wbindgen_export_4.get(idx);
354
342
  wasm.__externref_table_dealloc(idx);
@@ -361,6 +349,10 @@ function ciphersuiteFromU16(discriminant) {
361
349
  }
362
350
  return ret[0];
363
351
  }
352
+ function ciphersuiteDefault() {
353
+ const ret = wasm.ciphersuiteDefault();
354
+ return ret;
355
+ }
364
356
  function _assertClass(instance, klass) {
365
357
  if (!(instance instanceof klass)) {
366
358
  throw new Error(`expected instance of ${klass.name}`);
@@ -422,17 +414,17 @@ function build_metadata() {
422
414
  const ret = wasm.build_metadata();
423
415
  return BuildMetadata.__wrap(ret);
424
416
  }
425
- function __wbg_adapter_8(arg0, arg1, arg2) {
417
+ function __wbg_adapter_18(arg0, arg1, arg2) {
426
418
  wasm.closure2505_externref_shim(arg0, arg1, arg2);
427
419
  }
428
- function __wbg_adapter_19(arg0, arg1, arg2) {
429
- wasm.closure2882_externref_shim(arg0, arg1, arg2);
420
+ function __wbg_adapter_23(arg0, arg1, arg2) {
421
+ wasm.closure2883_externref_shim(arg0, arg1, arg2);
430
422
  }
431
- function __wbg_adapter_22(arg0, arg1, arg2) {
423
+ function __wbg_adapter_30(arg0, arg1, arg2) {
432
424
  wasm.closure942_externref_shim(arg0, arg1, arg2);
433
425
  }
434
426
  function __wbg_adapter_479(arg0, arg1, arg2, arg3) {
435
- wasm.closure2985_externref_shim(arg0, arg1, arg2, arg3);
427
+ wasm.closure2986_externref_shim(arg0, arg1, arg2, arg3);
436
428
  }
437
429
  var Ciphersuite = Object.freeze({
438
430
  MLS_128_DHKEMX25519_AES128GCM_SHA256_Ed25519: 1,
@@ -2331,7 +2323,6 @@ class MlsTransportResponse {
2331
2323
  if (Symbol.dispose)
2332
2324
  MlsTransportResponse.prototype[Symbol.dispose] = MlsTransportResponse.prototype.free;
2333
2325
  var NewAcmeAuthzFinalization = typeof FinalizationRegistry === "undefined" ? { register: () => {}, unregister: () => {} } : new FinalizationRegistry((ptr) => wasm.__wbg_newacmeauthz_free(ptr >>> 0, 1));
2334
-
2335
2326
  class NewAcmeAuthz {
2336
2327
  static __wrap(ptr) {
2337
2328
  ptr = ptr >>> 0;
@@ -2898,7 +2889,7 @@ function __wbg_get_imports() {
2898
2889
  wasm.__wbindgen_free(deferred0_0, deferred0_1, 1);
2899
2890
  }
2900
2891
  };
2901
- imports.wbg.__wbg_execute_c1e831ee9e01a6ab = function() {
2892
+ imports.wbg.__wbg_execute_92dfbdf51fadfa93 = function() {
2902
2893
  return handleError(function(arg0, arg1) {
2903
2894
  const ret = arg0.execute(CoreCryptoContext.__wrap(arg1));
2904
2895
  return ret;
@@ -3147,11 +3138,11 @@ function __wbg_get_imports() {
3147
3138
  imports.wbg.__wbg_new_2e3c58a15f39f5f9 = function(arg0, arg1) {
3148
3139
  try {
3149
3140
  var state0 = { a: arg0, b: arg1 };
3150
- var cb0 = (arg02, arg12) => {
3141
+ var cb0 = (arg0, arg1) => {
3151
3142
  const a = state0.a;
3152
3143
  state0.a = 0;
3153
3144
  try {
3154
- return __wbg_adapter_479(a, state0.b, arg02, arg12);
3145
+ return __wbg_adapter_479(a, state0.b, arg0, arg1);
3155
3146
  } finally {
3156
3147
  state0.a = a;
3157
3148
  }
@@ -3547,7 +3538,7 @@ function __wbg_get_imports() {
3547
3538
  return ret;
3548
3539
  };
3549
3540
  imports.wbg.__wbindgen_cast_3fda284bdcf7704e = function(arg0, arg1) {
3550
- const ret = makeMutClosure(arg0, arg1, 941, __wbg_adapter_22);
3541
+ const ret = makeMutClosure(arg0, arg1, 941, __wbg_adapter_30);
3551
3542
  return ret;
3552
3543
  };
3553
3544
  imports.wbg.__wbindgen_cast_4625c577ab2ec9ee = function(arg0) {
@@ -3561,7 +3552,7 @@ function __wbg_get_imports() {
3561
3552
  return ret;
3562
3553
  };
3563
3554
  imports.wbg.__wbindgen_cast_497f9f19c9eb4ede = function(arg0, arg1) {
3564
- const ret = makeMutClosure(arg0, arg1, 2504, __wbg_adapter_8);
3555
+ const ret = makeMutClosure(arg0, arg1, 2504, __wbg_adapter_18);
3565
3556
  return ret;
3566
3557
  };
3567
3558
  imports.wbg.__wbindgen_cast_77bc3e92745e9a35 = function(arg0, arg1) {
@@ -3570,16 +3561,16 @@ function __wbg_get_imports() {
3570
3561
  const ret = v0;
3571
3562
  return ret;
3572
3563
  };
3564
+ imports.wbg.__wbindgen_cast_9d5cbea1975bde9f = function(arg0, arg1) {
3565
+ const ret = makeMutClosure(arg0, arg1, 2882, __wbg_adapter_23);
3566
+ return ret;
3567
+ };
3573
3568
  imports.wbg.__wbindgen_cast_b77aa29fa8fe8560 = function(arg0, arg1) {
3574
3569
  var v0 = getArrayJsValueFromWasm0(arg0, arg1).slice();
3575
3570
  wasm.__wbindgen_free(arg0, arg1 * 4, 4);
3576
3571
  const ret = v0;
3577
3572
  return ret;
3578
3573
  };
3579
- imports.wbg.__wbindgen_cast_bfd87b187f67b730 = function(arg0, arg1) {
3580
- const ret = makeMutClosure(arg0, arg1, 2881, __wbg_adapter_19);
3581
- return ret;
3582
- };
3583
3574
  imports.wbg.__wbindgen_cast_cb9088102bce6b30 = function(arg0, arg1) {
3584
3575
  const ret = getArrayU8FromWasm0(arg0, arg1);
3585
3576
  return ret;
@@ -3790,10 +3781,10 @@ class E2eiEnrollment {
3790
3781
  }
3791
3782
  }
3792
3783
  var E2eiConversationState2;
3793
- ((E2eiConversationState3) => {
3794
- E2eiConversationState3[E2eiConversationState3["Verified"] = 1] = "Verified";
3795
- E2eiConversationState3[E2eiConversationState3["NotVerified"] = 2] = "NotVerified";
3796
- E2eiConversationState3[E2eiConversationState3["NotEnabled"] = 3] = "NotEnabled";
3784
+ ((E2eiConversationState) => {
3785
+ E2eiConversationState[E2eiConversationState["Verified"] = 1] = "Verified";
3786
+ E2eiConversationState[E2eiConversationState["NotVerified"] = 2] = "NotVerified";
3787
+ E2eiConversationState[E2eiConversationState["NotEnabled"] = 3] = "NotEnabled";
3797
3788
  })(E2eiConversationState2 ||= {});
3798
3789
 
3799
3790
  // src/ConversationConfiguration.ts
@@ -4077,13 +4068,13 @@ function loggerIntoFfi(logger) {
4077
4068
  return new CoreCryptoLogger(logFn, logThis);
4078
4069
  }
4079
4070
  var CoreCryptoLogLevel2;
4080
- ((CoreCryptoLogLevel3) => {
4081
- CoreCryptoLogLevel3[CoreCryptoLogLevel3["Off"] = 1] = "Off";
4082
- CoreCryptoLogLevel3[CoreCryptoLogLevel3["Trace"] = 2] = "Trace";
4083
- CoreCryptoLogLevel3[CoreCryptoLogLevel3["Debug"] = 3] = "Debug";
4084
- CoreCryptoLogLevel3[CoreCryptoLogLevel3["Info"] = 4] = "Info";
4085
- CoreCryptoLogLevel3[CoreCryptoLogLevel3["Warn"] = 5] = "Warn";
4086
- CoreCryptoLogLevel3[CoreCryptoLogLevel3["Error"] = 6] = "Error";
4071
+ ((CoreCryptoLogLevel) => {
4072
+ CoreCryptoLogLevel[CoreCryptoLogLevel["Off"] = 1] = "Off";
4073
+ CoreCryptoLogLevel[CoreCryptoLogLevel["Trace"] = 2] = "Trace";
4074
+ CoreCryptoLogLevel[CoreCryptoLogLevel["Debug"] = 3] = "Debug";
4075
+ CoreCryptoLogLevel[CoreCryptoLogLevel["Info"] = 4] = "Info";
4076
+ CoreCryptoLogLevel[CoreCryptoLogLevel["Warn"] = 5] = "Warn";
4077
+ CoreCryptoLogLevel[CoreCryptoLogLevel["Error"] = 6] = "Error";
4087
4078
  })(CoreCryptoLogLevel2 ||= {});
4088
4079
  function setMaxLogLevel(level) {
4089
4080
  CoreCrypto2.setMaxLogLevel(level);
@@ -4262,68 +4253,68 @@ async function initWasmModule(location = undefined) {
4262
4253
  }
4263
4254
  }
4264
4255
  export {
4265
- version2 as version,
4266
- updateDatabaseKey,
4267
- setMaxLogLevel,
4268
- setLogger,
4269
- openDatabase,
4270
- migrateDatabaseKeyTypeToBytes,
4271
- isTransactionFailedError,
4272
- isProteusSessionNotFoundError,
4273
- isProteusRemoteIdentityChangedError,
4274
- isProteusOtherError,
4275
- isProteusError,
4276
- isProteusDuplicateMessageError,
4277
- isOtherError,
4278
- isMlsWrongEpochError,
4279
- isMlsUnmergedPendingGroupError,
4280
- isMlsStaleProposalError,
4281
- isMlsStaleCommitError,
4282
- isMlsSelfCommitIgnoredError,
4283
- isMlsOtherError,
4284
- isMlsOrphanWelcomeError,
4285
- isMlsMessageRejectedError,
4286
- isMlsError,
4287
- isMlsDuplicateMessageError,
4288
- isMlsConversationAlreadyExistsError,
4289
- isMlsBufferedFutureMessageError,
4290
- isMlsBufferedCommitError,
4291
- isE2eiError,
4292
- isCcError,
4293
- initWasmModule,
4294
- ciphersuiteFromU16,
4295
- ciphersuiteDefault,
4296
- buildMetadata,
4297
- X509Identity2 as X509Identity,
4298
- WirePolicy,
4299
- WireIdentity4 as WireIdentity,
4300
- WelcomeBundle,
4301
- Welcome,
4302
- SecretKey,
4303
- MlsRatchetTreeType as RatchetTreeType,
4304
- ProteusErrorType,
4305
- NewAcmeOrder,
4306
- NewAcmeAuthz,
4307
- MlsTransportData,
4308
- MlsErrorType,
4309
- MlsGroupInfoEncryptionType as GroupInfoEncryptionType,
4310
- GroupInfo,
4311
- ExternalSenderKey,
4312
- ErrorType,
4313
- E2eiEnrollment,
4314
- E2eiConversationState2 as E2eiConversationState,
4315
- DeviceStatus,
4316
- DatabaseKey,
4317
- Database,
4318
- CustomConfiguration,
4319
- CredentialType,
4320
- CoreCryptoLogLevel2 as CoreCryptoLogLevel,
4321
- CoreCryptoError,
4322
- CoreCryptoContext2 as CoreCryptoContext,
4323
- CoreCrypto2 as CoreCrypto,
4324
- ConversationId,
4325
- ClientId,
4326
- Ciphersuite,
4256
+ AcmeChallenge,
4327
4257
  BuildMetadata2 as BuildMetadata,
4328
- AcmeChallenge
4258
+ Ciphersuite,
4259
+ ClientId,
4260
+ ConversationId,
4261
+ CoreCrypto2 as CoreCrypto,
4262
+ CoreCryptoContext2 as CoreCryptoContext,
4263
+ CoreCryptoError,
4264
+ CoreCryptoLogLevel2 as CoreCryptoLogLevel,
4265
+ CredentialType,
4266
+ CustomConfiguration,
4267
+ Database,
4268
+ DatabaseKey,
4269
+ DeviceStatus,
4270
+ E2eiConversationState2 as E2eiConversationState,
4271
+ E2eiEnrollment,
4272
+ ErrorType,
4273
+ ExternalSenderKey,
4274
+ GroupInfo,
4275
+ MlsGroupInfoEncryptionType as GroupInfoEncryptionType,
4276
+ MlsErrorType,
4277
+ MlsTransportData,
4278
+ NewAcmeAuthz,
4279
+ NewAcmeOrder,
4280
+ ProteusErrorType,
4281
+ MlsRatchetTreeType as RatchetTreeType,
4282
+ SecretKey,
4283
+ Welcome,
4284
+ WelcomeBundle,
4285
+ WireIdentity4 as WireIdentity,
4286
+ WirePolicy,
4287
+ X509Identity2 as X509Identity,
4288
+ buildMetadata,
4289
+ ciphersuiteDefault,
4290
+ ciphersuiteFromU16,
4291
+ initWasmModule,
4292
+ isCcError,
4293
+ isE2eiError,
4294
+ isMlsBufferedCommitError,
4295
+ isMlsBufferedFutureMessageError,
4296
+ isMlsConversationAlreadyExistsError,
4297
+ isMlsDuplicateMessageError,
4298
+ isMlsError,
4299
+ isMlsMessageRejectedError,
4300
+ isMlsOrphanWelcomeError,
4301
+ isMlsOtherError,
4302
+ isMlsSelfCommitIgnoredError,
4303
+ isMlsStaleCommitError,
4304
+ isMlsStaleProposalError,
4305
+ isMlsUnmergedPendingGroupError,
4306
+ isMlsWrongEpochError,
4307
+ isOtherError,
4308
+ isProteusDuplicateMessageError,
4309
+ isProteusError,
4310
+ isProteusOtherError,
4311
+ isProteusRemoteIdentityChangedError,
4312
+ isProteusSessionNotFoundError,
4313
+ isTransactionFailedError,
4314
+ migrateDatabaseKeyTypeToBytes,
4315
+ openDatabase,
4316
+ setLogger,
4317
+ setMaxLogLevel,
4318
+ updateDatabaseKey,
4319
+ version2 as version
4329
4320
  };