From mboxrd@z Thu Jan 1 00:00:00 1970 From: Yu Zhang Subject: [PATCH v2 1/3] x86/ioreq server: Add new functions to get/set memory types. Date: Thu, 31 Mar 2016 18:53:36 +0800 Message-ID: <1459421618-5991-2-git-send-email-yu.c.zhang@linux.intel.com> References: <1459421618-5991-1-git-send-email-yu.c.zhang@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1459421618-5991-1-git-send-email-yu.c.zhang@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.xen.org Cc: Andrew Cooper , Paul Durrant , Keir Fraser , zhiyuan.lv@intel.com, Jan Beulich List-Id: xen-devel@lists.xenproject.org Rm9yIGNsYXJpdHkgdGhpcyBwYXRjaCBicmVha3MgdGhlIGNvZGUgdG8gc2V0L2dldCBtZW1vcnkg dHlwZXMgb3V0Cm9mIGRvX2h2bV9vcCgpIGludG8gZGVkaWNhdGVkIGZ1bmN0aW9uczogaHZtb3Bf c2V0L2dldF9tZW1fdHlwZSgpLgpBbHNvLCBmb3IgY2xhcml0eSwgY2hlY2tzIGZvciB3aGV0aGVy IGEgbWVtb3J5IHR5cGUgY2hhbmdlIGlzIGFsbG93ZWQKYXJlIGJyb2tlbiBvdXQgaW50byBhIHNl cGFyYXRlIGZ1bmN0aW9uIGNhbGxlZCBieSBodm1vcF9zZXRfbWVtX3R5cGUoKS4KClRoZXJlIGlz IG5vIGludGVudGlvbmFsIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoaXMgcGF0Y2guCgpTaWduZWQt b2ZmLWJ5OiBQYXVsIER1cnJhbnQgPHBhdWwuZHVycmFudEBjaXRyaXguY29tPgpTaWduZWQtb2Zm LWJ5OiBZdSBaaGFuZyA8eXUuYy56aGFuZ0BsaW51eC5pbnRlbC5jb20+CkNjOiBLZWlyIEZyYXNl ciA8a2VpckB4ZW4ub3JnPgpDYzogSmFuIEJldWxpY2ggPGpiZXVsaWNoQHN1c2UuY29tPgpDYzog QW5kcmV3IENvb3BlciA8YW5kcmV3LmNvb3BlcjNAY2l0cml4LmNvbT4KLS0tCiB4ZW4vYXJjaC94 ODYvaHZtL2h2bS5jIHwgMjg0ICsrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCAxNTkgaW5zZXJ0aW9ucygrKSwgMTI1IGRlbGV0 aW9ucygtKQoKZGlmZiAtLWdpdCBhL3hlbi9hcmNoL3g4Ni9odm0vaHZtLmMgYi94ZW4vYXJjaC94 ODYvaHZtL2h2bS5jCmluZGV4IDgwZDU5ZmYuLmY3MDA5MjMgMTAwNjQ0Ci0tLSBhL3hlbi9hcmNo L3g4Ni9odm0vaHZtLmMKKysrIGIveGVuL2FyY2gveDg2L2h2bS9odm0uYwpAQCAtNjU0Nyw2ICs2 NTQ3LDYxIEBAIHN0YXRpYyBpbnQgZG9fYWx0cDJtX29wKAogICAgIHJldHVybiByYzsKIH0KIAor c3RhdGljIGludCBodm1vcF9nZXRfbWVtX3R5cGUoCisgICAgWEVOX0dVRVNUX0hBTkRMRV9QQVJB TSh4ZW5faHZtX2dldF9tZW1fdHlwZV90KSBhcmcpCit7CisgICAgc3RydWN0IHhlbl9odm1fZ2V0 X21lbV90eXBlIGE7CisgICAgc3RydWN0IGRvbWFpbiAqZDsKKyAgICBwMm1fdHlwZV90IHQ7Cisg ICAgaW50IHJjOworCisgICAgaWYgKCBjb3B5X2Zyb21fZ3Vlc3QoJmEsIGFyZywgMSkgKQorICAg ICAgICByZXR1cm4gLUVGQVVMVDsKKworICAgIGQgPSByY3VfbG9ja19kb21haW5fYnlfYW55X2lk KGEuZG9taWQpOworICAgIGlmICggZCA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuIC1FU1JDSDsK KworICAgIHJjID0geHNtX2h2bV9wYXJhbShYU01fVEFSR0VULCBkLCBIVk1PUF9nZXRfbWVtX3R5 cGUpOworICAgIGlmICggcmMgKQorICAgICAgICBnb3RvIG91dDsKKworICAgIHJjID0gLUVJTlZB TDsKKyAgICBpZiAoICFpc19odm1fZG9tYWluKGQpICkKKyAgICAgICAgZ290byBvdXQ7CisKKyAg ICAvKgorICAgICAqIFVzZSBnZXRfZ2ZuIHF1ZXJ5IGFzIHdlIGFyZSBpbnRlcmVzdGVkIGluIHRo ZSBjdXJyZW50CisgICAgICogdHlwZSwgbm90IGluIGFsbG9jYXRpbmcgb3IgdW5zaGFyaW5nLiBU aGF0J2xsIGhhcHBlbgorICAgICAqIG9uIGFjY2Vzcy4KKyAgICAgKi8KKyAgICBnZXRfZ2ZuX3F1 ZXJ5X3VubG9ja2VkKGQsIGEucGZuLCAmdCk7CisgICAgaWYgKCBwMm1faXNfbW1pbyh0KSApCisg ICAgICAgIGEubWVtX3R5cGUgPSAgSFZNTUVNX21taW9fZG07CisgICAgZWxzZSBpZiAoIHQgPT0g cDJtX21taW9fd3JpdGVfZG0gKQorICAgICAgICBhLm1lbV90eXBlID0gSFZNTUVNX21taW9fd3Jp dGVfZG07CisgICAgZWxzZSBpZiAoIHAybV9pc19yZWFkb25seSh0KSApCisgICAgICAgIGEubWVt X3R5cGUgPSAgSFZNTUVNX3JhbV9ybzsKKyAgICBlbHNlIGlmICggcDJtX2lzX3JhbSh0KSApCisg ICAgICAgIGEubWVtX3R5cGUgPSAgSFZNTUVNX3JhbV9ydzsKKyAgICBlbHNlIGlmICggcDJtX2lz X3BvZCh0KSApCisgICAgICAgIGEubWVtX3R5cGUgPSAgSFZNTUVNX3JhbV9ydzsKKyAgICBlbHNl IGlmICggcDJtX2lzX2dyYW50KHQpICkKKyAgICAgICAgYS5tZW1fdHlwZSA9ICBIVk1NRU1fcmFt X3J3OworICAgIGVsc2UKKyAgICAgICAgYS5tZW1fdHlwZSA9ICBIVk1NRU1fbW1pb19kbTsKKwor ICAgIHJjID0gLUVGQVVMVDsKKyAgICBpZiAoIF9fY29weV90b19ndWVzdChhcmcsICZhLCAxKSAp CisgICAgICAgIGdvdG8gb3V0OworICAgIHJjID0gMDsKKworIG91dDoKKyAgICByY3VfdW5sb2Nr X2RvbWFpbihkKTsKKworICAgIHJldHVybiByYzsKK30KKwogLyoKICAqIE5vdGUgdGhhdCB0aGlz IHZhbHVlIGlzIGVmZmVjdGl2ZWx5IHBhcnQgb2YgdGhlIEFCSSwgZXZlbiBpZiB3ZSBkb24ndCBu ZWVkCiAgKiB0byBtYWtlIGl0IGEgZm9ybWFsIHBhcnQgb2YgaXQ6IEEgZ3Vlc3Qgc3VzcGVuZGVk IGZvciBtaWdyYXRpb24gaW4gdGhlCkBAIC02NTU1LDYgKzY2MTAsMTA1IEBAIHN0YXRpYyBpbnQg ZG9fYWx0cDJtX29wKAogICovCiAjZGVmaW5lIEhWTU9QX29wX21hc2sgMHhmZgogCitzdGF0aWMg Ym9vbF90IGh2bV9hbGxvd19wMm1fdHlwZV9jaGFuZ2UocDJtX3R5cGVfdCBvbGQsIHAybV90eXBl X3QgbmV3KQoreworICAgIGlmICggcDJtX2lzX3JhbShvbGQpIHx8CisgICAgICAgICAocDJtX2lz X2hvbGUob2xkKSAmJiBuZXcgPT0gcDJtX21taW9fZG0pIHx8CisgICAgICAgICAob2xkID09IHAy bV9tbWlvX3dyaXRlX2RtICYmIG5ldyA9PSBwMm1fcmFtX3J3KSApCisgICAgICAgIHJldHVybiAx OworCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaHZtb3Bfc2V0X21lbV90eXBlKAor ICAgIFhFTl9HVUVTVF9IQU5ETEVfUEFSQU0oeGVuX2h2bV9zZXRfbWVtX3R5cGVfdCkgYXJnLAor ICAgIHVuc2lnbmVkIGxvbmcgKml0ZXIpCit7CisgICAgdW5zaWduZWQgbG9uZyBzdGFydF9pdGVy ID0gKml0ZXI7CisgICAgc3RydWN0IHhlbl9odm1fc2V0X21lbV90eXBlIGE7CisgICAgc3RydWN0 IGRvbWFpbiAqZDsKKyAgICBpbnQgcmM7CisKKyAgICAvKiBJbnRlcmZhY2UgdHlwZXMgdG8gaW50 ZXJuYWwgcDJtIHR5cGVzICovCisgICAgc3RhdGljIGNvbnN0IHAybV90eXBlX3QgbWVtdHlwZVtd ID0geworICAgICAgICBbSFZNTUVNX3JhbV9yd10gID0gcDJtX3JhbV9ydywKKyAgICAgICAgW0hW TU1FTV9yYW1fcm9dICA9IHAybV9yYW1fcm8sCisgICAgICAgIFtIVk1NRU1fbW1pb19kbV0gPSBw Mm1fbW1pb19kbSwKKyAgICAgICAgW0hWTU1FTV9tbWlvX3dyaXRlX2RtXSA9IHAybV9tbWlvX3dy aXRlX2RtCisgICAgfTsKKworICAgIGlmICggY29weV9mcm9tX2d1ZXN0KCZhLCBhcmcsIDEpICkK KyAgICAgICAgcmV0dXJuIC1FRkFVTFQ7CisKKyAgICByYyA9IHJjdV9sb2NrX3JlbW90ZV9kb21h aW5fYnlfaWQoYS5kb21pZCwgJmQpOworICAgIGlmICggcmMgIT0gMCApCisgICAgICAgIHJldHVy biByYzsKKworICAgIHJjID0gLUVJTlZBTDsKKyAgICBpZiAoICFpc19odm1fZG9tYWluKGQpICkK KyAgICAgICAgZ290byBvdXQ7CisKKyAgICByYyA9IHhzbV9odm1fY29udHJvbChYU01fRE1fUFJJ ViwgZCwgSFZNT1Bfc2V0X21lbV90eXBlKTsKKyAgICBpZiAoIHJjICkKKyAgICAgICAgZ290byBv dXQ7CisKKyAgICByYyA9IC1FSU5WQUw7CisgICAgaWYgKCBhLm5yIDwgc3RhcnRfaXRlciB8fAor ICAgICAgICAgKChhLmZpcnN0X3BmbiArIGEubnIgLSAxKSA8IGEuZmlyc3RfcGZuKSB8fAorICAg ICAgICAgKChhLmZpcnN0X3BmbiArIGEubnIgLSAxKSA+IGRvbWFpbl9nZXRfbWF4aW11bV9ncGZu KGQpKSApCisgICAgICAgIGdvdG8gb3V0OworCisgICAgaWYgKCBhLmh2bW1lbV90eXBlID49IEFS UkFZX1NJWkUobWVtdHlwZSkgKQorICAgICAgICBnb3RvIG91dDsKKworICAgIHdoaWxlICggYS5u ciA+IHN0YXJ0X2l0ZXIgKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBwZm4gPSBhLmZp cnN0X3BmbiArIHN0YXJ0X2l0ZXI7CisgICAgICAgIHAybV90eXBlX3QgdDsKKworICAgICAgICBn ZXRfZ2ZuX3Vuc2hhcmUoZCwgcGZuLCAmdCk7CisgICAgICAgIGlmICggcDJtX2lzX3BhZ2luZyh0 KSApCisgICAgICAgIHsKKyAgICAgICAgICAgIHB1dF9nZm4oZCwgcGZuKTsKKyAgICAgICAgICAg IHAybV9tZW1fcGFnaW5nX3BvcHVsYXRlKGQsIHBmbik7CisgICAgICAgICAgICByYyA9IC1FQUdB SU47CisgICAgICAgICAgICBnb3RvIG91dDsKKyAgICAgICAgfQorICAgICAgICBpZiAoIHAybV9p c19zaGFyZWQodCkgKQorICAgICAgICB7CisgICAgICAgICAgICBwdXRfZ2ZuKGQsIHBmbik7Cisg ICAgICAgICAgICByYyA9IC1FQUdBSU47CisgICAgICAgICAgICBnb3RvIG91dDsKKyAgICAgICAg fQorICAgICAgICBpZiAoICFodm1fYWxsb3dfcDJtX3R5cGVfY2hhbmdlKHQsIG1lbXR5cGVbYS5o dm1tZW1fdHlwZV0pICkKKyAgICAgICAgeworICAgICAgICAgICAgcHV0X2dmbihkLCBwZm4pOwor ICAgICAgICAgICAgZ290byBvdXQ7CisgICAgICAgIH0KKworICAgICAgICByYyA9IHAybV9jaGFu Z2VfdHlwZV9vbmUoZCwgcGZuLCB0LCBtZW10eXBlW2EuaHZtbWVtX3R5cGVdKTsKKyAgICAgICAg cHV0X2dmbihkLCBwZm4pOworCisgICAgICAgIGlmICggcmMgKQorICAgICAgICAgICAgZ290byBv dXQ7CisKKyAgICAgICAgLyogQ2hlY2sgZm9yIGNvbnRpbnVhdGlvbiBpZiBpdCdzIG5vdCB0aGUg bGFzdCBpbnRlcmF0aW9uICovCisgICAgICAgIGlmICggYS5uciA+ICsrc3RhcnRfaXRlciAmJiAh KHN0YXJ0X2l0ZXIgJiBIVk1PUF9vcF9tYXNrKSAmJgorICAgICAgICAgICAgIGh5cGVyY2FsbF9w cmVlbXB0X2NoZWNrKCkgKQorICAgICAgICB7CisgICAgICAgICAgICByYyA9IC1FUkVTVEFSVDsK KyAgICAgICAgICAgIGdvdG8gb3V0OworICAgICAgICB9CisgICAgfQorICAgIHJjID0gMDsKKwor IG91dDoKKyAgICByY3VfdW5sb2NrX2RvbWFpbihkKTsKKyAgICAqaXRlciA9IHN0YXJ0X2l0ZXI7 CisKKyAgICByZXR1cm4gcmM7Cit9CisKIGxvbmcgZG9faHZtX29wKHVuc2lnbmVkIGxvbmcgb3As IFhFTl9HVUVTVF9IQU5ETEVfUEFSQU0odm9pZCkgYXJnKQogewogICAgIHVuc2lnbmVkIGxvbmcg c3RhcnRfaXRlciwgbWFzazsKQEAgLTY3NDQsMTM1ICs2ODk4LDE1IEBAIGxvbmcgZG9faHZtX29w KHVuc2lnbmVkIGxvbmcgb3AsIFhFTl9HVUVTVF9IQU5ETEVfUEFSQU0odm9pZCkgYXJnKQogICAg IH0KIAogICAgIGNhc2UgSFZNT1BfZ2V0X21lbV90eXBlOgotICAgIHsKLSAgICAgICAgc3RydWN0 IHhlbl9odm1fZ2V0X21lbV90eXBlIGE7Ci0gICAgICAgIHN0cnVjdCBkb21haW4gKmQ7Ci0gICAg ICAgIHAybV90eXBlX3QgdDsKLQotICAgICAgICBpZiAoIGNvcHlfZnJvbV9ndWVzdCgmYSwgYXJn LCAxKSApCi0gICAgICAgICAgICByZXR1cm4gLUVGQVVMVDsKLQotICAgICAgICBkID0gcmN1X2xv Y2tfZG9tYWluX2J5X2FueV9pZChhLmRvbWlkKTsKLSAgICAgICAgaWYgKCBkID09IE5VTEwgKQot ICAgICAgICAgICAgcmV0dXJuIC1FU1JDSDsKLQotICAgICAgICByYyA9IHhzbV9odm1fcGFyYW0o WFNNX1RBUkdFVCwgZCwgb3ApOwotICAgICAgICBpZiAoIHVubGlrZWx5KHJjKSApCi0gICAgICAg ICAgICAvKiBub3RoaW5nICovOwotICAgICAgICBlbHNlIGlmICggbGlrZWx5KGlzX2h2bV9kb21h aW4oZCkpICkKLSAgICAgICAgewotICAgICAgICAgICAgLyogVXNlIGdldF9nZm4gcXVlcnkgYXMg d2UgYXJlIGludGVyZXN0ZWQgaW4gdGhlIGN1cnJlbnQgCi0gICAgICAgICAgICAgKiB0eXBlLCBu b3QgaW4gYWxsb2NhdGluZyBvciB1bnNoYXJpbmcuIFRoYXQnbGwgaGFwcGVuIAotICAgICAgICAg ICAgICogb24gYWNjZXNzLiAqLwotICAgICAgICAgICAgZ2V0X2dmbl9xdWVyeV91bmxvY2tlZChk LCBhLnBmbiwgJnQpOwotICAgICAgICAgICAgaWYgKCBwMm1faXNfbW1pbyh0KSApCi0gICAgICAg ICAgICAgICAgYS5tZW1fdHlwZSA9ICBIVk1NRU1fbW1pb19kbTsKLSAgICAgICAgICAgIGVsc2Ug aWYgKCB0ID09IHAybV9tbWlvX3dyaXRlX2RtICkKLSAgICAgICAgICAgICAgICBhLm1lbV90eXBl ID0gSFZNTUVNX21taW9fd3JpdGVfZG07Ci0gICAgICAgICAgICBlbHNlIGlmICggcDJtX2lzX3Jl YWRvbmx5KHQpICkKLSAgICAgICAgICAgICAgICBhLm1lbV90eXBlID0gIEhWTU1FTV9yYW1fcm87 Ci0gICAgICAgICAgICBlbHNlIGlmICggcDJtX2lzX3JhbSh0KSApCi0gICAgICAgICAgICAgICAg YS5tZW1fdHlwZSA9ICBIVk1NRU1fcmFtX3J3OwotICAgICAgICAgICAgZWxzZSBpZiAoIHAybV9p c19wb2QodCkgKQotICAgICAgICAgICAgICAgIGEubWVtX3R5cGUgPSAgSFZNTUVNX3JhbV9ydzsK LSAgICAgICAgICAgIGVsc2UgaWYgKCBwMm1faXNfZ3JhbnQodCkgKQotICAgICAgICAgICAgICAg IGEubWVtX3R5cGUgPSAgSFZNTUVNX3JhbV9ydzsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAg ICAgICAgICBhLm1lbV90eXBlID0gIEhWTU1FTV9tbWlvX2RtOwotICAgICAgICAgICAgaWYgKCBf X2NvcHlfdG9fZ3Vlc3QoYXJnLCAmYSwgMSkgKQotICAgICAgICAgICAgICAgIHJjID0gLUVGQVVM VDsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgICAgICByYyA9IC1FSU5WQUw7Ci0K LSAgICAgICAgcmN1X3VubG9ja19kb21haW4oZCk7CisgICAgICAgIHJjID0gaHZtb3BfZ2V0X21l bV90eXBlKAorICAgICAgICAgICAgZ3Vlc3RfaGFuZGxlX2Nhc3QoYXJnLCB4ZW5faHZtX2dldF9t ZW1fdHlwZV90KSk7CiAgICAgICAgIGJyZWFrOwotICAgIH0KIAogICAgIGNhc2UgSFZNT1Bfc2V0 X21lbV90eXBlOgotICAgIHsKLSAgICAgICAgc3RydWN0IHhlbl9odm1fc2V0X21lbV90eXBlIGE7 Ci0gICAgICAgIHN0cnVjdCBkb21haW4gKmQ7Ci0gICAgICAgIAotICAgICAgICAvKiBJbnRlcmZh Y2UgdHlwZXMgdG8gaW50ZXJuYWwgcDJtIHR5cGVzICovCi0gICAgICAgIHN0YXRpYyBjb25zdCBw Mm1fdHlwZV90IG1lbXR5cGVbXSA9IHsKLSAgICAgICAgICAgIFtIVk1NRU1fcmFtX3J3XSAgPSBw Mm1fcmFtX3J3LAotICAgICAgICAgICAgW0hWTU1FTV9yYW1fcm9dICA9IHAybV9yYW1fcm8sCi0g ICAgICAgICAgICBbSFZNTUVNX21taW9fZG1dID0gcDJtX21taW9fZG0sCi0gICAgICAgICAgICBb SFZNTUVNX21taW9fd3JpdGVfZG1dID0gcDJtX21taW9fd3JpdGVfZG0KLSAgICAgICAgfTsKLQot ICAgICAgICBpZiAoIGNvcHlfZnJvbV9ndWVzdCgmYSwgYXJnLCAxKSApCi0gICAgICAgICAgICBy ZXR1cm4gLUVGQVVMVDsKLQotICAgICAgICByYyA9IHJjdV9sb2NrX3JlbW90ZV9kb21haW5fYnlf aWQoYS5kb21pZCwgJmQpOwotICAgICAgICBpZiAoIHJjICE9IDAgKQotICAgICAgICAgICAgcmV0 dXJuIHJjOwotCi0gICAgICAgIHJjID0gLUVJTlZBTDsKLSAgICAgICAgaWYgKCAhaXNfaHZtX2Rv bWFpbihkKSApCi0gICAgICAgICAgICBnb3RvIHNldG1lbXR5cGVfZmFpbDsKLQotICAgICAgICBy YyA9IHhzbV9odm1fY29udHJvbChYU01fRE1fUFJJViwgZCwgb3ApOwotICAgICAgICBpZiAoIHJj ICkKLSAgICAgICAgICAgIGdvdG8gc2V0bWVtdHlwZV9mYWlsOwotCi0gICAgICAgIHJjID0gLUVJ TlZBTDsKLSAgICAgICAgaWYgKCBhLm5yIDwgc3RhcnRfaXRlciB8fAotICAgICAgICAgICAgICgo YS5maXJzdF9wZm4gKyBhLm5yIC0gMSkgPCBhLmZpcnN0X3BmbikgfHwKLSAgICAgICAgICAgICAo KGEuZmlyc3RfcGZuICsgYS5uciAtIDEpID4gZG9tYWluX2dldF9tYXhpbXVtX2dwZm4oZCkpICkK LSAgICAgICAgICAgIGdvdG8gc2V0bWVtdHlwZV9mYWlsOwotICAgICAgICAgICAgCi0gICAgICAg IGlmICggYS5odm1tZW1fdHlwZSA+PSBBUlJBWV9TSVpFKG1lbXR5cGUpICkKLSAgICAgICAgICAg IGdvdG8gc2V0bWVtdHlwZV9mYWlsOwotCi0gICAgICAgIHdoaWxlICggYS5uciA+IHN0YXJ0X2l0 ZXIgKQotICAgICAgICB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBsb25nIHBmbiA9IGEuZmlyc3Rf cGZuICsgc3RhcnRfaXRlcjsKLSAgICAgICAgICAgIHAybV90eXBlX3QgdDsKLQotICAgICAgICAg ICAgZ2V0X2dmbl91bnNoYXJlKGQsIHBmbiwgJnQpOwotICAgICAgICAgICAgaWYgKCBwMm1faXNf cGFnaW5nKHQpICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBwdXRfZ2ZuKGQsIHBm bik7Ci0gICAgICAgICAgICAgICAgcDJtX21lbV9wYWdpbmdfcG9wdWxhdGUoZCwgcGZuKTsKLSAg ICAgICAgICAgICAgICByYyA9IC1FQUdBSU47Ci0gICAgICAgICAgICAgICAgZ290byBzZXRtZW10 eXBlX2ZhaWw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoIHAybV9pc19zaGFyZWQo dCkgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHB1dF9nZm4oZCwgcGZuKTsKLSAg ICAgICAgICAgICAgICByYyA9IC1FQUdBSU47Ci0gICAgICAgICAgICAgICAgZ290byBzZXRtZW10 eXBlX2ZhaWw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoICFwMm1faXNfcmFtKHQp ICYmCi0gICAgICAgICAgICAgICAgICghcDJtX2lzX2hvbGUodCkgfHwgYS5odm1tZW1fdHlwZSAh PSBIVk1NRU1fbW1pb19kbSkgJiYKLSAgICAgICAgICAgICAgICAgKHQgIT0gcDJtX21taW9fd3Jp dGVfZG0gfHwgYS5odm1tZW1fdHlwZSAhPSBIVk1NRU1fcmFtX3J3KSApCi0gICAgICAgICAgICB7 Ci0gICAgICAgICAgICAgICAgcHV0X2dmbihkLCBwZm4pOwotICAgICAgICAgICAgICAgIGdvdG8g c2V0bWVtdHlwZV9mYWlsOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByYyA9IHAybV9j aGFuZ2VfdHlwZV9vbmUoZCwgcGZuLCB0LCBtZW10eXBlW2EuaHZtbWVtX3R5cGVdKTsKLSAgICAg ICAgICAgIHB1dF9nZm4oZCwgcGZuKTsKLSAgICAgICAgICAgIGlmICggcmMgKQotICAgICAgICAg ICAgICAgIGdvdG8gc2V0bWVtdHlwZV9mYWlsOwotCi0gICAgICAgICAgICAvKiBDaGVjayBmb3Ig Y29udGludWF0aW9uIGlmIGl0J3Mgbm90IHRoZSBsYXN0IGludGVyYXRpb24gKi8KLSAgICAgICAg ICAgIGlmICggYS5uciA+ICsrc3RhcnRfaXRlciAmJiAhKHN0YXJ0X2l0ZXIgJiBIVk1PUF9vcF9t YXNrKSAmJgotICAgICAgICAgICAgICAgICBoeXBlcmNhbGxfcHJlZW1wdF9jaGVjaygpICkKLSAg ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByYyA9IC1FUkVTVEFSVDsKLSAgICAgICAgICAg ICAgICBnb3RvIHNldG1lbXR5cGVfZmFpbDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0g ICAgICAgIHJjID0gMDsKLQotICAgIHNldG1lbXR5cGVfZmFpbDoKLSAgICAgICAgcmN1X3VubG9j a19kb21haW4oZCk7CisgICAgICAgIHJjID0gaHZtb3Bfc2V0X21lbV90eXBlKAorICAgICAgICAg ICAgZ3Vlc3RfaGFuZGxlX2Nhc3QoYXJnLCB4ZW5faHZtX3NldF9tZW1fdHlwZV90KSwKKyAgICAg ICAgICAgICZzdGFydF9pdGVyKTsKICAgICAgICAgYnJlYWs7Ci0gICAgfQogCiAgICAgY2FzZSBI Vk1PUF9wYWdldGFibGVfZHlpbmc6CiAgICAgewotLSAKMS45LjEKCgpfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhl bi1kZXZlbEBsaXN0cy54ZW4ub3JnCmh0dHA6Ly9saXN0cy54ZW4ub3JnL3hlbi1kZXZlbAo=