From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail.byosoft.com.cn (mail.byosoft.com.cn [58.240.74.242]) by mx.groups.io with SMTP id smtpd.web12.28711.1632733589818638397 for ; Mon, 27 Sep 2021 02:06:31 -0700 Authentication-Results: mx.groups.io; dkim=missing; spf=none, err=permanent DNS error (domain: byosoft.com.cn, ip: 58.240.74.242, mailfrom: fanjianfeng@byosoft.com.cn) Received: from DESKTOP-M5NI163 ([58.246.60.130]) (envelope-sender ) by 192.168.6.13 with ESMTP for ; Mon, 27 Sep 2021 17:06:19 +0800 X-WM-Sender: fanjianfeng@byosoft.com.cn X-Originating-IP: 58.246.60.130 X-WM-AuthFlag: YES X-WM-AuthUser: fanjianfeng@byosoft.com.cn Date: Mon, 27 Sep 2021 17:06:19 +0800 From: "Jeff Fan" To: "devel@edk2.groups.io" , fanjianfeng , mhaeuser , =?UTF-8?B?TmksIFJheQ==?= , 'gaoliming' , =?UTF-8?B?Q2hhbiwgQW15?= , "'Andrew Fish'" Cc: =?UTF-8?B?S2lubmV5LCBNaWNoYWVsIEQ=?= , =?UTF-8?B?J0dhbywgTGltaW5nJw==?= , =?UTF-8?B?TGl1LCBaaGlndWFuZw==?= , =?UTF-8?B?V2FuZywgSmlhbiBK?= , =?UTF-8?B?R2FvLCBaaGljaGFv?= Subject: Re: [edk2-devel] RFC: Add BaseLib/QuickSort in MdePkg References: , <001a01d7aa99$d744af80$85ce0e80$@byosoft.com.cn>, , <003401d7aaa1$c7166830$55433890$@byosoft.com.cn>, , , <16A70FAC1585C7C1.27516@groups.io>, , <00cf01d7b27a$59145d20$0b3d1760$@byosoft.com.cn>, , , <2021092708451371303013@byosoft.com.cn>, <7c260e5d-363e-8579-5a38-3cc5e2336bdb@posteo.de>, <16A8A1ADDB4E97C4.26412@groups.io> X-Priority: 3 X-Has-Attach: no X-Mailer: Foxmail 7.2.20.269[cn] Mime-Version: 1.0 Message-ID: <2021092717061917240528@byosoft.com.cn> Content-Type: multipart/alternative; boundary="----=_001_NextPart177406853034_=----" ------=_001_NextPart177406853034_=---- Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: base64 SW4gZmFjdCwgbXkgY29uY2VybiBpcyB0aGF0IG1ha2luZyBCYXNlTGliJ3MgQVBJcyBkZXBlbmQg b24gUGVpU2VydmljZSAmIEJvb3QgU2VydmljZXMgaXMgbm90IGdvb2QuICANCg0KRm9yIGEgaW5z dGFuY2UsICBBUCBmdW5jdGlvbnMgYnkgTVAgc2VydmljZSBhcmUgbm90IGFsbG93ZWQgdG8gaW52 b2tlIGFueSBQZXJpU2VydmljZXMgYW5kIEJvb3QgU2VydmljZXMuICBBbmQgZXhjZXB0aW9uIGhh bmRsZXJzIGNhbm5vdCBpbnZva2UgdGhvc2Ugc2VydmljZXMgZWl0aGVyLg0KDQoNCg0KSmVmZg0K ZmFuamlhbmZlbmdAYnlvc29mdC5jb20uY24NCiANCkZyb206IEplZmYgRmFuDQpEYXRlOiAyMDIx LTA5LTI3IDE2OjUwDQpUbzogZGV2ZWxAZWRrMi5ncm91cHMuaW87IG1oYWV1c2VyOyBOaSwgUmF5 OyAnZ2FvbGltaW5nJzsgQ2hhbiwgQW15OyAnQW5kcmV3IEZpc2gnDQpDQzogS2lubmV5LCBNaWNo YWVsIEQ7ICdHYW8sIExpbWluZyc7IExpdSwgWmhpZ3Vhbmc7IFdhbmcsIEppYW4gSjsgR2FvLCBa aGljaGFvDQpTdWJqZWN0OiBSZTogW2VkazItZGV2ZWxdIFJGQzogQWRkIEJhc2VMaWIvUXVpY2tT b3J0IGluIE1kZVBrZw0KRm9yIGZvcm1lciBjYWxsZXIsIHRoZXkgY291bGQgc3RpbGwga2VlcCBh cyBpcyB0byBjYWxsIHRoZSBvbGQgQVBJIGluIE1kZU1vZHVsZVBrZy4gSSB0aGluayBSYXkncyBk ZXNpZ24gaXMgY29tcGF0aWJsZSBjaGFuZ2UgZm9yIGV4aXN0aW5nIGNvZGUuDQpPbmx5IHdoZW4g dGhlIGV4aXN0aW5nIGNvZGUgd2FudHMgdG8gcmVtb3ZlIHRoZSBkZXBlbmRlbmN5IG9uIE1kZU1v ZHVlbFBrZywgdGhleSBjb3VsZCBtaWdyYXRlIHRvIHRoZSBuZXcgQVBJIGluIGJhc2VsaWIuDQoN CkkgYWdyZWUgd2l0aCBvbmUgc3BsaXQtQVBJIGRlc2dpbiB3aGF0IHlvdSBtZW50aW9uZWQuIA0K QnV0IG15IHBvaW50IGlzIHRvIGRlZmluZSBvbmUgQVBJIGluIGJhc2VsaWIgYW5kIHRvIG1ha2Ug dGhlIGJhc2VsaWIgbm90IGRlcGVuZCBvbiBtZW1vcnkgYWxsb2NhdGlvbi4gIEFuZCBhbm90aGVy IHdyYXBwZXIgQVBJIGNvdWxkIGJlIGRlc2lnbmVkIHRvIGJlIHBsYWNlZCBpbiBhbnkgb3RoZXIg Y2xhc3MuDQoNCg0KDQpKZWZmDQpmYW5qaWFuZmVuZ0BieW9zb2Z0LmNvbS5jbg0KIA0KRnJvbTog TWFydmluIEjDpHVzZXINCkRhdGU6IDIwMjEtMDktMjcgMTY6MTQNClRvOiBmYW5qaWFuZmVuZ0Bi eW9zb2Z0LmNvbS5jbjsgZGV2ZWxAZWRrMi5ncm91cHMuaW87IE5pLCBSYXk7ICdnYW9saW1pbmcn OyBDaGFuLCBBbXk7ICdBbmRyZXcgRmlzaCcNCkNDOiBLaW5uZXksIE1pY2hhZWwgRDsgJ0dhbywg TGltaW5nJzsgTGl1LCBaaGlndWFuZzsgV2FuZywgSmlhbiBKOyBHYW8sIFpoaWNoYW8NClN1Ympl Y3Q6IFJlOiBbZWRrMi1kZXZlbF0gUkZDOiBBZGQgQmFzZUxpYi9RdWlja1NvcnQgaW4gTWRlUGtn DQpPbiAyNy8wOS8yMDIxIDAyOjQ1LCBmYW5qaWFuZmVuZ0BieW9zb2Z0LmNvbS5jbiB3cm90ZToN Cj4gTWFraW5nIGJhc2VsaWIgaW1wbGVtZW50YXRpb24gZGVwZW5kIG9uIE1lbW9yeUFsbG9jYXRp b25MaWIgDQo+IChpbmRpcmVjdGx5IG9uIFBlaSBTZXJ2aWNlIGFuZCBnQlMpLCBpdCBtYXkgcHJl dmVudCANCj4gdGhpcyBiYXNlIEFQSSB1c2luZyBhdCBzb21lIHNlbmVyYWlvLiBpIGRvbid0IHRo aW5rIGl0J3MgYmV0dGVyLg0KIA0KVGhhdCBpcyB3aHkgSSBhc2tlZCBhYm91dCBhIHNwbGl0LUFQ SSBzY2VuYXJpbywgb25lIG9mIHdoaWNoIGRvZXMgbm90IA0KZGVwZW5kIG9uIGR5bmFtaWMgbWVt b3J5IGFsbG9jYXRpb24gKFNldFZhcmlhYmxlLWxpa2UpIGFuZCBvbmUgZG9lcyANCih3cmFwcGVy LWxpa2UpLg0KIA0KPiBBZGQgdGhpcyBwYXJhbWV0ZXIgYW5kIG1ha2UgdGhpcyBwYXJhbWV0ZXIg aXMgb3B0aW9uYWwsDQo+IDEsIHdoZW4gTlVMTCwgdXNlIHRoZSBsb2NhbCAyNTYgYnl0ZXMgc3Rh Y2sNCj4gMiwgaWYgMjU2IGJ5dGVzIHN0YWNrIGlzIG5vdCBlbm91Z2gsIHJldHVybiBSRVRVUkVf QlVGRkVSX1RPT19TQU1MTCwNCj4gMywgY2FsbGVyIGNoZWNrIHRoZSByZXR1cm4gc3RhdHVzLCB0 byBkbyBub3RoaW5nIG9yIHRvIGFsbG9jYXRlIGVub3VnaCANCj4gYnVmZmVyIGZvciByZXRyeQ0K Pg0KPiBUaGlzIGlzIGp1c3QgbGlrZSBTZXRWYXJpYWJsZSgpJ3MgaW1wbGVtZW50YXRpb24uDQog DQpZZXMsIGFuZCBiZWNhdXNlIHRoYXQgaXMgU2V0VmFyaWFibGUncyBpbXBsZW1lbnRhdGlvbiwg d2UgaGF2ZSBsaWJyYXJ5IA0KZnVuY3Rpb25zIHRvIG1ha2UgaXQgbGVzcyBlcnJvci1wcm9uZSBh bmQgbW9yZSBjb252ZW5pZW50IFsxXS4gQXMgYSANCm1hdHRlciBvZiBmYWN0LCB3ZSBoYXZlIGEg KHNlbWktbGF4KSBwb2xpY3kgaW4gb3VyIGNvZGViYXNlcyB0byBhdm9pZCANCnN1Y2ggZnVuY3Rp b25zIGxpa2UgdGhlIHBsYWd1ZSBhbmQgdXNlIHRob3NlIGxpYnJhcnkgd3JhcHBlcnMgd2hlcmUt ZXZlciANCml0IGNhbiBtYWtlIHNlbnNlLiBUaGUgb25seSBzdXBlci1yYXJlIGV4Y2VwdGlvbnMg SSBjYW4gdGhpbmsgb2YgYXJlIA0Kd2hlbiB3ZSBrbm93IHRoZSBzaXplIG9mIHRoZSBlbGVtZW50 IGFoZWFkIG9mIHRpbWUuIEFsc28gU2V0VmFyaWFibGUgaGFzIA0Kbm8gYXJiaXRyYXJ5IGNvbnN0 cmFpbnQgb24gd2hlbiBpdCBtYXkgd29yayB0aGUgZmlyc3QgdGltZSwgYW5kIHRoZXJlIGlzIA0K Y29kZSB0aGF0IHdpbGwgZmFpbCB3aGVuIHRoZSBmaXJzdCByZXR1cm4gaXMgbm90IEVGSV9CVUZG RVJfVE9PX1NNQUxMLg0KIA0KVGhpcyBzb2x1dGlvbiBob25lc3RseSB5aWVsZHMgZXZlbiBtb3Jl IHByb2JsZW1zLCBiZWNhdXNlIGl0IGludHJvZHVjZXMgDQphIFN0YXR1cyByZXR1cm4gd2hpY2gg d2FzIG5vdCB0aGVyZSBiZWZvcmUuIEZvciBjb21tb24gY29kZSBzYWZldHkgYW5kIA0KcXVhbGl0 eSBwb2xpY3ksIHRoaXMgcmVxdWlyZXMgdGhlIHZhbHVlICptdXN0KiBiZSByZXRyaWV2ZWQgYW5k IGNoZWNrZWQgDQppbiBzb21lIGZhc2hpb24uIFNvIGFsbCBjYWxsZXJzLCBubyBtYXR0ZXIgdGhl IHByaW9yIGtub3dsZWRnZSBvZiB0aGUgDQplbGVtZW50IHNpemUsIG5vdyBuZWVkIGVpdGhlciBh IHJ1bnRpbWUgY2hlY2sgYW5kIGhhbmRsaW5nIGZvciBhIHN0YXR1cyANCnRoYXQgdGhleSAobWF5 KSBrbm93IGNhbiBuZXZlciBiZSByZXR1cm5lZCwgb3IgQVNTRVJUcyBpZiB0aGUgZnVuY3Rpb24g DQpzcGVjIHJlYWxseSBpbXBvc2VzIHRoZSBhcmJpdHJhcnkgMjU2IEJ5dGVzIGNvbnN0cmFpbnQu IExhdHRlciBkb2Vzbid0IA0KcmVhbGx5IHdvcmsgSSB0aGluay4gV2hhdCBpZiBzb21lb25lIHdh bnRzIHRvIHNvcnQgaW4gU0VDIGFuZCBub3RpY2VkIA0KdGhleSBvbmx5IGhhdmUgNjQgQnl0ZXMg b24gdGhlIHN0YWNrIHRvIHdvcmsgd2l0aCwgcmVhbGlzdGljYWxseT8gQW55IA0KY29kZSBkZXBl bmRpbmcgb24gdGhlIDI1NiBCeXRlIGNvbnN0cmFpbnQsIHBhc3NpbmcgTlVMTCBhbmQgbm90IGRv aW5nIA0KYWRkaXRpb25hbCBoYW5kbGluZywgd291bGQgc2VpemUgdG8gd29yay4gRm9ybWVyIGlz IHRvbyBjb21wbGljYXRlZCwgc2VlIA0Kd3JhcHBlcnMuIEluIG15IG9waW5pb24sIHRoZSBtZW1v cnkgbXVzdCAqZWl0aGVyKiBiZSBmdWxseSBtYW5hZ2VkIGJ5IA0KdGhlIGNhbGxlciAqb3IqIHRo ZSBjYWxsZWUgKGFuZCB5b3UgbWF5IGhhdmUgYm90aCBpbiBzZXBhcmF0ZSBmdW5jdGlvbnMsIA0K YXMgSSBzdWdnZXN0ZWQpLCBidXQgbm90IHNvbWV0aW1lcyBoZXJlLCBzb21ldGltZXMgdGhlcmUu DQogDQpCZXN0IHJlZ2FyZHMsDQpNYXJ2aW4NCiANCiANClsxXSANCmh0dHBzOi8vZ2l0aHViLmNv bS90aWFub2NvcmUvZWRrMi9ibG9iLzQ2YjQ2MDZiYTIzNDk4ZDNkMGU2NmI1M2U0OThlYjNkNWQ1 OTI1ODYvTWRlUGtnL0xpYnJhcnkvVWVmaUxpYi9VZWZpTGliLmMjTDEzMDktTDEzNjANCiANCj4N Cj4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tDQo+IEplZmYNCj4gZmFuamlhbmZlbmdAYnlvc29mdC5jb20uY24N Cj4NCj4gICAgICpGcm9tOiogTWFydmluIEjDpHVzZXIgPG1haWx0bzptaGFldXNlckBwb3N0ZW8u ZGU+DQo+ICAgICAqRGF0ZToqIDIwMjEtMDktMjYgMTk6MjANCj4gICAgICpUbzoqIGRldmVsIDxt YWlsdG86ZGV2ZWxAZWRrMi5ncm91cHMuaW8+OyByYXkubmkNCj4gICAgIDxtYWlsdG86cmF5Lm5p QGludGVsLmNvbT47IGdhb2xpbWluZw0KPiAgICAgPG1haWx0bzpnYW9saW1pbmdAYnlvc29mdC5j b20uY24+OyBDaGFuLCBBbXkNCj4gICAgIDxtYWlsdG86YW15LmNoYW5AaW50ZWwuY29tPjsgJ0Fu ZHJldyBGaXNoJyA8bWFpbHRvOmFmaXNoQGFwcGxlLmNvbT4NCj4gICAgICpDQzoqIEtpbm5leSwg TWljaGFlbCBEIDxtYWlsdG86bWljaGFlbC5kLmtpbm5leUBpbnRlbC5jb20+OyAnR2FvLA0KPiAg ICAgTGltaW5nJyA8bWFpbHRvOmxpbWluZy5nYW9AaW50ZWwuY29tPjsgTGl1LCBaaGlndWFuZw0K PiAgICAgPG1haWx0bzp6aGlndWFuZy5saXVAaW50ZWwuY29tPjsgV2FuZywgSmlhbiBKDQo+ICAg ICA8bWFpbHRvOmppYW4uai53YW5nQGludGVsLmNvbT47IEdhbywgWmhpY2hhbw0KPiAgICAgPG1h aWx0bzp6aGljaGFvLmdhb0BpbnRlbC5jb20+DQo+ICAgICAqU3ViamVjdDoqIFJlOiBbZWRrMi1k ZXZlbF0gUkZDOiBBZGQgQmFzZUxpYi9RdWlja1NvcnQgaW4gTWRlUGtnDQo+ICAgICBIZXkgUmF5 LA0KPiAgICAgSW4gbXkgb3BpbmlvbiB0aGF0IHNwZWMgaXMgdG9vIGNvbXBsaWNhdGVkLiBGb3Ig c29tZSBjYXNlcyBpdCBpcw0KPiAgICAgb2J2aW91cywgYnV0IEkgdGhpbmsgdGhlIGxhc3QgYW55 b25lIHdhbnRzIHRvIHNlZSBpcyBhDQo+ICAgICAoU1RBVElDXylBU1NFUlQNCj4gICAgIGJlZm9y ZSBtb3N0IFF1aWNrU29ydCBjYWxscyB0byBlbnN1cmUgdGhlIGVsZW1lbnQgc2l6ZSAqcmVhbGx5 KiBpcyA8PQ0KPiAgICAgMjU2IEJ5dGVzLiBJbiBteSBvcGluaW9uLCB0aGVyZSBhcmUgdHdvIHJv YWRzOg0KPiAgICAgMSkgTWFrZSB0aGUgcGFyYW1ldGVyIHJlcXVpcmVkIChJIHRoaW5rIHRoaXMg aXMgd2hhdCBMaW1pbmcNCj4gICAgIHN1Z2dlc3RlZCkuDQo+ICAgICBUaGUgY2FsbGVyIHdvdWxk IGFsd2F5cyBuZWVkIHRvIHByb3ZpZGUgc2FpZCBidWZmZXIsIGFuZCBpdCBjYW4gZG8NCj4gICAg IGFzIGl0DQo+ICAgICBzZWVzIGZpdCAtIG9uIHRoZSBzdGFjaywgaW4gYSBwb29sLCBpbiBhIHBh Z2UsIHdobyBrbm93cy4NCj4gICAgIDIpIFJlbW92ZSB0aGUgcGFyYW1ldGVyIGVudGlyZWx5LiBU aGUgbGlicmFyeSB3b3VsZCBkZXBlbmQgb24NCj4gICAgIE1lbW9yeUFsbG9jYXRpb25MaWIgYWdh aW4sIGJ1dCBhbHNvIHdvdWxkIGhhdmUgYW4gb3B0aW1pc2F0aW9uIGJ5DQo+ICAgICBjaG9vc2lu ZyBzdGFjayB2cyBwb29sIGJhc2VkIG9uIEVsZW1lbnRTaXplLg0KPiAgICAgVXN1YWxseSBJIHdv dWxkIHByZWZlciAyKSwgYXMgaXQgaXMgbGVzcyBwcm9uZSB0byBjYWxsZXIgZXJyb3JzLCBidXQN Cj4gICAgIGNvbnNpZGVyaW5nIHRoZSBsb3ctbGV2ZWwgbmF0dXJlIG9mIGVkazIsIEkgY2FuIHRv dGFsbHkgc2VlIHRoZQ0KPiAgICAgcG9pbnQgdG8NCj4gICAgIGFsbG93IHRoZSBjYWxsZXIgdG8g Y29udHJvbCB3aGV0aGVyIHRoZXJlIGFyZSBkeW5hbWljIG1lbW9yeQ0KPiAgICAgYWxsb2NhdGlv bnMNCj4gICAgIG1hZGUgb3Igbm90IGFzIHBvc3NpYmxlIHdpdGggMSkuIDIpIGNvdWxkIHRlY2hu aWNhbGx5IGFsc28gYmUgYQ0KPiAgICAgd3JhcHBlcg0KPiAgICAgZm9yIDEpIGlmIHlvdSB3YW50 IGdyYW51bGFyIGNvbnRyb2wgYW5kIGNvbnZlbmllbmNlL3NhZmV0eSAod2h5IG5vdA0KPiAgICAg YWN0dWFsbHk/KS4NCj4gICAgIEJvdGggYXBwcm9hY2hlcyBoYXZlIHRoZSBhZHZhbnRhZ2UgdGhh dCBpdCBpcyBjcnlzdGFsLWNsZWFyIHdoYXQgdGhlDQo+ICAgICBjYWxsZXIncyBqb2IgaXMgLSB0 byBhbHdheXMgb3IgdG8gbmV2ZXIgYWxsb2NhdGUgdGhlIGJ1ZmZlci4NCj4gICAgIEJlc3QgcmVn YXJkcywNCj4gICAgIE1hcnZpbg0KPiAgICAgT24gMjYvMDkvMjAyMSAwNDoyNCwgTmksIFJheSB3 cm90ZToNCj4gICAgID4NCj4gICAgID4gTGltaW5nLA0KPiAgICAgPg0KPiAgICAgPiBUaGUgcHVy cG9zZSBvZiB0aGUgb3B0aW9uYWwgQnVmZmVyT25lRWxlbWVudCBpcyB0byBlYXNlIGNvbnN1bWVy 4oCZcw0KPiAgICAgPiBsaWZlIGFzc3VtaW5nIG1vc3Qgb2YgdGhlIHRpbWUgdGhlIGVsZW1lbnQg c2l6ZSBzaG91bGQgYmUNCj4gICAgIHNtYWxsZXIgdGhhbg0KPiAgICAgPiAyNTYuDQo+ICAgICA+ DQo+ICAgICA+IEFyZSB5b3Ugc2F5aW5nIHRoYXQgaXTigJlzIGEgYml0IGhhcmQgdG8gY2FsY3Vs YXRlIHRoZSBhY3R1YWwNCj4gICAgIHZhbHVlIG9mDQo+ICAgICA+IHNpemVvZiAoRWxlbWVudCkg d2hlbiB3cml0aW5nIGNvZGU/DQo+ICAgICA+DQo+ICAgICA+IEkgcmVjb21tZW5kIGNvbnN1bWVy IGFsd2F5cyBhbGxvY2F0ZXMgbWVtb3J5IGlmIGl04oCZcyBoYXJkIHRvIGp1ZGdlDQo+ICAgICA+ IHNpemVvZiAoRWxlbWVudCkgPCAyNTYuDQo+ICAgICA+DQo+ICAgICA+IFNlYXJjaGluZyBlZGsy IGNvZGUsIEkgY2FuIGZpbmQgYmVsb3cgY29kZSB1c2luZyBQZXJmb3JtUXVpY2tTb3J0KCk6DQo+ ICAgICA+DQo+ICAgICA+ICAxLiBTaGVsbFBrZy9VZWZpU2hlbGxDb21tYW5kTGliOiBJdOKAmXMg c29ydGluZyBhcnJheSBvZg0KPiAgICAgPiAgICAgKEVGSV9ERVZJQ0VfUEFUSF9QUk9UT0NPTCAq KS4NCj4gICAgID4gIDIuIFVlZmlDcHVQa2cvQ3B1Q2FjaGVJbmZvTGliOiBJdOKAmXMgc29ydGlu ZyBhcnJheSBvZg0KPiAgICAgIENQVV9DQUNIRV9JTkZPLg0KPiAgICAgPiAgMy4gTWluUGxhdGZv cm1Qa2cvQWNwaVRhYmxlczogSXTigJlzIHNvcnRpbmcgYXJyYXkgb2YNCj4gICAgIEVGSV9DUFVf SURfT1JERVJfTUFQLg0KPiAgICAgPiAgNC4gTWRlTW9kdWxlUGtnL1VlZmlCb290TWFuYWdlckxp YjogSXTigJlzIHNvcnRpbmcgYXJyYXkgb2YNCj4gICAgID4gICAgIEVGSV9CT09UX01BTkFHRVJf TE9BRF9PUFRJT04uDQo+ICAgICA+ICA1LiBNZGVNb2R1bGVQa2cvQ2Fwc3VsZUFwcDogSXTigJlz IHNvcnRpbmcgYXJyYXkgb2YgKEVGSV9GSUxFX0lORk8gKikNCj4gICAgID4gIDYuIENyeXB0b1Br Zy9DcnRXcmFwcGVyOiBJdOKAmXMgc29ydGluZyBhcnJheSBvZiAodW5rbm93biB0eXBlKS4NCj4g ICAgID4gIDcuIFJlZGZpc2hQa2cvUmVkZmlzaENydExpYjogSXTigJlzIHNvcnRpbmcgYXJyYXkg b2YgKHVua25vd24gdHlwZSkuDQo+ICAgICA+DQo+ICAgICA+IEZvciAxfjUsIGl04oCZcyBlYXN5 IHRvIGtub3cgdGhhdCB0aGUgc2l6ZSBvZiB0aGUgZWxlbWVudCBpcyBzbWFsbGVyDQo+ICAgICA+ IHRoYW4gMjU2LiBUaGUgQWxsb2NhdGVQb29sKCkgY2FuIGJlIHNraXBwZWQuDQo+ICAgICA+DQo+ ICAgICA+IFRoYW5rcywNCj4gICAgID4NCj4gICAgID4gUmF5DQo+ICAgICA+DQo+ICAgICA+ICpG cm9tOipnYW9saW1pbmcgPGdhb2xpbWluZ0BieW9zb2Z0LmNvbS5jbj4NCj4gICAgID4gKlNlbnQ6 KiBTdW5kYXksIFNlcHRlbWJlciAyNiwgMjAyMSAxMDowMSBBTQ0KPiAgICAgPiAqVG86KiBOaSwg UmF5IDxyYXkubmlAaW50ZWwuY29tPjsgZGV2ZWxAZWRrMi5ncm91cHMuaW87IENoYW4sIEFteQ0K PiAgICAgPiA8YW15LmNoYW5AaW50ZWwuY29tPjsgJ0FuZHJldyBGaXNoJyA8YWZpc2hAYXBwbGUu Y29tPg0KPiAgICAgPiAqQ2M6KiBLaW5uZXksIE1pY2hhZWwgRCA8bWljaGFlbC5kLmtpbm5leUBp bnRlbC5jb20+OyAnR2FvLCBMaW1pbmcnDQo+ICAgICA+IDxsaW1pbmcuZ2FvQGludGVsLmNvbT47 IExpdSwgWmhpZ3VhbmcgPHpoaWd1YW5nLmxpdUBpbnRlbC5jb20+Ow0KPiAgICAgV2FuZywNCj4g ICAgID4gSmlhbiBKIDxqaWFuLmoud2FuZ0BpbnRlbC5jb20+OyBHYW8sIFpoaWNoYW8gPHpoaWNo YW8uZ2FvQGludGVsLmNvbT4NCj4gICAgID4gKlN1YmplY3Q6KiDlm57lpI06IFtlZGsyLWRldmVs XSBSRkM6IEFkZCBCYXNlTGliL1F1aWNrU29ydCBpbiBNZGVQa2cNCj4gICAgID4NCj4gICAgID4g UmF5Og0KPiAgICAgPg0KPiAgICAgPiBJIG1heSBzdWdnZXN0IHRvIGFsd2F5cyByZXF1aXJlIEJ1 ZmZlck9uZUVsZW1lbnQuIFRoZSBjb25zdW1lciBjb2RlDQo+ICAgICA+IG1heSBub3Qga25vdyBF bGVtZW50U2l6ZS4gVG8gYXZvaWQgdGhlIGVycm9yLCB0aGUgY29uc3VtZXIgbXVzdA0KPiAgICAg PiBhbGxvY2F0ZSBidWZmZXIgZm9yIEJ1ZmZlck9uZUVsZW1lbnQuIElmIHNvLCBCdWZmZXJPbmVF bGVtZW50IGlzDQo+ICAgICB0aGUNCj4gICAgID4gcmVxdWlyZWQgcGFyYW1ldGVyLg0KPiAgICAg Pg0KPiAgICAgPiBUaGFua3MNCj4gICAgID4NCj4gICAgID4gTGltaW5nDQo+ICAgICA+DQo+ICAg ICA+ICrlj5Hku7bkuroqKjoqTmksIFJheSA8cmF5Lm5pQGludGVsLmNvbSA8bWFpbHRvOnJheS5u aUBpbnRlbC5jb20+Pg0KPiAgICAgPiAq5Y+R6YCB5pe26Ze0OiogMjAyMeW5tDnmnIgyNOaXpSAx MTo1Mw0KPiAgICAgPiAq5pS25Lu25Lq6OiogZGV2ZWxAZWRrMi5ncm91cHMuaW8gPG1haWx0bzpk ZXZlbEBlZGsyLmdyb3Vwcy5pbz47IE5pLA0KPiAgICAgUmF5DQo+ICAgICA+IDxyYXkubmlAaW50 ZWwuY29tIDxtYWlsdG86cmF5Lm5pQGludGVsLmNvbT4+OyBDaGFuLCBBbXkNCj4gICAgID4gPGFt eS5jaGFuQGludGVsLmNvbSA8bWFpbHRvOmFteS5jaGFuQGludGVsLmNvbT4+OyBnYW9saW1pbmcN Cj4gICAgID4gPGdhb2xpbWluZ0BieW9zb2Z0LmNvbS5jbiA8bWFpbHRvOmdhb2xpbWluZ0BieW9z b2Z0LmNvbS5jbj4+Ow0KPiAgICAgJ0FuZHJldw0KPiAgICAgPiBGaXNoJyA8YWZpc2hAYXBwbGUu Y29tIDxtYWlsdG86YWZpc2hAYXBwbGUuY29tPj4NCj4gICAgID4gKuaKhOmAgToqIEtpbm5leSwg TWljaGFlbCBEIDxtaWNoYWVsLmQua2lubmV5QGludGVsLmNvbQ0KPiAgICAgPiA8bWFpbHRvOm1p Y2hhZWwuZC5raW5uZXlAaW50ZWwuY29tPj47ICdHYW8sIExpbWluZycNCj4gICAgID4gPGxpbWlu Zy5nYW9AaW50ZWwuY29tIDxtYWlsdG86bGltaW5nLmdhb0BpbnRlbC5jb20+PjsgTGl1LCBaaGln dWFuZw0KPiAgICAgPiA8emhpZ3VhbmcubGl1QGludGVsLmNvbSA8bWFpbHRvOnpoaWd1YW5nLmxp dUBpbnRlbC5jb20+PjsgV2FuZywNCj4gICAgIEppYW4gSg0KPiAgICAgPiA8amlhbi5qLndhbmdA aW50ZWwuY29tIDxtYWlsdG86amlhbi5qLndhbmdAaW50ZWwuY29tPj47IEdhbywNCj4gICAgIFpo aWNoYW8NCj4gICAgID4gPHpoaWNoYW8uZ2FvQGludGVsLmNvbSA8bWFpbHRvOnpoaWNoYW8uZ2Fv QGludGVsLmNvbT4+DQo+ICAgICA+ICrkuLvpopg6KiBSRTogW2VkazItZGV2ZWxdIFJGQzogQWRk IEJhc2VMaWIvUXVpY2tTb3J0IGluIE1kZVBrZw0KPiAgICAgPg0KPiAgICAgPiBNb3JlIGRldGFp bHMgb24gbmV3IFF1aWNrU29ydCgpIEFQSToNCj4gICAgID4NCj4gICAgID4gVGhlIG5ldyBBUEkg bmVlZHMgdG8gY2FycnkgYWRkaXRpb25hbCBwYXJhbWV0ZXIg4oCcQnVmZmVyT25lRWxlbWVudOKA nS4NCj4gICAgID4NCj4gICAgID4gVGhpcyBwYXJhbWV0ZXIgZ2l2ZXMgUXVpY2tTb3J0KCkgdGhl IHRlbXBvcmFyeSBidWZmZXIgZm9yDQo+ICAgICBzd2FwcGluZyBpbg0KPiAgICAgPiBzb3J0aW5n Lg0KPiAgICAgPg0KPiAgICAgPiBJdOKAmXMgdG8gYXZvaWQgQmFzZUxpYiBkZXBlbmRzIG9uIE1l bW9yeUFsbG9jYXRpb25MaWIuDQo+ICAgICA+DQo+ICAgICA+IOKApg0KPiAgICAgPg0KPiAgICAg PiBAcGFyYW0gW2luXSBCdWZmZXJPbmVFbGVtZW50ICBXaGVuIEVsZW1lbnRTaXplID4gMjU2LCBj YWxsZXINCj4gICAgIG5lZWRzIHRvDQo+ICAgICA+IHByb3ZpZGUgYSBidWZmZXIgd2hvc2Ugc2l6 ZQ0KPiAgICAgPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcXVhbHMgdG8gRWxlbWVu dFNpemUuIEl04oCZcyB1c2VkIGJ5DQo+ICAgICA+IFF1aWNrU29ydCgpIGZvciBzd2FwcGluZyBp biBzb3J0aW5nLg0KPiAgICAgPg0KPiAgICAgPiBXaGVuIEVsZW1lbnRTaXplIDw9IDI1NiwgUXVp Y2tTb3J0KCkgdXNlcyBhIGxvY2FsIHN0YWNrIDI1Ni1ieXRlDQo+ICAgICBidWZmZXIuDQo+ICAg ICA+DQo+ICAgICA+IEByZXR2YWwgRUZJX0lOVkFMSURfUEFSQU1FVEVSIFdoZW4gKEVsZW1lbnRT aXplID4gMjU2KSBhbmQNCj4gICAgID4gKEJ1ZmZlck9uZUVsZW1lbnQgPT0gTlVMTCkuDQo+ICAg ICA+DQo+ICAgICA+IOKApg0KPiAgICAgPg0KPiAgICAgPiBWT0lEDQo+ICAgICA+DQo+ICAgICA+ IEVGSUFQSQ0KPiAgICAgPg0KPiAgICAgPiBRdWlja1NvcnQgKA0KPiAgICAgPg0KPiAgICAgPiAg IElOIE9VVCBWT0lEICAgICAgICAgICAgICAgICAgICAgICAgICpCdWZmZXJUb1NvcnQsDQo+ICAg ICA+DQo+ICAgICA+ICAgSU4gQ09OU1QgVUlOVE4gRWxlbWVudENvdW50LA0KPiAgICAgPg0KPiAg ICAgPiAgIElOIENPTlNUIFVJTlROIEVsZW1lbnRTaXplLA0KPiAgICAgPg0KPiAgICAgPiAgIElO ICAgICAgIFNPUlRfQ09NUEFSRSBDb21wYXJlRnVuY3Rpb24sDQo+ICAgICA+DQo+ICAgICA+IElO IFZPSUQgICAgICAgICAgICAgICAgICAgICAgICAgKkJ1ZmZlck9uZUVsZW1lbnQgT1BUSU9OQUwN Cj4gICAgID4NCj4gICAgID4gKTsNCj4gICAgID4NCj4gICAgID4gQW55IGNvbW1lbnRzPw0KPiAg ICAgPg0KPiAgICAgPiAqRnJvbToqZGV2ZWxAZWRrMi5ncm91cHMuaW8gPG1haWx0bzpkZXZlbEBl ZGsyLmdyb3Vwcy5pbz4NCj4gICAgID4gPGRldmVsQGVkazIuZ3JvdXBzLmlvIDxtYWlsdG86ZGV2 ZWxAZWRrMi5ncm91cHMuaW8+PiAqT24gQmVoYWxmIE9mDQo+ICAgICA+ICpOaSwgUmF5DQo+ICAg ICA+ICpTZW50OiogV2VkbmVzZGF5LCBTZXB0ZW1iZXIgMjIsIDIwMjEgMjowNCBQTQ0KPiAgICAg PiAqVG86KiBDaGFuLCBBbXkgPGFteS5jaGFuQGludGVsLmNvbSA8bWFpbHRvOmFteS5jaGFuQGlu dGVsLmNvbT4+Ow0KPiAgICAgPiBnYW9saW1pbmcgPGdhb2xpbWluZ0BieW9zb2Z0LmNvbS5jbg0K PiAgICAgPiA8bWFpbHRvOmdhb2xpbWluZ0BieW9zb2Z0LmNvbS5jbj4+OyAnQW5kcmV3IEZpc2gn IDxhZmlzaEBhcHBsZS5jb20NCj4gICAgID4gPG1haWx0bzphZmlzaEBhcHBsZS5jb20+PjsgJ2Vk azItZGV2ZWwtZ3JvdXBzLWlvJw0KPiAgICAgPiA8ZGV2ZWxAZWRrMi5ncm91cHMuaW8gPG1haWx0 bzpkZXZlbEBlZGsyLmdyb3Vwcy5pbz4+DQo+ICAgICA+ICpDYzoqIEtpbm5leSwgTWljaGFlbCBE IDxtaWNoYWVsLmQua2lubmV5QGludGVsLmNvbQ0KPiAgICAgPiA8bWFpbHRvOm1pY2hhZWwuZC5r aW5uZXlAaW50ZWwuY29tPj47ICdHYW8sIExpbWluZycNCj4gICAgID4gPGxpbWluZy5nYW9AaW50 ZWwuY29tIDxtYWlsdG86bGltaW5nLmdhb0BpbnRlbC5jb20+PjsgTGl1LCBaaGlndWFuZw0KPiAg ICAgPiA8emhpZ3VhbmcubGl1QGludGVsLmNvbSA8bWFpbHRvOnpoaWd1YW5nLmxpdUBpbnRlbC5j b20+PjsgV2FuZywNCj4gICAgIEppYW4gSg0KPiAgICAgPiA8amlhbi5qLndhbmdAaW50ZWwuY29t IDxtYWlsdG86amlhbi5qLndhbmdAaW50ZWwuY29tPj47IEdhbywNCj4gICAgIFpoaWNoYW8NCj4g ICAgID4gPHpoaWNoYW8uZ2FvQGludGVsLmNvbSA8bWFpbHRvOnpoaWNoYW8uZ2FvQGludGVsLmNv bT4+DQo+ICAgICA+ICpTdWJqZWN0OiogUmU6IFtlZGsyLWRldmVsXSBSRkM6IEFkZCBCYXNlTGli L1F1aWNrU29ydCBpbiBNZGVQa2cNCj4gICAgID4NCj4gICAgID4gSSBkb27igJl0IHNlZSBvYmpl Y3Rpb24gc28gZmFyLg0KPiAgICAgPg0KPiAgICAgPiBTbywgdGhlIGZpbmFsIHNvbHV0aW9uIGlz Og0KPiAgICAgPg0KPiAgICAgPiAgMS4gQWRkIFF1aWNrU29ydCgpIEFQSSB0byBCYXNlTGliIGlu IE1kZVBrZy4NCj4gICAgID4gIDIuIFVwZGF0ZSBleGlzdGluZyBNZGVNb2R1bGVQa2cvU29ydExp YiB0byB1c2UgUXVpY2tTb3J0KCkgaW4gdGhlDQo+ICAgICA+ICAgICBpbXBsZW1lbnRhdGlvbiAo cHJvcG9zZWQgYnkgQW5kcmV3IEZpc2ggYW5kIExpbWluZyBHYW8pDQo+ICAgICA+ICAzLiBVcGRh dGUgVWVmaUNwdVBrZyB0byB1c2UgUXVpY2tTb3J0TGliIHRvIHJlbW92ZSBpbXByb3Blcg0KPiAg ICAgPiAgICAgZGVwZW5kZW5jeSBvbiBNZGVNb2R1bGVQa2cNCj4gICAgID4NCj4gICAgID4gVGhh bmtzLA0KPiAgICAgPg0KPiAgICAgPiBSYXkNCj4gICAgID4NCj4gICAgID4gKkZyb206Kk5pLCBS YXkNCj4gICAgID4gKlNlbnQ6KiBUaHVyc2RheSwgU2VwdGVtYmVyIDE2LCAyMDIxIDEwOjQ4IEFN DQo+ICAgICA+ICpUbzoqIENoYW4sIEFteSA8YW15LmNoYW5AaW50ZWwuY29tIDxtYWlsdG86YW15 LmNoYW5AaW50ZWwuY29tPj47DQo+ICAgICA+IGdhb2xpbWluZyA8Z2FvbGltaW5nQGJ5b3NvZnQu Y29tLmNuDQo+ICAgICA+IDxtYWlsdG86Z2FvbGltaW5nQGJ5b3NvZnQuY29tLmNuPj47ICdBbmRy ZXcgRmlzaCcgPGFmaXNoQGFwcGxlLmNvbQ0KPiAgICAgPiA8bWFpbHRvOmFmaXNoQGFwcGxlLmNv bT4+OyAnZWRrMi1kZXZlbC1ncm91cHMtaW8nDQo+ICAgICA+IDxkZXZlbEBlZGsyLmdyb3Vwcy5p byA8bWFpbHRvOmRldmVsQGVkazIuZ3JvdXBzLmlvPj4NCj4gICAgID4gKkNjOiogS2lubmV5LCBN aWNoYWVsIEQgPG1pY2hhZWwuZC5raW5uZXlAaW50ZWwuY29tDQo+ICAgICA+IDxtYWlsdG86bWlj aGFlbC5kLmtpbm5leUBpbnRlbC5jb20+PjsgJ0dhbywgTGltaW5nJw0KPiAgICAgPiA8bGltaW5n Lmdhb0BpbnRlbC5jb20gPG1haWx0bzpsaW1pbmcuZ2FvQGludGVsLmNvbT4+OyBMaXUsIFpoaWd1 YW5nDQo+ICAgICA+IDxaaGlndWFuZy5MaXVAaW50ZWwuY29tIDxtYWlsdG86WmhpZ3VhbmcuTGl1 QGludGVsLmNvbT4+OyBXYW5nLA0KPiAgICAgSmlhbiBKDQo+ICAgICA+IDxqaWFuLmoud2FuZ0Bp bnRlbC5jb20gPG1haWx0bzpqaWFuLmoud2FuZ0BpbnRlbC5jb20+PjsgR2FvLA0KPiAgICAgWmhp Y2hhbw0KPiAgICAgPiA8emhpY2hhby5nYW9AaW50ZWwuY29tIDxtYWlsdG86emhpY2hhby5nYW9A aW50ZWwuY29tPj4NCj4gICAgID4gKlN1YmplY3Q6KiBSRTogW2VkazItZGV2ZWxdIFJGQzogQWRk IEJhc2VMaWIvUXVpY2tTb3J0IGluIE1kZVBrZw0KPiAgICAgPg0KPiAgICAgPiBBbXksDQo+ICAg ICA+DQo+ICAgICA+IE5vLiBXZSBvbmx5IEFkZCBRdWlja1NvcnQoKSBmdW5jdGlvbiBBUEkgaW50 byBCYXNlTGliLmguDQo+ICAgICA+DQo+ICAgICA+ICpGcm9tOipDaGFuLCBBbXkgPGFteS5jaGFu QGludGVsLmNvbSA8bWFpbHRvOmFteS5jaGFuQGludGVsLmNvbT4+DQo+ICAgICA+ICpTZW50Oiog VGh1cnNkYXksIFNlcHRlbWJlciAxNiwgMjAyMSAxMDo0NiBBTQ0KPiAgICAgPiAqVG86KiBnYW9s aW1pbmcgPGdhb2xpbWluZ0BieW9zb2Z0LmNvbS5jbg0KPiAgICAgPiA8bWFpbHRvOmdhb2xpbWlu Z0BieW9zb2Z0LmNvbS5jbj4+OyAnQW5kcmV3IEZpc2gnIDxhZmlzaEBhcHBsZS5jb20NCj4gICAg ID4gPG1haWx0bzphZmlzaEBhcHBsZS5jb20+PjsgJ2VkazItZGV2ZWwtZ3JvdXBzLWlvJw0KPiAg ICAgPiA8ZGV2ZWxAZWRrMi5ncm91cHMuaW8gPG1haWx0bzpkZXZlbEBlZGsyLmdyb3Vwcy5pbz4+ DQo+ICAgICA+ICpDYzoqIE5pLCBSYXkgPHJheS5uaUBpbnRlbC5jb20gPG1haWx0bzpyYXkubmlA aW50ZWwuY29tPj47IEtpbm5leSwNCj4gICAgID4gTWljaGFlbCBEIDxtaWNoYWVsLmQua2lubmV5 QGludGVsLmNvbQ0KPiAgICAgPiA8bWFpbHRvOm1pY2hhZWwuZC5raW5uZXlAaW50ZWwuY29tPj47 ICdHYW8sIExpbWluZycNCj4gICAgID4gPGxpbWluZy5nYW9AaW50ZWwuY29tIDxtYWlsdG86bGlt aW5nLmdhb0BpbnRlbC5jb20+PjsgTGl1LCBaaGlndWFuZw0KPiAgICAgPiA8emhpZ3VhbmcubGl1 QGludGVsLmNvbSA8bWFpbHRvOnpoaWd1YW5nLmxpdUBpbnRlbC5jb20+PjsgV2FuZywNCj4gICAg IEppYW4gSg0KPiAgICAgPiA8amlhbi5qLndhbmdAaW50ZWwuY29tIDxtYWlsdG86amlhbi5qLndh bmdAaW50ZWwuY29tPj47IEdhbywNCj4gICAgIFpoaWNoYW8NCj4gICAgID4gPHpoaWNoYW8uZ2Fv QGludGVsLmNvbSA8bWFpbHRvOnpoaWNoYW8uZ2FvQGludGVsLmNvbT4+DQo+ICAgICA+ICpTdWJq ZWN0OiogUkU6IFtlZGsyLWRldmVsXSBSRkM6IEFkZCBCYXNlTGliL1F1aWNrU29ydCBpbiBNZGVQ a2cNCj4gICAgID4NCj4gICAgID4gSnVzdCB0byBkb3VibGUgY29uZmlybSwgd2lsbCB3ZSBoYXZl IHRoZSBudWxsIGluc3RhbmNlIG9mDQo+ICAgICBRdWlja1NvcnQgaW4NCj4gICAgID4gTWRlUGtn Pw0KPiAgICAgPg0KPiAgICAgPiBSZWdhcmRzLA0KPiAgICAgPg0KPiAgICAgPiBBbXkNCj4gICAg ID4NCj4gICAgID4gKkZyb206Kmdhb2xpbWluZyA8Z2FvbGltaW5nQGJ5b3NvZnQuY29tLmNuDQo+ ICAgICA+IDxtYWlsdG86Z2FvbGltaW5nQGJ5b3NvZnQuY29tLmNuPj4NCj4gICAgID4gKlNlbnQ6 KiBUaHVyc2RheSwgU2VwdGVtYmVyIDE2LCAyMDIxIDEwOjIzIEFNDQo+ICAgICA+ICpUbzoqICdB bmRyZXcgRmlzaCcgPGFmaXNoQGFwcGxlLmNvbSA8bWFpbHRvOmFmaXNoQGFwcGxlLmNvbT4+Ow0K PiAgICAgPiAnZWRrMi1kZXZlbC1ncm91cHMtaW8nIDxkZXZlbEBlZGsyLmdyb3Vwcy5pbw0KPiAg ICAgPiA8bWFpbHRvOmRldmVsQGVkazIuZ3JvdXBzLmlvPj4NCj4gICAgID4gKkNjOiogTmksIFJh eSA8cmF5Lm5pQGludGVsLmNvbSA8bWFpbHRvOnJheS5uaUBpbnRlbC5jb20+PjsgS2lubmV5LA0K PiAgICAgPiBNaWNoYWVsIEQgPG1pY2hhZWwuZC5raW5uZXlAaW50ZWwuY29tDQo+ICAgICA+IDxt YWlsdG86bWljaGFlbC5kLmtpbm5leUBpbnRlbC5jb20+PjsgJ0dhbywgTGltaW5nJw0KPiAgICAg PiA8bGltaW5nLmdhb0BpbnRlbC5jb20gPG1haWx0bzpsaW1pbmcuZ2FvQGludGVsLmNvbT4+OyBM aXUsIFpoaWd1YW5nDQo+ICAgICA+IDx6aGlndWFuZy5saXVAaW50ZWwuY29tIDxtYWlsdG86emhp Z3VhbmcubGl1QGludGVsLmNvbT4+OyBXYW5nLA0KPiAgICAgSmlhbiBKDQo+ICAgICA+IDxqaWFu Lmoud2FuZ0BpbnRlbC5jb20gPG1haWx0bzpqaWFuLmoud2FuZ0BpbnRlbC5jb20+PjsgR2FvLA0K PiAgICAgWmhpY2hhbw0KPiAgICAgPiA8emhpY2hhby5nYW9AaW50ZWwuY29tIDxtYWlsdG86emhp Y2hhby5nYW9AaW50ZWwuY29tPj47IENoYW4sIEFteQ0KPiAgICAgPiA8YW15LmNoYW5AaW50ZWwu Y29tIDxtYWlsdG86YW15LmNoYW5AaW50ZWwuY29tPj4NCj4gICAgID4gKlN1YmplY3Q6KiDlm57l pI06IFtlZGsyLWRldmVsXSBSRkM6IEFkZCBCYXNlTGliL1F1aWNrU29ydCBpbiBNZGVQa2cNCj4g ICAgID4NCj4gICAgID4gQW5kcmV3Og0KPiAgICAgPg0KPiAgICAgPiBUaGFua3MgZm9yIHlvdXIg c3VnZ2VzdGlvbi4gSSB0aGluayB5b3VyIGlkZWEgaXMgYmV0dGVyLiBXZSBhZGQgbmV3DQo+ICAg ICA+IFF1aWNrU29ydCgpIEFQSSB0byBCYXNlTGliLCBhbmQgdXBkYXRlIFNvcnRMaWIgbGlicmFy eSBpbnN0YW5jZSB0bw0KPiAgICAgPiBjb25zdW1lIEJhc2VMaWIgUXVpY2tTb3J0KCkgQVBJLiBU aGlzIHdheSBoYXMgbm8gY2hhbmdlIGluIGN1cnJlbnQNCj4gICAgID4gU29ydExpYiBsaWJyYXJ5 IGNsYXNzLiBJdCBpcyB0aGUgY29tcGF0aWJsZSBzb2x1dGlvbi4NCj4gICAgID4NCj4gICAgID4g VGhhbmtzDQo+ICAgICA+DQo+ICAgICA+IExpbWluZw0KPiAgICAgPg0KPiAgICAgPiAq5Y+R5Lu2 5Lq6Kio6KkFuZHJldyBGaXNoIDxhZmlzaEBhcHBsZS5jb20gPG1haWx0bzphZmlzaEBhcHBsZS5j b20+Pg0KPiAgICAgPiAq5Y+R6YCB5pe26Ze0OiogMjAyMeW5tDnmnIgxNuaXpSAxMDoxMw0KPiAg ICAgPiAq5pS25Lu25Lq6OiogZWRrMi1kZXZlbC1ncm91cHMtaW8gPGRldmVsQGVkazIuZ3JvdXBz LmlvDQo+ICAgICA+IDxtYWlsdG86ZGV2ZWxAZWRrMi5ncm91cHMuaW8+PjsgTGltaW5nIEdhbw0K PiAgICAgPGdhb2xpbWluZ0BieW9zb2Z0LmNvbS5jbg0KPiAgICAgPiA8bWFpbHRvOmdhb2xpbWlu Z0BieW9zb2Z0LmNvbS5jbj4+DQo+ICAgICA+ICrmioTpgIE6KiBOaSwgUmF5IDxyYXkubmlAaW50 ZWwuY29tIDxtYWlsdG86cmF5Lm5pQGludGVsLmNvbT4+OyBNaWtlDQo+ICAgICA+IEtpbm5leSA8 bWljaGFlbC5kLmtpbm5leUBpbnRlbC5jb20NCj4gICAgID4gPG1haWx0bzptaWNoYWVsLmQua2lu bmV5QGludGVsLmNvbT4+OyBHYW8sIExpbWluZw0KPiAgICAgPiA8bGltaW5nLmdhb0BpbnRlbC5j b20gPG1haWx0bzpsaW1pbmcuZ2FvQGludGVsLmNvbT4+OyBMaXUsIFpoaWd1YW5nDQo+ICAgICA+ IDx6aGlndWFuZy5saXVAaW50ZWwuY29tIDxtYWlsdG86emhpZ3VhbmcubGl1QGludGVsLmNvbT4+ OyBXYW5nLA0KPiAgICAgSmlhbiBKDQo+ICAgICA+IDxqaWFuLmoud2FuZ0BpbnRlbC5jb20gPG1h aWx0bzpqaWFuLmoud2FuZ0BpbnRlbC5jb20+PjsgR2FvLA0KPiAgICAgWmhpY2hhbw0KPiAgICAg PiA8emhpY2hhby5nYW9AaW50ZWwuY29tIDxtYWlsdG86emhpY2hhby5nYW9AaW50ZWwuY29tPj47 IENoYW4sIEFteQ0KPiAgICAgPiA8YW15LmNoYW5AaW50ZWwuY29tIDxtYWlsdG86YW15LmNoYW5A aW50ZWwuY29tPj4NCj4gICAgID4gKuS4u+mimDoqIFJlOiBbZWRrMi1kZXZlbF0gUkZDOiBBZGQg QmFzZUxpYi9RdWlja1NvcnQgaW4gTWRlUGtnDQo+ICAgICA+DQo+ICAgICA+ICAgICBPbiBTZXAg MTUsIDIwMjEsIGF0IDY6MjYgUE0sIGdhb2xpbWluZyA8Z2FvbGltaW5nQGJ5b3NvZnQuY29tLmNu DQo+ICAgICA+ICAgICA8bWFpbHRvOmdhb2xpbWluZ0BieW9zb2Z0LmNvbS5jbj4+IHdyb3RlOg0K PiAgICAgPg0KPiAgICAgPiAgICAgUmF5Og0KPiAgICAgPg0KPiAgICAgPiAgICAgU29ydExpYiBo YXMgYmVlbiBhZGRlZCBzaW5jZSAyMDE1LiBJIHdvdWxkIHN1Z2dlc3QgdG8gc3RpbGwga2VlcA0K PiAgICAgPiAgICAgdGhpcyBsaWJyYXJ5IGNsYXNzLiBUbyByZXNvbHZlIHRoZSBwYWNrYWdlIGRl cGVuZGVuY3ksIG15DQo+ICAgICBwcm9wb3NhbA0KPiAgICAgPiAgICAgaXMgdG8gbW92ZSB0aGUg bGlicmFyeSBjbGFzcyBoZWFkZXIgZmlsZSBTb3J0TGliLmggZnJvbQ0KPiAgICAgPiAgICAgTWRl TW9kdWxlUGtnIHRvIE1kZVBrZywgYW5kIHN0aWxsIGtlZXAgdGhlIGxpYnJhcnkgaW5zdGFuY2Ug aW4NCj4gICAgID4gICAgIE1kZU1vZHVsZVBrZy4gVGhpcyBwcm9wb3NhbCBoYXMgbm8gaW1wYWN0 IG9uIHRoZSBleGlzdGluZw0KPiAgICAgcGxhdGZvcm0uDQo+ICAgICA+DQo+ICAgICA+IElmIHdl IGFkZCBRdWlja1NvcnQoKSBBUEkgdG8gdGhlIEJhc2VMaWIgY2FuIHdlIG5vdCBqdXN0IHBvcnQg dGhlDQo+ICAgICA+IGV4aXN0aW5nIE1kZU1vZHVsZVBrZy9Tb3J0TGliIHRvIHVzZSBRdWlja1Nv cnQoKSBpbiB0aGUNCj4gICAgID4gaW1wbGVtZW50YXRpb24/IE9yIGlzIHRoZXJlIHNvbWUgb3Ro ZXIgd2F5IHRvIGFkZCB0aGUgbmV3IHRoaW5nDQo+ICAgICBpbiBhDQo+ICAgICA+IGJhY2t3YXJk IGNvbXBhdGlibGUgd2F5Lg0KPiAgICAgPg0KPiAgICAgPiBUaGFua3MsDQo+ICAgICA+DQo+ICAg ICA+IEFuZHJldyBGaXNoDQo+ICAgICA+DQo+ICAgICA+ICAgICBUaGFua3MNCj4gICAgID4NCj4g ICAgID4gICAgIExpbWluZw0KPiAgICAgPg0KPiAgICAgPiAgICAgKuWPkeS7tuS6uioqOipkZXZl bEBlZGsyLmdyb3Vwcy5pbw0KPiAgICAgPiA8bWFpbHRvOmRldmVsQGVkazIuZ3JvdXBzLmlvPjxk ZXZlbEBlZGsyLmdyb3Vwcy5pbw0KPiAgICAgPiA8bWFpbHRvOmRldmVsQGVkazIuZ3JvdXBzLmlv Pj4q5Luj6KGoKioqTmksIFJheQ0KPiAgICAgPiAgICAgKuWPkemAgeaXtumXtDoqMjAyMeW5tDnm nIgxNOaXpTE0OjE1DQo+ICAgICA+ICAgICAq5pS25Lu25Lq6OipLaW5uZXksIE1pY2hhZWwgRCA8 bWljaGFlbC5kLmtpbm5leUBpbnRlbC5jb20NCj4gICAgID4gICAgIDxtYWlsdG86bWljaGFlbC5k Lmtpbm5leUBpbnRlbC5jb20+PjsgR2FvLCBMaW1pbmcNCj4gICAgID4gICAgIDxsaW1pbmcuZ2Fv QGludGVsLmNvbSA8bWFpbHRvOmxpbWluZy5nYW9AaW50ZWwuY29tPj47IExpdSwNCj4gICAgID4g ICAgIFpoaWd1YW5nIDx6aGlndWFuZy5saXVAaW50ZWwuY29tDQo+ICAgICA8bWFpbHRvOnpoaWd1 YW5nLmxpdUBpbnRlbC5jb20+PjsNCj4gICAgID4gICAgIFdhbmcsIEppYW4gSiA8amlhbi5qLndh bmdAaW50ZWwuY29tDQo+ICAgICA+ICAgICA8bWFpbHRvOmppYW4uai53YW5nQGludGVsLmNvbT4+ OyBHYW8sIFpoaWNoYW8NCj4gICAgID4gICAgIDx6aGljaGFvLmdhb0BpbnRlbC5jb20gPG1haWx0 bzp6aGljaGFvLmdhb0BpbnRlbC5jb20+Pg0KPiAgICAgPiAgICAgKuaKhOmAgToqZGV2ZWxAZWRr Mi5ncm91cHMuaW8gPG1haWx0bzpkZXZlbEBlZGsyLmdyb3Vwcy5pbz47DQo+ICAgICBDaGFuLCBB bXkNCj4gICAgID4gICAgIDxhbXkuY2hhbkBpbnRlbC5jb20gPG1haWx0bzphbXkuY2hhbkBpbnRl bC5jb20+Pg0KPiAgICAgPiAgICAgKuS4u+mimDoqW2VkazItZGV2ZWxdIFJGQzogQWRkIEJhc2VM aWIvUXVpY2tTb3J0IGluIE1kZVBrZw0KPiAgICAgPg0KPiAgICAgPiAgICAgSGkgcGFja2FnZSBt YWludGFpbmVycyBvZiBNZGVQa2csIE1kZU1vZHVsZVBrZyBhbmQgU2hlbGxQa2csDQo+ICAgICA+ ICAgICBjb21tdW5pdHksDQo+ICAgICA+DQo+ICAgICA+ICAgICBBIGNvbW1pdCAoVWVmaUNwdVBr Zy9DcHVDYWNoZUluZm9MaWI6IFNvcnQgQ3B1Q2FjaGVJbmZvIGFycmF5DQo+ICAgICA+DQo+ICAg ICA8aHR0cHM6Ly9naXRodWIuY29tL3RpYW5vY29yZS9lZGsyL2NvbW1pdC80ZGU3N2FlOTg5MGQy NDEyNzFmNTQzZTkxOTVhYjM1MTZmM2FiZWM2PikNCj4gICAgID4gICAgIHRvIFVlZmlDcHVQa2cg bGV0DQo+ICAgICA+ICAgICBVZWZpQ3B1UGtnIGRlcGVuZCBvbiBNZGVNb2R1bGVQa2cgYmVjYXVz ZSB0aGUgU29ydExpYiBjbGFzcyBhbmQNCj4gICAgID4gICAgIGluc3RhbmNlcyBhcmUgYWxsIGlu IE1kZU1vZHVsZVBrZy4NCj4gICAgID4NCj4gICAgID4gICAgIFVlZmlDcHVQa2cgZGVwZW5kaW5n IG9uIE1kZU1vZHVsZVBrZyBicmVha3MgdGhlIHJ1bGUgdGhhdA0KPiAgICAgPiAgICAg4oCcVWVm aUNwdVBrZyBzaG91bGQgT05MWSBkZXBlbmQgb24gTWRlUGtn4oCdLg0KPiAgICAgPg0KPiAgICAg PiAgICAgVG8gYWRkcmVzcyB0aGlzIGlzc3VlLCB0aGVyZSBhcmUgdHdvIGFwcHJvYWNoZXM6DQo+ ICAgICA+DQo+ICAgICA+ICAgICAgMS4gRHVwbGljYXRlIHRoZSBzb3J0IGxvZ2ljIGluIFVlZmlD cHVQa2cgdG8gbm90IGRlcGVuZCBvbg0KPiAgICAgPiAgICAgICAgIE1kZU1vZHVsZVBrZy9Tb3J0 TGliDQo+ICAgICA+ICAgICAgMi4gQWRkIFF1aWNrU29ydCgpIEFQSSB0byBCYXNlTGliIGluIE1k ZVBrZy4NCj4gICAgID4NCj4gICAgID4gICAgIEFwcHJvYWNoICMyIChNZGVQa2cvQmFzZUxpYi9R dWlja1NvcnQpIG1ha2VzIG1vcmUgc2Vuc2UgYmVjYXVzZQ0KPiAgICAgPiAgICAgcXVpY2sgc29y dCBpcyBhIHN0YW5kYXJkIGFsZ29yaXRobS4NCj4gICAgID4NCj4gICAgID4gICAgIFdlIGVuY291 cmFnZSBjb25zdW1lcnMgdG8gdXBkYXRlIHRoZWlyIGNvZGUgdG8gdXNlIHRoZSBxdWljaw0KPiAg ICAgc29ydA0KPiAgICAgPiAgICAgaW4gTWRlUGtnIGFuZCBncmFkdWFsbHkgZGVwcmVjYXRlIHRv ZGF54oCZcyBNZGVNb2R1bGVQa2cvU29ydExpYi4NCj4gICAgID4NCj4gICAgID4gICAgIElmIHlv dSBkb27igJl0IGhhdmUgY29uY2VybnMsIEkgcGxhbiB0bzoNCj4gICAgID4NCj4gICAgID4gICAg ICAxLiDigJxBZGQgUXVpY2tTb3J0KCkgdG8gQmFzZUxpYuKAnSBhbmQgdXBkYXRlIGFsbCBleGlz dGluZw0KPiAgICAgY29uc3VtZXJzDQo+ICAgICA+ICAgICAgICAgdG8gdXNlIHRoaXMgQVBJIGlu c3RlYWQuDQo+ICAgICA+DQo+ICAgICA+ICAgICBWT0lEDQo+ICAgICA+DQo+ICAgICA+ICAgICBF RklBUEkNCj4gICAgID4NCj4gICAgID4gICAgIFF1aWNrU29ydCAoDQo+ICAgICA+DQo+ICAgICA+ ICAgICAgIElOIE9VVCBWT0lEICAgICAgICAgICAgICAgICAgICpCdWZmZXJUb1NvcnQsDQo+ICAg ICA+DQo+ICAgICA+ICAgICAgIElOIENPTlNUIFVJTlROIENvdW50LA0KPiAgICAgPg0KPiAgICAg PiAgICAgICBJTiBDT05TVCBVSU5UTiBFbGVtZW50U2l6ZSwNCj4gICAgID4NCj4gICAgID4gICBJ TiAgICAgICBTT1JUX0NPTVBBUkUgICAgICAgICBDb21wYXJlRnVuY3Rpb24NCj4gICAgID4NCj4g ICAgID4gICAgICAgKTsNCj4gICAgID4NCj4gICAgID4gICAgICAyLiDigJxBZGQgbmV3IFNoZWxs UGtnL1NvcnRDb21wYXJlTGli4oCdDQo+ICAgICA+DQo+ICAgICA+ICAgICBCYWNrZ3JvdW5kOiBT aGVsbFBrZyByZXF1aXJlcyB0byBzb3J0IGRldmljZXBhdGgvc3RyaW5nIHNvIDMNCj4gICAgIEFQ SXMNCj4gICAgID4gICAgIGluIFVlZmlTb3J0TGliIChEZXZpY2VQYXRoQ29tcGFyZSwgU3RyaW5n Tm9DYXNlQ29tcGFyZSwNCj4gICAgID4gICAgIFN0cmluZ0NvbXBhcmUpIGFyZSBwcm92aWRlZCBm b3IgU2hlbGwgdXNhZ2UuIHdlIGNhbiBtb3ZlIHRoZSAzDQo+ICAgICA+ICAgICBBUElzIHRvIHRo ZSBTb3J0Q29tcGFyZUxpYiBhbmQgdXBkYXRlIFNoZWxsIGNvZGUgdG8gdXNlDQo+ICAgICA+ICAg ICBCYXNlTGliL1F1aWNrU29ydCBkaXJlY3RseSwgd2l0aCB0aGUgc29ydCBjb21wYXJlIGZ1bmN0 aW9uIGZyb20NCj4gICAgID4gICAgIFNvcnRDb21wYXJlTGliLg0KPiAgICAgPg0KPiAgICAgPiAg ICAgQW55IGNvbmNlcm5zPw0KPiAgICAgPg0KPiAgICAgPiAgICAgVGhhbmtzLA0KPiAgICAgPg0K PiAgICAgPiAgICAgUmF5DQo+ICAgICA+DQo+ICAgICA+DQo+ICAgICANCj4NCiANCiANCiANCiAN CiANCiANCg0K ------=_001_NextPart177406853034_=---- Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable =20
In fact, my concern is that ma= king BaseLib's APIs depend on PeiService & Boot Services is n= ot good.  

