From mboxrd@z Thu Jan 1 00:00:00 1970 From: Yi Sun Subject: [PATCH v12 03/23] x86: refactor psr: remove L3 CAT/CDP codes. Date: Wed, 14 Jun 2017 09:12:36 +0800 Message-ID: <1497402776-22348-4-git-send-email-yi.y.sun@linux.intel.com> References: <1497402776-22348-1-git-send-email-yi.y.sun@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta5.messagelabs.com ([195.245.231.135]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dKx3i-0007F5-MU for xen-devel@lists.xenproject.org; Wed, 14 Jun 2017 01:25:22 +0000 In-Reply-To: <1497402776-22348-1-git-send-email-yi.y.sun@linux.intel.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: xen-devel@lists.xenproject.org Cc: kevin.tian@intel.com, wei.liu2@citrix.com, andrew.cooper3@citrix.com, dario.faggioli@citrix.com, he.chen@linux.intel.com, ian.jackson@eu.citrix.com, Yi Sun , mengxu@cis.upenn.edu, jbeulich@suse.com, chao.p.peng@linux.intel.com, roger.pau@citrix.com List-Id: xen-devel@lists.xenproject.org VGhlIGN1cnJlbnQgY2FjaGUgYWxsb2NhdGlvbiBjb2RlcyBpbiBwc3IuYyBkbyBub3QgY29uc2lk ZXIKZnV0dXJlIGZlYXR1cmVzIGFkZGl0aW9uIGFuZCBhcmUgbm90IGZyaWVuZGx5IHRvIGV4dGVu ZC4KClRvIG1ha2UgcHNyLmMgYmUgbW9yZSBmbGV4aWJsZSB0byBhZGQgbmV3IGZlYXR1cmVzIGFu ZCBmdWxmaWxsCnRoZSBwcm9ncmFtIHByaW5jaXBsZSwgb3BlbiBmb3IgZXh0ZW5zaW9uIGJ1dCBj bG9zZWQgZm9yCm1vZGlmaWNhdGlvbiwgd2UgaGF2ZSB0byByZWZhY3RvciB0aGUgcHNyLmM6CjEu IEFuYWx5emUgY2FjaGUgYWxsb2NhdGlvbiBmZWF0dXJlcyBhbmQgYWJzdHJhY3QgZ2VuZXJhbCBk YXRhCiAgIHN0cnVjdHVyZXMuCjIuIEFuYWx5emUgdGhlIGluaXQgYW5kIGFsbCBvdGhlciBmdW5j dGlvbnMgZmxvdywgYWJzdHJhY3QgYWxsCiAgIHN0ZXBzIHRoYXQgZGlmZmVyZW50IGZlYXR1cmVz IG1heSBoYXZlIGRpZmZlcmVudCBpbXBsZW1lbnRhdGlvbnMuCiAgIE1ha2UgdGhlc2Ugc3RlcHMg YmUgY2FsbGJhY2sgZnVuY3Rpb25zIGFuZCByZWdpc3RlciBmZWF0dXJlCiAgIHNwZWNpZmljIGZ1 Y3Rpb25zLiBUaGVuLCB0aGUgbWFpbiBwcm9jZXNzZXMgd2lsbCBub3QgYmUgY2hhbmdlZAogICB3 aGVuIGludHJvZHVjaW5nIGEgbmV3IGZlYXR1cmUuCgpCZWNhdXNlIHRoZSBxdWFudGl0eSBvZiBy ZWZhY3RvciBjb2RlcyBpcyBiaWcgYW5kIHRoZSBsb2dpY3MgYXJlCmNoYW5nZWQgYSBsb3QsIGl0 IHdpbGwgY2F1c2UgcmV2aWV3ZXJzIGNvbmZ1c2VkIGlmIGp1c3QgY2hhbmdlCm9sZCBjb2Rlcy4g UmV2aWV3ZXJzIGhhdmUgdG8gdW5kZXJzdGFuZCBib3RoIG9sZCBjb2RlcyBhbmQgbmV3CmltcGxl bWVudGF0aW9ucy4gQWZ0ZXIgcmV2aWV3IGl0ZXJhdGlvbnMgZnJvbSBWMSB0byBWMywgSmFuIGhh cwpwcm9wb3NlZCB0byByZW1vdmUgYWxsIG9sZCBjYWNoZSBhbGxvY2F0aW9uIGNvZGVzIGZpcnN0 bHksIHRoZW4KaW1wbGVtZW50IG5ldyBjb2RlcyBzdGVwIGJ5IHN0ZXAuIFRoaXMgd2lsbCBoZWxw IHRvIG1ha2UgY29kZXMKYmUgbW9yZSBlYXNpbHkgcmV2aWV3YWJsZS4KClRoZXJlIGlzIG5vIGNv bnN0cnVjdGlvbiB3aXRob3V0IGRlc3RydWN0aW9uLiBTbywgdGhpcyBwYXRjaApyZW1vdmVzIGFs bCBjdXJyZW50IEwzIENBVC9DRFAgY29kZXMgaW4gcHNyLmMuIFRoZSBmb2xsb3dpbmcKcGF0Y2hl cyB3aWxsIGludHJvZHVjZSB0aGUgbmV3IG1lY2hhbmlzbS4KClNpZ25lZC1vZmYtYnk6IFlpIFN1 biA8eWkueS5zdW5AbGludXguaW50ZWwuY29tPgpBY2tlZC1ieTogSmFuIEJldWxpY2ggPGpiZXVs aWNoQHN1c2UuY29tPgpSZXZpZXdlZC1ieTogS29ucmFkIFJ6ZXN6dXRlayBXaWxrIDxrb25yYWQu d2lsa0BvcmFjbGUuY29tPgpSZXZpZXdlZC1ieTogV2VpIExpdSA8d2VpLmxpdTJAY2l0cml4LmNv bT4KLS0tCnY0OgogICAgLSBjcmVhdGUgdGhpcyBwYXRjaCB0byBtYWtlIGNvZGVzIGVhc2lseSB1 bmRlcnN0YW5kLgogICAgICAoc3VnZ2VzdGVkIGJ5IEphbiBCZXVsaWNoKQotLS0KLS0tCiB4ZW4v YXJjaC94ODYvcHNyLmMgfCA0NzAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDQ2NSBk ZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS94ZW4vYXJjaC94ODYvcHNyLmMgYi94ZW4vYXJjaC94 ODYvcHNyLmMKaW5kZXggMGI1MDczYy4uOTZhODU4OSAxMDA2NDQKLS0tIGEveGVuL2FyY2gveDg2 L3Bzci5jCisrKyBiL3hlbi9hcmNoL3g4Ni9wc3IuYwpAQCAtMjMsMjQgKzIzLDYgQEAKICNkZWZp bmUgUFNSX0NBVCAgICAgICAgKDE8PDEpCiAjZGVmaW5lIFBTUl9DRFAgICAgICAgICgxPDwyKQog Ci1zdHJ1Y3QgcHNyX2NhdF9jYm0gewotICAgIHVuaW9uIHsKLSAgICAgICAgdWludDY0X3QgY2Jt OwotICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgdWludDY0X3QgY29kZTsKLSAgICAgICAg ICAgIHVpbnQ2NF90IGRhdGE7Ci0gICAgICAgIH07Ci0gICAgfTsKLSAgICB1bnNpZ25lZCBpbnQg cmVmOwotfTsKLQotc3RydWN0IHBzcl9jYXRfc29ja2V0X2luZm8gewotICAgIHVuc2lnbmVkIGlu dCBjYm1fbGVuOwotICAgIHVuc2lnbmVkIGludCBjb3NfbWF4OwotICAgIHN0cnVjdCBwc3JfY2F0 X2NibSAqY29zX3RvX2NibTsKLSAgICBzcGlubG9ja190IGNibV9sb2NrOwotfTsKLQogc3RydWN0 IHBzcl9hc3NvYyB7CiAgICAgdWludDY0X3QgdmFsOwogICAgIHVpbnQ2NF90IGNvc19tYXNrOwpA QCAtNDgsMjYgKzMwLDExIEBAIHN0cnVjdCBwc3JfYXNzb2MgewogCiBzdHJ1Y3QgcHNyX2NtdCAq X19yZWFkX21vc3RseSBwc3JfY210OwogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyAqX19yZWFkX21v c3RseSBjYXRfc29ja2V0X2VuYWJsZTsKLXN0YXRpYyBzdHJ1Y3QgcHNyX2NhdF9zb2NrZXRfaW5m byAqX19yZWFkX21vc3RseSBjYXRfc29ja2V0X2luZm87Ci1zdGF0aWMgdW5zaWduZWQgbG9uZyAq X19yZWFkX21vc3RseSBjZHBfc29ja2V0X2VuYWJsZTsKLQogc3RhdGljIHVuc2lnbmVkIGludCBv cHRfcHNyOwogc3RhdGljIHVuc2lnbmVkIGludCBfX2luaXRkYXRhIG9wdF9ybWlkX21heCA9IDI1 NTsKLXN0YXRpYyB1bnNpZ25lZCBpbnQgX19yZWFkX21vc3RseSBvcHRfY29zX21heCA9IDI1NTsK IHN0YXRpYyB1aW50NjRfdCBybWlkX21hc2s7CiBzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0 IHBzcl9hc3NvYywgcHNyX2Fzc29jKTsKIAotc3RhdGljIHN0cnVjdCBwc3JfY2F0X2NibSAqdGVt cF9jb3NfdG9fY2JtOwotCi1zdGF0aWMgdW5zaWduZWQgaW50IGdldF9zb2NrZXRfY3B1KHVuc2ln bmVkIGludCBzb2NrZXQpCi17Ci0gICAgaWYgKCBsaWtlbHkoc29ja2V0IDwgbnJfc29ja2V0cykg KQotICAgICAgICByZXR1cm4gY3B1bWFza19hbnkoc29ja2V0X2NwdW1hc2tbc29ja2V0XSk7Ci0K LSAgICByZXR1cm4gbnJfY3B1X2lkczsKLX0KLQogc3RhdGljIHZvaWQgX19pbml0IHBhcnNlX3Bz cl9ib29sKGNoYXIgKnMsIGNoYXIgKnZhbHVlLCBjaGFyICpmZWF0dXJlLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBtYXNrKQogewpAQCAtMTA3LDkgKzc0 LDYgQEAgc3RhdGljIHZvaWQgX19pbml0IHBhcnNlX3Bzcl9wYXJhbShjaGFyICpzKQogICAgICAg ICBpZiAoIHZhbF9zdHIgJiYgIXN0cmNtcChzLCAicm1pZF9tYXgiKSApCiAgICAgICAgICAgICBv cHRfcm1pZF9tYXggPSBzaW1wbGVfc3RydG91bCh2YWxfc3RyLCBOVUxMLCAwKTsKIAotICAgICAg ICBpZiAoIHZhbF9zdHIgJiYgIXN0cmNtcChzLCAiY29zX21heCIpICkKLSAgICAgICAgICAgIG9w dF9jb3NfbWF4ID0gc2ltcGxlX3N0cnRvdWwodmFsX3N0ciwgTlVMTCwgMCk7Ci0KICAgICAgICAg cyA9IHNzICsgMTsKICAgICB9IHdoaWxlICggc3MgKTsKIH0KQEAgLTIxMywxNiArMTc3LDcgQEAg c3RhdGljIGlubGluZSB2b2lkIHBzcl9hc3NvY19pbml0KHZvaWQpCiB7CiAgICAgc3RydWN0IHBz cl9hc3NvYyAqcHNyYSA9ICZ0aGlzX2NwdShwc3JfYXNzb2MpOwogCi0gICAgaWYgKCBjYXRfc29j a2V0X2luZm8gKQotICAgIHsKLSAgICAgICAgdW5zaWduZWQgaW50IHNvY2tldCA9IGNwdV90b19z b2NrZXQoc21wX3Byb2Nlc3Nvcl9pZCgpKTsKLQotICAgICAgICBpZiAoIHRlc3RfYml0KHNvY2tl dCwgY2F0X3NvY2tldF9lbmFibGUpICkKLSAgICAgICAgICAgIHBzcmEtPmNvc19tYXNrID0gKCgx dWxsIDw8IGdldF9jb3VudF9vcmRlcigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0 X3NvY2tldF9pbmZvW3NvY2tldF0uY29zX21heCkpIC0gMSkgPDwgMzI7Ci0gICAgfQotCi0gICAg aWYgKCBwc3JfY210X2VuYWJsZWQoKSB8fCBwc3JhLT5jb3NfbWFzayApCisgICAgaWYgKCBwc3Jf Y210X2VuYWJsZWQoKSApCiAgICAgICAgIHJkbXNybChNU1JfSUEzMl9QU1JfQVNTT0MsIHBzcmEt PnZhbCk7CiB9CiAKQEAgLTIzMSwxMiArMTg2LDYgQEAgc3RhdGljIGlubGluZSB2b2lkIHBzcl9h c3NvY19ybWlkKHVpbnQ2NF90ICpyZWcsIHVuc2lnbmVkIGludCBybWlkKQogICAgICpyZWcgPSAo KnJlZyAmIH5ybWlkX21hc2spIHwgKHJtaWQgJiBybWlkX21hc2spOwogfQogCi1zdGF0aWMgaW5s aW5lIHZvaWQgcHNyX2Fzc29jX2Nvcyh1aW50NjRfdCAqcmVnLCB1bnNpZ25lZCBpbnQgY29zLAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDY0X3QgY29zX21hc2spCi17Ci0g ICAgKnJlZyA9ICgqcmVnICYgfmNvc19tYXNrKSB8ICgoKHVpbnQ2NF90KWNvcyA8PCAzMikgJiBj b3NfbWFzayk7Ci19Ci0KIHZvaWQgcHNyX2N0eHRfc3dpdGNoX3RvKHN0cnVjdCBkb21haW4gKmQp CiB7CiAgICAgc3RydWN0IHBzcl9hc3NvYyAqcHNyYSA9ICZ0aGlzX2NwdShwc3JfYXNzb2MpOwpA QCAtMjQ1LDQ1OSArMTk0LDU0IEBAIHZvaWQgcHNyX2N0eHRfc3dpdGNoX3RvKHN0cnVjdCBkb21h aW4gKmQpCiAgICAgaWYgKCBwc3JfY210X2VuYWJsZWQoKSApCiAgICAgICAgIHBzcl9hc3NvY19y bWlkKCZyZWcsIGQtPmFyY2gucHNyX3JtaWQpOwogCi0gICAgaWYgKCBwc3JhLT5jb3NfbWFzayAp Ci0gICAgICAgIHBzcl9hc3NvY19jb3MoJnJlZywgZC0+YXJjaC5wc3JfY29zX2lkcyA/Ci0gICAg ICAgICAgICAgICAgICAgICAgZC0+YXJjaC5wc3JfY29zX2lkc1tjcHVfdG9fc29ja2V0KHNtcF9w cm9jZXNzb3JfaWQoKSldIDoKLSAgICAgICAgICAgICAgICAgICAgICAwLCBwc3JhLT5jb3NfbWFz ayk7Ci0KICAgICBpZiAoIHJlZyAhPSBwc3JhLT52YWwgKQogICAgIHsKICAgICAgICAgd3Jtc3Js KE1TUl9JQTMyX1BTUl9BU1NPQywgcmVnKTsKICAgICAgICAgcHNyYS0+dmFsID0gcmVnOwogICAg IH0KIH0KLXN0YXRpYyBzdHJ1Y3QgcHNyX2NhdF9zb2NrZXRfaW5mbyAqZ2V0X2NhdF9zb2NrZXRf aW5mbyh1bnNpZ25lZCBpbnQgc29ja2V0KQotewotICAgIGlmICggIWNhdF9zb2NrZXRfaW5mbyAp Ci0gICAgICAgIHJldHVybiBFUlJfUFRSKC1FTk9ERVYpOwotCi0gICAgaWYgKCBzb2NrZXQgPj0g bnJfc29ja2V0cyApCi0gICAgICAgIHJldHVybiBFUlJfUFRSKC1FTk9UU09DSyk7Ci0KLSAgICBp ZiAoICF0ZXN0X2JpdChzb2NrZXQsIGNhdF9zb2NrZXRfZW5hYmxlKSApCi0gICAgICAgIHJldHVy biBFUlJfUFRSKC1FTk9FTlQpOwotCi0gICAgcmV0dXJuIGNhdF9zb2NrZXRfaW5mbyArIHNvY2tl dDsKLX0KLQotc3RhdGljIGlubGluZSBib29sX3QgY2RwX2lzX2VuYWJsZWQodW5zaWduZWQgaW50 IHNvY2tldCkKLXsKLSAgICByZXR1cm4gY2RwX3NvY2tldF9lbmFibGUgJiYgdGVzdF9iaXQoc29j a2V0LCBjZHBfc29ja2V0X2VuYWJsZSk7Ci19CiAKIGludCBwc3JfZ2V0X2NhdF9sM19pbmZvKHVu c2lnbmVkIGludCBzb2NrZXQsIHVpbnQzMl90ICpjYm1fbGVuLAogICAgICAgICAgICAgICAgICAg ICAgICAgdWludDMyX3QgKmNvc19tYXgsIHVpbnQzMl90ICpmbGFncykKIHsKLSAgICBzdHJ1Y3Qg cHNyX2NhdF9zb2NrZXRfaW5mbyAqaW5mbyA9IGdldF9jYXRfc29ja2V0X2luZm8oc29ja2V0KTsK LQotICAgIGlmICggSVNfRVJSKGluZm8pICkKLSAgICAgICAgcmV0dXJuIFBUUl9FUlIoaW5mbyk7 Ci0KLSAgICAqY2JtX2xlbiA9IGluZm8tPmNibV9sZW47Ci0gICAgKmNvc19tYXggPSBpbmZvLT5j b3NfbWF4OwotCi0gICAgKmZsYWdzID0gMDsKLSAgICBpZiAoIGNkcF9pc19lbmFibGVkKHNvY2tl dCkgKQotICAgICAgICAqZmxhZ3MgfD0gWEVOX1NZU0NUTF9QU1JfQ0FUX0wzX0NEUDsKLQogICAg IHJldHVybiAwOwogfQogCiBpbnQgcHNyX2dldF9sM19jYm0oc3RydWN0IGRvbWFpbiAqZCwgdW5z aWduZWQgaW50IHNvY2tldCwKICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCAqY2JtLCBlbnVt IGNibV90eXBlIHR5cGUpCiB7Ci0gICAgc3RydWN0IHBzcl9jYXRfc29ja2V0X2luZm8gKmluZm8g PSBnZXRfY2F0X3NvY2tldF9pbmZvKHNvY2tldCk7Ci0gICAgYm9vbF90IGNkcF9lbmFibGVkID0g Y2RwX2lzX2VuYWJsZWQoc29ja2V0KTsKLQotICAgIGlmICggSVNfRVJSKGluZm8pICkKLSAgICAg ICAgcmV0dXJuIFBUUl9FUlIoaW5mbyk7Ci0KLSAgICBzd2l0Y2ggKCB0eXBlICkKLSAgICB7Ci0g ICAgY2FzZSBQU1JfQ0JNX1RZUEVfTDM6Ci0gICAgICAgIGlmICggY2RwX2VuYWJsZWQgKQotICAg ICAgICAgICAgcmV0dXJuIC1FWERFVjsKLSAgICAgICAgKmNibSA9IGluZm8tPmNvc190b19jYm1b ZC0+YXJjaC5wc3JfY29zX2lkc1tzb2NrZXRdXS5jYm07Ci0gICAgICAgIGJyZWFrOwotCi0gICAg Y2FzZSBQU1JfQ0JNX1RZUEVfTDNfQ09ERToKLSAgICAgICAgaWYgKCAhY2RwX2VuYWJsZWQgKQot ICAgICAgICAgICAgKmNibSA9IGluZm8tPmNvc190b19jYm1bZC0+YXJjaC5wc3JfY29zX2lkc1tz b2NrZXRdXS5jYm07Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgICpjYm0gPSBpbmZvLT5jb3Nf dG9fY2JtW2QtPmFyY2gucHNyX2Nvc19pZHNbc29ja2V0XV0uY29kZTsKLSAgICAgICAgYnJlYWs7 Ci0KLSAgICBjYXNlIFBTUl9DQk1fVFlQRV9MM19EQVRBOgotICAgICAgICBpZiAoICFjZHBfZW5h YmxlZCApCi0gICAgICAgICAgICAqY2JtID0gaW5mby0+Y29zX3RvX2NibVtkLT5hcmNoLnBzcl9j b3NfaWRzW3NvY2tldF1dLmNibTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgKmNibSA9IGlu Zm8tPmNvc190b19jYm1bZC0+YXJjaC5wc3JfY29zX2lkc1tzb2NrZXRdXS5kYXRhOwotICAgICAg ICBicmVhazsKLQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9VTlJFQUNIQUJMRSgpOwot ICAgIH0KLQotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgYm9vbF90IHBzcl9jaGVja19jYm0o dW5zaWduZWQgaW50IGNibV9sZW4sIHVpbnQ2NF90IGNibSkKLXsKLSAgICB1bnNpZ25lZCBpbnQg Zmlyc3RfYml0LCB6ZXJvX2JpdDsKLQotICAgIC8qIFNldCBiaXRzIHNob3VsZCBvbmx5IGluIHRo ZSByYW5nZSBvZiBbMCwgY2JtX2xlbikuICovCi0gICAgaWYgKCBjYm0gJiAofjB1bGwgPDwgY2Jt X2xlbikgKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIC8qIEF0IGxlYXN0IG9uZSBiaXQgbmVl ZCB0byBiZSBzZXQuICovCi0gICAgaWYgKCBjYm0gPT0gMCApCi0gICAgICAgIHJldHVybiAwOwot Ci0gICAgZmlyc3RfYml0ID0gZmluZF9maXJzdF9iaXQoJmNibSwgY2JtX2xlbik7Ci0gICAgemVy b19iaXQgPSBmaW5kX25leHRfemVyb19iaXQoJmNibSwgY2JtX2xlbiwgZmlyc3RfYml0KTsKLQot ICAgIC8qIFNldCBiaXRzIHNob3VsZCBiZSBjb250aWd1b3VzLiAqLwotICAgIGlmICggemVyb19i aXQgPCBjYm1fbGVuICYmCi0gICAgICAgICBmaW5kX25leHRfYml0KCZjYm0sIGNibV9sZW4sIHpl cm9fYml0KSA8IGNibV9sZW4gKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiAxOwot fQotCi1zdHJ1Y3QgY29zX2NibV9pbmZvCi17Ci0gICAgdW5zaWduZWQgaW50IGNvczsKLSAgICBi b29sX3QgY2RwOwotICAgIHVpbnQ2NF90IGNibV9jb2RlOwotICAgIHVpbnQ2NF90IGNibV9kYXRh OwotfTsKLQotc3RhdGljIHZvaWQgZG9fd3JpdGVfbDNfY2JtKHZvaWQgKmRhdGEpCi17Ci0gICAg c3RydWN0IGNvc19jYm1faW5mbyAqaW5mbyA9IGRhdGE7Ci0KLSAgICBpZiAoIGluZm8tPmNkcCAp Ci0gICAgewotICAgICAgICB3cm1zcmwoTVNSX0lBMzJfUFNSX0wzX01BU0tfQ09ERShpbmZvLT5j b3MpLCBpbmZvLT5jYm1fY29kZSk7Ci0gICAgICAgIHdybXNybChNU1JfSUEzMl9QU1JfTDNfTUFT S19EQVRBKGluZm8tPmNvcyksIGluZm8tPmNibV9kYXRhKTsKLSAgICB9Ci0gICAgZWxzZQotICAg ICAgICB3cm1zcmwoTVNSX0lBMzJfUFNSX0wzX01BU0soaW5mby0+Y29zKSwgaW5mby0+Y2JtX2Nv ZGUpOwotfQotCi1zdGF0aWMgaW50IHdyaXRlX2wzX2NibSh1bnNpZ25lZCBpbnQgc29ja2V0LCB1 bnNpZ25lZCBpbnQgY29zLAotICAgICAgICAgICAgICAgICAgICAgICAgdWludDY0X3QgY2JtX2Nv ZGUsIHVpbnQ2NF90IGNibV9kYXRhLCBib29sX3QgY2RwKQotewotICAgIHN0cnVjdCBjb3NfY2Jt X2luZm8gaW5mbyA9Ci0gICAgewotICAgICAgICAuY29zID0gY29zLAotICAgICAgICAuY2JtX2Nv ZGUgPSBjYm1fY29kZSwKLSAgICAgICAgLmNibV9kYXRhID0gY2JtX2RhdGEsCi0gICAgICAgIC5j ZHAgPSBjZHAsCi0gICAgfTsKLQotICAgIGlmICggc29ja2V0ID09IGNwdV90b19zb2NrZXQoc21w X3Byb2Nlc3Nvcl9pZCgpKSApCi0gICAgICAgIGRvX3dyaXRlX2wzX2NibSgmaW5mbyk7Ci0gICAg ZWxzZQotICAgIHsKLSAgICAgICAgdW5zaWduZWQgaW50IGNwdSA9IGdldF9zb2NrZXRfY3B1KHNv Y2tldCk7Ci0KLSAgICAgICAgaWYgKCBjcHUgPj0gbnJfY3B1X2lkcyApCi0gICAgICAgICAgICBy ZXR1cm4gLUVOT1RTT0NLOwotICAgICAgICBvbl9zZWxlY3RlZF9jcHVzKGNwdW1hc2tfb2YoY3B1 KSwgZG9fd3JpdGVfbDNfY2JtLCAmaW5mbywgMSk7Ci0gICAgfQotCiAgICAgcmV0dXJuIDA7CiB9 CiAKLXN0YXRpYyBpbnQgZmluZF9jb3Moc3RydWN0IHBzcl9jYXRfY2JtICptYXAsIHVuc2lnbmVk IGludCBjb3NfbWF4LAotICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCBjYm1fY29kZSwgdWlu dDY0X3QgY2JtX2RhdGEsIGJvb2xfdCBjZHBfZW5hYmxlZCkKLXsKLSAgICB1bnNpZ25lZCBpbnQg Y29zOwotCi0gICAgZm9yICggY29zID0gMDsgY29zIDw9IGNvc19tYXg7IGNvcysrICkKLSAgICB7 Ci0gICAgICAgIGlmICggKG1hcFtjb3NdLnJlZiB8fCBjb3MgPT0gMCkgJiYKLSAgICAgICAgICAg ICAoKCFjZHBfZW5hYmxlZCAmJiBtYXBbY29zXS5jYm0gPT0gY2JtX2NvZGUpIHx8Ci0gICAgICAg ICAgICAgIChjZHBfZW5hYmxlZCAmJiBtYXBbY29zXS5jb2RlID09IGNibV9jb2RlICYmCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBbY29zXS5kYXRhID09IGNibV9kYXRhKSkgKQot ICAgICAgICAgICAgcmV0dXJuIGNvczsKLSAgICB9Ci0KLSAgICByZXR1cm4gLUVOT0VOVDsKLX0K LQotc3RhdGljIGludCBwaWNrX2F2YWlsX2NvcyhzdHJ1Y3QgcHNyX2NhdF9jYm0gKm1hcCwgdW5z aWduZWQgaW50IGNvc19tYXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlu dCBvbGRfY29zKQotewotICAgIHVuc2lnbmVkIGludCBjb3M7Ci0KLSAgICAvKiBJZiBvbGQgY29z IGlzIHJlZmVycmVkIG9ubHkgYnkgdGhlIGRvbWFpbiwgdGhlbiB1c2UgaXQuICovCi0gICAgaWYg KCBtYXBbb2xkX2Nvc10ucmVmID09IDEgJiYgb2xkX2NvcyAhPSAwICkKLSAgICAgICAgcmV0dXJu IG9sZF9jb3M7Ci0KLSAgICAvKiBGaW5kIGFuIHVudXNlZCBvbmUgb3RoZXIgdGhhbiBjb3MwLiAq LwotICAgIGZvciAoIGNvcyA9IDE7IGNvcyA8PSBjb3NfbWF4OyBjb3MrKyApCi0gICAgICAgIGlm ICggbWFwW2Nvc10ucmVmID09IDAgKQotICAgICAgICAgICAgcmV0dXJuIGNvczsKLQotICAgIHJl dHVybiAtRU5PRU5UOwotfQotCiBpbnQgcHNyX3NldF9sM19jYm0oc3RydWN0IGRvbWFpbiAqZCwg dW5zaWduZWQgaW50IHNvY2tldCwKICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCBjYm0sIGVu dW0gY2JtX3R5cGUgdHlwZSkKIHsKLSAgICB1bnNpZ25lZCBpbnQgb2xkX2NvcywgY29zX21heDsK LSAgICBpbnQgY29zLCByZXQ7Ci0gICAgdWludDY0X3QgY2JtX2RhdGEsIGNibV9jb2RlOwotICAg IGJvb2xfdCBjZHBfZW5hYmxlZCA9IGNkcF9pc19lbmFibGVkKHNvY2tldCk7Ci0gICAgc3RydWN0 IHBzcl9jYXRfY2JtICptYXA7Ci0gICAgc3RydWN0IHBzcl9jYXRfc29ja2V0X2luZm8gKmluZm8g PSBnZXRfY2F0X3NvY2tldF9pbmZvKHNvY2tldCk7Ci0KLSAgICBpZiAoIElTX0VSUihpbmZvKSAp Ci0gICAgICAgIHJldHVybiBQVFJfRVJSKGluZm8pOwotCi0gICAgaWYgKCAhcHNyX2NoZWNrX2Ni bShpbmZvLT5jYm1fbGVuLCBjYm0pICkKLSAgICAgICAgcmV0dXJuIC1FSU5WQUw7Ci0KLSAgICBp ZiAoICFjZHBfZW5hYmxlZCAmJiAodHlwZSA9PSBQU1JfQ0JNX1RZUEVfTDNfQ09ERSB8fAotICAg ICAgICAgICAgICAgICAgICAgICAgICB0eXBlID09IFBTUl9DQk1fVFlQRV9MM19EQVRBKSApCi0g ICAgICAgIHJldHVybiAtRU5YSU87Ci0KLSAgICBjb3NfbWF4ID0gaW5mby0+Y29zX21heDsKLSAg ICBvbGRfY29zID0gZC0+YXJjaC5wc3JfY29zX2lkc1tzb2NrZXRdOwotICAgIG1hcCA9IGluZm8t PmNvc190b19jYm07Ci0KLSAgICBzd2l0Y2ggKCB0eXBlICkKLSAgICB7Ci0gICAgY2FzZSBQU1Jf Q0JNX1RZUEVfTDM6Ci0gICAgICAgIGNibV9jb2RlID0gY2JtOwotICAgICAgICBjYm1fZGF0YSA9 IGNibTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFBTUl9DQk1fVFlQRV9MM19DT0RFOgot ICAgICAgICBjYm1fY29kZSA9IGNibTsKLSAgICAgICAgY2JtX2RhdGEgPSBtYXBbb2xkX2Nvc10u ZGF0YTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFBTUl9DQk1fVFlQRV9MM19EQVRBOgot ICAgICAgICBjYm1fY29kZSA9IG1hcFtvbGRfY29zXS5jb2RlOwotICAgICAgICBjYm1fZGF0YSA9 IGNibTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfVU5S RUFDSEFCTEUoKTsKLSAgICAgICAgcmV0dXJuIC1FSU5WQUw7Ci0gICAgfQotCi0gICAgc3Bpbl9s b2NrKCZpbmZvLT5jYm1fbG9jayk7Ci0gICAgY29zID0gZmluZF9jb3MobWFwLCBjb3NfbWF4LCBj Ym1fY29kZSwgY2JtX2RhdGEsIGNkcF9lbmFibGVkKTsKLSAgICBpZiAoIGNvcyA+PSAwICkKLSAg ICB7Ci0gICAgICAgIGlmICggY29zID09IG9sZF9jb3MgKQotICAgICAgICB7Ci0gICAgICAgICAg ICBzcGluX3VubG9jaygmaW5mby0+Y2JtX2xvY2spOwotICAgICAgICAgICAgcmV0dXJuIDA7Ci0g ICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgY29zID0gcGlja19hdmFp bF9jb3MobWFwLCBjb3NfbWF4LCBvbGRfY29zKTsKLSAgICAgICAgaWYgKCBjb3MgPCAwICkKLSAg ICAgICAgewotICAgICAgICAgICAgc3Bpbl91bmxvY2soJmluZm8tPmNibV9sb2NrKTsKLSAgICAg ICAgICAgIHJldHVybiBjb3M7Ci0gICAgICAgIH0KLQotICAgICAgICAvKiBXZSB0cnkgdG8gYXZv aWQgd3JpdGluZyBNU1IuICovCi0gICAgICAgIGlmICggKGNkcF9lbmFibGVkICYmCi0gICAgICAg ICAgICAgKG1hcFtjb3NdLmNvZGUgIT0gY2JtX2NvZGUgfHwgbWFwW2Nvc10uZGF0YSAhPSBjYm1f ZGF0YSkpIHx8Ci0gICAgICAgICAgICAgKCFjZHBfZW5hYmxlZCAmJiBtYXBbY29zXS5jYm0gIT0g Y2JtX2NvZGUpICkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0ID0gd3JpdGVfbDNfY2JtKHNv Y2tldCwgY29zLCBjYm1fY29kZSwgY2JtX2RhdGEsIGNkcF9lbmFibGVkKTsKLSAgICAgICAgICAg IGlmICggcmV0ICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBzcGluX3VubG9jaygm aW5mby0+Y2JtX2xvY2spOwotICAgICAgICAgICAgICAgIHJldHVybiByZXQ7Ci0gICAgICAgICAg ICB9Ci0gICAgICAgICAgICBtYXBbY29zXS5jb2RlID0gY2JtX2NvZGU7Ci0gICAgICAgICAgICBt YXBbY29zXS5kYXRhID0gY2JtX2RhdGE7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBtYXBbY29z XS5yZWYrKzsKLSAgICBtYXBbb2xkX2Nvc10ucmVmLS07Ci0gICAgc3Bpbl91bmxvY2soJmluZm8t PmNibV9sb2NrKTsKLQotICAgIGQtPmFyY2gucHNyX2Nvc19pZHNbc29ja2V0XSA9IGNvczsKLQog ICAgIHJldHVybiAwOwogfQogCi0vKiBDYWxsZWQgd2l0aCBkb21haW4gbG9jayBoZWxkLCBubyBl eHRyYSBsb2NrIG5lZWRlZCBmb3IgJ3Bzcl9jb3NfaWRzJyAqLwotc3RhdGljIHZvaWQgcHNyX2Zy ZWVfY29zKHN0cnVjdCBkb21haW4gKmQpCi17Ci0gICAgdW5zaWduZWQgaW50IHNvY2tldDsKLSAg ICB1bnNpZ25lZCBpbnQgY29zOwotICAgIHN0cnVjdCBwc3JfY2F0X3NvY2tldF9pbmZvICppbmZv OwotCi0gICAgaWYoICFkLT5hcmNoLnBzcl9jb3NfaWRzICkKLSAgICAgICAgcmV0dXJuOwotCi0g ICAgZm9yX2VhY2hfc2V0X2JpdChzb2NrZXQsIGNhdF9zb2NrZXRfZW5hYmxlLCBucl9zb2NrZXRz KQotICAgIHsKLSAgICAgICAgaWYgKCAoY29zID0gZC0+YXJjaC5wc3JfY29zX2lkc1tzb2NrZXRd KSA9PSAwICkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGluZm8gPSBjYXRfc29j a2V0X2luZm8gKyBzb2NrZXQ7Ci0gICAgICAgIHNwaW5fbG9jaygmaW5mby0+Y2JtX2xvY2spOwot ICAgICAgICBpbmZvLT5jb3NfdG9fY2JtW2Nvc10ucmVmLS07Ci0gICAgICAgIHNwaW5fdW5sb2Nr KCZpbmZvLT5jYm1fbG9jayk7Ci0gICAgfQotCi0gICAgeGZyZWUoZC0+YXJjaC5wc3JfY29zX2lk cyk7Ci0gICAgZC0+YXJjaC5wc3JfY29zX2lkcyA9IE5VTEw7Ci19Ci0KIGludCBwc3JfZG9tYWlu X2luaXQoc3RydWN0IGRvbWFpbiAqZCkKIHsKLSAgICBpZiAoIGNhdF9zb2NrZXRfaW5mbyApCi0g ICAgewotICAgICAgICBkLT5hcmNoLnBzcl9jb3NfaWRzID0geHphbGxvY19hcnJheSh1bnNpZ25l ZCBpbnQsIG5yX3NvY2tldHMpOwotICAgICAgICBpZiAoICFkLT5hcmNoLnBzcl9jb3NfaWRzICkK LSAgICAgICAgICAgIHJldHVybiAtRU5PTUVNOwotICAgIH0KLQogICAgIHJldHVybiAwOwogfQog CiB2b2lkIHBzcl9kb21haW5fZnJlZShzdHJ1Y3QgZG9tYWluICpkKQogewogICAgIHBzcl9mcmVl X3JtaWQoZCk7Ci0gICAgcHNyX2ZyZWVfY29zKGQpOwotfQotCi1zdGF0aWMgaW50IGNhdF9jcHVf cHJlcGFyZSh1bnNpZ25lZCBpbnQgY3B1KQotewotICAgIGlmICggIWNhdF9zb2NrZXRfaW5mbyAp Ci0gICAgICAgIHJldHVybiAwOwotCi0gICAgaWYgKCB0ZW1wX2Nvc190b19jYm0gPT0gTlVMTCAm JgotICAgICAgICAgKHRlbXBfY29zX3RvX2NibSA9IHh6YWxsb2NfYXJyYXkoc3RydWN0IHBzcl9j YXRfY2JtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0X2Nv c19tYXggKyAxVUwpKSA9PSBOVUxMICkKLSAgICAgICAgcmV0dXJuIC1FTk9NRU07Ci0KLSAgICBy ZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgY2F0X2NwdV9pbml0KHZvaWQpCi17Ci0gICAgdW5z aWduZWQgaW50IGVheCwgZWJ4LCBlY3gsIGVkeDsKLSAgICBzdHJ1Y3QgcHNyX2NhdF9zb2NrZXRf aW5mbyAqaW5mbzsKLSAgICB1bnNpZ25lZCBpbnQgc29ja2V0OwotICAgIHVuc2lnbmVkIGludCBj cHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7Ci0gICAgdWludDY0X3QgdmFsOwotICAgIGNvbnN0IHN0 cnVjdCBjcHVpbmZvX3g4NiAqYyA9IGNwdV9kYXRhICsgY3B1OwotCi0gICAgaWYgKCAhY3B1X2hh cyhjLCBYODZfRkVBVFVSRV9QUUUpIHx8IGMtPmNwdWlkX2xldmVsIDwgUFNSX0NQVUlEX0xFVkVM X0NBVCApCi0gICAgICAgIHJldHVybjsKLQotICAgIHNvY2tldCA9IGNwdV90b19zb2NrZXQoY3B1 KTsKLSAgICBpZiAoIHRlc3RfYml0KHNvY2tldCwgY2F0X3NvY2tldF9lbmFibGUpICkKLSAgICAg ICAgcmV0dXJuOwotCi0gICAgY3B1aWRfY291bnQoUFNSX0NQVUlEX0xFVkVMX0NBVCwgMCwgJmVh eCwgJmVieCwgJmVjeCwgJmVkeCk7Ci0gICAgaWYgKCBlYnggJiBQU1JfUkVTT1VSQ0VfVFlQRV9M MyApCi0gICAgewotICAgICAgICBjcHVpZF9jb3VudChQU1JfQ1BVSURfTEVWRUxfQ0FULCAxLCAm ZWF4LCAmZWJ4LCAmZWN4LCAmZWR4KTsKLSAgICAgICAgaW5mbyA9IGNhdF9zb2NrZXRfaW5mbyAr IHNvY2tldDsKLSAgICAgICAgaW5mby0+Y2JtX2xlbiA9IChlYXggJiAweDFmKSArIDE7Ci0gICAg ICAgIGluZm8tPmNvc19tYXggPSBtaW4ob3B0X2Nvc19tYXgsIGVkeCAmIDB4ZmZmZik7Ci0KLSAg ICAgICAgaW5mby0+Y29zX3RvX2NibSA9IHRlbXBfY29zX3RvX2NibTsKLSAgICAgICAgdGVtcF9j b3NfdG9fY2JtID0gTlVMTDsKLSAgICAgICAgLyogY29zPTAgaXMgcmVzZXJ2ZWQgYXMgZGVmYXVs dCBjYm0oYWxsIG9uZXMpLiAqLwotICAgICAgICBpbmZvLT5jb3NfdG9fY2JtWzBdLmNibSA9ICgx dWxsIDw8IGluZm8tPmNibV9sZW4pIC0gMTsKLQotICAgICAgICBzcGluX2xvY2tfaW5pdCgmaW5m by0+Y2JtX2xvY2spOwotCi0gICAgICAgIHNldF9iaXQoc29ja2V0LCBjYXRfc29ja2V0X2VuYWJs ZSk7Ci0KLSAgICAgICAgaWYgKCAoZWN4ICYgUFNSX0NBVF9DRFBfQ0FQQUJJTElUWSkgJiYgKG9w dF9wc3IgJiBQU1JfQ0RQKSAmJgotICAgICAgICAgICAgIGNkcF9zb2NrZXRfZW5hYmxlICYmICF0 ZXN0X2JpdChzb2NrZXQsIGNkcF9zb2NrZXRfZW5hYmxlKSApCi0gICAgICAgIHsKLSAgICAgICAg ICAgIGluZm8tPmNvc190b19jYm1bMF0uY29kZSA9ICgxdWxsIDw8IGluZm8tPmNibV9sZW4pIC0g MTsKLSAgICAgICAgICAgIGluZm8tPmNvc190b19jYm1bMF0uZGF0YSA9ICgxdWxsIDw8IGluZm8t PmNibV9sZW4pIC0gMTsKLQotICAgICAgICAgICAgLyogV2Ugb25seSB3cml0ZSBtYXNrMSBzaW5j ZSBtYXNrMCBpcyBhbHdheXMgYWxsIG9uZXMgYnkgZGVmYXVsdC4gKi8KLSAgICAgICAgICAgIHdy bXNybChNU1JfSUEzMl9QU1JfTDNfTUFTSygxKSwgKDF1bGwgPDwgaW5mby0+Y2JtX2xlbikgLSAx KTsKLQotICAgICAgICAgICAgcmRtc3JsKE1TUl9JQTMyX1BTUl9MM19RT1NfQ0ZHLCB2YWwpOwot ICAgICAgICAgICAgd3Jtc3JsKE1TUl9JQTMyX1BTUl9MM19RT1NfQ0ZHLCB2YWwgfCAoMSA8PCBQ U1JfTDNfUU9TX0NEUF9FTkFCTEVfQklUKSk7Ci0KLSAgICAgICAgICAgIC8qIEN1dCBoYWxmIG9m IGNvc19tYXggd2hlbiBDRFAgaXMgZW5hYmxlZC4gKi8KLSAgICAgICAgICAgIGluZm8tPmNvc19t YXggPj49IDE7Ci0KLSAgICAgICAgICAgIHNldF9iaXQoc29ja2V0LCBjZHBfc29ja2V0X2VuYWJs ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcHJpbnRrKFhFTkxPR19JTkZPICJDQVQ6IGVuYWJsZWQg b24gc29ja2V0ICV1LCBjb3NfbWF4OiV1LCBjYm1fbGVuOiV1LCBDRFA6JXNcbiIsCi0gICAgICAg ICAgICAgICBzb2NrZXQsIGluZm8tPmNvc19tYXgsIGluZm8tPmNibV9sZW4sCi0gICAgICAgICAg ICAgICBjZHBfaXNfZW5hYmxlZChzb2NrZXQpID8gIm9uIiA6ICJvZmYiKTsKLSAgICB9Ci19Ci0K LXN0YXRpYyB2b2lkIGNhdF9jcHVfZmluaSh1bnNpZ25lZCBpbnQgY3B1KQotewotICAgIHVuc2ln bmVkIGludCBzb2NrZXQgPSBjcHVfdG9fc29ja2V0KGNwdSk7Ci0KLSAgICBpZiAoICFzb2NrZXRf Y3B1bWFza1tzb2NrZXRdIHx8IGNwdW1hc2tfZW1wdHkoc29ja2V0X2NwdW1hc2tbc29ja2V0XSkg KQotICAgIHsKLSAgICAgICAgc3RydWN0IHBzcl9jYXRfc29ja2V0X2luZm8gKmluZm8gPSBjYXRf c29ja2V0X2luZm8gKyBzb2NrZXQ7Ci0KLSAgICAgICAgaWYgKCBpbmZvLT5jb3NfdG9fY2JtICkK LSAgICAgICAgewotICAgICAgICAgICAgeGZyZWUoaW5mby0+Y29zX3RvX2NibSk7Ci0gICAgICAg ICAgICBpbmZvLT5jb3NfdG9fY2JtID0gTlVMTDsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICgg Y2RwX2lzX2VuYWJsZWQoc29ja2V0KSApCi0gICAgICAgICAgICBjbGVhcl9iaXQoc29ja2V0LCBj ZHBfc29ja2V0X2VuYWJsZSk7Ci0KLSAgICAgICAgY2xlYXJfYml0KHNvY2tldCwgY2F0X3NvY2tl dF9lbmFibGUpOwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQgX19pbml0IHBzcl9jYXRfZnJlZSh2 b2lkKQotewotICAgIHhmcmVlKGNhdF9zb2NrZXRfZW5hYmxlKTsKLSAgICBjYXRfc29ja2V0X2Vu YWJsZSA9IE5VTEw7Ci0gICAgeGZyZWUoY2F0X3NvY2tldF9pbmZvKTsKLSAgICBjYXRfc29ja2V0 X2luZm8gPSBOVUxMOwotfQotCi1zdGF0aWMgdm9pZCBfX2luaXQgaW5pdF9wc3JfY2F0KHZvaWQp Ci17Ci0gICAgaWYgKCBvcHRfY29zX21heCA8IDEgKQotICAgIHsKLSAgICAgICAgcHJpbnRrKFhF TkxPR19JTkZPICJDQVQ6IGRpc2FibGVkLCBjb3NfbWF4IGlzIHRvbyBzbWFsbFxuIik7Ci0gICAg ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBjYXRfc29ja2V0X2VuYWJsZSA9IHh6YWxsb2NfYXJy YXkodW5zaWduZWQgbG9uZywgQklUU19UT19MT05HUyhucl9zb2NrZXRzKSk7Ci0gICAgY2F0X3Nv Y2tldF9pbmZvID0geHphbGxvY19hcnJheShzdHJ1Y3QgcHNyX2NhdF9zb2NrZXRfaW5mbywgbnJf c29ja2V0cyk7Ci0gICAgY2RwX3NvY2tldF9lbmFibGUgPSB4emFsbG9jX2FycmF5KHVuc2lnbmVk IGxvbmcsIEJJVFNfVE9fTE9OR1MobnJfc29ja2V0cykpOwotCi0gICAgaWYgKCAhY2F0X3NvY2tl dF9lbmFibGUgfHwgIWNhdF9zb2NrZXRfaW5mbyApCi0gICAgICAgIHBzcl9jYXRfZnJlZSgpOwog fQogCiBzdGF0aWMgaW50IHBzcl9jcHVfcHJlcGFyZSh1bnNpZ25lZCBpbnQgY3B1KQogewotICAg IHJldHVybiBjYXRfY3B1X3ByZXBhcmUoY3B1KTsKKyAgICByZXR1cm4gMDsKIH0KIAogc3RhdGlj IHZvaWQgcHNyX2NwdV9pbml0KHZvaWQpCiB7Ci0gICAgaWYgKCBjYXRfc29ja2V0X2luZm8gKQot ICAgICAgICBjYXRfY3B1X2luaXQoKTsKLQogICAgIHBzcl9hc3NvY19pbml0KCk7CiB9CiAKIHN0 YXRpYyB2b2lkIHBzcl9jcHVfZmluaSh1bnNpZ25lZCBpbnQgY3B1KQogewotICAgIGlmICggY2F0 X3NvY2tldF9pbmZvICkKLSAgICAgICAgY2F0X2NwdV9maW5pKGNwdSk7CisgICAgcmV0dXJuOwog fQogCiBzdGF0aWMgaW50IGNwdV9jYWxsYmFjaygKQEAgLTczOCwxNCArMjgyLDEwIEBAIHN0YXRp YyBpbnQgX19pbml0IHBzcl9wcmVzbXBfaW5pdCh2b2lkKQogICAgIGlmICggKG9wdF9wc3IgJiBQ U1JfQ01UKSAmJiBvcHRfcm1pZF9tYXggKQogICAgICAgICBpbml0X3Bzcl9jbXQob3B0X3JtaWRf bWF4KTsKIAotICAgIGlmICggb3B0X3BzciAmIFBTUl9DQVQgKQotICAgICAgICBpbml0X3Bzcl9j YXQoKTsKLQotICAgIGlmICggcHNyX2NwdV9wcmVwYXJlKDApICkKLSAgICAgICAgcHNyX2NhdF9m cmVlKCk7CisgICAgcHNyX2NwdV9wcmVwYXJlKDApOwogCiAgICAgcHNyX2NwdV9pbml0KCk7Ci0g ICAgaWYgKCBwc3JfY210X2VuYWJsZWQoKSB8fCBjYXRfc29ja2V0X2luZm8gKQorICAgIGlmICgg cHNyX2NtdF9lbmFibGVkKCkgKQogICAgICAgICByZWdpc3Rlcl9jcHVfbm90aWZpZXIoJmNwdV9u ZmIpOwogCiAgICAgcmV0dXJuIDA7Ci0tIAoxLjkuMQoKCl9fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVs QGxpc3RzLnhlbi5vcmcKaHR0cHM6Ly9saXN0cy54ZW4ub3JnL3hlbi1kZXZlbAo=