From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail2-relais-roc.national.inria.fr (mail2-relais-roc.national.inria.fr [192.134.164.83]) by c5ff346549e7 (Postfix) with ESMTPS id 17B515D4 for ; Tue, 2 Feb 2021 13:56:26 +0000 (UTC) X-IronPort-AV: E=Sophos;i="5.79,395,1602540000"; d="scan'208,217";a="490417574" Received: from prod-listesu18.inria.fr (HELO sympa.inria.fr) ([128.93.162.160]) by mail2-relais-roc.national.inria.fr with ESMTP; 02 Feb 2021 14:56:25 +0100 Received: by sympa.inria.fr (Postfix, from userid 20132) id 1534FE0A9A; Tue, 2 Feb 2021 14:56:25 +0100 (CET) Received: from mail2-relais-roc.national.inria.fr (mail2-relais-roc.national.inria.fr [192.134.164.83]) by sympa.inria.fr (Postfix) with ESMTPS id E9229E00BF for ; Tue, 2 Feb 2021 14:56:17 +0100 (CET) X-IronPort-AV: E=Sophos;i="5.79,395,1602540000"; d="scan'208,217";a="490417540" Received: from cbg35-2-78-242-14-140.fbx.proxad.net (HELO set) ([78.242.14.140]) by mail2-relais-roc.national.inria.fr with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 02 Feb 2021 14:56:17 +0100 From: Alan Schmitt To: "lwn" , "cwn" , caml-list@inria.fr, comp@lists.orbitalfox.eu Date: Tue, 02 Feb 2021 14:56:17 +0100 Message-ID: <87sg6evaim.fsf@m4x.org> 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: 18395 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 ZWsgb2YgSmFudWFyeSAyNiB0bw0KRmVicnVhcnkgMDIsIDIwMjEuDQoNClRhYmxlIG9mIENvbnRl bnRzDQrilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAN Cg0KcmVsZWFzZSAwLjIuMiBvZiBwcHhfZGVyaXZpbmdfZW5jb2RpbmcNCk9DYW1sIDQuMTIuMCwg c2Vjb25kIGJldGEgcmVsZWFzZQ0KT0NhbWwgT2ZmaWNlIEhvdXJzPw0KVGltZXJlIDAuMS4zIC0g RGVhbGluZyB3aXRoIHRpbWUgYW5kIHRpbWUgem9uZXMgaGF2ZSBuZXZlciBiZWVuIGVhc2llcg0K SW50ZXJlc3RpbmcgT0NhbWwgQXJ0aWNsZXMNCmpzb24tZGF0YS1lbmNvZGluZyAwLjkNCm9jYW1s ZWFybHliaXJkIDEuMC4wIGJldGExDQpDbWRsaW5lciBjaGVhdHNoZWV0DQpjb250YWluZXJzIDMu Mg0KT0NhbWwgQ2Fmw6k6IFRodSwgRmViIDExIEAgN3BtIChVLlMuIENlbnRyYWwpDQpEZXBlbmRl bmN5IGdyYXBoIG9mIHNvbWUgT0NhbWwgc291cmNlIGZpbGVzDQpPdGhlciBPQ2FtbCBOZXdzDQpP bGQgQ1dODQoNCg0KcmVsZWFzZSAwLjIuMiBvZiBwcHhfZGVyaXZpbmdfZW5jb2RpbmcNCuKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkA0KDQog IEFyY2hpdmU6DQogIDxodHRwczovL2Rpc2N1c3Mub2NhbWwub3JnL3QvYW5uLXJlbGVhc2UtMC0y LTItb2YtcHB4LWRlcml2aW5nLWVuY29kaW5nLzcxNjkvMT4NCg0KDQpsZXZpbGxhaW4ubWF4aW1l IGFubm91bmNlZA0K4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSADQoNCiAgRm9sbG93aW5nIHRoZSByZWxl YXNlIG9mIFtqc29uLWRhdGEtZW5jb2RpbmcuMC45XSwgSSBhbSBoYXBweSB0bw0KICBhbm5vdW5j ZSB0aGUgcmVsZWFzZSBvZiBwcHhfZGVyaXZpbmdfZW5jb2RpbmcuMC4yLjIuDQoNCiAgVGhlIGNv ZGUgc291cmNlIGFuZCBzb21lIGRvY3VtZW50YXRpb24gaXMgYXZhaWxhYmxlIG9uIFtnaXRsYWJd LCBhbmQNCiAgdGhlIHBhY2thZ2UgY2FuIGJlIGluc3RhbGxlZCB3aXRoIG9wYW0gKGBvcGFtIGlu c3RhbGwNCiAgcHB4X2Rlcml2aW5nX2VuY29kaW5nJykuDQoNCiAgVGhpcyBwcHggYWxsb3dzIHRv IGRlcml2ZSBlbmNvZGluZyBvZiBqc29uLWRhdGEtZW5jb2RpbmcgbGlicmFyeSBmcm9tDQogIG1v c3Qgb2Ygb2NhbWwgdHlwZXMuDQoNCiAgSGF2ZSBmdW4hDQoNCg0KW2pzb24tZGF0YS1lbmNvZGlu Zy4wLjldDQo8aHR0cHM6Ly9kaXNjdXNzLm9jYW1sLm9yZy90L2Fubi1qc29uLWRhdGEtZW5jb2Rp bmctMC05LzcxNTc+DQoNCltnaXRsYWJdIDxodHRwczovL2dpdGxhYi5jb20vby1sYWJzL3BweF9k ZXJpdmluZ19lbmNvZGluZz4NCg0KDQpPQ2FtbCA0LjEyLjAsIHNlY29uZCBiZXRhIHJlbGVhc2UN CuKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkA0KDQogIEFyY2hpdmU6 DQogIDxodHRwczovL2Rpc2N1c3Mub2NhbWwub3JnL3Qvb2NhbWwtNC0xMi0wLXNlY29uZC1iZXRh LXJlbGVhc2UvNzE3MS8xPg0KDQoNCm9jdGFjaHJvbiBhbm5vdW5jZWQNCuKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgA0KDQogIFRoZSByZWxl YXNlIG9mIE9DYW1sIDQuMTIuMCBpcyBvbiB0aGUgaG9yaXpvbi4gV2UgaGF2ZSBjcmVhdGVkIGEg bmV3DQogIGJldGEgdmVyc2lvbiB0byBoZWxwIHlvdSBhZGFwdCB5b3VyIHNvZnR3YXJlIHRvIHRo ZSBuZXcgZmVhdHVyZXMgYWhlYWQNCiAgb2YgdGhlIHJlbGVhc2UuDQoNCiAgQ29tcGFyZWQgdG8g dGhlIGZpcnN0IGJldGEgcmVsZWFzZSwgdGhpcyBuZXcgcmVsZWFzZSBjb250YWlucyBvbmUgZml4 DQogIGZvciB0aGUgVGhyZWFkIGxpYnJhcnkgKGZvciBhIHJhY2UgY29uZGl0aW9uIG9uIFdpbmRv d3MpLCBhbmQNCiAgZXhwZXJpbWVudGFsbHkgcmUtZW5hYmxlcyBidWlsZGluZyB0aGUgY29tcGls ZXIgb24gaWxsdW1vcyBhbmQgT3JhY2xlDQogIFNvbGFyaXMuDQoNCiAgV2UgYXJlIGV4cGVjdGlu ZyB0aGlzIGJldGEgdG8gYmUgdGhlIGxhc3Qgb25lIGJlZm9yZSB0aGUgcmVsZWFzZS4NCg0KICBJ ZiB5b3UgZmluZCBhbnkgYnVncywgcGxlYXNlIHJlcG9ydCB0aGVtIGhlcmU6DQogICA8aHR0cHM6 Ly9naXRodWIuY29tL29jYW1sL29jYW1sL2lzc3Vlcz4NCg0KICBIYXBweSBoYWNraW5nLA0KDQog IOKAkyBGbG9yaWFuIEFuZ2VsZXR0aSBmb3IgdGhlIE9DYW1sIHRlYW0uDQoNCg0KSW5zdGFsbGF0 aW9uIGluc3RydWN0aW9ucw0K4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM 4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWMDQoNCiAgVGhlIGJhc2UgY29tcGls ZXIgY2FuIGJlIGluc3RhbGxlZCBhcyBhbiBvcGFtIHN3aXRjaCB3aXRoIHRoZQ0KICBmb2xsb3dp bmcgY29tbWFuZHMNCiAg4pSM4pSA4pSA4pSA4pSADQogIOKUgiBvcGFtIHVwZGF0ZQ0KICDilIIg b3BhbSBzd2l0Y2ggY3JlYXRlIDQuMTIuMH5iZXRhMiAtLXJlcG9zaXRvcmllcz1kZWZhdWx0LGJl dGE9Z2l0K2h0dHBzOi8vZ2l0aHViLmNvbS9vY2FtbC9vY2FtbC1iZXRhLXJlcG9zaXRvcnkuZ2l0 DQogIOKUlOKUgOKUgOKUgOKUgA0KICBJZiB5b3Ugd2FudCB0byB0d2VhayB0aGUgY29uZmlndXJh dGlvbiBvZiB0aGUgY29tcGlsZXIsIHlvdSBjYW4gcGljaw0KICBjb25maWd1cmF0aW9uIG9wdGlv bnMgd2l0aA0KICDilIzilIDilIDilIDilIANCiAg4pSCIG9wYW0gdXBkYXRlDQogIOKUgiBvcGFt IHN3aXRjaCBjcmVhdGUgPHN3aXRjaF9uYW1lPiAtLXBhY2thZ2VzPW9jYW1sLXZhcmlhbnRzLjQu MTIuMH5iZXRhMitvcHRpb25zLDxvcHRpb25fbGlzdD4NCiAg4pSCIC0tcmVwb3NpdG9yaWVzPWRl ZmF1bHQsYmV0YT1naXQraHR0cHM6Ly9naXRodWIuY29tL29jYW1sL29jYW1sLWJldGEtcmVwb3Np dG9yeS5naXQNCiAg4pSU4pSA4pSA4pSA4pSADQogIHdoZXJlIDxvcHRpb25fbGlzdD4gaXMgYSBj b21tYSBzZXBhcmF0ZWQgbGlzdCBvZiBvY2FtbC1vcHRpb24tKg0KICBwYWNrYWdlcy4gRm9yIGlu c3RhbmNlLCBmb3IgYSBmbGFtYmRhIGFuZCBhZmwgZW5hYmxlZCBzd2l0Y2g6DQogIOKUjOKUgOKU gOKUgOKUgA0KICDilIIgb3BhbSBzd2l0Y2ggY3JlYXRlIDQuMTIuMH5iZXRhMitmbGFtYmRhK2Fm bA0KICDilIIgLS1wYWNrYWdlcz1vY2FtbC12YXJpYW50cy40LjEyLjB+YmV0YTIrb3B0aW9ucyxv Y2FtbC1vcHRpb24tZmxhbWJkYSxvY2FtbC1vcHRpb24tYWZsDQogIOKUgiAtLXJlcG9zaXRvcmll cz1kZWZhdWx0LGJldGE9Z2l0K2h0dHBzOi8vZ2l0aHViLmNvbS9vY2FtbC9vY2FtbC1iZXRhLXJl cG9zaXRvcnkuZ2l0DQogIOKUlOKUgOKUgOKUgOKUgA0KICBBbGwgYXZhaWxhYmxlIG9wdGlvbnMg Y2FuIGJlIGxpc3RlZCB3aXRoICJvcGFtIHNlYXJjaCBvY2FtbC1vcHRpb24iLg0KDQogIFRoZSBz b3VyY2UgY29kZSBpcyBhdmFpbGFibGUgYXQgdGhlc2UgYWRkcmVzc2VzOg0KDQogIOKAoiA8aHR0 cHM6Ly9naXRodWIuY29tL29jYW1sL29jYW1sL2FyY2hpdmUvNC4xMi4wLWJldGEyLnRhci5nej4N CiAg4oCiIDxodHRwczovL2NhbWwuaW5yaWEuZnIvcHViL2Rpc3RyaWIvb2NhbWwtNC4xMi9vY2Ft bC00LjEyLjB+YmV0YTIudGFyLmd6Pg0KDQogIElmIHlvdSB3YW50IHRvIHRlc3QgdGhpcyB2ZXJz aW9uLCB5b3UgbWF5IHdhbnQgdG8gaW5zdGFsbCB0aGUgYWxwaGENCiAgb3BhbSByZXBvc2l0b3J5 DQoNCiAgPGh0dHBzOi8vZ2l0aHViLmNvbS9raXQtdHkta2F0ZS9vcGFtLWFscGhhLXJlcG9zaXRv cnk+DQoNCiAgd2l0aA0KICDilIzilIDilIDilIDilIANCiAg4pSCIG9wYW0gcmVwbyBhZGQgYWxw aGEgZ2l0Oi8vZ2l0aHViLmNvbS9raXQtdHkta2F0ZS9vcGFtLWFscGhhLXJlcG9zaXRvcnkuZ2l0 DQogIOKUlOKUgOKUgOKUgOKUgA0KICBUaGlzIGFscGhhIHJlcG9zaXRvcnkgY29udGFpbnMgdmFy aW91cyBwYWNrYWdlcyBwYXRjaGVkIHdpdGggZml4ZXMgaW4NCiAgdGhlIHByb2Nlc3Mgb2YgYmVp bmcgdXBzdHJlYW1lZC4gT25jZSB0aGUgcmVwb3NpdG9yeSBpbnN0YWxsZWQsIHRoZXNlDQogIHBh dGNoZWQgcGFja2FnZXMgd2lsbCB0YWtlIHByZWNlZGVuY2Ugb3ZlciB0aGUgbm9uLXBhdGNoZWQg dmVyc2lvbi4NCg0KDQpDaGFuZ2VzIGZyb20gdGhlIGZpcnN0IGJldGENCuKVjOKVjOKVjOKVjOKV jOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKV jOKVjOKVjOKVjA0KDQpUaHJlYWQgbGlicmFyeQ0K4pSE4pSE4pSE4pSE4pSE4pSE4pSE4pSE4pSE 4pSE4pSE4pSE4pSE4pSEDQoNCiAg4oCiICphZGRpdGlvbmFsIGZpeGVzKiBbOTc1N10sIFs5ODQ2 XSwgK1sxMDE2MV06IGNoZWNrIHByb3BlciBvd25lcnNoaXANCiAgICAgd2hlbiBvcGVyYXRpbmcg b3ZlciBtdXRleGVzLiBOb3csIHVubG9ja2luZyBhIG11dGV4IGhlbGQgYnkgYW5vdGhlcg0KICAg ICB0aHJlYWQgb3Igbm90IGxvY2tlZCBhdCBhbGwgcmVsaWFibHkgcmFpc2VzIGEgU3lzX2Vycm9y IGV4Y2VwdGlvbi4NCiAgICAgQmVmb3JlLCBpdCB3YXMgdW5kZWZpbmVkIGJlaGF2aW9yLCBidXQg dGhlIGRvY3VtZW50YXRpb24gZGlkIG5vdA0KICAgICBzYXkgc28uIExpa2V3aXNlLCBsb2NraW5n IGEgbXV0ZXggYWxyZWFkeSBsb2NrZWQgYnkgdGhlIGN1cnJlbnQNCiAgICAgdGhyZWFkIHJlbGlh Ymx5IHJhaXNlcyBhIFN5c19lcnJvciBleGNlcHRpb24uICBCZWZvcmUsIGl0IGNvdWxkDQogICAg IGRlYWRsb2NrIG9yIHN1Y2NlZWQgKGFuZCBkbyByZWN1cnNpdmUgbG9ja2luZyksIGRlcGVuZGlu ZyBvbiB0aGUNCiAgICAgT1MuIChYYXZpZXIgTGVyb3ksIHJlcG9ydCBieSBHdWlsbGF1bWUgTXVu Y2gtTWFjY2Fnbm9uaSwgcmV2aWV3IGJ5DQogICAgIEd1aWxsYXVtZSBNdW5jaC1NYWNjYWdub25p LCBEYXZpZCBBbGxzb3BwLCBhbmQgU3RlcGhlbiBEb2xhbikNCg0KDQpbOTc1N10gPGh0dHBzOi8v Z2l0aHViLmNvbS9vY2FtbC9vY2FtbC9pc3N1ZXMvOTc1Nz4NCg0KWzk4NDZdIDxodHRwczovL2dp dGh1Yi5jb20vb2NhbWwvb2NhbWwvaXNzdWVzLzk4NDY+DQoNClsxMDE2MV0gPGh0dHBzOi8vZ2l0 aHViLmNvbS9vY2FtbC9vY2FtbC9pc3N1ZXMvMTAxNjE+DQoNCg0KQnVpbGQgc3lzdGVtDQrilITi lITilITilITilITilITilITilITilITilITilITilIQNCg0KICDigKIgWzEwMDYzXTogKFJlLSll bmFibGUgYnVpbGRpbmcgb24gaWxsdW1vcyAoU21hcnRPUywgT21uaU9TLCDigKYpIGFuZA0KICAg IE9yYWNsZSBTb2xhcmlzOyB4ODZfNjQvR0NDIGFuZCA2NC1iaXQgU1BBUkMvU3VuIFBSTyBDDQog ICAgY29tcGlsZXJzLiAocGFydGlhbGx5IHJldmVydCBbMjAyNF0pLiAoVMO1aXZvIExlZWRqw6Ry diBhbmQgS29uc3RhbnRpbg0KICAgIFJvbWFub3YsIHJldmlldyBieSBHYWJyaWVsIFNjaGVyZXIs IFPDqWJhc3RpZW4gSGluZGVyZXIgYW5kIFhhdmllcg0KICAgIExlcm95KQ0KDQoNClsxMDA2M10g PGh0dHBzOi8vZ2l0aHViLmNvbS9vY2FtbC9vY2FtbC9pc3N1ZXMvMTAwNjM+DQoNClsyMDI0XSA8 aHR0cHM6Ly9naXRodWIuY29tL29jYW1sL29jYW1sL2lzc3Vlcy8yMDI0Pg0KDQoNCkRvY3VtZW50 YXRpb24NCuKUhOKUhOKUhOKUhOKUhOKUhOKUhOKUhOKUhOKUhOKUhOKUhOKUhA0KDQogIOKAoiBb OTc1NV06IE1hbnVhbDogcG9zdC1wcm9jZXNzaW5nIHRoZSBodG1sIGdlbmVyYXRlZCBieSBvY2Ft bGRvYyBhbmQNCiAgICBoZXZlYS4gSW1wcm92ZW1lbnRzIG9uIGRlc2lnbiBhbmQgbmF2aWdhdGlv biwgaW5jbHVkaW5nIGEgbW9iaWxlDQogICAgdmVyc2lvbiwgYW5kIGEgcXVpY2stc2VhcmNoIGZ1 bmN0aW9uYWxpdHkgZm9yIHRoZSBBUEkuIChTYW4gVsWpIE5n4buNYywNCiAgICByZXZpZXcgYnkg RGF2aWQgQWxsc29wcCBhbmQgRmxvcmlhbiBBbmdlbGV0dGkpDQoNCiAg4oCiIFsxMDE0Ml0sIFsx MDE1NF06IGltcHJvdmVkIHJlbmRlcmluZyBhbmQgbGF0ZXggY29kZSBmb3IgdG9wbGV2ZWwNCiAg ICBjb2RlIGV4YW1wbGVzLiAoRmxvcmlhbiBBbmdlbGV0dGksIHJlcG9ydCBieSBKb2huIFdoaXRp bmd0b24sIHJldmlldw0KICAgIGJ5IEdhYnJpZWwgU2NoZXJlcikNCg0KDQpbOTc1NV0gPGh0dHBz Oi8vZ2l0aHViLmNvbS9vY2FtbC9vY2FtbC9pc3N1ZXMvOTc1NT4NCg0KWzEwMTQyXSA8aHR0cHM6 Ly9naXRodWIuY29tL29jYW1sL29jYW1sL2lzc3Vlcy8xMDE0Mj4NCg0KWzEwMTU0XSA8aHR0cHM6 Ly9naXRodWIuY29tL29jYW1sL29jYW1sL2lzc3Vlcy8xMDE1ND4NCg0KDQpPQ2FtbCBPZmZpY2Ug SG91cnM/DQrilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZANCg0KICBBcmNoaXZlOiA8aHR0cHM6Ly9kaXNjdXNzLm9jYW1sLm9yZy90L29jYW1s LW9mZmljZS1ob3Vycy83MTMyLzk+DQoNCg0KRGVlcCBpbiB0aGlzIHRocmVhZCwgT3JiaWZ4IHNh aWQNCuKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgA0KDQogIEFuZCB0aGVy ZSBpcyBYTVBQOiA8eG1wcDpvY2FtbEBjb25mZXJlbmNlLm9yYml0YWxmb3guZXU/am9pbj4NCg0K DQpUaW1lcmUgMC4xLjMgLSBEZWFsaW5nIHdpdGggdGltZSBhbmQgdGltZSB6b25lcyBoYXZlIG5l dmVyIGJlZW4gZWFzaWVyDQrilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAN Cg0KICBBcmNoaXZlOg0KICA8aHR0cHM6Ly9kaXNjdXNzLm9jYW1sLm9yZy90L2Fubi10aW1lcmUt MC0xLTMtZGVhbGluZy13aXRoLXRpbWUtYW5kLXRpbWUtem9uZXMtaGF2ZS1uZXZlci1iZWVuLWVh c2llci83MTczLzE+DQoNCg0KRGFycmVuIGFubm91bmNlZA0K4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSADQoNCiAgSSBhbSBoYXBweSB0byBhbm5vdW5jZSBm aXJzdCByZWxlYXNlIG9mIFtUaW1lcmVdLCBhIHRpbWUgaGFuZGxpbmcgYW5kDQogIHJlYXNvbmlu ZyBsaWJyYXJ5LCB3aGljaCBARHJ1cCBhbmQgSSBoYXZlIGJlZW4gd29ya2luZyBvbiByZWNlbnRs eS4NCg0KDQpbVGltZXJlXSA8aHR0cHM6Ly9naXRodWIuY29tL2RheXBhY2stZGV2L3RpbWVyZT4N Cg0KRXhhbXBsZXMNCuKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjA0KDQogIENocmlzdG1hc2VzIHdo aWNoIGZhbGwgb24gV2VkbmVzZGF5IGZyb20gbm93DQogIOKUjOKUgOKUgOKUgOKUgA0KICDilIIg bGV0ICgpID0NCiAg4pSCICAgbGV0IG9wZW4gVGltZXJlIGluDQogIOKUgiAgIG1hdGNoDQogIOKU giAgICAgcmVzb2x2ZSAoDQogIOKUgiAgICAgICBhZnRlciAoRGF0ZV90aW1lLm5vdyAoKSkNCiAg 4pSCICAgICAgICYgbW9udGhzIFtgRGVjXQ0KICDilIIgICAgICAgJiBkYXlzIFsyNV0NCiAg4pSC ICAgICAgICYgd2Vla2RheXMgW2BXZWRdDQogIOKUgiAgICAgKQ0KICDilIIgICB3aXRoDQogIOKU giAgIHwgRXJyb3IgbXNnIC0+IGZhaWx3aXRoIG1zZw0KICDilIIgICB8IE9rIHMgLT4NCiAg4pSC ICAgICBGbXQucHIgIiVhQC4iIChwcF9pbnRlcnZhbHMgfnNlcDooRm10LmFueSAiQC4iKSAoKSkg cw0KICDilJTilIDilIDilIDilIANCiAgZ2l2ZXMNCiAg4pSM4pSA4pSA4pSA4pSADQogIOKUgiBb MjAyNCBEZWMgMjUgMDA6MDA6MDAgKzAwOjAwOjAwLCAyMDI0IERlYyAyNiAwMDowMDowMCArMDA6 MDA6MDApDQogIOKUgiBbMjAzMCBEZWMgMjUgMDA6MDA6MDAgKzAwOjAwOjAwLCAyMDMwIERlYyAy NiAwMDowMDowMCArMDA6MDA6MDApDQogIOKUgiBbMjA0MSBEZWMgMjUgMDA6MDA6MDAgKzAwOjAw OjAwLCAyMDQxIERlYyAyNiAwMDowMDowMCArMDA6MDA6MDApDQogIOKUgiBbMjA0NyBEZWMgMjUg MDA6MDA6MDAgKzAwOjAwOjAwLCAyMDQ3IERlYyAyNiAwMDowMDowMCArMDA6MDA6MDApDQogIOKU giBbMjA1MiBEZWMgMjUgMDA6MDA6MDAgKzAwOjAwOjAwLCAyMDUyIERlYyAyNiAwMDowMDowMCAr MDA6MDA6MDApDQogIOKUgiBbMjA1OCBEZWMgMjUgMDA6MDA6MDAgKzAwOjAwOjAwLCAyMDU4IERl YyAyNiAwMDowMDowMCArMDA6MDA6MDApDQogIOKUgiAuLi4NCiAg4pSU4pSA4pSA4pSA4pSADQoN CiAgU2VlIFtoZXJlXSBmb3IgbW9yZSBleGFtcGxlcw0KDQoNCltoZXJlXSA8aHR0cHM6Ly9naXRo dWIuY29tL2RheXBhY2stZGV2L3RpbWVyZS90cmVlL21haW4vZXhhbXBsZXM+DQoNCg0KRmVhdHVy ZXMNCuKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjA0KDQogIOKAoiBUaW1lc3RhbXAgYW5kIGRhdGUg dGltZSBoYW5kbGluZyB3aXRoIHBsYXRmb3JtIGluZGVwZW5kZW50IHRpbWUgem9uZQ0KICAgIHN1 cHBvcnQNCiAgICDigKIgU3Vic2V0IG9mIHRoZSBJQU5BIHRpbWUgem9uZSBkYXRhYmFzZSBpcyBi dWlsdCBpbnRvIHRoaXMgbGlicmFyeQ0KICDigKIgUmVhc29uaW5nIG92ZXIgdGltZSBpbnRlcnZh bHMgdmlhIHRpbWVyZSBvYmplY3RzL2V4cHJlc3Npb25zLA0KICAgIGV4YW1wbGVzOg0KICAgIOKA oiBQYXR0ZXJuIG1hdGNoaW5nIHRpbWUgYW5kIGludGVydmFscy4gVGhlc2Ugd29yayBhY3Jvc3Mg RFNUDQogICAgICBib3VuZGFyaWVzLg0KICAgIOKAoiBJbnRlcnNlY3Rpb24gYW5kIHVuaW9uDQog ICAg4oCiIENodW5raW5nIGF0IHllYXIgb3IgbW9udGggYm91bmRhcnksIG9yIGluIGZpeGVkIHNp emVzDQogICAg4oCiIEV2YWx1YXRlIChzdWIpZXhwcmVzc2lvbnMgd2l0aCBhIGRpZmZlcmVudCB0 aW1lIHpvbmUNCiAgICAgIChlLmcuIGludGVyc2VjdGlvbiBvZiA5YW0gdG8gNXBtIG9mIFN5ZG5l eSBhbmQgOWFtIHRvIDVwbSBvZiBOZXcNCiAgICAgIFlvcmspDQoNCg0KTGlua3MNCuKVjOKVjOKV jOKVjOKVjA0KDQogIOKAoiBSZXBvOiA8aHR0cHM6Ly9naXRodWIuY29tL2RheXBhY2stZGV2L3Rp bWVyZT4NCiAg4oCiIEFQSSBkb2M6DQogICAgPGh0dHBzOi8vZGF5cGFjay1kZXYuZ2l0aHViLmlv L3RpbWVyZS90aW1lcmUvVGltZXJlL2luZGV4Lmh0bWw+DQoNCg0KSW50ZXJlc3RpbmcgT0NhbWwg QXJ0aWNsZXMNCuKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkA0KDQogIEFyY2hpdmU6DQogIDxodHRwczov L2Rpc2N1c3Mub2NhbWwub3JnL3QvaW50ZXJlc3Rpbmctb2NhbWwtYXJ0aWNsZXMvMTg2Ny85Mj4N Cg0KDQpZYXdhciBBbWluIGFubm91bmNlZA0K4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSADQoNCiAgTm90IHByaW1hcmlseSBhIHByb2dy YW1taW5nIGFydGljbGUgYnV0IEkgdGhvdWdodCB0aGlzIGlzIGFuDQogIGludGVyZXN0aW5nIGV4 Y2VwdGlvbiBiZWNhdXNlIGl0IG1heSBiZSB0aGUgZmlyc3QgdGltZSBPQ2FtbCBoYXMgYmVlbg0K ICBtZW50aW9uZWQgaW4gdGhlIEZpbmFuY2lhbCBUaW1lczoNCiAgPGh0dHBzOi8vd3d3LmZ0LmNv bS9jb250ZW50LzgxODExZjI3LTRhOGYtNDk0MS05OWIzLTI3NjJjYWU3NjU0Mj4NCg0KDQpqc29u LWRhdGEtZW5jb2RpbmcgMC45DQrilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZANCg0KICBBcmNoaXZlOg0KICA8aHR0cHM6Ly9k aXNjdXNzLm9jYW1sLm9yZy90L2Fubi1qc29uLWRhdGEtZW5jb2RpbmctMC05LzcxNTcvMj4NCg0K DQpSYXBoYcOrbCBQcm91c3QgYW5ub3VuY2VkDQrilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIANCg0KICBPbiBiZWhh bGYgb2YgTm9tYWRpYyBMYWJzLCBpdCBpcyBteSBwbGVhc3VyZSB0byByZWxlYXNlDQogIGpzb24t ZGF0YS1lbmNvZGluZy4wLjkuMS4gVGhlIGNvZGUgb2YgdGhpcyBwYWNrYWdpbmctZml4IHJlbGVh c2UgaXMNCiAgaWRlbnRpY2FsIHRvIHRoZSByZWNlbnQganNvbi1kYXRhLWVuY29kaW5nLjAuOSBi dXQgdGhlIGxpY2Vuc2UNCiAgaW5mb3JtYXRpb24gaGFzIGJlZW4gY29ycmVjdGVkLg0KDQogIFRo ZSBwcmV2aW91cyByZWxlYXNlIGhhZCBfTEdQTCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uXyBoZWFk ZXJzIGluIHRoZQ0KICBzb3VyY2UgZmlsZXMsIExJQ0VOU0UgZmlsZSBpbiB0aGUgcmVwb3NpdG9y eSwgYW5kIGxpY2Vuc2UgZmllbGQgaW4gdGhlDQogIG9wYW0gZmlsZS4gSG93ZXZlciwgdGhlIGNv ZGUgd2FzIGFjdHVhbGx5IHVuZGVyIE1JVCBhcyBwZXIgYWdyZWVtZW50DQogIG9mIHRoZSBjb3B5 cmlnaHQgaG9sZGVycy4gUmVsZWFzZSAwLjkuMSBoYXMgdGhlIGNvcnJlY3QgbGljZW5zZQ0KICBo ZWFkZXJzLCBMSUNFTlNFIGZpbGUgYW5kIGxpY2Vuc2UgZmllbGQgaW4gdGhlIG9wYW0gZmlsZXMu DQoNCiAgVGhlIGNvZGUgb2YgMC45LzAuOS4xIGlzIGluIGR1YWwgbGljZW5zZS4gRnV0dXJlIHJl bGVhc2VzIHdpbGwgYmUNCiAgdW5kZXIgTUlUIGxpY2Vuc2Ugb25seS4NCg0KDQpvY2FtbGVhcmx5 YmlyZCAxLjAuMCBiZXRhMQ0K4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQDQoNCiAgQXJjaGl2ZToNCiAg PGh0dHBzOi8vZGlzY3Vzcy5vY2FtbC5vcmcvdC9hbm4tb2NhbWxlYXJseWJpcmQtMS0wLTAtYmV0 YTEvNzE4MC8xPg0KDQoNCuaWh+Wuh+elpSBhbm5vdW5jZWQNCuKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgA0KDQogIEknbSBwbGVhc2VkIHRvIGFubm9uY2Ug dGhhdCBbb2NhbWxlYXJseWJpcmRdIDEuMC4wfmJldGExIGp1c3QNCiAgcmVsZWFzZWQuICBXaWxs IHNvb24gYmUgYXZhaWxhYmxlIG9uIG9wYW0uDQoNCiAgVGhpcyBpcyBhIGJpZyBzdGVwIHRoYXQg d2UgdG93YXJkIDEuMC4wLiBXZSBzb2x2ZWQgbG90cyBvZiBpc3N1ZXMgYW5kDQogIHRlc3RlZCB3 aXRoIHJlYWx5IG9jYW1sIHByb2plY3RzIHN1Y2ggYXMgdXRvcCwgb2NhbWxmb3JtYXQsIGFuZCBz bw0KICBvbi4gQW5kIGNlcnRhaW5seSwgaXQgY2FuIGRlYnVnIG9jYW1sZWFybHliaXJkIGl0c2Vs Zi4NCg0KICBUcnkgeW91cnNlbGYhDQoNCg0KW29jYW1sZWFybHliaXJkXSA8aHR0cHM6Ly9naXRo dWIuY29tL2hhY2t3YWx5L29jYW1sZWFybHliaXJkPg0KDQpOT1RFUy4NCuKVjOKVjOKVjOKVjOKV jOKVjA0KDQogIOKAoiBOZXcgdmVyc2lvbiBvbmx5IHN1cHBvcnQgT0NhbWwgNC4xMS4gSWYgeW91 IG5lZWQgb3RoZXIgdmVyc2lvbnMNCiAgICBzdXBwb3J0LCBwbGVhc2UgbGV0IG1lIGtub3cuDQog IOKAoiBEdW5lLXJlbGVhc2UgZG8gbm90IHN1cHBvcnQgYDEuMC4wfmJldGExJyB2ZXJzaW9uIHN0 cmluZy4gU28gd2UNCiAgICByZWxlYXNlZCAxLjAuMCBhcyAxLjAuMH5iZXRhMSBvbiBvcGFtLg0K DQoNCktOT1dOIElTU1VFUzoNCuKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKV jA0KDQogIOKAoiBDb250aW51ZSBydW4gY29tbWFuZCBtYXkgaGl0IG9uIGxhc3QgcmVtb3ZlZCBi cmVha3BvaW50IG9uY2Ugd2hlbg0KICAgIGRlYnVnIHV0b3AuDQoNCg0K5paH5a6H56WlDQrilIDi lIDilIDilIDilIDilIANCg0KICBTaW5jZSB0aGUgcG9zdCBoYXMgZWRpdGVkIG92ZXIgMyB0aW1l cy4gSSBjYW4ndCBlZGl0IGl0IGFueXdheS4gSQ0KICB1cGxvYWRlZCBkZW1vIHZpZGVvIGhlcmU6 DQoNCiAgW0RlYnVnIHV0b3BdDQoNCg0KW0RlYnVnIHV0b3BdDQo8aHR0cHM6Ly9tZWRpYS5naXRo dWJ1c2VyY29udGVudC5jb20vbWVkaWEvaGFja3dhbHkvb2NhbWxlYXJseWJpcmQvbWFzdGVyL19h c3NldHMvdXRvcC53ZWJwPg0KDQoNCkNtZGxpbmVyIGNoZWF0c2hlZXQNCuKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkA0KDQogIEFyY2hpdmU6 IDxodHRwczovL2Rpc2N1c3Mub2NhbWwub3JnL3QvY21kbGluZXItY2hlYXRzaGVldC83MTg1LzE+ DQoNCg0KTWFydGluIEphbWJvbiBhbm5vdW5jZWQNCuKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgA0KDQogIEFzIGEgZm9s bG93LXVwIHRvIFthbiBlYXJsaWVyIGNvbnZlcnNhdGlvbl0sIEkgbWFkZSBhIFtjaGVhdHNoZWV0 IGFuZA0KICBhIHRlbXBsYXRlXSBmb3IgdXNpbmcgY21kbGluZXIgYnkgQGRidWVuemxpLiBJdCB3 YXMgZG9uZSBxdWlja2x5IGFuZCBJDQogIGRvbid0IGtub3cgZXZlcnl0aGluZyBhYm91dCBjbWRs aW5lciwgc28gcGxlYXNlIGxldCBtZSBrbm93IGlmIHlvdSBzZWUNCiAgbWlzdGFrZXMuDQoNCg0K W2FuIGVhcmxpZXIgY29udmVyc2F0aW9uXQ0KPGh0dHBzOi8vZGlzY3Vzcy5vY2FtbC5vcmcvdC93 aGF0LWFyZS1zb21lLWxpYnJhcmllcy15b3UtYWxtb3N0LWFsd2F5cy11c2UvNzE2NS8xNz91PW1q YW1ib24+DQoNCltjaGVhdHNoZWV0IGFuZCBhIHRlbXBsYXRlXQ0KPGh0dHBzOi8vZ2l0aHViLmNv bS9tamFtYm9uL2NtZGxpbmVyLWNoZWF0c2hlZXQ+DQoNCg0KQ2hyaXN0aWFuIExpbmRpZyB0aGVu IHNhaWQNCuKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgA0KDQogIEdvb2QgdG8gc2VlIHRoaXMuIEkgYmVs aWV2ZSBhIGNvbW1vbiB1c2UgY2FzZSBpcyB0byBhZGQgYXJlIHN1Yg0KICBjb21tYW5kcyBhcyBw b3B1bGFyaXNlZCBieSBgZ2l0Jy4gSXQgbG9va3MgbGlrZSB0aGlzIGluIG15IGNvZGU6DQoNCiAg 4pSM4pSA4pSA4pSA4pSADQogIOKUgiBtb2R1bGUgQyA9IENtZGxpbmVyDQogIOKUgiANCiAg4pSC IGxldCByZXBvcnQgPQ0KICDilIIgICBsZXQgZG9jID0gImdlbmVyYXRlIEhUTUwgb3IgSlNPTiBy ZXBvcnQgZm9yIGFuIG91dGluZyIgaW4NCiAg4pSCICAgbGV0IG1hbiA9IC4uICAgaW4NCiAg4pSC ICAgQy5UZXJtLg0KICDilIIgICAgIChyZXQgKGNvbnN0IG1ha2UgJCBjb21tb25fb3B0aW9ucyAk IGpzb24gJCBwYXRoKSwgaW5mbyAicmVwb3J0IiB+ZG9jIH5tYW4pDQogIOKUgiANCiAg4pSCIGxl dCBkZWZhdWx0ID0NCiAg4pSCICAgbGV0IGhlbHAgPSBgSGVscCAoYFBhZ2VyLCBOb25lKSBpbg0K ICDilIIgICBsZXQgZG9jID0gIkdQUyBhbmFseXNpcyBmb3Igcm93ZXJzIiBpbg0KICDilIIgIEMu VGVybS4ocmV0IEBAIGNvbnN0IGhlbHAsIGluZm8gImVpZ2h0cGx1cyIgfmRvYyB+bWFuKQ0KICDi lIIgDQogIOKUgiBsZXQgY21kcyA9IFsgZXhwb3J0OyByZXBvcnQ7IHRvcHNwZWVkOyBkZWJ1Zzsg c3VtbWFyeTsgaGVscCBdDQogIOKUgiBsZXQgbWFpbiAoKSA9IEMuVGVybS4oZXZhbF9jaG9pY2Ug ZGVmYXVsdCBjbWRzIHw+IGV4aXQpDQogIOKUgiBsZXQgKCkgPSBpZiAhU3lzLmludGVyYWN0aXZl IHRoZW4gKCkgZWxzZSBtYWluICgpDQogIOKUlOKUgOKUgOKUgOKUgA0KDQoNCk1hcnRpbiBKYW1i b24gbGF0ZXIgc2FpZA0K4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSADQoNCiAgSSBqdXN0IGFkZGVkIGEgZGVtby90 ZW1wbGF0ZSBmb3Igc3ViY29tbWFuZCBoYW5kbGluZy4gVGhlcmUgYXJlIG5vdw0KICBbdHdvIGRl bW8gcHJvZ3JhbXNdLiBPbmUgaXMgZm9jdXNlZCBvbiB0aGUgZGlmZmVyZW50IGtpbmRzIG9mDQog IGFyZ3VtZW50cyBhbmQgdGhlIG90aGVyIG9uZSBvbiBzdWJjb21tYW5kcy4NCg0KDQpbdHdvIGRl bW8gcHJvZ3JhbXNdDQo8aHR0cHM6Ly9naXRodWIuY29tL21qYW1ib24vY21kbGluZXItY2hlYXRz aGVldC90cmVlL21haW4vc3JjPg0KDQoNClNob24gYWxzbyByZXBsaWVkDQrilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIANCg0KICBJbiB0aGlzIHNhbWUg dmVpbiwgSSd2ZSBiZWVuIGNvbXBpbGluZyAiZXhlY3V0YWJsZSBub3RlcyIgd2hlbmV2ZXIgSQ0K ICBmaW5kIG15c2VsZiBuZWVkaW5nIGEgY2VydGFpbiBDbWRsbmVyIHJlY2lwZS4gSSB0b29rIHRv b2sgdGhlc2UgcmVjZW50DQogIGRpc2N1c3Npb24gYXMgYW4gb2NjYXNpb24gdG8gZG9jdW1lbnQg dGhlIG1vZHVsZSBhIGJpdDoNCiAgPGh0dHBzOi8vZ2l0aHViLmNvbS9zaG9uZmVkZXIva3dkY21k Pg0KDQogIFRoZSBhaW0gaXMgdG8gcHJvdmlkZSAic2VsZi1kb2N1bWVudGluZyIgY29uc3RydWN0 b3JzIHRoYXQgZW5jb2RlIHRoZQ0KICBjb21wb3NpdGlvbiBvZiBjb21tb24gQ0xJIHRlcm1zIGlu dG8gbW9kdWxlIG5hbWVzcGFjZXMsIGxhYmVsZWQgYXJncywNCiAgYW5kIHR5cGUgYWxpYXNlcy4g VGhlIGhvcGUgYmVpbmcgdGhhdCBJIGNhbiBoYXZlIHRoZSB0eXBlIHNpZ25hdHVyZSBvZg0KICBh IGNvbWJpbmF0b3IgZ2l2ZSBtZSBhbGwgdGhlIGhpbnRzIEkgbmVlZCB0byBhdm9pZCBoYXZpbmcg dG8gbG9vayB1cA0KICB0aGUgZG9jdW1lbnRhdGlvbiBldmVyeSB0aW1lIDpsYXVnaGluZzoNCg0K ICBJdCdzIGp1c3QgYSB2ZXJ5IHJvdWdoIChhbmQgcXVpdGUgaW1wZXJmZWN0KSBjb2xsZWN0aW9u IG9mIGlkaW9tcyBJJ3ZlDQogIGZvdW5kIHVzZWZ1bCwgYnV0IGl0IGNvdWxkIGJlIHdvcnRoIGEg bG9vayEgIFdoZW4gaSBnZXQgYSBjaGFuY2UsIEkNCiAgaG9wZSB0byBsb29rIHRocm91Z2ggeW91 ciBjaGVhdCBzaGVldCB0byBtYWtlIHN1cmUgSSBoYXZlIGENCiAgcmVwcmVzZW50YXRpdmUgY29u c3RydWN0b3IgZm9yIGVhY2ggaWRpb20geW91J3ZlIGRvY3VtZW50ZWQuDQoNCg0KY29udGFpbmVy cyAzLjINCuKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkA0KDQogIEFy Y2hpdmU6IDxodHRwczovL2Rpc2N1c3Mub2NhbWwub3JnL3QvYW5uLWNvbnRhaW5lcnMtMy0yLzcx OTYvMT4NCg0KDQpTaW1vbiBDcnVhbmVzIGFubm91bmNlZA0K4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSADQoNCiAgSSdt IGhhcHB5IHRvIGFubm91bmNlIHRoYXQgY29udGFpbmVycyAzLjIgaGFzIGp1c3QgYmVlbiBbcmVs ZWFzZWRdLiBJdA0KICBzaG91bGQgYXJyaXZlIG9uIG9wYW0gc29vbi4gSXQgbm90YWJseSBjb250 YWlucyBhbiBgRWl0aGVyJw0KICBjb21wYXRpYmlsaXR5IHdyYXBwZXIsIG1vcmUgZm9ybWF0dGlu ZyBmdW5jdGlvbnMsIGxpc3QgZnVuY3Rpb25zLCBhbmQNCiAgYSBidW5jaCBvZiBmaXhlcy4gTWFu eSB0aGFua3MgdG8gQGRhcnJlbmxkbCBmb3IgY29udHJpYnV0aW5nIHNvbWUNCiAgaW5pdGlhbCBm dXp6aW5nIHN1cHBvcnQuDQoNCg0KW3JlbGVhc2VkXQ0KPGh0dHBzOi8vZ2l0aHViLmNvbS9jLWN1 YmUvb2NhbWwtY29udGFpbmVycy9yZWxlYXNlcy90YWcvdjMuMj4NCg0KDQpPQ2FtbCBDYWbDqTog VGh1LCBGZWIgMTEgQCA3cG0gKFUuUy4gQ2VudHJhbCkNCuKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkA0KDQog IEFyY2hpdmU6DQogIDxodHRwczovL2Rpc2N1c3Mub2NhbWwub3JnL3Qvb2NhbWwtY2FmZS10aHUt ZmViLTExLTdwbS11LXMtY2VudHJhbC83MTk3LzE+DQoNCg0KQ2xhdWRlIEphZ2VyLVJ1Ymluc29u IGFubm91bmNlZA0K4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSADQoNCiAgSm9p biB1cyB3aXRoIHlvdXIgcXVlc3Rpb25zIGFib3V0IHRoZSBPQ2FtbCBsYW5ndWFnZSwgb3IganVz dCB0byBoYW5nDQogIG91dCB3aXRoIHRoZSBPQ2FtbCBjb21tdW5pdHkuIEVzcGVjaWFsbHkgZ2Vh cmVkIHRvd2FyZCBuZXcgYW5kDQogIGludGVybWVkaWF0ZSB1c2VycywgZXhwZXJpZW5jZWQgT0Nh bWwgZGV2ZWxvcGVycyB3aWxsIGJlIGF2YWlsYWJsZSB0bw0KICBhbnN3ZXIgeW91ciBxdWVzdGlv bnMgYWJvdXQgdGhlIGxhbmd1YWdlIGFuZCBlY29zeXN0ZW0uDQoNCiAgV2hldGhlciB5b3XigJly ZSBzdGlsbCB0cnlpbmcgdG8gbWFrZSBzZW5zZSBvZiBjdXJyeWluZyBvciBjYW4gc3BvdA0KICBu b24tdGFpbC1yZWN1cnNpdmUgY29kZSBmcm9tIGFjcm9zcyB0aGUgcm9vbSwgd2UgaG9wZSB0aGF0 IHlvdeKAmWxsIGpvaW4NCiAgdXMgb24gVGh1cnNkYXksIEZlYnJ1YXJ5IDExIGF0IDdwbSAoVS5T LiBDZW50cmFsIHRpbWUpLiBNZWV0aW5nIGluZm8NCiAgYW5kIGFkZGl0aW9uYWwgZGV0YWlscyBj YW4gYmUgZm91bmQgYXQgW2h0dHBzOi8vaGZwdWcub3JnXS4NCg0KDQpbaHR0cHM6Ly9oZnB1Zy5v cmddIDxodHRwczovL2hmcHVnLm9yZz4NCg0KDQpEZXBlbmRlbmN5IGdyYXBoIG9mIHNvbWUgT0Nh bWwgc291cmNlIGZpbGVzDQrilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZANCg0KICBBcmNoaXZlOg0KICA8aHR0cHM6 Ly9kaXNjdXNzLm9jYW1sLm9yZy90L2RlcGVuZGVuY3ktZ3JhcGgtb2Ytc29tZS1vY2FtbC1zb3Vy Y2UtZmlsZXMvNzE5OC82Pg0KDQoNCkRlZXAgaW4gdGhpcyB0aHJlYWQsIEp1biBGVVJVU0Ugc2Fp ZA0K4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSADQoN CiAgWW91IG1heSBiZSBpbnRlcmVzdGVkIGluIFtjbWdyYXBoXSB3aGljaCBzY3JhcGVzIHRoZSBj b21waWxlZCBtb2R1bGVzDQogIChgKi5jbWkvKi5jbW8vKi5jbXgnKSBpbnN0ZWFkIG9mIHRoZSBz b3VyY2UgY29kZS4gIEl0IG5lZWRzIG5vDQogIGNvbXBpbGF0aW9uIHN3aXRjaCBvcHRpb25zIHNp bmNlIGl0IGRvZXMgbm90IHNjcmFwZSBzb3VyY2UgY29kZS4NCg0KDQpbY21ncmFwaF0gPGh0dHBz Oi8vZ2l0bGFiLmNvbS9jYW1sc3BvdHRlci9jbWdyYXBoPg0KDQoNCk90aGVyIE9DYW1sIE5ld3MN CuKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkA0KDQpGcm9t IHRoZSBvY2FtbGNvcmUgcGxhbmV0IGJsb2cNCuKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgA0KDQogIEhlcmUgYXJlIGxpbmtzIGZyb20gbWFueSBPQ2FtbCBibG9ncyBhZ2dyZWdhdGVk IGF0IFtPQ2FtbCBQbGFuZXRdLg0KDQogIOKAoiBbUmVjZW50IGFuZCB1cGNvbWluZyBjaGFuZ2Vz IHRvIE1lcmxpbl0NCiAg4oCiIFtUaGUgcm9hZCBhaGVhZCBmb3IgTWlyYWdlT1MgaW4gMjAyMV0N CiAg4oCiIFtSZWxlYXNlIG9mIEFsdC1FcmdvIDIuNC4wXQ0KDQoNCltPQ2FtbCBQbGFuZXRdIDxo dHRwOi8vb2NhbWwub3JnL2NvbW11bml0eS9wbGFuZXQvPg0KDQpbUmVjZW50IGFuZCB1cGNvbWlu ZyBjaGFuZ2VzIHRvIE1lcmxpbl0NCjxodHRwczovL3RhcmlkZXMuY29tL2Jsb2cvMjAyMS0wMS0y Ni1yZWNlbnQtYW5kLXVwY29taW5nLWNoYW5nZXMtdG8tbWVybGluPg0KDQpbVGhlIHJvYWQgYWhl YWQgZm9yIE1pcmFnZU9TIGluIDIwMjFdIDxodHRwczovL2hhbm5lcy5ucXNiLmlvL1Bvc3RzL05H ST4NCg0KW1JlbGVhc2Ugb2YgQWx0LUVyZ28gMi40LjBdDQo8aHR0cHM6Ly93d3cub2NhbWxwcm8u Y29tLzIwMjEvMDEvMjIvcmVsZWFzZS1vZi1hbHQtZXJnby0yLTQtMC8+DQoNCg0KT2xkIENXTg0K 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQDQoNCiAgSWYgeW91IGhhcHBlbiB0byBtaXNzIGEgQ1dOLCB5 b3UgY2FuIFtzZW5kIG1lIGEgbWVzc2FnZV0gYW5kIEknbGwgbWFpbA0KICBpdCB0byB5b3UsIG9y IGdvIHRha2UgYSBsb29rIGF0IFt0aGUgYXJjaGl2ZV0gb3IgdGhlIFtSU1MgZmVlZCBvZiB0aGUN CiAgYXJjaGl2ZXNdLg0KDQogIElmIHlvdSBhbHNvIHdpc2ggdG8gcmVjZWl2ZSBpdCBldmVyeSB3 ZWVrIGJ5IG1haWwsIHlvdSBtYXkgc3Vic2NyaWJlDQogIFtvbmxpbmVdLg0KDQogIFtBbGFuIFNj aG1pdHRdDQoNCg0KW3NlbmQgbWUgYSBtZXNzYWdlXSA8bWFpbHRvOmFsYW4uc2NobWl0dEBwb2x5 dGVjaG5pcXVlLm9yZz4NCg0KW3RoZSBhcmNoaXZlXSA8aHR0cHM6Ly9hbGFuLnBldGl0ZXBvbW1l Lm5ldC9jd24vPg0KDQpbUlNTIGZlZWQgb2YgdGhlIGFyY2hpdmVzXSA8aHR0cHM6Ly9hbGFuLnBl dGl0ZXBvbW1lLm5ldC9jd24vY3duLnJzcz4NCg0KW29ubGluZV0gPGh0dHA6Ly9saXN0cy5pZHls bC5vcmcvbGlzdGluZm8vY2FtbC1uZXdzLXdlZWtseS8+DQoNCltBbGFuIFNjaG1pdHRdIDxodHRw czovL2FsYW4ucGV0aXRlcG9tbWUubmV0Lz4NCg0K --=-=-= 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 26 to Februar= y 02, 2021.

