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 sympa.inria.fr (Postfix) with ESMTPS id 017457EC77 for ; Tue, 5 May 2020 09:45:47 +0200 (CEST) Authentication-Results: mail2-smtp-roc.national.inria.fr; spf=Pass smtp.pra=alan.schmitt@polytechnique.org; spf=Pass smtp.mailfrom=SRS0=X8I6=6T=polytechnique.org=alan.schmitt@bounces.m4x.org; spf=Pass smtp.helo=postmaster@mx1.polytechnique.org Received-SPF: Pass (mail2-smtp-roc.national.inria.fr: domain of alan.schmitt@polytechnique.org designates 129.104.30.34 as permitted sender) identity=pra; client-ip=129.104.30.34; receiver=mail2-smtp-roc.national.inria.fr; envelope-from="SRS0=X8I6=6T=polytechnique.org=alan.schmitt@bounces.m4x.org"; x-sender="alan.schmitt@polytechnique.org"; x-conformance=sidf_compatible; x-record-type="spf2.0" Received-SPF: Pass (mail2-smtp-roc.national.inria.fr: domain of SRS0=X8I6=6T=polytechnique.org=alan.schmitt@bounces.m4x.org designates 129.104.30.34 as permitted sender) identity=mailfrom; client-ip=129.104.30.34; receiver=mail2-smtp-roc.national.inria.fr; envelope-from="SRS0=X8I6=6T=polytechnique.org=alan.schmitt@bounces.m4x.org"; x-sender="SRS0=X8I6=6T=polytechnique.org=alan.schmitt@bounces.m4x.org"; x-conformance=sidf_compatible; x-record-type="spf2.0" Received-SPF: Pass (mail2-smtp-roc.national.inria.fr: domain of postmaster@mx1.polytechnique.org designates 129.104.30.34 as permitted sender) identity=helo; client-ip=129.104.30.34; receiver=mail2-smtp-roc.national.inria.fr; envelope-from="SRS0=X8I6=6T=polytechnique.org=alan.schmitt@bounces.m4x.org"; x-sender="postmaster@mx1.polytechnique.org"; x-conformance=sidf_compatible; x-record-type="v=spf1" IronPort-PHdr: =?us-ascii?q?9a23=3AY+pYVhxBQaseadzXCy+O+j09IxM/srCxBDY+r6Qd?= =?us-ascii?q?0ukQKvad9pjvdHbS+e9qxAeQG9mCtrQb1qGP6vGocFdDyK7JiGoFfp1IWk1Nou?= =?us-ascii?q?QttCtkPvS4D1bmJuXhdS0wEZcKflZk+3amLRodQ56mNBXdrXKo8DEdBAj0OxZr?= =?us-ascii?q?KeTpAI7SiNm82/yv95HJbAhEmTqwbalwIRi2ogndq9QajI9/Iast1xXFpWdFdf?= =?us-ascii?q?5Lzm1yP1KTmBj85sa0/JF99ilbpuws+c1dX6jkZqo0VbNXAigoPGAz/83rqALM?= =?us-ascii?q?TRCT6XsGU2UZiQRHDg7Y5xznRJjxsy/6tu1g2CmGOMD9UL45VSi+46ptVRTnjz?= =?us-ascii?q?oJNyMi8GHPlMN/kL5brhympxx62YHUYYeVP+d6cq7Sed4WQGxMUsZSWSxHHIO8?= =?us-ascii?q?bpAPD+saMuZcsYb2ulUPrRykBQaxH+Pk1ztEi3Hq0aE/1ekqDAPI0xE6H98WsH?= =?us-ascii?q?rassj7OqkRX++60KbF1i/MY+9M1Drn9ITEbhIsrPeRVrxwa8rRzkwvGhvZg1WU?= =?us-ascii?q?s4PlOS6e2PkRvGib6upgVP6vi3I6oAx2uDevwt0jio/TioIO1l/E9SB5wIcpJd?= =?us-ascii?q?2kU0N7edmkEJ9QtiGGKYR5XsMiQ2dpuCYj170Jp4S3fC8QyJQo3hPSbeGMfIeU?= =?us-ascii?q?7Bz5TumRPSt4i2x/eLK5nxu8/0ytxOLzWMS231tHrS5In8TDu30TyRDe98aKRP?= =?us-ascii?q?R+80qv1zuC2Rze5+NELE03kafVK54vz78+mJcRsUrNHiD7lUPrh6GYcUUk//Kn?= =?us-ascii?q?6+XhYrj+vp+TKZN0igDiMqswgsy/BuE4Mg0QUGSB/+SzyqHj8VX+QLpWlPI2l6?= =?us-ascii?q?3ZvIrdJcQBqa61GwBV0oc/6xa/Ejepy84UkmUALFJAYB6HgInpO03OIPDlFviz?= =?us-ascii?q?mVWskDBzy/DBIrLuGJDNLnzanLj6erZ97E1cxBAvwtBY4pJYErABIPTpWk/wrt?= =?us-ascii?q?PUFBE5Mxasz+bmDtV9zIIeVniVDqODPqPSq0eE6f4oI+mWYo8apjL9K/w/6/Hw?= =?us-ascii?q?kHA5hEcRcrKo3ZsLc3+4A+hpI0aHbnrwmNsBFn0KvgUmQOP0kl2CSyRcZ2qzX6?= =?us-ascii?q?Il+zE0FpiqApvDRoy1gbyOwSe6HplSZmxcDVCMC3joeoOZUPkPcCKfOtJtniIA?= =?us-ascii?q?WLS7VoMtyR6juBX0xrZ7NObZ9CIVuYrh2dV2/eHfix4/+SJuA8iA3GyBVXx4k2?= =?us-ascii?q?wUSzIwwatxu1Zyyk2Z3qh9m/FYFcJc5/dOUgoiMJ7dwPF2B8rqWgLGeteISEqm?= =?us-ascii?q?Tcu6DjExSNIxwsYOY1tjFNm4iRDDxSWqD6cUl7yNGpM07rrR02XvK8t50XrKyb?= =?us-ascii?q?UtglY8TsZBKWGqnKBy+gfLC47MiUqZlqKqdaoG3C7K8WeO1XeAsl1FXgJsSajK?= =?us-ascii?q?XHMSaEjXoNnh507MUaejCawgMgtFyc+CNrVFZcHpjVVARffjIcnebHyrl2e3Hx?= =?us-ascii?q?aIyauBY5Due2oH2iXRElMEnBwT/XaDNAg+GjuhrnnFAzxpCFLvZV/j/vdlqH+h?= =?us-ascii?q?S085wA6LY1dm17qv9R4ZneacRO8L3rIYpCchrC15E0qn0NLTD9qMvg5hfKRHYd?= =?us-ascii?q?Mh+1pHzmLYtwllPpO6Naxih1gecx52v0z0zRl3BJ9AwoAWqyZgyBV0Y+rM1ExH?= =?us-ascii?q?XzeH29b2N6GBbiG49w+pIeaejlrB1v6S+7wT87I5p0TnuEeuDEV0tz1s2txRln?= =?us-ascii?q?+d/YniDQwIUJu3XFxzvxN9oqnyZigm+5iS0mdmMLW9tjHFy5QkGbgL0BGlKv5b?= =?us-ascii?q?OaXMLwTyFswGG4D6IegjnR6yZRIBPfxO3LYzO9K6evCG3q+yIesmmyip2zcUqL?= =?us-ascii?q?th216BonIvAtXD2IwIlq7Jh1fVZ3LHlF6k9/vPt8VcfzhLTzinziz1GINaZqtz?= =?us-ascii?q?ZJsGT2C0LJ/un4Qst9vWQ3ddsWWbKRYD0c6tdwCVagWijwdXyEIcrGfhnHeoiT?= =?us-ascii?q?tunGNw9/fN7Gn12+3nMSE/FCtLSW1l1wy+JJjtycgdWFm0YgMpkhq8+Eu8wLJU?= =?us-ascii?q?9v1y?= X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: =?us-ascii?q?A0CeAgCqGLFehyIeaIFmg3VYPgFcVTIqh?= =?us-ascii?q?COBXYckhX6FHwKFL5E4gRADAk4PAQMBDBgBBQ4BAgQBAYFQgT5xQQICAheCHx0?= =?us-ascii?q?GAQUzEwIQAQEFAQEBAgECAwQBEwEBAQoLCQgphTEGJgyCOwwMAwODHQMBIQQGQ?= =?us-ascii?q?CUjAxQBBgMCBA0BFwEUChcBEhQGglY2AYJ8BAEKlxebeX8zhDkBAwQPAQ4JhFi?= =?us-ascii?q?BQA0CE38XhSyDHYNVJg+BTD+BEYISUGyBQYENDgsBAQEBAYEoGAEBVoJcF4JJB?= =?us-ascii?q?I5IgQ2QZ4IPkAYHgkt/BIYgdYl+U4VKglszWYdVhHuMaSGPdocqdAmBLYVUiXi?= =?us-ascii?q?EJIE/KlhvHgwHMxowQ4I1AQEyCV8NVo0yg2ABCIIbKGpUgSaBdTuFFDA/MwIBA?= =?us-ascii?q?QcsAgYBBwEBAwl1AQEFEwsBkE9cAQE?= X-IPAS-Result: =?us-ascii?q?A0CeAgCqGLFehyIeaIFmg3VYPgFcVTIqhCOBXYckhX6FHwK?= =?us-ascii?q?FL5E4gRADAk4PAQMBDBgBBQ4BAgQBAYFQgT5xQQICAheCHx0GAQUzEwIQAQEFA?= =?us-ascii?q?QEBAgECAwQBEwEBAQoLCQgphTEGJgyCOwwMAwODHQMBIQQGQCUjAxQBBgMCBA0?= =?us-ascii?q?BFwEUChcBEhQGglY2AYJ8BAEKlxebeX8zhDkBAwQPAQ4JhFiBQA0CE38XhSyDH?= =?us-ascii?q?YNVJg+BTD+BEYISUGyBQYENDgsBAQEBAYEoGAEBVoJcF4JJBI5IgQ2QZ4IPkAY?= =?us-ascii?q?Hgkt/BIYgdYl+U4VKglszWYdVhHuMaSGPdocqdAmBLYVUiXiEJIE/KlhvHgwHM?= =?us-ascii?q?xowQ4I1AQEyCV8NVo0yg2ABCIIbKGpUgSaBdTuFFDA/MwIBAQcsAgYBBwEBAwl?= =?us-ascii?q?1AQEFEwsBkE9cAQE?= X-IronPort-AV: E=Sophos;i="5.73,354,1583190000"; d="scan'208,217";a="448208304" X-MGA-submission: =?us-ascii?q?MDFUpPpTFQULVlcMogY/N7jIn/rlEJmcK8qzAb?= =?us-ascii?q?e1dGYC3MK7k14Ut5QdVK6adw6RiX0Fi1vSH22ILwr7PhDUcS0buQCWSJ?= =?us-ascii?q?xFle0Tu+9vzCXFQ2XxxiGSDUdcvodeVFV7Wwpio39wLv+wx9x9nQ9s98?= =?us-ascii?q?SK8dZSlKIiZaqBHw3uQt9Z8w=3D=3D?= Received: from mx1.polytechnique.org ([129.104.30.34]) by mail2-smtp-roc.national.inria.fr with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 05 May 2020 09:45:46 +0200 Received: from set (cbg35-2-78-242-14-140.fbx.proxad.net [78.242.14.140]) (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 16BA6561292; Tue, 5 May 2020 09:45:42 +0200 (CEST) From: Alan Schmitt To: "lwn" , "cwn" , caml-list@inria.fr, comp@lists.orbitalfox.eu Date: Tue, 05 May 2020 09:45:41 +0200 Message-ID: <87368eddui.fsf@m4x.org> MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="=-=-=" X-AV-Checked: ClamAV using ClamSMTP at svoboda.polytechnique.org (Tue May 5 09:45:42 2020 +0200 (CEST)) X-Spam-Flag: No, tests=bogofilter, spamicity=0.030086, queueID=CF38D561296 X-Org-Mail: alan.schmitt.1995@polytechnique.org Subject: [Caml-list] Attn: Development Editor, Latest OCaml Weekly News --=-=-= Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: base64 SGVsbG8NCg0KSGVyZSBpcyB0aGUgbGF0ZXN0IE9DYW1sIFdlZWtseSBOZXdz LCBmb3IgdGhlIHdlZWsgb2YgQXByaWwgMjggdG8gTWF5DQowNSwgMjAyMC4N Cg0KVGFibGUgb2YgQ29udGVudHMNCuKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgA0KDQpMd3Qgbm93IGhhcyBs ZXQqIHN5bnRheA0KSk9TRSAwLjMuMCAtIE5vdyB3aXRoIDEwMCUgbW9yZSBl bmNyeXB0aW9uDQpBcmUgdGhlcmUgbGVhcm5pbmcgbWF0ZXJpYWxzIGZvciBP Q2FtbCBmb3IgdGhvc2Ugd2l0aCBubyBwcm9ncmFtbWluZyBleHBlcmllbmNl Pw0KVGhlIHJlY2VudCBldm9sdXRpb24gb2YgdXRvcCwgbGFtYmRhLXRlcm0s IHplZCBhbmQgdW5kZXJuZWF0aCBwcm9qZWN0cw0KTG9va2luZyBmb3IgImxv dmVseSwgaWRpb21hdGljIiBleGFtcGxlcyBvZiBPY2FtbCB1c2VkIGZvciBz aGVsbC1zY3JpcHRpbmcgaW4gdGhlIG1hbm5lciBvZiBQZXJsL1B5dGhvbiAo YnV0IGVzcC4gUGVybCkNCk9sZCBDV04NCg0KDQpMd3Qgbm93IGhhcyBsZXQq IHN5bnRheA0K4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ 4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQDQoNCiAgQXJjaGl2 ZTogW2h0dHBzOi8vZGlzY3Vzcy5vY2FtbC5vcmcvdC9sd3Qtbm93LWhhcy1s ZXQtc3ludGF4LzU2NTEvMV0NCg0KDQpBbnRvbiBCYWNoaW4gYW5ub3VuY2Vk DQrilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIANCg0KICBbTHd0XSBub3cgaGFzIGBs ZXQqJyBhbmQgYGxldCsnIHN5bnRheCwgd2hpY2ggY2FuIGJlIHVzZWQgbGlr ZSB0aGlzOg0KDQogIOKUjOKUgOKUgOKUgOKUgA0KICDilIIgb3BlbiBMd3Qu U3ludGF4DQogIOKUgiANCiAg4pSCIGxldCAoKSA9DQogIOKUgiAgIGxldCBy ZXF1ZXN0ID0NCiAg4pSCICAgICBsZXQqIGFkZHJlc3NlcyA9IEx3dF91bml4 LmdldGFkZHJpbmZvICJnb29nbGUuY29tIiAiODAiIFtdIGluDQogIOKUgiAg ICAgbGV0IGdvb2dsZSA9IEx3dF91bml4LigoTGlzdC5oZCBhZGRyZXNzZXMp LmFpX2FkZHIpIGluDQogIOKUgiANCiAg4pSCICAgICBMd3RfaW8uKHdpdGhf Y29ubmVjdGlvbiBnb29nbGUgKGZ1biAoaW5jb21pbmcsIG91dGdvaW5nKSAt Pg0KICDilIIgICAgICAgbGV0KiAoKSA9IHdyaXRlIG91dGdvaW5nICJHRVQg LyBIVFRQLzEuMVxyXG4iIGluDQogIOKUgiAgICAgICBsZXQqICgpID0gd3Jp dGUgb3V0Z29pbmcgIkNvbm5lY3Rpb246IGNsb3NlXHJcblxyXG4iIGluDQog IOKUgiAgICAgICBsZXQqIHJlc3BvbnNlID0gcmVhZCBpbmNvbWluZyBpbg0K ICDilIIgICAgICAgTHd0LnJldHVybiAoU29tZSByZXNwb25zZSkpKQ0KICDi lIIgICBpbg0KICDilIIgDQogIOKUgiAgIGxldCB0aW1lb3V0ID0NCiAg4pSC ICAgICBsZXQqICgpID0gTHd0X3VuaXguc2xlZXAgNS4gaW4NCiAg4pSCICAg ICBMd3QucmV0dXJuIE5vbmUNCiAg4pSCICAgaW4NCiAg4pSCIA0KICDilIIg ICBtYXRjaCBMd3RfbWFpbi5ydW4gKEx3dC5waWNrIFtyZXF1ZXN0OyB0aW1l b3V0XSkgd2l0aA0KICDilIIgICB8IFNvbWUgcmVzcG9uc2UgLT4gcHJpbnRf c3RyaW5nIHJlc3BvbnNlDQogIOKUgiAgIHwgTm9uZSAtPiBwcmVycl9lbmRs aW5lICJSZXF1ZXN0IHRpbWVkIG91dCI7IGV4aXQgMQ0KICDilJTilIDilIDi lIDilIANCg0KICBUaGlzIGlzIG5vdyByZWxlYXNlZCBpbiBMd3QgWzUuMy4w XS4gVGhhbmtzIHRvIFJhaHVsIEt1bWFyIGZvciBhZGRpbmcNCiAgYGxldCon LCBhbmQgQENyYWlnRmUgZm9yIGFkZGluZyBgbGV0KychDQoNCg0KW0x3dF0g aHR0cHM6Ly9naXRodWIuY29tL29jc2lnZW4vbHd0DQoNCls1LjMuMF0gaHR0 cHM6Ly9naXRodWIuY29tL29jc2lnZW4vbHd0L3JlbGVhc2VzL3RhZy81LjMu MA0KDQoNClRob21hcyBDb29wbWFuIGFza2VkDQrilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAN Cg0KICBBd2Vzb21lIHRoaXMgbG9va3MgZ3JlYXQuDQoNCiAgMiBxdWljayBx dWVzdGlvbnM6DQoNCiAgMS4gSSBkb24ndCBzZWUgdGhpcyBuZXcgdmVyc2lv biBkb2N1bWVudGVkIG9uIG9jc2lnZW4geWV0PyBJcyB0aGF0IGENCiAgICAg YnVpbGQgdGhhdCBuZWVkcyB0byBiZSBkb25lIG1hbnVhbGx5Pw0KICAyLiBJ cyBgcHB4X2x3dCcgc3RpbGwgcmVjb21tZW5kIGZvciBzb21lIHVzZWNhc2Vz IGxpa2UgYHRyeSUnPyBGb3INCiAgICAgd2hhdCBjYXNlcyBpcyBvbmUgcHJl ZmVycmVkIG92ZXIgdGhlIG90aGVyPw0KDQoNCkFudG9uIEJhY2hpbiByZXBs aWVkDQrilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIANCg0KICBHb29kIHF1ZXN0aW9ucyA6c2xp Z2h0X3NtaWxlOg0KDQogIDEuIFRoZSBkb2NzIGdlbmVyYXRpb24gaXMgYmxv Y2tlZCBvbiBhbiBPY3NpZ2VuICJpbnRlcm5hbCIgcGFja2FnZQ0KICAgICBg d2lraWRvYycsIHdoaWNoIGhhcyBub3QgYmVlbiB1cGRhdGVkIHRvIHN1cHBv cnQgNC4wOC4gU28sDQogICAgIGVmZmVjdGl2ZWx5LCBgbGV0KicgaXMgZXhh Y3RseSB3aGF0IGlzIHByZXZlbnRpbmcgZG9jcyBnZW5lcmF0aW9uDQogICAg IGZvciB0aGUgdGltZSBiZWluZy4gSSdsbCBwb3N0IHRoZSBkb2NzIGFzIHNv b24gYXMgdGhhdCBpcyBmaXhlZC4NCiAgMi4gYHBweF9sd3QnIGlzIHByb2Jh Ymx5IHN0aWxsIHRoZSByZWNvbW1lbmRlZCB3YXksIGJlY2F1c2Ugb2YgYmV0 dGVyDQogICAgIGJhY2t0cmFjZXMsIGFuZCB0aGluZ3MgbGlrZSBgdHJ5JWx3 dCcuIGBsZXQqJyBpcyBuaWNlIGZvciBwZW9wbGUNCiAgICAgdGhhdCBkb24n dCB3YW50IHRvIHVzZSB0aGUgUFBYLiBUaGV5IGNhbiBzdGlsbCBiZW5lZml0 IGZyb20gYQ0KICAgICBtb25hZGljIHN5bnRheC4NCg0KDQpKT1NFIDAuMy4w IC0gTm93IHdpdGggMTAwJSBtb3JlIGVuY3J5cHRpb24NCuKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkA0KDQogIEFyY2hpdmU6DQogIFto dHRwczovL2Rpc2N1c3Mub2NhbWwub3JnL3QvYW5uLWpvc2UtMC0zLTAtbm93 LXdpdGgtMTAwLW1vcmUtZW5jcnlwdGlvbi81NjY3LzFdDQoNCg0KVWxyaWsg U3RyaWQgYW5ub3VuY2VkDQrilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIANCg0KICBJIHJl Y2VudGx5IHJlbGVhc2VkIGEgdmVyc2lvbiAwLjMuMCBvZiBKT1NFLg0KDQog IFtodHRwczovL2dpdGh1Yi5jb20vdWxyaWtzdHJpZC9yZWFzb24tam9zZV0N CiAgW2h0dHBzOi8vdWxyaWtzdHJpZC5naXRodWIuaW8vcmVhc29uLWpvc2Vd DQoNCiAgSXQgbm93IGluY2x1ZGVzIHNvbWUgb2YgdGhlIEpXRSAoSlNPTiBX ZWIgRW5jcnlwdGlvbikgc3BlYy4gQSBodWdlDQogIHRoYW5rIHlvdSBnb2Vz IG91dCB0byBAaGFubmVzIGZvciBoZWxwaW5nIG1lIGltcGxlbWVudGluZyBv bmUgb2YgdGhlDQogIGduYXJsaWVyIGNvbWJpbmF0aW9ucyBvZiBkZWNyeXB0 aW9uIHRoYXQgSSBjb3VsZCB0aGVuIHVzZSBhcyBhIGJhc2UNCiAgZm9yIGVu Y3J5cHRpb24gYW5kIG1vcmUgYGFsZycgYW5kIGBlbmMnLg0KDQogIEkgYWxz byByZWZhY3RvcmVkIHRoZSBKV0sgKEpTT04gV2ViIEtleXMpIGltcGxlbWVu dGF0aW9uIHRvIHVuaWZ5IGFuZA0KICBzaW1wbGlmeSB0aGUgcmVwcmVzZW50 YXRpb24uIEl0IGlzIG5vdyBwb3NzaWJsZSB0byB1c2UgYSBwcml2YXRlIGtl eQ0KICBmb3IgYW55dGhpbmcgYSBwdWJsaWMga2V5IGNhbiBkbyBzaW5jZSBp dCdzIGEgc3VwZXJzZXQuDQoNCiAgQSBzcGVjaWFsIHRoYW5rcyB0byBAYW5t b250ZWlybyBmb3IgaGVscGluZyBtZSB3aXRoIHRoZSBkZXNpZ24gYW5kDQog IHJldmlld2luZyBteSBjb2RlLg0KDQoNCkFyZSB0aGVyZSBsZWFybmluZyBt YXRlcmlhbHMgZm9yIE9DYW1sIGZvciB0aG9zZSB3aXRoIG5vIHByb2dyYW1t aW5nIGV4cGVyaWVuY2U/DQrilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZANCg0KICBBcmNoaXZl Og0KICBbaHR0cHM6Ly9kaXNjdXNzLm9jYW1sLm9yZy90L2FyZS10aGVyZS1s ZWFybmluZy1tYXRlcmlhbHMtZm9yLW9jYW1sLWZvci10aG9zZS13aXRoLW5v LXByb2dyYW1taW5nLWV4cGVyaWVuY2UvNTY4NC8xXQ0KDQoNCkFhcm9uIENo cmlzdGlhbnNvbiBhc2tlZA0K4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA DQoNCiAgT0NhbWwgaXMgYSBsYW5ndWFnZSB3aXRoIHNvbWUgYWR2YW5jZWQg ZmVhdHVyZXMsIGJ1dCBhIHZlcnkgZ2VudGxlDQogIGxlYXJuaW5nIGN1cnZl LiBJdCBzZWVtcyBsaWtlIGl0IHdvdWxkIGJlIHdlbGwtc3VpdGVkIHRvIHRl YWNoaW5nDQogIGJlZ2lubmVycyB0byBwcm9ncmFtIChhIGZldyB0cmlja3kg ZXJyb3IgbWVzc2FnZXMgbm90d2l0aHN0YW5kaW5nKSwNCiAgYnV0IEkgaGF2 ZW4ndCBzZWVuIG1hbnkgcmVzb3VyY2VzIHRhcmdldGVkIGF0IHRlYWNoaW5n IHByb2dyYW1taW5nDQogIGZyb20gc2NyYXRjaC4gRG9lcyBhbnlvbmUgaGVy ZSBrbm93IGFueT8NCg0KDQpEYW5pZWwgQsO8bnpsaSByZXBsaWVkDQrilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIANCg0KICBUaGVyZSBpcyBbKk9DYW1sIGZyb20gdGhl IFZlcnkgQmVnaW5uaW5nKl0gd3JpdHRlbiBieSBASm9obldoaXRpbmd0b24u DQoNCg0KWypPQ2FtbCBmcm9tIHRoZSBWZXJ5IEJlZ2lubmluZypdIGh0dHA6 Ly9vY2FtbC1ib29rLmNvbS8NCg0KDQpOaWNvbMOhcyBPamVkYSBCw6RyIGFs c28gcmVwbGllZA0K4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSADQoNCiAgQW4gZXhjZWxsZW50IChmcmVlKSBib29rIGlz ICJMRSBMQU5HQUdFIENBTUwiDQogIFtodHRwczovL2NhbWwuaW5yaWEuZnIv cHViL2Rpc3RyaWIvYm9va3MvbGxjLnBkZl0uDQoNCg0KUGllcnJlIGFsc28g cmVwbGllZA0K4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSADQoNCiAgVGhlcmUncyBhbHNvIFtDUzMx MTBdIGZyb20gQ29ybmVsbCBVbml2ZXJzaXR5LiBIZXJlJ3MgW3RoZQ0KICB0 ZXh0Ym9va10uIEl0J3MgcHJldHR5IGdyZWF0IQ0KDQoNCltDUzMxMTBdIGh0 dHBzOi8vd3d3LmNzLmNvcm5lbGwuZWR1L2NvdXJzZXMvY3MzMTEwLzIwMjBz cC8NCg0KW3RoZSB0ZXh0Ym9va10NCmh0dHBzOi8vd3d3LmNzLmNvcm5lbGwu ZWR1L2NvdXJzZXMvY3MzMTEwLzIwMTlzcC90ZXh0Ym9vay8NCg0KDQpUaGUg cmVjZW50IGV2b2x1dGlvbiBvZiB1dG9wLCBsYW1iZGEtdGVybSwgemVkIGFu ZCB1bmRlcm5lYXRoIHByb2plY3RzDQrilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZANCg0KICBBcmNoaXZlOg0KICBbaHR0cHM6Ly9kaXNjdXNzLm9j YW1sLm9yZy90L3RoZS1yZWNlbnQtZXZvbHV0aW9uLW9mLXV0b3AtbGFtYmRh LXRlcm0temVkLWFuZC11bmRlcm5lYXRoLXByb2plY3RzLzU2ODcvMV0NCg0K DQpaQU4gRG9ZZSBhbm5vdW5jZWQNCuKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgA0KDQogIEhpLCBkZWFy IE9DYW1sIGd1eXMhIFdlJ3ZlIGJlZW4ga2VlcGluZyBxdWlldCBmb3IgbW9y ZSB0aGFuIG9uZSB5ZWFyDQogIHRob3VnaCB1dG9wLCBsYW1iZGEtdGVybSwg emVkIGFuZCBzb21lIHJlbGF0ZWQgcHJvamVjdHMgd2VyZSBzdGlsbA0KICBl dm9sdmluZyBkdXJpbmcgdGhlIHBlcmlvZCBvZiB0aW1lLiBUaGlzIGlzIGJl Y2F1c2Ugb2YgdHdvIHJlYXNvbnM6DQoNCiAgMS4gVGhlIG5ldyBmZWF0dXJl IGhhZCBub3RoaW5nIHRvIGRvIHdpdGggdGhlIGZpZWxkcyB3aGVyZSBtb3N0 IE9DYW1sDQogICAgIGRldmVsb3BlcnMgYXJlIHdvcmtpbmcgb246DQoNCiAg ICAgW2h0dHBzOi8vYXdzMS5kaXNjb3Vyc2UtY2RuLmNvbS9zdGFuZGFyZDEx L3VwbG9hZHMvb2NhbWwvb3JpZ2luYWwvMlgvYS9hMzBkNWZiNmZjMDc1YTUw ODAxYjM4NzI5OWNjODIwOTY1ZDQ4Y2EwLnBuZ10NCg0KICAgICBbaHR0cHM6 Ly9hd3MxLmRpc2NvdXJzZS1jZG4uY29tL3N0YW5kYXJkMTEvdXBsb2Fkcy9v Y2FtbC9vcmlnaW5hbC8yWC85LzkxYjg4ZjBjNDkyNzAyMjEyZjAwZjE3YWYx YmYwZTE4ZWUxYTQ2M2IucG5nXQ0KDQogICAgIFJlY29nbml6aW5nLCBlZGl0 aW5nLCBmdXp6eSBzZWFyY2hpbmcgZm9yIENoYXJhY3Rlcg0KICAgICBWYXJp YXRpb24obWFpbmx5IGZvciBhbmNpZW50IENKSyBjaGFyYWN0ZXJzKS4NCg0K ICAgICBOZXZlcnRoZWxlc3MsIHRoZSBuZXcgZmVhdHVyZSBicm91Z2h0IHVz IGEgZ29vZCBzaWRlIGVmZmVjdCDigJMgdGhlDQogICAgIGxvbmctZXhpc3Rp bmcgW0lzc3VlIHdpdGggYXNpYW4gY2hhcnNldF0gd2FzIHJlc29sdmVkLiBV VG9wIHVzZXJzDQogICAgIHdpbGwgbm90aWNlIHRoZSByZWZpbmVtZW50IG5h dHVyYWxseSwgc28gbm8gYW5ub3VuY2VtZW50IHdhcw0KICAgICBuZWVkZWQu DQoNCiAgMi4gSSBkaWRuJ3QgZGVlbSB0aGUgZmlyc3QgZmV3IG5ldyBlZGl0 aW9ucyBvZiB6ZWQgMiBhbmQgbGFtYmRhLXRlcm0gMg0KICAgICBzdGFibGUg ZW5vdWdoLg0KDQoNCltJc3N1ZSB3aXRoIGFzaWFuIGNoYXJzZXRdDQpodHRw czovL2dpdGh1Yi5jb20vb2NhbWwtY29tbXVuaXR5L2xhbWJkYS10ZXJtL2lz c3Vlcy8yDQoNCjMuMCBlcmENCuKVjOKVjOKVjOKVjOKVjOKVjOKVjA0KDQog IFRoaXMgdGltZSwgd2UgYXJlIGVudGVyaW5nIHplZCAzLCBsYW1iZGEtdGVy bSAzIGVyYS4gVGhlIGZlYXR1cmVzDQogIGludHJvZHVjZWQgc2luY2UgemVk IDIsIGxhbWJkYS10ZXJtIDIgYXJlIHF1aXRlIHN0YWJsZSBub3cgYW5kIHRo ZSBuZXcNCiAgZmVhdHVyZSBjb21pbmcgdG8gdXMgd2lsbCBoYXZlIGEgYml0 IG1vcmUgaW1wYWN0LCBlc3BlY2lhbGx5IHRvIHZpbQ0KICB1c2Vycy4gU28g aXQncyB3b3J0aHdoaWxlIHRvIGRyYWZ0IGFuIGFubm91bmNlbWVudDoNCg0K DQril4ogVkkgRWRpdGluZyBNb2RlDQoNCiAgW2h0dHBzOi8vYXdzMS5kaXNj b3Vyc2UtY2RuLmNvbS9zdGFuZGFyZDExL3VwbG9hZHMvb2NhbWwvb3JpZ2lu YWwvMlgvYy9jYTExOTI0MDQ2OTc3ZDg5ZDQzNDVhZDEzNTk3N2M2OTYwNDcw ZWRjLmdpZl0NCg0KICBPQ2FtbCBndXlzLCBob3BlIHlvdSBlbmpveSB0aGlz Lg0KDQoNCkxpc3Qgb2Ygbm90YWJsZSBjaGFuZ2VzOg0K4pWM4pWM4pWM4pWM 4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM 4pWM4pWM4pWM4pWM4pWMDQoNCiAg4oCiIHplZCAyOg0KICAgIOKAoiB3aWRl LCBjb21iaW5lZCBnbHlwaChDaGFyYWN0ZXIgVmFyaWF0aW9uLCBJUEEsIENK SyDigKYpDQogICAg4oCiIGFkZCB3YW50ZWRfY29sdW1uIHN1cHBvcnQgZm9y IHdpZGUgd2lkdGggY2hhcmFjdGVyDQoNCiAg4oCiIGxhbWJkYS10ZXJtIDI6 DQogICAg4oCiIHdpZGUsIGNvbWJpbmVkIGdseXBoKENoYXJhY3RlciBWYXJp YXRpb24sIElQQSwgQ0pLIOKApikNCiAgICDigKIgYWRkIGhvcml6b250YWwg c2Nyb2xsaW5nIHN1cHBvcnQgZm9yIHdpZGUgd2lkdGggY2hhcmFjdGVyDQoN CiAg4oCiIHplZCAzOg0KICAgIOKAoiBhZGQgbmV3IGFjdGlvbnMgZm9yIGNv bnZlbmllbmNlDQoNCiAg4oCiIGxhbWJkYS10ZXJtIDM6DQogICAg4oCiIGBM VGVybV9yZWFkX2xpbmUnOiBhZGQgaW5pdGlhbCBzdXBwb3J0IGZvciB2aSBl ZGl0aW5nIG1vZGU6DQogICAg4oCiIG1vdGlvbnM6DQogICAgICDigKIgaCBs IDAgXiAkDQogICAgICDigKIgaiBrIGdnIEcNCiAgICAgIOKAoiB3IFcgZSBF IGIgQiBnZSBnRQ0KICAgICAg4oCiIGYgRiB0IFQNCiAgICAgIOKAoiBhdyBp dyBhVyBpVw0KICAgICAg4oCiIGluY2x1ZGUgb3IgaW5uZXIgKCApLCBbIF0s IHsgfSwgPCA+LCAnIGFuZCAiDQogICAgICDigKIgZ2VuZXJpYyBxdW90ZTog YXE/IGlxPyB3aGVyZSA/IGNvdWxkIGJlIGFueSBjaGFyYWN0ZXINCiAgICAg IOKAoiBicmFja2V0IG1hdGNoaW5nOiBqdW1wIGJhY2sgYW5kIGZvcnRoIGJl dHdlZW4gbWF0Y2hlZCBicmFja2V0cw0KICAgIOKAoiBkZWxldGUsIGNoYW5n ZSwgeWFuayB3aXRoIG1vdGlvbnMNCiAgICDigKIgcGFzdGU6IHAgUA0KICAg IOKAoiBsaW5lIGpvaW5pbmc6IEoNCg0KICBmb3IgYSBmdWxsIGxpc3Qgb2Yg dGhlIGNoYW5nZXMsIHBsZWFzZSB2aXNpdCB0aGUgaG9tZXBhZ2VzIG9mIGVh Y2gNCiAgcHJvamVjdC4NCg0KDQpQcm9qZWN0cyB1bmRlcm5lYXRoOg0K4pWM 4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM 4pWM4pWM4pWM4pWMDQoNCiAg4oCiIFtjaGFySW5mb193aWR0aF06IERldGVy bWluZSBjb2x1bW4gd2lkdGggZm9yIGEgY2hhcmFjdGVyDQogIOKAoiBbbWV3 XSAmIFttZXdfdmldOiBNb2RhbCBlZGl0aW5nIHdpdGNoICYgSXRzIFZJIGlu dGVycHJldGVyDQogICAgY29tcGxlbWVudC4gSW4gYSB3b3JkLCBtb2RhbCBl ZGl0aW5nIGVuZ2luZSBnZW5lcmF0b3JzLg0KDQoNCltjaGFySW5mb193aWR0 aF0gaHR0cHM6Ly9iaXRidWNrZXQub3JnL3phbmRveWUvY2hhcmluZm9fd2lk dGgvDQoNClttZXddIGh0dHBzOi8vZ2l0aHViLmNvbS9rYW5kdS9tZXcNCg0K W21ld192aV0gaHR0cHM6Ly9naXRodWIuY29tL2thbmR1L21ld192aQ0KDQoN CldoYXQncyBuZXh0DQrilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzi lYwNCg0K4peKIFZJIEVkaXRpbmcgTW9kZQ0KDQogIDEuIFZpc3VhbCBtb2Rl DQoNCiAgICAgW2h0dHBzOi8vYXdzMS5kaXNjb3Vyc2UtY2RuLmNvbS9zdGFu ZGFyZDExL3VwbG9hZHMvb2NhbWwvb3JpZ2luYWwvMlgvNy83Y2M0NTAxMDcx MGFkMjhkOGQxZTg1OWU5YjI4ODA2NDY5ZWY4MDgwLmdpZl0NCiAgMi4gcmVn aXN0ZXIgc3VwcG9ydCBhbmQgbW9yZSB2aSBjb21wYXRpYmxlDQoNCg0K4peK IENKS1YNCg0KICBXZSd2ZSByZWNvcmRlZCBtb3JlIHRoZW4gMTAwIHRob3Vz YW5kIGVudHJpZXMgYWJvdXQgdGhlIHN0cnVjdHVyZSBvZg0KICBDSksgY2hh cmFjdGVycywgd2hhdCBpcyBhIGNoYXJhY3RlciBjb25zaXN0cyBvZiwgaG93 IGFyZSB0aGUNCiAgc3ViLWFzc2VtYmxpZXMgZ2x1ZSB0b2dldGhlciBldGMu IEFuZCBhcyBhIGNvbXBsZW1lbnQgdG8NCiAgY2hhckluZm9fd2lkdGgsIHdl IG1heSByZWxlYXNlIGEgbmV3IHByb2plY3QgY2FsbGVkIGNoYXJJbmZvX3N0 cnVjdHVyZQ0KICA7KQ0KDQoNCkxvb2tpbmcgZm9yICJsb3ZlbHksIGlkaW9t YXRpYyIgZXhhbXBsZXMgb2YgT2NhbWwgdXNlZCBmb3Igc2hlbGwtc2NyaXB0 aW5nIGluIHRoZSBtYW5uZXIgb2YgUGVybC9QeXRob24gKGJ1dCBlc3AuIFBl cmwpDQrilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi lZANCg0KICBBcmNoaXZlOg0KICBbaHR0cHM6Ly9kaXNjdXNzLm9jYW1sLm9y Zy90L2xvb2tpbmctZm9yLWxvdmVseS1pZGlvbWF0aWMtZXhhbXBsZXMtb2Yt b2NhbWwtdXNlZC1mb3Itc2hlbGwtc2NyaXB0aW5nLWluLXRoZS1tYW5uZXIt b2YtcGVybC1weXRob24tYnV0LWVzcC1wZXJsLzU3MDMvMV0NCg0KDQpDaGV0 IE11cnRoeSBhbm5vdW5jZWQNCuKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgA0KDQogIEkg d29uZGVyIGlmIHRoZXJlIGFyZSBwZW9wbGUgd2hvIGhhdmUgd3JpdHRlbiBu b250cml2aWFsIE9jYW1sIGNvZGUNCiAgZm9yIHNoZWxsLXNjcmlwdGluZywg dGhhdCB0aGV5IHRoaW5rIGV4ZW1wbGlmaWVzIHRoZSByaWdodCB3YXkgdG8g ZG8NCiAgaXQuICBJJ3ZlIGJlZW4gYSBQZXJsIGhhY2tlciBmb3IgMjV5ciwg YW5kIHNvIHdoZW4gSSByZWFjaCBmb3IgT2NhbWwNCiAgdG8gd3JpdGUgc3R1 ZmYgdGhhdCBzaG91bGQgYmUgUGVybCBzaGVsbC1zY3JpcHRzLCBJIGFsd2F5 cyBmaW5kIGl0IGENCiAgYml0IHBhaW5mdWwsIGFuZCB0aGVyZSdzIGEgc2ln bmlmaWNhbnQgb3ZlcmhlYWQgdG8gZ2V0dGluZyB0aGUgam9iDQogIGRvbmUu ICBTb21lIG9mIHRoYXQgaXMgYXBwbHlpbmcgb2NhbWwgdG8gYSBuZXcgZG9t YWluLCBidXQgc29tZSBvZiBpdA0KICBpcyB0aGF0IEknbSBqdXN0IG5vdCB1 c2luZyB0aGUgcmlnaHQgaWRpb21zIGFuZCB0b29scyAoYW5kIHRoZXJlIGFy ZQ0KICBzbyBtYW55IHRvIGNob29zZSBmcm9tKS4NCg0KICBTbyBpZiBhbnli b2R5IGhhcyBnb29kIHBvaW50ZXJzLCBJJ2QgYXBwcmVjaWF0ZSBsZWFybmlu ZyBhYm91dCB0aGVtLg0KDQoNCkJpa2FsIExlbQ0K4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSADQoNCiAgSGF2ZW4ndCB0cmllZCBpdCBteXNlbGYsIGJ1 dCB0aGlzIGxvb2tzIHByb21pc2luZyDigKYNCiAgW2h0dHBzOi8vZ2l0aHVi LmNvbS9qYW5lc3RyZWV0L3NoZXhwXS4NCg0KICBBdCBsZWFzdCBpdCBoYXMg dGhlIGdyZWF0IFNlYW4gQ29ubmVyeSBpbiBpdHMgUkVBRE1FIHNvIHBvc3Np Ymx5IHdvcnRoDQogIGRlbHZpbmcgYSBiaXQuIDopDQoNCg0KSGV6ZWtpYWgg Q2FydHkNCuKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgA0KDQogIFtib3NdIHNlZW1zIGxpa2UgaXQgY2FuIGRvIGEgbG90IG9m IHdoYXQgeW91J3JlIGxvb2tpbmcgZm9yLiBJdCdzIGF0DQogIGxlYXN0IHdv cnRoIHRha2luZyBhIGxvb2ssIHRob3VnaCBpdCBtYXkgbm90IGJlIGF0IFBl cmwgbGV2ZWxzIG9mDQogIGNvbmNpc2UgZm9yIHRoaXMga2luZCBvZiB0YXNr Lg0KDQoNCltib3NdIGh0dHBzOi8vZXJyYXRpcXVlLmNoL3NvZnR3YXJlL2Jv cw0KDQoNCk1hcnRpbiBKYW1ib24NCuKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgA0KDQogIEkgdHJpZWQgdG8gc3VtbWFyaXplIG15 IHRha2Ugb24gdGhlIHN1YmplY3QgaW50byB0aGlzIGdpc3Q6DQogIFtodHRw czovL2dpc3QuZ2l0aHViLmNvbS9tamFtYm9uL2JiMDdiMjRmODlmYTYwYzk3 MzczNTMwN2NlOWM2Y2I5XQ0KDQogIEknbSBub3QgYXdhcmUgb2YgdGhlIGV4 aXN0ZW5jZSBvZiBzdWNoIHRvb2wsIGJ1dCB0aGlzIGlzIGhvdyBJIG1pZ2h0 DQogIGRlc2lnbiBpdC4gVGhpcyBzaG91bGQgYmUgcmVtaW5pc2NlbnQgb2Yg Y2FtbHA0J3MgcXVvdGF0aW9uIGFuZA0KICBhbnRpLXF1b3RhdGlvbiBzeXN0 ZW0sIHdoaWNoIGFsbG93cyBhbHRlcm5hdGluZyBiZXR3ZWVuIHR3byBzeW50 YXhlcw0KICB3aXRoaW4gYSBzb3VyY2UgZmlsZS4NCg0KDQpPbGQgQ1dODQri lZDilZDilZDilZDilZDilZDilZANCg0KICBJZiB5b3UgaGFwcGVuIHRvIG1p c3MgYSBDV04sIHlvdSBjYW4gW3NlbmQgbWUgYSBtZXNzYWdlXSBhbmQgSSds bCBtYWlsDQogIGl0IHRvIHlvdSwgb3IgZ28gdGFrZSBhIGxvb2sgYXQgW3Ro ZSBhcmNoaXZlXSBvciB0aGUgW1JTUyBmZWVkIG9mIHRoZQ0KICBhcmNoaXZl c10uDQoNCiAgSWYgeW91IGFsc28gd2lzaCB0byByZWNlaXZlIGl0IGV2ZXJ5 IHdlZWsgYnkgbWFpbCwgeW91IG1heSBzdWJzY3JpYmUNCiAgW29ubGluZV0u DQoNCiAgW0FsYW4gU2NobWl0dF0NCg0KDQpbc2VuZCBtZSBhIG1lc3NhZ2Vd IG1haWx0bzphbGFuLnNjaG1pdHRAcG9seXRlY2huaXF1ZS5vcmcNCg0KW3Ro ZSBhcmNoaXZlXSBodHRwOi8vYWxhbi5wZXRpdGVwb21tZS5uZXQvY3duLw0K DQpbUlNTIGZlZWQgb2YgdGhlIGFyY2hpdmVzXSBodHRwOi8vYWxhbi5wZXRp dGVwb21tZS5uZXQvY3duL2N3bi5yc3MNCg0KW29ubGluZV0gaHR0cDovL2xp c3RzLmlkeWxsLm9yZy9saXN0aW5mby9jYW1sLW5ld3Mtd2Vla2x5Lw0KDQpb QWxhbiBTY2htaXR0XSBodHRwOi8vYWxhbi5wZXRpdGVwb21tZS5uZXQvDQoN Cg== --=-=-= Content-Type: text/html; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable OCaml Weekly News

