From mboxrd@z Thu Jan 1 00:00:00 1970 From: Wei Liu Subject: [PATCH v4 02/27] x86: move PV privileged instruction emulation code Date: Thu, 8 Jun 2017 18:11:38 +0100 Message-ID: <20170608171203.20416-3-wei.liu2@citrix.com> References: <20170608171203.20416-1-wei.liu2@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta3.messagelabs.com ([195.245.230.39]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dJ0yj-0004sY-P9 for xen-devel@lists.xenproject.org; Thu, 08 Jun 2017 17:12:14 +0000 In-Reply-To: <20170608171203.20416-1-wei.liu2@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Xen-devel Cc: Andrew Cooper , Wei Liu , Jan Beulich List-Id: xen-devel@lists.xenproject.org TW92ZSB0aGUgY29kZSB0byBwdi9lbXVsLXByaXYtb3AuYy4gUHJlZml4IGVtdWxhdGVfcHJpdmls ZWdlZF9vcCB3aXRoCnB2XyBhbmQgZXhwb3J0IGl0IHZpYSBwdi90cmFwcy5oLgoKQWxzbyBtb3Zl IGdwcl9zd2l0Y2guUyBzaW5jZSBpdCBpcyB1c2VkIGJ5IHRoZSBwcml2aWxlZ2VkIGluc3RydWN0 aW9uCmVtdWxhdGlvbiBjb2RlIG9ubHkuCgpDb2RlIG1vdGlvbiBvbmx5IGV4Y2VwdCBmb3IgdGhl IHJlbmFtZS4gQ2xlYW51cCBldGMgd2lsbCBjb21lIGxhdGVyLgoKU2lnbmVkLW9mZi1ieTogV2Vp IExpdSA8d2VpLmxpdTJAY2l0cml4LmNvbT4KLS0tCiB4ZW4vYXJjaC94ODYvcHYvTWFrZWZpbGUg ICAgICAgICAgICAgICAgIHwgICAgMiArCiB4ZW4vYXJjaC94ODYvcHYvZW11bC1wcml2LW9wLmMg ICAgICAgICAgIHwgMTQxNCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIHhlbi9hcmNo L3g4Ni97eDg2XzY0ID0+IHB2fS9ncHJfc3dpdGNoLlMgfCAgICAwCiB4ZW4vYXJjaC94ODYvdHJh cHMuYyAgICAgICAgICAgICAgICAgICAgIHwgMTM2MCArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCiB4ZW4vYXJjaC94ODYveDg2XzY0L01ha2VmaWxlICAgICAgICAgICAgIHwgICAgMSAtCiB4 ZW4vaW5jbHVkZS9hc20teDg2L3B2L3RyYXBzLmggICAgICAgICAgIHwgICA0NiArCiA2IGZpbGVz IGNoYW5nZWQsIDE0NjQgaW5zZXJ0aW9ucygrKSwgMTM1OSBkZWxldGlvbnMoLSkKIGNyZWF0ZSBt b2RlIDEwMDY0NCB4ZW4vYXJjaC94ODYvcHYvZW11bC1wcml2LW9wLmMKIHJlbmFtZSB4ZW4vYXJj aC94ODYve3g4Nl82NCA9PiBwdn0vZ3ByX3N3aXRjaC5TICgxMDAlKQogY3JlYXRlIG1vZGUgMTAw NjQ0IHhlbi9pbmNsdWRlL2FzbS14ODYvcHYvdHJhcHMuaAoKZGlmZiAtLWdpdCBhL3hlbi9hcmNo L3g4Ni9wdi9NYWtlZmlsZSBiL3hlbi9hcmNoL3g4Ni9wdi9NYWtlZmlsZQppbmRleCA1NjQyMDJj YmI3Li5lNDhjNDYwNjgwIDEwMDY0NAotLS0gYS94ZW4vYXJjaC94ODYvcHYvTWFrZWZpbGUKKysr IGIveGVuL2FyY2gveDg2L3B2L01ha2VmaWxlCkBAIC00LDMgKzQsNSBAQCBvYmoteSArPSB0cmFw cy5vCiBvYmotYmluLXkgKz0gZG9tMF9idWlsZC5pbml0Lm8KIG9iai15ICs9IGRvbWFpbi5vCiBv YmoteSArPSBlbXVsYXRlLm8KK29iai15ICs9IGVtdWwtcHJpdi1vcC5vCitvYmotYmluLXkgKz0g Z3ByX3N3aXRjaC5vCmRpZmYgLS1naXQgYS94ZW4vYXJjaC94ODYvcHYvZW11bC1wcml2LW9wLmMg Yi94ZW4vYXJjaC94ODYvcHYvZW11bC1wcml2LW9wLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwMC4uZmQ1ZmQ3NGJkMQotLS0gL2Rldi9udWxsCisrKyBiL3hlbi9hcmNoL3g4 Ni9wdi9lbXVsLXByaXYtb3AuYwpAQCAtMCwwICsxLDE0MTQgQEAKKy8qKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioKKyAqIGFyY2gveDg2L3B2L2VtdWwtcHJpdi1vcC5jCisgKgorICogRW11bGF0ZSBwcml2 aWxlZ2VkIGluc3RydWN0aW9ucyBmb3IgUFYgZ3Vlc3RzCisgKgorICogTW9kaWZpY2F0aW9ucyB0 byBMaW51eCBvcmlnaW5hbCBhcmUgY29weXJpZ2h0IChjKSAyMDAyLTIwMDQsIEsgQSBGcmFzZXIK KyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1 dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQg eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBk aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g IFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu CisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBJZiBub3QsIHNl ZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworI2luY2x1ZGUgPHhlbi9l cnJuby5oPgorI2luY2x1ZGUgPHhlbi9ldmVudC5oPgorI2luY2x1ZGUgPHhlbi9ndWVzdF9hY2Nl c3MuaD4KKyNpbmNsdWRlIDx4ZW4vaW9jYXAuaD4KKyNpbmNsdWRlIDx4ZW4vc3BpbmxvY2suaD4K KyNpbmNsdWRlIDx4ZW4vdHJhY2UuaD4KKworI2luY2x1ZGUgPGFzbS9hcGljLmg+CisjaW5jbHVk ZSA8YXNtL2RlYnVncmVnLmg+CisjaW5jbHVkZSA8YXNtL2hwZXQuaD4KKyNpbmNsdWRlIDxhc20v aHlwZXJjYWxsLmg+CisjaW5jbHVkZSA8YXNtL21jMTQ2ODE4cnRjLmg+CisjaW5jbHVkZSA8YXNt L3AybS5oPgorI2luY2x1ZGUgPGFzbS9wdi90cmFwcy5oPgorI2luY2x1ZGUgPGFzbS9zaGFyZWQu aD4KKyNpbmNsdWRlIDxhc20vdHJhcHMuaD4KKyNpbmNsdWRlIDxhc20veDg2X2VtdWxhdGUuaD4K KworI2luY2x1ZGUgPHhzbS94c20uaD4KKworI2luY2x1ZGUgIi4uL3g4Nl82NC9tbWNvbmZpZy5o IgorI2luY2x1ZGUgImVtdWxhdGUuaCIKKworLyoqKioqKioqKioqKioqKioqKioqKioqCisgKiBJ L08gZW11bGF0aW9uIHN1cHBvcnQKKyAqLworCitzdHJ1Y3QgcHJpdl9vcF9jdHh0IHsKKyAgICBz dHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCBjdHh0OworICAgIHN0cnVjdCB7CisgICAgICAgIHVuc2ln bmVkIGxvbmcgYmFzZSwgbGltaXQ7CisgICAgfSBjczsKKyAgICBjaGFyICppb19lbXVsX3N0dWI7 CisgICAgdW5zaWduZWQgaW50IGJwbWF0Y2g7CisgICAgdW5zaWduZWQgaW50IHRzYzsKKyNkZWZp bmUgVFNDX0JBU0UgMQorI2RlZmluZSBUU0NfQVVYIDIKK307CisKKy8qIEkvTyBlbXVsYXRpb24g c3VwcG9ydC4gSGVscGVyIHJvdXRpbmVzIGZvciwgYW5kIHR5cGUgb2YsIHRoZSBzdGFjayBzdHVi LiovCit2b2lkIGhvc3RfdG9fZ3Vlc3RfZ3ByX3N3aXRjaChzdHJ1Y3QgY3B1X3VzZXJfcmVncyAq KTsKK3Vuc2lnbmVkIGxvbmcgZ3Vlc3RfdG9faG9zdF9ncHJfc3dpdGNoKHVuc2lnbmVkIGxvbmcp OworCit2b2lkICgqcHZfcG9zdF9vdXRiX2hvb2spKHVuc2lnbmVkIGludCBwb3J0LCB1OCB2YWx1 ZSk7CisKK3R5cGVkZWYgdm9pZCBpb19lbXVsX3N0dWJfdChzdHJ1Y3QgY3B1X3VzZXJfcmVncyAq KTsKKworc3RhdGljIGlvX2VtdWxfc3R1Yl90ICppb19lbXVsX3N0dWJfc2V0dXAoc3RydWN0IHBy aXZfb3BfY3R4dCAqY3R4dCwgdTggb3Bjb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHBvcnQsIHVuc2lnbmVkIGludCBieXRlcykKK3sK KyAgICBpZiAoICFjdHh0LT5pb19lbXVsX3N0dWIgKQorICAgICAgICBjdHh0LT5pb19lbXVsX3N0 dWIgPSBtYXBfZG9tYWluX3BhZ2UoX21mbih0aGlzX2NwdShzdHVicy5tZm4pKSkgKworICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRoaXNfY3B1KHN0dWJzLmFk ZHIpICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB+UEFH RV9NQVNLKSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBT VFVCX0JVRl9TSVpFIC8gMjsKKworICAgIC8qIG1vdnEgJGhvc3RfdG9fZ3Vlc3RfZ3ByX3N3aXRj aCwlcmN4ICovCisgICAgY3R4dC0+aW9fZW11bF9zdHViWzBdID0gMHg0ODsKKyAgICBjdHh0LT5p b19lbXVsX3N0dWJbMV0gPSAweGI5OworICAgICoodm9pZCAqKikmY3R4dC0+aW9fZW11bF9zdHVi WzJdID0gKHZvaWQgKilob3N0X3RvX2d1ZXN0X2dwcl9zd2l0Y2g7CisgICAgLyogY2FsbHEgKiVy Y3ggKi8KKyAgICBjdHh0LT5pb19lbXVsX3N0dWJbMTBdID0gMHhmZjsKKyAgICBjdHh0LT5pb19l bXVsX3N0dWJbMTFdID0gMHhkMTsKKyAgICAvKiBkYXRhMTYgb3Igbm9wICovCisgICAgY3R4dC0+ aW9fZW11bF9zdHViWzEyXSA9IChieXRlcyAhPSAyKSA/IDB4OTAgOiAweDY2OworICAgIC8qIDxp by1hY2Nlc3Mgb3Bjb2RlPiAqLworICAgIGN0eHQtPmlvX2VtdWxfc3R1YlsxM10gPSBvcGNvZGU7 CisgICAgLyogaW1tOCBvciBub3AgKi8KKyAgICBjdHh0LT5pb19lbXVsX3N0dWJbMTRdID0gIShv cGNvZGUgJiA4KSA/IHBvcnQgOiAweDkwOworICAgIC8qIHJldCAoanVtcHMgdG8gZ3Vlc3RfdG9f aG9zdF9ncHJfc3dpdGNoKSAqLworICAgIGN0eHQtPmlvX2VtdWxfc3R1YlsxNV0gPSAweGMzOwor ICAgIEJVSUxEX0JVR19PTihTVFVCX0JVRl9TSVpFIC8gMiA8IDE2KTsKKworICAgIGlmICggaW9l bXVsX2hhbmRsZV9xdWlyayApCisgICAgICAgIGlvZW11bF9oYW5kbGVfcXVpcmsob3Bjb2RlLCAm Y3R4dC0+aW9fZW11bF9zdHViWzEyXSwgY3R4dC0+Y3R4dC5yZWdzKTsKKworICAgIC8qIEhhbmR5 IGZ1bmN0aW9uLXR5cGVkIHBvaW50ZXIgdG8gdGhlIHN0dWIuICovCisgICAgcmV0dXJuICh2b2lk ICopKHRoaXNfY3B1KHN0dWJzLmFkZHIpICsgU1RVQl9CVUZfU0laRSAvIDIpOworfQorCisKKy8q IFBlcmZvcm0gSU9QTCBjaGVjayBiZXR3ZWVuIHRoZSB2Y3B1J3Mgc2hhZG93ZWQgSU9QTCwgYW5k IHRoZSBhc3N1bWVkIGNwbC4gKi8KK3N0YXRpYyBib29sX3QgaW9wbF9vayhjb25zdCBzdHJ1Y3Qg dmNwdSAqdiwgY29uc3Qgc3RydWN0IGNwdV91c2VyX3JlZ3MgKnJlZ3MpCit7CisgICAgdW5zaWdu ZWQgaW50IGNwbCA9IGd1ZXN0X2tlcm5lbF9tb2RlKHYsIHJlZ3MpID8KKyAgICAgICAgKFZNX0FT U0lTVCh2LT5kb21haW4sIGFyY2hpdGVjdHVyYWxfaW9wbCkgPyAwIDogMSkgOiAzOworCisgICAg QVNTRVJUKCh2LT5hcmNoLnB2X3ZjcHUuaW9wbCAmIH5YODZfRUZMQUdTX0lPUEwpID09IDApOwor CisgICAgcmV0dXJuIElPUEwoY3BsKSA8PSB2LT5hcmNoLnB2X3ZjcHUuaW9wbDsKK30KKworLyog SGFzIHRoZSBndWVzdCByZXF1ZXN0ZWQgc3VmZmljaWVudCBwZXJtaXNzaW9uIGZvciB0aGlzIEkv TyBhY2Nlc3M/ICovCitzdGF0aWMgaW50IGd1ZXN0X2lvX29rYXkoCisgICAgdW5zaWduZWQgaW50 IHBvcnQsIHVuc2lnbmVkIGludCBieXRlcywKKyAgICBzdHJ1Y3QgdmNwdSAqdiwgc3RydWN0IGNw dV91c2VyX3JlZ3MgKnJlZ3MpCit7CisgICAgLyogSWYgaW4gdXNlciBtb2RlLCBzd2l0Y2ggdG8g a2VybmVsIG1vZGUganVzdCB0byByZWFkIEkvTyBiaXRtYXAuICovCisgICAgaW50IHVzZXJfbW9k ZSA9ICEodi0+YXJjaC5mbGFncyAmIFRGX2tlcm5lbF9tb2RlKTsKKyNkZWZpbmUgVE9HR0xFX01P REUoKSBpZiAoIHVzZXJfbW9kZSApIHRvZ2dsZV9ndWVzdF9tb2RlKHYpCisKKyAgICBpZiAoIGlv cGxfb2sodiwgcmVncykgKQorICAgICAgICByZXR1cm4gMTsKKworICAgIGlmICggdi0+YXJjaC5w dl92Y3B1LmlvYm1wX2xpbWl0ID4gKHBvcnQgKyBieXRlcykgKQorICAgIHsKKyAgICAgICAgdW5p b24geyB1aW50OF90IGJ5dGVzWzJdOyB1aW50MTZfdCBtYXNrOyB9IHg7CisKKyAgICAgICAgLyoK KyAgICAgICAgICogR3JhYiBwZXJtaXNzaW9uIGJ5dGVzIGZyb20gZ3Vlc3Qgc3BhY2UuIEluYWNj ZXNzaWJsZSBieXRlcyBhcmUKKyAgICAgICAgICogcmVhZCBhcyAweGZmIChubyBhY2Nlc3MgYWxs b3dlZCkuCisgICAgICAgICAqLworICAgICAgICBUT0dHTEVfTU9ERSgpOworICAgICAgICBzd2l0 Y2ggKCBfX2NvcHlfZnJvbV9ndWVzdF9vZmZzZXQoeC5ieXRlcywgdi0+YXJjaC5wdl92Y3B1Lmlv Ym1wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9ydD4+Mywg MikgKQorICAgICAgICB7CisgICAgICAgIGRlZmF1bHQ6IHguYnl0ZXNbMF0gPSB+MDsKKyAgICAg ICAgICAgIC8qIGZhbGx0aHJvdWdoICovCisgICAgICAgIGNhc2UgMTogIHguYnl0ZXNbMV0gPSB+ MDsKKyAgICAgICAgICAgIC8qIGZhbGx0aHJvdWdoICovCisgICAgICAgIGNhc2UgMDogIGJyZWFr OworICAgICAgICB9CisgICAgICAgIFRPR0dMRV9NT0RFKCk7CisKKyAgICAgICAgaWYgKCAoeC5t YXNrICYgKCgoMTw8Ynl0ZXMpLTEpIDw8IChwb3J0JjcpKSkgPT0gMCApCisgICAgICAgICAgICBy ZXR1cm4gMTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworLyogSGFzIHRoZSBhZG1pbmlz dHJhdG9yIGdyYW50ZWQgc3VmZmljaWVudCBwZXJtaXNzaW9uIGZvciB0aGlzIEkvTyBhY2Nlc3M/ ICovCitzdGF0aWMgYm9vbF90IGFkbWluX2lvX29rYXkodW5zaWduZWQgaW50IHBvcnQsIHVuc2ln bmVkIGludCBieXRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3Qg ZG9tYWluICpkKQoreworICAgIC8qCisgICAgICogUG9ydCAweGNmOCAoQ09ORklHX0FERFJFU1Mp IGlzIG9ubHkgdmlzaWJsZSBmb3IgRFdPUkQgYWNjZXNzZXMuCisgICAgICogV2UgbmV2ZXIgcGVy bWl0IGRpcmVjdCBhY2Nlc3MgdG8gdGhhdCByZWdpc3Rlci4KKyAgICAgKi8KKyAgICBpZiAoIChw b3J0ID09IDB4Y2Y4KSAmJiAoYnl0ZXMgPT0gNCkgKQorICAgICAgICByZXR1cm4gMDsKKworICAg IC8qIFdlIGFsc28gbmV2ZXIgcGVybWl0IGRpcmVjdCBhY2Nlc3MgdG8gdGhlIFJUQy9DTU9TIHJl Z2lzdGVycy4gKi8KKyAgICBpZiAoICgocG9ydCAmIH4xKSA9PSBSVENfUE9SVCgwKSkgKQorICAg ICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBpb3BvcnRzX2FjY2Vzc19wZXJtaXR0ZWQoZCwg cG9ydCwgcG9ydCArIGJ5dGVzIC0gMSk7Cit9CisKK3N0YXRpYyBib29sX3QgcGNpX2NmZ19vayhz dHJ1Y3QgZG9tYWluICpjdXJyZCwgdW5zaWduZWQgaW50IHN0YXJ0LAorICAgICAgICAgICAgICAg ICAgICAgICAgIHVuc2lnbmVkIGludCBzaXplLCB1aW50MzJfdCAqd3JpdGUpCit7CisgICAgdWlu dDMyX3QgbWFjaGluZV9iZGY7CisKKyAgICBpZiAoICFpc19oYXJkd2FyZV9kb21haW4oY3VycmQp ICkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoICFDRjhfRU5BQkxFRChjdXJyZC0+YXJj aC5wY2lfY2Y4KSApCisgICAgICAgIHJldHVybiAxOworCisgICAgbWFjaGluZV9iZGYgPSBDRjhf QkRGKGN1cnJkLT5hcmNoLnBjaV9jZjgpOworICAgIGlmICggd3JpdGUgKQorICAgIHsKKyAgICAg ICAgY29uc3QgdW5zaWduZWQgbG9uZyAqcm9fbWFwID0gcGNpX2dldF9yb19tYXAoMCk7CisKKyAg ICAgICAgaWYgKCByb19tYXAgJiYgdGVzdF9iaXQobWFjaGluZV9iZGYsIHJvX21hcCkgKQorICAg ICAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIHN0YXJ0IHw9IENGOF9BRERSX0xPKGN1cnJk LT5hcmNoLnBjaV9jZjgpOworICAgIC8qIEFNRCBleHRlbmRlZCBjb25maWd1cmF0aW9uIHNwYWNl IGFjY2Vzcz8gKi8KKyAgICBpZiAoIENGOF9BRERSX0hJKGN1cnJkLT5hcmNoLnBjaV9jZjgpICYm CisgICAgICAgICBib290X2NwdV9kYXRhLng4Nl92ZW5kb3IgPT0gWDg2X1ZFTkRPUl9BTUQgJiYK KyAgICAgICAgIGJvb3RfY3B1X2RhdGEueDg2ID49IDB4MTAgJiYgYm9vdF9jcHVfZGF0YS54ODYg PD0gMHgxNyApCisgICAgeworICAgICAgICB1aW50NjRfdCBtc3JfdmFsOworCisgICAgICAgIGlm ICggcmRtc3Jfc2FmZShNU1JfQU1ENjRfTkJfQ0ZHLCBtc3JfdmFsKSApCisgICAgICAgICAgICBy ZXR1cm4gMDsKKyAgICAgICAgaWYgKCBtc3JfdmFsICYgKDFVTEwgPDwgQU1ENjRfTkJfQ0ZHX0NG OF9FWFRfRU5BQkxFX0JJVCkgKQorICAgICAgICAgICAgc3RhcnQgfD0gQ0Y4X0FERFJfSEkoY3Vy cmQtPmFyY2gucGNpX2NmOCk7CisgICAgfQorCisgICAgcmV0dXJuICF3cml0ZSA/CisgICAgICAg ICAgIHhzbV9wY2lfY29uZmlnX3Blcm1pc3Npb24oWFNNX0hPT0ssIGN1cnJkLCBtYWNoaW5lX2Jk ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydCwgc3RhcnQgKyBz aXplIC0gMSwgMCkgPT0gMCA6CisgICAgICAgICAgIHBjaV9jb25mX3dyaXRlX2ludGVyY2VwdCgw LCBtYWNoaW5lX2JkZiwgc3RhcnQsIHNpemUsIHdyaXRlKSA+PSAwOworfQorCit1aW50MzJfdCBn dWVzdF9pb19yZWFkKHVuc2lnbmVkIGludCBwb3J0LCB1bnNpZ25lZCBpbnQgYnl0ZXMsCisgICAg ICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkb21haW4gKmN1cnJkKQoreworICAgIHVpbnQzMl90 IGRhdGEgPSAwOworICAgIHVuc2lnbmVkIGludCBzaGlmdCA9IDA7CisKKyAgICBpZiAoIGFkbWlu X2lvX29rYXkocG9ydCwgYnl0ZXMsIGN1cnJkKSApCisgICAgeworICAgICAgICBzd2l0Y2ggKCBi eXRlcyApCisgICAgICAgIHsKKyAgICAgICAgY2FzZSAxOiByZXR1cm4gaW5iKHBvcnQpOworICAg ICAgICBjYXNlIDI6IHJldHVybiBpbncocG9ydCk7CisgICAgICAgIGNhc2UgNDogcmV0dXJuIGlu bChwb3J0KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHdoaWxlICggYnl0ZXMgIT0gMCApCisg ICAgeworICAgICAgICB1bnNpZ25lZCBpbnQgc2l6ZSA9IDE7CisgICAgICAgIHVpbnQzMl90IHN1 Yl9kYXRhID0gfjA7CisKKyAgICAgICAgaWYgKCAocG9ydCA9PSAweDQyKSB8fCAocG9ydCA9PSAw eDQzKSB8fCAocG9ydCA9PSAweDYxKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIHN1Yl9kYXRh ID0gcHZfcGl0X2hhbmRsZXIocG9ydCwgMCwgMCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBp ZiAoIHBvcnQgPT0gUlRDX1BPUlQoMCkgKQorICAgICAgICB7CisgICAgICAgICAgICBzdWJfZGF0 YSA9IGN1cnJkLT5hcmNoLmNtb3NfaWR4OworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKCAo cG9ydCA9PSBSVENfUE9SVCgxKSkgJiYKKyAgICAgICAgICAgICAgICAgIGlvcG9ydHNfYWNjZXNz X3Blcm1pdHRlZChjdXJyZCwgUlRDX1BPUlQoMCksIFJUQ19QT1JUKDEpKSApCisgICAgICAgIHsK KyAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKyAgICAgICAgICAgIHNwaW5fbG9j a19pcnFzYXZlKCZydGNfbG9jaywgZmxhZ3MpOworICAgICAgICAgICAgb3V0YihjdXJyZC0+YXJj aC5jbW9zX2lkeCAmIDB4N2YsIFJUQ19QT1JUKDApKTsKKyAgICAgICAgICAgIHN1Yl9kYXRhID0g aW5iKFJUQ19QT1JUKDEpKTsKKyAgICAgICAgICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJ0 Y19sb2NrLCBmbGFncyk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoIChwb3J0ID09IDB4 Y2Y4KSAmJiAoYnl0ZXMgPT0gNCkgKQorICAgICAgICB7CisgICAgICAgICAgICBzaXplID0gNDsK KyAgICAgICAgICAgIHN1Yl9kYXRhID0gY3VycmQtPmFyY2gucGNpX2NmODsKKyAgICAgICAgfQor ICAgICAgICBlbHNlIGlmICggKHBvcnQgJiAweGZmZmMpID09IDB4Y2ZjICkKKyAgICAgICAgewor ICAgICAgICAgICAgc2l6ZSA9IG1pbihieXRlcywgNCAtIChwb3J0ICYgMykpOworICAgICAgICAg ICAgaWYgKCBzaXplID09IDMgKQorICAgICAgICAgICAgICAgIHNpemUgPSAyOworICAgICAgICAg ICAgaWYgKCBwY2lfY2ZnX29rKGN1cnJkLCBwb3J0ICYgMywgc2l6ZSwgTlVMTCkgKQorICAgICAg ICAgICAgICAgIHN1Yl9kYXRhID0gcGNpX2NvbmZfcmVhZChjdXJyZC0+YXJjaC5wY2lfY2Y4LCBw b3J0ICYgMywgc2l6ZSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIHNpemUgPT0gNCApCisg ICAgICAgICAgICByZXR1cm4gc3ViX2RhdGE7CisKKyAgICAgICAgZGF0YSB8PSAoc3ViX2RhdGEg JiAoKDF1IDw8IChzaXplICogOCkpIC0gMSkpIDw8IHNoaWZ0OworICAgICAgICBzaGlmdCArPSBz aXplICogODsKKyAgICAgICAgcG9ydCArPSBzaXplOworICAgICAgICBieXRlcyAtPSBzaXplOwor ICAgIH0KKworICAgIHJldHVybiBkYXRhOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGNoZWNr X2d1ZXN0X2lvX2JyZWFrcG9pbnQoc3RydWN0IHZjcHUgKnYsCisgICAgdW5zaWduZWQgaW50IHBv cnQsIHVuc2lnbmVkIGludCBsZW4pCit7CisgICAgdW5zaWduZWQgaW50IHdpZHRoLCBpLCBtYXRj aCA9IDA7CisgICAgdW5zaWduZWQgbG9uZyBzdGFydDsKKworICAgIGlmICggISh2LT5hcmNoLmRl YnVncmVnWzVdKSB8fAorICAgICAgICAgISh2LT5hcmNoLnB2X3ZjcHUuY3RybHJlZ1s0XSAmIFg4 Nl9DUjRfREUpICkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBmb3IgKCBpID0gMDsgaSA8IDQ7 IGkrKyApCisgICAgeworICAgICAgICBpZiAoICEodi0+YXJjaC5kZWJ1Z3JlZ1s1XSAmCisgICAg ICAgICAgICAgICAoMyA8PCAoaSAqIERSX0VOQUJMRV9TSVpFKSkpICkKKyAgICAgICAgICAgIGNv bnRpbnVlOworCisgICAgICAgIHN0YXJ0ID0gdi0+YXJjaC5kZWJ1Z3JlZ1tpXTsKKyAgICAgICAg d2lkdGggPSAwOworCisgICAgICAgIHN3aXRjaCAoICh2LT5hcmNoLmRlYnVncmVnWzddID4+Cisg ICAgICAgICAgICAgICAgICAoRFJfQ09OVFJPTF9TSElGVCArIGkgKiBEUl9DT05UUk9MX1NJWkUp KSAmIDB4YyApCisgICAgICAgIHsKKyAgICAgICAgY2FzZSBEUl9MRU5fMTogd2lkdGggPSAxOyBi cmVhazsKKyAgICAgICAgY2FzZSBEUl9MRU5fMjogd2lkdGggPSAyOyBicmVhazsKKyAgICAgICAg Y2FzZSBEUl9MRU5fNDogd2lkdGggPSA0OyBicmVhazsKKyAgICAgICAgY2FzZSBEUl9MRU5fODog d2lkdGggPSA4OyBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmICggKHN0YXJ0IDwgKHBv cnQgKyBsZW4pKSAmJiAoKHN0YXJ0ICsgd2lkdGgpID4gcG9ydCkgKQorICAgICAgICAgICAgbWF0 Y2ggfD0gMSA8PCBpOworICAgIH0KKworICAgIHJldHVybiBtYXRjaDsKK30KKworc3RhdGljIGlu dCBwcml2X29wX3JlYWRfaW8odW5zaWduZWQgaW50IHBvcnQsIHVuc2lnbmVkIGludCBieXRlcywK KyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgKnZhbCwgc3RydWN0IHg4 Nl9lbXVsYXRlX2N0eHQgKmN0eHQpCit7CisgICAgc3RydWN0IHByaXZfb3BfY3R4dCAqcG9jID0g Y29udGFpbmVyX29mKGN0eHQsIHN0cnVjdCBwcml2X29wX2N0eHQsIGN0eHQpOworICAgIHN0cnVj dCB2Y3B1ICpjdXJyID0gY3VycmVudDsKKyAgICBzdHJ1Y3QgZG9tYWluICpjdXJyZCA9IGN1cnJl bnQtPmRvbWFpbjsKKworICAgIC8qIElOUyBtdXN0IG5vdCBjb21lIGhlcmUuICovCisgICAgQVNT RVJUKChjdHh0LT5vcGNvZGUgJiB+OSkgPT0gMHhlNCk7CisKKyAgICBpZiAoICFndWVzdF9pb19v a2F5KHBvcnQsIGJ5dGVzLCBjdXJyLCBjdHh0LT5yZWdzKSApCisgICAgICAgIHJldHVybiBYODZF TVVMX1VOSEFORExFQUJMRTsKKworICAgIHBvYy0+YnBtYXRjaCA9IGNoZWNrX2d1ZXN0X2lvX2Jy ZWFrcG9pbnQoY3VyciwgcG9ydCwgYnl0ZXMpOworCisgICAgaWYgKCBhZG1pbl9pb19va2F5KHBv cnQsIGJ5dGVzLCBjdXJyZCkgKQorICAgIHsKKyAgICAgICAgaW9fZW11bF9zdHViX3QgKmlvX2Vt dWwgPQorICAgICAgICAgICAgaW9fZW11bF9zdHViX3NldHVwKHBvYywgY3R4dC0+b3Bjb2RlLCBw b3J0LCBieXRlcyk7CisKKyAgICAgICAgbWFya19yZWdzX2RpcnR5KGN0eHQtPnJlZ3MpOworICAg ICAgICBpb19lbXVsKGN0eHQtPnJlZ3MpOworICAgICAgICByZXR1cm4gWDg2RU1VTF9ET05FOwor ICAgIH0KKworICAgICp2YWwgPSBndWVzdF9pb19yZWFkKHBvcnQsIGJ5dGVzLCBjdXJyZCk7CisK KyAgICByZXR1cm4gWDg2RU1VTF9PS0FZOworfQorCit2b2lkIGd1ZXN0X2lvX3dyaXRlKHVuc2ln bmVkIGludCBwb3J0LCB1bnNpZ25lZCBpbnQgYnl0ZXMsIHVpbnQzMl90IGRhdGEsCisgICAgICAg ICAgICAgICAgICAgIHN0cnVjdCBkb21haW4gKmN1cnJkKQoreworICAgIGlmICggYWRtaW5faW9f b2theShwb3J0LCBieXRlcywgY3VycmQpICkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoIGJ5dGVz ICkgeworICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICBvdXRiKCh1aW50OF90KWRhdGEsIHBv cnQpOworICAgICAgICAgICAgaWYgKCBwdl9wb3N0X291dGJfaG9vayApCisgICAgICAgICAgICAg ICAgcHZfcG9zdF9vdXRiX2hvb2socG9ydCwgKHVpbnQ4X3QpZGF0YSk7CisgICAgICAgICAgICBi cmVhazsKKyAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgb3V0dygodWludDE2X3QpZGF0YSwg cG9ydCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAg b3V0bChkYXRhLCBwb3J0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg IHJldHVybjsKKyAgICB9CisKKyAgICB3aGlsZSAoIGJ5dGVzICE9IDAgKQorICAgIHsKKyAgICAg ICAgdW5zaWduZWQgaW50IHNpemUgPSAxOworCisgICAgICAgIGlmICggKHBvcnQgPT0gMHg0Mikg fHwgKHBvcnQgPT0gMHg0MykgfHwgKHBvcnQgPT0gMHg2MSkgKQorICAgICAgICB7CisgICAgICAg ICAgICBwdl9waXRfaGFuZGxlcihwb3J0LCAodWludDhfdClkYXRhLCAxKTsKKyAgICAgICAgfQor ICAgICAgICBlbHNlIGlmICggcG9ydCA9PSBSVENfUE9SVCgwKSApCisgICAgICAgIHsKKyAgICAg ICAgICAgIGN1cnJkLT5hcmNoLmNtb3NfaWR4ID0gZGF0YTsKKyAgICAgICAgfQorICAgICAgICBl bHNlIGlmICggKHBvcnQgPT0gUlRDX1BPUlQoMSkpICYmCisgICAgICAgICAgICAgICAgICBpb3Bv cnRzX2FjY2Vzc19wZXJtaXR0ZWQoY3VycmQsIFJUQ19QT1JUKDApLCBSVENfUE9SVCgxKSkgKQor ICAgICAgICB7CisgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOworCisgICAgICAgICAg ICBpZiAoIHB2X3J0Y19oYW5kbGVyICkKKyAgICAgICAgICAgICAgICBwdl9ydGNfaGFuZGxlcihj dXJyZC0+YXJjaC5jbW9zX2lkeCAmIDB4N2YsIGRhdGEpOworICAgICAgICAgICAgc3Bpbl9sb2Nr X2lycXNhdmUoJnJ0Y19sb2NrLCBmbGFncyk7CisgICAgICAgICAgICBvdXRiKGN1cnJkLT5hcmNo LmNtb3NfaWR4ICYgMHg3ZiwgUlRDX1BPUlQoMCkpOworICAgICAgICAgICAgb3V0YihkYXRhLCBS VENfUE9SVCgxKSk7CisgICAgICAgICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZydGNfbG9j aywgZmxhZ3MpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKCAocG9ydCA9PSAweGNmOCkg JiYgKGJ5dGVzID09IDQpICkKKyAgICAgICAgeworICAgICAgICAgICAgc2l6ZSA9IDQ7CisgICAg ICAgICAgICBjdXJyZC0+YXJjaC5wY2lfY2Y4ID0gZGF0YTsKKyAgICAgICAgfQorICAgICAgICBl bHNlIGlmICggKHBvcnQgJiAweGZmZmMpID09IDB4Y2ZjICkKKyAgICAgICAgeworICAgICAgICAg ICAgc2l6ZSA9IG1pbihieXRlcywgNCAtIChwb3J0ICYgMykpOworICAgICAgICAgICAgaWYgKCBz aXplID09IDMgKQorICAgICAgICAgICAgICAgIHNpemUgPSAyOworICAgICAgICAgICAgaWYgKCBw Y2lfY2ZnX29rKGN1cnJkLCBwb3J0ICYgMywgc2l6ZSwgJmRhdGEpICkKKyAgICAgICAgICAgICAg ICBwY2lfY29uZl93cml0ZShjdXJyZC0+YXJjaC5wY2lfY2Y4LCBwb3J0ICYgMywgc2l6ZSwgZGF0 YSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIHNpemUgPT0gNCApCisgICAgICAgICAgICBy ZXR1cm47CisKKyAgICAgICAgcG9ydCArPSBzaXplOworICAgICAgICBieXRlcyAtPSBzaXplOwor ICAgICAgICBkYXRhID4+PSBzaXplICogODsKKyAgICB9Cit9CisKK3N0YXRpYyBpbnQgcHJpdl9v cF93cml0ZV9pbyh1bnNpZ25lZCBpbnQgcG9ydCwgdW5zaWduZWQgaW50IGJ5dGVzLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgdmFsLCBzdHJ1Y3QgeDg2X2VtdWxh dGVfY3R4dCAqY3R4dCkKK3sKKyAgICBzdHJ1Y3QgcHJpdl9vcF9jdHh0ICpwb2MgPSBjb250YWlu ZXJfb2YoY3R4dCwgc3RydWN0IHByaXZfb3BfY3R4dCwgY3R4dCk7CisgICAgc3RydWN0IHZjcHUg KmN1cnIgPSBjdXJyZW50OworICAgIHN0cnVjdCBkb21haW4gKmN1cnJkID0gY3VycmVudC0+ZG9t YWluOworCisgICAgLyogT1VUUyBtdXN0IG5vdCBjb21lIGhlcmUuICovCisgICAgQVNTRVJUKChj dHh0LT5vcGNvZGUgJiB+OSkgPT0gMHhlNik7CisKKyAgICBpZiAoICFndWVzdF9pb19va2F5KHBv cnQsIGJ5dGVzLCBjdXJyLCBjdHh0LT5yZWdzKSApCisgICAgICAgIHJldHVybiBYODZFTVVMX1VO SEFORExFQUJMRTsKKworICAgIHBvYy0+YnBtYXRjaCA9IGNoZWNrX2d1ZXN0X2lvX2JyZWFrcG9p bnQoY3VyciwgcG9ydCwgYnl0ZXMpOworCisgICAgaWYgKCBhZG1pbl9pb19va2F5KHBvcnQsIGJ5 dGVzLCBjdXJyZCkgKQorICAgIHsKKyAgICAgICAgaW9fZW11bF9zdHViX3QgKmlvX2VtdWwgPQor ICAgICAgICAgICAgaW9fZW11bF9zdHViX3NldHVwKHBvYywgY3R4dC0+b3Bjb2RlLCBwb3J0LCBi eXRlcyk7CisKKyAgICAgICAgbWFya19yZWdzX2RpcnR5KGN0eHQtPnJlZ3MpOworICAgICAgICBp b19lbXVsKGN0eHQtPnJlZ3MpOworICAgICAgICBpZiAoIChieXRlcyA9PSAxKSAmJiBwdl9wb3N0 X291dGJfaG9vayApCisgICAgICAgICAgICBwdl9wb3N0X291dGJfaG9vayhwb3J0LCB2YWwpOwor ICAgICAgICByZXR1cm4gWDg2RU1VTF9ET05FOworICAgIH0KKworICAgIGd1ZXN0X2lvX3dyaXRl KHBvcnQsIGJ5dGVzLCB2YWwsIGN1cnJkKTsKKworICAgIHJldHVybiBYODZFTVVMX09LQVk7Cit9 CisKK3N0YXRpYyBpbnQgcHJpdl9vcF9yZWFkX3NlZ21lbnQoZW51bSB4ODZfc2VnbWVudCBzZWcs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzZWdtZW50X3JlZ2lzdGVy ICpyZWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB4ODZfZW11bGF0 ZV9jdHh0ICpjdHh0KQoreworICAgIC8qIENoZWNrIGlmIHRoaXMgaXMgYW4gYXR0ZW1wdCB0byBh Y2Nlc3MgdGhlIEkvTyBiaXRtYXAuICovCisgICAgaWYgKCBzZWcgPT0geDg2X3NlZ190ciApCisg ICAgeworICAgICAgICBzd2l0Y2ggKCBjdHh0LT5vcGNvZGUgKQorICAgICAgICB7CisgICAgICAg IGNhc2UgMHg2YyAuLi4gMHg2ZjogLyogaW5zIC8gb3V0cyAqLworICAgICAgICBjYXNlIDB4ZTQg Li4uIDB4ZTc6IC8qIGluIC8gb3V0IChpbW1lZGlhdGUgcG9ydCkgKi8KKyAgICAgICAgY2FzZSAw eGVjIC4uLiAweGVmOiAvKiBpbiAvIG91dCAocG9ydCBpbiAlZHgpICovCisgICAgICAgICAgICAv KiBEZWZlciB0aGUgY2hlY2sgdG8gcHJpdl9vcF97cmVhZCx3cml0ZX1faW8oKS4gKi8KKyAgICAg ICAgICAgIHJldHVybiBYODZFTVVMX0RPTkU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAo IGN0eHQtPmFkZHJfc2l6ZSA8IDY0ICkKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgbGlt aXQ7CisgICAgICAgIHVuc2lnbmVkIGludCBzZWwsIGFyOworCisgICAgICAgIHN3aXRjaCAoIHNl ZyApCisgICAgICAgIHsKKyAgICAgICAgY2FzZSB4ODZfc2VnX2NzOiBzZWwgPSBjdHh0LT5yZWdz LT5jczsgYnJlYWs7CisgICAgICAgIGNhc2UgeDg2X3NlZ19kczogc2VsID0gcmVhZF9zcmVnKGRz KTsgIGJyZWFrOworICAgICAgICBjYXNlIHg4Nl9zZWdfZXM6IHNlbCA9IHJlYWRfc3JlZyhlcyk7 ICBicmVhazsKKyAgICAgICAgY2FzZSB4ODZfc2VnX2ZzOiBzZWwgPSByZWFkX3NyZWcoZnMpOyAg YnJlYWs7CisgICAgICAgIGNhc2UgeDg2X3NlZ19nczogc2VsID0gcmVhZF9zcmVnKGdzKTsgIGJy ZWFrOworICAgICAgICBjYXNlIHg4Nl9zZWdfc3M6IHNlbCA9IGN0eHQtPnJlZ3MtPnNzOyBicmVh azsKKyAgICAgICAgZGVmYXVsdDogcmV0dXJuIFg4NkVNVUxfVU5IQU5ETEVBQkxFOworICAgICAg ICB9CisKKyAgICAgICAgaWYgKCAhcHZfZW11bF9yZWFkX2Rlc2NyaXB0b3Ioc2VsLCBjdXJyZW50 LCAmcmVnLT5iYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbGlt aXQsICZhciwgMCkgKQorICAgICAgICAgICAgcmV0dXJuIFg4NkVNVUxfVU5IQU5ETEVBQkxFOwor CisgICAgICAgIHJlZy0+bGltaXQgPSBsaW1pdDsKKyAgICAgICAgcmVnLT5hdHRyLmJ5dGVzID0g YXIgPj4gODsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgc3dpdGNoICggc2VnICkK KyAgICAgICAgeworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgaWYgKCAhaXNfeDg2X3Vz ZXJfc2VnbWVudChzZWcpICkKKyAgICAgICAgICAgICAgICByZXR1cm4gWDg2RU1VTF9VTkhBTkRM RUFCTEU7CisgICAgICAgICAgICByZWctPmJhc2UgPSAwOworICAgICAgICAgICAgYnJlYWs7Cisg ICAgICAgIGNhc2UgeDg2X3NlZ19mczoKKyAgICAgICAgICAgIHJlZy0+YmFzZSA9IHJkZnNiYXNl KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSB4ODZfc2VnX2dzOgorICAgICAg ICAgICAgcmVnLT5iYXNlID0gcmRnc2Jhc2UoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg ICB9CisKKyAgICAgICAgcmVnLT5saW1pdCA9IH4wVTsKKworICAgICAgICByZWctPmF0dHIuYnl0 ZXMgPSAwOworICAgICAgICByZWctPmF0dHIuZmllbGRzLnR5cGUgPSBfU0VHTUVOVF9XUiA+PiA4 OworICAgICAgICBpZiAoIHNlZyA9PSB4ODZfc2VnX2NzICkKKyAgICAgICAgeworICAgICAgICAg ICAgcmVnLT5hdHRyLmZpZWxkcy50eXBlIHw9IF9TRUdNRU5UX0NPREUgPj4gODsKKyAgICAgICAg ICAgIHJlZy0+YXR0ci5maWVsZHMubCA9IDE7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAg ICAgICAgICAgcmVnLT5hdHRyLmZpZWxkcy5kYiA9IDE7CisgICAgICAgIHJlZy0+YXR0ci5maWVs ZHMucyAgID0gMTsKKyAgICAgICAgcmVnLT5hdHRyLmZpZWxkcy5kcGwgPSAzOworICAgICAgICBy ZWctPmF0dHIuZmllbGRzLnAgICA9IDE7CisgICAgICAgIHJlZy0+YXR0ci5maWVsZHMuZyAgID0g MTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIEZvciB4ODZfZW11bGF0ZS5jJ3MgbW9kZV9yaW5n MCgpIHRvIHdvcmssIGZha2UgYSBEUEwgb2YgemVyby4KKyAgICAgKiBBbHNvIGRvIHRoaXMgZm9y IGNvbnNpc3RlbmN5IGZvciBub24tY29uZm9ybWluZyBjb2RlIHNlZ21lbnRzLgorICAgICAqLwor ICAgIGlmICggKHNlZyA9PSB4ODZfc2VnX3NzIHx8CisgICAgICAgICAgKHNlZyA9PSB4ODZfc2Vn X2NzICYmCisgICAgICAgICAgICEocmVnLT5hdHRyLmZpZWxkcy50eXBlICYgKF9TRUdNRU5UX0VD ID4+IDgpKSkpICYmCisgICAgICAgICBndWVzdF9rZXJuZWxfbW9kZShjdXJyZW50LCBjdHh0LT5y ZWdzKSApCisgICAgICAgIHJlZy0+YXR0ci5maWVsZHMuZHBsID0gMDsKKworICAgIHJldHVybiBY ODZFTVVMX09LQVk7Cit9CisKK3N0YXRpYyBpbnQgcHZfZW11bF92aXJ0X3RvX2xpbmVhcih1bnNp Z25lZCBsb25nIGJhc2UsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBieXRlcywgdW5zaWduZWQgbG9uZyBsaW1pdCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtIHg4Nl9zZWdtZW50IHNlZywK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4 dCAqY3R4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25n ICphZGRyKQoreworICAgIGludCByYyA9IFg4NkVNVUxfT0tBWTsKKworICAgICphZGRyID0gYmFz ZSArIG9mZnNldDsKKworICAgIGlmICggY3R4dC0+YWRkcl9zaXplIDwgNjQgKQorICAgIHsKKyAg ICAgICAgaWYgKCBsaW1pdCA8IGJ5dGVzIC0gMSB8fCBvZmZzZXQgPiBsaW1pdCAtIGJ5dGVzICsg MSApCisgICAgICAgICAgICByYyA9IFg4NkVNVUxfRVhDRVBUSU9OOworICAgICAgICAqYWRkciA9 ICh1aW50MzJfdCkqYWRkcjsKKyAgICB9CisgICAgZWxzZSBpZiAoICFfX2FkZHJfb2soKmFkZHIp ICkKKyAgICAgICAgcmMgPSBYODZFTVVMX0VYQ0VQVElPTjsKKworICAgIGlmICggdW5saWtlbHko cmMgPT0gWDg2RU1VTF9FWENFUFRJT04pICkKKyAgICAgICAgeDg2X2VtdWxfaHdfZXhjZXB0aW9u KHNlZyAhPSB4ODZfc2VnX3NzID8gVFJBUF9ncF9mYXVsdAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBUUkFQX3N0YWNrX2Vycm9yLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgMCwgY3R4dCk7CisKKyAgICByZXR1cm4gcmM7Cit9CisKK3N0 YXRpYyBpbnQgcHJpdl9vcF9yZXBfaW5zKHVpbnQxNl90IHBvcnQsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICBlbnVtIHg4Nl9zZWdtZW50IHNlZywgdW5zaWduZWQgbG9uZyBvZmZzZXQsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYnl0ZXNfcGVyX3JlcCwgdW5z aWduZWQgbG9uZyAqcmVwcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB4ODZf ZW11bGF0ZV9jdHh0ICpjdHh0KQoreworICAgIHN0cnVjdCBwcml2X29wX2N0eHQgKnBvYyA9IGNv bnRhaW5lcl9vZihjdHh0LCBzdHJ1Y3QgcHJpdl9vcF9jdHh0LCBjdHh0KTsKKyAgICBzdHJ1Y3Qg dmNwdSAqY3VyciA9IGN1cnJlbnQ7CisgICAgc3RydWN0IGRvbWFpbiAqY3VycmQgPSBjdXJyZW50 LT5kb21haW47CisgICAgdW5zaWduZWQgbG9uZyBnb2FsID0gKnJlcHM7CisgICAgc3RydWN0IHNl Z21lbnRfcmVnaXN0ZXIgc3JlZzsKKyAgICBpbnQgcmM7CisKKyAgICBBU1NFUlQoc2VnID09IHg4 Nl9zZWdfZXMpOworCisgICAgKnJlcHMgPSAwOworCisgICAgaWYgKCAhZ3Vlc3RfaW9fb2theShw b3J0LCBieXRlc19wZXJfcmVwLCBjdXJyLCBjdHh0LT5yZWdzKSApCisgICAgICAgIHJldHVybiBY ODZFTVVMX1VOSEFORExFQUJMRTsKKworICAgIHJjID0gcHJpdl9vcF9yZWFkX3NlZ21lbnQoeDg2 X3NlZ19lcywgJnNyZWcsIGN0eHQpOworICAgIGlmICggcmMgIT0gWDg2RU1VTF9PS0FZICkKKyAg ICAgICAgcmV0dXJuIHJjOworCisgICAgaWYgKCAhc3JlZy5hdHRyLmZpZWxkcy5wICkKKyAgICAg ICAgcmV0dXJuIFg4NkVNVUxfVU5IQU5ETEVBQkxFOworICAgIGlmICggIXNyZWcuYXR0ci5maWVs ZHMucyB8fAorICAgICAgICAgKHNyZWcuYXR0ci5maWVsZHMudHlwZSAmIChfU0VHTUVOVF9DT0RF ID4+IDgpKSB8fAorICAgICAgICAgIShzcmVnLmF0dHIuZmllbGRzLnR5cGUgJiAoX1NFR01FTlRf V1IgPj4gOCkpICkKKyAgICB7CisgICAgICAgIHg4Nl9lbXVsX2h3X2V4Y2VwdGlvbihUUkFQX2dw X2ZhdWx0LCAwLCBjdHh0KTsKKyAgICAgICAgcmV0dXJuIFg4NkVNVUxfRVhDRVBUSU9OOworICAg IH0KKworICAgIHBvYy0+YnBtYXRjaCA9IGNoZWNrX2d1ZXN0X2lvX2JyZWFrcG9pbnQoY3Vyciwg cG9ydCwgYnl0ZXNfcGVyX3JlcCk7CisKKyAgICB3aGlsZSAoICpyZXBzIDwgZ29hbCApCisgICAg eworICAgICAgICB1bnNpZ25lZCBpbnQgZGF0YSA9IGd1ZXN0X2lvX3JlYWQocG9ydCwgYnl0ZXNf cGVyX3JlcCwgY3VycmQpOworICAgICAgICB1bnNpZ25lZCBsb25nIGFkZHI7CisKKyAgICAgICAg cmMgPSBwdl9lbXVsX3ZpcnRfdG9fbGluZWFyKHNyZWcuYmFzZSwgb2Zmc2V0LCBieXRlc19wZXJf cmVwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JlZy5saW1pdCwgeDg2 X3NlZ19lcywgY3R4dCwgJmFkZHIpOworICAgICAgICBpZiAoIHJjICE9IFg4NkVNVUxfT0tBWSAp CisgICAgICAgICAgICByZXR1cm4gcmM7CisKKyAgICAgICAgaWYgKCAocmMgPSBfX2NvcHlfdG9f dXNlcigodm9pZCAqKWFkZHIsICZkYXRhLCBieXRlc19wZXJfcmVwKSkgIT0gMCApCisgICAgICAg IHsKKyAgICAgICAgICAgIHg4Nl9lbXVsX3BhZ2VmYXVsdChQRkVDX3dyaXRlX2FjY2VzcywKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyICsgYnl0ZXNfcGVyX3JlcCAtIHJjLCBj dHh0KTsKKyAgICAgICAgICAgIHJldHVybiBYODZFTVVMX0VYQ0VQVElPTjsKKyAgICAgICAgfQor CisgICAgICAgICsrKnJlcHM7CisKKyAgICAgICAgaWYgKCBwb2MtPmJwbWF0Y2ggfHwgaHlwZXJj YWxsX3ByZWVtcHRfY2hlY2soKSApCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAvKiB4 ODZfZW11bGF0ZSgpIGNsaXBzIHRoZSByZXBldGl0aW9uIGNvdW50IHRvIGVuc3VyZSB3ZSBkb24n dCB3cmFwLiAqLworICAgICAgICBpZiAoIHVubGlrZWx5KGN0eHQtPnJlZ3MtPmVmbGFncyAmIFg4 Nl9FRkxBR1NfREYpICkKKyAgICAgICAgICAgIG9mZnNldCAtPSBieXRlc19wZXJfcmVwOworICAg ICAgICBlbHNlCisgICAgICAgICAgICBvZmZzZXQgKz0gYnl0ZXNfcGVyX3JlcDsKKyAgICB9CisK KyAgICByZXR1cm4gWDg2RU1VTF9PS0FZOworfQorCitzdGF0aWMgaW50IHByaXZfb3BfcmVwX291 dHMoZW51bSB4ODZfc2VnbWVudCBzZWcsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IHBvcnQsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdW5zaWduZWQgaW50IGJ5dGVzX3Blcl9yZXAsIHVuc2lnbmVkIGxvbmcgKnJlcHMsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQp Cit7CisgICAgc3RydWN0IHByaXZfb3BfY3R4dCAqcG9jID0gY29udGFpbmVyX29mKGN0eHQsIHN0 cnVjdCBwcml2X29wX2N0eHQsIGN0eHQpOworICAgIHN0cnVjdCB2Y3B1ICpjdXJyID0gY3VycmVu dDsKKyAgICBzdHJ1Y3QgZG9tYWluICpjdXJyZCA9IGN1cnJlbnQtPmRvbWFpbjsKKyAgICB1bnNp Z25lZCBsb25nIGdvYWwgPSAqcmVwczsKKyAgICBzdHJ1Y3Qgc2VnbWVudF9yZWdpc3RlciBzcmVn OworICAgIGludCByYzsKKworICAgICpyZXBzID0gMDsKKworICAgIGlmICggIWd1ZXN0X2lvX29r YXkocG9ydCwgYnl0ZXNfcGVyX3JlcCwgY3VyciwgY3R4dC0+cmVncykgKQorICAgICAgICByZXR1 cm4gWDg2RU1VTF9VTkhBTkRMRUFCTEU7CisKKyAgICByYyA9IHByaXZfb3BfcmVhZF9zZWdtZW50 KHNlZywgJnNyZWcsIGN0eHQpOworICAgIGlmICggcmMgIT0gWDg2RU1VTF9PS0FZICkKKyAgICAg ICAgcmV0dXJuIHJjOworCisgICAgaWYgKCAhc3JlZy5hdHRyLmZpZWxkcy5wICkKKyAgICAgICAg cmV0dXJuIFg4NkVNVUxfVU5IQU5ETEVBQkxFOworICAgIGlmICggIXNyZWcuYXR0ci5maWVsZHMu cyB8fAorICAgICAgICAgKChzcmVnLmF0dHIuZmllbGRzLnR5cGUgJiAoX1NFR01FTlRfQ09ERSA+ PiA4KSkgJiYKKyAgICAgICAgICAhKHNyZWcuYXR0ci5maWVsZHMudHlwZSAmIChfU0VHTUVOVF9X UiA+PiA4KSkpICkKKyAgICB7CisgICAgICAgIHg4Nl9lbXVsX2h3X2V4Y2VwdGlvbihzZWcgIT0g eDg2X3NlZ19zcyA/IFRSQVBfZ3BfZmF1bHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDogVFJBUF9zdGFja19lcnJvciwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDAsIGN0eHQpOworICAgICAgICByZXR1cm4gWDg2RU1VTF9FWENFUFRJT047 CisgICAgfQorCisgICAgcG9jLT5icG1hdGNoID0gY2hlY2tfZ3Vlc3RfaW9fYnJlYWtwb2ludChj dXJyLCBwb3J0LCBieXRlc19wZXJfcmVwKTsKKworICAgIHdoaWxlICggKnJlcHMgPCBnb2FsICkK KyAgICB7CisgICAgICAgIHVuc2lnbmVkIGludCBkYXRhID0gMDsKKyAgICAgICAgdW5zaWduZWQg bG9uZyBhZGRyOworCisgICAgICAgIHJjID0gcHZfZW11bF92aXJ0X3RvX2xpbmVhcihzcmVnLmJh c2UsIG9mZnNldCwgYnl0ZXNfcGVyX3JlcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHNyZWcubGltaXQsIHNlZywgY3R4dCwgJmFkZHIpOworICAgICAgICBpZiAoIHJjICE9 IFg4NkVNVUxfT0tBWSApCisgICAgICAgICAgICByZXR1cm4gcmM7CisKKyAgICAgICAgaWYgKCAo cmMgPSBfX2NvcHlfZnJvbV91c2VyKCZkYXRhLCAodm9pZCAqKWFkZHIsIGJ5dGVzX3Blcl9yZXAp KSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgeDg2X2VtdWxfcGFnZWZhdWx0KDAsIGFk ZHIgKyBieXRlc19wZXJfcmVwIC0gcmMsIGN0eHQpOworICAgICAgICAgICAgcmV0dXJuIFg4NkVN VUxfRVhDRVBUSU9OOworICAgICAgICB9CisKKyAgICAgICAgZ3Vlc3RfaW9fd3JpdGUocG9ydCwg Ynl0ZXNfcGVyX3JlcCwgZGF0YSwgY3VycmQpOworCisgICAgICAgICsrKnJlcHM7CisKKyAgICAg ICAgaWYgKCBwb2MtPmJwbWF0Y2ggfHwgaHlwZXJjYWxsX3ByZWVtcHRfY2hlY2soKSApCisgICAg ICAgICAgICBicmVhazsKKworICAgICAgICAvKiB4ODZfZW11bGF0ZSgpIGNsaXBzIHRoZSByZXBl dGl0aW9uIGNvdW50IHRvIGVuc3VyZSB3ZSBkb24ndCB3cmFwLiAqLworICAgICAgICBpZiAoIHVu bGlrZWx5KGN0eHQtPnJlZ3MtPmVmbGFncyAmIFg4Nl9FRkxBR1NfREYpICkKKyAgICAgICAgICAg IG9mZnNldCAtPSBieXRlc19wZXJfcmVwOworICAgICAgICBlbHNlCisgICAgICAgICAgICBvZmZz ZXQgKz0gYnl0ZXNfcGVyX3JlcDsKKyAgICB9CisKKyAgICByZXR1cm4gWDg2RU1VTF9PS0FZOwor fQorCitzdGF0aWMgaW50IHByaXZfb3BfcmVhZF9jcih1bnNpZ25lZCBpbnQgcmVnLCB1bnNpZ25l ZCBsb25nICp2YWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgeDg2X2VtdWxh dGVfY3R4dCAqY3R4dCkKK3sKKyAgICBjb25zdCBzdHJ1Y3QgdmNwdSAqY3VyciA9IGN1cnJlbnQ7 CisKKyAgICBzd2l0Y2ggKCByZWcgKQorICAgIHsKKyAgICBjYXNlIDA6IC8qIFJlYWQgQ1IwICov CisgICAgICAgICp2YWwgPSAocmVhZF9jcjAoKSAmIH5YODZfQ1IwX1RTKSB8IGN1cnItPmFyY2gu cHZfdmNwdS5jdHJscmVnWzBdOworICAgICAgICByZXR1cm4gWDg2RU1VTF9PS0FZOworCisgICAg Y2FzZSAyOiAvKiBSZWFkIENSMiAqLworICAgIGNhc2UgNDogLyogUmVhZCBDUjQgKi8KKyAgICAg ICAgKnZhbCA9IGN1cnItPmFyY2gucHZfdmNwdS5jdHJscmVnW3JlZ107CisgICAgICAgIHJldHVy biBYODZFTVVMX09LQVk7CisKKyAgICBjYXNlIDM6IC8qIFJlYWQgQ1IzICovCisgICAgeworICAg ICAgICBjb25zdCBzdHJ1Y3QgZG9tYWluICpjdXJyZCA9IGN1cnItPmRvbWFpbjsKKyAgICAgICAg dW5zaWduZWQgbG9uZyBtZm47CisKKyAgICAgICAgaWYgKCAhaXNfcHZfMzJiaXRfZG9tYWluKGN1 cnJkKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1mbiA9IHBhZ2V0YWJsZV9nZXRfcGZuKGN1 cnItPmFyY2guZ3Vlc3RfdGFibGUpOworICAgICAgICAgICAgKnZhbCA9IHhlbl9wZm5fdG9fY3Iz KG1mbl90b19nbWZuKGN1cnJkLCBtZm4pKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAg ICAgIHsKKyAgICAgICAgICAgIGw0X3BnZW50cnlfdCAqcGw0ZSA9CisgICAgICAgICAgICAgICAg bWFwX2RvbWFpbl9wYWdlKF9tZm4ocGFnZXRhYmxlX2dldF9wZm4oY3Vyci0+YXJjaC5ndWVzdF90 YWJsZSkpKTsKKworICAgICAgICAgICAgbWZuID0gbDRlX2dldF9wZm4oKnBsNGUpOworICAgICAg ICAgICAgdW5tYXBfZG9tYWluX3BhZ2UocGw0ZSk7CisgICAgICAgICAgICAqdmFsID0gY29tcGF0 X3Bmbl90b19jcjMobWZuX3RvX2dtZm4oY3VycmQsIG1mbikpOworICAgICAgICB9CisgICAgICAg IC8qIFBUcyBzaG91bGQgbm90IGJlIHNoYXJlZCAqLworICAgICAgICBCVUdfT04ocGFnZV9nZXRf b3duZXIobWZuX3RvX3BhZ2UobWZuKSkgPT0gZG9tX2Nvdyk7CisgICAgICAgIHJldHVybiBYODZF TVVMX09LQVk7CisgICAgfQorICAgIH0KKworICAgIHJldHVybiBYODZFTVVMX1VOSEFORExFQUJM RTsKK30KKworc3RhdGljIGludCBwcml2X29wX3dyaXRlX2NyKHVuc2lnbmVkIGludCByZWcsIHVu c2lnbmVkIGxvbmcgdmFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB4ODZf ZW11bGF0ZV9jdHh0ICpjdHh0KQoreworICAgIHN0cnVjdCB2Y3B1ICpjdXJyID0gY3VycmVudDsK KworICAgIHN3aXRjaCAoIHJlZyApCisgICAgeworICAgIGNhc2UgMDogLyogV3JpdGUgQ1IwICov CisgICAgICAgIGlmICggKHZhbCBeIHJlYWRfY3IwKCkpICYgflg4Nl9DUjBfVFMgKQorICAgICAg ICB7CisgICAgICAgICAgICBnZHByaW50ayhYRU5MT0dfV0FSTklORywKKyAgICAgICAgICAgICAg ICAgICAgIkF0dGVtcHQgdG8gY2hhbmdlIHVubW9kaWZpYWJsZSBDUjAgZmxhZ3NcbiIpOworICAg ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZG9fZnB1X3Rhc2tzd2l0Y2goISEo dmFsICYgWDg2X0NSMF9UUykpOworICAgICAgICByZXR1cm4gWDg2RU1VTF9PS0FZOworCisgICAg Y2FzZSAyOiAvKiBXcml0ZSBDUjIgKi8KKyAgICAgICAgY3Vyci0+YXJjaC5wdl92Y3B1LmN0cmxy ZWdbMl0gPSB2YWw7CisgICAgICAgIGFyY2hfc2V0X2NyMihjdXJyLCB2YWwpOworICAgICAgICBy ZXR1cm4gWDg2RU1VTF9PS0FZOworCisgICAgY2FzZSAzOiAvKiBXcml0ZSBDUjMgKi8KKyAgICB7 CisgICAgICAgIHN0cnVjdCBkb21haW4gKmN1cnJkID0gY3Vyci0+ZG9tYWluOworICAgICAgICB1 bnNpZ25lZCBsb25nIGdmbjsKKyAgICAgICAgc3RydWN0IHBhZ2VfaW5mbyAqcGFnZTsKKyAgICAg ICAgaW50IHJjOworCisgICAgICAgIGdmbiA9ICFpc19wdl8zMmJpdF9kb21haW4oY3VycmQpCisg ICAgICAgICAgICAgID8geGVuX2NyM190b19wZm4odmFsKSA6IGNvbXBhdF9jcjNfdG9fcGZuKHZh bCk7CisgICAgICAgIHBhZ2UgPSBnZXRfcGFnZV9mcm9tX2dmbihjdXJyZCwgZ2ZuLCBOVUxMLCBQ Mk1fQUxMT0MpOworICAgICAgICBpZiAoICFwYWdlICkKKyAgICAgICAgICAgIGJyZWFrOworICAg ICAgICByYyA9IG5ld19ndWVzdF9jcjMocGFnZV90b19tZm4ocGFnZSkpOworICAgICAgICBwdXRf cGFnZShwYWdlKTsKKworICAgICAgICBzd2l0Y2ggKCByYyApCisgICAgICAgIHsKKyAgICAgICAg Y2FzZSAwOgorICAgICAgICAgICAgcmV0dXJuIFg4NkVNVUxfT0tBWTsKKyAgICAgICAgY2FzZSAt RVJFU1RBUlQ6IC8qIHJldHJ5IGFmdGVyIHByZWVtcHRpb24gKi8KKyAgICAgICAgICAgIHJldHVy biBYODZFTVVMX1JFVFJZOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAg IGNhc2UgNDogLyogV3JpdGUgQ1I0ICovCisgICAgICAgIGN1cnItPmFyY2gucHZfdmNwdS5jdHJs cmVnWzRdID0gcHZfZ3Vlc3RfY3I0X2ZpeHVwKGN1cnIsIHZhbCk7CisgICAgICAgIHdyaXRlX2Ny NChwdl9ndWVzdF9jcjRfdG9fcmVhbF9jcjQoY3VycikpOworICAgICAgICBjdHh0X3N3aXRjaF9s ZXZlbGxpbmcoY3Vycik7CisgICAgICAgIHJldHVybiBYODZFTVVMX09LQVk7CisgICAgfQorCisg ICAgcmV0dXJuIFg4NkVNVUxfVU5IQU5ETEVBQkxFOworfQorCitzdGF0aWMgaW50IHByaXZfb3Bf cmVhZF9kcih1bnNpZ25lZCBpbnQgcmVnLCB1bnNpZ25lZCBsb25nICp2YWwsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICBzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCkKK3sKKyAgICB1 bnNpZ25lZCBsb25nIHJlcyA9IGRvX2dldF9kZWJ1Z3JlZyhyZWcpOworCisgICAgaWYgKCBJU19F UlJfVkFMVUUocmVzKSApCisgICAgICAgIHJldHVybiBYODZFTVVMX1VOSEFORExFQUJMRTsKKwor ICAgICp2YWwgPSByZXM7CisKKyAgICByZXR1cm4gWDg2RU1VTF9PS0FZOworfQorCitzdGF0aWMg aW50IHByaXZfb3Bfd3JpdGVfZHIodW5zaWduZWQgaW50IHJlZywgdW5zaWduZWQgbG9uZyB2YWws CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0 eHQpCit7CisgICAgcmV0dXJuIGRvX3NldF9kZWJ1Z3JlZyhyZWcsIHZhbCkgPT0gMAorICAgICAg ICAgICA/IFg4NkVNVUxfT0tBWSA6IFg4NkVNVUxfVU5IQU5ETEVBQkxFOworfQorCitzdGF0aWMg aW5saW5lIHVpbnQ2NF90IGd1ZXN0X21pc2NfZW5hYmxlKHVpbnQ2NF90IHZhbCkKK3sKKyAgICB2 YWwgJj0gfihNU1JfSUEzMl9NSVNDX0VOQUJMRV9QRVJGX0FWQUlMIHwKKyAgICAgICAgICAgICBN U1JfSUEzMl9NSVNDX0VOQUJMRV9NT05JVE9SX0VOQUJMRSk7CisgICAgdmFsIHw9IE1TUl9JQTMy X01JU0NfRU5BQkxFX0JUU19VTkFWQUlMIHwKKyAgICAgICAgICAgTVNSX0lBMzJfTUlTQ19FTkFC TEVfUEVCU19VTkFWQUlMIHwKKyAgICAgICAgICAgTVNSX0lBMzJfTUlTQ19FTkFCTEVfWFRQUl9E SVNBQkxFOworICAgIHJldHVybiB2YWw7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc19jcHVm cmVxX2NvbnRyb2xsZXIoY29uc3Qgc3RydWN0IGRvbWFpbiAqZCkKK3sKKyAgICByZXR1cm4gKChj cHVmcmVxX2NvbnRyb2xsZXIgPT0gRlJFUUNUTF9kb20wX2tlcm5lbCkgJiYKKyAgICAgICAgICAg IGlzX2hhcmR3YXJlX2RvbWFpbihkKSk7Cit9CisKK3N0YXRpYyBpbnQgcHJpdl9vcF9yZWFkX21z cih1bnNpZ25lZCBpbnQgcmVnLCB1aW50NjRfdCAqdmFsLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KQoreworICAgIHN0cnVjdCBwcml2 X29wX2N0eHQgKnBvYyA9IGNvbnRhaW5lcl9vZihjdHh0LCBzdHJ1Y3QgcHJpdl9vcF9jdHh0LCBj dHh0KTsKKyAgICBjb25zdCBzdHJ1Y3QgdmNwdSAqY3VyciA9IGN1cnJlbnQ7CisgICAgY29uc3Qg c3RydWN0IGRvbWFpbiAqY3VycmQgPSBjdXJyLT5kb21haW47CisgICAgYm9vbCB2cG11X21zciA9 IGZhbHNlOworCisgICAgc3dpdGNoICggcmVnICkKKyAgICB7CisgICAgICAgIGludCByYzsKKwor ICAgIGNhc2UgTVNSX0ZTX0JBU0U6CisgICAgICAgIGlmICggaXNfcHZfMzJiaXRfZG9tYWluKGN1 cnJkKSApCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgKnZhbCA9IGNwdV9oYXNfZnNnc2Jh c2UgPyBfX3JkZnNiYXNlKCkgOiBjdXJyLT5hcmNoLnB2X3ZjcHUuZnNfYmFzZTsKKyAgICAgICAg cmV0dXJuIFg4NkVNVUxfT0tBWTsKKworICAgIGNhc2UgTVNSX0dTX0JBU0U6CisgICAgICAgIGlm ICggaXNfcHZfMzJiaXRfZG9tYWluKGN1cnJkKSApCisgICAgICAgICAgICBicmVhazsKKyAgICAg ICAgKnZhbCA9IGNwdV9oYXNfZnNnc2Jhc2UgPyBfX3JkZ3NiYXNlKCkKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgOiBjdXJyLT5hcmNoLnB2X3ZjcHUuZ3NfYmFzZV9rZXJuZWw7Cisg ICAgICAgIHJldHVybiBYODZFTVVMX09LQVk7CisKKyAgICBjYXNlIE1TUl9TSEFET1dfR1NfQkFT RToKKyAgICAgICAgaWYgKCBpc19wdl8zMmJpdF9kb21haW4oY3VycmQpICkKKyAgICAgICAgICAg IGJyZWFrOworICAgICAgICAqdmFsID0gY3Vyci0+YXJjaC5wdl92Y3B1LmdzX2Jhc2VfdXNlcjsK KyAgICAgICAgcmV0dXJuIFg4NkVNVUxfT0tBWTsKKworICAgIC8qCisgICAgICogSW4gb3JkZXIg dG8gZnVsbHkgcmV0YWluIG9yaWdpbmFsIGJlaGF2aW9yLCBkZWZlciBjYWxsaW5nCisgICAgICog cHZfc29mdF9yZHRzYygpIHVudGlsIGFmdGVyIGVtdWxhdGlvbi4gVGhpcyBtYXkgd2FudC9uZWVk IHRvIGJlCisgICAgICogcmVjb25zaWRlcmVkLgorICAgICAqLworICAgIGNhc2UgTVNSX0lBMzJf VFNDOgorICAgICAgICBwb2MtPnRzYyB8PSBUU0NfQkFTRTsKKyAgICAgICAgZ290byBub3JtYWw7 CisKKyAgICBjYXNlIE1TUl9UU0NfQVVYOgorICAgICAgICBwb2MtPnRzYyB8PSBUU0NfQVVYOwor ICAgICAgICBpZiAoIGNwdV9oYXNfcmR0c2NwICkKKyAgICAgICAgICAgIGdvdG8gbm9ybWFsOwor ICAgICAgICAqdmFsID0gMDsKKyAgICAgICAgcmV0dXJuIFg4NkVNVUxfT0tBWTsKKworICAgIGNh c2UgTVNSX0VGRVI6CisgICAgICAgICp2YWwgPSByZWFkX2VmZXIoKTsKKyAgICAgICAgaWYgKCBp c19wdl8zMmJpdF9kb21haW4oY3VycmQpICkKKyAgICAgICAgICAgICp2YWwgJj0gfihFRkVSX0xN RSB8IEVGRVJfTE1BIHwgRUZFUl9MTVNMRSk7CisgICAgICAgIHJldHVybiBYODZFTVVMX09LQVk7 CisKKyAgICBjYXNlIE1TUl9LN19GSURfVklEX0NUTDoKKyAgICBjYXNlIE1TUl9LN19GSURfVklE X1NUQVRVUzoKKyAgICBjYXNlIE1TUl9LOF9QU1RBVEVfTElNSVQ6CisgICAgY2FzZSBNU1JfSzhf UFNUQVRFX0NUUkw6CisgICAgY2FzZSBNU1JfSzhfUFNUQVRFX1NUQVRVUzoKKyAgICBjYXNlIE1T Ul9LOF9QU1RBVEUwOgorICAgIGNhc2UgTVNSX0s4X1BTVEFURTE6CisgICAgY2FzZSBNU1JfSzhf UFNUQVRFMjoKKyAgICBjYXNlIE1TUl9LOF9QU1RBVEUzOgorICAgIGNhc2UgTVNSX0s4X1BTVEFU RTQ6CisgICAgY2FzZSBNU1JfSzhfUFNUQVRFNToKKyAgICBjYXNlIE1TUl9LOF9QU1RBVEU2Ogor ICAgIGNhc2UgTVNSX0s4X1BTVEFURTc6CisgICAgICAgIGlmICggYm9vdF9jcHVfZGF0YS54ODZf dmVuZG9yICE9IFg4Nl9WRU5ET1JfQU1EICkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBp ZiAoIHVubGlrZWx5KGlzX2NwdWZyZXFfY29udHJvbGxlcihjdXJyZCkpICkKKyAgICAgICAgICAg IGdvdG8gbm9ybWFsOworICAgICAgICAqdmFsID0gMDsKKyAgICAgICAgcmV0dXJuIFg4NkVNVUxf T0tBWTsKKworICAgIGNhc2UgTVNSX0lBMzJfVUNPREVfUkVWOgorICAgICAgICBCVUlMRF9CVUdf T04oTVNSX0lBMzJfVUNPREVfUkVWICE9IE1TUl9BTURfUEFUQ0hMRVZFTCk7CisgICAgICAgIGlm ICggYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yID09IFg4Nl9WRU5ET1JfSU5URUwgKQorICAgICAg ICB7CisgICAgICAgICAgICBpZiAoIHdybXNyX3NhZmUoTVNSX0lBMzJfVUNPREVfUkVWLCAwKSAp CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAvKiBBcyBkb2N1bWVudGVkIGlu IHRoZSBTRE06IERvIGEgQ1BVSUQgMSBoZXJlICovCisgICAgICAgICAgICBjcHVpZF9lYXgoMSk7 CisgICAgICAgIH0KKyAgICAgICAgZ290byBub3JtYWw7CisKKyAgICBjYXNlIE1TUl9JQTMyX01J U0NfRU5BQkxFOgorICAgICAgICBpZiAoIHJkbXNyX3NhZmUocmVnLCAqdmFsKSApCisgICAgICAg ICAgICBicmVhazsKKyAgICAgICAgKnZhbCA9IGd1ZXN0X21pc2NfZW5hYmxlKCp2YWwpOworICAg ICAgICByZXR1cm4gWDg2RU1VTF9PS0FZOworCisgICAgY2FzZSBNU1JfQU1ENjRfRFIwX0FERFJF U1NfTUFTSzoKKyAgICAgICAgaWYgKCAhYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0RCRVhUKSAp CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgKnZhbCA9IGN1cnItPmFyY2gucHZfdmNwdS5k cl9tYXNrWzBdOworICAgICAgICByZXR1cm4gWDg2RU1VTF9PS0FZOworCisgICAgY2FzZSBNU1Jf QU1ENjRfRFIxX0FERFJFU1NfTUFTSyAuLi4gTVNSX0FNRDY0X0RSM19BRERSRVNTX01BU0s6Cisg ICAgICAgIGlmICggIWJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9EQkVYVCkgKQorICAgICAgICAg ICAgYnJlYWs7CisgICAgICAgICp2YWwgPSBjdXJyLT5hcmNoLnB2X3ZjcHUuZHJfbWFza1tyZWcg LSBNU1JfQU1ENjRfRFIxX0FERFJFU1NfTUFTSyArIDFdOworICAgICAgICByZXR1cm4gWDg2RU1V TF9PS0FZOworCisgICAgY2FzZSBNU1JfSUEzMl9QRVJGX0NBUEFCSUxJVElFUzoKKyAgICAgICAg LyogTm8gZXh0cmEgY2FwYWJpbGl0aWVzIGFyZSBzdXBwb3J0ZWQuICovCisgICAgICAgICp2YWwg PSAwOworICAgICAgICByZXR1cm4gWDg2RU1VTF9PS0FZOworCisgICAgY2FzZSBNU1JfSU5URUxf UExBVEZPUk1fSU5GTzoKKyAgICAgICAgaWYgKCBib290X2NwdV9kYXRhLng4Nl92ZW5kb3IgIT0g WDg2X1ZFTkRPUl9JTlRFTCB8fAorICAgICAgICAgICAgIHJkbXNyX3NhZmUoTVNSX0lOVEVMX1BM QVRGT1JNX0lORk8sICp2YWwpICkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAqdmFsID0g MDsKKyAgICAgICAgaWYgKCB0aGlzX2NwdShjcHVpZF9mYXVsdGluZ19lbmFibGVkKSApCisgICAg ICAgICAgICAqdmFsIHw9IE1TUl9QTEFURk9STV9JTkZPX0NQVUlEX0ZBVUxUSU5HOworICAgICAg ICByZXR1cm4gWDg2RU1VTF9PS0FZOworCisgICAgY2FzZSBNU1JfSU5URUxfTUlTQ19GRUFUVVJF U19FTkFCTEVTOgorICAgICAgICBpZiAoIGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvciAhPSBYODZf VkVORE9SX0lOVEVMIHx8CisgICAgICAgICAgICAgcmRtc3Jfc2FmZShNU1JfSU5URUxfTUlTQ19G RUFUVVJFU19FTkFCTEVTLCAqdmFsKSApCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgKnZh bCA9IDA7CisgICAgICAgIGlmICggY3Vyci0+YXJjaC5jcHVpZF9mYXVsdGluZyApCisgICAgICAg ICAgICAqdmFsIHw9IE1TUl9NSVNDX0ZFQVRVUkVTX0NQVUlEX0ZBVUxUSU5HOworICAgICAgICBy ZXR1cm4gWDg2RU1VTF9PS0FZOworCisgICAgY2FzZSBNU1JfUDZfUEVSRkNUUigwKS4uLk1TUl9Q Nl9QRVJGQ1RSKDcpOgorICAgIGNhc2UgTVNSX1A2X0VWTlRTRUwoMCkuLi5NU1JfUDZfRVZOVFNF TCgzKToKKyAgICBjYXNlIE1TUl9DT1JFX1BFUkZfRklYRURfQ1RSMC4uLk1TUl9DT1JFX1BFUkZf RklYRURfQ1RSMjoKKyAgICBjYXNlIE1TUl9DT1JFX1BFUkZfRklYRURfQ1RSX0NUUkwuLi5NU1Jf Q09SRV9QRVJGX0dMT0JBTF9PVkZfQ1RSTDoKKyAgICAgICAgaWYgKCBib290X2NwdV9kYXRhLng4 Nl92ZW5kb3IgPT0gWDg2X1ZFTkRPUl9JTlRFTCApCisgICAgICAgIHsKKyAgICAgICAgICAgIHZw bXVfbXNyID0gdHJ1ZTsKKyAgICAgICAgICAgIC8qIGZhbGwgdGhyb3VnaCAqLworICAgIGNhc2Ug TVNSX0FNRF9GQU0xNUhfRVZOVFNFTDAuLi5NU1JfQU1EX0ZBTTE1SF9QRVJGQ1RSNToKKyAgICBj YXNlIE1TUl9LN19FVk5UU0VMMC4uLk1TUl9LN19QRVJGQ1RSMzoKKyAgICAgICAgICAgIGlmICgg dnBtdV9tc3IgfHwgKGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvciA9PSBYODZfVkVORE9SX0FNRCkg KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmICggdnBtdV9kb19yZG1zcihyZWcs IHZhbCkgKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICByZXR1 cm4gWDg2RU1VTF9PS0FZOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8qIGZh bGwgdGhyb3VnaCAqLworICAgIGRlZmF1bHQ6CisgICAgICAgIGlmICggcmRtc3JfaHlwZXJ2aXNv cl9yZWdzKHJlZywgdmFsKSApCisgICAgICAgICAgICByZXR1cm4gWDg2RU1VTF9PS0FZOworCisg ICAgICAgIHJjID0gdm1jZV9yZG1zcihyZWcsIHZhbCk7CisgICAgICAgIGlmICggcmMgPCAwICkK KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBpZiAoIHJjICkKKyAgICAgICAgICAgIHJldHVy biBYODZFTVVMX09LQVk7CisgICAgICAgIC8qIGZhbGwgdGhyb3VnaCAqLworICAgIG5vcm1hbDoK KyAgICAgICAgLyogRXZlcnlvbmUgY2FuIHJlYWQgdGhlIE1TUiBzcGFjZS4gKi8KKyAgICAgICAg LyogZ2RwcmludGsoWEVOTE9HX1dBUk5JTkcsICJEb21haW4gYXR0ZW1wdGVkIFJETVNSICUwOHhc biIsIHJlZyk7ICovCisgICAgICAgIGlmICggcmRtc3Jfc2FmZShyZWcsICp2YWwpICkKKyAgICAg ICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4gWDg2RU1VTF9PS0FZOworICAgIH0KKworICAg IHJldHVybiBYODZFTVVMX1VOSEFORExFQUJMRTsKK30KKworc3RhdGljIGludCBwcml2X29wX3dy aXRlX21zcih1bnNpZ25lZCBpbnQgcmVnLCB1aW50NjRfdCB2YWwsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KQoreworICAgIHN0cnVj dCB2Y3B1ICpjdXJyID0gY3VycmVudDsKKyAgICBjb25zdCBzdHJ1Y3QgZG9tYWluICpjdXJyZCA9 IGN1cnItPmRvbWFpbjsKKyAgICBib29sIHZwbXVfbXNyID0gZmFsc2U7CisKKyAgICBzd2l0Y2gg KCByZWcgKQorICAgIHsKKyAgICAgICAgdWludDY0X3QgdGVtcDsKKyAgICAgICAgaW50IHJjOwor CisgICAgY2FzZSBNU1JfRlNfQkFTRToKKyAgICAgICAgaWYgKCBpc19wdl8zMmJpdF9kb21haW4o Y3VycmQpIHx8ICFpc19jYW5vbmljYWxfYWRkcmVzcyh2YWwpICkKKyAgICAgICAgICAgIGJyZWFr OworICAgICAgICB3cmZzYmFzZSh2YWwpOworICAgICAgICBjdXJyLT5hcmNoLnB2X3ZjcHUuZnNf YmFzZSA9IHZhbDsKKyAgICAgICAgcmV0dXJuIFg4NkVNVUxfT0tBWTsKKworICAgIGNhc2UgTVNS X0dTX0JBU0U6CisgICAgICAgIGlmICggaXNfcHZfMzJiaXRfZG9tYWluKGN1cnJkKSB8fCAhaXNf Y2Fub25pY2FsX2FkZHJlc3ModmFsKSApCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgd3Jn c2Jhc2UodmFsKTsKKyAgICAgICAgY3Vyci0+YXJjaC5wdl92Y3B1LmdzX2Jhc2Vfa2VybmVsID0g dmFsOworICAgICAgICByZXR1cm4gWDg2RU1VTF9PS0FZOworCisgICAgY2FzZSBNU1JfU0hBRE9X X0dTX0JBU0U6CisgICAgICAgIGlmICggaXNfcHZfMzJiaXRfZG9tYWluKGN1cnJkKSB8fCAhaXNf Y2Fub25pY2FsX2FkZHJlc3ModmFsKSApCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgd3Jt c3JsKE1TUl9TSEFET1dfR1NfQkFTRSwgdmFsKTsKKyAgICAgICAgY3Vyci0+YXJjaC5wdl92Y3B1 LmdzX2Jhc2VfdXNlciA9IHZhbDsKKyAgICAgICAgcmV0dXJuIFg4NkVNVUxfT0tBWTsKKworICAg IGNhc2UgTVNSX0s3X0ZJRF9WSURfU1RBVFVTOgorICAgIGNhc2UgTVNSX0s3X0ZJRF9WSURfQ1RM OgorICAgIGNhc2UgTVNSX0s4X1BTVEFURV9MSU1JVDoKKyAgICBjYXNlIE1TUl9LOF9QU1RBVEVf Q1RSTDoKKyAgICBjYXNlIE1TUl9LOF9QU1RBVEVfU1RBVFVTOgorICAgIGNhc2UgTVNSX0s4X1BT VEFURTA6CisgICAgY2FzZSBNU1JfSzhfUFNUQVRFMToKKyAgICBjYXNlIE1TUl9LOF9QU1RBVEUy OgorICAgIGNhc2UgTVNSX0s4X1BTVEFURTM6CisgICAgY2FzZSBNU1JfSzhfUFNUQVRFNDoKKyAg ICBjYXNlIE1TUl9LOF9QU1RBVEU1OgorICAgIGNhc2UgTVNSX0s4X1BTVEFURTY6CisgICAgY2Fz ZSBNU1JfSzhfUFNUQVRFNzoKKyAgICBjYXNlIE1TUl9LOF9IV0NSOgorICAgICAgICBpZiAoIGJv b3RfY3B1X2RhdGEueDg2X3ZlbmRvciAhPSBYODZfVkVORE9SX0FNRCApCisgICAgICAgICAgICBi cmVhazsKKyAgICAgICAgaWYgKCBsaWtlbHkoIWlzX2NwdWZyZXFfY29udHJvbGxlcihjdXJyZCkp IHx8CisgICAgICAgICAgICAgd3Jtc3Jfc2FmZShyZWcsIHZhbCkgPT0gMCApCisgICAgICAgICAg ICByZXR1cm4gWDg2RU1VTF9PS0FZOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgTVNSX0FN RDY0X05CX0NGRzoKKyAgICAgICAgaWYgKCBib290X2NwdV9kYXRhLng4Nl92ZW5kb3IgIT0gWDg2 X1ZFTkRPUl9BTUQgfHwKKyAgICAgICAgICAgICBib290X2NwdV9kYXRhLng4NiA8IDB4MTAgfHwg Ym9vdF9jcHVfZGF0YS54ODYgPiAweDE3ICkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBp ZiAoICFpc19oYXJkd2FyZV9kb21haW4oY3VycmQpIHx8ICFpc19waW5uZWRfdmNwdShjdXJyKSAp CisgICAgICAgICAgICByZXR1cm4gWDg2RU1VTF9PS0FZOworICAgICAgICBpZiAoIChyZG1zcl9z YWZlKE1TUl9BTUQ2NF9OQl9DRkcsIHRlbXApICE9IDApIHx8CisgICAgICAgICAgICAgKCh2YWwg XiB0ZW1wKSAmIH4oMVVMTCA8PCBBTUQ2NF9OQl9DRkdfQ0Y4X0VYVF9FTkFCTEVfQklUKSkgKQor ICAgICAgICAgICAgZ290byBpbnZhbGlkOworICAgICAgICBpZiAoIHdybXNyX3NhZmUoTVNSX0FN RDY0X05CX0NGRywgdmFsKSA9PSAwICkKKyAgICAgICAgICAgIHJldHVybiBYODZFTVVMX09LQVk7 CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBNU1JfRkFNMTBIX01NSU9fQ09ORl9CQVNFOgor ICAgICAgICBpZiAoIGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvciAhPSBYODZfVkVORE9SX0FNRCB8 fAorICAgICAgICAgICAgIGJvb3RfY3B1X2RhdGEueDg2IDwgMHgxMCB8fCBib290X2NwdV9kYXRh Lng4NiA+IDB4MTcgKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmICggIWlzX2hhcmR3 YXJlX2RvbWFpbihjdXJyZCkgfHwgIWlzX3Bpbm5lZF92Y3B1KGN1cnIpICkKKyAgICAgICAgICAg IHJldHVybiBYODZFTVVMX09LQVk7CisgICAgICAgIGlmICggcmRtc3Jfc2FmZShNU1JfRkFNMTBI X01NSU9fQ09ORl9CQVNFLCB0ZW1wKSAhPSAwICkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg ICBpZiAoIChwY2lfcHJvYmUgJiBQQ0lfUFJPQkVfTUFTSykgPT0gUENJX1BST0JFX01NQ09ORiA/ CisgICAgICAgICAgICAgdGVtcCAhPSB2YWwgOgorICAgICAgICAgICAgICgodGVtcCBeIHZhbCkg JgorICAgICAgICAgICAgICB+KEZBTTEwSF9NTUlPX0NPTkZfRU5BQkxFIHwKKyAgICAgICAgICAg ICAgICAoRkFNMTBIX01NSU9fQ09ORl9CVVNSQU5HRV9NQVNLIDw8CisgICAgICAgICAgICAgICAg IEZBTTEwSF9NTUlPX0NPTkZfQlVTUkFOR0VfU0hJRlQpIHwKKyAgICAgICAgICAgICAgICAoKHU2 NClGQU0xMEhfTU1JT19DT05GX0JBU0VfTUFTSyA8PAorICAgICAgICAgICAgICAgICBGQU0xMEhf TU1JT19DT05GX0JBU0VfU0hJRlQpKSkgKQorICAgICAgICAgICAgZ290byBpbnZhbGlkOworICAg ICAgICBpZiAoIHdybXNyX3NhZmUoTVNSX0ZBTTEwSF9NTUlPX0NPTkZfQkFTRSwgdmFsKSA9PSAw ICkKKyAgICAgICAgICAgIHJldHVybiBYODZFTVVMX09LQVk7CisgICAgICAgIGJyZWFrOworCisg ICAgY2FzZSBNU1JfSUEzMl9VQ09ERV9SRVY6CisgICAgICAgIGlmICggYm9vdF9jcHVfZGF0YS54 ODZfdmVuZG9yICE9IFg4Nl9WRU5ET1JfSU5URUwgKQorICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgIGlmICggIWlzX2hhcmR3YXJlX2RvbWFpbihjdXJyZCkgfHwgIWlzX3Bpbm5lZF92Y3B1KGN1 cnIpICkKKyAgICAgICAgICAgIHJldHVybiBYODZFTVVMX09LQVk7CisgICAgICAgIGlmICggcmRt c3Jfc2FmZShyZWcsIHRlbXApICkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBpZiAoIHZh bCApCisgICAgICAgICAgICBnb3RvIGludmFsaWQ7CisgICAgICAgIHJldHVybiBYODZFTVVMX09L QVk7CisKKyAgICBjYXNlIE1TUl9JQTMyX01JU0NfRU5BQkxFOgorICAgICAgICBpZiAoIHJkbXNy X3NhZmUocmVnLCB0ZW1wKSApCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgaWYgKCB2YWwg IT0gZ3Vlc3RfbWlzY19lbmFibGUodGVtcCkgKQorICAgICAgICAgICAgZ290byBpbnZhbGlkOwor ICAgICAgICByZXR1cm4gWDg2RU1VTF9PS0FZOworCisgICAgY2FzZSBNU1JfSUEzMl9NUEVSRjoK KyAgICBjYXNlIE1TUl9JQTMyX0FQRVJGOgorICAgICAgICBpZiAoIChib290X2NwdV9kYXRhLng4 Nl92ZW5kb3IgIT0gWDg2X1ZFTkRPUl9JTlRFTCkgJiYKKyAgICAgICAgICAgICAoYm9vdF9jcHVf ZGF0YS54ODZfdmVuZG9yICE9IFg4Nl9WRU5ET1JfQU1EKSApCisgICAgICAgICAgICBicmVhazsK KyAgICAgICAgaWYgKCBsaWtlbHkoIWlzX2NwdWZyZXFfY29udHJvbGxlcihjdXJyZCkpIHx8Cisg ICAgICAgICAgICAgd3Jtc3Jfc2FmZShyZWcsIHZhbCkgPT0gMCApCisgICAgICAgICAgICByZXR1 cm4gWDg2RU1VTF9PS0FZOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgTVNSX0lBMzJfUEVS Rl9DVEw6CisgICAgICAgIGlmICggYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yICE9IFg4Nl9WRU5E T1JfSU5URUwgKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmICggbGlrZWx5KCFpc19j cHVmcmVxX2NvbnRyb2xsZXIoY3VycmQpKSB8fAorICAgICAgICAgICAgIHdybXNyX3NhZmUocmVn LCB2YWwpID09IDAgKQorICAgICAgICAgICAgcmV0dXJuIFg4NkVNVUxfT0tBWTsKKyAgICAgICAg YnJlYWs7CisKKyAgICBjYXNlIE1TUl9JQTMyX1RIRVJNX0NPTlRST0w6CisgICAgY2FzZSBNU1Jf SUEzMl9FTkVSR1lfUEVSRl9CSUFTOgorICAgICAgICBpZiAoIGJvb3RfY3B1X2RhdGEueDg2X3Zl bmRvciAhPSBYODZfVkVORE9SX0lOVEVMICkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBp ZiAoICFpc19oYXJkd2FyZV9kb21haW4oY3VycmQpIHx8ICFpc19waW5uZWRfdmNwdShjdXJyKSB8 fAorICAgICAgICAgICAgIHdybXNyX3NhZmUocmVnLCB2YWwpID09IDAgKQorICAgICAgICAgICAg cmV0dXJuIFg4NkVNVUxfT0tBWTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE1TUl9BTUQ2 NF9EUjBfQUREUkVTU19NQVNLOgorICAgICAgICBpZiAoICFib290X2NwdV9oYXMoWDg2X0ZFQVRV UkVfREJFWFQpIHx8ICh2YWwgPj4gMzIpICkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj dXJyLT5hcmNoLnB2X3ZjcHUuZHJfbWFza1swXSA9IHZhbDsKKyAgICAgICAgaWYgKCBjdXJyLT5h cmNoLmRlYnVncmVnWzddICYgRFI3X0FDVElWRV9NQVNLICkKKyAgICAgICAgICAgIHdybXNybChN U1JfQU1ENjRfRFIwX0FERFJFU1NfTUFTSywgdmFsKTsKKyAgICAgICAgcmV0dXJuIFg4NkVNVUxf T0tBWTsKKworICAgIGNhc2UgTVNSX0FNRDY0X0RSMV9BRERSRVNTX01BU0sgLi4uIE1TUl9BTUQ2 NF9EUjNfQUREUkVTU19NQVNLOgorICAgICAgICBpZiAoICFib290X2NwdV9oYXMoWDg2X0ZFQVRV UkVfREJFWFQpIHx8ICh2YWwgPj4gMzIpICkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj dXJyLT5hcmNoLnB2X3ZjcHUuZHJfbWFza1tyZWcgLSBNU1JfQU1ENjRfRFIxX0FERFJFU1NfTUFT SyArIDFdID0gdmFsOworICAgICAgICBpZiAoIGN1cnItPmFyY2guZGVidWdyZWdbN10gJiBEUjdf QUNUSVZFX01BU0sgKQorICAgICAgICAgICAgd3Jtc3JsKHJlZywgdmFsKTsKKyAgICAgICAgcmV0 dXJuIFg4NkVNVUxfT0tBWTsKKworICAgIGNhc2UgTVNSX0lOVEVMX1BMQVRGT1JNX0lORk86Cisg ICAgICAgIGlmICggYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yICE9IFg4Nl9WRU5ET1JfSU5URUwg fHwKKyAgICAgICAgICAgICB2YWwgfHwgcmRtc3Jfc2FmZShNU1JfSU5URUxfUExBVEZPUk1fSU5G TywgdmFsKSApCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuIFg4NkVNVUxfT0tB WTsKKworICAgIGNhc2UgTVNSX0lOVEVMX01JU0NfRkVBVFVSRVNfRU5BQkxFUzoKKyAgICAgICAg aWYgKCBib290X2NwdV9kYXRhLng4Nl92ZW5kb3IgIT0gWDg2X1ZFTkRPUl9JTlRFTCB8fAorICAg ICAgICAgICAgICh2YWwgJiB+TVNSX01JU0NfRkVBVFVSRVNfQ1BVSURfRkFVTFRJTkcpIHx8Cisg ICAgICAgICAgICAgcmRtc3Jfc2FmZShNU1JfSU5URUxfTUlTQ19GRUFUVVJFU19FTkFCTEVTLCB0 ZW1wKSApCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgaWYgKCAodmFsICYgTVNSX01JU0Nf RkVBVFVSRVNfQ1BVSURfRkFVTFRJTkcpICYmCisgICAgICAgICAgICAgIXRoaXNfY3B1KGNwdWlk X2ZhdWx0aW5nX2VuYWJsZWQpICkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjdXJyLT5h cmNoLmNwdWlkX2ZhdWx0aW5nID0gISEodmFsICYgTVNSX01JU0NfRkVBVFVSRVNfQ1BVSURfRkFV TFRJTkcpOworICAgICAgICByZXR1cm4gWDg2RU1VTF9PS0FZOworCisgICAgY2FzZSBNU1JfUDZf UEVSRkNUUigwKS4uLk1TUl9QNl9QRVJGQ1RSKDcpOgorICAgIGNhc2UgTVNSX1A2X0VWTlRTRUwo MCkuLi5NU1JfUDZfRVZOVFNFTCgzKToKKyAgICBjYXNlIE1TUl9DT1JFX1BFUkZfRklYRURfQ1RS MC4uLk1TUl9DT1JFX1BFUkZfRklYRURfQ1RSMjoKKyAgICBjYXNlIE1TUl9DT1JFX1BFUkZfRklY RURfQ1RSX0NUUkwuLi5NU1JfQ09SRV9QRVJGX0dMT0JBTF9PVkZfQ1RSTDoKKyAgICAgICAgaWYg KCBib290X2NwdV9kYXRhLng4Nl92ZW5kb3IgPT0gWDg2X1ZFTkRPUl9JTlRFTCApCisgICAgICAg IHsKKyAgICAgICAgICAgIHZwbXVfbXNyID0gdHJ1ZTsKKyAgICBjYXNlIE1TUl9BTURfRkFNMTVI X0VWTlRTRUwwLi4uTVNSX0FNRF9GQU0xNUhfUEVSRkNUUjU6CisgICAgY2FzZSBNU1JfSzdfRVZO VFNFTDAuLi5NU1JfSzdfUEVSRkNUUjM6CisgICAgICAgICAgICBpZiAoIHZwbXVfbXNyIHx8IChi b290X2NwdV9kYXRhLng4Nl92ZW5kb3IgPT0gWDg2X1ZFTkRPUl9BTUQpICkKKyAgICAgICAgICAg IHsKKyAgICAgICAgICAgICAgICBpZiAoICh2cG11X21vZGUgJiBYRU5QTVVfTU9ERV9BTEwpICYm CisgICAgICAgICAgICAgICAgICAgICAhaXNfaGFyZHdhcmVfZG9tYWluKGN1cnJkKSApCisgICAg ICAgICAgICAgICAgICAgIHJldHVybiBYODZFTVVMX09LQVk7CisKKyAgICAgICAgICAgICAgICBp ZiAoIHZwbXVfZG9fd3Jtc3IocmVnLCB2YWwsIDApICkKKyAgICAgICAgICAgICAgICAgICAgYnJl YWs7CisgICAgICAgICAgICAgICAgcmV0dXJuIFg4NkVNVUxfT0tBWTsKKyAgICAgICAgICAgIH0K KyAgICAgICAgfQorICAgICAgICAvKiBmYWxsIHRocm91Z2ggKi8KKyAgICBkZWZhdWx0OgorICAg ICAgICBpZiAoIHdybXNyX2h5cGVydmlzb3JfcmVncyhyZWcsIHZhbCkgPT0gMSApCisgICAgICAg ICAgICByZXR1cm4gWDg2RU1VTF9PS0FZOworCisgICAgICAgIHJjID0gdm1jZV93cm1zcihyZWcs IHZhbCk7CisgICAgICAgIGlmICggcmMgPCAwICkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg ICBpZiAoIHJjICkKKyAgICAgICAgICAgIHJldHVybiBYODZFTVVMX09LQVk7CisKKyAgICAgICAg aWYgKCAocmRtc3Jfc2FmZShyZWcsIHRlbXApICE9IDApIHx8ICh2YWwgIT0gdGVtcCkgKQorICAg IGludmFsaWQ6CisgICAgICAgICAgICBnZHByaW50ayhYRU5MT0dfV0FSTklORywKKyAgICAgICAg ICAgICAgICAgICAgICJEb21haW4gYXR0ZW1wdGVkIFdSTVNSICUwOHggZnJvbSAweCUwMTYiUFJJ eDY0IiB0byAweCUwMTYiUFJJeDY0IlxuIiwKKyAgICAgICAgICAgICAgICAgICAgIHJlZywgdGVt cCwgdmFsKTsKKyAgICAgICAgcmV0dXJuIFg4NkVNVUxfT0tBWTsKKyAgICB9CisKKyAgICByZXR1 cm4gWDg2RU1VTF9VTkhBTkRMRUFCTEU7Cit9CisKK3N0YXRpYyBpbnQgcHJpdl9vcF93YmludmQo c3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpCit7CisgICAgLyogSWdub3JlIHRoZSBpbnN0 cnVjdGlvbiBpZiB1bnByaXZpbGVnZWQuICovCisgICAgaWYgKCAhY2FjaGVfZmx1c2hfcGVybWl0 dGVkKGN1cnJlbnQtPmRvbWFpbikgKQorICAgICAgICAvKgorICAgICAgICAgKiBOb24tcGh5c2Rl diBkb21haW4gYXR0ZW1wdGVkIFdCSU5WRDsgaWdub3JlIGZvciBub3cgc2luY2UKKyAgICAgICAg ICogbmV3ZXIgbGludXggdXNlcyB0aGlzIGluIHNvbWUgc3RhcnQtb2YtZGF5IHRpbWluZyBsb29w cy4KKyAgICAgICAgICovCisgICAgICAgIDsKKyAgICBlbHNlCisgICAgICAgIHdiaW52ZCgpOwor CisgICAgcmV0dXJuIFg4NkVNVUxfT0tBWTsKK30KKworaW50IHB2X2VtdWxfY3B1aWQodWludDMy X3QgbGVhZiwgdWludDMyX3Qgc3VibGVhZiwKKyAgICAgICAgICAgICAgICAgIHN0cnVjdCBjcHVp ZF9sZWFmICpyZXMsIHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KQoreworICAgIGd1ZXN0 X2NwdWlkKGN1cnJlbnQsIGxlYWYsIHN1YmxlYWYsIHJlcyk7CisKKyAgICByZXR1cm4gWDg2RU1V TF9PS0FZOworfQorCitzdGF0aWMgaW50IHByaXZfb3BfdmFsaWRhdGUoY29uc3Qgc3RydWN0IHg4 Nl9lbXVsYXRlX3N0YXRlICpzdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1 Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCkKK3sKKyAgICBzd2l0Y2ggKCBjdHh0LT5vcGNvZGUg KQorICAgIHsKKyAgICBjYXNlIDB4NmMgLi4uIDB4NmY6IC8qIGlucyAvIG91dHMgKi8KKyAgICBj YXNlIDB4ZTQgLi4uIDB4ZTc6IC8qIGluIC8gb3V0IChpbW1lZGlhdGUgcG9ydCkgKi8KKyAgICBj YXNlIDB4ZWMgLi4uIDB4ZWY6IC8qIGluIC8gb3V0IChwb3J0IGluICVkeCkgKi8KKyAgICBjYXNl IFg4NkVNVUxfT1BDKDB4MGYsIDB4MDYpOiAvKiBjbHRzICovCisgICAgY2FzZSBYODZFTVVMX09Q QygweDBmLCAweDA5KTogLyogd2JpbnZkICovCisgICAgY2FzZSBYODZFTVVMX09QQygweDBmLCAw eDIwKSAuLi4KKyAgICAgICAgIFg4NkVNVUxfT1BDKDB4MGYsIDB4MjMpOiAvKiBtb3YgdG8vZnJv bSBjci9kciAqLworICAgIGNhc2UgWDg2RU1VTF9PUEMoMHgwZiwgMHgzMCk6IC8qIHdybXNyICov CisgICAgY2FzZSBYODZFTVVMX09QQygweDBmLCAweDMxKTogLyogcmR0c2MgKi8KKyAgICBjYXNl IFg4NkVNVUxfT1BDKDB4MGYsIDB4MzIpOiAvKiByZG1zciAqLworICAgIGNhc2UgWDg2RU1VTF9P UEMoMHgwZiwgMHhhMik6IC8qIGNwdWlkICovCisgICAgICAgIHJldHVybiBYODZFTVVMX09LQVk7 CisKKyAgICBjYXNlIDB4ZmE6IGNhc2UgMHhmYjogLyogY2xpIC8gc3RpICovCisgICAgICAgIGlm ICggIWlvcGxfb2soY3VycmVudCwgY3R4dC0+cmVncykgKQorICAgICAgICAgICAgYnJlYWs7Cisg ICAgICAgIC8qCisgICAgICAgICAqIFRoaXMgaXMganVzdCB0b28gZGFuZ2Vyb3VzIHRvIGFsbG93 LCBpbiBteSBvcGluaW9uLiBDb25zaWRlciBpZiB0aGUKKyAgICAgICAgICogY2FsbGVyIHRoZW4g dHJpZXMgdG8gcmVlbmFibGUgaW50ZXJydXB0cyB1c2luZyBQT1BGOiB3ZSBjYW4ndCB0cmFwCisg ICAgICAgICAqIHRoYXQgYW5kIHdlJ2xsIGVuZCB1cCB3aXRoIGhhcmQtdG8tZGVidWcgbG9ja3Vw cy4gRmFzdCAmIGxvb3NlIHdpbGwKKyAgICAgICAgICogZG8gZm9yIHVzLiA6LSkKKyAgICAgICAg dmNwdV9pbmZvKGN1cnJlbnQsIGV2dGNobl91cGNhbGxfbWFzaykgPSAoY3R4dC0+b3Bjb2RlID09 IDB4ZmEpOworICAgICAgICAgKi8KKyAgICAgICAgcmV0dXJuIFg4NkVNVUxfRE9ORTsKKworICAg IGNhc2UgWDg2RU1VTF9PUEMoMHgwZiwgMHgwMSk6CisgICAgeworICAgICAgICB1bnNpZ25lZCBp bnQgbW9kcm1fcm0sIG1vZHJtX3JlZzsKKworICAgICAgICBpZiAoIHg4Nl9pbnNuX21vZHJtKHN0 YXRlLCAmbW9kcm1fcm0sICZtb2RybV9yZWcpICE9IDMgfHwKKyAgICAgICAgICAgICAobW9kcm1f cm0gJiA3KSAhPSAxICkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBzd2l0Y2ggKCBtb2Ry bV9yZWcgJiA3ICkKKyAgICAgICAgeworICAgICAgICBjYXNlIDI6IC8qIHhzZXRidiAqLworICAg ICAgICBjYXNlIDc6IC8qIHJkdHNjcCAqLworICAgICAgICAgICAgcmV0dXJuIFg4NkVNVUxfT0tB WTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgfQorCisgICAgcmV0dXJu IFg4NkVNVUxfVU5IQU5ETEVBQkxFOworfQorCitzdGF0aWMgaW50IHByaXZfb3BfaW5zbl9mZXRj aChlbnVtIHg4Nl9zZWdtZW50IHNlZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVu c2lnbmVkIGxvbmcgb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAq cF9kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGJ5dGVz LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQg KmN0eHQpCit7CisgICAgY29uc3Qgc3RydWN0IHByaXZfb3BfY3R4dCAqcG9jID0KKyAgICAgICAg Y29udGFpbmVyX29mKGN0eHQsIHN0cnVjdCBwcml2X29wX2N0eHQsIGN0eHQpOworICAgIHVuc2ln bmVkIGludCByYzsKKyAgICB1bnNpZ25lZCBsb25nIGFkZHIgPSBwb2MtPmNzLmJhc2UgKyBvZmZz ZXQ7CisKKyAgICBBU1NFUlQoc2VnID09IHg4Nl9zZWdfY3MpOworCisgICAgLyogV2UgZG9uJ3Qg bWVhbiB0byBlbXVsYXRlIGFueSBicmFuY2hlcy4gKi8KKyAgICBpZiAoICFieXRlcyApCisgICAg ICAgIHJldHVybiBYODZFTVVMX1VOSEFORExFQUJMRTsKKworICAgIHJjID0gcHZfZW11bF92aXJ0 X3RvX2xpbmVhcihwb2MtPmNzLmJhc2UsIG9mZnNldCwgYnl0ZXMsIHBvYy0+Y3MubGltaXQsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHg4Nl9zZWdfY3MsIGN0eHQsICZhZGRyKTsK KyAgICBpZiAoIHJjICE9IFg4NkVNVUxfT0tBWSApCisgICAgICAgIHJldHVybiByYzsKKworICAg IGlmICggKHJjID0gX19jb3B5X2Zyb21fdXNlcihwX2RhdGEsICh2b2lkICopYWRkciwgYnl0ZXMp KSAhPSAwICkKKyAgICB7CisgICAgICAgIC8qCisgICAgICAgICAqIFRPRE86IFRoaXMgc2hvdWxk IHJlcG9ydCBQRkVDX2luc25fZmV0Y2ggd2hlbiBnb2MtPmluc25fZmV0Y2ggJiYKKyAgICAgICAg ICogY3B1X2hhc19ueCwgYnV0IHdlJ2QgdGhlbiBuZWVkIGEgImZldGNoIiB2YXJpYW50IG9mCisg ICAgICAgICAqIF9fY29weV9mcm9tX3VzZXIoKSByZXNwZWN0aW5nIE5YLCBTTUVQLCBhbmQgcHJv dGVjdGlvbiBrZXlzLgorICAgICAgICAgKi8KKyAgICAgICAgeDg2X2VtdWxfcGFnZWZhdWx0KDAs IGFkZHIgKyBieXRlcyAtIHJjLCBjdHh0KTsKKyAgICAgICAgcmV0dXJuIFg4NkVNVUxfRVhDRVBU SU9OOworICAgIH0KKworICAgIHJldHVybiBYODZFTVVMX09LQVk7Cit9CisKKworc3RhdGljIGNv bnN0IHN0cnVjdCB4ODZfZW11bGF0ZV9vcHMgcHJpdl9vcF9vcHMgPSB7CisgICAgLmluc25fZmV0 Y2ggICAgICAgICAgPSBwcml2X29wX2luc25fZmV0Y2gsCisgICAgLnJlYWQgICAgICAgICAgICAg ICAgPSB4ODZlbXVsX3VuaGFuZGxlYWJsZV9ydywKKyAgICAudmFsaWRhdGUgICAgICAgICAgICA9 IHByaXZfb3BfdmFsaWRhdGUsCisgICAgLnJlYWRfaW8gICAgICAgICAgICAgPSBwcml2X29wX3Jl YWRfaW8sCisgICAgLndyaXRlX2lvICAgICAgICAgICAgPSBwcml2X29wX3dyaXRlX2lvLAorICAg IC5yZXBfaW5zICAgICAgICAgICAgID0gcHJpdl9vcF9yZXBfaW5zLAorICAgIC5yZXBfb3V0cyAg ICAgICAgICAgID0gcHJpdl9vcF9yZXBfb3V0cywKKyAgICAucmVhZF9zZWdtZW50ICAgICAgICA9 IHByaXZfb3BfcmVhZF9zZWdtZW50LAorICAgIC5yZWFkX2NyICAgICAgICAgICAgID0gcHJpdl9v cF9yZWFkX2NyLAorICAgIC53cml0ZV9jciAgICAgICAgICAgID0gcHJpdl9vcF93cml0ZV9jciwK KyAgICAucmVhZF9kciAgICAgICAgICAgICA9IHByaXZfb3BfcmVhZF9kciwKKyAgICAud3JpdGVf ZHIgICAgICAgICAgICA9IHByaXZfb3Bfd3JpdGVfZHIsCisgICAgLnJlYWRfbXNyICAgICAgICAg ICAgPSBwcml2X29wX3JlYWRfbXNyLAorICAgIC53cml0ZV9tc3IgICAgICAgICAgID0gcHJpdl9v cF93cml0ZV9tc3IsCisgICAgLmNwdWlkICAgICAgICAgICAgICAgPSBwdl9lbXVsX2NwdWlkLAor ICAgIC53YmludmQgICAgICAgICAgICAgID0gcHJpdl9vcF93YmludmQsCit9OworCitpbnQgcHZf ZW11bGF0ZV9wcml2aWxlZ2VkX29wKHN0cnVjdCBjcHVfdXNlcl9yZWdzICpyZWdzKQoreworICAg IHN0cnVjdCB2Y3B1ICpjdXJyID0gY3VycmVudDsKKyAgICBzdHJ1Y3QgZG9tYWluICpjdXJyZCA9 IGN1cnItPmRvbWFpbjsKKyAgICBzdHJ1Y3QgcHJpdl9vcF9jdHh0IGN0eHQgPSB7CisgICAgICAg IC5jdHh0LnJlZ3MgPSByZWdzLAorICAgICAgICAuY3R4dC52ZW5kb3IgPSBjdXJyZC0+YXJjaC5j cHVpZC0+eDg2X3ZlbmRvciwKKyAgICAgICAgLmN0eHQubG1hID0gIWlzX3B2XzMyYml0X2RvbWFp bihjdXJyZCksCisgICAgfTsKKyAgICBpbnQgcmM7CisgICAgdW5zaWduZWQgaW50IGVmbGFncywg YXI7CisKKyAgICBpZiAoICFwdl9lbXVsX3JlYWRfZGVzY3JpcHRvcihyZWdzLT5jcywgY3Vyciwg JmN0eHQuY3MuYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY3R4dC5j cy5saW1pdCwgJmFyLCAxKSB8fAorICAgICAgICAgIShhciAmIF9TRUdNRU5UX1MpIHx8CisgICAg ICAgICAhKGFyICYgX1NFR01FTlRfUCkgfHwKKyAgICAgICAgICEoYXIgJiBfU0VHTUVOVF9DT0RF KSApCisgICAgICAgIHJldHVybiAwOworCisgICAgLyogTWlycm9yIHZpcnR1YWxpemVkIHN0YXRl IGludG8gRUZMQUdTLiAqLworICAgIEFTU0VSVChyZWdzLT5lZmxhZ3MgJiBYODZfRUZMQUdTX0lG KTsKKyAgICBpZiAoIHZjcHVfaW5mbyhjdXJyLCBldnRjaG5fdXBjYWxsX21hc2spICkKKyAgICAg ICAgcmVncy0+ZWZsYWdzICY9IH5YODZfRUZMQUdTX0lGOworICAgIGVsc2UKKyAgICAgICAgcmVn cy0+ZWZsYWdzIHw9IFg4Nl9FRkxBR1NfSUY7CisgICAgQVNTRVJUKCEocmVncy0+ZWZsYWdzICYg WDg2X0VGTEFHU19JT1BMKSk7CisgICAgcmVncy0+ZWZsYWdzIHw9IGN1cnItPmFyY2gucHZfdmNw dS5pb3BsOworICAgIGVmbGFncyA9IHJlZ3MtPmVmbGFnczsKKworICAgIGN0eHQuY3R4dC5hZGRy X3NpemUgPSBhciAmIF9TRUdNRU5UX0wgPyA2NCA6IGFyICYgX1NFR01FTlRfREIgPyAzMiA6IDE2 OworICAgIC8qIExlYXZlIHplcm8gaW4gY3R4dC5jdHh0LnNwX3NpemUsIGFzIGl0J3Mgbm90IG5l ZWRlZC4gKi8KKyAgICByYyA9IHg4Nl9lbXVsYXRlKCZjdHh0LmN0eHQsICZwcml2X29wX29wcyk7 CisKKyAgICBpZiAoIGN0eHQuaW9fZW11bF9zdHViICkKKyAgICAgICAgdW5tYXBfZG9tYWluX3Bh Z2UoY3R4dC5pb19lbXVsX3N0dWIpOworCisgICAgLyoKKyAgICAgKiBVbi1taXJyb3IgdmlydHVh bGl6ZWQgc3RhdGUgZnJvbSBFRkxBR1MuCisgICAgICogTm90aGluZyB3ZSBhbGxvdyB0byBiZSBl bXVsYXRlZCBjYW4gY2hhbmdlIGFueXRoaW5nIG90aGVyIHRoYW4gdGhlCisgICAgICogYXJpdGht ZXRpYyBiaXRzLCBhbmQgdGhlIHJlc3VtZSBmbGFnLgorICAgICAqLworICAgIEFTU0VSVCghKChy ZWdzLT5lZmxhZ3MgXiBlZmxhZ3MpICYKKyAgICAgICAgICAgICB+KFg4Nl9FRkxBR1NfUkYgfCBY ODZfRUZMQUdTX0FSSVRIX01BU0spKSk7CisgICAgcmVncy0+ZWZsYWdzIHw9IFg4Nl9FRkxBR1Nf SUY7CisgICAgcmVncy0+ZWZsYWdzICY9IH5YODZfRUZMQUdTX0lPUEw7CisKKyAgICBzd2l0Y2gg KCByYyApCisgICAgeworICAgIGNhc2UgWDg2RU1VTF9PS0FZOgorICAgICAgICBpZiAoIGN0eHQu dHNjICYgVFNDX0JBU0UgKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIGN0eHQudHNjICYg VFNDX0FVWCApCisgICAgICAgICAgICAgICAgcHZfc29mdF9yZHRzYyhjdXJyLCByZWdzLCAxKTsK KyAgICAgICAgICAgIGVsc2UgaWYgKCBjdXJyZC0+YXJjaC52dHNjICkKKyAgICAgICAgICAgICAg ICBwdl9zb2Z0X3JkdHNjKGN1cnIsIHJlZ3MsIDApOworICAgICAgICAgICAgZWxzZQorICAgICAg ICAgICAgICAgIG1zcl9zcGxpdChyZWdzLCByZHRzYygpKTsKKyAgICAgICAgfQorCisgICAgICAg IGlmICggY3R4dC5jdHh0LnJldGlyZS5zaW5nbGVzdGVwICkKKyAgICAgICAgICAgIGN0eHQuYnBt YXRjaCB8PSBEUl9TVEVQOworICAgICAgICBpZiAoIGN0eHQuYnBtYXRjaCApCisgICAgICAgIHsK KyAgICAgICAgICAgIGN1cnItPmFyY2guZGVidWdyZWdbNl0gfD0gY3R4dC5icG1hdGNoIHwgRFJf U1RBVFVTX1JFU0VSVkVEX09ORTsKKyAgICAgICAgICAgIGlmICggIShjdXJyLT5hcmNoLnB2X3Zj cHUudHJhcF9ib3VuY2UuZmxhZ3MgJiBUQkZfRVhDRVBUSU9OKSApCisgICAgICAgICAgICAgICAg cHZfaW5qZWN0X2h3X2V4Y2VwdGlvbihUUkFQX2RlYnVnLCBYODZfRVZFTlRfTk9fRUMpOworICAg ICAgICB9CisgICAgICAgIC8qIGZhbGwgdGhyb3VnaCAqLworICAgIGNhc2UgWDg2RU1VTF9SRVRS WToKKyAgICAgICAgcmV0dXJuIEVYQ1JFVF9mYXVsdF9maXhlZDsKKworICAgIGNhc2UgWDg2RU1V TF9FWENFUFRJT046CisgICAgICAgIHB2X2luamVjdF9ldmVudCgmY3R4dC5jdHh0LmV2ZW50KTsK KyAgICAgICAgcmV0dXJuIEVYQ1JFVF9mYXVsdF9maXhlZDsKKyAgICB9CisKKyAgICByZXR1cm4g MDsKK30KKworLyoKKyAqIExvY2FsIHZhcmlhYmxlczoKKyAqIG1vZGU6IEMKKyAqIGMtZmlsZS1z dHlsZTogIkJTRCIKKyAqIGMtYmFzaWMtb2Zmc2V0OiA0CisgKiB0YWItd2lkdGg6IDQKKyAqIGlu ZGVudC10YWJzLW1vZGU6IG5pbAorICogRW5kOgorICovCmRpZmYgLS1naXQgYS94ZW4vYXJjaC94 ODYveDg2XzY0L2dwcl9zd2l0Y2guUyBiL3hlbi9hcmNoL3g4Ni9wdi9ncHJfc3dpdGNoLlMKc2lt aWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHhlbi9hcmNoL3g4Ni94ODZfNjQvZ3ByX3N3 aXRjaC5TCnJlbmFtZSB0byB4ZW4vYXJjaC94ODYvcHYvZ3ByX3N3aXRjaC5TCmRpZmYgLS1naXQg YS94ZW4vYXJjaC94ODYvdHJhcHMuYyBiL3hlbi9hcmNoL3g4Ni90cmFwcy5jCmluZGV4IGRjYzQ4 Zjk4NjAuLjMyY2FiNzE0NDQgMTAwNjQ0Ci0tLSBhL3hlbi9hcmNoL3g4Ni90cmFwcy5jCisrKyBi L3hlbi9hcmNoL3g4Ni90cmFwcy5jCkBAIC03Nyw2ICs3Nyw3IEBACiAjaW5jbHVkZSA8cHVibGlj L2FyY2gteDg2L2NwdWlkLmg+CiAjaW5jbHVkZSA8YXNtL2NwdWlkLmg+CiAjaW5jbHVkZSA8eHNt L3hzbS5oPgorI2luY2x1ZGUgPGFzbS9wdi90cmFwcy5oPgogCiAjaW5jbHVkZSAicHYvZW11bGF0 ZS5oIgogCkBAIC02OTYsNDEgKzY5Nyw2IEBAIHZvaWQgcHZfaW5qZWN0X2V2ZW50KGNvbnN0IHN0 cnVjdCB4ODZfZXZlbnQgKmV2ZW50KQogICAgIH0KIH0KIAotc3RhdGljIHVuc2lnbmVkIGludCBj aGVja19ndWVzdF9pb19icmVha3BvaW50KHN0cnVjdCB2Y3B1ICp2LAotICAgIHVuc2lnbmVkIGlu dCBwb3J0LCB1bnNpZ25lZCBpbnQgbGVuKQotewotICAgIHVuc2lnbmVkIGludCB3aWR0aCwgaSwg bWF0Y2ggPSAwOwotICAgIHVuc2lnbmVkIGxvbmcgc3RhcnQ7Ci0KLSAgICBpZiAoICEodi0+YXJj aC5kZWJ1Z3JlZ1s1XSkgfHwKLSAgICAgICAgICEodi0+YXJjaC5wdl92Y3B1LmN0cmxyZWdbNF0g JiBYODZfQ1I0X0RFKSApCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgZm9yICggaSA9IDA7IGkg PCA0OyBpKysgKQotICAgIHsKLSAgICAgICAgaWYgKCAhKHYtPmFyY2guZGVidWdyZWdbNV0gJgot ICAgICAgICAgICAgICAgKDMgPDwgKGkgKiBEUl9FTkFCTEVfU0laRSkpKSApCi0gICAgICAgICAg ICBjb250aW51ZTsKLQotICAgICAgICBzdGFydCA9IHYtPmFyY2guZGVidWdyZWdbaV07Ci0gICAg ICAgIHdpZHRoID0gMDsKLQotICAgICAgICBzd2l0Y2ggKCAodi0+YXJjaC5kZWJ1Z3JlZ1s3XSA+ PgotICAgICAgICAgICAgICAgICAgKERSX0NPTlRST0xfU0hJRlQgKyBpICogRFJfQ09OVFJPTF9T SVpFKSkgJiAweGMgKQotICAgICAgICB7Ci0gICAgICAgIGNhc2UgRFJfTEVOXzE6IHdpZHRoID0g MTsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRFJfTEVOXzI6IHdpZHRoID0gMjsgYnJlYWs7Ci0gICAg ICAgIGNhc2UgRFJfTEVOXzQ6IHdpZHRoID0gNDsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRFJfTEVO Xzg6IHdpZHRoID0gODsgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIChzdGFydCA8 IChwb3J0ICsgbGVuKSkgJiYgKChzdGFydCArIHdpZHRoKSA+IHBvcnQpICkKLSAgICAgICAgICAg IG1hdGNoIHw9IDEgPDwgaTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbWF0Y2g7Ci19Ci0KIC8qCiAg KiBDYWxsZWQgZnJvbSBhc20gdG8gc2V0IHVwIHRoZSBNQ0UgdHJhcGJvdW5jZSBpbmZvLgogICog UmV0dXJucyAwIGlmIG5vIGNhbGxiYWNrIGlzIHNldCB1cCwgZWxzZSAxLgpAQCAtMTY3MCwxMzI4 ICsxNjM2LDYgQEAgc3RhdGljIGludCByZWFkX2dhdGVfZGVzY3JpcHRvcih1bnNpZ25lZCBpbnQg Z2F0ZV9zZWwsCiAgICAgcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBpbnQgcHZfZW11bF92aXJ0X3Rv X2xpbmVhcih1bnNpZ25lZCBsb25nIGJhc2UsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBieXRlcywgdW5zaWduZWQg bG9uZyBsaW1pdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtIHg4Nl9z ZWdtZW50IHNlZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgeDg2 X2VtdWxhdGVfY3R4dCAqY3R4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1 bnNpZ25lZCBsb25nICphZGRyKQotewotICAgIGludCByYyA9IFg4NkVNVUxfT0tBWTsKLQotICAg ICphZGRyID0gYmFzZSArIG9mZnNldDsKLQotICAgIGlmICggY3R4dC0+YWRkcl9zaXplIDwgNjQg KQotICAgIHsKLSAgICAgICAgaWYgKCBsaW1pdCA8IGJ5dGVzIC0gMSB8fCBvZmZzZXQgPiBsaW1p dCAtIGJ5dGVzICsgMSApCi0gICAgICAgICAgICByYyA9IFg4NkVNVUxfRVhDRVBUSU9OOwotICAg ICAgICAqYWRkciA9ICh1aW50MzJfdCkqYWRkcjsKLSAgICB9Ci0gICAgZWxzZSBpZiAoICFfX2Fk ZHJfb2soKmFkZHIpICkKLSAgICAgICAgcmMgPSBYODZFTVVMX0VYQ0VQVElPTjsKLQotICAgIGlm ICggdW5saWtlbHkocmMgPT0gWDg2RU1VTF9FWENFUFRJT04pICkKLSAgICAgICAgeDg2X2VtdWxf aHdfZXhjZXB0aW9uKHNlZyAhPSB4ODZfc2VnX3NzID8gVFJBUF9ncF9mYXVsdAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBUUkFQX3N0YWNrX2Vycm9y LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgY3R4dCk7Ci0KLSAgICByZXR1cm4g cmM7Ci19Ci0KLXN0cnVjdCBwcml2X29wX2N0eHQgewotICAgIHN0cnVjdCB4ODZfZW11bGF0ZV9j dHh0IGN0eHQ7Ci0gICAgc3RydWN0IHsKLSAgICAgICAgdW5zaWduZWQgbG9uZyBiYXNlLCBsaW1p dDsKLSAgICB9IGNzOwotICAgIGNoYXIgKmlvX2VtdWxfc3R1YjsKLSAgICB1bnNpZ25lZCBpbnQg YnBtYXRjaDsKLSAgICB1bnNpZ25lZCBpbnQgdHNjOwotI2RlZmluZSBUU0NfQkFTRSAxCi0jZGVm aW5lIFRTQ19BVVggMgotfTsKLQotc3RhdGljIGludCBwcml2X29wX2luc25fZmV0Y2goZW51bSB4 ODZfc2VnbWVudCBzZWcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBs b25nIG9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnBfZGF0YSwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBieXRlcywKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KQot ewotICAgIGNvbnN0IHN0cnVjdCBwcml2X29wX2N0eHQgKnBvYyA9Ci0gICAgICAgIGNvbnRhaW5l cl9vZihjdHh0LCBzdHJ1Y3QgcHJpdl9vcF9jdHh0LCBjdHh0KTsKLSAgICB1bnNpZ25lZCBpbnQg cmM7Ci0gICAgdW5zaWduZWQgbG9uZyBhZGRyID0gcG9jLT5jcy5iYXNlICsgb2Zmc2V0OwotCi0g ICAgQVNTRVJUKHNlZyA9PSB4ODZfc2VnX2NzKTsKLQotICAgIC8qIFdlIGRvbid0IG1lYW4gdG8g ZW11bGF0ZSBhbnkgYnJhbmNoZXMuICovCi0gICAgaWYgKCAhYnl0ZXMgKQotICAgICAgICByZXR1 cm4gWDg2RU1VTF9VTkhBTkRMRUFCTEU7Ci0KLSAgICByYyA9IHB2X2VtdWxfdmlydF90b19saW5l YXIocG9jLT5jcy5iYXNlLCBvZmZzZXQsIGJ5dGVzLCBwb2MtPmNzLmxpbWl0LAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB4ODZfc2VnX2NzLCBjdHh0LCAmYWRkcik7Ci0gICAgaWYg KCByYyAhPSBYODZFTVVMX09LQVkgKQotICAgICAgICByZXR1cm4gcmM7Ci0KLSAgICBpZiAoIChy YyA9IF9fY29weV9mcm9tX3VzZXIocF9kYXRhLCAodm9pZCAqKWFkZHIsIGJ5dGVzKSkgIT0gMCAp Ci0gICAgewotICAgICAgICAvKgotICAgICAgICAgKiBUT0RPOiBUaGlzIHNob3VsZCByZXBvcnQg UEZFQ19pbnNuX2ZldGNoIHdoZW4gZ29jLT5pbnNuX2ZldGNoICYmCi0gICAgICAgICAqIGNwdV9o YXNfbngsIGJ1dCB3ZSdkIHRoZW4gbmVlZCBhICJmZXRjaCIgdmFyaWFudCBvZgotICAgICAgICAg KiBfX2NvcHlfZnJvbV91c2VyKCkgcmVzcGVjdGluZyBOWCwgU01FUCwgYW5kIHByb3RlY3Rpb24g a2V5cy4KLSAgICAgICAgICovCi0gICAgICAgIHg4Nl9lbXVsX3BhZ2VmYXVsdCgwLCBhZGRyICsg Ynl0ZXMgLSByYywgY3R4dCk7Ci0gICAgICAgIHJldHVybiBYODZFTVVMX0VYQ0VQVElPTjsKLSAg ICB9Ci0KLSAgICByZXR1cm4gWDg2RU1VTF9PS0FZOwotfQotCi1zdGF0aWMgaW50IHByaXZfb3Bf cmVhZF9zZWdtZW50KGVudW0geDg2X3NlZ21lbnQgc2VnLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzdHJ1Y3Qgc2VnbWVudF9yZWdpc3RlciAqcmVnLAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCkKLXsKLSAgICAv KiBDaGVjayBpZiB0aGlzIGlzIGFuIGF0dGVtcHQgdG8gYWNjZXNzIHRoZSBJL08gYml0bWFwLiAq LwotICAgIGlmICggc2VnID09IHg4Nl9zZWdfdHIgKQotICAgIHsKLSAgICAgICAgc3dpdGNoICgg Y3R4dC0+b3Bjb2RlICkKLSAgICAgICAgewotICAgICAgICBjYXNlIDB4NmMgLi4uIDB4NmY6IC8q IGlucyAvIG91dHMgKi8KLSAgICAgICAgY2FzZSAweGU0IC4uLiAweGU3OiAvKiBpbiAvIG91dCAo aW1tZWRpYXRlIHBvcnQpICovCi0gICAgICAgIGNhc2UgMHhlYyAuLi4gMHhlZjogLyogaW4gLyBv dXQgKHBvcnQgaW4gJWR4KSAqLwotICAgICAgICAgICAgLyogRGVmZXIgdGhlIGNoZWNrIHRvIHBy aXZfb3Bfe3JlYWQsd3JpdGV9X2lvKCkuICovCi0gICAgICAgICAgICByZXR1cm4gWDg2RU1VTF9E T05FOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKCBjdHh0LT5hZGRyX3NpemUgPCA2NCAp Ci0gICAgewotICAgICAgICB1bnNpZ25lZCBsb25nIGxpbWl0OwotICAgICAgICB1bnNpZ25lZCBp bnQgc2VsLCBhcjsKLQotICAgICAgICBzd2l0Y2ggKCBzZWcgKQotICAgICAgICB7Ci0gICAgICAg IGNhc2UgeDg2X3NlZ19jczogc2VsID0gY3R4dC0+cmVncy0+Y3M7IGJyZWFrOwotICAgICAgICBj YXNlIHg4Nl9zZWdfZHM6IHNlbCA9IHJlYWRfc3JlZyhkcyk7ICBicmVhazsKLSAgICAgICAgY2Fz ZSB4ODZfc2VnX2VzOiBzZWwgPSByZWFkX3NyZWcoZXMpOyAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug eDg2X3NlZ19mczogc2VsID0gcmVhZF9zcmVnKGZzKTsgIGJyZWFrOwotICAgICAgICBjYXNlIHg4 Nl9zZWdfZ3M6IHNlbCA9IHJlYWRfc3JlZyhncyk7ICBicmVhazsKLSAgICAgICAgY2FzZSB4ODZf c2VnX3NzOiBzZWwgPSBjdHh0LT5yZWdzLT5zczsgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6IHJl dHVybiBYODZFTVVMX1VOSEFORExFQUJMRTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICggIXB2 X2VtdWxfcmVhZF9kZXNjcmlwdG9yKHNlbCwgY3VycmVudCwgJnJlZy0+YmFzZSwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmxpbWl0LCAmYXIsIDApICkKLSAgICAgICAg ICAgIHJldHVybiBYODZFTVVMX1VOSEFORExFQUJMRTsKLQotICAgICAgICByZWctPmxpbWl0ID0g bGltaXQ7Ci0gICAgICAgIHJlZy0+YXR0ci5ieXRlcyA9IGFyID4+IDg7Ci0gICAgfQotICAgIGVs c2UKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoIHNlZyApCi0gICAgICAgIHsKLSAgICAgICAgZGVm YXVsdDoKLSAgICAgICAgICAgIGlmICggIWlzX3g4Nl91c2VyX3NlZ21lbnQoc2VnKSApCi0gICAg ICAgICAgICAgICAgcmV0dXJuIFg4NkVNVUxfVU5IQU5ETEVBQkxFOwotICAgICAgICAgICAgcmVn LT5iYXNlID0gMDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIHg4Nl9zZWdfZnM6 Ci0gICAgICAgICAgICByZWctPmJhc2UgPSByZGZzYmFzZSgpOwotICAgICAgICAgICAgYnJlYWs7 Ci0gICAgICAgIGNhc2UgeDg2X3NlZ19nczoKLSAgICAgICAgICAgIHJlZy0+YmFzZSA9IHJkZ3Ni YXNlKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIHJlZy0+bGlt aXQgPSB+MFU7Ci0KLSAgICAgICAgcmVnLT5hdHRyLmJ5dGVzID0gMDsKLSAgICAgICAgcmVnLT5h dHRyLmZpZWxkcy50eXBlID0gX1NFR01FTlRfV1IgPj4gODsKLSAgICAgICAgaWYgKCBzZWcgPT0g eDg2X3NlZ19jcyApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJlZy0+YXR0ci5maWVsZHMudHlw ZSB8PSBfU0VHTUVOVF9DT0RFID4+IDg7Ci0gICAgICAgICAgICByZWctPmF0dHIuZmllbGRzLmwg PSAxOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJlZy0+YXR0ci5maWVs ZHMuZGIgPSAxOwotICAgICAgICByZWctPmF0dHIuZmllbGRzLnMgICA9IDE7Ci0gICAgICAgIHJl Zy0+YXR0ci5maWVsZHMuZHBsID0gMzsKLSAgICAgICAgcmVnLT5hdHRyLmZpZWxkcy5wICAgPSAx OwotICAgICAgICByZWctPmF0dHIuZmllbGRzLmcgICA9IDE7Ci0gICAgfQotCi0gICAgLyoKLSAg ICAgKiBGb3IgeDg2X2VtdWxhdGUuYydzIG1vZGVfcmluZzAoKSB0byB3b3JrLCBmYWtlIGEgRFBM IG9mIHplcm8uCi0gICAgICogQWxzbyBkbyB0aGlzIGZvciBjb25zaXN0ZW5jeSBmb3Igbm9uLWNv bmZvcm1pbmcgY29kZSBzZWdtZW50cy4KLSAgICAgKi8KLSAgICBpZiAoIChzZWcgPT0geDg2X3Nl Z19zcyB8fAotICAgICAgICAgIChzZWcgPT0geDg2X3NlZ19jcyAmJgotICAgICAgICAgICAhKHJl Zy0+YXR0ci5maWVsZHMudHlwZSAmIChfU0VHTUVOVF9FQyA+PiA4KSkpKSAmJgotICAgICAgICAg Z3Vlc3Rfa2VybmVsX21vZGUoY3VycmVudCwgY3R4dC0+cmVncykgKQotICAgICAgICByZWctPmF0 dHIuZmllbGRzLmRwbCA9IDA7Ci0KLSAgICByZXR1cm4gWDg2RU1VTF9PS0FZOwotfQotCi0vKiBQ ZXJmb3JtIElPUEwgY2hlY2sgYmV0d2VlbiB0aGUgdmNwdSdzIHNoYWRvd2VkIElPUEwsIGFuZCB0 aGUgYXNzdW1lZCBjcGwuICovCi1zdGF0aWMgYm9vbF90IGlvcGxfb2soY29uc3Qgc3RydWN0IHZj cHUgKnYsIGNvbnN0IHN0cnVjdCBjcHVfdXNlcl9yZWdzICpyZWdzKQotewotICAgIHVuc2lnbmVk IGludCBjcGwgPSBndWVzdF9rZXJuZWxfbW9kZSh2LCByZWdzKSA/Ci0gICAgICAgIChWTV9BU1NJ U1Qodi0+ZG9tYWluLCBhcmNoaXRlY3R1cmFsX2lvcGwpID8gMCA6IDEpIDogMzsKLQotICAgIEFT U0VSVCgodi0+YXJjaC5wdl92Y3B1LmlvcGwgJiB+WDg2X0VGTEFHU19JT1BMKSA9PSAwKTsKLQot ICAgIHJldHVybiBJT1BMKGNwbCkgPD0gdi0+YXJjaC5wdl92Y3B1LmlvcGw7Ci19Ci0KLS8qIEhh cyB0aGUgZ3Vlc3QgcmVxdWVzdGVkIHN1ZmZpY2llbnQgcGVybWlzc2lvbiBmb3IgdGhpcyBJL08g YWNjZXNzPyAqLwotc3RhdGljIGludCBndWVzdF9pb19va2F5KAotICAgIHVuc2lnbmVkIGludCBw b3J0LCB1bnNpZ25lZCBpbnQgYnl0ZXMsCi0gICAgc3RydWN0IHZjcHUgKnYsIHN0cnVjdCBjcHVf dXNlcl9yZWdzICpyZWdzKQotewotICAgIC8qIElmIGluIHVzZXIgbW9kZSwgc3dpdGNoIHRvIGtl cm5lbCBtb2RlIGp1c3QgdG8gcmVhZCBJL08gYml0bWFwLiAqLwotICAgIGludCB1c2VyX21vZGUg PSAhKHYtPmFyY2guZmxhZ3MgJiBURl9rZXJuZWxfbW9kZSk7Ci0jZGVmaW5lIFRPR0dMRV9NT0RF KCkgaWYgKCB1c2VyX21vZGUgKSB0b2dnbGVfZ3Vlc3RfbW9kZSh2KQotCi0gICAgaWYgKCBpb3Bs X29rKHYsIHJlZ3MpICkKLSAgICAgICAgcmV0dXJuIDE7Ci0KLSAgICBpZiAoIHYtPmFyY2gucHZf dmNwdS5pb2JtcF9saW1pdCA+IChwb3J0ICsgYnl0ZXMpICkKLSAgICB7Ci0gICAgICAgIHVuaW9u IHsgdWludDhfdCBieXRlc1syXTsgdWludDE2X3QgbWFzazsgfSB4OwotCi0gICAgICAgIC8qCi0g ICAgICAgICAqIEdyYWIgcGVybWlzc2lvbiBieXRlcyBmcm9tIGd1ZXN0IHNwYWNlLiBJbmFjY2Vz c2libGUgYnl0ZXMgYXJlCi0gICAgICAgICAqIHJlYWQgYXMgMHhmZiAobm8gYWNjZXNzIGFsbG93 ZWQpLgotICAgICAgICAgKi8KLSAgICAgICAgVE9HR0xFX01PREUoKTsKLSAgICAgICAgc3dpdGNo ICggX19jb3B5X2Zyb21fZ3Vlc3Rfb2Zmc2V0KHguYnl0ZXMsIHYtPmFyY2gucHZfdmNwdS5pb2Jt cCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnQ+PjMsIDIp ICkKLSAgICAgICAgewotICAgICAgICBkZWZhdWx0OiB4LmJ5dGVzWzBdID0gfjA7Ci0gICAgICAg ICAgICAvKiBmYWxsdGhyb3VnaCAqLwotICAgICAgICBjYXNlIDE6ICB4LmJ5dGVzWzFdID0gfjA7 Ci0gICAgICAgICAgICAvKiBmYWxsdGhyb3VnaCAqLwotICAgICAgICBjYXNlIDA6ICBicmVhazsK LSAgICAgICAgfQotICAgICAgICBUT0dHTEVfTU9ERSgpOwotCi0gICAgICAgIGlmICggKHgubWFz ayAmICgoKDE8PGJ5dGVzKS0xKSA8PCAocG9ydCY3KSkpID09IDAgKQotICAgICAgICAgICAgcmV0 dXJuIDE7Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLS8qIEhhcyB0aGUgYWRtaW5pc3Ry YXRvciBncmFudGVkIHN1ZmZpY2llbnQgcGVybWlzc2lvbiBmb3IgdGhpcyBJL08gYWNjZXNzPyAq Lwotc3RhdGljIGJvb2xfdCBhZG1pbl9pb19va2F5KHVuc2lnbmVkIGludCBwb3J0LCB1bnNpZ25l ZCBpbnQgYnl0ZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IGRv bWFpbiAqZCkKLXsKLSAgICAvKgotICAgICAqIFBvcnQgMHhjZjggKENPTkZJR19BRERSRVNTKSBp cyBvbmx5IHZpc2libGUgZm9yIERXT1JEIGFjY2Vzc2VzLgotICAgICAqIFdlIG5ldmVyIHBlcm1p dCBkaXJlY3QgYWNjZXNzIHRvIHRoYXQgcmVnaXN0ZXIuCi0gICAgICovCi0gICAgaWYgKCAocG9y dCA9PSAweGNmOCkgJiYgKGJ5dGVzID09IDQpICkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAv KiBXZSBhbHNvIG5ldmVyIHBlcm1pdCBkaXJlY3QgYWNjZXNzIHRvIHRoZSBSVEMvQ01PUyByZWdp c3RlcnMuICovCi0gICAgaWYgKCAoKHBvcnQgJiB+MSkgPT0gUlRDX1BPUlQoMCkpICkKLSAgICAg ICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gaW9wb3J0c19hY2Nlc3NfcGVybWl0dGVkKGQsIHBv cnQsIHBvcnQgKyBieXRlcyAtIDEpOwotfQotCi1zdGF0aWMgYm9vbF90IHBjaV9jZmdfb2soc3Ry dWN0IGRvbWFpbiAqY3VycmQsIHVuc2lnbmVkIGludCBzdGFydCwKLSAgICAgICAgICAgICAgICAg ICAgICAgICB1bnNpZ25lZCBpbnQgc2l6ZSwgdWludDMyX3QgKndyaXRlKQotewotICAgIHVpbnQz Ml90IG1hY2hpbmVfYmRmOwotCi0gICAgaWYgKCAhaXNfaGFyZHdhcmVfZG9tYWluKGN1cnJkKSAp Ci0gICAgICAgIHJldHVybiAwOwotCi0gICAgaWYgKCAhQ0Y4X0VOQUJMRUQoY3VycmQtPmFyY2gu cGNpX2NmOCkgKQotICAgICAgICByZXR1cm4gMTsKLQotICAgIG1hY2hpbmVfYmRmID0gQ0Y4X0JE RihjdXJyZC0+YXJjaC5wY2lfY2Y4KTsKLSAgICBpZiAoIHdyaXRlICkKLSAgICB7Ci0gICAgICAg IGNvbnN0IHVuc2lnbmVkIGxvbmcgKnJvX21hcCA9IHBjaV9nZXRfcm9fbWFwKDApOwotCi0gICAg ICAgIGlmICggcm9fbWFwICYmIHRlc3RfYml0KG1hY2hpbmVfYmRmLCByb19tYXApICkKLSAgICAg ICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICBzdGFydCB8PSBDRjhfQUREUl9MTyhjdXJyZC0+ YXJjaC5wY2lfY2Y4KTsKLSAgICAvKiBBTUQgZXh0ZW5kZWQgY29uZmlndXJhdGlvbiBzcGFjZSBh Y2Nlc3M/ICovCi0gICAgaWYgKCBDRjhfQUREUl9ISShjdXJyZC0+YXJjaC5wY2lfY2Y4KSAmJgot ICAgICAgICAgYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yID09IFg4Nl9WRU5ET1JfQU1EICYmCi0g ICAgICAgICBib290X2NwdV9kYXRhLng4NiA+PSAweDEwICYmIGJvb3RfY3B1X2RhdGEueDg2IDw9 IDB4MTcgKQotICAgIHsKLSAgICAgICAgdWludDY0X3QgbXNyX3ZhbDsKLQotICAgICAgICBpZiAo IHJkbXNyX3NhZmUoTVNSX0FNRDY0X05CX0NGRywgbXNyX3ZhbCkgKQotICAgICAgICAgICAgcmV0 dXJuIDA7Ci0gICAgICAgIGlmICggbXNyX3ZhbCAmICgxVUxMIDw8IEFNRDY0X05CX0NGR19DRjhf RVhUX0VOQUJMRV9CSVQpICkKLSAgICAgICAgICAgIHN0YXJ0IHw9IENGOF9BRERSX0hJKGN1cnJk LT5hcmNoLnBjaV9jZjgpOwotICAgIH0KLQotICAgIHJldHVybiAhd3JpdGUgPwotICAgICAgICAg ICB4c21fcGNpX2NvbmZpZ19wZXJtaXNzaW9uKFhTTV9IT09LLCBjdXJyZCwgbWFjaGluZV9iZGYs Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQsIHN0YXJ0ICsgc2l6 ZSAtIDEsIDApID09IDAgOgotICAgICAgICAgICBwY2lfY29uZl93cml0ZV9pbnRlcmNlcHQoMCwg bWFjaGluZV9iZGYsIHN0YXJ0LCBzaXplLCB3cml0ZSkgPj0gMDsKLX0KLQotdWludDMyX3QgZ3Vl c3RfaW9fcmVhZCh1bnNpZ25lZCBpbnQgcG9ydCwgdW5zaWduZWQgaW50IGJ5dGVzLAotICAgICAg ICAgICAgICAgICAgICAgICBzdHJ1Y3QgZG9tYWluICpjdXJyZCkKLXsKLSAgICB1aW50MzJfdCBk YXRhID0gMDsKLSAgICB1bnNpZ25lZCBpbnQgc2hpZnQgPSAwOwotCi0gICAgaWYgKCBhZG1pbl9p b19va2F5KHBvcnQsIGJ5dGVzLCBjdXJyZCkgKQotICAgIHsKLSAgICAgICAgc3dpdGNoICggYnl0 ZXMgKQotICAgICAgICB7Ci0gICAgICAgIGNhc2UgMTogcmV0dXJuIGluYihwb3J0KTsKLSAgICAg ICAgY2FzZSAyOiByZXR1cm4gaW53KHBvcnQpOwotICAgICAgICBjYXNlIDQ6IHJldHVybiBpbmwo cG9ydCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB3aGlsZSAoIGJ5dGVzICE9IDAgKQotICAg IHsKLSAgICAgICAgdW5zaWduZWQgaW50IHNpemUgPSAxOwotICAgICAgICB1aW50MzJfdCBzdWJf ZGF0YSA9IH4wOwotCi0gICAgICAgIGlmICggKHBvcnQgPT0gMHg0MikgfHwgKHBvcnQgPT0gMHg0 MykgfHwgKHBvcnQgPT0gMHg2MSkgKQotICAgICAgICB7Ci0gICAgICAgICAgICBzdWJfZGF0YSA9 IHB2X3BpdF9oYW5kbGVyKHBvcnQsIDAsIDApOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYg KCBwb3J0ID09IFJUQ19QT1JUKDApICkKLSAgICAgICAgewotICAgICAgICAgICAgc3ViX2RhdGEg PSBjdXJyZC0+YXJjaC5jbW9zX2lkeDsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmICggKHBv cnQgPT0gUlRDX1BPUlQoMSkpICYmCi0gICAgICAgICAgICAgICAgICBpb3BvcnRzX2FjY2Vzc19w ZXJtaXR0ZWQoY3VycmQsIFJUQ19QT1JUKDApLCBSVENfUE9SVCgxKSkgKQotICAgICAgICB7Ci0g ICAgICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0gICAgICAgICAgICBzcGluX2xvY2tf aXJxc2F2ZSgmcnRjX2xvY2ssIGZsYWdzKTsKLSAgICAgICAgICAgIG91dGIoY3VycmQtPmFyY2gu Y21vc19pZHggJiAweDdmLCBSVENfUE9SVCgwKSk7Ci0gICAgICAgICAgICBzdWJfZGF0YSA9IGlu YihSVENfUE9SVCgxKSk7Ci0gICAgICAgICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZydGNf bG9jaywgZmxhZ3MpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKCAocG9ydCA9PSAweGNm OCkgJiYgKGJ5dGVzID09IDQpICkKLSAgICAgICAgewotICAgICAgICAgICAgc2l6ZSA9IDQ7Ci0g ICAgICAgICAgICBzdWJfZGF0YSA9IGN1cnJkLT5hcmNoLnBjaV9jZjg7Ci0gICAgICAgIH0KLSAg ICAgICAgZWxzZSBpZiAoIChwb3J0ICYgMHhmZmZjKSA9PSAweGNmYyApCi0gICAgICAgIHsKLSAg ICAgICAgICAgIHNpemUgPSBtaW4oYnl0ZXMsIDQgLSAocG9ydCAmIDMpKTsKLSAgICAgICAgICAg IGlmICggc2l6ZSA9PSAzICkKLSAgICAgICAgICAgICAgICBzaXplID0gMjsKLSAgICAgICAgICAg IGlmICggcGNpX2NmZ19vayhjdXJyZCwgcG9ydCAmIDMsIHNpemUsIE5VTEwpICkKLSAgICAgICAg ICAgICAgICBzdWJfZGF0YSA9IHBjaV9jb25mX3JlYWQoY3VycmQtPmFyY2gucGNpX2NmOCwgcG9y dCAmIDMsIHNpemUpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCBzaXplID09IDQgKQotICAg ICAgICAgICAgcmV0dXJuIHN1Yl9kYXRhOwotCi0gICAgICAgIGRhdGEgfD0gKHN1Yl9kYXRhICYg KCgxdSA8PCAoc2l6ZSAqIDgpKSAtIDEpKSA8PCBzaGlmdDsKLSAgICAgICAgc2hpZnQgKz0gc2l6 ZSAqIDg7Ci0gICAgICAgIHBvcnQgKz0gc2l6ZTsKLSAgICAgICAgYnl0ZXMgLT0gc2l6ZTsKLSAg ICB9Ci0KLSAgICByZXR1cm4gZGF0YTsKLX0KLQotdm9pZCBndWVzdF9pb193cml0ZSh1bnNpZ25l ZCBpbnQgcG9ydCwgdW5zaWduZWQgaW50IGJ5dGVzLCB1aW50MzJfdCBkYXRhLAotICAgICAgICAg ICAgICAgICAgICBzdHJ1Y3QgZG9tYWluICpjdXJyZCkKLXsKLSAgICBpZiAoIGFkbWluX2lvX29r YXkocG9ydCwgYnl0ZXMsIGN1cnJkKSApCi0gICAgewotICAgICAgICBzd2l0Y2ggKCBieXRlcyAp IHsKLSAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAgb3V0YigodWludDhfdClkYXRhLCBwb3J0 KTsKLSAgICAgICAgICAgIGlmICggcHZfcG9zdF9vdXRiX2hvb2sgKQotICAgICAgICAgICAgICAg IHB2X3Bvc3Rfb3V0Yl9ob29rKHBvcnQsICh1aW50OF90KWRhdGEpOwotICAgICAgICAgICAgYnJl YWs7Ci0gICAgICAgIGNhc2UgMjoKLSAgICAgICAgICAgIG91dHcoKHVpbnQxNl90KWRhdGEsIHBv cnQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgNDoKLSAgICAgICAgICAgIG91 dGwoZGF0YSwgcG9ydCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBy ZXR1cm47Ci0gICAgfQotCi0gICAgd2hpbGUgKCBieXRlcyAhPSAwICkKLSAgICB7Ci0gICAgICAg IHVuc2lnbmVkIGludCBzaXplID0gMTsKLQotICAgICAgICBpZiAoIChwb3J0ID09IDB4NDIpIHx8 IChwb3J0ID09IDB4NDMpIHx8IChwb3J0ID09IDB4NjEpICkKLSAgICAgICAgewotICAgICAgICAg ICAgcHZfcGl0X2hhbmRsZXIocG9ydCwgKHVpbnQ4X3QpZGF0YSwgMSk7Ci0gICAgICAgIH0KLSAg ICAgICAgZWxzZSBpZiAoIHBvcnQgPT0gUlRDX1BPUlQoMCkgKQotICAgICAgICB7Ci0gICAgICAg ICAgICBjdXJyZC0+YXJjaC5jbW9zX2lkeCA9IGRhdGE7Ci0gICAgICAgIH0KLSAgICAgICAgZWxz ZSBpZiAoIChwb3J0ID09IFJUQ19QT1JUKDEpKSAmJgotICAgICAgICAgICAgICAgICAgaW9wb3J0 c19hY2Nlc3NfcGVybWl0dGVkKGN1cnJkLCBSVENfUE9SVCgwKSwgUlRDX1BPUlQoMSkpICkKLSAg ICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKLQotICAgICAgICAgICAg aWYgKCBwdl9ydGNfaGFuZGxlciApCi0gICAgICAgICAgICAgICAgcHZfcnRjX2hhbmRsZXIoY3Vy cmQtPmFyY2guY21vc19pZHggJiAweDdmLCBkYXRhKTsKLSAgICAgICAgICAgIHNwaW5fbG9ja19p cnFzYXZlKCZydGNfbG9jaywgZmxhZ3MpOwotICAgICAgICAgICAgb3V0YihjdXJyZC0+YXJjaC5j bW9zX2lkeCAmIDB4N2YsIFJUQ19QT1JUKDApKTsKLSAgICAgICAgICAgIG91dGIoZGF0YSwgUlRD X1BPUlQoMSkpOwotICAgICAgICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnRjX2xvY2ss IGZsYWdzKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmICggKHBvcnQgPT0gMHhjZjgpICYm IChieXRlcyA9PSA0KSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHNpemUgPSA0OwotICAgICAg ICAgICAgY3VycmQtPmFyY2gucGNpX2NmOCA9IGRhdGE7Ci0gICAgICAgIH0KLSAgICAgICAgZWxz ZSBpZiAoIChwb3J0ICYgMHhmZmZjKSA9PSAweGNmYyApCi0gICAgICAgIHsKLSAgICAgICAgICAg IHNpemUgPSBtaW4oYnl0ZXMsIDQgLSAocG9ydCAmIDMpKTsKLSAgICAgICAgICAgIGlmICggc2l6 ZSA9PSAzICkKLSAgICAgICAgICAgICAgICBzaXplID0gMjsKLSAgICAgICAgICAgIGlmICggcGNp X2NmZ19vayhjdXJyZCwgcG9ydCAmIDMsIHNpemUsICZkYXRhKSApCi0gICAgICAgICAgICAgICAg cGNpX2NvbmZfd3JpdGUoY3VycmQtPmFyY2gucGNpX2NmOCwgcG9ydCAmIDMsIHNpemUsIGRhdGEp OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCBzaXplID09IDQgKQotICAgICAgICAgICAgcmV0 dXJuOwotCi0gICAgICAgIHBvcnQgKz0gc2l6ZTsKLSAgICAgICAgYnl0ZXMgLT0gc2l6ZTsKLSAg ICAgICAgZGF0YSA+Pj0gc2l6ZSAqIDg7Ci0gICAgfQotfQotCi0vKiBJL08gZW11bGF0aW9uIHN1 cHBvcnQuIEhlbHBlciByb3V0aW5lcyBmb3IsIGFuZCB0eXBlIG9mLCB0aGUgc3RhY2sgc3R1Yi4q Lwotdm9pZCBob3N0X3RvX2d1ZXN0X2dwcl9zd2l0Y2goc3RydWN0IGNwdV91c2VyX3JlZ3MgKik7 Ci11bnNpZ25lZCBsb25nIGd1ZXN0X3RvX2hvc3RfZ3ByX3N3aXRjaCh1bnNpZ25lZCBsb25nKTsK LQotdm9pZCAoKnB2X3Bvc3Rfb3V0Yl9ob29rKSh1bnNpZ25lZCBpbnQgcG9ydCwgdTggdmFsdWUp OwotCi10eXBlZGVmIHZvaWQgaW9fZW11bF9zdHViX3Qoc3RydWN0IGNwdV91c2VyX3JlZ3MgKik7 Ci0KLXN0YXRpYyBpb19lbXVsX3N0dWJfdCAqaW9fZW11bF9zdHViX3NldHVwKHN0cnVjdCBwcml2 X29wX2N0eHQgKmN0eHQsIHU4IG9wY29kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHVuc2lnbmVkIGludCBwb3J0LCB1bnNpZ25lZCBpbnQgYnl0ZXMpCi17Ci0g ICAgaWYgKCAhY3R4dC0+aW9fZW11bF9zdHViICkKLSAgICAgICAgY3R4dC0+aW9fZW11bF9zdHVi ID0gbWFwX2RvbWFpbl9wYWdlKF9tZm4odGhpc19jcHUoc3R1YnMubWZuKSkpICsKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0aGlzX2NwdShzdHVicy5hZGRy KSAmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgflBBR0Vf TUFTSykgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1RV Ql9CVUZfU0laRSAvIDI7Ci0KLSAgICAvKiBtb3ZxICRob3N0X3RvX2d1ZXN0X2dwcl9zd2l0Y2gs JXJjeCAqLwotICAgIGN0eHQtPmlvX2VtdWxfc3R1YlswXSA9IDB4NDg7Ci0gICAgY3R4dC0+aW9f ZW11bF9zdHViWzFdID0gMHhiOTsKLSAgICAqKHZvaWQgKiopJmN0eHQtPmlvX2VtdWxfc3R1Ylsy XSA9ICh2b2lkICopaG9zdF90b19ndWVzdF9ncHJfc3dpdGNoOwotICAgIC8qIGNhbGxxIColcmN4 ICovCi0gICAgY3R4dC0+aW9fZW11bF9zdHViWzEwXSA9IDB4ZmY7Ci0gICAgY3R4dC0+aW9fZW11 bF9zdHViWzExXSA9IDB4ZDE7Ci0gICAgLyogZGF0YTE2IG9yIG5vcCAqLwotICAgIGN0eHQtPmlv X2VtdWxfc3R1YlsxMl0gPSAoYnl0ZXMgIT0gMikgPyAweDkwIDogMHg2NjsKLSAgICAvKiA8aW8t YWNjZXNzIG9wY29kZT4gKi8KLSAgICBjdHh0LT5pb19lbXVsX3N0dWJbMTNdID0gb3Bjb2RlOwot ICAgIC8qIGltbTggb3Igbm9wICovCi0gICAgY3R4dC0+aW9fZW11bF9zdHViWzE0XSA9ICEob3Bj b2RlICYgOCkgPyBwb3J0IDogMHg5MDsKLSAgICAvKiByZXQgKGp1bXBzIHRvIGd1ZXN0X3RvX2hv c3RfZ3ByX3N3aXRjaCkgKi8KLSAgICBjdHh0LT5pb19lbXVsX3N0dWJbMTVdID0gMHhjMzsKLSAg ICBCVUlMRF9CVUdfT04oU1RVQl9CVUZfU0laRSAvIDIgPCAxNik7Ci0KLSAgICBpZiAoIGlvZW11 bF9oYW5kbGVfcXVpcmsgKQotICAgICAgICBpb2VtdWxfaGFuZGxlX3F1aXJrKG9wY29kZSwgJmN0 eHQtPmlvX2VtdWxfc3R1YlsxMl0sIGN0eHQtPmN0eHQucmVncyk7Ci0KLSAgICAvKiBIYW5keSBm dW5jdGlvbi10eXBlZCBwb2ludGVyIHRvIHRoZSBzdHViLiAqLwotICAgIHJldHVybiAodm9pZCAq KSh0aGlzX2NwdShzdHVicy5hZGRyKSArIFNUVUJfQlVGX1NJWkUgLyAyKTsKLX0KLQotc3RhdGlj IGludCBwcml2X29wX3JlYWRfaW8odW5zaWduZWQgaW50IHBvcnQsIHVuc2lnbmVkIGludCBieXRl cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgKnZhbCwgc3RydWN0 IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpCi17Ci0gICAgc3RydWN0IHByaXZfb3BfY3R4dCAqcG9j ID0gY29udGFpbmVyX29mKGN0eHQsIHN0cnVjdCBwcml2X29wX2N0eHQsIGN0eHQpOwotICAgIHN0 cnVjdCB2Y3B1ICpjdXJyID0gY3VycmVudDsKLSAgICBzdHJ1Y3QgZG9tYWluICpjdXJyZCA9IGN1 cnJlbnQtPmRvbWFpbjsKLQotICAgIC8qIElOUyBtdXN0IG5vdCBjb21lIGhlcmUuICovCi0gICAg QVNTRVJUKChjdHh0LT5vcGNvZGUgJiB+OSkgPT0gMHhlNCk7Ci0KLSAgICBpZiAoICFndWVzdF9p b19va2F5KHBvcnQsIGJ5dGVzLCBjdXJyLCBjdHh0LT5yZWdzKSApCi0gICAgICAgIHJldHVybiBY ODZFTVVMX1VOSEFORExFQUJMRTsKLQotICAgIHBvYy0+YnBtYXRjaCA9IGNoZWNrX2d1ZXN0X2lv X2JyZWFrcG9pbnQoY3VyciwgcG9ydCwgYnl0ZXMpOwotCi0gICAgaWYgKCBhZG1pbl9pb19va2F5 KHBvcnQsIGJ5dGVzLCBjdXJyZCkgKQotICAgIHsKLSAgICAgICAgaW9fZW11bF9zdHViX3QgKmlv X2VtdWwgPQotICAgICAgICAgICAgaW9fZW11bF9zdHViX3NldHVwKHBvYywgY3R4dC0+b3Bjb2Rl LCBwb3J0LCBieXRlcyk7Ci0KLSAgICAgICAgbWFya19yZWdzX2RpcnR5KGN0eHQtPnJlZ3MpOwot ICAgICAgICBpb19lbXVsKGN0eHQtPnJlZ3MpOwotICAgICAgICByZXR1cm4gWDg2RU1VTF9ET05F OwotICAgIH0KLQotICAgICp2YWwgPSBndWVzdF9pb19yZWFkKHBvcnQsIGJ5dGVzLCBjdXJyZCk7 Ci0KLSAgICByZXR1cm4gWDg2RU1VTF9PS0FZOwotfQotCi1zdGF0aWMgaW50IHByaXZfb3Bfd3Jp dGVfaW8odW5zaWduZWQgaW50IHBvcnQsIHVuc2lnbmVkIGludCBieXRlcywKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHZhbCwgc3RydWN0IHg4Nl9lbXVsYXRlX2N0 eHQgKmN0eHQpCi17Ci0gICAgc3RydWN0IHByaXZfb3BfY3R4dCAqcG9jID0gY29udGFpbmVyX29m KGN0eHQsIHN0cnVjdCBwcml2X29wX2N0eHQsIGN0eHQpOwotICAgIHN0cnVjdCB2Y3B1ICpjdXJy ID0gY3VycmVudDsKLSAgICBzdHJ1Y3QgZG9tYWluICpjdXJyZCA9IGN1cnJlbnQtPmRvbWFpbjsK LQotICAgIC8qIE9VVFMgbXVzdCBub3QgY29tZSBoZXJlLiAqLwotICAgIEFTU0VSVCgoY3R4dC0+ b3Bjb2RlICYgfjkpID09IDB4ZTYpOwotCi0gICAgaWYgKCAhZ3Vlc3RfaW9fb2theShwb3J0LCBi eXRlcywgY3VyciwgY3R4dC0+cmVncykgKQotICAgICAgICByZXR1cm4gWDg2RU1VTF9VTkhBTkRM RUFCTEU7Ci0KLSAgICBwb2MtPmJwbWF0Y2ggPSBjaGVja19ndWVzdF9pb19icmVha3BvaW50KGN1 cnIsIHBvcnQsIGJ5dGVzKTsKLQotICAgIGlmICggYWRtaW5faW9fb2theShwb3J0LCBieXRlcywg Y3VycmQpICkKLSAgICB7Ci0gICAgICAgIGlvX2VtdWxfc3R1Yl90ICppb19lbXVsID0KLSAgICAg ICAgICAgIGlvX2VtdWxfc3R1Yl9zZXR1cChwb2MsIGN0eHQtPm9wY29kZSwgcG9ydCwgYnl0ZXMp OwotCi0gICAgICAgIG1hcmtfcmVnc19kaXJ0eShjdHh0LT5yZWdzKTsKLSAgICAgICAgaW9fZW11 bChjdHh0LT5yZWdzKTsKLSAgICAgICAgaWYgKCAoYnl0ZXMgPT0gMSkgJiYgcHZfcG9zdF9vdXRi X2hvb2sgKQotICAgICAgICAgICAgcHZfcG9zdF9vdXRiX2hvb2socG9ydCwgdmFsKTsKLSAgICAg ICAgcmV0dXJuIFg4NkVNVUxfRE9ORTsKLSAgICB9Ci0KLSAgICBndWVzdF9pb193cml0ZShwb3J0 LCBieXRlcywgdmFsLCBjdXJyZCk7Ci0KLSAgICByZXR1cm4gWDg2RU1VTF9PS0FZOwotfQotCi1z dGF0aWMgaW50IHByaXZfb3BfcmVwX2lucyh1aW50MTZfdCBwb3J0LAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgZW51bSB4ODZfc2VnbWVudCBzZWcsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGJ5dGVzX3Blcl9yZXAsIHVu c2lnbmVkIGxvbmcgKnJlcHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgeDg2 X2VtdWxhdGVfY3R4dCAqY3R4dCkKLXsKLSAgICBzdHJ1Y3QgcHJpdl9vcF9jdHh0ICpwb2MgPSBj b250YWluZXJfb2YoY3R4dCwgc3RydWN0IHByaXZfb3BfY3R4dCwgY3R4dCk7Ci0gICAgc3RydWN0 IHZjcHUgKmN1cnIgPSBjdXJyZW50OwotICAgIHN0cnVjdCBkb21haW4gKmN1cnJkID0gY3VycmVu dC0+ZG9tYWluOwotICAgIHVuc2lnbmVkIGxvbmcgZ29hbCA9ICpyZXBzOwotICAgIHN0cnVjdCBz ZWdtZW50X3JlZ2lzdGVyIHNyZWc7Ci0gICAgaW50IHJjOwotCi0gICAgQVNTRVJUKHNlZyA9PSB4 ODZfc2VnX2VzKTsKLQotICAgICpyZXBzID0gMDsKLQotICAgIGlmICggIWd1ZXN0X2lvX29rYXko cG9ydCwgYnl0ZXNfcGVyX3JlcCwgY3VyciwgY3R4dC0+cmVncykgKQotICAgICAgICByZXR1cm4g WDg2RU1VTF9VTkhBTkRMRUFCTEU7Ci0KLSAgICByYyA9IHByaXZfb3BfcmVhZF9zZWdtZW50KHg4 Nl9zZWdfZXMsICZzcmVnLCBjdHh0KTsKLSAgICBpZiAoIHJjICE9IFg4NkVNVUxfT0tBWSApCi0g ICAgICAgIHJldHVybiByYzsKLQotICAgIGlmICggIXNyZWcuYXR0ci5maWVsZHMucCApCi0gICAg ICAgIHJldHVybiBYODZFTVVMX1VOSEFORExFQUJMRTsKLSAgICBpZiAoICFzcmVnLmF0dHIuZmll bGRzLnMgfHwKLSAgICAgICAgIChzcmVnLmF0dHIuZmllbGRzLnR5cGUgJiAoX1NFR01FTlRfQ09E RSA+PiA4KSkgfHwKLSAgICAgICAgICEoc3JlZy5hdHRyLmZpZWxkcy50eXBlICYgKF9TRUdNRU5U X1dSID4+IDgpKSApCi0gICAgewotICAgICAgICB4ODZfZW11bF9od19leGNlcHRpb24oVFJBUF9n cF9mYXVsdCwgMCwgY3R4dCk7Ci0gICAgICAgIHJldHVybiBYODZFTVVMX0VYQ0VQVElPTjsKLSAg ICB9Ci0KLSAgICBwb2MtPmJwbWF0Y2ggPSBjaGVja19ndWVzdF9pb19icmVha3BvaW50KGN1cnIs IHBvcnQsIGJ5dGVzX3Blcl9yZXApOwotCi0gICAgd2hpbGUgKCAqcmVwcyA8IGdvYWwgKQotICAg IHsKLSAgICAgICAgdW5zaWduZWQgaW50IGRhdGEgPSBndWVzdF9pb19yZWFkKHBvcnQsIGJ5dGVz X3Blcl9yZXAsIGN1cnJkKTsKLSAgICAgICAgdW5zaWduZWQgbG9uZyBhZGRyOwotCi0gICAgICAg IHJjID0gcHZfZW11bF92aXJ0X3RvX2xpbmVhcihzcmVnLmJhc2UsIG9mZnNldCwgYnl0ZXNfcGVy X3JlcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyZWcubGltaXQsIHg4 Nl9zZWdfZXMsIGN0eHQsICZhZGRyKTsKLSAgICAgICAgaWYgKCByYyAhPSBYODZFTVVMX09LQVkg KQotICAgICAgICAgICAgcmV0dXJuIHJjOwotCi0gICAgICAgIGlmICggKHJjID0gX19jb3B5X3Rv X3VzZXIoKHZvaWQgKilhZGRyLCAmZGF0YSwgYnl0ZXNfcGVyX3JlcCkpICE9IDAgKQotICAgICAg ICB7Ci0gICAgICAgICAgICB4ODZfZW11bF9wYWdlZmF1bHQoUEZFQ193cml0ZV9hY2Nlc3MsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkciArIGJ5dGVzX3Blcl9yZXAgLSByYywg Y3R4dCk7Ci0gICAgICAgICAgICByZXR1cm4gWDg2RU1VTF9FWENFUFRJT047Ci0gICAgICAgIH0K LQotICAgICAgICArKypyZXBzOwotCi0gICAgICAgIGlmICggcG9jLT5icG1hdGNoIHx8IGh5cGVy Y2FsbF9wcmVlbXB0X2NoZWNrKCkgKQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgLyog eDg2X2VtdWxhdGUoKSBjbGlwcyB0aGUgcmVwZXRpdGlvbiBjb3VudCB0byBlbnN1cmUgd2UgZG9u J3Qgd3JhcC4gKi8KLSAgICAgICAgaWYgKCB1bmxpa2VseShjdHh0LT5yZWdzLT5lZmxhZ3MgJiBY ODZfRUZMQUdTX0RGKSApCi0gICAgICAgICAgICBvZmZzZXQgLT0gYnl0ZXNfcGVyX3JlcDsKLSAg ICAgICAgZWxzZQotICAgICAgICAgICAgb2Zmc2V0ICs9IGJ5dGVzX3Blcl9yZXA7Ci0gICAgfQot Ci0gICAgcmV0dXJuIFg4NkVNVUxfT0tBWTsKLX0KLQotc3RhdGljIGludCBwcml2X29wX3JlcF9v dXRzKGVudW0geDg2X3NlZ21lbnQgc2VnLCB1bnNpZ25lZCBsb25nIG9mZnNldCwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBwb3J0LAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHVuc2lnbmVkIGludCBieXRlc19wZXJfcmVwLCB1bnNpZ25lZCBsb25nICpyZXBzLAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0 KQotewotICAgIHN0cnVjdCBwcml2X29wX2N0eHQgKnBvYyA9IGNvbnRhaW5lcl9vZihjdHh0LCBz dHJ1Y3QgcHJpdl9vcF9jdHh0LCBjdHh0KTsKLSAgICBzdHJ1Y3QgdmNwdSAqY3VyciA9IGN1cnJl bnQ7Ci0gICAgc3RydWN0IGRvbWFpbiAqY3VycmQgPSBjdXJyZW50LT5kb21haW47Ci0gICAgdW5z aWduZWQgbG9uZyBnb2FsID0gKnJlcHM7Ci0gICAgc3RydWN0IHNlZ21lbnRfcmVnaXN0ZXIgc3Jl ZzsKLSAgICBpbnQgcmM7Ci0KLSAgICAqcmVwcyA9IDA7Ci0KLSAgICBpZiAoICFndWVzdF9pb19v a2F5KHBvcnQsIGJ5dGVzX3Blcl9yZXAsIGN1cnIsIGN0eHQtPnJlZ3MpICkKLSAgICAgICAgcmV0 dXJuIFg4NkVNVUxfVU5IQU5ETEVBQkxFOwotCi0gICAgcmMgPSBwcml2X29wX3JlYWRfc2VnbWVu dChzZWcsICZzcmVnLCBjdHh0KTsKLSAgICBpZiAoIHJjICE9IFg4NkVNVUxfT0tBWSApCi0gICAg ICAgIHJldHVybiByYzsKLQotICAgIGlmICggIXNyZWcuYXR0ci5maWVsZHMucCApCi0gICAgICAg IHJldHVybiBYODZFTVVMX1VOSEFORExFQUJMRTsKLSAgICBpZiAoICFzcmVnLmF0dHIuZmllbGRz LnMgfHwKLSAgICAgICAgICgoc3JlZy5hdHRyLmZpZWxkcy50eXBlICYgKF9TRUdNRU5UX0NPREUg Pj4gOCkpICYmCi0gICAgICAgICAgIShzcmVnLmF0dHIuZmllbGRzLnR5cGUgJiAoX1NFR01FTlRf V1IgPj4gOCkpKSApCi0gICAgewotICAgICAgICB4ODZfZW11bF9od19leGNlcHRpb24oc2VnICE9 IHg4Nl9zZWdfc3MgPyBUUkFQX2dwX2ZhdWx0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA6IFRSQVBfc3RhY2tfZXJyb3IsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAwLCBjdHh0KTsKLSAgICAgICAgcmV0dXJuIFg4NkVNVUxfRVhDRVBUSU9O OwotICAgIH0KLQotICAgIHBvYy0+YnBtYXRjaCA9IGNoZWNrX2d1ZXN0X2lvX2JyZWFrcG9pbnQo Y3VyciwgcG9ydCwgYnl0ZXNfcGVyX3JlcCk7Ci0KLSAgICB3aGlsZSAoICpyZXBzIDwgZ29hbCAp Ci0gICAgewotICAgICAgICB1bnNpZ25lZCBpbnQgZGF0YSA9IDA7Ci0gICAgICAgIHVuc2lnbmVk IGxvbmcgYWRkcjsKLQotICAgICAgICByYyA9IHB2X2VtdWxfdmlydF90b19saW5lYXIoc3JlZy5i YXNlLCBvZmZzZXQsIGJ5dGVzX3Blcl9yZXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzcmVnLmxpbWl0LCBzZWcsIGN0eHQsICZhZGRyKTsKLSAgICAgICAgaWYgKCByYyAh PSBYODZFTVVMX09LQVkgKQotICAgICAgICAgICAgcmV0dXJuIHJjOwotCi0gICAgICAgIGlmICgg KHJjID0gX19jb3B5X2Zyb21fdXNlcigmZGF0YSwgKHZvaWQgKilhZGRyLCBieXRlc19wZXJfcmVw KSkgIT0gMCApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHg4Nl9lbXVsX3BhZ2VmYXVsdCgwLCBh ZGRyICsgYnl0ZXNfcGVyX3JlcCAtIHJjLCBjdHh0KTsKLSAgICAgICAgICAgIHJldHVybiBYODZF TVVMX0VYQ0VQVElPTjsKLSAgICAgICAgfQotCi0gICAgICAgIGd1ZXN0X2lvX3dyaXRlKHBvcnQs IGJ5dGVzX3Blcl9yZXAsIGRhdGEsIGN1cnJkKTsKLQotICAgICAgICArKypyZXBzOwotCi0gICAg ICAgIGlmICggcG9jLT5icG1hdGNoIHx8IGh5cGVyY2FsbF9wcmVlbXB0X2NoZWNrKCkgKQotICAg ICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgLyogeDg2X2VtdWxhdGUoKSBjbGlwcyB0aGUgcmVw ZXRpdGlvbiBjb3VudCB0byBlbnN1cmUgd2UgZG9uJ3Qgd3JhcC4gKi8KLSAgICAgICAgaWYgKCB1 bmxpa2VseShjdHh0LT5yZWdzLT5lZmxhZ3MgJiBYODZfRUZMQUdTX0RGKSApCi0gICAgICAgICAg ICBvZmZzZXQgLT0gYnl0ZXNfcGVyX3JlcDsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgb2Zm c2V0ICs9IGJ5dGVzX3Blcl9yZXA7Ci0gICAgfQotCi0gICAgcmV0dXJuIFg4NkVNVUxfT0tBWTsK LX0KLQotc3RhdGljIGludCBwcml2X29wX3JlYWRfY3IodW5zaWduZWQgaW50IHJlZywgdW5zaWdu ZWQgbG9uZyAqdmFsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHg4Nl9lbXVs YXRlX2N0eHQgKmN0eHQpCi17Ci0gICAgY29uc3Qgc3RydWN0IHZjcHUgKmN1cnIgPSBjdXJyZW50 OwotCi0gICAgc3dpdGNoICggcmVnICkKLSAgICB7Ci0gICAgY2FzZSAwOiAvKiBSZWFkIENSMCAq LwotICAgICAgICAqdmFsID0gKHJlYWRfY3IwKCkgJiB+WDg2X0NSMF9UUykgfCBjdXJyLT5hcmNo LnB2X3ZjcHUuY3RybHJlZ1swXTsKLSAgICAgICAgcmV0dXJuIFg4NkVNVUxfT0tBWTsKLQotICAg IGNhc2UgMjogLyogUmVhZCBDUjIgKi8KLSAgICBjYXNlIDQ6IC8qIFJlYWQgQ1I0ICovCi0gICAg ICAgICp2YWwgPSBjdXJyLT5hcmNoLnB2X3ZjcHUuY3RybHJlZ1tyZWddOwotICAgICAgICByZXR1 cm4gWDg2RU1VTF9PS0FZOwotCi0gICAgY2FzZSAzOiAvKiBSZWFkIENSMyAqLwotICAgIHsKLSAg ICAgICAgY29uc3Qgc3RydWN0IGRvbWFpbiAqY3VycmQgPSBjdXJyLT5kb21haW47Ci0gICAgICAg IHVuc2lnbmVkIGxvbmcgbWZuOwotCi0gICAgICAgIGlmICggIWlzX3B2XzMyYml0X2RvbWFpbihj dXJyZCkgKQotICAgICAgICB7Ci0gICAgICAgICAgICBtZm4gPSBwYWdldGFibGVfZ2V0X3Bmbihj dXJyLT5hcmNoLmd1ZXN0X3RhYmxlKTsKLSAgICAgICAgICAgICp2YWwgPSB4ZW5fcGZuX3RvX2Ny MyhtZm5fdG9fZ21mbihjdXJyZCwgbWZuKSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAg ICAgICB7Ci0gICAgICAgICAgICBsNF9wZ2VudHJ5X3QgKnBsNGUgPQotICAgICAgICAgICAgICAg IG1hcF9kb21haW5fcGFnZShfbWZuKHBhZ2V0YWJsZV9nZXRfcGZuKGN1cnItPmFyY2guZ3Vlc3Rf dGFibGUpKSk7Ci0KLSAgICAgICAgICAgIG1mbiA9IGw0ZV9nZXRfcGZuKCpwbDRlKTsKLSAgICAg ICAgICAgIHVubWFwX2RvbWFpbl9wYWdlKHBsNGUpOwotICAgICAgICAgICAgKnZhbCA9IGNvbXBh dF9wZm5fdG9fY3IzKG1mbl90b19nbWZuKGN1cnJkLCBtZm4pKTsKLSAgICAgICAgfQotICAgICAg ICAvKiBQVHMgc2hvdWxkIG5vdCBiZSBzaGFyZWQgKi8KLSAgICAgICAgQlVHX09OKHBhZ2VfZ2V0 X293bmVyKG1mbl90b19wYWdlKG1mbikpID09IGRvbV9jb3cpOwotICAgICAgICByZXR1cm4gWDg2 RU1VTF9PS0FZOwotICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gWDg2RU1VTF9VTkhBTkRMRUFC TEU7Ci19Ci0KLXN0YXRpYyBpbnQgcHJpdl9vcF93cml0ZV9jcih1bnNpZ25lZCBpbnQgcmVnLCB1 bnNpZ25lZCBsb25nIHZhbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgeDg2 X2VtdWxhdGVfY3R4dCAqY3R4dCkKLXsKLSAgICBzdHJ1Y3QgdmNwdSAqY3VyciA9IGN1cnJlbnQ7 Ci0KLSAgICBzd2l0Y2ggKCByZWcgKQotICAgIHsKLSAgICBjYXNlIDA6IC8qIFdyaXRlIENSMCAq LwotICAgICAgICBpZiAoICh2YWwgXiByZWFkX2NyMCgpKSAmIH5YODZfQ1IwX1RTICkKLSAgICAg ICAgewotICAgICAgICAgICAgZ2RwcmludGsoWEVOTE9HX1dBUk5JTkcsCi0gICAgICAgICAgICAg ICAgICAgICJBdHRlbXB0IHRvIGNoYW5nZSB1bm1vZGlmaWFibGUgQ1IwIGZsYWdzXG4iKTsKLSAg ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGRvX2ZwdV90YXNrc3dpdGNoKCEh KHZhbCAmIFg4Nl9DUjBfVFMpKTsKLSAgICAgICAgcmV0dXJuIFg4NkVNVUxfT0tBWTsKLQotICAg IGNhc2UgMjogLyogV3JpdGUgQ1IyICovCi0gICAgICAgIGN1cnItPmFyY2gucHZfdmNwdS5jdHJs cmVnWzJdID0gdmFsOwotICAgICAgICBhcmNoX3NldF9jcjIoY3VyciwgdmFsKTsKLSAgICAgICAg cmV0dXJuIFg4NkVNVUxfT0tBWTsKLQotICAgIGNhc2UgMzogLyogV3JpdGUgQ1IzICovCi0gICAg ewotICAgICAgICBzdHJ1Y3QgZG9tYWluICpjdXJyZCA9IGN1cnItPmRvbWFpbjsKLSAgICAgICAg dW5zaWduZWQgbG9uZyBnZm47Ci0gICAgICAgIHN0cnVjdCBwYWdlX2luZm8gKnBhZ2U7Ci0gICAg ICAgIGludCByYzsKLQotICAgICAgICBnZm4gPSAhaXNfcHZfMzJiaXRfZG9tYWluKGN1cnJkKQot ICAgICAgICAgICAgICA/IHhlbl9jcjNfdG9fcGZuKHZhbCkgOiBjb21wYXRfY3IzX3RvX3Bmbih2 YWwpOwotICAgICAgICBwYWdlID0gZ2V0X3BhZ2VfZnJvbV9nZm4oY3VycmQsIGdmbiwgTlVMTCwg UDJNX0FMTE9DKTsKLSAgICAgICAgaWYgKCAhcGFnZSApCi0gICAgICAgICAgICBicmVhazsKLSAg ICAgICAgcmMgPSBuZXdfZ3Vlc3RfY3IzKHBhZ2VfdG9fbWZuKHBhZ2UpKTsKLSAgICAgICAgcHV0 X3BhZ2UocGFnZSk7Ci0KLSAgICAgICAgc3dpdGNoICggcmMgKQotICAgICAgICB7Ci0gICAgICAg IGNhc2UgMDoKLSAgICAgICAgICAgIHJldHVybiBYODZFTVVMX09LQVk7Ci0gICAgICAgIGNhc2Ug LUVSRVNUQVJUOiAvKiByZXRyeSBhZnRlciBwcmVlbXB0aW9uICovCi0gICAgICAgICAgICByZXR1 cm4gWDg2RU1VTF9SRVRSWTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAg ICBjYXNlIDQ6IC8qIFdyaXRlIENSNCAqLwotICAgICAgICBjdXJyLT5hcmNoLnB2X3ZjcHUuY3Ry bHJlZ1s0XSA9IHB2X2d1ZXN0X2NyNF9maXh1cChjdXJyLCB2YWwpOwotICAgICAgICB3cml0ZV9j cjQocHZfZ3Vlc3RfY3I0X3RvX3JlYWxfY3I0KGN1cnIpKTsKLSAgICAgICAgY3R4dF9zd2l0Y2hf bGV2ZWxsaW5nKGN1cnIpOwotICAgICAgICByZXR1cm4gWDg2RU1VTF9PS0FZOwotICAgIH0KLQot ICAgIHJldHVybiBYODZFTVVMX1VOSEFORExFQUJMRTsKLX0KLQotc3RhdGljIGludCBwcml2X29w X3JlYWRfZHIodW5zaWduZWQgaW50IHJlZywgdW5zaWduZWQgbG9uZyAqdmFsLAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpCi17Ci0gICAg dW5zaWduZWQgbG9uZyByZXMgPSBkb19nZXRfZGVidWdyZWcocmVnKTsKLQotICAgIGlmICggSVNf RVJSX1ZBTFVFKHJlcykgKQotICAgICAgICByZXR1cm4gWDg2RU1VTF9VTkhBTkRMRUFCTEU7Ci0K LSAgICAqdmFsID0gcmVzOwotCi0gICAgcmV0dXJuIFg4NkVNVUxfT0tBWTsKLX0KLQotc3RhdGlj IGludCBwcml2X29wX3dyaXRlX2RyKHVuc2lnbmVkIGludCByZWcsIHVuc2lnbmVkIGxvbmcgdmFs LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpj dHh0KQotewotICAgIHJldHVybiBkb19zZXRfZGVidWdyZWcocmVnLCB2YWwpID09IDAKLSAgICAg ICAgICAgPyBYODZFTVVMX09LQVkgOiBYODZFTVVMX1VOSEFORExFQUJMRTsKLX0KLQotc3RhdGlj IGlubGluZSB1aW50NjRfdCBndWVzdF9taXNjX2VuYWJsZSh1aW50NjRfdCB2YWwpCi17Ci0gICAg dmFsICY9IH4oTVNSX0lBMzJfTUlTQ19FTkFCTEVfUEVSRl9BVkFJTCB8Ci0gICAgICAgICAgICAg TVNSX0lBMzJfTUlTQ19FTkFCTEVfTU9OSVRPUl9FTkFCTEUpOwotICAgIHZhbCB8PSBNU1JfSUEz Ml9NSVNDX0VOQUJMRV9CVFNfVU5BVkFJTCB8Ci0gICAgICAgICAgIE1TUl9JQTMyX01JU0NfRU5B QkxFX1BFQlNfVU5BVkFJTCB8Ci0gICAgICAgICAgIE1TUl9JQTMyX01JU0NfRU5BQkxFX1hUUFJf RElTQUJMRTsKLSAgICByZXR1cm4gdmFsOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNfY3B1 ZnJlcV9jb250cm9sbGVyKGNvbnN0IHN0cnVjdCBkb21haW4gKmQpCi17Ci0gICAgcmV0dXJuICgo Y3B1ZnJlcV9jb250cm9sbGVyID09IEZSRVFDVExfZG9tMF9rZXJuZWwpICYmCi0gICAgICAgICAg ICBpc19oYXJkd2FyZV9kb21haW4oZCkpOwotfQotCi1zdGF0aWMgaW50IHByaXZfb3BfcmVhZF9t c3IodW5zaWduZWQgaW50IHJlZywgdWludDY0X3QgKnZhbCwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCkKLXsKLSAgICBzdHJ1Y3QgcHJp dl9vcF9jdHh0ICpwb2MgPSBjb250YWluZXJfb2YoY3R4dCwgc3RydWN0IHByaXZfb3BfY3R4dCwg Y3R4dCk7Ci0gICAgY29uc3Qgc3RydWN0IHZjcHUgKmN1cnIgPSBjdXJyZW50OwotICAgIGNvbnN0 IHN0cnVjdCBkb21haW4gKmN1cnJkID0gY3Vyci0+ZG9tYWluOwotICAgIGJvb2wgdnBtdV9tc3Ig PSBmYWxzZTsKLQotICAgIHN3aXRjaCAoIHJlZyApCi0gICAgewotICAgICAgICBpbnQgcmM7Ci0K LSAgICBjYXNlIE1TUl9GU19CQVNFOgotICAgICAgICBpZiAoIGlzX3B2XzMyYml0X2RvbWFpbihj dXJyZCkgKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICp2YWwgPSBjcHVfaGFzX2ZzZ3Ni YXNlID8gX19yZGZzYmFzZSgpIDogY3Vyci0+YXJjaC5wdl92Y3B1LmZzX2Jhc2U7Ci0gICAgICAg IHJldHVybiBYODZFTVVMX09LQVk7Ci0KLSAgICBjYXNlIE1TUl9HU19CQVNFOgotICAgICAgICBp ZiAoIGlzX3B2XzMyYml0X2RvbWFpbihjdXJyZCkgKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAg ICAgICp2YWwgPSBjcHVfaGFzX2ZzZ3NiYXNlID8gX19yZGdzYmFzZSgpCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDogY3Vyci0+YXJjaC5wdl92Y3B1LmdzX2Jhc2Vfa2VybmVsOwot ICAgICAgICByZXR1cm4gWDg2RU1VTF9PS0FZOwotCi0gICAgY2FzZSBNU1JfU0hBRE9XX0dTX0JB U0U6Ci0gICAgICAgIGlmICggaXNfcHZfMzJiaXRfZG9tYWluKGN1cnJkKSApCi0gICAgICAgICAg ICBicmVhazsKLSAgICAgICAgKnZhbCA9IGN1cnItPmFyY2gucHZfdmNwdS5nc19iYXNlX3VzZXI7 Ci0gICAgICAgIHJldHVybiBYODZFTVVMX09LQVk7Ci0KLSAgICAvKgotICAgICAqIEluIG9yZGVy IHRvIGZ1bGx5IHJldGFpbiBvcmlnaW5hbCBiZWhhdmlvciwgZGVmZXIgY2FsbGluZwotICAgICAq IHB2X3NvZnRfcmR0c2MoKSB1bnRpbCBhZnRlciBlbXVsYXRpb24uIFRoaXMgbWF5IHdhbnQvbmVl ZCB0byBiZQotICAgICAqIHJlY29uc2lkZXJlZC4KLSAgICAgKi8KLSAgICBjYXNlIE1TUl9JQTMy X1RTQzoKLSAgICAgICAgcG9jLT50c2MgfD0gVFNDX0JBU0U7Ci0gICAgICAgIGdvdG8gbm9ybWFs OwotCi0gICAgY2FzZSBNU1JfVFNDX0FVWDoKLSAgICAgICAgcG9jLT50c2MgfD0gVFNDX0FVWDsK LSAgICAgICAgaWYgKCBjcHVfaGFzX3JkdHNjcCApCi0gICAgICAgICAgICBnb3RvIG5vcm1hbDsK LSAgICAgICAgKnZhbCA9IDA7Ci0gICAgICAgIHJldHVybiBYODZFTVVMX09LQVk7Ci0KLSAgICBj YXNlIE1TUl9FRkVSOgotICAgICAgICAqdmFsID0gcmVhZF9lZmVyKCk7Ci0gICAgICAgIGlmICgg aXNfcHZfMzJiaXRfZG9tYWluKGN1cnJkKSApCi0gICAgICAgICAgICAqdmFsICY9IH4oRUZFUl9M TUUgfCBFRkVSX0xNQSB8IEVGRVJfTE1TTEUpOwotICAgICAgICByZXR1cm4gWDg2RU1VTF9PS0FZ OwotCi0gICAgY2FzZSBNU1JfSzdfRklEX1ZJRF9DVEw6Ci0gICAgY2FzZSBNU1JfSzdfRklEX1ZJ RF9TVEFUVVM6Ci0gICAgY2FzZSBNU1JfSzhfUFNUQVRFX0xJTUlUOgotICAgIGNhc2UgTVNSX0s4 X1BTVEFURV9DVFJMOgotICAgIGNhc2UgTVNSX0s4X1BTVEFURV9TVEFUVVM6Ci0gICAgY2FzZSBN U1JfSzhfUFNUQVRFMDoKLSAgICBjYXNlIE1TUl9LOF9QU1RBVEUxOgotICAgIGNhc2UgTVNSX0s4 X1BTVEFURTI6Ci0gICAgY2FzZSBNU1JfSzhfUFNUQVRFMzoKLSAgICBjYXNlIE1TUl9LOF9QU1RB VEU0OgotICAgIGNhc2UgTVNSX0s4X1BTVEFURTU6Ci0gICAgY2FzZSBNU1JfSzhfUFNUQVRFNjoK LSAgICBjYXNlIE1TUl9LOF9QU1RBVEU3OgotICAgICAgICBpZiAoIGJvb3RfY3B1X2RhdGEueDg2 X3ZlbmRvciAhPSBYODZfVkVORE9SX0FNRCApCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg aWYgKCB1bmxpa2VseShpc19jcHVmcmVxX2NvbnRyb2xsZXIoY3VycmQpKSApCi0gICAgICAgICAg ICBnb3RvIG5vcm1hbDsKLSAgICAgICAgKnZhbCA9IDA7Ci0gICAgICAgIHJldHVybiBYODZFTVVM X09LQVk7Ci0KLSAgICBjYXNlIE1TUl9JQTMyX1VDT0RFX1JFVjoKLSAgICAgICAgQlVJTERfQlVH X09OKE1TUl9JQTMyX1VDT0RFX1JFViAhPSBNU1JfQU1EX1BBVENITEVWRUwpOwotICAgICAgICBp ZiAoIGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvciA9PSBYODZfVkVORE9SX0lOVEVMICkKLSAgICAg ICAgewotICAgICAgICAgICAgaWYgKCB3cm1zcl9zYWZlKE1TUl9JQTMyX1VDT0RFX1JFViwgMCkg KQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgLyogQXMgZG9jdW1lbnRlZCBp biB0aGUgU0RNOiBEbyBhIENQVUlEIDEgaGVyZSAqLwotICAgICAgICAgICAgY3B1aWRfZWF4KDEp OwotICAgICAgICB9Ci0gICAgICAgIGdvdG8gbm9ybWFsOwotCi0gICAgY2FzZSBNU1JfSUEzMl9N SVNDX0VOQUJMRToKLSAgICAgICAgaWYgKCByZG1zcl9zYWZlKHJlZywgKnZhbCkgKQotICAgICAg ICAgICAgYnJlYWs7Ci0gICAgICAgICp2YWwgPSBndWVzdF9taXNjX2VuYWJsZSgqdmFsKTsKLSAg ICAgICAgcmV0dXJuIFg4NkVNVUxfT0tBWTsKLQotICAgIGNhc2UgTVNSX0FNRDY0X0RSMF9BRERS RVNTX01BU0s6Ci0gICAgICAgIGlmICggIWJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9EQkVYVCkg KQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICp2YWwgPSBjdXJyLT5hcmNoLnB2X3ZjcHUu ZHJfbWFza1swXTsKLSAgICAgICAgcmV0dXJuIFg4NkVNVUxfT0tBWTsKLQotICAgIGNhc2UgTVNS X0FNRDY0X0RSMV9BRERSRVNTX01BU0sgLi4uIE1TUl9BTUQ2NF9EUjNfQUREUkVTU19NQVNLOgot ICAgICAgICBpZiAoICFib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfREJFWFQpICkKLSAgICAgICAg ICAgIGJyZWFrOwotICAgICAgICAqdmFsID0gY3Vyci0+YXJjaC5wdl92Y3B1LmRyX21hc2tbcmVn IC0gTVNSX0FNRDY0X0RSMV9BRERSRVNTX01BU0sgKyAxXTsKLSAgICAgICAgcmV0dXJuIFg4NkVN VUxfT0tBWTsKLQotICAgIGNhc2UgTVNSX0lBMzJfUEVSRl9DQVBBQklMSVRJRVM6Ci0gICAgICAg IC8qIE5vIGV4dHJhIGNhcGFiaWxpdGllcyBhcmUgc3VwcG9ydGVkLiAqLwotICAgICAgICAqdmFs ID0gMDsKLSAgICAgICAgcmV0dXJuIFg4NkVNVUxfT0tBWTsKLQotICAgIGNhc2UgTVNSX0lOVEVM X1BMQVRGT1JNX0lORk86Ci0gICAgICAgIGlmICggYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yICE9 IFg4Nl9WRU5ET1JfSU5URUwgfHwKLSAgICAgICAgICAgICByZG1zcl9zYWZlKE1TUl9JTlRFTF9Q TEFURk9STV9JTkZPLCAqdmFsKSApCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgKnZhbCA9 IDA7Ci0gICAgICAgIGlmICggdGhpc19jcHUoY3B1aWRfZmF1bHRpbmdfZW5hYmxlZCkgKQotICAg ICAgICAgICAgKnZhbCB8PSBNU1JfUExBVEZPUk1fSU5GT19DUFVJRF9GQVVMVElORzsKLSAgICAg ICAgcmV0dXJuIFg4NkVNVUxfT0tBWTsKLQotICAgIGNhc2UgTVNSX0lOVEVMX01JU0NfRkVBVFVS RVNfRU5BQkxFUzoKLSAgICAgICAgaWYgKCBib290X2NwdV9kYXRhLng4Nl92ZW5kb3IgIT0gWDg2 X1ZFTkRPUl9JTlRFTCB8fAotICAgICAgICAgICAgIHJkbXNyX3NhZmUoTVNSX0lOVEVMX01JU0Nf RkVBVFVSRVNfRU5BQkxFUywgKnZhbCkgKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICp2 YWwgPSAwOwotICAgICAgICBpZiAoIGN1cnItPmFyY2guY3B1aWRfZmF1bHRpbmcgKQotICAgICAg ICAgICAgKnZhbCB8PSBNU1JfTUlTQ19GRUFUVVJFU19DUFVJRF9GQVVMVElORzsKLSAgICAgICAg cmV0dXJuIFg4NkVNVUxfT0tBWTsKLQotICAgIGNhc2UgTVNSX1A2X1BFUkZDVFIoMCkuLi5NU1Jf UDZfUEVSRkNUUig3KToKLSAgICBjYXNlIE1TUl9QNl9FVk5UU0VMKDApLi4uTVNSX1A2X0VWTlRT RUwoMyk6Ci0gICAgY2FzZSBNU1JfQ09SRV9QRVJGX0ZJWEVEX0NUUjAuLi5NU1JfQ09SRV9QRVJG X0ZJWEVEX0NUUjI6Ci0gICAgY2FzZSBNU1JfQ09SRV9QRVJGX0ZJWEVEX0NUUl9DVFJMLi4uTVNS X0NPUkVfUEVSRl9HTE9CQUxfT1ZGX0NUUkw6Ci0gICAgICAgIGlmICggYm9vdF9jcHVfZGF0YS54 ODZfdmVuZG9yID09IFg4Nl9WRU5ET1JfSU5URUwgKQotICAgICAgICB7Ci0gICAgICAgICAgICB2 cG11X21zciA9IHRydWU7Ci0gICAgICAgICAgICAvKiBmYWxsIHRocm91Z2ggKi8KLSAgICBjYXNl IE1TUl9BTURfRkFNMTVIX0VWTlRTRUwwLi4uTVNSX0FNRF9GQU0xNUhfUEVSRkNUUjU6Ci0gICAg Y2FzZSBNU1JfSzdfRVZOVFNFTDAuLi5NU1JfSzdfUEVSRkNUUjM6Ci0gICAgICAgICAgICBpZiAo IHZwbXVfbXNyIHx8IChib290X2NwdV9kYXRhLng4Nl92ZW5kb3IgPT0gWDg2X1ZFTkRPUl9BTUQp ICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoIHZwbXVfZG9fcmRtc3IocmVn LCB2YWwpICkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgcmV0 dXJuIFg4NkVNVUxfT0tBWTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAvKiBm YWxsIHRocm91Z2ggKi8KLSAgICBkZWZhdWx0OgotICAgICAgICBpZiAoIHJkbXNyX2h5cGVydmlz b3JfcmVncyhyZWcsIHZhbCkgKQotICAgICAgICAgICAgcmV0dXJuIFg4NkVNVUxfT0tBWTsKLQot ICAgICAgICByYyA9IHZtY2VfcmRtc3IocmVnLCB2YWwpOwotICAgICAgICBpZiAoIHJjIDwgMCAp Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgaWYgKCByYyApCi0gICAgICAgICAgICByZXR1 cm4gWDg2RU1VTF9PS0FZOwotICAgICAgICAvKiBmYWxsIHRocm91Z2ggKi8KLSAgICBub3JtYWw6 Ci0gICAgICAgIC8qIEV2ZXJ5b25lIGNhbiByZWFkIHRoZSBNU1Igc3BhY2UuICovCi0gICAgICAg IC8qIGdkcHJpbnRrKFhFTkxPR19XQVJOSU5HLCAiRG9tYWluIGF0dGVtcHRlZCBSRE1TUiAlMDh4 XG4iLCByZWcpOyAqLwotICAgICAgICBpZiAoIHJkbXNyX3NhZmUocmVnLCAqdmFsKSApCi0gICAg ICAgICAgICBicmVhazsKLSAgICAgICAgcmV0dXJuIFg4NkVNVUxfT0tBWTsKLSAgICB9Ci0KLSAg ICByZXR1cm4gWDg2RU1VTF9VTkhBTkRMRUFCTEU7Ci19Ci0KLSNpbmNsdWRlICJ4ODZfNjQvbW1j b25maWcuaCIKLQotc3RhdGljIGludCBwcml2X29wX3dyaXRlX21zcih1bnNpZ25lZCBpbnQgcmVn LCB1aW50NjRfdCB2YWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB4ODZf ZW11bGF0ZV9jdHh0ICpjdHh0KQotewotICAgIHN0cnVjdCB2Y3B1ICpjdXJyID0gY3VycmVudDsK LSAgICBjb25zdCBzdHJ1Y3QgZG9tYWluICpjdXJyZCA9IGN1cnItPmRvbWFpbjsKLSAgICBib29s IHZwbXVfbXNyID0gZmFsc2U7Ci0KLSAgICBzd2l0Y2ggKCByZWcgKQotICAgIHsKLSAgICAgICAg dWludDY0X3QgdGVtcDsKLSAgICAgICAgaW50IHJjOwotCi0gICAgY2FzZSBNU1JfRlNfQkFTRToK LSAgICAgICAgaWYgKCBpc19wdl8zMmJpdF9kb21haW4oY3VycmQpIHx8ICFpc19jYW5vbmljYWxf YWRkcmVzcyh2YWwpICkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB3cmZzYmFzZSh2YWwp OwotICAgICAgICBjdXJyLT5hcmNoLnB2X3ZjcHUuZnNfYmFzZSA9IHZhbDsKLSAgICAgICAgcmV0 dXJuIFg4NkVNVUxfT0tBWTsKLQotICAgIGNhc2UgTVNSX0dTX0JBU0U6Ci0gICAgICAgIGlmICgg aXNfcHZfMzJiaXRfZG9tYWluKGN1cnJkKSB8fCAhaXNfY2Fub25pY2FsX2FkZHJlc3ModmFsKSAp Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgd3Jnc2Jhc2UodmFsKTsKLSAgICAgICAgY3Vy ci0+YXJjaC5wdl92Y3B1LmdzX2Jhc2Vfa2VybmVsID0gdmFsOwotICAgICAgICByZXR1cm4gWDg2 RU1VTF9PS0FZOwotCi0gICAgY2FzZSBNU1JfU0hBRE9XX0dTX0JBU0U6Ci0gICAgICAgIGlmICgg aXNfcHZfMzJiaXRfZG9tYWluKGN1cnJkKSB8fCAhaXNfY2Fub25pY2FsX2FkZHJlc3ModmFsKSAp Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgd3Jtc3JsKE1TUl9TSEFET1dfR1NfQkFTRSwg dmFsKTsKLSAgICAgICAgY3Vyci0+YXJjaC5wdl92Y3B1LmdzX2Jhc2VfdXNlciA9IHZhbDsKLSAg ICAgICAgcmV0dXJuIFg4NkVNVUxfT0tBWTsKLQotICAgIGNhc2UgTVNSX0s3X0ZJRF9WSURfU1RB VFVTOgotICAgIGNhc2UgTVNSX0s3X0ZJRF9WSURfQ1RMOgotICAgIGNhc2UgTVNSX0s4X1BTVEFU RV9MSU1JVDoKLSAgICBjYXNlIE1TUl9LOF9QU1RBVEVfQ1RSTDoKLSAgICBjYXNlIE1TUl9LOF9Q U1RBVEVfU1RBVFVTOgotICAgIGNhc2UgTVNSX0s4X1BTVEFURTA6Ci0gICAgY2FzZSBNU1JfSzhf UFNUQVRFMToKLSAgICBjYXNlIE1TUl9LOF9QU1RBVEUyOgotICAgIGNhc2UgTVNSX0s4X1BTVEFU RTM6Ci0gICAgY2FzZSBNU1JfSzhfUFNUQVRFNDoKLSAgICBjYXNlIE1TUl9LOF9QU1RBVEU1Ogot ICAgIGNhc2UgTVNSX0s4X1BTVEFURTY6Ci0gICAgY2FzZSBNU1JfSzhfUFNUQVRFNzoKLSAgICBj YXNlIE1TUl9LOF9IV0NSOgotICAgICAgICBpZiAoIGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvciAh PSBYODZfVkVORE9SX0FNRCApCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgaWYgKCBsaWtl bHkoIWlzX2NwdWZyZXFfY29udHJvbGxlcihjdXJyZCkpIHx8Ci0gICAgICAgICAgICAgd3Jtc3Jf c2FmZShyZWcsIHZhbCkgPT0gMCApCi0gICAgICAgICAgICByZXR1cm4gWDg2RU1VTF9PS0FZOwot ICAgICAgICBicmVhazsKLQotICAgIGNhc2UgTVNSX0FNRDY0X05CX0NGRzoKLSAgICAgICAgaWYg KCBib290X2NwdV9kYXRhLng4Nl92ZW5kb3IgIT0gWDg2X1ZFTkRPUl9BTUQgfHwKLSAgICAgICAg ICAgICBib290X2NwdV9kYXRhLng4NiA8IDB4MTAgfHwgYm9vdF9jcHVfZGF0YS54ODYgPiAweDE3 ICkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBpZiAoICFpc19oYXJkd2FyZV9kb21haW4o Y3VycmQpIHx8ICFpc19waW5uZWRfdmNwdShjdXJyKSApCi0gICAgICAgICAgICByZXR1cm4gWDg2 RU1VTF9PS0FZOwotICAgICAgICBpZiAoIChyZG1zcl9zYWZlKE1TUl9BTUQ2NF9OQl9DRkcsIHRl bXApICE9IDApIHx8Ci0gICAgICAgICAgICAgKCh2YWwgXiB0ZW1wKSAmIH4oMVVMTCA8PCBBTUQ2 NF9OQl9DRkdfQ0Y4X0VYVF9FTkFCTEVfQklUKSkgKQotICAgICAgICAgICAgZ290byBpbnZhbGlk OwotICAgICAgICBpZiAoIHdybXNyX3NhZmUoTVNSX0FNRDY0X05CX0NGRywgdmFsKSA9PSAwICkK LSAgICAgICAgICAgIHJldHVybiBYODZFTVVMX09LQVk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAg Y2FzZSBNU1JfRkFNMTBIX01NSU9fQ09ORl9CQVNFOgotICAgICAgICBpZiAoIGJvb3RfY3B1X2Rh dGEueDg2X3ZlbmRvciAhPSBYODZfVkVORE9SX0FNRCB8fAotICAgICAgICAgICAgIGJvb3RfY3B1 X2RhdGEueDg2IDwgMHgxMCB8fCBib290X2NwdV9kYXRhLng4NiA+IDB4MTcgKQotICAgICAgICAg ICAgYnJlYWs7Ci0gICAgICAgIGlmICggIWlzX2hhcmR3YXJlX2RvbWFpbihjdXJyZCkgfHwgIWlz X3Bpbm5lZF92Y3B1KGN1cnIpICkKLSAgICAgICAgICAgIHJldHVybiBYODZFTVVMX09LQVk7Ci0g ICAgICAgIGlmICggcmRtc3Jfc2FmZShNU1JfRkFNMTBIX01NSU9fQ09ORl9CQVNFLCB0ZW1wKSAh PSAwICkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBpZiAoIChwY2lfcHJvYmUgJiBQQ0lf UFJPQkVfTUFTSykgPT0gUENJX1BST0JFX01NQ09ORiA/Ci0gICAgICAgICAgICAgdGVtcCAhPSB2 YWwgOgotICAgICAgICAgICAgICgodGVtcCBeIHZhbCkgJgotICAgICAgICAgICAgICB+KEZBTTEw SF9NTUlPX0NPTkZfRU5BQkxFIHwKLSAgICAgICAgICAgICAgICAoRkFNMTBIX01NSU9fQ09ORl9C VVNSQU5HRV9NQVNLIDw8Ci0gICAgICAgICAgICAgICAgIEZBTTEwSF9NTUlPX0NPTkZfQlVTUkFO R0VfU0hJRlQpIHwKLSAgICAgICAgICAgICAgICAoKHU2NClGQU0xMEhfTU1JT19DT05GX0JBU0Vf TUFTSyA8PAotICAgICAgICAgICAgICAgICBGQU0xMEhfTU1JT19DT05GX0JBU0VfU0hJRlQpKSkg KQotICAgICAgICAgICAgZ290byBpbnZhbGlkOwotICAgICAgICBpZiAoIHdybXNyX3NhZmUoTVNS X0ZBTTEwSF9NTUlPX0NPTkZfQkFTRSwgdmFsKSA9PSAwICkKLSAgICAgICAgICAgIHJldHVybiBY ODZFTVVMX09LQVk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBNU1JfSUEzMl9VQ09ERV9S RVY6Ci0gICAgICAgIGlmICggYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yICE9IFg4Nl9WRU5ET1Jf SU5URUwgKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGlmICggIWlzX2hhcmR3YXJlX2Rv bWFpbihjdXJyZCkgfHwgIWlzX3Bpbm5lZF92Y3B1KGN1cnIpICkKLSAgICAgICAgICAgIHJldHVy biBYODZFTVVMX09LQVk7Ci0gICAgICAgIGlmICggcmRtc3Jfc2FmZShyZWcsIHRlbXApICkKLSAg ICAgICAgICAgIGJyZWFrOwotICAgICAgICBpZiAoIHZhbCApCi0gICAgICAgICAgICBnb3RvIGlu dmFsaWQ7Ci0gICAgICAgIHJldHVybiBYODZFTVVMX09LQVk7Ci0KLSAgICBjYXNlIE1TUl9JQTMy X01JU0NfRU5BQkxFOgotICAgICAgICBpZiAoIHJkbXNyX3NhZmUocmVnLCB0ZW1wKSApCi0gICAg ICAgICAgICBicmVhazsKLSAgICAgICAgaWYgKCB2YWwgIT0gZ3Vlc3RfbWlzY19lbmFibGUodGVt cCkgKQotICAgICAgICAgICAgZ290byBpbnZhbGlkOwotICAgICAgICByZXR1cm4gWDg2RU1VTF9P S0FZOwotCi0gICAgY2FzZSBNU1JfSUEzMl9NUEVSRjoKLSAgICBjYXNlIE1TUl9JQTMyX0FQRVJG OgotICAgICAgICBpZiAoIChib290X2NwdV9kYXRhLng4Nl92ZW5kb3IgIT0gWDg2X1ZFTkRPUl9J TlRFTCkgJiYKLSAgICAgICAgICAgICAoYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yICE9IFg4Nl9W RU5ET1JfQU1EKSApCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgaWYgKCBsaWtlbHkoIWlz X2NwdWZyZXFfY29udHJvbGxlcihjdXJyZCkpIHx8Ci0gICAgICAgICAgICAgd3Jtc3Jfc2FmZShy ZWcsIHZhbCkgPT0gMCApCi0gICAgICAgICAgICByZXR1cm4gWDg2RU1VTF9PS0FZOwotICAgICAg ICBicmVhazsKLQotICAgIGNhc2UgTVNSX0lBMzJfUEVSRl9DVEw6Ci0gICAgICAgIGlmICggYm9v dF9jcHVfZGF0YS54ODZfdmVuZG9yICE9IFg4Nl9WRU5ET1JfSU5URUwgKQotICAgICAgICAgICAg YnJlYWs7Ci0gICAgICAgIGlmICggbGlrZWx5KCFpc19jcHVmcmVxX2NvbnRyb2xsZXIoY3VycmQp KSB8fAotICAgICAgICAgICAgIHdybXNyX3NhZmUocmVnLCB2YWwpID09IDAgKQotICAgICAgICAg ICAgcmV0dXJuIFg4NkVNVUxfT0tBWTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIE1TUl9J QTMyX1RIRVJNX0NPTlRST0w6Ci0gICAgY2FzZSBNU1JfSUEzMl9FTkVSR1lfUEVSRl9CSUFTOgot ICAgICAgICBpZiAoIGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvciAhPSBYODZfVkVORE9SX0lOVEVM ICkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBpZiAoICFpc19oYXJkd2FyZV9kb21haW4o Y3VycmQpIHx8ICFpc19waW5uZWRfdmNwdShjdXJyKSB8fAotICAgICAgICAgICAgIHdybXNyX3Nh ZmUocmVnLCB2YWwpID09IDAgKQotICAgICAgICAgICAgcmV0dXJuIFg4NkVNVUxfT0tBWTsKLSAg ICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIE1TUl9BTUQ2NF9EUjBfQUREUkVTU19NQVNLOgotICAg ICAgICBpZiAoICFib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfREJFWFQpIHx8ICh2YWwgPj4gMzIp ICkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjdXJyLT5hcmNoLnB2X3ZjcHUuZHJfbWFz a1swXSA9IHZhbDsKLSAgICAgICAgaWYgKCBjdXJyLT5hcmNoLmRlYnVncmVnWzddICYgRFI3X0FD VElWRV9NQVNLICkKLSAgICAgICAgICAgIHdybXNybChNU1JfQU1ENjRfRFIwX0FERFJFU1NfTUFT SywgdmFsKTsKLSAgICAgICAgcmV0dXJuIFg4NkVNVUxfT0tBWTsKLQotICAgIGNhc2UgTVNSX0FN RDY0X0RSMV9BRERSRVNTX01BU0sgLi4uIE1TUl9BTUQ2NF9EUjNfQUREUkVTU19NQVNLOgotICAg ICAgICBpZiAoICFib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfREJFWFQpIHx8ICh2YWwgPj4gMzIp ICkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjdXJyLT5hcmNoLnB2X3ZjcHUuZHJfbWFz a1tyZWcgLSBNU1JfQU1ENjRfRFIxX0FERFJFU1NfTUFTSyArIDFdID0gdmFsOwotICAgICAgICBp ZiAoIGN1cnItPmFyY2guZGVidWdyZWdbN10gJiBEUjdfQUNUSVZFX01BU0sgKQotICAgICAgICAg ICAgd3Jtc3JsKHJlZywgdmFsKTsKLSAgICAgICAgcmV0dXJuIFg4NkVNVUxfT0tBWTsKLQotICAg IGNhc2UgTVNSX0lOVEVMX1BMQVRGT1JNX0lORk86Ci0gICAgICAgIGlmICggYm9vdF9jcHVfZGF0 YS54ODZfdmVuZG9yICE9IFg4Nl9WRU5ET1JfSU5URUwgfHwKLSAgICAgICAgICAgICB2YWwgfHwg cmRtc3Jfc2FmZShNU1JfSU5URUxfUExBVEZPUk1fSU5GTywgdmFsKSApCi0gICAgICAgICAgICBi cmVhazsKLSAgICAgICAgcmV0dXJuIFg4NkVNVUxfT0tBWTsKLQotICAgIGNhc2UgTVNSX0lOVEVM X01JU0NfRkVBVFVSRVNfRU5BQkxFUzoKLSAgICAgICAgaWYgKCBib290X2NwdV9kYXRhLng4Nl92 ZW5kb3IgIT0gWDg2X1ZFTkRPUl9JTlRFTCB8fAotICAgICAgICAgICAgICh2YWwgJiB+TVNSX01J U0NfRkVBVFVSRVNfQ1BVSURfRkFVTFRJTkcpIHx8Ci0gICAgICAgICAgICAgcmRtc3Jfc2FmZShN U1JfSU5URUxfTUlTQ19GRUFUVVJFU19FTkFCTEVTLCB0ZW1wKSApCi0gICAgICAgICAgICBicmVh azsKLSAgICAgICAgaWYgKCAodmFsICYgTVNSX01JU0NfRkVBVFVSRVNfQ1BVSURfRkFVTFRJTkcp ICYmCi0gICAgICAgICAgICAgIXRoaXNfY3B1KGNwdWlkX2ZhdWx0aW5nX2VuYWJsZWQpICkKLSAg ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjdXJyLT5hcmNoLmNwdWlkX2ZhdWx0aW5nID0gISEo dmFsICYgTVNSX01JU0NfRkVBVFVSRVNfQ1BVSURfRkFVTFRJTkcpOwotICAgICAgICByZXR1cm4g WDg2RU1VTF9PS0FZOwotCi0gICAgY2FzZSBNU1JfUDZfUEVSRkNUUigwKS4uLk1TUl9QNl9QRVJG Q1RSKDcpOgotICAgIGNhc2UgTVNSX1A2X0VWTlRTRUwoMCkuLi5NU1JfUDZfRVZOVFNFTCgzKToK LSAgICBjYXNlIE1TUl9DT1JFX1BFUkZfRklYRURfQ1RSMC4uLk1TUl9DT1JFX1BFUkZfRklYRURf Q1RSMjoKLSAgICBjYXNlIE1TUl9DT1JFX1BFUkZfRklYRURfQ1RSX0NUUkwuLi5NU1JfQ09SRV9Q RVJGX0dMT0JBTF9PVkZfQ1RSTDoKLSAgICAgICAgaWYgKCBib290X2NwdV9kYXRhLng4Nl92ZW5k b3IgPT0gWDg2X1ZFTkRPUl9JTlRFTCApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZwbXVfbXNy ID0gdHJ1ZTsKLSAgICBjYXNlIE1TUl9BTURfRkFNMTVIX0VWTlRTRUwwLi4uTVNSX0FNRF9GQU0x NUhfUEVSRkNUUjU6Ci0gICAgY2FzZSBNU1JfSzdfRVZOVFNFTDAuLi5NU1JfSzdfUEVSRkNUUjM6 Ci0gICAgICAgICAgICBpZiAoIHZwbXVfbXNyIHx8IChib290X2NwdV9kYXRhLng4Nl92ZW5kb3Ig PT0gWDg2X1ZFTkRPUl9BTUQpICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAo ICh2cG11X21vZGUgJiBYRU5QTVVfTU9ERV9BTEwpICYmCi0gICAgICAgICAgICAgICAgICAgICAh aXNfaGFyZHdhcmVfZG9tYWluKGN1cnJkKSApCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBY ODZFTVVMX09LQVk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIHZwbXVfZG9fd3Jtc3IocmVnLCB2 YWwsIDApICkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgcmV0 dXJuIFg4NkVNVUxfT0tBWTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAvKiBm YWxsIHRocm91Z2ggKi8KLSAgICBkZWZhdWx0OgotICAgICAgICBpZiAoIHdybXNyX2h5cGVydmlz b3JfcmVncyhyZWcsIHZhbCkgPT0gMSApCi0gICAgICAgICAgICByZXR1cm4gWDg2RU1VTF9PS0FZ OwotCi0gICAgICAgIHJjID0gdm1jZV93cm1zcihyZWcsIHZhbCk7Ci0gICAgICAgIGlmICggcmMg PCAwICkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBpZiAoIHJjICkKLSAgICAgICAgICAg IHJldHVybiBYODZFTVVMX09LQVk7Ci0KLSAgICAgICAgaWYgKCAocmRtc3Jfc2FmZShyZWcsIHRl bXApICE9IDApIHx8ICh2YWwgIT0gdGVtcCkgKQotICAgIGludmFsaWQ6Ci0gICAgICAgICAgICBn ZHByaW50ayhYRU5MT0dfV0FSTklORywKLSAgICAgICAgICAgICAgICAgICAgICJEb21haW4gYXR0 ZW1wdGVkIFdSTVNSICUwOHggZnJvbSAweCUwMTYiUFJJeDY0IiB0byAweCUwMTYiUFJJeDY0Ilxu IiwKLSAgICAgICAgICAgICAgICAgICAgIHJlZywgdGVtcCwgdmFsKTsKLSAgICAgICAgcmV0dXJu IFg4NkVNVUxfT0tBWTsKLSAgICB9Ci0KLSAgICByZXR1cm4gWDg2RU1VTF9VTkhBTkRMRUFCTEU7 Ci19Ci0KLXN0YXRpYyBpbnQgcHJpdl9vcF93YmludmQoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQg KmN0eHQpCi17Ci0gICAgLyogSWdub3JlIHRoZSBpbnN0cnVjdGlvbiBpZiB1bnByaXZpbGVnZWQu ICovCi0gICAgaWYgKCAhY2FjaGVfZmx1c2hfcGVybWl0dGVkKGN1cnJlbnQtPmRvbWFpbikgKQot ICAgICAgICAvKgotICAgICAgICAgKiBOb24tcGh5c2RldiBkb21haW4gYXR0ZW1wdGVkIFdCSU5W RDsgaWdub3JlIGZvciBub3cgc2luY2UKLSAgICAgICAgICogbmV3ZXIgbGludXggdXNlcyB0aGlz IGluIHNvbWUgc3RhcnQtb2YtZGF5IHRpbWluZyBsb29wcy4KLSAgICAgICAgICovCi0gICAgICAg IDsKLSAgICBlbHNlCi0gICAgICAgIHdiaW52ZCgpOwotCi0gICAgcmV0dXJuIFg4NkVNVUxfT0tB WTsKLX0KLQotaW50IHB2X2VtdWxfY3B1aWQodWludDMyX3QgbGVhZiwgdWludDMyX3Qgc3VibGVh ZiwKLSAgICAgICAgICAgICAgICAgIHN0cnVjdCBjcHVpZF9sZWFmICpyZXMsIHN0cnVjdCB4ODZf ZW11bGF0ZV9jdHh0ICpjdHh0KQotewotICAgIGd1ZXN0X2NwdWlkKGN1cnJlbnQsIGxlYWYsIHN1 YmxlYWYsIHJlcyk7Ci0KLSAgICByZXR1cm4gWDg2RU1VTF9PS0FZOwotfQotCi1zdGF0aWMgaW50 IHByaXZfb3BfdmFsaWRhdGUoY29uc3Qgc3RydWN0IHg4Nl9lbXVsYXRlX3N0YXRlICpzdGF0ZSwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4 dCkKLXsKLSAgICBzd2l0Y2ggKCBjdHh0LT5vcGNvZGUgKQotICAgIHsKLSAgICBjYXNlIDB4NmMg Li4uIDB4NmY6IC8qIGlucyAvIG91dHMgKi8KLSAgICBjYXNlIDB4ZTQgLi4uIDB4ZTc6IC8qIGlu IC8gb3V0IChpbW1lZGlhdGUgcG9ydCkgKi8KLSAgICBjYXNlIDB4ZWMgLi4uIDB4ZWY6IC8qIGlu IC8gb3V0IChwb3J0IGluICVkeCkgKi8KLSAgICBjYXNlIFg4NkVNVUxfT1BDKDB4MGYsIDB4MDYp OiAvKiBjbHRzICovCi0gICAgY2FzZSBYODZFTVVMX09QQygweDBmLCAweDA5KTogLyogd2JpbnZk ICovCi0gICAgY2FzZSBYODZFTVVMX09QQygweDBmLCAweDIwKSAuLi4KLSAgICAgICAgIFg4NkVN VUxfT1BDKDB4MGYsIDB4MjMpOiAvKiBtb3YgdG8vZnJvbSBjci9kciAqLwotICAgIGNhc2UgWDg2 RU1VTF9PUEMoMHgwZiwgMHgzMCk6IC8qIHdybXNyICovCi0gICAgY2FzZSBYODZFTVVMX09QQygw eDBmLCAweDMxKTogLyogcmR0c2MgKi8KLSAgICBjYXNlIFg4NkVNVUxfT1BDKDB4MGYsIDB4MzIp OiAvKiByZG1zciAqLwotICAgIGNhc2UgWDg2RU1VTF9PUEMoMHgwZiwgMHhhMik6IC8qIGNwdWlk ICovCi0gICAgICAgIHJldHVybiBYODZFTVVMX09LQVk7Ci0KLSAgICBjYXNlIDB4ZmE6IGNhc2Ug MHhmYjogLyogY2xpIC8gc3RpICovCi0gICAgICAgIGlmICggIWlvcGxfb2soY3VycmVudCwgY3R4 dC0+cmVncykgKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIC8qCi0gICAgICAgICAqIFRo aXMgaXMganVzdCB0b28gZGFuZ2Vyb3VzIHRvIGFsbG93LCBpbiBteSBvcGluaW9uLiBDb25zaWRl ciBpZiB0aGUKLSAgICAgICAgICogY2FsbGVyIHRoZW4gdHJpZXMgdG8gcmVlbmFibGUgaW50ZXJy dXB0cyB1c2luZyBQT1BGOiB3ZSBjYW4ndCB0cmFwCi0gICAgICAgICAqIHRoYXQgYW5kIHdlJ2xs IGVuZCB1cCB3aXRoIGhhcmQtdG8tZGVidWcgbG9ja3Vwcy4gRmFzdCAmIGxvb3NlIHdpbGwKLSAg ICAgICAgICogZG8gZm9yIHVzLiA6LSkKLSAgICAgICAgdmNwdV9pbmZvKGN1cnJlbnQsIGV2dGNo bl91cGNhbGxfbWFzaykgPSAoY3R4dC0+b3Bjb2RlID09IDB4ZmEpOwotICAgICAgICAgKi8KLSAg ICAgICAgcmV0dXJuIFg4NkVNVUxfRE9ORTsKLQotICAgIGNhc2UgWDg2RU1VTF9PUEMoMHgwZiwg MHgwMSk6Ci0gICAgewotICAgICAgICB1bnNpZ25lZCBpbnQgbW9kcm1fcm0sIG1vZHJtX3JlZzsK LQotICAgICAgICBpZiAoIHg4Nl9pbnNuX21vZHJtKHN0YXRlLCAmbW9kcm1fcm0sICZtb2RybV9y ZWcpICE9IDMgfHwKLSAgICAgICAgICAgICAobW9kcm1fcm0gJiA3KSAhPSAxICkKLSAgICAgICAg ICAgIGJyZWFrOwotICAgICAgICBzd2l0Y2ggKCBtb2RybV9yZWcgJiA3ICkKLSAgICAgICAgewot ICAgICAgICBjYXNlIDI6IC8qIHhzZXRidiAqLwotICAgICAgICBjYXNlIDc6IC8qIHJkdHNjcCAq LwotICAgICAgICAgICAgcmV0dXJuIFg4NkVNVUxfT0tBWTsKLSAgICAgICAgfQotICAgICAgICBi cmVhazsKLSAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIFg4NkVNVUxfVU5IQU5ETEVBQkxFOwot fQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHg4Nl9lbXVsYXRlX29wcyBwcml2X29wX29wcyA9IHsK LSAgICAuaW5zbl9mZXRjaCAgICAgICAgICA9IHByaXZfb3BfaW5zbl9mZXRjaCwKLSAgICAucmVh ZCAgICAgICAgICAgICAgICA9IHg4NmVtdWxfdW5oYW5kbGVhYmxlX3J3LAotICAgIC52YWxpZGF0 ZSAgICAgICAgICAgID0gcHJpdl9vcF92YWxpZGF0ZSwKLSAgICAucmVhZF9pbyAgICAgICAgICAg ICA9IHByaXZfb3BfcmVhZF9pbywKLSAgICAud3JpdGVfaW8gICAgICAgICAgICA9IHByaXZfb3Bf d3JpdGVfaW8sCi0gICAgLnJlcF9pbnMgICAgICAgICAgICAgPSBwcml2X29wX3JlcF9pbnMsCi0g ICAgLnJlcF9vdXRzICAgICAgICAgICAgPSBwcml2X29wX3JlcF9vdXRzLAotICAgIC5yZWFkX3Nl Z21lbnQgICAgICAgID0gcHJpdl9vcF9yZWFkX3NlZ21lbnQsCi0gICAgLnJlYWRfY3IgICAgICAg ICAgICAgPSBwcml2X29wX3JlYWRfY3IsCi0gICAgLndyaXRlX2NyICAgICAgICAgICAgPSBwcml2 X29wX3dyaXRlX2NyLAotICAgIC5yZWFkX2RyICAgICAgICAgICAgID0gcHJpdl9vcF9yZWFkX2Ry LAotICAgIC53cml0ZV9kciAgICAgICAgICAgID0gcHJpdl9vcF93cml0ZV9kciwKLSAgICAucmVh ZF9tc3IgICAgICAgICAgICA9IHByaXZfb3BfcmVhZF9tc3IsCi0gICAgLndyaXRlX21zciAgICAg ICAgICAgPSBwcml2X29wX3dyaXRlX21zciwKLSAgICAuY3B1aWQgICAgICAgICAgICAgICA9IHB2 X2VtdWxfY3B1aWQsCi0gICAgLndiaW52ZCAgICAgICAgICAgICAgPSBwcml2X29wX3diaW52ZCwK LX07Ci0KLXN0YXRpYyBpbnQgZW11bGF0ZV9wcml2aWxlZ2VkX29wKHN0cnVjdCBjcHVfdXNlcl9y ZWdzICpyZWdzKQotewotICAgIHN0cnVjdCB2Y3B1ICpjdXJyID0gY3VycmVudDsKLSAgICBzdHJ1 Y3QgZG9tYWluICpjdXJyZCA9IGN1cnItPmRvbWFpbjsKLSAgICBzdHJ1Y3QgcHJpdl9vcF9jdHh0 IGN0eHQgPSB7Ci0gICAgICAgIC5jdHh0LnJlZ3MgPSByZWdzLAotICAgICAgICAuY3R4dC52ZW5k b3IgPSBjdXJyZC0+YXJjaC5jcHVpZC0+eDg2X3ZlbmRvciwKLSAgICAgICAgLmN0eHQubG1hID0g IWlzX3B2XzMyYml0X2RvbWFpbihjdXJyZCksCi0gICAgfTsKLSAgICBpbnQgcmM7Ci0gICAgdW5z aWduZWQgaW50IGVmbGFncywgYXI7Ci0KLSAgICBpZiAoICFwdl9lbXVsX3JlYWRfZGVzY3JpcHRv cihyZWdzLT5jcywgY3VyciwgJmN0eHQuY3MuYmFzZSwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAmY3R4dC5jcy5saW1pdCwgJmFyLCAxKSB8fAotICAgICAgICAgIShhciAmIF9T RUdNRU5UX1MpIHx8Ci0gICAgICAgICAhKGFyICYgX1NFR01FTlRfUCkgfHwKLSAgICAgICAgICEo YXIgJiBfU0VHTUVOVF9DT0RFKSApCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgLyogTWlycm9y IHZpcnR1YWxpemVkIHN0YXRlIGludG8gRUZMQUdTLiAqLwotICAgIEFTU0VSVChyZWdzLT5lZmxh Z3MgJiBYODZfRUZMQUdTX0lGKTsKLSAgICBpZiAoIHZjcHVfaW5mbyhjdXJyLCBldnRjaG5fdXBj YWxsX21hc2spICkKLSAgICAgICAgcmVncy0+ZWZsYWdzICY9IH5YODZfRUZMQUdTX0lGOwotICAg IGVsc2UKLSAgICAgICAgcmVncy0+ZWZsYWdzIHw9IFg4Nl9FRkxBR1NfSUY7Ci0gICAgQVNTRVJU KCEocmVncy0+ZWZsYWdzICYgWDg2X0VGTEFHU19JT1BMKSk7Ci0gICAgcmVncy0+ZWZsYWdzIHw9 IGN1cnItPmFyY2gucHZfdmNwdS5pb3BsOwotICAgIGVmbGFncyA9IHJlZ3MtPmVmbGFnczsKLQot ICAgIGN0eHQuY3R4dC5hZGRyX3NpemUgPSBhciAmIF9TRUdNRU5UX0wgPyA2NCA6IGFyICYgX1NF R01FTlRfREIgPyAzMiA6IDE2OwotICAgIC8qIExlYXZlIHplcm8gaW4gY3R4dC5jdHh0LnNwX3Np emUsIGFzIGl0J3Mgbm90IG5lZWRlZC4gKi8KLSAgICByYyA9IHg4Nl9lbXVsYXRlKCZjdHh0LmN0 eHQsICZwcml2X29wX29wcyk7Ci0KLSAgICBpZiAoIGN0eHQuaW9fZW11bF9zdHViICkKLSAgICAg ICAgdW5tYXBfZG9tYWluX3BhZ2UoY3R4dC5pb19lbXVsX3N0dWIpOwotCi0gICAgLyoKLSAgICAg KiBVbi1taXJyb3IgdmlydHVhbGl6ZWQgc3RhdGUgZnJvbSBFRkxBR1MuCi0gICAgICogTm90aGlu ZyB3ZSBhbGxvdyB0byBiZSBlbXVsYXRlZCBjYW4gY2hhbmdlIGFueXRoaW5nIG90aGVyIHRoYW4g dGhlCi0gICAgICogYXJpdGhtZXRpYyBiaXRzLCBhbmQgdGhlIHJlc3VtZSBmbGFnLgotICAgICAq LwotICAgIEFTU0VSVCghKChyZWdzLT5lZmxhZ3MgXiBlZmxhZ3MpICYKLSAgICAgICAgICAgICB+ KFg4Nl9FRkxBR1NfUkYgfCBYODZfRUZMQUdTX0FSSVRIX01BU0spKSk7Ci0gICAgcmVncy0+ZWZs YWdzIHw9IFg4Nl9FRkxBR1NfSUY7Ci0gICAgcmVncy0+ZWZsYWdzICY9IH5YODZfRUZMQUdTX0lP UEw7Ci0KLSAgICBzd2l0Y2ggKCByYyApCi0gICAgewotICAgIGNhc2UgWDg2RU1VTF9PS0FZOgot ICAgICAgICBpZiAoIGN0eHQudHNjICYgVFNDX0JBU0UgKQotICAgICAgICB7Ci0gICAgICAgICAg ICBpZiAoIGN0eHQudHNjICYgVFNDX0FVWCApCi0gICAgICAgICAgICAgICAgcHZfc29mdF9yZHRz YyhjdXJyLCByZWdzLCAxKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKCBjdXJyZC0+YXJjaC52dHNj ICkKLSAgICAgICAgICAgICAgICBwdl9zb2Z0X3JkdHNjKGN1cnIsIHJlZ3MsIDApOwotICAgICAg ICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG1zcl9zcGxpdChyZWdzLCByZHRzYygpKTsKLSAg ICAgICAgfQotCi0gICAgICAgIGlmICggY3R4dC5jdHh0LnJldGlyZS5zaW5nbGVzdGVwICkKLSAg ICAgICAgICAgIGN0eHQuYnBtYXRjaCB8PSBEUl9TVEVQOwotICAgICAgICBpZiAoIGN0eHQuYnBt YXRjaCApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGN1cnItPmFyY2guZGVidWdyZWdbNl0gfD0g Y3R4dC5icG1hdGNoIHwgRFJfU1RBVFVTX1JFU0VSVkVEX09ORTsKLSAgICAgICAgICAgIGlmICgg IShjdXJyLT5hcmNoLnB2X3ZjcHUudHJhcF9ib3VuY2UuZmxhZ3MgJiBUQkZfRVhDRVBUSU9OKSAp Ci0gICAgICAgICAgICAgICAgcHZfaW5qZWN0X2h3X2V4Y2VwdGlvbihUUkFQX2RlYnVnLCBYODZf RVZFTlRfTk9fRUMpOwotICAgICAgICB9Ci0gICAgICAgIC8qIGZhbGwgdGhyb3VnaCAqLwotICAg IGNhc2UgWDg2RU1VTF9SRVRSWToKLSAgICAgICAgcmV0dXJuIEVYQ1JFVF9mYXVsdF9maXhlZDsK LQotICAgIGNhc2UgWDg2RU1VTF9FWENFUFRJT046Ci0gICAgICAgIHB2X2luamVjdF9ldmVudCgm Y3R4dC5jdHh0LmV2ZW50KTsKLSAgICAgICAgcmV0dXJuIEVYQ1JFVF9mYXVsdF9maXhlZDsKLSAg ICB9Ci0KLSAgICByZXR1cm4gMDsKLX0KLQogc3RhdGljIGlubGluZSBpbnQgY2hlY2tfc3RhY2tf bGltaXQodW5zaWduZWQgaW50IGFyLCB1bnNpZ25lZCBpbnQgbGltaXQsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZXNwLCB1bnNpZ25lZCBpbnQgZGVj cikKIHsKQEAgLTMzODAsNyArMjAyNCw3IEBAIHZvaWQgZG9fZ2VuZXJhbF9wcm90ZWN0aW9uKHN0 cnVjdCBjcHVfdXNlcl9yZWdzICpyZWdzKQogCiAgICAgLyogRW11bGF0ZSBzb21lIHNpbXBsZSBw cml2aWxlZ2VkIGFuZCBJL08gaW5zdHJ1Y3Rpb25zLiAqLwogICAgIGlmICggKHJlZ3MtPmVycm9y X2NvZGUgPT0gMCkgJiYKLSAgICAgICAgIGVtdWxhdGVfcHJpdmlsZWdlZF9vcChyZWdzKSApCisg ICAgICAgICBwdl9lbXVsYXRlX3ByaXZpbGVnZWRfb3AocmVncykgKQogICAgIHsKICAgICAgICAg dHJhY2VfdHJhcF9vbmVfYWRkcihUUkNfUFZfRU1VTEFURV9QUklWT1AsIHJlZ3MtPnJpcCk7CiAg ICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL3hlbi9hcmNoL3g4Ni94ODZfNjQvTWFrZWZpbGUg Yi94ZW4vYXJjaC94ODYveDg2XzY0L01ha2VmaWxlCmluZGV4IGQ4ODE1ZTc4YjAuLmYzMzZhNmFl NjUgMTAwNjQ0Ci0tLSBhL3hlbi9hcmNoL3g4Ni94ODZfNjQvTWFrZWZpbGUKKysrIGIveGVuL2Fy Y2gveDg2L3g4Nl82NC9NYWtlZmlsZQpAQCAtMSw3ICsxLDYgQEAKIHN1YmRpci15ICs9IGNvbXBh dAogCiBvYmotYmluLXkgKz0gZW50cnkubwotb2JqLWJpbi15ICs9IGdwcl9zd2l0Y2gubwogb2Jq LXkgKz0gdHJhcHMubwogb2JqLSQoQ09ORklHX0tFWEVDKSArPSBtYWNoaW5lX2tleGVjLm8KIG9i ai15ICs9IHBjaS5vCmRpZmYgLS1naXQgYS94ZW4vaW5jbHVkZS9hc20teDg2L3B2L3RyYXBzLmgg Yi94ZW4vaW5jbHVkZS9hc20teDg2L3B2L3RyYXBzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwMC4uNWFlYjA2MTU1MQotLS0gL2Rldi9udWxsCisrKyBiL3hlbi9pbmNsdWRl L2FzbS14ODYvcHYvdHJhcHMuaApAQCAtMCwwICsxLDQ2IEBACisvKgorICogcHYvdHJhcHMuaAor ICoKKyAqIFBWIGd1ZXN0IHRyYXBzIGludGVyZmFjZSBkZWZpbml0aW9ucworICoKKyAqIENvcHly aWdodCAoQykgMjAxNyBXZWkgTGl1IDx3ZWkubGl1MkBjaXRyaXguY29tPgorICoKKyAqIFRoaXMg cHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK KyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSwgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhl IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJp YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg dGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgSWYgbm90LCBzZWUgPGh0 dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKyNpZm5kZWYgX19YODZfUFZfVFJB UFNfSF9fCisjZGVmaW5lIF9fWDg2X1BWX1RSQVBTX0hfXworCisjaWZkZWYgQ09ORklHX1BWCisK KyNpbmNsdWRlIDxwdWJsaWMveGVuLmg+CisKK2ludCBwdl9lbXVsYXRlX3ByaXZpbGVnZWRfb3Ao c3RydWN0IGNwdV91c2VyX3JlZ3MgKnJlZ3MpOworCisjZWxzZSAgLyogIUNPTkZJR19QViAqLwor CitpbnQgcHZfZW11bGF0ZV9wcml2aWxlZ2VkX29wKHN0cnVjdCBjcHVfdXNlcl9yZWdzICpyZWdz KSB7IHJldHVybiAwOyB9CisKKyNlbmRpZiAvKiBDT05GSUdfUFYgKi8KKworI2VuZGlmIC8qIF9f WDg2X1BWX1RSQVBTX0hfXyAqLworCisvKgorICogTG9jYWwgdmFyaWFibGVzOgorICogbW9kZTog QworICogYy1maWxlLXN0eWxlOiAiQlNEIgorICogYy1iYXNpYy1vZmZzZXQ6IDQKKyAqIHRhYi13 aWR0aDogNAorICogaW5kZW50LXRhYnMtbW9kZTogbmlsCisgKiBFbmQ6CisgKi8KLS0gCjIuMTEu MAoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClhlbi1k ZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbi5vcmcKaHR0cHM6Ly9saXN0cy54 ZW4ub3JnL3hlbi1kZXZlbAo=