From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Authentication-Results: plum.tunbury.org; dkim=pass (1024-bit key; unprotected) header.d=inria.fr header.i=@inria.fr header.a=rsa-sha256 header.s=dc header.b=DLwZtyyY; dkim-atps=neutral Received-SPF: Pass (mailfrom) identity=mailfrom; client-ip=192.134.164.83; helo=mail2-relais-roc.national.inria.fr; envelope-from=caml-list-owner@inria.fr; receiver=tunbury.org Received: from mail2-relais-roc.national.inria.fr (mail2-relais-roc.national.inria.fr [192.134.164.83]) by plum.tunbury.org (Postfix) with ESMTP id 91616400A8 for ; Tue, 27 Jan 2026 12:42:06 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=inria.fr; s=dc; h=from:to:date:message-id:mime-version:subject:reply-to: sender:list-id:list-help:list-subscribe:list-unsubscribe: list-post:list-owner:list-archive; bh=m1KI80si0CU0C7NVW8KQSe4KbbOBY8kk7uIhq5fqpQw=; b=DLwZtyyYn3kXenmoNdmWlHfr/Nrsc1MHznKmq/BP5uEYTn7+g0g6OcbA oE0CWt4K5INLR2ZdfoiobqjeOgCdeGjWBebsMCYGQ73vv2JiqA+TbzF5s uC1A0VkR5WN7F2Y+IdUVh96ECFpN+fdh9R7ochVTjh9pr4doksy1ROsNx Y=; X-CSE-ConnectionGUID: pPMV+H9hR9WmUEaKsBvAZg== X-CSE-MsgGUID: KTI9vpGGTLSL2RQMxMekRg== Authentication-Results: mail2-relais-roc.national.inria.fr; dkim=none (message not signed) header.i=none; spf=SoftFail smtp.mailfrom=caml-list-owner@inria.fr; spf=None smtp.helo=postmaster@prod-sympa-app.inria.fr Received-SPF: SoftFail (mail2-relais-roc.national.inria.fr: domain of caml-list-owner@inria.fr is inclined to not designate 128.93.162.27 as permitted sender) identity=mailfrom; client-ip=128.93.162.27; receiver=mail2-relais-roc.national.inria.fr; envelope-from="caml-list-owner@inria.fr"; x-sender="caml-list-owner@inria.fr"; x-conformance=spf_only; x-record-type="v=spf1"; x-record-text="v=spf1 include:mailout.safebrands.com a:basic-mail.safebrands.com a:basic-mail01.safebrands.com a:basic-mail02.safebrands.com ip4:128.93.142.0/24 ip4:192.134.164.0/24 ip4:128.93.162.160 ip4:128.93.162.3 ip4:128.93.162.88 ip4:89.107.174.7 mx ~all" Received-SPF: None (mail2-relais-roc.national.inria.fr: no sender authenticity information available from domain of postmaster@prod-sympa-app.inria.fr) identity=helo; client-ip=128.93.162.27; receiver=mail2-relais-roc.national.inria.fr; envelope-from="caml-list-owner@inria.fr"; x-sender="postmaster@prod-sympa-app.inria.fr"; x-conformance=spf_only X-IronPort-AV: E=Sophos;i="6.21,257,1763420400"; d="scan'208,217";a="260549922" Received: from prod-sympa-app.inria.fr ([128.93.162.27]) by mail2-relais-roc.national.inria.fr with ESMTP; 27 Jan 2026 13:42:03 +0100 Received: by prod-sympa-app.inria.fr (Postfix, from userid 990) id 3D88F8279E; Tue, 27 Jan 2026 13:42:03 +0100 (CET) Received: from mail3-relais-sop.national.inria.fr (mail3-relais-sop.national.inria.fr [192.134.164.104]) by prod-sympa-app.inria.fr (Postfix) with ESMTP id 2A75682461 for ; Tue, 27 Jan 2026 13:41:53 +0100 (CET) X-CSE-ConnectionGUID: WBDEyr9xSEWVp7+EjmeGuw== X-CSE-MsgGUID: ngqwKbEdRVykTg9KHSUP8w== IronPort-SDR: 6978b28f_gZMldyQS7o3tHdikRdr9zReWDvjZ//AE7v6+IeDvL1yQlRD nDHw2h9q/MhPxY71qJ234BnTLe6m5b2DEqXJGaA== X-ThreatScanner-Verdict: Negative X-IPAS-Result: =?us-ascii?q?A0HaAQApsnhpjyIeaIFaFgcBAQEBCQESAQUFAYIQgT2BB?= =?us-ascii?q?BoBbF8ZGgcISQOEVYFjgWyOJTOcFYFpgSwWIxUBAwENLgEFGgECBAEBAwECA?= =?us-ascii?q?YNJcUYCFox4Ah8GAQQ0EwECBAEBAQEDAgMBAQEBAQEBAQENAQEFAQEBAgEBA?= =?us-ascii?q?gQGAQIQAQEBAQEBOQVJhhUHMw2CRRk4YBFlCQYwAQEBAQEBAQEBAQEBAQEBA?= =?us-ascii?q?QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQIEBwEBBxwNEz8cCQQGEwEBO?= =?us-ascii?q?BgjAxAEAQYDAgQNATUXARIUBoJoAYIiAk8DBAEMBpYdm056fzOBAYIMAQEGg?= =?us-ascii?q?Qg+AgELAgIDGCUB2hGBZwmBTYVugkobAQUlSWsBAoRJhD0nD4FVRIEUAYILb?= =?us-ascii?q?m+CYQEBAQEBgSMEAQEMBQIBCAIfJAmDJYJpghEVehQdghwshyQGglGHQYFEI?= =?us-ascii?q?gMmMywBVRMXCwcFXoEIAyovLW4yHYEjPhcyWBsHBV+Ifw+JGYFrVwMLbT03F?= =?us-ascii?q?BuPWkIZGiqBNC8OHx8+GwkCDwkJCgEbDgEBIAI2DgoSDwkBGQ4DCAQJDgQSB?= =?us-ascii?q?AMICBcGCwsCHg8DknwDKgOdcZNZgQo0B4QfgV4GDIkIgSaWB4QEgVeLPIcek?= =?us-ascii?q?jYilnyBaCKJXoEmCYFva4h6jDoNH4VYgX8jbD8BGgMMBzMaMEOCMwEBMgkKP?= =?us-ascii?q?BwPV4hfhEkiDBaDXhAjgQuBDBp6ehckCYJdujVCNQIBAQouAgcBCgEBAwmFR?= =?us-ascii?q?R0BAYwHM4FLAQE?= IronPort-PHdr: A9a23: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 IronPort-Data: A9a23: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 IronPort-HdrOrdr: A9a23:TSJbwqx+dBbh1sLYKS6OKrPwE71zdoMgy1knxilNoH1uA66lfq WV9pkmPHDP6Qr5NEtNpTniAtjifZq/z/5ICOAqVN/IYOCMggWVxe9ZgrfK8nnJJGnV9+JW16 tsGpIObeHYPBxdlsi/xAG5Fr8bsb66GU2T9IPj80s= X-Talos-CUID: =?us-ascii?q?9a23=3Ajwwxa2jOsry845Bk/x8GHb4FVDJuTVfx4WbKcl+?= =?us-ascii?q?DJFlXUOLWZF2V9Yx5jJ87?= X-Talos-MUID: =?us-ascii?q?9a23=3AZ3cobgxRLvvO7MuakjVZmYhTtj6aqKKhEV8um7g?= =?us-ascii?q?KgfeVNhB/ahS9twmPEpByfw=3D=3D?= X-IronPort-Anti-Spam-Filtered: true X-IronPort-AV: E=Sophos;i="6.21,257,1763420400"; d="scan'208,217";a="137142978" X-MGA-submission: =?us-ascii?q?MDFR1LJpmQrzupCJA4MdZ8NVamjle1aDNWTZAc?= =?us-ascii?q?sKEPDc48yr5H42NogScpJxMmPHoAq/gk2xhWQsR8zh+8RW0RTs6MCEa6?= =?us-ascii?q?7PGBNhvM0RRLXuKPE2Jr8s7h0wo0BKKuA4HYk1ZG8lOWv6tijYKXHIp4?= =?us-ascii?q?NtBMU/xN9gVr+nesIK35C3iw=3D=3D?= Received: from mx1.polytechnique.org ([129.104.30.34]) by mail3-smtp-sop.national.inria.fr with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 27 Jan 2026 13:41:52 +0100 Received: from TM.local (unknown [185.127.243.192]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ssl.polytechnique.org (Postfix) with ESMTPSA id 8EB451813E; Tue, 27 Jan 2026 13:41:50 +0100 (CET) From: Alan Schmitt To: "lwn" , caml-list@inria.fr Date: Tue, 27 Jan 2026 13:41:48 +0100 Message-ID: MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="=-=-=" X-AV-Checked: ClamAV using ClamSMTP at svoboda.polytechnique.org (Tue Jan 27 13:41:50 2026 +0100 (CET)) X-Spam-Flag: Unsure, tests=bogofilter, spamicity=0.498609, queueID=DCFD01814C X-Org-Mail: alan.schmitt.1995@polytechnique.org Subject: [Caml-list] Attn: Development Editor, Latest OCaml Weekly News Reply-To: Alan Schmitt X-Loop: caml-list@inria.fr X-Sequence: 19440 Errors-To: caml-list-owner@inria.fr Precedence: list Precedence: bulk Sender: caml-list-request@inria.fr X-no-archive: yes List-Id: List-Help: , List-Subscribe: , List-Unsubscribe: , List-Post: List-Owner: List-Archive: Archived-At: --=-=-= Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: base64 SGVsbG8NCg0KSGVyZSBpcyB0aGUgbGF0ZXN0IE9DYW1sIFdlZWtseSBOZXdzLCBmb3IgdGhlIHdl ZWsgb2YgSmFudWFyeSAyMCB0byAyNywNCjIwMjYuDQoNClRhYmxlIG9mIENvbnRlbnRzDQrilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIANCg0KbHd0LXRv LWVpbzogQXV0b21hdGluZyB0aGUgbWVjaGFuaWNhbCBwYXJ0cyBvZiBMd3QgLT4gRWlvIG1pZ3Jh dGlvbg0KVGhlIG5ldyBvd25lcnMtbWFpbnRhaW5lcnMgb2YgRHJlYW0NClNsaXBzaG93IQ0KQmFu Y29zOiBBIHBlcnNpc3RlbnQgS2V5LVZhbHVlIHN0b3JlIGJhc2VkIG9uIFJPV0VYL1AtQVJUDQpy ZXN0cmljdGVkIDEuMi4wIGxpbWl0IHdoaWNoIHN5c3RlbSBvcGVyYXRpb25zIGFuZCB3aGljaCBw YXJ0cyBvZiB0aGUgZmlsZXN5c3RlbSB5b3VyIHByb2dyYW0gY2FuIGFjY2Vzcw0KZGVhZF9jb2Rl X2FuYWx5emVyIDEuMS4wDQpPQ2FtbCBzZWN1cml0eSB0ZWFtDQpQcm9wb3NhbDogbWFrZSB0aGUg bWluaW11bSB0ZXN0ZWQgb3BhbSAyLjEgYW5kIGhpZ2hlcg0KY3NleHAtcXVlcnkgaW5pdGlhbCBy ZWxlYXNlDQpPdGhlciBPQ2FtbCBOZXdzDQpPbGQgQ1dODQoNCg0KbHd0LXRvLWVpbzogQXV0b21h dGluZyB0aGUgbWVjaGFuaWNhbCBwYXJ0cyBvZiBMd3QgLT4gRWlvIG1pZ3JhdGlvbg0K4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQDQoNCiAgQXJjaGl2ZToNCiAgPGh0dHBzOi8vZGlzY3Vz cy5vY2FtbC5vcmcvdC9hbm4tbHd0LXRvLWVpby1hdXRvbWF0aW5nLXRoZS1tZWNoYW5pY2FsLXBh cnRzLW9mLWx3dC1laW8tbWlncmF0aW9uLzE3Njk2LzE+DQoNCg0Kb3VnLXQgYW5ub3VuY2VkDQri lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIANCg0KICBIaSBldmVy eW9uZSwNCg0KICBMaWtlIG1hbnkgb2YgeW91LCBJ4oCZdmUgYmVlbiBsb29raW5nIGludG8gbWln cmF0aW5nIG15IGxpYnJhcmllcyBmcm9tDQogIEx3dCB0byBFaW8gdG8gdGFrZSBhZHZhbnRhZ2Ug b2YgT0NhbWwgNeKAmXMgZGlyZWN0LXN0eWxlDQogIGNvbmN1cnJlbmN5LiBXaGlsZSB0aGUgbWFu dWFsIG1pZ3JhdGlvbiBndWlkZXMgYXJlIGV4Y2VsbGVudCwgSSBmb3VuZA0KICBteXNlbGYgbWFr aW5nIHRoZSBzYW1lIG1lY2hhbmljYWwgY2hhbmdlcyBvdmVyIGFuZCBvdmVy4oCUZmxhdHRlbmlu Zw0KICBiaW5kcywgdW53cmFwcGluZyBwcm9taXNlcywgYW5kIHJld3JpdGluZyBtYXBzLg0KDQog IFNvLCBJIGJ1aWx0ICpgbHd0LXRvLWVpbycqLCBhIHRvb2wgdGhhdCBhdXRvbWF0ZXMgdGhlIGJv cmluZyBwYXJ0cyBvZg0KICB0aGlzIHRyYW5zaXRpb24uDQoNCiAgKlJlcG86KiBbaHR0cHM6Ly9n aXRodWIuY29tL291Zy10L2x3dC10by1laW9dDQoNCg0KW2h0dHBzOi8vZ2l0aHViLmNvbS9vdWct dC9sd3QtdG8tZWlvXQ0KPGh0dHBzOi8vZ2l0aHViLmNvbS9vdWctdC9sd3QtdG8tZWlvPg0KDQpX aGF0IGl0IGRvZXMgKFRoZSBNYWdpYykNCuKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKV jOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjA0KDQogIEl0IHBhcnNlcyB5 b3VyIE9DYW1sIHNvdXJjZSBjb2RlIGFuZCBwZXJmb3JtcyBBU1QtbGV2ZWwgcmV3cml0ZXMgdG8N CiAgdHJhbnNmb3JtIG1vbmFkaWMgTHd0IHBhdHRlcm5zIGludG8gZGlyZWN0LXN0eWxlIEVpbyBj b2RlLg0KDQogICpJbnB1dCAoTHd0KToqDQoNCiAg4pSM4pSA4pSA4pSA4pSADQogIOKUgiBsZXQg ZmV0Y2hfZGF0YSBpZCA9DQogIOKUgiAgIEx3dC5iaW5kIChEYi5nZXRfdXNlciBpZCkgKGZ1biB1 c2VyIC0+DQogIOKUgiAgICAgRGIuZ2V0X3Bvc3RzIHVzZXIuaWQgPj49IChmdW4gcG9zdHMgLT4N CiAg4pSCICAgICAgIEx3dF9saXN0Lm1hcF9wIHByb2Nlc3MgcG9zdHMNCiAg4pSCICAgICApDQog IOKUgiAgICkNCiAg4pSU4pSA4pSA4pSA4pSADQoNCiAgKk91dHB1dCAoRWlvKSoNCg0KICDilIzi lIDilIDilIDilIANCiAg4pSCIGxldCBmZXRjaF9kYXRhIGlkID0NCiAg4pSCICAgbGV0IHVzZXIg PSBMd3RfZWlvLlByb21pc2UuYXdhaXRfbHd0IChEYi5nZXRfdXNlciBpZCkgaW4NCiAg4pSCICAg bGV0IHBvc3RzID0gTHd0X2Vpby5Qcm9taXNlLmF3YWl0X2x3dCAoRGIuZ2V0X3Bvc3RzIHVzZXIu aWQpIGluDQogIOKUgiAgIEVpby5GaWJlci5MaXN0Lm1hcCBwcm9jZXNzIHBvc3RzDQogIOKUlOKU gOKUgOKUgOKUgA0KDQoNCkN1cnJlbnQgU3RhdHVzICYgSGVscCBXYW50ZWQNCuKVjOKVjOKVjOKV jOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKV jOKVjOKVjOKVjOKVjOKVjA0KDQogIFRoaXMgaXMgY3VycmVudGx5IGFuICpNVlAqLiBJdCBoYW5k bGVzIHRoZSBtb3N0IGNvbW1vbiBwYXR0ZXJucyBJDQogIGVuY291bnRlcmVkIChiaW5kcywgYG1h cF9wJywgYHNsZWVwJywgYHJldHVybicpLCBidXQgdGhlcmUgaXMgcGxlbnR5DQogIG9mIHN1cmZh Y2UgYXJlYSBsZWZ0IHRvIGNvdmVyLg0KDQogIEknbSBsb29raW5nIGZvciBjb250cmlidXRvcnMg dG8gaGVscCBhZGQgcnVsZXMgZm9yIG90aGVyIGNvbW1vbg0KICBwYXR0ZXJucy4gSSd2ZSB0YWdn ZWQgYSBmZXcgaXNzdWVzIGFzICoiR29vZCBGaXJzdCBJc3N1ZXMiKiBpZiBhbnlvbmUNCiAgd2Fu dHMgdG8gZGlwIHRoZWlyIHRvZXMgaW50byBgcHB4bGliJyBhbmQgQVNUIHJld3JpdGluZzoNCg0K ICDigKIgKmBMd3QuY2F0Y2gnIC0+IGB0cnkvd2l0aCcqOiBUcmFuc2Zvcm1pbmcgbW9uYWRpYyBl cnJvciBoYW5kbGluZyB0bw0KICAgICBkaXJlY3Qgc3R5bGUgZXhjZXB0aW9ucy4NCiAg4oCiICpg THd0X2lvJyBzdXBwb3J0KjogTWFwcGluZyBsZWdhY3kgSU8gZnVuY3Rpb25zIHRvIEVpbyBidWZm ZXJzLg0KDQogIEZlZWRiYWNrLCBQUnMsIGFuZCAiSXQgYnJva2Ugb24gbXkgZmlsZSEiIHJlcG9y dHMgYXJlIGFsbCB2ZXJ5DQogIHdlbGNvbWUuDQoNCiAgSGFwcHkgaGFja2luZyENCg0KDQpUaGUg bmV3IG93bmVycy1tYWludGFpbmVycyBvZiBEcmVhbQ0K4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQDQoNCiAgQXJjaGl2ZToNCiAgPGh0dHBzOi8vZGlzY3Vz cy5vY2FtbC5vcmcvdC90aGUtbmV3LW93bmVycy1tYWludGFpbmVycy1vZi1kcmVhbS8xNzcxMi8x Pg0KDQoNCkFudG9uIEJhY2hpbiBhbm5vdW5jZWQNCuKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgA0KDQogIEkgYW0gdmVyeSBw bGVhc2VkIHRvIGFubm91bmNlIHRoYXQgW0RyZWFtXSwgdGhlIFdlYiBmcmFtZXdvcmssIGlzIG5v dw0KICBvd25lZCBhbmQgbWFpbnRhaW5lZCBieSBhIG5ldyB0ZWFtLCBvZjoNCg0KICDigKIgU2Fi aW5lIFNjaG1hbHR6IChAc2FiaW5lKSwgbWFpbnRhaW5lciBvZiBPQ2FtbC5vcmcNCiAg4oCiIFNl YmFzdGlhbiBXaWxsZW5icmluayAoIDxodHRwczovL2dpdGh1Yi5jb20vV2lsbGVuYnJpbms+ICks IGF1dGhvcg0KICAgIG9mIHRoZSBlZmZvcnQgdG8gcG9ydCBEcmVhbSB0byBFaW8NCiAg4oCiIFlh d2FyIEFtaW4gKEB5YXdhcmFtaW4pLCBhdXRob3Igb2YgZHJlYW0taHRtbCwgYW5kIHRoZSBXZWIg ZnJhbWV3b3JrDQogICAgUmVXZWINCg0KICDigKZhbW9uZyB0aGVpciBvdGhlciBwcm9qZWN0cyBh bmQgY29udHJpYnV0aW9ucyB0byB0aGUgT0NhbWwNCiAgY29tbXVuaXR5LiBBbGwgYXJlIG1ham9y IGFuZCBsb25nLXRlcm0gY29udHJpYnV0b3JzIHRvLCBhbmQgdXNlcnMgb2YsDQogIERyZWFtLg0K DQogIEnigJl2ZSBzdGVwcGVkIGJhY2sgZnJvbSBvd25lcnNoaXAgYW5kIG92ZXJhbGwgbWFpbnRl bmFuY2UsIGJ1dCB3aWxsDQogIHN0aWxsIHdvcmsgb24gcGFydHMgb2YgRHJlYW0gZXZlcnkgbm93 IGFuZCB0aGVuIGFzIGEgY29udHJpYnV0b3IsDQogIGFsb25nIHdpdGggYWxsIG9mIERyZWFt4oCZ cyBjb250cmlidXRvcnMgOnNsaWdodF9zbWlsZToNCg0KICBEcmVhbSBpcyBkaXNjdXNzZWQgaW4g dGhpcyBmb3J1bSwgaW4gaXRzIFtpc3N1ZSB0cmFja2VyXSwgWyN3ZWJkZXZdIGluDQogIHRoZSBP Q2FtbCBEaXNjb3JkLCBhbmQgWyNkcmVhbV0gb24gWnVsaXAuIERyZWFtIGhhcyBhIChyb3VnaGx5 KSB3ZWVrbHkNCiAgb3BlbiB2aWRlbyBjYWxsIG9uIERpc2NvcmQgZm9yIGNvbnRyaWJ1dG9ycyB0 byBkaXNjdXNzIHRlY2huaWNhbA0KICBpc3N1ZXMgd2l0aCBlYWNoIG90aGVyIGFuZCB3aXRoIG1h aW50YWluZXJzLg0KDQogIFdlbGNvbWUgdG8gU2FiaW5lLCBTZWJhc3RpYW4sIFlhd2FyLCB0aGUg bmV3IHRlYW0hDQoNCg0KW0RyZWFtXSA8aHR0cHM6Ly9naXRodWIuY29tL2NhbWx3b3Jrcy9kcmVh bT4NCg0KW2lzc3VlIHRyYWNrZXJdIDxodHRwczovL2dpdGh1Yi5jb20vY2FtbHdvcmtzL2RyZWFt L2lzc3Vlcz4NCg0KWyN3ZWJkZXZdDQo8aHR0cHM6Ly9kaXNjb3JkLmNvbS9jaGFubmVscy80MzY1 NjgwNjAyODgxNzIwNDIvNDM5MDYyNzQ0MTA1NDg0Mjg4Pg0KDQpbI2RyZWFtXSA8aHR0cHM6Ly9v Y2FtbC56dWxpcGNoYXQuY29tLyNuYXJyb3cvY2hhbm5lbC81NTYwNjMtZHJlYW0+DQoNCg0KU2xp cHNob3chDQrilZDilZDilZDilZDilZDilZDilZDilZDilZANCg0KICBBcmNoaXZlOiA8aHR0cHM6 Ly9kaXNjdXNzLm9jYW1sLm9yZy90L2Fubi1zbGlwc2hvdy8xNjMzNy8xNz4NCg0KDQpQYXVsLUVs bGlvdCBhbm5vdW5jZWQNCuKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgA0KDQogIEhlbGxvIQ0KDQogIEl0IGlzIGluIGEgc3RhdGUg b2Ygc2xpcGxlc3NuZXNzIHRoYXQgSSBhbm5vdW5jZSB0aGUgbmV3IHJlbGVhc2Ugb2YNCiAgU2xp cHNob3chDQoNCiAgKlNsaXBzaG93IDAuOC4wOiBMZXMgZ25vbWVzIHZvbGV1cnMgZGUgU2xpcHNo b3cqDQoNCiAgVGhpcyByZWxlYXNlIGNvbWVzIHdpdGggYSBoYW5kZnVsIG9mIGJ1Z2ZpeGVzLCBp biBwYXJ0aWN1bGFyIG9uIHRoZQ0KICBuZXcgYW5kIGV4cGVyaW1lbnRhbCByZWNvcmQtYW5kLXJl cGxheSBmb3IgZHJhd2luZ3MuDQoNCiAgQnV0IHRoZSBzdGFyIG9mIHRoZSByZWxlYXNlIGlzICp0 aGUgbmV3IFtkb2N1bWVudGF0aW9uXSohIEZvcg0KICBpbnN0YW5jZSwgdGhlIHR1dG9yaWFsIG9u IFtzdHJ1Y3R1cmluZyB5b3VyIHByZXNlbnRhdGlvbiB2aXN1YWxseV0NCiAgd2lsbCBhbGxvdyB5 b3UgdG8gY3JlYXRlIHByZXNlbnRhdGlvbnMgc3VjaCBhcyB0aGlzIG9uZSwgcHJlc2VudGluZw0K ICBTbGlwc2hvdydzIGJ1c2luZXNzIG1vZGVsOg0KDQogIDxodHRwczovL2dpdGh1Yi5jb20vdXNl ci1hdHRhY2htZW50cy9hc3NldHMvNDE1MzljNzgtZjk5OC00NTk3LTkzOTItNGQ1NTU0MzVkNWEz Pg0KDQogIFRoZSB0dXRvcmlhbHMgYWxzbyBpbmNsdWRlcyBsaXZlIGNvZGUgYmxvY2tzLCBhbmQg U2xpcHNob3cgaGFzIG5vdyBhDQogIFtkZWRpY2F0ZWQgd2Vic2l0ZV0uDQoNCiAgSGVyZSBpcyB0 aGUgZnVsbCBjaGFuZ2Vsb2chDQoNCg0KW2RvY3VtZW50YXRpb25dIDxodHRwczovL3NsaXBzaG93 LnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS8+DQoNCltzdHJ1Y3R1cmluZyB5b3VyIHByZXNlbnRh dGlvbiB2aXN1YWxseV0NCjxodHRwczovL3NsaXBzaG93LnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJs ZS92aXN1YWwtc3RydWN0dXJlLmh0bWw+DQoNCltkZWRpY2F0ZWQgd2Vic2l0ZV0gPGh0dHBzOi8v c2xpcHNob3cub3JnPg0KDQpGZWF0dXJlcw0K4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWMDQoNCiAg 4oCiIEFkZCBhICJtaXJyb3IgbW9kZSIgdG8gdGhlIHNwZWFrZXIgdmlldywgd2hpY2ggbWlycm9y cyB0aGUgZW50aXJlDQogICAgc2NyZWVuIHlvdSBhcmUgc2hhcmluZyB3aXRoIHRoZSBhdWRpZW5j ZSAoIzE4OCkNCiAg4oCiIEFkZCBzdXBwb3J0IGZvciBleHRlcm5hbCBmaWxlcyB0aHJvdWdoIENM SSBhbmQgZnJvbnRtYXR0ZXIgKCMxOTEpDQogIOKAoiBBZGQgc2hvcnRjdXQgdG8gZGVsZXRlIG9y IHVuc2VsZWN0IHNlbGVjdGlvbiBpbiBkcmF3aW5nIGVkaXRpbmcNCiAgICAoIzE5MikNCiAg4oCi IEFkZCBhICJDbG9zZSBlZGl0aW5nIHBhbmVsIiBidXR0b24gd2hlbiB0aGVyZSBhcmUgbm8gc3Ry b2tlcyAoIzE5MikNCiAg4oCiIERlZmF1bHQgZmlsZSBuYW1lcyBmb3IgZHJhd2luZyByZWNvcmRp bmcgZGVwZW5kIG9uIHRoZWlyIG5hbWVzDQogICAgKCMxOTIpDQogIOKAoiBJbXByb3ZlIGAtbycg YXJndW1lbnQgd3J0IGRpcmVjdG9yaWVzICgjMTkwKQ0KICDigKIgSW5saW5lIFNWR3MgaW5zdGVh ZCBvZiBhZGRpbmcgdGhlbSBhcyBpbWFnZXMsIGFsbG93aW5nIHRoZSB1c2Ugb2YNCiAgICBjbGFz c2VzIGFuZCBpZHMgaW4gU1ZHcyAoIzE5MCkNCiAg4oCiIFJld29yayB0aGUgZG9jcyEgKCMxOTAp DQoNCg0KRml4DQrilYzilYzilYwNCg0KICDigKIgRml4IHBhdXNlcyB0aW1lIG5vdCB1cGRhdGVk IGFmdGVyIGEgcmVyZWNvcmRpbmcgKCMxOTIpDQogIOKAoiBGaXggZHJhd2luZyBlZGl0aW5nIHNo b3J0Y3V0cyB0cmlnZ2VyaW5nIGV2ZW4gd2hlbiBmb2N1c2luZyBvbiBhDQogICAgdGV4dGFyZWEg KCMxOTIpDQogIOKAoiBGaXggaW50ZXJhY3Rpb24gYmV0d2VlbiBmaWVsZHMgYW5kIGRyYXdpbmcg ZWRpdGluZyBzaG9ydGN1dHMgKCMxOTIpDQogIOKAoiBGaXggb3JkZXIgb2YgYGNsZWFyJyBhbmQg YGRyYXcnIGFjdGlvbjogdGhlIGZpcnN0IGNvbWVzIGZpcnN0ICgjMTkyKQ0KICDigKIgVXNlIC53 b2ZmMiBmb3IgZW1iZWRkZWQgZm9udHMgKCMxOTApDQoNCg0KICBUaGFua3MgYWdhaW4gdG8gTkxO ZXQgZm9yIFtzdXBwb3J0aW5nXSB0aGUgZGV2ZWxvcG1lbnQgb2YgU2xpcHNob3chDQoNCg0KW3N1 cHBvcnRpbmddIDxodHRwczovL25sbmV0Lm5sL3Byb2plY3QvU2xpcHNob3cvPg0KDQoNCkJhbmNv czogQSBwZXJzaXN0ZW50IEtleS1WYWx1ZSBzdG9yZSBiYXNlZCBvbiBST1dFWC9QLUFSVA0K4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQDQoN CiAgQXJjaGl2ZToNCiAgPGh0dHBzOi8vZGlzY3Vzcy5vY2FtbC5vcmcvdC9hbm4tYmFuY29zLWEt cGVyc2lzdGVudC1rZXktdmFsdWUtc3RvcmUtYmFzZWQtb24tcm93ZXgtcC1hcnQvMTc3MTkvMT4N Cg0KDQpDYWxhc2NpYmV0dGEgUm9tYWluIGFubm91bmNlZA0K4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSADQoNCiAgSSBhbSBwbGVhc2VkIHRvIGFubm91bmNlIHRoZSBmaXJzdCByZWxlYXNl IG9mIFtiYW5jb3NdLCBvdXIgbmV3DQogIHBlcnNpc3RlbnQgS2V5LVZhbHVlIHN0b3JlLg0KDQog IEJhbmNvcyBpcyBhbiBpbXBsZW1lbnRhdGlvbiBvZiBhbiBBZGFwdGl2ZSBSYWRpeCBUcmVlIChb QVJUXSkgbW9kaWZpZWQNCiAgdG8gc3VwcG9ydCBwYXJhbGxlbCByZWFkcyBhbmQgd3JpdGVzIChb Uk9XRVhdKSBkaXJlY3RseSBvbiBhIGZpbGUNCiAgKGJhc2VkIG9uIHRoZSBbUkVDSVBFL1AtQVJU XSBhcHByb2FjaCkuDQoNCiAg4oCiIE91ciBwcm9qZWN0IGlzIGRlc2lnbmVkIGZvciBpbmRleGlu ZyB3aXRoIGZpbGUtYmFja2VkIHN0b3JhZ2UuDQogIOKAoiBXZSBwcm92aWRlIGFuIGltcGxlbWVu dGF0aW9uIGNvbXBhdGlibGUgd2l0aCB1bmlrZXJuZWxzLiBJdCBpcw0KICAgIGN1cnJlbnRseSBi ZWluZyB1c2VkIGJ5IFtrZXZpbl0sIGFuIEhUVFAvMS4xIHNlcnZlciB1bmlrZXJuZWwgdGhhdA0K ICAgIGV4cG9zZXMgcm91dGVzIGZvciBrZXkgaW5zZXJ0aW9uIGFuZCBsb29rdXAuDQogIOKAoiBU aGlzIHdvcmsgaXMgcGFydCBvZiBvdXIgYnJvYWRlciBnb2FsIHRvIGluZGV4IGVtYWlscyBieSB0 aGVpcg0KICAgIGBNZXNzYWdlLUlEJy4gQW4gZXh0ZW5zaW9uIG9mIG91ciB0b29sIFtibGF6ZV0g bm93IGFsbG93cyBzZWFyY2hpbmcNCiAgICB0aHJvdWdoIGFyY2hpdmVzIG5vdyAoaWYgeW91IGFy ZSBpbnRlcmVzdGluZyBhYm91dCBvdXIgYXJjaGl2ZQ0KICAgIHN5c3RlbSwgeW91IGNhbiB0YWtl IGEgbG9vayBbaGVyZV0pLiBUaGlzIGluZGV4aW5nIGFsc28gZW5hYmxlcw0KICAgIGVmZmljaWVu dCBlbWFpbCB0aHJlYWQgZXh0cmFjdGlvbiB1c2luZyBgSW4tUmVwbHktVG8nIGhlYWRlcnMuDQoN CiAgV2hpbGUgc3RpbGwgZXhwZXJpbWVudGFsLCB0aGUgcmVzdWx0cyDigJQgZXNwZWNpYWxseSB3 aGVuIHBhaXJlZCB3aXRoDQogIG91ciBbTWlvdV0gc2NoZWR1bGVyIOKAlCBhcmUgdmVyeSBwcm9t aXNpbmcuIFRoaXMgcmVsZWFzZSBvZiBbYmFuY29zXQ0KICBjb21lcyBhbG9uZ3NpZGUgc2V2ZXJh bCB1cGRhdGVzIGFjcm9zcyBvdXIgc3RhY2s6DQogIOKAoiBbZmx1eF06IE91ciBPQ2FtbCBzdHJl YW0gbGlicmFyeSBmb3IgTWlvdQ0KICDigKIgW2NhcnRvbl06IEZvciBtYW5pcHVsYXRpbmcgUEFD S3YyIGFyY2hpdmVzIChhcyB1c2VkIGJ5IEdpdCkNCiAg4oCiIFtic3RyXTogQSBsaWJyYXJ5IGZv ciBoYW5kbGluZyBiaWdieXRlcyBhbmQgbWVtb3J5IGJ1ZmZlcnMNCiAg4oCiIFtjYWNoZXRdOiBB IGxpYnJhcnkgdG8gY2FjaGUgYG1tYXAnIHN5c2NhbGwgcmVzdWx0cy4gTm90YWJseSwgdGhpcw0K ICAgIGluY2x1ZGUgc2lnbmlmaWNhbnQgd29yayBvbiBhbiBfYXN5bmNocm9ub3VzIHdyaXRlIHBp cGVsaW5lXyBmb3INCiAgICB1bmlrZXJuZWxzIG9uIGJsb2NrIGRldmljZXMNCg0KICBZb3UgY2Fu IGZpbmQgdGhlIHByb2plY3QgaGVyZTogPGh0dHBzOi8vZ2l0aHViLmNvbS9yb2J1ci1jb29wL2Jh bmNvcz4NCg0KICBGb3IgYSBkZWVwZXIgZGl2ZSBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBi YW5jb3MgYW5kIGl0cw0KICBhcHBsaWNhdGlvbiB0byBlbWFpbCBpbmRleGluZywgd2UgaGF2ZSBw cmVwYXJlZCBhIGRldGFpbGVkIGJsb2cgcG9zdA0KICBbaGVyZV0uDQoNCiAgSGFwcHkgaGFja2lu ZyENCg0KDQpbYmFuY29zXSA8aHR0cHM6Ly9naXRodWIuY29tL3JvYnVyLWNvb3AvYmFuY29zPg0K DQpbQVJUXSA8aHR0cHM6Ly9naXRodWIuY29tL2Rpbm9zYXVyZS9hcnQ+DQoNCltST1dFWF0gPGh0 dHBzOi8vZGIuaW4udHVtLmRlL35sZWlzL3BhcGVycy9hcnRzeW5jLnBkZj4NCg0KW1JFQ0lQRS9Q LUFSVF0gPGh0dHBzOi8vYXJ4aXYub3JnL3BkZi8xOTA5LjEzNjcwPg0KDQpba2V2aW5dIDxodHRw czovL2dpdGh1Yi5jb20vcm9idXItY29vcC9rZXZpbj4NCg0KW2JsYXplXSA8aHR0cHM6Ly9naXRo dWIuY29tL2Rpbm9zYXVyZS9ibGF6ZT4NCg0KW2hlcmVdDQo8aHR0cHM6Ly9ibG9nLnJvYnVyLmNv b3AvYXJ0aWNsZXMvMjAyNS0wMS0wNy1jYXJ0b24tYW5kLWNhY2hldC5odG1sPg0KDQpbTWlvdV0g PGh0dHBzOi8vZ2l0aHViLmNvbS9yb2J1ci1jb29wL21pb3U+DQoNCltmbHV4XSA8aHR0cHM6Ly9n aXRodWIuY29tL3JvYnVyLWNvb3AvZmx1eD4NCg0KW2NhcnRvbl0gPGh0dHBzOi8vZ2l0aHViLmNv bS9yb2J1ci1jb29wL2NhcnRvbj4NCg0KW2JzdHJdIDxodHRwczovL2dpdGh1Yi5jb20vcm9idXIt Y29vcC9ic3RyPg0KDQpbY2FjaGV0XSA8aHR0cHM6Ly9naXRodWIuY29tL3JvYnVyLWNvb3AvY2Fj aGV0Pg0KDQpbaGVyZV0gPGh0dHBzOi8vYmxvZy5yb2J1ci5jb29wL2FydGljbGVzLzIwMjUtMTgt MTItYmFuY29zLmh0bWw+DQoNCg0KcmVzdHJpY3RlZCAxLjIuMCBsaW1pdCB3aGljaCBzeXN0ZW0g b3BlcmF0aW9ucyBhbmQgd2hpY2ggcGFydHMgb2YgdGhlIGZpbGVzeXN0ZW0geW91ciBwcm9ncmFt IGNhbiBhY2Nlc3MNCuKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkA0KDQogIEFyY2hpdmU6DQog IDxodHRwczovL2Rpc2N1c3Mub2NhbWwub3JnL3QvYW5uLXJlc3RyaWN0ZWQtMS0yLTAtbGltaXQt d2hpY2gtc3lzdGVtLW9wZXJhdGlvbnMtYW5kLXdoaWNoLXBhcnRzLW9mLXRoZS1maWxlc3lzdGVt LXlvdXItcHJvZ3JhbS1jYW4tYWNjZXNzLzE3NzMyLzE+DQoNCg0KcmVtb3Zld2luZ21hbiBhbm5v dW5jZWQNCuKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgA0KDQogIEhlbGxvLA0KDQogIEkgYW0gaGFwcHkgdG8gYW5ub3Vu Y2UgYSBuZXcgdmVyc2lvbiBvZiBbcmVzdHJpY3RlZF0uDQoNCiAgVGhpcyBsaWJyYXJ5IGxldHMg eW91IGxpbWl0IHdoaWNoIHN5c3RlbSBvcGVyYXRpb25zIGFuZCB3aGljaCBwYXJ0cyBvZg0KICB0 aGUgZmlsZXN5c3RlbSB5b3VyIHByb2dyYW0gY2FuIGFjY2Vzcy4gQ2FsbCBpdCBhcyBlYXJseSBh cyBwb3NzaWJsZQ0KICBpbiB5b3VyIHByb2dyYW0gc28gdGhhdCB0aGUgcmVzdCBvZiB0aGUgY29k ZSBydW5zIHdpdGggcmVkdWNlZA0KICBwcml2aWxlZ2VzLiBDdXJyZW50bHksIGFjdHVhbCBlbmZv cmNlZCByZXN0cmljdGlvbnMgYXJlIGltcGxlbWVudGVkDQogIGZvciB0aGVzZSBvcGVyYXRpbmcg c3lzdGVtczoNCg0KICDigKIgT3BlbkJTRA0KICDigKIgTGludXggKG9ubHkgZmlsZXN5c3RlbSB2 aWV3KQ0KDQogIEV2ZW4gb24gb3RoZXIgb3BlcmF0aW5nIHN5c3RlbXMsIHlvdSBjYW4gc3RpbGwg dXNlIFtyZXN0cmljdGVkXSB0bw0KICBkb2N1bWVudCB3aGljaCBwcml2aWxlZ2VzIHlvdXIgcHJv Z3JhbSBuZWVkcy4gVXNlcnMgY2FuIHRoZW4gdGVzdCBpZg0KICB5b3VyIHByb2dyYW0gcmVzcGVj dHMgdGhlc2UgcHJvbWlzZXMgd2l0aCB0b29scyBzdWNoIGFzIFtwbGVkZ2Ugb24NCiAgTGludXhd LiBFbmpveSA6c2xpZ2h0X3NtaWxlOg0KDQogIOKAoiBbb3BhbV0NCiAg4oCiIFthcGldDQogIOKA oiBbZXhhbXBsZXNdDQogIOKAoiBbZ2l0IHJlcG9dDQogIOKAoiBbTGljZW5zZSBBR1BMXQ0KDQog IENIQU5HRUxPRzoNCg0KICDigKIgYWRkIExpbnV4IChvbmx5IGZpbGVzeXN0ZW0gdmlldykgdmlh IGxhbmRsb2NrKDcpDQogICAg4oCiIGV4Y2VwdCB1bmxpbmsvcmVtb3ZpbmcsIHdob2xlIG90aGVy IHRoaW5nIHdpdGgNCiAgICAgIExBTkRMT0NLX0FDQ0VTU19GU19SRUFEX0ZJTEUgaW4gbGFuZGxv Y2sNCiAg4oCiIGFkZCBbU2VtYW50aWMgVmVyc2lvbmluZ10NCiAg4oCiIGNoYW5nZSBkZXNjcmlw dGlvbiB0byBtYWtlIGl0IG1vcmUgY2xlYXINCiAg4oCiIHRlc3RlZCB3aXRoIGZsYW1iZGEgc3dp dGNoIG9uOg0KICAgIOKAoiB4ODZfNjQtb3BlbmJzZA0KICAgIOKAoiB4ODZfNjQtYXJjaC1saW51 eCwgeDg2XzY0LWFscGluZS1saW51eCAoTGFuZGxvY2sgQUJJIHZlcnNpb246IDcpDQoNCg0KW3Jl c3RyaWN0ZWRdDQo8aHR0cHM6Ly9vcGFtLm9jYW1sLm9yZy9wYWNrYWdlcy9yZXN0cmljdGVkL3Jl c3RyaWN0ZWQuMS4yLjAvPg0KDQpbcmVzdHJpY3RlZF0gPGh0dHBzOi8vcmVtb3Zld2luZ21hbi5j b2RlYmVyZy5wYWdlL3Jlc3RyaWN0ZWQvPg0KDQpbcGxlZGdlIG9uIExpbnV4XSA8aHR0cHM6Ly9q dXN0aW5lLmxvbC9wbGVkZ2UvPg0KDQpbb3BhbV0gPGh0dHBzOi8vb3BhbS5vY2FtbC5vcmcvcGFj a2FnZXMvcmVzdHJpY3RlZC9yZXN0cmljdGVkLjEuMi4wLz4NCg0KW2FwaV0gPGh0dHBzOi8vcmVt b3Zld2luZ21hbi5jb2RlYmVyZy5wYWdlL3Jlc3RyaWN0ZWQvPg0KDQpbZXhhbXBsZXNdDQo8aHR0 cHM6Ly9jb2RlYmVyZy5vcmcvcmVtb3Zld2luZ21hbi9yZXN0cmljdGVkL3NyYy9icmFuY2gvbWFp biN1c2FnZS1hbmQtZXhhbXBsZXM+DQoNCltnaXQgcmVwb10gPGh0dHBzOi8vY29kZWJlcmcub3Jn L3JlbW92ZXdpbmdtYW4vcmVzdHJpY3RlZD4NCg0KW0xpY2Vuc2UgQUdQTF0NCjxodHRwczovL2Vu Lndpa2lwZWRpYS5vcmcvd2lraS9HTlVfQWZmZXJvX0dlbmVyYWxfUHVibGljX0xpY2Vuc2U+DQoN CltTZW1hbnRpYyBWZXJzaW9uaW5nXSA8aHR0cHM6Ly9zZW12ZXIub3JnLz4NCg0KDQpkZWFkX2Nv ZGVfYW5hbHl6ZXIgMS4xLjANCuKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkA0KDQogIEFyY2hpdmU6DQogIDxodHRw czovL2Rpc2N1c3Mub2NhbWwub3JnL3QvYW5uLWRlYWQtY29kZS1hbmFseXplci0xLTEtMC8xNzcz NC8xPg0KDQoNCmZhbnRhemlvIGFubm91bmNlZA0K4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSADQoNCiAgSGVsbG8gZXZlcnlvbmUsDQoNCiAgSSBh bSBoYXBweSB0byBhbm5vdW5jZSBbdGhlIHJlbGVhc2Ugb2YgdGhlIGRlYWRfY29kZV9hbmFseXpl ciAxLjEuMF0NCiAgKGF2YWlsYWJsZSB2aWEgYG9wYW0nKSAhDQoNCiAgVGhhbmtzIHRvIEBlZHdp bmFucywgQG5vamIsIGFuZCBAVGlibyBmb3IgdGhlaXIgY29udHJpYnV0aW9ucywNCiAgcmV2aWV3 cywgYW5kIGZlZWRiYWNrLg0KDQogIFRoaXMgcmVsZWFzZSBncmVhdGx5IGltcHJvdmVzIHRoZSBz dXBwb3J0IG9mIHByb2plY3RzIGJ1aWx0IHdpdGgNCiAgYGR1bmUnIGFuZCBpbnRyb2R1Y2VzIHNv bWUgW3VzZXIgZG9jdW1lbnRhdGlvbl0uICBUaGUgdG9vbCBzdGlsbA0KICByZXF1aXJlcyAqKk9D YW1sIDUuMioqLiBUaGVyZSBpcyBhIFt3b3JrIGluIHByb2dyZXNzIHRvIHN1cHBvcnQgT0NhbWwN CiAgNS4zXS4NCg0KICBJZiB5b3UgZW5jb3VudGVyIGEgcHJvYmxlbSB3aXRoIHRoaXMgcmVsZWFz ZSwgcGxlYXNlIFtyZXBvcnQgaXQgb24gdGhlDQogIGdpdGh1YiByZXBvc2l0b3J5XS4gIEZlZWRi YWNrIGFuZCBjb250cmlidXRpb25zIGFyZSB3ZWxjb21lLg0KDQoNClt0aGUgcmVsZWFzZSBvZiB0 aGUgZGVhZF9jb2RlX2FuYWx5emVyIDEuMS4wXQ0KPGh0dHBzOi8vZ2l0aHViLmNvbS9MZXhpRmkv ZGVhZF9jb2RlX2FuYWx5emVyL3JlbGVhc2VzL3RhZy8xLjEuMD4NCg0KW3VzZXIgZG9jdW1lbnRh dGlvbl0NCjxodHRwczovL2dpdGh1Yi5jb20vTGV4aUZpL2RlYWRfY29kZV9hbmFseXplci9ibG9i LzEuMS4wL2RvY3MvVVNFUl9ET0MubWQ+DQoNClt3b3JrIGluIHByb2dyZXNzIHRvIHN1cHBvcnQg T0NhbWwgNS4zXQ0KPGh0dHBzOi8vZ2l0aHViLmNvbS9MZXhpRmkvZGVhZF9jb2RlX2FuYWx5emVy L3B1bGwvMzg+DQoNCltyZXBvcnQgaXQgb24gdGhlIGdpdGh1YiByZXBvc2l0b3J5XQ0KPGh0dHBz Oi8vZ2l0aHViLmNvbS9MZXhpRmkvZGVhZF9jb2RlX2FuYWx5emVyL2lzc3Vlcz4NCg0KDQpPQ2Ft bCBzZWN1cml0eSB0ZWFtDQrilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZANCg0KICBBcmNoaXZlOg0KICA8aHR0cHM6Ly9kaXNjdXNzLm9jYW1s Lm9yZy90L2Fubi1vY2FtbC1zZWN1cml0eS10ZWFtLzE2OTAyLzExPg0KDQoNCkNvbnRpbnVpbmcg dGhpcyB0aHJlYWQsIEhhbm5lcyBNZWhuZXJ0IGFubm91bmNlZA0K4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSADQoNCiAgRGVhciBldmVyeW9uZSwgYXMgd2UgZGlzY3Vzc2VkIGluIHRoZSBl YXJsaWVyIHB1YmxpYyBtZWV0aW5nLCB3ZSBwbGFuDQogIHRvIGhhdmUgZXZlcnkgMyBtb250aHMg YW5vdGhlciBvbmUuDQoNCiAgVGhlIG5leHQgcHVibGljIHNlY3VyaXR5IG1lZXRpbmcgaXMgc2No ZWR1bGVkIGZvciBUaHVyc2RheSwgTWFyY2ggMTl0aA0KICAxNDowMCBDRVQgLSAxNjowMCBDRVQu IFBsZWFzZSBwdXQgdGhhdCBpbnRvIHlvdXIgY2FsZW5kYXIgaWYgeW91IHBsYW4NCiAgdG8gYXR0 ZW5kLg0KDQoNClByb3Bvc2FsOiBtYWtlIHRoZSBtaW5pbXVtIHRlc3RlZCBvcGFtIDIuMSBhbmQg aGlnaGVyDQrilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZANCg0K ICBBcmNoaXZlOg0KICA8aHR0cHM6Ly9kaXNjdXNzLm9jYW1sLm9yZy90L3Byb3Bvc2FsLW1ha2Ut dGhlLW1pbmltdW0tdGVzdGVkLW9wYW0tMi0xLWFuZC1oaWdoZXIvMTc3MzYvMT4NCg0KDQpBbmls IE1hZGhhdmFwZWRkeSBhbm5vdW5jZWQNCuKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgA0KDQogIE11 Y2ggYXMgd2UgZGlkIGEgd2hpbGUgYmFjayB3aXRoIFtyYWlzaW5nIHRoZSBtaW5pbXVtIHZlcnNp b24gb2YgT0NhbWwNCiAgdGVzdGVkIHRvIDQuMDhdLCBpdCdzIG5vdyB0aW1lIHRvIHJhaXNlIHRo ZSBtaW5pbXVtIHZlcnNpb24gb2Ygb3BhbQ0KICB0aGF0IHdlIHRlc3QgaW4gdGhlIENJIG1hdHJp eC4NCg0KICBbb3BhbSAyLjAuMCB3YXMgcmVsZWFzZWRdIGluIDIwMTgsIGFuZCBldmVyIHNpbmNl IHRoZW4gdGhlIERvY2tlcg0KICBpbWFnZXMgaGF2ZSBbYnVpbHQgZXZlcnkgdmVyc2lvbl0sIHdp dGggdGhlIGRlZmF1bHQgYmVpbmcgdGhlIG1pbmltdW0NCiAgdmVyc2lvbiAoMi4wLngpIGFsbCB0 aGUgd2F5IHRocm91Z2ggdG8gMi41LnguDQoNCiAgSSBub3cgcHJvcG9zZSB0aGF0IHdlIHJhaXNl IHRoZSBtaW5pbXVtIHRlc3RlZCB2ZXJzaW9uIG9mIG9wYW0gdG8NCiAgMi4xLnguIExvb2tpbmcg aW4gW3JlcG9sb2d5L29wYW1dLCB0aGUgb25seSBub3RhYmxlIGRpc3RybyBzdGlsbA0KICBzaGlw cGluZyBvcGFtIDIuMCBpcyBVYnVudHUgMjAuMDQsIHdoaWNoIHdlbnQgRU9MIGluIE1heSAyMDI1 LiAgVWJ1bnR1DQogIDI0LjA0IHN0aWxsIGhhcyBoYXZlIDIuMS54LCBzbyBJIGV4cGVjdCB0aGlz IHdpbGwgYmUgdGhlIHRlc3RpbmcgZmxvb3INCiAgZm9yIHNvbWUgeWVhcnMgdW50aWwgdGhhdCBy b3RhdGVzIG91dC4NCg0KICBUaGUgbW9zdCBvYnNlcnZhYmxlIGltcHJvdmVtZW50IGZyb20gdGhp cyB3aWxsIGJlIHRoZSBvcGFtLXJlcG9zaXRvcnkNCiAgQ0kgJ1RoZSBhY3Rpb25zIHRvIHByb2Nl c3MgaGF2ZSBjeWNsaWMgZGVwZW5kZW5jaWVzJyBmYWlsdXJlIHdpbGwgbm8NCiAgbG9uZ2VyIGJ1 ZyB1cyBmb3IgZXZlcnkgcGFja2FnZSBzdWJtaXR0ZWQgdGhhdCBoYXMgYHt3aXRoLXRlc3R9Jw0K ICBjbGF1c2VzIQ0KDQoNCltyYWlzaW5nIHRoZSBtaW5pbXVtIHZlcnNpb24gb2YgT0NhbWwgdGVz dGVkIHRvIDQuMDhdDQo8aHR0cHM6Ly9kaXNjdXNzLm9jYW1sLm9yZy90L3JhaXNpbmctdGhlLW1p bmltdW0tdGVzdGVkLXZlcnNpb24tb2Ytb2NhbWwtdG8tNC0wNS1vci00LTA4LWZyb20tNC0wMi8x MjQ2ND4NCg0KW29wYW0gMi4wLjAgd2FzIHJlbGVhc2VkXQ0KPGh0dHBzOi8vZGlzY3Vzcy5vY2Ft bC5vcmcvdC9hbm4tb3BhbS0yLTAtMC1maW5hbC1yZWxlYXNlLWFuZC1yZXBvc2l0b3J5LXVwZ3Jh ZGUvMjU4NT4NCg0KW2J1aWx0IGV2ZXJ5IHZlcnNpb25dDQo8aHR0cHM6Ly9naXRodWIuY29tL29j dXJyZW50L29jYW1sLWRvY2tlcmZpbGUvYmxvYi9tYXN0ZXIvc3JjLW9wYW0vb3BhbS5tbGkjTDQ0 LUw1Mj4NCg0KW3JlcG9sb2d5L29wYW1dIDxodHRwczovL3JlcG9sb2d5Lm9yZy9wcm9qZWN0L29w YW0vdmVyc2lvbnM+DQoNCg0KY3NleHAtcXVlcnkgaW5pdGlhbCByZWxlYXNlDQrilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZANCg0KICBBcmNoaXZlOg0KICA8aHR0cHM6Ly9kaXNjdXNzLm9jYW1sLm9y Zy90L2Fubi1jc2V4cC1xdWVyeS1pbml0aWFsLXJlbGVhc2UvMTc3MzcvMT4NCg0KDQpKb3NoIEJl cmRpbmUgYW5ub3VuY2VkDQrilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIANCg0KICBUaGUgY3NleHAtcXVlcnkgMC4xLjAgW29w YW0gcGFja2FnZV0gaXMgbm93IGF2YWlsYWJsZS4NCg0KICBJZiB5b3UgaGF2ZSBldmVyIHdhbnRl ZCB0byBxdWVyeSBlLmcuIHRoZSBvdXRwdXQgb2YgYGR1bmUgZGVzY3JpYmUnDQogIChidXQgZGlk bid0IHdhbnQgdGhlIGRlcGVuZGVuY3kgY29uZSBvZiBbc2V4cF0pLCB0aGVuIFtjc2V4cC1xdWVy eV0NCiAgbWlnaHQgYmUgaW50ZXJlc3RpbmcuDQoNCiAgYGNzZXhwLXF1ZXJ5JyBpcyBhIG1pbmlt YWwgY29tbWFuZC1saW5lIHRvb2wgdG8gcXVlcnkgW2Nhbm9uaWNhbA0KICBzLWV4cHJlc3Npb25z XSAoY3NleHApIGZyb20gc3RkaW4uIEZvciBleGFtcGxlLA0KICDilIzilIDilIDilIDilIANCiAg 4pSCIGR1bmUgZGVzY3JpYmUgd29ya3NwYWNlIC0tZm9ybWF0PWNzZXhwIHwgY3NleHAtcXVlcnkg JyhmaWVsZCByb290KScNCiAg4pSU4pSA4pSA4pSA4pSADQogIHdpbGwgZXh0cmFjdCB0aGUgZHVu ZSBwcm9qZWN0IHJvb3QuDQoNCiAgSGFwcHkgaGFja2luZyENCg0KDQpbb3BhbSBwYWNrYWdlXSA8 aHR0cHM6Ly9vcGFtLm9jYW1sLm9yZy9wYWNrYWdlcy9jc2V4cC1xdWVyeS8+DQoNCltzZXhwXSA8 aHR0cHM6Ly9naXRodWIuY29tL2phbmVzdHJlZXQvc2V4cD4NCg0KW2NzZXhwLXF1ZXJ5XSA8aHR0 cHM6Ly9naXRodWIuY29tL2piZXJkaW5lL2NzZXhwLXF1ZXJ5Pg0KDQpbY2Fub25pY2FsIHMtZXhw cmVzc2lvbnNdDQo8aHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQ2Fub25pY2FsX1MtZXhw cmVzc2lvbnM+DQoNCg0KT3RoZXIgT0NhbWwgTmV3cw0K4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQDQoNCkZyb20gdGhlIG9jYW1sLm9yZyBibG9nDQrilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIANCg0KICBIZXJlIGFyZSBsaW5rcyBmcm9tIG1hbnkgT0NhbWwgYmxvZ3MgYWdncmVn YXRlZCBhdCBbdGhlIG9jYW1sLm9yZw0KICBibG9nXS4NCg0KICDigKIgW0V4dGVuZGluZyBSUEMg Y2FwYWJpbGl0aWVzIGluIE9DdXJyZW50XQ0KICDigKIgW0VtYWlsIG5vdGlmaWNhdGlvbnMgY29t ZSB0byBNb2xseW1hd2tdDQogIOKAoiBbb3BlbiBDb3JlXQ0KDQoNClt0aGUgb2NhbWwub3JnIGJs b2ddIDxodHRwczovL29jYW1sLm9yZy9ibG9nLz4NCg0KW0V4dGVuZGluZyBSUEMgY2FwYWJpbGl0 aWVzIGluIE9DdXJyZW50XQ0KPGh0dHBzOi8vd3d3LnR1bmJ1cnkub3JnLzIwMjYvMDEvMjYvb2N1 cnJlbnQtcnBjLz4NCg0KW0VtYWlsIG5vdGlmaWNhdGlvbnMgY29tZSB0byBNb2xseW1hd2tdDQo8 aHR0cHM6Ly9ibG9nLnJvYnVyLmNvb3AvYXJ0aWNsZXMvbW9sbHltYXdrLWVtYWlsLW5vdGlmcy5o dG1sPg0KDQpbb3BlbiBDb3JlXQ0KPGh0dHBzOi8vd3d3LmRyYTI3LnVrL2Jsb2cvcGxhdGZvcm0v MjAyNi8wMS8xOS9wbG90dGluZy1hLW5ldy1jb3Vyc2UuaHRtbD4NCg0KDQpPbGQgQ1dODQrilZDi lZDilZDilZDilZDilZDilZANCg0KICBJZiB5b3UgaGFwcGVuIHRvIG1pc3MgYSBDV04sIHlvdSBj YW4gW3NlbmQgbWUgYSBtZXNzYWdlXSBhbmQgSSdsbCBtYWlsDQogIGl0IHRvIHlvdSwgb3IgZ28g dGFrZSBhIGxvb2sgYXQgW3RoZSBhcmNoaXZlXSBvciB0aGUgW1JTUyBmZWVkIG9mIHRoZQ0KICBh cmNoaXZlc10uDQoNCiAgSWYgeW91IGFsc28gd2lzaCB0byByZWNlaXZlIGl0IGV2ZXJ5IHdlZWsg YnkgbWFpbCwgeW91IG1heSBzdWJzY3JpYmUNCiAgdG8gdGhlIFtjYW1sLWxpc3RdLg0KDQogIFtB bGFuIFNjaG1pdHRdDQoNCg0KW3NlbmQgbWUgYSBtZXNzYWdlXSA8bWFpbHRvOmFsYW4uc2NobWl0 dEBwb2x5dGVjaG5pcXVlLm9yZz4NCg0KW3RoZSBhcmNoaXZlXSA8aHR0cHM6Ly9hbGFuLnBldGl0 ZXBvbW1lLm5ldC9jd24vPg0KDQpbUlNTIGZlZWQgb2YgdGhlIGFyY2hpdmVzXSA8aHR0cHM6Ly9h bGFuLnBldGl0ZXBvbW1lLm5ldC9jd24vY3duLnJzcz4NCg0KW2NhbWwtbGlzdF0gPGh0dHBzOi8v c3ltcGEuaW5yaWEuZnIvc3ltcGEvaW5mby9jYW1sLWxpc3Q+DQoNCltBbGFuIFNjaG1pdHRdIDxo dHRwczovL2FsYW4ucGV0aXRlcG9tbWUubmV0Lz4NCg0K --=-=-= Content-Type: text/html; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable OCaml Weekly News

