From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Subject: Re: [PATCH v2 06/14] drm/i915: Reorganize plane register writes to make them more atomic Date: Thu, 8 Nov 2018 21:48:27 +0200 Message-ID: <20181108194827.GE9144@intel.com> References: <20181101150605.18235-7-ville.syrjala@linux.intel.com> <20181107184255.31513-1-ville.syrjala@linux.intel.com> <20181108193007.GC27871@mdroper-desk.amr.corp.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by gabe.freedesktop.org (Postfix) with ESMTPS id B68AF6E6A0 for ; Thu, 8 Nov 2018 19:48:30 +0000 (UTC) Content-Disposition: inline In-Reply-To: <20181108193007.GC27871@mdroper-desk.amr.corp.intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Matt Roper Cc: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gVGh1LCBOb3YgMDgsIDIwMTggYXQgMTE6MzA6MDdBTSAtMDgwMCwgTWF0dCBSb3BlciB3cm90 ZToKPiBPbiBXZWQsIE5vdiAwNywgMjAxOCBhdCAwODo0Mjo1NVBNICswMjAwLCBWaWxsZSBTeXJq YWxhIHdyb3RlOgo+ID4gRnJvbTogVmlsbGUgU3lyasOkbMOkIDx2aWxsZS5zeXJqYWxhQGxpbnV4 LmludGVsLmNvbT4KPiA+IAo+ID4gU29tZSBvYnNlcnZhdGlvbnMgYWJvdXQgdGhlIHBsYW5lIHJl Z2lzdGVyczoKPiA+IC0gdGhlIGNvbnRyb2wgcmVnaXN0ZXIgd2lsbCBzZWxmLWFybSBpZiB0aGUg cGxhbmUgaXMgbm90IGFscmVhZHkKPiA+ICAgZW5hYmxlZCwgdGh1cyB3ZSB3YW50IHRvIHdyaXRl IGl0IGFzIGNsb3NlIHRvIChvciBpZGVhbGx5IGFmdGVyKQo+ID4gICB0aGUgc3VyZmFjZSByZWdp c3Rlcgo+ID4gLSB0aWxlb2ZmL2xpbm9mZi9vZmZzZXQvYXV4X29mZnNldCBhcmUgc2VsZi1hcm1p bmcgYXMgd2VsbCBzbyB3ZSB3YW50Cj4gPiAgIHRoZW0gY2xvc2UgdG8gdGhlIHN1cmZhY2UgcmVn aXN0ZXIgYXMgd2VsbAo+ID4gLSBjb2xvciBrZXlpbmcgcmVnaXN0ZXJzIHdlIG1heWJlIHNlbGYg YXJtaW5nIGJlZm9yZSBTS0wuIE5vdCAxMDAlCj4gPiAgIHN1cmUgYnV0IHdlIGNhbiB0cnkgdG8g a2VlcCB0aGVtIG5lYXIgdG8gdGhlIHN1cmZhY2UgcmVnaXN0ZXIKPiA+ICAgYXMgd2VsbAo+ID4g LSBjaHYgcGlwZSBiIGNzYyByZWdpc3RlciBhcmUgZG91YmxlIGJ1ZmZlcmVkIGJ1dCBzZWxmIGFy bWluZyBzbwo+ID4gICBtb3ZpbmcgdGhlbSBkb3duIGEgYml0Cj4gPiAtIHRoZSByZXN0IHNob3Vs ZCBiZSBtb3N0bHkgYXJtZWQgYnkgdGhlIHN1cmZhY2UgcmVnaXN0ZXIgc28gd2UgY2FuCj4gPiAg IHNhZmVseSB3cml0ZSB0aGVtIGZpcnN0LCBhbmQgdG8ganVzdCBmb3Igc29tZSBjb25zaXN0ZW5j eSBsZXQncyB0cnkKPiA+ICAgdG8gZm9sbG93IGtlZXAgdGhlbSBpbiBvcmRlciBiYXNlZCBvbiB0 aGUgcmVnaXN0ZXIgb2Zmc2V0Cj4gCj4gSW4gZ2VuZXJhbCB0aGVzZSBmdW5jdGlvbnMgYWxsIHJ1 biB1bmRlciB2YmxhbmsgZXZhc2lvbiBjdXJyZW50bHksIHNvCj4gdGhpcyB3b24ndCBoYXZlIGEg dmlzaWJsZSBlZmZlY3Qgb24gYXRvbWljaXR5IHVubGVzcyB3ZSBmYWlsIHRoZQo+IGV2YXNpb24s IHJpZ2h0PwoKWWVzLgoKPiBJcyB0aGUgbG9uZ2VyLXRlcm0gZ29hbCBoZXJlIHRvIGV2ZW50dWFs bHkgcHVsbCBhIGJ1bmNoCj4gb2YgdGhlIHJlZ2lzdGVyIHdyaXRpbmcgb3V0IGFuZCBvbmx5IGV2 YWRlIGFyb3VuZCB0aGUgYWN0dWFsIGFybWluZwo+IHJlZ2lzdGVycz8KClRoYXQgaGFzIGJlZW4g b24gbXkgbWluZCBvZmYgYW5kIG9uLiBCdXQgSSBoYXZlbid0IGFjdHVhbGx5Cm1lYXN1cmVkIGhv dyBtdWNoIHdlJ2QgZ2Fpbi4gU28gbm90IHN1cmUgaWYgaXQncyB3b3J0aCB0aGUgaGFzc2xlCmN1 cnJlbnRseS4gV2UgbWF5IG5lZWQgdG8gdGhpbmsgbXVjaCBoYXJkZXIgb24gdGhpcyB3aGVuIG91 ciBtbWlvCmJlY29tZXMgbW9yZSBleHBlbnNpdmUuLi4KCj4gCj4gPiAKPiA+IHYyOiBSZWJhc2Ug ZHVlIHRvIGlucHV0IENTQwo+ID4gCj4gPiBTaWduZWQtb2ZmLWJ5OiBWaWxsZSBTeXJqw6Rsw6Qg PHZpbGxlLnN5cmphbGFAbGludXguaW50ZWwuY29tPgo+ID4gLS0tCj4gPiAgZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jIHwgIDQwICsrKysrLS0tLQo+ID4gIGRyaXZlcnMvZ3B1 L2RybS9pOTE1L2ludGVsX3Nwcml0ZS5jICB8IDEyMCArKysrKysrKysrKysrKystLS0tLS0tLS0t LS0KPiA+ICAyIGZpbGVzIGNoYW5nZWQsIDg5IGluc2VydGlvbnMoKyksIDcxIGRlbGV0aW9ucygt KQo+ID4gCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxh eS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCj4gPiBpbmRleCBhZTZk NThkYmYxZWQuLmFjNDY0OTdjZmM1MiAxMDA2NDQKPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX2Rpc3BsYXkuYwo+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf ZGlzcGxheS5jCj4gPiBAQCAtMzMxMyw3ICszMzEzLDYgQEAgc3RhdGljIHZvaWQgaTl4eF91cGRh dGVfcGxhbmUoc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSwKPiA+ICAJZW51bSBpOXh4X3BsYW5l X2lkIGk5eHhfcGxhbmUgPSBwbGFuZS0+aTl4eF9wbGFuZTsKPiA+ICAJdTMyIGxpbmVhcl9vZmZz ZXQ7Cj4gPiAgCXUzMiBkc3BjbnRyID0gcGxhbmVfc3RhdGUtPmN0bDsKPiA+IC0JaTkxNV9yZWdf dCByZWcgPSBEU1BDTlRSKGk5eHhfcGxhbmUpOwo+ID4gIAlpbnQgeCA9IHBsYW5lX3N0YXRlLT5j b2xvcl9wbGFuZVswXS54Owo+ID4gIAlpbnQgeSA9IHBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVsw XS55Owo+ID4gIAl1bnNpZ25lZCBsb25nIGlycWZsYWdzOwo+ID4gQEAgLTMzMjgsNDEgKzMzMjcs NDUgQEAgc3RhdGljIHZvaWQgaTl4eF91cGRhdGVfcGxhbmUoc3RydWN0IGludGVsX3BsYW5lICpw bGFuZSwKPiA+ICAKPiA+ICAJc3Bpbl9sb2NrX2lycXNhdmUoJmRldl9wcml2LT51bmNvcmUubG9j aywgaXJxZmxhZ3MpOwo+ID4gIAo+ID4gKwlJOTE1X1dSSVRFX0ZXKERTUFNUUklERShpOXh4X3Bs YW5lKSwgcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lWzBdLnN0cmlkZSk7Cj4gPiArCj4gPiAgCWlm IChJTlRFTF9HRU4oZGV2X3ByaXYpIDwgNCkgewo+ID4gIAkJLyogcGlwZXNyYyBhbmQgZHNwc2l6 ZSBjb250cm9sIHRoZSBzaXplIHRoYXQgaXMgc2NhbGVkIGZyb20sCj4gPiAgCQkgKiB3aGljaCBz aG91bGQgYWx3YXlzIGJlIHRoZSB1c2VyJ3MgcmVxdWVzdGVkIHNpemUuCj4gPiAgCQkgKi8KPiA+ ICsJCUk5MTVfV1JJVEVfRlcoRFNQUE9TKGk5eHhfcGxhbmUpLCAwKTsKPiA+ICAJCUk5MTVfV1JJ VEVfRlcoRFNQU0laRShpOXh4X3BsYW5lKSwKPiA+ICAJCQkgICAgICAoKGNydGNfc3RhdGUtPnBp cGVfc3JjX2ggLSAxKSA8PCAxNikgfAo+ID4gIAkJCSAgICAgIChjcnRjX3N0YXRlLT5waXBlX3Ny Y193IC0gMSkpOwo+ID4gLQkJSTkxNV9XUklURV9GVyhEU1BQT1MoaTl4eF9wbGFuZSksIDApOwo+ ID4gIAl9IGVsc2UgaWYgKElTX0NIRVJSWVZJRVcoZGV2X3ByaXYpICYmIGk5eHhfcGxhbmUgPT0g UExBTkVfQikgewo+ID4gKwkJSTkxNV9XUklURV9GVyhQUklNUE9TKGk5eHhfcGxhbmUpLCAwKTsK PiA+ICAJCUk5MTVfV1JJVEVfRlcoUFJJTVNJWkUoaTl4eF9wbGFuZSksCj4gPiAgCQkJICAgICAg KChjcnRjX3N0YXRlLT5waXBlX3NyY19oIC0gMSkgPDwgMTYpIHwKPiA+ICAJCQkgICAgICAoY3J0 Y19zdGF0ZS0+cGlwZV9zcmNfdyAtIDEpKTsKPiA+IC0JCUk5MTVfV1JJVEVfRlcoUFJJTVBPUyhp OXh4X3BsYW5lKSwgMCk7Cj4gPiAgCQlJOTE1X1dSSVRFX0ZXKFBSSU1DTlNUQUxQSEEoaTl4eF9w bGFuZSksIDApOwo+ID4gIAl9Cj4gPiAgCj4gPiAtCUk5MTVfV1JJVEVfRlcocmVnLCBkc3BjbnRy KTsKPiA+IC0KPiA+IC0JSTkxNV9XUklURV9GVyhEU1BTVFJJREUoaTl4eF9wbGFuZSksIHBsYW5l X3N0YXRlLT5jb2xvcl9wbGFuZVswXS5zdHJpZGUpOwo+ID4gIAlpZiAoSVNfSEFTV0VMTChkZXZf cHJpdikgfHwgSVNfQlJPQURXRUxMKGRldl9wcml2KSkgewo+ID4gLQkJSTkxNV9XUklURV9GVyhE U1BTVVJGKGk5eHhfcGxhbmUpLAo+ID4gLQkJCSAgICAgIGludGVsX3BsYW5lX2dndHRfb2Zmc2V0 KHBsYW5lX3N0YXRlKSArCj4gPiAtCQkJICAgICAgZHNwYWRkcl9vZmZzZXQpOwo+ID4gIAkJSTkx NV9XUklURV9GVyhEU1BPRkZTRVQoaTl4eF9wbGFuZSksICh5IDw8IDE2KSB8IHgpOwo+ID4gIAl9 IGVsc2UgaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gNCkgewo+ID4gKwkJSTkxNV9XUklURV9G VyhEU1BUSUxFT0ZGKGk5eHhfcGxhbmUpLCAoeSA8PCAxNikgfCB4KTsKPiA+ICsJCUk5MTVfV1JJ VEVfRlcoRFNQTElOT0ZGKGk5eHhfcGxhbmUpLCBsaW5lYXJfb2Zmc2V0KTsKPiA+ICsJfQo+ID4g Kwo+ID4gKwkvKgo+ID4gKwkgKiBUaGUgY29udHJvbCByZWdpc3RlciBzZWxmLWFybXMgaWYgdGhl IHBsYW5lIHdhcyBwcmV2aW91c2x5Cj4gPiArCSAqIGRpc2FibGVkLiBUcnkgdG8gbWFrZSB0aGUg cGxhbmUgZW5hYmxlIGF0b21pYyBieSB3cml0aW5nCj4gPiArCSAqIHRoZSBjb250cm9sIHJlZ2lz dGVyIGp1c3QgYmVmb3JlIHRoZSBzdXJmYWNlIHJlZ2lzdGVyLgo+ID4gKwkgKi8KPiA+ICsJSTkx NV9XUklURV9GVyhEU1BDTlRSKGk5eHhfcGxhbmUpLCBkc3BjbnRyKTsKPiA+ICsJaWYgKElOVEVM X0dFTihkZXZfcHJpdikgPj0gNCkKPiA+ICAJCUk5MTVfV1JJVEVfRlcoRFNQU1VSRihpOXh4X3Bs YW5lKSwKPiA+ICAJCQkgICAgICBpbnRlbF9wbGFuZV9nZ3R0X29mZnNldChwbGFuZV9zdGF0ZSkg Kwo+ID4gIAkJCSAgICAgIGRzcGFkZHJfb2Zmc2V0KTsKPiA+IC0JCUk5MTVfV1JJVEVfRlcoRFNQ VElMRU9GRihpOXh4X3BsYW5lKSwgKHkgPDwgMTYpIHwgeCk7Cj4gPiAtCQlJOTE1X1dSSVRFX0ZX KERTUExJTk9GRihpOXh4X3BsYW5lKSwgbGluZWFyX29mZnNldCk7Cj4gPiAtCX0gZWxzZSB7Cj4g PiArCWVsc2UKPiA+ICAJCUk5MTVfV1JJVEVfRlcoRFNQQUREUihpOXh4X3BsYW5lKSwKPiA+ICAJ CQkgICAgICBpbnRlbF9wbGFuZV9nZ3R0X29mZnNldChwbGFuZV9zdGF0ZSkgKwo+ID4gIAkJCSAg ICAgIGRzcGFkZHJfb2Zmc2V0KTsKPiA+IC0JfQo+ID4gIAo+ID4gIAlzcGluX3VubG9ja19pcnFy ZXN0b3JlKCZkZXZfcHJpdi0+dW5jb3JlLmxvY2ssIGlycWZsYWdzKTsKPiA+ICB9Cj4gPiBAQCAt MTAwMTMsOCArMTAwMTYsOCBAQCBzdGF0aWMgdm9pZCBpOXh4X3VwZGF0ZV9jdXJzb3Ioc3RydWN0 IGludGVsX3BsYW5lICpwbGFuZSwKPiA+ICAJICogT24gc29tZSBwbGF0Zm9ybXMgd3JpdGluZyBD VVJDTlRSIGZpcnN0IHdpbGwgYWxzbwo+ID4gIAkgKiBjYXVzZSBDVVJQT1MgdG8gYmUgYXJtZWQg YnkgdGhlIENVUkJBU0Ugd3JpdGUuCj4gPiAgCSAqIFdpdGhvdXQgdGhlIENVUkNOVFIgd3JpdGUg dGhlIENVUlBPUyB3cml0ZSB3b3VsZAo+ID4gLQkgKiBhcm0gaXRzZWxmLiBUaHVzIHdlIGFsd2F5 cyBzdGFydCB0aGUgZnVsbCB1cGRhdGUKPiA+IC0JICogd2l0aCBhIENVUkNOVFIgd3JpdGUuCj4g PiArCSAqIGFybSBpdHNlbGYuIFRodXMgd2UgYWx3YXlzIHVwZGF0ZSBDVVJDTlRSIGJlZm9yZQo+ ID4gKwkgKiBDVVJQT1MuCj4gPiAgCSAqCj4gPiAgCSAqIE9uIG90aGVyIHBsYXRmb3JtcyBDVVJQ T1MgYWx3YXlzIHJlcXVpcmVzIHRoZQo+ID4gIAkgKiBDVVJCQVNFIHdyaXRlIHRvIGFybSB0aGUg dXBkYXRlLiBBZGRpdG9uYWxseQo+ID4gQEAgLTEwMDI0LDE1ICsxMDAyNywxNiBAQCBzdGF0aWMg dm9pZCBpOXh4X3VwZGF0ZV9jdXJzb3Ioc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSwKPiA+ICAJ ICogY3Vyc29yIHRoYXQgZG9lc24ndCBhcHBlYXIgdG8gbW92ZSwgb3IgZXZlbiBjaGFuZ2UKPiA+ ICAJICogc2hhcGUuIFRodXMgd2UgYWx3YXlzIHdyaXRlIENVUkJBU0UuCj4gPiAgCSAqCj4gPiAt CSAqIENVUkNOVFIgYW5kIENVUl9GQkNfQ1RMIGFyZSBhbHdheXMKPiA+IC0JICogYXJtZWQgYnkg dGhlIENVUkJBU0Ugd3JpdGUgb25seS4KPiA+ICsJICogVGhlIG90aGVyIHJlZ2lzdGVycyBhcmUg YXJtZWQgYnkgYnkgdGhlIENVUkJBU0Ugd3JpdGUKPiA+ICsJICogZXhjZXB0IHdoZW4gdGhlIHBs YW5lIGlzIGdldHRpbmcgZW5hYmxlZCBhdCB3aGljaCB0aW1lCj4gPiArCSAqIHRoZSBDVVJDTlRS IHdyaXRlIGFybXMgdGhlIHVwZGF0ZS4KPiA+ICAJICovCj4gPiAgCWlmIChwbGFuZS0+Y3Vyc29y LmJhc2UgIT0gYmFzZSB8fAo+ID4gIAkgICAgcGxhbmUtPmN1cnNvci5zaXplICE9IGZiY19jdGwg fHwKPiA+ICAJICAgIHBsYW5lLT5jdXJzb3IuY250bCAhPSBjbnRsKSB7Cj4gPiAtCQlJOTE1X1dS SVRFX0ZXKENVUkNOVFIocGlwZSksIGNudGwpOwo+ID4gIAkJaWYgKEhBU19DVVJfRkJDKGRldl9w cml2KSkKPiA+ICAJCQlJOTE1X1dSSVRFX0ZXKENVUl9GQkNfQ1RMKHBpcGUpLCBmYmNfY3RsKTsK PiA+ICsJCUk5MTVfV1JJVEVfRlcoQ1VSQ05UUihwaXBlKSwgY250bCk7Cj4gPiAgCQlJOTE1X1dS SVRFX0ZXKENVUlBPUyhwaXBlKSwgcG9zKTsKPiA+ICAJCUk5MTVfV1JJVEVfRlcoQ1VSQkFTRShw aXBlKSwgYmFzZSk7Cj4gPiAgCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv aW50ZWxfc3ByaXRlLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9zcHJpdGUuYwo+ID4g aW5kZXggZmFjZjdjYThmMTRmLi5iZTZlM2MzZGUxZmYgMTAwNjQ0Cj4gPiAtLS0gYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF9zcHJpdGUuYwo+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaW50ZWxfc3ByaXRlLmMKPiA+IEBAIC01MDAsMjcgKzUwMCwxMiBAQCBza2xfcHJvZ3JhbV9w bGFuZShzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lLAo+ID4gIAo+ID4gIAlzcGluX2xvY2tfaXJx c2F2ZSgmZGV2X3ByaXYtPnVuY29yZS5sb2NrLCBpcnFmbGFncyk7Cj4gPiAgCj4gPiAtCWlmIChJ TlRFTF9HRU4oZGV2X3ByaXYpID49IDEwIHx8IElTX0dFTUlOSUxBS0UoZGV2X3ByaXYpKQo+ID4g LQkJSTkxNV9XUklURV9GVyhQTEFORV9DT0xPUl9DVEwocGlwZSwgcGxhbmVfaWQpLAo+ID4gLQkJ CSAgICAgIHBsYW5lX3N0YXRlLT5jb2xvcl9jdGwpOwo+ID4gLQo+ID4gLQlpZiAoZmItPmZvcm1h dC0+aXNfeXV2ICYmIGljbF9pc19oZHJfcGxhbmUocGxhbmUpKQo+ID4gLQkJaWNsX3Byb2dyYW1f aW5wdXRfY3NjX2NvZWZmKGNydGNfc3RhdGUsIHBsYW5lX3N0YXRlKTsKPiA+IC0KPiA+IC0JSTkx NV9XUklURV9GVyhQTEFORV9LRVlWQUwocGlwZSwgcGxhbmVfaWQpLCBrZXktPm1pbl92YWx1ZSk7 Cj4gPiAtCUk5MTVfV1JJVEVfRlcoUExBTkVfS0VZTUFYKHBpcGUsIHBsYW5lX2lkKSwga2V5bWF4 KTsKPiA+IC0JSTkxNV9XUklURV9GVyhQTEFORV9LRVlNU0socGlwZSwgcGxhbmVfaWQpLCBrZXlt c2spOwo+ID4gLQo+ID4gLQlJOTE1X1dSSVRFX0ZXKFBMQU5FX09GRlNFVChwaXBlLCBwbGFuZV9p ZCksICh5IDw8IDE2KSB8IHgpOwo+ID4gIAlJOTE1X1dSSVRFX0ZXKFBMQU5FX1NUUklERShwaXBl LCBwbGFuZV9pZCksIHN0cmlkZSk7Cj4gPiArCUk5MTVfV1JJVEVfRlcoUExBTkVfUE9TKHBpcGUs IHBsYW5lX2lkKSwgKGNydGNfeSA8PCAxNikgfCBjcnRjX3gpOwo+ID4gIAlJOTE1X1dSSVRFX0ZX KFBMQU5FX1NJWkUocGlwZSwgcGxhbmVfaWQpLCAoc3JjX2ggPDwgMTYpIHwgc3JjX3cpOwo+ID4g IAlJOTE1X1dSSVRFX0ZXKFBMQU5FX0FVWF9ESVNUKHBpcGUsIHBsYW5lX2lkKSwKPiA+IC0JCSAg ICAgIChwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbMV0ub2Zmc2V0IC0gc3VyZl9hZGRyKSB8IGF1 eF9zdHJpZGUpOwo+ID4gLQo+ID4gLQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA8IDExKQo+ID4g LQkJSTkxNV9XUklURV9GVyhQTEFORV9BVVhfT0ZGU0VUKHBpcGUsIHBsYW5lX2lkKSwKPiA+IC0J CQkgICAgICAocGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lWzFdLnkgPDwgMTYpIHwKPiA+IC0JCQkg ICAgICAgcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lWzFdLngpOwo+ID4gKwkJICAgICAgKHBsYW5l X3N0YXRlLT5jb2xvcl9wbGFuZVsxXS5vZmZzZXQgLSBzdXJmX2FkZHIpIHwKPiA+ICsJCSAgICAg IGF1eF9zdHJpZGUpOwo+ID4gIAo+ID4gIAlpZiAoaWNsX2lzX2hkcl9wbGFuZShwbGFuZSkpIHsK PiA+ICAJCXUzMiBjdXNfY3RsID0gMDsKPiA+IEBAIC01NDMsMTUgKzUyOCwzNiBAQCBza2xfcHJv Z3JhbV9wbGFuZShzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lLAo+ID4gIAkJSTkxNV9XUklURV9G VyhQTEFORV9DVVNfQ1RMKHBpcGUsIHBsYW5lX2lkKSwgY3VzX2N0bCk7Cj4gPiAgCX0KPiA+ICAK PiA+IC0JaWYgKCFzbGF2ZSAmJiBwbGFuZV9zdGF0ZS0+c2NhbGVyX2lkID49IDApCj4gPiAtCQlz a2xfcHJvZ3JhbV9zY2FsZXIocGxhbmUsIGNydGNfc3RhdGUsIHBsYW5lX3N0YXRlKTsKPiA+ICsJ aWYgKElOVEVMX0dFTihkZXZfcHJpdikgPj0gMTAgfHwgSVNfR0VNSU5JTEFLRShkZXZfcHJpdikp Cj4gPiArCQlJOTE1X1dSSVRFX0ZXKFBMQU5FX0NPTE9SX0NUTChwaXBlLCBwbGFuZV9pZCksCj4g PiArCQkJICAgICAgcGxhbmVfc3RhdGUtPmNvbG9yX2N0bCk7Cj4gPiAgCj4gPiAtCUk5MTVfV1JJ VEVfRlcoUExBTkVfUE9TKHBpcGUsIHBsYW5lX2lkKSwgKGNydGNfeSA8PCAxNikgfCBjcnRjX3gp Owo+ID4gKwlpZiAoZmItPmZvcm1hdC0+aXNfeXV2ICYmIGljbF9pc19oZHJfcGxhbmUocGxhbmUp KQo+ID4gKwkJaWNsX3Byb2dyYW1faW5wdXRfY3NjX2NvZWZmKGNydGNfc3RhdGUsIHBsYW5lX3N0 YXRlKTsKPiA+ICsKPiA+ICsJSTkxNV9XUklURV9GVyhQTEFORV9LRVlWQUwocGlwZSwgcGxhbmVf aWQpLCBrZXktPm1pbl92YWx1ZSk7Cj4gPiArCUk5MTVfV1JJVEVfRlcoUExBTkVfS0VZTUFYKHBp cGUsIHBsYW5lX2lkKSwga2V5bWF4KTsKPiA+ICsJSTkxNV9XUklURV9GVyhQTEFORV9LRVlNU0so cGlwZSwgcGxhbmVfaWQpLCBrZXltc2spOwo+IAo+IFlvdSBtZW50aW9uZWQgYWJvdmUgdGhhdCB5 b3Ugd2FudGVkIHRvIGZvbGxvdyByZWdpc3RlciBvZmZzZXQgb3JkZXJpbmcKPiB3aGVyZSBwb3Nz aWJsZSwgc28gSSBiZWxpZXZlIE1TSyBzaG91bGQgY29tZSBiZWZvcmUgTUFYIGhlcmUuICBTYW1l Cj4gY29tbWVudCBmb3IgdGhlIHZsdiBhbmQgZzR4IGZ1bmN0aW9ucyBmYXJ0aGVyIGRvd24uCj4g Cj4gPiArCj4gPiArCUk5MTVfV1JJVEVfRlcoUExBTkVfT0ZGU0VUKHBpcGUsIHBsYW5lX2lkKSwg KHkgPDwgMTYpIHwgeCk7Cj4gPiArCj4gPiArCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpIDwgMTEp Cj4gPiArCQlJOTE1X1dSSVRFX0ZXKFBMQU5FX0FVWF9PRkZTRVQocGlwZSwgcGxhbmVfaWQpLAo+ ID4gKwkJCSAgICAgIChwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbMV0ueSA8PCAxNikgfAo+ID4g KwkJCSAgICAgIHBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVsxXS54KTsKPiA+ICAKPiA+ICsJLyoK PiA+ICsJICogVGhlIGNvbnRyb2wgcmVnaXN0ZXIgc2VsZi1hcm1zIGlmIHRoZSBwbGFuZSB3YXMg cHJldmlvdXNseQo+ID4gKwkgKiBkaXNhYmxlZC4gVHJ5IHRvIG1ha2UgdGhlIHBsYW5lIGVuYWJs ZSBhdG9taWMgYnkgd3JpdGluZwo+ID4gKwkgKiB0aGUgY29udHJvbCByZWdpc3RlciBqdXN0IGJl Zm9yZSB0aGUgc3VyZmFjZSByZWdpc3Rlci4KPiA+ICsJICovCj4gPiAgCUk5MTVfV1JJVEVfRlco UExBTkVfQ1RMKHBpcGUsIHBsYW5lX2lkKSwgcGxhbmVfY3RsKTsKPiA+ICAJSTkxNV9XUklURV9G VyhQTEFORV9TVVJGKHBpcGUsIHBsYW5lX2lkKSwKPiA+ICAJCSAgICAgIGludGVsX3BsYW5lX2dn dHRfb2Zmc2V0KHBsYW5lX3N0YXRlKSArIHN1cmZfYWRkcik7Cj4gPiAgCj4gPiArCWlmICghc2xh dmUgJiYgcGxhbmVfc3RhdGUtPnNjYWxlcl9pZCA+PSAwKQo+ID4gKwkJc2tsX3Byb2dyYW1fc2Nh bGVyKHBsYW5lLCBjcnRjX3N0YXRlLCBwbGFuZV9zdGF0ZSk7Cj4gPiArCj4gPiAgCXNwaW5fdW5s b2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT51bmNvcmUubG9jaywgaXJxZmxhZ3MpOwo+ID4gIH0K PiA+ICAKPiA+IEBAIC03ODksNyArNzk1LDYgQEAgdmx2X3VwZGF0ZV9wbGFuZShzdHJ1Y3QgaW50 ZWxfcGxhbmUgKnBsYW5lLAo+ID4gIAkJIGNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAq cGxhbmVfc3RhdGUpCj4gPiAgewo+ID4gIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYgPSB0b19pOTE1KHBsYW5lLT5iYXNlLmRldik7Cj4gPiAtCWNvbnN0IHN0cnVjdCBkcm1fZnJh bWVidWZmZXIgKmZiID0gcGxhbmVfc3RhdGUtPmJhc2UuZmI7Cj4gPiAgCWVudW0gcGlwZSBwaXBl ID0gcGxhbmUtPnBpcGU7Cj4gPiAgCWVudW0gcGxhbmVfaWQgcGxhbmVfaWQgPSBwbGFuZS0+aWQ7 Cj4gPiAgCXUzMiBzcHJjdGwgPSBwbGFuZV9zdGF0ZS0+Y3RsOwo+ID4gQEAgLTgxNCw2ICs4MTks MTIgQEAgdmx2X3VwZGF0ZV9wbGFuZShzdHJ1Y3QgaW50ZWxfcGxhbmUgKnBsYW5lLAo+ID4gIAo+ ID4gIAl2bHZfdXBkYXRlX2NscmMocGxhbmVfc3RhdGUpOwo+ID4gIAo+ID4gKwlJOTE1X1dSSVRF X0ZXKFNQU1RSSURFKHBpcGUsIHBsYW5lX2lkKSwKPiA+ICsJCSAgICAgIHBsYW5lX3N0YXRlLT5j b2xvcl9wbGFuZVswXS5zdHJpZGUpOwo+ID4gKwlJOTE1X1dSSVRFX0ZXKFNQUE9TKHBpcGUsIHBs YW5lX2lkKSwgKGNydGNfeSA8PCAxNikgfCBjcnRjX3gpOwo+ID4gKwlJOTE1X1dSSVRFX0ZXKFNQ U0laRShwaXBlLCBwbGFuZV9pZCksIChjcnRjX2ggPDwgMTYpIHwgY3J0Y193KTsKPiA+ICsJSTkx NV9XUklURV9GVyhTUENPTlNUQUxQSEEocGlwZSwgcGxhbmVfaWQpLCAwKTsKPiA+ICsKPiA+ICAJ aWYgKElTX0NIRVJSWVZJRVcoZGV2X3ByaXYpICYmIHBpcGUgPT0gUElQRV9CKQo+ID4gIAkJY2h2 X3VwZGF0ZV9jc2MocGxhbmVfc3RhdGUpOwo+ID4gIAo+ID4gQEAgLTgyMiwxOCArODMzLDE1IEBA IHZsdl91cGRhdGVfcGxhbmUoc3RydWN0IGludGVsX3BsYW5lICpwbGFuZSwKPiA+ICAJCUk5MTVf V1JJVEVfRlcoU1BLRVlNQVhWQUwocGlwZSwgcGxhbmVfaWQpLCBrZXktPm1heF92YWx1ZSk7Cj4g PiAgCQlJOTE1X1dSSVRFX0ZXKFNQS0VZTVNLKHBpcGUsIHBsYW5lX2lkKSwga2V5LT5jaGFubmVs X21hc2spOwo+ID4gIAl9Cj4gPiAtCUk5MTVfV1JJVEVfRlcoU1BTVFJJREUocGlwZSwgcGxhbmVf aWQpLAo+ID4gLQkJICAgICAgcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lWzBdLnN0cmlkZSk7Cj4g PiAtCUk5MTVfV1JJVEVfRlcoU1BQT1MocGlwZSwgcGxhbmVfaWQpLCAoY3J0Y195IDw8IDE2KSB8 IGNydGNfeCk7Cj4gPiAtCj4gPiAtCWlmIChmYi0+bW9kaWZpZXIgPT0gSTkxNV9GT1JNQVRfTU9E X1hfVElMRUQpCj4gPiAtCQlJOTE1X1dSSVRFX0ZXKFNQVElMRU9GRihwaXBlLCBwbGFuZV9pZCks ICh5IDw8IDE2KSB8IHgpOwo+ID4gLQllbHNlCj4gPiAtCQlJOTE1X1dSSVRFX0ZXKFNQTElOT0ZG KHBpcGUsIHBsYW5lX2lkKSwgbGluZWFyX29mZnNldCk7Cj4gPiAgCj4gPiAtCUk5MTVfV1JJVEVf RlcoU1BDT05TVEFMUEhBKHBpcGUsIHBsYW5lX2lkKSwgMCk7Cj4gPiArCUk5MTVfV1JJVEVfRlco U1BUSUxFT0ZGKHBpcGUsIHBsYW5lX2lkKSwgKHkgPDwgMTYpIHwgeCk7Cj4gPiArCUk5MTVfV1JJ VEVfRlcoU1BMSU5PRkYocGlwZSwgcGxhbmVfaWQpLCBsaW5lYXJfb2Zmc2V0KTsKPiAKPiBJIHRo aW5rIHlvdSBhbHJlYWR5IGluZGljYXRlZCB5b3Ugd2VyZSBnb2luZyB0byBwdWxsIHRoZSAiaWdu b3JlIHRpbGluZwo+IGFuZCBqdXN0IHdyaXRlIGJvdGggb2Zmc2V0IHJlZ2lzdGVycyIgb3V0IGlu dG8gYSBzZXBhcmF0ZSBwYXRjaCwgYnV0Cj4gdGhlc2UgYXJlIGFub3RoZXIgY2FzZSB3aGVyZSB5 b3UgbWlnaHQgd2FudCB0byBmbGlwIHRoZSBvcmRlciB0byBtYXRjaAo+IHJlZ2lzdGVyIG9mZnNl dCAobGluZWFyIDwgdGlsZWQpLgoKU3VyZS4gSXQgbG9va3MgbGlrZSBteSBvY2Qgd2Fzbid0IHF1 aXRlIHN0cm9uZyBlbm91Z2ggdG8gZm9sbG93Cm15IG93biBydWxlIDEwMCUgOikKCj4gCj4gCj4g TWF0dAo+IAo+ID4gIAo+ID4gLQlJOTE1X1dSSVRFX0ZXKFNQU0laRShwaXBlLCBwbGFuZV9pZCks IChjcnRjX2ggPDwgMTYpIHwgY3J0Y193KTsKPiA+ICsJLyoKPiA+ICsJICogVGhlIGNvbnRyb2wg cmVnaXN0ZXIgc2VsZi1hcm1zIGlmIHRoZSBwbGFuZSB3YXMgcHJldmlvdXNseQo+ID4gKwkgKiBk aXNhYmxlZC4gVHJ5IHRvIG1ha2UgdGhlIHBsYW5lIGVuYWJsZSBhdG9taWMgYnkgd3JpdGluZwo+ ID4gKwkgKiB0aGUgY29udHJvbCByZWdpc3RlciBqdXN0IGJlZm9yZSB0aGUgc3VyZmFjZSByZWdp c3Rlci4KPiA+ICsJICovCj4gPiAgCUk5MTVfV1JJVEVfRlcoU1BDTlRSKHBpcGUsIHBsYW5lX2lk KSwgc3ByY3RsKTsKPiA+ICAJSTkxNV9XUklURV9GVyhTUFNVUkYocGlwZSwgcGxhbmVfaWQpLAo+ ID4gIAkJICAgICAgaW50ZWxfcGxhbmVfZ2d0dF9vZmZzZXQocGxhbmVfc3RhdGUpICsgc3Byc3Vy Zl9vZmZzZXQpOwo+ID4gQEAgLTk0Nyw3ICs5NTUsNiBAQCBpdmJfdXBkYXRlX3BsYW5lKHN0cnVj dCBpbnRlbF9wbGFuZSAqcGxhbmUsCj4gPiAgCQkgY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0 YXRlICpwbGFuZV9zdGF0ZSkKPiA+ICB7Cj4gPiAgCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdiA9IHRvX2k5MTUocGxhbmUtPmJhc2UuZGV2KTsKPiA+IC0JY29uc3Qgc3RydWN0IGRy bV9mcmFtZWJ1ZmZlciAqZmIgPSBwbGFuZV9zdGF0ZS0+YmFzZS5mYjsKPiA+ICAJZW51bSBwaXBl IHBpcGUgPSBwbGFuZS0+cGlwZTsKPiA+ICAJdTMyIHNwcmN0bCA9IHBsYW5lX3N0YXRlLT5jdGws IHNwcnNjYWxlID0gMDsKPiA+ICAJdTMyIHNwcnN1cmZfb2Zmc2V0ID0gcGxhbmVfc3RhdGUtPmNv bG9yX3BsYW5lWzBdLm9mZnNldDsKPiA+IEBAIC05NzYsMjcgKzk4MywzMiBAQCBpdmJfdXBkYXRl X3BsYW5lKHN0cnVjdCBpbnRlbF9wbGFuZSAqcGxhbmUsCj4gPiAgCj4gPiAgCXNwaW5fbG9ja19p cnFzYXZlKCZkZXZfcHJpdi0+dW5jb3JlLmxvY2ssIGlycWZsYWdzKTsKPiA+ICAKPiA+ICsJSTkx NV9XUklURV9GVyhTUFJTVFJJREUocGlwZSksIHBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVswXS5z dHJpZGUpOwo+ID4gKwlJOTE1X1dSSVRFX0ZXKFNQUlBPUyhwaXBlKSwgKGNydGNfeSA8PCAxNikg fCBjcnRjX3gpOwo+ID4gKwlJOTE1X1dSSVRFX0ZXKFNQUlNJWkUocGlwZSksIChjcnRjX2ggPDwg MTYpIHwgY3J0Y193KTsKPiA+ICsJaWYgKElTX0lWWUJSSURHRShkZXZfcHJpdikpCj4gPiArCQlJ OTE1X1dSSVRFX0ZXKFNQUlNDQUxFKHBpcGUpLCBzcHJzY2FsZSk7Cj4gPiArCj4gPiAgCWlmIChr ZXktPmZsYWdzKSB7Cj4gPiAgCQlJOTE1X1dSSVRFX0ZXKFNQUktFWVZBTChwaXBlKSwga2V5LT5t aW5fdmFsdWUpOwo+ID4gIAkJSTkxNV9XUklURV9GVyhTUFJLRVlNQVgocGlwZSksIGtleS0+bWF4 X3ZhbHVlKTsKPiA+ICAJCUk5MTVfV1JJVEVfRlcoU1BSS0VZTVNLKHBpcGUpLCBrZXktPmNoYW5u ZWxfbWFzayk7Cj4gPiAgCX0KPiA+ICAKPiA+IC0JSTkxNV9XUklURV9GVyhTUFJTVFJJREUocGlw ZSksIHBsYW5lX3N0YXRlLT5jb2xvcl9wbGFuZVswXS5zdHJpZGUpOwo+ID4gLQlJOTE1X1dSSVRF X0ZXKFNQUlBPUyhwaXBlKSwgKGNydGNfeSA8PCAxNikgfCBjcnRjX3gpOwo+ID4gLQo+ID4gIAkv KiBIU1cgY29uc29saWRhdGVzIFNQUlRJTEVPRkYgYW5kIFNQUkxJTk9GRiBpbnRvIGEgc2luZ2xl IFNQUk9GRlNFVAo+ID4gIAkgKiByZWdpc3RlciAqLwo+ID4gLQlpZiAoSVNfSEFTV0VMTChkZXZf cHJpdikgfHwgSVNfQlJPQURXRUxMKGRldl9wcml2KSkKPiA+ICsJaWYgKElTX0hBU1dFTEwoZGV2 X3ByaXYpIHx8IElTX0JST0FEV0VMTChkZXZfcHJpdikpIHsKPiA+ICAJCUk5MTVfV1JJVEVfRlco U1BST0ZGU0VUKHBpcGUpLCAoeSA8PCAxNikgfCB4KTsKPiA+IC0JZWxzZSBpZiAoZmItPm1vZGlm aWVyID09IEk5MTVfRk9STUFUX01PRF9YX1RJTEVEKQo+ID4gKwl9IGVsc2Ugewo+ID4gIAkJSTkx NV9XUklURV9GVyhTUFJUSUxFT0ZGKHBpcGUpLCAoeSA8PCAxNikgfCB4KTsKPiA+IC0JZWxzZQo+ ID4gIAkJSTkxNV9XUklURV9GVyhTUFJMSU5PRkYocGlwZSksIGxpbmVhcl9vZmZzZXQpOwo+ID4g Kwl9Cj4gPiAgCj4gPiAtCUk5MTVfV1JJVEVfRlcoU1BSU0laRShwaXBlKSwgKGNydGNfaCA8PCAx NikgfCBjcnRjX3cpOwo+ID4gLQlpZiAoSVNfSVZZQlJJREdFKGRldl9wcml2KSkKPiA+IC0JCUk5 MTVfV1JJVEVfRlcoU1BSU0NBTEUocGlwZSksIHNwcnNjYWxlKTsKPiA+ICsJLyoKPiA+ICsJICog VGhlIGNvbnRyb2wgcmVnaXN0ZXIgc2VsZi1hcm1zIGlmIHRoZSBwbGFuZSB3YXMgcHJldmlvdXNs eQo+ID4gKwkgKiBkaXNhYmxlZC4gVHJ5IHRvIG1ha2UgdGhlIHBsYW5lIGVuYWJsZSBhdG9taWMg Ynkgd3JpdGluZwo+ID4gKwkgKiB0aGUgY29udHJvbCByZWdpc3RlciBqdXN0IGJlZm9yZSB0aGUg c3VyZmFjZSByZWdpc3Rlci4KPiA+ICsJICovCj4gPiAgCUk5MTVfV1JJVEVfRlcoU1BSQ1RMKHBp cGUpLCBzcHJjdGwpOwo+ID4gIAlJOTE1X1dSSVRFX0ZXKFNQUlNVUkYocGlwZSksCj4gPiAgCQkg ICAgICBpbnRlbF9wbGFuZV9nZ3R0X29mZnNldChwbGFuZV9zdGF0ZSkgKyBzcHJzdXJmX29mZnNl dCk7Cj4gPiBAQCAtMTAxNCw3ICsxMDI2LDcgQEAgaXZiX2Rpc2FibGVfcGxhbmUoc3RydWN0IGlu dGVsX3BsYW5lICpwbGFuZSwgc3RydWN0IGludGVsX2NydGMgKmNydGMpCj4gPiAgCXNwaW5fbG9j a19pcnFzYXZlKCZkZXZfcHJpdi0+dW5jb3JlLmxvY2ssIGlycWZsYWdzKTsKPiA+ICAKPiA+ICAJ STkxNV9XUklURV9GVyhTUFJDVEwocGlwZSksIDApOwo+ID4gLQkvKiBDYW4ndCBsZWF2ZSB0aGUg c2NhbGVyIGVuYWJsZWQuLi4gKi8KPiA+ICsJLyogRGlzYWJsZSB0aGUgc2NhbGVyICovCj4gPiAg CWlmIChJU19JVllCUklER0UoZGV2X3ByaXYpKQo+ID4gIAkJSTkxNV9XUklURV9GVyhTUFJTQ0FM RShwaXBlKSwgMCk7Cj4gPiAgCUk5MTVfV1JJVEVfRlcoU1BSU1VSRihwaXBlKSwgMCk7Cj4gPiBA QCAtMTExNiw3ICsxMTI4LDYgQEAgZzR4X3VwZGF0ZV9wbGFuZShzdHJ1Y3QgaW50ZWxfcGxhbmUg KnBsYW5lLAo+ID4gIAkJIGNvbnN0IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxhbmVfc3Rh dGUpCj4gPiAgewo+ID4gIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19p OTE1KHBsYW5lLT5iYXNlLmRldik7Cj4gPiAtCWNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXIg KmZiID0gcGxhbmVfc3RhdGUtPmJhc2UuZmI7Cj4gPiAgCWVudW0gcGlwZSBwaXBlID0gcGxhbmUt PnBpcGU7Cj4gPiAgCXUzMiBkdnNjbnRyID0gcGxhbmVfc3RhdGUtPmN0bCwgZHZzc2NhbGUgPSAw Owo+ID4gIAl1MzIgZHZzc3VyZl9vZmZzZXQgPSBwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbMF0u b2Zmc2V0Owo+ID4gQEAgLTExNDUsMjIgKzExNTYsMjUgQEAgZzR4X3VwZGF0ZV9wbGFuZShzdHJ1 Y3QgaW50ZWxfcGxhbmUgKnBsYW5lLAo+ID4gIAo+ID4gIAlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2 X3ByaXYtPnVuY29yZS5sb2NrLCBpcnFmbGFncyk7Cj4gPiAgCj4gPiArCUk5MTVfV1JJVEVfRlco RFZTU1RSSURFKHBpcGUpLCBwbGFuZV9zdGF0ZS0+Y29sb3JfcGxhbmVbMF0uc3RyaWRlKTsKPiA+ ICsJSTkxNV9XUklURV9GVyhEVlNQT1MocGlwZSksIChjcnRjX3kgPDwgMTYpIHwgY3J0Y194KTsK PiA+ICsJSTkxNV9XUklURV9GVyhEVlNTSVpFKHBpcGUpLCAoY3J0Y19oIDw8IDE2KSB8IGNydGNf dyk7Cj4gPiArCUk5MTVfV1JJVEVfRlcoRFZTU0NBTEUocGlwZSksIGR2c3NjYWxlKTsKPiA+ICsK PiA+ICAJaWYgKGtleS0+ZmxhZ3MpIHsKPiA+ICAJCUk5MTVfV1JJVEVfRlcoRFZTS0VZVkFMKHBp cGUpLCBrZXktPm1pbl92YWx1ZSk7Cj4gPiAgCQlJOTE1X1dSSVRFX0ZXKERWU0tFWU1BWChwaXBl KSwga2V5LT5tYXhfdmFsdWUpOwo+ID4gIAkJSTkxNV9XUklURV9GVyhEVlNLRVlNU0socGlwZSks IGtleS0+Y2hhbm5lbF9tYXNrKTsKPiA+ICAJfQo+ID4gIAo+ID4gLQlJOTE1X1dSSVRFX0ZXKERW U1NUUklERShwaXBlKSwgcGxhbmVfc3RhdGUtPmNvbG9yX3BsYW5lWzBdLnN0cmlkZSk7Cj4gPiAt CUk5MTVfV1JJVEVfRlcoRFZTUE9TKHBpcGUpLCAoY3J0Y195IDw8IDE2KSB8IGNydGNfeCk7Cj4g PiArCUk5MTVfV1JJVEVfRlcoRFZTVElMRU9GRihwaXBlKSwgKHkgPDwgMTYpIHwgeCk7Cj4gPiAr CUk5MTVfV1JJVEVfRlcoRFZTTElOT0ZGKHBpcGUpLCBsaW5lYXJfb2Zmc2V0KTsKPiA+ICAKPiA+ IC0JaWYgKGZiLT5tb2RpZmllciA9PSBJOTE1X0ZPUk1BVF9NT0RfWF9USUxFRCkKPiA+IC0JCUk5 MTVfV1JJVEVfRlcoRFZTVElMRU9GRihwaXBlKSwgKHkgPDwgMTYpIHwgeCk7Cj4gPiAtCWVsc2UK PiA+IC0JCUk5MTVfV1JJVEVfRlcoRFZTTElOT0ZGKHBpcGUpLCBsaW5lYXJfb2Zmc2V0KTsKPiA+ IC0KPiA+IC0JSTkxNV9XUklURV9GVyhEVlNTSVpFKHBpcGUpLCAoY3J0Y19oIDw8IDE2KSB8IGNy dGNfdyk7Cj4gPiAtCUk5MTVfV1JJVEVfRlcoRFZTU0NBTEUocGlwZSksIGR2c3NjYWxlKTsKPiA+ ICsJLyoKPiA+ICsJICogVGhlIGNvbnRyb2wgcmVnaXN0ZXIgc2VsZi1hcm1zIGlmIHRoZSBwbGFu ZSB3YXMgcHJldmlvdXNseQo+ID4gKwkgKiBkaXNhYmxlZC4gVHJ5IHRvIG1ha2UgdGhlIHBsYW5l IGVuYWJsZSBhdG9taWMgYnkgd3JpdGluZwo+ID4gKwkgKiB0aGUgY29udHJvbCByZWdpc3RlciBq dXN0IGJlZm9yZSB0aGUgc3VyZmFjZSByZWdpc3Rlci4KPiA+ICsJICovCj4gPiAgCUk5MTVfV1JJ VEVfRlcoRFZTQ05UUihwaXBlKSwgZHZzY250cik7Cj4gPiAgCUk5MTVfV1JJVEVfRlcoRFZTU1VS RihwaXBlKSwKPiA+ICAJCSAgICAgIGludGVsX3BsYW5lX2dndHRfb2Zmc2V0KHBsYW5lX3N0YXRl KSArIGR2c3N1cmZfb2Zmc2V0KTsKPiA+IC0tIAo+ID4gMi4xOC4xCj4gPiAKPiA+IF9fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCj4gPiBJbnRlbC1nZnggbWFp bGluZyBsaXN0Cj4gPiBJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCj4gPiBodHRwczov L2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo+IAo+IC0t IAo+IE1hdHQgUm9wZXIKPiBHcmFwaGljcyBTb2Z0d2FyZSBFbmdpbmVlcgo+IElvVEcgUGxhdGZv cm0gRW5hYmxpbmcgJiBEZXZlbG9wbWVudAo+IEludGVsIENvcnBvcmF0aW9uCj4gKDkxNikgMzU2 LTI3OTUKCi0tIApWaWxsZSBTeXJqw6Rsw6QKSW50ZWwKX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhA bGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxt YW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==