OCaml Weekly News

Previous Week Up Next Week

Hello

Here is the latest OCaml Weekly News, for the week of April 28 to May 05, 2= 020.

Lwt now has let* syntax

Anton Bachin announced

Lwt now has let* and let+ syntax, which can be used like this:

open Lwt.Syntax

let () =3D
  let request =3D
    let* addresses =3D "google.com"<=
/span> "80" [] in
    let google =3D Lw=
t_unix.((List.hd addresses).a=
i_addr) in

    Lwt_io.(with_connection google (=
fun (incoming, outgoing) ->
      let* () =3D=
 write outgoing "GET / HTTP/1.1\r\n"=
 in
      let* () =3D=
 write outgoing "Connection: close\r\n\r\n"=
 in
      let* response =3D read incoming in
      Lwt.return (Some response)))
  in

  let timeout =3D
    let* () =3D <=
span style=3D"color: #228b22;">Lwt_unix.sleep 5. in
    Lwt.return None
  in

  match Lwt_main.run (Lwt.pick [r=
equest; timeout]) with
  | Some =
response -> print_string response
  | None =
-> prerr_endline "Request timed out"; exit 1

This is now released in Lwt 5.3.0. Thanks to Rahul Kumar for adding let*, and @CraigFe for adding let+!

Thomas Coopman asked

