From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga12.intel.com (mga12.intel.com [192.55.52.136]) by gabe.freedesktop.org (Postfix) with ESMTPS id 346196EDAD for ; Thu, 1 Feb 2018 14:23:59 +0000 (UTC) Date: Thu, 1 Feb 2018 16:23:56 +0200 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Message-ID: <20180201142356.GQ5453@intel.com> References: <20180131143226.GL5453@intel.com> <20180131165200.72670-1-maarten.lankhorst@linux.intel.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20180131165200.72670-1-maarten.lankhorst@linux.intel.com> Subject: Re: [igt-dev] [PATCH i-g-t] lib/igt_fb: Add support for NV12 format through conversion, v2. List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: Maarten Lankhorst Cc: igt-dev@lists.freedesktop.org List-ID: T24gV2VkLCBKYW4gMzEsIDIwMTggYXQgMDU6NTI6MDBQTSArMDEwMCwgTWFhcnRlbiBMYW5raG9y c3Qgd3JvdGU6Cj4gRm9yIE5WMTIgYSBmb3JtYXQgY29udmVyc2lvbiBpcyBuZWVkZWQuIEJlY2F1 c2UgWVVWIGZvcm1hdHMgYXJlIG5vdAo+IGZ1bGx5IGRlZmluZWQgd2l0aCBqdXN0IGEgZm91cmNj LCBJJ3ZlIGNob3NlbiBCVC42MDEgbGltaXRlZCByYW5nZS4KPiBUaGlzIHB1dHMgdGhlIHBpeGVs IGNlbnRlciBvZiB0aGUgQ2JDciBjb21wb25lbnRzIGJldHdlZW4gdGhlIHRvcAo+IGxlZnQgWSBh bmQgYm90dG9tIGxlZnQgWToKPiAKPiBZICAgWSAgIFkgICBZCj4gVVYgICAgICBVVgo+IFkgICBZ ICAgWSAgIFkKPiAKPiBTb21lIHdvcmsgaXMgcHV0IGludG8gb3B0aW1pc2luZyB0aGUgY29udmVy c2lvbiByb3V0aW5lcyBpbiBvcmRlciB0bwo+IG1ha2UgaXQgZmFzdCBlbm91Z2guIEJlZm9yZSBj b252ZXJ0aW5nIG52MTIgdG8gcmdiMjQsIGl0IGlzIGNvcGllZCB0bwo+IGEgdGVtcG9yYXJ5IGJ1 ZmZlciB0byB0YWtlIGFkdmFudGFnZSBvZiBtZW1vcnkgY2FjaGluZy4gVGhpcyBpcwo+IGFwcHJv eGltYXRlbHkgMjB4IGZhc3RlciB0aGFuIGRpcmVjdGx5IHJlYWRpbmcgdGhlIEJPLgo+IAo+IFdo ZW4gdGVzdGluZyBvbiBteSBLQkwgd2l0aCBhIDEwODBwIGJ1ZmZlciwgaXQgdGFrZXMgYXBwcm94 aW1hdGVseQo+IC4xcyB0byBjb252ZXJ0IGVpdGhlciB3YXksIHRoaXMgaXMgZmFzdCBlbm91Z2gg bm90IHRvIGJvdGhlciBvcHRpbWlzaW5nCj4gZXZlbiBmdXJ0aGVyIGZvciBtZS4KPiAKPiBDaGFu Z2VzIHNpbmNlIHYxOgo+IC0gVXNlIEJULjYwMSBpbnN0ZWFkIG9mIEJULjcwOSBjb2VmZmljaWVu dHMuIChWaWxsZSkKPiAKPiBTaWduZWQtb2ZmLWJ5OiBNYWFydGVuIExhbmtob3JzdCA8bWFhcnRl bi5sYW5raG9yc3RAbGludXguaW50ZWwuY29tPgo+IC0tLQo+ICBsaWIvaWd0X2ZiLmMgfCAzOTEg KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0t LS0KPiAgMSBmaWxlIGNoYW5nZWQsIDMxOSBpbnNlcnRpb25zKCspLCA3MiBkZWxldGlvbnMoLSkK PiAKPiBkaWZmIC0tZ2l0IGEvbGliL2lndF9mYi5jIGIvbGliL2lndF9mYi5jCj4gaW5kZXggOWQ2 MDI4MGYxOThlLi42ZjU3YWI2OWE4MjIgMTAwNjQ0Cj4gLS0tIGEvbGliL2lndF9mYi5jCj4gKysr IGIvbGliL2lndF9mYi5jCj4gQEAgLTcwLDYgKzcwLDcgQEAgc3RhdGljIHN0cnVjdCBmb3JtYXRf ZGVzY19zdHJ1Y3Qgewo+ICAJREYoWFJHQjg4ODgsCVJHQjI0LAkJMzIsIDI0KSwKPiAgCURGKFhS R0IyMTAxMDEwLAlSR0IzMCwJCTMyLCAzMCksCj4gIAlERihBUkdCODg4OCwJQVJHQjMyLAkJMzIs IDMyKSwKPiArCURGKE5WMTIsCVJHQjI0LAkJMzIsIC0xLCAyLCB7OCwgMTZ9KSwKClRoaXMgaXMg Z2V0dGluZyBwcmV0dHkgbXVjaCB1bnJlZGFibGUuIFN3aXRjaGluZyB0byBuYW1lZAppbml0aWFs aXplcnMgYXMgYSBmb2xsb3d1cCBtaWdodCBzZWVtIHBydWRlbnQuCgo+ICB9Owo+ICAjdW5kZWYg REYKPiAgCj4gQEAgLTM2NCwxNCArMzY1LDIwIEBAIHN0YXRpYyBpbnQgY3JlYXRlX2JvX2Zvcl9m YihpbnQgZmQsIGludCB3aWR0aCwgaW50IGhlaWdodCwKPiAgCQkJKmlzX2R1bWIgPSBmYWxzZTsK PiAgCj4gIAkJaWYgKGlzX2k5MTVfZGV2aWNlKGZkKSkgewo+IC0JCQl1aW50MzJfdCAqcHRyOwo+ ICsJCQl1aW50OF90ICpwdHI7Cj4gIAo+ICAJCQlibyA9IGdlbV9jcmVhdGUoZmQsIHNpemUpOwo+ ICAJCQlnZW1fc2V0X3RpbGluZyhmZCwgYm8sIGlndF9mYl9tb2RfdG9fdGlsaW5nKHRpbGluZyks IHN0cmlkZSk7Cj4gIAo+ICAJCQkvKiBFbnN1cmUgdGhlIGZyYW1lYnVmZmVyIGlzIHByZWFsbG9j YXRlZCAqLwo+IC0JCQlwdHIgPSBnZW1fbW1hcF9fZ3R0KGZkLCBibywgc2l6ZSwgUFJPVF9SRUFE KTsKPiAtCQkJaWd0X2Fzc2VydCgqcHRyID09IDApOwo+ICsJCQlwdHIgPSBnZW1fbW1hcF9fZ3R0 KGZkLCBibywgc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSk7Cj4gKwkJCWlndF9hc3NlcnQo Kih1aW50MzJfdCAqKXB0ciA9PSAwKTsKPiArCj4gKwkJCWlmIChmb3JtYXQtPmRybV9pZCA9PSBE Uk1fRk9STUFUX05WMTIpIHsKPiArCQkJCS8qIGNvbXBvbmVudCBmb3JtYXRzIGhhdmUgYSBkaWZm ZXJlbnQgemVybyBwb2ludCAqLwo+ICsJCQkJbWVtc2V0KHB0ciwgMTYsIG9mZnNldHNbMV0pOwo+ ICsJCQkJbWVtc2V0KHB0ciArIG9mZnNldHNbMV0sIDB4ODAsIChoZWlnaHQgKyAxKS8yICogc3Ry aWRlKTsKPiArCQkJfQo+ICAJCQlnZW1fbXVubWFwKHB0ciwgc2l6ZSk7Cj4gIAo+ICAJCQlpZiAo c2l6ZV9yZXQpCj4gQEAgLTExMjcsMTAzICsxMTM0LDExNyBAQCBzdGF0aWMgY2Fpcm9fZm9ybWF0 X3QgZHJtX2Zvcm1hdF90b19jYWlybyh1aW50MzJfdCBkcm1fZm9ybWF0KQo+ICAJCSAgICAgZHJt X2Zvcm1hdCwgaWd0X2Zvcm1hdF9zdHIoZHJtX2Zvcm1hdCkpOwo+ICB9Cj4gIAo+ICtzdHJ1Y3Qg ZmJfYmxpdF9saW5lYXIgewo+ICsJdWludDMyX3QgaGFuZGxlOwo+ICsJdW5zaWduZWQgc2l6ZSwg c3RyaWRlOwo+ICsJdWludDhfdCAqbWFwOwo+ICsJYm9vbCBpc19kdW1iOwo+ICsJdWludDMyX3Qg b2Zmc2V0c1s0XTsKPiArfTsKPiArCj4gIHN0cnVjdCBmYl9ibGl0X3VwbG9hZCB7Cj4gIAlpbnQg ZmQ7Cj4gIAlzdHJ1Y3QgaWd0X2ZiICpmYjsKPiAtCXN0cnVjdCB7Cj4gLQkJdWludDMyX3QgaGFu ZGxlOwo+IC0JCXVuc2lnbmVkIHNpemUsIHN0cmlkZTsKPiAtCQl1aW50OF90ICptYXA7Cj4gLQkJ Ym9vbCBpc19kdW1iOwo+IC0JfSBsaW5lYXI7Cj4gKwlzdHJ1Y3QgZmJfYmxpdF9saW5lYXIgbGlu ZWFyOwo+ICB9Owo+ICAKPiAtc3RhdGljIHZvaWQgZGVzdHJveV9jYWlyb19zdXJmYWNlX19ibGl0 KHZvaWQgKmFyZykKPiArc3RhdGljIHZvaWQgZnJlZV9saW5lYXJfbWFwcGluZyhpbnQgZmQsIHN0 cnVjdCBpZ3RfZmIgKmZiLCBzdHJ1Y3QgZmJfYmxpdF9saW5lYXIgKmxpbmVhcikKPiAgewo+IC0J c3RydWN0IGZiX2JsaXRfdXBsb2FkICpibGl0ID0gYXJnOwo+IC0Jc3RydWN0IGlndF9mYiAqZmIg PSBibGl0LT5mYjsKPiAgCXVuc2lnbmVkIGludCBvYmpfdGlsaW5nID0gaWd0X2ZiX21vZF90b190 aWxpbmcoZmItPnRpbGluZyk7Cj4gKwlpbnQgaTsKPiAgCj4gLQlnZW1fbXVubWFwKGJsaXQtPmxp bmVhci5tYXAsIGJsaXQtPmxpbmVhci5zaXplKTsKPiAtCWZiLT5jYWlyb19zdXJmYWNlID0gTlVM TDsKPiArCWdlbV9tdW5tYXAobGluZWFyLT5tYXAsIGxpbmVhci0+c2l6ZSk7Cj4gKwlnZW1fc2V0 X2RvbWFpbihmZCwgbGluZWFyLT5oYW5kbGUsCj4gKwkJICAgICAgIEk5MTVfR0VNX0RPTUFJTl9H VFQsIDApOwo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCBmYi0+bnVtX3BsYW5lczsgaSsrKQo+ICsJ CWlndF9ibGl0dGVyX2Zhc3RfY29weV9fcmF3KGZkLAo+ICsJCQkJCSAgIGxpbmVhci0+aGFuZGxl LAo+ICsJCQkJCSAgIGxpbmVhci0+b2Zmc2V0c1tpXSwKPiArCQkJCQkgICBsaW5lYXItPnN0cmlk ZSwKPiArCQkJCQkgICBJOTE1X1RJTElOR19OT05FLAo+ICsJCQkJCSAgIDAsIDAsIC8qIHNyY194 LCBzcmNfeSAqLwo+ICsJCQkJCSAgIGZiLT5wbGFuZV93aWR0aFtpXSwgZmItPnBsYW5lX2hlaWdo dFtpXSwKPiArCQkJCQkgICBmYi0+cGxhbmVfYnBwW2ldLAo+ICsJCQkJCSAgIGZiLT5nZW1faGFu ZGxlLAo+ICsJCQkJCSAgIGZiLT5vZmZzZXRzW2ldLAo+ICsJCQkJCSAgIGZiLT5zdHJpZGUsCj4g KwkJCQkJICAgb2JqX3RpbGluZywKPiArCQkJCQkgICAwLCAwIC8qIGRzdF94LCBkc3RfeSAqLyk7 Cj4gKwo+ICsJZ2VtX3N5bmMoZmQsIGxpbmVhci0+aGFuZGxlKTsKPiArCWdlbV9jbG9zZShmZCwg bGluZWFyLT5oYW5kbGUpOwo+ICt9Cj4gIAo+IC0JZ2VtX3NldF9kb21haW4oYmxpdC0+ZmQsIGJs aXQtPmxpbmVhci5oYW5kbGUsCj4gLQkJCUk5MTVfR0VNX0RPTUFJTl9HVFQsIDApOwo+ICtzdGF0 aWMgdm9pZCBkZXN0cm95X2NhaXJvX3N1cmZhY2VfX2JsaXQodm9pZCAqYXJnKQo+ICt7Cj4gKwlz dHJ1Y3QgZmJfYmxpdF91cGxvYWQgKmJsaXQgPSBhcmc7Cj4gIAo+IC0JaWd0X2JsaXR0ZXJfZmFz dF9jb3B5X19yYXcoYmxpdC0+ZmQsCj4gLQkJCQkgICBibGl0LT5saW5lYXIuaGFuZGxlLCAwLAo+ IC0JCQkJICAgYmxpdC0+bGluZWFyLnN0cmlkZSwKPiAtCQkJCSAgIEk5MTVfVElMSU5HX05PTkUs Cj4gLQkJCQkgICAwLCAwLCAvKiBzcmNfeCwgc3JjX3kgKi8KPiAtCQkJCSAgIGZiLT53aWR0aCwg ZmItPmhlaWdodCwKPiAtCQkJCSAgIGlndF9kcm1fZm9ybWF0X3RvX2JwcChmYi0+ZHJtX2Zvcm1h dCksCj4gLQkJCQkgICBmYi0+Z2VtX2hhbmRsZSwKPiAtCQkJCSAgIGZiLT5vZmZzZXRzWzBdLAo+ IC0JCQkJICAgZmItPnN0cmlkZSwKPiAtCQkJCSAgIG9ial90aWxpbmcsCj4gLQkJCQkgICAwLCAw IC8qIGRzdF94LCBkc3RfeSAqLyk7Cj4gLQo+IC0JZ2VtX3N5bmMoYmxpdC0+ZmQsIGJsaXQtPmxp bmVhci5oYW5kbGUpOwo+IC0JZ2VtX2Nsb3NlKGJsaXQtPmZkLCBibGl0LT5saW5lYXIuaGFuZGxl KTsKPiArCWJsaXQtPmZiLT5jYWlyb19zdXJmYWNlID0gTlVMTDsKPiArCj4gKwlmcmVlX2xpbmVh cl9tYXBwaW5nKGJsaXQtPmZkLCBibGl0LT5mYiwgJmJsaXQtPmxpbmVhcik7Cj4gIAo+ICAJZnJl ZShibGl0KTsKPiAgfQo+ICAKPiAtc3RhdGljIHZvaWQgY3JlYXRlX2NhaXJvX3N1cmZhY2VfX2Js aXQoaW50IGZkLCBzdHJ1Y3QgaWd0X2ZiICpmYikKPiArc3RhdGljIHZvaWQgc2V0dXBfbGluZWFy X21hcHBpbmcoaW50IGZkLCBzdHJ1Y3QgaWd0X2ZiICpmYiwgc3RydWN0IGZiX2JsaXRfbGluZWFy ICpsaW5lYXIpCj4gIHsKPiAtCXN0cnVjdCBmYl9ibGl0X3VwbG9hZCAqYmxpdDsKPiAtCWNhaXJv X2Zvcm1hdF90IGNhaXJvX2Zvcm1hdDsKPiAgCXVuc2lnbmVkIGludCBvYmpfdGlsaW5nID0gaWd0 X2ZiX21vZF90b190aWxpbmcoZmItPnRpbGluZyk7Cj4gLQl1aW50MzJfdCBvZmZzZXRzWzRdOwo+ IC0KPiAtCWJsaXQgPSBtYWxsb2Moc2l6ZW9mKCpibGl0KSk7Cj4gLQlpZ3RfYXNzZXJ0KGJsaXQp Owo+ICsJaW50IGk7Cj4gIAo+ICAJLyoKPiAgCSAqIFdlIGNyZWF0ZSBhIGxpbmVhciBCTyB0aGF0 IHdlJ2xsIG1hcCBmb3IgdGhlIENQVSB0byB3cml0ZSB0byAodXNpbmcKPiAgCSAqIGNhaXJvKS4g VGhpcyBsaW5lYXIgYm8gd2lsbCBiZSB0aGVuIGJsaXR0ZWQgdG8gaXRzIGZpbmFsCj4gIAkgKiBk ZXN0aW5hdGlvbiwgdGlsaW5nIGl0IGF0IHRoZSBzYW1lIHRpbWUuCj4gIAkgKi8KPiAtCWJsaXQt PmxpbmVhci5oYW5kbGUgPSBjcmVhdGVfYm9fZm9yX2ZiKGZkLCBmYi0+d2lkdGgsIGZiLT5oZWln aHQsCj4gKwlsaW5lYXItPmhhbmRsZSA9IGNyZWF0ZV9ib19mb3JfZmIoZmQsIGZiLT53aWR0aCwg ZmItPmhlaWdodCwKPiAgCQkJCQkgICAgICAgbG9va3VwX2RybV9mb3JtYXQoZmItPmRybV9mb3Jt YXQpLAo+ICAJCQkJCSAgICAgICBMT0NBTF9EUk1fRk9STUFUX01PRF9OT05FLCAwLAo+IC0JCQkJ CSAgICAgICAwLCAmYmxpdC0+bGluZWFyLnNpemUsCj4gLQkJCQkJICAgICAgICZibGl0LT5saW5l YXIuc3RyaWRlLAo+IC0JCQkJCSAgICAgICBvZmZzZXRzLCAmYmxpdC0+bGluZWFyLmlzX2R1bWIp Owo+IC0KPiAtCWlndF9hc3NlcnQoYmxpdC0+bGluZWFyLmhhbmRsZSA+IDApOwo+ICsJCQkJCSAg ICAgICAwLCAmbGluZWFyLT5zaXplLAo+ICsJCQkJCSAgICAgICAmbGluZWFyLT5zdHJpZGUsCj4g KwkJCQkJICAgICAgIGxpbmVhci0+b2Zmc2V0cywgJmxpbmVhci0+aXNfZHVtYik7Cj4gIAo+IC0J YmxpdC0+ZmQgPSBmZDsKPiAtCWJsaXQtPmZiID0gZmI7Cj4gKwlpZ3RfYXNzZXJ0KGxpbmVhci0+ aGFuZGxlID4gMCk7Cj4gIAo+ICAJLyogQ29weSBmYiBjb250ZW50IHRvIGxpbmVhciBCTyAqLwo+ IC0JZ2VtX3NldF9kb21haW4oZmQsIGJsaXQtPmxpbmVhci5oYW5kbGUsCj4gKwlnZW1fc2V0X2Rv bWFpbihmZCwgbGluZWFyLT5oYW5kbGUsCj4gIAkJCUk5MTVfR0VNX0RPTUFJTl9HVFQsIDApOwo+ ICAKPiAtCWlndF9ibGl0dGVyX2Zhc3RfY29weV9fcmF3KGZkLAo+IC0JCQkJICAgZmItPmdlbV9o YW5kbGUsCj4gLQkJCQkgICBmYi0+b2Zmc2V0c1swXSwKPiAtCQkJCSAgIGZiLT5zdHJpZGUsCj4g LQkJCQkgICBvYmpfdGlsaW5nLAo+IC0JCQkJICAgMCwgMCwgLyogc3JjX3gsIHNyY195ICovCj4g LQkJCQkgICBmYi0+d2lkdGgsIGZiLT5oZWlnaHQsCj4gLQkJCQkgICBpZ3RfZHJtX2Zvcm1hdF90 b19icHAoZmItPmRybV9mb3JtYXQpLAo+IC0JCQkJICAgYmxpdC0+bGluZWFyLmhhbmRsZSwgMCwK PiAtCQkJCSAgIGJsaXQtPmxpbmVhci5zdHJpZGUsCj4gLQkJCQkgICBJOTE1X1RJTElOR19OT05F LAo+IC0JCQkJICAgMCwgMCAvKiBkc3RfeCwgZHN0X3kgKi8pOwo+IC0KPiAtCWdlbV9zeW5jKGZk LCBibGl0LT5saW5lYXIuaGFuZGxlKTsKPiAtCj4gLQlnZW1fc2V0X2RvbWFpbihmZCwgYmxpdC0+ bGluZWFyLmhhbmRsZSwKPiArCWZvciAoaSA9IDA7IGkgPCBmYi0+bnVtX3BsYW5lczsgaSsrKQo+ ICsJCWlndF9ibGl0dGVyX2Zhc3RfY29weV9fcmF3KGZkLAo+ICsJCQkJCSAgZmItPmdlbV9oYW5k bGUsCj4gKwkJCQkJICBmYi0+b2Zmc2V0c1tpXSwKPiArCQkJCQkgIGZiLT5zdHJpZGUsCj4gKwkJ CQkJICBvYmpfdGlsaW5nLAo+ICsJCQkJCSAgMCwgMCwgLyogc3JjX3gsIHNyY195ICovCj4gKwkJ CQkJICBmYi0+cGxhbmVfd2lkdGhbaV0sIGZiLT5wbGFuZV9oZWlnaHRbaV0sCj4gKwkJCQkJICBm Yi0+cGxhbmVfYnBwW2ldLAo+ICsJCQkJCSAgbGluZWFyLT5oYW5kbGUsIGxpbmVhci0+b2Zmc2V0 c1tpXSwKPiArCQkJCQkgIGxpbmVhci0+c3RyaWRlLAo+ICsJCQkJCSAgSTkxNV9USUxJTkdfTk9O RSwKPiArCQkJCQkgIDAsIDAgLyogZHN0X3gsIGRzdF95ICovKTsKPiArCj4gKwlnZW1fc3luYyhm ZCwgbGluZWFyLT5oYW5kbGUpOwo+ICsKPiArCWdlbV9zZXRfZG9tYWluKGZkLCBsaW5lYXItPmhh bmRsZSwKPiAgCQkgICAgICAgSTkxNV9HRU1fRE9NQUlOX0NQVSwgSTkxNV9HRU1fRE9NQUlOX0NQ VSk7Cj4gIAo+ICAJLyogU2V0dXAgY2Fpcm8gY29udGV4dCAqLwo+IC0JYmxpdC0+bGluZWFyLm1h cCA9IGdlbV9tbWFwX19jcHUoZmQsCj4gLQkJCQkJIGJsaXQtPmxpbmVhci5oYW5kbGUsCj4gLQkJ CQkJIDAsCj4gLQkJCQkJIGJsaXQtPmxpbmVhci5zaXplLAo+IC0JCQkJCSBQUk9UX1JFQUQgfCBQ Uk9UX1dSSVRFKTsKPiArCWxpbmVhci0+bWFwID0gZ2VtX21tYXBfX2NwdShmZCwgbGluZWFyLT5o YW5kbGUsCj4gKwkJCQkgICAgMCwgbGluZWFyLT5zaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRF KTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgY3JlYXRlX2NhaXJvX3N1cmZhY2VfX2JsaXQoaW50 IGZkLCBzdHJ1Y3QgaWd0X2ZiICpmYikKPiArewo+ICsJc3RydWN0IGZiX2JsaXRfdXBsb2FkICpi bGl0Owo+ICsJY2Fpcm9fZm9ybWF0X3QgY2Fpcm9fZm9ybWF0Owo+ICsKPiArCWJsaXQgPSBtYWxs b2Moc2l6ZW9mKCpibGl0KSk7Cj4gKwlpZ3RfYXNzZXJ0KGJsaXQpOwo+ICsKPiArCWJsaXQtPmZk ID0gZmQ7Cj4gKwlibGl0LT5mYiA9IGZiOwo+ICsJc2V0dXBfbGluZWFyX21hcHBpbmcoZmQsIGZi LCAmYmxpdC0+bGluZWFyKTsKPiAgCj4gIAljYWlyb19mb3JtYXQgPSBkcm1fZm9ybWF0X3RvX2Nh aXJvKGZiLT5kcm1fZm9ybWF0KTsKPiAgCWZiLT5jYWlyb19zdXJmYWNlID0KPiBAQCAtMTI4NSw2 ICsxMzA2LDIzMyBAQCBzdGF0aWMgdm9pZCBjcmVhdGVfY2Fpcm9fc3VyZmFjZV9fZ3R0KGludCBm ZCwgc3RydWN0IGlndF9mYiAqZmIpCj4gIAkJCQkgICAgZmIsIGRlc3Ryb3lfY2Fpcm9fc3VyZmFj ZV9fZ3R0KTsKPiAgfQo+ICAKPiArc3RydWN0IGZiX2NvbnZlcnRfYmxpdF91cGxvYWQgewo+ICsJ aW50IGZkOwo+ICsJc3RydWN0IGlndF9mYiAqZmI7Cj4gKwo+ICsJc3RydWN0IHsKPiArCQl1aW50 OF90ICptYXA7Cj4gKwkJdW5zaWduZWQgc3RyaWRlLCBzaXplOwo+ICsJfSByZ2IyNDsKPiArCj4g KwlzdHJ1Y3QgZmJfYmxpdF9saW5lYXIgbGluZWFyOwo+ICt9Owo+ICsKPiArc3RhdGljIHVpbnQ4 X3QgY2xhbXByZ2IoZmxvYXQgdmFsKSB7Cj4gKwlpZiAodmFsIDwgMCkKPiArCQlyZXR1cm4gMDsK PiArCWlmICh2YWwgPiAyNTUpCj4gKwkJcmV0dXJuIDI1NTsKPiArCj4gKwlyZXR1cm4gKHVpbnQ4 X3QpdmFsOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBjb252ZXJ0X252MTJfdG9fcmdiMjQoc3Ry dWN0IGlndF9mYiAqZmIsIHN0cnVjdCBmYl9jb252ZXJ0X2JsaXRfdXBsb2FkICpibGl0KQo+ICt7 Cj4gKwlpbnQgaSwgajsKPiArCWNvbnN0IHVpbnQ4X3QgKnksICp1djsKPiArCXVpbnQ4X3QgKnJn YjI0ID0gYmxpdC0+cmdiMjQubWFwOwo+ICsJdW5zaWduZWQgcmdiMjRfc3RyaWRlID0gYmxpdC0+ cmdiMjQuc3RyaWRlLCBwbGFuYXJfc3RyaWRlID0gYmxpdC0+bGluZWFyLnN0cmlkZTsKPiArCXVp bnQ4X3QgKmJ1ZiA9IG1hbGxvYyhibGl0LT5saW5lYXIuc2l6ZSk7Cj4gKwo+ICsJLyoKPiArCSAq IFJlYWRpbmcgZnJvbSB0aGUgQk8gaXMgYXdmdWxseSBzbG93IGJlY2F1c2Ugb2YgbGFjayBvZiBy ZWFkIGNhY2hpbmcsCj4gKwkgKiBpdCdzIGZhc3RlciB0byBjb3B5IHRoZSB3aG9sZSBCTyB0byBh IHRlbXBvcmFyeSBidWZmZXIgYW5kIGNvbnZlcnQKPiArCSAqIGZyb20gdGhlcmUuCj4gKwkgKi8K PiArCW1lbWNweShidWYsIGJsaXQtPmxpbmVhci5tYXAsIGJsaXQtPmxpbmVhci5zaXplKTsKPiAr CXkgPSAmYnVmW2JsaXQtPmxpbmVhci5vZmZzZXRzWzBdXTsKPiArCXV2ID0gJmJ1ZltibGl0LT5s aW5lYXIub2Zmc2V0c1sxXV07Cj4gKwo+ICsJLyogQ29udmVydCBmcm9tIGxpbWl0ZWQgY29sb3Ig cmFuZ2UgQlQuNjAxICovCj4gKwlmb3IgKGkgPSAwOyBpIDwgZmItPmhlaWdodCAvIDI7IGkrKykg ewo+ICsJCWZvciAoaiA9IDA7IGogPCBmYi0+d2lkdGg7IGorKykgewo+ICsJCQlmbG9hdCByXywg Z18sIGJfLCB5MCwgeTEsIGNiLCBjcjsKPiArCQkJLyogQ29udmVydCAxeDIgcGl4ZWwgYmxvY2tz ICovCj4gKwo+ICsJCQl5MCA9IDEuMTY0ZiAqICh5W2pdIC0gMTYuZik7Cj4gKwkJCXkxID0gMS4x NjRmICogKHlbaiArIHBsYW5hcl9zdHJpZGVdIC0gMTYuZik7Cj4gKwo+ICsJCQljYiA9IHV2W2og JiB+MV0gLSAxMjguZjsKPiArCQkJY3IgPSB1dltqIHwgMV0gLSAxMjguZjsKPiArCj4gKwkJCXJf ID0gIDAuMDAwZiAqIGNiICsgIDEuNTk2ZiAqIGNyOwo+ICsJCQlnXyA9IC0wLjM5MmYgKiBjYiAr IC0wLjgxM2YgKiBjcjsKPiArCQkJYl8gPSAgMi4wMTdmICogY2IgKyAgMC4wMDBmICogY3I7Cj4g Kwo+ICsJCQlyZ2IyNFtqICogNCArIDJdID0gY2xhbXByZ2IoeTAgKyByXyk7Cj4gKwkJCXJnYjI0 W2ogKiA0ICsgMiArIHJnYjI0X3N0cmlkZV0gPSBjbGFtcHJnYih5MSArIHJfKTsKPiArCj4gKwkJ CXJnYjI0W2ogKiA0ICsgMV0gPSBjbGFtcHJnYih5MCArIGdfKTsKPiArCQkJcmdiMjRbaiAqIDQg KyAxICsgcmdiMjRfc3RyaWRlXSA9IGNsYW1wcmdiKHkxICsgZ18pOwo+ICsKPiArCQkJcmdiMjRb aiAqIDRdID0gY2xhbXByZ2IoeTAgKyBiXyk7Cj4gKwkJCXJnYjI0W2ogKiA0ICsgcmdiMjRfc3Ry aWRlXSA9IGNsYW1wcmdiKHkxICsgYl8pOwoKSnVzdCByZXBsaWNhdGluZyB0aGUgc2FtZSBjaHJv bWEgZm9yIGZvdXIgcGl4ZWxzIGlzIHByZXR0eSBjcnVkZSwgYnV0CnNpbmNlIHRoaXMgaXMgZm9y IHRlc3RpbmcgSSBndWVzcyB3ZSBkb24ndCByZWFsbHkgY2FyZS4gR2l2ZW4gdGhhdCBJCmd1ZXNz IHdlIGNvdWxkIGV2ZW4gcHJvY2VzcyBpbiAyeDIgYmxvY2tzIGluc3RlYWQuCgpUaGUgY29lZmZp Y2llbnRzIGxvb2tzIGNvcnJlY3QgZW5vdWdoIHRvIG1lLgoKUmV2aWV3ZWQtYnk6IFZpbGxlIFN5 cmrDpGzDpCA8dmlsbGUuc3lyamFsYUBsaW51eC5pbnRlbC5jb20+Cgo+ICsJCX0KPiArCj4gKwkJ cmdiMjQgKz0gMiAqIHJnYjI0X3N0cmlkZTsKPiArCQl5ICs9IDIgKiBwbGFuYXJfc3RyaWRlOwo+ ICsJCXV2ICs9IHBsYW5hcl9zdHJpZGU7Cj4gKwl9Cj4gKwo+ICsJaWYgKGZiLT5oZWlnaHQgJiAx KSB7Cj4gKwkJLyogQ29udmVydCBsYXN0IHJvdyAqLwo+ICsJCWZvciAoaiA9IDA7IGogPCBmYi0+ d2lkdGg7IGorKykgewo+ICsJCQlmbG9hdCByXywgZ18sIGJfLCB5MCwgY2IsIGNyOwo+ICsJCQkv KiBDb252ZXJ0IHNpbmdsZSBwaXhlbCAqLwo+ICsKPiArCQkJY2IgPSB1dltqICYgfjFdIC0gMTI4 LmY7Cj4gKwkJCWNyID0gdXZbaiB8IDFdIC0gMTI4LmY7Cj4gKwo+ICsJCQl5MCA9IDEuMTY0ZiAq ICh5W2pdIC0gMTYuZik7Cj4gKwkJCXJfID0gIDAuMDAwZiAqIGNiICsgIDEuNTk2ZiAqIGNyOwo+ ICsJCQlnXyA9IC0wLjM5MmYgKiBjYiArIC0wLjgxM2YgKiBjcjsKPiArCQkJYl8gPSAgMi4wMTdm ICogY2IgKyAgMC4wMDBmICogY3I7Cj4gKwo+ICsJCQlyZ2IyNFtqICogNCArIDJdID0gY2xhbXBy Z2IoeTAgKyByXyk7Cj4gKwkJCXJnYjI0W2ogKiA0ICsgMV0gPSBjbGFtcHJnYih5MCArIGdfKTsK PiArCQkJcmdiMjRbaiAqIDRdID0gY2xhbXByZ2IoeTAgKyBiXyk7Cj4gKwkJfQo+ICsJfQo+ICsK PiArCWZyZWUoYnVmKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgY29udmVydF9yZ2IyNF90b19u djEyKHN0cnVjdCBpZ3RfZmIgKmZiLCBzdHJ1Y3QgZmJfY29udmVydF9ibGl0X3VwbG9hZCAqYmxp dCkKPiArewo+ICsJaW50IGksIGo7Cj4gKwl1aW50OF90ICp5ID0gJmJsaXQtPmxpbmVhci5tYXBb YmxpdC0+bGluZWFyLm9mZnNldHNbMF1dOwo+ICsJdWludDhfdCAqdXYgPSAmYmxpdC0+bGluZWFy Lm1hcFtibGl0LT5saW5lYXIub2Zmc2V0c1sxXV07Cj4gKwljb25zdCB1aW50OF90ICpyZ2IyNCA9 IGJsaXQtPnJnYjI0Lm1hcDsKPiArCXVuc2lnbmVkIHJnYjI0X3N0cmlkZSA9IGJsaXQtPnJnYjI0 LnN0cmlkZTsKPiArCXVuc2lnbmVkIHBsYW5hcl9zdHJpZGUgPSBibGl0LT5saW5lYXIuc3RyaWRl Owo+ICsKPiArCWlndF9hc3NlcnRfZihmYi0+ZHJtX2Zvcm1hdCA9PSBEUk1fRk9STUFUX05WMTIs Cj4gKwkJICAgICAiQ29udmVyc2lvbiBub3QgaW1wbGVtZW50ZWQgZm9yICFOVjEyIHBsYW5hciBm b3JtYXRzXG4iKTsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgZmItPnBsYW5lX2hlaWdodFswXTsg aSsrKSB7Cj4gKwkJLyogVXNlIGxpbWl0ZWQgY29sb3IgcmFuZ2UgQlQuNjAxICovCj4gKwo+ICsJ CWZvciAoaiA9IDA7IGogPCBmYi0+cGxhbmVfd2lkdGhbMF07IGorKykgewo+ICsJCQlmbG9hdCB5 ZiA9IDAuMjU3ZiAqIHJnYjI0W2ogKiA0ICsgMl0gKwo+ICsJCQkJICAgMC41MDRmICogcmdiMjRb aiAqIDQgKyAxXSArCj4gKwkJCQkgICAwLjA5OGYgKiByZ2IyNFtqICogNF0gKyAxNjsKPiArCj4g KwkJCXlbal0gPSAodWludDhfdCl5ZjsKPiArCQl9Cj4gKwo+ICsJCXJnYjI0ICs9IHJnYjI0X3N0 cmlkZTsKPiArCQl5ICs9IHBsYW5hcl9zdHJpZGU7Cj4gKwl9Cj4gKwo+ICsJcmdiMjQgPSBibGl0 LT5yZ2IyNC5tYXA7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IGZiLT5oZWlnaHQgLyAyOyBpKysp IHsKPiArCQlmb3IgKGogPSAwOyBqIDwgZmItPnBsYW5lX3dpZHRoWzFdOyBqKyspIHsKPiArCQkJ LyoKPiArCQkJICogUGl4ZWwgY2VudGVyIGZvciBDYidDcicgaXMgYmV0d2VlbiB0aGUgbGVmdCB0 b3AgYW5kCj4gKwkJCSAqIGJvdHRvbSBwaXhlbCBpbiBhIDJ4MiBibG9jaywgc28gdGFrZSB0aGUg YXZlcmFnZS4KPiArCQkJICovCj4gKwkJCWZsb2F0IHVmID0gLTAuMTQ4Zi8yICogcmdiMjRbaiAq IDggKyAyXSArCj4gKwkJCQkgICAtMC4xNDhmLzIgKiByZ2IyNFtqICogOCArIDIgKyByZ2IyNF9z dHJpZGVdICsKPiArCQkJCSAgIC0wLjI5MWYvMiAqIHJnYjI0W2ogKiA4ICsgMV0gKwo+ICsJCQkJ ICAgLTAuMjkxZi8yICogcmdiMjRbaiAqIDggKyAxICsgcmdiMjRfc3RyaWRlXSArCj4gKwkJCQkg ICAgMC40MzlmLzIgKiByZ2IyNFtqICogOF0gKwo+ICsJCQkJICAgIDAuNDM5Zi8yICogcmdiMjRb aiAqIDggKyByZ2IyNF9zdHJpZGVdICsgMTI4Owo+ICsJCQlmbG9hdCB2ZiA9ICAwLjQzOWYvMiAq IHJnYjI0W2ogKiA4ICsgMl0gKwo+ICsJCQkJICAgIDAuNDM5Zi8yICogcmdiMjRbaiAqIDggKyAy ICsgcmdiMjRfc3RyaWRlXSArCj4gKwkJCQkgICAtMC4zNjhmLzIgKiByZ2IyNFtqICogOCArIDFd ICsKPiArCQkJCSAgIC0wLjM2OGYvMiAqIHJnYjI0W2ogKiA4ICsgMSArIHJnYjI0X3N0cmlkZV0g Kwo+ICsJCQkJICAgLTAuMDcxZi8yICogcmdiMjRbaiAqIDhdICsKPiArCQkJCSAgIC0wLjA3MWYv MiAqIHJnYjI0W2ogKiA4ICsgcmdiMjRfc3RyaWRlXSArIDEyODsKPiArCQkJdXZbaiAqIDJdID0g KHVpbnQ4X3QpdWY7Cj4gKwkJCXV2W2ogKiAyICsgMV0gPSAodWludDhfdCl2ZjsKPiArCQl9Cj4g Kwo+ICsJCXJnYjI0ICs9IDIgKiByZ2IyNF9zdHJpZGU7Cj4gKwkJdXYgKz0gcGxhbmFyX3N0cmlk ZTsKPiArCX0KPiArCj4gKwkvKiBMYXN0IHJvdyBjYW5ub3QgYmUgaW50ZXJwb2xhdGVkIGJldHdl ZW4gMiBwaXhlbHMsIHRha2UgdGhlIHNpbmdsZSB2YWx1ZSAqLwo+ICsJaWYgKGkgPCBmYi0+cGxh bmVfaGVpZ2h0WzFdKSB7Cj4gKwkJZm9yIChqID0gMDsgaiA8IGZiLT5wbGFuZV93aWR0aFsxXTsg aisrKSB7Cj4gKwkJCWZsb2F0IHVmID0gLTAuMTQ4ZiAqIHJnYjI0W2ogKiA4ICsgMl0gKwo+ICsJ CQkJICAgLTAuMjkxZiAqIHJnYjI0W2ogKiA4ICsgMV0gKwo+ICsJCQkJICAgIDAuNDM5ZiAqIHJn YjI0W2ogKiA4XSArIDEyODsKPiArCQkJZmxvYXQgdmYgPSAgMC40MzlmICogcmdiMjRbaiAqIDgg KyAyXSArCj4gKwkJCQkgICAtMC4zNjhmICogcmdiMjRbaiAqIDggKyAxXSArCj4gKwkJCQkgICAt MC4wNzFmICogcmdiMjRbaiAqIDhdICsgMTI4Owo+ICsKPiArCQkJdXZbaiAqIDJdID0gKHVpbnQ4 X3QpdWY7Cj4gKwkJCXV2W2ogKiAyICsgMV0gPSAodWludDhfdCl2ZjsKPiArCQl9Cj4gKwl9Cj4g K30KPiArCj4gK3N0YXRpYyB2b2lkIGRlc3Ryb3lfY2Fpcm9fc3VyZmFjZV9fY29udmVydCh2b2lk ICphcmcpCj4gK3sKPiArCXN0cnVjdCBmYl9jb252ZXJ0X2JsaXRfdXBsb2FkICpibGl0ID0gYXJn Owo+ICsJc3RydWN0IGlndF9mYiAqZmIgPSBibGl0LT5mYjsKPiArCj4gKwkvKiBDb252ZXJ0IGJh Y2sgdG8gcGxhbmFyISAqLwo+ICsJaWd0X2Fzc2VydF9mKGZiLT5kcm1fZm9ybWF0ID09IERSTV9G T1JNQVRfTlYxMiwKPiArCQkgICAgICJDb252ZXJzaW9uIG5vdCBpbXBsZW1lbnRlZCBmb3IgIU5W MTIgcGxhbmFyIGZvcm1hdHNcbiIpOwo+ICsKPiArCWNvbnZlcnRfcmdiMjRfdG9fbnYxMihmYiwg YmxpdCk7Cj4gKwo+ICsJbXVubWFwKGJsaXQtPnJnYjI0Lm1hcCwgYmxpdC0+cmdiMjQuc2l6ZSk7 Cj4gKwo+ICsJaWYgKGJsaXQtPmxpbmVhci5oYW5kbGUpCj4gKwkJZnJlZV9saW5lYXJfbWFwcGlu ZyhibGl0LT5mZCwgYmxpdC0+ZmIsICZibGl0LT5saW5lYXIpOwo+ICsJZWxzZQo+ICsJCWdlbV9t dW5tYXAoYmxpdC0+bGluZWFyLm1hcCwgZmItPnNpemUpOwo+ICsKPiArCWZyZWUoYmxpdCk7Cj4g Kwo+ICsJZmItPmNhaXJvX3N1cmZhY2UgPSBOVUxMOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBj cmVhdGVfY2Fpcm9fc3VyZmFjZV9fY29udmVydChpbnQgZmQsIHN0cnVjdCBpZ3RfZmIgKmZiKQo+ ICt7Cj4gKwlzdHJ1Y3QgZmJfY29udmVydF9ibGl0X3VwbG9hZCAqYmxpdCA9IG1hbGxvYyhzaXpl b2YoKmJsaXQpKTsKPiArCWlndF9hc3NlcnQoYmxpdCk7Cj4gKwo+ICsJYmxpdC0+ZmQgPSBmZDsK PiArCWJsaXQtPmZiID0gZmI7Cj4gKwlibGl0LT5yZ2IyNC5zdHJpZGUgPSBBTElHTihmYi0+d2lk dGggKiA0LCAxNik7Cj4gKwlibGl0LT5yZ2IyNC5zaXplID0gQUxJR04oYmxpdC0+cmdiMjQuc3Ry aWRlICogZmItPmhlaWdodCwgc3lzY29uZihfU0NfUEFHRVNJWkUpKTsKPiArCWJsaXQtPnJnYjI0 Lm1hcCA9IG1tYXAoTlVMTCwgYmxpdC0+cmdiMjQuc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklU RSwgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTllNT1VTLCAtMSwgMCk7Cj4gKwlpZ3RfYXNzZXJ0KGJs aXQtPnJnYjI0Lm1hcCAhPSBNQVBfRkFJTEVEKTsKPiArCj4gKwlpZiAoZmItPnRpbGluZyA9PSBM T0NBTF9JOTE1X0ZPUk1BVF9NT0RfWV9USUxFRCB8fAo+ICsJICAgIGZiLT50aWxpbmcgPT0gTE9D QUxfSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVEKSB7Cj4gKwkJc2V0dXBfbGluZWFyX21hcHBpbmco ZmQsIGZiLCAmYmxpdC0+bGluZWFyKTsKPiArCX0gZWxzZSB7Cj4gKwkJYmxpdC0+bGluZWFyLmhh bmRsZSA9IDA7Cj4gKwkJYmxpdC0+bGluZWFyLm1hcCA9IGdlbV9tbWFwX19ndHQoZmQsIGZiLT5n ZW1faGFuZGxlLCBmYi0+c2l6ZSwKPiArCQkJCQkgICAgICBQUk9UX1JFQUQgfCBQUk9UX1dSSVRF KTsKPiArCQlpZ3RfYXNzZXJ0KGJsaXQtPmxpbmVhci5tYXApOwo+ICsJCWJsaXQtPmxpbmVhci5z dHJpZGUgPSBmYi0+c3RyaWRlOwo+ICsJCWJsaXQtPmxpbmVhci5zaXplID0gZmItPnNpemU7Cj4g KwkJbWVtY3B5KGJsaXQtPmxpbmVhci5vZmZzZXRzLCBmYi0+b2Zmc2V0cywgc2l6ZW9mKGZiLT5v ZmZzZXRzKSk7Cj4gKwl9Cj4gKwo+ICsJLyogQ29udmVydCB0byBsaW5lYXIhICovCj4gKwlpZ3Rf YXNzZXJ0X2YoZmItPmRybV9mb3JtYXQgPT0gRFJNX0ZPUk1BVF9OVjEyLAo+ICsJCSAgICAgIkNv bnZlcnNpb24gbm90IGltcGxlbWVudGVkIGZvciAhTlYxMiBwbGFuYXIgZm9ybWF0c1xuIik7Cj4g Kwljb252ZXJ0X252MTJfdG9fcmdiMjQoZmIsIGJsaXQpOwo+ICsKPiArCWZiLT5jYWlyb19zdXJm YWNlID0KPiArCQljYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0YShibGl0LT5yZ2Iy NC5tYXAsCj4gKwkJCQkJCSAgICBDQUlST19GT1JNQVRfUkdCMjQsCj4gKwkJCQkJCSAgICBmYi0+ d2lkdGgsIGZiLT5oZWlnaHQsCj4gKwkJCQkJCSAgICBibGl0LT5yZ2IyNC5zdHJpZGUpOwo+ICsK PiArCWNhaXJvX3N1cmZhY2Vfc2V0X3VzZXJfZGF0YShmYi0+Y2Fpcm9fc3VyZmFjZSwKPiArCQkJ CSAgICAoY2Fpcm9fdXNlcl9kYXRhX2tleV90ICopY3JlYXRlX2NhaXJvX3N1cmZhY2VfX2NvbnZl cnQsCj4gKwkJCQkgICAgYmxpdCwgZGVzdHJveV9jYWlyb19zdXJmYWNlX19jb252ZXJ0KTsKPiAr fQo+ICsKPiAgLyoqCj4gICAqIGlndF9nZXRfY2Fpcm9fc3VyZmFjZToKPiAgICogQGZkOiBvcGVu IGRybSBmaWxlIGRlc2NyaXB0b3IKPiBAQCAtMTI5OCwxMSArMTU0NiwxMCBAQCBzdGF0aWMgdm9p ZCBjcmVhdGVfY2Fpcm9fc3VyZmFjZV9fZ3R0KGludCBmZCwgc3RydWN0IGlndF9mYiAqZmIpCj4g ICAqLwo+ICBjYWlyb19zdXJmYWNlX3QgKmlndF9nZXRfY2Fpcm9fc3VyZmFjZShpbnQgZmQsIHN0 cnVjdCBpZ3RfZmIgKmZiKQo+ICB7Cj4gLQkvKiBUaGlzIGRvZXNuJ3Qgd29yayBmb3IgcGxhbmFy IGZvcm1hdHMgZm9yIG5vdywgYnV0IHdlIHdpbGwgY29udmVydCB0aGVtIHRvIFJHQjI0IGluIHRo ZSBmdXR1cmUuICovCj4gLQlpZ3RfYXNzZXJ0KGZiLT5udW1fcGxhbmVzIDwgMik7Cj4gLQo+ICAJ aWYgKGZiLT5jYWlyb19zdXJmYWNlID09IE5VTEwpIHsKPiAtCQlpZiAoZmItPnRpbGluZyA9PSBM T0NBTF9JOTE1X0ZPUk1BVF9NT0RfWV9USUxFRCB8fAo+ICsJCWlmIChmYi0+bnVtX3BsYW5lcyA+ IDEpCj4gKwkJCWNyZWF0ZV9jYWlyb19zdXJmYWNlX19jb252ZXJ0KGZkLCBmYik7Cj4gKwkJZWxz ZSBpZiAoZmItPnRpbGluZyA9PSBMT0NBTF9JOTE1X0ZPUk1BVF9NT0RfWV9USUxFRCB8fAo+ICAJ CSAgICBmYi0+dGlsaW5nID09IExPQ0FMX0k5MTVfRk9STUFUX01PRF9ZZl9USUxFRCkKPiAgCQkJ Y3JlYXRlX2NhaXJvX3N1cmZhY2VfX2JsaXQoZmQsIGZiKTsKPiAgCQllbHNlCj4gLS0gCj4gMi4x NS4xCj4gCj4gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K PiBpZ3QtZGV2IG1haWxpbmcgbGlzdAo+IGlndC1kZXZAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCj4g aHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pZ3QtZGV2Cgot LSAKVmlsbGUgU3lyasOkbMOkCkludGVsIE9UQwpfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXwppZ3QtZGV2IG1haWxpbmcgbGlzdAppZ3QtZGV2QGxpc3RzLmZy ZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3Rp bmZvL2lndC1kZXYK