release 0.2.2 of ppx_deriving_encoding

levillain.maxime announced

Following the release of json-data-encoding.0.9, I am happy to announce the release of ppx_deriving_encoding.0.2.2.

The code source and some documentation is available on gitlab, and the package can be installed with opam (opam install ppx_deriving_enc= oding).

This ppx allows to derive encoding of json-data-encoding library from most = of ocaml types.

Have fun!

OCaml 4.12.0, second beta release

octachron announced

The release of OCaml 4.12.0 is on the horizon. We have created a new beta version to help you adapt your software to the new features ahead of the re= lease.

Compared to the first beta release, this new release contains one fix for t= he Thread library (for a race condition on Windows), and experimentally re-ena= bles building the compiler on illumos and Oracle Solaris.

We are expecting this beta to be the last one before the release.

If you find any bugs, please report them here: https://github.com/ocaml= /ocaml/issues

Happy hacking,

– Florian Angeletti for the OCaml team.

Installation instructions

The base compiler can be installed as an opam switch with the following com= mands

opam update
opam switch create 4.12.0~beta2 --repositories=3Ddefault,beta=3Dgit+https://github.com/ocaml/ocaml-beta-reposit=
ory.git

If you want to tweak the configuration of the compiler, you can pick config= uration options with

opam update
opam switch create <switch_name> --packages=3Docaml-variants.4.12.0~b=
eta2+options,<option_list>
--repositories=3Ddefault,beta=3Dgit+=
https://github.com/ocaml/ocaml-beta-repository.git

