From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by dpdk.org (Postfix) with ESMTP id 74EFA275D for ; Thu, 21 Jul 2016 05:18:17 +0200 (CEST) Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by fmsmga101.fm.intel.com with ESMTP; 20 Jul 2016 20:18:16 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.28,397,1464678000"; d="scan'208";a="737530295" Received: from fmsmsx106.amr.corp.intel.com ([10.18.124.204]) by FMSMGA003.fm.intel.com with ESMTP; 20 Jul 2016 20:18:15 -0700 Received: from fmsmsx155.amr.corp.intel.com (10.18.116.71) by FMSMSX106.amr.corp.intel.com (10.18.124.204) with Microsoft SMTP Server (TLS) id 14.3.248.2; Wed, 20 Jul 2016 20:18:14 -0700 Received: from shsmsx151.ccr.corp.intel.com (10.239.6.50) by FMSMSX155.amr.corp.intel.com (10.18.116.71) with Microsoft SMTP Server (TLS) id 14.3.248.2; Wed, 20 Jul 2016 20:18:14 -0700 Received: from shsmsx102.ccr.corp.intel.com ([169.254.2.147]) by SHSMSX151.ccr.corp.intel.com ([169.254.3.150]) with mapi id 14.03.0248.002; Thu, 21 Jul 2016 11:18:12 +0800 From: "Lu, Wenzhuo" To: Adrien Mazarguil CC: "dev@dpdk.org" , Thomas Monjalon , "Zhang, Helin" , "Wu, Jingjing" , Rasesh Mody , "Ajit Khaparde" , Rahul Lakkireddy , Jan Medala , John Daley , "Chen, Jing D" , "Ananyev, Konstantin" , Matej Vido , Alejandro Lucero , Sony Chacko , Jerin Jacob , "De Lara Guarch, Pablo" , Olga Shern Thread-Topic: [RFC] Generic flow director/filtering/classification API Thread-Index: AQHR1uluLhaZlI58NEat0o4a8LsblaAMP0QAgAAA8QCAEynw4P//4EeAgAFO+PCAABkngIABecqg Date: Thu, 21 Jul 2016 03:18:11 +0000 Message-ID: <6A0DE07E22DDAD4C9103DF62FEBC090903492F92@shsmsx102.ccr.corp.intel.com> References: <20160705181646.GO7621@6wind.com> <6A0DE07E22DDAD4C9103DF62FEBC09090348E1A7@shsmsx102.ccr.corp.intel.com> <20160707102650.GU7621@6wind.com> <6A0DE07E22DDAD4C9103DF62FEBC090903492563@shsmsx102.ccr.corp.intel.com> <20160719131219.GK7621@6wind.com> <6A0DE07E22DDAD4C9103DF62FEBC090903492A93@shsmsx102.ccr.corp.intel.com> <20160720104115.GN7621@6wind.com> In-Reply-To: <20160720104115.GN7621@6wind.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.239.127.40] Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 Subject: Re: [dpdk-dev] [RFC] Generic flow director/filtering/classification API X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 21 Jul 2016 03:18:18 -0000 SGkgQWRyaWVuLA0KDQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IEFkcmll biBNYXphcmd1aWwgW21haWx0bzphZHJpZW4ubWF6YXJndWlsQDZ3aW5kLmNvbV0NCj4gU2VudDog V2VkbmVzZGF5LCBKdWx5IDIwLCAyMDE2IDY6NDEgUE0NCj4gVG86IEx1LCBXZW56aHVvDQo+IENj OiBkZXZAZHBkay5vcmc7IFRob21hcyBNb25qYWxvbjsgWmhhbmcsIEhlbGluOyBXdSwgSmluZ2pp bmc7IFJhc2VzaCBNb2R5Ow0KPiBBaml0IEtoYXBhcmRlOyBSYWh1bCBMYWtraXJlZGR5OyBKYW4g TWVkYWxhOyBKb2huIERhbGV5OyBDaGVuLCBKaW5nIEQ7IEFuYW55ZXYsDQo+IEtvbnN0YW50aW47 IE1hdGVqIFZpZG87IEFsZWphbmRybyBMdWNlcm87IFNvbnkgQ2hhY2tvOyBKZXJpbiBKYWNvYjsg RGUgTGFyYQ0KPiBHdWFyY2gsIFBhYmxvOyBPbGdhIFNoZXJuDQo+IFN1YmplY3Q6IFJlOiBbUkZD XSBHZW5lcmljIGZsb3cgZGlyZWN0b3IvZmlsdGVyaW5nL2NsYXNzaWZpY2F0aW9uIEFQSQ0KPiAN Cj4gSGkgV2Vuemh1bywNCj4gDQo+IE9uIFdlZCwgSnVsIDIwLCAyMDE2IGF0IDAyOjE2OjUxQU0g KzAwMDAsIEx1LCBXZW56aHVvIHdyb3RlOg0KPiBbLi4uXQ0KPiA+ID4gU28sIHRvZGF5IGFuIGFw cGxpY2F0aW9uIGNhbm5vdCBjb21iaW5lIE4tdHVwbGUgYW5kIEZESVIgZmxvdyBydWxlcw0KPiA+ ID4gYW5kIGdldCBhIHJlbGlhYmxlIG91dGNvbWUsIHVubGVzcyBpdCBpcyBkZXNpZ25lZCBmb3Ig c3BlY2lmaWMNCj4gPiA+IGRldmljZXMgd2l0aCBhIGtub3duIGJlaGF2aW9yLg0KPiA+ID4NCj4g PiA+ID4gV2hhdCdzIHRoZSByaWdodCBiZWhhdmlvciBvZiBQTUQgaWYgQVBQIHdhbnQgdG8gY3Jl YXRlIGEgZmxvdw0KPiA+ID4gPiBkaXJlY3RvciBydWxlDQo+ID4gPiB3aGljaCBoYXMgYSBoaWdo ZXIgb3IgZXZlbiBlcXVhbCBwcmlvcml0eSB0aGFuIGFuIGV4aXN0aW5nIG4tdHVwbGUNCj4gPiA+ IHJ1bGU/IFNob3VsZCBQTUQgcmV0dXJuIGZhaWw/DQo+ID4gPg0KPiA+ID4gRmlyc3QgcmVtZW1i ZXIgYXBwbGljYXRpb25zIG9ubHkgZGVhbCB3aXRoIHRoZSBnZW5lcmljIEFQSSwgUE1EcyBhcmUN Cj4gPiA+IHJlc3BvbnNpYmxlIGZvciBjaG9vc2luZyB0aGUgbW9zdCBhcHByb3ByaWF0ZSBIVyBp bXBsZW1lbnRhdGlvbiB0bw0KPiA+ID4gdXNlIGFjY29yZGluZyB0byB0aGUgcmVxdWVzdGVkIGZs b3cgcnVsZXMgKEZESVIsIE4tdHVwbGUgb3IgYW55dGhpbmcgZWxzZSkuDQo+ID4gPg0KPiA+ID4g Rm9yIHRoZSBzcGVjaWZpYyBjYXNlIG9mIEZESVIgdnMgTi10dXBsZSwgaWYgdGhlIHVuZGVybHlp bmcgSFcNCj4gPiA+IHN1cHBvcnRzIGJvdGggSSBkbyBub3Qgc2VlIHdoeSB0aGUgUE1EIHdvdWxk IGNyZWF0ZSBhIE4tdHVwbGUgcnVsZS4NCj4gPiA+IERvZXNuJ3QgRkRJUiBzdXBwb3J0IGV2ZXJ5 dGhpbmcgTi10dXBsZSBjYW4gZG8gYW5kIG11Y2ggbW9yZT8NCj4gPiBUYWxraW5nIGFib3V0IHRo ZSBmaWx0ZXJzLCBmZGlyIGNhbiBjb3ZlciBuLXR1cGxlLiBJIHRoaW5rIHRoYXQncyB3aHkgaTQw ZSBvbmx5DQo+IHN1cHBvcnRzIGZkaXIgYnV0IG5vdCBuLXR1cGxlLiBCdXQgbi10dXBsZSBoYXMg aXRzIG93biBoaWdobGlnaHQuIEFzIHdlIGtub3csIGF0DQo+IGxlYXN0IG9uIGludGVsIE5JQ3Ms IGZkaXIgb25seSBzdXBwb3J0cyBwZXIgZGV2aWNlIG1hc2suIEJ1dCBuLXR1cGxlIGNhbiBzdXBw b3J0DQo+IHBlciBydWxlIG1hc2suDQo+ID4gQXMgZXZlcnkgcGF0dGVybiBoYXMgc3BlYyBhbmQg bWFzayBib3RoLCB3ZSBjYW5ub3QgZ3VhcmFudGVlIHRoZSBtYXNrcyBhcmUNCj4gc2FtZS4gSSB0 aGluayBpeGdiZSB3aWxsIHRyeSB0byB1c2Ugbi10dXBsZSBmaXJzdCBpZiBjYW4uIEJlY2F1c2Ug ZXZlbiB0aGUgbWFza3MgYXJlDQo+IGRpZmZlcmVudCwgd2UgY2FuIHN1cHBvcnQgdGhlbSBhbGwu DQo+IA0KPiBPSywgbWFrZXMgc2Vuc2UuIEluIHRoYXQgY2FzZSBleGlzdGluZyBydWxlcyBtYXkg aW5kZWVkIHByZXZlbnQgc3Vic2VxdWVudA0KPiBvbmVzIGZyb20gZ2V0dGluZyBjcmVhdGVkIGlm IHRoZWlyIHByaW9yaXR5IGlzIHdyb25nLiBJIGRvIG5vdCB0aGluayB0aGVyZSBpcyBhIHdheQ0K PiBhcm91bmQgdGhhdCBpZiB0aGUgYXBwbGljYXRpb24gbmVlZHMgdGhpcyBleGFjdCBvcmRlcmlu Zy4NCkFncmVlLiBJIGRvbuKAmXQgc2VlIGFueSB3b3JrYXJvdW5kIGVpdGhlci4gUE1EIGhhcyB0 byByZXR1cm4gZmFpbCBzb21ldGltZXMuDQoNCj4gDQo+ID4gPiBBc3N1bWluZyBzdWNoIGEgdGhp bmcgaGFwcGVuZWQgYW55d2F5LCB0aGF0IHRoZSBQTUQgaGFkIHRvIGNyZWF0ZSBhDQo+ID4gPiBy dWxlIHVzaW5nIGEgaGlnaCBwcmlvcml0eSBmaWx0ZXIgdHlwZSBhbmQgdGhhdCB0aGUgYXBwbGlj YXRpb24NCj4gPiA+IHJlcXVlc3RzIHRoZSBjcmVhdGlvbiBvZiBhIHJ1bGUgdGhhdCBjYW4gb25s eSBiZSBkb25lIHVzaW5nIGEgbG93ZXINCj4gPiA+IHByaW9yaXR5IGZpbHRlciB0eXBlLCBidXQg YWxzbyByZXF1ZXN0ZWQgYSBoaWdoZXIgcHJpb3JpdHkgZm9yIHRoYXQgcnVsZSwgdGhlbiB5ZXMs DQo+IGl0IHNob3VsZCBvYnZpb3VzbHkgZmFpbC4NCj4gPiA+DQo+ID4gPiBUaGF0IGlzLCB1bmxl c3MgdGhlIFBNRCBjYW4gcGVyZm9ybSBzb21lIGtpbmQgb2Ygd29ya2Fyb3VuZCB0byBoYXZlIGJv dGguDQo+ID4gPg0KPiA+ID4gPiBJZiBzbywgZG8gd2UgbmVlZCBtb3JlIGZhaWwgcmVhc29ucz8g QWNjb3JkaW5nIHRvIHRoaXMgUkZDLCBJDQo+ID4gPiA+IHRoaW5rIHdlIG5lZWQNCj4gPiA+IHJl dHVybiAiIEVFWElTVDogY29sbGlzaW9uIHdpdGggYW4gZXhpc3RpbmcgcnVsZS4gIiwgYnV0IGl0 J3Mgbm90DQo+ID4gPiB2ZXJ5IGNsZWFyLCBBUFAgZG9lc24ndCBrbm93IHRoZSBwcm9ibGVtIGlz IHByaW9yaXR5LCBtYXliZSBtb3JlIGRldGFpbGVkDQo+IHJlYXNvbiBpcyBoZWxwZnVsLg0KPiA+ ID4NCj4gPiA+IFBvc3NpYmx5LCBJJ3ZlIGRlZmluZWQgYSBiYXNpYyBzZXQgb2YgZXJyb3JzLCB0 aGVyZSBhcmUgcXVpdGUgYQ0KPiA+ID4gbnVtYmVyIG9mIGVycm5vIHZhbHVlcyB0byBjaG9vc2Ug ZnJvbS4gSG93ZXZlciBJIHRoaW5rIHdlIHNob3VsZCBub3QNCj4gZGVmaW5lIHRvbyBtYW55IHZh bHVlcy4NCj4gPiA+IEluIG15IG9waW5pb24gdGhlIGJhc2ljIHNldCBjb3ZlcnMgZXZlcnkgcG9z c2libGUgZmFpbHVyZToNCj4gPiA+DQo+ID4gPiAtIEVJTlZBTDogaW52YWxpZCBmb3JtYXQsIHJ1 bGUgaXMgYnJva2VuIG9yIGNhbm5vdCBiZSB1bmRlcnN0b29kIGJ5IHRoZSBQTUQNCj4gPiA+ICAg YW55aG93Lg0KPiA+ID4NCj4gPiA+IC0gRU5PVFNVUDogcGF0dGVybi9hY3Rpb25zIGxvb2sgZmlu ZSBidXQgc29tZXRoaW5nIGluIHRoZSByZXF1ZXN0ZWQgcnVsZSBpcw0KPiA+ID4gICBub3Qgc3Vw cG9ydGVkIGFuZCB0aHVzIGNhbm5vdCBiZSBhcHBsaWVkLg0KPiA+ID4NCj4gPiA+IC0gRUVYSVNU OiBwYXR0ZXJuL2FjdGlvbnMgYXJlIGZpbmUgYW5kIGNvdWxkIGhhdmUgYmVlbiBhcHBsaWVkIGlm IG9ubHkgc29tZQ0KPiA+ID4gICBvdGhlciBydWxlIGRpZCBub3QgcHJldmVudCB0aGUgUE1EIHRv IGRvIGl0IChJIHNlZSBpdCBhcyB0aGUgY2xvc2VzdCB0aGluZw0KPiA+ID4gICB0byAiRVRPT0JB RCIgd2hpY2ggdW5mb3J0dW5hdGVseSBkb2VzIG5vdCBleGlzdCkuDQo+ID4gPg0KPiA+ID4gLSBF Tk9NRU06IGxpa2UgRUVYSVNULCBleGNlcHQgaXQgaXMgZHVlIHRvIHRoZSBsYWNrIG9mIHJlc291 cmNlcyBub3QgYmVjYXVzZQ0KPiA+ID4gICBvZiBhbm90aGVyIHJ1bGUuIEkgd2Fzbid0IHN1cmUg d2hpY2ggb2YgRU5PTUVNIG9yIEVOT1NQQyB3YXMgYmV0dGVyIGJ1dA0KPiA+ID4gICBzZXR0bGVk IG9uIEVOT01FTSBhcyBpdCBpcyB3ZWxsIGtub3duLiBTdGlsbCBvcGVuIHRvIGRlYmF0ZS4NCj4g PiA+DQo+ID4gPiBFcnJubyB2YWx1ZXMgYXJlIG9ubHkgdXNlZnVsIHRvIGdldCBhIHJvdWdoIGlk ZWEgb2YgdGhlIHJlYXNvbiwgYW5kDQo+ID4gPiBhbm90aGVyIG1lY2hhbmlzbSBpcyBuZWVkZWQg dG8gcGlucG9pbnQgdGhlIGV4YWN0IHByb2JsZW0gZm9yDQo+ID4gPiBkZWJ1Z2dpbmcvcmVwb3J0 aW5nIHB1cnBvc2VzLCBzb21ldGhpbmcgbGlrZToNCj4gPiA+DQo+ID4gPiAgZW51bSBydGVfZmxv d19lcnJvcl90eXBlIHsNCj4gPiA+ICAgICAgUlRFX0ZMT1dfRVJST1JfVFlQRV9OT05FLA0KPiA+ ID4gICAgICBSVEVfRkxPV19FUlJPUl9UWVBFX1VOS05PV04sDQo+ID4gPiAgICAgIFJURV9GTE9X X0VSUk9SX1RZUEVfUFJJT1JJVFksDQo+ID4gPiAgICAgIFJURV9GTE9XX0VSUk9SX1RZUEVfUEFU VEVSTiwNCj4gPiA+ICAgICAgUlRFX0ZMT1dfRVJST1JfVFlQRV9BQ1RJT04sDQo+ID4gPiAgfTsN Cj4gPiA+DQo+ID4gPiAgc3RydWN0IHJ0ZV9mbG93X2Vycm9yIHsNCj4gPiA+ICAgICAgZW51bSBy dGVfZmxvd19lcnJvcl90eXBlIHR5cGU7DQo+ID4gPiAgICAgIHZvaWQgKm9mZnNldDsgLyogUG9p bnRzIHRvIHRoZSBleGFjdCBwYXR0ZXJuIGl0ZW0gb3IgYWN0aW9uLiAqLw0KPiA+ID4gICAgICBj b25zdCBjaGFyICptZXNzYWdlOw0KPiA+ID4gIH07DQo+ID4gV2hlbiB3ZSBhcmUgdXNpbmcgYSBD TEkgYW5kIGl0IGZhaWxzLCBub3JtYWxseSBpdCB3aWxsIGxldCB1cyBrbm93DQo+ID4gd2hpY2gg cGFyYW1ldGVyIGlzIG5vdCBhcHByb3ByaWF0ZS4gU28sIEkgdGhpbmsgaXTigJlzIGEgZ29vZCBp ZGVhIHRvDQo+ID4gaGF2ZSB0aGlzIGVycm9yIHN0cnVjdHVyZSA6KQ0KPiANCj4gQWdyZWVkLg0K PiANCj4gPiA+IFRoZW4gZWl0aGVyIHByb3ZpZGUgYW4gb3B0aW9uYWwgc3RydWN0IHJ0ZV9mbG93 X2Vycm9yIHBvaW50ZXIgdG8NCj4gPiA+IHJ0ZV9mbG93X3ZhbGlkYXRlKCksIG9yIGEgc2VwYXJh dGUgZnVuY3Rpb24gKHJ0ZV9mbG93X2FuYWx5emUoKT8pLA0KPiA+ID4gc2luY2UgcHJvY2Vzc2lu ZyB0aGlzIG1heSBiZSBxdWl0ZSBleHBlbnNpdmUgYW5kIGFwcGxpY2F0aW9ucyBtYXkNCj4gPiA+ IG5vdCBjYXJlIGFib3V0IHRoZSBleGFjdCByZWFzb24uDQo+ID4gQWdyZWUgdGhlIHByb2Nlc3Np bmcgbWF5IGJlIHRvbyBleHBlbnNpdmUuIE1heWJlIHdlIGNhbiBzYXkgaXQncyBvcHRpb25hbCB0 bw0KPiByZXR1cm4gZXJyb3IgZGV0YWlscy4gQW5kIHRoYXQncyBhIGdvb2QgcXVlc3Rpb24gdGhh dCB3aGF0IEFQUCBzaG91bGQgZG8gaWYNCj4gY3JlYXRpbmcgdGhlIHJ1bGUgZmFpbHMuIEkgYmVs aWV2ZSBub3JtYWxseSBpdCB3aWxsIGNob29zZSBoYW5kbGUgdGhlIHJ1bGUgYnkgaXRzZWxmLg0K PiBCdXQgSSB0aGluayBpdCdzIG5vdCBiYWQgdG8gZmVlZGJhY2sgbW9yZS4gT3IgZXZlbiB0aGUg QVBQIHdhbnQgdG8gYWRqdXN0IHRoZQ0KPiBydWxlcywgaXQgY2Fubm90IGJlIGFuIG9wdGlvbiBm b3IgbGFjayBvZiBpbmZvLg0KPiANCj4gQWxsIHJpZ2h0IHRoZW4sIEknbGwgYWRkIGl0IHRvIHRo ZSBzcGVjaWZpY2F0aW9uLg0KPiANCj4gIGludA0KPiAgcnRlX2Zsb3dfdmFsaWRhdGUodWludDhf dCBwb3J0X2lkLA0KPiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHJ0ZV9mbG93X3Bh dHRlcm4gKnBhdHRlcm4sDQo+ICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgcnRlX2Zs b3dfYWN0aW9ucyAqYWN0aW9ucywNCj4gICAgICAgICAgICAgICAgICAgIHN0cnVjdCBydGVfZmxv d19lcnJvciAqZXJyb3IpOw0KPiANCj4gV2l0aCBlcnJvciBwb3NzaWJseSBOVUxMIGlmIHRoZSBh cHBsaWNhdGlvbiBkb2VzIG5vdCBjYXJlLiBJcyBpdCBmaW5lIGZvciB5b3U/DQpZZXMsIGl0IGxv b2tzIGdvb2QgdG8gbWUuIFRoYW5rcyBmb3IgdGhhdCA6KQ0KDQo+IA0KPiBbLi4uXQ0KPiA+ID4g PiA+ID4gPiAtIFBNRHMsIG5vdCBhcHBsaWNhdGlvbnMsIGFyZSByZXNwb25zaWJsZSBmb3IgbWFp bnRhaW5pbmcgZmxvdyBydWxlcw0KPiA+ID4gPiA+ID4gPiAgIGNvbmZpZ3VyYXRpb24gd2hlbiBz dG9wcGluZyBhbmQgcmVzdGFydGluZyBhIHBvcnQgb3IgcGVyZm9ybWluZw0KPiBvdGhlcg0KPiA+ ID4gPiA+ID4gPiAgIGFjdGlvbnMgd2hpY2ggbWF5IGFmZmVjdCB0aGVtLiBUaGV5IGNhbiBvbmx5 IGJlIGRlc3Ryb3llZCBleHBsaWNpdGx5Lg0KPiA+ID4gPiA+ID4gRG9u4oCZdCB1bmRlcnN0YW5k ICIgVGhleSBjYW4gb25seSBiZSBkZXN0cm95ZWQgZXhwbGljaXRseS4iDQo+ID4gPiA+ID4NCj4g PiA+ID4gPiBUaGlzIHBhcnQgc2F5cyB0aGF0IGFzIGxvbmcgYXMgYW4gYXBwbGljYXRpb24gaGFz IG5vdCBjYWxsZWQNCj4gPiA+ID4gPiBydGVfZmxvd19kZXN0cm95KCkgb24gYSBmbG93IHJ1bGUs IGl0IG5ldmVyIGRpc2FwcGVhcnMsIHdoYXRldmVyDQo+ID4gPiA+ID4gaGFwcGVucyB0byB0aGUg cG9ydCAoc3RvcHBlZCwgcmVzdGFydGVkKS4gVGhlIGFwcGxpY2F0aW9uIGlzIG5vdA0KPiA+ID4g PiA+IHJlc3BvbnNpYmxlIGZvciByZS1jcmVhdGluZyBydWxlcyBhZnRlciB0aGF0Lg0KPiA+ID4g PiA+DQo+ID4gPiA+ID4gTm90ZSB0aGF0IGFjY29yZGluZyB0byB0aGUgc3BlY2lmaWNhdGlvbiwg dGhpcyBtYXkgdHJhbnNsYXRlIHRvDQo+ID4gPiA+ID4gbm90IGJlaW5nIGFibGUgdG8gc3RvcCBh IHBvcnQgYXMgbG9uZyBhcyBhIGZsb3cgcnVsZSBpcyBwcmVzZW50LA0KPiA+ID4gPiA+IGRlcGVu ZGluZyBvbiBob3cgbmljZSB0aGUgUE1EIGludGVuZHMgdG8gYmUgd2l0aCBhcHBsaWNhdGlvbnMu DQo+ID4gPiA+ID4gSW1wbGVtZW50YXRpb24gY2FuIGJlIGRvbmUgaW4gc21hbGwgc3RlcHMgd2l0 aCBtaW5pbWFsIGFtb3VudCBvZg0KPiA+ID4gPiA+IGNvZGUgb24NCj4gPiA+IHRoZSBQTUQgc2lk ZS4NCj4gPiA+ID4gRG9lcyBpdCBtZWFuIFBNRCBzaG91bGQgc3RvcmUgYW5kIG1haW50YWluIGFs bCB0aGUgcnVsZXM/IFdoeSBub3QNCj4gPiA+ID4gbGV0IHJ0ZSBkbw0KPiA+ID4gdGhhdD8gSSB0 aGluayBpZiBQTUQgbWFpbnRhaW4gYWxsIHRoZSBydWxlcywgaXQgbWVhbnMgZXZlcnkga2luZCBv Zg0KPiA+ID4gTklDIHNob3VsZCBoYXZlIGEgY29weSBvZiBjb2RlIGZvciB0aGUgcnVsZXMuIEJ1 dCBpZiBydGUgZG8gdGhhdCwNCj4gPiA+IG9ubHkgb25lIGNvcHkgb2YgY29kZSBuZWVkIHRvIGJl IG1haW50YWluZWQsIHJpZ2h0Pw0KPiA+ID4NCj4gPiA+IEkndmUgY29uc2lkZXJlZCBoYXZpbmcg cnVsZXMgc3RvcmVkIGluIGEgY29tbW9uIGZvcm1hdCB1bmRlcnN0b29kIGF0DQo+ID4gPiB0aGUg UlRFIGxldmVsIGFuZCBub3Qgc3BlY2lmaWMgdG8gZWFjaCBQTUQgYW5kIGRlY2lkZWQgdGhhdCB0 aGUNCj4gPiA+IG9wYXF1ZSBydGVfZmxvdyBwb2ludGVyIHdhcyBhIGJldHRlciBjaG9pY2UgZm9y IHRoZSBmb2xsb3dpbmcgcmVhc29uczoNCj4gPiA+DQo+ID4gPiAtIEV2ZW4gdGhvdWdoIGZsb3cg cnVsZXMgbWFuYWdlbWVudCBpcyBkb25lIGluIHRoZSBjb250cm9sIHBhdGgsIHByb2Nlc3NpbmcN Cj4gPiA+ICAgbXVzdCBiZSBhcyBmYXN0IGFzIHBvc3NpYmxlLiBMZXR0aW5nIFBNRHMgc3RvcmUg ZmxvdyBydWxlcyB1c2luZyB0aGVpciBvd24NCj4gPiA+ICAgaW50ZXJuYWwgcmVwcmVzZW50YXRp b24gZ2l2ZXMgdGhlbSB0aGUgY2hhbmNlIHRvIGFjaGlldmUgYmV0dGVyDQo+ID4gPiAgIHBlcmZv cm1hbmNlLg0KPiA+IE5vdCBxdWl0ZSB1bmRlcnN0YW5kLiBJIHRoaW5rIHdlJ3JlIHRhbGtpbmcg YWJvdXQgbWFpbnRhaW4gdGhlIHJ1bGVzIGJ5IFNXLiBJDQo+IGRvbuKAmXQgdGhpbmsgdGhlcmUn cyBzb21ldGhpbmcgbmVlZCB0byBiZSBvcHRpbWl6ZWQgYWNjb3JkaW5nIHRvIHNwZWNpZmljIE5J Q3MuIElmDQo+IHdlIG5lZWQgdG8gb3B0aW1pemUgdGhlIGNvZGUsIEkgdGhpbmsgd2UgbmVlZCB0 byBjb25zaWRlciB0aGUgQ1BVLCBPUyAuLi4gYW5kDQo+IHNvbWUgY29tbW9uIG1lYW5zLiBJJ20g d3Jvbmc/DQo+IA0KPiBQZXJoYXBzIHdlIHdlcmUgdGFsa2luZyBhYm91dCBkaWZmZXJlbnQgdGhp bmdzLCBoZXJlIEkgd2FzIG9ubHkgZXhwbGFpbmluZyB3aHkNCj4gcnRlX2Zsb3cgKHRoZSByZXN1 bHQgb2YgY3JlYXRpbmcgYSBmbG93IHJ1bGUpIHNob3VsZCBiZSBvcGFxdWUgYW5kIGZ1bGx5IG1h bmFnZWQNCj4gYnkgdGhlIFBNRC4gTW9yZSBvbiB0aGUgU1cgc2lkZSBvZiB0aGluZ3MgYmVsb3cu DQo+IA0KPiA+ID4gLSBBbiBvcGFxdWUgY29udGV4dCBtYW5hZ2VkIGJ5IFBNRHMgd291bGQgcHJv YmFibHkgaGF2ZSB0byBiZSBzdG9yZWQNCj4gPiA+ICAgc29tZXdoZXJlIGFzIHdlbGwgYW55d2F5 Lg0KPiA+ID4NCj4gPiA+IC0gUE1EcyBtYXkgbm90IG5lZWQgdG8gYWxsb2NhdGUvc3RvcmUgYW55 dGhpbmcgYXQgYWxsIGlmIHRoZXkgZXhjbHVzaXZlbHkNCj4gPiA+ICAgcmVseSBvbiBIVyBzdGF0 ZSBmb3IgZXZlcnl0aGluZy4gSW4gbXkgb3BpbmlvbiwgdGhlIGdlbmVyaWMgQVBJIGhhcyBlbm91 Z2gNCj4gPiA+ICAgY29uc3RyYWludHMgZm9yIHRoaXMgdG8gd29yayBhbmQgbWFpbnRhaW4gY29u c2lzdGVuY3kgYmV0d2VlbiBmbG93DQo+ID4gPiAgIHJ1bGVzLiBOb3RlIHRoaXMgaXMgY3VycmVu dGx5IGhvdyBtb3N0IFBNRHMgaW1wbGVtZW50IEZESVIgYW5kIG90aGVyDQo+ID4gPiAgIGZpbHRl ciB0eXBlcy4NCj4gPiBZZXMsIHRoZSBydWxlcyBhcmUgc3RvcmVkIGJ5IEhXLiBCdXQgY29uc2lk ZXJpbmcgc3RvcC9zdGFydCB0aGUgZGV2aWNlLCB0aGUNCj4gcnVsZXMgaW4gSFcgd2lsbCBsb3Nl LiB3ZSBoYXZlIHRvIHN0b3JlIHRoZSBydWxlcyBieSBTVyBhbmQgcmUtcHJvZ3JhbSB0aGVtDQo+ IHdoZW4gcmVzdGFydGluZyB0aGUgZGV2aWNlLg0KPiANCj4gQXNzdW1lIGEgSFcgY2FwYWJsZSBv ZiBrZWVwaW5nIGZsb3cgcnVsZXMgcHJvZ3JhbW1lZCBldmVuIGR1cmluZyBhDQo+IHN0b3Avc3Rh cnQgY3ljbGUgKGUuZy4gbWx4NC9tbHg1IG1heSBiZSBhYmxlIHRvIGRvIGl0IGZyb20gRFBESyBw b2ludCBvZiB2aWV3KSwNCj4gZG9uJ3QgeW91IHRoaW5rIGl0IGlzIG1vcmUgZWZmaWNpZW50IHRv IHN0YW5kYXJkaXplIG9uIHRoaXMgYmVoYXZpb3IgYW5kIGxldCBQTURzDQo+IHJlc3RvcmUgZmxv dyBydWxlcyBmb3IgSFcgdGhhdCBkbyBub3Qgc3VwcG9ydCBpdCByZWdhcmRsZXNzIG9mIHdoZXRo ZXIgaXQgd291bGQNCj4gYmUgZG9uZSBieSBSVEUgb3IgdGhlIGFwcGxpY2F0aW9uIChTVyk/DQpE aWRu4oCZdCBrbm93IHRoYXQuIEFzIHNvbWUgTklDcyBoYXZlIGFscmVhZHkgaGFkIHRoZSBhYmls aXR5IHRvIGtlZXAgdGhlIHJ1bGVzIGR1cmluZyBhIHN0b3Avc3RhcnQgY3ljbGUsIG1heWJlIGl0 IGNvdWxkIGJlIGEgdHJlbmQgOikNCg0KPiANCj4gPiBBbmQgaW4gZXhpc3RpbmcgY29kZSwgd2Ug c3RvcmUgdGhlIGZpbHRlcnMgYnkgU1cgYXQgbGVhc3Qgb24gSW50ZWwgTklDcy4gQnV0IEkNCj4g dGhpbmsgd2UgY2Fubm90IHJldXNlIHRoZW0sIGJlY2F1c2UgY29uc2lkZXJpbmcgdGhlIHByaW9y aXR5IGFuZCB3aGljaA0KPiBjYXRlZ29yeSBvZiBmaWx0ZXIgc2hvdWxkIGJlIGNob3NlbiwgSSB0 aGluayB3ZSBuZWVkIGEgd2hvbGUgbmV3IHRhYmxlIGZvcg0KPiBnZW5lcmljIEFQSS4gSSB0aGlu ayBpdOKAmXMgd2hhdCdzIGRlc2lnbmVkIG5vdywgcmlnaHQ/DQo+IA0KPiBTbyBJIHVuZGVyc3Rh bmQgeW91J2Qgd2FudCBSVEUgdG8gaGVscCB5b3VyIFBNRCBrZWVwIHRyYWNrIG9mIHRoZSBmbG93 IHJ1bGVzIGl0DQo+IGNyZWF0ZWQ/DQpZZXMuIEJ1dCBhcyB5b3Ugc2FpZCBiZWZvcmUsIGl04oCZ cyBub3QgYSBnb29kIGlkZWEgZm9yIG1seDQvbWx4NSwgYmVjYXVzZSB0aGVpciBIVyBkb2Vzbid0 IG5lZWQgU1cgdG8gcmUtcHJvZ3JhbSB0aGUgcnVsZXMgYWZ0ZXIgc3RvcHBpbmcvc3RhcnRpbmcu IElmIHdlIG1ha2UgaXQgYSBjb21tb24gbWVjaGFuaXNtLCBpdCBqdXN0IHdhc3RlcyB0aW1lIGZv ciBtbHg0L21seDUuDQoNCj4gDQo+IE5vdGhpbmcgd3Jvbmcgd2l0aCB0aGF0LCBhbGwgSSdtIHNh eWluZyBpcyB0aGF0IGl0IHNob3VsZCBiZSBlbnRpcmVseSBvcHRpb25hbC4gUlRFDQo+IHNob3Vs ZCBub3QgYXV0b21hdGljYWxseSBtYWludGFpbiBhIGxpc3QuIFBNRHMgaGF2ZSB0byBjYWxsIFJU RSBoZWxwZXJzIGlmIHRoZXkNCj4gbmVlZCBoZWxwIHRvIG1haW50YWluIGEgY29udGV4dC4gVGhl c2UgaGVscGVycyBhcmUgbm90IGRlZmluZWQgaW4gdGhpcyBBUEkgeWV0DQo+IGJlY2F1c2UgaXQg aXMgZGlmZmljdWx0IHRvIGtub3cgd2hhdCB3aWxsIGJlIHVzZWZ1bCBpbiBhZHZhbmNlLg0KPiAN Cj4gPiA+IC0gUlRFIGNhbiAoYW5kIHdpbGwpIHByb3ZpZGUgaGVscGVycyB0byBhdm9pZCBtb3N0 IG9mIHRoZSBjb2RlIHJlZHVuZGFuY3ksDQo+ID4gPiAgIFBNRHMgYXJlIGZyZWUgdG8gdXNlIHRo ZW0gb3IgbWFuYWdlIGV2ZXJ5dGhpbmcgYnkgdGhlbXNlbHZlcy4NCj4gPiA+DQo+ID4gPiAtIEdp dmVuIHRoYXQgdGhlIG9wYXF1ZSBydGVfZmxvdyBwb2ludGVyIGFzc29jaWF0ZWQgd2l0aCBhIGZs b3cgcnVsZSBpcyB0bw0KPiA+ID4gICBiZSBzdG9yZWQgYnkgdGhlIGFwcGxpY2F0aW9uLCBQTURz IGRvIG5vdCBldmVuIGhhdmUgdG8ga2VlcCByZWZlcmVuY2VzIHRvDQo+ID4gPiAgIHRoZW0uDQo+ ID4gRG9u4oCZdCB1bmRlcnN0YW5kLiBNb3JlIGRldGFpbHM/DQo+IA0KPiBJbiBhbiBhcHBsaWNh dGlvbjoNCj4gDQo+ICBydGVfZmxvdyAqZm9vID0gcnRlX2Zsb3dfY3JlYXRlKC4uLik7DQo+IA0K PiBJbiB0aGUgYWJvdmUgZXhhbXBsZSwgZm9vIGNhbm5vdCBiZSBkZXJlZmVyZW5jZWQgYnkgdGhl IGFwcGxpY2F0aW9uIG5vciBSVEUsDQo+IG9ubHkgdGhlIFBNRCBpcyBhd2FyZSBvZiBpdHMgY29u dGVudHMuIFRoaXMgb2JqZWN0IGNhbiBvbmx5IGJlIHVzZWQgd2l0aA0KPiBydGVfZmxvdyooKSBm dW5jdGlvbnMuDQo+IA0KPiBQTURzIGFyZSB0aHVzIGZyZWUgdG8gbWFrZSB0aGlzIG9iamVjdCBn cm93IGFzIG5lZWRlZCB3aGVuIGFkZGluZyBpbnRlcm5hbA0KPiBmZWF0dXJlcyB3aXRob3V0IGJy ZWFraW5nIGFueSBraW5kIG9mIHB1YmxpYyBBUEkvQUJJLg0KPiANCj4gV2hhdCBJIG1lYW50IGlz LCBnaXZlbiB0aGF0IHRoZSBhcHBsaWNhdGlvbiBpcyBzdXBwb3NlZCB0byBzdG9yZSBmb28gc29t ZXdoZXJlDQo+IGluIG9yZGVyIHRvIGRlc3Ryb3kgaXQgbGF0ZXIsIHRoZSBQTUQgZG9lcyBub3Qg aGF2ZSB0byBrZWVwIHRyYWNrIG9mIHRoYXQgcG9pbnRlcg0KPiBhc3N1bWluZyBpdCBkb2VzIG5v dCBuZWVkIHRvIGFjY2VzcyBpdCBsYXRlciBvbiBpdHMgb3duIGZvciBzb21lIHJlYXNvbi4NCj4g DQo+ID4gPiAtIFRoZSBmbG93IHJ1bGVzIGZvcm1hdCBkZXNjcmliZWQgaW4gdGhpcyBzcGVjaWZp Y2F0aW9uIChwYXR0ZXJuIC8gYWN0aW9ucykNCj4gPiA+ICAgd2lsbCBiZSB1c2VkIGJ5IGFwcGxp Y2F0aW9ucyBkaXJlY3RseSwgYW5kIHdpbGwgYmUgZnJlZSB0byBhcnJhbmdlIHRoZW0gaW4NCj4g PiA+ICAgbGlzdHMsIHRyZWVzIG9yIGluIGFueSBvdGhlciB3YXkgaWYgdGhleSBuZWVkIHRvIGtl ZXAgZmxvdyBzcGVjaWZpY2F0aW9ucw0KPiA+ID4gICBhcm91bmQgZm9yIGZ1cnRoZXIgcHJvY2Vz c2luZy4NCj4gPiBXaG8gd2lsbCBjcmVhdGUgdGhlIGxpc3RzLCB0cmVlcyBvciBzb21ldGhpbmcg ZWxzZT8gQWNjb3JkaW5nIHRvIHByZXZpb3VzDQo+IGRpc2N1c3Npb24sIEkgdGhpbmsgdGhlIEFQ UCB3aWxsIHByb2dyYW0gdGhlIHJ1bGVzIG9uZSBieSBvbmUuIFNvIGlmIEFQUCBvcmdhbml6ZQ0K PiB0aGUgcnVsZXMgdG8gbGlzdHMsIHRyZWVzLi4uLCBQTUQgZG9lc27igJl0IGtub3cgdGhhdC4N Cj4gPiBBbmQgeW91IHNhaWQgIiBHaXZlbiB0aGF0IHRoZSBvcGFxdWUgcnRlX2Zsb3cgcG9pbnRl ciBhc3NvY2lhdGVkIHdpdGggYSBmbG93DQo+IHJ1bGUgaXMgdG8gYmUgc3RvcmVkIGJ5IHRoZSBh cHBsaWNhdGlvbiAiLiBJJ20gbG9zdCBoZXJlLg0KPiANCj4gSSBndWVzcyB0aGF0J3MgYmVjYXVz ZSB3ZSdyZSBkaXNjdXNzaW5nIHR3byBkaWZmZXJlbnQgdGhpbmdzLCBmbG93IHJ1bGUNCj4gc3Bl Y2lmaWNhdGlvbnMgYW5kIGZsb3cgcnVsZSBvYmplY3RzLiBMZXQgbWUgc3VtIGl0IHVwOg0KPiAN Cj4gLSBGbG93IHJ1bGUgc3BlY2lmaWNhdGlvbnMgYXJlIHRoZSBwYXR0ZXJucy9hY3Rpb25zIGNv bWJpbmF0aW9ucyBwcm92aWRlZCBieQ0KPiAgIGFwcGxpY2F0aW9ucyB0byBydGVfZmxvd19jcmVh dGUoKS4gQXBwbGljYXRpb25zIGNhbiBzdG9yZSB0aG9zZSBhcyBuZWVkZWQNCj4gICBhbmQgb3Jn YW5pemUgdGhlbSBhcyB0aGV5IHdpc2ggKGhhc2gsIHRyZWUsIGxpc3QpLiBOZWl0aGVyIFBNRHMg bm9yIFJURQ0KPiAgIHdpbGwgZG8gaXQgZm9yIHRoZW0uDQo+IA0KPiAtIEZsb3cgcnVsZSBvYmpl Y3RzIChzdHJ1Y3QgcnRlX2Zsb3cgKikgYXJlIGdlbmVyYXRlZCB3aGVuIGEgZmxvdyBydWxlIGlz DQo+ICAgY3JlYXRlZC4gQXBwbGljYXRpb25zIG11c3Qga2VlcCB0aGVzZSBhcm91bmQgaWYgdGhl eSB3YW50IHRvIG1hbmlwdWxhdGUNCj4gICB0aGVtIGxhdGVyIChpLmUuIGRlc3Ryb3kgb3IgcXVl cnkgZXhpc3RpbmcgcnVsZXMpLg0KVGhhbmtzIGZvciB0aGlzIGNsYXJpZmljYXRpb24uIFNvIHRo ZSBzcGVjaWZpY2F0aW9ucyBjYW4gYmUgZGlmZmVyZW50IHdpdGggb2JqZWN0cywgcmlnaHQ/IFRo ZSBzcGVjaWZpY2F0aW9ucyBhcmUgd2hhdCB0aGUgQVBQIHdhbnRzLCB0aGUgb2JqZWN0cyBhcmUg d2hhdCB0aGUgQVBQIHJlYWxseSBnZXRzLiBBcyBydGVfZmxvd19jcmVhdGUgY2FuIGZhaWwuIFJp Z2h0Pw0KDQo+IA0KPiBUaGVuIFBNRHMgKm1heSogbmVlZCB0byBrZWVwIGFuZCBhcnJhbmdlIGZs b3cgcnVsZSBvYmplY3RzIGludGVybmFsbHkgZm9yDQo+IG1hbmFnZW1lbnQgcHVycG9zZXMuIENv dWxkIGJlIGJlY2F1c2UgSFcgcmVxdWlyZXMgaXQsIGRldGVjdGluZyBjb25mbGljdGluZw0KPiBy dWxlcywgbWFuYWdpbmcgcHJpb3JpdGllcyBhbmQgc28gb24uIFBvc3NpYmxlIHJlYXNvbnMgYXJl IG5vdCBkZXNjcmliZWQgaW4gdGhpcw0KPiBBUEkgYmVjYXVzZSB0aGVzZSBhcmUgdGhvdWdodCBh cyBQTUQtc3BlY2lmaWMgbmVlZHMuDQpHb3QgaXQuDQoNCj4gDQo+ID4gPiA+IFdoZW4gdGhlIHBv cnQgaXMgc3RvcHBlZCBhbmQgcmVzdGFydGVkLCBydGUgY2FuIHJlY29uZmlndXJlIHRoZQ0KPiA+ ID4gPiBydWxlcy4gSXMgdGhlDQo+ID4gPiBjb25jZXJuIHRoYXQgUE1EIG1heSBhZGp1c3QgdGhl IHNlcXVlbmNlIG9mIHRoZSBydWxlcyBhY2NvcmRpbmcgdG8NCj4gPiA+IHRoZSBwcmlvcml0eSwg c28gZXZlcnkgTklDIGhhcyBhIGRpZmZlcmVudCBsaXN0IG9mIHJ1bGVzPyBCdXQgUE1EDQo+ID4g PiBjYW4gYWRqdXN0IHRoZW0gYWdhaW4gd2hlbiBydGUgcmVjb25maWd1cmluZyB0aGUgcnVsZXMu DQo+ID4gPg0KPiA+ID4gV2hhdCBhYm91dCBQTURzIGFibGUgdG8gc3RvcCBhbmQgcmVzdGFydCBw b3J0cyB3aXRob3V0IGRlc3Ryb3lpbmcNCj4gPiA+IHRoZWlyIG93biBmbG93IHJ1bGVzPyBJZiB3 ZSBhc3N1bWUgZmxvdyBydWxlcyBtdXN0IGJlIGRlc3Ryb3llZCB3aGVuDQo+ID4gPiBzdG9wcGlu ZyBhIHBvcnQsIHRoZXNlIFBNRHMgYXJlIG5lZWRsZXNzbHkgcGVuYWxpemVkIHdpdGggc2xvd2Vy DQo+ID4gPiBzdG9wL3N0YXJ0IGN5Y2xlcy4gVGhpbmsgYWJvdXQgaXQgYXNzdW1pbmcgdGhvdXNh bmRzIG9mIGZsb3cgcnVsZXMuDQo+ID4gSSBiZWxpZXZlIHRoZSBydWxlcyBtYWludGFpbmVkIGJ5 IFNXIHNob3VsZCBub3QgYmUgZGVzdHJveWVkLCBiZWNhdXNlIHRoZXkncmUNCj4gdXNlZCB0byBi ZSByZS1wcm9ncmFtZWQgd2hlbiB0aGUgZGV2aWNlIHN0YXJ0cyBhZ2Fpbi4NCj4gDQo+IERvIHdl IGFncmVlIHRoYXQgYXBwbGljYXRpb25zIHNob3VsZCBub3QgY2FyZT8gRmxvdyBydWxlcyBjb25m aWd1cmVkIGJlZm9yZQ0KPiBzdG9wcGluZyBhIHBvcnQgbXVzdCBzdGlsbCBiZSB0aGVyZSBhZnRl ciByZXN0YXJ0aW5nIGl0Lg0KWWVzLCBhZ3JlZS4NCg0KPiANCj4gV2hhdCB3ZSBzZWVtIHRvIG5v dCBhZ3JlZSBhYm91dCBpcyB0aGF0IHlvdSB0aGluayBSVEUgc2hvdWxkIGJlIHJlc3BvbnNpYmxl DQo+IGZvciByZXN0b3JpbmcgZmxvdyBydWxlcyBvZiBkZXZpY2VzIHRoYXQgbG9zZSB0aGVtIHdo ZW4gc3RvcHBlZC4gSSB0aGluayBkb2luZyBzbw0KPiBpcyB1bmZhaXIgdG8gZGV2aWNlcyBmb3Ig d2hpY2ggaXQgaXMgbm90IHRoZSBjYXNlIGFuZCBub3QgcmVhbGx5IG5pY2UgdG8gYXBwbGljYXRp b25zLA0KPiBzbyBteSBvcGluaW9uIGlzIHRoYXQgdGhlIFBNRCBpcyByZXNwb25zaWJsZSBmb3Ig cmVzdG9yaW5nIGZsb3cgcnVsZXMgaG93ZXZlciBpdA0KPiB3YW50cy4gSXQgaXMgZnJlZSB0byB1 c2UgUlRFIGhlbHBlcnMgdG8ga2VlcCB0aGVpciB0cmFjaywgYXMgbG9uZyBhcyBpdCdzIGFsbCBt YW5hZ2VkDQo+IGludGVybmFsbHkuDQpXaGF0IEkgdGhpbmsgaXMgUlRFIGNhbiBzdG9yZSB0aGUg ZmxvdyBydWxlcyBhbmQgcmVjcmVhdGUgdGhlbSBhZnRlciByZXN0YXJ0aW5nLCBpbiB0aGUgZnVu Y3Rpb24gbGlrZSBydGVfZGV2X3N0YXJ0LCBzbyBBUFAga25vd3Mgbm90aGluZyBhYm91dCBpdC4g QnV0IGFjY29yZGluZyB0byB0aGUgZGlzY3Vzc2luZyBhYm92ZSwgSSB0aGluayB0aGUgZGVzaWdu IGRvZXNuJ3Qgc3VwcG9ydCBpdCwgcmlnaHQ/DQpSVEUgZG9lc24ndCBzdG9yZSB0aGUgZmxvdyBy dWxlcyBvYmplY3RzIGFuZCBldmVudCBpdCBzdG9yZXMgdGhlbSwgdGhlcmUncyBubyB3YXkgZGVz aWduZWQgdG8gcmUtcHJvZ3JhbSB0aGUgb2JqZWN0cy4gQW5kIGFsc28gY29uc2lkZXJpbmcgc29t ZSBIVyBkb2Vzbid0IG5lZWQgdG8gYmUgcmUtcHJvZ3JhbWVkLiBJIHRoaW5rIGl0J3MgT0sgIHRv IGxldCBQTUQgbWFpbnRhaW4gdGhlIHJ1bGVzIGFzIHRoZSByZS1wcm9ncmFtaW5nIGlzIGEgTklD IHNwZWNpZmljIHJlcXVpcmVtZW50Lg0KDQo+IA0KPiA+ID4gVGh1cyBmcm9tIGFuIGFwcGxpY2F0 aW9uIHBvaW50IG9mIHZpZXcsIHdoYXRldmVyIGhhcHBlbnMgd2hlbg0KPiA+ID4gc3RvcHBpbmcg YW5kIHJlc3RhcnRpbmcgYSBwb3J0IHNob3VsZCBub3QgbWF0dGVyLiBJZiBhIGZsb3cgcnVsZSB3 YXMNCj4gPiA+IHByZXNlbnQgYmVmb3JlLCBpdCBtdXN0IHN0aWxsIGJlIHByZXNlbnQgYWZ0ZXJ3 YXJkcy4gSWYgdGhlIFBNRCBoYWQNCj4gPiA+IHRvIGRlc3Ryb3kgZmxvdyBydWxlcyBhbmQgcmUt Y3JlYXRlIHRoZW0sIGl0IGRvZXMgbm90IGFjdHVhbGx5IG1hdHRlciBpZiB0aGV5DQo+IGRpZmZl ciBzbGlnaHRseSBhdCB0aGUgSFcgbGV2ZWwsIGFzIGxvbmcgYXM6DQo+ID4gPg0KPiA+ID4gLSBF eGlzdGluZyBvcGFxdWUgZmxvdyBydWxlIHBvaW50ZXJzIChydGVfZmxvdykgYXJlIHN0aWxsIHZh bGlkIHRvIHRoZSBQTUQNCj4gPiA+ICAgYW5kIHJlZmVyIHRvIHRoZSBzYW1lIHJ1bGVzLg0KPiA+ ID4NCj4gPiA+IC0gVGhlIG92ZXJhbGwgYmVoYXZpb3Igb2YgYWxsIHJ1bGVzIGlzIHRoZSBzYW1l Lg0KPiA+ID4NCj4gPiA+IFRoZSBsaXN0IG9mIHJ1bGVzIHlvdSB0aGluayBvZiAocGF0dGVybnMg LyBhY3Rpb25zKSBpcyBtYWludGFpbmVkIGJ5DQo+ID4gPiBhcHBsaWNhdGlvbnMgKG5vdCBSVEUp LCBhbmQgb25seSBpZiB0aGV5IG5lZWQgdGhlbS4gUlRFIHdvdWxkIG5lZWRsZXNzbHkNCj4gZHVw bGljYXRlIHRoaXMuDQo+ID4gQXMgc2FpZCBiZWZvcmUsIG5lZWQgbW9yZSBkZXRhaWxzIHRvIHVu ZGVyc3RhbmQgdGhpcy4gTWF5YmUgYW4gZXhhbXBsZQ0KPiA+IGlzIGJldHRlciA6KQ0KPiANCj4g VGhlIGdlbmVyaWMgZm9ybWF0IGJvdGggUlRFIGFuZCBhcHBsaWNhdGlvbnMgbWlnaHQgdW5kZXJz dGFuZCBpcyB0aGUgb25lDQo+IGRlc2NyaWJlZCBpbiB0aGlzIEFQSSAoc3RydWN0IHJ0ZV9mbG93 X3BhdHRlcm4gYW5kIHN0cnVjdCBydGVfZmxvd19hY3Rpb25zKS4NCj4gDQo+IElmIHdlIHdhbnRl ZCBSVEUgdG8gbWFpbnRhaW4gc29tZSBzb3J0IG9mIHBlci1wb3J0IHN0YXRlIGZvciBmbG93IHJ1 bGUNCj4gc3BlY2lmaWNhdGlvbnMsIGl0IHdvdWxkIGhhdmUgdG8gYmUgYSBjb3B5IG9mIHRoZXNl IHN0cnVjdHVyZXMgYXJyYW5nZWQgc29tZWhvdw0KPiAobGlzdCBvciBzb21ldGhpbmcgZWxzZSku DQo+IA0KPiBJZiB3ZSBjb25zaWRlciB0aGF0IFBNRHMgbmVlZCB0byBrZWVwIGEgY29udGV4dCBv YmplY3QgYXNzb2NpYXRlZCB0byBhIGZsb3cNCj4gcnVsZSAodGhlIG9wYXF1ZSBzdHJ1Y3QgcnRl X2Zsb3cgKiksIHRoZW4gUlRFIHdvdWxkIG1vc3QgbGlrZWx5IGhhdmUgdG8gc3RvcmUgaXQNCj4g YWxvbmcgd2l0aCB0aGUgZmxvdyBzcGVjaWZpY2F0aW9uLg0KPiANCj4gU3VjaCBhIGxpc3QgbWF5 IG5vdCBiZSB1c2VmdWwgdG8gYXBwbGljYXRpb25zIChsaXN0IGxvb2t1cHMgdGFrZSB0aW1lKSwg c28gdGhleQ0KPiB3b3VsZCBpbXBsZW1lbnQgdGhlaXIgb3duIHJlZHVuZGFudCBtZXRob2QuIFRo ZXkgbWlnaHQgYWxzbyByZXF1aXJlIGV4dHJhDQo+IHJvb20gdG8gYXR0YWNoIHNvbWUgYXBwbGlj YXRpb24gY29udGV4dCB0byBmbG93IHJ1bGVzLiBBIGdlbmVyaWMgbGlzdCBjYW5ub3QgcGxhbg0K PiBmb3IgaXQuDQo+IA0KPiBBcHBsaWNhdGlvbnMga25vdyB3aGF0IHRoZXkgd2FudCB0byBkbyB3 aXRoIGZsb3cgcnVsZXMgYW5kIGFyZSByZXNwb25zaWJsZSBmb3INCj4gbWFuYWdpbmcgdGhlbSBl ZmZpY2llbnRseSB3aXRoIFJURSBvdXQgb2YgdGhlIHdheS4NCj4gDQo+IEknbSBub3Qgc3VyZSBp ZiB0aGlzIGFuc3dlcmVkIHlvdXIgcXVlc3Rpb24sIGlmIG5vdCwgcGxlYXNlIGRlc2NyaWJlIGEg c2NlbmFyaW8NCj4gd2hlcmUgYSBSVEUtbWFuYWdlZCBsaXN0IG9mIGZsb3cgcnVsZXMgd291bGQg YmUgbWFuZGF0b3J5Lg0KR290IHlvdXIgcG9pbnQgYW5kIGFncmVlIDopDQoNCj4gDQo+IC0tDQo+ IEFkcmllbiBNYXphcmd1aWwNCj4gNldJTkQNCg==