[ruby-core:96947] [Ruby master Feature#16511] Staged warnings for keyword arguments
From:
daniel@...42.com
Date:
2020-01-20 00:51:56 UTC
List:
ruby-core #96947
SXNzdWUgIzE2NTExIGhhcyBiZWVuIHVwZGF0ZWQgYnkgRGFuMDA0MiAoRGFuaWVsIERlTG9ybWUp Lg0KDQpEZXNjcmlwdGlvbiB1cGRhdGVkDQpTdWJqZWN0IGNoYW5nZWQgZnJvbSBTdWJjbGFzcyBv ZiBIYXNoIGZvciBrZXl3b3JkIGFyZ3VtZW50cyB0byBTdGFnZWQgd2FybmluZ3MgZm9yIGtleXdv cmQgYXJndW1lbnRzDQoNCkknbSBhZGp1c3RpbmcgdGhlIHByb3Bvc2FsIHRvIGZvY3VzIG9uIHRo ZSBnb2FsIChmbGV4aWJsZSBkZXByZWNhdGlvbikgcmF0aGVyIHRoYW4gdGhlIG1lYW5zIChzdWJj bGFzcyBvciBmbGFnKQ0KDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t DQpGZWF0dXJlICMxNjUxMTogU3RhZ2VkIHdhcm5pbmdzIGZvciBrZXl3b3JkIGFyZ3VtZW50cw0K aHR0cHM6Ly9idWdzLnJ1YnktbGFuZy5vcmcvaXNzdWVzLzE2NTExI2NoYW5nZS04Mzk3NA0KDQoq IEF1dGhvcjogRGFuMDA0MiAoRGFuaWVsIERlTG9ybWUpDQoqIFN0YXR1czogT3Blbg0KKiBQcmlv cml0eTogTm9ybWFsDQoqIEFzc2lnbmVlOiANCiogVGFyZ2V0IHZlcnNpb246IA0KLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KQXMgYW4gYWx0ZXJuYXRpdmUgdG8gIzE2 NDYzIGFuZCAjMTY0OTQgSSdkIGxpa2UgdG8gcHJvcG9zZSB0aGlzIGFwcHJvYWNoLCB3aGljaCBJ IGJlbGlldmUgYWxsb3dzIGEgKiptdWNoKiogbW9yZSBmbGV4aWJsZSBwYXRoIGZvciBtaWdyYXRp b24gb2Yga2V5d29yZCBhcmd1bWVudHMuDQoNClRoZSBpZGVhIGlzIHRvIGluZGljYXRlIGZvciBl dmVyeSBIYXNoIG9iamVjdCBpZiBpdCdzIGludGVuZGVkIHRvIHJlcHJlc2VudCBhIF9rZXl3b3Jk XyBoYXNoIG9yIGEgX2RhdGFfIGhhc2guIFRoaXMgZXh0cmEgaW5mb3JtYXRpb24gaXMgdGhlbiB1 c2VkIHRvIGdlbmVyYXRlIG1vcmUgZ3JhbnVsYXIgd2FybmluZ3MgZGVwZW5kaW5nIG9uIGEgdXNl cidzIGNvbXBhdGliaWxpdHkgbmVlZHMuDQoNClRoZSAia2V5d29yZG5lc3MiIG9mIGEgaGFzaCB3 b3VsZCBiZSBpbmRpY2F0ZWQgYnkgYSAqKmZsYWcqKiBvbiB0aGUgSGFzaCBvYmplY3Q7IHRoaXMg aXMgYWxyZWFkeSBpbXBsZW1lbnRlZCBpbiAyLjcgYW5kIGlzIHRoZSBhcHByb2FjaCBmYXZvcmVk IGJ5IE1hdHouIExldCdzIGNhbGwgdGhpcyBmbGFnZ2VkIGhhc2ggYSAiS3dIYXNoIiwgYW5kIGEg bm9uLWZsYWdnZWQgaGFzaCBpcyBqdXN0IGEgIkhhc2giLiBOb3RlOiB0aGlzIGNvdWxkIGFsc28g YmUgaW1wbGVtZW50ZWQgdmlhIGEgKipzdWJjbGFzcyoqIG9mIEhhc2ggKEkgcGVyc29uYWxseSBm YXZvciB0aGlzIG9iamVjdC1vcmllbnRlZCBhcHByb2FjaCkgd2hpY2ggd2FzIHRoZSBvcmlnaW5h bCBpZGVhIGluIHRoaXMgcHJvcG9zYWwuDQoNCkknbGwgdHJ5IHRvIGRlc2NyaWJlIHRoZSBpZGVh IGluIGRldGFpbCBieSBicmVha2luZyBpdCBkb3duIGludG8gZmlndXJhdGl2ZSBzdGVwcy4gKFNr aXAgdG8gIlB1dHRpbmcgaXQgYWxsIHRvZ2V0aGVyIiBmb3IgdGhlIFRMO0RSIHZlcnNpb24uKSBJ bWFnaW5lIHN0YXJ0aW5nIHdpdGggcnVieSAyLjYgYW5kIHRoZW46DQoNCiMjIyBTdGVwIDENCg0K V2hlbiBhIGRvdWJsZS1zcGxhdCBvciBhIGJyYWNlLWxlc3MgaGFzaCBpcyB1c2VkLCBpbnN0ZWFk IG9mIGEgSGFzaCBpdCBjcmVhdGVzIGEgS3dIYXNoLg0KDQpgYGBydWJ5DQpkZWYgZm9vKHgpIHgg ZW5kDQpmb28oazoxKS5jbGFzcyAgICAgICM9PiBLd0hhc2gNCmZvbygqKmhhc2gpLmNsYXNzICAg Iz0+IEt3SGFzaA0KW2s6MV0ubGFzdC5jbGFzcyAgICAjPT4gS3dIYXNoDQpbKipoYXNoXS5sYXN0 LmNsYXNzICM9PiBLd0hhc2gNCnsqKmhhc2h9LmNsYXNzICAgICAgIz0+IEhhc2gNCmBgYA0KDQpB dCB0aGlzIHBvaW50IHdlIGhhdmVuJ3QgaW50cm9kdWNlZCBhbnkgcmVhbCBjaGFuZ2UuIEV2ZXJ5 dGhpbmcgdGhhdCB3b3JrZWQgYmVmb3JlIGlzIHN0aWxsIHdvcmtpbmcgdGhlIHNhbWUgd2F5Lg0K KFdpdGggYSBtaW5vciBleGNlcHRpb24gaWYgdXNpbmcgdGhlIHN1YmNsYXNzIGFwcHJvYWNoOiB1 bnVzdWFsIGNvZGUgbGlrZSBga3cuY2xhc3MgPT0gSGFzaGAgd291bGQgbm93IHJldHVybiBmYWxz ZS4pDQoNCiMjIyBTdGVwIDINCg0KV2hlbiB0aGVyZSBpcyBhbWJpZ3VpdHkgZHVlIHRvIG9wdGlv bmFsIHZzIGtleXdvcmQgYXJndW1lbnQsIHdlIHJlbHkgb24gdGhlIGxhc3QgYXJndW1lbnQgYmVp bmcgSGFzaCBvciBLd0hhc2ggdG8gZGlzYW1iaWd1YXRlLg0KDQpgYGBydWJ5DQpkZWYgZm9vKHg9 bmlsLCAqKmt3KQ0KICBbeCxrd10NCmVuZA0KZm9vKHtrOjF9KSAjPT4gW3trOjF9LHt9XQ0KZm9v KGs6MSkgICAjPT4gW25pbCx7azoxfV0NCmBgYA0KDQpUaGlzIGlzIHRoZSBfbWluaW11bV8gYW1v dW50IG9mIGluY29tcGF0aWJpbGl0eSByZXF1aXJlZCB0byBzb2x2ZSBBTEwgYnVncyBwcmV2aW91 c2x5IHJlcG9ydGVkIHdpdGgga2V5d29yZCBhcmd1bWVudHMuICgjODA0MCwgIzgzMTYsICM5ODk4 LCAjMTA4NTYsICMxMTIzNiwgIzExOTY3LCAjMTIxMDQsICMxMjcxNywgIzEyODIxLCAjMTMzMzYs ICMxMzY0NywgIzE0MTMwLCBldGMuKSANCg0KVGhlIHdhcm5pbmdzIGZvciB0aGlzIHdvdWxkIGJl IGFib3V0IGFuIGltcGVuZGluZyBfY2hhbmdlIG9mIGJlaGF2aW9yXyBpbiB0aGUgX25leHQgcnVi eSB2ZXJzaW9uXywgd2hlcmUgYGZvbyh7azoxfSlgIGlzIG5vIGxvbmdlciBpbnRlcnByZXRlZCBh cyBrZXl3b3JkIGFyZ3VtZW50Lg0KDQojIyMgU3RlcCAzDQoNCkludHJvZHVjZSBhZGRpdGlvbmFs IGluY29tcGF0aWJpbGl0eSB0byBpbXByb3ZlIGNsYXJpdHkgb2YgZGVzaWduLiBIZXJlIHdlIGRl cHJlY2F0ZSB0aGUgYXV0b21hdGljIGNvbnZlcnNpb24gb2YgSGFzaCB0byBrZXl3b3JkIGFyZ3Vt ZW50OyBvbmx5IEt3SGFzaCBpcyBhY2NlcHRlZC4gV2l0aCBhIGRlcHJlY2F0aW9uL3dhcm5pbmcg cGhhc2UsIG9mIGNvdXJzZS4gVGhlICJhdXRvbWF0aWMiIHByb21vdGlvbiBvZiBhIEt3SGFzaCB0 byBhIGtleXdvcmQgYXJndW1lbnQgZm9sbG93cyB0aGUgc2FtZSBydWxlcyBhcyBhIEhhc2ggaW4g Mi42OyBzaW5jZSB0aGUgS3dIYXNoIGlzIGNvbmNlcHR1YWxseSBpbnRlbmRlZCB0byByZXByZXNl bnQga2V5d29yZCBhcmd1bWVudHMsIHRoaXMgY29udmVyc2lvbiBtYWtlcyBzZW5zZSBpbiBhIHdh eSB0aGF0IGEgbm9ybWFsIGRhdGEgSGFzaCBkb2Vzbid0LiBXZSd2ZSB0YWtlbiB0aGUgImxhc3Qg cG9zaXRpb25hbCBoYXNoIiBjb25jZXB0IGFuZCBzcGxpdCBpdCBpbnRvICJjb25jZXB0dWFsbHkg YSBoYXNoIiBhbmQgImNvbmNlcHR1YWxseSBrZXl3b3JkIGFyZ3VtZW50cyIuIF9Nb3N0IGltcG9y dGFudGx5XywgYWxsIHRoZSBjaGFuZ2VzIHJlcXVpcmVkIHRvIHNpbGVuY2UgdGhlc2Ugd2Fybmlu Z3MgYXJlIF9jb21wYXRpYmxlIHdpdGggMi42Xy4NCg0KYGBgcnVieQ0KZGVmIGZvbyh4LCAqKmt3 KTsgZW5kDQpmb28oazoxKSAgICAgICMgQXJndW1lbnRFcnJvciBiZWNhdXNlIHggbm90IHNwZWNp ZmllZA0KZm9vKDEsIHtrOjF9KSAjIEFyZ3VtZW50RXJyb3IgYmVjYXVzZSB0b28gbWFueSBhcmd1 bWVudHM7IEhhc2ggY2Fubm90IGJlIGNvbnZlcnRlZCB0byBLd0hhc2hzDQpvcHRzID0gW2s6MV0u Zmlyc3QNCmZvbyhvcHRzKSAgICAgIyBvcHRzIGlzIGEgS3dIYXNoIHRoZXJlZm9yZSB1c2VkIGFz IGtleXdvcmQgYXJndW1lbnQ7IEFyZ3VtZW50RXJyb3IgYmVjYXVzZSB4IG5vdCBzcGVjaWZpZWQN CmZvbygxLCBvcHRzKSAgIyBvcHRzIGlzIGEgS3dIYXNoIHRoZXJlZm9yZSB1c2VkIGFzIGtleXdv cmQgYXJndW1lbnQNCmBgYA0KDQpUaGUgd2FybmluZ3MgZm9yIHRoaXMgd291bGQgYmUgYWJvdXQg dXBjb21pbmcgX2Vycm9yc18gZm9yIHBvc2l0aW9uYWwgYXJndW1lbnRzOiBgZm9vKHg6MSlgIHdp bGwgYmUgImdpdmVuIDAsIGV4cGVjdGVkIDEiIGFuZCBgZm9vKDEse3g6Mn0pYCB3aWxsIGJlICJn aXZlbiAyLCBleHBlY3RlZCAxIi4gU3VjaCBlcnJvcnMgYXJlIHVzZWZ1bCB3aGVuIGRldmVsb3Bp bmcsIGJ1dCB0aGVyZSBpcyBubyBuZXcgZnVuY3Rpb25hbGl0eSBwZXIgc2UsIGp1c3QgYSBzdHJp Y3RlciBzeW50YXguIFNvIGl0J3MgbGVzcyBpbXBvcnRhbnQgdG8gZXNjYWxhdGUgdG8gYW4gZXJy b3IgYW5kIHdlIGNhbiBrZWVwIHRoZSB3YXJuaW5ncyBmb3IgbG9uZ2VyIHRoYW4gU3RlcCAyLg0K DQpBdCB0aGlzIHBvaW50IHdlIGhhdmUgYWNoaWV2ZWQgX2FsbW9zdC1mdWxsXyAqKmR5bmFtaWMq KiBrZXl3b3JkIHNlcGFyYXRpb24sIGFzIG9wcG9zZWQgdG8gdGhlIGN1cnJlbnQgX2FsbW9zdC1m dWxsXyAqKnN0YXRpYyoqIGFwcHJvYWNoLiBJIHdhbnQgdG8gbWFrZSB0aGUgcG9pbnQgaGVyZSB0 aGF0LCB5ZXMsIGtleXdvcmQgYXJndW1lbnRzICoqYXJlKiogc2VwYXJhdGVkLCBpdCdzIGp1c3Qg YSBkaWZmZXJlbnQgcGFyYWRpZ20uIFdpdGggc3RhdGljIHNlcGFyYXRpb24sIGEga2V5d29yZCBh cmd1bWVudCBpcyBkZWZpbmVkIGxleGljYWxseSBieSBhIGRvdWJsZS1zcGxhdC4gV2l0aCBkeW5h bWljIHNlcGFyYXRpb24sIGEga2V5d29yZCBhcmd1bWVudCBpcyB3aGVuIHRoZSBsYXN0IGFyZ3Vt ZW50IGlzIGEgS3dIYXNoLiB7e05vdGU6IEknbSBzYXlpbmcgImFsbW9zdC1mdWxsIiBiZWNhdXNl IEt3SGFzaCBpcyBub3QgcHJvbW90ZWQgdG8ga2V5d29yZHMgaW4gYGRlZiBmb28oYSwqKmt3KTtl bmQ7Zm9vKHg6MSlgIGFuZCBiZWNhdXNlIHN0YXRpYyBrZXl3b3JkcyBhcmUgYXV0by1kZW1vdGVk IHRvIHBvc2l0aW9uYWwgaW4gYGRlZiBmb28oYSk7ZW5kO2Zvbyh4OjEpYH19DQoNCkFueSBmb3Jt IG9mIGRlbGVnYXRpb24gd29ya3Mgd2l0aCBubyBjaGFuZ2UgcmVxdWlyZWQuIFRoaXMgcHJlc2Vy dmVzIHRoZSBiZWhhdmlvciBvZiAyLjYgYnV0IG9ubHkgZm9yIEt3SGFzaCBvYmplY3RzLiBUaGlz IGlzIHNpbWlsYXIgdG8gaGF2aW5nIDIuNyB3aXRoIGBydWJ5Ml9rZXl3b3Jkc2AgZW5hYmxlZCBi eSBkZWZhdWx0LiBCdXQgYWxzbyBkaWZmZXJlbnQgaW4gc29tZSB3YXlzOyBtb3N0IG5vdGFibHkg aXQgYWxsb3dzIHRoZSBjYXNlIHNob3duIGluICMxNjQ5NCB0byB3b3JrIGJ5IGRlZmF1bHQ6DQoN CmBgYHJ1YnkNCmFycmF5ID0gW3g6MV0NCmFycmF5LnB1c2goeDoyKQ0KYXJyYXkubWFweyB8eDp8 IHggfSAjPT4gWzEsMl0NClt7eDozfV0ubWFweyB8eDp8IHggfSAjPT4gYnV0IHRoaXMgd2FybnMs IGFzIGl0IHNob3VsZA0KYGBgDQoNClRoZSBjdXJyZW50IGFwcHJvYWNoIGRvZXMgbm90IGFsbG93 IHRoaXMgdG8gd29yayBhdCBhbGwuIFRoZSBzb2x1dGlvbiBwcm9wb3NlZCBpbiAjMTY0OTQgaGFz IGFsbCB0aGUgc2FtZSBmbGF3cyBhcyBIYXNoLWJhc2VkIGtleXdvcmQgYXJndW1lbnRzOyB3aGF0 IGhhcHBlbnMgdG8gYGVhY2h7IHx4PW5pbCwqKmt3fCB9YCA/IFRoaXMgc29sdXRpb24gYWxsb3dz IGEgS3dIYXNoIHRvIGJlIGNvbnZlcnRlZCB0by4uLiBrZXl3b3Jkcy4gVmVyeSB1bnN1cnByaXNp bmcuDQoNCkdpdmVuIHRoYXQgcnVieSBpcyBhIGR5bmFtaWNhbGx5LXR5cGVkIGxhbmd1YWdlIEkg ZmVlbCB0aGF0IGR5bmFtaWMgdHlwaW5nIG9mIGtleXdvcmRzIGlmIGEgbW9yZSBuYXR1cmFsIGZp dCB0aGFuIHN0YXRpYyB0eXBpbmcuIEJ1dCBJIHJlYWxpemUgdGhhdCBtYW55IGRpc2FncmVlIHdp dGggdGhhdCwgd2hpY2ggaXMgd2h5IHdlIGNvbnRpbnVlIHRvLi4uDQoNCiMjIyBTdGVwIDQNCg0K SW50cm9kdWNlIGFkZGl0aW9uYWwgaW5jb21wYXRpYmlsaXR5IHRvIHJlYWNoIHN0YXRpYy9sZXhp Y2FsIHNlcGFyYXRpb24gb2Yga2V5d29yZCBhcmd1bWVudHMuIEhlcmUgd2UgcmVxdWlyZSB0aGF0 IGV2ZW4gYSBLd0hhc2ggc2hvdWxkIGJlIHBhc3NlZCB3aXRoIGEgZG91YmxlLXNwbGF0IGluIG9y ZGVyIHRvIHF1YWxpZnkgYXMgYSBrZXl3b3JkIGFyZ3VtZW50Lg0KDQpgYGBydWJ5DQpkZWYgYmFy KCoqa3cpDQplbmQNCmRlZiBmb28oKiprdykNCiAgYmFyKGt3KSAgICM9PiBlcnJvcjsgS3dIYXNo IHBhc3NlZCB3aXRob3V0ICoqDQogIGJhcigqKmt3KSAjPT4gb2sNCmVuZA0KYGBgDQoNCkF0IHRo aXMgcG9pbnQgd2UndmUgcmVhY2hlZCB0aGUgc2FtZSBiZWhhdmlvciBhcyAyLjcuIERlbGVnYXRp b24gbmVlZHMgdG8gYmUgZml4ZWQsIGJ1dCBhcyB3ZSBrbm93IHRoZSBjaGFuZ2VzIHJlcXVpcmVk IHRvIHNpbGVuY2UgdGhlc2Ugd2FybmluZ3MgYXJlICoqbm90KiogY29tcGF0aWJsZSB3aXRoIDIu NiBvciAyLjcuIFRoZSB3YXJuaW5ncyBmb3IgdGhpcyBhcmUgX2Z1bmRhbWVudGFsbHkgbm90IGZp eGFibGVfIGFzIGxvbmcgYXMgU3RlcCAyIGhhcyBub3QgYmVlbiBmaXhlZC4gVGhpcyBpcyB0aGUg Y29yZSByZWFzb24gd2h5IGBydWJ5Ml9rZXl3b3Jkc2AgaXMgY3VycmVudGx5IG5lY2Vzc2FyeSBp biAyLjcuIFNvIGluIHRoZSB2ZXJzaW9uIGFmdGVyIDIuNyB3ZSBjYW4gZW5hYmxlIHRoZXNlIHdh cm5pbmdzIGJ5IGRlZmF1bHQgc2luY2UgaXQncyBub3cgcG9zc2libGUgdG8gZml4IGRlbGVnYXRp b24gdG8gdXNlIHN0YXRpYyBrZXl3b3Jkcy4gRXhjZXB0IHRoYXQgZ2VtIGF1dGhvcnMgd2hvIG5l ZWQgdG8gc3RheSBjb21wYXRpYmxlIHdpdGgg4omkMi43IGNhbm5vdCB5ZXQgbWFrZSB0aGVzZSBj aGFuZ2VzLCBzbyB3ZSBpbnRyb2R1Y2UgYSB3YXkgdG8gX3NpbGVuY2UgKipvbmx5KiogdGhlc2Ug IlN0ZXAgNCIgd2FybmluZ3NfLCBmb3IgcGVvcGxlIHdobyBuZWVkIHRvIHJlbWFpbiBjb21wYXRp YmxlIHdpdGgg4omkMi43LiBBbmQgd2Uga2VlcCB0aGVtIGFzIHdhcm5pbmdzIGluc3RlYWQgb2Yg ZXJyb3JzIHVudGlsIHJ1YnkgMi43IGlzIEVPTC4NCg0KU28gaW5zdGVhZCBvZiBoYXZpbmcgdG8g dXBkYXRlIGEgYnVuY2ggb2YgcGxhY2VzIHdpdGggYHJ1YnkyX2tleXdvcmRzYCBqdXN0IHRvIHRl bXBvcmFyaWx5IHNpbGVuY2Ugd2FybmluZ3MsIGl0J3MgYSBzaW5nbGUgZmxhZyBsaWtlIGBXYXJu aW5nWzpydWJ5M19rZXl3b3Jkc11gLiBPbmNlIHJ1YnkgMi43IGlzIEVPTCB0aGVzZSBiZWNvbWUg Y29udHJvbGxlZCBieSBgV2FybmluZ1s6ZGVwcmVjYXRlZF1gIHdoaWNoIHRlbGxzIHBlb3BsZSB0 aGV5ICoqaGF2ZSoqIHRvIGZpeCB0aGVpciBjb2RlLiBXaGljaCBpcyBqdXN0IGxpa2UgdGhlIGV2 ZW50dWFsIGRlcHJlY2F0aW9uIG9mIGBydWJ5Ml9rZXl3b3Jkc2AsIGp1c3Qgd2l0aG91dCB0aGUg YnVzeSB3b3JrIG9mIGFkZGluZyBgcnVieTJfa2V5d29yZHNgIHN0YXRlbWVudHMgaW4gdGhlIGZp cnN0IHBsYWNlLiBCdXQgYWdhaW4sIHRoaXMgaW50cm9kdWNlcyBubyBuZXcgZnVuY3Rpb25hbGl0 eSwganVzdCBhIHN0cmljdGVyIHN5bnRheC4gU28gd2UgY2FuIHBsYXkgbmljZSBhbmQgbGVhdmUg dGhlIHdhcm5pbmdzIGZvciBhIGZldyB5ZWFycyBiZWZvcmUgY2hhbmdpbmcgdG8gZXJyb3JzLg0K DQpUaGUgcXVlc3Rpb24gcmVtYWlucyBvZiBob3cgdG8gaGFuZGxlICMxNjQ5NCBoZXJlLiBFaXRo ZXIgZGlzYWxsb3cgaXQgZW50aXJlbHksIGJ1dCBJIHRoaW5rIHRoYXQgd291bGQgYmUgYSBzaGFt ZS4gT3IganVzdCBsaWtlICMxNjQ5NCBzdWdnZXN0cywgYWxsb3cgaGFzaCB1bnBhY2tpbmcgaW4g bm9uLWxhbWJkYSBQcm9jLiBFeGNlcHQgdGhhdCBub3cgaXQgY2FuIGJlIGEgS3dIYXNoIGluc3Rl YWQgb2YgYSBIYXNoLCB3aGljaCBhdCBsZWFzdCBwcmVzZXJ2ZXMgZHluYW1pYyBrZXl3b3JkIHNl cGFyYXRpb24uDQoNCiMjIFB1dHRpbmcgaXQgYWxsIHRvZ2V0aGVyIChUTDtEUikNCg0KVGhlIGlk ZWEgaXMgX25vdF8gdG8gcmVpbXBsZW1lbnQga2V5d29yZCBhcmd1bWVudCBzZXBhcmF0aW9uOyBh bGwgdGhhdCBpcyBuZWVkZWQgaXMgdG8gaW1wbGVtZW50IHRoZSB0aGluZ3MgYWJvdmUgdGhhdCBh cmUgbm90IGluIDIuNzoNCiogQ3JlYXRlIGEgS3dIYXNoIG9iamVjdCBmb3IgYnJhY2UtbGVzcyBh bmQgZG91YmxlLXNwbGF0dGVkIGhhc2hlcy4NCiogRGlmZmVyZW50aWF0ZSB0aGUgdmFyaW91cyB0 eXBlcyBvZiB3YXJuaW5ncyBhbmQgYWxsb3cgdG8gdG9nZ2xlIG9uL29mZiBzZXBhcmF0ZWx5DQog ICogU3RlcCAyIHdhcm5pbmdzIF9tdXN0XyBiZSBmaXhlZCBub3c7IGNhbm5vdCB0b2dnbGUgb2Zm DQogICogU3RlcCAzIHdhcm5pbmdzIF9zaG91bGRfIGJlIGZpeGVkIG5vdyBidXQgeW91IGRvbid0 IGFic29sdXRlbHkgbmVlZCB0byB1cGdyYWRlIHlvdXIgZ2VtcyBqdXN0IGZvciB0aGF0DQogICog U3RlcCA0IHdhcm5pbmdzIF9zaG91bGRfIGJlIGZpeGVkIGluIG5leHQgdmVyc2lvbiB1bmxlc3Mg eW91IG5lZWQgdG8gc3VwcG9ydCDiiaQyLjcNCg0KSSB0aGluayB0aGF0J3MgYWxsLCByZWFsbHku Li4NCg0KIyMjIFByb3MNCiogQ2xlYW5lciB3YXkgdG8gc29sdmUgIzE2NDk0DQoqIEJldHRlciBj b21wYXRpYmlsaXR5IChhdCBsZWFzdCB1bnRpbCAyLjYgaXMgRU9MKQ0KICAgKiBkZWxlZ2F0aW9u DQogICAqIHN0b3JpbmcgYW4gYXJndW1lbnQgbGlzdCB0aGF0IGVuZHMgd2l0aCBhIEt3SGFzaA0K ICAgKiBkZXN0cnVjdHVyaW5nIGl0ZXJhdGlvbiAoIzE2NDk0KQ0KKiBXZSBjYW4gYXZvaWQgdGhl ICJ1bmZvcnR1bmF0ZSBjb3JuZXIgY2FzZSIgYXMgZGVzY3JpYmVkIGluIHRoZSBbcmVsZWFzZSBu b3Rlc10oaHR0cHM6Ly93d3cucnVieS1sYW5nLm9yZy9lbi9uZXdzLzIwMTkvMTIvMTIvc2VwYXJh dGlvbi1vZi1wb3NpdGlvbmFsLWFuZC1rZXl3b3JkLWFyZ3VtZW50cy1pbi1ydWJ5LTMtMC8pDQog ICAqIGluIDIuNyBvbmx5IGRvIG5vdCBvdXRwdXQgIlN0ZXAgNCIgd2FybmluZ3MsIGxlYXZlIGRl bGVnYXRpb24gbGlrZSBpdCB3YXMNCiAgICogaW4gMi44IHRoZSAiU3RlcCAzIiB3YXJuaW5ncyBo YXZlIGJlZW4gZml4ZWQgYW5kIGEgSGFzaCB3aWxsIG5vdCBiZSBjb252ZXJ0ZWQgdG8ga2V5d29y ZCBhcmd1bWVudHMNCiAgICogZGVsZWdhdGlvbiBjYW4gbm93IHNhZmVseSBiZSBmaXhlZCB0byB1 c2UgdGhlIGAqKmAgc3ludGF4DQoqIHJ1YnkyX2tleXdvcmRzIGlzIG5vdCByZXF1aXJlZCwgd2hp Y2ggaXMgZGVzaXJhYmxlIGJlY2F1c2UNCiAgICogaXQncyBhIGhpZGRlbiBmbGFnIF9oYWNrXw0K ICAgKiBpdCByZXF1aXJlcyB0byBjaGFuZ2UgdGhlIGNvZGUgbm93LCBhbmQgY2hhbmdlIGl0IF9h Z2Fpbl8gd2hlbiBydWJ5Ml9rZXl3b3JkcyBpcyBkZXByZWNhdGVkOyB0d2ljZSB0aGUgd29yazsg dHdpY2UgdGhlIGdlbSB1cGdyYWRlcw0KICAgKiBpdCB3YXMgc3VwcG9zZWQgdG8gYmUgdXNlZCBv bmx5IGZvciBwZW9wbGUgd2hvIG5lZWQgdG8gc3VwcG9ydCAyLjYgb3IgYmVsb3csIGJ1dCBpdCdz IGJlaW5nIG1pc3VuZGVyc3Rvb2QgYXMgYW4gYWNjZXB0YWJsZSB3YXkgdG8gZml4IGRlbGVnYXRp b24gaW4gZ2VuZXJhbA0KICAgKiB0aGVyZSdzIHRoZSBub24temVybyByaXNrIHRoYXQgcnVieTJf a2V5d29yZHMgd2lsbCBuZXZlciBiZSByZW1vdmVkLCBsZWF2aW5nIHVzIHdpdGggYSBwZXJtYW5l bnQgImhhY2sgbW9kZSINCiAgICAgICogZHluYW1pYyBrZXl3b3JkcyBhcmUgYnkgZmFyIHByZWZl cmFibGUgdG8gc3VwcG9ydGluZyBydWJ5Ml9rZXl3b3JkcyBmb3JldmVyDQoqIExpa2VseSBfYmV0 dGVyIHBlcmZvcm1hbmNlXywgYXMgdGhlIEt3SGFzaCBjbGFzcyBjYW4gYmUgb3B0aW1pemVkIHNw ZWNpZmljYWxseSBmb3IgdGhlIGNoYXJhY3RlcmlzdGljcyBvZiBrZXl3b3JkIGFyZ3VtZW50cy4N CiogTW9yZSBmbGV4aWJsZSBtaWdyYXRpb24NCiAgICogQWxsb3cgbW9yZSB0aW1lIHRvIHVwZ3Jh ZGUgdGhlIGhhcmQgc3R1ZmYgaW4gU3RlcCA0DQogICAqIENhbiByZWFjaCB0aGUgX3NhbWVfIGdv YWwgYXMgdGhlIGN1cnJlbnQgc3RhdGljIGFwcHJvYWNoDQogICAqIExhcmdlciAic3VwcG9ydCB6 b25lIiBodHRwczovL3hrY2QuY29tLzIyMjQvDQogICAqIEluc3RlYWQgb2Ygd2lkZS1yYW5naW5n IGluY29tcGF0aWJpbGl0aWVzIGFsbCBhdCBvbmNlLCB0aGVyZSdzIHRoZSBfcG9zc2liaWxpdHlf IG9mIG1ha2luZyBpdCBmaW5lci1ncmFpbmVkIGFuZCBtb3JlIGdyYWR1YWwNCiAgICAgICogcnVi eWlzdHMgY2FuIF9jaG9vc2VfIHRvIG1pZ3JhdGUgYWxsIGF0IG9uY2Ugb3IgaW4gc21hbGxlciBj aHVua3MNCiAgICogSXQgaGVkZ2VzIHRoZSByaXNrcyBieSBrZWVwaW5nIG1vcmUgcG9zc2liaWxp dGllcyBvcGVuIGZvciBub3cuDQogICAqIEl0IGFsbG93cyB0byBjb3Atb3V0IGF0IFN0ZXAgMyBp ZiBTdGVwIDQgdHVybnMgb3V0IHRvbyBoYXJkIGJlY2F1c2UgaXQgYnJlYWtzIHRvbyBtdWNoIHN0 dWZmDQoNCiMjIyBDb25zDQoqIEl0IGFsbG93cyB0byBjb3Atb3V0IGF0IFN0ZXAgMyBpZiBTdGVw IDQgdHVybnMgb3V0IHRvbyBoYXJkIGJlY2F1c2UgaXQgYnJlYWtzIHRvbyBtdWNoIHN0dWZmDQoN Cg0KDQoNCi0tIA0KaHR0cHM6Ly9idWdzLnJ1YnktbGFuZy5vcmcvDQoKVW5zdWJzY3JpYmU6IDxt YWlsdG86cnVieS1jb3JlLXJlcXVlc3RAcnVieS1sYW5nLm9yZz9zdWJqZWN0PXVuc3Vic2NyaWJl Pgo8aHR0cDovL2xpc3RzLnJ1YnktbGFuZy5vcmcvY2dpLWJpbi9tYWlsbWFuL29wdGlvbnMvcnVi eS1jb3JlPgo=