For a instance,  AP f= unctions by MP service are not allowed to invoke any PeriServices and Boot = Services.  And exception handlers cannot invoke those services either.=


Jeff
fanjianfeng@byosoft.com.cn
<= blockquote style=3D"margin-top: 0px; margin-bottom: 0px; margin-left: 0.5em= ; margin-right: inherit;">
 
Fr= om: Jeff Fan
Date: 2021-09-27 16:50
To: devel@edk2.groups.io; mhaeuser; Ni, Ray; 'gaoliming';= Chan, Amy; 'Andrew Fish'
<= b>Subject: Re: [edk2-devel] RFC: Add BaseLib/QuickSort in MdePkg
=20
For former caller, they could still keep= as is to call the old API in MdeModulePkg. I think Ray's design is compati= ble change for existing code.
Only when the ex= isting code wants to remove the dependency on MdeModuelPkg, they could migr= ate to the new API in baselib.

I agree with one split-= API desgin what you mentioned. 
But my point is to define one API in baselib and&nb= sp;to make the baselib not depend on memory allocation.  And another wrapper= API could be designed to be placed in any other class.


Jeff
fanjianfeng@byosoft.com.cn
<= blockquote style=3D"margin-top: 0px; margin-bottom: 0px; margin-left: 0.5em= ; margin-right: inherit;">
 
