From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ander Conselvan De Oliveira Subject: Re: [PATCH] drm/i915: Add link training test Date: Tue, 15 Sep 2015 16:08:53 +0300 Message-ID: <1442322533.2595.11.camel@gmail.com> References: <1441980706-9241-1-git-send-email-ander.conselvan.de.oliveira@intel.com> <1442231511-24258-1-git-send-email-ander.conselvan.de.oliveira@intel.com> <20150914131149.GE3383@phenom.ffwll.local> <1442237891.2755.24.camel@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-pa0-f41.google.com (mail-pa0-f41.google.com [209.85.220.41]) by gabe.freedesktop.org (Postfix) with ESMTPS id D133D6E301 for ; Tue, 15 Sep 2015 06:09:01 -0700 (PDT) Received: by padhk3 with SMTP id hk3so176576804pad.3 for ; Tue, 15 Sep 2015 06:09:01 -0700 (PDT) In-Reply-To: <1442237891.2755.24.camel@gmail.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Daniel Vetter Cc: intel-gfx@lists.freedesktop.org, thomas.wood@intel.com List-Id: intel-gfx@lists.freedesktop.org T24gTW9uLCAyMDE1LTA5LTE0IGF0IDE2OjM4ICswMzAwLCBBbmRlciBDb25zZWx2YW4gRGUgT2xp dmVpcmEgd3JvdGU6Cj4gT24gTW9uLCAyMDE1LTA5LTE0IGF0IDE1OjExICswMjAwLCBEYW5pZWwg VmV0dGVyIHdyb3RlOgo+ID4gT24gTW9uLCBTZXAgMTQsIDIwMTUgYXQgMDI6NTE6NTFQTSArMDMw MCwgQW5kZXIgQ29uc2VsdmFuIGRlIE9saXZlaXJhIHdyb3RlOgo+ID4gPiAtLS0KPiA+ID4gCj4g PiA+IE9uIEZyaSwgMjAxNS0wOS0xMSBhdCAxNzoxMSArMDMwMCwgQW5kZXIgQ29uc2VsdmFuIGRl IE9saXZlaXJhIHdyb3RlOgo+ID4gPiA+IE9uIFdlZCwgMjAxNS0wOS0wOSBhdCAxMTozMyArMDEw MCwgVGhvbWFzIFdvb2Qgd3JvdGU6Cj4gPiA+ID4gPiBPbiA4IFNlcHRlbWJlciAyMDE1IGF0IDEz OjI4LCBBbmRlciBDb25zZWx2YW4gZGUgT2xpdmVpcmEKPiA+ID4gPiA+IDxhbmRlci5jb25zZWx2 YW4uZGUub2xpdmVpcmFAaW50ZWwuY29tPiB3cm90ZToKPiA+ID4gPiA+ID4gCj4gPiA+ID4gCj4g PiA+ID4gPiA+IGRpZmYgLS1naXQgYS9saW5rLXRyYWluaW5nLXRlc3QvTWFrZWZpbGUgYi9saW5r LXRyYWluaW5nLXRlc3QvTWFrZWZpbGUKPiA+ID4gPiA+IAo+ID4gPiA+ID4gSWYgdGhpcyBpcyBt ZWFudCB0byBiZSBwYXJ0IG9mIHRoZSB0ZXN0IHN1aXRlLCB0aGVuIGl0IG5lZWRzIHRvIGJlIGlu Cj4gPiA+ID4gPiB0aGUgdGVzdHMgZGlyZWN0b3J5IGFuZCB1c2UgdGhlIGlndCB0ZXN0IGluZnJh c3RydWN0dXJlLiBPdGhlcndpc2UgaXQKPiA+ID4gPiA+IHNob3VsZCBiZSBwbGFjZWQgaW4gdG9v bHMgb3IgdG9vbHMvbGluay10cmFpbmluZy10ZXN0Lgo+ID4gPiA+IAo+ID4gPiA+IEkgbWFkZSB0 aGUgdGVzdCB1c2UgdGhlIGlndCBpbmZyYXN0cnVjdHVyZSwgYnV0IEknbSBub3Qgc3VyZSBpZiB0 aGlzIGlzCj4gPiA+ID4gYSBnb29kIGZpdCBmb3IgaXQuIFRoZSBkZXBlbmRlbmN5IG9uIHRoZSBr ZXJuZWwgaXMgb24gYnVpbGQgdGltZSwgYnV0Cj4gPiA+ID4gb25jZSBjb21waWxlZCB0aGlzIGNh biBiZSBydW4gb24gYW55IG1hY2hpbmUuIFRoaXMgY2FuIGFsc28gaW50cm9kdWNlCj4gPiA+ID4g YnVpbGQgZmFpbHVyZXMgaWYgdGhlIHRlc3QgaXMgbm90IGtlcHQgaW4gc3luYyB3aXRoIHRoZSBk cml2ZXIgc291cmNlLgo+ID4gPiA+IElkZWFsbHkgdGhhdCBhIGZhaWx1cmUgdG8gYnVpbGQgdGhp cyB3b3VsZCBiZSByZXBvcnRlZCBhcyB0aGUgdGVzdAo+ID4gPiA+IGZhaWxpbmcsIGJ1dCBJIGhh dmUgbm8gaWRlYSBvZiBob3cgdG8gYWNoaWV2ZSB0aGF0Lgo+ID4gPiAKPiA+ID4gQWx0ZXJuYXRp dmVseSwgdGhpcyBjb3VsZCBiZSBpbiB0aGUga2VybmVsIHNvdXJjZSB0cmVlIGRpcmVjdGx5LiBU aGlzCj4gPiA+IHBhdGNoIGFkZHMgYSB0ZXN0IHN1YmRpciB0byB0aGUgaTkxNSBzb3VyY2UgZGly LCBjb250YWluaW5nIHRoZSBsaW5rCj4gPiA+IHRyYWluaW5nIHRlc3QuIFRoZSB0ZXN0IGlzIGNv bXBpbGVkIGFzIHBhcnQgb2YgdGhlIG5vcm1hbCBidWlsZCB1c2luZwo+ID4gPiB0aGUgZXh0cmEt eSB2YXJpYWJsZSBzbyB0aGF0IGl0IGRvZXNuJ3QgZ2V0IGxpbmtlZCB0byB0aGUgZmluYWwga2Vy bmVsLgo+ID4gPiAKPiA+ID4gV2hlbiBtYWtlIGlzIHJ1biBmcm9tIHRoZSB0ZXN0cyBkaXJlY3Rv cnksIGEgdGhpbiB3cmFwcGVyIGFyb3VuZCB0aGUKPiA+ID4gdGVzdHMgaXMgYnVpbHQgYW5kIGxp bmtlZCB0byB0aGUgb2JqZWN0IGZpbGUgY29tcGlsZWQgYXMgcGFydCBvZiB0aGUKPiA+ID4ga2Vy bmVsIGJ1aWxkLiBSdW5uaW5nIG1ha2UgcnVuX3Rlc3RzIGZyb20gdGhlIHRlc3QgZGlyIHJ1bnMg dGhlIHRlc3QKPiA+ID4gYW5kIHJlcG9ydHMgc3VjY2VzcyBvciBmYWlsdXJlLgo+ID4gPiAKPiA+ ID4gQW55IHRob3VnaHRzPwo+ID4gCj4gPiBJIHRoaW5rIHRoZXJlJ3Mgc29tZSBwcmVjZWRlbmNl IGluIG90aGVyIHN1YnN5c3RlbXMgdG8gaW50ZWdyYXRlIHVuaXQKPiA+IHRlc3RzIGRpcmVjdGx5 IGluIHRoZSBrZXJuZWwsIGUuZy4gbG9ja2luZyBzZWxmdGVzdCBvciBzaW1pbGFyIHRoaW5ncy4K PiA+IFVzdWFsIGFwcHJvYWNoIGlzIHRvIGVpdGhlciBoYXZlIGEgc3BlY2lhbCBtb2R1bGUgKGJ1 dCB0aGF0IG9mdGVuIG1lYW5zCj4gPiBwaWxlcyBvZiBFWFBPUlRfU1lNQk9MIG9ubHkgZm9yIHRo YXQgc2VsZnRlc3QgbW9kdWxlKS4gT3IganVzdCBhIHkvbgo+ID4gS2NvbmZpZyBvcHRpb24gd2hp Y2ggZW5hYmxlcyB0aGF0IGNvZGUgYW5kIHJ1bnMgYWxsIHRoZSBzZWxmL3VuaXQgdGVzdHMKPiA+ IHdoZW4gdGhlIG1vZHVsZSBsb2Fkcy4KPiA+IAo+ID4gSSdkIGdvIHdpdGggdGhhdCBhcHByb2Fj aCBzaW5jZSBpdCdzIHNpbXBsZXIuIEFuZCB3ZSdkIG9ubHkgbmVlZCB0byB0ZWxsCj4gPiBRQSB0 byBlbmFibGUgdGhhdCBLY29uZmlnIG9wdGlvbiBmb3IgbW9yZSB0ZXN0aW5nLgo+IAo+IEknbGwg aGF2ZSBhIGxvb2sgaW50byB0aGF0IEtjb25maWcgYXBwcm9hY2gsIGJ1dCB0aGVyZSdzIGEgY291 cGxlIG9mIHRoaW5ncwo+IEkgbGlrZSBhYm91dCBoYXZpbmcgdGhlIHVuaXQgdGVzdCBhcyB1c2Vy IHNwYWNlIGJpbmFyaWVzOgo+IAo+ICAgLSB0aGVyZSdzIG5vIG5lZWQgdG8gYm9vdCB0aGUgbmV3 bHkgY29tcGlsZWQga2VybmVsLCBzbyBkb2luZyBhIHRlc3QgcnVuCj4gICAgIGlzIHN1cGVyIGZh c3Q7Cj4gICAtIHRoZSBiaW5hcmllcyBjYW4gYmUgZGVidWdnZWQgd2l0aCBnZGIganVzdCBsaWtl IG90aGVyIHVzZXIgc3BhY2Ugc3R1ZmYuCgpJIGltcGxlbWVudGVkIHRoZSB0ZXN0IHVzaW5nIHRo ZSBLY29uZmlnIGFwcHJvYWNoLCBhbmQgaXQgc2VlbXMgdG8gd29yayB3ZWxsCndpdGhvdXQgaW1w YWN0aW5nIHRoZSBwb2ludHMgYWJvdmUuIEkgYWRkZWQgdGhlIGNhbGwgdG8gcnVuIHRoZSB0ZXN0 IGFzIHRoZQpmaXJzdCB0aGluZyBpbiBpOTE1X2luaXQoKSwgYW5kIHdpdGggdGhlIGRyaXZlciBj b21waWxlZCBidWlsdC1pbiwgcnVubmluZwp0aGUga2VybmVsIHVuZGVyIHFlbXUgd2lsbCBydW4g dGhlIHRlc3RzLiBBbmQgcWVtdSBjYW4gYWxzbyBwcm92aWRlIGEgZ2RiCnJlbW90ZSB0YXJnZXQu CgpPbmUgdGhpbmcgbWlnaHQgYmUgYSBwcm9ibGVtIHRob3VnaC4gV2l0aCB0aGUgcHJldmlvdXMg YXBwcm9hY2gsIHRoZQpmdW5jdGlvbnMgb3ZlcnJpZGVuIGJ5IHRoZSB0ZXN0IHdoZXJlIHNpbXBs eSByZWltcGxlbWVudGVkIGluIHRoZSBuZXcgYmluYXJ5LgpCdXQgbm93IHRoZSB0ZXN0IGlzIGxp bmtlZCB0byB0aGUgZW50aXJlIGRyaXZlciwgc28gdGhhdCdzIG5vdCBwb3NzaWJsZS4gVG8Kd29y ayBhcm91bmQgdGhhdCwgSSBoYWQgdG8gYWRkIGZ1bmN0aW9uIHBvaW50ZXJzIHRvIGFsbCB0aGUg ZnVuY3Rpb25zIGNhbGxlZApieSB0aGUgbGluayB0cmFpbmluZyBzdGF0ZSBtYWNoaW5lIHRvIGlu dGVsX2RwLiBJIGRvbid0IHRoaW5rIHRoYXQgbWV0aG9kCnNjYWxlcyB3ZWxsLgoKSSdsbCBzZW5k IHVwZGF0ZSBwYXRjaGVzIGZvciByZWZlcmVuY2UgYXMgcmVwbGllcyB0byB0aGlzIG1haWwuCgoK QW5kZXIKCj4gVGhlIGRvd25zaWRlIGlzIHRoZSBzdHViYmluZyBuZWNlc3NhcnkuIEluIHRoaXMg cGFydGljdWxhciBjYXNlIGl0IHdhc24ndAo+IHRoYXQgYmFkLCBidXQgSSBndWVzcyBpdCBjb3Vs ZCBnZXQgcmVhbGx5IHVnbHkuCj4gCj4gPiBMb25nLXRlcm0gd2UgbWlnaHQgZ28gbW9yZSBmYW5j eSB3aXRoIHNvbWUgc3RhdGljIGRlYnVnZnMgaW50ZXJmYWNlIChpLmUuCj4gPiBpbiB0aGUgdG9w LWxldmVsIGRybS8gZGlyZWN0b3J5LCBubyBpbiB0aGUgbnVtYmVyZWQgZGV2aWNlIHN1YmRpcnMg aW4KPiA+IGRlYnVnZnMpIHRvIHJ1biBzcGVjaWZpYyB0ZXN0Y2FzZXMgc28gdGhhdCB3ZSBjYW4g cmVwb3J0IG91dCB0aGUgcmVzdWx0cy4KPiA+IAo+ID4gQnV0IGFzIGxvbmcgYXMgbW9kdWxlIHJl bG9hZCBpcyBwYXJ0IG9mIEJBVCB3ZSBkb24ndCBuZWVkIHRoYXQsIGF0IGxlYXN0Cj4gPiBub3Qg Zm9yIGEgc3RhcnQuCj4gPiAKPiA+IEFueXdheSBJIHRoaW5rIGhhdmluZyB0aGUgdW5pdCB0ZXN0 cyBpbiB0aGUga2VybmVsIG1ha2VzIG1vcmUgc2Vuc2UsIHRoZQo+ID4gaWd0IG9uZXMgd2lsbCBs aWtlbHkgZ2V0IG91dCBvZiBzeW5jIGZhc3QuIEFuZCBpZ3QgaXMgc3VwcG9zZWQgdG8gd29yawo+ ID4gd2l0aCBhbnkga2VybmVsIHZlcnNpb24gKGhlbmNlIGFsbCB0aGUgaWd0X3JlcXVpcmUgY2hl Y2tzKS4KPiAKPiBZZWFoLCBhZ3JlZWQuCj4gCj4gQW5kZXIKPiAKPiA+IC1EYW5pZWwKPiA+IAo+ ID4gPiAKPiA+ID4gQW5kZXIKPiA+ID4gCj4gPiA+IC0tLQo+ID4gPiAgZHJpdmVycy9ncHUvZHJt L2k5MTUvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgfCAgIDIgKwo+ID4gPiAgZHJpdmVy cy9ncHUvZHJtL2k5MTUvdGVzdHMvTWFrZWZpbGUgICAgICAgICAgICAgICAgfCAgMzkgKysKPiA+ ID4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L3Rlc3RzL2VtcHR5LmMgICAgICAgICAgICAgICAgIHwg ICAwCj4gPiA+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS90ZXN0cy9sb2FkZXIuYyAgICAgICAgICAg ICAgICB8IDEwOCArKysrKwo+ID4gPiAgLi4uL2RybS9pOTE1L3Rlc3RzL3Rlc3RfaW50ZWxfZHBf bGlua190cmFpbmluZy5jICAgfCA0NjQgKysrKysrKysrKysrKysrKysrKysrCj4gPiA+ICA1IGZp bGVzIGNoYW5nZWQsIDYxMyBpbnNlcnRpb25zKCspCj4gPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQg ZHJpdmVycy9ncHUvZHJtL2k5MTUvdGVzdHMvTWFrZWZpbGUKPiA+ID4gIGNyZWF0ZSBtb2RlIDEw MDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS90ZXN0cy9lbXB0eS5jCj4gPiA+ICBjcmVhdGUgbW9k ZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvdGVzdHMvbG9hZGVyLmMKPiA+ID4gIGNyZWF0 ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS90ZXN0cy90ZXN0X2ludGVsX2RwX2xp bmtfdHJhaW5pbmcuYwo+ID4gPiAKPiA+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKPiA+ID4gaW5kZXgg MDg1MWRlMDcuLjcyOThjZTUgMTAwNjQ0Cj4gPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L01ha2VmaWxlCj4gPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCj4gPiA+ IEBAIC05Nyw2ICs5Nyw4IEBAIGk5MTUteSArPSBpOTE1X3ZncHUubwo+ID4gPiAgIyBsZWdhY3kg aG9ycm9ycwo+ID4gPiAgaTkxNS15ICs9IGk5MTVfZG1hLm8KPiA+ID4gIAo+ID4gPiArb2JqLXkg Kz0gdGVzdHMvCj4gPiA+ICsKPiA+ID4gIG9iai0kKENPTkZJR19EUk1fSTkxNSkgICs9IGk5MTUu bwo+ID4gPiAgCj4gPiA+ICBDRkxBR1NfaTkxNV90cmFjZV9wb2ludHMubyA6PSAtSSQoc3JjKQo+ ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvdGVzdHMvTWFrZWZpbGUgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS90ZXN0cy9NYWtlZmlsZQo+ID4gPiBuZXcgZmlsZSBtb2RlIDEw MDY0NAo+ID4gPiBpbmRleCAwMDAwMDAwLi4zMDYyNzQxCj4gPiA+IC0tLSAvZGV2L251bGwKPiA+ ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvdGVzdHMvTWFrZWZpbGUKPiA+ID4gQEAgLTAs MCArMSwzOSBAQAo+ID4gPiArIyBQbGVhc2Uga2J1aWxkCj4gPiA+ICsjIFRPRE86IGNoZWNrIGZv ciBhIGJldHRlciB3YXkgdG8gaW5jbHVkZSB0aGlzIGRpcmVjdG9yeSBpbiB0aGUgYnVpbGQKPiA+ ID4gKyMgd2l0aG91dCBmb3JjaW5nIHRoZSBuZWVkIGZvciB0aGlzIGVtcHR5IGZpbGUKPiA+ID4g K29iai15ICs9IGVtcHR5Lm8KPiA+ID4gKwo+ID4gPiArCj4gPiA+ICsjIEZJWE1FOiBUaGUgc3Rh Y2sgcHJvdGVjdG9yIGNvZGUgY2F1c2VzIHRlc3RzIHRvIGNyYXNoIGR1ZSB0byBhbiBpbXByb3Bl cmx5Cj4gPiA+ICsjIGluaXRpYWxpemVkICVncywgc28ga2VlcCBpdCBkaXNhYmxlZCBmb3Igbm93 Lgo+ID4gPiArY2NmbGFncy15IDo9IC1mc3RhY2stcHJvdGVjdG9yLWV4cGxpY2l0Cj4gPiA+ICsK PiA+ID4gK2V4dHJhLXkgKz0gdGVzdF9pbnRlbF9kcF9saW5rX3RyYWluaW5nLm8KPiA+ID4gKwo+ ID4gPiArIyBJZiBtYWtlIGlzIHJ1biBmcm9tIHRoaXMgZGlyZWN0b3J5Cj4gPiA+ICtpZmVxICgw LCAkKE1BS0VMRVZFTCkpCj4gPiA+ICsKPiA+ID4gKyMgRm9yIHN0cmxjcHkKPiA+ID4gK0xERkxB R1MgPSAtbGJzZAo+ID4gPiArCj4gPiA+ICtURVNUX1BST0dTID0gXAo+ID4gPiArCXRlc3RfaW50 ZWxfZHBfbGlua190cmFpbmluZwo+ID4gPiArCj4gPiA+ICthbGw6IHRlc3RzCj4gPiA+ICsKPiA+ ID4gK3Rlc3RzOiAkKFRFU1RfUFJPR1MpCj4gPiA+ICsKPiA+ID4gK3J1bl90ZXN0czogdGVzdHMK PiA+ID4gKwlAZm9yIFRFU1QgaW4gJChURVNUX1BST0dTKTsgZG8gXAo+ID4gPiArCQkoLi8kJFRF U1QgJiYgZWNobyAiJCRURVNUIFtQQVNTXSIpIHx8IGVjaG8gIiQkVEVTVCBbRkFJTF0iOyBcCj4g PiA+ICsJZG9uZQo+ID4gPiArCj4gPiA+ICt0ZXN0XyUubzogdGVzdF8lLmMgLi4vJS5jCj4gPiA+ ICsJbWFrZSAtQyAuLi8uLi8uLi8uLi8uLi8gZHJpdmVycy9ncHUvZHJtL2k5MTUvdGVzdHMvJEAK PiA+ID4gKwo+ID4gPiArbG9hZGVyLm86IGxvYWRlci5jCj4gPiA+ICsJJChDQykgJChDRkxBR1Mp IC1jIC1vICRAICQ8Cj4gPiA+ICsKPiA+ID4gKyU6ICUubyBsb2FkZXIubwo+ID4gPiArCSQoQ0Mp IC1vICRAICReICQoTERGTEFHUykKPiA+ID4gK2VuZGlmCj4gPiA+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS90ZXN0cy9lbXB0eS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvdGVz dHMvZW1wdHkuYwo+ID4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ID4gPiBpbmRleCAwMDAwMDAw Li5lNjlkZTI5Cj4gPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS90ZXN0cy9s b2FkZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3Rlc3RzL2xvYWRlci5jCj4gPiA+IG5ldyBm aWxlIG1vZGUgMTAwNjQ0Cj4gPiA+IGluZGV4IDAwMDAwMDAuLjllMzg4MTYKPiA+ID4gLS0tIC9k ZXYvbnVsbAo+ID4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS90ZXN0cy9sb2FkZXIuYwo+ ID4gPiBAQCAtMCwwICsxLDEwOCBAQAo+ID4gPiArLyoKPiA+ID4gKyAqIENvcHlyaWdodCDCqSAy MDE1IEludGVsIENvcnBvcmF0aW9uCj4gPiA+ICsgKgo+ID4gPiArICogUGVybWlzc2lvbiBpcyBo ZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEK PiA+ID4gKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0 aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCj4gPiA+ICsgKiB0byBkZWFsIGluIHRoZSBTb2Z0 d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCj4g PiA+ICsgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwg ZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKPiA+ID4gKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0 aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQo+ID4gPiArICog U29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcg Y29uZGl0aW9uczoKPiA+ID4gKyAqCj4gPiA+ICsgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGlj ZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0Cj4gPiA+ICsg KiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRp YWwgcG9ydGlvbnMgb2YgdGhlCj4gPiA+ICsgKiBTb2Z0d2FyZS4KPiA+ID4gKyAqCj4gPiA+ICsg KiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBB TlkgS0lORCwgRVhQUkVTUyBPUgo+ID4gPiArICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1Qg TElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCj4gPiA+ICsgKiBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4g Tk8gRVZFTlQgU0hBTEwKPiA+ID4gKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJT IEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCj4gPiA+ICsgKiBMSUFC SUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lT RSwgQVJJU0lORwo+ID4gPiArICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBU SEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUwo+ID4gPiArICogSU4gVEhF IFNPRlRXQVJFLgo+ID4gPiArICoKPiA+ID4gKyAqIEF1dGhvcnM6Cj4gPiA+ICsgKiAgICBBbmRl ciBDb25zZWx2YW4gZGUgT2xpdmVpcmEgPGFuZGVyLmNvbnNlbHZhbi5kZS5vbGl2ZWlyYUBpbnRl bC5jb20+Cj4gPiA+ICsgKgo+ID4gPiArICovCj4gPiA+ICsKPiA+ID4gKyNpbmNsdWRlIDxzdGRi b29sLmg+Cj4gPiA+ICsjaW5jbHVkZSA8c3RkaW50Lmg+Cj4gPiA+ICsjaW5jbHVkZSA8c3RkbGli Lmg+Cj4gPiA+ICsjaW5jbHVkZSA8c3RkaW8uaD4KPiA+ID4gKyNpbmNsdWRlIDxzdGRhcmcuaD4K PiA+ID4gKwo+ID4gPiArdm9pZCBydW5fdGVzdCh2b2lkKTsKPiA+ID4gKwo+ID4gPiArdm9pZCBh c3NlcnQoYm9vbCBjb25kaXRpb24pCj4gPiA+ICt7Cj4gPiA+ICsJaWYgKCFjb25kaXRpb24pIHsK PiA+ID4gKwkJcHJpbnRmKCJBc3NlcnQgZmFpbGVkXG4iKTsKPiA+ID4gKwkJYWJvcnQoKTsKPiA+ ID4gKwl9Cj4gPiA+ICt9Cj4gPiA+ICsKPiA+ID4gK3N0cnVjdCB7Cj4gPiA+ICsJdWludDhfdCBw YWRkaW5nWzMyXTsKPiA+ID4gK30gcGFyYW1fb3BzX2ludDsKPiA+ID4gKwo+ID4gPiArdW5zaWdu ZWQgaW50IGRybV9kZWJ1ZyA9IDA7CS8qIDEgdG8gZW5hYmxlIGRlYnVnIG91dHB1dCAqLwo+ID4g PiArCj4gPiA+ICt2b2lkIGRybV9lcnIoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCj4gPiA+ICt7 Cj4gPiA+ICsJdmFfbGlzdCBhcmdzOwo+ID4gPiArCj4gPiA+ICsJdmFfc3RhcnQoYXJncywgZm9y bWF0KTsKPiA+ID4gKwl2cHJpbnRmKGZvcm1hdCwgYXJncyk7Cj4gPiA+ICsJdmFfZW5kKGFyZ3Mp Owo+ID4gPiArCj4gPiA+ICt9Cj4gPiA+ICsKPiA+ID4gK3ZvaWQgZHJtX3V0X2RlYnVnX3ByaW50 ayhjb25zdCBjaGFyICpmdW5jdGlvbl9uYW1lLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKPiA+ ID4gK3sKPiA+ID4gKwl2YV9saXN0IGFyZ3M7Cj4gPiA+ICsKPiA+ID4gKwl2YV9zdGFydChhcmdz LCBmb3JtYXQpOwo+ID4gPiArCXByaW50ZigiWyVzXSAiLCBmdW5jdGlvbl9uYW1lKTsKPiA+ID4g Kwl2cHJpbnRmKGZvcm1hdCwgYXJncyk7Cj4gPiA+ICsJdmFfZW5kKGFyZ3MpOwo+ID4gPiArfQo+ ID4gPiArCj4gPiA+ICt2b2lkIF9fY29uc3RfdWRlbGF5KHVuc2lnbmVkIGxvbmcgeGxvb3BzKQo+ ID4gPiArewo+ID4gPiArfQo+ID4gPiArCj4gPiA+ICtzdHJ1Y3QgbXV0ZXg7Cj4gPiA+ICt2b2lk IG11dGV4X2xvY2tfbmVzdGVkKHN0cnVjdCBtdXRleCAqbG9jaywgdW5zaWduZWQgaW50IHN1YmNs YXNzKQo+ID4gPiArewo+ID4gPiArfQo+ID4gPiArCj4gPiA+ICt2b2lkIG11dGV4X3VubG9jayhz dHJ1Y3QgbXV0ZXggKmxvY2spCj4gPiA+ICt7Cj4gPiA+ICt9Cj4gPiA+ICsKPiA+ID4gK3N0cnVj dCBsb2NrX2NsYXNzX2tleTsKPiA+ID4gK3ZvaWQKPiA+ID4gK19fbXV0ZXhfaW5pdChzdHJ1Y3Qg bXV0ZXggKmxvY2ssIGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBsb2NrX2NsYXNzX2tleSAqa2V5 KQo+ID4gPiArewo+ID4gPiArfQo+ID4gPiArCj4gPiA+ICt2b2lkIHVzbGVlcF9yYW5nZSh1bnNp Z25lZCBpbnQgbWluLCB1bnNpZ25lZCBpbnQgbWF4KQo+ID4gPiArewo+ID4gPiArfQo+ID4gPiAr Cj4gPiA+ICtzdHJ1Y3QgaTJjX2FkYXB0ZXI7Cj4gPiA+ICtpbnQgaTJjX2FkZF9hZGFwdGVyKHN0 cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKPiA+ID4gK3sKPiA+ID4gKwlyZXR1cm4gMDsKPiA+ ID4gK30KPiA+ID4gKwo+ID4gPiArdm9pZCBpMmNfZGVsX2FkYXB0ZXIoc3RydWN0IGkyY19hZGFw dGVyICphZGFwYXRlcikKPiA+ID4gK3sKPiA+ID4gK30KPiA+ID4gKwo+ID4gPiAraW50Cj4gPiA+ ICttYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCj4gPiA+ICt7Cj4gPiA+ICsJcnVuX3Rlc3Qo KTsKPiA+ID4gKwlyZXR1cm4gMDsKPiA+ID4gK30KPiA+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L3Rlc3RzL3Rlc3RfaW50ZWxfZHBfbGlua190cmFpbmluZy5jIAo+ID4gPiBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L3Rlc3RzL3Rlc3RfaW50ZWxfZHBfbGlua190cmFpbmluZy5j Cj4gPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gPiA+IGluZGV4IDAwMDAwMDAuLjExODY4ZjgK PiA+ID4gLS0tIC9kZXYvbnVsbAo+ID4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS90ZXN0 cy90ZXN0X2ludGVsX2RwX2xpbmtfdHJhaW5pbmcuYwo+ID4gPiBAQCAtMCwwICsxLDQ2NCBAQAo+ ID4gPiArLyoKPiA+ID4gKyAqIENvcHlyaWdodCDCqSAyMDE1IEludGVsIENvcnBvcmF0aW9uCj4g PiA+ICsgKgo+ID4gPiArICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBj aGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKPiA+ID4gKyAqIGNvcHkgb2YgdGhpcyBz b2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJl IiksCj4gPiA+ICsgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9u LCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCj4gPiA+ICsgKiB0aGUgcmlnaHRzIHRvIHVz ZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwK PiA+ID4gKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJt aXQgcGVyc29ucyB0byB3aG9tIHRoZQo+ID4gPiArICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRv IGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKPiA+ID4gKyAqCj4g PiA+ICsgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5v dGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0Cj4gPiA+ICsgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGlu Y2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCj4gPiA+ ICsgKiBTb2Z0d2FyZS4KPiA+ID4gKyAqCj4gPiA+ICsgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklE RUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgo+ID4g PiArICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElF UyBPRiBNRVJDSEFOVEFCSUxJVFksCj4gPiA+ICsgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKPiA+ID4gKyAq IFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlN LCBEQU1BR0VTIE9SIE9USEVSCj4gPiA+ICsgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNU SU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORwo+ID4gPiArICogRlJP TSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBP UiBPVEhFUiBERUFMSU5HUwo+ID4gPiArICogSU4gVEhFIFNPRlRXQVJFLgo+ID4gPiArICoKPiA+ ID4gKyAqIEF1dGhvcnM6Cj4gPiA+ICsgKiAgICBBbmRlciBDb25zZWx2YW4gZGUgT2xpdmVpcmEg PGFuZGVyLmNvbnNlbHZhbi5kZS5vbGl2ZWlyYUBpbnRlbC5jb20+Cj4gPiA+ICsgKgo+ID4gPiAr ICovCj4gPiA+ICsKPiA+ID4gKyNpbmNsdWRlICIuLi9pbnRlbF9kcF9saW5rX3RyYWluaW5nLmMi Cj4gPiA+ICsKPiA+ID4gKyNkZWZpbmUgZHJtX2RwX2RwY2Rfd3JpdGUJcmVhbF9kcm1fZHBfZHBj ZF93cml0ZQo+ID4gPiArI2luY2x1ZGUgIi4uLy4uL2RybV9kcF9oZWxwZXIuYyIKPiA+ID4gKyN1 bmRlZiBkcm1fZHBfZHBjZF93cml0ZQo+ID4gPiArCj4gPiA+ICt2b2lkIGFzc2VydChib29sIGNv bmRpdGlvbik7Cj4gPiA+ICsKPiA+ID4gKwo+ID4gPiArc3RydWN0IHNpbmtfZGV2aWNlIHsKPiA+ ID4gKwlzc2l6ZV90ICgqZHBjZF93cml0ZSkoc3RydWN0IHNpbmtfZGV2aWNlICpzaW5rLCB1bnNp Z25lZCBpbnQgb2Zmc2V0LAo+ID4gPiArCQkJICAgICAgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6 ZSk7Cj4gPiA+ICsJYm9vbCAoKmdldF9saW5rX3N0YXR1cykoc3RydWN0IHNpbmtfZGV2aWNlICpz aW5rLAo+ID4gPiArCQkJCXVpbnQ4X3QgbGlua19zdGF0dXNbRFBfTElOS19TVEFUVVNfU0laRV0p Owo+ID4gPiArCj4gPiA+ICsJc3RydWN0IHsKPiA+ID4gKwkJYm9vbCBsYW5lX2NvdW50X2FuZF9i d19zZXQ7Cj4gPiA+ICsJCWJvb2wgdHJhaW5pbmdfcGF0dGVybl8xX3NldDsKPiA+ID4gKwkJYm9v bCBzdGFydGVkX3dpdGhfbm9uX3plcm9fbGV2ZWxzOwo+ID4gPiArCQlib29sIGNyX2RvbmU7Cj4g PiA+ICsJCWJvb2wgY2hhbm5lbF9lcV9kb25lOwo+ID4gPiArCj4gPiA+ICsJCXVpbnQ4X3QgZHBj ZFsweDMwMDBdOwo+ID4gPiArCX0gZGF0YTsKPiA+ID4gK307Cj4gPiA+ICsKPiA+ID4gKy8qIEZh a2Ugc2luayBkZXZpY2UgaW1wbGVtZW50YXRpb24gKi8KPiA+ID4gKwo+ID4gPiArc3RhdGljIHVp bnQ4X3QKPiA+ID4gK3NpbmtfZGV2aWNlX2xhbmVfY291bnQoc3RydWN0IHNpbmtfZGV2aWNlICpz aW5rKQo+ID4gPiArewo+ID4gPiArCXJldHVybiBzaW5rLT5kYXRhLmRwY2RbRFBfTEFORV9DT1VO VF9TRVRdOwo+ID4gPiArfQo+ID4gPiArCj4gPiA+ICtzdGF0aWMgdWludDhfdAo+ID4gPiArc2lu a19kZXZpY2VfZ2V0X3RyYWluaW5nX3BhdHRlcm4oc3RydWN0IHNpbmtfZGV2aWNlICpzaW5rKQo+ ID4gPiArewo+ID4gPiArCXJldHVybiBzaW5rLT5kYXRhLmRwY2RbRFBfVFJBSU5JTkdfUEFUVEVS Tl9TRVRdICYgRFBfVFJBSU5JTkdfUEFUVEVSTl9NQVNLOwo+ID4gPiArfQo+ID4gPiArCj4gPiA+ ICtzdGF0aWMgdWludDhfdAo+ID4gPiArc2lua19kZXZpY2VfZ2V0X3ZvbHRhZ2Vfc3dpbmcoc3Ry dWN0IHNpbmtfZGV2aWNlICpzaW5rLCBpbnQgbGFuZSkKPiA+ID4gK3sKPiA+ID4gKwlyZXR1cm4g c2luay0+ZGF0YS5kcGNkW0RQX1RSQUlOSU5HX0xBTkUwX1NFVCArIGxhbmVdICYKPiA+ID4gKwkJ RFBfVFJBSU5fVk9MVEFHRV9TV0lOR19NQVNLOwo+ID4gPiArfQo+ID4gPiArCj4gPiA+ICtzdGF0 aWMgdWludDhfdAo+ID4gPiArc2lua19kZXZpY2VfZ2V0X3ByZV9lbXBoYXNpc19sZXZlbChzdHJ1 Y3Qgc2lua19kZXZpY2UgKnNpbmssIGludCBsYW5lKQo+ID4gPiArewo+ID4gPiArCXJldHVybiAo c2luay0+ZGF0YS5kcGNkW0RQX1RSQUlOSU5HX0xBTkUwX1NFVCArIGxhbmVdICYKPiA+ID4gKwkJ IERQX1RSQUlOX1BSRV9FTVBIQVNJU19NQVNLKSA+PiBEUF9UUkFJTl9QUkVfRU1QSEFTSVNfU0hJ RlQ7Cj4gPiA+ICt9Cj4gPiA+ICsKPiA+ID4gK3N0YXRpYyB2b2lkCj4gPiA+ICtzaW5rX2Rldmlj ZV9jaGVja19sYW5lX2NvdW50X2FuZF9idyhzdHJ1Y3Qgc2lua19kZXZpY2UgKnNpbmspCj4gPiA+ ICt7Cj4gPiA+ICsJaWYgKHNpbmstPmRhdGEubGFuZV9jb3VudF9hbmRfYndfc2V0KQo+ID4gPiAr CQlyZXR1cm47Cj4gPiA+ICsKPiA+ID4gKwlhc3NlcnQoc2luay0+ZGF0YS5kcGNkW0RQX1RSQUlO SU5HX1BBVFRFUk5fU0VUXSA9PSAwKTsKPiA+ID4gKwo+ID4gPiArCWlmIChzaW5rLT5kYXRhLmRw Y2RbRFBfTElOS19CV19TRVRdICE9IDAgJiYKPiA+ID4gKwkgICAgc2luay0+ZGF0YS5kcGNkW0RQ X0xBTkVfQ09VTlRfU0VUXSAhPSAwKQo+ID4gPiArCQlzaW5rLT5kYXRhLmxhbmVfY291bnRfYW5k X2J3X3NldCA9IHRydWU7Cj4gPiA+ICt9Cj4gPiA+ICsKPiA+ID4gK3N0YXRpYyB2b2lkCj4gPiA+ ICtzaW5rX2RldmljZV9jaGVja19wYXR0ZXJuXzFfc2V0KHN0cnVjdCBzaW5rX2RldmljZSAqc2lu aykKPiA+ID4gK3sKPiA+ID4gKwlpbnQgbGFuZTsKPiA+ID4gKwo+ID4gPiArCWlmICghc2luay0+ ZGF0YS5sYW5lX2NvdW50X2FuZF9id19zZXQgfHwKPiA+ID4gKwkgICAgc2luay0+ZGF0YS50cmFp bmluZ19wYXR0ZXJuXzFfc2V0KQo+ID4gPiArCQlyZXR1cm47Cj4gPiA+ICsKPiA+ID4gKwlhc3Nl cnQoc2lua19kZXZpY2VfZ2V0X3RyYWluaW5nX3BhdHRlcm4oc2luaykgPD0gRFBfVFJBSU5JTkdf UEFUVEVSTl8xKTsKPiA+ID4gKwo+ID4gPiArCWlmIChzaW5rX2RldmljZV9nZXRfdHJhaW5pbmdf cGF0dGVybihzaW5rKSAhPSBEUF9UUkFJTklOR19QQVRURVJOXzEpCj4gPiA+ICsJCXJldHVybjsK PiA+ID4gKwo+ID4gPiArCWFzc2VydChzaW5rLT5kYXRhLmRwY2RbRFBfTElOS19CV19TRVRdID09 IERQX0xJTktfQldfMV82MiB8fAo+ID4gPiArCSAgICAgICBzaW5rLT5kYXRhLmRwY2RbRFBfTElO S19CV19TRVRdID09IERQX0xJTktfQldfMl83KTsKPiA+ID4gKwo+ID4gPiArCWFzc2VydChzaW5r LT5kYXRhLmRwY2RbRFBfTEFORV9DT1VOVF9TRVRdID09IDEgfHwKPiA+ID4gKwkJICAgc2luay0+ ZGF0YS5kcGNkW0RQX0xBTkVfQ09VTlRfU0VUXSA9PSAyIHx8Cj4gPiA+ICsJCSAgIHNpbmstPmRh dGEuZHBjZFtEUF9MQU5FX0NPVU5UX1NFVF0gPT0gNCk7Cj4gPiA+ICsKPiA+ID4gKwlmb3IgKGxh bmUgPSAwOyBsYW5lIDwgc2lua19kZXZpY2VfbGFuZV9jb3VudChzaW5rKTsgbGFuZSsrKSB7Cj4g PiA+ICsJCWlmIChzaW5rX2RldmljZV9nZXRfdm9sdGFnZV9zd2luZyhzaW5rLCBsYW5lKSAhPSAK PiA+ID4gRFBfVFJBSU5fVk9MVEFHRV9TV0lOR19MRVZFTF8wIAo+ID4gPiA+ID4gCj4gPiA+ICsJ CSAgICBzaW5rX2RldmljZV9nZXRfcHJlX2VtcGhhc2lzX2xldmVsKHNpbmssIGxhbmUpICE9IAo+ ID4gPiBEUF9UUkFJTl9QUkVfRU1QSF9MRVZFTF8wKQo+ID4gPiArCQkJc2luay0+ZGF0YS5zdGFy dGVkX3dpdGhfbm9uX3plcm9fbGV2ZWxzID0gdHJ1ZTsKPiA+ID4gKwl9Cj4gPiA+ICsKPiA+ID4g KwlzaW5rLT5kYXRhLnRyYWluaW5nX3BhdHRlcm5fMV9zZXQgPSB0cnVlOwo+ID4gPiArfQo+ID4g PiArCj4gPiA+ICtzdGF0aWMgdm9pZAo+ID4gPiArc2lua19kZXZpY2VfY2hlY2tfcGF0dGVybl8y X3NldChzdHJ1Y3Qgc2lua19kZXZpY2UgKnNpbmspCj4gPiA+ICt7Cj4gPiA+ICsJaWYgKCFzaW5r LT5kYXRhLmNyX2RvbmUpCj4gPiA+ICsJCXJldHVybjsKPiA+ID4gKwo+ID4gPiArCWFzc2VydChz aW5rX2RldmljZV9nZXRfdHJhaW5pbmdfcGF0dGVybihzaW5rKSA9PSBEUF9UUkFJTklOR19QQVRU RVJOXzIpOwo+ID4gPiArfQo+ID4gPiArCj4gPiA+ICtzdGF0aWMgdm9pZAo+ID4gPiArc2lua19k ZXZpY2VfY2hlY2tfcGF0dGVybl9kaXNhYmxlKHN0cnVjdCBzaW5rX2RldmljZSAqc2luaykKPiA+ ID4gK3sKPiA+ID4gKwlpZiAoIXNpbmstPmRhdGEuY3JfZG9uZSB8fCAhIHNpbmstPmRhdGEuY2hh bm5lbF9lcV9kb25lKQo+ID4gPiArCQlyZXR1cm47Cj4gPiA+ICsKPiA+ID4gKwlhc3NlcnQoc2lu a19kZXZpY2VfZ2V0X3RyYWluaW5nX3BhdHRlcm4oc2luaykgPT0gRFBfVFJBSU5JTkdfUEFUVEVS Tl9ESVNBQkxFKTsKPiA+ID4gK30KPiA+ID4gKwo+ID4gPiArc3RhdGljIHNzaXplX3QKPiA+ID4g K3NpbmtfZGV2aWNlX2RwY2Rfd3JpdGUoc3RydWN0IHNpbmtfZGV2aWNlICpzaW5rLCB1bnNpZ25l ZCBpbnQgb2Zmc2V0LAo+ID4gPiArCQkgICAgICAgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSkK PiA+ID4gK3sKPiA+ID4gKwltZW1jcHkoc2luay0+ZGF0YS5kcGNkICsgb2Zmc2V0LCBidWZmZXIs IHNpemUpOwo+ID4gPiArCj4gPiA+ICsJc2lua19kZXZpY2VfY2hlY2tfbGFuZV9jb3VudF9hbmRf Yncoc2luayk7Cj4gPiA+ICsKPiA+ID4gKwlpZiAoIXNpbmstPmRhdGEuY3JfZG9uZSkKPiA+ID4g KwkJc2lua19kZXZpY2VfY2hlY2tfcGF0dGVybl8xX3NldChzaW5rKTsKPiA+ID4gKwllbHNlIGlm ICghc2luay0+ZGF0YS5jaGFubmVsX2VxX2RvbmUpCj4gPiA+ICsJCXNpbmtfZGV2aWNlX2NoZWNr X3BhdHRlcm5fMl9zZXQoc2luayk7Cj4gPiA+ICsJZWxzZQo+ID4gPiArCQlzaW5rX2RldmljZV9j aGVja19wYXR0ZXJuX2Rpc2FibGUoc2luayk7Cj4gPiA+ICsKPiA+ID4gKwlyZXR1cm4gc2l6ZTsK PiA+ID4gK30KPiA+ID4gKwo+ID4gPiArc3RhdGljIGJvb2wKPiA+ID4gK3NpbmtfZGV2aWNlX21h eF92b2x0YWdlX3JlYWNoZWQoc3RydWN0IHNpbmtfZGV2aWNlICpzaW5rLCBpbnQgbGFuZSkKPiA+ ID4gK3sKPiA+ID4gKwlyZXR1cm4gKHNpbmstPmRhdGEuZHBjZFtEUF9UUkFJTklOR19MQU5FMF9T RVQgKyBsYW5lXSAmIERQX1RSQUlOX01BWF9TV0lOR19SRUFDSEVEKSAKPiA+ID4gPT0KPiA+ID4g KwkJRFBfVFJBSU5fTUFYX1NXSU5HX1JFQUNIRUQ7Cj4gPiA+ICt9Cj4gPiA+ICsKPiA+ID4gK3N0 YXRpYyBib29sCj4gPiA+ICtzaW5rX2RldmljZV9tYXhfcHJlX2VtcGhhc2lzX3JlYWNoZWQoc3Ry dWN0IHNpbmtfZGV2aWNlICpzaW5rLCBpbnQgbGFuZSkKPiA+ID4gK3sKPiA+ID4gKwlyZXR1cm4g KHNpbmstPmRhdGEuZHBjZFtEUF9UUkFJTklOR19MQU5FMF9TRVQgKyBsYW5lXSAmIAo+ID4gPiBE UF9UUkFJTl9NQVhfUFJFX0VNUEhBU0lTX1JFQUNIRUQpID09Cj4gPiA+ICsJCURQX1RSQUlOX01B WF9QUkVfRU1QSEFTSVNfUkVBQ0hFRDsKPiA+ID4gK30KPiA+ID4gKwo+ID4gPiArc3RhdGljIHZv aWQKPiA+ID4gK3NpbmtfZGV2aWNlX3NldF9hZGp1c3Rfdm9sdGFnZShzdHJ1Y3Qgc2lua19kZXZp Y2UgKnNpbmssCj4gPiA+ICsJCQkgICAgICAgaW50IGxhbmUsIHVpbnQ4X3QgbGV2ZWwpCj4gPiA+ ICt7Cj4gPiA+ICsJaW50IHNoaWZ0ID0gRFBfQURKVVNUX1ZPTFRBR0VfU1dJTkdfTEFORTFfU0hJ RlQgKiAobGFuZSAmIDEpOwo+ID4gPiArCj4gPiA+ICsJc2luay0+ZGF0YS5kcGNkW0RQX0FESlVT VF9SRVFVRVNUX0xBTkUwXzEgKyAobGFuZSA+PiAxKV0gJj0KPiA+ID4gKwkJfihEUF9BREpVU1Rf Vk9MVEFHRV9TV0lOR19MQU5FMF9NQVNLIDw8IHNoaWZ0KTsKPiA+ID4gKwlzaW5rLT5kYXRhLmRw Y2RbRFBfQURKVVNUX1JFUVVFU1RfTEFORTBfMSArIChsYW5lID4+IDEpXSB8PQo+ID4gPiArCQls ZXZlbCA8PCBzaGlmdDsKPiA+ID4gK30KPiA+ID4gKwo+ID4gPiArc3RhdGljIHZvaWQKPiA+ID4g K3NpbmtfZGV2aWNlX3NldF9hZGp1c3RfcHJlX2VtcGhhc2lzKHN0cnVjdCBzaW5rX2RldmljZSAq c2luaywKPiA+ID4gKwkJCQkgICAgaW50IGxhbmUsIHVpbnQ4X3QgbGV2ZWwpCj4gPiA+ICt7Cj4g PiA+ICsJaW50IHNoaWZ0ID0gRFBfQURKVVNUX1ZPTFRBR0VfU1dJTkdfTEFORTFfU0hJRlQgKiAo bGFuZSAmIDEpOwo+ID4gPiArCj4gPiA+ICsJc2luay0+ZGF0YS5kcGNkW0RQX0FESlVTVF9SRVFV RVNUX0xBTkUwXzEgKyAobGFuZSA+PiAxKV0gJj0KPiA+ID4gKwkJfihEUF9BREpVU1RfUFJFX0VN UEhBU0lTX0xBTkUwX01BU0sgPDwgc2hpZnQpOwo+ID4gPiArCXNpbmstPmRhdGEuZHBjZFtEUF9B REpVU1RfUkVRVUVTVF9MQU5FMF8xICsgKGxhbmUgPj4gMSldIHw9Cj4gPiA+ICsJCWxldmVsIDw8 IChEUF9BREpVU1RfUFJFX0VNUEhBU0lTX0xBTkUwX1NISUZUICsgc2hpZnQpOwo+ID4gPiArfQo+ ID4gPiArCj4gPiA+ICtzdGF0aWMgYm9vbAo+ID4gPiArc2lua19kZXZpY2VfcmVxdWVzdF9oaWdo ZXJfdm9sdGFnZV9zd2luZyhzdHJ1Y3Qgc2lua19kZXZpY2UgKnNpbmspCj4gPiA+ICt7Cj4gPiA+ ICsJYm9vbCBtYXhfcmVhY2hlZCA9IGZhbHNlOwo+ID4gPiArCWludCBsYW5lOwo+ID4gPiArCj4g PiA+ICsJZm9yIChsYW5lID0gMDsgbGFuZSA8IHNpbmtfZGV2aWNlX2xhbmVfY291bnQoc2luayk7 IGxhbmUrKykgewo+ID4gPiArCQlpZiAoc2lua19kZXZpY2VfbWF4X3ZvbHRhZ2VfcmVhY2hlZChz aW5rLCBsYW5lKSkgewo+ID4gPiArCQkJbWF4X3JlYWNoZWQgPSB0cnVlOwo+ID4gPiArCQkJYnJl YWs7Cj4gPiA+ICsJCX0KPiA+ID4gKwl9Cj4gPiA+ICsKPiA+ID4gKwlpZiAobWF4X3JlYWNoZWQp Cj4gPiA+ICsJCXJldHVybiBmYWxzZTsKPiA+ID4gKwo+ID4gPiArCWZvciAobGFuZSA9IDA7IGxh bmUgPCBzaW5rX2RldmljZV9sYW5lX2NvdW50KHNpbmspOyBsYW5lKyspIHsKPiA+ID4gKwkJdWlu dDhfdCBuZXdfdm9sdGFnZSA9Cj4gPiA+ICsJCQlzaW5rX2RldmljZV9nZXRfdm9sdGFnZV9zd2lu ZyhzaW5rLCBsYW5lKSArIDE7Cj4gPiA+ICsKPiA+ID4gKwkJc2lua19kZXZpY2Vfc2V0X2FkanVz dF92b2x0YWdlKHNpbmssIGxhbmUsIG5ld192b2x0YWdlKTsKPiA+ID4gKwl9Cj4gPiA+ICsKPiA+ ID4gKwlyZXR1cm4gdHJ1ZTsKPiA+ID4gK30KPiA+ID4gKwo+ID4gPiArc3RhdGljIGJvb2wKPiA+ ID4gK3NpbmtfZGV2aWNlX3JlcXVlc3RfaGlnaGVyX3ByZV9lbXBoYXNpcyhzdHJ1Y3Qgc2lua19k ZXZpY2UgKnNpbmspCj4gPiA+ICt7Cj4gPiA+ICsJYm9vbCBtYXhfcmVhY2hlZCA9IGZhbHNlOwo+ ID4gPiArCWludCBsYW5lOwo+ID4gPiArCj4gPiA+ICsJZm9yIChsYW5lID0gMDsgbGFuZSA8IHNp bmtfZGV2aWNlX2xhbmVfY291bnQoc2luayk7IGxhbmUrKykgewo+ID4gPiArCQlpZiAoc2lua19k ZXZpY2VfbWF4X3ByZV9lbXBoYXNpc19yZWFjaGVkKHNpbmssIGxhbmUpKSB7Cj4gPiA+ICsJCQlt YXhfcmVhY2hlZCA9IHRydWU7Cj4gPiA+ICsJCQlicmVhazsKPiA+ID4gKwkJfQo+ID4gPiArCX0K PiA+ID4gKwo+ID4gPiArCWlmIChtYXhfcmVhY2hlZCkKPiA+ID4gKwkJcmV0dXJuIGZhbHNlOwo+ ID4gPiArCj4gPiA+ICsJZm9yIChsYW5lID0gMDsgbGFuZSA8IHNpbmtfZGV2aWNlX2xhbmVfY291 bnQoc2luayk7IGxhbmUrKykgewo+ID4gPiArCQl1aW50OF90IG5ld19wcmVfZW1waGFzaXMgPQo+ ID4gPiArCQkJc2lua19kZXZpY2VfZ2V0X3ByZV9lbXBoYXNpc19sZXZlbChzaW5rLCBsYW5lKSAr IDE7Cj4gPiA+ICsKPiA+ID4gKwkJc2lua19kZXZpY2Vfc2V0X2FkanVzdF9wcmVfZW1waGFzaXMo c2luaywgbGFuZSwgbmV3X3ByZV9lbXBoYXNpcyk7Cj4gPiA+ICsJfQo+ID4gPiArCj4gPiA+ICsJ cmV0dXJuIHRydWU7Cj4gPiA+ICt9Cj4gPiA+ICsKPiA+ID4gK3N0YXRpYyB2b2lkCj4gPiA+ICtz aW5rX2RldmljZV9tYXJrX2NyX2RvbmUoc3RydWN0IHNpbmtfZGV2aWNlICpzaW5rKQo+ID4gPiAr ewo+ID4gPiArCWludCBsYW5lOwo+ID4gPiArCj4gPiA+ICsJZm9yIChsYW5lID0gMDsgbGFuZSA8 IHNpbmtfZGV2aWNlX2xhbmVfY291bnQoc2luayk7IGxhbmUrKykKPiA+ID4gKwkJc2luay0+ZGF0 YS5kcGNkW0RQX0xBTkUwXzFfU1RBVFVTICsgKGxhbmUgPj4gMSldIHw9Cj4gPiA+ICsJCQlEUF9M QU5FX0NSX0RPTkUgPDwgKDQgKiAobGFuZSAmIDEpKTsKPiA+ID4gKwo+ID4gPiArCXNpbmstPmRh dGEuY3JfZG9uZSA9IHRydWU7Cj4gPiA+ICt9Cj4gPiA+ICsKPiA+ID4gK3N0YXRpYyB2b2lkCj4g PiA+ICtzaW5rX2RldmljZV9tYXJrX2NoYW5uZWxfZXFfZG9uZShzdHJ1Y3Qgc2lua19kZXZpY2Ug KnNpbmspCj4gPiA+ICt7Cj4gPiA+ICsJaW50IGxhbmU7Cj4gPiA+ICsKPiA+ID4gKwlmb3IgKGxh bmUgPSAwOyBsYW5lIDwgc2lua19kZXZpY2VfbGFuZV9jb3VudChzaW5rKTsgbGFuZSsrKSB7Cj4g PiA+ICsJCXVpbnQ4X3QgbWFzayA9IChEUF9MQU5FX0NIQU5ORUxfRVFfRE9ORSB8IERQX0xBTkVf U1lNQk9MX0xPQ0tFRCk7Cj4gPiA+ICsJCXNpbmstPmRhdGEuZHBjZFtEUF9MQU5FMF8xX1NUQVRV UyArIChsYW5lID4+IDEpXSB8PQo+ID4gPiArCQkJbWFzayA8PCAoNCAqIChsYW5lICYgMSkpOwo+ ID4gPiArCX0KPiA+ID4gKwo+ID4gPiArCXNpbmstPmRhdGEuZHBjZFtEUF9MQU5FX0FMSUdOX1NU QVRVU19VUERBVEVEXSB8PSBEUF9JTlRFUkxBTkVfQUxJR05fRE9ORTsKPiA+ID4gKwo+ID4gPiAr CXNpbmstPmRhdGEuY2hhbm5lbF9lcV9kb25lID0gdHJ1ZTsKPiA+ID4gK30KPiA+ID4gKwo+ID4g PiArc3RhdGljIGJvb2wKPiA+ID4gK3NpbmtfZGV2aWNlX2dldF9saW5rX3N0YXR1cyhzdHJ1Y3Qg c2lua19kZXZpY2UgKnNpbmssCj4gPiA+ICsJCQkgICAgdWludDhfdCBsaW5rX3N0YXR1c1tEUF9M SU5LX1NUQVRVU19TSVpFXSkKPiA+ID4gK3sKPiA+ID4gKwlpZiAoIXNpbmstPmRhdGEuY3JfZG9u ZSkgewo+ID4gPiArCQlpZiAoIXNpbmtfZGV2aWNlX3JlcXVlc3RfaGlnaGVyX3ZvbHRhZ2Vfc3dp bmcoc2luaykpCj4gPiA+ICsJCQlzaW5rX2RldmljZV9tYXJrX2NyX2RvbmUoc2luayk7Cj4gPiA+ ICsJfSBlbHNlIGlmICghc2luay0+ZGF0YS5jaGFubmVsX2VxX2RvbmUpIHsKPiA+ID4gKwkJaWYg KCFzaW5rX2RldmljZV9yZXF1ZXN0X2hpZ2hlcl9wcmVfZW1waGFzaXMoc2luaykpCj4gPiA+ICsJ CQlzaW5rX2RldmljZV9tYXJrX2NoYW5uZWxfZXFfZG9uZShzaW5rKTsKPiA+ID4gKwl9Cj4gPiA+ ICsKPiA+ID4gKwltZW1jcHkobGlua19zdGF0dXMsIHNpbmstPmRhdGEuZHBjZCArIERQX0xBTkUw XzFfU1RBVFVTLAo+ID4gPiArCSAgICAgICBEUF9MSU5LX1NUQVRVU19TSVpFKTsKPiA+ID4gKwo+ ID4gPiArCXJldHVybiB0cnVlOwo+ID4gPiArfQo+ID4gPiArCj4gPiA+ICtzdGF0aWMgdm9pZAo+ ID4gPiArc2lua19kZXZpY2VfcmVzZXQoc3RydWN0IHNpbmtfZGV2aWNlICpzaW5rLCBpbnQgbGFu ZXMsIHVpbnQ4X3QgbGlua19idykKPiA+ID4gK3sKPiA+ID4gKwltZW1zZXQoJnNpbmstPmRhdGEs IDAsIHNpemVvZiBzaW5rLT5kYXRhKTsKPiA+ID4gKwlzaW5rLT5kYXRhLmRwY2RbRFBfTUFYX0xJ TktfUkFURV0gPSBsaW5rX2J3Owo+ID4gPiArCXNpbmstPmRhdGEuZHBjZFtEUF9NQVhfTEFORV9D T1VOVF0gPSBsYW5lczsKPiA+ID4gK30KPiA+ID4gKwo+ID4gPiArc3RhdGljIHN0cnVjdCBzaW5r X2RldmljZSBzaW1wbGVfc2luayA9IHsKPiA+ID4gKwkuZ2V0X2xpbmtfc3RhdHVzID0gc2lua19k ZXZpY2VfZ2V0X2xpbmtfc3RhdHVzLAo+ID4gPiArCS5kcGNkX3dyaXRlID0gc2lua19kZXZpY2Vf ZHBjZF93cml0ZSwKPiA+ID4gK307Cj4gPiA+ICsKPiA+ID4gKy8qIEdsdWUgY29kZSAqLwo+ID4g PiArCj4gPiA+ICtzdHJ1Y3QgdGVzdF9pbnRlbF9kcCB7Cj4gPiA+ICsJc3RydWN0IGludGVsX2Rw IGRwOwo+ID4gPiArCXN0cnVjdCBzaW5rX2RldmljZSAqc2luazsKPiA+ID4gKwl1aW50OF90IGxp bmtfYnc7Cj4gPiA+ICsKPiA+ID4gKwl1aW50OF90IG1heF92b2x0YWdlOwo+ID4gPiArCXVpbnQ4 X3QgbWF4X3ByZV9lbXBoYXNpczsKPiA+ID4gK307Cj4gPiA+ICsKPiA+ID4gK3N0YXRpYyBzdHJ1 Y3QgdGVzdF9pbnRlbF9kcCAqCj4gPiA+ICt0b190ZXN0X2ludGVsX2RwKHN0cnVjdCBpbnRlbF9k cCAqZHApCj4gPiA+ICt7Cj4gPiA+ICsJcmV0dXJuIGNvbnRhaW5lcl9vZihkcCwgc3RydWN0IHRl c3RfaW50ZWxfZHAsIGRwKTsKPiA+ID4gK30KPiA+ID4gKwo+ID4gPiArdm9pZCBpbnRlbF9kcF9z ZXRfaWRsZV9saW5rX3RyYWluKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCj4gPiA+ICt7Cj4g PiA+ICt9Cj4gPiA+ICsKPiA+ID4gK2Jvb2wgaW50ZWxfZHBfc291cmNlX3N1cHBvcnRzX2hicjIo c3RydWN0IGludGVsX2RwICppbnRlbF9kcCkKPiA+ID4gK3sKPiA+ID4gKwlyZXR1cm4gZmFsc2U7 Cj4gPiA+ICt9Cj4gPiA+ICsKPiA+ID4gK2Jvb2wKPiA+ID4gK2ludGVsX2RwX2dldF9saW5rX3N0 YXR1cyhzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwLCB1aW50OF90IGxpbmtfc3RhdHVzW0RQX0xJ TktfU1RBVFVTX1NJWkVdKQo+ID4gPiArewo+ID4gPiArCXN0cnVjdCBzaW5rX2RldmljZSAqc2lu ayA9IHRvX3Rlc3RfaW50ZWxfZHAoaW50ZWxfZHApLT5zaW5rOwo+ID4gPiArCXJldHVybiBzaW5r LT5nZXRfbGlua19zdGF0dXMoc2luaywgbGlua19zdGF0dXMpOwo+ID4gPiArfQo+ID4gPiArCj4g PiA+ICt2b2lkCj4gPiA+ICtpbnRlbF9kcF91cGRhdGVfc2lnbmFsX2xldmVscyhzdHJ1Y3QgaW50 ZWxfZHAgKmludGVsX2RwKQo+ID4gPiArewo+ID4gPiArfQo+ID4gPiArCj4gPiA+ICt2b2lkIGlu dGVsX2RwX2NvbXB1dGVfcmF0ZShzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwLCBpbnQgcG9ydF9j bG9jaywKPiA+ID4gKwkJCSAgIHVpbnQ4X3QgKmxpbmtfYncsIHVpbnQ4X3QgKnJhdGVfc2VsZWN0 KQo+ID4gPiArewo+ID4gPiArCSpsaW5rX2J3ID0gdG9fdGVzdF9pbnRlbF9kcChpbnRlbF9kcCkt PmxpbmtfYnc7Cj4gPiA+ICsJKnJhdGVfc2VsZWN0ID0gMDsKPiA+ID4gK30KPiA+ID4gKwo+ID4g PiArdm9pZAo+ID4gPiAraW50ZWxfZHBfcHJvZ3JhbV9saW5rX3RyYWluaW5nX3BhdHRlcm4oc3Ry dWN0IGludGVsX2RwICppbnRlbF9kcCwKPiA+ID4gKwkJCQkgICAgICAgdWludDhfdCBkcF90cmFp bl9wYXQpCj4gPiA+ICt7Cj4gPiA+ICt9Cj4gPiA+ICsKPiA+ID4gK3VpbnQ4X3QKPiA+ID4gK2lu dGVsX2RwX3ZvbHRhZ2VfbWF4KHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCj4gPiA+ICt7Cj4g PiA+ICsJcmV0dXJuIHRvX3Rlc3RfaW50ZWxfZHAoaW50ZWxfZHApLT5tYXhfdm9sdGFnZSA8PAo+ ID4gPiArCQlEUF9UUkFJTl9WT0xUQUdFX1NXSU5HX1NISUZUOwo+ID4gPiArfQo+ID4gPiArCj4g PiA+ICt1aW50OF90Cj4gPiA+ICtpbnRlbF9kcF9wcmVfZW1waGFzaXNfbWF4KHN0cnVjdCBpbnRl bF9kcCAqaW50ZWxfZHAsIHVpbnQ4X3Qgdm9sdGFnZV9zd2luZykKPiA+ID4gK3sKPiA+ID4gKwly ZXR1cm4gdG9fdGVzdF9pbnRlbF9kcChpbnRlbF9kcCktPm1heF9wcmVfZW1waGFzaXMgPDwKPiA+ ID4gKwkJRFBfVFJBSU5fUFJFX0VNUEhBU0lTX1NISUZUOwo+ID4gPiArfQo+ID4gPiArCj4gPiA+ ICtzc2l6ZV90IGRybV9kcF9kcGNkX3dyaXRlKHN0cnVjdCBkcm1fZHBfYXV4ICphdXgsIHVuc2ln bmVkIGludCBvZmZzZXQsCj4gPiA+ICsJCQkgIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNpemUpCj4g PiA+ICt7Cj4gPiA+ICsJc3RydWN0IGludGVsX2RwICppbnRlbF9kcCA9Cj4gPiA+ICsJCWNvbnRh aW5lcl9vZihhdXgsIHN0cnVjdCBpbnRlbF9kcCwgYXV4KTsKPiA+ID4gKwlzdHJ1Y3Qgc2lua19k ZXZpY2UgKnNpbmsgPSB0b190ZXN0X2ludGVsX2RwKGludGVsX2RwKS0+c2luazsKPiA+ID4gKwo+ ID4gPiArCXJldHVybiBzaW5rLT5kcGNkX3dyaXRlKHNpbmssIG9mZnNldCwgYnVmZmVyLCBzaXpl KTsKPiA+ID4gK30KPiA+ID4gKwo+ID4gPiArLyogLS0tICovCj4gPiA+ICsKPiA+ID4gK3N0YXRp YyBzdHJ1Y3QgdGVzdF9pbnRlbF9kcCB0ZXN0X2RwOwo+ID4gPiArCj4gPiA+ICtzdGF0aWMgdm9p ZAo+ID4gPiArZG9fdGVzdChzdHJ1Y3Qgc2lua19kZXZpY2UgKnNpbmssIGludCBsYW5lcywgdWlu dDhfdCBsaW5rX2J3LAo+ID4gPiArCSAgICAgdWludDhfdCBtYXhfdm9sdGFnZSwgdWludDhfdCBt YXhfcHJlX2VtcGhhc2lzKQo+ID4gPiArewo+ID4gPiArCWludCBsYW5lOwo+ID4gPiArCj4gPiA+ ICsJbWVtc2V0KCZ0ZXN0X2RwLCAwLCBzaXplb2YgdGVzdF9kcCk7Cj4gPiA+ICsJdGVzdF9kcC5k cC5sYW5lX2NvdW50ID0gbGFuZXM7Cj4gPiA+ICsJdGVzdF9kcC5saW5rX2J3ID0gbGlua19idzsK PiA+ID4gKwl0ZXN0X2RwLnNpbmsgPSBzaW5rOwo+ID4gPiArCXRlc3RfZHAubWF4X3ZvbHRhZ2Ug PQo+ID4gPiArCQltYXhfdm9sdGFnZSA+PiBEUF9UUkFJTl9WT0xUQUdFX1NXSU5HX1NISUZUOwo+ ID4gPiArCXRlc3RfZHAubWF4X3ByZV9lbXBoYXNpcyA9Cj4gPiA+ICsJCW1heF9wcmVfZW1waGFz aXMgPj4gRFBfVFJBSU5fUFJFX0VNUEhBU0lTX1NISUZUOwo+ID4gPiArCj4gPiA+ICsJc2lua19k ZXZpY2VfcmVzZXQoc2luaywgbGFuZXMsIGxpbmtfYncpOwo+ID4gPiArCj4gPiA+ICsJaW50ZWxf ZHBfc3RhcnRfbGlua190cmFpbigmdGVzdF9kcC5kcCk7Cj4gPiA+ICsJaW50ZWxfZHBfc3RvcF9s aW5rX3RyYWluKCZ0ZXN0X2RwLmRwKTsKPiA+ID4gKwo+ID4gPiArCWFzc2VydChzaW5rLT5kYXRh LmNyX2RvbmUpOwo+ID4gPiArCWFzc2VydChzaW5rLT5kYXRhLmNoYW5uZWxfZXFfZG9uZSk7Cj4g PiA+ICsKPiA+ID4gKwlmb3IgKGxhbmUgPSAwOyBsYW5lIDwgdGVzdF9kcC5kcC5sYW5lX2NvdW50 OyBsYW5lKyspIHsKPiA+ID4gKwkJdWludDhfdCBjdXJfdiA9IHNpbmtfZGV2aWNlX2dldF92b2x0 YWdlX3N3aW5nKHNpbmssIGxhbmUpOwo+ID4gPiArCQl1aW50OF90IGN1cl9wID0gc2lua19kZXZp Y2VfZ2V0X3ByZV9lbXBoYXNpc19sZXZlbChzaW5rLCBsYW5lKTsKPiA+ID4gKwo+ID4gPiArCQlh c3NlcnQoY3VyX3YgPT0gdGVzdF9kcC5tYXhfdm9sdGFnZSk7Cj4gPiA+ICsJCWFzc2VydChjdXJf cCA9PSB0ZXN0X2RwLm1heF9wcmVfZW1waGFzaXMpOwo+ID4gPiArCX0KPiA+ID4gK30KPiA+ID4g Kwo+ID4gPiAraW50IHRlc3RfbGFuZXNbXSA9IHsKPiA+ID4gKwkxLCAyLCA0LAo+ID4gPiArfTsK PiA+ID4gKwo+ID4gPiArdWludDhfdCB0ZXN0X2J3W10gPSB7Cj4gPiA+ICsJRFBfTElOS19CV18x XzYyLAo+ID4gPiArCURQX0xJTktfQldfMl83LAo+ID4gPiArfTsKPiA+ID4gKwo+ID4gPiArdWlu dDhfdCB0ZXN0X21heF92b2x0YWdlW10gPSB7Cj4gPiA+ICsJRFBfVFJBSU5fVk9MVEFHRV9TV0lO R19MRVZFTF8wLAo+ID4gPiArCURQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfTEVWRUxfMSwKPiA+ID4g KwlEUF9UUkFJTl9WT0xUQUdFX1NXSU5HX0xFVkVMXzIsCj4gPiA+ICsJRFBfVFJBSU5fVk9MVEFH RV9TV0lOR19MRVZFTF8zLAo+ID4gPiArfTsKPiA+ID4gKwo+ID4gPiArdWludDhfdCB0ZXN0X21h eF9wcmVfZW1waGFzaXNbXSA9IHsKPiA+ID4gKwlEUF9UUkFJTl9QUkVfRU1QSF9MRVZFTF8wLAo+ ID4gPiArCURQX1RSQUlOX1BSRV9FTVBIX0xFVkVMXzEsCj4gPiA+ICsJRFBfVFJBSU5fUFJFX0VN UEhfTEVWRUxfMiwKPiA+ID4gKwlEUF9UUkFJTl9QUkVfRU1QSF9MRVZFTF8zLAo+ID4gPiArfTsK PiA+ID4gKwo+ID4gPiArdm9pZAo+ID4gPiArcnVuX3Rlc3Qodm9pZCkKPiA+ID4gK3sKPiA+ID4g KwlpbnQgbGFuZSwgYncsIHZvbHRhZ2UsIGVtcGg7Cj4gPiA+ICsKPiA+ID4gKwlmb3IgKGxhbmUg PSAwOyBsYW5lIDwgQVJSQVlfU0laRSh0ZXN0X2xhbmVzKTsgbGFuZSsrKQo+ID4gPiArCWZvciAo YncgPSAwOyBidyA8IEFSUkFZX1NJWkUodGVzdF9idyk7IGJ3KyspCj4gPiA+ICsJZm9yICh2b2x0 YWdlID0gMDsgdm9sdGFnZSA8IEFSUkFZX1NJWkUodGVzdF9tYXhfdm9sdGFnZSk7IHZvbHRhZ2Ur KykKPiA+ID4gKwlmb3IgKGVtcGggPSAwOyBlbXBoIDwgQVJSQVlfU0laRSh0ZXN0X21heF9wcmVf ZW1waGFzaXMpOyBlbXBoKyspIHsKPiA+ID4gKwkJRFJNX0RFQlVHX0tNUygibCVkLWJ3JWQtdiVk LXBlJWQiLAo+ID4gPiArCQkJICAgICAgdGVzdF9sYW5lc1tsYW5lXSwKPiA+ID4gKwkJCSAgICAg IHRlc3RfYndbYnddLAo+ID4gPiArCQkJICAgICAgdGVzdF9tYXhfdm9sdGFnZVt2b2x0YWdlXSwK PiA+ID4gKwkJCSAgICAgIHRlc3RfbWF4X3ByZV9lbXBoYXNpc1tlbXBoXSk7Cj4gPiA+ICsJCWRv X3Rlc3QoJnNpbXBsZV9zaW5rLAo+ID4gPiArCQkJdGVzdF9sYW5lc1tsYW5lXSwKPiA+ID4gKwkJ CXRlc3RfYndbYnddLAo+ID4gPiArCQkJdGVzdF9tYXhfdm9sdGFnZVt2b2x0YWdlXSwKPiA+ID4g KwkJCXRlc3RfbWF4X3ByZV9lbXBoYXNpc1tlbXBoXSk7Cj4gPiA+ICsJfQo+ID4gPiArfQpfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFp bGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cDovL2xpc3RzLmZy ZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=