Awesome this looks great.

2 quick questions:

  1. I don't see this new version documented on ocsigen yet? Is that a build= that needs to be done manually?
  2. Is ppx_lwt still recommend for some usecases like tr= y%? For what cases is one preferred over the other?

Anton Bachin replied

Good questions :slight_smile:

  1. The docs generation is blocked on an Ocsigen "internal" package w= ikidoc, which has not been updated to support 4.08. So, effectively,= let* is exactly what is preventing docs generation for the ti= me being. I'll post the docs as soon as that is fixed.
  2. ppx_lwt is probably still the recommended way, because of = better backtraces, and things like try%lwt. let* = is nice for people that don't want to use the PPX. They can still benefit f= rom a monadic syntax.

JOSE 0.3.0 - Now with 100% more encry= ption

Ulrik Strid announced

I recently released a version 0.3.0 of JOSE.

https://github.com/ul= rikstrid/reason-jose
https://ulrikstrid.git= hub.io/reason-jose

It now includes some of the JWE (JSON Web Encryption) spec. A huge thank yo= u goes out to @hannes for helping me implementing one of the gnarlier combinations of decryption that I could th= en use as a base for encryption and more alg and enc.

I also refactored the JWK (JSON Web Keys) implementation to unify and simpl= ify the representation. It is now possible to use a private key for anything a public key can do since it's a superset.

