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=ZqrnPn2l; 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 077AF4009D for ; Tue, 17 Mar 2026 14:39:13 +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=3i4dP1OmJSKvFznQGmyPiqLzPhzNTfBdYq81pSWPt+4=; b=ZqrnPn2lTXJsB4CDOONx/QTRa2pKOv3mp/SWzNIptfW7xPyfKUd6BYch u3H95l8n/P8atzqFy6tbahlheDeDKYxieG7w/og+IgV2Fki9WTSFK91hQ hIJpR9+kTIFnhD1RhvlZH22thhoKOldu/AetXABvEOu7g7BYxabhlXhsf c=; X-CSE-ConnectionGUID: iXQdYK0oR5GNZNczUWT5vA== X-CSE-MsgGUID: 01+Vm8O2SCCAI5l9eWP5vw== 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.23,126,1770591600"; d="scan'208,217";a="268201401" Received: from prod-sympa-app.inria.fr ([128.93.162.27]) by mail2-relais-roc.national.inria.fr with ESMTP; 17 Mar 2026 15:39:14 +0100 Received: by prod-sympa-app.inria.fr (Postfix, from userid 990) id 6423483763; Tue, 17 Mar 2026 15:39:13 +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 61781823E5 for ; Tue, 17 Mar 2026 15:39:06 +0100 (CET) X-CSE-ConnectionGUID: aLMfCwOpQBmPTSso8f/Daw== X-CSE-MsgGUID: cldyxlnySQygGBLLjhnqvg== X-IronPort-AV: E=Sophos;i="6.23,126,1770591600"; d="scan'208,217";a="141577572" Received: from mac-03220211.irisa.fr ([131.254.21.249]) by mail3-relais-sop.national.inria.fr with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 17 Mar 2026 15:39:06 +0100 From: Alan Schmitt To: "lwn" , caml-list@inria.fr Date: Tue, 17 Mar 2026 15:39:05 +0100 Message-ID: MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="=-=-=" Subject: [Caml-list] Attn: Development Editor, Latest OCaml Weekly News Reply-To: Alan Schmitt X-Loop: caml-list@inria.fr X-Sequence: 19472 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 ZWsgb2YgTWFyY2ggMTAgdG8gMTcsDQoyMDI2Lg0KDQpUYWJsZSBvZiBDb250ZW50cw0K4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSADQoNClB1YmxpYyBz ZWN1cml5IG1lZXRpbmcNCkdvb2dsZSBPUi1Ub29sczogQ1AtU0FUIFN1YnNldA0KTmVvY2FtbC1t b2RlIChBIG1vZGVybiBFbWFjcyBtYWpvciBtb2RlIGZvciBPQ2FtbCkgaXMgbG9va2luZyBmb3Ig dGVzdGVycw0Kb3VpOiBtdWx0aS1wbGF0Zm9ybSBiaW5hcnkgaW5zdGFsbGVycw0KTml4dGFtYWw6 IEZ1bGZpbGxpbmcgSW5wdXQgUGlubmluZyBmb3IgTml4DQpPQ2FtbC1SREYgMS4yLjANClNsaXBz aG93IQ0KSXMgdGhlcmUgYSBwdWJsaWMgYXJjaGl2ZSBmb3IgdGhlIGNhbWwtbGlzdD8NCk9sZCBD V04NCg0KDQpQdWJsaWMgc2VjdXJpeSBtZWV0aW5nDQrilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZANCg0KICBBcmNoaXZlOiA8 aHR0cHM6Ly9kaXNjdXNzLm9jYW1sLm9yZy90L3B1YmxpYy1zZWN1cml5LW1lZXRpbmcvMTc4ODIv MT4NCg0KDQpIYW5uZXMgTWVobmVydCBhbm5vdW5jZWQNCuKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgA0KDQogIERl YXIgZXZlcnlvbmUsDQoNCiAgYXMgYSByZW1pbmRlciDigJMgbmV4dCB3ZWVrIFRodXJzZGF5IChN YXJjaCAxOXRoKSAxNDowMCBDRVNULCB0aGVyZSB3aWxsDQogIGJlIGEgcHVibGljIE9DYW1sIHNl Y3VyaXR5IG1lZXRpbmcgaG9zdGVkIGJ5IHRoZQ0KICA8aHR0cHM6Ly9vY2FtbC5vcmcvc2VjdXJp dHk+IHRlYW0uIFdlIHdpbGwgbWVldCBhdA0KICA8aHR0cHM6Ly9tZWV0LmJvcm5oYWNrLmRrL09D YW1sU2VjdXJpdHlQdWJsaWNNZWV0aW5nPg0KDQogIE91ciBhZ2VuZGEgYW5kIG5vdGVzIHdpbGwg YmUgYXQNCiAgPGh0dHBzOi8vcGFkLmRhdGEuY29vcC9JZTV2b0JlUFNpS3ZqWmRFa282b3RRPiMN Cg0KICBJZiB5b3UncmUgY3VyaW91cywgdGhlIG5vdGVzIGZyb20gb3VyIGxhc3QgbWVldGluZyBh cmUgYXQNCiAgPGh0dHBzOi8vcGFkLmRhdGEuY29vcC83LUljNXJHNlRveW5zVzAyaEpzbmRnPg0K DQogIEhvcGUgdG8gc2VlIHlvdSB0aGVyZSENCg0KDQpHb29nbGUgT1ItVG9vbHM6IENQLVNBVCBT dWJzZXQNCuKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkA0KDQogIEFyY2hpdmU6DQog IDxodHRwczovL2Rpc2N1c3Mub2NhbWwub3JnL3QvZ29vZ2xlLW9yLXRvb2xzLWNwLXNhdC1zdWJz ZXQvMTc4ODUvMT4NCg0KDQpUaW1vdGh5IEJvdXJrZSBhbm5vdW5jZWQNCuKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gA0KDQogIFRoZSBbR29vZ2xlIE9SLVRvb2xzXSBhcmUgYSBzdWl0ZSBvZiB0b29scyBmb3Igc29s dmluZyBvcHRpbWl6YXRpb24NCiAgcHJvYmxlbXMuIFRoZXkgaW5jbHVkZSwgaW4gcGFydGljdWxh ciwgW0NQLVNBVF0sIHdoaWNoIGlzIGEgcG93ZXJmdWwNCiAgY29uc3RyYWludCBzb2x2ZXIgYW5k IG9wdGltaXplciBmb3IgaW50ZWdlciBsaW5lYXIgcHJvZ3JhbW1pbmcgYW5kDQogIGJvb2xlYW4g c2F0aXNmaWFiaWxpdHkgcHJvYmxlbXMuDQoNCiAgVGhlIFtvY2FtbC1vcnRvb2xzXSBwYWNrYWdl IHByb3ZpZGVzIGFuIE9DYW1sIGludGVyZmFjZSB0byBhIHN1YnNldCBvZg0KICBDUC1TQVQgY29u c3RyYWludHMuIEl0IGNvbXByaXNlcyB0d28gcGFydHMgYG9ydG9vbHNgLCB3aGljaCBhbGxvd3MN CiAgbW9kZWxsaW5nIGNvbnN0cmFpbnQgcHJvYmxlbXMgaW4gT0NhbWwgYW5kIHRyYW5zbGF0aW5n IHRoZW0gdG8gYQ0KICBwcm90b2NvbCBidWZmZXIgZm9ybWF0ICh0aGFua3MgdG8gW29jYW1sLXBy b3RjXSksIGFuZA0KICBgb3J0b29sc19zb2x2ZXJzYCwgd2hpY2ggYWxsb3dzIGFuIGVtYmVkZGVk IHZlcnNpb24gb2YgQ1AtU0FUIHRvIGJlDQogIGNhbGxlZCBkaXJlY3RseSBmcm9tIE9DYW1sLiBC b3RoIHBhcnRzIGNhbiBiZSBpbnN0YWxsZWQgdXNpbmcgb3BhbSBvcg0KICBidWlsdCB3aXRoIGR1 bmUuIFRoZSBsYXR0ZXIgaW5jbHVkZXMgdGhlIHNvdXJjZSBvZiBPUi1Ub29scyA5LjE1IHdoaWNo DQogIGlzIGJ1aWx0IHRvZ2V0aGVyIHdpdGggbW9zdCBvZiBpdHMgbGlicmFyaWVzIGFuZCBpbnN0 YWxsZWQgYXMgcGFydCBvZg0KICB0aGUgb3BhbSBwYWNrYWdlLg0KDQogIFNvbWUgc2ltcGxlIGV4 YW1wbGVzIGNhbiBiZSBmb3VuZCBpbiB0aGUgW29ubGluZSBkb2N1bWVudGF0aW9uXSBhbmQNCiAg W3NvdXJjZSBjb2RlXS4gVGhleSBjYW4gYmUgYnVpbHQgdXNpbmcgdGhlIGZvbGxvd2luZyBjb21t YW5kcy4NCg0KICDilIzilIDilIDilIDilIANCiAg4pSCIG9wYW0gaW5zdGFsbCBvcnRvb2xzIG9y dG9vbHNfc29sdmVycw0KICDilIIgb2NhbWxmaW5kIG9jYW1sb3B0IC1vIHByb2cgLXBhY2thZ2Ug b3J0b29scyAtcGFja2FnZSBvcnRvb2xzX3NvbHZlcnMgLWxpbmtwa2cgcHJvZy5tbA0KICDilJTi lIDilIDilIDilIANCg0KICBJIHdvdWxkIGJlIGhhcHB5IHRvIGFjY2VwdCBwdWxsIHJlcXVlc3Rz IGZvciB0aGUgbWlzc2luZyBDUC1TQVQNCiAgY29uc3RyYWludHMgKEkgdGhpbmsgaXQgYmVzdCB0 byBkZXZlbG9wIHRoZSBpbnRlcmZhY2UgdG9nZXRoZXIgd2l0aA0KICByZWFsIGFwcGxpY2F0aW9u cywgYW5kIEkgb25seSBuZWVkIHRoZSBJTFAgYW5kIGJvb2xlYW4gcGFydHMgYXQgdGhlDQogIG1v bWVudCksIHRvIHRyYW5zbGF0ZSBtb3JlIG9mIHRoZSBzdGFuZGFyZCBleGFtcGxlIHByb2dyYW1z IChhbiBlYXN5DQogIHdheSB0byBjb250cmlidXRlKSwgYW5kIHRvIGluY2x1ZGUgb3RoZXIgc29s dmVycyBmcm9tIHRoZSBzdWl0ZQ0KICAobGlrZWx5IHRvIGludm9sdmUgc29sdmluZyB0ZWRpb3Vz IGNvbXBpbGF0aW9uIGFuZCBjb21wYXRpYmlsaXR5DQogIHByb2JsZW1zIGFjcm9zcyBtdWx0aXBs ZSBwbGF0Zm9ybXMpLg0KDQogIFRoYW5rcyB0byBAbm9qYiwgQFJ1Y2lraXIgLCBhbmQgb3RoZXJz IGZvciBbdGhlaXIgaGVscF0gd2l0aCBbZHVuZV0sDQogIGFuZCBAeHZ3IGFuZCBAcGFuZ2xlc2Qg Zm9yIFt0aGVpciBoZWxwXSB3aXRoIG9kb2MuIFRoYW5rcyB0byBAam1pZCAsDQogIEBtc2VyaSAs IGFuZCBAYXZzbSBmb3IgZGlzY3Vzc2luZyBhbmQgbWVyZ2luZyBteSBbb3BhbS1yZXBvc2l0b3J5 XQ0KICBwdWxsIHJlcXVlc3RzLg0KDQoNCltHb29nbGUgT1ItVG9vbHNdIDxodHRwczovL2RldmVs b3BlcnMuZ29vZ2xlLmNvbS9vcHRpbWl6YXRpb24+DQoNCltDUC1TQVRdIDxodHRwczovL2Qta3J1 cGtlLmdpdGh1Yi5pby9jcHNhdC1wcmltZXIvPg0KDQpbb2NhbWwtb3J0b29sc10gPGh0dHBzOi8v Z2l0aHViLmNvbS9JTlJJQS9vY2FtbC1vcnRvb2xzPg0KDQpbb2NhbWwtcHJvdGNdIDxodHRwczov L2dpdGh1Yi5jb20vbXJhbnNhbi9vY2FtbC1wcm90b2M+DQoNCltvbmxpbmUgZG9jdW1lbnRhdGlv bl0NCjxodHRwczovL2lucmlhLmdpdGh1Yi5pby9vY2FtbC1vcnRvb2xzL29ydG9vbHMvaW5kZXgu aHRtbD4NCg0KW3NvdXJjZSBjb2RlXQ0KPGh0dHBzOi8vZ2l0aHViLmNvbS9JTlJJQS9vY2FtbC1v cnRvb2xzL3RyZWUvbWFzdGVyL3NhbXBsZXMvc2F0Pg0KDQpbdGhlaXIgaGVscF0NCjxodHRwczov L2Rpc2N1c3Mub2NhbWwub3JnL3QvZm9yZWlnbi1hcmNoaXZlcy1uby1zdGF0aWMtbGlicmFyaWVz LWR5bGliLW9uLW1hYy8xNzY2OT4NCg0KW2R1bmVdIDxodHRwczovL2Rpc2N1c3Mub2NhbWwub3Jn L3QvZHVuZS1jbWFrZS1hbmQtai8xNzc2OD4NCg0KW3RoZWlyIGhlbHBdDQo8aHR0cHM6Ly9kaXNj dXNzLm9jYW1sLm9yZy90L29kb2MtaW5kZXgtZm9yLW11bHRpcGxlLXBhY2thZ2VzLWludGVyLXBh Y2thZ2UtbGlua3MtYW5kLWxvY2FsLWdsb2JhbC1zaWRlYmFyLzE3NjUyPg0KDQpbb3BhbS1yZXBv c2l0b3J5XSA8aHR0cHM6Ly9naXRodWIuY29tL29jYW1sL29wYW0tcmVwb3NpdG9yeT4NCg0KDQpO ZW9jYW1sLW1vZGUgKEEgbW9kZXJuIEVtYWNzIG1ham9yIG1vZGUgZm9yIE9DYW1sKSBpcyBsb29r aW5nIGZvciB0ZXN0ZXJzDQrilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZANCg0KICBBcmNoaXZlOg0KICA8aHR0cHM6Ly9kaXNjdXNzLm9jYW1sLm9yZy90L25l b2NhbWwtbW9kZS1hLW1vZGVybi1lbWFjcy1tYWpvci1tb2RlLWZvci1vY2FtbC1pcy1sb29raW5n LWZvci10ZXN0ZXJzLzE3ODA3LzIzPg0KDQoNCkNvbnRpbnVpbmcgdGhpcyB0aHJlYWQsIEJvemhp ZGFyIEJhdHNvdiBhbm5vdW5jZWQNCuKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgA0K DQogIEZZSSAtIDxodHRwczovL2dpdGh1Yi5jb20vYmJhdHNvdi9uZW9jYW1sL3JlbGVhc2VzL3Rh Zy92MC40LjA+DQoNCiAgWW91J2xsIG5lZWQgdG8gdXBkYXRlIHlvdXIgVHJlZS1zaXR0ZXIgZ3Jh bW1hcnMgZHVlIHRvIHNvbWUgdXBzdHJlYW0NCiAgKGJyZWFraW5nKSBjaGFuZ2VzIGluIHRoZSBU UyBPQ2FtbCBncmFtbWFyLg0KDQoNCm91aTogbXVsdGktcGxhdGZvcm0gYmluYXJ5IGluc3RhbGxl cnMNCuKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kA0KDQogIEFyY2hpdmU6DQogIDxodHRwczovL2Rpc2N1c3Mub2NhbWwub3JnL3QvYW5uLW91aS1t dWx0aS1wbGF0Zm9ybS1iaW5hcnktaW5zdGFsbGVycy8xNzg4Ni8xPg0KDQoNCk5hdGhhbiBSZWJv dXJzIGFubm91bmNlZA0K4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSADQoNCiAgV2UgYXJlIGhhcHB5IHRvIGFubm91 bmNlIHRoZSBmaXJzdCByZWxlYXNlIG9mIGBvdWknIQ0KDQogIGBvdWknIGlzIGEgdG9vbCB0aGF0 IGdlbmVyYXRlcyBtdWx0aS1wbGF0Zm9ybSBiaW5hcnkgaW5zdGFsbGVycyBmb3INCiAgeW91ciBP Q2FtbCBhcHBsaWNhdGlvbnMuIEl0IGNhbiBnZW5lcmF0ZSBpbnN0YWxsZXJzIGZvciBXaW5kb3dz LCBMaW51eA0KICBhbmQgTWFjT1MuICBXZSBob3BlIGl0IHdpbGwgaGVscCBhbGwgb2YgeW91IG91 dCB0aGVyZSBkZXZlbG9wcGluZw0KICBhcHBsaWNhdGlvbnMgZm9yIG5vbiBPQ2FtbCBkZXZlbG9w ZXJzLCBhbGxvd2luZyB5b3VyIHVzZXJzIHRvIGluc3RhbGwNCiAgeW91ciBwcm9ncmFtcyB3aXRo b3V0IGhhdmluZyB0byBpbnN0YWxsIE9DYW1sIGFuZC9vciBvcGFtLCB0aHVzDQogIGdyZWF0bHkg c2ltcGxpZnlpbmcgdGhlaXIgdXNlciBleHBlcmllbmNlLg0KDQogIFlvdSBjYW4gaW5zdGFsbCBg b3VpJyB3aXRoIHRoZSBmb2xsb3dpbmcgY29tbWFuZDoNCiAg4pSM4pSA4pSA4pSA4pSADQogIOKU giBvcGFtIGluc3RhbGwgb3VpDQogIOKUlOKUgOKUgOKUgOKUgA0KDQogIFdlIG1hZGUgaXQgYXMg Z2VuZXJpYyBhcyBwb3NzaWJsZSB0byBlbnN1cmUgaXQgd29ya3MgZm9yIGV2ZXJ5b25lLiBZb3UN CiAgaW52b2tlIGl0IGFzIGZvbGxvd3M6DQogIOKUjOKUgOKUgOKUgOKUgA0KICDilIIgb3VpIGJ1 aWxkIG91aS5qc29uIGluc3RhbGwtYnVuZGxlDQogIOKUlOKUgOKUgOKUgOKUgA0KDQogIHdoZXJl IGBpbnN0YWxsLWJ1bmRsZScgaXMgYSBmb2xkZXIgY29udGFpbmluZyB5b3VyIHByZWNvbXBpbGVk DQogIGJpbmFyaWVzIGFuZCBhbnkgZmlsZXMgeW91IHdhbnQgdG8gaW5zdGFsbCBhbG9uZ3NpZGUg dGhlbSwgYXJyYW5nZWQgaW4NCiAgYW55IHdheSB5b3UnZCBsaWtlLiAgVGhlIGBvdWkuanNvbicg ZmlsZSBpcyBhIGNvbmZpZ3VyYXRpb24gZmlsZSB0aGF0DQogIGNvbnRhaW5zIG1ldGFkYXRhIGFu ZCBpbmZvcm1hdGlvbiBvbiB0aGUgaW5zdGFsbGF0aW9uIGJ1bmRsZSdzIGxheW91dA0KICBzdWNo IGFzIHdoZXJlIHRvIGZpbmQgYmluYXJpZXMgdG8gYWRkIHRvIHRoZSBgUEFUSCcgb3Igd2hlcmUg dG8gZmluZA0KICBtYW5wYWdlcy4NCg0KICBgb3VpJyBjYW4gYWxzbyBjcmVhdGUgaW5zdGFsbGVy cyBmb3IgcGx1Z2lucywgYXNzdW1pbmcgdGhlIG1haW4NCiAgYXBwbGljYXRpb24gd2FzIGVpdGhl ciBpbnN0YWxsZWQgYnkgYSBgb3VpJyBnZW5lcmF0ZWQgaW5zdGFsbGVyLCBvcg0KICB3YXMgaW5z dGFsbGVkIGZvbGxvd2luZyBzb21lIGJhc2ljIHJ1bGVzLg0KDQogIFRoZSBwcm9qZWN0IGlzIGhv c3RlZCBvbiBnaXRodWI6DQogIDxodHRwczovL2dpdGh1Yi5jb20vT0NhbWxQcm8vb2NhbWwtdW5p dmVyc2FsLWluc3RhbGxlcj4gVGhlIGZ1bGwNCiAgZG9jdW1lbnRhdGlvbiBpcyBhdmFpbGFibGUg W2hlcmVdLiBJbiBwYXJ0aWN1bGFyLCB5b3UgY2FuIGZpbmQNCiAgZ3VpZGVsaW5lcyBvbiBob3cg dG8gdXNlIGl0IHRvIGNyZWF0ZSBpbnN0YWxsZXJzIGZvciB5b3VyIGR1bmUgYnVpbHQNCiAgcHJv amVjdCBbaGVyZV0uDQoNCiAgUGxlYXNlIGdvIGFoZWFkIGFuZCBnaXZlIGl0IGEgdHJ5LCB3ZSdk IGxvdmUgdG8gaGVhciB5b3VyIGZlZWRiYWNrLg0KDQogIFdlIHdlbGNvbWUgZXh0ZXJuYWwgY29u dHJpYnV0b3JzIHNvIGlmIHlvdSdkIGxpa2UgdG8gdGFrZSBwYXJ0IGluIHRoZQ0KICBwcm9qZWN0 LCBwbGVhc2UgcmVhZCBvdXIgW0NPTlRSSUJVVElORy5tZF0gYW5kIGp1bXAgaW4hDQoNCiAgVGhl IHByb2plY3QgaXMgc3RpbGwgaW4gYSByZWxhdGl2ZWx5IGVhcmx5IHN0YWdlIGFuZCB0aGVyZSBh cmUgc29tZQ0KICBrZXkgZmVhdHVyZXMgd2UnZCBsaWtlIHRvIGFkZCwgc3VjaCBhcyBzdHJlYW1s aW5pbmcgdGhlIHVzZXINCiAgZXhwZXJpZW5jZSBmb3IgZHVuZSBwcm9qZWN0cyAocmVtb3Zpbmcg dGhlIG5lY2Vzc2l0eSB0byBtYWludGFpbiBhDQogIHNlcGFyYXRlIGNvbmZpZ3VyYXRpb24gZmls ZSBmb3IgdGhlIG1vc3QgY29tbW9uIHVzZSBjYXNlcykgb3Igc3VwcG9ydA0KICBmb3IgY3Jvc3Mt Y29tcGlsYXRpb24vY3Jvc3MtcGxhdGZvcm0gaW5zdGFsbGVyIGdlbmVyYXRpb24uIElmIHRob3Nl DQogIGZlYXR1cmVzIHNvdW5kIGludGVyZXN0aW5nIHRvIHlvdSBhbmQgeW91IHdvdWxkIGxpa2Ug dG8gZnVuZCB0aGVpcg0KICBkZXZlbG9wbWVudCwgcGxlYXNlIHJlYWNoIG91dCB0byBjb250YWN0 QG9jYW1scHJvLmNvbSAuDQoNCiAgRmluYWxseSwgd2UnZCBsaWtlIHRvIHRoYW5rIG91ciBwYXJ0 bmVyIENFQS1saXN0IHdobyBmdW5kZWQgdGhlDQogIGluaXRpYWwgZGV2ZWxvcG1lbnQgb2YgYG91 aScgZnJvbSBgb3BhbS13aXgnIGFuZCBtYWRlIGl0IGFsbCBwb3NzaWJsZSENCg0KICBIYXBweSBp bnN0YWxsaW5nIQ0KDQoNCltoZXJlXQ0KPGh0dHBzOi8vZ2l0aHViLmNvbS9PQ2FtbFByby9vY2Ft bC11bml2ZXJzYWwtaW5zdGFsbGVyL2Jsb2IvbWFzdGVyL2RvYy9SRUFETUUubWQ+DQoNCltoZXJl XQ0KPGh0dHBzOi8vZ2l0aHViLmNvbS9PQ2FtbFByby9vY2FtbC11bml2ZXJzYWwtaW5zdGFsbGVy L2Jsb2IvbWFzdGVyL2RvYy9SRUFETUUubWQjZ2VuZXJhdGluZy1hLWJpbmFyeS1pbnN0YWxsZXIt Zm9yLXlvdXItZHVuZS1wcm9qZWN0Pg0KDQpbQ09OVFJJQlVUSU5HLm1kXQ0KPGh0dHBzOi8vZ2l0 aHViLmNvbS9PQ2FtbFByby9vY2FtbC11bml2ZXJzYWwtaW5zdGFsbGVyL2Jsb2IvbWFzdGVyL0NP TlRSSUJVVElORy5tZD4NCg0KDQpOaXh0YW1hbDogRnVsZmlsbGluZyBJbnB1dCBQaW5uaW5nIGZv ciBOaXgNCuKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkA0KDQogIEFyY2hpdmU6DQogIDxodHRwczovL2Rpc2N1c3Mub2Nh bWwub3JnL3QvYW5uLW5peHRhbWFsLWZ1bGZpbGxpbmctaW5wdXQtcGlubmluZy1mb3Itbml4LzE3 ODg3LzE+DQoNCg0KdG9hc3RhbCBhbm5vdW5jZWQNCuKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgA0KDQogIFtOaXh0YW1hbF0gaXMgbXkgZmlyc3Qgc2Vy aW91cyBPQ2FtbCBwcm9qZWN0IHJlbGVhc2UsIG5vdyBhdCB2ZXJpc29uDQogIDEuMS40LiBJdCB3 YXMgY3JlYXRlZCBhcyBhIHJlYWN0aW9uIHRvIHRoZSBsYWNrIG9mIGZlYXR1cmVzIEkgd2FudGVk DQogIGZyb20gaXRzIOKAnGNvbXBldGl0b3Jz4oCdIGBuaXYnICYgYG5waW5zJyB3aGlsZSBhZGRp dGlvbmFsbHkgY292ZXJpbmcNCiAgZmVhdHVyZXMgTml4IGZsYWtlcyBuZXZlciBjb3VsZCBzdXBw b3J0IGdpdmVuIGl04oCZcyByaWdpZCBkZXNpZ24NCiAgcGhpbG9zb3BoeSB3aGljaCBoYXMgbW9y ZSBkcmF3YmFja3MgdGhhbiBmb2xrcyBpbml0aWFsbHkgcmVhbGl6ZS4gSQ0KICBoYXZlIGJlZW4g dXNpbmcgaXQgb24gYWxsIHByb2plY3RzIGZvciBhIGNvdXBsZSBtb250aHMgbm93ICYgaGFkIGF0 DQogIGxlYXN0IGEgY291cGxlIGZvbGtzIEkgZGlkbuKAmXQga25vdyBwcmlvciB0cnkgaXQgb3V0 IHByb3ZpZGluZyBmZWVkYmFjaw0KICAmIGJ1ZyByZXBvcnRzLg0KDQogICpLZXkgZmVhdHVyZXM6 Kg0KDQogIOKAoiBBdXRvbWF0ZSB0aGUgbWFudWFsIHdvcmsgb2YgaW5wdXQgcGlubmluZyBmb3Ig ZGVwZW5kZW5jeSBtYW5hZ2VtZW50DQogIOKAoiBBbGxvdyBlYXN5IHdheXMgdG8gbG9jayAmIHJl ZnJlc2ggdGhvc2UgaW5wdXRzDQogIOKAoiBEZWNsYXJhdGl2ZSBbS0RMXSBtYW5pZmVzdCBmaWxl IG92ZXIgaW1wZXJhdGl2ZSA8YWJiciB0aXRsZT0iY29tbWFuZA0KICAgIGxpbmUgaW50ZXJmYWNl Ij5DTEk8L2FiYnI+IGZsYWdzDQogIOKAoiBIb3N0LCBmb3JnZSwgPGFiYnIgdGl0bGU9InZlcnNp b24gY29udHJvbA0KICAgIHN5c3RlbSI+VkNTPC9hYmJyPi1hZ25vc3RpYw0KICDigKIgQ2hvb3Nl IDxhYmJyIHRpdGxlPSJldmFsdWF0aW9uIj5ldmFsPC9hYmJyPiB0aW1lIGZldGNoZXJzIChidWls dGlucykNCiAgICBvciBidWlsZCB0aW1lIGZldGNoZXJzIChOaXhwa2dzLCBkZWZhdWx0KSDigJQg d2hpY2ggb3BlbnMgdXAgZmV0Y2hpbmcNCiAgICBub3ctc3VwcG9ydGVkIFtEYXJjc10sIFtQaWp1 bF0sICYgW0Zvc3NpbF0NCiAg4oCiIFN1cHBvcnRzIG1pcnJvcnMgKG9uIGtpbmRzIHRoYXQgc3Vw cG9ydCBtaXJyb3JzKQ0KICDigKIgT3ZlcnJpZGUgaGFzaCBhbGdvcml0aG0gb24gYSBwZXItcHJv amVjdCAmIHBlci1pbnB1dCBiYXNpcyDigJQNCiAgICBpbmNsdWRpbmcgQkxBS0UzIHN1cHBvcnQg KHdoaWNoIF9kb2VzXyByZXF1aXJlIGVuYWJsaW5nDQogICAgYGJsYWtlMy1oYXNoZXNgIHRvIG9w dCBpbikNCiAg4oCiIEN1c3RvbSBmcmVzaG5lc3MgY29tbWFuZHMgKGF2b2lkIHJlZmV0Y2hpbmcg bWFzc2l2ZSBpbnB1dHMganVzdCB0bw0KICAgIGNoZWNrIHRoZSBoYXNoIGhhc27igJl0IGNoYW5n ZWQpDQogIOKAoiBObyBleHBlcmltZW50YWwgTml4IGZlYXR1cmVzIHJlcXVpcmVkIChmbGFrZXMp DQoNCiAgT3V0c2lkZSB0aGUgaG9tZXBhZ2UsIGl0IHdvdWxkIGJlIHdvcnRoIGNoZWNraW5nIHRo ZSBbPGFiYnINCiAgdGl0bGU9ImZyZXF1ZW50bHkgYXNrZWQgcXVlc3Rpb25zIj5GQVFzPC9hYmJy Pl0gaWYgYW55IC93aGF0cy8gb3INCiAgL3doeXMvIGNvbWUgdXAuDQoNCg0KW05peHRhbWFsXSA8 aHR0cHM6Ly9uaXh0YW1hbC50b2FzdC5hbD4NCg0KW0tETF0gPGh0dHBzOi8va2RsLmRldj4NCg0K W0RhcmNzXSA8aHR0cHM6Ly9kYXJjcy5uZXQ+DQoNCltQaWp1bF0gPGh0dHBzOi8vcGlqdWwub3Jn Pg0KDQpbRm9zc2lsXSA8aHR0cHM6Ly9mb3NzaWwtc2NtLm9yZz4NCg0KWzxhYmJyIHRpdGxlPSJm cmVxdWVudGx5IGFza2VkIHF1ZXN0aW9ucyI+RkFRczwvYWJicj5dDQo8aHR0cHM6Ly9uaXh0YW1h bC50b2FzdC5hbC9mYXFzLz4NCg0KDQpPQ2FtbC1SREYgMS4yLjANCuKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkA0KDQogIEFyY2hpdmU6IDxodHRwczovL2Rpc2N1 c3Mub2NhbWwub3JnL3QvYW5uLW9jYW1sLXJkZi0xLTItMC8xNzg5MC8xPg0KDQoNClpvZ2d5IGFu bm91bmNlZA0K4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSADQoN CiAgSGVsbG8sDQoNCiAgQSBuZXcgcmVsZWFzZSBvZiBPQ2FtbC1SREYsIFsxLjIuMF0sIGlzIGF2 YWlsYWJsZS4gVGhlIG1haW4gYWRkaXRpb25zDQogIGFyZToNCg0KICDigKIgYSBuZXcgW0lncmFw aF0gbW9kdWxlLCBwcm92aWRpbmcgaW1tdXRhYmxlIGdyYXBocyAoZm9yIGZ1bmN0aW9uYWwNCiAg ICBzdHlsZSkuDQogIOKAoiBhIG5ldyBbcmRmX3JkZmFdIHBhY2thZ2UgaW1wbGVtZW50aW5nIGEg W1JkZmEgMS4xXSBwcm9jZXNzb3IuDQoNCiAgSXQgaXMgYXZhaWxhYmxlIGZyb20gW215IG93biBv cGFtIHJlcG9zaXRvcnldLg0KDQoNClsxLjIuMF0gPGh0dHBzOi8vd3d3Lmdvb2QtZXJpcy5uZXQv b2NhbWwtcmRmL3Bvc3RzL29jYW1sLXJkZi0xLjIuMC5odG1sPg0KDQpbSWdyYXBoXQ0KPGh0dHBz Oi8vd3d3Lmdvb2QtZXJpcy5uZXQvb2NhbWwtcmRmL3JlZmRvYy9yZGYvUmRmL0lncmFwaC9pbmRl eC5odG1sPg0KDQpbcmRmX3JkZmFdDQo8aHR0cHM6Ly93d3cuZ29vZC1lcmlzLm5ldC9vY2FtbC1y ZGYvcmVmZG9jL3JkZl9yZGZhL2luZGV4Lmh0bWw+DQoNCltSZGZhIDEuMV0gPGh0dHBzOi8vd3d3 LnczLm9yZy9UUi9yZGZhLWNvcmU+DQoNCltteSBvd24gb3BhbSByZXBvc2l0b3J5XSA8aHR0cHM6 Ly9mcmFtYWdpdC5vcmcvem9nZ3kvb3BhbS1yZXBvc2l0b3J5Pg0KDQoNClNsaXBzaG93IQ0K4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQDQoNCiAgQXJjaGl2ZTogPGh0dHBzOi8vZGlzY3Vzcy5v Y2FtbC5vcmcvdC9hbm4tc2xpcHNob3cvMTYzMzcvMjI+DQoNCg0KQ29udGludWluZyB0aGlzIHRo cmVhZCwgUGF1bC1FbGxpb3QgYW5ub3VuY2VkDQrilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIANCg0KICBJ dCBpcyB3aXRoIGEgYmxhdGFudCBkZW5pYWwgb2YgdGhlIGN1cnJlbnQgc2l0dWF0aW9uIHRoYXQg SSBhbm5vdW5jZQ0KICB0aGUgbmV4dCByZWxlYXNlIG9mIFNsaXBzaG93Og0KDQoNClNsaXBzaG93 IDAuMTAuMDogRG9uJ3QgbG9vayBge3VwfScNCuKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKV jOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKV jOKVjOKVjOKVjOKVjOKVjA0KDQogIFRoZSArYXN0ZXJvaWQrIHN0YXIgb2YgdGhlIHJlbGVhc2Ug aXMgdGhlIG5ldyB3YXJuaW5ncyB0aGF0IHRoZQ0KICBjb21waWxlciBjYW4gcmFpc2UgdG8gaGVs cCB5b3Ugd3JpdGUgYSBidWctZnJlZSBwcmVzZW50YXRpb24uIFRob3NlDQogIHdhcm5pbmdzIGFy ZSB2aXNpYmxlIG9uIHRoZSBjb21tYW5kLWxpbmUsIGJ1dCBhbHNvIGluIHRoZQ0KICBob3QtcmVs b2FkaW5nIHByZXZpZXcgaW4gYHNlcnZlJyBtb2RlIQ0KDQogIDxodHRwczovL2dpdGh1Yi5jb20v dXNlci1hdHRhY2htZW50cy9hc3NldHMvZjc4NTY4ZTUtZGJiZi00OWUzLTljZDMtOGQyZTVjNGVk ZmRhPg0KDQogIFdhcm5pbmdzIHdpbGwgaG9wZWZ1bGx5IGhlbHAgZGV0ZWN0IGJ1Z3MgaW4geW91 ciBwcmVzZW50YXRpb25zIGFuZA0KICBpbXByb3ZlIHRoZSBleHBlcmllbmNlLCBlc3BlY2lhbGx5 IG9mIG5ld2NvbWVycyENCg0KICBUaGlzIHRpbWUsIEknZCBsaWtlIHRvIHRoYW5rcyBAQWxpc3Rh aXIgZm9yIHRoZSBpbmNyZWRpYmxlIFtHcmFjZSDwn5KFXQ0KICBsaWJyYXJ5LiBXaGVuZXZlciBJ IGxvb2sgc29tZXdoZXJlLCBJIGZpbmQgYSBuZXcgT0NhbWwgcGVhcmwuIFRoYW5rDQogIHlvdSBm b3IgdGhhdCEgVGhpcyBsaWJyYXJ5LCB0aGUgZWNvc3lzdGVtLCBvcGVuLXNvdXJjZSwgYXJlIGFs bA0KICBhd2Vzb21lIHRoaW5ncy4NCg0KICBBbmQgdGhhbmtzIGFnYWluIHRvIE5MTmV0IGZvciBb c3VwcG9ydGluZ10gdGhlIGRldmVsb3BtZW50IG9mDQogIFNsaXBzaG93IQ0KDQogIEhlcmUgaXMg dGhlIGZ1bGwgY2hhbmdlbG9nOg0KDQoNCltHcmFjZSDwn5KFXSA8aHR0cHM6Ly9naXRodWIuY29t L2pvaG55b2IvZ3JhY2U+DQoNCltzdXBwb3J0aW5nXSA8aHR0cHM6Ly9ubG5ldC5ubC9wcm9qZWN0 L1NsaXBzaG93Lz4NCg0KDQpBZGRlZA0K4pWM4pWM4pWM4pWM4pWMDQoNCiAg4oCiIEhlbHBmdWwg d2FybmluZ3MgYXQgY29tcGlsZS10aW1lICgjMjEzKToNCiAgICDigKIgQWN0aW9uIHBhcnNpbmcg ZmFpbHVyZXMsDQogICAg4oCiIE1pc3NpbmcgSUQgKGFuZCBgZXh0ZXJuYWwtaWRzJyBmcm9udG1h dHRlciBmaWVsZCB0byBzZWxlY3RpdmVseQ0KICAgICAgZGVhY3RpdmF0ZSksDQogICAg4oCiIER1 cGxpY2F0ZWQgSUQsDQogICAg4oCiIEZyb250bWF0dGVyIHBhcnNpbmcgZXJyb3IsDQogICAg4oCi IFdyb25nIHRhcmdldCB0eXBlIGZvciBhY3Rpb25zLA0KICAgIOKAoiBNaXNzaW5nIGZpbGUsDQog ICAg4oCiIFVua25vd24gYXR0cmlidXRlLA0KICAgIOKAoiDigKYNCg0KDQpGaXhlZA0K4pWM4pWM 4pWM4pWM4pWMDQoNCiAg4oCiIEZpeGVkIGRyYXdpbmcgc3RvcHBpbmcgc2xpZ2h0bHkgYWZ0ZXIg cGF1c2VzICgjMjE2KQ0KICDigKIgRml4ZWQga2V5Ym9hcmQgc2hvcnRjdXRzIG5vdCB3b3JraW5n IGluIHNlcnZlIG1vZGUgdW50aWwgdGhlIHByZXZpZXcNCiAgICB3YXMgY2xpY2tlZCAoIzIxNSkN CiAg4oCiIEZpeCBzaG9ydGN1dHMgbm90IHdvcmtpbmcgYWZ0ZXIgc2F2aW5nIGEgZHJhd2luZyAo IzIxNykNCiAg4oCiIEZpeCB3cm9uZyBleGFtcGxlIGxpbmtzIGluIGRvY3MgKCMyMTgpDQoNCg0K SXMgdGhlcmUgYSBwdWJsaWMgYXJjaGl2ZSBmb3IgdGhlIGNhbWwtbGlzdD8NCuKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkA0KDQogIEFyY2hpdmU6DQogIDxodHRwczovL2Rpc2N1c3Mub2NhbWwub3JnL3QvaXMt dGhlcmUtYS1wdWJsaWMtYXJjaGl2ZS1mb3ItdGhlLWNhbWwtbGlzdC8xNjM3NC82Pg0KDQoNCkNv bnRpbnVpbmcgdGhpcyB0aHJlYWQsIENhbGFzY2liZXR0YSBSb21haW4gYW5ub3VuY2VkDQrilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIANCg0KICBIZWxsbywgSSBh bSBwbGVhc2VkIHRvIGFubm91bmNlIHRoZSBsYXVuY2ggb2YNCiAgPGh0dHBzOi8vY2FtbC1saXN0 LnJvYnVyLmNvb3AvPiwgYSB1bmlrZXJuZWwgdGhhdCBwcm92aWRlcyBhIHNlYXJjaA0KICBlbmdp bmUgZm9yIHRoZSBjYW1sLWxpc3QuIFdlIG5vdyBoYXZlIHB1YmxpYyBhY2Nlc3MgdG8gdGhpcyBh cmNoaXZlDQogIDp0YWRhOiENCg0KICBPdXIgY29vcGVyYXRpdmUgaXMgY3VycmVudGx5IHdvcmtp bmcgb24gc2V2ZXJhbCBmcm9udHMsIGluY2x1ZGluZw0KICBlbWFpbCwgYnkgb2ZmZXJpbmcgYW4g YXJjaGl2aW5nIHN5c3RlbS4gRm9yIG1vcmUgZGV0YWlscywgcGxlYXNlIHNlZQ0KICBbdGhpcyBh cnRpY2xlXS4gQW5vdGhlciBhcnRpY2xlIGRlc2NyaWJlcyBbdGhlIHNlYXJjaCBlbmdpbmVdIHdl IHVzZSwNCiAgYW5kIGEgdGhpcmQgZXhwbGFpbnMgW2hvdyB3ZSBkZXZlbG9wZWQgdGhpcyB1bmlr ZXJuZWxdIChhbHRob3VnaCB0aGUNCiAgbGF0dGVyIGhhcyBldm9sdmVkIGNvbnNpZGVyYWJseSBz aW5jZSB0aGVuLCB0aGUgY29yZSByZW1haW5zIHRoZQ0KICBzYW1lKS4NCg0KICBXZSBhcmUgdGhl cmVmb3JlIGRlbGlnaHRlZCB0byBtYWtlIHRoaXMgc2VydmljZSBhdmFpbGFibGUgdG8gdGhlDQog IGNvbW11bml0eSwgYW5kIGlmIHlvdSB3b3VsZCBsaWtlIHRvIGhlbHAgdXMgaW1wcm92ZSBpdCwg dGhlIHByb2plY3QgaXMNCiAgY3VycmVudGx5IGF2YWlsYWJsZSBbaGVyZV0uIFdlIHdvdWxkIGxp a2UgdG8gdGhhbmsgW05MbmV0XSBmb3IgZnVuZGluZw0KICB0aGlzIHVuaWtlcm5lbCwgYW5kIGlm IHlvdSBhcHByZWNpYXRlIG91ciB3b3JrLCBwbGVhc2UgZG8gbm90IGhlc2l0YXRlDQogIHRvIG1h a2UgYSBkb25hdGlvbiB0byBvdXIgY29vcGVyYXRpdmUgKHZpYSBbR2l0SHViXSBvciBbZGlyZWN0 bHkgdG8NCiAgb3VyIGNvb3BlcmF0aXZlXSkNCg0KICBGaW5hbGx5LCB0aGlzIGV4YW1wbGUgYWxz byBzaG93Y2FzZXMgYWxsIG91ciB3b3JrIG9uIHVuaWtlcm5lbHM6IGZyb20NCiAgd2hhdCBhbiBF dGhlcm5ldCBmcmFtZSBpcywgdGhyb3VnaCB0aGUgYXJjaGl2ZSBzeXN0ZW0gYW5kIHRoZQ0KICBl eHRyYWN0aW9uIG9mIGVtYWlscyBmcm9tIGEgdmlydHVhbGlzZWQgaGFyZCBkcml2ZSwgcmlnaHQg dXAgdG8gdGhlDQogIEhUVFAgcmVxdWVzdCAtICpldmVyeXRoaW5nIGlzIGRvbmUgaW4gT0NhbWwq IChhbmQgd2Ugd291bGQgb25jZSBhZ2Fpbg0KICByZWNvbW1lbmQgcmVhZGluZyBvdXIgdHV0b3Jp YWwgb24gW21uZXRdIGlmIHlvdSB3b3VsZCBsaWtlIHRvIGJ1aWxkIHVwDQogIHVuaWtlcm5lbHMp Lg0KDQogIFNvIGhhdmUgZnVuIGh1bnRpbmcgZm9yIHJlbGljcyBmcm9tIHRoZSBoaXN0b3J5IG9m IE9DYW1sIQ0KDQoNClt0aGlzIGFydGljbGVdDQo8aHR0cHM6Ly9ibG9nLnJvYnVyLmNvb3AvYXJ0 aWNsZXMvMjAyNS0wMS0wNy1jYXJ0b24tYW5kLWNhY2hldC5odG1sPg0KDQpbdGhlIHNlYXJjaCBl bmdpbmVdDQo8aHR0cHM6Ly9ibG9nLnJvYnVyLmNvb3AvYXJ0aWNsZXMvcHR0X3N0ZW1fYW5kX3Nl YXJjaF9lbmdpbmUuaHRtbD4NCg0KW2hvdyB3ZSBkZXZlbG9wZWQgdGhpcyB1bmlrZXJuZWxdDQo8 aHR0cHM6Ly9ibG9nLnJvYnVyLmNvb3AvYXJ0aWNsZXMvMjAyNS0wNC0xMi1wdHQtc2VhcmNoLXdl YmFwcC5odG1sPg0KDQpbaGVyZV0gPGh0dHBzOi8vZ2l0aHViLmNvbS9yb2J1ci1jb29wL2JsYW1l Pg0KDQpbTkxuZXRdIDxodHRwczovL25sbmV0Lm5sLz4NCg0KW0dpdEh1Yl0gPGh0dHBzOi8vZ2l0 aHViLmNvbS9zcG9uc29ycy9yb2J1ci1jb29wPg0KDQpbZGlyZWN0bHkgdG8gb3VyIGNvb3BlcmF0 aXZlXSA8aHR0cHM6Ly9yb2J1ci5jb29wL0RvbmF0ZT4NCg0KW21uZXRdIDxodHRwczovL3JvYnVy LWNvb3AuZ2l0aHViLmlvL21uZXQvPg0KDQoNCk9sZCBDV04NCuKVkOKVkOKVkOKVkOKVkOKVkOKV kA0KDQogIElmIHlvdSBoYXBwZW4gdG8gbWlzcyBhIENXTiwgeW91IGNhbiBbc2VuZCBtZSBhIG1l c3NhZ2VdIGFuZCBJJ2xsIG1haWwNCiAgaXQgdG8geW91LCBvciBnbyB0YWtlIGEgbG9vayBhdCBb dGhlIGFyY2hpdmVdIG9yIHRoZSBbUlNTIGZlZWQgb2YgdGhlDQogIGFyY2hpdmVzXS4NCg0KICBJ ZiB5b3UgYWxzbyB3aXNoIHRvIHJlY2VpdmUgaXQgZXZlcnkgd2VlayBieSBtYWlsLCB5b3UgbWF5 IHN1YnNjcmliZQ0KICB0byB0aGUgW2NhbWwtbGlzdF0uDQoNCiAgW0FsYW4gU2NobWl0dF0NCg0K DQpbc2VuZCBtZSBhIG1lc3NhZ2VdIDxtYWlsdG86YWxhbi5zY2htaXR0QHBvbHl0ZWNobmlxdWUu b3JnPg0KDQpbdGhlIGFyY2hpdmVdIDxodHRwczovL2FsYW4ucGV0aXRlcG9tbWUubmV0L2N3bi8+ DQoNCltSU1MgZmVlZCBvZiB0aGUgYXJjaGl2ZXNdIDxodHRwczovL2FsYW4ucGV0aXRlcG9tbWUu bmV0L2N3bi9jd24ucnNzPg0KDQpbY2FtbC1saXN0XSA8aHR0cHM6Ly9zeW1wYS5pbnJpYS5mci9z eW1wYS9pbmZvL2NhbWwtbGlzdD4NCg0KW0FsYW4gU2NobWl0dF0gPGh0dHBzOi8vYWxhbi5wZXRp dGVwb21tZS5uZXQvPg0KDQo= --=-=-= 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 March 10 to 17, 2026.

