From caf4478b6b605cd11dd139a7bed0b54d49075882 Mon Sep 17 00:00:00 2001 From: b4cksl4sh Date: Tue, 4 Feb 2025 14:27:30 +0300 Subject: [PATCH 1/9] Refactor: optimized emptyCell() and emptySlice() --- src/stdlib/stdlib.ts | 6 +++--- src/stdlib/stdlib/std/internal/cells.tact | 8 ++++---- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/stdlib/stdlib.ts b/src/stdlib/stdlib.ts index aa58896a3..ca91eea84 100644 --- a/src/stdlib/stdlib.ts +++ b/src/stdlib/stdlib.ts @@ -293,9 +293,9 @@ files["std/internal/cells.tact"] = "dGVuZHMgZnVuIGFzU2xpY2Uoc2VsZjogQnVpbGRlcik6IFNsaWNlIHsKICAgIHJldHVybiBzZWxmLmVuZENlbGwoKS5iZWdpblBhcnNlKCk7Cn0KCmlubGluZSBleHRl" + "bmRzIGZ1biBhc1NsaWNlKHNlbGY6IENlbGwpOiBTbGljZSB7CiAgICByZXR1cm4gc2VsZi5iZWdpblBhcnNlKCk7Cn0KCmlubGluZSBleHRlbmRzIGZ1biBhc0NlbGwo" + "c2VsZjogU2xpY2UpOiBDZWxsIHsKICAgIHJldHVybiBiZWdpbkNlbGwoKQogICAgICAgIC5zdG9yZVNsaWNlKHNlbGYpCiAgICAgICAgLmVuZENlbGwoKTsKfQoKaW5s" + - "aW5lIGV4dGVuZHMgZnVuIGFzQ2VsbChzZWxmOiBCdWlsZGVyKTogQ2VsbCB7CiAgICByZXR1cm4gc2VsZi5lbmRDZWxsKCk7Cn0KCmlubGluZSBmdW4gZW1wdHlDZWxs" + - "KCk6IENlbGwgewogICAgcmV0dXJuIGJlZ2luQ2VsbCgpLmVuZENlbGwoKTsKfQoKaW5saW5lIGZ1biBlbXB0eVNsaWNlKCk6IFNsaWNlIHsKICAgIHJldHVybiBlbXB0" + - "eUNlbGwoKS5hc1NsaWNlKCk7Cn0K"; + "aW5lIGV4dGVuZHMgZnVuIGFzQ2VsbChzZWxmOiBCdWlsZGVyKTogQ2VsbCB7CiAgICByZXR1cm4gc2VsZi5lbmRDZWxsKCk7Cn0KCmFzbSBmdW4gZW1wdHlDZWxsKCk6" + + "IENlbGwgewogICAgPGIgYj4gUFVTSFJFRiAvLyBQdXJlIGZpZnQpICI8YiIgY3JlYXRlcyBhIGJ1aWxkZXIsICJiPiIgdHVybnMgaXQgaW50byBhIGNlbGwgKGluIGNv" + + "bXBpbGUgdGltZSkKfQoKYXNtIGZ1biBlbXB0eVNsaWNlKCk6IFNsaWNlIHsKICAgIGJ7fSBQVVNIU0xJQ0UKfQo="; files["std/internal/config.tact"] = "YXNtIGZ1biBnZXRDb25maWdQYXJhbShpZDogSW50KTogQ2VsbD8geyBDT05GSUdPUFRQQVJBTSB9Cg=="; files["std/internal/context.tact"] = diff --git a/src/stdlib/stdlib/std/internal/cells.tact b/src/stdlib/stdlib/std/internal/cells.tact index 180420454..6cb5d6098 100644 --- a/src/stdlib/stdlib/std/internal/cells.tact +++ b/src/stdlib/stdlib/std/internal/cells.tact @@ -375,10 +375,10 @@ inline extends fun asCell(self: Builder): Cell { return self.endCell(); } -inline fun emptyCell(): Cell { - return beginCell().endCell(); +asm fun emptyCell(): Cell { + PUSHREF // Pure fift) "" turns it into a cell (in compile time) } -inline fun emptySlice(): Slice { - return emptyCell().asSlice(); +asm fun emptySlice(): Slice { + b{} PUSHSLICE } From fb2a222e208b8dc04e5be8d54abc05fbee9c2e43 Mon Sep 17 00:00:00 2001 From: b4cksl4sh Date: Wed, 5 Feb 2025 21:50:39 +0300 Subject: [PATCH 2/9] New functions, old snapshot --- .../__snapshots__/benchmarks.spec.ts.snap | 4 ++++ src/test/benchmarks/benchmarks.spec.ts | 19 +++++++++++++++++++ src/test/benchmarks/contracts/cells.tact | 11 +++++++++++ 3 files changed, 34 insertions(+) create mode 100644 src/test/benchmarks/contracts/cells.tact diff --git a/src/test/benchmarks/__snapshots__/benchmarks.spec.ts.snap b/src/test/benchmarks/__snapshots__/benchmarks.spec.ts.snap index 48e7c5155..85a6ecc82 100644 --- a/src/test/benchmarks/__snapshots__/benchmarks.spec.ts.snap +++ b/src/test/benchmarks/__snapshots__/benchmarks.spec.ts.snap @@ -1,5 +1,9 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP +exports[`benchmarks benchmark cells creation: gas used emptyCell 1`] = `1449n`; + +exports[`benchmarks benchmark cells creation: gas used emptySlice 1`] = `1667n`; + exports[`benchmarks benchmark functions: code size 1`] = `227`; exports[`benchmarks benchmark functions: gas used 1`] = `2869n`; diff --git a/src/test/benchmarks/benchmarks.spec.ts b/src/test/benchmarks/benchmarks.spec.ts index 59b549025..3a04d8373 100644 --- a/src/test/benchmarks/benchmarks.spec.ts +++ b/src/test/benchmarks/benchmarks.spec.ts @@ -13,6 +13,7 @@ import { import { Forward } from "./contracts/output/forward_Forward"; import { Functions } from "./contracts/output/functions_Functions"; import "@ton/test-utils"; +import { cellsCreation } from "./contracts/output/cells_cellsCreation"; function measureGas(txs: BlockchainTransaction[]) { return ( @@ -67,4 +68,22 @@ describe("benchmarks", () => { const codeSize = testContract.init!.code.toBoc().length; expect(codeSize).toMatchSnapshot("code size"); }); + it("benchmark cells creation", async () => { + const testContract = blockchain.openContract( + await cellsCreation.fromInit(), + ); + await testContract.send( + treasure.getSender(), + { value: toNano(1) }, + beginCell().asSlice(), + ); + const gasUsed1 = ( + await blockchain.runGetMethod(testContract.address, "getEmptyCell") + ).gasUsed; + expect(gasUsed1).toMatchSnapshot("gas used emptyCell"); + const gasUsed2 = ( + await blockchain.runGetMethod(testContract.address, "getEmptySlice") + ).gasUsed; + expect(gasUsed2).toMatchSnapshot("gas used emptySlice"); + }); }); diff --git a/src/test/benchmarks/contracts/cells.tact b/src/test/benchmarks/contracts/cells.tact new file mode 100644 index 000000000..7adb3e325 --- /dev/null +++ b/src/test/benchmarks/contracts/cells.tact @@ -0,0 +1,11 @@ +contract cellsCreation { + receive(msg: Slice) { + + } + get fun getEmptyCell(): Cell { + return emptyCell(); + } + get fun getEmptySlice(): Slice { + return emptySlice(); + } +} From 6479f128e2351ff110f58df0c8a7ac96fb485c79 Mon Sep 17 00:00:00 2001 From: b4cksl4sh Date: Wed, 5 Feb 2025 21:51:34 +0300 Subject: [PATCH 3/9] Updated snapshot --- src/test/benchmarks/__snapshots__/benchmarks.spec.ts.snap | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/test/benchmarks/__snapshots__/benchmarks.spec.ts.snap b/src/test/benchmarks/__snapshots__/benchmarks.spec.ts.snap index 85a6ecc82..f4e98e9a6 100644 --- a/src/test/benchmarks/__snapshots__/benchmarks.spec.ts.snap +++ b/src/test/benchmarks/__snapshots__/benchmarks.spec.ts.snap @@ -1,8 +1,8 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`benchmarks benchmark cells creation: gas used emptyCell 1`] = `1449n`; +exports[`benchmarks benchmark cells creation: gas used emptyCell 1`] = `931n`; -exports[`benchmarks benchmark cells creation: gas used emptySlice 1`] = `1667n`; +exports[`benchmarks benchmark cells creation: gas used emptySlice 1`] = `1035n`; exports[`benchmarks benchmark functions: code size 1`] = `227`; From 24f7f5041c6f02e55172d62cc949df59de4ec1d0 Mon Sep 17 00:00:00 2001 From: B4ckSl4sh <91282981+Shvandre@users.noreply.github.com> Date: Wed, 5 Feb 2025 23:47:04 +0300 Subject: [PATCH 4/9] Update src/stdlib/stdlib/std/internal/cells.tact Co-authored-by: Anton Trunov --- src/stdlib/stdlib/std/internal/cells.tact | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/stdlib/stdlib/std/internal/cells.tact b/src/stdlib/stdlib/std/internal/cells.tact index fd62e0b09..f6c33dab1 100644 --- a/src/stdlib/stdlib/std/internal/cells.tact +++ b/src/stdlib/stdlib/std/internal/cells.tact @@ -468,7 +468,7 @@ inline extends fun asCell(self: Builder): Cell { } asm fun emptyCell(): Cell { - PUSHREF // Pure fift) "" turns it into a cell (in compile time) + PUSHREF // Pure Fift: "" turns it into a cell at compile time } asm fun emptySlice(): Slice { From 97afbd7041b3b53e4a3d3ced102c2354adff4e7c Mon Sep 17 00:00:00 2001 From: b4cksl4sh Date: Thu, 6 Feb 2025 13:06:52 +0300 Subject: [PATCH 5/9] i582-suggested refactoring --- src/stdlib/stdlib.ts | 96 ++++++++++++------------ src/test/benchmarks/benchmarks.spec.ts | 6 +- src/test/benchmarks/contracts/cells.tact | 6 +- 3 files changed, 53 insertions(+), 55 deletions(-) diff --git a/src/stdlib/stdlib.ts b/src/stdlib/stdlib.ts index b829c24b3..056553687 100644 --- a/src/stdlib/stdlib.ts +++ b/src/stdlib/stdlib.ts @@ -330,54 +330,54 @@ files["std/internal/cells.tact"] = "bmUgZXh0ZW5kcyBmdW4gYXNTbGljZShzZWxmOiBCdWlsZGVyKTogU2xpY2UgewogICAgcmV0dXJuIHNlbGYuZW5kQ2VsbCgpLmJlZ2luUGFyc2UoKTsKfQoKaW5saW5l" + "IGV4dGVuZHMgZnVuIGFzU2xpY2Uoc2VsZjogQ2VsbCk6IFNsaWNlIHsKICAgIHJldHVybiBzZWxmLmJlZ2luUGFyc2UoKTsKfQoKaW5saW5lIGV4dGVuZHMgZnVuIGFz" + "Q2VsbChzZWxmOiBTbGljZSk6IENlbGwgewogICAgcmV0dXJuIGJlZ2luQ2VsbCgpCiAgICAgICAgLnN0b3JlU2xpY2Uoc2VsZikKICAgICAgICAuZW5kQ2VsbCgpOwp9" + - "CgppbmxpbmUgZXh0ZW5kcyBmdW4gYXNDZWxsKHNlbGY6IEJ1aWxkZXIpOiBDZWxsIHsKICAgIHJldHVybiBzZWxmLmVuZENlbGwoKTsKfQoKaW5saW5lIGZ1biBlbXB0" + - "eUNlbGwoKTogQ2VsbCB7CiAgICByZXR1cm4gYmVnaW5DZWxsKCkuZW5kQ2VsbCgpOwp9CgppbmxpbmUgZnVuIGVtcHR5U2xpY2UoKTogU2xpY2UgewogICAgcmV0dXJu" + - "IGVtcHR5Q2VsbCgpLmFzU2xpY2UoKTsKfQoKLy8vIFN0cnVjdCBmb3IgaG9sZGluZyB2YWx1ZXMgY29tcHV0ZWQgYnkgdGhlIGBDZWxsLmNvbXB1dGVEYXRhU2l6ZSgp" + - "YCBhbmQgYFNsaWNlLmNvbXB1dGVEYXRhU2l6ZSgpYCBleHRlbnNpb24gZnVuY3Rpb25zLiBBdmFpbGFibGUgc2luY2UgVGFjdCAxLjYuMC4KLy8vCi8vLyBTZWU6Ci8v" + - "LyAqIGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL3JlZi9jb3JlLWNlbGxzI2NlbGxjb21wdXRlZGF0YXNpemUKLy8vICogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5v" + - "cmcvcmVmL2NvcmUtY2VsbHMjc2xpY2Vjb21wdXRlZGF0YXNpemUKLy8vCnN0cnVjdCBEYXRhU2l6ZSB7CiAgICAvLy8gVGhlIHRvdGFsIG51bWJlciBvZiBuZXN0ZWQg" + - "Y2VsbHMsIGluY2x1ZGluZyB0aGUgc3RhcnRpbmcgb25lLgogICAgY2VsbHM6IEludDsKCiAgICAvLy8gVGhlIHRvdGFsIG51bWJlciBvZiBiaXRzIGluIGFsbCBuZXN0" + - "ZWQgY2VsbHMsIGluY2x1ZGluZyB0aGUgc3RhcnRpbmcgb25lLgogICAgYml0czogSW50OwoKICAgIC8vLyBUaGUgdG90YWwgbnVtYmVyIG9mIHJlZnMgaW4gYWxsIG5l" + - "c3RlZCBjZWxscywgaW5jbHVkaW5nIHRoZSBzdGFydGluZyBvbmUuCiAgICByZWZzOiBJbnQ7Cn0KCi8vLyBFeHRlbnNpb24gZnVuY3Rpb24gZm9yIHRoZSBgQ2VsbGAu" + - "IEF2YWlsYWJsZSBzaW5jZSBUYWN0IDEuNi4wLgovLy8KLy8vIENvbXB1dGVzIGFuZCByZXR1cm5zIHRoZSBudW1iZXIgb2YgZGlzdGluY3QgY2VsbHMsIGJpdHMgYW5k" + - "IHJlZnMgaW4gdGhlIGBDZWxsYCBieSB1c2luZyBhIGRlcHRoLWZpcnN0IHNlYXJjaCAoREZTKSBhbGdvcml0aG0sIHJlY3Vyc2l2ZWx5IHRyYXZlcnNpbmcgZWFjaCBy" + - "ZWZlcmVuY2VkIGNlbGwuIFRoaXMgZnVuY3Rpb24gaXMgY29tcHV0YXRpb25hbGx5IGV4cGVuc2l2ZSBhbmQgY2FuIGNvbnN1bWUgYSBsb3Qgb2YgZ2FzLiBJZiBgc2Vs" + - "ZmAgaXMgYG51bGxgLCByZXR1cm5zIGBEYXRhU2l6ZWAgd2l0aCBhbGwgZmllbGRzIHNldCB0byAwLgovLy8KLy8vIFRoZSByZXN1bHRzIGFyZSBwYWNrZWQgaW50byBh" + - "IGBEYXRhU2l6ZWAgU3RydWN0IGNvbnNpc3Rpbmcgb2Y6Ci8vLyAqIGBjZWxsczogSW50YCwgdGhlIHRvdGFsIG51bWJlciBvZiBuZXN0ZWQgY2VsbHMsIGluY2x1ZGlu" + - "ZyB0aGUgc3RhcnRpbmcgb25lCi8vLyAqIGBiaXRzOiBJbnRgLCB0aGUgdG90YWwgbnVtYmVyIG9mIGJpdHMgaW4gYWxsIG5lc3RlZCBjZWxscywgaW5jbHVkaW5nIHRo" + - "ZSBzdGFydGluZyBvbmUKLy8vICogYHJlZnM6IEludGAsIHRoZSB0b3RhbCBudW1iZXIgb2YgcmVmcyBpbiBhbGwgbmVzdGVkIGNlbGxzLCBpbmNsdWRpbmcgdGhlIHN0" + - "YXJ0aW5nIG9uZQovLy8KLy8vIElmIHRoZSBzcGVjaWZpZWQgYG1heENlbGxzYCB2YWx1ZSBpc24ndCBlbm91Z2ggdG8gdHJhdmVyc2UgYWxsIGNlbGxzIGluY2x1ZGlu" + - "ZyB0aGUgc3RhcnRpbmcgb25lLCBhbiBleGNlcHRpb24gd2l0aCBleGl0IGNvZGUgOCBpcyB0aHJvd246IGBDZWxsIG92ZXJmbG93YC4KLy8vCi8vLyBBdHRlbXB0cyB0" + - "byBzcGVjaWZ5IGEgbmVnYXRpdmUgdmFsdWUgb2YgYG1heENlbGxzYCB0aHJvdyBhbiBleGNlcHRpb24gd2l0aCBleGl0IGNvZGUgNTogYEludGVnZXIgb3V0IG9mIGV4" + - "cGVjdGVkIHJhbmdlYC4KLy8vCi8vLyBgYGB0YWN0Ci8vLyBmdW4gZXhhbXBsZSgpIHsKLy8vICAgICBsZXQgYzogQ2VsbCA9IGJlZ2luQ2VsbCgpLnN0b3JlSW50KDQy" + - "LCA3KS5zdG9yZVJlZihlbXB0eUNlbGwoKSkuZW5kQ2VsbCgpOwovLy8gICAgIHRyeSB7Ci8vLyAgICAgICAgIGxldCBkYXRhU2l6ZTogRGF0YVNpemUgPSBjLmNvbXB1" + - "dGVEYXRhU2l6ZSgyKTsKLy8vICAgICAgICAgZGF0YVNpemUuY2VsbHM7IC8vIDIKLy8vICAgICAgICAgZGF0YVNpemUuYml0czsgIC8vIDcKLy8vICAgICAgICAgZGF0" + - "YVNpemUucmVmczsgIC8vIDEKLy8vICAgICB9IGNhdGNoIChleGl0Q29kZSkgewovLy8gICAgICAgICAvLyBpZiBtYXhDZWxscyB3YXMgaW5zdWZmaWNpZW50IHRvIHRy" + - "YXZlcnNlIHRoZSBjZWxsCi8vLyAgICAgICAgIC8vIGFuZCBhbGwgb2YgaXRzIHJlZmVyZW5jZXMsIHRoZSBleGl0Q29kZSBoZXJlIHdvdWxkIGJlIDgKLy8vICAgICB9" + - "Ci8vLyB9Ci8vLyBgYGAKLy8vCi8vLyBTZWU6IGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL3JlZi9jb3JlLWNlbGxzI2NlbGxjb21wdXRlZGF0YXNpemUKLy8vCmFz" + - "bSBleHRlbmRzIGZ1biBjb21wdXRlRGF0YVNpemUoc2VsZjogQ2VsbD8sIG1heENlbGxzOiBJbnQpOiBEYXRhU2l6ZSB7IENEQVRBU0laRSB9CgovLy8gRXh0ZW5zaW9u" + - "IGZ1bmN0aW9uIGZvciB0aGUgYFNsaWNlYC4gQXZhaWxhYmxlIHNpbmNlIFRhY3QgMS42LjAuCi8vLwovLy8gU2ltaWxhciB0byBgQ2VsbC5jb21wdXRlRGF0YVNpemUo" + - "KWAsIGJ1dCBkb2Vzbid0IHRha2UgaW50byBhY2NvdW50IHRoZSBjZWxsIHRoYXQgY29udGFpbnMgdGhlIGBTbGljZWAgaXRzZWxmLiBIb3dldmVyLCBhY2NvdW50cyBm" + - "b3IgaXRzIGJpdHMgYW5kIHJlZnMuCi8vLwovLy8gVGhlIHJlc3VsdHMgYXJlIHBhY2tlZCBpbnRvIGEgYERhdGFTaXplYCBTdHJ1Y3QgY29uc2lzdGluZyBvZjoKLy8v" + - "ICogYGNlbGxzOiBJbnRgLCB0aGUgdG90YWwgbnVtYmVyIG9mIG5lc3RlZCBjZWxscywgaW5jbHVkaW5nIHRoZSBzdGFydGluZyBvbmUKLy8vICogYGJpdHM6IEludGAs" + - "IHRoZSB0b3RhbCBudW1iZXIgb2YgYml0cyBpbiBhbGwgbmVzdGVkIGNlbGxzLCBpbmNsdWRpbmcgdGhlIHN0YXJ0aW5nIG9uZQovLy8gKiBgcmVmczogSW50YCwgdGhl" + - "IHRvdGFsIG51bWJlciBvZiByZWZzIGluIGFsbCBuZXN0ZWQgY2VsbHMsIGluY2x1ZGluZyB0aGUgc3RhcnRpbmcgb25lCi8vLwovLy8gSWYgdGhlIHNwZWNpZmllZCBg" + - "bWF4Q2VsbHNgIHZhbHVlIGlzbid0IGVub3VnaCB0byB0cmF2ZXJzZSBhbGwgY2VsbHMgKipub3QqKiBpbmNsdWRpbmcgdGhlIHN0YXJ0aW5nIG9uZSwgYW4gZXhjZXB0" + - "aW9uIHdpdGggZXhpdCBjb2RlIDggaXMgdGhyb3duOiBgQ2VsbCBvdmVyZmxvd2AuCi8vLwovLy8gQXR0ZW1wdHMgdG8gc3BlY2lmeSBhIG5lZ2F0aXZlIHZhbHVlIG9m" + - "IGBtYXhDZWxsc2AgdGhyb3cgYW4gZXhjZXB0aW9uIHdpdGggZXhpdCBjb2RlIDU6IGBJbnRlZ2VyIG91dCBvZiBleHBlY3RlZCByYW5nZWAuCi8vLwovLy8gYGBgdGFj" + - "dAovLy8gZnVuIGV4YW1wbGUoKSB7Ci8vLyAgICAgbGV0IHM6IFNsaWNlID0gYmVnaW5DZWxsKCkuc3RvcmVJbnQoNDIsIDcpLnN0b3JlUmVmKGVtcHR5Q2VsbCgpKS5h" + - "c1NsaWNlKCk7Ci8vLyAgICAgdHJ5IHsKLy8vICAgICAgICAgbGV0IGRhdGFTaXplOiBEYXRhU2l6ZSA9IHMuY29tcHV0ZURhdGFTaXplKDEpOwovLy8gICAgICAgICBk" + - "YXRhU2l6ZS5jZWxsczsgLy8gMQovLy8gICAgICAgICBkYXRhU2l6ZS5iaXRzOyAgLy8gNwovLy8gICAgICAgICBkYXRhU2l6ZS5yZWZzOyAgLy8gMQovLy8gICAgIH0g" + - "Y2F0Y2ggKGV4aXRDb2RlKSB7Ci8vLyAgICAgICAgIC8vIGlmIG1heENlbGxzIHdhcyBpbnN1ZmZpY2llbnQgdG8gdHJhdmVyc2UgdGhlIGNlbGwKLy8vICAgICAgICAg" + - "Ly8gYW5kIGFsbCBvZiBpdHMgcmVmZXJlbmNlcywgdGhlIGV4aXRDb2RlIGhlcmUgd291bGQgYmUgOAovLy8gICAgIH0KLy8vIH0KLy8vIGBgYAovLy8KLy8vIFNlZTog" + - "aHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtY2VsbHMjc2xpY2Vjb21wdXRlZGF0YXNpemUKLy8vCmFzbSBleHRlbmRzIGZ1biBjb21wdXRlRGF0YVNp" + - "emUoc2VsZjogU2xpY2UsIG1heENlbGxzOiBJbnQpOiBEYXRhU2l6ZSB7IFNEQVRBU0laRSB9CgovLy8gRXh0ZW5zaW9uIGZ1bmN0aW9uIGZvciB0aGUgYENlbGxgLiBB" + - "dmFpbGFibGUgc2luY2UgVGFjdCAxLjYuMC4KLy8vCi8vLyBDb21wdXRlcyBhbmQgcmV0dXJucyB0aGUgYEludGAgZGVwdGggb2YgdGhlIGBDZWxsYC4gUHJvZHVjZXMg" + - "MCBpZiB0aGUgYENlbGxgIGhhcyBubyByZWZlcmVuY2VzLCBvdGhlcndpc2UgMSBwbHVzIHRoZSBtYXhpbXVtIG9mIHRoZSBkZXB0aHMgb2YgdGhlIHJlZmVyZW5jZWQg" + - "Y2VsbHMuIElmIGMgaXMgbnVsbCwgcmV0dXJucyB6ZXJvLgovLy8KLy8vIGBgYHRhY3QKLy8vIGZ1biBleGFtcGxlKCkgewovLy8gICAgIGxldCBjOiBDZWxsID0gYmVn" + - "aW5DZWxsKCkuc3RvcmVJbnQoNDIsIDcpLmVuZENlbGwoKTsKLy8vICAgICBsZXQgZGVwdGg6IEludCA9IGMuZGVwdGgoKTsgLy8gMAovLy8gfQovLy8gYGBgCi8vLwov" + - "Ly8gU2VlOiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvY29yZS1jZWxscyNjZWxsZGVwdGgKLy8vCmFzbSBleHRlbmRzIGZ1biBkZXB0aChzZWxmOiBDZWxs" + - "Pyk6IEludCB7IENERVBUSCB9Cgo="; + "CgppbmxpbmUgZXh0ZW5kcyBmdW4gYXNDZWxsKHNlbGY6IEJ1aWxkZXIpOiBDZWxsIHsKICAgIHJldHVybiBzZWxmLmVuZENlbGwoKTsKfQoKYXNtIGZ1biBlbXB0eUNl" + + "bGwoKTogQ2VsbCB7CiAgICA8YiBiPiBQVVNIUkVGIC8vIFB1cmUgZmlmdCkgIjxiIiBjcmVhdGVzIGEgYnVpbGRlciwgImI+IiB0dXJucyBpdCBpbnRvIGEgY2VsbCAo" + + "aW4gY29tcGlsZSB0aW1lKQp9Cgphc20gZnVuIGVtcHR5U2xpY2UoKTogU2xpY2UgewogICAgYnt9IFBVU0hTTElDRQp9CgovLy8gU3RydWN0IGZvciBob2xkaW5nIHZh" + + "bHVlcyBjb21wdXRlZCBieSB0aGUgYENlbGwuY29tcHV0ZURhdGFTaXplKClgIGFuZCBgU2xpY2UuY29tcHV0ZURhdGFTaXplKClgIGV4dGVuc2lvbiBmdW5jdGlvbnMu" + + "IEF2YWlsYWJsZSBzaW5jZSBUYWN0IDEuNi4wLgovLy8KLy8vIFNlZToKLy8vICogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtY2VsbHMjY2VsbGNv" + + "bXB1dGVkYXRhc2l6ZQovLy8gKiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvY29yZS1jZWxscyNzbGljZWNvbXB1dGVkYXRhc2l6ZQovLy8Kc3RydWN0IERh" + + "dGFTaXplIHsKICAgIC8vLyBUaGUgdG90YWwgbnVtYmVyIG9mIG5lc3RlZCBjZWxscywgaW5jbHVkaW5nIHRoZSBzdGFydGluZyBvbmUuCiAgICBjZWxsczogSW50OwoK" + + "ICAgIC8vLyBUaGUgdG90YWwgbnVtYmVyIG9mIGJpdHMgaW4gYWxsIG5lc3RlZCBjZWxscywgaW5jbHVkaW5nIHRoZSBzdGFydGluZyBvbmUuCiAgICBiaXRzOiBJbnQ7" + + "CgogICAgLy8vIFRoZSB0b3RhbCBudW1iZXIgb2YgcmVmcyBpbiBhbGwgbmVzdGVkIGNlbGxzLCBpbmNsdWRpbmcgdGhlIHN0YXJ0aW5nIG9uZS4KICAgIHJlZnM6IElu" + + "dDsKfQoKLy8vIEV4dGVuc2lvbiBmdW5jdGlvbiBmb3IgdGhlIGBDZWxsYC4gQXZhaWxhYmxlIHNpbmNlIFRhY3QgMS42LjAuCi8vLwovLy8gQ29tcHV0ZXMgYW5kIHJl" + + "dHVybnMgdGhlIG51bWJlciBvZiBkaXN0aW5jdCBjZWxscywgYml0cyBhbmQgcmVmcyBpbiB0aGUgYENlbGxgIGJ5IHVzaW5nIGEgZGVwdGgtZmlyc3Qgc2VhcmNoIChE" + + "RlMpIGFsZ29yaXRobSwgcmVjdXJzaXZlbHkgdHJhdmVyc2luZyBlYWNoIHJlZmVyZW5jZWQgY2VsbC4gVGhpcyBmdW5jdGlvbiBpcyBjb21wdXRhdGlvbmFsbHkgZXhw" + + "ZW5zaXZlIGFuZCBjYW4gY29uc3VtZSBhIGxvdCBvZiBnYXMuIElmIGBzZWxmYCBpcyBgbnVsbGAsIHJldHVybnMgYERhdGFTaXplYCB3aXRoIGFsbCBmaWVsZHMgc2V0" + + "IHRvIDAuCi8vLwovLy8gVGhlIHJlc3VsdHMgYXJlIHBhY2tlZCBpbnRvIGEgYERhdGFTaXplYCBTdHJ1Y3QgY29uc2lzdGluZyBvZjoKLy8vICogYGNlbGxzOiBJbnRg" + + "LCB0aGUgdG90YWwgbnVtYmVyIG9mIG5lc3RlZCBjZWxscywgaW5jbHVkaW5nIHRoZSBzdGFydGluZyBvbmUKLy8vICogYGJpdHM6IEludGAsIHRoZSB0b3RhbCBudW1i" + + "ZXIgb2YgYml0cyBpbiBhbGwgbmVzdGVkIGNlbGxzLCBpbmNsdWRpbmcgdGhlIHN0YXJ0aW5nIG9uZQovLy8gKiBgcmVmczogSW50YCwgdGhlIHRvdGFsIG51bWJlciBv" + + "ZiByZWZzIGluIGFsbCBuZXN0ZWQgY2VsbHMsIGluY2x1ZGluZyB0aGUgc3RhcnRpbmcgb25lCi8vLwovLy8gSWYgdGhlIHNwZWNpZmllZCBgbWF4Q2VsbHNgIHZhbHVl" + + "IGlzbid0IGVub3VnaCB0byB0cmF2ZXJzZSBhbGwgY2VsbHMgaW5jbHVkaW5nIHRoZSBzdGFydGluZyBvbmUsIGFuIGV4Y2VwdGlvbiB3aXRoIGV4aXQgY29kZSA4IGlz" + + "IHRocm93bjogYENlbGwgb3ZlcmZsb3dgLgovLy8KLy8vIEF0dGVtcHRzIHRvIHNwZWNpZnkgYSBuZWdhdGl2ZSB2YWx1ZSBvZiBgbWF4Q2VsbHNgIHRocm93IGFuIGV4" + + "Y2VwdGlvbiB3aXRoIGV4aXQgY29kZSA1OiBgSW50ZWdlciBvdXQgb2YgZXhwZWN0ZWQgcmFuZ2VgLgovLy8KLy8vIGBgYHRhY3QKLy8vIGZ1biBleGFtcGxlKCkgewov" + + "Ly8gICAgIGxldCBjOiBDZWxsID0gYmVnaW5DZWxsKCkuc3RvcmVJbnQoNDIsIDcpLnN0b3JlUmVmKGVtcHR5Q2VsbCgpKS5lbmRDZWxsKCk7Ci8vLyAgICAgdHJ5IHsK" + + "Ly8vICAgICAgICAgbGV0IGRhdGFTaXplOiBEYXRhU2l6ZSA9IGMuY29tcHV0ZURhdGFTaXplKDIpOwovLy8gICAgICAgICBkYXRhU2l6ZS5jZWxsczsgLy8gMgovLy8g" + + "ICAgICAgICBkYXRhU2l6ZS5iaXRzOyAgLy8gNwovLy8gICAgICAgICBkYXRhU2l6ZS5yZWZzOyAgLy8gMQovLy8gICAgIH0gY2F0Y2ggKGV4aXRDb2RlKSB7Ci8vLyAg" + + "ICAgICAgIC8vIGlmIG1heENlbGxzIHdhcyBpbnN1ZmZpY2llbnQgdG8gdHJhdmVyc2UgdGhlIGNlbGwKLy8vICAgICAgICAgLy8gYW5kIGFsbCBvZiBpdHMgcmVmZXJl" + + "bmNlcywgdGhlIGV4aXRDb2RlIGhlcmUgd291bGQgYmUgOAovLy8gICAgIH0KLy8vIH0KLy8vIGBgYAovLy8KLy8vIFNlZTogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5v" + + "cmcvcmVmL2NvcmUtY2VsbHMjY2VsbGNvbXB1dGVkYXRhc2l6ZQovLy8KYXNtIGV4dGVuZHMgZnVuIGNvbXB1dGVEYXRhU2l6ZShzZWxmOiBDZWxsPywgbWF4Q2VsbHM6" + + "IEludCk6IERhdGFTaXplIHsgQ0RBVEFTSVpFIH0KCi8vLyBFeHRlbnNpb24gZnVuY3Rpb24gZm9yIHRoZSBgU2xpY2VgLiBBdmFpbGFibGUgc2luY2UgVGFjdCAxLjYu" + + "MC4KLy8vCi8vLyBTaW1pbGFyIHRvIGBDZWxsLmNvbXB1dGVEYXRhU2l6ZSgpYCwgYnV0IGRvZXNuJ3QgdGFrZSBpbnRvIGFjY291bnQgdGhlIGNlbGwgdGhhdCBjb250" + + "YWlucyB0aGUgYFNsaWNlYCBpdHNlbGYuIEhvd2V2ZXIsIGFjY291bnRzIGZvciBpdHMgYml0cyBhbmQgcmVmcy4KLy8vCi8vLyBUaGUgcmVzdWx0cyBhcmUgcGFja2Vk" + + "IGludG8gYSBgRGF0YVNpemVgIFN0cnVjdCBjb25zaXN0aW5nIG9mOgovLy8gKiBgY2VsbHM6IEludGAsIHRoZSB0b3RhbCBudW1iZXIgb2YgbmVzdGVkIGNlbGxzLCBp" + + "bmNsdWRpbmcgdGhlIHN0YXJ0aW5nIG9uZQovLy8gKiBgYml0czogSW50YCwgdGhlIHRvdGFsIG51bWJlciBvZiBiaXRzIGluIGFsbCBuZXN0ZWQgY2VsbHMsIGluY2x1" + + "ZGluZyB0aGUgc3RhcnRpbmcgb25lCi8vLyAqIGByZWZzOiBJbnRgLCB0aGUgdG90YWwgbnVtYmVyIG9mIHJlZnMgaW4gYWxsIG5lc3RlZCBjZWxscywgaW5jbHVkaW5n" + + "IHRoZSBzdGFydGluZyBvbmUKLy8vCi8vLyBJZiB0aGUgc3BlY2lmaWVkIGBtYXhDZWxsc2AgdmFsdWUgaXNuJ3QgZW5vdWdoIHRvIHRyYXZlcnNlIGFsbCBjZWxscyAq" + + "Km5vdCoqIGluY2x1ZGluZyB0aGUgc3RhcnRpbmcgb25lLCBhbiBleGNlcHRpb24gd2l0aCBleGl0IGNvZGUgOCBpcyB0aHJvd246IGBDZWxsIG92ZXJmbG93YC4KLy8v" + + "Ci8vLyBBdHRlbXB0cyB0byBzcGVjaWZ5IGEgbmVnYXRpdmUgdmFsdWUgb2YgYG1heENlbGxzYCB0aHJvdyBhbiBleGNlcHRpb24gd2l0aCBleGl0IGNvZGUgNTogYElu" + + "dGVnZXIgb3V0IG9mIGV4cGVjdGVkIHJhbmdlYC4KLy8vCi8vLyBgYGB0YWN0Ci8vLyBmdW4gZXhhbXBsZSgpIHsKLy8vICAgICBsZXQgczogU2xpY2UgPSBiZWdpbkNl" + + "bGwoKS5zdG9yZUludCg0MiwgNykuc3RvcmVSZWYoZW1wdHlDZWxsKCkpLmFzU2xpY2UoKTsKLy8vICAgICB0cnkgewovLy8gICAgICAgICBsZXQgZGF0YVNpemU6IERh" + + "dGFTaXplID0gcy5jb21wdXRlRGF0YVNpemUoMSk7Ci8vLyAgICAgICAgIGRhdGFTaXplLmNlbGxzOyAvLyAxCi8vLyAgICAgICAgIGRhdGFTaXplLmJpdHM7ICAvLyA3" + + "Ci8vLyAgICAgICAgIGRhdGFTaXplLnJlZnM7ICAvLyAxCi8vLyAgICAgfSBjYXRjaCAoZXhpdENvZGUpIHsKLy8vICAgICAgICAgLy8gaWYgbWF4Q2VsbHMgd2FzIGlu" + + "c3VmZmljaWVudCB0byB0cmF2ZXJzZSB0aGUgY2VsbAovLy8gICAgICAgICAvLyBhbmQgYWxsIG9mIGl0cyByZWZlcmVuY2VzLCB0aGUgZXhpdENvZGUgaGVyZSB3b3Vs" + + "ZCBiZSA4Ci8vLyAgICAgfQovLy8gfQovLy8gYGBgCi8vLwovLy8gU2VlOiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvY29yZS1jZWxscyNzbGljZWNvbXB1" + + "dGVkYXRhc2l6ZQovLy8KYXNtIGV4dGVuZHMgZnVuIGNvbXB1dGVEYXRhU2l6ZShzZWxmOiBTbGljZSwgbWF4Q2VsbHM6IEludCk6IERhdGFTaXplIHsgU0RBVEFTSVpF" + + "IH0KCi8vLyBFeHRlbnNpb24gZnVuY3Rpb24gZm9yIHRoZSBgQ2VsbGAuIEF2YWlsYWJsZSBzaW5jZSBUYWN0IDEuNi4wLgovLy8KLy8vIENvbXB1dGVzIGFuZCByZXR1" + + "cm5zIHRoZSBgSW50YCBkZXB0aCBvZiB0aGUgYENlbGxgLiBQcm9kdWNlcyAwIGlmIHRoZSBgQ2VsbGAgaGFzIG5vIHJlZmVyZW5jZXMsIG90aGVyd2lzZSAxIHBsdXMg" + + "dGhlIG1heGltdW0gb2YgdGhlIGRlcHRocyBvZiB0aGUgcmVmZXJlbmNlZCBjZWxscy4gSWYgYyBpcyBudWxsLCByZXR1cm5zIHplcm8uCi8vLwovLy8gYGBgdGFjdAov" + + "Ly8gZnVuIGV4YW1wbGUoKSB7Ci8vLyAgICAgbGV0IGM6IENlbGwgPSBiZWdpbkNlbGwoKS5zdG9yZUludCg0MiwgNykuZW5kQ2VsbCgpOwovLy8gICAgIGxldCBkZXB0" + + "aDogSW50ID0gYy5kZXB0aCgpOyAvLyAwCi8vLyB9Ci8vLyBgYGAKLy8vCi8vLyBTZWU6IGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL3JlZi9jb3JlLWNlbGxzI2Nl" + + "bGxkZXB0aAovLy8KYXNtIGV4dGVuZHMgZnVuIGRlcHRoKHNlbGY6IENlbGw/KTogSW50IHsgQ0RFUFRIIH0KCg=="; files["std/internal/config.tact"] = "YXNtIGZ1biBnZXRDb25maWdQYXJhbShpZDogSW50KTogQ2VsbD8geyBDT05GSUdPUFRQQVJBTSB9Cg=="; files["std/internal/context.tact"] = diff --git a/src/test/benchmarks/benchmarks.spec.ts b/src/test/benchmarks/benchmarks.spec.ts index 755a25959..1558ae08b 100644 --- a/src/test/benchmarks/benchmarks.spec.ts +++ b/src/test/benchmarks/benchmarks.spec.ts @@ -16,7 +16,7 @@ import { Sha256Big } from "./contracts/output/benchmark_sha256_big_Sha256Big"; import { Sha256AsSlice } from "./contracts/output/benchmark_sha256_as_slice_Sha256AsSlice"; import { Forward } from "./contracts/output/forward_Forward"; import "@ton/test-utils"; -import { cellsCreation } from "./contracts/output/cells_cellsCreation"; +import { CellsCreation } from "./contracts/output/cells_cellsCreation"; import { getUsedGas } from "./util"; function measureGas(txs: BlockchainTransaction[]) { @@ -167,12 +167,12 @@ describe("benchmarks", () => { }); it("benchmark cells creation", async () => { const testContract = blockchain.openContract( - await cellsCreation.fromInit(), + await CellsCreation.fromInit(), ); await testContract.send( treasure.getSender(), { value: toNano(1) }, - beginCell().asSlice(), + null, ); const gasUsed1 = ( await blockchain.runGetMethod(testContract.address, "getEmptyCell") diff --git a/src/test/benchmarks/contracts/cells.tact b/src/test/benchmarks/contracts/cells.tact index 7adb3e325..4f930004c 100644 --- a/src/test/benchmarks/contracts/cells.tact +++ b/src/test/benchmarks/contracts/cells.tact @@ -1,7 +1,5 @@ -contract cellsCreation { - receive(msg: Slice) { - - } +contract CellsCreation { + receive() { } get fun getEmptyCell(): Cell { return emptyCell(); } From d16187be0886eb6a0963ff9dbf38f5669b5fd524 Mon Sep 17 00:00:00 2001 From: i582 <51853996+i582@users.noreply.github.com> Date: Thu, 6 Feb 2025 14:32:31 +0400 Subject: [PATCH 6/9] minor fixes --- .../benchmarks/__snapshots__/benchmarks.spec.ts.snap | 10 +++++----- src/test/benchmarks/benchmarks.spec.ts | 5 ++++- src/test/benchmarks/contracts/cells.tact | 2 ++ 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/src/test/benchmarks/__snapshots__/benchmarks.spec.ts.snap b/src/test/benchmarks/__snapshots__/benchmarks.spec.ts.snap index f4e98e9a6..f9f786081 100644 --- a/src/test/benchmarks/__snapshots__/benchmarks.spec.ts.snap +++ b/src/test/benchmarks/__snapshots__/benchmarks.spec.ts.snap @@ -2,12 +2,12 @@ exports[`benchmarks benchmark cells creation: gas used emptyCell 1`] = `931n`; -exports[`benchmarks benchmark cells creation: gas used emptySlice 1`] = `1035n`; +exports[`benchmarks benchmark cells creation: gas used emptySlice 1`] = `935n`; -exports[`benchmarks benchmark functions: code size 1`] = `227`; +exports[`benchmarks benchmark functions: code size 1`] = `211`; -exports[`benchmarks benchmark functions: gas used 1`] = `2869n`; +exports[`benchmarks benchmark functions: gas used 1`] = `2769n`; -exports[`benchmarks benchmark readFwdFee: code size 1`] = `173`; +exports[`benchmarks benchmark readFwdFee: code size 1`] = `157`; -exports[`benchmarks benchmark readFwdFee: gas used 1`] = `2899n`; +exports[`benchmarks benchmark readFwdFee: gas used 1`] = `2799n`; diff --git a/src/test/benchmarks/benchmarks.spec.ts b/src/test/benchmarks/benchmarks.spec.ts index 1558ae08b..4c5bb6dcf 100644 --- a/src/test/benchmarks/benchmarks.spec.ts +++ b/src/test/benchmarks/benchmarks.spec.ts @@ -16,7 +16,7 @@ import { Sha256Big } from "./contracts/output/benchmark_sha256_big_Sha256Big"; import { Sha256AsSlice } from "./contracts/output/benchmark_sha256_as_slice_Sha256AsSlice"; import { Forward } from "./contracts/output/forward_Forward"; import "@ton/test-utils"; -import { CellsCreation } from "./contracts/output/cells_cellsCreation"; +import { CellsCreation } from "./contracts/output/cells_CellsCreation"; import { getUsedGas } from "./util"; function measureGas(txs: BlockchainTransaction[]) { @@ -165,6 +165,7 @@ describe("benchmarks", () => { await hashStringAsSLice(sha256AsSlice, "hello world".repeat(10)), ).toEqual(2516n); }); + it("benchmark cells creation", async () => { const testContract = blockchain.openContract( await CellsCreation.fromInit(), @@ -174,10 +175,12 @@ describe("benchmarks", () => { { value: toNano(1) }, null, ); + const gasUsed1 = ( await blockchain.runGetMethod(testContract.address, "getEmptyCell") ).gasUsed; expect(gasUsed1).toMatchSnapshot("gas used emptyCell"); + const gasUsed2 = ( await blockchain.runGetMethod(testContract.address, "getEmptySlice") ).gasUsed; diff --git a/src/test/benchmarks/contracts/cells.tact b/src/test/benchmarks/contracts/cells.tact index 4f930004c..e77962835 100644 --- a/src/test/benchmarks/contracts/cells.tact +++ b/src/test/benchmarks/contracts/cells.tact @@ -1,8 +1,10 @@ contract CellsCreation { receive() { } + get fun getEmptyCell(): Cell { return emptyCell(); } + get fun getEmptySlice(): Slice { return emptySlice(); } From cbddccd221a30536aa02745baa017881021ca01e Mon Sep 17 00:00:00 2001 From: i582 <51853996+i582@users.noreply.github.com> Date: Thu, 6 Feb 2025 14:33:15 +0400 Subject: [PATCH 7/9] rebuild stdlib --- src/stdlib/stdlib.ts | 94 ++++++++++++++++++++++---------------------- 1 file changed, 47 insertions(+), 47 deletions(-) diff --git a/src/stdlib/stdlib.ts b/src/stdlib/stdlib.ts index 056553687..f87600eeb 100644 --- a/src/stdlib/stdlib.ts +++ b/src/stdlib/stdlib.ts @@ -331,53 +331,53 @@ files["std/internal/cells.tact"] = "IGV4dGVuZHMgZnVuIGFzU2xpY2Uoc2VsZjogQ2VsbCk6IFNsaWNlIHsKICAgIHJldHVybiBzZWxmLmJlZ2luUGFyc2UoKTsKfQoKaW5saW5lIGV4dGVuZHMgZnVuIGFz" + "Q2VsbChzZWxmOiBTbGljZSk6IENlbGwgewogICAgcmV0dXJuIGJlZ2luQ2VsbCgpCiAgICAgICAgLnN0b3JlU2xpY2Uoc2VsZikKICAgICAgICAuZW5kQ2VsbCgpOwp9" + "CgppbmxpbmUgZXh0ZW5kcyBmdW4gYXNDZWxsKHNlbGY6IEJ1aWxkZXIpOiBDZWxsIHsKICAgIHJldHVybiBzZWxmLmVuZENlbGwoKTsKfQoKYXNtIGZ1biBlbXB0eUNl" + - "bGwoKTogQ2VsbCB7CiAgICA8YiBiPiBQVVNIUkVGIC8vIFB1cmUgZmlmdCkgIjxiIiBjcmVhdGVzIGEgYnVpbGRlciwgImI+IiB0dXJucyBpdCBpbnRvIGEgY2VsbCAo" + - "aW4gY29tcGlsZSB0aW1lKQp9Cgphc20gZnVuIGVtcHR5U2xpY2UoKTogU2xpY2UgewogICAgYnt9IFBVU0hTTElDRQp9CgovLy8gU3RydWN0IGZvciBob2xkaW5nIHZh" + - "bHVlcyBjb21wdXRlZCBieSB0aGUgYENlbGwuY29tcHV0ZURhdGFTaXplKClgIGFuZCBgU2xpY2UuY29tcHV0ZURhdGFTaXplKClgIGV4dGVuc2lvbiBmdW5jdGlvbnMu" + - "IEF2YWlsYWJsZSBzaW5jZSBUYWN0IDEuNi4wLgovLy8KLy8vIFNlZToKLy8vICogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtY2VsbHMjY2VsbGNv" + - "bXB1dGVkYXRhc2l6ZQovLy8gKiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvY29yZS1jZWxscyNzbGljZWNvbXB1dGVkYXRhc2l6ZQovLy8Kc3RydWN0IERh" + - "dGFTaXplIHsKICAgIC8vLyBUaGUgdG90YWwgbnVtYmVyIG9mIG5lc3RlZCBjZWxscywgaW5jbHVkaW5nIHRoZSBzdGFydGluZyBvbmUuCiAgICBjZWxsczogSW50OwoK" + - "ICAgIC8vLyBUaGUgdG90YWwgbnVtYmVyIG9mIGJpdHMgaW4gYWxsIG5lc3RlZCBjZWxscywgaW5jbHVkaW5nIHRoZSBzdGFydGluZyBvbmUuCiAgICBiaXRzOiBJbnQ7" + - "CgogICAgLy8vIFRoZSB0b3RhbCBudW1iZXIgb2YgcmVmcyBpbiBhbGwgbmVzdGVkIGNlbGxzLCBpbmNsdWRpbmcgdGhlIHN0YXJ0aW5nIG9uZS4KICAgIHJlZnM6IElu" + - "dDsKfQoKLy8vIEV4dGVuc2lvbiBmdW5jdGlvbiBmb3IgdGhlIGBDZWxsYC4gQXZhaWxhYmxlIHNpbmNlIFRhY3QgMS42LjAuCi8vLwovLy8gQ29tcHV0ZXMgYW5kIHJl" + - "dHVybnMgdGhlIG51bWJlciBvZiBkaXN0aW5jdCBjZWxscywgYml0cyBhbmQgcmVmcyBpbiB0aGUgYENlbGxgIGJ5IHVzaW5nIGEgZGVwdGgtZmlyc3Qgc2VhcmNoIChE" + - "RlMpIGFsZ29yaXRobSwgcmVjdXJzaXZlbHkgdHJhdmVyc2luZyBlYWNoIHJlZmVyZW5jZWQgY2VsbC4gVGhpcyBmdW5jdGlvbiBpcyBjb21wdXRhdGlvbmFsbHkgZXhw" + - "ZW5zaXZlIGFuZCBjYW4gY29uc3VtZSBhIGxvdCBvZiBnYXMuIElmIGBzZWxmYCBpcyBgbnVsbGAsIHJldHVybnMgYERhdGFTaXplYCB3aXRoIGFsbCBmaWVsZHMgc2V0" + - "IHRvIDAuCi8vLwovLy8gVGhlIHJlc3VsdHMgYXJlIHBhY2tlZCBpbnRvIGEgYERhdGFTaXplYCBTdHJ1Y3QgY29uc2lzdGluZyBvZjoKLy8vICogYGNlbGxzOiBJbnRg" + - "LCB0aGUgdG90YWwgbnVtYmVyIG9mIG5lc3RlZCBjZWxscywgaW5jbHVkaW5nIHRoZSBzdGFydGluZyBvbmUKLy8vICogYGJpdHM6IEludGAsIHRoZSB0b3RhbCBudW1i" + - "ZXIgb2YgYml0cyBpbiBhbGwgbmVzdGVkIGNlbGxzLCBpbmNsdWRpbmcgdGhlIHN0YXJ0aW5nIG9uZQovLy8gKiBgcmVmczogSW50YCwgdGhlIHRvdGFsIG51bWJlciBv" + - "ZiByZWZzIGluIGFsbCBuZXN0ZWQgY2VsbHMsIGluY2x1ZGluZyB0aGUgc3RhcnRpbmcgb25lCi8vLwovLy8gSWYgdGhlIHNwZWNpZmllZCBgbWF4Q2VsbHNgIHZhbHVl" + - "IGlzbid0IGVub3VnaCB0byB0cmF2ZXJzZSBhbGwgY2VsbHMgaW5jbHVkaW5nIHRoZSBzdGFydGluZyBvbmUsIGFuIGV4Y2VwdGlvbiB3aXRoIGV4aXQgY29kZSA4IGlz" + - "IHRocm93bjogYENlbGwgb3ZlcmZsb3dgLgovLy8KLy8vIEF0dGVtcHRzIHRvIHNwZWNpZnkgYSBuZWdhdGl2ZSB2YWx1ZSBvZiBgbWF4Q2VsbHNgIHRocm93IGFuIGV4" + - "Y2VwdGlvbiB3aXRoIGV4aXQgY29kZSA1OiBgSW50ZWdlciBvdXQgb2YgZXhwZWN0ZWQgcmFuZ2VgLgovLy8KLy8vIGBgYHRhY3QKLy8vIGZ1biBleGFtcGxlKCkgewov" + - "Ly8gICAgIGxldCBjOiBDZWxsID0gYmVnaW5DZWxsKCkuc3RvcmVJbnQoNDIsIDcpLnN0b3JlUmVmKGVtcHR5Q2VsbCgpKS5lbmRDZWxsKCk7Ci8vLyAgICAgdHJ5IHsK" + - "Ly8vICAgICAgICAgbGV0IGRhdGFTaXplOiBEYXRhU2l6ZSA9IGMuY29tcHV0ZURhdGFTaXplKDIpOwovLy8gICAgICAgICBkYXRhU2l6ZS5jZWxsczsgLy8gMgovLy8g" + - "ICAgICAgICBkYXRhU2l6ZS5iaXRzOyAgLy8gNwovLy8gICAgICAgICBkYXRhU2l6ZS5yZWZzOyAgLy8gMQovLy8gICAgIH0gY2F0Y2ggKGV4aXRDb2RlKSB7Ci8vLyAg" + - "ICAgICAgIC8vIGlmIG1heENlbGxzIHdhcyBpbnN1ZmZpY2llbnQgdG8gdHJhdmVyc2UgdGhlIGNlbGwKLy8vICAgICAgICAgLy8gYW5kIGFsbCBvZiBpdHMgcmVmZXJl" + - "bmNlcywgdGhlIGV4aXRDb2RlIGhlcmUgd291bGQgYmUgOAovLy8gICAgIH0KLy8vIH0KLy8vIGBgYAovLy8KLy8vIFNlZTogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5v" + - "cmcvcmVmL2NvcmUtY2VsbHMjY2VsbGNvbXB1dGVkYXRhc2l6ZQovLy8KYXNtIGV4dGVuZHMgZnVuIGNvbXB1dGVEYXRhU2l6ZShzZWxmOiBDZWxsPywgbWF4Q2VsbHM6" + - "IEludCk6IERhdGFTaXplIHsgQ0RBVEFTSVpFIH0KCi8vLyBFeHRlbnNpb24gZnVuY3Rpb24gZm9yIHRoZSBgU2xpY2VgLiBBdmFpbGFibGUgc2luY2UgVGFjdCAxLjYu" + - "MC4KLy8vCi8vLyBTaW1pbGFyIHRvIGBDZWxsLmNvbXB1dGVEYXRhU2l6ZSgpYCwgYnV0IGRvZXNuJ3QgdGFrZSBpbnRvIGFjY291bnQgdGhlIGNlbGwgdGhhdCBjb250" + - "YWlucyB0aGUgYFNsaWNlYCBpdHNlbGYuIEhvd2V2ZXIsIGFjY291bnRzIGZvciBpdHMgYml0cyBhbmQgcmVmcy4KLy8vCi8vLyBUaGUgcmVzdWx0cyBhcmUgcGFja2Vk" + - "IGludG8gYSBgRGF0YVNpemVgIFN0cnVjdCBjb25zaXN0aW5nIG9mOgovLy8gKiBgY2VsbHM6IEludGAsIHRoZSB0b3RhbCBudW1iZXIgb2YgbmVzdGVkIGNlbGxzLCBp" + - "bmNsdWRpbmcgdGhlIHN0YXJ0aW5nIG9uZQovLy8gKiBgYml0czogSW50YCwgdGhlIHRvdGFsIG51bWJlciBvZiBiaXRzIGluIGFsbCBuZXN0ZWQgY2VsbHMsIGluY2x1" + - "ZGluZyB0aGUgc3RhcnRpbmcgb25lCi8vLyAqIGByZWZzOiBJbnRgLCB0aGUgdG90YWwgbnVtYmVyIG9mIHJlZnMgaW4gYWxsIG5lc3RlZCBjZWxscywgaW5jbHVkaW5n" + - "IHRoZSBzdGFydGluZyBvbmUKLy8vCi8vLyBJZiB0aGUgc3BlY2lmaWVkIGBtYXhDZWxsc2AgdmFsdWUgaXNuJ3QgZW5vdWdoIHRvIHRyYXZlcnNlIGFsbCBjZWxscyAq" + - "Km5vdCoqIGluY2x1ZGluZyB0aGUgc3RhcnRpbmcgb25lLCBhbiBleGNlcHRpb24gd2l0aCBleGl0IGNvZGUgOCBpcyB0aHJvd246IGBDZWxsIG92ZXJmbG93YC4KLy8v" + - "Ci8vLyBBdHRlbXB0cyB0byBzcGVjaWZ5IGEgbmVnYXRpdmUgdmFsdWUgb2YgYG1heENlbGxzYCB0aHJvdyBhbiBleGNlcHRpb24gd2l0aCBleGl0IGNvZGUgNTogYElu" + - "dGVnZXIgb3V0IG9mIGV4cGVjdGVkIHJhbmdlYC4KLy8vCi8vLyBgYGB0YWN0Ci8vLyBmdW4gZXhhbXBsZSgpIHsKLy8vICAgICBsZXQgczogU2xpY2UgPSBiZWdpbkNl" + - "bGwoKS5zdG9yZUludCg0MiwgNykuc3RvcmVSZWYoZW1wdHlDZWxsKCkpLmFzU2xpY2UoKTsKLy8vICAgICB0cnkgewovLy8gICAgICAgICBsZXQgZGF0YVNpemU6IERh" + - "dGFTaXplID0gcy5jb21wdXRlRGF0YVNpemUoMSk7Ci8vLyAgICAgICAgIGRhdGFTaXplLmNlbGxzOyAvLyAxCi8vLyAgICAgICAgIGRhdGFTaXplLmJpdHM7ICAvLyA3" + - "Ci8vLyAgICAgICAgIGRhdGFTaXplLnJlZnM7ICAvLyAxCi8vLyAgICAgfSBjYXRjaCAoZXhpdENvZGUpIHsKLy8vICAgICAgICAgLy8gaWYgbWF4Q2VsbHMgd2FzIGlu" + - "c3VmZmljaWVudCB0byB0cmF2ZXJzZSB0aGUgY2VsbAovLy8gICAgICAgICAvLyBhbmQgYWxsIG9mIGl0cyByZWZlcmVuY2VzLCB0aGUgZXhpdENvZGUgaGVyZSB3b3Vs" + - "ZCBiZSA4Ci8vLyAgICAgfQovLy8gfQovLy8gYGBgCi8vLwovLy8gU2VlOiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvY29yZS1jZWxscyNzbGljZWNvbXB1" + - "dGVkYXRhc2l6ZQovLy8KYXNtIGV4dGVuZHMgZnVuIGNvbXB1dGVEYXRhU2l6ZShzZWxmOiBTbGljZSwgbWF4Q2VsbHM6IEludCk6IERhdGFTaXplIHsgU0RBVEFTSVpF" + - "IH0KCi8vLyBFeHRlbnNpb24gZnVuY3Rpb24gZm9yIHRoZSBgQ2VsbGAuIEF2YWlsYWJsZSBzaW5jZSBUYWN0IDEuNi4wLgovLy8KLy8vIENvbXB1dGVzIGFuZCByZXR1" + - "cm5zIHRoZSBgSW50YCBkZXB0aCBvZiB0aGUgYENlbGxgLiBQcm9kdWNlcyAwIGlmIHRoZSBgQ2VsbGAgaGFzIG5vIHJlZmVyZW5jZXMsIG90aGVyd2lzZSAxIHBsdXMg" + - "dGhlIG1heGltdW0gb2YgdGhlIGRlcHRocyBvZiB0aGUgcmVmZXJlbmNlZCBjZWxscy4gSWYgYyBpcyBudWxsLCByZXR1cm5zIHplcm8uCi8vLwovLy8gYGBgdGFjdAov" + - "Ly8gZnVuIGV4YW1wbGUoKSB7Ci8vLyAgICAgbGV0IGM6IENlbGwgPSBiZWdpbkNlbGwoKS5zdG9yZUludCg0MiwgNykuZW5kQ2VsbCgpOwovLy8gICAgIGxldCBkZXB0" + - "aDogSW50ID0gYy5kZXB0aCgpOyAvLyAwCi8vLyB9Ci8vLyBgYGAKLy8vCi8vLyBTZWU6IGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL3JlZi9jb3JlLWNlbGxzI2Nl" + - "bGxkZXB0aAovLy8KYXNtIGV4dGVuZHMgZnVuIGRlcHRoKHNlbGY6IENlbGw/KTogSW50IHsgQ0RFUFRIIH0KCg=="; + "bGwoKTogQ2VsbCB7CiAgICA8YiBiPiBQVVNIUkVGIC8vIFB1cmUgRmlmdDogIjxiIiBjcmVhdGVzIGEgYnVpbGRlciwgImI+IiB0dXJucyBpdCBpbnRvIGEgY2VsbCBh" + + "dCBjb21waWxlIHRpbWUKfQoKYXNtIGZ1biBlbXB0eVNsaWNlKCk6IFNsaWNlIHsKICAgIGJ7fSBQVVNIU0xJQ0UKfQoKLy8vIFN0cnVjdCBmb3IgaG9sZGluZyB2YWx1" + + "ZXMgY29tcHV0ZWQgYnkgdGhlIGBDZWxsLmNvbXB1dGVEYXRhU2l6ZSgpYCBhbmQgYFNsaWNlLmNvbXB1dGVEYXRhU2l6ZSgpYCBleHRlbnNpb24gZnVuY3Rpb25zLiBB" + + "dmFpbGFibGUgc2luY2UgVGFjdCAxLjYuMC4KLy8vCi8vLyBTZWU6Ci8vLyAqIGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3JnL3JlZi9jb3JlLWNlbGxzI2NlbGxjb21w" + + "dXRlZGF0YXNpemUKLy8vICogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtY2VsbHMjc2xpY2Vjb21wdXRlZGF0YXNpemUKLy8vCnN0cnVjdCBEYXRh" + + "U2l6ZSB7CiAgICAvLy8gVGhlIHRvdGFsIG51bWJlciBvZiBuZXN0ZWQgY2VsbHMsIGluY2x1ZGluZyB0aGUgc3RhcnRpbmcgb25lLgogICAgY2VsbHM6IEludDsKCiAg" + + "ICAvLy8gVGhlIHRvdGFsIG51bWJlciBvZiBiaXRzIGluIGFsbCBuZXN0ZWQgY2VsbHMsIGluY2x1ZGluZyB0aGUgc3RhcnRpbmcgb25lLgogICAgYml0czogSW50OwoK" + + "ICAgIC8vLyBUaGUgdG90YWwgbnVtYmVyIG9mIHJlZnMgaW4gYWxsIG5lc3RlZCBjZWxscywgaW5jbHVkaW5nIHRoZSBzdGFydGluZyBvbmUuCiAgICByZWZzOiBJbnQ7" + + "Cn0KCi8vLyBFeHRlbnNpb24gZnVuY3Rpb24gZm9yIHRoZSBgQ2VsbGAuIEF2YWlsYWJsZSBzaW5jZSBUYWN0IDEuNi4wLgovLy8KLy8vIENvbXB1dGVzIGFuZCByZXR1" + + "cm5zIHRoZSBudW1iZXIgb2YgZGlzdGluY3QgY2VsbHMsIGJpdHMgYW5kIHJlZnMgaW4gdGhlIGBDZWxsYCBieSB1c2luZyBhIGRlcHRoLWZpcnN0IHNlYXJjaCAoREZT" + + "KSBhbGdvcml0aG0sIHJlY3Vyc2l2ZWx5IHRyYXZlcnNpbmcgZWFjaCByZWZlcmVuY2VkIGNlbGwuIFRoaXMgZnVuY3Rpb24gaXMgY29tcHV0YXRpb25hbGx5IGV4cGVu" + + "c2l2ZSBhbmQgY2FuIGNvbnN1bWUgYSBsb3Qgb2YgZ2FzLiBJZiBgc2VsZmAgaXMgYG51bGxgLCByZXR1cm5zIGBEYXRhU2l6ZWAgd2l0aCBhbGwgZmllbGRzIHNldCB0" + + "byAwLgovLy8KLy8vIFRoZSByZXN1bHRzIGFyZSBwYWNrZWQgaW50byBhIGBEYXRhU2l6ZWAgU3RydWN0IGNvbnNpc3Rpbmcgb2Y6Ci8vLyAqIGBjZWxsczogSW50YCwg" + + "dGhlIHRvdGFsIG51bWJlciBvZiBuZXN0ZWQgY2VsbHMsIGluY2x1ZGluZyB0aGUgc3RhcnRpbmcgb25lCi8vLyAqIGBiaXRzOiBJbnRgLCB0aGUgdG90YWwgbnVtYmVy" + + "IG9mIGJpdHMgaW4gYWxsIG5lc3RlZCBjZWxscywgaW5jbHVkaW5nIHRoZSBzdGFydGluZyBvbmUKLy8vICogYHJlZnM6IEludGAsIHRoZSB0b3RhbCBudW1iZXIgb2Yg" + + "cmVmcyBpbiBhbGwgbmVzdGVkIGNlbGxzLCBpbmNsdWRpbmcgdGhlIHN0YXJ0aW5nIG9uZQovLy8KLy8vIElmIHRoZSBzcGVjaWZpZWQgYG1heENlbGxzYCB2YWx1ZSBp" + + "c24ndCBlbm91Z2ggdG8gdHJhdmVyc2UgYWxsIGNlbGxzIGluY2x1ZGluZyB0aGUgc3RhcnRpbmcgb25lLCBhbiBleGNlcHRpb24gd2l0aCBleGl0IGNvZGUgOCBpcyB0" + + "aHJvd246IGBDZWxsIG92ZXJmbG93YC4KLy8vCi8vLyBBdHRlbXB0cyB0byBzcGVjaWZ5IGEgbmVnYXRpdmUgdmFsdWUgb2YgYG1heENlbGxzYCB0aHJvdyBhbiBleGNl" + + "cHRpb24gd2l0aCBleGl0IGNvZGUgNTogYEludGVnZXIgb3V0IG9mIGV4cGVjdGVkIHJhbmdlYC4KLy8vCi8vLyBgYGB0YWN0Ci8vLyBmdW4gZXhhbXBsZSgpIHsKLy8v" + + "ICAgICBsZXQgYzogQ2VsbCA9IGJlZ2luQ2VsbCgpLnN0b3JlSW50KDQyLCA3KS5zdG9yZVJlZihlbXB0eUNlbGwoKSkuZW5kQ2VsbCgpOwovLy8gICAgIHRyeSB7Ci8v" + + "LyAgICAgICAgIGxldCBkYXRhU2l6ZTogRGF0YVNpemUgPSBjLmNvbXB1dGVEYXRhU2l6ZSgyKTsKLy8vICAgICAgICAgZGF0YVNpemUuY2VsbHM7IC8vIDIKLy8vICAg" + + "ICAgICAgZGF0YVNpemUuYml0czsgIC8vIDcKLy8vICAgICAgICAgZGF0YVNpemUucmVmczsgIC8vIDEKLy8vICAgICB9IGNhdGNoIChleGl0Q29kZSkgewovLy8gICAg" + + "ICAgICAvLyBpZiBtYXhDZWxscyB3YXMgaW5zdWZmaWNpZW50IHRvIHRyYXZlcnNlIHRoZSBjZWxsCi8vLyAgICAgICAgIC8vIGFuZCBhbGwgb2YgaXRzIHJlZmVyZW5j" + + "ZXMsIHRoZSBleGl0Q29kZSBoZXJlIHdvdWxkIGJlIDgKLy8vICAgICB9Ci8vLyB9Ci8vLyBgYGAKLy8vCi8vLyBTZWU6IGh0dHBzOi8vZG9jcy50YWN0LWxhbmcub3Jn" + + "L3JlZi9jb3JlLWNlbGxzI2NlbGxjb21wdXRlZGF0YXNpemUKLy8vCmFzbSBleHRlbmRzIGZ1biBjb21wdXRlRGF0YVNpemUoc2VsZjogQ2VsbD8sIG1heENlbGxzOiBJ" + + "bnQpOiBEYXRhU2l6ZSB7IENEQVRBU0laRSB9CgovLy8gRXh0ZW5zaW9uIGZ1bmN0aW9uIGZvciB0aGUgYFNsaWNlYC4gQXZhaWxhYmxlIHNpbmNlIFRhY3QgMS42LjAu" + + "Ci8vLwovLy8gU2ltaWxhciB0byBgQ2VsbC5jb21wdXRlRGF0YVNpemUoKWAsIGJ1dCBkb2Vzbid0IHRha2UgaW50byBhY2NvdW50IHRoZSBjZWxsIHRoYXQgY29udGFp" + + "bnMgdGhlIGBTbGljZWAgaXRzZWxmLiBIb3dldmVyLCBhY2NvdW50cyBmb3IgaXRzIGJpdHMgYW5kIHJlZnMuCi8vLwovLy8gVGhlIHJlc3VsdHMgYXJlIHBhY2tlZCBp" + + "bnRvIGEgYERhdGFTaXplYCBTdHJ1Y3QgY29uc2lzdGluZyBvZjoKLy8vICogYGNlbGxzOiBJbnRgLCB0aGUgdG90YWwgbnVtYmVyIG9mIG5lc3RlZCBjZWxscywgaW5j" + + "bHVkaW5nIHRoZSBzdGFydGluZyBvbmUKLy8vICogYGJpdHM6IEludGAsIHRoZSB0b3RhbCBudW1iZXIgb2YgYml0cyBpbiBhbGwgbmVzdGVkIGNlbGxzLCBpbmNsdWRp" + + "bmcgdGhlIHN0YXJ0aW5nIG9uZQovLy8gKiBgcmVmczogSW50YCwgdGhlIHRvdGFsIG51bWJlciBvZiByZWZzIGluIGFsbCBuZXN0ZWQgY2VsbHMsIGluY2x1ZGluZyB0" + + "aGUgc3RhcnRpbmcgb25lCi8vLwovLy8gSWYgdGhlIHNwZWNpZmllZCBgbWF4Q2VsbHNgIHZhbHVlIGlzbid0IGVub3VnaCB0byB0cmF2ZXJzZSBhbGwgY2VsbHMgKipu" + + "b3QqKiBpbmNsdWRpbmcgdGhlIHN0YXJ0aW5nIG9uZSwgYW4gZXhjZXB0aW9uIHdpdGggZXhpdCBjb2RlIDggaXMgdGhyb3duOiBgQ2VsbCBvdmVyZmxvd2AuCi8vLwov" + + "Ly8gQXR0ZW1wdHMgdG8gc3BlY2lmeSBhIG5lZ2F0aXZlIHZhbHVlIG9mIGBtYXhDZWxsc2AgdGhyb3cgYW4gZXhjZXB0aW9uIHdpdGggZXhpdCBjb2RlIDU6IGBJbnRl" + + "Z2VyIG91dCBvZiBleHBlY3RlZCByYW5nZWAuCi8vLwovLy8gYGBgdGFjdAovLy8gZnVuIGV4YW1wbGUoKSB7Ci8vLyAgICAgbGV0IHM6IFNsaWNlID0gYmVnaW5DZWxs" + + "KCkuc3RvcmVJbnQoNDIsIDcpLnN0b3JlUmVmKGVtcHR5Q2VsbCgpKS5hc1NsaWNlKCk7Ci8vLyAgICAgdHJ5IHsKLy8vICAgICAgICAgbGV0IGRhdGFTaXplOiBEYXRh" + + "U2l6ZSA9IHMuY29tcHV0ZURhdGFTaXplKDEpOwovLy8gICAgICAgICBkYXRhU2l6ZS5jZWxsczsgLy8gMQovLy8gICAgICAgICBkYXRhU2l6ZS5iaXRzOyAgLy8gNwov" + + "Ly8gICAgICAgICBkYXRhU2l6ZS5yZWZzOyAgLy8gMQovLy8gICAgIH0gY2F0Y2ggKGV4aXRDb2RlKSB7Ci8vLyAgICAgICAgIC8vIGlmIG1heENlbGxzIHdhcyBpbnN1" + + "ZmZpY2llbnQgdG8gdHJhdmVyc2UgdGhlIGNlbGwKLy8vICAgICAgICAgLy8gYW5kIGFsbCBvZiBpdHMgcmVmZXJlbmNlcywgdGhlIGV4aXRDb2RlIGhlcmUgd291bGQg" + + "YmUgOAovLy8gICAgIH0KLy8vIH0KLy8vIGBgYAovLy8KLy8vIFNlZTogaHR0cHM6Ly9kb2NzLnRhY3QtbGFuZy5vcmcvcmVmL2NvcmUtY2VsbHMjc2xpY2Vjb21wdXRl" + + "ZGF0YXNpemUKLy8vCmFzbSBleHRlbmRzIGZ1biBjb21wdXRlRGF0YVNpemUoc2VsZjogU2xpY2UsIG1heENlbGxzOiBJbnQpOiBEYXRhU2l6ZSB7IFNEQVRBU0laRSB9" + + "CgovLy8gRXh0ZW5zaW9uIGZ1bmN0aW9uIGZvciB0aGUgYENlbGxgLiBBdmFpbGFibGUgc2luY2UgVGFjdCAxLjYuMC4KLy8vCi8vLyBDb21wdXRlcyBhbmQgcmV0dXJu" + + "cyB0aGUgYEludGAgZGVwdGggb2YgdGhlIGBDZWxsYC4gUHJvZHVjZXMgMCBpZiB0aGUgYENlbGxgIGhhcyBubyByZWZlcmVuY2VzLCBvdGhlcndpc2UgMSBwbHVzIHRo" + + "ZSBtYXhpbXVtIG9mIHRoZSBkZXB0aHMgb2YgdGhlIHJlZmVyZW5jZWQgY2VsbHMuIElmIGMgaXMgbnVsbCwgcmV0dXJucyB6ZXJvLgovLy8KLy8vIGBgYHRhY3QKLy8v" + + "IGZ1biBleGFtcGxlKCkgewovLy8gICAgIGxldCBjOiBDZWxsID0gYmVnaW5DZWxsKCkuc3RvcmVJbnQoNDIsIDcpLmVuZENlbGwoKTsKLy8vICAgICBsZXQgZGVwdGg6" + + "IEludCA9IGMuZGVwdGgoKTsgLy8gMAovLy8gfQovLy8gYGBgCi8vLwovLy8gU2VlOiBodHRwczovL2RvY3MudGFjdC1sYW5nLm9yZy9yZWYvY29yZS1jZWxscyNjZWxs" + + "ZGVwdGgKLy8vCmFzbSBleHRlbmRzIGZ1biBkZXB0aChzZWxmOiBDZWxsPyk6IEludCB7IENERVBUSCB9Cgo="; files["std/internal/config.tact"] = "YXNtIGZ1biBnZXRDb25maWdQYXJhbShpZDogSW50KTogQ2VsbD8geyBDT05GSUdPUFRQQVJBTSB9Cg=="; files["std/internal/context.tact"] = From b95ae718c5a73e50da731356557c0d6968635986 Mon Sep 17 00:00:00 2001 From: i582 <51853996+i582@users.noreply.github.com> Date: Thu, 6 Feb 2025 14:40:19 +0400 Subject: [PATCH 8/9] fixes --- src/test/benchmarks/benchmarks.spec.ts | 4 ++-- src/test/benchmarks/contracts/cells.tact | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/test/benchmarks/benchmarks.spec.ts b/src/test/benchmarks/benchmarks.spec.ts index 4c5bb6dcf..5f5f3287a 100644 --- a/src/test/benchmarks/benchmarks.spec.ts +++ b/src/test/benchmarks/benchmarks.spec.ts @@ -177,12 +177,12 @@ describe("benchmarks", () => { ); const gasUsed1 = ( - await blockchain.runGetMethod(testContract.address, "getEmptyCell") + await blockchain.runGetMethod(testContract.address, "emptyCell") ).gasUsed; expect(gasUsed1).toMatchSnapshot("gas used emptyCell"); const gasUsed2 = ( - await blockchain.runGetMethod(testContract.address, "getEmptySlice") + await blockchain.runGetMethod(testContract.address, "emptySlice") ).gasUsed; expect(gasUsed2).toMatchSnapshot("gas used emptySlice"); }); diff --git a/src/test/benchmarks/contracts/cells.tact b/src/test/benchmarks/contracts/cells.tact index e77962835..89ca6fc36 100644 --- a/src/test/benchmarks/contracts/cells.tact +++ b/src/test/benchmarks/contracts/cells.tact @@ -1,11 +1,11 @@ contract CellsCreation { receive() { } - get fun getEmptyCell(): Cell { + get fun emptyCell(): Cell { return emptyCell(); } - get fun getEmptySlice(): Slice { + get fun emptySlice(): Slice { return emptySlice(); } } From 84eb7263b36a83f94c084578b337e1adfbc2bb4a Mon Sep 17 00:00:00 2001 From: i582 <51853996+i582@users.noreply.github.com> Date: Thu, 6 Feb 2025 14:41:46 +0400 Subject: [PATCH 9/9] added entry to CHANGELOG.md --- dev-docs/CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/dev-docs/CHANGELOG.md b/dev-docs/CHANGELOG.md index e051f16e7..d4ed5e269 100644 --- a/dev-docs/CHANGELOG.md +++ b/dev-docs/CHANGELOG.md @@ -46,6 +46,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Better error message for `unresolved global function` error: PR [#1610](https://github.com/tact-lang/tact/pull/1610) - Better error message for `extend function without parameters` error: PR [#1624](https://github.com/tact-lang/tact/pull/1624) - Don't generate `lazy_deployment_completed` by default: PR [#1717](https://github.com/tact-lang/tact/pull/1717) +- Optimized `emptyCell()` and `emptySlice()` functions: PR [#1696](https://github.com/tact-lang/tact/pull/1696) ### Fixed