where <option_list> is a comma separated list of ocaml-option-* packa= ges. For instance, for a flambda and afl enabled switch:

opam switch create 4.12.0~beta2+flambda+afl
--packages=3Docaml-variants.4.12.0~beta2+options,ocaml-option-flambda,ocaml=
-option-afl
--repositories=3Ddefault,beta=3Dgit+=
https://github.com/ocaml/ocaml-beta-repository.git

All available options can be listed with "opam search ocaml-option".

The source code is available at these addresses:

If you want to test this version, you may want to install the alpha opam re= pository

https://gi= thub.com/kit-ty-kate/opam-alpha-repository

with

opam repo add alpha git://github.com/kit-ty-ka=
te/opam-alpha-repository.git

This alpha repository contains various packages patched with fixes in the process of being upstreamed. Once the repository installed, these patched packages will take precedence over the non-patched version.

Changes from the first beta

Thread library
  • additional fixes 9757, 98= 46, +10161:= check proper ownership when operating over mutexes. Now, unlocking a mutex= held by another thread or not locked at all reliably raises a Sys_error ex= ception. Before, it was undefined behavior, but the documentation did not = say so. Likewise, locking a mutex already locked by the current thread reli= ably raises a Sys_error exception. Before, it could deadlock or succeed (a= nd do recursive locking), depending on the OS. (Xavier Leroy, report by Gui= llaume Munch-Maccagnoni, review by Guillaume Munch-Maccagnoni, David Allsop= p, and Stephen Dolan)