Public securiy meeting

Hannes Mehnert announced

Dear everyone,

as a reminder =E2=80=93 next week Thursday (March 19th) 14:00 CEST, there w= ill be a public OCaml security meeting hosted by the https://ocaml.org/security team. We will meet at https://meet.bo= rnhack.dk/OCamlSecurityPublicMeeting

Our agenda and notes will be at https://pad.data.coop/Ie5voBePSiKvjZdEko6otQ#

If you're curious, the notes from our last meeting are at https://pad.data.coop/7-Ic5rG6Toyns= W02hJsndg

Hope to see you there!

Google OR-Tools: CP-SAT Subset

Timothy Bourke announced

The Google OR-Tools<= /a> are a suite of tools for solving optimization problems. They include, i= n particular, CP-SAT, which is a powerful constraint solver and optimizer for integer linear = programming and boolean satisfiability problems.

The ocaml-ortools pa= ckage provides an OCaml interface to a subset of CP-SAT constraints. It com= prises two parts `ortools`, which allows modelling constraint problems in O= Caml and translating them to a protocol buffer format (thanks to ocaml-protc), and `ortools_so= lvers`, which allows an embedded version of CP-SAT to be called directly fr= om OCaml. Both parts can be installed using opam or built with dune. The la= tter includes the source of OR-Tools 9.15 which is built together with most= of its libraries and installed as part of the opam package.

