[#121498] [Ruby Bug#21210] IO::Buffer gets invalidated on GC compaction — "hanazuki (Kasumi Hanazuki) via ruby-core" <ruby-core@...>

Issue #21210 has been reported by hanazuki (Kasumi Hanazuki).

10 messages 2025/04/01

[#121519] [Ruby Bug#21214] VmRSS consumption increase in Ruby 3.4.2 vs Ruby 3.3.6 — "mood_vuadensl (LOIC VUADENS) via ruby-core" <ruby-core@...>

Issue #21214 has been reported by mood_vuadensl (LOIC VUADENS).

9 messages 2025/04/02

[#121542] [Ruby Bug#21217] Integer.sqrt produces wrong results even on input <= 1e18 — "hjroh0315 (Matthew Roh) via ruby-core" <ruby-core@...>

Issue #21217 has been reported by hjroh0315 (Matthew Roh).

8 messages 2025/04/06

[#121551] [Ruby Feature#21219] `Object#inspect` accept a list of instance variables to display — "byroot (Jean Boussier) via ruby-core" <ruby-core@...>

Issue #21219 has been reported by byroot (Jean Boussier).

10 messages 2025/04/07

[#121556] [Ruby Bug#21220] Memory corruption in update_line_coverage() [write at index -1] — "mbcodeandsound (Mike Bourgeous) via ruby-core" <ruby-core@...>

Issue #21220 has been reported by mbcodeandsound (Mike Bourgeous).

16 messages 2025/04/07

[#121560] [Ruby Feature#21221] Proposal to upstream ZJIT — "maximecb (Maxime Chevalier-Boisvert) via ruby-core" <ruby-core@...>

SXNzdWUgIzIxMjIxIGhhcyBiZWVuIHJlcG9ydGVkIGJ5IG1heGltZWNiIChNYXhpbWUgQ2hldmFs

8 messages 2025/04/07

[#121565] [Ruby Feature#21254] Inlining Class#new — "tenderlovemaking (Aaron Patterson) via ruby-core" <ruby-core@...>

SXNzdWUgIzIxMjU0IGhhcyBiZWVuIHJlcG9ydGVkIGJ5IHRlbmRlcmxvdmVtYWtpbmcgKEFhcm9u

12 messages 2025/04/07

[#121601] [Ruby Feature#21258] Retire CGI library from Ruby 3.5 — "hsbt (Hiroshi SHIBATA) via ruby-core" <ruby-core@...>

Issue #21258 has been reported by hsbt (Hiroshi SHIBATA).

11 messages 2025/04/09

[#121621] [Ruby Feature#21262] Proposal: `Ractor::Port` — "ko1 (Koichi Sasada) via ruby-core" <ruby-core@...>

SXNzdWUgIzIxMjYyIGhhcyBiZWVuIHJlcG9ydGVkIGJ5IGtvMSAoS29pY2hpIFNhc2FkYSkuDQoN

8 messages 2025/04/10

[#121627] [Ruby Feature#21264] Extract Date library from Ruby repo in the future — "hsbt (Hiroshi SHIBATA) via ruby-core" <ruby-core@...>

Issue #21264 has been reported by hsbt (Hiroshi SHIBATA).

8 messages 2025/04/11

[#121686] [Ruby Feature#21274] Show performance warnings for easily avoidable unnecessary implicit splat allocations — "jeremyevans0 (Jeremy Evans) via ruby-core" <ruby-core@...>

Issue #21274 has been reported by jeremyevans0 (Jeremy Evans).

6 messages 2025/04/18

[#121700] [Ruby Feature#21279] Bare "rescue" should not rescue NameError — "AMomchilov (Alexander Momchilov) via ruby-core" <ruby-core@...>

Issue #21279 has been reported by AMomchilov (Alexander Momchilov).

9 messages 2025/04/21

[#121702] [Ruby Bug#21280] StringIO#set_encoding warns when backed by chilled string literal — "jeremyevans0 (Jeremy Evans) via ruby-core" <ruby-core@...>

Issue #21280 has been reported by jeremyevans0 (Jeremy Evans).

13 messages 2025/04/22

[#121721] [Ruby Bug#21283] Some tests of TestMkmfConvertible is failing with VS2022 17.14.0 preview 4.0 — "hsbt (Hiroshi SHIBATA) via ruby-core" <ruby-core@...>

Issue #21283 has been reported by hsbt (Hiroshi SHIBATA).

8 messages 2025/04/24

[#121745] [Ruby Bug#21286] Windows - MSYS2 just updated to GCC 15.1.0, builds failing — "MSP-Greg (Greg L) via ruby-core" <ruby-core@...>

Issue #21286 has been reported by MSP-Greg (Greg L).

15 messages 2025/04/27

[#121755] [Ruby Misc#21290] Unable to build ruby extension on Fedora 42 due to possible GCC 15 issues — "lukef (Luke Freeman) via ruby-core" <ruby-core@...>

SXNzdWUgIzIxMjkwIGhhcyBiZWVuIHJlcG9ydGVkIGJ5IGx1a2VmIChMdWtlIEZyZWVtYW4pLg0K

8 messages 2025/04/28

[ruby-core:121635] [Ruby Feature#21262] Proposal: `Ractor::Port`

From: "ko1 (Koichi Sasada) via ruby-core" <ruby-core@...>
Date: 2025-04-11 18:14:10 UTC
List: ruby-core #121635
SXNzdWUgIzIxMjYyIGhhcyBiZWVuIHVwZGF0ZWQgYnkga28xIChLb2ljaGkgU2FzYWRhKS4NCg0K
DQo+IFRoZSBwcm9ibGVtIHdpdGggdGhlIGFib3ZlIGNvZGUgaXMgdGhhdCB0aGUgY29uc3VtZXIg
UmFjdG9yIHdpbGwgc3RhcnZlIHVudGlsIGZpbmRfd29yayByZXR1cm5zLg0KDQpJIHRoaW5rIGl0
IGlzIHNhbWUgb24geW91ciB0aHJlYWQrcXVldWUgZXhhbXBsZS4gQW0gSSBtaXNzaW5nIHNvbWV0
aGluZz8NCg0KPiBBZGRpdGlvbmFsbHksIHdlJ3JlIG5vdCBhYmxlIHRvICJmaW5kIHdvcmsiIGlu
IHBhcmFsbGVsIHdpdGggdGhlIGNvbnN1bWVyIHRocmVhZHMuDQoNCldoeSBkb24ndCB5b3UgdXNl
IHJhY3RvciB0byBydW4gImZpbmQgd29yayIgaWYgeW91IHdhbnQgdG8gcnVuIGluIHBhcmFsbGVs
IHdpdGggdGhlIG1haW4gUmFjdG9yPw0KDQpNYXliZSBpdCBpcyBlYXN5IHRvIGRpc2N1c3Mgd2l0
aCBnb29kIGV4YW1wbGVzLg0KDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tDQpGZWF0dXJlICMyMTI2MjogUHJvcG9zYWw6IGBSYWN0b3I6OlBvcnRgDQpodHRwczovL2J1
Z3MucnVieS1sYW5nLm9yZy9pc3N1ZXMvMjEyNjIjY2hhbmdlLTExMjY4OQ0KDQoqIEF1dGhvcjog
a28xIChLb2ljaGkgU2FzYWRhKQ0KKiBTdGF0dXM6IEFzc2lnbmVkDQoqIEFzc2lnbmVlOiBrbzEg
KEtvaWNoaSBTYXNhZGEpDQoqIFRhcmdldCB2ZXJzaW9uOiAzLjUNCi0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgUHJvcG9zYWw6IGBSYWN0b3I6OlBvcnRgDQoNCklu
IGNvbmN1cnJlbnQgUnVieSBhcHBsaWNhdGlvbnMgdXNpbmcgUmFjdG9ycywgc2FmZWx5IGFuZCBl
ZmZpY2llbnRseSBjb21tdW5pY2F0aW5nIHJlc3VsdHMgYmV0d2VlbiBSYWN0b3JzIGlzIGEgY29t
bW9uIGNoYWxsZW5nZS4gV2UgcHJvcG9zZSBgUmFjdG9yOjpQb3J0YCBhcyBhIGxpZ2h0d2VpZ2h0
LCBzYWZlLCBhbmQgZXJnb25vbWljIGFic3RyYWN0aW9uIHRvIHNpbXBsaWZ5IGNvbW11bmljYXRp
b24gcGF0dGVybnMsIGVzcGVjaWFsbHkgaW4gcmVxdWVzdC1yZXNwb25zZSBtb2RlbHMuDQoNCmBg
YHJ1YnkNCiMgdXNhZ2UgZXhhbXBsZQ0KDQpwb3J0ID0gUmFjdG9yOjpQb3J0Lm5ldw0KDQpSYWN0
b3IubmV3IHBvcnQgZG8gfHBvcnR8DQogIHBvcnQgPDwgNDINCiAgcG9ydCA8PCA0Mw0KZW5kDQoN
CiMgU3VjY2Vzczogd2FpdCBmb3Igc2VuZGluZw0KcG9ydC5yZWNlaXZlICM9PiA0Mg0KDQpSYWN0
b3IubmV3IHBvcnQgZG8gfHBvcnR8DQogIHBvcnQucmVjZWl2ZSAjIEVycm9yOiBvbmx5IHRoZSBj
cmVhdG9yIFJhY3RvciBjYW4gcmVjZWl2ZSBmcm9tIHRoaXMgcG9ydC4NCmVuZA0KDQpwb3J0LnJl
Y2VpdmUgIz0+IDQzDQpgYGANCg0KVGhpcyBpcyBhIHNpbWlsYXIgY29uY2VwdCB0byBbIkNoYW5u
ZWwiXShodHRwczovL2J1Z3MucnVieS1sYW5nLm9yZy9pc3N1ZXMvMjExMjEpLCBidXQgaXQgaXMg
dGlnaHRseSBjb3VwbGVkIHdpdGggdGhlIGNyZWF0b3IgUmFjdG9yIGFuZCBubyBvdGhlciBSYWN0
b3JzIGNhbiByZWNlaXZlIGFueXRoaW5nIGZyb20gdGhhdCBwb3J0Lg0KDQpJbiB0aGF0IHNlbnNl
LCBpdCBpcyBjb25jZXB0dWFsbHkgY2xvc2VyIHRvIGEgc29ja2V0IGZpbGUgZGVzY3JpcHRvciAo
ZS5nLiwgYSBkZXN0aW5hdGlvbiBhbmQgcG9ydCBudW1iZXIgcGFpciBpbiBUQ1AvSVApLg0KDQpX
ZSBjYW4gaW1wbGVtZW50IGBQb3J0YCB3aXRoIGBSYWN0b3IucmVjZWl2ZV9pZmAgbGlrZSB0aGlz
Og0KDQpgYGBydWJ5DQpjbGFzcyBSYWN0b3I6OlBvcnQNCiAgZGVmIGluaXRpYWxpemUNCiAgICBA
ciA9IFJhY3Rvci5jdXJyZW50DQogICAgQHRhZyA9IGdlbmlkKCkNCiAgZW5kDQoNCiAgZGVmIHNl
bmQgb2JqDQogICAgQHIgPDwgW0B0YWcsIG9ial0NCiAgZW5kDQoNCiAgZGVmIHJlY2VpdmUNCiAg
ICByYWlzZSB1bmxlc3MgQHIgPT0gUmFjdG9yLmN1cnJlbnQNCg0KICAgIFJhY3Rvci5yZWNlaXZl
X2lmIGRvIHwodGFnLCByZXN1bHQpDQogICAgICBpZiB0YWcgPT0gQHRhZw0KICAgICAgICByZXR1
cm4gcmVzdWx0DQogICAgICBlbmQNCiAgICBlbmQNCiAgZW5kDQplbmQNCmBgYA0KDQpXaXRoIGBS
YWN0b3I6OlBvcnRgLCB3ZSBjYW4gZGVwcmVjYXRlIGBSYWN0b3IucmVjZWl2ZV9pZmAsIGBSYWN0
b3IueWllbGRgLCBhbmQgYFJhY3RvciN0YWtlYC4gUG9ydHMgYWN0IGFzIGNsZWFyLCBzZWxmLWNv
bnRhaW5lZCBlbmRwb2ludHMgZm9yIG1lc3NhZ2UgcGFzc2luZywgd2hpY2ggbWFrZXMgdGhlc2Ug
b2xkZXIgcHJpbWl0aXZlcyByZWR1bmRhbnQuIEZ1cnRoZXJtb3JlLCBQb3J0LWJhc2VkIGNvbW11
bmljYXRpb24gaXMgc2lnbmlmaWNhbnRseSBlYXNpZXIgdG8gaW1wbGVtZW50IGFuZCByZWFzb24g
YWJvdXTigJRlc3BlY2lhbGx5IHdoZW4gY29uc2lkZXJpbmcgc3luY2hyb25pemF0aW9uIGNoYWxs
ZW5nZXMgYXJvdW5kIGBSYWN0b3Iuc2VsZWN0YCBhbmQgcmVuZGV6dm91cyBzZW1hbnRpY3MuDQoN
CiMjIEJhY2tncm91bmQ6IExpbWl0YXRpb25zIG9mIGN1cnJlbnQgY29tbXVuaWNhdGlvbiBwYXR0
ZXJucw0KDQpMZXQncyBkaXNjdXNzIGhvdyB0byBtYWtlIHNlcnZlci1saWtlIHNlcnZpY2UgcmFj
dG9ycy4NCg0KIyMjIE5vIHJlc3BvbnNlIHNlcnZlcg0KDQpXZSBjYW4gbWFrZSBzZXJ2ZXItbGlr
ZSBSYWN0b3JzIGxpa2UgdGhpczoNCg0KYGBgcnVieQ0KIyBFWDENCg0KZGVmIGZpYihuKSA9IG4g
PiAxIDogZmliKG4tMikgKyBmaWIobi0xKSA6IDENCg0KIyBBIHJhY3RvciBjYWxjdWxhdGUgZmli
KG4pDQpmaWJfc3J2ID0gUmFjdG9yLm5ldyBkbw0KICB3aGlsZSB0cnVlDQogICAgcGFyYW0gPSBS
YWN0b3IucmVjZWl2ZQ0KICAgIHJlc3VsdCA9IGZpYihwYXJhbSkNCiAgZW5kDQplbmQNCg0KZmli
X3NydiA8PCAxMA0KYGBgDQoNCkluIHRoaXMgY2FzZSwgdGhlIG1haW4gUmFjdG9yIHJlcXVlc3Rz
IGBmaWJfc3J2YCB0byBjYWxjdWxhdGUgYGZpYigxMClgLg0KSG93ZXZlciwgY3VycmVudGx5LCB0
aGVyZSBpcyBubyB3YXkgdG8gcmV0cmlldmUgdGhlIHJlc3VsdC4NCg0KIyMjIFJldHVybiB2YWx1
ZSB0byB0aGUgc2VuZGVyIHJhY3Rvcg0KDQpUaGVyZSBhcmUgc2V2ZXJhbCBwb3NzaWJsZSBhcHBy
b2FjaGVzLg0KDQpGaXJzdCwgd2UgY2FuIHNlbmQgdGhlIHNlbmRlciBSYWN0b3IgYWxvbmcgd2l0
aCB0aGUgcGFyYW1ldGVyLCBhbmQgYXNrIHRoZSBzZXJ2ZXIgdG8gc2VuZCB0aGUgcmVzdWx0IGJh
Y2sgdG8gdGhlIHNlbmRlci4NCg0KYGBgcnVieQ0KIyBFWDINCg0KZmliX3NydiA9IFJhY3Rvci5u
ZXcgZG8NCiAgd2hpbGUgdHJ1ZQ0KICAgIHBhcmFtLCBzZW5kZXIgPSBSYWN0b3IucmVjZWl2ZQ0K
ICAgIHJlc3VsdCA9IGZpYihwYXJhbSkNCiAgICBzZW5kZXIgPDwgcmVzdWx0DQogIGVuZA0KZW5k
DQoNCmZpYl9zcnYgPDwgWzEwLCBSYWN0b3IuY3VycmVudF0NCg0KZG9fc29tZV93b3JrKCkNCg0K
UmFjdG9yLnJlY2VpdmUgIz0+IGZpYigxMCkNCmBgYA0KDQpUaGlzIGFwcHJvYWNoIHdvcmtzIHdl
bGwgaW4gc2ltcGxlIGNhc2VzLg0KDQpIb3dldmVyLCB3aXRoIEVYMiwgaGFuZGxpbmcgbXVsdGlw
bGUgY29uY3VycmVudCByZXNwb25zZXMgYmVjb21lcyBkaWZmaWN1bHQuIFRoZSByZXN1bHRzIGFy
ZSBwdXNoZWQgaW50byB0aGUgc2FtZSBtYWlsYm94LCBhbmQgc2luY2UgYFJhY3Rvci5yZWNlaXZl
YCByZXRyaWV2ZXMgbWVzc2FnZXMgd2l0aG91dCBkaXNjcmltaW5hdGluZyB0aGUgc291cmNlLCBp
dCdzIHVuY2xlYXIgd2hpY2ggc2VydmVyIHJldHVybmVkIHdoaWNoIHJlc3VsdC4NCg0KYGBgcnVi
eQ0KIyBFWDMNCg0KZGVmIGZhY3QobikgPSBuID4gMSA6IGZhY3Qobi0xKSAqIG4NCg0KZmliX3Ny
diA9IFJhY3Rvci5uZXcgZG8NCiAgd2hpbGUgdHJ1ZQ0KICAgIHBhcmFtLCBzZW5kZXIgPSBSYWN0
b3IucmVjZWl2ZQ0KICAgIHJlc3VsdCA9IGZpYihwYXJhbSkNCiAgICBzZW5kZXIgPDwgcmVzdWx0
DQogIGVuZA0KZW5kDQoNCmZhY3Rfc3J2ID0gUmFjdG9yLm5ldyBkbw0KICB3aGlsZSB0cnVlDQog
ICAgcGFyYW0sIHNlbmRlciA9IFJhY3Rvci5yZWNlaXZlDQogICAgcmVzdWx0ID0gZmFjdChwYXJh
bSkNCiAgICBzZW5kZXIgPDwgcmVzdWx0DQogIGVuZA0KZW5kDQoNCg0KZmliX3NydiA8PCBbMTAs
IFJhY3Rvci5jdXJyZW50XQ0KZmliX3NydiA8PCBbMjAsIFJhY3Rvci5jdXJyZW50XQ0KZmFjdF9z
cnYgPDwgWzEwLCBSYWN0b3IuY3VycmVudF0NCmZhY3Rfc3J2IDw8IFsyMCwgUmFjdG9yLmN1cnJl
bnRdDQoNCmRvX3NvbWVfd29yaygpDQoNClJhY3Rvci5yZWNlaXZlDQojPT4gZmliKDEwKSBvciBm
YWN0KDEwKSwgd2hpY2g/DQojICAgSWYgdGhlIHNlcnZlcnMgdXNlcyBSYWN0b3JzIG1vcmUgKGNh
bGN1bGF0ZSB0aGVtIGluIHBhcmFsbGVsKSwNCiMgICBmaWIoMjApIGFuZCBmYWN0KDIwKSBjYW4g
YmUgcmV0dXJuZWQuDQpgYGANCg0KQmVjYXVzZSBgUmFjdG9yLnJlY2VpdmVgIHJldHJpZXZlcyBh
bGwgbWVzc2FnZXMgaW5kaXNjcmltaW5hdGVseSwgZGV2ZWxvcGVycyBtdXN0IGFkZCB0aGVpciBv
d24gdGFnZ2luZyBsb2dpYyB0byBkaXN0aW5ndWlzaCByZXN1bHRzLiBXaGlsZSB0YWdnaW5nIChh
cyBzaG93biBpbiBFWDQpIGhlbHBzLCBpdCBpbnRyb2R1Y2VzIGFkZGl0aW9uYWwgY29tcGxleGl0
eSBhbmQgYnJpdHRsZW5lc3MuDQoNCiMjIyBSZXNwb25zZXMgd2l0aCByZXF1ZXN0IElEDQoNClRo
ZSBmb2xsb3dpbmcgY29kZSByZXR1cm5zIGEgcmVzdWx0IHdpdGggcmVxdWVzdCBpZCAoYSBwYWly
IG9mIHRoZSBuYW1lIG9mIHNlcnZlciBhbmQgYSBwYXJhbWV0ZXIpLg0KDQpgYGBydWJ5DQojIEVY
NA0KDQpmaWJfc3J2ID0gUmFjdG9yLm5ldyBkbw0KICB3aGlsZSB0cnVlDQogICAgcGFyYW0sIHNl
bmRlciA9IFJhY3Rvci5yZWNlaXZlDQogICAgcmVzdWx0ID0gZmliKHBhcmFtKQ0KICAgIHNlbmRl
ciA8PCBbWzpmaWIsIHBhcmFtXSwgcmVzdWx0XQ0KICBlbmQNCmVuZA0KDQpmYWN0X3NydiA9IFJh
Y3Rvci5uZXcgZG8NCiAgd2hpbGUgdHJ1ZQ0KICAgIHBhcmFtLCBzZW5kZXIgPSBSYWN0b3IucmVj
ZWl2ZQ0KICAgIHJlc3VsdCA9IGZhY3QocGFyYW0pDQogICAgc2VuZGVyIDw8IFtbOmZhY3QsIHBh
cmFtXSwgcmVzdWx0XQ0KICBlbmQNCmVuZA0KDQpmaWJfc3J2IDw8IFsxMCwgUmFjdG9yLmN1cnJl
bnRdDQpmaWJfc3J2IDw8IFsyMCwgUmFjdG9yLmN1cnJlbnRdDQpmYWN0X3NydiA8PCBbMTAsIFJh
Y3Rvci5jdXJyZW50XQ0KZmFjdF9zcnYgPDwgWzIwLCBSYWN0b3IuY3VycmVudF0NCg0KZG9fc29t
ZV93b3JrKCkNCg0KUmFjdG9yLnJlY2VpdmVfaWYgZG8gfGlkLCByZXN1bHR8DQogIGNhc2UgaWQN
CiAgaW4gWzpmaWIsIG5dDQogICAgcCAiZmliKCN7bn0pID0gI3tyZXN1bHR9Ig0KICBpbiBbOmZh
Y3QsIG5dDQogICAgcCAiZmFjdCgje259KSA9ICN7cmVzdWx0fSINCiAgZW5kDQplbmQNCg0KIyBv
ciBpZiB5b3Ugd2FudCB0byB1c2Ugc3BlY2lmaWMgcmVzdWx0cywgbGlrZToNCg0KcCBmaWIyMDog
IFJhY3Rvci5yZWNlaXZlX2lme3xpZCwgcmVzdWx0fCBpZCA9PiBbOmZpYiwgMjBdOyAgcmVzdWx0
fQ0KcCBmYWN0MTA6IFJhY3Rvci5yZWNlaXZlX2lme3xpZCwgcmVzdWx0fCBpZCA9PiBbOmZhY3Qs
IDEwXTsgcmVzdWx0fQ0KcCBmYWN0MjA6IFJhY3Rvci5yZWNlaXZlX2lme3xpZCwgcmVzdWx0fCBp
ZCA9PiBbOmZhY3QsIDIwXTsgcmVzdWx0fQ0KcCBmaWIxMDogIFJhY3Rvci5yZWNlaXZlX2lme3xp
ZCwgcmVzdWx0fCBpZCA9PiBbOmZpYiwgMTBdOyAgcmVzdWx0fQ0KYGBgDQoNClRoaXMgYXBwcm9h
Y2ggY2xvc2VseSByZXNlbWJsZXMgcGF0dGVybiBtYXRjaGluZyBpbiBFcmxhbmcgb3IgRWxpeGly
LCB3aGVyZSByZXNwb25zZXMgYXJlIHRhZ2dlZCBhbmQgbWF0Y2hlZCBzdHJ1Y3R1cmFsbHkuDQoN
Ckhvd2V2ZXIsIHRoaXMgc29sdXRpb24gc3RpbGwgaGFzIGFuIGlzc3VlOiBpZiBgZG9fc29tZV93
b3JrKClgIHVzZXMgYFJhY3Rvci5yZWNlaXZlYCwgaXQgbWF5IGFjY2lkZW50YWxseSBjb25zdW1l
IGFueSBtZXNzYWdlLiBJbiBvdGhlciB3b3JkcywgYFJhY3Rvci5yZWNlaXZlYCBjYW4gb25seSBi
ZSBzYWZlbHkgdXNlZCB3aGVuIHlvdSdyZSBjZXJ0YWluIHRoYXQgbm8gb3RoZXIgY29kZSBpcyB1
c2luZyBpdC4NCg0KKEFub3RoZXIgdHJpdmlhbCBpc3N1ZSBpcywgZGlmZmVyZW50IHNlcnZlcnMg
Y2FuIHJldHVybiBzYW1lIGlkZW50aXR5LCBsaWtlIGBbOmZhY3QsIG51bV1gIHJldHVybmVkIGJ5
IE5ld3NQYXBlciBzZXJ2ZXIuIEl0IGlzIGNvbmZ1c2luZykuDQoNCg0KIyMjIFVzaW5nIGNoYW5u
ZWxzDQoNClRvIHNvbHZlIHRoaXMgaXNzdWUsIHdlIGNhbiBtYWtlIGEgY2hhbm5lbCB3aXRoIGRp
ZmZlcmVudCBSYWN0b3JzLg0KDQpDaGFubmVscyBjYW4gYmUgaW1wbGVtZW50ZWQgdXNpbmcgUmFj
dG9ycywgYXMgaWxsdXN0cmF0ZWQgYmVsb3cuDQoNCmBgYHJ1YnkNCiMgRVg1DQoNCiMgU2VydmVy
cyBhcmUgY29tcGxldGVseSBzYW1lIHRvIEVYMw0KDQpmaWJfc3J2ID0gUmFjdG9yLm5ldyBkbw0K
ICB3aGlsZSB0cnVlDQogICAgcGFyYW0sIHNlbmRlciA9IFJhY3Rvci5yZWNlaXZlDQogICAgcmVz
dWx0ID0gZmliKHBhcmFtKQ0KICAgIHNlbmRlciA8PCByZXN1bHQNCiAgZW5kDQplbmQNCg0KZmFj
dF9zcnYgPSBSYWN0b3IubmV3IGRvDQogIHdoaWxlIHRydWUNCiAgICBwYXJhbSwgc2VuZGVyID0g
UmFjdG9yLnJlY2VpdmUNCiAgICByZXN1bHQgPSBmYWN0KHBhcmFtKQ0KICAgIHNlbmRlciA8PCBy
ZXN1bHQNCiAgZW5kDQplbmQNCg0KIyBDcmVhdGUgYSBuZXcgY2hhbm5lbCB1c2luZyBhIFJhY3Rv
cg0KZGVmIG5ld19jaGFubmVsDQogIFJhY3Rvci5uZXcgZG8NCiAgICB3aGlsZSB0cnVlDQogICAg
ICBSYWN0b3IueWllbGQgUmFjdG9yLnJlY2VpdmUNCiAgICBlbmQNCiAgZW5kDQplbmQNCg0KDQpm
aWJfc3J2IDw8IFsxMCwgZmliMTBfY2ggPSBuZXdfY2hhbm5lbF0NCmZpYl9zcnYgPDwgWzIwLCBm
aWIyMF9jaCA9IG5ld19jaGFubmVsXQ0KZmFjdF9zcnYgPDwgWzEwLCBmYWN0MTBfY2ggPSBuZXdf
Y2hhbm5lbF0NCmZhY3Rfc3J2IDw8IFsyMCwgZmFjdDIwX2NoID0gbmV3X2NoYW5uZWxdDQoNCmRv
X3NvbWVfd29yaygpDQoNCnAgZmliMjA6IGZpYjIwX2NoLnRha2UgICAjIHdhaXQgZm9yIGZpYigy
MCkNCnAgZmFjdDEwOiBmYWN0MTBfY2gudGFrZSAjIHdhaXQgZm9yIGZhY3QoMTApDQpwIGZpYjEw
OiBmaWIxMF9jaC50YWtlICAgIyB3YWl0IGZvciBmaWIoMTApDQpwIGZhY3QyMDogZmFjdDEwX2No
LnRha2UgIyB3YWl0IGZvciBmYWN0KDIwKQ0KDQojIG9yIA0KY2hzID0gW2ZpYjEwX2NoLCBmaWIy
MF9jaCwgZmFjdDEwX2NoLCBmYWN0MjBfY2hdDQoNCndoaWxlICFjaHMuZW1wdHk/DQogIGNoLCBy
ZXN1bHQgPSBSYWN0b3Iuc2VsZWN0KCpjaHMpICMgd2FpdCBmb3IgbXVsdGlwbGUgY2hhbm5lbHMN
CiAgcCBjaCwgcmVzdWx0DQogIGNocy5kZWxldGUgY2gNCmVuZA0KYGBgDQoNCkNoYW5uZWwgYXBw
cm9hY2ggc29sdmVzIHRoZSBpc3N1ZSBvZiBFWDQuIFRoZSBhYm92ZSBpbXBsZW1lbnRhdGlvbiBp
bnRyb2R1Y2Ugc29tZSBvdmVyaGVhZCB0byBjcmVhdGUgY2hhbm5lbCByYWN0b3JzLCBidXQgd2Ug
Y2FuIGludHJvZHVjZSBzcGVjaWFsIGltcGxlbWVudGF0aW9uIHRvIHJlZHVjZSB0aGlzIFJhY3Rv
ciBjcmVhdGlvbiBvdmVyaGVhZC4NCg0KSG93ZXZlciwgaW4gdGhlIEFjdG9yIG1vZGVsLCB0aGUg
Y29tbXVuaWNhdGlvbiBwYXR0ZXJuIGlzIHRvIHNlbmQgYSBtZXNzYWdlIHRvIGEgc3BlY2lmaWMg
YWN0b3IuIEluIGNvbnRyYXN0LCBjaGFubmVscyBhcmUgdXNlZCB0byBzZW5kIG1lc3NhZ2VzIHRo
cm91Z2ggYSBzaGFyZWQgY29uZHVpdCwgd2l0aG91dCBjYXJpbmcgd2hpY2ggcmVjZWl2ZXIgKGlm
IGFueSkgaGFuZGxlcyB0aGUgbWVzc2FnZS4gQWxzbywgY2hhbm5lbHMgY2FuIGhhdmUgc29tZSBv
dmVyaGVhZCwgYXMgZGlzY3Vzc2VkIGJlbG93Lg0KDQojIyMgU3VtbWFyeSBvZiBiYWNrZ3JvdW5k
DQoNCkN1cnJlbnRseSwgd2hlbiBpbXBsZW1lbnRpbmcgcmVxdWVzdC1yZXNwb25zZSBwYXR0ZXJu
cyB3aXRoIFJhY3RvcnMsIGRldmVsb3BlcnMgZmFjZSBjaGFsbGVuZ2VzIGluIHRyYWNraW5nIHJl
c3VsdHMsIG1hbmFnaW5nIGlkZW50aWZpZXJzLCBhbmQgYXZvaWRpbmcgbWVzc2FnZSBjb25mbGlj
dHMuIEV4aXN0aW5nIHByaW1pdGl2ZXMgbGlrZSBgcmVjZWl2ZV9pZmAsIGB0YWtlYCwgb3IgY2hh
bm5lbHMgaW1wbGVtZW50ZWQgd2l0aCBSYWN0b3JzIGFyZSBlaXRoZXIgZXJyb3ItcHJvbmUgb3Ig
aW5lZmZpY2llbnQuDQoNCiMjIFByb3Bvc2FsDQoNCkludHJvZHVjZSBgUmFjdG9yOjpQb3J0YCBh
cyBhbiBhbHRlcm5hdGl2ZSB0byBjaGFubmVscy4gSXQgaXMgYSBuYXR1cmFsIGV4dGVuc2lvbiBv
ZiB0aGUgQWN0b3IgbW9kZWwuIEluIGZhY3QsIGl0IGlzIHRoaW4gd3JhcHBlciBvZiBjdXJyZW50
IHNlbmQvcmVjZWl2ZSBtb2RlbCBhcyBpbGx1c3RyYXRlZCBhdCB0aGUgdG9wIG9mIHRoaXMgcHJv
cG9zYWwuDQoNCldpdGggdGhlIGBSYWN0b3I6OlBvcnRgLCB3ZSBjYW4gcmV3cml0ZSBhYm92ZSBl
eGFtcGxlcyB3aXRoIGl0Lg0KDQpgYGBydWJ5DQojIEVYNg0KDQojIENvbXBsZXRlbHkgc2FtZSBh
cyBFWDMncyBzZXJ2ZXJzDQoNCmZpYl9zcnYgPSBSYWN0b3IubmV3IGRvDQogIHdoaWxlIHRydWUN
CiAgICBwYXJhbSwgc2VuZGVyID0gUmFjdG9yLnJlY2VpdmUNCiAgICByZXN1bHQgPSBmaWIocGFy
YW0pDQogICAgc2VuZGVyIDw8IHJlc3VsdA0KICBlbmQNCmVuZA0KDQpmYWN0X3NydiA9IFJhY3Rv
ci5uZXcgZG8NCiAgd2hpbGUgdHJ1ZQ0KICAgIHBhcmFtLCBzZW5kZXIgPSBSYWN0b3IucmVjZWl2
ZQ0KICAgIHJlc3VsdCA9IGZhY3QocGFyYW0pDQogICAgc2VuZGVyIDw8IHJlc3VsdA0KICBlbmQN
CmVuZA0KDQpmaWJfc3J2IDw8IFsxMCwgZmliMTBfcG9ydCA9IFJhY3Rvcjo6UG9ydC5uZXddDQpm
aWJfc3J2IDw8IFsyMCwgZmliMjBfcG9ydCA9IFJhY3Rvcjo6UG9ydC5uZXddDQpmYWN0X3NydiA8
PCBbMTAsIGZhY3QxMF9wb3J0ID0gUmFjdG9yOjpQb3J0Lm5ld10NCmZhY3Rfc3J2IDw8IFsyMCwg
ZmFjdDIwX3BvcnQgPSBSYWN0b3I6OlBvcnQubmV3XQ0KDQpkb19zb21lX3dvcmsoKQ0KDQpwIGZp
YjEwX3BvcnQucmVjZWl2ZSAjPT4gZmliKDEwKQ0KcCBmaWIyMF9wb3J0LnJlY2VpdmUgIz0+IGZp
YigyMCkNCnAgZmFjdDEwX3BvcnQucmVjZWl2ZSAjPT4gZmFjdCgxMCkNCnAgZmFjdDIwX3BvcnQu
cmVjZWl2ZSAjPT4gZmFjdCgyMCkNCg0KIyBvcg0KDQpwb3J0cyA9IFtmaWIxMF9wb3J0LCBmaWIy
MF9wb3J0LCBmYWN0MTBfcG9ydCwgZmFjdDIwX3BvcnRdDQoNCndoaWxlICFwb3J0cy5lbXB0eT8N
CiAgcG9ydCwgcmVzdWx0ID0gUmFjdG9yLnNlbGVjdCgqcG9ydHMpDQogIGNhc2UgcG9ydA0KICB3
aGVuIGZpYjEwX3BvcnQNCiAgICBwIGZpYjEwOiByZXN1bHQNCiAgLi4uDQogIGVsc2UNCiAgICBy
YWlzZSAiVGhpcyBzaG91bGQgbm90IGhhcHBlbiAoQlVHKS4iDQogIGVuZA0KDQogIHBvcnRzLmRl
bGV0ZShwb3J0KQ0KZW5kDQpgYGANCg0KYFJhY3Rvcjo6UG9ydGAgcmVzb2x2ZXMga2V5IHBhaW4g
cG9pbnRzIGluIG1lc3NhZ2UgcGFzc2luZyBiZXR3ZWVuIFJhY3RvcnM6DQoNCiogSXQgZ3VhcmFu
dGVlcyB0aGF0IGluY29taW5nIG1lc3NhZ2VzIGFyZSBvbmx5IGRlbGl2ZXJlZCB0byB0aGUgaW50
ZW5kZWQgUmFjdG9yLCBwcmV2ZW50aW5nIHRhZyBjb2xsaXNpb25zLg0KKiBJdCBlbmFibGVzIG1l
c3NhZ2Ugcm91dGluZyB3aXRob3V0IHJlbHlpbmcgb24gZ2xvYmFsIHJlY2VpdmUgYmxvY2tzIChg
UmFjdG9yLnJlY2VpdmVgKSwgd2hpY2ggYXJlIHByb25lIHRvIHVuaW50ZW5kZWQgY29uc3VtcHRp
b24uDQoqIEl0IHJlcGxhY2VzIG1vcmUgY29tcGxleCBwcmltaXRpdmVzIGxpa2UgYC5yZWNlaXZl
X2lmYCwgYC55aWVsZGAsIGFuZCBgI3Rha2VgIHdpdGggYSBzaW1wbGVyLCBjb21wb3NhYmxlIGFi
c3RyYWN0aW9uLg0KKiBJdCBtYXBzIGNsZWFubHkgdG8gdGhlIEFjdG9yIG1vZGVsIHNlbWFudGlj
cyBSdWJ5IGludGVuZHMgdG8gc3VwcG9ydCB3aXRoIFJhY3RvcnMuDQoNCldoaWxlIHRoZSBwYXR0
ZXJuIGxvb2tzIHNpbWlsYXIgdG8gdXNpbmcgY2hhbm5lbHMsIHRoZSBzZW1hbnRpY3MgYW5kIGd1
YXJhbnRlZXMgYXJlIGRpZmZlcmVudCBpbiBtZWFuaW5nZnVsIHdheXMuDQoNClRoZSBhZHZhbnRh
Z2VzIG9mIHVzaW5nIFBvcnRzIGluY2x1ZGU6DQoNCiogU2FmZXIgdGhhbiBjaGFubmVscyBpbiBw
cmFjdGljZQ0KICAqIFdoZW4gdXNpbmcgYSBQb3J0LCBpZiBgI3NlbmRgIHN1Y2NlZWRzLCBpdCBt
ZWFucyB0aGUgZGVzdGluYXRpb24gUmFjdG9yIGlzIHN0aWxsIGFsaXZlIChpLmUuLCBpdCdzIHJ1
bm5pbmcpLg0KICAqIEluIGNvbnRyYXN0LCB3aXRoIGEgY2hhbm5lbCwgdGhlcmUncyBubyBndWFy
YW50ZWUgdGhhdCBhbnkgUmFjdG9yIGlzIHN0aWxsIGF2YWlsYWJsZSB0byByZWNlaXZlIGZyb20g
aXQuDQogICogT2YgY291cnNlLCBldmVuIHdpdGggYSBwb3J0LCB0aGVyZSdzIG5vIGd1YXJhbnRl
ZSB0aGF0IHRoZSBkZXN0aW5hdGlvbiBSYWN0b3Igd2lsbCBhY3R1YWxseSBwcm9jZXNzIHRoZSBt
ZXNzYWdlIOKAlCBpdCBtaWdodCBpZ25vcmUgaXQuDQogICogQnV0IGF0IGxlYXN0IHlvdSBkb24n
dCBuZWVkIHRvIHdvcnJ5IGFib3V0IHRoZSBSYWN0b3IgaGF2aW5nIGFscmVhZHkgdGVybWluYXRl
ZCB1bmV4cGVjdGVkbHkuDQogICogSW4gb3RoZXIgd29yZHMsIHVzaW5nIGEgcG9ydCBlbGltaW5h
dGVzIG9uZSBtYWpvciBmYWlsdXJlIGNhc2UsIG1ha2luZyB0aGUgY29tbXVuaWNhdGlvbiBtb2Rl
bCBtb3JlIHByZWRpY3RhYmxlLg0KICAqIFRoaXMgaXMgb25lIG9mIHRoZSByZWFzb25zIHdoeSBS
dWJ5IHdlbnQgd2l0aCB0aGUgIkFjdG9yIiBtb2RlbCAoaGVuY2UgdGhlIG5hbWUgUmFjdG9yKSwg
aW5zdGVhZCBvZiB0aGUgIkNTUCIgbW9kZWwuDQoqIEZhc3RlciB0aGFuIGNoYW5uZWxzIGluIGJv
dGggY3JlYXRpb24gYW5kIG1lc3NhZ2UgdHJhbnNtaXNzaW9uDQogICogV2hlbiBjcmVhdGluZyBh
IGNoYW5uZWwsIHdlIG5lZWQgdG8gcHJlcGFyZSBhIGNvbnRhaW5lciBkYXRhIHN0cnVjdHVyZS4g
V2hlbiBjcmVhdGluZyBhIHBvcnQsIGl0IGlzIGxpZ2h0d2VpZ2h0IGRhdGEgKGEgcGFpciBvZiBS
YWN0b3IgYW5kIG5ld2x5IGNyZWF0ZWQgSUQpLg0KICAqIE9uIHRoZSBjaGFubmVsIHRyYW5zbWlz
c2lvbiwgd2UgbmVlZCBjb3B5aW5nIGEgZGF0YSB0byBjaGFubmVsIGFuZCBhIGNvcHlpbmcgdG8g
dGhlIHJlY2VpdmluZyByYWN0b3IuIE9uIHRoZSBwb3J0LCBpdCBvbmx5IG5lZWRzIHRvIGNvcHkg
ZnJvbSB0aGUgc3JjIHJhY3RvciB0byB0aGUgZHN0IHJhY3Rvci4gVGhpcyBpc3N1ZSBiZWNvbWVz
IG1vcmUgc2lnbmlmaWNhbnQgZHVlIHRvIFJhY3Rvci1sb2NhbCBnYXJiYWdlIGNvbGxlY3Rpb24g
YW5kIGlzb2xhdGlvbiBvZiBvYmplY3Qgc3BhY2VzLg0KKiBFYXN5IHRvIGltcGxlbWVudC4gV2Ug
b25seSBuZWVkIHRvIGltcGxlbWVudCBgUG9ydCNyZWNlaXZlYCB0byBzeW5jaHJvbml6ZSB3aXRo
IG90aGVyIHJhY3RvcnMuDQogICogYCNzZW5kLy5yZWNlaXZlYCBpcyBlYXN5IHRvIGltcGxlbWVu
dCBiZWNhdXNlIHdlIG9ubHkgbmVlZCB0byBsb2NrIHRoZSByZWNlaXZpbmcgcmFjdG9yLg0KICAq
IGAueWllbGQvI3Rha2VgIGlzIG5vdCBlYXN5IHRvIGltcGxlbWVudCBiZWNhdXNlIHdlIG5lZWQg
dG8gbG9jayB0YWtpbmcgYW5kIHJlY2VpdmluZyByYWN0b3JzIGJlY2F1c2UgaXQgaXMgcmVuZGV6
dm91cyBzdHlsZSBzeW5jaHJvbml6YXRpb24uDQogICogYC5zZWxlY3RgIGlzIERJRkZJQ1VMVCB0
byBzdXBwb3J0IGN1cnJlbnQgc3BlYy4gTm93IENJIGlzbid0IHN0YWJsZSB5ZXQuDQogICogQSBz
aW1wbGVyIHNwZWMgcmVkdWNlcyBidWdzLCBhbmQgbWF5YmUgbGVhZHMgdG8gZmFzdGVyIGltcGxl
bWVudGF0aW9uLg0KDQpEaXNhZHZhbnRhZ2VzOg0KDQoxLiBJdCBpcyBub3QgYSB3ZWxsLWtub3du
IGNvbmNlcHQsIGVzcGVjaWFsbHkgZm9yIEdvIGxhbmd1YWdlIHVzZXJzLg0KMi4gV2UgbmVlZCBh
ZGRpdGlvbmFsIGFic3RyYWN0aW9uIGxpa2UgcHJvZHVjZXIocyktY29uc3VtZXIocykgY29uY3Vy
cmVudCBhcHBsaWNhdGlvbnMuDQoNCkZvciAoMiksIEkgd2FudCB0byBpbnRyb2R1Y2UgYW4gZXhh
bXBsZSBjb2RlLiBXZSBjYW4gd3JpdGUgYSAxLXByb2R1Y2VyLCBtdWx0aXBsZS1jb25zdW1lciBw
YXR0ZXJuIHdpdGggYSBjaGFubmVsLg0KDQpgYGBydWJ5DQojIGNoYW5uZWwgdmVyc2lvbiBvZiAx
IHByb2R1Y2VyICYgY29uc3VtZXJzDQoNCmNoID0gbmV3X2NoYW5uZWwNCg0KUk4gPSAxMCAjIG1h
a2UgMTAgY29uc3VtZXJzDQoNCmNvbnN1bWVycyA9IFJOLnRpbWVzLm1hcCBkbw0KICBSYWN0b3Iu
bmV3IGNoIGRvDQogICAgd2hpbGUgcGFyYW0gPSBjaC5yZWNlaXZlDQogICAgICB0YXNrKHBhcmFt
KQ0KICAgIGVuZA0KICBlbmQNCmVuZA0KDQp0YXNrcy5lYWNoIGRvIHx0YXNrfA0KICBjaCA8PCB0
YXNrDQplbmQNCmBgYA0KDQpXaXRoIFBvcnQsIHdlIG5lZWQgdG8gaW50cm9kdWNlIGEgbG9hZCBi
YWxhbmNpbmcgbWVjaGFuaXNtOg0KDQpgYGBydWJ5DQojIFBvcnQgdmVyc2lvbiBvZiAxIHByb2R1
Y2VyICYgY29uc3VtZXJzDQoNCmNvbnRyb2xfcG9ydCA9IFJhY3Rvcjo6UG9ydC5uZXcNCmNvbnN1
bWVycyA9IFJOLnRpbWVzLm1hcCBkbw0KICBSYWN0b3IubmV3IGNvbnRyb2xfcG9ydCBjb250cm9s
X3BvcnQgZG8gfGNvbnRyb2xfcG9ydHwNCiAgICB3aGlsZSB0cnVlDQogICAgICBjb250cm9sX3Bv
cnQgPDwgWzpyZWFkeSwgUmFjdG9yLmN1cnJlbnRdICMgcmVnaXN0ZXIgLSByZWFkeQ0KICAgICAg
cGFyYW0gPSBSYWN0b3IucmVjZWl2ZSAjIGl0IGFzc3VtZXMgdGFzayBkb2Vzbid0IHVzZSBSYWN0
b3IucmVjZWl2ZQ0KICAgICAgdGFzayhwYXJhbSkNCiAgICBlbmQNCiAgZW5kDQplbmQNCg0KdGFz
a3MuZWFjaCBkbyB8dGFza3wNCiAgY29udHJvbF9wb3J0LnJlY2VpdmUgPT4gWzpyZWFkeSwgY29u
c3VtZXJdDQogIA0KICAjIHNlbmQgYSB0YXNrIHRvIGEgcmVhZHkgY29uc3VtZXINCiAgY29uc3Vt
ZXIgPDwgdGFzaw0KZW5kDQpgYGANCg0KT2YgY291cnNlIHdlIGNhbiBtYWtlIGEgbGlicmFyeSBm
b3IgdGhhdCAobGlrZSBPVFAgb24gRXJsYW5nKS4NCg0KIyMjIERlZmF1bHQgcG9ydCBvZiBSYWN0
b3JzDQoNCkVhY2ggUmFjdG9yIGhhcyBhIGRlZmF1bHQgcG9ydCBhbmQgYFJhY3RvciNzZW5kYCBp
cyBlcXVhbCB0byBgUmFjdG9yLmN1cnJlbnQuZGVmYXVsdF9wb3J0I3NlbmRgLiBPZiBjb3Vyc2Us
IGBSYWN0b3IucmVjZWl2ZWAgaXMgZXF1YWwgdG8gYFJhY3Rvci5jdXJyZW50LmRlZmF1bHRfcG9y
dC5yZWNlaXZlYC4NCg0KRm9yIHRoZSBzaW1wbGUgY2FzZSwgd2UgY2FuIGtlZXAgdG8gdXNlIGBS
YWN0b3Ijc2VuZGAgYW5kIGBSYWN0b3IucmVjZWl2ZWANCg0KIyMjIERlcHJlY2F0aW9uIG9mIFJh
Y3RvciN0YWtlIGFuZCBSYWN0b3IueWllbGQNCg0KV2l0aCB0aGUgUG9ydCBjb25jZXB0LCB3ZSBj
YW4gZm9jdXMgc29sZWx5IG9uIHNlbmQgYW5kIHJlY2VpdmXigJR0aGF0IGlzLCBkaXJlY3QgbWFu
aXB1bGF0aW9uIG9mIGEgUmFjdG9y4oCZcyBtYWlsYm94LiBQb3J0cyBwcm92aWRlIGEgY2xlYW4g
YW5kIGZ1bmN0aW9uYWwgYWx0ZXJuYXRpdmUgdG8gYFJhY3RvciN0YWtlYCBhbmQgYFJhY3Rvci55
aWVsZGAsIG1ha2luZyB0aGVtIHVubmVjZXNzYXJ5IGluIG1vc3QgdXNlIGNhc2VzLg0KDQpNb3Jl
b3ZlciwgUG9ydHMgYXJlIHNpZ25pZmljYW50bHkgZWFzaWVyIHRvIGltcGxlbWVudCwgYXMgdGhl
eSByZXF1aXJlIG9ubHkgbG9ja2luZyB0aGUgcmVjZWl2aW5nIFJhY3Rvciwgd2hpbGUgeWllbGQv
dGFrZSBpbnZvbHZlIGNvbXBsZXggcmVuZGV6dm91cy1zdHlsZSBzeW5jaHJvbml6YXRpb24uIEJ5
IHJlbW92aW5nIHRoZXNlIHByaW1pdGl2ZXMsIHdlIGNhbiBzaW1wbGlmeSB0aGUgc3BlY2lmaWNh
dGlvbiBhbmQgcmVkdWNlIGltcGxlbWVudGF0aW9uIGNvbXBsZXhpdHnigJRlc3BlY2lhbGx5IGFy
b3VuZCBmZWF0dXJlcyBsaWtlIGBSYWN0b3Iuc2VsZWN0YCwgd2hpY2ggYXJlIG5vdG9yaW91c2x5
IGhhcmQgdG8gZ2V0IHJpZ2h0Lg0KDQojIyMgYFJhY3Rvci5zZWxlY3RgIHdpdGggcG9ydHMNCg0K
V2Ugc2hvdWxkIHdhaXQgZm9yIG11bHRpcGxlIHBvcnQgc2ltdWx0YW5lb3VzbHkgc28gYFJhY3Rv
ci5zZWxlY3QoKWAgc2hvdWxkIGFjY2VwdCBwb3J0cy4gTm93IGBSYWN0b3Iuc2VsZWN0KClgIGNh
biBhbHNvIHJlY2VpdmluZyBhbmQgeWllbGRpbmcgdGhlIHZhbHVlLCBidXQgaWYgd2UgcmVtb3Zl
IHRoZSBgI3Rha2VgIGZ1bmN0aW9uYWxpdHksIGBSYWN0b3Iuc2VsZWN0YCBvbmx5IG5lZWQgdG8g
c3VwcG9ydCBwb3J0cy4NCg0KIyMjIFdhaXQgZm9yIHRlcm1pbmF0aW9uDQoNCmBSYWN0b3IjdGFr
ZWAgaXMgZGVzaWduZWQgZnJvbSBhbiBpZGVhIG9mIGdldHRpbmcgdGVybWluYXRpb24gcmVzdWx0
IChsaWtlIGBUaHJlYWQjdmFsdWVgKS4gRm9yIHRoaXMgcHVycG9zZSwgd2UgY2FuIGludHJvZHVj
ZSBgUmFjdG9yI2pvaW5gIG9yIGBSYWN0b3IjdmFsdWVgIGxpa2UgVGhyZWFkcyBvciB3ZSBjYW4g
a2VlcCB0aGUgbmFtZSBgUmFjdG9yI3Rha2VgIGZvciB0aGlzIHB1cnBvc2UuDQoNCldlIGNhbiBt
YWtlIGBSYWN0b3Ijam9pbmAgYXMgYSBmb2xsb3dpbmcgcHNldWRvLWNvZGU6DQoNCmBgYHJ1YnkN
CmNsYXNzIFJhY3Rvcg0KICBkZWYgam9pbiAjIHdhaXQgZm9yIHRoZSB0ZXJtaW5hdGlvbg0KICAg
IG1vbml0b3IgcG9ydCA9IFBvcnQubmV3DQogICAgcG9ydC5yZWNlaXZlDQogIGVuc3VyZQ0KICAg
IG1vbml0b3IgbmlsICMgdW5yZWdpc3RlciAvIGl0IHNob3VsZCBiZSBkaXNjdXNzZWQNCiAgZW5k
DQogIA0KICAjIHdoZW4gdGhpcyByYWN0b3IgdGVybWluYXRlcywgc2VuZCBhIG1lc3NhZ2UgdG8g
dGhlIHJlZ2lzdGVyZWQgcG9ydA0KICBkZWYgbW9uaXRvciBwb3J0DQogICAgQG1vbml0b3JfcG9y
dCA9IHBvcnQNCiAgZW5kDQogIA0KICBwcml2YXRlIGRlZiBhdGV4aXQNCiAgICBAbW9uaXRvcl9w
b3J0IDw8IHRlcm1pbmF0aW9uX21lc3NhZ2UNCiAgZW5kDQplbmQNCg0KIyB0aGVyZSBhcmUgc29t
ZSBxdWVzdGlvbnMuDQojICogY2FuIHdlIHJlZ2lzdGVyIG11bHRpcGxlIHBvcnRzPw0KIyAqIHNo
b3VsZCB3ZSBzdXBwb3J0IGAjam9pbmAgYW5kIGAjdmFsdWVgIGxpa2UgdGhyZWFkcz8NCiMgICBv
ciBzaG91bGQgd2Ugc3VwcG9ydCBvbmx5IGAjam9pbmAgdG8gcmV0dXJuIHRoZSB2YWx1ZT8NCiMg
KiBvciBrZWVwIHRoaXMgbmFtZSBhcyBgI3Rha2VgPw0KDQoNClJhY3Rvci5uZXcgZG8NCiAgNDIN
CmVuZC5qb2luICM9PiA0MiAob3IgdHJ1ZT8pDQpgYGANCg0KSXQgaXMgdmVyeSBzaW1pbGFyIHRv
IGBtb25pdG9yYCBpbiBFcmxhbmcgb3IgRWxpeGlyLg0KV2UgY2FuIGFsc28gbWFrZSBhIHN1cGVy
dmlzb3IgaW4gRXJsYW5nIGxpa2UgdGhhdDoNCg0KYGBgcnVieQ0Kc3ZfcG9ydCA9IFJhY3Rvcjo6
UG9ydC5uZXcNCg0KcnMgPSBOLnRpbWVzLm1hcCBkbw0KICBSYWN0b3IubmV3IGRvDQogICAgZG9f
c29tZXRoaW5nKCkNCiAgZW5kLm1vbml0b3Igc3ZfcG9ydA0KZW5kDQoNCndoaWxlIHRlcm1pbmF0
aW9uX25vdGljZSA9IHN2X3BvcnQucmVjZWl2ZQ0KICBwIHRlcm1pbmF0aW9uX25vdGljZQ0KZW5k
DQoNCiMgV2l0aCBSYWN0b3IjdGFrZSwgd2UgY2FuIHdyaXRlIHNpbWlsYXIgY29kZSBpZiB0aGVy
ZSBpcyBubyBSYWN0b3IueWllbGQNCg0KcnMgPSBOLnRpbWVzLm1hcCBkbw0KICBSYWN0b3IubmV3
IGRvDQogICAgZG9fc29tZXRoaW5nKCkNCiAgZW5kDQplbmQNCg0Kd2hpbGUgciwgbXNnID0gUmFj
dG9yLnNlbGVjdCgqcnMpDQogIHAgW3IsIG1zZ10NCmVuZA0KYGBgDQoNCiMjIERpc2N1c3Npb24N
Cg0KIyMjIGBzZW5kYCB3aXRoIHRhZyAoc3ltYm9scykNCg0KSWYgd2UgZm9yY2UgdXNlcnMgdG8g
c2VuZCBhIHRhZ2dlZCBtZXNzYWdlIGV2ZXJ5IHRpbWUsIHdlIGNhbiBhY2hpZXZlIHRoZSBzYW1l
IGVmZmVjdCBhcyBQb3J0IGNvbmNlcHQsIGJlY2F1c2UgYSBQb3J0IGNhbiBiZSB0aG91Z2h0IG9m
IGFzIGEgY29tYmluYXRpb24gb2YgYSB0YWcgYW5kIGEgZGVzdGluYXRpb24gUmFjdG9yLg0KDQpg
YGBydWJ5DQpyID0gUmFjdG9yLm5ldyBkbw0KICBsb29wIGRvDQogICAgdGFnLCBtc2cgPSBSYWN0
b3IucmVjZWl2ZSAjIHJldHVybiAyIHZhbHVlcw0KICAgIGNhc2UgdGFnDQogICAgd2hlbiA6VEFH
DQogICAgICBwIFt0YWcsIG1zZ10NCiAgICBlbHNlDQogICAgICAjIGlnbm9yZQ0KICAgIGVuZA0K
ICBlbmQNCmVuZA0KDQpyLnNlbmQgOlRBRywgNDINCnIuc2VuZCA6VEFHRSwgODQgIyB0aGlzIHR5
cG8gYW5kIHRoZSBtZXNzYWdlIGlzIHNpbGVudGx5IGlnbm9yZWQNCmBgYA0KDQpIb3dldmVyIGl0
IGhhcyB0d28gaXNzdWVzOg0KDQoqIElmIHdlIG1ha2UgYSB0eXBvIGluIHRhZyBuYW1lLCB0aGUg
bWVzc2FnZSB3aWxsIGJlIHNpbGVudGx5IGlnbm9yZWQuDQoqIFRoZSB0YWcgbmFtZSBtYXkgY29u
ZmxpY3Qgd2l0aCB1bnJlbGF0ZWQgY29kZXMgKGxpYnJhcmllcykNCg0KIyMjIGBSYWN0b3IueWll
bGRgIGFuZCBgUmFjdG9yI3Rha2VgIHdpdGggY2hhbm5lbCByYWN0b3INCg0KSWYgd2Ugd2FudCB0
byBsZWF2ZSB0aGUgYC55aWVsZGAgYW5kIGAjdGFrZWAsIHdlIGNhbiBlbXVsYXRlIHRoZW0gd2l0
aCBjaGFubmVsIHJhY3Rvci4NCg0KYGBgcnVieQ0KY2xhc3MgUmFjdG9yDQogIGRlZiBpbml0aWFs
aXplDQogICAgQHlpZWxkX3JhY3RvciA9IFJhY3Rvci5uZXcgZG8NCiAgICAgIHRha2VycyA9IFtd
DQogICAgICB3aGlsZSB0YWcsIG1zZyA9IFJhY3Rvci5yZWNlaXZlDQogICAgICAgIGNhc2UgdGFn
DQogICAgICAgIHdoZW4gOnJlZ2lzdGVyDQogICAgICAgICAgQHRha2VycyA8PCBtc2cNCiAgICAg
ICAgd2hlbiA6dW5yZWdpc3Rlcg0KICAgICAgICAgIEB0YWtlcnMuZGVsZXRlIG1zZw0KICAgICAg
ICB3aGVuIDp5aWVsZA0KICAgICAgICAgIEB0YWtlcnMucG9wIDw8IG1zZw0KICAgICAgICBlbmQN
CiAgICAgIGVuZA0KICAgIGVuZA0KICBlbmQNCg0KICBkZWYgc2VsZi55aWVsZCBvYmoNCiAgICBA
eWllbGRfcmFjdG9yIDw8IFs6eWllbGQsIG9ial0NCiAgZW5kDQoNCiAgZGVmIHRha2UNCiAgICBA
eWllbGRfcmFjdG9yIDw8IFs6cmVnaXN0ZXIsIHBvcnQgPSBSYWN0b3I6OlBvcnQubmV3XQ0KICAg
IHBvcnQucmVjZWl2ZQ0KICBlbnN1cmUNCiAgICBAeWllbGRfcmFjdG9yIDw8IFs6dW5yZWdpc3Rl
ciwgcG9ydF0NCiAgZW5kDQplbmQNCmBgYA0KDQojIyMgT3BlbmluZyBhbmQgY2xvc2luZyB0aGUg
cG9ydA0KDQpUaGlzIHByb3Bvc2FsIGRvZXNuJ3QgY29udGFpbiBvcGVuaW5nIGFuZCBjbG9zaW5n
IHRoZSBwb3J0LCBidXQgd2UgY2FuIGRpc2N1c3MgYWJvdXQgaXQuIFRvIGludHJvZHVjZSB0aGlz
IGF0dHJpYnV0ZSwgd2UgbmVlZCB0byBtYW5hZ2Ugd2hpY2ggcG9ydHMgKHRhZ3MpIGFyZSBvcGVu
aW5nLg0KDQojIyBJbXBsZW1lbnRhdGlvbg0KDQpOb3cgdGhlIG5hdGl2ZSBpbXBsZW1lbnRhdGlv
biBpcyBub3QgZmluaXNoZWQsIGJ1dCB3ZSBjYW4gaW1wbGVtZW50IGl0IHVzaW5nIHRoZSBgUmFj
dG9yLnJlY2VpdmVfaWZgIG1lY2hhbmlzbSwgc28gd2UgZXN0aW1hdGUgdGhhdCBvbmx5IGEgZmV3
IHdlZWtzIG9mIHdvcmsgYXJlIG5lZWRlZCB0byBjb21wbGV0ZSBpdC4NCg0KIyMgU3VtbWFyeQ0K
DQpUaGlzIHByb3Bvc2FsIGludHJvZHVjZXMgdGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhbmQgZGVw
cmVjYXRpb25zLg0KDQoqIGBSYWN0b3I6OlBvcnRgDQogICogYFBvcnQjc2VuZChtc2cpYCDigJMg
c2VuZHMgYSBtZXNzYWdlIHRvIHRoZSBjcmVhdG9yIG9mIHRoZSBwb3J0Lg0KICAqIGBQb3J0I3Jl
Y2VpdmVgIOKAkyByZWNlaXZlcyBhIG1lc3NhZ2UgZnJvbSB0aGUgcG9ydC4NCiAgKiBBIHBvcnQg
aXMgYSBsaWdodHdlaWdodCBkYXRhIHN0cnVjdHVyZSAoYSBwYWlyIG9mIGEgUmFjdG9yIGFuZCBh
IHRhZykuDQoqIGBSYWN0b3Ijam9pbmAgb3IgYFJhY3RvciN2YWx1ZWAg4oCTIHRvIHdhaXQgZm9y
IFJhY3RvciB0ZXJtaW5hdGlvbiAobGlrZSBgVGhyZWFkI2pvaW5gKQ0KKiBgUmFjdG9yI21vbml0
b3JgIOKAkyB0byBvYnNlcnZlIHdoZW4gYW5vdGhlciBSYWN0b3IgdGVybWluYXRlcw0KKiBEZXBy
ZWNhdGlvbnM6DQogICogYFJhY3RvciN0YWtlYA0KICAqIGBSYWN0b3IueWllbGRgDQogICogYFJh
Y3Rvci5yZWNlaXZlX2lmYA0KDQpUaGFuayB5b3UgZm9yIHJlYWRpbmcgdGhpcyBsb25nIHByb3Bv
c2FsLiBJZiB5b3UgaGF2ZSBhbnkgdXNlIGNhc2VzIHRoYXQgY2Fubm90IGJlIGFkZHJlc3NlZCB3
aXRoIGBSYWN0b3I6OlBvcnRgLCBJJ2QgbG92ZSB0byBoZWFyIHRoZW0uDQoNCg0KUC5TLiBUaGFu
a3MgdG8gbWFtZSBmb3IgcmV2aWV3aW5nIHRoaXMgcHJvcG9zYWwgYW5kIHN1Z2dlc3RpbmcgdGhh
dCBJIHVzZSBDaGF0R1BUIHRvIGltcHJvdmUgdGhlIHdyaXRpbmcuDQoNCg0KDQotLSANCmh0dHBz
Oi8vYnVncy5ydWJ5LWxhbmcub3JnLw0KIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX18KIHJ1YnktY29yZSBtYWlsaW5nIGxpc3QgLS0gcnVieS1jb3JlQG1sLnJ1
YnktbGFuZy5vcmcKIFRvIHVuc3Vic2NyaWJlIHNlbmQgYW4gZW1haWwgdG8gcnVieS1jb3JlLWxl
YXZlQG1sLnJ1YnktbGFuZy5vcmcKIHJ1YnktY29yZSBpbmZvIC0tIGh0dHBzOi8vbWwucnVieS1s
YW5nLm9yZy9tYWlsbWFuMy9saXN0cy9ydWJ5LWNvcmUubWwucnVieS1sYW5nLm9yZy8=


In This Thread