From mboxrd@z Thu Jan 1 00:00:00 1970 From: Yu Zhang Subject: [PATCH v3 2/3] x86/ioreq server: Add new functions to get/set memory types. Date: Mon, 25 Apr 2016 18:35:39 +0800 Message-ID: <1461580540-9314-3-git-send-email-yu.c.zhang@linux.intel.com> References: <1461580540-9314-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: <1461580540-9314-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: Keir Fraser , Andrew Cooper , Paul Durrant , zhiyuan.lv@intel.com, Jan Beulich , wei.liu2@citrix.com List-Id: xen-devel@lists.xenproject.org Rm9yIGNsYXJpdHkgdGhpcyBwYXRjaCBicmVha3MgdGhlIGNvZGUgdG8gc2V0L2dldCBtZW1vcnkg dHlwZXMgb3V0Cm9mIGRvX2h2bV9vcCgpIGludG8gZGVkaWNhdGVkIGZ1bmN0aW9uczogaHZtb3Bf c2V0L2dldF9tZW1fdHlwZSgpLgpBbHNvLCBmb3IgY2xhcml0eSwgY2hlY2tzIGZvciB3aGV0aGVy IGEgbWVtb3J5IHR5cGUgY2hhbmdlIGlzIGFsbG93ZWQKYXJlIGJyb2tlbiBvdXQgaW50byBhIHNl cGFyYXRlIGZ1bmN0aW9uIGNhbGxlZCBieSBodm1vcF9zZXRfbWVtX3R5cGUoKS4KClRoZXJlIGlz IG5vIGludGVudGlvbmFsIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoaXMgcGF0Y2guCgpjaGFuZ2Vz IGluIHYzOgogIC0gQWRkIEFuZHJldydzIEFja2VkLWJ5IGFuZCBHZW9yZ2UncyBSZXZpZXdlZC1i eS4KCmNoYW5nZXMgaW4gdjI6CiAgLSBBY2NvcmRpbmcgdG8gR2VvcmdlIER1bmxhcCdzIGNvbW1l bnRzLCBmb2xsb3cgdGhlICJzZXQgcmMgLwogICAgZG8gc29tZXRoaW5nIC8gZ290byBvdXQiIHBh dHRlcm4gaW4gaHZtb3BfZ2V0X21lbV90eXBlKCkuCgpTaWduZWQtb2ZmLWJ5OiBQYXVsIER1cnJh bnQgPHBhdWwuZHVycmFudEBjaXRyaXguY29tPgpTaWduZWQtb2ZmLWJ5OiBZdSBaaGFuZyA8eXUu Yy56aGFuZ0BsaW51eC5pbnRlbC5jb20+ClJldmlld2VkLWJ5OiBHZW9yZ2UgRHVubGFwIDxnZW9y Z2UuZHVubGFwQGNpdHJpeC5jb20+CkFja2VkLWJ5OiBBbmRyZXcgQ29vcGVyIDxhbmRyZXcuY29v cGVyM0BjaXRyaXguY29tPgpDYzogS2VpciBGcmFzZXIgPGtlaXJAeGVuLm9yZz4KQ2M6IEphbiBC ZXVsaWNoIDxqYmV1bGljaEBzdXNlLmNvbT4KQ2M6IEFuZHJldyBDb29wZXIgPGFuZHJldy5jb29w ZXIzQGNpdHJpeC5jb20+Ci0tLQogeGVuL2FyY2gveDg2L2h2bS9odm0uYyB8IDI4OCArKysrKysr KysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAxIGZpbGUgY2hhbmdl ZCwgMTYxIGluc2VydGlvbnMoKyksIDEyNyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS94ZW4v YXJjaC94ODYvaHZtL2h2bS5jIGIveGVuL2FyY2gveDg2L2h2bS9odm0uYwppbmRleCA4NzRjYjBm Li42MDc1NDZjIDEwMDY0NAotLS0gYS94ZW4vYXJjaC94ODYvaHZtL2h2bS5jCisrKyBiL3hlbi9h cmNoL3g4Ni9odm0vaHZtLmMKQEAgLTUyNzksNiArNTI3OSw2MSBAQCBzdGF0aWMgaW50IGRvX2Fs dHAybV9vcCgKICAgICByZXR1cm4gcmM7CiB9CiAKK3N0YXRpYyBpbnQgaHZtb3BfZ2V0X21lbV90 eXBlKAorICAgIFhFTl9HVUVTVF9IQU5ETEVfUEFSQU0oeGVuX2h2bV9nZXRfbWVtX3R5cGVfdCkg YXJnKQoreworICAgIHN0cnVjdCB4ZW5faHZtX2dldF9tZW1fdHlwZSBhOworICAgIHN0cnVjdCBk b21haW4gKmQ7CisgICAgcDJtX3R5cGVfdCB0OworICAgIGludCByYzsKKworICAgIGlmICggY29w eV9mcm9tX2d1ZXN0KCZhLCBhcmcsIDEpICkKKyAgICAgICAgcmV0dXJuIC1FRkFVTFQ7CisKKyAg ICBkID0gcmN1X2xvY2tfZG9tYWluX2J5X2FueV9pZChhLmRvbWlkKTsKKyAgICBpZiAoIGQgPT0g TlVMTCApCisgICAgICAgIHJldHVybiAtRVNSQ0g7CisKKyAgICByYyA9IHhzbV9odm1fcGFyYW0o WFNNX1RBUkdFVCwgZCwgSFZNT1BfZ2V0X21lbV90eXBlKTsKKyAgICBpZiAoIHJjICkKKyAgICAg ICAgZ290byBvdXQ7CisKKyAgICByYyA9IC1FSU5WQUw7CisgICAgaWYgKCAhaXNfaHZtX2RvbWFp bihkKSApCisgICAgICAgIGdvdG8gb3V0OworCisgICAgLyoKKyAgICAgKiBVc2UgZ2V0X2dmbiBx dWVyeSBhcyB3ZSBhcmUgaW50ZXJlc3RlZCBpbiB0aGUgY3VycmVudAorICAgICAqIHR5cGUsIG5v dCBpbiBhbGxvY2F0aW5nIG9yIHVuc2hhcmluZy4gVGhhdCdsbCBoYXBwZW4KKyAgICAgKiBvbiBh Y2Nlc3MuCisgICAgICovCisgICAgZ2V0X2dmbl9xdWVyeV91bmxvY2tlZChkLCBhLnBmbiwgJnQp OworICAgIGlmICggcDJtX2lzX21taW8odCkgKQorICAgICAgICBhLm1lbV90eXBlID0gIEhWTU1F TV9tbWlvX2RtOworICAgIGVsc2UgaWYgKCB0ID09IHAybV9pb3JlcV9zZXJ2ZXIgKQorICAgICAg ICBhLm1lbV90eXBlID0gSFZNTUVNX2lvcmVxX3NlcnZlcjsKKyAgICBlbHNlIGlmICggcDJtX2lz X3JlYWRvbmx5KHQpICkKKyAgICAgICAgYS5tZW1fdHlwZSA9ICBIVk1NRU1fcmFtX3JvOworICAg IGVsc2UgaWYgKCBwMm1faXNfcmFtKHQpICkKKyAgICAgICAgYS5tZW1fdHlwZSA9ICBIVk1NRU1f cmFtX3J3OworICAgIGVsc2UgaWYgKCBwMm1faXNfcG9kKHQpICkKKyAgICAgICAgYS5tZW1fdHlw ZSA9ICBIVk1NRU1fcmFtX3J3OworICAgIGVsc2UgaWYgKCBwMm1faXNfZ3JhbnQodCkgKQorICAg ICAgICBhLm1lbV90eXBlID0gIEhWTU1FTV9yYW1fcnc7CisgICAgZWxzZQorICAgICAgICBhLm1l bV90eXBlID0gIEhWTU1FTV9tbWlvX2RtOworCisgICAgcmMgPSAtRUZBVUxUOworICAgIGlmICgg X19jb3B5X3RvX2d1ZXN0KGFyZywgJmEsIDEpICkKKyAgICAgICAgZ290byBvdXQ7CisgICAgcmMg PSAwOworCisgb3V0OgorICAgIHJjdV91bmxvY2tfZG9tYWluKGQpOworCisgICAgcmV0dXJuIHJj OworfQorCiAvKgogICogTm90ZSB0aGF0IHRoaXMgdmFsdWUgaXMgZWZmZWN0aXZlbHkgcGFydCBv ZiB0aGUgQUJJLCBldmVuIGlmIHdlIGRvbid0IG5lZWQKICAqIHRvIG1ha2UgaXQgYSBmb3JtYWwg cGFydCBvZiBpdDogQSBndWVzdCBzdXNwZW5kZWQgZm9yIG1pZ3JhdGlvbiBpbiB0aGUKQEAgLTUy ODcsNiArNTM0MiwxMDcgQEAgc3RhdGljIGludCBkb19hbHRwMm1fb3AoCiAgKi8KICNkZWZpbmUg SFZNT1Bfb3BfbWFzayAweGZmCiAKK3N0YXRpYyBib29sX3QgaHZtX2FsbG93X3AybV90eXBlX2No YW5nZShwMm1fdHlwZV90IG9sZCwgcDJtX3R5cGVfdCBuZXcpCit7CisgICAgaWYgKCBwMm1faXNf cmFtKG9sZCkgfHwKKyAgICAgICAgIChwMm1faXNfaG9sZShvbGQpICYmIG5ldyA9PSBwMm1fbW1p b19kbSkgfHwKKyAgICAgICAgIChvbGQgPT0gcDJtX2lvcmVxX3NlcnZlciAmJiBuZXcgPT0gcDJt X3JhbV9ydykgKQorICAgICAgICByZXR1cm4gMTsKKworICAgIHJldHVybiAwOworfQorCitzdGF0 aWMgaW50IGh2bW9wX3NldF9tZW1fdHlwZSgKKyAgICBYRU5fR1VFU1RfSEFORExFX1BBUkFNKHhl bl9odm1fc2V0X21lbV90eXBlX3QpIGFyZywKKyAgICB1bnNpZ25lZCBsb25nICppdGVyKQorewor ICAgIHVuc2lnbmVkIGxvbmcgc3RhcnRfaXRlciA9ICppdGVyOworICAgIHN0cnVjdCB4ZW5faHZt X3NldF9tZW1fdHlwZSBhOworICAgIHN0cnVjdCBkb21haW4gKmQ7CisgICAgaW50IHJjOworCisg ICAgLyogSW50ZXJmYWNlIHR5cGVzIHRvIGludGVybmFsIHAybSB0eXBlcyAqLworICAgIHN0YXRp YyBjb25zdCBwMm1fdHlwZV90IG1lbXR5cGVbXSA9IHsKKyAgICAgICAgW0hWTU1FTV9yYW1fcndd ICA9IHAybV9yYW1fcncsCisgICAgICAgIFtIVk1NRU1fcmFtX3JvXSAgPSBwMm1fcmFtX3JvLAor ICAgICAgICBbSFZNTUVNX21taW9fZG1dID0gcDJtX21taW9fZG0sCisgICAgICAgIFtIVk1NRU1f dW51c2VkXSA9IHAybV9pbnZhbGlkLAorICAgICAgICBbSFZNTUVNX2lvcmVxX3NlcnZlcl0gPSBw Mm1faW9yZXFfc2VydmVyCisgICAgfTsKKworICAgIGlmICggY29weV9mcm9tX2d1ZXN0KCZhLCBh cmcsIDEpICkKKyAgICAgICAgcmV0dXJuIC1FRkFVTFQ7CisKKyAgICByYyA9IHJjdV9sb2NrX3Jl bW90ZV9kb21haW5fYnlfaWQoYS5kb21pZCwgJmQpOworICAgIGlmICggcmMgIT0gMCApCisgICAg ICAgIHJldHVybiByYzsKKworICAgIHJjID0gLUVJTlZBTDsKKyAgICBpZiAoICFpc19odm1fZG9t YWluKGQpICkKKyAgICAgICAgZ290byBvdXQ7CisKKyAgICByYyA9IHhzbV9odm1fY29udHJvbChY U01fRE1fUFJJViwgZCwgSFZNT1Bfc2V0X21lbV90eXBlKTsKKyAgICBpZiAoIHJjICkKKyAgICAg ICAgZ290byBvdXQ7CisKKyAgICByYyA9IC1FSU5WQUw7CisgICAgaWYgKCBhLm5yIDwgc3RhcnRf aXRlciB8fAorICAgICAgICAgKChhLmZpcnN0X3BmbiArIGEubnIgLSAxKSA8IGEuZmlyc3RfcGZu KSB8fAorICAgICAgICAgKChhLmZpcnN0X3BmbiArIGEubnIgLSAxKSA+IGRvbWFpbl9nZXRfbWF4 aW11bV9ncGZuKGQpKSApCisgICAgICAgIGdvdG8gb3V0OworCisgICAgaWYgKCBhLmh2bW1lbV90 eXBlID49IEFSUkFZX1NJWkUobWVtdHlwZSkgfHwKKyAgICAgICAgIHVubGlrZWx5KGEuaHZtbWVt X3R5cGUgPT0gSFZNTUVNX3VudXNlZCkgKQorICAgICAgICBnb3RvIG91dDsKKworICAgIHdoaWxl ICggYS5uciA+IHN0YXJ0X2l0ZXIgKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBwZm4g PSBhLmZpcnN0X3BmbiArIHN0YXJ0X2l0ZXI7CisgICAgICAgIHAybV90eXBlX3QgdDsKKworICAg ICAgICBnZXRfZ2ZuX3Vuc2hhcmUoZCwgcGZuLCAmdCk7CisgICAgICAgIGlmICggcDJtX2lzX3Bh Z2luZyh0KSApCisgICAgICAgIHsKKyAgICAgICAgICAgIHB1dF9nZm4oZCwgcGZuKTsKKyAgICAg ICAgICAgIHAybV9tZW1fcGFnaW5nX3BvcHVsYXRlKGQsIHBmbik7CisgICAgICAgICAgICByYyA9 IC1FQUdBSU47CisgICAgICAgICAgICBnb3RvIG91dDsKKyAgICAgICAgfQorICAgICAgICBpZiAo IHAybV9pc19zaGFyZWQodCkgKQorICAgICAgICB7CisgICAgICAgICAgICBwdXRfZ2ZuKGQsIHBm bik7CisgICAgICAgICAgICByYyA9IC1FQUdBSU47CisgICAgICAgICAgICBnb3RvIG91dDsKKyAg ICAgICAgfQorICAgICAgICBpZiAoICFodm1fYWxsb3dfcDJtX3R5cGVfY2hhbmdlKHQsIG1lbXR5 cGVbYS5odm1tZW1fdHlwZV0pICkKKyAgICAgICAgeworICAgICAgICAgICAgcHV0X2dmbihkLCBw Zm4pOworICAgICAgICAgICAgZ290byBvdXQ7CisgICAgICAgIH0KKworICAgICAgICByYyA9IHAy bV9jaGFuZ2VfdHlwZV9vbmUoZCwgcGZuLCB0LCBtZW10eXBlW2EuaHZtbWVtX3R5cGVdKTsKKyAg ICAgICAgcHV0X2dmbihkLCBwZm4pOworCisgICAgICAgIGlmICggcmMgKQorICAgICAgICAgICAg Z290byBvdXQ7CisKKyAgICAgICAgLyogQ2hlY2sgZm9yIGNvbnRpbnVhdGlvbiBpZiBpdCdzIG5v dCB0aGUgbGFzdCBpbnRlcmF0aW9uICovCisgICAgICAgIGlmICggYS5uciA+ICsrc3RhcnRfaXRl ciAmJiAhKHN0YXJ0X2l0ZXIgJiBIVk1PUF9vcF9tYXNrKSAmJgorICAgICAgICAgICAgIGh5cGVy Y2FsbF9wcmVlbXB0X2NoZWNrKCkgKQorICAgICAgICB7CisgICAgICAgICAgICByYyA9IC1FUkVT VEFSVDsKKyAgICAgICAgICAgIGdvdG8gb3V0OworICAgICAgICB9CisgICAgfQorICAgIHJjID0g MDsKKworIG91dDoKKyAgICByY3VfdW5sb2NrX2RvbWFpbihkKTsKKyAgICAqaXRlciA9IHN0YXJ0 X2l0ZXI7CisKKyAgICByZXR1cm4gcmM7Cit9CisKIGxvbmcgZG9faHZtX29wKHVuc2lnbmVkIGxv bmcgb3AsIFhFTl9HVUVTVF9IQU5ETEVfUEFSQU0odm9pZCkgYXJnKQogewogICAgIHVuc2lnbmVk IGxvbmcgc3RhcnRfaXRlciwgbWFzazsKQEAgLTU0NzYsMTM3ICs1NjMyLDE1IEBAIGxvbmcgZG9f aHZtX29wKHVuc2lnbmVkIGxvbmcgb3AsIFhFTl9HVUVTVF9IQU5ETEVfUEFSQU0odm9pZCkgYXJn KQogICAgIH0KIAogICAgIGNhc2UgSFZNT1BfZ2V0X21lbV90eXBlOgotICAgIHsKLSAgICAgICAg c3RydWN0IHhlbl9odm1fZ2V0X21lbV90eXBlIGE7Ci0gICAgICAgIHN0cnVjdCBkb21haW4gKmQ7 Ci0gICAgICAgIHAybV90eXBlX3QgdDsKLQotICAgICAgICBpZiAoIGNvcHlfZnJvbV9ndWVzdCgm YSwgYXJnLCAxKSApCi0gICAgICAgICAgICByZXR1cm4gLUVGQVVMVDsKLQotICAgICAgICBkID0g cmN1X2xvY2tfZG9tYWluX2J5X2FueV9pZChhLmRvbWlkKTsKLSAgICAgICAgaWYgKCBkID09IE5V TEwgKQotICAgICAgICAgICAgcmV0dXJuIC1FU1JDSDsKLQotICAgICAgICByYyA9IHhzbV9odm1f cGFyYW0oWFNNX1RBUkdFVCwgZCwgb3ApOwotICAgICAgICBpZiAoIHVubGlrZWx5KHJjKSApCi0g ICAgICAgICAgICAvKiBub3RoaW5nICovOwotICAgICAgICBlbHNlIGlmICggbGlrZWx5KGlzX2h2 bV9kb21haW4oZCkpICkKLSAgICAgICAgewotICAgICAgICAgICAgLyogVXNlIGdldF9nZm4gcXVl cnkgYXMgd2UgYXJlIGludGVyZXN0ZWQgaW4gdGhlIGN1cnJlbnQgCi0gICAgICAgICAgICAgKiB0 eXBlLCBub3QgaW4gYWxsb2NhdGluZyBvciB1bnNoYXJpbmcuIFRoYXQnbGwgaGFwcGVuIAotICAg ICAgICAgICAgICogb24gYWNjZXNzLiAqLwotICAgICAgICAgICAgZ2V0X2dmbl9xdWVyeV91bmxv Y2tlZChkLCBhLnBmbiwgJnQpOwotICAgICAgICAgICAgaWYgKCBwMm1faXNfbW1pbyh0KSApCi0g ICAgICAgICAgICAgICAgYS5tZW1fdHlwZSA9ICBIVk1NRU1fbW1pb19kbTsKLSAgICAgICAgICAg IGVsc2UgaWYgKCB0ID09IHAybV9pb3JlcV9zZXJ2ZXIgKQotICAgICAgICAgICAgICAgIGEubWVt X3R5cGUgPSBIVk1NRU1faW9yZXFfc2VydmVyOwotICAgICAgICAgICAgZWxzZSBpZiAoIHAybV9p c19yZWFkb25seSh0KSApCi0gICAgICAgICAgICAgICAgYS5tZW1fdHlwZSA9ICBIVk1NRU1fcmFt X3JvOwotICAgICAgICAgICAgZWxzZSBpZiAoIHAybV9pc19yYW0odCkgKQotICAgICAgICAgICAg ICAgIGEubWVtX3R5cGUgPSAgSFZNTUVNX3JhbV9ydzsKLSAgICAgICAgICAgIGVsc2UgaWYgKCBw Mm1faXNfcG9kKHQpICkKLSAgICAgICAgICAgICAgICBhLm1lbV90eXBlID0gIEhWTU1FTV9yYW1f cnc7Ci0gICAgICAgICAgICBlbHNlIGlmICggcDJtX2lzX2dyYW50KHQpICkKLSAgICAgICAgICAg ICAgICBhLm1lbV90eXBlID0gIEhWTU1FTV9yYW1fcnc7Ci0gICAgICAgICAgICBlbHNlCi0gICAg ICAgICAgICAgICAgYS5tZW1fdHlwZSA9ICBIVk1NRU1fbW1pb19kbTsKLSAgICAgICAgICAgIGlm ICggX19jb3B5X3RvX2d1ZXN0KGFyZywgJmEsIDEpICkKLSAgICAgICAgICAgICAgICByYyA9IC1F RkFVTFQ7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmMgPSAtRUlOVkFM OwotCi0gICAgICAgIHJjdV91bmxvY2tfZG9tYWluKGQpOworICAgICAgICByYyA9IGh2bW9wX2dl dF9tZW1fdHlwZSgKKyAgICAgICAgICAgIGd1ZXN0X2hhbmRsZV9jYXN0KGFyZywgeGVuX2h2bV9n ZXRfbWVtX3R5cGVfdCkpOwogICAgICAgICBicmVhazsKLSAgICB9CiAKICAgICBjYXNlIEhWTU9Q X3NldF9tZW1fdHlwZToKLSAgICB7Ci0gICAgICAgIHN0cnVjdCB4ZW5faHZtX3NldF9tZW1fdHlw ZSBhOwotICAgICAgICBzdHJ1Y3QgZG9tYWluICpkOwotICAgICAgICAKLSAgICAgICAgLyogSW50 ZXJmYWNlIHR5cGVzIHRvIGludGVybmFsIHAybSB0eXBlcyAqLwotICAgICAgICBzdGF0aWMgY29u c3QgcDJtX3R5cGVfdCBtZW10eXBlW10gPSB7Ci0gICAgICAgICAgICBbSFZNTUVNX3JhbV9yd10g ID0gcDJtX3JhbV9ydywKLSAgICAgICAgICAgIFtIVk1NRU1fcmFtX3JvXSAgPSBwMm1fcmFtX3Jv LAotICAgICAgICAgICAgW0hWTU1FTV9tbWlvX2RtXSA9IHAybV9tbWlvX2RtLAotICAgICAgICAg ICAgW0hWTU1FTV91bnVzZWRdID0gcDJtX2ludmFsaWQsCi0gICAgICAgICAgICBbSFZNTUVNX2lv cmVxX3NlcnZlcl0gPSBwMm1faW9yZXFfc2VydmVyCi0gICAgICAgIH07Ci0KLSAgICAgICAgaWYg KCBjb3B5X2Zyb21fZ3Vlc3QoJmEsIGFyZywgMSkgKQotICAgICAgICAgICAgcmV0dXJuIC1FRkFV TFQ7Ci0KLSAgICAgICAgcmMgPSByY3VfbG9ja19yZW1vdGVfZG9tYWluX2J5X2lkKGEuZG9taWQs ICZkKTsKLSAgICAgICAgaWYgKCByYyAhPSAwICkKLSAgICAgICAgICAgIHJldHVybiByYzsKLQot ICAgICAgICByYyA9IC1FSU5WQUw7Ci0gICAgICAgIGlmICggIWlzX2h2bV9kb21haW4oZCkgKQot ICAgICAgICAgICAgZ290byBzZXRtZW10eXBlX2ZhaWw7Ci0KLSAgICAgICAgcmMgPSB4c21faHZt X2NvbnRyb2woWFNNX0RNX1BSSVYsIGQsIG9wKTsKLSAgICAgICAgaWYgKCByYyApCi0gICAgICAg ICAgICBnb3RvIHNldG1lbXR5cGVfZmFpbDsKLQotICAgICAgICByYyA9IC1FSU5WQUw7Ci0gICAg ICAgIGlmICggYS5uciA8IHN0YXJ0X2l0ZXIgfHwKLSAgICAgICAgICAgICAoKGEuZmlyc3RfcGZu ICsgYS5uciAtIDEpIDwgYS5maXJzdF9wZm4pIHx8Ci0gICAgICAgICAgICAgKChhLmZpcnN0X3Bm biArIGEubnIgLSAxKSA+IGRvbWFpbl9nZXRfbWF4aW11bV9ncGZuKGQpKSApCi0gICAgICAgICAg ICBnb3RvIHNldG1lbXR5cGVfZmFpbDsKLSAgICAgICAgICAgIAotICAgICAgICBpZiAoIGEuaHZt bWVtX3R5cGUgPj0gQVJSQVlfU0laRShtZW10eXBlKSB8fAotICAgICAgICAgICAgIHVubGlrZWx5 KGEuaHZtbWVtX3R5cGUgPT0gSFZNTUVNX3VudXNlZCkgKQotICAgICAgICAgICAgZ290byBzZXRt ZW10eXBlX2ZhaWw7Ci0KLSAgICAgICAgd2hpbGUgKCBhLm5yID4gc3RhcnRfaXRlciApCi0gICAg ICAgIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgcGZuID0gYS5maXJzdF9wZm4gKyBzdGFy dF9pdGVyOwotICAgICAgICAgICAgcDJtX3R5cGVfdCB0OwotCi0gICAgICAgICAgICBnZXRfZ2Zu X3Vuc2hhcmUoZCwgcGZuLCAmdCk7Ci0gICAgICAgICAgICBpZiAoIHAybV9pc19wYWdpbmcodCkg KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHB1dF9nZm4oZCwgcGZuKTsKLSAgICAg ICAgICAgICAgICBwMm1fbWVtX3BhZ2luZ19wb3B1bGF0ZShkLCBwZm4pOwotICAgICAgICAgICAg ICAgIHJjID0gLUVBR0FJTjsKLSAgICAgICAgICAgICAgICBnb3RvIHNldG1lbXR5cGVfZmFpbDsK LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICggcDJtX2lzX3NoYXJlZCh0KSApCi0gICAg ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcHV0X2dmbihkLCBwZm4pOwotICAgICAgICAgICAg ICAgIHJjID0gLUVBR0FJTjsKLSAgICAgICAgICAgICAgICBnb3RvIHNldG1lbXR5cGVfZmFpbDsK LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICggIXAybV9pc19yYW0odCkgJiYKLSAgICAg ICAgICAgICAgICAgKCFwMm1faXNfaG9sZSh0KSB8fCBhLmh2bW1lbV90eXBlICE9IEhWTU1FTV9t bWlvX2RtKSAmJgotICAgICAgICAgICAgICAgICAodCAhPSBwMm1faW9yZXFfc2VydmVyIHx8IGEu aHZtbWVtX3R5cGUgIT0gSFZNTUVNX3JhbV9ydykgKQotICAgICAgICAgICAgewotICAgICAgICAg ICAgICAgIHB1dF9nZm4oZCwgcGZuKTsKLSAgICAgICAgICAgICAgICBnb3RvIHNldG1lbXR5cGVf ZmFpbDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmMgPSBwMm1fY2hhbmdlX3R5cGVf b25lKGQsIHBmbiwgdCwgbWVtdHlwZVthLmh2bW1lbV90eXBlXSk7Ci0gICAgICAgICAgICBwdXRf Z2ZuKGQsIHBmbik7Ci0gICAgICAgICAgICBpZiAoIHJjICkKLSAgICAgICAgICAgICAgICBnb3Rv IHNldG1lbXR5cGVfZmFpbDsKLQotICAgICAgICAgICAgLyogQ2hlY2sgZm9yIGNvbnRpbnVhdGlv biBpZiBpdCdzIG5vdCB0aGUgbGFzdCBpbnRlcmF0aW9uICovCi0gICAgICAgICAgICBpZiAoIGEu bnIgPiArK3N0YXJ0X2l0ZXIgJiYgIShzdGFydF9pdGVyICYgSFZNT1Bfb3BfbWFzaykgJiYKLSAg ICAgICAgICAgICAgICAgaHlwZXJjYWxsX3ByZWVtcHRfY2hlY2soKSApCi0gICAgICAgICAgICB7 Ci0gICAgICAgICAgICAgICAgcmMgPSAtRVJFU1RBUlQ7Ci0gICAgICAgICAgICAgICAgZ290byBz ZXRtZW10eXBlX2ZhaWw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICByYyA9 IDA7Ci0KLSAgICBzZXRtZW10eXBlX2ZhaWw6Ci0gICAgICAgIHJjdV91bmxvY2tfZG9tYWluKGQp OworICAgICAgICByYyA9IGh2bW9wX3NldF9tZW1fdHlwZSgKKyAgICAgICAgICAgIGd1ZXN0X2hh bmRsZV9jYXN0KGFyZywgeGVuX2h2bV9zZXRfbWVtX3R5cGVfdCksCisgICAgICAgICAgICAmc3Rh cnRfaXRlcik7CiAgICAgICAgIGJyZWFrOwotICAgIH0KIAogICAgIGNhc2UgSFZNT1BfcGFnZXRh YmxlX2R5aW5nOgogICAgIHsKLS0gCjEuOS4xCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlz dHMueGVuLm9yZwpodHRwOi8vbGlzdHMueGVuLm9yZy94ZW4tZGV2ZWwK