OCaml Weekly News

Previous Week<= /a> Up Next Week

Hello

Here is the latest OCaml Weekly News, for the week of January 20 to 27, 202= 6.

lwt-to-eio: Automating the mechanical parts of Lwt -> Eio m= igration

oug-t announced

Hi everyone,

Like many of you, I=E2=80=99ve been looking into migrating my libraries fro= m Lwt to Eio to take advantage of OCaml 5=E2=80=99s direct-style concurrenc= y. While the manual migration guides are excellent, I found myself making t= he same mechanical changes over and over=E2=80=94flattening binds, unwrappi= ng promises, and rewriting maps.

So, I built lwt-to-eio, a tool that automates the borin= g parts of this transition.

Repo: https://github= .com/oug-t/lwt-to-eio

What it does (The Magic)

It parses your OCaml source code and performs AST-level rewrites to transfo= rm monadic Lwt patterns into direct-style Eio code.

Input (Lwt):

let fetch_data id =3D
  Lwt.bind (Db.get_user id) (fun user ->
    Db.get_posts =
user.id >>=3D (fun=
 posts ->
      Lwt_list.ma=
p_p process posts
    )
  )

Output (Eio)

let fetch_data id =3D
  let user =3D Lwt_eio.Promise.await_lwt (Db.get_user id) in
  let posts =3D Lwt_eio.Promise.await_lwt (Db.get_posts user.id) in
  Eio.Fiber.List.=
