From mboxrd@z Thu Jan 1 00:00:00 1970 From: Subject: Re: [PATCH 3/3] net: macb: add missing barriers when reading buffers Date: Wed, 12 Dec 2018 10:58:02 +0000 Message-ID: <0212fb04-8c2d-264c-a459-6d579a56507e@microchip.com> References: <20181130182137.27974-1-anssi.hannula@bitwise.fi> <20181130182137.27974-4-anssi.hannula@bitwise.fi> <6378cbaf-2c8d-3c22-2d2d-632c32c6195a@microchip.com> <567c5ea6-d74d-5398-aee5-2b486ddff983@bitwise.fi> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Cc: , , To: Return-path: Received: from esa1.microchip.iphmx.com ([68.232.147.91]:36840 "EHLO esa1.microchip.iphmx.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727332AbeLLK6H (ORCPT ); Wed, 12 Dec 2018 05:58:07 -0500 In-Reply-To: Content-Language: en-US Content-ID: <52518A2E85D7104986FF50937668B2BC@namprd11.prod.outlook.com> Sender: netdev-owner@vger.kernel.org List-ID: DQoNCk9uIDExLjEyLjIwMTggMTU6MjEsIEFuc3NpIEhhbm51bGEgd3JvdGU6DQo+IE9uIDEwLjEy LjIwMTggMTI6MzQsIENsYXVkaXUuQmV6bmVhQG1pY3JvY2hpcC5jb20gd3JvdGU6DQo+PiBPbiAw Ny4xMi4yMDE4IDE0OjAwLCBBbnNzaSBIYW5udWxhIHdyb3RlOg0KPj4+IE9uIDYuMTIuMjAxOCAx NjoxNCwgQ2xhdWRpdS5CZXpuZWFAbWljcm9jaGlwLmNvbSB3cm90ZToNCj4+Pj4gSGkgQW5zc2ks DQo+Pj4gSGkhDQo+Pj4NCj4+Pj4gT24gMDUuMTIuMjAxOCAxNjowMCwgQW5zc2kgSGFubnVsYSB3 cm90ZToNCj4+Pj4+IE9uIDUuMTIuMjAxOCAxNDozNywgQ2xhdWRpdS5CZXpuZWFAbWljcm9jaGlw LmNvbSB3cm90ZToNCj4+Pj4+PiBPbiAzMC4xMS4yMDE4IDIwOjIxLCBBbnNzaSBIYW5udWxhIHdy b3RlOg0KPj4+Pj4+PiBXaGVuIHJlYWRpbmcgYnVmZmVyIGRlc2NyaXB0b3JzIG9uIFJYIG9yIG9u IFRYIGNvbXBsZXRpb24sIGFuDQo+Pj4+Pj4+IFJYX1VTRUQvVFhfVVNFRCBiaXQgaXMgY2hlY2tl ZCBmaXJzdCB0byBlbnN1cmUgdGhhdCB0aGUgZGVzY3JpcHRvciBoYXMNCj4+Pj4+Pj4gYmVlbiBw b3B1bGF0ZWQuIEhvd2V2ZXIsIHRoZXJlIGFyZSBubyBtZW1vcnkgYmFycmllcnMgdG8gZW5zdXJl IHRoYXQgdGhlDQo+Pj4+Pj4+IGRhdGEgcHJvdGVjdGVkIGJ5IHRoZSBSWF9VU0VEL1RYX1VTRUQg Yml0IGlzIHVwLXRvLWRhdGUgd2l0aCByZXNwZWN0IHRvDQo+Pj4+Pj4+IHRoYXQgYml0Lg0KPj4+ Pj4+Pg0KPj4+Pj4+PiBGaXggdGhhdCBieSBhZGRpbmcgRE1BIHJlYWQgbWVtb3J5IGJhcnJpZXJz IG9uIHRob3NlIHBhdGhzLg0KPj4+Pj4+Pg0KPj4+Pj4+PiBJIGRpZCBub3Qgb2JzZXJ2ZSBhbnkg YWN0dWFsIGlzc3VlcyBjYXVzZWQgYnkgdGhlc2UgYmVpbmcgbWlzc2luZywNCj4+Pj4+Pj4gdGhv dWdoLg0KPj4+Pj4+Pg0KPj4+Pj4+PiBUZXN0ZWQgb24gYSBaeW5xTVAgYmFzZWQgc3lzdGVtLg0K Pj4+Pj4+Pg0KPj4+Pj4+PiBTaWduZWQtb2ZmLWJ5OiBBbnNzaSBIYW5udWxhIDxhbnNzaS5oYW5u dWxhQGJpdHdpc2UuZmk+DQo+Pj4+Pj4+IEZpeGVzOiA4OWU1Nzg1ZmM4YTYgKCJbUEFUQ0hdIEF0 bWVsIE1BQ0IgZXRoZXJuZXQgZHJpdmVyIikNCj4+Pj4+Pj4gQ2M6IE5pY29sYXMgRmVycmUgPG5p Y29sYXMuZmVycmVAbWljcm9jaGlwLmNvbT4NCj4+Pj4+Pj4gLS0tDQo+Pj4+Pj4+ICBkcml2ZXJz L25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jIHwgMjAgKysrKysrKysrKysrKysrKy0t LS0NCj4+Pj4+Pj4gIDEgZmlsZSBjaGFuZ2VkLCAxNiBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9u cygtKQ0KPj4+Pj4+Pg0KPj4+Pj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQv Y2FkZW5jZS9tYWNiX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9t YWluLmMNCj4+Pj4+Pj4gaW5kZXggNDMwYjdhMGY1NDM2Li5jOTNiYWE4NjIxZDUgMTAwNjQ0DQo+ Pj4+Pj4+IC0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMNCj4+ Pj4+Pj4gKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYw0KPj4+ Pj4+PiBAQCAtODYxLDYgKzg2MSwxMSBAQCBzdGF0aWMgdm9pZCBtYWNiX3R4X2ludGVycnVwdChz dHJ1Y3QgbWFjYl9xdWV1ZSAqcXVldWUpDQo+Pj4+Pj4+ICANCj4+Pj4+Pj4gIAkJCS8qIEZpcnN0 LCB1cGRhdGUgVFggc3RhdHMgaWYgbmVlZGVkICovDQo+Pj4+Pj4+ICAJCQlpZiAoc2tiKSB7DQo+ Pj4+Pj4+ICsJCQkJLyogRW5zdXJlIGFsbCBvZiBkZXNjIGlzIGF0IGxlYXN0IGFzIHVwLXRvLWRh dGUNCj4+Pj4+Pj4gKwkJCQkgKiBhcyBjdHJsIChUWF9VU0VEIGJpdCkNCj4+Pj4+Pj4gKwkJCQkg Ki8NCj4+Pj4+Pj4gKwkJCQlkbWFfcm1iKCk7DQo+Pj4+Pj4+ICsNCj4+Pj4+PiBJcyB0aGlzIG5l Y2Vzc2FyeT8gV291bGRuJ3QgcHJldmlvdXMgcm1iKCkgdGFrZSBjYXJlIG9mIHRoaXM/IEF0IHRo aXMgdGltZQ0KPj4+Pj4+IGRhdGEgc3BlY2lmaWMgdG8gdGhpcyBkZXNjcmlwdG9yIHdhcyBjb21w bGV0ZWQuIFRoZSBUWCBkZXNjcmlwdG9ycyBmb3IgbmV4dA0KPj4+Pj4+IGRhdGEgdG8gYmUgc2Vu ZCBpcyB1cGRhdGVkIHVuZGVyIGEgbG9ja2VkIHNwaW5sb2NrLg0KPj4+Pj4gVGhlIHByZXZpb3Vz IHJtYigpIGlzIGJlZm9yZSB0aGUgVFhfVVNFRCBjaGVjaywgc28gbXkgdW5kZXJzdGFuZGluZyBp cw0KPj4+Pj4gdGhhdCB0aGUgZm9sbG93aW5nIGNvdWxkIGhhcHBlbiBpbiB0aGVvcnk6DQo+Pj4+ IFdlIGFyZSB1c2luZyB0aGlzIElQIG9uIGFuZCBBUk0gYXJjaGl0ZWN0dXJlLCBzbywgd2l0aCBy ZWdhcmRzIHRvIHJtYigpLCBJDQo+Pj4+IHVuZGVyc3RhbmQgZnJvbSBbMV0gdGhhdCBkc2IgY29t cGxldGVzIHdoZW46DQo+Pj4+ICJBbGwgZXhwbGljaXQgbWVtb3J5IGFjY2Vzc2VzIGJlZm9yZSB0 aGlzIGluc3RydWN0aW9uIGNvbXBsZXRlLg0KPj4+PiBBbGwgQ2FjaGUsIEJyYW5jaCBwcmVkaWN0 b3IgYW5kIFRMQiBtYWludGVuYW5jZSBvcGVyYXRpb25zIGJlZm9yZSB0aGlzDQo+Pj4+IGluc3Ry dWN0aW9uIGNvbXBsZXRlLiINCj4+Pj4NCj4+Pj4+IDEuIHJtYigpLg0KPj4+PiBBY2NvcmRpbmcg dG8gWzFdIHRoaXMgc2hvdWxkIGVuZCBhZnRlciBhbGwgcHJldmlvdXMgaW5zdHJ1Y3Rpb25zIChs b2FkcywNCj4+Pj4gc3RvcmVzKSBlbmRzLg0KPj4+Pg0KPj4+Pj4gMi4gUmVhZHMgYXJlIHJlb3Jk ZXJlZCBzbyB0aGF0IFRYIHRpbWVzdGFtcCBpcyByZWFkIGZpcnN0IC0gbm8gYmFycmllcnMNCj4+ Pj4+IGFyZSBjcm9zc2VkLg0KPj4+PiBCdXQsIGFzIHBlciBbMV0sIG5vIG9ud2FyZCBpbnN0cnVj dGlvbiB3aWxsIGJlIHJlYWNoZWQgdW50aWwgYWxsDQo+Pj4+IGluc3RydWN0aW9uIHByaW9yIHRv IGRzYiBlbmRzLCBzbywgYWZ0ZXIgcm1iKCkgYWxsIGRlc2NyaXB0b3IncyBtZW1iZXJzDQo+Pj4+ IHNob3VsZCBiZSB1cGRhdGVkLCByaWdodD8NCj4+PiBUaGUgZGVzY3JpcHRvciB0aGF0IHRyaWdn ZXJlZCB0aGUgVFggaW50ZXJydXB0IHNob3VsZCBiZSB2aXNpYmxlIG5vdywgeWVzLg0KPj4+IEhv d2V2ZXIsIHRoZSBjb250cm9sbGVyIG1heSBiZSB3cml0aW5nIHRvIGFueSBvdGhlciBkZXNjcmlw dG9ycyBhdCB0aGUNCj4+PiBzYW1lIHRpbWUgYXMgdGhlIGxvb3AgaXMgcHJvY2Vzc2luZyB0aHJv dWdoIHRoZW0sIGFzIHRoZXJlIGFyZSBtdWx0aXBsZQ0KPj4+IFRYIGJ1ZmZlcnMuDQo+PiBZZXMs IGJ1dCB0aGVyZSBpcyB0aGUgInJtYigpIiBhZnRlciAiZGVzYyA9IG1hY2JfdHhfZGVzYyhxdWV1 ZSwgdGFpbCk7IiBhdA0KPj4gdGhlIGJlZ2lubmluZyBvZiBsb29wIGludGVuZGVkIGZvciB0aGF0 Li4uIEluIHRoZSAybmQgbG9vcCB5b3UgYXJlDQo+PiBvcGVyYXRpbmcgd2l0aCB0aGUgc2FtZSBk ZXNjcmlwdG9yIHdoaWNoIHdhcyByZWFkIGluIHRoZSBmaXJzdCBsb29wLg0KPiANCj4gSSdtIGNv bmNlcm5lZCBhYm91dCB0aGUgMm5kIGl0ZXJhdGlvbiBvZiB0aGUgZmlyc3QgZm9yIGxvb3AgaW4N Cj4gbWFjYl90eF9pbnRlcnJ1cHQoKS4NCj4gVGhhdCBvcGVyYXRlcyBvbiBhIGRpZmZlcmVudCBk ZXNjcmlwdG9yIGR1ZSB0byB0YWlsKyssIGFuZCB0aGF0DQo+IGRpZmZlcmVudCBkZXNjcmlwdG9y IG1heSBoYXZlIGluLWZsaWdodCB3cml0ZXMgZnJvbSBjb250cm9sbGVyIGFzIHRoZQ0KPiBpbnRl cnJ1cHQgbWF5IG9yIG1heSBub3QgYWxyZWFkeSBiZSByYWlzZWQgZm9yIGl0Lg0KDQpJIGFncmVl IHdpdGggdGhhdCwgdGhlcmUgbWF5IGJlIGluLWZsaWdodHMgdXBkYXRlcywgYnV0IHNpbmNlIG93 bmVyc2hpcCBiaXQNCnNob3VsZCBiZSB1cGRhdGVkIGF0IHRoZSBlbmQgb2YgdGhlIFRYIChJIGV4 cGVjdCBhdCB0aGlzIG1vbWVudCB0byBiZQ0KdXBkYXRlZCBhbGwgdGhlIGRlc2NyaXB0b3IncyBw YXJ0cywgaW5jbHVkaW5nIHRpbWVzdGFtcHMpLCBpZiB5b3UgcmVhZCBhDQpkZXNjcmlwdG9yIGFu ZCBpdCBoYXNuJ3QgYmVlbiB0cmVhdGVkIGJ5IHRoZSBoYXJkd2FyZSB0aGUgZGVzY3JpcHRvciBp cyBvd24NCmJ5IHRoZSBoYXJkd2FyZSBhbmQgdGhlcmUgaXMgdGhpcyBjaGVjayBhZnRlciBjdHJs IGlzIHJlYWQ6DQoNCmlmICghKGN0cmwgJiBNQUNCX0JJVChUWF9VU0VEKSkpDQoJYnJlYWs7DQoN Ck5leHQgdGltZSBhIG5ldyB0eCBpbnRlcnJ1cHQgd2lsbCBiZSByYWlzZWQgdGhpcyBkZXNjcmlw dG9yIHdvdWxkIGJlIGFsc28NCnRyZWF0ZWQuDQoNCkluIGNhc2UgdGhlIGFib3ZlIGluc3RydWN0 aW9uIGRvZXNuJ3QgYnJlYWsgdGhlbiBpdCBtZWFucyB0aGUgZGVzY3JpcHRvcg0Kd2FzIHRyYW5z bWl0dGVkLiBBbmQgc2luY2Ugb3duZXJzaGlwIHNob3VsZCBiZSB1cGRhdGVkIGF0IHRoZSBlbmQg b2YgdGhlDQpUWCwgdGhpcyBtZWFucyBubyBpbi1mbGlnaHRzIHVwZGF0ZXMgc2hvdWxkIGJlIGRv bmUgb24gdGhpcyBkZXNjcmlwdG9yLCBzbywNCndoZW4geW91IHdpbGwgcmVhZCB0aGUgdGltZXN0 YW1wcyB0aGVzZSBzaG91bGQgYmUgdGhlIGdvb2Qgb25lcyAoZXZlbiBpdCBpcw0KdGhlIGZpcnN0 IG9uZSwgdGhlIDNyZCwgYW5kIHNvIG9uKS4NCg0KTW9yZW92ZXIsIHRoaXMgbmV3IGJhcnJpZXIg YmFycmllciBpcyBpbiB0aGUgMm5kIGxvb3AsIHlvdSdyZSBwbGFjaW5nIGENCm1lbW9yeSBiYXJy aWVyIGFmdGVyIGV2ZXJ5IHN0ZXAgaW4gdGhlIDJuZCBsb29wIGZvciB0aGUgc2FtZSBkZXNjcmlw dG9yDQpyZWFkIGluIHRoZSAxc3QgbG9vcCAoaXQgd2FzIGFscmVhZHkgbG9hZGVkIGluIGEgcHJv Y2Vzc29yIHJlZ2lzdGVyKS4NCg0KVG8gYXZvaWQgcmVvcmRlcmluZyBvZiBjdHJsIGFuZCB0czEv dHMyIGxvYWRzIHdvdWxkbid0IGJlIGVub3VnaCB0byBoYXZlDQptZW1vcnkgYmFycmllciBhZnRl cjoNCmN0cmwgPSBkZXNjLT5jdHJsOw0KDQo+IA0KPiBPciBhbSBJIG1pc3Npbmcgc29tZXRoaW5n Pw0KPiANCj4+Pj4+IDMuIEhXIHdyaXRlcyB0aW1lc3RhbXAgYW5kIHNldHMgVFhfVVNFRCAob3Ig dGhleSBiZWNvbWUgdmlzaWJsZSkuDQo+Pj4+IEkgZXhwZWN0IGhhcmR3YXJlIHRvIHNldCBUWF9V U0VEIGFuZCB0aW1lc3RhbXAgYmVmb3JlIHJhaXNpbmcgVFggY29tcGxldGUNCj4+Pj4gaW50ZXJy dXB0LiBJZiBzbywgdGhlcmUgc2hvdWxkIGJlIG5vIG9uLWZsaWdodCB1cGRhdGVzIG9mIHRoaXMg ZGVzY3JpcHRvciwNCj4+Pj4gcmlnaHQ/IEhhcmR3YXJlIHJhaXNlZCBhIFRYX1VTRUQgYml0IHJl YWQgaW50ZXJydXB0IHdoZW4gaXQgcmVhZHMgYQ0KPj4+PiBkZXNjcmlwdG9yIGxpa2UgdGhpcyBh bmQgaGFuZ3MgVFguDQo+Pj4gRm9yIHRoZSBmaXJzdCBpdGVyYXRpb24gb2YgdGhlIGxvb3AsIHRo YXQgaXMgY29ycmVjdCAtIHRoZXJlIHNob3VsZCBiZQ0KPj4+IG5vIGluLWZsaWdodCB3cml0ZXMg ZnJvbSBjb250cm9sbGVyIGFzIGl0IGFscmVhZHkgcmFpc2VkIHRoZSBpbnRlcnJ1cHQuDQo+Pj4g SG93ZXZlciwgdGhlIGZvbGxvd2luZyBpdGVyYXRpb25zIG9mIHRoZSBsb29wIHByb2Nlc3MgZGVz Y3JpcHRvcnMgdGhhdA0KPj4+IG1heSBvciBtYXkgbm90IGhhdmUgdGhlIGludGVycnVwdCByYWlz ZWQgeWV0LCBhbmQgdGhlcmVmb3JlIG1heSBzdGlsbA0KPj4+IGhhdmUgaW4tZmxpZ2h0IHdyaXRl cy4NCj4+IEkgZXhwZWN0IHRoZSBoYXJkd2FyZSB0byBnaXZlIHVwIG93bmVyc2hpcCBvZiB0aGUg ZGVzY3JpcHRvciBqdXN0IGF0IHRoZQ0KPj4gZW5kIG9mIFRYIG9wZXJhdGlvbiwgc28gdGhhdCB0 aGUgd29yZCBjb250YWluaW5nIFRYX1VTRUQgdG8gYmUgdGhlIGxhc3Qgb25lDQo+PiB1cGRhdGVk LiBJZiB5b3UgcmVhZHMgdGhlIGRlc2NyaXB0b3IgYW5kIFRYX1VTRUQgaXMgbm90IHRoZXJlIHRo ZSBmaXJzdA0KPj4gbG9vcCBicmVha3MsIHF1ZXVlLT50eF90YWlsIGlzIHVwZGF0ZWQgd2l0aCB0 aGUgbGFzdCBwcm9jZXNzZWQgZGVzY3JpcHRvcg0KPj4gaW4gdGhlIHF1ZXVlIChzZWUgInF1ZXVl LT50eF90YWlsID0gdGFpbDsiKSB0aGVuIHRoZSBuZXh0IGludGVycnVwdCB3aWxsDQo+PiBzdGFy dCBwcm9jZXNzaW5nIHdpdGggdGhpcyBsYXN0IG9uZSBkZXNjcmlwdG9yLg0KPiANCj4gQWdyZWVk LCB0aGF0IGlzIGhvdyBpdCB3b3Jrcy4gSXNzdWVzIG9ubHkgb2NjdXIgaWYgd2Ugc29tZWhvdyBv cGVyYXRlIG9uDQo+IGRhdGEgYmVmb3JlIG93bmVyc2hpcCB3YXMgdHJhbnNmZXJyZWQuDQoNCkNv dWxkIHRoaXMgaGFwcGVucz8gU2hvdWxkbid0IHRoaXM6DQoJaWYgKCEoY3RybCAmIE1BQ0JfQklU KFRYX1VTRUQpKSkNCgkJYnJlYWs7DQoNCmFzc3VyZSB0aGF0IHRoaXMgY291bGQgbm90IGhhcHBl biBhbmQgdGhlIGZhY3QgdGhhdCB0aGUgb3duZXJzaGlwIGlzIHBhc3NlZA0KdG8gQ1BVIGF0IHRo ZSBlbmQgb2YgZGVzY3JpcHRvciB1cGRhdGU/DQoNCklmIGxvYWQgcmVvcmRlcmluZyBiL3cgZGVz Yy0+Y3RybCBhbmQgZGVzYy0+dHNfMS90c18yIHdvdWxkbid0IGJlIGVub3VnaCB0bw0KaGF2ZSBh IGJhcnJpZXIgYWZ0ZXINCmN0cmwgPSBkZXNjLT5jdHJsIGluc3RydWN0aW9uPw0KDQo+IA0KPj4+ Pj4gNC4gQ29kZSBjaGVja3MgVFhfVVNFRC4NCj4+Pj4+IDUuIENvZGUgb3BlcmF0ZXMgb24gdGlt ZXN0YW1wIHRoYXQgaXMgYWN0dWFsbHkgZ2FyYmFnZS4NCj4+Pj4+DQo+Pj4+PiBJJ20gbm90IDEw MCUgc3VyZSB0aGF0IHRoZXJlIGlzbid0IHNvbWUgbGlnaHRlci9jbGVhbmVyIHdheSB0byBkbyB0 aGlzDQo+Pj4+PiB0aGFuIGRtYV9ybWIoKSwgdGhvdWdoLg0KPj4+PiBJZiB5b3Ugc3RpbGwgdGhp bmsgdGhpcyBzY2VuYXJpbyBjb3VsZCBoYXBwZW4gd2h5IG5vdCBjYWxsaW5nIGEgZHNiIGluDQo+ Pj4+IGdlbV9wdHBfZG9fdGltZXN0YW1wKCkuIEkgZmVlbCBsaWtlIHRoYXQgaXMgYSBwcm9wZXIg cGxhY2UgdG8gY2FsbCBpdC4NCj4+PiBPSywgSSB3aWxsIG1vdmUgaXQgdGhlcmUuIFVubGVzcyB3 ZSBhcnJpdmUgYXQgYSBjb25jbHVzaW9uIHRoYXQgaXQgaXMNCj4+PiB1bm5lY2Vzc2FyeSBhbHRv Z2V0aGVyLCBvZiBjb3Vyc2UgOikNCj4+Pg0KPj4+PiBNb3Jlb3ZlciwgdGhlcmUgaXMgYml0IDMy IG9mIGRlc2MtPmN0cmwgd2hpY2ggdGVsbHMgeW91IGlmIGEgdmFsaWQNCj4+Pj4gdGltZXN0YW1w IHdhcyBwbGFjZWQgaW4gdGhlIGRlc2NyaXB0b3IuIEJ1dCwgYWdhaW4sIEkgZXhwZWN0IHRoZSB0 aW1lc3RhbXANCj4+Pj4gYW5kIFRYX1VTRUQgdG8gYmUgc2V0IGJ5IGhhcmR3YXJlIGJlZm9yZSBy YWlzaW5nIFRYIGNvbXBsZXRlIGludGVycnVwdC4NCj4+PiBZZXMsIGJ1dCBzaW5jZSBteSBjb25j ZXJuIGlzIHRoYXQgd2l0aG91dCBiYXJyaWVycyBpbiBiZXR3ZWVuLA0KPj4+IGRlc2MtPmN0cmwg bWlnaHQgYmUgcmVhZCBhZnRlciB0c18xL3RzXzIsIHNvIHRoYXQgYml0IG1pZ2h0IGJlIHNlZW4g YXMNCj4+PiBzZXQgZXZlbiB0aG91Z2ggdHNfMSBpcyBub3QgeWV0IGFuIGFjdHVhbCB0aW1lc3Rh bXAuIEFuZCBwZXIgYWJvdmUsIGFsbA0KPj4+IHRoaXMgbWF5IG9jY3VyIGJlZm9yZSB0aGUgVFgg Y29tcGxldGUgaW50ZXJydXB0IGlzIHJhaXNlZCBmb3IgdGhlDQo+Pj4gZGVzY3JpcHRvciBpbiBx dWVzdGlvbi4NCj4+IElmIHNvLCB3aHkgbm90IHBsYWNpbmcgdGhlIGJhcnJpZXIgd2hlbiByZWFk aW5nIHRpbWVzdGFtcHM/IEZyb20gbXkgcG9pbnQNCj4+IG9mIHZpZXcgdGhlIHBsYWNlIG9mICJk bWFfcm1iKCkiIGluIHRoaXMgcGF0Y2ggZG9lc24ndCBndWFyYW50ZWVzIHRoYXQNCj4+IHRzMS90 czIgd2VyZSByZWFkIGFmdGVyIHRoZSBleGVjdXRpb24gb2YgYmFycmllciAoY29ycmVjdCBtZSBp ZiBJJ20gd3JvbmcpLg0KPiANCj4gSWYgdGhlIHRpbWVzdGFtcCB0czEvdHMyIHJlYWRzIGFyZSBk b25lIGFmdGVyIGRtYV9ybWIoKSwgYW5kIGRldi0+Y3RybA0KPiBpcyByZWFkIGJlZm9yZSB0aGUg YmFycmllciwgbXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IHRoZXkgYXJlIGd1YXJhbnRlZWQNCj4g dG8gYmUgb3JkZXJlZCBzbyB0aGF0IGRldi0+Y3RybCBpcyByZWFkIGJlZm9yZSB0czEvdHMyLg0K PiANCj4gUGVyIFsxXSwgIltETUJdIGVuc3VyZXMgdGhhdCBhbGwgZXhwbGljaXQgbWVtb3J5IGFj Y2Vzc2VzIHRoYXQgYXBwZWFyIGluDQo+IHByb2dyYW0gb3JkZXIgYmVmb3JlIHRoZSB8RE1CfCBp bnN0cnVjdGlvbiBhcmUgb2JzZXJ2ZWQgYmVmb3JlIGFueQ0KPiBleHBsaWNpdCBtZW1vcnkgYWNj ZXNzZXMgdGhhdCBhcHBlYXIgaW4gcHJvZ3JhbSBvcmRlciBhZnRlciB0aGUgfERNQnwNCj4gaW5z dHJ1Y3Rpb24iLg0KPiBBbmQgdGhlIGNvbXBpbGVyIGJhcnJpZXIgKCJtZW1vcnkiIGFzbSBjbG9i YmVyKSBpbmNsdWRlZCB3aXRoaW4NCj4gZG1hX3JtYigpIGVuc3VyZXMgdGhhdCBpbiBwcm9ncmFt IG9yZGVyLCBjdHJsIGlzIGxvYWRlZCBiZWZvcmUgdGhlDQo+IGJhcnJpZXIsIGFuZCB0czEvdHMy IGFmdGVyIGl0Lg0KPiANCj4gQnV0IGFzIG1lbnRpb25lZCwgaXQgbWFrZXMgc2Vuc2UgdG8gaGF2 ZSBpdCBjbG9zZXIgdG8gdGhlIHRzMS90czIgcmVhZHMNCj4gc28gSSdsbCBtYWtlIHRoYXQgY2hh bmdlLg0KPiANCj4gWzFdDQo+IGh0dHA6Ly9pbmZvY2VudGVyLmFybS5jb20vaGVscC9pbmRleC5q c3A/dG9waWM9L2NvbS5hcm0uZG9jLmR1aTA0ODljL0NJSEdISElFLmh0bWwNCj4gDQo+IA0KPj4+ IEkgYWdyZWUgdGhhdCB0aGlzIFRYIGNhc2Ugc2VlbXMgc29tZXdoYXQgdW5saWtlbHkgdG8gYmUg dHJpZ2dlcmVkIGluDQo+Pj4gcmVhbCBsaWZlIGF0IGxlYXN0IGF0IHByZXNlbnQsIHRob3VnaCwg YXMgdGhlIHRzXzEvdHNfMiByZWFkIGlzIHNvIGZhcg0KPj4+IGFmdGVyIHRoZSBkZXNjLT5jdHJs IHJlYWQsIGFuZCBiZWhpbmQgZnVuY3Rpb24gY2FsbHMsIHNvIHVubGlrZWx5IHRvIGJlDQo+Pj4g cmVvcmRlcmVkIGJlZm9yZSBkZXNjLT5jdHJsIHJlYWQuDQo+Pj4gQnV0IHRoZSBzaW1pbGFyIFJY IGNhc2VzIGJlbG93IHNlZW0gbW9yZSBwcm9ibGVtYXRpYyBhcyB0aGUgcmFjeSBsb2Fkcw0KPj4+ IGluIHF1ZXN0aW9uIGFyZSByaWdodCBhZnRlciBlYWNoIG90aGVyIGluIGNvZGUuDQo+Pj4NCj4+ Pj4gWzFdDQo+Pj4+IGh0dHA6Ly9pbmZvY2VudGVyLmFybS5jb20vaGVscC9pbmRleC5qc3A/dG9w aWM9L2NvbS5hcm0uZG9jLmR1aTA0ODljL0NJSEdISElFLmh0bWwNCj4+Pj4NCj4+Pj4+Pj4gIAkJ CQlpZiAoZ2VtX3B0cF9kb190eHN0YW1wKHF1ZXVlLCBza2IsIGRlc2MpID09IDApIHsNCj4+Pj4+ Pj4gIAkJCQkJLyogc2tiIG5vdyBiZWxvbmdzIHRvIHRpbWVzdGFtcCBidWZmZXINCj4+Pj4+Pj4g IAkJCQkJICogYW5kIHdpbGwgYmUgcmVtb3ZlZCBsYXRlcg0KPj4+Pj4+PiBAQCAtMTAwMCwxMiAr MTAwNSwxNiBAQCBzdGF0aWMgaW50IGdlbV9yeChzdHJ1Y3QgbWFjYl9xdWV1ZSAqcXVldWUsIGlu dCBidWRnZXQpDQo+Pj4+Pj4+ICAJCXJtYigpOw0KPj4+Pj4+PiAgDQo+Pj4+Pj4+ICAJCXJ4dXNl ZCA9IChkZXNjLT5hZGRyICYgTUFDQl9CSVQoUlhfVVNFRCkpID8gdHJ1ZSA6IGZhbHNlOw0KPj4+ Pj4+PiAtCQlhZGRyID0gbWFjYl9nZXRfYWRkcihicCwgZGVzYyk7DQo+Pj4+Pj4+IC0JCWN0cmwg PSBkZXNjLT5jdHJsOw0KPj4+Pj4+PiAgDQo+Pj4+Pj4+ICAJCWlmICghcnh1c2VkKQ0KPj4+Pj4+ PiAgCQkJYnJlYWs7DQo+Pj4+Pj4+ICANCj4+Pj4+Pj4gKwkJLyogRW5zdXJlIG90aGVyIGRhdGEg aXMgYXQgbGVhc3QgYXMgdXAtdG8tZGF0ZSBhcyByeHVzZWQgKi8NCj4+Pj4+Pj4gKwkJZG1hX3Jt YigpOw0KPj4+Pj4+IFNhbWUgaGVyZSwgd291bGRuJ3QgcHJldmlvdXMgcm1iKCkgc2hvdWxkIGRv IHRoaXMgam9iPw0KPj4+Pj4gVGhlIHNjZW5hcmlvIEknbSBjb25jZXJuZWQgYWJvdXQgaGVyZSAo YW5kIGluIHRoZSBsYXN0IGh1bmspIGlzOg0KPj4+Pj4NCj4+Pj4+IDEuIHJtYigpLg0KPj4+Pj4g Mi4gY3RybCBpcyByZWFkIChpLmUuIGN0cmwgcmVhZCByZW9yZGVyZWQgYmVmb3JlIGFkZHIgcmVh ZCkuDQo+Pj4+IFNhbWUgaGVyZSB3aXRoIHJlZ2FyZHMgdG8gWzFdLiBBbGwgcHJpb3IgbG9hZHMs IHN0b3JlcyBzaG91bGQgYmUgZmluaXNoZWQNCj4+Pj4gd2hlbiBkc2IgZW5kcy4NCj4+PiBZZXMs IGJ1dCB0aGUgcHJvYmxlbWF0aWMgbG9hZHMgYXJlICphZnRlciogdGhlIGRzYi4NCj4+Pg0KPj4+ Pj4gMy4gSFcgdXBkYXRlcyB0byBjdHJsIGFuZCBhZGRyIGJlY29tZSB2aXNpYmxlLg0KPj4+Pj4g NC4gUlhfVVNFRCBjaGVjay4NCj4+Pj4+IDUuIGNvZGUgb3BlcmF0ZXMgb24gZ2FyYmFnZSBjdHJs Lg0KPj4+PiBJZiB0aGlzIGlzIGhhcHBlbiB0aGVuIHRoZSBkYXRhIHdpbGwgYmUgcmVhZCBvbiBu ZXh0IGludGVycnVwdC4NCj4+PiBBcyBsb25nIGFzIHRoZSBSWF9VU0VEIGJpdCBpcyBzZXQsIHRo ZSBjb2RlIGluIGdlbV9yeCgpIHdpbGwgZWl0aGVyIGRyb3ANCj4+PiB0aGUgZnJhbWUgb3IgcHJv Y2VzcyBpdCwgZGVwZW5kaW5nIG9uIGlmIGl0IHNlZW1zIHZhbGlkIG9yIG5vdC4NCj4+IFllcywg SSB3YW50ZWQgdG8gc2F5IHRoYXQgaWYgdGhlIFJYX1VTRUQgaXMgbm90IHNldCB3aGVuIGZpcnN0 IHJlYWRpbmcgY3RybA0KPj4gdGhlbiB0aGUgZnJhbWUgd2lsbCBub3QgYmUgcHJvY2Vzc2VkIGF0 IHRoYXQgbW9tZW50IGJ1dCBvbiB0aGUgbmV4dCBpbnRlcnJ1cHQuDQo+IA0KPiBBZ3JlZWQsIGFu ZCB0aGUgUlhfVVNFRD0wIGNhc2UgbG9va3MgT0sgdG8gbWUgdG9vLiBUaGUgaXNzdWUgaXMgb25s eQ0KPiB3aXRoIFJYX1VTRUQ9MS4NCj4gDQo+PiBJdCB3aWxsDQo+Pj4gbm90IGJlIHByb2Nlc3Nl ZCBhZ2FpbiBvbiBuZXh0IGludGVycnVwdC4NCj4+Pg0KPj4+IEknbGwgdHJ5IHRvIHJlcGhyYXNl IHdoYXQgSSBtZWFudDoNCj4+Pg0KPj4+IDEuIHJtYigpLiBUaGlzIGRvZXMgbm90aGluZyBmb3Ig bG9hZHMgdGhhdCBvY2N1ciBhZnRlciBpdC4NCj4+PiAyLiBjdHJsIGlzIGxvYWRlZC4gSXQgZG9l cyBub3QgY29udGFpbiB2YWxpZCBkYXRhIHlldC4NCj4+PiAzLiBIVyByZWNlaXZlcyBhIG5ldyBm cmFtZSBhbmQgd3JpdGVzIGN0cmwsIGFkZHIsIGFuZCB0aGV5IGJlY29tZQ0KPj4+IHZpc2libGUg dG8gcHJvY2Vzc29yLg0KPj4+IDQuIGFkZHIgaXMgbG9hZGVkLiBJdCBjb250YWlucyB0aGUgUlhf VVNFRD0xIGFzIHdyaXR0ZW4gaW4gc3RlcCAzLg0KPj4+IDUuIENvZGUgZG9lcyB0aGUgUlhfVVNF RCBjaGVjaywgaXQgc2VlcyAxIGFuZCBjb250aW51ZXMgcHJvY2Vzc2luZyB0aGUNCj4+PiBmcmFt ZS4NCj4+PiA2LiBDb2RlIG9wZXJhdGVzIG9uIGN0cmwsIGJ1dCBhcyBpdCB3YXMgbG9hZGVkIGJl Zm9yZSBzdGVwIDMsIGl0DQo+Pj4gY29udGFpbnMgb2xkIGRhdGEuDQo+Pj4NCj4+PiBUaGUgb2xk IGN0cmwgbWF5IGUuZy4gY2F1c2UgdGhlIGZyYW1lIHRvIGJlIGRyb3BwZWQgZHVlIHRvIHRoZQ0K Pj4+IFJYX1NPRi9SWF9FT0YgY2hlY2suDQo+PiBZZXMsIGFncmVlLCBidXQgcGxhY2luZyBkbWFf cm1iKCkgYmVmb3JlICJjdHJsID0gZGVzYy0+Y3RybCIgd2lsbCBub3Qgc29sdmUNCj4+IHRoaXMg Y2FzZSwgcmlnaHQ/IFdoYXQgeW91IHdhbnQgaXMgdG8gaGF2ZSBjdHJsIGxvYWRlZCBhZnRlciB5 b3UgZXhlY3V0ZQ0KPj4gbmV4dCBpbnN0cnVjdGlvbiB3aGljaCByZWZlcnMgdG8gaXQuIEFjY29y ZGluZyB0byBbMV0geW91IHdpbGwgaGF2ZSB0bw0KPj4gcGxhY2UgdGhlIGRtYV9ybWIoKSBhZnRl ciB0aGUgImN0cmwgPSBkZXNjLT5jdHJsIiBpbnN0cnVjdGlvbiB0byBlbnN1cmUNCj4+IG5leHQg dGltZSB5b3UgcmVmZXIgdG8gaXQsIGl0IGNvbnRhaW5zIHRoZSBwcm9wZXIgdmFsdWUuDQo+IA0K PiBJIGRvbid0IHRoaW5rIGRvaW5nIGRtYV9ybWIoKSBhZnRlciBjdHJsIGFzc2lnbm1lbnQgd29y a3MuIEkgd2FudCB0bw0KPiBlbnN1cmUgdGhlIG9yZGVyaW5nIG9mIGxvYWRzIGJldHdlZW4gY3Ry bCBhbmQgYWRkci4NCj4gY3RybCBoYXMgdG8gYmUgYXQgbGVhc3QgYXMgInJlY2VudCIgYXMgYWRk ciB0byBhdm9pZCBhIHJhY2UuDQo+IA0KPiBJZiBJIGRpZA0KPiDCoMKgIHJ4dXNlZCA9IChkZXNj LT5hZGRyICYgTUFDQl9CSVQoUlhfVVNFRCkpID8gdHJ1ZSA6IGZhbHNlOw0KPiDCoMKgIGN0cmwg PSBkZXNjLT5jdHJsOw0KPiDCoMKgIGRtYV9ybWIoKTsNCj4gYm90aCB0aGUgY29tcGlsZXIgYW5k IHRoZSBwcm9jZXNzb3Igd291bGQgYmUgZnJlZSB0byByZW9yZGVyIHRoZSBhZGRyDQo+IGFuZCBj dHJsIGxvYWRzLCBhbmQgdGhlIHJhY2UgY29uZGl0aW9uIGRlc2NyaWJlZCBhYm92ZSBjb3VsZCBz dGlsbCBoYXBwZW4uDQo+IFRoZSBsb2FkZWQgY3RybCB2YWx1ZSB3b3VsZCBsaWtlbHkgYmUga2Vw dCBpbiBhIHJlZ2lzdGVyIGFzIGl0IGlzIHVzZWQNCj4gc2hvcnRseSBhZnRlciBkbWFfcm1iKCku IEl0IHdpbGwgbm90IGJlIHJlbG9hZGVkIGFzIHRoZSBjb21waWxlcg0KPiBjb25zaWRlcnMgZGVz Yy0+Y3RybCB0byBwb3NzaWJseSBoYXZlIGRpZmZlcmVudCBjb250ZW50cyBub3cgKGR1ZSB0byB0 aGUNCj4gY29tcGlsZXIgYmFycmllcikuDQoNCkdvb2QsIEkgdW5kZXJzdGFuZCB0aGlzLiBBZ3Jl ZS4NCg0KPiANCj4gRG9pbmcNCj4gwqDCoCByeHVzZWQgPSAoZGVzYy0+YWRkciAmIE1BQ0JfQklU KFJYX1VTRUQpKSA/IHRydWUgOiBmYWxzZTsNCj4gwqDCoCBkbWFfcm1iKCk7DQo+IMKgwqAgY3Ry bCA9IGRlc2MtPmN0cmw7DQo+IHRoZSBjb21waWxlciBiYXJyaWVyIG1ha2VzIHN1cmUgdGhhdCBp biB0aGUgZ2VuZXJhdGVkIGNvZGUsIGFkZHIgbG9hZCBpcw0KPiBiZWZvcmUgRE1CIGFuZCBjdHJs IGxvYWQgaXMgYWZ0ZXIgaXQsIGFuZCB0aGUgRE1CIG1ha2VzIHN1cmUgdGhhdCB0aGUNCj4gcHJv Y2Vzc29yIG9ic2VydmVzIHRoZSBhZGRyIGxvYWQgYmVmb3JlIHRoZSBjdHJsIGxvYWQuDQo+IA0K PiBPZiBjb3Vyc2UsIHBsZWFzZSBjb3JyZWN0IG1lIGlmIEknbSB3cm9uZyBvciBtaXNzaW5nIHNv bWV0aGluZy4NCj4gDQo+Pj4+IGRtYV9ybWIoKSBpcyBhIGRtYi4gQWNjb3JkaW5nIHRvIFsxXToN Cj4+Pj4gIkRhdGEgTWVtb3J5IEJhcnJpZXIgYWN0cyBhcyBhIG1lbW9yeSBiYXJyaWVyLiBJdCBl bnN1cmVzIHRoYXQgYWxsIGV4cGxpY2l0DQo+Pj4+IG1lbW9yeSBhY2Nlc3NlcyB0aGF0IGFwcGVh ciBpbiBwcm9ncmFtIG9yZGVyIGJlZm9yZSB0aGUgRE1CIGluc3RydWN0aW9uIGFyZQ0KPj4+PiBv YnNlcnZlZCBiZWZvcmUgYW55IGV4cGxpY2l0IG1lbW9yeSBhY2Nlc3NlcyB0aGF0IGFwcGVhciBp biBwcm9ncmFtIG9yZGVyDQo+Pj4+IGFmdGVyIHRoZSBETUIgaW5zdHJ1Y3Rpb24uIEl0IGRvZXMg bm90IGFmZmVjdCB0aGUgb3JkZXJpbmcgb2YgYW55IG90aGVyDQo+Pj4+IGluc3RydWN0aW9ucyBl eGVjdXRpbmcgb24gdGhlIHByb2Nlc3Nvci4iDQo+Pj4+DQo+Pj4+IGFuZCB5b3VyIGNvZGUgaXM6 DQo+Pj4+DQo+Pj4+IAkJLyogRW5zdXJlIG90aGVyIGRhdGEgaXMgYXQgbGVhc3QgYXMgdXAtdG8t ZGF0ZSBhcyByeHVzZWQgKi8NCj4+Pj4gCQlkbWFfcm1iKCk7DQo+Pj4+DQo+Pj4+IAkJYWRkciA9 IG1hY2JfZ2V0X2FkZHIoYnAsIGRlc2MpOw0KPj4+PiAJCWN0cmwgPSBkZXNjLT5jdHJsOw0KPj4+ Pg0KPj4+PiBJIHVuZGVyc3RhbmQgZnJvbSB0aGlzIHRoYXQgeW91IHdhbnQgdG8gd2FpdCBmb3Ig aW5zdHJ1Y3Rpb25zIHByaW9yIHRvDQo+Pj4+IGRtYV9ybWIoKSB0byBiZSBmaW5pc2hlZD8NCj4+ PiBJIHdhbnQgdGhlIGxvYWQgb2YgImRlc2MtPmFkZHIiIG9uIHRoZSAicnh1c2VkID0gKGRlc2Mt PmFkZHIgJg0KPj4+IE1BQ0JfQklUKFJYX1VTRUQpKSA/IHRydWUgOiBmYWxzZTsiIGxpbmUgdG8g YmUgb2JzZXJ2ZWQgYmVmb3JlIHRoZSBsYXRlcg0KPj4+IGxvYWRzLCBzdWNoIGFzICJkZXNjLT5j dHJsIi4NCj4+Pg0KPj4+DQo+Pj4+PiBJIHRoaW5rIGl0IG1heSBiZSBPSyB0byBtb3ZlIHRoZSBl YXJsaWVyIHJtYigpIG91dHNpZGUgdGhlIGxvb3Agc28gdGhhdA0KPj4+Pj4gdGhlcmUgaXMgYW4g cm1iKCkgb25seSBiZWZvcmUgYW5kIGFmdGVyIHRoZSBSWCBsb29wLCBhcyBJIGRvbid0IGF0IGxl YXN0DQo+Pj4+PiBpbW1lZGlhdGVseSBzZWUgYW55IGhhcmQgcmVxdWlyZW1lbnQgdG8gZG8gaXQg b24gZWFjaCBsb29wIHBhc3MgKHVubGlrZQ0KPj4+Pj4gdGhlIGFkZGVkIGRtYV9ybWIoKSkuIEJ1 dCBteSBpbnRlbnQgd2FzIHRvIGZpeCBpc3N1ZXMgaW5zdGVhZCBvZg0KPj4+Pj4gb3B0aW1pemF0 aW9uIHNvIEkgZGlkbid0IGxvb2sgdG9vIGNsb3NlbHkgaW50byB0aGF0Lg0KPj4+PiBCdXQgeW91 IHNhaWQgeW91IGRpZCBub3Qgc2VlIGFueSBpc3N1ZXMgd2l0aCB0aGUgY29kZSBhcyBpdCB3YXMg cHJldmlvdXNseS4NCj4+PiBJIG1lYW50IHRoYXQgSSBoYXZlIG5vdCBvYnNlcnZlZCBhbnkgaXNz dWVzIGluIHByYWN0aWNlICh0aG91Z2ggSQ0KPj4+IGhhdmVuJ3QgcmVhbGx5IHRyaWVkIHRvKSwg YnV0IEkgZG8gc2VlIHRoZW9yZXRpY2FsIGlzc3VlcyB3aGljaCB0aGlzDQo+Pj4gcGF0Y2ggYWRk cmVzc2VzLg0KPj4+DQo+Pj4gRXNwZWNpYWxseSB0aGUgaXNzdWVzIGFkZHJlc3NlZCBieSB0aGUg dHdvIFJYIGh1bmtzIHNlZW0gZW50aXJlbHkNCj4+PiBwb3NzaWJsZSAtIHRoZSBnZW1fcngoKSBv bmUgcmVxdWlyZXMgdGhlIGNvbXBpbGVyIHRvIGp1c3QgcmVvcmRlciB0aGUNCj4+PiB0d28gYWRq YWNlbnQgbG9hZHMsIGFuZCB0aGUgbWFjYl9yeCgpIG9uZSBkb2VzIG5vdCBldmVuIHJlcXVpcmUg YW55DQo+Pj4gcmVvcmRlcmluZyAtIGRlc2MtPmN0cmwgaXMgcmVhZCBiZWZvcmUgZGVzYy0+YWRk ciBpbiB0aGUgY29kZS4NCj4+IEluIGdlbV9yeCgpIEkgYWdyZWUgdGhhdCBhIGJhcnJpZXIgbWln aHQgYmUgbmVjZXNzYXJ5LCBidXQgcGxhY2luZyBpdCBhZnRlcg0KPj4gZGVzYy0+YWRkciB3aWxs IG5vdCBndWFyYW50ZWUgeW91IHRoYXQgdGhlIGxvYWQgb2YgYWRkciBhbmQgY3RybCB3aWxsIGJl DQo+PiBjb25zaXN0ZW50LiBBY2NvcmRpbmcgdG8gWzFdIHRoZSBiYXJyaWVyIHNob3VsZCBiZSBh ZnRlciByZWFkaW5nIG9mIGFkZHINCj4+IGFuZCBjdHJsLg0KPj4NCj4+IFRoYW5rIHlvdSwNCj4+ IENsYXVkaXUgQmV6bmVhDQo+Pg0KPj4+PiBUaGFuayB5b3UsDQo+Pj4+IENsYXVkaXUgQmV6bmVh DQo+Pj4+DQo+Pj4+Pj4+ICsNCj4+Pj4+Pj4gKwkJYWRkciA9IG1hY2JfZ2V0X2FkZHIoYnAsIGRl c2MpOw0KPj4+Pj4+PiArCQljdHJsID0gZGVzYy0+Y3RybDsNCj4+Pj4+Pj4gKw0KPj4+Pj4+PiAg CQlxdWV1ZS0+cnhfdGFpbCsrOw0KPj4+Pj4+PiAgCQljb3VudCsrOw0KPj4+Pj4+PiAgDQo+Pj4+ Pj4+IEBAIC0xMTgwLDExICsxMTg5LDE0IEBAIHN0YXRpYyBpbnQgbWFjYl9yeChzdHJ1Y3QgbWFj Yl9xdWV1ZSAqcXVldWUsIGludCBidWRnZXQpDQo+Pj4+Pj4+ICAJCS8qIE1ha2UgaHcgZGVzY3Jp cHRvciB1cGRhdGVzIHZpc2libGUgdG8gQ1BVICovDQo+Pj4+Pj4+ICAJCXJtYigpOw0KPj4+Pj4+ PiAgDQo+Pj4+Pj4+IC0JCWN0cmwgPSBkZXNjLT5jdHJsOw0KPj4+Pj4+PiAtDQo+Pj4+Pj4+ICAJ CWlmICghKGRlc2MtPmFkZHIgJiBNQUNCX0JJVChSWF9VU0VEKSkpDQo+Pj4+Pj4+ICAJCQlicmVh azsNCj4+Pj4+Pj4gIA0KPj4+Pj4+PiArCQkvKiBFbnN1cmUgb3RoZXIgZGF0YSBpcyBhdCBsZWFz dCBhcyB1cC10by1kYXRlIGFzIGFkZHIgKi8NCj4+Pj4+Pj4gKwkJZG1hX3JtYigpOw0KPj4+Pj4+ IERpdHRvDQo+Pj4+Pj4NCj4+Pj4+Pj4gKw0KPj4+Pj4+PiArCQljdHJsID0gZGVzYy0+Y3RybDsN Cj4+Pj4+Pj4gKw0KPj4+Pj4+PiAgCQlpZiAoY3RybCAmIE1BQ0JfQklUKFJYX1NPRikpIHsNCj4+ Pj4+Pj4gIAkJCWlmIChmaXJzdF9mcmFnICE9IC0xKQ0KPj4+Pj4+PiAgCQkJCWRpc2NhcmRfcGFy dGlhbF9mcmFtZShxdWV1ZSwgZmlyc3RfZnJhZywgdGFpbCk7DQo+Pj4+Pj4+DQo+IA0K