Build system
  • 10063: (Re-= )enable building on illumos (SmartOS, OmniOS, …) and Oracle Solaris;= x86_64/GCC and 64-bit SPARC/Sun PRO C compilers. (partially revert 2024). (T=C3=B5ivo Leed= j=C3=A4rv and Konstantin Romanov, review by Gabriel Scherer, S=C3=A9bastien= Hinderer and Xavier Leroy)
Documentation
  • 9755: Manual= : post-processing the html generated by ocamldoc and hevea. Improvements on= design and navigation, including a mobile version, and a quick-search func= tionality for the API. (San V=C5=A9 Ng=E1=BB=8Dc, review by David Allsopp a= nd Florian Angeletti)
  • 10142, 10154: improved ren= dering and latex code for toplevel code examples. (Florian Angeletti, repor= t by John Whitington, review by Gabriel Scherer)

OCaml Office Hours?

Deep in this thread, Orbifx said

And there is XMPP: <xmpp:ocaml@conference.orbitalfox.eu?join>

Timere 0.1.3 - Dealing with time and time zones have never bee= n easier

Darren announced

I am happy to announce first release of Timere, a time handling and reasoning library, which @Drup and I have been working on recently.

Examples

Christmases which fall on Wednesday from now

let () =3D
  let open Timere i=