Some simple examples can be found in the online documentation and source code= . They can be built using the following commands.

opam install ortools ortools_solvers
ocamlfind ocamlopt -o prog -package ortools -package ortools_solvers -linkp=
kg prog.ml

I would be happy to accept pull requests for the missing CP-SAT constraints= (I think it best to develop the interface together with real applications,= and I only need the ILP and boolean parts at the moment), to translate mor= e of the standard example programs (an easy way to contribute), and to incl= ude other solvers from the suite (likely to involve solving tedious compila= tion and compatibility problems across multiple platforms).

Thanks to @nojb, @Rucikir , and others for their help<= /a> with dun= e, and @xvw and @panglesd for their help with odoc. Thanks to @jmid , @mseri , and @avsm for= discussing and merging my opam-repository pull requests.

Neocaml-mode (A modern Emacs major mode for OCaml) is looking = for testers

Continuing this thread, Bozhidar Batsov announced

FYI - ht= tps://github.com/bbatsov/neocaml/releases/tag/v0.4.0

You'll need to update your Tree-sitter grammars due to some upstream (break= ing) changes in the TS OCaml grammar.

oui: multi-platform binary installers

Nathan Rebours announced

We are happy to announce the first release of oui!

oui is a tool that generates multi-platform binary installers = for your OCaml applications. It can generate installers for Windows, Linux = and MacOS. We hope it will help all of you out there developping applications for non = OCaml developers, allowing your users to install your programs without havi= ng to install OCaml and/or opam, thus greatly simplifying their user experi= ence.

