[ruby-core:121575] [Ruby Feature#21221] Proposal to upstream ZJIT
From:
"matz (Yukihiro Matsumoto) via ruby-core" <ruby-core@...>
Date:
2025-04-08 07:10:06 UTC
List:
ruby-core #121575
SXNzdWUgIzIxMjIxIGhhcyBiZWVuIHVwZGF0ZWQgYnkgbWF0eiAoWXVraWhpcm8gTWF0c3Vtb3Rv KS4NCg0KDQpJIGFncmVlIHdpdGggbWFraW5nIFpKSVQgdXBzdHJlYW0uIEFuZCBJIGZlZWwgbm8g d29ycnkgYWJvdXQgdGhlIG1pZ3JhdGlvbiwgc2luY2UgSSB0cnVzdCB0aGUgdGVhbSB3aXRoIG1l cmdpbmcgcHJvY2Vzcy4NCkkgZG9uJ3QgdGhpbmsgaXQgd2FzIEJCVidzIGZhdWx0IHRoYXQgdGhl cmUgd2VyZSBzbyBmZXcgY29udHJpYnV0aW9ucyB0byBZSklUIGZyb20gb3V0c2lkZSBTaG9waWZ5 LCBidXQgSSdsbCBsZWF2ZSBpdCB0byBAbWF4aW1lY2IgdG8gbWFrZSB0aGUgdGVjaG5pY2FsIGNo b2ljZXMuDQoNCk1hdHouDQoNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0NCkZlYXR1cmUgIzIxMjIxOiBQcm9wb3NhbCB0byB1cHN0cmVhbSBaSklUDQpodHRwczovL2J1 Z3MucnVieS1sYW5nLm9yZy9pc3N1ZXMvMjEyMjEjY2hhbmdlLTExMjYzMQ0KDQoqIEF1dGhvcjog bWF4aW1lY2IgKE1heGltZSBDaGV2YWxpZXItQm9pc3ZlcnQpDQoqIFN0YXR1czogT3Blbg0KKiBB c3NpZ25lZTogbWF4aW1lY2IgKE1heGltZSBDaGV2YWxpZXItQm9pc3ZlcnQpDQoqIFRhcmdldCB2 ZXJzaW9uOiAzLjUNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMg QmFja2dyb3VuZA0KDQpGb3IgdGhlIHBhc3QgMyBtb250aHMsIHRoZSBZSklUIHRlYW0gYXQgU2hv cGlmeSBoYXMgYmVlbiB3b3JraW5nIG9uIGEgbmV4dC1nZW5lcmF0aW9uIFJ1YnkgSklULCB3aGlj aCB3ZSByZWZlciB0byBhcyBaSklULiAgVGhpcyBuZXcgY29tcGlsZXIgaXMgY3VycmVudGx5IGJl aW5nIGRldmVsb3BlZCBpbiBhIHByaXZhdGUgZm9yaywgd2l0aCB0aGUgaG9wZSB0aGF0IHdlIGNh biBldmVudHVhbGx5IHVwc3RyZWFtIGl0IGludG8gcnVieS9ydWJ5LiBNYXhpbWUgQ2hldmFsaWVy LUJvaXN2ZXJ0IHdpbGwgZ2l2ZSBhIHRhbGsgYXQgUnVieUthaWdpIDIwMjUgdG8gb2ZmaWNpYWxs eSBhbm5vdW5jZSB0aGUgcHJvamVjdCB0byB0aGUgUnVieSBjb21tdW5pdHkgYW5kIHRoZSBicm9h ZGVyIHB1YmxpYy4NCg0KIyBEZXNpZ24gb2YgWkpJVA0KDQpZSklUIGNvbXBpbGVzIFlBUlYgYnl0 ZWNvZGUgbW9yZSBvciBsZXNzIGRpcmVjdGx5IHRvIG1hY2hpbmUgY29kZS4gVGhpcyBoYXMgdGhl IGJlbmVmaXQgdGhhdCBZSklUIGNvbXBpbGVzIGNvZGUgZmFzdCBhbmQgdGhhdCBpdOKAmXMgYSBy ZWxhdGl2ZWx5IHNpbXBsZSBhcmNoaXRlY3R1cmUsIHdoaWNoIHdhcyBoZWxwZnVsIGluIGJ1aWxk aW5nIHRoZSBjb21waWxlciBpbmNyZW1lbnRhbGx5LiBUaGUgZG93bnNpZGUgaXMgdGhhdCBZSklU IGlzIGRpZmZpY3VsdCB0byBleHRlbmQgYW5kIGJ1aWxkIHVwb24uIEluIHBhcnRpY3VsYXIsIFlK SVQgaXMgdmVyeSBsaW1pdGVkIHdoZW4gaXQgY29tZXMgdG8gb3B0aW1pemF0aW9ucyB0aGF0IGNy b3NzIFlBUlYgaW5zdHJ1Y3Rpb24gYm91bmRhcmllcy4gV2XigJl2ZSBrbm93biBmb3Igc29tZSB0 aW1lIHRoYXQgaW4gb3JkZXIgdG8gdW5sb2NrIGhpZ2hlciBsZXZlbHMgb2YgcGVyZm9ybWFuY2Us IGEgUnVieSBKSVQgd291bGQgbmVlZCB0aGUgYWJpbGl0eSB0byBwZXJmb3JtIG1vcmUgYWdncmVz c2l2ZSBpbmxpbmluZywgYnV0IGl0IGlzIGNoYWxsZW5naW5nIHRvIGNsZWFubHkgZG8gdGhpcyBp biBZSklULg0KDQpUaGUgbWFpbiBpbm5vdmF0aW9uIG9mIFpKSVQgaXMgdGhhdCBpdCBoYXMgaXRz IG93biBTdGF0aWMgU2luZ2xlIEFzc2lnbm1lbnQgKFNTQSkgSW50ZXJtZWRpYXRlIFJlcHJlc2Vu dGF0aW9uIChJUikuIFlBUlYgYnl0ZWNvZGUgaXMgY29udmVydGVkIGludG8gdGhpcyBJUiwgd2hp Y2ggY2FuIHRoZW4gYmUgb3B0aW1pemVkIHVzaW5nIG11bHRpcGxlIG9wdGltaXphdGlvbiBwYXNz ZXMuIFRoZXNlIHBhc3NlcyBjYW4gYmUgb3J0aG9nb25hbCBhbmQgbW9kdWxhciB0byBzb21lIGRl Z3JlZSwgd2hpY2ggbWFrZXMgdGhlIGRlc2lnbiBvZiB0aGUgY29tcGlsZXIgZWFzaWVyIHRvIHJl YXNvbiBhYm91dCwgZWFzaWVyIHRvIGV4dGVuZCBhbmQgYWxzbyBvcGVucyB1cCB0aGUgcG9zc2li aWxpdHkgb2YgaGF2aW5nIG11bHRpcGxlIEpJVCBjb21waWxhdGlvbiB0aWVycyBpbiB0aGUgZnV0 dXJlLCB3aGljaCBpcyBzb21ldGhpbmcgdGhhdCBib3RoIE1hdHogYW5kIFRha2FzaGkgS29rdWJ1 biBoYXZlIGhvcGVkIHRvIHNlZSBpbiBhIFJ1YnkgSklUIGZvciBzb21lIHRpbWUuDQoNCkluIGFk ZGl0aW9uIHRvIHRoaXMsIHdlIGFyZSBtb3ZpbmcgdG8gYSBtb3JlIHRyYWRpdGlvbmFsIG1ldGhv ZC1iYXNlZCBKSVQgY29tcGlsZXIgZGVzaWduLiBJIChNYXhpbWUpIGhhdmUgaGFkIHRoZSBjaGFu Y2UgdG8gaGVscCBidWlsZCBhbmQgZGVwbG95IExhenkgQmFzaWMgQmxvY2sgVmVyc2lvbmluZyAo TEJCViksIGFuIG9mZnNob290IG9mIG15IFBoRCByZXNlYXJjaCBpbnRvIGEgcHJvZHVjdGlvbiBj b21waWxlciwgYW4gb3Bwb3J0dW5pdHkgd2hpY2ggSeKAmW0gdmVyeSB0aGFua2Z1bCBmb3IuIEhv d2V2ZXIsIEkgZmVlbCBsaWtlIFpKSVQgbWlnaHQgYmVuZWZpdCBmcm9tIGhhdmluZyBhIGNvbXBp bGVyIGFyY2hpdGVjdHVyZSB0aGF0IGlzIG1vcmUg4oCcc3RhbmRhcmTigJ0uIFdpdGggWUpJVCwg d2XigJl2ZSBoYWQgdmVyeSBmZXcgY29udHJpYnV0aW9ucyBmcm9tIFJ1YnkgQ29yZSBjb250cmli dXRvcnMgb3V0c2lkZSBvZiBTaG9waWZ5LiBJ4oCZbSBob3BpbmcgdGhhdCBpZiB3ZSBidWlsZCBh IGNvbXBpbGVyIHdpdGggYW4gYXJjaGl0ZWN0dXJlIHRoYXQgaXMgbW9yZSB0ZXh0Ym9vay1saWtl LCB3ZSBjb3VsZCBoYXZlIGEgcHJvamVjdCB0aGF0IGlzIG1vcmUgYXBwcm9hY2hhYmxlIGZvciBu ZXcgY29udHJpYnV0b3JzIGFuZCB0aHVzIG1vcmUgaW5jbHVzaXZlIG9mIG90aGVyIFJ1YnkgY29y ZSBtZW1iZXJzIG91dHNpZGUgb2YgU2hvcGlmeSwgd2hpY2ggd291bGQgYmUgZ3JlYXQgZm9yIHRo ZSBsb25nLXRlcm0gZnV0dXJlIG9mIFJ1YnkuDQoNCiMgQ3VycmVudCBTdGF0dXMNCg0KSXQgaXMg c3RpbGwgZWFybHkgZGF5cyBmb3IgWkpJVC4gV2UgYXJlIG9ubHkgMyBtb250aHMgaW50byBpdHMg ZGV2ZWxvcG1lbnQuIEFzIHN1Y2gsIFpKSVQgaXMgY3VycmVudGx5IHZlcnkgbXVjaCBpbmNvbXBs ZXRlIGFuZCBjYW4gb25seSBydW4gc21hbGwgdGVzdHMgYW5kIG1pY3JvYmVuY2htYXJrcy4gTm9u ZXRoZWxlc3MsIHdlIHdvdWxkIHN0aWxsIGxpa2UgdG8gdXBzdHJlYW0gaXQgYmVjYXVzZSBkZXZl bG9waW5nIGluIGEgZm9yayBtYWtlcyBpdCBtdWNoIGhhcmRlciB0byBrZWVwIHVwIHdpdGggdXBz dHJlYW0gY2hhbmdlcyBpbiBSdWJ5LiBXZeKAmXJlIGhvcGluZyB0byBicmluZyBpdCBtdWNoIGZh cnRoZXIgYWxvbmcgdGhpcyB5ZWFyLCBhbmQgd2UgYmVsaWV2ZSB0aGF0IFpKSVQgd2lsbCBiZSBm YWlybHkgdW5pbnRydXNpdmUgaW4gdGhlIHVwc3RyZWFtIHJlcG8gZ2l2ZW4gdGhhdCBpdCB3aWxs IGhhdmUgbm8gbW9yZSBkZXBlbmRlbmNpZXMgdGhhbiBZSklULCBhbmQgaXQgd2lsbCBhbHNvIGJl IGd1YXJkZWQgYnkgYSBjb21tYW5kLWxpbmUgc3dpdGNoLg0KUnVieSAzLjUgLyAyMDI1IE9iamVj dGl2ZXMNCk91ciBnb2FsIGZvciB0aGUgZW5kIG9mIHRoZSB5ZWFyIGlzIHRvIGJyaW5nIFpKSVQg YXBwcm94aW1hdGVseSBhdCBwYXJpdHkgd2l0aCBZSklUIGluIHRlcm1zIG9mIHBlcmZvcm1hbmNl LiBXZSBleHBlY3QgdGhhdCBpdCB3aWxsIGJlIHJlbGF0aXZlbHkgZWFzeSB0byBvdXRwZXJmb3Jt IFlKSVQgb24gc21hbGwgbWljcm9iZW5jaG1hcmtzLCBidXQgdGhhdCBtYXRjaGluZyBZSklU4oCZ cyBwZXJmb3JtYW5jZSBhY3Jvc3MgbGFyZ2VyIFJ1YnkgcHJvZ3JhbXMgd2lsbCB0YWtlIHNldmVy YWwgbW9udGhzIGJlY2F1c2Ugb2YgdGhlIGJyZWFkdGggb2YgUnVieSBmZWF0dXJlcyB1c2VkLiBJ dCBpcyBub24tdHJpdmlhbCB0byBlZmZpY2llbnRseSBoYW5kbGUgbWVnYW1vcnBoaWMgY2FsbCBz aXRlcyBtYWtpbmcgdXNlIG9mIGtleXdvcmQgYXJndW1lbnRzLCBmb3IgaW5zdGFuY2UuDQoNCkl0 IHNob3VsZCBub3QgYmUgZGlmZmljdWx0IHRvIGJyaW5nIFpKSVQgYXQgcGFyaXR5IHdpdGggWUpJ VCBpbiB0ZXJtcyBvZiBzdXBwb3J0ZWQvdW5zdXBwb3J0ZWQgUnVieSBmZWF0dXJlcywgYmVjYXVz ZSB0aGUgSklUIGNvbXBpbGVyIGNhbiBhbHdheXMgZmFsbCBiYWNrIHRvIHRoZSBpbnRlcnByZXRl ciBmb3IgYW55IGZlYXR1cmUgaXQgZG9lc27igJl0IHN1cHBvcnQuDQoNClNvbWUgZmVhdHVyZXMg d2UgYWltIHRvIGltcGxlbWVudC9jb21wbGV0ZSBpbiB0aW1lIGZvciBSdWJ5IDMuNToNCi0gRmFz dCBKSVQtdG8tSklUIGNhbGxzIHVzaW5nIGEgY3VzdG9tIGNhbGxpbmcgY29udmVudGlvbg0KLSBQ b2x5bW9ycGhpYyBpbmxpbmUgY2FjaGVzDQotIFN1cHBvcnQgZm9yIGZ1bGwgZGVvcHRpbWl6YXRp b24gKGUuZy4gZm9yIFRyYWNlUG9pbnQpDQotIEFiaWxpdHkgdG8gZGVvcHRpbWl6ZSBzaW5nbGUg ZnVuY3Rpb25zIChlLmcuIG1ldGhvZCByZWRlZmluZWQsIGNhbGxlciBnZXRzIGRlb3B0aW1pemVk KQ0KLSBTaWRlLWV4aXQgbXVjaCBsZXNzIG9mdGVuIHRoYW4gWUpJVCAoY3J1Y2lhbCBmb3IgZ29v ZCBwZXJmb3JtYW5jZSkNCi0gQWJpbGl0eSB0byBzZXJpYWxpemUgbWFjaGluZSBjb2RlDQotIERl YWQtY29kZSBlbGltaW5hdGlvbiwgY29uc3RhbnQgcHJvcGFnYXRpb24NCi0gRnVzaW9uIG9mIGNv bXBhcmlzb24gYW5kIGJyYW5jaCBpbnN0cnVjdGlvbnMNCg0KU3RyZXRjaCBnb2FscyBhbmQgbG9u Z2VyLXRlcm0gZ29hbHM6DQotIFN1cHBvcnQgdHdvIEpJVCBjb21waWxhdGlvbiB0aWVycw0KLSBB Z2dyZXNzaXZlIGlubGluaW5nIG9mIFJ1YnkgY2FsbHMNCi0gT3B0aW1pemUgR0MgYWxsb2NhdGlv bnMNCi0gQWxsb2NhdGlvbiBlbGlzaW9uIHRvIHNwZWVkIHVwIGFsbG9jYXRpb25zIGFuZCByZWR1 Y2UgR0MgcHJlc3N1cmUNCg0KV2UgYXJlIGN1cnJlbnRseSB1c2luZyBhIG1vZGlmaWVkL2ltcHJv dmVkIHZlcnNpb24gb2YgdGhlIFlKSVQgYmFja2VuZCB0byBnZW5lcmF0ZSBtYWNoaW5lIGNvZGUu IFRoaXMgbWVhbnMgWkpJVCBpcyBjb21pbmcgb3V0IG9mIHRoZSBnYXRlIHdpdGggc3VwcG9ydCBm b3IgYm90aCB4ODYtNjQgYW5kIGFybTY0LCBhcyBZSklUIGRpZC4NCg0KVGhlIGFiaWxpdHkgdG8g c2VyaWFsaXplIG1hY2hpbmUgY29kZSBpcyBzb21ldGhpbmcgdGhhdCB3ZSBob3BlIHRvIGJlIGFi bGUgdG8gaW1wbGVtZW50IGluIFpKSVQuIFRoaXMgd291bGQgYWxsb3cgdXMgdG8gc2F2ZSBjb21w aWxlZCBjb2RlIGFuZCByZXVzZSBpdCBpbiBmdXR1cmUgZXhlY3V0aW9ucyBvZiBhIGdpdmVuIHBy b2dyYW0uIFRoaXMgd291bGQgZW5hYmxlIGZhc3RlciBzdGFydHVwIHRpbWVzLiBXZSBrbm93IGZy b20gZXhwZXJpZW5jZSB0aGF0IHRoaXMgaXMgaW1wb3J0YW50IGluIHByb2R1Y3Rpb24gZW52aXJv bm1lbnRzIHN1Y2ggYXMgU2hvcGlmeeKAmXMgd2hlcmUgY29kZSBjYW4gYmUgKHJlKWRlcGxveWVk IHNldmVyYWwgdGltZXMgYSBkYXksIGJ1dCBpdCBhbHNvIG1ha2VzIHNlbnNlIG9uIGEgc21hbGxl ciBzY2FsZSB3aGVyZSBpbmRpdmlkdWFscyBydW4gY29kZSBvbiBhIHBlcnNvbmFsIGNvbXB1dGVy IGFuZCBjYW4gYmVuZWZpdCBmcm9tIHNvZnR3YXJlIHN0YXJ0aW5nIHVwIGZhc3Rlci4NCg0KIyBN ZXJnaW5nIExvZ2lzdGljcw0KDQpMaWtlIGl0cyBwcmVkZWNlc3NvciwgWkpJVCBpcyB3cml0dGVu IGluIFJ1c3QsIGFuZCBoYXMgdmVyeSBmZXcgZGVwZW5kZW5jaWVzIGJ5IGRlc2lnbi4gSW4gcGFy dGljdWxhciwgdGhlcmUgYXJlIG5vIGV4dGVybmFsIGRlcGVuZGVuY2llcyBvdXRzaWRlIG9mIHRo ZSBSdXN0IGNvbXBpbGVyIChydXN0YykgdG8gYnVpbGQgWkpJVCB3aXRoIFJ1YnkuDQoNCkdpdmVu IHRoYXQgaXQgaXMgdmVyeSBlYXJseSBpbiBaSklU4oCZcyBkZXZlbG9wbWVudCBwcm9jZXNzLCB3 ZSB3b3VsZCBsaWtlIHRvIHVwc3RyZWFtIFpKSVQgd2l0aG91dCByZXBsYWNpbmcgWUpJVCwgc28g YXMgdG8gZW5zdXJlIHRoYXQgUnVieSAzLjUgc2hpcHMgd2l0aCBhIHdlbGwtdGVzdGVkLCBwcm9k dWN0aW9uLXJlYWR5IEpJVC4gQXMgd2l0aCBZSklULCB3ZSB3b3VsZCBsaWtlIHRvIHN1Z2dlc3Qg dGhhdCBaSklUIHNob3VsZCBiZSBndWFyZGVkIGJ5IGEgLS16aml0IGNvbW1hbmQtbGluZSBzd2l0 Y2guIFNpbmNlIHVzaW5nIHRoZSBjb21waWxlciBpcyBvcHQtaW4sIHRoZXJlIGlzIHZlcnkgbGl0 dGxlIHJpc2sgZm9yIHRoZSBhdmVyYWdlIFJ1YnkgdXNlci4gV2UgY2FuIGFkanVzdCB0aGUgd2F5 IHdlIGFkdmVydGlzZSBaSklUIGF0IHRoZSB0aW1lIG9mIHRoZSBSdWJ5IDMuNSByZWxlYXNlIGFu ZCBob3cgbXVjaCB3ZSB3YW50IHRoZSBicm9hZGVyIFJ1YnkgY29tbXVuaXR5IHRvIHRyeSBpdCBi YXNlZCBvbiBpdHMgbGV2ZWwgb2YgbWF0dXJpdHkgYXQgdGhhdCBwb2ludC4gSWYgWkpJVCBpcyBu b3Qgc3VmZmljaWVudGx5IG1hdHVyZSwgd2UgY2FuIHNpbXBseSB0ZWxsIHBlb3BsZSB0aGF0IGl0 IGlzIGV4cGVyaW1lbnRhbCBhbmQgb25seSBmb3IgZW50aHVzaWFzdHMsIGFuZCByZWNvbW1lbmQg dGhhdCB0aGV5IHVzZSBZSklUIGluc3RlYWQuDQoNCldlIGFyZSBjdXJyZW50bHkgZGV2ZWxvcGlu ZyBaSklUIHVzaW5nIFJ1c3QgMS44NS4wIHNvIHRoYXQgd2UgY2FuIHVzZSB0aGUgMjAyNCBlZGl0 aW9uIG9mIFJ1c3QuIFRoaXMgc2hvdWxkbuKAmXQgYmUgYSBwcm9ibGVtIHNpbmNlIFJ1c3QgY2Fu IGVhc2lseSBiZSBpbnN0YWxsZWQgdXNpbmcgdGhlIHJ1c3R1cCB0b29sLCBhbmQgaWYgYSBzdWZm aWNpZW50bHkgcmVjZW50IFJ1c3QgY29tcGlsZXIgaXMgbm90IGF2YWlsYWJsZSwgQ1J1YnkgY2Fu IHN0aWxsIGJ1aWxkIHdpdGhvdXQgWkpJVCwgb3Igd2l0aCBZSklUIG9ubHkgKFlKSVQgcmVxdWly ZXMgcnVzdGMgMS41OC4wKS4NCg0KSW4gdGVybXMgb2YgYnVpbGQgc3RyYXRlZ3ksIGlmIGEgcmVj ZW50IHZlcnNpb24gb2YgdGhlIFJ1c3QgY2FyZ28gdG9vbCBpcyBpbnN0YWxsZWQsIGl0IG1heSBi ZSBwb3NzaWJsZSB0byBhdXRvbWF0aWNhbGx5IGJ1aWxkIGJvdGggWUpJVCBhbmQgWkpJVCBpbiB0 aGUgc2FtZSBiaW5hcnkuIE90aGVyd2lzZSwgWUpJVCBjb3VsZCBiZSBidWlsdCB3aXRob3V0IFpK SVQgYXMgbG9uZyBhcyBydXN0YyAxLjU4LjAgb3IgbW9yZSBhIHJlY2VudCB2ZXJzaW9uIGlzIGF2 YWlsYWJsZS4gSWYgbmVpdGhlciBpcyBhdmFpbGFibGUsIHRoZW4gQ1J1YnkgY2FuIGJlIGJ1aWx0 IHdpdGhvdXQgZWl0aGVyIEpJVCBhcyBhIGZhbGxiYWNrLiBBbm90aGVyIHBvc3NpYmlsaXR5LCBp ZiB3ZSB3YW50IHRvIGJlIG1vcmUgY29uc2VydmF0aXZlIGZvciBSdWJ5IDMuNSwgaXMgdG8gb25s eSBlbmFibGUgYnVpbGRpbmcgWkpJVCBpZiBjb25maWd1cmUgaXMgcnVuIHdpdGggYW4gZXhwbGlj aXQgLS1lbmFibGUtemppdC4gV2UgY2FuIHBvdGVudGlhbGx5IG1ha2UgdGhpcyBkZWNpc2lvbiBj bG9zZXIgdG8gdGhlIGVuZCBvZiB0aGUgeWVhci4NCg0KVGhlIHRpbWVsaW5lIGZvciB1cHN0cmVh bWluZyB3b3VsZCBiZSBpbiB0aGUgNCB0byA2IHdlZWtzIGZvbGxvd2luZyBSdWJ5S2FpZ2kuIFRv IG1lcmdlIFpKSVQgdXBzdHJlYW0sIHdlIHdpbGwgcmViYXNlIHRoZSBjb21taXRzIG9uIHJ1Ynkv cnVieeKAmHMgbWFzdGVyIGJyYW5jaCBhbmQgZ2VuZXJhbGx5IHByZXNlcnZlIHRoZSBjb21taXQg aGlzdG9yeS4gU29tZSBjb21taXQgbWVzc2FnZXMgd2lsbCBiZSBjbGVhbmVkIHVwIGFuZCBpbXBy b3ZlZCBwcmlvciB0byBtZXJnaW5nLiBTb21lIGNvbW1pdHMgd2hpY2ggYXJlIGxvZ2ljYWxseSBy ZWxhdGVkIG1heSBiZSBzcXVhc2hlZCB0b2dldGhlci4gV2Ugd2lsbCBvbmx5IGVuYWJsZSBhIHNt YWxsIHN1YnNldCBvZiBDSSB0ZXN0cyBmb3IgWkpJVCBhdCBmaXJzdCwgc28gYXMgdG8ga2VlcCBh bGwgdGVzdHMgcGFzc2luZy4NCg0KDQoNCg0KDQotLSANCmh0dHBzOi8vYnVncy5ydWJ5LWxhbmcu b3JnLw0KIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KIHJ1 YnktY29yZSBtYWlsaW5nIGxpc3QgLS0gcnVieS1jb3JlQG1sLnJ1YnktbGFuZy5vcmcKIFRvIHVu c3Vic2NyaWJlIHNlbmQgYW4gZW1haWwgdG8gcnVieS1jb3JlLWxlYXZlQG1sLnJ1YnktbGFuZy5v cmcKIHJ1YnktY29yZSBpbmZvIC0tIGh0dHBzOi8vbWwucnVieS1sYW5nLm9yZy9tYWlsbWFuMy9s aXN0cy9ydWJ5LWNvcmUubWwucnVieS1sYW5nLm9yZy8=