From mboxrd@z Thu Jan 1 00:00:00 1970 From: Olaf Hering Subject: [PATCH v8 3/3] tools/libxc: use superpages during restore of HVM guest Date: Fri, 1 Sep 2017 10:21:49 +0200 Message-ID: <20170901082149.6355-4-olaf@aepfle.de> References: <20170901082149.6355-1-olaf@aepfle.de> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20170901082149.6355-1-olaf@aepfle.de> 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, Andrew Cooper , Ian Jackson , Wei Liu Cc: Olaf Hering List-Id: xen-devel@lists.xenproject.org RHVyaW5nIGNyZWF0aW5nIG9mIGEgSFZNIGRvbVUgbWVtaW5pdF9odm0oKSB0cmllcyB0byBtYXAg c3VwZXJwYWdlcy4KQWZ0ZXIgc2F2ZS9yZXN0b3JlIG9yIG1pZ3JhdGlvbiB0aGlzIG1hcHBpbmcg aXMgbG9zdCwgZXZlcnl0aGluZyBpcwphbGxvY2F0ZWQgaW4gc2luZ2xlIHBhZ2VzLiBUaGlzIGNh dXNlcyBhIHBlcmZvcm1hbmNlIGRlZ3JhZGl0aW9uIGFmdGVyCm1pZ3JhdGlvbi4KCkFkZCBuZWNj ZXNzYXJ5IGNvZGUgdG8gcHJlYWxsb2NhdGUgYSBzdXBlcnBhZ2UgZm9yIHRoZSBjaHVuayBvZiBw Zm5zCnRoYXQgaXMgcmVjZWl2ZWQuIEluIGNhc2UgYSBwZm4gd2FzIG5vdCBwb3B1bGF0ZWQgb24g dGhlIHNlbmRpbmcgc2lkZSBpdAptdXN0IGJlIGZyZWVkIG9uIHRoZSByZWNlaXZpbmcgc2lkZSB0 byBhdm9pZCBvdmVyLWFsbG9jYXRpb24uCgpUaGUgZXhpc3RpbmcgY29kZSBmb3IgeDg2X3B2IGlz IG1vdmVkIHVubW9kaWZpZWQgaW50byBpdHMgb3duIGZpbGUuCgpTaWduZWQtb2ZmLWJ5OiBPbGFm IEhlcmluZyA8b2xhZkBhZXBmbGUuZGU+Ci0tLQogdG9vbHMvbGlieGMveGNfc3JfY29tbW9uLmgg ICAgICAgICAgfCAgMjUgKystCiB0b29scy9saWJ4Yy94Y19zcl9yZXN0b3JlLmMgICAgICAgICB8 ICA3NSArLS0tLS0tLQogdG9vbHMvbGlieGMveGNfc3JfcmVzdG9yZV94ODZfaHZtLmMgfCAzMzcg KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiB0b29scy9saWJ4Yy94Y19zcl9y ZXN0b3JlX3g4Nl9wdi5jICB8ICA3MiArKysrKysrLQogNCBmaWxlcyBjaGFuZ2VkLCA0MzEgaW5z ZXJ0aW9ucygrKSwgNzggZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvdG9vbHMvbGlieGMveGNf c3JfY29tbW9uLmggYi90b29scy9saWJ4Yy94Y19zcl9jb21tb24uaAppbmRleCBkYTI2OTFiYTc5 Li4wZmEwZmJlYTRkIDEwMDY0NAotLS0gYS90b29scy9saWJ4Yy94Y19zcl9jb21tb24uaAorKysg Yi90b29scy9saWJ4Yy94Y19zcl9jb21tb24uaApAQCAtMTM5LDYgKzEzOSwxNiBAQCBzdHJ1Y3Qg eGNfc3JfcmVzdG9yZV9vcHMKICAgICAgKi8KICAgICBpbnQgKCpzZXR1cCkoc3RydWN0IHhjX3Ny X2NvbnRleHQgKmN0eCk7CiAKKyAgICAvKioKKyAgICAgKiBQb3B1bGF0ZSBQRk5zCisgICAgICoK KyAgICAgKiBHaXZlbiBhIHNldCBvZiBwZm5zLCBvYnRhaW4gbWVtb3J5IGZyb20gWGVuIHRvIGZp bGwgdGhlIHBoeXNtYXAgZm9yIHRoZQorICAgICAqIHVucG9wdWxhdGVkIHN1YnNldC4KKyAgICAg Ki8KKyAgICBpbnQgKCpwb3B1bGF0ZV9wZm5zKShzdHJ1Y3QgeGNfc3JfY29udGV4dCAqY3R4LCB1 bnNpZ25lZCBjb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB4ZW5fcGZuX3Qg Km9yaWdpbmFsX3BmbnMsIGNvbnN0IHVpbnQzMl90ICp0eXBlcyk7CisKKwogICAgIC8qKgogICAg ICAqIFByb2Nlc3MgYW4gaW5kaXZpZHVhbCByZWNvcmQgZnJvbSB0aGUgc3RyZWFtLiAgVGhlIGNh bGxlciBzaGFsbCB0YWtlCiAgICAgICogY2FyZSBvZiBwcm9jZXNzaW5nIGNvbW1vbiByZWNvcmRz IChlLmcuIEVORCwgUEFHRV9EQVRBKS4KQEAgLTIyNCw2ICsyMzQsOCBAQCBzdHJ1Y3QgeGNfc3Jf Y29udGV4dAogCiAgICAgICAgICAgICBpbnQgc2VuZF9iYWNrX2ZkOwogICAgICAgICAgICAgdW5z aWduZWQgbG9uZyBwMm1fc2l6ZTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbWF4X3BhZ2Vz OworICAgICAgICAgICAgdW5zaWduZWQgbG9uZyB0b3RfcGFnZXM7CiAgICAgICAgICAgICB4Y19o eXBlcmNhbGxfYnVmZmVyX3QgZGlydHlfYml0bWFwX2hidWY7CiAKICAgICAgICAgICAgIC8qIEZy b20gSW1hZ2UgSGVhZGVyLiAqLwpAQCAtMzM2LDYgKzM0OCwxMSBAQCBzdHJ1Y3QgeGNfc3JfY29u dGV4dAogICAgICAgICAgICAgICAgICAgICAvKiBIVk0gY29udGV4dCBibG9iLiAqLwogICAgICAg ICAgICAgICAgICAgICB2b2lkICpjb250ZXh0OwogICAgICAgICAgICAgICAgICAgICBzaXplX3Qg Y29udGV4dHN6OworCisgICAgICAgICAgICAgICAgICAgIC8qIEJpdG1hcCBvZiBjdXJyZW50bHkg YWxsb2NhdGVkIFBGTnMgZHVyaW5nIHJlc3RvcmUuICovCisgICAgICAgICAgICAgICAgICAgIHN0 cnVjdCB4Y19zcl9iaXRtYXAgYXR0ZW1wdGVkXzFnOworICAgICAgICAgICAgICAgICAgICBzdHJ1 Y3QgeGNfc3JfYml0bWFwIGF0dGVtcHRlZF8ybTsKKyAgICAgICAgICAgICAgICAgICAgc3RydWN0 IHhjX3NyX2JpdG1hcCBhbGxvY2F0ZWRfcGZuczsKICAgICAgICAgICAgICAgICB9IHJlc3RvcmU7 CiAgICAgICAgICAgICB9OwogICAgICAgICB9IHg4Nl9odm07CkBAIC00NTUsMTQgKzQ3Miw2IEBA IHN0YXRpYyBpbmxpbmUgaW50IHdyaXRlX3JlY29yZChzdHJ1Y3QgeGNfc3JfY29udGV4dCAqY3R4 LAogICovCiBpbnQgcmVhZF9yZWNvcmQoc3RydWN0IHhjX3NyX2NvbnRleHQgKmN0eCwgaW50IGZk LCBzdHJ1Y3QgeGNfc3JfcmVjb3JkICpyZWMpOwogCi0vKgotICogVGhpcyB3b3VsZCBpZGVhbGx5 IGJlIHByaXZhdGUgaW4gcmVzdG9yZS5jLCBidXQgaXMgbmVlZGVkIGJ5Ci0gKiB4ODZfcHZfbG9j YWxpc2VfcGFnZSgpIGlmIHdlIHJlY2VpdmUgcGFnZXRhYmxlcyBmcmFtZXMgYWhlYWQgb2YgdGhl Ci0gKiBjb250ZW50cyBvZiB0aGUgZnJhbWVzIHRoZXkgcG9pbnQgYXQuCi0gKi8KLWludCBwb3B1 bGF0ZV9wZm5zKHN0cnVjdCB4Y19zcl9jb250ZXh0ICpjdHgsIHVuc2lnbmVkIGNvdW50LAotICAg ICAgICAgICAgICAgICAgY29uc3QgeGVuX3Bmbl90ICpvcmlnaW5hbF9wZm5zLCBjb25zdCB1aW50 MzJfdCAqdHlwZXMpOwotCiAjZW5kaWYKIC8qCiAgKiBMb2NhbCB2YXJpYWJsZXM6CmRpZmYgLS1n aXQgYS90b29scy9saWJ4Yy94Y19zcl9yZXN0b3JlLmMgYi90b29scy9saWJ4Yy94Y19zcl9yZXN0 b3JlLmMKaW5kZXggZDUzOTQ4ZTFhNi4uOGNkOTI4OWQxYSAxMDA2NDQKLS0tIGEvdG9vbHMvbGli eGMveGNfc3JfcmVzdG9yZS5jCisrKyBiL3Rvb2xzL2xpYnhjL3hjX3NyX3Jlc3RvcmUuYwpAQCAt NjgsNzQgKzY4LDYgQEAgc3RhdGljIGludCByZWFkX2hlYWRlcnMoc3RydWN0IHhjX3NyX2NvbnRl eHQgKmN0eCkKICAgICByZXR1cm4gMDsKIH0KIAotLyoKLSAqIEdpdmVuIGEgc2V0IG9mIHBmbnMs IG9idGFpbiBtZW1vcnkgZnJvbSBYZW4gdG8gZmlsbCB0aGUgcGh5c21hcCBmb3IgdGhlCi0gKiB1 bnBvcHVsYXRlZCBzdWJzZXQuICBJZiB0eXBlcyBpcyBOVUxMLCBubyBwYWdlIHR5cGUgY2hlY2tp bmcgaXMgcGVyZm9ybWVkCi0gKiBhbmQgYWxsIHVucG9wdWxhdGVkIHBmbnMgYXJlIHBvcHVsYXRl ZC4KLSAqLwotaW50IHBvcHVsYXRlX3BmbnMoc3RydWN0IHhjX3NyX2NvbnRleHQgKmN0eCwgdW5z aWduZWQgY291bnQsCi0gICAgICAgICAgICAgICAgICBjb25zdCB4ZW5fcGZuX3QgKm9yaWdpbmFs X3BmbnMsIGNvbnN0IHVpbnQzMl90ICp0eXBlcykKLXsKLSAgICB4Y19pbnRlcmZhY2UgKnhjaCA9 IGN0eC0+eGNoOwotICAgIHhlbl9wZm5fdCAqbWZucyA9IG1hbGxvYyhjb3VudCAqIHNpemVvZigq bWZucykpLAotICAgICAgICAqcGZucyA9IG1hbGxvYyhjb3VudCAqIHNpemVvZigqcGZucykpOwot ICAgIHVuc2lnbmVkIGksIG5yX3BmbnMgPSAwOwotICAgIGludCByYyA9IC0xOwotCi0gICAgaWYg KCAhbWZucyB8fCAhcGZucyApCi0gICAgewotICAgICAgICBFUlJPUigiRmFpbGVkIHRvIGFsbG9j YXRlICV6dSBieXRlcyBmb3IgcG9wdWxhdGluZyB0aGUgcGh5c21hcCIsCi0gICAgICAgICAgICAg IDIgKiBjb3VudCAqIHNpemVvZigqbWZucykpOwotICAgICAgICBnb3RvIGVycjsKLSAgICB9Ci0K LSAgICBmb3IgKCBpID0gMDsgaSA8IGNvdW50OyArK2kgKQotICAgIHsKLSAgICAgICAgaWYgKCAo IXR5cGVzIHx8ICh0eXBlcyAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICh0eXBlc1tpXSAh PSBYRU5fRE9NQ1RMX1BGSU5GT19YVEFCICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHR5 cGVzW2ldICE9IFhFTl9ET01DVExfUEZJTkZPX0JST0tFTikpKSAmJgotICAgICAgICAgICAgICFw Zm5faXNfcG9wdWxhdGVkKGN0eCwgb3JpZ2luYWxfcGZuc1tpXSkgKQotICAgICAgICB7Ci0gICAg ICAgICAgICByYyA9IHBmbl9zZXRfcG9wdWxhdGVkKGN0eCwgb3JpZ2luYWxfcGZuc1tpXSk7Ci0g ICAgICAgICAgICBpZiAoIHJjICkKLSAgICAgICAgICAgICAgICBnb3RvIGVycjsKLSAgICAgICAg ICAgIHBmbnNbbnJfcGZuc10gPSBtZm5zW25yX3BmbnNdID0gb3JpZ2luYWxfcGZuc1tpXTsKLSAg ICAgICAgICAgICsrbnJfcGZuczsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICggbnJfcGZu cyApCi0gICAgewotICAgICAgICByYyA9IHhjX2RvbWFpbl9wb3B1bGF0ZV9waHlzbWFwX2V4YWN0 KAotICAgICAgICAgICAgeGNoLCBjdHgtPmRvbWlkLCBucl9wZm5zLCAwLCAwLCBtZm5zKTsKLSAg ICAgICAgaWYgKCByYyApCi0gICAgICAgIHsKLSAgICAgICAgICAgIFBFUlJPUigiRmFpbGVkIHRv IHBvcHVsYXRlIHBoeXNtYXAiKTsKLSAgICAgICAgICAgIGdvdG8gZXJyOwotICAgICAgICB9Ci0K LSAgICAgICAgZm9yICggaSA9IDA7IGkgPCBucl9wZm5zOyArK2kgKQotICAgICAgICB7Ci0gICAg ICAgICAgICBpZiAoIG1mbnNbaV0gPT0gSU5WQUxJRF9NRk4gKQotICAgICAgICAgICAgewotICAg ICAgICAgICAgICAgIEVSUk9SKCJQb3B1bGF0ZSBwaHlzbWFwIGZhaWxlZCBmb3IgcGZuICV1Iiwg aSk7Ci0gICAgICAgICAgICAgICAgcmMgPSAtMTsKLSAgICAgICAgICAgICAgICBnb3RvIGVycjsK LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgY3R4LT5yZXN0b3JlLm9wcy5zZXRfZ2ZuKGN0 eCwgcGZuc1tpXSwgbWZuc1tpXSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByYyA9IDA7Ci0K LSBlcnI6Ci0gICAgZnJlZShwZm5zKTsKLSAgICBmcmVlKG1mbnMpOwotCi0gICAgcmV0dXJuIHJj OwotfQotCiAvKgogICogR2l2ZW4gYSBsaXN0IG9mIHBmbnMsIHRoZWlyIHR5cGVzLCBhbmQgYSBi bG9jayBvZiBwYWdlIGRhdGEgZnJvbSB0aGUKICAqIHN0cmVhbSwgcG9wdWxhdGUgYW5kIHJlY29y ZCB0aGVpciB0eXBlcywgbWFwIHRoZSByZWxldmFudCBzdWJzZXQgYW5kIGNvcHkKQEAgLTE2MSw3 ICs5Myw3IEBAIHN0YXRpYyBpbnQgcHJvY2Vzc19wYWdlX2RhdGEoc3RydWN0IHhjX3NyX2NvbnRl eHQgKmN0eCwgdW5zaWduZWQgY291bnQsCiAgICAgICAgIGdvdG8gZXJyOwogICAgIH0KIAotICAg IHJjID0gcG9wdWxhdGVfcGZucyhjdHgsIGNvdW50LCBwZm5zLCB0eXBlcyk7CisgICAgcmMgPSBj dHgtPnJlc3RvcmUub3BzLnBvcHVsYXRlX3BmbnMoY3R4LCBjb3VudCwgcGZucywgdHlwZXMpOwog ICAgIGlmICggcmMgKQogICAgIHsKICAgICAgICAgRVJST1IoIkZhaWxlZCB0byBwb3B1bGF0ZSBw Zm5zIGZvciBiYXRjaCBvZiAldSBwYWdlcyIsIGNvdW50KTsKQEAgLTgyNiw3ICs3NTgsMTIgQEAg aW50IHhjX2RvbWFpbl9yZXN0b3JlKHhjX2ludGVyZmFjZSAqeGNoLCBpbnQgaW9fZmQsIHVpbnQz Ml90IGRvbSwKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KIAorICAgIC8qIFNlZSB4Y19kb21h aW5fZ2V0aW5mbyAqLworICAgIGN0eC5yZXN0b3JlLm1heF9wYWdlcyA9IGN0eC5kb21pbmZvLm1h eF9tZW1rYiA+PiAoUEFHRV9TSElGVC0xMCk7CisgICAgY3R4LnJlc3RvcmUudG90X3BhZ2VzID0g Y3R4LmRvbWluZm8ubnJfcGFnZXM7CiAgICAgY3R4LnJlc3RvcmUucDJtX3NpemUgPSBucl9wZm5z OworICAgIERQUklOVEYoImRvbSAldSBwMm1fc2l6ZSAlbHggbWF4X3BhZ2VzICVseCIsCisgICAg ICAgICAgICBjdHguZG9taWQsIGN0eC5yZXN0b3JlLnAybV9zaXplLCBjdHgucmVzdG9yZS5tYXhf cGFnZXMpOwogCiAgICAgaWYgKCBjdHguZG9taW5mby5odm0gKQogICAgIHsKZGlmZiAtLWdpdCBh L3Rvb2xzL2xpYnhjL3hjX3NyX3Jlc3RvcmVfeDg2X2h2bS5jIGIvdG9vbHMvbGlieGMveGNfc3Jf cmVzdG9yZV94ODZfaHZtLmMKaW5kZXggMWRjYTg1MzU0YS4uNTQ4ZDY2ZWViOSAxMDA2NDQKLS0t IGEvdG9vbHMvbGlieGMveGNfc3JfcmVzdG9yZV94ODZfaHZtLmMKKysrIGIvdG9vbHMvbGlieGMv eGNfc3JfcmVzdG9yZV94ODZfaHZtLmMKQEAgLTEzNSw2ICsxMzUsOCBAQCBzdGF0aWMgaW50IHg4 Nl9odm1fbG9jYWxpc2VfcGFnZShzdHJ1Y3QgeGNfc3JfY29udGV4dCAqY3R4LAogc3RhdGljIGlu dCB4ODZfaHZtX3NldHVwKHN0cnVjdCB4Y19zcl9jb250ZXh0ICpjdHgpCiB7CiAgICAgeGNfaW50 ZXJmYWNlICp4Y2ggPSBjdHgtPnhjaDsKKyAgICBzdHJ1Y3QgeGNfc3JfYml0bWFwICpibTsKKyAg ICB1bnNpZ25lZCBsb25nIGJpdHM7CiAKICAgICBpZiAoIGN0eC0+cmVzdG9yZS5ndWVzdF90eXBl ICE9IERIRFJfVFlQRV9YODZfSFZNICkKICAgICB7CkBAIC0xNDksNyArMTUxLDMwIEBAIHN0YXRp YyBpbnQgeDg2X2h2bV9zZXR1cChzdHJ1Y3QgeGNfc3JfY29udGV4dCAqY3R4KQogICAgICAgICBy ZXR1cm4gLTE7CiAgICAgfQogCisgICAgYm0gPSAmY3R4LT54ODZfaHZtLnJlc3RvcmUuYXR0ZW1w dGVkXzFnOworICAgIGJpdHMgPSAoY3R4LT5yZXN0b3JlLnAybV9zaXplID4+IFNVUEVSUEFHRV8x R0JfU0hJRlQpICsgMTsKKyAgICBpZiAoIHhjX3NyX2JpdG1hcF9yZXNpemUoYm0sIGJpdHMpID09 IGZhbHNlICkKKyAgICAgICAgZ290byBvdXQ7CisKKyAgICBibSA9ICZjdHgtPng4Nl9odm0ucmVz dG9yZS5hdHRlbXB0ZWRfMm07CisgICAgYml0cyA9IChjdHgtPnJlc3RvcmUucDJtX3NpemUgPj4g U1VQRVJQQUdFXzJNQl9TSElGVCkgKyAxOworICAgIGlmICggeGNfc3JfYml0bWFwX3Jlc2l6ZShi bSwgYml0cykgPT0gZmFsc2UgKQorICAgICAgICBnb3RvIG91dDsKKworICAgIGJtID0gJmN0eC0+ eDg2X2h2bS5yZXN0b3JlLmFsbG9jYXRlZF9wZm5zOworICAgIGJpdHMgPSBjdHgtPnJlc3RvcmUu cDJtX3NpemUgKyAxOworICAgIGlmICggeGNfc3JfYml0bWFwX3Jlc2l6ZShibSwgYml0cykgPT0g ZmFsc2UgKQorICAgICAgICBnb3RvIG91dDsKKworICAgIC8qIE5vIHN1cGVycGFnZSBpbiAxc3Qg Mk1CIGR1ZSB0byBWR0EgaG9sZSAqLworICAgIHhjX3NyX3NldF9iaXQoMCwgJmN0eC0+eDg2X2h2 bS5yZXN0b3JlLmF0dGVtcHRlZF8xZyk7CisgICAgeGNfc3Jfc2V0X2JpdCgwLCAmY3R4LT54ODZf aHZtLnJlc3RvcmUuYXR0ZW1wdGVkXzJtKTsKKwogICAgIHJldHVybiAwOworCitvdXQ6CisgICAg RVJST1IoIlVuYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIHBmbiBiaXRtYXBzIik7CisgICAg cmV0dXJuIC0xOwogfQogCiAvKgpAQCAtMjI0LDEwICsyNDksMzIxIEBAIHN0YXRpYyBpbnQgeDg2 X2h2bV9zdHJlYW1fY29tcGxldGUoc3RydWN0IHhjX3NyX2NvbnRleHQgKmN0eCkKIHN0YXRpYyBp bnQgeDg2X2h2bV9jbGVhbnVwKHN0cnVjdCB4Y19zcl9jb250ZXh0ICpjdHgpCiB7CiAgICAgZnJl ZShjdHgtPng4Nl9odm0ucmVzdG9yZS5jb250ZXh0KTsKKyAgICB4Y19zcl9iaXRtYXBfZnJlZSgm Y3R4LT54ODZfaHZtLnJlc3RvcmUuYXR0ZW1wdGVkXzFnKTsKKyAgICB4Y19zcl9iaXRtYXBfZnJl ZSgmY3R4LT54ODZfaHZtLnJlc3RvcmUuYXR0ZW1wdGVkXzJtKTsKKyAgICB4Y19zcl9iaXRtYXBf ZnJlZSgmY3R4LT54ODZfaHZtLnJlc3RvcmUuYWxsb2NhdGVkX3BmbnMpOwogCiAgICAgcmV0dXJu IDA7CiB9CiAKKy8qCisgKiBTZXQgYSBwZm4gYXMgYWxsb2NhdGVkLCBleHBhbmRpbmcgdGhlIHRy YWNraW5nIHN0cnVjdHVyZXMgaWYgbmVlZGVkLgorICovCitzdGF0aWMgaW50IHBmbl9zZXRfYWxs b2NhdGVkKHN0cnVjdCB4Y19zcl9jb250ZXh0ICpjdHgsIHhlbl9wZm5fdCBwZm4pCit7CisgICAg eGNfaW50ZXJmYWNlICp4Y2ggPSBjdHgtPnhjaDsKKworICAgIGlmICggIXhjX3NyX3NldF9iaXQo cGZuLCAmY3R4LT54ODZfaHZtLnJlc3RvcmUuYWxsb2NhdGVkX3BmbnMpICkKKyAgICB7CisgICAg ICAgIEVSUk9SKCJGYWlsZWQgdG8gcmVhbGxvYyBhbGxvY2F0ZWRfcGZucyBiaXRtYXAiKTsKKyAg ICAgICAgZXJybm8gPSBFTk9NRU07CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgcmV0 dXJuIDA7Cit9CisKK3N0cnVjdCB4ODZfaHZtX3NwIHsKKyAgICB4ZW5fcGZuX3QgcGZuOworICAg IHhlbl9wZm5fdCBiYXNlX3BmbjsKKyAgICB1bnNpZ25lZCBsb25nIGluZGV4OworICAgIHVuc2ln bmVkIGxvbmcgY291bnQ7Cit9OworCisvKgorICogVHJ5IHRvIGFsbG9jYXRlIGEgMUdCIHBhZ2Ug Zm9yIHRoaXMgcGZuLCBidXQgYXZvaWQgT3Zlci1hbGxvY2F0aW9uLgorICogSWYgdGhpcyBzdWNj ZWVkcywgbWFyayB0aGUgcmFuZ2Ugb2YgMk1CIHBhZ2VzIGFzIGJ1c3kuCisgKi8KK3N0YXRpYyBi b29sIHg4Nl9odm1fYWxsb2NfMWcoc3RydWN0IHhjX3NyX2NvbnRleHQgKmN0eCwgc3RydWN0IHg4 Nl9odm1fc3AgKnNwKQoreworICAgIHhjX2ludGVyZmFjZSAqeGNoID0gY3R4LT54Y2g7CisgICAg c3RydWN0IHhjX3NyX2JpdG1hcCAqYm07CisgICAgdW5zaWduZWQgaW50IG9yZGVyLCBzaGlmdDsK KyAgICBpbnQgaSwgZG9uZTsKKyAgICB4ZW5fcGZuX3QgZXh0ZW50OworCisgICAgYm0gPSAmY3R4 LT54ODZfaHZtLnJlc3RvcmUuYXR0ZW1wdGVkXzFnOworCisgICAgLyogT25seSBvbmUgYXR0ZW1w dCB0byBhdm9pZCBvdmVybGFwcGluZyBhbGxvY2F0aW9uICovCisgICAgaWYgKCB4Y19zcl90ZXN0 X2FuZF9zZXRfYml0KHNwLT5pbmRleCwgYm0pICkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg ICAgb3JkZXIgPSBTVVBFUlBBR0VfMUdCX1NISUZUOworICAgIHNwLT5jb3VudCA9IDFVTEwgPDwg b3JkZXI7CisKKyAgICAvKiBBbGxvY2F0ZSBvbmx5IGlmIHRoZXJlIGlzIHJvb20gZm9yIGFub3Ro ZXIgc3VwZXJwYWdlICovCisgICAgaWYgKCBjdHgtPnJlc3RvcmUudG90X3BhZ2VzICsgc3AtPmNv dW50ID4gY3R4LT5yZXN0b3JlLm1heF9wYWdlcyApCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor ICAgIGV4dGVudCA9IHNwLT5iYXNlX3BmbiA9IChzcC0+cGZuID4+IG9yZGVyKSA8PCBvcmRlcjsK KyAgICBkb25lID0geGNfZG9tYWluX3BvcHVsYXRlX3BoeXNtYXAoeGNoLCBjdHgtPmRvbWlkLCAx LCBvcmRlciwgMCwgJmV4dGVudCk7CisgICAgaWYgKCBkb25lIDwgMCApIHsKKyAgICAgICAgUEVS Uk9SKCJwb3B1bGF0ZV9waHlzbWFwIGZhaWxlZC4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor ICAgIH0KKyAgICBpZiAoIGRvbmUgPT0gMCApCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg IERQUklOVEYoIjFHIGJhc2VfcGZuICUiIFBSSV94ZW5fcGZuICJcbiIsIHNwLT5iYXNlX3Bmbik7 CisKKyAgICAvKiBNYXJrIGFsbCAyTUIgcGFnZXMgYXMgZG9uZSB0byBhdm9pZCBvdmVybGFwcGlu ZyBhbGxvY2F0aW9uICovCisgICAgYm0gPSAmY3R4LT54ODZfaHZtLnJlc3RvcmUuYXR0ZW1wdGVk XzJtOworICAgIHNoaWZ0ID0gU1VQRVJQQUdFXzFHQl9TSElGVCAtIFNVUEVSUEFHRV8yTUJfU0hJ RlQ7CisgICAgZm9yICggaSA9IDA7IGkgPCAoc3AtPmNvdW50ID4+IHNoaWZ0KTsgaSsrICkKKyAg ICAgICAgeGNfc3Jfc2V0X2JpdCgoc3AtPmJhc2VfcGZuID4+IFNVUEVSUEFHRV8yTUJfU0hJRlQp ICsgaSwgYm0pOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKKy8qIEFsbG9jYXRlIGEgMk1CIHBh Z2UgaWYgeDg2X2h2bV9hbGxvY18xZyBmYWlsZWQsIGF2b2lkIE92ZXItYWxsb2NhdGlvbi4gKi8K K3N0YXRpYyBib29sIHg4Nl9odm1fYWxsb2NfMm0oc3RydWN0IHhjX3NyX2NvbnRleHQgKmN0eCwg c3RydWN0IHg4Nl9odm1fc3AgKnNwKQoreworICAgIHhjX2ludGVyZmFjZSAqeGNoID0gY3R4LT54 Y2g7CisgICAgc3RydWN0IHhjX3NyX2JpdG1hcCAqYm07CisgICAgdW5zaWduZWQgaW50IG9yZGVy OworICAgIGludCBkb25lOworICAgIHhlbl9wZm5fdCBleHRlbnQ7CisKKyAgICBibSA9ICZjdHgt Png4Nl9odm0ucmVzdG9yZS5hdHRlbXB0ZWRfMm07CisKKyAgICAvKiBPbmx5IG9uZSBhdHRlbXB0 IHRvIGF2b2lkIG92ZXJsYXBwaW5nIGFsbG9jYXRpb24gKi8KKyAgICBpZiAoIHhjX3NyX3Rlc3Rf YW5kX3NldF9iaXQoc3AtPmluZGV4LCBibSkgKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg ICBvcmRlciA9IFNVUEVSUEFHRV8yTUJfU0hJRlQ7CisgICAgc3AtPmNvdW50ID0gMVVMTCA8PCBv cmRlcjsKKworICAgIC8qIEFsbG9jYXRlIG9ubHkgaWYgdGhlcmUgaXMgcm9vbSBmb3IgYW5vdGhl ciBzdXBlcnBhZ2UgKi8KKyAgICBpZiAoIGN0eC0+cmVzdG9yZS50b3RfcGFnZXMgKyBzcC0+Y291 bnQgPiBjdHgtPnJlc3RvcmUubWF4X3BhZ2VzICkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg ICAgZXh0ZW50ID0gc3AtPmJhc2VfcGZuID0gKHNwLT5wZm4gPj4gb3JkZXIpIDw8IG9yZGVyOwor ICAgIGRvbmUgPSB4Y19kb21haW5fcG9wdWxhdGVfcGh5c21hcCh4Y2gsIGN0eC0+ZG9taWQsIDEs IG9yZGVyLCAwLCAmZXh0ZW50KTsKKyAgICBpZiAoIGRvbmUgPCAwICkgeworICAgICAgICBQRVJS T1IoInBvcHVsYXRlX3BoeXNtYXAgZmFpbGVkLiIpOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg ICAgfQorICAgIGlmICggZG9uZSA9PSAwICkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg RFBSSU5URigiMk0gYmFzZV9wZm4gJSIgUFJJX3hlbl9wZm4gIlxuIiwgc3AtPmJhc2VfcGZuKTsK KyAgICByZXR1cm4gdHJ1ZTsKK30KKworLyogQWxsb2NhdGUgYSBzaW5nbGUgcGFnZSBpZiB4ODZf aHZtX2FsbG9jXzJtIGZhaWxlZC4gKi8KK3N0YXRpYyBib29sIHg4Nl9odm1fYWxsb2NfNGsoc3Ry dWN0IHhjX3NyX2NvbnRleHQgKmN0eCwgc3RydWN0IHg4Nl9odm1fc3AgKnNwKQoreworICAgIHhj X2ludGVyZmFjZSAqeGNoID0gY3R4LT54Y2g7CisgICAgdW5zaWduZWQgaW50IG9yZGVyOworICAg IGludCBkb25lOworICAgIHhlbl9wZm5fdCBleHRlbnQ7CisKKyAgICBvcmRlciA9IDA7CisgICAg c3AtPmNvdW50ID0gMVVMTCA8PCBvcmRlcjsKKworICAgIC8qIEFsbG9jYXRlIG9ubHkgaWYgdGhl cmUgaXMgcm9vbSBmb3IgYW5vdGhlciBwYWdlICovCisgICAgaWYgKCBjdHgtPnJlc3RvcmUudG90 X3BhZ2VzICsgc3AtPmNvdW50ID4gY3R4LT5yZXN0b3JlLm1heF9wYWdlcyApCisgICAgICAgIHJl dHVybiBmYWxzZTsKKworICAgIGV4dGVudCA9IHNwLT5iYXNlX3BmbiA9IChzcC0+cGZuID4+IG9y ZGVyKSA8PCBvcmRlcjsKKyAgICBkb25lID0geGNfZG9tYWluX3BvcHVsYXRlX3BoeXNtYXAoeGNo LCBjdHgtPmRvbWlkLCAxLCBvcmRlciwgMCwgJmV4dGVudCk7CisgICAgaWYgKCBkb25lIDwgMCAp IHsKKyAgICAgICAgUEVSUk9SKCJwb3B1bGF0ZV9waHlzbWFwIGZhaWxlZC4iKTsKKyAgICAgICAg cmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAoIGRvbmUgPT0gMCApCisgICAgICAgIHJldHVy biBmYWxzZTsKKworICAgIERQUklOVEYoIjRLIGJhc2VfcGZuICUiIFBSSV94ZW5fcGZuICJcbiIs IHNwLT5iYXNlX3Bmbik7CisgICAgcmV0dXJuIHRydWU7Cit9CisvKgorICogQXR0ZW1wdCB0byBh bGxvY2F0ZSBhIHN1cGVycGFnZSB3aGVyZSB0aGUgcGZuIHJlc2lkZXMuCisgKi8KK3N0YXRpYyBp bnQgeDg2X2h2bV9hbGxvY2F0ZV9wZm4oc3RydWN0IHhjX3NyX2NvbnRleHQgKmN0eCwgeGVuX3Bm bl90IHBmbikKK3sKKyAgICB4Y19pbnRlcmZhY2UgKnhjaCA9IGN0eC0+eGNoOworICAgIGJvb2wg c3VjY2VzczsKKyAgICBpbnQgcmMgPSAtMTsKKyAgICB1bnNpZ25lZCBsb25nIGlkeF8xZywgaWR4 XzJtOworICAgIHN0cnVjdCB4ODZfaHZtX3NwIHNwID0geworICAgICAgICAucGZuID0gcGZuCisg ICAgfTsKKworICAgIGlmICggeGNfc3JfdGVzdF9iaXQocGZuLCAmY3R4LT54ODZfaHZtLnJlc3Rv cmUuYWxsb2NhdGVkX3BmbnMpICkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZHhfMWcgPSBw Zm4gPj4gU1VQRVJQQUdFXzFHQl9TSElGVDsKKyAgICBpZHhfMm0gPSBwZm4gPj4gU1VQRVJQQUdF XzJNQl9TSElGVDsKKyAgICBpZiAoICF4Y19zcl9iaXRtYXBfcmVzaXplKCZjdHgtPng4Nl9odm0u cmVzdG9yZS5hdHRlbXB0ZWRfMWcsIGlkeF8xZykgKQorICAgIHsKKyAgICAgICAgUEVSUk9SKCJG YWlsZWQgdG8gcmVhbGxvYyBhdHRlbXB0ZWRfMWciKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAg IH0KKyAgICBpZiAoICF4Y19zcl9iaXRtYXBfcmVzaXplKCZjdHgtPng4Nl9odm0ucmVzdG9yZS5h dHRlbXB0ZWRfMm0sIGlkeF8ybSkgKQorICAgIHsKKyAgICAgICAgUEVSUk9SKCJGYWlsZWQgdG8g cmVhbGxvYyBhdHRlbXB0ZWRfMm0iKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAg IHNwLmluZGV4ID0gaWR4XzFnOworICAgIHN1Y2Nlc3MgPSB4ODZfaHZtX2FsbG9jXzFnKGN0eCwg JnNwKTsKKworICAgIGlmICggc3VjY2VzcyA9PSBmYWxzZSApIHsKKyAgICAgICAgc3AuaW5kZXgg PSBpZHhfMm07CisgICAgICAgIHN1Y2Nlc3MgPSB4ODZfaHZtX2FsbG9jXzJtKGN0eCwgJnNwKTsK KyAgICB9CisKKyAgICBpZiAoIHN1Y2Nlc3MgPT0gZmFsc2UgKSB7CisgICAgICAgIHNwLmluZGV4 ID0gMDsKKyAgICAgICAgc3VjY2VzcyA9IHg4Nl9odm1fYWxsb2NfNGsoY3R4LCAmc3ApOworICAg IH0KKworICAgIGlmICggc3VjY2VzcyA9PSB0cnVlICkgeworICAgICAgICBkbyB7CisgICAgICAg ICAgICBzcC5jb3VudC0tOworICAgICAgICAgICAgY3R4LT5yZXN0b3JlLnRvdF9wYWdlcysrOwor ICAgICAgICAgICAgcmMgPSBwZm5fc2V0X2FsbG9jYXRlZChjdHgsIHNwLmJhc2VfcGZuICsgc3Au Y291bnQpOworICAgICAgICAgICAgaWYgKCByYyApCisgICAgICAgICAgICAgICAgYnJlYWs7Cisg ICAgICAgIH0gd2hpbGUgKCBzcC5jb3VudCApOworICAgIH0KKyAgICByZXR1cm4gcmM7Cit9CisK K3N0YXRpYyBib29sIHg4Nl9odm1fcHVuY2hfaG9sZShzdHJ1Y3QgeGNfc3JfY29udGV4dCAqY3R4 LCB4ZW5fcGZuX3QgbWF4X3BmbikKK3sKKyAgICB4Y19pbnRlcmZhY2UgKnhjaCA9IGN0eC0+eGNo OworICAgIHN0cnVjdCB4Y19zcl9iaXRtYXAgKmJtOworICAgIHhlbl9wZm5fdCBfcGZuLCBwZm4s IG1pbl9wZm47CisgICAgdWludDMyX3QgZG9taWQsIGZyZWVkID0gMCwgb3JkZXI7CisgICAgaW50 IHJjID0gLTE7CisKKyAgICAvKgorICAgICAqIFNjYW4gdGhlIGVudGlyZSBzdXBlcnBhZ2UgYmVj YXVzZSBzZXZlcmFsIGJhdGNoZXMgd2lsbCBmaXQgaW50bworICAgICAqIGEgc3VwZXJwYWdlLCBh bmQgaXQgaXMgdW5rbm93biB3aGljaCBwZm4gdHJpZ2dlcmVkIHRoZSBhbGxvY2F0aW9uLgorICAg ICAqLworICAgIG9yZGVyID0gU1VQRVJQQUdFXzFHQl9TSElGVDsKKyAgICBwZm4gPSBtaW5fcGZu ID0gKG1heF9wZm4gPj4gb3JkZXIpIDw8IG9yZGVyOworCisgICAgd2hpbGUgKCBwZm4gPD0gbWF4 X3BmbiApCisgICAgeworICAgICAgICBibSA9ICZjdHgtPng4Nl9odm0ucmVzdG9yZS5hbGxvY2F0 ZWRfcGZuczsKKyAgICAgICAgaWYgKCAheGNfc3JfYml0bWFwX3Jlc2l6ZShibSwgcGZuKSApCisg ICAgICAgIHsKKyAgICAgICAgICAgIFBFUlJPUigiRmFpbGVkIHRvIHJlYWxsb2MgYWxsb2NhdGVk X3BmbnMgJSIgUFJJX3hlbl9wZm4sIHBmbik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg ICAgICAgIH0KKyAgICAgICAgaWYgKCAhcGZuX2lzX3BvcHVsYXRlZChjdHgsIHBmbikgJiYKKyAg ICAgICAgICAgIHhjX3NyX3Rlc3RfYW5kX2NsZWFyX2JpdChwZm4sIGJtKSApIHsKKyAgICAgICAg ICAgIGRvbWlkID0gY3R4LT5kb21pZDsKKyAgICAgICAgICAgIF9wZm4gPSBwZm47CisgICAgICAg ICAgICByYyA9IHhjX2RvbWFpbl9kZWNyZWFzZV9yZXNlcnZhdGlvbl9leGFjdCh4Y2gsIGRvbWlk LCAxLCAwLCAmX3Bmbik7CisgICAgICAgICAgICBpZiAoIHJjICkKKyAgICAgICAgICAgIHsKKyAg ICAgICAgICAgICAgICBQRVJST1IoIkZhaWxlZCB0byByZWxlYXNlIHBmbiAlIiBQUklfeGVuX3Bm biwgcGZuKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9Cisg ICAgICAgICAgICBjdHgtPnJlc3RvcmUudG90X3BhZ2VzLS07CisgICAgICAgICAgICBmcmVlZCsr OworICAgICAgICB9CisgICAgICAgIHBmbisrOworICAgIH0KKyAgICBpZiAoIGZyZWVkICkKKyAg ICAgICAgRFBSSU5URigiZnJlZWQgJXUgYmV0d2VlbiAlIiBQUklfeGVuX3BmbiAiICUiIFBSSV94 ZW5fcGZuICJcbiIsCisgICAgICAgICAgICAgICAgZnJlZWQsIG1pbl9wZm4sIG1heF9wZm4pOwor ICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgaW50IHg4Nl9odm1fcG9wdWxhdGVfcGZucyhz dHJ1Y3QgeGNfc3JfY29udGV4dCAqY3R4LCB1bnNpZ25lZCBjb3VudCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IHhlbl9wZm5fdCAqb3JpZ2luYWxfcGZucywKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQzMl90ICp0eXBlcykKK3sKKyAg ICB4Y19pbnRlcmZhY2UgKnhjaCA9IGN0eC0+eGNoOworICAgIHhlbl9wZm5fdCBwZm4sIG1pbl9w Zm4gPSBvcmlnaW5hbF9wZm5zWzBdLCBtYXhfcGZuID0gb3JpZ2luYWxfcGZuc1swXTsKKyAgICB4 ZW5fcGZuX3QgaWR4MUcsIGlkeDFHX3ByZXYsIGlkeDJNLCBpZHgyTV9wcmV2OworICAgIHVuc2ln bmVkIGksIG9yZGVyOworICAgIGludCByYyA9IC0xOworCisgICAgLyogTG9vcCBvbmNlIG92ZXIg dGhlIGFycmF5IHRvIHNob3cgc3RhdGlzdGljcyAqLworICAgIGZvciAoIGkgPSAwOyBpIDwgY291 bnQ7ICsraSApCisgICAgeworICAgICAgICBpZiAoIG9yaWdpbmFsX3BmbnNbaV0gPCBtaW5fcGZu ICkKKyAgICAgICAgICAgIG1pbl9wZm4gPSBvcmlnaW5hbF9wZm5zW2ldOworICAgICAgICBpZiAo IG9yaWdpbmFsX3BmbnNbaV0gPiBtYXhfcGZuICkKKyAgICAgICAgICAgIG1heF9wZm4gPSBvcmln aW5hbF9wZm5zW2ldOworICAgIH0KKyAgICBEUFJJTlRGKCJiYXRjaCBvZiAldSBwZm5zIGJldHdl ZW4gJSIgUFJJX3hlbl9wZm4gIiAlIiBQUklfeGVuX3BmbiAiXG4iLAorICAgICAgICAgICAgY291 bnQsIG1pbl9wZm4sIG1heF9wZm4pOworCisgICAgbWF4X3BmbiA9IG9yaWdpbmFsX3BmbnNbMF07 CisgICAgaWR4MUdfcHJldiA9IG9yaWdpbmFsX3BmbnNbMF0gPj4gU1VQRVJQQUdFXzFHQl9TSElG VDsKKyAgICBpZHgyTV9wcmV2ID0gb3JpZ2luYWxfcGZuc1swXSA+PiBTVVBFUlBBR0VfMk1CX1NI SUZUOworCisgICAgZm9yICggaSA9IDA7IGkgPCBjb3VudDsgKytpICkKKyAgICB7CisgICAgICAg IHBmbiA9IG9yaWdpbmFsX3BmbnNbaV07CisgICAgICAgIGlkeDFHID0gcGZuID4+IFNVUEVSUEFH RV8xR0JfU0hJRlQ7CisgICAgICAgIGlkeDJNID0gcGZuID4+IFNVUEVSUEFHRV8yTUJfU0hJRlQ7 CisKKyAgICAgICAgLyoKKyAgICAgICAgICogSWYgdGhpcyBwZm4gaXMgaW4gYW5vdGhlciAyTUIg c3VwZXJwYWdlIGl0IGlzIHJlcXVpcmVkIHRvIHB1bmNoIGhvbGVzCisgICAgICAgICAqIHRvIHJl bGVhc2UgbWVtb3J5LCBzdGFydGluZyBmcm9tIHRoZSAxR0IgYm91bmRhcnkgdXAgdG8gdGhlIGhp Z2hlc3QKKyAgICAgICAgICogcGZuIHdpdGhpbiB0aGUgcHJldmlvdXMgMk1CIHN1cGVycGFnZS4K KyAgICAgICAgICovCisgICAgICAgIGlmICggaWR4MUdfcHJldiA9PSBpZHgxRyAmJiBpZHgyTV9w cmV2ID09IGlkeDJNICkKKyAgICAgICAgeworICAgICAgICAgICAgLyogUmVjb3JkIGhpZ2hlc3Qg cGZuIHdpdGhpbiB0aGlzIDJNQiBzdXBlcnBhZ2UgKi8KKyAgICAgICAgICAgIGlmICggcGZuID4g bWF4X3BmbiApCisgICAgICAgICAgICAgICAgbWF4X3BmbiA9IHBmbjsKKyAgICAgICAgfSBlbHNl IHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBJZiB0aGlzIG5leHQgcGZuIGlzIHdp dGhpbiBhbm90aGVyIDFHQiBzdXBlcnBhZ2UgaXQgaXMgcmVxdWlyZWQKKyAgICAgICAgICAgICAq IHRvIHNjYW4gdGhlIGVudGlyZSBwcmV2aW91cyBzdXBlcnBhZ2UgYmVjYXVzZSB0aGVyZSBtaWdo dCBiZQorICAgICAgICAgICAgICogaG9sZXMgYmV0d2VlbiBtYXhfcGZuIGFuZCB0aGUgZW5kIG9m IHRoZSBzdXBlcnBhZ2UuCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGlmICggaWR4MUdf cHJldiAhPSBpZHgxRyApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3JkZXIgPSBT VVBFUlBBR0VfMUdCX1NISUZUOworICAgICAgICAgICAgICAgIG1heF9wZm4gPSAoKChtYXhfcGZu ID4+IG9yZGVyKSArIDEpIDw8IG9yZGVyKSAtIDE7CisgICAgICAgICAgICB9CisgICAgICAgICAg ICBpZiAoIHg4Nl9odm1fcHVuY2hfaG9sZShjdHgsIG1heF9wZm4pID09IGZhbHNlICkKKyAgICAg ICAgICAgICAgICBnb3RvIGVycjsKKyAgICAgICAgICAgIC8qIFRoaXMgaXMgdGhlIGhpZ2hlc3Qg cGZuIHdpdGhpbiB0aGUgbmV4dCAyTUIgc3VwZXJwYWdlICovCisgICAgICAgICAgICBtYXhfcGZu ID0gcGZuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCAodHlwZXNbaV0gIT0gWEVOX0RPTUNU TF9QRklORk9fWFRBQiAmJgorICAgICAgICAgICAgICB0eXBlc1tpXSAhPSBYRU5fRE9NQ1RMX1BG SU5GT19CUk9LRU4pICYmCisgICAgICAgICAgICAgIXBmbl9pc19wb3B1bGF0ZWQoY3R4LCBwZm4p ICkKKyAgICAgICAgeworICAgICAgICAgICAgcmMgPSB4ODZfaHZtX2FsbG9jYXRlX3BmbihjdHgs IHBmbik7CisgICAgICAgICAgICBpZiAoIHJjICkKKyAgICAgICAgICAgICAgICBnb3RvIGVycjsK KyAgICAgICAgICAgIHJjID0gcGZuX3NldF9wb3B1bGF0ZWQoY3R4LCBwZm4pOworICAgICAgICAg ICAgaWYgKCByYyApCisgICAgICAgICAgICAgICAgZ290byBlcnI7CisgICAgICAgIH0KKyAgICAg ICAgaWR4MUdfcHJldiA9IGlkeDFHOworICAgICAgICBpZHgyTV9wcmV2ID0gaWR4Mk07CisgICAg fQorCisgICAgcmMgPSAwOworCisgZXJyOgorICAgIHJldHVybiByYzsKK30KKworCiBzdHJ1Y3Qg eGNfc3JfcmVzdG9yZV9vcHMgcmVzdG9yZV9vcHNfeDg2X2h2bSA9CiB7CiAgICAgLnBmbl9pc192 YWxpZCAgICA9IHg4Nl9odm1fcGZuX2lzX3ZhbGlkLApAQCAtMjM2LDYgKzU3Miw3IEBAIHN0cnVj dCB4Y19zcl9yZXN0b3JlX29wcyByZXN0b3JlX29wc194ODZfaHZtID0KICAgICAuc2V0X3BhZ2Vf dHlwZSAgID0geDg2X2h2bV9zZXRfcGFnZV90eXBlLAogICAgIC5sb2NhbGlzZV9wYWdlICAgPSB4 ODZfaHZtX2xvY2FsaXNlX3BhZ2UsCiAgICAgLnNldHVwICAgICAgICAgICA9IHg4Nl9odm1fc2V0 dXAsCisgICAgLnBvcHVsYXRlX3BmbnMgICA9IHg4Nl9odm1fcG9wdWxhdGVfcGZucywKICAgICAu cHJvY2Vzc19yZWNvcmQgID0geDg2X2h2bV9wcm9jZXNzX3JlY29yZCwKICAgICAuc3RyZWFtX2Nv bXBsZXRlID0geDg2X2h2bV9zdHJlYW1fY29tcGxldGUsCiAgICAgLmNsZWFudXAgICAgICAgICA9 IHg4Nl9odm1fY2xlYW51cCwKZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYnhjL3hjX3NyX3Jlc3RvcmVf eDg2X3B2LmMgYi90b29scy9saWJ4Yy94Y19zcl9yZXN0b3JlX3g4Nl9wdi5jCmluZGV4IDUwZTI1 YzE2MmMuLjg3OTU3NTU5YmMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2xpYnhjL3hjX3NyX3Jlc3RvcmVf eDg2X3B2LmMKKysrIGIvdG9vbHMvbGlieGMveGNfc3JfcmVzdG9yZV94ODZfcHYuYwpAQCAtOTM2 LDYgKzkzNiw3NSBAQCBzdGF0aWMgdm9pZCB4ODZfcHZfc2V0X2dmbihzdHJ1Y3QgeGNfc3JfY29u dGV4dCAqY3R4LCB4ZW5fcGZuX3QgcGZuLAogICAgICAgICAoKHVpbnQzMl90ICopY3R4LT54ODZf cHYucDJtKVtwZm5dID0gbWZuOwogfQogCisvKgorICogR2l2ZW4gYSBzZXQgb2YgcGZucywgb2J0 YWluIG1lbW9yeSBmcm9tIFhlbiB0byBmaWxsIHRoZSBwaHlzbWFwIGZvciB0aGUKKyAqIHVucG9w dWxhdGVkIHN1YnNldC4gIElmIHR5cGVzIGlzIE5VTEwsIG5vIHBhZ2UgdHlwZSBjaGVja2luZyBp cyBwZXJmb3JtZWQKKyAqIGFuZCBhbGwgdW5wb3B1bGF0ZWQgcGZucyBhcmUgcG9wdWxhdGVkLgor ICovCitzdGF0aWMgaW50IHg4Nl9wdl9wb3B1bGF0ZV9wZm5zKHN0cnVjdCB4Y19zcl9jb250ZXh0 ICpjdHgsIHVuc2lnbmVkIGNvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj b25zdCB4ZW5fcGZuX3QgKm9yaWdpbmFsX3BmbnMsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IHVpbnQzMl90ICp0eXBlcykKK3sKKyAgICB4Y19pbnRlcmZhY2UgKnhjaCA9 IGN0eC0+eGNoOworICAgIHhlbl9wZm5fdCAqbWZucyA9IG1hbGxvYyhjb3VudCAqIHNpemVvZigq bWZucykpLAorICAgICAgICAqcGZucyA9IG1hbGxvYyhjb3VudCAqIHNpemVvZigqcGZucykpOwor ICAgIHVuc2lnbmVkIGksIG5yX3BmbnMgPSAwOworICAgIGludCByYyA9IC0xOworCisgICAgaWYg KCAhbWZucyB8fCAhcGZucyApCisgICAgeworICAgICAgICBFUlJPUigiRmFpbGVkIHRvIGFsbG9j YXRlICV6dSBieXRlcyBmb3IgcG9wdWxhdGluZyB0aGUgcGh5c21hcCIsCisgICAgICAgICAgICAg IDIgKiBjb3VudCAqIHNpemVvZigqbWZucykpOworICAgICAgICBnb3RvIGVycjsKKyAgICB9CisK KyAgICBmb3IgKCBpID0gMDsgaSA8IGNvdW50OyArK2kgKQorICAgIHsKKyAgICAgICAgaWYgKCAo IXR5cGVzIHx8ICh0eXBlcyAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICh0eXBlc1tpXSAh PSBYRU5fRE9NQ1RMX1BGSU5GT19YVEFCICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgIHR5 cGVzW2ldICE9IFhFTl9ET01DVExfUEZJTkZPX0JST0tFTikpKSAmJgorICAgICAgICAgICAgICFw Zm5faXNfcG9wdWxhdGVkKGN0eCwgb3JpZ2luYWxfcGZuc1tpXSkgKQorICAgICAgICB7CisgICAg ICAgICAgICByYyA9IHBmbl9zZXRfcG9wdWxhdGVkKGN0eCwgb3JpZ2luYWxfcGZuc1tpXSk7Cisg ICAgICAgICAgICBpZiAoIHJjICkKKyAgICAgICAgICAgICAgICBnb3RvIGVycjsKKyAgICAgICAg ICAgIHBmbnNbbnJfcGZuc10gPSBtZm5zW25yX3BmbnNdID0gb3JpZ2luYWxfcGZuc1tpXTsKKyAg ICAgICAgICAgICsrbnJfcGZuczsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICggbnJfcGZu cyApCisgICAgeworICAgICAgICByYyA9IHhjX2RvbWFpbl9wb3B1bGF0ZV9waHlzbWFwX2V4YWN0 KAorICAgICAgICAgICAgeGNoLCBjdHgtPmRvbWlkLCBucl9wZm5zLCAwLCAwLCBtZm5zKTsKKyAg ICAgICAgaWYgKCByYyApCisgICAgICAgIHsKKyAgICAgICAgICAgIFBFUlJPUigiRmFpbGVkIHRv IHBvcHVsYXRlIHBoeXNtYXAiKTsKKyAgICAgICAgICAgIGdvdG8gZXJyOworICAgICAgICB9CisK KyAgICAgICAgZm9yICggaSA9IDA7IGkgPCBucl9wZm5zOyArK2kgKQorICAgICAgICB7CisgICAg ICAgICAgICBpZiAoIG1mbnNbaV0gPT0gSU5WQUxJRF9NRk4gKQorICAgICAgICAgICAgeworICAg ICAgICAgICAgICAgIEVSUk9SKCJQb3B1bGF0ZSBwaHlzbWFwIGZhaWxlZCBmb3IgcGZuICV1Iiwg aSk7CisgICAgICAgICAgICAgICAgcmMgPSAtMTsKKyAgICAgICAgICAgICAgICBnb3RvIGVycjsK KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY3R4LT5yZXN0b3JlLm9wcy5zZXRfZ2ZuKGN0 eCwgcGZuc1tpXSwgbWZuc1tpXSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByYyA9IDA7CisK KyBlcnI6CisgICAgZnJlZShwZm5zKTsKKyAgICBmcmVlKG1mbnMpOworCisgICAgcmV0dXJuIHJj OworfQorCiAvKgogICogcmVzdG9yZV9vcHMgZnVuY3Rpb24uICBDb252ZXJ0IHBmbnMgYmFjayB0 byBtZm5zIGluIHBhZ2V0YWJsZXMuICBQb3NzaWJseQogICogbmVlZHMgdG8gcG9wdWxhdGUgbmV3 IGZyYW1lcyBpZiBhIFBURSBpcyBmb3VuZCByZWZlcnJpbmcgdG8gYSBmcmFtZSB3aGljaApAQCAt OTgwLDcgKzEwNDksNyBAQCBzdGF0aWMgaW50IHg4Nl9wdl9sb2NhbGlzZV9wYWdlKHN0cnVjdCB4 Y19zcl9jb250ZXh0ICpjdHgsCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAoIHRvX3BvcHVs YXRlICYmIHBvcHVsYXRlX3BmbnMoY3R4LCB0b19wb3B1bGF0ZSwgcGZucywgTlVMTCkgKQorICAg IGlmICggdG9fcG9wdWxhdGUgJiYgeDg2X3B2X3BvcHVsYXRlX3BmbnMoY3R4LCB0b19wb3B1bGF0 ZSwgcGZucywgTlVMTCkgKQogICAgICAgICByZXR1cm4gLTE7CiAKICAgICBmb3IgKCBpID0gMDsg aSA8IChQQUdFX1NJWkUgLyBzaXplb2YodWludDY0X3QpKTsgKytpICkKQEAgLTExNjAsNiArMTIy OSw3IEBAIHN0cnVjdCB4Y19zcl9yZXN0b3JlX29wcyByZXN0b3JlX29wc194ODZfcHYgPQogICAg IC5zZXRfZ2ZuICAgICAgICAgPSB4ODZfcHZfc2V0X2dmbiwKICAgICAubG9jYWxpc2VfcGFnZSAg ID0geDg2X3B2X2xvY2FsaXNlX3BhZ2UsCiAgICAgLnNldHVwICAgICAgICAgICA9IHg4Nl9wdl9z ZXR1cCwKKyAgICAucG9wdWxhdGVfcGZucyAgID0geDg2X3B2X3BvcHVsYXRlX3BmbnMsCiAgICAg LnByb2Nlc3NfcmVjb3JkICA9IHg4Nl9wdl9wcm9jZXNzX3JlY29yZCwKICAgICAuc3RyZWFtX2Nv bXBsZXRlID0geDg2X3B2X3N0cmVhbV9jb21wbGV0ZSwKICAgICAuY2xlYW51cCAgICAgICAgID0g eDg2X3B2X2NsZWFudXAsCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW4ub3JnCmh0 dHBzOi8vbGlzdHMueGVuLm9yZy94ZW4tZGV2ZWwK