n
  match
    resolve (
      after (Date_time.now ())
      & months [`Dec]
      & days [25]
      & weekdays [`Wed]
    )
  with
  | Error=
 msg -> failwith msg
  | Ok s =
->
    Fmt.pr "%a@." (pp_intervals ~sep:(Fmt.any "@.") ()) s

gives

[2024 Dec 25 00:00:00 +00:00:00, 2024 Dec 26 00:00:00 +00:00:00)
[2030 Dec 25 00:00:00 +00:00:00, 2030 Dec 26 00:00:00 +00:00:00)
[2041 Dec 25 00:00:00 +00:00:00, 2041 Dec 26 00:00:00 +00:00:00)
[2047 Dec 25 00:00:00 +00:00:00, 2047 Dec 26 00:00:00 +00:00:00)
[2052 Dec 25 00:00:00 +00:00:00, 2052 Dec 26 00:00:00 +00:00:00)
[2058 Dec 25 00:00:00 +00:00:00, 2058 Dec 26 00:00:00 +00:00:00)
...

See he= re for more examples

Features

  • Timestamp and date time handling with platform independent time zone su= pport
    • Subset of the IANA time zone database is built into this library
  • Reasoning over time intervals via timere objects/expressions, examples:
    • Pattern matching time and intervals. These work across DST boundaries.<= /li>
    • Intersection and union
    • Chunking at year or month boundary, or in fixed sizes
    • Evaluate (sub)expressions with a different time zone (e.g. intersection= of 9am to 5pm of Sydney and 9am to 5pm of New York)

