[ruby-core:105670] [Ruby master Feature#18020] Introduce `IO::Buffer` for fiber scheduler.
From:
"ioquatix (Samuel Williams)" <noreply@...>
Date:
2021-10-19 05:30:56 UTC
List:
ruby-core #105670
SXNzdWUgIzE4MDIwIGhhcyBiZWVuIHVwZGF0ZWQgYnkgaW9xdWF0aXggKFNhbXVlbCBXaWxsaWFt cykuDQoNCg0KPiBtYW1lOiBJIGNhbm5vdCB1bmRlcnN0YW5kIHdoYXQgaXMgZmluYWxseSBuZWVk ZWQuIERvZXNu4oCZdCBTdHJpbmcgd2l0aCBBU0NJSS04QklUIHdvcms/DQoNClN0cmluZyBpcyBi b3RoIGluc3VmZmljaWVudCBhbmQgaW5lZmZpY2llbnQuIFlvdSBjYW4gY2hlY2sgaG93IHJlYWQg YW5kIHdyaXRlIG9uIHN0cmluZ3Mgd29yayB3aXRoIGludGVybmFsIGZyb3plbiBjb3BpZXMsIGZv ciBleGFtcGxlLCBpdCdzIGJvdGggcGVyZm9ybWFuY2UgYW5kIHNlbWFudGljIGlzc3VlLiBXZSBj YW4ndCBleHBvc2UgZmFrZSBzdHJpbmcgdG8gc2NoZWR1bGVyIHdoaWNoIG1pZ2h0IGJlIG9uZSBv dGhlciBvcHRpb24sIGJ1dCBpdCBoYXMgYSBsb3Qgb2YgZWRnZSBjYXNlcy4gSSB0cmllZCBpdCBh bHJlYWR5Lg0KDQo+IGtvMTogSSBjYW7igJl0IHVuZGVyc3RhbmQgaG93IHRvIHVzZSBpdCB3aXRo IElPPyBPbmx5IGZvciBzY2hlZHVsZXI/DQoNClNldmVyYWwgZXhhbXBsZXMgYXJlIGdpdmVuIGlu IFBSLCBpbmNsdWRpbmcgbmV3IHNjaGVkdWxlciBob29rcyBhbmQgdGVzdHMuIEluaXRpYWxseSBv bmx5IGZvciBzY2hlZHVsZXIsIGJ1dCBJIGJlbGlldmUgd2Ugc2hvdWxkIGV4cG9zZSB0byBhcHBs aWNhdGlvbiBjb2RlLg0KDQpTaW1pbGFyIGNvbmNlcHQgZXhpc3RzIGluIENyeXN0YWwuDQoNCi0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCkZlYXR1cmUgIzE4MDIwOiBJ bnRyb2R1Y2UgYElPOjpCdWZmZXJgIGZvciBmaWJlciBzY2hlZHVsZXIuDQpodHRwczovL2J1Z3Mu cnVieS1sYW5nLm9yZy9pc3N1ZXMvMTgwMjAjY2hhbmdlLTk0MTY5DQoNCiogQXV0aG9yOiBpb3F1 YXRpeCAoU2FtdWVsIFdpbGxpYW1zKQ0KKiBTdGF0dXM6IE9wZW4NCiogUHJpb3JpdHk6IE5vcm1h bA0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KQWZ0ZXIgY29udGlu dWluZyB0byBidWlsZCBvdXQgdGhlIGZpYmVyIHNjaGVkdWxlciBpbnRlcmZhY2UgYW5kIHRoZSBz cGVjaWZpYyBob29rcyByZXF1aXJlZCBmb3IgYGlvX3VyaW5nYCwgSSBmb3VuZCBzb21lIHRyb3Vi bGUgd2l0aGluIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgSU9gLg0KDQpJIGZvdW5kIHRoYXQgaW4g c29tZSBjYXNlcywgd2UgbmVlZCB0byByZWFkIGludG8gdGhlIGludGVybmFsIElPIGJ1ZmZlcnMg ZGlyZWN0bHkuIEkgdHJpZWQgY3JlYXRpbmcgYSAiZmFrZSBzdHJpbmciIGluIG9yZGVyIHRvIHRy YW5zaXQgYmFjayBpbnRvIHRoZSBSdWJ5IGZpYmVyIHNjaGVkdWxlciBpbnRlcmZhY2UgYW5kIHRo aXMgZGlkIHdvcmsgdG8gYSBjZXJ0YWluIGV4dGVudCwgYnV0IEkgd2FzIHRvbGQgd2UgY2Fubm90 IGV4cG9zZSBmYWtlIHN0cmluZyB0byBSdWJ5IHNjaGVkdWxlciBpbnRlcmZhY2UuDQoNClNvLCBh ZnRlciB0aGlzLCBhbmQgbWFueSBvdGhlciBmcnVzdHJhdGlvbnMgd2l0aCB1c2luZyBgU3RyaW5n YCBhcyBhIElPIGJ1ZmZlciwgSSBkZWNpZGVkIHRvIGltcGxlbWVudCBhIGxvdyBsZXZlbCBgSU86 OkJ1ZmZlcmAgYmFzZWQgb24gbXkgbmVlZHMgZm9yIGhpZ2ggcGVyZm9ybWFuY2UgSU8sIGFuZCBh cyBwYXJ0IG9mIHRoZSBmaWJlciBzY2hlZHVsZXIgaW50ZXJmYWNlLg0KDQpIZXJlIGlzIHJvdWdo bHkgdGhlIGludGVyZmFjZSBpbXBsZW1lbnRlZCBieSB0aGUgc2NoZWR1bGVyIHcuci50LiB0aGUg YnVmZmVyOg0KDQpgYGBydWJ5DQpjbGFzcyBTY2hlZHVsZXINCiAgIyBAcGFyYW1ldGVyIGJ1ZmZl ciBbSU86OkJ1ZmZlcl0gQnVmZmVyIGZvciByZWFkaW5nIGludG8uDQogIGRlZiBpb19yZWFkKGlv LCBidWZmZXIsIGxlbmd0aCkNCiAgICAjIGltcGxlbWVudGF0aW9uIHByb3ZpZGVkIGJ5IGByZWFk YCBzeXN0ZW0gY2FsbCwgSU9fVVJJTkdfUkVBRFYsIGV0Yy4NCiAgZW5kDQoNCiAgIyBAcGFyYW1l dGVyIGJ1ZmZlciBbSU86OkJ1ZmZlcl0gQnVmZmVyIGZvciB3cml0aW5nIGZyb20uDQogIGRlZiBp b193cml0ZShpbywgYnVmZmVyLCBsZW5ndGgpDQogICAgIyBpbXBsZW1lbnRhdGlvbiBwcm92aWRl ZCBieSBgd3JpdGVgIHN5c3RlbSBjYWxsLCBJT19VUklOR19XUklURVYsIGV0Yy4NCiAgZW5kDQoN CiAgIyBQb3RlbnRpYWwgbmV3IGhvb2tzIChTb2NrZXQjcmVjdm1zZywgc2VuZG1zZywgZXRjKToN CiAgZGVmIGlvX3JlY3Ztc2coaW8sIGJ1ZmZlciwgbGVuZ3RoKQ0KICBlbmQNCmVuZA0KYGBgDQoN CkluIHJldmlld2luZyBvdGhlciBsYW5ndWFnZSBkZXNpZ25zLCBJIGZvdW5kIHRoYXQgdGhpcyBk ZXNpZ24gaXMgdmVyeSBzaW1pbGFyIHRvIENyeXN0YWwncyBJTyBidWZmZXJpbmcgc3RyYXRlZ3ku DQoNClRoZSBwcm9wb3NlZCBpbXBsZW1lbnRhdGlvbiBwcm92aWRlcyBlbm91Z2ggb2YgYW4gaW50 ZXJmYWNlIHRvIGltcGxlbWVudCBib3RoIG5hdGl2ZSBzY2hlZHVsZXJzIGFzIHdlbGwgYXMgcHVy ZSBSdWJ5IHNjaGVkdWxlcnMuIEl0IGFsc28gcHJvdmlkZXMgc29tZSBleHRyYSBmdW5jdGlvbmFs aXR5IGZvciBpbnRlcnByZXRpbmcgdGhlIGRhdGEgaW4gdGhlIGJ1ZmZlci4gVGhpcyBpcyBtb3N0 bHkgZm9yIHRlc3RpbmcgYW5kIGV4cGVyaW1lbnRhdGlvbiwgYWx0aG91Z2ggaXQgbWlnaHQgbWFr ZSBzZW5zZSB0byBleHBvc2UgdGhpcyBpbnRlcmZhY2UgZm9yIGJpbmFyeSBwcm90b2NvbHMgbGlr ZSBIVFRQLzIsIFFVSUMsIFdlYlNvY2tldHMsIGV0Yy4NCg0KIyMgUHJvcG9zZWQgU29sdXRpb24N Cg0KV2UgaW50cm9kdWNlIG5ldyBjbGFzcyBgSU86OkJ1ZmZlcmAuDQoNCmBgYHJ1YnkNCmNsYXNz IElPOjpCdWZmZXINCiAgIyBAcmV0dXJucyBbSU86OkJ1ZmZlcl0gQSBidWZmZXIgd2l0aCB0aGUg Y29udGVudHMgb2YgdGhlIHN0cmluZyBkYXRhLg0KICBkZWYgc2VsZi5mb3Ioc3RyaW5nKQ0KICBl bmQNCg0KICBQQUdFX1NJWkUgPSAjIC4uLiBvcGVyYXRpbmcgc3lzdGVtIHBhZ2Ugc2l6ZQ0KDQog ICMgQHJldHVybnMgW0lPOjpCdWZmZXJdIEEgYnVmZmVyIHdpdGggdGhlIGNvbnRlbnRzIG9mIHRo ZSBmaWxlIG1hcHBlZCB0byBtZW1vcnkuDQogIGRlZiBzZWxmLm1hcChmaWxlKQ0KICBlbmQNCg0K ICAjIEZsYWdzIGZvciBidWZmZXIgc3RhdGUuDQogIEVYVEVSTkFMID0gIyBUaGUgYnVmZmVyIGlz IGZyb20gZXh0ZXJuYWwgbWVtb3J5Lg0KICBJTlRFUk5BTCA9ICMgVGhlIGJ1ZmZlciBpcyBmcm9t IGludGVybmFsIG1lbW9yeSAobWFsbG9jKS4NCiAgTUFQUEVEID0gIyBUaGUgYnVmZmVyIGlzIGZy b20gbWFwcGVkIG1lbW9yeSAobW1hcCwgVmlydHVhbEFsbG9jLCBldGMpDQogIExPQ0tFRCA9ICMg VGhlIGJ1ZmZlciBpcyBsb2NrZWQgZm9yIHVzYWdlIChjYW5ub3QgYmUgcmVzaXplZCkNCiAgUFJJ VkFURSA9ICMgVGhlIGJ1ZmZlciBpcyBtYXBwZWQgYXMgY29weS1vbi13cml0ZS4NCiAgSU1NVVRB QkxFID0gIyBUaGUgYnVmZmVyIGNhbm5vdCBiZSBtb2RpZmllZC4NCg0KICAjIEByZXR1cm5zIFtJ Tzo6QnVmZmVyXSBBIGJ1ZmZlciB3aXRoIHRoZSBzcGVjaWZpZWQgc2l6ZSwgYWxsb2NhdGVkIGFj Y29yZGluZyB0byB0aGUgZ2l2ZW4gZmxhZ3MuDQogIGRlZiBpbml0aWFsaXplKHNpemUsIGZsYWdz KQ0KICBlbmQNCg0KICAjIEByZXR1cm5zIFtJbnRlZ3JhbF0gVGhlIHNpemUgb2YgdGhlIGJ1ZmZl cg0KICBhdHRyIDpzaXplDQoNCiAgIyBAcmV0dXJucyBbU3RyaW5nXSBBIGJyaWVmIHN1bW1hcnkg YW5kIGhleCBkdW1wIG9mIHRoZSBidWZmZXIuDQogIGRlZiBpbnNwZWN0DQogIGVuZA0KDQogICMg QHJldHVybnMgW1N0cmluZ10gQSBicmllZiBzdW1tYXJ5IG9mIHRoZSBidWZmZXIuDQogIGRlZiB0 b19zDQogIGVuZA0KDQogICMgRmxhZyBwcmVkaWNhdGVzOg0KICBkZWYgZXh0ZXJuYWw/DQogIGVu ZA0KDQogIGRlZiBpbnRlcm5hbD8NCiAgZW5kDQoNCiAgZGVmIG1hcHBlZD8NCiAgZW5kDQoNCiAg ZGVmIGxvY2tlZD8NCiAgZW5kDQoNCiAgZGVmIGltbXV0YWJsZT8NCiAgZW5kDQoNCiAgIyBGbGFn cyBmb3IgZW5kaWFuL2J5dGUgb3JkZXI6DQogIExJVFRMRV9FTkRJQU4gPSAjIC4uLg0KICBCSUdf RU5ESUFOID0gIyAuLi4NCiAgSE9TVF9FTkRJQU4gPSAjIC4uLg0KICBORVRXT1JLX0VORElBTj0g IyAuLi4NCg0KICAjIExvY2sgdGhlIGJ1ZmZlciAocHJldmVudCByZXNpemUsIHVubWFwLCBjaGFu Z2VzIHRvIGJhc2UgYW5kIHNpemUpLg0KICBkZWYgbG9jaw0KICAgIHJhaXNlICJBbHJlYWR5IGxv Y2tlZCEiIGlmIGZsYWdzICYgTE9DS0VEDQogICAgDQogICAgZmxhZ3MgfD0gTE9DS0VEDQogIGVu ZA0KDQogICMgVW5sb2NrIHRoZSBidWZmZXIuDQogIGRlZiB1bmxvY2sNCiAgICByYWlzZSAiTm90 IGxvY2tlZCEiIHVubGVzcyBmbGFncyAmIExPQ0tFRA0KICAgIA0KICAgIGZsYWdzIHw9IH5MT0NL RUQNCiAgZW5kDQoNCiAgLy8gTWFuaXB1bGF0aW9uOg0KICAjIEByZXR1cm5zIFtJTzo6QnVmZmVy XSBBIHNsaWNlIG9mIHRoZSBidWZmZXIncyBkYXRhLiBEb2VzIG5vdCBjb3B5Lg0KICBkZWYgc2xp Y2Uob2Zmc2V0LCBsZW5ndGgpDQogIGVuZA0KDQogICMgQHJldHVybnMgW1N0cmluZ10gQSBiaW5h cnkgc3RyaW5nIHN0YXJ0aW5nIGF0IG9mZnNldCwgbGVuZ3RoIGJ5dGVzLg0KICBkZWYgdG9fc3Ry KG9mZnNldCwgbGVuZ3RoKQ0KICBlbmQNCg0KICAjIENvcHkgdGhlIHNwZWNpZmllZCBzdHJpbmcg aW50byB0aGUgYnVmZmVyIGF0IHRoZSBnaXZlbiBvZmZzZXQuDQogIGRlZiBjb3B5KHN0cmluZywg b2Zmc2V0KQ0KICBlbmQNCg0KICAjIENvbXBhcmUgdHdvIGJ1ZmZlcnMuDQogIGRlZiA8PT4ob3Ro ZXIpDQogIGVuZA0KDQogIGluY2x1ZGUgQ29tcGFyYWJsZQ0KDQogICMgUmVzaXplIHRoZSBidWZm ZXIsIHByZXNlcnZpbmcgdGhlIGdpdmVuIGxlbmd0aCAoaWYgbm9uLXplcm8pLg0KICBkZWYgcmVz aXplKHNpemUsIHByZXNlcnZlID0gMCkNCiAgZW5kDQoNCiAgIyBDbGVhciB0aGUgYnVmZmVyIHRv IHRoZSBzcGVjaWZpZWQgdmFsdWUuDQogIGRlZiBjbGVhcih2YWx1ZSA9IDAsIG9mZnNldCA9IDAs IGxlbmd0aCA9IChAc2l6ZSAtIG9mZnNldCkpDQogIGVuZA0KDQogICMgRGF0YSBUeXBlczoNCiAg IyBMb3dlciBjYXNlOiBsaXR0bGUgZW5kaWFuLg0KICAjIFVwcGVyIGNhc2U6IGJpZyBlbmRpYW4g KG5ldHdvcmsgZW5kaWFuKS4NCiAgIw0KICAjIDpVOCAgICAgICAgfCB1bnNpZ25lZCA4LWJpdCBp bnRlZ2VyLg0KICAjIDpTOCAgICAgICAgfCBzaWduZWQgOC1iaXQgaW50ZWdlci4NCiAgIw0KICAj IDp1MTYsIDpVMTYgfCB1bnNpZ25lZCAxNi1iaXQgaW50ZWdlci4NCiAgIyA6czE2LCA6UzE2IHwg c2lnbmVkIDE2LWJpdCBpbnRlZ2VyLg0KICAjDQogICMgOnUzMiwgOlUzMiB8IHVuc2lnbmVkIDMy LWJpdCBpbnRlZ2VyLg0KICAjIDpzMzIsIDpTMzIgfCBzaWduZWQgMzItYml0IGludGVnZXIuDQog ICMNCiAgIyA6dTY0LCA6VTY0IHwgdW5zaWduZWQgNjQtYml0IGludGVnZXIuDQogICMgOnM2NCwg OlM2NCB8IHNpZ25lZCA2NC1iaXQgaW50ZWdlci4NCiAgIw0KICAjIDpmMzIsIDpGMzIgfCAzMi1i aXQgZmxvYXRpbmcgcG9pbnQgbnVtYmVyLg0KICAjIDpmNjQsIDpGNjQgfCA2NC1iaXQgZmxvYXRp bmcgcG9pbnQgbnVtYmVyLg0KDQogICMgR2V0IHRoZSBnaXZlbiBkYXRhIHR5cGUgYXQgdGhlIHNw ZWNpZmllZCBvZmZzZXQuDQogIGRlZiBnZXQodHlwZSwgb2Zmc2V0KQ0KICBlbmQNCg0KICAjIFNl dCB0aGUgZ2l2ZW4gdmFsdWUgYXMgdGhlIHNwZWNpZmllZCBkYXRhIHR5cGUgYXQgdGhlIHNwZWNp ZmllZCBvZmZzZXQuDQogIGRlZiBzZXQodHlwZSwgb2Zmc2V0LCB2YWx1ZSkNCiAgZW5kDQplbmQN CmBgYA0KDQpUaGUgQyBpbnRlcmZhY2UgcHJvdmlkZXMgYSBmZXcgY29udmVuaWVudCBtZXRob2Rz IGZvciBhY2Nlc3NpbmcgdGhlIHVuZGVybHlpbmcgZGF0YSBidWZmZXI6DQoNCmBgYGMNCnZvaWQg cmJfaW9fYnVmZmVyX2dldF9tdXRhYmxlKFZBTFVFIHNlbGYsIHZvaWQgKipiYXNlLCBzaXplX3Qg KnNpemUpOw0Kdm9pZCByYl9pb19idWZmZXJfZ2V0X2ltbXV0YWJsZShWQUxVRSBzZWxmLCBjb25z dCB2b2lkICoqYmFzZSwgc2l6ZV90ICpzaXplKTsNCmBgYA0KDQpJbiB0aGUgZmliZXIgc2NoZWR1 bGVyLCBpdCBpcyB1c2VkIGxpa2UgdGhpczoNCg0KYGBgYw0KVkFMVUUNCnJiX2ZpYmVyX3NjaGVk dWxlcl9pb19yZWFkX21lbW9yeShWQUxVRSBzY2hlZHVsZXIsIFZBTFVFIGlvLCB2b2lkICpiYXNl LCBzaXplX3Qgc2l6ZSwgc2l6ZV90IGxlbmd0aCkNCnsNCiAgICBWQUxVRSBidWZmZXIgPSByYl9p b19idWZmZXJfbmV3KGJhc2UsIHNpemUsIFJCX0lPX0JVRkZFUl9MT0NLRUQpOw0KDQogICAgVkFM VUUgcmVzdWx0ID0gcmJfZmliZXJfc2NoZWR1bGVyX2lvX3JlYWQoc2NoZWR1bGVyLCBpbywgYnVm ZmVyLCBsZW5ndGgpOw0KDQogICAgcmJfaW9fYnVmZmVyX2ZyZWUoYnVmZmVyKTsNCg0KICAgIHJl dHVybiByZXN1bHQ7DQp9DQpgYGANCg0KVGhpcyBmdW5jdGlvbiBpcyBpbnZva2VkIGZyb20gYGlv LmNgIGF0IHZhcmlvdXMgcGxhY2VzIHRvIGZpbGwgdGhlIGJ1ZmZlci4gV2Ugc3BlY2lmaWNhbGx5 IHRoZSBgKGJhc2UsIHNpemUpYCB0dXBsZSwgYWxvbmcgd2l0aCBgbGVuZ3RoYCB3aGljaCBpcyB0 aGUgKm1pbmltdW0qIGxlbmd0aCByZXF1aXJlZCBhbmQgYXNzaXN0cyB3aXRoIGVmZmljaWVudCBu b24tYmxvY2tpbmcgaW1wbGVtZW50YXRpb24uDQoNClRoZSBgdXJpbmcuY2AgaW1wbGVtZW50YXRp b24gaW4gdGhlIGV2ZW50IGdlbSB1c2VzIHRoaXMgaW50ZXJmYWNlIGxpa2Ugc286DQoNCmBgYGMN ClZBTFVFIEV2ZW50X0JhY2tlbmRfVVJpbmdfaW9fcmVhZChWQUxVRSBzZWxmLCBWQUxVRSBmaWJl ciwgVkFMVUUgaW8sIFZBTFVFIGJ1ZmZlciwgVkFMVUUgX2xlbmd0aCkgew0KCXN0cnVjdCBFdmVu dF9CYWNrZW5kX1VSaW5nICpkYXRhID0gTlVMTDsNCglUeXBlZERhdGFfR2V0X1N0cnVjdChzZWxm LCBzdHJ1Y3QgRXZlbnRfQmFja2VuZF9VUmluZywgJkV2ZW50X0JhY2tlbmRfVVJpbmdfVHlwZSwg ZGF0YSk7DQoJDQoJaW50IGRlc2NyaXB0b3IgPSBSQl9OVU0ySU5UKHJiX2Z1bmNhbGwoaW8sIGlk X2ZpbGVubywgMCkpOw0KCQ0KCXZvaWQgKmJhc2U7DQoJc2l6ZV90IHNpemU7DQoJcmJfaW9fYnVm ZmVyX2dldF9tdXRhYmxlKGJ1ZmZlciwgJmJhc2UsICZzaXplKTsNCgkNCglzaXplX3Qgb2Zmc2V0 ID0gMDsNCglzaXplX3QgbGVuZ3RoID0gTlVNMlNJWkVUKF9sZW5ndGgpOw0KCQ0KCXdoaWxlIChs ZW5ndGggPiAwKSB7DQoJCXNpemVfdCBtYXhpbXVtX3NpemUgPSBzaXplIC0gb2Zmc2V0Ow0KCQlp bnQgcmVzdWx0ID0gaW9fcmVhZChkYXRhLCBmaWJlciwgZGVzY3JpcHRvciwgKGNoYXIqKWJhc2Ur b2Zmc2V0LCBtYXhpbXVtX3NpemUpOw0KCQkNCgkJaWYgKHJlc3VsdCA9PSAwKSB7DQoJCQlicmVh azsNCgkJfSBlbHNlIGlmIChyZXN1bHQgPiAwKSB7DQoJCQlvZmZzZXQgKz0gcmVzdWx0Ow0KCQkJ aWYgKChzaXplX3QpcmVzdWx0ID4gbGVuZ3RoKSBicmVhazsNCgkJCWxlbmd0aCAtPSByZXN1bHQ7 DQoJCX0gZWxzZSBpZiAoLXJlc3VsdCA9PSBFQUdBSU4gfHwgLXJlc3VsdCA9PSBFV09VTERCTE9D Sykgew0KCQkJRXZlbnRfQmFja2VuZF9VUmluZ19pb193YWl0KHNlbGYsIGZpYmVyLCBpbywgUkJf SU5UMk5VTShSRUFEQUJMRSkpOw0KCQl9IGVsc2Ugew0KCQkJcmJfc3lzZXJyX2ZhaWwoLXJlc3Vs dCwgc3RyZXJyb3IoLXJlc3VsdCkpOw0KCQl9DQoJfQ0KCQ0KCXJldHVybiBTSVpFVDJOVU0ob2Zm c2V0KTsNCn0NCmBgYA0KDQojIyBCdWZmZXIgQWxsb2NhdGlvbg0KDQpUaGUgTGludXgga2VybmVs IHByb3ZpZGVzIHNvbWUgYWR2YW5jZWQgbWVjaGFuaXNtcyBmb3IgcmVnaXN0ZXJpbmcgYnVmZmVy cyBmb3IgYXN5bmNocm9ub3VzIEkvTyB0byByZWR1Y2UgcGVyLW9wZXJhdGlvbiBvdmVyaGVhZC4N Cg0KPiBUaGUgaW9fdXJpbmdfcmVnaXN0ZXIoKSBzeXN0ZW0gY2FsbCByZWdpc3RlcnMgdXNlciBi dWZmZXJzIG9yIGZpbGVzIGZvciB1c2UgaW4gYW4gaW9fdXJpbmcoNykgaW5zdGFuY2UgcmVmZXJl bmNlZCBieSBmZC4gUmVnaXN0ZXJpbmcgZmlsZXMgb3IgdXNlciBidWZmZXJzIGFsbG93cyB0aGUg a2VybmVsIHRvIHRha2UgbG9uZyB0ZXJtIHJlZmVyZW5jZXMgdG8gaW50ZXJuYWwgZGF0YSBzdHJ1 Y3R1cmVzIG9yIGNyZWF0ZSBsb25nIHRlcm0gbWFwcGluZ3Mgb2YgYXBwbGljYXRpb24gbWVtb3J5 LCBncmVhdGx5IHJlZHVjaW5nIHBlci1JL08gb3ZlcmhlYWQuDQoNCldpdGggYXBwcm9wcmlhdGUg c3VwcG9ydCwgd2UgY2FuIHVzZSBgSU9SSU5HX09QX1BST1ZJREVfQlVGRkVSU2AgdG8gZWZmaWNp ZW50bHkgbWFuYWdlIGJ1ZmZlcnMgaW4gYXBwbGljYXRpb25zIHdoaWNoIGFyZSBkZWFsaW5nIHdp dGggbG90cyBvZiBzb2NrZXRzLiBTZWUgPGh0dHBzOi8vbG9yZS5rZXJuZWwub3JnL2lvLXVyaW5n LzIwMjAwMjI4MjAzMDUzLjI1MDIzLTEtYXhib2VAa2VybmVsLmRrL1QvPiBmb3IgbW9yZSBkZXRh aWxzIGFib3V0IGhvdyBpdCB3b3Jrcy4gSSdtIHN0aWxsIGV4cGxvcmluZyB0aGUgcGVyZm9ybWFu Y2UgaW1wbGljYXRpb25zIG9mIHRoaXMsIGJ1dCB0aGUgcHJvcG9zZWQgaW1wbGVtZW50YXRpb24g cHJvdmlkZXMgc3VmZmljaWVudCBtZXRhLWRhdGEgZm9yIHVzIHRvIGV4cGxvcmUgdGhpcyBpbiBy ZWFsIHdvcmxkIHNjaGVkdWxlcnMuDQoNCg0KDQoNCi0tIA0KaHR0cHM6Ly9idWdzLnJ1YnktbGFu Zy5vcmcvDQoKVW5zdWJzY3JpYmU6IDxtYWlsdG86cnVieS1jb3JlLXJlcXVlc3RAcnVieS1sYW5n Lm9yZz9zdWJqZWN0PXVuc3Vic2NyaWJlPgo8aHR0cDovL2xpc3RzLnJ1YnktbGFuZy5vcmcvY2dp LWJpbi9tYWlsbWFuL29wdGlvbnMvcnVieS1jb3JlPgo=