Fr= om: Marvin H=C3=A4user
Date: 2021-09-27 16:14
Subject: Re: [edk2-devel] RFC: Add B= aseLib/QuickSort in MdePkg
On 27/09/2021 02:45, = fanjianfeng@byosoft.com.cn wrote:
> Making baselib implementation depend on MemoryAllocationLib
> (indirectly on Pei Service and gBS), it may prevent
> this base API using at some seneraio. i = don't think it's better.
 
That is why I asked about a split-API scenario, one of which does not =
depend on dynamic memory allocation (SetVariable-like) and one does
(wrapper-like).
 
> Add this parameter and make this parameter is optional,
> 1, when NULL, use the local 256 bytes stack
> 2, if 256 bytes stack is not enough, return RETURE_BUFFER_TOO_SAM= LL,
> 3, caller check the return status, to do nothing or to alloc= ate enough
> buffer for retry
>
> This is just like SetVariable()'s implementation.
 
Yes, and because that is SetVariable's implementation, we have library=
functions to make it less error-prone and more convenient [1]. As a
matter of fact, we have a (semi-lax) policy in our codebases to avoid =
such functions like the plague and use those library wrappers where-ev= er
it can make sense. The only super-rare exceptions I can think of are <= /div>
when we know the size of the element ahead of time. Also SetVariable h= as
no arbitrary constraint on when it may work the first time, and there = is
code that will fail when the first return is not EFI_BUFFER_TOO_SMALL.=
 
