From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Thulasimani, Sivakumar" Subject: Re: [PATCH 05/22] drm/i915: Move generic link training code to a separate file Date: Sun, 25 Oct 2015 08:07:45 +0530 Message-ID: <562C4079.7060706@intel.com> References: <1445594525-7174-1-git-send-email-ander.conselvan.de.oliveira@intel.com> <1445594525-7174-6-git-send-email-ander.conselvan.de.oliveira@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by gabe.freedesktop.org (Postfix) with ESMTP id 42FAB6E7FB for ; Sat, 24 Oct 2015 19:37:49 -0700 (PDT) In-Reply-To: <1445594525-7174-6-git-send-email-ander.conselvan.de.oliveira@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Ander Conselvan de Oliveira , intel-gfx@lists.freedesktop.org, jim.bride@linux.intel.com List-Id: intel-gfx@lists.freedesktop.org UmV2aWV3ZWQtYnk6IFNpdmFrdW1hciBUaHVsYXNpbWFuaSA8c2l2YWt1bWFyLnRodWxhc2ltYW5p QGludGVsLmNvbT4KCk9uIDEwLzIzLzIwMTUgMzozMSBQTSwgQW5kZXIgQ29uc2VsdmFuIGRlIE9s aXZlaXJhIHdyb3RlOgo+IE5vIGZ1bmN0aW9uYWwgY2hhbmdlcywganVzdCBtb3ZpbmcgY29kZSBh cm91bmQuCj4KPiB2MjogUmViYXNlCj4KPiBTaWduZWQtb2ZmLWJ5OiBBbmRlciBDb25zZWx2YW4g ZGUgT2xpdmVpcmEgPGFuZGVyLmNvbnNlbHZhbi5kZS5vbGl2ZWlyYUBpbnRlbC5jb20+Cj4gLS0t Cj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZSAgICAgICAgICAgICAgICAgfCAgIDEg Kwo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHAuYyAgICAgICAgICAgICAgIHwgMzIx ICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X2RwX2xpbmtfdHJhaW5pbmcuYyB8IDMyNyArKysrKysrKysrKysrKysrKysrKysrKysrKwo+ICAg ZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmggICAgICAgICAgICAgIHwgIDE2ICsrCj4g ICA0IGZpbGVzIGNoYW5nZWQsIDM1MyBpbnNlcnRpb25zKCspLCAzMTIgZGVsZXRpb25zKC0pCj4g ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHBfbGlua190 cmFpbmluZy5jCj4KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQo+IGluZGV4IDQ0ZDI5MGEuLjA4NTFkZTA3 IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCj4gKysrIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKPiBAQCAtNzcsNiArNzcsNyBAQCBpOTE1LXkgKz0g ZHZvX2NoNzAxNy5vIFwKPiAgIAkgIGR2b190ZnA0MTAubyBcCj4gICAJICBpbnRlbF9jcnQubyBc Cj4gICAJICBpbnRlbF9kZGkubyBcCj4gKwkgIGludGVsX2RwX2xpbmtfdHJhaW5pbmcubyBcCj4g ICAJICBpbnRlbF9kcF9tc3QubyBcCj4gICAJICBpbnRlbF9kcC5vIFwKPiAgIAkgIGludGVsX2Rz aS5vIFwKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHAuYyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwLmMKPiBpbmRleCA0ZmZiMmUzLi40Yjg4ODIzIDEw MDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwLmMKPiArKysgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcC5jCj4gQEAgLTExODksNyArMTE4OSw3IEBAIGludGVs X2RwX3NpbmtfcmF0ZXMoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCwgY29uc3QgaW50ICoqc2lu a19yYXRlcykKPiAgIAlyZXR1cm4gKGludGVsX2RwX21heF9saW5rX2J3KGludGVsX2RwKSA+PiAz KSArIDE7Cj4gICB9Cj4gICAKPiAtc3RhdGljIGJvb2wgaW50ZWxfZHBfc291cmNlX3N1cHBvcnRz X2hicjIoc3RydWN0IGRybV9kZXZpY2UgKmRldikKPiArYm9vbCBpbnRlbF9kcF9zb3VyY2Vfc3Vw cG9ydHNfaGJyMihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+ICAgewo+ICAgCS8qIFdhRGlzYWJs ZUhCUjI6c2tsICovCj4gICAJaWYgKElTX1NLTF9SRVZJRChkZXYsIDAsIFNLTF9SRVZJRF9CMCkp Cj4gQEAgLTEzNjUsOCArMTM2NSw4IEBAIGludCBpbnRlbF9kcF9yYXRlX3NlbGVjdChzdHJ1Y3Qg aW50ZWxfZHAgKmludGVsX2RwLCBpbnQgcmF0ZSkKPiAgIAlyZXR1cm4gcmF0ZV90b19pbmRleChy YXRlLCBpbnRlbF9kcC0+c2lua19yYXRlcyk7Cj4gICB9Cj4gICAKPiAtc3RhdGljIHZvaWQgaW50 ZWxfZHBfY29tcHV0ZV9yYXRlKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAsIGludCBwb3J0X2Ns b2NrLAo+IC0JCQkJICB1aW50OF90ICpsaW5rX2J3LCB1aW50OF90ICpyYXRlX3NlbGVjdCkKPiAr dm9pZCBpbnRlbF9kcF9jb21wdXRlX3JhdGUoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCwgaW50 IHBvcnRfY2xvY2ssCj4gKwkJCSAgIHVpbnQ4X3QgKmxpbmtfYncsIHVpbnQ4X3QgKnJhdGVfc2Vs ZWN0KQo+ICAgewo+ICAgCWlmIChpbnRlbF9kcC0+bnVtX3NpbmtfcmF0ZXMpIHsKPiAgIAkJKmxp bmtfYncgPSAwOwo+IEBAIC0zMDQ2LDcgKzMwNDYsNyBAQCBpbnRlbF9kcF9kcGNkX3JlYWRfd2Fr ZShzdHJ1Y3QgZHJtX2RwX2F1eCAqYXV4LCB1bnNpZ25lZCBpbnQgb2Zmc2V0LAo+ICAgICogRmV0 Y2ggQVVYIENIIHJlZ2lzdGVycyAweDIwMiAtIDB4MjA3IHdoaWNoIGNvbnRhaW4KPiAgICAqIGxp bmsgc3RhdHVzIGluZm9ybWF0aW9uCj4gICAgKi8KPiAtc3RhdGljIGJvb2wKPiArYm9vbAo+ICAg aW50ZWxfZHBfZ2V0X2xpbmtfc3RhdHVzKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAsIHVpbnQ4 X3QgbGlua19zdGF0dXNbRFBfTElOS19TVEFUVVNfU0laRV0pCj4gICB7Cj4gICAJcmV0dXJuIGlu dGVsX2RwX2RwY2RfcmVhZF93YWtlKCZpbnRlbF9kcC0+YXV4LAo+IEBAIC0zMDU2LDcgKzMwNTYs NyBAQCBpbnRlbF9kcF9nZXRfbGlua19zdGF0dXMoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCwg dWludDhfdCBsaW5rX3N0YXR1c1tEUF9MSU5LXwo+ICAgfQo+ICAgCj4gICAvKiBUaGVzZSBhcmUg c291cmNlLXNwZWNpZmljIHZhbHVlcy4gKi8KPiAtc3RhdGljIHVpbnQ4X3QKPiArdWludDhfdAo+ ICAgaW50ZWxfZHBfdm9sdGFnZV9tYXgoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkKPiAgIHsK PiAgIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gaW50ZWxfZHBfdG9fZGV2KGludGVsX2RwKTsK PiBAQCAtMzA3OSw3ICszMDc5LDcgQEAgaW50ZWxfZHBfdm9sdGFnZV9tYXgoc3RydWN0IGludGVs X2RwICppbnRlbF9kcCkKPiAgIAkJcmV0dXJuIERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfTEVWRUxf MjsKPiAgIH0KPiAgIAo+IC1zdGF0aWMgdWludDhfdAo+ICt1aW50OF90Cj4gICBpbnRlbF9kcF9w cmVfZW1waGFzaXNfbWF4KHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAsIHVpbnQ4X3Qgdm9sdGFn ZV9zd2luZykKPiAgIHsKPiAgIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gaW50ZWxfZHBfdG9f ZGV2KGludGVsX2RwKTsKPiBAQCAtMzQyMSwzOCArMzQyMSw2IEBAIHN0YXRpYyB1aW50MzJfdCBj aHZfc2lnbmFsX2xldmVscyhzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQo+ICAgCXJldHVybiAw Owo+ICAgfQo+ICAgCj4gLXN0YXRpYyB2b2lkCj4gLWludGVsX2dldF9hZGp1c3RfdHJhaW4oc3Ry dWN0IGludGVsX2RwICppbnRlbF9kcCwKPiAtCQkgICAgICAgY29uc3QgdWludDhfdCBsaW5rX3N0 YXR1c1tEUF9MSU5LX1NUQVRVU19TSVpFXSkKPiAtewo+IC0JdWludDhfdCB2ID0gMDsKPiAtCXVp bnQ4X3QgcCA9IDA7Cj4gLQlpbnQgbGFuZTsKPiAtCXVpbnQ4X3Qgdm9sdGFnZV9tYXg7Cj4gLQl1 aW50OF90IHByZWVtcGhfbWF4Owo+IC0KPiAtCWZvciAobGFuZSA9IDA7IGxhbmUgPCBpbnRlbF9k cC0+bGFuZV9jb3VudDsgbGFuZSsrKSB7Cj4gLQkJdWludDhfdCB0aGlzX3YgPSBkcm1fZHBfZ2V0 X2FkanVzdF9yZXF1ZXN0X3ZvbHRhZ2UobGlua19zdGF0dXMsIGxhbmUpOwo+IC0JCXVpbnQ4X3Qg dGhpc19wID0gZHJtX2RwX2dldF9hZGp1c3RfcmVxdWVzdF9wcmVfZW1waGFzaXMobGlua19zdGF0 dXMsIGxhbmUpOwo+IC0KPiAtCQlpZiAodGhpc192ID4gdikKPiAtCQkJdiA9IHRoaXNfdjsKPiAt CQlpZiAodGhpc19wID4gcCkKPiAtCQkJcCA9IHRoaXNfcDsKPiAtCX0KPiAtCj4gLQl2b2x0YWdl X21heCA9IGludGVsX2RwX3ZvbHRhZ2VfbWF4KGludGVsX2RwKTsKPiAtCWlmICh2ID49IHZvbHRh Z2VfbWF4KQo+IC0JCXYgPSB2b2x0YWdlX21heCB8IERQX1RSQUlOX01BWF9TV0lOR19SRUFDSEVE Owo+IC0KPiAtCXByZWVtcGhfbWF4ID0gaW50ZWxfZHBfcHJlX2VtcGhhc2lzX21heChpbnRlbF9k cCwgdik7Cj4gLQlpZiAocCA+PSBwcmVlbXBoX21heCkKPiAtCQlwID0gcHJlZW1waF9tYXggfCBE UF9UUkFJTl9NQVhfUFJFX0VNUEhBU0lTX1JFQUNIRUQ7Cj4gLQo+IC0JZm9yIChsYW5lID0gMDsg bGFuZSA8IDQ7IGxhbmUrKykKPiAtCQlpbnRlbF9kcC0+dHJhaW5fc2V0W2xhbmVdID0gdiB8IHA7 Cj4gLX0KPiAtCj4gICBzdGF0aWMgdWludDMyX3QKPiAgIGdlbjRfc2lnbmFsX2xldmVscyh1aW50 OF90IHRyYWluX3NldCkKPiAgIHsKPiBAQCAtMzU1MCw3ICszNTE4LDcgQEAgZ2VuN19lZHBfc2ln bmFsX2xldmVscyh1aW50OF90IHRyYWluX3NldCkKPiAgIAl9Cj4gICB9Cj4gICAKPiAtc3RhdGlj IHZvaWQKPiArdm9pZAo+ICAgaW50ZWxfZHBfc2V0X3NpZ25hbF9sZXZlbHMoc3RydWN0IGludGVs X2RwICppbnRlbF9kcCkKPiAgIHsKPiAgIAlzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0ICppbnRl bF9kaWdfcG9ydCA9IGRwX3RvX2RpZ19wb3J0KGludGVsX2RwKTsKPiBAQCAtMzU5Nyw3ICszNTY1 LDcgQEAgaW50ZWxfZHBfc2V0X3NpZ25hbF9sZXZlbHMoc3RydWN0IGludGVsX2RwICppbnRlbF9k cCkKPiAgIAlQT1NUSU5HX1JFQUQoaW50ZWxfZHAtPm91dHB1dF9yZWcpOwo+ICAgfQo+ICAgCj4g LXN0YXRpYyB2b2lkCj4gK3ZvaWQKPiAgIGludGVsX2RwX3Byb2dyYW1fbGlua190cmFpbmluZ19w YXR0ZXJuKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAsCj4gICAJCQkJICAgICAgIHVpbnQ4X3Qg ZHBfdHJhaW5fcGF0KQo+ICAgewo+IEBAIC0zNjExLDU2ICszNTc5LDcgQEAgaW50ZWxfZHBfcHJv Z3JhbV9saW5rX3RyYWluaW5nX3BhdHRlcm4oc3RydWN0IGludGVsX2RwICppbnRlbF9kcCwKPiAg IAlQT1NUSU5HX1JFQUQoaW50ZWxfZHAtPm91dHB1dF9yZWcpOwo+ICAgfQo+ICAgCj4gLXN0YXRp YyBib29sCj4gLWludGVsX2RwX3NldF9saW5rX3RyYWluKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxf ZHAsCj4gLQkJCXVpbnQ4X3QgZHBfdHJhaW5fcGF0KQo+IC17Cj4gLQl1aW50OF90IGJ1ZltzaXpl b2YoaW50ZWxfZHAtPnRyYWluX3NldCkgKyAxXTsKPiAtCWludCByZXQsIGxlbjsKPiAtCj4gLQlp bnRlbF9kcF9wcm9ncmFtX2xpbmtfdHJhaW5pbmdfcGF0dGVybihpbnRlbF9kcCwgZHBfdHJhaW5f cGF0KTsKPiAtCj4gLQlidWZbMF0gPSBkcF90cmFpbl9wYXQ7Cj4gLQlpZiAoKGRwX3RyYWluX3Bh dCAmIERQX1RSQUlOSU5HX1BBVFRFUk5fTUFTSykgPT0KPiAtCSAgICBEUF9UUkFJTklOR19QQVRU RVJOX0RJU0FCTEUpIHsKPiAtCQkvKiBkb24ndCB3cml0ZSBEUF9UUkFJTklOR19MQU5FeF9TRVQg b24gZGlzYWJsZSAqLwo+IC0JCWxlbiA9IDE7Cj4gLQl9IGVsc2Ugewo+IC0JCS8qIERQX1RSQUlO SU5HX0xBTkV4X1NFVCBmb2xsb3cgRFBfVFJBSU5JTkdfUEFUVEVSTl9TRVQgKi8KPiAtCQltZW1j cHkoYnVmICsgMSwgaW50ZWxfZHAtPnRyYWluX3NldCwgaW50ZWxfZHAtPmxhbmVfY291bnQpOwo+ IC0JCWxlbiA9IGludGVsX2RwLT5sYW5lX2NvdW50ICsgMTsKPiAtCX0KPiAtCj4gLQlyZXQgPSBk cm1fZHBfZHBjZF93cml0ZSgmaW50ZWxfZHAtPmF1eCwgRFBfVFJBSU5JTkdfUEFUVEVSTl9TRVQs Cj4gLQkJCQlidWYsIGxlbik7Cj4gLQo+IC0JcmV0dXJuIHJldCA9PSBsZW47Cj4gLX0KPiAtCj4g LXN0YXRpYyBib29sCj4gLWludGVsX2RwX3Jlc2V0X2xpbmtfdHJhaW4oc3RydWN0IGludGVsX2Rw ICppbnRlbF9kcCwKPiAtCQkJdWludDhfdCBkcF90cmFpbl9wYXQpCj4gLXsKPiAtCWlmICghaW50 ZWxfZHAtPnRyYWluX3NldF92YWxpZCkKPiAtCQltZW1zZXQoaW50ZWxfZHAtPnRyYWluX3NldCwg MCwgc2l6ZW9mKGludGVsX2RwLT50cmFpbl9zZXQpKTsKPiAtCWludGVsX2RwX3NldF9zaWduYWxf bGV2ZWxzKGludGVsX2RwKTsKPiAtCXJldHVybiBpbnRlbF9kcF9zZXRfbGlua190cmFpbihpbnRl bF9kcCwgZHBfdHJhaW5fcGF0KTsKPiAtfQo+IC0KPiAtc3RhdGljIGJvb2wKPiAtaW50ZWxfZHBf dXBkYXRlX2xpbmtfdHJhaW4oc3RydWN0IGludGVsX2RwICppbnRlbF9kcCkKPiAtewo+IC0JaW50 IHJldDsKPiAtCj4gLQlpbnRlbF9kcF9zZXRfc2lnbmFsX2xldmVscyhpbnRlbF9kcCk7Cj4gLQo+ IC0JcmV0ID0gZHJtX2RwX2RwY2Rfd3JpdGUoJmludGVsX2RwLT5hdXgsIERQX1RSQUlOSU5HX0xB TkUwX1NFVCwKPiAtCQkJCWludGVsX2RwLT50cmFpbl9zZXQsIGludGVsX2RwLT5sYW5lX2NvdW50 KTsKPiAtCj4gLQlyZXR1cm4gcmV0ID09IGludGVsX2RwLT5sYW5lX2NvdW50Owo+IC19Cj4gLQo+ IC1zdGF0aWMgdm9pZCBpbnRlbF9kcF9zZXRfaWRsZV9saW5rX3RyYWluKHN0cnVjdCBpbnRlbF9k cCAqaW50ZWxfZHApCj4gK3ZvaWQgaW50ZWxfZHBfc2V0X2lkbGVfbGlua190cmFpbihzdHJ1Y3Qg aW50ZWxfZHAgKmludGVsX2RwKQo+ICAgewo+ICAgCXN0cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQg KmludGVsX2RpZ19wb3J0ID0gZHBfdG9fZGlnX3BvcnQoaW50ZWxfZHApOwo+ICAgCXN0cnVjdCBk cm1fZGV2aWNlICpkZXYgPSBpbnRlbF9kaWdfcG9ydC0+YmFzZS5iYXNlLmRldjsKPiBAQCAtMzY5 MSwyMjggKzM2MTAsNiBAQCBzdGF0aWMgdm9pZCBpbnRlbF9kcF9zZXRfaWRsZV9saW5rX3RyYWlu KHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCj4gICAJCURSTV9FUlJPUigiVGltZWQgb3V0IHdh aXRpbmcgZm9yIERQIGlkbGUgcGF0dGVybnNcbiIpOwo+ICAgfQo+ICAgCj4gLS8qIEVuYWJsZSBj b3JyZXNwb25kaW5nIHBvcnQgYW5kIHN0YXJ0IHRyYWluaW5nIHBhdHRlcm4gMSAqLwo+IC1zdGF0 aWMgdm9pZAo+IC1pbnRlbF9kcF9saW5rX3RyYWluaW5nX2Nsb2NrX3JlY292ZXJ5KHN0cnVjdCBp bnRlbF9kcCAqaW50ZWxfZHApCj4gLXsKPiAtCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciA9 ICZkcF90b19kaWdfcG9ydChpbnRlbF9kcCktPmJhc2UuYmFzZTsKPiAtCXN0cnVjdCBkcm1fZGV2 aWNlICpkZXYgPSBlbmNvZGVyLT5kZXY7Cj4gLQlpbnQgaTsKPiAtCXVpbnQ4X3Qgdm9sdGFnZTsK PiAtCWludCB2b2x0YWdlX3RyaWVzLCBsb29wX3RyaWVzOwo+IC0JdWludDhfdCBsaW5rX2NvbmZp Z1syXTsKPiAtCXVpbnQ4X3QgbGlua19idywgcmF0ZV9zZWxlY3Q7Cj4gLQo+IC0JaWYgKEhBU19E REkoZGV2KSkKPiAtCQlpbnRlbF9kZGlfcHJlcGFyZV9saW5rX3JldHJhaW4oZW5jb2Rlcik7Cj4g LQo+IC0JaW50ZWxfZHBfY29tcHV0ZV9yYXRlKGludGVsX2RwLCBpbnRlbF9kcC0+bGlua19yYXRl LAo+IC0JCQkgICAgICAmbGlua19idywgJnJhdGVfc2VsZWN0KTsKPiAtCj4gLQkvKiBXcml0ZSB0 aGUgbGluayBjb25maWd1cmF0aW9uIGRhdGEgKi8KPiAtCWxpbmtfY29uZmlnWzBdID0gbGlua19i dzsKPiAtCWxpbmtfY29uZmlnWzFdID0gaW50ZWxfZHAtPmxhbmVfY291bnQ7Cj4gLQlpZiAoZHJt X2RwX2VuaGFuY2VkX2ZyYW1lX2NhcChpbnRlbF9kcC0+ZHBjZCkpCj4gLQkJbGlua19jb25maWdb MV0gfD0gRFBfTEFORV9DT1VOVF9FTkhBTkNFRF9GUkFNRV9FTjsKPiAtCWRybV9kcF9kcGNkX3dy aXRlKCZpbnRlbF9kcC0+YXV4LCBEUF9MSU5LX0JXX1NFVCwgbGlua19jb25maWcsIDIpOwo+IC0J aWYgKGludGVsX2RwLT5udW1fc2lua19yYXRlcykKPiAtCQlkcm1fZHBfZHBjZF93cml0ZSgmaW50 ZWxfZHAtPmF1eCwgRFBfTElOS19SQVRFX1NFVCwKPiAtCQkJCSAgJnJhdGVfc2VsZWN0LCAxKTsK PiAtCj4gLQlsaW5rX2NvbmZpZ1swXSA9IDA7Cj4gLQlsaW5rX2NvbmZpZ1sxXSA9IERQX1NFVF9B TlNJXzhCMTBCOwo+IC0JZHJtX2RwX2RwY2Rfd3JpdGUoJmludGVsX2RwLT5hdXgsIERQX0RPV05T UFJFQURfQ1RSTCwgbGlua19jb25maWcsIDIpOwo+IC0KPiAtCWludGVsX2RwLT5EUCB8PSBEUF9Q T1JUX0VOOwo+IC0KPiAtCS8qIGNsb2NrIHJlY292ZXJ5ICovCj4gLQlpZiAoIWludGVsX2RwX3Jl c2V0X2xpbmtfdHJhaW4oaW50ZWxfZHAsCj4gLQkJCQkgICAgICAgRFBfVFJBSU5JTkdfUEFUVEVS Tl8xIHwKPiAtCQkJCSAgICAgICBEUF9MSU5LX1NDUkFNQkxJTkdfRElTQUJMRSkpIHsKPiAtCQlE Uk1fRVJST1IoImZhaWxlZCB0byBlbmFibGUgbGluayB0cmFpbmluZ1xuIik7Cj4gLQkJcmV0dXJu Owo+IC0JfQo+IC0KPiAtCXZvbHRhZ2UgPSAweGZmOwo+IC0Jdm9sdGFnZV90cmllcyA9IDA7Cj4g LQlsb29wX3RyaWVzID0gMDsKPiAtCWZvciAoOzspIHsKPiAtCQl1aW50OF90IGxpbmtfc3RhdHVz W0RQX0xJTktfU1RBVFVTX1NJWkVdOwo+IC0KPiAtCQlkcm1fZHBfbGlua190cmFpbl9jbG9ja19y ZWNvdmVyeV9kZWxheShpbnRlbF9kcC0+ZHBjZCk7Cj4gLQkJaWYgKCFpbnRlbF9kcF9nZXRfbGlu a19zdGF0dXMoaW50ZWxfZHAsIGxpbmtfc3RhdHVzKSkgewo+IC0JCQlEUk1fRVJST1IoImZhaWxl ZCB0byBnZXQgbGluayBzdGF0dXNcbiIpOwo+IC0JCQlicmVhazsKPiAtCQl9Cj4gLQo+IC0JCWlm IChkcm1fZHBfY2xvY2tfcmVjb3Zlcnlfb2sobGlua19zdGF0dXMsIGludGVsX2RwLT5sYW5lX2Nv dW50KSkgewo+IC0JCQlEUk1fREVCVUdfS01TKCJjbG9jayByZWNvdmVyeSBPS1xuIik7Cj4gLQkJ CWJyZWFrOwo+IC0JCX0KPiAtCj4gLQkJLyoKPiAtCQkgKiBpZiB3ZSB1c2VkIHByZXZpb3VzbHkg dHJhaW5lZCB2b2x0YWdlIGFuZCBwcmUtZW1waGFzaXMgdmFsdWVzCj4gLQkJICogYW5kIHdlIGRv bid0IGdldCBjbG9jayByZWNvdmVyeSwgcmVzZXQgbGluayB0cmFpbmluZyB2YWx1ZXMKPiAtCQkg Ki8KPiAtCQlpZiAoaW50ZWxfZHAtPnRyYWluX3NldF92YWxpZCkgewo+IC0JCQlEUk1fREVCVUdf S01TKCJjbG9jayByZWNvdmVyeSBub3Qgb2ssIHJlc2V0Iik7Cj4gLQkJCS8qIGNsZWFyIHRoZSBm bGFnIGFzIHdlIGFyZSBub3QgcmV1c2luZyB0cmFpbiBzZXQgKi8KPiAtCQkJaW50ZWxfZHAtPnRy YWluX3NldF92YWxpZCA9IGZhbHNlOwo+IC0JCQlpZiAoIWludGVsX2RwX3Jlc2V0X2xpbmtfdHJh aW4oaW50ZWxfZHAsCj4gLQkJCQkJCSAgICAgICBEUF9UUkFJTklOR19QQVRURVJOXzEgfAo+IC0J CQkJCQkgICAgICAgRFBfTElOS19TQ1JBTUJMSU5HX0RJU0FCTEUpKSB7Cj4gLQkJCQlEUk1fRVJS T1IoImZhaWxlZCB0byBlbmFibGUgbGluayB0cmFpbmluZ1xuIik7Cj4gLQkJCQlyZXR1cm47Cj4g LQkJCX0KPiAtCQkJY29udGludWU7Cj4gLQkJfQo+IC0KPiAtCQkvKiBDaGVjayB0byBzZWUgaWYg d2UndmUgdHJpZWQgdGhlIG1heCB2b2x0YWdlICovCj4gLQkJZm9yIChpID0gMDsgaSA8IGludGVs X2RwLT5sYW5lX2NvdW50OyBpKyspCj4gLQkJCWlmICgoaW50ZWxfZHAtPnRyYWluX3NldFtpXSAm IERQX1RSQUlOX01BWF9TV0lOR19SRUFDSEVEKSA9PSAwKQo+IC0JCQkJYnJlYWs7Cj4gLQkJaWYg KGkgPT0gaW50ZWxfZHAtPmxhbmVfY291bnQpIHsKPiAtCQkJKytsb29wX3RyaWVzOwo+IC0JCQlp ZiAobG9vcF90cmllcyA9PSA1KSB7Cj4gLQkJCQlEUk1fRVJST1IoInRvbyBtYW55IGZ1bGwgcmV0 cmllcywgZ2l2ZSB1cFxuIik7Cj4gLQkJCQlicmVhazsKPiAtCQkJfQo+IC0JCQlpbnRlbF9kcF9y ZXNldF9saW5rX3RyYWluKGludGVsX2RwLAo+IC0JCQkJCQkgIERQX1RSQUlOSU5HX1BBVFRFUk5f MSB8Cj4gLQkJCQkJCSAgRFBfTElOS19TQ1JBTUJMSU5HX0RJU0FCTEUpOwo+IC0JCQl2b2x0YWdl X3RyaWVzID0gMDsKPiAtCQkJY29udGludWU7Cj4gLQkJfQo+IC0KPiAtCQkvKiBDaGVjayB0byBz ZWUgaWYgd2UndmUgdHJpZWQgdGhlIHNhbWUgdm9sdGFnZSA1IHRpbWVzICovCj4gLQkJaWYgKChp bnRlbF9kcC0+dHJhaW5fc2V0WzBdICYgRFBfVFJBSU5fVk9MVEFHRV9TV0lOR19NQVNLKSA9PSB2 b2x0YWdlKSB7Cj4gLQkJCSsrdm9sdGFnZV90cmllczsKPiAtCQkJaWYgKHZvbHRhZ2VfdHJpZXMg PT0gNSkgewo+IC0JCQkJRFJNX0VSUk9SKCJ0b28gbWFueSB2b2x0YWdlIHJldHJpZXMsIGdpdmUg dXBcbiIpOwo+IC0JCQkJYnJlYWs7Cj4gLQkJCX0KPiAtCQl9IGVsc2UKPiAtCQkJdm9sdGFnZV90 cmllcyA9IDA7Cj4gLQkJdm9sdGFnZSA9IGludGVsX2RwLT50cmFpbl9zZXRbMF0gJiBEUF9UUkFJ Tl9WT0xUQUdFX1NXSU5HX01BU0s7Cj4gLQo+IC0JCS8qIFVwZGF0ZSB0cmFpbmluZyBzZXQgYXMg cmVxdWVzdGVkIGJ5IHRhcmdldCAqLwo+IC0JCWludGVsX2dldF9hZGp1c3RfdHJhaW4oaW50ZWxf ZHAsIGxpbmtfc3RhdHVzKTsKPiAtCQlpZiAoIWludGVsX2RwX3VwZGF0ZV9saW5rX3RyYWluKGlu dGVsX2RwKSkgewo+IC0JCQlEUk1fRVJST1IoImZhaWxlZCB0byB1cGRhdGUgbGluayB0cmFpbmlu Z1xuIik7Cj4gLQkJCWJyZWFrOwo+IC0JCX0KPiAtCX0KPiAtfQo+IC0KPiAtc3RhdGljIHZvaWQK PiAtaW50ZWxfZHBfbGlua190cmFpbmluZ19jaGFubmVsX2VxdWFsaXphdGlvbihzdHJ1Y3QgaW50 ZWxfZHAgKmludGVsX2RwKQo+IC17Cj4gLQlzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0ICpkaWdf cG9ydCA9IGRwX3RvX2RpZ19wb3J0KGludGVsX2RwKTsKPiAtCXN0cnVjdCBkcm1fZGV2aWNlICpk ZXYgPSBkaWdfcG9ydC0+YmFzZS5iYXNlLmRldjsKPiAtCWJvb2wgY2hhbm5lbF9lcSA9IGZhbHNl Owo+IC0JaW50IHRyaWVzLCBjcl90cmllczsKPiAtCXVpbnQzMl90IHRyYWluaW5nX3BhdHRlcm4g PSBEUF9UUkFJTklOR19QQVRURVJOXzI7Cj4gLQo+IC0JLyoKPiAtCSAqIFRyYWluaW5nIFBhdHRl cm4gMyBmb3IgSEJSMiBvciAxLjIgZGV2aWNlcyB0aGF0IHN1cHBvcnQgaXQuCj4gLQkgKgo+IC0J ICogSW50ZWwgcGxhdGZvcm1zIHRoYXQgc3VwcG9ydCBIQlIyIGFsc28gc3VwcG9ydCBUUFMzLiBU UFMzIHN1cHBvcnQgaXMKPiAtCSAqIGFsc28gbWFuZGF0b3J5IGZvciBkb3duc3RyZWFtIGRldmlj ZXMgdGhhdCBzdXBwb3J0IEhCUjIuCj4gLQkgKgo+IC0JICogRHVlIHRvIFdhRGlzYWJsZUhCUjIg U0tMIDwgQjAgaXMgdGhlIG9ubHkgZXhjZXB0aW9uIHdoZXJlIFRQUzMgaXMKPiAtCSAqIHN1cHBv cnRlZCBidXQgc3RpbGwgbm90IGVuYWJsZWQuCj4gLQkgKi8KPiAtCWlmIChpbnRlbF9kcF9zb3Vy Y2Vfc3VwcG9ydHNfaGJyMihkZXYpICYmCj4gLQkgICAgZHJtX2RwX3RwczNfc3VwcG9ydGVkKGlu dGVsX2RwLT5kcGNkKSkKPiAtCQl0cmFpbmluZ19wYXR0ZXJuID0gRFBfVFJBSU5JTkdfUEFUVEVS Tl8zOwo+IC0JZWxzZSBpZiAoaW50ZWxfZHAtPmxpbmtfcmF0ZSA9PSA1NDAwMDApCj4gLQkJRFJN X0VSUk9SKCI1LjQgR2JwcyBsaW5rIHJhdGUgd2l0aG91dCBIQlIyL1RQUzMgc3VwcG9ydFxuIik7 Cj4gLQo+IC0JLyogY2hhbm5lbCBlcXVhbGl6YXRpb24gKi8KPiAtCWlmICghaW50ZWxfZHBfc2V0 X2xpbmtfdHJhaW4oaW50ZWxfZHAsCj4gLQkJCQkgICAgIHRyYWluaW5nX3BhdHRlcm4gfAo+IC0J CQkJICAgICBEUF9MSU5LX1NDUkFNQkxJTkdfRElTQUJMRSkpIHsKPiAtCQlEUk1fRVJST1IoImZh aWxlZCB0byBzdGFydCBjaGFubmVsIGVxdWFsaXphdGlvblxuIik7Cj4gLQkJcmV0dXJuOwo+IC0J fQo+IC0KPiAtCXRyaWVzID0gMDsKPiAtCWNyX3RyaWVzID0gMDsKPiAtCWNoYW5uZWxfZXEgPSBm YWxzZTsKPiAtCWZvciAoOzspIHsKPiAtCQl1aW50OF90IGxpbmtfc3RhdHVzW0RQX0xJTktfU1RB VFVTX1NJWkVdOwo+IC0KPiAtCQlpZiAoY3JfdHJpZXMgPiA1KSB7Cj4gLQkJCURSTV9FUlJPUigi ZmFpbGVkIHRvIHRyYWluIERQLCBhYm9ydGluZ1xuIik7Cj4gLQkJCWJyZWFrOwo+IC0JCX0KPiAt Cj4gLQkJZHJtX2RwX2xpbmtfdHJhaW5fY2hhbm5lbF9lcV9kZWxheShpbnRlbF9kcC0+ZHBjZCk7 Cj4gLQkJaWYgKCFpbnRlbF9kcF9nZXRfbGlua19zdGF0dXMoaW50ZWxfZHAsIGxpbmtfc3RhdHVz KSkgewo+IC0JCQlEUk1fRVJST1IoImZhaWxlZCB0byBnZXQgbGluayBzdGF0dXNcbiIpOwo+IC0J CQlicmVhazsKPiAtCQl9Cj4gLQo+IC0JCS8qIE1ha2Ugc3VyZSBjbG9jayBpcyBzdGlsbCBvayAq Lwo+IC0JCWlmICghZHJtX2RwX2Nsb2NrX3JlY292ZXJ5X29rKGxpbmtfc3RhdHVzLAo+IC0JCQkJ CSAgICAgIGludGVsX2RwLT5sYW5lX2NvdW50KSkgewo+IC0JCQlpbnRlbF9kcC0+dHJhaW5fc2V0 X3ZhbGlkID0gZmFsc2U7Cj4gLQkJCWludGVsX2RwX2xpbmtfdHJhaW5pbmdfY2xvY2tfcmVjb3Zl cnkoaW50ZWxfZHApOwo+IC0JCQlpbnRlbF9kcF9zZXRfbGlua190cmFpbihpbnRlbF9kcCwKPiAt CQkJCQkJdHJhaW5pbmdfcGF0dGVybiB8Cj4gLQkJCQkJCURQX0xJTktfU0NSQU1CTElOR19ESVNB QkxFKTsKPiAtCQkJY3JfdHJpZXMrKzsKPiAtCQkJY29udGludWU7Cj4gLQkJfQo+IC0KPiAtCQlp ZiAoZHJtX2RwX2NoYW5uZWxfZXFfb2sobGlua19zdGF0dXMsCj4gLQkJCQkJIGludGVsX2RwLT5s YW5lX2NvdW50KSkgewo+IC0JCQljaGFubmVsX2VxID0gdHJ1ZTsKPiAtCQkJYnJlYWs7Cj4gLQkJ fQo+IC0KPiAtCQkvKiBUcnkgNSB0aW1lcywgdGhlbiB0cnkgY2xvY2sgcmVjb3ZlcnkgaWYgdGhh dCBmYWlscyAqLwo+IC0JCWlmICh0cmllcyA+IDUpIHsKPiAtCQkJaW50ZWxfZHAtPnRyYWluX3Nl dF92YWxpZCA9IGZhbHNlOwo+IC0JCQlpbnRlbF9kcF9saW5rX3RyYWluaW5nX2Nsb2NrX3JlY292 ZXJ5KGludGVsX2RwKTsKPiAtCQkJaW50ZWxfZHBfc2V0X2xpbmtfdHJhaW4oaW50ZWxfZHAsCj4g LQkJCQkJCXRyYWluaW5nX3BhdHRlcm4gfAo+IC0JCQkJCQlEUF9MSU5LX1NDUkFNQkxJTkdfRElT QUJMRSk7Cj4gLQkJCXRyaWVzID0gMDsKPiAtCQkJY3JfdHJpZXMrKzsKPiAtCQkJY29udGludWU7 Cj4gLQkJfQo+IC0KPiAtCQkvKiBVcGRhdGUgdHJhaW5pbmcgc2V0IGFzIHJlcXVlc3RlZCBieSB0 YXJnZXQgKi8KPiAtCQlpbnRlbF9nZXRfYWRqdXN0X3RyYWluKGludGVsX2RwLCBsaW5rX3N0YXR1 cyk7Cj4gLQkJaWYgKCFpbnRlbF9kcF91cGRhdGVfbGlua190cmFpbihpbnRlbF9kcCkpIHsKPiAt CQkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gdXBkYXRlIGxpbmsgdHJhaW5pbmdcbiIpOwo+IC0JCQli cmVhazsKPiAtCQl9Cj4gLQkJKyt0cmllczsKPiAtCX0KPiAtCj4gLQlpbnRlbF9kcF9zZXRfaWRs ZV9saW5rX3RyYWluKGludGVsX2RwKTsKPiAtCj4gLQlpZiAoY2hhbm5lbF9lcSkgewo+IC0JCWlu dGVsX2RwLT50cmFpbl9zZXRfdmFsaWQgPSB0cnVlOwo+IC0JCURSTV9ERUJVR19LTVMoIkNoYW5u ZWwgRVEgZG9uZS4gRFAgVHJhaW5pbmcgc3VjY2Vzc2Z1bFxuIik7Cj4gLQl9Cj4gLX0KPiAtCj4g LXZvaWQgaW50ZWxfZHBfc3RvcF9saW5rX3RyYWluKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAp Cj4gLXsKPiAtCWludGVsX2RwX3NldF9saW5rX3RyYWluKGludGVsX2RwLAo+IC0JCQkJRFBfVFJB SU5JTkdfUEFUVEVSTl9ESVNBQkxFKTsKPiAtfQo+IC0KPiAtdm9pZAo+IC1pbnRlbF9kcF9zdGFy dF9saW5rX3RyYWluKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCj4gLXsKPiAtCWludGVsX2Rw X2xpbmtfdHJhaW5pbmdfY2xvY2tfcmVjb3ZlcnkoaW50ZWxfZHApOwo+IC0JaW50ZWxfZHBfbGlu a190cmFpbmluZ19jaGFubmVsX2VxdWFsaXphdGlvbihpbnRlbF9kcCk7Cj4gLX0KPiAtCj4gICBz dGF0aWMgdm9pZAo+ICAgaW50ZWxfZHBfbGlua19kb3duKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxf ZHApCj4gICB7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwX2xp bmtfdHJhaW5pbmcuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwX2xpbmtfdHJhaW5p bmcuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uNTNmOWMxNAo+IC0t LSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcF9saW5rX3Ry YWluaW5nLmMKPiBAQCAtMCwwICsxLDMyNyBAQAo+ICsvKgo+ICsgKiBDb3B5cmlnaHQgwqkgMjAw OC0yMDE1IEludGVsIENvcnBvcmF0aW9uCj4gKyAqCj4gKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5 IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCj4gKyAq IGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVz ICh0aGUgIlNvZnR3YXJlIiksCj4gKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQg cmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KPiArICogdGhlIHJpZ2h0 cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1Ymxp Y2Vuc2UsCj4gKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBw ZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQo+ICsgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8g ZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgo+ICsgKgo+ICsgKiBU aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5j bHVkaW5nIHRoZSBuZXh0Cj4gKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxs IGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKPiArICogU29mdHdhcmUuCj4g KyAqCj4gKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJB TlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCj4gKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQg Tk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAo+ICsgKiBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4g Tk8gRVZFTlQgU0hBTEwKPiArICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUg TElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKPiArICogTElBQklMSVRZLCBX SEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJ TkcKPiArICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUg T1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUwo+ICsgKiBJTiBUSEUgU09GVFdBUkUuCj4gKyAq Lwo+ICsKPiArI2luY2x1ZGUgImludGVsX2Rydi5oIgo+ICsKPiArc3RhdGljIHZvaWQKPiAraW50 ZWxfZ2V0X2FkanVzdF90cmFpbihzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwLAo+ICsJCSAgICAg ICBjb25zdCB1aW50OF90IGxpbmtfc3RhdHVzW0RQX0xJTktfU1RBVFVTX1NJWkVdKQo+ICt7Cj4g Kwl1aW50OF90IHYgPSAwOwo+ICsJdWludDhfdCBwID0gMDsKPiArCWludCBsYW5lOwo+ICsJdWlu dDhfdCB2b2x0YWdlX21heDsKPiArCXVpbnQ4X3QgcHJlZW1waF9tYXg7Cj4gKwo+ICsJZm9yIChs YW5lID0gMDsgbGFuZSA8IGludGVsX2RwLT5sYW5lX2NvdW50OyBsYW5lKyspIHsKPiArCQl1aW50 OF90IHRoaXNfdiA9IGRybV9kcF9nZXRfYWRqdXN0X3JlcXVlc3Rfdm9sdGFnZShsaW5rX3N0YXR1 cywgbGFuZSk7Cj4gKwkJdWludDhfdCB0aGlzX3AgPSBkcm1fZHBfZ2V0X2FkanVzdF9yZXF1ZXN0 X3ByZV9lbXBoYXNpcyhsaW5rX3N0YXR1cywgbGFuZSk7Cj4gKwo+ICsJCWlmICh0aGlzX3YgPiB2 KQo+ICsJCQl2ID0gdGhpc192Owo+ICsJCWlmICh0aGlzX3AgPiBwKQo+ICsJCQlwID0gdGhpc19w Owo+ICsJfQo+ICsKPiArCXZvbHRhZ2VfbWF4ID0gaW50ZWxfZHBfdm9sdGFnZV9tYXgoaW50ZWxf ZHApOwo+ICsJaWYgKHYgPj0gdm9sdGFnZV9tYXgpCj4gKwkJdiA9IHZvbHRhZ2VfbWF4IHwgRFBf VFJBSU5fTUFYX1NXSU5HX1JFQUNIRUQ7Cj4gKwo+ICsJcHJlZW1waF9tYXggPSBpbnRlbF9kcF9w cmVfZW1waGFzaXNfbWF4KGludGVsX2RwLCB2KTsKPiArCWlmIChwID49IHByZWVtcGhfbWF4KQo+ ICsJCXAgPSBwcmVlbXBoX21heCB8IERQX1RSQUlOX01BWF9QUkVfRU1QSEFTSVNfUkVBQ0hFRDsK PiArCj4gKwlmb3IgKGxhbmUgPSAwOyBsYW5lIDwgNDsgbGFuZSsrKQo+ICsJCWludGVsX2RwLT50 cmFpbl9zZXRbbGFuZV0gPSB2IHwgcDsKPiArfQo+ICsKPiArc3RhdGljIGJvb2wKPiAraW50ZWxf ZHBfc2V0X2xpbmtfdHJhaW4oc3RydWN0IGludGVsX2RwICppbnRlbF9kcCwKPiArCQkJdWludDhf dCBkcF90cmFpbl9wYXQpCj4gK3sKPiArCXVpbnQ4X3QgYnVmW3NpemVvZihpbnRlbF9kcC0+dHJh aW5fc2V0KSArIDFdOwo+ICsJaW50IHJldCwgbGVuOwo+ICsKPiArCWludGVsX2RwX3Byb2dyYW1f bGlua190cmFpbmluZ19wYXR0ZXJuKGludGVsX2RwLCBkcF90cmFpbl9wYXQpOwo+ICsKPiArCWJ1 ZlswXSA9IGRwX3RyYWluX3BhdDsKPiArCWlmICgoZHBfdHJhaW5fcGF0ICYgRFBfVFJBSU5JTkdf UEFUVEVSTl9NQVNLKSA9PQo+ICsJICAgIERQX1RSQUlOSU5HX1BBVFRFUk5fRElTQUJMRSkgewo+ ICsJCS8qIGRvbid0IHdyaXRlIERQX1RSQUlOSU5HX0xBTkV4X1NFVCBvbiBkaXNhYmxlICovCj4g KwkJbGVuID0gMTsKPiArCX0gZWxzZSB7Cj4gKwkJLyogRFBfVFJBSU5JTkdfTEFORXhfU0VUIGZv bGxvdyBEUF9UUkFJTklOR19QQVRURVJOX1NFVCAqLwo+ICsJCW1lbWNweShidWYgKyAxLCBpbnRl bF9kcC0+dHJhaW5fc2V0LCBpbnRlbF9kcC0+bGFuZV9jb3VudCk7Cj4gKwkJbGVuID0gaW50ZWxf ZHAtPmxhbmVfY291bnQgKyAxOwo+ICsJfQo+ICsKPiArCXJldCA9IGRybV9kcF9kcGNkX3dyaXRl KCZpbnRlbF9kcC0+YXV4LCBEUF9UUkFJTklOR19QQVRURVJOX1NFVCwKPiArCQkJCWJ1ZiwgbGVu KTsKPiArCj4gKwlyZXR1cm4gcmV0ID09IGxlbjsKPiArfQo+ICsKPiArc3RhdGljIGJvb2wKPiAr aW50ZWxfZHBfcmVzZXRfbGlua190cmFpbihzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwLAo+ICsJ CQl1aW50OF90IGRwX3RyYWluX3BhdCkKPiArewo+ICsJaWYgKCFpbnRlbF9kcC0+dHJhaW5fc2V0 X3ZhbGlkKQo+ICsJCW1lbXNldChpbnRlbF9kcC0+dHJhaW5fc2V0LCAwLCBzaXplb2YoaW50ZWxf ZHAtPnRyYWluX3NldCkpOwo+ICsJaW50ZWxfZHBfc2V0X3NpZ25hbF9sZXZlbHMoaW50ZWxfZHAp Owo+ICsJcmV0dXJuIGludGVsX2RwX3NldF9saW5rX3RyYWluKGludGVsX2RwLCBkcF90cmFpbl9w YXQpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgYm9vbAo+ICtpbnRlbF9kcF91cGRhdGVfbGlua190cmFp bihzdHJ1Y3QgaW50ZWxfZHAgKmludGVsX2RwKQo+ICt7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCWlu dGVsX2RwX3NldF9zaWduYWxfbGV2ZWxzKGludGVsX2RwKTsKPiArCj4gKwlyZXQgPSBkcm1fZHBf ZHBjZF93cml0ZSgmaW50ZWxfZHAtPmF1eCwgRFBfVFJBSU5JTkdfTEFORTBfU0VULAo+ICsJCQkJ aW50ZWxfZHAtPnRyYWluX3NldCwgaW50ZWxfZHAtPmxhbmVfY291bnQpOwo+ICsKPiArCXJldHVy biByZXQgPT0gaW50ZWxfZHAtPmxhbmVfY291bnQ7Cj4gK30KPiArCj4gKy8qIEVuYWJsZSBjb3Jy ZXNwb25kaW5nIHBvcnQgYW5kIHN0YXJ0IHRyYWluaW5nIHBhdHRlcm4gMSAqLwo+ICtzdGF0aWMg dm9pZAo+ICtpbnRlbF9kcF9saW5rX3RyYWluaW5nX2Nsb2NrX3JlY292ZXJ5KHN0cnVjdCBpbnRl bF9kcCAqaW50ZWxfZHApCj4gK3sKPiArCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciA9ICZk cF90b19kaWdfcG9ydChpbnRlbF9kcCktPmJhc2UuYmFzZTsKPiArCXN0cnVjdCBkcm1fZGV2aWNl ICpkZXYgPSBlbmNvZGVyLT5kZXY7Cj4gKwlpbnQgaTsKPiArCXVpbnQ4X3Qgdm9sdGFnZTsKPiAr CWludCB2b2x0YWdlX3RyaWVzLCBsb29wX3RyaWVzOwo+ICsJdWludDhfdCBsaW5rX2NvbmZpZ1sy XTsKPiArCXVpbnQ4X3QgbGlua19idywgcmF0ZV9zZWxlY3Q7Cj4gKwo+ICsJaWYgKEhBU19EREko ZGV2KSkKPiArCQlpbnRlbF9kZGlfcHJlcGFyZV9saW5rX3JldHJhaW4oZW5jb2Rlcik7Cj4gKwo+ ICsJaW50ZWxfZHBfY29tcHV0ZV9yYXRlKGludGVsX2RwLCBpbnRlbF9kcC0+bGlua19yYXRlLAo+ ICsJCQkgICAgICAmbGlua19idywgJnJhdGVfc2VsZWN0KTsKPiArCj4gKwkvKiBXcml0ZSB0aGUg bGluayBjb25maWd1cmF0aW9uIGRhdGEgKi8KPiArCWxpbmtfY29uZmlnWzBdID0gbGlua19idzsK PiArCWxpbmtfY29uZmlnWzFdID0gaW50ZWxfZHAtPmxhbmVfY291bnQ7Cj4gKwlpZiAoZHJtX2Rw X2VuaGFuY2VkX2ZyYW1lX2NhcChpbnRlbF9kcC0+ZHBjZCkpCj4gKwkJbGlua19jb25maWdbMV0g fD0gRFBfTEFORV9DT1VOVF9FTkhBTkNFRF9GUkFNRV9FTjsKPiArCWRybV9kcF9kcGNkX3dyaXRl KCZpbnRlbF9kcC0+YXV4LCBEUF9MSU5LX0JXX1NFVCwgbGlua19jb25maWcsIDIpOwo+ICsJaWYg KGludGVsX2RwLT5udW1fc2lua19yYXRlcykKPiArCQlkcm1fZHBfZHBjZF93cml0ZSgmaW50ZWxf ZHAtPmF1eCwgRFBfTElOS19SQVRFX1NFVCwKPiArCQkJCSAgJnJhdGVfc2VsZWN0LCAxKTsKPiAr Cj4gKwlsaW5rX2NvbmZpZ1swXSA9IDA7Cj4gKwlsaW5rX2NvbmZpZ1sxXSA9IERQX1NFVF9BTlNJ XzhCMTBCOwo+ICsJZHJtX2RwX2RwY2Rfd3JpdGUoJmludGVsX2RwLT5hdXgsIERQX0RPV05TUFJF QURfQ1RSTCwgbGlua19jb25maWcsIDIpOwo+ICsKPiArCWludGVsX2RwLT5EUCB8PSBEUF9QT1JU X0VOOwo+ICsKPiArCS8qIGNsb2NrIHJlY292ZXJ5ICovCj4gKwlpZiAoIWludGVsX2RwX3Jlc2V0 X2xpbmtfdHJhaW4oaW50ZWxfZHAsCj4gKwkJCQkgICAgICAgRFBfVFJBSU5JTkdfUEFUVEVSTl8x IHwKPiArCQkJCSAgICAgICBEUF9MSU5LX1NDUkFNQkxJTkdfRElTQUJMRSkpIHsKPiArCQlEUk1f RVJST1IoImZhaWxlZCB0byBlbmFibGUgbGluayB0cmFpbmluZ1xuIik7Cj4gKwkJcmV0dXJuOwo+ ICsJfQo+ICsKPiArCXZvbHRhZ2UgPSAweGZmOwo+ICsJdm9sdGFnZV90cmllcyA9IDA7Cj4gKwls b29wX3RyaWVzID0gMDsKPiArCWZvciAoOzspIHsKPiArCQl1aW50OF90IGxpbmtfc3RhdHVzW0RQ X0xJTktfU1RBVFVTX1NJWkVdOwo+ICsKPiArCQlkcm1fZHBfbGlua190cmFpbl9jbG9ja19yZWNv dmVyeV9kZWxheShpbnRlbF9kcC0+ZHBjZCk7Cj4gKwkJaWYgKCFpbnRlbF9kcF9nZXRfbGlua19z dGF0dXMoaW50ZWxfZHAsIGxpbmtfc3RhdHVzKSkgewo+ICsJCQlEUk1fRVJST1IoImZhaWxlZCB0 byBnZXQgbGluayBzdGF0dXNcbiIpOwo+ICsJCQlicmVhazsKPiArCQl9Cj4gKwo+ICsJCWlmIChk cm1fZHBfY2xvY2tfcmVjb3Zlcnlfb2sobGlua19zdGF0dXMsIGludGVsX2RwLT5sYW5lX2NvdW50 KSkgewo+ICsJCQlEUk1fREVCVUdfS01TKCJjbG9jayByZWNvdmVyeSBPS1xuIik7Cj4gKwkJCWJy ZWFrOwo+ICsJCX0KPiArCj4gKwkJLyoKPiArCQkgKiBpZiB3ZSB1c2VkIHByZXZpb3VzbHkgdHJh aW5lZCB2b2x0YWdlIGFuZCBwcmUtZW1waGFzaXMgdmFsdWVzCj4gKwkJICogYW5kIHdlIGRvbid0 IGdldCBjbG9jayByZWNvdmVyeSwgcmVzZXQgbGluayB0cmFpbmluZyB2YWx1ZXMKPiArCQkgKi8K PiArCQlpZiAoaW50ZWxfZHAtPnRyYWluX3NldF92YWxpZCkgewo+ICsJCQlEUk1fREVCVUdfS01T KCJjbG9jayByZWNvdmVyeSBub3Qgb2ssIHJlc2V0Iik7Cj4gKwkJCS8qIGNsZWFyIHRoZSBmbGFn IGFzIHdlIGFyZSBub3QgcmV1c2luZyB0cmFpbiBzZXQgKi8KPiArCQkJaW50ZWxfZHAtPnRyYWlu X3NldF92YWxpZCA9IGZhbHNlOwo+ICsJCQlpZiAoIWludGVsX2RwX3Jlc2V0X2xpbmtfdHJhaW4o aW50ZWxfZHAsCj4gKwkJCQkJCSAgICAgICBEUF9UUkFJTklOR19QQVRURVJOXzEgfAo+ICsJCQkJ CQkgICAgICAgRFBfTElOS19TQ1JBTUJMSU5HX0RJU0FCTEUpKSB7Cj4gKwkJCQlEUk1fRVJST1Io ImZhaWxlZCB0byBlbmFibGUgbGluayB0cmFpbmluZ1xuIik7Cj4gKwkJCQlyZXR1cm47Cj4gKwkJ CX0KPiArCQkJY29udGludWU7Cj4gKwkJfQo+ICsKPiArCQkvKiBDaGVjayB0byBzZWUgaWYgd2Un dmUgdHJpZWQgdGhlIG1heCB2b2x0YWdlICovCj4gKwkJZm9yIChpID0gMDsgaSA8IGludGVsX2Rw LT5sYW5lX2NvdW50OyBpKyspCj4gKwkJCWlmICgoaW50ZWxfZHAtPnRyYWluX3NldFtpXSAmIERQ X1RSQUlOX01BWF9TV0lOR19SRUFDSEVEKSA9PSAwKQo+ICsJCQkJYnJlYWs7Cj4gKwkJaWYgKGkg PT0gaW50ZWxfZHAtPmxhbmVfY291bnQpIHsKPiArCQkJKytsb29wX3RyaWVzOwo+ICsJCQlpZiAo bG9vcF90cmllcyA9PSA1KSB7Cj4gKwkJCQlEUk1fRVJST1IoInRvbyBtYW55IGZ1bGwgcmV0cmll cywgZ2l2ZSB1cFxuIik7Cj4gKwkJCQlicmVhazsKPiArCQkJfQo+ICsJCQlpbnRlbF9kcF9yZXNl dF9saW5rX3RyYWluKGludGVsX2RwLAo+ICsJCQkJCQkgIERQX1RSQUlOSU5HX1BBVFRFUk5fMSB8 Cj4gKwkJCQkJCSAgRFBfTElOS19TQ1JBTUJMSU5HX0RJU0FCTEUpOwo+ICsJCQl2b2x0YWdlX3Ry aWVzID0gMDsKPiArCQkJY29udGludWU7Cj4gKwkJfQo+ICsKPiArCQkvKiBDaGVjayB0byBzZWUg aWYgd2UndmUgdHJpZWQgdGhlIHNhbWUgdm9sdGFnZSA1IHRpbWVzICovCj4gKwkJaWYgKChpbnRl bF9kcC0+dHJhaW5fc2V0WzBdICYgRFBfVFJBSU5fVk9MVEFHRV9TV0lOR19NQVNLKSA9PSB2b2x0 YWdlKSB7Cj4gKwkJCSsrdm9sdGFnZV90cmllczsKPiArCQkJaWYgKHZvbHRhZ2VfdHJpZXMgPT0g NSkgewo+ICsJCQkJRFJNX0VSUk9SKCJ0b28gbWFueSB2b2x0YWdlIHJldHJpZXMsIGdpdmUgdXBc biIpOwo+ICsJCQkJYnJlYWs7Cj4gKwkJCX0KPiArCQl9IGVsc2UKPiArCQkJdm9sdGFnZV90cmll cyA9IDA7Cj4gKwkJdm9sdGFnZSA9IGludGVsX2RwLT50cmFpbl9zZXRbMF0gJiBEUF9UUkFJTl9W T0xUQUdFX1NXSU5HX01BU0s7Cj4gKwo+ICsJCS8qIFVwZGF0ZSB0cmFpbmluZyBzZXQgYXMgcmVx dWVzdGVkIGJ5IHRhcmdldCAqLwo+ICsJCWludGVsX2dldF9hZGp1c3RfdHJhaW4oaW50ZWxfZHAs IGxpbmtfc3RhdHVzKTsKPiArCQlpZiAoIWludGVsX2RwX3VwZGF0ZV9saW5rX3RyYWluKGludGVs X2RwKSkgewo+ICsJCQlEUk1fRVJST1IoImZhaWxlZCB0byB1cGRhdGUgbGluayB0cmFpbmluZ1xu Iik7Cj4gKwkJCWJyZWFrOwo+ICsJCX0KPiArCX0KPiArfQo+ICsKPiArc3RhdGljIHZvaWQKPiAr aW50ZWxfZHBfbGlua190cmFpbmluZ19jaGFubmVsX2VxdWFsaXphdGlvbihzdHJ1Y3QgaW50ZWxf ZHAgKmludGVsX2RwKQo+ICt7Cj4gKwlzdHJ1Y3QgaW50ZWxfZGlnaXRhbF9wb3J0ICpkaWdfcG9y dCA9IGRwX3RvX2RpZ19wb3J0KGludGVsX2RwKTsKPiArCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYg PSBkaWdfcG9ydC0+YmFzZS5iYXNlLmRldjsKPiArCWJvb2wgY2hhbm5lbF9lcSA9IGZhbHNlOwo+ ICsJaW50IHRyaWVzLCBjcl90cmllczsKPiArCXVpbnQzMl90IHRyYWluaW5nX3BhdHRlcm4gPSBE UF9UUkFJTklOR19QQVRURVJOXzI7Cj4gKwo+ICsJLyoKPiArCSAqIFRyYWluaW5nIFBhdHRlcm4g MyBmb3IgSEJSMiBvciAxLjIgZGV2aWNlcyB0aGF0IHN1cHBvcnQgaXQuCj4gKwkgKgo+ICsJICog SW50ZWwgcGxhdGZvcm1zIHRoYXQgc3VwcG9ydCBIQlIyIGFsc28gc3VwcG9ydCBUUFMzLiBUUFMz IHN1cHBvcnQgaXMKPiArCSAqIGFsc28gbWFuZGF0b3J5IGZvciBkb3duc3RyZWFtIGRldmljZXMg dGhhdCBzdXBwb3J0IEhCUjIuCj4gKwkgKgo+ICsJICogRHVlIHRvIFdhRGlzYWJsZUhCUjIgU0tM IDwgQjAgaXMgdGhlIG9ubHkgZXhjZXB0aW9uIHdoZXJlIFRQUzMgaXMKPiArCSAqIHN1cHBvcnRl ZCBidXQgc3RpbGwgbm90IGVuYWJsZWQuCj4gKwkgKi8KPiArCWlmIChpbnRlbF9kcF9zb3VyY2Vf c3VwcG9ydHNfaGJyMihkZXYpICYmCj4gKwkgICAgZHJtX2RwX3RwczNfc3VwcG9ydGVkKGludGVs X2RwLT5kcGNkKSkKPiArCQl0cmFpbmluZ19wYXR0ZXJuID0gRFBfVFJBSU5JTkdfUEFUVEVSTl8z Owo+ICsJZWxzZSBpZiAoaW50ZWxfZHAtPmxpbmtfcmF0ZSA9PSA1NDAwMDApCj4gKwkJRFJNX0VS Uk9SKCI1LjQgR2JwcyBsaW5rIHJhdGUgd2l0aG91dCBIQlIyL1RQUzMgc3VwcG9ydFxuIik7Cj4g Kwo+ICsJLyogY2hhbm5lbCBlcXVhbGl6YXRpb24gKi8KPiArCWlmICghaW50ZWxfZHBfc2V0X2xp bmtfdHJhaW4oaW50ZWxfZHAsCj4gKwkJCQkgICAgIHRyYWluaW5nX3BhdHRlcm4gfAo+ICsJCQkJ ICAgICBEUF9MSU5LX1NDUkFNQkxJTkdfRElTQUJMRSkpIHsKPiArCQlEUk1fRVJST1IoImZhaWxl ZCB0byBzdGFydCBjaGFubmVsIGVxdWFsaXphdGlvblxuIik7Cj4gKwkJcmV0dXJuOwo+ICsJfQo+ ICsKPiArCXRyaWVzID0gMDsKPiArCWNyX3RyaWVzID0gMDsKPiArCWNoYW5uZWxfZXEgPSBmYWxz ZTsKPiArCWZvciAoOzspIHsKPiArCQl1aW50OF90IGxpbmtfc3RhdHVzW0RQX0xJTktfU1RBVFVT X1NJWkVdOwo+ICsKPiArCQlpZiAoY3JfdHJpZXMgPiA1KSB7Cj4gKwkJCURSTV9FUlJPUigiZmFp bGVkIHRvIHRyYWluIERQLCBhYm9ydGluZ1xuIik7Cj4gKwkJCWJyZWFrOwo+ICsJCX0KPiArCj4g KwkJZHJtX2RwX2xpbmtfdHJhaW5fY2hhbm5lbF9lcV9kZWxheShpbnRlbF9kcC0+ZHBjZCk7Cj4g KwkJaWYgKCFpbnRlbF9kcF9nZXRfbGlua19zdGF0dXMoaW50ZWxfZHAsIGxpbmtfc3RhdHVzKSkg ewo+ICsJCQlEUk1fRVJST1IoImZhaWxlZCB0byBnZXQgbGluayBzdGF0dXNcbiIpOwo+ICsJCQli cmVhazsKPiArCQl9Cj4gKwo+ICsJCS8qIE1ha2Ugc3VyZSBjbG9jayBpcyBzdGlsbCBvayAqLwo+ ICsJCWlmICghZHJtX2RwX2Nsb2NrX3JlY292ZXJ5X29rKGxpbmtfc3RhdHVzLAo+ICsJCQkJCSAg ICAgIGludGVsX2RwLT5sYW5lX2NvdW50KSkgewo+ICsJCQlpbnRlbF9kcC0+dHJhaW5fc2V0X3Zh bGlkID0gZmFsc2U7Cj4gKwkJCWludGVsX2RwX2xpbmtfdHJhaW5pbmdfY2xvY2tfcmVjb3Zlcnko aW50ZWxfZHApOwo+ICsJCQlpbnRlbF9kcF9zZXRfbGlua190cmFpbihpbnRlbF9kcCwKPiArCQkJ CQkJdHJhaW5pbmdfcGF0dGVybiB8Cj4gKwkJCQkJCURQX0xJTktfU0NSQU1CTElOR19ESVNBQkxF KTsKPiArCQkJY3JfdHJpZXMrKzsKPiArCQkJY29udGludWU7Cj4gKwkJfQo+ICsKPiArCQlpZiAo ZHJtX2RwX2NoYW5uZWxfZXFfb2sobGlua19zdGF0dXMsCj4gKwkJCQkJIGludGVsX2RwLT5sYW5l X2NvdW50KSkgewo+ICsJCQljaGFubmVsX2VxID0gdHJ1ZTsKPiArCQkJYnJlYWs7Cj4gKwkJfQo+ ICsKPiArCQkvKiBUcnkgNSB0aW1lcywgdGhlbiB0cnkgY2xvY2sgcmVjb3ZlcnkgaWYgdGhhdCBm YWlscyAqLwo+ICsJCWlmICh0cmllcyA+IDUpIHsKPiArCQkJaW50ZWxfZHAtPnRyYWluX3NldF92 YWxpZCA9IGZhbHNlOwo+ICsJCQlpbnRlbF9kcF9saW5rX3RyYWluaW5nX2Nsb2NrX3JlY292ZXJ5 KGludGVsX2RwKTsKPiArCQkJaW50ZWxfZHBfc2V0X2xpbmtfdHJhaW4oaW50ZWxfZHAsCj4gKwkJ CQkJCXRyYWluaW5nX3BhdHRlcm4gfAo+ICsJCQkJCQlEUF9MSU5LX1NDUkFNQkxJTkdfRElTQUJM RSk7Cj4gKwkJCXRyaWVzID0gMDsKPiArCQkJY3JfdHJpZXMrKzsKPiArCQkJY29udGludWU7Cj4g KwkJfQo+ICsKPiArCQkvKiBVcGRhdGUgdHJhaW5pbmcgc2V0IGFzIHJlcXVlc3RlZCBieSB0YXJn ZXQgKi8KPiArCQlpbnRlbF9nZXRfYWRqdXN0X3RyYWluKGludGVsX2RwLCBsaW5rX3N0YXR1cyk7 Cj4gKwkJaWYgKCFpbnRlbF9kcF91cGRhdGVfbGlua190cmFpbihpbnRlbF9kcCkpIHsKPiArCQkJ RFJNX0VSUk9SKCJmYWlsZWQgdG8gdXBkYXRlIGxpbmsgdHJhaW5pbmdcbiIpOwo+ICsJCQlicmVh azsKPiArCQl9Cj4gKwkJKyt0cmllczsKPiArCX0KPiArCj4gKwlpbnRlbF9kcF9zZXRfaWRsZV9s aW5rX3RyYWluKGludGVsX2RwKTsKPiArCj4gKwlpZiAoY2hhbm5lbF9lcSkgewo+ICsJCWludGVs X2RwLT50cmFpbl9zZXRfdmFsaWQgPSB0cnVlOwo+ICsJCURSTV9ERUJVR19LTVMoIkNoYW5uZWwg RVEgZG9uZS4gRFAgVHJhaW5pbmcgc3VjY2Vzc2Z1bFxuIik7Cj4gKwl9Cj4gK30KPiArCj4gK3Zv aWQgaW50ZWxfZHBfc3RvcF9saW5rX3RyYWluKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCj4g K3sKPiArCWludGVsX2RwX3NldF9saW5rX3RyYWluKGludGVsX2RwLAo+ICsJCQkJRFBfVFJBSU5J TkdfUEFUVEVSTl9ESVNBQkxFKTsKPiArfQo+ICsKPiArdm9pZAo+ICtpbnRlbF9kcF9zdGFydF9s aW5rX3RyYWluKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHApCj4gK3sKPiArCWludGVsX2RwX2xp bmtfdHJhaW5pbmdfY2xvY2tfcmVjb3ZlcnkoaW50ZWxfZHApOwo+ICsJaW50ZWxfZHBfbGlua190 cmFpbmluZ19jaGFubmVsX2VxdWFsaXphdGlvbihpbnRlbF9kcCk7Cj4gK30KPiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF9kcnYuaAo+IGluZGV4IDY3OTAxODcuLjI1YWM1ZDIgMTAwNjQ0Cj4gLS0tIGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF9kcnYuaAo+IEBAIC0xMjM2LDYgKzEyMzYsMjIgQEAgYm9vbCBpbnRlbF9kaWdpdGFs X3BvcnRfY29ubmVjdGVkKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiAgIAkJ CQkJIHN0cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQgKnBvcnQpOwo+ICAgdm9pZCBoc3dfZHBfc2V0 X2RkaV9wbGxfc2VsKHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpwaXBlX2NvbmZpZyk7Cj4gICAK PiArdm9pZAo+ICtpbnRlbF9kcF9wcm9ncmFtX2xpbmtfdHJhaW5pbmdfcGF0dGVybihzdHJ1Y3Qg aW50ZWxfZHAgKmludGVsX2RwLAo+ICsJCQkJICAgICAgIHVpbnQ4X3QgZHBfdHJhaW5fcGF0KTsK PiArdm9pZAo+ICtpbnRlbF9kcF9zZXRfc2lnbmFsX2xldmVscyhzdHJ1Y3QgaW50ZWxfZHAgKmlu dGVsX2RwKTsKPiArdm9pZCBpbnRlbF9kcF9zZXRfaWRsZV9saW5rX3RyYWluKHN0cnVjdCBpbnRl bF9kcCAqaW50ZWxfZHApOwo+ICt1aW50OF90Cj4gK2ludGVsX2RwX3ZvbHRhZ2VfbWF4KHN0cnVj dCBpbnRlbF9kcCAqaW50ZWxfZHApOwo+ICt1aW50OF90Cj4gK2ludGVsX2RwX3ByZV9lbXBoYXNp c19tYXgoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCwgdWludDhfdCB2b2x0YWdlX3N3aW5nKTsK PiArdm9pZCBpbnRlbF9kcF9jb21wdXRlX3JhdGUoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCwg aW50IHBvcnRfY2xvY2ssCj4gKwkJCSAgIHVpbnQ4X3QgKmxpbmtfYncsIHVpbnQ4X3QgKnJhdGVf c2VsZWN0KTsKPiArYm9vbCBpbnRlbF9kcF9zb3VyY2Vfc3VwcG9ydHNfaGJyMihzdHJ1Y3QgZHJt X2RldmljZSAqZGV2KTsKPiArYm9vbAo+ICtpbnRlbF9kcF9nZXRfbGlua19zdGF0dXMoc3RydWN0 IGludGVsX2RwICppbnRlbF9kcCwgdWludDhfdCBsaW5rX3N0YXR1c1tEUF9MSU5LX1NUQVRVU19T SVpFXSk7Cj4gKwo+ICAgLyogaW50ZWxfZHBfbXN0LmMgKi8KPiAgIGludCBpbnRlbF9kcF9tc3Rf ZW5jb2Rlcl9pbml0KHN0cnVjdCBpbnRlbF9kaWdpdGFsX3BvcnQgKmludGVsX2RpZ19wb3J0LCBp bnQgY29ubl9pZCk7Cj4gICB2b2lkIGludGVsX2RwX21zdF9lbmNvZGVyX2NsZWFudXAoc3RydWN0 IGludGVsX2RpZ2l0YWxfcG9ydCAqaW50ZWxfZGlnX3BvcnQpOwoKX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRl bC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcv bWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK