From mboxrd@z Thu Jan 1 00:00:00 1970 From: Oleksandr Grytsov Subject: [PATCH v4 03/13] libxl: add vdispl device Date: Tue, 18 Jul 2017 17:25:20 +0300 Message-ID: <1500387930-16317-4-git-send-email-al1img@gmail.com> References: <1500387930-16317-1-git-send-email-al1img@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta6.messagelabs.com ([193.109.254.103]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dXTRY-0002V6-P4 for xen-devel@lists.xenproject.org; Tue, 18 Jul 2017 14:25:44 +0000 Received: by mail-lf0-f68.google.com with SMTP id z78so1997904lff.2 for ; Tue, 18 Jul 2017 07:25:43 -0700 (PDT) In-Reply-To: <1500387930-16317-1-git-send-email-al1img@gmail.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: ian.jackson@eu.citrix.com, wei.liu2@citrix.com, Oleksandr Grytsov List-Id: xen-devel@lists.xenproject.org RnJvbTogT2xla3NhbmRyIEdyeXRzb3YgPG9sZWtzYW5kcl9ncnl0c292QGVwYW0uY29tPgoKU2ln bmVkLW9mZi1ieTogT2xla3NhbmRyIEdyeXRzb3YgPG9sZWtzYW5kcl9ncnl0c292QGVwYW0uY29t PgotLS0KIHRvb2xzL2xpYnhsL01ha2VmaWxlICAgICAgICAgICAgICAgICB8ICAgMiArLQogdG9v bHMvbGlieGwvbGlieGwuaCAgICAgICAgICAgICAgICAgIHwgIDI0ICsrKwogdG9vbHMvbGlieGwv bGlieGxfY3JlYXRlLmMgICAgICAgICAgIHwgICAxICsKIHRvb2xzL2xpYnhsL2xpYnhsX2ludGVy bmFsLmggICAgICAgICB8ICAgMSArCiB0b29scy9saWJ4bC9saWJ4bF90eXBlcy5pZGwgICAgICAg ICAgfCAgMzggKysrKy0KIHRvb2xzL2xpYnhsL2xpYnhsX3R5cGVzX2ludGVybmFsLmlkbCB8ICAg MSArCiB0b29scy9saWJ4bC9saWJ4bF91dGlscy5oICAgICAgICAgICAgfCAgIDQgKwogdG9vbHMv bGlieGwvbGlieGxfdmRpc3BsLmMgICAgICAgICAgIHwgMjg5ICsrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrCiA4IGZpbGVzIGNoYW5nZWQsIDM1OCBpbnNlcnRpb25zKCspLCAyIGRl bGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHRvb2xzL2xpYnhsL2xpYnhsX3ZkaXNwbC5j CgpkaWZmIC0tZ2l0IGEvdG9vbHMvbGlieGwvTWFrZWZpbGUgYi90b29scy9saWJ4bC9NYWtlZmls ZQppbmRleCAxYmY2YjhjLi42ZjU3ZTY1IDEwMDY0NAotLS0gYS90b29scy9saWJ4bC9NYWtlZmls ZQorKysgYi90b29scy9saWJ4bC9NYWtlZmlsZQpAQCAtMTM4LDcgKzEzOCw3IEBAIExJQlhMX09C SlMgPSBmbGV4YXJyYXkubyBsaWJ4bC5vIGxpYnhsX2NyZWF0ZS5vIGxpYnhsX2RtLm8gbGlieGxf cGNpLm8gXAogCQkJbGlieGxfZG9tX3N1c3BlbmQubyBsaWJ4bF9kb21fc2F2ZS5vIGxpYnhsX3Vz Yi5vIFwKIAkJCWxpYnhsX3Z0cG0ubyBsaWJ4bF9uaWMubyBsaWJ4bF9kaXNrLm8gbGlieGxfY29u c29sZS5vIFwKIAkJCWxpYnhsX2NwdXBvb2wubyBsaWJ4bF9tZW0ubyBsaWJ4bF9zY2hlZC5vIGxp YnhsX3RtZW0ubyBcCi0JCQlsaWJ4bF85cGZzLm8gbGlieGxfZG9tYWluLm8gXAorCQkJbGlieGxf OXBmcy5vIGxpYnhsX2RvbWFpbi5vIGxpYnhsX3ZkaXNwbC5vIFwKICAgICAgICAgICAgICAgICAg ICAgICAgICQoTElCWExfT0JKUy15KQogTElCWExfT0JKUyArPSBsaWJ4bF9nZW5pZC5vCiBMSUJY TF9PQkpTICs9IF9saWJ4bF90eXBlcy5vIGxpYnhsX2ZsYXNrLm8gX2xpYnhsX3R5cGVzX2ludGVy bmFsLm8KZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYnhsL2xpYnhsLmggYi90b29scy9saWJ4bC9saWJ4 bC5oCmluZGV4IGNmODY4N2EuLjRjMGQ2MTIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2xpYnhsL2xpYnhs LmgKKysrIGIvdG9vbHMvbGlieGwvbGlieGwuaApAQCAtMTg1MSw2ICsxODUxLDMwIEBAIGxpYnhs X2RldmljZV92dHBtICpsaWJ4bF9kZXZpY2VfdnRwbV9saXN0KGxpYnhsX2N0eCAqY3R4LCB1aW50 MzJfdCBkb21pZCwgaW50ICpuCiBpbnQgbGlieGxfZGV2aWNlX3Z0cG1fZ2V0aW5mbyhsaWJ4bF9j dHggKmN0eCwgdWludDMyX3QgZG9taWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg bGlieGxfZGV2aWNlX3Z0cG0gKnZ0cG0sIGxpYnhsX3Z0cG1pbmZvICp2dHBtaW5mbyk7CiAKKy8q IFZpcnR1YWwgZGlzcGxheXMgKi8KK2ludCBsaWJ4bF9kZXZpY2VfdmRpc3BsX2FkZChsaWJ4bF9j dHggKmN0eCwgdWludDMyX3QgZG9taWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGli eGxfZGV2aWNlX3ZkaXNwbCAqZGlzcGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u c3QgbGlieGxfYXN5bmNvcF9ob3cgKmFvX2hvdykKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICBMSUJYTF9FWFRFUk5BTF9DQUxMRVJTX09OTFk7CitpbnQgbGlieGxfZGV2aWNlX3ZkaXNwbF9y ZW1vdmUobGlieGxfY3R4ICpjdHgsIHVpbnQzMl90IGRvbWlkLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGxpYnhsX2RldmljZV92ZGlzcGwgKnZkaXNwbCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjb25zdCBsaWJ4bF9hc3luY29wX2hvdyAqYW9faG93KQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIExJQlhMX0VYVEVSTkFMX0NBTExFUlNfT05MWTsKK2lu dCBsaWJ4bF9kZXZpY2VfdmRpc3BsX2Rlc3Ryb3kobGlieGxfY3R4ICpjdHgsIHVpbnQzMl90IGRv bWlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfdmRpc3Bs ICp2ZGlzcGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxpYnhsX2Fz eW5jb3BfaG93ICphb19ob3cpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQlhM X0VYVEVSTkFMX0NBTExFUlNfT05MWTsKKworbGlieGxfZGV2aWNlX3ZkaXNwbCAqbGlieGxfZGV2 aWNlX3ZkaXNwbF9saXN0KGxpYnhsX2N0eCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGRvbWlkLCBpbnQgKm51bSkKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJYTF9FWFRFUk5BTF9DQUxM RVJTX09OTFk7Cit2b2lkIGxpYnhsX2RldmljZV92ZGlzcGxfbGlzdF9mcmVlKGxpYnhsX2Rldmlj ZV92ZGlzcGwqIGxpc3QsIGludCBudW0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIExJQlhMX0VYVEVSTkFMX0NBTExFUlNfT05MWTsKK2ludCBsaWJ4bF9kZXZpY2VfdmRpc3Bs X2dldGluZm8obGlieGxfY3R4ICpjdHgsIHVpbnQzMl90IGRvbWlkLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfdmRpc3BsICp2ZGlzcGwsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX3ZkaXNwbGluZm8gKnZkaXNwbGluZm8pCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQlhMX0VYVEVSTkFMX0NBTExFUlNfT05MWTsK KwogLyogS2V5Ym9hcmQgKi8KIGludCBsaWJ4bF9kZXZpY2VfdmtiX2FkZChsaWJ4bF9jdHggKmN0 eCwgdWludDMyX3QgZG9taWQsIGxpYnhsX2RldmljZV92a2IgKnZrYiwKICAgICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCBsaWJ4bF9hc3luY29wX2hvdyAqYW9faG93KQpkaWZmIC0tZ2l0IGEv dG9vbHMvbGlieGwvbGlieGxfY3JlYXRlLmMgYi90b29scy9saWJ4bC9saWJ4bF9jcmVhdGUuYwpp bmRleCBiMjE2M2NkLi45MTJiZDIxIDEwMDY0NAotLS0gYS90b29scy9saWJ4bC9saWJ4bF9jcmVh dGUuYworKysgYi90b29scy9saWJ4bC9saWJ4bF9jcmVhdGUuYwpAQCAtMTQ0Myw2ICsxNDQzLDcg QEAgY29uc3Qgc3RydWN0IGxpYnhsX2RldmljZV90eXBlICpkZXZpY2VfdHlwZV90YmxbXSA9IHsK ICAgICAmbGlieGxfX3VzYmRldl9kZXZ0eXBlLAogICAgICZsaWJ4bF9fcGNpZGV2X2RldnR5cGUs CiAgICAgJmxpYnhsX19kdGRldl9kZXZ0eXBlLAorICAgICZsaWJ4bF9fdmRpc3BsX2RldnR5cGUs CiAgICAgTlVMTAogfTsKIApkaWZmIC0tZ2l0IGEvdG9vbHMvbGlieGwvbGlieGxfaW50ZXJuYWwu aCBiL3Rvb2xzL2xpYnhsL2xpYnhsX2ludGVybmFsLmgKaW5kZXggMjcxYWM4OS4uNjhjMDhhYSAx MDA2NDQKLS0tIGEvdG9vbHMvbGlieGwvbGlieGxfaW50ZXJuYWwuaAorKysgYi90b29scy9saWJ4 bC9saWJ4bF9pbnRlcm5hbC5oCkBAIC0zNTY0LDYgKzM1NjQsNyBAQCBleHRlcm4gY29uc3Qgc3Ry dWN0IGxpYnhsX2RldmljZV90eXBlIGxpYnhsX192dHBtX2RldnR5cGU7CiBleHRlcm4gY29uc3Qg c3RydWN0IGxpYnhsX2RldmljZV90eXBlIGxpYnhsX191c2JjdHJsX2RldnR5cGU7CiBleHRlcm4g Y29uc3Qgc3RydWN0IGxpYnhsX2RldmljZV90eXBlIGxpYnhsX191c2JkZXZfZGV2dHlwZTsKIGV4 dGVybiBjb25zdCBzdHJ1Y3QgbGlieGxfZGV2aWNlX3R5cGUgbGlieGxfX3BjaWRldl9kZXZ0eXBl OworZXh0ZXJuIGNvbnN0IHN0cnVjdCBsaWJ4bF9kZXZpY2VfdHlwZSBsaWJ4bF9fdmRpc3BsX2Rl dnR5cGU7CiAKIGV4dGVybiBjb25zdCBzdHJ1Y3QgbGlieGxfZGV2aWNlX3R5cGUgKmRldmljZV90 eXBlX3RibFtdOwogCmRpZmYgLS1naXQgYS90b29scy9saWJ4bC9saWJ4bF90eXBlcy5pZGwgYi90 b29scy9saWJ4bC9saWJ4bF90eXBlcy5pZGwKaW5kZXggMjIwNDQyNS4uMjU1NjNjZiAxMDA2NDQK LS0tIGEvdG9vbHMvbGlieGwvbGlieGxfdHlwZXMuaWRsCisrKyBiL3Rvb2xzL2xpYnhsL2xpYnhs X3R5cGVzLmlkbApAQCAtNzU1LDcgKzc1NSwyMSBAQCBsaWJ4bF9kZXZpY2VfdnRwbSA9IFN0cnVj dCgiZGV2aWNlX3Z0cG0iLCBbCiAgICAgKCJiYWNrZW5kX2RvbW5hbWUiLCAgc3RyaW5nKSwKICAg ICAoImRldmlkIiwgICAgICAgICAgICBsaWJ4bF9kZXZpZCksCiAgICAgKCJ1dWlkIiwgICAgICAg ICAgICAgbGlieGxfdXVpZCksCi1dKQorICAgIF0pCisKK2xpYnhsX2Nvbm5lY3Rvcl9wYXJhbSA9 IFN0cnVjdCgiY29ubmVjdG9yX3BhcmFtIiwgWworICAgICgiaWQiLCBzdHJpbmcpLAorICAgICgi d2lkdGgiLCB1aW50MzIpLAorICAgICgiaGVpZ2h0IiwgdWludDMyKQorICAgIF0pCisKK2xpYnhs X2RldmljZV92ZGlzcGwgPSBTdHJ1Y3QoImRldmljZV92ZGlzcGwiLCBbCisgICAgKCJiYWNrZW5k X2RvbWlkIiwgbGlieGxfZG9taWQpLAorICAgICgiYmFja2VuZF9kb21uYW1lIiwgc3RyaW5nKSwK KyAgICAoImRldmlkIiwgbGlieGxfZGV2aWQpLAorICAgICgiYmVfYWxsb2MiLCBib29sKSwKKyAg ICAoImNvbm5lY3RvcnMiLCBBcnJheShsaWJ4bF9jb25uZWN0b3JfcGFyYW0sICJudW1fY29ubmVj dG9ycyIpKQorICAgIF0pCiAKIGxpYnhsX2RldmljZV9wOSA9IFN0cnVjdCgiZGV2aWNlX3A5Iiwg WwogICAgICgiYmFja2VuZF9kb21pZCIsICAgIGxpYnhsX2RvbWlkKSwKQEAgLTc5MSw2ICs4MDUs NyBAQCBsaWJ4bF9kb21haW5fY29uZmlnID0gU3RydWN0KCJkb21haW5fY29uZmlnIiwgWwogICAg ICgidmticyIsIEFycmF5KGxpYnhsX2RldmljZV92a2IsICJudW1fdmticyIpKSwKICAgICAoInZ0 cG1zIiwgQXJyYXkobGlieGxfZGV2aWNlX3Z0cG0sICJudW1fdnRwbXMiKSksCiAgICAgKCJwOSIs IEFycmF5KGxpYnhsX2RldmljZV9wOSwgIm51bV9wOXMiKSksCisgICAgKCJ2ZGlzcGxzIiwgQXJy YXkobGlieGxfZGV2aWNlX3ZkaXNwbCwgIm51bV92ZGlzcGxzIikpLAogICAgICMgYSBjaGFubmVs IG1hbmlmZXN0cyBhcyBhIGNvbnNvbGUgd2l0aCBhIG5hbWUsCiAgICAgIyBzZWUgZG9jcy9taXNj L2NoYW5uZWxzLnR4dAogICAgICgiY2hhbm5lbHMiLCBBcnJheShsaWJ4bF9kZXZpY2VfY2hhbm5l bCwgIm51bV9jaGFubmVscyIpKSwKQEAgLTg4Nyw2ICs5MDIsMjcgQEAgbGlieGxfcGh5c2luZm8g PSBTdHJ1Y3QoInBoeXNpbmZvIiwgWwogICAgICgiY2FwX2h2bV9kaXJlY3RpbyIsIGJvb2wpLAog ICAgIF0sIGRpcj1ESVJfT1VUKQogCitsaWJ4bF9jb25uZWN0b3JpbmZvID0gU3RydWN0KCJjb25u ZWN0b3JpbmZvIiwgWworICAgICgiaWQiLCBzdHJpbmcpLAorICAgICgid2lkdGgiLCB1aW50MzIp LAorICAgICgiaGVpZ2h0IiwgdWludDMyKSwKKyAgICAoInJlcV9ldnRjaCIsIGludGVnZXIpLAor ICAgICgicmVxX3JyZWYiLCBpbnRlZ2VyKSwKKyAgICAoImV2dF9ldnRjaCIsIGludGVnZXIpLAor ICAgICgiZXZ0X3JyZWYiLCBpbnRlZ2VyKSwKKyAgICBdLCBkaXI9RElSX09VVCkKKworbGlieGxf dmRpc3BsaW5mbyA9IFN0cnVjdCgidmRpc3BsaW5mbyIsIFsKKyAgICAoImJhY2tlbmQiLCBzdHJp bmcpLAorICAgICgiYmFja2VuZF9pZCIsIHVpbnQzMiksCisgICAgKCJmcm9udGVuZCIsIHN0cmlu ZyksCisgICAgKCJmcm9udGVuZF9pZCIsIHVpbnQzMiksCisgICAgKCJkZXZpZCIsIGxpYnhsX2Rl dmlkKSwKKyAgICAoInN0YXRlIiwgaW50ZWdlciksCisgICAgKCJiZV9hbGxvYyIsIGJvb2wpLAor ICAgICgiY29ubmVjdG9ycyIsIEFycmF5KGxpYnhsX2Nvbm5lY3RvcmluZm8sICJudW1fY29ubmVj dG9ycyIpKQorICAgIF0sIGRpcj1ESVJfT1VUKQorCiAjIE5VTUEgbm9kZSBjaGFyYWN0ZXJpc3Rp Y3M6IHNpemUgYW5kIGZyZWUgYXJlIGhvdyBtdWNoIG1lbW9yeSBpdCBoYXMsIGFuZCBob3cKICMg bXVjaCBvZiBpdCBpcyBmcmVlLCByZXNwZWN0aXZlbHkuIGRpc3RzIGlzIGFuIGFycmF5IG9mIGRp c3RhbmNlcyBmcm9tIHRoaXMKICMgbm9kZSB0byBlYWNoIG90aGVyIG5vZGUuCmRpZmYgLS1naXQg YS90b29scy9saWJ4bC9saWJ4bF90eXBlc19pbnRlcm5hbC5pZGwgYi90b29scy9saWJ4bC9saWJ4 bF90eXBlc19pbnRlcm5hbC5pZGwKaW5kZXggN2RjNGQwZi4uNjczYTZkNSAxMDA2NDQKLS0tIGEv dG9vbHMvbGlieGwvbGlieGxfdHlwZXNfaW50ZXJuYWwuaWRsCisrKyBiL3Rvb2xzL2xpYnhsL2xp YnhsX3R5cGVzX2ludGVybmFsLmlkbApAQCAtMjYsNiArMjYsNyBAQCBsaWJ4bF9fZGV2aWNlX2tp bmQgPSBFbnVtZXJhdGlvbigiZGV2aWNlX2tpbmQiLCBbCiAgICAgKDksICJWVVNCIiksCiAgICAg KDEwLCAiUVVTQiIpLAogICAgICgxMSwgIjlQRlMiKSwKKyAgICAoMTIsICJWRElTUEwiKSwKICAg ICBdKQogCiBsaWJ4bF9fY29uc29sZV9iYWNrZW5kID0gRW51bWVyYXRpb24oImNvbnNvbGVfYmFj a2VuZCIsIFsKZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYnhsL2xpYnhsX3V0aWxzLmggYi90b29scy9s aWJ4bC9saWJ4bF91dGlscy5oCmluZGV4IDI1NzczZDguLjllNzQzZGMgMTAwNjQ0Ci0tLSBhL3Rv b2xzL2xpYnhsL2xpYnhsX3V0aWxzLmgKKysrIGIvdG9vbHMvbGlieGwvbGlieGxfdXRpbHMuaApA QCAtNzgsNiArNzgsMTAgQEAgaW50IGxpYnhsX2RldmlkX3RvX2RldmljZV92dHBtKGxpYnhsX2N0 eCAqY3R4LCB1aW50MzJfdCBkb21pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp bnQgZGV2aWQsIGxpYnhsX2RldmljZV92dHBtICp2dHBtKTsKIGludCBsaWJ4bF9kZXZpZF90b19k ZXZpY2VfdXNiY3RybChsaWJ4bF9jdHggKmN0eCwgdWludDMyX3QgZG9taWQsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRldmlkLCBsaWJ4bF9kZXZpY2VfdXNiY3RybCAq dXNiY3RybCk7CisKK2ludCBsaWJ4bF9kZXZpZF90b19kZXZpY2VfdmRpc3BsKGxpYnhsX2N0eCAq Y3R4LCB1aW50MzJfdCBkb21pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu dCBkZXZpZCwgbGlieGxfZGV2aWNlX3ZkaXNwbCAqdmRpc3BsKTsKKwogaW50IGxpYnhsX2N0cmxw b3J0X3RvX2RldmljZV91c2JkZXYobGlieGxfY3R4ICpjdHgsIHVpbnQzMl90IGRvbWlkLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGN0cmwsIGludCBwb3J0LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfZGV2aWNlX3VzYmRldiAqdXNi ZGV2KTsKZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYnhsL2xpYnhsX3ZkaXNwbC5jIGIvdG9vbHMvbGli eGwvbGlieGxfdmRpc3BsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTc1 ZTc5NwotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2xpYnhsL2xpYnhsX3ZkaXNwbC5jCkBAIC0w LDAgKzEsMjg5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEVQQU0gU3lzdGVtcyBJbmMu CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli dXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExl c3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorICogYnkgdGhlIEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyLjEgb25seS4gd2l0aCB0aGUgc3BlY2lhbAor ICogZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIGZpbGUgTElDRU5TRS4KKyAqCisg KiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSAibGlieGxfaW50ZXJu YWwuaCIKKworc3RhdGljIGludCBsaWJ4bF9fZGV2aWNlX3ZkaXNwbF9zZXRkZWZhdWx0KGxpYnhs X19nYyAqZ2MsIHVpbnQzMl90IGRvbWlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGxpYnhsX2RldmljZV92ZGlzcGwgKnZkaXNwbCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGhvdHBsdWcpCit7CisgICAgcmV0dXJu IGxpYnhsX19yZXNvbHZlX2RvbWlkKGdjLCB2ZGlzcGwtPmJhY2tlbmRfZG9tbmFtZSwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJnZkaXNwbC0+YmFja2VuZF9kb21pZCk7Cit9CisK K3N0YXRpYyBpbnQgbGlieGxfX2RldmljZV9mcm9tX3ZkaXNwbChsaWJ4bF9fZ2MgKmdjLCB1aW50 MzJfdCBkb21pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9k ZXZpY2VfdmRpc3BsICp2ZGlzcGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbGlieGxfX2RldmljZSAqZGV2aWNlKQoreworICAgZGV2aWNlLT5iYWNrZW5kX2RldmlkICAg PSB2ZGlzcGwtPmRldmlkOworICAgZGV2aWNlLT5iYWNrZW5kX2RvbWlkICAgPSB2ZGlzcGwtPmJh Y2tlbmRfZG9taWQ7CisgICBkZXZpY2UtPmJhY2tlbmRfa2luZCAgICA9IExJQlhMX19ERVZJQ0Vf S0lORF9WRElTUEw7CisgICBkZXZpY2UtPmRldmlkICAgICAgICAgICA9IHZkaXNwbC0+ZGV2aWQ7 CisgICBkZXZpY2UtPmRvbWlkICAgICAgICAgICA9IGRvbWlkOworICAgZGV2aWNlLT5raW5kICAg ICAgICAgICAgPSBMSUJYTF9fREVWSUNFX0tJTkRfVkRJU1BMOworCisgICByZXR1cm4gMDsKK30K Kworc3RhdGljIGludCBsaWJ4bF9fdmRpc3BsX2Zyb21feGVuc3RvcmUobGlieGxfX2djICpnYywg Y29uc3QgY2hhciAqbGlieGxfcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGxpYnhsX2RldmlkIGRldmlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbGlieGxfZGV2aWNlX3ZkaXNwbCAqdmRpc3BsKQoreworICAgIGNoYXIgKmJlX3Bh dGg7CisKKyAgICB2ZGlzcGwtPmRldmlkID0gZGV2aWQ7CisgICAgYmVfcGF0aCA9IGxpYnhsX194 c19yZWFkKGdjLCBYQlRfTlVMTCwgR0NTUFJJTlRGKCIlcy9iYWNrZW5kIiwgbGlieGxfcGF0aCkp OworCisgICAgcmV0dXJuIGxpYnhsX19iYWNrZW5kcGF0aF9wYXJzZV9kb21pZChnYywgYmVfcGF0 aCwgJnZkaXNwbC0+YmFja2VuZF9kb21pZCk7Cit9CisKK3N0YXRpYyB2b2lkIGxpYnhsX191cGRh dGVfY29uZmlnX3ZkaXNwbChsaWJ4bF9fZ2MgKmdjLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGxpYnhsX2RldmljZV92ZGlzcGwgKmRzdCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfdmRpc3BsICpzcmMpCit7Cisg ICAgZHN0LT5kZXZpZCA9IHNyYy0+ZGV2aWQ7CisgICAgZHN0LT5iZV9hbGxvYyA9IHNyYy0+YmVf YWxsb2M7Cit9CisKK3N0YXRpYyBpbnQgbGlieGxfZGV2aWNlX3ZkaXNwbF9jb21wYXJlKGxpYnhs X2RldmljZV92ZGlzcGwgKmQxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbGlieGxfZGV2aWNlX3ZkaXNwbCAqZDIpCit7CisgICAgcmV0dXJuIENPTVBBUkVfREVWSUQo ZDEsIGQyKTsKK30KKworc3RhdGljIHZvaWQgbGlieGxfX2RldmljZV92ZGlzcGxfYWRkKGxpYnhs X19lZ2MgKmVnYywgdWludDMyX3QgZG9taWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbGlieGxfZGV2aWNlX3ZkaXNwbCAqdmRpc3BsLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGxpYnhsX19hb19kZXZpY2UgKmFvZGV2KQoreworICAgIGxpYnhs X19kZXZpY2VfYWRkX2FzeW5jKGVnYywgZG9taWQsICZsaWJ4bF9fdmRpc3BsX2RldnR5cGUsIHZk aXNwbCwgYW9kZXYpOworfQorCitzdGF0aWMgaW50IGxpYnhsX19zZXRfeGVuc3RvcmVfdmRpc3Bs KGxpYnhsX19nYyAqZ2MsIHVpbnQzMl90IGRvbWlkLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfdmRpc3BsICp2ZGlzcGwsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGZsZXhhcnJheV90ICpiYWNrLCBmbGV4YXJyYXlfdCAq ZnJvbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsZXhhcnJheV90 ICpyb19mcm9udCkKK3sKKyAgICBpbnQgaTsKKworICAgIGZsZXhhcnJheV9hcHBlbmRfcGFpcihy b19mcm9udCwgImJlLWFsbG9jIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgR0NTUFJJTlRG KCIlZCIsIHZkaXNwbC0+YmVfYWxsb2MpKTsKKworICAgIGZvciAoaSA9IDA7IGkgPCB2ZGlzcGwt Pm51bV9jb25uZWN0b3JzOyBpKyspIHsKKyAgICAgICAgZmxleGFycmF5X2FwcGVuZF9wYWlyKHJv X2Zyb250LCBHQ1NQUklOVEYoIiVkL3Jlc29sdXRpb24iLCBpKSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEdDU1BSSU5URigiJWR4JWQiLCB2ZGlzcGwtPmNvbm5lY3RvcnNbaV0ud2lk dGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmRp c3BsLT5jb25uZWN0b3JzW2ldLmhlaWdodCkpOworICAgICAgICBmbGV4YXJyYXlfYXBwZW5kX3Bh aXIocm9fZnJvbnQsIEdDU1BSSU5URigiJWQvaWQiLCBpKSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHZkaXNwbC0+Y29ubmVjdG9yc1tpXS5pZCk7CisgICAgfQorCisgICAgcmV0dXJu IDA7Cit9CisKK2xpYnhsX2RldmljZV92ZGlzcGwgKmxpYnhsX2RldmljZV92ZGlzcGxfbGlzdChs aWJ4bF9jdHggKmN0eCwgdWludDMyX3QgZG9taWQsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaW50ICpudW0pCit7CisgICAgbGlieGxfZGV2aWNlX3ZkaXNw bCAqcjsKKworICAgIEdDX0lOSVQoY3R4KTsKKworICAgIHIgPSBsaWJ4bF9fZGV2aWNlX2xpc3Qo Z2MsICZsaWJ4bF9fdmRpc3BsX2RldnR5cGUsIGRvbWlkLCAidmRpc3BsIiwgbnVtKTsKKworICAg IEdDX0ZSRUU7CisKKyAgICByZXR1cm4gcjsKK30KKwordm9pZCBsaWJ4bF9kZXZpY2VfdmRpc3Bs X2xpc3RfZnJlZShsaWJ4bF9kZXZpY2VfdmRpc3BsKiBsaXN0LCBpbnQgbnVtKQoreworICAgIGxp YnhsX19kZXZpY2VfbGlzdF9mcmVlKCZsaWJ4bF9fdmRpc3BsX2RldnR5cGUsIGxpc3QsIG51bSk7 Cit9CisKK3N0YXRpYyBpbnQgbGlieGxfX2RldmljZV92ZGlzcGxfZ2V0Y29ubmVjdG9ycyhsaWJ4 bF9jdHggKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBjaGFyICpwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGxpYnhsX3ZkaXNwbGluZm8gKmluZm8pCit7CisgICAgR0NfSU5JVChjdHgpOwor ICAgIGNoYXIgKmNvbm5lY3RvciA9IE5VTEw7CisgICAgY2hhciAqY29ubmVjdG9yX3BhdGggPSBO VUxMOworICAgIGludCBpLCByYzsKKworICAgIEdDTkVXX0FSUkFZKGNvbm5lY3Rvcl9wYXRoLCAx MjgpOworCisgICAgaW5mby0+bnVtX2Nvbm5lY3RvcnMgPSAwOworCisgICAgcmMgPSBzbnByaW50 Zihjb25uZWN0b3JfcGF0aCwgMTI4LCAiJXMvJWQiLCBwYXRoLCBpbmZvLT5udW1fY29ubmVjdG9y cyk7CisgICAgaWYgKHJjIDwgMCkgZ290byBvdXQ7CisKKyAgICB3aGlsZSgoY29ubmVjdG9yID0g eHNfcmVhZChjdHgtPnhzaCwgWEJUX05VTEwsIGNvbm5lY3Rvcl9wYXRoLCBOVUxMKSkKKyAgICAg ICAgICAhPSBOVUxMKSB7CisgICAgICAgIGZyZWUoY29ubmVjdG9yKTsKKworICAgICAgICByYyA9 IHNucHJpbnRmKGNvbm5lY3Rvcl9wYXRoLCAxMjgsICIlcy8lZCIsCisgICAgICAgICAgICAgICAg ICAgICAgcGF0aCwgKytpbmZvLT5udW1fY29ubmVjdG9ycyk7CisgICAgICAgIGlmIChyYyA8IDAp IGdvdG8gb3V0OworICAgIH0KKworICAgIGluZm8tPmNvbm5lY3RvcnMgPSBsaWJ4bF9fY2FsbG9j KE5PR0MsIGluZm8tPm51bV9jb25uZWN0b3JzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHNpemVvZigqaW5mby0+Y29ubmVjdG9ycykpOworCisgICAgZm9yIChpID0gMDsg aSA8IGluZm8tPm51bV9jb25uZWN0b3JzOyBpKyspIHsKKyAgICAgICAgY2hhciAqdmFsdWU7CisK KyAgICAgICAgc25wcmludGYoY29ubmVjdG9yX3BhdGgsIDEyOCwgIiVzLyVkL2lkIiwgcGF0aCwg aSk7CisgICAgICAgIGluZm8tPmNvbm5lY3RvcnNbaV0uaWQgPSB4c19yZWFkKGN0eC0+eHNoLCBY QlRfTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVj dG9yX3BhdGgsIE5VTEwpOworICAgICAgICBpZiAoaW5mby0+Y29ubmVjdG9yc1tpXS5pZCA9PSBO VUxMKSB7IHJjID0gRVJST1JfRkFJTDsgZ290byBvdXQ7IH0KKworICAgICAgICBzbnByaW50Zihj b25uZWN0b3JfcGF0aCwgMTI4LCAiJXMvJWQvcmVzb2x1dGlvbiIsIHBhdGgsIGkpOworICAgICAg ICB2YWx1ZSA9IHhzX3JlYWQoY3R4LT54c2gsIFhCVF9OVUxMLCBjb25uZWN0b3JfcGF0aCwgTlVM TCk7CisgICAgICAgIGlmICh2YWx1ZSA9PSBOVUxMKSB7IHJjID0gRVJST1JfRkFJTDsgZ290byBv dXQ7IH0KKworICAgICAgICByYyA9IHNzY2FuZih2YWx1ZSwgIiV1eCV1IiwgJmluZm8tPmNvbm5l Y3RvcnNbaV0ud2lkdGgsCisgICAgICAgICAgICAgICAgICAgJmluZm8tPmNvbm5lY3RvcnNbaV0u aGVpZ2h0KTsKKyAgICAgICAgZnJlZSh2YWx1ZSk7CisgICAgICAgIGlmIChyYyAhPSAyKSB7Cisg ICAgICAgICAgICByYyA9IEVSUk9SX0ZBSUw7IGdvdG8gb3V0OworICAgICAgICB9CisKKyAgICAg ICAgc25wcmludGYoY29ubmVjdG9yX3BhdGgsIDEyOCwgIiVzLyVkL3JlcS1yaW5nLXJlZiIsIHBh dGgsIGkpOworICAgICAgICB2YWx1ZSA9IHhzX3JlYWQoY3R4LT54c2gsIFhCVF9OVUxMLCBjb25u ZWN0b3JfcGF0aCwgTlVMTCk7CisgICAgICAgIGluZm8tPmNvbm5lY3RvcnNbaV0ucmVxX3JyZWYg PSB2YWx1ZSA/IHN0cnRvdWwodmFsdWUsIE5VTEwsIDEwKSA6IC0xOworICAgICAgICBmcmVlKHZh bHVlKTsKKworICAgICAgICBzbnByaW50Zihjb25uZWN0b3JfcGF0aCwgMTI4LCAiJXMvJWQvcmVx LWV2ZW50LWNoYW5uZWwiLCBwYXRoLCBpKTsKKyAgICAgICAgdmFsdWUgPSB4c19yZWFkKGN0eC0+ eHNoLCBYQlRfTlVMTCwgY29ubmVjdG9yX3BhdGgsIE5VTEwpOworICAgICAgICBpbmZvLT5jb25u ZWN0b3JzW2ldLnJlcV9ldnRjaCA9IHZhbHVlID8gc3RydG91bCh2YWx1ZSwgTlVMTCwgMTApIDog LTE7CisgICAgICAgIGZyZWUodmFsdWUpOworCisgICAgICAgIHNucHJpbnRmKGNvbm5lY3Rvcl9w YXRoLCAxMjgsICIlcy8lZC9ldnQtcmluZy1yZWYiLCBwYXRoLCBpKTsKKyAgICAgICAgdmFsdWUg PSB4c19yZWFkKGN0eC0+eHNoLCBYQlRfTlVMTCwgY29ubmVjdG9yX3BhdGgsIE5VTEwpOworICAg ICAgICBpbmZvLT5jb25uZWN0b3JzW2ldLmV2dF9ycmVmID0gdmFsdWUgPyBzdHJ0b3VsKHZhbHVl LCBOVUxMLCAxMCkgOiAtMTsKKyAgICAgICAgZnJlZSh2YWx1ZSk7CisKKyAgICAgICAgc25wcmlu dGYoY29ubmVjdG9yX3BhdGgsIDEyOCwgIiVzLyVkL2V2dC1ldmVudC1jaGFubmVsIiwgcGF0aCwg aSk7CisgICAgICAgIHZhbHVlID0geHNfcmVhZChjdHgtPnhzaCwgWEJUX05VTEwsIGNvbm5lY3Rv cl9wYXRoLCBOVUxMKTsKKyAgICAgICAgaW5mby0+Y29ubmVjdG9yc1tpXS5ldnRfZXZ0Y2ggPSB2 YWx1ZSA/IHN0cnRvdWwodmFsdWUsIE5VTEwsIDEwKSA6IC0xOworICAgICAgICBmcmVlKHZhbHVl KTsKKyAgICB9CisKKyAgICByYyA9IDA7CisKK291dDoKKyAgICByZXR1cm4gcmM7Cit9CisKK2lu dCBsaWJ4bF9kZXZpY2VfdmRpc3BsX2dldGluZm8obGlieGxfY3R4ICpjdHgsIHVpbnQzMl90IGRv bWlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfdmRpc3Bs ICp2ZGlzcGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX3ZkaXNwbGlu Zm8gKmluZm8pCit7CisgICAgR0NfSU5JVChjdHgpOworICAgIGNoYXIgKmxpYnhsX3BhdGgsICpk b21wYXRoLCAqZGV2cGF0aDsKKyAgICBjaGFyICp2YWw7CisgICAgaW50IHJjOworCisgICAgbGli eGxfdmRpc3BsaW5mb19pbml0KGluZm8pOworICAgIGRvbXBhdGggPSBsaWJ4bF9feHNfZ2V0X2Rv bXBhdGgoZ2MsIGRvbWlkKTsKKyAgICBpbmZvLT5kZXZpZCA9IHZkaXNwbC0+ZGV2aWQ7CisKKyAg ICBkZXZwYXRoID0gR0NTUFJJTlRGKCIlcy9kZXZpY2UvdmRpc3BsLyVkIiwgZG9tcGF0aCwgaW5m by0+ZGV2aWQpOworICAgIGxpYnhsX3BhdGggPSBHQ1NQUklOVEYoIiVzL2RldmljZS92ZGlzcGwv JWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfX3hzX2xpYnhsX3BhdGgoZ2Ms IGRvbWlkKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm8tPmRldmlkKTsKKyAgICBp bmZvLT5iYWNrZW5kID0geHNfcmVhZChjdHgtPnhzaCwgWEJUX05VTEwsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgR0NTUFJJTlRGKCIlcy9iYWNrZW5kIiwgbGlieGxfcGF0aCksCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisgICAgaWYgKCFpbmZvLT5iYWNrZW5kKSB7 IHJjID0gRVJST1JfRkFJTDsgZ290byBvdXQ7IH0KKworICAgIHJjID0gbGlieGxfX2JhY2tlbmRw YXRoX3BhcnNlX2RvbWlkKGdjLCBpbmZvLT5iYWNrZW5kLCAmaW5mby0+YmFja2VuZF9pZCk7Cisg ICAgaWYgKHJjKSBnb3RvIG91dDsKKworICAgIHZhbCA9IGxpYnhsX194c19yZWFkKGdjLCBYQlRf TlVMTCwgR0NTUFJJTlRGKCIlcy9zdGF0ZSIsIGRldnBhdGgpKTsKKyAgICBpbmZvLT5zdGF0ZSA9 IHZhbCA/IHN0cnRvdWwodmFsLCBOVUxMLCAxMCkgOiAtMTsKKworICAgIGluZm8tPmZyb250ZW5k ID0geHNfcmVhZChjdHgtPnhzaCwgWEJUX05VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEdDU1BSSU5URigiJXMvZnJvbnRlbmQiLCBsaWJ4bF9wYXRoKSwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgTlVMTCk7CisgICAgaW5mby0+ZnJvbnRlbmRfaWQgPSBkb21pZDsKKwor ICAgIHZhbCA9IGxpYnhsX194c19yZWFkKGdjLCBYQlRfTlVMTCwgR0NTUFJJTlRGKCIlcy9iZS1h bGxvYyIsIGRldnBhdGgpKTsKKyAgICBpbmZvLT5iZV9hbGxvYyA9IHZhbCA/IHN0cnRvdWwodmFs LCBOVUxMLCAxMCkgOiAwOworCisgICAgcmMgPSBsaWJ4bF9fZGV2aWNlX3ZkaXNwbF9nZXRjb25u ZWN0b3JzKGN0eCwgZGV2cGF0aCwgaW5mbyk7CisgICAgaWYgKHJjKSBnb3RvIG91dDsKKworICAg IHJjID0gMDsKKworb3V0OgorICAgICBHQ19GUkVFOworICAgICByZXR1cm4gcmM7Cit9CisKK2lu dCBsaWJ4bF9kZXZpZF90b19kZXZpY2VfdmRpc3BsKGxpYnhsX2N0eCAqY3R4LCB1aW50MzJfdCBk b21pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkZXZpZCwgbGlieGxf ZGV2aWNlX3ZkaXNwbCAqdmRpc3BsKQoreworICAgIEdDX0lOSVQoY3R4KTsKKworICAgIGxpYnhs X2RldmljZV92ZGlzcGwgKnZkaXNwbHMgPSBOVUxMOworICAgIGludCBuLCBpOworICAgIGludCBy YzsKKworICAgIGxpYnhsX2RldmljZV92ZGlzcGxfaW5pdCh2ZGlzcGwpOworCisgICAgdmRpc3Bs cyA9IGxpYnhsX19kZXZpY2VfbGlzdChnYywgJmxpYnhsX192ZGlzcGxfZGV2dHlwZSwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbWlkLCAidmRpc3BsIiwgJm4pOworCisgICAg aWYgKCF2ZGlzcGxzKSB7IHJjID0gRVJST1JfTk9URk9VTkQ7IGdvdG8gb3V0OyB9CisKKyAgICBm b3IgKGkgPSAwOyBpIDwgbjsgKytpKSB7CisgICAgICAgIGlmIChkZXZpZCA9PSB2ZGlzcGxzW2ld LmRldmlkKSB7CisgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfdmRpc3BsX2NvcHkoY3R4LCB2ZGlz cGwsICZ2ZGlzcGxzW2ldKTsKKyAgICAgICAgICAgIHJjID0gMDsKKyAgICAgICAgICAgIGdvdG8g b3V0OworICAgICAgICB9CisgICAgfQorCisgICAgcmMgPSBFUlJPUl9OT1RGT1VORDsKKworb3V0 OgorCisgICAgaWYgKHZkaXNwbHMpCisgICAgICAgIGxpYnhsX19kZXZpY2VfbGlzdF9mcmVlKCZs aWJ4bF9fdmRpc3BsX2RldnR5cGUsIHZkaXNwbHMsIG4pOworCisgICAgR0NfRlJFRTsKKyAgICBy ZXR1cm4gcmM7Cit9CisKK0xJQlhMX0RFRklORV9ERVZJQ0VfQUREKHZkaXNwbCkKK3N0YXRpYyBM SUJYTF9ERUZJTkVfREVWSUNFU19BREQodmRpc3BsKQorTElCWExfREVGSU5FX0RFVklDRV9SRU1P VkUodmRpc3BsKQorc3RhdGljIExJQlhMX0RFRklORV9VUERBVEVfREVWSUQodmRpc3BsLCAidmRp c3BsIikKKworREVGSU5FX0RFVklDRV9UWVBFX1NUUlVDVCh2ZGlzcGwsCisgICAgLnVwZGF0ZV9j b25maWcgPSAodm9pZCAoKikobGlieGxfX2djICosIHZvaWQgKiwgdm9pZCAqKSkKKyAgICAgICAg ICAgICAgICAgICAgIGxpYnhsX191cGRhdGVfY29uZmlnX3ZkaXNwbCwKKyAgICAuZnJvbV94ZW5z dG9yZSA9IChpbnQgKCopKGxpYnhsX19nYyAqLCBjb25zdCBjaGFyICosIGxpYnhsX2RldmlkLCB2 b2lkICopKQorICAgICAgICAgICAgICAgICAgICAgbGlieGxfX3ZkaXNwbF9mcm9tX3hlbnN0b3Jl LAorICAgIC5zZXRfeGVuc3RvcmVfY29uZmlnID0gKGludCAoKikobGlieGxfX2djICosIHVpbnQz Ml90LCB2b2lkICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGV4YXJy YXlfdCAqYmFjaywgZmxleGFycmF5X3QgKmZyb250LAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZmxleGFycmF5X3QgKnJvX2Zyb250KSkKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgIGxpYnhsX19zZXRfeGVuc3RvcmVfdmRpc3BsCispOworCisvKgorICogTG9jYWwgdmFy aWFibGVzOgorICogbW9kZTogQworICogYy1iYXNpYy1vZmZzZXQ6IDQKKyAqIGluZGVudC10YWJz LW1vZGU6IG5pbAorICogRW5kOgorICovCi0tIAoyLjcuNAoKCl9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRl dmVsQGxpc3RzLnhlbi5vcmcKaHR0cHM6Ly9saXN0cy54ZW4ub3JnL3hlbi1kZXZlbAo=