You can install oui with the following command:

opam install oui

We made it as generic as possible to ensure it works for everyone. You invo= ke it as follows:

oui build oui.json install-bundle

where install-bundle is a folder containing your precompiled b= inaries and any files you want to install alongside them, arranged in any w= ay you'd like. The oui.json file is a configuration file that contains metada= ta and information on the installation bundle's layout such as where to fin= d binaries to add to the PATH or where to find manpages.

oui can also create installers for plugins, assuming the main = application was either installed by a oui generated installer,= or was installed following some basic rules.

The project is hosted on github: https://github.com/OCamlPro/ocaml-universal-install= er The full documentation is available here. In particula= r, you can find guidelines on how to use it to create installers for your d= une built project here.

Please go ahead and give it a try, we'd love to hear your feedback.

We welcome external contributors so if you'd like to take part in the proje= ct, please read our CONTRIBUTING.md and jump in!

The project is still in a relatively early stage and there are some key fea= tures we'd like to add, such as streamlining the user experience for dune p= rojects (removing the necessity to maintain a separate configuration file f= or the most common use cases) or support for cross-compilation/cross-platfo= rm installer generation. If those features sound interesting to you and you= would like to fund their development, please reach out to contact@ocamlpro= .com .

Finally, we'd like to thank our partner CEA-list who funded the initial dev= elopment of oui from opam-wix and made it all pos= sible!

