[ruby-core:95345] [Ruby master Feature#16254] MRI internal: Define built-in classes in Ruby with `__intrinsic__` syntax
From:
eregontp@...
Date:
2019-10-15 20:01:41 UTC
List:
ruby-core #95345
SXNzdWUgIzE2MjU0IGhhcyBiZWVuIHVwZGF0ZWQgYnkgRXJlZ29uIChCZW5vaXQgRGFsb3plKS4N Cg0KDQpUaGlzIHNvdW5kcyBncmVhdC4NCg0KV2UgaGF2ZSB2ZXJ5IGEgc2ltaWxhciBtZWNoYW5p c20gaW4gVHJ1ZmZsZVJ1YnksIGluaGVyaXRlZCBmcm9tIFJ1YmluaXVzLCB3aGljaCBpcyBjYWxs ZWQgInByaW1pdGl2ZXMiIChhbGEgU21hbGx0YWxrKS4NCkNvbXBhcmVkIHRvIFJ1YmluaXVzIHdl IGNoYW5nZWQgdGhlIHN5bnRheCBhbmQgYWx3YXlzIHVzZSB0aGUgYGludm9rZV9wcmltaXRpdmVg IGZvcm0gKGxpa2UgYF9faW50cmluc2ljX19gIGFib3ZlKSwgbm90IHRoZSAidHJ5IGludHJpbnNp YywgaWYgaXQgZmFpbHMgZmFsbGJhY2sgdG8gdGhlIFJ1YnkgY29kZSBiZWxvdyIgKFNtYWxsdGFs ay1zdHlsZSkuDQoNCkl0IGxvb2tzIGxpa2UgdGhpczoNCmBgYHJ1YnkNCmNsYXNzIFdlYWtSZWYg PCBEZWxlZ2F0b3INCiAgZGVmIGluaXRpYWxpemUob2JqKQ0KICAgIFRydWZmbGVQcmltaXRpdmUu d2Vha3JlZl9zZXRfb2JqZWN0KHNlbGYsIG9iaikNCiAgZW5kDQplbmQNCmBgYA0KKGZyb20gaHR0 cHM6Ly9naXRodWIuY29tL29yYWNsZS90cnVmZmxlcnVieS9ibG9iLzQ0ZTYxMTczZjA2NjFjNDFk YmY5YTRjN2EyMjkwOTFjZjZhYjgzZTMvbGliL3RydWZmbGUvd2Vha3JlZi5yYg0Kc2VlIG1vcmUg ZXhhbXBsZXMgd2l0aCBodHRwczovL2dpdGh1Yi5jb20vb3JhY2xlL3RydWZmbGVydWJ5L3NlYXJj aD9xPVRydWZmbGVQcmltaXRpdmUmdW5zY29wZWRfcT1UcnVmZmxlUHJpbWl0aXZlICkNCg0KV2Ug cmVjZW50bHkgY2hhbmdlZCBmcm9tIGBUcnVmZmxlLmludm9rZV9wcmltaXRpdmUoOndlYWtyZWZf c2V0X29iamVjdCwgc2VsZiwgb2JqKWAgdG8gYFRydWZmbGVQcmltaXRpdmUud2Vha3JlZl9zZXRf b2JqZWN0KHNlbGYsIG9iailgIGJlY2F1c2U6DQoqIEl0J3MgbW9yZSBjb25jaXNlIGFuZCBhcmd1 YWJseSBlYXNpZXIgdG8gcmVhZC4NCiogQXMgaXQncyBsaWtlIGEgbm9ybWFsIG1ldGhvZCBjYWxs LCB3ZSBjYW4gZ2VuZXJhdGUgc3R1YiBkZWZpbml0aW9ucyBpbiBJREVzIChlLmcuLCBpbiBJbnRl bGxpSiksIHdoaWNoIGFsbG93cyB0byBqdW1wIGZyb20gUnVieSBjb2RlIHRvIHRoZSBjb3JyZXNw b25kaW5nIEphdmEgY29kZSBvZiBUcnVmZmxlUnVieS4NCg0KSW1wbGVtZW50YXRpb24td2lzZSwg dGhlIGNvZGUgYWJvdmUgd2lsbCBnZW5lcmF0ZSBhbiBBU1Qgb2YgdGhlIGZvcm0NCmBgYA0KTWV0 aG9kTm9kZShuYW1lPWluaXRpYWxpemUsIGFyZ3M9b2JqLCBib2R5PVsNCiAgUmVhZEFyZ3VtZW50 Tm9kZSwNCiAgV2Vha1JlZlNldE9iamVjdE5vZGUoY2hpbGRyZW49W1JlYWRTZWxmTm9kZSwgUmVh ZExvY2FsTm9kZShuYW1lPW9iaildKQ0KXSkNCmBgYA0KSS5lLiwgdGhlIGludHJpbnNpYyBub2Rl IGlzIGRpcmVjdGx5IGluIHRoZSBBU1Qgb2YgdGhlIG1ldGhvZCBpbiBUcnVmZmxlUnVieS4NCk9u bHkgYSBmaXhlZCBudW1iZXIgb2YgcG9zaXRpb25hbCBhcmd1bWVudHMgaXMgYWxsb3dlZC4gVGhh dCB3YXksIHRoZXJlIGlzIG5vIGNvZGUgZm9yIGFyZ3VtZW50IGhhbmRsaW5nLCBhcmd1bWVudHMg dmFsdWVzIGFyZSBqdXN0IHBhc3NlZCBkaXJlY3RseSB0byB0aGUgV2Vha1JlZlNldE9iamVjdE5v ZGUgYXMgYXJndW1lbnRzIGFyZSBzaW1wbHkgY2hpbGQgbm9kZXMuDQoNClRoZSBtYWluIHJlYXNv biBJJ20gZGV0YWlsaW5nIHRoaXMgaXMgSSB0aGluayB0aGlzIGFuIG9wcG9ydHVuaXR5IHRvIHN0 YW5kYXJkaXplIHRoZSBzeW50YXggZm9yICJwcmltaXRpdmVzIi8iaW50cmluc2ljcyIuDQpObyBt YXR0ZXIgdGhlIGltcGxlbWVudGF0aW9uIGxhbmd1YWdlLCBpdCBzZWVtcyB0aGUgY29uY2VwdCBv ZiAicHJpbWl0aXZlcyIvImludHJpbnNpY3MiIGlzIHVuaXZlcnNhbC4NCg0KQSBjb21tb24gc3lu dGF4IGZvciBpbnRyaW5zaWNzL3ByaW1pdGl2ZXMgd291bGQgYWxsb3cgdG8gc2hhcmUgUnVieSBj b2RlIGZvciBjb3JlIGNsYXNzZXMgdXNpbmcgdGhlc2UgaW50cmluc2ljcy9wcmltaXRpdmVzLg0K SXQgbWlnaHQgbG9vayBsaWtlIGl0J3MgbGl0dGxlIFJ1YnkgY29kZSwgYnV0IEknbSBjb25maWRl bnQgaXQgd2lsbCBncm93Lg0KRm9yIGluc3RhbmNlLCBJIHdvdWxkbid0IGJlIHN1cnByaXNlZCB0 byBzZWUgc29tZSBvZiB0aGUgYXJndW1lbnQgcHJvY2Vzc2luZy92YWxpZGF0aW9uIG1vdmVkIHRv IFJ1YnksIGFzIGl0IG1pZ2h0IGp1c3QgYmUgZWFzaWVyLg0KQXQgdGhlIHZlcnkgbGVhc3QsIG1l dGhvZCBkZWZpbml0aW9ucyAodGhlIGFyZ3VtZW50IG5hbWVzIGFuZCB0aGVpciBkZWZhdWx0IHZh bHVlcykgY291bGQgYmUgc2hhcmVkIGFuZCBhdm9pZCBkdXBsaWNhdGlvbi4NCg0KV2hhdCBkbyB5 b3UgdGhpbms/DQoNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCkZl YXR1cmUgIzE2MjU0OiBNUkkgaW50ZXJuYWw6IERlZmluZSBidWlsdC1pbiBjbGFzc2VzIGluIFJ1 Ynkgd2l0aCBgX19pbnRyaW5zaWNfX2Agc3ludGF4DQpodHRwczovL2J1Z3MucnVieS1sYW5nLm9y Zy9pc3N1ZXMvMTYyNTQjY2hhbmdlLTgyMDU0DQoNCiogQXV0aG9yOiBrbzEgKEtvaWNoaSBTYXNh ZGEpDQoqIFN0YXR1czogT3Blbg0KKiBQcmlvcml0eTogTm9ybWFsDQoqIEFzc2lnbmVlOiBrbzEg KEtvaWNoaSBTYXNhZGEpDQoqIFRhcmdldCB2ZXJzaW9uOiANCi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgQWJzdHJhY3QNCg0KTVJJIGRlZmluZXMgbW9zdCBvZiBi dWlsdC1pbiBjbGFzc2VzIGluIEMgd2l0aCBDLUFQSXMgbGlrZSBgcmJfZGVmaW5lX21ldGhvZCgp YC4NCkhvd2V2ZXIsIHRoZXJlIGFyZSBzZXZlcmFsIGlzc3VlcyB1c2luZyBDLUFQSXMuDQoNCkEg ZmV3IG1ldGhvZHMgYXJlIGRlZmluZWQgaW4gUnVieSB3cml0dGVuIGluIGBwcmVsdWRlLnJiYC4N Ckhvd2V2ZXIsIHdlIGNhbiBub3QgZGVmaW5lIGFsbCBvZiBjbGFzc2VzIGJlY2F1c2Ugd2UgY2Fu IG5vdCB0b3VjaCBkZWVwIGRhdGEgc3RydWN0dXJlIGluIFJ1YnkuDQpGdXJ0aGVybW9yZSwgdGhl cmUgYXJlIHBlcmZvcm1hbmNlIGlzc3VlcyBpZiB3ZSB3cml0ZSBhbGwgb2YgdGhlbSBpbiBSdWJ5 Lg0KDQpUbyBzb2x2ZSB0aGlzIHNpdHVhdGlvbiwgSSB3YW50IHRvIHN1Z2dlc3Qgd3JpdHRlbiBp biBSdWJ5IHdpdGggQyBpbnRyaW5zaWMgZnVuY3Rpb25zLg0KVGhpcyBwcm9wb3NhbCBpcyBzYW1l IGFzIG15IFJ1YnlLYWlnaSAyMDE5IHRhbGsgPGh0dHBzOi8vcnVieWthaWdpLm9yZy8yMDE5L3By ZXNlbnRhdGlvbnMva28xLmh0bWw+Lg0KDQojIFRlcm1pbm9sb2d5DQoNCiogQy1tZXRob2RzOiBt ZXRob2RzIGRlZmluZWQgaW4gQyAoZGVmaW5lZCB3aXRoIGByYl9kZWZpbmVfbWV0aG9kKClgLCBl dGMpLg0KKiBSdWJ5LW1ldGhvZHM6IG1ldGhvZHMgZGVmaW5lZCBpbiBSdWJ5Lg0KKiBJU2VxOiBU aGUgYm9keSBvZiBgUlVieVZNOjpJbnN0cnVjdGlvblNlcXVlbmNlYCBvYmplY3Qgd2hpY2ggcmVw cmVzZW50cyBieXRlY29kZSBmb3IgVk0uDQoNCiMgQmFja2dyb3VuZCAvIFByb2JsZW0gLyBJZGVh DQoNCiMjIFdyaXR0ZW4gaW4gQw0KDQpBcyB5b3UgTVJJIGRldmVsb3BlcnMga25vdywgbW9zdCBv ZiBtZXRob2RzIGFyZSB3cml0dGVuIGluIEMgd2l0aCBDLUFQSXMuDQpIb3dldmVyLCB0aGVyZSBh cmUgc2V2ZXJhbCBpc3N1ZXMuDQoNCiMjIyAoMSkgQW5ub3RhdGlvbiBpc3N1ZXMgKGNvbXBhcmUg d2l0aCBSdWJ5IG1ldGhvZHMpDQoNCkZvciBleGFtcGxlLCBDLW1ldGhvZHMgZGVmaW5lZCBieSBD LUFQSXMgZG9lc24ndCBoYXZlIGBwYXJhbWV0ZXJzYCBpbmZvcm1hdGlvbiB3aGljaCBhcmUgcmV0 dXJuZWQgYnkgYE1ldGhvZCNwYXJhbWV0ZXJzYCwgYmVjYXVzZSB0aGVyZSBpcyB3YXkgdG8gZGVm aW5lIHBhcmFtZXRlcnMgZm9yIEMgbWV0aG9kcy4NClRoZXJlIGFyZSBwcm9wb3NhbHMgdG8gYWRk IHBhcmFtZXRlciBuYW1lIGluZm9ybWF0aW9uIGZvciBDLW1ldGhvZHMsIGhvd2V2ZXIsIEkgdGhp bmsgaXQgd2lsbCBpbnRyb2R1Y2UgbmV3IGNvbXBsZXggQy1BUElzIGFuZCBpbnRyb2R1Y2UgYWRk aXRpb25hbCBvdmVyaGVhZCBvbiBib290IHRpbWUuDQoNCi0+IElkZWE7IFdyaXRpbmcgbWV0aG9k cyBpbiBSdWJ5IHdpbGwgc29sdmUgdGhpcyBpc3N1ZS4NCg0KIyMjICgyKSBBbm5vdGF0aW9uIGlz c3VlcyAoZm9yIGZ1cnRoZXIgb3B0aW1pemF0aW9uKQ0KDQpJdCBpcyB1c2VmdWwgdG8ga25vdyB0 aGUgbWV0aG9kcyBhdHRyaWJ1dGUsIGZvciBleGFtcGxlLCB0aGUgbWV0aG9kIGNhdXNlcyBubyBz aWRlLWVmZmVjdCAoYSBwdXJlIG1ldGhvZCkuDQpMYWJlbGluZyBhbGwgb2YgbWV0aG9kcyBpbmNs dWRpbmcgdXNlciBwcm9ncmFtJ3MgbWV0aG9kcyBkb2Vzbid0IHNlZW0gZ29vZCBpZGVhIChub3Qg UnVieS13YXkpLiBCdXQgSSB0aGluayBhbm5vdGF0aW5nIGJ1aWx0LWluIG1ldGhvZHMgaXMgZ29v ZCB3YXkgYmVjYXVzZSB3ZSBjYW4gbWFuYWdlIChhbmQgd2UgY2FuIHJlbW92ZSB0aGVtIHdoZW4g d2UgY2FuIG1ha2UgZ29vZCBhbmFseXplcikuDQoNClRoZXJlIGFyZSBubyB3YXkgdG8gYW5ub3Rh dGUgdGhpcyBraW5kIG9mIGF0dHJpYnV0ZXMuDQoNCi0+IElkZWE6IFdyaXRpbmcgbWV0aG9kcyBp biBSdWJ5IHdpbGwgbWFrZSBpdCBlYXN5IHRvIGludHJvZHVjZSBuZXcgYW5ub3RhdGlvbnMuDQoN CiMjIyAoMykgUGVyZm9ybWFuY2UgaXNzdWUNCg0KVGhlcmUgYXJlIHNldmVyYWwgZmVhdHVyZXMg d2hpY2ggYXJlIHNsb3dlciBpbiBDIHRoYW4gd3JpdHRlbiBpbiBSdWJ5Lg0KDQoqIGV4Y2VwdGlv biBoYW5kbGluZyAoYHJiX2Vuc3VyZSgpYCwgZXRjKSBiZWNhdXNlIHdlIG5lZWQgdG8gY2FwdHVy ZSBjb250ZXh0IHdpdGggYHNldGptcGAgb24gQy1tZXRob2RzLiBSdWJ5LW1ldGhvZHMgZG9lc24n dCBuZWVkIHRvIGNhcHR1cmUgYW55IGNvbnRleHQgZm9yIGV4Y2VwdGlvbiBoYW5kbGluZy4NCiog UGFzc2luZyBrZXl3b3JkIHBhcmFtZXRlcnMgYmVjYXVzZSBSdWJ5LW1ldGhvZHMgZG9lc24ndCBu ZWVkIHRvIG1ha2UgYSBIYXNoIG9iamVjdCB0byBwYXNzIHRoZSBrZXl3b3JkIHBhcmFtZXRlcnMg aWYgdGhleSBhcmUgcGFzc2VkIHdpdGggZXhwbGljaXQga2V5d29yZCBwYXJhbWV0ZXJzIChgZm9v KGsxOiB2MSwgazI6IHYyKWApLg0KDQotPiBJZGVhOiBXcml0aW5nIG1ldGhvZHMgaW4gUnVieSBt YWtlcyB0aGVtIGZhc3Rlci4NCg0KIyMjICg0KSBQcm9kdWN0aXZpdHkNCg0KSXQgaXMgdG91Z2gg dG8gd3JpdGUgc29tZSBmZWF0dXJlcyBpbiBDOg0KDQpGb3IgZXhhbXBsZSwgaXQgaXMgZWFzeSB0 byB3cml0ZSBgcmVzY3VlYCBzeW50YXggaW4gUnVieToNCg0KYGBgcnVieQ0KIyBpbiBSdWJ5DQpk ZWYgZHVtbXlfZnVuY19yZXNjdWUNCiAgbmlsDQpyZXNjdWUNCiAgbmlsDQplbmQNCmBgYA0KDQpC dXQgaXQgaXMgZGlmZmljdWx0IHRvIHdyaXRlL3JlYWQgaW4gQzoNCg0KYGBgQw0Kc3RhdGljIFZB TFVFDQpkdW1teV9ib2R5KFZBTFVFIHNlbGYpDQp7DQogICAgcmV0dXJuIFFuaWw7DQp9DQpzdGF0 aWMgVkFMVUUNCmR1bW15X3Jlc2N1ZShWQUxVRSBzZWxmKQ0Kew0KICAgIHJldHVybiBRbmlsOw0K fQ0Kc3RhdGljIFZBTFVFDQp0ZHVtbXlfZnVuY19yZXNjdWUoVkFMVUUgc2VsZikNCnsNCiAgICBy ZXR1cm4gcmJfcmVzY3VlKGR1bW15X2JvZHksIHNlbGYsIGR1bW15X3Jlc2N1ZSwgc2VsZik7DQp9 DQpgYGANCg0KKHRyYWluZWQgTVJJIGRldmVsb3BlciBjYW4gc2F5IGl0IGlzIG5vdCB0b3VnaCwg dGhvdWdoIDpwKQ0KDQotPiBJZGVhOiBXcml0aW5nIG1ldGhvZHMgaW4gUnVieSBtYWtlcyB0aGVt IGVhc3kuDQoNCiMjIyAoNSkgQVBJIGNoYW5nZQ0KDQpUbyBpbnRyb2R1Y2UgYEd1aWxkYCwgSSB3 YW50IHRvIHBhc3MgYSAiY29udGV4dCIgcGFyYW1ldGVyIChhcyBhIGZpcnN0IHBhcmFtZXRlcikg Zm9yIGVhY2ggQy1mdW5jdGlvbnMgbGlrZSBgbXJiX3N0YXRlYCBvbiBtcnVieS4NClRoaXMgaXMg YmVjYXVzZSBnZXR0aW5nIGl0IGZyb20gVExTIChUaHJlYWQtbG9jYWwtc3RvcmFnZSkgaXMgaGln aC1jb3N0IG9wZXJhdGlvbiBvbiBkeW5hbWljIGxpYnJhcnkgKGxpYnJ1YnkpLg0KDQpNYXliZSBu b2JvZHkgYWxsb3cgbWUgdG8gY2hhbmdlIHRoZSBzcGVjaWZpY2F0aW9uIG9mIGZ1bmN0aW9ucyB1 c2VkIGJ5IGByYl9kZWZpbmVfbWV0aG9kKClgLg0KDQotPiBJZGVhOiBCdXQgaW50cm9kdWNlIG5l dyBtZXRob2QgZGVmaW5pdGlvbiBmcmFtZXdvcmssIHdlIGNhbiBtb3ZlIGFuZCBjaGFuZ2UgdGhl IHNwZWNpZmljYXRpb24sIEkgaG9wZS4NCk9mIGNvdXJzZSwgd2UgY2FuIHJlbWFpbiBjdXJyZW50 IGByYl9kZWZpbmVfbWV0aG9kKClgIEFQSXMgKHdpdGggYWRkaXRpb25hbCBjb3N0IG9uIGBHdWls ZGAgYXZhaWxhYmxlIE1SSSkuDQoNCiMjIFdyaXR0ZW4gaW4gUnVieSBpbiBgcHJlbHVkZS5yYmAN Cg0KVGhlcmUgaXMgYSBmaWxlIGBwcmVsdWRlLnJiYCB3aGljaCBhcmUgbG9hZGVkIGF0IGJvb3Qg dGltZS4NClRoaXMgZmlsZSBpcyB1c2VkIHRvIGRlZmluZSBzZXZlcmFsIG1ldGhvZHMsIHRvIHJl ZHVjZSBrZXl3b3JkIHBhcmFtZXRlcnMgb3ZlcmhlYWQsIGZvciBleGFtcGxlIChgSU8jcmVhZF9u b25ibG9ja2AsIGBUcmFjZVBvaW50I2VuYWJsZWApLg0KDQpIb3dldmVyLCB3cml0aW5nIGFsbCBv ZiBtZXRob2RzIGluIFJ1YnkgaXMgbm90IHBvc3NpYmxlIGJlY2F1c2U6DQoNCiogKDEpIGZlYXNp YmlsaXR5IGlzc3VlICh3ZSBjYW4gbm90IGFjY2VzcyBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZSkN CiogKDIpIHBlcmZvcm1hbmNlIGlzc3VlIChzbG93IGluIGdlbmVyYWwsIG9mIGNvdXJzZSkNCiog KDMpIGF0b21pY2l0eSBpc3N1ZSAoR1ZML0dJTCkNCg0KVG8gc29sdmUgKDEpLCB3ZSBjYW4gcHJv dmlkZSBsb3ctbGV2ZWwgQy1tZXRob2RzIHRvIGltcGxlbWVudCBoaWdoLWxldmVsIChub3JtYWwg YnVpbHQtaW4pIG1ldGhvZHMuIEhvd2V2ZXIgaXNzdWVzICgyKSBhbmQgKDMpIGFyZSBub3Qgc29s dmVkLg0KKEZyb20gQ1MgcmVzZWFyY2hlcnMgcGVyc3BlY3RpdmUsIG1ha2luZyBjbGV2ZXIgY29t cGlsZXIgd2lsbCBzb2x2ZSB0aGVtLCBsaWtlIEpWTSwgZXRjLCBCdXQgd2UgZG9uJ3QgaGF2ZSBp dCB5ZXQpDQoNCi0+IElkZWE6IFdyaXRpbmcgbWV0aG9kIGJvZHkgaW4gQyBpcyBmZWFzaWJsZS4N Cg0KIyBQcm9wb3NhbA0KDQooMSkgSW50cm9kdWNpbmcgYGludHJpbnNpY2AgbWVjaGFuaXNtIHRv IGRlZmluZSBidWlsdC1pbiBtZXRob2RzIGluIFJ1YnkuDQooMikgTG9hZCBmcm9tIGJpbmFyeSBm b3JtYXQgdG8gcmVkdWNlIHN0YXJ0dXAgdGltZS4NCg0KIyMgKDEpIEludHJpbnNpYyBmdW5jdGlv bg0KDQojIyMgQ2FsbGluZyBpbnRyaW5zaWMgZnVuY3Rpb24gc3ludGF4IGluIFJ1YnkNCg0KVG8g ZGVmaW5lIGJ1aWx0LWluIG1ldGhvZHMsIGludHJvZHVjZSBzcGVjaWFsIFJ1Ynkgc3ludGF4IGBf X2ludHJpbnNpY19fLmZ1bmMoYXJncylgLg0KSW4gdGhpcyBjYXNlLCByZWdpc3RlcmVkIGludHJp bnNpYyBmdW5jdGlvbiBgZnVuYygpYCBpcyBjYWxsZWQgd2l0aCBgYXJnc2AuDQoNCkluIG5vcm1h bCBSdWJ5IHByb2dyYW0sIGBfX2ludHJpbnNpY19fYCBpcyBhIGxvY2FsIHZhcmlhYmxlIG9yIGEg bWV0aG9kLg0KSG93ZXZlciwgcnVubmluZyBvbiBzcGVjaWFsIG1vZGUsIHRoZXkgYXJlIHBhcnNl ZCBhcyBpbnRyaW5zaWMgZnVuY3Rpb24gY2FsbC4NCg0KSW50cmluc2ljIGZ1bmN0aW9ucyBjYW4g bm90IGJlIGNhbGxlZCB3aXRoOg0KDQoqIGJsb2NrIA0KKiBrZXl3b3JkIGFyZ3VtZW50cw0KKiBz cGxhdCBhcmd1bWVudHMNCg0KIyMjIERldmVsb3BtZW50IHN0ZXAgd2l0aCBpbnRyaW5zaWMgZnVu Y3Rpb25zDQoNCigxKSBXcml0ZSBhIGNsYXNzL21vZHVsZSBpbiBSdWJ5IHdpdGggaW50cmluc2lj IGZ1bmN0aW9uLg0KDQpgYGBydWJ5DQojIHN0cmluZy5yYg0KY2xhc3MgU3RyaW5nDQogIGRlZiBs ZW5ndGgNCiAgICBfX2ludHJpbnNpY19fLnN0cl9sZW5ndGgNCiAgZW5kDQplbmQNCmBgYA0KDQoo MikgSW1wbGVtZW50IGludHJpbnNpYyBmdW5jdGlvbnMNCg0KSXQgaXMgYWxtb3N0IHNhbWUgYXMg ZnVuY3Rpb25zIHVzZWQgYnkgYHJiX2RlZmluZV9tZXRob2QoKWAuDQpIb3dldmVyIGl0IHdpbGwg YWNjZXB0IGNvbnRleHQgcGFyYW1ldGVyIGFzIHRoZSBmaXJzdCBwYXJhbWV0ZXIuDQoNCihgcmJf ZXhlY3V0aW9uX2NvbnRleHRfdGAgaXMgdG9vIGxvbmcsIHNvIHdlIGNhbiByZW5hbWUgaXQsIGBy Yl9zdGF0ZWAgZm9yIGV4YW1wbGUpDQoNCmBgYEMNCnN0YXRpYyBWQUxVRQ0Kc3RyX2xlbmd0aChy Yl9leGVjdXRpb25fY29udGV4dF90ICplYywgVkFMVUUgc2VsZikNCnsNCiAgcmV0dXJuIExPTkcy TlVNKFJTVFJJTkdfTEVOKHNlbGYpKTsNCn0NCmBgYA0KDQooMykgRGVmaW5lIGFuIGludHJpbnNp YyBmdW5jdGlvbiB0YWJsZSBhbmQgbG9hZCBgLnJiYCBmaWxlIHdpdGggdGhlIHRhYmxlLg0KDQpg YGBDDQpJbml0X1N0cmluZyh2b2lkKQ0Kew0KICAuLi4NCiAgc3RhdGljIGNvbnN0IHJiX2V4cG9y dF9pbnRyaW5zaWNfdCB0YWJsZVtdID0gew0KICAgIFJCX0VYUE9SVF9JTlRSSU5TSUMoc3RyX2xl bmd0aCwgMCksIC8vIDAgaXMgYXJpdHkNCiAgICAuLi4NCiAgfTsNCiAgcmJfdm1fYnVpbHRpbl9s b2FkKCJzdHJpbmciLCB0YWJsZSk7DQp9DQpgYGANCg0KIyMjIEV4YW1wbGUNCg0KVGhlcmUgYXJl IHR3byBleGFtcGxlczoNCg0KKDEpIENvbXBhcmFibGUgbW9kdWxlOiBodHRwczovL2dpc3QuZ2l0 aHViLmNvbS9rbzEvN2YxOGU2NmQxYWUyNWJiMzBjN2U4MjNhYTU3ZjBkMzENCigyKSBUcmFjZVBv aW50IGNsYXNzOiBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9rbzEvOTY5ZTU2OTBjZGE2MTgwZWQ5 ODllYjc5NjE5Y2E2MTINCg0KIyMgKDIpIExvYWQgZnJvbSBiaW5hcnkgZmlsZSB3aXRoIGxhenkg bG9hZGluZw0KDQpMb2FkaW5nIG1hbnkgIi5yYiIgZmlsZXMgc2xvd3MgZG93biBzdGFydHVwIHRp bWUuDQoNCldlIGhhdmUgYElTZXEjdG9fYmluYXJ5YCBtZXRob2QgdG8gZ2VuZXJhdGUgY29tcGls ZWQgYmluYXJ5IGRhdGEgc28gdGhhdCB3ZSBjYW4gZWxpbWluYXRlIHBhcnNlL2NvbXBpbGUgdGlt ZS4NCkZvcnR1bmF0ZWx5LCBbRmVhdHVyZSAjMTYxNjNdIG1ha2VzIGJpbmFyeSBkYXRhIHNtYWxs Lg0KRnVydGhlcm1vcmUsIGVuYWJsaW5nICJsYXp5IGxvYWRpbmciIGZlYXR1cmUgaW1wcm92ZXMg c3RhcnR1cCB0aW1lIGJlY2F1c2Ugd2UgZG9uJ3QgbmVlZCB0byBnZW5lcmF0ZSBjb21wbGV0ZSBJ U2Vxcy4gYFVTRV9MQVpZX0xPQURgIGluIHZtX2NvcmUuaCBlbmFibGVzIHRoaXMgZmVhdHVyZS4N Cg0KV2UgbmVlZCB0byBjb21iaW5lIGJpbmFyeS4gVGhlcmUgYXJlIHNldmVyYWwgd2F5IChjb252 ZXJ0IGludG8gQydzIGFycmF5LCBjb25jYXQgd2l0aCBvYmpjb3B5IGlmIGF2YWlsYWJsZSBhbmQg c28gb24pLg0KDQojIEV2YWx1YXRpb24NCg0KRXZhbHVhdGlvbnMgYXJlIHdyaXR0ZW4gaW4gbXkg UnVieUthaWdpIDIwMTkgcHJlc2VudGF0aW9uOiA8aHR0cHM6Ly9ydWJ5a2FpZ2kub3JnLzIwMTkv cHJlc2VudGF0aW9ucy9rbzEuaHRtbD4NCg0KUG9pbnRzOg0KDQoqIENhbGxpbmcgb3ZlcmhlYWQg b2YgUnVieSBtZWh0b2RzIHdpdGggaW50cmluc2ljIGZ1bmN0aW9ucw0KICAqIE5vcm1hbCBjYXNl LCBpdCBpcyBhbG1vc3Qgc2FtZSBhcyBDLW1ldGhvZHMgdXNpbmcgb3B0aW1pemVkIFZNIGluc3Ry dWN0aW9ucy4NCiAgKiBXaXRoIGtleXdvcmQgcGFyYW1ldGVycywgaXQgaXMgZmFzdGVyIHRoYW4g Qy1tZXRob2RzLg0KICAqIFdpdGggb3B0aW9uYWwgcGFyYW1ldGVycywgaXQgaXMgeDIgc2xvd2Vy IHNvIGl0IHNob3VsZCBiZSBzb2x2ZWQgKCoxKS4NCg0KKiBMb2FkaW5nIG92ZXJoZWFkDQogICog UmVxdWlyaW5nICIucmIiIGZpbGVzIGlzIGFib3V0IHgxNSBzbG93ZXIgdGhhbiBkZWZpbmluZyBD IG1ldGhvZHMuDQogICogTG9hZGluZyBiaW5hcnkgZGF0YSB3aXRoIGxhenkgbG9hZGluZyB0ZWNo bmlxdWUgaXMgYWJvdXQgeDIgc2xvd2VyIHRoYW4gQyBtZXRob2RzLiBOb3Qgc28gYmFkIHJlc3Vs dC4NCiAgKiBBdCBSdWJ5S2FpZ2kgMjAxOSwgdGhlIGJpbmFyeSBkYXRhIHdhcyB2ZXJ5IGh1Z2Us IGJ1dCBbRmVhdHVyZSAjMTYxNjNdIHJlZHVjZXMgdGhlIHNpemUgb2YgYmluYXJ5IGRhdGEuDQoN ClsqMV0gSW50cm9kdWNpbmcgc3BlY2lhbCAib3ZlcmxvYWRpbmciIHNwZWNpZmllciBjYW4gc29s dmUgaXQgYmVjYXVzZSB3ZSBkb24ndCBuZWVkIHRvIGFzc2lnbiBvcHRpb25hbCBwYXJhbWV0ZXJz LiBGaXJzdCBtZXRob2QgbG9va3VwIGNhbiBiZSBzbG93ZWQgZG93biwgYnV0IHdlIGNhbiBjYWNo ZSB0aGUgbWV0aG9kIGxvb2t1cCByZXN1bHRzICh3aXRoIGFyaXR5KS4NCg0KYGBgcnVieQ0KIyBl eGFtcGxlIHN5bnRheA0Kb3ZlcmxvYWQgZGVmIGZvbyhhKQ0KICBfX2ludHJpbnNpY19fLmZvbzEo YSkNCmVuZA0Kb3ZlcmxvYWQgZGVmIGZvbyhhLCBiKQ0KICBfX2ludHJpbnNpY19fLmZvbzIoYSwg YikNCmVuZA0KYGBgDQoNCiMgSW1wbGVtZW50YXRpb24NCg0KRG9uZToNCiogQ29tcGlsZSBjYWxs aW5nIGludHJpbnNpYyBmdW5jdGlvbnMgKC5yYikNCiogRXhwb3J0aW5nIGludHJpbnNpYyBmdW5j dGlvbiB0YWJsZSAoLmMpDQoNCk5vdCB5ZXQ6DQoqIExvYWRpbmcgZnJvbSBiaW5hcnkgbWVjaGFu aXNtDQoqIEF0dHJpYnV0ZSBzeW50YXgNCiogbW9zdCBvZiBidWlsdC1pbiBjbGFzcyByZXBsYWNl bWVudA0KDQpOb3csIG1pbmlydWJ5IGFuZCBydWJ5IChsaWJydWJ5KSBsb2FkICcqLnJiJyBmaWxl cyBkaXJlY3RseS4gSG93ZXZlciwgcnVieSAobGlicnVieSkgc2hvdWxkIGxvYWQgY29tcGlsZWQg YmluYXJ5IGZpbGUuDQoNCiMgRGlzY3Vzc2lvbg0KDQojIyBEbyB3ZSByZXdyaXRlIGFsbCBvZiBi dWlsdC1pbiBjbGFzc2VzIGF0IG9uY2U/DQoNCk5vLiBXZSBjYW4gdHJ5IGFuZCBtaWdyYXRlIHRo ZW0uDQoNCiMjIERvIHdlIHN1cHBvcnQgaW50cmluc2ljIG1lY2hhbmlzbSBmb3IgQy1leHRlbnNp b24gbGlicmFyaWVzPw0KDQpNYXliZSBpbiBmdXR1cmUuIE5vdyB3ZSBjYW4gdHJ5IGl0IG9uIE1S SSBjb3Jlcy4NCg0KIyMgYF9faW50cmluc2ljX19gIGtleXdvcmQNCg0KT24gbXkgUnVieUthaWdp IDIwMTkgdGFsaywgSSBwcm9wb3NlZCBgX19DX19gLCBidXQgSSB0aGluayBgX19pbnRyaW5zaWNf X2AgaXMgbW9yZSBkZXNjcmlwdGl2ZSAoYnV0IGEgYml0IGxvbmcpLg0KQW5vdGhlciBpZGVhIGlz IGBSdWJ5Vk06OmludHJpbnNpYy5mdW5jKC4uLilgLg0KDQpJIGhhdmUgbm8gc3Ryb25nIG9waW5p b24uIFdlIGNhbiBjaGFuZ2UgdGhpcyBzeW50YXggdW50aWwgd2UgZXhwb3NlIHRoaXMgc3ludGF4 IGZvciBDLWV4dGVuc2lvbnMuDQoNCiMjIENhbiB3ZSBzdXBwb3J0IGBfX2ludHJpbnNpY19fYCBp biBub3JtYWwgUnVieSBzY3JpcHQ/DQoNCk5vLiBUaGlzIGZlYXR1cmUgaXMgb25seSBmb3IgYnVp bHQtaW4gZmVhdHVyZXMuDQpBcyBJIGRlc2NyaWJlZCzjgIBjYWxsaW5nIGludHJpbnNpYyBmdW5j dGlvbiBzeW50YXggaGFzIHNldmVyYWwgcmVzdHJpY3Rpb24gY29tcGFyZSB3aXRoIG5vcm1hbCBt ZXRob2QgY2FsbHMsIHNvIHRoYXQgSSB0aGluayB0aGV5IGFyZSBub3QgZXhwb3NlZCBhcyBub3Jt YWwgUnVieSBwcm9ncmFtcywgSU1PLg0KDQojIyBTaG91bGQgd2UgbWFpbnRhaW4gaW50cmluc2lj IGZ1bmN0aW9uIHRhYmxlPw0KDQpOb3csIHllcy4gQW5kIHdlIG5lZWQgdG8gbWFrZSB0aGlzIHRh YmxlIGF1dG9tYXRpY2FsbHkgYmVjYXVzZSBtYW51YWwgb3BlcmF0aW9ucyBjYW4gaW50cm9kdWNl IG1pc3Rha2UgdmVyeSBlYXNpbHkuDQoNCkNvcnJlc3BvbmRpbmcgIi5yYiIgZmlsZSAoYHRyYWNl X3BvaW50LnJiYCwgZm9yIGV4YW1wbGUpIGtub3dzIHdoaWNoIGludHJpbnNpYyBmdW5jdGlvbnMg YXJlIG5lZWRlZC4NClBhcnNpbmcgIi5yYiIgZmlsZSBjYW4gZ2VuZXJhdGUgdGhlIHRhYmxlIGF1 dG9tYXRpY2FsbHkuDQpIb3dldmVyLCB3ZSBuZWVkIGEgbGF0ZXN0IHZlcnNpb24gUnVieSB0byBw YXJzZSB0aGUgc2NyaXB0cyBpZiB0aGV5IHVzZXMgc3ludGF4IHdoaWNoIGFyZSBzdXBwb3J0ZWQg YnkgbGF0ZXN0IHZlcnNpb24gb2YgUnVieS4NCg0KRm9yIGV4YW1wbGUsIHdlIG5lZWQgUnVieSAy LjcgbWFzdGVyIHRvIHBhcnNlIGEgc2NyaXB0IHdoaWNoIHVzZXMgcGF0dGVybiBtYXRjaGluZyBz eW50YXguDQpIb3dldmVyLCB0aGUgc3lzdGVtJ3MgcnVieSAoYEJBU0VfUlVCWWApIHNob3VsZCBi ZSBvbGRlciB2ZXJzaW9uLiBUaGlzIGlzIG9uZSBvZiBib290c3RyYXAgcHJvYmxlbS4NClRoaXMg aXMgImNoaWNrZW4tYW5kLWVnZyIgcHJvYmxlbS4NCg0KVGhlcmUgYXJlIHNldmVyYWwgaWRlYXMu DQoNCigxKSBQYXJzZSBhICIuYyIgZmlsZSB0byBnZW5lcmF0ZSBhIHRhYmxlIHVzaW5nIGZ1bmN0 aW9uIGF0dHJpYnV0ZS4NCg0KYGBgQw0KSU5UUklOU0lDX0ZVTkNUSU9OIHN0YXRpYyBWQUxVRQ0K c3RyX2xlbmd0aCguLi4pDQouLi4NCmBgYA0KDQooMikgQnVpbGQgYW5vdGhlciBydWJ5IHBhcnNl ciB3aXRoIHNvdXJjZSBjb2RlLCAicGFyc2UtcnVieSIuDQoNCiogMS4gZ2VuZXJhdGUgcGFyc2Ut cnVieSB3aXRoIEMgY29kZS4NCiogMi4gcnVuIHBhcnNlLXJ1YnkgdG8gZ2VuZXJhdGUgdGFibGVz IGJ5IHBhcnNpbmcgIi5yYiIgZmlsZXMuIFRoaXMgcHJvY2VzcyBpcyB3cml0dGVuIGluIEMuDQoq IDMuIGJ1aWxkIG1pbmlydWJ5IGFuZCBydWJ5IHdpdGggZ2VuZXJhdGVkIHRhYmxlLg0KDQpXZSBj YW4gbWFrZSBpdCwgYnV0IGl0IGludHJvZHVjZXMgbmV3IGNvbXBsZXggYnVpbGQgcHJvY2Vzcy4N Cg0KKDMpIFJlc3RyaWN0ICIucmIiIHN5bnRheA0KDQpSZXN0cmljdCBzeW50YXggd2hpY2ggY2Fu IGJlIHVzZWQgYnkgYEJBU0VfUlVCWWAgZm9yIGJ1aWx0LWluICIucmIiIGZpbGVzLg0KSXQgaXMg ZWFzeSB0byBsaXN0IHVwIGludHJpbnNpYyBmdW5jdGlvbnMgdXNpbmcgUmlwcGVyIG9yIEFTVCBv ciBgSVNlcSN0b19hYC4NCg0KKDMpIGlzIG1vc3QgZWFzeSBidXQgbm90IHNvIGNvb2wuDQooMikg aXMgZmxleGlibGUsIGJ1dCBpdCBuZWVkcyBpbXBsZW1lbnRhdGlvbiBjb3N0IGFuZCBpbmNyZWFz ZXMgYnVpbGQgY29tcGxleGl0eS4NCg0KDQojIyBQYXRoIG9mICcqLnJiJyBmaWxlcyBhbmQgaW5z dGFsbCBvciBub3QNCg0KVGhlIHBhdGggb2YgYHByZWx1ZGUucmJgIGlzIGA8aW50ZXJuYWw6cHJl bHVkZT5gLiBXZSBoYXZlIHNldmVyYWwgb3B0aW9ucy4NCg0KKiAoMSkgRG9uJ3QgaW5zdGFsbCAi LnJiIiBmaWxlcyBhbmQgbWFrZSB0aGVzZSBwYXRoIGA8aW50ZXJuYWw6dHJhY2VfcG9pbnQucmI+ YCwgZm9yIGV4YW1wbGUuDQoqICgyKSBJbnN0YWxsICIucmIiIGFuZCBtYWtlIHRoZXNlIHBhdGhz IG5vbi1leGlzdGluZyBwYXRocyBzdWNoIGFzIGA8aW50ZXJuYWw+L2luc3RhbGxkaXIvbGliL2J1 aWx0aW4vdHJhY2VfcG9pbnQucmJgLg0KKiAoMykgSW5zdGFsbCAiLnJiIiBhbmQgbWFrZSB0aGVz ZSBwYXRocyByZWFsIHBhdGhzLg0KDQpXZSB3aWxsIHRyYW5zbGF0ZSAiLnJiIiBmaWxlcyBpbnRv IGJpbmFyeSBkYXRhIGFuZCBsaW5rIHRoZW0gaW50byBgcnVieWAgKGBsaWJydWJ5YCkuDQpTbyB0 aGUgbW9kaWZpY2F0aW9uIG9mIGluc3RhbGxlZCAiLnJiIiBmaWxlcyBhcmUgbm90IGFmZmVjdCB0 aGUgYmVoYXZpb3IuIEl0IGNhbiBpbnRyb2R1Y2UgY29uZnVzaW9uIHNvIHRoYXQgSSB3cm90ZSAo MSkgYW5kICgyKS4NCg0KRm9yICgzKSwgaXQgaXMgcG9zc2libGUgdG8gbG9hZCAiLnJiIiBmaWxl cyBpZiB0aGVyZSBpcyBtb2RpZmljYXRpb24gKG1heWJlIGRldGVjdCBieSBtb2RpZmllZCBkYXRl KSBhbmQgbG9hZCBmcm9tIHRoZW0uIEJ1dCBpdCB3aWxsIGludHJvZHVjZSBhbiBvdmVyaGVhZCAo ZGlzayBhY2Nlc3Mgb3ZlcmhlYWQpLg0KDQojIyBDb21wYXRpYmlsaXR5IGlzc3VlPw0KDQpUaGVy ZSBhcmUgc2V2ZXJhbCBjb21wYXRpYmlsaXR5IGlzc3Vlcy4gRm9yIGV4YW1wbGUsIGBUcmFjZVBv aW50YCBgYy1jYWxsYCBldmVudHMgYXJlIGNoYW5nZWQgdG8gYGNhbGxgIGV2ZW50cy4NCkFuZCB0 aGVyZSBhcmUgbW9yZSBpbmNvbXBhdGlibGVzLg0KV2UgbmVlZCB0byBjaGVjayB0aGVtIGNhcmVm dWxseS4NCg0KIyMgQm9vdHN0cmFwIGlzc3VlPw0KDQpZZXMsIHRoZXJlIGFyZS4NCg0KTG9hZGlu ZyBgLnJiYCBmaWxlcyBhdCBib290IHRpbWluZyBvZiBhbiBpbnRlcnByZXRlciBjYW4gY2F1c2Ug cHJvYmxlbS4NCkZvciBleGFtcGxlLCBiZWZvcmUgaW5pdGlhbGl6aW5nIFN0cmluZyBjbGFzcywg dGhlIGNsYXNzIG9mIFN0cmluZyBsaXRlcmFsIGlzIDAgKGJlY2F1c2UgU3RyaW5nIGNsYXNzIGlz IG5vdCBnZW5lcmF0ZWQpLg0KDQpJIGludHJvZHVjZXMgc2V2ZXJhbCB3b3JrYXJvdW5kcyBidXQg d2UgbmVlZCB0byBtb2RpZnkgbW9yZS4NCg0KIyBDb25jbHVzaW9uDQoNCkhvdyBhYm91dCB0byBp bnRyb2R1Y2UgdGhpcyBtZWNoYW5pc20gYW5kIHRyeSBpdCBvbiBSdWJ5IDIuNz8NCldlIGNhbiBy ZXZlcnQgdGhlc2UgY2hhbmdlcyBpZiB3ZSBmb3VuZCBhbnkgdHJvdWJsZXMsIGlmIHdlIGRvbid0 IGV4cG9zZSB0aGlzIG1lY2hhbmlzbSBhbmQgb25seSBpbnRlcm5hbCBjaGFuZ2VzLg0KDQoNCg0K DQotLSANCmh0dHBzOi8vYnVncy5ydWJ5LWxhbmcub3JnLw0KClVuc3Vic2NyaWJlOiA8bWFpbHRv OnJ1YnktY29yZS1yZXF1ZXN0QHJ1YnktbGFuZy5vcmc/c3ViamVjdD11bnN1YnNjcmliZT4KPGh0 dHA6Ly9saXN0cy5ydWJ5LWxhbmcub3JnL2NnaS1iaW4vbWFpbG1hbi9vcHRpb25zL3J1YnktY29y ZT4K