Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1vGCMB-009nBs-AO for pgsql-hackers@arkaria.postgresql.org; Tue, 04 Nov 2025 08:25:35 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1vGCM9-00C0jp-8O for pgsql-hackers@arkaria.postgresql.org; Tue, 04 Nov 2025 08:25:32 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1vGCM8-00C0jb-Fp for pgsql-hackers@lists.postgresql.org; Tue, 04 Nov 2025 08:25:31 +0000 Received: from mail-lf1-x12d.google.com ([2a00:1450:4864:20::12d]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vGCM4-005N5Y-1E for pgsql-hackers@lists.postgresql.org; Tue, 04 Nov 2025 08:25:30 +0000 Received: by mail-lf1-x12d.google.com with SMTP id 2adb3069b0e04-57bd04f2e84so6305513e87.1 for ; Tue, 04 Nov 2025 00:25:28 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1762244726; x=1762849526; darn=lists.postgresql.org; h=in-reply-to:from:content-language:references:cc:to:subject :user-agent:mime-version:date:message-id:from:to:cc:subject:date :message-id:reply-to; bh=UYQaBIgkFlLInDwRP3+hn5OMFuumBIcw8QjTcsZq2qk=; b=fZ85aGt/ZOr4SK8lwUgtJa0frvsJkbPAx6N4xWL6nhh60vCZwXoVik8dUZW1KPF8Ee gfazV3JRu4B1h7YFUWedx5N3MM2MuN9MxjgjEl0fcgAbgh4UQsUrE/mrVaGk2P0X+YWW txygI2drJzj6/4m8uKU+he2KXswmWec7ToGDB8QurRtcLR1+vH9ycnFfMyIR9+d8x9l1 Vlu9MnlqPSkqHbBl2fRZ6Pm+IT4TFQ+exMqxWXGOf2Os3nuowyV6MrO7f+KNQvrbAFZ+ S3Gwrw3+kWuxHxv+VO3JIGvOTjKYFyDqkeDa0vvfzkeRoE+JoMMMQHhRpynqmorHMcEw MUDQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1762244726; x=1762849526; h=in-reply-to:from:content-language:references:cc:to:subject :user-agent:mime-version:date:message-id:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=UYQaBIgkFlLInDwRP3+hn5OMFuumBIcw8QjTcsZq2qk=; b=qeLqXok3Umo3nTPUhiIlMyeTn1udxxNcPkU4o38/E8QsYd0bB8vGwNiYOWedALR5Ad f53g0S5AlTL2G81YFUOfrxYybZ7EPu8IR20vyCNjQ9kxJRF9Bz8zT2Yy2SVvB8StnCjx LYI3YLj3ngyBkOFdXRanZ94I4IZgff2bf5A9jIsvcneJ+061vysivnhI0wc9R9noomos CxJlm3m0+GV9yn02abvhO0eK/CJaoP0MSyT2/pOQVyrZaE3MPQsPpGFcD5IIaYmzQ5+h rMz+hMiNSaEWFiz6yPoqXsF9Mp9NZ5UiuYRDir+2CTeKqFaCf77YmB2woDE/KDFBRig1 m53w== X-Gm-Message-State: AOJu0YyCl9EK6EtsebgSOxlIKLf+dbN2d5QmTQoQ52jRKOyg63KNClRZ ItnJLYaDcFwFm3TTPhZcrov/jqQ9s3M0ZH5wJK8maFin1KcIGLolVJsu X-Gm-Gg: ASbGnctY3sx1dnpAYcvfRNgPKwiqUDhv3sydbL4JWZh98Ao0JHwdxvVP+IvCEl9wXe2 Uumx1r7Pf9uZw8YxzdympZURp/NhmELZ9m2JRi5NKItuwBr5GwPCRoB4TZ6rMLLGfbIcT5R7qOm 9THnQZIQ6lz33M5qSkBx9KeRQev/Fj35scSacikigNDkl12othxeJ9xurS/ZJoJGmiTjT7AILyJ qfpgx8yVKPPwVy+eYltB8jZ2WX8bkjOo+TYm3+TPMlT9ZQzg0UbmlPmXbjq6xJoJse+L425uJQn HVzVseDGjQYoWHviAKAN1LP4Q2matqUDuU0htZhDxRvN+pTiSj9iSxZkwvoT05knjAhrI49XtIF LancmcbIa1gYgWJlOQv1PFD4kcprN/xabj5eNhQZ9L+h49FKX6U8Hwcr3rgPRNINnfJKluXrC1K FwOh+FNSs9AbIKBHGmm9pjFK7uzSk67t1ESN59MFa3aRe/KVnVE6DpF8Ol9KEMoA== X-Google-Smtp-Source: AGHT+IECPGXLyJLjHXM157CDCix0o0uhLItuHDKoTEyxu6SMOety+qIMFC41hyAtYkby6pBbSFBpQA== X-Received: by 2002:ac2:4e13:0:b0:55f:489d:7bd with SMTP id 2adb3069b0e04-5941d3b24d5mr4627938e87.0.1762244726142; Tue, 04 Nov 2025 00:25:26 -0800 (PST) Received: from ?IPV6:2a02:aa1:114a:fa1c:d614:a52e:41b3:dd59? ([2a02:aa1:114a:fa1c:d614:a52e:41b3:dd59]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-59434390a8dsm564628e87.24.2025.11.04.00.25.24 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 04 Nov 2025 00:25:25 -0800 (PST) Content-Type: multipart/mixed; boundary="------------BLIin0ANOC7pJZD51F0Wh4AO" Message-ID: <04a6a8b3-7572-4021-aaf8-5d3643bc9dac@gmail.com> Date: Tue, 4 Nov 2025 09:25:24 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: Use stack-allocated StringInfoData To: David Rowley Cc: pgsql-hackers@lists.postgresql.org References: <4379aac8-26f1-42f2-a356-ff0e886228d3@gmail.com> <1865ee50-8290-4062-b062-5f5ab17364f2@gmail.com> Content-Language: en-US From: Mats Kindahl In-Reply-To: List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------BLIin0ANOC7pJZD51F0Wh4AO Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit On 11/3/25 22:32, David Rowley wrote: > On Tue, 4 Nov 2025 at 09:20, Mats Kindahl wrote: >> This is using Coccinelle to transform the text based on a semantic patch (which is included in the patch). Unfortunately it mess with the whitespace a bit so it is necessary to run pg_intent after. I'm surprised that there are whitespace changes that should not be there, but I'll take a look. > pgindent likely won't put back the types of changes that were made > here. I think you're going to have to manually review anything that > comes out of any automated tool, at least certainly until there's some > confidence that the scripts are configured correctly. Loading extra > work onto reviewers or committers that you could have easily done > yourself isn't really a sustainable thing. We just lack bandwidth for > that, plus it's bad etiquette. > > A few tips: It's fine to post rough patches to demonstrate ideas to > the list, but make that clear when doing so. If your intention is that > what you're sending gets committed, then please aim for as high a > quality as you can. There just won't be any long-term patience for > series of unvetted-by-human transformation patches from tools such as > Coccinelle around here, especially so if you expect the community to > vet them for you. I'm not saying that's what you're doing, but if you > are, please take this advice. Hi David, My apologies for not being clear. I understand the situation and thank you for the advice. I'll keep that in mind in the future. Here is an updated patch that I checked manually for unnecessary whitespace changes. I also checked that "destroyStringInfo(info)" was handled correctly, which would be replacing it with a call to "pfree(info.data)" since the StringInfoData structure is now on the stack but the data buffer needs to be released since this is what a call to destroyStringInfo() would do. Removing any calls of "pfree(info)" when "info" was changed to "StringInfoData" since it is no longer a dynamically allocated variable. Note that in this case it is not necessary to free "info.data" since the original code does not do that. There is one such case affected by this patch, and there the buffer pointer is copied to another variable and then returned. This can probably be improved by just returning the buffer pointer directly without intermediate assignment to a variable, but I avoided this to make reviewing the code easier. It is easy to add this change either now or later and should not affect the generated code except at very low optimization levels. I also added fixes manually inside check_publications_origin_tables, check_publications, and fetch_relation_list. In check_publication_origin_table three StringInfo was dynamically allocated but not released after. In check_publications and fetch_relation_list there were extra cases of using a dynamically allocated StringInfo that was not necessary. Best wishes, Mats Kindahl --------------BLIin0ANOC7pJZD51F0Wh4AO Content-Type: text/x-patch; charset=UTF-8; name="0001-Use-stack-allocated-StringInfoData.v2.patch" Content-Disposition: attachment; filename="0001-Use-stack-allocated-StringInfoData.v2.patch" Content-Transfer-Encoding: base64 RnJvbSBkM2EwOTk1MzZjM2Y5ZDQ3YTBjYjc1NjkxZDVkNjk0YjBiYTYzZWYzIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBNYXRzIEtpbmRhaGwgPG1hdHNAa2luZGFobC5uZXQ+ CkRhdGU6IFR1ZSwgMjggSmFuIDIwMjUgMTQ6MDk6NDEgKzAxMDAKU3ViamVjdDogVXNlIHN0 YWNrLWFsbG9jYXRlZCBTdHJpbmdJbmZvRGF0YQoKVGhpcyB1c2VzIGEgc2VtYW50aWMgcGF0 Y2ggdG8gcmVwbGFjZSB1c2VzIG9mIFN0cmluZ0luZm8gd2l0aCBTdHJpbmdJbmZvRGF0YQp3 aGVyZSB0aGUgaW5mbyBpcyBkeW5hbWljYWxseSBhbGxvY2F0ZWQgYnV0IChvcHRpb25hbGx5 KSBmcmVlZCBhdCB0aGUgZW5kIG9mCnRoZSBibG9jay4gIFRoaXMgd2lsbCBhdm9pZCBvbmUg ZHluYW1pYyBhbGxvY2F0aW9uIHRoYXQgb3RoZXJ3aXNlIGhhdmUgdG8gYmUKZGVhbHQgd2l0 aC4KCkZvciBleGFtcGxlLCB0aGlzIGNvZGU6CgogICAgU3RyaW5nSW5mbyBpbmZvID0gbWFr ZVN0cmluZ0luZm8oKTsKICAgIC4uLgogICAgYXBwZW5kU3RyaW5nSW5mbyhpbmZvLCAuLi4p OwogICAgLi4uCiAgICByZXR1cm4gZG9fc3R1ZmYoLi4uLCBpbmZvLT5kYXRhLCAuLi4pOwoK Q2FuIGJlIHJlcGxhY2VkIHdpdGg6CgogICAgU3RyaW5nSW5mb0RhdGEgaW5mbzsKICAgIGlu aXRTdHJpbmdJbmZvKCZpbmZvKTsKICAgIC4uLgogICAgYXBwZW5kU3RyaW5nSW5mbygmaW5m bywgLi4uKTsKICAgIC4uLgogICAgcmV0dXJuIGRvX3N0dWZmKC4uLiwgaW5mby5kYXRhLCAu Li4pOwoKSXQgZG9lcyBub3QgZG8gYSByZXBsYWNlbWVudCBpbiB0aGVzZSBjYXNlczoKCi0g SWYgdGhlIHZhcmlhYmxlIGlzIGFzc2lnbmVkIHRvIGFuIGV4cHJlc3Npb24uIEluIHRoaXMg Y2FzZSwgdGhlIHBvaW50ZXIgY2FuCiAgImxlYWsiIG91dHNpZGUgdGhlIGZ1bmN0aW9uIGVp dGhlciB0aHJvdWdoIGEgZ2xvYmFsIHZhcmlhYmxlIG9yIGEgcGFyYW1ldGVyCiAgYXNzaWdu bWVudC4KCi0gSWYgYW4gYXNzaWdubWVudCBpcyBkb25lIHRvIHRoZSBleHByZXNzaW9uLiBU aGlzIGNhbm5vdCBsZWFrIHRoZSBkYXRhLCBidXQKICBjb3VsZCBtZWFuIGEgdmFsdWUtYXNz aWdubWVudCBvZiBhIHN0cnVjdHVyZSBvciBhc3NpZ25pbmcgYSBTdHJpbmdJbmZvIHRvIHRo ZQogIHZhcmlhYmxlLCB3aGljaCBpcyBjb21wbGljYXRlZCB0byBkZWFsIHdpdGgsIHNvIHdl IGF2b2lkIHRoaXMgY2FzZS4KCi0gSWYgdGhlIHBvaW50ZXIgaXMgcmV0dXJuZWQgZWl0aGVy IHVzaW5nIGEgbm9ybWFsIHJldHVybiBvciBhbnkgb2YgdGhlCiAgUEdfUkVUVVJOX1ggdmVy c2lvbnMuCgpUaGUgc2VtYW50aWMgcGF0Y2ggZG9lcyBub3QgaGFuZGxlIHRoZSBjYXNlIHdo ZXJlIHlvdSBoYXZlIG11bHRpcGxlIG92ZXJsYXBwaW5nCnVzZXMgaW4gdGhlIHNhbWUgYmxv Y2sgc2ltaWxhciB0byB0aGUgYWJvdmUuIEluIHRoaXMgY2FzZSBpdCBkb2VzIG5vdCBkbyBh CnJlcGxhY2VtZW50IGF0IGFsbCBhbmQgcHJpbnRzIGFuIGVycm9yLgoKVGhpcyBjb21taXQg Zml4ZXMgdGhyZWUgc3VjaCBjYXNlcyBtYW51YWxseSBpbiBjaGVja19wdWJsaWNhdGlvbnNf b3JpZ2luX3RhYmxlcywKY2hlY2tfcHVibGljYXRpb25zLCBhbmQgZmV0Y2hfcmVsYXRpb25f bGlzdCByZXNwZWN0aXZlbHksIGFsbCBpbnNpZGUKc3Vic2NyaXB0aW9uY21kcy5jIGFuZCBh bHNvIGFkZCBjYWxscyB0byBwZnJlZSBmb3IgU3RyaW5nSW5mbyB0aGF0IHdhcwpkeW5hbWlj YWxseSBhbGxvY2F0ZWQgYnV0IG5vdCBmcmVlZC4KLS0tCiBjb2NjaS91c2Vfc3RyaW5naW5m b2RhdGEuY29jY2kgICAgICAgICAgfCAyMDMgKysrKysrKysrKysrKysrKysrKysrKysrCiBj b250cmliL3Bvc3RncmVzX2Zkdy9wb3N0Z3Jlc19mZHcuYyAgICAgfCAgMTQgKy0KIGNvbnRy aWIvdGNuL3Rjbi5jICAgICAgICAgICAgICAgICAgICAgICB8ICAxOSArLS0KIHNyYy9iYWNr ZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2diYWNrdXAuYyB8ICAzMSArKy0tCiBzcmMvYmFja2Vu ZC9iYWNrdXAvYmFzZWJhY2t1cC5jICAgICAgICAgfCAgMTAgKy0KIHNyYy9iYWNrZW5kL2Nv bW1hbmRzL3N1YnNjcmlwdGlvbmNtZHMuYyB8ICA1NyArKysrLS0tCiBzcmMvYmFja2VuZC91 dGlscy9hZHQvanNvbi5jICAgICAgICAgICAgfCAgNTMgKysrKy0tLQogc3JjL2JhY2tlbmQv dXRpbHMvYWR0L2pzb25iLmMgICAgICAgICAgIHwgICA5ICstCiBzcmMvYmFja2VuZC91dGls cy9hZHQvanNvbmZ1bmNzLmMgICAgICAgfCAgIDcgKy0KIHNyYy9iYWNrZW5kL3V0aWxzL2Fk dC9tdWx0aXJhbmdldHlwZXMuYyB8ICAxMyArLQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3Jh bmdldHlwZXMuYyAgICAgIHwgIDE4ICsrLQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3htbC5j ICAgICAgICAgICAgIHwgIDM0ICsrLS0KIDEyIGZpbGVzIGNoYW5nZWQsIDM0NCBpbnNlcnRp b25zKCspLCAxMjQgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29jY2kvdXNl X3N0cmluZ2luZm9kYXRhLmNvY2NpCgpkaWZmIC0tZ2l0IGEvY29jY2kvdXNlX3N0cmluZ2lu Zm9kYXRhLmNvY2NpIGIvY29jY2kvdXNlX3N0cmluZ2luZm9kYXRhLmNvY2NpCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5kMWI1OTY3NDFmZQotLS0gL2Rldi9u dWxsCisrKyBiL2NvY2NpL3VzZV9zdHJpbmdpbmZvZGF0YS5jb2NjaQpAQCAtMCwwICsxLDIw MyBAQAorLy8gUmVwbGFjZSB1c2VzIG9mIFN0cmluZ0luZm8gd2l0aCBTdHJpbmdJbmZvRGF0 YSB3aGVyZSB0aGUgaW5mbyBpcworLy8gZHluYW1pY2FsbHkgYWxsb2NhdGVkIGJ1dCAob3B0 aW9uYWxseSkgZnJlZWQgYXQgdGhlIGVuZCBvZiB0aGUKKy8vIGJsb2NrLiBUaGlzIHdpbGwg YXZvaWQgb25lIGR5bmFtaWMgYWxsb2NhdGlvbiB0aGF0IG90aGVyd2lzZSBoYXZlCisvLyB0 byBiZSBkZWFsdCB3aXRoLgorLy8KKy8vIEZvciBleGFtcGxlLCB0aGlzIGNvZGU6CisvLwor Ly8gICAgU3RyaW5nSW5mbyBpbmZvID0gbWFrZVN0cmluZ0luZm8oKTsKKy8vICAgIC4uLgor Ly8gICAgYXBwZW5kU3RyaW5nSW5mbyhpbmZvLCAuLi4pOworLy8gICAgLi4uCisvLyAgICBy ZXR1cm4gZG9fc3R1ZmYoLi4uLCBpbmZvLT5kYXRhLCAuLi4pOworLy8KKy8vIENhbiBiZSBy ZXBsYWNlZCB3aXRoOgorLy8KKy8vICAgIFN0cmluZ0luZm9EYXRhIGluZm87CisvLyAgICBp bml0U3RyaW5nSW5mbygmaW5mbyk7CisvLyAgICAuLi4KKy8vICAgIGFwcGVuZFN0cmluZ0lu Zm8oJmluZm8sIC4uLik7CisvLyAgICAuLi4KKy8vICAgIHJldHVybiBkb19zdHVmZiguLi4s IGluZm8uZGF0YSwgLi4uKTsKKy8vCisvLyAKKwordmlydHVhbCByZXBvcnQKK3ZpcnR1YWwg Y29udGV4dAordmlydHVhbCBwYXRjaAorCisvLyBUaGlzIHJ1bGUgY2FwdHVyZXMgdGhlIHBv c2l0aW9uIG9mIHRoZSBtYWtlU3RyaW5nSW5mbygpIGFuZCBiYXNlcworLy8gYWxsIGNoYW5n ZXMgYXJvdW5kIHRoYXQuIEl0IG1hdGNoZXMgdGhlIGNhc2UgdGhhdCB3ZSBzaG91bGQgKm5v dCoKKy8vIHJlcGxhY2UsIHRoYXQgaXMsIHRob3NlIHRoYXQgZWl0aGVyICgxKSByZXR1cm4g dGhlIHBvaW50ZXIgb3IgKDIpCisvLyBhc3NpZ24gdGhlIHBvaW50ZXIgdG8gYSB2YXJpYWJs ZSBvciAoMykgYXNzaWduIGEgdmFyaWFibGUgdG8gdGhlCisvLyBwb2ludGVyLgorLy8KKy8v IFRoZSBmaXJzdCB0d28gY2FzZXMgYXJlIG1hdGNoZWQgYmVjYXVzZSB0aGV5IGNvdWxkIHBv dGVudGlhbGx5IGxlYWsKKy8vIHRoZSBwb2ludGVyIG91dHNpZGUgdGhlIGZ1bmN0aW9uLCBm b3Igc29tZSBleHByZXNzaW9ucywgYnV0IHRoZQorLy8gbGFzdCBvbmUgYXZvaWRzIGFzc2ln bmluZyBhIFN0cmluZ0luZm8gcG9pbnRlciBvZiB1bmtub3duIHNvdXJjZSB0bworLy8gdGhl IG5ldyBTdHJpbmdJbmZvRGF0YSB2YXJpYWJsZS4KKy8vCisvLyBJZiB3ZSByZXBsYWNlIHRo aXMsIHRoZSByZXN1bHRpbmcgY2hhbmdlIHdpbGwgcmVzdWx0IGluIGEgdmFsdWUKKy8vIGNv cHkgb2YgYSBzdHJ1Y3R1cmUsIHdoaWNoIG1pZ2h0IG5vdCBiZSBvcHRpbWFsLCBzbyB3ZSBk byBub3QgZG8gYQorLy8gcmVwbGFjZW1lbnQuCitAaWQxIGV4aXN0c0AKK3R5cGVkZWYgU3Ry aW5nSW5mbzsKK2xvY2FsIGlkZXhwcmVzc2lvbiBTdHJpbmdJbmZvIGluZm87CitpZGVudGlm aWVyIGY7Citwb3NpdGlvbiBwb3M7CitleHByZXNzaW9uIEU7CitpZGVudGlmaWVyIFBHX1JF VFVSTiA9fiAiUEdfUkVUVVJOX1tBLVowLTlfXSsiOworQEAKKyAgaW5mb0Bwb3MgPSBtYWtl U3RyaW5nSW5mbygpCisgIC4uLgorKAorICByZXR1cm4gaW5mbzsKK3wKKyAgcmV0dXJuIGYo Li4uLCBpbmZvLCAuLi4pOworfAorICBQR19SRVRVUk4oaW5mbyk7Cit8CisgIGluZm8gPSBF Cit8CisgIEUgPSBpbmZvCispCisKK0ByMSBkZXBlbmRzIG9uICFwYXRjaCBkaXNhYmxlIGRl Y2xfaW5pdCBleGlzdHNACitpZGVudGlmaWVyIGluZm8sIGZsZDsKK3Bvc2l0aW9uIGRwb3Ms IHBvcyAhPSBpZDEucG9zOworQEAKKygKKyogU3RyaW5nSW5mb0BkcG9zIGluZm87CisgIC4u LgorKiBpbmZvQHBvcyA9IG1ha2VTdHJpbmdJbmZvKCk7Cit8CisqIFN0cmluZ0luZm9AZHBv cyBpbmZvQHBvcyA9IG1ha2VTdHJpbmdJbmZvKCk7CispCis8Li4uCisoCisqIGRlc3Ryb3lT dHJpbmdJbmZvKGluZm8pOworfAorKiBwZnJlZShpbmZvKTsKK3wKKyogaW5mby0+ZmxkCit8 CisqICppbmZvCit8CisqIGluZm8KKykKKy4uLj4KKworQHNjcmlwdDpweXRob24gZGVwZW5k cyBvbiByZXBvcnRACitpbmZvIDw8IHIxLmluZm87CitkcG9zIDw8IHIxLmRwb3M7CitAQAor Y29jY2lsaWIucmVwb3J0LnByaW50X3JlcG9ydChkcG9zWzBdLCBmIlZhcmlhYmxlICd7aW5m b30nIG9mIHR5cGUgU3RyaW5nSW5mbyBjYW4gYmUgZGVmaW5lZCB1c2luZyBTdHJpbmdJbmZv RGF0YSIpCisKKy8vIFRoaXMgcnVsZSByZXBsYWNlcyB0aGUgU3RyaW5nSW5mbyB2YXJpYWJs ZSB3aXRoIGEgU3RyaW5nSW5mb0RhdGEKKy8vIHZhcmlhYmxlIGFuZCBzd2l0Y2hlcyBmcm9t IHVzaW5nIHBvaW50ZXItc3ludGF4IHRvIG9iamVjdC1zeW50YXguCisvLworLy8gSWYgZGVz dHJveVN0cmluZ0luZm8oKSBpcyB1c2VkIGl0IGZyZWVzIHRoZSBTdHJpbmdJbmZvIGFuZCB0 aGUgZGF0YQorLy8gaGVsZCBieSB0aGUgc3RydWN0dXJlLiBXaGVuIHVzaW5nIFN0cmluZ0lu Zm9EYXRhIHdlIG5lZWQgdG8gZnJlZQorLy8gdGhlIGRhdGEgYnV0IG5vdCB0aGUgU3RyaW5n SW5mbyBzaW5jZSB0aGF0IGlzIG5vdyBhIFN0cmluZ0luZm9EYXRhLgorLy8KKy8vIEEgcGZy ZWUoKSBvZiB0aGUgU3RyaW5nSW5mbyBpcyBub3QgbmVlZGVkIGFueSBtb3JlIHNpbmNlIHRo ZSBkYXRhCisvLyBpcyBub3QgZHluYW1pY2FsbHkgYWxsb2NhdGVkLiBJcyBpcyBhbHNvIHdy b25nIHNpbmNlIHRoZSBzdHJ1Y3R1cmUKKy8vIGlzIG5vdyBvbiB0aGUgc3RhY2sgYW5kIG5v dCBhIHBvaW50ZXIgdmFyaWFibGUuCitAZGVwZW5kcyBvbiBwYXRjaCBkaXNhYmxlIGRlY2xf aW5pdCBleGlzdHNACitpZGVudGlmaWVyIGluZm8sIGZsZDsKK3Bvc2l0aW9uIHBvcyAhPSBp ZDEucG9zOworQEAKKy0gU3RyaW5nSW5mbyBpbmZvOworKyBTdHJpbmdJbmZvRGF0YSBpbmZv OworICAuLi4KKy0gaW5mb0Bwb3MgPSBtYWtlU3RyaW5nSW5mbygpOworKyBpbml0U3RyaW5n SW5mbygmaW5mbyk7Cis8Li4uCisoCistIGRlc3Ryb3lTdHJpbmdJbmZvKGluZm8pOworKyBw ZnJlZShpbmZvLT5kYXRhKTsKK3wKKy0gcGZyZWUoaW5mbyk7Cit8CisgIGluZm8KKy0gLT5m bGQKKysgLmZsZAorfAorLSAqaW5mbworKyBpbmZvCit8CistIGluZm8KKysgJmluZm8KKykK Ky4uLj4KKworLy8gSGVyZSB3ZSByZXBlYXQgdGhlIG1hdGNoaW5nIG9mIHRoZSAiYmFkIGNh c2UiIGFib3ZlIHNpbmNlIHdlIGNhbm5vdAorLy8gaW5oZXJpdCBvdmVyIG1vZGlmaWNhdGlv bnMuCitAaWQyIGV4aXN0c0AKK3R5cGVkZWYgU3RyaW5nSW5mbzsKK2xvY2FsIGlkZXhwcmVz c2lvbiBTdHJpbmdJbmZvIGluZm87Citwb3NpdGlvbiBwb3M7CitleHByZXNzaW9uIEU7Citp ZGVudGlmaWVyIGY7CitpZGVudGlmaWVyIFBHX1JFVFVSTiA9fiAiUEdfUkVUVVJOX1tBLVow LTlfXSsiOworQEAKKyAgaW5mb0Bwb3MgPSBtYWtlU3RyaW5nSW5mbygpCisgIC4uLgorKAor ICByZXR1cm4gaW5mbzsKK3wKKyAgcmV0dXJuIGYoLi4uLCBpbmZvLCAuLi4pOworfAorICBQ R19SRVRVUk4oaW5mbyk7Cit8CisgIGluZm8gPSBFCit8CisgIEUgPSBpbmZvCispCisKKy8v IFRoaXMgcnVsZSByZXBsYWNlcyB0aGUgU3RyaW5nSW5mbyB2YXJpYWJsZSB3aXRoIGEgU3Ry aW5nSW5mb0RhdGEKKy8vIHZhcmlhYmxlIGFuZCBzd2l0Y2hlcyBmcm9tIHVzaW5nIHBvaW50 ZXItc3ludGF4IHRvIG9iamVjdC1zeW50YXguCisvLworLy8gSXQgc2hvdWxkIGJlIGlkZW50 aWNhbCB0byB0aGUgcnVsZSBhYm92ZSB3aXRoIHRoZSBleGNlcHRpb24gdGhhdAorLy8gdGhp cyBydWxlIG1hdGNoZXMgaW5pdGlhbGl6ZXIgc3ludGF4LCBzbyBtYWtlIHN1cmUgdGhleSBh cmUKKy8vIGlkZW50aWNhbC4KKy8vCisvLyBJZiBkZXN0cm95U3RyaW5nSW5mbygpIGlzIHVz ZWQgaXQgZnJlZXMgdGhlIFN0cmluZ0luZm8gYW5kIHRoZQorLy8gYnVmZmVyIGRhdGEgaGVs ZCBieSB0aGUgc3RydWN0dXJlLiBXaGVuIHVzaW5nIFN0cmluZ0luZm9EYXRhIHdlCisvLyBu ZWVkIHRvIGZyZWUgdGhlIGRhdGEgYnV0IG5vdCB0aGUgU3RyaW5nSW5mbyBzaW5jZSB0aGF0 IGlzIG5vdyBhCisvLyBTdHJpbmdJbmZvRGF0YS4KKy8vCisvLyBBIHBmcmVlKCkgb2YgdGhl IFN0cmluZ0luZm8gaXMgbm90IG5lZWRlZCBhbnkgbW9yZSBzaW5jZSB0aGUgYnVmZmVyCisv LyBkYXRhIGlzIG5vdCBkeW5hbWljYWxseSBhbGxvY2F0ZWQuIElzIGlzIGFsc28gd3Jvbmcg c2luY2UgdGhlCisvLyBzdHJ1Y3R1cmUgaXMgbm93IG9uIHRoZSBzdGFjayBhbmQgbm90IGEg cG9pbnRlciB2YXJpYWJsZS4KK0BkZXBlbmRzIG9uIHBhdGNoIGV4aXN0c0AKK2lkZW50aWZp ZXIgaW5mbywgZmxkOworcG9zaXRpb24gcG9zICE9IGlkMi5wb3M7CitzdGF0ZW1lbnQgUywg UzE7CitAQAorLSBTdHJpbmdJbmZvIGluZm9AcG9zID0gbWFrZVN0cmluZ0luZm8oKTsKKysg U3RyaW5nSW5mb0RhdGEgaW5mbzsKKy4uLiB3aGVuICE9IFMKKygKKzwuLi4KKygKKy0gZGVz dHJveVN0cmluZ0luZm8oaW5mbyk7CisrIHBmcmVlKGluZm8uZGF0YSk7Cit8CistIHBmcmVl KGluZm8pOworfAorICBpbmZvCistIC0+ZmxkCisrIC5mbGQKK3wKKy0gKmluZm8KKysgaW5m bworfAorLSBpbmZvCisrICZpbmZvCispCisuLi4+CismCisrIGluaXRTdHJpbmdJbmZvKCZp bmZvKTsKKyAgUzEKKykKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcG9zdGdyZXNfZmR3L3Bvc3Rn cmVzX2Zkdy5jIGIvY29udHJpYi9wb3N0Z3Jlc19mZHcvcG9zdGdyZXNfZmR3LmMKaW5kZXgg NDU2YjI2N2Y3MGIuLjA2YjUyYzY1MzAwIDEwMDY0NAotLS0gYS9jb250cmliL3Bvc3RncmVz X2Zkdy9wb3N0Z3Jlc19mZHcuYworKysgYi9jb250cmliL3Bvc3RncmVzX2Zkdy9wb3N0Z3Jl c19mZHcuYwpAQCAtMjg0MSw3ICsyODQxLDcgQEAgcG9zdGdyZXNFeHBsYWluRm9yZWlnblNj YW4oRm9yZWlnblNjYW5TdGF0ZSAqbm9kZSwgRXhwbGFpblN0YXRlICplcykKIAkgKi8KIAlp ZiAobGlzdF9sZW5ndGgoZmR3X3ByaXZhdGUpID4gRmR3U2NhblByaXZhdGVSZWxhdGlvbnMp CiAJewotCQlTdHJpbmdJbmZvCXJlbGF0aW9uczsKKwkJU3RyaW5nSW5mb0RhdGEgcmVsYXRp b25zOwogCQljaGFyCSAgICpyYXdyZWxhdGlvbnM7CiAJCWNoYXIJICAgKnB0cjsKIAkJaW50 CQkJbWlucnRpLApAQCAtMjg3NSw3ICsyODc1LDcgQEAgcG9zdGdyZXNFeHBsYWluRm9yZWln blNjYW4oRm9yZWlnblNjYW5TdGF0ZSAqbm9kZSwgRXhwbGFpblN0YXRlICplcykKIAkJcnRv ZmZzZXQgPSBibXNfbmV4dF9tZW1iZXIocGxhbi0+ZnNfYmFzZV9yZWxpZHMsIC0xKSAtIG1p bnJ0aTsKIAogCQkvKiBOb3cgd2UgY2FuIHRyYW5zbGF0ZSB0aGUgc3RyaW5nICovCi0JCXJl bGF0aW9ucyA9IG1ha2VTdHJpbmdJbmZvKCk7CisJCWluaXRTdHJpbmdJbmZvKCZyZWxhdGlv bnMpOwogCQlwdHIgPSByYXdyZWxhdGlvbnM7CiAJCXdoaWxlICgqcHRyKQogCQl7CkBAIC0y ODk3LDI0ICsyODk3LDI0IEBAIHBvc3RncmVzRXhwbGFpbkZvcmVpZ25TY2FuKEZvcmVpZ25T Y2FuU3RhdGUgKm5vZGUsIEV4cGxhaW5TdGF0ZSAqZXMpCiAJCQkJCWNoYXIJICAgKm5hbWVz cGFjZTsKIAogCQkJCQluYW1lc3BhY2UgPSBnZXRfbmFtZXNwYWNlX25hbWVfb3JfdGVtcChn ZXRfcmVsX25hbWVzcGFjZShydGUtPnJlbGlkKSk7Ci0JCQkJCWFwcGVuZFN0cmluZ0luZm8o cmVsYXRpb25zLCAiJXMuJXMiLAorCQkJCQlhcHBlbmRTdHJpbmdJbmZvKCZyZWxhdGlvbnMs ICIlcy4lcyIsCiAJCQkJCQkJCQkgcXVvdGVfaWRlbnRpZmllcihuYW1lc3BhY2UpLAogCQkJ CQkJCQkJIHF1b3RlX2lkZW50aWZpZXIocmVsbmFtZSkpOwogCQkJCX0KIAkJCQllbHNlCi0J CQkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcocmVsYXRpb25zLAorCQkJCQlhcHBlbmRTdHJp bmdJbmZvU3RyaW5nKCZyZWxhdGlvbnMsCiAJCQkJCQkJCQkJICAgcXVvdGVfaWRlbnRpZmll cihyZWxuYW1lKSk7CiAJCQkJcmVmbmFtZSA9IChjaGFyICopIGxpc3RfbnRoKGVzLT5ydGFi bGVfbmFtZXMsIHJ0aSAtIDEpOwogCQkJCWlmIChyZWZuYW1lID09IE5VTEwpCiAJCQkJCXJl Zm5hbWUgPSBydGUtPmVyZWYtPmFsaWFzbmFtZTsKIAkJCQlpZiAoc3RyY21wKHJlZm5hbWUs IHJlbG5hbWUpICE9IDApCi0JCQkJCWFwcGVuZFN0cmluZ0luZm8ocmVsYXRpb25zLCAiICVz IiwKKwkJCQkJYXBwZW5kU3RyaW5nSW5mbygmcmVsYXRpb25zLCAiICVzIiwKIAkJCQkJCQkJ CSBxdW90ZV9pZGVudGlmaWVyKHJlZm5hbWUpKTsKIAkJCX0KIAkJCWVsc2UKLQkJCQlhcHBl bmRTdHJpbmdJbmZvQ2hhcihyZWxhdGlvbnMsICpwdHIrKyk7CisJCQkJYXBwZW5kU3RyaW5n SW5mb0NoYXIoJnJlbGF0aW9ucywgKnB0cisrKTsKIAkJfQotCQlFeHBsYWluUHJvcGVydHlU ZXh0KCJSZWxhdGlvbnMiLCByZWxhdGlvbnMtPmRhdGEsIGVzKTsKKwkJRXhwbGFpblByb3Bl cnR5VGV4dCgiUmVsYXRpb25zIiwgcmVsYXRpb25zLmRhdGEsIGVzKTsKIAl9CiAKIAkvKgpk aWZmIC0tZ2l0IGEvY29udHJpYi90Y24vdGNuLmMgYi9jb250cmliL3Rjbi90Y24uYwppbmRl eCAzMTU4ZGVlMGYyNi4uOWNhNDdmMTdjYWMgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvdGNuL3Rj bi5jCisrKyBiL2NvbnRyaWIvdGNuL3Rjbi5jCkBAIC02NiwxMiArNjYsMTMgQEAgdHJpZ2dl cmVkX2NoYW5nZV9ub3RpZmljYXRpb24oUEdfRlVOQ1RJT05fQVJHUykKIAlUdXBsZURlc2MJ dHVwZGVzYzsKIAljaGFyCSAgICpjaGFubmVsOwogCWNoYXIJCW9wZXJhdGlvbjsKLQlTdHJp bmdJbmZvCXBheWxvYWQgPSBtYWtlU3RyaW5nSW5mbygpOworCVN0cmluZ0luZm9EYXRhIHBh eWxvYWQ7CiAJYm9vbAkJZm91bmRQSzsKIAogCUxpc3QJICAgKmluZGV4b2lkbGlzdDsKIAlM aXN0Q2VsbCAgICppbmRleG9pZHNjYW47CiAKKwlpbml0U3RyaW5nSW5mbygmcGF5bG9hZCk7 CiAJLyogbWFrZSBzdXJlIGl0J3MgY2FsbGVkIGFzIGEgdHJpZ2dlciAqLwogCWlmICghQ0FM TEVEX0FTX1RSSUdHRVIoZmNpbmZvKSkKIAkJZXJlcG9ydChFUlJPUiwKQEAgLTE0OSwyMiAr MTUwLDIyIEBAIHRyaWdnZXJlZF9jaGFuZ2Vfbm90aWZpY2F0aW9uKFBHX0ZVTkNUSU9OX0FS R1MpCiAKIAkJCQlmb3VuZFBLID0gdHJ1ZTsKIAotCQkJCXN0cmNweV9xdW90ZWQocGF5bG9h ZCwgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsKSwgJyInKTsKLQkJCQlhcHBlbmRTdHJp bmdJbmZvQ2hhck1hY3JvKHBheWxvYWQsICcsJyk7Ci0JCQkJYXBwZW5kU3RyaW5nSW5mb0No YXJNYWNybyhwYXlsb2FkLCBvcGVyYXRpb24pOworCQkJCXN0cmNweV9xdW90ZWQoJnBheWxv YWQsIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbCksICciJyk7CisJCQkJYXBwZW5kU3Ry aW5nSW5mb0NoYXJNYWNybygmcGF5bG9hZCwgJywnKTsKKwkJCQlhcHBlbmRTdHJpbmdJbmZv Q2hhck1hY3JvKCZwYXlsb2FkLCBvcGVyYXRpb24pOwogCiAJCQkJZm9yIChpID0gMDsgaSA8 IGluZG5rZXlhdHRzOyBpKyspCiAJCQkJewogCQkJCQlpbnQJCQljb2xubyA9IGluZGV4LT5p bmRrZXkudmFsdWVzW2ldOwogCQkJCQlGb3JtX3BnX2F0dHJpYnV0ZSBhdHRyID0gVHVwbGVE ZXNjQXR0cih0dXBkZXNjLCBjb2xubyAtIDEpOwogCi0JCQkJCWFwcGVuZFN0cmluZ0luZm9D aGFyTWFjcm8ocGF5bG9hZCwgJywnKTsKLQkJCQkJc3RyY3B5X3F1b3RlZChwYXlsb2FkLCBO YW1lU3RyKGF0dHItPmF0dG5hbWUpLCAnIicpOwotCQkJCQlhcHBlbmRTdHJpbmdJbmZvQ2hh ck1hY3JvKHBheWxvYWQsICc9Jyk7Ci0JCQkJCXN0cmNweV9xdW90ZWQocGF5bG9hZCwgU1BJ X2dldHZhbHVlKHRyaWd0dXBsZSwgdHVwZGVzYywgY29sbm8pLCAnXCcnKTsKKwkJCQkJYXBw ZW5kU3RyaW5nSW5mb0NoYXJNYWNybygmcGF5bG9hZCwgJywnKTsKKwkJCQkJc3RyY3B5X3F1 b3RlZCgmcGF5bG9hZCwgTmFtZVN0cihhdHRyLT5hdHRuYW1lKSwgJyInKTsKKwkJCQkJYXBw ZW5kU3RyaW5nSW5mb0NoYXJNYWNybygmcGF5bG9hZCwgJz0nKTsKKwkJCQkJc3RyY3B5X3F1 b3RlZCgmcGF5bG9hZCwgU1BJX2dldHZhbHVlKHRyaWd0dXBsZSwgdHVwZGVzYywgY29sbm8p LCAnXCcnKTsKIAkJCQl9CiAKLQkJCQlBc3luY19Ob3RpZnkoY2hhbm5lbCwgcGF5bG9hZC0+ ZGF0YSk7CisJCQkJQXN5bmNfTm90aWZ5KGNoYW5uZWwsIHBheWxvYWQuZGF0YSk7CiAJCQl9 CiAJCQlSZWxlYXNlU3lzQ2FjaGUoaW5kZXhUdXBsZSk7CiAJCQlicmVhazsKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2diYWNrdXAuYyBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2diYWNrdXAuYwppbmRleCBjZGE0YjM4YjdkNi4uZDli NmRjNjNhZTMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2di YWNrdXAuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9nYmFja3VwLmMK QEAgLTMxLDE4ICszMSwyMCBAQCBidWlsZF9iYWNrdXBfY29udGVudChCYWNrdXBTdGF0ZSAq c3RhdGUsIGJvb2wgaXNoaXN0b3J5ZmlsZSkKIAljaGFyCQlzdGFydHN0cmJ1ZlsxMjhdOwog CWNoYXIJCXN0YXJ0eGxvZ2ZpbGVbTUFYRk5BTUVMRU5dOyAvKiBiYWNrdXAgc3RhcnQgV0FM IGZpbGUgKi8KIAlYTG9nU2VnTm8Jc3RhcnRzZWdubzsKLQlTdHJpbmdJbmZvCXJlc3VsdCA9 IG1ha2VTdHJpbmdJbmZvKCk7CisJU3RyaW5nSW5mb0RhdGEgcmVzdWx0OwogCWNoYXIJICAg KmRhdGE7CiAKIAlBc3NlcnQoc3RhdGUgIT0gTlVMTCk7CiAKKwlpbml0U3RyaW5nSW5mbygm cmVzdWx0KTsKKwogCS8qIFVzZSB0aGUgbG9nIHRpbWV6b25lIGhlcmUsIG5vdCB0aGUgc2Vz c2lvbiB0aW1lem9uZSAqLwogCXBnX3N0cmZ0aW1lKHN0YXJ0c3RyYnVmLCBzaXplb2Yoc3Rh cnRzdHJidWYpLCAiJVktJW0tJWQgJUg6JU06JVMgJVoiLAogCQkJCXBnX2xvY2FsdGltZSgm c3RhdGUtPnN0YXJ0dGltZSwgbG9nX3RpbWV6b25lKSk7CiAKIAlYTEJ5dGVUb1NlZyhzdGF0 ZS0+c3RhcnRwb2ludCwgc3RhcnRzZWdubywgd2FsX3NlZ21lbnRfc2l6ZSk7CiAJWExvZ0Zp bGVOYW1lKHN0YXJ0eGxvZ2ZpbGUsIHN0YXRlLT5zdGFydHRsaSwgc3RhcnRzZWdubywgd2Fs X3NlZ21lbnRfc2l6ZSk7Ci0JYXBwZW5kU3RyaW5nSW5mbyhyZXN1bHQsICJTVEFSVCBXQUwg TE9DQVRJT046ICVYLyUwOFggKGZpbGUgJXMpXG4iLAorCWFwcGVuZFN0cmluZ0luZm8oJnJl c3VsdCwgIlNUQVJUIFdBTCBMT0NBVElPTjogJVgvJTA4WCAoZmlsZSAlcylcbiIsCiAJCQkJ CSBMU05fRk9STUFUX0FSR1Moc3RhdGUtPnN0YXJ0cG9pbnQpLCBzdGFydHhsb2dmaWxlKTsK IAogCWlmIChpc2hpc3RvcnlmaWxlKQpAQCAtNTIsMTggKzU0LDE4IEBAIGJ1aWxkX2JhY2t1 cF9jb250ZW50KEJhY2t1cFN0YXRlICpzdGF0ZSwgYm9vbCBpc2hpc3RvcnlmaWxlKQogCiAJ CVhMQnl0ZVRvU2VnKHN0YXRlLT5zdG9wcG9pbnQsIHN0b3BzZWdubywgd2FsX3NlZ21lbnRf c2l6ZSk7CiAJCVhMb2dGaWxlTmFtZShzdG9weGxvZ2ZpbGUsIHN0YXRlLT5zdG9wdGxpLCBz dG9wc2Vnbm8sIHdhbF9zZWdtZW50X3NpemUpOwotCQlhcHBlbmRTdHJpbmdJbmZvKHJlc3Vs dCwgIlNUT1AgV0FMIExPQ0FUSU9OOiAlWC8lMDhYIChmaWxlICVzKVxuIiwKKwkJYXBwZW5k U3RyaW5nSW5mbygmcmVzdWx0LCAiU1RPUCBXQUwgTE9DQVRJT046ICVYLyUwOFggKGZpbGUg JXMpXG4iLAogCQkJCQkJIExTTl9GT1JNQVRfQVJHUyhzdGF0ZS0+c3RvcHBvaW50KSwgc3Rv cHhsb2dmaWxlKTsKIAl9CiAKLQlhcHBlbmRTdHJpbmdJbmZvKHJlc3VsdCwgIkNIRUNLUE9J TlQgTE9DQVRJT046ICVYLyUwOFhcbiIsCisJYXBwZW5kU3RyaW5nSW5mbygmcmVzdWx0LCAi Q0hFQ0tQT0lOVCBMT0NBVElPTjogJVgvJTA4WFxuIiwKIAkJCQkJIExTTl9GT1JNQVRfQVJH UyhzdGF0ZS0+Y2hlY2twb2ludGxvYykpOwotCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcocmVz dWx0LCAiQkFDS1VQIE1FVEhPRDogc3RyZWFtZWRcbiIpOwotCWFwcGVuZFN0cmluZ0luZm8o cmVzdWx0LCAiQkFDS1VQIEZST006ICVzXG4iLAorCWFwcGVuZFN0cmluZ0luZm9TdHJpbmco JnJlc3VsdCwgIkJBQ0tVUCBNRVRIT0Q6IHN0cmVhbWVkXG4iKTsKKwlhcHBlbmRTdHJpbmdJ bmZvKCZyZXN1bHQsICJCQUNLVVAgRlJPTTogJXNcbiIsCiAJCQkJCSBzdGF0ZS0+c3RhcnRl ZF9pbl9yZWNvdmVyeSA/ICJzdGFuZGJ5IiA6ICJwcmltYXJ5Iik7Ci0JYXBwZW5kU3RyaW5n SW5mbyhyZXN1bHQsICJTVEFSVCBUSU1FOiAlc1xuIiwgc3RhcnRzdHJidWYpOwotCWFwcGVu ZFN0cmluZ0luZm8ocmVzdWx0LCAiTEFCRUw6ICVzXG4iLCBzdGF0ZS0+bmFtZSk7Ci0JYXBw ZW5kU3RyaW5nSW5mbyhyZXN1bHQsICJTVEFSVCBUSU1FTElORTogJXVcbiIsIHN0YXRlLT5z dGFydHRsaSk7CisJYXBwZW5kU3RyaW5nSW5mbygmcmVzdWx0LCAiU1RBUlQgVElNRTogJXNc biIsIHN0YXJ0c3RyYnVmKTsKKwlhcHBlbmRTdHJpbmdJbmZvKCZyZXN1bHQsICJMQUJFTDog JXNcbiIsIHN0YXRlLT5uYW1lKTsKKwlhcHBlbmRTdHJpbmdJbmZvKCZyZXN1bHQsICJTVEFS VCBUSU1FTElORTogJXVcbiIsIHN0YXRlLT5zdGFydHRsaSk7CiAKIAlpZiAoaXNoaXN0b3J5 ZmlsZSkKIAl7CkBAIC03MywyMiArNzUsMjEgQEAgYnVpbGRfYmFja3VwX2NvbnRlbnQoQmFj a3VwU3RhdGUgKnN0YXRlLCBib29sIGlzaGlzdG9yeWZpbGUpCiAJCXBnX3N0cmZ0aW1lKHN0 b3BzdHJmYnVmLCBzaXplb2Yoc3RvcHN0cmZidWYpLCAiJVktJW0tJWQgJUg6JU06JVMgJVoi LAogCQkJCQlwZ19sb2NhbHRpbWUoJnN0YXRlLT5zdG9wdGltZSwgbG9nX3RpbWV6b25lKSk7 CiAKLQkJYXBwZW5kU3RyaW5nSW5mbyhyZXN1bHQsICJTVE9QIFRJTUU6ICVzXG4iLCBzdG9w c3RyZmJ1Zik7Ci0JCWFwcGVuZFN0cmluZ0luZm8ocmVzdWx0LCAiU1RPUCBUSU1FTElORTog JXVcbiIsIHN0YXRlLT5zdG9wdGxpKTsKKwkJYXBwZW5kU3RyaW5nSW5mbygmcmVzdWx0LCAi U1RPUCBUSU1FOiAlc1xuIiwgc3RvcHN0cmZidWYpOworCQlhcHBlbmRTdHJpbmdJbmZvKCZy ZXN1bHQsICJTVE9QIFRJTUVMSU5FOiAldVxuIiwgc3RhdGUtPnN0b3B0bGkpOwogCX0KIAog CS8qIGVpdGhlciBib3RoIGlzdGFydHBvaW50IGFuZCBpc3RhcnR0bGkgc2hvdWxkIGJlIHNl dCwgb3IgbmVpdGhlciAqLwogCUFzc2VydChYTG9nUmVjUHRySXNJbnZhbGlkKHN0YXRlLT5p c3RhcnRwb2ludCkgPT0gKHN0YXRlLT5pc3RhcnR0bGkgPT0gMCkpOwogCWlmICghWExvZ1Jl Y1B0cklzSW52YWxpZChzdGF0ZS0+aXN0YXJ0cG9pbnQpKQogCXsKLQkJYXBwZW5kU3RyaW5n SW5mbyhyZXN1bHQsICJJTkNSRU1FTlRBTCBGUk9NIExTTjogJVgvJTA4WFxuIiwKKwkJYXBw ZW5kU3RyaW5nSW5mbygmcmVzdWx0LCAiSU5DUkVNRU5UQUwgRlJPTSBMU046ICVYLyUwOFhc biIsCiAJCQkJCQkgTFNOX0ZPUk1BVF9BUkdTKHN0YXRlLT5pc3RhcnRwb2ludCkpOwotCQlh cHBlbmRTdHJpbmdJbmZvKHJlc3VsdCwgIklOQ1JFTUVOVEFMIEZST00gVExJOiAldVxuIiwK KwkJYXBwZW5kU3RyaW5nSW5mbygmcmVzdWx0LCAiSU5DUkVNRU5UQUwgRlJPTSBUTEk6ICV1 XG4iLAogCQkJCQkJIHN0YXRlLT5pc3RhcnR0bGkpOwogCX0KIAotCWRhdGEgPSByZXN1bHQt PmRhdGE7Ci0JcGZyZWUocmVzdWx0KTsKKwlkYXRhID0gcmVzdWx0LmRhdGE7CiAKIAlyZXR1 cm4gZGF0YTsKIH0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2JhY2t1cC9iYXNlYmFja3Vw LmMgYi9zcmMvYmFja2VuZC9iYWNrdXAvYmFzZWJhY2t1cC5jCmluZGV4IGJiN2Q5MGFhNWQ5 Li4yYmU0ZTA2OTgxNiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYmFja3VwL2Jhc2ViYWNr dXAuYworKysgYi9zcmMvYmFja2VuZC9iYWNrdXAvYmFzZWJhY2t1cC5jCkBAIC0yMzksNyAr MjM5LDcgQEAgcGVyZm9ybV9iYXNlX2JhY2t1cChiYXNlYmFja3VwX29wdGlvbnMgKm9wdCwg YmJzaW5rICpzaW5rLAogCVRpbWVMaW5lSUQJZW5kdGxpOwogCWJhY2t1cF9tYW5pZmVzdF9p bmZvIG1hbmlmZXN0OwogCUJhY2t1cFN0YXRlICpiYWNrdXBfc3RhdGU7Ci0JU3RyaW5nSW5m bwl0YWJsZXNwYWNlX21hcDsKKwlTdHJpbmdJbmZvRGF0YSB0YWJsZXNwYWNlX21hcDsKIAog CS8qIEluaXRpYWwgYmFja3VwIHN0YXRlLCBpbnNvZmFyIGFzIHdlIGtub3cgaXQgbm93LiAq LwogCXN0YXRlLnRhYmxlc3BhY2VzID0gTklMOwpAQCAtMjYzLDExICsyNjMsMTEgQEAgcGVy Zm9ybV9iYXNlX2JhY2t1cChiYXNlYmFja3VwX29wdGlvbnMgKm9wdCwgYmJzaW5rICpzaW5r LAogCiAJLyogQWxsb2NhdGUgYmFja3VwIHJlbGF0ZWQgdmFyaWFibGVzLiAqLwogCWJhY2t1 cF9zdGF0ZSA9IChCYWNrdXBTdGF0ZSAqKSBwYWxsb2MwKHNpemVvZihCYWNrdXBTdGF0ZSkp OwotCXRhYmxlc3BhY2VfbWFwID0gbWFrZVN0cmluZ0luZm8oKTsKKwlpbml0U3RyaW5nSW5m bygmdGFibGVzcGFjZV9tYXApOwogCiAJYmFzZWJhY2t1cF9wcm9ncmVzc193YWl0X2NoZWNr cG9pbnQoKTsKIAlkb19wZ19iYWNrdXBfc3RhcnQob3B0LT5sYWJlbCwgb3B0LT5mYXN0Y2hl Y2twb2ludCwgJnN0YXRlLnRhYmxlc3BhY2VzLAotCQkJCQkgICBiYWNrdXBfc3RhdGUsIHRh Ymxlc3BhY2VfbWFwKTsKKwkJCQkJICAgYmFja3VwX3N0YXRlLCAmdGFibGVzcGFjZV9tYXAp OwogCiAJc3RhdGUuc3RhcnRwdHIgPSBiYWNrdXBfc3RhdGUtPnN0YXJ0cG9pbnQ7CiAJc3Rh dGUuc3RhcnR0bGkgPSBiYWNrdXBfc3RhdGUtPnN0YXJ0dGxpOwpAQCAtMzQyLDcgKzM0Miw3 IEBAIHBlcmZvcm1fYmFzZV9iYWNrdXAoYmFzZWJhY2t1cF9vcHRpb25zICpvcHQsIGJic2lu ayAqc2luaywKIAkJCQlpZiAob3B0LT5zZW5kdGJsc3BjbWFwZmlsZSkKIAkJCQl7CiAJCQkJ CXNlbmRGaWxlV2l0aENvbnRlbnQoc2luaywgVEFCTEVTUEFDRV9NQVAsCi0JCQkJCQkJCQkJ dGFibGVzcGFjZV9tYXAtPmRhdGEsIC0xLCAmbWFuaWZlc3QpOworCQkJCQkJCQkJCXRhYmxl c3BhY2VfbWFwLmRhdGEsIC0xLCAmbWFuaWZlc3QpOwogCQkJCQlzZW5kdGJsc3BjbGlua3Mg PSBmYWxzZTsKIAkJCQl9CiAKQEAgLTM5OSw3ICszOTksNyBAQCBwZXJmb3JtX2Jhc2VfYmFj a3VwKGJhc2ViYWNrdXBfb3B0aW9ucyAqb3B0LCBiYnNpbmsgKnNpbmssCiAJCWVuZHRsaSA9 IGJhY2t1cF9zdGF0ZS0+c3RvcHRsaTsKIAogCQkvKiBEZWFsbG9jYXRlIGJhY2t1cC1yZWxh dGVkIHZhcmlhYmxlcy4gKi8KLQkJZGVzdHJveVN0cmluZ0luZm8odGFibGVzcGFjZV9tYXAp OworCQlwZnJlZSh0YWJsZXNwYWNlX21hcC5kYXRhKTsKIAkJcGZyZWUoYmFja3VwX3N0YXRl KTsKIAl9CiAJUEdfRU5EX0VOU1VSRV9FUlJPUl9DTEVBTlVQKGRvX3BnX2Fib3J0X2JhY2t1 cCwgQm9vbEdldERhdHVtKGZhbHNlKSk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21t YW5kcy9zdWJzY3JpcHRpb25jbWRzLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9zdWJzY3Jp cHRpb25jbWRzLmMKaW5kZXggMWY0NTQ0NGI0OTkuLjQ5MmYzOGJkZjBjIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9jb21tYW5kcy9zdWJzY3JpcHRpb25jbWRzLmMKKysrIGIvc3JjL2Jh Y2tlbmQvY29tbWFuZHMvc3Vic2NyaXB0aW9uY21kcy5jCkBAIC00OTEsMjAgKzQ5MSwyMCBA QCBzdGF0aWMgdm9pZAogY2hlY2tfcHVibGljYXRpb25zKFdhbFJlY2VpdmVyQ29ubiAqd3Jj b25uLCBMaXN0ICpwdWJsaWNhdGlvbnMpCiB7CiAJV2FsUmN2RXhlY1Jlc3VsdCAqcmVzOwot CVN0cmluZ0luZm8JY21kOworCVN0cmluZ0luZm9EYXRhCWNtZDsKIAlUdXBsZVRhYmxlU2xv dCAqc2xvdDsKIAlMaXN0CSAgICpwdWJsaWNhdGlvbnNDb3B5ID0gTklMOwogCU9pZAkJCXRh YmxlUm93WzFdID0ge1RFWFRPSUR9OwogCi0JY21kID0gbWFrZVN0cmluZ0luZm8oKTsKLQlh cHBlbmRTdHJpbmdJbmZvU3RyaW5nKGNtZCwgIlNFTEVDVCB0LnB1Ym5hbWUgRlJPTVxuIgor CWluaXRTdHJpbmdJbmZvKCZjbWQpOworCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmNtZCwg IlNFTEVDVCB0LnB1Ym5hbWUgRlJPTVxuIgogCQkJCQkJICAgIiBwZ19jYXRhbG9nLnBnX3B1 YmxpY2F0aW9uIHQgV0hFUkVcbiIKIAkJCQkJCSAgICIgdC5wdWJuYW1lIElOICgiKTsKLQlH ZXRQdWJsaWNhdGlvbnNTdHIocHVibGljYXRpb25zLCBjbWQsIHRydWUpOwotCWFwcGVuZFN0 cmluZ0luZm9DaGFyKGNtZCwgJyknKTsKKwlHZXRQdWJsaWNhdGlvbnNTdHIocHVibGljYXRp b25zLCAmY21kLCB0cnVlKTsKKwlhcHBlbmRTdHJpbmdJbmZvQ2hhcigmY21kLCAnKScpOwog Ci0JcmVzID0gd2FscmN2X2V4ZWMod3Jjb25uLCBjbWQtPmRhdGEsIDEsIHRhYmxlUm93KTsK LQlkZXN0cm95U3RyaW5nSW5mbyhjbWQpOworCXJlcyA9IHdhbHJjdl9leGVjKHdyY29ubiwg Y21kLmRhdGEsIDEsIHRhYmxlUm93KTsKKwlwZnJlZShjbWQuZGF0YSk7CiAKIAlpZiAocmVz LT5zdGF0dXMgIT0gV0FMUkNWX09LX1RVUExFUykKIAkJZXJlcG9ydChFUlJPUiwKQEAgLTI1 OTcsMzMgKzI1OTcsNDEgQEAgY2hlY2tfcHVibGljYXRpb25zX29yaWdpbl90YWJsZXMoV2Fs UmVjZWl2ZXJDb25uICp3cmNvbm4sIExpc3QgKnB1YmxpY2F0aW9ucywKIAkgKi8KIAlpZiAo cHVibGlzdCkKIAl7Ci0JCVN0cmluZ0luZm8JcHVibmFtZXMgPSBtYWtlU3RyaW5nSW5mbygp OwotCQlTdHJpbmdJbmZvCWVycl9tc2cgPSBtYWtlU3RyaW5nSW5mbygpOwotCQlTdHJpbmdJ bmZvCWVycl9oaW50ID0gbWFrZVN0cmluZ0luZm8oKTsKKwkJU3RyaW5nSW5mb0RhdGEJcHVi bmFtZXM7CisJCVN0cmluZ0luZm9EYXRhCWVycl9tc2c7CisJCVN0cmluZ0luZm9EYXRhCWVy cl9oaW50OworCisJCWluaXRTdHJpbmdJbmZvKCZwdWJuYW1lcyk7CisJCWluaXRTdHJpbmdJ bmZvKCZlcnJfbXNnKTsKKwkJaW5pdFN0cmluZ0luZm8oJmVycl9oaW50KTsKIAogCQkvKiBQ cmVwYXJlIHRoZSBsaXN0IG9mIHB1YmxpY2F0aW9uKHMpIGZvciB3YXJuaW5nIG1lc3NhZ2Uu ICovCi0JCUdldFB1YmxpY2F0aW9uc1N0cihwdWJsaXN0LCBwdWJuYW1lcywgZmFsc2UpOwor CQlHZXRQdWJsaWNhdGlvbnNTdHIocHVibGlzdCwgJnB1Ym5hbWVzLCBmYWxzZSk7CiAKIAkJ aWYgKGNoZWNrX3RhYmxlX3N5bmMpCiAJCXsKLQkJCWFwcGVuZFN0cmluZ0luZm8oZXJyX21z ZywgXygic3Vic2NyaXB0aW9uIFwiJXNcIiByZXF1ZXN0ZWQgY29weV9kYXRhIHdpdGggb3Jp Z2luID0gTk9ORSBidXQgbWlnaHQgY29weSBkYXRhIHRoYXQgaGFkIGEgZGlmZmVyZW50IG9y aWdpbiIpLAorCQkJYXBwZW5kU3RyaW5nSW5mbygmZXJyX21zZywgXygic3Vic2NyaXB0aW9u IFwiJXNcIiByZXF1ZXN0ZWQgY29weV9kYXRhIHdpdGggb3JpZ2luID0gTk9ORSBidXQgbWln aHQgY29weSBkYXRhIHRoYXQgaGFkIGEgZGlmZmVyZW50IG9yaWdpbiIpLAogCQkJCQkJCSBz dWJuYW1lKTsKLQkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoZXJyX2hpbnQsIF8oIlZlcmlm eSB0aGF0IGluaXRpYWwgZGF0YSBjb3BpZWQgZnJvbSB0aGUgcHVibGlzaGVyIHRhYmxlcyBk aWQgbm90IGNvbWUgZnJvbSBvdGhlciBvcmlnaW5zLiIpKTsKKwkJCWFwcGVuZFN0cmluZ0lu Zm9TdHJpbmcoJmVycl9oaW50LCBfKCJWZXJpZnkgdGhhdCBpbml0aWFsIGRhdGEgY29waWVk IGZyb20gdGhlIHB1Ymxpc2hlciB0YWJsZXMgZGlkIG5vdCBjb21lIGZyb20gb3RoZXIgb3Jp Z2lucy4iKSk7CiAJCX0KIAkJZWxzZQogCQl7Ci0JCQlhcHBlbmRTdHJpbmdJbmZvKGVycl9t c2csIF8oInN1YnNjcmlwdGlvbiBcIiVzXCIgZW5hYmxlZCByZXRhaW5fZGVhZF90dXBsZXMg YnV0IG1pZ2h0IG5vdCByZWxpYWJseSBkZXRlY3QgY29uZmxpY3RzIGZvciBjaGFuZ2VzIGZy b20gZGlmZmVyZW50IG9yaWdpbnMiKSwKKwkJCWFwcGVuZFN0cmluZ0luZm8oJmVycl9tc2cs IF8oInN1YnNjcmlwdGlvbiBcIiVzXCIgZW5hYmxlZCByZXRhaW5fZGVhZF90dXBsZXMgYnV0 IG1pZ2h0IG5vdCByZWxpYWJseSBkZXRlY3QgY29uZmxpY3RzIGZvciBjaGFuZ2VzIGZyb20g ZGlmZmVyZW50IG9yaWdpbnMiKSwKIAkJCQkJCQkgc3VibmFtZSk7Ci0JCQlhcHBlbmRTdHJp bmdJbmZvU3RyaW5nKGVycl9oaW50LCBfKCJDb25zaWRlciB1c2luZyBvcmlnaW4gPSBOT05F IG9yIGRpc2FibGluZyByZXRhaW5fZGVhZF90dXBsZXMuIikpOworCQkJYXBwZW5kU3RyaW5n SW5mb1N0cmluZygmZXJyX2hpbnQsIF8oIkNvbnNpZGVyIHVzaW5nIG9yaWdpbiA9IE5PTkUg b3IgZGlzYWJsaW5nIHJldGFpbl9kZWFkX3R1cGxlcy4iKSk7CiAJCX0KIAogCQllcmVwb3J0 KFdBUk5JTkcsCiAJCQkJZXJyY29kZShFUlJDT0RFX09CSkVDVF9OT1RfSU5fUFJFUkVRVUlT SVRFX1NUQVRFKSwKLQkJCQllcnJtc2dfaW50ZXJuYWwoIiVzIiwgZXJyX21zZy0+ZGF0YSks CisJCQkJZXJybXNnX2ludGVybmFsKCIlcyIsIGVycl9tc2cuZGF0YSksCiAJCQkJZXJyZGV0 YWlsX3BsdXJhbCgiVGhlIHN1YnNjcmlwdGlvbiBzdWJzY3JpYmVzIHRvIGEgcHVibGljYXRp b24gKCVzKSB0aGF0IGNvbnRhaW5zIHRhYmxlcyB0aGF0IGFyZSB3cml0dGVuIHRvIGJ5IG90 aGVyIHN1YnNjcmlwdGlvbnMuIiwKIAkJCQkJCQkJICJUaGUgc3Vic2NyaXB0aW9uIHN1YnNj cmliZXMgdG8gcHVibGljYXRpb25zICglcykgdGhhdCBjb250YWluIHRhYmxlcyB0aGF0IGFy ZSB3cml0dGVuIHRvIGJ5IG90aGVyIHN1YnNjcmlwdGlvbnMuIiwKLQkJCQkJCQkJIGxpc3Rf bGVuZ3RoKHB1Ymxpc3QpLCBwdWJuYW1lcy0+ZGF0YSksCi0JCQkJZXJyaGludF9pbnRlcm5h bCgiJXMiLCBlcnJfaGludC0+ZGF0YSkpOworCQkJCQkJCQkgbGlzdF9sZW5ndGgocHVibGlz dCksIHB1Ym5hbWVzLmRhdGEpLAorCQkJCWVycmhpbnRfaW50ZXJuYWwoIiVzIiwgZXJyX2hp bnQuZGF0YSkpOworCisJCXBmcmVlKHB1Ym5hbWVzLmRhdGEpOworCQlwZnJlZShlcnJfbXNn LmRhdGEpOworCQlwZnJlZShlcnJfaGludC5kYXRhKTsKIAl9CiAKIAlFeGVjRHJvcFNpbmds ZVR1cGxlVGFibGVTbG90KHNsb3QpOwpAQCAtMjg4NSwxMiArMjg5MywxMyBAQCBmZXRjaF9y ZWxhdGlvbl9saXN0KFdhbFJlY2VpdmVyQ29ubiAqd3Jjb25uLCBMaXN0ICpwdWJsaWNhdGlv bnMpCiAJaW50CQkJc2VydmVyX3ZlcnNpb24gPSB3YWxyY3Zfc2VydmVyX3ZlcnNpb24od3Jj b25uKTsKIAlib29sCQljaGVja19jb2x1bW5saXN0ID0gKHNlcnZlcl92ZXJzaW9uID49IDE1 MDAwMCk7CiAJaW50CQkJY29sdW1uX2NvdW50ID0gY2hlY2tfY29sdW1ubGlzdCA/IDQgOiAz OwotCVN0cmluZ0luZm8JcHViX25hbWVzID0gbWFrZVN0cmluZ0luZm8oKTsKKwlTdHJpbmdJ bmZvRGF0YQlwdWJfbmFtZXM7CiAKIAlpbml0U3RyaW5nSW5mbygmY21kKTsKKwlpbml0U3Ry aW5nSW5mbygmcHViX25hbWVzKTsKIAogCS8qIEJ1aWxkIHRoZSBwdWJfbmFtZXMgY29tbWEt c2VwYXJhdGVkIHN0cmluZy4gKi8KLQlHZXRQdWJsaWNhdGlvbnNTdHIocHVibGljYXRpb25z LCBwdWJfbmFtZXMsIHRydWUpOworCUdldFB1YmxpY2F0aW9uc1N0cihwdWJsaWNhdGlvbnMs ICZwdWJfbmFtZXMsIHRydWUpOwogCiAJLyogR2V0IHRoZSBsaXN0IG9mIHJlbGF0aW9ucyBm cm9tIHRoZSBwdWJsaXNoZXIgKi8KIAlpZiAoc2VydmVyX3ZlcnNpb24gPj0gMTYwMDAwKQpA QCAtMjkxNyw3ICsyOTI2LDcgQEAgZmV0Y2hfcmVsYXRpb25fbGlzdChXYWxSZWNlaXZlckNv bm4gKndyY29ubiwgTGlzdCAqcHVibGljYXRpb25zKQogCQkJCQkJICIgICAgICAgICAgICAg ICAgRlJPTSBwZ19wdWJsaWNhdGlvblxuIgogCQkJCQkJICIgICAgICAgICAgICAgICAgV0hF UkUgcHVibmFtZSBJTiAoICVzICkpIEFTIGdwdFxuIgogCQkJCQkJICIgICAgICAgICAgICAg T04gZ3B0LnJlbGlkID0gYy5vaWRcbiIsCi0JCQkJCQkgcHViX25hbWVzLT5kYXRhKTsKKwkJ CQkJCSBwdWJfbmFtZXMuZGF0YSk7CiAKIAkJLyogRnJvbSB2ZXJzaW9uIDE5LCBpbmNsdXNp b24gb2Ygc2VxdWVuY2VzIGluIHRoZSB0YXJnZXQgaXMgc3VwcG9ydGVkICovCiAJCWlmIChz ZXJ2ZXJfdmVyc2lvbiA+PSAxOTAwMDApCkBAIC0yOTI2LDcgKzI5MzUsNyBAQCBmZXRjaF9y ZWxhdGlvbl9saXN0KFdhbFJlY2VpdmVyQ29ubiAqd3Jjb25uLCBMaXN0ICpwdWJsaWNhdGlv bnMpCiAJCQkJCQkJICIgIFNFTEVDVCBESVNUSU5DVCBzLnNjaGVtYW5hbWUsIHMuc2VxdWVu Y2VuYW1lLCAiIENwcEFzU3RyaW5nMihSRUxLSU5EX1NFUVVFTkNFKSAiOjpcImNoYXJcIiBB UyByZWxraW5kLCBOVUxMOjppbnQydmVjdG9yIEFTIGF0dHJzXG4iCiAJCQkJCQkJICIgIEZS T00gcGdfY2F0YWxvZy5wZ19wdWJsaWNhdGlvbl9zZXF1ZW5jZXMgc1xuIgogCQkJCQkJCSAi ICBXSEVSRSBzLnB1Ym5hbWUgSU4gKCAlcyApIiwKLQkJCQkJCQkgcHViX25hbWVzLT5kYXRh KTsKKwkJCQkJCQkgcHViX25hbWVzLmRhdGEpOwogCX0KIAllbHNlCiAJewpAQCAtMjkzOSwx MCArMjk0OCwxMCBAQCBmZXRjaF9yZWxhdGlvbl9saXN0KFdhbFJlY2VpdmVyQ29ubiAqd3Jj b25uLCBMaXN0ICpwdWJsaWNhdGlvbnMpCiAKIAkJYXBwZW5kU3RyaW5nSW5mbygmY21kLCAi RlJPTSBwZ19jYXRhbG9nLnBnX3B1YmxpY2F0aW9uX3RhYmxlcyB0XG4iCiAJCQkJCQkgIiBX SEVSRSB0LnB1Ym5hbWUgSU4gKCAlcyApIiwKLQkJCQkJCSBwdWJfbmFtZXMtPmRhdGEpOwor CQkJCQkJIHB1Yl9uYW1lcy5kYXRhKTsKIAl9CiAKLQlkZXN0cm95U3RyaW5nSW5mbyhwdWJf bmFtZXMpOworCXBmcmVlKHB1Yl9uYW1lcy5kYXRhKTsKIAogCXJlcyA9IHdhbHJjdl9leGVj KHdyY29ubiwgY21kLmRhdGEsIGNvbHVtbl9jb3VudCwgdGFibGVSb3cpOwogCXBmcmVlKGNt ZC5kYXRhKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29uLmMgYi9z cmMvYmFja2VuZC91dGlscy9hZHQvanNvbi5jCmluZGV4IDg4YTYxMmIwNDFkLi4wNmRkNjJm MDAwOCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb24uYworKysgYi9z cmMvYmFja2VuZC91dGlscy9hZHQvanNvbi5jCkBAIC02MzEsMTMgKzYzMSwxMyBAQCBEYXR1 bQogYXJyYXlfdG9fanNvbihQR19GVU5DVElPTl9BUkdTKQogewogCURhdHVtCQlhcnJheSA9 IFBHX0dFVEFSR19EQVRVTSgwKTsKLQlTdHJpbmdJbmZvCXJlc3VsdDsKKwlTdHJpbmdJbmZv RGF0YSByZXN1bHQ7CiAKLQlyZXN1bHQgPSBtYWtlU3RyaW5nSW5mbygpOworCWluaXRTdHJp bmdJbmZvKCZyZXN1bHQpOwogCi0JYXJyYXlfdG9fanNvbl9pbnRlcm5hbChhcnJheSwgcmVz dWx0LCBmYWxzZSk7CisJYXJyYXlfdG9fanNvbl9pbnRlcm5hbChhcnJheSwgJnJlc3VsdCwg ZmFsc2UpOwogCi0JUEdfUkVUVVJOX1RFWFRfUChjc3RyaW5nX3RvX3RleHRfd2l0aF9sZW4o cmVzdWx0LT5kYXRhLCByZXN1bHQtPmxlbikpOworCVBHX1JFVFVSTl9URVhUX1AoY3N0cmlu Z190b190ZXh0X3dpdGhfbGVuKHJlc3VsdC5kYXRhLCByZXN1bHQubGVuKSk7CiB9CiAKIC8q CkBAIC02NDgsMTMgKzY0OCwxMyBAQCBhcnJheV90b19qc29uX3ByZXR0eShQR19GVU5DVElP Tl9BUkdTKQogewogCURhdHVtCQlhcnJheSA9IFBHX0dFVEFSR19EQVRVTSgwKTsKIAlib29s CQl1c2VfbGluZV9mZWVkcyA9IFBHX0dFVEFSR19CT09MKDEpOwotCVN0cmluZ0luZm8JcmVz dWx0OworCVN0cmluZ0luZm9EYXRhIHJlc3VsdDsKIAotCXJlc3VsdCA9IG1ha2VTdHJpbmdJ bmZvKCk7CisJaW5pdFN0cmluZ0luZm8oJnJlc3VsdCk7CiAKLQlhcnJheV90b19qc29uX2lu dGVybmFsKGFycmF5LCByZXN1bHQsIHVzZV9saW5lX2ZlZWRzKTsKKwlhcnJheV90b19qc29u X2ludGVybmFsKGFycmF5LCAmcmVzdWx0LCB1c2VfbGluZV9mZWVkcyk7CiAKLQlQR19SRVRV Uk5fVEVYVF9QKGNzdHJpbmdfdG9fdGV4dF93aXRoX2xlbihyZXN1bHQtPmRhdGEsIHJlc3Vs dC0+bGVuKSk7CisJUEdfUkVUVVJOX1RFWFRfUChjc3RyaW5nX3RvX3RleHRfd2l0aF9sZW4o cmVzdWx0LmRhdGEsIHJlc3VsdC5sZW4pKTsKIH0KIAogLyoKQEAgLTY2NCwxMyArNjY0LDEz IEBAIERhdHVtCiByb3dfdG9fanNvbihQR19GVU5DVElPTl9BUkdTKQogewogCURhdHVtCQlh cnJheSA9IFBHX0dFVEFSR19EQVRVTSgwKTsKLQlTdHJpbmdJbmZvCXJlc3VsdDsKKwlTdHJp bmdJbmZvRGF0YSByZXN1bHQ7CiAKLQlyZXN1bHQgPSBtYWtlU3RyaW5nSW5mbygpOworCWlu aXRTdHJpbmdJbmZvKCZyZXN1bHQpOwogCi0JY29tcG9zaXRlX3RvX2pzb24oYXJyYXksIHJl c3VsdCwgZmFsc2UpOworCWNvbXBvc2l0ZV90b19qc29uKGFycmF5LCAmcmVzdWx0LCBmYWxz ZSk7CiAKLQlQR19SRVRVUk5fVEVYVF9QKGNzdHJpbmdfdG9fdGV4dF93aXRoX2xlbihyZXN1 bHQtPmRhdGEsIHJlc3VsdC0+bGVuKSk7CisJUEdfUkVUVVJOX1RFWFRfUChjc3RyaW5nX3Rv X3RleHRfd2l0aF9sZW4ocmVzdWx0LmRhdGEsIHJlc3VsdC5sZW4pKTsKIH0KIAogLyoKQEAg LTY4MSwxMyArNjgxLDEzIEBAIHJvd190b19qc29uX3ByZXR0eShQR19GVU5DVElPTl9BUkdT KQogewogCURhdHVtCQlhcnJheSA9IFBHX0dFVEFSR19EQVRVTSgwKTsKIAlib29sCQl1c2Vf bGluZV9mZWVkcyA9IFBHX0dFVEFSR19CT09MKDEpOwotCVN0cmluZ0luZm8JcmVzdWx0Owor CVN0cmluZ0luZm9EYXRhIHJlc3VsdDsKIAotCXJlc3VsdCA9IG1ha2VTdHJpbmdJbmZvKCk7 CisJaW5pdFN0cmluZ0luZm8oJnJlc3VsdCk7CiAKLQljb21wb3NpdGVfdG9fanNvbihhcnJh eSwgcmVzdWx0LCB1c2VfbGluZV9mZWVkcyk7CisJY29tcG9zaXRlX3RvX2pzb24oYXJyYXks ICZyZXN1bHQsIHVzZV9saW5lX2ZlZWRzKTsKIAotCVBHX1JFVFVSTl9URVhUX1AoY3N0cmlu Z190b190ZXh0X3dpdGhfbGVuKHJlc3VsdC0+ZGF0YSwgcmVzdWx0LT5sZW4pKTsKKwlQR19S RVRVUk5fVEVYVF9QKGNzdHJpbmdfdG9fdGV4dF93aXRoX2xlbihyZXN1bHQuZGF0YSwgcmVz dWx0LmxlbikpOwogfQogCiAvKgpAQCAtNzYzLDEyICs3NjMsMTMgQEAgdG9fanNvbihQR19G VU5DVElPTl9BUkdTKQogRGF0dW0KIGRhdHVtX3RvX2pzb24oRGF0dW0gdmFsLCBKc29uVHlw ZUNhdGVnb3J5IHRjYXRlZ29yeSwgT2lkIG91dGZ1bmNvaWQpCiB7Ci0JU3RyaW5nSW5mbwly ZXN1bHQgPSBtYWtlU3RyaW5nSW5mbygpOworCVN0cmluZ0luZm9EYXRhIHJlc3VsdDsKIAot CWRhdHVtX3RvX2pzb25faW50ZXJuYWwodmFsLCBmYWxzZSwgcmVzdWx0LCB0Y2F0ZWdvcnks IG91dGZ1bmNvaWQsCisJaW5pdFN0cmluZ0luZm8oJnJlc3VsdCk7CisJZGF0dW1fdG9fanNv bl9pbnRlcm5hbCh2YWwsIGZhbHNlLCAmcmVzdWx0LCB0Y2F0ZWdvcnksIG91dGZ1bmNvaWQs CiAJCQkJCQkgICBmYWxzZSk7CiAKLQlyZXR1cm4gUG9pbnRlckdldERhdHVtKGNzdHJpbmdf dG9fdGV4dF93aXRoX2xlbihyZXN1bHQtPmRhdGEsIHJlc3VsdC0+bGVuKSk7CisJcmV0dXJu IFBvaW50ZXJHZXREYXR1bShjc3RyaW5nX3RvX3RleHRfd2l0aF9sZW4ocmVzdWx0LmRhdGEs IHJlc3VsdC5sZW4pKTsKIH0KIAogLyoKQEAgLTEzNDcsMjUgKzEzNDgsMjUgQEAganNvbl9i dWlsZF9hcnJheV93b3JrZXIoaW50IG5hcmdzLCBjb25zdCBEYXR1bSAqYXJncywgY29uc3Qg Ym9vbCAqbnVsbHMsIGNvbnN0IE8KIHsKIAlpbnQJCQlpOwogCWNvbnN0IGNoYXIgKnNlcCA9 ICIiOwotCVN0cmluZ0luZm8JcmVzdWx0OworCVN0cmluZ0luZm9EYXRhIHJlc3VsdDsKIAot CXJlc3VsdCA9IG1ha2VTdHJpbmdJbmZvKCk7CisJaW5pdFN0cmluZ0luZm8oJnJlc3VsdCk7 CiAKLQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihyZXN1bHQsICdbJyk7CisJYXBwZW5kU3RyaW5n SW5mb0NoYXIoJnJlc3VsdCwgJ1snKTsKIAogCWZvciAoaSA9IDA7IGkgPCBuYXJnczsgaSsr KQogCXsKIAkJaWYgKGFic2VudF9vbl9udWxsICYmIG51bGxzW2ldKQogCQkJY29udGludWU7 CiAKLQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhyZXN1bHQsIHNlcCk7CisJCWFwcGVuZFN0 cmluZ0luZm9TdHJpbmcoJnJlc3VsdCwgc2VwKTsKIAkJc2VwID0gIiwgIjsKLQkJYWRkX2pz b24oYXJnc1tpXSwgbnVsbHNbaV0sIHJlc3VsdCwgdHlwZXNbaV0sIGZhbHNlKTsKKwkJYWRk X2pzb24oYXJnc1tpXSwgbnVsbHNbaV0sICZyZXN1bHQsIHR5cGVzW2ldLCBmYWxzZSk7CiAJ fQogCi0JYXBwZW5kU3RyaW5nSW5mb0NoYXIocmVzdWx0LCAnXScpOworCWFwcGVuZFN0cmlu Z0luZm9DaGFyKCZyZXN1bHQsICddJyk7CiAKLQlyZXR1cm4gUG9pbnRlckdldERhdHVtKGNz dHJpbmdfdG9fdGV4dF93aXRoX2xlbihyZXN1bHQtPmRhdGEsIHJlc3VsdC0+bGVuKSk7CisJ cmV0dXJuIFBvaW50ZXJHZXREYXR1bShjc3RyaW5nX3RvX3RleHRfd2l0aF9sZW4ocmVzdWx0 LmRhdGEsIHJlc3VsdC5sZW4pKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L3V0aWxzL2FkdC9qc29uYi5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb25iLmMKaW5k ZXggZGE5NGQ0MjRkNjEuLjkzOTljZGI0OTFhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91 dGlscy9hZHQvanNvbmIuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvanNvbmIuYwpA QCAtMTI1LDE1ICsxMjUsMTYgQEAganNvbmJfc2VuZChQR19GVU5DVElPTl9BUkdTKQogewog CUpzb25iCSAgICpqYiA9IFBHX0dFVEFSR19KU09OQl9QKDApOwogCVN0cmluZ0luZm9EYXRh IGJ1ZjsKLQlTdHJpbmdJbmZvCWp0ZXh0ID0gbWFrZVN0cmluZ0luZm8oKTsKKwlTdHJpbmdJ bmZvRGF0YSBqdGV4dDsKIAlpbnQJCQl2ZXJzaW9uID0gMTsKIAotCSh2b2lkKSBKc29uYlRv Q1N0cmluZyhqdGV4dCwgJmpiLT5yb290LCBWQVJTSVpFKGpiKSk7CisJaW5pdFN0cmluZ0lu Zm8oJmp0ZXh0KTsKKwkodm9pZCkgSnNvbmJUb0NTdHJpbmcoJmp0ZXh0LCAmamItPnJvb3Qs IFZBUlNJWkUoamIpKTsKIAogCXBxX2JlZ2ludHlwc2VuZCgmYnVmKTsKIAlwcV9zZW5kaW50 OCgmYnVmLCB2ZXJzaW9uKTsKLQlwcV9zZW5kdGV4dCgmYnVmLCBqdGV4dC0+ZGF0YSwganRl eHQtPmxlbik7Ci0JZGVzdHJveVN0cmluZ0luZm8oanRleHQpOworCXBxX3NlbmR0ZXh0KCZi dWYsIGp0ZXh0LmRhdGEsIGp0ZXh0Lmxlbik7CisJcGZyZWUoanRleHQuZGF0YSk7CiAKIAlQ R19SRVRVUk5fQllURUFfUChwcV9lbmR0eXBzZW5kKCZidWYpKTsKIH0KZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29uZnVuY3MuYyBiL3NyYy9iYWNrZW5kL3V0aWxz L2FkdC9qc29uZnVuY3MuYwppbmRleCA0MTg2Mjg3MmU4YS4uOTM2Y2Q5ZGNkOWEgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29uZnVuY3MuYworKysgYi9zcmMvYmFj a2VuZC91dGlscy9hZHQvanNvbmZ1bmNzLmMKQEAgLTQ2MDcsMTEgKzQ2MDcsMTIgQEAgRGF0 dW0KIGpzb25iX3ByZXR0eShQR19GVU5DVElPTl9BUkdTKQogewogCUpzb25iCSAgICpqYiA9 IFBHX0dFVEFSR19KU09OQl9QKDApOwotCVN0cmluZ0luZm8Jc3RyID0gbWFrZVN0cmluZ0lu Zm8oKTsKKwlTdHJpbmdJbmZvRGF0YSBzdHI7CiAKLQlKc29uYlRvQ1N0cmluZ0luZGVudChz dHIsICZqYi0+cm9vdCwgVkFSU0laRShqYikpOworCWluaXRTdHJpbmdJbmZvKCZzdHIpOwor CUpzb25iVG9DU3RyaW5nSW5kZW50KCZzdHIsICZqYi0+cm9vdCwgVkFSU0laRShqYikpOwog Ci0JUEdfUkVUVVJOX1RFWFRfUChjc3RyaW5nX3RvX3RleHRfd2l0aF9sZW4oc3RyLT5kYXRh LCBzdHItPmxlbikpOworCVBHX1JFVFVSTl9URVhUX1AoY3N0cmluZ190b190ZXh0X3dpdGhf bGVuKHN0ci5kYXRhLCBzdHIubGVuKSk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC91dGlscy9hZHQvbXVsdGlyYW5nZXR5cGVzLmMgYi9zcmMvYmFja2VuZC91dGlscy9h ZHQvbXVsdGlyYW5nZXR5cGVzLmMKaW5kZXggODQ3MzNkYzUwMTkuLjk1ZTk1Mzk1OTFlIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvbXVsdGlyYW5nZXR5cGVzLmMKKysr IGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L211bHRpcmFuZ2V0eXBlcy5jCkBAIC0zNzgsMTcg KzM3OCwxOCBAQCBtdWx0aXJhbmdlX3NlbmQoUEdfRlVOQ1RJT05fQVJHUykKIHsKIAlNdWx0 aXJhbmdlVHlwZSAqbXVsdGlyYW5nZSA9IFBHX0dFVEFSR19NVUxUSVJBTkdFX1AoMCk7CiAJ T2lkCQkJbWx0cm5ndHlwb2lkID0gTXVsdGlyYW5nZVR5cGVHZXRPaWQobXVsdGlyYW5nZSk7 Ci0JU3RyaW5nSW5mbwlidWYgPSBtYWtlU3RyaW5nSW5mbygpOworCVN0cmluZ0luZm9EYXRh IGJ1ZjsKIAlSYW5nZVR5cGUgKipyYW5nZXM7CiAJaW50MzIJCXJhbmdlX2NvdW50OwogCU11 bHRpcmFuZ2VJT0RhdGEgKmNhY2hlOwogCisJaW5pdFN0cmluZ0luZm8oJmJ1Zik7CiAJY2Fj aGUgPSBnZXRfbXVsdGlyYW5nZV9pb19kYXRhKGZjaW5mbywgbWx0cm5ndHlwb2lkLCBJT0Z1 bmNfc2VuZCk7CiAKIAkvKiBjb25zdHJ1Y3Qgb3V0cHV0ICovCi0JcHFfYmVnaW50eXBzZW5k KGJ1Zik7CisJcHFfYmVnaW50eXBzZW5kKCZidWYpOwogCi0JcHFfc2VuZGludDMyKGJ1Ziwg bXVsdGlyYW5nZS0+cmFuZ2VDb3VudCk7CisJcHFfc2VuZGludDMyKCZidWYsIG11bHRpcmFu Z2UtPnJhbmdlQ291bnQpOwogCiAJbXVsdGlyYW5nZV9kZXNlcmlhbGl6ZShjYWNoZS0+dHlw Y2FjaGUtPnJuZ3R5cGUsIG11bHRpcmFuZ2UsICZyYW5nZV9jb3VudCwgJnJhbmdlcyk7CiAJ Zm9yIChpbnQgaSA9IDA7IGkgPCByYW5nZV9jb3VudDsgaSsrKQpAQCAtMzk5LDExICs0MDAs MTEgQEAgbXVsdGlyYW5nZV9zZW5kKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCXJhbmdlID0gUmFu Z2VUeXBlUEdldERhdHVtKHJhbmdlc1tpXSk7CiAJCW91dHB1dGJ5dGVzID0gU2VuZEZ1bmN0 aW9uQ2FsbCgmY2FjaGUtPnR5cGlvcHJvYywgcmFuZ2UpOwogCi0JCXBxX3NlbmRpbnQzMihi dWYsIFZBUlNJWkUob3V0cHV0Ynl0ZXMpIC0gVkFSSERSU1opOwotCQlwcV9zZW5kYnl0ZXMo YnVmLCBWQVJEQVRBKG91dHB1dGJ5dGVzKSwgVkFSU0laRShvdXRwdXRieXRlcykgLSBWQVJI RFJTWik7CisJCXBxX3NlbmRpbnQzMigmYnVmLCBWQVJTSVpFKG91dHB1dGJ5dGVzKSAtIFZB UkhEUlNaKTsKKwkJcHFfc2VuZGJ5dGVzKCZidWYsIFZBUkRBVEEob3V0cHV0Ynl0ZXMpLCBW QVJTSVpFKG91dHB1dGJ5dGVzKSAtIFZBUkhEUlNaKTsKIAl9CiAKLQlQR19SRVRVUk5fQllU RUFfUChwcV9lbmR0eXBzZW5kKGJ1ZikpOworCVBHX1JFVFVSTl9CWVRFQV9QKHBxX2VuZHR5 cHNlbmQoJmJ1ZikpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMv YWR0L3JhbmdldHlwZXMuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9yYW5nZXR5cGVzLmMK aW5kZXggMGIyYWQ4YjA5NzUuLjBlNDUxZTQ2OTNiIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC91dGlscy9hZHQvcmFuZ2V0eXBlcy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9y YW5nZXR5cGVzLmMKQEAgLTI2NCw3ICsyNjQsNyBAQCBEYXR1bQogcmFuZ2Vfc2VuZChQR19G VU5DVElPTl9BUkdTKQogewogCVJhbmdlVHlwZSAgKnJhbmdlID0gUEdfR0VUQVJHX1JBTkdF X1AoMCk7Ci0JU3RyaW5nSW5mbwlidWYgPSBtYWtlU3RyaW5nSW5mbygpOworCVN0cmluZ0lu Zm9EYXRhIGJ1ZjsKIAlSYW5nZUlPRGF0YSAqY2FjaGU7CiAJY2hhcgkJZmxhZ3M7CiAJUmFu Z2VCb3VuZAlsb3dlcjsKQEAgLTI3Myw2ICsyNzMsOCBAQCByYW5nZV9zZW5kKFBHX0ZVTkNU SU9OX0FSR1MpCiAKIAljaGVja19zdGFja19kZXB0aCgpOwkJLyogcmVjdXJzZXMgd2hlbiBz dWJ0eXBlIGlzIGEgcmFuZ2UgdHlwZSAqLwogCisJaW5pdFN0cmluZ0luZm8oJmJ1Zik7CisK IAljYWNoZSA9IGdldF9yYW5nZV9pb19kYXRhKGZjaW5mbywgUmFuZ2VUeXBlR2V0T2lkKHJh bmdlKSwgSU9GdW5jX3NlbmQpOwogCiAJLyogZGVzZXJpYWxpemUgKi8KQEAgLTI4MCw5ICsy ODIsOSBAQCByYW5nZV9zZW5kKFBHX0ZVTkNUSU9OX0FSR1MpCiAJZmxhZ3MgPSByYW5nZV9n ZXRfZmxhZ3MocmFuZ2UpOwogCiAJLyogY29uc3RydWN0IG91dHB1dCAqLwotCXBxX2JlZ2lu dHlwc2VuZChidWYpOworCXBxX2JlZ2ludHlwc2VuZCgmYnVmKTsKIAotCXBxX3NlbmRieXRl KGJ1ZiwgZmxhZ3MpOworCXBxX3NlbmRieXRlKCZidWYsIGZsYWdzKTsKIAogCWlmIChSQU5H RV9IQVNfTEJPVU5EKGZsYWdzKSkKIAl7CkBAIC0yOTAsOCArMjkyLDggQEAgcmFuZ2Vfc2Vu ZChQR19GVU5DVElPTl9BUkdTKQogCQl1aW50MzIJCWJvdW5kX2xlbiA9IFZBUlNJWkUoYm91 bmQpIC0gVkFSSERSU1o7CiAJCWNoYXIJICAgKmJvdW5kX2RhdGEgPSBWQVJEQVRBKGJvdW5k KTsKIAotCQlwcV9zZW5kaW50MzIoYnVmLCBib3VuZF9sZW4pOwotCQlwcV9zZW5kYnl0ZXMo YnVmLCBib3VuZF9kYXRhLCBib3VuZF9sZW4pOworCQlwcV9zZW5kaW50MzIoJmJ1ZiwgYm91 bmRfbGVuKTsKKwkJcHFfc2VuZGJ5dGVzKCZidWYsIGJvdW5kX2RhdGEsIGJvdW5kX2xlbik7 CiAJfQogCiAJaWYgKFJBTkdFX0hBU19VQk9VTkQoZmxhZ3MpKQpAQCAtMzAwLDExICszMDIs MTEgQEAgcmFuZ2Vfc2VuZChQR19GVU5DVElPTl9BUkdTKQogCQl1aW50MzIJCWJvdW5kX2xl biA9IFZBUlNJWkUoYm91bmQpIC0gVkFSSERSU1o7CiAJCWNoYXIJICAgKmJvdW5kX2RhdGEg PSBWQVJEQVRBKGJvdW5kKTsKIAotCQlwcV9zZW5kaW50MzIoYnVmLCBib3VuZF9sZW4pOwot CQlwcV9zZW5kYnl0ZXMoYnVmLCBib3VuZF9kYXRhLCBib3VuZF9sZW4pOworCQlwcV9zZW5k aW50MzIoJmJ1ZiwgYm91bmRfbGVuKTsKKwkJcHFfc2VuZGJ5dGVzKCZidWYsIGJvdW5kX2Rh dGEsIGJvdW5kX2xlbik7CiAJfQogCi0JUEdfUkVUVVJOX0JZVEVBX1AocHFfZW5kdHlwc2Vu ZChidWYpKTsKKwlQR19SRVRVUk5fQllURUFfUChwcV9lbmR0eXBzZW5kKCZidWYpKTsKIH0K IAogLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC94bWwuYyBiL3NyYy9i YWNrZW5kL3V0aWxzL2FkdC94bWwuYwppbmRleCAzNWM5MTU1NzNhMS4uNDFlNzc1NTcwZWMg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC94bWwuYworKysgYi9zcmMvYmFj a2VuZC91dGlscy9hZHQveG1sLmMKQEAgLTIxMzMsNyArMjEzMyw3IEBAIHhtbF9lcnJvckhh bmRsZXIodm9pZCAqZGF0YSwgUGdYbWxFcnJvclB0ciBlcnJvcikKIAkJCQkJCSAgIG5vZGUt PnR5cGUgPT0gWE1MX0VMRU1FTlRfTk9ERSkgPyBub2RlLT5uYW1lIDogTlVMTDsKIAlpbnQJ CQlkb21haW4gPSBlcnJvci0+ZG9tYWluOwogCWludAkJCWxldmVsID0gZXJyb3ItPmxldmVs OwotCVN0cmluZ0luZm8JZXJyb3JCdWY7CisJU3RyaW5nSW5mb0RhdGEgZXJyb3JCdWY7CiAK IAkvKgogCSAqIERlZmVuZCBhZ2FpbnN0IHNvbWVvbmUgcGFzc2luZyB1cyBhIGJvZ3VzIGNv bnRleHQgc3RydWN0LgpAQCAtMjIxMCwxNiArMjIxMCwxNiBAQCB4bWxfZXJyb3JIYW5kbGVy KHZvaWQgKmRhdGEsIFBnWG1sRXJyb3JQdHIgZXJyb3IpCiAJfQogCiAJLyogUHJlcGFyZSBl cnJvciBtZXNzYWdlIGluIGVycm9yQnVmICovCi0JZXJyb3JCdWYgPSBtYWtlU3RyaW5nSW5m bygpOworCWluaXRTdHJpbmdJbmZvKCZlcnJvckJ1Zik7CiAKIAlpZiAoZXJyb3ItPmxpbmUg PiAwKQotCQlhcHBlbmRTdHJpbmdJbmZvKGVycm9yQnVmLCAibGluZSAlZDogIiwgZXJyb3It PmxpbmUpOworCQlhcHBlbmRTdHJpbmdJbmZvKCZlcnJvckJ1ZiwgImxpbmUgJWQ6ICIsIGVy cm9yLT5saW5lKTsKIAlpZiAobmFtZSAhPSBOVUxMKQotCQlhcHBlbmRTdHJpbmdJbmZvKGVy cm9yQnVmLCAiZWxlbWVudCAlczogIiwgbmFtZSk7CisJCWFwcGVuZFN0cmluZ0luZm8oJmVy cm9yQnVmLCAiZWxlbWVudCAlczogIiwgbmFtZSk7CiAJaWYgKGVycm9yLT5tZXNzYWdlICE9 IE5VTEwpCi0JCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoZXJyb3JCdWYsIGVycm9yLT5tZXNz YWdlKTsKKwkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmZXJyb3JCdWYsIGVycm9yLT5tZXNz YWdlKTsKIAllbHNlCi0JCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoZXJyb3JCdWYsICIobm8g bWVzc2FnZSBwcm92aWRlZCkiKTsKKwkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmZXJyb3JC dWYsICIobm8gbWVzc2FnZSBwcm92aWRlZCkiKTsKIAogCS8qCiAJICogQXBwZW5kIGNvbnRl eHQgaW5mb3JtYXRpb24gdG8gZXJyb3JCdWYuCkBAIC0yMjM3LDExICsyMjM3LDExIEBAIHht bF9lcnJvckhhbmRsZXIodm9pZCAqZGF0YSwgUGdYbWxFcnJvclB0ciBlcnJvcikKIAkJeG1s R2VuZXJpY0Vycm9yRnVuYyBlcnJGdW5jU2F2ZWQgPSB4bWxHZW5lcmljRXJyb3I7CiAJCXZv aWQJICAgKmVyckN0eFNhdmVkID0geG1sR2VuZXJpY0Vycm9yQ29udGV4dDsKIAotCQl4bWxT ZXRHZW5lcmljRXJyb3JGdW5jKGVycm9yQnVmLAorCQl4bWxTZXRHZW5lcmljRXJyb3JGdW5j KCZlcnJvckJ1ZiwKIAkJCQkJCQkgICAoeG1sR2VuZXJpY0Vycm9yRnVuYykgYXBwZW5kU3Ry aW5nSW5mbyk7CiAKIAkJLyogQWRkIGNvbnRleHQgaW5mb3JtYXRpb24gdG8gZXJyb3JCdWYg Ki8KLQkJYXBwZW5kU3RyaW5nSW5mb0xpbmVTZXBhcmF0b3IoZXJyb3JCdWYpOworCQlhcHBl bmRTdHJpbmdJbmZvTGluZVNlcGFyYXRvcigmZXJyb3JCdWYpOwogCiAJCXhtbFBhcnNlclBy aW50RmlsZUNvbnRleHQoaW5wdXQpOwogCkBAIC0yMjUwLDcgKzIyNTAsNyBAQCB4bWxfZXJy b3JIYW5kbGVyKHZvaWQgKmRhdGEsIFBnWG1sRXJyb3JQdHIgZXJyb3IpCiAJfQogCiAJLyog R2V0IHJpZCBvZiBhbnkgdHJhaWxpbmcgbmV3bGluZXMgaW4gZXJyb3JCdWYgKi8KLQljaG9w U3RyaW5nSW5mb05ld2xpbmVzKGVycm9yQnVmKTsKKwljaG9wU3RyaW5nSW5mb05ld2xpbmVz KCZlcnJvckJ1Zik7CiAKIAkvKgogCSAqIExlZ2FjeSBlcnJvciBoYW5kbGluZyBtb2RlLiAg ZXJyX29jY3VycmVkIGlzIG5ldmVyIHNldCwgd2UganVzdCBhZGQgdGhlCkBAIC0yMjYzLDEw ICsyMjYzLDEwIEBAIHhtbF9lcnJvckhhbmRsZXIodm9pZCAqZGF0YSwgUGdYbWxFcnJvclB0 ciBlcnJvcikKIAlpZiAoeG1sZXJyY3h0LT5zdHJpY3RuZXNzID09IFBHX1hNTF9TVFJJQ1RO RVNTX0xFR0FDWSkKIAl7CiAJCWFwcGVuZFN0cmluZ0luZm9MaW5lU2VwYXJhdG9yKCZ4bWxl cnJjeHQtPmVycl9idWYpOwotCQlhcHBlbmRCaW5hcnlTdHJpbmdJbmZvKCZ4bWxlcnJjeHQt PmVycl9idWYsIGVycm9yQnVmLT5kYXRhLAotCQkJCQkJCSAgIGVycm9yQnVmLT5sZW4pOwor CQlhcHBlbmRCaW5hcnlTdHJpbmdJbmZvKCZ4bWxlcnJjeHQtPmVycl9idWYsIGVycm9yQnVm LmRhdGEsCisJCQkJCQkJICAgZXJyb3JCdWYubGVuKTsKIAotCQlkZXN0cm95U3RyaW5nSW5m byhlcnJvckJ1Zik7CisJCXBmcmVlKGVycm9yQnVmLmRhdGEpOwogCQlyZXR1cm47CiAJfQog CkBAIC0yMjgxLDIzICsyMjgxLDIzIEBAIHhtbF9lcnJvckhhbmRsZXIodm9pZCAqZGF0YSwg UGdYbWxFcnJvclB0ciBlcnJvcikKIAlpZiAobGV2ZWwgPj0gWE1MX0VSUl9FUlJPUikKIAl7 CiAJCWFwcGVuZFN0cmluZ0luZm9MaW5lU2VwYXJhdG9yKCZ4bWxlcnJjeHQtPmVycl9idWYp OwotCQlhcHBlbmRCaW5hcnlTdHJpbmdJbmZvKCZ4bWxlcnJjeHQtPmVycl9idWYsIGVycm9y QnVmLT5kYXRhLAotCQkJCQkJCSAgIGVycm9yQnVmLT5sZW4pOworCQlhcHBlbmRCaW5hcnlT dHJpbmdJbmZvKCZ4bWxlcnJjeHQtPmVycl9idWYsIGVycm9yQnVmLmRhdGEsCisJCQkJCQkJ ICAgZXJyb3JCdWYubGVuKTsKIAogCQl4bWxlcnJjeHQtPmVycl9vY2N1cnJlZCA9IHRydWU7 CiAJfQogCWVsc2UgaWYgKGxldmVsID49IFhNTF9FUlJfV0FSTklORykKIAl7CiAJCWVyZXBv cnQoV0FSTklORywKLQkJCQkoZXJybXNnX2ludGVybmFsKCIlcyIsIGVycm9yQnVmLT5kYXRh KSkpOworCQkJCShlcnJtc2dfaW50ZXJuYWwoIiVzIiwgZXJyb3JCdWYuZGF0YSkpKTsKIAl9 CiAJZWxzZQogCXsKIAkJZXJlcG9ydChOT1RJQ0UsCi0JCQkJKGVycm1zZ19pbnRlcm5hbCgi JXMiLCBlcnJvckJ1Zi0+ZGF0YSkpKTsKKwkJCQkoZXJybXNnX2ludGVybmFsKCIlcyIsIGVy cm9yQnVmLmRhdGEpKSk7CiAJfQogCi0JZGVzdHJveVN0cmluZ0luZm8oZXJyb3JCdWYpOwor CXBmcmVlKGVycm9yQnVmLmRhdGEpOwogfQogCiAKLS0gCjIuNDMuMAoK --------------BLIin0ANOC7pJZD51F0Wh4AO--