Happy installing!

Nixtamal: Fulfilling Input Pinning for Nix

toastal announced

Nixtamal is my first serious OCam= l project release, now at verison 1.1.4. It was created as a reaction to th= e lack of features I wanted from its =E2=80=9Ccompetitors=E2=80=9D ni= v & npins while additionally covering features Nix = flakes never could support given it=E2=80=99s rigid design philosophy which= has more drawbacks than folks initially realize. I have been using it on a= ll projects for a couple months now & had at least a couple folks I did= n=E2=80=99t know prior try it out providing feedback & bug reports.

Key features:

  • Automate the manual work of input pinning for dependency management
  • Allow easy ways to lock & refresh those inputs
  • Declarative KDL manifest file over impe= rative <abbr title=3D"command line interface">CLI</abbr> flags<= /li>
  • Host, forge, <abbr title=3D"version control system">VCS</abbr&= gt;-agnostic
  • Choose <abbr title=3D"evaluation">eval</abbr> time fetchers= (builtins) or build time fetchers (Nixpkgs, default) =E2=80=94 which opens= up fetching now-supported Darcs, Pijul, & = Fossil
  • Supports mirrors (on kinds that support mirrors)
  • Override hash algorithm on a per-project & per-input basis =E2=80= =94 including BLAKE3 support (which does r= equire enabling `blake3-hashes` to opt in)
  • Custom freshness commands (avoid refetching massive inputs just to chec= k the hash hasn=E2=80=99t changed)
  • No experimental Nix features required (flakes)

