From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by sourceware.org (Postfix) with ESMTP id 338D13858016 for ; Wed, 28 Sep 2022 17:31:30 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 338D13858016 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=arm.com Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 5DDEB143D; Wed, 28 Sep 2022 10:31:36 -0700 (PDT) Received: from [10.57.1.111] (unknown [10.57.1.111]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 755853F792; Wed, 28 Sep 2022 10:31:28 -0700 (PDT) Content-Type: multipart/mixed; boundary="------------daCBCw4ig2ltCKlWPqDpT8jA" Message-ID: <29d958e5-364f-5784-5764-e9b5d364448a@arm.com> Date: Wed, 28 Sep 2022 18:31:05 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.13.1 Subject: Re: [PATCH] Teach vectorizer to deal with bitfield accesses (was: [RFC] Teach vectorizer to deal with bitfield reads) Content-Language: en-US To: Richard Biener Cc: Jakub Jelinek , Richard Sandiford , "gcc-patches@gcc.gnu.org" References: <4a6f2350-f070-1473-63a5-3232968d3a89@arm.com> <4ea91767-de43-9d30-5bd2-a9a0759760c7@arm.com> <69abe824-94f5-95b5-fb7f-6fa076973e05@arm.com> <8f805fb1-d4ae-b0e3-ff26-57fd2c1fc1f7@arm.com> <5c3e3af5-c502-fd5a-2792-4e0d1db405ef@arm.com> <42e266bd-7224-76b7-c782-c00063531917@arm.com> From: "Andre Vieira (lists)" In-Reply-To: <42e266bd-7224-76b7-c782-c00063531917@arm.com> X-Spam-Status: No, score=-20.7 required=5.0 tests=BAYES_00,BODY_8BITS,GIT_PATCH_0,KAM_DMARC_NONE,KAM_DMARC_STATUS,KAM_LAZY_DOMAIN_SECURITY,KAM_LOTSOFHASH,NICE_REPLY_A,SPF_HELO_NONE,SPF_NONE,TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: This is a multi-part message in MIME format. --------------daCBCw4ig2ltCKlWPqDpT8jA Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Made the change and also created the ChangeLogs. gcc/ChangeLog:         * tree-if-conv.cc (if_convertible_loop_p_1): Move ordering of loop bb's from here...         (tree_if_conversion): ... to here.  Also call bitfield lowering when appropriate.         (version_loop_for_if_conversion): Adapt to enable loop versioning when we only need         to lower bitfields.         (ifcvt_split_critical_edges): Relax condition of expected loop form as this is checked earlier.         (get_bitfield_rep): New function.         (lower_bitfield): Likewise.         (bitfields_to_lower_p): Likewise.         (need_to_lower_bitfields): New global boolean.         (need_to_ifcvt): Likewise.         * tree-vect-data-refs.cc (vect_find_stmt_data_reference): Improve diagnostic message.         * tree-vect-patterns.cc (vect_recog_temp_ssa_var): Add default value for last parameter.         (vect_recog_bitfield_ref_pattern): New.         (vect_recog_bit_insert_pattern): New. gcc/testsuite/ChangeLog:         * gcc.dg/vect/vect-bitfield-read-1.c: New test.         * gcc.dg/vect/vect-bitfield-read-2.c: New test.         * gcc.dg/vect/vect-bitfield-read-3.c: New test.         * gcc.dg/vect/vect-bitfield-read-4.c: New test.         * gcc.dg/vect/vect-bitfield-read-5.c: New test.         * gcc.dg/vect/vect-bitfield-read-6.c: New test.         * gcc.dg/vect/vect-bitfield-write-1.c: New test.         * gcc.dg/vect/vect-bitfield-write-2.c: New test.         * gcc.dg/vect/vect-bitfield-write-3.c: New test.         * gcc.dg/vect/vect-bitfield-write-4.c: New test.         * gcc.dg/vect/vect-bitfield-write-5.c: New test. On 28/09/2022 10:43, Andre Vieira (lists) via Gcc-patches wrote: > > On 27/09/2022 13:34, Richard Biener wrote: >> On Mon, 26 Sep 2022, Andre Vieira (lists) wrote: >> >>> On 08/09/2022 12:51, Richard Biener wrote: >>>> I'm curious, why the push to redundant_ssa_names?  That could use >>>> a comment ... >>> So I purposefully left a #if 0 #else #endif in there so you can see >>> the two >>> options. But the reason I used redundant_ssa_names is because ifcvt >>> seems to >>> use that as a container for all pairs of (old, new) ssa names to >>> replace >>> later. So I just piggy backed on that. I don't know if there's a >>> specific >>> reason they do the replacement at the end? Maybe some ordering >>> issue? Either >>> way both adding it to redundant_ssa_names or doing the replacement >>> inline work >>> for the bitfield lowering (or work in my testing at least). >> Possibly because we (in the past?) inserted/copied stuff based on >> predicates generated at analysis time after we decide to elide something >> so we need to watch for later appearing uses.  But who knows ... my mind >> fails me here. >> >> If it works to replace uses immediately please do so.  But now >> I wonder why we need this - the value shouldn't change so you >> should get away with re-using the existing SSA name for the final value? > > Yeah... good point. A quick change and minor testing seems to agree. > I'm sure I had a good reason to do it initially ;) > > I'll run a full-regression on this change to make sure I didn't miss > anything. > --------------daCBCw4ig2ltCKlWPqDpT8jA Content-Type: text/plain; charset=UTF-8; name="vect_bitfield5.patch" Content-Disposition: attachment; filename="vect_bitfield5.patch" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1iaXRmaWVsZC1y ZWFkLTEuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1iaXRmaWVsZC1yZWFk LTEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwLi4wMWNmMzRmYjQ0NDg0Y2E5MjZjYTVkZTk5ZWVmNzZkZDk5 YjY5ZTkyCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92 ZWN0LWJpdGZpZWxkLXJlYWQtMS5jCkBAIC0wLDAgKzEsNDAgQEAKKy8qIHsgZGctcmVxdWly ZS1lZmZlY3RpdmUtdGFyZ2V0IHZlY3RfaW50IH0gKi8KKworI2luY2x1ZGUgPHN0ZGFyZy5o PgorI2luY2x1ZGUgInRyZWUtdmVjdC5oIgorCitleHRlcm4gdm9pZCBhYm9ydCh2b2lkKTsK Kworc3RydWN0IHMgeyBpbnQgaSA6IDMxOyB9OworCisjZGVmaW5lIEVMVDAgezB9CisjZGVm aW5lIEVMVDEgezF9CisjZGVmaW5lIEVMVDIgezJ9CisjZGVmaW5lIEVMVDMgezN9CisjZGVm aW5lIE4gMzIKKyNkZWZpbmUgUkVTIDQ4CitzdHJ1Y3QgcyBBW05dCisgID0geyBFTFQwLCBF TFQxLCBFTFQyLCBFTFQzLCBFTFQwLCBFTFQxLCBFTFQyLCBFTFQzLAorICAgICAgRUxUMCwg RUxUMSwgRUxUMiwgRUxUMywgRUxUMCwgRUxUMSwgRUxUMiwgRUxUMywKKyAgICAgIEVMVDAs IEVMVDEsIEVMVDIsIEVMVDMsIEVMVDAsIEVMVDEsIEVMVDIsIEVMVDMsCisgICAgICBFTFQw LCBFTFQxLCBFTFQyLCBFTFQzLCBFTFQwLCBFTFQxLCBFTFQyLCBFTFQzfTsKKworaW50IF9f YXR0cmlidXRlX18gKChub2lwYSkpCitmKHN0cnVjdCBzICpwdHIsIHVuc2lnbmVkIG4pIHsK KyAgICBpbnQgcmVzID0gMDsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG47ICsraSkKKyAg ICAgIHJlcyArPSBwdHJbaV0uaTsKKyAgICByZXR1cm4gcmVzOworfQorCitpbnQgbWFpbiAo dm9pZCkKK3sKKyAgY2hlY2tfdmVjdCAoKTsKKworICBpZiAoZigmQVswXSwgTikgIT0gUkVT KQorICAgIGFib3J0ICgpOworCisgIHJldHVybiAwOworfQorCisvKiB7IGRnLWZpbmFsIHsg c2Nhbi10cmVlLWR1bXAtdGltZXMgInZlY3Rvcml6ZWQgMSBsb29wcyIgMSAidmVjdCIgfSB9 ICovCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtYml0Zmll bGQtcmVhZC0yLmMgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtYml0ZmllbGQt cmVhZC0yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWE0YTE1NzljMTQ3OGI5NDA3YWQyMWIxOWU4ZmJk Y2E5ZjY3NGI0MgotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3Zl Y3QvdmVjdC1iaXRmaWVsZC1yZWFkLTIuYwpAQCAtMCwwICsxLDQzIEBACisvKiB7IGRnLXJl cXVpcmUtZWZmZWN0aXZlLXRhcmdldCB2ZWN0X2ludCB9ICovCisKKyNpbmNsdWRlIDxzdGRh cmcuaD4KKyNpbmNsdWRlICJ0cmVlLXZlY3QuaCIKKworZXh0ZXJuIHZvaWQgYWJvcnQodm9p ZCk7CisKK3N0cnVjdCBzIHsKKyAgICB1bnNpZ25lZCBpIDogMzE7CisgICAgY2hhciBhIDog NDsKK307CisKKyNkZWZpbmUgTiAzMgorI2RlZmluZSBFTFQwIHsweDdGRkZGRkZGVUwsIDB9 CisjZGVmaW5lIEVMVDEgezB4N0ZGRkZGRkZVTCwgMX0KKyNkZWZpbmUgRUxUMiB7MHg3RkZG RkZGRlVMLCAyfQorI2RlZmluZSBFTFQzIHsweDdGRkZGRkZGVUwsIDN9CisjZGVmaW5lIFJF UyA0OAorc3RydWN0IHMgQVtOXQorICA9IHsgRUxUMCwgRUxUMSwgRUxUMiwgRUxUMywgRUxU MCwgRUxUMSwgRUxUMiwgRUxUMywKKyAgICAgIEVMVDAsIEVMVDEsIEVMVDIsIEVMVDMsIEVM VDAsIEVMVDEsIEVMVDIsIEVMVDMsCisgICAgICBFTFQwLCBFTFQxLCBFTFQyLCBFTFQzLCBF TFQwLCBFTFQxLCBFTFQyLCBFTFQzLAorICAgICAgRUxUMCwgRUxUMSwgRUxUMiwgRUxUMywg RUxUMCwgRUxUMSwgRUxUMiwgRUxUM307CisKK2ludCBfX2F0dHJpYnV0ZV9fICgobm9pcGEp KQorZihzdHJ1Y3QgcyAqcHRyLCB1bnNpZ25lZCBuKSB7CisgICAgaW50IHJlcyA9IDA7Cisg ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyArK2kpCisgICAgICByZXMgKz0gcHRyW2ldLmE7 CisgICAgcmV0dXJuIHJlczsKK30KKworaW50IG1haW4gKHZvaWQpCit7CisgIGNoZWNrX3Zl Y3QgKCk7CisKKyAgaWYgKGYoJkFbMF0sIE4pICE9IFJFUykKKyAgICBhYm9ydCAoKTsKKwor ICByZXR1cm4gMDsKK30KKworLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVz ICJ2ZWN0b3JpemVkIDEgbG9vcHMiIDEgInZlY3QiIH0gfSAqLwpkaWZmIC0tZ2l0IGEvZ2Nj L3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWJpdGZpZWxkLXJlYWQtMy5jIGIvZ2NjL3Rl c3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWJpdGZpZWxkLXJlYWQtMy5jCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAuLjIxNjYxMWEyOWZkOGJiZmJhZmRiZGI3OWQ3OTBlNTIwZjQ0YmE2NzIKLS0tIC9kZXYv bnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtYml0ZmllbGQtcmVh ZC0zLmMKQEAgLTAsMCArMSw0MyBAQAorLyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJn ZXQgdmVjdF9pbnQgfSAqLworCisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSAidHJl ZS12ZWN0LmgiCisjaW5jbHVkZSA8c3RkYm9vbC5oPgorCitleHRlcm4gdm9pZCBhYm9ydCh2 b2lkKTsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIGludCAgYzsKKyAgICBpbnQgIGI7Cisg ICAgYm9vbCBhIDogMTsKK30gc3RydWN0X3Q7CisKKyNkZWZpbmUgTiAxNgorI2RlZmluZSBF TFRfRiB7IDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDAgfQorI2RlZmluZSBFTFRfVCB7IDB4 RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDEgfQorCitzdHJ1Y3RfdCB2ZWN0X2ZhbHNlW05dID0g eyBFTFRfRiwgRUxUX0YsIEVMVF9GLCBFTFRfRiwgRUxUX0YsIEVMVF9GLCBFTFRfRiwgRUxU X0YsCisJCQkgICBFTFRfRiwgRUxUX0YsIEVMVF9GLCBFTFRfRiwgRUxUX0YsIEVMVF9GLCBF TFRfRiwgRUxUX0YgIH07CitzdHJ1Y3RfdCB2ZWN0X3RydWVbTl0gID0geyBFTFRfRiwgRUxU X0YsIEVMVF9ULCBFTFRfRiwgRUxUX0YsIEVMVF9GLCBFTFRfRiwgRUxUX0YsCisJCQkgICBF TFRfRiwgRUxUX0YsIEVMVF9ULCBFTFRfRiwgRUxUX0YsIEVMVF9GLCBFTFRfRiwgRUxUX0Yg IH07CitpbnQgbWFpbiAodm9pZCkKK3sKKyAgdW5zaWduZWQgcmV0ID0gMDsKKyAgZm9yICh1 bnNpZ25lZCBpID0gMDsgaSA8IE47IGkrKykKKyAgeworICAgICAgcmV0IHw9IHZlY3RfZmFs c2VbaV0uYTsKKyAgfQorICBpZiAocmV0KQorICAgIGFib3J0ICgpOworCisgIGZvciAodW5z aWduZWQgaSA9IDA7IGkgPCBOOyBpKyspCisgIHsKKyAgICAgIHJldCB8PSB2ZWN0X3RydWVb aV0uYTsKKyAgfQorICBpZiAoIXJldCkKKyAgICBhYm9ydCAoKTsKKworICByZXR1cm4gMDsK K30KKworLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICJ2ZWN0b3JpemVk IDIgbG9vcHMiIDEgInZlY3QiIH0gfSAqLwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9n Y2MuZGcvdmVjdC92ZWN0LWJpdGZpZWxkLXJlYWQtNC5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2Mu ZGcvdmVjdC92ZWN0LWJpdGZpZWxkLXJlYWQtNC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjViYzljNDEy ZTk2MTZhZWZjYmY0OWE0NTE4ZjE2MDMzODBhNTRiMmYKLS0tIC9kZXYvbnVsbAorKysgYi9n Y2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtYml0ZmllbGQtcmVhZC00LmMKQEAgLTAs MCArMSw0NSBAQAorLyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgdmVjdF9pbnQg fSAqLworCisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSAidHJlZS12ZWN0LmgiCisK K2V4dGVybiB2b2lkIGFib3J0KHZvaWQpOworCitzdHJ1Y3QgcyB7CisgICAgdW5zaWduZWQg aSA6IDMxOworICAgIGNoYXIgeCA6IDI7CisgICAgY2hhciBhIDogNDsKK307CisKKyNkZWZp bmUgTiAzMgorI2RlZmluZSBFTFQwIHsweDdGRkZGRkZGVUwsIDMsIDB9CisjZGVmaW5lIEVM VDEgezB4N0ZGRkZGRkZVTCwgMywgMX0KKyNkZWZpbmUgRUxUMiB7MHg3RkZGRkZGRlVMLCAz LCAyfQorI2RlZmluZSBFTFQzIHsweDdGRkZGRkZGVUwsIDMsIDN9CisjZGVmaW5lIFJFUyA0 OAorc3RydWN0IHMgQVtOXQorICA9IHsgRUxUMCwgRUxUMSwgRUxUMiwgRUxUMywgRUxUMCwg RUxUMSwgRUxUMiwgRUxUMywKKyAgICAgIEVMVDAsIEVMVDEsIEVMVDIsIEVMVDMsIEVMVDAs IEVMVDEsIEVMVDIsIEVMVDMsCisgICAgICBFTFQwLCBFTFQxLCBFTFQyLCBFTFQzLCBFTFQw LCBFTFQxLCBFTFQyLCBFTFQzLAorICAgICAgRUxUMCwgRUxUMSwgRUxUMiwgRUxUMywgRUxU MCwgRUxUMSwgRUxUMiwgRUxUM307CisKK2ludCBfX2F0dHJpYnV0ZV9fICgobm9pcGEpKQor ZihzdHJ1Y3QgcyAqcHRyLCB1bnNpZ25lZCBuKSB7CisgICAgaW50IHJlcyA9IDA7CisgICAg Zm9yIChpbnQgaSA9IDA7IGkgPCBuOyArK2kpCisgICAgICByZXMgKz0gcHRyW2ldLmE7Cisg ICAgcmV0dXJuIHJlczsKK30KKworaW50IG1haW4gKHZvaWQpCit7CisgIGNoZWNrX3ZlY3Qg KCk7CisKKyAgaWYgKGYoJkFbMF0sIE4pICE9IFJFUykKKyAgICBhYm9ydCAoKTsKKworICBy ZXR1cm4gMDsKK30KKworLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICJ2 ZWN0b3JpemVkIDEgbG9vcHMiIDEgInZlY3QiIH0gfSAqLworCmRpZmYgLS1naXQgYS9nY2Mv dGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtYml0ZmllbGQtcmVhZC01LmMgYi9nY2MvdGVz dHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtYml0ZmllbGQtcmVhZC01LmMKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MC4uMWRjMjRkM2VkZWQxOTIxNDRkYzlhZDk0NTg5YjRjNWMzZDk5OWU2NQotLS0gL2Rldi9u dWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1iaXRmaWVsZC1yZWFk LTUuYwpAQCAtMCwwICsxLDQyIEBACisvKiB7IGRnLXJlcXVpcmUtZWZmZWN0aXZlLXRhcmdl dCB2ZWN0X2ludCB9ICovCisKKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlICJ0cmVl LXZlY3QuaCIKKworZXh0ZXJuIHZvaWQgYWJvcnQodm9pZCk7CisKK3N0cnVjdCBzIHsKKyAg ICB1bnNpZ25lZCBhIDogMjM7IHVuc2lnbmVkIGIgOiA5OworfTsKKworI2RlZmluZSBOIDMy CisjZGVmaW5lIEVMVDAgezB4N0ZGRkZGVUwsIDB9CisjZGVmaW5lIEVMVDEgezB4N0ZGRkZG VUwsIDF9CisjZGVmaW5lIEVMVDIgezB4N0ZGRkZGVUwsIDJ9CisjZGVmaW5lIEVMVDMgezB4 N0ZGRkZGVUwsIDN9CisjZGVmaW5lIFJFUyA0OAorc3RydWN0IHMgQVtOXQorICA9IHsgRUxU MCwgRUxUMSwgRUxUMiwgRUxUMywgRUxUMCwgRUxUMSwgRUxUMiwgRUxUMywKKyAgICAgIEVM VDAsIEVMVDEsIEVMVDIsIEVMVDMsIEVMVDAsIEVMVDEsIEVMVDIsIEVMVDMsCisgICAgICBF TFQwLCBFTFQxLCBFTFQyLCBFTFQzLCBFTFQwLCBFTFQxLCBFTFQyLCBFTFQzLAorICAgICAg RUxUMCwgRUxUMSwgRUxUMiwgRUxUMywgRUxUMCwgRUxUMSwgRUxUMiwgRUxUM307CisKK2lu dCBfX2F0dHJpYnV0ZV9fICgobm9pcGEpKQorZihzdHJ1Y3QgcyAqcHRyLCB1bnNpZ25lZCBu KSB7CisgICAgaW50IHJlcyA9IDA7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyArK2kp CisgICAgICByZXMgKz0gcHRyW2ldLmI7CisgICAgcmV0dXJuIHJlczsKK30KKworaW50IG1h aW4gKHZvaWQpCit7CisgIGNoZWNrX3ZlY3QgKCk7CisKKyAgaWYgKGYoJkFbMF0sIE4pICE9 IFJFUykKKyAgICBhYm9ydCAoKTsKKworICByZXR1cm4gMDsKK30KKworLyogeyBkZy1maW5h bCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICJ2ZWN0b3JpemVkIDEgbG9vcHMiIDEgInZlY3Qi IH0gfSAqLwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWJp dGZpZWxkLXJlYWQtNi5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWJpdGZp ZWxkLXJlYWQtNi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdkMjRjMjk5NzU4NjU4ODNhN2NkYzdhYTA1 N2ZiYjZiZjQxM2UwYmMKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2djYy5k Zy92ZWN0L3ZlY3QtYml0ZmllbGQtcmVhZC02LmMKQEAgLTAsMCArMSw0MiBAQAorLyogeyBk Zy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgdmVjdF9pbnQgfSAqLworCisjaW5jbHVkZSA8 c3RkYXJnLmg+CisjaW5jbHVkZSAidHJlZS12ZWN0LmgiCisKK2V4dGVybiB2b2lkIGFib3J0 KHZvaWQpOworCitzdHJ1Y3QgcyB7CisgICAgdW5zaWduZWQgYSA6IDIzOyB1bnNpZ25lZCBi IDogODsKK307CisKKyNkZWZpbmUgTiAzMgorI2RlZmluZSBFTFQwIHsweDdGRkZGRlVMLCAw fQorI2RlZmluZSBFTFQxIHsweDdGRkZGRlVMLCAxfQorI2RlZmluZSBFTFQyIHsweDdGRkZG RlVMLCAyfQorI2RlZmluZSBFTFQzIHsweDdGRkZGRlVMLCAzfQorI2RlZmluZSBSRVMgNDgK K3N0cnVjdCBzIEFbTl0KKyAgPSB7IEVMVDAsIEVMVDEsIEVMVDIsIEVMVDMsIEVMVDAsIEVM VDEsIEVMVDIsIEVMVDMsCisgICAgICBFTFQwLCBFTFQxLCBFTFQyLCBFTFQzLCBFTFQwLCBF TFQxLCBFTFQyLCBFTFQzLAorICAgICAgRUxUMCwgRUxUMSwgRUxUMiwgRUxUMywgRUxUMCwg RUxUMSwgRUxUMiwgRUxUMywKKyAgICAgIEVMVDAsIEVMVDEsIEVMVDIsIEVMVDMsIEVMVDAs IEVMVDEsIEVMVDIsIEVMVDN9OworCitpbnQgX19hdHRyaWJ1dGVfXyAoKG5vaXBhKSkKK2Yo c3RydWN0IHMgKnB0ciwgdW5zaWduZWQgbikgeworICAgIGludCByZXMgPSAwOworICAgIGZv ciAoaW50IGkgPSAwOyBpIDwgbjsgKytpKQorICAgICAgcmVzICs9IHB0cltpXS5iOworICAg IHJldHVybiByZXM7Cit9CisKK2ludCBtYWluICh2b2lkKQoreworICBjaGVja192ZWN0ICgp OworCisgIGlmIChmKCZBWzBdLCBOKSAhPSBSRVMpCisgICAgYWJvcnQgKCk7CisKKyAgcmV0 dXJuIDA7Cit9CisKKy8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAidmVj dG9yaXplZCAxIGxvb3BzIiAxICJ2ZWN0IiB9IH0gKi8KZGlmZiAtLWdpdCBhL2djYy90ZXN0 c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1iaXRmaWVsZC13cml0ZS0xLmMgYi9nY2MvdGVzdHN1 aXRlL2djYy5kZy92ZWN0L3ZlY3QtYml0ZmllbGQtd3JpdGUtMS5jCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu LjE5NjgzZDI3N2IxYWRlMTAzNDQ5NjEzNmYxZDAzYmIyYjQ0NjkwMGYKLS0tIC9kZXYvbnVs bAorKysgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtYml0ZmllbGQtd3JpdGUt MS5jCkBAIC0wLDAgKzEsMzkgQEAKKy8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0 IHZlY3RfaW50IH0gKi8KKworI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgInRyZWUt dmVjdC5oIgorCitleHRlcm4gdm9pZCBhYm9ydCh2b2lkKTsKKworc3RydWN0IHMgeyBpbnQg aSA6IDMxOyB9OworCisjZGVmaW5lIE4gMzIKKyNkZWZpbmUgViA1CitzdHJ1Y3QgcyBBW05d OworCit2b2lkIF9fYXR0cmlidXRlX18gKChub2lwYSkpCitmKHN0cnVjdCBzICpwdHIsIHVu c2lnbmVkIG4pIHsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG47ICsraSkKKyAgICAgIHB0 cltpXS5pID0gVjsKK30KKwordm9pZCBfX2F0dHJpYnV0ZV9fICgobm9pcGEpKQorY2hlY2tf ZihzdHJ1Y3QgcyAqcHRyKSB7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IE47ICsr aSkKKyAgICAgIGlmIChwdHJbaV0uaSAhPSBWKQorCWFib3J0ICgpOworfQorCitpbnQgbWFp biAodm9pZCkKK3sKKyAgY2hlY2tfdmVjdCAoKTsKKyAgX19idWlsdGluX21lbXNldCAoJkFb MF0sIDAsIHNpemVvZihzdHJ1Y3QgcykgKiBOKTsKKworICBmKCZBWzBdLCBOKTsKKyAgY2hl Y2tfZiAoJkFbMF0pOworCisgIHJldHVybiAwOworfQorCisvKiB7IGRnLWZpbmFsIHsgc2Nh bi10cmVlLWR1bXAtdGltZXMgInZlY3Rvcml6ZWQgMSBsb29wcyIgMSAidmVjdCIgfSB9ICov CisKZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ZlY3QvdmVjdC1iaXRmaWVs ZC13cml0ZS0yLmMgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtYml0ZmllbGQt d3JpdGUtMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ1NTBkZDM1YWI3NWViNjdmNmU1M2Y4OWZiZjU1 YjczMTVlNTBiYzkKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy92 ZWN0L3ZlY3QtYml0ZmllbGQtd3JpdGUtMi5jCkBAIC0wLDAgKzEsNDIgQEAKKy8qIHsgZGct cmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IHZlY3RfaW50IH0gKi8KKworI2luY2x1ZGUgPHN0 ZGFyZy5oPgorI2luY2x1ZGUgInRyZWUtdmVjdC5oIgorCitleHRlcm4gdm9pZCBhYm9ydCh2 b2lkKTsKKworc3RydWN0IHMgeworICAgIHVuc2lnbmVkIGkgOiAzMTsKKyAgICBjaGFyIGEg OiA0OworfTsKKworI2RlZmluZSBOIDMyCisjZGVmaW5lIFYgNQorc3RydWN0IHMgQVtOXTsK Kwordm9pZCBfX2F0dHJpYnV0ZV9fICgobm9pcGEpKQorZihzdHJ1Y3QgcyAqcHRyLCB1bnNp Z25lZCBuKSB7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyArK2kpCisgICAgICBwdHJb aV0uYSA9IFY7Cit9CisKK3ZvaWQgX19hdHRyaWJ1dGVfXyAoKG5vaXBhKSkKK2NoZWNrX2Yo c3RydWN0IHMgKnB0cikgeworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBOOyArK2kp CisgICAgICBpZiAocHRyW2ldLmEgIT0gVikKKwlhYm9ydCAoKTsKK30KKworaW50IG1haW4g KHZvaWQpCit7CisgIGNoZWNrX3ZlY3QgKCk7CisgIF9fYnVpbHRpbl9tZW1zZXQgKCZBWzBd LCAwLCBzaXplb2Yoc3RydWN0IHMpICogTik7CisKKyAgZigmQVswXSwgTik7CisgIGNoZWNr X2YgKCZBWzBdKTsKKworICByZXR1cm4gMDsKK30KKworLyogeyBkZy1maW5hbCB7IHNjYW4t dHJlZS1kdW1wLXRpbWVzICJ2ZWN0b3JpemVkIDEgbG9vcHMiIDEgInZlY3QiIH0gfSAqLwor CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtYml0ZmllbGQt d3JpdGUtMy5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWJpdGZpZWxkLXdy aXRlLTMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zMzAzZDI2MTBmZjk3MmQ5ODZiZTE3Mjk2MmMxMjk2 MzRlZTY0MjU0Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVj dC92ZWN0LWJpdGZpZWxkLXdyaXRlLTMuYwpAQCAtMCwwICsxLDQzIEBACisvKiB7IGRnLXJl cXVpcmUtZWZmZWN0aXZlLXRhcmdldCB2ZWN0X2ludCB9ICovCisKKyNpbmNsdWRlIDxzdGRh cmcuaD4KKyNpbmNsdWRlICJ0cmVlLXZlY3QuaCIKKworZXh0ZXJuIHZvaWQgYWJvcnQodm9p ZCk7CisKK3N0cnVjdCBzIHsKKyAgICB1bnNpZ25lZCBpIDogMzE7CisgICAgY2hhciB4IDog MjsKKyAgICBjaGFyIGEgOiA0OworfTsKKworI2RlZmluZSBOIDMyCisjZGVmaW5lIFYgNQor c3RydWN0IHMgQVtOXTsKKwordm9pZCBfX2F0dHJpYnV0ZV9fICgobm9pcGEpKQorZihzdHJ1 Y3QgcyAqcHRyLCB1bnNpZ25lZCBuKSB7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyAr K2kpCisgICAgICBwdHJbaV0uYSA9IFY7Cit9CisKK3ZvaWQgX19hdHRyaWJ1dGVfXyAoKG5v aXBhKSkKK2NoZWNrX2Yoc3RydWN0IHMgKnB0cikgeworICAgIGZvciAodW5zaWduZWQgaSA9 IDA7IGkgPCBOOyArK2kpCisgICAgICBpZiAocHRyW2ldLmEgIT0gVikKKwlhYm9ydCAoKTsK K30KKworaW50IG1haW4gKHZvaWQpCit7CisgIGNoZWNrX3ZlY3QgKCk7CisgIF9fYnVpbHRp bl9tZW1zZXQgKCZBWzBdLCAwLCBzaXplb2Yoc3RydWN0IHMpICogTik7CisKKyAgZigmQVsw XSwgTik7CisgIGNoZWNrX2YgKCZBWzBdKTsKKworICByZXR1cm4gMDsKK30KKworLyogeyBk Zy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICJ2ZWN0b3JpemVkIDEgbG9vcHMiIDEg InZlY3QiIH0gfSAqLworCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0 L3ZlY3QtYml0ZmllbGQtd3JpdGUtNC5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmVjdC92 ZWN0LWJpdGZpZWxkLXdyaXRlLTQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mYWU2ZWEzNTU3ZGNhYmE3 YjMzMGViZGFhNDcxMjgxZDMzZDJiYTE1Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3Rz dWl0ZS9nY2MuZGcvdmVjdC92ZWN0LWJpdGZpZWxkLXdyaXRlLTQuYwpAQCAtMCwwICsxLDQy IEBACisvKiB7IGRnLXJlcXVpcmUtZWZmZWN0aXZlLXRhcmdldCB2ZWN0X2ludCB9ICovCisK KyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlICJ0cmVlLXZlY3QuaCIKKworZXh0ZXJu IHZvaWQgYWJvcnQodm9pZCk7CisKK3N0cnVjdCBzIHsKKyAgICB1bnNpZ25lZCBiIDogMjM7 CisgICAgdW5zaWduZWQgYSA6IDk7Cit9OworCisjZGVmaW5lIE4gMzIKKyNkZWZpbmUgViA1 CitzdHJ1Y3QgcyBBW05dOworCit2b2lkIF9fYXR0cmlidXRlX18gKChub2lwYSkpCitmKHN0 cnVjdCBzICpwdHIsIHVuc2lnbmVkIG4pIHsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG47 ICsraSkKKyAgICAgIHB0cltpXS5hID0gVjsKK30KKwordm9pZCBfX2F0dHJpYnV0ZV9fICgo bm9pcGEpKQorY2hlY2tfZihzdHJ1Y3QgcyAqcHRyKSB7CisgICAgZm9yICh1bnNpZ25lZCBp ID0gMDsgaSA8IE47ICsraSkKKyAgICAgIGlmIChwdHJbaV0uYSAhPSBWKQorCWFib3J0ICgp OworfQorCitpbnQgbWFpbiAodm9pZCkKK3sKKyAgY2hlY2tfdmVjdCAoKTsKKyAgX19idWls dGluX21lbXNldCAoJkFbMF0sIDAsIHNpemVvZihzdHJ1Y3QgcykgKiBOKTsKKworICBmKCZB WzBdLCBOKTsKKyAgY2hlY2tfZiAoJkFbMF0pOworCisgIHJldHVybiAwOworfQorCisvKiB7 IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgInZlY3Rvcml6ZWQgMSBsb29wcyIg MSAidmVjdCIgfSB9ICovCisKZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3Zl Y3QvdmVjdC1iaXRmaWVsZC13cml0ZS01LmMgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy92ZWN0 L3ZlY3QtYml0ZmllbGQtd3JpdGUtNS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk5MzYwYzI5NjdiMDc2 MjEyYzY3ZWI0ZjM0YjhmZDkxNzExZDg4MjEKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVz dHN1aXRlL2djYy5kZy92ZWN0L3ZlY3QtYml0ZmllbGQtd3JpdGUtNS5jCkBAIC0wLDAgKzEs NDIgQEAKKy8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IHZlY3RfaW50IH0gKi8K KworI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgInRyZWUtdmVjdC5oIgorCitleHRl cm4gdm9pZCBhYm9ydCh2b2lkKTsKKworc3RydWN0IHMgeworICAgIHVuc2lnbmVkIGIgOiAy MzsKKyAgICB1bnNpZ25lZCBhIDogODsKK307CisKKyNkZWZpbmUgTiAzMgorI2RlZmluZSBW IDUKK3N0cnVjdCBzIEFbTl07CisKK3ZvaWQgX19hdHRyaWJ1dGVfXyAoKG5vaXBhKSkKK2Yo c3RydWN0IHMgKnB0ciwgdW5zaWduZWQgbikgeworICAgIGZvciAoaW50IGkgPSAwOyBpIDwg bjsgKytpKQorICAgICAgcHRyW2ldLmEgPSBWOworfQorCit2b2lkIF9fYXR0cmlidXRlX18g KChub2lwYSkpCitjaGVja19mKHN0cnVjdCBzICpwdHIpIHsKKyAgICBmb3IgKHVuc2lnbmVk IGkgPSAwOyBpIDwgTjsgKytpKQorICAgICAgaWYgKHB0cltpXS5hICE9IFYpCisJYWJvcnQg KCk7Cit9CisKK2ludCBtYWluICh2b2lkKQoreworICBjaGVja192ZWN0ICgpOworICBfX2J1 aWx0aW5fbWVtc2V0ICgmQVswXSwgMCwgc2l6ZW9mKHN0cnVjdCBzKSAqIE4pOworCisgIGYo JkFbMF0sIE4pOworICBjaGVja19mICgmQVswXSk7CisKKyAgcmV0dXJuIDA7Cit9CisKKy8q IHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAidmVjdG9yaXplZCAxIGxvb3Bz IiAxICJ2ZWN0IiB9IH0gKi8KKwpkaWZmIC0tZ2l0IGEvZ2NjL3RyZWUtaWYtY29udi5jYyBi L2djYy90cmVlLWlmLWNvbnYuY2MKaW5kZXggMWM4ZTFhNDUyMzRiOGMzNTY1ZWRhYWNkNTVh YmJlZTIzZDhlYTI0MC4uZDEzYjJmYTY2NjFkNTZlOTExYmI5ZWMzN2NkM2E5ODg1ZmE2NTNi YiAxMDA2NDQKLS0tIGEvZ2NjL3RyZWUtaWYtY29udi5jYworKysgYi9nY2MvdHJlZS1pZi1j b252LmNjCkBAIC05MSw2ICs5MSw3IEBAIGFsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUg Q09QWUlORzMuICBJZiBub3Qgc2VlCiAjaW5jbHVkZSAidHJlZS1wYXNzLmgiCiAjaW5jbHVk ZSAic3NhLmgiCiAjaW5jbHVkZSAiZXhwbWVkLmgiCisjaW5jbHVkZSAiZXhwci5oIgogI2lu Y2x1ZGUgIm9wdGFicy1xdWVyeS5oIgogI2luY2x1ZGUgImdpbXBsZS1wcmV0dHktcHJpbnQu aCIKICNpbmNsdWRlICJhbGlhcy5oIgpAQCAtMTIzLDYgKzEyNCw5IEBAIGFsb25nIHdpdGgg R0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCiAjaW5jbHVkZSAidHJl ZS12ZWN0b3JpemVyLmgiCiAjaW5jbHVkZSAidHJlZS1laC5oIgogCisvKiBGb3IgbGFuZ19o b29rcy50eXBlcy50eXBlX2Zvcl9tb2RlLiAgKi8KKyNpbmNsdWRlICJsYW5naG9va3MuaCIK KwogLyogT25seSBoYW5kbGUgUEhJcyB3aXRoIG5vIG1vcmUgYXJndW1lbnRzIHVubGVzcyB3 ZSBhcmUgYXNrZWQgdG8gYnkKICAgIHNpbWQgcHJhZ21hLiAgKi8KICNkZWZpbmUgTUFYX1BI SV9BUkdfTlVNIFwKQEAgLTE0NSw2ICsxNDksMTIgQEAgc3RhdGljIGJvb2wgbmVlZF90b19y ZXdyaXRlX3VuZGVmaW5lZDsKICAgIGJlZm9yZSBwaGlfY29udmVydGlibGVfYnlfZGVnZW5l cmF0aW5nX2FyZ3MuICAqLwogc3RhdGljIGJvb2wgYW55X2NvbXBsaWNhdGVkX3BoaTsKIAor LyogVHJ1ZSBpZiB3ZSBoYXZlIGJpdGZpZWxkIGFjY2Vzc2VzIHdlIGNhbiBsb3dlci4gICov CitzdGF0aWMgYm9vbCBuZWVkX3RvX2xvd2VyX2JpdGZpZWxkczsKKworLyogVHJ1ZSBpZiB0 aGVyZSBpcyBhbnkgaWZjdnRpbmcgdG8gYmUgZG9uZS4gICovCitzdGF0aWMgYm9vbCBuZWVk X3RvX2lmY3Z0OworCiAvKiBIYXNoIGZvciBzdHJ1Y3QgaW5uZXJtb3N0X2xvb3BfYmVoYXZp b3IuICBJdCBkZXBlbmRzIG9uIHRoZSB1c2VyIHRvCiAgICBmcmVlIHRoZSBtZW1vcnkuICAq LwogCkBAIC0xNDExLDE1ICsxNDIxLDYgQEAgaWZfY29udmVydGlibGVfbG9vcF9wXzEgKGNs YXNzIGxvb3AgKmxvb3AsIHZlYzxkYXRhX3JlZmVyZW5jZV9wPiAqcmVmcykKIAogICBjYWxj dWxhdGVfZG9taW5hbmNlX2luZm8gKENESV9ET01JTkFUT1JTKTsKIAotICAvKiBBbGxvdyBz dGF0ZW1lbnRzIHRoYXQgY2FuIGJlIGhhbmRsZWQgZHVyaW5nIGlmLWNvbnZlcnNpb24uICAq LwotICBpZmNfYmJzID0gZ2V0X2xvb3BfYm9keV9pbl9pZl9jb252X29yZGVyIChsb29wKTsK LSAgaWYgKCFpZmNfYmJzKQotICAgIHsKLSAgICAgIGlmIChkdW1wX2ZpbGUgJiYgKGR1bXBf ZmxhZ3MgJiBUREZfREVUQUlMUykpCi0JZnByaW50ZiAoZHVtcF9maWxlLCAiSXJyZWR1Y2li bGUgbG9vcFxuIik7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCiAgIGZvciAoaSA9 IDA7IGkgPCBsb29wLT5udW1fbm9kZXM7IGkrKykKICAgICB7CiAgICAgICBiYXNpY19ibG9j ayBiYiA9IGlmY19iYnNbaV07CkBAIC0yODk4LDE4ICsyODk5LDIyIEBAIHZlcnNpb25fbG9v cF9mb3JfaWZfY29udmVyc2lvbiAoY2xhc3MgbG9vcCAqbG9vcCwgdmVjPGdpbXBsZSAqPiAq cHJlZHMpCiAgIGNsYXNzIGxvb3AgKm5ld19sb29wOwogICBnaW1wbGUgKmc7CiAgIGdpbXBs ZV9zdG10X2l0ZXJhdG9yIGdzaTsKLSAgdW5zaWduZWQgaW50IHNhdmVfbGVuZ3RoOworICB1 bnNpZ25lZCBpbnQgc2F2ZV9sZW5ndGggPSAwOwogCiAgIGcgPSBnaW1wbGVfYnVpbGRfY2Fs bF9pbnRlcm5hbCAoSUZOX0xPT1BfVkVDVE9SSVpFRCwgMiwKIAkJCQkgIGJ1aWxkX2ludF9j c3QgKGludGVnZXJfdHlwZV9ub2RlLCBsb29wLT5udW0pLAogCQkJCSAgaW50ZWdlcl96ZXJv X25vZGUpOwogICBnaW1wbGVfY2FsbF9zZXRfbGhzIChnLCBjb25kKTsKIAotICAvKiBTYXZl IEJCLT5hdXggYXJvdW5kIGxvb3BfdmVyc2lvbiBhcyB0aGF0IHVzZXMgdGhlIHNhbWUgZmll bGQuICAqLwotICBzYXZlX2xlbmd0aCA9IGxvb3AtPmlubmVyID8gbG9vcC0+aW5uZXItPm51 bV9ub2RlcyA6IGxvb3AtPm51bV9ub2RlczsKLSAgdm9pZCAqKnNhdmVkX3ByZWRzID0gWEFM TE9DQVZFQyAodm9pZCAqLCBzYXZlX2xlbmd0aCk7Ci0gIGZvciAodW5zaWduZWQgaSA9IDA7 IGkgPCBzYXZlX2xlbmd0aDsgaSsrKQotICAgIHNhdmVkX3ByZWRzW2ldID0gaWZjX2Jic1tp XS0+YXV4OworICB2b2lkICoqc2F2ZWRfcHJlZHMgPSBOVUxMOworICBpZiAoYW55X2NvbXBs aWNhdGVkX3BoaSB8fCBuZWVkX3RvX3ByZWRpY2F0ZSkKKyAgICB7CisgICAgICAvKiBTYXZl IEJCLT5hdXggYXJvdW5kIGxvb3BfdmVyc2lvbiBhcyB0aGF0IHVzZXMgdGhlIHNhbWUgZmll bGQuICAqLworICAgICAgc2F2ZV9sZW5ndGggPSBsb29wLT5pbm5lciA/IGxvb3AtPmlubmVy LT5udW1fbm9kZXMgOiBsb29wLT5udW1fbm9kZXM7CisgICAgICBzYXZlZF9wcmVkcyA9IFhB TExPQ0FWRUMgKHZvaWQgKiwgc2F2ZV9sZW5ndGgpOworICAgICAgZm9yICh1bnNpZ25lZCBp ID0gMDsgaSA8IHNhdmVfbGVuZ3RoOyBpKyspCisJc2F2ZWRfcHJlZHNbaV0gPSBpZmNfYmJz W2ldLT5hdXg7CisgICAgfQogCiAgIGluaXRpYWxpemVfb3JpZ2luYWxfY29weV90YWJsZXMg KCk7CiAgIC8qIEF0IHRoaXMgcG9pbnQgd2UgaW52YWxpZGF0ZSBwb3JmaWxlIGNvbmZpc3Rl bmN5IHVudGlsIElGTl9MT09QX1ZFQ1RPUklaRUQKQEAgLTI5MjEsOCArMjkyNiw5IEBAIHZl cnNpb25fbG9vcF9mb3JfaWZfY29udmVyc2lvbiAoY2xhc3MgbG9vcCAqbG9vcCwgdmVjPGdp bXBsZSAqPiAqcHJlZHMpCiAJCQkgICBwcm9maWxlX3Byb2JhYmlsaXR5OjphbHdheXMgKCks IHRydWUpOwogICBmcmVlX29yaWdpbmFsX2NvcHlfdGFibGVzICgpOwogCi0gIGZvciAodW5z aWduZWQgaSA9IDA7IGkgPCBzYXZlX2xlbmd0aDsgaSsrKQotICAgIGlmY19iYnNbaV0tPmF1 eCA9IHNhdmVkX3ByZWRzW2ldOworICBpZiAoYW55X2NvbXBsaWNhdGVkX3BoaSB8fCBuZWVk X3RvX3ByZWRpY2F0ZSkKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2F2ZV9sZW5n dGg7IGkrKykKKyAgICAgIGlmY19iYnNbaV0tPmF1eCA9IHNhdmVkX3ByZWRzW2ldOwogCiAg IGlmIChuZXdfbG9vcCA9PSBOVUxMKQogICAgIHJldHVybiBOVUxMOwpAQCAtMjk5OCw3ICsz MDA0LDcgQEAgaWZjdnRfc3BsaXRfY3JpdGljYWxfZWRnZXMgKGNsYXNzIGxvb3AgKmxvb3As IGJvb2wgYWdncmVzc2l2ZV9pZl9jb252KQogICBhdXRvX3ZlYzxlZGdlPiBjcml0aWNhbF9l ZGdlczsKIAogICAvKiBMb29wIGlzIG5vdCB3ZWxsIGZvcm1lZC4gICovCi0gIGlmIChudW0g PD0gMiB8fCBsb29wLT5pbm5lciB8fCAhc2luZ2xlX2V4aXQgKGxvb3ApKQorICBpZiAobG9v cC0+aW5uZXIpCiAgICAgcmV0dXJuIGZhbHNlOwogCiAgIGJvZHkgPSBnZXRfbG9vcF9ib2R5 IChsb29wKTsKQEAgLTMyNTksNiArMzI2NSwyMDEgQEAgaWZjdnRfaG9pc3RfaW52YXJpYW50 cyAoY2xhc3MgbG9vcCAqbG9vcCwgZWRnZSBwZSkKICAgZnJlZSAoYm9keSk7CiB9CiAKKy8q IFJldHVybnMgdGhlIERFQ0xfRklFTERfQklUX09GRlNFVCBvZiB0aGUgYml0ZmllbGQgYWNj ZXNzZSBpbiBzdG10IGlmZiBpdHMKKyAgIHR5cGUgbW9kZSBpcyBub3QgQkxLbW9kZS4gIElm IEJJVFBPUyBpcyBub3QgTlVMTCBpdCB3aWxsIGhvbGQgdGhlIHBvbHlfaW50NjQKKyAgIHZh bHVlIG9mIHRoZSBERUNMX0ZJRUxEX0JJVF9PRkZTRVQgb2YgdGhlIGJpdGZpZWxkIGFjY2Vz cyBhbmQgU1RSVUNUX0VYUFIsCisgICBpZiBub3QgTlVMTCwgd2lsbCBob2xkIHRoZSB0cmVl IHJlcHJlc2VudGluZyB0aGUgYmFzZSBzdHJ1Y3Qgb2YgdGhpcworICAgYml0ZmllbGQuICAq LworCitzdGF0aWMgdHJlZQorZ2V0X2JpdGZpZWxkX3JlcCAoZ2Fzc2lnbiAqc3RtdCwgYm9v bCB3cml0ZSwgdHJlZSAqYml0cG9zLAorCQkgIHRyZWUgKnN0cnVjdF9leHByKQoreworICB0 cmVlIGNvbXBfcmVmID0gd3JpdGUgPyBnaW1wbGVfYXNzaWduX2xocyAoc3RtdCkKKwkJCTog Z2ltcGxlX2Fzc2lnbl9yaHMxIChzdG10KTsKKworICB0cmVlIGZpZWxkX2RlY2wgPSBUUkVF X09QRVJBTkQgKGNvbXBfcmVmLCAxKTsKKyAgdHJlZSByZXBfZGVjbCA9IERFQ0xfQklUX0ZJ RUxEX1JFUFJFU0VOVEFUSVZFIChmaWVsZF9kZWNsKTsKKworICAvKiBCYWlsIG91dCBpZiB0 aGUgcmVwcmVzZW50YXRpdmUgaXMgQkxLbW9kZSBhcyB3ZSB3aWxsIG5vdCBiZSBhYmxlIHRv CisgICAgIHZlY3Rvcml6ZSB0aGlzLiAgKi8KKyAgaWYgKFRZUEVfTU9ERSAoVFJFRV9UWVBF IChyZXBfZGVjbCkpID09IEVfQkxLbW9kZSkKKyAgICByZXR1cm4gTlVMTF9UUkVFOworCisg IC8qIEJhaWwgb3V0IGlmIHRoZSBERUNMX1NJWkUgb2YgdGhlIGZpZWxkX2RlY2wgaXNuJ3Qg dGhlIHNhbWUgYXMgdGhlIEJGJ3MKKyAgICAgcHJlY2lzaW9uLiAgKi8KKyAgdW5zaWduZWQg SE9TVF9XSURFX0lOVCBiZl9wcmVjCisgICAgPSBUWVBFX1BSRUNJU0lPTiAoVFJFRV9UWVBF IChnaW1wbGVfYXNzaWduX2xocyAoc3RtdCkpKTsKKyAgaWYgKGNvbXBhcmVfdHJlZV9pbnQg KERFQ0xfU0laRSAoZmllbGRfZGVjbCksIGJmX3ByZWMpICE9IDApCisgICAgcmV0dXJuIE5V TExfVFJFRTsKKworICBpZiAoc3RydWN0X2V4cHIpCisgICAgKnN0cnVjdF9leHByID0gVFJF RV9PUEVSQU5EIChjb21wX3JlZiwgMCk7CisKKyAgaWYgKGJpdHBvcykKKyAgICAqYml0cG9z CisgICAgICA9IGZvbGRfYnVpbGQyIChNSU5VU19FWFBSLCBiaXRzaXpldHlwZSwKKwkJICAg ICBERUNMX0ZJRUxEX0JJVF9PRkZTRVQgKGZpZWxkX2RlY2wpLAorCQkgICAgIERFQ0xfRklF TERfQklUX09GRlNFVCAocmVwX2RlY2wpKTsKKworICByZXR1cm4gcmVwX2RlY2w7CisKK30K KworLyogTG93ZXJzIHRoZSBiaXRmaWVsZCBkZXNjcmliZWQgYnkgREFUQS4KKyAgIEZvciBh IHdyaXRlIGxpa2U6CisKKyAgIHN0cnVjdC5iZiA9IF8xOworCisgICBsb3dlciB0bzoKKwor ICAgX19pZmNfMSA9IHN0cnVjdC48cmVwcmVzZW50YXRpdmU+OworICAgX19pZmNfMiA9IEJJ VF9JTlNFUlRfRVhQUiAoX19pZmNfMSwgXzEsIGJpdHBvcyk7CisgICBzdHJ1Y3QuPHJlcHJl c2VudGF0aXZlPiA9IF9faWZjXzI7CisKKyAgIEZvciBhIHJlYWQ6CisKKyAgIF8xID0gc3Ry dWN0LmJmOworCisgICAgbG93ZXIgdG86CisKKyAgICBfX2lmY18xID0gc3RydWN0LjxyZXBy ZXNlbnRhdGl2ZT47CisgICAgXzEgPSAgQklUX0ZJRUxEX1JFRiAoX19pZmNfMSwgYml0c2l6 ZSwgYml0cG9zKTsKKworICAgIHdoZXJlIHJlcHJlc2VudGF0aXZlIGlzIGEgbGVnYWwgbG9h ZCB0aGF0IGNvbnRhaW5zIHRoZSBiaXRmaWVsZCB2YWx1ZSwKKyAgICBiaXRzaXplIGlzIHRo ZSBzaXplIG9mIHRoZSBiaXRmaWVsZCBhbmQgYml0cG9zIHRoZSBvZmZzZXQgdG8gdGhlIHN0 YXJ0IG9mCisgICAgdGhlIGJpdGZpZWxkIHdpdGhpbiB0aGUgcmVwcmVzZW50YXRpdmUuICAq LworCitzdGF0aWMgdm9pZAorbG93ZXJfYml0ZmllbGQgKGdhc3NpZ24gKnN0bXQsIGJvb2wg d3JpdGUpCit7CisgIHRyZWUgc3RydWN0X2V4cHI7CisgIHRyZWUgYml0cG9zOworICB0cmVl IHJlcF9kZWNsID0gZ2V0X2JpdGZpZWxkX3JlcCAoc3RtdCwgd3JpdGUsICZiaXRwb3MsICZz dHJ1Y3RfZXhwcik7CisgIHRyZWUgcmVwX3R5cGUgPSBUUkVFX1RZUEUgKHJlcF9kZWNsKTsK KyAgdHJlZSBiZl90eXBlID0gVFJFRV9UWVBFIChnaW1wbGVfYXNzaWduX2xocyAoc3RtdCkp OworCisgIGdpbXBsZV9zdG10X2l0ZXJhdG9yIGdzaSA9IGdzaV9mb3Jfc3RtdCAoc3RtdCk7 CisgIGlmIChkdW1wX2ZpbGUgJiYgKGR1bXBfZmxhZ3MgJiBUREZfREVUQUlMUykpCisgICAg eworICAgICAgZnByaW50ZiAoZHVtcF9maWxlLCAiTG93ZXJpbmc6XG4iKTsKKyAgICAgIHBy aW50X2dpbXBsZV9zdG10IChkdW1wX2ZpbGUsIHN0bXQsIDAsIFRERl9TTElNKTsKKyAgICAg IGZwcmludGYgKGR1bXBfZmlsZSwgInRvOlxuIik7CisgICAgfQorCisgIC8qIFJFUF9DT01Q X1JFRiBpcyBhIENPTVBPTkVOVF9SRUYgZm9yIHRoZSByZXByZXNlbnRhdGl2ZS4gIE5FV19W QUwgaXMgaXQncworICAgICBkZWZpbmluZyBTU0FfTkFNRS4gICovCisgIHRyZWUgcmVwX2Nv bXBfcmVmID0gYnVpbGQzIChDT01QT05FTlRfUkVGLCByZXBfdHlwZSwgc3RydWN0X2V4cHIs IHJlcF9kZWNsLAorCQkJICAgICAgTlVMTF9UUkVFKTsKKyAgdHJlZSBuZXdfdmFsID0gaWZj X3RlbXBfdmFyIChyZXBfdHlwZSwgcmVwX2NvbXBfcmVmLCAmZ3NpKTsKKworICBpZiAoZHVt cF9maWxlICYmIChkdW1wX2ZsYWdzICYgVERGX0RFVEFJTFMpKQorICAgIHByaW50X2dpbXBs ZV9zdG10IChkdW1wX2ZpbGUsIFNTQV9OQU1FX0RFRl9TVE1UIChuZXdfdmFsKSwgMCwgVERG X1NMSU0pOworCisgIGlmICh3cml0ZSkKKyAgICB7CisgICAgICBuZXdfdmFsID0gaWZjX3Rl bXBfdmFyIChyZXBfdHlwZSwKKwkJCSAgICAgIGJ1aWxkMyAoQklUX0lOU0VSVF9FWFBSLCBy ZXBfdHlwZSwgbmV3X3ZhbCwKKwkJCQkgICAgICB1bnNoYXJlX2V4cHIgKGdpbXBsZV9hc3Np Z25fcmhzMSAoc3RtdCkpLAorCQkJCSAgICAgIGJpdHBvcyksICZnc2kpOworCisgICAgICBp ZiAoZHVtcF9maWxlICYmIChkdW1wX2ZsYWdzICYgVERGX0RFVEFJTFMpKQorCXByaW50X2dp bXBsZV9zdG10IChkdW1wX2ZpbGUsIFNTQV9OQU1FX0RFRl9TVE1UIChuZXdfdmFsKSwgMCwg VERGX1NMSU0pOworCisgICAgICBnaW1wbGUgKm5ld19zdG10ID0gZ2ltcGxlX2J1aWxkX2Fz c2lnbiAodW5zaGFyZV9leHByIChyZXBfY29tcF9yZWYpLAorCQkJCQkgICAgICBuZXdfdmFs KTsKKyAgICAgIGdpbXBsZV9tb3ZlX3ZvcHMgKG5ld19zdG10LCBzdG10KTsKKyAgICAgIGdz aV9pbnNlcnRfYmVmb3JlICgmZ3NpLCBuZXdfc3RtdCwgR1NJX1NBTUVfU1RNVCk7CisKKyAg ICAgIGlmIChkdW1wX2ZpbGUgJiYgKGR1bXBfZmxhZ3MgJiBUREZfREVUQUlMUykpCisJcHJp bnRfZ2ltcGxlX3N0bXQgKGR1bXBfZmlsZSwgbmV3X3N0bXQsIDAsIFRERl9TTElNKTsKKyAg ICB9CisgIGVsc2UKKyAgICB7CisgICAgICB0cmVlIGJmciA9IGJ1aWxkMyAoQklUX0ZJRUxE X1JFRiwgYmZfdHlwZSwgbmV3X3ZhbCwKKwkJCSBidWlsZF9pbnRfY3N0IChiaXRzaXpldHlw ZSwgVFlQRV9QUkVDSVNJT04gKGJmX3R5cGUpKSwKKwkJCSBiaXRwb3MpOworICAgICAgbmV3 X3ZhbCA9IGlmY190ZW1wX3ZhciAoYmZfdHlwZSwgYmZyLCAmZ3NpKTsKKworICAgICAgZ2lt cGxlICpuZXdfc3RtdCA9IGdpbXBsZV9idWlsZF9hc3NpZ24gKGdpbXBsZV9hc3NpZ25fbGhz IChzdG10KSwKKwkJCQkJICAgICAgbmV3X3ZhbCk7CisgICAgICBnaW1wbGVfbW92ZV92b3Bz IChuZXdfc3RtdCwgc3RtdCk7CisgICAgICBnc2lfaW5zZXJ0X2JlZm9yZSAoJmdzaSwgbmV3 X3N0bXQsIEdTSV9TQU1FX1NUTVQpOworCisgICAgICBpZiAoZHVtcF9maWxlICYmIChkdW1w X2ZsYWdzICYgVERGX0RFVEFJTFMpKQorCXByaW50X2dpbXBsZV9zdG10IChkdW1wX2ZpbGUs IG5ld19zdG10LCAwLCBUREZfU0xJTSk7CisgICAgfQorCisgIGdzaV9yZW1vdmUgKCZnc2ks IHRydWUpOworfQorCisvKiBSZXR1cm4gVFJVRSBpZiB0aGVyZSBhcmUgYml0ZmllbGRzIHRv IGxvd2VyIGluIHRoaXMgTE9PUC4gIEZpbGwgVE9fTE9XRVIKKyAgIHdpdGggZGF0YSBzdHJ1 Y3R1cmVzIHJlcHJlc2VudGluZyB0aGVzZSBiaXRmaWVsZHMuICAqLworCitzdGF0aWMgYm9v bAorYml0ZmllbGRzX3RvX2xvd2VyX3AgKGNsYXNzIGxvb3AgKmxvb3AsCisJCSAgICAgIHZl YyA8Z2Fzc2lnbiAqPiAmcmVhZHNfdG9fbG93ZXIsCisJCSAgICAgIHZlYyA8Z2Fzc2lnbiAq PiAmd3JpdGVzX3RvX2xvd2VyKQoreworICBnaW1wbGVfc3RtdF9pdGVyYXRvciBnc2k7CisK KyAgaWYgKGR1bXBfZmlsZSAmJiAoZHVtcF9mbGFncyAmIFRERl9ERVRBSUxTKSkKKyAgICB7 CisgICAgICBmcHJpbnRmIChkdW1wX2ZpbGUsICJBbmFseXppbmcgbG9vcCAlZCBmb3IgYml0 ZmllbGRzOlxuIiwgbG9vcC0+bnVtKTsKKyAgICB9CisKKyAgZm9yICh1bnNpZ25lZCBpID0g MDsgaSA8IGxvb3AtPm51bV9ub2RlczsgKytpKQorICAgIHsKKyAgICAgIGJhc2ljX2Jsb2Nr IGJiID0gaWZjX2Jic1tpXTsKKyAgICAgIGZvciAoZ3NpID0gZ3NpX3N0YXJ0X2JiIChiYik7 ICFnc2lfZW5kX3AgKGdzaSk7IGdzaV9uZXh0ICgmZ3NpKSkKKwl7CisJICBnYXNzaWduICpz dG10ID0gZHluX2Nhc3Q8Z2Fzc2lnbio+IChnc2lfc3RtdCAoZ3NpKSk7CisJICBpZiAoIXN0 bXQpCisJICAgIGNvbnRpbnVlOworCisJICB0cmVlIG9wID0gZ2ltcGxlX2Fzc2lnbl9saHMg KHN0bXQpOworCSAgYm9vbCB3cml0ZSA9IFRSRUVfQ09ERSAob3ApID09IENPTVBPTkVOVF9S RUY7CisKKwkgIGlmICghd3JpdGUpCisJICAgIG9wID0gZ2ltcGxlX2Fzc2lnbl9yaHMxIChz dG10KTsKKworCSAgaWYgKFRSRUVfQ09ERSAob3ApICE9IENPTVBPTkVOVF9SRUYpCisJICAg IGNvbnRpbnVlOworCisJICBpZiAoREVDTF9CSVRfRklFTERfVFlQRSAoVFJFRV9PUEVSQU5E IChvcCwgMSkpKQorCSAgICB7CisJICAgICAgaWYgKGR1bXBfZmlsZSAmJiAoZHVtcF9mbGFn cyAmIFRERl9ERVRBSUxTKSkKKwkJcHJpbnRfZ2ltcGxlX3N0bXQgKGR1bXBfZmlsZSwgc3Rt dCwgMCwgVERGX1NMSU0pOworCisJICAgICAgaWYgKCFJTlRFR1JBTF9UWVBFX1AgKFRSRUVf VFlQRSAob3ApKSkKKwkJeworCQkgIGlmIChkdW1wX2ZpbGUgJiYgKGR1bXBfZmxhZ3MgJiBU REZfREVUQUlMUykpCisJCSAgICBmcHJpbnRmIChkdW1wX2ZpbGUsICJcdCBCaXRmaWVsZCBO TyBPSyB0byBsb3dlciwiCisJCQkJCSIgZmllbGQgdHlwZSBpcyBub3QgSW50ZWdyYWwuXG4i KTsKKwkJICByZXR1cm4gZmFsc2U7CisJCX0KKworCSAgICAgIGlmICghZ2V0X2JpdGZpZWxk X3JlcCAoc3RtdCwgd3JpdGUsIE5VTEwsIE5VTEwpKQorCQl7CisJCSAgaWYgKGR1bXBfZmls ZSAmJiAoZHVtcF9mbGFncyAmIFRERl9ERVRBSUxTKSkKKwkJICAgIGZwcmludGYgKGR1bXBf ZmlsZSwgIlx0IEJpdGZpZWxkIE5PVCBPSyB0byBsb3dlciwiCisJCQkJCSIgcmVwcmVzZW50 YXRpdmUgaXMgQkxLbW9kZS5cbiIpOworCQkgIHJldHVybiBmYWxzZTsKKwkJfQorCisJICAg ICAgaWYgKGR1bXBfZmlsZSAmJiAoZHVtcF9mbGFncyAmIFRERl9ERVRBSUxTKSkKKwkJZnBy aW50ZiAoZHVtcF9maWxlLCAiXHRCaXRmaWVsZCBPSyB0byBsb3dlci5cbiIpOworCSAgICAg IGlmICh3cml0ZSkKKwkJd3JpdGVzX3RvX2xvd2VyLnNhZmVfcHVzaCAoc3RtdCk7CisJICAg ICAgZWxzZQorCQlyZWFkc190b19sb3dlci5zYWZlX3B1c2ggKHN0bXQpOworCSAgICB9CisJ fQorICAgIH0KKyAgcmV0dXJuICFyZWFkc190b19sb3dlci5pc19lbXB0eSAoKSB8fCAhd3Jp dGVzX3RvX2xvd2VyLmlzX2VtcHR5ICgpOworfQorCisKIC8qIElmLWNvbnZlcnQgTE9PUCB3 aGVuIGl0IGlzIGxlZ2FsLiAgRm9yIHRoZSBtb21lbnQgdGhpcyBwYXNzIGhhcyBubwogICAg cHJvZml0YWJpbGl0eSBhbmFseXNpcy4gIFJldHVybnMgbm9uLXplcm8gdG9kbyBmbGFncyB3 aGVuIHNvbWV0aGluZwogICAgY2hhbmdlZC4gICovCkBAIC0zMjY5LDEyICszNDcwLDE2IEBA IHRyZWVfaWZfY29udmVyc2lvbiAoY2xhc3MgbG9vcCAqbG9vcCwgdmVjPGdpbXBsZSAqPiAq cHJlZHMpCiAgIHVuc2lnbmVkIGludCB0b2RvID0gMDsKICAgYm9vbCBhZ2dyZXNzaXZlX2lm X2NvbnY7CiAgIGNsYXNzIGxvb3AgKnJsb29wOworICBhdXRvX3ZlYyA8Z2Fzc2lnbiAqLCA0 PiByZWFkc190b19sb3dlcjsKKyAgYXV0b192ZWMgPGdhc3NpZ24gKiwgND4gd3JpdGVzX3Rv X2xvd2VyOwogICBiaXRtYXAgZXhpdF9iYnM7CiAgIGVkZ2UgcGU7CiAKICBhZ2FpbjoKICAg cmxvb3AgPSBOVUxMOwogICBpZmNfYmJzID0gTlVMTDsKKyAgbmVlZF90b19sb3dlcl9iaXRm aWVsZHMgPSBmYWxzZTsKKyAgbmVlZF90b19pZmN2dCA9IGZhbHNlOwogICBuZWVkX3RvX3By ZWRpY2F0ZSA9IGZhbHNlOwogICBuZWVkX3RvX3Jld3JpdGVfdW5kZWZpbmVkID0gZmFsc2U7 CiAgIGFueV9jb21wbGljYXRlZF9waGkgPSBmYWxzZTsKQEAgLTMyOTAsMTYgKzM0OTUsNDIg QEAgdHJlZV9pZl9jb252ZXJzaW9uIChjbGFzcyBsb29wICpsb29wLCB2ZWM8Z2ltcGxlICo+ ICpwcmVkcykKIAlhZ2dyZXNzaXZlX2lmX2NvbnYgPSB0cnVlOwogICAgIH0KIAotICBpZiAo IWlmY3Z0X3NwbGl0X2NyaXRpY2FsX2VkZ2VzIChsb29wLCBhZ2dyZXNzaXZlX2lmX2NvbnYp KQorICBpZiAoIXNpbmdsZV9leGl0IChsb29wKSkKICAgICBnb3RvIGNsZWFudXA7CiAKLSAg aWYgKCFpZl9jb252ZXJ0aWJsZV9sb29wX3AgKGxvb3ApCi0gICAgICB8fCAhZGJnX2NudCAo aWZfY29udmVyc2lvbl90cmVlKSkKKyAgLyogSWYgdGhlcmUgYXJlIG1vcmUgdGhhbiB0d28g QkJzIGluIHRoZSBsb29wIHRoZW4gdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGlmCisgICAgIHRv IGNvbnZlcnQuICAqLworICBpZiAobG9vcC0+bnVtX25vZGVzID4gMgorICAgICAgJiYgIWlm Y3Z0X3NwbGl0X2NyaXRpY2FsX2VkZ2VzIChsb29wLCBhZ2dyZXNzaXZlX2lmX2NvbnYpKQog ICAgIGdvdG8gY2xlYW51cDsKIAotICBpZiAoKG5lZWRfdG9fcHJlZGljYXRlIHx8IGFueV9j b21wbGljYXRlZF9waGkpCi0gICAgICAmJiAoKCFmbGFnX3RyZWVfbG9vcF92ZWN0b3JpemUg JiYgIWxvb3AtPmZvcmNlX3ZlY3Rvcml6ZSkKLQkgIHx8IGxvb3AtPmRvbnRfdmVjdG9yaXpl KSkKKyAgaWZjX2JicyA9IGdldF9sb29wX2JvZHlfaW5faWZfY29udl9vcmRlciAobG9vcCk7 CisgIGlmICghaWZjX2JicykKKyAgICB7CisgICAgICBpZiAoZHVtcF9maWxlICYmIChkdW1w X2ZsYWdzICYgVERGX0RFVEFJTFMpKQorCWZwcmludGYgKGR1bXBfZmlsZSwgIklycmVkdWNp YmxlIGxvb3BcbiIpOworICAgICAgZ290byBjbGVhbnVwOworICAgIH0KKworICBpZiAobG9v cC0+bnVtX25vZGVzID4gMikKKyAgICB7CisgICAgICBuZWVkX3RvX2lmY3Z0ID0gdHJ1ZTsK KworICAgICAgaWYgKCFpZl9jb252ZXJ0aWJsZV9sb29wX3AgKGxvb3ApIHx8ICFkYmdfY250 IChpZl9jb252ZXJzaW9uX3RyZWUpKQorCWdvdG8gY2xlYW51cDsKKworICAgICAgaWYgKChu ZWVkX3RvX3ByZWRpY2F0ZSB8fCBhbnlfY29tcGxpY2F0ZWRfcGhpKQorCSAgJiYgKCghZmxh Z190cmVlX2xvb3BfdmVjdG9yaXplICYmICFsb29wLT5mb3JjZV92ZWN0b3JpemUpCisJICAg ICAgfHwgbG9vcC0+ZG9udF92ZWN0b3JpemUpKQorCWdvdG8gY2xlYW51cDsKKyAgICB9CisK KyAgaWYgKChmbGFnX3RyZWVfbG9vcF92ZWN0b3JpemUgfHwgbG9vcC0+Zm9yY2VfdmVjdG9y aXplKQorICAgICAgJiYgIWxvb3AtPmRvbnRfdmVjdG9yaXplKQorICAgIG5lZWRfdG9fbG93 ZXJfYml0ZmllbGRzID0gYml0ZmllbGRzX3RvX2xvd2VyX3AgKGxvb3AsIHJlYWRzX3RvX2xv d2VyLAorCQkJCQkJICAgIHdyaXRlc190b19sb3dlcik7CisKKyAgaWYgKCFuZWVkX3RvX2lm Y3Z0ICYmICFuZWVkX3RvX2xvd2VyX2JpdGZpZWxkcykKICAgICBnb3RvIGNsZWFudXA7CiAK ICAgLyogVGhlIGVkZ2UgdG8gaW5zZXJ0IGludmFyaWFudCBzdG10cyBvbi4gICovCkBAIC0z MzEwLDcgKzM1NDEsOCBAQCB0cmVlX2lmX2NvbnZlcnNpb24gKGNsYXNzIGxvb3AgKmxvb3As IHZlYzxnaW1wbGUgKj4gKnByZWRzKQogICAgICBFaXRoZXIgdmVyc2lvbiB0aGlzIGxvb3As IG9yIGlmIHRoZSBwYXR0ZXJuIGlzIHJpZ2h0IGZvciBvdXRlci1sb29wCiAgICAgIHZlY3Rv cml6YXRpb24sIHZlcnNpb24gdGhlIG91dGVyIGxvb3AuICBJbiB0aGUgbGF0dGVyIGNhc2Ug d2Ugd2lsbAogICAgICBzdGlsbCBpZi1jb252ZXJ0IHRoZSBvcmlnaW5hbCBpbm5lciBsb29w LiAgKi8KLSAgaWYgKG5lZWRfdG9fcHJlZGljYXRlCisgIGlmIChuZWVkX3RvX2xvd2VyX2Jp dGZpZWxkcworICAgICAgfHwgbmVlZF90b19wcmVkaWNhdGUKICAgICAgIHx8IGFueV9jb21w bGljYXRlZF9waGkKICAgICAgIHx8IGZsYWdfdHJlZV9sb29wX2lmX2NvbnZlcnQgIT0gMSkK ICAgICB7CkBAIC0zMzUwLDEwICszNTgyLDMxIEBAIHRyZWVfaWZfY29udmVyc2lvbiAoY2xh c3MgbG9vcCAqbG9vcCwgdmVjPGdpbXBsZSAqPiAqcHJlZHMpCiAJcGUgPSBzaW5nbGVfcHJl ZF9lZGdlIChnaW1wbGVfYmIgKHByZWRzLT5sYXN0ICgpKSk7CiAgICAgfQogCi0gIC8qIE5v dyBhbGwgc3RhdGVtZW50cyBhcmUgaWYtY29udmVydGlibGUuICBDb21iaW5lIGFsbCB0aGUg YmFzaWMKLSAgICAgYmxvY2tzIGludG8gb25lIGh1Z2UgYmFzaWMgYmxvY2sgZG9pbmcgdGhl IGlmLWNvbnZlcnNpb24KLSAgICAgb24tdGhlLWZseS4gICovCi0gIGNvbWJpbmVfYmxvY2tz IChsb29wKTsKKyAgaWYgKG5lZWRfdG9fbG93ZXJfYml0ZmllbGRzKQorICAgIHsKKyAgICAg IGlmIChkdW1wX2ZpbGUgJiYgKGR1bXBfZmxhZ3MgJiBUREZfREVUQUlMUykpCisJeworCSAg ZnByaW50ZiAoZHVtcF9maWxlLCAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7CisJ ICBmcHJpbnRmIChkdW1wX2ZpbGUsICJTdGFydCBsb3dlcmluZyBiaXRmaWVsZHNcbiIpOwor CX0KKyAgICAgIHdoaWxlICghcmVhZHNfdG9fbG93ZXIuaXNfZW1wdHkgKCkpCisJbG93ZXJf Yml0ZmllbGQgKHJlYWRzX3RvX2xvd2VyLnBvcCAoKSwgZmFsc2UpOworICAgICAgd2hpbGUg KCF3cml0ZXNfdG9fbG93ZXIuaXNfZW1wdHkgKCkpCisJbG93ZXJfYml0ZmllbGQgKHdyaXRl c190b19sb3dlci5wb3AgKCksIHRydWUpOworCisgICAgICBpZiAoZHVtcF9maWxlICYmIChk dW1wX2ZsYWdzICYgVERGX0RFVEFJTFMpKQorCXsKKwkgIGZwcmludGYgKGR1bXBfZmlsZSwg IkRvbmUgbG93ZXJpbmcgYml0ZmllbGRzXG4iKTsKKwkgIGZwcmludGYgKGR1bXBfZmlsZSwg Ii0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOworCX0KKyAgICB9CisgIGlmIChuZWVk X3RvX2lmY3Z0KQorICAgIHsKKyAgICAgIC8qIE5vdyBhbGwgc3RhdGVtZW50cyBhcmUgaWYt Y29udmVydGlibGUuICBDb21iaW5lIGFsbCB0aGUgYmFzaWMKKwkgYmxvY2tzIGludG8gb25l IGh1Z2UgYmFzaWMgYmxvY2sgZG9pbmcgdGhlIGlmLWNvbnZlcnNpb24KKwkgb24tdGhlLWZs eS4gICovCisgICAgICBjb21iaW5lX2Jsb2NrcyAobG9vcCk7CisgICAgfQogCiAgIC8qIFBl cmZvcm0gbG9jYWwgQ1NFLCB0aGlzIGVzcC4gaGVscHMgdGhlIHZlY3Rvcml6ZXIgYW5hbHlz aXMgaWYgbG9hZHMKICAgICAgYW5kIHN0b3JlcyBhcmUgaW52b2x2ZWQuICBDU0Ugb25seSB0 aGUgbG9vcCBib2R5LCBub3QgdGhlIGVudHJ5CkBAIC0zMzkzLDYgKzM2NDYsOCBAQCB0cmVl X2lmX2NvbnZlcnNpb24gKGNsYXNzIGxvb3AgKmxvb3AsIHZlYzxnaW1wbGUgKj4gKnByZWRz KQogICBpZiAocmxvb3AgIT0gTlVMTCkKICAgICB7CiAgICAgICBsb29wID0gcmxvb3A7Cisg ICAgICByZWFkc190b19sb3dlci50cnVuY2F0ZSAoMCk7CisgICAgICB3cml0ZXNfdG9fbG93 ZXIudHJ1bmNhdGUgKDApOwogICAgICAgZ290byBhZ2FpbjsKICAgICB9CiAKZGlmZiAtLWdp dCBhL2djYy90cmVlLXZlY3QtZGF0YS1yZWZzLmNjIGIvZ2NjL3RyZWUtdmVjdC1kYXRhLXJl ZnMuY2MKaW5kZXggYjI3OWE4MjU1MWViNzAzNzk4MDRkNDA1OTgzYWU1ZGM0NGI2NmJmNS4u ZTkzY2RjNzI3ZGE0YmI3ODYzYjJhZDEzZjI5ZjdkNTUwNDkyYWRlYSAxMDA2NDQKLS0tIGEv Z2NjL3RyZWUtdmVjdC1kYXRhLXJlZnMuY2MKKysrIGIvZ2NjL3RyZWUtdmVjdC1kYXRhLXJl ZnMuY2MKQEAgLTQzMDEsNyArNDMwMSw4IEBAIHZlY3RfZmluZF9zdG10X2RhdGFfcmVmZXJl bmNlIChsb29wX3AgbG9vcCwgZ2ltcGxlICpzdG10LAogICAgICAgZnJlZV9kYXRhX3JlZiAo ZHIpOwogICAgICAgcmV0dXJuIG9wdF9yZXN1bHQ6OmZhaWx1cmVfYXQgKHN0bXQsCiAJCQkJ ICAgICAibm90IHZlY3Rvcml6ZWQ6IgotCQkJCSAgICAgIiBzdGF0ZW1lbnQgaXMgYml0Zmll bGQgYWNjZXNzICVHIiwgc3RtdCk7CisJCQkJICAgICAiIHN0YXRlbWVudCBpcyBhbiB1bnN1 cHBvcnRlZCIKKwkJCQkgICAgICIgYml0ZmllbGQgYWNjZXNzICVHIiwgc3RtdCk7CiAgICAg fQogCiAgIGlmIChEUl9CQVNFX0FERFJFU1MgKGRyKQpkaWZmIC0tZ2l0IGEvZ2NjL3RyZWUt dmVjdC1wYXR0ZXJucy5jYyBiL2djYy90cmVlLXZlY3QtcGF0dGVybnMuY2MKaW5kZXggZGZi ZmI3MWIzYzY5YTAyMDVjY2MxYjI4N2NiNTBmYTAyYTcwOTQyZS4uOTA0MjU5OWYwNDM5OWVj YTM3ZmU5MDM4ZDJiZDVjOWY3OGUzYTllNCAxMDA2NDQKLS0tIGEvZ2NjL3RyZWUtdmVjdC1w YXR0ZXJucy5jYworKysgYi9nY2MvdHJlZS12ZWN0LXBhdHRlcm5zLmNjCkBAIC0zNSw2ICsz NSw4IEBAIGFsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qg c2VlCiAjaW5jbHVkZSAidHJlZS1laC5oIgogI2luY2x1ZGUgImdpbXBsaWZ5LmgiCiAjaW5j bHVkZSAiZ2ltcGxlLWl0ZXJhdG9yLmgiCisjaW5jbHVkZSAiZ2ltcGxlLWZvbGQuaCIKKyNp bmNsdWRlICJnaW1wbGlmeS1tZS5oIgogI2luY2x1ZGUgImNmZ2xvb3AuaCIKICNpbmNsdWRl ICJ0cmVlLXZlY3Rvcml6ZXIuaCIKICNpbmNsdWRlICJkdW1wZmlsZS5oIgpAQCAtNjYzLDcg KzY2NSw3IEBAIHZlY3Rfd2lkZW5lZF9vcF90cmVlICh2ZWNfaW5mbyAqdmluZm8sIHN0bXRf dmVjX2luZm8gc3RtdF9pbmZvLCB0cmVlX2NvZGUgY29kZSwKICAgIGlzIE5VTEwsIHRoZSBj YWxsZXIgbXVzdCBzZXQgU1NBX05BTUVfREVGX1NUTVQgZm9yIHRoZSByZXR1cm5lZCBTU0Eg dmFyLiAqLwogCiBzdGF0aWMgdHJlZQotdmVjdF9yZWNvZ190ZW1wX3NzYV92YXIgKHRyZWUg dHlwZSwgZ2ltcGxlICpzdG10KQordmVjdF9yZWNvZ190ZW1wX3NzYV92YXIgKHRyZWUgdHlw ZSwgZ2ltcGxlICpzdG10ID0gTlVMTCkKIHsKICAgcmV0dXJuIG1ha2VfdGVtcF9zc2FfbmFt ZSAodHlwZSwgc3RtdCwgInBhdHQiKTsKIH0KQEAgLTE4MjgsNiArMTgzMCwzMjkgQEAgdmVj dF9yZWNvZ193aWRlbl9zdW1fcGF0dGVybiAodmVjX2luZm8gKnZpbmZvLAogICByZXR1cm4g cGF0dGVybl9zdG10OwogfQogCisvKiBGdW5jdGlvbiB2ZWN0X3JlY29nX2JpdGZpZWxkX3Jl Zl9wYXR0ZXJuCisKKyAgIFRyeSB0byBmaW5kIHRoZSBmb2xsb3dpbmcgcGF0dGVybjoKKwor ICAgYmZfdmFsdWUgPSBCSVRfRklFTERfUkVGIChjb250YWluZXIsIGJpdHNpemUsIGJpdHBv cyk7CisgICByZXN1bHQgPSAodHlwZV9vdXQpIGJmX3ZhbHVlOworCisgICB3aGVyZSB0eXBl X291dCBpcyBhIG5vbi1iaXRmaWVsZCB0eXBlLCB0aGF0IGlzIHRvIHNheSwgaXQncyBwcmVj aXNpb24gbWF0Y2hlcworICAgMl4oVFlQRV9TSVpFKHR5cGVfb3V0KSAtIChUWVBFX1VOU0lH TkVEICh0eXBlX291dCkgPyAxIDogMikpLgorCisgICBJbnB1dDoKKworICAgKiBTVE1UX1ZJ TkZPOiBUaGUgc3RtdCBmcm9tIHdoaWNoIHRoZSBwYXR0ZXJuIHNlYXJjaCBiZWdpbnMuCisg ICBoZXJlIGl0IHN0YXJ0cyB3aXRoOgorICAgcmVzdWx0ID0gKHR5cGVfb3V0KSBiZl92YWx1 ZTsKKworICAgT3V0cHV0OgorCisgICAqIFRZUEVfT1VUOiBUaGUgdmVjdG9yIHR5cGUgb2Yg dGhlIG91dHB1dCBvZiB0aGlzIHBhdHRlcm4uCisKKyAgICogUmV0dXJuIHZhbHVlOiBBIG5l dyBzdG10IHRoYXQgd2lsbCBiZSB1c2VkIHRvIHJlcGxhY2UgdGhlIHNlcXVlbmNlIG9mCisg ICBzdG10cyB0aGF0IGNvbnN0aXR1dGUgdGhlIHBhdHRlcm4uIElmIHRoZSBwcmVjaXNpb24g b2YgdHlwZV9vdXQgaXMgYmlnZ2VyCisgICB0aGFuIHRoZSBwcmVjaXNpb24gdHlwZSBvZiBf MSB3ZSBwZXJmb3JtIHRoZSB3aWRlbmluZyBiZWZvcmUgdGhlIHNoaWZ0aW5nLAorICAgc2lu Y2UgdGhlIG5ldyBwcmVjaXNpb24gd2lsbCBiZSBsYXJnZSBlbm91Z2ggdG8gc2hpZnQgdGhl IHZhbHVlIGFuZCBtb3ZpbmcKKyAgIHdpZGVuaW5nIG9wZXJhdGlvbnMgdXAgdGhlIHN0YXRl bWVudCBjaGFpbiBlbmFibGVzIHRoZSBnZW5lcmF0aW9uIG9mCisgICB3aWRlbmluZyBsb2Fk cy4gIElmIHdlIGFyZSB3aWRlbmluZyBhbmQgdGhlIG9wZXJhdGlvbiBhZnRlciB0aGUgcGF0 dGVybiBpcworICAgYW4gYWRkaXRpb24gdGhlbiB3ZSBtYXNrIGZpcnN0IGFuZCBzaGlmdCBs YXRlciwgdG8gZW5hYmxlIHRoZSBnZW5lcmF0aW9uIG9mCisgICBzaGlmdGluZyBhZGRzLiAg SW4gdGhlIGNhc2Ugb2YgbmFycm93aW5nIHdlIHdpbGwgYWx3YXlzIG1hc2sgZmlyc3QsIHNo aWZ0CisgICBsYXN0IGFuZCB0aGVuIHBlcmZvcm0gYSBuYXJyb3dpbmcgb3BlcmF0aW9uLiAg VGhpcyB3aWxsIGVuYWJsZSB0aGUKKyAgIGdlbmVyYXRpb24gb2YgbmFycm93aW5nIHNoaWZ0 cy4KKworICAgV2lkZW5pbmcgd2l0aCBtYXNrIGZpcnN0LCBzaGlmdCBsYXRlcjoKKyAgIGNv bnRhaW5lciA9ICh0eXBlX291dCkgY29udGFpbmVyOworICAgbWFza2VkID0gY29udGFpbmVy ICYgKCgoMSA8PCBiaXRzaXplKSAtIDEpIDw8IGJpdHBvcyk7CisgICByZXN1bHQgPSBwYXR0 MiA+PiBtYXNrZWQ7CisKKyAgIFdpZGVuaW5nIHdpdGggc2hpZnQgZmlyc3QsIG1hc2sgbGFz dDoKKyAgIGNvbnRhaW5lciA9ICh0eXBlX291dCkgY29udGFpbmVyOworICAgc2hpZnRlZCA9 IGNvbnRhaW5lciA+PiBiaXRwb3M7CisgICByZXN1bHQgPSBzaGlmdGVkICYgKCgxIDw8IGJp dHNpemUpIC0gMSk7CisKKyAgIE5hcnJvd2luZzoKKyAgIG1hc2tlZCA9IGNvbnRhaW5lciAm ICgoKDEgPDwgYml0c2l6ZSkgLSAxKSA8PCBiaXRwb3MpOworICAgcmVzdWx0ID0gbWFza2Vk ID4+IGJpdHBvczsKKyAgIHJlc3VsdCA9ICh0eXBlX291dCkgcmVzdWx0OworCisgICBUaGUg c2hpZnRpbmcgaXMgYWx3YXlzIG9wdGlvbmFsIGRlcGVuZGluZyBvbiB3aGV0aGVyIGJpdHBv cyAhPSAwLgorCisqLworCitzdGF0aWMgZ2ltcGxlICoKK3ZlY3RfcmVjb2dfYml0ZmllbGRf cmVmX3BhdHRlcm4gKHZlY19pbmZvICp2aW5mbywgc3RtdF92ZWNfaW5mbyBzdG10X2luZm8s CisJCQkJIHRyZWUgKnR5cGVfb3V0KQoreworICBnYXNzaWduICpmaXJzdF9zdG10ID0gZHlu X2Nhc3QgPGdhc3NpZ24gKj4gKHN0bXRfaW5mby0+c3RtdCk7CisKKyAgaWYgKCFmaXJzdF9z dG10KQorICAgIHJldHVybiBOVUxMOworCisgIGdhc3NpZ24gKmJmX3N0bXQ7CisgIGlmIChD T05WRVJUX0VYUFJfQ09ERV9QIChnaW1wbGVfYXNzaWduX3Joc19jb2RlIChmaXJzdF9zdG10 KSkKKyAgICAgICYmIFRSRUVfQ09ERSAoZ2ltcGxlX2Fzc2lnbl9yaHMxIChmaXJzdF9zdG10 KSkgPT0gU1NBX05BTUUpCisgICAgeworICAgICAgZ2ltcGxlICpzZWNvbmRfc3RtdAorCT0g U1NBX05BTUVfREVGX1NUTVQgKGdpbXBsZV9hc3NpZ25fcmhzMSAoZmlyc3Rfc3RtdCkpOwor ICAgICAgYmZfc3RtdCA9IGR5bl9jYXN0IDxnYXNzaWduICo+IChzZWNvbmRfc3RtdCk7Cisg ICAgICBpZiAoIWJmX3N0bXQKKwkgIHx8IGdpbXBsZV9hc3NpZ25fcmhzX2NvZGUgKGJmX3N0 bXQpICE9IEJJVF9GSUVMRF9SRUYpCisJcmV0dXJuIE5VTEw7CisgICAgfQorICBlbHNlCisg ICAgcmV0dXJuIE5VTEw7CisKKyAgdHJlZSBiZl9yZWYgPSBnaW1wbGVfYXNzaWduX3JoczEg KGJmX3N0bXQpOworICB0cmVlIGNvbnRhaW5lciA9IFRSRUVfT1BFUkFORCAoYmZfcmVmLCAw KTsKKworICBpZiAoIWJpdF9maWVsZF9vZmZzZXQgKGJmX3JlZikuaXNfY29uc3RhbnQgKCkK KyAgICAgIHx8ICFiaXRfZmllbGRfc2l6ZSAoYmZfcmVmKS5pc19jb25zdGFudCAoKQorICAg ICAgfHwgIXRyZWVfZml0c191aHdpX3AgKFRZUEVfU0laRSAoVFJFRV9UWVBFIChjb250YWlu ZXIpKSkpCisgICAgcmV0dXJuIE5VTEw7CisKKyAgaWYgKCFJTlRFR1JBTF9UWVBFX1AgKFRS RUVfVFlQRSAoYmZfcmVmKSkpCisgICAgcmV0dXJuIE5VTEw7CisKKyAgZ2ltcGxlICp1c2Vf c3RtdCwgKnBhdHRlcm5fc3RtdDsKKyAgdXNlX29wZXJhbmRfcCB1c2VfcDsKKyAgdHJlZSBy ZXQgPSBnaW1wbGVfYXNzaWduX2xocyAoZmlyc3Rfc3RtdCk7CisgIHRyZWUgcmV0X3R5cGUg PSBUUkVFX1RZUEUgKHJldCk7CisgIGJvb2wgc2hpZnRfZmlyc3QgPSB0cnVlOworICB0cmVl IHZlY3R5cGU7CisKKyAgLyogSWYgdGhlIGZpcnN0IG9wZXJhbmQgb2YgdGhlIEJJVF9GSUVM RF9SRUYgaXMgbm90IGFuIElOVEVHRVIgdHlwZSwgY29udmVydAorICAgICBpdCB0byBvbmUg b2YgdGhlIHNhbWUgd2lkdGggc28gd2UgY2FuIHBlcmZvcm0gdGhlIG5lY2Vzc2FyeSBtYXNr aW5nIGFuZAorICAgICBzaGlmdGluZy4gICovCisgIGlmICghSU5URUdSQUxfVFlQRV9QIChU UkVFX1RZUEUgKGNvbnRhaW5lcikpKQorICAgIHsKKyAgICAgIHVuc2lnbmVkIEhPU1RfV0lE RV9JTlQgY29udGFpbmVyX3NpemUgPQorCXRyZWVfdG9fdWh3aSAoVFlQRV9TSVpFIChUUkVF X1RZUEUgKGNvbnRhaW5lcikpKTsKKyAgICAgIHRyZWUgaW50X3R5cGUgPSBidWlsZF9ub25z dGFuZGFyZF9pbnRlZ2VyX3R5cGUgKGNvbnRhaW5lcl9zaXplLCB0cnVlKTsKKyAgICAgIHBh dHRlcm5fc3RtdAorCT0gZ2ltcGxlX2J1aWxkX2Fzc2lnbiAodmVjdF9yZWNvZ190ZW1wX3Nz YV92YXIgKGludF90eXBlKSwKKwkJCSAgICAgICBWSUVXX0NPTlZFUlRfRVhQUiwgY29udGFp bmVyKTsKKyAgICAgIHZlY3R5cGUgPSBnZXRfdmVjdHlwZV9mb3Jfc2NhbGFyX3R5cGUgKHZp bmZvLCBpbnRfdHlwZSk7CisgICAgICBjb250YWluZXIgPSBnaW1wbGVfYXNzaWduX2xocyAo cGF0dGVybl9zdG10KTsKKyAgICAgIGFwcGVuZF9wYXR0ZXJuX2RlZl9zZXEgKHZpbmZvLCBz dG10X2luZm8sIHBhdHRlcm5fc3RtdCwgdmVjdHlwZSk7CisgICAgfQorICBlbHNlCisgICAg dmVjdHlwZSA9IGdldF92ZWN0eXBlX2Zvcl9zY2FsYXJfdHlwZSAodmluZm8sIFRSRUVfVFlQ RSAoY29udGFpbmVyKSk7CisKKyAgLyogV2UgbW92ZSB0aGUgY29udmVyc2lvbiBlYXJsaWVy IGlmIHRoZSBsb2FkZWQgdHlwZSBpcyBzbWFsbGVyIHRoYW4gdGhlCisgICAgIHJldHVybiB0 eXBlIHRvIGVuYWJsZSB0aGUgdXNlIG9mIHdpZGVuaW5nIGxvYWRzLiAgKi8KKyAgaWYgKFRZ UEVfUFJFQ0lTSU9OIChUUkVFX1RZUEUgKGNvbnRhaW5lcikpIDwgVFlQRV9QUkVDSVNJT04g KHJldF90eXBlKQorICAgICAgJiYgIXVzZWxlc3NfdHlwZV9jb252ZXJzaW9uX3AgKFRSRUVf VFlQRSAoY29udGFpbmVyKSwgcmV0X3R5cGUpKQorICAgIHsKKyAgICAgIHBhdHRlcm5fc3Rt dAorCT0gZ2ltcGxlX2J1aWxkX2Fzc2lnbiAodmVjdF9yZWNvZ190ZW1wX3NzYV92YXIgKHJl dF90eXBlKSwKKwkJCSAgICAgICBOT1BfRVhQUiwgY29udGFpbmVyKTsKKyAgICAgIGNvbnRh aW5lciA9IGdpbXBsZV9nZXRfbGhzIChwYXR0ZXJuX3N0bXQpOworICAgICAgYXBwZW5kX3Bh dHRlcm5fZGVmX3NlcSAodmluZm8sIHN0bXRfaW5mbywgcGF0dGVybl9zdG10KTsKKyAgICB9 CisgIGVsc2UgaWYgKCF1c2VsZXNzX3R5cGVfY29udmVyc2lvbl9wIChUUkVFX1RZUEUgKGNv bnRhaW5lciksIHJldF90eXBlKSkKKyAgICAvKiBJZiB3ZSBhcmUgZG9pbmcgdGhlIGNvbnZl cnNpb24gbGFzdCB0aGVuIGFsc28gZGVsYXkgdGhlIHNoaWZ0IGFzIHdlIG1heQorICAgICAg IGJlIGFibGUgdG8gY29tYmluZSB0aGUgc2hpZnQgYW5kIGNvbnZlcnNpb24gaW4gY2VydGFp biBjYXNlcy4gICovCisgICAgc2hpZnRfZmlyc3QgPSBmYWxzZTsKKworICB0cmVlIGNvbnRh aW5lcl90eXBlID0gVFJFRV9UWVBFIChjb250YWluZXIpOworCisgIC8qIElmIHRoZSBvbmx5 IHVzZSBvZiB0aGUgcmVzdWx0IG9mIHRoaXMgQklUX0ZJRUxEX1JFRiArIENPTlZFUlQgaXMg YQorICAgICBQTFVTX0VYUFIgdGhlbiBkbyB0aGUgc2hpZnQgbGFzdCBhcyBzb21lIHRhcmdl dHMgY2FuIGNvbWJpbmUgdGhlIHNoaWZ0IGFuZAorICAgICBhZGQgaW50byBhIHNpbmdsZSBp bnN0cnVjdGlvbi4gICovCisgIGlmIChzaW5nbGVfaW1tX3VzZSAoZ2ltcGxlX2Fzc2lnbl9s aHMgKGZpcnN0X3N0bXQpLCAmdXNlX3AsICZ1c2Vfc3RtdCkpCisgICAgeworICAgICAgaWYg KGdpbXBsZV9jb2RlICh1c2Vfc3RtdCkgPT0gR0lNUExFX0FTU0lHTgorCSAgJiYgZ2ltcGxl X2Fzc2lnbl9yaHNfY29kZSAodXNlX3N0bXQpID09IFBMVVNfRVhQUikKKwlzaGlmdF9maXJz dCA9IGZhbHNlOworICAgIH0KKworICB1bnNpZ25lZCBIT1NUX1dJREVfSU5UIHNoaWZ0X24g PSBiaXRfZmllbGRfb2Zmc2V0IChiZl9yZWYpLnRvX2NvbnN0YW50ICgpOworICB1bnNpZ25l ZCBIT1NUX1dJREVfSU5UIG1hc2tfd2lkdGggPSBiaXRfZmllbGRfc2l6ZSAoYmZfcmVmKS50 b19jb25zdGFudCAoKTsKKyAgdW5zaWduZWQgSE9TVF9XSURFX0lOVCBwcmVjID0gdHJlZV90 b191aHdpIChUWVBFX1NJWkUgKGNvbnRhaW5lcl90eXBlKSk7CisgIGlmIChCWVRFU19CSUdf RU5ESUFOKQorICAgIHNoaWZ0X24gPSBwcmVjIC0gc2hpZnRfbiAtIG1hc2tfd2lkdGg7CisK KyAgLyogSWYgd2UgZG9uJ3QgaGF2ZSB0byBzaGlmdCB3ZSBvbmx5IGdlbmVyYXRlIHRoZSBt YXNrLCBzbyBqdXN0IGZpeCB0aGUKKyAgICAgY29kZS1wYXRoIHRvIHNoaWZ0X2ZpcnN0LiAg Ki8KKyAgaWYgKHNoaWZ0X24gPT0gMCkKKyAgICBzaGlmdF9maXJzdCA9IHRydWU7CisKKyAg dHJlZSByZXN1bHQ7CisgIGlmIChzaGlmdF9maXJzdCkKKyAgICB7CisgICAgICB0cmVlIHNo aWZ0ZWQgPSBjb250YWluZXI7CisgICAgICBpZiAoc2hpZnRfbikKKwl7CisJICBwYXR0ZXJu X3N0bXQKKwkgICAgPSBnaW1wbGVfYnVpbGRfYXNzaWduICh2ZWN0X3JlY29nX3RlbXBfc3Nh X3ZhciAoY29udGFpbmVyX3R5cGUpLAorCQkJCSAgIFJTSElGVF9FWFBSLCBjb250YWluZXIs CisJCQkJICAgYnVpbGRfaW50X2NzdCAoc2l6ZXR5cGUsIHNoaWZ0X24pKTsKKwkgIHNoaWZ0 ZWQgPSBnaW1wbGVfYXNzaWduX2xocyAocGF0dGVybl9zdG10KTsKKwkgIGFwcGVuZF9wYXR0 ZXJuX2RlZl9zZXEgKHZpbmZvLCBzdG10X2luZm8sIHBhdHRlcm5fc3RtdCwgdmVjdHlwZSk7 CisJfQorCisgICAgICB0cmVlIG1hc2sgPSB3aWRlX2ludF90b190cmVlIChjb250YWluZXJf dHlwZSwKKwkJCQkgICAgd2k6Om1hc2sgKG1hc2tfd2lkdGgsIGZhbHNlLCBwcmVjKSk7CisK KyAgICAgIHBhdHRlcm5fc3RtdAorCT0gZ2ltcGxlX2J1aWxkX2Fzc2lnbiAodmVjdF9yZWNv Z190ZW1wX3NzYV92YXIgKGNvbnRhaW5lcl90eXBlKSwKKwkJCSAgICAgICBCSVRfQU5EX0VY UFIsIHNoaWZ0ZWQsIG1hc2spOworICAgICAgcmVzdWx0ID0gZ2ltcGxlX2Fzc2lnbl9saHMg KHBhdHRlcm5fc3RtdCk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgdHJlZSBtYXNr ID0gd2lkZV9pbnRfdG9fdHJlZSAoY29udGFpbmVyX3R5cGUsCisJCQkJICAgIHdpOjpzaGlm dGVkX21hc2sgKHNoaWZ0X24sIG1hc2tfd2lkdGgsCisJCQkJCQkgICAgICBmYWxzZSwgcHJl YykpOworICAgICAgcGF0dGVybl9zdG10CisJPSBnaW1wbGVfYnVpbGRfYXNzaWduICh2ZWN0 X3JlY29nX3RlbXBfc3NhX3ZhciAoY29udGFpbmVyX3R5cGUpLAorCQkJICAgICAgIEJJVF9B TkRfRVhQUiwgY29udGFpbmVyLCBtYXNrKTsKKyAgICAgIHRyZWUgbWFza2VkID0gZ2ltcGxl X2Fzc2lnbl9saHMgKHBhdHRlcm5fc3RtdCk7CisKKyAgICAgIGFwcGVuZF9wYXR0ZXJuX2Rl Zl9zZXEgKHZpbmZvLCBzdG10X2luZm8sIHBhdHRlcm5fc3RtdCwgdmVjdHlwZSk7CisgICAg ICBwYXR0ZXJuX3N0bXQKKwk9IGdpbXBsZV9idWlsZF9hc3NpZ24gKHZlY3RfcmVjb2dfdGVt cF9zc2FfdmFyIChjb250YWluZXJfdHlwZSksCisJCQkgICAgICAgUlNISUZUX0VYUFIsIG1h c2tlZCwKKwkJCSAgICAgICBidWlsZF9pbnRfY3N0IChzaXpldHlwZSwgc2hpZnRfbikpOwor ICAgICAgcmVzdWx0ID0gZ2ltcGxlX2Fzc2lnbl9saHMgKHBhdHRlcm5fc3RtdCk7CisgICAg fQorCisgIGlmICghdXNlbGVzc190eXBlX2NvbnZlcnNpb25fcCAoVFJFRV9UWVBFIChyZXN1 bHQpLCByZXRfdHlwZSkpCisgICAgeworICAgICAgYXBwZW5kX3BhdHRlcm5fZGVmX3NlcSAo dmluZm8sIHN0bXRfaW5mbywgcGF0dGVybl9zdG10LCB2ZWN0eXBlKTsKKyAgICAgIHBhdHRl cm5fc3RtdAorCT0gZ2ltcGxlX2J1aWxkX2Fzc2lnbiAodmVjdF9yZWNvZ190ZW1wX3NzYV92 YXIgKHJldF90eXBlKSwKKwkJCSAgICAgICBOT1BfRVhQUiwgcmVzdWx0KTsKKyAgICB9CisK KyAgKnR5cGVfb3V0ID0gU1RNVF9WSU5GT19WRUNUWVBFIChzdG10X2luZm8pOworICB2ZWN0 X3BhdHRlcm5fZGV0ZWN0ZWQgKCJiaXRmaWVsZF9yZWYgcGF0dGVybiIsIHN0bXRfaW5mby0+ c3RtdCk7CisKKyAgcmV0dXJuIHBhdHRlcm5fc3RtdDsKK30KKworLyogRnVuY3Rpb24gdmVj dF9yZWNvZ19iaXRfaW5zZXJ0X3BhdHRlcm4KKworICAgVHJ5IHRvIGZpbmQgdGhlIGZvbGxv d2luZyBwYXR0ZXJuOgorCisgICB3cml0dGVuID0gQklUX0lOU0VSVF9FWFBSIChjb250YWlu ZXIsIHZhbHVlLCBiaXRwb3MpOworCisgICBJbnB1dDoKKworICAgKiBTVE1UX1ZJTkZPOiBU aGUgc3RtdCB3ZSB3YW50IHRvIHJlcGxhY2UuCisKKyAgIE91dHB1dDoKKworICAgKiBUWVBF X09VVDogVGhlIHZlY3RvciB0eXBlIG9mIHRoZSBvdXRwdXQgb2YgdGhpcyBwYXR0ZXJuLgor CisgICAqIFJldHVybiB2YWx1ZTogQSBuZXcgc3RtdCB0aGF0IHdpbGwgYmUgdXNlZCB0byBy ZXBsYWNlIHRoZSBzZXF1ZW5jZSBvZgorICAgc3RtdHMgdGhhdCBjb25zdGl0dXRlIHRoZSBw YXR0ZXJuLiBJbiB0aGlzIGNhc2UgaXQgd2lsbCBiZToKKyAgIHZhbHVlID0gKGNvbnRhaW5l cl90eXBlKSB2YWx1ZTsJICAgIC8vIE1ha2Ugc3VyZQorICAgc2hpZnRlZCA9IHZhbHVlIDw8 IGJpdHBvczsJCSAgICAvLyBTaGlmdCB2YWx1ZSBpbnRvIHBsYWNlCisgICBtYXNrZWQgPSBz aGlmdGVkICYgKG1hc2sgPDwgYml0cG9zKTsJICAgIC8vIE1hc2sgb2ZmIHRoZSBub24tcmVs ZXZhbnQgYml0cyBpbgorCQkJCQkgICAgLy8gdGhlICd0by13cml0ZSB2YWx1ZScuCisgICBj bGVhcmVkID0gY29udGFpbmVyICYgfihtYXNrIDw8IGJpdHBvcyk7IC8vIENsZWFyaW5nIHRo ZSBiaXRzIHdlIHdhbnQgdG8KKwkJCQkJICAgIC8vIHdyaXRlIHRvIGZyb20gdGhlIHZhbHVl IHdlIHdhbnQKKwkJCQkJICAgIC8vIHRvIHdyaXRlIHRvLgorICAgd3JpdHRlbiA9IGNsZWFy ZWQgfCBtYXNrZWQ7CQkgICAgLy8gV3JpdGUgYml0cy4KKworCisgICB3aGVyZSBtYXNrID0g KCgxIDw8IFRZUEVfUFJFQ0lTSU9OICh2YWx1ZSkpIC0gMSksIGEgbWFzayB0byBrZWVwIHRo ZSBudW1iZXIgb2YKKyAgIGJpdHMgY29ycmVzcG9uZGluZyB0byB0aGUgcmVhbCBzaXplIG9m IHRoZSBiaXRmaWVsZCB2YWx1ZSB3ZSBhcmUgd3JpdGluZyB0by4KKyAgIFRoZSBzaGlmdGlu ZyBpcyBhbHdheXMgb3B0aW9uYWwgZGVwZW5kaW5nIG9uIHdoZXRoZXIgYml0cG9zICE9IDAu CisKKyovCisKK3N0YXRpYyBnaW1wbGUgKgordmVjdF9yZWNvZ19iaXRfaW5zZXJ0X3BhdHRl cm4gKHZlY19pbmZvICp2aW5mbywgc3RtdF92ZWNfaW5mbyBzdG10X2luZm8sCisJCQkgICAg ICAgdHJlZSAqdHlwZV9vdXQpCit7CisgIGdhc3NpZ24gKmJmX3N0bXQgPSBkeW5fY2FzdCA8 Z2Fzc2lnbiAqPiAoc3RtdF9pbmZvLT5zdG10KTsKKyAgaWYgKCFiZl9zdG10IHx8IGdpbXBs ZV9hc3NpZ25fcmhzX2NvZGUgKGJmX3N0bXQpICE9IEJJVF9JTlNFUlRfRVhQUikKKyAgICBy ZXR1cm4gTlVMTDsKKworICB0cmVlIGNvbnRhaW5lciA9IGdpbXBsZV9hc3NpZ25fcmhzMSAo YmZfc3RtdCk7CisgIHRyZWUgdmFsdWUgPSBnaW1wbGVfYXNzaWduX3JoczIgKGJmX3N0bXQp OworICB0cmVlIHNoaWZ0ID0gZ2ltcGxlX2Fzc2lnbl9yaHMzIChiZl9zdG10KTsKKworICB0 cmVlIGJmX3R5cGUgPSBUUkVFX1RZUEUgKHZhbHVlKTsKKyAgdHJlZSBjb250YWluZXJfdHlw ZSA9IFRSRUVfVFlQRSAoY29udGFpbmVyKTsKKworICBpZiAoIUlOVEVHUkFMX1RZUEVfUCAo Y29udGFpbmVyX3R5cGUpCisgICAgICB8fCAhdHJlZV9maXRzX3Vod2lfcCAoVFlQRV9TSVpF IChjb250YWluZXJfdHlwZSkpKQorICAgIHJldHVybiBOVUxMOworCisgIGdpbXBsZSAqcGF0 dGVybl9zdG10OworCisgIHZlY3RfdW5wcm9tb3RlZF92YWx1ZSB1bnByb207CisgIHVucHJv bS5zZXRfb3AgKHZhbHVlLCB2ZWN0X2ludGVybmFsX2RlZik7CisgIHZhbHVlID0gdmVjdF9j b252ZXJ0X2lucHV0ICh2aW5mbywgc3RtdF9pbmZvLCBjb250YWluZXJfdHlwZSwgJnVucHJv bSwKKwkJCSAgICAgIGdldF92ZWN0eXBlX2Zvcl9zY2FsYXJfdHlwZSAodmluZm8sCisJCQkJ CQkJICAgY29udGFpbmVyX3R5cGUpKTsKKworICB1bnNpZ25lZCBIT1NUX1dJREVfSU5UIG1h c2tfd2lkdGggPSBUWVBFX1BSRUNJU0lPTiAoYmZfdHlwZSk7CisgIHVuc2lnbmVkIEhPU1Rf V0lERV9JTlQgcHJlYyA9IHRyZWVfdG9fdWh3aSAoVFlQRV9TSVpFIChjb250YWluZXJfdHlw ZSkpOworICB1bnNpZ25lZCBIT1NUX1dJREVfSU5UIHNoaWZ0X24gPSB0cmVlX3RvX3Vod2kg KHNoaWZ0KTsKKyAgaWYgKEJZVEVTX0JJR19FTkRJQU4pCisgICAgeworICAgICAgc2hpZnRf biA9IHByZWMgLSBzaGlmdF9uIC0gbWFza193aWR0aDsKKyAgICAgIHNoaWZ0ID0gYnVpbGRf aW50X2NzdCAoVFJFRV9UWVBFIChzaGlmdCksIHNoaWZ0X24pOworICAgIH0KKworICBpZiAo IXVzZWxlc3NfdHlwZV9jb252ZXJzaW9uX3AgKFRSRUVfVFlQRSAodmFsdWUpLCBjb250YWlu ZXJfdHlwZSkpCisgICAgeworICAgICAgcGF0dGVybl9zdG10ID0KKwlnaW1wbGVfYnVpbGRf YXNzaWduICh2ZWN0X3JlY29nX3RlbXBfc3NhX3ZhciAoY29udGFpbmVyX3R5cGUpLAorCQkJ ICAgICBOT1BfRVhQUiwgdmFsdWUpOworICAgICAgYXBwZW5kX3BhdHRlcm5fZGVmX3NlcSAo dmluZm8sIHN0bXRfaW5mbywgcGF0dGVybl9zdG10KTsKKyAgICAgIHZhbHVlID0gZ2ltcGxl X2dldF9saHMgKHBhdHRlcm5fc3RtdCk7CisgICAgfQorCisgIC8qIFNoaWZ0IFZBTFVFIGlu dG8gcGxhY2UuICAqLworICB0cmVlIHNoaWZ0ZWQgPSB2YWx1ZTsKKyAgaWYgKHNoaWZ0X24p CisgICAgeworICAgICAgcGF0dGVybl9zdG10CisJPSBnaW1wbGVfYnVpbGRfYXNzaWduICh2 ZWN0X3JlY29nX3RlbXBfc3NhX3ZhciAoY29udGFpbmVyX3R5cGUpLAorCQkJICAgICAgIExT SElGVF9FWFBSLCB2YWx1ZSwgc2hpZnQpOworICAgICAgYXBwZW5kX3BhdHRlcm5fZGVmX3Nl cSAodmluZm8sIHN0bXRfaW5mbywgcGF0dGVybl9zdG10KTsKKyAgICAgIHNoaWZ0ZWQgPSBn aW1wbGVfZ2V0X2xocyAocGF0dGVybl9zdG10KTsKKyAgICB9CisKKyAgdHJlZSBtYXNrX3QK KyAgICA9IHdpZGVfaW50X3RvX3RyZWUgKGNvbnRhaW5lcl90eXBlLAorCQkJd2k6OnNoaWZ0 ZWRfbWFzayAoc2hpZnRfbiwgbWFza193aWR0aCwgZmFsc2UsIHByZWMpKTsKKworICAvKiBD bGVhciBiaXRzIHdlIGRvbid0IHdhbnQgdG8gd3JpdGUgYmFjayBmcm9tIFNISUZURUQuICAq LworICBnaW1wbGVfc2VxIHN0bXRzID0gTlVMTDsKKyAgdHJlZSBtYXNrZWQgPSBnaW1wbGVf YnVpbGQgKCZzdG10cywgQklUX0FORF9FWFBSLCBjb250YWluZXJfdHlwZSwgc2hpZnRlZCwK KwkJCSAgICAgIG1hc2tfdCk7CisgIGlmICghZ2ltcGxlX3NlcV9lbXB0eV9wIChzdG10cykp CisgICAgeworICAgICAgcGF0dGVybl9zdG10ID0gZ2ltcGxlX3NlcV9maXJzdF9zdG10IChz dG10cyk7CisgICAgICBhcHBlbmRfcGF0dGVybl9kZWZfc2VxICh2aW5mbywgc3RtdF9pbmZv LCBwYXR0ZXJuX3N0bXQpOworICAgIH0KKworICAvKiBNYXNrIG9mZiB0aGUgYml0cyBpbiB0 aGUgY29udGFpbmVyIHRoYXQgd2UgYXJlIHRvIHdyaXRlIHRvLiAgKi8KKyAgbWFza190ID0g d2lkZV9pbnRfdG9fdHJlZSAoY29udGFpbmVyX3R5cGUsCisJCQkgICAgIHdpOjpzaGlmdGVk X21hc2sgKHNoaWZ0X24sIG1hc2tfd2lkdGgsIHRydWUsIHByZWMpKTsKKyAgdHJlZSBjbGVh cmVkID0gdmVjdF9yZWNvZ190ZW1wX3NzYV92YXIgKGNvbnRhaW5lcl90eXBlKTsKKyAgcGF0 dGVybl9zdG10ID0gZ2ltcGxlX2J1aWxkX2Fzc2lnbiAoY2xlYXJlZCwgQklUX0FORF9FWFBS LCBjb250YWluZXIsIG1hc2tfdCk7CisgIGFwcGVuZF9wYXR0ZXJuX2RlZl9zZXEgKHZpbmZv LCBzdG10X2luZm8sIHBhdHRlcm5fc3RtdCk7CisKKyAgLyogV3JpdGUgTUFTS0VEIGludG8g Q0xFQVJFRC4gICovCisgIHBhdHRlcm5fc3RtdAorICAgID0gZ2ltcGxlX2J1aWxkX2Fzc2ln biAodmVjdF9yZWNvZ190ZW1wX3NzYV92YXIgKGNvbnRhaW5lcl90eXBlKSwKKwkJCSAgIEJJ VF9JT1JfRVhQUiwgY2xlYXJlZCwgbWFza2VkKTsKKworICAqdHlwZV9vdXQgPSBTVE1UX1ZJ TkZPX1ZFQ1RZUEUgKHN0bXRfaW5mbyk7CisgIHZlY3RfcGF0dGVybl9kZXRlY3RlZCAoImJp dF9pbnNlcnQgcGF0dGVybiIsIHN0bXRfaW5mby0+c3RtdCk7CisKKyAgcmV0dXJuIHBhdHRl cm5fc3RtdDsKK30KKworCiAvKiBSZWNvZ25pemUgY2FzZXMgaW4gd2hpY2ggYW4gb3BlcmF0 aW9uIGlzIHBlcmZvcm1lZCBpbiBvbmUgdHlwZSBXVFlQRQogICAgYnV0IGNvdWxkIGJlIGRv bmUgbW9yZSBlZmZpY2llbnRseSBpbiBhIG5hcnJvd2VyIHR5cGUgTlRZUEUuICBGb3IgZXhh bXBsZSwKICAgIGlmIHdlIGhhdmU6CkBAIC01NjIzLDYgKzU5NDgsOCBAQCBzdHJ1Y3QgdmVj dF9yZWNvZ19mdW5jCiAgICB0YWtlbiB3aGljaCBtZWFucyB1c3VhbGx5IHRoZSBtb3JlIGNv bXBsZXggb25lIG5lZWRzIHRvIHByZWNlZWQgdGhlCiAgICBsZXNzIGNvbXBsZXMgb25leCAo d2lkZW5fc3VtIG9ubHkgYWZ0ZXIgZG90X3Byb2Qgb3Igc2FkIGZvciBleGFtcGxlKS4gICov CiBzdGF0aWMgdmVjdF9yZWNvZ19mdW5jIHZlY3RfdmVjdF9yZWNvZ19mdW5jX3B0cnNbXSA9 IHsKKyAgeyB2ZWN0X3JlY29nX2JpdGZpZWxkX3JlZl9wYXR0ZXJuLCAiYml0ZmllbGRfcmVm IiB9LAorICB7IHZlY3RfcmVjb2dfYml0X2luc2VydF9wYXR0ZXJuLCAiYml0X2luc2VydCIg fSwKICAgeyB2ZWN0X3JlY29nX292ZXJfd2lkZW5pbmdfcGF0dGVybiwgIm92ZXJfd2lkZW5p bmciIH0sCiAgIC8qIE11c3QgY29tZSBhZnRlciBvdmVyX3dpZGVuaW5nLCB3aGljaCBuYXJy b3dzIHRoZSBzaGlmdCBhcyBtdWNoIGFzCiAgICAgIHBvc3NpYmxlIGJlZm9yZWhhbmQuICAq Lwo= --------------daCBCw4ig2ltCKlWPqDpT8jA--