[ruby-core:97150] [Ruby master Feature#16511] Staged warnings and better compatibility for keyword arguments in 2.7.1
From:
daniel@...42.com
Date:
2020-02-13 03:48:37 UTC
List:
ruby-core #97150
SXNzdWUgIzE2NTExIGhhcyBiZWVuIHVwZGF0ZWQgYnkgRGFuMDA0MiAoRGFuaWVsIERlTG9ybWUp Lg0KDQoNCj4gSSdkIGd1ZXNzIGl0J3MgZmFpcmx5IHVuY29tbW9uIHRvIGNhbGwgYSBtZXRob2Qg bm90IGFjY2VwdGluZyBrZXl3b3JkIGFyZ3VtZW50cyB3aXRoIGAqKmAuDQoNCk1heWJlLCB3aG8g a25vd3MuIEknZCByYXRoZXIgbm90IG1ha2UgYXNzdW1wdGlvbnMgb24gd2hhdCBpcyAidW5jb21t b24iLg0KDQo+IENvdWxkIHlvdSBzaG93IGEgdGVudGF0aXZlIHRpbWVsaW5lIGZvciB5b3VyIHBy b3Bvc2FsPw0KPiBJLmUuLCB3aGVuIGVhY2ggZGVwcmVjYXRpb24gaXMgaW50cm9kdWNlZCBhbmQg d2hlbiBiZWhhdmlvciBpcyBjaGFuZ2VkLg0KDQpPaywgZmFpciBlbm91Z2guIFRoZSBtZXRob2Rz IGFuZCB0YWJsZSBiZWxvdyBzaG91bGQgY292ZXIgYWxsIHBvc3NpYmxlIHdhcm5pbmdzIGFuZCBl cnJvcnMuDQoNCmBgYHJ1YnkNCmRlZiBmb28obGVhZCwgb3B0PW5pbCwgazpuaWwpDQogIHtsZWFk OiBsZWFkLCBvcHQ6IG9wdCwgazoga30NCmVuZA0KZGVmIGJhcihsZWFkLCBvcHQ9bmlsLCAqKmt3 KQ0KICB7bGVhZDogbGVhZCwgb3B0OiBvcHQsIGt3OiBrd30NCmVuZA0KZGVmIGRlbGVnKG0sICpy ZXN0KQ0KICBzZW5kKG0sICpyZXN0KQ0KZW5kDQpgYGANCg0KfCBtZXRob2QgY2FsbCAgICAgICAg ICAgIHwgMi42IC8gMi43IHJlc3VsdCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIuNyAg ICAgIHwgMy4wIHRvIDMuMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMy4zIHRv IDMuNCAoMi43IGlzIGVvbCkgfCAzLjUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg d2FybmluZyBtZXNzYWdlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgfA0KfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLXwtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tfA0KfCBmb28oazoxKSAgICAgICAgICAgICAgIHwgezpsZWFkPT57Oms9 PjF9LCA6b3B0PT5uaWwsIDprPT5uaWx9ICAgICAgICB8IHdhcm5pbmfiiJcgfCB3YXJuaW5n4oiX ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHdhcm5pbmcgICAgICAgICAgICAg ICAgIHwgZXJyb3I6IHdyb25nIG51bWJlciBvZiBhcmd1bWVudHMgICB8IFBhc3NpbmcgdGhlIGtl eXdvcmQgYXJndW1lbnQgYXMgdGhlIGxhc3QgaGFzaCBwYXJhbWV0ZXIgaXMgZGVwcmVjYXRlZCAg ICAgICAgICAgIHwNCnwgYmFyKGs6MSkgICAgICAgICAgICAgICB8IHs6bGVhZD0+ezprPT4xfSwg Om9wdD0+bmlsLCA6a3c9Pnt9fSAgICAgICAgfCB3YXJuaW5n4oiXIHwgd2FybmluZ+KIlyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB3YXJuaW5nICAgICAgICAgICAgICAgICB8 IGVycm9yOiB3cm9uZyBudW1iZXIgb2YgYXJndW1lbnRzICAgfCBQYXNzaW5nIHRoZSBrZXl3b3Jk IGFyZ3VtZW50IGFzIHRoZSBsYXN0IGhhc2ggcGFyYW1ldGVyIGlzIGRlcHJlY2F0ZWQgICAgICAg ICAgICB8DQp8IGZvbygxLCAiYSI9PjIpICAgICAgICAgfCB7OmxlYWQ9PjEsIDpvcHQ9PnsiYSI9 PjJ9LCA6az0+bmlsfSAgICAgICAgIHwgd2FybmluZ+KIlyB8IHdhcm5pbmfiiJcgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHwgd2FybmluZyAgICAgICAgICAgICAgICAgfCBlcnJv cjogd3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cyAgIHwgUGFzc2luZyB0aGUga2V5d29yZCBhcmd1 bWVudCBhcyB0aGUgbGFzdCBoYXNoIHBhcmFtZXRlciBpcyBkZXByZWNhdGVkICAgICAgICAgICAg fA0KfCBiYXIoMSwgImEiPT4yKSAgICAgICAgIHwgezpsZWFkPT4xLCA6b3B0PT5uaWwsIDprdz0+ eyJhIj0+Mn19ICAgICAgICB8ICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KfCBmb28o MSwgImEiPT4yLCBrOjMpICAgIHwgezpsZWFkPT4xLCA6b3B0PT57ImEiPT4yfSwgOms9PjN9ICAg ICAgICAgICB8IHdhcm5pbmcgIHwgZXJyb3I6IHdyb25nIG51bWJlciBvZiBhcmd1bWVudHMgICAg ICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHwgU3BsaXR0aW5nIHRoZSBsYXN0IGFyZ3VtZW50IGludG8gcG9zaXRpb25h bCBhbmQga2V5d29yZCBwYXJhbWV0ZXJzIGlzIGRlcHJlY2F0ZWQgfA0KfCBiYXIoMSwgImEiPT4y LCBrOjMpICAgIHwgezpsZWFkPT4xLCA6b3B0PT5uaWwsIDprdz0+eyJhIj0+MiwgOms9PjN9fSB8 ICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg ICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KfCBmb28oMSwgeyJhIj0+MiwgazozfSkg IHwgezpsZWFkPT4xLCA6b3B0PT57ImEiPT4yfSwgOms9PjN9ICAgICAgICAgICB8IHdhcm5pbmcg IHwgezpsZWFkPT4xLCA6b3B0PT57ImEiPT4yLCA6az0+M30sIDprPT5uaWx9IHwgICAgICAgICAg ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgU3Bs aXR0aW5nIHRoZSBsYXN0IGFyZ3VtZW50IGludG8gcG9zaXRpb25hbCBhbmQga2V5d29yZCBwYXJh bWV0ZXJzIGlzIGRlcHJlY2F0ZWQgfA0KfCBiYXIoMSwgeyJhIj0+MiwgazozfSkgIHwgezpsZWFk PT4xLCA6b3B0PT57ImEiPT4yfSwgOmt3PT57Oms9PjN9fSAgICB8IHdhcm5pbmcgIHwgezpsZWFk PT4xLCA6b3B0PT57ImEiPT4yLCA6az0+M30sIDprPT5uaWx9IHwgICAgICAgICAgICAgICAgICAg ICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgU3BsaXR0aW5nIHRo ZSBsYXN0IGFyZ3VtZW50IGludG8gcG9zaXRpb25hbCBhbmQga2V5d29yZCBwYXJhbWV0ZXJzIGlz IGRlcHJlY2F0ZWQgfA0KfCBmb28oMSwge2s6Mn0pICAgICAgICAgIHwgezpsZWFkPT4xLCA6b3B0 PT5uaWwsIDprPT4yfSAgICAgICAgICAgICAgICB8IHdhcm5pbmcgIHwgezpsZWFkPT4xLCA6b3B0 PT57Oms9PjJ9LCA6az0+bmlsfSAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgVXNpbmcgdGhlIGxhc3QgYXJndW1l bnQgYXMga2V5d29yZCBwYXJhbWV0ZXJzIGlzIGRlcHJlY2F0ZWQgICAgICAgICAgICAgICAgICAg ICAgfA0KfCBmb28oMSwgMiwge2s6M30pICAgICAgIHwgezpsZWFkPT4xLCA6b3B0PT4yLCA6az0+ M30gICAgICAgICAgICAgICAgICB8IHdhcm5pbmfiiJcgfCB3YXJuaW5n4oiXICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB8IHdhcm5pbmcgICAgICAgICAgICAgICAgIHwgZXJyb3I6 IHdyb25nIG51bWJlciBvZiBhcmd1bWVudHMgICB8IFVzaW5nIHRoZSBsYXN0IGFyZ3VtZW50IGFz IGtleXdvcmQgcGFyYW1ldGVycyBpcyBkZXByZWNhdGVkICAgICAgICAgICAgICAgICAgICAgIHwN CnwgZGVsZWcoOmZvbywgMSwgazoyKSAgICB8IHs6bGVhZD0+MSwgOm9wdD0+bmlsLCA6az0+Mn0g ICAgICAgICAgICAgICAgfCAgICAgICAgICB8IG9wdC1pbiB3YXJuaW5n4oiXICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHwgd2FybmluZyAgICAgICAgICAgICAgICAgfCB7OmxlYWQ9PjEsIDpv cHQ9Pns6az0+Mn0sIDprPT5uaWx9IHwgVXNpbmcgdGhlIGxhc3QgYXJndW1lbnQgYXMga2V5d29y ZCBwYXJhbWV0ZXJzIGlzIGRlcHJlY2F0ZWQgICAgICAgICAgICAgICAgICAgICAgfA0KfCBkZWxl Zyg6Zm9vLCAxLCAyLCBrOjMpIHwgezpsZWFkPT4xLCA6b3B0PT4yLCA6az0+M30gICAgICAgICAg ICAgICAgICB8ICAgICAgICAgIHwgb3B0LWluIHdhcm5pbmfiiJcgICAgICAgICAgICAgICAgICAg ICAgICAgICAgfCB3YXJuaW5nICAgICAgICAgICAgICAgICB8IGVycm9yOiB3cm9uZyBudW1iZXIg b2YgYXJndW1lbnRzICAgfCBVc2luZyB0aGUgbGFzdCBhcmd1bWVudCBhcyBrZXl3b3JkIHBhcmFt ZXRlcnMgaXMgZGVwcmVjYXRlZCAgICAgICAgICAgICAgICAgICAgICB8DQoNCkJsYW5rIGNlbGxz IG1lYW4gdGhlcmUncyBubyBjaGFuZ2UgZnJvbSB0aGUgcHJldmlvdXMgdmVyc2lvbi4NCndhcm5p bmfiiJcgbWVhbnMgdGhlcmUncyBhIHdhcm5pbmcgZXhjZXB0IGlmIGl0IGNvbWVzIGZyb20gYSBn ZW0gKGZyb20gYSBmaWxlIGluIEdlbTo6UlVCWUdFTVNfRElSKQ0Kb3B0LWluIHdhcm5pbmcgaXMg Zm9yIHBlb3BsZSB3aG8gd2FudCB0byBzdG9wIHN1cHBvcnRpbmcgcnVieSAyLnggYmVmb3JlIDIu NyBlb2wuDQoNCj4gVHJlYXRpbmcgYXMga2V5d29yZHMgZXZlbiBmb3IgYGZvbyhoKWAgaWYgYGhg IGlzIGZsYWdnZWQgc2VlbXMgbGlrZSBpdCB3b3VsZCBzaWduaWZpY2FudGx5IGluY3JlYXNlIHRo ZSBjaGFuY2UgdG8gbm90IGJlaGF2ZSBhcyBpbnRlbmRlZCwgYXMgSmVyZW15IHNob3dlZC4NCj4g Q29uc2lkZXJpbmcgbWluaW11bSBhcml0eSBsaWtlIGluIGh0dHBzOi8vYnVncy5ydWJ5LWxhbmcu b3JnL2lzc3Vlcy8xNjUxMSNub3RlLTggd291bGQgSU1ITyBicmVha3MgdGhlIHNlcGFyYXRpb24g YW5kIGFkZCBhIG5ldyBleGNlcHRpb25hbCBjYXNlLg0KPiBJdCdzIGxpa2VseSB0byBhbHNvIGJl IHZlcnkgYnJpdHRsZSBpZiB0aGVyZSBhcmUgbm9uLXJlcXVpcmVkIGFyZ3VtZW50cy4NCg0KSSdt IG5vdCBzdXJlIHdoYXQgeW91IGNvbnNpZGVyIGFzICJpbnRlbmRlZCIgYmVoYXZpb3IsIGJ1dCBm b3IgbWUgaXQgbWVhbnMgdGhhdA0KMSkgcG9zaXRpb25hbCBoYXNoIHNob3VsZCBub3QgYmUgY29u dmVydGVkIHRvIGtleXdvcmRzOyANCjIpIGtleXdvcmRzIHNob3VsZCBiZSBub3QgYmUgY29udmVy dGVkIHRvIHBvc2l0aW9uYWwgaGFzaCAoZXhjZXB0IGZvciBwb3NpdGlvbmFsLW9ubHkgbWV0aG9k cyk7DQozKSBkdXJpbmcgdGhlIHRyYW5zaXRpb24gcGVyaW9kLCBkZWxlZ2F0aW9uIHNob3VsZCB3 b3JrIGZvciBrZXl3b3JkcyBldmVuIGlmIG5vdCB1c2luZyBgKiprd3Jlc3RgOw0KNCkgZXZlcnl0 aGluZyBlbHNlIHNob3VsZCBjb250aW51ZSB3b3JraW5nIGFzIGl0IHdvcmtlZCBpbiB0aGUgcGFz dC4NCg0KU2luY2UgdGhlIGJlaGF2aW9yIG9mIGEgZmxhZ2dlZCBoYXNoIGluIDIuNyBpcyBfZXhh Y3RseV8gbGlrZSBhbnkgaGFzaCBpbiAyLjYsIHRoZSBjb21wYXRpYmlsaXR5IGZvciB0aGF0IGNh c2UgaXMgMTAwJS4gQXQgbGVhc3QgZm9yIG5vdywgYnV0IGl0IHdvdWxkIHN0aWxsIHdhcm4gaW4g My4zLiBBbmQgY29uc2lkZXJpbmcgbWluaW11bSBhcml0eSBpcyBzb21ldGhpbmcgdGhhdCB3YXMg X2FscmVhZHlfIGJlaW5nIGRvbmUgaW4gMi42LCBzbyBpdCdzIG5vdCBzb21lIG5ldyBleGNlcHRp b25hbCBjYXNlLiBBbmQgaXQgd291bGQgc3RpbGwgc2hvdyBhIHdhcm5pbmcsIHNvIGl0J3Mgbm90 IGJyZWFraW5nIHNlcGFyYXRpb24uIFRoZXJlJ3Mgbm90aGluZyBicml0dGxlIGluIHRoZXJlOyB3 b3VsZCB5b3UgY2FyZSB0byBlbGFib3JhdGU/DQoNCj4gV291bGQgc3VjaCBiZWhhdmlvciBiZSBl dmVudHVhbGx5IHJlbW92ZWQgaW4geW91ciBwcm9wb3NhbD8gUGVyZm9ybWFuY2Utd2lzZSBpdCBs aWtlbHkgaGFzIHNvbWUgY29zdCBhcyBpdCBjYXVzZXMgZXh0cmEgY2hlY2tzLg0KDQpZZXMsIGl0 IHdvdWxkIGJlIHJlbW92ZWQuIEl0J3Mgc29tZXdoYXQgZXF1aXZhbGVudCB0byBydWJ5Ml9rZXl3 b3JkcyBieSBkZWZhdWx0IGJ1dCBtb3JlIGNvbXByZWhlbnNpdmUuIFBlcmZvcm1hbmNlLXdpc2Ug aXQncyB2ZXJ5IHVubGlrZWx5IHRvIGhhdmUgYSBtZWFzdXJhYmxlIGNvc3QsIGJhc2VkIG9uIHRo ZSBjb2RlIEkndmUgc2VlbiBpbiB2bV9hcmdzLmMNCg0KPiBUaGUgYHJ1YnkyX2tleXdvcmRzYCBy dWxlIHRvIG9ubHkgY29uc2lkZXIgYCphcmdzYCBpcyBhIHZlcnkgcHJlY2lzZSB3YXkgdG8gZGV0 ZWN0IGRlbGVnYXRpb24gaW4gUnVieS4NCj4gRm9yIHRoYXQgcmVhc29uIEkgdGhpbmsgaXQncyB2 YWx1YWJsZSB0byBvbmx5IGhhdmUgc3BlY2lhbCBiZWhhdmlvciBmb3IgdGhhdCBjYXNlLCBhbmQg b25seSB1bnRpbCB3ZSBjYW4gc2FmZWx5IG1pZ3JhdGUgdG8gYCgqYXJncywgKiprd2FyZ3MpYC1k ZWxlZ2F0aW9uLg0KDQpJdCdzIGFjdHVhbGx5IG5vdCB0aGF0IHByZWNpc2UuIEkgdGhpbmsgdGhp cyBpcyBKZXJlbXkncyBtYWluIHdvcnJ5IGFib3V0IHJ1YnkyX2tleXdvcmRzIGJ5IGRlZmF1bHQs IHRoYXQgYCphcmdzYCBpcyBub3QgYWx3YXlzIHVzZWQgb25seSBmb3IgZGVsZWdhdGlvbi4NCg0K PiBJZiBJIHVuZGVyc3RhbmQgY29ycmVjdGx5IGZyb20gdGhlIGZpcnN0IHBvc3QsIHlvdXIgcHJv cG9zYWwgaGFzIG1vcmUgc3RlcHMgdGhhbiBtaW5lLg0KDQpObywgaXQgaGFzIHRoZSBzYW1lIG51 bWJlciBvZiBzdGVwcywgaXQncyBqdXN0IG1vcmUgbGVuaWVudCBhYm91dCB0aGluZ3MgdGhhdCB3 ZSBjYW4gYWZmb3JkIHRvIGJlIGxlbmllbnQgYWJvdXQuIFRoZSAiU3RlcHMiIGluIHRoZSBwcm9w b3NhbCBhcmUgb25seSBjb25jZXB0dWFsIHN0ZXBzLCBpbiBvcmRlciB0byBleHBsYWluIHRoZSBs b2dpYy4gSXQncyBzdGlsbCBvbmUgcm91bmQgb2YgZGVwcmVjYXRpb25zIGluIDIuNyAoU3RlcHMg MS0zKSBhbmQgYW5vdGhlciBpbiAzLndhcm4gKFN0ZXAgNCkuIEFuZCBmb3IgZW5kLXVzZXJzIGl0 IGJvaWxzIGRvd24gdG8gdGhlIHNhbWUgdGhpbmc6IGlmIHlvdSBzZWUgYSB3YXJuaW5nLCBmaXgg aXQuIFRoZXJlJ3MganVzdCBmZXdlciB3YXJuaW5ncyB0byBmaXggYXQgb25jZS4NCg0KDQo+ID4g RGVzdHJ1Y3R1cmluZyBpdGVyYXRpb24gaXMgY29tcGF0aWJsZQ0KPiANCj4gVGhhdCB3b3VsZCBv bmx5IHdvcmsgaW4gdmVyeSBmZXcgY2FzZXMuDQo+IFRoYXQncyBhbiBhYnVzZSBvZiB0aGUgYXV0 b21hdGljIGNvbnZlcnNpb24sIGxldCdzIGtpbGwgaXQsIHRoZXJlIGlzIG5vIHdheSB0byBwcmVz ZXJ2ZSBpdCB3aXRob3V0IGJyZWFraW5nIHRoZSBzZXBhcmF0aW9uLg0KDQpJIGRpc2FncmVlIHRo aXMgaXMgYWJ1c2l2ZSBvciBoYWNreSBjb2RlLiBBbHRob3VnaCBJIG5ldmVyIHVzZWQgaXQgYmVm b3JlLCBteSBmaXJzdCBpbXByZXNzaW9uIHdhcyBvZiBhIHZlcnkgY2xlYW4gYW5kIHBvd2VyZnVs IGlkaW9tLiAjMTY0OTQgb25seSBzaG93ZWQgYSBgd29yZHNgIGFycmF5IHNvIEkgZG9uJ3Qga25v dyBob3cgaXQgd2FzIGJ1aWx0LiBQZXJoYXBzIG5laXRoZXIgb2YgeW91ciBgSlNPTi5sb2FkYCBv ciBgWyoqaDEsICoqaDJdYCBleGFtcGxlcyBpcyByZWxldmFudC4gV2hhdCdzIGltcG9ydGFudCB0 aG91Z2ggaXMgdGhhdCBpdCBfY2FuXyBiZSBtYWRlIHRvIHdvcmsgcXVpdGUgZWFzaWx5LCB3aXRo b3V0IGhhdmluZyB0byByZXN0cnVjdHVyZSBldmVyeXRoaW5nLiBBbmQgc2luY2UgaXQgYmVoYXZl cyBkaWZmZXJlbnRseSBiYXNlZCBvbiBoYXZpbmcgYSBwb3NpdGlvbmFsIGhhc2ggb3IgYSBrZXl3 b3JkIChmbGFnZ2VkKSBoYXNoLCB0aGF0IG1lYW5zIHNlcGFyYXRpb24gaXMgcHJlc2VydmVkLCBh dCBsZWFzdCB0byBzb21lIGV4dGVudC4NCg0KDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tDQpGZWF0dXJlICMxNjUxMTogU3RhZ2VkIHdhcm5pbmdzIGFuZCBiZXR0ZXIg Y29tcGF0aWJpbGl0eSBmb3Iga2V5d29yZCBhcmd1bWVudHMgaW4gMi43LjENCmh0dHBzOi8vYnVn cy5ydWJ5LWxhbmcub3JnL2lzc3Vlcy8xNjUxMSNjaGFuZ2UtODQyNTMNCg0KKiBBdXRob3I6IERh bjAwNDIgKERhbmllbCBEZUxvcm1lKQ0KKiBTdGF0dXM6IE9wZW4NCiogUHJpb3JpdHk6IE5vcm1h bA0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KQXMgYW4gYWx0ZXJu YXRpdmUgdG8gIzE2NDYzIGFuZCAjMTY0OTQgSSdkIGxpa2UgdG8gcHJvcG9zZSB0aGlzIGFwcHJv YWNoLCB3aGljaCBJIGJlbGlldmUgYWxsb3dzIGEgKiptdWNoKiogbW9yZSBmbGV4aWJsZSBwYXRo IGZvciBtaWdyYXRpb24gb2Yga2V5d29yZCBhcmd1bWVudHMuDQoNClRoZSBpZGVhIGlzIHRvIGlu ZGljYXRlIGZvciBldmVyeSBIYXNoIG9iamVjdCBpZiBpdCdzIGludGVuZGVkIHRvIHJlcHJlc2Vu dCBhIF9rZXl3b3JkXyBoYXNoIG9yIGEgX2RhdGFfIGhhc2guIFRoaXMgZXh0cmEgaW5mb3JtYXRp b24gaXMgdGhlbiB1c2VkIHRvIGdlbmVyYXRlIG1vcmUgZ3JhbnVsYXIgd2FybmluZ3MgZGVwZW5k aW5nIG9uIGEgdXNlcidzIGNvbXBhdGliaWxpdHkgbmVlZHMuDQoNClRoZSAia2V5d29yZG5lc3Mi IG9mIGEgaGFzaCB3b3VsZCBiZSBpbmRpY2F0ZWQgYnkgYSAqKmZsYWcqKiBvbiB0aGUgSGFzaCBv YmplY3Q7IHRoaXMgaXMgYWxyZWFkeSBpbXBsZW1lbnRlZCBpbiAyLjcgYW5kIGlzIHRoZSBhcHBy b2FjaCBmYXZvcmVkIGJ5IE1hdHouIExldCdzIGNhbGwgdGhpcyBmbGFnZ2VkIGhhc2ggYSAiS3dI YXNoIiwgYW5kIGEgbm9uLWZsYWdnZWQgaGFzaCBpcyBqdXN0IGEgIkhhc2giLiBOb3RlOiB0aGlz IGNvdWxkIGFsc28gYmUgaW1wbGVtZW50ZWQgdmlhIGEgKipzdWJjbGFzcyoqIG9mIEhhc2ggKEkg cGVyc29uYWxseSBmYXZvciB0aGlzIG9iamVjdC1vcmllbnRlZCBhcHByb2FjaCkgd2hpY2ggd2Fz IHRoZSBvcmlnaW5hbCBpZGVhIGluIHRoaXMgcHJvcG9zYWwuDQoNCkknbGwgdHJ5IHRvIGRlc2Ny aWJlIHRoZSBpZGVhIGluIGRldGFpbCBieSBicmVha2luZyBpdCBkb3duIGludG8gZmlndXJhdGl2 ZSBzdGVwcy4gKFNraXAgdG8gIlB1dHRpbmcgaXQgYWxsIHRvZ2V0aGVyIiBmb3IgdGhlIFRMO0RS IHZlcnNpb24uKSBJbWFnaW5lIHN0YXJ0aW5nIHdpdGggcnVieSAyLjYgYW5kIHRoZW46DQoNCiMj IyBTdGVwIDENCg0KV2hlbiBhIGRvdWJsZS1zcGxhdCBvciBhIGJyYWNlLWxlc3MgaGFzaCBpcyB1 c2VkLCBpbnN0ZWFkIG9mIGEgSGFzaCBpdCBjcmVhdGVzIGEgS3dIYXNoLg0KDQpgYGBydWJ5DQpk ZWYgZm9vKHgpIHggZW5kDQpmb28oazoxKS5jbGFzcyAgICAgICM9PiBLd0hhc2gNCmZvbygqKmhh c2gpLmNsYXNzICAgIz0+IEt3SGFzaA0KW2s6MV0ubGFzdC5jbGFzcyAgICAjPT4gS3dIYXNoDQpb KipoYXNoXS5sYXN0LmNsYXNzICM9PiBLd0hhc2gNCnsqKmhhc2h9LmNsYXNzICAgICAgIz0+IEhh c2gNCmBgYA0KDQpBdCB0aGlzIHBvaW50IHdlIGhhdmVuJ3QgaW50cm9kdWNlZCBhbnkgcmVhbCBj aGFuZ2UuIEV2ZXJ5dGhpbmcgdGhhdCB3b3JrZWQgYmVmb3JlIGlzIHN0aWxsIHdvcmtpbmcgdGhl IHNhbWUgd2F5Lg0KKFdpdGggYSBtaW5vciBleGNlcHRpb24gaWYgdXNpbmcgdGhlIHN1YmNsYXNz IGFwcHJvYWNoOiB1bnVzdWFsIGNvZGUgbGlrZSBga3cuY2xhc3MgPT0gSGFzaGAgd291bGQgbm93 IHJldHVybiBmYWxzZS4pDQoNCiMjIyBTdGVwIDINCg0KV2hlbiB0aGVyZSBpcyBhbWJpZ3VpdHkg ZHVlIHRvIG9wdGlvbmFsIHZzIGtleXdvcmQgYXJndW1lbnQsIHdlIHJlbHkgb24gdGhlIGxhc3Qg YXJndW1lbnQgYmVpbmcgSGFzaCBvciBLd0hhc2ggdG8gZGlzYW1iaWd1YXRlLg0KDQpgYGBydWJ5 DQpkZWYgZm9vKHg9bmlsLCAqKmt3KQ0KICBbeCxrd10NCmVuZA0KZm9vKHtrOjF9KSAjPT4gW3tr OjF9LHt9XQ0KZm9vKGs6MSkgICAjPT4gW25pbCx7azoxfV0NCmBgYA0KDQpUaGlzIGlzIHRoZSBf bWluaW11bV8gYW1vdW50IG9mIGluY29tcGF0aWJpbGl0eSByZXF1aXJlZCB0byBzb2x2ZSBBTEwg YnVncyBwcmV2aW91c2x5IHJlcG9ydGVkIHdpdGgga2V5d29yZCBhcmd1bWVudHMuICgjODA0MCwg IzgzMTYsICM5ODk4LCAjMTA4NTYsICMxMTIzNiwgIzExOTY3LCAjMTIxMDQsICMxMjcxNywgIzEy ODIxLCAjMTMzMzYsICMxMzY0NywgIzE0MTMwLCBldGMuKSANCg0KVGhlIHdhcm5pbmdzIGZvciB0 aGlzIHdvdWxkIGJlIGFib3V0IGFuIGltcGVuZGluZyBfY2hhbmdlIG9mIGJlaGF2aW9yXyBpbiB0 aGUgX25leHQgcnVieSB2ZXJzaW9uXywgd2hlcmUgYGZvbyh7azoxfSlgIGlzIG5vIGxvbmdlciBp bnRlcnByZXRlZCBhcyBrZXl3b3JkIGFyZ3VtZW50Lg0KDQojIyMgU3RlcCAzDQoNCkludHJvZHVj ZSBhZGRpdGlvbmFsIGluY29tcGF0aWJpbGl0eSB0byBpbXByb3ZlIGNsYXJpdHkgb2YgZGVzaWdu LiBIZXJlIHdlIGRlcHJlY2F0ZSB0aGUgYXV0b21hdGljIGNvbnZlcnNpb24gb2YgSGFzaCB0byBr ZXl3b3JkIGFyZ3VtZW50OyBvbmx5IEt3SGFzaCBpcyBhY2NlcHRlZC4gV2l0aCBhIGRlcHJlY2F0 aW9uL3dhcm5pbmcgcGhhc2UsIG9mIGNvdXJzZS4gVGhlICJhdXRvbWF0aWMiIHByb21vdGlvbiBv ZiBhIEt3SGFzaCB0byBhIGtleXdvcmQgYXJndW1lbnQgZm9sbG93cyB0aGUgc2FtZSBydWxlcyBh cyBhIEhhc2ggaW4gMi42OyBzaW5jZSB0aGUgS3dIYXNoIGlzIGNvbmNlcHR1YWxseSBpbnRlbmRl ZCB0byByZXByZXNlbnQga2V5d29yZCBhcmd1bWVudHMsIHRoaXMgY29udmVyc2lvbiBtYWtlcyBz ZW5zZSBpbiBhIHdheSB0aGF0IGEgbm9ybWFsIGRhdGEgSGFzaCBkb2Vzbid0LiBXZSd2ZSB0YWtl biB0aGUgImxhc3QgcG9zaXRpb25hbCBoYXNoIiBjb25jZXB0IGFuZCBzcGxpdCBpdCBpbnRvICJj b25jZXB0dWFsbHkgYSBoYXNoIiBhbmQgImNvbmNlcHR1YWxseSBrZXl3b3JkIGFyZ3VtZW50cyIu IF9Nb3N0IGltcG9ydGFudGx5XywgYWxsIHRoZSBjaGFuZ2VzIHJlcXVpcmVkIHRvIHNpbGVuY2Ug dGhlc2Ugd2FybmluZ3MgYXJlIF9jb21wYXRpYmxlIHdpdGggMi42Xy4NCg0KYGBgcnVieQ0KZGVm IGZvbyh4LCAqKmt3KTsgZW5kDQpmb28oazoxKSAgICAgICMgQXJndW1lbnRFcnJvciBiZWNhdXNl IHggbm90IHNwZWNpZmllZA0KZm9vKDEsIHtrOjF9KSAjIEFyZ3VtZW50RXJyb3IgYmVjYXVzZSB0 b28gbWFueSBhcmd1bWVudHM7IEhhc2ggY2Fubm90IGJlIGNvbnZlcnRlZCB0byBLd0hhc2hzDQpv cHRzID0gW2s6MV0uZmlyc3QNCmZvbyhvcHRzKSAgICAgIyBvcHRzIGlzIGEgS3dIYXNoIHRoZXJl Zm9yZSB1c2VkIGFzIGtleXdvcmQgYXJndW1lbnQ7IEFyZ3VtZW50RXJyb3IgYmVjYXVzZSB4IG5v dCBzcGVjaWZpZWQNCmZvbygxLCBvcHRzKSAgIyBvcHRzIGlzIGEgS3dIYXNoIHRoZXJlZm9yZSB1 c2VkIGFzIGtleXdvcmQgYXJndW1lbnQNCmBgYA0KDQpUaGUgd2FybmluZ3MgZm9yIHRoaXMgd291 bGQgYmUgYWJvdXQgdXBjb21pbmcgX2Vycm9yc18gZm9yIHBvc2l0aW9uYWwgYXJndW1lbnRzOiBg Zm9vKHg6MSlgIHdpbGwgYmUgImdpdmVuIDAsIGV4cGVjdGVkIDEiIGFuZCBgZm9vKDEse3g6Mn0p YCB3aWxsIGJlICJnaXZlbiAyLCBleHBlY3RlZCAxIi4gU3VjaCBlcnJvcnMgYXJlIHVzZWZ1bCB3 aGVuIGRldmVsb3BpbmcsIGJ1dCB0aGVyZSBpcyBubyBuZXcgZnVuY3Rpb25hbGl0eSBwZXIgc2Us IGp1c3QgYSBzdHJpY3RlciBzeW50YXguIFNvIGl0J3MgbGVzcyBpbXBvcnRhbnQgdG8gZXNjYWxh dGUgdG8gYW4gZXJyb3IgYW5kIHdlIGNhbiBrZWVwIHRoZSB3YXJuaW5ncyBmb3IgbG9uZ2VyIHRo YW4gU3RlcCAyLg0KDQpBdCB0aGlzIHBvaW50IHdlIGhhdmUgYWNoaWV2ZWQgX2FsbW9zdC1mdWxs XyAqKmR5bmFtaWMqKiBrZXl3b3JkIHNlcGFyYXRpb24sIGFzIG9wcG9zZWQgdG8gdGhlIGN1cnJl bnQgX2FsbW9zdC1mdWxsXyAqKnN0YXRpYyoqIGFwcHJvYWNoLiBJIHdhbnQgdG8gbWFrZSB0aGUg cG9pbnQgaGVyZSB0aGF0LCB5ZXMsIGtleXdvcmQgYXJndW1lbnRzICoqYXJlKiogc2VwYXJhdGVk LCBpdCdzIGp1c3QgYSBkaWZmZXJlbnQgcGFyYWRpZ20uIFdpdGggc3RhdGljIHNlcGFyYXRpb24s IGEga2V5d29yZCBhcmd1bWVudCBpcyBkZWZpbmVkIGxleGljYWxseSBieSBhIGRvdWJsZS1zcGxh dC4gV2l0aCBkeW5hbWljIHNlcGFyYXRpb24sIGEga2V5d29yZCBhcmd1bWVudCBpcyB3aGVuIHRo ZSBsYXN0IGFyZ3VtZW50IGlzIGEgS3dIYXNoLiB7e05vdGU6IEknbSBzYXlpbmcgImFsbW9zdC1m dWxsIiBiZWNhdXNlIEt3SGFzaCBpcyBub3QgcHJvbW90ZWQgdG8ga2V5d29yZHMgaW4gYGRlZiBm b28oYSwqKmt3KTtlbmQ7Zm9vKHg6MSlgIGFuZCBiZWNhdXNlIHN0YXRpYyBrZXl3b3JkcyBhcmUg YXV0by1kZW1vdGVkIHRvIHBvc2l0aW9uYWwgaW4gYGRlZiBmb28oYSk7ZW5kO2Zvbyh4OjEpYH19 DQoNCkFueSBmb3JtIG9mIGRlbGVnYXRpb24gd29ya3Mgd2l0aCBubyBjaGFuZ2UgcmVxdWlyZWQu IFRoaXMgcHJlc2VydmVzIHRoZSBiZWhhdmlvciBvZiAyLjYgYnV0IG9ubHkgZm9yIEt3SGFzaCBv YmplY3RzLiBUaGlzIGlzIHNpbWlsYXIgdG8gaGF2aW5nIDIuNyB3aXRoIGBydWJ5Ml9rZXl3b3Jk c2AgZW5hYmxlZCBieSBkZWZhdWx0LiBCdXQgYWxzbyBkaWZmZXJlbnQgaW4gc29tZSB3YXlzOyBt b3N0IG5vdGFibHkgaXQgYWxsb3dzIHRoZSBjYXNlIHNob3duIGluICMxNjQ5NCB0byB3b3JrIGJ5 IGRlZmF1bHQ6DQoNCmBgYHJ1YnkNCmFycmF5ID0gW3g6MV0NCmFycmF5LnB1c2goeDoyKQ0KYXJy YXkubWFweyB8eDp8IHggfSAjPT4gWzEsMl0NClt7eDozfV0ubWFweyB8eDp8IHggfSAjPT4gYnV0 IHRoaXMgd2FybnMsIGFzIGl0IHNob3VsZA0KYGBgDQoNClRoZSBjdXJyZW50IGFwcHJvYWNoIGRv ZXMgbm90IGFsbG93IHRoaXMgdG8gd29yayBhdCBhbGwuIFRoZSBzb2x1dGlvbiBwcm9wb3NlZCBp biAjMTY0OTQgaGFzIGFsbCB0aGUgc2FtZSBmbGF3cyBhcyBIYXNoLWJhc2VkIGtleXdvcmQgYXJn dW1lbnRzOyB3aGF0IGhhcHBlbnMgdG8gYGVhY2h7IHx4PW5pbCwqKmt3fCB9YCA/IFRoaXMgc29s dXRpb24gYWxsb3dzIGEgS3dIYXNoIHRvIGJlIGNvbnZlcnRlZCB0by4uLiBrZXl3b3Jkcy4gVmVy eSB1bnN1cnByaXNpbmcuDQoNCkdpdmVuIHRoYXQgcnVieSBpcyBhIGR5bmFtaWNhbGx5LXR5cGVk IGxhbmd1YWdlIEkgZmVlbCB0aGF0IGR5bmFtaWMgdHlwaW5nIG9mIGtleXdvcmRzIGlmIGEgbW9y ZSBuYXR1cmFsIGZpdCB0aGFuIHN0YXRpYyB0eXBpbmcuIEJ1dCBJIHJlYWxpemUgdGhhdCBtYW55 IGRpc2FncmVlIHdpdGggdGhhdCwgd2hpY2ggaXMgd2h5IHdlIGNvbnRpbnVlIHRvLi4uDQoNCiMj IyBTdGVwIDQNCg0KSW50cm9kdWNlIGFkZGl0aW9uYWwgaW5jb21wYXRpYmlsaXR5IHRvIHJlYWNo IHN0YXRpYy9sZXhpY2FsIHNlcGFyYXRpb24gb2Yga2V5d29yZCBhcmd1bWVudHMuIEhlcmUgd2Ug cmVxdWlyZSB0aGF0IGV2ZW4gYSBLd0hhc2ggc2hvdWxkIGJlIHBhc3NlZCB3aXRoIGEgZG91Ymxl LXNwbGF0IGluIG9yZGVyIHRvIHF1YWxpZnkgYXMgYSBrZXl3b3JkIGFyZ3VtZW50Lg0KDQpgYGBy dWJ5DQpkZWYgYmFyKCoqa3cpDQplbmQNCmRlZiBmb28oKiprdykNCiAgYmFyKGt3KSAgICM9PiBl cnJvcjsgS3dIYXNoIHBhc3NlZCB3aXRob3V0ICoqDQogIGJhcigqKmt3KSAjPT4gb2sNCmVuZA0K YGBgDQoNCkF0IHRoaXMgcG9pbnQgd2UndmUgcmVhY2hlZCB0aGUgc2FtZSBiZWhhdmlvciBhcyAy LjcuIERlbGVnYXRpb24gbmVlZHMgdG8gYmUgZml4ZWQsIGJ1dCBhcyB3ZSBrbm93IHRoZSBjaGFu Z2VzIHJlcXVpcmVkIHRvIHNpbGVuY2UgdGhlc2Ugd2FybmluZ3MgYXJlICoqbm90KiogY29tcGF0 aWJsZSB3aXRoIDIuNiBvciAyLjcuIFRoZSB3YXJuaW5ncyBmb3IgdGhpcyBhcmUgX2Z1bmRhbWVu dGFsbHkgbm90IGZpeGFibGVfIGFzIGxvbmcgYXMgU3RlcCAyIGhhcyBub3QgYmVlbiBmaXhlZC4g VGhpcyBpcyB0aGUgY29yZSByZWFzb24gd2h5IGBydWJ5Ml9rZXl3b3Jkc2AgaXMgY3VycmVudGx5 IG5lY2Vzc2FyeSBpbiAyLjcuIFNvIGluIHRoZSB2ZXJzaW9uIGFmdGVyIDIuNyB3ZSBjYW4gZW5h YmxlIHRoZXNlIHdhcm5pbmdzIGJ5IGRlZmF1bHQgc2luY2UgaXQncyBub3cgcG9zc2libGUgdG8g Zml4IGRlbGVnYXRpb24gdG8gdXNlIHN0YXRpYyBrZXl3b3Jkcy4gRXhjZXB0IHRoYXQgZ2VtIGF1 dGhvcnMgd2hvIG5lZWQgdG8gc3RheSBjb21wYXRpYmxlIHdpdGgg4omkMi43IGNhbm5vdCB5ZXQg bWFrZSB0aGVzZSBjaGFuZ2VzLCBzbyB3ZSBpbnRyb2R1Y2UgYSB3YXkgdG8gX3NpbGVuY2UgKipv bmx5KiogdGhlc2UgIlN0ZXAgNCIgd2FybmluZ3NfLCBmb3IgcGVvcGxlIHdobyBuZWVkIHRvIHJl bWFpbiBjb21wYXRpYmxlIHdpdGgg4omkMi43LiBBbmQgd2Uga2VlcCB0aGVtIGFzIHdhcm5pbmdz IGluc3RlYWQgb2YgZXJyb3JzIHVudGlsIHJ1YnkgMi43IGlzIEVPTC4NCg0KU28gaW5zdGVhZCBv ZiBoYXZpbmcgdG8gdXBkYXRlIGEgYnVuY2ggb2YgcGxhY2VzIHdpdGggYHJ1YnkyX2tleXdvcmRz YCBqdXN0IHRvIHRlbXBvcmFyaWx5IHNpbGVuY2Ugd2FybmluZ3MsIGl0J3MgYSBzaW5nbGUgZmxh ZyBsaWtlIGBXYXJuaW5nWzpydWJ5M19rZXl3b3Jkc11gLiBPbmNlIHJ1YnkgMi43IGlzIEVPTCB0 aGVzZSBiZWNvbWUgY29udHJvbGxlZCBieSBgV2FybmluZ1s6ZGVwcmVjYXRlZF1gIHdoaWNoIHRl bGxzIHBlb3BsZSB0aGV5ICoqaGF2ZSoqIHRvIGZpeCB0aGVpciBjb2RlLiBXaGljaCBpcyBqdXN0 IGxpa2UgdGhlIGV2ZW50dWFsIGRlcHJlY2F0aW9uIG9mIGBydWJ5Ml9rZXl3b3Jkc2AsIGp1c3Qg d2l0aG91dCB0aGUgYnVzeSB3b3JrIG9mIGFkZGluZyBgcnVieTJfa2V5d29yZHNgIHN0YXRlbWVu dHMgaW4gdGhlIGZpcnN0IHBsYWNlLiBCdXQgYWdhaW4sIHRoaXMgaW50cm9kdWNlcyBubyBuZXcg ZnVuY3Rpb25hbGl0eSwganVzdCBhIHN0cmljdGVyIHN5bnRheC4gU28gd2UgY2FuIHBsYXkgbmlj ZSBhbmQgbGVhdmUgdGhlIHdhcm5pbmdzIGZvciBhIGZldyB5ZWFycyBiZWZvcmUgY2hhbmdpbmcg dG8gZXJyb3JzLg0KDQpUaGUgcXVlc3Rpb24gcmVtYWlucyBvZiBob3cgdG8gaGFuZGxlICMxNjQ5 NCBoZXJlLiBFaXRoZXIgZGlzYWxsb3cgaXQgZW50aXJlbHksIGJ1dCBJIHRoaW5rIHRoYXQgd291 bGQgYmUgYSBzaGFtZS4gT3IganVzdCBsaWtlICMxNjQ5NCBzdWdnZXN0cywgYWxsb3cgaGFzaCB1 bnBhY2tpbmcgaW4gbm9uLWxhbWJkYSBQcm9jLiBFeGNlcHQgdGhhdCBub3cgaXQgY2FuIGJlIGEg S3dIYXNoIGluc3RlYWQgb2YgYSBIYXNoLCB3aGljaCBhdCBsZWFzdCBwcmVzZXJ2ZXMgZHluYW1p YyBrZXl3b3JkIHNlcGFyYXRpb24uDQoNCiMjIFB1dHRpbmcgaXQgYWxsIHRvZ2V0aGVyIChUTDtE UikNCg0KVGhlIGlkZWEgaXMgX25vdF8gdG8gcmVpbXBsZW1lbnQga2V5d29yZCBhcmd1bWVudCBz ZXBhcmF0aW9uOyBhbGwgdGhhdCBpcyBuZWVkZWQgaXMgdG8gaW1wbGVtZW50IHRoZSB0aGluZ3Mg YWJvdmUgdGhhdCBhcmUgbm90IGluIDIuNzoNCiogQ3JlYXRlIGEgS3dIYXNoIG9iamVjdCBmb3Ig YnJhY2UtbGVzcyBhbmQgZG91YmxlLXNwbGF0dGVkIGhhc2hlcy4NCiogRGlmZmVyZW50aWF0ZSB0 aGUgdmFyaW91cyB0eXBlcyBvZiB3YXJuaW5ncyBhbmQgYWxsb3cgdG8gdG9nZ2xlIG9uL29mZiBz ZXBhcmF0ZWx5DQogICogU3RlcCAyIHdhcm5pbmdzIF9tdXN0XyBiZSBmaXhlZCBub3c7IGNhbm5v dCB0b2dnbGUgb2ZmDQogICogU3RlcCAzIHdhcm5pbmdzIF9zaG91bGRfIGJlIGZpeGVkIG5vdyBi dXQgeW91IGRvbid0IGFic29sdXRlbHkgbmVlZCB0byB1cGdyYWRlIHlvdXIgZ2VtcyBqdXN0IGZv ciB0aGF0DQogICogU3RlcCA0IHdhcm5pbmdzIF9zaG91bGRfIGJlIGZpeGVkIGluIG5leHQgdmVy c2lvbiB1bmxlc3MgeW91IG5lZWQgdG8gc3VwcG9ydCDiiaQyLjcNCg0KSSB0aGluayB0aGF0J3Mg YWxsLCByZWFsbHkuLi4NCg0KIyMjIFByb3MNCiogQ2xlYW5lciB3YXkgdG8gc29sdmUgIzE2NDk0 DQoqIEJldHRlciBjb21wYXRpYmlsaXR5IChhdCBsZWFzdCB1bnRpbCAyLjYgaXMgRU9MKQ0KICAg KiBkZWxlZ2F0aW9uDQogICAqIHN0b3JpbmcgYW4gYXJndW1lbnQgbGlzdCB0aGF0IGVuZHMgd2l0 aCBhIEt3SGFzaA0KICAgKiBkZXN0cnVjdHVyaW5nIGl0ZXJhdGlvbiAoIzE2NDk0KQ0KKiBXZSBj YW4gYXZvaWQgdGhlICJ1bmZvcnR1bmF0ZSBjb3JuZXIgY2FzZSIgYXMgZGVzY3JpYmVkIGluIHRo ZSBbcmVsZWFzZSBub3Rlc10oaHR0cHM6Ly93d3cucnVieS1sYW5nLm9yZy9lbi9uZXdzLzIwMTkv MTIvMTIvc2VwYXJhdGlvbi1vZi1wb3NpdGlvbmFsLWFuZC1rZXl3b3JkLWFyZ3VtZW50cy1pbi1y dWJ5LTMtMC8pDQogICAqIGluIDIuNyBvbmx5IGRvIG5vdCBvdXRwdXQgIlN0ZXAgNCIgd2Fybmlu Z3MsIGxlYXZlIGRlbGVnYXRpb24gbGlrZSBpdCB3YXMNCiAgICogaW4gMi44IHRoZSAiU3RlcCAz IiB3YXJuaW5ncyBoYXZlIGJlZW4gZml4ZWQgYW5kIGEgSGFzaCB3aWxsIG5vdCBiZSBjb252ZXJ0 ZWQgdG8ga2V5d29yZCBhcmd1bWVudHMNCiAgICogZGVsZWdhdGlvbiBjYW4gbm93IHNhZmVseSBi ZSBmaXhlZCB0byB1c2UgdGhlIGAqKmAgc3ludGF4DQoqIHJ1YnkyX2tleXdvcmRzIGlzIG5vdCBy ZXF1aXJlZCwgd2hpY2ggaXMgZGVzaXJhYmxlIGJlY2F1c2UNCiAgICogaXQncyBhIGhpZGRlbiBm bGFnIF9oYWNrXw0KICAgKiBpdCByZXF1aXJlcyB0byBjaGFuZ2UgdGhlIGNvZGUgbm93LCBhbmQg Y2hhbmdlIGl0IF9hZ2Fpbl8gd2hlbiBydWJ5Ml9rZXl3b3JkcyBpcyBkZXByZWNhdGVkOyB0d2lj ZSB0aGUgd29yazsgdHdpY2UgdGhlIGdlbSB1cGdyYWRlcw0KICAgKiBpdCB3YXMgc3VwcG9zZWQg dG8gYmUgdXNlZCBvbmx5IGZvciBwZW9wbGUgd2hvIG5lZWQgdG8gc3VwcG9ydCAyLjYgb3IgYmVs b3csIGJ1dCBpdCdzIGJlaW5nIG1pc3VuZGVyc3Rvb2QgYXMgYW4gYWNjZXB0YWJsZSB3YXkgdG8g Zml4IGRlbGVnYXRpb24gaW4gZ2VuZXJhbA0KICAgKiB0aGVyZSdzIHRoZSBub24temVybyByaXNr IHRoYXQgcnVieTJfa2V5d29yZHMgd2lsbCBuZXZlciBiZSByZW1vdmVkLCBsZWF2aW5nIHVzIHdp dGggYSBwZXJtYW5lbnQgImhhY2sgbW9kZSINCiAgICAgICogZHluYW1pYyBrZXl3b3JkcyBhcmUg YnkgZmFyIHByZWZlcmFibGUgdG8gc3VwcG9ydGluZyBydWJ5Ml9rZXl3b3JkcyBmb3JldmVyDQoq IExpa2VseSBfYmV0dGVyIHBlcmZvcm1hbmNlXywgYXMgdGhlIEt3SGFzaCBjbGFzcyBjYW4gYmUg b3B0aW1pemVkIHNwZWNpZmljYWxseSBmb3IgdGhlIGNoYXJhY3RlcmlzdGljcyBvZiBrZXl3b3Jk IGFyZ3VtZW50cy4NCiogTW9yZSBmbGV4aWJsZSBtaWdyYXRpb24NCiAgICogQWxsb3cgbW9yZSB0 aW1lIHRvIHVwZ3JhZGUgdGhlIGhhcmQgc3R1ZmYgaW4gU3RlcCA0DQogICAqIENhbiByZWFjaCB0 aGUgX3NhbWVfIGdvYWwgYXMgdGhlIGN1cnJlbnQgc3RhdGljIGFwcHJvYWNoDQogICAqIExhcmdl ciAic3VwcG9ydCB6b25lIiBodHRwczovL3hrY2QuY29tLzIyMjQvDQogICAqIEluc3RlYWQgb2Yg d2lkZS1yYW5naW5nIGluY29tcGF0aWJpbGl0aWVzIGFsbCBhdCBvbmNlLCB0aGVyZSdzIHRoZSBf cG9zc2liaWxpdHlfIG9mIG1ha2luZyBpdCBmaW5lci1ncmFpbmVkIGFuZCBtb3JlIGdyYWR1YWwN CiAgICAgICogcnVieWlzdHMgY2FuIF9jaG9vc2VfIHRvIG1pZ3JhdGUgYWxsIGF0IG9uY2Ugb3Ig aW4gc21hbGxlciBjaHVua3MNCiAgICogSXQgaGVkZ2VzIHRoZSByaXNrcyBieSBrZWVwaW5nIG1v cmUgcG9zc2liaWxpdGllcyBvcGVuIGZvciBub3cuDQogICAqIEl0IGFsbG93cyB0byBjb3Atb3V0 IGF0IFN0ZXAgMyBpZiBTdGVwIDQgdHVybnMgb3V0IHRvbyBoYXJkIGJlY2F1c2UgaXQgYnJlYWtz IHRvbyBtdWNoIHN0dWZmDQoNCiMjIyBDb25zDQoqIEl0IGFsbG93cyB0byBjb3Atb3V0IGF0IFN0 ZXAgMyBpZiBTdGVwIDQgdHVybnMgb3V0IHRvbyBoYXJkIGJlY2F1c2UgaXQgYnJlYWtzIHRvbyBt dWNoIHN0dWZmDQoNCg0KDQoNCi0tIA0KaHR0cHM6Ly9idWdzLnJ1YnktbGFuZy5vcmcvDQoKVW5z dWJzY3JpYmU6IDxtYWlsdG86cnVieS1jb3JlLXJlcXVlc3RAcnVieS1sYW5nLm9yZz9zdWJqZWN0 PXVuc3Vic2NyaWJlPgo8aHR0cDovL2xpc3RzLnJ1YnktbGFuZy5vcmcvY2dpLWJpbi9tYWlsbWFu L29wdGlvbnMvcnVieS1jb3JlPgo=