A special thanks to @anmonteiro for helping me with the design and reviewin= g my code.

Are there learning materials for OCam= l for those with no programming experience?

Aaron Christianson asked

OCaml is a language with some advanced features, but a very gentle learning= curve. It seems like it would be well-suited to teaching beginners to program (a few tricky error messages n= otwithstanding), but I haven't seen many resources targeted at teaching programming from scratch. Does anyone here k= now any?

Daniel B=C3=BCnzli replied

There is OCaml from the Very Beginnin= g written by @JohnWhitington.

Nicol=C3=A1s Ojeda B=C3=A4r also replied

An excellent (free) book is "LE LANGAGE CAML" https://caml.inria.fr/pub/distrib/books/llc.= pdf.

Pierre also replied

There's also = CS3110 from Cornell University. Here's the textbook. It's pretty great!

The recent evolution of utop, lambda-= term, zed and underneath projects

ZAN DoYe announced

Hi, dear OCaml guys! We've been keeping quiet for more than one year though= utop, lambda-term, zed and some related projects were still evolving durin= g the period of time. This is because of two reasons:

  1. The new feature had nothing to do with the fields where most OCaml develope= rs are working on:

    3D"a30d5fb6fc07=

    3D"91b88f0c4927=

    Recognizing, editing, fuzzy searching for Character Variation(mainly for an= cient CJK characters).

    Nevertheless, the new feature brought us a good side effect =E2=80=93 the l= ong-existing Issue with asian charset was resolved. UTop users will notice the= refinement naturally, so no announcement was needed.

  2. I didn't deem the first few new editions of zed 2 and lambda-term 2 sta= ble enough.