map process posts

Current Status & Help Wanted

This is currently an MVP. It handles the most common patterns I enco= untered (binds, map_p, sleep, return= ), but there is plenty of surface area left to cover.

I'm looking for contributors to help add rules for other common patterns. I= 've tagged a few issues as "Good First Issues" if anyone wants to di= p their toes into ppxlib and AST rewriting:

  • Lwt.catch -> try/with: Transforming= monadic error handling to direct style exceptions.
  • Lwt_io support: Mapping legacy IO functions to Eio = buffers.

Feedback, PRs, and "It broke on my file!" reports are all very welcome.

Happy hacking!

The new owners-maintainers of Dream

Anton Bachin announced

I am very pleased to announce that Dream, the Web framework, is now owned and maintained by a new t= eam, of:

  • Sabine Schmaltz (@sabine), maintainer of OCaml.org
  • Sebastian Willenbrink ( http= s://github.com/Willenbrink ), author of the effort to port Dream to Eio=
  • Yawar Amin (@yawaramin), author of dream-html, and the Web framework Re= Web

=E2=80=A6among their other projects and contributions to the OCaml communit= y. All are major and long-term contributors to, and users of, Dream.

I=E2=80=99ve stepped back from ownership and overall maintenance, but will = still work on parts of Dream every now and then as a contributor, along wit= h all of Dream=E2=80=99s contributors :slight_smile:

Dream is discussed in this forum, in its issue tracker, #webdev in the OCaml Discord= , and = #dream on Zulip. Dream has a (roughly) weekly open video call on Discor= d for contributors to discuss technical issues with each other and with mai= ntainers.

Welcome to Sabine, Sebastian, Yawar, the new team!

Slipshow!

Paul-Elliot announced

Hello!

It is in a state of sliplessness that I announce the new release of Slipsho= w!

Slipshow 0.8.0: Les gnomes voleurs de Slipshow

This release comes with a handful of bugfixes, in particular on the new and= experimental record-and-replay for drawings.

But the star of the release is the new documentation! For instance, the tutorial on = structuring your presentation visually will allow you to create presen= tations such as this one, presenting Slipshow's business model:

https://github.com/user-attachments/assets/4= 1539c78-f998-4597-9392-4d555435d5a3

The tutorials also includes live code blocks, and Slipshow has now a dedicated website.

Here is the full changelog!

Features

  • Add a "mirror mode" to the speaker view, which mirrors the entire scree= n you are sharing with the audience (#188)
  • Add support for external files through CLI and frontmatter (#191)
  • Add shortcut to delete or unselect selection in drawing editing (#192)<= /li>
  • Add a "Close editing panel" button when there are no strokes (#192)
  • Default file names for drawing recording depend on their names (#192)
  • Improve -o argument wrt directories (#190)
  • Inline SVGs instead of adding them as images, allowing the use of class= es and ids in SVGs (#190)
  • Rework the docs! (#190)

Fix

  • Fix pauses time not updated after a rerecording (#192)
  • Fix drawing editing shortcuts triggering even when focusing on a textar= ea (#192)
  • Fix interaction between fields and drawing editing shortcuts (#192)
  • Fix order of clear and draw action: the first= comes first (#192)
  • Use .woff2 for embedded fonts (#190)

Thanks again to NLNet for su= pporting the development of Slipshow!

Bancos: A persistent Key-Value store based on ROWEX/P-ART

Calascibetta Romain announced

I am pleased to announce the first release of bancos, our new persistent Key-Value store.

Bancos is an implementation of an Adaptive Radix Tree (ART) modified to support parallel reads and wr= ites (ROWEX) = directly on a file (based on the RECIPE/P-ART approach).

  • Our project is designed for indexing with file-backed storage.
  • We provide an implementation compatible with unikernels. It is currentl= y being used by kevin, = an HTTP/1.1 server unikernel that exposes routes for key insertion and look= up.
  • This work is part of our broader goal to index emails by their Me= ssage-ID. An extension of our tool blaze now allows searching through archives now (if you a= re interesting about our archive system, you can take a look here).= This indexing also enables efficient email thread extraction using I= n-Reply-To headers.

While still experimental, the results =E2=80=94 especially when paired with= our Miou scheduler =E2= =80=94 are very promising. This release of bancos comes alongside several updates across our stac= k:

  • flux: Our OCaml stre= am library for Miou
  • carton: For manipu= lating PACKv2 archives (as used by Git)
  • bstr: A library for = handling bigbytes and memory buffers
  • cachet: A library = to cache mmap syscall results. Notably, this include significa= nt work on an asynchronous write pipeline = for unikernels on block devices

You can find the project here: https://github.com/robur-coop/bancos

For a deeper dive into the implementation of bancos and its application to = email indexing, we have prepared a detailed blog post here.

Happy hacking!

restricted 1.2.0 limit which system operations and which parts= of the filesystem your program can access

removewingman announced

Hello,

I am happy to announce a new version of restricted.

This library lets you limit which system operations and which parts of the = filesystem your program can access. Call it as early as possible in your pr= ogram so that the rest of the code runs with reduced privileges. Currently,= actual enforced restrictions are implemented for these operating systems:

  • OpenBSD
  • Linux (only filesystem view)

Even on other operating systems, you can still use restricted to document which privil= eges your program needs. Users can then test if your program respects these= promises with tools such as pledge= on Linux. Enjoy :slight_smile:

CHANGELOG:

  • add Linux (only filesystem view) via landlock(7)
    • except unlink/removing, whole other thing with LANDLOCK_ACCESS_FS_READ_= FILE in landlock
  • add Semantic Versioning
  • change description to make it more clear
  • tested with flambda switch on:
    • x86_64-openbsd
    • x86_64-arch-linux, x86_64-alpine-linux (Landlock ABI version: 7)

dead_code_analyzer 1.1.0

fantazio announced

Hello everyone,

I am happy to announce the release of the dead_code_analyzer 1.1.0 (av= ailable via opam) !

Thanks to @edwinans, @nojb, and @Tibo for their contributions, reviews, and= feedback.

This release greatly improves the support of projects built with dune= and introduces some user documentation. The tool still requires OCaml 5.2. There is a work in progress to suppo= rt OCaml 5.3.

If you encounter a problem with this release, please report it on the github repositor= y. Feedback and contributions are welcome.

OCaml security team

Continuing this thread, Hannes Mehnert announced

Dear everyone, as we discussed in the earlier public meeting, we plan to ha= ve every 3 months another one.

The next public security meeting is scheduled for Thursday, March 19th 14:0= 0 CET - 16:00 CET. Please put that into your calendar if you plan to attend.

Proposal: make the minimum tested opam 2.1 and higher

Anil Madhavapeddy announced

Much as we did a while back with r= aising the minimum version of OCaml tested to 4.08, it's now time to ra= ise the minimum version of opam that we test in the CI matrix.

opam 2.0.0 was released in 2018, and ever since t= hen the Docker images have built every version, wit= h the default being the minimum version (2.0.x) all the way through to 2.5.= x.

I now propose that we raise the minimum tested version of opam to 2.1.x. Lo= oking in repology/op= am, the only notable distro still shipping opam 2.0 is Ubuntu 20.04, wh= ich went EOL in May 2025. Ubuntu 24.04 still has have 2.1.x, so I expect = this will be the testing floor for some years until that rotates out.

The most observable improvement from this will be the opam-repository CI 'T= he actions to process have cyclic dependencies' failure will no longer bug = us for every package submitted that has {with-test} clauses!

csexp-query initial release

Josh Berdine announced

The csexp-query 0.1.0 opam package is now available.

If you have ever wanted to query e.g. the output of dune describe (but didn't want the dependency cone of sexp), then csexp-query might be interesting.

csexp-query is a minimal command-line tool to query canonical s-express= ions (csexp) from stdin. For example,

dune describe workspace --format=3Dcsexp | csexp-query '(field root)'

will extract the dune project root.

Happy hacking!

Other OCaml News

From the ocaml.org blog

Old CWN

If you happen to miss a CWN, you can send me a message and I'll mail it to you, or go take a loo= k at the archive or the <= a href=3D"https://alan.petitepomme.net/cwn/cwn.rss">RSS feed of the archive= s.

If you also wish to receive it every week by mail, you may subscribe to the= caml-list.

--=-=-=--