Interesting OCaml Articles

Yawar Amin announced

Not primarily a programming article but I thought this is an interesting ex= ception because it may be the first time OCaml has been mentioned in the Financial Times: https://www.ft.com/conten= t/81811f27-4a8f-4941-99b3-2762cae76542

json-data-encoding 0.9

Rapha=C3=ABl Proust announced

On behalf of Nomadic Labs, it is my pleasure to release json-data-encoding.= 0.9.1. The code of this packaging-fix release is identical to the recent json-data-encoding.0.9 but the license i= nformation has been corrected.

The previous release had LGPL with linking except= ion headers in the source files, LICENSE file in the repository, and license field in the opam file. However, the code was actually under MI= T as per agreement of the copyright holders. Release 0.9.1 has the correct license headers, LICENSE file and li= cense field in the opam files.

The code of 0.9/0.9.1 is in dual license. Future releases will be under MIT= license only.

ocamlearlybird 1.0.0 beta1

=E6=96=87=E5=AE=87=E7=A5=A5 announced

I'm pleased to annonce that ocamlearlybird 1.0.0~beta1 just released. Will soon be available on opam.

This is a big step that we toward 1.0.0. We solved lots of issues and teste= d with realy ocaml projects such as utop, ocamlformat, and so on. And certainly, it can debug ocamlearlybird itself.

