From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sean Paul Subject: Re: [DPU PATCH 3/3] drm/msm/dp: add support for DP PLL driver Date: Thu, 1 Nov 2018 17:03:15 -0400 Message-ID: <20181101210315.GF154160@art_vandelay> References: <1539191759-14836-1-git-send-email-chandanu@codeaurora.org> <1539191759-14836-4-git-send-email-chandanu@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <1539191759-14836-4-git-send-email-chandanu@codeaurora.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Chandan Uddaraju Cc: linux-arm-msm@vger.kernel.org, abhinavk@codeaurora.org, swboyd@chromium.org, seanpaul@chromium.org, dri-devel@lists.freedesktop.org, hoegsberg@google.com, freedreno@lists.freedesktop.org List-Id: linux-arm-msm@vger.kernel.org T24gV2VkLCBPY3QgMTAsIDIwMTggYXQgMTA6MTU6NTlBTSAtMDcwMCwgQ2hhbmRhbiBVZGRhcmFq dSB3cm90ZToKPiBBZGQgdGhlIG5lZWRlZCBEUCBQTEwgc3BlY2lmaWMgZmlsZXMgdG8gc3VwcG9y dAo+IGRpc3BsYXkgcG9ydCBpbnRlcmZhY2Ugb24gbXNtIHRhcmdldHMuCj4gCj4gVGhlIERQIGRy aXZlciBjYWxscyB0aGUgRFAgUExMIGRyaXZlciByZWdpc3RyYXRpb24uCj4gVGhlIERQIGRyaXZl ciBzZXRzIHRoZSBsaW5rIGFuZCBwaXhlbCBjbG9jayBzb3VyY2VzLgo+IAo+IFNpZ25lZC1vZmYt Ynk6IENoYW5kYW4gVWRkYXJhanUgPGNoYW5kYW51QGNvZGVhdXJvcmEub3JnPgo+IC0tLQo+ICBk cml2ZXJzL2dwdS9kcm0vbXNtL0tjb25maWcgICAgICAgICAgICAgICAgICAgfCAgMTYgKwo+ICBk cml2ZXJzL2dwdS9kcm0vbXNtL01ha2VmaWxlICAgICAgICAgICAgICAgICAgfCAgIDYgKwo+ICBk cml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2N0cmwuYyAgICAgICAgICAgICAgfCAgIDEgKwo+ICBk cml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2Rpc3BsYXkuYyAgICAgICAgICAgfCAgNTAgKysrCj4g IGRyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfZGlzcGxheS5oICAgICAgICAgICB8ICAgMyArCj4g IGRyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfcGFyc2VyLmggICAgICAgICAgICB8ICAgMyArCj4g IGRyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfcG93ZXIuYyAgICAgICAgICAgICB8ICA3NyArKyst Cj4gIGRyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfcG93ZXIuaCAgICAgICAgICAgICB8ICAgMiAr Cj4gIGRyaXZlcnMvZ3B1L2RybS9tc20vZHAvcGxsL2RwX3BsbC5jICAgICAgICAgICB8IDE1MyAr KysrKysrKwo+ICBkcml2ZXJzL2dwdS9kcm0vbXNtL2RwL3BsbC9kcF9wbGwuaCAgICAgICAgICAg fCAgNjQgKysrKwo+ICBkcml2ZXJzL2dwdS9kcm0vbXNtL2RwL3BsbC9kcF9wbGxfMTBubS5jICAg ICAgfCA0MDEgKysrKysrKysrKysrKysrKysrKwo+ICBkcml2ZXJzL2dwdS9kcm0vbXNtL2RwL3Bs bC9kcF9wbGxfMTBubS5oICAgICAgfCAgOTQgKysrKysKPiAgZHJpdmVycy9ncHUvZHJtL21zbS9k cC9wbGwvZHBfcGxsXzEwbm1fdXRpbC5jIHwgNTMxICsrKysrKysrKysrKysrKysrKysrKysrKysr Cj4gIDEzIGZpbGVzIGNoYW5nZWQsIDEzODkgaW5zZXJ0aW9ucygrKSwgMTIgZGVsZXRpb25zKC0p Cj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbXNtL2RwL3BsbC9kcF9wbGwu Ywo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9kcC9wbGwvZHBfcGxs LmgKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vZHAvcGxsL2RwX3Bs bF8xMG5tLmMKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vZHAvcGxs L2RwX3BsbF8xMG5tLmgKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20v ZHAvcGxsL2RwX3BsbF8xMG5tX3V0aWwuYwo+IAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vbXNtL0tjb25maWcgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL0tjb25maWcKPiBpbmRleCBjMzYz ZjI0Li4xZTBiOTE1OCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL0tjb25maWcK PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL0tjb25maWcKPiBAQCAtNTgsNiArNTgsMjIgQEAg Y29uZmlnIERSTV9NU01fRFAKPiAgCSAgZHJpdmVyLiBEUCBleHRlcm5hbCBkaXNwbGF5IHN1cHBv cnQgaXMgZW5hYmxlZAo+ICAJICB0aHJvdWdoIHRoaXMgY29uZmlnIG9wdGlvbi4gSXQgY2FuIGJl IHByaW1hcnkgb3IKPiAgCSAgc2Vjb25kYXJ5IGRpc3BsYXkgb24gZGV2aWNlLgo+ICsKPiArY29u ZmlnIERSTV9NU01fRFBfUExMCj4gKwlib29sICJFbmFibGUgRFAgUExMIGRyaXZlciBpbiBNU00g RFJNIgo+ICsJZGVwZW5kcyBvbiBEUk1fTVNNX0RQICYmIENPTU1PTl9DTEsKPiArCWRlZmF1bHQg eQoKVGhlIGRlZmF1bHQgc2hvdWxkIGJlIG4KCj4gKwloZWxwCj4gKwkgIENob29zZSB0aGlzIG9w dGlvbiB0byBlbmFibGUgRFAgUExMIGRyaXZlciB3aGljaCBwcm92aWRlcyBEUAo+ICsJICBzb3Vy Y2UgY2xvY2tzIHVuZGVyIGNvbW1vbiBjbG9jayBmcmFtZXdvcmsuCj4gKwo+ICtjb25maWcgRFJN X01TTV9EUF8xME5NX1BMTAo+ICsJYm9vbCAiRW5hYmxlIERQIDEwbm0gUExMIGRyaXZlciBpbiBN U00gRFJNICh1c2VkIGJ5IFNETTg0NSkiCj4gKwlkZXBlbmRzIG9uIERSTV9NU01fRFAKClNob3Vs ZCB0aGlzIGJlIERSTV9NU01fRFBfUExMIGluc3RlYWQ/CgoKPiArCWRlZmF1bHQgeQoKVGhlIGRl ZmF1bHQgc2hvdWxkIGJlIG4KCj4gKwloZWxwCj4gKwkgIENob29zZSB0aGlzIG9wdGlvbiBpZiBE UCBQTEwgb24gU0RNODQ1IGlzIHVzZWQgb24gdGhlIHBsYXRmb3JtLgo+ICsKPiAgY29uZmlnIERS TV9NU01fRFNJCj4gIAlib29sICJFbmFibGUgRFNJIHN1cHBvcnQgaW4gTVNNIERSTSBkcml2ZXIi Cj4gIAlkZXBlbmRzIG9uIERSTV9NU00KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21z bS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9tc20vTWFrZWZpbGUKPiBpbmRleCA3NjVhOGQ4 Li44ZDE4MzUzIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vTWFrZWZpbGUKPiAr KysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL01ha2VmaWxlCj4gQEAgLTEzNyw0ICsxMzcsMTAgQEAg bXNtLSQoQ09ORklHX0RSTV9NU01fRFNJXzE0Tk1fUEhZKSArPSBkc2kvcGxsL2RzaV9wbGxfMTRu bS5vCj4gIG1zbS0kKENPTkZJR19EUk1fTVNNX0RTSV8xME5NX1BIWSkgKz0gZHNpL3BsbC9kc2lf cGxsXzEwbm0ubwo+ICBlbmRpZgo+ICAKPiAraWZlcSAoJChDT05GSUdfRFJNX01TTV9EUF9QTEwp LHkpCj4gK21zbS15ICs9IGRwL3BsbC9kcF9wbGwubwo+ICttc20teSArPSBkcC9wbGwvZHBfcGxs XzEwbm0ubwo+ICttc20teSArPSBkcC9wbGwvZHBfcGxsXzEwbm1fdXRpbC5vCgpJbnN0ZWFkIG9m IHRoZSBpZmVxLCB0aGVzZSBzaG91bGQgZm9sbG93IHRoZSBmb3JtOgoKbXNtLSQoQ09ORklHX0JM QUgpICs9Cgo+ICtlbmRpZgo+ICsKPiAgb2JqLSQoQ09ORklHX0RSTV9NU00pCSs9IG1zbS5vCj4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfY3RybC5jIGIvZHJpdmVycy9n cHUvZHJtL21zbS9kcC9kcF9jdHJsLmMKPiBpbmRleCAwOGE1MmY1Li5lMjNiZWVlIDEwMDY0NAo+ IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfY3RybC5jCj4gKysrIGIvZHJpdmVycy9n cHUvZHJtL21zbS9kcC9kcF9jdHJsLmMKPiBAQCAtMTA1MSw2ICsxMDUxLDcgQEAgc3RhdGljIGlu dCBkcF9jdHJsX2VuYWJsZV9tYWlubGlua19jbG9ja3Moc3RydWN0IGRwX2N0cmxfcHJpdmF0ZSAq Y3RybCkKPiAgewo+ICAJaW50IHJldCA9IDA7Cj4gIAo+ICsJY3RybC0+cG93ZXItPnNldF9saW5r X2Nsa19wYXJlbnQoY3RybC0+cG93ZXIpOwo+ICAJY3RybC0+cG93ZXItPnNldF9waXhlbF9jbGtf cGFyZW50KGN0cmwtPnBvd2VyKTsKPiAgCj4gIAlkcF9jdHJsX3NldF9jbG9ja19yYXRlKGN0cmws ICJjdHJsX2xpbmtfY2xrIiwKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9k cF9kaXNwbGF5LmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2Rpc3BsYXkuYwo+IGluZGV4 IDhjOTgzOTkuLjJiZjY2MzUgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9k cF9kaXNwbGF5LmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2Rpc3BsYXkuYwo+ IEBAIC03Miw2ICs3Miw0OCBAQCBzdHJ1Y3QgZHBfZGlzcGxheV9wcml2YXRlIHsKPiAgCXt9Cj4g IH07Cj4gIAo+ICtzdGF0aWMgaW50IGRwX2dldF9wbGwoc3RydWN0IGRwX2Rpc3BsYXlfcHJpdmF0 ZSAqZHBfcHJpdikKPiArewo+ICsJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IE5VTEw7 Cj4gKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwbGxfcGRldjsKPiArCXN0cnVjdCBkZXZpY2Vf bm9kZSAqcGxsX25vZGU7Cj4gKwlzdHJ1Y3QgZHBfcGFyc2VyICpkcF9wYXJzZXIgPSBOVUxMOwo+ ICsKPiArCWlmICghZHBfcHJpdikgewo+ICsJCXByX2VycigiSW52YWxpZCBBcmd1bWVudHNcbiIp Owo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsJfQo+ICsKPiArCXBkZXYgPSBkcF9wcml2LT5wZGV2 Owo+ICsJZHBfcGFyc2VyID0gZHBfcHJpdi0+cGFyc2VyOwo+ICsKPiArCWlmICghZHBfcGFyc2Vy KSB7Cj4gKwkJcHJfZXJyKCJQYXJzZXIgbm90IGluaXRpYWxpemVkLlxuIik7Cj4gKwkJcmV0dXJu IC1FSU5WQUw7Cj4gKwl9CgpDYW4gd2UgcGxlYXNlIHJlbW92ZSB0aGUgdW5uZWNlc3NhcnkgbnVs bCBjaGVja3MgZnJvbSB0aGlzIHBhdGNoIHRvbz8KCj4gKwo+ICsJcGxsX25vZGUgPSBvZl9wYXJz ZV9waGFuZGxlKHBkZXYtPmRldi5vZl9ub2RlLCAicGxsLW5vZGUiLCAwKTsKPiArCWlmICghcGxs X25vZGUpIHsKPiArCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW5ub3QgZmluZCBwbGwgZGV2aWNl XG4iKTsKPiArCQlyZXR1cm4gLUVOWElPOwo+ICsJfQo+ICsKPiArCXBsbF9wZGV2ID0gb2ZfZmlu ZF9kZXZpY2VfYnlfbm9kZShwbGxfbm9kZSk7Cj4gKwlpZiAocGxsX3BkZXYpCj4gKwkJZHBfcGFy c2VyLT5wbGwgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwbGxfcGRldik7CgpXaGF0IGlmIHRoZSBw bGwgZHJpdmVyIGdvZXMgYXdheSBiZWZvcmUgdGhlIGRwIGRyaXZlcj8KCj4gKwo+ICsJb2Zfbm9k ZV9wdXQocGxsX25vZGUpOwo+ICsKPiArCWlmICghcGxsX3BkZXYgfHwgIWRwX3BhcnNlci0+cGxs KSB7Cj4gKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiJXM6IHBsbCBkcml2ZXIgaXMgbm90IHJlYWR5 XG4iLCBfX2Z1bmNfXyk7CgpUaGlzIHBhdGNoIChhbmQgZXZlbiBqdXN0IHRoaXMgZnVuY3Rpb24p IGhhcyBib3RoIHByX2VyciBhbmQgZGV2X2Vyciwgb3khCgpQbGVhc2UgY29udmVydCBldmVyeXRo aW5nIHRvIG9uZSBsb2dnaW5nIG1lZGl1bS4gVGhlIG1zbSBkcml2ZXIgd2FzIHJlY2VudGx5CmNv bnZlcnRlZCB0byBEUk1fREVWXyosIHNvIGxldCdzIGdvIHdpdGggdGhhdCBmb3IgYWxsIG9mIG1z bS9kcC8qCgoKPiArCQlyZXR1cm4gLUVQUk9CRV9ERUZFUjsKPiArCX0KPiArCj4gKwlkcF9wYXJz ZXItPnBsbF9kZXYgPSBnZXRfZGV2aWNlKCZwbGxfcGRldi0+ZGV2KTsKPiArCj4gKwlyZXR1cm4g MDsKPiArfQo+ICsKPiAgc3RhdGljIGlycXJldHVybl90IGRwX2Rpc3BsYXlfaXJxKGludCBpcnEs IHZvaWQgKmRldl9pZCkKPiAgewo+ICAJc3RydWN0IGRwX2Rpc3BsYXlfcHJpdmF0ZSAqZHAgPSBk ZXZfaWQ7Cj4gQEAgLTEyNSw2ICsxNjcsMTIgQEAgc3RhdGljIGludCBkcF9kaXNwbGF5X2JpbmQo c3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICptYXN0ZXIsCj4gIAkJZ290byBlbmQ7 Cj4gIAl9Cj4gIAo+ICsJcmMgPSBkcF9nZXRfcGxsKGRwKTsKPiArCWlmIChyYykgewo+ICsJCXBy X2VycigiIERQIGdldCBQTEwgaW5zdGFuY2UgZmFpbGVkXG4iKTsKClByaW50IHJjLCBoZXJlIGFu ZCBldmVyeXdoZXJlIGVsc2UuCgo+ICsJCWdvdG8gZW5kOwo+ICsJfQo+ICsKPiAgCXJjID0gZHAt PmF1eC0+ZHJtX2F1eF9yZWdpc3RlcihkcC0+YXV4KTsKPiAgCWlmIChyYykgewo+ICAJCXByX2Vy cigiRFJNIERQIEFVWCByZWdpc3RlciBmYWlsZWRcbiIpOwo+IEBAIC05MjEsNiArOTY5LDcgQEAg aW50IF9faW5pdCBtc21fZHBfcmVnaXN0ZXIodm9pZCkKPiAgewo+ICAJaW50IHJldDsKPiAgCj4g Kwltc21fZHBfcGxsX2RyaXZlcl9yZWdpc3RlcigpOwo+ICAJcmV0ID0gcGxhdGZvcm1fZHJpdmVy X3JlZ2lzdGVyKCZkcF9kaXNwbGF5X2RyaXZlcik7Cj4gIAlpZiAocmV0KSB7Cj4gIAkJcHJfZXJy KCJkcml2ZXIgcmVnaXN0ZXIgZmFpbGVkIik7Cj4gQEAgLTkzMiw2ICs5ODEsNyBAQCBpbnQgX19p bml0IG1zbV9kcF9yZWdpc3Rlcih2b2lkKQo+ICAKPiAgdm9pZCBfX2V4aXQgbXNtX2RwX3VucmVn aXN0ZXIodm9pZCkKPiAgewo+ICsJbXNtX2RwX3BsbF9kcml2ZXJfdW5yZWdpc3RlcigpOwo+ICAJ cGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmRwX2Rpc3BsYXlfZHJpdmVyKTsKPiAgfQo+ICAK PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9kaXNwbGF5LmggYi9kcml2 ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2Rpc3BsYXkuaAo+IGluZGV4IGNhNWVhZTUuLjljZDZhNmIg MTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9kaXNwbGF5LmgKPiArKysg Yi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX2Rpc3BsYXkuaAo+IEBAIC01Miw0ICs1Miw3IEBA IHN0cnVjdCBtc21fZHAgewo+ICAKPiAgaW50IGRwX2Rpc3BsYXlfZ2V0X251bV9vZl9kaXNwbGF5 cyh2b2lkKTsKPiAgaW50IGRwX2Rpc3BsYXlfZ2V0X2Rpc3BsYXlzKHZvaWQgKipkaXNwbGF5cywg aW50IGNvdW50KTsKPiArdm9pZCBfX2luaXQgbXNtX2RwX3BsbF9kcml2ZXJfcmVnaXN0ZXIodm9p ZCk7Cj4gK3ZvaWQgX19leGl0IG1zbV9kcF9wbGxfZHJpdmVyX3VucmVnaXN0ZXIodm9pZCk7Cj4g Kwo+ICAjZW5kaWYgLyogX0RQX0RJU1BMQVlfSF8gKi8KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL21zbS9kcC9kcF9wYXJzZXIuaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfcGFy c2VyLmgKPiBpbmRleCBiMzllYTAyLi4zNzI5OTdlIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9tc20vZHAvZHBfcGFyc2VyLmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2Rw X3BhcnNlci5oCj4gQEAgLTE2LDYgKzE2LDcgQEAKPiAgI2RlZmluZSBfRFBfUEFSU0VSX0hfCj4g IAo+ICAjaW5jbHVkZSAiZHB1X2lvX3V0aWwuaCIKPiArI2luY2x1ZGUgInBsbC9kcF9wbGwuaCIK PiAgCj4gICNkZWZpbmUgRFBfTEFCRUwgIk1EU1MgRFAgRElTUExBWSIKPiAgI2RlZmluZSBBVVhf Q0ZHX0xFTgkxMAo+IEBAIC0xNzUsNiArMTc2LDggQEAgc3RydWN0IGRwX3BhcnNlciB7Cj4gIAlz dHJ1Y3QgZHBfcGluY3RybCBwaW5jdHJsOwo+ICAJc3RydWN0IGRwX2lvIGlvOwo+ICAJc3RydWN0 IGRwX2Rpc3BsYXlfZGF0YSBkaXNwX2RhdGE7Cj4gKwlzdHJ1Y3QgbXNtX2RwX3BsbCAqcGxsOwo+ ICsJc3RydWN0IGRldmljZSAqcGxsX2RldjsKClN0b3JlIHBsbF9kZXYgaW4gbXNtX2RwX3BsbCBh cyAnZGV2JyBhbmQgcmVtb3ZlIHRoaXM/Cgo+ICAKPiAgCXU4IGxfbWFwWzRdOwo+ICAJc3RydWN0 IGRwX2F1eF9jZmcgYXV4X2NmZ1tBVVhfQ0ZHX0xFTl07Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9tc20vZHAvZHBfcG93ZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvZHBfcG93 ZXIuYwo+IGluZGV4IDFkNTg0ODAuLjNhMTY3OWMgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUv ZHJtL21zbS9kcC9kcF9wb3dlci5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9w b3dlci5jCj4gQEAgLTIzLDcgKzIzLDkgQEAgc3RydWN0IGRwX3Bvd2VyX3ByaXZhdGUgewo+ICAJ c3RydWN0IGRwX3BhcnNlciAqcGFyc2VyOwo+ICAJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRl djsKPiAgCXN0cnVjdCBjbGsgKnBpeGVsX2Nsa19yY2c7Cj4gLQlzdHJ1Y3QgY2xrICpwaXhlbF9w YXJlbnQ7Cj4gKwlzdHJ1Y3QgY2xrICpsaW5rX2Nsa19zcmM7Cj4gKwlzdHJ1Y3QgY2xrICpwaXhl bF9wcm92aWRlcjsKPiArCXN0cnVjdCBjbGsgKmxpbmtfcHJvdmlkZXI7Cj4gIAo+ICAJc3RydWN0 IGRwX3Bvd2VyIGRwX3Bvd2VyOwo+ICAKPiBAQCAtMTU0LDYgKzE1NiwxNiBAQCBzdGF0aWMgaW50 IGRwX3Bvd2VyX2Nsa19pbml0KHN0cnVjdCBkcF9wb3dlcl9wcml2YXRlICpwb3dlciwgYm9vbCBl bmFibGUpCj4gIAkJZ290byBleGl0Owo+ICAJfQo+ICAKPiArCWlmIChwb3dlci0+cGFyc2VyLT5w bGwgJiYgcG93ZXItPnBhcnNlci0+cGxsLT5nZXRfcHJvdmlkZXIpIHsKPiArCQlyYyA9IHBvd2Vy LT5wYXJzZXItPnBsbC0+Z2V0X3Byb3ZpZGVyKHBvd2VyLT5wYXJzZXItPnBsbCwKPiArCQkJCSZw b3dlci0+bGlua19wcm92aWRlciwgJnBvd2VyLT5waXhlbF9wcm92aWRlcik7CgpIb3BlZnVsbHkg dGhpcyBnZXRzIHNpbXBsaWZpZWQgd2hlbiB5b3UgZGUtYWJzdHJhY3QgdGhlIHJlc3Qgb2YgdGhl IGRwIGRyaXZlci4KCj4gKwkJaWYgKHJjKSB7Cj4gKwkJCXByX2luZm8oIiVzOiBjYW4ndCBnZXQg cHJvdmlkZXIgZnJvbSBwbGwsIGRvbid0IHNldCBwYXJlbnRcbiIsCj4gKwkJCQlfX2Z1bmNfXyk7 Cj4gKwkJCXJldHVybiAwOwo+ICsJCX0KPiArCX0KPiArCj4gIAlpZiAoZW5hYmxlKSB7Cj4gIAkJ cmMgPSBtc21fZHNzX2dldF9jbGsoZGV2LCBjb3JlLT5jbGtfY29uZmlnLCBjb3JlLT5udW1fY2xr KTsKPiAgCQlpZiAocmMpIHsKPiBAQCAtMTczLDE3ICsxODUsMTAgQEAgc3RhdGljIGludCBkcF9w b3dlcl9jbGtfaW5pdChzdHJ1Y3QgZHBfcG93ZXJfcHJpdmF0ZSAqcG93ZXIsIGJvb2wgZW5hYmxl KQo+ICAJCWlmIChJU19FUlIocG93ZXItPnBpeGVsX2Nsa19yY2cpKSB7Cj4gIAkJCXByX2RlYnVn KCJVbmFibGUgdG8gZ2V0IERQIHBpeGVsIGNsayBSQ0dcbiIpOwo+ICAJCQlwb3dlci0+cGl4ZWxf Y2xrX3JjZyA9IE5VTEw7Cj4gLQkJfQo+IC0KPiAtCQlwb3dlci0+cGl4ZWxfcGFyZW50ID0gZGV2 bV9jbGtfZ2V0KGRldiwgInBpeGVsX3BhcmVudCIpOwo+IC0JCWlmIChJU19FUlIocG93ZXItPnBp eGVsX3BhcmVudCkpIHsKPiAtCQkJcHJfZGVidWcoIlVuYWJsZSB0byBnZXQgRFAgcGl4ZWwgUkNH IHBhcmVudFxuIik7Cj4gLQkJCXBvd2VyLT5waXhlbF9wYXJlbnQgPSBOVUxMOwo+ICsJCQlyYyA9 IC1FTk9ERVY7Cj4gKwkJCWdvdG8gY3RybF9nZXRfZXJyb3I7Cj4gIAkJfQo+ICAJfSBlbHNlIHsK PiAtCQlpZiAocG93ZXItPnBpeGVsX3BhcmVudCkKPiAtCQkJZGV2bV9jbGtfcHV0KGRldiwgcG93 ZXItPnBpeGVsX3BhcmVudCk7Cj4gLQo+ICAJCWlmIChwb3dlci0+cGl4ZWxfY2xrX3JjZykKPiAg CQkJZGV2bV9jbGtfcHV0KGRldiwgcG93ZXItPnBpeGVsX2Nsa19yY2cpOwo+ICAKPiBAQCAtNDU5 LDYgKzQ2NCw0OSBAQCBzdGF0aWMgdm9pZCBkcF9wb3dlcl9jbGllbnRfZGVpbml0KHN0cnVjdCBk cF9wb3dlciAqZHBfcG93ZXIpCj4gIAo+ICB9Cj4gIAo+ICtzdGF0aWMgaW50IGRwX3Bvd2VyX3Nl dF9saW5rX2Nsa19wYXJlbnQoc3RydWN0IGRwX3Bvd2VyICpkcF9wb3dlcikKPiArewo+ICsJaW50 IHJjID0gMDsKPiArCXN0cnVjdCBkcF9wb3dlcl9wcml2YXRlICpwb3dlcjsKPiArCXUzMiBudW07 Cj4gKwlzdHJ1Y3QgZHNzX2NsayAqY2ZnOwo+ICsJY2hhciAqbmFtZSA9ICJjdHJsX2xpbmtfY2xr IjsKPiArCj4gKwlpZiAoIWRwX3Bvd2VyKSB7Cj4gKwkJcHJfZXJyKCJpbnZhbGlkIHBvd2VyIGRh dGFcbiIpOwo+ICsJCXJjID0gLUVJTlZBTDsKPiArCQlnb3RvIGV4aXQ7Cj4gKwl9Cj4gKwo+ICsJ cG93ZXIgPSBjb250YWluZXJfb2YoZHBfcG93ZXIsIHN0cnVjdCBkcF9wb3dlcl9wcml2YXRlLCBk cF9wb3dlcik7Cj4gKwo+ICsJbnVtID0gcG93ZXItPnBhcnNlci0+bXBbRFBfQ1RSTF9QTV0ubnVt X2NsazsKPiArCWNmZyA9IHBvd2VyLT5wYXJzZXItPm1wW0RQX0NUUkxfUE1dLmNsa19jb25maWc7 Cj4gKwo+ICsJd2hpbGUgKG51bSAmJiBzdHJjbXAoY2ZnLT5jbGtfbmFtZSwgbmFtZSkpIHsKCkkg dGhpbmsgSSBjb21tZW50ZWQgb24gdGhpcyBpbiB0aGUgb3RoZXIgcGF0Y2gsIGJ1dCBkb24ndCB1 c2Ugc3RyaW5ncyB0byBkbwpsb29rdXBzLCBwbGVhc2UganVzdCBzdG9yZSB0aGUgcG9pbnRlciBk aXJlY3RseSBpZiB5b3UgbmVlZCBhIHJlZmVyZW5jZS4KCj4gKwkJbnVtLS07Cj4gKwkJY2ZnKys7 Cj4gKwl9Cj4gKwo+ICsJaWYgKG51bSAmJiBwb3dlci0+bGlua19wcm92aWRlcikgewo+ICsJCXBv d2VyLT5saW5rX2Nsa19zcmMgPSBjbGtfZ2V0X3BhcmVudChjZmctPmNsayk7CgpDaGVjayByZXR1 cm4gZm9yIEVSUl9QVFIKCj4gKwkJCWlmIChwb3dlci0+bGlua19jbGtfc3JjKSB7CgpJbmRlbnRp bmcgaXMgd3Jvbmcgb24gdGhpcyBibG9jawoKPiArCQkJCWNsa19zZXRfcGFyZW50KHBvd2VyLT5s aW5rX2Nsa19zcmMsIHBvd2VyLT5saW5rX3Byb3ZpZGVyKTsKPiArCQkJCXByX2RlYnVnKCIlczog aXMgdGhlIHBhcmVudCBvZiBjbGs9JXNcbiIsCj4gKwkJCQkJCV9fY2xrX2dldF9uYW1lKHBvd2Vy LT5saW5rX3Byb3ZpZGVyKSwKPiArCQkJCQkJX19jbGtfZ2V0X25hbWUocG93ZXItPmxpbmtfY2xr X3NyYykpOwo+ICsJCQl9IGVsc2Ugewo+ICsJCQkJcHJfZXJyKCJjb3VsZG4ndCBnZXQgcGFyZW50 IGZvciBjbGs9JXNcbiIsIG5hbWUpOwo+ICsJCQkJcmMgPSAtRUlOVkFMOwoKTWFrZSB0aGk6Cgog ICAgICAgIGlmICghcG93ZXItPmxpbmtfY2xrX3NyYykgewogICAgICAgICAgICAgICAgRFJNX0RF Vl9FUlJPUiguLi4pCiAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKICAgICAgICB9Cgog ICAgICAgIHJldCA9IGNsa19zZXRfcGFyZW50KHBvd2VyLT5saW5rX2Nsa19zcmMsIHBvd2VyLT5s aW5rX3Byb3ZpZGVyKTsKICAgICAgICBpZiAocmV0KSB7CiAgICAgICAgICAgICAgICAvKiBwcm9w ZXJ0bHkgaGFuZGxlIGVycm9yICovCiAgICAgICAgfQogICAgICAgIHByX2RlYnVnKCIlczogaXMg dGhlIHBhcmVudCBvZiBjbGs9JXNcbiIsCiAgICAgICAgICAgICAgICAgX19jbGtfZ2V0X25hbWUo cG93ZXItPmxpbmtfcHJvdmlkZXIpLAogICAgICAgICAgICAgICAgIF9fY2xrX2dldF9uYW1lKHBv d2VyLT5saW5rX2Nsa19zcmMpKTsKCgo+ICsJCQl9Cj4gKwl9IGVsc2Ugewo+ICsJCXByX2Vycigi JXMgY2xvY2sgY291bGQgbm90IGJlIHNldCBwYXJlbnRcbiIsIG5hbWUpOwo+ICsJCXJjID0gLUVJ TlZBTDsKPiArCX0KClNhbWUgdGhpbmcgaGVyZSwgZmxpcCB0aGUgaWYgY29uZGl0aW9uIHRvIGNo ZWNrIGZvciBlcnJvciBhbmQgcmV0dXJuIGVhcmx5LCB0aHVzCnNhdmluZyB5b3Vyc2VsZiBhIGxl dmVsIG9mIGluZGVudGF0aW9uIGZvciB0aGUgc3VjY2Vzc2Z1bCBjYXNlLgoKPiArZXhpdDoKPiAr CXJldHVybiByYzsKClJlbW92ZSBleGl0IGxhYmVsIGFuZCByZXR1cm4gZGlyZWN0bHkgYWJvdmUK Cj4gK30KPiArCj4gIHN0YXRpYyBpbnQgZHBfcG93ZXJfc2V0X3BpeGVsX2Nsa19wYXJlbnQoc3Ry dWN0IGRwX3Bvd2VyICpkcF9wb3dlcikKPiAgewo+ICAJaW50IHJjID0gMDsKPiBAQCAtNDcyLDgg KzUyMCwxMiBAQCBzdGF0aWMgaW50IGRwX3Bvd2VyX3NldF9waXhlbF9jbGtfcGFyZW50KHN0cnVj dCBkcF9wb3dlciAqZHBfcG93ZXIpCj4gIAo+ICAJcG93ZXIgPSBjb250YWluZXJfb2YoZHBfcG93 ZXIsIHN0cnVjdCBkcF9wb3dlcl9wcml2YXRlLCBkcF9wb3dlcik7Cj4gIAo+IC0JaWYgKHBvd2Vy LT5waXhlbF9jbGtfcmNnICYmIHBvd2VyLT5waXhlbF9wYXJlbnQpCj4gLQkJY2xrX3NldF9wYXJl bnQocG93ZXItPnBpeGVsX2Nsa19yY2csIHBvd2VyLT5waXhlbF9wYXJlbnQpOwo+ICsJaWYgKHBv d2VyLT5waXhlbF9jbGtfcmNnICYmIHBvd2VyLT5waXhlbF9wcm92aWRlcikgewo+ICsJCWNsa19z ZXRfcGFyZW50KHBvd2VyLT5waXhlbF9jbGtfcmNnLCBwb3dlci0+cGl4ZWxfcHJvdmlkZXIpOwoK cy9waXhlbF9wYXJlbnQvcGl4ZWxfcHJvdmlkZXIvIGlzbid0IHJlbGF0ZWQgdG8gdGhpcyBjaGFu Z2UsIGNhbiB5b3UgcGxlYXNlIHVzZQp0aGUgZmluYWwgbmFtZSBpbiB0aGUgbWFpbiBkcCBwYXRj aCBzbyBpdCdzIGNvcnJlY3QgaW4gdGhpcyBvbmU/Cgo+ICsJCXByX2RlYnVnKCIlczogaXMgdGhl IHBhcmVudCBvZiBjbGs9JXNcbiIsCj4gKwkJCQkJX19jbGtfZ2V0X25hbWUocG93ZXItPnBpeGVs X3Byb3ZpZGVyKSwKPiArCQkJCQlfX2Nsa19nZXRfbmFtZShwb3dlci0+cGl4ZWxfY2xrX3JjZykp OwoKU2FtZSBjb21tZW50IGhlcmUsIHRoaXMgZGVidWcgY2FuIGdvIGluIHRoZSBtYWluIHBhdGNo LgoKPiArCX0KPiAgZXhpdDoKPiAgCXJldHVybiByYzsKPiAgfQo+IEBAIC01NzcsNiArNjI5LDcg QEAgc3RydWN0IGRwX3Bvd2VyICpkcF9wb3dlcl9nZXQoc3RydWN0IGRwX3BhcnNlciAqcGFyc2Vy KQo+ICAJZHBfcG93ZXItPmluaXQgPSBkcF9wb3dlcl9pbml0Owo+ICAJZHBfcG93ZXItPmRlaW5p dCA9IGRwX3Bvd2VyX2RlaW5pdDsKPiAgCWRwX3Bvd2VyLT5jbGtfZW5hYmxlID0gZHBfcG93ZXJf Y2xrX2VuYWJsZTsKPiArCWRwX3Bvd2VyLT5zZXRfbGlua19jbGtfcGFyZW50ID0gZHBfcG93ZXJf c2V0X2xpbmtfY2xrX3BhcmVudDsKClNhbWUgY29tbWVudCBoZXJlIHJlZ2FyZGluZyB0aGUgdW5u ZWNlc3NhcnkgaW5kaXJlY3Rpb24sIGp1c3QgY2FsbCB0aGlzIHRoaW5nCmRpcmVjdGx5IHdoZXJl IGFwcGxpY2FibGUuCgo+ICAJZHBfcG93ZXItPnNldF9waXhlbF9jbGtfcGFyZW50ID0gZHBfcG93 ZXJfc2V0X3BpeGVsX2Nsa19wYXJlbnQ7Cj4gIAlkcF9wb3dlci0+cG93ZXJfY2xpZW50X2luaXQg PSBkcF9wb3dlcl9jbGllbnRfaW5pdDsKPiAgCWRwX3Bvd2VyLT5wb3dlcl9jbGllbnRfZGVpbml0 ID0gZHBfcG93ZXJfY2xpZW50X2RlaW5pdDsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L21zbS9kcC9kcF9wb3dlci5oIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9kcF9wb3dlci5oCj4g aW5kZXggZDFhZGFhZi4uNWVmZmQzMiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNt L2RwL2RwX3Bvd2VyLmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL2RwX3Bvd2VyLmgK PiBAQCAtMjQsNiArMjQsNyBAQAo+ICAgKiBAaW5pdDogaW5pdGlhbGl6ZXMgdGhlIHJlZ3VsYXRv cnMvY29yZSBjbG9ja3MvR1BJT3MvcGluY3RybAo+ICAgKiBAZGVpbml0OiB0dXJucyBvZmYgdGhl IHJlZ3VsYXRvcnMvY29yZSBjbG9ja3MvR1BJT3MvcGluY3RybAo+ICAgKiBAY2xrX2VuYWJsZTog ZW5hYmxlL2Rpc2FibGUgdGhlIERQIGNsb2Nrcwo+ICsgKiBAc2V0X2xpbmtfY2xrX3BhcmVudDog c2V0IHRoZSBwYXJlbnQgb2YgRFAgbGluayBjbG9jawo+ICAgKiBAc2V0X3BpeGVsX2Nsa19wYXJl bnQ6IHNldCB0aGUgcGFyZW50IG9mIERQIHBpeGVsIGNsb2NrCj4gICAqLwo+ICBzdHJ1Y3QgZHBf cG93ZXIgewo+IEBAIC0zMSw2ICszMiw3IEBAIHN0cnVjdCBkcF9wb3dlciB7Cj4gIAlpbnQgKCpk ZWluaXQpKHN0cnVjdCBkcF9wb3dlciAqcG93ZXIpOwo+ICAJaW50ICgqY2xrX2VuYWJsZSkoc3Ry dWN0IGRwX3Bvd2VyICpwb3dlciwgZW51bSBkcF9wbV90eXBlIHBtX3R5cGUsCj4gIAkJCQlib29s IGVuYWJsZSk7Cj4gKwlpbnQgKCpzZXRfbGlua19jbGtfcGFyZW50KShzdHJ1Y3QgZHBfcG93ZXIg KnBvd2VyKTsKPiAgCWludCAoKnNldF9waXhlbF9jbGtfcGFyZW50KShzdHJ1Y3QgZHBfcG93ZXIg KnBvd2VyKTsKPiAgCWludCAoKnBvd2VyX2NsaWVudF9pbml0KShzdHJ1Y3QgZHBfcG93ZXIgKnBv d2VyKTsKPiAgCXZvaWQgKCpwb3dlcl9jbGllbnRfZGVpbml0KShzdHJ1Y3QgZHBfcG93ZXIgKnBv d2VyKTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9wbGwvZHBfcGxsLmMg Yi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL3BsbC9kcF9wbGwuYwo+IG5ldyBmaWxlIG1vZGUgMTAw NjQ0Cj4gaW5kZXggMDAwMDAwMC4uYTg2MTJiNQo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2 ZXJzL2dwdS9kcm0vbXNtL2RwL3BsbC9kcF9wbGwuYwo+IEBAIC0wLDAgKzEsMTUzIEBACj4gKy8q IENvcHlyaWdodCAoYykgMjAxNi0yMDE4LCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0 cyByZXNlcnZlZC4KPiArICoKPiArICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlv dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKPiArICogaXQgdW5kZXIgdGhlIHRl cm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYW5kCj4gKyAq IG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0 aW9uLgo+ICsgKgo+ICsgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKPiArICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3 aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKPiArICogTUVSQ0hBTlRBQklMSVRZ IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQo+ICsgKiBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgo+ICsgKgo+ICsgKi8KClNQ RFggcGxlYXNlIChhbmQgZWxzZXdoZXJlKS4KCj4gKwo+ICsjaW5jbHVkZSAiZHBfcGxsLmgiCj4g Kwo+ICtpbnQgbXNtX2RwX3BsbF91dGlsX3BhcnNlX2R0X2Nsb2NrKHN0cnVjdCBwbGF0Zm9ybV9k ZXZpY2UgKnBkZXYsCj4gKwkJCQkJc3RydWN0IG1zbV9kcF9wbGwgKnBsbCkKPiArewo+ICsJdTMy IGkgPSAwLCByYyA9IDA7Cj4gKwlzdHJ1Y3QgZHNzX21vZHVsZV9wb3dlciAqbXAgPSAmcGxsLT5t cDsKPiArCWNvbnN0IGNoYXIgKmNsb2NrX25hbWU7Cj4gKwl1MzIgY2xvY2tfcmF0ZTsKPiArCj4g KwltcC0+bnVtX2NsayA9IG9mX3Byb3BlcnR5X2NvdW50X3N0cmluZ3MocGRldi0+ZGV2Lm9mX25v ZGUsCj4gKwkJCQkJCQkiY2xvY2stbmFtZXMiKTsKPiArCWlmIChtcC0+bnVtX2NsayA8PSAwKSB7 Cj4gKwkJcHJfZXJyKCJjbG9ja3MgYXJlIG5vdCBkZWZpbmVkXG4iKTsKPiArCQlnb3RvIGNsa19l cnI7Cj4gKwl9Cj4gKwo+ICsJbXAtPmNsa19jb25maWcgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRl diwKPiArCQkJc2l6ZW9mKHN0cnVjdCBkc3NfY2xrKSAqIG1wLT5udW1fY2xrLCBHRlBfS0VSTkVM KTsKPiArCWlmICghbXAtPmNsa19jb25maWcpIHsKPiArCQlyYyA9IC1FTk9NRU07Cj4gKwkJbXAt Pm51bV9jbGsgPSAwOwo+ICsJCWdvdG8gY2xrX2VycjsKPiArCX0KPiArCj4gKwlmb3IgKGkgPSAw OyBpIDwgbXAtPm51bV9jbGs7IGkrKykgewo+ICsJCW9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nX2lu ZGV4KHBkZXYtPmRldi5vZl9ub2RlLCAiY2xvY2stbmFtZXMiLAo+ICsJCQkJCQkJaSwgJmNsb2Nr X25hbWUpOwo+ICsJCXN0cmxjcHkobXAtPmNsa19jb25maWdbaV0uY2xrX25hbWUsIGNsb2NrX25h bWUsCj4gKwkJCQlzaXplb2YobXAtPmNsa19jb25maWdbaV0uY2xrX25hbWUpKTsKPiArCj4gKwkJ b2ZfcHJvcGVydHlfcmVhZF91MzJfaW5kZXgocGRldi0+ZGV2Lm9mX25vZGUsICJjbG9jay1yYXRl IiwKPiArCQkJCQkJCWksICZjbG9ja19yYXRlKTsKPiArCQltcC0+Y2xrX2NvbmZpZ1tpXS5yYXRl ID0gY2xvY2tfcmF0ZTsKPiArCj4gKwkJaWYgKCFjbG9ja19yYXRlKQo+ICsJCQltcC0+Y2xrX2Nv bmZpZ1tpXS50eXBlID0gRFNTX0NMS19BSEI7Cj4gKwkJZWxzZQo+ICsJCQltcC0+Y2xrX2NvbmZp Z1tpXS50eXBlID0gRFNTX0NMS19QQ0xLOwo+ICsJfQo+ICsKPiArY2xrX2VycjoKCnJlbW92ZSBj bGtfZXJyIGFuZCByZXR1cm4gZGlyZWN0bHkgYWJvdmUKCj4gKwlyZXR1cm4gcmM7Cj4gK30KPiAr Cj4gK3N0cnVjdCBtc21fZHBfcGxsICptc21fZHBfcGxsX2luaXQoc3RydWN0IHBsYXRmb3JtX2Rl dmljZSAqcGRldiwKCnN0YXRpYyBwbGVhc2UKCj4gKwkJCWVudW0gbXNtX2RwX3BsbF90eXBlIHR5 cGUsIGludCBpZCkKPiArewo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKPiAr CXN0cnVjdCBtc21fZHBfcGxsICpwbGw7Cj4gKwo+ICsJc3dpdGNoICh0eXBlKSB7Cj4gKwljYXNl IE1TTV9EUF9QTExfMTBOTToKPiArCQlwbGwgPSBtc21fZHBfcGxsXzEwbm1faW5pdChwZGV2LCBp ZCk7Cj4gKwkJYnJlYWs7Cj4gKwlkZWZhdWx0Ogo+ICsJCXBsbCA9IEVSUl9QVFIoLUVOWElPKTsK PiArCQlicmVhazsKPiArCX0KPiArCj4gKwlpZiAoSVNfRVJSKHBsbCkpIHsKPiArCQlkZXZfZXJy KGRldiwgIiVzOiBmYWlsZWQgdG8gaW5pdCBEUCBQTExcbiIsIF9fZnVuY19fKTsKPiArCQlyZXR1 cm4gcGxsOwo+ICsJfQo+ICsKPiArCXBsbC0+dHlwZSA9IHR5cGU7CgpUaGlzIHNob3VsZCBiZSBz ZXQgaW4gdGhlIHR5cGUtc3BlY2lmaWMgaW5pdCBmdW5jdGlvbiAoaWU6Cm1zbV9kcF9wbGxfMTBu bV9pbml0KCkpLiBUaGF0IHdpbGwgbGV0IHlvdSBzaW1wbGlmeSB0aGlzIGVudGlyZSBmdW5jdGlv biB0bzoKCnsKICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICAgICBjYXNlIE1TTV9EUF9QTExf MTBOTToKICAgICAgICAgICAgICAgIHJldHVybiBtc21fZHBfcGxsXzEwbm1faW5pdChwZGV2LCBp ZCk7CglkZWZhdWx0OgogICAgICAgICAgICAgICAgRFJNX0RFVl9FUlJPUigmcGRldi0+ZGV2LCAi SW52YWxpZCBwbGwgdHlwZTogJWRcbiIsIHR5cGUpOwogICAgICAgICAgICAgICAgcmV0dXJuIEVS Ul9QVFIoLUVOWElPKTsKCX0KfQoKPiArCj4gKwlEQkcoIkRQOiVkIFBMTCByZWdpc3RlcmVkIiwg aWQpOwo+ICsKPiArCXJldHVybiBwbGw7Cj4gK30KPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg b2ZfZGV2aWNlX2lkIGRwX3BsbF9kdF9tYXRjaFtdID0gewo+ICsjaWZkZWYgQ09ORklHX0RSTV9N U01fRFBfMTBOTV9QTEwKCkkgZG9uJ3QgdGhpbmsgeW91IG5lZWQgdGhpcyBpZmRlZiBjaGVjaywg eW91J3ZlIGFscmVhZHkgcHJvdmlkZWQgYSBzdHViIGZvciB0aGUKaW5pdCBmdW5jdGlvbgoKPiAr CXsgLmNvbXBhdGlibGUgPSAicWNvbSxkcC1wbGwtMTBubSIgfSwKPiArI2VuZGlmCj4gKwl7fQo+ ICt9Owo+ICsKPiArc3RhdGljIGludCBkcF9wbGxfZHJpdmVyX3Byb2JlKHN0cnVjdCBwbGF0Zm9y bV9kZXZpY2UgKnBkZXYpCj4gK3sKPiArCXN0cnVjdCBtc21fZHBfcGxsICpwbGw7Cj4gKwlzdHJ1 Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2Owo+ICsJY29uc3Qgc3RydWN0IG9mX2RldmljZV9p ZCAqbWF0Y2g7Cj4gKwllbnVtIG1zbV9kcF9wbGxfdHlwZSB0eXBlOwo+ICsKPiArCW1hdGNoID0g b2ZfbWF0Y2hfbm9kZShkcF9wbGxfZHRfbWF0Y2gsIGRldi0+b2Zfbm9kZSk7Cj4gKwlpZiAoIW1h dGNoKQo+ICsJCXJldHVybiAtRU5PREVWOwo+ICsKPiArCWlmICghc3RyY21wKG1hdGNoLT5jb21w YXRpYmxlLCAicWNvbSxkcC1wbGwtMTBubSIpKQo+ICsJCXR5cGUgPSBNU01fRFBfUExMXzEwTk07 CgpUaGlzIGlzIHdoYXQgb2ZfZGV2aWNlX2lkLT5kYXRhIGlzIGZvciwgdXNlIGl0IHRvIHN0b3Jl IHRoZSB0eXBlLiBDYW4geW91IGFsc28KY2hlY2sgdGhlIHJlc3Qgb2YgdGhlIGRyaXZlciBhbmQg ZG8gdGhlIHNhbWUgdGhlcmU/Cgo+ICsJZWxzZQo+ICsJCXR5cGUgPSBNU01fRFBfUExMX01BWDsK PiArCj4gKwlwbGwgPSBtc21fZHBfcGxsX2luaXQocGRldiwgdHlwZSwgMCk7Cj4gKwlpZiAoSVNf RVJSX09SX05VTEwocGxsKSkgewo+ICsJCWRldl9pbmZvKGRldiwKCldoeSBpbmZvIGxldmVsPwoK PiArCQkJIiVzOiBwbGwgaW5pdCBmYWlsZWQ6ICVsZCwgbmVlZCBzZXBhcmF0ZSBwbGwgY2xrIGRy aXZlclxuIiwKPiArCQkJX19mdW5jX18sIFBUUl9FUlIocGxsKSk7Cj4gKwkJcmV0dXJuIC1FTk9E RVY7Cj4gKwl9Cj4gKwo+ICsJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcGxsKTsKPiArCj4g KwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBkcF9wbGxfZHJpdmVyX3JlbW92ZShz dHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+ICt7Cj4gKwlzdHJ1Y3QgbXNtX2RwX3BsbCAq cGxsID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Cj4gKwo+ICsJaWYgKHBsbCkgewo+ICsJ CS8vbXNtX2RzaV9wbGxfZGVzdHJveShwbGwpOwoKSG1tLgoKPiArCQlwbGwgPSBOVUxMOwoKTm8g bmVlZCB0byBjbGVhciBhIGxvY2FsIHZhcmlhYmxlCgo+ICsJfQo+ICsKPiArCXBsYXRmb3JtX3Nl dF9kcnZkYXRhKHBkZXYsIE5VTEwpOwoKWW91IGRvbid0IG5lZWQgdG8gY2xlYXIgdGhpcyBlaXRo ZXIKCj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1f ZHJpdmVyIGRwX3BsbF9wbGF0Zm9ybV9kcml2ZXIgPSB7Cj4gKwkucHJvYmUgICAgICA9IGRwX3Bs bF9kcml2ZXJfcHJvYmUsCj4gKwkucmVtb3ZlICAgICA9IGRwX3BsbF9kcml2ZXJfcmVtb3ZlLAo+ ICsJLmRyaXZlciAgICAgPSB7Cj4gKwkJLm5hbWUgICA9ICJtc21fZHBfcGxsIiwKPiArCQkub2Zf bWF0Y2hfdGFibGUgPSBkcF9wbGxfZHRfbWF0Y2gsCj4gKwl9LAo+ICt9Owo+ICsKPiArdm9pZCBf X2luaXQgbXNtX2RwX3BsbF9kcml2ZXJfcmVnaXN0ZXIodm9pZCkKPiArewo+ICsJcGxhdGZvcm1f ZHJpdmVyX3JlZ2lzdGVyKCZkcF9wbGxfcGxhdGZvcm1fZHJpdmVyKTsKPiArfQo+ICsKPiArdm9p ZCBfX2V4aXQgbXNtX2RwX3BsbF9kcml2ZXJfdW5yZWdpc3Rlcih2b2lkKQo+ICt7Cj4gKwlwbGF0 Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmZHBfcGxsX3BsYXRmb3JtX2RyaXZlcik7Cj4gK30KPiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9wbGwvZHBfcGxsLmggYi9kcml2ZXJz L2dwdS9kcm0vbXNtL2RwL3BsbC9kcF9wbGwuaAo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5k ZXggMDAwMDAwMC4uZDUyYTgxYQo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9k cm0vbXNtL2RwL3BsbC9kcF9wbGwuaAo+IEBAIC0wLDAgKzEsNjQgQEAKPiArLyogQ29weXJpZ2h0 IChjKSAyMDE2LTIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVk Lgo+ICsgKgo+ICsgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp c3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQo+ICsgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKPiArICogb25seSB2ZXJz aW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCj4gKyAq Cj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp bGwgYmUgdXNlZnVsLAo+ICsgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgo+ICsgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCj4gKyAqIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCj4gKyAqCj4gKyAqLwo+ICsKPiArI2lmbmRl ZiBfX0RQX1BMTF9ICj4gKyNkZWZpbmUgX19EUF9QTExfSAo+ICsKPiArI2luY2x1ZGUgPGxpbnV4 L2Nsay5oPgo+ICsjaW5jbHVkZSA8bGludXgvY2xrLXByb3ZpZGVyLmg+Cj4gKyNpbmNsdWRlIDxs aW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KPiArCj4gKyNpbmNsdWRlICJkcHVfaW9fdXRpbC5oIgo+ ICsjaW5jbHVkZSAibXNtX2Rydi5oIgo+ICsKPiArI2RlZmluZSBQTExfUkVHX1coYmFzZSwgb2Zm c2V0LCBkYXRhKQlcCj4gKwkJCQl3cml0ZWxfcmVsYXhlZCgoZGF0YSksIChiYXNlKSArIChvZmZz ZXQpKQo+ICsjZGVmaW5lIFBMTF9SRUdfUihiYXNlLCBvZmZzZXQpCXJlYWRsX3JlbGF4ZWQoKGJh c2UpICsgKG9mZnNldCkpCgpUaGVzZSBtYWNyb3MgYXJlbid0IHJlYWxseSB1c2VmdWwsIHRiaC4g SXQnZCBiZSBiZXR0ZXIgdG8gaGF2ZSBhIGZ1bmN0aW9uIHRoYXQKdGFrZXMgYSBtc21fZHBfcGxs LCBvZmZzZXQgYW5kIGRhdGEuCgo+ICsKPiArZW51bSBtc21fZHBfcGxsX3R5cGUgewo+ICsJTVNN X0RQX1BMTF8xME5NLAo+ICsJTVNNX0RQX1BMTF9NQVgKPiArfTsKPiArCj4gK3N0cnVjdCBtc21f ZHBfcGxsIHsKPiArCWVudW0gbXNtX2RwX3BsbF90eXBlIHR5cGU7CgpTdG9yaW5nIHRoaXMgZG9l c24ndCBzZWVtIHRvIGdhaW4geW91IGFueXRoaW5nLiBTbyBtb3ZlIHRoZSBkcF9wbGxfdHlwZSBl bnVtCmludG8gbXNtX2RwX3BsbC5jLCB0dXJmIHRoZSBfTUFYIGFuZCBtYWtlIGVtYmVkIGl0IGlu IHRoZSAuZGF0YSBlbGVtZW50IG9mIHRoZQpvZl9kZXZpY2VfaWQgc3RydWN0cy4gVGhlbiB5b3Ug Y2FuIHVzZSBpdCB3aGVuIHlvdSdyZSBpbml0aWFsaXppbmcgYW5kIHByb21wdGx5CnRocm93IGl0 IGF3YXkuCgo+ICsJc3RydWN0IGNsa19odyBjbGtfaHc7Cj4gKwl1bnNpZ25lZCBsb25nCXJhdGU7 CQkvKiBjdXJyZW50IHZjbyByYXRlICovCj4gKwl1NjQJCW1pbl9yYXRlOwkvKiBtaW4gdmNvIHJh dGUgKi8KPiArCXU2NAkJbWF4X3JhdGU7CS8qIG1heCB2Y28gcmF0ZSAqLwo+ICsJYm9vbAkJcGxs X29uOwoKVGhlIGNsa19ody9ldGMgcGFydCBvZiB0aGlzIHBhdGNoIHNob3VsZCBiZSByZXZpZXdl ZCBieSBzd2JveWQgKGNjJ2QpLiBJdCdzIG5vdApyZWFsbHkgaW4gbXkgd2hlZWxob3VzZSwgdGJo LgoKPiArCXZvaWQJCSpwcml2OwoKV2FzIGdvaW5nIHRvIGNvbW1lbnQgb24gdXNpbmcgYW4gb3Bh cXVlIHBvaW50ZXIsIGJ1dCBpdCBub3QgdXNlZCBhbnl3aGVyZSBcby8KClBsZWFzZSByZW1vdmUK Cj4gKwkvKiBQbGwgc3BlY2lmaWMgcmVzb3VyY2VzIGxpa2UgR1BJTywgcG93ZXIgc3VwcGx5LCBj bG9ja3MsIGV0YyovCj4gKwlzdHJ1Y3QgZHNzX21vZHVsZV9wb3dlciBtcDsKPiArCWludCAoKmdl dF9wcm92aWRlcikoc3RydWN0IG1zbV9kcF9wbGwgKnBsbCwKPiArCQkJc3RydWN0IGNsayAqKmxp bmtfY2xrX3Byb3ZpZGVyLAo+ICsJCQlzdHJ1Y3QgY2xrICoqcGl4ZWxfY2xrX3Byb3ZpZGVyKTsK PiArfTsKPiArCj4gKyNkZWZpbmUgaHdfY2xrX3RvX3BsbCh4KSBjb250YWluZXJfb2YoeCwgc3Ry dWN0IG1zbV9kcF9wbGwsIGNsa19odykKClBsZWFzZSBtYWtlIHRoaXMgYSB0eXBlLXNhZmUgaW5s aW5lIGZ1bmN0aW9uLgoKPiArCj4gK3N0cnVjdCBtc21fZHBfcGxsICptc21fZHBfcGxsX2luaXQo c3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKPiArCQkJZW51bSBtc21fZHBfcGxsX3R5cGUg dHlwZSwgaW50IGlkKTsKClJlbW92ZSB0aGlzIGFuZCBtYWtlIHRoYXQgZnVuYyBzdGF0aWMKCj4g Kwo+ICtpbnQgbXNtX2RwX3BsbF91dGlsX3BhcnNlX2R0X2Nsb2NrKHN0cnVjdCBwbGF0Zm9ybV9k ZXZpY2UgKnBkZXYsCj4gKwkJCQkJc3RydWN0IG1zbV9kcF9wbGwgKnBsbCk7Cj4gKwo+ICsjaWZk ZWYgQ09ORklHX0RSTV9NU01fRFBfMTBOTV9QTEwKPiArc3RydWN0IG1zbV9kcF9wbGwgKm1zbV9k cF9wbGxfMTBubV9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIGludCBpZCk7Cj4g KyNlbHNlCj4gK3N0cnVjdCBtc21fZHBfcGxsICptc21fZHBfcGxsXzEwbm1faW5pdChzdHJ1Y3Qg cGxhdGZvcm1fZGV2aWNlICpwZGV2LCBpbnQgaWQpCj4gK3sKPiArCXJldHVybiBFUlJfUFRSKC1F Tk9ERVYpOwo+ICt9Cj4gKyNlbmRpZgo+ICsjZW5kaWYgLyogX19EUF9QTExfSCAqLwo+IGRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL3BsbC9kcF9wbGxfMTBubS5jIGIvZHJpdmVy cy9ncHUvZHJtL21zbS9kcC9wbGwvZHBfcGxsXzEwbm0uYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0 Cj4gaW5kZXggMDAwMDAwMC4uYTE4MDQxMwo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJz L2dwdS9kcm0vbXNtL2RwL3BsbC9kcF9wbGxfMTBubS5jCj4gQEAgLTAsMCArMSw0MDEgQEAKPiAr LyogQ29weXJpZ2h0IChjKSAyMDE2LTIwMTgsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmln aHRzIHJlc2VydmVkLgo+ICsgKgo+ICsgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsg eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQo+ICsgKiBpdCB1bmRlciB0aGUg dGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKPiAr ICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb24uCj4gKyAqCj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAo+ICsgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7 IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgo+ICsgKiBNRVJDSEFOVEFCSUxJ VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCj4gKyAqIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCj4gKyAqCj4gKyAqLwo+ ICsKPiArLyoKPiArICogRGlzcGxheSBQb3J0IFBMTCBkcml2ZXIgYmxvY2sgZGlhZ3JhbSBmb3Ig YnJhbmNoIGNsb2Nrcwo+ICsgKgo+ICsgKgkJKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSsKPiArICoJCXwgICAgICAgICBEUF9WQ09fQ0xLICAgICAgICAgICB8Cj4gKyAqCQl8ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgfAo+ICsgKgkJfCAgICArLS0tLS0tLS0tLS0tLS0tLS0t LSsgICAgIHwKPiArICoJCXwgICAgfCAgIChEUCBQTEwvVkNPKSAgICB8ICAgICB8Cj4gKyAqCQl8 ICAgICstLS0tLS0tLS0rLS0tLS0tLS0tKyAgICAgfAo+ICsgKgkJfCAgICAgICAgICAgICAgdiAg ICAgICAgICAgICAgIHwKPiArICoJCXwgICArLS0tLS0tLS0tLSstLS0tLS0tLS0tLSsgICB8Cj4g KyAqCQl8ICAgfCBoc2Nsa19kaXZzZWxfY2xrX3NyYyB8ICAgfAo+ICsgKgkJfCAgICstLS0tLS0t LS0tKy0tLS0tLS0tLS0tKyAgIHwKPiArICoJCSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0rCj4gKyAqCQkJCXwKPiArICoJICstLS0tLS0tLS0tLS08LS0tLS0tLS0tdi0tLS0tLS0tLS0t LT4tLS0tLS0tLS0tKwo+ICsgKgkgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB8Cj4gKyAqICstLS0tLXYtLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgfAo+ICsgKiB8IGRwX2xpbmtfY2xrX3NyYyAgfCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHwKPiArICogfCAgICBkaXZzZWxfdGVuICAgIHwgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB8Cj4gKyAqICstLS0tLS0tLS0rLS0tLS0tLS0rICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgfAo+ICsgKgl8ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB8Cj4gKyAqCXwgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHwKPiArICoJdiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdgo+ICsgKiBJbnB1dCB0byBESVNQQ0MgYmxvY2sgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKPiArICogZm9yIGxpbmsgY2xrLCBjcnlwdG8g Y2xrICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cj4gKyAqIGFuZCBpbnRlcmZhY2UgY2xv Y2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAo+ICsgKgkJCQkJCQl8Cj4gKyAq CQkJCQkJCXwKPiArICoJKy0tLS0tLS0tPC0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLSst LS08LS0tKwo+ICsgKgl8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgfAo+ ICsgKiArLS0tLS0tLXYtLS0tLS0rICArLS0tLS0tLS12LS0tLS0rICArLS0tLS0tLS12LS0tLS0t Kwo+ICsgKiB8IHZjb19kaXZpZGVkICB8ICB8IHZjb19kaXZpZGVkICB8ICB8IHZjb19kaXZpZGVk ICAgfAo+ICsgKiB8ICAgIF9jbGtfc3JjICB8ICB8ICAgIF9jbGtfc3JjICB8ICB8ICAgIF9jbGtf c3JjICAgfAo+ICsgKiB8ICAgICAgICAgICAgICB8ICB8ICAgICAgICAgICAgICB8ICB8ICAgICAg ICAgICAgICAgfAo+ICsgKiB8ZGl2c2VsX3NpeCAgICB8ICB8ICBkaXZzZWxfdHdvICB8ICB8ICBk aXZzZWxfZm91ciAgfAo+ICsgKiArLS0tLS0tLSstLS0tLS0rICArLS0tLS0rLS0tLS0tLS0rICAr LS0tLS0tLS0rLS0tLS0tKwo+ICsgKiAgICAgICAgIHwJICAgICAgICAgICB8CQkgICAgICAgIHwK PiArICoJdi0tLS0tLS0+LS0tLS0tLS0tLXYtLS0tLS0tLS0tLS0tPC0tLS0tLXYKPiArICogICAg ICAgICAgICAgICAgICAgICAgICAgfAo+ICsgKgkJKy0tLS0tLS0tLS0rLS0tLS0tLS0tKwo+ICsg KgkJfCAgIHZjb19kaXZpZGVkX2NsayAgfAo+ICsgKgkJfCAgICAgICBfc3JjX211eCAgICAgfAo+ ICsgKgkJKy0tLS0tLS0tLSstLS0tLS0tLS0tKwo+ICsgKiAgICAgICAgICAgICAgICAgICAgICAg IHwKPiArICogICAgICAgICAgICAgICAgICAgICAgICB2Cj4gKyAqICAgICAgICAgICAgICBJbnB1 dCB0byBESVNQQ0MgYmxvY2sKPiArICogICAgICAgICAgICAgIGZvciBEUCBwaXhlbCBjbG9jawoK U29tZSBvZiB5b3VyIHZlcnRpY2FsIGxpbmVzIHNlZW0gbWlzYWxpZ25lZCBoZXJlLCBjYW4geW91 IHBsZWFzZSBmaXggdGhpcyB1cD8KCj4gKyAqCj4gKyAqLwo+ICsKPiArI2luY2x1ZGUgPGxpbnV4 L2tlcm5lbC5oPgo+ICsjaW5jbHVkZSA8bGludXgvZXJyLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9k ZWxheS5oPgo+ICsjaW5jbHVkZSA8bGludXgvcmVnbWFwLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9j bGsuaD4KPiArCj4gKyNpbmNsdWRlICJkcF9wbGxfMTBubS5oIgo+ICsKPiArI2RlZmluZSBOVU1f UFJPVklERURfQ0xLUwkJMgo+ICsKPiArI2RlZmluZSBEUF9MSU5LX0NMS19TUkMJCQkwCj4gKyNk ZWZpbmUgRFBfUElYRUxfQ0xLX1NSQwkJMQoKSW5zdGVhZCBvZiB1c2luZyBhbiBhcnJheSB0byBz dG9yZSB0aGUgY2xvY2tzIGluIG9uZSBwbGFjZSwgd2h5IG5vdCBqdXN0IHN0b3JlIGEKcG9pbnRl ciBmb3IgZWFjaCBjbGs/IFRoZW4geW91IGNhbiBnZXQgcmlkIG9mIHRoZXNlIGFuZCBqdXN0IHVz ZSB0aGUgY2xrCmRpcmVjdGx5LgoKPiArCj4gK3N0YXRpYyBzdHJ1Y3QgZHBfcGxsXzEwbm0gKmRw X3BkYjsKClRoaXMgaXNuJ3QgdXNlZCAobm9yIHNob3VsZCBpdCBiZSkuCgo+ICsKPiArLyogT3Ag c3RydWN0dXJlcyAqLwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGNsa19vcHMgZHBfMTBubV92Y29f Y2xrX29wcyA9IHsKPiArCS5yZWNhbGNfcmF0ZSA9IGRwX3Zjb19yZWNhbGNfcmF0ZV8xMG5tLAo+ ICsJLnNldF9yYXRlID0gZHBfdmNvX3NldF9yYXRlXzEwbm0sCj4gKwkucm91bmRfcmF0ZSA9IGRw X3Zjb19yb3VuZF9yYXRlXzEwbm0sCj4gKwkucHJlcGFyZSA9IGRwX3Zjb19wcmVwYXJlXzEwbm0s Cj4gKwkudW5wcmVwYXJlID0gZHBfdmNvX3VucHJlcGFyZV8xMG5tLAo+ICt9Owo+ICsKPiArc3Ry dWN0IGRwX3BsbF8xMG5tX3BjbGtzZWwgewo+ICsJc3RydWN0IGNsa19odyBodzsKPiArCj4gKwkv KiBkaXZpZGVyIHBhcmFtcyAqLwo+ICsJdTggc2hpZnQ7Cj4gKwl1OCB3aWR0aDsKPiArCXU4IGZs YWdzOyAvKiBzYW1lIGZsYWdzIGFzIHVzZWQgYnkgY2xrX2RpdmlkZXIgc3RydWN0ICovCj4gKwo+ ICsJc3RydWN0IGRwX3BsbF8xMG5tICpwbGw7Cj4gK307Cj4gKyNkZWZpbmUgdG9fcGxsXzEwbm1f cGNsa3NlbChfaHcpIGNvbnRhaW5lcl9vZihfaHcsIHN0cnVjdCBkcF9wbGxfMTBubV9wY2xrc2Vs LCBodykKCnR5cGVzYWZlIHN0YXRpYyBpbmxpbmUgcGxlYXNlLiBFdmVyeXdoZXJlIHlvdSB1c2Ug cGNsa3NlbCwgeW91IGp1c3QgZ3JhYiAtPnBsbApmcm9tIHRoZSByZXN1bHQgYW5kIG5ldmVyIHVz ZSBwY2xrc2VsIGFnYWluLiBTbyBtYWtlIHRoZSBmdW5jdGlvbiByZXR1cm4KZHBfcGxsXzEwbm0g KiBkaXJlY3RseSBhbmQgc2F2ZSB5b3Vyc2VsZiB0aGUgbG9jYWwgdmFyLgoKPiArCj4gK3N0YXRp YyBpbnQgZHBfbXV4X3NldF9wYXJlbnRfMTBubShzdHJ1Y3QgY2xrX2h3ICpodywgdTggdmFsKQo+ ICt7Cj4gKwlzdHJ1Y3QgZHBfcGxsXzEwbm1fcGNsa3NlbCAqcGNsa3NlbCA9IHRvX3BsbF8xMG5t X3BjbGtzZWwoaHcpOwo+ICsJc3RydWN0IGRwX3BsbF8xMG5tICpkcF9yZXMgPSBwY2xrc2VsLT5w bGw7Cj4gKwl1MzIgYXV4Y2xrX2RpdjsKPiArCj4gKwlhdXhjbGtfZGl2ID0gUExMX1JFR19SKGRw X3Jlcy0+cGh5X2Jhc2UsIERQX1BIWV9WQ09fRElWKTsKPiArCWF1eGNsa19kaXYgJj0gfjB4MDM7 CS8qIGJpdHMgMCB0byAxICovCgpUaGlzIGNvbW1lbnQgaXNuJ3QgcmVhbGx5IHVzZWZ1bCA6KSBD b3VsZCB5b3UgcGxlYXNlICNkZWZpbmUgYWxsIG9mIHRoZQpoYXJkY29kZWQgdmFsdWVzIGluIHRo ZSBwYXRjaD8KCj4gKwo+ICsJaWYgKHZhbCA9PSAwKSAvKiBtdXggcGFyZW50IGluZGV4ID0gMCAq Lwo+ICsJCWF1eGNsa19kaXYgfD0gMTsKPiArCWVsc2UgaWYgKHZhbCA9PSAxKSAvKiBtdXggcGFy ZW50IGluZGV4ID0gMSAqLwo+ICsJCWF1eGNsa19kaXYgfD0gMjsKPiArCWVsc2UgaWYgKHZhbCA9 PSAyKSAvKiBtdXggcGFyZW50IGluZGV4ID0gMiAqLwo+ICsJCWF1eGNsa19kaXYgfD0gMDsKPiAr Cj4gKwlQTExfUkVHX1coZHBfcmVzLT5waHlfYmFzZSwKPiArCQkJRFBfUEhZX1ZDT19ESVYsIGF1 eGNsa19kaXYpOwo+ICsJLyogTWFrZSBzdXJlIHRoZSBQSFkgcmVnaXN0ZXJzIHdyaXRlcyBhcmUg ZG9uZSAqLwo+ICsJd21iKCk7CgpTYW1lIGNvbW1lbnRzIGFib3V0IG5lZWRpbmcgd21iIHRvIHdv cmsgYXJvdW5kIHVzaW5nIF9yZWxheGVkCgo+ICsJcHJfZGVidWcoIiVzOiBtdXg9JWQgYXV4Y2xr X2Rpdj0leFxuIiwgX19mdW5jX18sIHZhbCwgYXV4Y2xrX2Rpdik7Cj4gKwo+ICsJcmV0dXJuIDA7 Cj4gK30KPiArCj4gK3N0YXRpYyB1OCBkcF9tdXhfZ2V0X3BhcmVudF8xMG5tKHN0cnVjdCBjbGtf aHcgKmh3KQo+ICt7Cj4gKwl1MzIgYXV4Y2xrX2RpdiA9IDA7Cj4gKwlzdHJ1Y3QgZHBfcGxsXzEw bm1fcGNsa3NlbCAqcGNsa3NlbCA9IHRvX3BsbF8xMG5tX3BjbGtzZWwoaHcpOwo+ICsJc3RydWN0 IGRwX3BsbF8xMG5tICpkcF9yZXMgPSBwY2xrc2VsLT5wbGw7Cj4gKwl1OCB2YWwgPSAwOwo+ICsK PiArCXByX2VycigiY2xrX2h3LT5pbml0LT5uYW1lID0gJXNcbiIsIGh3LT5pbml0LT5uYW1lKTsK PiArCWF1eGNsa19kaXYgPSBQTExfUkVHX1IoZHBfcmVzLT5waHlfYmFzZSwgRFBfUEhZX1ZDT19E SVYpOwo+ICsJYXV4Y2xrX2RpdiAmPSAweDAzOwo+ICsKPiArCWlmIChhdXhjbGtfZGl2ID09IDEp IC8qIERlZmF1bHQgZGl2aWRlciAqLwo+ICsJCXZhbCA9IDA7Cj4gKwllbHNlIGlmIChhdXhjbGtf ZGl2ID09IDIpCj4gKwkJdmFsID0gMTsKPiArCWVsc2UgaWYgKGF1eGNsa19kaXYgPT0gMCkKPiAr CQl2YWwgPSAyOwo+ICsKPiArCXByX2RlYnVnKCIlczogYXV4Y2xrX2Rpdj0lZCwgdmFsPSVkXG4i LCBfX2Z1bmNfXywgYXV4Y2xrX2RpdiwgdmFsKTsKPiArCj4gKwlyZXR1cm4gdmFsOwo+ICt9Cj4g Kwo+ICtzdGF0aWMgaW50IGNsa19tdXhfZGV0ZXJtaW5lX3JhdGUoc3RydWN0IGNsa19odyAqaHcs Cj4gKwkJCQkgICAgIHN0cnVjdCBjbGtfcmF0ZV9yZXF1ZXN0ICpyZXEpCj4gK3sKPiArCWludCBy ZXQgPSAwOwoKbm8gbmVlZCB0byBpbml0IHRoaXMgdG8gMAoKPiArCj4gKwlyZXQgPSBfX2Nsa19t dXhfZGV0ZXJtaW5lX3JhdGVfY2xvc2VzdChodywgcmVxKTsKPiArCWlmIChyZXQpCj4gKwkJcmV0 dXJuIHJldDsKPiArCj4gKwkvKiBTZXQgdGhlIG5ldyBwYXJlbnQgb2YgbXV4IGlmIHRoZXJlIGlz IGEgbmV3IHZhbGlkIHBhcmVudCAqLwo+ICsJaWYgKGh3LT5jbGsgJiYgcmVxLT5iZXN0X3BhcmVu dF9ody0+Y2xrKQo+ICsJCWNsa19zZXRfcGFyZW50KGh3LT5jbGssIHJlcS0+YmVzdF9wYXJlbnRf aHctPmNsayk7CgpXaGF0IGFib3V0IHRoZSByZXR1cm4gdmFsdWU/IEFsbCBvdGhlciBjbGtfc2V0 X3BhcmVudCBjYWxscyBpbiB0aGlzIHBhdGNoIGFyZQphbHNvIHVuY2hlY2tlZCwgc28gcGxlYXNl IGFkZCB0aG9zZSBhcyB3ZWxsLgoKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGlj IHVuc2lnbmVkIGxvbmcgbXV4X3JlY2FsY19yYXRlKHN0cnVjdCBjbGtfaHcgKmh3LAo+ICsJCQkJ CXVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGUpCj4gK3sKPiArCXN0cnVjdCBjbGsgKmRpdl9jbGsg PSBOVUxMLCAqdmNvX2NsayA9IE5VTEw7Cj4gKwlzdHJ1Y3QgbXNtX2RwX3BsbCAqdmNvID0gTlVM TDsKPiArCj4gKwlkaXZfY2xrID0gY2xrX2dldF9wYXJlbnQoaHctPmNsayk7Cj4gKwlpZiAoIWRp dl9jbGspCgpBY2NvcmRpbmcgdG8gdGhlIGhlYWRlciBkb2N1bWVudGF0aW9uLCBjbGtfZ2V0X3Bh cmVudCBjYW4gcmV0dXJuIEVSUl9QVFIgYXMKd2VsbC4gU2FtZSBjb21tZW50IGFwcGxpZXMgdG8g b3RoZXIgY2FsbHNpdGVzLgoKPiArCQlyZXR1cm4gMDsKPiArCj4gKwl2Y29fY2xrID0gY2xrX2dl dF9wYXJlbnQoZGl2X2Nsayk7Cj4gKwlpZiAoIXZjb19jbGspCj4gKwkJcmV0dXJuIDA7Cj4gKwo+ ICsJdmNvID0gaHdfY2xrX3RvX3BsbChfX2Nsa19nZXRfaHcodmNvX2NsaykpOwo+ICsJaWYgKCF2 Y28pCj4gKwkJcmV0dXJuIDA7Cj4gKwo+ICsJaWYgKHZjby0+cmF0ZSA9PSBEUF9WQ09fSFNDTEtf UkFURV84MTAwTUhaRElWMTAwMCkKPiArCQlyZXR1cm4gKHZjby0+cmF0ZSAvIDYpOwoKVW5uZWNl c3NhcnkgKCkgaGVyZSBhbmQgYmVsb3cKCj4gKwllbHNlIGlmICh2Y28tPnJhdGUgPT0gRFBfVkNP X0hTQ0xLX1JBVEVfNTQwME1IWkRJVjEwMDApCj4gKwkJcmV0dXJuICh2Y28tPnJhdGUgLyA0KTsK PiArCWVsc2UKPiArCQlyZXR1cm4gKHZjby0+cmF0ZSAvIDIpOwo+ICt9Cj4gKwo+ICtzdGF0aWMg aW50IGRwX3BsbF8xMG5tX2dldF9wcm92aWRlcihzdHJ1Y3QgbXNtX2RwX3BsbCAqcGxsLAo+ICsJ CQkJICAgICBzdHJ1Y3QgY2xrICoqbGlua19jbGtfcHJvdmlkZXIsCj4gKwkJCQkgICAgIHN0cnVj dCBjbGsgKipwaXhlbF9jbGtfcHJvdmlkZXIpCj4gK3sKPiArCXN0cnVjdCBkcF9wbGxfMTBubSAq cGxsXzEwbm0gPSB0b19kcF9wbGxfMTBubShwbGwpOwo+ICsJc3RydWN0IGNsa19od19vbmVjZWxs X2RhdGEgKmh3X2RhdGEgPSBwbGxfMTBubS0+aHdfZGF0YTsKPiArCj4gKwlpZiAobGlua19jbGtf cHJvdmlkZXIpCj4gKwkJKmxpbmtfY2xrX3Byb3ZpZGVyID0gaHdfZGF0YS0+aHdzW0RQX0xJTktf Q0xLX1NSQ10tPmNsazsKPiArCWlmIChwaXhlbF9jbGtfcHJvdmlkZXIpCj4gKwkJKnBpeGVsX2Ns a19wcm92aWRlciA9IGh3X2RhdGEtPmh3c1tEUF9QSVhFTF9DTEtfU1JDXS0+Y2xrOwo+ICsKPiAr CXJldHVybiAwOwoKV2h5IGhhdmUgYSByZXR1cm4gdmFsdWUgd2hlbiB0aGUgb25seSBwbGFjZSBh bHdheXMgcmV0dXJucyAwPyBNYWtlIGl0IHZvaWQgYW5kCnNpbXBsaWZ5IGVycm9yIGNoZWNraW5n IGF0IHRoZSBjYWxsc2l0ZS4KCj4gK30KPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrX29w cyBkcF8xMG5tX3BjbGtzZWxfY2xrX29wcyA9IHsKPiArCS5nZXRfcGFyZW50ID0gZHBfbXV4X2dl dF9wYXJlbnRfMTBubSwKPiArCS5zZXRfcGFyZW50ID0gZHBfbXV4X3NldF9wYXJlbnRfMTBubSwK PiArCS5yZWNhbGNfcmF0ZSA9IG11eF9yZWNhbGNfcmF0ZSwKPiArCS5kZXRlcm1pbmVfcmF0ZSA9 IGNsa19tdXhfZGV0ZXJtaW5lX3JhdGUsCj4gK307Cj4gKwo+ICtzdGF0aWMgc3RydWN0IGNsa19o dyAqZHBfcGxsXzEwbm1fcGl4ZWxfY2xrX3NlbChzdHJ1Y3QgZHBfcGxsXzEwbm0gKnBsbF8xMG5t KQo+ICt7Cj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGxsXzEwbm0tPnBkZXYtPmRldjsKPiAr CXN0cnVjdCBkcF9wbGxfMTBubV9wY2xrc2VsICpwbGxfcGNsa3NlbDsKPiArCXN0cnVjdCBjbGtf aW5pdF9kYXRhIHBjbGtzZWxfaW5pdCA9IHsKPiArCQkucGFyZW50X25hbWVzID0gKGNvbnN0IGNo YXIgKltdKXsKPiArCQkJCSJkcF92Y29fZGl2c2VsX3R3b19jbGtfc3JjIiwKPiArCQkJCSJkcF92 Y29fZGl2c2VsX2ZvdXJfY2xrX3NyYyIsCj4gKwkJCQkiZHBfdmNvX2RpdnNlbF9zaXhfY2xrX3Ny YyIgfSwKPiArCQkubnVtX3BhcmVudHMgPSAzLAo+ICsJCS5uYW1lID0gImRwX3Zjb19kaXZpZGVk X2Nsa19zcmNfbXV4IiwKPiArCQkuZmxhZ3MgPSBDTEtfSUdOT1JFX1VOVVNFRCwKPiArCQkub3Bz ID0gJmRwXzEwbm1fcGNsa3NlbF9jbGtfb3BzLAo+ICsJfTsKPiArCWludCByZXQ7Cj4gKwo+ICsJ cGxsX3BjbGtzZWwgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnBsbF9wY2xrc2VsKSwgR0ZQ X0tFUk5FTCk7Cj4gKwlpZiAoIXBsbF9wY2xrc2VsKQo+ICsJCXJldHVybiBFUlJfUFRSKC1FTk9N RU0pOwo+ICsKPiArCXBsbF9wY2xrc2VsLT5wbGwgPSBwbGxfMTBubTsKPiArCXBsbF9wY2xrc2Vs LT5zaGlmdCA9IDA7Cj4gKwlwbGxfcGNsa3NlbC0+d2lkdGggPSA0Owo+ICsJcGxsX3BjbGtzZWwt PmZsYWdzID0gQ0xLX0RJVklERVJfT05FX0JBU0VEOwo+ICsJcGxsX3BjbGtzZWwtPmh3LmluaXQg PSAmcGNsa3NlbF9pbml0OwoKcGNsa3NlbF9pbml0IGdvZXMgb3V0IG9mIHNjb3BlIGF0IHRoZSBl bmQgb2YgdGhlIGZ1bmN0aW9uLCB5ZXQgaXQgaXMgcGVyc2lzdGVkCmluIHBsbF9wY2xrc2VsLiBU aGF0IHNob3VsZCBiZSBmaXhlZC4KCj4gKwo+ICsJcmV0ID0gY2xrX2h3X3JlZ2lzdGVyKGRldiwg JnBsbF9wY2xrc2VsLT5odyk7Cj4gKwlpZiAocmV0KQo+ICsJCXJldHVybiBFUlJfUFRSKHJldCk7 Cj4gKwo+ICsJcmV0dXJuICZwbGxfcGNsa3NlbC0+aHc7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQg ZHBfcGxsXzEwbm1fcmVnaXN0ZXIoc3RydWN0IGRwX3BsbF8xMG5tICpwbGxfMTBubSkKPiArewo+ ICsJY2hhciBjbGtfbmFtZVszMl0sIHBhcmVudFszMl0sIHZjb19uYW1lWzMyXTsKPiArCXN0cnVj dCBjbGtfaW5pdF9kYXRhIHZjb19pbml0ID0gewo+ICsJCS5wYXJlbnRfbmFtZXMgPSAoY29uc3Qg Y2hhciAqW10peyAiYmlfdGN4byIgfSwKPiArCQkubnVtX3BhcmVudHMgPSAxLAo+ICsJCS5uYW1l ID0gdmNvX25hbWUsCj4gKwkJLmZsYWdzID0gQ0xLX0lHTk9SRV9VTlVTRUQsCj4gKwkJLm9wcyA9 ICZkcF8xMG5tX3Zjb19jbGtfb3BzLAo+ICsJfTsKPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZw bGxfMTBubS0+cGRldi0+ZGV2Owo+ICsJc3RydWN0IGNsa19odyAqKmh3cyA9IHBsbF8xMG5tLT5o d3M7Cj4gKwlzdHJ1Y3QgY2xrX2h3X29uZWNlbGxfZGF0YSAqaHdfZGF0YTsKPiArCXN0cnVjdCBj bGtfaHcgKmh3Owo+ICsJaW50IG51bSA9IDA7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCURCRygiRFAt PmlkID0gJWQiLCBwbGxfMTBubS0+aWQpOwo+ICsKPiArCWh3X2RhdGEgPSBkZXZtX2t6YWxsb2Mo ZGV2LCBzaXplb2YoKmh3X2RhdGEpICsKPiArCQkJICAgICAgIE5VTV9QUk9WSURFRF9DTEtTICog c2l6ZW9mKHN0cnVjdCBjbGtfaHcgKiksCj4gKwkJCSAgICAgICBHRlBfS0VSTkVMKTsKPiArCWlm ICghaHdfZGF0YSkKPiArCQlyZXR1cm4gLUVOT01FTTsKPiArCj4gKwlzbnByaW50Zih2Y29fbmFt ZSwgMzIsICJkcF92Y29fY2xrIik7Cj4gKwlwbGxfMTBubS0+YmFzZS5jbGtfaHcuaW5pdCA9ICZ2 Y29faW5pdDsKClNhbWUgY29tbWVudCBhYm91dCBzY29wZSBoZXJlCgo+ICsJcmV0ID0gY2xrX2h3 X3JlZ2lzdGVyKGRldiwgJnBsbF8xMG5tLT5iYXNlLmNsa19odyk7Cj4gKwlpZiAocmV0KQo+ICsJ CXJldHVybiByZXQ7Cj4gKwlod3NbbnVtKytdID0gJnBsbF8xMG5tLT5iYXNlLmNsa19odzsKPiAr Cj4gKwlzbnByaW50ZihjbGtfbmFtZSwgMzIsICJkcF9saW5rX2Nsa19kaXZzZWxfdGVuIik7Cj4g KwlzbnByaW50ZihwYXJlbnQsIDMyLCAiZHBfdmNvX2NsayIpOwo+ICsJaHcgPSBjbGtfaHdfcmVn aXN0ZXJfZml4ZWRfZmFjdG9yKGRldiwgY2xrX25hbWUsIHBhcmVudCwKPiArCQkJCQkgIENMS19T RVRfUkFURV9QQVJFTlQsIDEsIDEwKTsKPiArCWlmIChJU19FUlIoaHcpKQo+ICsJCXJldHVybiBQ VFJfRVJSKGh3KTsKPiArCWh3c1tudW0rK10gPSBodzsKPiArCWh3X2RhdGEtPmh3c1tEUF9MSU5L X0NMS19TUkNdID0gaHc7Cj4gKwo+ICsJc25wcmludGYoY2xrX25hbWUsIDMyLCAiZHBfdmNvX2Rp dnNlbF90d29fY2xrX3NyYyIpOwo+ICsJc25wcmludGYocGFyZW50LCAzMiwgImRwX3Zjb19jbGsi KTsKPiArCWh3ID0gY2xrX2h3X3JlZ2lzdGVyX2ZpeGVkX2ZhY3RvcihkZXYsIGNsa19uYW1lLCBw YXJlbnQsCj4gKwkJCQkJICAwLCAxLCAyKTsKPiArCWlmIChJU19FUlIoaHcpKQo+ICsJCXJldHVy biBQVFJfRVJSKGh3KTsKPiArCWh3c1tudW0rK10gPSBodzsKPiArCj4gKwlzbnByaW50ZihjbGtf bmFtZSwgMzIsICJkcF92Y29fZGl2c2VsX2ZvdXJfY2xrX3NyYyIpOwo+ICsJc25wcmludGYocGFy ZW50LCAzMiwgImRwX3Zjb19jbGsiKTsKPiArCWh3ID0gY2xrX2h3X3JlZ2lzdGVyX2ZpeGVkX2Zh Y3RvcihkZXYsIGNsa19uYW1lLCBwYXJlbnQsCj4gKwkJCQkJICAwLCAxLCA0KTsKPiArCWlmIChJ U19FUlIoaHcpKQo+ICsJCXJldHVybiBQVFJfRVJSKGh3KTsKPiArCWh3c1tudW0rK10gPSBodzsK PiArCj4gKwlzbnByaW50ZihjbGtfbmFtZSwgMzIsICJkcF92Y29fZGl2c2VsX3NpeF9jbGtfc3Jj Iik7Cj4gKwlzbnByaW50ZihwYXJlbnQsIDMyLCAiZHBfdmNvX2NsayIpOwo+ICsJaHcgPSBjbGtf aHdfcmVnaXN0ZXJfZml4ZWRfZmFjdG9yKGRldiwgY2xrX25hbWUsIHBhcmVudCwKPiArCQkJCQkg IDAsIDEsIDYpOwo+ICsJaWYgKElTX0VSUihodykpCj4gKwkJcmV0dXJuIFBUUl9FUlIoaHcpOwo+ ICsJaHdzW251bSsrXSA9IGh3Owo+ICsKPiArCWh3ID0gZHBfcGxsXzEwbm1fcGl4ZWxfY2xrX3Nl bChwbGxfMTBubSk7Cj4gKwlpZiAoSVNfRVJSKGh3KSkKPiArCQlyZXR1cm4gUFRSX0VSUihodyk7 Cj4gKwo+ICsJaHdzW251bSsrXSA9IGh3Owo+ICsJaHdfZGF0YS0+aHdzW0RQX1BJWEVMX0NMS19T UkNdID0gaHc7CgpJJ20gZ29pbmcgdG8gbGVhdmUgdGhpcyBjaHVuayBmb3IgU3RlcGhlbiB0byBj b21tZW50IG9uLCBidXQgYWdhaW4gSSdkIHJhdGhlcgpub3Qgc3RvcmUgdGhlc2UgY2xvY2tzIGFz IGFuIGFycmF5IGFuZCBkbyBzdHJpbmcgbG9va3VwcyBvbiB0aGVtLgoKPiArCj4gKwlwbGxfMTBu bS0+bnVtX2h3cyA9IG51bTsKPiArCj4gKwlod19kYXRhLT5udW0gPSBOVU1fUFJPVklERURfQ0xL UzsKPiArCXBsbF8xMG5tLT5od19kYXRhID0gaHdfZGF0YTsKPiArCj4gKwlyZXQgPSBvZl9jbGtf YWRkX2h3X3Byb3ZpZGVyKGRldi0+b2Zfbm9kZSwgb2ZfY2xrX2h3X29uZWNlbGxfZ2V0LAo+ICsJ CQkJICAgICBwbGxfMTBubS0+aHdfZGF0YSk7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJZGV2X2Vycihk ZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIgY2xrIHByb3ZpZGVyOiAlZFxuIiwgcmV0KTsKPiArCQly ZXR1cm4gcmV0Owo+ICsJfQo+ICsKPiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4gK3N0cnVjdCBt c21fZHBfcGxsICptc21fZHBfcGxsXzEwbm1faW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpw ZGV2LCBpbnQgaWQpCj4gK3sKPiArCXN0cnVjdCBkcF9wbGxfMTBubSAqZHBfMTBubV9wbGw7Cj4g KwlzdHJ1Y3QgbXNtX2RwX3BsbCAqcGxsOwo+ICsJaW50IHJldDsKPiArCj4gKwlpZiAoIXBkZXYp Cj4gKwkJcmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7Cj4gKwo+ICsJZHBfMTBubV9wbGwgPSBkZXZt X2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9mKCpkcF8xMG5tX3BsbCksIEdGUF9LRVJORUwpOwo+ ICsJaWYgKCFkcF8xMG5tX3BsbCkKPiArCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKPiArCj4g KwlEQkcoIkRQIFBMTCVkIiwgaWQpOwoKUGxlYXNlIHJlbW92ZSAob3IgY29udmVydCB0byBEUk1f REVWX0RFQlVHKQoKPiArCj4gKwlkcF8xMG5tX3BsbC0+cGRldiA9IHBkZXY7Cj4gKwlkcF8xMG5t X3BsbC0+aWQgPSBpZDsKPiArCWRwX3BkYiA9IGRwXzEwbm1fcGxsOwo+ICsKPiArCWRwXzEwbm1f cGxsLT5wbGxfYmFzZSA9IG1zbV9pb3JlbWFwKHBkZXYsICJwbGxfYmFzZSIsICJEUF9QTEwiKTsK PiArCWlmIChJU19FUlJfT1JfTlVMTChkcF8xMG5tX3BsbC0+cGxsX2Jhc2UpKSB7Cj4gKwkJZGV2 X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIG1hcCBDTU4gUExMIGJhc2VcbiIpOwoKUHJpbnQg dGhlIGVycm9yIGlmIHBsbF9iYXNlIGlzIEVSUl9QVFIsIHNhbWUgZm9yIGJlbG93LgoKPiArCQly ZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKCllvdSBzaG91bGQgcHJlc2VydmUgdGhlIGVycm9yIGlm IHBsbF9iYXNlIGlzIGFuIEVSUl9QVFIsIHNhbWUgZm9yIGJlbG93LgoKPiArCX0KPiArCj4gKwlk cF8xMG5tX3BsbC0+cGh5X2Jhc2UgPSBtc21faW9yZW1hcChwZGV2LCAicGh5X2Jhc2UiLCAiRFBf UEhZIik7Cj4gKwlpZiAoSVNfRVJSX09SX05VTEwoZHBfMTBubV9wbGwtPnBoeV9iYXNlKSkgewo+ ICsJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBtYXAgQ01OIFBIWSBiYXNlXG4iKTsK PiArCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKPiArCX0KPiArCj4gKwlkcF8xMG5tX3BsbC0+ bG5fdHgwX2Jhc2UgPSBtc21faW9yZW1hcChwZGV2LCAibG5fdHgwX2Jhc2UiLCAiRFBfTE5fVFgw Iik7Cj4gKwlpZiAoSVNfRVJSX09SX05VTEwoZHBfMTBubV9wbGwtPmxuX3R4MF9iYXNlKSkgewo+ ICsJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBtYXAgQ01OIExOX1RYMCBiYXNlXG4i KTsKPiArCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKPiArCX0KPiArCj4gKwlkcF8xMG5tX3Bs bC0+bG5fdHgxX2Jhc2UgPSBtc21faW9yZW1hcChwZGV2LCAibG5fdHgxX2Jhc2UiLCAiRFBfTE5f VFgxIik7Cj4gKwlpZiAoSVNfRVJSX09SX05VTEwoZHBfMTBubV9wbGwtPmxuX3R4MV9iYXNlKSkg ewo+ICsJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBtYXAgQ01OIExOX1RYMSBiYXNl XG4iKTsKPiArCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKPiArCX0KPiArCj4gKwlyZXQgPSBv Zl9wcm9wZXJ0eV9yZWFkX3UzMihwZGV2LT5kZXYub2Zfbm9kZSwgImNlbGwtaW5kZXgiLAo+ICsJ CQkJJmRwXzEwbm1fcGxsLT5pbmRleCk7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJcHJfZXJyKCJVbmFi bGUgdG8gZ2V0IHRoZSBjZWxsLWluZGV4IHJldD0lZFxuIiwgcmV0KTsKCklmIHRoaXMgaXMgdHJ1 bHkgYW4gZXJyb3IgY29uZGl0aW9uLCB3ZSBzaG91bGQgcmV0dXJuIGFuIGVycm9yLiBJZiBpdCdz IG5vdCwKZG93bmdyYWRlIHRoaXMgdG8gaW5mbwoKPiArCQlkcF8xMG5tX3BsbC0+aW5kZXggPSAw Owo+ICsJfQo+ICsKPiArCXJldCA9IG1zbV9kcF9wbGxfdXRpbF9wYXJzZV9kdF9jbG9jayhwZGV2 LCAmZHBfMTBubV9wbGwtPmJhc2UpOwo+ICsJaWYgKHJldCkgewo+ICsJCXByX2VycigiVW5hYmxl IHRvIHBhcnNlIGR0IGNsb2NrcyByZXQ9JWRcbiIsIHJldCk7Cj4gKwkJcmV0dXJuIEVSUl9QVFIo cmV0KTsKPiArCX0KPiArCj4gKwlyZXQgPSBkcF9wbGxfMTBubV9yZWdpc3RlcihkcF8xMG5tX3Bs bCk7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHJl Z2lzdGVyIFBMTDogJWRcbiIsIHJldCk7Cj4gKwkJcmV0dXJuIEVSUl9QVFIocmV0KTsKPiArCX0K PiArCj4gKwlwbGwgPSAmZHBfMTBubV9wbGwtPmJhc2U7Cj4gKwlwbGwtPm1pbl9yYXRlID0gRFBf VkNPX0hTQ0xLX1JBVEVfMTYyME1IWkRJVjEwMDA7Cj4gKwlwbGwtPm1heF9yYXRlID0gRFBfVkNP X0hTQ0xLX1JBVEVfODEwME1IWkRJVjEwMDA7Cj4gKwlwbGwtPmdldF9wcm92aWRlciA9IGRwX3Bs bF8xMG5tX2dldF9wcm92aWRlcjsKPiArCj4gKwlyZXR1cm4gcGxsOwo+ICt9Cj4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZHAvcGxsL2RwX3BsbF8xMG5tLmggYi9kcml2ZXJzL2dw dS9kcm0vbXNtL2RwL3BsbC9kcF9wbGxfMTBubS5oCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBp bmRleCAwMDAwMDAwLi5mOTY2YmViCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1 L2RybS9tc20vZHAvcGxsL2RwX3BsbF8xMG5tLmgKPiBAQCAtMCwwICsxLDk0IEBACj4gKy8qIENv cHlyaWdodCAoYykgMjAxNi0yMDE4LCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyBy ZXNlcnZlZC4KPiArICoKPiArICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKPiArICogaXQgdW5kZXIgdGhlIHRlcm1z IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYW5kCj4gKyAqIG9u bHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u Lgo+ICsgKgo+ICsgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh dCBpdCB3aWxsIGJlIHVzZWZ1bCwKPiArICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKPiArICogTUVSQ0hBTlRBQklMSVRZIG9y IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQo+ICsgKiBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgo+ICsgKgo+ICsgKi8KPiArCj4g KyNpZm5kZWYgX19EUF9QTExfMTBOTV9ICj4gKyNkZWZpbmUgX19EUF9QTExfMTBOTV9ICj4gKwo+ ICsjaW5jbHVkZSAiZHBfcGxsLmgiCj4gKyNpbmNsdWRlICJkcF9yZWcuaCIKPiArCj4gKyNkZWZp bmUgRFBfVkNPX0hTQ0xLX1JBVEVfMTYyME1IWkRJVjEwMDAJMTYyMDAwMFVMCgpJc24ndCBNSFpE SVYxMDAwIGp1c3QgS0haPyBTYW1lIGZvciBiZWxvdwoKPiArI2RlZmluZSBEUF9WQ09fSFNDTEtf UkFURV8yNzAwTUhaRElWMTAwMAkyNzAwMDAwVUwKPiArI2RlZmluZSBEUF9WQ09fSFNDTEtfUkFU RV81NDAwTUhaRElWMTAwMAk1NDAwMDAwVUwKPiArI2RlZmluZSBEUF9WQ09fSFNDTEtfUkFURV84 MTAwTUhaRElWMTAwMAk4MTAwMDAwVUwKPiArCj4gKyNkZWZpbmUgTlVNX0RQX0NMT0NLU19NQVgJ CQk2Cj4gKwo+ICsjZGVmaW5lIERQX1BIWV9QTExfUE9MTF9TTEVFUF9VUwkJNTAwCj4gKyNkZWZp bmUgRFBfUEhZX1BMTF9QT0xMX1RJTUVPVVRfVVMJCTEwMDAwCgpUaGVzZSBjYW4gZ28gaW4gdGhl IGMgZmlsZSAoYW5kIHByb2JhYmx5IHRoZSBvdGhlcnMgdG9vKQoKPiArCj4gKyNkZWZpbmUgRFBf VkNPX1JBVEVfODEwME1IWkRJVjEwMDAJCTgxMDAwMDBVTAo+ICsjZGVmaW5lIERQX1ZDT19SQVRF Xzk3MjBNSFpESVYxMDAwCQk5NzIwMDAwVUwKPiArI2RlZmluZSBEUF9WQ09fUkFURV8xMDgwME1I WkRJVjEwMDAJCTEwODAwMDAwVUwKPiArCj4gK3N0cnVjdCBkcF9wbGxfMTBubSB7Cj4gKwlzdHJ1 Y3QgbXNtX2RwX3BsbCBiYXNlOwo+ICsKPiArCWludCBpZDsKPiArCXN0cnVjdCBwbGF0Zm9ybV9k ZXZpY2UgKnBkZXY7Cj4gKwo+ICsJdm9pZCBfX2lvbWVtICpwbGxfYmFzZTsKPiArCXZvaWQgX19p b21lbSAqcGh5X2Jhc2U7Cj4gKwl2b2lkIF9faW9tZW0gKmxuX3R4MF9iYXNlOwo+ICsJdm9pZCBf X2lvbWVtICpsbl90eDFfYmFzZTsKPiArCj4gKwkvKiBwcml2YXRlIGNsb2NrczogKi8KPiArCXN0 cnVjdCBjbGtfaHcgKmh3c1tOVU1fRFBfQ0xPQ0tTX01BWF07Cj4gKwl1MzIgbnVtX2h3czsKPiAr Cj4gKwkvKiBjbG9jay1wcm92aWRlcjogKi8KPiArCXN0cnVjdCBjbGtfaHdfb25lY2VsbF9kYXRh ICpod19kYXRhOwo+ICsKPiArCS8qIGxhbmUgYW5kIG9yaWVudGF0aW9uIHNldHRpbmdzICovCj4g Kwl1OCBsYW5lX2NudDsKPiArCXU4IG9yaWVudGF0aW9uOwo+ICsKPiArCS8qIENPTSBQSFkgc2V0 dGluZ3MgKi8KPiArCXUzMiBoc2Nsa19zZWw7Cj4gKwl1MzIgZGVjX3N0YXJ0X21vZGUwOwo+ICsJ dTMyIGRpdl9mcmFjX3N0YXJ0MV9tb2RlMDsKPiArCXUzMiBkaXZfZnJhY19zdGFydDJfbW9kZTA7 Cj4gKwl1MzIgZGl2X2ZyYWNfc3RhcnQzX21vZGUwOwo+ICsJdTMyIGludGVnbG9vcF9nYWluMF9t b2RlMDsKPiArCXUzMiBpbnRlZ2xvb3BfZ2FpbjFfbW9kZTA7Cj4gKwl1MzIgdmNvX3R1bmVfbWFw Owo+ICsJdTMyIGxvY2tfY21wMV9tb2RlMDsKPiArCXUzMiBsb2NrX2NtcDJfbW9kZTA7Cj4gKwl1 MzIgbG9ja19jbXAzX21vZGUwOwo+ICsJdTMyIGxvY2tfY21wX2VuOwo+ICsKPiArCS8qIFBIWSB2 Y28gZGl2aWRlciAqLwo+ICsJdTMyIHBoeV92Y29fZGl2Owo+ICsJLyoKPiArCSAqIENlcnRhaW4g cGxsJ3MgbmVlZHMgdG8gdXBkYXRlIHRoZSBzYW1lIHZjbyByYXRlIGFmdGVyIHJlc3VtZSBpbgo+ ICsJICogc3VzcGVuZC9yZXN1bWUgc2NlbmFyaW8uIENhY2hlZCB0aGUgdmNvIHJhdGUgZm9yIHN1 Y2ggcGxscy4KPiArCSAqLwo+ICsJdW5zaWduZWQgbG9uZwl2Y29fY2FjaGVkX3JhdGU7Cj4gKwl1 MzIJCWNhY2hlZF9jZmcwOwo+ICsJdTMyCQljYWNoZWRfY2ZnMTsKPiArCXUzMgkJY2FjaGVkX291 dGRpdjsKPiArCj4gKwl1aW50MzJfdCBpbmRleDsKPiArfTsKPiArCj4gKyNkZWZpbmUgdG9fZHBf cGxsXzEwbm0oeCkJY29udGFpbmVyX29mKHgsIHN0cnVjdCBkcF9wbGxfMTBubSwgYmFzZSkKCnR5 cGVzYWZlIGlubGluZSBwbHMKCj4gKwo+ICtpbnQgZHBfdmNvX3NldF9yYXRlXzEwbm0oc3RydWN0 IGNsa19odyAqaHcsIHVuc2lnbmVkIGxvbmcgcmF0ZSwKPiArCQkJCXVuc2lnbmVkIGxvbmcgcGFy ZW50X3JhdGUpOwo+ICt1bnNpZ25lZCBsb25nIGRwX3Zjb19yZWNhbGNfcmF0ZV8xMG5tKHN0cnVj dCBjbGtfaHcgKmh3LAo+ICsJCQkJdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZSk7Cj4gK2xvbmcg ZHBfdmNvX3JvdW5kX3JhdGVfMTBubShzdHJ1Y3QgY2xrX2h3ICpodywgdW5zaWduZWQgbG9uZyBy YXRlLAo+ICsJCQkJdW5zaWduZWQgbG9uZyAqcGFyZW50X3JhdGUpOwo+ICtpbnQgZHBfdmNvX3By ZXBhcmVfMTBubShzdHJ1Y3QgY2xrX2h3ICpodyk7Cj4gK3ZvaWQgZHBfdmNvX3VucHJlcGFyZV8x MG5tKHN0cnVjdCBjbGtfaHcgKmh3KTsKPiArI2VuZGlmIC8qIF9fRFBfUExMXzEwTk1fSCAqLwo+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL3BsbC9kcF9wbGxfMTBubV91dGls LmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2RwL3BsbC9kcF9wbGxfMTBubV91dGlsLmMKPiBuZXcg ZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLjllYjY4ODEKPiAtLS0gL2Rldi9udWxs Cj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9kcC9wbGwvZHBfcGxsXzEwbm1fdXRpbC5jCj4g QEAgLTAsMCArMSw1MzEgQEAKPiArLyogQ29weXJpZ2h0IChjKSAyMDE2LTIwMTgsIFRoZSBMaW51 eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgo+ICsgKgo+ICsgKiBUaGlzIHByb2dy YW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlm eQo+ICsgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIHZlcnNpb24gMiBhbmQKPiArICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRo ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCj4gKyAqCj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBk aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAo+ICsgKiBidXQg V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv Zgo+ICsgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UuICBTZWUgdGhlCj4gKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl dGFpbHMuCj4gKyAqCj4gKyAqLwo+ICsKPiArI2RlZmluZSBwcl9mbXQoZm10KQkiJXM6ICIgZm10 LCBfX2Z1bmNfXwo+ICsKPiArI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgo+ICsjaW5jbHVkZSA8 bGludXgvZXJyLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9pb3BvbGwuaD4KPiArI2luY2x1ZGUgPGxp bnV4L2RlbGF5Lmg+Cj4gKwo+ICsjaW5jbHVkZSAiZHBfcGxsLmgiCj4gKyNpbmNsdWRlICJkcF9w bGxfMTBubS5oIgo+ICsjaW5jbHVkZSAiZHBfZXh0Y29uLmgiCj4gKwo+ICtzdGF0aWMgaW50IGRw X3Zjb19wbGxfaW5pdF9kYl8xMG5tKHN0cnVjdCBtc21fZHBfcGxsICpwbGwsCj4gKwkJdW5zaWdu ZWQgbG9uZyByYXRlKQo+ICt7Cj4gKwlzdHJ1Y3QgZHBfcGxsXzEwbm0gKmRwX3JlcyA9IHRvX2Rw X3BsbF8xMG5tKHBsbCk7Cj4gKwl1MzIgc3BhcmVfdmFsdWUgPSAwOwo+ICsKPiArCXNwYXJlX3Zh bHVlID0gUExMX1JFR19SKGRwX3Jlcy0+cGh5X2Jhc2UsIERQX1BIWV9TUEFSRTApOwo+ICsJZHBf cmVzLT5sYW5lX2NudCA9IHNwYXJlX3ZhbHVlICYgMHgwRjsKPiArCWRwX3Jlcy0+b3JpZW50YXRp b24gPSAoc3BhcmVfdmFsdWUgJiAweEYwKSA+PiA0Owo+ICsKPiArCXByX2RlYnVnKCIlczogc3Bh cmVfdmFsdWU9MHgleCwgbG5fY250PTB4JXgsIG9yaWVudGF0aW9uPTB4JXhcbiIsCj4gKwkJCV9f ZnVuY19fLCBzcGFyZV92YWx1ZSwgZHBfcmVzLT5sYW5lX2NudCwgZHBfcmVzLT5vcmllbnRhdGlv bik7Cj4gKwo+ICsJc3dpdGNoIChyYXRlKSB7Cj4gKwljYXNlIERQX1ZDT19IU0NMS19SQVRFXzE2 MjBNSFpESVYxMDAwOgo+ICsJCXByX2RlYnVnKCIlczogVkNPIHJhdGU6ICVsZFxuIiwgX19mdW5j X18sCj4gKwkJCQlEUF9WQ09fUkFURV85NzIwTUhaRElWMTAwMCk7Cj4gKwkJZHBfcmVzLT5oc2Ns a19zZWwgPSAweDBjOwo+ICsJCWRwX3Jlcy0+ZGVjX3N0YXJ0X21vZGUwID0gMHg2OTsKPiArCQlk cF9yZXMtPmRpdl9mcmFjX3N0YXJ0MV9tb2RlMCA9IDB4MDA7Cj4gKwkJZHBfcmVzLT5kaXZfZnJh Y19zdGFydDJfbW9kZTAgPSAweDgwOwo+ICsJCWRwX3Jlcy0+ZGl2X2ZyYWNfc3RhcnQzX21vZGUw ID0gMHgwNzsKPiArCQlkcF9yZXMtPmludGVnbG9vcF9nYWluMF9tb2RlMCA9IDB4M2Y7Cj4gKwkJ ZHBfcmVzLT5pbnRlZ2xvb3BfZ2FpbjFfbW9kZTAgPSAweDAwOwo+ICsJCWRwX3Jlcy0+dmNvX3R1 bmVfbWFwID0gMHgwMDsKPiArCQlkcF9yZXMtPmxvY2tfY21wMV9tb2RlMCA9IDB4NmY7Cj4gKwkJ ZHBfcmVzLT5sb2NrX2NtcDJfbW9kZTAgPSAweDA4Owo+ICsJCWRwX3Jlcy0+bG9ja19jbXAzX21v ZGUwID0gMHgwMDsKPiArCQlkcF9yZXMtPnBoeV92Y29fZGl2ID0gMHgxOwo+ICsJCWRwX3Jlcy0+ bG9ja19jbXBfZW4gPSAweDAwOwo+ICsJCWJyZWFrOwo+ICsJY2FzZSBEUF9WQ09fSFNDTEtfUkFU RV8yNzAwTUhaRElWMTAwMDoKPiArCQlwcl9kZWJ1ZygiJXM6IFZDTyByYXRlOiAlbGRcbiIsIF9f ZnVuY19fLAo+ICsJCQkJRFBfVkNPX1JBVEVfMTA4MDBNSFpESVYxMDAwKTsKPiArCQlkcF9yZXMt PmhzY2xrX3NlbCA9IDB4MDQ7Cj4gKwkJZHBfcmVzLT5kZWNfc3RhcnRfbW9kZTAgPSAweDY5Owo+ ICsJCWRwX3Jlcy0+ZGl2X2ZyYWNfc3RhcnQxX21vZGUwID0gMHgwMDsKPiArCQlkcF9yZXMtPmRp dl9mcmFjX3N0YXJ0Ml9tb2RlMCA9IDB4ODA7Cj4gKwkJZHBfcmVzLT5kaXZfZnJhY19zdGFydDNf bW9kZTAgPSAweDA3Owo+ICsJCWRwX3Jlcy0+aW50ZWdsb29wX2dhaW4wX21vZGUwID0gMHgzZjsK PiArCQlkcF9yZXMtPmludGVnbG9vcF9nYWluMV9tb2RlMCA9IDB4MDA7Cj4gKwkJZHBfcmVzLT52 Y29fdHVuZV9tYXAgPSAweDAwOwo+ICsJCWRwX3Jlcy0+bG9ja19jbXAxX21vZGUwID0gMHgwZjsK PiArCQlkcF9yZXMtPmxvY2tfY21wMl9tb2RlMCA9IDB4MGU7Cj4gKwkJZHBfcmVzLT5sb2NrX2Nt cDNfbW9kZTAgPSAweDAwOwo+ICsJCWRwX3Jlcy0+cGh5X3Zjb19kaXYgPSAweDE7Cj4gKwkJZHBf cmVzLT5sb2NrX2NtcF9lbiA9IDB4MDA7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIERQX1ZDT19IU0NM S19SQVRFXzU0MDBNSFpESVYxMDAwOgo+ICsJCXByX2RlYnVnKCIlczogVkNPIHJhdGU6ICVsZFxu IiwgX19mdW5jX18sCj4gKwkJCQlEUF9WQ09fUkFURV8xMDgwME1IWkRJVjEwMDApOwo+ICsJCWRw X3Jlcy0+aHNjbGtfc2VsID0gMHgwMDsKPiArCQlkcF9yZXMtPmRlY19zdGFydF9tb2RlMCA9IDB4 OGM7Cj4gKwkJZHBfcmVzLT5kaXZfZnJhY19zdGFydDFfbW9kZTAgPSAweDAwOwo+ICsJCWRwX3Jl cy0+ZGl2X2ZyYWNfc3RhcnQyX21vZGUwID0gMHgwMDsKPiArCQlkcF9yZXMtPmRpdl9mcmFjX3N0 YXJ0M19tb2RlMCA9IDB4MGE7Cj4gKwkJZHBfcmVzLT5pbnRlZ2xvb3BfZ2FpbjBfbW9kZTAgPSAw eDNmOwo+ICsJCWRwX3Jlcy0+aW50ZWdsb29wX2dhaW4xX21vZGUwID0gMHgwMDsKPiArCQlkcF9y ZXMtPnZjb190dW5lX21hcCA9IDB4MDA7Cj4gKwkJZHBfcmVzLT5sb2NrX2NtcDFfbW9kZTAgPSAw eDFmOwo+ICsJCWRwX3Jlcy0+bG9ja19jbXAyX21vZGUwID0gMHgxYzsKPiArCQlkcF9yZXMtPmxv Y2tfY21wM19tb2RlMCA9IDB4MDA7Cj4gKwkJZHBfcmVzLT5waHlfdmNvX2RpdiA9IDB4MjsKPiAr CQlkcF9yZXMtPmxvY2tfY21wX2VuID0gMHgwMDsKPiArCQlicmVhazsKPiArCWNhc2UgRFBfVkNP X0hTQ0xLX1JBVEVfODEwME1IWkRJVjEwMDA6Cj4gKwkJcHJfZGVidWcoIiVzOiBWQ08gcmF0ZTog JWxkXG4iLCBfX2Z1bmNfXywKPiArCQkJCURQX1ZDT19SQVRFXzgxMDBNSFpESVYxMDAwKTsKPiAr CQlkcF9yZXMtPmhzY2xrX3NlbCA9IDB4MDM7Cj4gKwkJZHBfcmVzLT5kZWNfc3RhcnRfbW9kZTAg PSAweDY5Owo+ICsJCWRwX3Jlcy0+ZGl2X2ZyYWNfc3RhcnQxX21vZGUwID0gMHgwMDsKPiArCQlk cF9yZXMtPmRpdl9mcmFjX3N0YXJ0Ml9tb2RlMCA9IDB4ODA7Cj4gKwkJZHBfcmVzLT5kaXZfZnJh Y19zdGFydDNfbW9kZTAgPSAweDA3Owo+ICsJCWRwX3Jlcy0+aW50ZWdsb29wX2dhaW4wX21vZGUw ID0gMHgzZjsKPiArCQlkcF9yZXMtPmludGVnbG9vcF9nYWluMV9tb2RlMCA9IDB4MDA7Cj4gKwkJ ZHBfcmVzLT52Y29fdHVuZV9tYXAgPSAweDAwOwo+ICsJCWRwX3Jlcy0+bG9ja19jbXAxX21vZGUw ID0gMHgyZjsKPiArCQlkcF9yZXMtPmxvY2tfY21wMl9tb2RlMCA9IDB4MmE7Cj4gKwkJZHBfcmVz LT5sb2NrX2NtcDNfbW9kZTAgPSAweDAwOwo+ICsJCWRwX3Jlcy0+cGh5X3Zjb19kaXYgPSAweDA7 Cj4gKwkJZHBfcmVzLT5sb2NrX2NtcF9lbiA9IDB4MDg7Cj4gKwkJYnJlYWs7CgpTaW5jZSB0aGlz IGlzIGFsbCBzdGF0aWMsIGEgc3RhdGljIGNvbnN0IGxvb2t1cCB0YWJsZSB3b3VsZCBwcm9iYWJs eSBiZSBtb3JlCmFwcHJvcHJpYXRlLgoKPiArCWRlZmF1bHQ6Cj4gKwkJcmV0dXJuIC1FSU5WQUw7 CgpMb2cgdGhpcyBwbGVhc2UKCj4gKwl9Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGlj IGludCBkcF9jb25maWdfdmNvX3JhdGVfMTBubShzdHJ1Y3QgbXNtX2RwX3BsbCAqcGxsLAo+ICsJ CXVuc2lnbmVkIGxvbmcgcmF0ZSkKPiArewo+ICsJdTMyIHJlcyA9IDA7Cj4gKwlzdHJ1Y3QgZHBf cGxsXzEwbm0gKmRwX3JlcyA9IHRvX2RwX3BsbF8xMG5tKHBsbCk7Cj4gKwo+ICsJcmVzID0gZHBf dmNvX3BsbF9pbml0X2RiXzEwbm0ocGxsLCByYXRlKTsKPiArCWlmIChyZXMpIHsKPiArCQlwcl9l cnIoIlZDTyBJbml0IERCIGZhaWxlZFxuIik7Cj4gKwkJcmV0dXJuIHJlczsKPiArCX0KPiArCj4g KwlpZiAoZHBfcmVzLT5sYW5lX2NudCAhPSA0KSB7Cj4gKwkJaWYgKGRwX3Jlcy0+b3JpZW50YXRp b24gPT0gT1JJRU5UQVRJT05fQ0MyKQo+ICsJCQlQTExfUkVHX1coZHBfcmVzLT5waHlfYmFzZSwg RFBfUEhZX1BEX0NUTCwgMHg2ZCk7Cj4gKwkJZWxzZQo+ICsJCQlQTExfUkVHX1coZHBfcmVzLT5w aHlfYmFzZSwgRFBfUEhZX1BEX0NUTCwgMHg3NSk7Cj4gKwl9IGVsc2Ugewo+ICsJCVBMTF9SRUdf VyhkcF9yZXMtPnBoeV9iYXNlLCBEUF9QSFlfUERfQ1RMLCAweDdkKTsKPiArCX0KPiArCj4gKwkv KiBNYWtlIHN1cmUgdGhlIFBIWSByZWdpc3RlciB3cml0ZXMgYXJlIGRvbmUgKi8KPiArCXdtYigp Owo+ICsKPiArCVBMTF9SRUdfVyhkcF9yZXMtPnBsbF9iYXNlLCBRU0VSREVTX0NPTV9TVlNfTU9E RV9DTEtfU0VMLCAweDAxKTsKPiArCVBMTF9SRUdfVyhkcF9yZXMtPnBsbF9iYXNlLCBRU0VSREVT X0NPTV9TWVNDTEtfRU5fU0VMLCAweDM3KTsKPiArCVBMTF9SRUdfVyhkcF9yZXMtPnBsbF9iYXNl LCBRU0VSREVTX0NPTV9TWVNfQ0xLX0NUUkwsIDB4MDIpOwo+ICsJUExMX1JFR19XKGRwX3Jlcy0+ cGxsX2Jhc2UsIFFTRVJERVNfQ09NX0NMS19FTkFCTEUxLCAweDBlKTsKPiArCVBMTF9SRUdfVyhk cF9yZXMtPnBsbF9iYXNlLCBRU0VSREVTX0NPTV9TWVNDTEtfQlVGX0VOQUJMRSwgMHgwNik7Cj4g KwlQTExfUkVHX1coZHBfcmVzLT5wbGxfYmFzZSwgUVNFUkRFU19DT01fQ0xLX1NFTCwgMHgzMCk7 Cj4gKwlQTExfUkVHX1coZHBfcmVzLT5wbGxfYmFzZSwgUVNFUkRFU19DT01fQ01OX0NPTkZJRywg MHgwMik7Cj4gKwo+ICsJLyogRGlmZmVyZW50IGZvciBlYWNoIGNsb2NrIHJhdGVzICovCj4gKwlQ TExfUkVHX1coZHBfcmVzLT5wbGxfYmFzZSwKPiArCQlRU0VSREVTX0NPTV9IU0NMS19TRUwsIGRw X3Jlcy0+aHNjbGtfc2VsKTsKPiArCVBMTF9SRUdfVyhkcF9yZXMtPnBsbF9iYXNlLAo+ICsJCVFT RVJERVNfQ09NX0RFQ19TVEFSVF9NT0RFMCwgZHBfcmVzLT5kZWNfc3RhcnRfbW9kZTApOwo+ICsJ UExMX1JFR19XKGRwX3Jlcy0+cGxsX2Jhc2UsCj4gKwkJUVNFUkRFU19DT01fRElWX0ZSQUNfU1RB UlQxX01PREUwLCBkcF9yZXMtPmRpdl9mcmFjX3N0YXJ0MV9tb2RlMCk7Cj4gKwlQTExfUkVHX1co ZHBfcmVzLT5wbGxfYmFzZSwKPiArCQlRU0VSREVTX0NPTV9ESVZfRlJBQ19TVEFSVDJfTU9ERTAs IGRwX3Jlcy0+ZGl2X2ZyYWNfc3RhcnQyX21vZGUwKTsKPiArCVBMTF9SRUdfVyhkcF9yZXMtPnBs bF9iYXNlLAo+ICsJCVFTRVJERVNfQ09NX0RJVl9GUkFDX1NUQVJUM19NT0RFMCwgZHBfcmVzLT5k aXZfZnJhY19zdGFydDNfbW9kZTApOwo+ICsJUExMX1JFR19XKGRwX3Jlcy0+cGxsX2Jhc2UsCj4g KwkJUVNFUkRFU19DT01fSU5URUdMT09QX0dBSU4wX01PREUwLCBkcF9yZXMtPmludGVnbG9vcF9n YWluMF9tb2RlMCk7Cj4gKwlQTExfUkVHX1coZHBfcmVzLT5wbGxfYmFzZSwKPiArCQlRU0VSREVT X0NPTV9JTlRFR0xPT1BfR0FJTjFfTU9ERTAsIGRwX3Jlcy0+aW50ZWdsb29wX2dhaW4xX21vZGUw KTsKPiArCVBMTF9SRUdfVyhkcF9yZXMtPnBsbF9iYXNlLAo+ICsJCVFTRVJERVNfQ09NX1ZDT19U VU5FX01BUCwgZHBfcmVzLT52Y29fdHVuZV9tYXApOwo+ICsJUExMX1JFR19XKGRwX3Jlcy0+cGxs X2Jhc2UsCj4gKwkJUVNFUkRFU19DT01fTE9DS19DTVAxX01PREUwLCBkcF9yZXMtPmxvY2tfY21w MV9tb2RlMCk7Cj4gKwlQTExfUkVHX1coZHBfcmVzLT5wbGxfYmFzZSwKPiArCQlRU0VSREVTX0NP TV9MT0NLX0NNUDJfTU9ERTAsIGRwX3Jlcy0+bG9ja19jbXAyX21vZGUwKTsKPiArCVBMTF9SRUdf VyhkcF9yZXMtPnBsbF9iYXNlLAo+ICsJCVFTRVJERVNfQ09NX0xPQ0tfQ01QM19NT0RFMCwgZHBf cmVzLT5sb2NrX2NtcDNfbW9kZTApOwo+ICsJLyogTWFrZSBzdXJlIHRoZSBQTEwgcmVnaXN0ZXIg d3JpdGVzIGFyZSBkb25lICovCj4gKwl3bWIoKTsKPiArCj4gKwlQTExfUkVHX1coZHBfcmVzLT5w bGxfYmFzZSwgUVNFUkRFU19DT01fQkdfVElNRVIsIDB4MGEpOwo+ICsJUExMX1JFR19XKGRwX3Jl cy0+cGxsX2Jhc2UsIFFTRVJERVNfQ09NX0NPUkVDTEtfRElWX01PREUwLCAweDBhKTsKPiArCVBM TF9SRUdfVyhkcF9yZXMtPnBsbF9iYXNlLCBRU0VSREVTX0NPTV9WQ09fVFVORV9DVFJMLCAweDAw KTsKPiArCVBMTF9SRUdfVyhkcF9yZXMtPnBsbF9iYXNlLCBRU0VSREVTX0NPTV9CSUFTX0VOX0NM S0JVRkxSX0VOLCAweDNmKTsKPiArCVBMTF9SRUdfVyhkcF9yZXMtPnBsbF9iYXNlLCBRU0VSREVT X0NPTV9DT1JFX0NMS19FTiwgMHgxZik7Cj4gKwlQTExfUkVHX1coZHBfcmVzLT5wbGxfYmFzZSwg UVNFUkRFU19DT01fUExMX0lWQ08sIDB4MDcpOwo+ICsJUExMX1JFR19XKGRwX3Jlcy0+cGxsX2Jh c2UsCj4gKwkJUVNFUkRFU19DT01fTE9DS19DTVBfRU4sIGRwX3Jlcy0+bG9ja19jbXBfZW4pOwo+ ICsJUExMX1JFR19XKGRwX3Jlcy0+cGxsX2Jhc2UsIFFTRVJERVNfQ09NX1BMTF9DQ1RSTF9NT0RF MCwgMHgzNik7Cj4gKwlQTExfUkVHX1coZHBfcmVzLT5wbGxfYmFzZSwgUVNFUkRFU19DT01fUExM X1JDVFJMX01PREUwLCAweDE2KTsKPiArCVBMTF9SRUdfVyhkcF9yZXMtPnBsbF9iYXNlLCBRU0VS REVTX0NPTV9DUF9DVFJMX01PREUwLCAweDA2KTsKPiArCS8qIE1ha2Ugc3VyZSB0aGUgUEhZIHJl Z2lzdGVyIHdyaXRlcyBhcmUgZG9uZSAqLwo+ICsJd21iKCk7Cj4gKwo+ICsJaWYgKGRwX3Jlcy0+ b3JpZW50YXRpb24gPT0gT1JJRU5UQVRJT05fQ0MyKQo+ICsJCVBMTF9SRUdfVyhkcF9yZXMtPnBo eV9iYXNlLCBEUF9QSFlfTU9ERSwgMHg0Yyk7Cj4gKwllbHNlCj4gKwkJUExMX1JFR19XKGRwX3Jl cy0+cGh5X2Jhc2UsIERQX1BIWV9NT0RFLCAweDVjKTsKPiArCS8qIE1ha2Ugc3VyZSB0aGUgUExM IHJlZ2lzdGVyIHdyaXRlcyBhcmUgZG9uZSAqLwo+ICsJd21iKCk7Cj4gKwo+ICsJLyogVFggTGFu ZSBjb25maWd1cmF0aW9uICovCj4gKwlQTExfUkVHX1coZHBfcmVzLT5waHlfYmFzZSwKPiArCQkJ RFBfUEhZX1RYMF9UWDFfTEFORV9DVEwsIDB4MDUpOwo+ICsJUExMX1JFR19XKGRwX3Jlcy0+cGh5 X2Jhc2UsCj4gKwkJCURQX1BIWV9UWDJfVFgzX0xBTkVfQ1RMLCAweDA1KTsKPiArCj4gKwkvKiBU WC0wIHJlZ2lzdGVyIGNvbmZpZ3VyYXRpb24gKi8KPiArCVBMTF9SRUdfVyhkcF9yZXMtPmxuX3R4 MF9iYXNlLCBUWG5fVFJBTlNDRUlWRVJfQklBU19FTiwgMHgxYSk7Cj4gKwlQTExfUkVHX1coZHBf cmVzLT5sbl90eDBfYmFzZSwgVFhuX1ZNT0RFX0NUUkwxLCAweDQwKTsKPiArCVBMTF9SRUdfVyhk cF9yZXMtPmxuX3R4MF9iYXNlLCBUWG5fUFJFX1NUQUxMX0xET19CT09TVF9FTiwgMHgzMCk7Cj4g KwlQTExfUkVHX1coZHBfcmVzLT5sbl90eDBfYmFzZSwgVFhuX0lOVEVSRkFDRV9TRUxFQ1QsIDB4 M2QpOwo+ICsJUExMX1JFR19XKGRwX3Jlcy0+bG5fdHgwX2Jhc2UsIFRYbl9DTEtCVUZfRU5BQkxF LCAweDBmKTsKPiArCVBMTF9SRUdfVyhkcF9yZXMtPmxuX3R4MF9iYXNlLCBUWG5fUkVTRVRfVFNZ TkNfRU4sIDB4MDMpOwo+ICsJUExMX1JFR19XKGRwX3Jlcy0+bG5fdHgwX2Jhc2UsIFRYbl9UUkFO X0RSVlJfRU1QX0VOLCAweDAzKTsKPiArCVBMTF9SRUdfVyhkcF9yZXMtPmxuX3R4MF9iYXNlLAo+ ICsJCVRYbl9QQVJSQVRFX1JFQ19ERVRFQ1RfSURMRV9FTiwgMHgwMCk7Cj4gKwlQTExfUkVHX1co ZHBfcmVzLT5sbl90eDBfYmFzZSwgVFhuX1RYX0lOVEVSRkFDRV9NT0RFLCAweDAwKTsKPiArCVBM TF9SRUdfVyhkcF9yZXMtPmxuX3R4MF9iYXNlLCBUWG5fVFhfQkFORCwgMHg0KTsKPiArCj4gKwkv KiBUWC0xIHJlZ2lzdGVyIGNvbmZpZ3VyYXRpb24gKi8KPiArCVBMTF9SRUdfVyhkcF9yZXMtPmxu X3R4MV9iYXNlLCBUWG5fVFJBTlNDRUlWRVJfQklBU19FTiwgMHgxYSk7Cj4gKwlQTExfUkVHX1co ZHBfcmVzLT5sbl90eDFfYmFzZSwgVFhuX1ZNT0RFX0NUUkwxLCAweDQwKTsKPiArCVBMTF9SRUdf VyhkcF9yZXMtPmxuX3R4MV9iYXNlLCBUWG5fUFJFX1NUQUxMX0xET19CT09TVF9FTiwgMHgzMCk7 Cj4gKwlQTExfUkVHX1coZHBfcmVzLT5sbl90eDFfYmFzZSwgVFhuX0lOVEVSRkFDRV9TRUxFQ1Qs IDB4M2QpOwo+ICsJUExMX1JFR19XKGRwX3Jlcy0+bG5fdHgxX2Jhc2UsIFRYbl9DTEtCVUZfRU5B QkxFLCAweDBmKTsKPiArCVBMTF9SRUdfVyhkcF9yZXMtPmxuX3R4MV9iYXNlLCBUWG5fUkVTRVRf VFNZTkNfRU4sIDB4MDMpOwo+ICsJUExMX1JFR19XKGRwX3Jlcy0+bG5fdHgxX2Jhc2UsIFRYbl9U UkFOX0RSVlJfRU1QX0VOLCAweDAzKTsKPiArCVBMTF9SRUdfVyhkcF9yZXMtPmxuX3R4MV9iYXNl LAo+ICsJCVRYbl9QQVJSQVRFX1JFQ19ERVRFQ1RfSURMRV9FTiwgMHgwMCk7Cj4gKwlQTExfUkVH X1coZHBfcmVzLT5sbl90eDFfYmFzZSwgVFhuX1RYX0lOVEVSRkFDRV9NT0RFLCAweDAwKTsKPiAr CVBMTF9SRUdfVyhkcF9yZXMtPmxuX3R4MV9iYXNlLCBUWG5fVFhfQkFORCwgMHg0KTsKPiArCS8q IE1ha2Ugc3VyZSB0aGUgUEhZIHJlZ2lzdGVyIHdyaXRlcyBhcmUgZG9uZSAqLwo+ICsJd21iKCk7 Cj4gKwo+ICsJLyogZGVwZW5kZW50IG9uIHRoZSB2Y28gZnJlcXVlbmN5ICovCj4gKwlQTExfUkVH X1coZHBfcmVzLT5waHlfYmFzZSwgRFBfUEhZX1ZDT19ESVYsIGRwX3Jlcy0+cGh5X3Zjb19kaXYp Owo+ICsKPiArCXJldHVybiByZXM7Cj4gK30KPiArCj4gK3N0YXRpYyBib29sIGRwXzEwbm1fcGxs X2xvY2tfc3RhdHVzKHN0cnVjdCBkcF9wbGxfMTBubSAqZHBfcmVzKQo+ICt7Cj4gKwl1MzIgc3Rh dHVzOwo+ICsJYm9vbCBwbGxfbG9ja2VkOwo+ICsKPiArCS8qIHBvbGwgZm9yIFBMTCBsb2NrIHN0 YXR1cyAqLwo+ICsJaWYgKHJlYWRsX3BvbGxfdGltZW91dF9hdG9taWMoKGRwX3Jlcy0+cGxsX2Jh c2UgKwo+ICsJCQlRU0VSREVTX0NPTV9DX1JFQURZX1NUQVRVUyksCj4gKwkJCXN0YXR1cywKPiAr CQkJKChzdGF0dXMgJiBCSVQoMCkpID4gMCksCj4gKwkJCURQX1BIWV9QTExfUE9MTF9TTEVFUF9V UywKPiArCQkJRFBfUEhZX1BMTF9QT0xMX1RJTUVPVVRfVVMpKSB7Cj4gKwkJcHJfZXJyKCIlczog Q19SRUFEWSBzdGF0dXMgaXMgbm90IGhpZ2guIFN0YXR1cz0leFxuIiwKPiArCQkJCV9fZnVuY19f LCBzdGF0dXMpOwo+ICsJCXBsbF9sb2NrZWQgPSBmYWxzZTsKPiArCX0gZWxzZSB7Cj4gKwkJcGxs X2xvY2tlZCA9IHRydWU7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIHBsbF9sb2NrZWQ7Cj4gK30KPiAr Cj4gK3N0YXRpYyBib29sIGRwXzEwbm1fcGh5X3JkeV9zdGF0dXMoc3RydWN0IGRwX3BsbF8xMG5t ICpkcF9yZXMpCj4gK3sKPiArCXUzMiBzdGF0dXM7Cj4gKwlib29sIHBoeV9yZWFkeSA9IHRydWU7 Cj4gKwo+ICsJLyogcG9sbCBmb3IgUEhZIHJlYWR5IHN0YXR1cyAqLwo+ICsJaWYgKHJlYWRsX3Bv bGxfdGltZW91dF9hdG9taWMoKGRwX3Jlcy0+cGh5X2Jhc2UgKwo+ICsJCQlEUF9QSFlfU1RBVFVT KSwKPiArCQkJc3RhdHVzLAo+ICsJCQkoKHN0YXR1cyAmIChCSVQoMSkpKSA+IDApLAo+ICsJCQlE UF9QSFlfUExMX1BPTExfU0xFRVBfVVMsCj4gKwkJCURQX1BIWV9QTExfUE9MTF9USU1FT1VUX1VT KSkgewo+ICsJCXByX2VycigiJXM6IFBoeV9yZWFkeSBpcyBub3QgaGlnaC4gU3RhdHVzPSV4XG4i LAo+ICsJCQkJX19mdW5jX18sIHN0YXR1cyk7Cj4gKwkJcGh5X3JlYWR5ID0gZmFsc2U7Cj4gKwl9 Cj4gKwo+ICsJcmV0dXJuIHBoeV9yZWFkeTsKPiArfQo+ICsKPiArc3RhdGljIGludCBkcF9wbGxf ZW5hYmxlXzEwbm0oc3RydWN0IGNsa19odyAqaHcpCj4gK3sKPiArCWludCByYyA9IDA7Cj4gKwlz dHJ1Y3QgbXNtX2RwX3BsbCAqcGxsID0gaHdfY2xrX3RvX3BsbChodyk7Cj4gKwlzdHJ1Y3QgZHBf cGxsXzEwbm0gKmRwX3JlcyA9IHRvX2RwX3BsbF8xMG5tKHBsbCk7Cj4gKwl1MzIgYmlhc19lbiwg ZHJ2cl9lbjsKPiArCj4gKwlQTExfUkVHX1coZHBfcmVzLT5waHlfYmFzZSwgRFBfUEhZX0FVWF9D RkcyLCAweDA0KTsKPiArCVBMTF9SRUdfVyhkcF9yZXMtPnBoeV9iYXNlLCBEUF9QSFlfQ0ZHLCAw eDAxKTsKPiArCVBMTF9SRUdfVyhkcF9yZXMtPnBoeV9iYXNlLCBEUF9QSFlfQ0ZHLCAweDA1KTsK PiArCVBMTF9SRUdfVyhkcF9yZXMtPnBoeV9iYXNlLCBEUF9QSFlfQ0ZHLCAweDAxKTsKPiArCVBM TF9SRUdfVyhkcF9yZXMtPnBoeV9iYXNlLCBEUF9QSFlfQ0ZHLCAweDA5KTsKPiArCXdtYigpOyAv KiBNYWtlIHN1cmUgdGhlIFBIWSByZWdpc3RlciB3cml0ZXMgYXJlIGRvbmUgKi8KPiArCj4gKwlQ TExfUkVHX1coZHBfcmVzLT5wbGxfYmFzZSwgUVNFUkRFU19DT01fUkVTRVRTTV9DTlRSTCwgMHgy MCk7Cj4gKwl3bWIoKTsJLyogTWFrZSBzdXJlIHRoZSBQTEwgcmVnaXN0ZXIgd3JpdGVzIGFyZSBk b25lICovCj4gKwo+ICsJaWYgKCFkcF8xMG5tX3BsbF9sb2NrX3N0YXR1cyhkcF9yZXMpKSB7Cj4g KwkJcmMgPSAtRUlOVkFMOwo+ICsJCWdvdG8gbG9ja19lcnI7Cj4gKwl9Cj4gKwo+ICsJUExMX1JF R19XKGRwX3Jlcy0+cGh5X2Jhc2UsIERQX1BIWV9DRkcsIDB4MTkpOwo+ICsJLyogTWFrZSBzdXJl IHRoZSBQSFkgcmVnaXN0ZXIgd3JpdGVzIGFyZSBkb25lICovCj4gKwl3bWIoKTsKPiArCS8qIHBv bGwgZm9yIFBIWSByZWFkeSBzdGF0dXMgKi8KPiArCWlmICghZHBfMTBubV9waHlfcmR5X3N0YXR1 cyhkcF9yZXMpKSB7Cj4gKwkJcmMgPSAtRUlOVkFMOwo+ICsJCWdvdG8gbG9ja19lcnI7Cj4gKwl9 Cj4gKwo+ICsJcHJfZGVidWcoIiVzOiBQTEwgaXMgbG9ja2VkXG4iLCBfX2Z1bmNfXyk7Cj4gKwo+ ICsJaWYgKGRwX3Jlcy0+bGFuZV9jbnQgPT0gMSkgewo+ICsJCWJpYXNfZW4gPSAweDNlOwo+ICsJ CWRydnJfZW4gPSAweDEzOwo+ICsJfSBlbHNlIHsKPiArCQliaWFzX2VuID0gMHgzZjsKPiArCQlk cnZyX2VuID0gMHgxMDsKPiArCX0KPiArCj4gKwlpZiAoZHBfcmVzLT5sYW5lX2NudCAhPSA0KSB7 Cj4gKwkJaWYgKGRwX3Jlcy0+b3JpZW50YXRpb24gPT0gT1JJRU5UQVRJT05fQ0MxKSB7Cj4gKwkJ CVBMTF9SRUdfVyhkcF9yZXMtPmxuX3R4MV9iYXNlLAo+ICsJCQkJVFhuX0hJR0haX0RSVlJfRU4s IGRydnJfZW4pOwo+ICsJCQlQTExfUkVHX1coZHBfcmVzLT5sbl90eDFfYmFzZSwKPiArCQkJCVRY bl9UUkFOU0NFSVZFUl9CSUFTX0VOLCBiaWFzX2VuKTsKPiArCQl9IGVsc2Ugewo+ICsJCQlQTExf UkVHX1coZHBfcmVzLT5sbl90eDBfYmFzZSwKPiArCQkJCVRYbl9ISUdIWl9EUlZSX0VOLCBkcnZy X2VuKTsKPiArCQkJUExMX1JFR19XKGRwX3Jlcy0+bG5fdHgwX2Jhc2UsCj4gKwkJCQlUWG5fVFJB TlNDRUlWRVJfQklBU19FTiwgYmlhc19lbik7Cj4gKwkJfQo+ICsJfSBlbHNlIHsKPiArCQlQTExf UkVHX1coZHBfcmVzLT5sbl90eDBfYmFzZSwgVFhuX0hJR0haX0RSVlJfRU4sIGRydnJfZW4pOwo+ ICsJCVBMTF9SRUdfVyhkcF9yZXMtPmxuX3R4MF9iYXNlLAo+ICsJCQlUWG5fVFJBTlNDRUlWRVJf QklBU19FTiwgYmlhc19lbik7Cj4gKwkJUExMX1JFR19XKGRwX3Jlcy0+bG5fdHgxX2Jhc2UsIFRY bl9ISUdIWl9EUlZSX0VOLCBkcnZyX2VuKTsKPiArCQlQTExfUkVHX1coZHBfcmVzLT5sbl90eDFf YmFzZSwKPiArCQkJVFhuX1RSQU5TQ0VJVkVSX0JJQVNfRU4sIGJpYXNfZW4pOwo+ICsJfQoKSSB0 aGluayB5b3UgY291bGQgcHJvYmFibHkgc2ltcGxpZnkgdGhpcyBjb2RlIGJsb2NrIHdpdGggYSBi aXQgb2YgZWZmb3J0LAplc3BlY2lhbGx5IHRoZSB0b3AgY29uZGl0aW9uLgoKPiArCj4gKwlQTExf UkVHX1coZHBfcmVzLT5sbl90eDBfYmFzZSwgVFhuX1RYX1BPTF9JTlYsIDB4MGEpOwo+ICsJUExM X1JFR19XKGRwX3Jlcy0+bG5fdHgxX2Jhc2UsIFRYbl9UWF9QT0xfSU5WLCAweDBhKTsKPiArCVBM TF9SRUdfVyhkcF9yZXMtPnBoeV9iYXNlLCBEUF9QSFlfQ0ZHLCAweDE4KTsKPiArCXVkZWxheSgy MDAwKTsKCndoeSB1ZGVsYXk/Cgo+ICsKPiArCVBMTF9SRUdfVyhkcF9yZXMtPnBoeV9iYXNlLCBE UF9QSFlfQ0ZHLCAweDE5KTsKPiArCj4gKwkvKgo+ICsJICogTWFrZSBzdXJlIGFsbCB0aGUgcmVn aXN0ZXIgd3JpdGVzIGFyZSBjb21wbGV0ZWQgYmVmb3JlCj4gKwkgKiBkb2luZyBhbnkgb3RoZXIg b3BlcmF0aW9uCj4gKwkgKi8KPiArCXdtYigpOwo+ICsKPiArCS8qIHBvbGwgZm9yIFBIWSByZWFk eSBzdGF0dXMgKi8KPiArCWlmICghZHBfMTBubV9waHlfcmR5X3N0YXR1cyhkcF9yZXMpKSB7Cj4g KwkJcmMgPSAtRUlOVkFMOwo+ICsJCWdvdG8gbG9ja19lcnI7Cj4gKwl9Cj4gKwo+ICsJUExMX1JF R19XKGRwX3Jlcy0+bG5fdHgwX2Jhc2UsIFRYbl9UWF9EUlZfTFZMLCAweDM4KTsKPiArCVBMTF9S RUdfVyhkcF9yZXMtPmxuX3R4MV9iYXNlLCBUWG5fVFhfRFJWX0xWTCwgMHgzOCk7Cj4gKwlQTExf UkVHX1coZHBfcmVzLT5sbl90eDBfYmFzZSwgVFhuX1RYX0VNUF9QT1NUMV9MVkwsIDB4MjApOwo+ ICsJUExMX1JFR19XKGRwX3Jlcy0+bG5fdHgxX2Jhc2UsIFRYbl9UWF9FTVBfUE9TVDFfTFZMLCAw eDIwKTsKPiArCVBMTF9SRUdfVyhkcF9yZXMtPmxuX3R4MF9iYXNlLCBUWG5fUkVTX0NPREVfTEFO RV9PRkZTRVRfVFgsIDB4MDYpOwo+ICsJUExMX1JFR19XKGRwX3Jlcy0+bG5fdHgxX2Jhc2UsIFRY bl9SRVNfQ09ERV9MQU5FX09GRlNFVF9UWCwgMHgwNik7Cj4gKwlQTExfUkVHX1coZHBfcmVzLT5s bl90eDBfYmFzZSwgVFhuX1JFU19DT0RFX0xBTkVfT0ZGU0VUX1JYLCAweDA3KTsKPiArCVBMTF9S RUdfVyhkcF9yZXMtPmxuX3R4MV9iYXNlLCBUWG5fUkVTX0NPREVfTEFORV9PRkZTRVRfUlgsIDB4 MDcpOwo+ICsJLyogTWFrZSBzdXJlIHRoZSBQSFkgcmVnaXN0ZXIgd3JpdGVzIGFyZSBkb25lICov Cj4gKwl3bWIoKTsKPiArCj4gK2xvY2tfZXJyOgo+ICsJcmV0dXJuIHJjOwoKUmVtb3ZlIGxvY2tf ZXJyIGFuZCByZXR1cm4gZGlyZWN0bHkgYWJvdmUuCgo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGRw X3BsbF9kaXNhYmxlXzEwbm0oc3RydWN0IGNsa19odyAqaHcpCj4gK3sKPiArCWludCByYyA9IDA7 Cj4gKwlzdHJ1Y3QgbXNtX2RwX3BsbCAqcGxsID0gaHdfY2xrX3RvX3BsbChodyk7Cj4gKwlzdHJ1 Y3QgZHBfcGxsXzEwbm0gKmRwX3JlcyA9IHRvX2RwX3BsbF8xMG5tKHBsbCk7Cj4gKwo+ICsJLyog QXNzZXJ0IERQIFBIWSBwb3dlciBkb3duICovCj4gKwlQTExfUkVHX1coZHBfcmVzLT5waHlfYmFz ZSwgRFBfUEhZX1BEX0NUTCwgMHgyKTsKPiArCS8qCj4gKwkgKiBNYWtlIHN1cmUgYWxsIHRoZSBy ZWdpc3RlciB3cml0ZXMgdG8gZGlzYWJsZSBQTEwgYXJlCj4gKwkgKiBjb21wbGV0ZWQgYmVmb3Jl IGRvaW5nIGFueSBvdGhlciBvcGVyYXRpb24KPiArCSAqLwo+ICsJd21iKCk7Cj4gKwo+ICsJcmV0 dXJuIHJjOwo+ICt9Cj4gKwo+ICsKPiAraW50IGRwX3Zjb19wcmVwYXJlXzEwbm0oc3RydWN0IGNs a19odyAqaHcpCj4gK3sKPiArCWludCByYyA9IDA7Cj4gKwlzdHJ1Y3QgbXNtX2RwX3BsbCAqcGxs ID0gaHdfY2xrX3RvX3BsbChodyk7Cj4gKwlzdHJ1Y3QgZHBfcGxsXzEwbm0gKmRwX3JlcyA9IHRv X2RwX3BsbF8xMG5tKHBsbCk7Cj4gKwo+ICsJcHJfZGVidWcoInJhdGU9JWxkXG4iLCBwbGwtPnJh dGUpOwo+ICsJaWYgKChkcF9yZXMtPnZjb19jYWNoZWRfcmF0ZSAhPSAwKQo+ICsJCSYmIChkcF9y ZXMtPnZjb19jYWNoZWRfcmF0ZSA9PSBwbGwtPnJhdGUpKSB7CgoKCWlmIChkcF9yZXMtPnZjb19j YWNoZWRfcmF0ZSAmJiBkcF9yZXMtPnZjb19jYWNoZWRfcmF0ZSA9PSBwbGwtPnJhdGUpIHsKCgo+ ICsJCXJjID0gcGxsLT5jbGtfaHcuaW5pdC0+b3BzLT5zZXRfcmF0ZShodywKPiArCQkJZHBfcmVz LT52Y29fY2FjaGVkX3JhdGUsIGRwX3Jlcy0+dmNvX2NhY2hlZF9yYXRlKTsKPiArCQlpZiAocmMp IHsKPiArCQkJcHJfZXJyKCJpbmRleD0lZCB2Y29fc2V0X3JhdGUgZmFpbGVkLiByYz0lZFxuIiwK PiArCQkJCXJjLCBkcF9yZXMtPmluZGV4KTsKPiArCQkJZ290byBlcnJvcjsKPiArCQl9Cj4gKwl9 Cj4gKwo+ICsJcmMgPSBkcF9wbGxfZW5hYmxlXzEwbm0oaHcpOwo+ICsJaWYgKHJjKSB7Cj4gKwkJ cHJfZXJyKCJuZHg9JWQgZmFpbGVkIHRvIGVuYWJsZSBkcCBwbGxcbiIsCj4gKwkJCQkJZHBfcmVz LT5pbmRleCk7Cj4gKwkJZ290byBlcnJvcjsKPiArCX0KPiArCj4gKwlwbGwtPnBsbF9vbiA9IHRy dWU7CgpEbyB5b3UgbmVlZCBsb2NraW5nIGFyb3VuZCB0aGUgcHJlcGFyZS91bnByZXBhcmUgZnVu Y3Rpb25zPwoKCj4gK2Vycm9yOgo+ICsJcmV0dXJuIHJjOwoKU2FtZSBjb21tZW50IGFzIGFsd2F5 cwoKPiArfQo+ICsKPiArdm9pZCBkcF92Y29fdW5wcmVwYXJlXzEwbm0oc3RydWN0IGNsa19odyAq aHcpCj4gK3sKPiArCXN0cnVjdCBtc21fZHBfcGxsICpwbGwgPSBod19jbGtfdG9fcGxsKGh3KTsK PiArCXN0cnVjdCBkcF9wbGxfMTBubSAqZHBfcmVzID0gdG9fZHBfcGxsXzEwbm0ocGxsKTsKPiAr Cj4gKwlpZiAoIWRwX3Jlcykgewo+ICsJCXByX2VycigiSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJc biIpOwo+ICsJCXJldHVybjsKPiArCX0KPiArCj4gKwlpZiAoIXBsbC0+cGxsX29uKSB7Cj4gKwkJ cHJfZXJyKCJwbGwgcmVzb3VyY2UgY2FuJ3QgYmUgZW5hYmxlZFxuIik7Cj4gKwkJcmV0dXJuOwo+ ICsJfQo+ICsJZHBfcmVzLT52Y29fY2FjaGVkX3JhdGUgPSBwbGwtPnJhdGU7Cj4gKwlkcF9wbGxf ZGlzYWJsZV8xMG5tKGh3KTsKPiArCj4gKwkvL2RwX3Jlcy0+aGFuZG9mZl9yZXNvdXJjZXMgPSBm YWxzZTsKCj8/Cgo+ICsJcGxsLT5wbGxfb24gPSBmYWxzZTsKPiArfQo+ICsKPiAraW50IGRwX3Zj b19zZXRfcmF0ZV8xMG5tKHN0cnVjdCBjbGtfaHcgKmh3LCB1bnNpZ25lZCBsb25nIHJhdGUsCj4g KwkJCQkJdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZSkKPiArewo+ICsJc3RydWN0IG1zbV9kcF9w bGwgKnBsbCA9IGh3X2Nsa190b19wbGwoaHcpOwo+ICsJaW50IHJjOwo+ICsKPiArCXByX2RlYnVn KCJEUCBsYW5lIENMSyByYXRlPSVsZFxuIiwgcmF0ZSk7Cj4gKwo+ICsJcmMgPSBkcF9jb25maWdf dmNvX3JhdGVfMTBubShwbGwsIHJhdGUpOwo+ICsJaWYgKHJjKQo+ICsJCXByX2VycigiJXM6IEZh aWxlZCB0byBzZXQgY2xrIHJhdGVcbiIsIF9fZnVuY19fKTsKClNob3VsZCB5b3UgcmV0dXJuIGVh cmx5IGhlcmU/Cgo+ICsKPiArCXBsbC0+cmF0ZSA9IHJhdGU7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4g K30KPiArCj4gK3Vuc2lnbmVkIGxvbmcgZHBfdmNvX3JlY2FsY19yYXRlXzEwbm0oc3RydWN0IGNs a19odyAqaHcsCj4gKwkJCQkJdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZSkKPiArewo+ICsJc3Ry dWN0IG1zbV9kcF9wbGwgKnBsbCA9IGh3X2Nsa190b19wbGwoaHcpOwo+ICsJc3RydWN0IGRwX3Bs bF8xMG5tICpkcF9yZXMgPSB0b19kcF9wbGxfMTBubShwbGwpOwo+ICsJdTMyIGRpdiwgaHNjbGtf ZGl2LCBsaW5rX2Nsa19kaXYgPSAwOwo+ICsJdTY0IHZjb19yYXRlOwo+ICsKPiArCWRpdiA9IFBM TF9SRUdfUihkcF9yZXMtPnBsbF9iYXNlLCBRU0VSREVTX0NPTV9IU0NMS19TRUwpOwo+ICsJZGl2 ICY9IDB4MGY7Cj4gKwo+ICsJaWYgKGRpdiA9PSAxMikKPiArCQloc2Nsa19kaXYgPSA2OyAvKiBE ZWZhdWx0ICovCj4gKwllbHNlIGlmIChkaXYgPT0gNCkKPiArCQloc2Nsa19kaXYgPSA0Owo+ICsJ ZWxzZSBpZiAoZGl2ID09IDApCj4gKwkJaHNjbGtfZGl2ID0gMjsKPiArCWVsc2UgaWYgKGRpdiA9 PSAzKQo+ICsJCWhzY2xrX2RpdiA9IDE7Cj4gKwllbHNlIHsKPiArCQlwcl9kZWJ1ZygidW5rbm93 biBkaXZpZGVyLiBmb3JjaW5nIHRvIGRlZmF1bHRcbiIpOwo+ICsJCWhzY2xrX2RpdiA9IDU7Cj4g Kwl9Cj4gKwo+ICsJZGl2ID0gUExMX1JFR19SKGRwX3Jlcy0+cGh5X2Jhc2UsIERQX1BIWV9BVVhf Q0ZHMik7Cj4gKwlkaXYgPj49IDI7Cj4gKwo+ICsJaWYgKChkaXYgJiAweDMpID09IDApCj4gKwkJ bGlua19jbGtfZGl2ID0gNTsKPiArCWVsc2UgaWYgKChkaXYgJiAweDMpID09IDEpCj4gKwkJbGlu a19jbGtfZGl2ID0gMTA7Cj4gKwllbHNlIGlmICgoZGl2ICYgMHgzKSA9PSAyKQo+ICsJCWxpbmtf Y2xrX2RpdiA9IDIwOwo+ICsJZWxzZQo+ICsJCXByX2VycigiJXM6IHVuc3VwcG9ydGVkIGRpdi4g UGh5X21vZGU6ICVkXG4iLCBfX2Z1bmNfXywgZGl2KTsKPiArCj4gKwlpZiAobGlua19jbGtfZGl2 ID09IDIwKSB7Cj4gKwkJdmNvX3JhdGUgPSBEUF9WQ09fSFNDTEtfUkFURV8yNzAwTUhaRElWMTAw MDsKPiArCX0gZWxzZSB7Cj4gKwkJaWYgKGhzY2xrX2RpdiA9PSA2KQo+ICsJCQl2Y29fcmF0ZSA9 IERQX1ZDT19IU0NMS19SQVRFXzE2MjBNSFpESVYxMDAwOwo+ICsJCWVsc2UgaWYgKGhzY2xrX2Rp diA9PSA0KQo+ICsJCQl2Y29fcmF0ZSA9IERQX1ZDT19IU0NMS19SQVRFXzI3MDBNSFpESVYxMDAw Owo+ICsJCWVsc2UgaWYgKGhzY2xrX2RpdiA9PSAyKQo+ICsJCQl2Y29fcmF0ZSA9IERQX1ZDT19I U0NMS19SQVRFXzU0MDBNSFpESVYxMDAwOwo+ICsJCWVsc2UKPiArCQkJdmNvX3JhdGUgPSBEUF9W Q09fSFNDTEtfUkFURV84MTAwTUhaRElWMTAwMDsKPiArCX0KPiArCj4gKwlwcl9kZWJ1ZygicmV0 dXJuaW5nIHZjbyByYXRlID0gJWx1XG4iLCAodW5zaWduZWQgbG9uZyl2Y29fcmF0ZSk7Cj4gKwo+ ICsJZHBfcmVzLT52Y29fY2FjaGVkX3JhdGUgPSBwbGwtPnJhdGUgPSB2Y29fcmF0ZTsKPiArCXJl dHVybiAodW5zaWduZWQgbG9uZyl2Y29fcmF0ZTsKCkhvcGVmdWxseSB0aGlzIGZ1bmN0aW9uIHdp bGwgYmVjb21lIGVhc2llciB0byBwYXJzZSB3aXRoICNkZWZpbmUnZCB2YWx1ZXMKCj4gK30KPiAr Cj4gK2xvbmcgZHBfdmNvX3JvdW5kX3JhdGVfMTBubShzdHJ1Y3QgY2xrX2h3ICpodywgdW5zaWdu ZWQgbG9uZyByYXRlLAo+ICsJCQl1bnNpZ25lZCBsb25nICpwYXJlbnRfcmF0ZSkKPiArewo+ICsJ dW5zaWduZWQgbG9uZyBycmF0ZSA9IHJhdGU7Cj4gKwlzdHJ1Y3QgbXNtX2RwX3BsbCAqcGxsID0g aHdfY2xrX3RvX3BsbChodyk7Cj4gKwo+ICsJaWYgKHJhdGUgPD0gcGxsLT5taW5fcmF0ZSkKPiAr CQlycmF0ZSA9IHBsbC0+bWluX3JhdGU7Cj4gKwllbHNlIGlmIChyYXRlIDw9IERQX1ZDT19IU0NM S19SQVRFXzI3MDBNSFpESVYxMDAwKQo+ICsJCXJyYXRlID0gRFBfVkNPX0hTQ0xLX1JBVEVfMjcw ME1IWkRJVjEwMDA7Cj4gKwllbHNlIGlmIChyYXRlIDw9IERQX1ZDT19IU0NMS19SQVRFXzU0MDBN SFpESVYxMDAwKQo+ICsJCXJyYXRlID0gRFBfVkNPX0hTQ0xLX1JBVEVfNTQwME1IWkRJVjEwMDA7 Cj4gKwllbHNlCj4gKwkJcnJhdGUgPSBwbGwtPm1heF9yYXRlOwoKWW91J3JlIGFzc3VtaW5nIG1p bl9yYXRlIGlzIDwgMi43TUh6IGFuZCBtYXhfcmF0ZSA+IDUuNCBNSHouIFRoaXMgaXMgdHJ1ZSBp biB0aGUKY3VycmVudCBjb2RlLCBidXQgY291bGQgY2hhbmdlIGluIHRoZSBmdXR1cmUuIEZvcnR1 bmF0bGV5IG1pbi9tYXhfcmF0ZSBhcmUgb25seQp1c2VkIGhlcmUuIFNvIGRlbGV0ZSB0aGVtIGZy b20gdGhlIHN0cnVjdCBhbmQgdXNlIHRoZSBEUF9WQ09fSFNDTEtfUkFURV8qIHZhbHVlcwpkaXJl Y3RseSBoZXJlLgoKPiArCj4gKwlwcl9kZWJ1ZygiJXM6IHJyYXRlPSVsZFxuIiwgX19mdW5jX18s IHJyYXRlKTsKPiArCj4gKwkqcGFyZW50X3JhdGUgPSBycmF0ZTsKPiArCXJldHVybiBycmF0ZTsK PiArfQo+ICsKPiAtLSAKPiBUaGUgUXVhbGNvbW0gSW5ub3ZhdGlvbiBDZW50ZXIsIEluYy4gaXMg YSBtZW1iZXIgb2YgdGhlIENvZGUgQXVyb3JhIEZvcnVtLAo+IGEgTGludXggRm91bmRhdGlvbiBD b2xsYWJvcmF0aXZlIFByb2plY3QKPiAKCi0tIApTZWFuIFBhdWwsIFNvZnR3YXJlIEVuZ2luZWVy LCBHb29nbGUgLyBDaHJvbWl1bSBPUwpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVl ZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5m by9kcmktZGV2ZWwK