From mboxrd@z Thu Jan 1 00:00:00 1970 From: Wei Liu Subject: [PATCH v2 10/12] fuzz/x86emul: update fuzzer Date: Tue, 31 Jan 2017 11:08:07 +0000 Message-ID: <20170131110809.30001-11-wei.liu2@citrix.com> References: <20170131110809.30001-1-wei.liu2@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta3.messagelabs.com ([195.245.230.39]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cYWQa-0002Qp-1j for xen-devel@lists.xenproject.org; Tue, 31 Jan 2017 11:16:48 +0000 In-Reply-To: <20170131110809.30001-1-wei.liu2@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Xen-devel Cc: Wei Liu , George Dunlap , Andrew Cooper , Ian Jackson , George Dunlap , Jan Beulich List-Id: xen-devel@lists.xenproject.org UHJvdmlkZSB0aGUgZnV6emVyIHdpdGggbW9yZSBvcHMsIGFuZCBtb3JlIHNvcGhpc3RpY2F0ZWQg aW5wdXQKc3RydWN0dXJlLgoKQmFzZWQgb24gYSBwYXRjaCBvcmlnaW5hbGx5IHdyaXR0ZW4gYnkg QW5kcmV3IGFuZCBHZW9yZ2UuCgpTaWduZWQtb2ZmLWJ5OiBBbmRyZXcgQ29vcGVyIDxhbmRyZXcu Y29vcGVyM0BjaXRyaXguY29tPgpTaWduZWQtb2ZmLWJ5OiBHZW9yZ2UgRHVubGFwIDxnZW9yZ2Uu ZHVubGFwQGNpdHJpeC5jb20+ClNpZ25lZC1vZmYtYnk6IFdlaSBMaXUgPHdlaS5saXUyQGNpdHJp eC5jb20+Ci0tLQpDYzogSWFuIEphY2tzb24gPGlhbi5qYWNrc29uQGV1LmNpdHJpeC5jb20+CkNj OiBKYW4gQmV1bGljaCA8amJldWxpY2hAc3VzZS5jb20+CkNjOiBBbmRyZXcgQ29vcGVyIDxhbmRy ZXcuY29vcGVyM0BjaXRyaXguY29tPgpDYzogR2VvcmdlIER1bmxhcCA8Z2VvcmdlLmR1bmxhcEBl dS5jaXRyaXguY29tPgoKdjI6CjEuIEFkZHJlc3MgY29tbWVudHMgZnJvbSBKYW4uCjIuIFByb3Zp ZGUgYXJjaGl0ZWN0dXJhbGx5IGNvcnJlY3QgYmVoYXZpb3VyIGZvciByZXAgc3R1Yi4KLS0tCiAu Li4veDg2LWluc24tZW11bGF0b3ItZnV6emVyLmMgICAgICAgICAgICAgICAgICAgICB8IDY2MCAr KysrKysrKysrKysrKysrKysrLS0KIDEgZmlsZSBjaGFuZ2VkLCA1OTggaW5zZXJ0aW9ucygrKSwg NjIgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvdG9vbHMvZnV6ei94ODZfaW5zdHJ1Y3Rpb25f ZW11bGF0b3IveDg2LWluc24tZW11bGF0b3ItZnV6emVyLmMgYi90b29scy9mdXp6L3g4Nl9pbnN0 cnVjdGlvbl9lbXVsYXRvci94ODYtaW5zbi1lbXVsYXRvci1mdXp6ZXIuYwppbmRleCA3ZDdmNzMx Njc3Li5lZjIyM2U4NTZkIDEwMDY0NAotLS0gYS90b29scy9mdXp6L3g4Nl9pbnN0cnVjdGlvbl9l bXVsYXRvci94ODYtaW5zbi1lbXVsYXRvci1mdXp6ZXIuYworKysgYi90b29scy9mdXp6L3g4Nl9p bnN0cnVjdGlvbl9lbXVsYXRvci94ODYtaW5zbi1lbXVsYXRvci1mdXp6ZXIuYwpAQCAtNCw2ICs0 LDcgQEAKICNpbmNsdWRlIDxpbnR0eXBlcy5oPgogI2luY2x1ZGUgPGxpbWl0cy5oPgogI2luY2x1 ZGUgPHN0ZGJvb2wuaD4KKyNpbmNsdWRlIDxzdGRkZWYuaD4KICNpbmNsdWRlIDxzdGRpbnQuaD4K ICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgpAQCAtMTYsMjYgKzE3LDc5 IEBACiAKICNpbmNsdWRlICJ4ODZfZW11bGF0ZS5oIgogCi1zdGF0aWMgdW5zaWduZWQgY2hhciBk YXRhWzQwOTZdOworI2luY2x1ZGUgIi4uLy4uLy4uL3hlbi9pbmNsdWRlL2FzbS14ODYvbXNyLWlu ZGV4LmgiCisKKyNkZWZpbmUgTVNSX0lOREVYX01BWCAxNgorCisjZGVmaW5lIFNFR19OVU0geDg2 X3NlZ19ub25lCisKK3N0cnVjdCBpbnB1dF9zdHJ1Y3QgeworICAgIHVuc2lnbmVkIGxvbmcgY3Jb NV07CisgICAgdWludDY0X3QgbXNyW01TUl9JTkRFWF9NQVhdOworICAgIHN0cnVjdCBjcHVfdXNl cl9yZWdzIHJlZ3M7CisgICAgc3RydWN0IHNlZ21lbnRfcmVnaXN0ZXIgc2VnbWVudHNbU0VHX05V TV07CisgICAgdW5zaWduZWQgbG9uZyBvcHRpb25zOworICAgIHVuc2lnbmVkIGNoYXIgZGF0YVs0 MDk2XTsKK30gaW5wdXQ7CisjZGVmaW5lIERBVEFfT0ZGU0VUIG9mZnNldG9mKHN0cnVjdCBpbnB1 dF9zdHJ1Y3QsIGRhdGEpCiBzdGF0aWMgdW5zaWduZWQgaW50IGRhdGFfaW5kZXg7Ci1zdGF0aWMg dW5zaWduZWQgaW50IGRhdGFfbWF4Oworc3RhdGljIHVuc2lnbmVkIGludCBkYXRhX251bTsKKwor LyogUmFuZG9tbHkgcmV0dXJuIHN1Y2Nlc3Mgb3IgZmFpbHVyZSB3aGVuIHByb2Nlc3NpbmcgZGF0 YS4gIElmCisgKiBgZXhjZXB0aW9uYCBpcyBmYWxzZSwgdGhpcyBmdW5jdGlvbiB0dXJucyBfRVhD RVBUSU9OIHRvIF9PS0FZLgorICovCitpbnQgbWF5YmVfZmFpbChjb25zdCBjaGFyICp3aHksIGJv b2wgZXhjZXB0aW9uKQoreworICAgIGludCByYzsKKworICAgIGlmICggZGF0YV9pbmRleCArIDEg PiBkYXRhX251bSApCisgICAgICAgIHJjID0gWDg2RU1VTF9FWENFUFRJT047CisgICAgZWxzZQor ICAgIHsKKyAgICAgICAgLyogUmFuZG9tbHkgcmV0dXJucyB2YWx1ZToKKyAgICAgICAgICogNTAl IG9rYXkKKyAgICAgICAgICogMjUlIHVuaGFuZGxhYmxlCisgICAgICAgICAqIDI1JSBleGNlcHRp b24KKyAgICAgICAgICovCisgICAgICAgIGlmICggaW5wdXQuZGF0YVtkYXRhX2luZGV4XSA+IDB4 YzAgKQorICAgICAgICAgICAgcmMgPSBYODZFTVVMX0VYQ0VQVElPTjsKKyAgICAgICAgZWxzZSBp ZiAoIGlucHV0LmRhdGFbZGF0YV9pbmRleF0gPiAweDgwICkKKyAgICAgICAgICAgIHJjID0gWDg2 RU1VTF9VTkhBTkRMRUFCTEU7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJjID0gWDg2RU1V TF9PS0FZOworICAgICAgICBkYXRhX2luZGV4Kys7CisgICAgfQorCisgICAgaWYgKCByYyA9PSBY ODZFTVVMX0VYQ0VQVElPTiAmJiAhZXhjZXB0aW9uICkKKyAgICAgICAgcmMgPSBYODZFTVVMX09L QVk7CisKKyAgICBwcmludGYoIm1heWJlX2ZhaWwgJXM6ICVkXG4iLCB3aHksIHJjKTsKKworICAg IHJldHVybiByYzsKK30KIAogc3RhdGljIGludCBkYXRhX3JlYWQoY29uc3QgY2hhciAqd2h5LCB2 b2lkICpkc3QsIHVuc2lnbmVkIGludCBieXRlcykKIHsKICAgICB1bnNpZ25lZCBpbnQgaTsKKyAg ICBpbnQgcmM7CiAKLSAgICBpZiAoIGRhdGFfaW5kZXggKyBieXRlcyA+IGRhdGFfbWF4ICkKLSAg ICAgICAgcmV0dXJuIFg4NkVNVUxfRVhDRVBUSU9OOworICAgIGlmICggZGF0YV9pbmRleCArIGJ5 dGVzID4gZGF0YV9udW0gKQorICAgICAgICByYyA9IFg4NkVNVUxfRVhDRVBUSU9OOworICAgIGVs c2UKKyAgICAgICAgcmMgPSBtYXliZV9mYWlsKHdoeSwgdHJ1ZSk7CiAKLSAgICBtZW1jcHkoZHN0 LCAgZGF0YSArIGRhdGFfaW5kZXgsIGJ5dGVzKTsKLSAgICBkYXRhX2luZGV4ICs9IGJ5dGVzOwor ICAgIGlmICggcmMgPT0gWDg2RU1VTF9PS0FZICkKKyAgICB7CisgICAgICAgIG1lbWNweShkc3Qs ICBpbnB1dC5kYXRhICsgZGF0YV9pbmRleCwgYnl0ZXMpOworICAgICAgICBkYXRhX2luZGV4ICs9 IGJ5dGVzOwogCi0gICAgcHJpbnRmKCIlczogIiwgd2h5KTsKLSAgICBmb3IgKCBpID0gMDsgaSA8 IGJ5dGVzOyBpKysgKQotICAgICAgICBwcmludGYoIiAlMDJ4IiwgKih1bnNpZ25lZCBjaGFyICop KGRzdCArIGkpKTsKLSAgICBwcmludGYoIlxuIik7CisgICAgICAgIHByaW50ZigiJXM6ICIsIHdo eSk7CisgICAgICAgIGZvciAoIGkgPSAwOyBpIDwgYnl0ZXM7IGkrKyApCisgICAgICAgICAgICBw cmludGYoIiAlMDJ4IiwgKih1bnNpZ25lZCBjaGFyICopKGRzdCArIGkpKTsKKyAgICAgICAgcHJp bnRmKCJcbiIpOworICAgIH0KIAotICAgIHJldHVybiBYODZFTVVMX09LQVk7CisgICAgcmV0dXJu IHJjOwogfQogCiBzdGF0aWMgaW50IGZ1enpfcmVhZCgKQEAgLTQ4LDE0ICsxMDIsOTYgQEAgc3Rh dGljIGludCBmdXp6X3JlYWQoCiAgICAgcmV0dXJuIGRhdGFfcmVhZCgicmVhZCIsIHBfZGF0YSwg Ynl0ZXMpOwogfQogCi1zdGF0aWMgaW50IGZ1enpfZmV0Y2goCitzdGF0aWMgaW50IGZ1enpfcmVh ZF9pbygKKyAgICB1bnNpZ25lZCBpbnQgcG9ydCwKKyAgICB1bnNpZ25lZCBpbnQgYnl0ZXMsCisg ICAgdW5zaWduZWQgbG9uZyAqdmFsLAorICAgIHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0 KQoreworICAgIHJldHVybiBkYXRhX3JlYWQoInJlYWRfaW8iLCB2YWwsIGJ5dGVzKTsKK30KKwor c3RhdGljIGludCBmdXp6X2luc25fZmV0Y2goCiAgICAgdW5zaWduZWQgaW50IHNlZywKICAgICB1 bnNpZ25lZCBsb25nIG9mZnNldCwKICAgICB2b2lkICpwX2RhdGEsCiAgICAgdW5zaWduZWQgaW50 IGJ5dGVzLAogICAgIHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KQogewotICAgIHJldHVy biBkYXRhX3JlYWQoImZldGNoIiwgcF9kYXRhLCBieXRlcyk7CisgICAgcmV0dXJuIGRhdGFfcmVh ZCgiaW5zbl9mZXRjaCIsIHBfZGF0YSwgYnl0ZXMpOworfQorCitzdGF0aWMgaW50IF9mdXp6X3Jl cF9yZWFkKGNvbnN0IGNoYXIgKndoeSwgdW5zaWduZWQgbG9uZyAqcmVwcykKK3sKKyAgICBpbnQg cmM7CisgICAgdW5zaWduZWQgbG9uZyBieXRlc19yZWFkID0gMDsKKworICAgIHJjID0gZGF0YV9y ZWFkKHdoeSwgJmJ5dGVzX3JlYWQsIHNpemVvZihieXRlc19yZWFkKSk7CisKKyAgICBpZiAoIGJ5 dGVzX3JlYWQgPCAqcmVwcyApCisgICAgICAgICpyZXBzIC09IGJ5dGVzX3JlYWQ7CisKKyAgICAv KiBJbmRpY2F0ZSB3ZSBoYXZlbid0IGRvbmUgYW55IHdvcmsgaWYgZW11bGF0aW9uIGhhcyBmYWls ZWQgKi8KKyAgICBpZiAoIHJjICE9IFg4NkVNVUxfT0tBWSApCisgICAgICAgICpyZXBzID0gMDsK KworICAgIHJldHVybiByYzsKK30KKworc3RhdGljIGludCBfZnV6el9yZXBfd3JpdGUoY29uc3Qg Y2hhciAqd2h5LCB1bnNpZ25lZCBsb25nICpyZXBzKQoreworICAgIGludCByYyA9IG1heWJlX2Zh aWwod2h5LCB0cnVlKTsKKworICAgIC8qIEluZGljYXRlIHdlIGhhdmVuJ3QgZG9uZSBhbnkgd29y ayBpZiBlbXVsYXRpb24gaGFzIGZhaWxlZCAqLworICAgIGlmICggcmMgIT0gWDg2RU1VTF9PS0FZ ICkKKyAgICAgICAgKnJlcHMgPSAwOworCisgICAgcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50 IGZ1enpfcmVwX2lucygKKyAgICB1aW50MTZfdCBzcmNfcG9ydCwKKyAgICBlbnVtIHg4Nl9zZWdt ZW50IGRzdF9zZWcsCisgICAgdW5zaWduZWQgbG9uZyBkc3Rfb2Zmc2V0LAorICAgIHVuc2lnbmVk IGludCBieXRlc19wZXJfcmVwLAorICAgIHVuc2lnbmVkIGxvbmcgKnJlcHMsCisgICAgc3RydWN0 IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpCit7CisgICAgcmV0dXJuIF9mdXp6X3JlcF9yZWFkKCJy ZXBfaW4iLCByZXBzKTsKK30KKworc3RhdGljIGludCBmdXp6X3JlcF9tb3ZzKAorICAgIGVudW0g eDg2X3NlZ21lbnQgc3JjX3NlZywKKyAgICB1bnNpZ25lZCBsb25nIHNyY19vZmZzZXQsCisgICAg ZW51bSB4ODZfc2VnbWVudCBkc3Rfc2VnLAorICAgIHVuc2lnbmVkIGxvbmcgZHN0X29mZnNldCwK KyAgICB1bnNpZ25lZCBpbnQgYnl0ZXNfcGVyX3JlcCwKKyAgICB1bnNpZ25lZCBsb25nICpyZXBz LAorICAgIHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KQoreworICAgIHJldHVybiBfZnV6 el9yZXBfcmVhZCgicmVwX21vdnMiLCByZXBzKTsKK30KKworc3RhdGljIGludCBmdXp6X3JlcF9v dXRzKAorICAgIGVudW0geDg2X3NlZ21lbnQgc3JjX3NlZywKKyAgICB1bnNpZ25lZCBsb25nIHNy Y19vZmZzZXQsCisgICAgdWludDE2X3QgZHN0X3BvcnQsCisgICAgdW5zaWduZWQgaW50IGJ5dGVz X3Blcl9yZXAsCisgICAgdW5zaWduZWQgbG9uZyAqcmVwcywKKyAgICBzdHJ1Y3QgeDg2X2VtdWxh dGVfY3R4dCAqY3R4dCkKK3sKKyAgICByZXR1cm4gX2Z1enpfcmVwX3dyaXRlKCJyZXBfb3V0cyIs IHJlcHMpOworfQorCitzdGF0aWMgaW50IGZ1enpfcmVwX3N0b3MoCisgICAgdm9pZCAqcF9kYXRh LAorICAgIGVudW0geDg2X3NlZ21lbnQgc2VnLAorICAgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAor ICAgIHVuc2lnbmVkIGludCBieXRlc19wZXJfcmVwLAorICAgIHVuc2lnbmVkIGxvbmcgKnJlcHMs CisgICAgc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpCit7CisgICAgcmV0dXJuIF9mdXp6 X3JlcF93cml0ZSgicmVwX3N0b3MiLCByZXBzKTsKIH0KIAogc3RhdGljIGludCBmdXp6X3dyaXRl KApAQCAtNjUsNyArMjAxLDcgQEAgc3RhdGljIGludCBmdXp6X3dyaXRlKAogICAgIHVuc2lnbmVk IGludCBieXRlcywKICAgICBzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCkKIHsKLSAgICBy ZXR1cm4gWDg2RU1VTF9PS0FZOworICAgIHJldHVybiBtYXliZV9mYWlsKCJ3cml0ZSIsIHRydWUp OwogfQogCiBzdGF0aWMgaW50IGZ1enpfY21weGNoZygKQEAgLTc2LDE4ICsyMTIsMjk0IEBAIHN0 YXRpYyBpbnQgZnV6el9jbXB4Y2hnKAogICAgIHVuc2lnbmVkIGludCBieXRlcywKICAgICBzdHJ1 Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCkKIHsKLSAgICByZXR1cm4gWDg2RU1VTF9PS0FZOwor ICAgIHJldHVybiBtYXliZV9mYWlsKCJjbXB4Y2hnIiwgdHJ1ZSk7Cit9CisKK3N0YXRpYyBpbnQg ZnV6el9pbnZscGcoCisgICAgZW51bSB4ODZfc2VnbWVudCBzZWcsCisgICAgdW5zaWduZWQgbG9u ZyBvZmZzZXQsCisgICAgc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpCit7CisgICAgcmV0 dXJuIG1heWJlX2ZhaWwoImludmxwZyIsIGZhbHNlKTsKK30KKworc3RhdGljIGludCBmdXp6X3di aW52ZCgKKyAgICBzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCkKK3sKKyAgICByZXR1cm4g bWF5YmVfZmFpbCgid2JpbnZkIiwgdHJ1ZSk7Cit9CisKK3N0YXRpYyBpbnQgZnV6el93cml0ZV9p bygKKyAgICB1bnNpZ25lZCBpbnQgcG9ydCwKKyAgICB1bnNpZ25lZCBpbnQgYnl0ZXMsCisgICAg dW5zaWduZWQgbG9uZyB2YWwsCisgICAgc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpCit7 CisgICAgcmV0dXJuIG1heWJlX2ZhaWwoIndyaXRlX2lvIiwgdHJ1ZSk7Cit9CisKK3N0YXRpYyBp bnQgZnV6el9jcHVpZCgKKyAgICB1aW50MzJfdCBsZWFmLAorICAgIHVpbnQzMl90IHN1YmxlYWYs CisgICAgc3RydWN0IGNwdWlkX2xlYWYgKnJlcywKKyAgICBzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4 dCAqY3R4dCkKK3sKKyAgICByZXR1cm4gZW11bF90ZXN0X2NwdWlkKGxlYWYsIHN1YmxlYWYsIHJl cywgY3R4dCk7Cit9CisKK3N0YXRpYyBpbnQgZnV6el9yZWFkX3NlZ21lbnQoCisgICAgZW51bSB4 ODZfc2VnbWVudCBzZWcsCisgICAgc3RydWN0IHNlZ21lbnRfcmVnaXN0ZXIgKnJlZywKKyAgICBz dHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCkKK3sKKyAgICBpbnQgcmM7CisKKyAgICBpZiAo IHNlZyA+IFNFR19OVU0gKQorICAgICAgICByZXR1cm4gWDg2RU1VTF9VTkhBTkRMRUFCTEU7CisK KyAgICByYyA9IG1heWJlX2ZhaWwoInJlYWRfc2VnbWVudCIsIHRydWUpOworCisgICAgaWYgKCBy YyA9PSBYODZFTVVMX09LQVkgKQorICAgICAgICBtZW1jcHkocmVnLCBpbnB1dC5zZWdtZW50cytz ZWcsIHNpemVvZihzdHJ1Y3Qgc2VnbWVudF9yZWdpc3RlcikpOworCisgICAgcmV0dXJuIHJjOwor fQorCitzdGF0aWMgaW50IGZ1enpfd3JpdGVfc2VnbWVudCgKKyAgICBlbnVtIHg4Nl9zZWdtZW50 IHNlZywKKyAgICBjb25zdCBzdHJ1Y3Qgc2VnbWVudF9yZWdpc3RlciAqcmVnLAorICAgIHN0cnVj dCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KQoreworICAgIGludCByYzsKKworICAgIGlmICggc2Vn ID4gU0VHX05VTSApCisgICAgICAgIHJldHVybiBYODZFTVVMX1VOSEFORExFQUJMRTsKKworICAg IHJjID0gbWF5YmVfZmFpbCgid3JpdGVfc2VnbWVudCIsIHRydWUpOworCisgICAgaWYgKCByYyA9 PSBYODZFTVVMX09LQVkgKQorICAgICAgICBtZW1jcHkoaW5wdXQuc2VnbWVudHMrc2VnLCByZWcs IHNpemVvZihzdHJ1Y3Qgc2VnbWVudF9yZWdpc3RlcikpOworCisgICAgcmV0dXJuIHJjOworfQor CitzdGF0aWMgaW50IGZ1enpfcmVhZF9jcigKKyAgICB1bnNpZ25lZCBpbnQgcmVnLAorICAgIHVu c2lnbmVkIGxvbmcgKnZhbCwKKyAgICBzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCkKK3sK KyAgICBpbnQgcmM7CisKKyAgICBpZiAoIHJlZyA+IEFSUkFZX1NJWkUoaW5wdXQuY3IpICkKKyAg ICAgICAgcmV0dXJuIFg4NkVNVUxfVU5IQU5ETEVBQkxFOworCisgICAgcmMgPSBtYXliZV9mYWls KCJyZWFkX2NyIiwgdHJ1ZSk7CisKKyAgICBpZiAoIHJjID09IFg4NkVNVUxfT0tBWSApCisgICAg ICAgICp2YWwgPSBpbnB1dC5jcltyZWddOworCisgICAgcmV0dXJuIHJjOworfQorCitzdGF0aWMg aW50IGZ1enpfd3JpdGVfY3IoCisgICAgdW5zaWduZWQgaW50IHJlZywKKyAgICB1bnNpZ25lZCBs b25nIHZhbCwKKyAgICBzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCkKK3sKKyAgICBpbnQg cmM7CisKKyAgICBpZiAoIHJlZyA+IEFSUkFZX1NJWkUoaW5wdXQuY3IpICkKKyAgICAgICAgcmV0 dXJuIFg4NkVNVUxfVU5IQU5ETEVBQkxFOworCisgICAgcmMgPSBtYXliZV9mYWlsKCJ3cml0ZV9j ciIsIHRydWUpOworCisgICAgaWYgKCByYyA9PSBYODZFTVVMX09LQVkgKQorICAgICAgICBpbnB1 dC5jcltyZWddID0gdmFsOworCisgICAgcmV0dXJuIHJjOworfQorCitlbnVtIHsKKyAgICBNU1JJ X0lBMzJfU1lTRU5URVJfQ1MsCisgICAgTVNSSV9JQTMyX1NZU0VOVEVSX0VTUCwKKyAgICBNU1JJ X0lBMzJfU1lTRU5URVJfRUlQLAorICAgIE1TUklfRUZFUiwKKyAgICBNU1JJX1NUQVIsCisgICAg TVNSSV9MU1RBUiwKKyAgICBNU1JJX0NTVEFSLAorICAgIE1TUklfU1lTQ0FMTF9NQVNLCit9Owor Citjb25zdCBzdGF0aWMgdW5zaWduZWQgaW50IG1zcl9pbmRleFtNU1JfSU5ERVhfTUFYXSA9IHsK KyAgICBbTVNSSV9JQTMyX1NZU0VOVEVSX0NTXSAgPSBNU1JfSUEzMl9TWVNFTlRFUl9DUywKKyAg ICBbTVNSSV9JQTMyX1NZU0VOVEVSX0VTUF0gPSBNU1JfSUEzMl9TWVNFTlRFUl9FU1AsCisgICAg W01TUklfSUEzMl9TWVNFTlRFUl9FSVBdID0gTVNSX0lBMzJfU1lTRU5URVJfRUlQLAorICAgIFtN U1JJX0VGRVJdICAgICAgICAgICAgICA9IE1TUl9FRkVSLAorICAgIFtNU1JJX1NUQVJdICAgICAg ICAgICAgICA9IE1TUl9TVEFSLAorICAgIFtNU1JJX0xTVEFSXSAgICAgICAgICAgICA9IE1TUl9M U1RBUiwKKyAgICBbTVNSSV9DU1RBUl0gICAgICAgICAgICAgPSBNU1JfQ1NUQVIsCisgICAgW01T UklfU1lTQ0FMTF9NQVNLXSAgICAgID0gTVNSX1NZU0NBTExfTUFTSworfTsKKworc3RhdGljIGlu dCBfZnV6el9yZWFkX21zcigKKyAgICB1bnNpZ25lZCBpbnQgcmVnLAorICAgIHVpbnQ2NF90ICp2 YWwsCisgICAgc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpCit7CisgICAgdW5zaWduZWQg aW50IGlkeDsKKworICAgIHN3aXRjaCAoIHJlZyApCisgICAgeworICAgIGNhc2UgTVNSX1RTQ19B VVg6CisgICAgY2FzZSBNU1JfSUEzMl9UU0M6CisgICAgICAgIHJldHVybiBkYXRhX3JlYWQoInJl YWRfbXNyIiwgdmFsLCBzaXplb2YoKnZhbCkpOworICAgIGNhc2UgTVNSX0VGRVI6CisgICAgICAg ICp2YWwgPSBpbnB1dC5tc3JbTVNSSV9FRkVSXTsKKyAgICAgICAgKnZhbCAmPSB+RUZFUl9MTUE7 CisgICAgICAgIGlmICggKCp2YWwgJiBFRkVSX0xNRSkgJiYgKGlucHV0LmNyWzRdICYgWDg2X0NS NF9QQUUpICYmCisgICAgICAgICAgICAgKGlucHV0LmNyWzBdICYgWDg2X0NSMF9QRykgKQorICAg ICAgICB7CisgICAgICAgICAgICBwcmludGYoIlNldHRpbmcgRUZFUl9MTUFcbiIpOworICAgICAg ICAgICAgKnZhbCB8PSBFRkVSX0xNQTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gWDg2RU1V TF9PS0FZOworICAgIH0KKworICAgIGZvciAoIGlkeCA9IDA7IGlkeCA8IE1TUl9JTkRFWF9NQVg7 IGlkeCsrICkKKyAgICB7CisgICAgICAgIGlmICggbXNyX2luZGV4W2lkeF0gPT0gcmVnICkKKyAg ICAgICAgeworICAgICAgICAgICAgKnZhbCA9IGlucHV0Lm1zcltpZHhdOworICAgICAgICAgICAg cmV0dXJuIFg4NkVNVUxfT0tBWTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBYODZF TVVMX0VYQ0VQVElPTjsKK30KKworc3RhdGljIGludCBmdXp6X3JlYWRfbXNyKAorICAgIHVuc2ln bmVkIGludCByZWcsCisgICAgdWludDY0X3QgKnZhbCwKKyAgICBzdHJ1Y3QgeDg2X2VtdWxhdGVf Y3R4dCAqY3R4dCkgeworICAgIGludCByYzsKKworICAgIHJjID0gbWF5YmVfZmFpbCgicmVhZF9t c3IiLCB0cnVlKTsKKyAgICBpZiAoIHJjICE9IFg4NkVNVUxfT0tBWSApCisgICAgICAgIHJldHVy biByYzsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBfZnV6el9yZWFkX21zcihyZWcsIHZhbCwg Y3R4dCk7Cit9CisKK3N0YXRpYyBpbnQgZnV6el93cml0ZV9tc3IoCisgICAgdW5zaWduZWQgaW50 IHJlZywKKyAgICB1aW50NjRfdCB2YWwsCisgICAgc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0 eHQpCit7CisgICAgdW5zaWduZWQgaW50IGlkeDsKKyAgICBpbnQgcmM7CisKKyAgICByYyA9IG1h eWJlX2ZhaWwoIndyaXRlX21zIiwgdHJ1ZSk7CisgICAgaWYgKCByYyAhPSBYODZFTVVMX09LQVkg KQorICAgICAgICByZXR1cm4gcmM7CisKKyAgICBzd2l0Y2ggKCByZWcgKQorICAgIHsKKyAgICBj YXNlIE1TUl9UU0NfQVVYOgorICAgIGNhc2UgTVNSX0lBMzJfVFNDOgorICAgICAgICByZXR1cm4g WDg2RU1VTF9PS0FZOworICAgIH0KKworICAgIGZvciAoIGlkeCA9IDA7IGlkeCA8IE1TUl9JTkRF WF9NQVg7IGlkeCsrICkKKyAgICB7CisgICAgICAgIGlmICggbXNyX2luZGV4W2lkeF0gPT0gcmVn ICkKKyAgICAgICAgeworICAgICAgICAgICAgaW5wdXQubXNyW2lkeF0gPSB2YWw7CisgICAgICAg ICAgICByZXR1cm4gWDg2RU1VTF9PS0FZOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJu IFg4NkVNVUxfRVhDRVBUSU9OOwogfQogCisjZGVmaW5lIFNFVChoKSAuaCA9IGZ1enpfIyNoCiBz dGF0aWMgc3RydWN0IHg4Nl9lbXVsYXRlX29wcyBmdXp6X2VtdWxvcHMgPSB7Ci0gICAgLnJlYWQg ICAgICAgPSBmdXp6X3JlYWQsCi0gICAgLmluc25fZmV0Y2ggPSBmdXp6X2ZldGNoLAotICAgIC53 cml0ZSAgICAgID0gZnV6el93cml0ZSwKLSAgICAuY21weGNoZyAgICA9IGZ1enpfY21weGNoZywK LSAgICAuY3B1aWQgICAgICA9IGVtdWxfdGVzdF9jcHVpZCwKLSAgICAucmVhZF9jciAgICA9IGVt dWxfdGVzdF9yZWFkX2NyLAorICAgIFNFVChyZWFkKSwKKyAgICBTRVQoaW5zbl9mZXRjaCksCisg ICAgU0VUKHdyaXRlKSwKKyAgICBTRVQoY21weGNoZyksCisgICAgU0VUKHJlcF9pbnMpLAorICAg IFNFVChyZXBfb3V0cyksCisgICAgU0VUKHJlcF9tb3ZzKSwKKyAgICBTRVQocmVwX3N0b3MpLAor ICAgIFNFVChyZWFkX3NlZ21lbnQpLAorICAgIFNFVCh3cml0ZV9zZWdtZW50KSwKKyAgICBTRVQo cmVhZF9pbyksCisgICAgU0VUKHdyaXRlX2lvKSwKKyAgICBTRVQocmVhZF9jciksCisgICAgU0VU KHdyaXRlX2NyKSwKKyAgICBTRVQocmVhZF9tc3IpLAorICAgIFNFVCh3cml0ZV9tc3IpLAorICAg IFNFVCh3YmludmQpLAorICAgIFNFVChjcHVpZCksCisgICAgU0VUKGludmxwZyksCiAgICAgLmdl dF9mcHUgICAgPSBlbXVsX3Rlc3RfZ2V0X2ZwdSwKIH07CisjdW5kZWYgU0VUCisKK3N0YXRpYyB2 b2lkIHNldHVwX2ZwdV9leGNlcHRpb25faGFuZGxlcih2b2lkKQoreworICAgIC8qIEZJWE1FIC0g anVzdCBkaXNhYmxlIGV4Y2VwdGlvbnMgZm9yIG5vdyAqLworICAgIHVuc2lnbmVkIGxvbmcgYTsK KworICAgIGFzbSB2b2xhdGlsZSAoICJmbmNsZXgiKTsKKyAgICBhPTB4MzdmOyAgICAgICAgICAg ICAgICAgICAgLyogRkNXX0RFRkFVTFQgaW4gWGVuICovCisgICAgYXNtIHZvbGF0aWxlICggImZs ZGN3ICUwIiA6OiAibSIgKGEpKTsKKyAgICBhPTB4MWY4MDsgICAgICAgICAgICAgICAgICAgLyog TVhDU1JfREVGQVVMVCBpbiBYZW4gKi8KKyAgICBhc20gdm9sYXRpbGUgKCAibGRteGNzciAlMCIg OjogIm0iIChhKSApOworfQorCitzdGF0aWMgdm9pZCBkdW1wX3N0YXRlKHN0cnVjdCB4ODZfZW11 bGF0ZV9jdHh0ICpjdHh0KQoreworICAgIHN0cnVjdCBjcHVfdXNlcl9yZWdzICpyZWdzID0gY3R4 dC0+cmVnczsKKyAgICB1aW50NjRfdCB2YWw7CisKKyAgICBwcmludGYoIiAtLSBTdGF0ZSAtLSBc biIpOworICAgIHByaW50ZigiYWRkciAvIHNwIHNpemU6ICVkIC8gJWRcbiIsIGN0eHQtPmFkZHJf c2l6ZSwgY3R4dC0+c3Bfc2l6ZSk7CisgICAgcHJpbnRmKCIgY3IwOiAlbHhcbiIsIGlucHV0LmNy WzBdKTsKKyAgICBwcmludGYoIiBjcjM6ICVseFxuIiwgaW5wdXQuY3JbM10pOworICAgIHByaW50 ZigiIGNyNDogJWx4XG4iLCBpbnB1dC5jcls0XSk7CisKKyAgICBwcmludGYoIiByaXA6ICUiUFJJ eDY0IlxuIiwgcmVncy0+cmlwKTsKKworICAgIF9mdXp6X3JlYWRfbXNyKE1TUl9FRkVSLCAmdmFs LCBjdHh0KTsKKyAgICBwcmludGYoIkVGRVI6ICUiUFJJeDY0IlxuIiwgdmFsKTsKK30KKworc3Rh dGljIGJvb2wgbG9uZ19tb2RlX2FjdGl2ZShzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCkK K3sKKyAgICB1aW50NjRfdCB2YWw7CisKKyAgICBpZiAoIF9mdXp6X3JlYWRfbXNyKE1TUl9FRkVS LCAmdmFsLCBjdHh0KSAhPSBYODZFTVVMX09LQVkgKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK KyAgICByZXR1cm4gdmFsICYgRUZFUl9MTUE7Cit9CisKK3N0YXRpYyBib29sIGluX2xvbmdtb2Rl KHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KQoreworICAgIHJldHVybiBsb25nX21vZGVf YWN0aXZlKGN0eHQpICYmIGlucHV0LnNlZ21lbnRzW3g4Nl9zZWdfY3NdLmF0dHIuZmllbGRzLmw7 Cit9CisKK3N0YXRpYyB2b2lkIHNldF9zaXplcyhzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4 dCkKK3sKKyAgICBpZiAoIGluX2xvbmdtb2RlKGN0eHQpICkKKyAgICAgICAgY3R4dC0+YWRkcl9z aXplID0gY3R4dC0+c3Bfc2l6ZSA9IDY0OworICAgIGVsc2UKKyAgICB7CisgICAgICAgIGN0eHQt PmFkZHJfc2l6ZSA9IGlucHV0LnNlZ21lbnRzW3g4Nl9zZWdfY3NdLmF0dHIuZmllbGRzLmRiID8g MzIgOiAxNjsKKyAgICAgICAgY3R4dC0+c3Bfc2l6ZSAgID0gaW5wdXQuc2VnbWVudHNbeDg2X3Nl Z19zc10uYXR0ci5maWVsZHMuZGIgPyAzMiA6IDE2OworICAgIH0KK30KIAogI2RlZmluZSBDQU5P TklDQUxJWkUoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBkbyB7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCkBAIC0x MDAsMTAgKzUxMiwxNTAgQEAgc3RhdGljIHN0cnVjdCB4ODZfZW11bGF0ZV9vcHMgZnV6el9lbXVs b3BzID0gewogICAgICAgICAoeCkgPSBfeTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCiAgICAgfSB3aGlsZSggMCApCiAKLSNkZWZpbmUgQUREUl9TSVpFX1NISUZUIDYw Ci0jZGVmaW5lIEFERFJfU0laRV82NCAoMlVMTCA8PCBBRERSX1NJWkVfU0hJRlQpCi0jZGVmaW5l IEFERFJfU0laRV8zMiAoMVVMTCA8PCBBRERSX1NJWkVfU0hJRlQpCi0jZGVmaW5lIEFERFJfU0la RV8xNiAoMCkKKy8qIEV4cGVjdHMgYml0bWFwIGFuZCByZWdzIHRvIGJlIGRlZmluZWQgKi8KKyNk ZWZpbmUgQ0FOT05JQ0FMSVpFX01BWUJFKHJlZykgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg ICBpZiAoICEoYml0bWFwICYgKDEgPDwgQ0FOT05JQ0FMSVpFXyMjcmVnKSkgKSAgICAgIFwKKyAg ICAgICAgQ0FOT05JQ0FMSVpFKHJlZ3MtPnJlZyk7ICAgICAgICAgICAgICAgICAgICAgIFwKKwor ZW51bSB7CisgICAgSE9PS19yZWFkLAorICAgIEhPT0tfaW5zbl9mZXRjaCwKKyAgICBIT09LX3dy aXRlLAorICAgIEhPT0tfY21weGNoZywKKyAgICBIT09LX3JlcF9pbnMsCisgICAgSE9PS19yZXBf b3V0cywKKyAgICBIT09LX3JlcF9tb3ZzLAorICAgIEhPT0tfcmVwX3N0b3MsCisgICAgSE9PS19y ZWFkX3NlZ21lbnQsCisgICAgSE9PS193cml0ZV9zZWdtZW50LAorICAgIEhPT0tfcmVhZF9pbywK KyAgICBIT09LX3dyaXRlX2lvLAorICAgIEhPT0tfcmVhZF9jciwKKyAgICBIT09LX3dyaXRlX2Ny LAorICAgIEhPT0tfcmVhZF9kciwKKyAgICBIT09LX3dyaXRlX2RyLAorICAgIEhPT0tfcmVhZF9t c3IsCisgICAgSE9PS193cml0ZV9tc3IsCisgICAgSE9PS193YmludmQsCisgICAgSE9PS19jcHVp ZCwKKyAgICBIT09LX2luamVjdF9od19leGNlcHRpb24sCisgICAgSE9PS19pbmplY3Rfc3dfaW50 ZXJydXB0LAorICAgIEhPT0tfZ2V0X2ZwdSwKKyAgICBIT09LX3B1dF9mcHUsCisgICAgSE9PS19p bnZscGcsCisgICAgSE9PS192bWZ1bmMsCisgICAgT1BUSU9OX3N3aW50X2VtdWxhdGlvbiwgLyog VHdvIGJpdHMgKi8KKyAgICBDQU5PTklDQUxJWkVfcmlwID0gT1BUSU9OX3N3aW50X2VtdWxhdGlv biArIDIsCisgICAgQ0FOT05JQ0FMSVpFX3JzcCwKKyAgICBDQU5PTklDQUxJWkVfcmJwCit9Owor CisvKiBFeHBlY3RzIGJpdG1hcCB0byBiZSBkZWZpbmVkICovCisjZGVmaW5lIE1BWUJFX0RJU0FC TEVfSE9PSyhoKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmICggYml0bWFwICYg KDEgPDwgSE9PS18jI2gpICkgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGZ1enpfZW11 bG9wcy5oID0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBwcmludGYo IkRpc2FibGluZyBob29rICIjaCJcbiIpOyAgICAgICAgICAgICAgIFwKKyAgICB9CisKK3N0YXRp YyB2b2lkIGRpc2FibGVfaG9va3Modm9pZCkKK3sKKyAgICB1bnNpZ25lZCBsb25nIGJpdG1hcCA9 IGlucHV0Lm9wdGlvbnM7CisKKyAgICAvKiBTZWUgYWxzbyBzYW5pdGl6ZV9pbnB1dCwgc29tZSBo b29rcyBjYW4ndCBiZSBkaXNhYmxlZC4gKi8KKyAgICBNQVlCRV9ESVNBQkxFX0hPT0socmVhZCk7 CisgICAgTUFZQkVfRElTQUJMRV9IT09LKGluc25fZmV0Y2gpOworICAgIE1BWUJFX0RJU0FCTEVf SE9PSyh3cml0ZSk7CisgICAgTUFZQkVfRElTQUJMRV9IT09LKGNtcHhjaGcpOworICAgIE1BWUJF X0RJU0FCTEVfSE9PSyhyZXBfaW5zKTsKKyAgICBNQVlCRV9ESVNBQkxFX0hPT0socmVwX291dHMp OworICAgIE1BWUJFX0RJU0FCTEVfSE9PSyhyZXBfbW92cyk7CisgICAgTUFZQkVfRElTQUJMRV9I T09LKHJlcF9zdG9zKTsKKyAgICBNQVlCRV9ESVNBQkxFX0hPT0socmVhZF9zZWdtZW50KTsKKyAg ICBNQVlCRV9ESVNBQkxFX0hPT0sod3JpdGVfc2VnbWVudCk7CisgICAgTUFZQkVfRElTQUJMRV9I T09LKHJlYWRfaW8pOworICAgIE1BWUJFX0RJU0FCTEVfSE9PSyh3cml0ZV9pbyk7CisgICAgTUFZ QkVfRElTQUJMRV9IT09LKHJlYWRfY3IpOworICAgIE1BWUJFX0RJU0FCTEVfSE9PSyh3cml0ZV9j cik7CisgICAgTUFZQkVfRElTQUJMRV9IT09LKHJlYWRfbXNyKTsKKyAgICBNQVlCRV9ESVNBQkxF X0hPT0sod3JpdGVfbXNyKTsKKyAgICBNQVlCRV9ESVNBQkxFX0hPT0sod2JpbnZkKTsKKyAgICBN QVlCRV9ESVNBQkxFX0hPT0soY3B1aWQpOworICAgIE1BWUJFX0RJU0FCTEVfSE9PSyhnZXRfZnB1 KTsKKyAgICBNQVlCRV9ESVNBQkxFX0hPT0soaW52bHBnKTsKK30KKworc3RhdGljIHZvaWQgc2V0 X3N3aW50X3N1cHBvcnQoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpCit7CisgICAgdW5z aWduZWQgaW50IHN3aW50X29wdCA9IChpbnB1dC5vcHRpb25zID4+IE9QVElPTl9zd2ludF9lbXVs YXRpb24pICYgMzsKKworICAgIHN0YXRpYyBjb25zdCBlbnVtIHg4Nl9zd2ludF9lbXVsYXRpb24g bWFwWzRdID0geworICAgICAgICB4ODZfc3dpbnRfZW11bGF0ZV9ub25lLAorICAgICAgICB4ODZf c3dpbnRfZW11bGF0ZV9ub25lLAorICAgICAgICB4ODZfc3dpbnRfZW11bGF0ZV9pY2VicCwKKyAg ICAgICAgeDg2X3N3aW50X2VtdWxhdGVfYWxsIH07CisKKyAgICBjdHh0LT5zd2ludF9lbXVsYXRl ID0gbWFwW3N3aW50X29wdF07Cit9CisKKy8qCisgKiBDb25zdHJhaW4gaW5wdXQgdG8gYXJjaGl0 ZWN0dXJhbGx5LXBvc3NpYmxlIHN0YXRlcyB3aGVyZQorICogdGhlIGVtdWxhdG9yIHJlbGllcyBv biB0aGVzZQorICoKKyAqIEluIGdlbmVyYWwgd2Ugd2FudCB0aGUgZW11bGF0b3IgdG8gYmUgYXMg YWJzb2x1dGVseSByb2J1c3QgYXMKKyAqIHBvc3NpYmxlOyB3aGljaCBtZWFucyB0aGF0IHdlIHdh bnQgdG8gbWluaW1pemUgdGhlIG51bWJlciBvZiB0aGluZ3MKKyAqIGl0IGFzc3VtZXMgYWJvdXQg dGhlIGlucHV0IHN0YXRlLiAgVGVzaW5nIHRoaXMgbWVhbnMgbWluaW1pemluZyBhbmQKKyAqIHJl bW92aW5nIGFzIG11Y2ggb2YgdGhlIGlucHV0IGNvbnN0cmFpbnRzIGFzIHBvc3NpYmxlLgorICoK KyAqIFNvIHdlIG9ubHkgYWRkIGNvbnN0cmFpbnRzIHRoYXQgKGluIGdlbmVyYWwpIGhhdmUgYmVl biBwcm92ZW4gdG8KKyAqIGNhdXNlIGNyYXNoZXMgaW4gdGhlIGVtdWxhdG9yLgorICoKKyAqIEZv ciBmdXR1cmUgcmVmZXJlbmNlOiBvdGhlciBjb25zdHJhaW50cyB3aGljaCBtaWdodCBiZSBuZWNl c3NhcnkgYXQKKyAqIHNvbWUgcG9pbnQ6CisgKgorICogLSBFRkVSLkxNQSA9PiAhRUZMQUdTLk5U CisgKiAtIEluIFZNODYgbW9kZSAoYW5kIHJlYWwgbW9kZT8pLCBmb3JjZSBzZWdtZW50Li4uCisg KiAgLSAuLi5hY2Nlc3MgcmlnaHRzIHRvIDB4ZjMKKyAqICAtIC4uLmxpbWl0cyB0byAweGZmZmYK KyAqICAtIC4uLmJhc2VzIHRvIGJlbG93IDFNYiwgMTYtYnl0ZSBhbGlnbmVkCisgKiAgLSAuLi5z ZWxlY3RvcnMgdG8gKGJhc2UgPj4gNCkKKyAqLwordm9pZCBzYW5pdGl6ZV9pbnB1dChzdHJ1Y3Qg eDg2X2VtdWxhdGVfY3R4dCAqY3R4dCkgeworICAgIHN0cnVjdCBjcHVfdXNlcl9yZWdzICpyZWdz ID0gJmlucHV0LnJlZ3M7CisgICAgdW5zaWduZWQgbG9uZyBiaXRtYXAgPSBpbnB1dC5vcHRpb25z OworCisgICAgLyogU29tZSBob29rcyBjYW4ndCBiZSBkaXNhYmxlZC4gKi8KKyAgICBpbnB1dC5v cHRpb25zICY9IH4oKDE8PEhPT0tfcmVhZCl8KDE8PEhPT0tfaW5zbl9mZXRjaCkpOworCisgICAg LyogWmVybyAncHJpdmF0ZScgZW50cmllcyAqLworICAgIHJlZ3MtPmVycm9yX2NvZGUgPSAwOwor ICAgIHJlZ3MtPmVudHJ5X3ZlY3RvciA9IDA7CisKKyAgICBDQU5PTklDQUxJWkVfTUFZQkUocmlw KTsKKyAgICBDQU5PTklDQUxJWkVfTUFZQkUocnNwKTsKKyAgICBDQU5PTklDQUxJWkVfTUFZQkUo cmJwKTsKKworICAgIC8qCisgICAgICogQ1IwLlBHIGNhbid0IGJlIHNldCBpZiBDUjAuUEUgaXNu J3Qgc2V0LiAgU2V0IGlzIG1vcmUgaW50ZXJlc3RpbmcsIHNvCisgICAgICogc2V0IFBFIGlmIFBH IGlzIHNldC4KKyAgICAgKi8KKyAgICBpZiAoIGlucHV0LmNyWzBdICYgWDg2X0NSMF9QRyApCisg ICAgICAgIGlucHV0LmNyWzBdIHw9IFg4Nl9DUjBfUEU7CisKKyAgICAvKgorICAgICAqIEVGTEFH Uy5WTSBub3QgYXZhaWxhYmxlIGluIGxvbmcgbW9kZQorICAgICAqLworICAgIGlmICggbG9uZ19t b2RlX2FjdGl2ZShjdHh0KSApCisgICAgICAgIHJlZ3MtPnJmbGFncyAmPSB+WDg2X0VGTEFHU19W TTsKKworICAgIC8qCisgICAgICogRUZMQUdTLlZNIGltcGxpZXMgMTYtYml0IG1vZGUKKyAgICAg Ki8KKyAgICBpZiAoIHJlZ3MtPnJmbGFncyAmIFg4Nl9FRkxBR1NfVk0gKSB7CisgICAgICAgIGlu cHV0LnNlZ21lbnRzW3g4Nl9zZWdfY3NdLmF0dHIuZmllbGRzLmRiID0gMDsKKyAgICAgICAgaW5w dXQuc2VnbWVudHNbeDg2X3NlZ19zc10uYXR0ci5maWVsZHMuZGIgPSAwOworICAgIH0KK30KIAog aW50IExMVk1GdXp6ZXJUZXN0T25lSW5wdXQoY29uc3QgdWludDhfdCAqZGF0YV9wLCBzaXplX3Qg c2l6ZSkKIHsKQEAgLTExNCwxMCArNjY2LDcgQEAgaW50IExMVk1GdXp6ZXJUZXN0T25lSW5wdXQo Y29uc3QgdWludDhfdCAqZGF0YV9wLCBzaXplX3Qgc2l6ZSkKICAgICAgICAgLmFkZHJfc2l6ZSA9 IDggKiBzaXplb2Yodm9pZCAqKSwKICAgICAgICAgLnNwX3NpemUgPSA4ICogc2l6ZW9mKHZvaWQg KiksCiAgICAgfTsKLSAgICB1bnNpZ25lZCBpbnQgbnIgPSAwOwogICAgIGludCByYzsKLSAgICB1 bnNpZ25lZCBpbnQgeDsKLSAgICBjb25zdCB1aW50OF90ICpwID0gZGF0YV9wOwogCiAgICAgc3Rh Y2tfZXhlYyA9IGVtdWxfdGVzdF9tYWtlX3N0YWNrX2V4ZWN1dGFibGUoKTsKICAgICBpZiAoICFz dGFja19leGVjICkKQEAgLTEyNyw1MiArNjc2LDM5IEBAIGludCBMTFZNRnV6emVyVGVzdE9uZUlu cHV0KGNvbnN0IHVpbnQ4X3QgKmRhdGFfcCwgc2l6ZV90IHNpemUpCiAgICAgfQogCiAgICAgLyog UmVzZXQgYWxsIGdsb2JhbCBzdGF0ZSB2YXJpYWJsZXMgKi8KLSAgICBtZW1zZXQoZGF0YSwgMCwg c2l6ZW9mKGRhdGEpKTsKKyAgICBtZW1zZXQoJmlucHV0LCAwLCBzaXplb2YoaW5wdXQpKTsKICAg ICBkYXRhX2luZGV4ID0gMDsKLSAgICBkYXRhX21heCA9IDA7Ci0KLSAgICBuciA9IHNpemUgPCBz aXplb2YocmVncykgPyBzaXplIDogc2l6ZW9mKHJlZ3MpOworICAgIGRhdGFfbnVtID0gMDsKIAot ICAgIG1lbWNweSgmcmVncywgcCwgbnIpOwotICAgIHAgKz0gc2l6ZW9mKHJlZ3MpOworICAgIGlm ICggc2l6ZSA8PSBEQVRBX09GRlNFVCApCisgICAgeworICAgICAgICBwcmludGYoIklucHV0IHRv byBzbWFsbFxuIik7CisgICAgICAgIHJldHVybiAxOworICAgIH0KIAotICAgIGlmICggbnIgPCBz aXplICkKKyAgICBpZiAoIHNpemUgPiBzaXplb2YoaW5wdXQpICkKICAgICB7Ci0gICAgICAgIG1l bWNweShkYXRhLCBwLCBzaXplIC0gbnIpOwotICAgICAgICBkYXRhX21heCA9IHNpemUgLSBucjsK KyAgICAgICAgcHJpbnRmKCJJbnB1dCB0b28gbGFyZ2VcbiIpOworICAgICAgICByZXR1cm4gMTsK ICAgICB9CiAKLSAgICBjdHh0LmZvcmNlX3dyaXRlYmFjayA9IGZhbHNlOworICAgIG1lbWNweSgm aW5wdXQsIGRhdGFfcCwgc2l6ZSk7CiAKLSAgICAvKiBaZXJvICdwcml2YXRlJyBmaWVsZHMgKi8K LSAgICByZWdzLmVycm9yX2NvZGUgPSAwOwotICAgIHJlZ3MuZW50cnlfdmVjdG9yID0gMDsKKyAg ICBkYXRhX251bSA9IHNpemUgLSBEQVRBX09GRlNFVDsKIAotICAgIC8qIFVzZSB0aGUgdXBwZXIg Yml0cyBvZiByZWdzLmVpcCB0byBkZXRlcm1pbmUgYWRkcl9zaXplICovCi0gICAgeCA9IChyZWdz LnJpcCA+PiBBRERSX1NJWkVfU0hJRlQpICYgMHgzOwotICAgIGlmICggeCA9PSAzICkKLSAgICAg ICAgeCA9IDI7Ci0gICAgY3R4dC5hZGRyX3NpemUgPSAxNiA8PCB4OwotICAgIHByaW50ZigiYWRk cl9zaXplOiAlZFxuIiwgY3R4dC5hZGRyX3NpemUpOworICAgIHNhbml0aXplX2lucHV0KCZjdHh0 KTsKIAotICAgIC8qIFVzZSB0aGUgdXBwZXIgYml0IG9mIHJlZ3MucnNwIHRvIGRldGVybWluZSBz cF9zaXplIChpZiBhcHByb3ByaWF0ZSkgKi8KLSAgICBpZiAoIGN0eHQuYWRkcl9zaXplID09IDY0 ICkKLSAgICAgICAgY3R4dC5zcF9zaXplID0gNjQ7Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAg LyogSWYgYWRkcl9zaXplIGlzbid0IDY0LWJpdHMsIHNwX3NpemUgY2FuIG9ubHkgYmUgMTYgb3Ig MzIgYml0cyAqLwotICAgICAgICB4ID0gKHJlZ3MucnNwID4+IEFERFJfU0laRV9TSElGVCkgJiAw eDE7Ci0gICAgICAgIGN0eHQuc3Bfc2l6ZSA9IDE2IDw8IHg7Ci0gICAgfQotICAgIHByaW50Zigi c3Bfc2l6ZTogJWRcbiIsIGN0eHQuc3Bfc2l6ZSk7Ci0gICAgQ0FOT05JQ0FMSVpFKHJlZ3Mucmlw KTsKLSAgICBDQU5PTklDQUxJWkUocmVncy5yc3ApOwotICAgIENBTk9OSUNBTElaRShyZWdzLnJi cCk7CisgICAgZGlzYWJsZV9ob29rcygpOwogCi0gICAgLyogWmVybyBhbGwgc2VnbWVudHMgZm9y IG5vdyAqLwotICAgIHJlZ3MuY3MgPSByZWdzLnNzID0gcmVncy5lcyA9IHJlZ3MuZHMgPSByZWdz LmZzID0gcmVncy5ncyA9IDA7CisgICAgc2V0X3N3aW50X3N1cHBvcnQoJmN0eHQpOwogCiAgICAg ZG8geworICAgICAgICAvKiBGSVhNRTogVW50aWwgd2UgYWN0dWFsbHkgaW1wbGVtZW50IFNJR0ZQ RSBoYW5kbGluZyBwcm9wZXJseSAqLworICAgICAgICBzZXR1cF9mcHVfZXhjZXB0aW9uX2hhbmRs ZXIoKTsKKworICAgICAgICBzZXRfc2l6ZXMoJmN0eHQpOworICAgICAgICBkdW1wX3N0YXRlKCZj dHh0KTsKKwogICAgICAgICByYyA9IHg4Nl9lbXVsYXRlKCZjdHh0LCAmZnV6el9lbXVsb3BzKTsK ICAgICAgICAgcHJpbnRmKCJFbXVsYXRpb24gcmVzdWx0OiAlZFxuIiwgcmMpOwogICAgIH0gd2hp bGUgKCByYyA9PSBYODZFTVVMX09LQVkgKTsKLS0gCjIuMTEuMAoKCl9fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVu LWRldmVsQGxpc3RzLnhlbi5vcmcKaHR0cHM6Ly9saXN0cy54ZW4ub3JnL3hlbi1kZXZlbAo=