From mboxrd@z Thu Jan 1 00:00:00 1970 From: Yi Sun Subject: [PATCH v11 03/23] x86: refactor psr: remove L3 CAT/CDP codes. Date: Wed, 3 May 2017 16:44:03 +0800 Message-ID: <1493801063-38513-4-git-send-email-yi.y.sun@linux.intel.com> References: <1493801063-38513-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 1d5q2j-0000V2-Kv for xen-devel@lists.xenproject.org; Wed, 03 May 2017 08:53:53 +0000 In-Reply-To: <1493801063-38513-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 bmRlcnN0YW5kLgogICAgICAoc3VnZ2VzdGVkIGJ5IEphbiBCZXVsaWNoKQotLS0KIHhlbi9hcmNo L3g4Ni9wc3IuYyB8IDQ3MCArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgNDY1IGRlbGV0 aW9ucygtKQoKZGlmZiAtLWdpdCBhL3hlbi9hcmNoL3g4Ni9wc3IuYyBiL3hlbi9hcmNoL3g4Ni9w c3IuYwppbmRleCAwYjUwNzNjLi45NmE4NTg5IDEwMDY0NAotLS0gYS94ZW4vYXJjaC94ODYvcHNy LmMKKysrIGIveGVuL2FyY2gveDg2L3Bzci5jCkBAIC0yMywyNCArMjMsNiBAQAogI2RlZmluZSBQ U1JfQ0FUICAgICAgICAoMTw8MSkKICNkZWZpbmUgUFNSX0NEUCAgICAgICAgKDE8PDIpCiAKLXN0 cnVjdCBwc3JfY2F0X2NibSB7Ci0gICAgdW5pb24gewotICAgICAgICB1aW50NjRfdCBjYm07Ci0g ICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICB1aW50NjRfdCBjb2RlOwotICAgICAgICAgICAg dWludDY0X3QgZGF0YTsKLSAgICAgICAgfTsKLSAgICB9OwotICAgIHVuc2lnbmVkIGludCByZWY7 Ci19OwotCi1zdHJ1Y3QgcHNyX2NhdF9zb2NrZXRfaW5mbyB7Ci0gICAgdW5zaWduZWQgaW50IGNi bV9sZW47Ci0gICAgdW5zaWduZWQgaW50IGNvc19tYXg7Ci0gICAgc3RydWN0IHBzcl9jYXRfY2Jt ICpjb3NfdG9fY2JtOwotICAgIHNwaW5sb2NrX3QgY2JtX2xvY2s7Ci19OwotCiBzdHJ1Y3QgcHNy X2Fzc29jIHsKICAgICB1aW50NjRfdCB2YWw7CiAgICAgdWludDY0X3QgY29zX21hc2s7CkBAIC00 OCwyNiArMzAsMTEgQEAgc3RydWN0IHBzcl9hc3NvYyB7CiAKIHN0cnVjdCBwc3JfY210ICpfX3Jl YWRfbW9zdGx5IHBzcl9jbXQ7CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nICpfX3JlYWRfbW9zdGx5 IGNhdF9zb2NrZXRfZW5hYmxlOwotc3RhdGljIHN0cnVjdCBwc3JfY2F0X3NvY2tldF9pbmZvICpf X3JlYWRfbW9zdGx5IGNhdF9zb2NrZXRfaW5mbzsKLXN0YXRpYyB1bnNpZ25lZCBsb25nICpfX3Jl YWRfbW9zdGx5IGNkcF9zb2NrZXRfZW5hYmxlOwotCiBzdGF0aWMgdW5zaWduZWQgaW50IG9wdF9w c3I7CiBzdGF0aWMgdW5zaWduZWQgaW50IF9faW5pdGRhdGEgb3B0X3JtaWRfbWF4ID0gMjU1Owot c3RhdGljIHVuc2lnbmVkIGludCBfX3JlYWRfbW9zdGx5IG9wdF9jb3NfbWF4ID0gMjU1Owogc3Rh dGljIHVpbnQ2NF90IHJtaWRfbWFzazsKIHN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgcHNy X2Fzc29jLCBwc3JfYXNzb2MpOwogCi1zdGF0aWMgc3RydWN0IHBzcl9jYXRfY2JtICp0ZW1wX2Nv c190b19jYm07Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X3NvY2tldF9jcHUodW5zaWduZWQg aW50IHNvY2tldCkKLXsKLSAgICBpZiAoIGxpa2VseShzb2NrZXQgPCBucl9zb2NrZXRzKSApCi0g ICAgICAgIHJldHVybiBjcHVtYXNrX2FueShzb2NrZXRfY3B1bWFza1tzb2NrZXRdKTsKLQotICAg IHJldHVybiBucl9jcHVfaWRzOwotfQotCiBzdGF0aWMgdm9pZCBfX2luaXQgcGFyc2VfcHNyX2Jv b2woY2hhciAqcywgY2hhciAqdmFsdWUsIGNoYXIgKmZlYXR1cmUsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG1hc2spCiB7CkBAIC0xMDcsOSArNzQsNiBA QCBzdGF0aWMgdm9pZCBfX2luaXQgcGFyc2VfcHNyX3BhcmFtKGNoYXIgKnMpCiAgICAgICAgIGlm ICggdmFsX3N0ciAmJiAhc3RyY21wKHMsICJybWlkX21heCIpICkKICAgICAgICAgICAgIG9wdF9y bWlkX21heCA9IHNpbXBsZV9zdHJ0b3VsKHZhbF9zdHIsIE5VTEwsIDApOwogCi0gICAgICAgIGlm ICggdmFsX3N0ciAmJiAhc3RyY21wKHMsICJjb3NfbWF4IikgKQotICAgICAgICAgICAgb3B0X2Nv c19tYXggPSBzaW1wbGVfc3RydG91bCh2YWxfc3RyLCBOVUxMLCAwKTsKLQogICAgICAgICBzID0g c3MgKyAxOwogICAgIH0gd2hpbGUgKCBzcyApOwogfQpAQCAtMjEzLDE2ICsxNzcsNyBAQCBzdGF0 aWMgaW5saW5lIHZvaWQgcHNyX2Fzc29jX2luaXQodm9pZCkKIHsKICAgICBzdHJ1Y3QgcHNyX2Fz c29jICpwc3JhID0gJnRoaXNfY3B1KHBzcl9hc3NvYyk7CiAKLSAgICBpZiAoIGNhdF9zb2NrZXRf aW5mbyApCi0gICAgewotICAgICAgICB1bnNpZ25lZCBpbnQgc29ja2V0ID0gY3B1X3RvX3NvY2tl dChzbXBfcHJvY2Vzc29yX2lkKCkpOwotCi0gICAgICAgIGlmICggdGVzdF9iaXQoc29ja2V0LCBj YXRfc29ja2V0X2VuYWJsZSkgKQotICAgICAgICAgICAgcHNyYS0+Y29zX21hc2sgPSAoKDF1bGwg PDwgZ2V0X2NvdW50X29yZGVyKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRfc29j a2V0X2luZm9bc29ja2V0XS5jb3NfbWF4KSkgLSAxKSA8PCAzMjsKLSAgICB9Ci0KLSAgICBpZiAo IHBzcl9jbXRfZW5hYmxlZCgpIHx8IHBzcmEtPmNvc19tYXNrICkKKyAgICBpZiAoIHBzcl9jbXRf ZW5hYmxlZCgpICkKICAgICAgICAgcmRtc3JsKE1TUl9JQTMyX1BTUl9BU1NPQywgcHNyYS0+dmFs KTsKIH0KIApAQCAtMjMxLDEyICsxODYsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcHNyX2Fzc29j X3JtaWQodWludDY0X3QgKnJlZywgdW5zaWduZWQgaW50IHJtaWQpCiAgICAgKnJlZyA9ICgqcmVn ICYgfnJtaWRfbWFzaykgfCAocm1pZCAmIHJtaWRfbWFzayk7CiB9CiAKLXN0YXRpYyBpbmxpbmUg dm9pZCBwc3JfYXNzb2NfY29zKHVpbnQ2NF90ICpyZWcsIHVuc2lnbmVkIGludCBjb3MsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCBjb3NfbWFzaykKLXsKLSAgICAq cmVnID0gKCpyZWcgJiB+Y29zX21hc2spIHwgKCgodWludDY0X3QpY29zIDw8IDMyKSAmIGNvc19t YXNrKTsKLX0KLQogdm9pZCBwc3JfY3R4dF9zd2l0Y2hfdG8oc3RydWN0IGRvbWFpbiAqZCkKIHsK ICAgICBzdHJ1Y3QgcHNyX2Fzc29jICpwc3JhID0gJnRoaXNfY3B1KHBzcl9hc3NvYyk7CkBAIC0y NDUsNDU5ICsxOTQsNTQgQEAgdm9pZCBwc3JfY3R4dF9zd2l0Y2hfdG8oc3RydWN0IGRvbWFpbiAq ZCkKICAgICBpZiAoIHBzcl9jbXRfZW5hYmxlZCgpICkKICAgICAgICAgcHNyX2Fzc29jX3JtaWQo JnJlZywgZC0+YXJjaC5wc3Jfcm1pZCk7CiAKLSAgICBpZiAoIHBzcmEtPmNvc19tYXNrICkKLSAg ICAgICAgcHNyX2Fzc29jX2NvcygmcmVnLCBkLT5hcmNoLnBzcl9jb3NfaWRzID8KLSAgICAgICAg ICAgICAgICAgICAgICBkLT5hcmNoLnBzcl9jb3NfaWRzW2NwdV90b19zb2NrZXQoc21wX3Byb2Nl c3Nvcl9pZCgpKV0gOgotICAgICAgICAgICAgICAgICAgICAgIDAsIHBzcmEtPmNvc19tYXNrKTsK LQogICAgIGlmICggcmVnICE9IHBzcmEtPnZhbCApCiAgICAgewogICAgICAgICB3cm1zcmwoTVNS X0lBMzJfUFNSX0FTU09DLCByZWcpOwogICAgICAgICBwc3JhLT52YWwgPSByZWc7CiAgICAgfQog fQotc3RhdGljIHN0cnVjdCBwc3JfY2F0X3NvY2tldF9pbmZvICpnZXRfY2F0X3NvY2tldF9pbmZv KHVuc2lnbmVkIGludCBzb2NrZXQpCi17Ci0gICAgaWYgKCAhY2F0X3NvY2tldF9pbmZvICkKLSAg ICAgICAgcmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7Ci0KLSAgICBpZiAoIHNvY2tldCA+PSBucl9z b2NrZXRzICkKLSAgICAgICAgcmV0dXJuIEVSUl9QVFIoLUVOT1RTT0NLKTsKLQotICAgIGlmICgg IXRlc3RfYml0KHNvY2tldCwgY2F0X3NvY2tldF9lbmFibGUpICkKLSAgICAgICAgcmV0dXJuIEVS Ul9QVFIoLUVOT0VOVCk7Ci0KLSAgICByZXR1cm4gY2F0X3NvY2tldF9pbmZvICsgc29ja2V0Owot fQotCi1zdGF0aWMgaW5saW5lIGJvb2xfdCBjZHBfaXNfZW5hYmxlZCh1bnNpZ25lZCBpbnQgc29j a2V0KQotewotICAgIHJldHVybiBjZHBfc29ja2V0X2VuYWJsZSAmJiB0ZXN0X2JpdChzb2NrZXQs IGNkcF9zb2NrZXRfZW5hYmxlKTsKLX0KIAogaW50IHBzcl9nZXRfY2F0X2wzX2luZm8odW5zaWdu ZWQgaW50IHNvY2tldCwgdWludDMyX3QgKmNibV9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAg ICB1aW50MzJfdCAqY29zX21heCwgdWludDMyX3QgKmZsYWdzKQogewotICAgIHN0cnVjdCBwc3Jf Y2F0X3NvY2tldF9pbmZvICppbmZvID0gZ2V0X2NhdF9zb2NrZXRfaW5mbyhzb2NrZXQpOwotCi0g ICAgaWYgKCBJU19FUlIoaW5mbykgKQotICAgICAgICByZXR1cm4gUFRSX0VSUihpbmZvKTsKLQot ICAgICpjYm1fbGVuID0gaW5mby0+Y2JtX2xlbjsKLSAgICAqY29zX21heCA9IGluZm8tPmNvc19t YXg7Ci0KLSAgICAqZmxhZ3MgPSAwOwotICAgIGlmICggY2RwX2lzX2VuYWJsZWQoc29ja2V0KSAp Ci0gICAgICAgICpmbGFncyB8PSBYRU5fU1lTQ1RMX1BTUl9DQVRfTDNfQ0RQOwotCiAgICAgcmV0 dXJuIDA7CiB9CiAKIGludCBwc3JfZ2V0X2wzX2NibShzdHJ1Y3QgZG9tYWluICpkLCB1bnNpZ25l ZCBpbnQgc29ja2V0LAogICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90ICpjYm0sIGVudW0gY2Jt X3R5cGUgdHlwZSkKIHsKLSAgICBzdHJ1Y3QgcHNyX2NhdF9zb2NrZXRfaW5mbyAqaW5mbyA9IGdl dF9jYXRfc29ja2V0X2luZm8oc29ja2V0KTsKLSAgICBib29sX3QgY2RwX2VuYWJsZWQgPSBjZHBf aXNfZW5hYmxlZChzb2NrZXQpOwotCi0gICAgaWYgKCBJU19FUlIoaW5mbykgKQotICAgICAgICBy ZXR1cm4gUFRSX0VSUihpbmZvKTsKLQotICAgIHN3aXRjaCAoIHR5cGUgKQotICAgIHsKLSAgICBj YXNlIFBTUl9DQk1fVFlQRV9MMzoKLSAgICAgICAgaWYgKCBjZHBfZW5hYmxlZCApCi0gICAgICAg ICAgICByZXR1cm4gLUVYREVWOwotICAgICAgICAqY2JtID0gaW5mby0+Y29zX3RvX2NibVtkLT5h cmNoLnBzcl9jb3NfaWRzW3NvY2tldF1dLmNibTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNl IFBTUl9DQk1fVFlQRV9MM19DT0RFOgotICAgICAgICBpZiAoICFjZHBfZW5hYmxlZCApCi0gICAg ICAgICAgICAqY2JtID0gaW5mby0+Y29zX3RvX2NibVtkLT5hcmNoLnBzcl9jb3NfaWRzW3NvY2tl dF1dLmNibTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgKmNibSA9IGluZm8tPmNvc190b19j Ym1bZC0+YXJjaC5wc3JfY29zX2lkc1tzb2NrZXRdXS5jb2RlOwotICAgICAgICBicmVhazsKLQot ICAgIGNhc2UgUFNSX0NCTV9UWVBFX0wzX0RBVEE6Ci0gICAgICAgIGlmICggIWNkcF9lbmFibGVk ICkKLSAgICAgICAgICAgICpjYm0gPSBpbmZvLT5jb3NfdG9fY2JtW2QtPmFyY2gucHNyX2Nvc19p ZHNbc29ja2V0XV0uY2JtOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICAqY2JtID0gaW5mby0+ Y29zX3RvX2NibVtkLT5hcmNoLnBzcl9jb3NfaWRzW3NvY2tldF1dLmRhdGE7Ci0gICAgICAgIGJy ZWFrOwotCi0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX1VOUkVBQ0hBQkxFKCk7Ci0gICAg fQotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBib29sX3QgcHNyX2NoZWNrX2NibSh1bnNp Z25lZCBpbnQgY2JtX2xlbiwgdWludDY0X3QgY2JtKQotewotICAgIHVuc2lnbmVkIGludCBmaXJz dF9iaXQsIHplcm9fYml0OwotCi0gICAgLyogU2V0IGJpdHMgc2hvdWxkIG9ubHkgaW4gdGhlIHJh bmdlIG9mIFswLCBjYm1fbGVuKS4gKi8KLSAgICBpZiAoIGNibSAmICh+MHVsbCA8PCBjYm1fbGVu KSApCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgLyogQXQgbGVhc3Qgb25lIGJpdCBuZWVkIHRv IGJlIHNldC4gKi8KLSAgICBpZiAoIGNibSA9PSAwICkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAg ICBmaXJzdF9iaXQgPSBmaW5kX2ZpcnN0X2JpdCgmY2JtLCBjYm1fbGVuKTsKLSAgICB6ZXJvX2Jp dCA9IGZpbmRfbmV4dF96ZXJvX2JpdCgmY2JtLCBjYm1fbGVuLCBmaXJzdF9iaXQpOwotCi0gICAg LyogU2V0IGJpdHMgc2hvdWxkIGJlIGNvbnRpZ3VvdXMuICovCi0gICAgaWYgKCB6ZXJvX2JpdCA8 IGNibV9sZW4gJiYKLSAgICAgICAgIGZpbmRfbmV4dF9iaXQoJmNibSwgY2JtX2xlbiwgemVyb19i aXQpIDwgY2JtX2xlbiApCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIDE7Ci19Ci0K LXN0cnVjdCBjb3NfY2JtX2luZm8KLXsKLSAgICB1bnNpZ25lZCBpbnQgY29zOwotICAgIGJvb2xf dCBjZHA7Ci0gICAgdWludDY0X3QgY2JtX2NvZGU7Ci0gICAgdWludDY0X3QgY2JtX2RhdGE7Ci19 OwotCi1zdGF0aWMgdm9pZCBkb193cml0ZV9sM19jYm0odm9pZCAqZGF0YSkKLXsKLSAgICBzdHJ1 Y3QgY29zX2NibV9pbmZvICppbmZvID0gZGF0YTsKLQotICAgIGlmICggaW5mby0+Y2RwICkKLSAg ICB7Ci0gICAgICAgIHdybXNybChNU1JfSUEzMl9QU1JfTDNfTUFTS19DT0RFKGluZm8tPmNvcyks IGluZm8tPmNibV9jb2RlKTsKLSAgICAgICAgd3Jtc3JsKE1TUl9JQTMyX1BTUl9MM19NQVNLX0RB VEEoaW5mby0+Y29zKSwgaW5mby0+Y2JtX2RhdGEpOwotICAgIH0KLSAgICBlbHNlCi0gICAgICAg IHdybXNybChNU1JfSUEzMl9QU1JfTDNfTUFTSyhpbmZvLT5jb3MpLCBpbmZvLT5jYm1fY29kZSk7 Ci19Ci0KLXN0YXRpYyBpbnQgd3JpdGVfbDNfY2JtKHVuc2lnbmVkIGludCBzb2NrZXQsIHVuc2ln bmVkIGludCBjb3MsCi0gICAgICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCBjYm1fY29kZSwg dWludDY0X3QgY2JtX2RhdGEsIGJvb2xfdCBjZHApCi17Ci0gICAgc3RydWN0IGNvc19jYm1faW5m byBpbmZvID0KLSAgICB7Ci0gICAgICAgIC5jb3MgPSBjb3MsCi0gICAgICAgIC5jYm1fY29kZSA9 IGNibV9jb2RlLAotICAgICAgICAuY2JtX2RhdGEgPSBjYm1fZGF0YSwKLSAgICAgICAgLmNkcCA9 IGNkcCwKLSAgICB9OwotCi0gICAgaWYgKCBzb2NrZXQgPT0gY3B1X3RvX3NvY2tldChzbXBfcHJv Y2Vzc29yX2lkKCkpICkKLSAgICAgICAgZG9fd3JpdGVfbDNfY2JtKCZpbmZvKTsKLSAgICBlbHNl Ci0gICAgewotICAgICAgICB1bnNpZ25lZCBpbnQgY3B1ID0gZ2V0X3NvY2tldF9jcHUoc29ja2V0 KTsKLQotICAgICAgICBpZiAoIGNwdSA+PSBucl9jcHVfaWRzICkKLSAgICAgICAgICAgIHJldHVy biAtRU5PVFNPQ0s7Ci0gICAgICAgIG9uX3NlbGVjdGVkX2NwdXMoY3B1bWFza19vZihjcHUpLCBk b193cml0ZV9sM19jYm0sICZpbmZvLCAxKTsKLSAgICB9Ci0KICAgICByZXR1cm4gMDsKIH0KIAot c3RhdGljIGludCBmaW5kX2NvcyhzdHJ1Y3QgcHNyX2NhdF9jYm0gKm1hcCwgdW5zaWduZWQgaW50 IGNvc19tYXgsCi0gICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IGNibV9jb2RlLCB1aW50NjRf dCBjYm1fZGF0YSwgYm9vbF90IGNkcF9lbmFibGVkKQotewotICAgIHVuc2lnbmVkIGludCBjb3M7 Ci0KLSAgICBmb3IgKCBjb3MgPSAwOyBjb3MgPD0gY29zX21heDsgY29zKysgKQotICAgIHsKLSAg ICAgICAgaWYgKCAobWFwW2Nvc10ucmVmIHx8IGNvcyA9PSAwKSAmJgotICAgICAgICAgICAgICgo IWNkcF9lbmFibGVkICYmIG1hcFtjb3NdLmNibSA9PSBjYm1fY29kZSkgfHwKLSAgICAgICAgICAg ICAgKGNkcF9lbmFibGVkICYmIG1hcFtjb3NdLmNvZGUgPT0gY2JtX2NvZGUgJiYKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIG1hcFtjb3NdLmRhdGEgPT0gY2JtX2RhdGEpKSApCi0gICAg ICAgICAgICByZXR1cm4gY29zOwotICAgIH0KLQotICAgIHJldHVybiAtRU5PRU5UOwotfQotCi1z dGF0aWMgaW50IHBpY2tfYXZhaWxfY29zKHN0cnVjdCBwc3JfY2F0X2NibSAqbWFwLCB1bnNpZ25l ZCBpbnQgY29zX21heCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG9s ZF9jb3MpCi17Ci0gICAgdW5zaWduZWQgaW50IGNvczsKLQotICAgIC8qIElmIG9sZCBjb3MgaXMg cmVmZXJyZWQgb25seSBieSB0aGUgZG9tYWluLCB0aGVuIHVzZSBpdC4gKi8KLSAgICBpZiAoIG1h cFtvbGRfY29zXS5yZWYgPT0gMSAmJiBvbGRfY29zICE9IDAgKQotICAgICAgICByZXR1cm4gb2xk X2NvczsKLQotICAgIC8qIEZpbmQgYW4gdW51c2VkIG9uZSBvdGhlciB0aGFuIGNvczAuICovCi0g ICAgZm9yICggY29zID0gMTsgY29zIDw9IGNvc19tYXg7IGNvcysrICkKLSAgICAgICAgaWYgKCBt YXBbY29zXS5yZWYgPT0gMCApCi0gICAgICAgICAgICByZXR1cm4gY29zOwotCi0gICAgcmV0dXJu IC1FTk9FTlQ7Ci19Ci0KIGludCBwc3Jfc2V0X2wzX2NibShzdHJ1Y3QgZG9tYWluICpkLCB1bnNp Z25lZCBpbnQgc29ja2V0LAogICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IGNibSwgZW51bSBj Ym1fdHlwZSB0eXBlKQogewotICAgIHVuc2lnbmVkIGludCBvbGRfY29zLCBjb3NfbWF4OwotICAg IGludCBjb3MsIHJldDsKLSAgICB1aW50NjRfdCBjYm1fZGF0YSwgY2JtX2NvZGU7Ci0gICAgYm9v bF90IGNkcF9lbmFibGVkID0gY2RwX2lzX2VuYWJsZWQoc29ja2V0KTsKLSAgICBzdHJ1Y3QgcHNy X2NhdF9jYm0gKm1hcDsKLSAgICBzdHJ1Y3QgcHNyX2NhdF9zb2NrZXRfaW5mbyAqaW5mbyA9IGdl dF9jYXRfc29ja2V0X2luZm8oc29ja2V0KTsKLQotICAgIGlmICggSVNfRVJSKGluZm8pICkKLSAg ICAgICAgcmV0dXJuIFBUUl9FUlIoaW5mbyk7Ci0KLSAgICBpZiAoICFwc3JfY2hlY2tfY2JtKGlu Zm8tPmNibV9sZW4sIGNibSkgKQotICAgICAgICByZXR1cm4gLUVJTlZBTDsKLQotICAgIGlmICgg IWNkcF9lbmFibGVkICYmICh0eXBlID09IFBTUl9DQk1fVFlQRV9MM19DT0RFIHx8Ci0gICAgICAg ICAgICAgICAgICAgICAgICAgIHR5cGUgPT0gUFNSX0NCTV9UWVBFX0wzX0RBVEEpICkKLSAgICAg ICAgcmV0dXJuIC1FTlhJTzsKLQotICAgIGNvc19tYXggPSBpbmZvLT5jb3NfbWF4OwotICAgIG9s ZF9jb3MgPSBkLT5hcmNoLnBzcl9jb3NfaWRzW3NvY2tldF07Ci0gICAgbWFwID0gaW5mby0+Y29z X3RvX2NibTsKLQotICAgIHN3aXRjaCAoIHR5cGUgKQotICAgIHsKLSAgICBjYXNlIFBTUl9DQk1f VFlQRV9MMzoKLSAgICAgICAgY2JtX2NvZGUgPSBjYm07Ci0gICAgICAgIGNibV9kYXRhID0gY2Jt OwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgUFNSX0NCTV9UWVBFX0wzX0NPREU6Ci0gICAg ICAgIGNibV9jb2RlID0gY2JtOwotICAgICAgICBjYm1fZGF0YSA9IG1hcFtvbGRfY29zXS5kYXRh OwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgUFNSX0NCTV9UWVBFX0wzX0RBVEE6Ci0gICAg ICAgIGNibV9jb2RlID0gbWFwW29sZF9jb3NdLmNvZGU7Ci0gICAgICAgIGNibV9kYXRhID0gY2Jt OwotICAgICAgICBicmVhazsKLQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9VTlJFQUNI QUJMRSgpOwotICAgICAgICByZXR1cm4gLUVJTlZBTDsKLSAgICB9Ci0KLSAgICBzcGluX2xvY2so JmluZm8tPmNibV9sb2NrKTsKLSAgICBjb3MgPSBmaW5kX2NvcyhtYXAsIGNvc19tYXgsIGNibV9j b2RlLCBjYm1fZGF0YSwgY2RwX2VuYWJsZWQpOwotICAgIGlmICggY29zID49IDAgKQotICAgIHsK LSAgICAgICAgaWYgKCBjb3MgPT0gb2xkX2NvcyApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHNw aW5fdW5sb2NrKCZpbmZvLT5jYm1fbG9jayk7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAg ICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBjb3MgPSBwaWNrX2F2YWlsX2Nv cyhtYXAsIGNvc19tYXgsIG9sZF9jb3MpOwotICAgICAgICBpZiAoIGNvcyA8IDAgKQotICAgICAg ICB7Ci0gICAgICAgICAgICBzcGluX3VubG9jaygmaW5mby0+Y2JtX2xvY2spOwotICAgICAgICAg ICAgcmV0dXJuIGNvczsKLSAgICAgICAgfQotCi0gICAgICAgIC8qIFdlIHRyeSB0byBhdm9pZCB3 cml0aW5nIE1TUi4gKi8KLSAgICAgICAgaWYgKCAoY2RwX2VuYWJsZWQgJiYKLSAgICAgICAgICAg ICAobWFwW2Nvc10uY29kZSAhPSBjYm1fY29kZSB8fCBtYXBbY29zXS5kYXRhICE9IGNibV9kYXRh KSkgfHwKLSAgICAgICAgICAgICAoIWNkcF9lbmFibGVkICYmIG1hcFtjb3NdLmNibSAhPSBjYm1f Y29kZSkgKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXQgPSB3cml0ZV9sM19jYm0oc29ja2V0 LCBjb3MsIGNibV9jb2RlLCBjYm1fZGF0YSwgY2RwX2VuYWJsZWQpOwotICAgICAgICAgICAgaWYg KCByZXQgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHNwaW5fdW5sb2NrKCZpbmZv LT5jYm1fbG9jayk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKLSAgICAgICAgICAgIH0K LSAgICAgICAgICAgIG1hcFtjb3NdLmNvZGUgPSBjYm1fY29kZTsKLSAgICAgICAgICAgIG1hcFtj b3NdLmRhdGEgPSBjYm1fZGF0YTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIG1hcFtjb3NdLnJl ZisrOwotICAgIG1hcFtvbGRfY29zXS5yZWYtLTsKLSAgICBzcGluX3VubG9jaygmaW5mby0+Y2Jt X2xvY2spOwotCi0gICAgZC0+YXJjaC5wc3JfY29zX2lkc1tzb2NrZXRdID0gY29zOwotCiAgICAg cmV0dXJuIDA7CiB9CiAKLS8qIENhbGxlZCB3aXRoIGRvbWFpbiBsb2NrIGhlbGQsIG5vIGV4dHJh IGxvY2sgbmVlZGVkIGZvciAncHNyX2Nvc19pZHMnICovCi1zdGF0aWMgdm9pZCBwc3JfZnJlZV9j b3Moc3RydWN0IGRvbWFpbiAqZCkKLXsKLSAgICB1bnNpZ25lZCBpbnQgc29ja2V0OwotICAgIHVu c2lnbmVkIGludCBjb3M7Ci0gICAgc3RydWN0IHBzcl9jYXRfc29ja2V0X2luZm8gKmluZm87Ci0K LSAgICBpZiggIWQtPmFyY2gucHNyX2Nvc19pZHMgKQotICAgICAgICByZXR1cm47Ci0KLSAgICBm b3JfZWFjaF9zZXRfYml0KHNvY2tldCwgY2F0X3NvY2tldF9lbmFibGUsIG5yX3NvY2tldHMpCi0g ICAgewotICAgICAgICBpZiAoIChjb3MgPSBkLT5hcmNoLnBzcl9jb3NfaWRzW3NvY2tldF0pID09 IDAgKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgaW5mbyA9IGNhdF9zb2NrZXRf aW5mbyArIHNvY2tldDsKLSAgICAgICAgc3Bpbl9sb2NrKCZpbmZvLT5jYm1fbG9jayk7Ci0gICAg ICAgIGluZm8tPmNvc190b19jYm1bY29zXS5yZWYtLTsKLSAgICAgICAgc3Bpbl91bmxvY2soJmlu Zm8tPmNibV9sb2NrKTsKLSAgICB9Ci0KLSAgICB4ZnJlZShkLT5hcmNoLnBzcl9jb3NfaWRzKTsK LSAgICBkLT5hcmNoLnBzcl9jb3NfaWRzID0gTlVMTDsKLX0KLQogaW50IHBzcl9kb21haW5faW5p dChzdHJ1Y3QgZG9tYWluICpkKQogewotICAgIGlmICggY2F0X3NvY2tldF9pbmZvICkKLSAgICB7 Ci0gICAgICAgIGQtPmFyY2gucHNyX2Nvc19pZHMgPSB4emFsbG9jX2FycmF5KHVuc2lnbmVkIGlu dCwgbnJfc29ja2V0cyk7Ci0gICAgICAgIGlmICggIWQtPmFyY2gucHNyX2Nvc19pZHMgKQotICAg ICAgICAgICAgcmV0dXJuIC1FTk9NRU07Ci0gICAgfQotCiAgICAgcmV0dXJuIDA7CiB9CiAKIHZv aWQgcHNyX2RvbWFpbl9mcmVlKHN0cnVjdCBkb21haW4gKmQpCiB7CiAgICAgcHNyX2ZyZWVfcm1p ZChkKTsKLSAgICBwc3JfZnJlZV9jb3MoZCk7Ci19Ci0KLXN0YXRpYyBpbnQgY2F0X2NwdV9wcmVw YXJlKHVuc2lnbmVkIGludCBjcHUpCi17Ci0gICAgaWYgKCAhY2F0X3NvY2tldF9pbmZvICkKLSAg ICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAoIHRlbXBfY29zX3RvX2NibSA9PSBOVUxMICYmCi0g ICAgICAgICAodGVtcF9jb3NfdG9fY2JtID0geHphbGxvY19hcnJheShzdHJ1Y3QgcHNyX2NhdF9j Ym0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRfY29zX21h eCArIDFVTCkpID09IE5VTEwgKQotICAgICAgICByZXR1cm4gLUVOT01FTTsKLQotICAgIHJldHVy biAwOwotfQotCi1zdGF0aWMgdm9pZCBjYXRfY3B1X2luaXQodm9pZCkKLXsKLSAgICB1bnNpZ25l ZCBpbnQgZWF4LCBlYngsIGVjeCwgZWR4OwotICAgIHN0cnVjdCBwc3JfY2F0X3NvY2tldF9pbmZv ICppbmZvOwotICAgIHVuc2lnbmVkIGludCBzb2NrZXQ7Ci0gICAgdW5zaWduZWQgaW50IGNwdSA9 IHNtcF9wcm9jZXNzb3JfaWQoKTsKLSAgICB1aW50NjRfdCB2YWw7Ci0gICAgY29uc3Qgc3RydWN0 IGNwdWluZm9feDg2ICpjID0gY3B1X2RhdGEgKyBjcHU7Ci0KLSAgICBpZiAoICFjcHVfaGFzKGMs IFg4Nl9GRUFUVVJFX1BRRSkgfHwgYy0+Y3B1aWRfbGV2ZWwgPCBQU1JfQ1BVSURfTEVWRUxfQ0FU ICkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc29ja2V0ID0gY3B1X3RvX3NvY2tldChjcHUpOwot ICAgIGlmICggdGVzdF9iaXQoc29ja2V0LCBjYXRfc29ja2V0X2VuYWJsZSkgKQotICAgICAgICBy ZXR1cm47Ci0KLSAgICBjcHVpZF9jb3VudChQU1JfQ1BVSURfTEVWRUxfQ0FULCAwLCAmZWF4LCAm ZWJ4LCAmZWN4LCAmZWR4KTsKLSAgICBpZiAoIGVieCAmIFBTUl9SRVNPVVJDRV9UWVBFX0wzICkK LSAgICB7Ci0gICAgICAgIGNwdWlkX2NvdW50KFBTUl9DUFVJRF9MRVZFTF9DQVQsIDEsICZlYXgs ICZlYngsICZlY3gsICZlZHgpOwotICAgICAgICBpbmZvID0gY2F0X3NvY2tldF9pbmZvICsgc29j a2V0OwotICAgICAgICBpbmZvLT5jYm1fbGVuID0gKGVheCAmIDB4MWYpICsgMTsKLSAgICAgICAg aW5mby0+Y29zX21heCA9IG1pbihvcHRfY29zX21heCwgZWR4ICYgMHhmZmZmKTsKLQotICAgICAg ICBpbmZvLT5jb3NfdG9fY2JtID0gdGVtcF9jb3NfdG9fY2JtOwotICAgICAgICB0ZW1wX2Nvc190 b19jYm0gPSBOVUxMOwotICAgICAgICAvKiBjb3M9MCBpcyByZXNlcnZlZCBhcyBkZWZhdWx0IGNi bShhbGwgb25lcykuICovCi0gICAgICAgIGluZm8tPmNvc190b19jYm1bMF0uY2JtID0gKDF1bGwg PDwgaW5mby0+Y2JtX2xlbikgLSAxOwotCi0gICAgICAgIHNwaW5fbG9ja19pbml0KCZpbmZvLT5j Ym1fbG9jayk7Ci0KLSAgICAgICAgc2V0X2JpdChzb2NrZXQsIGNhdF9zb2NrZXRfZW5hYmxlKTsK LQotICAgICAgICBpZiAoIChlY3ggJiBQU1JfQ0FUX0NEUF9DQVBBQklMSVRZKSAmJiAob3B0X3Bz ciAmIFBTUl9DRFApICYmCi0gICAgICAgICAgICAgY2RwX3NvY2tldF9lbmFibGUgJiYgIXRlc3Rf Yml0KHNvY2tldCwgY2RwX3NvY2tldF9lbmFibGUpICkKLSAgICAgICAgewotICAgICAgICAgICAg aW5mby0+Y29zX3RvX2NibVswXS5jb2RlID0gKDF1bGwgPDwgaW5mby0+Y2JtX2xlbikgLSAxOwot ICAgICAgICAgICAgaW5mby0+Y29zX3RvX2NibVswXS5kYXRhID0gKDF1bGwgPDwgaW5mby0+Y2Jt X2xlbikgLSAxOwotCi0gICAgICAgICAgICAvKiBXZSBvbmx5IHdyaXRlIG1hc2sxIHNpbmNlIG1h c2swIGlzIGFsd2F5cyBhbGwgb25lcyBieSBkZWZhdWx0LiAqLwotICAgICAgICAgICAgd3Jtc3Js KE1TUl9JQTMyX1BTUl9MM19NQVNLKDEpLCAoMXVsbCA8PCBpbmZvLT5jYm1fbGVuKSAtIDEpOwot Ci0gICAgICAgICAgICByZG1zcmwoTVNSX0lBMzJfUFNSX0wzX1FPU19DRkcsIHZhbCk7Ci0gICAg ICAgICAgICB3cm1zcmwoTVNSX0lBMzJfUFNSX0wzX1FPU19DRkcsIHZhbCB8ICgxIDw8IFBTUl9M M19RT1NfQ0RQX0VOQUJMRV9CSVQpKTsKLQotICAgICAgICAgICAgLyogQ3V0IGhhbGYgb2YgY29z X21heCB3aGVuIENEUCBpcyBlbmFibGVkLiAqLwotICAgICAgICAgICAgaW5mby0+Y29zX21heCA+ Pj0gMTsKLQotICAgICAgICAgICAgc2V0X2JpdChzb2NrZXQsIGNkcF9zb2NrZXRfZW5hYmxlKTsK LSAgICAgICAgfQotICAgICAgICBwcmludGsoWEVOTE9HX0lORk8gIkNBVDogZW5hYmxlZCBvbiBz b2NrZXQgJXUsIGNvc19tYXg6JXUsIGNibV9sZW46JXUsIENEUDolc1xuIiwKLSAgICAgICAgICAg ICAgIHNvY2tldCwgaW5mby0+Y29zX21heCwgaW5mby0+Y2JtX2xlbiwKLSAgICAgICAgICAgICAg IGNkcF9pc19lbmFibGVkKHNvY2tldCkgPyAib24iIDogIm9mZiIpOwotICAgIH0KLX0KLQotc3Rh dGljIHZvaWQgY2F0X2NwdV9maW5pKHVuc2lnbmVkIGludCBjcHUpCi17Ci0gICAgdW5zaWduZWQg aW50IHNvY2tldCA9IGNwdV90b19zb2NrZXQoY3B1KTsKLQotICAgIGlmICggIXNvY2tldF9jcHVt YXNrW3NvY2tldF0gfHwgY3B1bWFza19lbXB0eShzb2NrZXRfY3B1bWFza1tzb2NrZXRdKSApCi0g ICAgewotICAgICAgICBzdHJ1Y3QgcHNyX2NhdF9zb2NrZXRfaW5mbyAqaW5mbyA9IGNhdF9zb2Nr ZXRfaW5mbyArIHNvY2tldDsKLQotICAgICAgICBpZiAoIGluZm8tPmNvc190b19jYm0gKQotICAg ICAgICB7Ci0gICAgICAgICAgICB4ZnJlZShpbmZvLT5jb3NfdG9fY2JtKTsKLSAgICAgICAgICAg IGluZm8tPmNvc190b19jYm0gPSBOVUxMOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCBjZHBf aXNfZW5hYmxlZChzb2NrZXQpICkKLSAgICAgICAgICAgIGNsZWFyX2JpdChzb2NrZXQsIGNkcF9z b2NrZXRfZW5hYmxlKTsKLQotICAgICAgICBjbGVhcl9iaXQoc29ja2V0LCBjYXRfc29ja2V0X2Vu YWJsZSk7Ci0gICAgfQotfQotCi1zdGF0aWMgdm9pZCBfX2luaXQgcHNyX2NhdF9mcmVlKHZvaWQp Ci17Ci0gICAgeGZyZWUoY2F0X3NvY2tldF9lbmFibGUpOwotICAgIGNhdF9zb2NrZXRfZW5hYmxl ID0gTlVMTDsKLSAgICB4ZnJlZShjYXRfc29ja2V0X2luZm8pOwotICAgIGNhdF9zb2NrZXRfaW5m byA9IE5VTEw7Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBpbml0X3Bzcl9jYXQodm9pZCkKLXsK LSAgICBpZiAoIG9wdF9jb3NfbWF4IDwgMSApCi0gICAgewotICAgICAgICBwcmludGsoWEVOTE9H X0lORk8gIkNBVDogZGlzYWJsZWQsIGNvc19tYXggaXMgdG9vIHNtYWxsXG4iKTsKLSAgICAgICAg cmV0dXJuOwotICAgIH0KLQotICAgIGNhdF9zb2NrZXRfZW5hYmxlID0geHphbGxvY19hcnJheSh1 bnNpZ25lZCBsb25nLCBCSVRTX1RPX0xPTkdTKG5yX3NvY2tldHMpKTsKLSAgICBjYXRfc29ja2V0 X2luZm8gPSB4emFsbG9jX2FycmF5KHN0cnVjdCBwc3JfY2F0X3NvY2tldF9pbmZvLCBucl9zb2Nr ZXRzKTsKLSAgICBjZHBfc29ja2V0X2VuYWJsZSA9IHh6YWxsb2NfYXJyYXkodW5zaWduZWQgbG9u ZywgQklUU19UT19MT05HUyhucl9zb2NrZXRzKSk7Ci0KLSAgICBpZiAoICFjYXRfc29ja2V0X2Vu YWJsZSB8fCAhY2F0X3NvY2tldF9pbmZvICkKLSAgICAgICAgcHNyX2NhdF9mcmVlKCk7CiB9CiAK IHN0YXRpYyBpbnQgcHNyX2NwdV9wcmVwYXJlKHVuc2lnbmVkIGludCBjcHUpCiB7Ci0gICAgcmV0 dXJuIGNhdF9jcHVfcHJlcGFyZShjcHUpOworICAgIHJldHVybiAwOwogfQogCiBzdGF0aWMgdm9p ZCBwc3JfY3B1X2luaXQodm9pZCkKIHsKLSAgICBpZiAoIGNhdF9zb2NrZXRfaW5mbyApCi0gICAg ICAgIGNhdF9jcHVfaW5pdCgpOwotCiAgICAgcHNyX2Fzc29jX2luaXQoKTsKIH0KIAogc3RhdGlj IHZvaWQgcHNyX2NwdV9maW5pKHVuc2lnbmVkIGludCBjcHUpCiB7Ci0gICAgaWYgKCBjYXRfc29j a2V0X2luZm8gKQotICAgICAgICBjYXRfY3B1X2ZpbmkoY3B1KTsKKyAgICByZXR1cm47CiB9CiAK IHN0YXRpYyBpbnQgY3B1X2NhbGxiYWNrKApAQCAtNzM4LDE0ICsyODIsMTAgQEAgc3RhdGljIGlu dCBfX2luaXQgcHNyX3ByZXNtcF9pbml0KHZvaWQpCiAgICAgaWYgKCAob3B0X3BzciAmIFBTUl9D TVQpICYmIG9wdF9ybWlkX21heCApCiAgICAgICAgIGluaXRfcHNyX2NtdChvcHRfcm1pZF9tYXgp OwogCi0gICAgaWYgKCBvcHRfcHNyICYgUFNSX0NBVCApCi0gICAgICAgIGluaXRfcHNyX2NhdCgp OwotCi0gICAgaWYgKCBwc3JfY3B1X3ByZXBhcmUoMCkgKQotICAgICAgICBwc3JfY2F0X2ZyZWUo KTsKKyAgICBwc3JfY3B1X3ByZXBhcmUoMCk7CiAKICAgICBwc3JfY3B1X2luaXQoKTsKLSAgICBp ZiAoIHBzcl9jbXRfZW5hYmxlZCgpIHx8IGNhdF9zb2NrZXRfaW5mbyApCisgICAgaWYgKCBwc3Jf Y210X2VuYWJsZWQoKSApCiAgICAgICAgIHJlZ2lzdGVyX2NwdV9ub3RpZmllcigmY3B1X25mYik7 CiAKICAgICByZXR1cm4gMDsKLS0gCjEuOS4xCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlz dHMueGVuLm9yZwpodHRwczovL2xpc3RzLnhlbi5vcmcveGVuLWRldmVsCg==