From mboxrd@z Thu Jan 1 00:00:00 1970 From: Yu Zhang Subject: [PATCH v4 2/3] x86/ioreq server: Add new functions to get/set memory types. Date: Thu, 19 May 2016 17:05:10 +0800 Message-ID: <1463648711-26595-3-git-send-email-yu.c.zhang@linux.intel.com> References: <1463648711-26595-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: <1463648711-26595-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 , zhiyuan.lv@intel.com, Jan Beulich List-Id: xen-devel@lists.xenproject.org Rm9yIGNsYXJpdHkgdGhpcyBwYXRjaCBicmVha3MgdGhlIGNvZGUgdG8gc2V0L2dldCBtZW1vcnkg dHlwZXMgb3V0Cm9mIGRvX2h2bV9vcCgpIGludG8gZGVkaWNhdGVkIGZ1bmN0aW9uczogaHZtb3Bf c2V0L2dldF9tZW1fdHlwZSgpLgpBbHNvLCBmb3IgY2xhcml0eSwgY2hlY2tzIGZvciB3aGV0aGVy IGEgbWVtb3J5IHR5cGUgY2hhbmdlIGlzIGFsbG93ZWQKYXJlIGJyb2tlbiBvdXQgaW50byBhIHNl cGFyYXRlIGZ1bmN0aW9uIGNhbGxlZCBieSBodm1vcF9zZXRfbWVtX3R5cGUoKS4KClRoZXJlIGlz IG5vIGludGVudGlvbmFsIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoaXMgcGF0Y2guCgpTaWduZWQt b2ZmLWJ5OiBQYXVsIER1cnJhbnQgPHBhdWwuZHVycmFudEBjaXRyaXguY29tPgpTaWduZWQtb2Zm LWJ5OiBZdSBaaGFuZyA8eXUuYy56aGFuZ0BsaW51eC5pbnRlbC5jb20+ClJldmlld2VkLWJ5OiBH ZW9yZ2UgRHVubGFwIDxnZW9yZ2UuZHVubGFwQGNpdHJpeC5jb20+CkFja2VkLWJ5OiBBbmRyZXcg Q29vcGVyIDxhbmRyZXcuY29vcGVyM0BjaXRyaXguY29tPgotLS0KQ2M6IEphbiBCZXVsaWNoIDxq YmV1bGljaEBzdXNlLmNvbT4KQ2M6IEFuZHJldyBDb29wZXIgPGFuZHJldy5jb29wZXIzQGNpdHJp eC5jb20+CgpjaGFuZ2VzIGluIHY0OiAKICAtIEFjY29yZGluZyB0byBXZWkgTGl1J3MgY29tbWVu dHMsIGNoYW5nZSB0aGUgZm9ybWF0IG9mIHRoZSBjb21taXQKICAgIG1lc3NhZ2UuCiAgCmNoYW5n ZXMgaW4gdjM6IAogIC0gQWRkIEFuZHJldydzIEFja2VkLWJ5IGFuZCBHZW9yZ2UncyBSZXZpZXdl ZC1ieS4KCmNoYW5nZXMgaW4gdjI6IAogIC0gQWNjb3JkaW5nIHRvIEdlb3JnZSBEdW5sYXAncyBj b21tZW50cywgZm9sbG93IHRoZSAic2V0IHJjIC8KICAgIGRvIHNvbWV0aGluZyAvIGdvdG8gb3V0 IiBwYXR0ZXJuIGluIGh2bW9wX2dldF9tZW1fdHlwZSgpLgotLS0KIHhlbi9hcmNoL3g4Ni9odm0v aHZtLmMgfCAyODggKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQogMSBmaWxlIGNoYW5nZWQsIDE2MSBpbnNlcnRpb25zKCspLCAxMjcgZGVsZXRpb25zKC0p CgpkaWZmIC0tZ2l0IGEveGVuL2FyY2gveDg2L2h2bS9odm0uYyBiL3hlbi9hcmNoL3g4Ni9odm0v aHZtLmMKaW5kZXggMjFiYzQ1Yy4uMzQ2ZGE5NyAxMDA2NDQKLS0tIGEveGVuL2FyY2gveDg2L2h2 bS9odm0uYworKysgYi94ZW4vYXJjaC94ODYvaHZtL2h2bS5jCkBAIC01Mjg3LDYgKzUyODcsNjEg QEAgc3RhdGljIGludCBkb19hbHRwMm1fb3AoCiAgICAgcmV0dXJuIHJjOwogfQogCitzdGF0aWMg aW50IGh2bW9wX2dldF9tZW1fdHlwZSgKKyAgICBYRU5fR1VFU1RfSEFORExFX1BBUkFNKHhlbl9o dm1fZ2V0X21lbV90eXBlX3QpIGFyZykKK3sKKyAgICBzdHJ1Y3QgeGVuX2h2bV9nZXRfbWVtX3R5 cGUgYTsKKyAgICBzdHJ1Y3QgZG9tYWluICpkOworICAgIHAybV90eXBlX3QgdDsKKyAgICBpbnQg cmM7CisKKyAgICBpZiAoIGNvcHlfZnJvbV9ndWVzdCgmYSwgYXJnLCAxKSApCisgICAgICAgIHJl dHVybiAtRUZBVUxUOworCisgICAgZCA9IHJjdV9sb2NrX2RvbWFpbl9ieV9hbnlfaWQoYS5kb21p ZCk7CisgICAgaWYgKCBkID09IE5VTEwgKQorICAgICAgICByZXR1cm4gLUVTUkNIOworCisgICAg cmMgPSB4c21faHZtX3BhcmFtKFhTTV9UQVJHRVQsIGQsIEhWTU9QX2dldF9tZW1fdHlwZSk7Cisg ICAgaWYgKCByYyApCisgICAgICAgIGdvdG8gb3V0OworCisgICAgcmMgPSAtRUlOVkFMOworICAg IGlmICggIWlzX2h2bV9kb21haW4oZCkgKQorICAgICAgICBnb3RvIG91dDsKKworICAgIC8qCisg ICAgICogVXNlIGdldF9nZm4gcXVlcnkgYXMgd2UgYXJlIGludGVyZXN0ZWQgaW4gdGhlIGN1cnJl bnQKKyAgICAgKiB0eXBlLCBub3QgaW4gYWxsb2NhdGluZyBvciB1bnNoYXJpbmcuIFRoYXQnbGwg aGFwcGVuCisgICAgICogb24gYWNjZXNzLgorICAgICAqLworICAgIGdldF9nZm5fcXVlcnlfdW5s b2NrZWQoZCwgYS5wZm4sICZ0KTsKKyAgICBpZiAoIHAybV9pc19tbWlvKHQpICkKKyAgICAgICAg YS5tZW1fdHlwZSA9ICBIVk1NRU1fbW1pb19kbTsKKyAgICBlbHNlIGlmICggdCA9PSBwMm1faW9y ZXFfc2VydmVyICkKKyAgICAgICAgYS5tZW1fdHlwZSA9IEhWTU1FTV9pb3JlcV9zZXJ2ZXI7Cisg ICAgZWxzZSBpZiAoIHAybV9pc19yZWFkb25seSh0KSApCisgICAgICAgIGEubWVtX3R5cGUgPSAg SFZNTUVNX3JhbV9ybzsKKyAgICBlbHNlIGlmICggcDJtX2lzX3JhbSh0KSApCisgICAgICAgIGEu bWVtX3R5cGUgPSAgSFZNTUVNX3JhbV9ydzsKKyAgICBlbHNlIGlmICggcDJtX2lzX3BvZCh0KSAp CisgICAgICAgIGEubWVtX3R5cGUgPSAgSFZNTUVNX3JhbV9ydzsKKyAgICBlbHNlIGlmICggcDJt X2lzX2dyYW50KHQpICkKKyAgICAgICAgYS5tZW1fdHlwZSA9ICBIVk1NRU1fcmFtX3J3OworICAg IGVsc2UKKyAgICAgICAgYS5tZW1fdHlwZSA9ICBIVk1NRU1fbW1pb19kbTsKKworICAgIHJjID0g LUVGQVVMVDsKKyAgICBpZiAoIF9fY29weV90b19ndWVzdChhcmcsICZhLCAxKSApCisgICAgICAg IGdvdG8gb3V0OworICAgIHJjID0gMDsKKworIG91dDoKKyAgICByY3VfdW5sb2NrX2RvbWFpbihk KTsKKworICAgIHJldHVybiByYzsKK30KKwogLyoKICAqIE5vdGUgdGhhdCB0aGlzIHZhbHVlIGlz IGVmZmVjdGl2ZWx5IHBhcnQgb2YgdGhlIEFCSSwgZXZlbiBpZiB3ZSBkb24ndCBuZWVkCiAgKiB0 byBtYWtlIGl0IGEgZm9ybWFsIHBhcnQgb2YgaXQ6IEEgZ3Vlc3Qgc3VzcGVuZGVkIGZvciBtaWdy YXRpb24gaW4gdGhlCkBAIC01Mjk1LDYgKzUzNTAsMTA3IEBAIHN0YXRpYyBpbnQgZG9fYWx0cDJt X29wKAogICovCiAjZGVmaW5lIEhWTU9QX29wX21hc2sgMHhmZgogCitzdGF0aWMgYm9vbF90IGh2 bV9hbGxvd19wMm1fdHlwZV9jaGFuZ2UocDJtX3R5cGVfdCBvbGQsIHAybV90eXBlX3QgbmV3KQor eworICAgIGlmICggcDJtX2lzX3JhbShvbGQpIHx8CisgICAgICAgICAocDJtX2lzX2hvbGUob2xk KSAmJiBuZXcgPT0gcDJtX21taW9fZG0pIHx8CisgICAgICAgICAob2xkID09IHAybV9pb3JlcV9z ZXJ2ZXIgJiYgbmV3ID09IHAybV9yYW1fcncpICkKKyAgICAgICAgcmV0dXJuIDE7CisKKyAgICBy ZXR1cm4gMDsKK30KKworc3RhdGljIGludCBodm1vcF9zZXRfbWVtX3R5cGUoCisgICAgWEVOX0dV RVNUX0hBTkRMRV9QQVJBTSh4ZW5faHZtX3NldF9tZW1fdHlwZV90KSBhcmcsCisgICAgdW5zaWdu ZWQgbG9uZyAqaXRlcikKK3sKKyAgICB1bnNpZ25lZCBsb25nIHN0YXJ0X2l0ZXIgPSAqaXRlcjsK KyAgICBzdHJ1Y3QgeGVuX2h2bV9zZXRfbWVtX3R5cGUgYTsKKyAgICBzdHJ1Y3QgZG9tYWluICpk OworICAgIGludCByYzsKKworICAgIC8qIEludGVyZmFjZSB0eXBlcyB0byBpbnRlcm5hbCBwMm0g dHlwZXMgKi8KKyAgICBzdGF0aWMgY29uc3QgcDJtX3R5cGVfdCBtZW10eXBlW10gPSB7CisgICAg ICAgIFtIVk1NRU1fcmFtX3J3XSAgPSBwMm1fcmFtX3J3LAorICAgICAgICBbSFZNTUVNX3JhbV9y b10gID0gcDJtX3JhbV9ybywKKyAgICAgICAgW0hWTU1FTV9tbWlvX2RtXSA9IHAybV9tbWlvX2Rt LAorICAgICAgICBbSFZNTUVNX3VudXNlZF0gPSBwMm1faW52YWxpZCwKKyAgICAgICAgW0hWTU1F TV9pb3JlcV9zZXJ2ZXJdID0gcDJtX2lvcmVxX3NlcnZlcgorICAgIH07CisKKyAgICBpZiAoIGNv cHlfZnJvbV9ndWVzdCgmYSwgYXJnLCAxKSApCisgICAgICAgIHJldHVybiAtRUZBVUxUOworCisg ICAgcmMgPSByY3VfbG9ja19yZW1vdGVfZG9tYWluX2J5X2lkKGEuZG9taWQsICZkKTsKKyAgICBp ZiAoIHJjICE9IDAgKQorICAgICAgICByZXR1cm4gcmM7CisKKyAgICByYyA9IC1FSU5WQUw7Cisg ICAgaWYgKCAhaXNfaHZtX2RvbWFpbihkKSApCisgICAgICAgIGdvdG8gb3V0OworCisgICAgcmMg PSB4c21faHZtX2NvbnRyb2woWFNNX0RNX1BSSVYsIGQsIEhWTU9QX3NldF9tZW1fdHlwZSk7Cisg ICAgaWYgKCByYyApCisgICAgICAgIGdvdG8gb3V0OworCisgICAgcmMgPSAtRUlOVkFMOworICAg IGlmICggYS5uciA8IHN0YXJ0X2l0ZXIgfHwKKyAgICAgICAgICgoYS5maXJzdF9wZm4gKyBhLm5y IC0gMSkgPCBhLmZpcnN0X3BmbikgfHwKKyAgICAgICAgICgoYS5maXJzdF9wZm4gKyBhLm5yIC0g MSkgPiBkb21haW5fZ2V0X21heGltdW1fZ3BmbihkKSkgKQorICAgICAgICBnb3RvIG91dDsKKwor ICAgIGlmICggYS5odm1tZW1fdHlwZSA+PSBBUlJBWV9TSVpFKG1lbXR5cGUpIHx8CisgICAgICAg ICB1bmxpa2VseShhLmh2bW1lbV90eXBlID09IEhWTU1FTV91bnVzZWQpICkKKyAgICAgICAgZ290 byBvdXQ7CisKKyAgICB3aGlsZSAoIGEubnIgPiBzdGFydF9pdGVyICkKKyAgICB7CisgICAgICAg IHVuc2lnbmVkIGxvbmcgcGZuID0gYS5maXJzdF9wZm4gKyBzdGFydF9pdGVyOworICAgICAgICBw Mm1fdHlwZV90IHQ7CisKKyAgICAgICAgZ2V0X2dmbl91bnNoYXJlKGQsIHBmbiwgJnQpOworICAg ICAgICBpZiAoIHAybV9pc19wYWdpbmcodCkgKQorICAgICAgICB7CisgICAgICAgICAgICBwdXRf Z2ZuKGQsIHBmbik7CisgICAgICAgICAgICBwMm1fbWVtX3BhZ2luZ19wb3B1bGF0ZShkLCBwZm4p OworICAgICAgICAgICAgcmMgPSAtRUFHQUlOOworICAgICAgICAgICAgZ290byBvdXQ7CisgICAg ICAgIH0KKyAgICAgICAgaWYgKCBwMm1faXNfc2hhcmVkKHQpICkKKyAgICAgICAgeworICAgICAg ICAgICAgcHV0X2dmbihkLCBwZm4pOworICAgICAgICAgICAgcmMgPSAtRUFHQUlOOworICAgICAg ICAgICAgZ290byBvdXQ7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCAhaHZtX2FsbG93X3AybV90 eXBlX2NoYW5nZSh0LCBtZW10eXBlW2EuaHZtbWVtX3R5cGVdKSApCisgICAgICAgIHsKKyAgICAg ICAgICAgIHB1dF9nZm4oZCwgcGZuKTsKKyAgICAgICAgICAgIGdvdG8gb3V0OworICAgICAgICB9 CisKKyAgICAgICAgcmMgPSBwMm1fY2hhbmdlX3R5cGVfb25lKGQsIHBmbiwgdCwgbWVtdHlwZVth Lmh2bW1lbV90eXBlXSk7CisgICAgICAgIHB1dF9nZm4oZCwgcGZuKTsKKworICAgICAgICBpZiAo IHJjICkKKyAgICAgICAgICAgIGdvdG8gb3V0OworCisgICAgICAgIC8qIENoZWNrIGZvciBjb250 aW51YXRpb24gaWYgaXQncyBub3QgdGhlIGxhc3QgaW50ZXJhdGlvbiAqLworICAgICAgICBpZiAo IGEubnIgPiArK3N0YXJ0X2l0ZXIgJiYgIShzdGFydF9pdGVyICYgSFZNT1Bfb3BfbWFzaykgJiYK KyAgICAgICAgICAgICBoeXBlcmNhbGxfcHJlZW1wdF9jaGVjaygpICkKKyAgICAgICAgeworICAg ICAgICAgICAgcmMgPSAtRVJFU1RBUlQ7CisgICAgICAgICAgICBnb3RvIG91dDsKKyAgICAgICAg fQorICAgIH0KKyAgICByYyA9IDA7CisKKyBvdXQ6CisgICAgcmN1X3VubG9ja19kb21haW4oZCk7 CisgICAgKml0ZXIgPSBzdGFydF9pdGVyOworCisgICAgcmV0dXJuIHJjOworfQorCiBsb25nIGRv X2h2bV9vcCh1bnNpZ25lZCBsb25nIG9wLCBYRU5fR1VFU1RfSEFORExFX1BBUkFNKHZvaWQpIGFy ZykKIHsKICAgICB1bnNpZ25lZCBsb25nIHN0YXJ0X2l0ZXIsIG1hc2s7CkBAIC01NDg0LDEzNyAr NTY0MCwxNSBAQCBsb25nIGRvX2h2bV9vcCh1bnNpZ25lZCBsb25nIG9wLCBYRU5fR1VFU1RfSEFO RExFX1BBUkFNKHZvaWQpIGFyZykKICAgICB9CiAKICAgICBjYXNlIEhWTU9QX2dldF9tZW1fdHlw ZToKLSAgICB7Ci0gICAgICAgIHN0cnVjdCB4ZW5faHZtX2dldF9tZW1fdHlwZSBhOwotICAgICAg ICBzdHJ1Y3QgZG9tYWluICpkOwotICAgICAgICBwMm1fdHlwZV90IHQ7Ci0KLSAgICAgICAgaWYg KCBjb3B5X2Zyb21fZ3Vlc3QoJmEsIGFyZywgMSkgKQotICAgICAgICAgICAgcmV0dXJuIC1FRkFV TFQ7Ci0KLSAgICAgICAgZCA9IHJjdV9sb2NrX2RvbWFpbl9ieV9hbnlfaWQoYS5kb21pZCk7Ci0g ICAgICAgIGlmICggZCA9PSBOVUxMICkKLSAgICAgICAgICAgIHJldHVybiAtRVNSQ0g7Ci0KLSAg ICAgICAgcmMgPSB4c21faHZtX3BhcmFtKFhTTV9UQVJHRVQsIGQsIG9wKTsKLSAgICAgICAgaWYg KCB1bmxpa2VseShyYykgKQotICAgICAgICAgICAgLyogbm90aGluZyAqLzsKLSAgICAgICAgZWxz ZSBpZiAoIGxpa2VseShpc19odm1fZG9tYWluKGQpKSApCi0gICAgICAgIHsKLSAgICAgICAgICAg IC8qIFVzZSBnZXRfZ2ZuIHF1ZXJ5IGFzIHdlIGFyZSBpbnRlcmVzdGVkIGluIHRoZSBjdXJyZW50 IAotICAgICAgICAgICAgICogdHlwZSwgbm90IGluIGFsbG9jYXRpbmcgb3IgdW5zaGFyaW5nLiBU aGF0J2xsIGhhcHBlbiAKLSAgICAgICAgICAgICAqIG9uIGFjY2Vzcy4gKi8KLSAgICAgICAgICAg IGdldF9nZm5fcXVlcnlfdW5sb2NrZWQoZCwgYS5wZm4sICZ0KTsKLSAgICAgICAgICAgIGlmICgg cDJtX2lzX21taW8odCkgKQotICAgICAgICAgICAgICAgIGEubWVtX3R5cGUgPSAgSFZNTUVNX21t aW9fZG07Ci0gICAgICAgICAgICBlbHNlIGlmICggdCA9PSBwMm1faW9yZXFfc2VydmVyICkKLSAg ICAgICAgICAgICAgICBhLm1lbV90eXBlID0gSFZNTUVNX2lvcmVxX3NlcnZlcjsKLSAgICAgICAg ICAgIGVsc2UgaWYgKCBwMm1faXNfcmVhZG9ubHkodCkgKQotICAgICAgICAgICAgICAgIGEubWVt X3R5cGUgPSAgSFZNTUVNX3JhbV9ybzsKLSAgICAgICAgICAgIGVsc2UgaWYgKCBwMm1faXNfcmFt KHQpICkKLSAgICAgICAgICAgICAgICBhLm1lbV90eXBlID0gIEhWTU1FTV9yYW1fcnc7Ci0gICAg ICAgICAgICBlbHNlIGlmICggcDJtX2lzX3BvZCh0KSApCi0gICAgICAgICAgICAgICAgYS5tZW1f dHlwZSA9ICBIVk1NRU1fcmFtX3J3OwotICAgICAgICAgICAgZWxzZSBpZiAoIHAybV9pc19ncmFu dCh0KSApCi0gICAgICAgICAgICAgICAgYS5tZW1fdHlwZSA9ICBIVk1NRU1fcmFtX3J3OwotICAg ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGEubWVtX3R5cGUgPSAgSFZNTUVNX21taW9f ZG07Ci0gICAgICAgICAgICBpZiAoIF9fY29weV90b19ndWVzdChhcmcsICZhLCAxKSApCi0gICAg ICAgICAgICAgICAgcmMgPSAtRUZBVUxUOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAg ICAgICAgIHJjID0gLUVJTlZBTDsKLQotICAgICAgICByY3VfdW5sb2NrX2RvbWFpbihkKTsKKyAg ICAgICAgcmMgPSBodm1vcF9nZXRfbWVtX3R5cGUoCisgICAgICAgICAgICBndWVzdF9oYW5kbGVf Y2FzdChhcmcsIHhlbl9odm1fZ2V0X21lbV90eXBlX3QpKTsKICAgICAgICAgYnJlYWs7Ci0gICAg fQogCiAgICAgY2FzZSBIVk1PUF9zZXRfbWVtX3R5cGU6Ci0gICAgewotICAgICAgICBzdHJ1Y3Qg eGVuX2h2bV9zZXRfbWVtX3R5cGUgYTsKLSAgICAgICAgc3RydWN0IGRvbWFpbiAqZDsKLSAgICAg ICAgCi0gICAgICAgIC8qIEludGVyZmFjZSB0eXBlcyB0byBpbnRlcm5hbCBwMm0gdHlwZXMgKi8K LSAgICAgICAgc3RhdGljIGNvbnN0IHAybV90eXBlX3QgbWVtdHlwZVtdID0gewotICAgICAgICAg ICAgW0hWTU1FTV9yYW1fcnddICA9IHAybV9yYW1fcncsCi0gICAgICAgICAgICBbSFZNTUVNX3Jh bV9yb10gID0gcDJtX3JhbV9ybywKLSAgICAgICAgICAgIFtIVk1NRU1fbW1pb19kbV0gPSBwMm1f bW1pb19kbSwKLSAgICAgICAgICAgIFtIVk1NRU1fdW51c2VkXSA9IHAybV9pbnZhbGlkLAotICAg ICAgICAgICAgW0hWTU1FTV9pb3JlcV9zZXJ2ZXJdID0gcDJtX2lvcmVxX3NlcnZlcgotICAgICAg ICB9OwotCi0gICAgICAgIGlmICggY29weV9mcm9tX2d1ZXN0KCZhLCBhcmcsIDEpICkKLSAgICAg ICAgICAgIHJldHVybiAtRUZBVUxUOwotCi0gICAgICAgIHJjID0gcmN1X2xvY2tfcmVtb3RlX2Rv bWFpbl9ieV9pZChhLmRvbWlkLCAmZCk7Ci0gICAgICAgIGlmICggcmMgIT0gMCApCi0gICAgICAg ICAgICByZXR1cm4gcmM7Ci0KLSAgICAgICAgcmMgPSAtRUlOVkFMOwotICAgICAgICBpZiAoICFp c19odm1fZG9tYWluKGQpICkKLSAgICAgICAgICAgIGdvdG8gc2V0bWVtdHlwZV9mYWlsOwotCi0g ICAgICAgIHJjID0geHNtX2h2bV9jb250cm9sKFhTTV9ETV9QUklWLCBkLCBvcCk7Ci0gICAgICAg IGlmICggcmMgKQotICAgICAgICAgICAgZ290byBzZXRtZW10eXBlX2ZhaWw7Ci0KLSAgICAgICAg cmMgPSAtRUlOVkFMOwotICAgICAgICBpZiAoIGEubnIgPCBzdGFydF9pdGVyIHx8Ci0gICAgICAg ICAgICAgKChhLmZpcnN0X3BmbiArIGEubnIgLSAxKSA8IGEuZmlyc3RfcGZuKSB8fAotICAgICAg ICAgICAgICgoYS5maXJzdF9wZm4gKyBhLm5yIC0gMSkgPiBkb21haW5fZ2V0X21heGltdW1fZ3Bm bihkKSkgKQotICAgICAgICAgICAgZ290byBzZXRtZW10eXBlX2ZhaWw7Ci0gICAgICAgICAgICAK LSAgICAgICAgaWYgKCBhLmh2bW1lbV90eXBlID49IEFSUkFZX1NJWkUobWVtdHlwZSkgfHwKLSAg ICAgICAgICAgICB1bmxpa2VseShhLmh2bW1lbV90eXBlID09IEhWTU1FTV91bnVzZWQpICkKLSAg ICAgICAgICAgIGdvdG8gc2V0bWVtdHlwZV9mYWlsOwotCi0gICAgICAgIHdoaWxlICggYS5uciA+ IHN0YXJ0X2l0ZXIgKQotICAgICAgICB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBsb25nIHBmbiA9 IGEuZmlyc3RfcGZuICsgc3RhcnRfaXRlcjsKLSAgICAgICAgICAgIHAybV90eXBlX3QgdDsKLQot ICAgICAgICAgICAgZ2V0X2dmbl91bnNoYXJlKGQsIHBmbiwgJnQpOwotICAgICAgICAgICAgaWYg KCBwMm1faXNfcGFnaW5nKHQpICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBwdXRf Z2ZuKGQsIHBmbik7Ci0gICAgICAgICAgICAgICAgcDJtX21lbV9wYWdpbmdfcG9wdWxhdGUoZCwg cGZuKTsKLSAgICAgICAgICAgICAgICByYyA9IC1FQUdBSU47Ci0gICAgICAgICAgICAgICAgZ290 byBzZXRtZW10eXBlX2ZhaWw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoIHAybV9p c19zaGFyZWQodCkgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHB1dF9nZm4oZCwg cGZuKTsKLSAgICAgICAgICAgICAgICByYyA9IC1FQUdBSU47Ci0gICAgICAgICAgICAgICAgZ290 byBzZXRtZW10eXBlX2ZhaWw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoICFwMm1f aXNfcmFtKHQpICYmCi0gICAgICAgICAgICAgICAgICghcDJtX2lzX2hvbGUodCkgfHwgYS5odm1t ZW1fdHlwZSAhPSBIVk1NRU1fbW1pb19kbSkgJiYKLSAgICAgICAgICAgICAgICAgKHQgIT0gcDJt X2lvcmVxX3NlcnZlciB8fCBhLmh2bW1lbV90eXBlICE9IEhWTU1FTV9yYW1fcncpICkKLSAgICAg ICAgICAgIHsKLSAgICAgICAgICAgICAgICBwdXRfZ2ZuKGQsIHBmbik7Ci0gICAgICAgICAgICAg ICAgZ290byBzZXRtZW10eXBlX2ZhaWw7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJj ID0gcDJtX2NoYW5nZV90eXBlX29uZShkLCBwZm4sIHQsIG1lbXR5cGVbYS5odm1tZW1fdHlwZV0p OwotICAgICAgICAgICAgcHV0X2dmbihkLCBwZm4pOwotICAgICAgICAgICAgaWYgKCByYyApCi0g ICAgICAgICAgICAgICAgZ290byBzZXRtZW10eXBlX2ZhaWw7Ci0KLSAgICAgICAgICAgIC8qIENo ZWNrIGZvciBjb250aW51YXRpb24gaWYgaXQncyBub3QgdGhlIGxhc3QgaW50ZXJhdGlvbiAqLwot ICAgICAgICAgICAgaWYgKCBhLm5yID4gKytzdGFydF9pdGVyICYmICEoc3RhcnRfaXRlciAmIEhW TU9QX29wX21hc2spICYmCi0gICAgICAgICAgICAgICAgIGh5cGVyY2FsbF9wcmVlbXB0X2NoZWNr KCkgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJjID0gLUVSRVNUQVJUOwotICAg ICAgICAgICAgICAgIGdvdG8gc2V0bWVtdHlwZV9mYWlsOwotICAgICAgICAgICAgfQotICAgICAg ICB9Ci0KLSAgICAgICAgcmMgPSAwOwotCi0gICAgc2V0bWVtdHlwZV9mYWlsOgotICAgICAgICBy Y3VfdW5sb2NrX2RvbWFpbihkKTsKKyAgICAgICAgcmMgPSBodm1vcF9zZXRfbWVtX3R5cGUoCisg ICAgICAgICAgICBndWVzdF9oYW5kbGVfY2FzdChhcmcsIHhlbl9odm1fc2V0X21lbV90eXBlX3Qp LAorICAgICAgICAgICAgJnN0YXJ0X2l0ZXIpOwogICAgICAgICBicmVhazsKLSAgICB9CiAKICAg ICBjYXNlIEhWTU9QX3BhZ2V0YWJsZV9keWluZzoKICAgICB7Ci0tIAoxLjkuMQoKCl9fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5n IGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbi5vcmcKaHR0cDovL2xpc3RzLnhlbi5vcmcveGVuLWRl dmVsCg==