Try yourself!

NOTES.

  • New version only support OCaml 4.11. If you need other versions support= , please let me know.
  • Dune-release do not support 1.0.0~beta1 version string. So= we released 1.0.0 as 1.0.0~beta1 on opam.

KNOWN ISSUES:

  • Continue run command may hit on last removed breakpoint once when debug= utop.

=E6=96=87=E5=AE=87=E7=A5=A5

Since the post has edited over 3 times. I can't edit it anyway. I uploaded = demo video here:

Debug utop

Cmdliner cheatsheet

Martin Jambon announced

As a follow-up to an earlier conversation, I made a cheatsheet and a= template for using cmdliner by @dbuenzli. It was done quickly and I don't know everything about cmdliner, so please let me k= now if you see mistakes.

Christian Lindig then said

Good to see this. I believe a common use case is to add are sub commands as= popularised by git. It looks like this in my code:

module C =3D Cmdliner

let report =3D
  let doc =3D "genera=
te HTML or JSON report for an outing" in
  let man =3D ..   in
  C.Term.
    (ret (const make $ common_option=
s $ json $ path), info "report" ~=
doc ~man)

let default =3D
  let help =3D `Help (`Pager, None) in
  let doc =3D "GPS an=
alysis for rowers" C.Term.(ret @@ const help, info "eightp=
lus" ~doc ~man)

