@mainsail/crypto-commit 0.0.1-alpha.9 → 0.0.1-evm.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/distribution/deserializer.d.ts +1 -1
- package/distribution/deserializer.js +9 -12
- package/distribution/deserializer.js.map +1 -1
- package/distribution/factory.d.ts +1 -1
- package/distribution/factory.js +10 -13
- package/distribution/factory.js.map +1 -1
- package/distribution/index.js +9 -13
- package/distribution/index.js.map +1 -1
- package/distribution/serializer.d.ts +1 -1
- package/distribution/serializer.js +7 -10
- package/distribution/serializer.js.map +1 -1
- package/package.json +25 -8
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
2
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
3
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
@@ -8,14 +7,12 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
8
7
|
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
8
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
9
|
};
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
const contracts_1 = require("@mainsail/contracts");
|
|
15
|
-
const utils_1 = require("@mainsail/utils");
|
|
10
|
+
import { inject, injectable } from "@mainsail/container";
|
|
11
|
+
import { Contracts, Identifiers } from "@mainsail/contracts";
|
|
12
|
+
import { ByteBuffer } from "@mainsail/utils";
|
|
16
13
|
let Deserializer = class Deserializer {
|
|
17
14
|
async deserializeCommitProof(serialized) {
|
|
18
|
-
const buffer =
|
|
15
|
+
const buffer = ByteBuffer.fromBuffer(serialized);
|
|
19
16
|
const proof = {};
|
|
20
17
|
await this.serializer.deserialize(buffer, proof, {
|
|
21
18
|
length: this.commitSerializer.proofSize(),
|
|
@@ -34,16 +31,16 @@ let Deserializer = class Deserializer {
|
|
|
34
31
|
return proof;
|
|
35
32
|
}
|
|
36
33
|
};
|
|
37
|
-
exports.Deserializer = Deserializer;
|
|
38
34
|
__decorate([
|
|
39
|
-
|
|
35
|
+
inject(Identifiers.Cryptography.Serializer),
|
|
40
36
|
__metadata("design:type", Object)
|
|
41
37
|
], Deserializer.prototype, "serializer", void 0);
|
|
42
38
|
__decorate([
|
|
43
|
-
|
|
39
|
+
inject(Identifiers.Cryptography.Commit.Serializer),
|
|
44
40
|
__metadata("design:type", Object)
|
|
45
41
|
], Deserializer.prototype, "commitSerializer", void 0);
|
|
46
|
-
|
|
47
|
-
|
|
42
|
+
Deserializer = __decorate([
|
|
43
|
+
injectable()
|
|
48
44
|
], Deserializer);
|
|
45
|
+
export { Deserializer };
|
|
49
46
|
//# sourceMappingURL=deserializer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deserializer.js","sourceRoot":"","sources":["../source/deserializer.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"deserializer.js","sourceRoot":"","sources":["../source/deserializer.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAGtC,IAAM,YAAY,GAAlB,MAAM,YAAY;IAOjB,KAAK,CAAC,sBAAsB,CAAC,UAAkB;QACrD,MAAM,MAAM,GAAe,UAAU,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QAE7D,MAAM,KAAK,GAAG,EAAkC,CAAC;QAEjD,MAAM,IAAI,CAAC,UAAU,CAAC,WAAW,CAA+B,MAAM,EAAE,KAAK,EAAE;YAC9E,MAAM,EAAE,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE;YACzC,MAAM,EAAE;gBACP,KAAK,EAAE;oBACN,IAAI,EAAE,QAAQ;iBACd;gBACD,SAAS,EAAE;oBACV,IAAI,EAAE,oBAAoB;iBAC1B;gBACD,UAAU,EAAE;oBACX,IAAI,EAAE,cAAc;iBACpB;aACD;SACD,CAAC,CAAC;QAEH,OAAO,KAAK,CAAC;IACd,CAAC;CACD,CAAA;AA3BiB;IADhB,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,UAAU,CAAC;;gDACkB;AAG7C;IADhB,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,MAAM,CAAC,UAAU,CAAC;;sDACmB;AAL1D,YAAY;IADxB,UAAU,EAAE;GACA,YAAY,CA6BxB"}
|
package/distribution/factory.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
2
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
3
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
@@ -8,14 +7,12 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
8
7
|
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
8
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
9
|
};
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
const contracts_1 = require("@mainsail/contracts");
|
|
15
|
-
const utils_1 = require("@mainsail/utils");
|
|
10
|
+
import { inject, injectable } from "@mainsail/container";
|
|
11
|
+
import { Contracts, Identifiers } from "@mainsail/contracts";
|
|
12
|
+
import { ByteBuffer } from "@mainsail/utils";
|
|
16
13
|
let CommitFactory = class CommitFactory {
|
|
17
14
|
async fromBytes(buff) {
|
|
18
|
-
const buffer =
|
|
15
|
+
const buffer = ByteBuffer.fromBuffer(buff);
|
|
19
16
|
const proofBuffer = buffer.readBytes(this.commitSerializer.proofSize());
|
|
20
17
|
const proof = await this.commitDeserializer.deserializeCommitProof(proofBuffer);
|
|
21
18
|
const block = await this.blockFactory.fromBytes(buffer.getRemainder());
|
|
@@ -34,20 +31,20 @@ let CommitFactory = class CommitFactory {
|
|
|
34
31
|
};
|
|
35
32
|
}
|
|
36
33
|
};
|
|
37
|
-
exports.CommitFactory = CommitFactory;
|
|
38
34
|
__decorate([
|
|
39
|
-
|
|
35
|
+
inject(Identifiers.Cryptography.Block.Factory),
|
|
40
36
|
__metadata("design:type", Object)
|
|
41
37
|
], CommitFactory.prototype, "blockFactory", void 0);
|
|
42
38
|
__decorate([
|
|
43
|
-
|
|
39
|
+
inject(Identifiers.Cryptography.Commit.Serializer),
|
|
44
40
|
__metadata("design:type", Object)
|
|
45
41
|
], CommitFactory.prototype, "commitSerializer", void 0);
|
|
46
42
|
__decorate([
|
|
47
|
-
|
|
43
|
+
inject(Identifiers.Cryptography.Commit.Deserializer),
|
|
48
44
|
__metadata("design:type", Object)
|
|
49
45
|
], CommitFactory.prototype, "commitDeserializer", void 0);
|
|
50
|
-
|
|
51
|
-
|
|
46
|
+
CommitFactory = __decorate([
|
|
47
|
+
injectable()
|
|
52
48
|
], CommitFactory);
|
|
49
|
+
export { CommitFactory };
|
|
53
50
|
//# sourceMappingURL=factory.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"factory.js","sourceRoot":"","sources":["../source/factory.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"factory.js","sourceRoot":"","sources":["../source/factory.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAGtC,IAAM,aAAa,GAAnB,MAAM,aAAa;IAUlB,KAAK,CAAC,SAAS,CAAC,IAAY;QAClC,MAAM,MAAM,GAAG,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAE3C,MAAM,WAAW,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,CAAC;QACxE,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,sBAAsB,CAAC,WAAW,CAAC,CAAC;QAEhF,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC;QAEvE,OAAO;YACN,KAAK;YACL,KAAK;YACL,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;SAChC,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,QAAQ,CAAC,IAAiC;QACtD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC3D,OAAO;YACN,KAAK;YACL,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,UAAU,EAAE,IAAI,CAAC,UAAU;SAC3B,CAAC;IACH,CAAC;CACD,CAAA;AA/BiB;IADhB,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC;;mDACe;AAG7C;IADhB,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,MAAM,CAAC,UAAU,CAAC;;uDACmB;AAGrD;IADhB,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,MAAM,CAAC,YAAY,CAAC;;yDACqB;AAR9D,aAAa;IADzB,UAAU,EAAE;GACA,aAAa,CAiCzB"}
|
package/distribution/index.js
CHANGED
|
@@ -1,17 +1,13 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
const factory_1 = require("./factory");
|
|
8
|
-
const serializer_1 = require("./serializer");
|
|
9
|
-
class ServiceProvider extends kernel_1.Providers.ServiceProvider {
|
|
1
|
+
import { Identifiers } from "@mainsail/contracts";
|
|
2
|
+
import { Providers } from "@mainsail/kernel";
|
|
3
|
+
import { Deserializer } from "./deserializer.js";
|
|
4
|
+
import { CommitFactory } from "./factory.js";
|
|
5
|
+
import { Serializer } from "./serializer.js";
|
|
6
|
+
export class ServiceProvider extends Providers.ServiceProvider {
|
|
10
7
|
async register() {
|
|
11
|
-
this.app.bind(
|
|
12
|
-
this.app.bind(
|
|
13
|
-
this.app.bind(
|
|
8
|
+
this.app.bind(Identifiers.Cryptography.Commit.Serializer).to(Serializer).inSingletonScope();
|
|
9
|
+
this.app.bind(Identifiers.Cryptography.Commit.Deserializer).to(Deserializer).inSingletonScope();
|
|
10
|
+
this.app.bind(Identifiers.Cryptography.Commit.Factory).to(CommitFactory).inSingletonScope();
|
|
14
11
|
}
|
|
15
12
|
}
|
|
16
|
-
exports.ServiceProvider = ServiceProvider;
|
|
17
13
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../source/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../source/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE7C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,MAAM,OAAO,eAAgB,SAAQ,SAAS,CAAC,eAAe;IACtD,KAAK,CAAC,QAAQ;QACpB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,gBAAgB,EAAE,CAAC;QAE5F,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,gBAAgB,EAAE,CAAC;QAEhG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,gBAAgB,EAAE,CAAC;IAC7F,CAAC;CACD"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
2
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
3
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
@@ -8,10 +7,8 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
8
7
|
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
8
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
9
|
};
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
const container_1 = require("@mainsail/container");
|
|
14
|
-
const contracts_1 = require("@mainsail/contracts");
|
|
10
|
+
import { inject, injectable } from "@mainsail/container";
|
|
11
|
+
import { Contracts, Identifiers } from "@mainsail/contracts";
|
|
15
12
|
let Serializer = class Serializer {
|
|
16
13
|
proofSize() {
|
|
17
14
|
return (4 + // round
|
|
@@ -40,16 +37,16 @@ let Serializer = class Serializer {
|
|
|
40
37
|
return Buffer.concat([serializedProof, serializedBlock]);
|
|
41
38
|
}
|
|
42
39
|
};
|
|
43
|
-
exports.Serializer = Serializer;
|
|
44
40
|
__decorate([
|
|
45
|
-
|
|
41
|
+
inject(Identifiers.Cryptography.Serializer),
|
|
46
42
|
__metadata("design:type", Object)
|
|
47
43
|
], Serializer.prototype, "serializer", void 0);
|
|
48
44
|
__decorate([
|
|
49
|
-
|
|
45
|
+
inject(Identifiers.Cryptography.Message.Serializer),
|
|
50
46
|
__metadata("design:type", Object)
|
|
51
47
|
], Serializer.prototype, "messageSerializer", void 0);
|
|
52
|
-
|
|
53
|
-
|
|
48
|
+
Serializer = __decorate([
|
|
49
|
+
injectable()
|
|
54
50
|
], Serializer);
|
|
51
|
+
export { Serializer };
|
|
55
52
|
//# sourceMappingURL=serializer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serializer.js","sourceRoot":"","sources":["../source/serializer.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"serializer.js","sourceRoot":"","sources":["../source/serializer.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAGtD,IAAM,UAAU,GAAhB,MAAM,UAAU;IAOf,SAAS;QACf,OAAO,CACN,CAAC,GAAG,QAAQ;YACZ,CAAC,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE,CACvC,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,oBAAoB,CAAC,MAAoC;QACrE,OAAO,IAAI,CAAC,UAAU,CAAC,SAAS,CAA+B,MAAM,EAAE;YACtE,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE;YACxB,MAAM,EAAE;gBACP,KAAK,EAAE;oBACN,IAAI,EAAE,QAAQ;iBACd;gBACD,SAAS,EAAE;oBACV,IAAI,EAAE,oBAAoB;iBAC1B;gBACD,UAAU,EAAE;oBACX,IAAI,EAAE,cAAc;iBACpB;aACD;YACD,IAAI,EAAE,CAAC;SACP,CAAC,CAAC;IACJ,CAAC;IAEM,KAAK,CAAC,eAAe,CAAC,MAA2C;QACvE,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACtE,MAAM,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QACpE,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,eAAe,EAAE,eAAe,CAAC,CAAC,CAAC;IAC1D,CAAC;CACD,CAAA;AAnCiB;IADhB,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,UAAU,CAAC;;8CACkB;AAG7C;IADhB,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,OAAO,CAAC,UAAU,CAAC;;qDACoB;AAL5D,UAAU;IADtB,UAAU,EAAE;GACA,UAAU,CAqCtB"}
|
package/package.json
CHANGED
|
@@ -1,22 +1,38 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mainsail/crypto-commit",
|
|
3
|
-
"version": "0.0.1-
|
|
3
|
+
"version": "0.0.1-evm.2",
|
|
4
4
|
"description": "Commit utilities for the Mainsail blockchain",
|
|
5
5
|
"license": "GPL-3.0-only",
|
|
6
6
|
"contributors": [],
|
|
7
|
+
"type": "module",
|
|
7
8
|
"main": "distribution/index.js",
|
|
8
9
|
"types": "distribution/index.d.ts",
|
|
9
10
|
"files": [
|
|
10
11
|
"/distribution"
|
|
11
12
|
],
|
|
12
13
|
"dependencies": {
|
|
13
|
-
"@mainsail/container": "0.0.1-
|
|
14
|
-
"@mainsail/
|
|
15
|
-
"@mainsail/
|
|
16
|
-
"@mainsail/utils": "0.0.1-
|
|
14
|
+
"@mainsail/container": "0.0.1-evm.2",
|
|
15
|
+
"@mainsail/contracts": "0.0.1-evm.2",
|
|
16
|
+
"@mainsail/kernel": "0.0.1-evm.2",
|
|
17
|
+
"@mainsail/utils": "0.0.1-evm.2"
|
|
17
18
|
},
|
|
18
19
|
"devDependencies": {
|
|
19
|
-
"uvu": "^0.5.6"
|
|
20
|
+
"uvu": "^0.5.6",
|
|
21
|
+
"@mainsail/crypto-block": "0.0.1-evm.2",
|
|
22
|
+
"@mainsail/crypto-address-bech32m": "0.0.1-evm.2",
|
|
23
|
+
"@mainsail/crypto-config": "0.0.1-evm.2",
|
|
24
|
+
"@mainsail/crypto-consensus-bls12-381": "0.0.1-evm.2",
|
|
25
|
+
"@mainsail/crypto-hash-bcrypto": "0.0.1-evm.2",
|
|
26
|
+
"@mainsail/crypto-key-pair-schnorr": "0.0.1-evm.2",
|
|
27
|
+
"@mainsail/crypto-messages": "0.0.1-evm.2",
|
|
28
|
+
"@mainsail/crypto-transaction": "0.0.1-evm.2",
|
|
29
|
+
"@mainsail/crypto-validation": "0.0.1-evm.2",
|
|
30
|
+
"@mainsail/crypto-wif": "0.0.1-evm.2",
|
|
31
|
+
"@mainsail/crypto-signature-schnorr": "0.0.1-evm.2",
|
|
32
|
+
"@mainsail/fees": "0.0.1-evm.2",
|
|
33
|
+
"@mainsail/fees-static": "0.0.1-evm.2",
|
|
34
|
+
"@mainsail/serializer": "0.0.1-evm.2",
|
|
35
|
+
"@mainsail/validation": "0.0.1-evm.2"
|
|
20
36
|
},
|
|
21
37
|
"engines": {
|
|
22
38
|
"node": ">=20.x"
|
|
@@ -26,9 +42,10 @@
|
|
|
26
42
|
"build:watch": "pnpm run clean && tsc -w",
|
|
27
43
|
"clean": "del distribution",
|
|
28
44
|
"release": "pnpm publish --access public",
|
|
29
|
-
"test": "
|
|
45
|
+
"test": "pnpm run uvu source .test.ts",
|
|
30
46
|
"test:coverage": "c8 pnpm run test",
|
|
31
47
|
"test:coverage:html": "c8 -r html --all pnpm run test",
|
|
32
|
-
"test:file": "
|
|
48
|
+
"test:file": "pnpm run uvu source",
|
|
49
|
+
"uvu": "tsx --tsconfig ../../tsconfig.test.json ./node_modules/uvu/bin.js"
|
|
33
50
|
}
|
|
34
51
|
}
|