3.0 era

This time, we are entering zed 3, lambda-term 3 era. The features introduce= d since zed 2, lambda-term 2 are quite stable now and the new feature coming to us will have a bit more impact, es= pecially to vim users. So it's worthwhile to draft an announcement:

  • VI Editing Mode

    3D"ca1192404697=

    OCaml guys, hope you enjoy this.

List of notable changes:

  • zed 2:
    • wide, combined glyph(Character Variation, IPA, CJK …)
    • add wanted_column support for wide width character
  • lambda-term 2:
    • wide, combined glyph(Character Variation, IPA, CJK =E2=80=A6)
    • add horizontal scrolling support for wide width character
  • zed 3:
    • add new actions for convenience
  • lambda-term 3:
    • LTerm_read_line: add initial support for vi editing mode:<= /li>
    • motions:
      • h l 0 ^ $
      • j k gg G
      • w W e E b B ge gE
      • f F t T
      • aw iw aW iW
      • include or inner ( ), [ ], { }, < >, ' and "
      • generic quote: aq? iq? where ? could be any character
      • bracket matching: jump back and forth between matched brackets
    • delete, change, yank with motions
    • paste: p P
    • line joining: J

for a full list of the changes, please visit the homepages of each project.

Projects underneath:

  • charInfo_widt= h: Determine column width for a character
  • mew & mew_vi: Modal editing witch & Its VI in= terpreter complement. In a word, modal editing engine generators.

