From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id B86844689F; Thu, 12 Jun 2025 13:39:04 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 90AE0402ED; Thu, 12 Jun 2025 13:39:04 +0200 (CEST) Received: from frasgout.his.huawei.com (frasgout.his.huawei.com [185.176.79.56]) by mails.dpdk.org (Postfix) with ESMTP id A4342402ED for ; Thu, 12 Jun 2025 13:39:02 +0200 (CEST) Received: from mail.maildlp.com (unknown [172.18.186.216]) by frasgout.his.huawei.com (SkyGuard) with ESMTP id 4bJ0qk62zHz6HJmH; Thu, 12 Jun 2025 19:37:06 +0800 (CST) Received: from frapeml500007.china.huawei.com (unknown [7.182.85.172]) by mail.maildlp.com (Postfix) with ESMTPS id 22C3214020C; Thu, 12 Jun 2025 19:39:02 +0800 (CST) Received: from frapeml500007.china.huawei.com (7.182.85.172) by frapeml500007.china.huawei.com (7.182.85.172) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.39; Thu, 12 Jun 2025 13:39:01 +0200 Received: from frapeml500007.china.huawei.com ([7.182.85.172]) by frapeml500007.china.huawei.com ([7.182.85.172]) with mapi id 15.01.2507.039; Thu, 12 Jun 2025 13:39:01 +0200 From: Konstantin Ananyev To: Wathsala Wathawana Vithanage , "dev@dpdk.org" CC: Honnappa Nagarahalli , "jerinj@marvell.com" , "hemant.agrawal@nxp.com" , "drc@linux.ibm.com" , nd , nd , nd Subject: RE: [PATCH v1 3/4] ring: fix potential sync issue between head and tail values Thread-Topic: [PATCH v1 3/4] ring: fix potential sync issue between head and tail values Thread-Index: AQHbykGqeBGQXW5y3EOG63fjgC8zzLPe8sVwgAXilICAAjNA0IAADQnwgAi0DQCAAeaRMIABm4mwgAw67mA= Date: Thu, 12 Jun 2025 11:39:01 +0000 Message-ID: <471687421e0745b3af1c8a232558a1d5@huawei.com> References: <20250521111432.207936-1-konstantin.ananyev@huawei.com> <20250521111432.207936-4-konstantin.ananyev@huawei.com> <62ba814dc50a4ffd9bcfe8f4d4073cd9@huawei.com> <0832db1027614c918301e48010d92e4a@huawei.com> In-Reply-To: Accept-Language: en-GB, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.81.192.195] Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org DQoNCkhpIFdhdGhzYWxhLA0KPiANCj4gSSBoYXZlIHNvbWUgdXBkYXRlcyB0byB0aGUgcHJldmlv dXMgY2xhaW1zIEkgaGF2ZSBtYWRlLg0KDQpUaGFua3MgZm9yIHRoZSB1cGRhdGUsIHVuZm9ydHVu YXRlbHkgSSBkb24ndCBoYXZlIHRpbWUgdG8gbG9vayBhdCBpdCBwcm9wZXJseSByaWdodCBub3cu DQpXaWxsIHRyeSB0byByZXR1cm4gYmFjayB0byBpdCBpdCBpbiAzLTQgd2Vla3MuDQpKdXN0IG9u ZSBxdWVzdGlvbiBmb3Igbm93LCBzZWUgYmVsb3cuIA0KDQo+IA0KPiA+ID4gPiA+IFRoYXQgY2Fu bm90IGhhcHBlbiBpbiBBcm0gdjgvdjkgYmVjYXVzZSB0YWlsIHVwZGF0ZSBpcyBhDQo+ID4gPiA+ ID4gc3RvcmUtcmVsZWFzZSBhbmQgYSBsb2FkLWFjcXVpcmUgdGhhdCBwcm9ncmFtIG9yZGVyIGZv bGxvd3MgaXQgY2FuDQo+ID4gPiA+ID4gb25seSBiZSBpc3N1ZWQgYWZ0ZXIgYWxsIHRoZSBjb3Jl cyBoYXZlIG9ic2VydmVkIHRoZSBzdG9yZS1yZWxlYXNlDQo+ID4gPiA+ID4gKHRoZXJlIGlzIGEg c3luY2hyb25pemF0aW9uIHdpdGggcmVsYXRpb25zaGlwIHRvIHN0b3JlLXJlbGVhc2UgYW5kDQo+ ID4gPiA+ID4gbG9hZC1hY3F1aXJlIHBhaXJzKS4NCj4gPiA+ID4gPg0KPiA+ID4gPiA+IEluIHRo ZSBleGFtcGxlIHlvdSBoYXZlIHByb3ZpZGVkIFRocmVhZCAjMSdzIHN0b3JlKCZwcm9kLnRhaWws IDIsDQo+ID4gPiA+ID4gcmVsZWFzZSkgaXMgb2JzZXJ2ZWQgYnkgYWxsIHRoZSBjb3JlcyBpbiB0 aGUgc3lzdGVtIGJ5IHRoZSB0aW1lIHNhbWUNCj4gPiA+ID4gPiB0aHJlYWQgcGVyZm9ybXMgbG9h ZCgmcHJvZC50YWlsLCBhY3F1aXJlKSBhdCBUMi4gQXMgcGVyIEFybSB2OC92OQ0KPiA+ID4gPiA+ IG1lbW9yeSBtb2RlbCBUaHJlYWQgIzIgc2hvdWxkIG9ic2VydmUNCj4gPiA+ID4gPiBwcm9kLnRh aWw9MiAobm90IHByb2QudGFpbD0xKS4NCj4gPiA+ID4gPg0KPiA+ID4gPiA+IEFybSBBcmNoaXRl Y3R1cmUgUmVmZXJlbmNlIE1hbnVhbCBzZWN0aW9uIEIyLjEwLjExIHN0YXRlc+KApg0KPiA+ID4g PiA+DQo+ID4gPiA+ID4gIldoZXJlIGEgTG9hZC1BY3F1aXJlIGFwcGVhcnMgaW4gcHJvZ3JhbSBv cmRlciBhZnRlciBhDQo+ID4gPiA+ID4gU3RvcmUtUmVsZWFzZSwgdGhlIG1lbW9yeSBhY2Nlc3Mg Z2VuZXJhdGVkIGJ5IHRoZSBTdG9yZS1SZWxlYXNlDQo+ID4gPiA+ID4gaW5zdHJ1Y3Rpb24gaXMg b2JzZXJ2ZWQgYnkgZWFjaCBQRSB0byB0aGUgZXh0ZW50IHRoYXQgUEUgaXMgcmVxdWlyZWQNCj4g PiA+ID4gPiB0byBvYnNlcnZlIHRoZSBhY2Nlc3MgY29oZXJlbnRseSwgYmVmb3JlIHRoZSBtZW1v cnkgYWNjZXNzIGdlbmVyYXRlZA0KPiA+ID4gPiA+IGJ5IHRoZSBMb2FkLUFjcXVpcmUgaW5zdHJ1 Y3Rpb24gaXMgb2JzZXJ2ZWQgYnkgdGhhdCBQRSwgdG8gdGhlDQo+ID4gPiA+ID4gZXh0ZW50IHRo YXQgdGhlIFBFIGlzIHJlcXVpcmVkIHRvIG9ic2VydmUgdGhlIGFjY2VzcyBjb2hlcmVudGx5LiIN Cj4gPiA+DQo+ID4gPiBJbnRlcmVzdGluZywgdGhhbmtzIGZvciBwb2ludGluZyB0byB0aGF0Lg0K PiA+ID4gSW5kZWVkLCBhY2NvcmRpbmcgdG8gdGhlIGRvY3MsIGFjcXVpcmUvcmVsZWFzZSBvcGVy YXRpb25zIHVzZSBhIHNlcXVlbnRpYWxseQ0KPiA+ID4gY29uc2lzdGVudCBtb2RlbC4NCj4gPiA+ IEJ1dCB3ZSBub3QgYWx3YXlzIGdldHRpbmcgcHVyZSBMREFSIGluc3RydWN0aW9uIGhlcmUsIGl0 IGRlcGVuZHMgb24gY29tcGlsZXINCj4gPiA+IG1hcmNoL21jcHUgIGZsYWdzLg0KPiA+ID4gRm9y IHNvbWUgSFcgYXJjaCBnY2MgKGFuZCBjbGFuZykgZ2VuZXJhdGUgTERBUiBpbnN0cnVjdGlvbiwg Zm9yIG90aGVycyAtDQo+ID4gPiBMRFBBUFIuDQo+ID4gPiBBbmQgYWNjb3JkaW5nIHRvIHRoZSBk b2M6DQo+ID4gPiBodHRwczovL2RldmVsb3Blci5hcm0uY29tL2RvY3VtZW50YXRpb24vMTAyMzM2 LzAxMDAvTG9hZC1BY3F1aXJlLWFuZC0NCj4gPiA+IFN0b3JlLVJlbGVhc2UtaW5zdHJ1Y3Rpb25z DQo+ID4gPiBmb3IgTG9hZC1BY3F1aXJlUEMgIHRoZSByZXF1aXJlbWVudCB0aGF0IExvYWQtQWNx dWlyZXMgYXJlIG9ic2VydmVkIGluDQo+ID4gb3JkZXINCj4gPiA+IHdpdGggcHJlY2VkaW5nIFN0 b3JlLVJlbGVhc2VzIGlzIGRyb3BwZWQuDQo+ID4gPiBUbyBiZSBtb3JlIHNwZWNpZmljIGhlcmUs IG9uIG15IGJveDoNCj4gPiA+IDEpIG1lc29uIHdpdGggLURtYWNoaW5lPWRlZmF1bHQgKGdjYyBv cHRpb25zOiAiLW1hcmNoPWFybXY4LWErY3JjIikNCj4gPiA+IGdlbmVyYXRlcyBjb2RlIHdpdGgg TERBUiBpbnN0cnVjdGlvbiBodHRwczovL2dvZGJvbHQub3JnL3ovNWNFc2NkeHJiDQo+ID4gPiAy KSBtZXNvbiB3aXRoIC1EbWFjaGluZT1uYXRpdmUgKGdjYyBvcHRpb25zOiAiIC1tY3B1PW5lb3Zl cnNlLW4xIikNCj4gPiBnZW5lcmF0ZXMNCj4gPiA+IGNvZGUgd2l0aCBMREFQUiBpbnN0cnVjdGlv biBodHRwczovL2dvZGJvbHQub3JnL3ovOEtqY3ZZeGNoDQo+ID4gPg0KPiA+ID4gc29yaW5nX3N0 cmVzc190ZXN0IGZvciAxKSAoTERBUikgcGFzc2VzDQo+ID4gPiBzb3Jpbmdfc3RyZXNzX3Rlc3Qg Zm9yIDIpIChMREFQUikgZmFpbHMgd2l0aCBzeW1wdG9tcyBJIGRlc2NyaWJlZCBlYXJsaWVyDQo+ ID4gPg0KPiA+DQo+ID4gVGhpcyBtYWtlcyBzZW5zZSwgTG9hZC1BY3F1aXJlUEMgcGFpcmVkIHdp dGggU3RvcmUtUmVsZWFzZSBnaXZlcyB5b3UNCj4gPiBSZWxlYXNlLUNvbnNpc3RlbmN5LXByb2dy YW0tY29uc2lzdGVuY3kgKFJDcGMpIHdoZXJlYXMgTG9hZC1BY3F1aXJlDQo+ID4gcGFpcmVkIHdp dGggYSBTdG9yZS1SZWxlYXNlIGdpdmVzIHlvdQ0KPiA+IFJlbGVhc2UtQ29uc2lzdGVuY3ktc2Vx dWVudGlhbC1jb25zaXN0ZW5jeSAoUkNzYykgYSBzdHJvbmdlciBjb25zaXN0ZW5jeQ0KPiA+IG1v ZGVsIGNvbXBhcmVkIHRvIFJDcGMuDQo+ID4gQXMgeW91IGhhdmUgcG9pbnRlZCBvdXQgdGhpcyBp cyB3aGF0IGNhdXNlcyB0aGUgaXNzdWUgeW91IGhhdmUgb2JzZXJ2ZWQuDQo+ID4gTERBUFIgb24g dGhlIHNhbWUgYWRkcmVzcyBvbiB0aGUgc2FtZSBjb3JlIHRoYXQgcHJvZ3JhbSBvcmRlciBmb2xs b3dzDQo+ID4gU1RMUiBkb2Vzbid0IGNhdXNlIG90aGVyIGNvcmVzIHRvIG9ic2VydmUgdGhlIHZh bHVlIHdyaXR0ZW4gYnkgU1RMUi4NCj4gDQo+IEl0IHR1cm5lZCB0aGF0IExEQVBSIHN0aWxsIG1h aW50YWlucyB0aGUgc3luY2hyb25pemVzIHdpdGggcmVsYXRpb25zaGlwIHdpdGggU1RMUg0KPiBv biB0aGUgc2FtZSBhZGRyZXNzLiBJdCdzIGp1c3QgdGhhdCBpdCBpbnRlcmxlYXZlcyB1bnJlbGF0 ZWQgc3luY2hyb25pemF0aW9uIHdpdGgNCj4gKGNyaXRpY2FsIHNlY3Rpb25zKSB0aGF0IG9wZXJh dGUgb24gaW5kZXBlbmRlbnQgbWVtb3J5IGFkZHJlc3Nlcy4NCg0KSXMgaXQgZG9jdW1lbnRlZCBz b21ld2hlcmUgaW5zaWRlIEFSTSwgZG9jcz8NCkFub3RoZXIgcXVlc3Rpb24sIHdoYXQgaXMgY29u c2lkZXJlZCBhcyAnaW5kZXBlbmRlbnQgbWVtb3J5IGFkZHJlc3Nlcyc/DQpOb3QgZXF1YWwgb25l cy9iZWxvbmcgdG8gZGlmZmVyZW50IGNhY2hlLWxpbmVzL3NvbWV0aGluZyBlbHNlPw0KDQoNCj4g T24gdGhlIG90aGVyIGhhbmQsIFNUTFIgYW5kIExEQVIgcGFpciB3b3VsZCBub3QgYWxsb3cgaW50 ZXJsZWF2aW5nIG9mDQo+IEluZGVwZW5kZW50IGNyaXRpY2FsIHNlY3Rpb25zLg0KPiANCj4gPiBI b3dldmVyLCBjb250cmFyeSB0byB0aGlzIGJlaGF2aW9yIEMxMSBleHBlY3RzIF9fQVRPTUlDX1JF TEVBU0UgYW5kDQo+ID4gX19BVE9NSUNfQUNRVUlSRSBwYWlycyB0byBiZSBzZXF1ZW50aWFsbHkg Y29uc2lzdGVudCB3aGljaCB0aGUgcmluZyByZWxpZXMNCj4gPiBvbi4gVGh1cywgX19BVE9NSUNf QUNRVUlSRSBjYW5ub3QgZW1pdCBhbiBMREFQUiBpZiBwYWlyZWQgd2l0aCBhbg0KPiA+IF9fQVRP TUlDX1JFTEVBU0UuDQo+ID4NCj4gDQo+IER1ZSB0byBhYm92ZSByZWFzb24gX19BVE9NSUNfUkVM RUFTRSBhbmQgX19BVE9NSUNfQUNRVUlSRSBwYWlycw0KPiBwcm92aWRlcyBzeW5jaHJvbml6YXRp b24td2l0aCByZWxhdGlvbnNoaXAgd2l0aCBMREFQUiBhcyByZXF1aXJlZCBieQ0KPiBDMTEuDQo+ IF9fQVRPTUlDX1NFUV9DU1QgdXNlcyBMREFSIGFzIGl0IHJlcXVpcmVzIG9ic2VydmluZyBvZiBh bGwgdGhlIHJlbGVhc2VzDQo+IGhhcHBlbmVkIGJlZm9yZSBhY3F1aXJlIChpbmNsdWRpbmcgcmVs ZWFzZXMgb24gb3RoZXIgYWRkcmVzc2VzKS4NCj4gDQo+IA0KPiA+IFRvIGNvcnJlY3QgdGhpcyBi ZWhhdmlvciwgSSBzdWdnZXN0IGNoYW5naW5nIGJvdGggdGhlIHRhaWwgdXBkYXRlIHRvDQo+ID4g c3RvcmUoJnByb2QudGFpbCwgMiwgcmVsZWFzZSkgdG8gc3RvcmUoJnByb2QudGFpbCwgMiwgY2Vx X2NzdCkgYW5kDQo+ID4gbG9hZCgmcHJvZC50YWlsLCBhY3F1aXJlKSB0byBkKCZwcm9kLnRhaWws IGNlcV9jc3QpOw0KPiA+IFRoaXMgd291bGQgcmVzdWx0IGluIGFuIFNUTFIgYW5kIExEQVIgKGlu c3RlYWQgb2YgYW4gTERBUFIpLCBzbw0KPiA+IGVzc2VudGlhbGx5LCB3ZSBhcmUgZ29pbmcgYmFj ayB0byB0aGUgZGVzaXJlZCBvbGQgYmVoYXZpb3IuDQo+ID4NCj4gDQo+IF9fQVRPTUlDX1JFTEVB U0UgYW5kIF9fQVRPTUlDX0FDUVVJUkUgaXMgc3VmZmljaWVudCBmb3IgRFBESw0KPiByaW5nIGFz IHJlbGVhc2UgYW5kIGFjcXVpcmUgaGFwcGVucyBvbiB0aGUgc2FtZSBhZGRyZXNzLiBTbywgbm8N Cj4gY2hhbmdlIGlzIHJlcXVpcmVkIGluIHJ0ZV9yaW5nIChTVExSIGFuZCBMREFQUikNCj4gDQo+ IEJ1dCBzb3Jpbmcgc2VlbXMgdG8gcmVseSBvbiBzZXF1ZW50aWFsbHktY29uc2lzdGVudCBvcmRl cmluZyByYXRoZXIgdGhhbg0KPiBwdXJlIHJlbGVhc2UtYWNxdWlyZSBvcmRlcmluZyBhcyB3aXRo IHJ0ZV9yaW5nLiBTbywgSSB3b3VsZCByYXRoZXIgY2hhbmdlDQo+IHNvcmluZyBmcm9tIF9fQVRP TUlDX1JFTEVBU0UvX19BVE9NSUNfQUNRVUlSRSB0byBfX0FUT01JQ19TRVFfQ1NULg0KPiANCj4g DQo+ID4gSSBoYXZlIHJhaXNlZCB0aGlzIGlzc3VlIHdpdGggdGhlIGNvbXBpbGVyIGZvbGtzIHRv IGdldCBzb21lIGNsYXJpdHkgb24NCj4gPiBhcHBhcmVudCBjb25mbGljdCB3aXRoIHRoZSBDMTEg c3BlYy4NCj4gPg0KPiANCj4gU2VlIGFib3ZlLg0KPiANCj4gVGhhbmtzLg0KPiANCj4gLS13YXRo c2FsYQ0KPiANCj4gDQo+ID4gQWRkaXRpb25hbGx5LCB3aGVuIHlvdSBzcGVjaWZ5ICIgLW1jcHU9 bmVvdmVyc2UtbjEiIEdDQyBrbm93cyB0aGF0DQo+ID4gTmVvdmVyc2UtbjEgQ1BVcyBoYXZlIEZF QVRfTFJDUEMgd2hpY2ggbWVhbnMgaXQgaW1wbGVtZW50cyBMREFQUg0KPiA+IEluc3RydWN0aW9u LiBCdXQgb24gdGhlIHNhbWUgcGxhdGZvcm0gd2hlbiB5b3Ugb25seSBzcGVjaWZ5DQo+ID4gIi1t YXJjaD1hcm12OC1hK2NyYyIgR0NDIGRvZXNuJ3Qga25vdyB0aGF0IExEQVBSIGlzIHN1cHBvcnRl ZCB1bmxlc3MNCj4gPiB5b3UgYWxzbyBhcHBlbmQgK3JjcGMgdG8gdGhhdCBzdHJpbmcsIHNvIHlv dSBlbmQgdXAgd2l0aCBMREFSLg0KPiA+IChXaHkgd2UgbWFkZSB0aGUgcmVjZW50IGJ1aWxkIGNo YW5nZXMpDQo+ID4NCj4gPiBUaGFua3MNCj4gPg0KPiA+IC0td2F0aHNhbGENCj4gPg0KPiA+ID4g Pg0KPiA+ID4gPiBJbiBzb3JpbmcgaXMgdGhpcyB0aGUgcGFpciB0aGF0IHVwZGF0ZSB0aGUgdGFp bCBhbmQgbW92ZSBoZWFkPw0KPiA+ID4gPg0KPiA+ID4gPiBfX3J0ZV9zb3JpbmdfdXBkYXRlX3Rh aWw6DQo+ID4gPiA+IAlfX3J0ZV9yaW5nX3VwZGF0ZV90YWlsKCZyaHQtPmh0LCBoZWFkLCBuZXh0 LCBzdCwgZW5xKTsNCj4gPiA+DQo+ID4gPiBUaGF0IGZ1bmN0aW9uIGlzIHVzZWQgdG8gdXBkYXRl IHByb2QudGFpbCBhbmQgY29ucy50YWlsDQo+ID4gPg0KPiA+ID4gPiBfX3J0ZV9zb3JpbmdfbW92 ZV9jb25zX2hlYWQ6DQo+ID4gPiA+IAkgX19ydGVfcmluZ19oZWFkdGFpbF9tb3ZlX2hlYWQoJnIt PmNvbnMuaHQsICAmci0+c3RhZ2Vbc3RhZ2VdLmh0LCAwLA0KPiA+ID4gPiAuLi4pOw0KPiA+ID4g Pg0KPiA+ID4NCj4gPiA+IF9fcnRlX3JpbmdfaGVhZHRhaWxfbW92ZV9oZWFkIGlzIGludm9rZWQg dG8gdXBkYXRlIHByb2QuaGVhZCAoYnkNCj4gPiA+IF9fcnRlX3NvcmluZ19tb3ZlX3Byb2RfaGVh ZCkgIGFuZCBjb25zLmhlYWQgKGJ5DQo+ID4gPiBfX3J0ZV9zb3JpbmdfbW92ZV9jb25zX2hlYWQp Lg0KPiA+ID4NCj4gPiA+ID4gSWYgc28sICZyaHQtPmh0IGFuZCAmci0+c3RhZ2Vbc3RhZ2VdLmh0 IGFyZSB0aGUgc2FtZSBhZGRyZXNzPw0KPiA+ID4NCj4gPiA+IE5vLg0KPiA+ID4gSW4gY29udmVu dGlvbmFsIHJpbmcgd2UgaGF2ZSBqdXN0IHR3byBzdGFnZXM6ICdwcm9kJyAgYW5kICdjb25zJy4N Cj4gPiA+IFNvIG1vdmluZyBwcm9kLmhlYWQgZGVwZW5kcyBvbiBjb25zLnRhaWwgYW5kIHZpc2Et dmVyc2E6IG1vdmluZyBjb25zLmhlYWQNCj4gPiA+IGRlcGVuZHMgb24gcHJvZC50YWlsLg0KPiA+ ID4gV2l0aCBzb3Jpbmcgd2UgaGF2ZSBtdWx0aXBsZSAoTikgZXh0cmEgc3RhZ2VzIGluIGJldHdl ZW4uDQo+ID4gPiBTbyB0aGUgZGVwZW5kZW5jeSBjaGFpbiBpcyBhIGJpdCBsb25nZXI6DQo+ID4g PiBwcm9kLmhlYWQgZGVwZW5kcyBvbiBjb25zLnRhaWwNCj4gPiA+IHN0YWdlWzBdLmhlYWQgZGVw ZW5kcyBvbiBwcm9kLnRhaWwsDQo+ID4gPiBzdGFnZVsxXS5oZWFkIGRlcGVuZHMgb24gc3RhZ2Vb MF0udGFpbA0KPiA+ID4gLi4uDQo+ID4gPiBzdGFnZXtOLTFdLmhlYWQgZGVwZW5kcyBvbiBzdGFn ZVtOLTJdLnRhaWwgY29ucy5oZWFkIGRlcGVuZHMgb24gc3RhZ2VbTi0NCj4gPiAxXS50YWlsDQo+ ID4gPg0KPiA+ID4gPiBJZiB0aGV5IGFyZQ0KPiA+ID4gPiBub3QsIHRoZW4geW91IHdpbGwgcnVu IGludG8gdGhlIGlzc3VlIHlvdSBoYXZlIHNlZW4gKGEuay5hDQo+ID4gPiA+ICJPdGhlci1tdWx0 aS1jb3B5ICBhdG9taWMiIHdoaWNoIGlzIGxlZ2l0IGluIEFybSB2OCBhbmQgYWJvdmUpLg0KPiA+ ID4NCj4gPiA+IENhbiB5b3UgcHJvYmFibHkgZWxhYm9yYXRlIGEgYml0IG1vcmUgZm9yIG1lIGhl cmU/DQo+ID4gPiBUaGFua3MNCj4gPiA+IEtvbnN0YW50aW4NCj4gPiA+DQo+ID4gPg0KPiA+ID4g PiBUaGFua3MuDQo+ID4gPiA+DQo+ID4gPiA+IC0td2F0aHNhbGENCj4gPiA+ID4NCj4gPiA+ID4N Cj4gPiA+ID4gPiA+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+ID4gPiA+ID4gPiBGcm9t OiBLb25zdGFudGluIEFuYW55ZXYgPGtvbnN0YW50aW4uYW5hbnlldkBodWF3ZWkuY29tPg0KPiA+ ID4gPiA+ID4gU2VudDogTW9uZGF5LCBNYXkgMjYsIDIwMjUgNjo1NCBBTQ0KPiA+ID4gPiA+ID4g VG86IFdhdGhzYWxhIFdhdGhhd2FuYSBWaXRoYW5hZ2UgPHdhdGhzYWxhLnZpdGhhbmFnZUBhcm0u Y29tPjsNCj4gPiA+ID4gPiA+IGRldkBkcGRrLm9yZw0KPiA+ID4gPiA+ID4gQ2M6IEhvbm5hcHBh IE5hZ2FyYWhhbGxpIDxIb25uYXBwYS5OYWdhcmFoYWxsaUBhcm0uY29tPjsNCj4gPiA+ID4gPiA+ IGplcmluakBtYXJ2ZWxsLmNvbTsgaGVtYW50LmFncmF3YWxAbnhwLmNvbTsgZHJjQGxpbnV4Lmli bS5jb207IG5kDQo+ID4gPiA+ID4gPiA8bmRAYXJtLmNvbT4NCj4gPiA+ID4gPiA+IFN1YmplY3Q6 IFJFOiBbUEFUQ0ggdjEgMy80XSByaW5nOiBmaXggcG90ZW50aWFsIHN5bmMgaXNzdWUgYmV0d2Vl bg0KPiA+ID4gPiA+ID4gaGVhZCBhbmQNCj4gPiA+ID4gPiB0YWlsDQo+ID4gPiA+ID4gPiB2YWx1 ZXMNCj4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiBIaSBXYXRoc2FsYSwNCj4gPiA+ID4gPiA+DQo+ ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+IEhpIEtvbnN0YW5pbiwNCj4gPiA+ID4gPiA+ID4N Cj4gPiA+ID4gPiA+ID4gSW4gcnRlX3JpbmcgdGhlIHN0b3JlLXJlbGVhc2Ugb24gdGFpbCB1cGRh dGUgZ3VhcmFudGVlcyB0aGF0IENBUw0KPiA+ID4gPiA+ID4gPiB3b24ndCBnZXQgcmVvcmRlcmVk IHdpdGggdGhlIHN0b3JlLXJlbGVhc2VkIG9mIHRoZSB0YWlsIHVwZGF0ZS4NCj4gPiA+ID4gPiA+ ID4NCj4gPiA+ID4gPiA+ID4gU28sIHRoZSBzZXF1ZW5jZSBvZiBldmVudHMgd291bGQgbG9vayBs aWtlIHRoaXMgKGNvbWJpbmVkIHZpZXcNCj4gPiA+ID4gPiA+ID4gb2YgaGVhZCBhbmQgdGFpbCB1 cGRhdGUpDQo+ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+IFJlbGVheGVkLWxvYWQobmV3X2hl YWQsICBOKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0+IChB KQ0KPiA+ID4gPiA+ID4gPiBSZWxheGVkLUNBUyhkLT5oZWFkLCBuZXdfaGVhZCwgb2xkX2hlYWQp ICAgLS0tLS0tLS0tLS0tLS0tLT4gKEIpDQo+ID4gPiA+ID4gPiA+IFN0b3JlLXJlbGVhc2Utc3Rv cmUoZC0+dGFpbCwgbmV3X2hlYWQpICAgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0+IChDKQ0K PiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPiBJZiB3ZSBsb29rIGF0IGFkZHJlc3MgZGVwZW5k ZW5jaWVzLCB0aGVuLi4uDQo+ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+IChCKSBkZXBlbmRz IG9uIChBKSBkdWUgdG8gbmV3X2hlYWQgYWRkcmVzcyBkZXBlbmRlbmN5Lg0KPiA+ID4gPiA+ID4g PiAoQykgZGVwZW5kcyBvbiAoQSkgZHVlIHRvIG5ld19oZWFkIGFkZHJlc3MgZGVwZW5kZW5jeS4N Cj4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4gU28sIGRlcGVuZGVuY3kgZ3JhcGggbG9va3Mg bGlrZSB0aGlzDQo+ID4gPiA+ID4gPiA+ICAgICAgICAoQSkNCj4gPiA+ID4gPiA+ID4gICAgIC8g ICAgICAgXA0KPiA+ID4gPiA+ID4gPiAgICB2ICAgICAgICB2DQo+ID4gPiA+ID4gPiA+ICAoQikg ICAgIChDKQ0KPiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPiBUaGVyZSBpcyBubyBpbXBsaWNp dCBkZXBlbmRlbmNlIGJldHdlZW4gKEIpIGFuZCAoQyksIEkgdGhpbmsNCj4gPiA+ID4gPiA+ID4g dGhpcyBpcyB0aGUgaXNzdWUgeW91IGFyZSBicmluaW5nIHVwLg0KPiA+ID4gPiA+ID4gPiBFdmVu IHRob3VnaCB0aGVyZSBpcyBubyBkZXBlbmRlbmNlIGJldHdlZW4gdGhlIHR3bywgdGhlDQo+ID4g PiA+ID4gPiA+IHN0b3JlLXJlbGVhc2Ugb2YgKEMpIGVuc3VyZXMgdGhhdCAoQikgd29uJ3QgZHJv cCBiZWxvdyBpdC4NCj4gPiA+ID4gPiA+ID4gVGhlcmVmb3JlLCB0aGUgYWJvdmUgZ3JhcGggY2Fu IGJlIHR1cm5lZCBpbnRvIGFuIG9yZGVyZWQNCj4gPiA+ID4gPiA+ID4gc2VxdWVuY2UgYXMgc2hv d24gYmVsb3cuLg0KPiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPiAoQSkgLT4gKEIpIC0+IChD KQ0KPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+IEkgZG8gYWdyZWUgdGhhdCB3aXRoIGN1cnJlbnQg aW1wbGVtZW50YXRpb24gb2YNCj4gPiA+ID4gPiA+IF9fcnRlX3JpbmdfaGVhZHRhaWxfbW92ZV9o ZWFkKCkNCj4gPiA+ID4gPiA+IGluIGxpYi9yaW5nL3J0ZV9yaW5nX2MxMV9wdnQuaCB0aGUgb3Jk ZXIgb2YgdGhlc2UgMyBvcGVyYXRpb25zDQo+ID4gPiA+ID4gPiAoQS0+Qi0+Qykgc2hvdWxkIGJl IHNlcXVlbnRpYWwuDQo+ID4gPiA+ID4gPiBUaGUgcHJvYmxlbSBJIGFtIHRhbGtpbmcgYWJvdXQg aXMgYSBkaWZmZXJlbnQgb25lOg0KPiA+ID4gPiA+ID4gdGhyZWFkIGNhbiBzZWUgJ2xhdGVzdCcg J2NvbnMuaGVhZCcgdmFsdWUsIHdpdGggJ3ByZXZpb3VzJyB2YWx1ZQ0KPiA+ID4gPiA+ID4gZm9y ICdwcm9kLnRhaWwnIG9yIHZpc2EtdmVyc2EuDQo+ID4gPiA+ID4gPiBJbiBvdGhlciB3b3Jkczog J2NvbnMuaGVhZCcgdmFsdWUgZGVwZW5kcyBvbiAncHJvZC50YWlsJywgc28NCj4gPiA+ID4gPiA+ IGJlZm9yZSBtYWtpbmcgbGF0ZXN0ICdjb25zLmhlYWQnDQo+ID4gPiA+ID4gPiB2YWx1ZSB2aXNp YmxlIHRvIG90aGVyIHRocmVhZHMsIHdlIG5lZWQgdG8gZW5zdXJlIHRoYXQgbGF0ZXN0DQo+ID4g PiA+ID4gPiAncHJvZC50YWlsJyBpcyBhbHNvIHZpc2libGUuDQo+ID4gPiA+ID4gPiBMZXQgbWUg dHJ5IHRvIGV4cGxhaW4gaXQgb24gdGhlIGV4YW1wbGU6DQo+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ ID4gU3VwcG9zZSBhdCBzb21lIG1vbWVudCB3ZSBoYXZlOg0KPiA+ID4gPiA+ID4gcHJvZD17Lmhl YWQ9MiwudGFpbD0xfTsNCj4gPiA+ID4gPiA+IGNvbnM9ey5oZWFkPTAsLnRhaWw9MH07DQo+ID4g PiA+ID4gPiBJLmUuIHRoZWFkICMxIGlzIGluIHByb2Nlc3MgdG8gZW5xdWV1ZSBvbmUgbW9yZSBl bGVtZW50IGludG8gdGhlIHJpbmcuDQo+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gICAgICAgIFRo cmVhZCAjMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhyZWFkICMyDQo+ID4gPiA+ID4gPiBUMDoNCj4g PiA+ID4gPiA+ICAgc3RvcmUoJnByb2QudGFpbCwgMiwgcmVsZWFzZSk7DQo+ID4gPiA+ID4gPiAg IC8qQUZBSVU6IHRoaXMgaXMgc29tZXdoYXQgZXF1aXZhbGVudCB0bzogd21iKCk7IHByb2QudGFp bD0yOw0KPiA+ID4gPiA+ID4gICAqIEkuRS4gLSBpdCBndWFyYW50ZWVzIHRoYXQgYWxsIHN0b3Jl cyBpbml0aWF0ZWQgYmVmb3JlIHRoYXQNCj4gPiA+ID4gPiA+IG9wZXJhdGlvbiB3aWxsIGJlIHZp c2libGUNCj4gPiA+ID4gPiA+ICAgKiBieSBvdGhlciB0aHJlYWRzIGF0IHRoZSBzYW1lIG1vbWVu dCBvciBiZWZvcmUgbmV3IHZhbHVlIG9mDQo+ID4gPiA+ID4gPiBwcm9kLnRhaWwgd2xsbCBiZWNv bWUNCj4gPiA+ID4gPiA+ICAgKiB2aXNpYmxlLCBidXQgaXQgZG9lc24ndCBndWFyYW50ZWUgdGhh dCBuZXcgcHJvZC50YWlsICB2YWx1ZQ0KPiA+ID4gPiA+ID4gd2lsbCBiZSB2aXNpYmxlICB0byBv dGhlcg0KPiA+ID4gPiA+ID4gICAqIHRocmVhZHMgaW1tZWRpYXRlbHkuDQo+ID4gPiA+ID4gPiAg ICovDQo+ID4gPiA+ID4gPiAuLi4NCj4gPiA+ID4gPiA+IG1vdmVfY29uc19oZWFkKC4uLixuPTIp DQo+ID4gPiA+ID4gbW92ZV9jb25zX2hlYWQoLi4uLG49MSkNCj4gPiA+ID4gPiA+IC4uLiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4NCj4gPiA+ID4gPiA+IFQxOg0KPiA+ ID4gPiA+ID4gICAqb2xkX2hlYWQgPSBsb2FkKCZjb25zLmhlYWQsIHJlbGF4ZWQpOw0KPiA+ID4g PiA+ID4gICBmZW5jZShhY3F1aXJlKTsNCj4gPiA+ID4gPiA+ICAgLypvbGRfaGVhZCA9PSAwLCBu byBzdXJwcmlzZXMgKi8NCj4gPiA+ID4gPiA+ICAgc3RhaWwgPSBsb2FkKCZwcm9kLnRhaWwsIGFj cXVpcmUpOw0KPiA+ID4gPiA+ID4gICAvKnN0YWlsID09IDIsIG5vIHN1cnByaXNlcyAqLw0KPiA+ ID4gPiA+ID4gICplbnRyaWVzID0gKGNhcGFjaXR5ICsgc3RhaWwgLSAqb2xkX2hlYWQpOyAqbmV3 X2hlYWQgPSAqb2xkX2hlYWQNCj4gPiA+ID4gPiA+ICsgbjsNCj4gPiA+ID4gPiA+ICAvKiAqZW50 cmllcyA9PSAoMiAtIDApID09IDI7ICpuZXdfaGVhZD09MjsgYWxsIGdvb2QgKi8gLi4uDQo+ID4g PiA+ID4gPiBUMjoNCj4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiAqb2xkX2hlYWQgPSBsb2FkKCZj b25zLmhlYWQsIHJlbGF4ZWQpOw0KPiA+ID4gPiA+ID4gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZmVuY2UoYWNxdWlyZSk7DQo+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4g LypvbGRfaGVhZCA9PSAwLCBubw0KPiA+ID4gPiA+IHN1cnByaXNlcw0KPiA+ID4gPiA+ID4gKi8N Cj4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiBzdGFpbCA9IGxvYWQoJnByb2QudGFpbCwgYWNxdWly ZSk7DQo+ID4gPiA+ID4gPiAvKiAhISEhISBzdGFpbCA9PSAxICAhISEhISBmb3IgVGhyZWFkIDIN Cj4gPiA+ID4gPiA+ICAqIEV2ZW4gdGhvdWdoIHdlIGRvIHVzZSBhY3F1aXJlIGhlcmUgLSB0aGVy ZSB3YXMgbm8gKnJlbGVhc2UqDQo+ID4gPiA+ID4gPiBhZnRlciBzdG9yZSgmcHJvZC50YWlsKS4N Cj4gPiA+ID4gPiA+ICAqIFNvLCBzdGlsbCBubyBndWFyYW50ZWUgdGhhdCBUaHJlYWQgMiB3aWxs IHNlZSBsYXRlc3QgcHJvZC50YWlsIHZhbHVlLg0KPiA+ID4gPiA+ID4gICovDQo+ID4gPiA+ID4g Pg0KPiA+ID4gPiA+ID4gKmVudHJpZXMgPSAoY2FwYWNpdHkgKyBzdGFpbCAtICpvbGRfaGVhZCk7 DQo+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gLyogKmVudHJpZXMgPT0gKDEgLSAwKSA9PSAxLA0K PiA+ID4gPiA+IHN0aWxsDQo+ID4gPiA+ID4gPiBvayAqLw0KPiA+ID4gPiA+ID4gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmV3X2hlYWQgPQ0KPiA+ID4gKm9sZF9oZWFk ICsgbjsNCj4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiAvKiAqbmV3X2hlYWQgPT0gMSAqLw0KPiA+ ID4gPiA+ID4gVDM6DQo+ID4gPiA+ID4gPiAgIHN1Y2Nlc3MgPSBDQVMoJmNvbnMuaGVhZCwNCj4g PiA+ID4gPiA+ICAgICBvbGRfaGVhZCAvKj09MC8sICpuZXdfaGVhZCAvKj09MiovLA0KPiA+ID4g PiA+ID4gICAgIHJlbGF4ZWQsIHJlbGF4ZWQpOw0KPiA+ID4gPiA+ID4gICAvKnN1Y2Nlc3M9PTEs IGNvbnMuaGVhZD09MiovDQo+ID4gPiA+ID4gPiAgLi4uDQo+ID4gPiA+ID4gPiBUNDoNCj4gPiA+ ID4gPiA+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzID0NCj4gPiA+ IENBUygmY29ucy5oZWFkLA0KPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+IG9sZF9oZWFkIC8qPT0w LywgKm5ld19oZWFkIC8qPT0xKi8sDQo+ID4gPiA+ID4gPiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICByZWxheGVkLCByZWxheGVkKTsNCj4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiAv KnN1Y2Nlc3M9PTAsICpvbGRfaGVhZD09MiovDQo+ID4gPiA+ID4gPiAvKiBDQVMoKSBmYWlsZWQg YW5kIHByb3ZpZGVkIFRocmVhZCAyIHdpdGggbGF0ZXN0IHZhbHVlZCBmb3INCj4gPiA+ID4gPiA+ IGNvbnMuaGVhZCg9PTIpDQo+ID4gPiA+ID4gPiAgKiAgVGhyZWFkIDIgcmVwZWF0cyBhdHRlbXB0 LCBzdGFydHMgc2Vjb25kIGl0ZXJhdGlvbiAgKi8NCj4gPiA+ID4gPiA+ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGZlbmNlKGFjcXVpcmUpOw0KPiA+ID4gPiA+ID4NCj4gPiA+ID4g PiA+IHN0YWlsID0gbG9hZCgmcHJvZC50YWlsLCBhY3F1aXJlKTsNCj4gPiA+ID4gPiA+IC8qICEh ISEhIHN0YWlsID09IDEgICEhISEhIGZvciBUaHJlYWQgMg0KPiA+ID4gPiA+ID4gICogU3RpbGwg bm8gKnJlbGVhc2UqIGhhZCBoYXBwZW5lZCBhZnRlciBzdG9yZSgmcHJvZC50YWlsKSBhdCBUMC4N Cj4gPiA+ID4gPiA+ICAqIFNvLCBzdGlsbCBubyBndWFyYW50ZWUgdGhhdCBUaHJlYWQgMiB3aWxs IHNlZSBsYXRlc3QgcHJvZC50YWlsIHZhbHVlLg0KPiA+ID4gPiA+ID4gICovDQo+ID4gPiA+ID4g Pg0KPiA+ID4gPiA+ID4gKmVudHJpZXMgPSAoY2FwYWNpdHkgKyBzdGFpbCAtICpvbGRfaGVhZCk7 DQo+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gKm5ld19oZWFkID0gKm9sZF9oZWFkICsgbjsNCj4g PiA+ID4gPiA+DQo+ID4gPiA+ID4gPiAvKiAhISEhISAqZW50cmllcyA9PSAoMSAtIDIpID09IC0x KFVJTlQzMl9NQVgpOyAqbmV3X2hlYWQ9PSgyKzEpPT0zOw0KPiA+ICEhISEhDQo+ID4gPiA+ID4g PiAgKiAgd2UgYXJlIGFib3V0IHRvIGNvcnJ1cHQgb3VyIHJpbmcgISEhISENCj4gPiA+ID4gPiA+ ICAqLw0KPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4gSSBoYXZlbid0 IGxvb2tlZCBhdCB0aGUgc28tcmluZyB5ZXQuIENvdWxkIGl0IGJlIHBvc3NpYmxlIHRoYXQNCj4g PiA+ID4gPiA+ID4gdGhlIGlzc3VlIGlzIGR1ZSB0byBzb21ldGhpbmcgZWxzZSBpbnRyb2R1Y2Vk IGluIHRoYXQgY29kZT8NCj4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiBXZWxsLCBhcyBJIHNhaWQs IHNvIGZhciBJIHdhc24ndCBhYmxlIHRvIHJlLXByb2R1Y2UgdGhpcyBwcm9ibGVtDQo+ID4gPiA+ ID4gPiB3aXRoIGNvbnZlbnRpb25hbCByaW5nIChyaW5nX3N0cmVzc19hdXRvdGVzdCksIG9ubHkN Cj4gPiA+ID4gPiA+IHNvcmluZ19zdHJlc3NfYXV0b3Rlc3QgaXMgZmFpbGluZyBhbmQgZm9yIG5v dyAtIG9ubHkgb24gb25lDQo+ID4gPiA+ID4gPiBzcGVjaWZpYyBBUk0gcGxhdGZvcm0uDQo+ID4g PiA+ID4gPiBSZWdhcmRpbmcgc29yaW5nIHNwZWNpZmljIGZpeCAod2l0aG91dCB0b3VjaGluZyBj b21tb24gY29kZSkgLQ0KPiA+ID4gPiA+ID4gc3VyZSBpdCBpcyBhbHNvIHBvc3NpYmxlLCBwbHMg c2VlIHBhdGNoICMyLg0KPiA+ID4gPiA+ID4gVGhlcmUgSSBqdXN0IGFkZGVkICdmZW5jZShyZWxl YXNlKTsnIHN0cmFpZ2h0IGFmdGVyICdzdG9yZSgmdGFpbCk7Jw0KPiA+ID4gPiA+ID4gVGhhdCdz IHNlZW1zIGVub3VnaCB0byBmaXggdGhhdCBwcm9ibGVtIHdpdGhpbiB0aGUgc29yaW5nIG9ubHku DQo+ID4gPiA+ID4gPiBUaG91Z2gsIGZyb20gbXkgdW5kZXJzdGFuZGluZyBydGVfcmluZyBtaWdo dCBhbHNvIGJlIGFmZmVjdGVkLA0KPiA+ID4gPiA+ID4gdGhhdCdzIHdoeSBJIHdlbnQgYWhlYWQg YW5kIHByZXBhcmVkIHRoYXQgcGF0Y2guDQo+ID4gPiA+ID4gPiBJZiB5b3UgZmVlbCwgdGhhdCBJ IGEgbWlzc2luZyBzb21ldGhpbmcgaGVyZSAtIHBscyBzaG91dC4NCj4gPiA+ID4gPiA+IEtvbnN0 YW50aW4NCj4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPiBUaGFua3MsDQo+ ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+IC0td2F0aHNhbGENCj4gPiA+ID4gPiA+ID4NCj4g PiA+ID4gPiA+ID4gPiBUaGlzIHBhdGNoIGFpbXMgc2V2ZXJhbCBwdXJwb3NlczoNCj4gPiA+ID4g PiA+ID4gPiAtIHByb3ZpZGUgYW4gYWx0ZXJuYXRpdmUgKGFuZCBJIHRoaW5rIGEgYmV0dGVyKSB3 YXkgdG8gZml4IHRoZQ0KPiA+ID4gPiA+ID4gPiA+ICAgaXNzdWUgZGlzY3Vzc2VkIGluIHByZXZp b3VzIHBhdGNoOg0KPiA+ID4gPiA+ID4gPiA+ICAgInJpbmcvc29yaW5nOiBmaXggc3luY2hyb25p emF0aW9uIGlzc3VlIGJldHdlZW4gaGVhZCBhbmQgdGFpbA0KPiA+IHZhbHVlcyINCj4gPiA+ID4g PiA+ID4gPiAtIG1ha2Ugc3VyZSB0aGF0IHN1Y2ggcHJvYmxlbSB3b3VsZG7igJl0IGhhcHBlbiB3 aXRoaW4gb3RoZXIgdXNhZ2VzDQo+ID4gb2YNCj4gPiA+ID4gPiA+ID4gPiAgIF9fcnRlX3Jpbmdf aGVhZHRhaWxfbW92ZV9oZWFkKCkg4oCTIGJvdGggY3VycmVudCBydGVfcmluZw0KPiA+ID4gPiA+ ID4gPiA+ICAgaW1wbGVtZW50YXRpb24gYW5kIHBvc3NpYmxlIGZ1dHVyZSB1c2UtY2FzZXMuDQo+ ID4gPiA+ID4gPiA+ID4gLSBzdGVwIHRvd2FyZHMgdW5pZmljYXRpb24gb2YgbW92ZV9oZWFkKCkg aW1wbGVtZW50YXRpb25zIGFuZA0KPiA+ID4gPiA+ID4gPiA+ICAgcmVtb3ZpbmcgcnRlX3Jpbmdf Z2VuZXJpY19wdnQuaCBJdCB1c2VzIEFjcXVpcmUtUmVsZWFzZQ0KPiA+ID4gPiA+ID4gPiA+IG1l bW9yeSBvcmRlcmluZyBmb3IgQ0FTIG9wZXJhdGlvbiBpbg0KPiA+ID4gPiA+ID4gbW92ZV9oZWFk KCkuDQo+ID4gPiA+ID4gPiA+ID4gVGhhdCBndWFyYW50ZWVzIHRoYXQgY29ycmVzcG9uZGluZyDi gJh0YWls4oCZIHVwZGF0ZXMgd2lsbCBiZQ0KPiA+ID4gPiA+ID4gPiA+IHZpc2libGUgYmVmb3Jl DQo+ID4gPiA+ID4gPiBjdXJyZW50DQo+ID4gPiA+ID4gPiA+ID4g4oCYaGVhZOKAmSBpcyB1cGRh dGVkLg0KPiA+ID4gPiA+ID4gPiA+IEFzIEkgc2FpZCBiZWZvcmU6IEkgdGhpbmsgdGhhdCBpbiB0 aGVvcnkgdGhlIHByb2JsZW0gZGVzY3JpYmVkDQo+ID4gPiA+ID4gPiA+ID4gaW4gcHJldmlvdXMN Cj4gPiA+ID4gPiA+IHBhdGNoDQo+ID4gPiA+ID4gPiA+ID4gbWlnaHQgaGFwcGVuIHdpdGggb3Vy IGNvbnZlbnRpb25hbCBydGVfcmluZyB0b28gKHdoZW4NCj4gPiA+ID4gPiA+ID4gPiBSVEVfVVNF X0MxMV9NRU1fTU9ERUwgZW5hYmxlZCkuDQo+ID4gPiA+ID4gPiA+ID4gQnV0LCBzbyBmYXIgSSBk aWRu4oCZdCBtYW5hZ2UgdG8gcmVwcm9kdWNlIGl0IGluIHJlYWxpdHkuDQo+ID4gPiA+ID4gPiA+ ID4gRm9yIHRoYXQgcmVhc29uIGFuZCBhbHNvIGJlY2F1c2UgaXQgdG91Y2hlcyBhIGNyaXRpY2Fs DQo+ID4gPiA+ID4gPiA+ID4gcnRlX3JpbmcgY29kZS1wYXRoLCBJDQo+ID4gPiA+ID4gPiBwdXQN Cj4gPiA+ID4gPiA+ID4gPiB0aGVzZSBjaGFuZ2VzIGludG8gYSBzZXBhcmF0ZSBwYXRjaC4gRXhw ZWN0IGFsbCBpbnRlcmVzdGVkDQo+ID4gPiA+ID4gPiA+ID4gc3Rha2Vob2xkZXJzIHRvDQo+ID4g PiA+ID4gPiBjb21lLQ0KPiA+ID4gPiA+ID4gPiA+IHVwIHdpdGggdGhlaXIgY29tbWVudHMgYW5k IG9ic2VydmF0aW9ucy4NCj4gPiA+ID4gPiA+ID4gPiBSZWdhcmRpbmcgcGVyZm9ybWFuY2UgaW1w YWN0IOKAkyBvbiBteSBib3hlcyBib3RoDQo+ID4gPiA+ID4gPiA+ID4gcmluZ19wZXJmX2F1dG90 ZXN0DQo+ID4gPiA+ID4gYW5kDQo+ID4gPiA+ID4gPiA+ID4gcmluZ19zdHJlc3NfYXV0b3Rlc3Qg 4oCTIHNob3cgYSBtaXhlZCBzZXQgb2YgcmVzdWx0czogc29tZSBvZg0KPiA+ID4gPiA+ID4gPiA+ IHRoZW0NCj4gPiA+ID4gPiBiZWNvbWUNCj4gPiA+ID4gPiA+IGZldw0KPiA+ID4gPiA+ID4gPiA+ IGN5Y2xlcyBmYXN0ZXIsIGFub3RoZXIgZmV3IGN5Y2xlcyBzbG93ZXIuDQo+ID4gPiA+ID4gPiA+ ID4gQnV0IHNvIGZhciwgSSBkaWRu4oCZdCBub3RpY2UgYW55IHJlYWwgZGVncmFkYXRpb25zIHdp dGggdGhhdCBwYXRjaC4NCj4gPiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPiA+IEZpeGVzOiBi NTQ1OGUyY2M0ODMgKCJyaW5nOiBpbnRyb2R1Y2Ugc3RhZ2VkIG9yZGVyZWQgcmluZyIpDQo+ID4g PiA+ID4gPiA+ID4gRml4ZXM6IDFjYzM2M2I4Y2UwNiAoInJpbmc6IGludHJvZHVjZSBIVFMgcmlu ZyBtb2RlIikNCj4gPiA+ID4gPiA+ID4gPiBGaXhlczogZTZiYTQ3MzFjMGYzICgicmluZzogaW50 cm9kdWNlIFJUUyByaW5nIG1vZGUiKQ0KPiA+ID4gPiA+ID4gPiA+IEZpeGVzOiA0OTU5NGE2MzE0 N2EgKCJyaW5nL2MxMTogcmVsYXggb3JkZXJpbmcgZm9yIGxvYWQgYW5kDQo+ID4gPiA+ID4gPiA+ ID4gc3RvcmUgb2YgdGhlDQo+ID4gPiA+ID4gPiBoZWFkIikNCj4gPiA+ID4gPiA+ID4gPg0KPiA+ ID4gPiA+ID4gPiA+IFNpZ25lZC1vZmYtYnk6IEtvbnN0YW50aW4gQW5hbnlldg0KPiA+ID4gPiA+ ID4gPiA+IDxrb25zdGFudGluLmFuYW55ZXZAaHVhd2VpLmNvbT4NCj4gPiA+ID4gPiA+ID4gPiAt LS0NCj4gPiA+ID4gPiA+ID4gPiAgbGliL3JpbmcvcnRlX3JpbmdfYzExX3B2dC5oICAgICAgfCAy NyArKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0NCj4gPiA+ID4gPiA+ID4gPiAgbGliL3Jpbmcv cnRlX3JpbmdfaHRzX2VsZW1fcHZ0LmggfCAgNiArKysrLS0NCj4gPiA+ID4gPiA+IGxpYi9yaW5n L3J0ZV9yaW5nX3J0c19lbGVtX3B2dC5oDQo+ID4gPiA+ID4gPiA+ID4gfCAgNiArKysrLS0NCj4g PiA+ID4gPiA+ID4gPiAgbGliL3Jpbmcvc29yaW5nLmMgICAgICAgICAgICAgICAgfCAgNSAtLS0t LQ0KPiA+ID4gPiA+ID4gPiA+ICA0IGZpbGVzIGNoYW5nZWQsIDI1IGluc2VydGlvbnMoKyksIDE5 IGRlbGV0aW9ucygtKQ0KPiA+ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+ID4gZGlmZiAtLWdp dCBhL2xpYi9yaW5nL3J0ZV9yaW5nX2MxMV9wdnQuaA0KPiA+ID4gPiA+ID4gPiA+IGIvbGliL3Jp bmcvcnRlX3JpbmdfYzExX3B2dC5oDQo+ID4gPiA+ID4gaW5kZXgNCj4gPiA+ID4gPiA+ID4gPiAw ODQ1Y2Q2ZGNmLi42ZDFjNDZkZjlhIDEwMDY0NA0KPiA+ID4gPiA+ID4gPiA+IC0tLSBhL2xpYi9y aW5nL3J0ZV9yaW5nX2MxMV9wdnQuaA0KPiA+ID4gPiA+ID4gPiA+ICsrKyBiL2xpYi9yaW5nL3J0 ZV9yaW5nX2MxMV9wdnQuaA0KPiA+ID4gPiA+ID4gPiA+IEBAIC03NywyMCArNzcsMTkgQEAgX19y dGVfcmluZ19oZWFkdGFpbF9tb3ZlX2hlYWQoc3RydWN0DQo+ID4gPiA+ID4gPiA+ID4gcnRlX3Jp bmdfaGVhZHRhaWwgKmQsDQo+ID4gPiA+ID4gPiA+ID4gIAlpbnQgc3VjY2VzczsNCj4gPiA+ID4g PiA+ID4gPiAgCXVuc2lnbmVkIGludCBtYXggPSBuOw0KPiA+ID4gPiA+ID4gPiA+DQo+ID4gPiA+ ID4gPiA+ID4gKwkvKiBFbnN1cmUgdGhlIGhlYWQgaXMgcmVhZCBiZWZvcmUgdGFpbCAqLw0KPiA+ ID4gPiA+ID4gPiA+ICAJKm9sZF9oZWFkID0gcnRlX2F0b21pY19sb2FkX2V4cGxpY2l0KCZkLT5o ZWFkLA0KPiA+ID4gPiA+ID4gPiA+IC0JCQlydGVfbWVtb3J5X29yZGVyX3JlbGF4ZWQpOw0KPiA+ ID4gPiA+ID4gPiA+ICsJCQlydGVfbWVtb3J5X29yZGVyX2FjcXVpcmUpOw0KPiA+ID4gPiA+ID4g PiA+ICAJZG8gew0KPiA+ID4gPiA+ID4gPiA+ICAJCS8qIFJlc2V0IG4gdG8gdGhlIGluaXRpYWwg YnVyc3QgY291bnQgKi8NCj4gPiA+ID4gPiA+ID4gPiAgCQluID0gbWF4Ow0KPiA+ID4gPiA+ID4g PiA+DQo+ID4gPiA+ID4gPiA+ID4gLQkJLyogRW5zdXJlIHRoZSBoZWFkIGlzIHJlYWQgYmVmb3Jl IHRhaWwgKi8NCj4gPiA+ID4gPiA+ID4gPiAtCQlydGVfYXRvbWljX3RocmVhZF9mZW5jZShydGVf bWVtb3J5X29yZGVyX2FjcXVpcmUpOw0KPiA+ID4gPiA+ID4gPiA+IC0NCj4gPiA+ID4gPiA+ID4g PiAtCQkvKiBsb2FkLWFjcXVpcmUgc3luY2hyb25pemUgd2l0aCBzdG9yZS1yZWxlYXNlIG9mIGh0 LQ0KPiA+ID4gPnRhaWwNCj4gPiA+ID4gPiA+ID4gPiAtCQkgKiBpbiB1cGRhdGVfdGFpbC4NCj4g PiA+ID4gPiA+ID4gPiArCQkvKg0KPiA+ID4gPiA+ID4gPiA+ICsJCSAqIFJlYWQgcy0+dGFpbCB2 YWx1ZS4gTm90ZSB0aGF0IGl0IHdpbGwgYmUgbG9hZGVkIGFmdGVyDQo+ID4gPiA+ID4gPiA+ID4g KwkJICogZC0+aGVhZCBsb2FkLCBidXQgYmVmb3JlIENBUyBvcGVyYXRpb24gZm9yIHRoZSBkLQ0K PiA+ID4gPmhlYWQuDQo+ID4gPiA+ID4gPiA+ID4gIAkJICovDQo+ID4gPiA+ID4gPiA+ID4gIAkJ c3RhaWwgPSBydGVfYXRvbWljX2xvYWRfZXhwbGljaXQoJnMtPnRhaWwsDQo+ID4gPiA+ID4gPiA+ ID4gLQkJCQkJcnRlX21lbW9yeV9vcmRlcl9hY3F1aXJlKTsNCj4gPiA+ID4gPiA+ID4gPiArCQkJ CQlydGVfbWVtb3J5X29yZGVyX3JlbGF4ZWQpOw0KPiA+ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4g PiA+ID4gIAkJLyogVGhlIHN1YnRyYWN0aW9uIGlzIGRvbmUgYmV0d2VlbiB0d28gdW5zaWduZWQN Cj4gPiAzMmJpdHMNCj4gPiA+IHZhbHVlDQo+ID4gPiA+ID4gPiA+ID4gIAkJICogKHRoZSByZXN1 bHQgaXMgYWx3YXlzIG1vZHVsbyAzMiBiaXRzIGV2ZW4gaWYgd2UgaGF2ZQ0KPiA+ID4gQEANCj4g PiA+ID4gPiA+ID4gPiAtDQo+ID4gPiA+ID4gPiA+ID4gMTEyLDExICsxMTEsMTkgQEAgX19ydGVf cmluZ19oZWFkdGFpbF9tb3ZlX2hlYWQoc3RydWN0DQo+ID4gPiA+ID4gPiBydGVfcmluZ19oZWFk dGFpbA0KPiA+ID4gPiA+ID4gPiA+ICpkLA0KPiA+ID4gPiA+ID4gPiA+ICAJCQlkLT5oZWFkID0g Km5ld19oZWFkOw0KPiA+ID4gPiA+ID4gPiA+ICAJCQlzdWNjZXNzID0gMTsNCj4gPiA+ID4gPiA+ ID4gPiAgCQl9IGVsc2UNCj4gPiA+ID4gPiA+ID4gPiAtCQkJLyogb24gZmFpbHVyZSwgKm9sZF9o ZWFkIGlzIHVwZGF0ZWQgKi8NCj4gPiA+ID4gPiA+ID4gPiArCQkJLyoNCj4gPiA+ID4gPiA+ID4g PiArCQkJICogb24gZmFpbHVyZSwgKm9sZF9oZWFkIGlzIHVwZGF0ZWQuDQo+ID4gPiA+ID4gPiA+ ID4gKwkJCSAqIHRoaXMgQ0FTKEFDUV9SRUwsIEFDUVVJUkUpIHNlcnZlcyBhcyBhDQo+ID4gPiBo b2lzdA0KPiA+ID4gPiA+ID4gPiA+ICsJCQkgKiBiYXJyaWVyIHRvIHByZXZlbnQ6DQo+ID4gPiA+ ID4gPiA+ID4gKwkJCSAqICAtIE9PTyByZWFkcyBvZiBjb25zIHRhaWwgdmFsdWUNCj4gPiA+ID4g PiA+ID4gPiArCQkJICogIC0gT09PIGNvcHkgb2YgZWxlbXMgZnJvbSB0aGUgcmluZw0KPiA+ID4g PiA+ID4gPiA+ICsJCQkgKiAgQWxzbyBSRUxFQVNFIGd1YXJhbnRlZXMgdGhhdCBsYXRlc3QgdGFp bA0KPiA+ID4gdmFsdWUNCj4gPiA+ID4gPiA+ID4gPiArCQkJICogIHdpbGwgYmVjb21lIHZpc2li bGUgYmVmb3JlIHRoZSBuZXcgaGVhZA0KPiA+ID4gdmFsdWUuDQo+ID4gPiA+ID4gPiA+ID4gKwkJ CSAqLw0KPiA+ID4gPiA+ID4gPiA+ICAJCQlzdWNjZXNzID0NCj4gPiA+ID4gPiA+ID4gPiBydGVf YXRvbWljX2NvbXBhcmVfZXhjaGFuZ2Vfc3Ryb25nX2V4cGxpY2l0KA0KPiA+ID4gPiA+ID4gPiA+ ICAJCQkJCSZkLT5oZWFkLCBvbGRfaGVhZCwNCj4gPiA+ICpuZXdfaGVhZCwNCj4gPiA+ID4gPiA+ ID4gPiAtCQkJCQlydGVfbWVtb3J5X29yZGVyX3JlbGF4ZWQsDQo+ID4gPiA+ID4gPiA+ID4gLQkJ CQkJcnRlX21lbW9yeV9vcmRlcl9yZWxheGVkKTsNCj4gPiA+ID4gPiA+ID4gPiArCQkJCQlydGVf bWVtb3J5X29yZGVyX2FjcV9yZWwsDQo+ID4gPiA+ID4gPiA+ID4gKwkJCQkJcnRlX21lbW9yeV9v cmRlcl9hY3F1aXJlKTsNCj4gPiA+ID4gPiA+ID4gPiAgCX0gd2hpbGUgKHVubGlrZWx5KHN1Y2Nl c3MgPT0gMCkpOw0KPiA+ID4gPiA+ID4gPiA+ICAJcmV0dXJuIG47DQo+ID4gPiA+ID4gPiA+ID4g IH0NCj4gPiA+ID4gPiA+ID4gPiBkaWZmIC0tZ2l0IGEvbGliL3JpbmcvcnRlX3JpbmdfaHRzX2Vs ZW1fcHZ0LmgNCj4gPiA+ID4gPiA+IGIvbGliL3JpbmcvcnRlX3JpbmdfaHRzX2VsZW1fcHZ0LmgN Cj4gPiA+ID4gPiA+ID4gPiBpbmRleCBjNTllNWY2NDIwLi5jYzU5MzQzM2I5IDEwMDY0NA0KPiA+ ID4gPiA+ID4gPiA+IC0tLSBhL2xpYi9yaW5nL3J0ZV9yaW5nX2h0c19lbGVtX3B2dC5oDQo+ID4g PiA+ID4gPiA+ID4gKysrIGIvbGliL3JpbmcvcnRlX3JpbmdfaHRzX2VsZW1fcHZ0LmgNCj4gPiA+ ID4gPiA+ID4gPiBAQCAtMTE2LDEzICsxMTYsMTUgQEAgX19ydGVfcmluZ19odHNfbW92ZV9oZWFk KHN0cnVjdA0KPiA+ID4gPiA+ID4gPiA+IHJ0ZV9yaW5nX2h0c19oZWFkdGFpbCAqZCwNCj4gPiA+ ID4gPiA+ID4gPiAgCQlucC5wb3MuaGVhZCA9IG9wLnBvcy5oZWFkICsgbjsNCj4gPiA+ID4gPiA+ ID4gPg0KPiA+ID4gPiA+ID4gPiA+ICAJLyoNCj4gPiA+ID4gPiA+ID4gPiAtCSAqIHRoaXMgQ0FT KEFDUVVJUkUsIEFDUVVJUkUpIHNlcnZlcyBhcyBhIGhvaXN0IGJhcnJpZXIgdG8NCj4gPiA+IHBy ZXZlbnQ6DQo+ID4gPiA+ID4gPiA+ID4gKwkgKiB0aGlzIENBUyhBQ1FfUkVMLCBBQ1FVSVJFKSBz ZXJ2ZXMgYXMgYSBob2lzdCBiYXJyaWVyIHRvDQo+ID4gPiBwcmV2ZW50Og0KPiA+ID4gPiA+ID4g PiA+ICAJICogIC0gT09PIHJlYWRzIG9mIGNvbnMgdGFpbCB2YWx1ZQ0KPiA+ID4gPiA+ID4gPiA+ ICAJICogIC0gT09PIGNvcHkgb2YgZWxlbXMgZnJvbSB0aGUgcmluZw0KPiA+ID4gPiA+ID4gPiA+ ICsJICogICBBbHNvIFJFTEVBU0UgZ3VhcmFudGVlcyB0aGF0IGxhdGVzdCB0YWlsIHZhbHVlDQo+ ID4gPiA+ID4gPiA+ID4gKwkgKiAgIHdpbGwgYmVjb21lIHZpc2libGUgYmVmb3JlIHRoZSBuZXcg aGVhZCB2YWx1ZS4NCj4gPiA+ID4gPiA+ID4gPiAgCSAqLw0KPiA+ID4gPiA+ID4gPiA+ICAJfSB3 aGlsZSAocnRlX2F0b21pY19jb21wYXJlX2V4Y2hhbmdlX3N0cm9uZ19leHBsaWNpdCgmZC0NCj4g PiA+ID5odC5yYXcsDQo+ID4gPiA+ID4gPiA+ID4gIAkJCSh1aW50NjRfdCAqKSh1aW50cHRyX3Qp Jm9wLnJhdywgbnAucmF3LA0KPiA+ID4gPiA+ID4gPiA+IC0JCQlydGVfbWVtb3J5X29yZGVyX2Fj cXVpcmUsDQo+ID4gPiA+ID4gPiA+ID4gKwkJCXJ0ZV9tZW1vcnlfb3JkZXJfYWNxX3JlbCwNCj4g PiA+ID4gPiA+ID4gPiAgCQkJcnRlX21lbW9yeV9vcmRlcl9hY3F1aXJlKSA9PSAwKTsNCj4gPiA+ ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPiA+ICAJKm9sZF9oZWFkID0gb3AucG9zLmhlYWQ7DQo+ ID4gPiA+ID4gPiA+ID4gZGlmZiAtLWdpdCBhL2xpYi9yaW5nL3J0ZV9yaW5nX3J0c19lbGVtX3B2 dC5oDQo+ID4gPiA+ID4gPiBiL2xpYi9yaW5nL3J0ZV9yaW5nX3J0c19lbGVtX3B2dC5oDQo+ID4g PiA+ID4gPiA+ID4gaW5kZXggNTA5ZmE2NzRmYi4uODYwYjEzY2M2MSAxMDA2NDQNCj4gPiA+ID4g PiA+ID4gPiAtLS0gYS9saWIvcmluZy9ydGVfcmluZ19ydHNfZWxlbV9wdnQuaA0KPiA+ID4gPiA+ ID4gPiA+ICsrKyBiL2xpYi9yaW5nL3J0ZV9yaW5nX3J0c19lbGVtX3B2dC5oDQo+ID4gPiA+ID4g PiA+ID4gQEAgLTEzMSwxMyArMTMxLDE1IEBAIF9fcnRlX3JpbmdfcnRzX21vdmVfaGVhZChzdHJ1 Y3QNCj4gPiA+ID4gPiA+ID4gPiBydGVfcmluZ19ydHNfaGVhZHRhaWwgKmQsDQo+ID4gPiA+ID4g PiA+ID4gIAkJbmgudmFsLmNudCA9IG9oLnZhbC5jbnQgKyAxOw0KPiA+ID4gPiA+ID4gPiA+DQo+ ID4gPiA+ID4gPiA+ID4gIAkvKg0KPiA+ID4gPiA+ID4gPiA+IC0JICogdGhpcyBDQVMoQUNRVUlS RSwgQUNRVUlSRSkgc2VydmVzIGFzIGEgaG9pc3QgYmFycmllciB0bw0KPiA+ID4gcHJldmVudDoN Cj4gPiA+ID4gPiA+ID4gPiArCSAqIHRoaXMgQ0FTKEFDUV9SRUwsIEFDUVVJUkUpIHNlcnZlcyBh cyBhIGhvaXN0IGJhcnJpZXIgdG8NCj4gPiA+IHByZXZlbnQ6DQo+ID4gPiA+ID4gPiA+ID4gIAkg KiAgLSBPT08gcmVhZHMgb2YgY29ucyB0YWlsIHZhbHVlDQo+ID4gPiA+ID4gPiA+ID4gIAkgKiAg LSBPT08gY29weSBvZiBlbGVtcyB0byB0aGUgcmluZw0KPiA+ID4gPiA+ID4gPiA+ICsJICogIEFs c28gUkVMRUFTRSBndWFyYW50ZWVzIHRoYXQgbGF0ZXN0IHRhaWwgdmFsdWUNCj4gPiA+ID4gPiA+ ID4gPiArCSAqICB3aWxsIGJlY29tZSB2aXNpYmxlIGJlZm9yZSB0aGUgbmV3IGhlYWQgdmFsdWUu DQo+ID4gPiA+ID4gPiA+ID4gIAkgKi8NCj4gPiA+ID4gPiA+ID4gPiAgCX0gd2hpbGUgKHJ0ZV9h dG9taWNfY29tcGFyZV9leGNoYW5nZV9zdHJvbmdfZXhwbGljaXQoJmQtDQo+ID4gPiA+ID4gPiA+ aGVhZC5yYXcsDQo+ID4gPiA+ID4gPiA+ID4gIAkJCSh1aW50NjRfdCAqKSh1aW50cHRyX3QpJm9o LnJhdywgbmgucmF3LA0KPiA+ID4gPiA+ID4gPiA+IC0JCQlydGVfbWVtb3J5X29yZGVyX2FjcXVp cmUsDQo+ID4gPiA+ID4gPiA+ID4gKwkJCXJ0ZV9tZW1vcnlfb3JkZXJfYWNxX3JlbCwNCj4gPiA+ ID4gPiA+ID4gPiAgCQkJcnRlX21lbW9yeV9vcmRlcl9hY3F1aXJlKSA9PSAwKTsNCj4gPiA+ID4g PiA+ID4gPg0KPiA+ID4gPiA+ID4gPiA+ICAJKm9sZF9oZWFkID0gb2gudmFsLnBvczsNCj4gPiA+ ID4gPiA+ID4gPiBkaWZmIC0tZ2l0IGEvbGliL3Jpbmcvc29yaW5nLmMgYi9saWIvcmluZy9zb3Jp bmcuYyBpbmRleA0KPiA+ID4gPiA+ID4gN2JjYmYzNTUxNi4uMjFhMWEyN2UyNA0KPiA+ID4gPiA+ ID4gPiA+IDEwMDY0NA0KPiA+ID4gPiA+ID4gPiA+IC0tLSBhL2xpYi9yaW5nL3NvcmluZy5jDQo+ ID4gPiA+ID4gPiA+ID4gKysrIGIvbGliL3Jpbmcvc29yaW5nLmMNCj4gPiA+ID4gPiA+ID4gPiBA QCAtMTIzLDggKzEyMyw2IEBAIF9fcnRlX3NvcmluZ19zdGFnZV9maW5hbGl6ZShzdHJ1Y3QNCj4g PiA+ID4gPiA+ID4gPiBzb3Jpbmdfc3RhZ2VfaGVhZHRhaWwgKnNodCwgdWludDMyX3Qgc3RhZ2Us DQo+ID4gPiA+ID4gPiA+ID4gIAlydGVfYXRvbWljX3N0b3JlX2V4cGxpY2l0KCZzaHQtPnRhaWwu cmF3LCBvdC5yYXcsDQo+ID4gPiA+ID4gPiA+ID4gIAkJCXJ0ZV9tZW1vcnlfb3JkZXJfcmVsZWFz ZSk7DQo+ID4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4gPiAtCS8qIG1ha2Ugc3VyZSB0aGF0 IG5ldyB0YWlsIHZhbHVlIGlzIHZpc2libGUgKi8NCj4gPiA+ID4gPiA+ID4gPiAtCXJ0ZV9hdG9t aWNfdGhyZWFkX2ZlbmNlKHJ0ZV9tZW1vcnlfb3JkZXJfcmVsZWFzZSk7DQo+ID4gPiA+ID4gPiA+ ID4gIAlyZXR1cm4gaTsNCj4gPiA+ID4gPiA+ID4gPiAgfQ0KPiA+ID4gPiA+ID4gPiA+DQo+ID4g PiA+ID4gPiA+ID4gQEAgLTIxOSw5ICsyMTcsNiBAQCBfX3J0ZV9zb3JpbmdfdXBkYXRlX3RhaWwo c3RydWN0DQo+ID4gPiA+ID4gPiBfX3J0ZV9yaW5nX2hlYWR0YWlsDQo+ID4gPiA+ID4gPiA+ID4g KnJodCwNCj4gPiA+ID4gPiA+ID4gPiAgCQkvKiB1bnN1cHBvcnRlZCBtb2RlLCBzaG91bGRuJ3Qg YmUgaGVyZSAqLw0KPiA+ID4gPiA+ID4gPiA+ICAJCVJURV9BU1NFUlQoMCk7DQo+ID4gPiA+ID4g PiA+ID4gIAl9DQo+ID4gPiA+ID4gPiA+ID4gLQ0KPiA+ID4gPiA+ID4gPiA+IC0JLyogbWFrZSBz dXJlIHRoYXQgbmV3IHRhaWwgdmFsdWUgaXMgdmlzaWJsZSAqLw0KPiA+ID4gPiA+ID4gPiA+IC0J cnRlX2F0b21pY190aHJlYWRfZmVuY2UocnRlX21lbW9yeV9vcmRlcl9yZWxlYXNlKTsNCj4gPiA+ ID4gPiA+ID4gPiAgfQ0KPiA+ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+ID4gIHN0YXRpYyBf X3J0ZV9hbHdheXNfaW5saW5lIHVpbnQzMl90DQo+ID4gPiA+ID4gPiA+ID4gLS0NCj4gPiA+ID4g PiA+ID4gPiAyLjQzLjANCg0K