This solution honestly yields even more problems, because it introduce= s
a Status return which was not there before. For common code safety and=
quality policy, this requires the value *must* be retrieved and checke= d
in some fashion. So all callers, no matter the prior knowledge of the =
element size, now need either a runtime check and handling for a statu= s
that they (may) know can never be returned, or ASSERTs if the function=
spec really imposes the arbitrary 256 Bytes constraint. Latter doesn't=
really work I think. What if someone wants to sort in SEC and noticed =
they only have 64 Bytes on the stack to work with, realistically? Any =
code depending on the 256 Byte constraint, passing NULL and not doing =
additional handling, would seize to work. Former is too complicated, s= ee
wrappers. In my opinion, the memory must *either* be fully managed by =
the caller *or* the callee (and you may have both in separate function= s,
as I suggested), but not sometimes here, sometimes there.
 
Best regards,
Marvin
 
 
[1]
https://github.com/tianocore/edk2/blob/46b4606ba23498d3d0e66b53e498eb3= d5d592586/MdePkg/Library/UefiLib/UefiLib.c#L1309-L1360
 
>
> -----------------------------------------------------------------= -------
> Jeff
> fanjianfeng@byosoft.com.cn
>
>     *From:* Marvin H=C3=A4user <mailto:mha= euser@posteo.de>
>     *Date:* 2021-09-26 19:20
>     *To:* devel <mailto:devel@edk2.groups.= io>; ray.ni
>     <mailto:ray.ni@intel.com>; gaolimin= g
>     <mailto:gaoliming@byosoft.com.cn>; = Chan, Amy
>     <mailto:amy.chan@intel.com>; 'Andre= w Fish' <mailto:afish@apple.com>
>     *CC:* Kinney, Michael D <mailto:michae= l.d.kinney@intel.com>; 'Gao,
>     Liming' <mailto:liming.gao@intel.com&g= t;; Liu, Zhiguang
>     <mailto:zhiguang.liu@intel.com>; Wa= ng, Jian J
>     <mailto:jian.j.wang@intel.com>; Gao= , Zhichao
>     <mailto:zhichao.gao@intel.com>
>     *Subject:* Re: [edk2-devel] RFC: Add= BaseLib/QuickSort in MdePkg
>     Hey Ray,
>     In my opinion that spec is too complicate= d. For some cases it is
>     obvious, but I think the last anyone want= s to see is a
>     (STATIC_)ASSERT
>     before most QuickSort calls to ensure the= element size *really* is <=3D
>     256 Bytes. In my opinion, there are two r= oads:
>     1) Make the parameter required (I think t= his is what Liming
>     suggested).
>     The caller would always need to provide s= aid buffer, and it can do
>     as it
>     sees fit - on the stack, in a pool, in a = page, who knows.
>     2) Remove the parameter entirely. The lib= rary would depend on
>     MemoryAllocationLib again, but also would= have an optimisation by
>     choosing stack vs pool based on ElementSi= ze.
>     Usually I would prefer 2), as it is less = prone to caller errors, but
>     considering the low-level nature of edk2,= I can totally see the
>     point to
>     allow the caller to control whether there= are dynamic memory
>     allocations
>     made or not as possible with 1). 2) could= technically also be a
>     wrapper
>     for 1) if you want granular control and c= onvenience/safety (why not
>     actually?).
>     Both approaches have the advantage that i= t is crystal-clear what the
>     caller's job is - to always or to never a= llocate the buffer.
>     Best regards,
>     Marvin
>     On 26/09/2021 04:24, Ni, Ray wrote:
>     >
>     > Liming,
>     >
>     > The purpose of the optional BufferOn= eElement is to ease consumer=E2=80=99s
>     > life assuming most of the time the e= lement size should be
>     smaller than
>     > 256.
>     >
>     > Are you saying that it=E2=80=99s a b= it hard to calculate the actual
>     value of
>     > sizeof (Element) when writing code?<= /div>
>     >
>     > I recommend consumer always allocate= s memory if it=E2=80=99s hard to judge
>     > sizeof (Element) < 256.
>     >
>     > Searching edk2 code, I can find belo= w code using PerformQuickSort():
>     >
>     >  1. ShellPkg/UefiShellCommandLi= b: It=E2=80=99s sorting array of
>     >     (EFI_DEVICE_= PATH_PROTOCOL *).
>     >  2. UefiCpuPkg/CpuCacheInfoLib:= It=E2=80=99s sorting array of
>      CPU_CACHE_INFO.
>     >  3. MinPlatformPkg/AcpiTables: = It=E2=80=99s sorting array of
>     EFI_CPU_ID_ORDER_MAP.
>     >  4. MdeModulePkg/UefiBootManage= rLib: It=E2=80=99s sorting array of
>     >     EFI_BOOT_MAN= AGER_LOAD_OPTION.
>     >  5. MdeModulePkg/CapsuleApp: It= =E2=80=99s sorting array of (EFI_FILE_INFO *)
>     >  6. CryptoPkg/CrtWrapper: It=E2= =80=99s sorting array of (unknown type).
>     >  7. RedfishPkg/RedfishCrtLib: I= t=E2=80=99s sorting array of (unknown type).
>     >
>     > For 1~5, it=E2=80=99s easy to know t= hat the size of the element is smaller
>     > than 256. The AllocatePool() can be = skipped.
>     >
>     > Thanks,
>     >
>     > Ray
>     >
>     > *From:*gaoliming <gaoliming@byoso= ft.com.cn>
>     > *Sent:* Sunday, September 26, 2021 1= 0:01 AM
>     > *To:* Ni, Ray <ray.ni@intel.com&g= t;; devel@edk2.groups.io; Chan, Amy
>     > <amy.chan@intel.com>; 'Andrew = Fish' <afish@apple.com>
>     > *Cc:* Kinney, Michael D <michael.= d.kinney@intel.com>; 'Gao, Liming'
>     > <liming.gao@intel.com>; Liu, Z= higuang <zhiguang.liu@intel.com>;
>     Wang,
>     > Jian J <jian.j.wang@intel.com>= ; Gao, Zhichao <zhichao.gao@intel.com>
>     > *Subject:* =E5=9B=9E=E5=A4=8D: [edk2= -devel] RFC: Add BaseLib/QuickSort in MdePkg
>     >
>     > Ray:
>     >
>     > I may suggest to always require Buff= erOneElement. The consumer code
>     > may not know ElementSize. To avoid t= he error, the consumer must
>     > allocate buffer for BufferOneElement= . If so, BufferOneElement is
>     the
>     > required parameter.
>     >
>     > Thanks
>     >
>     > Liming
>     >
>     > *=E5=8F=91=E4=BB=B6=E4=BA=BA**:*Ni, = Ray <ray.ni@intel.com <mailto:ray.ni@intel.com>>
>     > *=E5=8F=91=E9=80=81=E6=97=B6=E9=97= =B4:* 2021=E5=B9=B49=E6=9C=8824=E6=97=A5 11:53
>     > *=E6=94=B6=E4=BB=B6=E4=BA=BA:* devel= @edk2.groups.io <mailto:devel@edk2.groups.io>; Ni,
>     Ray
>     > <ray.ni@intel.com <mailto:ray.= ni@intel.com>>; Chan, Amy
>     > <amy.chan@intel.com <mailto:am= y.chan@intel.com>>; gaoliming
>     > <gaoliming@byosoft.com.cn <mai= lto:gaoliming@byosoft.com.cn>>;
>     'Andrew
>     > Fish' <afish@apple.com <mailto= :afish@apple.com>>
>     > *=E6=8A=84=E9=80=81:* Kinney, Michae= l D <michael.d.kinney@intel.com
>     > <mailto:michael.d.kinney@intel.co= m>>; 'Gao, Liming'
>     > <liming.gao@intel.com <mailto:= liming.gao@intel.com>>; Liu, Zhiguang
>     > <zhiguang.liu@intel.com <mailt= o:zhiguang.liu@intel.com>>; Wang,
>     Jian J
>     > <jian.j.wang@intel.com <mailto= :jian.j.wang@intel.com>>; Gao,
>     Zhichao
>     > <zhichao.gao@intel.com <mailto= :zhichao.gao@intel.com>>
>     > *=E4=B8=BB=E9=A2=98:* RE: [edk2-deve= l] RFC: Add BaseLib/QuickSort in MdePkg
>     >
>     > More details on new QuickSort() API:=
>     >
>     > The new API needs to carry additiona= l parameter =E2=80=9CBufferOneElement=E2=80=9D.
>     >
>     > This parameter gives QuickSort() the= temporary buffer for
>     swapping in
>     > sorting.
>     >
>     > It=E2=80=99s to avoid BaseLib depend= s on MemoryAllocationLib.
>     >
>     > =E2=80=A6
>     >
>     > @param [in] BufferOneElement  W= hen ElementSize > 256, caller
>     needs to
>     > provide a buffer whose size
>     >       =             &nb= sp;           equals to E= lementSize. It=E2=80=99s used by
>     > QuickSort() for swapping in sorting.=
>     >
>     > When ElementSize <=3D 256, QuickS= ort() uses a local stack 256-byte
>     buffer.
>     >
>     > @retval EFI_INVALID_PARAMETER When (= ElementSize > 256) and
>     > (BufferOneElement =3D=3D NULL).
>     >
>     > =E2=80=A6
>     >
>     > VOID
>     >
>     > EFIAPI
>     >
>     > QuickSort (
>     >
>     >   IN OUT VOID &n= bsp;            = ;           *BufferT= oSort,
>     >
>     >   IN CONST UINTN= ElementCount,
>     >
>     >   IN CONST UINTN= ElementSize,
>     >
>     >   IN   &nbs= p;   SORT_COMPARE CompareFunction,
>     >
>     > IN VOID     = ;            &n= bsp;       *BufferOneElement OPTIONAL
>     >
>     > );
>     >
>     > Any comments?
>     >
>     > *From:*devel@edk2.groups.io <mail= to:devel@edk2.groups.io>
>     > <devel@edk2.groups.io <mailto:= devel@edk2.groups.io>> *On Behalf Of
>     > *Ni, Ray
>     > *Sent:* Wednesday, September 22, 202= 1 2:04 PM
>     > *To:* Chan, Amy <amy.chan@intel.c= om <mailto:amy.chan@intel.com>>;
>     > gaoliming <gaoliming@byosoft.com.= cn
>     > <mailto:gaoliming@byosoft.com.cn&= gt;>; 'Andrew Fish' <afish@apple.com
>     > <mailto:afish@apple.com>>; = 'edk2-devel-groups-io'
>     > <devel@edk2.groups.io <mailto:= devel@edk2.groups.io>>
>     > *Cc:* Kinney, Michael D <michael.= d.kinney@intel.com
>     > <mailto:michael.d.kinney@intel.co= m>>; 'Gao, Liming'
>     > <liming.gao@intel.com <mailto:= liming.gao@intel.com>>; Liu, Zhiguang
>     > <zhiguang.liu@intel.com <mailt= o:zhiguang.liu@intel.com>>; Wang,
>     Jian J
>     > <jian.j.wang@intel.com <mailto= :jian.j.wang@intel.com>>; Gao,
>     Zhichao
>     > <zhichao.gao@intel.com <mailto= :zhichao.gao@intel.com>>
>     > *Subject:* Re: [edk2-devel] RFC: Add= BaseLib/QuickSort in MdePkg
>     >
>     > I don=E2=80=99t see objection so far= .
>     >
>     > So, the final solution is:
>     >
>     >  1. Add QuickSort() API to Base= Lib in MdePkg.
>     >  2. Update existing MdeMod= ulePkg/SortLib to use QuickSort() in the
>     >     implementati= on (proposed by Andrew Fish and Liming Gao)
>     >  3. Update UefiCpuPkg to use Qu= ickSortLib to remove improper
>     >     dependency o= n MdeModulePkg
>     >
>     > Thanks,
>     >
>     > Ray
>     >
>     > *From:*Ni, Ray
>     > *Sent:* Thursday, September 16, 2021= 10:48 AM
>     > *To:* Chan, Amy <amy.chan@intel.c= om <mailto:amy.chan@intel.com>>;
>     > gaoliming <gaoliming@byosoft.com.= cn
>     > <mailto:gaoliming@byosoft.com.cn&= gt;>; 'Andrew Fish' <afish@apple.com
>     > <mailto:afish@apple.com>>; = 'edk2-devel-groups-io'
>     > <devel@edk2.groups.io <mailto:= devel@edk2.groups.io>>
>     > *Cc:* Kinney, Michael D <michael.= d.kinney@intel.com
>     > <mailto:michael.d.kinney@intel.co= m>>; 'Gao, Liming'
>     > <liming.gao@intel.com <mailto:= liming.gao@intel.com>>; Liu, Zhiguang
>     > <Zhiguang.Liu@intel.com <mailt= o:Zhiguang.Liu@intel.com>>; Wang,
>     Jian J
>     > <jian.j.wang@intel.com <mailto= :jian.j.wang@intel.com>>; Gao,
>     Zhichao
>     > <zhichao.gao@intel.com <mailto= :zhichao.gao@intel.com>>
>     > *Subject:* RE: [edk2-devel] RFC: Add= BaseLib/QuickSort in MdePkg
>     >
>     > Amy,
>     >
>     > No. We only Add QuickSort() function= API into BaseLib.h.
>     >
>     > *From:*Chan, Amy <amy.chan@intel.= com <mailto:amy.chan@intel.com>>
>     > *Sent:* Thursday, September 16, 2021= 10:46 AM
>     > *To:* gaoliming <gaoliming@byosof= t.com.cn
>     > <mailto:gaoliming@byosoft.com.cn&= gt;>; 'Andrew Fish' <afish@apple.com
>     > <mailto:afish@apple.com>>; = 'edk2-devel-groups-io'
>     > <devel@edk2.groups.io <mailto:= devel@edk2.groups.io>>
>     > *Cc:* Ni, Ray <ray.ni@intel.com &= lt;mailto:ray.ni@intel.com>>; Kinney,
>     > Michael D <michael.d.kinney@intel= .com
>     > <mailto:michael.d.kinney@intel.co= m>>; 'Gao, Liming'
>     > <liming.gao@intel.com <mailto:= liming.gao@intel.com>>; Liu, Zhiguang
>     > <zhiguang.liu@intel.com <mailt= o:zhiguang.liu@intel.com>>; Wang,
>     Jian J
>     > <jian.j.wang@intel.com <mailto= :jian.j.wang@intel.com>>; Gao,
>     Zhichao
>     > <zhichao.gao@intel.com <mailto= :zhichao.gao@intel.com>>
>     > *Subject:* RE: [edk2-devel] RFC: Add= BaseLib/QuickSort in MdePkg
>     >
>     > Just to double confirm, will we have= the null instance of
>     QuickSort in
>     > MdePkg?
>     >
>     > Regards,
>     >
>     > Amy
>     >
>     > *From:*gaoliming <gaoliming@byoso= ft.com.cn
>     > <mailto:gaoliming@byosoft.com.cn&= gt;>
>     > *Sent:* Thursday, September 16, 2021= 10:23 AM
>     > *To:* 'Andrew Fish' <afish@apple.= com <mailto:afish@apple.com>>;
>     > 'edk2-devel-groups-io' <devel@edk= 2.groups.io
>     > <mailto:devel@edk2.groups.io>&= gt;
>     > *Cc:* Ni, Ray <ray.ni@intel.com &= lt;mailto:ray.ni@intel.com>>; Kinney,
>     > Michael D <michael.d.kinney@intel= .com
>     > <mailto:michael.d.kinney@intel.co= m>>; 'Gao, Liming'
>     > <liming.gao@intel.com <mailto:= liming.gao@intel.com>>; Liu, Zhiguang
>     > <zhiguang.liu@intel.com <mailt= o:zhiguang.liu@intel.com>>; Wang,
>     Jian J
>     > <jian.j.wang@intel.com <mailto= :jian.j.wang@intel.com>>; Gao,
>     Zhichao
>     > <zhichao.gao@intel.com <mailto= :zhichao.gao@intel.com>>; Chan, Amy
>     > <amy.chan@intel.com <mailto:am= y.chan@intel.com>>
>     > *Subject:* =E5=9B=9E=E5=A4=8D: [edk2= -devel] RFC: Add BaseLib/QuickSort in MdePkg
>     >
>     > Andrew:
>     >
>     > Thanks for your suggestion. I think = your idea is better. We add new
>     > QuickSort() API to BaseLib, and upda= te SortLib library instance to
>     > consume BaseLib QuickSort() API. Thi= s way has no change in current
>     > SortLib library class. It is the com= patible solution.
>     >
>     > Thanks
>     >
>     > Liming
>     >
>     > *=E5=8F=91=E4=BB=B6=E4=BA=BA**:*Andr= ew Fish <afish@apple.com <mailto:afish@apple.com>>
>     > *=E5=8F=91=E9=80=81=E6=97=B6=E9=97= =B4:* 2021=E5=B9=B49=E6=9C=8816=E6=97=A5 10:13
>     > *=E6=94=B6=E4=BB=B6=E4=BA=BA:* edk2-= devel-groups-io <devel@edk2.groups.io
>     > <mailto:devel@edk2.groups.io>&= gt;; Liming Gao
>     <gaoliming@byosoft.com.cn
>     > <mailto:gaoliming@byosoft.com.cn&= gt;>
>     > *=E6=8A=84=E9=80=81:* Ni, Ray <ra= y.ni@intel.com <mailto:ray.ni@intel.com>>; Mike
>     > Kinney <michael.d.kinney@intel.co= m
>     > <mailto:michael.d.kinney@intel.co= m>>; Gao, Liming
>     > <liming.gao@intel.com <mailto:= liming.gao@intel.com>>; Liu, Zhiguang
>     > <zhiguang.liu@intel.com <mailt= o:zhiguang.liu@intel.com>>; Wang,
>     Jian J
>     > <jian.j.wang@intel.com <mailto= :jian.j.wang@intel.com>>; Gao,
>     Zhichao
>     > <zhichao.gao@intel.com <mailto= :zhichao.gao@intel.com>>; Chan, Amy
>     > <amy.chan@intel.com <mailto:am= y.chan@intel.com>>
>     > *=E4=B8=BB=E9=A2=98:* Re: [edk2-deve= l] RFC: Add BaseLib/QuickSort in MdePkg
>     >
>     >     On Sep 15, 2= 021, at 6:26 PM, gaoliming <gaoliming@byosoft.com.cn
>     >     <mailto:g= aoliming@byosoft.com.cn>> wrote:
>     >
>     >     Ray:
>     >
>     >     SortLib has = been added since 2015. I would suggest to still keep
>     >     this library= class. To resolve the package dependency, my
>     proposal
>     >     is to move t= he library class header file SortLib.h from
>     >     MdeModulePkg= to MdePkg, and still keep the library instance in
>     >     MdeModulePkg= . This proposal has no impact on the existing
>     platform.
>     >
>     > If we add QuickSort() API to the Bas= eLib can we not just port the
>     > existing MdeModulePkg/SortLib t= o use QuickSort() in the
>     > implementation? Or is there some oth= er way to add the new thing
>     in a
>     > backward compatible way.
>     >
>     > Thanks,
>     >
>     > Andrew Fish
>     >
>     >     Thanks
>     >
>     >     Liming
>     >
>     >     *=E5=8F=91= =E4=BB=B6=E4=BA=BA**:*devel@edk2.groups.io
>     > <mailto:devel@edk2.groups.io>&= lt;devel@edk2.groups.io
>     > <mailto:devel@edk2.groups.io>&= gt;*=E4=BB=A3=E8=A1=A8***Ni, Ray
>     >     *=E5=8F=91= =E9=80=81=E6=97=B6=E9=97=B4:*2021=E5=B9=B49=E6=9C=8814=E6=97=A514:15
>     >     *=E6=94=B6= =E4=BB=B6=E4=BA=BA:*Kinney, Michael D <michael.d.kinney@intel.com
>     >     <mailto:m= ichael.d.kinney@intel.com>>; Gao, Liming
>     >     <liming.g= ao@intel.com <mailto:liming.gao@intel.com>>; Liu,
>     >     Zhiguang <= ;zhiguang.liu@intel.com
>     <mailto:zhiguang.liu@intel.com>>= ;
>     >     Wang, Jian J= <jian.j.wang@intel.com
>     >     <mailto:j= ian.j.wang@intel.com>>; Gao, Zhichao
>     >     <zhichao.= gao@intel.com <mailto:zhichao.gao@intel.com>>
>     >     *=E6=8A=84= =E9=80=81:*devel@edk2.groups.io <mailto:devel@edk2.groups.io>;
>     Chan, Amy
>     >     <amy.chan= @intel.com <mailto:amy.chan@intel.com>>
>     >     *=E4=B8=BB= =E9=A2=98:*[edk2-devel] RFC: Add BaseLib/QuickSort in MdePkg
>     >
>     >     Hi package m= aintainers of MdePkg, MdeModulePkg and ShellPkg,
>     >     community,
>     >
>     >     A commit (Ue= fiCpuPkg/CpuCacheInfoLib: Sort CpuCacheInfo array
>     >
>     <https://github.com/tianocore/edk2/com= mit/4de77ae9890d241271f543e9195ab3516f3abec6>)
>     >     to UefiCpuPk= g let
>     >     UefiCpuPkg d= epend on MdeModulePkg because the SortLib class and
>     >     instances ar= e all in MdeModulePkg.
>     >
>     >     UefiCpuPkg d= epending on MdeModulePkg breaks the rule that
>     >     =E2=80=9CUef= iCpuPkg should ONLY depend on MdePkg=E2=80=9D.
>     >
>     >     To address t= his issue, there are two approaches:
>     >
>     >      1. Dup= licate the sort logic in UefiCpuPkg to not depend on
>     >      &= nbsp;  MdeModulePkg/SortLib
>     >      2. Add= QuickSort() API to BaseLib in MdePkg.
>     >
>     >     Approach #2 = (MdePkg/BaseLib/QuickSort) makes more sense because
>     >     quick sort i= s a standard algorithm.
>     >
>     >     We encourage= consumers to update their code to use the quick
>     sort
>     >     in MdePkg an= d gradually deprecate today=E2=80=99s MdeModulePkg/SortLib.
>     >
>     >     If you don= =E2=80=99t have concerns, I plan to:
>     >
>     >      1. =E2= =80=9CAdd QuickSort() to BaseLib=E2=80=9D and update all existing
>     consumers
>     >      &= nbsp;  to use this API instead.
>     >
>     >     VOID
>     >
>     >     EFIAPI
>     >
>     >     QuickSort&nb= sp;(
>     >
>     >       = IN OUT VOID         =           *BufferToSort,<= /div>
>     >
>     >       = IN CONST UINTN Count,
>     >
>     >       = IN CONST UINTN ElementSize,
>     >
>     >   IN   &nbs= p;   SORT_COMPARE       &= nbsp; CompareFunction
>     >
>     >       = );
>     >
>     >      2. =E2= =80=9CAdd new ShellPkg/SortCompareLib=E2=80=9D
>     >
>     >     Background: = ShellPkg requires to sort devicepath/string so 3
>     APIs
>     >     in UefiSortL= ib (DevicePathCompare, StringNoCaseCompare,
>     >     StringCompar= e) are provided for Shell usage. we can move the 3
>     >     APIs to the = SortCompareLib and update Shell code to use
>     >     BaseLib/Quic= kSort directly, with the sort compare function from
>     >     SortCompareL= ib.
>     >
>     >     Any concerns= ?
>     >
>     >     Thanks,
>     >
>     >     Ray
>     >
>     >
>    
>
 
 
 
 
 
 
=20
------=_001_NextPart177406853034_=------