From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrew Cooper Subject: [PATCH 2/5] x86/hvm: Split the hypercall dispatching infrastructure out of hvm.c Date: Mon, 13 Feb 2017 13:03:45 +0000 Message-ID: <1486991028-31097-3-git-send-email-andrew.cooper3@citrix.com> References: <1486991028-31097-1-git-send-email-andrew.cooper3@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1486991028-31097-1-git-send-email-andrew.cooper3@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 , Jan Beulich List-Id: xen-devel@lists.xenproject.org SW50byBhIG5ldyBoeXBlcmNhbGwuYy4gIFRoaXMgaXMgcHVyZWx5IGNvZGUgbW90aW9uLgoKU2ln bmVkLW9mZi1ieTogQW5kcmV3IENvb3BlciA8YW5kcmV3LmNvb3BlcjNAY2l0cml4LmNvbT4KLS0t CkNDOiBKYW4gQmV1bGljaCA8SkJldWxpY2hAc3VzZS5jb20+Ci0tLQogeGVuL2FyY2gveDg2L2h2 bS9NYWtlZmlsZSAgICB8ICAgMSArCiB4ZW4vYXJjaC94ODYvaHZtL2h2bS5jICAgICAgIHwgMjk4 IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiB4ZW4vYXJjaC94ODYvaHZt L2h5cGVyY2FsbC5jIHwgMzMyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysKIDMgZmlsZXMgY2hhbmdlZCwgMzMzIGluc2VydGlvbnMoKyksIDI5OCBkZWxldGlvbnMo LSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCB4ZW4vYXJjaC94ODYvaHZtL2h5cGVyY2FsbC5jCgpkaWZm IC0tZ2l0IGEveGVuL2FyY2gveDg2L2h2bS9NYWtlZmlsZSBiL3hlbi9hcmNoL3g4Ni9odm0vTWFr ZWZpbGUKaW5kZXggNTg2OWQxYi4uZWMwZGFhZSAxMDA2NDQKLS0tIGEveGVuL2FyY2gveDg2L2h2 bS9NYWtlZmlsZQorKysgYi94ZW4vYXJjaC94ODYvaHZtL01ha2VmaWxlCkBAIC02LDYgKzYsNyBA QCBvYmoteSArPSBkbS5vCiBvYmoteSArPSBlbXVsYXRlLm8KIG9iai15ICs9IGhwZXQubwogb2Jq LXkgKz0gaHZtLm8KK29iai15ICs9IGh5cGVyY2FsbC5vCiBvYmoteSArPSBpODI1NC5vCiBvYmot eSArPSBpbnRlcmNlcHQubwogb2JqLXkgKz0gaW8ubwpkaWZmIC0tZ2l0IGEveGVuL2FyY2gveDg2 L2h2bS9odm0uYyBiL3hlbi9hcmNoL3g4Ni9odm0vaHZtLmMKaW5kZXggZTE2NGY1Ny4uMjY2Zjcw OCAxMDA2NDQKLS0tIGEveGVuL2FyY2gveDg2L2h2bS9odm0uYworKysgYi94ZW4vYXJjaC94ODYv aHZtL2h2bS5jCkBAIC0zNzE5LDMwNCArMzcxOSw2IEBAIGVudW0gaHZtX2ludGJsayBodm1faW50 ZXJydXB0X2Jsb2NrZWQoc3RydWN0IHZjcHUgKnYsIHN0cnVjdCBodm1faW50YWNrIGludGFjaykK ICAgICByZXR1cm4gaHZtX2ludGJsa19ub25lOwogfQogCi1zdGF0aWMgaW50IGdyYW50X3RhYmxl X29wX2lzX2FsbG93ZWQodW5zaWduZWQgaW50IGNtZCkKLXsKLSAgICBzd2l0Y2ggKGNtZCkgewot ICAgIGNhc2UgR05UVEFCT1BfcXVlcnlfc2l6ZToKLSAgICBjYXNlIEdOVFRBQk9QX3NldHVwX3Rh YmxlOgotICAgIGNhc2UgR05UVEFCT1Bfc2V0X3ZlcnNpb246Ci0gICAgY2FzZSBHTlRUQUJPUF9n ZXRfdmVyc2lvbjoKLSAgICBjYXNlIEdOVFRBQk9QX2NvcHk6Ci0gICAgY2FzZSBHTlRUQUJPUF9t YXBfZ3JhbnRfcmVmOgotICAgIGNhc2UgR05UVEFCT1BfdW5tYXBfZ3JhbnRfcmVmOgotICAgIGNh c2UgR05UVEFCT1Bfc3dhcF9ncmFudF9yZWY6Ci0gICAgICAgIHJldHVybiAxOwotICAgIGRlZmF1 bHQ6Ci0gICAgICAgIC8qIGFsbCBvdGhlciBjb21tYW5kcyBuZWVkIGF1ZGl0aW5nICovCi0gICAg ICAgIHJldHVybiAwOwotICAgIH0KLX0KLQotc3RhdGljIGxvbmcgaHZtX2dyYW50X3RhYmxlX29w KAotICAgIHVuc2lnbmVkIGludCBjbWQsIFhFTl9HVUVTVF9IQU5ETEVfUEFSQU0odm9pZCkgdW9w LCB1bnNpZ25lZCBpbnQgY291bnQpCi17Ci0gICAgaWYgKCAhZ3JhbnRfdGFibGVfb3BfaXNfYWxs b3dlZChjbWQpICkKLSAgICAgICAgcmV0dXJuIC1FTk9TWVM7IC8qIGFsbCBvdGhlciBjb21tYW5k cyBuZWVkIGF1ZGl0aW5nICovCi0gICAgcmV0dXJuIGRvX2dyYW50X3RhYmxlX29wKGNtZCwgdW9w LCBjb3VudCk7Ci19Ci0KLXN0YXRpYyBsb25nIGh2bV9tZW1vcnlfb3AoaW50IGNtZCwgWEVOX0dV RVNUX0hBTkRMRV9QQVJBTSh2b2lkKSBhcmcpCi17Ci0gICAgbG9uZyByYzsKLQotICAgIHN3aXRj aCAoIGNtZCAmIE1FTU9QX0NNRF9NQVNLICkKLSAgICB7Ci0gICAgY2FzZSBYRU5NRU1fbWFjaGlu ZV9tZW1vcnlfbWFwOgotICAgIGNhc2UgWEVOTUVNX21hY2hwaHlzX21hcHBpbmc6Ci0gICAgICAg IHJldHVybiAtRU5PU1lTOwotICAgIGNhc2UgWEVOTUVNX2RlY3JlYXNlX3Jlc2VydmF0aW9uOgot ICAgICAgICByYyA9IGRvX21lbW9yeV9vcChjbWQsIGFyZyk7Ci0gICAgICAgIGN1cnJlbnQtPmRv bWFpbi0+YXJjaC5odm1fZG9tYWluLnFlbXVfbWFwY2FjaGVfaW52YWxpZGF0ZSA9IDE7Ci0gICAg ICAgIHJldHVybiByYzsKLSAgICB9Ci0gICAgcmV0dXJuIGRvX21lbW9yeV9vcChjbWQsIGFyZyk7 Ci19Ci0KLXN0YXRpYyBsb25nIGh2bV9waHlzZGV2X29wKGludCBjbWQsIFhFTl9HVUVTVF9IQU5E TEVfUEFSQU0odm9pZCkgYXJnKQotewotICAgIHN3aXRjaCAoIGNtZCApCi0gICAgewotICAgIGRl ZmF1bHQ6Ci0gICAgICAgIGlmICggIWlzX3B2aF92Y3B1KGN1cnJlbnQpIHx8ICFpc19oYXJkd2Fy ZV9kb21haW4oY3VycmVudC0+ZG9tYWluKSApCi0gICAgICAgICAgICByZXR1cm4gLUVOT1NZUzsK LSAgICAgICAgLyogZmFsbCB0aHJvdWdoICovCi0gICAgY2FzZSBQSFlTREVWT1BfbWFwX3BpcnE6 Ci0gICAgY2FzZSBQSFlTREVWT1BfdW5tYXBfcGlycToKLSAgICBjYXNlIFBIWVNERVZPUF9lb2k6 Ci0gICAgY2FzZSBQSFlTREVWT1BfaXJxX3N0YXR1c19xdWVyeToKLSAgICBjYXNlIFBIWVNERVZP UF9nZXRfZnJlZV9waXJxOgotICAgICAgICByZXR1cm4gZG9fcGh5c2Rldl9vcChjbWQsIGFyZyk7 Ci0gICAgfQotfQotCi1zdGF0aWMgbG9uZyBodm1fZ3JhbnRfdGFibGVfb3BfY29tcGF0MzIodW5z aWduZWQgaW50IGNtZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBY RU5fR1VFU1RfSEFORExFX1BBUkFNKHZvaWQpIHVvcCwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgY291bnQpCi17Ci0gICAgaWYgKCAhZ3JhbnRf dGFibGVfb3BfaXNfYWxsb3dlZChjbWQpICkKLSAgICAgICAgcmV0dXJuIC1FTk9TWVM7Ci0gICAg cmV0dXJuIGNvbXBhdF9ncmFudF90YWJsZV9vcChjbWQsIHVvcCwgY291bnQpOwotfQotCi1zdGF0 aWMgbG9uZyBodm1fbWVtb3J5X29wX2NvbXBhdDMyKGludCBjbWQsIFhFTl9HVUVTVF9IQU5ETEVf UEFSQU0odm9pZCkgYXJnKQotewotICAgIGludCByYzsKLQotICAgIHN3aXRjaCAoIGNtZCAmIE1F TU9QX0NNRF9NQVNLICkKLSAgICB7Ci0gICAgY2FzZSBYRU5NRU1fbWFjaGluZV9tZW1vcnlfbWFw OgotICAgIGNhc2UgWEVOTUVNX21hY2hwaHlzX21hcHBpbmc6Ci0gICAgICAgIHJldHVybiAtRU5P U1lTOwotICAgIGNhc2UgWEVOTUVNX2RlY3JlYXNlX3Jlc2VydmF0aW9uOgotICAgICAgICByYyA9 IGNvbXBhdF9tZW1vcnlfb3AoY21kLCBhcmcpOwotICAgICAgICBjdXJyZW50LT5kb21haW4tPmFy Y2guaHZtX2RvbWFpbi5xZW11X21hcGNhY2hlX2ludmFsaWRhdGUgPSAxOwotICAgICAgICByZXR1 cm4gcmM7Ci0gICAgfQotICAgIHJldHVybiBjb21wYXRfbWVtb3J5X29wKGNtZCwgYXJnKTsKLX0K LQotc3RhdGljIGxvbmcgaHZtX3BoeXNkZXZfb3BfY29tcGF0MzIoCi0gICAgaW50IGNtZCwgWEVO X0dVRVNUX0hBTkRMRV9QQVJBTSh2b2lkKSBhcmcpCi17Ci0gICAgc3dpdGNoICggY21kICkKLSAg ICB7Ci0gICAgICAgIGNhc2UgUEhZU0RFVk9QX21hcF9waXJxOgotICAgICAgICBjYXNlIFBIWVNE RVZPUF91bm1hcF9waXJxOgotICAgICAgICBjYXNlIFBIWVNERVZPUF9lb2k6Ci0gICAgICAgIGNh c2UgUEhZU0RFVk9QX2lycV9zdGF0dXNfcXVlcnk6Ci0gICAgICAgIGNhc2UgUEhZU0RFVk9QX2dl dF9mcmVlX3BpcnE6Ci0gICAgICAgICAgICByZXR1cm4gY29tcGF0X3BoeXNkZXZfb3AoY21kLCBh cmcpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIC1F Tk9TWVM7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotI2RlZmluZSBIWVBFUkNBTEwoeCkg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBbIF9fSFlQRVJW SVNPUl8gIyMgeCBdID0geyAoaHlwZXJjYWxsX2ZuX3QgKikgZG9fICMjIHgsICBcCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKGh5cGVyY2FsbF9mbl90ICopIGRvXyAjIyB4IH0KLQot I2RlZmluZSBDT01QQVRfQ0FMTCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKLSAgICBbIF9fSFlQRVJWSVNPUl8gIyMgeCBdID0geyAoaHlwZXJjYWxsX2ZuX3QgKikg ZG9fICMjIHgsICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGh5cGVyY2FsbF9m bl90ICopIGNvbXBhdF8gIyMgeCB9Ci0KLSNkZWZpbmUgZG9fbWVtb3J5X29wICAgICAgICAgIGh2 bV9tZW1vcnlfb3AKLSNkZWZpbmUgY29tcGF0X21lbW9yeV9vcCAgICAgIGh2bV9tZW1vcnlfb3Bf Y29tcGF0MzIKLSNkZWZpbmUgZG9fcGh5c2Rldl9vcCAgICAgICAgIGh2bV9waHlzZGV2X29wCi0j ZGVmaW5lIGNvbXBhdF9waHlzZGV2X29wICAgICBodm1fcGh5c2Rldl9vcF9jb21wYXQzMgotI2Rl ZmluZSBkb19ncmFudF90YWJsZV9vcCAgICAgaHZtX2dyYW50X3RhYmxlX29wCi0jZGVmaW5lIGNv bXBhdF9ncmFudF90YWJsZV9vcCBodm1fZ3JhbnRfdGFibGVfb3BfY29tcGF0MzIKLSNkZWZpbmUg ZG9fYXJjaF8xICAgICAgICAgICAgIHBhZ2luZ19kb21jdGxfY29udGludWF0aW9uCi0KLXN0YXRp YyBjb25zdCBoeXBlcmNhbGxfdGFibGVfdCBodm1faHlwZXJjYWxsX3RhYmxlW10gPSB7Ci0gICAg Q09NUEFUX0NBTEwobWVtb3J5X29wKSwKLSAgICBDT01QQVRfQ0FMTChncmFudF90YWJsZV9vcCks Ci0gICAgQ09NUEFUX0NBTEwodmNwdV9vcCksCi0gICAgQ09NUEFUX0NBTEwocGh5c2Rldl9vcCks Ci0gICAgQ09NUEFUX0NBTEwoeGVuX3ZlcnNpb24pLAotICAgIEhZUEVSQ0FMTChjb25zb2xlX2lv KSwKLSAgICBIWVBFUkNBTEwoZXZlbnRfY2hhbm5lbF9vcCksCi0gICAgQ09NUEFUX0NBTEwoc2No ZWRfb3ApLAotICAgIENPTVBBVF9DQUxMKHNldF90aW1lcl9vcCksCi0gICAgSFlQRVJDQUxMKHhz bV9vcCksCi0gICAgSFlQRVJDQUxMKGh2bV9vcCksCi0gICAgSFlQRVJDQUxMKHN5c2N0bCksCi0g ICAgSFlQRVJDQUxMKGRvbWN0bCksCi0jaWZkZWYgQ09ORklHX1RNRU0KLSAgICBIWVBFUkNBTEwo dG1lbV9vcCksCi0jZW5kaWYKLSAgICBDT01QQVRfQ0FMTChwbGF0Zm9ybV9vcCksCi0gICAgQ09N UEFUX0NBTEwobW11ZXh0X29wKSwKLSAgICBIWVBFUkNBTEwoeGVucG11X29wKSwKLSAgICBDT01Q QVRfQ0FMTChkbV9vcCksCi0gICAgSFlQRVJDQUxMKGFyY2hfMSkKLX07Ci0KLSN1bmRlZiBkb19t ZW1vcnlfb3AKLSN1bmRlZiBjb21wYXRfbWVtb3J5X29wCi0jdW5kZWYgZG9fcGh5c2Rldl9vcAot I3VuZGVmIGNvbXBhdF9waHlzZGV2X29wCi0jdW5kZWYgZG9fZ3JhbnRfdGFibGVfb3AKLSN1bmRl ZiBjb21wYXRfZ3JhbnRfdGFibGVfb3AKLSN1bmRlZiBkb19hcmNoXzEKLQotI3VuZGVmIEhZUEVS Q0FMTAotI3VuZGVmIENPTVBBVF9DQUxMCi0KLWJvb2wgaHZtX2h5cGVyY2FsbChzdHJ1Y3QgY3B1 X3VzZXJfcmVncyAqcmVncykKLXsKLSAgICBzdHJ1Y3QgdmNwdSAqY3VyciA9IGN1cnJlbnQ7Ci0g ICAgc3RydWN0IGRvbWFpbiAqY3VycmQgPSBjdXJyLT5kb21haW47Ci0gICAgaW50IG1vZGUgPSBo dm1fZ3Vlc3RfeDg2X21vZGUoY3Vycik7Ci0gICAgdW5zaWduZWQgbG9uZyBlYXggPSByZWdzLT5f ZWF4OwotCi0gICAgc3dpdGNoICggbW9kZSApCi0gICAgewotICAgIGNhc2UgODoKLSAgICAgICAg ZWF4ID0gcmVncy0+cmF4OwotICAgICAgICAvKiBGYWxsdGhyb3VnaCB0byBwZXJtaXNzaW9uIGNo ZWNrLiAqLwotICAgIGNhc2UgNDoKLSAgICBjYXNlIDI6Ci0gICAgICAgIGlmICggdW5saWtlbHko aHZtX2dldF9jcGwoY3VycikpICkKLSAgICAgICAgewotICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg ICByZWdzLT5yYXggPSAtRVBFUk07Ci0gICAgICAgICAgICByZXR1cm4gSFZNX0hDQUxMX2NvbXBs ZXRlZDsKLSAgICAgICAgfQotICAgIGNhc2UgMDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0g ICAgaWYgKCAoZWF4ICYgMHg4MDAwMDAwMCkgJiYgaXNfdmlyaWRpYW5fZG9tYWluKGN1cnJkKSAp Ci0gICAgICAgIHJldHVybiB2aXJpZGlhbl9oeXBlcmNhbGwocmVncyk7Ci0KLSAgICBCVUlMRF9C VUdfT04oQVJSQVlfU0laRShodm1faHlwZXJjYWxsX3RhYmxlKSA+Ci0gICAgICAgICAgICAgICAg IEFSUkFZX1NJWkUoaHlwZXJjYWxsX2FyZ3NfdGFibGUpKTsKLQotICAgIGlmICggKGVheCA+PSBB UlJBWV9TSVpFKGh2bV9oeXBlcmNhbGxfdGFibGUpKSB8fAotICAgICAgICAgIWh2bV9oeXBlcmNh bGxfdGFibGVbZWF4XS5uYXRpdmUgKQotICAgIHsKLSAgICAgICAgcmVncy0+cmF4ID0gLUVOT1NZ UzsKLSAgICAgICAgcmV0dXJuIEhWTV9IQ0FMTF9jb21wbGV0ZWQ7Ci0gICAgfQotCi0gICAgY3Vy ci0+YXJjaC5odm1fdmNwdS5oY2FsbF9wcmVlbXB0ZWQgPSAwOwotCi0gICAgaWYgKCBtb2RlID09 IDggKQotICAgIHsKLSAgICAgICAgdW5zaWduZWQgbG9uZyByZGkgPSByZWdzLT5yZGk7Ci0gICAg ICAgIHVuc2lnbmVkIGxvbmcgcnNpID0gcmVncy0+cnNpOwotICAgICAgICB1bnNpZ25lZCBsb25n IHJkeCA9IHJlZ3MtPnJkeDsKLSAgICAgICAgdW5zaWduZWQgbG9uZyByMTAgPSByZWdzLT5yMTA7 Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgcjggPSByZWdzLT5yODsKLSAgICAgICAgdW5zaWduZWQg bG9uZyByOSA9IHJlZ3MtPnI5OwotCi0gICAgICAgIEhWTV9EQkdfTE9HKERCR19MRVZFTF9IQ0FM TCwgImhjYWxsJWx1KCVseCwgJWx4LCAlbHgsICVseCwgJWx4LCAlbHgpIiwKLSAgICAgICAgICAg ICAgICAgICAgZWF4LCByZGksIHJzaSwgcmR4LCByMTAsIHI4LCByOSk7Ci0KLSNpZm5kZWYgTkRF QlVHCi0gICAgICAgIC8qIERlbGliZXJhdGVseSBjb3JydXB0IHBhcmFtZXRlciByZWdzIG5vdCB1 c2VkIGJ5IHRoaXMgaHlwZXJjYWxsLiAqLwotICAgICAgICBzd2l0Y2ggKCBoeXBlcmNhbGxfYXJn c190YWJsZVtlYXhdLm5hdGl2ZSApCi0gICAgICAgIHsKLSAgICAgICAgY2FzZSAwOiByZGkgPSAw eGRlYWRiZWVmZGVhZGYwMGRVTDsKLSAgICAgICAgY2FzZSAxOiByc2kgPSAweGRlYWRiZWVmZGVh ZGYwMGRVTDsKLSAgICAgICAgY2FzZSAyOiByZHggPSAweGRlYWRiZWVmZGVhZGYwMGRVTDsKLSAg ICAgICAgY2FzZSAzOiByMTAgPSAweGRlYWRiZWVmZGVhZGYwMGRVTDsKLSAgICAgICAgY2FzZSA0 OiByOCA9IDB4ZGVhZGJlZWZkZWFkZjAwZFVMOwotICAgICAgICBjYXNlIDU6IHI5ID0gMHhkZWFk YmVlZmRlYWRmMDBkVUw7Ci0gICAgICAgIH0KLSNlbmRpZgotCi0gICAgICAgIGN1cnItPmFyY2gu aHZtX3ZjcHUuaGNhbGxfNjRiaXQgPSAxOwotICAgICAgICByZWdzLT5yYXggPSBodm1faHlwZXJj YWxsX3RhYmxlW2VheF0ubmF0aXZlKHJkaSwgcnNpLCByZHgsIHIxMCwgcjgsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcjkpOwotCi0gICAgICAg IGN1cnItPmFyY2guaHZtX3ZjcHUuaGNhbGxfNjRiaXQgPSAwOwotCi0jaWZuZGVmIE5ERUJVRwot ICAgICAgICBpZiAoICFjdXJyLT5hcmNoLmh2bV92Y3B1LmhjYWxsX3ByZWVtcHRlZCApCi0gICAg ICAgIHsKLSAgICAgICAgICAgIC8qIERlbGliZXJhdGVseSBjb3JydXB0IHBhcmFtZXRlciByZWdz IHVzZWQgYnkgdGhpcyBoeXBlcmNhbGwuICovCi0gICAgICAgICAgICBzd2l0Y2ggKCBoeXBlcmNh bGxfYXJnc190YWJsZVtlYXhdLm5hdGl2ZSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICBj YXNlIDY6IHJlZ3MtPnI5ICA9IDB4ZGVhZGJlZWZkZWFkZjAwZFVMOwotICAgICAgICAgICAgY2Fz ZSA1OiByZWdzLT5yOCAgPSAweGRlYWRiZWVmZGVhZGYwMGRVTDsKLSAgICAgICAgICAgIGNhc2Ug NDogcmVncy0+cjEwID0gMHhkZWFkYmVlZmRlYWRmMDBkVUw7Ci0gICAgICAgICAgICBjYXNlIDM6 IHJlZ3MtPnJkeCA9IDB4ZGVhZGJlZWZkZWFkZjAwZFVMOwotICAgICAgICAgICAgY2FzZSAyOiBy ZWdzLT5yc2kgPSAweGRlYWRiZWVmZGVhZGYwMGRVTDsKLSAgICAgICAgICAgIGNhc2UgMTogcmVn cy0+cmRpID0gMHhkZWFkYmVlZmRlYWRmMDBkVUw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K LSNlbmRpZgotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICB1bnNpZ25lZCBpbnQgZWJ4 ID0gcmVncy0+X2VieDsKLSAgICAgICAgdW5zaWduZWQgaW50IGVjeCA9IHJlZ3MtPl9lY3g7Ci0g ICAgICAgIHVuc2lnbmVkIGludCBlZHggPSByZWdzLT5fZWR4OwotICAgICAgICB1bnNpZ25lZCBp bnQgZXNpID0gcmVncy0+X2VzaTsKLSAgICAgICAgdW5zaWduZWQgaW50IGVkaSA9IHJlZ3MtPl9l ZGk7Ci0gICAgICAgIHVuc2lnbmVkIGludCBlYnAgPSByZWdzLT5fZWJwOwotCi0gICAgICAgIEhW TV9EQkdfTE9HKERCR19MRVZFTF9IQ0FMTCwgImhjYWxsJWx1KCV4LCAleCwgJXgsICV4LCAleCwg JXgpIiwgZWF4LAotICAgICAgICAgICAgICAgICAgICBlYngsIGVjeCwgZWR4LCBlc2ksIGVkaSwg ZWJwKTsKLQotI2lmbmRlZiBOREVCVUcKLSAgICAgICAgLyogRGVsaWJlcmF0ZWx5IGNvcnJ1cHQg cGFyYW1ldGVyIHJlZ3Mgbm90IHVzZWQgYnkgdGhpcyBoeXBlcmNhbGwuICovCi0gICAgICAgIHN3 aXRjaCAoIGh5cGVyY2FsbF9hcmdzX3RhYmxlW2VheF0uY29tcGF0ICkKLSAgICAgICAgewotICAg ICAgICBjYXNlIDA6IGVieCA9IDB4ZGVhZGYwMGQ7Ci0gICAgICAgIGNhc2UgMTogZWN4ID0gMHhk ZWFkZjAwZDsKLSAgICAgICAgY2FzZSAyOiBlZHggPSAweGRlYWRmMDBkOwotICAgICAgICBjYXNl IDM6IGVzaSA9IDB4ZGVhZGYwMGQ7Ci0gICAgICAgIGNhc2UgNDogZWRpID0gMHhkZWFkZjAwZDsK LSAgICAgICAgY2FzZSA1OiBlYnAgPSAweGRlYWRmMDBkOwotICAgICAgICB9Ci0jZW5kaWYKLQot ICAgICAgICByZWdzLT5yYXggPSBodm1faHlwZXJjYWxsX3RhYmxlW2VheF0uY29tcGF0KGVieCwg ZWN4LCBlZHgsIGVzaSwgZWRpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGVicCk7Ci0KLSNpZm5kZWYgTkRFQlVHCi0gICAgICAgIGlmICggIWN1 cnItPmFyY2guaHZtX3ZjcHUuaGNhbGxfcHJlZW1wdGVkICkKLSAgICAgICAgewotICAgICAgICAg ICAgLyogRGVsaWJlcmF0ZWx5IGNvcnJ1cHQgcGFyYW1ldGVyIHJlZ3MgdXNlZCBieSB0aGlzIGh5 cGVyY2FsbC4gKi8KLSAgICAgICAgICAgIHN3aXRjaCAoIGh5cGVyY2FsbF9hcmdzX3RhYmxlW2Vh eF0uY29tcGF0ICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIGNhc2UgNjogcmVncy0+cmJw ID0gMHhkZWFkZjAwZDsKLSAgICAgICAgICAgIGNhc2UgNTogcmVncy0+cmRpID0gMHhkZWFkZjAw ZDsKLSAgICAgICAgICAgIGNhc2UgNDogcmVncy0+cnNpID0gMHhkZWFkZjAwZDsKLSAgICAgICAg ICAgIGNhc2UgMzogcmVncy0+cmR4ID0gMHhkZWFkZjAwZDsKLSAgICAgICAgICAgIGNhc2UgMjog cmVncy0+cmN4ID0gMHhkZWFkZjAwZDsKLSAgICAgICAgICAgIGNhc2UgMTogcmVncy0+cmJ4ID0g MHhkZWFkZjAwZDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotI2VuZGlmCi0gICAgfQotCi0g ICAgSFZNX0RCR19MT0coREJHX0xFVkVMX0hDQUxMLCAiaGNhbGwlbHUgLT4gJWx4IiwgZWF4LCBy ZWdzLT5yYXgpOwotCi0gICAgaWYgKCBjdXJyLT5hcmNoLmh2bV92Y3B1LmhjYWxsX3ByZWVtcHRl ZCApCi0gICAgICAgIHJldHVybiBIVk1fSENBTExfcHJlZW1wdGVkOwotCi0gICAgaWYgKCB1bmxp a2VseShjdXJyZC0+YXJjaC5odm1fZG9tYWluLnFlbXVfbWFwY2FjaGVfaW52YWxpZGF0ZSkgJiYK LSAgICAgICAgIHRlc3RfYW5kX2NsZWFyX2Jvb2woY3VycmQtPmFyY2guaHZtX2RvbWFpbi5xZW11 X21hcGNhY2hlX2ludmFsaWRhdGUpICkKLSAgICAgICAgc2VuZF9pbnZhbGlkYXRlX3JlcSgpOwot Ci0gICAgcmV0dXJuIEhWTV9IQ0FMTF9jb21wbGV0ZWQ7Ci19Ci0KIHN0YXRpYyB2b2lkIGh2bV9s YXRjaF9zaGluZm9fc2l6ZShzdHJ1Y3QgZG9tYWluICpkKQogewogICAgIC8qCmRpZmYgLS1naXQg YS94ZW4vYXJjaC94ODYvaHZtL2h5cGVyY2FsbC5jIGIveGVuL2FyY2gveDg2L2h2bS9oeXBlcmNh bGwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMWJkMTZkCi0tLSAvZGV2 L251bGwKKysrIGIveGVuL2FyY2gveDg2L2h2bS9oeXBlcmNhbGwuYwpAQCAtMCwwICsxLDMzMiBA QAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKgorICogYXJjaC9odm0vaHlwZXJjYWxsLmMKKyAqCisg KiBIVk0gaHlwZXJjYWxsIGRpc3BhdGNoaW5nIHJvdXRpbmVzCisgKgorICogVGhpcyBwcm9ncmFt IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkK KyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug YXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIg dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0 ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQg aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg KiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9y Zy9saWNlbnNlcy8+LgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNyBDaXRyaXggU3lzdGVtcyBM dGQuCisgKi8KKyNpbmNsdWRlIDx4ZW4vbGliLmg+CisjaW5jbHVkZSA8eGVuL2h5cGVyY2FsbC5o PgorCisjaW5jbHVkZSA8YXNtL2h2bS9zdXBwb3J0Lmg+CisKK3N0YXRpYyBpbnQgZ3JhbnRfdGFi bGVfb3BfaXNfYWxsb3dlZCh1bnNpZ25lZCBpbnQgY21kKQoreworICAgIHN3aXRjaCAoY21kKSB7 CisgICAgY2FzZSBHTlRUQUJPUF9xdWVyeV9zaXplOgorICAgIGNhc2UgR05UVEFCT1Bfc2V0dXBf dGFibGU6CisgICAgY2FzZSBHTlRUQUJPUF9zZXRfdmVyc2lvbjoKKyAgICBjYXNlIEdOVFRBQk9Q X2dldF92ZXJzaW9uOgorICAgIGNhc2UgR05UVEFCT1BfY29weToKKyAgICBjYXNlIEdOVFRBQk9Q X21hcF9ncmFudF9yZWY6CisgICAgY2FzZSBHTlRUQUJPUF91bm1hcF9ncmFudF9yZWY6CisgICAg Y2FzZSBHTlRUQUJPUF9zd2FwX2dyYW50X3JlZjoKKyAgICAgICAgcmV0dXJuIDE7CisgICAgZGVm YXVsdDoKKyAgICAgICAgLyogYWxsIG90aGVyIGNvbW1hbmRzIG5lZWQgYXVkaXRpbmcgKi8KKyAg ICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCitzdGF0aWMgbG9uZyBodm1fZ3JhbnRfdGFibGVf b3AoCisgICAgdW5zaWduZWQgaW50IGNtZCwgWEVOX0dVRVNUX0hBTkRMRV9QQVJBTSh2b2lkKSB1 b3AsIHVuc2lnbmVkIGludCBjb3VudCkKK3sKKyAgICBpZiAoICFncmFudF90YWJsZV9vcF9pc19h bGxvd2VkKGNtZCkgKQorICAgICAgICByZXR1cm4gLUVOT1NZUzsgLyogYWxsIG90aGVyIGNvbW1h bmRzIG5lZWQgYXVkaXRpbmcgKi8KKyAgICByZXR1cm4gZG9fZ3JhbnRfdGFibGVfb3AoY21kLCB1 b3AsIGNvdW50KTsKK30KKworc3RhdGljIGxvbmcgaHZtX21lbW9yeV9vcChpbnQgY21kLCBYRU5f R1VFU1RfSEFORExFX1BBUkFNKHZvaWQpIGFyZykKK3sKKyAgICBsb25nIHJjOworCisgICAgc3dp dGNoICggY21kICYgTUVNT1BfQ01EX01BU0sgKQorICAgIHsKKyAgICBjYXNlIFhFTk1FTV9tYWNo aW5lX21lbW9yeV9tYXA6CisgICAgY2FzZSBYRU5NRU1fbWFjaHBoeXNfbWFwcGluZzoKKyAgICAg ICAgcmV0dXJuIC1FTk9TWVM7CisgICAgY2FzZSBYRU5NRU1fZGVjcmVhc2VfcmVzZXJ2YXRpb246 CisgICAgICAgIHJjID0gZG9fbWVtb3J5X29wKGNtZCwgYXJnKTsKKyAgICAgICAgY3VycmVudC0+ ZG9tYWluLT5hcmNoLmh2bV9kb21haW4ucWVtdV9tYXBjYWNoZV9pbnZhbGlkYXRlID0gMTsKKyAg ICAgICAgcmV0dXJuIHJjOworICAgIH0KKyAgICByZXR1cm4gZG9fbWVtb3J5X29wKGNtZCwgYXJn KTsKK30KKworc3RhdGljIGxvbmcgaHZtX3BoeXNkZXZfb3AoaW50IGNtZCwgWEVOX0dVRVNUX0hB TkRMRV9QQVJBTSh2b2lkKSBhcmcpCit7CisgICAgc3dpdGNoICggY21kICkKKyAgICB7CisgICAg ZGVmYXVsdDoKKyAgICAgICAgaWYgKCAhaXNfcHZoX3ZjcHUoY3VycmVudCkgfHwgIWlzX2hhcmR3 YXJlX2RvbWFpbihjdXJyZW50LT5kb21haW4pICkKKyAgICAgICAgICAgIHJldHVybiAtRU5PU1lT OworICAgICAgICAvKiBmYWxsIHRocm91Z2ggKi8KKyAgICBjYXNlIFBIWVNERVZPUF9tYXBfcGly cToKKyAgICBjYXNlIFBIWVNERVZPUF91bm1hcF9waXJxOgorICAgIGNhc2UgUEhZU0RFVk9QX2Vv aToKKyAgICBjYXNlIFBIWVNERVZPUF9pcnFfc3RhdHVzX3F1ZXJ5OgorICAgIGNhc2UgUEhZU0RF Vk9QX2dldF9mcmVlX3BpcnE6CisgICAgICAgIHJldHVybiBkb19waHlzZGV2X29wKGNtZCwgYXJn KTsKKyAgICB9Cit9CisKK3N0YXRpYyBsb25nIGh2bV9ncmFudF90YWJsZV9vcF9jb21wYXQzMih1 bnNpZ25lZCBpbnQgY21kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFhFTl9HVUVTVF9IQU5ETEVfUEFSQU0odm9pZCkgdW9wLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBjb3VudCkKK3sKKyAgICBpZiAoICFncmFu dF90YWJsZV9vcF9pc19hbGxvd2VkKGNtZCkgKQorICAgICAgICByZXR1cm4gLUVOT1NZUzsKKyAg ICByZXR1cm4gY29tcGF0X2dyYW50X3RhYmxlX29wKGNtZCwgdW9wLCBjb3VudCk7Cit9CisKK3N0 YXRpYyBsb25nIGh2bV9tZW1vcnlfb3BfY29tcGF0MzIoaW50IGNtZCwgWEVOX0dVRVNUX0hBTkRM RV9QQVJBTSh2b2lkKSBhcmcpCit7CisgICAgaW50IHJjOworCisgICAgc3dpdGNoICggY21kICYg TUVNT1BfQ01EX01BU0sgKQorICAgIHsKKyAgICBjYXNlIFhFTk1FTV9tYWNoaW5lX21lbW9yeV9t YXA6CisgICAgY2FzZSBYRU5NRU1fbWFjaHBoeXNfbWFwcGluZzoKKyAgICAgICAgcmV0dXJuIC1F Tk9TWVM7CisgICAgY2FzZSBYRU5NRU1fZGVjcmVhc2VfcmVzZXJ2YXRpb246CisgICAgICAgIHJj ID0gY29tcGF0X21lbW9yeV9vcChjbWQsIGFyZyk7CisgICAgICAgIGN1cnJlbnQtPmRvbWFpbi0+ YXJjaC5odm1fZG9tYWluLnFlbXVfbWFwY2FjaGVfaW52YWxpZGF0ZSA9IDE7CisgICAgICAgIHJl dHVybiByYzsKKyAgICB9CisgICAgcmV0dXJuIGNvbXBhdF9tZW1vcnlfb3AoY21kLCBhcmcpOwor fQorCitzdGF0aWMgbG9uZyBodm1fcGh5c2Rldl9vcF9jb21wYXQzMigKKyAgICBpbnQgY21kLCBY RU5fR1VFU1RfSEFORExFX1BBUkFNKHZvaWQpIGFyZykKK3sKKyAgICBzd2l0Y2ggKCBjbWQgKQor ICAgIHsKKyAgICAgICAgY2FzZSBQSFlTREVWT1BfbWFwX3BpcnE6CisgICAgICAgIGNhc2UgUEhZ U0RFVk9QX3VubWFwX3BpcnE6CisgICAgICAgIGNhc2UgUEhZU0RFVk9QX2VvaToKKyAgICAgICAg Y2FzZSBQSFlTREVWT1BfaXJxX3N0YXR1c19xdWVyeToKKyAgICAgICAgY2FzZSBQSFlTREVWT1Bf Z2V0X2ZyZWVfcGlycToKKyAgICAgICAgICAgIHJldHVybiBjb21wYXRfcGh5c2Rldl9vcChjbWQs IGFyZyk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4g LUVOT1NZUzsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCisjZGVmaW5lIEhZUEVSQ0FMTCh4 KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIFsgX19IWVBF UlZJU09SXyAjIyB4IF0gPSB7IChoeXBlcmNhbGxfZm5fdCAqKSBkb18gIyMgeCwgIFwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAoaHlwZXJjYWxsX2ZuX3QgKikgZG9fICMjIHggfQor CisjZGVmaW5lIENPTVBBVF9DQUxMKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAorICAgIFsgX19IWVBFUlZJU09SXyAjIyB4IF0gPSB7IChoeXBlcmNhbGxfZm5fdCAq KSBkb18gIyMgeCwgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaHlwZXJjYWxs X2ZuX3QgKikgY29tcGF0XyAjIyB4IH0KKworI2RlZmluZSBkb19tZW1vcnlfb3AgICAgICAgICAg aHZtX21lbW9yeV9vcAorI2RlZmluZSBjb21wYXRfbWVtb3J5X29wICAgICAgaHZtX21lbW9yeV9v cF9jb21wYXQzMgorI2RlZmluZSBkb19waHlzZGV2X29wICAgICAgICAgaHZtX3BoeXNkZXZfb3AK KyNkZWZpbmUgY29tcGF0X3BoeXNkZXZfb3AgICAgIGh2bV9waHlzZGV2X29wX2NvbXBhdDMyCisj ZGVmaW5lIGRvX2dyYW50X3RhYmxlX29wICAgICBodm1fZ3JhbnRfdGFibGVfb3AKKyNkZWZpbmUg Y29tcGF0X2dyYW50X3RhYmxlX29wIGh2bV9ncmFudF90YWJsZV9vcF9jb21wYXQzMgorI2RlZmlu ZSBkb19hcmNoXzEgICAgICAgICAgICAgcGFnaW5nX2RvbWN0bF9jb250aW51YXRpb24KKworc3Rh dGljIGNvbnN0IGh5cGVyY2FsbF90YWJsZV90IGh2bV9oeXBlcmNhbGxfdGFibGVbXSA9IHsKKyAg ICBDT01QQVRfQ0FMTChtZW1vcnlfb3ApLAorICAgIENPTVBBVF9DQUxMKGdyYW50X3RhYmxlX29w KSwKKyAgICBDT01QQVRfQ0FMTCh2Y3B1X29wKSwKKyAgICBDT01QQVRfQ0FMTChwaHlzZGV2X29w KSwKKyAgICBDT01QQVRfQ0FMTCh4ZW5fdmVyc2lvbiksCisgICAgSFlQRVJDQUxMKGNvbnNvbGVf aW8pLAorICAgIEhZUEVSQ0FMTChldmVudF9jaGFubmVsX29wKSwKKyAgICBDT01QQVRfQ0FMTChz Y2hlZF9vcCksCisgICAgQ09NUEFUX0NBTEwoc2V0X3RpbWVyX29wKSwKKyAgICBIWVBFUkNBTEwo eHNtX29wKSwKKyAgICBIWVBFUkNBTEwoaHZtX29wKSwKKyAgICBIWVBFUkNBTEwoc3lzY3RsKSwK KyAgICBIWVBFUkNBTEwoZG9tY3RsKSwKKyNpZmRlZiBDT05GSUdfVE1FTQorICAgIEhZUEVSQ0FM TCh0bWVtX29wKSwKKyNlbmRpZgorICAgIENPTVBBVF9DQUxMKHBsYXRmb3JtX29wKSwKKyAgICBD T01QQVRfQ0FMTChtbXVleHRfb3ApLAorICAgIEhZUEVSQ0FMTCh4ZW5wbXVfb3ApLAorICAgIENP TVBBVF9DQUxMKGRtX29wKSwKKyAgICBIWVBFUkNBTEwoYXJjaF8xKQorfTsKKworI3VuZGVmIGRv X21lbW9yeV9vcAorI3VuZGVmIGNvbXBhdF9tZW1vcnlfb3AKKyN1bmRlZiBkb19waHlzZGV2X29w CisjdW5kZWYgY29tcGF0X3BoeXNkZXZfb3AKKyN1bmRlZiBkb19ncmFudF90YWJsZV9vcAorI3Vu ZGVmIGNvbXBhdF9ncmFudF90YWJsZV9vcAorI3VuZGVmIGRvX2FyY2hfMQorCisjdW5kZWYgSFlQ RVJDQUxMCisjdW5kZWYgQ09NUEFUX0NBTEwKKworYm9vbCBodm1faHlwZXJjYWxsKHN0cnVjdCBj cHVfdXNlcl9yZWdzICpyZWdzKQoreworICAgIHN0cnVjdCB2Y3B1ICpjdXJyID0gY3VycmVudDsK KyAgICBzdHJ1Y3QgZG9tYWluICpjdXJyZCA9IGN1cnItPmRvbWFpbjsKKyAgICBpbnQgbW9kZSA9 IGh2bV9ndWVzdF94ODZfbW9kZShjdXJyKTsKKyAgICB1bnNpZ25lZCBsb25nIGVheCA9IHJlZ3Mt Pl9lYXg7CisKKyAgICBzd2l0Y2ggKCBtb2RlICkKKyAgICB7CisgICAgY2FzZSA4OgorICAgICAg ICBlYXggPSByZWdzLT5yYXg7CisgICAgICAgIC8qIEZhbGx0aHJvdWdoIHRvIHBlcm1pc3Npb24g Y2hlY2suICovCisgICAgY2FzZSA0OgorICAgIGNhc2UgMjoKKyAgICAgICAgaWYgKCB1bmxpa2Vs eShodm1fZ2V0X2NwbChjdXJyKSkgKQorICAgICAgICB7CisgICAgZGVmYXVsdDoKKyAgICAgICAg ICAgIHJlZ3MtPnJheCA9IC1FUEVSTTsKKyAgICAgICAgICAgIHJldHVybiBIVk1fSENBTExfY29t cGxldGVkOworICAgICAgICB9CisgICAgY2FzZSAwOgorICAgICAgICBicmVhazsKKyAgICB9CisK KyAgICBpZiAoIChlYXggJiAweDgwMDAwMDAwKSAmJiBpc192aXJpZGlhbl9kb21haW4oY3VycmQp ICkKKyAgICAgICAgcmV0dXJuIHZpcmlkaWFuX2h5cGVyY2FsbChyZWdzKTsKKworICAgIEJVSUxE X0JVR19PTihBUlJBWV9TSVpFKGh2bV9oeXBlcmNhbGxfdGFibGUpID4KKyAgICAgICAgICAgICAg ICAgQVJSQVlfU0laRShoeXBlcmNhbGxfYXJnc190YWJsZSkpOworCisgICAgaWYgKCAoZWF4ID49 IEFSUkFZX1NJWkUoaHZtX2h5cGVyY2FsbF90YWJsZSkpIHx8CisgICAgICAgICAhaHZtX2h5cGVy Y2FsbF90YWJsZVtlYXhdLm5hdGl2ZSApCisgICAgeworICAgICAgICByZWdzLT5yYXggPSAtRU5P U1lTOworICAgICAgICByZXR1cm4gSFZNX0hDQUxMX2NvbXBsZXRlZDsKKyAgICB9CisKKyAgICBj dXJyLT5hcmNoLmh2bV92Y3B1LmhjYWxsX3ByZWVtcHRlZCA9IDA7CisKKyAgICBpZiAoIG1vZGUg PT0gOCApCisgICAgeworICAgICAgICB1bnNpZ25lZCBsb25nIHJkaSA9IHJlZ3MtPnJkaTsKKyAg ICAgICAgdW5zaWduZWQgbG9uZyByc2kgPSByZWdzLT5yc2k7CisgICAgICAgIHVuc2lnbmVkIGxv bmcgcmR4ID0gcmVncy0+cmR4OworICAgICAgICB1bnNpZ25lZCBsb25nIHIxMCA9IHJlZ3MtPnIx MDsKKyAgICAgICAgdW5zaWduZWQgbG9uZyByOCA9IHJlZ3MtPnI4OworICAgICAgICB1bnNpZ25l ZCBsb25nIHI5ID0gcmVncy0+cjk7CisKKyAgICAgICAgSFZNX0RCR19MT0coREJHX0xFVkVMX0hD QUxMLCAiaGNhbGwlbHUoJWx4LCAlbHgsICVseCwgJWx4LCAlbHgsICVseCkiLAorICAgICAgICAg ICAgICAgICAgICBlYXgsIHJkaSwgcnNpLCByZHgsIHIxMCwgcjgsIHI5KTsKKworI2lmbmRlZiBO REVCVUcKKyAgICAgICAgLyogRGVsaWJlcmF0ZWx5IGNvcnJ1cHQgcGFyYW1ldGVyIHJlZ3Mgbm90 IHVzZWQgYnkgdGhpcyBoeXBlcmNhbGwuICovCisgICAgICAgIHN3aXRjaCAoIGh5cGVyY2FsbF9h cmdzX3RhYmxlW2VheF0ubmF0aXZlICkKKyAgICAgICAgeworICAgICAgICBjYXNlIDA6IHJkaSA9 IDB4ZGVhZGJlZWZkZWFkZjAwZFVMOworICAgICAgICBjYXNlIDE6IHJzaSA9IDB4ZGVhZGJlZWZk ZWFkZjAwZFVMOworICAgICAgICBjYXNlIDI6IHJkeCA9IDB4ZGVhZGJlZWZkZWFkZjAwZFVMOwor ICAgICAgICBjYXNlIDM6IHIxMCA9IDB4ZGVhZGJlZWZkZWFkZjAwZFVMOworICAgICAgICBjYXNl IDQ6IHI4ID0gMHhkZWFkYmVlZmRlYWRmMDBkVUw7CisgICAgICAgIGNhc2UgNTogcjkgPSAweGRl YWRiZWVmZGVhZGYwMGRVTDsKKyAgICAgICAgfQorI2VuZGlmCisKKyAgICAgICAgY3Vyci0+YXJj aC5odm1fdmNwdS5oY2FsbF82NGJpdCA9IDE7CisgICAgICAgIHJlZ3MtPnJheCA9IGh2bV9oeXBl cmNhbGxfdGFibGVbZWF4XS5uYXRpdmUocmRpLCByc2ksIHJkeCwgcjEwLCByOCwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByOSk7CisKKyAgICAg ICAgY3Vyci0+YXJjaC5odm1fdmNwdS5oY2FsbF82NGJpdCA9IDA7CisKKyNpZm5kZWYgTkRFQlVH CisgICAgICAgIGlmICggIWN1cnItPmFyY2guaHZtX3ZjcHUuaGNhbGxfcHJlZW1wdGVkICkKKyAg ICAgICAgeworICAgICAgICAgICAgLyogRGVsaWJlcmF0ZWx5IGNvcnJ1cHQgcGFyYW1ldGVyIHJl Z3MgdXNlZCBieSB0aGlzIGh5cGVyY2FsbC4gKi8KKyAgICAgICAgICAgIHN3aXRjaCAoIGh5cGVy Y2FsbF9hcmdzX3RhYmxlW2VheF0ubmF0aXZlICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg IGNhc2UgNjogcmVncy0+cjkgID0gMHhkZWFkYmVlZmRlYWRmMDBkVUw7CisgICAgICAgICAgICBj YXNlIDU6IHJlZ3MtPnI4ICA9IDB4ZGVhZGJlZWZkZWFkZjAwZFVMOworICAgICAgICAgICAgY2Fz ZSA0OiByZWdzLT5yMTAgPSAweGRlYWRiZWVmZGVhZGYwMGRVTDsKKyAgICAgICAgICAgIGNhc2Ug MzogcmVncy0+cmR4ID0gMHhkZWFkYmVlZmRlYWRmMDBkVUw7CisgICAgICAgICAgICBjYXNlIDI6 IHJlZ3MtPnJzaSA9IDB4ZGVhZGJlZWZkZWFkZjAwZFVMOworICAgICAgICAgICAgY2FzZSAxOiBy ZWdzLT5yZGkgPSAweGRlYWRiZWVmZGVhZGYwMGRVTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAg fQorI2VuZGlmCisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGludCBl YnggPSByZWdzLT5fZWJ4OworICAgICAgICB1bnNpZ25lZCBpbnQgZWN4ID0gcmVncy0+X2VjeDsK KyAgICAgICAgdW5zaWduZWQgaW50IGVkeCA9IHJlZ3MtPl9lZHg7CisgICAgICAgIHVuc2lnbmVk IGludCBlc2kgPSByZWdzLT5fZXNpOworICAgICAgICB1bnNpZ25lZCBpbnQgZWRpID0gcmVncy0+ X2VkaTsKKyAgICAgICAgdW5zaWduZWQgaW50IGVicCA9IHJlZ3MtPl9lYnA7CisKKyAgICAgICAg SFZNX0RCR19MT0coREJHX0xFVkVMX0hDQUxMLCAiaGNhbGwlbHUoJXgsICV4LCAleCwgJXgsICV4 LCAleCkiLCBlYXgsCisgICAgICAgICAgICAgICAgICAgIGVieCwgZWN4LCBlZHgsIGVzaSwgZWRp LCBlYnApOworCisjaWZuZGVmIE5ERUJVRworICAgICAgICAvKiBEZWxpYmVyYXRlbHkgY29ycnVw dCBwYXJhbWV0ZXIgcmVncyBub3QgdXNlZCBieSB0aGlzIGh5cGVyY2FsbC4gKi8KKyAgICAgICAg c3dpdGNoICggaHlwZXJjYWxsX2FyZ3NfdGFibGVbZWF4XS5jb21wYXQgKQorICAgICAgICB7Cisg ICAgICAgIGNhc2UgMDogZWJ4ID0gMHhkZWFkZjAwZDsKKyAgICAgICAgY2FzZSAxOiBlY3ggPSAw eGRlYWRmMDBkOworICAgICAgICBjYXNlIDI6IGVkeCA9IDB4ZGVhZGYwMGQ7CisgICAgICAgIGNh c2UgMzogZXNpID0gMHhkZWFkZjAwZDsKKyAgICAgICAgY2FzZSA0OiBlZGkgPSAweGRlYWRmMDBk OworICAgICAgICBjYXNlIDU6IGVicCA9IDB4ZGVhZGYwMGQ7CisgICAgICAgIH0KKyNlbmRpZgor CisgICAgICAgIHJlZ3MtPnJheCA9IGh2bV9oeXBlcmNhbGxfdGFibGVbZWF4XS5jb21wYXQoZWJ4 LCBlY3gsIGVkeCwgZXNpLCBlZGksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZWJwKTsKKworI2lmbmRlZiBOREVCVUcKKyAgICAgICAgaWYgKCAh Y3Vyci0+YXJjaC5odm1fdmNwdS5oY2FsbF9wcmVlbXB0ZWQgKQorICAgICAgICB7CisgICAgICAg ICAgICAvKiBEZWxpYmVyYXRlbHkgY29ycnVwdCBwYXJhbWV0ZXIgcmVncyB1c2VkIGJ5IHRoaXMg aHlwZXJjYWxsLiAqLworICAgICAgICAgICAgc3dpdGNoICggaHlwZXJjYWxsX2FyZ3NfdGFibGVb ZWF4XS5jb21wYXQgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgY2FzZSA2OiByZWdzLT5y YnAgPSAweGRlYWRmMDBkOworICAgICAgICAgICAgY2FzZSA1OiByZWdzLT5yZGkgPSAweGRlYWRm MDBkOworICAgICAgICAgICAgY2FzZSA0OiByZWdzLT5yc2kgPSAweGRlYWRmMDBkOworICAgICAg ICAgICAgY2FzZSAzOiByZWdzLT5yZHggPSAweGRlYWRmMDBkOworICAgICAgICAgICAgY2FzZSAy OiByZWdzLT5yY3ggPSAweGRlYWRmMDBkOworICAgICAgICAgICAgY2FzZSAxOiByZWdzLT5yYngg PSAweGRlYWRmMDBkOworICAgICAgICAgICAgfQorICAgICAgICB9CisjZW5kaWYKKyAgICB9CisK KyAgICBIVk1fREJHX0xPRyhEQkdfTEVWRUxfSENBTEwsICJoY2FsbCVsdSAtPiAlbHgiLCBlYXgs IHJlZ3MtPnJheCk7CisKKyAgICBpZiAoIGN1cnItPmFyY2guaHZtX3ZjcHUuaGNhbGxfcHJlZW1w dGVkICkKKyAgICAgICAgcmV0dXJuIEhWTV9IQ0FMTF9wcmVlbXB0ZWQ7CisKKyAgICBpZiAoIHVu bGlrZWx5KGN1cnJkLT5hcmNoLmh2bV9kb21haW4ucWVtdV9tYXBjYWNoZV9pbnZhbGlkYXRlKSAm JgorICAgICAgICAgdGVzdF9hbmRfY2xlYXJfYm9vbChjdXJyZC0+YXJjaC5odm1fZG9tYWluLnFl bXVfbWFwY2FjaGVfaW52YWxpZGF0ZSkgKQorICAgICAgICBzZW5kX2ludmFsaWRhdGVfcmVxKCk7 CisKKyAgICByZXR1cm4gSFZNX0hDQUxMX2NvbXBsZXRlZDsKK30KKworLyoKKyAqIExvY2FsIHZh cmlhYmxlczoKKyAqIG1vZGU6IEMKKyAqIGMtZmlsZS1zdHlsZTogIkJTRCIKKyAqIGMtYmFzaWMt b2Zmc2V0OiA0CisgKiB0YWItd2lkdGg6IDQKKyAqIGluZGVudC10YWJzLW1vZGU6IG5pbAorICog RW5kOgorICovCi0tIAoyLjEuNAoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbi5v cmcKaHR0cHM6Ly9saXN0cy54ZW4ub3JnL3hlbi1kZXZlbAo=