From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mgamail.intel.com (mgamail.intel.com [192.55.52.115]) by gabe.freedesktop.org (Postfix) with ESMTPS id 37C1E10E2E2 for ; Tue, 3 Oct 2023 14:25:25 +0000 (UTC) From: "Souza, Jose" To: "Dugast, Francois" Date: Tue, 3 Oct 2023 14:25:01 +0000 Message-ID: <3829acbd8159d11a1721c2817d6de254c11469b8.camel@intel.com> References: <20230928110516.7-1-francois.dugast@intel.com> <20230928110516.7-11-francois.dugast@intel.com> In-Reply-To: Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-ID: Content-Transfer-Encoding: base64 MIME-Version: 1.0 Subject: Re: [igt-dev] [PATCH v4 10/14] xe: Update to new VM bind uAPI List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: "igt-dev@lists.freedesktop.org" , "Vivi, Rodrigo" Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" List-ID: T24gVHVlLCAyMDIzLTEwLTAzIGF0IDExOjM1ICswMjAwLCBGcmFuY29pcyBEdWdhc3Qgd3JvdGU6 DQo+IE9uIEZyaSwgU2VwIDI5LCAyMDIzIGF0IDA2OjMyOjU1UE0gKzAyMDAsIFNvdXphLCBKb3Nl IHdyb3RlOg0KPiA+IE9uIFRodSwgMjAyMy0wOS0yOCBhdCAxMTowNSArMDAwMCwgRnJhbmNvaXMg RHVnYXN0IHdyb3RlOg0KPiA+ID4gRnJvbTogTWF0dGhldyBCcm9zdCA8bWF0dGhldy5icm9zdEBp bnRlbC5jb20+DQo+ID4gPiANCj4gPiA+IFN5bmMgdnMuIGFzeW5jIGNoYW5nZXMgYW5kIG5ldyBl cnJvciBoYW5kbGluZy4NCj4gPiA+IA0KPiA+ID4gU2lnbmVkLW9mZi1ieTogTWF0dGhldyBCcm9z dCA8bWF0dGhldy5icm9zdEBpbnRlbC5jb20+DQo+ID4gPiBTaWduZWQtb2ZmLWJ5OiBSb2RyaWdv IFZpdmkgPHJvZHJpZ28udml2aUBpbnRlbC5jb20+DQo+ID4gPiBbUm9kcmlnbyByZWJhc2VkIGFu ZCBmaXhlZCBjb25mbGljdHNdDQo+ID4gPiAtLS0NCj4gPiA+ICBpbmNsdWRlL2RybS11YXBpL3hl X2RybS5oICAgICAgICAgIHwgIDUwICsrLS0tLS0tDQo+ID4gPiAgbGliL2lndF9mYi5jICAgICAg ICAgICAgICAgICAgICAgICB8ICAgMiArLQ0KPiA+ID4gIGxpYi9pbnRlbF9iYXRjaGJ1ZmZlci5j ICAgICAgICAgICAgfCAgIDIgKy0NCj4gPiA+ICBsaWIvaW50ZWxfY29tcHV0ZS5jICAgICAgICAg ICAgICAgIHwgICAyICstDQo+ID4gPiAgbGliL3hlL3hlX2lvY3RsLmMgICAgICAgICAgICAgICAg ICB8ICAxNSArLS0NCj4gPiA+ICBsaWIveGUveGVfaW9jdGwuaCAgICAgICAgICAgICAgICAgIHwg ICAzICstDQo+ID4gPiAgbGliL3hlL3hlX3F1ZXJ5LmMgICAgICAgICAgICAgICAgICB8ICAgMiAr LQ0KPiA+ID4gIHRlc3RzL2ludGVsL3hlX2Njcy5jICAgICAgICAgICAgICAgfCAgIDQgKy0NCj4g PiA+ICB0ZXN0cy9pbnRlbC94ZV9jcmVhdGUuYyAgICAgICAgICAgIHwgICA2ICstDQo+ID4gPiAg dGVzdHMvaW50ZWwveGVfZHJtX2ZkaW5mby5jICAgICAgICB8ICAgNCArLQ0KPiA+ID4gIHRlc3Rz L2ludGVsL3hlX2V2aWN0LmMgICAgICAgICAgICAgfCAgMjMgKystLQ0KPiA+ID4gIHRlc3RzL2lu dGVsL3hlX2V4ZWNfYmFsYW5jZXIuYyAgICAgfCAgIDYgKy0NCj4gPiA+ICB0ZXN0cy9pbnRlbC94 ZV9leGVjX2Jhc2ljLmMgICAgICAgIHwgICA2ICstDQo+ID4gPiAgdGVzdHMvaW50ZWwveGVfZXhl Y19jb21wdXRlX21vZGUuYyB8ICAgNiArLQ0KPiA+ID4gIHRlc3RzL2ludGVsL3hlX2V4ZWNfZmF1 bHRfbW9kZS5jICAgfCAgIDYgKy0NCj4gPiA+ICB0ZXN0cy9pbnRlbC94ZV9leGVjX3Jlc2V0LmMg ICAgICAgIHwgICA4ICstDQo+ID4gPiAgdGVzdHMvaW50ZWwveGVfZXhlY19zdG9yZS5jICAgICAg ICB8ICAgNCArLQ0KPiA+ID4gIHRlc3RzL2ludGVsL3hlX2V4ZWNfdGhyZWFkcy5jICAgICAgfCAx MTIgKysrKystLS0tLS0tLS0tLS0NCj4gPiA+ICB0ZXN0cy9pbnRlbC94ZV9leGVyY2lzZV9ibHQu YyAgICAgIHwgICAyICstDQo+ID4gPiAgdGVzdHMvaW50ZWwveGVfZ3VjX3BjLmMgICAgICAgICAg ICB8ICAgMiArLQ0KPiA+ID4gIHRlc3RzL2ludGVsL3hlX2h1Y19jb3B5LmMgICAgICAgICAgfCAg IDIgKy0NCj4gPiA+ICB0ZXN0cy9pbnRlbC94ZV9pbnRlbF9iYi5jICAgICAgICAgIHwgICAyICst DQo+ID4gPiAgdGVzdHMvaW50ZWwveGVfcG0uYyAgICAgICAgICAgICAgICB8ICAgMiArLQ0KPiA+ ID4gIHRlc3RzL2ludGVsL3hlX3ZtLmMgICAgICAgICAgICAgICAgfCAxODkgKystLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0NCj4gPiA+ICB0ZXN0cy9pbnRlbC94ZV93YWl0ZmVuY2UuYyAgICAg ICAgIHwgIDE5ICstLQ0KPiA+ID4gIDI1IGZpbGVzIGNoYW5nZWQsIDEwMiBpbnNlcnRpb25zKCsp LCAzNzcgZGVsZXRpb25zKC0pDQo+ID4gPiANCj4gPiA+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2Ry bS11YXBpL3hlX2RybS5oIGIvaW5jbHVkZS9kcm0tdWFwaS94ZV9kcm0uaA0KPiA+ID4gaW5kZXgg MGEwNWExMmIyLi44MGI0Yzc2ZjMgMTAwNjQ0DQo+ID4gPiAtLS0gYS9pbmNsdWRlL2RybS11YXBp L3hlX2RybS5oDQo+ID4gPiArKysgYi9pbmNsdWRlL2RybS11YXBpL3hlX2RybS5oDQo+ID4gPiBA QCAtMTM0LDEwICsxMzQsMTEgQEAgc3RydWN0IGRybV94ZV9lbmdpbmVfY2xhc3NfaW5zdGFuY2Ug ew0KPiA+ID4gICNkZWZpbmUgRFJNX1hFX0VOR0lORV9DTEFTU19WSURFT19FTkhBTkNFCTMNCj4g PiA+ICAjZGVmaW5lIERSTV9YRV9FTkdJTkVfQ0xBU1NfQ09NUFVURQkJNA0KPiA+ID4gIAkvKg0K PiA+ID4gLQkgKiBLZXJuZWwgb25seSBjbGFzcyAobm90IGFjdHVhbCBoYXJkd2FyZSBlbmdpbmUg Y2xhc3MpLiBVc2VkIGZvcg0KPiA+ID4gKwkgKiBLZXJuZWwgb25seSBjbGFzc2VzIChub3QgYWN0 dWFsIGhhcmR3YXJlIGVuZ2luZSBjbGFzcykuIFVzZWQgZm9yDQo+ID4gPiAgCSAqIGNyZWF0aW5n IG9yZGVyZWQgcXVldWVzIG9mIFZNIGJpbmQgb3BlcmF0aW9ucy4NCj4gPiA+ICAJICovDQo+ID4g PiAtI2RlZmluZSBEUk1fWEVfRU5HSU5FX0NMQVNTX1ZNX0JJTkQJCTUNCj4gPiA+ICsjZGVmaW5l IERSTV9YRV9FTkdJTkVfQ0xBU1NfVk1fQklORF9BU1lOQwk1DQo+ID4gPiArI2RlZmluZSBEUk1f WEVfRU5HSU5FX0NMQVNTX1ZNX0JJTkRfU1lOQwk2DQo+ID4gPiAgCV9fdTE2IGVuZ2luZV9jbGFz czsNCj4gPiA+ICANCj4gPiA+ICAJX191MTYgZW5naW5lX2luc3RhbmNlOw0KPiA+ID4gQEAgLTU3 Nyw3ICs1NzgsNyBAQCBzdHJ1Y3QgZHJtX3hlX3ZtX2NyZWF0ZSB7DQo+ID4gPiAgDQo+ID4gPiAg I2RlZmluZSBEUk1fWEVfVk1fQ1JFQVRFX1NDUkFUQ0hfUEFHRQkoMHgxIDw8IDApDQo+ID4gPiAg I2RlZmluZSBEUk1fWEVfVk1fQ1JFQVRFX0NPTVBVVEVfTU9ERQkoMHgxIDw8IDEpDQo+ID4gPiAt I2RlZmluZSBEUk1fWEVfVk1fQ1JFQVRFX0FTWU5DX0JJTkRfT1BTCSgweDEgPDwgMikNCj4gPiA+ ICsjZGVmaW5lIERSTV9YRV9WTV9DUkVBVEVfQVNZTkNfREVGQVVMVAkoMHgxIDw8IDIpDQo+ID4g PiAgI2RlZmluZSBEUk1fWEVfVk1fQ1JFQVRFX0ZBVUxUX01PREUJKDB4MSA8PCAzKQ0KPiA+ID4g IAkvKiogQGZsYWdzOiBGbGFncyAqLw0KPiA+ID4gIAlfX3UzMiBmbGFnczsNCj4gPiA+IEBAIC02 MzcsMzQgKzYzOCwxMiBAQCBzdHJ1Y3QgZHJtX3hlX3ZtX2JpbmRfb3Agew0KPiA+ID4gICNkZWZp bmUgWEVfVk1fQklORF9PUF9NQVAJCTB4MA0KPiA+ID4gICNkZWZpbmUgWEVfVk1fQklORF9PUF9V Tk1BUAkJMHgxDQo+ID4gPiAgI2RlZmluZSBYRV9WTV9CSU5EX09QX01BUF9VU0VSUFRSCTB4Mg0K PiA+ID4gLSNkZWZpbmUgWEVfVk1fQklORF9PUF9SRVNUQVJUCQkweDMNCj4gPiA+IC0jZGVmaW5l IFhFX1ZNX0JJTkRfT1BfVU5NQVBfQUxMCQkweDQNCj4gPiA+IC0jZGVmaW5lIFhFX1ZNX0JJTkRf T1BfUFJFRkVUQ0gJCTB4NQ0KPiA+ID4gKyNkZWZpbmUgWEVfVk1fQklORF9PUF9VTk1BUF9BTEwJ CTB4Mw0KPiA+ID4gKyNkZWZpbmUgWEVfVk1fQklORF9PUF9QUkVGRVRDSAkJMHg0DQo+ID4gPiAg CS8qKiBAb3A6IEJpbmQgb3BlcmF0aW9uIHRvIHBlcmZvcm0gKi8NCj4gPiA+ICAJX191MzIgb3A7 DQo+ID4gPiAgDQo+ID4gPiAgI2RlZmluZSBYRV9WTV9CSU5EX0ZMQUdfUkVBRE9OTFkJKDB4MSA8 PCAwKQ0KPiA+ID4gLQkvKg0KPiA+ID4gLQkgKiBBIGJpbmQgb3BzIGNvbXBsZXRpb25zIGFyZSBh bHdheXMgYXN5bmMsIGhlbmNlIHRoZSBzdXBwb3J0IGZvciBvdXQNCj4gPiA+IC0JICogc3luYy4g VGhpcyBmbGFnIGluZGljYXRlcyB0aGUgYWxsb2NhdGlvbiBvZiB0aGUgbWVtb3J5IGZvciBuZXcg cGFnZQ0KPiA+ID4gLQkgKiB0YWJsZXMgYW5kIHRoZSBqb2IgdG8gcHJvZ3JhbSB0aGUgcGFnZXMg dGFibGVzIGlzIGFzeW5jaHJvbm91cw0KPiA+ID4gLQkgKiByZWxhdGl2ZSB0byB0aGUgSU9DVEwu IFRoYXQgcGFydCBvZiBhIGJpbmQgb3BlcmF0aW9uIGNhbiBmYWlsIHVuZGVyDQo+ID4gPiAtCSAq IG1lbW9yeSBwcmVzc3VyZSwgdGhlIGpvYiBpbiBwcmFjdGljZSBjYW4ndCBmYWlsIHVubGVzcyB0 aGUgc3lzdGVtIGlzDQo+ID4gPiAtCSAqIHRvdGFsbHkgc2hvdC4NCj4gPiA+IC0JICoNCj4gPiA+ IC0JICogSWYgdGhpcyBmbGFnIGlzIGNsZWFyIGFuZCB0aGUgSU9DVEwgZG9lc24ndCByZXR1cm4g YW4gZXJyb3IsIGluDQo+ID4gPiAtCSAqIHByYWN0aWNlIHRoZSBiaW5kIG9wIGlzIGdvb2QgYW5k IHdpbGwgY29tcGxldGUuDQo+ID4gPiAtCSAqDQo+ID4gPiAtCSAqIElmIHRoaXMgZmxhZyBpcyBz ZXQgYW5kIGRvZXNuJ3QgcmV0dXJuIGFuIGVycm9yLCB0aGUgYmluZCBvcCBjYW4NCj4gPiA+IC0J ICogc3RpbGwgZmFpbCBhbmQgcmVjb3ZlcnkgaXMgbmVlZGVkLiBJdCBzaG91bGQgZnJlZSBtZW1v cnkNCj4gPiA+IC0JICogdmlhIG5vbi1hc3luYyB1bmJpbmRzLCBhbmQgdGhlbiByZXN0YXJ0IGFs bCBxdWV1ZWQgYXN5bmMgYmluZHMgb3AgdmlhDQo+ID4gPiAtCSAqIFhFX1ZNX0JJTkRfT1BfUkVT VEFSVC4gT3IgYWx0ZXJuYXRpdmVseSB0aGUgdXNlciBzaG91bGQgZGVzdHJveSB0aGUNCj4gPiA+ IC0JICogVk0uDQo+ID4gPiAtCSAqDQo+ID4gPiAtCSAqIFRoaXMgZmxhZyBpcyBvbmx5IGFsbG93 ZWQgd2hlbiBEUk1fWEVfVk1fQ1JFQVRFX0FTWU5DX0JJTkRfT1BTIGlzDQo+ID4gPiAtCSAqIGNv bmZpZ3VyZWQgaW4gdGhlIFZNIGFuZCBtdXN0IGJlIHNldCBpZiB0aGUgVk0gaXMgY29uZmlndXJl ZCB3aXRoDQo+ID4gPiAtCSAqIERSTV9YRV9WTV9DUkVBVEVfQVNZTkNfQklORF9PUFMgYW5kIG5v dCBpbiBhbiBlcnJvciBzdGF0ZS4NCj4gPiA+IC0JICovDQo+ID4gPiAgI2RlZmluZSBYRV9WTV9C SU5EX0ZMQUdfQVNZTkMJCSgweDEgPDwgMSkNCj4gPiA+ICAJLyoNCj4gPiA+ICAJICogVmFsaWQg b24gYSBmYXVsdGluZyBWTSBvbmx5LCBkbyB0aGUgTUFQIG9wZXJhdGlvbiBpbW1lZGlhdGVseSBy YXRoZXINCj4gPiA+IEBAIC05MDUsMTggKzg4NCwxMCBAQCBzdHJ1Y3QgZHJtX3hlX3dhaXRfdXNl cl9mZW5jZSB7DQo+ID4gPiAgCS8qKiBAZXh0ZW5zaW9uczogUG9pbnRlciB0byB0aGUgZmlyc3Qg ZXh0ZW5zaW9uIHN0cnVjdCwgaWYgYW55ICovDQo+ID4gPiAgCV9fdTY0IGV4dGVuc2lvbnM7DQo+ ID4gPiAgDQo+ID4gPiAtCXVuaW9uIHsNCj4gPiA+IC0JCS8qKg0KPiA+ID4gLQkJICogQGFkZHI6 IHVzZXIgcG9pbnRlciBhZGRyZXNzIHRvIHdhaXQgb24sIG11c3QgcXdvcmQgYWxpZ25lZA0KPiA+ ID4gLQkJICovDQo+ID4gPiAtCQlfX3U2NCBhZGRyOw0KPiA+ID4gLQ0KPiA+ID4gLQkJLyoqDQo+ ID4gPiAtCQkgKiBAdm1faWQ6IFRoZSBJRCBvZiB0aGUgVk0gd2hpY2ggZW5jb3VudGVyIGFuIGVy cm9yIHVzZWQgd2l0aA0KPiA+ID4gLQkJICogRFJNX1hFX1VGRU5DRV9XQUlUX1ZNX0VSUk9SLiBV cHBlciAzMiBiaXRzIG11c3QgYmUgY2xlYXIuDQo+ID4gPiAtCQkgKi8NCj4gPiA+IC0JCV9fdTY0 IHZtX2lkOw0KPiA+ID4gLQl9Ow0KPiA+ID4gKwkvKioNCj4gPiA+ICsJICogQGFkZHI6IHVzZXIg cG9pbnRlciBhZGRyZXNzIHRvIHdhaXQgb24sIG11c3QgcXdvcmQgYWxpZ25lZA0KPiA+ID4gKwkg Ki8NCj4gPiA+ICsJX191NjQgYWRkcjsNCj4gPiA+ICANCj4gPiA+ICAjZGVmaW5lIERSTV9YRV9V RkVOQ0VfV0FJVF9FUQkwDQo+ID4gPiAgI2RlZmluZSBEUk1fWEVfVUZFTkNFX1dBSVRfTkVRCTEN Cj4gPiA+IEBAIC05MjksNyArOTAwLDYgQEAgc3RydWN0IGRybV94ZV93YWl0X3VzZXJfZmVuY2Ug ew0KPiA+ID4gIA0KPiA+ID4gICNkZWZpbmUgRFJNX1hFX1VGRU5DRV9XQUlUX1NPRlRfT1AJKDEg PDwgMCkJLyogZS5nLiBXYWl0IG9uIFZNIGJpbmQgKi8NCj4gPiA+ICAjZGVmaW5lIERSTV9YRV9V RkVOQ0VfV0FJVF9BQlNUSU1FCSgxIDw8IDEpDQo+ID4gPiAtI2RlZmluZSBEUk1fWEVfVUZFTkNF X1dBSVRfVk1fRVJST1IJKDEgPDwgMikNCj4gPiA+ICAJLyoqIEBmbGFnczogd2FpdCBmbGFncyAq Lw0KPiA+ID4gIAlfX3UxNiBmbGFnczsNCj4gPiA+ICANCj4gPiA+IGRpZmYgLS1naXQgYS9saWIv aWd0X2ZiLmMgYi9saWIvaWd0X2ZiLmMNCj4gPiA+IGluZGV4IGYwYzA2ODFhYi4uMzQ5MzQ4NTVh IDEwMDY0NA0KPiA+ID4gLS0tIGEvbGliL2lndF9mYi5jDQo+ID4gPiArKysgYi9saWIvaWd0X2Zi LmMNCj4gPiA+IEBAIC0yODkyLDcgKzI4OTIsNyBAQCBzdGF0aWMgdm9pZCBibGl0Y29weShjb25z dCBzdHJ1Y3QgaWd0X2ZiICpkc3RfZmIsDQo+ID4gPiAgCQkJCQkJCSAgJmJiX3NpemUsDQo+ID4g PiAgCQkJCQkJCSAgbWVtX3JlZ2lvbikgPT0gMCk7DQo+ID4gPiAgCX0gZWxzZSBpZiAoaXNfeGUp IHsNCj4gPiA+IC0JCXZtID0geGVfdm1fY3JlYXRlKGRzdF9mYi0+ZmQsIERSTV9YRV9WTV9DUkVB VEVfQVNZTkNfQklORF9PUFMsIDApOw0KPiA+ID4gKwkJdm0gPSB4ZV92bV9jcmVhdGUoZHN0X2Zi LT5mZCwgRFJNX1hFX1ZNX0NSRUFURV9BU1lOQ19ERUZBVUxULCAwKTsNCj4gPiA+ICAJCWV4ZWNf cXVldWUgPSB4ZV9leGVjX3F1ZXVlX2NyZWF0ZShkc3RfZmItPmZkLCB2bSwgJmluc3QsIDApOw0K PiA+ID4gIAkJeGVfY3R4ID0gaW50ZWxfY3R4X3hlKGRzdF9mYi0+ZmQsIHZtLCBleGVjX3F1ZXVl LCAwLCAwLCAwKTsNCj4gPiA+ICAJCW1lbV9yZWdpb24gPSB2cmFtX2lmX3Bvc3NpYmxlKGRzdF9m Yi0+ZmQsIDApOw0KPiA+ID4gZGlmZiAtLWdpdCBhL2xpYi9pbnRlbF9iYXRjaGJ1ZmZlci5jIGIv bGliL2ludGVsX2JhdGNoYnVmZmVyLmMNCj4gPiA+IGluZGV4IDZlNjY4ZDI4Yy4uZGY4MmVmNWY1 IDEwMDY0NA0KPiA+ID4gLS0tIGEvbGliL2ludGVsX2JhdGNoYnVmZmVyLmMNCj4gPiA+ICsrKyBi L2xpYi9pbnRlbF9iYXRjaGJ1ZmZlci5jDQo+ID4gPiBAQCAtOTUzLDcgKzk1Myw3IEBAIF9faW50 ZWxfYmJfY3JlYXRlKGludCBmZCwgdWludDMyX3QgY3R4LCB1aW50MzJfdCB2bSwgY29uc3QgaW50 ZWxfY3R4X2NmZ190ICpjZmcsDQo+ID4gPiAgDQo+ID4gPiAgCQlpZiAoIXZtKSB7DQo+ID4gPiAg CQkJaWd0X2Fzc2VydF9mKCFjdHgsICJObyB2bSBwcm92aWRlZCBmb3IgZW5naW5lIik7DQo+ID4g PiAtCQkJdm0gPSB4ZV92bV9jcmVhdGUoZmQsIERSTV9YRV9WTV9DUkVBVEVfQVNZTkNfQklORF9P UFMsIDApOw0KPiA+ID4gKwkJCXZtID0geGVfdm1fY3JlYXRlKGZkLCBEUk1fWEVfVk1fQ1JFQVRF X0FTWU5DX0RFRkFVTFQsIDApOw0KPiA+ID4gIAkJfQ0KPiA+ID4gIA0KPiA+ID4gIAkJaWJiLT51 c2VzX2Z1bGxfcHBndHQgPSB0cnVlOw0KPiA+ID4gZGlmZiAtLWdpdCBhL2xpYi9pbnRlbF9jb21w dXRlLmMgYi9saWIvaW50ZWxfY29tcHV0ZS5jDQo+ID4gPiBpbmRleCAwYzMwZjM5YzEuLjFhZTMz Y2RmYyAxMDA2NDQNCj4gPiA+IC0tLSBhL2xpYi9pbnRlbF9jb21wdXRlLmMNCj4gPiA+ICsrKyBi L2xpYi9pbnRlbF9jb21wdXRlLmMNCj4gPiA+IEBAIC03OSw3ICs3OSw3IEBAIHN0YXRpYyB2b2lk IGJvX2V4ZWNlbnZfY3JlYXRlKGludCBmZCwgc3RydWN0IGJvX2V4ZWNlbnYgKmV4ZWNlbnYpDQo+ ID4gPiAgCQllbHNlDQo+ID4gPiAgCQkJZW5naW5lX2NsYXNzID0gRFJNX1hFX0VOR0lORV9DTEFT U19DT01QVVRFOw0KPiA+ID4gIA0KPiA+ID4gLQkJZXhlY2Vudi0+dm0gPSB4ZV92bV9jcmVhdGUo ZmQsIERSTV9YRV9WTV9DUkVBVEVfQVNZTkNfQklORF9PUFMsIDApOw0KPiA+ID4gKwkJZXhlY2Vu di0+dm0gPSB4ZV92bV9jcmVhdGUoZmQsIERSTV9YRV9WTV9DUkVBVEVfQVNZTkNfREVGQVVMVCwg MCk7DQo+ID4gPiAgCQlleGVjZW52LT5leGVjX3F1ZXVlID0geGVfZXhlY19xdWV1ZV9jcmVhdGVf Y2xhc3MoZmQsIGV4ZWNlbnYtPnZtLA0KPiA+ID4gIAkJCQkJCQkJIGVuZ2luZV9jbGFzcyk7DQo+ ID4gPiAgCX0NCj4gPiA+IGRpZmYgLS1naXQgYS9saWIveGUveGVfaW9jdGwuYyBiL2xpYi94ZS94 ZV9pb2N0bC5jDQo+ID4gPiBpbmRleCA0OGNkMTg1ZGUuLjg5NWUzYmQ0ZSAxMDA2NDQNCj4gPiA+ IC0tLSBhL2xpYi94ZS94ZV9pb2N0bC5jDQo+ID4gPiArKysgYi9saWIveGUveGVfaW9jdGwuYw0K PiA+ID4gQEAgLTIwMSwxNiArMjAxLDggQEAgdm9pZCB4ZV92bV91bmJpbmRfYXN5bmMoaW50IGZk LCB1aW50MzJfdCB2bSwgdWludDMyX3QgZXhlY19xdWV1ZSwNCj4gPiA+ICBzdGF0aWMgdm9pZCBf X3hlX3ZtX2JpbmRfc3luYyhpbnQgZmQsIHVpbnQzMl90IHZtLCB1aW50MzJfdCBibywgdWludDY0 X3Qgb2Zmc2V0LA0KPiA+ID4gIAkJCSAgICAgIHVpbnQ2NF90IGFkZHIsIHVpbnQ2NF90IHNpemUs IHVpbnQzMl90IG9wKQ0KPiA+ID4gIHsNCj4gPiA+IC0Jc3RydWN0IGRybV94ZV9zeW5jIHN5bmMg PSB7DQo+ID4gPiAtCQkuZmxhZ3MgPSBEUk1fWEVfU1lOQ19TWU5DT0JKIHwgRFJNX1hFX1NZTkNf U0lHTkFMLA0KPiA+ID4gLQkJLmhhbmRsZSA9IHN5bmNvYmpfY3JlYXRlKGZkLCAwKSwNCj4gPiA+ IC0JfTsNCj4gPiA+IC0NCj4gPiA+IC0JX194ZV92bV9iaW5kX2Fzc2VydChmZCwgdm0sIDAsIGJv LCBvZmZzZXQsIGFkZHIsIHNpemUsIG9wLCAwLCAmc3luYywgMSwNCj4gPiA+ICsJX194ZV92bV9i aW5kX2Fzc2VydChmZCwgdm0sIDAsIGJvLCBvZmZzZXQsIGFkZHIsIHNpemUsIG9wLCAwLCBOVUxM LCAwLA0KPiA+ID4gIAkJCSAgICAwLCAwKTsNCj4gPiA+IC0NCj4gPiA+IC0JaWd0X2Fzc2VydChz eW5jb2JqX3dhaXQoZmQsICZzeW5jLmhhbmRsZSwgMSwgSU5UNjRfTUFYLCAwLCBOVUxMKSk7DQo+ ID4gPiAtCXN5bmNvYmpfZGVzdHJveShmZCwgc3luYy5oYW5kbGUpOw0KPiA+ID4gIH0NCj4gPiA+ ICANCj4gPiA+ICB2b2lkIHhlX3ZtX2JpbmRfc3luYyhpbnQgZmQsIHVpbnQzMl90IHZtLCB1aW50 MzJfdCBibywgdWludDY0X3Qgb2Zmc2V0LA0KPiA+ID4gQEAgLTI3NiwxMCArMjY4LDExIEBAIHVp bnQzMl90IHhlX2JvX2NyZWF0ZShpbnQgZmQsIGludCBndCwgdWludDMyX3Qgdm0sIHVpbnQ2NF90 IHNpemUpDQo+ID4gPiAgCXJldHVybiBjcmVhdGUuaGFuZGxlOw0KPiA+ID4gIH0NCj4gPiA+ICAN Cj4gPiA+IC11aW50MzJfdCB4ZV9iaW5kX2V4ZWNfcXVldWVfY3JlYXRlKGludCBmZCwgdWludDMy X3Qgdm0sIHVpbnQ2NF90IGV4dCkNCj4gPiA+ICt1aW50MzJfdCB4ZV9iaW5kX2V4ZWNfcXVldWVf Y3JlYXRlKGludCBmZCwgdWludDMyX3Qgdm0sIHVpbnQ2NF90IGV4dCwgYm9vbCBhc3luYykNCj4g PiA+ICB7DQo+ID4gPiAgCXN0cnVjdCBkcm1feGVfZW5naW5lX2NsYXNzX2luc3RhbmNlIGluc3Rh bmNlID0gew0KPiA+ID4gLQkJLmVuZ2luZV9jbGFzcyA9IERSTV9YRV9FTkdJTkVfQ0xBU1NfVk1f QklORCwNCj4gPiA+ICsJCS5lbmdpbmVfY2xhc3MgPSBhc3luYyA/IERSTV9YRV9FTkdJTkVfQ0xB U1NfVk1fQklORF9BU1lOQyA6DQo+ID4gPiArCQkJRFJNX1hFX0VOR0lORV9DTEFTU19WTV9CSU5E X1NZTkMsDQo+ID4gPiAgCX07DQo+ID4gPiAgCXN0cnVjdCBkcm1feGVfZXhlY19xdWV1ZV9jcmVh dGUgY3JlYXRlID0gew0KPiA+ID4gIAkJLmV4dGVuc2lvbnMgPSBleHQsDQo+ID4gPiBkaWZmIC0t Z2l0IGEvbGliL3hlL3hlX2lvY3RsLmggYi9saWIveGUveGVfaW9jdGwuaA0KPiA+ID4gaW5kZXgg ZjBlNDEwOWRjLi5hOGRiY2YzNzYgMTAwNjQ0DQo+ID4gPiAtLS0gYS9saWIveGUveGVfaW9jdGwu aA0KPiA+ID4gKysrIGIvbGliL3hlL3hlX2lvY3RsLmgNCj4gPiA+IEBAIC03MSw3ICs3MSw4IEBA IHVpbnQzMl90IHhlX2JvX2NyZWF0ZShpbnQgZmQsIGludCBndCwgdWludDMyX3Qgdm0sIHVpbnQ2 NF90IHNpemUpOw0KPiA+ID4gIHVpbnQzMl90IHhlX2V4ZWNfcXVldWVfY3JlYXRlKGludCBmZCwg dWludDMyX3Qgdm0sDQo+ID4gPiAgCQkJICBzdHJ1Y3QgZHJtX3hlX2VuZ2luZV9jbGFzc19pbnN0 YW5jZSAqaW5zdGFuY2UsDQo+ID4gPiAgCQkJICB1aW50NjRfdCBleHQpOw0KPiA+ID4gLXVpbnQz Ml90IHhlX2JpbmRfZXhlY19xdWV1ZV9jcmVhdGUoaW50IGZkLCB1aW50MzJfdCB2bSwgdWludDY0 X3QgZXh0KTsNCj4gPiA+ICt1aW50MzJfdCB4ZV9iaW5kX2V4ZWNfcXVldWVfY3JlYXRlKGludCBm ZCwgdWludDMyX3Qgdm0sIHVpbnQ2NF90IGV4dCwNCj4gPiA+ICsJCQkJICAgYm9vbCBhc3luYyk7 DQo+ID4gPiAgdWludDMyX3QgeGVfZXhlY19xdWV1ZV9jcmVhdGVfY2xhc3MoaW50IGZkLCB1aW50 MzJfdCB2bSwgdWludDE2X3QgY2xhc3MpOw0KPiA+ID4gIHZvaWQgeGVfZXhlY19xdWV1ZV9kZXN0 cm95KGludCBmZCwgdWludDMyX3QgZXhlY19xdWV1ZSk7DQo+ID4gPiAgdWludDY0X3QgeGVfYm9f bW1hcF9vZmZzZXQoaW50IGZkLCB1aW50MzJfdCBibyk7DQo+ID4gPiBkaWZmIC0tZ2l0IGEvbGli L3hlL3hlX3F1ZXJ5LmMgYi9saWIveGUveGVfcXVlcnkuYw0KPiA+ID4gaW5kZXggYzM1NmFiZTFl Li5hYjdiMzExODggMTAwNjQ0DQo+ID4gPiAtLS0gYS9saWIveGUveGVfcXVlcnkuYw0KPiA+ID4g KysrIGIvbGliL3hlL3hlX3F1ZXJ5LmMNCj4gPiA+IEBAIC0zMTYsNyArMzE2LDcgQEAgYm9vbCB4 ZV9zdXBwb3J0c19mYXVsdHMoaW50IGZkKQ0KPiA+ID4gIAlib29sIHN1cHBvcnRzX2ZhdWx0czsN Cj4gPiA+ICANCj4gPiA+ICAJc3RydWN0IGRybV94ZV92bV9jcmVhdGUgY3JlYXRlID0gew0KPiA+ ID4gLQkJLmZsYWdzID0gRFJNX1hFX1ZNX0NSRUFURV9BU1lOQ19CSU5EX09QUyB8DQo+ID4gPiAr CQkuZmxhZ3MgPSBEUk1fWEVfVk1fQ1JFQVRFX0FTWU5DX0RFRkFVTFQgfA0KPiA+ID4gIAkJCSBE Uk1fWEVfVk1fQ1JFQVRFX0ZBVUxUX01PREUsDQo+ID4gPiAgCX07DQo+ID4gPiAgDQo+ID4gPiBk aWZmIC0tZ2l0IGEvdGVzdHMvaW50ZWwveGVfY2NzLmMgYi90ZXN0cy9pbnRlbC94ZV9jY3MuYw0K PiA+ID4gaW5kZXggMjBiYmM0NDQ4Li4zMDBiNzM0YzggMTAwNjQ0DQo+ID4gPiAtLS0gYS90ZXN0 cy9pbnRlbC94ZV9jY3MuYw0KPiA+ID4gKysrIGIvdGVzdHMvaW50ZWwveGVfY2NzLmMNCj4gPiA+ IEBAIC0zNDMsNyArMzQzLDcgQEAgc3RhdGljIHZvaWQgYmxvY2tfY29weShpbnQgeGUsDQo+ID4g PiAgCQl1aW50MzJfdCB2bSwgZXhlY19xdWV1ZTsNCj4gPiA+ICANCj4gPiA+ICAJCWlmIChjb25m aWctPm5ld19jdHgpIHsNCj4gPiA+IC0JCQl2bSA9IHhlX3ZtX2NyZWF0ZSh4ZSwgRFJNX1hFX1ZN X0NSRUFURV9BU1lOQ19CSU5EX09QUywgMCk7DQo+ID4gPiArCQkJdm0gPSB4ZV92bV9jcmVhdGUo eGUsIERSTV9YRV9WTV9DUkVBVEVfQVNZTkNfREVGQVVMVCwgMCk7DQo+ID4gPiAgCQkJZXhlY19x dWV1ZSA9IHhlX2V4ZWNfcXVldWVfY3JlYXRlKHhlLCB2bSwgJmluc3QsIDApOw0KPiA+ID4gIAkJ CXN1cmZfY3R4ID0gaW50ZWxfY3R4X3hlKHhlLCB2bSwgZXhlY19xdWV1ZSwgMCwgMCwgMCk7DQo+ ID4gPiAgCQkJc3VyZl9haG5kID0gaW50ZWxfYWxsb2NhdG9yX29wZW4oeGUsIHN1cmZfY3R4LT52 bSwNCj4gPiA+IEBAIC01NTAsNyArNTUwLDcgQEAgc3RhdGljIHZvaWQgYmxvY2tfY29weV90ZXN0 KGludCB4ZSwNCj4gPiA+ICAJCQkJICAgICAgY29weWZuc1tjb3B5X2Z1bmN0aW9uXS5zdWZmaXgp IHsNCj4gPiA+ICAJCQkJdWludDMyX3Qgc3luY19iaW5kLCBzeW5jX291dDsNCj4gPiA+ICANCj4g PiA+IC0JCQkJdm0gPSB4ZV92bV9jcmVhdGUoeGUsIERSTV9YRV9WTV9DUkVBVEVfQVNZTkNfQklO RF9PUFMsIDApOw0KPiA+ID4gKwkJCQl2bSA9IHhlX3ZtX2NyZWF0ZSh4ZSwgRFJNX1hFX1ZNX0NS RUFURV9BU1lOQ19ERUZBVUxULCAwKTsNCj4gPiA+ICAJCQkJZXhlY19xdWV1ZSA9IHhlX2V4ZWNf cXVldWVfY3JlYXRlKHhlLCB2bSwgJmluc3QsIDApOw0KPiA+ID4gIAkJCQlzeW5jX2JpbmQgPSBz eW5jb2JqX2NyZWF0ZSh4ZSwgMCk7DQo+ID4gPiAgCQkJCXN5bmNfb3V0ID0gc3luY29ial9jcmVh dGUoeGUsIDApOw0KPiA+ID4gZGlmZiAtLWdpdCBhL3Rlc3RzL2ludGVsL3hlX2NyZWF0ZS5jIGIv dGVzdHMvaW50ZWwveGVfY3JlYXRlLmMNCj4gPiA+IGluZGV4IDhkODQ1ZTVjOC4uZDk5YmQ1MWNm IDEwMDY0NA0KPiA+ID4gLS0tIGEvdGVzdHMvaW50ZWwveGVfY3JlYXRlLmMNCj4gPiA+ICsrKyBi L3Rlc3RzL2ludGVsL3hlX2NyZWF0ZS5jDQo+ID4gPiBAQCAtNTQsNyArNTQsNyBAQCBzdGF0aWMg dm9pZCBjcmVhdGVfaW52YWxpZF9zaXplKGludCBmZCkNCj4gPiA+ICAJdWludDMyX3QgaGFuZGxl Ow0KPiA+ID4gIAlpbnQgcmV0Ow0KPiA+ID4gIA0KPiA+ID4gLQl2bSA9IHhlX3ZtX2NyZWF0ZShm ZCwgRFJNX1hFX1ZNX0NSRUFURV9BU1lOQ19CSU5EX09QUywgMCk7DQo+ID4gPiArCXZtID0geGVf dm1fY3JlYXRlKGZkLCBEUk1fWEVfVk1fQ1JFQVRFX0FTWU5DX0RFRkFVTFQsIDApOw0KPiA+ID4g IA0KPiA+ID4gIAl4ZV9mb3JfZWFjaF9tZW1fcmVnaW9uKGZkLCBtZW1yZWcsIHJlZ2lvbikgew0K PiA+ID4gIAkJbWVtcmVnaW9uID0geGVfbWVtX3JlZ2lvbihmZCwgcmVnaW9uKTsNCj4gPiA+IEBA IC0xNDAsNyArMTQwLDcgQEAgc3RhdGljIHZvaWQgY3JlYXRlX2V4ZWNxdWV1ZXMoaW50IGZkLCBl bnVtIGV4ZWNfcXVldWVfZGVzdHJveSBlZCkNCj4gPiA+ICANCj4gPiA+ICAJZmQgPSBkcm1fcmVv cGVuX2RyaXZlcihmZCk7DQo+ID4gPiAgCW51bV9lbmdpbmVzID0geGVfbnVtYmVyX2h3X2VuZ2lu ZXMoZmQpOw0KPiA+ID4gLQl2bSA9IHhlX3ZtX2NyZWF0ZShmZCwgRFJNX1hFX1ZNX0NSRUFURV9B U1lOQ19CSU5EX09QUywgMCk7DQo+ID4gPiArCXZtID0geGVfdm1fY3JlYXRlKGZkLCBEUk1fWEVf Vk1fQ1JFQVRFX0FTWU5DX0RFRkFVTFQsIDApOw0KPiA+ID4gIA0KPiA+ID4gIAlleGVjX3F1ZXVl c19wZXJfcHJvY2VzcyA9IG1heF90KHVpbnQzMl90LCAxLCBNQVhFWEVDUVVFVUVTIC8gbnByb2Mp Ow0KPiA+ID4gIAlpZ3RfZGVidWcoIm5wcm9jOiAldSwgZXhlY19xdWV1ZXMgcGVyIHByb2Nlc3M6 ICV1XG4iLCBucHJvYywgZXhlY19xdWV1ZXNfcGVyX3Byb2Nlc3MpOw0KPiA+ID4gQEAgLTE5OSw3 ICsxOTksNyBAQCBzdGF0aWMgdm9pZCBjcmVhdGVfbWFzc2l2ZV9zaXplKGludCBmZCkNCj4gPiA+ ICAJdWludDMyX3QgaGFuZGxlOw0KPiA+ID4gIAlpbnQgcmV0Ow0KPiA+ID4gIA0KPiA+ID4gLQl2 bSA9IHhlX3ZtX2NyZWF0ZShmZCwgRFJNX1hFX1ZNX0NSRUFURV9BU1lOQ19CSU5EX09QUywgMCk7 DQo+ID4gPiArCXZtID0geGVfdm1fY3JlYXRlKGZkLCBEUk1fWEVfVk1fQ1JFQVRFX0FTWU5DX0RF RkFVTFQsIDApOw0KPiA+ID4gIA0KPiA+ID4gIAl4ZV9mb3JfZWFjaF9tZW1fcmVnaW9uKGZkLCBt ZW1yZWcsIHJlZ2lvbikgew0KPiA+ID4gIAkJcmV0ID0gX19jcmVhdGVfYm8oZmQsIHZtLCAtMVVM TCA8PCAzMiwgcmVnaW9uLCAmaGFuZGxlKTsNCj4gPiA+IGRpZmYgLS1naXQgYS90ZXN0cy9pbnRl bC94ZV9kcm1fZmRpbmZvLmMgYi90ZXN0cy9pbnRlbC94ZV9kcm1fZmRpbmZvLmMNCj4gPiA+IGlu ZGV4IDIyZTQxMGUxNC4uNjQxNjhlZDE5IDEwMDY0NA0KPiA+ID4gLS0tIGEvdGVzdHMvaW50ZWwv eGVfZHJtX2ZkaW5mby5jDQo+ID4gPiArKysgYi90ZXN0cy9pbnRlbC94ZV9kcm1fZmRpbmZvLmMN Cj4gPiA+IEBAIC03MSw3ICs3MSw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfYWN0aXZlKGludCBmZCwg c3RydWN0IGRybV94ZV9lbmdpbmVfY2xhc3NfaW5zdGFuY2UgKmVjaSkNCj4gPiA+ICAJc3RydWN0 IHhlX3NwaW5fb3B0cyBzcGluX29wdHMgPSB7IC5wcmVlbXB0ID0gdHJ1ZSB9Ow0KPiA+ID4gIAlp bnQgaSwgYiwgcmV0Ow0KPiA+ID4gIA0KPiA+ID4gLQl2bSA9IHhlX3ZtX2NyZWF0ZShmZCwgRFJN X1hFX1ZNX0NSRUFURV9BU1lOQ19CSU5EX09QUywgMCk7DQo+ID4gPiArCXZtID0geGVfdm1fY3Jl YXRlKGZkLCBEUk1fWEVfVk1fQ1JFQVRFX0FTWU5DX0RFRkFVTFQsIDApOw0KPiA+ID4gIAlib19z aXplID0gc2l6ZW9mKCpkYXRhKSAqIE5fRVhFQ19RVUVVRVM7DQo+ID4gPiAgCWJvX3NpemUgPSBB TElHTihib19zaXplICsgeGVfY3NfcHJlZmV0Y2hfc2l6ZShmZCksDQo+ID4gPiAgCQkJeGVfZ2V0 X2RlZmF1bHRfYWxpZ25tZW50KGZkKSk7DQo+ID4gPiBAQCAtOTAsNyArOTAsNyBAQCBzdGF0aWMg dm9pZCB0ZXN0X2FjdGl2ZShpbnQgZmQsIHN0cnVjdCBkcm1feGVfZW5naW5lX2NsYXNzX2luc3Rh bmNlICplY2kpDQo+ID4gPiAgDQo+ID4gPiAgCQlmb3IgKGkgPSAwOyBpIDwgTl9FWEVDX1FVRVVF UzsgaSsrKSB7DQo+ID4gPiAgCQkJZXhlY19xdWV1ZXNbaV0gPSB4ZV9leGVjX3F1ZXVlX2NyZWF0 ZShmZCwgdm0sIGVjaSwgMCk7DQo+ID4gPiAtCQkJYmluZF9leGVjX3F1ZXVlc1tpXSA9IHhlX2Jp bmRfZXhlY19xdWV1ZV9jcmVhdGUoZmQsIHZtLCAwKTsNCj4gPiA+ICsJCQliaW5kX2V4ZWNfcXVl dWVzW2ldID0geGVfYmluZF9leGVjX3F1ZXVlX2NyZWF0ZShmZCwgdm0sIDAsIHRydWUpOw0KPiA+ ID4gIAkJCXN5bmNvYmpzW2ldID0gc3luY29ial9jcmVhdGUoZmQsIDApOw0KPiA+ID4gIAkJfQ0K PiA+ID4gIAkJc3luY29ianNbTl9FWEVDX1FVRVVFU10gPSBzeW5jb2JqX2NyZWF0ZShmZCwgMCk7 DQo+ID4gPiBkaWZmIC0tZ2l0IGEvdGVzdHMvaW50ZWwveGVfZXZpY3QuYyBiL3Rlc3RzL2ludGVs L3hlX2V2aWN0LmMNCj4gPiA+IGluZGV4IDVkODk4MWY4ZC4uZWVjMDAxMjE4IDEwMDY0NA0KPiA+ ID4gLS0tIGEvdGVzdHMvaW50ZWwveGVfZXZpY3QuYw0KPiA+ID4gKysrIGIvdGVzdHMvaW50ZWwv eGVfZXZpY3QuYw0KPiA+ID4gQEAgLTYzLDE1ICs2MywxNyBAQCB0ZXN0X2V2aWN0KGludCBmZCwg c3RydWN0IGRybV94ZV9lbmdpbmVfY2xhc3NfaW5zdGFuY2UgKmVjaSwNCj4gPiA+ICANCj4gPiA+ ICAJZmQgPSBkcm1fb3Blbl9kcml2ZXIoRFJJVkVSX1hFKTsNCj4gPiA+ICANCj4gPiA+IC0Jdm0g PSB4ZV92bV9jcmVhdGUoZmQsIERSTV9YRV9WTV9DUkVBVEVfQVNZTkNfQklORF9PUFMsIDApOw0K PiA+ID4gKwl2bSA9IHhlX3ZtX2NyZWF0ZShmZCwgRFJNX1hFX1ZNX0NSRUFURV9BU1lOQ19ERUZB VUxULCAwKTsNCj4gPiA+ICAJaWYgKGZsYWdzICYgQklORF9FWEVDX1FVRVVFKQ0KPiA+ID4gLQkJ YmluZF9leGVjX3F1ZXVlc1swXSA9IHhlX2JpbmRfZXhlY19xdWV1ZV9jcmVhdGUoZmQsIHZtLCAw KTsNCj4gPiA+ICsJCWJpbmRfZXhlY19xdWV1ZXNbMF0gPSB4ZV9iaW5kX2V4ZWNfcXVldWVfY3Jl YXRlKGZkLCB2bSwgMCwgdHJ1ZSk7DQo+ID4gPiAgCWlmIChmbGFncyAmIE1VTFRJX1ZNKSB7DQo+ ID4gPiAtCQl2bTIgPSB4ZV92bV9jcmVhdGUoZmQsIERSTV9YRV9WTV9DUkVBVEVfQVNZTkNfQklO RF9PUFMsIDApOw0KPiA+ID4gLQkJdm0zID0geGVfdm1fY3JlYXRlKGZkLCBEUk1fWEVfVk1fQ1JF QVRFX0FTWU5DX0JJTkRfT1BTLCAwKTsNCj4gPiA+ICsJCXZtMiA9IHhlX3ZtX2NyZWF0ZShmZCwg RFJNX1hFX1ZNX0NSRUFURV9BU1lOQ19ERUZBVUxULCAwKTsNCj4gPiA+ICsJCXZtMyA9IHhlX3Zt X2NyZWF0ZShmZCwgRFJNX1hFX1ZNX0NSRUFURV9BU1lOQ19ERUZBVUxULCAwKTsNCj4gPiA+ICAJ CWlmIChmbGFncyAmIEJJTkRfRVhFQ19RVUVVRSkgew0KPiA+ID4gLQkJCWJpbmRfZXhlY19xdWV1 ZXNbMV0gPSB4ZV9iaW5kX2V4ZWNfcXVldWVfY3JlYXRlKGZkLCB2bTIsIDApOw0KPiA+ID4gLQkJ CWJpbmRfZXhlY19xdWV1ZXNbMl0gPSB4ZV9iaW5kX2V4ZWNfcXVldWVfY3JlYXRlKGZkLCB2bTMs IDApOw0KPiA+ID4gKwkJCWJpbmRfZXhlY19xdWV1ZXNbMV0gPSB4ZV9iaW5kX2V4ZWNfcXVldWVf Y3JlYXRlKGZkLCB2bTIsDQo+ID4gPiArCQkJCQkJCQkJMCwgdHJ1ZSk7DQo+ID4gPiArCQkJYmlu ZF9leGVjX3F1ZXVlc1syXSA9IHhlX2JpbmRfZXhlY19xdWV1ZV9jcmVhdGUoZmQsIHZtMywNCj4g PiA+ICsJCQkJCQkJCQkwLCB0cnVlKTsNCj4gPiA+ICAJCX0NCj4gPiA+ICAJfQ0KPiA+ID4gIA0K PiA+ID4gQEAgLTI0MCwxNSArMjQyLDE2IEBAIHRlc3RfZXZpY3RfY20oaW50IGZkLCBzdHJ1Y3Qg ZHJtX3hlX2VuZ2luZV9jbGFzc19pbnN0YW5jZSAqZWNpLA0KPiA+ID4gIA0KPiA+ID4gIAlmZCA9 IGRybV9vcGVuX2RyaXZlcihEUklWRVJfWEUpOw0KPiA+ID4gIA0KPiA+ID4gLQl2bSA9IHhlX3Zt X2NyZWF0ZShmZCwgRFJNX1hFX1ZNX0NSRUFURV9BU1lOQ19CSU5EX09QUyB8DQo+ID4gPiArCXZt ID0geGVfdm1fY3JlYXRlKGZkLCBEUk1fWEVfVk1fQ1JFQVRFX0FTWU5DX0RFRkFVTFQgfA0KPiA+ ID4gIAkJCSAgRFJNX1hFX1ZNX0NSRUFURV9DT01QVVRFX01PREUsIDApOw0KPiA+ID4gIAlpZiAo ZmxhZ3MgJiBCSU5EX0VYRUNfUVVFVUUpDQo+ID4gPiAtCQliaW5kX2V4ZWNfcXVldWVzWzBdID0g eGVfYmluZF9leGVjX3F1ZXVlX2NyZWF0ZShmZCwgdm0sIDApOw0KPiA+ID4gKwkJYmluZF9leGVj X3F1ZXVlc1swXSA9IHhlX2JpbmRfZXhlY19xdWV1ZV9jcmVhdGUoZmQsIHZtLCAwLCB0cnVlKTsN Cj4gPiA+ICAJaWYgKGZsYWdzICYgTVVMVElfVk0pIHsNCj4gPiA+IC0JCXZtMiA9IHhlX3ZtX2Ny ZWF0ZShmZCwgRFJNX1hFX1ZNX0NSRUFURV9BU1lOQ19CSU5EX09QUyB8DQo+ID4gPiArCQl2bTIg PSB4ZV92bV9jcmVhdGUoZmQsIERSTV9YRV9WTV9DUkVBVEVfQVNZTkNfREVGQVVMVCB8DQo+ID4g PiAgCQkJCSAgIERSTV9YRV9WTV9DUkVBVEVfQ09NUFVURV9NT0RFLCAwKTsNCj4gPiA+ICAJCWlm IChmbGFncyAmIEJJTkRfRVhFQ19RVUVVRSkNCj4gPiA+IC0JCQliaW5kX2V4ZWNfcXVldWVzWzFd ID0geGVfYmluZF9leGVjX3F1ZXVlX2NyZWF0ZShmZCwgdm0yLCAwKTsNCj4gPiA+ICsJCQliaW5k X2V4ZWNfcXVldWVzWzFdID0geGVfYmluZF9leGVjX3F1ZXVlX2NyZWF0ZShmZCwgdm0yLA0KPiA+ ID4gKwkJCQkJCQkJCTAsIHRydWUpOw0KPiA+ID4gIAl9DQo+ID4gPiAgDQo+ID4gPiAgCWZvciAo aSA9IDA7IGkgPCBuX2V4ZWNfcXVldWVzOyBpKyspIHsNCj4gPiA+IGRpZmYgLS1naXQgYS90ZXN0 cy9pbnRlbC94ZV9leGVjX2JhbGFuY2VyLmMgYi90ZXN0cy9pbnRlbC94ZV9leGVjX2JhbGFuY2Vy LmMNCj4gPiA+IGluZGV4IGY0ZjU0NDBmNC4uM2NhM2RlODgxIDEwMDY0NA0KPiA+ID4gLS0tIGEv dGVzdHMvaW50ZWwveGVfZXhlY19iYWxhbmNlci5jDQo+ID4gPiArKysgYi90ZXN0cy9pbnRlbC94 ZV9leGVjX2JhbGFuY2VyLmMNCj4gPiA+IEBAIC02Niw3ICs2Niw3IEBAIHN0YXRpYyB2b2lkIHRl c3RfYWxsX2FjdGl2ZShpbnQgZmQsIGludCBndCwgaW50IGNsYXNzKQ0KPiA+ID4gIAlpZiAobnVt X3BsYWNlbWVudHMgPCAyKQ0KPiA+ID4gIAkJcmV0dXJuOw0KPiA+ID4gIA0KPiA+ID4gLQl2bSA9 IHhlX3ZtX2NyZWF0ZShmZCwgRFJNX1hFX1ZNX0NSRUFURV9BU1lOQ19CSU5EX09QUywgMCk7DQo+ ID4gPiArCXZtID0geGVfdm1fY3JlYXRlKGZkLCBEUk1fWEVfVk1fQ1JFQVRFX0FTWU5DX0RFRkFV TFQsIDApOw0KPiA+ID4gIAlib19zaXplID0gc2l6ZW9mKCpkYXRhKSAqIG51bV9wbGFjZW1lbnRz Ow0KPiA+ID4gIAlib19zaXplID0gQUxJR04oYm9fc2l6ZSArIHhlX2NzX3ByZWZldGNoX3NpemUo ZmQpLCB4ZV9nZXRfZGVmYXVsdF9hbGlnbm1lbnQoZmQpKTsNCj4gPiA+ICANCj4gPiA+IEBAIC0y MDcsNyArMjA3LDcgQEAgdGVzdF9leGVjKGludCBmZCwgaW50IGd0LCBpbnQgY2xhc3MsIGludCBu X2V4ZWNfcXVldWVzLCBpbnQgbl9leGVjcywNCj4gPiA+ICAJaWYgKG51bV9wbGFjZW1lbnRzIDwg MikNCj4gPiA+ICAJCXJldHVybjsNCj4gPiA+ICANCj4gPiA+IC0Jdm0gPSB4ZV92bV9jcmVhdGUo ZmQsIERSTV9YRV9WTV9DUkVBVEVfQVNZTkNfQklORF9PUFMsIDApOw0KPiA+ID4gKwl2bSA9IHhl X3ZtX2NyZWF0ZShmZCwgRFJNX1hFX1ZNX0NSRUFURV9BU1lOQ19ERUZBVUxULCAwKTsNCj4gPiA+ ICAJYm9fc2l6ZSA9IHNpemVvZigqZGF0YSkgKiBuX2V4ZWNzOw0KPiA+ID4gIAlib19zaXplID0g QUxJR04oYm9fc2l6ZSArIHhlX2NzX3ByZWZldGNoX3NpemUoZmQpLCB4ZV9nZXRfZGVmYXVsdF9h bGlnbm1lbnQoZmQpKTsNCj4gPiA+ICANCj4gPiA+IEBAIC00MzMsNyArNDMzLDcgQEAgdGVzdF9j bShpbnQgZmQsIGludCBndCwgaW50IGNsYXNzLCBpbnQgbl9leGVjX3F1ZXVlcywgaW50IG5fZXhl Y3MsDQo+ID4gPiAgCWlmIChudW1fcGxhY2VtZW50cyA8IDIpDQo+ID4gPiAgCQlyZXR1cm47DQo+ ID4gPiAgDQo+ID4gPiAtCXZtID0geGVfdm1fY3JlYXRlKGZkLCBEUk1fWEVfVk1fQ1JFQVRFX0FT WU5DX0JJTkRfT1BTIHwNCj4gPiA+ICsJdm0gPSB4ZV92bV9jcmVhdGUoZmQsIERSTV9YRV9WTV9D UkVBVEVfQVNZTkNfREVGQVVMVCB8DQo+ID4gPiAgCQkJICBEUk1fWEVfVk1fQ1JFQVRFX0NPTVBV VEVfTU9ERSwgMCk7DQo+ID4gPiAgCWJvX3NpemUgPSBzaXplb2YoKmRhdGEpICogbl9leGVjczsN Cj4gPiA+ICAJYm9fc2l6ZSA9IEFMSUdOKGJvX3NpemUgKyB4ZV9jc19wcmVmZXRjaF9zaXplKGZk KSwNCj4gPiA+IGRpZmYgLS1naXQgYS90ZXN0cy9pbnRlbC94ZV9leGVjX2Jhc2ljLmMgYi90ZXN0 cy9pbnRlbC94ZV9leGVjX2Jhc2ljLmMNCj4gPiA+IGluZGV4IGUyOTM5OGFhYS4uOGRiY2U1MjRk IDEwMDY0NA0KPiA+ID4gLS0tIGEvdGVzdHMvaW50ZWwveGVfZXhlY19iYXNpYy5jDQo+ID4gPiAr KysgYi90ZXN0cy9pbnRlbC94ZV9leGVjX2Jhc2ljLmMNCj4gPiA+IEBAIC0xMDksNyArMTA5LDcg QEAgdGVzdF9leGVjKGludCBmZCwgc3RydWN0IGRybV94ZV9lbmdpbmVfY2xhc3NfaW5zdGFuY2Ug KmVjaSwNCj4gPiA+ICAJaWd0X2Fzc2VydChuX3ZtIDw9IE1BWF9OX0VYRUNfUVVFVUVTKTsNCj4g PiA+ICANCj4gPiA+ICAJZm9yIChpID0gMDsgaSA8IG5fdm07ICsraSkNCj4gPiA+IC0JCXZtW2ld ID0geGVfdm1fY3JlYXRlKGZkLCBEUk1fWEVfVk1fQ1JFQVRFX0FTWU5DX0JJTkRfT1BTLCAwKTsN Cj4gPiA+ICsJCXZtW2ldID0geGVfdm1fY3JlYXRlKGZkLCBEUk1fWEVfVk1fQ1JFQVRFX0FTWU5D X0RFRkFVTFQsIDApOw0KPiA+ID4gIAlib19zaXplID0gc2l6ZW9mKCpkYXRhKSAqIG5fZXhlY3M7 DQo+ID4gPiAgCWJvX3NpemUgPSBBTElHTihib19zaXplICsgeGVfY3NfcHJlZmV0Y2hfc2l6ZShm ZCksDQo+ID4gPiAgCQkJeGVfZ2V0X2RlZmF1bHRfYWxpZ25tZW50KGZkKSk7DQo+ID4gPiBAQCAt MTUxLDcgKzE1MSw5IEBAIHRlc3RfZXhlYyhpbnQgZmQsIHN0cnVjdCBkcm1feGVfZW5naW5lX2Ns YXNzX2luc3RhbmNlICplY2ksDQo+ID4gPiAgDQo+ID4gPiAgCQlleGVjX3F1ZXVlc1tpXSA9IHhl X2V4ZWNfcXVldWVfY3JlYXRlKGZkLCBfX3ZtLCBlY2ksIDApOw0KPiA+ID4gIAkJaWYgKGZsYWdz ICYgQklORF9FWEVDX1FVRVVFKQ0KPiA+ID4gLQkJCWJpbmRfZXhlY19xdWV1ZXNbaV0gPSB4ZV9i aW5kX2V4ZWNfcXVldWVfY3JlYXRlKGZkLCBfX3ZtLCAwKTsNCj4gPiA+ICsJCQliaW5kX2V4ZWNf cXVldWVzW2ldID0geGVfYmluZF9leGVjX3F1ZXVlX2NyZWF0ZShmZCwNCj4gPiA+ICsJCQkJCQkJ CQlfX3ZtLCAwLA0KPiA+ID4gKwkJCQkJCQkJCXRydWUpOw0KPiA+ID4gIAkJZWxzZQ0KPiA+ID4g IAkJCWJpbmRfZXhlY19xdWV1ZXNbaV0gPSAwOw0KPiA+ID4gIAkJc3luY29ianNbaV0gPSBzeW5j b2JqX2NyZWF0ZShmZCwgMCk7DQo+ID4gPiBkaWZmIC0tZ2l0IGEvdGVzdHMvaW50ZWwveGVfZXhl Y19jb21wdXRlX21vZGUuYyBiL3Rlc3RzL2ludGVsL3hlX2V4ZWNfY29tcHV0ZV9tb2RlLmMNCj4g PiA+IGluZGV4IDAyZTdlZjIwMS4uYjBhNjc3ZGNhIDEwMDY0NA0KPiA+ID4gLS0tIGEvdGVzdHMv aW50ZWwveGVfZXhlY19jb21wdXRlX21vZGUuYw0KPiA+ID4gKysrIGIvdGVzdHMvaW50ZWwveGVf ZXhlY19jb21wdXRlX21vZGUuYw0KPiA+ID4gQEAgLTExMyw3ICsxMTMsNyBAQCB0ZXN0X2V4ZWMo aW50IGZkLCBzdHJ1Y3QgZHJtX3hlX2VuZ2luZV9jbGFzc19pbnN0YW5jZSAqZWNpLA0KPiA+ID4g IA0KPiA+ID4gIAlpZ3RfYXNzZXJ0KG5fZXhlY19xdWV1ZXMgPD0gTUFYX05fRVhFQ1FVRVVFUyk7 DQo+ID4gPiAgDQo+ID4gPiAtCXZtID0geGVfdm1fY3JlYXRlKGZkLCBEUk1fWEVfVk1fQ1JFQVRF X0FTWU5DX0JJTkRfT1BTIHwNCj4gPiA+ICsJdm0gPSB4ZV92bV9jcmVhdGUoZmQsIERSTV9YRV9W TV9DUkVBVEVfQVNZTkNfREVGQVVMVCB8DQo+ID4gPiAgCQkJICBEUk1fWEVfVk1fQ1JFQVRFX0NP TVBVVEVfTU9ERSwgMCk7DQo+ID4gPiAgCWJvX3NpemUgPSBzaXplb2YoKmRhdGEpICogbl9leGVj czsNCj4gPiA+ICAJYm9fc2l6ZSA9IEFMSUdOKGJvX3NpemUgKyB4ZV9jc19wcmVmZXRjaF9zaXpl KGZkKSwNCj4gPiA+IEBAIC0xMjMsNyArMTIzLDcgQEAgdGVzdF9leGVjKGludCBmZCwgc3RydWN0 IGRybV94ZV9lbmdpbmVfY2xhc3NfaW5zdGFuY2UgKmVjaSwNCj4gPiA+ICAJCWV4ZWNfcXVldWVz W2ldID0geGVfZXhlY19xdWV1ZV9jcmVhdGUoZmQsIHZtLCBlY2ksIDApOw0KPiA+ID4gIAkJaWYg KGZsYWdzICYgQklORF9FWEVDUVVFVUUpDQo+ID4gPiAgCQkJYmluZF9leGVjX3F1ZXVlc1tpXSA9 DQo+ID4gPiAtCQkJCXhlX2JpbmRfZXhlY19xdWV1ZV9jcmVhdGUoZmQsIHZtLCAwKTsNCj4gPiA+ ICsJCQkJeGVfYmluZF9leGVjX3F1ZXVlX2NyZWF0ZShmZCwgdm0sIDAsIHRydWUpOw0KPiA+ID4g IAkJZWxzZQ0KPiA+ID4gIAkJCWJpbmRfZXhlY19xdWV1ZXNbaV0gPSAwOw0KPiA+ID4gIAl9Ow0K PiA+ID4gQEAgLTE1MSw3ICsxNTEsNyBAQCB0ZXN0X2V4ZWMoaW50IGZkLCBzdHJ1Y3QgZHJtX3hl X2VuZ2luZV9jbGFzc19pbnN0YW5jZSAqZWNpLA0KPiA+ID4gIAkJZXhlY19xdWV1ZXNbaV0gPSB4 ZV9leGVjX3F1ZXVlX2NyZWF0ZShmZCwgdm0sIGVjaSwgMCk7DQo+ID4gPiAgCQlpZiAoZmxhZ3Mg JiBCSU5EX0VYRUNRVUVVRSkNCj4gPiA+ICAJCQliaW5kX2V4ZWNfcXVldWVzW2ldID0NCj4gPiA+ IC0JCQkJeGVfYmluZF9leGVjX3F1ZXVlX2NyZWF0ZShmZCwgdm0sIDApOw0KPiA+ID4gKwkJCQl4 ZV9iaW5kX2V4ZWNfcXVldWVfY3JlYXRlKGZkLCB2bSwgMCwgdHJ1ZSk7DQo+ID4gPiAgCQllbHNl DQo+ID4gPiAgCQkJYmluZF9leGVjX3F1ZXVlc1tpXSA9IDA7DQo+ID4gPiAgCX07DQo+ID4gPiBk aWZmIC0tZ2l0IGEvdGVzdHMvaW50ZWwveGVfZXhlY19mYXVsdF9tb2RlLmMgYi90ZXN0cy9pbnRl bC94ZV9leGVjX2ZhdWx0X21vZGUuYw0KPiA+ID4gaW5kZXggYzVkNmJkY2Q1Li45MmQ4NjkwYTEg MTAwNjQ0DQo+ID4gPiAtLS0gYS90ZXN0cy9pbnRlbC94ZV9leGVjX2ZhdWx0X21vZGUuYw0KPiA+ ID4gKysrIGIvdGVzdHMvaW50ZWwveGVfZXhlY19mYXVsdF9tb2RlLmMNCj4gPiA+IEBAIC0xMzEs NyArMTMxLDcgQEAgdGVzdF9leGVjKGludCBmZCwgc3RydWN0IGRybV94ZV9lbmdpbmVfY2xhc3Nf aW5zdGFuY2UgKmVjaSwNCj4gPiA+ICANCj4gPiA+ICAJaWd0X2Fzc2VydChuX2V4ZWNfcXVldWVz IDw9IE1BWF9OX0VYRUNfUVVFVUVTKTsNCj4gPiA+ICANCj4gPiA+IC0Jdm0gPSB4ZV92bV9jcmVh dGUoZmQsIERSTV9YRV9WTV9DUkVBVEVfQVNZTkNfQklORF9PUFMgfA0KPiA+ID4gKwl2bSA9IHhl X3ZtX2NyZWF0ZShmZCwgRFJNX1hFX1ZNX0NSRUFURV9BU1lOQ19ERUZBVUxUIHwNCj4gPiA+ICAJ CQkgIERSTV9YRV9WTV9DUkVBVEVfRkFVTFRfTU9ERSwgMCk7DQo+ID4gPiAgCWJvX3NpemUgPSBz aXplb2YoKmRhdGEpICogbl9leGVjczsNCj4gPiA+ICAJYm9fc2l6ZSA9IEFMSUdOKGJvX3NpemUg KyB4ZV9jc19wcmVmZXRjaF9zaXplKGZkKSwNCj4gPiA+IEBAIC0xNjUsNyArMTY1LDcgQEAgdGVz dF9leGVjKGludCBmZCwgc3RydWN0IGRybV94ZV9lbmdpbmVfY2xhc3NfaW5zdGFuY2UgKmVjaSwN Cj4gPiA+ICAJCWV4ZWNfcXVldWVzW2ldID0geGVfZXhlY19xdWV1ZV9jcmVhdGUoZmQsIHZtLCBl Y2ksIDApOw0KPiA+ID4gIAkJaWYgKGZsYWdzICYgQklORF9FWEVDX1FVRVVFKQ0KPiA+ID4gIAkJ CWJpbmRfZXhlY19xdWV1ZXNbaV0gPQ0KPiA+ID4gLQkJCQl4ZV9iaW5kX2V4ZWNfcXVldWVfY3Jl YXRlKGZkLCB2bSwgMCk7DQo+ID4gPiArCQkJCXhlX2JpbmRfZXhlY19xdWV1ZV9jcmVhdGUoZmQs IHZtLCAwLCB0cnVlKTsNCj4gPiA+ICAJCWVsc2UNCj4gPiA+ICAJCQliaW5kX2V4ZWNfcXVldWVz W2ldID0gMDsNCj4gPiA+ICAJfTsNCj4gPiA+IEBAIC0zNzUsNyArMzc1LDcgQEAgdGVzdF9hdG9t aWMoaW50IGZkLCBzdHJ1Y3QgZHJtX3hlX2VuZ2luZV9jbGFzc19pbnN0YW5jZSAqZWNpLA0KPiA+ ID4gIAl1aW50MzJfdCAqcHRyOw0KPiA+ID4gIAlpbnQgaSwgYiwgd2FpdF9pZHggPSAwOw0KPiA+ ID4gIA0KPiA+ID4gLQl2bSA9IHhlX3ZtX2NyZWF0ZShmZCwgRFJNX1hFX1ZNX0NSRUFURV9BU1lO Q19CSU5EX09QUyB8DQo+ID4gPiArCXZtID0geGVfdm1fY3JlYXRlKGZkLCBEUk1fWEVfVk1fQ1JF QVRFX0FTWU5DX0RFRkFVTFQgfA0KPiA+ID4gIAkJCSAgRFJNX1hFX1ZNX0NSRUFURV9GQVVMVF9N T0RFLCAwKTsNCj4gPiA+ICAJYm9fc2l6ZSA9IHNpemVvZigqZGF0YSkgKiBuX2F0b21pYzsNCj4g PiA+ICAJYm9fc2l6ZSA9IEFMSUdOKGJvX3NpemUgKyB4ZV9jc19wcmVmZXRjaF9zaXplKGZkKSwN Cj4gPiA+IGRpZmYgLS1naXQgYS90ZXN0cy9pbnRlbC94ZV9leGVjX3Jlc2V0LmMgYi90ZXN0cy9p bnRlbC94ZV9leGVjX3Jlc2V0LmMNCj4gPiA+IGluZGV4IGNhOGQ3Y2MxMy4uNDQyNDg3NzZiIDEw MDY0NA0KPiA+ID4gLS0tIGEvdGVzdHMvaW50ZWwveGVfZXhlY19yZXNldC5jDQo+ID4gPiArKysg Yi90ZXN0cy9pbnRlbC94ZV9leGVjX3Jlc2V0LmMNCj4gPiA+IEBAIC00NSw3ICs0NSw3IEBAIHN0 YXRpYyB2b2lkIHRlc3Rfc3BpbihpbnQgZmQsIHN0cnVjdCBkcm1feGVfZW5naW5lX2NsYXNzX2lu c3RhbmNlICplY2kpDQo+ID4gPiAgCXN0cnVjdCB4ZV9zcGluICpzcGluOw0KPiA+ID4gIAlzdHJ1 Y3QgeGVfc3Bpbl9vcHRzIHNwaW5fb3B0cyA9IHsgLmFkZHIgPSBhZGRyLCAucHJlZW1wdCA9IGZh bHNlIH07DQo+ID4gPiAgDQo+ID4gPiAtCXZtID0geGVfdm1fY3JlYXRlKGZkLCBEUk1fWEVfVk1f Q1JFQVRFX0FTWU5DX0JJTkRfT1BTLCAwKTsNCj4gPiA+ICsJdm0gPSB4ZV92bV9jcmVhdGUoZmQs IERSTV9YRV9WTV9DUkVBVEVfQVNZTkNfREVGQVVMVCwgMCk7DQo+ID4gPiAgCWJvX3NpemUgPSBz aXplb2YoKnNwaW4pOw0KPiA+ID4gIAlib19zaXplID0gQUxJR04oYm9fc2l6ZSArIHhlX2NzX3By ZWZldGNoX3NpemUoZmQpLA0KPiA+ID4gIAkJCXhlX2dldF9kZWZhdWx0X2FsaWdubWVudChmZCkp Ow0KPiA+ID4gQEAgLTE3Niw3ICsxNzYsNyBAQCB0ZXN0X2JhbGFuY2VyKGludCBmZCwgaW50IGd0 LCBpbnQgY2xhc3MsIGludCBuX2V4ZWNfcXVldWVzLCBpbnQgbl9leGVjcywNCj4gPiA+ICAJaWYg KG51bV9wbGFjZW1lbnRzIDwgMikNCj4gPiA+ICAJCXJldHVybjsNCj4gPiA+ICANCj4gPiA+IC0J dm0gPSB4ZV92bV9jcmVhdGUoZmQsIERSTV9YRV9WTV9DUkVBVEVfQVNZTkNfQklORF9PUFMsIDAp Ow0KPiA+ID4gKwl2bSA9IHhlX3ZtX2NyZWF0ZShmZCwgRFJNX1hFX1ZNX0NSRUFURV9BU1lOQ19E RUZBVUxULCAwKTsNCj4gPiA+ICAJYm9fc2l6ZSA9IHNpemVvZigqZGF0YSkgKiBuX2V4ZWNzOw0K PiA+ID4gIAlib19zaXplID0gQUxJR04oYm9fc2l6ZSArIHhlX2NzX3ByZWZldGNoX3NpemUoZmQp LA0KPiA+ID4gIAkJCXhlX2dldF9kZWZhdWx0X2FsaWdubWVudChmZCkpOw0KPiA+ID4gQEAgLTM2 Miw3ICszNjIsNyBAQCB0ZXN0X2xlZ2FjeV9tb2RlKGludCBmZCwgc3RydWN0IGRybV94ZV9lbmdp bmVfY2xhc3NfaW5zdGFuY2UgKmVjaSwNCj4gPiA+ICAJaWYgKGZsYWdzICYgQ0xPU0VfRkQpDQo+ ID4gPiAgCQlmZCA9IGRybV9vcGVuX2RyaXZlcihEUklWRVJfWEUpOw0KPiA+ID4gIA0KPiA+ID4g LQl2bSA9IHhlX3ZtX2NyZWF0ZShmZCwgRFJNX1hFX1ZNX0NSRUFURV9BU1lOQ19CSU5EX09QUywg MCk7DQo+ID4gPiArCXZtID0geGVfdm1fY3JlYXRlKGZkLCBEUk1fWEVfVk1fQ1JFQVRFX0FTWU5D X0RFRkFVTFQsIDApOw0KPiA+ID4gIAlib19zaXplID0gc2l6ZW9mKCpkYXRhKSAqIG5fZXhlY3M7 DQo+ID4gPiAgCWJvX3NpemUgPSBBTElHTihib19zaXplICsgeGVfY3NfcHJlZmV0Y2hfc2l6ZShm ZCksDQo+ID4gPiAgCQkJeGVfZ2V0X2RlZmF1bHRfYWxpZ25tZW50KGZkKSk7DQo+ID4gPiBAQCAt NTI4LDcgKzUyOCw3IEBAIHRlc3RfY29tcHV0ZV9tb2RlKGludCBmZCwgc3RydWN0IGRybV94ZV9l bmdpbmVfY2xhc3NfaW5zdGFuY2UgKmVjaSwNCj4gPiA+ICAJaWYgKGZsYWdzICYgQ0xPU0VfRkQp DQo+ID4gPiAgCQlmZCA9IGRybV9vcGVuX2RyaXZlcihEUklWRVJfWEUpOw0KPiA+ID4gIA0KPiA+ ID4gLQl2bSA9IHhlX3ZtX2NyZWF0ZShmZCwgRFJNX1hFX1ZNX0NSRUFURV9BU1lOQ19CSU5EX09Q UyB8DQo+ID4gPiArCXZtID0geGVfdm1fY3JlYXRlKGZkLCBEUk1fWEVfVk1fQ1JFQVRFX0FTWU5D X0RFRkFVTFQgfA0KPiA+ID4gIAkJCSAgRFJNX1hFX1ZNX0NSRUFURV9DT01QVVRFX01PREUsIDAp Ow0KPiA+ID4gIAlib19zaXplID0gc2l6ZW9mKCpkYXRhKSAqIG5fZXhlY3M7DQo+ID4gPiAgCWJv X3NpemUgPSBBTElHTihib19zaXplICsgeGVfY3NfcHJlZmV0Y2hfc2l6ZShmZCksDQo+ID4gPiBk aWZmIC0tZ2l0IGEvdGVzdHMvaW50ZWwveGVfZXhlY19zdG9yZS5jIGIvdGVzdHMvaW50ZWwveGVf ZXhlY19zdG9yZS5jDQo+ID4gPiBpbmRleCAxNGY3YzliZWMuLjkwNjg0YjhjYiAxMDA2NDQNCj4g PiA+IC0tLSBhL3Rlc3RzL2ludGVsL3hlX2V4ZWNfc3RvcmUuYw0KPiA+ID4gKysrIGIvdGVzdHMv aW50ZWwveGVfZXhlY19zdG9yZS5jDQo+ID4gPiBAQCAtNzUsNyArNzUsNyBAQCBzdGF0aWMgdm9p ZCBzdG9yZShpbnQgZmQpDQo+ID4gPiAgCXN5bmNvYmogPSBzeW5jb2JqX2NyZWF0ZShmZCwgMCk7 DQo+ID4gPiAgCXN5bmMuaGFuZGxlID0gc3luY29iajsNCj4gPiA+ICANCj4gPiA+IC0Jdm0gPSB4 ZV92bV9jcmVhdGUoZmQsIERSTV9YRV9WTV9DUkVBVEVfQVNZTkNfQklORF9PUFMsIDApOw0KPiA+ ID4gKwl2bSA9IHhlX3ZtX2NyZWF0ZShmZCwgRFJNX1hFX1ZNX0NSRUFURV9BU1lOQ19ERUZBVUxU LCAwKTsNCj4gPiA+ICAJYm9fc2l6ZSA9IHNpemVvZigqZGF0YSk7DQo+ID4gPiAgCWJvX3NpemUg PSBBTElHTihib19zaXplICsgeGVfY3NfcHJlZmV0Y2hfc2l6ZShmZCksDQo+ID4gPiAgCQkJeGVf Z2V0X2RlZmF1bHRfYWxpZ25tZW50KGZkKSk7DQo+ID4gPiBAQCAtMTMyLDcgKzEzMiw3IEBAIHN0 YXRpYyB2b2lkIHN0b3JlX2FsbChpbnQgZmQsIGludCBndCwgaW50IGNsYXNzKQ0KPiA+ID4gIAlz dHJ1Y3QgZHJtX3hlX2VuZ2luZV9jbGFzc19pbnN0YW5jZSAqaHdlOw0KPiA+ID4gIAlpbnQgaSwg bnVtX3BsYWNlbWVudHMgPSAwOw0KPiA+ID4gIA0KPiA+ID4gLQl2bSA9IHhlX3ZtX2NyZWF0ZShm ZCwgRFJNX1hFX1ZNX0NSRUFURV9BU1lOQ19CSU5EX09QUywgMCk7DQo+ID4gPiArCXZtID0geGVf dm1fY3JlYXRlKGZkLCBEUk1fWEVfVk1fQ1JFQVRFX0FTWU5DX0RFRkFVTFQsIDApOw0KPiA+ID4g IAlib19zaXplID0gc2l6ZW9mKCpkYXRhKTsNCj4gPiA+ICAJYm9fc2l6ZSA9IEFMSUdOKGJvX3Np emUgKyB4ZV9jc19wcmVmZXRjaF9zaXplKGZkKSwNCj4gPiA+ICAJCQl4ZV9nZXRfZGVmYXVsdF9h bGlnbm1lbnQoZmQpKTsNCj4gPiA+IGRpZmYgLS1naXQgYS90ZXN0cy9pbnRlbC94ZV9leGVjX3Ro cmVhZHMuYyBiL3Rlc3RzL2ludGVsL3hlX2V4ZWNfdGhyZWFkcy5jDQo+ID4gPiBpbmRleCBjOWE1 MWZjMDAuLmJiMTZiZGQ4OCAxMDA2NDQNCj4gPiA+IC0tLSBhL3Rlc3RzL2ludGVsL3hlX2V4ZWNf dGhyZWFkcy5jDQo+ID4gPiArKysgYi90ZXN0cy9pbnRlbC94ZV9leGVjX3RocmVhZHMuYw0KPiA+ ID4gQEAgLTc3LDcgKzc3LDcgQEAgdGVzdF9iYWxhbmNlcihpbnQgZmQsIGludCBndCwgdWludDMy X3Qgdm0sIHVpbnQ2NF90IGFkZHIsIHVpbnQ2NF90IHVzZXJwdHIsDQo+ID4gPiAgCX0NCj4gPiA+ ICANCj4gPiA+ICAJaWYgKCF2bSkgew0KPiA+ID4gLQkJdm0gPSB4ZV92bV9jcmVhdGUoZmQsIERS TV9YRV9WTV9DUkVBVEVfQVNZTkNfQklORF9PUFMsIDApOw0KPiA+ID4gKwkJdm0gPSB4ZV92bV9j cmVhdGUoZmQsIERSTV9YRV9WTV9DUkVBVEVfQVNZTkNfREVGQVVMVCwgMCk7DQo+ID4gPiAgCQlv d25zX3ZtID0gdHJ1ZTsNCj4gPiA+ICAJfQ0KPiA+ID4gIA0KPiA+ID4gQEAgLTI4NSw3ICsyODUs NyBAQCB0ZXN0X2NvbXB1dGVfbW9kZShpbnQgZmQsIHVpbnQzMl90IHZtLCB1aW50NjRfdCBhZGRy LCB1aW50NjRfdCB1c2VycHRyLA0KPiA+ID4gIAl9DQo+ID4gPiAgDQo+ID4gPiAgCWlmICghdm0p IHsNCj4gPiA+IC0JCXZtID0geGVfdm1fY3JlYXRlKGZkLCBEUk1fWEVfVk1fQ1JFQVRFX0FTWU5D X0JJTkRfT1BTIHwNCj4gPiA+ICsJCXZtID0geGVfdm1fY3JlYXRlKGZkLCBEUk1fWEVfVk1fQ1JF QVRFX0FTWU5DX0RFRkFVTFQgfA0KPiA+ID4gIAkJCQkgIERSTV9YRV9WTV9DUkVBVEVfQ09NUFVU RV9NT0RFLCAwKTsNCj4gPiA+ICAJCW93bnNfdm0gPSB0cnVlOw0KPiA+ID4gIAl9DQo+ID4gPiBA QCAtNDU0LDcgKzQ1NCw3IEBAIHRlc3RfY29tcHV0ZV9tb2RlKGludCBmZCwgdWludDMyX3Qgdm0s IHVpbnQ2NF90IGFkZHIsIHVpbnQ2NF90IHVzZXJwdHIsDQo+ID4gPiAgc3RhdGljIHZvaWQNCj4g PiA+ICB0ZXN0X2xlZ2FjeV9tb2RlKGludCBmZCwgdWludDMyX3Qgdm0sIHVpbnQ2NF90IGFkZHIs IHVpbnQ2NF90IHVzZXJwdHIsDQo+ID4gPiAgCQkgc3RydWN0IGRybV94ZV9lbmdpbmVfY2xhc3Nf aW5zdGFuY2UgKmVjaSwgaW50IG5fZXhlY19xdWV1ZXMsDQo+ID4gPiAtCQkgaW50IG5fZXhlY3Ms IGludCByZWJpbmRfZXJyb3JfaW5qZWN0LCB1bnNpZ25lZCBpbnQgZmxhZ3MpDQo+ID4gPiArCQkg aW50IG5fZXhlY3MsIHVuc2lnbmVkIGludCBmbGFncykNCj4gPiA+ICB7DQo+ID4gPiAgCXN0cnVj dCBkcm1feGVfc3luYyBzeW5jWzJdID0gew0KPiA+ID4gIAkJeyAuZmxhZ3MgPSBEUk1fWEVfU1lO Q19TWU5DT0JKIHwgRFJNX1hFX1NZTkNfU0lHTkFMLCB9LA0KPiA+ID4gQEAgLTQ4OSw3ICs0ODks NyBAQCB0ZXN0X2xlZ2FjeV9tb2RlKGludCBmZCwgdWludDMyX3Qgdm0sIHVpbnQ2NF90IGFkZHIs IHVpbnQ2NF90IHVzZXJwdHIsDQo+ID4gPiAgCX0NCj4gPiA+ICANCj4gPiA+ICAJaWYgKCF2bSkg ew0KPiA+ID4gLQkJdm0gPSB4ZV92bV9jcmVhdGUoZmQsIERSTV9YRV9WTV9DUkVBVEVfQVNZTkNf QklORF9PUFMsIDApOw0KPiA+ID4gKwkJdm0gPSB4ZV92bV9jcmVhdGUoZmQsIERSTV9YRV9WTV9D UkVBVEVfQVNZTkNfREVGQVVMVCwgMCk7DQo+ID4gPiAgCQlvd25zX3ZtID0gdHJ1ZTsNCj4gPiA+ ICAJfQ0KPiA+ID4gIA0KPiA+ID4gQEAgLTUzMSw3ICs1MzEsOCBAQCB0ZXN0X2xlZ2FjeV9tb2Rl KGludCBmZCwgdWludDMyX3Qgdm0sIHVpbnQ2NF90IGFkZHIsIHVpbnQ2NF90IHVzZXJwdHIsDQo+ ID4gPiAgCQllbHNlDQo+ID4gPiAgCQkJZXhlY19xdWV1ZXNbaV0gPSB4ZV9leGVjX3F1ZXVlX2Ny ZWF0ZShmZCwgdm0sIGVjaSwgMCk7DQo+ID4gPiAgCQlpZiAoZmxhZ3MgJiBCSU5EX0VYRUNfUVVF VUUpDQo+ID4gPiAtCQkJYmluZF9leGVjX3F1ZXVlc1tpXSA9IHhlX2JpbmRfZXhlY19xdWV1ZV9j cmVhdGUoZmQsIHZtLCAwKTsNCj4gPiA+ICsJCQliaW5kX2V4ZWNfcXVldWVzW2ldID0geGVfYmlu ZF9leGVjX3F1ZXVlX2NyZWF0ZShmZCwgdm0sDQo+ID4gPiArCQkJCQkJCQkJMCwgdHJ1ZSk7DQo+ ID4gPiAgCQllbHNlDQo+ID4gPiAgCQkJYmluZF9leGVjX3F1ZXVlc1tpXSA9IDA7DQo+ID4gPiAg CQlzeW5jb2Jqc1tpXSA9IHN5bmNvYmpfY3JlYXRlKGZkLCAwKTsNCj4gPiA+IEBAIC01ODMsOCAr NTg0LDcgQEAgdGVzdF9sZWdhY3lfbW9kZShpbnQgZmQsIHVpbnQzMl90IHZtLCB1aW50NjRfdCBh ZGRyLCB1aW50NjRfdCB1c2VycHRyLA0KPiA+ID4gIAkJZXhlYy5hZGRyZXNzID0gZXhlY19hZGRy Ow0KPiA+ID4gIAkJaWYgKGUgIT0gaSAmJiAhKGZsYWdzICYgSEFORykpDQo+ID4gPiAgCQkJIHN5 bmNvYmpfcmVzZXQoZmQsICZzeW5jb2Jqc1tlXSwgMSk7DQo+ID4gPiAtCQlpZiAoKGZsYWdzICYg SEFORyAmJiBlID09IGhhbmdfZXhlY19xdWV1ZSkgfHwNCj4gPiA+IC0JCSAgICByZWJpbmRfZXJy b3JfaW5qZWN0ID4gMCkgew0KPiA+ID4gKwkJaWYgKChmbGFncyAmIEhBTkcgJiYgZSA9PSBoYW5n X2V4ZWNfcXVldWUpKSB7DQo+ID4gPiAgCQkJaW50IGVycjsNCj4gPiA+ICANCj4gPiA+ICAJCQlk byB7DQo+ID4gPiBAQCAtNTk0LDIwICs1OTQsMTAgQEAgdGVzdF9sZWdhY3lfbW9kZShpbnQgZmQs IHVpbnQzMl90IHZtLCB1aW50NjRfdCBhZGRyLCB1aW50NjRfdCB1c2VycHRyLA0KPiA+ID4gIAkJ CXhlX2V4ZWMoZmQsICZleGVjKTsNCj4gPiA+ICAJCX0NCj4gPiA+ICANCj4gPiA+IC0JCWlmIChm bGFncyAmIFJFQklORCAmJiBpICYmDQo+ID4gPiAtCQkgICAgKCEoaSAmIDB4MWYpIHx8IHJlYmlu ZF9lcnJvcl9pbmplY3QgPT0gaSkpIHsNCj4gPiA+IC0jZGVmaW5lIElOSkVDVF9FUlJPUgkoMHgx IDw8IDMxKQ0KPiA+ID4gLQkJCWlmIChyZWJpbmRfZXJyb3JfaW5qZWN0ID09IGkpDQo+ID4gPiAt CQkJCV9feGVfdm1fYmluZF9hc3NlcnQoZmQsIHZtLCBiaW5kX2V4ZWNfcXVldWVzW2VdLA0KPiA+ ID4gLQkJCQkJCSAgICAwLCAwLCBhZGRyLCBib19zaXplLA0KPiA+ID4gLQkJCQkJCSAgICBYRV9W TV9CSU5EX09QX1VOTUFQLA0KPiA+ID4gLQkJCQkJCSAgICBYRV9WTV9CSU5EX0ZMQUdfQVNZTkMg fA0KPiA+ID4gLQkJCQkJCSAgICBJTkpFQ1RfRVJST1IsIHN5bmNfYWxsLA0KPiA+ID4gLQkJCQkJ CSAgICBuX2V4ZWNfcXVldWVzLCAwLCAwKTsNCj4gPiA+IC0JCQllbHNlDQo+ID4gPiAtCQkJCXhl X3ZtX3VuYmluZF9hc3luYyhmZCwgdm0sIGJpbmRfZXhlY19xdWV1ZXNbZV0sDQo+ID4gPiAtCQkJ CQkJICAgMCwgYWRkciwgYm9fc2l6ZSwNCj4gPiA+IC0JCQkJCQkgICBzeW5jX2FsbCwgbl9leGVj X3F1ZXVlcyk7DQo+ID4gPiArCQlpZiAoZmxhZ3MgJiBSRUJJTkQgJiYgaSAmJiAhKGkgJiAweDFm KSkgew0KPiA+ID4gKwkJCXhlX3ZtX3VuYmluZF9hc3luYyhmZCwgdm0sIGJpbmRfZXhlY19xdWV1 ZXNbZV0sDQo+ID4gPiArCQkJCQkgICAwLCBhZGRyLCBib19zaXplLA0KPiA+ID4gKwkJCQkJICAg c3luY19hbGwsIG5fZXhlY19xdWV1ZXMpOw0KPiA+ID4gIA0KPiA+ID4gIAkJCXN5bmNbMF0uZmxh Z3MgfD0gRFJNX1hFX1NZTkNfU0lHTkFMOw0KPiA+ID4gIAkJCWFkZHIgKz0gYm9fc2l6ZTsNCj4g PiA+IEBAIC03MDksNyArNjk5LDYgQEAgc3RydWN0IHRocmVhZF9kYXRhIHsNCj4gPiA+ICAJaW50 IG5fZXhlY19xdWV1ZTsNCj4gPiA+ICAJaW50IG5fZXhlYzsNCj4gPiA+ICAJaW50IGZsYWdzOw0K PiA+ID4gLQlpbnQgcmViaW5kX2Vycm9yX2luamVjdDsNCj4gPiA+ICAJYm9vbCAqZ287DQo+ID4g PiAgfTsNCj4gPiA+ICANCj4gPiA+IEBAIC03MzMsNDYgKzcyMiw3IEBAIHN0YXRpYyB2b2lkICp0 aHJlYWQodm9pZCAqZGF0YSkNCj4gPiA+ICAJZWxzZQ0KPiA+ID4gIAkJdGVzdF9sZWdhY3lfbW9k ZSh0LT5mZCwgdC0+dm1fbGVnYWN5X21vZGUsIHQtPmFkZHIsIHQtPnVzZXJwdHIsDQo+ID4gPiAg CQkJCSB0LT5lY2ksIHQtPm5fZXhlY19xdWV1ZSwgdC0+bl9leGVjLA0KPiA+ID4gLQkJCQkgdC0+ cmViaW5kX2Vycm9yX2luamVjdCwgdC0+ZmxhZ3MpOw0KPiA+ID4gLQ0KPiA+ID4gLQlyZXR1cm4g TlVMTDsNCj4gPiA+IC19DQo+ID4gPiAtDQo+ID4gPiAtc3RydWN0IHZtX3RocmVhZF9kYXRhIHsN Cj4gPiA+IC0JcHRocmVhZF90IHRocmVhZDsNCj4gPiA+IC0JaW50IGZkOw0KPiA+ID4gLQlpbnQg dm07DQo+ID4gPiAtfTsNCj4gPiA+IC0NCj4gPiA+IC1zdGF0aWMgdm9pZCAqdm1fYXN5bmNfb3Bz X2Vycl90aHJlYWQodm9pZCAqZGF0YSkNCj4gPiA+IC17DQo+ID4gPiAtCXN0cnVjdCB2bV90aHJl YWRfZGF0YSAqYXJncyA9IGRhdGE7DQo+ID4gPiAtCWludCBmZCA9IGFyZ3MtPmZkOw0KPiA+ID4g LQlpbnQgcmV0Ow0KPiA+ID4gLQ0KPiA+ID4gLQlzdHJ1Y3QgZHJtX3hlX3dhaXRfdXNlcl9mZW5j ZSB3YWl0ID0gew0KPiA+ID4gLQkJLnZtX2lkID0gYXJncy0+dm0sDQo+ID4gPiAtCQkub3AgPSBE Uk1fWEVfVUZFTkNFX1dBSVRfTkVRLA0KPiA+ID4gLQkJLmZsYWdzID0gRFJNX1hFX1VGRU5DRV9X QUlUX1ZNX0VSUk9SLA0KPiA+ID4gLQkJLm1hc2sgPSBEUk1fWEVfVUZFTkNFX1dBSVRfVTMyLA0K PiA+ID4gLSNkZWZpbmUgQkFTSUNBTExZX0ZPUkVWRVIJMHhmZmZmZmZmZmZmZmYNCj4gPiA+IC0J CS50aW1lb3V0ID0gQkFTSUNBTExZX0ZPUkVWRVIsDQo+ID4gPiAtCX07DQo+ID4gPiAtDQo+ID4g PiAtCXJldCA9IGlndF9pb2N0bChmZCwgRFJNX0lPQ1RMX1hFX1dBSVRfVVNFUl9GRU5DRSwgJndh aXQpOw0KPiA+ID4gLQ0KPiA+ID4gLQl3aGlsZSAoIXJldCkgew0KPiA+ID4gLQkJc3RydWN0IGRy bV94ZV92bV9iaW5kIGJpbmQgPSB7DQo+ID4gPiAtCQkJLnZtX2lkID0gYXJncy0+dm0sDQo+ID4g PiAtCQkJLm51bV9iaW5kcyA9IDEsDQo+ID4gPiAtCQkJLmJpbmQub3AgPSBYRV9WTV9CSU5EX09Q X1JFU1RBUlQsDQo+ID4gPiAtCQl9Ow0KPiA+ID4gLQ0KPiA+ID4gLQkJLyogUmVzdGFydCBhbmQg d2FpdCBmb3IgbmV4dCBlcnJvciAqLw0KPiA+ID4gLQkJaWd0X2Fzc2VydF9lcShpZ3RfaW9jdGwo ZmQsIERSTV9JT0NUTF9YRV9WTV9CSU5ELA0KPiA+ID4gLQkJCQkJJmJpbmQpLCAwKTsNCj4gPiA+ IC0JCXJldCA9IGlndF9pb2N0bChmZCwgRFJNX0lPQ1RMX1hFX1dBSVRfVVNFUl9GRU5DRSwgJndh aXQpOw0KPiA+ID4gLQl9DQo+ID4gPiArCQkJCSB0LT5mbGFncyk7DQo+ID4gPiAgDQo+ID4gPiAg CXJldHVybiBOVUxMOw0KPiA+ID4gIH0NCj4gPiA+IEBAIC04MjYsNiArNzc2LDEwIEBAIHN0YXRp YyB2b2lkICp2bV9hc3luY19vcHNfZXJyX3RocmVhZCh2b2lkICpkYXRhKQ0KPiA+ID4gICAqCXNo YXJlZCB2bSByZWJpbmQgZXJyDQo+ID4gPiAgICogQHNoYXJlZC12bS11c2VycHRyLXJlYmluZC1l cnI6DQo+ID4gPiAgICoJc2hhcmVkIHZtIHVzZXJwdHIgcmViaW5kIGVycg0KPiA+ID4gKyAqIEBy ZWJpbmQtZXJyOg0KPiA+ID4gKyAqCXJlYmluZCBlcnINCj4gPiA+ICsgKiBAdXNlcnB0ci1yZWJp bmQtZXJyOg0KPiA+ID4gKyAqCXVzZXJwdHIgcmViaW5kIGVycg0KPiA+ID4gICAqIEBzaGFyZWQt dm0tdXNlcnB0ci1pbnZhbGlkYXRlOg0KPiA+ID4gICAqCXNoYXJlZCB2bSB1c2VycHRyIGludmFs aWRhdGUNCj4gPiA+ICAgKiBAc2hhcmVkLXZtLXVzZXJwdHItaW52YWxpZGF0ZS1yYWNlOg0KPiA+ ID4gQEAgLTg0Miw3ICs3OTYsNyBAQCBzdGF0aWMgdm9pZCAqdm1fYXN5bmNfb3BzX2Vycl90aHJl YWQodm9pZCAqZGF0YSkNCj4gPiA+ICAgKglmZCB1c2VycHRyIGludmFsaWRhdGUgcmFjZQ0KPiA+ ID4gICAqIEBoYW5nLWJhc2ljOg0KPiA+ID4gICAqCWhhbmcgYmFzaWMNCj4gPiA+IC0gICogQGhh bmctdXNlcnB0cjoNCj4gPiA+ICsgKiBAaGFuZy11c2VycHRyOg0KPiA+ID4gICAqCWhhbmcgdXNl cnB0cg0KPiA+ID4gICAqIEBoYW5nLXJlYmluZDoNCj4gPiA+ICAgKgloYW5nIHJlYmluZA0KPiA+ ID4gQEAgLTg2NCw2ICs4MTgsMTAgQEAgc3RhdGljIHZvaWQgKnZtX2FzeW5jX29wc19lcnJfdGhy ZWFkKHZvaWQgKmRhdGEpDQo+ID4gPiAgICoJaGFuZyBzaGFyZWQgdm0gcmViaW5kIGVycg0KPiA+ ID4gICAqIEBoYW5nLXNoYXJlZC12bS11c2VycHRyLXJlYmluZC1lcnI6DQo+ID4gPiAgICoJaGFu ZyBzaGFyZWQgdm0gdXNlcnB0ciByZWJpbmQgZXJyDQo+ID4gPiArICogQGhhbmctcmViaW5kLWVy cjoNCj4gPiA+ICsgKgloYW5nIHJlYmluZCBlcnINCj4gPiA+ICsgKiBAaGFuZy11c2VycHRyLXJl YmluZC1lcnI6DQo+ID4gPiArICoJaGFuZyB1c2VycHRyIHJlYmluZCBlcnINCj4gPiA+ICAgKiBA aGFuZy1zaGFyZWQtdm0tdXNlcnB0ci1pbnZhbGlkYXRlOg0KPiA+ID4gICAqCWhhbmcgc2hhcmVk IHZtIHVzZXJwdHIgaW52YWxpZGF0ZQ0KPiA+ID4gICAqIEBoYW5nLXNoYXJlZC12bS11c2VycHRy LWludmFsaWRhdGUtcmFjZToNCj4gPiA+IEBAIC0xMDE5LDcgKzk3Nyw2IEBAIHN0YXRpYyB2b2lk IHRocmVhZHMoaW50IGZkLCBpbnQgZmxhZ3MpDQo+ID4gPiAgCWludCBuX2h3X2VuZ2luZXMgPSAw LCBjbGFzczsNCj4gPiA+ICAJdWludDY0X3QgaSA9IDA7DQo+ID4gPiAgCXVpbnQzMl90IHZtX2xl Z2FjeV9tb2RlID0gMCwgdm1fY29tcHV0ZV9tb2RlID0gMDsNCj4gPiA+IC0Jc3RydWN0IHZtX3Ro cmVhZF9kYXRhIHZtX2Vycl90aHJlYWQgPSB7fTsNCj4gPiA+ICAJYm9vbCBnbyA9IGZhbHNlOw0K PiA+ID4gIAlpbnQgbl90aHJlYWRzID0gMDsNCj4gPiA+ICAJaW50IGd0Ow0KPiA+ID4gQEAgLTEw NTIsMTggKzEwMDksMTIgQEAgc3RhdGljIHZvaWQgdGhyZWFkcyhpbnQgZmQsIGludCBmbGFncykN Cj4gPiA+ICANCj4gPiA+ICAJaWYgKGZsYWdzICYgU0hBUkVEX1ZNKSB7DQo+ID4gPiAgCQl2bV9s ZWdhY3lfbW9kZSA9IHhlX3ZtX2NyZWF0ZShmZCwNCj4gPiA+IC0JCQkJCSAgICAgIERSTV9YRV9W TV9DUkVBVEVfQVNZTkNfQklORF9PUFMsDQo+ID4gPiArCQkJCQkgICAgICBEUk1fWEVfVk1fQ1JF QVRFX0FTWU5DX0RFRkFVTFQsDQo+ID4gPiAgCQkJCQkgICAgICAwKTsNCj4gPiA+ICAJCXZtX2Nv bXB1dGVfbW9kZSA9IHhlX3ZtX2NyZWF0ZShmZCwNCj4gPiA+IC0JCQkJCSAgICAgICBEUk1fWEVf Vk1fQ1JFQVRFX0FTWU5DX0JJTkRfT1BTIHwNCj4gPiA+ICsJCQkJCSAgICAgICBEUk1fWEVfVk1f Q1JFQVRFX0FTWU5DX0RFRkFVTFQgfA0KPiA+ID4gIAkJCQkJICAgICAgIERSTV9YRV9WTV9DUkVB VEVfQ09NUFVURV9NT0RFLA0KPiA+ID4gIAkJCQkJICAgICAgIDApOw0KPiA+ID4gLQ0KPiA+ID4g LQkJdm1fZXJyX3RocmVhZC5mZCA9IGZkOw0KPiA+ID4gLQkJdm1fZXJyX3RocmVhZC52bSA9IHZt X2xlZ2FjeV9tb2RlOw0KPiA+ID4gLQkJcHRocmVhZF9jcmVhdGUoJnZtX2Vycl90aHJlYWQudGhy ZWFkLCAwLA0KPiA+ID4gLQkJCSAgICAgICB2bV9hc3luY19vcHNfZXJyX3RocmVhZCwgJnZtX2Vy cl90aHJlYWQpOw0KPiA+ID4gLQ0KPiA+ID4gIAl9DQo+ID4gPiAgDQo+ID4gPiAgCXhlX2Zvcl9l YWNoX2h3X2VuZ2luZShmZCwgaHdlKSB7DQo+ID4gPiBAQCAtMTA4MywxMSArMTAzNCw2IEBAIHN0 YXRpYyB2b2lkIHRocmVhZHMoaW50IGZkLCBpbnQgZmxhZ3MpDQo+ID4gPiAgCQl0aHJlYWRzX2Rh dGFbaV0ubl9leGVjX3F1ZXVlID0gTl9FWEVDX1FVRVVFOw0KPiA+ID4gICNkZWZpbmUgTl9FWEVD CQkxMDI0DQo+ID4gPiAgCQl0aHJlYWRzX2RhdGFbaV0ubl9leGVjID0gTl9FWEVDOw0KPiA+ID4g LQkJaWYgKGZsYWdzICYgUkVCSU5EX0VSUk9SKQ0KPiA+ID4gLQkJCXRocmVhZHNfZGF0YVtpXS5y ZWJpbmRfZXJyb3JfaW5qZWN0ID0NCj4gPiA+IC0JCQkJKE5fRVhFQyAvIChuX2h3X2VuZ2luZXMg KyAxKSkgKiAoaSArIDEpOw0KPiA+ID4gLQkJZWxzZQ0KPiA+ID4gLQkJCXRocmVhZHNfZGF0YVtp XS5yZWJpbmRfZXJyb3JfaW5qZWN0ID0gLTE7DQo+ID4gPiAgCQl0aHJlYWRzX2RhdGFbaV0uZmxh Z3MgPSBmbGFnczsNCj4gPiA+ICAJCWlmIChmbGFncyAmIE1JWEVEX01PREUpIHsNCj4gPiA+ICAJ CQl0aHJlYWRzX2RhdGFbaV0uZmxhZ3MgJj0gfk1JWEVEX01PREU7DQo+ID4gPiBAQCAtMTE5MCw4 ICsxMTM2LDYgQEAgc3RhdGljIHZvaWQgdGhyZWFkcyhpbnQgZmQsIGludCBmbGFncykNCj4gPiA+ ICAJaWYgKHZtX2NvbXB1dGVfbW9kZSkNCj4gPiA+ICAJCXhlX3ZtX2Rlc3Ryb3koZmQsIHZtX2Nv bXB1dGVfbW9kZSk7DQo+ID4gPiAgCWZyZWUodGhyZWFkc19kYXRhKTsNCj4gPiA+IC0JaWYgKGZs YWdzICYgU0hBUkVEX1ZNKQ0KPiA+ID4gLQkJcHRocmVhZF9qb2luKHZtX2Vycl90aHJlYWQudGhy ZWFkLCBOVUxMKTsNCj4gPiA+ICAJcHRocmVhZF9iYXJyaWVyX2Rlc3Ryb3koJmJhcnJpZXIpOw0K PiA+ID4gIH0NCj4gPiA+ICANCj4gPiA+IEBAIC0xMjE0LDkgKzExNTgsOCBAQCBpZ3RfbWFpbg0K PiA+ID4gIAkJeyAic2hhcmVkLXZtLXJlYmluZC1iaW5kZXhlY3F1ZXVlIiwgU0hBUkVEX1ZNIHwg UkVCSU5EIHwNCj4gPiA+ICAJCQlCSU5EX0VYRUNfUVVFVUUgfSwNCj4gPiA+ICAJCXsgInNoYXJl ZC12bS11c2VycHRyLXJlYmluZCIsIFNIQVJFRF9WTSB8IFVTRVJQVFIgfCBSRUJJTkQgfSwNCj4g PiA+IC0JCXsgInNoYXJlZC12bS1yZWJpbmQtZXJyIiwgU0hBUkVEX1ZNIHwgUkVCSU5EIHwgUkVC SU5EX0VSUk9SIH0sDQo+ID4gPiAtCQl7ICJzaGFyZWQtdm0tdXNlcnB0ci1yZWJpbmQtZXJyIiwg U0hBUkVEX1ZNIHwgVVNFUlBUUiB8DQo+ID4gPiAtCQkJUkVCSU5EIHwgUkVCSU5EX0VSUk9SfSwN Cj4gPiA+ICsJCXsgInJlYmluZC1lcnIiLCBSRUJJTkQgfCBSRUJJTkRfRVJST1IgfSwNCj4gPiA+ ICsJCXsgInVzZXJwdHItcmViaW5kLWVyciIsIFVTRVJQVFIgfCBSRUJJTkQgfCBSRUJJTkRfRVJS T1J9LA0KPiA+ID4gIAkJeyAic2hhcmVkLXZtLXVzZXJwdHItaW52YWxpZGF0ZSIsIFNIQVJFRF9W TSB8IFVTRVJQVFIgfA0KPiA+ID4gIAkJCUlOVkFMSURBVEUgfSwNCj4gPiA+ICAJCXsgInNoYXJl ZC12bS11c2VycHRyLWludmFsaWRhdGUtcmFjZSIsIFNIQVJFRF9WTSB8IFVTRVJQVFIgfA0KPiA+ ID4gQEAgLTEyNDAsMTAgKzExODMsOSBAQCBpZ3RfbWFpbg0KPiA+ID4gIAkJeyAiaGFuZy1zaGFy ZWQtdm0tcmViaW5kIiwgSEFORyB8IFNIQVJFRF9WTSB8IFJFQklORCB9LA0KPiA+ID4gIAkJeyAi aGFuZy1zaGFyZWQtdm0tdXNlcnB0ci1yZWJpbmQiLCBIQU5HIHwgU0hBUkVEX1ZNIHwgVVNFUlBU UiB8DQo+ID4gPiAgCQkJUkVCSU5EIH0sDQo+ID4gPiAtCQl7ICJoYW5nLXNoYXJlZC12bS1yZWJp bmQtZXJyIiwgSEFORyB8IFNIQVJFRF9WTSB8IFJFQklORCB8DQo+ID4gPiArCQl7ICJoYW5nLXJl YmluZC1lcnIiLCBIQU5HIHwgUkVCSU5EIHwgUkVCSU5EX0VSUk9SIH0sDQo+ID4gPiArCQl7ICJo YW5nLXVzZXJwdHItcmViaW5kLWVyciIsIEhBTkcgfCBVU0VSUFRSIHwgUkVCSU5EIHwNCj4gPiA+ ICAJCQlSRUJJTkRfRVJST1IgfSwNCj4gPiA+IC0JCXsgImhhbmctc2hhcmVkLXZtLXVzZXJwdHIt cmViaW5kLWVyciIsIEhBTkcgfCBTSEFSRURfVk0gfA0KPiA+ID4gLQkJCVVTRVJQVFIgfCBSRUJJ TkQgfCBSRUJJTkRfRVJST1IgfSwNCj4gPiA+ICAJCXsgImhhbmctc2hhcmVkLXZtLXVzZXJwdHIt aW52YWxpZGF0ZSIsIEhBTkcgfCBTSEFSRURfVk0gfA0KPiA+ID4gIAkJCVVTRVJQVFIgfCBJTlZB TElEQVRFIH0sDQo+ID4gPiAgCQl7ICJoYW5nLXNoYXJlZC12bS11c2VycHRyLWludmFsaWRhdGUt cmFjZSIsIEhBTkcgfCBTSEFSRURfVk0gfA0KPiA+ID4gZGlmZiAtLWdpdCBhL3Rlc3RzL2ludGVs L3hlX2V4ZXJjaXNlX2JsdC5jIGIvdGVzdHMvaW50ZWwveGVfZXhlcmNpc2VfYmx0LmMNCj4gPiA+ IGluZGV4IGNhODVmNWYxOC4uMmYzNDliMTZkIDEwMDY0NA0KPiA+ID4gLS0tIGEvdGVzdHMvaW50 ZWwveGVfZXhlcmNpc2VfYmx0LmMNCj4gPiA+ICsrKyBiL3Rlc3RzL2ludGVsL3hlX2V4ZXJjaXNl X2JsdC5jDQo+ID4gPiBAQCAtMjgwLDcgKzI4MCw3IEBAIHN0YXRpYyB2b2lkIGZhc3RfY29weV90 ZXN0KGludCB4ZSwNCj4gPiA+ICAJCQlyZWdpb24xID0gaWd0X2NvbGxlY3Rpb25fZ2V0X3ZhbHVl KHJlZ2lvbnMsIDApOw0KPiA+ID4gIAkJCXJlZ2lvbjIgPSBpZ3RfY29sbGVjdGlvbl9nZXRfdmFs dWUocmVnaW9ucywgMSk7DQo+ID4gPiAgDQo+ID4gPiAtCQkJdm0gPSB4ZV92bV9jcmVhdGUoeGUs IERSTV9YRV9WTV9DUkVBVEVfQVNZTkNfQklORF9PUFMsIDApOw0KPiA+ID4gKwkJCXZtID0geGVf dm1fY3JlYXRlKHhlLCBEUk1fWEVfVk1fQ1JFQVRFX0FTWU5DX0RFRkFVTFQsIDApOw0KPiA+ID4g IAkJCWV4ZWNfcXVldWUgPSB4ZV9leGVjX3F1ZXVlX2NyZWF0ZSh4ZSwgdm0sICZpbnN0LCAwKTsN Cj4gPiA+ICAJCQljdHggPSBpbnRlbF9jdHhfeGUoeGUsIHZtLCBleGVjX3F1ZXVlLCAwLCAwLCAw KTsNCj4gPiA+ICANCj4gPiA+IGRpZmYgLS1naXQgYS90ZXN0cy9pbnRlbC94ZV9ndWNfcGMuYyBi L3Rlc3RzL2ludGVsL3hlX2d1Y19wYy5jDQo+ID4gPiBpbmRleCAwMzI3ZDhlMGUuLjNmMmM0YWUy MyAxMDA2NDQNCj4gPiA+IC0tLSBhL3Rlc3RzL2ludGVsL3hlX2d1Y19wYy5jDQo+ID4gPiArKysg Yi90ZXN0cy9pbnRlbC94ZV9ndWNfcGMuYw0KPiA+ID4gQEAgLTYwLDcgKzYwLDcgQEAgc3RhdGlj IHZvaWQgZXhlY19iYXNpYyhpbnQgZmQsIHN0cnVjdCBkcm1feGVfZW5naW5lX2NsYXNzX2luc3Rh bmNlICplY2ksDQo+ID4gPiAgCWlndF9hc3NlcnQobl9leGVjX3F1ZXVlcyA8PSBNQVhfTl9FWEVD X1FVRVVFUyk7DQo+ID4gPiAgCWlndF9hc3NlcnQobl9leGVjcyA+IDApOw0KPiA+ID4gIA0KPiA+ ID4gLQl2bSA9IHhlX3ZtX2NyZWF0ZShmZCwgRFJNX1hFX1ZNX0NSRUFURV9BU1lOQ19CSU5EX09Q UywgMCk7DQo+ID4gPiArCXZtID0geGVfdm1fY3JlYXRlKGZkLCBEUk1fWEVfVk1fQ1JFQVRFX0FT WU5DX0RFRkFVTFQsIDApOw0KPiA+ID4gIAlib19zaXplID0gc2l6ZW9mKCpkYXRhKSAqIG5fZXhl Y3M7DQo+ID4gPiAgCWJvX3NpemUgPSBBTElHTihib19zaXplICsgeGVfY3NfcHJlZmV0Y2hfc2l6 ZShmZCksDQo+ID4gPiAgCQkJeGVfZ2V0X2RlZmF1bHRfYWxpZ25tZW50KGZkKSk7DQo+ID4gPiBk aWZmIC0tZ2l0IGEvdGVzdHMvaW50ZWwveGVfaHVjX2NvcHkuYyBiL3Rlc3RzL2ludGVsL3hlX2h1 Y19jb3B5LmMNCj4gPiA+IGluZGV4IGM5ODkxYTcyOS4uYzcxZmY3NGExIDEwMDY0NA0KPiA+ID4g LS0tIGEvdGVzdHMvaW50ZWwveGVfaHVjX2NvcHkuYw0KPiA+ID4gKysrIGIvdGVzdHMvaW50ZWwv eGVfaHVjX2NvcHkuYw0KPiA+ID4gQEAgLTExNyw3ICsxMTcsNyBAQCB0ZXN0X2h1Y19jb3B5KGlu dCBmZCkNCj4gPiA+ICAJCXsgLmFkZHIgPSBBRERSX0JBVENILCAuc2l6ZSA9IFNJWkVfQkFUQ0gg fSwgLy8gYmF0Y2gNCj4gPiA+ICAJfTsNCj4gPiA+ICANCj4gPiA+IC0Jdm0gPSB4ZV92bV9jcmVh dGUoZmQsIERSTV9YRV9WTV9DUkVBVEVfQVNZTkNfQklORF9PUFMsIDApOw0KPiA+ID4gKwl2bSA9 IHhlX3ZtX2NyZWF0ZShmZCwgRFJNX1hFX1ZNX0NSRUFURV9BU1lOQ19ERUZBVUxULCAwKTsNCj4g PiA+ICAJZXhlY19xdWV1ZSA9IHhlX2V4ZWNfcXVldWVfY3JlYXRlX2NsYXNzKGZkLCB2bSwgRFJN X1hFX0VOR0lORV9DTEFTU19WSURFT19ERUNPREUpOw0KPiA+ID4gIAlzeW5jLmZsYWdzID0gRFJN X1hFX1NZTkNfU1lOQ09CSiB8IERSTV9YRV9TWU5DX1NJR05BTDsNCj4gPiA+ICAJc3luYy5oYW5k bGUgPSBzeW5jb2JqX2NyZWF0ZShmZCwgMCk7DQo+ID4gPiBkaWZmIC0tZ2l0IGEvdGVzdHMvaW50 ZWwveGVfaW50ZWxfYmIuYyBiL3Rlc3RzL2ludGVsL3hlX2ludGVsX2JiLmMNCj4gPiA+IGluZGV4 IDAxNTlhMzE2NC4uMjZlNGRjYzg1IDEwMDY0NA0KPiA+ID4gLS0tIGEvdGVzdHMvaW50ZWwveGVf aW50ZWxfYmIuYw0KPiA+ID4gKysrIGIvdGVzdHMvaW50ZWwveGVfaW50ZWxfYmIuYw0KPiA+ID4g QEAgLTE5MSw3ICsxOTEsNyBAQCBzdGF0aWMgdm9pZCBzaW1wbGVfYmIoc3RydWN0IGJ1Zl9vcHMg KmJvcHMsIGJvb2wgbmV3X2NvbnRleHQpDQo+ID4gPiAgCWludGVsX2JiX3Jlc2V0KGliYiwgdHJ1 ZSk7DQo+ID4gPiAgDQo+ID4gPiAgCWlmIChuZXdfY29udGV4dCkgew0KPiA+ID4gLQkJdm0gPSB4 ZV92bV9jcmVhdGUoeGUsIERSTV9YRV9WTV9DUkVBVEVfQVNZTkNfQklORF9PUFMsIDApOw0KPiA+ ID4gKwkJdm0gPSB4ZV92bV9jcmVhdGUoeGUsIERSTV9YRV9WTV9DUkVBVEVfQVNZTkNfREVGQVVM VCwgMCk7DQo+ID4gPiAgCQljdHggPSB4ZV9leGVjX3F1ZXVlX2NyZWF0ZSh4ZSwgdm0sIHhlX2h3 X2VuZ2luZSh4ZSwgMCksIDApOw0KPiA+ID4gIAkJaW50ZWxfYmJfZGVzdHJveShpYmIpOw0KPiA+ ID4gIAkJaWJiID0gaW50ZWxfYmJfY3JlYXRlX3dpdGhfY29udGV4dCh4ZSwgY3R4LCB2bSwgTlVM TCwgUEFHRV9TSVpFKTsNCj4gPiA+IGRpZmYgLS1naXQgYS90ZXN0cy9pbnRlbC94ZV9wbS5jIGIv dGVzdHMvaW50ZWwveGVfcG0uYw0KPiA+ID4gaW5kZXggZmQyOGQ1NjMwLi5iMjk3NmVjODQgMTAw NjQ0DQo+ID4gPiAtLS0gYS90ZXN0cy9pbnRlbC94ZV9wbS5jDQo+ID4gPiArKysgYi90ZXN0cy9p bnRlbC94ZV9wbS5jDQo+ID4gPiBAQCAtMjU5LDcgKzI1OSw3IEBAIHRlc3RfZXhlYyhkZXZpY2Vf dCBkZXZpY2UsIHN0cnVjdCBkcm1feGVfZW5naW5lX2NsYXNzX2luc3RhbmNlICplY2ksDQo+ID4g PiAgCWlmIChjaGVja19ycG0pDQo+ID4gPiAgCQlpZ3RfYXNzZXJ0KGluX2QzKGRldmljZSwgZF9z dGF0ZSkpOw0KPiA+ID4gIA0KPiA+ID4gLQl2bSA9IHhlX3ZtX2NyZWF0ZShkZXZpY2UuZmRfeGUs IERSTV9YRV9WTV9DUkVBVEVfQVNZTkNfQklORF9PUFMsIDApOw0KPiA+ID4gKwl2bSA9IHhlX3Zt X2NyZWF0ZShkZXZpY2UuZmRfeGUsIERSTV9YRV9WTV9DUkVBVEVfQVNZTkNfREVGQVVMVCwgMCk7 DQo+ID4gPiAgDQo+ID4gPiAgCWlmIChjaGVja19ycG0pDQo+ID4gPiAgCQlpZ3RfYXNzZXJ0KG91 dF9vZl9kMyhkZXZpY2UsIGRfc3RhdGUpKTsNCj4gPiA+IGRpZmYgLS1naXQgYS90ZXN0cy9pbnRl bC94ZV92bS5jIGIvdGVzdHMvaW50ZWwveGVfdm0uYw0KPiA+ID4gaW5kZXggODlkZjYxNDlhLi5k ZDMzMDIzMzcgMTAwNjQ0DQo+ID4gPiAtLS0gYS90ZXN0cy9pbnRlbC94ZV92bS5jDQo+ID4gPiAr KysgYi90ZXN0cy9pbnRlbC94ZV92bS5jDQo+ID4gPiBAQCAtMjc1LDcgKzI3NSw3IEBAIHN0YXRp YyB2b2lkIHVuYmluZF9hbGwoaW50IGZkLCBpbnQgbl92bWFzKQ0KPiA+ID4gIAkJeyAuZmxhZ3Mg PSBEUk1fWEVfU1lOQ19TWU5DT0JKIHwgRFJNX1hFX1NZTkNfU0lHTkFMLCB9LA0KPiA+ID4gIAl9 Ow0KPiA+ID4gIA0KPiA+ID4gLQl2bSA9IHhlX3ZtX2NyZWF0ZShmZCwgRFJNX1hFX1ZNX0NSRUFU RV9BU1lOQ19CSU5EX09QUywgMCk7DQo+ID4gPiArCXZtID0geGVfdm1fY3JlYXRlKGZkLCBEUk1f WEVfVk1fQ1JFQVRFX0FTWU5DX0RFRkFVTFQsIDApOw0KPiA+ID4gIAlibyA9IHhlX2JvX2NyZWF0 ZShmZCwgMCwgdm0sIGJvX3NpemUpOw0KPiA+ID4gIA0KPiA+ID4gIAlmb3IgKGkgPSAwOyBpIDwg bl92bWFzOyArK2kpDQo+ID4gPiBAQCAtMzIyLDE3MSArMzIyLDYgQEAgc3RhdGljIHZvaWQgdXNl cnB0cl9pbnZhbGlkKGludCBmZCkNCj4gPiA+ICAJeGVfdm1fZGVzdHJveShmZCwgdm0pOw0KPiA+ ID4gIH0NCj4gPiA+ICANCj4gPiA+IC1zdHJ1Y3Qgdm1fdGhyZWFkX2RhdGEgew0KPiA+ID4gLQlw dGhyZWFkX3QgdGhyZWFkOw0KPiA+ID4gLQlpbnQgZmQ7DQo+ID4gPiAtCWludCB2bTsNCj4gPiA+ IC0JdWludDMyX3QgYm87DQo+ID4gPiAtCXNpemVfdCBib19zaXplOw0KPiA+ID4gLQlib29sIGRl c3Ryb3k7DQo+ID4gPiAtfTsNCj4gPiA+IC0NCj4gPiA+IC0vKioNCj4gPiA+IC0gKiBTVUJURVNU OiB2bS1hc3luYy1vcHMtZXJyDQo+ID4gPiAtICogRGVzY3JpcHRpb246IFRlc3QgVk0gYXN5bmMg b3BzIGVycm9yDQo+ID4gPiAtICogRnVuY3Rpb25hbGl0eTogVk0NCj4gPiA+IC0gKiBUZXN0IGNh dGVnb3J5OiBuZWdhdGl2ZSB0ZXN0DQo+ID4gPiAtICoNCj4gPiA+IC0gKiBTVUJURVNUOiB2bS1h c3luYy1vcHMtZXJyLWRlc3Ryb3kNCj4gPiA+IC0gKiBEZXNjcmlwdGlvbjogVGVzdCBWTSBhc3lu YyBvcHMgZXJyb3IgZGVzdHJveQ0KPiA+ID4gLSAqIEZ1bmN0aW9uYWxpdHk6IFZNDQo+ID4gPiAt ICogVGVzdCBjYXRlZ29yeTogbmVnYXRpdmUgdGVzdA0KPiA+ID4gLSAqLw0KPiA+ID4gLQ0KPiA+ ID4gLXN0YXRpYyB2b2lkICp2bV9hc3luY19vcHNfZXJyX3RocmVhZCh2b2lkICpkYXRhKQ0KPiA+ ID4gLXsNCj4gPiA+IC0Jc3RydWN0IHZtX3RocmVhZF9kYXRhICphcmdzID0gZGF0YTsNCj4gPiA+ IC0JaW50IGZkID0gYXJncy0+ZmQ7DQo+ID4gPiAtCXVpbnQ2NF90IGFkZHIgPSAweDIwMWEwMDAw Ow0KPiA+ID4gLQlpbnQgbnVtX2JpbmRzID0gMDsNCj4gPiA+IC0JaW50IHJldDsNCj4gPiA+IC0N Cj4gPiA+IC0Jc3RydWN0IGRybV94ZV93YWl0X3VzZXJfZmVuY2Ugd2FpdCA9IHsNCj4gPiA+IC0J CS52bV9pZCA9IGFyZ3MtPnZtLA0KPiA+ID4gLQkJLm9wID0gRFJNX1hFX1VGRU5DRV9XQUlUX05F USwNCj4gPiA+IC0JCS5mbGFncyA9IERSTV9YRV9VRkVOQ0VfV0FJVF9WTV9FUlJPUiwNCj4gPiA+ IC0JCS5tYXNrID0gRFJNX1hFX1VGRU5DRV9XQUlUX1UzMiwNCj4gPiA+IC0JCS50aW1lb3V0ID0g TVNfVE9fTlMoMTAwMCksDQo+ID4gPiAtCX07DQo+ID4gPiAtDQo+ID4gPiAtCWlndF9hc3NlcnRf ZXEoaWd0X2lvY3RsKGZkLCBEUk1fSU9DVExfWEVfV0FJVF9VU0VSX0ZFTkNFLA0KPiA+ID4gLQkJ CQkmd2FpdCksIDApOw0KPiA+ID4gLQlpZiAoYXJncy0+ZGVzdHJveSkgew0KPiA+ID4gLQkJdXNs ZWVwKDUwMDApOwkvKiBXYWl0IG90aGVyIGJpbmRzIHRvIHF1ZXVlIHVwICovDQo+ID4gPiAtCQl4 ZV92bV9kZXN0cm95KGZkLCBhcmdzLT52bSk7DQo+ID4gPiAtCQlyZXR1cm4gTlVMTDsNCj4gPiA+ IC0JfQ0KPiA+ID4gLQ0KPiA+ID4gLQl3aGlsZSAoIXJldCkgew0KPiA+ID4gLQkJc3RydWN0IGRy bV94ZV92bV9iaW5kIGJpbmQgPSB7DQo+ID4gPiAtCQkJLnZtX2lkID0gYXJncy0+dm0sDQo+ID4g PiAtCQkJLm51bV9iaW5kcyA9IDEsDQo+ID4gPiAtCQkJLmJpbmQub3AgPSBYRV9WTV9CSU5EX09Q X1JFU1RBUlQsDQo+ID4gPiAtCQl9Ow0KPiA+ID4gLQ0KPiA+ID4gLQkJLyogVk0gc3luYyBvcHMg c2hvdWxkIHdvcmsgKi8NCj4gPiA+IC0JCWlmICghKG51bV9iaW5kcysrICUgMikpIHsNCj4gPiA+ IC0JCQl4ZV92bV9iaW5kX3N5bmMoZmQsIGFyZ3MtPnZtLCBhcmdzLT5ibywgMCwgYWRkciwNCj4g PiA+IC0JCQkJCWFyZ3MtPmJvX3NpemUpOw0KPiA+ID4gLQkJfSBlbHNlIHsNCj4gPiA+IC0JCQl4 ZV92bV91bmJpbmRfc3luYyhmZCwgYXJncy0+dm0sIDAsIGFkZHIsDQo+ID4gPiAtCQkJCQkgIGFy Z3MtPmJvX3NpemUpOw0KPiA+ID4gLQkJCWFkZHIgKz0gYXJncy0+Ym9fc2l6ZSAqIDI7DQo+ID4g PiAtCQl9DQo+ID4gPiAtDQo+ID4gPiAtCQkvKiBSZXN0YXJ0IGFuZCB3YWl0IGZvciBuZXh0IGVy cm9yICovDQo+ID4gPiAtCQlpZ3RfYXNzZXJ0X2VxKGlndF9pb2N0bChmZCwgRFJNX0lPQ1RMX1hF X1ZNX0JJTkQsDQo+ID4gPiAtCQkJCQkmYmluZCksIDApOw0KPiA+ID4gLQkJcmV0ID0gaWd0X2lv Y3RsKGZkLCBEUk1fSU9DVExfWEVfV0FJVF9VU0VSX0ZFTkNFLCAmd2FpdCk7DQo+ID4gPiAtCX0N Cj4gPiA+IC0NCj4gPiA+IC0JcmV0dXJuIE5VTEw7DQo+ID4gPiAtfQ0KPiA+ID4gLQ0KPiA+ID4g LXN0YXRpYyB2b2lkIHZtX2FzeW5jX29wc19lcnIoaW50IGZkLCBib29sIGRlc3Ryb3kpDQo+ID4g PiAtew0KPiA+ID4gLQl1aW50MzJfdCB2bTsNCj4gPiA+IC0JdWludDY0X3QgYWRkciA9IDB4MWEw MDAwOw0KPiA+ID4gLQlzdHJ1Y3QgZHJtX3hlX3N5bmMgc3luYyA9IHsNCj4gPiA+IC0JCS5mbGFn cyA9IERSTV9YRV9TWU5DX1NZTkNPQkogfCBEUk1fWEVfU1lOQ19TSUdOQUwsDQo+ID4gPiAtCX07 DQo+ID4gPiAtI2RlZmluZSBOX0JJTkRTCQkzMg0KPiA+ID4gLQlzdHJ1Y3Qgdm1fdGhyZWFkX2Rh dGEgdGhyZWFkID0ge307DQo+ID4gPiAtCXVpbnQzMl90IHN5bmNvYmpzW05fQklORFNdOw0KPiA+ ID4gLQlzaXplX3QgYm9fc2l6ZSA9IDB4MTAwMCAqIDMyOw0KPiA+ID4gLQl1aW50MzJfdCBibzsN Cj4gPiA+IC0JaW50IGksIGo7DQo+ID4gPiAtDQo+ID4gPiAtCXZtID0geGVfdm1fY3JlYXRlKGZk LCBEUk1fWEVfVk1fQ1JFQVRFX0FTWU5DX0JJTkRfT1BTLCAwKTsNCj4gPiA+IC0JYm8gPSB4ZV9i b19jcmVhdGUoZmQsIDAsIHZtLCBib19zaXplKTsNCj4gPiA+IC0NCj4gPiA+IC0JdGhyZWFkLmZk ID0gZmQ7DQo+ID4gPiAtCXRocmVhZC52bSA9IHZtOw0KPiA+ID4gLQl0aHJlYWQuYm8gPSBibzsN Cj4gPiA+IC0JdGhyZWFkLmJvX3NpemUgPSBib19zaXplOw0KPiA+ID4gLQl0aHJlYWQuZGVzdHJv eSA9IGRlc3Ryb3k7DQo+ID4gPiAtCXB0aHJlYWRfY3JlYXRlKCZ0aHJlYWQudGhyZWFkLCAwLCB2 bV9hc3luY19vcHNfZXJyX3RocmVhZCwgJnRocmVhZCk7DQo+ID4gPiAtDQo+ID4gPiAtCWZvciAo aSA9IDA7IGkgPCBOX0JJTkRTOyBpKyspDQo+ID4gPiAtCQlzeW5jb2Jqc1tpXSA9IHN5bmNvYmpf Y3JlYXRlKGZkLCAwKTsNCj4gPiA+IC0NCj4gPiA+IC0JZm9yIChqID0gMCwgaSA9IDA7IGkgPCBO X0JJTkRTIC8gNDsgaSsrLCBqKyspIHsNCj4gPiA+IC0JCXN5bmMuaGFuZGxlID0gc3luY29ianNb al07DQo+ID4gPiAtI2RlZmluZSBJTkpFQ1RfRVJST1IJKDB4MSA8PCAzMSkNCj4gPiA+IC0JCWlm IChpID09IE5fQklORFMgLyA4KQkvKiBJbmplY3QgZXJyb3Igb24gdGhpcyBiaW5kICovDQo+ID4g PiAtCQkJX194ZV92bV9iaW5kX2Fzc2VydChmZCwgdm0sIDAsIGJvLCAwLA0KPiA+ID4gLQkJCQkJ ICAgIGFkZHIgKyBpICogYm9fc2l6ZSAqIDIsDQo+ID4gPiAtCQkJCQkgICAgYm9fc2l6ZSwgWEVf Vk1fQklORF9PUF9NQVAsDQo+ID4gPiAtCQkJCQkgICAgWEVfVk1fQklORF9GTEFHX0FTWU5DIHwN Cj4gPiA+IC0JCQkJCSAgICBJTkpFQ1RfRVJST1IsICZzeW5jLCAxLCAwLCAwKTsNCj4gPiA+IC0J CWVsc2UNCj4gPiA+IC0JCQl4ZV92bV9iaW5kX2FzeW5jKGZkLCB2bSwgMCwgYm8sIDAsDQo+ID4g PiAtCQkJCQkgYWRkciArIGkgKiBib19zaXplICogMiwNCj4gPiA+IC0JCQkJCSBib19zaXplLCAm c3luYywgMSk7DQo+ID4gPiAtCX0NCj4gPiA+IC0NCj4gPiA+IC0JZm9yIChpID0gMDsgaSA8IE5f QklORFMgLyA0OyBpKyssIGorKykgew0KPiA+ID4gLQkJc3luYy5oYW5kbGUgPSBzeW5jb2Jqc1tq XTsNCj4gPiA+IC0JCWlmIChpID09IE5fQklORFMgLyA4KQ0KPiA+ID4gLQkJCV9feGVfdm1fYmlu ZF9hc3NlcnQoZmQsIHZtLCAwLCAwLCAwLA0KPiA+ID4gLQkJCQkJICAgIGFkZHIgKyBpICogYm9f c2l6ZSAqIDIsDQo+ID4gPiAtCQkJCQkgICAgYm9fc2l6ZSwgWEVfVk1fQklORF9PUF9VTk1BUCwN Cj4gPiA+IC0JCQkJCSAgICBYRV9WTV9CSU5EX0ZMQUdfQVNZTkMgfA0KPiA+ID4gLQkJCQkJICAg IElOSkVDVF9FUlJPUiwgJnN5bmMsIDEsIDAsIDApOw0KPiA+ID4gLQkJZWxzZQ0KPiA+ID4gLQkJ CXhlX3ZtX3VuYmluZF9hc3luYyhmZCwgdm0sIDAsIDAsDQo+ID4gPiAtCQkJCQkgICBhZGRyICsg aSAqIGJvX3NpemUgKiAyLA0KPiA+ID4gLQkJCQkJICAgYm9fc2l6ZSwgJnN5bmMsIDEpOw0KPiA+ ID4gLQl9DQo+ID4gPiAtDQo+ID4gPiAtCWZvciAoaSA9IDA7IGkgPCBOX0JJTkRTIC8gNDsgaSsr LCBqKyspIHsNCj4gPiA+IC0JCXN5bmMuaGFuZGxlID0gc3luY29ianNbal07DQo+ID4gPiAtCQlp ZiAoaSA9PSBOX0JJTkRTIC8gOCkNCj4gPiA+IC0JCQlfX3hlX3ZtX2JpbmRfYXNzZXJ0KGZkLCB2 bSwgMCwgYm8sIDAsDQo+ID4gPiAtCQkJCQkgICAgYWRkciArIGkgKiBib19zaXplICogMiwNCj4g PiA+IC0JCQkJCSAgICBib19zaXplLCBYRV9WTV9CSU5EX09QX01BUCwNCj4gPiA+IC0JCQkJCSAg ICBYRV9WTV9CSU5EX0ZMQUdfQVNZTkMgfA0KPiA+ID4gLQkJCQkJICAgIElOSkVDVF9FUlJPUiwg JnN5bmMsIDEsIDAsIDApOw0KPiA+ID4gLQkJZWxzZQ0KPiA+ID4gLQkJCXhlX3ZtX2JpbmRfYXN5 bmMoZmQsIHZtLCAwLCBibywgMCwNCj4gPiA+IC0JCQkJCSBhZGRyICsgaSAqIGJvX3NpemUgKiAy LA0KPiA+ID4gLQkJCQkJIGJvX3NpemUsICZzeW5jLCAxKTsNCj4gPiA+IC0JfQ0KPiA+ID4gLQ0K PiA+ID4gLQlmb3IgKGkgPSAwOyBpIDwgTl9CSU5EUyAvIDQ7IGkrKywgaisrKSB7DQo+ID4gPiAt CQlzeW5jLmhhbmRsZSA9IHN5bmNvYmpzW2pdOw0KPiA+ID4gLQkJaWYgKGkgPT0gTl9CSU5EUyAv IDgpDQo+ID4gPiAtCQkJX194ZV92bV9iaW5kX2Fzc2VydChmZCwgdm0sIDAsIDAsIDAsDQo+ID4g PiAtCQkJCQkgICAgYWRkciArIGkgKiBib19zaXplICogMiwNCj4gPiA+IC0JCQkJCSAgICBib19z aXplLCBYRV9WTV9CSU5EX09QX1VOTUFQLA0KPiA+ID4gLQkJCQkJICAgIFhFX1ZNX0JJTkRfRkxB R19BU1lOQyB8DQo+ID4gPiAtCQkJCQkgICAgSU5KRUNUX0VSUk9SLCAmc3luYywgMSwgMCwgMCk7 DQo+ID4gPiAtCQllbHNlDQo+ID4gPiAtCQkJeGVfdm1fdW5iaW5kX2FzeW5jKGZkLCB2bSwgMCwg MCwNCj4gPiA+IC0JCQkJCSAgIGFkZHIgKyBpICogYm9fc2l6ZSAqIDIsDQo+ID4gPiAtCQkJCQkg ICBib19zaXplLCAmc3luYywgMSk7DQo+ID4gPiAtCX0NCj4gPiA+IC0NCj4gPiA+IC0JZm9yIChp ID0gMDsgaSA8IE5fQklORFM7IGkrKykNCj4gPiA+IC0JCWlndF9hc3NlcnQoc3luY29ial93YWl0 KGZkLCAmc3luY29ianNbaV0sIDEsIElOVDY0X01BWCwgMCwNCj4gPiA+IC0JCQkJCU5VTEwpKTsN Cj4gPiA+IC0NCj4gPiA+IC0JaWYgKCFkZXN0cm95KQ0KPiA+ID4gLQkJeGVfdm1fZGVzdHJveShm ZCwgdm0pOw0KPiA+ID4gLQ0KPiA+ID4gLQlwdGhyZWFkX2pvaW4odGhyZWFkLnRocmVhZCwgTlVM TCk7DQo+ID4gPiAtfQ0KPiA+ID4gLQ0KPiA+ID4gIC8qKg0KPiA+ID4gICAqIFNVQlRFU1Q6IHNo YXJlZC0lcy1wYWdlDQo+ID4gPiAgICogRGVzY3JpcHRpb246IFRlc3Qgc2hhcmVkIGFyZ1sxXSBw YWdlDQo+ID4gPiBAQCAtNTM3LDcgKzM3Miw3IEBAIHNoYXJlZF9wdGVfcGFnZShpbnQgZmQsIHN0 cnVjdCBkcm1feGVfZW5naW5lX2NsYXNzX2luc3RhbmNlICplY2ksIGludCBuX2JvLA0KPiA+ID4g IAlkYXRhID0gbWFsbG9jKHNpemVvZigqZGF0YSkgKiBuX2JvKTsNCj4gPiA+ICAJaWd0X2Fzc2Vy dChkYXRhKTsNCj4gPiA+ICANCj4gPiA+IC0Jdm0gPSB4ZV92bV9jcmVhdGUoZmQsIERSTV9YRV9W TV9DUkVBVEVfQVNZTkNfQklORF9PUFMsIDApOw0KPiA+ID4gKwl2bSA9IHhlX3ZtX2NyZWF0ZShm ZCwgRFJNX1hFX1ZNX0NSRUFURV9BU1lOQ19ERUZBVUxULCAwKTsNCj4gPiA+ICAJYm9fc2l6ZSA9 IHNpemVvZihzdHJ1Y3Qgc2hhcmVkX3B0ZV9wYWdlX2RhdGEpOw0KPiA+ID4gIAlib19zaXplID0g QUxJR04oYm9fc2l6ZSArIHhlX2NzX3ByZWZldGNoX3NpemUoZmQpLA0KPiA+ID4gIAkJCXhlX2dl dF9kZWZhdWx0X2FsaWdubWVudChmZCkpOw0KPiA+ID4gQEAgLTcxOCw3ICs1NTMsNyBAQCB0ZXN0 X2JpbmRfZXhlY3F1ZXVlc19pbmRlcGVuZGVudChpbnQgZmQsIHN0cnVjdCBkcm1feGVfZW5naW5l X2NsYXNzX2luc3RhbmNlICplYw0KPiA+ID4gIAlzdHJ1Y3QgeGVfc3Bpbl9vcHRzIHNwaW5fb3B0 cyA9IHsgLnByZWVtcHQgPSB0cnVlIH07DQo+ID4gPiAgCWludCBpLCBiOw0KPiA+ID4gIA0KPiA+ ID4gLQl2bSA9IHhlX3ZtX2NyZWF0ZShmZCwgRFJNX1hFX1ZNX0NSRUFURV9BU1lOQ19CSU5EX09Q UywgMCk7DQo+ID4gPiArCXZtID0geGVfdm1fY3JlYXRlKGZkLCBEUk1fWEVfVk1fQ1JFQVRFX0FT WU5DX0RFRkFVTFQsIDApOw0KPiA+ID4gIAlib19zaXplID0gc2l6ZW9mKCpkYXRhKSAqIE5fRVhF Q19RVUVVRVM7DQo+ID4gPiAgCWJvX3NpemUgPSBBTElHTihib19zaXplICsgeGVfY3NfcHJlZmV0 Y2hfc2l6ZShmZCksDQo+ID4gPiAgCQkJeGVfZ2V0X2RlZmF1bHRfYWxpZ25tZW50KGZkKSk7DQo+ ID4gPiBAQCAtNzI4LDcgKzU2Myw3IEBAIHRlc3RfYmluZF9leGVjcXVldWVzX2luZGVwZW5kZW50 KGludCBmZCwgc3RydWN0IGRybV94ZV9lbmdpbmVfY2xhc3NfaW5zdGFuY2UgKmVjDQo+ID4gPiAg DQo+ID4gPiAgCWZvciAoaSA9IDA7IGkgPCBOX0VYRUNfUVVFVUVTOyBpKyspIHsNCj4gPiA+ICAJ CWV4ZWNfcXVldWVzW2ldID0geGVfZXhlY19xdWV1ZV9jcmVhdGUoZmQsIHZtLCBlY2ksIDApOw0K PiA+ID4gLQkJYmluZF9leGVjX3F1ZXVlc1tpXSA9IHhlX2JpbmRfZXhlY19xdWV1ZV9jcmVhdGUo ZmQsIHZtLCAwKTsNCj4gPiA+ICsJCWJpbmRfZXhlY19xdWV1ZXNbaV0gPSB4ZV9iaW5kX2V4ZWNf cXVldWVfY3JlYXRlKGZkLCB2bSwgMCwgdHJ1ZSk7DQo+ID4gPiAgCQlzeW5jb2Jqc1tpXSA9IHN5 bmNvYmpfY3JlYXRlKGZkLCAwKTsNCj4gPiA+ICAJfQ0KPiA+ID4gIAlzeW5jb2Jqc1tOX0VYRUNf UVVFVUVTXSA9IHN5bmNvYmpfY3JlYXRlKGZkLCAwKTsNCj4gPiA+IEBAIC04OTgsNyArNzMzLDcg QEAgdGVzdF9iaW5kX2FycmF5KGludCBmZCwgc3RydWN0IGRybV94ZV9lbmdpbmVfY2xhc3NfaW5z dGFuY2UgKmVjaSwgaW50IG5fZXhlY3MsDQo+ID4gPiAgDQo+ID4gPiAgCWlndF9hc3NlcnQobl9l eGVjcyA8PSBCSU5EX0FSUkFZX01BWF9OX0VYRUMpOw0KPiA+ID4gIA0KPiA+ID4gLQl2bSA9IHhl X3ZtX2NyZWF0ZShmZCwgRFJNX1hFX1ZNX0NSRUFURV9BU1lOQ19CSU5EX09QUywgMCk7DQo+ID4g PiArCXZtID0geGVfdm1fY3JlYXRlKGZkLCBEUk1fWEVfVk1fQ1JFQVRFX0FTWU5DX0RFRkFVTFQs IDApOw0KPiA+ID4gIAlib19zaXplID0gc2l6ZW9mKCpkYXRhKSAqIG5fZXhlY3M7DQo+ID4gPiAg CWJvX3NpemUgPSBBTElHTihib19zaXplICsgeGVfY3NfcHJlZmV0Y2hfc2l6ZShmZCksDQo+ID4g PiAgCQkJeGVfZ2V0X2RlZmF1bHRfYWxpZ25tZW50KGZkKSk7DQo+ID4gPiBAQCAtOTA4LDcgKzc0 Myw3IEBAIHRlc3RfYmluZF9hcnJheShpbnQgZmQsIHN0cnVjdCBkcm1feGVfZW5naW5lX2NsYXNz X2luc3RhbmNlICplY2ksIGludCBuX2V4ZWNzLA0KPiA+ID4gIAlkYXRhID0geGVfYm9fbWFwKGZk LCBibywgYm9fc2l6ZSk7DQo+ID4gPiAgDQo+ID4gPiAgCWlmIChmbGFncyAmIEJJTkRfQVJSQVlf QklORF9FWEVDX1FVRVVFX0ZMQUcpDQo+ID4gPiAtCQliaW5kX2V4ZWNfcXVldWUgPSB4ZV9iaW5k X2V4ZWNfcXVldWVfY3JlYXRlKGZkLCB2bSwgMCk7DQo+ID4gPiArCQliaW5kX2V4ZWNfcXVldWUg PSB4ZV9iaW5kX2V4ZWNfcXVldWVfY3JlYXRlKGZkLCB2bSwgMCwgdHJ1ZSk7DQo+ID4gPiAgCWV4 ZWNfcXVldWUgPSB4ZV9leGVjX3F1ZXVlX2NyZWF0ZShmZCwgdm0sIGVjaSwgMCk7DQo+ID4gPiAg DQo+ID4gPiAgCWZvciAoaSA9IDA7IGkgPCBuX2V4ZWNzOyArK2kpIHsNCj4gPiA+IEBAIC0xMDky LDcgKzkyNyw3IEBAIHRlc3RfbGFyZ2VfYmluZHMoaW50IGZkLCBzdHJ1Y3QgZHJtX3hlX2VuZ2lu ZV9jbGFzc19pbnN0YW5jZSAqZWNpLA0KPiA+ID4gIAl9DQo+ID4gPiAgDQo+ID4gPiAgCWlndF9h c3NlcnQobl9leGVjX3F1ZXVlcyA8PSBNQVhfTl9FWEVDX1FVRVVFUyk7DQo+ID4gPiAtCXZtID0g eGVfdm1fY3JlYXRlKGZkLCBEUk1fWEVfVk1fQ1JFQVRFX0FTWU5DX0JJTkRfT1BTLCAwKTsNCj4g PiA+ICsJdm0gPSB4ZV92bV9jcmVhdGUoZmQsIERSTV9YRV9WTV9DUkVBVEVfQVNZTkNfREVGQVVM VCwgMCk7DQo+ID4gPiAgDQo+ID4gPiAgCWlmIChmbGFncyAmIExBUkdFX0JJTkRfRkxBR19VU0VS UFRSKSB7DQo+ID4gPiAgCQltYXAgPSBhbGlnbmVkX2FsbG9jKHhlX2dldF9kZWZhdWx0X2FsaWdu bWVudChmZCksIGJvX3NpemUpOw0KPiA+ID4gQEAgLTEzODQsNyArMTIxOSw3IEBAIHRlc3RfbXVu bWFwX3N0eWxlX3VuYmluZChpbnQgZmQsIHN0cnVjdCBkcm1feGVfZW5naW5lX2NsYXNzX2luc3Rh bmNlICplY2ksDQo+ID4gPiAgCQkJdW5iaW5kX25fcGFnZV9vZmZzZXQgKj0gbl9wYWdlX3Blcl8y bWI7DQo+ID4gPiAgCX0NCj4gPiA+ICANCj4gPiA+IC0Jdm0gPSB4ZV92bV9jcmVhdGUoZmQsIERS TV9YRV9WTV9DUkVBVEVfQVNZTkNfQklORF9PUFMsIDApOw0KPiA+ID4gKwl2bSA9IHhlX3ZtX2Ny ZWF0ZShmZCwgRFJNX1hFX1ZNX0NSRUFURV9BU1lOQ19ERUZBVUxULCAwKTsNCj4gPiA+ICAJYm9f c2l6ZSA9IHBhZ2Vfc2l6ZSAqIGJvX25fcGFnZXM7DQo+ID4gPiAgDQo+ID4gPiAgCWlmIChmbGFn cyAmIE1BUF9GTEFHX1VTRVJQVFIpIHsNCj4gPiA+IEBAIC0xNjg0LDcgKzE1MTksNyBAQCB0ZXN0 X21tYXBfc3R5bGVfYmluZChpbnQgZmQsIHN0cnVjdCBkcm1feGVfZW5naW5lX2NsYXNzX2luc3Rh bmNlICplY2ksDQo+ID4gPiAgCQkJdW5iaW5kX25fcGFnZV9vZmZzZXQgKj0gbl9wYWdlX3Blcl8y bWI7DQo+ID4gPiAgCX0NCj4gPiA+ICANCj4gPiA+IC0Jdm0gPSB4ZV92bV9jcmVhdGUoZmQsIERS TV9YRV9WTV9DUkVBVEVfQVNZTkNfQklORF9PUFMsIDApOw0KPiA+ID4gKwl2bSA9IHhlX3ZtX2Ny ZWF0ZShmZCwgRFJNX1hFX1ZNX0NSRUFURV9BU1lOQ19ERUZBVUxULCAwKTsNCj4gPiA+ICAJYm9f c2l6ZSA9IHBhZ2Vfc2l6ZSAqIGJvX25fcGFnZXM7DQo+ID4gPiAgDQo+ID4gPiAgCWlmIChmbGFn cyAmIE1BUF9GTEFHX1VTRVJQVFIpIHsNCj4gPiA+IEBAIC0yMDAxLDEyICsxODM2LDYgQEAgaWd0 X21haW4NCj4gPiA+ICAJaWd0X3N1YnRlc3QoInVzZXJwdHItaW52YWxpZCIpDQo+ID4gPiAgCQl1 c2VycHRyX2ludmFsaWQoZmQpOw0KPiA+ID4gIA0KPiA+ID4gLQlpZ3Rfc3VidGVzdCgidm0tYXN5 bmMtb3BzLWVyciIpDQo+ID4gPiAtCQl2bV9hc3luY19vcHNfZXJyKGZkLCBmYWxzZSk7DQo+ID4g PiAtDQo+ID4gPiAtCWlndF9zdWJ0ZXN0KCJ2bS1hc3luYy1vcHMtZXJyLWRlc3Ryb3kiKQ0KPiA+ ID4gLQkJdm1fYXN5bmNfb3BzX2VycihmZCwgdHJ1ZSk7DQo+ID4gPiAtDQo+ID4gPiAgCWlndF9z dWJ0ZXN0KCJzaGFyZWQtcHRlLXBhZ2UiKQ0KPiA+ID4gIAkJeGVfZm9yX2VhY2hfaHdfZW5naW5l KGZkLCBod2UpDQo+ID4gPiAgCQkJc2hhcmVkX3B0ZV9wYWdlKGZkLCBod2UsIDQsDQo+ID4gPiBk aWZmIC0tZ2l0IGEvdGVzdHMvaW50ZWwveGVfd2FpdGZlbmNlLmMgYi90ZXN0cy9pbnRlbC94ZV93 YWl0ZmVuY2UuYw0KPiA+ID4gaW5kZXggMzQwMDVmYmViLi5lMDExNmYxODEgMTAwNjQ0DQo+ID4g PiAtLS0gYS90ZXN0cy9pbnRlbC94ZV93YWl0ZmVuY2UuYw0KPiA+ID4gKysrIGIvdGVzdHMvaW50 ZWwveGVfd2FpdGZlbmNlLmMNCj4gPiA+IEBAIC0zNCw3ICszNCw3IEBAIHN0YXRpYyB2b2lkIGRv X2JpbmQoaW50IGZkLCB1aW50MzJfdCB2bSwgdWludDMyX3QgYm8sIHVpbnQ2NF90IG9mZnNldCwN Cj4gPiA+ICANCj4gPiA+ICAJc3luY1swXS5hZGRyID0gdG9fdXNlcl9wb2ludGVyKCZ3YWl0X2Zl bmNlKTsNCj4gPiA+ICAJc3luY1swXS50aW1lbGluZV92YWx1ZSA9IHZhbDsNCj4gPiA+IC0JeGVf dm1fYmluZChmZCwgdm0sIGJvLCBvZmZzZXQsIGFkZHIsIHNpemUsIHN5bmMsIDEpOw0KPiA+ID4g Kwl4ZV92bV9iaW5kX2FzeW5jKGZkLCB2bSwgMCwgYm8sIG9mZnNldCwgYWRkciwgc2l6ZSwgc3lu YywgMSk7DQo+ID4gPiAgfQ0KPiA+ID4gIA0KPiA+ID4gIGVudW0gd2FpdHR5cGUgew0KPiA+ID4g QEAgLTYzLDcgKzYzLDcgQEAgd2FpdGZlbmNlKGludCBmZCwgZW51bSB3YWl0dHlwZSB3dCkNCj4g PiA+ICAJdWludDMyX3QgYm9fNzsNCj4gPiA+ICAJaW50NjRfdCB0aW1lb3V0Ow0KPiA+ID4gIA0K PiA+ID4gLQl1aW50MzJfdCB2bSA9IHhlX3ZtX2NyZWF0ZShmZCwgMCwgMCk7DQo+ID4gPiArCXVp bnQzMl90IHZtID0geGVfdm1fY3JlYXRlKGZkLCBEUk1fWEVfVk1fQ1JFQVRFX0FTWU5DX0RFRkFV TFQsIDApOw0KPiA+ID4gIAlib18xID0geGVfYm9fY3JlYXRlX2ZsYWdzKGZkLCB2bSwgMHg0MDAw MCwgTVlfRkxBRyk7DQo+ID4gPiAgCWRvX2JpbmQoZmQsIHZtLCBib18xLCAwLCAweDIwMDAwMCwg MHg0MDAwMCwgMSk7DQo+ID4gDQo+ID4gDQo+ID4gTWlzc2luZyBYRV9WTV9CSU5EX0ZMQUdfQVNZ TkMgd2l0aCB0aGUgYXN5bmMgdm0uLi4gdGhpcyBhbmQgb3RoZXIgdGVzdHMgaGVyZSBoYXZlIHNp bWlsYXIgcHJvYmxlbS4NCj4gDQo+IEl0IHNlZW1zIHRoaXMgZmxhZyBpcyBzZXQgaW4geGVfdm1f YmluZF9hc3luYygpIHdoaWNoIGlzIGNhbGxlZCBmcm9tIGRvX2JpbmQoKS4gV2l0aG91dCBpdCB0 aGUNCj4gdGVzdCB3b3VsZCBmYWlsLg0KDQoNCnllYWgsIG1pc3NlZCB0aGF0Lg0KTEdUTQ0KUmV2 aWV3ZWQtYnk6IEpvc8OpIFJvYmVydG8gZGUgU291emEgPGpvc2Uuc291emFAaW50ZWwuY29tPg0K DQoNCj4gDQo+ID4gDQo+ID4gDQo+ID4gPiAgCWJvXzIgPSB4ZV9ib19jcmVhdGVfZmxhZ3MoZmQs IHZtLCAweDQwMDAwLCBNWV9GTEFHKTsNCj4gPiA+IEBAIC05NiwyMSArOTYsNiBAQCB3YWl0ZmVu Y2UoaW50IGZkLCBlbnVtIHdhaXR0eXBlIHd0KQ0KPiA+ID4gIAkJCSAgIiwgZWxhcHNlZDogJSIg UFJJZDY0ICJcbiIsDQo+ID4gPiAgCQkJICB0aW1lb3V0LCBzaWduYWxsZWQsIHNpZ25hbGxlZCAt IGN1cnJlbnQpOw0KPiA+ID4gIAl9DQo+ID4gPiAtDQo+ID4gPiAtCXhlX3ZtX3VuYmluZF9zeW5j KGZkLCB2bSwgMCwgMHgyMDAwMDAsIDB4NDAwMDApOw0KPiA+ID4gLQl4ZV92bV91bmJpbmRfc3lu YyhmZCwgdm0sIDAsIDB4YzAwMDAwMDAsIDB4NDAwMDApOw0KPiA+ID4gLQl4ZV92bV91bmJpbmRf c3luYyhmZCwgdm0sIDAsIDB4MTgwMDAwMDAwLCAweDQwMDAwKTsNCj4gPiA+IC0JeGVfdm1fdW5i aW5kX3N5bmMoZmQsIHZtLCAwLCAweDE0MDAwMDAwMCwgMHgxMDAwMCk7DQo+ID4gPiAtCXhlX3Zt X3VuYmluZF9zeW5jKGZkLCB2bSwgMCwgMHgxMDAwMDAwMDAsIDB4MTAwMDAwKTsNCj4gPiA+IC0J eGVfdm1fdW5iaW5kX3N5bmMoZmQsIHZtLCAwLCAweGMwMDQwMDAwLCAweDFjMDAwMCk7DQo+ID4g PiAtCXhlX3ZtX3VuYmluZF9zeW5jKGZkLCB2bSwgMCwgMHhlZmZmZjAwMDAsIDB4MTAwMDApOw0K PiA+ID4gLQlnZW1fY2xvc2UoZmQsIGJvXzcpOw0KPiA+ID4gLQlnZW1fY2xvc2UoZmQsIGJvXzYp Ow0KPiA+ID4gLQlnZW1fY2xvc2UoZmQsIGJvXzUpOw0KPiA+ID4gLQlnZW1fY2xvc2UoZmQsIGJv XzQpOw0KPiA+ID4gLQlnZW1fY2xvc2UoZmQsIGJvXzMpOw0KPiA+ID4gLQlnZW1fY2xvc2UoZmQs IGJvXzIpOw0KPiA+ID4gLQlnZW1fY2xvc2UoZmQsIGJvXzEpOw0KPiA+IA0KPiA+IHVucmVsYXRl ZCBjaGFuZ2UuDQo+ID4gDQo+ID4gPiAgfQ0KPiA+ID4gIA0KPiA+ID4gIGlndF9tYWluDQo+ID4g DQoNCg==