Outside the homepage, it would be worth checking the <abbr title=3D"frequently asked questions">FAQs= </abbr> if any whats or whys come up.

OCaml-RDF 1.2.0

Zoggy announced

Hello,

A new release of OCaml-RDF, 1.2.0, is available. The main additions are:

  • a new Igraph module, providing immutable graphs (for function= al style).
  • a new rdf_rdfa package implementing a Rdfa 1.1 processor.

It is available from my own opam repository.

Slipshow!

Continuing this thread, Paul-Elliot announced

It is with a blatant denial of the current situation that I announce the ne= xt release of Slipshow:

Slipshow 0.10.0: Don't look {up}

The asteroid star of the release is the new warnings that the co= mpiler can raise to help you write a bug-free presentation. Those warnings = are visible on the command-line, but also in the hot-reloading preview in <= code>serve mode!

https://github.com/user-attachments/assets/f78568e5-dbbf-4= 9e3-9cd3-8d2e5c4edfda

Warnings will hopefully help detect bugs in your presentations and improve = the experience, especially of newcomers!

This time, I'd like to thanks @Alistair for the incredible Grace =F0=9F=92=85 library. Whenever I loo= k somewhere, I find a new OCaml pearl. Thank you for that! This library, th= e ecosystem, open-source, are all awesome things.