What's next

  • VI Editing Mode
    1. Visual mode

      3D"7cc45010710a=

    2. register support and more vi compatible
  • CJKV

    We've recorded more then 100 thousand entries about the structure of CJK ch= aracters, what is a character consists of, how are the sub-assemblies glue together etc. And as a complement to charIn= fo_width, we may release a new project called charInfo_structure ;)

Looking for "lovely, idiomatic" examp= les of Ocaml used for shell-scripting in the manner of Perl/Python (but esp= . Perl)

Chet Murthy announced

I wonder if there are people who have written nontrivial Ocaml code for she= ll-scripting, that they think exemplifies the right way to do it. I've been a Perl hacker for 25yr, and so when I re= ach for Ocaml to write stuff that should be Perl shell-scripts, I always find it a bit painful, and there's a signif= icant overhead to getting the job done. Some of that is applying ocaml to a new domain, but some of it is that I'm = just not using the right idioms and tools (and there are so many to choose from).

So if anybody has good pointers, I'd appreciate learning about them.

Bikal Lem

Haven't tried it myself, but this looks promising … https://github.com/janestreet/shexp.

At least it has the great Sean Connery in its README so possibly worth delv= ing a bit. :)

Hezekiah Carty

bos seems like it can do = a lot of what you're looking for. It's at least worth taking a look, though it may not be at Perl levels of concise for this kind= of task.

Martin Jambon

I tried to summarize my take on the subject into this gist: https://gist.github.com/mjambon/bb07b24f89fa60c973735307ce9c6cb9

I'm not aware of the existence of such tool, but this is how I might design= it. This should be reminiscent of camlp4's quotation and anti-quotation system, which allows alternating betw= een two syntaxes within a source file.

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 RSS feed of the archives<= /a>.

If you also wish to receive it every week by mail, you may subscribe online.

--=-=-=--