Attn: Development Editor, Latest OCaml Weekly News
Alan Schmitt <[email protected]> Tue, 07 Apr 2026 11:32:27 +0200
| Newsgroups | gmane.comp.lang.caml.inria |
|---|---|
| Message-ID | <[email protected]> |
--===-=-=
Content-Type: multipart/mixed; boundary="=-=-="
--=-=-=
Content-Type: multipart/alternative; boundary="==-=-="
--==-=-=
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: base64
SGVsbG8NCg0KSGVyZSBpcyB0aGUgbGF0ZXN0IE9DYW1sIFdlZWtseSBOZXdzLCBmb3IgdGhlIHdl
ZWsgb2YgTWFyY2ggMzEgdG8gQXByaWwNCjA3LCAyMDI2Lg0KDQpUYWJsZSBvZiBDb250ZW50cw0K
4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSADQoNCnJl
c3RyaWN0ZWQgMi4wLjAgbGltaXQgd2hpY2ggc3lzdGVtIG9wZXJhdGlvbnMgYW5kIHdoaWNoIHBh
cnRzIG9mIHRoZSBmaWxlc3lzdGVtIHlvdXIgcHJvZ3JhbSBjYW4gYWNjZXNzDQpKb2Igb2ZmZXI6
IGNvbXBpbGVyIGVuZ2luZWVyIGZvciBDYXRhbGEgQCBDTkFGIChzb2NpYWwgYmVuZWZpdHMgYWdl
bmN5KQ0Kb2NndGsgMC4xOiBPQ2FtbCBiaW5kaW5ncyBmb3IgR1RLIDQgKHByZXZpZXcgcmVsZWFz
ZSkNCm91dC1jaGFubmVsLXJlZGlyZWN0IDAuMSDigJQgUmVkaXJlY3QgYW5kIGNhcHR1cmUgb3V0
X2NoYW5uZWwgb3V0cHV0DQpwcHhsaWIuMC4zOC4wDQpBIFByb3Bvc2FsIGZvciBWb2x1bnRhcnkg
QUkgRGlzY2xvc3VyZSBpbiBPQ2FtbCBDb2RlDQpCbG9nOiBPQ2FtbCBkb2N1bWVudGF0aW9uIGFz
IG1hcmtkb3duDQpob3RzZWF0IFNxdWF2YSAoYSB0aW55IExhYmxHdGsyIGRlbW8pDQpvcGVudGVs
ZW1ldHJ5IDAuOTAgKGFuZCBhc3NvY2lhdGVkIGxpYnJhcmllcykNCkR1bmUgMy4yMg0KT2xkIENX
Tg0KDQoNCnJlc3RyaWN0ZWQgMi4wLjAgbGltaXQgd2hpY2ggc3lzdGVtIG9wZXJhdGlvbnMgYW5k
IHdoaWNoIHBhcnRzIG9mIHRoZSBmaWxlc3lzdGVtIHlvdXIgcHJvZ3JhbSBjYW4gYWNjZXNzDQri
lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi
lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi
lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi
lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi
lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi
lZDilZDilZDilZDilZDilZDilZDilZDilZANCg0KICBBcmNoaXZlOg0KICA8aHR0cHM6Ly9kaXNj
dXNzLm9jYW1sLm9yZy90L2Fubi1yZXN0cmljdGVkLTItMC0wLWxpbWl0LXdoaWNoLXN5c3RlbS1v
cGVyYXRpb25zLWFuZC13aGljaC1wYXJ0cy1vZi10aGUtZmlsZXN5c3RlbS15b3VyLXByb2dyYW0t
Y2FuLWFjY2Vzcy8xNzk0Mi8xPg0KDQoNCnJlbW92ZXdpbmdtYW4gYW5ub3VuY2VkDQrilIDilIDi
lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi
lIDilIANCg0KICBIZWxsbywNCg0KICBJIGFtIGhhcHB5IHRvIGFubm91bmNlIGEgbmV3IHZlcnNp
b24gb2YgW3Jlc3RyaWN0ZWRdLg0KDQogIFRoaXMgbGlicmFyeSBsZXRzIHlvdSBsaW1pdCB3aGlj
aCBzeXN0ZW0gb3BlcmF0aW9ucyBhbmQgd2hpY2ggcGFydHMgb2YNCiAgdGhlIGZpbGVzeXN0ZW0g
eW91ciBwcm9ncmFtIGNhbiBhY2Nlc3MuIENhbGwgaXQgYXMgZWFybHkgYXMgcG9zc2libGUNCiAg
aW4geW91ciBwcm9ncmFtIHNvIHRoYXQgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgcnVucyB3aXRoIHJl
ZHVjZWQNCiAgcHJpdmlsZWdlcy4gQ3VycmVudGx5LCBhY3R1YWwgZW5mb3JjZWQgcmVzdHJpY3Rp
b25zIGFyZSBpbXBsZW1lbnRlZA0KICBmb3IgdGhlc2Ugb3BlcmF0aW5nIHN5c3RlbXM6DQoNCiAg
4oCiIE9wZW5CU0QNCiAg4oCiIExpbnV4IChvbmx5IGZpbGVzeXN0ZW0gdmlldykNCg0KICBFdmVu
IG9uIG90aGVyIG9wZXJhdGluZyBzeXN0ZW1zLCB5b3UgY2FuIHN0aWxsIHVzZSBbcmVzdHJpY3Rl
ZF0gdG8NCiAgZG9jdW1lbnQgd2hpY2ggcHJpdmlsZWdlcyB5b3VyIHByb2dyYW0gbmVlZHMuIFVz
ZXJzIGNhbiB0aGVuIHRlc3QgaWYNCiAgeW91ciBwcm9ncmFtIHJlc3BlY3RzIHRoZXNlIHByb21p
c2VzIHdpdGggdG9vbHMgc3VjaCBhcyBbcGxlZGdlIG9uDQogIExpbnV4XS4gRW5qb3kgOnNsaWdo
dF9zbWlsZToNCg0KICDigKIgW29wYW1dDQogIOKAoiBbYXBpXQ0KICDigKIgW2V4YW1wbGVzXQ0K
ICDigKIgW2dpdCByZXBvXQ0KICDigKIgW0xpY2Vuc2UgQUdQTF0NCg0KICBDSEFOR0VMT0c6DQoN
CiAg4oCiIHRlc3RlZCBvbjoNCiAgICDigKMgeDg2XzY0IG9wZW5ic2QgKDE2LzE2IFRlc3RzIHBh
c3NlZCkNCiAgICDigKMgeDg2XzY0LWFscGluZS1saW51eCAoTGFuZGxvY2sgQUJJIHZlcnNpb246
IDcpICg0LzEyIFRlc3RzIHBhc3NlZDoNCiAgICAgIGZpbGVfcmVhZF91bnYsIGZpbGVfd3JpdGVf
dW52LCBmaWxlX2NyZWF0ZV91bnZfbGludXgsDQogICAgICBmaWxlX2N3cnJfdW52X2xpbnV4KQ0K
DQoNCltyZXN0cmljdGVkXSA8aHR0cHM6Ly9vcGFtLm9jYW1sLm9yZy9wYWNrYWdlcy9yZXN0cmlj
dGVkLz4NCg0KW3Jlc3RyaWN0ZWRdIDxodHRwczovL3JlbW92ZXdpbmdtYW4uY29kZWJlcmcucGFn
ZS9yZXN0cmljdGVkLz4NCg0KW3BsZWRnZSBvbiBMaW51eF0gPGh0dHBzOi8vanVzdGluZS5sb2wv
cGxlZGdlLz4NCg0KW29wYW1dIDxodHRwczovL29wYW0ub2NhbWwub3JnL3BhY2thZ2VzL3Jlc3Ry
aWN0ZWQvcmVzdHJpY3RlZC4xLjIuMC8+DQoNClthcGldIDxodHRwczovL3JlbW92ZXdpbmdtYW4u
Y29kZWJlcmcucGFnZS9yZXN0cmljdGVkLz4NCg0KW2V4YW1wbGVzXQ0KPGh0dHBzOi8vY29kZWJl
cmcub3JnL3JlbW92ZXdpbmdtYW4vcmVzdHJpY3RlZC9zcmMvYnJhbmNoL21haW4jdXNhZ2UtYW5k
LWV4YW1wbGVzPg0KDQpbZ2l0IHJlcG9dIDxodHRwczovL2NvZGViZXJnLm9yZy9yZW1vdmV3aW5n
bWFuL3Jlc3RyaWN0ZWQ+DQoNCltMaWNlbnNlIEFHUExdDQo8aHR0cHM6Ly9lbi53aWtpcGVkaWEu
b3JnL3dpa2kvR05VX0FmZmVyb19HZW5lcmFsX1B1YmxpY19MaWNlbnNlPg0KDQpBZGRlZA0K4pWM
4pWM4pWM4pWM4pWMDQoNCiAg4oCiIEFQSTogZXhlYyBwcm9taXNlcyBhbmQgYWNjZXNzZXMgb3B0
aW9uYWwNCiAg4oCiIE9wZW5CU0Q6IGV4ZWMgcHJvbWlzZXMNCg0KDQpSZW1vdmVkDQrilYzilYzi
lYzilYzilYzilYzilYwNCg0KICDigKIgU3lzdGVtT3BlcmF0aW9uLlRtcFBhdGggKGRlcHJlY2F0
ZWQgc2VlOiBgcGxlZGdlICgyKScpDQoNCg0KSm9iIG9mZmVyOiBjb21waWxlciBlbmdpbmVlciBm
b3IgQ2F0YWxhIEAgQ05BRiAoc29jaWFsIGJlbmVmaXRzIGFnZW5jeSkNCuKVkOKVkOKVkOKVkOKV
kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV
kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV
kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV
kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkA0KDQogIEFyY2hpdmU6DQogIDxodHRwczovL2Rp
c2N1c3Mub2NhbWwub3JnL3Qvam9iLW9mZmVyLWNvbXBpbGVyLWVuZ2luZWVyLWZvci1jYXRhbGEt
Y25hZi1zb2NpYWwtYmVuZWZpdHMtYWdlbmN5LzE3OTQzLzE+DQoNCg0KRGVuaXMgTWVyaWdvdXgg
YW5ub3VuY2VkDQrilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi
lIDilIDilIDilIDilIDilIDilIDilIDilIANCg0KICBbVGhlIGZvbGxvd2luZyBpcyBpbiBGcmVu
Y2ggc2luY2UgdGhpcyBpcyBhIGpvYiBvZmZlciBpbiB0aGUgRnJlbmNoDQogIHB1YmxpYyBzZWN0
b3JdDQoNCiAgKkNhbmRpZGF0ZXogaWNpIDoqDQogICA8aHR0cHM6Ly93d3cubGFzZWN1cmVjcnV0
ZS5mci9vZmZyZS1lbXBsb2kvaW5nZW5pZXVyLWV4cGVydC1lbi1jb21waWxhdGlvbi1sYW5nYWdl
cy1kZS1wcm9ncmFtbWF0aW9uLS1mLWgvbm9ybWFuZGllLzEwNjU0OTc+DQoNCiAgICAgICAgTGEg
KkNOQUYqIChDYWlzc2UgTmF0aW9uYWxlIGRlcyBBbGxvY2F0aW9ucyBGYW1pbGlhbGVzKSwNCiAg
ICAgICAgdMOqdGUgZGUgcsOpc2VhdSBkZXMgMTAxIENBRiwgcmVwcsOpc2VudGUgbGEgYnJhbmNo
ZSBGYW1pbGxlDQogICAgICAgIGRlIGxhIFPDqWN1cml0w6kgc29jaWFsZSBldCBhIHBvdXIgbWlz
c2lvbiBkZSBwaWxvdGVyIGxhDQogICAgICAgIHBvbGl0aXF1ZSBmYW1pbGlhbGUgZXQgbOKAmWFp
ZGUgYXV4IHBvcHVsYXRpb25zIGVuIHNpdHVhdGlvbg0KICAgICAgICBkZSBwcsOpY2FyaXTDqSBh
aW5zaSBxdWUgbGEgcG9saXRpcXVlIGTigJlhY3Rpb24gc29jaWFsZS4NCg0KICAgICAgICBBdSBz
ZWluIGRlIGxhIERpcmVjdGlvbiBkZXMgU3lzdMOobWVzIGTigJlJbmZvcm1hdGlvbiAoRFNJKSwN
CiAgICAgICAgY29tcHRhbnQgZW52aXJvbiA4ODAgY29sbGFib3JhdGV1cnMsIGxhICpEaXJlY3Rp
b24NCiAgICAgICAgUHJlc3RhdGlvbnMgRmx1eCBldCBEw6ljaXNpb25uZWwgKERQRkQpKiBlc3Qg
ZMOpY291cMOpZSBlbiA0DQogICAgICAgIGTDqXBhcnRlbWVudHMgZXQgdm91cyBzZXJleiByYXR0
YWNow6kgYXUgKmTDqXBhcnRlbWVudCDCqw0KICAgICAgICBQcmVzdGF0aW9ucyBJbmRpdmlkdWVs
bGVzIGV0IFLDqWbDqXJlbnRpZWxzIE3DqXRpZXJzIMK7KiBxdWkNCiAgICAgICAgZXN0IHByw6lz
ZW50IHN1ciBsZXMgc2l0ZXMgZGUgQ2FlbiwgTGUgTWFucyBldCBSZW5uZXMuDQoNCiAgICAgICAg
Q2UgZMOpcGFydGVtZW50IGEgcG91ciBtaXNzaW9uIHByaW5jaXBhbGUgZGUgY29uY2V2b2lyLA0K
ICAgICAgICBkw6l2ZWxvcHBlciBldCBtYWludGVuaXIgbGUgc3lzdMOobWUgZOKAmWluZm9ybWF0
aW9uIGxpw6kgYXV4DQogICAgICAgIHByZXN0YXRpb25zIGluZGl2aWR1ZWxsZXMgKHByZXN0YXRp
b25zIHZlcnPDqWVzIGF1eA0KICAgICAgICBhbGxvY2F0YWlyZXMgdGVsbGVzIHF1ZSBs4oCZYWxs
b2NhdGlvbiBmYW1pbGlhbGUsDQogICAgICAgIGzigJlhbGxvY2F0aW9uIGxvZ2VtZW50LCBsYSBw
cmltZSDDoCBsYSBuYWlzc2FuY2UsIGxlIFJTQSwgbGENCiAgICAgICAgcHJpbWUgZOKAmWFjdGl2
aXTDqSwg4oCmKS4gTGUgZMOpcGFydGVtZW50IGZvdXJuaXQgYWluc2kgZGVzDQogICAgICAgIG1v
dGV1cnMgZGUgcsOoZ2xlcywgYWluc2kgcXVlIGxlcyBzcMOpY2lmaWNhdGlvbnMNCiAgICAgICAg
Zm9uY3Rpb25uZWxsZXMgYXNzb2Npw6llcyBhZmluIGRlIGNhbGN1bGVyIGxlIGJvbiBkcm9pdCwg
YXUNCiAgICAgICAgYm9uIG1vbWVudCwgcG91ciBsZXMgYWxsb2NhdGlvbnMgdmVyc8OpZXMgcGFy
IGxlcyBDQUYuDQoNCiAgICAgICAgRGFucyBsZSBjYWRyZSBkZSBwcm9qZXRzIHN0cmF0w6lnaXF1
ZXMgcG91ciBsYSBicmFuY2hlDQogICAgICAgIGZhbWlsbGUsIGxhIG91IGxlIGNhbmRpZGF0IGlu
dMOpZ3JlcmEgbGUgKmNlbnRyZSB0ZWNobmlxdWUNCiAgICAgICAgQ2F0YWxhIGRlIGxhIENOQUYq
Lg0KDQogICAgICAgIENhdGFsYSBlc3QgdW4gbGFuZ2FnZSBkZSBwcm9ncmFtbWF0aW9uIGTDqWRp
w6kgZMOpdmVsb3Bww6kgcGFyDQogICAgICAgIGzigJlJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNo
ZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0IGVuDQogICAgICAgIEF1dG9tYXRpcXVlIChJbnJpYSks
IHNww6ljaWFsZW1lbnQgYWRhcHTDqSDDoCBsYQ0KICAgICAgICB0cmFuc2Zvcm1hdGlvbiBkZSBz
cMOpY2lmaWNhdGlvbnMganVyaWRpcXVlcyBldA0KICAgICAgICByw6lnbGVtZW50YWlyZXMgZW4g
Y29kZSBpbmZvcm1hdGlxdWUuIExhIENOQUYgYXlhbnQgZMOpY2lkw6kNCiAgICAgICAgZGUgc+KA
mWFwcHV5ZXIgc3VyIENhdGFsYSBwb3VyIGxlcyBwcm9qZXRzIGRlIG1vZGVybmlzYXRpb24NCiAg
ICAgICAgZGUgc29uIHN5c3TDqG1lIGRlIGNhbGN1bCBkZXMgcHJlc3RhdGlvbnMgc29jaWFsZXMs
IGVsbGUNCiAgICAgICAgc291aGFpdGUgw6lnYWxlbWVudCBpbnRlcm5hbGlzZXIgZGVzIGNvbXDD
qXRlbmNlcyBkZQ0KICAgICAgICBtYWludGVuYW5jZSBzdXIgbOKAmW91dGlsbGFnZSBkZSBDYXRh
bGEgYXUgdHJhdmVycyBkZSBjZQ0KICAgICAgICBwb3N0ZS4NCg0KICAgICAgICBMZSBjZW50cmUg
dGVjaG5pcXVlIENhdGFsYSBhIGFpbnNpIHZvY2F0aW9uIMOgIHByb2R1aXJlIGRlcw0KICAgICAg
ICBjb250cmlidXRpb25zIG9wZW4tc291cmNlIHN1ciBDYXRhbGEsIG1haXMgYXVzc2kgw6ANCiAg
ICAgICAgcsOpcG9uZHJlIGF1eCBiZXNvaW5zIGTigJlleHBlcnRpc2UgdGVjaG5pcXVlIGR1IGTD
qXBhcnRlbWVudA0KICAgICAgICDCqyBQcmVzdGF0aW9ucyBJbmRpdmlkdWVsbGVzIGV0IFLDqWbD
qXJlbnRpZWxzIE3DqXRpZXJzIMK7IHBvdXINCiAgICAgICAgc2VzIHByb2pldHMgbGnDqXMgYXV4
IG1vdGV1cnMgZGUgY2FsY3VsIGRlcyBwcmVzdGF0aW9ucw0KICAgICAgICBzb2NpYWxlcy4NCg0K
ICBMYSBwZXJzb25uZSByZWNydXTDqWUgdHJhdmFpbGxlcmEgYXZlYyBs4oCZw6lxdWlwZSBDYXRh
bGEgZGUgbOKAmUlucmlhDQogIChMb3VpcyBHZXNiZXJ0LCBWaW5jZW50IEJvdGJvbCwgUm9tYWlu
IFByaW1ldCBldCBtb2ktbcOqbWUpICEgTuKAmWjDqXNpdGV6DQogIHBhcyDDoCBtZSBjb250YWN0
ZXIgc2kgdm91cyBhdmV6IGRlcyBxdWVzdGlvbnMgc3VyIGxlIGpvYg0KICA6c2xpZ2h0X3NtaWxl
Og0KDQogIFVuIHBldGl0IGFwZXLDp3UgZGVzIGNob3NlcyBmYWl0ZXMgZXQgw6AgZmFpcmUgZW4g
Y29tcGlsYXRpb24gc3VyIENhdGFsYQ0KICA6IDxodHRwczovL2Jsb2cubWVyaWdvdXgub3ZoL2Vu
LzIwMjYvMDIvMTkvYnVpbGRpbmctcHJvcGVyLXBsLmh0bWw+DQoNCg0Kb2NndGsgMC4xOiBPQ2Ft
bCBiaW5kaW5ncyBmb3IgR1RLIDQgKHByZXZpZXcgcmVsZWFzZSkNCuKVkOKVkOKVkOKVkOKVkOKV
kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV
kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV
kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkA0KDQogIEFyY2hpdmU6DQogIDxodHRwczovL2Rp
c2N1c3Mub2NhbWwub3JnL3QvYW5uLW9jZ3RrLTAtMS1vY2FtbC1iaW5kaW5ncy1mb3ItZ3RrLTQt
cHJldmlldy1yZWxlYXNlLzE3OTQ0LzE+DQoNCg0KQ2hyaXMgQXJtc3Ryb25nIGFubm91bmNlZA0K
4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA
4pSA4pSA4pSA4pSA4pSA4pSADQoNCiAgSeKAmW0gcGxlYXNlZCB0byBhbm5vdW5jZSB0aGUgZmly
c3QgcHJldmlldyByZWxlYXNlIG9mIG9jZ3RrLCBPQ2FtbA0KICBiaW5kaW5ncyBmb3IgR1RLIDQg
KHYwLjEtcHJldmlldzApLg0KDQoNCldoYXQgaXMgaXQ/DQrilYzilYzilYzilYzilYzilYzilYzi
lYzilYzilYzilYwNCg0KICBbb2NndGtdIHByb3ZpZGVzIE9DYW1sIGJpbmRpbmdzIGZvciB0aGUg
R1RLIDQgd2lkZ2V0IHRvb2xraXQgYW5kIGl0cw0KICBhc3NvY2lhdGVkIGxpYnJhcmllcyAoR0RL
LCBHSU8sIFBhbmdvLCBHZGtQaXhidWYsIEdTSywgR3JhcGhlbmUsDQogIENhaXJvKS4gSXQgdGFy
Z2V0cyBPQ2FtbCA+PTUuMyAoZm9yIG5vdykuDQoNCiAgSXQgaXMgaW5zcGlyZWQgYnksIGFuZCBk
cmF3cyBzb21lIGNvcmUgY29tbW9uIGNvZGUgYW5kIG1hbnkgZGVzaWduDQogIGlkZWFzIGZyb20s
IGxhYmxndGszIOKAlCB0aGUgbG9uZy1zdGFuZGluZyBHVEsgMyBiaW5kaW5ncw0KICBsaWJyYXJ5
LiBIb3dldmVyLCB0aGUgQVBJcyBhcmUgbm90IGNvbXBhdGlibGU6IHdoZXJlYXMgbGFibGd0azPi
gJlzDQogIGJpbmRpbmdzIGFyZSBsYXJnZWx5IGhhbmQtd3JpdHRlbiwgb2NndGsgdXNlcyBhIGNv
ZGUgZ2VuZXJhdG9yIHRoYXQNCiAgcmVhZHMgR09iamVjdCBJbnRyb3NwZWN0aW9uIChHSVIpIGRl
ZmluaXRpb24gZmlsZXMgdG8gcHJvZHVjZSBib3RoIEMNCiAgc3R1YnMgYW5kIE9DYW1sIHdyYXBw
ZXJzLiBUaGlzIG1lYW5zIGJpbmRpbmcgY292ZXJhZ2UgdHJhY2tzIHRoZSBHSVINCiAgZGVmaW5p
dGlvbnMgcmF0aGVyIHRoYW4gaGFuZC13cml0dGVuIGVmZm9ydCwgYW5kIHRoZSBnZW5lcmF0ZWQg
Y29kZQ0KICBmb2xsb3dzIGEgY29uc2lzdGVudCBwcm9jZWR1cmFsIHN0cnVjdHVyZS4NCg0KICAq
QSBub3RlIG9uIHRvb2xpbmcqOiB0aGUgY29kZSBnZW5lcmF0b3IgaXRzZWxmIHdhcyBkZXZlbG9w
ZWQgd2l0aA0KICAgaGVhdnkgYXNzaXN0YW5jZSBmcm9tIExMTXMuIEhvd2V2ZXIsIHRoZSBvdXRw
dXQgKHRoZSBDIHN0dWJzIGFuZA0KICAgT0NhbWwgbW9kdWxlcyB0aGF0IGZvcm0gdGhlIGFjdHVh
bCBsaWJyYXJ5KSBpcyBwcm9ncmFtbWF0aWNhbGx5DQogICBnZW5lcmF0ZWQgZnJvbSB0aGUgR0lS
IGRlZmluaXRpb25zLCBub3Qgd3JpdHRlbiBieSBhbiBMTE0uDQoNCg0KW29jZ3RrXSA8aHR0cHM6
Ly9naXRodWIuY29tL2NocmlzLWFybXN0cm9uZy9vY2d0az4NCg0KDQpXaGF04oCZcyBpbXBsZW1l
bnRlZA0K4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM
4pWMDQoNCiAg4oCiIEJpbmRpbmdzIGZvciBHVEsgNCwgR0RLLCBHSU8sIFBhbmdvLCBHZGtQaXhi
dWYsIEdTSywgR3JhcGhlbmUsIGFuZA0KICAgIENhaXJvDQogIOKAoiBDbGFzc2VzLCByZWNvcmRz
LCBlbnVtZXJhdGlvbnMsIGFuZCBiaXRmaWVsZHMNCiAg4oCiIENvbnN0cnVjdG9ycywgbWV0aG9k
cywgYW5kIHByb3BlcnRpZXMNCiAg4oCiIFNpZ25hbHMgKG5vIHJldHVybiB2YWx1ZXMgb3IgcGFy
YW1ldGVycykNCiAg4oCiIEEgd29ya2luZyBleGFtcGxlOiBhIEdUSyA0IGNhbGN1bGF0b3IgYXBw
bGljYXRpb24NCg0KDQpXaGF04oCZcyBtaXNzaW5nDQrilYzilYzilYzilYzilYzilYzilYzilYzi
lYzilYzilYzilYzilYzilYwNCg0KICBUaGlzIGlzIGEgZmlyc3QgbWlsZXN0b25lLCBub3QgYSBw
cm9kdWN0aW9uLXJlYWR5IHJlbGVhc2UuIFNldmVyYWwNCiAgaW1wb3J0YW50IGZlYXR1cmVzIGFy
ZSBub3QgeWV0IHN1cHBvcnRlZDoNCg0KICDigKIgKkludGVyZmFjZXMqOiBHT2JqZWN0IGludGVy
ZmFjZXMgYXJlIG5vdCB5ZXQgc3VwcG9ydGVkLiBUaGlzIGhhcyBhDQogICAgYnJvYWRlciBpbXBh
Y3QgdGhhbiBpdCBtaWdodCBhcHBlYXI6IG5vdCBvbmx5IGFyZSBpbnRlcmZhY2UgdHlwZXMNCiAg
ICB0aGVtc2VsdmVzIGFic2VudCwgYnV0IGFueSBtZXRob2Qgb24gYSBjbGFzcyB0aGF0IHRha2Vz
IGFuIGludGVyZmFjZQ0KICAgIGFzIGEgcGFyYW1ldGVyIG9yIHJldHVybnMgYW4gaW50ZXJmYWNl
IHR5cGUgaXMgYWxzbyBzdXBwcmVzc2VkLiBUaGlzDQogICAgbWVhbnMgc29tZSBtZXRob2RzIG9u
IG90aGVyd2lzZS1zdXBwb3J0ZWQgY2xhc3NlcyB3aWxsIGJlIG1pc3NpbmcNCiAgICBmcm9tIHRo
ZSBiaW5kaW5ncy4NCiAg4oCiICpDYWxsYmFja3MqOiBGdW5jdGlvbnMgdGhhdCBhY2NlcHQgT0Nh
bWwgY2FsbGJhY2tzIGFzIGFyZ3VtZW50cw0KICAgIChiZXlvbmQgc2lnbmFscykgYXJlIG5vdCB5
ZXQgc3VwcG9ydGVkLiBUaGlzIGxpbWl0cyB1c2Ugb2YgbWFueQ0KICAgIGFzeW5jaHJvbm91cyBH
SU8gQVBJcyBhbmQgc29tZSBHVEsgcGF0dGVybnMuDQogIOKAoiAqRnJlZSBmdW5jdGlvbnM6KiBU
b3AtbGV2ZWwgZnVuY3Rpb25zIChub3QgYXR0YWNoZWQgdG8gYSBjbGFzcykgYXJlDQogICAgbm90
IHlldCBnZW5lcmF0ZWQuIFNvbWUgdXRpbGl0eSBBUElzIGFyZSB0aGVyZWZvcmUgdW5hdmFpbGFi
bGUuDQogIOKAoiAqTm9uLW9wYXF1ZSByZWNvcmQgZmllbGQgYWNjZXNzOiogRmllbGRzIG9mIG5v
bi1vcGFxdWUgR0xpYi9HREsNCiAgICByZWNvcmRzIGNhbm5vdCB5ZXQgYmUgcmVhZCBkaXJlY3Rs
eS4NCiAg4oCiICpNdWx0aS1wYXJhbWV0ZXIgc2lnbmFsczoqIE9ubHkgc2lnbmFscyB3aXRoIHpl
cm8gcGFyYW1ldGVycyBhbmQgbm8NCiAgICAgcmV0dXJuIHZhbHVlIGFyZSBzdXBwb3J0ZWQ7IHNp
Z25hbHMgd2l0aCBjb21wbGV4IHNpZ25hdHVyZXMgYXJlDQogICAgIHNpbGVudGx5IHNraXBwZWQu
DQogIOKAoiAqR0xpYiB0eXBlcyo6IG1vc3QgR0xpYiB0eXBlcyBhcmUgbm90IGJvdW5kLCB3aGlj
aCBtZWFucyB0aGF0DQogICAgIHNldmVyYWwgdXNlZnVsIEFQSXMgdGhhdCB1c2UgbGlzdHMsIGJ5
dGUgYXJyYXlzLCBHVmFyaWFudHMgKGhlYXZpbHkNCiAgICAgdXNlZCBieSBEQnVzKSBhcmUgbm90
IGF2YWlsYWJsZS4NCg0KICBUaGVzZSBnYXBzIG1lYW4geW91IGNhbiBidWlsZCBiYXNpYyBHVEsg
YXBwbGljYXRpb25zLCBidXQgZXhwZWN0IHRvDQogIGhpdCB3YWxscyB3aXRoIG1vcmUgYWR2YW5j
ZWQgd2lkZ2V0IHVzYWdlLCBhc3luY2hyb25vdXMgSS9PLCBvciBhbnkNCiAgQVBJIHRoYXQgcmVs
aWVzIGhlYXZpbHkgb24gaW50ZXJmYWNlcy4NCg0KICBUaGVyZSBpcyBhIFtST0FETUFQLm1kXSB0
aGF0IGxpc3RzIHRoZSByb3VnaCBwbGFuIHRvIGRlYWwgd2l0aCBtdWNoIG9mDQogIHRoZSBhYm92
ZS4NCg0KDQpbUk9BRE1BUC5tZF0NCjxodHRwczovL2dpdGh1Yi5jb20vY2hyaXMtYXJtc3Ryb25n
L29jZ3RrL2Jsb2IvbWFpbi9ST0FETUFQLm1kPg0KDQoNCkRvY3VtZW50YXRpb24NCuKVjOKVjOKV
jOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjA0KDQogIEFQSSByZWZlcmVuY2UgZG9jdW1l
bnRhdGlvbiBpcyBjdXJyZW50bHkgZGVmaWNpZW50LiBBY2N1cmF0ZWx5DQogIGdlbmVyYXRpbmcg
ZG9jdW1lbnRhdGlvbiBmcm9tIEdJUiBkZWZpbml0aW9ucyBpcyBhbiB1bnNvbHZlZCBwcm9ibGVt
DQogIGZvciB0aGlzIHByb2plY3QsIHNvIGZvciBub3cgdGhlIGdlbmVyYXRlZCBtb2R1bGVzIGFy
ZSBsYXJnZWx5DQogIHVuZG9jdW1lbnRlZC4gSW4gdGhlIG1lYW50aW1lLCB0aGUgR1RLIDQgZG9j
dW1lbnRhdGlvbiBpcyB0aGUgYmVzdA0KICByZWZlcmVuY2UgZm9yIHVuZGVyc3RhbmRpbmcgd2hh
dCBlYWNoIGJpbmRpbmcgY29ycmVzcG9uZHMgdG8sIGFuZCB0aGUNCiAgZXhhbXBsZXMgaW4gdGhl
IHJlcG9zaXRvcnkgaWxsdXN0cmF0ZSBwcmFjdGljYWwgdXNhZ2Ug4oCUIGluIHBhcnRpY3VsYXIN
CiAgdGhlIGNhbGN1bGF0b3IgZXhhbXBsZSwgd2hpY2ggZGVtb25zdHJhdGVzIGEgbm9uLXRyaXZp
YWwgR1RLIDQNCiAgYXBwbGljYXRpb24uDQoNCg0KU3RhYmlsaXR5DQrilYzilYzilYzilYzilYzi
lYzilYzilYzilYwNCg0KICBUaGlzIGNvZGUgaXMgdW50ZXN0ZWQgaW4gcHJvZHVjdGlvbiBlbnZp
cm9ubWVudHMuIFRoZSBnZW5lcmF0ZWQNCiAgYmluZGluZ3MgY292ZXIgYSBsYXJnZSBzdXJmYWNl
IGFyZWEsIGJ1dCB0ZXN0IGNvdmVyYWdlIGlzIG5vdCB5ZXQNCiAgY29tcHJlaGVuc2l2ZS4gSSB3
b3VsZCBjYXV0aW9uIGFnYWluc3QgdXNlIGluIGFueSBwcm9kdWN0aW9uIG9yDQogIHNhZmV0eS1z
ZW5zaXRpdmUgY29udGV4dCBhdCB0aGlzIHN0YWdlLiBDb21tZW50cyBvciBNUnMgYXJlIHdlbGNv
bWUuDQoNCiAgVGhpcyBjb2RlIGhhcyBub3QgYmVlbiB0ZXN0ZWQgb3V0c2lkZSBvZiBMaW51eCBl
bnZpcm9ubWVudHMuDQoNCg0KSW5zdGFsbGF0aW9uIGFuZCBVc2FnZQ0K4pWM4pWM4pWM4pWM4pWM
4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWMDQoNCiAg
RG93bmxvYWQgYW5kIHBpbiB0aGUgc291cmNlIGNvZGUgZm9yIG5vdyAoSeKAmW0gaW4gdGhlIHBy
b2Nlc3Mgb2YNCiAgcHJlcGFyaW5nIGFuIG9wYW0gcmVsZWFzZS4gVGhpcyBpcyB0YWtpbmcgYSBz
b21lIHRpbWUgdG8gc29ydCB0aHJvdWdoDQogIGNyb3NzLXBsYXRmb3JtIGlzc3Vlcywgc28gSeKA
mWxsIHVwZGF0ZSBoZXJlIHdpdGggYSBjb21tZW50IHdoZW4gdGhhdCBpcw0KICBhdmFpbGFibGUp
Lg0KDQogIFRoZSBiaW5kaW5ncyBoYXZlIGJlZW4gZ2VuZXJhdGVkIGFnYWluc3QgR1RLIDQuMTQu
NSAoVWJ1bnR1IDI0LjA0KS4gSWYNCiAgeW91IGhhdmUgYW4gb2xkZXIgdmVyc2lvbiwgaXQgc2hv
dWxkIHN0aWxsIGNvbXBpbGUgKGluIHRoZW9yeSksIGJ1dA0KICB5b3Ugd2lsbCByZWNlaXZlIHJ1
bnRpbWUgZXJyb3JzIG9uIEFQSXMgbm90IGF2YWlsYWJsZSBpbiB5b3VyIHZlcnNpb24uDQoNCiAg
MS4gRG93bmxvYWQgdGhlIHJlcG9zaXRvcnk6PGh0dHBzOi8vZ2l0aHViLmNvbS9jaHJpcy1hcm1z
dHJvbmcvb2NndGs+DQogICAgICh5b3UgY2FuIHVzZSB0aGUgdjAuMS1wcmV2aWV3MCB0YWcgdG8g
Z2V0IHdoYXQgSeKAmXZlIG1lbnRpb25lZCBoZXJlKQ0KICAyLiBQaW4gdGhlIGNvbmYtZ3RrNCBh
bmQgb2NndGsgcGFja2FnZXMgaW4gdGhlaXIgcmVzcGVjdGl2ZQ0KICAgICBzdWJkaXJlY3Rvcmll
cw0KICAgICAxLiBgb3BhbSBwaW4gY29uZi1ndGsnDQogICAgIDIuIGBvcGFtIHBpbiBvY2d0aycN
CiAgMy4gUnVuIGBvcGFtIGluc3RhbGwgb2NndGsnDQoNCiAgRWFjaCBsaWJyYXJ5IGlzIGV4cG9z
ZWQgYXQgdGhlIG9jYW1sZmluZCBsZXZlbCBhcyBgb2NndGsuPGxpYm5hbWU+JyAtDQogIGZvciBl
eGFtcGxlLCBhZGQgYG9jZ3RrLmd0aycgb3IgYG9jZ3RrLmdkaycgdG8geW91ciBkdW5lIGZpbGUs
IHdoaWxlDQogIGRlcGVuZGluZyBvbiBgb2NndGsnIGluIHlvdXIgYG9wYW0nIC8gYGR1bmUtcHJv
amVjdCcgZmlsZS4NCg0KICAqU291cmNlIGFuZCBpc3N1ZSB0cmFja2VyKjogPGh0dHBzOi8vZ2l0
aHViLmNvbS9jaHJpcy1hcm1zdHJvbmcvb2NndGs+DQoNCiAgRmVlZGJhY2sgYW5kIGJ1ZyByZXBv
cnRzIHdlbGNvbWUuDQoNCg0Kb3V0LWNoYW5uZWwtcmVkaXJlY3QgMC4xIOKAlCBSZWRpcmVjdCBh
bmQgY2FwdHVyZSBvdXRfY2hhbm5lbCBvdXRwdXQNCuKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV
kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV
kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV
kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV
kA0KDQogIEFyY2hpdmU6DQogIDxodHRwczovL2Rpc2N1c3Mub2NhbWwub3JnL3QvYW5uLW91dC1j
aGFubmVsLXJlZGlyZWN0LTAtMS1yZWRpcmVjdC1hbmQtY2FwdHVyZS1vdXQtY2hhbm5lbC1vdXRw
dXQvMTc5NDUvMT4NCg0KDQpIaHVnbyBhbm5vdW5jZWQNCuKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU
gOKUgOKUgOKUgOKUgOKUgOKUgOKUgA0KDQogIEnigJltIGhhcHB5IHRvIGFubm91bmNlIHRoZSBm
aXJzdCByZWxlYXNlIG9mIFtvdXQtY2hhbm5lbC1yZWRpcmVjdF0sIGENCiAgbGlicmFyeSBmb3Ig
cmVkaXJlY3RpbmcgYW5kIGNhcHR1cmluZyBvdXRwdXQgd3JpdHRlbiB0byBvdXRfY2hhbm5lbHMu
DQoNCg0KW291dC1jaGFubmVsLXJlZGlyZWN0XSA8aHR0cHM6Ly9naXRodWIuY29tL2hodWdvL291
dC1jaGFubmVsLXJlZGlyZWN0Pg0KDQpGZWF0dXJlczoNCuKVjOKVjOKVjOKVjOKVjOKVjOKVjOKV
jOKVjA0KDQogIOKAoiBDYXB0dXJlIGFueSBvdXRfY2hhbm5lbCBpbnRvIGEgc3RyaW5nICh3aXRo
IGNvbnZlbmllbmNlIHNob3J0aGFuZHMNCiAgICBmb3Igc3Rkb3V0IGFuZCBzdGRlcnIpDQogIOKA
oiBSZWRpcmVjdCBvbmUgY2hhbm5lbCBpbnRvIGFub3RoZXINCiAg4oCiIFdvcmtzIG9uIG5hdGl2
ZSAodmlhIGR1cC9kdXAyKSwgSmF2YVNjcmlwdCAoanNfb2Zfb2NhbWwpLCBhbmQNCiAgICBXZWJB
c3NlbWJseSAod2FzbV9vZl9vY2FtbCkNCiAg4oCiIEV4cGVydCBBUEkgZm9yIG1hbnVhbCByZWRp
cmVjdGlvbiBsaWZldGltZSBjb250cm9sDQoNCg0KSW5zdGFsbGF0aW9uOg0K4pWM4pWM4pWM4pWM
4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWMDQoNCiAg4pSM4pSA4pSA4pSA4pSADQogIOKUgiBv
cGFtIGluc3RhbGwgb3V0LWNoYW5uZWwtcmVkaXJlY3QNCiAg4pSU4pSA4pSA4pSA4pSADQoNCg0K
UXVpY2sgZXhhbXBsZToNCuKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKVjOKV
jA0KDQogIOKUjOKUgOKUgOKUgOKUgA0KICDilIIgbGV0IG91dHB1dCwgcmVzdWx0ID0NCiAg4pSC
ICAgT3V0X2NoYW5uZWxfcmVkaXJlY3QuY2FwdHVyZV9jaGFubmVsIHNvbWVfY2hhbm5lbCB+Zjoo
ZnVuICgpIOKGkiANCiAg4pSCICAgICBQcmludGYuZnByaW50ZiBzb21lX2NoYW5uZWwg4oCcaGVs
bG/igJ07DQogIOKUgiAgICAgNDIpDQogIOKUgiAoKiBvdXRwdXQgPSDigJxoZWxsb+KAnSwgcmVz
dWx0ID0gNDIgKikNCiAg4pSU4pSA4pSA4pSA4pSADQoNCg0KcHB4bGliLjAuMzguMA0K4pWQ4pWQ
4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQDQoNCiAgQXJjaGl2ZTogPGh0dHBzOi8v
ZGlzY3Vzcy5vY2FtbC5vcmcvdC9hbm4tcHB4bGliLTAtMzgtMC8xNzk0OC8xPg0KDQoNCk5hdGhh
biBSZWJvdXJzIGFubm91bmNlZA0K4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA
4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSADQoNCiAgVGhlIHBweGxpYiB0ZWFt
IGlzIGhhcHB5IHRvIGFubm91bmNlIHRoZSByZWxlYXNlIG9mIHBweGxpYi4wLjM4LjAuDQoNCiAg
VGhlIG1haW4gZmVhdHVyZXMgb2YgdGhpcyByZWxlYXNlIGFyZSBzdXBwb3J0IGZvciBPQ2FtbCA1
LjUgYW5kDQogIGltcHJvdmVkIHN1cHBvcnQgb2YgT0NhbWwgNS40IGFuZCA1LjMuIEl0IGFsc28g
Y29tZXMgd2l0aCBhIGZldyBidWcNCiAgZml4ZXMgYW5kIGEgY291cGxlIG5ldyBBUEkgZW50cmll
cywgeW91IGNhbiByZWFkIHRoZSBleHRlbnNpdmUgcmVsZWFzZQ0KICBub3RlcyBbaGVyZV0uDQoN
CiAgVGhpcyBpcyBvdXIgZmlyc3QgcmVsZWFzZSBzaW5jZSB3ZSBhbm5vdW5jZWQgb3VyIG5ldyBh
cHByb2FjaCB0bw0KICBzdXBwb3J0aW5nIG5ldyBjb21waWxlcnMgaW4gW3RoaXMgdGhyZWFkXS4g
QWxsIHN1cHBvcnQgZm9yIGNvbXBpbGVycw0KICB2ZXJzaW9ucyBgPj0gNS4zJyBpcyBpbXBsZW1l
bnRlZCB1c2luZyB0aGlzIHRlY2huaXF1ZSBhbmQgbmV3IGxhbmd1YWdlDQogIGZlYXR1cmVzIGFy
ZSBlbmNvZGVkIGludG8gdGhlIEFTVC4gV2UndmUgYWRkZWQgYEFzdF9idWlsZGVyJyBhbmQNCiAg
YEFzdF9wYXR0ZXJuJyBmdW5jdGlvbnMgdG8gYWxsb3cgeW91IHRvIG1hbmlwdWxhdGUgc29tZSBv
ZiB0aG9zZSwgc3VjaA0KICBhcyBsYWJlbGVkIHR1cGxlcyBvciBlZmZlY3QgcGF0dGVybnMuIFlv
dSBjYW4gc2VlIHRob3NlIGluIG91ciBBUEkNCiAgZG9jdW1lbnRhdGlvbiBbaGVyZV0gYW5kIFt0
aGVyZV0uIFdlJ3ZlIGFsc28gaWxsdXN0cmF0ZWQgaG93IHRvIHVzZQ0KICB0aGVtIGluIG91ciBb
bmV3IG1hbnVhbCBzZWN0aW9uXS4gSWYgeW91J3JlIGludGVyZXN0ZWQgaW4gcHJvZHVjaW5nIG9y
DQogIGNvbnN1bWluZyBvdGhlciBuZXcgbGFuZ3VhZ2UgZmVhdHVyZXMgdGhhdCBjYW5ub3QgYmUg
cmVwcmVzZW50ZWQgd2l0aA0KICBvdXIgY3VycmVudCBpbnRlcm5hbCBBU1QgKDUuMiksIHBsZWFz
ZSBbb3BlbiBhbiBpc3N1ZV0gc28gd2UgY2FuIGFkZA0KICB0aGUgcmVsZXZhbnQgaGVscGVycy4N
Cg0KICBHaXZlbiB0aGUgZWNvc3lzdGVtIGhhc24ndCB5ZXQgcmVjb3ZlcmVkIGZyb20gdGhlIDUu
MiBBU1QgYnVtcCBhbmQNCiAgYHBweGxpYi4wLjM2LjAnLCB3ZSdyZSBnbGFkIHRoYXQgd2UgY2Fu
IGFkZCBzdXBwb3J0IGZvciBuZXcgY29tcGlsZXJzDQogIHdpdGhvdXQgaW50cm9kdWNpbmcgZnVy
dGhlciBicmVha2FnZSBhbmQga2VlcCB0aGUgbWFpbnRlbmFuY2UgYnVyZGVuDQogIHdpdGhpbiBw
cHhsaWIncyBib3VuZHMuICBXZSd2ZSBzdGFydGVkIFtkaXNjdXNzaW9uc10gd2l0aCB0aGUgY29t
cGlsZXINCiAgdGVhbSB0byBtYWtlIHRoaXMgYXBwcm9hY2ggZXZlbiBtb3JlIHZpYWJsZSBpbiB0
aGUgZnV0dXJlIG9uIG91ciBlbmQuDQoNCiAgV2UnZCBsaWtlIHRvIHRoYW5rIEBjZWFzdGx1bmQg
d2hvJ3Mgb3VyIG9ubHkgZXh0ZXJuYWwgY29udHJpYnV0b3IgZm9yDQogIHRoaXMgcmVsZWFzZS4N
Cg0KICBJJ2QgcGVyc29uYWxseSBsaWtlIHRvIHRoYW5rIEBwYXRyaWNvZmVycmlzIGZvciBoaXMg
aGVscCBnZXR0aW5nIHRoaXMNCiAgb3V0IHRoZSBkb29yIGFzIHdlbGwgYXMgdGhlIE9DYW1sIFNv
ZnR3YXJlIEZvdW5kYXRpb24gYW5kIE9DYW1sUHJvIGZvcg0KICBmdW5kaW5nIG15IHdvcmsgb24g
cHB4bGliLg0KDQogIFRoYW5rIHlvdSBmb3IgcmVhZGluZyBhbmQgaGFwcHkgcHJlcHJvY2Vzc2lu
ZyENCg0KDQpbaGVyZV0gPGh0dHBzOi8vZ2l0aHViLmNvbS9vY2FtbC1wcHgvcHB4bGliL3JlbGVh
c2VzL3RhZy8wLjM4LjA+DQoNClt0aGlzIHRocmVhZF0NCjxodHRwczovL2Rpc2N1c3Mub2NhbWwu
b3JnL3QvYW5uLXBweGxpYi1zdXBwb3J0LWZvci1mdXR1cmUtY29tcGlsZXJzLzE3NDMwPg0KDQpb
aGVyZV0NCjxodHRwczovL29jYW1sLXBweC5naXRodWIuaW8vcHB4bGliL3BweGxpYi9QcHhsaWIv
QXN0X2J1aWxkZXIvRGVmYXVsdC9pbmRleC5odG1sI2Z1dHVyZS1hc3RzPg0KDQpbdGhlcmVdDQo8
aHR0cHM6Ly9vY2FtbC1wcHguZ2l0aHViLmlvL3BweGxpYi9wcHhsaWIvUHB4bGliL0FzdF9wYXR0
ZXJuL2luZGV4Lmh0bWwjZnV0dXJlLWFzdHM+DQoNCltuZXcgbWFudWFsIHNlY3Rpb25dDQo8aHR0
cHM6Ly9vY2FtbC1wcHguZ2l0aHViLmlvL3BweGxpYi9wcHhsaWIvY29tcGF0aWJpbGl0eS5odG1s
I2Z1dHVyZV9jb21waWxlcnM+DQoNCltvcGVuIGFuIGlzc3VlXSA8aHR0cHM6Ly9naXRodWIuY29t
L29jYW1sLXBweC9wcHhsaWIvaXNzdWVzL25ldz4NCg0KW2Rpc2N1c3Npb25zXSA8aHR0cHM6Ly9n
aXRodWIuY29tL29jYW1sL29jYW1sL2lzc3Vlcy8xNDY2OD4NCg0KDQpBIFByb3Bvc2FsIGZvciBW
b2x1bnRhcnkgQUkgRGlzY2xvc3VyZSBpbiBPQ2FtbCBDb2RlDQrilZDilZDilZDilZDilZDilZDi
lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi
lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi
lZDilZDilZDilZDilZDilZDilZDilZANCg0KICBBcmNoaXZlOg0KICA8aHR0cHM6Ly9kaXNjdXNz
Lm9jYW1sLm9yZy90L2EtcHJvcG9zYWwtZm9yLXZvbHVudGFyeS1haS1kaXNjbG9zdXJlLWluLW9j
YW1sLWNvZGUvMTc5NTAvMT4NCg0KDQpBbmlsIE1hZGhhdmFwZWRkeSBhbm5vdW5jZWQNCuKUgOKU
gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU
gOKUgOKUgOKUgOKUgOKUgOKUgA0KDQogIERlYXIgYWxsLA0KDQogIEkndmUgcHV0IHRvZ2V0aGVy
IGFuICpbb2NhbWwtYWktZGlzY2xvc3VyZV0qIHByb3Bvc2FsIHRvIGFsbG93DQogIHZvbHVudGFy
eSBkaXNjbG9zdXJlIG9mIEFJIHVzYWdlIGluIHB1Ymxpc2hlZCBPQ2FtbCBjb2RlLCB1c2luZyBv
cGFtDQogIG1ldGFkYXRhIGFuZCBbZXh0ZW5zaW9uIGF0dHJpYnV0ZXNdIGluIHNvdXJjZSBjb2Rl
Lg0KDQogIFRoZSByZXBvc2l0b3J5IGFuZCBbYmxvZyBwb3N0XSBoYXZlIG1vcmUgZGV0YWlscywg
c29tZSBwcm90b3R5cGUNCiAgdG9vbGluZyB0byBleHRyYWN0IGF0dHJpYnV0ZXMsIGFuZCBhIEZB
USwgYnV0IGluIGEgbnV0c2hlbGwgSSdtDQogIHByb3Bvc2luZyBzb21ldGhpbmcgdmVyeSBzaW1p
bGFyIHRvIGEgW1czQyBkaXNjbG9zdXJlIHByb3Bvc2FsIGZvcg0KICBIVE1MXS4NCg0KDQpbb2Nh
bWwtYWktZGlzY2xvc3VyZV0gPGh0dHBzOi8vZ2l0aHViLmNvbS9hdnNtL29jYW1sLWFpLWRpc2Ns
b3N1cmU+DQoNCltleHRlbnNpb24gYXR0cmlidXRlc10gPGh0dHBzOi8vb2NhbWwub3JnL21hbnVh
bC81LjMvYXR0cmlidXRlcy5odG1sPg0KDQpbYmxvZyBwb3N0XSA8aHR0cHM6Ly9hbmlsLnJlY29p
bC5vcmcvbm90ZXMvb3BhbS1haS1kaXNjbG9zdXJlPg0KDQpbVzNDIGRpc2Nsb3N1cmUgcHJvcG9z
YWwgZm9yIEhUTUxdDQo8aHR0cHM6Ly93d3cudzMub3JnL2NvbW11bml0eS9haS1jb250ZW50LWRp
c2Nsb3N1cmUvPg0KDQpQYWNrYWdlIERpc2Nsb3N1cmVzDQrilYzilYzilYzilYzilYzilYzilYzi
lYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYzilYwNCg0KICBBbiBvcGFtIHBhY2thZ2Ug
Y2FuIGRlY2xhcmUgaXRzIGRpc2Nsb3N1cmUgdXNpbmcgZXh0ZW5zaW9uIGZpZWxkczoNCg0KICDi
lIzilIDilIDilIDilIANCiAg4pSCIHgtYWktZGlzY2xvc3VyZTogImFpLWFzc2lzdGVkIg0KICDi
lIIgeC1haS1tb2RlbDogImNsYXVkZS1vcHVzLTQtNiINCiAg4pSCIHgtYWktcHJvdmlkZXI6ICJB
bnRocm9waWMiDQogIOKUlOKUgOKUgOKUgOKUgA0KDQogIC9Ob3RlOiBUaGlzIG1heSBqdXN0IGJl
Y29tZSBhIGxpc3Qgb2YgdmFsdWVzIGluIHRoZSBmaW5hbCBwcm9wb3NhbCwNCiAgYnV0IHlvdSBn
ZXQgdGhlIGlkZWEuLw0KDQoNCk9DYW1sIE1vZHVsZSBsZXZlbA0K4pWM4pWM4pWM4pWM4pWM4pWM
4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWM4pWMDQoNCiAgT0NhbWwgc3VwcG9ydHMg
ZXh0ZW5zaW9uIGF0dHJpYnV0ZXMsIHdoaWNoIHdlIHVzZSB2aWEgYSBmbG9hdGluZw0KICBhdHRy
aWJ1dGUgdGhhdCBhcHBsaWVzIHRvIHRoZSBlbnRpcmUgY29tcGlsYXRpb24gdW5pdDoNCg0KICDi
lIzilIDilIDilIDilIANCiAg4pSCIFtAQEBhaV9kaXNjbG9zdXJlICJhaS1nZW5lcmF0ZWQiXQ0K
ICDilIIgW0BAQGFpX21vZGVsICJjbGF1ZGUtb3B1cy00LTYiXQ0KICDilIIgW0BAQGFpX3Byb3Zp
ZGVyICJBbnRocm9waWMiXQ0KICDilIIgDQogIOKUgiBsZXQgZm9vID0gLi4uDQogIOKUgiBsZXQg
YmFyID0gLi4uDQogIOKUlOKUgOKUgOKUgOKUgA0KDQogIFRoZXNlIGNhbiBhbHNvIGJlIHNjb3Bl
ZCBtb3JlIGZpbmVseSB2aWEgZGVjbGFyYXRpb24gYXR0cmlidXRlcyB0aGF0DQogIGFwcGx5IHRv
IGEgc2luZ2xlIGJpbmRpbmc6DQoNCiAg4pSM4pSA4pSA4pSA4pSADQogIOKUgiBbQEBAYWlfZGlz
Y2xvc3VyZSAiYWktYXNzaXN0ZWQiXQ0KICDilIIgDQogIOKUgiBsZXQgaHVtYW5fd3JpdHRlbiB4
ID0gLi4uDQogIOKUgiANCiAg4pSCIGxldCBhaV9oZWxwZXIgeSA9IC4uLg0KICDilIIgW0BAYWlf
ZGlzY2xvc3VyZSAiYWktZ2VuZXJhdGVkIl0NCiAg4pSU4pSA4pSA4pSA4pSADQoNCiAgRGlzY2xv
c3VyZSBmb2xsb3dzIGEgbmVhcmVzdC1hbmNlc3RvciBpbmhlcml0YW5jZSBtb2RlbCBsaWtlIHRo
ZSBXM0MNCiAgSFRNTCBwcm9wb3NhbCwgd2hlcmVieSBhbiBleHBsaWNpdCBhbm5vdGF0aW9uIG92
ZXJyaWRlcyB0aGUgaW5oZXJpdGVkDQogIHZhbHVlLg0KDQogIEkgd3JvdGUgYSBbYmxvZyBwb3N0
IHdpdGggbW9yZSBkZXRhaWxzXSwgYXMgd2VsbCBhcyBhbiBbRkFRIGluIHRoZQ0KICBwcm9wb3Nh
bCByZXBvc2l0b3J5XSBhYm91dCBzb21lIG9mIHRoZSBpbXBsaWNhdGlvbnMuDQoNCiAgSSBjb3Vs
ZG4ndCBmaW5kIGFueSBvdGhlciBwcmlvciBhcnQgb2Ygb3RoZXIgbGFuZ3VhZ2UgZWNvc3lzdGVt
cw0KICB0cnlpbmcgYW55dGhpbmcgc2ltaWxhciwgc28gSSdkIGJlIGludGVyZXN0ZWQgaW4gaGVh
cmluZyBhYm91dCBhbnkNCiAgb3RoZXJzIHlvdSBhbGwga25vdyBhYm91dC4gSWYgdGhlcmUncyBu
byBpbnRlcmVzdCBpbiB0aGUgd2lkZXINCiAgZWNvc3lzdGVtIGluIGRvaW5nIHRoaXMsIHRoZW4g
SSdsbCBqdXN0IHVzZSBpdCBteXNlbGYsIGJ1dCBJIGZpZ3VyZWQNCiAgdGhlcmUncyBubyBoYXJt
IGluIHN0YXJ0aW5nIHRoZSBkaXNjdXNzaW9uIQ0KDQoNCltibG9nIHBvc3Qgd2l0aCBtb3JlIGRl
dGFpbHNdDQo8aHR0cHM6Ly9hbmlsLnJlY29pbC5vcmcvbm90ZXMvb3BhbS1haS1kaXNjbG9zdXJl
Pg0KDQpbRkFRIGluIHRoZSBwcm9wb3NhbCByZXBvc2l0b3J5XQ0KPGh0dHBzOi8vZ2l0aHViLmNv
bS9hdnNtL29jYW1sLWFpLWRpc2Nsb3N1cmU+DQoNCg0KQmxvZzogT0NhbWwgZG9jdW1lbnRhdGlv
biBhcyBtYXJrZG93bg0K4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ
4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ
4pWQ4pWQ4pWQ4pWQDQoNCiAgQXJjaGl2ZToNCiAgPGh0dHBzOi8vZGlzY3Vzcy5vY2FtbC5vcmcv
dC9ibG9nLW9jYW1sLWRvY3VtZW50YXRpb24tYXMtbWFya2Rvd24vMTc5NTEvMT4NCg0KDQpEYXZp
ZCBTYW5jaG8gYW5ub3VuY2VkDQrilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi
lIDilIDilIDilIDilIDilIDilIDilIDilIDilIANCg0KICBJIHB1Ymxpc2hlZCBhIGJsb2cgcG9z
dCBhYm91dCBvZG9jJ3MgbWFya2Rvd24gYmFja2VuZCBhbmQgaG93IEkgdXNlZA0KICBpdCB0byBt
YWtlIHRoZSBtZWxhbmdlLnJlIGRvY3VtZW50YXRpb24gYmV0dGVyLCBob3BlIHlvdSBsaWtlIGl0
Og0KDQogIDxodHRwczovL3NhbmNoby5kZXYvYmxvZy9vY2FtbC1kb2N1bWVudGF0aW9uLWFzLW1h
cmtkb3duPg0KDQogIFRoYW5rcyB0byBAam9ubHVkbGFtIEByZ3JpbmJlcmcgYW5kIEBBbGl6dGVy
IGZvciByZXZpZXdpbmcgdGhlIHdvcmsNCiAgdGhhdCBtYWRlIGl0IHBvc3NpYmxlLg0KDQoNCmhv
dHNlYXQgU3F1YXZhIChhIHRpbnkgTGFibEd0azIgZGVtbykNCuKVkOKVkOKVkOKVkOKVkOKVkOKV
kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV
kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkA0KDQogIEFyY2hpdmU6DQogIDxodHRw
czovL2Rpc2N1c3Mub2NhbWwub3JnL3QvYW5uLWhvdHNlYXQtc3F1YXZhLWEtdGlueS1sYWJsZ3Rr
Mi1kZW1vLzE3OTU3LzE+DQoNCg0KRGFtaWVuIEd1aWNoYXJkIGFubm91bmNlZA0K4pSA4pSA4pSA
4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA
4pSA4pSA4pSADQoNCiAgPGh0dHBzOi8vcGFzdGViaW4uY29tL053dTJhQzdBPg0KDQogIFRoZSBb
U3F1YXZhIGJvYXJkIGdhbWVdLg0KDQogIDxodHRwczovL3VzMS5kaXNjb3Vyc2UtY2RuLmNvbS9m
bGV4MDIwL3VwbG9hZHMvb2NhbWwvb3JpZ2luYWwvMlgvOC84N2MzMWQ5ZjEyN2Y5OWYxMmU5NmVj
ZmY2YzU3OWI3MTA5MjZmOTQ1LnBuZz4NCg0KICBTcXVhdmEgMS4xIGhhcyBubyB2ZWN0b3IgZ3Jh
cGhpY3MsIGhvd2V2ZXIgeW91IGNhbiBlZGl0L3Nocmluay9zdHJldGNoDQogIGAuL3NxdWF2YS5w
bmcnIGFuZCB0aGUgcHJvZ3JhbSB3aWxsIGFkYXB0IHRoZSBib2FyZCB1c2luZyB0aGUgbmV3DQog
IHBpeG1hcC4NCg0KICA8aHR0cHM6Ly91czEuZGlzY291cnNlLWNkbi5jb20vZmxleDAyMC91cGxv
YWRzL29jYW1sL29yaWdpbmFsLzJYLzYvNjZjYzQxMmU4MDRmN2QxZTgxYTZkMTFlYTVjNDY0NWYz
ZWRmYzg3MS5qcGVnPg0KDQoNCltTcXVhdmEgYm9hcmQgZ2FtZV0gPGh0dHBzOi8vYm9hcmRnYW1l
Z2Vlay5jb20vYm9hcmRnYW1lLzExMjc0NS9zcXVhdmE+DQoNCg0Kb3BlbnRlbGVtZXRyeSAwLjkw
IChhbmQgYXNzb2NpYXRlZCBsaWJyYXJpZXMpDQrilZDilZDilZDilZDilZDilZDilZDilZDilZDi
lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi
lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZANCg0KICBB
cmNoaXZlOg0KICA8aHR0cHM6Ly9kaXNjdXNzLm9jYW1sLm9yZy90L2Fubi1vcGVudGVsZW1ldHJ5
LTAtOTAtYW5kLWFzc29jaWF0ZWQtbGlicmFyaWVzLzE3OTU4LzE+DQoNCg0KU2ltb24gQ3J1YW5l
cyBhbm5vdW5jZWQNCuKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU
gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgA0KDQogIEhlbGxvLA0KDQogIEknbSB0aHJpbGxlZCB0
byBhbm5vdW5jZSBbb3BlbnRlbGVtZXRyeSAwLjkwXSAoYXMgd2VsbCBhcw0KICBgb3BlbnRlbGVt
ZXRyeS1jbGllbnQnLCBgb3BlbnRlbGVtZXRyeS1jbGllbnQtY29odHRwLWx3dCcsIGV0Yy4pLg0K
DQogIE9wZW50ZWxlbWV0cnkgaXMgYW4gaW1wbGVtZW50YXRpb24gb2YgPGh0dHBzOi8vb3BlbnRl
bGVtZXRyeS5pby8+IGZvcg0KICBPQ2FtbDsgaXQgY292ZXJzIGJvdGggdGhlIGNvcmUgX2NsaWVu
dCBBUElfIChmb3IgaW5zdHJ1bWVudGF0aW9uIG9mDQogIGxpYnJhcmllcywgZXRjLikgYW5kIHRo
ZSBmdWxsIFNESyB3aXRoIHZhcmlvdXMgX2V4cG9ydGVyc18uIEl0IGlzDQogIGNvbXBhdGlibGUg
d2l0aCBbVHJhY2VdLg0KDQogIFRoaXMgcmVsZWFzZSBpcyB0aGUgcmVzdWx0IG9mIG1vbnRocyBv
ZiB3b3JrIGFuZCBpcyBob3BlZnVsbHkgb25lIG9mDQogIHRoZSBsYXN0IGJlZm9yZSAxLjAuIFRo
ZSBbY2hhbmdlbG9nXSBpcyBwcmV0dHkgYmlnLCBJIHJld29ya2VkIGEgbG90DQogIG9mIHRoaW5n
czsgYW1vbmcgb3RoZXJzOg0KICDigKIgbW92ZSB0byBvY2FtbC1wcm90b2MvcGJydCA0LjAgKHdp
dGggbXV0YWJsZSBmaWVsZHMgYW5kIGEgZGlmZmVyZW50DQogICAgY29kZWdlbiBmb3IgcHJvdG9i
dWZzKQ0KICDigKIgdGhlIEFQSSBpcyBjbG9zZXIgdG8gZ3VpZGVsaW5lcyBmcm9tIDxodHRwczov
L29wZW50ZWxlbWV0cnkuaW8+IChub3QNCiAgICBmdWxseSB0aGVyZSB5ZXQgYnV0IGJldHRlcikN
CiAg4oCiIG1vZHVsYXJpdHkgb2YgdGhlIGludGVybmFsIHByb2Nlc3Npbmcgb2Ygc2lnbmFscyBp
cyBtdWNoIGltcHJvdmVkLA0KICAgIHdpdGggYmV0dGVyIGNvZGUgcmV1c2UsIHBsdWdnYWJsZSB+
ZXZlcnl0aGluZywgYmV0dGVyDQogICAgcXVldWVpbmcvYmF0Y2hpbmcsIEhUVFAgcmV0cmllcw0K
ICDigKIgc3VwcG9ydCBmb3IgZXhwb3J0aW5nIGFzIEpTT04gaW5zdGVhZCBvZiBwcm90b2J1Zg0K
ICDigKIgc3VwcG9ydCBmb3IgdHJhY2UgMC4xMSwgd2hpY2ggYWxsb3dzIGBvcGVudGVsZW1ldHJ5
LnRyYWNlJyB0byBlc2NoZXcNCiAgICBhbGwgaXRzIGdsb2JhbCBzdGF0ZSBleGNlcHQgZm9yIHRo
ZSBnbG9iYWwgT1RFTCBleHBvcnRlcg0KICDigKIgYmV0dGVyIGxpZmVjeWNsZSBhbmQgY2xlYW51
cA0KDQogIEFQSSBkb2N1bWVudGF0aW9uIGNhbiBiZSBmb3VuZCBbaGVyZV0uIEFzIGFsd2F5cywg
ZmVlZGJhY2ssIGJ1Zw0KICByZXBvcnRzLCBldGMgYXJlIHZlcnkgd2VsY29tZS4NCg0KDQpbb3Bl
bnRlbGVtZXRyeSAwLjkwXQ0KPGh0dHBzOi8vZ2l0aHViLmNvbS9vY2FtbC10cmFjaW5nL29jYW1s
LW9wZW50ZWxlbWV0cnkvcmVsZWFzZXMvdGFnL3YwLjkwPg0KDQpbVHJhY2VdIDxodHRwczovL2dp
dGh1Yi5jb20vb2NhbWwtdHJhY2luZy9vY2FtbC10cmFjZS8+DQoNCltjaGFuZ2Vsb2ddDQo8aHR0
cHM6Ly9naXRodWIuY29tL29jYW1sLXRyYWNpbmcvb2NhbWwtb3BlbnRlbGVtZXRyeS9ibG9iL21h
aW4vQ0hBTkdFUy5tZCMwOTA+DQoNCltoZXJlXSA8aHR0cHM6Ly9vY2FtbC10cmFjaW5nLmdpdGh1
Yi5pby9vY2FtbC1vcGVudGVsZW1ldHJ5Lz4NCg0KDQpEdW5lIDMuMjINCuKVkOKVkOKVkOKVkOKV
kOKVkOKVkOKVkOKVkA0KDQogIEFyY2hpdmU6IDxodHRwczovL2Rpc2N1c3Mub2NhbWwub3JnL3Qv
YW5uLWR1bmUtMy0yMi8xNzkxMi8yPg0KDQoNCkNvbnRpbnVpbmcgdGhpcyB0aHJlYWQsIFNob24g
YW5ub3VuY2VkDQrilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi
lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi
lIDilIDilIDilIANCg0KICBUaGUgRHVuZSB0ZWFtIGlzIHBsZWFzZWQgdG8gYW5ub3VuY2UgW3Ro
ZSByZWxlYXNlIG9mIGR1bmUgMy4yMi4xXS4NCg0KICBJZiB5b3UgZW5jb3VudGVyIGEgcHJvYmxl
bSB3aXRoIHRoaXMgcmVsZWFzZSwgcGxlYXNlIHJlcG9ydCBpdCBpbiBbb3VyDQogIGlzc3VlIHRy
YWNrZXJdLg0KDQoNClt0aGUgcmVsZWFzZSBvZiBkdW5lIDMuMjIuMV0NCjxodHRwczovL2dpdGh1
Yi5jb20vb2NhbWwvZHVuZS9yZWxlYXNlcy90YWcvMy4yMi4xPg0KDQpbb3VyIGlzc3VlIHRyYWNr
ZXJdIDxodHRwczovL2dpdGh1Yi5jb20vb2NhbWwvZHVuZS9pc3N1ZXM+DQoNCkZpeGVkDQrilYzi
lYzilYzilYzilYwNCg0KICDigKIgUmVzdG9yZSBjb21wYXRpYmlsaXR5IHdpdGggV2luZG93cyA3
ICgjMTM5MDUsIEBub2piKQ0KDQogIOKAoiBgZHVuZSB0ZXN0JyBub3cgcnVucyB0ZXN0cyBpbiB0
aGUgZGVmYXVsdCBjb250ZXh0IG9ubHkuIFdoZW4gdGhlcmUNCiAgICBpcyBhIHNpbmdsZSBjb250
ZXh0LCBpdCBpcyB0cmVhdGVkIGFzIHRoZSBkZWZhdWx0LiBUaGlzIGZpeGVzIGENCiAgICBjcmFz
aCB3aGVuIHRoZSB3b3Jrc3BhY2UgaGFzIG5vIGNvbnRleHQgbmFtZWQgImRlZmF1bHQiLiAoIzEz
OTMwLA0KICAgIGZpeGVzICMxMzkwNCwgQEFsaXp0ZXIpDQoNCiAg4oCiIEZpeCBgZHVuZSB0cmFj
ZSBjYXQgLS1jaHJvbWUtdHJhY2UnIHRvIGFkaGVyZSB0byB0aGUgQ2hyb21lIFRyYWNlDQogICAg
RXZlbnQgRm9ybWF0IGJ5IHByb3ZpZGluZyB0aW1lc3RhbXBzIGFuZCBkdXJhdGlvbnMgYXQgbWlj
cm9zZWNvbmQNCiAgICBncmFudWxhcml0eSAoIzEzOTExLCBmaXhlcyAjMTM5MDYsIEBBbGl6dGVy
KQ0KDQoNCk9sZCBDV04NCuKVkOKVkOKVkOKVkOKVkOKVkOKVkA0KDQogIElmIHlvdSBoYXBwZW4g
dG8gbWlzcyBhIENXTiwgeW91IGNhbiBbc2VuZCBtZSBhIG1lc3NhZ2VdIGFuZCBJJ2xsIG1haWwN
CiAgaXQgdG8geW91LCBvciBnbyB0YWtlIGEgbG9vayBhdCBbdGhlIGFyY2hpdmVdIG9yIHRoZSBb
UlNTIGZlZWQgb2YgdGhlDQogIGFyY2hpdmVzXS4NCg0KICBJZiB5b3UgYWxzbyB3aXNoIHRvIHJl
Y2VpdmUgaXQgZXZlcnkgd2VlayBieSBtYWlsLCB5b3UgbWF5IHN1YnNjcmliZQ0KICB0byB0aGUg
W2NhbWwtbGlzdF0uDQoNCiAgW0FsYW4gU2NobWl0dF0NCg0KDQpbc2VuZCBtZSBhIG1lc3NhZ2Vd
IDxtYWlsdG86YWxhbi5zY2htaXR0QHBvbHl0ZWNobmlxdWUub3JnPg0KDQpbdGhlIGFyY2hpdmVd
IDxodHRwczovL2FsYW4ucGV0aXRlcG9tbWUubmV0L2N3bi8+DQoNCltSU1MgZmVlZCBvZiB0aGUg
YXJjaGl2ZXNdIDxodHRwczovL2FsYW4ucGV0aXRlcG9tbWUubmV0L2N3bi9jd24ucnNzPg0KDQpb
Y2FtbC1saXN0XSA8aHR0cHM6Ly9zeW1wYS5pbnJpYS5mci9zeW1wYS9pbmZvL2NhbWwtbGlzdD4N
Cg0KW0FsYW4gU2NobWl0dF0gPGh0dHBzOi8vYWxhbi5wZXRpdGVwb21tZS5uZXQvPg0KDQo=
--==-=-=
Content-Type: text/html; charset=utf-8
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable
<?xml version=3D"1.0" encoding=3D"utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns=3D"http://www.w3.org/1999/xhtml" lang=3D"en" xml:lang=3D"en">
<head>
<!-- 2026-04-07 Tue 11:29 -->
<meta http-equiv=3D"Content-Type" content=3D"text/html;charset=3Dutf-8" />
<meta name=3D"viewport" content=3D"width=3Ddevice-width, initial-scale=3D1"=
/>
<title>OCaml Weekly News</title>
<meta name=3D"generator" content=3D"Org Mode" />
<style type=3D"text/css">
#content { max-width: 60em; margin: auto; }
.title { text-align: center;
margin-bottom: .2em; }
.subtitle { text-align: center;
font-size: medium;
font-weight: bold;
margin-top:0; }
.todo { font-family: monospace; color: red; }
.done { font-family: monospace; color: green; }
.priority { font-family: monospace; color: orange; }
.tag { background-color: #eee; font-family: monospace;
padding: 2px; font-size: 80%; font-weight: normal; }
.timestamp { color: #bebebe; }
.timestamp-kwd { color: #5f9ea0; }
.org-right { margin-left: auto; margin-right: 0px; text-align: right; }
.org-left { margin-left: 0px; margin-right: auto; text-align: left; }
.org-center { margin-left: auto; margin-right: auto; text-align: center; }
.underline { text-decoration: underline; }
#postamble p, #preamble p { font-size: 90%; margin: .2em; }
p.verse { margin-left: 3%; }
pre {
border: 1px solid #e6e6e6;
border-radius: 3px;
background-color: #f2f2f2;
padding: 8pt;
font-family: monospace;
overflow: auto;
margin: 1.2em;
}
pre.src {
position: relative;
overflow: auto;
}
pre.src:before {
display: none;
position: absolute;
top: -8px;
right: 12px;
padding: 3px;
color: #555;
background-color: #f2f2f299;
}
pre.src:hover:before { display: inline; margin-top: 14px;}
/* Languages per Org manual */
pre.src-asymptote:before { content: 'Asymptote'; }
pre.src-awk:before { content: 'Awk'; }
pre.src-authinfo::before { content: 'Authinfo'; }
pre.src-c:before { content: 'C'; }
pre.src-C:before { content: 'C'; }
/* pre.src-C++ doesn't work in CSS */
pre.src-clojure:before { content: 'Clojure'; }
pre.src-css:before { content: 'CSS'; }
pre.src-D:before { content: 'D'; }
pre.src-ditaa:before { content: 'ditaa'; }
pre.src-dot:before { content: 'Graphviz'; }
pre.src-calc:before { content: 'Emacs Calc'; }
pre.src-emacs-lisp:before { content: 'Emacs Lisp'; }
pre.src-fortran:before { content: 'Fortran'; }
pre.src-gnuplot:before { content: 'gnuplot'; }
pre.src-haskell:before { content: 'Haskell'; }
pre.src-hledger:before { content: 'hledger'; }
pre.src-java:before { content: 'Java'; }
pre.src-js:before { content: 'JavaScript'; }
pre.src-latex:before { content: 'LaTeX'; }
pre.src-ledger:before { content: 'Ledger'; }
pre.src-lisp:before { content: 'Lisp'; }
pre.src-lilypond:before { content: 'Lilypond'; }
pre.src-lua:before { content: 'Lua'; }
pre.src-matlab:before { content: 'MATLAB'; }
pre.src-mscgen:before { content: 'Mscgen'; }
pre.src-ocaml:before { content: 'Objective Caml'; }
pre.src-octave:before { content: 'Octave'; }
pre.src-org:before { content: 'Org mode'; }
pre.src-oz:before { content: 'OZ'; }
pre.src-plantuml:before { content: 'Plantuml'; }
pre.src-processing:before { content: 'Processing.js'; }
pre.src-python:before { content: 'Python'; }
pre.src-R:before { content: 'R'; }
pre.src-ruby:before { content: 'Ruby'; }
pre.src-sass:before { content: 'Sass'; }
pre.src-scheme:before { content: 'Scheme'; }
pre.src-screen:before { content: 'Gnu Screen'; }
pre.src-sed:before { content: 'Sed'; }
pre.src-sh:before { content: 'shell'; }
pre.src-sql:before { content: 'SQL'; }
pre.src-sqlite:before { content: 'SQLite'; }
/* additional languages in org.el's org-babel-load-languages alist */
pre.src-forth:before { content: 'Forth'; }
pre.src-io:before { content: 'IO'; }
pre.src-J:before { content: 'J'; }
pre.src-makefile:before { content: 'Makefile'; }
pre.src-maxima:before { content: 'Maxima'; }
pre.src-perl:before { content: 'Perl'; }
pre.src-picolisp:before { content: 'Pico Lisp'; }
pre.src-scala:before { content: 'Scala'; }
pre.src-shell:before { content: 'Shell Script'; }
pre.src-ebnf2ps:before { content: 'ebfn2ps'; }
/* additional language identifiers per "defun org-babel-execute"
in ob-*.el */
pre.src-cpp:before { content: 'C++'; }
pre.src-abc:before { content: 'ABC'; }
pre.src-coq:before { content: 'Coq'; }
pre.src-groovy:before { content: 'Groovy'; }
/* additional language identifiers from org-babel-shell-names in
ob-shell.el: ob-shell is the only babel language using a lambda to put
the execution function name together. */
pre.src-bash:before { content: 'bash'; }
pre.src-csh:before { content: 'csh'; }
pre.src-ash:before { content: 'ash'; }
pre.src-dash:before { content: 'dash'; }
pre.src-ksh:before { content: 'ksh'; }
pre.src-mksh:before { content: 'mksh'; }
pre.src-posh:before { content: 'posh'; }
/* Additional Emacs modes also supported by the LaTeX listings package */
pre.src-ada:before { content: 'Ada'; }
pre.src-asm:before { content: 'Assembler'; }
pre.src-caml:before { content: 'Caml'; }
pre.src-delphi:before { content: 'Delphi'; }
pre.src-html:before { content: 'HTML'; }
pre.src-idl:before { content: 'IDL'; }
pre.src-mercury:before { content: 'Mercury'; }
pre.src-metapost:before { content: 'MetaPost'; }
pre.src-modula-2:before { content: 'Modula-2'; }
pre.src-pascal:before { content: 'Pascal'; }
pre.src-ps:before { content: 'PostScript'; }
pre.src-prolog:before { content: 'Prolog'; }
pre.src-simula:before { content: 'Simula'; }
pre.src-tcl:before { content: 'tcl'; }
pre.src-tex:before { content: 'TeX'; }
pre.src-plain-tex:before { content: 'Plain TeX'; }
pre.src-verilog:before { content: 'Verilog'; }
pre.src-vhdl:before { content: 'VHDL'; }
pre.src-xml:before { content: 'XML'; }
pre.src-nxml:before { content: 'XML'; }
/* add a generic configuration mode; LaTeX export needs an additional
(add-to-list 'org-latex-listings-langs '(conf " ")) in .emacs */
pre.src-conf:before { content: 'Configuration File'; }
table { border-collapse:collapse; }
caption.t-above { caption-side: top; }
caption.t-bottom { caption-side: bottom; }
td, th { vertical-align:top; }
th.org-right { text-align: center; }
th.org-left { text-align: center; }
th.org-center { text-align: center; }
td.org-right { text-align: right; }
td.org-left { text-align: left; }
td.org-center { text-align: center; }
dt { font-weight: bold; }
.footpara { display: inline; }
.footdef { margin-bottom: 1em; }
.figure { padding: 1em; }
.figure p { text-align: center; }
.equation-container {
display: table;
text-align: center;
width: 100%;
}
.equation {
vertical-align: middle;
}
.equation-label {
display: table-cell;
text-align: right;
vertical-align: middle;
}
.inlinetask {
padding: 10px;
border: 2px solid gray;
margin: 10px;
background: #ffffcc;
}
#org-div-home-and-up
{ text-align: right; font-size: 70%; white-space: nowrap; }
textarea { overflow-x: auto; }
.linenr { font-size: smaller }
.code-highlighted { background-color: #ffff00; }
.org-info-js_info-navigation { border-style: none; }
#org-info-js_console-label
{ font-size: 10px; font-weight: bold; white-space: nowrap; }
.org-info-js_search-highlight
{ background-color: #ffff00; color: #000000; font-weight: bold; }
.org-svg { }
</style>
<style type=3D"text/css">#table-of-contents h2 { display: none } .title { d=
isplay: none } .authorname { text-align: right }</style>
<style type=3D"text/css">.outline-2 {border-top: 1px solid black;}</style>
</head>
<body>
<div id=3D"content" class=3D"content">
<h1 class=3D"title">OCaml Weekly News</h1>
<p>
<a href=3D"https://alan.petitepomme.net/cwn/2026.03.31.html">Previous Week<=
/a> <a href=3D"https://alan.petitepomme.net/cwn/index.html">Up</a> <a href=
=3D"https://alan.petitepomme.net/cwn/2026.04.14.html">Next Week</a>
</p>
<p>
Hello
</p>
<p>
Here is the latest OCaml Weekly News, for the week of March 31 to April 07,=
2026.
</p>
<div id=3D"table-of-contents" role=3D"doc-toc">
<h2>Table of Contents</h2>
<div id=3D"text-table-of-contents" role=3D"doc-toc">
<ul>
<li><a href=3D"#1">restricted 2.0.0 limit which system operations and which=
parts of the filesystem your program can access</a></li>
<li><a href=3D"#2">Job offer: compiler engineer for Catala @ CNAF (social b=
enefits agency)</a></li>
<li><a href=3D"#3">ocgtk 0.1: OCaml bindings for GTK 4 (preview release)</a=
></li>
<li><a href=3D"#4">out-channel-redirect 0.1 =E2=80=94 Redirect and capture =
out_channel output</a></li>
<li><a href=3D"#5">ppxlib.0.38.0</a></li>
<li><a href=3D"#6">A Proposal for Voluntary AI Disclosure in OCaml Code</a>=
</li>
<li><a href=3D"#7">Blog: OCaml documentation as markdown</a></li>
<li><a href=3D"#8">hotseat Squava (a tiny LablGtk2 demo)</a></li>
<li><a href=3D"#9">opentelemetry 0.90 (and associated libraries)</a></li>
<li><a href=3D"#10">Dune 3.22</a></li>
<li><a href=3D"#org9fcb4b9">Old CWN</a></li>
</ul>
</div>
</div>
<div id=3D"outline-container-1" class=3D"outline-2">
<h2 id=3D"1">restricted 2.0.0 limit which system operations and which parts=
of the filesystem your program can access</h2>
<div class=3D"outline-text-2" id=3D"text-1">
<p>
Archive: <a href=3D"https://discuss.ocaml.org/t/ann-restricted-2-0-0-limit-=
which-system-operations-and-which-parts-of-the-filesystem-your-program-can-=
access/17942/1">https://discuss.ocaml.org/t/ann-restricted-2-0-0-limit-whic=
h-system-operations-and-which-parts-of-the-filesystem-your-program-can-acce=
ss/17942/1</a>
</p>
</div>
<div id=3D"outline-container-org129b521" class=3D"outline-3">
<h3 id=3D"org129b521">removewingman announced</h3>
<div class=3D"outline-text-3" id=3D"text-org129b521">
<p>
Hello,
</p>
<p>
I am happy to announce a new version of <a href=3D"https://opam.ocaml.org/p=
ackages/restricted/">restricted</a>.
</p>
<p>
This library lets you limit which system operations and which parts of the =
filesystem your program can access. Call it as early as possible in your pr=
ogram so that the rest of the code runs with reduced privileges. Currently,=
actual enforced restrictions are implemented for these operating systems:
</p>
<ul class=3D"org-ul">
<li>OpenBSD</li>
<li>Linux (only filesystem view)</li>
</ul>
<p>
Even on other operating systems, you can still use <a href=3D"https://remov=
ewingman.codeberg.page/restricted/">restricted</a> to document which privil=
eges your program needs. Users can then test if your program respects these=
promises with tools such as <a href=3D"https://justine.lol/pledge/">pledge=
on Linux</a>. Enjoy :slight_smile:
</p>
<ul class=3D"org-ul">
<li><a href=3D"https://opam.ocaml.org/packages/restricted/restricted.1.2.0/=
">opam</a></li>
<li><a href=3D"https://removewingman.codeberg.page/restricted/">api</a></li>
<li><a href=3D"https://codeberg.org/removewingman/restricted/src/branch/mai=
n#usage-and-examples">examples</a></li>
<li><a href=3D"https://codeberg.org/removewingman/restricted">git repo</a><=
/li>
<li><a href=3D"https://en.wikipedia.org/wiki/GNU_Affero_General_Public_Lice=
nse">License AGPL</a></li>
</ul>
<p>
CHANGELOG:
</p>
<ul class=3D"org-ul">
<li>tested on:
<ul class=3D"org-ul">
<li>x86_64 openbsd (16/16 Tests passed)</li>
<li>x86_64-alpine-linux (Landlock ABI version: 7) (4/12 Tests passed: file_=
read_unv, file_write_unv, file_create_unv_linux, file_cwrr_unv_linux)</li>
</ul></li>
</ul>
</div>
<div id=3D"outline-container-orgcf867d1" class=3D"outline-4">
<h4 id=3D"orgcf867d1">Added</h4>
<div class=3D"outline-text-4" id=3D"text-orgcf867d1">
<ul class=3D"org-ul">
<li>API: exec promises and accesses optional</li>
<li>OpenBSD: exec promises</li>
</ul>
</div>
</div>
<div id=3D"outline-container-org2a8211e" class=3D"outline-4">
<h4 id=3D"org2a8211e">Removed</h4>
<div class=3D"outline-text-4" id=3D"text-org2a8211e">
<ul class=3D"org-ul">
<li>SystemOperation.TmpPath (deprecated see: <code>pledge (2)</code>)</li>
</ul>
</div>
</div>
</div>
</div>
<div id=3D"outline-container-2" class=3D"outline-2">
<h2 id=3D"2">Job offer: compiler engineer for Catala @ CNAF (social benefit=
s agency)</h2>
<div class=3D"outline-text-2" id=3D"text-2">
<p>
Archive: <a href=3D"https://discuss.ocaml.org/t/job-offer-compiler-engineer=
-for-catala-cnaf-social-benefits-agency/17943/1">https://discuss.ocaml.org/=
t/job-offer-compiler-engineer-for-catala-cnaf-social-benefits-agency/17943/=
1</a>
</p>
</div>
<div id=3D"outline-container-org15dd41e" class=3D"outline-3">
<h3 id=3D"org15dd41e">Denis Merigoux announced</h3>
<div class=3D"outline-text-3" id=3D"text-org15dd41e">
<p>
[The following is in French since this is a job offer in the French public =
sector]
</p>
<p>
<b>Candidatez ici :</b> <a href=3D"https://www.lasecurecrute.fr/offre-emplo=
i/ingenieur-expert-en-compilation-langages-de-programmation--f-h/normandie/=
1065497">https://www.lasecurecrute.fr/offre-emploi/ingenieur-expert-en-comp=
ilation-langages-de-programmation--f-h/normandie/1065497</a>
</p>
<blockquote>
<p>
La <b>CNAF</b> (Caisse Nationale des Allocations Familiales), t=C3=AAte de =
r=C3=A9seau des 101 CAF, repr=C3=A9sente la branche Famille de la S=C3=A9cu=
rit=C3=A9 sociale et a pour mission de piloter la politique familiale et l=
=E2=80=99aide aux populations en situation de pr=C3=A9carit=C3=A9 ainsi que=
la politique d=E2=80=99action sociale.
</p>
<p>
Au sein de la Direction des Syst=C3=A8mes d=E2=80=99Information (DSI), comp=
tant environ 880 collaborateurs, la <b>Direction Prestations Flux et D=C3=
=A9cisionnel (DPFD)</b> est d=C3=A9coup=C3=A9e en 4 d=C3=A9partements et vo=
us serez rattach=C3=A9 au <b>d=C3=A9partement =C2=AB Prestations Individuel=
les et R=C3=A9f=C3=A9rentiels M=C3=A9tiers =C2=BB</b> qui est pr=C3=A9sent =
sur les sites de Caen, Le Mans et Rennes.
</p>
<p>
Ce d=C3=A9partement a pour mission principale de concevoir, d=C3=A9velopper=
et maintenir le syst=C3=A8me d=E2=80=99information li=C3=A9 aux prestation=
s individuelles (prestations vers=C3=A9es aux allocataires telles que l=E2=
=80=99allocation familiale, l=E2=80=99allocation logement, la prime =C3=A0 =
la naissance, le RSA, la prime d=E2=80=99activit=C3=A9, =E2=80=A6). Le d=C3=
=A9partement fournit ainsi des moteurs de r=C3=A8gles, ainsi que les sp=C3=
=A9cifications fonctionnelles associ=C3=A9es afin de calculer le bon droit,=
au bon moment, pour les allocations vers=C3=A9es par les CAF.
</p>
<p>
Dans le cadre de projets strat=C3=A9giques pour la branche famille, la ou l=
e candidat int=C3=A9grera le <b>centre technique Catala de la CNAF</b>.
</p>
<p>
Catala est un langage de programmation d=C3=A9di=C3=A9 d=C3=A9velopp=C3=A9 =
par l=E2=80=99Institut National de Recherche en Informatique et en Automati=
que (Inria), sp=C3=A9cialement adapt=C3=A9 =C3=A0 la transformation de sp=
=C3=A9cifications juridiques et r=C3=A9glementaires en code informatique. L=
a CNAF ayant d=C3=A9cid=C3=A9 de s=E2=80=99appuyer sur Catala pour les proj=
ets de modernisation de son syst=C3=A8me de calcul des prestations sociales=
, elle souhaite =C3=A9galement internaliser des comp=C3=A9tences de mainten=
ance sur l=E2=80=99outillage de Catala au travers de ce poste.
</p>
<p>
Le centre technique Catala a ainsi vocation =C3=A0 produire des contributio=
ns open-source sur Catala, mais aussi =C3=A0 r=C3=A9pondre aux besoins d=E2=
=80=99expertise technique du d=C3=A9partement =C2=AB Prestations Individuel=
les et R=C3=A9f=C3=A9rentiels M=C3=A9tiers =C2=BB pour ses projets li=C3=A9=
s aux moteurs de calcul des prestations sociales.
</p>
</blockquote>
<p>
La personne recrut=C3=A9e travaillera avec l=E2=80=99=C3=A9quipe Catala de =
l=E2=80=99Inria (Louis Gesbert, Vincent Botbol, Romain Primet et moi-m=C3=
=AAme) ! N=E2=80=99h=C3=A9sitez pas =C3=A0 me contacter si vous avez des qu=
estions sur le job :slight_smile:
</p>
<p>
Un petit aper=C3=A7u des choses faites et =C3=A0 faire en compilation sur C=
atala : <a href=3D"https://blog.merigoux.ovh/en/2026/02/19/building-proper-=
pl.html">https://blog.merigoux.ovh/en/2026/02/19/building-proper-pl.html</a>
</p>
</div>
</div>
</div>
<div id=3D"outline-container-3" class=3D"outline-2">
<h2 id=3D"3">ocgtk 0.1: OCaml bindings for GTK 4 (preview release)</h2>
<div class=3D"outline-text-2" id=3D"text-3">
<p>
Archive: <a href=3D"https://discuss.ocaml.org/t/ann-ocgtk-0-1-ocaml-binding=
s-for-gtk-4-preview-release/17944/1">https://discuss.ocaml.org/t/ann-ocgtk-=
0-1-ocaml-bindings-for-gtk-4-preview-release/17944/1</a>
</p>
</div>
<div id=3D"outline-container-org8d46b85" class=3D"outline-3">
<h3 id=3D"org8d46b85">Chris Armstrong announced</h3>
<div class=3D"outline-text-3" id=3D"text-org8d46b85">
<p>
I=E2=80=99m pleased to announce the first preview release of ocgtk, OCaml b=
indings for GTK 4 (v0.1-preview0).
</p>
</div>
<div id=3D"outline-container-orgbc1a0d3" class=3D"outline-4">
<h4 id=3D"orgbc1a0d3">What is it?</h4>
<div class=3D"outline-text-4" id=3D"text-orgbc1a0d3">
<p>
<a href=3D"https://github.com/chris-armstrong/ocgtk">ocgtk</a> provides OCa=
ml bindings for the GTK 4 widget toolkit and its associated libraries (GDK,=
GIO,
Pango, GdkPixbuf, GSK, Graphene, Cairo). It targets OCaml >=3D5.3 (for n=
ow).
</p>
<p>
It is inspired by, and draws some core common code and many design ideas fr=
om, lablgtk3 =E2=80=94 the long-standing GTK 3 bindings library. However, t=
he APIs are not compatible: whereas lablgtk3=E2=80=99s bindings are largely=
hand-written, ocgtk uses a code generator that reads GObject Introspection=
(GIR) definition files to produce both C stubs and OCaml wrappers. This me=
ans binding coverage tracks the GIR definitions rather than hand-written ef=
fort, and the generated code follows a consistent procedural structure.
</p>
<p>
<b>A note on tooling</b>: the code generator itself was developed with heav=
y assistance from LLMs. However, the output (the C stubs and OCaml modules =
that form the actual library) is programmatically generated from the GIR de=
finitions, not written by an LLM.
</p>
</div>
</div>
<div id=3D"outline-container-org2797a65" class=3D"outline-4">
<h4 id=3D"org2797a65">What=E2=80=99s implemented</h4>
<div class=3D"outline-text-4" id=3D"text-org2797a65">
<ul class=3D"org-ul">
<li>Bindings for GTK 4, GDK, GIO, Pango, GdkPixbuf, GSK, Graphene, and Cair=
o</li>
<li>Classes, records, enumerations, and bitfields</li>
<li>Constructors, methods, and properties</li>
<li>Signals (no return values or parameters)</li>
<li>A working example: a GTK 4 calculator application</li>
</ul>
</div>
</div>
<div id=3D"outline-container-org0021bed" class=3D"outline-4">
<h4 id=3D"org0021bed">What=E2=80=99s missing</h4>
<div class=3D"outline-text-4" id=3D"text-org0021bed">
<p>
This is a first milestone, not a production-ready release. Several importan=
t features are not yet
supported:
</p>
<ul class=3D"org-ul">
<li><b>Interfaces</b>: GObject interfaces are not yet supported. This has a=
broader impact than it might
appear: not only are interface types themselves absent, but any method on a=
class that takes an interface as a parameter or returns an interface type =
is also suppressed. This means some methods on otherwise-supported classes =
will be missing from the bindings.</li>
<li><b>Callbacks</b>: Functions that accept OCaml callbacks as arguments (b=
eyond signals) are not yet
supported. This limits use of many asynchronous GIO APIs and some GTK patte=
rns.</li>
<li><b>Free functions:</b> Top-level functions (not attached to a class) ar=
e not yet generated. Some
utility APIs are therefore unavailable.</li>
<li><b>Non-opaque record field access:</b> Fields of non-opaque GLib/GDK re=
cords cannot yet be read
directly.</li>
<li><b>Multi-parameter signals:</b> Only signals with zero parameters and =
no return value are supported; signals with complex signatures are silentl=
y skipped.</li>
<li><b>GLib types</b>: most GLib types are not bound, which means that seve=
ral useful APIs that use lists, byte arrays, GVariants (heavily used by DBu=
s) are not available.</li>
</ul>
<p>
These gaps mean you can build basic GTK applications, but expect to hit wal=
ls with more advanced widget usage, asynchronous I/O, or any API that relie=
s heavily on interfaces.
</p>
<p>
There is a <a href=3D"https://github.com/chris-armstrong/ocgtk/blob/main/RO=
ADMAP.md">ROADMAP.md</a> that lists the rough plan to deal with much of the=
above.
</p>
</div>
</div>
<div id=3D"outline-container-orgc8a8f3d" class=3D"outline-4">
<h4 id=3D"orgc8a8f3d">Documentation</h4>
<div class=3D"outline-text-4" id=3D"text-orgc8a8f3d">
<p>
API reference documentation is currently deficient. Accurately generating d=
ocumentation from GIR
definitions is an unsolved problem for this project, so for now the generat=
ed modules are largely
undocumented. In the meantime, the GTK 4 documentation is the best referenc=
e for understanding
what each binding corresponds to, and the examples in the repository illust=
rate practical usage =E2=80=94
in particular the calculator example, which demonstrates a non-trivial GTK =
4 application.
</p>
</div>
</div>
<div id=3D"outline-container-orga5a37a3" class=3D"outline-4">
<h4 id=3D"orga5a37a3">Stability</h4>
<div class=3D"outline-text-4" id=3D"text-orga5a37a3">
<p>
This code is untested in production environments. The generated bindings co=
ver a large
surface area, but test coverage is not yet comprehensive. I would caution a=
gainst use in any
production or safety-sensitive context at this stage. Comments or MRs are w=
elcome.
</p>
<p>
This code has not been tested outside of Linux environments.
</p>
</div>
</div>
<div id=3D"outline-container-org3ae6b7e" class=3D"outline-4">
<h4 id=3D"org3ae6b7e">Installation and Usage</h4>
<div class=3D"outline-text-4" id=3D"text-org3ae6b7e">
<p>
Download and pin the source code for now (I=E2=80=99m in the process of pre=
paring an opam release. This is taking a some time to sort through cross-pl=
atform issues, so I=E2=80=99ll update here with a comment when that is avai=
lable).
</p>
<p>
The bindings have been generated against GTK 4.14.5 (Ubuntu 24.04). If you =
have an older version, it should still compile (in theory), but you will re=
ceive runtime errors on APIs not available in your version.
</p>
<ol class=3D"org-ol">
<li>Download the repository:<a href=3D"https://github.com/chris-armstrong/o=
cgtk">https://github.com/chris-armstrong/ocgtk</a> (you can use the v0.1-pr=
eview0 tag to get what I=E2=80=99ve mentioned here)</li>
<li>Pin the conf-gtk4 and ocgtk packages in their respective subdirectories
<ol class=3D"org-ol">
<li><code>opam pin conf-gtk</code></li>
<li><code>opam pin ocgtk</code></li>
</ol></li>
<li>Run <code>opam install ocgtk</code></li>
</ol>
<p>
Each library is exposed at the ocamlfind level as <code>ocgtk.<libname&g=
t;</code> - for example, add <code>ocgtk.gtk</code> or <code>ocgtk.gdk</cod=
e> to your dune file, while depending on <code>ocgtk</code> in your <code>o=
pam</code> / <code>dune-project</code> file.
</p>
<p>
<b>Source and issue tracker</b>: <a href=3D"https://github.com/chris-armstr=
ong/ocgtk">https://github.com/chris-armstrong/ocgtk</a>
</p>
<p>
Feedback and bug reports welcome.
</p>
</div>
</div>
</div>
</div>
<div id=3D"outline-container-4" class=3D"outline-2">
<h2 id=3D"4">out-channel-redirect 0.1 =E2=80=94 Redirect and capture out_ch=
annel output</h2>
<div class=3D"outline-text-2" id=3D"text-4">
<p>
Archive: <a href=3D"https://discuss.ocaml.org/t/ann-out-channel-redirect-0-=
1-redirect-and-capture-out-channel-output/17945/1">https://discuss.ocaml.or=
g/t/ann-out-channel-redirect-0-1-redirect-and-capture-out-channel-output/17=
945/1</a>
</p>
</div>
<div id=3D"outline-container-orgc4780f6" class=3D"outline-3">
<h3 id=3D"orgc4780f6">Hhugo announced</h3>
<div class=3D"outline-text-3" id=3D"text-orgc4780f6">
<p>
I=E2=80=99m happy to announce the first release of <a href=3D"https://githu=
b.com/hhugo/out-channel-redirect">out-channel-redirect</a>, a library for r=
edirecting and capturing output written to out_channels.
</p>
</div>
<div id=3D"outline-container-orgb061a4e" class=3D"outline-4">
<h4 id=3D"orgb061a4e">Features:</h4>
<div class=3D"outline-text-4" id=3D"text-orgb061a4e">
<ul class=3D"org-ul">
<li>Capture any out_channel into a string (with convenience shorthands for =
stdout and stderr)</li>
<li>Redirect one channel into another</li>
<li>Works on native (via dup/dup2), JavaScript (js_of_ocaml), and WebAssemb=
ly (wasm_of_ocaml)</li>
<li>Expert API for manual redirection lifetime control</li>
</ul>
</div>
</div>
<div id=3D"outline-container-org5c81cf9" class=3D"outline-4">
<h4 id=3D"org5c81cf9">Installation:</h4>
<div class=3D"outline-text-4" id=3D"text-org5c81cf9">
<pre class=3D"example" id=3D"org638956e">
opam install out-channel-redirect
</pre>
</div>
</div>
<div id=3D"outline-container-org1f3f202" class=3D"outline-4">
<h4 id=3D"org1f3f202">Quick example:</h4>
<div class=3D"outline-text-4" id=3D"text-org1f3f202">
<div class=3D"org-src-container">
<pre class=3D"src src-ocaml"><code><span style=3D"color: #242521; font-weig=
ht: bold;">let</span> <span style=3D"color: #007a9f;">output</span>, <span =
style=3D"color: #007a9f;">result</span> =3D
<span style=3D"color: #557400; font-weight: bold;">Out_channel_redirect.<=
/span>capture_channel some_channel <span style=3D"color: #444fcf; font-weig=
ht: bold;">~f</span>:(<span style=3D"color: #006f00; font-weight: bold;">fu=
n</span> () →=20
<span style=3D"color: #557400; font-weight: bold;">Printf.</span><span =
style=3D"color: #007a9f;">fprintf</span> <span style=3D"color: #007a9f;">so=
me_channel</span> “<span style=3D"color: #007a9f;">hello</span>”=
;;
42)
<span style=3D"color: #8f6f4a; font-style: italic;">(* </span><span style=
=3D"color: #8f6f4a; font-style: italic;">output </span>=3D<span style=3D"co=
lor: #8f6f4a; font-style: italic;"> “hello”, result </span>=3D<=
span style=3D"color: #8f6f4a; font-style: italic;"> 42</span><span style=3D=
"color: #8f6f4a; font-style: italic;"> *)</span>
</code></pre>
</div>
</div>
</div>
</div>
</div>
<div id=3D"outline-container-5" class=3D"outline-2">
<h2 id=3D"5">ppxlib.0.38.0</h2>
<div class=3D"outline-text-2" id=3D"text-5">
<p>
Archive: <a href=3D"https://discuss.ocaml.org/t/ann-ppxlib-0-38-0/17948/1">=
https://discuss.ocaml.org/t/ann-ppxlib-0-38-0/17948/1</a>
</p>
</div>
<div id=3D"outline-container-org636983e" class=3D"outline-3">
<h3 id=3D"org636983e">Nathan Rebours announced</h3>
<div class=3D"outline-text-3" id=3D"text-org636983e">
<p>
The ppxlib team is happy to announce the release of ppxlib.0.38.0.
</p>
<p>
The main features of this release are support for OCaml 5.5 and improved su=
pport of OCaml 5.4 and 5.3. It also comes with a few bug fixes and a couple=
new API entries, you can read the extensive release notes <a href=3D"https=
://github.com/ocaml-ppx/ppxlib/releases/tag/0.38.0">here</a>.
</p>
<p>
This is our first release since we announced our new approach to supporting=
new compilers in <a href=3D"https://discuss.ocaml.org/t/ann-ppxlib-support=
-for-future-compilers/17430">this thread</a>. All support for compilers ver=
sions <code>>=3D 5.3</code> is implemented using this technique and new =
language features are encoded into the AST. We've added <code>Ast_builder</=
code> and <code>Ast_pattern</code> functions to allow you to manipulate som=
e of those, such as labeled tuples or effect patterns. You can see those in=
our API documentation <a href=3D"https://ocaml-ppx.github.io/ppxlib/ppxlib=
/Ppxlib/Ast_builder/Default/index.html#future-asts">here</a> and <a href=3D=
"https://ocaml-ppx.github.io/ppxlib/ppxlib/Ppxlib/Ast_pattern/index.html#fu=
ture-asts">there</a>. We've also illustrated how to use them in our <a href=
=3D"https://ocaml-ppx.github.io/ppxlib/ppxlib/compatibility.html#future_com=
pilers">new manual section</a>. If you're interested in producing or consum=
ing other new language features that cannot be represented with our current=
internal AST (5.2), please <a href=3D"https://github.com/ocaml-ppx/ppxlib/=
issues/new">open an issue</a> so we can add the relevant helpers.
</p>
<p>
Given the ecosystem hasn't yet recovered from the 5.2 AST bump and <code>pp=
xlib.0.36.0</code>, we're glad that we can add support for new compilers wi=
thout introducing further breakage and keep the maintenance burden within p=
pxlib's bounds.
We've started <a href=3D"https://github.com/ocaml/ocaml/issues/14668">discu=
ssions</a> with the compiler team to make this approach even more viable in=
the future on our end.
</p>
<p>
We'd like to thank @ceastlund who's our only external contributor for this =
release.
</p>
<p>
I'd personally like to thank @patricoferris for his help getting this out t=
he door as well as the OCaml Software Foundation and OCamlPro for funding m=
y work on ppxlib.
</p>
<p>
Thank you for reading and happy preprocessing!
</p>
</div>
</div>
</div>
<div id=3D"outline-container-6" class=3D"outline-2">
<h2 id=3D"6">A Proposal for Voluntary AI Disclosure in OCaml Code</h2>
<div class=3D"outline-text-2" id=3D"text-6">
<p>
Archive: <a href=3D"https://discuss.ocaml.org/t/a-proposal-for-voluntary-ai=
-disclosure-in-ocaml-code/17950/1">https://discuss.ocaml.org/t/a-proposal-f=
or-voluntary-ai-disclosure-in-ocaml-code/17950/1</a>
</p>
</div>
<div id=3D"outline-container-orgf6d9f08" class=3D"outline-3">
<h3 id=3D"orgf6d9f08">Anil Madhavapeddy announced</h3>
<div class=3D"outline-text-3" id=3D"text-orgf6d9f08">
<p>
Dear all,
</p>
<p>
I've put together an <b><a href=3D"https://github.com/avsm/ocaml-ai-disclos=
ure">ocaml-ai-disclosure</a></b> proposal to allow voluntary disclosure of =
AI usage in published OCaml code, using opam metadata and <a href=3D"https:=
//ocaml.org/manual/5.3/attributes.html">extension attributes</a> in source =
code.
</p>
<p>
The repository and <a href=3D"https://anil.recoil.org/notes/opam-ai-disclos=
ure">blog post</a> have more details, some prototype tooling to extract att=
ributes, and a FAQ, but in a nutshell I'm proposing something very similar =
to a <a href=3D"https://www.w3.org/community/ai-content-disclosure/">W3C di=
sclosure proposal for HTML</a>.
</p>
</div>
<div id=3D"outline-container-orgac86b08" class=3D"outline-4">
<h4 id=3D"orgac86b08">Package Disclosures</h4>
<div class=3D"outline-text-4" id=3D"text-orgac86b08">
<p>
An opam package can declare its disclosure using extension fields:
</p>
<pre class=3D"example" id=3D"org0320ede">
x-ai-disclosure: "ai-assisted"
x-ai-model: "claude-opus-4-6"
x-ai-provider: "Anthropic"
</pre>
<p>
<i>Note: This may just become a list of values in the final proposal, but y=
ou get the idea.</i>
</p>
</div>
</div>
<div id=3D"outline-container-org09e3913" class=3D"outline-4">
<h4 id=3D"org09e3913">OCaml Module level</h4>
<div class=3D"outline-text-4" id=3D"text-org09e3913">
<p>
OCaml supports extension attributes, which we use via a floating attribute =
that applies to the entire compilation unit:
</p>
<div class=3D"org-src-container">
<pre class=3D"src src-ocaml"><code><span style=3D"color: #a7601f;">[@@@ai_d=
isclosure </span><span style=3D"color: #ca3400;">"ai-generated"</span><span=
style=3D"color: #a7601f;">]</span>
<span style=3D"color: #a7601f;">[@@@ai_model </span><span style=3D"color: #=
ca3400;">"claude-opus-4-6"</span><span style=3D"color: #a7601f;">]</span>
<span style=3D"color: #a7601f;">[@@@ai_provider </span><span style=3D"color=
: #ca3400;">"Anthropic"</span><span style=3D"color: #a7601f;">]</span>
<span style=3D"color: #242521; font-weight: bold;">let</span> <span style=
=3D"color: #007a9f;">foo</span> =3D ...
<span style=3D"color: #242521; font-weight: bold;">let</span> <span style=
=3D"color: #007a9f;">bar</span> =3D ...
</code></pre>
</div>
<p>
These can also be scoped more finely via declaration attributes that apply =
to a single binding:
</p>
<div class=3D"org-src-container">
<pre class=3D"src src-ocaml"><code><span style=3D"color: #a7601f;">[@@@ai_d=
isclosure </span><span style=3D"color: #ca3400;">"ai-assisted"</span><span =
style=3D"color: #a7601f;">]</span>
<span style=3D"color: #242521; font-weight: bold;">let</span> <span style=
=3D"color: #a7601f;">human_written</span> <span style=3D"color: #007a9f;">x=
</span> =3D ...
<span style=3D"color: #242521; font-weight: bold;">let</span> <span style=
=3D"color: #a7601f;">ai_helper</span> <span style=3D"color: #007a9f;">y</sp=
an> =3D ...
<span style=3D"color: #a7601f;">[@@ai_disclosure </span><span style=3D"colo=
r: #ca3400;">"ai-generated"</span><span style=3D"color: #a7601f;">]</span>
</code></pre>
</div>
<p>
Disclosure follows a nearest-ancestor inheritance model like the W3C HTML p=
roposal, whereby an explicit annotation overrides the inherited value.
</p>
<p>
I wrote a <a href=3D"https://anil.recoil.org/notes/opam-ai-disclosure">blog=
post with more details</a>, as well as an <a href=3D"https://github.com/av=
sm/ocaml-ai-disclosure">FAQ in the proposal repository</a> about some of th=
e implications.
</p>
<p>
I couldn't find any other prior art of other language ecosystems trying any=
thing similar, so I'd be interested in hearing about any others you all kno=
w about. If there's no interest in the wider ecosystem in doing this, then =
I'll just use it myself, but I figured there's no harm in starting the disc=
ussion!
</p>
</div>
</div>
</div>
</div>
<div id=3D"outline-container-7" class=3D"outline-2">
<h2 id=3D"7">Blog: OCaml documentation as markdown</h2>
<div class=3D"outline-text-2" id=3D"text-7">
<p>
Archive: <a href=3D"https://discuss.ocaml.org/t/blog-ocaml-documentation-as=
-markdown/17951/1">https://discuss.ocaml.org/t/blog-ocaml-documentation-as-=
markdown/17951/1</a>
</p>
</div>
<div id=3D"outline-container-orgaeb51d5" class=3D"outline-3">
<h3 id=3D"orgaeb51d5">David Sancho announced</h3>
<div class=3D"outline-text-3" id=3D"text-orgaeb51d5">
<p>
I published a blog post about odoc's markdown backend and how I used it to =
make the melange.re documentation better, hope you like it:
</p>
<p>
<a href=3D"https://sancho.dev/blog/ocaml-documentation-as-markdown">https:/=
/sancho.dev/blog/ocaml-documentation-as-markdown</a>
</p>
<p>
Thanks to @jonludlam @rgrinberg and @Alizter for reviewing the work that ma=
de it possible.
</p>
</div>
</div>
</div>
<div id=3D"outline-container-8" class=3D"outline-2">
<h2 id=3D"8">hotseat Squava (a tiny LablGtk2 demo)</h2>
<div class=3D"outline-text-2" id=3D"text-8">
<p>
Archive: <a href=3D"https://discuss.ocaml.org/t/ann-hotseat-squava-a-tiny-l=
ablgtk2-demo/17957/1">https://discuss.ocaml.org/t/ann-hotseat-squava-a-tiny=
-lablgtk2-demo/17957/1</a>
</p>
</div>
<div id=3D"outline-container-orgfa0b476" class=3D"outline-3">
<h3 id=3D"orgfa0b476">Damien Guichard announced</h3>
<div class=3D"outline-text-3" id=3D"text-orgfa0b476">
<p>
<a href=3D"https://pastebin.com/Nwu2aC7A">https://pastebin.com/Nwu2aC7A</a>
</p>
<p>
The <a href=3D"https://boardgamegeek.com/boardgame/112745/squava">Squava bo=
ard game</a>.
</p>
<div id=3D"orgf700b6a" class=3D"figure">
<p><img src=3D"https://us1.discourse-cdn.com/flex020/uploads/ocaml/original=
/2X/8/87c31d9f127f99f12e96ecff6c579b710926f945.png" alt=3D"87c31d9f127f99f1=
2e96ecff6c579b710926f945.png" width=3D"80%" />
</p>
</div>
<p>
Squava 1.1 has no vector graphics, however you can edit/shrink/stretch <cod=
e>./squava.png</code> and the program will adapt the board using the new pi=
xmap.
</p>
<div id=3D"org4f102b6" class=3D"figure">
<p><img src=3D"https://us1.discourse-cdn.com/flex020/uploads/ocaml/original=
/2X/6/66cc412e804f7d1e81a6d11ea5c4645f3edfc871.jpeg" alt=3D"66cc412e804f7d1=
e81a6d11ea5c4645f3edfc871.jpeg" width=3D"80%" />
</p>
</div>
</div>
</div>
</div>
<div id=3D"outline-container-9" class=3D"outline-2">
<h2 id=3D"9">opentelemetry 0.90 (and associated libraries)</h2>
<div class=3D"outline-text-2" id=3D"text-9">
<p>
Archive: <a href=3D"https://discuss.ocaml.org/t/ann-opentelemetry-0-90-and-=
associated-libraries/17958/1">https://discuss.ocaml.org/t/ann-opentelemetry=
-0-90-and-associated-libraries/17958/1</a>
</p>
</div>
<div id=3D"outline-container-org5bbd779" class=3D"outline-3">
<h3 id=3D"org5bbd779">Simon Cruanes announced</h3>
<div class=3D"outline-text-3" id=3D"text-org5bbd779">
<p>
Hello,
</p>
<p>
I'm thrilled to announce <a href=3D"https://github.com/ocaml-tracing/ocaml-=
opentelemetry/releases/tag/v0.90">opentelemetry 0.90</a> (as well as <code>=
opentelemetry-client</code>, <code>opentelemetry-client-cohttp-lwt</code>, =
etc.).
</p>
<p>
Opentelemetry is an implementation of <a href=3D"https://opentelemetry.io/"=
>https://opentelemetry.io/</a> for OCaml; it covers both the core <span cla=
ss=3D"underline">client API</span> (for instrumentation of libraries, etc.)=
and the full SDK with various <span class=3D"underline">exporters</span>. =
It is compatible with <a href=3D"https://github.com/ocaml-tracing/ocaml-tra=
ce/">Trace</a>.
</p>
<p>
This release is the result of months of work and is hopefully one of the la=
st before 1.0. The <a href=3D"https://github.com/ocaml-tracing/ocaml-opente=
lemetry/blob/main/CHANGES.md#090">changelog</a> is pretty big, I reworked a=
lot of things; among others:
</p>
<ul class=3D"org-ul">
<li>move to ocaml-protoc/pbrt 4.0 (with mutable fields and a different code=
gen for protobufs)</li>
<li>the API is closer to guidelines from <a href=3D"https://opentelemetry.i=
o">https://opentelemetry.io</a> (not fully there yet but better)</li>
<li>modularity of the internal processing of signals is much improved, with=
better code reuse, pluggable ~everything, better queueing/batching, HTTP r=
etries</li>
<li>support for exporting as JSON instead of protobuf</li>
<li>support for trace 0.11, which allows <code>opentelemetry.trace</code> t=
o eschew all its global state except for the global OTEL exporter</li>
<li>better lifecycle and cleanup</li>
</ul>
<p>
API documentation can be found <a href=3D"https://ocaml-tracing.github.io/o=
caml-opentelemetry/">here</a>. As always, feedback, bug reports, etc are ve=
ry welcome.
</p>
</div>
</div>
</div>
<div id=3D"outline-container-10" class=3D"outline-2">
<h2 id=3D"10">Dune 3.22</h2>
<div class=3D"outline-text-2" id=3D"text-10">
<p>
Archive: <a href=3D"https://discuss.ocaml.org/t/ann-dune-3-22/17912/2">http=
s://discuss.ocaml.org/t/ann-dune-3-22/17912/2</a>
</p>
</div>
<div id=3D"outline-container-orgd284e3e" class=3D"outline-3">
<h3 id=3D"orgd284e3e">Continuing this thread, Shon announced</h3>
<div class=3D"outline-text-3" id=3D"text-orgd284e3e">
<p>
The Dune team is pleased to announce <a href=3D"https://github.com/ocaml/du=
ne/releases/tag/3.22.1">the release of dune 3.22.1</a>.
</p>
<p>
If you encounter a problem with this release, please report it in <a href=
=3D"https://github.com/ocaml/dune/issues">our issue tracker</a>.
</p>
</div>
<div id=3D"outline-container-org1645b81" class=3D"outline-4">
<h4 id=3D"org1645b81">Fixed</h4>
<div class=3D"outline-text-4" id=3D"text-org1645b81">
<ul class=3D"org-ul">
<li>Restore compatibility with Windows 7 (#13905, @nojb)</li>
<li><code>dune test</code> now runs tests in the default context only. When=
there is a single context, it is treated as the default. This fixes a cras=
h when the workspace has no context named "default". (#13930, fixes #13904,=
@Alizter)</li>
<li>Fix <code>dune trace cat --chrome-trace</code> to adhere to the Chrome =
Trace Event Format by providing timestamps and durations at microsecond gra=
nularity (#13911, fixes #13906, @Alizter)</li>
</ul>
</div>
</div>
</div>
</div>
<div id=3D"outline-container-org9fcb4b9" class=3D"outline-2">
<h2 id=3D"org9fcb4b9">Old CWN</h2>
<div class=3D"outline-text-2" id=3D"text-org9fcb4b9">
<p>
If you happen to miss a CWN, you can <a href=3D"mailto:alan.schmitt@polytec=
hnique.org">send me a message</a> and I'll mail it to you, or go take a loo=
k at <a href=3D"https://alan.petitepomme.net/cwn/">the archive</a> or the <=
a href=3D"https://alan.petitepomme.net/cwn/cwn.rss">RSS feed of the archive=
s</a>.
</p>
<p>
If you also wish to receive it every week by mail, you may subscribe to the=
<a href=3D"https://sympa.inria.fr/sympa/info/caml-list">caml-list</a>.
</p>
<div class=3D"authorname" id=3D"orgc79e77e">
<p>
<a href=3D"https://alan.petitepomme.net/">Alan Schmitt</a>
</p>
</div>
</div>
</div>
</div>
</body>
</html>
--==-=-=--
--=-=-=--
--===-=-=
Content-Type: application/pgp-signature; name="signature.asc"
-----BEGIN PGP SIGNATURE-----
iQFvBAEBCABZFiEE6lXof/BsSVW56ZmGBA0KO07S5ccFAmnUzysbFIAAAAAABAAO
bWFudTIsMi41KzEuMTIsMCwzHxxhbGFuLnNjaG1pdHRAcG9seXRlY2huaXF1ZS5v
cmcACgkQBA0KO07S5cerMQgA0k0MgCJbP+FHKjPNsUpKo2vOhNu38KRw58INQPmQ
Uo05NFShu9/pLmasE1meRpaa8vpvt0Fxvmc7V5DhJixe++e+/ynpPtp1Ei35cjyy
4zQVSrV9vY7nhfLG5qJFMlhBh/Y0wGJ9nmlR2c7FqncvQiMoGGS1RSJf03JJAXri
0KHnvq1ZFiGrO94QLIxxwg6gLbQ3rurGtVwB31gHwWVUFpYRW4eJiEvKwhsZ3Z57
9nY/Aa0JRZXMDFsMe21odLeycRPRvFuhoAoY/Jf532/43g4zLvW0XFJKhsz/AKez
5Yqf1O2MaRseN9VOQQUtBcPiZqMtnlxBuT2OZ37mudayAQ==
=f1fC
-----END PGP SIGNATURE-----
--===-=-=--