And thanks again to NLNet for supporting the development of Slipshow!

Here is the full changelog:

Added

  • Helpful warnings at compile-time (#213):
    • Action parsing failures,
    • Missing ID (and external-ids frontmatter field to selectiv= ely deactivate),
    • Duplicated ID,
    • Frontmatter parsing error,
    • Wrong target type for actions,
    • Missing file,
    • Unknown attribute,

Fixed

  • Fixed drawing stopping slightly after pauses (#216)
  • Fixed keyboard shortcuts not working in serve mode until the preview was clicked (#215)
  • Fix shortcuts not working after saving a drawing (#217)
  • Fix wrong example links in docs (#218)

Is there a public archive for the caml-list?

Continuing this thread, Calascibetta Romain announced=

Hello, I am pleased to announce the launch of https://caml-list.robur.coop/, a unikernel that provides a= search engine for the caml-list. We now have public access to this archive= :tada:!

Our cooperative is currently working on several fronts, including email, by= offering an archiving system. For more details, please see this articl= e. Another article describes the search engine we use, and a thir= d explains how we developed this unikernel (although the latter has= evolved considerably since then, the core remains the same).

We are therefore delighted to make this service available to the community,= and if you would like to help us improve it, the project is currently avai= lable here. We would li= ke to thank NLnet for funding this uniker= nel, and if you appreciate our work, please do not hesitate to make a donat= ion to our cooperative (via GitHub or directly to our coo= perative)

Finally, this example also showcases all our work on unikernels: from what = an Ethernet frame is, through the archive system and the extraction of emai= ls from a virtualised hard drive, right up to the HTTP request - everyth= ing is done in OCaml (and we would once again recommend reading our tut= orial on mnet if you wou= ld like to build up unikernels).

So have fun hunting for relics from the history of OCaml!

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.

--=-=-=--