[ruby-core:115007] [Ruby master Feature#19842] Introduce M:N threads
From:
"byroot (Jean Boussier) via ruby-core" <ruby-core@...>
Date:
2023-10-11 18:30:44 UTC
List:
ruby-core #115007
SXNzdWUgIzE5ODQyIGhhcyBiZWVuIHVwZGF0ZWQgYnkgYnlyb290IChKZWFuIEJvdXNzaWVyKS4N DQoNDQoNDQrwn5GNDQ0KDQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQ0NCkZlYXR1cmUgIzE5ODQyOiBJbnRyb2R1Y2UgTTpOIHRocmVhZHMNDQpodHRwczovL2J1Z3Mu cnVieS1sYW5nLm9yZy9pc3N1ZXMvMTk4NDIjY2hhbmdlLTEwNDg3NA0NCg0NCiogQXV0aG9yOiBr bzEgKEtvaWNoaSBTYXNhZGEpDQ0KKiBTdGF0dXM6IE9wZW4NDQoqIFByaW9yaXR5OiBOb3JtYWwN DQoqIEFzc2lnbmVlOiBrbzEgKEtvaWNoaSBTYXNhZGEpDQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQ0NClRoaXMgdGlja2V0IHByb3Bvc2VzIHRvIGludHJvZHVjZSBN Ok4gdGhyZWFkcyB0byBpbXByb3ZlIFRocmVhZHMvUmFjdG9ycyBwZXJmb3JtYW5jZS4NDQoNDQoj IyBCYWNrZ3JvdW5kDQ0KDQ0KUnVieSB0aHJlYWRzIChSVCBpbiBzaG9ydCkgYXJlIGltcGxlbWVu dGVkIGZyb20gb2xkIFJ1YnkgdmVyc2lvbnMgYW5kIHRoZXkgaGF2ZSB0aGUgZm9sbG93aW5nIGZl YXR1cmVzOg0NCg0NCiogQ2FuIGJlIGNyZWF0ZWQgd2l0aCBzaW1wbGUgbm90YXRpb24gYFRocmVh ZC5uZXd7fWANDQoqIENhbiBiZSBzd2l0Y2hlZCB0byBhbm90aGVyIHJlYWR5IFJ1YnkgdGhyZWFk IGJ5Og0NCiAgKiBUaW1lLXNsaWNlLg0NCiAgKiBJL08gYmxvY2tpbmcuDQ0KICAqIFN5bmNocm9u aXphdGlvbiBzdWNoIGFzIE11dGV4IGZlYXR1cmVzLg0NCiAgKiBBbmQgb3RoZXIgYmxvY2tpbmcg cmVhc29ucy4NDQoqIENhbiBiZSBpbnRlcnJ1cHRpYmxlIGJ5Og0NCiAgKiBPUy1kZWxpdmVyIHNp Z25hbHMgKG9ubHkgZm9yIHRoZSBtYWluIHRocmVhZCkuDQ0KICAqIGBUaHJlYWQja2lsbGAuDQ0K ICAqIGBUaHJlYWQjcmFpc2VgLg0NCiogQ2FuIGJlIHRlcm1pbmF0ZWQgYnk6DQ0KICAqIHRoZSBl bmQgb2YgZWFjaCBSdWJ5IHRocmVhZC4NDQogICogdGhlIGVuZCBvZiB0aGUgbWFpbiB0aHJlYWQg KGFuZCBvdGhlciBSdWJ5IHRocmVhZHMgYXJlIGtpbGxlZCkuDQ0KDQ0KUnVieSAxLjggYW5kIGVy bGllciB2ZXJzaW9ucyB1c2VzIE06MSB0aHJlYWRzIChncmVlbiB0aHJlYWRzLCB1c2VyIGxldmVs IHRocmVhZHMsIC4uLi4gdGhlIHdvcmQgMTpOIHRocmVhZHMgaXMgbW9yZSBwb3B1bGFyIGJ1dCB0 byBtYWtlIHRoaXMgZXhwbGFuYXRpb24gY29uc2lzdGVudCBJIHVzZSAiTToxIiB0ZXJtIGhlcmUp IHdoaWNoIG1hbmFnZXMgbXVsdGlwbGUgUnVieSB0aHJlYWRzIG9uIDEgbmF0aXZlIHRocmVhZC4N DQoNDQooTmF0aXZlIHRocmVhZHMgYXJlIHByb3ZpZGVkIGJ5IEMgaW50ZXJmYWNlcyBzdWNoIGFz IFB0aHJlYWRzLiBJbiBtYW55IGNhc2VzLCBuYXRpdmUgdGhyZWFkcyBhcmUgT1MgdGhyZWFkcywg YnV0IHRoZXJlIGFyZSBhbHNvIHVzZXItbGV2ZWwgaW1wbGVtZW50YXRpb25zLCBzdWNoIGFzIHVz ZXItbGV2ZWwgcHRocmVhZCBsaWJyYXJpZXMgaW4gdGhlb3J5LiBUaGVyZWZvcmUsIHRoZXkgYXJl IHJlZmVycmVkIHRvIGFzIG5hdGl2ZSB0aHJlYWRzIGluIHRoaXMgYXJ0aWNsZSBhbmQgTlQgaW4g c2hvcnQpDQ0KDQ0KSWYgYSBSdWJ5IHRocmVhZCBSVDEgYmxvY2tlZCBiZWNhdXNlIG9mIGEgSS9P IG9wZXJhdGlvbiwgUnVieSBpbnRlcnByZXRlciBzd2l0Y2hlcyB0byB0aGUgbmV4dCByZWFkeSBS dWJ5IHRocmVhZCBSVDIuIFRoZSBJL08gb3BlcmF0aW9uIHdpbGwgYmUgbW9uaXRvcnMgYnkgYSBg c2VsZWN0KClgIChvciBzaW1pbGFyKSBmdW5jdGlvbmFsaXR5IGFuZCBpZiB0aGUgSS9PIGlzIHJl YWR5LCBSVDEgaXMgbWFya2VkIGFzIGEgcmVhZHkgdGhyZWFkIGFuZCBSVDEgd2lsbCBiZSByZXN1 bWVkIHNvb24uIEhvd2V2ZXIsIHdoZW4gYSBSdWJ5IHRocmVhZCBpc3N1ZXMgc29tZSBvdGhlciBi bG9ja2luZyBvcGVyYXRpb25zIHN1Y2ggYXMgYGdldGhvc3RieW5hbWUoKWAsIFJ1YnkgaW50ZXJw cmV0ZXIgY2FuIG5vdCBzd3RpY2ggdG8gYW55IG90aGVyIFJ1YnkgdGhyZWFkIHdoaWxlIGBnZXRo b3N0YnluYW1lKClgIGlzIG5vdCBmaW5pc2hlZC4NDQoNDQpXZSBuYW1lZCB0d28gdHlwZXMgYmxv Y2tpbmcgb3BlcmF0aW9uczoNDQoNDQoqIE1hbmFnZWQgYmxvY2tpbmcgb3BlcmF0aW9ucw0NCiAg KiBJL08gKG1vc3Qgb2YgcmVhZC93cml0ZSkNDQogICAgKiBtYW5hZ2UgYnkgSS9PIG11bHRpcGxl eGluZyBBUEkgKHNlbGVjdCwgcG9sbCwgZXBvbGwsIGtxdWV1ZSwgSU9DUCwgaW9fdXJpbmcsIC4u LikNDQogICogU2xlZXBpbmcNDQogICogU3luY2hyb25pemF0aW9uIChNdXRleCwgUXVldWUsIC4u LikNDQoqIFVubWFuYWdlZCBvcGVyYXRpb25zDQ0KICAqIEFsbCBvdGhlciBibG9ja2luZyBvcGVy YXRpb25zIG5vdCBsaXN0ZWQgYWJvdmUsIHdyaXR0ZW4gaW4gQw0NCiAgICAqIEh1Z2UgbnVtYmVy IGNhbGN1bGF0aW9uIGxpa2UgYEJpZ251bSMqYA0NCiAgICAqIEROUyBsb29rdXANDQogICAgKiBJ L08gKGNhbiBub3QgZGV0ZWN0IGJsb2NrLWFibGUgb3Igbm90IGJ5IG11bHRpcGxleGluZyBBUEkp DQ0KICAgICAgKiBvcGVuIG9uIEZJRk8sIGNsb3NlIG9uIE5GUywgLi4uDQ0KICAgICogZmxvY2sg YW5kIG90aGVyIGxvY2tpbmcgbWVjaGFuaXNtDQ0KICAgICogbGlicmFyeSBjYWxsIHdoaWNoIHVz ZXMgYmxvY2tpbmcgb3BlcmF0aW9ucw0NCiAgICAgICogYGxpYmZvb2AgaGFzIGBmb29fZnVuYygp YCBhbmQgYGZvb19mdW5jKClgIHdhaXRzIEROUyBsb29rdXAuIEEgUnVieSBleHRlbnNpb24gYGZv by1ydWJ5YCBjYW4gY2FsbCBgZm9vX2Z1bmMoKWAuDQ0KDQ0KV2l0aCB0aGVzZSB0ZXJtcyB3ZSBj YW4gc2F5IHRoYXQgTToxIHRocmVhZHMgY2FuIHN1cG9ydCBtYW5hZ2VkIGJsb2NraW5nIG9wZXJh dGlvbnMgYnV0IGNhbiBub3Qgc3VwcG9ydCB1bm1hbmFnZWQgb3BlcmF0aW9ucyAoY2FuIG5vdCBt YWtlIHByb2dyZXNzIG90aGVyIFJ1YnkgdGhyZWFkcykgd2l0aG91dCBmdXJ0aGVyIHRyaWNrcy4N DQoNDQpOb3RlIHRoYXQgaWYgdGhlIGBzZWxlY3QoKWAtbGlrZSBzeXN0ZW0gY2FsbHMgc2F5IGEg YGZkYCBpcyByZWFkeSwgYnV0IHRoZSBJL08gb3BlYXJ0aW9uIGZvciBgZmRgIGNhbiBiZSBibG9j a2VkIGJlY2F1c2Ugb2Ygc29tZSBjb250ZW50aW9uIChyZWFkIGJ5IGFub3RoZXIgdGhyZWFkIG9y IHByb2Nlc3MsIGZvciBleGFtcGxlKS4NDQoNDQpNOjEgdGhyZWFkcyBoYXMgYW5vdGhlciBkaXNh ZHZhbnRhZ2UgdGhhdCBpdCBjYW4gbm90IHJ1biBpbiBwYXJhbGxlbCBiZWNhdXNlIG9ubHkgYSBu YXRpdmUgdGhyZWFkIGlzIHVzZWQuDQ0KDQ0KRnJvbSBSdWJ5IDEuOSB3ZSBoYWQgaW1wbGVtZW50 ZWQgMToxIHRocmVhZCB3aGljaCBtZWFucyBhIFJ1YnkgdGhyZWFkIGhhcyBhIGNvcnJlc3BvbmRp bmcgbmF0aXZlIHRocmVhZC4gVG8gbWFrZSBpbXBsZW1lbnRhdGlvbiBlYXN5IHdlIGFsc28gaW50 cm9kdWNlZCBhIEdWTC4gT25seSBhIFJ1YnkgdGhyZWFkIGFjcXVpcmVzIEdWTCBjYW4gcnVuLiBX aXRoIDE6MSBtb2RlbCwgd2UgY2FuIHN1cHBvcnQgbWFuYWdlZCBibG9ja2luZyBvcHJhdGlvbnMg YW5kIHVubWFuYWdlZCBibG9ja2luZyBvcGVyYXRpb25zIGJ5IHJlbGVhc2luZyBHVkwuIFdoZW4g YSBSdWJ5IHRocmVhZCB3YW50IHRvIGlzc3VlIGEgYmxvY2tpbmcgb3BlcmF0aW9uLCB0aGUgUnVi eSB0aHJlYWQgcmVsZWFzZXMgR1ZMIGFuZCBhbm90aGVyIHJlYWR5IFJ1YnkgdGhyZWFkcyBjb250 aW51ZSB0byBydW4uIFdlIGRvbid0IGNhcmUgdGhlIGJsb2NraW5nIG9wZXJhdGlvbiBpcyBtYW5h Z2VkIG9yIHVubWFuYWdlZC4NDQoNDQooV2UgY2FuIG5vdCBtYWtlIHNvbWUgb2YgdW5tYW5hZ2Vk IGJsb2NraW5nIG9wZXJhdGlvbnMgaW50ZXJydXB0aWJsZSAoc3RvcCBieSBDdHJsLUMgZm9yIGV4 YW1wbGUpKS4NDQoNDQpBZHZhbnRhZ2VzIG9mIDE6MSB0aHJlYWRzIHRvIHRoZSBNOjEgdGhyZWFk cyBpczoNDQoNDQoqIEVhc3kgdG8gaGFuZGxlIGJsb2NraW5nIG9wZXJhdGlvbnMgYnkgcmVsZWFz aW5nIEdWTC4NDQoqIFdlIGNhbiB1dGlsaXplIHBhcmFsbGVsaXNtIHdpdGggbXVsdGlwbGUgbmF0 aXZlIHRocmVhZHMgYnkgcmVsZWFzaW5nIEdWTC4NDQoNDQpEaXNhZHZhbnRhZ2VzIG9mIDE6MSB0 aHJlYWRzIHRvIHRoZSBNOjEgdGhyZWFkcyBpczoNDQoNDQoqIE92ZXJoZWFkIHRvIG1ha2UgbWFu eSBuYXRpdmUgdGhyZWFkcyBmb3IgbWFueSBSdWJ5IHRocmVhZHMNDQogICogV2UgY2FuIG5vdCBt YWtlIGh1Z2UgbnVtYmVyIG9mIFJ1YnkgdGhyZWFkcyBhbmQgUmFjdG9ycyBvbiAxOjEgdGhyZWFk cy4NDQoqIFRocmVhZCBzd2l0Y2hpbmcgb3ZlcmhlYWQgYnkgR1ZMIGJlY2F1c2UgaW50ZXItY29y ZSBjb21tdW5pY2F0aW9uIGlzIG5lZWRlZC4NDQoNDQpGcm9tIFJ1YnkgMy4wIHdlIGludHJvZHVj ZWQgZmliZXIgc2NoZWR1bGVyIG1lY2hhbmlzbSB0byBtYWludGFpbiBtdWx0aXBsZSBmaWJlcnMg DQ0KDQ0KRGlmZmVyZW5jZXMgYmV0d2VlbiBSdWJ5IDEuOCBNOjEgdGhyZWFkcyBhcmU6DQ0KDQ0K KiBObyB0aW1lc2xpY2UgKG9ubHkgc3dpdGNoIGZpYmVycyBieSBtYW5hZ2VkIGJsb2NraW5nIG9w ZXJhdGlvbnMpDQ0KKiBSdWJ5IHVzZXJzIGNhbiBtYWtlIG93biBzY2hlZHVsZXJzIGZvciBhcHBz IHdpdGggZmF2b3JpdGUgdW5kZXJseWluZyBtZWNoYW5pc20NDQoNDQpEaXNhZHZhbnRhZ2VzIGFy ZSBzaW1pbGFyIHRvIE06MSB0aHJlYWRzLiBBbm90aGVyIGRpc2FkdmFudGFnZXMgaXMgd2UgbmVl ZCB0byBjb25zaWRlciBhYm91dCBGaWJlcidzIGJlaGF2aW9yLg0NCg0NCkZyb20gUnVieSAzLjAg d2UgYWxzbyBpbnRyb2R1Y2VkIFJhY3RvcnMuIFJhY3RvcnMgY2FuIHJ1biBpbiBwYXJhbGxlbCBi ZWNhdXNlIG9mIHNlcGFyYXRpbmcgbW9zdCBvZiBvYmplY3RzLiAxIFJhY3RvciBjcmVhdGVzIDEg UnVieSB0aHJlYWQsIHNvIFJhY3RvcnMgaGFzIHNhbWUgZGlzYWR2YW50YWdlcyBvZiAxOjEgdGhy ZWFkcy4gRm9yIGV4YW1wbGUsIHdlIGNhbiBub3QgbWFrZSBodWdlIG51bWJlciBvZiBSYWN0b3Jz Lg0NCg0NCg0NCiMjIEdvYWwNDQoNDQpPdXIgZ29hbCBpcyBtYWtpbmcgbGlnaHR3ZWlnaHQgUmFj dG9ycyBvbiBsaWdodHdlaWdodCBSdWJ5IHRocmVhZHMuIFRvIGVuYWJsZSB0aGlzIGdvYWwgd2Ug cHJvcG9zZSB0byBpbXBsZW1lbnQgTTpOIHRocmVhZHMgb24gTVJJLg0NCg0NCk06TiB0aHJlYWRz IG1hbmFnZXMgTSBSdWJ5IHRocmVhZHMgb24gTiBuYXRpdmUgdGhyZWFkcywgd2l0aCBsaW1pdGVk IE4gKH49IENQVSBjb3JlIG51bWJlcnMgZm9yIGV4YW1wbGUpLg0NCg0NCkFkdmFudGFnZXMgb2Yg TTpOIHRocmVhZHMgYXJlOg0NCg0NCjEuIFdlIGNhbiBydW4gTSByYWN0b3JzIG9uIE4gbmF0aXZl IHRocmVhZHMgc2ltdWx0YW5lb3VzbHkgaWYgdGhlIG1hY2hpbmUgaGFzIE4gY29yZXMuDQ0KMi4g V2UgY2FuIG1ha2UgaHVnZSBudW1iZXIgb2YgUnVieSB0aHJlYWRzIG9yIFJhY3RvcnMgYmVjYXVz ZSB3ZSBkb24ndCBuZWVkIGh1Z2UgbnVtYmVyIG9mIG5hdGl2ZSB0aHJlYWRzDQ0KMy4gV2UgY2Fu IHN1cHBvcnQgdW5tYW5hZ2VkIGJsb2NraW5nIG9wZXJhdGlvbnMgYnkgbG9ja2luZyBhIG5hdGl2 ZSB0aHJlYWQgdG8gYSBSdWJ5IHRocmVhZCB3aGljaCBpc3N1ZXMgYW4gdW5tYW5hZ2VkIGJsb2Nr aW5nIG9wZXJhdGlvbi4NDQo0LiBXZSBjYW4gbWFrZSBvdXIgb3duIFJ1YnkgdGhyZWFkcyBvciBS YWN0b3JzIHNjaGVkdWxlciBpbnN0ZWFkIG9mIHRoZSBuYXRpdmUgdGhyZWFkIChPUykgc2NoZWR1 bGVyLg0NCg0NCkRpc2FkdmFudGFnZXMgb2YgTTpOIHRocmVhZHMgYXJlOg0NCg0NCjEuIEl0IGlz IGNvbXBsaWNhdGVkIGltcGxtZW50YXRpb24gYW5kIGl0IGNhbiBiZSBoYXJkLg0NCjIuIEl0IGNh biBpbnRyb2R1Y2UgaW5jb21wYXRpYmlsaXR5IGVzcGVjYWlhbGx5IG9uIFRMUyAoVGhyZWFkIGxv Y2FsIHN0b3JhZ2UpLg0NCjMuIFdlIG5lZWQgdG8gbWFpdGFpbiBvdXIgb3duIHNjaGVkdWxlci4N DQoNDQpXaXRob3V0IHVzaW5nIG11bHRpcGxlIFJhY3RvcnMsIGl0IGlzIHNpbWlsYXIgdG8gUnVi eSAxLjggTToxIHRocmVhZHMuIFRoZSBkaWZmZXJlbmNlIHdpdGggTToxIHRocmVhZHMgYXJlIGxv Y2tpbmcgTlQgbWVjaGFuaXNtIHRvIHN1cHBvcnQgdW5tYW5hZ2VkIGJsb2NraW5nIG9wZXJhdGlv bnMuIEFub3RoZXIgYWR2YW50YWdlIGlzIHRoYXQgaXQgaXMgZWFzeSB0byBmYWxsYmFjayB0byAx OjEgdGhyZWFkcyBieSBsb2NraW5nIGFsbCBvZiBjb3JyZXNwb25kaW5nIG5hdGl2ZSB0aHJlYWRz IHRvIFJ1YnkgdGhyZWFkcy4NDQoNDQojIyBQcm9wb3NlZCBkZXNpZ24NDQoNDQojIyMgVXNlciBm YWNpbmcgY2hhbmdlcw0NCg0NCklmIGEgcHJvZ3JhbSBvbmx5IGhhcyBhIG1haW4gUmFjdG9yIChp LmUuLCBtb3N0IFJ1YnkgcHJvZ3JhbXMpLCB0aGUgdXNlciB3aWxsIG5vdCBmYWNlIGFueSBjaGFu Z2VzIGJ5IGRlZmF1bHQuDQ0KT24gbWFpbiBSYWN0b3IsIGFsbCB0aHJlYWRzIGFyZSAxOjEgdGhy ZWFkcyBieSBkZWZhdWx0IGFuZCB0aGVyZSBpcyBubyBjb21wYXRpYmlsaXR5IGlzc3VlLg0NCg0N CmBSVUJZX01OX1RIUkVBRFM9MWAgZW52cmlvbm1lbnQgdmFyaWFibGUgaXMgZ2l2ZW4sIG1haW4g UmFjdG9yIGVuYWJsZXMgTTpOIHRocmVhZHMuDQ0KTm90ZSB0aGF0IHRoZSBtYWluIHRocmVhZCBs b2NrcyBOVCBieSBkZWZhdWx0IGJlY2F1c2UgdGhlIGluaXRpYWwgTlQgaXMgc3BlY2lhbCBpbiBz b21lIGNhc2UuIEknbSBub3Qgc3VyZSB3ZSBjYW4gcmVsYXggdGhpcyBsaW1pdGF0aW9uLg0NCg0N Ck9uIHRoZSBtdWx0aXBsZSBSYWN0b3JzLCBOICgrIGFscGhhKSBuYXRpdmUgdGhyZWFkcyBydW4g TSByYWN0b3JzLiBOb3cgdGhlcmUgaXMgbm8gd2F5IHRvIGRpc2FibGUgTTpOIHRocmVhZHMgb24g bXVsdGlwbGUgUmFjdG9ycyBiZWNhdXNlIHRoZXJlIGFyZSBvbmx5IGEgZmV3IG11bHRpLVJhY3Rv ciBwcm9ncmFtcyBhbmQgbm8gY29tcGF0aWJpbGl0eSBpc3N1ZXMuDQ0KDQ0KTWF4aW11bSBudW1i ZXIgb2YgTiBjYW4gYmUgc3BlY2lmaWVkIGJ5IGBSVUJZX01BWF9QUk9DPU5gLiA4IGJ5IGRlZmF1 bHQgYnV0IHRoaXMgdmFsdWUgc2hvdWxkIGJlIHNwZWNpZmllZCB3aXRoIHRoZSBudW1iZXIgb2Yg Q1BVIHByb2Nlc3NvcnMgKGNvcmVzKS4NDQoNDQojIyMgVExTIGlzc3VlDQ0KDQ0KT24gTTpOIHRo cmVhZHMgYSBSdWJ5IHRocmVhZCAoUlQxKSBtaWdyYXRlcyBmcm9tIGEgbmF0aXZlIHRocmVhZCAo TlQxKSB0byBOVDIsIC4uLiBzbyB0aGF0IFRMUyBvbiBuYXRpdmUgY29kZSBjYW4gYmUgYSBwcm9i bGVtLg0NCkZvciBleGFtcGxlLCBSVDEgY2FsbHMgYSBsaWJyYXJ5IGZ1bmN0aW9uIGBmb28oKWAg YW5kIGl0IHNldCBUTFMxIG9uIE5UMS4gQWZ0ZXIgbWlncmF0aW5nIFJUMSB0byBOVDIsIFJUMSBj YWxscyBgZm9vKClgIGFnYWluIGJ1dCB0aGVyZSBpcyBubyBUTFMxIHJlY29yZCBiZWNhdXNlIFRM UzEgaXMgcmVjb3JkZWQgb25seSBvbiBOVDEuDQ0KDQ0KT24gdGhpcyBjYXNlLCBSVDEgc2hvdWxk IGJlIHJ1biBvbiBOVDEgd2hpbGUgdXNpbmcgbmF0aXZlIGxpYnJhcnkgZm9vLiBUbyBhdm9pZCBz dWNoIHByYm9sZW0sIHdlIG5lZWQgdGhlIGZvbGxvd2luZyBmZWF0dXJlczoNDQoNDQoqIDE6MSB0 aHJlYWRzIG9uIG1haW4gUmFjdG9yIGJ5IGRlZmF1bHQNDQoqIGZ1bmN0aW9uYWxpdHkgdG8gbG9j ayB0aGUgTlQgZm9yIFJULCBtYXliZSBgVGhyZWFkI2xvY2tfbmF0aXZlX3RocmVhZGAgYW5kIGBU aHJlYWQjdW5sb2NrX25hdGl2ZV90aHJlYWRgIEFQSSBpcyBuZWVkZWQuIEZvciBleGFtcGxlLCBH byBsYW5ndWFnZSBoYXMgYHJ1bnRpbWUuTG9ja09TVGhyZWFkKClgIGFuZCBgcnVudGltZS5Vbmxv Y2tPU1RocmVhZCgpYCBmb3IgdGhpcyBwdXJwb3NlLg0NCiogT3IgQy1BUEkgb25seSBmb3IgdGhp cyBwdXJwb3NlPyAobm90IGZpeGVkIHlldCkNDQoNDQpUaGFua2Z1bGx5LCB0aGUgc2FtZSBwcm9i bGVtIGNhbiBvY2N1ciB3aXRoIEZpYmVyIHNjaGVkdWxlciAoYW5kIG9mIGNvdXJzZSBSdWJ5IDEu OCBNOjEgdGhyZWFkcyksIGJ1dCBJIGhhdmUgbm90IGhlYXJkIG9mIGl0IGJlaW5nIG11Y2ggb2Yg YSBwcm9ibGVtLCBzbyBJIGV4cGVjdCB0aGF0IFRMUyB3aWxsIG5vdCBiZSBtdWNoIG9mIGFuIGlz c3VlLg0NCg0NCiMjIyBVbm1hbmFnZWQgYmxvY2tpbmcgb3BlcmF0aW9ucw0NCg0NCkZyb20gUnVi eSAxLjkgKDE6MSB0aHJlYWRzKSwgdGhlIGBub2d2bChmdW5jKWAgQVBJIGlzIHVzZWQgZm9yIG1v c3QgYmxvY2tpbmcgb3BlcmF0aW9ucyB0byBrZWVwIHRoZSB0aHJlYWRpbmcgc3lzdGVtIGhlYWx0 aHkuIEluIG90aGVyIHdvcmRzLCBgbm9ndmwoZnVuYylgIHJlcHJlc2VudHMgdGhhdCB0aGUgZ2l2 ZW4gZnVuY3Rpb24gaXMgYmxvY2tpbmcgb3BlcmF0aW9uLiBUbyBzdXBwb3J0IHVubWFuYWdlZCBi bG9ja2luZyBvcGVyYXRpb25zLCB3ZSBsb2NrIGEgbmF0aXZlIHRocmVhZCBmb3IgdGhlIFJ1Ynkg dGhyZWFkIHdoaWNoIGlzc3VlcyBibG9ja2luZyBvcGVyYXRpb24uDQ0KDQ0KSWYgdGhlIGJsb2Nr aW5nIG9wZXJhdGlvbnMgZG9lc24ndCBmaW5pc2ggc29vbiwgb3RoZXIgUnVieSB0aHJlYWRzIGNh biBub3QgcnVuIGJlY2F1c2UgYSBSVCBsb2NrcyBOVC4gSW4gdGhpcyBjYXNlLCBhbm90aGVyIHN5 c3RlbSBtb25pdG9yaW5nIHRocmVhZCBuYW1lZCAiVGltZXIgdGhyZWFkIiAoaGlzdG9yaWNhbCBu YW1lIGFuZCBUVCBpbiBzaG9ydCkgY3JlYXRlcyBhbm90aGVyIE5UIHRvIHJ1biByZWFkeSBvdGhl ciBSdWJ5IHRocmVhZHMuDQ0KDQ0KVGhpcyBUVCdzIGJlaGF2aW9yIGlzIHRoZSBzYW1lIGFzIHRo ZSBiZWhhdmlvciBvZiAic3lzbW9uIiBpbiB0aGUgR28gbGFuZ3VhZ2UuDQ0KDQ0KV2UgbmFtZWQg bG9ja2VkIE5UIGFzIGRlZGljYXRlZCBuYXRpdmUgdGhyZWFkcyAoRE5UKSBhbmQgb3RoZXIgTlQg YXMgc2hhcmVkIG5hdGl2ZSB0aHJlYWRzIChTTlQpLiBUaGUgdXBwZXIgYm91bmQgYnkgYFJVQllf TUFYX1BST0NgIGFmZmVjdHMgdGhlIG51bWJlciBvZiBTTlQuIEluIG90aGVyIHdvcmRzLCB0aGUg bnVtYmVyIG9mIEROVCBpcyBub3QgbGltaXRlZCAoaXQgaXMgc2FtZSB0aGF0IHRoZSBudW1iZXIg b2YgTlQgb24gMToxIHRocmVhZHMgYXJlIG5vdCBsaW1pdGVkKS4NDQoNDQojIyMgTWFuYWdlZCBi bG9ja2luZyBvcGVyYXRpb25zDQ0KDQ0KTWFuYWdlZCBibG9ja2luZyBvcGVyYXRpb25zIGFyZSBt dWx0aXBsZXhpbmcgYnkgYHNlbGVjdCgpYC1saWtlIGZ1bmN0aW9ucyBvbiB0aGUgVGltZXIgdGhy ZWFkLi4gTm93IG9ubHkgYGVwb2xsKClgIGlzIHN1cHBvcnRlZC4NDQoNDQpJL08gb3BlcmF0aW9u IGZsb3cgKHJlYWQgb24gZmQxKSBvbiBSdWJ5IHRocmVhZCBSVDE6DQ0KDQ0KMS4gY2hlY2sgdGhl IHJlYWR5LW5lc3Mgb2YgZmQxIGJ5IGBwb2xsKHRpbWVvdXQgPSAwKWAsIGdvdG8gc3RlcCA0Lg0N CjIuIHJlZ2lzdGVyIGZkMSB0byBUaW1lciB0aHJlYWQgKFRUKSBlcG9sbCBhbmQgcmVzdW1lIGFu b3RoZXIgcmVhZHkgUnVieSB0aHJlYWQuDQ0KMy4gSWYgVFQgZGV0ZWN0cyB0aGF0IHRoZSBmZDEg aXMgcmVhZHksIG1ha2UgUlQxIGFzIHJlYWR5IHRocmVhZC4NDQo0LiBXaGVuIFJUMSBpcyByZXN1 bWVkLCB0aGVuIGRvIGByZWFkKClgIGJ5IGxvY2tpbmcgY29ycmVzcG9uZGluZyBOVDEuDQ0KDQ0K YHNsZWVwKG4pYCBvcGVyYXRpb24gZmxvdyBvbiBSdWJ5IHRocmVhZCBSVDE6DQ0KDQ0KMS4gcmVn aXN0ZXIgdGltZW91dCBvZiBSVDEgdG8gVFQgZXBvbGwuDQ0KMi4gSWYgVFQgZGV0ZWN0cyB0aGUg dGltZW91dCBvZiBSVDEgKG4gc2Vjb25kcyksIFRUIG1ha2VzIFJUMSBhcyBhIHJlYWR5IFJ1Ynkg dGhyZWFkLg0NCg0NCiMjIyBJbnRlcm5hbCBkZXNpZ24NDQoNDQoqIDIgbGV2ZWwgc2NoZWR1bGlu Zw0NCiAgKiBSdWJ5IHRocmVhZHMgb2YgYSBSYWN0b3IgaXMgbWFuYWdlZCBieSBNOjEgdGhyZWFk cw0NCiAgKiBSdWJ5IHRocmVhZHMgb2YgZGlmZmVyZW50IFJhY3RvcnMgYXJlIG1hbmFnZWQgYnkg TTpOIHRocmVhZHMNDQoqIFRpbWVyIHRocmVhZCBoYXMgc2V2ZXJhbCBkdXRpZXMNDQogIDEuIE1v bml0b3JpbmcgSS9PIChvciBvdGhlciBldmVudCkgcmVhZHktbmVzcw0NCiAgMi4gTW9uaXRvcmlu ZyB0aW1lb3V0DQ0KICAzLiBQcm9kdWNlIHRpbWVzbGljZSBzaWduYWxzDQ0KICA0LiBIZWxwIE9T IHNpZ25hbCBkZWxpdmVyaW5nDQ0KDQ0KKE9uIHB0aHJlYWQgZW52aXJvbm1lbnQpIHJlY2VudCBS dWJ5IGRvZXNuJ3QgbWFrZSB0aW1lciB0aHJlYWQgYnV0IE1hTnkgaW1wbGVtZW50YXRpb24gbWFr ZXMgVFQgYW55dGltZS4gaXQgY2FuIGJlIGltcHJvdmVkLg0NCg0NCg0NCiMjIEltcGxlbWVudGF0 aW9uDQ0KDQ0KVGhlIGNvZGUgbmFtZSBpcyBNYU55IHByb2plY3QsIGl0IGlzIGZyb20gTU4gdGhy ZWFkcy4NDQoNDQpodHRwczovL2dpdGh1Yi5jb20va28xL3J1YnkvdHJlZS9tYW55Mg0NCg0NClRo ZSBpbXBsZW1lbnRhdGlvbiBpcyBub3QgbWF0dXJlZCAoZGVidWdnaW5nIG5vdykuDQ0KDQ0KIyMg TWVhc3VyZW1lbnRzDQ0KDQ0KU2VlIFJ1YnlLYWlnaSAyMDIzIHNsaWRlczogaHR0cHM6Ly9hdGRv dC5uZXQvfmtvMS9hY3Rpdml0aWVzLzIwMjNfcnVieWthaWdpMjAyMy5wZGYNDQoNDQojIyBEaXNj dXNzaW9uDQ0KDQ0KKiBFbmFibGUvZGlzYWJsZQ0NCiAgKiBkZWZhdWx0IGJlaGF2aW9yDQ0KICAq IGhvdyB0byBzd2l0Y2ggdGhlIGJlaGF2aW9yDQ0KKiBTaG91bGQgd2UgbG9jayB0aGUgTlQgZm9y IG1haW4gdGhyZWFkIGFueXRpbWU/DQ0KKiBSdWJ5L0MgQVBJIHRvIGxvY2sgdGhlIG5hdGl2ZSB0 aHJlYWRzDQ0KDQ0KIyMgTWlzYw0NCg0NClRoaXMgZGVzY3JpcHRpb24gd2lsbCBiZSBpbXByb3Zl ZCBtb3JlIGxhdGVyLg0NCg0NCg0NCg0NCg0NCi0tIA0NCmh0dHBzOi8vYnVncy5ydWJ5LWxhbmcu b3JnLw0NCiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCiBy dWJ5LWNvcmUgbWFpbGluZyBsaXN0IC0tIHJ1YnktY29yZUBtbC5ydWJ5LWxhbmcub3JnCiBUbyB1 bnN1YnNjcmliZSBzZW5kIGFuIGVtYWlsIHRvIHJ1YnktY29yZS1sZWF2ZUBtbC5ydWJ5LWxhbmcu b3JnCiBydWJ5LWNvcmUgaW5mbyAtLSBodHRwczovL21sLnJ1YnktbGFuZy5vcmcvbWFpbG1hbjMv cG9zdG9yaXVzL2xpc3RzL3J1YnktY29yZS5tbC5ydWJ5LWxhbmcub3JnLw==