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 1vFoyP-001bMk-9t for pgsql-hackers@arkaria.postgresql.org; Mon, 03 Nov 2025 07:27:28 +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 1vFoyO-000Qy8-0b for pgsql-hackers@arkaria.postgresql.org; Mon, 03 Nov 2025 07:27:27 +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 1vFoyN-000Qxz-Ah for pgsql-hackers@lists.postgresql.org; Mon, 03 Nov 2025 07:27:26 +0000 Received: from mail-lf1-x136.google.com ([2a00:1450:4864:20::136]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vFoyJ-005ApJ-00 for pgsql-hackers@lists.postgresql.org; Mon, 03 Nov 2025 07:27:25 +0000 Received: by mail-lf1-x136.google.com with SMTP id 2adb3069b0e04-57bd04f2e84so4931820e87.1 for ; Sun, 02 Nov 2025 23:27:22 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1762154840; x=1762759640; darn=lists.postgresql.org; h=subject:from:content-language:to:user-agent:mime-version:date :message-id:from:to:cc:subject:date:message-id:reply-to; bh=BG1xgOjQ/Gv688FNkEJgmwZQ7ztAhumXFp+W589rtxM=; b=irIkZOghDcTf47em2HZu6ehrpnWngUURo9t3dogzYeDUxYpnONXxwf6w9so5mkAfnF /98BfYR0zuUWr4HEGcZrc1Wett/jfmztN7WT/JxCWXtEDkZWM0XVNXByrBnV2izCCW8g OpPt5Mch6MC0aUqhsaNKdDmVR++5v8nX+LidElb4U7tZZjOS4ELjN8yo688A3l5jjJrQ qKk+Vaj2LZJnO9g+3ygHmraNmFw84OZOAhUbA1qIAw42K9gQxjOu2Rdpe9lS55Qjd2nr mR8ZjRhOOULyNsvxbtVC6GAKl3IkfWo/G988ue1PtK+9SJ/O5PZDTgaQn6B2KgWvcsF6 bkcg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1762154840; x=1762759640; h=subject:from:content-language:to:user-agent:mime-version:date :message-id:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=BG1xgOjQ/Gv688FNkEJgmwZQ7ztAhumXFp+W589rtxM=; b=tZIsqXLu7stjVTzZBhN2X2LqZnVFgfHEZGepD/OOppEhLFyQFmQ/zQZ135vsXN7IZD GygaYL3OPsvN1OEHmu1YowPCOgWVQenq6rZKHY2p+g3nbuBSmsO+7v4TutvGT1DFsiHf Yo8x6HkyCenQQaos78bKkiCxgm35KG0DMi9Qn55I8p0H1Pit6xYAZ1QCLpwLJ7/cRhXI iIZBUcnFZ0OaRuc9GDN2Ii6lXnEZfuMSKqYAvkeponWI/bUUu5N7qOv8h/Zyu3IrWb+j q5wfmY+fWG3Uhm53z392eANOEhXLcvjdaWA6njl0GBANWV4p4PyWEXaqo7mvYCNSPZT5 Vclg== X-Gm-Message-State: AOJu0YzvJ2e9qR0z/PiaX9PyXSZjDamTt+FMbogNN8qdYBQ1i1NjRwLH Fz3Gff0DdzC+LtwFmrzMDoh5Z9LvfOmNGYgcPMb+8lAWAb57/gBt1u9R2U/dnA== X-Gm-Gg: ASbGncvVCXWhdo9Gqyzvh+xoZsOIE4BPRiya05Ns+OcrM5phT06Nv8sG6wk+lGiBwck 6ShcY5WAYCIRjFXbk0O/bsqvRYNXDymNmCTsA5fe1eeIx/soxokYt0o+8KGsKW2Z6KCqNpNMzAH kjslGVB5hDrhyAM9qWVyqrmCaq6mRaY7VnXuWXqSBT8ju/E2lOhDAvM31mf5wFbBLz/wc6FFNLk N6bMszNCE3bKHVROSikSry3iU6dNLL/MrFZbAHk/aW7OSUn9qIZJakU7PFesNKKAiQWMs0RAt0Y uZNh7lQ8xKXvgkuT0/49pUgvu35ipvmdFCTo67D3Vs0TOO0ekGGO4nZSbip/KXGlic15UGOK45A VBulTkF7HUyG36Povdv94JibEGusosGnflD6di4VKlUBO92FNmpBIGlLMlbm1vhIhx9x1C4jYuU V+x+5OpgqsRj2L4uf6hK8zUPVIhjmHBMMrH4j8E7ufONacsw+vrOA= X-Google-Smtp-Source: AGHT+IHnlpfMHbgZYIyUke2Ib38Iz7Ea50Q2a394nbYuWL5IoVpInKL/14bH+ui44Q11t0NtUefMdA== X-Received: by 2002:a05:6512:6ca:b0:571:8fad:ecee with SMTP id 2adb3069b0e04-5941d50d172mr3355963e87.21.1762154839263; Sun, 02 Nov 2025 23:27:19 -0800 (PST) Received: from ?IPV6:2a02:aa1:114a:fa1c:8611:cdab:fc38:6124? ([2a02:aa1:114a:fa1c:8611:cdab:fc38:6124]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-5942b9d2d75sm938998e87.4.2025.11.02.23.27.18 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sun, 02 Nov 2025 23:27:18 -0800 (PST) Content-Type: multipart/mixed; boundary="------------6abY820HGcb9Qu01rO81MC50" Message-ID: <4379aac8-26f1-42f2-a356-ff0e886228d3@gmail.com> Date: Mon, 3 Nov 2025 08:27:12 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird To: pgsql-hackers@lists.postgresql.org Content-Language: en-US From: Mats Kindahl Subject: Use stack-allocated StringInfoData 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. --------------6abY820HGcb9Qu01rO81MC50 Content-Type: multipart/alternative; boundary="------------sHf0Qh37iDXeNd06DTtahyRN" --------------sHf0Qh37iDXeNd06DTtahyRN Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Hi all, While working on other things I noted that we have a lot of cases where a StringInfo instance is allocated dynamically even when it is either thrown away or destroyed at the end, which seems unnecessary, that is, instead of using:        StringInfo info = makeStringInfo();        ...        appendStringInfo(info, ...);        ...        return info->data; We can use        StringInfoData info;        initStringInfo(&info);        ...        appendStringInfo(&info, ...);        ...        return info.data; It was corrected in an earlier commit, but that seems to have been removed so we still have a lot of these cases. I created a semantic patch to capture most of these cases, which is present in [1], but this is a slightly modified version that might be interesting to include regardless of other changes. The patch is applied and one case that couldn't be matched is manually fixed. [1]: https://www.postgresql.org/message-id/8895cba9-48cf-40fe-9c47-9b43ec6b2ab3%40gmail.com Best wishes, Mats Kindahl --------------sHf0Qh37iDXeNd06DTtahyRN Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: 8bit

Hi all,

While working on other things I noted that we have a lot of cases where a StringInfo instance is allocated dynamically even when it is either thrown away or destroyed at the end, which seems unnecessary, that is, instead of using:

       StringInfo info = makeStringInfo();
       ...
       appendStringInfo(info, ...);
       ...
       return info->data;

We can use

       StringInfoData info;
       initStringInfo(&info);
       ...
       appendStringInfo(&info, ...);
       ...
       return info.data;

It was corrected in an earlier commit, but that seems to have been removed so we still have a lot of these cases.

I created a semantic patch to capture most of these cases, which is present in [1], but this is a slightly modified version that might be interesting to include regardless of other changes. The patch is applied and one case that couldn't be matched is manually fixed.

[1]: https://www.postgresql.org/message-id/8895cba9-48cf-40fe-9c47-9b43ec6b2ab3%40gmail.com

Best wishes,
Mats Kindahl

--------------sHf0Qh37iDXeNd06DTtahyRN-- --------------6abY820HGcb9Qu01rO81MC50 Content-Type: text/x-patch; charset=UTF-8; name="0001-Use-stack-allocated-StringInfoData.v1.patch" Content-Disposition: attachment; filename="0001-Use-stack-allocated-StringInfoData.v1.patch" Content-Transfer-Encoding: base64 RnJvbSA3OTY3ZGQwNDJhZGE5NTRkYzU3ZGRmZjczNGY0MTM5Yzk3Y2Q2ODAyIE1vbiBTZXAg 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 CnJlcGxhY2VtZW50IGF0IGFsbCBhbmQgcHJpbnRzIGFuIGVycm9yLgotLS0KIGNvY2NpL3Vz ZV9zdHJpbmdpbmZvZGF0YS5jb2NjaSAgICAgICAgICB8IDE2OCArKysrKysrKysrKysrKysr KysrKysrKysKIGNvbnRyaWIvcG9zdGdyZXNfZmR3L3Bvc3RncmVzX2Zkdy5jICAgICB8ICAx NCArLQogY29udHJpYi90Y24vdGNuLmMgICAgICAgICAgICAgICAgICAgICAgIHwgIDI3ICsr LS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2diYWNrdXAuYyB8ICAzMiArKy0t LQogc3JjL2JhY2tlbmQvYmFja3VwL2Jhc2ViYWNrdXAuYyAgICAgICAgIHwgIDExICstCiBz cmMvYmFja2VuZC9jb21tYW5kcy9zdWJzY3JpcHRpb25jbWRzLmMgfCAgNjggKysrKystLS0t LQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb24uYyAgICAgICAgICAgIHwgIDUzICsrKyst LS0tCiBzcmMvYmFja2VuZC91dGlscy9hZHQvanNvbmIuYyAgICAgICAgICAgfCAgIDggKy0K IHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29uZnVuY3MuYyAgICAgICB8ICAgNyArLQogc3Jj L2JhY2tlbmQvdXRpbHMvYWR0L211bHRpcmFuZ2V0eXBlcy5jIHwgIDE0ICstCiBzcmMvYmFj a2VuZC91dGlscy9hZHQvcmFuZ2V0eXBlcy5jICAgICAgfCAgMTcgKy0tCiBzcmMvYmFja2Vu ZC91dGlscy9hZHQveG1sLmMgICAgICAgICAgICAgfCAgMzMgKysrLS0KIDEyIGZpbGVzIGNo YW5nZWQsIDMyMCBpbnNlcnRpb25zKCspLCAxMzIgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9k ZSAxMDA2NDQgY29jY2kvdXNlX3N0cmluZ2luZm9kYXRhLmNvY2NpCgpkaWZmIC0tZ2l0IGEv Y29jY2kvdXNlX3N0cmluZ2luZm9kYXRhLmNvY2NpIGIvY29jY2kvdXNlX3N0cmluZ2luZm9k YXRhLmNvY2NpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi43M2Uz NWY0ZWM4OQotLS0gL2Rldi9udWxsCisrKyBiL2NvY2NpL3VzZV9zdHJpbmdpbmZvZGF0YS5j b2NjaQpAQCAtMCwwICsxLDE2OCBAQAorLy8gUmVwbGFjZSB1c2VzIG9mIFN0cmluZ0luZm8g d2l0aCBTdHJpbmdJbmZvRGF0YSB3aGVyZSB0aGUgaW5mbyBpcworLy8gZHluYW1pY2FsbHkg YWxsb2NhdGVkIGJ1dCAob3B0aW9uYWxseSkgZnJlZWQgYXQgdGhlIGVuZCBvZiB0aGUKKy8v IGJsb2NrLiBUaGlzIHdpbGwgYXZvaWQgb25lIGR5bmFtaWMgYWxsb2NhdGlvbiB0aGF0IG90 aGVyd2lzZSBoYXZlCisvLyB0byBiZSBkZWFsdCB3aXRoLgorLy8KKy8vIEZvciBleGFtcGxl LCB0aGlzIGNvZGU6CisvLworLy8gICAgU3RyaW5nSW5mbyBpbmZvID0gbWFrZVN0cmluZ0lu Zm8oKTsKKy8vICAgIC4uLgorLy8gICAgYXBwZW5kU3RyaW5nSW5mbyhpbmZvLCAuLi4pOwor Ly8gICAgLi4uCisvLyAgICByZXR1cm4gZG9fc3R1ZmYoLi4uLCBpbmZvLT5kYXRhLCAuLi4p OworLy8KKy8vIENhbiBiZSByZXBsYWNlZCB3aXRoOgorLy8KKy8vICAgIFN0cmluZ0luZm9E YXRhIGluZm87CisvLyAgICBpbml0U3RyaW5nSW5mbygmaW5mbyk7CisvLyAgICAuLi4KKy8v ICAgIGFwcGVuZFN0cmluZ0luZm8oJmluZm8sIC4uLik7CisvLyAgICAuLi4KKy8vICAgIHJl dHVybiBkb19zdHVmZiguLi4sIGluZm8uZGF0YSwgLi4uKTsKKwordmlydHVhbCByZXBvcnQK K3ZpcnR1YWwgY29udGV4dAordmlydHVhbCBwYXRjaAorCisvLyBUaGlzIHJ1bGUgY2FwdHVy ZXMgdGhlIHBvc2l0aW9uIG9mIHRoZSBtYWtlU3RyaW5nSW5mbygpIGFuZCBiYXNlcworLy8g YWxsIGNoYW5nZXMgYXJvdW5kIHRoYXQuIEl0IG1hdGNoZXMgdGhlIGNhc2UgdGhhdCB3ZSBz aG91bGQgKm5vdCoKKy8vIHJlcGxhY2UsIHRoYXQgaXMsIHRob3NlIHRoYXQgZWl0aGVyICgx KSByZXR1cm4gdGhlIHBvaW50ZXIgb3IgKDIpCisvLyBhc3NpZ24gdGhlIHBvaW50ZXIgdG8g YSB2YXJpYWJsZSBvciAoMykgYXNzaWduIGEgdmFyaWFibGUgdG8gdGhlCisvLyBwb2ludGVy LgorLy8KKy8vIFRoZSBmaXJzdCB0d28gY2FzZXMgYXJlIG1hdGNoZWQgYmVjYXVzZSB0aGV5 IGNvdWxkIHBvdGVudGlhbGx5IGxlYWsKKy8vIHRoZSBwb2ludGVyIG91dHNpZGUgdGhlIGZ1 bmN0aW9uLCBmb3Igc29tZSBleHByZXNzaW9ucywgYnV0IHRoZQorLy8gbGFzdCBvbmUgYXZv aWRzIGFzc2lnbmluZyBhIFN0cmluZ0luZm8gcG9pbnRlciBvZiB1bmtub3duIHNvdXJjZSB0 bworLy8gdGhlIG5ldyBTdHJpbmdJbmZvRGF0YSB2YXJpYWJsZS4KKy8vCisvLyBJZiB3ZSBy ZXBsYWNlIHRoaXMsIHRoZSByZXN1bHRpbmcgY2hhbmdlIHdpbGwgcmVzdWx0IGluIGEgdmFs dWUKKy8vIGNvcHkgb2YgYSBzdHJ1Y3R1cmUsIHdoaWNoIG1pZ2h0IG5vdCBiZSBvcHRpbWFs LCBzbyB3ZSBkbyBub3QgZG8gYQorLy8gcmVwbGFjZW1lbnQuCitAaWQxIGV4aXN0c0AKK3R5 cGVkZWYgU3RyaW5nSW5mbzsKK2xvY2FsIGlkZXhwcmVzc2lvbiBTdHJpbmdJbmZvIGluZm87 CitpZGVudGlmaWVyIGY7Citwb3NpdGlvbiBwb3M7CitleHByZXNzaW9uIEU7CitpZGVudGlm aWVyIFBHX1JFVFVSTiA9fiAiUEdfUkVUVVJOX1tBLVowLTlfXSsiOworQEAKKyAgaW5mb0Bw b3MgPSBtYWtlU3RyaW5nSW5mbygpCisgIC4uLgorKAorICByZXR1cm4gaW5mbzsKK3wKKyAg cmV0dXJuIGYoLi4uLCBpbmZvLCAuLi4pOworfAorICBQR19SRVRVUk4oaW5mbyk7Cit8Cisg IGluZm8gPSBFCit8CisgIEUgPSBpbmZvCispCisKK0ByMSBkZXBlbmRzIG9uICFwYXRjaCBk aXNhYmxlIGRlY2xfaW5pdCBleGlzdHNACitpZGVudGlmaWVyIGluZm8sIGZsZDsKK3Bvc2l0 aW9uIGRwb3MsIHBvcyAhPSBpZDEucG9zOworQEAKKygKKyogU3RyaW5nSW5mb0BkcG9zIGlu Zm87CisgIC4uLgorKiBpbmZvQHBvcyA9IG1ha2VTdHJpbmdJbmZvKCk7Cit8CisqIFN0cmlu Z0luZm9AZHBvcyBpbmZvQHBvcyA9IG1ha2VTdHJpbmdJbmZvKCk7CispCis8Li4uCisoCisq IFwocGZyZWVcfGRlc3Ryb3lTdHJpbmdJbmZvXCkoaW5mbyk7Cit8CisqIGluZm8tPmZsZAor fAorKiAqaW5mbworfAorKiBpbmZvCispCisuLi4+CisKK0BzY3JpcHQ6cHl0aG9uIGRlcGVu ZHMgb24gcmVwb3J0QAoraW5mbyA8PCByMS5pbmZvOworZHBvcyA8PCByMS5kcG9zOworQEAK K2NvY2NpbGliLnJlcG9ydC5wcmludF9yZXBvcnQoZHBvc1swXSwgZiJWYXJpYWJsZSAne2lu Zm99JyBvZiB0eXBlIFN0cmluZ0luZm8gY2FuIGJlIGRlZmluZWQgdXNpbmcgU3RyaW5nSW5m b0RhdGEiKQorCitAZGVwZW5kcyBvbiBwYXRjaCBkaXNhYmxlIGRlY2xfaW5pdCBleGlzdHNA CitpZGVudGlmaWVyIGluZm8sIGZsZDsKK3Bvc2l0aW9uIHBvcyAhPSBpZDEucG9zOworQEAK Ky0gU3RyaW5nSW5mbyBpbmZvOworKyBTdHJpbmdJbmZvRGF0YSBpbmZvOworICAuLi4KKy0g aW5mb0Bwb3MgPSBtYWtlU3RyaW5nSW5mbygpOworKyBpbml0U3RyaW5nSW5mbygmaW5mbyk7 Cis8Li4uCisoCistIFwoZGVzdHJveVN0cmluZ0luZm9cfHBmcmVlXCkoaW5mbyk7Cit8Cisg IGluZm8KKy0gLT5mbGQKKysgLmZsZAorfAorLSAqaW5mbworKyBpbmZvCit8CistIGluZm8K KysgJmluZm8KKykKKy4uLj4KKworLy8gSGVyZSB3ZSByZXBlYXQgdGhlIG1hdGNoaW5nIG9m IHRoZSAiYmFkIGNhc2UiIHNpbmNlIHdlIGNhbm5vdAorLy8gaW5oZXJpdCBvdmVyIG1vZGlm aWNhdGlvbnMKK0BpZDIgZXhpc3RzQAordHlwZWRlZiBTdHJpbmdJbmZvOworbG9jYWwgaWRl eHByZXNzaW9uIFN0cmluZ0luZm8gaW5mbzsKK3Bvc2l0aW9uIHBvczsKK2V4cHJlc3Npb24g RTsKK2lkZW50aWZpZXIgZjsKK2lkZW50aWZpZXIgUEdfUkVUVVJOID1+ICJQR19SRVRVUk5f W0EtWjAtOV9dKyI7CitAQAorICBpbmZvQHBvcyA9IG1ha2VTdHJpbmdJbmZvKCkKKyAgLi4u CisoCisgIHJldHVybiBpbmZvOworfAorICByZXR1cm4gZiguLi4sIGluZm8sIC4uLik7Cit8 CisgIFBHX1JFVFVSTihpbmZvKTsKK3wKKyAgaW5mbyA9IEUKK3wKKyAgRSA9IGluZm8KKykK KworQGRlcGVuZHMgb24gcGF0Y2ggZXhpc3RzQAoraWRlbnRpZmllciBpbmZvLCBmbGQ7Citw b3NpdGlvbiBwb3MgIT0gaWQyLnBvczsKK3N0YXRlbWVudCBTLCBTMTsKK0BACistIFN0cmlu Z0luZm8gaW5mb0Bwb3MgPSBtYWtlU3RyaW5nSW5mbygpOworKyBTdHJpbmdJbmZvRGF0YSBp bmZvOworLi4uIHdoZW4gIT0gUworKAorPC4uLgorKAorLSBcKGRlc3Ryb3lTdHJpbmdJbmZv XHxwZnJlZVwpKGluZm8pOworfAorICBpbmZvCistIC0+ZmxkCisrIC5mbGQKK3wKKy0gKmlu Zm8KKysgaW5mbworfAorLSBpbmZvCisrICZpbmZvCispCisuLi4+CismCisrIGluaXRTdHJp bmdJbmZvKCZpbmZvKTsKKyAgUzEKKykKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcG9zdGdyZXNf ZmR3L3Bvc3RncmVzX2Zkdy5jIGIvY29udHJpYi9wb3N0Z3Jlc19mZHcvcG9zdGdyZXNfZmR3 LmMKaW5kZXggNDU2YjI2N2Y3MGIuLjA2YjUyYzY1MzAwIDEwMDY0NAotLS0gYS9jb250cmli L3Bvc3RncmVzX2Zkdy9wb3N0Z3Jlc19mZHcuYworKysgYi9jb250cmliL3Bvc3RncmVzX2Zk dy9wb3N0Z3Jlc19mZHcuYwpAQCAtMjg0MSw3ICsyODQxLDcgQEAgcG9zdGdyZXNFeHBsYWlu Rm9yZWlnblNjYW4oRm9yZWlnblNjYW5TdGF0ZSAqbm9kZSwgRXhwbGFpblN0YXRlICplcykK IAkgKi8KIAlpZiAobGlzdF9sZW5ndGgoZmR3X3ByaXZhdGUpID4gRmR3U2NhblByaXZhdGVS ZWxhdGlvbnMpCiAJewotCQlTdHJpbmdJbmZvCXJlbGF0aW9uczsKKwkJU3RyaW5nSW5mb0Rh dGEgcmVsYXRpb25zOwogCQljaGFyCSAgICpyYXdyZWxhdGlvbnM7CiAJCWNoYXIJICAgKnB0 cjsKIAkJaW50CQkJbWlucnRpLApAQCAtMjg3NSw3ICsyODc1LDcgQEAgcG9zdGdyZXNFeHBs YWluRm9yZWlnblNjYW4oRm9yZWlnblNjYW5TdGF0ZSAqbm9kZSwgRXhwbGFpblN0YXRlICpl cykKIAkJcnRvZmZzZXQgPSBibXNfbmV4dF9tZW1iZXIocGxhbi0+ZnNfYmFzZV9yZWxpZHMs IC0xKSAtIG1pbnJ0aTsKIAogCQkvKiBOb3cgd2UgY2FuIHRyYW5zbGF0ZSB0aGUgc3RyaW5n ICovCi0JCXJlbGF0aW9ucyA9IG1ha2VTdHJpbmdJbmZvKCk7CisJCWluaXRTdHJpbmdJbmZv KCZyZWxhdGlvbnMpOwogCQlwdHIgPSByYXdyZWxhdGlvbnM7CiAJCXdoaWxlICgqcHRyKQog CQl7CkBAIC0yODk3LDI0ICsyODk3LDI0IEBAIHBvc3RncmVzRXhwbGFpbkZvcmVpZ25TY2Fu KEZvcmVpZ25TY2FuU3RhdGUgKm5vZGUsIEV4cGxhaW5TdGF0ZSAqZXMpCiAJCQkJCWNoYXIJ ICAgKm5hbWVzcGFjZTsKIAogCQkJCQluYW1lc3BhY2UgPSBnZXRfbmFtZXNwYWNlX25hbWVf b3JfdGVtcChnZXRfcmVsX25hbWVzcGFjZShydGUtPnJlbGlkKSk7Ci0JCQkJCWFwcGVuZFN0 cmluZ0luZm8ocmVsYXRpb25zLCAiJXMuJXMiLAorCQkJCQlhcHBlbmRTdHJpbmdJbmZvKCZy ZWxhdGlvbnMsICIlcy4lcyIsCiAJCQkJCQkJCQkgcXVvdGVfaWRlbnRpZmllcihuYW1lc3Bh Y2UpLAogCQkJCQkJCQkJIHF1b3RlX2lkZW50aWZpZXIocmVsbmFtZSkpOwogCQkJCX0KIAkJ CQllbHNlCi0JCQkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcocmVsYXRpb25zLAorCQkJCQlh cHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZyZWxhdGlvbnMsCiAJCQkJCQkJCQkJICAgcXVvdGVf aWRlbnRpZmllcihyZWxuYW1lKSk7CiAJCQkJcmVmbmFtZSA9IChjaGFyICopIGxpc3RfbnRo KGVzLT5ydGFibGVfbmFtZXMsIHJ0aSAtIDEpOwogCQkJCWlmIChyZWZuYW1lID09IE5VTEwp CiAJCQkJCXJlZm5hbWUgPSBydGUtPmVyZWYtPmFsaWFzbmFtZTsKIAkJCQlpZiAoc3RyY21w KHJlZm5hbWUsIHJlbG5hbWUpICE9IDApCi0JCQkJCWFwcGVuZFN0cmluZ0luZm8ocmVsYXRp b25zLCAiICVzIiwKKwkJCQkJYXBwZW5kU3RyaW5nSW5mbygmcmVsYXRpb25zLCAiICVzIiwK IAkJCQkJCQkJCSBxdW90ZV9pZGVudGlmaWVyKHJlZm5hbWUpKTsKIAkJCX0KIAkJCWVsc2UK LQkJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihyZWxhdGlvbnMsICpwdHIrKyk7CisJCQkJYXBw ZW5kU3RyaW5nSW5mb0NoYXIoJnJlbGF0aW9ucywgKnB0cisrKTsKIAkJfQotCQlFeHBsYWlu UHJvcGVydHlUZXh0KCJSZWxhdGlvbnMiLCByZWxhdGlvbnMtPmRhdGEsIGVzKTsKKwkJRXhw bGFpblByb3BlcnR5VGV4dCgiUmVsYXRpb25zIiwgcmVsYXRpb25zLmRhdGEsIGVzKTsKIAl9 CiAKIAkvKgpkaWZmIC0tZ2l0IGEvY29udHJpYi90Y24vdGNuLmMgYi9jb250cmliL3Rjbi90 Y24uYwppbmRleCAzMTU4ZGVlMGYyNi4uYWIxZDQxNjY1NGYgMTAwNjQ0Ci0tLSBhL2NvbnRy aWIvdGNuL3Rjbi5jCisrKyBiL2NvbnRyaWIvdGNuL3Rjbi5jCkBAIC02NiwxMyArNjYsMTQg QEAgdHJpZ2dlcmVkX2NoYW5nZV9ub3RpZmljYXRpb24oUEdfRlVOQ1RJT05fQVJHUykKIAlU dXBsZURlc2MJdHVwZGVzYzsKIAljaGFyCSAgICpjaGFubmVsOwogCWNoYXIJCW9wZXJhdGlv bjsKLQlTdHJpbmdJbmZvCXBheWxvYWQgPSBtYWtlU3RyaW5nSW5mbygpOworCVN0cmluZ0lu Zm9EYXRhIHBheWxvYWQ7CiAJYm9vbAkJZm91bmRQSzsKIAogCUxpc3QJICAgKmluZGV4b2lk bGlzdDsKIAlMaXN0Q2VsbCAgICppbmRleG9pZHNjYW47CiAKIAkvKiBtYWtlIHN1cmUgaXQn cyBjYWxsZWQgYXMgYSB0cmlnZ2VyICovCisJaW5pdFN0cmluZ0luZm8oJnBheWxvYWQpOwog CWlmICghQ0FMTEVEX0FTX1RSSUdHRVIoZmNpbmZvKSkKIAkJZXJlcG9ydChFUlJPUiwKIAkJ CQkoZXJyY29kZShFUlJDT0RFX0VfUl9JX0VfVFJJR0dFUl9QUk9UT0NPTF9WSU9MQVRFRCks CkBAIC0xNDksMjIgKzE1MCwzMCBAQCB0cmlnZ2VyZWRfY2hhbmdlX25vdGlmaWNhdGlvbihQ R19GVU5DVElPTl9BUkdTKQogCiAJCQkJZm91bmRQSyA9IHRydWU7CiAKLQkJCQlzdHJjcHlf cXVvdGVkKHBheWxvYWQsIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbCksICciJyk7Ci0J CQkJYXBwZW5kU3RyaW5nSW5mb0NoYXJNYWNybyhwYXlsb2FkLCAnLCcpOwotCQkJCWFwcGVu ZFN0cmluZ0luZm9DaGFyTWFjcm8ocGF5bG9hZCwgb3BlcmF0aW9uKTsKKwkJCQlzdHJjcHlf cXVvdGVkKCZwYXlsb2FkLAorCQkJCQkJCSAgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVs KSwKKwkJCQkJCQkgICciJyk7CisJCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXJNYWNybygmcGF5 bG9hZCwgJywnKTsKKwkJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhck1hY3JvKCZwYXlsb2FkLCBv cGVyYXRpb24pOwogCiAJCQkJZm9yIChpID0gMDsgaSA8IGluZG5rZXlhdHRzOyBpKyspCiAJ CQkJewogCQkJCQlpbnQJCQljb2xubyA9IGluZGV4LT5pbmRrZXkudmFsdWVzW2ldOwogCQkJ CQlGb3JtX3BnX2F0dHJpYnV0ZSBhdHRyID0gVHVwbGVEZXNjQXR0cih0dXBkZXNjLCBjb2xu byAtIDEpOwogCi0JCQkJCWFwcGVuZFN0cmluZ0luZm9DaGFyTWFjcm8ocGF5bG9hZCwgJywn KTsKLQkJCQkJc3RyY3B5X3F1b3RlZChwYXlsb2FkLCBOYW1lU3RyKGF0dHItPmF0dG5hbWUp LCAnIicpOwotCQkJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhck1hY3JvKHBheWxvYWQsICc9Jyk7 Ci0JCQkJCXN0cmNweV9xdW90ZWQocGF5bG9hZCwgU1BJX2dldHZhbHVlKHRyaWd0dXBsZSwg dHVwZGVzYywgY29sbm8pLCAnXCcnKTsKKwkJCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXJNYWNy bygmcGF5bG9hZCwKKwkJCQkJCQkJCQkJICAnLCcpOworCQkJCQlzdHJjcHlfcXVvdGVkKCZw YXlsb2FkLAorCQkJCQkJCQkgIE5hbWVTdHIoYXR0ci0+YXR0bmFtZSksCisJCQkJCQkJCSAg JyInKTsKKwkJCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXJNYWNybygmcGF5bG9hZCwKKwkJCQkJ CQkJCQkJICAnPScpOworCQkJCQlzdHJjcHlfcXVvdGVkKCZwYXlsb2FkLAorCQkJCQkJCQkg IFNQSV9nZXR2YWx1ZSh0cmlndHVwbGUsIHR1cGRlc2MsIGNvbG5vKSwKKwkJCQkJCQkJICAn XCcnKTsKIAkJCQl9CiAKLQkJCQlBc3luY19Ob3RpZnkoY2hhbm5lbCwgcGF5bG9hZC0+ZGF0 YSk7CisJCQkJQXN5bmNfTm90aWZ5KGNoYW5uZWwsIHBheWxvYWQuZGF0YSk7CiAJCQl9CiAJ CQlSZWxlYXNlU3lzQ2FjaGUoaW5kZXhUdXBsZSk7CiAJCQlicmVhazsKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2diYWNrdXAuYyBiL3NyYy9iYWNrZW5k L2FjY2Vzcy90cmFuc2FtL3hsb2diYWNrdXAuYwppbmRleCBjZGE0YjM4YjdkNi4uMjJmNTc5 YjE2MTIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2diYWNr dXAuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9nYmFja3VwLmMKQEAg LTMxLDkgKzMxLDEwIEBAIGJ1aWxkX2JhY2t1cF9jb250ZW50KEJhY2t1cFN0YXRlICpzdGF0 ZSwgYm9vbCBpc2hpc3RvcnlmaWxlKQogCWNoYXIJCXN0YXJ0c3RyYnVmWzEyOF07CiAJY2hh cgkJc3RhcnR4bG9nZmlsZVtNQVhGTkFNRUxFTl07IC8qIGJhY2t1cCBzdGFydCBXQUwgZmls ZSAqLwogCVhMb2dTZWdObwlzdGFydHNlZ25vOwotCVN0cmluZ0luZm8JcmVzdWx0ID0gbWFr ZVN0cmluZ0luZm8oKTsKKwlTdHJpbmdJbmZvRGF0YSByZXN1bHQ7CiAJY2hhcgkgICAqZGF0 YTsKIAorCWluaXRTdHJpbmdJbmZvKCZyZXN1bHQpOwogCUFzc2VydChzdGF0ZSAhPSBOVUxM KTsKIAogCS8qIFVzZSB0aGUgbG9nIHRpbWV6b25lIGhlcmUsIG5vdCB0aGUgc2Vzc2lvbiB0 aW1lem9uZSAqLwpAQCAtNDIsNyArNDMsNyBAQCBidWlsZF9iYWNrdXBfY29udGVudChCYWNr dXBTdGF0ZSAqc3RhdGUsIGJvb2wgaXNoaXN0b3J5ZmlsZSkKIAogCVhMQnl0ZVRvU2VnKHN0 YXRlLT5zdGFydHBvaW50LCBzdGFydHNlZ25vLCB3YWxfc2VnbWVudF9zaXplKTsKIAlYTG9n RmlsZU5hbWUoc3RhcnR4bG9nZmlsZSwgc3RhdGUtPnN0YXJ0dGxpLCBzdGFydHNlZ25vLCB3 YWxfc2VnbWVudF9zaXplKTsKLQlhcHBlbmRTdHJpbmdJbmZvKHJlc3VsdCwgIlNUQVJUIFdB TCBMT0NBVElPTjogJVgvJTA4WCAoZmlsZSAlcylcbiIsCisJYXBwZW5kU3RyaW5nSW5mbygm cmVzdWx0LCAiU1RBUlQgV0FMIExPQ0FUSU9OOiAlWC8lMDhYIChmaWxlICVzKVxuIiwKIAkJ CQkJIExTTl9GT1JNQVRfQVJHUyhzdGF0ZS0+c3RhcnRwb2ludCksIHN0YXJ0eGxvZ2ZpbGUp OwogCiAJaWYgKGlzaGlzdG9yeWZpbGUpCkBAIC01MiwxOCArNTMsMTkgQEAgYnVpbGRfYmFj a3VwX2NvbnRlbnQoQmFja3VwU3RhdGUgKnN0YXRlLCBib29sIGlzaGlzdG9yeWZpbGUpCiAK IAkJWExCeXRlVG9TZWcoc3RhdGUtPnN0b3Bwb2ludCwgc3RvcHNlZ25vLCB3YWxfc2VnbWVu dF9zaXplKTsKIAkJWExvZ0ZpbGVOYW1lKHN0b3B4bG9nZmlsZSwgc3RhdGUtPnN0b3B0bGks IHN0b3BzZWdubywgd2FsX3NlZ21lbnRfc2l6ZSk7Ci0JCWFwcGVuZFN0cmluZ0luZm8ocmVz dWx0LCAiU1RPUCBXQUwgTE9DQVRJT046ICVYLyUwOFggKGZpbGUgJXMpXG4iLAorCQlhcHBl bmRTdHJpbmdJbmZvKCZyZXN1bHQsCisJCQkJCQkgIlNUT1AgV0FMIExPQ0FUSU9OOiAlWC8l MDhYIChmaWxlICVzKVxuIiwKIAkJCQkJCSBMU05fRk9STUFUX0FSR1Moc3RhdGUtPnN0b3Bw b2ludCksIHN0b3B4bG9nZmlsZSk7CiAJfQogCi0JYXBwZW5kU3RyaW5nSW5mbyhyZXN1bHQs ICJDSEVDS1BPSU5UIExPQ0FUSU9OOiAlWC8lMDhYXG4iLAorCWFwcGVuZFN0cmluZ0luZm8o JnJlc3VsdCwgIkNIRUNLUE9JTlQgTE9DQVRJT046ICVYLyUwOFhcbiIsCiAJCQkJCSBMU05f Rk9STUFUX0FSR1Moc3RhdGUtPmNoZWNrcG9pbnRsb2MpKTsKLQlhcHBlbmRTdHJpbmdJbmZv U3RyaW5nKHJlc3VsdCwgIkJBQ0tVUCBNRVRIT0Q6IHN0cmVhbWVkXG4iKTsKLQlhcHBlbmRT dHJpbmdJbmZvKHJlc3VsdCwgIkJBQ0tVUCBGUk9NOiAlc1xuIiwKKwlhcHBlbmRTdHJpbmdJ bmZvU3RyaW5nKCZyZXN1bHQsICJCQUNLVVAgTUVUSE9EOiBzdHJlYW1lZFxuIik7CisJYXBw ZW5kU3RyaW5nSW5mbygmcmVzdWx0LCAiQkFDS1VQIEZST006ICVzXG4iLAogCQkJCQkgc3Rh dGUtPnN0YXJ0ZWRfaW5fcmVjb3ZlcnkgPyAic3RhbmRieSIgOiAicHJpbWFyeSIpOwotCWFw cGVuZFN0cmluZ0luZm8ocmVzdWx0LCAiU1RBUlQgVElNRTogJXNcbiIsIHN0YXJ0c3RyYnVm KTsKLQlhcHBlbmRTdHJpbmdJbmZvKHJlc3VsdCwgIkxBQkVMOiAlc1xuIiwgc3RhdGUtPm5h bWUpOwotCWFwcGVuZFN0cmluZ0luZm8ocmVzdWx0LCAiU1RBUlQgVElNRUxJTkU6ICV1XG4i LCBzdGF0ZS0+c3RhcnR0bGkpOworCWFwcGVuZFN0cmluZ0luZm8oJnJlc3VsdCwgIlNUQVJU IFRJTUU6ICVzXG4iLCBzdGFydHN0cmJ1Zik7CisJYXBwZW5kU3RyaW5nSW5mbygmcmVzdWx0 LCAiTEFCRUw6ICVzXG4iLCBzdGF0ZS0+bmFtZSk7CisJYXBwZW5kU3RyaW5nSW5mbygmcmVz dWx0LCAiU1RBUlQgVElNRUxJTkU6ICV1XG4iLCBzdGF0ZS0+c3RhcnR0bGkpOwogCiAJaWYg KGlzaGlzdG9yeWZpbGUpCiAJewpAQCAtNzMsMjIgKzc1LDIyIEBAIGJ1aWxkX2JhY2t1cF9j b250ZW50KEJhY2t1cFN0YXRlICpzdGF0ZSwgYm9vbCBpc2hpc3RvcnlmaWxlKQogCQlwZ19z dHJmdGltZShzdG9wc3RyZmJ1Ziwgc2l6ZW9mKHN0b3BzdHJmYnVmKSwgIiVZLSVtLSVkICVI OiVNOiVTICVaIiwKIAkJCQkJcGdfbG9jYWx0aW1lKCZzdGF0ZS0+c3RvcHRpbWUsIGxvZ190 aW1lem9uZSkpOwogCi0JCWFwcGVuZFN0cmluZ0luZm8ocmVzdWx0LCAiU1RPUCBUSU1FOiAl c1xuIiwgc3RvcHN0cmZidWYpOwotCQlhcHBlbmRTdHJpbmdJbmZvKHJlc3VsdCwgIlNUT1Ag VElNRUxJTkU6ICV1XG4iLCBzdGF0ZS0+c3RvcHRsaSk7CisJCWFwcGVuZFN0cmluZ0luZm8o JnJlc3VsdCwgIlNUT1AgVElNRTogJXNcbiIsIHN0b3BzdHJmYnVmKTsKKwkJYXBwZW5kU3Ry aW5nSW5mbygmcmVzdWx0LCAiU1RPUCBUSU1FTElORTogJXVcbiIsCisJCQkJCQkgc3RhdGUt PnN0b3B0bGkpOwogCX0KIAogCS8qIGVpdGhlciBib3RoIGlzdGFydHBvaW50IGFuZCBpc3Rh cnR0bGkgc2hvdWxkIGJlIHNldCwgb3IgbmVpdGhlciAqLwogCUFzc2VydChYTG9nUmVjUHRy SXNJbnZhbGlkKHN0YXRlLT5pc3RhcnRwb2ludCkgPT0gKHN0YXRlLT5pc3RhcnR0bGkgPT0g MCkpOwogCWlmICghWExvZ1JlY1B0cklzSW52YWxpZChzdGF0ZS0+aXN0YXJ0cG9pbnQpKQog CXsKLQkJYXBwZW5kU3RyaW5nSW5mbyhyZXN1bHQsICJJTkNSRU1FTlRBTCBGUk9NIExTTjog JVgvJTA4WFxuIiwKKwkJYXBwZW5kU3RyaW5nSW5mbygmcmVzdWx0LCAiSU5DUkVNRU5UQUwg RlJPTSBMU046ICVYLyUwOFhcbiIsCiAJCQkJCQkgTFNOX0ZPUk1BVF9BUkdTKHN0YXRlLT5p c3RhcnRwb2ludCkpOwotCQlhcHBlbmRTdHJpbmdJbmZvKHJlc3VsdCwgIklOQ1JFTUVOVEFM IEZST00gVExJOiAldVxuIiwKKwkJYXBwZW5kU3RyaW5nSW5mbygmcmVzdWx0LCAiSU5DUkVN RU5UQUwgRlJPTSBUTEk6ICV1XG4iLAogCQkJCQkJIHN0YXRlLT5pc3RhcnR0bGkpOwogCX0K IAotCWRhdGEgPSByZXN1bHQtPmRhdGE7Ci0JcGZyZWUocmVzdWx0KTsKKwlkYXRhID0gcmVz dWx0LmRhdGE7CiAKIAlyZXR1cm4gZGF0YTsKIH0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2JhY2t1cC9iYXNlYmFja3VwLmMgYi9zcmMvYmFja2VuZC9iYWNrdXAvYmFzZWJhY2t1cC5j CmluZGV4IGJiN2Q5MGFhNWQ5Li43MmQyNTkzNDRkOSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvYmFja3VwL2Jhc2ViYWNrdXAuYworKysgYi9zcmMvYmFja2VuZC9iYWNrdXAvYmFzZWJh Y2t1cC5jCkBAIC0yMzksNyArMjM5LDcgQEAgcGVyZm9ybV9iYXNlX2JhY2t1cChiYXNlYmFj a3VwX29wdGlvbnMgKm9wdCwgYmJzaW5rICpzaW5rLAogCVRpbWVMaW5lSUQJZW5kdGxpOwog CWJhY2t1cF9tYW5pZmVzdF9pbmZvIG1hbmlmZXN0OwogCUJhY2t1cFN0YXRlICpiYWNrdXBf c3RhdGU7Ci0JU3RyaW5nSW5mbwl0YWJsZXNwYWNlX21hcDsKKwlTdHJpbmdJbmZvRGF0YSB0 YWJsZXNwYWNlX21hcDsKIAogCS8qIEluaXRpYWwgYmFja3VwIHN0YXRlLCBpbnNvZmFyIGFz IHdlIGtub3cgaXQgbm93LiAqLwogCXN0YXRlLnRhYmxlc3BhY2VzID0gTklMOwpAQCAtMjYz LDExICsyNjMsMTEgQEAgcGVyZm9ybV9iYXNlX2JhY2t1cChiYXNlYmFja3VwX29wdGlvbnMg Km9wdCwgYmJzaW5rICpzaW5rLAogCiAJLyogQWxsb2NhdGUgYmFja3VwIHJlbGF0ZWQgdmFy aWFibGVzLiAqLwogCWJhY2t1cF9zdGF0ZSA9IChCYWNrdXBTdGF0ZSAqKSBwYWxsb2MwKHNp emVvZihCYWNrdXBTdGF0ZSkpOwotCXRhYmxlc3BhY2VfbWFwID0gbWFrZVN0cmluZ0luZm8o KTsKKwlpbml0U3RyaW5nSW5mbygmdGFibGVzcGFjZV9tYXApOwogCiAJYmFzZWJhY2t1cF9w cm9ncmVzc193YWl0X2NoZWNrcG9pbnQoKTsKIAlkb19wZ19iYWNrdXBfc3RhcnQob3B0LT5s YWJlbCwgb3B0LT5mYXN0Y2hlY2twb2ludCwgJnN0YXRlLnRhYmxlc3BhY2VzLAotCQkJCQkg ICBiYWNrdXBfc3RhdGUsIHRhYmxlc3BhY2VfbWFwKTsKKwkJCQkJICAgYmFja3VwX3N0YXRl LCAmdGFibGVzcGFjZV9tYXApOwogCiAJc3RhdGUuc3RhcnRwdHIgPSBiYWNrdXBfc3RhdGUt PnN0YXJ0cG9pbnQ7CiAJc3RhdGUuc3RhcnR0bGkgPSBiYWNrdXBfc3RhdGUtPnN0YXJ0dGxp OwpAQCAtMzQyLDcgKzM0Miw5IEBAIHBlcmZvcm1fYmFzZV9iYWNrdXAoYmFzZWJhY2t1cF9v cHRpb25zICpvcHQsIGJic2luayAqc2luaywKIAkJCQlpZiAob3B0LT5zZW5kdGJsc3BjbWFw ZmlsZSkKIAkJCQl7CiAJCQkJCXNlbmRGaWxlV2l0aENvbnRlbnQoc2luaywgVEFCTEVTUEFD RV9NQVAsCi0JCQkJCQkJCQkJdGFibGVzcGFjZV9tYXAtPmRhdGEsIC0xLCAmbWFuaWZlc3Qp OworCQkJCQkJCQkJCXRhYmxlc3BhY2VfbWFwLmRhdGEsCisJCQkJCQkJCQkJLTEsCisJCQkJ CQkJCQkJJm1hbmlmZXN0KTsKIAkJCQkJc2VuZHRibHNwY2xpbmtzID0gZmFsc2U7CiAJCQkJ fQogCkBAIC0zOTksNyArNDAxLDYgQEAgcGVyZm9ybV9iYXNlX2JhY2t1cChiYXNlYmFja3Vw X29wdGlvbnMgKm9wdCwgYmJzaW5rICpzaW5rLAogCQllbmR0bGkgPSBiYWNrdXBfc3RhdGUt PnN0b3B0bGk7CiAKIAkJLyogRGVhbGxvY2F0ZSBiYWNrdXAtcmVsYXRlZCB2YXJpYWJsZXMu ICovCi0JCWRlc3Ryb3lTdHJpbmdJbmZvKHRhYmxlc3BhY2VfbWFwKTsKIAkJcGZyZWUoYmFj a3VwX3N0YXRlKTsKIAl9CiAJUEdfRU5EX0VOU1VSRV9FUlJPUl9DTEVBTlVQKGRvX3BnX2Fi b3J0X2JhY2t1cCwgQm9vbEdldERhdHVtKGZhbHNlKSk7CmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9jb21tYW5kcy9zdWJzY3JpcHRpb25jbWRzLmMgYi9zcmMvYmFja2VuZC9jb21tYW5k cy9zdWJzY3JpcHRpb25jbWRzLmMKaW5kZXggMWY0NTQ0NGI0OTkuLjRhMDk1ZDc1YmExIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9zdWJzY3JpcHRpb25jbWRzLmMKKysr IGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvc3Vic2NyaXB0aW9uY21kcy5jCkBAIC00OTEsMjAg KzQ5MSwxOSBAQCBzdGF0aWMgdm9pZAogY2hlY2tfcHVibGljYXRpb25zKFdhbFJlY2VpdmVy Q29ubiAqd3Jjb25uLCBMaXN0ICpwdWJsaWNhdGlvbnMpCiB7CiAJV2FsUmN2RXhlY1Jlc3Vs dCAqcmVzOwotCVN0cmluZ0luZm8JY21kOworCVN0cmluZ0luZm9EYXRhIGNtZDsKIAlUdXBs ZVRhYmxlU2xvdCAqc2xvdDsKIAlMaXN0CSAgICpwdWJsaWNhdGlvbnNDb3B5ID0gTklMOwog CU9pZAkJCXRhYmxlUm93WzFdID0ge1RFWFRPSUR9OwogCi0JY21kID0gbWFrZVN0cmluZ0lu Zm8oKTsKLQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGNtZCwgIlNFTEVDVCB0LnB1Ym5hbWUg RlJPTVxuIgorCWluaXRTdHJpbmdJbmZvKCZjbWQpOworCWFwcGVuZFN0cmluZ0luZm9TdHJp bmcoJmNtZCwgIlNFTEVDVCB0LnB1Ym5hbWUgRlJPTVxuIgogCQkJCQkJICAgIiBwZ19jYXRh bG9nLnBnX3B1YmxpY2F0aW9uIHQgV0hFUkVcbiIKIAkJCQkJCSAgICIgdC5wdWJuYW1lIElO ICgiKTsKLQlHZXRQdWJsaWNhdGlvbnNTdHIocHVibGljYXRpb25zLCBjbWQsIHRydWUpOwot CWFwcGVuZFN0cmluZ0luZm9DaGFyKGNtZCwgJyknKTsKKwlHZXRQdWJsaWNhdGlvbnNTdHIo cHVibGljYXRpb25zLCAmY21kLCB0cnVlKTsKKwlhcHBlbmRTdHJpbmdJbmZvQ2hhcigmY21k LCAnKScpOwogCi0JcmVzID0gd2FscmN2X2V4ZWMod3Jjb25uLCBjbWQtPmRhdGEsIDEsIHRh YmxlUm93KTsKLQlkZXN0cm95U3RyaW5nSW5mbyhjbWQpOworCXJlcyA9IHdhbHJjdl9leGVj KHdyY29ubiwgY21kLmRhdGEsIDEsIHRhYmxlUm93KTsKIAogCWlmIChyZXMtPnN0YXR1cyAh PSBXQUxSQ1ZfT0tfVFVQTEVTKQogCQllcmVwb3J0KEVSUk9SLApAQCAtNTM1LDE1ICs1MzQs MTYgQEAgY2hlY2tfcHVibGljYXRpb25zKFdhbFJlY2VpdmVyQ29ubiAqd3Jjb25uLCBMaXN0 ICpwdWJsaWNhdGlvbnMpCiAJaWYgKGxpc3RfbGVuZ3RoKHB1YmxpY2F0aW9uc0NvcHkpKQog CXsKIAkJLyogUHJlcGFyZSB0aGUgbGlzdCBvZiBub24tZXhpc3RlbnQgcHVibGljYXRpb24o cykgZm9yIGVycm9yIG1lc3NhZ2UuICovCi0JCVN0cmluZ0luZm8JcHVibmFtZXMgPSBtYWtl U3RyaW5nSW5mbygpOworCQlTdHJpbmdJbmZvRGF0YSBwdWJuYW1lczsKIAotCQlHZXRQdWJs aWNhdGlvbnNTdHIocHVibGljYXRpb25zQ29weSwgcHVibmFtZXMsIGZhbHNlKTsKKwkJaW5p dFN0cmluZ0luZm8oJnB1Ym5hbWVzKTsKKwkJR2V0UHVibGljYXRpb25zU3RyKHB1YmxpY2F0 aW9uc0NvcHksICZwdWJuYW1lcywgZmFsc2UpOwogCQllcmVwb3J0KFdBUk5JTkcsCiAJCQkJ ZXJyY29kZShFUlJDT0RFX1VOREVGSU5FRF9PQkpFQ1QpLAogCQkJCWVycm1zZ19wbHVyYWwo InB1YmxpY2F0aW9uICVzIGRvZXMgbm90IGV4aXN0IG9uIHRoZSBwdWJsaXNoZXIiLAogCQkJ CQkJCSAgInB1YmxpY2F0aW9ucyAlcyBkbyBub3QgZXhpc3Qgb24gdGhlIHB1Ymxpc2hlciIs CiAJCQkJCQkJICBsaXN0X2xlbmd0aChwdWJsaWNhdGlvbnNDb3B5KSwKLQkJCQkJCQkgIHB1 Ym5hbWVzLT5kYXRhKSk7CisJCQkJCQkJICBwdWJuYW1lcy5kYXRhKSk7CiAJfQogfQogCkBA IC0yNTk3LDMzICsyNTk3LDM4IEBAIGNoZWNrX3B1YmxpY2F0aW9uc19vcmlnaW5fdGFibGVz KFdhbFJlY2VpdmVyQ29ubiAqd3Jjb25uLCBMaXN0ICpwdWJsaWNhdGlvbnMsCiAJICovCiAJ aWYgKHB1Ymxpc3QpCiAJewotCQlTdHJpbmdJbmZvCXB1Ym5hbWVzID0gbWFrZVN0cmluZ0lu Zm8oKTsKLQkJU3RyaW5nSW5mbwllcnJfbXNnID0gbWFrZVN0cmluZ0luZm8oKTsKLQkJU3Ry aW5nSW5mbwllcnJfaGludCA9IG1ha2VTdHJpbmdJbmZvKCk7CisJCVN0cmluZ0luZm9EYXRh CXB1Ym5hbWVzOworCQlTdHJpbmdJbmZvRGF0YQllcnJfbXNnOworCQlTdHJpbmdJbmZvRGF0 YSBlcnJfaGludDsKIAogCQkvKiBQcmVwYXJlIHRoZSBsaXN0IG9mIHB1YmxpY2F0aW9uKHMp IGZvciB3YXJuaW5nIG1lc3NhZ2UuICovCi0JCUdldFB1YmxpY2F0aW9uc1N0cihwdWJsaXN0 LCBwdWJuYW1lcywgZmFsc2UpOworCQlpbml0U3RyaW5nSW5mbygmcHVibmFtZXMpOworCQlp bml0U3RyaW5nSW5mbygmZXJyX21zZyk7CisJCWluaXRTdHJpbmdJbmZvKCZlcnJfaGludCk7 CisJCUdldFB1YmxpY2F0aW9uc1N0cihwdWJsaXN0LCAmcHVibmFtZXMsIGZhbHNlKTsKIAog CQlpZiAoY2hlY2tfdGFibGVfc3luYykKIAkJewotCQkJYXBwZW5kU3RyaW5nSW5mbyhlcnJf bXNnLCBfKCJzdWJzY3JpcHRpb24gXCIlc1wiIHJlcXVlc3RlZCBjb3B5X2RhdGEgd2l0aCBv cmlnaW4gPSBOT05FIGJ1dCBtaWdodCBjb3B5IGRhdGEgdGhhdCBoYWQgYSBkaWZmZXJlbnQg b3JpZ2luIiksCisJCQlhcHBlbmRTdHJpbmdJbmZvKCZlcnJfbXNnLCBfKCJzdWJzY3JpcHRp b24gXCIlc1wiIHJlcXVlc3RlZCBjb3B5X2RhdGEgd2l0aCBvcmlnaW4gPSBOT05FIGJ1dCBt aWdodCBjb3B5IGRhdGEgdGhhdCBoYWQgYSBkaWZmZXJlbnQgb3JpZ2luIiksCiAJCQkJCQkJ IHN1Ym5hbWUpOwotCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhlcnJfaGludCwgXygiVmVy aWZ5IHRoYXQgaW5pdGlhbCBkYXRhIGNvcGllZCBmcm9tIHRoZSBwdWJsaXNoZXIgdGFibGVz IGRpZCBub3QgY29tZSBmcm9tIG90aGVyIG9yaWdpbnMuIikpOworCQkJYXBwZW5kU3RyaW5n SW5mb1N0cmluZygmZXJyX2hpbnQsCisJCQkJCSAgICAgICBfKCJWZXJpZnkgdGhhdCBpbml0 aWFsIGRhdGEgY29waWVkIGZyb20gdGhlIHB1Ymxpc2hlciB0YWJsZXMgZGlkIG5vdCBjb21l IGZyb20gb3RoZXIgb3JpZ2lucy4iKSk7CiAJCX0KIAkJZWxzZQogCQl7Ci0JCQlhcHBlbmRT dHJpbmdJbmZvKGVycl9tc2csIF8oInN1YnNjcmlwdGlvbiBcIiVzXCIgZW5hYmxlZCByZXRh aW5fZGVhZF90dXBsZXMgYnV0IG1pZ2h0IG5vdCByZWxpYWJseSBkZXRlY3QgY29uZmxpY3Rz IGZvciBjaGFuZ2VzIGZyb20gZGlmZmVyZW50IG9yaWdpbnMiKSwKKwkJCWFwcGVuZFN0cmlu Z0luZm8oJmVycl9tc2csIF8oInN1YnNjcmlwdGlvbiBcIiVzXCIgZW5hYmxlZCByZXRhaW5f ZGVhZF90dXBsZXMgYnV0IG1pZ2h0IG5vdCByZWxpYWJseSBkZXRlY3QgY29uZmxpY3RzIGZv ciBjaGFuZ2VzIGZyb20gZGlmZmVyZW50IG9yaWdpbnMiKSwKIAkJCQkJCQkgc3VibmFtZSk7 Ci0JCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGVycl9oaW50LCBfKCJDb25zaWRlciB1c2lu ZyBvcmlnaW4gPSBOT05FIG9yIGRpc2FibGluZyByZXRhaW5fZGVhZF90dXBsZXMuIikpOwor CQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmZXJyX2hpbnQsCisJCQkJCSAgICAgICBfKCJD b25zaWRlciB1c2luZyBvcmlnaW4gPSBOT05FIG9yIGRpc2FibGluZyByZXRhaW5fZGVhZF90 dXBsZXMuIikpOwogCQl9CiAKIAkJZXJlcG9ydChXQVJOSU5HLAogCQkJCWVycmNvZGUoRVJS Q09ERV9PQkpFQ1RfTk9UX0lOX1BSRVJFUVVJU0lURV9TVEFURSksCi0JCQkJZXJybXNnX2lu dGVybmFsKCIlcyIsIGVycl9tc2ctPmRhdGEpLAorCQkJCWVycm1zZ19pbnRlcm5hbCgiJXMi LCBlcnJfbXNnLmRhdGEpLAogCQkJCWVycmRldGFpbF9wbHVyYWwoIlRoZSBzdWJzY3JpcHRp b24gc3Vic2NyaWJlcyB0byBhIHB1YmxpY2F0aW9uICglcykgdGhhdCBjb250YWlucyB0YWJs ZXMgdGhhdCBhcmUgd3JpdHRlbiB0byBieSBvdGhlciBzdWJzY3JpcHRpb25zLiIsCiAJCQkJ CQkJCSAiVGhlIHN1YnNjcmlwdGlvbiBzdWJzY3JpYmVzIHRvIHB1YmxpY2F0aW9ucyAoJXMp IHRoYXQgY29udGFpbiB0YWJsZXMgdGhhdCBhcmUgd3JpdHRlbiB0byBieSBvdGhlciBzdWJz Y3JpcHRpb25zLiIsCi0JCQkJCQkJCSBsaXN0X2xlbmd0aChwdWJsaXN0KSwgcHVibmFtZXMt PmRhdGEpLAotCQkJCWVycmhpbnRfaW50ZXJuYWwoIiVzIiwgZXJyX2hpbnQtPmRhdGEpKTsK KwkJCQkJCQkJIGxpc3RfbGVuZ3RoKHB1Ymxpc3QpLCBwdWJuYW1lcy5kYXRhKSwKKwkJCQll cnJoaW50X2ludGVybmFsKCIlcyIsIGVycl9oaW50LmRhdGEpKTsKIAl9CiAKIAlFeGVjRHJv cFNpbmdsZVR1cGxlVGFibGVTbG90KHNsb3QpOwpAQCAtMjcxNiwxNCArMjcyMSwxNiBAQCBj aGVja19wdWJsaWNhdGlvbnNfb3JpZ2luX3NlcXVlbmNlcyhXYWxSZWNlaXZlckNvbm4gKndy Y29ubiwgTGlzdCAqcHVibGljYXRpb25zLAogCXsKIAkJU3RyaW5nSW5mbwlwdWJuYW1lcyA9 IG1ha2VTdHJpbmdJbmZvKCk7CiAJCVN0cmluZ0luZm8JZXJyX21zZyA9IG1ha2VTdHJpbmdJ bmZvKCk7Ci0JCVN0cmluZ0luZm8JZXJyX2hpbnQgPSBtYWtlU3RyaW5nSW5mbygpOworCQlT dHJpbmdJbmZvRGF0YSBlcnJfaGludDsKIAogCQkvKiBQcmVwYXJlIHRoZSBsaXN0IG9mIHB1 YmxpY2F0aW9uKHMpIGZvciB3YXJuaW5nIG1lc3NhZ2UuICovCisJCWluaXRTdHJpbmdJbmZv KCZlcnJfaGludCk7CiAJCUdldFB1YmxpY2F0aW9uc1N0cihwdWJsaXN0LCBwdWJuYW1lcywg ZmFsc2UpOwogCiAJCWFwcGVuZFN0cmluZ0luZm8oZXJyX21zZywgXygic3Vic2NyaXB0aW9u IFwiJXNcIiByZXF1ZXN0ZWQgY29weV9kYXRhIHdpdGggb3JpZ2luID0gTk9ORSBidXQgbWln aHQgY29weSBkYXRhIHRoYXQgaGFkIGEgZGlmZmVyZW50IG9yaWdpbiIpLAogCQkJCQkJIHN1 Ym5hbWUpOwotCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGVycl9oaW50LCBfKCJWZXJpZnkg dGhhdCBpbml0aWFsIGRhdGEgY29waWVkIGZyb20gdGhlIHB1Ymxpc2hlciBzZXF1ZW5jZXMg ZGlkIG5vdCBjb21lIGZyb20gb3RoZXIgb3JpZ2lucy4iKSk7CisJCWFwcGVuZFN0cmluZ0lu Zm9TdHJpbmcoJmVycl9oaW50LAorCQkJCSAgICAgICBfKCJWZXJpZnkgdGhhdCBpbml0aWFs IGRhdGEgY29waWVkIGZyb20gdGhlIHB1Ymxpc2hlciBzZXF1ZW5jZXMgZGlkIG5vdCBjb21l IGZyb20gb3RoZXIgb3JpZ2lucy4iKSk7CiAKIAkJZXJlcG9ydChXQVJOSU5HLAogCQkJCWVy cmNvZGUoRVJSQ09ERV9PQkpFQ1RfTk9UX0lOX1BSRVJFUVVJU0lURV9TVEFURSksCkBAIC0y NzMxLDcgKzI3MzgsNyBAQCBjaGVja19wdWJsaWNhdGlvbnNfb3JpZ2luX3NlcXVlbmNlcyhX YWxSZWNlaXZlckNvbm4gKndyY29ubiwgTGlzdCAqcHVibGljYXRpb25zLAogCQkJCWVycmRl dGFpbF9wbHVyYWwoIlRoZSBzdWJzY3JpcHRpb24gc3Vic2NyaWJlcyB0byBhIHB1YmxpY2F0 aW9uICglcykgdGhhdCBjb250YWlucyBzZXF1ZW5jZXMgdGhhdCBhcmUgd3JpdHRlbiB0byBi eSBvdGhlciBzdWJzY3JpcHRpb25zLiIsCiAJCQkJCQkJCSAiVGhlIHN1YnNjcmlwdGlvbiBz dWJzY3JpYmVzIHRvIHB1YmxpY2F0aW9ucyAoJXMpIHRoYXQgY29udGFpbiBzZXF1ZW5jZXMg dGhhdCBhcmUgd3JpdHRlbiB0byBieSBvdGhlciBzdWJzY3JpcHRpb25zLiIsCiAJCQkJCQkJ CSBsaXN0X2xlbmd0aChwdWJsaXN0KSwgcHVibmFtZXMtPmRhdGEpLAotCQkJCWVycmhpbnRf aW50ZXJuYWwoIiVzIiwgZXJyX2hpbnQtPmRhdGEpKTsKKwkJCQllcnJoaW50X2ludGVybmFs KCIlcyIsIGVycl9oaW50LmRhdGEpKTsKIAl9CiAKIAlFeGVjRHJvcFNpbmdsZVR1cGxlVGFi bGVTbG90KHNsb3QpOwpAQCAtMjg4NSwxMiArMjg5MiwxMyBAQCBmZXRjaF9yZWxhdGlvbl9s aXN0KFdhbFJlY2VpdmVyQ29ubiAqd3Jjb25uLCBMaXN0ICpwdWJsaWNhdGlvbnMpCiAJaW50 CQkJc2VydmVyX3ZlcnNpb24gPSB3YWxyY3Zfc2VydmVyX3ZlcnNpb24od3Jjb25uKTsKIAli b29sCQljaGVja19jb2x1bW5saXN0ID0gKHNlcnZlcl92ZXJzaW9uID49IDE1MDAwMCk7CiAJ aW50CQkJY29sdW1uX2NvdW50ID0gY2hlY2tfY29sdW1ubGlzdCA/IDQgOiAzOwotCVN0cmlu Z0luZm8JcHViX25hbWVzID0gbWFrZVN0cmluZ0luZm8oKTsKKwlTdHJpbmdJbmZvRGF0YSBw dWJfbmFtZXM7CiAKKwlpbml0U3RyaW5nSW5mbygmcHViX25hbWVzKTsKIAlpbml0U3RyaW5n SW5mbygmY21kKTsKIAogCS8qIEJ1aWxkIHRoZSBwdWJfbmFtZXMgY29tbWEtc2VwYXJhdGVk IHN0cmluZy4gKi8KLQlHZXRQdWJsaWNhdGlvbnNTdHIocHVibGljYXRpb25zLCBwdWJfbmFt ZXMsIHRydWUpOworCUdldFB1YmxpY2F0aW9uc1N0cihwdWJsaWNhdGlvbnMsICZwdWJfbmFt ZXMsIHRydWUpOwogCiAJLyogR2V0IHRoZSBsaXN0IG9mIHJlbGF0aW9ucyBmcm9tIHRoZSBw dWJsaXNoZXIgKi8KIAlpZiAoc2VydmVyX3ZlcnNpb24gPj0gMTYwMDAwKQpAQCAtMjkxNyw3 ICsyOTI1LDcgQEAgZmV0Y2hfcmVsYXRpb25fbGlzdChXYWxSZWNlaXZlckNvbm4gKndyY29u biwgTGlzdCAqcHVibGljYXRpb25zKQogCQkJCQkJICIgICAgICAgICAgICAgICAgRlJPTSBw Z19wdWJsaWNhdGlvblxuIgogCQkJCQkJICIgICAgICAgICAgICAgICAgV0hFUkUgcHVibmFt ZSBJTiAoICVzICkpIEFTIGdwdFxuIgogCQkJCQkJICIgICAgICAgICAgICAgT04gZ3B0LnJl bGlkID0gYy5vaWRcbiIsCi0JCQkJCQkgcHViX25hbWVzLT5kYXRhKTsKKwkJCQkJCSBwdWJf bmFtZXMuZGF0YSk7CiAKIAkJLyogRnJvbSB2ZXJzaW9uIDE5LCBpbmNsdXNpb24gb2Ygc2Vx dWVuY2VzIGluIHRoZSB0YXJnZXQgaXMgc3VwcG9ydGVkICovCiAJCWlmIChzZXJ2ZXJfdmVy c2lvbiA+PSAxOTAwMDApCkBAIC0yOTI2LDcgKzI5MzQsNyBAQCBmZXRjaF9yZWxhdGlvbl9s aXN0KFdhbFJlY2VpdmVyQ29ubiAqd3Jjb25uLCBMaXN0ICpwdWJsaWNhdGlvbnMpCiAJCQkJ CQkJICIgIFNFTEVDVCBESVNUSU5DVCBzLnNjaGVtYW5hbWUsIHMuc2VxdWVuY2VuYW1lLCAi IENwcEFzU3RyaW5nMihSRUxLSU5EX1NFUVVFTkNFKSAiOjpcImNoYXJcIiBBUyByZWxraW5k LCBOVUxMOjppbnQydmVjdG9yIEFTIGF0dHJzXG4iCiAJCQkJCQkJICIgIEZST00gcGdfY2F0 YWxvZy5wZ19wdWJsaWNhdGlvbl9zZXF1ZW5jZXMgc1xuIgogCQkJCQkJCSAiICBXSEVSRSBz LnB1Ym5hbWUgSU4gKCAlcyApIiwKLQkJCQkJCQkgcHViX25hbWVzLT5kYXRhKTsKKwkJCQkJ CQkgcHViX25hbWVzLmRhdGEpOwogCX0KIAllbHNlCiAJewpAQCAtMjkzOSwxMSArMjk0Nyw5 IEBAIGZldGNoX3JlbGF0aW9uX2xpc3QoV2FsUmVjZWl2ZXJDb25uICp3cmNvbm4sIExpc3Qg KnB1YmxpY2F0aW9ucykKIAogCQlhcHBlbmRTdHJpbmdJbmZvKCZjbWQsICJGUk9NIHBnX2Nh dGFsb2cucGdfcHVibGljYXRpb25fdGFibGVzIHRcbiIKIAkJCQkJCSAiIFdIRVJFIHQucHVi bmFtZSBJTiAoICVzICkiLAotCQkJCQkJIHB1Yl9uYW1lcy0+ZGF0YSk7CisJCQkJCQkgcHVi X25hbWVzLmRhdGEpOwogCX0KIAotCWRlc3Ryb3lTdHJpbmdJbmZvKHB1Yl9uYW1lcyk7Ci0K IAlyZXMgPSB3YWxyY3ZfZXhlYyh3cmNvbm4sIGNtZC5kYXRhLCBjb2x1bW5fY291bnQsIHRh YmxlUm93KTsKIAlwZnJlZShjbWQuZGF0YSk7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L3V0aWxzL2FkdC9qc29uLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvanNvbi5jCmluZGV4 IDg4YTYxMmIwNDFkLi4wNmRkNjJmMDAwOCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRp bHMvYWR0L2pzb24uYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvanNvbi5jCkBAIC02 MzEsMTMgKzYzMSwxMyBAQCBEYXR1bQogYXJyYXlfdG9fanNvbihQR19GVU5DVElPTl9BUkdT KQogewogCURhdHVtCQlhcnJheSA9IFBHX0dFVEFSR19EQVRVTSgwKTsKLQlTdHJpbmdJbmZv CXJlc3VsdDsKKwlTdHJpbmdJbmZvRGF0YSByZXN1bHQ7CiAKLQlyZXN1bHQgPSBtYWtlU3Ry aW5nSW5mbygpOworCWluaXRTdHJpbmdJbmZvKCZyZXN1bHQpOwogCi0JYXJyYXlfdG9fanNv bl9pbnRlcm5hbChhcnJheSwgcmVzdWx0LCBmYWxzZSk7CisJYXJyYXlfdG9fanNvbl9pbnRl cm5hbChhcnJheSwgJnJlc3VsdCwgZmFsc2UpOwogCi0JUEdfUkVUVVJOX1RFWFRfUChjc3Ry aW5nX3RvX3RleHRfd2l0aF9sZW4ocmVzdWx0LT5kYXRhLCByZXN1bHQtPmxlbikpOworCVBH X1JFVFVSTl9URVhUX1AoY3N0cmluZ190b190ZXh0X3dpdGhfbGVuKHJlc3VsdC5kYXRhLCBy ZXN1bHQubGVuKSk7CiB9CiAKIC8qCkBAIC02NDgsMTMgKzY0OCwxMyBAQCBhcnJheV90b19q c29uX3ByZXR0eShQR19GVU5DVElPTl9BUkdTKQogewogCURhdHVtCQlhcnJheSA9IFBHX0dF VEFSR19EQVRVTSgwKTsKIAlib29sCQl1c2VfbGluZV9mZWVkcyA9IFBHX0dFVEFSR19CT09M KDEpOwotCVN0cmluZ0luZm8JcmVzdWx0OworCVN0cmluZ0luZm9EYXRhIHJlc3VsdDsKIAot CXJlc3VsdCA9IG1ha2VTdHJpbmdJbmZvKCk7CisJaW5pdFN0cmluZ0luZm8oJnJlc3VsdCk7 CiAKLQlhcnJheV90b19qc29uX2ludGVybmFsKGFycmF5LCByZXN1bHQsIHVzZV9saW5lX2Zl ZWRzKTsKKwlhcnJheV90b19qc29uX2ludGVybmFsKGFycmF5LCAmcmVzdWx0LCB1c2VfbGlu ZV9mZWVkcyk7CiAKLQlQR19SRVRVUk5fVEVYVF9QKGNzdHJpbmdfdG9fdGV4dF93aXRoX2xl bihyZXN1bHQtPmRhdGEsIHJlc3VsdC0+bGVuKSk7CisJUEdfUkVUVVJOX1RFWFRfUChjc3Ry aW5nX3RvX3RleHRfd2l0aF9sZW4ocmVzdWx0LmRhdGEsIHJlc3VsdC5sZW4pKTsKIH0KIAog LyoKQEAgLTY2NCwxMyArNjY0LDEzIEBAIERhdHVtCiByb3dfdG9fanNvbihQR19GVU5DVElP Tl9BUkdTKQogewogCURhdHVtCQlhcnJheSA9IFBHX0dFVEFSR19EQVRVTSgwKTsKLQlTdHJp bmdJbmZvCXJlc3VsdDsKKwlTdHJpbmdJbmZvRGF0YSByZXN1bHQ7CiAKLQlyZXN1bHQgPSBt YWtlU3RyaW5nSW5mbygpOworCWluaXRTdHJpbmdJbmZvKCZyZXN1bHQpOwogCi0JY29tcG9z aXRlX3RvX2pzb24oYXJyYXksIHJlc3VsdCwgZmFsc2UpOworCWNvbXBvc2l0ZV90b19qc29u KGFycmF5LCAmcmVzdWx0LCBmYWxzZSk7CiAKLQlQR19SRVRVUk5fVEVYVF9QKGNzdHJpbmdf dG9fdGV4dF93aXRoX2xlbihyZXN1bHQtPmRhdGEsIHJlc3VsdC0+bGVuKSk7CisJUEdfUkVU VVJOX1RFWFRfUChjc3RyaW5nX3RvX3RleHRfd2l0aF9sZW4ocmVzdWx0LmRhdGEsIHJlc3Vs dC5sZW4pKTsKIH0KIAogLyoKQEAgLTY4MSwxMyArNjgxLDEzIEBAIHJvd190b19qc29uX3By ZXR0eShQR19GVU5DVElPTl9BUkdTKQogewogCURhdHVtCQlhcnJheSA9IFBHX0dFVEFSR19E QVRVTSgwKTsKIAlib29sCQl1c2VfbGluZV9mZWVkcyA9IFBHX0dFVEFSR19CT09MKDEpOwot CVN0cmluZ0luZm8JcmVzdWx0OworCVN0cmluZ0luZm9EYXRhIHJlc3VsdDsKIAotCXJlc3Vs dCA9IG1ha2VTdHJpbmdJbmZvKCk7CisJaW5pdFN0cmluZ0luZm8oJnJlc3VsdCk7CiAKLQlj b21wb3NpdGVfdG9fanNvbihhcnJheSwgcmVzdWx0LCB1c2VfbGluZV9mZWVkcyk7CisJY29t cG9zaXRlX3RvX2pzb24oYXJyYXksICZyZXN1bHQsIHVzZV9saW5lX2ZlZWRzKTsKIAotCVBH X1JFVFVSTl9URVhUX1AoY3N0cmluZ190b190ZXh0X3dpdGhfbGVuKHJlc3VsdC0+ZGF0YSwg cmVzdWx0LT5sZW4pKTsKKwlQR19SRVRVUk5fVEVYVF9QKGNzdHJpbmdfdG9fdGV4dF93aXRo X2xlbihyZXN1bHQuZGF0YSwgcmVzdWx0LmxlbikpOwogfQogCiAvKgpAQCAtNzYzLDEyICs3 NjMsMTMgQEAgdG9fanNvbihQR19GVU5DVElPTl9BUkdTKQogRGF0dW0KIGRhdHVtX3RvX2pz b24oRGF0dW0gdmFsLCBKc29uVHlwZUNhdGVnb3J5IHRjYXRlZ29yeSwgT2lkIG91dGZ1bmNv aWQpCiB7Ci0JU3RyaW5nSW5mbwlyZXN1bHQgPSBtYWtlU3RyaW5nSW5mbygpOworCVN0cmlu Z0luZm9EYXRhIHJlc3VsdDsKIAotCWRhdHVtX3RvX2pzb25faW50ZXJuYWwodmFsLCBmYWxz ZSwgcmVzdWx0LCB0Y2F0ZWdvcnksIG91dGZ1bmNvaWQsCisJaW5pdFN0cmluZ0luZm8oJnJl c3VsdCk7CisJZGF0dW1fdG9fanNvbl9pbnRlcm5hbCh2YWwsIGZhbHNlLCAmcmVzdWx0LCB0 Y2F0ZWdvcnksIG91dGZ1bmNvaWQsCiAJCQkJCQkgICBmYWxzZSk7CiAKLQlyZXR1cm4gUG9p bnRlckdldERhdHVtKGNzdHJpbmdfdG9fdGV4dF93aXRoX2xlbihyZXN1bHQtPmRhdGEsIHJl c3VsdC0+bGVuKSk7CisJcmV0dXJuIFBvaW50ZXJHZXREYXR1bShjc3RyaW5nX3RvX3RleHRf d2l0aF9sZW4ocmVzdWx0LmRhdGEsIHJlc3VsdC5sZW4pKTsKIH0KIAogLyoKQEAgLTEzNDcs MjUgKzEzNDgsMjUgQEAganNvbl9idWlsZF9hcnJheV93b3JrZXIoaW50IG5hcmdzLCBjb25z dCBEYXR1bSAqYXJncywgY29uc3QgYm9vbCAqbnVsbHMsIGNvbnN0IE8KIHsKIAlpbnQJCQlp OwogCWNvbnN0IGNoYXIgKnNlcCA9ICIiOwotCVN0cmluZ0luZm8JcmVzdWx0OworCVN0cmlu Z0luZm9EYXRhIHJlc3VsdDsKIAotCXJlc3VsdCA9IG1ha2VTdHJpbmdJbmZvKCk7CisJaW5p dFN0cmluZ0luZm8oJnJlc3VsdCk7CiAKLQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihyZXN1bHQs ICdbJyk7CisJYXBwZW5kU3RyaW5nSW5mb0NoYXIoJnJlc3VsdCwgJ1snKTsKIAogCWZvciAo aSA9IDA7IGkgPCBuYXJnczsgaSsrKQogCXsKIAkJaWYgKGFic2VudF9vbl9udWxsICYmIG51 bGxzW2ldKQogCQkJY29udGludWU7CiAKLQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhyZXN1 bHQsIHNlcCk7CisJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJnJlc3VsdCwgc2VwKTsKIAkJ c2VwID0gIiwgIjsKLQkJYWRkX2pzb24oYXJnc1tpXSwgbnVsbHNbaV0sIHJlc3VsdCwgdHlw ZXNbaV0sIGZhbHNlKTsKKwkJYWRkX2pzb24oYXJnc1tpXSwgbnVsbHNbaV0sICZyZXN1bHQs IHR5cGVzW2ldLCBmYWxzZSk7CiAJfQogCi0JYXBwZW5kU3RyaW5nSW5mb0NoYXIocmVzdWx0 LCAnXScpOworCWFwcGVuZFN0cmluZ0luZm9DaGFyKCZyZXN1bHQsICddJyk7CiAKLQlyZXR1 cm4gUG9pbnRlckdldERhdHVtKGNzdHJpbmdfdG9fdGV4dF93aXRoX2xlbihyZXN1bHQtPmRh dGEsIHJlc3VsdC0+bGVuKSk7CisJcmV0dXJuIFBvaW50ZXJHZXREYXR1bShjc3RyaW5nX3Rv X3RleHRfd2l0aF9sZW4ocmVzdWx0LmRhdGEsIHJlc3VsdC5sZW4pKTsKIH0KIAogLyoKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29uYi5jIGIvc3JjL2JhY2tlbmQv dXRpbHMvYWR0L2pzb25iLmMKaW5kZXggZGE5NGQ0MjRkNjEuLmY3ZTNkODRmMjE2IDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvanNvbmIuYworKysgYi9zcmMvYmFja2Vu ZC91dGlscy9hZHQvanNvbmIuYwpAQCAtMTI1LDE1ICsxMjUsMTUgQEAganNvbmJfc2VuZChQ R19GVU5DVElPTl9BUkdTKQogewogCUpzb25iCSAgICpqYiA9IFBHX0dFVEFSR19KU09OQl9Q KDApOwogCVN0cmluZ0luZm9EYXRhIGJ1ZjsKLQlTdHJpbmdJbmZvCWp0ZXh0ID0gbWFrZVN0 cmluZ0luZm8oKTsKKwlTdHJpbmdJbmZvRGF0YSBqdGV4dDsKIAlpbnQJCQl2ZXJzaW9uID0g MTsKIAotCSh2b2lkKSBKc29uYlRvQ1N0cmluZyhqdGV4dCwgJmpiLT5yb290LCBWQVJTSVpF KGpiKSk7CisJaW5pdFN0cmluZ0luZm8oJmp0ZXh0KTsKKwkodm9pZCkgSnNvbmJUb0NTdHJp bmcoJmp0ZXh0LCAmamItPnJvb3QsIFZBUlNJWkUoamIpKTsKIAogCXBxX2JlZ2ludHlwc2Vu ZCgmYnVmKTsKIAlwcV9zZW5kaW50OCgmYnVmLCB2ZXJzaW9uKTsKLQlwcV9zZW5kdGV4dCgm YnVmLCBqdGV4dC0+ZGF0YSwganRleHQtPmxlbik7Ci0JZGVzdHJveVN0cmluZ0luZm8oanRl eHQpOworCXBxX3NlbmR0ZXh0KCZidWYsIGp0ZXh0LmRhdGEsIGp0ZXh0Lmxlbik7CiAKIAlQ R19SRVRVUk5fQllURUFfUChwcV9lbmR0eXBzZW5kKCZidWYpKTsKIH0KZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29uZnVuY3MuYyBiL3NyYy9iYWNrZW5kL3V0aWxz L2FkdC9qc29uZnVuY3MuYwppbmRleCA0MTg2Mjg3MmU4YS4uOTM2Y2Q5ZGNkOWEgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29uZnVuY3MuYworKysgYi9zcmMvYmFj a2VuZC91dGlscy9hZHQvanNvbmZ1bmNzLmMKQEAgLTQ2MDcsMTEgKzQ2MDcsMTIgQEAgRGF0 dW0KIGpzb25iX3ByZXR0eShQR19GVU5DVElPTl9BUkdTKQogewogCUpzb25iCSAgICpqYiA9 IFBHX0dFVEFSR19KU09OQl9QKDApOwotCVN0cmluZ0luZm8Jc3RyID0gbWFrZVN0cmluZ0lu Zm8oKTsKKwlTdHJpbmdJbmZvRGF0YSBzdHI7CiAKLQlKc29uYlRvQ1N0cmluZ0luZGVudChz dHIsICZqYi0+cm9vdCwgVkFSU0laRShqYikpOworCWluaXRTdHJpbmdJbmZvKCZzdHIpOwor CUpzb25iVG9DU3RyaW5nSW5kZW50KCZzdHIsICZqYi0+cm9vdCwgVkFSU0laRShqYikpOwog Ci0JUEdfUkVUVVJOX1RFWFRfUChjc3RyaW5nX3RvX3RleHRfd2l0aF9sZW4oc3RyLT5kYXRh LCBzdHItPmxlbikpOworCVBHX1JFVFVSTl9URVhUX1AoY3N0cmluZ190b190ZXh0X3dpdGhf bGVuKHN0ci5kYXRhLCBzdHIubGVuKSk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC91dGlscy9hZHQvbXVsdGlyYW5nZXR5cGVzLmMgYi9zcmMvYmFja2VuZC91dGlscy9h ZHQvbXVsdGlyYW5nZXR5cGVzLmMKaW5kZXggODQ3MzNkYzUwMTkuLmU5MzNiOGRjMDJmIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvbXVsdGlyYW5nZXR5cGVzLmMKKysr IGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L211bHRpcmFuZ2V0eXBlcy5jCkBAIC0zNzgsMTcg KzM3OCwxOCBAQCBtdWx0aXJhbmdlX3NlbmQoUEdfRlVOQ1RJT05fQVJHUykKIHsKIAlNdWx0 aXJhbmdlVHlwZSAqbXVsdGlyYW5nZSA9IFBHX0dFVEFSR19NVUxUSVJBTkdFX1AoMCk7CiAJ T2lkCQkJbWx0cm5ndHlwb2lkID0gTXVsdGlyYW5nZVR5cGVHZXRPaWQobXVsdGlyYW5nZSk7 Ci0JU3RyaW5nSW5mbwlidWYgPSBtYWtlU3RyaW5nSW5mbygpOworCVN0cmluZ0luZm9EYXRh IGJ1ZjsKIAlSYW5nZVR5cGUgKipyYW5nZXM7CiAJaW50MzIJCXJhbmdlX2NvdW50OwogCU11 bHRpcmFuZ2VJT0RhdGEgKmNhY2hlOwogCisJaW5pdFN0cmluZ0luZm8oJmJ1Zik7CiAJY2Fj aGUgPSBnZXRfbXVsdGlyYW5nZV9pb19kYXRhKGZjaW5mbywgbWx0cm5ndHlwb2lkLCBJT0Z1 bmNfc2VuZCk7CiAKIAkvKiBjb25zdHJ1Y3Qgb3V0cHV0ICovCi0JcHFfYmVnaW50eXBzZW5k KGJ1Zik7CisJcHFfYmVnaW50eXBzZW5kKCZidWYpOwogCi0JcHFfc2VuZGludDMyKGJ1Ziwg bXVsdGlyYW5nZS0+cmFuZ2VDb3VudCk7CisJcHFfc2VuZGludDMyKCZidWYsIG11bHRpcmFu Z2UtPnJhbmdlQ291bnQpOwogCiAJbXVsdGlyYW5nZV9kZXNlcmlhbGl6ZShjYWNoZS0+dHlw Y2FjaGUtPnJuZ3R5cGUsIG11bHRpcmFuZ2UsICZyYW5nZV9jb3VudCwgJnJhbmdlcyk7CiAJ Zm9yIChpbnQgaSA9IDA7IGkgPCByYW5nZV9jb3VudDsgaSsrKQpAQCAtMzk5LDExICs0MDAs MTIgQEAgbXVsdGlyYW5nZV9zZW5kKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCXJhbmdlID0gUmFu Z2VUeXBlUEdldERhdHVtKHJhbmdlc1tpXSk7CiAJCW91dHB1dGJ5dGVzID0gU2VuZEZ1bmN0 aW9uQ2FsbCgmY2FjaGUtPnR5cGlvcHJvYywgcmFuZ2UpOwogCi0JCXBxX3NlbmRpbnQzMihi dWYsIFZBUlNJWkUob3V0cHV0Ynl0ZXMpIC0gVkFSSERSU1opOwotCQlwcV9zZW5kYnl0ZXMo YnVmLCBWQVJEQVRBKG91dHB1dGJ5dGVzKSwgVkFSU0laRShvdXRwdXRieXRlcykgLSBWQVJI RFJTWik7CisJCXBxX3NlbmRpbnQzMigmYnVmLCBWQVJTSVpFKG91dHB1dGJ5dGVzKSAtIFZB UkhEUlNaKTsKKwkJcHFfc2VuZGJ5dGVzKCZidWYsIFZBUkRBVEEob3V0cHV0Ynl0ZXMpLAor CQkJCQkgVkFSU0laRShvdXRwdXRieXRlcykgLSBWQVJIRFJTWik7CiAJfQogCi0JUEdfUkVU VVJOX0JZVEVBX1AocHFfZW5kdHlwc2VuZChidWYpKTsKKwlQR19SRVRVUk5fQllURUFfUChw cV9lbmR0eXBzZW5kKCZidWYpKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L3V0aWxzL2FkdC9yYW5nZXR5cGVzLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvcmFuZ2V0 eXBlcy5jCmluZGV4IDBiMmFkOGIwOTc1Li5jMDE2ODI1YTAwZSAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvdXRpbHMvYWR0L3JhbmdldHlwZXMuYworKysgYi9zcmMvYmFja2VuZC91dGls cy9hZHQvcmFuZ2V0eXBlcy5jCkBAIC0yNjQsMTMgKzI2NCwxNCBAQCBEYXR1bQogcmFuZ2Vf c2VuZChQR19GVU5DVElPTl9BUkdTKQogewogCVJhbmdlVHlwZSAgKnJhbmdlID0gUEdfR0VU QVJHX1JBTkdFX1AoMCk7Ci0JU3RyaW5nSW5mbwlidWYgPSBtYWtlU3RyaW5nSW5mbygpOwor CVN0cmluZ0luZm9EYXRhIGJ1ZjsKIAlSYW5nZUlPRGF0YSAqY2FjaGU7CiAJY2hhcgkJZmxh Z3M7CiAJUmFuZ2VCb3VuZAlsb3dlcjsKIAlSYW5nZUJvdW5kCXVwcGVyOwogCWJvb2wJCWVt cHR5OwogCisJaW5pdFN0cmluZ0luZm8oJmJ1Zik7CiAJY2hlY2tfc3RhY2tfZGVwdGgoKTsJ CS8qIHJlY3Vyc2VzIHdoZW4gc3VidHlwZSBpcyBhIHJhbmdlIHR5cGUgKi8KIAogCWNhY2hl ID0gZ2V0X3JhbmdlX2lvX2RhdGEoZmNpbmZvLCBSYW5nZVR5cGVHZXRPaWQocmFuZ2UpLCBJ T0Z1bmNfc2VuZCk7CkBAIC0yODAsOSArMjgxLDkgQEAgcmFuZ2Vfc2VuZChQR19GVU5DVElP Tl9BUkdTKQogCWZsYWdzID0gcmFuZ2VfZ2V0X2ZsYWdzKHJhbmdlKTsKIAogCS8qIGNvbnN0 cnVjdCBvdXRwdXQgKi8KLQlwcV9iZWdpbnR5cHNlbmQoYnVmKTsKKwlwcV9iZWdpbnR5cHNl bmQoJmJ1Zik7CiAKLQlwcV9zZW5kYnl0ZShidWYsIGZsYWdzKTsKKwlwcV9zZW5kYnl0ZSgm YnVmLCBmbGFncyk7CiAKIAlpZiAoUkFOR0VfSEFTX0xCT1VORChmbGFncykpCiAJewpAQCAt MjkwLDggKzI5MSw4IEBAIHJhbmdlX3NlbmQoUEdfRlVOQ1RJT05fQVJHUykKIAkJdWludDMy CQlib3VuZF9sZW4gPSBWQVJTSVpFKGJvdW5kKSAtIFZBUkhEUlNaOwogCQljaGFyCSAgICpi b3VuZF9kYXRhID0gVkFSREFUQShib3VuZCk7CiAKLQkJcHFfc2VuZGludDMyKGJ1ZiwgYm91 bmRfbGVuKTsKLQkJcHFfc2VuZGJ5dGVzKGJ1ZiwgYm91bmRfZGF0YSwgYm91bmRfbGVuKTsK KwkJcHFfc2VuZGludDMyKCZidWYsIGJvdW5kX2xlbik7CisJCXBxX3NlbmRieXRlcygmYnVm LCBib3VuZF9kYXRhLCBib3VuZF9sZW4pOwogCX0KIAogCWlmIChSQU5HRV9IQVNfVUJPVU5E KGZsYWdzKSkKQEAgLTMwMCwxMSArMzAxLDExIEBAIHJhbmdlX3NlbmQoUEdfRlVOQ1RJT05f QVJHUykKIAkJdWludDMyCQlib3VuZF9sZW4gPSBWQVJTSVpFKGJvdW5kKSAtIFZBUkhEUlNa OwogCQljaGFyCSAgICpib3VuZF9kYXRhID0gVkFSREFUQShib3VuZCk7CiAKLQkJcHFfc2Vu ZGludDMyKGJ1ZiwgYm91bmRfbGVuKTsKLQkJcHFfc2VuZGJ5dGVzKGJ1ZiwgYm91bmRfZGF0 YSwgYm91bmRfbGVuKTsKKwkJcHFfc2VuZGludDMyKCZidWYsIGJvdW5kX2xlbik7CisJCXBx X3NlbmRieXRlcygmYnVmLCBib3VuZF9kYXRhLCBib3VuZF9sZW4pOwogCX0KIAotCVBHX1JF VFVSTl9CWVRFQV9QKHBxX2VuZHR5cHNlbmQoYnVmKSk7CisJUEdfUkVUVVJOX0JZVEVBX1Ao cHFfZW5kdHlwc2VuZCgmYnVmKSk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC91dGlscy9hZHQveG1sLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQveG1sLmMKaW5kZXgg MzVjOTE1NTczYTEuLmI2MDgwODhkMWUyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGls cy9hZHQveG1sLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3htbC5jCkBAIC0yMTMz LDcgKzIxMzMsNyBAQCB4bWxfZXJyb3JIYW5kbGVyKHZvaWQgKmRhdGEsIFBnWG1sRXJyb3JQ dHIgZXJyb3IpCiAJCQkJCQkgICBub2RlLT50eXBlID09IFhNTF9FTEVNRU5UX05PREUpID8g bm9kZS0+bmFtZSA6IE5VTEw7CiAJaW50CQkJZG9tYWluID0gZXJyb3ItPmRvbWFpbjsKIAlp bnQJCQlsZXZlbCA9IGVycm9yLT5sZXZlbDsKLQlTdHJpbmdJbmZvCWVycm9yQnVmOworCVN0 cmluZ0luZm9EYXRhIGVycm9yQnVmOwogCiAJLyoKIAkgKiBEZWZlbmQgYWdhaW5zdCBzb21l b25lIHBhc3NpbmcgdXMgYSBib2d1cyBjb250ZXh0IHN0cnVjdC4KQEAgLTIyMTAsMTYgKzIy MTAsMTYgQEAgeG1sX2Vycm9ySGFuZGxlcih2b2lkICpkYXRhLCBQZ1htbEVycm9yUHRyIGVy cm9yKQogCX0KIAogCS8qIFByZXBhcmUgZXJyb3IgbWVzc2FnZSBpbiBlcnJvckJ1ZiAqLwot CWVycm9yQnVmID0gbWFrZVN0cmluZ0luZm8oKTsKKwlpbml0U3RyaW5nSW5mbygmZXJyb3JC dWYpOwogCiAJaWYgKGVycm9yLT5saW5lID4gMCkKLQkJYXBwZW5kU3RyaW5nSW5mbyhlcnJv ckJ1ZiwgImxpbmUgJWQ6ICIsIGVycm9yLT5saW5lKTsKKwkJYXBwZW5kU3RyaW5nSW5mbygm ZXJyb3JCdWYsICJsaW5lICVkOiAiLCBlcnJvci0+bGluZSk7CiAJaWYgKG5hbWUgIT0gTlVM TCkKLQkJYXBwZW5kU3RyaW5nSW5mbyhlcnJvckJ1ZiwgImVsZW1lbnQgJXM6ICIsIG5hbWUp OworCQlhcHBlbmRTdHJpbmdJbmZvKCZlcnJvckJ1ZiwgImVsZW1lbnQgJXM6ICIsIG5hbWUp OwogCWlmIChlcnJvci0+bWVzc2FnZSAhPSBOVUxMKQotCQlhcHBlbmRTdHJpbmdJbmZvU3Ry aW5nKGVycm9yQnVmLCBlcnJvci0+bWVzc2FnZSk7CisJCWFwcGVuZFN0cmluZ0luZm9TdHJp bmcoJmVycm9yQnVmLCBlcnJvci0+bWVzc2FnZSk7CiAJZWxzZQotCQlhcHBlbmRTdHJpbmdJ bmZvU3RyaW5nKGVycm9yQnVmLCAiKG5vIG1lc3NhZ2UgcHJvdmlkZWQpIik7CisJCWFwcGVu ZFN0cmluZ0luZm9TdHJpbmcoJmVycm9yQnVmLCAiKG5vIG1lc3NhZ2UgcHJvdmlkZWQpIik7 CiAKIAkvKgogCSAqIEFwcGVuZCBjb250ZXh0IGluZm9ybWF0aW9uIHRvIGVycm9yQnVmLgpA QCAtMjIzNywxMSArMjIzNywxMSBAQCB4bWxfZXJyb3JIYW5kbGVyKHZvaWQgKmRhdGEsIFBn WG1sRXJyb3JQdHIgZXJyb3IpCiAJCXhtbEdlbmVyaWNFcnJvckZ1bmMgZXJyRnVuY1NhdmVk ID0geG1sR2VuZXJpY0Vycm9yOwogCQl2b2lkCSAgICplcnJDdHhTYXZlZCA9IHhtbEdlbmVy aWNFcnJvckNvbnRleHQ7CiAKLQkJeG1sU2V0R2VuZXJpY0Vycm9yRnVuYyhlcnJvckJ1ZiwK KwkJeG1sU2V0R2VuZXJpY0Vycm9yRnVuYygmZXJyb3JCdWYsCiAJCQkJCQkJICAgKHhtbEdl bmVyaWNFcnJvckZ1bmMpIGFwcGVuZFN0cmluZ0luZm8pOwogCiAJCS8qIEFkZCBjb250ZXh0 IGluZm9ybWF0aW9uIHRvIGVycm9yQnVmICovCi0JCWFwcGVuZFN0cmluZ0luZm9MaW5lU2Vw YXJhdG9yKGVycm9yQnVmKTsKKwkJYXBwZW5kU3RyaW5nSW5mb0xpbmVTZXBhcmF0b3IoJmVy cm9yQnVmKTsKIAogCQl4bWxQYXJzZXJQcmludEZpbGVDb250ZXh0KGlucHV0KTsKIApAQCAt MjI1MCw3ICsyMjUwLDcgQEAgeG1sX2Vycm9ySGFuZGxlcih2b2lkICpkYXRhLCBQZ1htbEVy cm9yUHRyIGVycm9yKQogCX0KIAogCS8qIEdldCByaWQgb2YgYW55IHRyYWlsaW5nIG5ld2xp bmVzIGluIGVycm9yQnVmICovCi0JY2hvcFN0cmluZ0luZm9OZXdsaW5lcyhlcnJvckJ1Zik7 CisJY2hvcFN0cmluZ0luZm9OZXdsaW5lcygmZXJyb3JCdWYpOwogCiAJLyoKIAkgKiBMZWdh Y3kgZXJyb3IgaGFuZGxpbmcgbW9kZS4gIGVycl9vY2N1cnJlZCBpcyBuZXZlciBzZXQsIHdl IGp1c3QgYWRkIHRoZQpAQCAtMjI2MywxMCArMjI2Myw5IEBAIHhtbF9lcnJvckhhbmRsZXIo dm9pZCAqZGF0YSwgUGdYbWxFcnJvclB0ciBlcnJvcikKIAlpZiAoeG1sZXJyY3h0LT5zdHJp Y3RuZXNzID09IFBHX1hNTF9TVFJJQ1RORVNTX0xFR0FDWSkKIAl7CiAJCWFwcGVuZFN0cmlu Z0luZm9MaW5lU2VwYXJhdG9yKCZ4bWxlcnJjeHQtPmVycl9idWYpOwotCQlhcHBlbmRCaW5h cnlTdHJpbmdJbmZvKCZ4bWxlcnJjeHQtPmVycl9idWYsIGVycm9yQnVmLT5kYXRhLAotCQkJ CQkJCSAgIGVycm9yQnVmLT5sZW4pOworCQlhcHBlbmRCaW5hcnlTdHJpbmdJbmZvKCZ4bWxl cnJjeHQtPmVycl9idWYsIGVycm9yQnVmLmRhdGEsCisJCQkJCQkJICAgZXJyb3JCdWYubGVu KTsKIAotCQlkZXN0cm95U3RyaW5nSW5mbyhlcnJvckJ1Zik7CiAJCXJldHVybjsKIAl9CiAK QEAgLTIyODEsMjMgKzIyODAsMjEgQEAgeG1sX2Vycm9ySGFuZGxlcih2b2lkICpkYXRhLCBQ Z1htbEVycm9yUHRyIGVycm9yKQogCWlmIChsZXZlbCA+PSBYTUxfRVJSX0VSUk9SKQogCXsK IAkJYXBwZW5kU3RyaW5nSW5mb0xpbmVTZXBhcmF0b3IoJnhtbGVycmN4dC0+ZXJyX2J1Zik7 Ci0JCWFwcGVuZEJpbmFyeVN0cmluZ0luZm8oJnhtbGVycmN4dC0+ZXJyX2J1ZiwgZXJyb3JC dWYtPmRhdGEsCi0JCQkJCQkJICAgZXJyb3JCdWYtPmxlbik7CisJCWFwcGVuZEJpbmFyeVN0 cmluZ0luZm8oJnhtbGVycmN4dC0+ZXJyX2J1ZiwgZXJyb3JCdWYuZGF0YSwKKwkJCQkJCQkg ICBlcnJvckJ1Zi5sZW4pOwogCiAJCXhtbGVycmN4dC0+ZXJyX29jY3VycmVkID0gdHJ1ZTsK IAl9CiAJZWxzZSBpZiAobGV2ZWwgPj0gWE1MX0VSUl9XQVJOSU5HKQogCXsKIAkJZXJlcG9y dChXQVJOSU5HLAotCQkJCShlcnJtc2dfaW50ZXJuYWwoIiVzIiwgZXJyb3JCdWYtPmRhdGEp KSk7CisJCQkJKGVycm1zZ19pbnRlcm5hbCgiJXMiLCBlcnJvckJ1Zi5kYXRhKSkpOwogCX0K IAllbHNlCiAJewogCQllcmVwb3J0KE5PVElDRSwKLQkJCQkoZXJybXNnX2ludGVybmFsKCIl cyIsIGVycm9yQnVmLT5kYXRhKSkpOworCQkJCShlcnJtc2dfaW50ZXJuYWwoIiVzIiwgZXJy b3JCdWYuZGF0YSkpKTsKIAl9Ci0KLQlkZXN0cm95U3RyaW5nSW5mbyhlcnJvckJ1Zik7CiB9 CiAKIAotLSAKMi40My4wCgo= --------------6abY820HGcb9Qu01rO81MC50--