let cmds =3D [ export; report; topspeed; debug; sum=
mary; help ]
let main () =3D C.T=
erm.(eval_choice default cmds |><=
/span> exit)
let () =3D if !Sys.interactive then () else mai=
n ()

Martin Jambon later said

I just added a demo/template for subcommand handling. There are now two demo programs. One is focused on the different kinds of arguments and the other one on subcommands.

Shon also replied

In this same vein, I've been compiling "executable notes" whenever I find m= yself needing a certain Cmdlner recipe. I took took these recent discussion as an occasion to document the module a b= it: https://github.com/shon= feder/kwdcmd

The aim is to provide "self-documenting" constructors that encode the compo= sition of common CLI terms into module namespaces, labeled args, and type aliases. The hope being that I can have = the type signature of a combinator give me all the hints I need to avoid having to look up the documentation every tim= e :laughing:

It's just a very rough (and quite imperfect) collection of idioms I've foun= d useful, but it could be worth a look! When i get a chance, I hope to look through your cheat sheet to make sure I= have a representative constructor for each idiom you've documented.

containers 3.2

Simon Cruanes announced

I'm happy to announce that containers 3.2 has just been re= leased. It should arrive on opam soon. It notably contains an Either compatibility wrapper, more formatting func= tions, list functions, and a bunch of fixes. Many thanks to @darrenldl for contributing some initial fuzzing support.

OCaml Caf=C3=A9: Thu, Feb 11 @ 7pm (U.S. Central)

Claude Jager-Rubinson announced

Join us with your questions about the OCaml language, or just to hang out w= ith the OCaml community. Especially geared toward new and intermediate users, experienced OCaml developers will be ava= ilable to answer your questions about the language and ecosystem.

Whether you=E2=80=99re still trying to make sense of currying or can spot n= on-tail-recursive code from across the room, we hope that you=E2=80=99ll join us on Thursday, February 11 at 7pm (U.S. Cent= ral time). Meeting info and additional details can be found at https://hfpug.org.

Dependency graph of some OCaml source files

Deep in this thread, Jun FURUSE said

You may be interested in cmgraph which scrapes the compiled modules (*.cmi/*.cmo/*.cmx) instead of the source code. It needs no c= ompilation switch options since it does not scrape source code.

Other OCaml News

From the ocamlcore planet 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 online.

--=-=-=--