Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nZG94-0006pj-Bs for pgsql-hackers@arkaria.postgresql.org; Tue, 29 Mar 2022 18:00:43 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1nZG93-0006ad-8W for pgsql-hackers@arkaria.postgresql.org; Tue, 29 Mar 2022 18:00:41 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nZG92-0006aU-F7 for pgsql-hackers@lists.postgresql.org; Tue, 29 Mar 2022 18:00:40 +0000 Received: from mail-ej1-x62b.google.com ([2a00:1450:4864:20::62b]) by magus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1nZG8w-0000Xt-4Y for pgsql-hackers@lists.postgresql.org; Tue, 29 Mar 2022 18:00:40 +0000 Received: by mail-ej1-x62b.google.com with SMTP id lr4so28290949ejb.11 for ; Tue, 29 Mar 2022 11:00:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=enterprisedb.com; s=google; h=message-id:date:mime-version:user-agent:subject:content-language:to :cc:references:from:in-reply-to; bh=y183aB8eayw+CW3aVpKGW9LvTXLja6cofPkoaUJyQTs=; b=FdpEVPDpf2cP7JQ6qsMVACsBtgFK68xd/Jx7rC/djs1GnE90/5fzzMMmwTNk+e1o+/ TFjfgOCLZjg7pXea+Gj7KQ8nNrkMYVGy7tzUa3bA1kQU7iHscFWJSlIzpwBdzs3W+LCb UVi3hjWfeSeGiEomRLewb9vtA0kXI5WHdc1VFQ7pjYOjL9WgfCRf0Sp+J9TAOXGefcoD snl5neJLhb0oSA84HHGdifPTODCiWw3cI6qcQMb8PQzfM7AQRoKHLuCiOAgFUW2BSJfJ Dz5ZX9WAupOyqA8uGVtCPveMJ+ij4D6XN8ijwZJF4X1Mpkjcl+bArKMZynFj4iyfnXzh y07w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:message-id:date:mime-version:user-agent:subject :content-language:to:cc:references:from:in-reply-to; bh=y183aB8eayw+CW3aVpKGW9LvTXLja6cofPkoaUJyQTs=; b=U/W68e9QRgfQyNIzqeyIr5sk4Kl23RsanaqdwuyEN6ZJzexVpwQ9WsfwNRn0YiIU1S lahsKoS1qcuIhFKj3tSFzwsGykurybPz1grC5iocgM77VaHWA7UekzzQNgtgFHXjQP8V Cun7BZA/mC36/cKeqanaD4OGfhzQVu8XFdsxxbwz4vtAMJcPD9F7XsWUvQP53BpxWG1z Mhe4sagrFRFYBmSL7S1rDguLDcSoPQK5mkoxn24i+E/BSNwZEX45vAKMsgLgtHZOAlh/ Uh4HnUVvlEA/Ws9IDKrNmZgx+cOaJ/OeKeTl8u5G0SMuXuOloE/pfpGqhd5HUCywDyPs 320w== X-Gm-Message-State: AOAM533l+poFeOTUT8Olv0NVjeXD43TZ0EzsNdaOgV7Y3eHyPNptHnpw x9SfXqNBgU77UzRsKZjEoE4J8yPOgvHPGEqoFrX9BtSV0tYOtwXygbEne2rtWJStCSG4sjyOC+w wKlN+Dx26+3Cf5reD8hKA4Jh9H0Y+bWEMZ03QsZHqJNmhA1n87B/TQVKMBzHr6Hf3Qi7jE+bZik BEmBkFCUK0E71n1WNaIx2Wz/sN3mYOAwcxBT7ESMDWjEkD8Svr7g2m X-Google-Smtp-Source: ABdhPJyeCsznQsQ+wc9VFz5SGEFeUiiXHM+5FoeGcJC9qrPSW+tO6UqfhpfocuXYJ+AStaIUk4CVYg== X-Received: by 2002:a17:907:9805:b0:6db:4c33:7883 with SMTP id ji5-20020a170907980500b006db4c337883mr36939430ejc.555.1648576832529; Tue, 29 Mar 2022 11:00:32 -0700 (PDT) Received: from [10.137.0.17] (ip-86-49-250-165.net.upcbroadband.cz. [86.49.250.165]) by smtp.gmail.com with ESMTPSA id qb10-20020a1709077e8a00b006dfedd50ce3sm7354433ejc.143.2022.03.29.11.00.31 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 29 Mar 2022 11:00:32 -0700 (PDT) Content-Type: multipart/mixed; boundary="------------SJuT9jwVxrByFnZ3US0uWQs7" Message-ID: <7a80a207-5e8e-b80c-476c-2d290b0526e9@enterprisedb.com> Date: Tue, 29 Mar 2022 20:00:29 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.7.0 Subject: Re: POC: GROUP BY optimization Content-Language: en-US To: Zhihong Yu Cc: "Andrey V. Lepikhov" , Teodor Sigaev , Tomas Vondra , PostgreSQL Developers References: <22c44f98-bfa8-8630-62b5-5155e11eb284@enterprisedb.com> <006667af-fc50-0627-4be7-5d9cf665219f@enterprisedb.com> <4ee5b15c-1ce0-59c7-8d4a-a1fd68ee0d12@postgrespro.ru> <721b3ff9-f214-f5d4-86c7-bae515bbec18@enterprisedb.com> <7bea462e-8c3e-0f8c-c7d5-f4daa12f3baf@postgrespro.ru> <9af89543-3d17-4c98-59de-1daa5bceeb06@enterprisedb.com> <9408e450-60c6-6fbc-d5c4-467bb0abfe67@postgrespro.ru> <44472925-f6c6-e8de-6f72-0451458532c4@enterprisedb.com> From: Tomas Vondra In-Reply-To: X-CLOUD-SEC-AV-Info: enterprisedb,google_mail,monitor X-CLOUD-SEC-AV-Sent: true X-Gm-Spam: 0 X-Gm-Phishy: 0 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. --------------SJuT9jwVxrByFnZ3US0uWQs7 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit On 3/29/22 04:02, Zhihong Yu wrote: > > > On Mon, Mar 28, 2022 at 5:49 PM Tomas Vondra > > > wrote: > > Hi, > > Here's a rebased/improved version of the patch, with smaller parts > addressing various issues. There are seven parts: > > 0001 - main part, just rebased > > 0002 - replace the debug GUC options with a single GUC to disable the >        optimization if needed > > 0003 - minor code cleanup, removal of unnecessary variable > > 0004 - various comment fixes (rewordings, typos, ...) > > 0005 - a minor code simplification, addressing FIXMEs from 0004 > > 0006 - adds the new GUC to the docs > > 0007 - demonstrates plan changes with a disabled optimization > > The first 6 parts should be squashed and committed at one, I only kept > them separate for clarity. The 0007 is merely a demonstration of the new > GUC and that it disables the optimization. > > > Agree. Because it is a kind of automation we should allow user to > switch > > it off in the case of problems or manual tuning. > > > Also, I looked through this patch. It has some minor problems: > > 1. Multiple typos in the patch comment. > > I went through the comments and checked all of them for grammar mistakes > and typos using a word processor, so hopefully that should be OK. But > maybe there's still something wrong. > > > 2. The term 'cardinality of a key' - may be replace with 'number of > > duplicates'? > > No, cardinality means "number of distinct values", so "duplicates" would > be wrong. And I think "cardinality" is well established term, so I think > it's fine. > > BTW I named the GUC enable_group_by_reordering, I wonder if it should be > named differently, e.g. enable_groupby_reordering? Opinions? > > > regards > > -- > Tomas Vondra > EnterpriseDB: http://www.enterprisedb.com > The Enterprise PostgreSQL Company > > Hi, > > For 0001-Optimize-order-of-GROUP-BY-keys-20220328.patch: > > multiple parametes need to be > >   parametes -> parameters > > leave more expensive comparions > >   comparions -> comparisons > > +       if (has_fake_var == false) > > The above can be written as: > >        if (!has_fake_var) > All of this was already fixed in one of the subsequent "fixup" patches. Attached is a patch merging 0001-0006, which is what I proposed to get committed. > +           nGroups = ceil(2.0 + sqrt(tuples) * (i + 1) / > list_length(pathkeys)); > > Looks like the value of tuples doesn't change inside the loop. > You can precompute sqrt(tuples) outside the loop and store the value in > a variable. > IMHO it makes the formula harder to read, and the effect is not going to be measurable - we're processing only a couple elements. If the loop was ~100 iterations or more, maybe it'd have impact. > +       return -1; > +   else if (a->cost == b->cost) > +       return 0; > +   return 1; > > the keyword 'else' is not needed. > True, but this is how comparators are usually implemented. > + * Returns newly allocated lists. If no reordering is possible (or needed), > + * the lists are set to NIL. > + */ > +static bool > +get_cheapest_group_keys_order(PlannerInfo *root, double nrows, > > It seems the comment for return value doesn't match the bool return type. > Yup, this is a valid point. I've fixed/reworded the comment a bit. > +   /* If this optimization is disabled, we're done. */ > +   if (!debug_cheapest_group_by) > > It seems enable_cheapest_group_by would be better name for the flag. > This was renamed to enable_order_by_reordering in one of the fixup patches. Attached is a patch merging 0001 and all the fixup patches, i.e. the patch I plan to commit. There was a minor test failure - the new GUC was not added to the sample config file, so 003_check_guc.pl was failing. I'm not including the 0007 part, because that's meant to demonstrate plan changes with disabled optimization, which would confuse cfbot. regards regards -- Tomas Vondra EnterpriseDB: http://www.enterprisedb.com The Enterprise PostgreSQL Company --------------SJuT9jwVxrByFnZ3US0uWQs7 Content-Type: text/x-patch; charset=UTF-8; name="0001-Optimize-order-of-GROUP-BY-keys-20220329.patch" Content-Disposition: attachment; filename="0001-Optimize-order-of-GROUP-BY-keys-20220329.patch" Content-Transfer-Encoding: base64 RnJvbSA2NjgzNWM0YWU1MmRjNjFkNTgwYjg0YWIxNTAwNGM4ZjQ2OTE5NTUwIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzLnZvbmRyYUBwb3N0 Z3Jlc3FsLm9yZz4KRGF0ZTogRnJpLCAyMSBKYW4gMjAyMiAyMDoyMjoxNCArMDEwMApTdWJq ZWN0OiBbUEFUQ0ggMS8yXSBPcHRpbWl6ZSBvcmRlciBvZiBHUk9VUCBCWSBrZXlzCgpXaGVu IGV2YWx1YXRpbmcgYSBxdWVyeSB3aXRoIGEgbXVsdGktY29sdW1uIEdST1VQIEJZIGNsYXVz ZSB1c2luZyBzb3J0LAp0aGUgY29zdCBtYXkgYmUgaGVhdmlseSBkZXBlbmRlbnQgb24gdGhl IG9yZGVyIGluIHdoaWNoIHRoZSBrZXlzIGFyZQpjb21wYXJlZCB3aGVuIGJ1aWxkaW5nIHRo ZSBncm91cHMuIEdyb3VwaW5nIGRvZXMgbm90IGltcGx5IGFueSBvcmRlcmluZywKc28gd2Un cmUgYWxsb3dlZCB0byBjb21wYXJlIHRoZSBrZXlzIGluIGFyYml0cmFyeSBvcmRlciwgYW5k IGEgSGFzaCBBZ2cKbGV2ZXJhZ2VzIHRoaXMuIEJ1dCBmb3IgR3JvdXAgQWdnLCB3ZSBzaW1w bHkgY29tcGFyZWQga2V5cyBpbiB0aGUgb3JkZXIKYXMgc3BlY2lmaWVkIGluIHRoZSBxdWVy eS4gVGhpcyBjb21taXQgZXhwbG9yZXMgYWx0ZXJuYXRpdmUgb3JkZXJpbmcgb2YKdGhlIGtl eXMsIHRyeWluZyB0byBmaW5kIGEgY2hlYXBlciBvbmUuCgpUbyBwaWNrIHRoZSBvcHRpbWFs IG9yZGVyIG9mIGNvbXBhcmlzb25zLCBtdWx0aXBsZSBwYXJhbWV0ZXMgbmVlZCB0byBiZQpj b25zaWRlcmVkLCBib3RoIGxvY2FsIGFuZCBnbG9iYWwgb25lcy4gSW50dWl0aXZlbHksIGl0 J3MgYmV0dGVyIHRvCmxlYXZlIG1vcmUgZXhwZW5zaXZlIGNvbXBhcmlvbnMgKGZvciBjb21w bGV4IGRhdGEgdHlwZXMgZXRjLikgYXQgdGhlCnZlcnkgZW5kLCBiZWNhdXNlIG1heWJlIG9u ZSBvZiB0aGUgZWFybGllciBjb21wYXJpc29ucyB3aWxsIGJlIGVub3VnaCB0bwptYWtlIGEg ZGVjaXNpb24sIGFuZCB0aGUgZXhwZW5zaXZlIGNvbXBhcmlzb24gd2lsbCBiZSB1bm5lY2Vz c2FyeS4gVGhlCm90aGVyIGxvY2FsIHBhcmFtZXRlciBpcyBjYXJkaW5hbGl0eSAtIHRoZSBo aWdoZXIgdGhlIGNhcmRpbmFsaXR5IG9mIGEKa2V5LCB0aGUgbG93ZXIgdGhlIHByb2JhYmls aXR5IHdlJ2xsIG5lZWQgdG8gY29tcGFyZSBhZGRpdGlvbmFsIGtleXMuIFdlCmV4cGxvcmUg cG9zc2libGUgb3JkZXJpbmdzIGJ5IGEgY29tYmluYXRpb24gb2YgZXhoYXVzdGl2ZSBhbmQg Z3JlZWR5CmFwcHJvYWNoLCBhbmQgcGljayB0aGUgY2hlYXBlc3Qgb3JkZXJpbmcuCgpCdXQg dGhlcmUgYXJlIGdsb2JhbCBwYXJhbWV0ZXJzIHRvbywgaW4gdGhlIHNlbnNlIHRoYXQgd2Ug Y2FuJ3QgZnVsbHkKZXZhbHVhdGUgdGhlbSBhdCB0aGUgcG9pbnQgd2hlbiBjcmVhdGluZyB0 aGUgc29ydC4gRm9yIGV4YW1wbGUsIHRoZXJlCm1pZ2h0IGJlIGFuIE9SREVSIEJZIGNsYXVz ZSwgb3IgYW5vdGhlciBvcmRlcmluZy1kZXBlbmRlbnQgb3BlcmF0aW9uLApoaWdoZXIgdXAg aW4gdGhlIHF1ZXJ5IHBsYW4uIFRoZSBwYXRoIG1heSBiZSBhbHJlYWR5IHNvcnRlZCBieSAo c29tZQpvZikgdGhlIGtleXMsIGluIHdoaWNoIGNhc2Ugd2UgY2FuIGVpdGhlciB1c2UgaW5j cmVtZW50YWwgc29ydCBvciBldmVuCnNraXAgdGhlIHNvcnQgZW50aXJlbHkuIFNvIHdlIGNv bnNpZGVyIHZhcmlvdXMgYWRkaXRpb25hbCBwYXRoa2V5cyBpbgphZGRpdGlvbiB0byB0aGUg ImNoZWFwZXJzIGNvbXBhcmlvbiIgb3JkZXIuCgpUaGUgb3JpZ2luYWwgcGF0Y2ggd2FzIHBy b3Bvc2VkIGJ5IFRlb2RvciBTaWdhZXYsIGFuZCBsYXRlciByZXdvcmtlZCBhbmQKaW1wcm92 ZWQgYnkgRG1pdHJ5IERvbGdvdi4gUmV2aWV3cyBieSBhIG51bWJlciBvZiBwZW9wbGUsIGlu Y2x1ZGluZyBtZSwKQW5kcmV5IExlcGlraG92LCBDbGF1ZGlvIEZyZWlyZSBhbmQgSWJyYXIg QWhtZWQuCgpBdXRob3I6IERtaXRyeSBEb2xnb3YsIFRlb2RvciBTaWdhZXYsIFRvbWFzIFZv bmRyYQpSZXZpZXdlZC1ieTogVG9tYXMgVm9uZHJhLCBBbmRyZXkgTGVwaWtob3YsIENsYXVk aW8gRnJlaXJlLCBJYnJhciBBaG1lZCwgWmhpaG9uZyBZdQpEaXNjdXNzaW9uOiBodHRwczov L3Bvc3Rnci5lcy9tLzdjNzllNmE1LTg1OTctNzRlOC0wNjcxLTFjMzlkMTI0YzlkNiU0MHNp Z2Fldi5ydQpEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9tL0NBJTJCcTZ6Y1dfNG8y TkMwenV0TGtPSlBzRnQ4MG1lZ1NwWF9kVlJvNkdLOVBDLUp4X0FnJTQwbWFpbC5nbWFpbC5j b20KLS0tCiAuLi4vcG9zdGdyZXNfZmR3L2V4cGVjdGVkL3Bvc3RncmVzX2Zkdy5vdXQgICAg fCAgMTUgKy0KIGRvYy9zcmMvc2dtbC9jb25maWcuc2dtbCAgICAgICAgICAgICAgICAgICAg ICB8ICAxNCArCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jb3N0c2l6ZS5jICAgICAg ICAgfCAzNjYgKysrKysrKysrLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvZXF1aXZj bGFzcy5jICAgICAgIHwgIDEzICstCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9wYXRo a2V5cy5jICAgICAgICAgfCA1NjkgKysrKysrKysrKysrKysrCiBzcmMvYmFja2VuZC9vcHRp bWl6ZXIvcGxhbi9wbGFubmVyLmMgICAgICAgICAgfCA2NDkgKysrKysrKysrKy0tLS0tLS0t CiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wYXRobm9kZS5jICAgICAgICAgfCAgIDIg Ky0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9zZWxmdW5jcy5jICAgICAgICAgICAgICB8ICAz OCArLQogc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWMuYyAgICAgICAgICAgICAgICAgIHwg IDEwICsKIHNyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZSB8 ICAgMSArCiBzcmMvaW5jbHVkZS9ub2Rlcy9ub2Rlcy5oICAgICAgICAgICAgICAgICAgICAg fCAgIDEgKwogc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmggICAgICAgICAgICAgICAg IHwgIDEwICsKIHNyYy9pbmNsdWRlL29wdGltaXplci9jb3N0LmggICAgICAgICAgICAgICAg ICB8ICAgNCArLQogc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhzLmggICAgICAgICAgICAg ICAgIHwgICA3ICsKIHNyYy9pbmNsdWRlL3V0aWxzL3NlbGZ1bmNzLmggICAgICAgICAgICAg ICAgICB8ICAgNSArCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2FnZ3JlZ2F0ZXMub3V0 ICAgICAgfCAyNDQgKysrKysrLQogLi4uL3JlZ3Jlc3MvZXhwZWN0ZWQvaW5jcmVtZW50YWxf c29ydC5vdXQgICAgIHwgICAyICstCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pvaW4u b3V0ICAgICAgICAgICAgfCAgNTEgKy0KIC4uLi9yZWdyZXNzL2V4cGVjdGVkL3BhcnRpdGlv bl9hZ2dyZWdhdGUub3V0ICB8IDEzNiArKy0tCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVk L3BhcnRpdGlvbl9qb2luLm91dCAgfCAgNzUgKy0KIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0 ZWQvc3lzdmlld3Mub3V0ICAgICAgICB8ICAgMyArLQogc3JjL3Rlc3QvcmVncmVzcy9leHBl Y3RlZC91bmlvbi5vdXQgICAgICAgICAgIHwgIDYwICstCiBzcmMvdGVzdC9yZWdyZXNzL3Nx bC9hZ2dyZWdhdGVzLnNxbCAgICAgICAgICAgfCAgOTkgKysrCiBzcmMvdGVzdC9yZWdyZXNz L3NxbC9pbmNyZW1lbnRhbF9zb3J0LnNxbCAgICAgfCAgIDIgKy0KIDI0IGZpbGVzIGNoYW5n ZWQsIDE4ODIgaW5zZXJ0aW9ucygrKSwgNDk0IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBh L2NvbnRyaWIvcG9zdGdyZXNfZmR3L2V4cGVjdGVkL3Bvc3RncmVzX2Zkdy5vdXQgYi9jb250 cmliL3Bvc3RncmVzX2Zkdy9leHBlY3RlZC9wb3N0Z3Jlc19mZHcub3V0CmluZGV4IGYyMTBm OTExODgwLi4yZmZjODM2ODI0YSAxMDA2NDQKLS0tIGEvY29udHJpYi9wb3N0Z3Jlc19mZHcv ZXhwZWN0ZWQvcG9zdGdyZXNfZmR3Lm91dAorKysgYi9jb250cmliL3Bvc3RncmVzX2Zkdy9l eHBlY3RlZC9wb3N0Z3Jlc19mZHcub3V0CkBAIC0yNzQxLDE2ICsyNzQxLDEzIEBAIHNlbGVj dCBjMiAqIChyYW5kb20oKSA8PSAxKTo6aW50IGFzIGMyIGZyb20gZnQyIGdyb3VwIGJ5IGMy ICogKHJhbmRvbSgpIDw9IDEpOjppCiAtLSBHUk9VUCBCWSBjbGF1c2UgaW4gdmFyaW91cyBm b3JtcywgY2FyZGluYWwsIGFsaWFzIGFuZCBjb25zdGFudCBleHByZXNzaW9uCiBleHBsYWlu ICh2ZXJib3NlLCBjb3N0cyBvZmYpCiBzZWxlY3QgY291bnQoYzIpIHcsIGMyIHgsIDUgeSwg Ny4wIHogZnJvbSBmdDEgZ3JvdXAgYnkgMiwgeSwgOS4wOjppbnQgb3JkZXIgYnkgMjsKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCi0gU29ydAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBGb3JlaWduIFNjYW4KICAgIE91dHB1dDogKGNv dW50KGMyKSksIGMyLCA1LCA3LjAsIDkKLSAgIFNvcnQgS2V5OiBmdDEuYzIKLSAgIC0+ICBG b3JlaWduIFNjYW4KLSAgICAgICAgIE91dHB1dDogKGNvdW50KGMyKSksIGMyLCA1LCA3LjAs IDkKLSAgICAgICAgIFJlbGF0aW9uczogQWdncmVnYXRlIG9uIChwdWJsaWMuZnQxKQotICAg ICAgICAgUmVtb3RlIFNRTDogU0VMRUNUIGNvdW50KGMyKSwgYzIsIDUsIDcuMCwgOSBGUk9N ICJTIDEiLiJUIDEiIEdST1VQIEJZIDIsIDMsIDUKLSg3IHJvd3MpCisgICBSZWxhdGlvbnM6 IEFnZ3JlZ2F0ZSBvbiAocHVibGljLmZ0MSkKKyAgIFJlbW90ZSBTUUw6IFNFTEVDVCBjb3Vu dChjMiksIGMyLCA1LCA3LjAsIDkgRlJPTSAiUyAxIi4iVCAxIiBHUk9VUCBCWSAyLCAzLCA1 IE9SREVSIEJZIGMyIEFTQyBOVUxMUyBMQVNUCisoNCByb3dzKQogCiBzZWxlY3QgY291bnQo YzIpIHcsIGMyIHgsIDUgeSwgNy4wIHogZnJvbSBmdDEgZ3JvdXAgYnkgMiwgeSwgOS4wOjpp bnQgb3JkZXIgYnkgMjsKICAgdyAgfCB4IHwgeSB8ICB6ICAKZGlmZiAtLWdpdCBhL2RvYy9z cmMvc2dtbC9jb25maWcuc2dtbCBiL2RvYy9zcmMvc2dtbC9jb25maWcuc2dtbAppbmRleCAw NWRmNDgxMzFkNy4uMGMwZGU2MWI4NTUgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9jb25m aWcuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwKQEAgLTQ5NjEsNiArNDk2 MSwyMCBAQCBBTlkgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPm51bV9zeW5jPC9y ZXBsYWNlYWJsZT4gKCA8cmVwbGFjZWFibGUgY2xhc3M9IgogICAgICAgPC9saXN0aXRlbT4K ICAgICAgPC92YXJsaXN0ZW50cnk+CiAKKyAgICAgPHZhcmxpc3RlbnRyeSBpZD0iZ3VjLWVu YWJsZS1ncm91cGJ5LXJlb3JkZXJpbmciIHhyZWZsYWJlbD0iZW5hYmxlX2dyb3VwX2J5X3Jl b3JkZXJpbmciPgorICAgICAgPHRlcm0+PHZhcm5hbWU+ZW5hYmxlX2dyb3VwX2J5X3Jlb3Jk ZXJpbmc8L3Zhcm5hbWU+ICg8dHlwZT5ib29sZWFuPC90eXBlPikKKyAgICAgIDxpbmRleHRl cm0+CisgICAgICAgPHByaW1hcnk+PHZhcm5hbWU+ZW5hYmxlX2dyb3VwX2J5X3Jlb3JkZXJp bmc8L3Zhcm5hbWU+IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyPC9wcmltYXJ5PgorICAgICAg PC9pbmRleHRlcm0+CisgICAgICA8L3Rlcm0+CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAg PHBhcmE+CisgICAgICAgIEVuYWJsZXMgb3IgZGlzYWJsZXMgcmVvZGVyaW5nIG9mIGtleXMg aW4gPGxpdGVyYWw+R1JPVVAgQlk8L2xpdGVyYWw+CisgICAgICAgIGNsYXVzZS4gVGhlIGRl ZmF1bHQgaXMgPGxpdGVyYWw+b248L2xpdGVyYWw+LgorICAgICAgIDwvcGFyYT4KKyAgICAg IDwvbGlzdGl0ZW0+CisgICAgIDwvdmFybGlzdGVudHJ5PgorCiAgICAgIDx2YXJsaXN0ZW50 cnkgaWQ9Imd1Yy1lbmFibGUtaGFzaGFnZyIgeHJlZmxhYmVsPSJlbmFibGVfaGFzaGFnZyI+ CiAgICAgICA8dGVybT48dmFybmFtZT5lbmFibGVfaGFzaGFnZzwvdmFybmFtZT4gKDx0eXBl PmJvb2xlYW48L3R5cGU+KQogICAgICAgPGluZGV4dGVybT4KZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL29wdGltaXplci9wYXRoL2Nvc3RzaXplLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6 ZXIvcGF0aC9jb3N0c2l6ZS5jCmluZGV4IDFiMDdlYTM5MmQ5Li4zZTFkYWY4Yjg5MyAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvY29zdHNpemUuYworKysgYi9z cmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jb3N0c2l6ZS5jCkBAIC0xNzU1LDYgKzE3NTUs MzIyIEBAIGNvc3RfcmVjdXJzaXZlX3VuaW9uKFBhdGggKnJ1bmlvbiwgUGF0aCAqbnJ0ZXJt LCBQYXRoICpydGVybSkKIAkJCQkJCQkJCXJ0ZXJtLT5wYXRodGFyZ2V0LT53aWR0aCk7CiB9 CiAKKy8qCisgKiBpc19mYWtlX3ZhcgorICoJCVdvcmthcm91bmQgZm9yIGdlbmVyYXRlX2Fw cGVuZF90bGlzdCgpIHdoaWNoIGdlbmVyYXRlcyBmYWtlIFZhcnMgd2l0aAorICoJCXZhcm5v ID09IDAsIHRoYXQgd2lsbCBjYXVzZSBhIGZhaWwgb2YgZXN0aW1hdGVfbnVtX2dyb3VwKCkg Y2FsbAorICoKKyAqIFhYWCBVbW1tLCB3aHkgd291bGQgZXN0aW1hdGVfbnVtX2dyb3VwIGZh aWwgd2l0aCB0aGlzPworICovCitzdGF0aWMgYm9vbAoraXNfZmFrZV92YXIoRXhwciAqZXhw cikKK3sKKwlpZiAoSXNBKGV4cHIsIFJlbGFiZWxUeXBlKSkKKwkJZXhwciA9IChFeHByICop ICgoUmVsYWJlbFR5cGUgKikgZXhwciktPmFyZzsKKworCXJldHVybiAoSXNBKGV4cHIsIFZh cikgJiYgKChWYXIgKikgZXhwciktPnZhcm5vID09IDApOworfQorCisvKgorICogZ2V0X3dp ZHRoX2Nvc3RfbXVsdGlwbGllcgorICoJCVJldHVybnMgcmVsYXRpdmUgY29tcGxleGl0eSBv ZiBjb21wYXJpbmcgdHdvIHZhbHVlcyBiYXNlZCBvbiBpdHMgd2lkdGguCisgKiBUaGUgaWRl YSBiZWhpbmQgaXMgdGhhdCB0aGUgY29tcGFyaXNvbiBiZWNvbWVzIG1vcmUgZXhwZW5zaXZl IHRoZSBsb25nZXIgdGhlCisgKiB2YWx1ZSBpcy4gUmV0dXJuIHZhbHVlIGlzIGluIGNwdV9v cGVyYXRvcl9jb3N0IHVuaXRzLgorICovCitzdGF0aWMgZG91YmxlCitnZXRfd2lkdGhfY29z dF9tdWx0aXBsaWVyKFBsYW5uZXJJbmZvICpyb290LCBFeHByICpleHByKQoreworCWRvdWJs ZQl3aWR0aCA9IC0xLjA7IC8qIGZha2UgdmFsdWUgKi8KKworCWlmIChJc0EoZXhwciwgUmVs YWJlbFR5cGUpKQorCQlleHByID0gKEV4cHIgKikgKChSZWxhYmVsVHlwZSAqKSBleHByKS0+ YXJnOworCisJLyogVHJ5IHRvIGZpbmQgYWN0dWFsIHN0YXQgaW4gY29ycmVzcG9uZGluZyBy ZWxhdGlvbiAqLworCWlmIChJc0EoZXhwciwgVmFyKSkKKwl7CisJCVZhcgkJKnZhciA9IChW YXIgKikgZXhwcjsKKworCQlpZiAodmFyLT52YXJubyA+IDAgJiYgdmFyLT52YXJubyA8IHJv b3QtPnNpbXBsZV9yZWxfYXJyYXlfc2l6ZSkKKwkJeworCQkJUmVsT3B0SW5mbwkqcmVsID0g cm9vdC0+c2ltcGxlX3JlbF9hcnJheVt2YXItPnZhcm5vXTsKKworCQkJaWYgKHJlbCAhPSBO VUxMICYmCisJCQkJdmFyLT52YXJhdHRubyA+PSByZWwtPm1pbl9hdHRyICYmCisJCQkJdmFy LT52YXJhdHRubyA8PSByZWwtPm1heF9hdHRyKQorCQkJeworCQkJCWludAluZHggPSB2YXIt PnZhcmF0dG5vIC0gcmVsLT5taW5fYXR0cjsKKworCQkJCWlmIChyZWwtPmF0dHJfd2lkdGhz W25keF0gPiAwKQorCQkJCQl3aWR0aCA9IHJlbC0+YXR0cl93aWR0aHNbbmR4XTsKKwkJCX0K KwkJfQorCX0KKworCS8qIERpZG4ndCBmaW5kIGFueSBhY3R1YWwgc3RhdHMsIHRyeSB1c2lu ZyB0eXBlIHdpZHRoIGluc3RlYWQuICovCisJaWYgKHdpZHRoIDwgMC4wKQorCXsKKwkJTm9k ZQkqbm9kZSA9IChOb2RlKikgZXhwcjsKKworCQl3aWR0aCA9IGdldF90eXBhdmd3aWR0aChl eHByVHlwZShub2RlKSwgZXhwclR5cG1vZChub2RlKSk7CisJfQorCisJLyoKKwkgKiBWYWx1 ZXMgYXJlIHBhc3NlZCBhcyBEYXR1bSB0eXBlLCBzbyBjb21wYXJpc29ucyBjYW4ndCBiZSBj aGVhcGVyIHRoYW4KKwkgKiBjb21wYXJpbmcgYSBEYXR1bSB2YWx1ZS4KKwkgKgorCSAqIEZJ WE1FIEkgZmluZCB0aGlzIHJlYXNvbmluZyBxdWVzdGlvbmFibGUuIFdlIG1heSBwYXNzIGlu dDIsIGFuZCBjb21wYXJpbmcKKwkgKiBpdCBpcyBwcm9iYWJseSBhIGJpdCBjaGVhcGVyIHRo YW4gY29tcGFyaW5nIGEgYmlnaW50LgorCSAqLworCWlmICh3aWR0aCA8PSBzaXplb2YoRGF0 dW0pKQorCQlyZXR1cm4gMS4wOworCisJLyoKKwkgKiBXZSBjb25zaWRlciB0aGUgY29zdCBv ZiBhIGNvbXBhcmlzb24gbm90IHRvIGJlIGRpcmVjdGx5IHByb3BvcnRpb25hbCB0bworCSAq IHdpZHRoIG9mIHRoZSBhcmd1bWVudCwgYmVjYXVzZSB3aWR0aHMgb2YgdGhlIGFyZ3VtZW50 cyBjb3VsZCBiZSBzbGlnaHRseQorCSAqIGRpZmZlcmVudCAod2Ugb25seSBrbm93IHRoZSBh dmVyYWdlIHdpZHRoIGZvciB0aGUgd2hvbGUgY29sdW1uKS4gU28gd2UKKwkgKiB1c2UgbG9n MTYod2lkdGgpIGFzIGFuIGVzdGltYXRlLgorCSAqLworCXJldHVybiAxLjAgKyAwLjEyNSAq IExPRzIod2lkdGggLyBzaXplb2YoRGF0dW0pKTsKK30KKworLyoKKyAqIGNvbXB1dGVfY3B1 X3NvcnRfY29zdAorICoJCWNvbXB1dGUgQ1BVIGNvc3Qgb2Ygc29ydCAoaS5lLiBpbi1tZW1v cnkpCisgKgorICogVGhlIG1haW4gdGhpbmcgd2UgbmVlZCB0byBjYWxjdWxhdGUgdG8gZXN0 aW1hdGUgc29ydCBDUFUgY29zdHMgaXMgdGhlIG51bWJlcgorICogb2YgY2FsbHMgdG8gdGhl IGNvbXBhcmF0b3IgZnVuY3Rpb25zLiBUaGUgZGlmZmljdWx0eSBpcyB0aGF0IGZvciBtdWx0 aS1jb2x1bW4KKyAqIHNvcnRzIHRoZXJlIG1heSBiZSBkaWZmZXJlbnQgZGF0YSB0eXBlcyBp bnZvbHZlZCAoZm9yIHNvbWUgb2Ygd2hpY2ggdGhlIGNhbGxzCisgKiBtYXkgYmUgbXVjaCBt b3JlIGV4cGVuc2l2ZSkuIEZ1cnRoZXJtb3JlLCBjb2x1bW5zIG1heSBoYXZlIGEgdmVyeSBk aWZmZXJlbnQKKyAqIG51bWJlciBvZiBkaXN0aW5jdCB2YWx1ZXMgLSB0aGUgaGlnaGVyIHRo ZSBudW1iZXIsIHRoZSBmZXdlciBjb21wYXJpc29ucyB3aWxsCisgKiBiZSBuZWVkZWQgZm9y IHRoZSBmb2xsb3dpbmcgY29sdW1ucy4KKyAqCisgKiBUaGUgYWxnb3JpdGhtIGlzIGluY3Jl bWVudGFsIC0gd2UgYWRkIHBhdGhrZXlzIG9uZSBieSBvbmUsIGFuZCBhdCBlYWNoIHN0ZXAg d2UKKyAqIGVzdGltYXRlIHRoZSBudW1iZXIgb2YgbmVjZXNzYXJ5IGNvbXBhcmlzb25zIChi YXNlZCBvbiB0aGUgbnVtYmVyIG9mIGRpc3RpbmN0CisgKiBncm91cHMgaW4gdGhlIGN1cnJl bnQgcGF0aGtleSBwcmVmaXggYW5kIHRoZSBuZXcgcGF0aGtleSksIGFuZCB0aGUgY29tcGFy aXNvbgorICogY29zdHMgKHdoaWNoIGlzIGRhdGEgdHlwZSBzcGVjaWZpYykuCisgKgorICog RXN0aW1hdGlvbiBvZiB0aGUgbnVtYmVyIG9mIGNvbXBhcmlzb25zIGlzIGJhc2VkIG9uIGlk ZWFzIGZyb206CisgKgorICogIlF1aWNrc29ydCBJcyBPcHRpbWFsIiwgUm9iZXJ0IFNlZGdl d2ljaywgSm9uIEJlbnRsZXksIDIwMDIKKyAqIFtodHRwczovL3d3dy5jcy5wcmluY2V0b24u ZWR1L35ycy90YWxrcy9RdWlja3NvcnRJc09wdGltYWwucGRmXQorICoKKyAqIEluIHRlcm0g b2YgdGhhdCBwYXBlciwgbGV0IE4gLSBudW1iZXIgb2YgdHVwbGVzLCBYaSAtIG51bWJlciBv ZiBpZGVudGljYWwKKyAqIHR1cGxlcyB3aXRoIHZhbHVlIEtpLCB0aGVuIHRoZSBlc3RpbWF0 ZSBvZiBudW1iZXIgb2YgY29tcGFyaXNvbnMgaXM6CisgKgorICoJbG9nKE4hIC8gKFgxISAq IFgyISAqIC4uKSkgIH4gIHN1bShYaSAqIGxvZyhOL1hpKSkKKyAqCisgKiBXZSBhc3N1bWUg YWxsIFhpIHRoZSBzYW1lIGJlY2F1c2Ugbm93IHdlIGRvbid0IGhhdmUgYW55IGVzdGltYXRp b24gb2YKKyAqIGdyb3VwIHNpemVzLCB3ZSBoYXZlIG9ubHkga25vdyB0aGUgZXN0aW1hdGUg b2YgbnVtYmVyIG9mIGdyb3VwcyAoZGlzdGluY3QKKyAqIHZhbHVlcykuIEluIHRoYXQgY2Fz ZSwgZm9ybXVsYSBiZWNvbWVzOgorICoKKyAqCU4gKiBsb2coTnVtYmVyT2ZHcm91cHMpCisg KgorICogRm9yIG11bHRpLWNvbHVtbiBzb3J0cyB3ZSBuZWVkIHRvIGVzdGltYXRlIHRoZSBu dW1iZXIgb2YgY29tcGFyaXNvbnMgZm9yCisgKiBlYWNoIGluZGl2aWR1YWwgY29sdW1uIC0g Zm9yIGV4YW1wbGUgd2l0aCBjb2x1bW5zIChjMSwgYzIsIC4uLiwgY2spIHdlCisgKiBjYW4g ZXN0aW1hdGUgdGhhdCBudW1iZXIgb2YgY29tcGFyaXNvbnMgb24gY2sgaXMgcm91Z2hseQor ICoKKyAqCW5jb21wYXJpc29ucyhjMSwgYzIsIC4uLiwgY2spIC8gbmNvbXBhcmlzb25zKGMx LCBjMiwgLi4uLCBjKGstMSkpCisgKgorICogTGV0IGsgYmUgYSBjb2x1bW4gbnVtYmVyLCBH ayAtIG51bWJlciBvZiBncm91cHMgZGVmaW5lZCBieSBrIGNvbHVtbnMsIGFuZCBGaworICog dGhlIGNvc3Qgb2YgdGhlIGNvbXBhcmlzb24gaXMKKyAqCisgKglOICogc3VtKCBGayAqIGxv ZyhHaykgKQorICoKKyAqIE5vdGU6IFdlIGFsc28gY29uc2lkZXIgY29sdW1uIHdpZHRoLCBu b3QganVzdCB0aGUgY29tcGFyYXRvciBjb3N0LgorICoKKyAqIE5PVEU6IHNvbWUgY2FsbGVy cyBjdXJyZW50bHkgcGFzcyBOSUwgZm9yIHBhdGhrZXlzIGJlY2F1c2UgdGhleQorICogY2Fu J3QgY29udmVuaWVudGx5IHN1cHBseSB0aGUgc29ydCBrZXlzLiBJbiB0aGlzIGNhc2UsIGl0 IHdpbGwgZmFsbGJhY2sgdG8KKyAqIHNpbXBsZSBjb21wYXJpc29uIGNvc3QgZXN0aW1hdGUu CisgKi8KK3N0YXRpYyBDb3N0Citjb21wdXRlX2NwdV9zb3J0X2Nvc3QoUGxhbm5lckluZm8g KnJvb3QsIExpc3QgKnBhdGhrZXlzLCBpbnQgblByZXNvcnRlZEtleXMsCisJCQkJCSAgQ29z dCBjb21wYXJpc29uX2Nvc3QsIGRvdWJsZSB0dXBsZXMsIGRvdWJsZSBvdXRwdXRfdHVwbGVz LAorCQkJCQkgIGJvb2wgaGVhcFNvcnQpCit7CisJQ29zdAkJcGVyX3R1cGxlX2Nvc3QgPSAw LjA7CisJTGlzdENlbGwJKmxjOworCUxpc3QJCSpwYXRoa2V5RXhwcnMgPSBOSUw7CisJZG91 YmxlCQl0dXBsZXNQZXJQcmV2R3JvdXAgPSB0dXBsZXM7CisJZG91YmxlCQl0b3RhbEZ1bmND b3N0ID0gMS4wOworCWJvb2wJCWhhc19mYWtlX3ZhciA9IGZhbHNlOworCWludAkJCWkgPSAw OworCU9pZAkJCXByZXZfZGF0YXR5cGUgPSBJbnZhbGlkT2lkOworCUxpc3QJCSpjYWNoZV92 YXJpbmZvcyA9IE5JTDsKKworCS8qIGZhbGxiYWNrIGlmIHBhdGhrZXlzIGlzIHVua25vd24g Ki8KKwlpZiAobGlzdF9sZW5ndGgocGF0aGtleXMpID09IDApCisJeworCQkvKgorCQkgKiBJ ZiB3ZSdsbCB1c2UgYSBib3VuZGVkIGhlYXAtc29ydCBrZWVwaW5nIGp1c3QgSyB0dXBsZXMg aW4gbWVtb3J5LCBmb3IKKwkJICogYSB0b3RhbCBudW1iZXIgb2YgdHVwbGUgY29tcGFyaXNv bnMgb2YgTiBsb2cyIEs7IGJ1dCB0aGUgY29uc3RhbnQKKwkJICogZmFjdG9yIGlzIGEgYml0 IGhpZ2hlciB0aGFuIGZvciBxdWlja3NvcnQuIFR3ZWFrIGl0IHNvIHRoYXQgdGhlIGNvc3QK KwkJICogY3VydmUgaXMgY29udGludW91cyBhdCB0aGUgY3Jvc3NvdmVyIHBvaW50LgorCQkg Ki8KKwkJb3V0cHV0X3R1cGxlcyA9IChoZWFwU29ydCkgPyAyLjAgKiBvdXRwdXRfdHVwbGVz IDogdHVwbGVzOworCQlwZXJfdHVwbGVfY29zdCArPSAyLjAgKiBjcHVfb3BlcmF0b3JfY29z dCAqIExPRzIob3V0cHV0X3R1cGxlcyk7CisKKwkJLyogYWRkIGNvc3QgcHJvdmlkZWQgYnkg Y2FsbGVyICovCisJCXBlcl90dXBsZV9jb3N0ICs9IGNvbXBhcmlzb25fY29zdDsKKworCQly ZXR1cm4gcGVyX3R1cGxlX2Nvc3QgKiB0dXBsZXM7CisJfQorCisJLyoKKwkgKiBDb21wdXRp bmcgdG90YWwgY29zdCBvZiBzb3J0aW5nIHRha2VzIGludG8gYWNjb3VudDoKKwkgKiAtIHBl ciBjb2x1bW4gY29tcGFyaXNvbiBmdW5jdGlvbiBjb3N0CisJICogLSB3ZSB0cnkgdG8gY29t cHV0ZSBuZWVkZWQgbnVtYmVyIG9mIGNvbXBhcmlzb24gcGVyIGNvbHVtbgorCSAqLworCWZv cmVhY2gobGMsIHBhdGhrZXlzKQorCXsKKwkJUGF0aEtleQkJCSAgICpwYXRoa2V5ID0gKFBh dGhLZXkqKSBsZmlyc3QobGMpOworCQlFcXVpdmFsZW5jZU1lbWJlciAgKmVtOworCQlkb3Vi bGUJCQkJbkdyb3VwcywKKwkJCQkJCQljb3JyZWN0ZWROR3JvdXBzOworCQlDb3N0CQkJCWZ1 bmNDb3N0ID0gMS4wOworCisJCS8qCisJCSAqIFdlIGJlbGlldmUgdGhhdCBlcXVpdmFsZW5j ZSBtZW1iZXJzIGFyZW4ndCB2ZXJ5IGRpZmZlcmVudCwgc28sIHRvCisJCSAqIGVzdGltYXRl IGNvc3Qgd2UgY29uc2lkZXIganVzdCB0aGUgZmlyc3QgbWVtYmVyLgorCQkgKi8KKwkJZW0g PSAoRXF1aXZhbGVuY2VNZW1iZXIgKikgbGluaXRpYWwocGF0aGtleS0+cGtfZWNsYXNzLT5l Y19tZW1iZXJzKTsKKworCQlpZiAoZW0tPmVtX2RhdGF0eXBlICE9IEludmFsaWRPaWQpCisJ CXsKKwkJCS8qIGRvIG5vdCBsb29rdXAgZnVuY0Nvc3QgaWYgdGhlIGRhdGEgdHlwZSBpcyB0 aGUgc2FtZSAqLworCQkJaWYgKHByZXZfZGF0YXR5cGUgIT0gZW0tPmVtX2RhdGF0eXBlKQor CQkJeworCQkJCU9pZAkJCXNvcnRvcDsKKwkJCQlRdWFsQ29zdAljb3N0OworCisJCQkJc29y dG9wID0gZ2V0X29wZmFtaWx5X21lbWJlcihwYXRoa2V5LT5wa19vcGZhbWlseSwKKwkJCQkJ CQkJCQkJIGVtLT5lbV9kYXRhdHlwZSwgZW0tPmVtX2RhdGF0eXBlLAorCQkJCQkJCQkJCQkg cGF0aGtleS0+cGtfc3RyYXRlZ3kpOworCisJCQkJY29zdC5zdGFydHVwID0gMDsKKwkJCQlj b3N0LnBlcl90dXBsZSA9IDA7CisJCQkJYWRkX2Z1bmN0aW9uX2Nvc3Qocm9vdCwgZ2V0X29w Y29kZShzb3J0b3ApLCBOVUxMLCAmY29zdCk7CisKKwkJCQkvKgorCQkJCSAqIGFkZF9mdW5j dGlvbl9jb3N0IHJldHVybnMgdGhlIHByb2R1Y3Qgb2YgY3B1X29wZXJhdG9yX2Nvc3QKKwkJ CQkgKiBhbmQgcHJvY29zdCwgYnV0IHdlIG5lZWQganVzdCBwcm9jb3N0LCBjbyB1bmRvIHRo YXQuCisJCQkJICovCisJCQkJZnVuY0Nvc3QgPSBjb3N0LnBlcl90dXBsZSAvIGNwdV9vcGVy YXRvcl9jb3N0OworCisJCQkJcHJldl9kYXRhdHlwZSA9IGVtLT5lbV9kYXRhdHlwZTsKKwkJ CX0KKwkJfQorCisJCS8qIGZhY3RvciBpbiB0aGUgd2lkdGggb2YgdGhlIHZhbHVlcyBpbiB0 aGlzIGNvbHVtbiAqLworCQlmdW5jQ29zdCAqPSBnZXRfd2lkdGhfY29zdF9tdWx0aXBsaWVy KHJvb3QsIGVtLT5lbV9leHByKTsKKworCQkvKiBub3cgd2UgaGF2ZSBwZXIta2V5IGNvc3Qs IHNvIGFkZCB0byB0aGUgcnVubmluZyB0b3RhbCAqLworCQl0b3RhbEZ1bmNDb3N0ICs9IGZ1 bmNDb3N0OworCisJCS8qIHJlbWVtYmVyIGlmIHdlIGhhdmUgZm91bmQgYSBmYWtlIFZhciBp biBwYXRoa2V5cyAqLworCQloYXNfZmFrZV92YXIgfD0gaXNfZmFrZV92YXIoZW0tPmVtX2V4 cHIpOworCQlwYXRoa2V5RXhwcnMgPSBsYXBwZW5kKHBhdGhrZXlFeHBycywgZW0tPmVtX2V4 cHIpOworCisJCS8qCisJCSAqIFdlIG5lZWQgdG8gY2FsY3VsYXRlIHRoZSBudW1iZXIgb2Yg Y29tcGFyaXNvbnMgZm9yIHRoaXMgY29sdW1uLCB3aGljaAorCQkgKiByZXF1aXJlcyBrbm93 aW5nIHRoZSBncm91cCBzaXplLiBTbyB3ZSBlc3RpbWF0ZSB0aGUgbnVtYmVyIG9mIGdyb3Vw cworCQkgKiBieSBjYWxsaW5nIGVzdGltYXRlX251bV9ncm91cHNfaW5jcmVtZW50YWwoKSwg d2hpY2ggZXN0aW1hdGVzIHRoZQorCQkgKiBncm91cCBzaXplIGZvciAibmV3IiBwYXRoa2V5 cy4KKwkJICoKKwkJICogTm90ZTogZXN0aW1hdGVfbnVtX2dyb3Vwc19pbmNyZW1udGFsIGRv ZXMgbm90IGhhbmRsZSBmYWtlIFZhcnMsIHNvIHVzZQorCQkgKiBhIGRlZmF1bHQgZXN0aW1h dGUgb3RoZXJ3aXNlLgorCQkgKi8KKwkJaWYgKCFoYXNfZmFrZV92YXIpCisJCQluR3JvdXBz ID0gZXN0aW1hdGVfbnVtX2dyb3Vwc19pbmNyZW1lbnRhbChyb290LCBwYXRoa2V5RXhwcnMs CisJCQkJCQkJCQkJCQkJICB0dXBsZXNQZXJQcmV2R3JvdXAsIE5VTEwsIE5VTEwsCisJCQkJ CQkJCQkJCQkJICAmY2FjaGVfdmFyaW5mb3MsCisJCQkJCQkJCQkJCQkJICBsaXN0X2xlbmd0 aChwYXRoa2V5RXhwcnMpIC0gMSk7CisJCWVsc2UgaWYgKHR1cGxlcyA+IDQuMCkKKwkJCS8q CisJCQkgKiBVc2UgZ2VvbWV0cmljIG1lYW4gYXMgZXN0aW1hdGlvbiBpZiB0aGVyZSBhcmUg bm8gc3RhdHMuCisJCQkgKgorCQkJICogV2UgZG9uJ3QgdXNlIERFRkFVTFRfTlVNX0RJU1RJ TkNUIGhlcmUsIGJlY2F1c2UgdGhhdOKAmXMgdXNlZCBmb3IKKwkJCSAqIGEgc2luZ2xlIGNv bHVtbiwgYnV0IGhlcmUgd2XigJlyZSBkZWFsaW5nIHdpdGggbXVsdGlwbGUgY29sdW1ucy4K KwkJCSAqLworCQkJbkdyb3VwcyA9IGNlaWwoMi4wICsgc3FydCh0dXBsZXMpICogKGkgKyAx KSAvIGxpc3RfbGVuZ3RoKHBhdGhrZXlzKSk7CisJCWVsc2UKKwkJCW5Hcm91cHMgPSB0dXBs ZXM7CisKKwkJLyoKKwkJICogUHJlc29ydGVkIGtleXMgYXJlIG5vdCBjb25zaWRlcmVkIGlu IHRoZSBjb3N0IGFib3ZlLCBidXQgd2Ugc3RpbGwgZG8KKwkJICogaGF2ZSB0byBjb21wYXJl IHRoZW0gaW4gdGhlIHFzb3J0IGNvbXBhcmF0b3IuIFNvIG1ha2Ugc3VyZSB0byBmYWN0b3IK KwkJICogaW4gdGhlIGNvc3QgaW4gdGhhdCBjYXNlLgorCQkgKi8KKwkJaWYgKGkgPj0gblBy ZXNvcnRlZEtleXMpCisJCXsKKwkJCWlmIChoZWFwU29ydCkKKwkJCXsKKwkJCQkvKiBoYXZl IHRvIGtlZXAgYXQgbGVhc3Qgb25lIGdyb3VwLCBhbmQgYSBtdWx0aXBsZSBvZiBncm91cCBz aXplICovCisJCQkJY29ycmVjdGVkTkdyb3VwcyA9IGNlaWwob3V0cHV0X3R1cGxlcyAvIHR1 cGxlc1BlclByZXZHcm91cCk7CisJCQl9CisJCQllbHNlCisJCQkJLyogYWxsIGdyb3VwcyBp biB0aGUgaW5wdXQgKi8KKwkJCQljb3JyZWN0ZWROR3JvdXBzID0gbkdyb3VwczsKKworCQkJ Y29ycmVjdGVkTkdyb3VwcyA9IE1heCgxLjAsIGNlaWwoY29ycmVjdGVkTkdyb3VwcykpOwor CisJCQlwZXJfdHVwbGVfY29zdCArPSB0b3RhbEZ1bmNDb3N0ICogTE9HMihjb3JyZWN0ZWRO R3JvdXBzKTsKKwkJfQorCisJCWkrKzsKKworCQkvKgorCQkgKiBVbmlmb3JtIGRpc3RyaWJ1 dGlvbnMgd2l0aCBhbGwgZ3JvdXBzIGJlaW5nIG9mIHRoZSBzYW1lIHNpemUgYXJlIHRoZQor CQkgKiBiZXN0IGNhc2UsIHdpdGggbmljZSBzbW9vdGggYmVoYXZpb3IuIFJlYWwtd29ybGQg ZGlzdHJpYnV0aW9ucyB0ZW5kCisJCSAqIG5vdCB0byBiZSB1bmlmb3JtLCB0aG91Z2gsIGFu ZCB3ZSBkb27igJl0IGhhdmUgYW55IHJlbGlhYmxlIGVhc3ktdG8tdXNlCisJCSAqIGluZm9y bWF0aW9uLiBBcyBhIGJhc2ljIGRlZmVuc2UgYWdhaW5zdCBza2V3ZWQgZGlzdHJpYnV0aW9u cywgd2UgdXNlCisJCSAqIGEgMS41IGZhY3RvciB0byBtYWtlIHRoZSBleHBlY3RlZCBncm91 cCBhIGJpdCBsYXJnZXIsIGJ1dCB3ZSBuZWVkIHRvCisJCSAqIGJlIGNhcmVmdWwgbm90IHRv IG1ha2UgdGhlIGdyb3VwIGxhcmdlciB0aGFuIGluIHRoZSBwcmVjZWRpbmcgc3RlcC4KKwkJ ICovCisJCXR1cGxlc1BlclByZXZHcm91cCA9IE1pbih0dXBsZXNQZXJQcmV2R3JvdXAsCisJ CQkJCQkJCSBjZWlsKDEuNSAqIHR1cGxlc1BlclByZXZHcm91cCAvIG5Hcm91cHMpKTsKKwor CQkvKgorCQkgKiBPbmNlIHdlIGdldCBzaW5nbGUtcm93IGdyb3VwLCBpdCBtZWFucyB0dXBs ZXMgaW4gdGhlIGdyb3VwIGFyZSB1bmlxdWUKKwkJICogYW5kIHdlIGNhbiBza2lwIGFsbCBy ZW1haW5pbmcgY29sdW1ucy4KKwkJICovCisJCWlmICh0dXBsZXNQZXJQcmV2R3JvdXAgPD0g MS4wKQorCQkJYnJlYWs7CisJfQorCisJbGlzdF9mcmVlKHBhdGhrZXlFeHBycyk7CisKKwkv KiBwZXJfdHVwbGVfY29zdCBpcyBpbiBjcHVfb3BlcmF0b3JfY29zdCB1bml0cyAqLworCXBl cl90dXBsZV9jb3N0ICo9IGNwdV9vcGVyYXRvcl9jb3N0OworCisJLyoKKwkgKiBBY2NvcmRp bmdseSB0byAiSW50cm9kdWN0aW9uIHRvIGFsZ29yaXRobXMiLCBUaG9tYXMgSC4gQ29ybWVu LCBDaGFybGVzIEUuCisJICogTGVpc2Vyc29uLCBSb25hbGQgTC4gUml2ZXN0LCBJU0JOIDAt MDctMDEzMTQzLTAsIHF1aWNrc29ydCBlc3RpbWF0aW9uCisJICogZm9ybXVsYSBoYXMgYWRk aXRpb25hbCB0ZXJtIHByb3BvcnRpb25hbCB0byBudW1iZXIgb2YgdHVwbGVzIChTZWUgQ2hh cHRlcgorCSAqIDguMiBhbmQgVGhlb3JlbSA0LjEpLiBUaGF0IGFmZmVjdHMgIGNhc2VzIHdp dGggYSBsb3cgbnVtYmVyIG9mIHR1cGxlcywKKwkgKiBhcHByb3hpbWF0ZWx5IGxlc3MgdGhh biAxZTQuIFdlIGNvdWxkIGltcGxlbWVudCBpdCBhcyBhbiBhZGRpdGlvbmFsCisJICogbXVs dGlwbGllciB1bmRlciB0aGUgbG9nYXJpdGhtLCBidXQgd2UgdXNlIGEgYml0IG1vcmUgY29t cGxleCBmb3JtdWxhCisJICogd2hpY2ggdGFrZXMgaW50byBhY2NvdW50IHRoZSBudW1iZXIg b2YgdW5pcXVlIHR1cGxlcyBhbmQgaXTigJlzIG5vdCBjbGVhcgorCSAqIGhvdyB0byBjb21i aW5lIHRoZSBtdWx0aXBsaWVyIHdpdGggdGhlIG51bWJlciBvZiBncm91cHMuIEVzdGltYXRl IGl0IGFzCisJICogMTAgaW4gY3B1X29wZXJhdG9yX2Nvc3QgdW5pdC4KKwkgKi8KKwlwZXJf dHVwbGVfY29zdCArPSAxMCAqIGNwdV9vcGVyYXRvcl9jb3N0OworCisJcGVyX3R1cGxlX2Nv c3QgKz0gY29tcGFyaXNvbl9jb3N0OworCisJcmV0dXJuIHR1cGxlcyAqIHBlcl90dXBsZV9j b3N0OworfQorCisvKgorICogc2ltcGxlIHdyYXBwZXIganVzdCB0byBlc3RpbWF0ZSBiZXN0 IHNvcnQgcGF0aAorICovCitDb3N0Citjb3N0X3NvcnRfZXN0aW1hdGUoUGxhbm5lckluZm8g KnJvb3QsIExpc3QgKnBhdGhrZXlzLCBpbnQgblByZXNvcnRlZEtleXMsCisJCQkJICAgZG91 YmxlIHR1cGxlcykKK3sKKwlyZXR1cm4gY29tcHV0ZV9jcHVfc29ydF9jb3N0KHJvb3QsIHBh dGhrZXlzLCBuUHJlc29ydGVkS2V5cywKKwkJCQkJCQkJMCwgdHVwbGVzLCB0dXBsZXMsIGZh bHNlKTsKK30KKwogLyoKICAqIGNvc3RfdHVwbGVzb3J0CiAgKgkgIERldGVybWluZXMgYW5k IHJldHVybnMgdGhlIGNvc3Qgb2Ygc29ydGluZyBhIHJlbGF0aW9uIHVzaW5nIHR1cGxlc29y dCwKQEAgLTE3NzEsNyArMjA4Nyw3IEBAIGNvc3RfcmVjdXJzaXZlX3VuaW9uKFBhdGggKnJ1 bmlvbiwgUGF0aCAqbnJ0ZXJtLCBQYXRoICpydGVybSkKICAqIG51bWJlciBvZiBpbml0aWFs IHJ1bnMgZm9ybWVkIGFuZCBNIGlzIHRoZSBtZXJnZSBvcmRlciB1c2VkIGJ5IHR1cGxlc29y dC5jLgogICogU2luY2UgdGhlIGF2ZXJhZ2UgaW5pdGlhbCBydW4gc2hvdWxkIGJlIGFib3V0 IHNvcnRfbWVtLCB3ZSBoYXZlCiAgKgkJZGlzayB0cmFmZmljID0gMiAqIHJlbHNpemUgKiBj ZWlsKGxvZ00ocCAvIHNvcnRfbWVtKSkKLSAqCQljcHUgPSBjb21wYXJpc29uX2Nvc3QgKiB0 ICogbG9nMih0KQorICogCQlhbmQgY3B1IGNvc3QgKGNvbXB1dGVkIGJ5IGNvbXB1dGVfY3B1 X3NvcnRfY29zdCgpKS4KICAqCiAgKiBJZiB0aGUgc29ydCBpcyBib3VuZGVkIChpLmUuLCBv bmx5IHRoZSBmaXJzdCBrIHJlc3VsdCB0dXBsZXMgYXJlIG5lZWRlZCkKICAqIGFuZCBrIHR1 cGxlcyBjYW4gZml0IGludG8gc29ydF9tZW0sIHdlIHVzZSBhIGhlYXAgbWV0aG9kIHRoYXQg a2VlcHMgb25seQpAQCAtMTc5MCw5ICsyMTA2LDExIEBAIGNvc3RfcmVjdXJzaXZlX3VuaW9u KFBhdGggKnJ1bmlvbiwgUGF0aCAqbnJ0ZXJtLCBQYXRoICpydGVybSkKICAqICdjb21wYXJp c29uX2Nvc3QnIGlzIHRoZSBleHRyYSBjb3N0IHBlciBjb21wYXJpc29uLCBpZiBhbnkKICAq ICdzb3J0X21lbScgaXMgdGhlIG51bWJlciBvZiBraWxvYnl0ZXMgb2Ygd29yayBtZW1vcnkg YWxsb3dlZCBmb3IgdGhlIHNvcnQKICAqICdsaW1pdF90dXBsZXMnIGlzIHRoZSBib3VuZCBv biB0aGUgbnVtYmVyIG9mIG91dHB1dCB0dXBsZXM7IC0xIGlmIG5vIGJvdW5kCisgKiAnc3Rh cnR1cF9jb3N0JyBpcyBleHBlY3RlZCB0byBiZSAwIGF0IGlucHV0LiBJZiB0aGVyZSBpcyAi aW5wdXQgY29zdCIgaXQgc2hvdWxkCisgKiBiZSBhZGRlZCBieSBjYWxsZXIgbGF0ZXIKICAq Lwogc3RhdGljIHZvaWQKLWNvc3RfdHVwbGVzb3J0KENvc3QgKnN0YXJ0dXBfY29zdCwgQ29z dCAqcnVuX2Nvc3QsCitjb3N0X3R1cGxlc29ydChQbGFubmVySW5mbyAqcm9vdCwgTGlzdCAq cGF0aGtleXMsIENvc3QgKnN0YXJ0dXBfY29zdCwgQ29zdCAqcnVuX2Nvc3QsCiAJCQkgICBk b3VibGUgdHVwbGVzLCBpbnQgd2lkdGgsCiAJCQkgICBDb3N0IGNvbXBhcmlzb25fY29zdCwg aW50IHNvcnRfbWVtLAogCQkJICAgZG91YmxlIGxpbWl0X3R1cGxlcykKQEAgLTE4MDksOSAr MjEyNyw2IEBAIGNvc3RfdHVwbGVzb3J0KENvc3QgKnN0YXJ0dXBfY29zdCwgQ29zdCAqcnVu X2Nvc3QsCiAJaWYgKHR1cGxlcyA8IDIuMCkKIAkJdHVwbGVzID0gMi4wOwogCi0JLyogSW5j bHVkZSB0aGUgZGVmYXVsdCBjb3N0LXBlci1jb21wYXJpc29uICovCi0JY29tcGFyaXNvbl9j b3N0ICs9IDIuMCAqIGNwdV9vcGVyYXRvcl9jb3N0OwotCiAJLyogRG8gd2UgaGF2ZSBhIHVz ZWZ1bCBMSU1JVD8gKi8KIAlpZiAobGltaXRfdHVwbGVzID4gMCAmJiBsaW1pdF90dXBsZXMg PCB0dXBsZXMpCiAJewpAQCAtMTgzNSwxMiArMjE1MCwxMCBAQCBjb3N0X3R1cGxlc29ydChD b3N0ICpzdGFydHVwX2Nvc3QsIENvc3QgKnJ1bl9jb3N0LAogCQlkb3VibGUJCWxvZ19ydW5z OwogCQlkb3VibGUJCW5wYWdlYWNjZXNzZXM7CiAKLQkJLyoKLQkJICogQ1BVIGNvc3RzCi0J CSAqCi0JCSAqIEFzc3VtZSBhYm91dCBOIGxvZzIgTiBjb21wYXJpc29ucwotCQkgKi8KLQkJ KnN0YXJ0dXBfY29zdCA9IGNvbXBhcmlzb25fY29zdCAqIHR1cGxlcyAqIExPRzIodHVwbGVz KTsKKwkJLyogQ1BVIGNvc3RzICovCisJCSpzdGFydHVwX2Nvc3QgPSBjb21wdXRlX2NwdV9z b3J0X2Nvc3Qocm9vdCwgcGF0aGtleXMsIDAsCisJCQkJCQkJCQkJCSAgY29tcGFyaXNvbl9j b3N0LCB0dXBsZXMsCisJCQkJCQkJCQkJCSAgdHVwbGVzLCBmYWxzZSk7CiAKIAkJLyogRGlz ayBjb3N0cyAqLwogCkBAIC0xODU2LDE4ICsyMTY5LDE3IEBAIGNvc3RfdHVwbGVzb3J0KENv c3QgKnN0YXJ0dXBfY29zdCwgQ29zdCAqcnVuX2Nvc3QsCiAJfQogCWVsc2UgaWYgKHR1cGxl cyA+IDIgKiBvdXRwdXRfdHVwbGVzIHx8IGlucHV0X2J5dGVzID4gc29ydF9tZW1fYnl0ZXMp CiAJewotCQkvKgotCQkgKiBXZSdsbCB1c2UgYSBib3VuZGVkIGhlYXAtc29ydCBrZWVwaW5n IGp1c3QgSyB0dXBsZXMgaW4gbWVtb3J5LCBmb3IKLQkJICogYSB0b3RhbCBudW1iZXIgb2Yg dHVwbGUgY29tcGFyaXNvbnMgb2YgTiBsb2cyIEs7IGJ1dCB0aGUgY29uc3RhbnQKLQkJICog ZmFjdG9yIGlzIGEgYml0IGhpZ2hlciB0aGFuIGZvciBxdWlja3NvcnQuICBUd2VhayBpdCBz byB0aGF0IHRoZQotCQkgKiBjb3N0IGN1cnZlIGlzIGNvbnRpbnVvdXMgYXQgdGhlIGNyb3Nz b3ZlciBwb2ludC4KLQkJICovCi0JCSpzdGFydHVwX2Nvc3QgPSBjb21wYXJpc29uX2Nvc3Qg KiB0dXBsZXMgKiBMT0cyKDIuMCAqIG91dHB1dF90dXBsZXMpOworCQkvKiBXZSdsbCB1c2Ug YSBib3VuZGVkIGhlYXAtc29ydCBrZWVwaW5nIGp1c3QgSyB0dXBsZXMgaW4gbWVtb3J5LiAq LworCQkqc3RhcnR1cF9jb3N0ID0gY29tcHV0ZV9jcHVfc29ydF9jb3N0KHJvb3QsIHBhdGhr ZXlzLCAwLAorCQkJCQkJCQkJCQkgIGNvbXBhcmlzb25fY29zdCwgdHVwbGVzLAorCQkJCQkJ CQkJCQkgIG91dHB1dF90dXBsZXMsIHRydWUpOwogCX0KIAllbHNlCiAJewogCQkvKiBXZSds bCB1c2UgcGxhaW4gcXVpY2tzb3J0IG9uIGFsbCB0aGUgaW5wdXQgdHVwbGVzICovCi0JCSpz dGFydHVwX2Nvc3QgPSBjb21wYXJpc29uX2Nvc3QgKiB0dXBsZXMgKiBMT0cyKHR1cGxlcyk7 CisJCSpzdGFydHVwX2Nvc3QgPSBjb21wdXRlX2NwdV9zb3J0X2Nvc3Qocm9vdCwgcGF0aGtl eXMsIDAsCisJCQkJCQkJCQkJCSAgY29tcGFyaXNvbl9jb3N0LCB0dXBsZXMsCisJCQkJCQkJ CQkJCSAgdHVwbGVzLCBmYWxzZSk7CiAJfQogCiAJLyoKQEAgLTE5MDAsOCArMjIxMiw4IEBA IGNvc3RfaW5jcmVtZW50YWxfc29ydChQYXRoICpwYXRoLAogCQkJCQkgIGRvdWJsZSBpbnB1 dF90dXBsZXMsIGludCB3aWR0aCwgQ29zdCBjb21wYXJpc29uX2Nvc3QsIGludCBzb3J0X21l bSwKIAkJCQkJICBkb3VibGUgbGltaXRfdHVwbGVzKQogewotCUNvc3QJCXN0YXJ0dXBfY29z dCA9IDAsCi0JCQkJcnVuX2Nvc3QgPSAwLAorCUNvc3QJCXN0YXJ0dXBfY29zdCwKKwkJCQly dW5fY29zdCwKIAkJCQlpbnB1dF9ydW5fY29zdCA9IGlucHV0X3RvdGFsX2Nvc3QgLSBpbnB1 dF9zdGFydHVwX2Nvc3Q7CiAJZG91YmxlCQlncm91cF90dXBsZXMsCiAJCQkJaW5wdXRfZ3Jv dXBzOwpAQCAtMTk4Niw3ICsyMjk4LDcgQEAgY29zdF9pbmNyZW1lbnRhbF9zb3J0KFBhdGgg KnBhdGgsCiAJICogcGVzc2ltaXN0aWMgYWJvdXQgaW5jcmVtZW50YWwgc29ydCBwZXJmb3Jt YW5jZSBhbmQgaW5jcmVhc2UgaXRzIGF2ZXJhZ2UKIAkgKiBncm91cCBzaXplIGJ5IGhhbGYu CiAJICovCi0JY29zdF90dXBsZXNvcnQoJmdyb3VwX3N0YXJ0dXBfY29zdCwgJmdyb3VwX3J1 bl9jb3N0LAorCWNvc3RfdHVwbGVzb3J0KHJvb3QsIHBhdGhrZXlzLCAmZ3JvdXBfc3RhcnR1 cF9jb3N0LCAmZ3JvdXBfcnVuX2Nvc3QsCiAJCQkJICAgMS41ICogZ3JvdXBfdHVwbGVzLCB3 aWR0aCwgY29tcGFyaXNvbl9jb3N0LCBzb3J0X21lbSwKIAkJCQkgICBsaW1pdF90dXBsZXMp OwogCkBAIC0xOTk0LDcgKzIzMDYsNyBAQCBjb3N0X2luY3JlbWVudGFsX3NvcnQoUGF0aCAq cGF0aCwKIAkgKiBTdGFydHVwIGNvc3Qgb2YgaW5jcmVtZW50YWwgc29ydCBpcyB0aGUgc3Rh cnR1cCBjb3N0IG9mIGl0cyBmaXJzdCBncm91cAogCSAqIHBsdXMgdGhlIGNvc3Qgb2YgaXRz IGlucHV0LgogCSAqLwotCXN0YXJ0dXBfY29zdCArPSBncm91cF9zdGFydHVwX2Nvc3QKKwlz dGFydHVwX2Nvc3QgPSBncm91cF9zdGFydHVwX2Nvc3QKIAkJKyBpbnB1dF9zdGFydHVwX2Nv c3QgKyBncm91cF9pbnB1dF9ydW5fY29zdDsKIAogCS8qCkBAIC0yMDAzLDcgKzIzMTUsNyBA QCBjb3N0X2luY3JlbWVudGFsX3NvcnQoUGF0aCAqcGF0aCwKIAkgKiBncm91cCwgcGx1cyB0 aGUgdG90YWwgY29zdCB0byBwcm9jZXNzIHRoZSByZW1haW5pbmcgZ3JvdXBzLCBwbHVzIHRo ZQogCSAqIHJlbWFpbmluZyBjb3N0IG9mIGlucHV0LgogCSAqLwotCXJ1bl9jb3N0ICs9IGdy b3VwX3J1bl9jb3N0CisJcnVuX2Nvc3QgPSBncm91cF9ydW5fY29zdAogCQkrIChncm91cF9y dW5fY29zdCArIGdyb3VwX3N0YXJ0dXBfY29zdCkgKiAoaW5wdXRfZ3JvdXBzIC0gMSkKIAkJ KyBncm91cF9pbnB1dF9ydW5fY29zdCAqIChpbnB1dF9ncm91cHMgLSAxKTsKIApAQCAtMjA0 Myw3ICsyMzU1LDcgQEAgY29zdF9zb3J0KFBhdGggKnBhdGgsIFBsYW5uZXJJbmZvICpyb290 LAogCUNvc3QJCXN0YXJ0dXBfY29zdDsKIAlDb3N0CQlydW5fY29zdDsKIAotCWNvc3RfdHVw bGVzb3J0KCZzdGFydHVwX2Nvc3QsICZydW5fY29zdCwKKwljb3N0X3R1cGxlc29ydChyb290 LCBwYXRoa2V5cywgJnN0YXJ0dXBfY29zdCwgJnJ1bl9jb3N0LAogCQkJCSAgIHR1cGxlcywg d2lkdGgsCiAJCQkJICAgY29tcGFyaXNvbl9jb3N0LCBzb3J0X21lbSwKIAkJCQkgICBsaW1p dF90dXBsZXMpOwpAQCAtMjE0MSw3ICsyNDUzLDcgQEAgYXBwZW5kX25vbnBhcnRpYWxfY29z dChMaXN0ICpzdWJwYXRocywgaW50IG51bXBhdGhzLCBpbnQgcGFyYWxsZWxfd29ya2VycykK ICAqCSAgRGV0ZXJtaW5lcyBhbmQgcmV0dXJucyB0aGUgY29zdCBvZiBhbiBBcHBlbmQgbm9k ZS4KICAqLwogdm9pZAotY29zdF9hcHBlbmQoQXBwZW5kUGF0aCAqYXBhdGgpCitjb3N0X2Fw cGVuZChBcHBlbmRQYXRoICphcGF0aCwgUGxhbm5lckluZm8gKnJvb3QpCiB7CiAJTGlzdENl bGwgICAqbDsKIApAQCAtMjIwOSw3ICsyNTIxLDcgQEAgY29zdF9hcHBlbmQoQXBwZW5kUGF0 aCAqYXBhdGgpCiAJCQkJCSAqIGFueSBjaGlsZC4KIAkJCQkJICovCiAJCQkJCWNvc3Rfc29y dCgmc29ydF9wYXRoLAotCQkJCQkJCSAgTlVMTCwgLyogZG9lc24ndCBjdXJyZW50bHkgbmVl ZCByb290ICovCisJCQkJCQkJICByb290LAogCQkJCQkJCSAgcGF0aGtleXMsCiAJCQkJCQkJ ICBzdWJwYXRoLT50b3RhbF9jb3N0LAogCQkJCQkJCSAgc3VicGF0aC0+cm93cywKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2VxdWl2Y2xhc3MuYyBiL3NyYy9i YWNrZW5kL29wdGltaXplci9wYXRoL2VxdWl2Y2xhc3MuYwppbmRleCA4YzY3NzBkZTk3Mi4u MjU4MzAyODQwZjggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2Vx dWl2Y2xhc3MuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9lcXVpdmNsYXNz LmMKQEAgLTY4MSw3ICs2ODEsMTggQEAgZ2V0X2VjbGFzc19mb3Jfc29ydF9leHByKFBsYW5u ZXJJbmZvICpyb290LAogCiAJCQlpZiAob3BjaW50eXBlID09IGN1cl9lbS0+ZW1fZGF0YXR5 cGUgJiYKIAkJCQllcXVhbChleHByLCBjdXJfZW0tPmVtX2V4cHIpKQotCQkJCXJldHVybiBj dXJfZWM7CS8qIE1hdGNoISAqLworCQkJeworCQkJCS8qCisJCQkJICogTWF0Y2ghCisJCQkJ ICoKKwkJCQkgKiBDb3B5IHRoZSBzb3J0cmVmIGlmIGl0IHdhc24ndCBzZXQgeWV0LiBUaGF0 IG1heSBoYXBwZW4gaWYgdGhlCisJCQkJICogZWMgd2FzIGNvbnN0cnVjdGVkIGZyb20gV0hF UkUgY2xhdXNlLCBpLmUuIGl0IGRvZXNuJ3QgaGF2ZSBhCisJCQkJICogdGFyZ2V0IHJlZmVy ZW5jZSBhdCBhbGwuCisJCQkJICovCisJCQkJaWYgKGN1cl9lYy0+ZWNfc29ydHJlZiA9PSAw ICYmIHNvcnRyZWYgPiAwKQorCQkJCQljdXJfZWMtPmVjX3NvcnRyZWYgPSBzb3J0cmVmOwor CQkJCXJldHVybiBjdXJfZWM7CisJCQl9CiAJCX0KIAl9CiAKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL29wdGltaXplci9wYXRoL3BhdGhrZXlzLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6 ZXIvcGF0aC9wYXRoa2V5cy5jCmluZGV4IDg2YTM1Y2RlZjE3Li43NWZlMDNmZDA0YiAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvcGF0aGtleXMuYworKysgYi9z cmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9wYXRoa2V5cy5jCkBAIC0xNywxNyArMTcsMjIg QEAKICAqLwogI2luY2x1ZGUgInBvc3RncmVzLmgiCiAKKyNpbmNsdWRlICJtaXNjYWRtaW4u aCIKICNpbmNsdWRlICJhY2Nlc3Mvc3RyYXRudW0uaCIKICNpbmNsdWRlICJjYXRhbG9nL3Bn X29wZmFtaWx5LmgiCiAjaW5jbHVkZSAibm9kZXMvbWFrZWZ1bmNzLmgiCiAjaW5jbHVkZSAi bm9kZXMvbm9kZUZ1bmNzLmgiCiAjaW5jbHVkZSAibm9kZXMvcGxhbm5vZGVzLmgiCisjaW5j bHVkZSAib3B0aW1pemVyL2Nvc3QuaCIKICNpbmNsdWRlICJvcHRpbWl6ZXIvb3B0aW1pemVy LmgiCiAjaW5jbHVkZSAib3B0aW1pemVyL3BhdGhub2RlLmgiCiAjaW5jbHVkZSAib3B0aW1p emVyL3BhdGhzLmgiCiAjaW5jbHVkZSAicGFydGl0aW9uaW5nL3BhcnRib3VuZHMuaCIKICNp bmNsdWRlICJ1dGlscy9sc3lzY2FjaGUuaCIKKyNpbmNsdWRlICJ1dGlscy9zZWxmdW5jcy5o IgogCisvKiBDb25zaWRlciByZW9yZGVyaW5nIG9mIEdST1VQIEJZIGtleXM/ICovCitib29s IGVuYWJsZV9ncm91cF9ieV9yZW9yZGVyaW5nID0gdHJ1ZTsKIAogc3RhdGljIGJvb2wgcGF0 aGtleV9pc19yZWR1bmRhbnQoUGF0aEtleSAqbmV3X3BhdGhrZXksIExpc3QgKnBhdGhrZXlz KTsKIHN0YXRpYyBib29sIG1hdGNoZXNfYm9vbGVhbl9wYXJ0aXRpb25fY2xhdXNlKFJlc3Ry aWN0SW5mbyAqcmluZm8sCkBAIC0zMzQsNiArMzM5LDUxNyBAQCBwYXRoa2V5c19jb250YWlu ZWRfaW4oTGlzdCAqa2V5czEsIExpc3QgKmtleXMyKQogCXJldHVybiBmYWxzZTsKIH0KIAor LyoKKyAqIGdyb3VwX2tleXNfcmVvcmRlcl9ieV9wYXRoa2V5cworICoJCVJlb3JkZXIgR1JP VVAgQlkga2V5cyB0byBtYXRjaCBwYXRoa2V5cyBvZiBpbnB1dCBwYXRoLgorICoKKyAqIEZ1 bmN0aW9uIHJldHVybnMgbmV3IGxpc3RzIChwYXRoa2V5cyBhbmQgY2xhdXNlcyksIG9yaWdp bmFsIEdST1VQIEJZIGxpc3RzCisgKiBzdGF5IHVudG91Y2hlZC4KKyAqCisgKiBSZXR1cm5z IHRoZSBudW1iZXIgb2YgR1JPVVAgQlkga2V5cyB3aXRoIGEgbWF0Y2hpbmcgcGF0aGtleS4K KyAqLworaW50Citncm91cF9rZXlzX3Jlb3JkZXJfYnlfcGF0aGtleXMoTGlzdCAqcGF0aGtl eXMsIExpc3QgKipncm91cF9wYXRoa2V5cywKKwkJCQkJCQkgICBMaXN0ICoqZ3JvdXBfY2xh dXNlcykKK3sKKwlMaXN0CSAgICpuZXdfZ3JvdXBfcGF0aGtleXM9IE5JTCwKKwkJCSAgICpu ZXdfZ3JvdXBfY2xhdXNlcyA9IE5JTDsKKwlMaXN0Q2VsbCAgICpsYzsKKwlpbnQJCQluOwor CisJaWYgKHBhdGhrZXlzID09IE5JTCB8fCAqZ3JvdXBfcGF0aGtleXMgPT0gTklMKQorCQly ZXR1cm4gMDsKKworCS8qCisJICogV2FsayB0aGUgcGF0aGtleXMgKGRldGVybWluaW5nIG9y ZGVyaW5nIG9mIHRoZSBpbnB1dCBwYXRoKSBhbmQgc2VlIGlmCisJICogdGhlcmUncyBhIG1h dGNoaW5nIEdST1VQIEJZIGtleS4gSWYgd2UgZmluZCBvbmUsIHdlIGFwcGVuZCBpdCB0byB0 aGUKKwkgKiBsaXN0LCBhbmQgZG8gdGhlIHNhbWUgZm9yIHRoZSBjbGF1c2VzLgorCSAqCisJ ICogT25jZSB3ZSBmaW5kIHRoZSBmaXJzdCBwYXRoa2V5IHdpdGhvdXQgYSBtYXRjaGluZyBH Uk9VUCBCWSBrZXksIHRoZSByZXN0CisJICogb2YgdGhlIHBhdGhrZXlzIGFyZSB1c2VsZXNz IGFuZCBjYW4ndCBiZSB1c2VkIHRvIGV2YWx1YXRlIHRoZSBncm91cGluZywKKwkgKiBzbyB3 ZSBhYm9ydCB0aGUgbG9vcCBhbmQgaWdub3JlIHRoZSByZW1haW5pbmcgcGF0aGtleXMuCisJ ICoKKwkgKiBYWFggUGF0aGtleXMgYXJlIGJ1aWx0IGluIGEgd2F5IHRvIGFsbG93IHNpbXBs eSBjb21wYXJpbmcgcG9pbnRlcnMuCisJICovCisJZm9yZWFjaChsYywgcGF0aGtleXMpCisJ eworCQlQYXRoS2V5CQkJKnBhdGhrZXkgPSAoUGF0aEtleSAqKSBsZmlyc3QobGMpOworCQlT b3J0R3JvdXBDbGF1c2UJKnNnYzsKKworCQkvKiBhYm9ydCBvbiBmaXJzdCBtaXNtYXRjaCAq LworCQlpZiAoIWxpc3RfbWVtYmVyX3B0cigqZ3JvdXBfcGF0aGtleXMsIHBhdGhrZXkpKQor CQkJYnJlYWs7CisKKwkJbmV3X2dyb3VwX3BhdGhrZXlzID0gbGFwcGVuZChuZXdfZ3JvdXBf cGF0aGtleXMsIHBhdGhrZXkpOworCisJCXNnYyA9IGdldF9zb3J0Z3JvdXByZWZfY2xhdXNl KHBhdGhrZXktPnBrX2VjbGFzcy0+ZWNfc29ydHJlZiwKKwkJCQkJCQkJCSAgKmdyb3VwX2Ns YXVzZXMpOworCisJCW5ld19ncm91cF9jbGF1c2VzID0gbGFwcGVuZChuZXdfZ3JvdXBfY2xh dXNlcywgc2djKTsKKwl9CisKKwkvKiByZW1lbWJlciB0aGUgbnVtYmVyIG9mIHBhdGhrZXlz IHdpdGggYSBtYXRjaGluZyBHUk9VUCBCWSBrZXkgKi8KKwluID0gbGlzdF9sZW5ndGgobmV3 X2dyb3VwX3BhdGhrZXlzKTsKKworCS8qIGFwcGVuZCB0aGUgcmVtYWluaW5nIGdyb3VwIHBh dGhrZXlzICh3aWxsIGJlIHRyZWF0ZWQgYXMgbm90IHNvcnRlZCkgKi8KKwkqZ3JvdXBfcGF0 aGtleXMgPSBsaXN0X2NvbmNhdF91bmlxdWVfcHRyKG5ld19ncm91cF9wYXRoa2V5cywKKwkJ CQkJCQkJCQkJICpncm91cF9wYXRoa2V5cyk7CisJKmdyb3VwX2NsYXVzZXMgPSBsaXN0X2Nv bmNhdF91bmlxdWVfcHRyKG5ld19ncm91cF9jbGF1c2VzLAorCQkJCQkJCQkJCQkqZ3JvdXBf Y2xhdXNlcyk7CisKKwlyZXR1cm4gbjsKK30KKworLyoKKyAqIFVzZWQgdG8gZ2VuZXJhdGUg YWxsIHBlcm11dGF0aW9ucyBvZiBhIHBhdGhrZXkgbGlzdC4KKyAqLwordHlwZWRlZiBzdHJ1 Y3QgUGF0aGtleU11dGF0b3JTdGF0ZSB7CisJTGlzdAkgICAqZWxlbXNMaXN0OworCUxpc3RD ZWxsICAqKmVsZW1DZWxsczsKKwl2b2lkCSAgKiplbGVtczsKKwlpbnQJCSAgICpwb3NpdGlv bnM7CisJaW50CQkJIG11dGF0b3JOQ29sdW1uczsKKwlpbnQJCQkgY291bnQ7Cit9IFBhdGhr ZXlNdXRhdG9yU3RhdGU7CisKKworLyoKKyAqIFBhdGhrZXlNdXRhdG9ySW5pdAorICoJCUlu aXRpYWxpemUgc3RhdGUgb2YgdGhlIHBlcm11dGF0aW9uIGdlbmVyYXRvci4KKyAqCisgKiBX ZSB3YW50IHRvIGdlbmVyYXRlIHBlcm11dGF0aW9ucyBvZiBlbGVtZW50cyBpbiB0aGUgImVs ZW1zIiBsaXN0LiBXZSBtYXkgd2FudAorICogdG8gc2tpcCBzb21lIG51bWJlciBvZiBlbGVt ZW50cyBhdCB0aGUgYmVnaW5uaW5nICh3aGVuIHRyZWF0aW5nIGFzIHByZXNvcnRlZCkKKyAq IG9yIGF0IHRoZSBlbmQgKHdlIG9ubHkgcGVybXV0ZSBhIGxpbWl0ZWQgbnVtYmVyIG9mIGdy b3VwIGtleXMpLgorICoKKyAqIFRoZSBsaXN0IGlzIGRlY29tcG9zZWQgaW50byBlbGVtZW50 cywgYW5kIHdlIGFsc28ga2VlcCBwb2ludGVycyB0byBpbmRpdmlkdWFsCisgKiBjZWxscy4g VGhpcyBhbGxvd3MgdXMgdG8gYnVpbGQgdGhlIHBlcm11dGVkIGxpc3QgcXVpY2tseSBhbmQg Y2hlYXBseSwgd2l0aG91dAorICogY3JlYXRpbmcgYW55IGNvcGllcy4KKyAqLworc3RhdGlj IHZvaWQKK1BhdGhrZXlNdXRhdG9ySW5pdChQYXRoa2V5TXV0YXRvclN0YXRlICpzdGF0ZSwg TGlzdCAqZWxlbXMsIGludCBzdGFydCwgaW50IGVuZCkKK3sKKwlpbnQgaTsKKwlpbnQJCQlu ID0gZW5kIC0gc3RhcnQ7CisJTGlzdENlbGwJKmxjOworCisJbWVtc2V0KHN0YXRlLCAwLCBz aXplb2YoKnN0YXRlKSk7CisKKwlzdGF0ZS0+bXV0YXRvck5Db2x1bW5zID0gbjsKKworCXN0 YXRlLT5lbGVtc0xpc3QgPSBsaXN0X2NvcHkoZWxlbXMpOworCisJc3RhdGUtPmVsZW1zID0g cGFsbG9jKHNpemVvZih2b2lkKikgKiBuKTsKKwlzdGF0ZS0+ZWxlbUNlbGxzID0gcGFsbG9j KHNpemVvZihMaXN0Q2VsbCopICogbik7CisJc3RhdGUtPnBvc2l0aW9ucyA9IHBhbGxvYyhz aXplb2YoaW50KSAqIG4pOworCisJaSA9IDA7CisJZm9yX2VhY2hfY2VsbChsYywgc3RhdGUt PmVsZW1zTGlzdCwgbGlzdF9udGhfY2VsbChzdGF0ZS0+ZWxlbXNMaXN0LCBzdGFydCkpCisJ eworCQlzdGF0ZS0+ZWxlbUNlbGxzW2ldID0gbGM7CisJCXN0YXRlLT5lbGVtc1tpXSA9IGxm aXJzdChsYyk7CisJCXN0YXRlLT5wb3NpdGlvbnNbaV0gPSBpICsgMTsKKwkJaSsrOworCisJ CWlmIChpID49IG4pCisJCQlicmVhazsKKwl9Cit9CisKKy8qIFN3YXAgdHdvIGVsZW1lbnRz IG9mIGFuIGFycmF5LiAqLworc3RhdGljIHZvaWQKK1BhdGhrZXlNdXRhdG9yU3dhcChpbnQg KmEsIGludCBpLCBpbnQgaikKK3sKKyAgaW50IHMgPSBhW2ldOworCisgIGFbaV0gPSBhW2pd OworICBhW2pdID0gczsKK30KKworLyoKKyAqIEdlbmVyYXRlIHRoZSBuZXh0IHBlcm11dGF0 aW9uIG9mIGVsZW1lbnRzLgorICovCitzdGF0aWMgYm9vbAorUGF0aGtleU11dGF0b3JOZXh0 U2V0KGludCAqYSwgaW50IG4pCit7CisJaW50IGosIGssIGwsIHI7CisKKwlqID0gbiAtIDI7 CisKKwl3aGlsZSAoaiA+PSAwICYmIGFbal0gPj0gYVtqICsgMV0pCisJCWotLTsKKworCWlm IChqIDwgMCkKKwkJcmV0dXJuIGZhbHNlOworCisJayA9IG4gLSAxOworCisJd2hpbGUgKGsg Pj0gMCAmJiBhW2pdID49IGFba10pCisJCWstLTsKKworCVBhdGhrZXlNdXRhdG9yU3dhcChh LCBqLCBrKTsKKworCWwgPSBqICsgMTsKKwlyID0gbiAtIDE7CisKKwl3aGlsZSAobCA8IHIp CisJCVBhdGhrZXlNdXRhdG9yU3dhcChhLCBsKyssIHItLSk7CisKKwlyZXR1cm4gdHJ1ZTsK K30KKworLyoKKyAqIFBhdGhrZXlNdXRhdG9yTmV4dAorICoJCUdlbmVyYXRlIHRoZSBuZXh0 IHBlcm11dGF0aW9uIG9mIGxpc3Qgb2YgZWxlbWVudHMuCisgKgorICogUmV0dXJucyB0aGUg bmV4dCBwZXJtdXRhdGlvbiAoYXMgYSBsaXN0IG9mIGVsZW1lbnRzKSBvciBOSUwgaWYgdGhl cmUgYXJlIG5vCisgKiBtb3JlIHBlcm11dGF0aW9ucy4KKyAqLworc3RhdGljIExpc3QgKgor UGF0aGtleU11dGF0b3JOZXh0KFBhdGhrZXlNdXRhdG9yU3RhdGUgKnN0YXRlKQoreworCWlu dAlpOworCisJc3RhdGUtPmNvdW50Kys7CisKKwkvKiBmaXJzdCBwZXJtdXRhdGlvbiBpcyBv cmlnaW5hbCBsaXN0ICovCisJaWYgKHN0YXRlLT5jb3VudCA9PSAxKQorCQlyZXR1cm4gc3Rh dGUtPmVsZW1zTGlzdDsKKworCS8qIHdoZW4gdGhlcmUgYXJlIG5vIG1vcmUgcGVybXV0YXRp b25zLCByZXR1cm4gTklMICovCisJaWYgKCFQYXRoa2V5TXV0YXRvck5leHRTZXQoc3RhdGUt PnBvc2l0aW9ucywgc3RhdGUtPm11dGF0b3JOQ29sdW1ucykpCisJeworCQlwZnJlZShzdGF0 ZS0+ZWxlbXMpOworCQlwZnJlZShzdGF0ZS0+ZWxlbUNlbGxzKTsKKwkJcGZyZWUoc3RhdGUt PnBvc2l0aW9ucyk7CisKKwkJbGlzdF9mcmVlKHN0YXRlLT5lbGVtc0xpc3QpOworCisJCXJl dHVybiBOSUw7CisJfQorCisJLyogdXBkYXRlIHRoZSBsaXN0IGNlbGxzIHRvIHBvaW50IHRv IHRoZSByaWdodCBlbGVtZW50cyAqLworCWZvcihpID0gMDsgaSA8IHN0YXRlLT5tdXRhdG9y TkNvbHVtbnM7IGkrKykKKwkJbGZpcnN0KHN0YXRlLT5lbGVtQ2VsbHNbaV0pID0KKwkJCSh2 b2lkICopIHN0YXRlLT5lbGVtc1sgc3RhdGUtPnBvc2l0aW9uc1tpXSAtIDEgXTsKKworCXJl dHVybiBzdGF0ZS0+ZWxlbXNMaXN0OworfQorCisvKgorICogQ29zdCBvZiBjb21wYXJpbmcg cGF0aGtleXMuCisgKi8KK3R5cGVkZWYgc3RydWN0IFBhdGhrZXlTb3J0Q29zdAoreworCUNv c3QJCWNvc3Q7CisJUGF0aEtleQkgICAqcGF0aGtleTsKK30gUGF0aGtleVNvcnRDb3N0Owor CitzdGF0aWMgaW50CitwYXRoa2V5X3NvcnRfY29zdF9jb21wYXJhdG9yKGNvbnN0IHZvaWQg Kl9hLCBjb25zdCB2b2lkICpfYikKK3sKKwljb25zdCBQYXRoa2V5U29ydENvc3QgKmEgPSAo UGF0aGtleVNvcnRDb3N0ICopIF9hOworCWNvbnN0IFBhdGhrZXlTb3J0Q29zdCAqYiA9IChQ YXRoa2V5U29ydENvc3QgKikgX2I7CisKKwlpZiAoYS0+Y29zdCA8IGItPmNvc3QpCisJCXJl dHVybiAtMTsKKwllbHNlIGlmIChhLT5jb3N0ID09IGItPmNvc3QpCisJCXJldHVybiAwOwor CXJldHVybiAxOworfQorCisvKgorICogZ2V0X2NoZWFwZXN0X2dyb3VwX2tleXNfb3JkZXIK KyAqCQlSZW9yZGVycyB0aGUgZ3JvdXAgcGF0aGtleXMvY2xhdXNlcyB0byBtaW5pbWl6ZSB0 aGUgY29tcGFyaXNvbiBjb3N0LgorICoKKyAqIEdpdmVuIGEgbGlzdCBvZiBwYXRoa2V5cywg d2UgdHJ5IHRvIHJlb3JkZXIgdGhlbSBpbiBhIHdheSB0aGF0IG1pbmltaXplcworICogdGhl IENQVSBjb3N0IG9mIHNvcnRpbmcuIFRoaXMgZGVwZW5kcyBtYWlubHkgb24gdGhlIGNvc3Qg b2YgY29tcGFyYXRvcgorICogZnVuY3Rpb24gKHRoZSBwYXRoa2V5cyBtYXkgdXNlIGRpZmZl cmVudCBkYXRhIHR5cGVzKSBhbmQgdGhlIG51bWJlciBvZgorICogZGlzdGluY3QgdmFsdWVz IGluIGVhY2ggY29sdW1uICh3aGljaCBhZmZlY3RzIHRoZSBudW1iZXIgb2YgY29tcGFyYXRv cgorICogY2FsbHMgZm9yIHRoZSBmb2xsb3dpbmcgcGF0aGtleXMpLgorICoKKyAqIEluIGNh c2UgdGhlIGlucHV0IGlzIHBhcnRpYWxseSBzb3J0ZWQsIG9ubHkgdGhlIHJlbWFpbmluZyBw YXRoa2V5cyBhcmUKKyAqIGNvbnNpZGVyZWQuCisgKgorICogUmV0dXJucyB0cnVlIGlmIHRo ZSBrZXlzL2NsYXVzZXMgaGF2ZSBiZWVuIHJlb3JkZXJlZCAob3IgbWlnaHQgaGF2ZSBiZWVu KSwKKyAqIGFuZCBhIG5ldyBsaXN0IGlzIHJldHVybmVkIHRocm91Z2ggYW4gYXJndW1lbnQu IFRoZSBsaXN0IGlzIGEgbmV3IGNvcHkKKyAqIGFuZCBtYXkgYmUgZnJlZWQgdXNpbmcgbGlz dF9mcmVlLgorICoKKyAqIFJldHVybnMgZmFsc2UgaWYgbm8gcmVvcmRlcmluZyB3YXMgcG9z c2libGUuCisgKi8KK3N0YXRpYyBib29sCitnZXRfY2hlYXBlc3RfZ3JvdXBfa2V5c19vcmRl cihQbGFubmVySW5mbyAqcm9vdCwgZG91YmxlIG5yb3dzLAorCQkJCQkJCSAgTGlzdCAqKmdy b3VwX3BhdGhrZXlzLCBMaXN0ICoqZ3JvdXBfY2xhdXNlcywKKwkJCQkJCQkgIGludCBuX3By ZW9yZGVyZWQpCit7CisJTGlzdAkJICAgKm5ld19ncm91cF9wYXRoa2V5cyA9IE5JTCwKKwkJ CQkgICAqbmV3X2dyb3VwX2NsYXVzZXMgPSBOSUwsCisJCQkJICAgKnZhcl9ncm91cF9wYXRo a2V5czsKKworCUxpc3RDZWxsCSAgICpjZWxsOworCVBhdGhrZXlNdXRhdG9yU3RhdGUJbXN0 YXRlOworCWRvdWJsZQkJCWNoZWFwZXN0X3NvcnRfY29zdCA9IC0xLjA7CisKKwlpbnQgbkZy ZWVLZXlzOworCWludCBuVG9QZXJtdXRlOworCisJLyogSWYgdGhlcmUgYXJlIGxlc3MgdGhh biAyIHVuc29ydGVkIHBhdGhrZXlzLCB3ZSdyZSBkb25lLiAqLworCWlmIChsaXN0X2xlbmd0 aCgqZ3JvdXBfcGF0aGtleXMpIC0gbl9wcmVvcmRlcmVkIDwgMikKKwkJcmV0dXJuIGZhbHNl OworCisJLyoKKwkgKiBXZSBjb3VsZCBleGhhdXN0aXZlbHkgY29zdCBhbGwgcG9zc2libGUg b3JkZXJpbmdzIG9mIHRoZSBwYXRoa2V5cywgYnV0IGZvcgorCSAqIGEgbGFyZ2UgbnVtYmVy IG9mIHBhdGhrZXlzIGl0IG1pZ2h0IGJlIHByb2hpYml0aXZlbHkgZXhwZW5zaXZlLiBTbyB3 ZSB0cnkKKwkgKiB0byBhcHBseSBzaW1wbGUgY2hlYXAgaGV1cmlzdGljcyBmaXJzdCAtIHdl IHNvcnQgdGhlIHBhdGhrZXlzIGJ5IHNvcnQgY29zdAorCSAqIChhcyBpZiB0aGUgcGF0aGtl eSB3YXMgc29ydGVkIGluZGVwZW5kZW50bHkpIGFuZCB0aGVuIGNoZWNrIG9ubHkgdGhlIGZv dXIKKwkgKiBjaGVhcGVzdCBwYXRoa2V5cy4gVGhlIHJlbWFpbmluZyBwYXRoa2V5cyBhcmUg a2VwdCBvcmRlcmVkIGJ5IGNvc3QuCisJICoKKwkgKiBYWFggVGhpcyBpcyBhIHZlcnkgc2lt cGxlIGhldXJpc3RpY3MsIGJ1dCBsaWtlbHkgdG8gd29yayBmaW5lIGZvciBtb3N0CisJICog Y2FzZXMgKGJlY2F1c2UgdGhlIG51bWJlciBvZiBHUk9VUCBCWSBjbGF1c2VzIHRlbmRzIHRv IGJlIGxvd2VyIHRoYW4gNCkuCisJICogQnV0IGl0IGlnbm9yZXMgaG93IHRoZSBudW1iZXIg b2YgZGlzdGluY3QgdmFsdWVzIGluIGVhY2ggcGF0aGtleSBhZmZlY3RzCisJICogdGhlIGZv bGxvd2luZyBzdGVwcy4gSXQgbWlnaHQgYmUgYmV0dGVyIHRvIHVzZSAibW9yZSBleHBlbnNp dmUiIHBhdGhrZXkKKwkgKiBmaXJzdCBpZiBpdCBoYXMgbWFueSBkaXN0aW5jdCB2YWx1ZXMs IGJlY2F1c2UgaXQgdGhlbiBsaW1pdHMgdGhlIG51bWJlcgorCSAqIG9mIGNvbXBhcmlzb25z IGZvciB0aGUgcmVtYWluaW5nIHBhdGhrZXlzLiBCdXQgZXZhbHVhdGluZyB0aGF0IGlzIGxp a2VseQorCSAqIHF1aXRlIHRoZSBleHBlbnNpdmUuCisJICovCisJbkZyZWVLZXlzID0gbGlz dF9sZW5ndGgoKmdyb3VwX3BhdGhrZXlzKSAtIG5fcHJlb3JkZXJlZDsKKwluVG9QZXJtdXRl ID0gNDsKKwlpZiAobkZyZWVLZXlzID4gblRvUGVybXV0ZSkKKwl7CisJCWludCBpOworCQlQ YXRoa2V5U29ydENvc3QgKmNvc3RzID0gcGFsbG9jKHNpemVvZihQYXRoa2V5U29ydENvc3Qp ICogbkZyZWVLZXlzKTsKKworCQkvKiBza2lwIHRoZSBwcmUtb3JkZXJlZCBwYXRoa2V5cyAq LworCQljZWxsID0gbGlzdF9udGhfY2VsbCgqZ3JvdXBfcGF0aGtleXMsIG5fcHJlb3JkZXJl ZCk7CisKKwkJLyogZXN0aW1hdGUgY29zdCBmb3Igc29ydGluZyBpbmRpdmlkdWFsIHBhdGhr ZXlzICovCisJCWZvciAoaSA9IDA7IGNlbGwgIT0gTlVMTDsgaSsrLCAoY2VsbCA9IGxuZXh0 KCpncm91cF9wYXRoa2V5cywgY2VsbCkpKQorCQl7CisJCQlMaXN0ICp0b19jb3N0ID0gbGlz dF9tYWtlMShsZmlyc3QoY2VsbCkpOworCisJCQlBc3NlcnQoaSA8IG5GcmVlS2V5cyk7CisK KwkJCWNvc3RzW2ldLnBhdGhrZXkgPSBsZmlyc3QoY2VsbCk7CisJCQljb3N0c1tpXS5jb3N0 ID0gY29zdF9zb3J0X2VzdGltYXRlKHJvb3QsIHRvX2Nvc3QsIDAsIG5yb3dzKTsKKworCQkJ cGZyZWUodG9fY29zdCk7CisJCX0KKworCQkvKiBzb3J0IHRoZSBwYXRoa2V5cyBieSBzb3J0 IGNvc3QgaW4gYXNjZW5kaW5nIG9yZGVyICovCisJCXFzb3J0KGNvc3RzLCBuRnJlZUtleXMs IHNpemVvZigqY29zdHMpLCBwYXRoa2V5X3NvcnRfY29zdF9jb21wYXJhdG9yKTsKKworCQkv KgorCQkgKiBSZWJ1aWxkIHRoZSBsaXN0IG9mIHBhdGhrZXlzIC0gZmlyc3QgdGhlIHByZW9y ZGVyZWQgb25lcywgdGhlbiB0aGUKKwkJICogcmVzdCBvcmRlcmVkIGJ5IGNvc3QuCisJCSAq LworCQluZXdfZ3JvdXBfcGF0aGtleXMgPSBsaXN0X3RydW5jYXRlKGxpc3RfY29weSgqZ3Jv dXBfcGF0aGtleXMpLCBuX3ByZW9yZGVyZWQpOworCisJCWZvciAoaSA9IDA7IGkgPCBuRnJl ZUtleXM7IGkrKykKKwkJCW5ld19ncm91cF9wYXRoa2V5cyA9IGxhcHBlbmQobmV3X2dyb3Vw X3BhdGhrZXlzLCBjb3N0c1tpXS5wYXRoa2V5KTsKKworCQlwZnJlZShjb3N0cyk7CisJfQor CWVsc2UKKwl7CisJCS8qIENvcHkgdGhlIGxpc3QsIHNvIHRoYXQgd2UgY2FuIGZyZWUgdGhl IG5ldyBsaXN0IGJ5IGxpc3RfZnJlZS4gKi8KKwkJbmV3X2dyb3VwX3BhdGhrZXlzID0gbGlz dF9jb3B5KCpncm91cF9wYXRoa2V5cyk7CisJCW5Ub1Blcm11dGUgPSBuRnJlZUtleXM7CisJ fQorCisJQXNzZXJ0KGxpc3RfbGVuZ3RoKG5ld19ncm91cF9wYXRoa2V5cykgPT0gbGlzdF9s ZW5ndGgoKmdyb3VwX3BhdGhrZXlzKSk7CisKKwkvKgorCSAqIEdlbmVyYXRlIHBhdGhrZXkg bGlzdHMgd2l0aCBwZXJtdXRhdGlvbnMgb2YgdGhlIGZpcnN0IG5Ub1Blcm11dGUgcGF0aGtl eXMuCisJICoKKwkgKiBYWFggV2Ugc2ltcGx5IGNhbGN1bGF0ZSBzb3J0IGNvc3QgZm9yIGVh Y2ggaW5kaXZpZHVhbCBwYXRoa2V5IGxpc3QsIGJ1dAorCSAqIHRoZXJlJ3Mgcm9vbSBmb3Ig dHdvIGR5bmFtaWMgcHJvZ3JhbW1pbmcgb3B0aW1pemF0aW9ucyBoZXJlLiBGaXJzdGx5LCB3 ZQorCSAqIG1heSBwYXNzIHRoZSBjdXJyZW50ICJiZXN0IiBjb3N0IHRvIGNvc3Rfc29ydF9l c3RpbWF0ZSBzbyB0aGF0IGl0IGNhbgorCSAqICJhYm9ydCIgaWYgdGhlIGVzdGltYXRlZCBw YXRoa2V5cyBsaXN0IGV4Y2VlZHMgaXQuIFNlY29uZGx5LCBpdCBjb3VsZCBwYXNzCisJICog dGhlIHJldHVybiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcG9zaXRpb24gd2hlbiBpdCBleGNl ZWRlZCB0aGUgY29zdCwgYW5kCisJICogd2UgY291bGQgc2tpcCBhbGwgcGVybXV0YXRpb25z IHdpdGggdGhlIHNhbWUgcHJlZml4LgorCSAqCisJICogSW1hZ2luZSB3ZSd2ZSBhbHJlYWR5 IGZvdW5kIG9yZGVyaW5nIHdpdGggY29zdCBDMSwgYW5kIHdlJ3JlIGV2YWx1YXRpbmcKKwkg KiBhbm90aGVyIG9yZGVyaW5nIC0gY29zdF9zb3J0X2VzdGltYXRlKCkgY2FsY3VsYXRlcyBj b3N0IGJ5IGFkZGluZyB0aGUKKwkgKiBwYXRoa2V5cyBvbmUgYnkgb25lIChtb3JlIG9yIGxl c3MpLCBhbmQgdGhlIGNvc3Qgb25seSBncm93cy4gSWYgYXQgYW55CisJICogcG9pbnQgaXQg ZXhjZWVkcyBDMSwgaXQgY2FuJ3QgcG9zc2libHkgYmUgImJldHRlciIgc28gd2UgY2FuIGRp c2NhcmQgaXQuCisJICogQnV0IHdlIGFsc28ga25vdyB0aGF0IHdlIGNhbiBkaXNjYXJkIGFs bCBvcmRlcmluZyB3aXRoIHRoZSBzYW1lIHByZWZpeCwKKwkgKiBiZWNhdXNlIGlmIHdlJ3Jl IGVzdGltYXRpbmcgKGEsYixjLGQpIGFuZCB3ZSBleGNlZWQgQzEgYXQgKGEsYikgdGhlbiB0 aGUKKwkgKiBzYW1lIHRoaW5nIHdpbGwgaGFwcGVuIGZvciBhbnkgb3JkZXJpbmcgd2l0aCB0 aGlzIHByZWZpeC4KKwkgKi8KKwlQYXRoa2V5TXV0YXRvckluaXQoJm1zdGF0ZSwgbmV3X2dy b3VwX3BhdGhrZXlzLCBuX3ByZW9yZGVyZWQsIG5fcHJlb3JkZXJlZCArIG5Ub1Blcm11dGUp OworCisJd2hpbGUoKHZhcl9ncm91cF9wYXRoa2V5cyA9IFBhdGhrZXlNdXRhdG9yTmV4dCgm bXN0YXRlKSkgIT0gTklMKQorCXsKKwkJQ29zdAljb3N0OworCisJCWNvc3QgPSBjb3N0X3Nv cnRfZXN0aW1hdGUocm9vdCwgdmFyX2dyb3VwX3BhdGhrZXlzLCBuX3ByZW9yZGVyZWQsIG5y b3dzKTsKKworCQlpZiAoY29zdCA8IGNoZWFwZXN0X3NvcnRfY29zdCB8fCBjaGVhcGVzdF9z b3J0X2Nvc3QgPCAwKQorCQl7CisJCQlsaXN0X2ZyZWUobmV3X2dyb3VwX3BhdGhrZXlzKTsK KwkJCW5ld19ncm91cF9wYXRoa2V5cyA9IGxpc3RfY29weSh2YXJfZ3JvdXBfcGF0aGtleXMp OworCQkJY2hlYXBlc3Rfc29ydF9jb3N0ID0gY29zdDsKKwkJfQorCX0KKworCS8qIFJlb3Jk ZXIgdGhlIGdyb3VwIGNsYXVzZXMgYWNjb3JkaW5nIHRvIHRoZSByZW9yZGVyZWQgcGF0aGtl eXMuICovCisJZm9yZWFjaChjZWxsLCBuZXdfZ3JvdXBfcGF0aGtleXMpCisJeworCQlQYXRo S2V5CQkJKnBhdGhrZXkgPSAoUGF0aEtleSAqKSBsZmlyc3QoY2VsbCk7CisKKwkJbmV3X2dy b3VwX2NsYXVzZXMgPSBsYXBwZW5kKG5ld19ncm91cF9jbGF1c2VzLAorCQkJCQkJZ2V0X3Nv cnRncm91cHJlZl9jbGF1c2UocGF0aGtleS0+cGtfZWNsYXNzLT5lY19zb3J0cmVmLAorCQkJ CQkJCQkJCQkJKmdyb3VwX2NsYXVzZXMpKTsKKwl9CisKKwkvKiBKdXN0IGFwcGVuZCB0aGUg cmVzdCBHUk9VUCBCWSBjbGF1c2VzICovCisJbmV3X2dyb3VwX2NsYXVzZXMgPSBsaXN0X2Nv bmNhdF91bmlxdWVfcHRyKG5ld19ncm91cF9jbGF1c2VzLAorCQkJCQkJCQkJCQkgICAqZ3Jv dXBfY2xhdXNlcyk7CisKKwkqZ3JvdXBfcGF0aGtleXMgPSBuZXdfZ3JvdXBfcGF0aGtleXM7 CisJKmdyb3VwX2NsYXVzZXMgPSBuZXdfZ3JvdXBfY2xhdXNlczsKKworCXJldHVybiB0cnVl OworfQorCisvKgorICogZ2V0X3VzZWZ1bF9ncm91cF9rZXlzX29yZGVyaW5ncworICoJCURl dGVybWluZSB3aGljaCBvcmRlcmluZ3Mgb2YgR1JPVVAgQlkga2V5cyBhcmUgcG90ZW50aWFs bHkgaW50ZXJlc3RpbmcuCisgKgorICogUmV0dXJucyBsaXN0IG9mIFBhdGhLZXlJbmZvIGl0 ZW1zLCBlYWNoIHJlcHJlc2VudGluZyBhbiBpbnRlcmVzdGluZyBvcmRlcmluZworICogb2Yg R1JPVVAgQlkga2V5cy4gRWFjaCBpdGVtIHN0b3JlcyBwYXRoa2V5cyBhbmQgY2xhdXNlcyBp biBtYXRjaGluZyBvcmRlci4KKyAqCisgKiBUaGUgZnVuY3Rpb24gY29uc2lkZXJzIChhbmQg a2VlcHMpIG11bHRpcGxlIGdyb3VwIGJ5IG9yZGVyaW5nczoKKyAqCisgKiAtIHRoZSBvcmln aW5hbCBvcmRlcmluZywgYXMgc3BlY2lmaWVkIGJ5IHRoZSBHUk9VUCBCWSBjbGF1c2UKKyAq CisgKiAtIEdST1VQIEJZIGtleXMgcmVvcmRlcmVkIHRvIG1pbmltaXplIHRoZSBzb3J0IGNv c3QKKyAqCisgKiAtIEdST1VQIEJZIGtleXMgcmVvcmRlcmVkIHRvIG1hdGNoIHBhdGggb3Jk ZXJpbmcgKGFzIG11Y2ggYXMgcG9zc2libGUpLCB3aXRoCisgKiAgIHRoZSB0YWlsIHJlb3Jk ZXJlZCB0byBtaW5pbWl6ZSB0aGUgc29ydCBjb3N0CisgKgorICogLSBHUk9VUCBCWSBrZXlz IHRvIG1hdGNoIHRhcmdldCBPUkRFUiBCWSBjbGF1c2UgKGFzIG11Y2ggYXMgcG9zc2libGUp LCB3aXRoCisgKiAgIHRoZSB0YWlsIHJlb3JkZXJlZCB0byBtaW5pbWl6ZSB0aGUgc29ydCBj b3N0CisgKgorICogVGhlcmUgYXJlIG90aGVyIHBvdGVudGlhbGx5IGludGVyZXN0aW5nIG9y ZGVyaW5ncyAoZS5nLiBpdCBtaWdodCBiZSBiZXN0IHRvCisgKiBtYXRjaCB0aGUgZmlyc3Qg T1JERVIgQlkga2V5LCBvcmRlciB0aGUgcmVtYWluaW5nIGtleXMgZGlmZmVyZW50bHkgYW5k IHRoZW4KKyAqIHJlbHkgb24gdGhlIGluY3JlbWVudGFsIHNvcnQgdG8gZml4IHRoaXMpLCBi dXQgd2UgaWdub3JlIHRob3NlIGZvciBub3cuIFRvCisgKiBtYWtlIHRoaXMgd29yayB3ZSdk IGhhdmUgdG8gcHJldHR5IG11Y2ggZ2VuZXJhdGUgYWxsIHBvc3NpYmxlIHBlcm11dGF0aW9u cy4KKyAqLworTGlzdCAqCitnZXRfdXNlZnVsX2dyb3VwX2tleXNfb3JkZXJpbmdzKFBsYW5u ZXJJbmZvICpyb290LCBkb3VibGUgbnJvd3MsCisJCQkJCQkJCUxpc3QgKnBhdGhfcGF0aGtl eXMsCisJCQkJCQkJCUxpc3QgKmdyb3VwX3BhdGhrZXlzLCBMaXN0ICpncm91cF9jbGF1c2Vz KQoreworCVF1ZXJ5CSAgICpwYXJzZSA9IHJvb3QtPnBhcnNlOworCUxpc3QJICAgKmluZm9z ID0gTklMOworCVBhdGhLZXlJbmZvICppbmZvOworCWludAkJCW5fcHJlb3JkZXJlZCA9IDA7 CisKKwlMaXN0ICpwYXRoa2V5cyA9IGdyb3VwX3BhdGhrZXlzOworCUxpc3QgKmNsYXVzZXMg PSBncm91cF9jbGF1c2VzOworCisJLyogYWx3YXlzIHJldHVybiBhdCBsZWFzdCB0aGUgb3Jp Z2luYWwgcGF0aGtleXMvY2xhdXNlcyAqLworCWluZm8gPSBtYWtlTm9kZShQYXRoS2V5SW5m byk7CisJaW5mby0+cGF0aGtleXMgPSBwYXRoa2V5czsKKwlpbmZvLT5jbGF1c2VzID0gY2xh dXNlczsKKworCWluZm9zID0gbGFwcGVuZChpbmZvcywgaW5mbyk7CisKKwkvKgorCSAqIFNo b3VsZCB3ZSB0cnkgZ2VuZXJhdGluZyBhbHRlcm5hdGl2ZSBvcmRlcmluZ3Mgb2YgdGhlIGdy b3VwIGtleXM/IElmIG5vdCwKKwkgKiB3ZSBwcm9kdWNlIG9ubHkgdGhlIG9yZGVyIHNwZWNp ZmllZCBpbiB0aGUgcXVlcnksIGkuZS4gdGhlIG9wdGltaXphdGlvbgorCSAqIGlzIGVmZmVj dGl2ZWx5IGRpc2FibGVkLgorCSAqLworCWlmICghZW5hYmxlX2dyb3VwX2J5X3Jlb3JkZXJp bmcpCisJCXJldHVybiBpbmZvczsKKworCS8qIGZvciBncm91cGluZyBzZXRzIHdlIGNhbid0 IGRvIGFueSByZW9yZGVyaW5nICovCisJaWYgKHBhcnNlLT5ncm91cGluZ1NldHMpCisJCXJl dHVybiBpbmZvczsKKworCS8qCisJICogVHJ5IHJlb3JkZXJpbmcgcGF0aGtleXMgdG8gbWlu aW1pemUgdGhlIHNvcnQgY29zdCwgaWdub3JpbmcgYm90aCB0aGUKKwkgKiB0YXJnZXQgb3Jk ZXJpbmcgKE9SREVSIEJZKSBhbmQgb3JkZXJpbmcgb2YgdGhlIGlucHV0IHBhdGguCisJICov CisJaWYgKGdldF9jaGVhcGVzdF9ncm91cF9rZXlzX29yZGVyKHJvb3QsIG5yb3dzLCAmcGF0 aGtleXMsICZjbGF1c2VzLAorCQkJCQkJCQkJICBuX3ByZW9yZGVyZWQpKQorCXsKKwkJaW5m byA9IG1ha2VOb2RlKFBhdGhLZXlJbmZvKTsKKwkJaW5mby0+cGF0aGtleXMgPSBwYXRoa2V5 czsKKwkJaW5mby0+Y2xhdXNlcyA9IGNsYXVzZXM7CisKKwkJaW5mb3MgPSBsYXBwZW5kKGlu Zm9zLCBpbmZvKTsKKwl9CisKKwkvKgorCSAqIElmIHRoZSBwYXRoIGlzIHNvcnRlZCBpbiBz b21lIHdheSwgdHJ5IHJlb3JkZXJpbmcgdGhlIGdyb3VwIGtleXMgdG8gbWF0Y2gKKwkgKiBh cyBtdWNoIG9mIHRoZSBvcmRlcmluZyBhcyBwb3NzaWJsZSAtIHdlIGdldCB0aGlzIHNvcnQg Zm9yIGZyZWUgKG1vc3RseSkuCisJICoKKwkgKiBXZSBtdXN0IG5vdCBkbyB0aGlzIHdoZW4g dGhlcmUgYXJlIG5vIGdyb3VwaW5nIHNldHMsIGJlY2F1c2UgdGhvc2UgdXNlCisJICogbW9y ZSBjb21wbGV4IGxvZ2ljIHRvIGRlY2lkZSB0aGUgb3JkZXJpbmcuCisJICoKKwkgKiBYWFgg SXNuJ3QgdGhpcyBzb21ld2hhdCByZWR1bmRhbnQgd2l0aCBwcmVzb3J0ZWRfa2V5cz8gQWN0 dWFsbHksIGl0J3MKKwkgKiBtb3JlIGEgY29tcGxlbWVudCwgYmVjYXVzZSBpdCBhbGxvd3Mg YmVuZWZpdGluZyBmcm9tIGluY3JlbWVudGFsIHNvcnQKKwkgKiBhcyBtdWNoIGFzIHBvc3Np YmxlLgorCSAqCisJICogWFhYIFRoaXMgZG9lcyBub3RoaW5nIGlmIChuX3ByZW9yZGVyZWQg PT0gMCkuIFdlIHNob3VsZG4ndCBjcmVhdGUgdGhlCisJICogaW5mbyBpbiB0aGlzIGNhc2Uu CisJICovCisJaWYgKHBhdGhfcGF0aGtleXMpCisJeworCQluX3ByZW9yZGVyZWQgPSBncm91 cF9rZXlzX3Jlb3JkZXJfYnlfcGF0aGtleXMocGF0aF9wYXRoa2V5cywKKwkJCQkJCQkJCQkJ CQkgICZwYXRoa2V5cywKKwkJCQkJCQkJCQkJCQkgICZjbGF1c2VzKTsKKworCQkvKiByZW9y ZGVyIHRoZSB0YWlsIHRvIG1pbmltaXplIHNvcnQgY29zdCAqLworCQlnZXRfY2hlYXBlc3Rf Z3JvdXBfa2V5c19vcmRlcihyb290LCBucm93cywgJnBhdGhrZXlzLCAmY2xhdXNlcywKKwkJ CQkJCQkJCSAgbl9wcmVvcmRlcmVkKTsKKworCQkvKgorCQkgKiByZW9yZGVyIHRoZSB0YWls IHRvIG1pbmltaXplIHNvcnQgY29zdAorCQkgKgorCQkgKiBYWFggSWdub3JlIHRoZSByZXR1 cm4gdmFsdWUgLSB0aGVyZSBtYXkgYmUgbm90aGluZyB0byByZW9yZGVyLCBpbgorCQkgKiB3 aGljaCBjYXNlIGdldF9jaGVhcGVzdF9ncm91cF9rZXlzX29yZGVyIHJldHVybnMgZmFsc2Uu IEJ1dCB3ZQorCQkgKiBzdGlsbCB3YW50IHRvIGtlZXAgdGhlIGtleXMgcmVvcmRlcmVkIHRv IHBhdGhfcGF0aGtleXMuCisJCSAqLworCQlpbmZvID0gbWFrZU5vZGUoUGF0aEtleUluZm8p OworCQlpbmZvLT5wYXRoa2V5cyA9IHBhdGhrZXlzOworCQlpbmZvLT5jbGF1c2VzID0gY2xh dXNlczsKKworCQlpbmZvcyA9IGxhcHBlbmQoaW5mb3MsIGluZm8pOworCX0KKworCS8qCisJ ICogVHJ5IHJlb3JkZXJpbmcgcGF0aGtleXMgdG8gbWluaW1pemUgdGhlIHNvcnQgY29zdCAo dGhpcyB0aW1lIGNvbnNpZGVyCisJICogdGhlIE9SREVSIEJZIGNsYXVzZSwgYnV0IG9ubHkg aWYgc2V0IGRlYnVnX2dyb3VwX2J5X21hdGNoX29yZGVyX2J5KS4KKwkgKi8KKwlpZiAocm9v dC0+c29ydF9wYXRoa2V5cykKKwl7CisJCW5fcHJlb3JkZXJlZCA9IGdyb3VwX2tleXNfcmVv cmRlcl9ieV9wYXRoa2V5cyhyb290LT5zb3J0X3BhdGhrZXlzLAorCQkJCQkJCQkJCQkJCSAg JnBhdGhrZXlzLAorCQkJCQkJCQkJCQkJCSAgJmNsYXVzZXMpOworCisJCS8qCisJCSAqIHJl b3JkZXIgdGhlIHRhaWwgdG8gbWluaW1pemUgc29ydCBjb3N0CisJCSAqCisJCSAqIFhYWCBJ Z25vcmUgdGhlIHJldHVybiB2YWx1ZSAtIHRoZXJlIG1heSBiZSBub3RoaW5nIHRvIHJlb3Jk ZXIsIGluCisJCSAqIHdoaWNoIGNhc2UgZ2V0X2NoZWFwZXN0X2dyb3VwX2tleXNfb3JkZXIg cmV0dXJucyBmYWxzZS4gQnV0IHdlCisJCSAqIHN0aWxsIHdhbnQgdG8ga2VlcCB0aGUga2V5 cyByZW9yZGVyZWQgdG8gc29ydF9wYXRoa2V5cy4KKwkJICovCisJCWdldF9jaGVhcGVzdF9n cm91cF9rZXlzX29yZGVyKHJvb3QsIG5yb3dzLCAmcGF0aGtleXMsICZjbGF1c2VzLAorCQkJ CQkJCQkJICBuX3ByZW9yZGVyZWQpOworCisJCS8qIGtlZXAgdGhlIGdyb3VwIGtleXMgcmVv cmRlcmVkIHRvIG1hdGNoIG9yZGVyaW5nIG9mIGlucHV0IHBhdGggKi8KKwkJaW5mbyA9IG1h a2VOb2RlKFBhdGhLZXlJbmZvKTsKKwkJaW5mby0+cGF0aGtleXMgPSBwYXRoa2V5czsKKwkJ aW5mby0+Y2xhdXNlcyA9IGNsYXVzZXM7CisKKwkJaW5mb3MgPSBsYXBwZW5kKGluZm9zLCBp bmZvKTsKKwl9CisKKwlyZXR1cm4gaW5mb3M7Cit9CisKIC8qCiAgKiBwYXRoa2V5c19jb3Vu dF9jb250YWluZWRfaW4KICAqICAgIFNhbWUgYXMgcGF0aGtleXNfY29udGFpbmVkX2luLCBi dXQgYWxzbyBzZXRzIGxlbmd0aCBvZiBsb25nZXN0CkBAIC0xODYyLDYgKzIzNzgsNTQgQEAg cGF0aGtleXNfdXNlZnVsX2Zvcl9vcmRlcmluZyhQbGFubmVySW5mbyAqcm9vdCwgTGlzdCAq cGF0aGtleXMpCiAJcmV0dXJuIG5fY29tbW9uX3BhdGhrZXlzOwogfQogCisvKgorICogcGF0 aGtleXNfdXNlZnVsX2Zvcl9ncm91cGluZworICoJCUNvdW50IHRoZSBudW1iZXIgb2YgcGF0 aGtleXMgdGhhdCBhcmUgdXNlZnVsIGZvciBncm91cGluZyAoaW5zdGVhZCBvZgorICoJCWV4 cGxpY2l0IHNvcnQpCisgKgorICogR3JvdXAgcGF0aGtleXMgY291bGQgYmUgcmVvcmRlcmVk IHRvIGJlbmVmaXQgZnJvbSB0aGUgb2RlcmluZy4gVGhlIG9yZGVyaW5nCisgKiBtYXkgbm90 IGJlICJjb21wbGV0ZSIgYW5kIG1heSByZXF1aXJlIGluY3JlbWVudGFsIHNvcnQsIGJ1dCB0 aGF0J3MgZmluZS4gU28KKyAqIHdlIHNpbXBseSBjb3VudCBwcmVmaXggcGF0aGtleXMgd2l0 aCBhIG1hdGNoaW5nIGdyb3VwIGtleSwgYW5kIHN0b3Agb25jZSB3ZQorICogZmluZCB0aGUg Zmlyc3QgcGF0aGtleSB3aXRob3V0IGEgbWF0Y2guCisgKgorICogU28gZS5nLiB3aXRoIHBh dGhrZXlzIChhLGIsYykgYW5kIGdyb3VwIGtleXMgKGEsYixlKSB0aGlzIGRldGVybWluZXMg KGEsYikKKyAqIHBhdGhrZXlzIGFyZSB1c2VmdWwgZm9yIGdyb3VwaW5nLCBhbmQgd2UgbWln aHQgZG8gaW5jcmVtZW50YWwgc29ydCB0byBnZXQKKyAqIHBhdGggb3JkZXJlZCBieSAoYSxi LGUpLgorICoKKyAqIFRoaXMgbG9naWMgaXMgbmVjZXNzYXJ5IHRvIHJldGFpbiBwYXRocyB3 aXRoIG9yZGVkaW5nIG5vdCBtYXRjaGluZyBncm91cGluZworICoga2V5cyBkaXJlY3RseSwg d2l0aG91dCB0aGUgcmVvcmRlcmluZy4KKyAqCisgKiBSZXR1cm5zIHRoZSBsZW5ndGggb2Yg cGF0aGtleSBwcmVmaXggd2l0aCBtYXRjaGluZyBncm91cCBrZXlzLgorICovCitzdGF0aWMg aW50CitwYXRoa2V5c191c2VmdWxfZm9yX2dyb3VwaW5nKFBsYW5uZXJJbmZvICpyb290LCBM aXN0ICpwYXRoa2V5cykKK3sKKwlMaXN0Q2VsbCAqa2V5OworCWludAkJICBuID0gMDsKKwor CS8qIG5vIHNwZWNpYWwgb3JkZXJpbmcgcmVxdWVzdGVkIGZvciBncm91cGluZyAqLworCWlm IChyb290LT5ncm91cF9wYXRoa2V5cyA9PSBOSUwpCisJCXJldHVybiAwOworCisJLyogdW5v cmRlcmVkIHBhdGggKi8KKwlpZiAocGF0aGtleXMgPT0gTklMKQorCQlyZXR1cm4gMDsKKwor CS8qIHdhbGsgdGhlIHBhdGhrZXlzIGFuZCBzZWFyY2ggZm9yIG1hdGNoaW5nIGdyb3VwIGtl eSAqLworCWZvcmVhY2goa2V5LCBwYXRoa2V5cykKKwl7CisJCVBhdGhLZXkJKnBhdGhrZXkg PSAoUGF0aEtleSAqKSBsZmlyc3Qoa2V5KTsKKworCQkvKiBubyBtYXRjaGluZyBncm91cCBr ZXksIHdlJ3JlIGRvbmUgKi8KKwkJaWYgKCFsaXN0X21lbWJlcl9wdHIocm9vdC0+Z3JvdXBf cGF0aGtleXMsIHBhdGhrZXkpKQorCQkJYnJlYWs7CisKKwkJbisrOworCX0KKworCXJldHVy biBuOworfQorCiAvKgogICogdHJ1bmNhdGVfdXNlbGVzc19wYXRoa2V5cwogICoJCVNob3J0 ZW4gdGhlIGdpdmVuIHBhdGhrZXkgbGlzdCB0byBqdXN0IHRoZSB1c2VmdWwgcGF0aGtleXMu CkBAIC0xODc2LDYgKzI0NDAsOSBAQCB0cnVuY2F0ZV91c2VsZXNzX3BhdGhrZXlzKFBsYW5u ZXJJbmZvICpyb290LAogCiAJbnVzZWZ1bCA9IHBhdGhrZXlzX3VzZWZ1bF9mb3JfbWVyZ2lu Zyhyb290LCByZWwsIHBhdGhrZXlzKTsKIAludXNlZnVsMiA9IHBhdGhrZXlzX3VzZWZ1bF9m b3Jfb3JkZXJpbmcocm9vdCwgcGF0aGtleXMpOworCWlmIChudXNlZnVsMiA+IG51c2VmdWwp CisJCW51c2VmdWwgPSBudXNlZnVsMjsKKwludXNlZnVsMiA9IHBhdGhrZXlzX3VzZWZ1bF9m b3JfZ3JvdXBpbmcocm9vdCwgcGF0aGtleXMpOwogCWlmIChudXNlZnVsMiA+IG51c2VmdWwp CiAJCW51c2VmdWwgPSBudXNlZnVsMjsKIApAQCAtMTkxMSw2ICsyNDc4LDggQEAgaGFzX3Vz ZWZ1bF9wYXRoa2V5cyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsKQogewog CWlmIChyZWwtPmpvaW5pbmZvICE9IE5JTCB8fCByZWwtPmhhc19lY2xhc3Nfam9pbnMpCiAJ CXJldHVybiB0cnVlOwkJCS8qIG1pZ2h0IGJlIGFibGUgdG8gdXNlIHBhdGhrZXlzIGZvciBt ZXJnaW5nICovCisJaWYgKHJvb3QtPmdyb3VwX3BhdGhrZXlzICE9IE5JTCkKKwkJcmV0dXJu IHRydWU7CQkJLyogbWlnaHQgYmUgYWJsZSB0byB1c2UgcGF0aGtleXMgZm9yIGdyb3VwaW5n ICovCiAJaWYgKHJvb3QtPnF1ZXJ5X3BhdGhrZXlzICE9IE5JTCkKIAkJcmV0dXJuIHRydWU7 CQkJLyogbWlnaHQgYmUgYWJsZSB0byB1c2UgdGhlbSBmb3Igb3JkZXJpbmcgKi8KIAlyZXR1 cm4gZmFsc2U7CQkJCS8qIGRlZmluaXRlbHkgdXNlbGVzcyAqLwpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jIGIvc3JjL2JhY2tlbmQvb3B0aW1p emVyL3BsYW4vcGxhbm5lci5jCmluZGV4IDU0N2ZkYTIwYTIzLi5iMjU2OWM1ZDBjNyAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jCisrKyBiL3Ny Yy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYwpAQCAtNjIxOCwyNCArNjIxOCwx MjEgQEAgYWRkX3BhdGhzX3RvX2dyb3VwaW5nX3JlbChQbGFubmVySW5mbyAqcm9vdCwgUmVs T3B0SW5mbyAqaW5wdXRfcmVsLAogCQkgKi8KIAkJZm9yZWFjaChsYywgaW5wdXRfcmVsLT5w YXRobGlzdCkKIAkJeworCQkJTGlzdENlbGwgICAqbGMyOwogCQkJUGF0aAkgICAqcGF0aCA9 IChQYXRoICopIGxmaXJzdChsYyk7CiAJCQlQYXRoCSAgICpwYXRoX29yaWdpbmFsID0gcGF0 aDsKLQkJCWJvb2wJCWlzX3NvcnRlZDsKLQkJCWludAkJCXByZXNvcnRlZF9rZXlzOwogCi0J CQlpc19zb3J0ZWQgPSBwYXRoa2V5c19jb3VudF9jb250YWluZWRfaW4ocm9vdC0+Z3JvdXBf cGF0aGtleXMsCi0JCQkJCQkJCQkJCQkJcGF0aC0+cGF0aGtleXMsCi0JCQkJCQkJCQkJCQkJ JnByZXNvcnRlZF9rZXlzKTsKKwkJCUxpc3QJICAgKnBhdGhrZXlfb3JkZXJpbmdzID0gTklM OworCisJCQlMaXN0CSAgICpncm91cF9wYXRoa2V5cyA9IHJvb3QtPmdyb3VwX3BhdGhrZXlz OworCQkJTGlzdAkgICAqZ3JvdXBfY2xhdXNlcyA9IHBhcnNlLT5ncm91cENsYXVzZTsKKwor CQkJLyogZ2VuZXJhdGUgYWx0ZXJuYXRpdmUgZ3JvdXAgb3JkZXJpbmdzIHRoYXQgbWlnaHQg YmUgdXNlZnVsICovCisJCQlwYXRoa2V5X29yZGVyaW5ncyA9IGdldF91c2VmdWxfZ3JvdXBf a2V5c19vcmRlcmluZ3Mocm9vdCwKKwkJCQkJCQkJCQkJCQkJCQlwYXRoLT5yb3dzLAorCQkJ CQkJCQkJCQkJCQkJCXBhdGgtPnBhdGhrZXlzLAorCQkJCQkJCQkJCQkJCQkJCWdyb3VwX3Bh dGhrZXlzLAorCQkJCQkJCQkJCQkJCQkJCWdyb3VwX2NsYXVzZXMpOwogCi0JCQlpZiAocGF0 aCA9PSBjaGVhcGVzdF9wYXRoIHx8IGlzX3NvcnRlZCkKKwkJCUFzc2VydChsaXN0X2xlbmd0 aChwYXRoa2V5X29yZGVyaW5ncykgPiAwKTsKKworCQkJLyogcHJvY2VzcyBhbGwgcG90ZW50 aWFsbHkgaW50ZXJlc3RpbmcgZ3JvdXBpbmcgcmVvcmRlcmluZ3MgKi8KKwkJCWZvcmVhY2gg KGxjMiwgcGF0aGtleV9vcmRlcmluZ3MpCiAJCQl7Ci0JCQkJLyogU29ydCB0aGUgY2hlYXBl c3QtdG90YWwgcGF0aCBpZiBpdCBpc24ndCBhbHJlYWR5IHNvcnRlZCAqLwotCQkJCWlmICgh aXNfc29ydGVkKQotCQkJCQlwYXRoID0gKFBhdGggKikgY3JlYXRlX3NvcnRfcGF0aChyb290 LAotCQkJCQkJCQkJCQkJCSBncm91cGVkX3JlbCwKLQkJCQkJCQkJCQkJCQkgcGF0aCwKLQkJ CQkJCQkJCQkJCQkgcm9vdC0+Z3JvdXBfcGF0aGtleXMsCi0JCQkJCQkJCQkJCQkJIC0xLjAp OworCQkJCWJvb2wJCWlzX3NvcnRlZDsKKwkJCQlpbnQJCQlwcmVzb3J0ZWRfa2V5cyA9IDA7 CisJCQkJUGF0aEtleUluZm8gKmluZm8gPSAoUGF0aEtleUluZm8gKikgbGZpcnN0KGxjMik7 CisKKwkJCQkvKiByZXN0b3JlIHRoZSBwYXRoICh3ZSByZXBsYWNlIGl0IGluIHRoZSBsb29w KSAqLworCQkJCXBhdGggPSBwYXRoX29yaWdpbmFsOworCisJCQkJaXNfc29ydGVkID0gcGF0 aGtleXNfY291bnRfY29udGFpbmVkX2luKGluZm8tPnBhdGhrZXlzLAorCQkJCQkJCQkJCQkJ CQlwYXRoLT5wYXRoa2V5cywKKwkJCQkJCQkJCQkJCQkJJnByZXNvcnRlZF9rZXlzKTsKKwor CQkJCWlmIChwYXRoID09IGNoZWFwZXN0X3BhdGggfHwgaXNfc29ydGVkKQorCQkJCXsKKwkJ CQkJLyogU29ydCB0aGUgY2hlYXBlc3QtdG90YWwgcGF0aCBpZiBpdCBpc24ndCBhbHJlYWR5 IHNvcnRlZCAqLworCQkJCQlpZiAoIWlzX3NvcnRlZCkKKwkJCQkJCXBhdGggPSAoUGF0aCAq KSBjcmVhdGVfc29ydF9wYXRoKHJvb3QsCisJCQkJCQkJCQkJCQkJCSBncm91cGVkX3JlbCwK KwkJCQkJCQkJCQkJCQkJIHBhdGgsCisJCQkJCQkJCQkJCQkJCSBpbmZvLT5wYXRoa2V5cywK KwkJCQkJCQkJCQkJCQkJIC0xLjApOworCisJCQkJCS8qIE5vdyBkZWNpZGUgd2hhdCB0byBz dGljayBhdG9wIGl0ICovCisJCQkJCWlmIChwYXJzZS0+Z3JvdXBpbmdTZXRzKQorCQkJCQl7 CisJCQkJCQljb25zaWRlcl9ncm91cGluZ3NldHNfcGF0aHMocm9vdCwgZ3JvdXBlZF9yZWws CisJCQkJCQkJCQkJCQkJcGF0aCwgdHJ1ZSwgY2FuX2hhc2gsCisJCQkJCQkJCQkJCQkJZ2Qs IGFnZ19jb3N0cywgZE51bUdyb3Vwcyk7CisJCQkJCX0KKwkJCQkJZWxzZSBpZiAocGFyc2Ut Pmhhc0FnZ3MpCisJCQkJCXsKKwkJCQkJCS8qCisJCQkJCQkgKiBXZSBoYXZlIGFnZ3JlZ2F0 aW9uLCBwb3NzaWJseSB3aXRoIHBsYWluIEdST1VQIEJZLiBNYWtlCisJCQkJCQkgKiBhbiBB Z2dQYXRoLgorCQkJCQkJICovCisJCQkJCQlhZGRfcGF0aChncm91cGVkX3JlbCwgKFBhdGgg KikKKwkJCQkJCQkJIGNyZWF0ZV9hZ2dfcGF0aChyb290LAorCQkJCQkJCQkJCQkJIGdyb3Vw ZWRfcmVsLAorCQkJCQkJCQkJCQkJIHBhdGgsCisJCQkJCQkJCQkJCQkgZ3JvdXBlZF9yZWwt PnJlbHRhcmdldCwKKwkJCQkJCQkJCQkJCSBpbmZvLT5jbGF1c2VzID8gQUdHX1NPUlRFRCA6 IEFHR19QTEFJTiwKKwkJCQkJCQkJCQkJCSBBR0dTUExJVF9TSU1QTEUsCisJCQkJCQkJCQkJ CQkgaW5mby0+Y2xhdXNlcywKKwkJCQkJCQkJCQkJCSBoYXZpbmdRdWFsLAorCQkJCQkJCQkJ CQkJIGFnZ19jb3N0cywKKwkJCQkJCQkJCQkJCSBkTnVtR3JvdXBzKSk7CisJCQkJCX0KKwkJ CQkJZWxzZSBpZiAoZ3JvdXBfY2xhdXNlcykKKwkJCQkJeworCQkJCQkJLyoKKwkJCQkJCSAq IFdlIGhhdmUgR1JPVVAgQlkgd2l0aG91dCBhZ2dyZWdhdGlvbiBvciBncm91cGluZyBzZXRz LgorCQkJCQkJICogTWFrZSBhIEdyb3VwUGF0aC4KKwkJCQkJCSAqLworCQkJCQkJYWRkX3Bh dGgoZ3JvdXBlZF9yZWwsIChQYXRoICopCisJCQkJCQkJCSBjcmVhdGVfZ3JvdXBfcGF0aChy b290LAorCQkJCQkJCQkJCQkJICAgZ3JvdXBlZF9yZWwsCisJCQkJCQkJCQkJCQkgICBwYXRo LAorCQkJCQkJCQkJCQkJICAgaW5mby0+Y2xhdXNlcywKKwkJCQkJCQkJCQkJCSAgIGhhdmlu Z1F1YWwsCisJCQkJCQkJCQkJCQkgICBkTnVtR3JvdXBzKSk7CisJCQkJCX0KKwkJCQkJZWxz ZQorCQkJCQl7CisJCQkJCQkvKiBPdGhlciBjYXNlcyBzaG91bGQgaGF2ZSBiZWVuIGhhbmRs ZWQgYWJvdmUgKi8KKwkJCQkJCUFzc2VydChmYWxzZSk7CisJCQkJCX0KKwkJCQl9CisKKwkJ CQkvKgorCQkJCSAqIE5vdyB3ZSBtYXkgY29uc2lkZXIgaW5jcmVtZW50YWwgc29ydCBvbiB0 aGlzIHBhdGgsIGJ1dCBvbmx5CisJCQkJICogd2hlbiB0aGUgcGF0aCBpcyBub3QgYWxyZWFk eSBzb3J0ZWQgYW5kIHdoZW4gaW5jcmVtZW50YWwgc29ydAorCQkJCSAqIGlzIGVuYWJsZWQu CisJCQkJICovCisJCQkJaWYgKGlzX3NvcnRlZCB8fCAhZW5hYmxlX2luY3JlbWVudGFsX3Nv cnQpCisJCQkJCWNvbnRpbnVlOworCisJCQkJLyogUmVzdG9yZSB0aGUgaW5wdXQgcGF0aCAo d2UgbWlnaHQgaGF2ZSBhZGRlZCBTb3J0IG9uIHRvcCkuICovCisJCQkJcGF0aCA9IHBhdGhf b3JpZ2luYWw7CisKKwkJCQkvKiBubyBzaGFyZWQgcHJlZml4LCBubyBwb2ludCBpbiBidWls ZGluZyBpbmNyZW1lbnRhbCBzb3J0ICovCisJCQkJaWYgKHByZXNvcnRlZF9rZXlzID09IDAp CisJCQkJCWNvbnRpbnVlOworCisJCQkJLyoKKwkJCQkgKiBXZSBzaG91bGQgaGF2ZSBhbHJl YWR5IGV4Y2x1ZGVkIHBhdGhrZXlzIG9mIGxlbmd0aCAxIGJlY2F1c2UKKwkJCQkgKiB0aGVu IHByZXNvcnRlZF9rZXlzID4gMCB3b3VsZCBpbXBseSBpc19zb3J0ZWQgd2FzIHRydWUuCisJ CQkJICovCisJCQkJQXNzZXJ0KGxpc3RfbGVuZ3RoKHJvb3QtPmdyb3VwX3BhdGhrZXlzKSAh PSAxKTsKKworCQkJCXBhdGggPSAoUGF0aCAqKSBjcmVhdGVfaW5jcmVtZW50YWxfc29ydF9w YXRoKHJvb3QsCisJCQkJCQkJCQkJCQkJCQkgZ3JvdXBlZF9yZWwsCisJCQkJCQkJCQkJCQkJ CQkgcGF0aCwKKwkJCQkJCQkJCQkJCQkJCSBpbmZvLT5wYXRoa2V5cywKKwkJCQkJCQkJCQkJ CQkJCSBwcmVzb3J0ZWRfa2V5cywKKwkJCQkJCQkJCQkJCQkJCSAtMS4wKTsKIAogCQkJCS8q IE5vdyBkZWNpZGUgd2hhdCB0byBzdGljayBhdG9wIGl0ICovCiAJCQkJaWYgKHBhcnNlLT5n cm91cGluZ1NldHMpCkBAIC02MjQ3LDE3ICs2MzQ0LDE3IEBAIGFkZF9wYXRoc190b19ncm91 cGluZ19yZWwoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKmlucHV0X3JlbCwKIAkJ CQllbHNlIGlmIChwYXJzZS0+aGFzQWdncykKIAkJCQl7CiAJCQkJCS8qCi0JCQkJCSAqIFdl IGhhdmUgYWdncmVnYXRpb24sIHBvc3NpYmx5IHdpdGggcGxhaW4gR1JPVVAgQlkuIE1ha2UK LQkJCQkJICogYW4gQWdnUGF0aC4KKwkJCQkJICogV2UgaGF2ZSBhZ2dyZWdhdGlvbiwgcG9z c2libHkgd2l0aCBwbGFpbiBHUk9VUCBCWS4gTWFrZSBhbgorCQkJCQkgKiBBZ2dQYXRoLgog CQkJCQkgKi8KIAkJCQkJYWRkX3BhdGgoZ3JvdXBlZF9yZWwsIChQYXRoICopCiAJCQkJCQkJ IGNyZWF0ZV9hZ2dfcGF0aChyb290LAogCQkJCQkJCQkJCQkgZ3JvdXBlZF9yZWwsCiAJCQkJ CQkJCQkJCSBwYXRoLAogCQkJCQkJCQkJCQkgZ3JvdXBlZF9yZWwtPnJlbHRhcmdldCwKLQkJ CQkJCQkJCQkJIHBhcnNlLT5ncm91cENsYXVzZSA/IEFHR19TT1JURUQgOiBBR0dfUExBSU4s CisJCQkJCQkJCQkJCSBpbmZvLT5jbGF1c2VzID8gQUdHX1NPUlRFRCA6IEFHR19QTEFJTiwK IAkJCQkJCQkJCQkJIEFHR1NQTElUX1NJTVBMRSwKLQkJCQkJCQkJCQkJIHBhcnNlLT5ncm91 cENsYXVzZSwKKwkJCQkJCQkJCQkJIGluZm8tPmNsYXVzZXMsCiAJCQkJCQkJCQkJCSBoYXZp bmdRdWFsLAogCQkJCQkJCQkJCQkgYWdnX2Nvc3RzLAogCQkJCQkJCQkJCQkgZE51bUdyb3Vw cykpOwpAQCAtNjI2NSwxNCArNjM2MiwxNCBAQCBhZGRfcGF0aHNfdG9fZ3JvdXBpbmdfcmVs KFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICppbnB1dF9yZWwsCiAJCQkJZWxzZSBp ZiAocGFyc2UtPmdyb3VwQ2xhdXNlKQogCQkJCXsKIAkJCQkJLyoKLQkJCQkJICogV2UgaGF2 ZSBHUk9VUCBCWSB3aXRob3V0IGFnZ3JlZ2F0aW9uIG9yIGdyb3VwaW5nIHNldHMuCi0JCQkJ CSAqIE1ha2UgYSBHcm91cFBhdGguCisJCQkJCSAqIFdlIGhhdmUgR1JPVVAgQlkgd2l0aG91 dCBhZ2dyZWdhdGlvbiBvciBncm91cGluZyBzZXRzLiBNYWtlCisJCQkJCSAqIGEgR3JvdXBQ YXRoLgogCQkJCQkgKi8KIAkJCQkJYWRkX3BhdGgoZ3JvdXBlZF9yZWwsIChQYXRoICopCiAJ CQkJCQkJIGNyZWF0ZV9ncm91cF9wYXRoKHJvb3QsCiAJCQkJCQkJCQkJCSAgIGdyb3VwZWRf cmVsLAogCQkJCQkJCQkJCQkgICBwYXRoLAotCQkJCQkJCQkJCQkgICBwYXJzZS0+Z3JvdXBD bGF1c2UsCisJCQkJCQkJCQkJCSAgIGluZm8tPmNsYXVzZXMsCiAJCQkJCQkJCQkJCSAgIGhh dmluZ1F1YWwsCiAJCQkJCQkJCQkJCSAgIGROdW1Hcm91cHMpKTsKIAkJCQl9CkBAIC02Mjgy LDc5ICs2Mzc5LDYgQEAgYWRkX3BhdGhzX3RvX2dyb3VwaW5nX3JlbChQbGFubmVySW5mbyAq cm9vdCwgUmVsT3B0SW5mbyAqaW5wdXRfcmVsLAogCQkJCQlBc3NlcnQoZmFsc2UpOwogCQkJ CX0KIAkJCX0KLQotCQkJLyoKLQkJCSAqIE5vdyB3ZSBtYXkgY29uc2lkZXIgaW5jcmVtZW50 YWwgc29ydCBvbiB0aGlzIHBhdGgsIGJ1dCBvbmx5Ci0JCQkgKiB3aGVuIHRoZSBwYXRoIGlz IG5vdCBhbHJlYWR5IHNvcnRlZCBhbmQgd2hlbiBpbmNyZW1lbnRhbCBzb3J0Ci0JCQkgKiBp cyBlbmFibGVkLgotCQkJICovCi0JCQlpZiAoaXNfc29ydGVkIHx8ICFlbmFibGVfaW5jcmVt ZW50YWxfc29ydCkKLQkJCQljb250aW51ZTsKLQotCQkJLyogUmVzdG9yZSB0aGUgaW5wdXQg cGF0aCAod2UgbWlnaHQgaGF2ZSBhZGRlZCBTb3J0IG9uIHRvcCkuICovCi0JCQlwYXRoID0g cGF0aF9vcmlnaW5hbDsKLQotCQkJLyogbm8gc2hhcmVkIHByZWZpeCwgbm8gcG9pbnQgaW4g YnVpbGRpbmcgaW5jcmVtZW50YWwgc29ydCAqLwotCQkJaWYgKHByZXNvcnRlZF9rZXlzID09 IDApCi0JCQkJY29udGludWU7Ci0KLQkJCS8qCi0JCQkgKiBXZSBzaG91bGQgaGF2ZSBhbHJl YWR5IGV4Y2x1ZGVkIHBhdGhrZXlzIG9mIGxlbmd0aCAxIGJlY2F1c2UKLQkJCSAqIHRoZW4g cHJlc29ydGVkX2tleXMgPiAwIHdvdWxkIGltcGx5IGlzX3NvcnRlZCB3YXMgdHJ1ZS4KLQkJ CSAqLwotCQkJQXNzZXJ0KGxpc3RfbGVuZ3RoKHJvb3QtPmdyb3VwX3BhdGhrZXlzKSAhPSAx KTsKLQotCQkJcGF0aCA9IChQYXRoICopIGNyZWF0ZV9pbmNyZW1lbnRhbF9zb3J0X3BhdGgo cm9vdCwKLQkJCQkJCQkJCQkJCQkJIGdyb3VwZWRfcmVsLAotCQkJCQkJCQkJCQkJCQkgcGF0 aCwKLQkJCQkJCQkJCQkJCQkJIHJvb3QtPmdyb3VwX3BhdGhrZXlzLAotCQkJCQkJCQkJCQkJ CQkgcHJlc29ydGVkX2tleXMsCi0JCQkJCQkJCQkJCQkJCSAtMS4wKTsKLQotCQkJLyogTm93 IGRlY2lkZSB3aGF0IHRvIHN0aWNrIGF0b3AgaXQgKi8KLQkJCWlmIChwYXJzZS0+Z3JvdXBp bmdTZXRzKQotCQkJewotCQkJCWNvbnNpZGVyX2dyb3VwaW5nc2V0c19wYXRocyhyb290LCBn cm91cGVkX3JlbCwKLQkJCQkJCQkJCQkJcGF0aCwgdHJ1ZSwgY2FuX2hhc2gsCi0JCQkJCQkJ CQkJCWdkLCBhZ2dfY29zdHMsIGROdW1Hcm91cHMpOwotCQkJfQotCQkJZWxzZSBpZiAocGFy c2UtPmhhc0FnZ3MpCi0JCQl7Ci0JCQkJLyoKLQkJCQkgKiBXZSBoYXZlIGFnZ3JlZ2F0aW9u LCBwb3NzaWJseSB3aXRoIHBsYWluIEdST1VQIEJZLiBNYWtlIGFuCi0JCQkJICogQWdnUGF0 aC4KLQkJCQkgKi8KLQkJCQlhZGRfcGF0aChncm91cGVkX3JlbCwgKFBhdGggKikKLQkJCQkJ CSBjcmVhdGVfYWdnX3BhdGgocm9vdCwKLQkJCQkJCQkJCQkgZ3JvdXBlZF9yZWwsCi0JCQkJ CQkJCQkJIHBhdGgsCi0JCQkJCQkJCQkJIGdyb3VwZWRfcmVsLT5yZWx0YXJnZXQsCi0JCQkJ CQkJCQkJIHBhcnNlLT5ncm91cENsYXVzZSA/IEFHR19TT1JURUQgOiBBR0dfUExBSU4sCi0J CQkJCQkJCQkJIEFHR1NQTElUX1NJTVBMRSwKLQkJCQkJCQkJCQkgcGFyc2UtPmdyb3VwQ2xh dXNlLAotCQkJCQkJCQkJCSBoYXZpbmdRdWFsLAotCQkJCQkJCQkJCSBhZ2dfY29zdHMsCi0J CQkJCQkJCQkJIGROdW1Hcm91cHMpKTsKLQkJCX0KLQkJCWVsc2UgaWYgKHBhcnNlLT5ncm91 cENsYXVzZSkKLQkJCXsKLQkJCQkvKgotCQkJCSAqIFdlIGhhdmUgR1JPVVAgQlkgd2l0aG91 dCBhZ2dyZWdhdGlvbiBvciBncm91cGluZyBzZXRzLiBNYWtlCi0JCQkJICogYSBHcm91cFBh dGguCi0JCQkJICovCi0JCQkJYWRkX3BhdGgoZ3JvdXBlZF9yZWwsIChQYXRoICopCi0JCQkJ CQkgY3JlYXRlX2dyb3VwX3BhdGgocm9vdCwKLQkJCQkJCQkJCQkgICBncm91cGVkX3JlbCwK LQkJCQkJCQkJCQkgICBwYXRoLAotCQkJCQkJCQkJCSAgIHBhcnNlLT5ncm91cENsYXVzZSwK LQkJCQkJCQkJCQkgICBoYXZpbmdRdWFsLAotCQkJCQkJCQkJCSAgIGROdW1Hcm91cHMpKTsK LQkJCX0KLQkJCWVsc2UKLQkJCXsKLQkJCQkvKiBPdGhlciBjYXNlcyBzaG91bGQgaGF2ZSBi ZWVuIGhhbmRsZWQgYWJvdmUgKi8KLQkJCQlBc3NlcnQoZmFsc2UpOwotCQkJfQogCQl9CiAK IAkJLyoKQEAgLTYzNjUsMTAwICs2Mzg5LDEyNCBAQCBhZGRfcGF0aHNfdG9fZ3JvdXBpbmdf cmVsKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICppbnB1dF9yZWwsCiAJCXsKIAkJ CWZvcmVhY2gobGMsIHBhcnRpYWxseV9ncm91cGVkX3JlbC0+cGF0aGxpc3QpCiAJCQl7CisJ CQkJTGlzdENlbGwgICAqbGMyOwogCQkJCVBhdGgJICAgKnBhdGggPSAoUGF0aCAqKSBsZmly c3QobGMpOwogCQkJCVBhdGgJICAgKnBhdGhfb3JpZ2luYWwgPSBwYXRoOwotCQkJCWJvb2wJ CWlzX3NvcnRlZDsKLQkJCQlpbnQJCQlwcmVzb3J0ZWRfa2V5czsKIAotCQkJCWlzX3NvcnRl ZCA9IHBhdGhrZXlzX2NvdW50X2NvbnRhaW5lZF9pbihyb290LT5ncm91cF9wYXRoa2V5cywK LQkJCQkJCQkJCQkJCQkJcGF0aC0+cGF0aGtleXMsCi0JCQkJCQkJCQkJCQkJCSZwcmVzb3J0 ZWRfa2V5cyk7CisJCQkJTGlzdAkgICAqcGF0aGtleV9vcmRlcmluZ3MgPSBOSUw7CiAKLQkJ CQkvKgotCQkJCSAqIEluc2VydCBhIFNvcnQgbm9kZSwgaWYgcmVxdWlyZWQuICBCdXQgdGhl cmUncyBubyBwb2ludCBpbgotCQkJCSAqIHNvcnRpbmcgYW55dGhpbmcgYnV0IHRoZSBjaGVh cGVzdCBwYXRoLgotCQkJCSAqLwotCQkJCWlmICghaXNfc29ydGVkKQorCQkJCUxpc3QJICAg Kmdyb3VwX3BhdGhrZXlzID0gcm9vdC0+Z3JvdXBfcGF0aGtleXM7CisJCQkJTGlzdAkgICAq Z3JvdXBfY2xhdXNlcyA9IHBhcnNlLT5ncm91cENsYXVzZTsKKworCQkJCS8qIGdlbmVyYXRl IGFsdGVybmF0aXZlIGdyb3VwIG9yZGVyaW5ncyB0aGF0IG1pZ2h0IGJlIHVzZWZ1bCAqLwor CQkJCXBhdGhrZXlfb3JkZXJpbmdzID0gZ2V0X3VzZWZ1bF9ncm91cF9rZXlzX29yZGVyaW5n cyhyb290LAorCQkJCQkJCQkJCQkJCQkJCQlwYXRoLT5yb3dzLAorCQkJCQkJCQkJCQkJCQkJ CQlwYXRoLT5wYXRoa2V5cywKKwkJCQkJCQkJCQkJCQkJCQkJZ3JvdXBfcGF0aGtleXMsCisJ CQkJCQkJCQkJCQkJCQkJCWdyb3VwX2NsYXVzZXMpOworCisJCQkJQXNzZXJ0KGxpc3RfbGVu Z3RoKHBhdGhrZXlfb3JkZXJpbmdzKSA+IDApOworCisJCQkJLyogcHJvY2VzcyBhbGwgcG90 ZW50aWFsbHkgaW50ZXJlc3RpbmcgZ3JvdXBpbmcgcmVvcmRlcmluZ3MgKi8KKwkJCQlmb3Jl YWNoIChsYzIsIHBhdGhrZXlfb3JkZXJpbmdzKQogCQkJCXsKLQkJCQkJaWYgKHBhdGggIT0g cGFydGlhbGx5X2dyb3VwZWRfcmVsLT5jaGVhcGVzdF90b3RhbF9wYXRoKQotCQkJCQkJY29u dGludWU7Ci0JCQkJCXBhdGggPSAoUGF0aCAqKSBjcmVhdGVfc29ydF9wYXRoKHJvb3QsCi0J CQkJCQkJCQkJCQkJIGdyb3VwZWRfcmVsLAotCQkJCQkJCQkJCQkJCSBwYXRoLAotCQkJCQkJ CQkJCQkJCSByb290LT5ncm91cF9wYXRoa2V5cywKLQkJCQkJCQkJCQkJCQkgLTEuMCk7Ci0J CQkJfQorCQkJCQlib29sCQlpc19zb3J0ZWQ7CisJCQkJCWludAkJCXByZXNvcnRlZF9rZXlz ID0gMDsKKwkJCQkJUGF0aEtleUluZm8gKmluZm8gPSAoUGF0aEtleUluZm8gKikgbGZpcnN0 KGxjMik7CiAKLQkJCQlpZiAocGFyc2UtPmhhc0FnZ3MpCi0JCQkJCWFkZF9wYXRoKGdyb3Vw ZWRfcmVsLCAoUGF0aCAqKQotCQkJCQkJCSBjcmVhdGVfYWdnX3BhdGgocm9vdCwKLQkJCQkJ CQkJCQkJIGdyb3VwZWRfcmVsLAotCQkJCQkJCQkJCQkgcGF0aCwKLQkJCQkJCQkJCQkJIGdy b3VwZWRfcmVsLT5yZWx0YXJnZXQsCi0JCQkJCQkJCQkJCSBwYXJzZS0+Z3JvdXBDbGF1c2Ug PyBBR0dfU09SVEVEIDogQUdHX1BMQUlOLAotCQkJCQkJCQkJCQkgQUdHU1BMSVRfRklOQUxf REVTRVJJQUwsCi0JCQkJCQkJCQkJCSBwYXJzZS0+Z3JvdXBDbGF1c2UsCi0JCQkJCQkJCQkJ CSBoYXZpbmdRdWFsLAotCQkJCQkJCQkJCQkgYWdnX2ZpbmFsX2Nvc3RzLAotCQkJCQkJCQkJ CQkgZE51bUdyb3VwcykpOwotCQkJCWVsc2UKLQkJCQkJYWRkX3BhdGgoZ3JvdXBlZF9yZWws IChQYXRoICopCi0JCQkJCQkJIGNyZWF0ZV9ncm91cF9wYXRoKHJvb3QsCi0JCQkJCQkJCQkJ CSAgIGdyb3VwZWRfcmVsLAotCQkJCQkJCQkJCQkgICBwYXRoLAotCQkJCQkJCQkJCQkgICBw YXJzZS0+Z3JvdXBDbGF1c2UsCi0JCQkJCQkJCQkJCSAgIGhhdmluZ1F1YWwsCi0JCQkJCQkJ CQkJCSAgIGROdW1Hcm91cHMpKTsKKwkJCQkJLyogcmVzdG9yZSB0aGUgcGF0aCAod2UgcmVw bGFjZSBpdCBpbiB0aGUgbG9vcCkgKi8KKwkJCQkJcGF0aCA9IHBhdGhfb3JpZ2luYWw7CiAK LQkJCQkvKgotCQkJCSAqIE5vdyB3ZSBtYXkgY29uc2lkZXIgaW5jcmVtZW50YWwgc29ydCBv biB0aGlzIHBhdGgsIGJ1dCBvbmx5Ci0JCQkJICogd2hlbiB0aGUgcGF0aCBpcyBub3QgYWxy ZWFkeSBzb3J0ZWQgYW5kIHdoZW4gaW5jcmVtZW50YWwKLQkJCQkgKiBzb3J0IGlzIGVuYWJs ZWQuCi0JCQkJICovCi0JCQkJaWYgKGlzX3NvcnRlZCB8fCAhZW5hYmxlX2luY3JlbWVudGFs X3NvcnQpCi0JCQkJCWNvbnRpbnVlOworCQkJCQlpc19zb3J0ZWQgPSBwYXRoa2V5c19jb3Vu dF9jb250YWluZWRfaW4oaW5mby0+cGF0aGtleXMsCisJCQkJCQkJCQkJCQkJCQlwYXRoLT5w YXRoa2V5cywKKwkJCQkJCQkJCQkJCQkJCSZwcmVzb3J0ZWRfa2V5cyk7CiAKLQkJCQkvKiBS ZXN0b3JlIHRoZSBpbnB1dCBwYXRoICh3ZSBtaWdodCBoYXZlIGFkZGVkIFNvcnQgb24gdG9w KS4gKi8KLQkJCQlwYXRoID0gcGF0aF9vcmlnaW5hbDsKKwkJCQkJLyoKKwkJCQkJICogSW5z ZXJ0IGEgU29ydCBub2RlLCBpZiByZXF1aXJlZC4gIEJ1dCB0aGVyZSdzIG5vIHBvaW50IGlu CisJCQkJCSAqIHNvcnRpbmcgYW55dGhpbmcgYnV0IHRoZSBjaGVhcGVzdCBwYXRoLgorCQkJ CQkgKi8KKwkJCQkJaWYgKCFpc19zb3J0ZWQpCisJCQkJCXsKKwkJCQkJCWlmIChwYXRoICE9 IHBhcnRpYWxseV9ncm91cGVkX3JlbC0+Y2hlYXBlc3RfdG90YWxfcGF0aCkKKwkJCQkJCQlj b250aW51ZTsKKwkJCQkJCXBhdGggPSAoUGF0aCAqKSBjcmVhdGVfc29ydF9wYXRoKHJvb3Qs CisJCQkJCQkJCQkJCQkJCSBncm91cGVkX3JlbCwKKwkJCQkJCQkJCQkJCQkJIHBhdGgsCisJ CQkJCQkJCQkJCQkJCSBpbmZvLT5wYXRoa2V5cywKKwkJCQkJCQkJCQkJCQkJIC0xLjApOwor CQkJCQl9CiAKLQkJCQkvKiBubyBzaGFyZWQgcHJlZml4LCBub3QgcG9pbnQgaW4gYnVpbGRp bmcgaW5jcmVtZW50YWwgc29ydCAqLwotCQkJCWlmIChwcmVzb3J0ZWRfa2V5cyA9PSAwKQot CQkJCQljb250aW51ZTsKKwkJCQkJaWYgKHBhcnNlLT5oYXNBZ2dzKQorCQkJCQkJYWRkX3Bh dGgoZ3JvdXBlZF9yZWwsIChQYXRoICopCisJCQkJCQkJCSBjcmVhdGVfYWdnX3BhdGgocm9v dCwKKwkJCQkJCQkJCQkJCSBncm91cGVkX3JlbCwKKwkJCQkJCQkJCQkJCSBwYXRoLAorCQkJ CQkJCQkJCQkJIGdyb3VwZWRfcmVsLT5yZWx0YXJnZXQsCisJCQkJCQkJCQkJCQkgaW5mby0+ Y2xhdXNlcyA/IEFHR19TT1JURUQgOiBBR0dfUExBSU4sCisJCQkJCQkJCQkJCQkgQUdHU1BM SVRfRklOQUxfREVTRVJJQUwsCisJCQkJCQkJCQkJCQkgaW5mby0+Y2xhdXNlcywKKwkJCQkJ CQkJCQkJCSBoYXZpbmdRdWFsLAorCQkJCQkJCQkJCQkJIGFnZ19maW5hbF9jb3N0cywKKwkJ CQkJCQkJCQkJCSBkTnVtR3JvdXBzKSk7CisJCQkJCWVsc2UKKwkJCQkJCWFkZF9wYXRoKGdy b3VwZWRfcmVsLCAoUGF0aCAqKQorCQkJCQkJCQkgY3JlYXRlX2dyb3VwX3BhdGgocm9vdCwK KwkJCQkJCQkJCQkJCSAgIGdyb3VwZWRfcmVsLAorCQkJCQkJCQkJCQkJICAgcGF0aCwKKwkJ CQkJCQkJCQkJCSAgIGluZm8tPmNsYXVzZXMsCisJCQkJCQkJCQkJCQkgICBoYXZpbmdRdWFs LAorCQkJCQkJCQkJCQkJICAgZE51bUdyb3VwcykpOwogCi0JCQkJLyoKLQkJCQkgKiBXZSBz aG91bGQgaGF2ZSBhbHJlYWR5IGV4Y2x1ZGVkIHBhdGhrZXlzIG9mIGxlbmd0aCAxCi0JCQkJ ICogYmVjYXVzZSB0aGVuIHByZXNvcnRlZF9rZXlzID4gMCB3b3VsZCBpbXBseSBpc19zb3J0 ZWQgd2FzCi0JCQkJICogdHJ1ZS4KLQkJCQkgKi8KLQkJCQlBc3NlcnQobGlzdF9sZW5ndGgo cm9vdC0+Z3JvdXBfcGF0aGtleXMpICE9IDEpOworCQkJCQkvKgorCQkJCQkgKiBOb3cgd2Ug bWF5IGNvbnNpZGVyIGluY3JlbWVudGFsIHNvcnQgb24gdGhpcyBwYXRoLCBidXQgb25seQor CQkJCQkgKiB3aGVuIHRoZSBwYXRoIGlzIG5vdCBhbHJlYWR5IHNvcnRlZCBhbmQgd2hlbiBp bmNyZW1lbnRhbAorCQkJCQkgKiBzb3J0IGlzIGVuYWJsZWQuCisJCQkJCSAqLworCQkJCQlp ZiAoaXNfc29ydGVkIHx8ICFlbmFibGVfaW5jcmVtZW50YWxfc29ydCkKKwkJCQkJCWNvbnRp bnVlOwogCi0JCQkJcGF0aCA9IChQYXRoICopIGNyZWF0ZV9pbmNyZW1lbnRhbF9zb3J0X3Bh dGgocm9vdCwKLQkJCQkJCQkJCQkJCQkJCSBncm91cGVkX3JlbCwKLQkJCQkJCQkJCQkJCQkJ CSBwYXRoLAotCQkJCQkJCQkJCQkJCQkJIHJvb3QtPmdyb3VwX3BhdGhrZXlzLAotCQkJCQkJ CQkJCQkJCQkJIHByZXNvcnRlZF9rZXlzLAotCQkJCQkJCQkJCQkJCQkJIC0xLjApOworCQkJ CQkvKiBSZXN0b3JlIHRoZSBpbnB1dCBwYXRoICh3ZSBtaWdodCBoYXZlIGFkZGVkIFNvcnQg b24gdG9wKS4gKi8KKwkJCQkJcGF0aCA9IHBhdGhfb3JpZ2luYWw7CiAKLQkJCQlpZiAocGFy c2UtPmhhc0FnZ3MpCi0JCQkJCWFkZF9wYXRoKGdyb3VwZWRfcmVsLCAoUGF0aCAqKQotCQkJ CQkJCSBjcmVhdGVfYWdnX3BhdGgocm9vdCwKLQkJCQkJCQkJCQkJIGdyb3VwZWRfcmVsLAot CQkJCQkJCQkJCQkgcGF0aCwKLQkJCQkJCQkJCQkJIGdyb3VwZWRfcmVsLT5yZWx0YXJnZXQs Ci0JCQkJCQkJCQkJCSBwYXJzZS0+Z3JvdXBDbGF1c2UgPyBBR0dfU09SVEVEIDogQUdHX1BM QUlOLAotCQkJCQkJCQkJCQkgQUdHU1BMSVRfRklOQUxfREVTRVJJQUwsCi0JCQkJCQkJCQkJ CSBwYXJzZS0+Z3JvdXBDbGF1c2UsCi0JCQkJCQkJCQkJCSBoYXZpbmdRdWFsLAotCQkJCQkJ CQkJCQkgYWdnX2ZpbmFsX2Nvc3RzLAotCQkJCQkJCQkJCQkgZE51bUdyb3VwcykpOwotCQkJ CWVsc2UKLQkJCQkJYWRkX3BhdGgoZ3JvdXBlZF9yZWwsIChQYXRoICopCi0JCQkJCQkJIGNy ZWF0ZV9ncm91cF9wYXRoKHJvb3QsCi0JCQkJCQkJCQkJCSAgIGdyb3VwZWRfcmVsLAotCQkJ CQkJCQkJCQkgICBwYXRoLAotCQkJCQkJCQkJCQkgICBwYXJzZS0+Z3JvdXBDbGF1c2UsCi0J CQkJCQkJCQkJCSAgIGhhdmluZ1F1YWwsCi0JCQkJCQkJCQkJCSAgIGROdW1Hcm91cHMpKTsK KwkJCQkJLyogbm8gc2hhcmVkIHByZWZpeCwgbm90IHBvaW50IGluIGJ1aWxkaW5nIGluY3Jl bWVudGFsIHNvcnQgKi8KKwkJCQkJaWYgKHByZXNvcnRlZF9rZXlzID09IDApCisJCQkJCQlj b250aW51ZTsKKworCQkJCQkvKgorCQkJCQkgKiBXZSBzaG91bGQgaGF2ZSBhbHJlYWR5IGV4 Y2x1ZGVkIHBhdGhrZXlzIG9mIGxlbmd0aCAxCisJCQkJCSAqIGJlY2F1c2UgdGhlbiBwcmVz b3J0ZWRfa2V5cyA+IDAgd291bGQgaW1wbHkgaXNfc29ydGVkIHdhcworCQkJCQkgKiB0cnVl LgorCQkJCQkgKi8KKwkJCQkJQXNzZXJ0KGxpc3RfbGVuZ3RoKHJvb3QtPmdyb3VwX3BhdGhr ZXlzKSAhPSAxKTsKKworCQkJCQlwYXRoID0gKFBhdGggKikgY3JlYXRlX2luY3JlbWVudGFs X3NvcnRfcGF0aChyb290LAorCQkJCQkJCQkJCQkJCQkJCSBncm91cGVkX3JlbCwKKwkJCQkJ CQkJCQkJCQkJCQkgcGF0aCwKKwkJCQkJCQkJCQkJCQkJCQkgaW5mby0+cGF0aGtleXMsCisJ CQkJCQkJCQkJCQkJCQkJIHByZXNvcnRlZF9rZXlzLAorCQkJCQkJCQkJCQkJCQkJCSAtMS4w KTsKKworCQkJCQlpZiAocGFyc2UtPmhhc0FnZ3MpCisJCQkJCQlhZGRfcGF0aChncm91cGVk X3JlbCwgKFBhdGggKikKKwkJCQkJCQkJIGNyZWF0ZV9hZ2dfcGF0aChyb290LAorCQkJCQkJ CQkJCQkJIGdyb3VwZWRfcmVsLAorCQkJCQkJCQkJCQkJIHBhdGgsCisJCQkJCQkJCQkJCQkg Z3JvdXBlZF9yZWwtPnJlbHRhcmdldCwKKwkJCQkJCQkJCQkJCSBpbmZvLT5jbGF1c2VzID8g QUdHX1NPUlRFRCA6IEFHR19QTEFJTiwKKwkJCQkJCQkJCQkJCSBBR0dTUExJVF9GSU5BTF9E RVNFUklBTCwKKwkJCQkJCQkJCQkJCSBpbmZvLT5jbGF1c2VzLAorCQkJCQkJCQkJCQkJIGhh dmluZ1F1YWwsCisJCQkJCQkJCQkJCQkgYWdnX2ZpbmFsX2Nvc3RzLAorCQkJCQkJCQkJCQkJ IGROdW1Hcm91cHMpKTsKKwkJCQkJZWxzZQorCQkJCQkJYWRkX3BhdGgoZ3JvdXBlZF9yZWws IChQYXRoICopCisJCQkJCQkJCSBjcmVhdGVfZ3JvdXBfcGF0aChyb290LAorCQkJCQkJCQkJ CQkJICAgZ3JvdXBlZF9yZWwsCisJCQkJCQkJCQkJCQkgICBwYXRoLAorCQkJCQkJCQkJCQkJ ICAgaW5mby0+Y2xhdXNlcywKKwkJCQkJCQkJCQkJCSAgIGhhdmluZ1F1YWwsCisJCQkJCQkJ CQkJCQkgICBkTnVtR3JvdXBzKSk7CisJCQkJfQogCQkJfQogCQl9CiAJfQpAQCAtNjY2MSw0 MSArNjcwOSw3MSBAQCBjcmVhdGVfcGFydGlhbF9ncm91cGluZ19wYXRocyhQbGFubmVySW5m byAqcm9vdCwKIAkJICovCiAJCWZvcmVhY2gobGMsIGlucHV0X3JlbC0+cGF0aGxpc3QpCiAJ CXsKKwkJCUxpc3RDZWxsICAgKmxjMjsKIAkJCVBhdGgJICAgKnBhdGggPSAoUGF0aCAqKSBs Zmlyc3QobGMpOwotCQkJYm9vbAkJaXNfc29ydGVkOworCQkJUGF0aAkgICAqcGF0aF9zYXZl ID0gcGF0aDsKIAotCQkJaXNfc29ydGVkID0gcGF0aGtleXNfY29udGFpbmVkX2luKHJvb3Qt Pmdyb3VwX3BhdGhrZXlzLAotCQkJCQkJCQkJCQkgIHBhdGgtPnBhdGhrZXlzKTsKLQkJCWlm IChwYXRoID09IGNoZWFwZXN0X3RvdGFsX3BhdGggfHwgaXNfc29ydGVkKQorCQkJTGlzdAkg ICAqcGF0aGtleV9vcmRlcmluZ3MgPSBOSUw7CisKKwkJCUxpc3QJICAgKmdyb3VwX3BhdGhr ZXlzID0gcm9vdC0+Z3JvdXBfcGF0aGtleXM7CisJCQlMaXN0CSAgICpncm91cF9jbGF1c2Vz ID0gcGFyc2UtPmdyb3VwQ2xhdXNlOworCisJCQkvKiBnZW5lcmF0ZSBhbHRlcm5hdGl2ZSBn cm91cCBvcmRlcmluZ3MgdGhhdCBtaWdodCBiZSB1c2VmdWwgKi8KKwkJCXBhdGhrZXlfb3Jk ZXJpbmdzID0gZ2V0X3VzZWZ1bF9ncm91cF9rZXlzX29yZGVyaW5ncyhyb290LAorCQkJCQkJ CQkJCQkJCQkJCXBhdGgtPnJvd3MsCisJCQkJCQkJCQkJCQkJCQkJcGF0aC0+cGF0aGtleXMs CisJCQkJCQkJCQkJCQkJCQkJZ3JvdXBfcGF0aGtleXMsCisJCQkJCQkJCQkJCQkJCQkJZ3Jv dXBfY2xhdXNlcyk7CisKKwkJCUFzc2VydChsaXN0X2xlbmd0aChwYXRoa2V5X29yZGVyaW5n cykgPiAwKTsKKworCQkJLyogcHJvY2VzcyBhbGwgcG90ZW50aWFsbHkgaW50ZXJlc3Rpbmcg Z3JvdXBpbmcgcmVvcmRlcmluZ3MgKi8KKwkJCWZvcmVhY2ggKGxjMiwgcGF0aGtleV9vcmRl cmluZ3MpCiAJCQl7Ci0JCQkJLyogU29ydCB0aGUgY2hlYXBlc3QgcGFydGlhbCBwYXRoLCBp ZiBpdCBpc24ndCBhbHJlYWR5ICovCi0JCQkJaWYgKCFpc19zb3J0ZWQpCi0JCQkJCXBhdGgg PSAoUGF0aCAqKSBjcmVhdGVfc29ydF9wYXRoKHJvb3QsCi0JCQkJCQkJCQkJCQkJIHBhcnRp YWxseV9ncm91cGVkX3JlbCwKLQkJCQkJCQkJCQkJCQkgcGF0aCwKLQkJCQkJCQkJCQkJCQkg cm9vdC0+Z3JvdXBfcGF0aGtleXMsCi0JCQkJCQkJCQkJCQkJIC0xLjApOworCQkJCWJvb2wJ CWlzX3NvcnRlZDsKKwkJCQlpbnQJCQlwcmVzb3J0ZWRfa2V5cyA9IDA7CisJCQkJUGF0aEtl eUluZm8gKmluZm8gPSAoUGF0aEtleUluZm8gKikgbGZpcnN0KGxjMik7CiAKLQkJCQlpZiAo cGFyc2UtPmhhc0FnZ3MpCi0JCQkJCWFkZF9wYXRoKHBhcnRpYWxseV9ncm91cGVkX3JlbCwg KFBhdGggKikKLQkJCQkJCQkgY3JlYXRlX2FnZ19wYXRoKHJvb3QsCi0JCQkJCQkJCQkJCSBw YXJ0aWFsbHlfZ3JvdXBlZF9yZWwsCi0JCQkJCQkJCQkJCSBwYXRoLAotCQkJCQkJCQkJCQkg cGFydGlhbGx5X2dyb3VwZWRfcmVsLT5yZWx0YXJnZXQsCi0JCQkJCQkJCQkJCSBwYXJzZS0+ Z3JvdXBDbGF1c2UgPyBBR0dfU09SVEVEIDogQUdHX1BMQUlOLAotCQkJCQkJCQkJCQkgQUdH U1BMSVRfSU5JVElBTF9TRVJJQUwsCi0JCQkJCQkJCQkJCSBwYXJzZS0+Z3JvdXBDbGF1c2Us Ci0JCQkJCQkJCQkJCSBOSUwsCi0JCQkJCQkJCQkJCSBhZ2dfcGFydGlhbF9jb3N0cywKLQkJ CQkJCQkJCQkJIGROdW1QYXJ0aWFsR3JvdXBzKSk7Ci0JCQkJZWxzZQotCQkJCQlhZGRfcGF0 aChwYXJ0aWFsbHlfZ3JvdXBlZF9yZWwsIChQYXRoICopCi0JCQkJCQkJIGNyZWF0ZV9ncm91 cF9wYXRoKHJvb3QsCi0JCQkJCQkJCQkJCSAgIHBhcnRpYWxseV9ncm91cGVkX3JlbCwKLQkJ CQkJCQkJCQkJICAgcGF0aCwKLQkJCQkJCQkJCQkJICAgcGFyc2UtPmdyb3VwQ2xhdXNlLAot CQkJCQkJCQkJCQkgICBOSUwsCi0JCQkJCQkJCQkJCSAgIGROdW1QYXJ0aWFsR3JvdXBzKSk7 CisJCQkJLyogcmVzdG9yZSB0aGUgcGF0aCAod2UgcmVwbGFjZSBpdCBpbiB0aGUgbG9vcCkg Ki8KKwkJCQlwYXRoID0gcGF0aF9zYXZlOworCisJCQkJaXNfc29ydGVkID0gcGF0aGtleXNf Y291bnRfY29udGFpbmVkX2luKGluZm8tPnBhdGhrZXlzLAorCQkJCQkJCQkJCQkJCQlwYXRo LT5wYXRoa2V5cywKKwkJCQkJCQkJCQkJCQkJJnByZXNvcnRlZF9rZXlzKTsKKworCQkJCWlm IChwYXRoID09IGNoZWFwZXN0X3RvdGFsX3BhdGggfHwgaXNfc29ydGVkKQorCQkJCXsKKwkJ CQkJLyogU29ydCB0aGUgY2hlYXBlc3QgcGFydGlhbCBwYXRoLCBpZiBpdCBpc24ndCBhbHJl YWR5ICovCisJCQkJCWlmICghaXNfc29ydGVkKQorCQkJCQl7CisJCQkJCQlwYXRoID0gKFBh dGggKikgY3JlYXRlX3NvcnRfcGF0aChyb290LAorCQkJCQkJCQkJCQkJCQkgcGFydGlhbGx5 X2dyb3VwZWRfcmVsLAorCQkJCQkJCQkJCQkJCQkgcGF0aCwKKwkJCQkJCQkJCQkJCQkJIGlu Zm8tPnBhdGhrZXlzLAorCQkJCQkJCQkJCQkJCQkgLTEuMCk7CisJCQkJCX0KKworCQkJCQlp ZiAocGFyc2UtPmhhc0FnZ3MpCisJCQkJCQlhZGRfcGF0aChwYXJ0aWFsbHlfZ3JvdXBlZF9y ZWwsIChQYXRoICopCisJCQkJCQkJCSBjcmVhdGVfYWdnX3BhdGgocm9vdCwKKwkJCQkJCQkJ CQkJCSBwYXJ0aWFsbHlfZ3JvdXBlZF9yZWwsCisJCQkJCQkJCQkJCQkgcGF0aCwKKwkJCQkJ CQkJCQkJCSBwYXJ0aWFsbHlfZ3JvdXBlZF9yZWwtPnJlbHRhcmdldCwKKwkJCQkJCQkJCQkJ CSBpbmZvLT5jbGF1c2VzID8gQUdHX1NPUlRFRCA6IEFHR19QTEFJTiwKKwkJCQkJCQkJCQkJ CSBBR0dTUExJVF9JTklUSUFMX1NFUklBTCwKKwkJCQkJCQkJCQkJCSBpbmZvLT5jbGF1c2Vz LAorCQkJCQkJCQkJCQkJIE5JTCwKKwkJCQkJCQkJCQkJCSBhZ2dfcGFydGlhbF9jb3N0cywK KwkJCQkJCQkJCQkJCSBkTnVtUGFydGlhbEdyb3VwcykpOworCQkJCQllbHNlCisJCQkJCQlh ZGRfcGF0aChwYXJ0aWFsbHlfZ3JvdXBlZF9yZWwsIChQYXRoICopCisJCQkJCQkJCSBjcmVh dGVfZ3JvdXBfcGF0aChyb290LAorCQkJCQkJCQkJCQkJICAgcGFydGlhbGx5X2dyb3VwZWRf cmVsLAorCQkJCQkJCQkJCQkJICAgcGF0aCwKKwkJCQkJCQkJCQkJCSAgIGluZm8tPmNsYXVz ZXMsCisJCQkJCQkJCQkJCQkgICBOSUwsCisJCQkJCQkJCQkJCQkgICBkTnVtUGFydGlhbEdy b3VwcykpOworCQkJCX0KIAkJCX0KIAkJfQogCkBAIC02NzA1LDYgKzY3ODMsOCBAQCBjcmVh dGVfcGFydGlhbF9ncm91cGluZ19wYXRocyhQbGFubmVySW5mbyAqcm9vdCwKIAkJICogV2Ug Y2FuIGFsc28gc2tpcCB0aGUgZW50aXJlIGxvb3Agd2hlbiB3ZSBvbmx5IGhhdmUgYSBzaW5n bGUtaXRlbQogCQkgKiBncm91cF9wYXRoa2V5cyBiZWNhdXNlIHRoZW4gd2UgY2FuJ3QgcG9z c2libHkgaGF2ZSBhIHByZXNvcnRlZAogCQkgKiBwcmVmaXggb2YgdGhlIGxpc3Qgd2l0aG91 dCBoYXZpbmcgdGhlIGxpc3QgYmUgZnVsbHkgc29ydGVkLgorCQkgKgorCQkgKiBYWFggU2hv dWxkbid0IHRoaXMgYWxzbyBjb25zaWRlciB0aGUgZ3JvdXAta2V5LXJlb3JkZXJpbmc/CiAJ CSAqLwogCQlpZiAoZW5hYmxlX2luY3JlbWVudGFsX3NvcnQgJiYgbGlzdF9sZW5ndGgocm9v dC0+Z3JvdXBfcGF0aGtleXMpID4gMSkKIAkJewpAQCAtNjc2MywyNCArNjg0MywxMDAgQEAg Y3JlYXRlX3BhcnRpYWxfZ3JvdXBpbmdfcGF0aHMoUGxhbm5lckluZm8gKnJvb3QsCiAJCS8q IFNpbWlsYXIgdG8gYWJvdmUgbG9naWMsIGJ1dCBmb3IgcGFydGlhbCBwYXRocy4gKi8KIAkJ Zm9yZWFjaChsYywgaW5wdXRfcmVsLT5wYXJ0aWFsX3BhdGhsaXN0KQogCQl7CisJCQlMaXN0 Q2VsbCAgICpsYzI7CiAJCQlQYXRoCSAgICpwYXRoID0gKFBhdGggKikgbGZpcnN0KGxjKTsK IAkJCVBhdGgJICAgKnBhdGhfb3JpZ2luYWwgPSBwYXRoOwotCQkJYm9vbAkJaXNfc29ydGVk OwotCQkJaW50CQkJcHJlc29ydGVkX2tleXM7CiAKLQkJCWlzX3NvcnRlZCA9IHBhdGhrZXlz X2NvdW50X2NvbnRhaW5lZF9pbihyb290LT5ncm91cF9wYXRoa2V5cywKLQkJCQkJCQkJCQkJ CQlwYXRoLT5wYXRoa2V5cywKLQkJCQkJCQkJCQkJCQkmcHJlc29ydGVkX2tleXMpOworCQkJ TGlzdAkgICAqcGF0aGtleV9vcmRlcmluZ3MgPSBOSUw7CisKKwkJCUxpc3QJICAgKmdyb3Vw X3BhdGhrZXlzID0gcm9vdC0+Z3JvdXBfcGF0aGtleXM7CisJCQlMaXN0CSAgICpncm91cF9j bGF1c2VzID0gcGFyc2UtPmdyb3VwQ2xhdXNlOwogCi0JCQlpZiAocGF0aCA9PSBjaGVhcGVz dF9wYXJ0aWFsX3BhdGggfHwgaXNfc29ydGVkKQorCQkJLyogZ2VuZXJhdGUgYWx0ZXJuYXRp dmUgZ3JvdXAgb3JkZXJpbmdzIHRoYXQgbWlnaHQgYmUgdXNlZnVsICovCisJCQlwYXRoa2V5 X29yZGVyaW5ncyA9IGdldF91c2VmdWxfZ3JvdXBfa2V5c19vcmRlcmluZ3Mocm9vdCwKKwkJ CQkJCQkJCQkJCQkJCQlwYXRoLT5yb3dzLAorCQkJCQkJCQkJCQkJCQkJCXBhdGgtPnBhdGhr ZXlzLAorCQkJCQkJCQkJCQkJCQkJCWdyb3VwX3BhdGhrZXlzLAorCQkJCQkJCQkJCQkJCQkJ CWdyb3VwX2NsYXVzZXMpOworCisJCQlBc3NlcnQobGlzdF9sZW5ndGgocGF0aGtleV9vcmRl cmluZ3MpID4gMCk7CisKKwkJCS8qIHByb2Nlc3MgYWxsIHBvdGVudGlhbGx5IGludGVyZXN0 aW5nIGdyb3VwaW5nIHJlb3JkZXJpbmdzICovCisJCQlmb3JlYWNoIChsYzIsIHBhdGhrZXlf b3JkZXJpbmdzKQogCQkJewotCQkJCS8qIFNvcnQgdGhlIGNoZWFwZXN0IHBhcnRpYWwgcGF0 aCwgaWYgaXQgaXNuJ3QgYWxyZWFkeSAqLwotCQkJCWlmICghaXNfc29ydGVkKQotCQkJCQlw YXRoID0gKFBhdGggKikgY3JlYXRlX3NvcnRfcGF0aChyb290LAotCQkJCQkJCQkJCQkJCSBw YXJ0aWFsbHlfZ3JvdXBlZF9yZWwsCi0JCQkJCQkJCQkJCQkJIHBhdGgsCi0JCQkJCQkJCQkJ CQkJIHJvb3QtPmdyb3VwX3BhdGhrZXlzLAotCQkJCQkJCQkJCQkJCSAtMS4wKTsKKwkJCQli b29sCQlpc19zb3J0ZWQ7CisJCQkJaW50CQkJcHJlc29ydGVkX2tleXMgPSAwOworCQkJCVBh dGhLZXlJbmZvICppbmZvID0gKFBhdGhLZXlJbmZvICopIGxmaXJzdChsYzIpOworCisJCQkJ LyogcmVzdG9yZSB0aGUgcGF0aCAod2UgcmVwbGFjZSBpdCBpbiB0aGUgbG9vcCkgKi8KKwkJ CQlwYXRoID0gcGF0aF9vcmlnaW5hbDsKKworCQkJCWlzX3NvcnRlZCA9IHBhdGhrZXlzX2Nv dW50X2NvbnRhaW5lZF9pbihpbmZvLT5wYXRoa2V5cywKKwkJCQkJCQkJCQkJCQkJcGF0aC0+ cGF0aGtleXMsCisJCQkJCQkJCQkJCQkJCSZwcmVzb3J0ZWRfa2V5cyk7CisKKwkJCQlpZiAo cGF0aCA9PSBjaGVhcGVzdF9wYXJ0aWFsX3BhdGggfHwgaXNfc29ydGVkKQorCQkJCXsKKwor CQkJCQkvKiBTb3J0IHRoZSBjaGVhcGVzdCBwYXJ0aWFsIHBhdGgsIGlmIGl0IGlzbid0IGFs cmVhZHkgKi8KKwkJCQkJaWYgKCFpc19zb3J0ZWQpCisJCQkJCXsKKwkJCQkJCXBhdGggPSAo UGF0aCAqKSBjcmVhdGVfc29ydF9wYXRoKHJvb3QsCisJCQkJCQkJCQkJCQkJCSBwYXJ0aWFs bHlfZ3JvdXBlZF9yZWwsCisJCQkJCQkJCQkJCQkJCSBwYXRoLAorCQkJCQkJCQkJCQkJCQkg aW5mby0+cGF0aGtleXMsCisJCQkJCQkJCQkJCQkJCSAtMS4wKTsKKwkJCQkJfQorCisJCQkJ CWlmIChwYXJzZS0+aGFzQWdncykKKwkJCQkJCWFkZF9wYXJ0aWFsX3BhdGgocGFydGlhbGx5 X2dyb3VwZWRfcmVsLCAoUGF0aCAqKQorCQkJCQkJCQkJCSBjcmVhdGVfYWdnX3BhdGgocm9v dCwKKwkJCQkJCQkJCQkJCQkJIHBhcnRpYWxseV9ncm91cGVkX3JlbCwKKwkJCQkJCQkJCQkJ CQkJIHBhdGgsCisJCQkJCQkJCQkJCQkJCSBwYXJ0aWFsbHlfZ3JvdXBlZF9yZWwtPnJlbHRh cmdldCwKKwkJCQkJCQkJCQkJCQkJIGluZm8tPmNsYXVzZXMgPyBBR0dfU09SVEVEIDogQUdH X1BMQUlOLAorCQkJCQkJCQkJCQkJCQkgQUdHU1BMSVRfSU5JVElBTF9TRVJJQUwsCisJCQkJ CQkJCQkJCQkJCSBpbmZvLT5jbGF1c2VzLAorCQkJCQkJCQkJCQkJCQkgTklMLAorCQkJCQkJ CQkJCQkJCQkgYWdnX3BhcnRpYWxfY29zdHMsCisJCQkJCQkJCQkJCQkJCSBkTnVtUGFydGlh bFBhcnRpYWxHcm91cHMpKTsKKwkJCQkJZWxzZQorCQkJCQkJYWRkX3BhcnRpYWxfcGF0aChw YXJ0aWFsbHlfZ3JvdXBlZF9yZWwsIChQYXRoICopCisJCQkJCQkJCQkJIGNyZWF0ZV9ncm91 cF9wYXRoKHJvb3QsCisJCQkJCQkJCQkJCQkJCSAgIHBhcnRpYWxseV9ncm91cGVkX3JlbCwK KwkJCQkJCQkJCQkJCQkJICAgcGF0aCwKKwkJCQkJCQkJCQkJCQkJICAgaW5mby0+Y2xhdXNl cywKKwkJCQkJCQkJCQkJCQkJICAgTklMLAorCQkJCQkJCQkJCQkJCQkgICBkTnVtUGFydGlh bFBhcnRpYWxHcm91cHMpKTsKKwkJCQl9CisKKwkJCQkvKgorCQkJCSAqIE5vdyB3ZSBtYXkg Y29uc2lkZXIgaW5jcmVtZW50YWwgc29ydCBvbiB0aGlzIHBhdGgsIGJ1dCBvbmx5CisJCQkJ ICogd2hlbiB0aGUgcGF0aCBpcyBub3QgYWxyZWFkeSBzb3J0ZWQgYW5kIHdoZW4gaW5jcmVt ZW50YWwgc29ydAorCQkJCSAqIGlzIGVuYWJsZWQuCisJCQkJICovCisJCQkJaWYgKGlzX3Nv cnRlZCB8fCAhZW5hYmxlX2luY3JlbWVudGFsX3NvcnQpCisJCQkJCWNvbnRpbnVlOworCisJ CQkJLyogUmVzdG9yZSB0aGUgaW5wdXQgcGF0aCAod2UgbWlnaHQgaGF2ZSBhZGRlZCBTb3J0 IG9uIHRvcCkuICovCisJCQkJcGF0aCA9IHBhdGhfb3JpZ2luYWw7CisKKwkJCQkvKiBubyBz aGFyZWQgcHJlZml4LCBub3QgcG9pbnQgaW4gYnVpbGRpbmcgaW5jcmVtZW50YWwgc29ydCAq LworCQkJCWlmIChwcmVzb3J0ZWRfa2V5cyA9PSAwKQorCQkJCQljb250aW51ZTsKKworCQkJ CS8qCisJCQkJICogV2Ugc2hvdWxkIGhhdmUgYWxyZWFkeSBleGNsdWRlZCBwYXRoa2V5cyBv ZiBsZW5ndGggMSBiZWNhdXNlCisJCQkJICogdGhlbiBwcmVzb3J0ZWRfa2V5cyA+IDAgd291 bGQgaW1wbHkgaXNfc29ydGVkIHdhcyB0cnVlLgorCQkJCSAqLworCQkJCUFzc2VydChsaXN0 X2xlbmd0aChyb290LT5ncm91cF9wYXRoa2V5cykgIT0gMSk7CisKKwkJCQlwYXRoID0gKFBh dGggKikgY3JlYXRlX2luY3JlbWVudGFsX3NvcnRfcGF0aChyb290LAorCQkJCQkJCQkJCQkJ CQkJIHBhcnRpYWxseV9ncm91cGVkX3JlbCwKKwkJCQkJCQkJCQkJCQkJCSBwYXRoLAorCQkJ CQkJCQkJCQkJCQkJIGluZm8tPnBhdGhrZXlzLAorCQkJCQkJCQkJCQkJCQkJIHByZXNvcnRl ZF9rZXlzLAorCQkJCQkJCQkJCQkJCQkJIC0xLjApOwogCiAJCQkJaWYgKHBhcnNlLT5oYXNB Z2dzKQogCQkJCQlhZGRfcGFydGlhbF9wYXRoKHBhcnRpYWxseV9ncm91cGVkX3JlbCwgKFBh dGggKikKQEAgLTY3ODgsOSArNjk0NCw5IEBAIGNyZWF0ZV9wYXJ0aWFsX2dyb3VwaW5nX3Bh dGhzKFBsYW5uZXJJbmZvICpyb290LAogCQkJCQkJCQkJCQkJCSBwYXJ0aWFsbHlfZ3JvdXBl ZF9yZWwsCiAJCQkJCQkJCQkJCQkJIHBhdGgsCiAJCQkJCQkJCQkJCQkJIHBhcnRpYWxseV9n cm91cGVkX3JlbC0+cmVsdGFyZ2V0LAotCQkJCQkJCQkJCQkJCSBwYXJzZS0+Z3JvdXBDbGF1 c2UgPyBBR0dfU09SVEVEIDogQUdHX1BMQUlOLAorCQkJCQkJCQkJCQkJCSBpbmZvLT5jbGF1 c2VzID8gQUdHX1NPUlRFRCA6IEFHR19QTEFJTiwKIAkJCQkJCQkJCQkJCQkgQUdHU1BMSVRf SU5JVElBTF9TRVJJQUwsCi0JCQkJCQkJCQkJCQkJIHBhcnNlLT5ncm91cENsYXVzZSwKKwkJ CQkJCQkJCQkJCQkgaW5mby0+Y2xhdXNlcywKIAkJCQkJCQkJCQkJCQkgTklMLAogCQkJCQkJ CQkJCQkJCSBhZ2dfcGFydGlhbF9jb3N0cywKIAkJCQkJCQkJCQkJCQkgZE51bVBhcnRpYWxQ YXJ0aWFsR3JvdXBzKSk7CkBAIC02Nzk5LDU5ICs2OTU1LDEwIEBAIGNyZWF0ZV9wYXJ0aWFs X2dyb3VwaW5nX3BhdGhzKFBsYW5uZXJJbmZvICpyb290LAogCQkJCQkJCQkJIGNyZWF0ZV9n cm91cF9wYXRoKHJvb3QsCiAJCQkJCQkJCQkJCQkJICAgcGFydGlhbGx5X2dyb3VwZWRfcmVs LAogCQkJCQkJCQkJCQkJCSAgIHBhdGgsCi0JCQkJCQkJCQkJCQkJICAgcGFyc2UtPmdyb3Vw Q2xhdXNlLAorCQkJCQkJCQkJCQkJCSAgIGluZm8tPmNsYXVzZXMsCiAJCQkJCQkJCQkJCQkJ ICAgTklMLAogCQkJCQkJCQkJCQkJCSAgIGROdW1QYXJ0aWFsUGFydGlhbEdyb3VwcykpOwog CQkJfQotCi0JCQkvKgotCQkJICogTm93IHdlIG1heSBjb25zaWRlciBpbmNyZW1lbnRhbCBz b3J0IG9uIHRoaXMgcGF0aCwgYnV0IG9ubHkKLQkJCSAqIHdoZW4gdGhlIHBhdGggaXMgbm90 IGFscmVhZHkgc29ydGVkIGFuZCB3aGVuIGluY3JlbWVudGFsIHNvcnQKLQkJCSAqIGlzIGVu YWJsZWQuCi0JCQkgKi8KLQkJCWlmIChpc19zb3J0ZWQgfHwgIWVuYWJsZV9pbmNyZW1lbnRh bF9zb3J0KQotCQkJCWNvbnRpbnVlOwotCi0JCQkvKiBSZXN0b3JlIHRoZSBpbnB1dCBwYXRo ICh3ZSBtaWdodCBoYXZlIGFkZGVkIFNvcnQgb24gdG9wKS4gKi8KLQkJCXBhdGggPSBwYXRo X29yaWdpbmFsOwotCi0JCQkvKiBubyBzaGFyZWQgcHJlZml4LCBub3QgcG9pbnQgaW4gYnVp bGRpbmcgaW5jcmVtZW50YWwgc29ydCAqLwotCQkJaWYgKHByZXNvcnRlZF9rZXlzID09IDAp Ci0JCQkJY29udGludWU7Ci0KLQkJCS8qCi0JCQkgKiBXZSBzaG91bGQgaGF2ZSBhbHJlYWR5 IGV4Y2x1ZGVkIHBhdGhrZXlzIG9mIGxlbmd0aCAxIGJlY2F1c2UKLQkJCSAqIHRoZW4gcHJl c29ydGVkX2tleXMgPiAwIHdvdWxkIGltcGx5IGlzX3NvcnRlZCB3YXMgdHJ1ZS4KLQkJCSAq LwotCQkJQXNzZXJ0KGxpc3RfbGVuZ3RoKHJvb3QtPmdyb3VwX3BhdGhrZXlzKSAhPSAxKTsK LQotCQkJcGF0aCA9IChQYXRoICopIGNyZWF0ZV9pbmNyZW1lbnRhbF9zb3J0X3BhdGgocm9v dCwKLQkJCQkJCQkJCQkJCQkJIHBhcnRpYWxseV9ncm91cGVkX3JlbCwKLQkJCQkJCQkJCQkJ CQkJIHBhdGgsCi0JCQkJCQkJCQkJCQkJCSByb290LT5ncm91cF9wYXRoa2V5cywKLQkJCQkJ CQkJCQkJCQkJIHByZXNvcnRlZF9rZXlzLAotCQkJCQkJCQkJCQkJCQkgLTEuMCk7Ci0KLQkJ CWlmIChwYXJzZS0+aGFzQWdncykKLQkJCQlhZGRfcGFydGlhbF9wYXRoKHBhcnRpYWxseV9n cm91cGVkX3JlbCwgKFBhdGggKikKLQkJCQkJCQkJIGNyZWF0ZV9hZ2dfcGF0aChyb290LAot CQkJCQkJCQkJCQkJIHBhcnRpYWxseV9ncm91cGVkX3JlbCwKLQkJCQkJCQkJCQkJCSBwYXRo LAotCQkJCQkJCQkJCQkJIHBhcnRpYWxseV9ncm91cGVkX3JlbC0+cmVsdGFyZ2V0LAotCQkJ CQkJCQkJCQkJIHBhcnNlLT5ncm91cENsYXVzZSA/IEFHR19TT1JURUQgOiBBR0dfUExBSU4s Ci0JCQkJCQkJCQkJCQkgQUdHU1BMSVRfSU5JVElBTF9TRVJJQUwsCi0JCQkJCQkJCQkJCQkg cGFyc2UtPmdyb3VwQ2xhdXNlLAotCQkJCQkJCQkJCQkJIE5JTCwKLQkJCQkJCQkJCQkJCSBh Z2dfcGFydGlhbF9jb3N0cywKLQkJCQkJCQkJCQkJCSBkTnVtUGFydGlhbFBhcnRpYWxHcm91 cHMpKTsKLQkJCWVsc2UKLQkJCQlhZGRfcGFydGlhbF9wYXRoKHBhcnRpYWxseV9ncm91cGVk X3JlbCwgKFBhdGggKikKLQkJCQkJCQkJIGNyZWF0ZV9ncm91cF9wYXRoKHJvb3QsCi0JCQkJ CQkJCQkJCQkgICBwYXJ0aWFsbHlfZ3JvdXBlZF9yZWwsCi0JCQkJCQkJCQkJCQkgICBwYXRo LAotCQkJCQkJCQkJCQkJICAgcGFyc2UtPmdyb3VwQ2xhdXNlLAotCQkJCQkJCQkJCQkJICAg TklMLAotCQkJCQkJCQkJCQkJICAgZE51bVBhcnRpYWxQYXJ0aWFsR3JvdXBzKSk7CiAJCX0K IAl9CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BhdGhub2Rl LmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wYXRobm9kZS5jCmluZGV4IDk5ZGY3 NmI2YjcxLi4xNjcwZTU0NjQ0MCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVy L3V0aWwvcGF0aG5vZGUuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wYXRo bm9kZS5jCkBAIC0xMzQyLDcgKzEzNDIsNyBAQCBjcmVhdGVfYXBwZW5kX3BhdGgoUGxhbm5l ckluZm8gKnJvb3QsCiAJCXBhdGhub2RlLT5wYXRoLnBhdGhrZXlzID0gY2hpbGQtPnBhdGhr ZXlzOwogCX0KIAllbHNlCi0JCWNvc3RfYXBwZW5kKHBhdGhub2RlKTsKKwkJY29zdF9hcHBl bmQocGF0aG5vZGUsIHJvb3QpOwogCiAJLyogSWYgdGhlIGNhbGxlciBwcm92aWRlZCBhIHJv dyBlc3RpbWF0ZSwgb3ZlcnJpZGUgdGhlIGNvbXB1dGVkIHZhbHVlLiAqLwogCWlmIChyb3dz ID49IDApCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvc2VsZnVuY3MuYyBi L3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9zZWxmdW5jcy5jCmluZGV4IDFmYmIwYjI4YzNiLi5m YjRmYjk4N2U3ZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3NlbGZ1bmNz LmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3NlbGZ1bmNzLmMKQEAgLTMzNjgsMTEg KzMzNjgsMjggQEAgZG91YmxlCiBlc3RpbWF0ZV9udW1fZ3JvdXBzKFBsYW5uZXJJbmZvICpy b290LCBMaXN0ICpncm91cEV4cHJzLCBkb3VibGUgaW5wdXRfcm93cywKIAkJCQkJTGlzdCAq KnBnc2V0LCBFc3RpbWF0aW9uSW5mbyAqZXN0aW5mbykKIHsKLQlMaXN0CSAgICp2YXJpbmZv cyA9IE5JTDsKKwlyZXR1cm4gZXN0aW1hdGVfbnVtX2dyb3Vwc19pbmNyZW1lbnRhbChyb290 LCBncm91cEV4cHJzLAorCQkJCQkJCQkJCSAgIGlucHV0X3Jvd3MsIHBnc2V0LCBlc3RpbmZv LAorCQkJCQkJCQkJCSAgIE5VTEwsIDApOworfQorCisvKgorICogZXN0aW1hdGVfbnVtX2dy b3Vwc19pbmNyZW1lbnRhbAorICoJCUFuIGVzdGltYXRlX251bV9ncm91cHMgdmFyaWFudCwg b3B0aW1pemVkIGZvciBjYXNlcyB0aGF0IGFyZSBhZGRpbmcgdGhlCisgKgkJZXhwcmVzc2lv bnMgaW5jcmVtZW50YWxseSAoZS5nLiBvbmUgYnkgb25lKS4KKyAqLworZG91YmxlCitlc3Rp bWF0ZV9udW1fZ3JvdXBzX2luY3JlbWVudGFsKFBsYW5uZXJJbmZvICpyb290LCBMaXN0ICpn cm91cEV4cHJzLAorCQkJCQlkb3VibGUgaW5wdXRfcm93cywKKwkJCQkJTGlzdCAqKnBnc2V0 LCBFc3RpbWF0aW9uSW5mbyAqZXN0aW5mbywKKwkJCQkJTGlzdCAqKmNhY2hlX3ZhcmluZm9z LCBpbnQgcHJldk5FeHBycykKK3sKKwlMaXN0CSAgICp2YXJpbmZvcyA9IChjYWNoZV92YXJp bmZvcykgPyAqY2FjaGVfdmFyaW5mb3MgOiBOSUw7CiAJZG91YmxlCQlzcmZfbXVsdGlwbGll ciA9IDEuMDsKIAlkb3VibGUJCW51bWRpc3RpbmN0OwogCUxpc3RDZWxsICAgKmw7Ci0JaW50 CQkJaTsKKwlpbnQJCQlpLAorCQkJCWo7CiAKIAkvKiBaZXJvIHRoZSBlc3RpbmZvIG91dHB1 dCBwYXJhbWV0ZXIsIGlmIG5vbi1OVUxMICovCiAJaWYgKGVzdGluZm8gIT0gTlVMTCkKQEAg LTM0MDMsNyArMzQyMCw3IEBAIGVzdGltYXRlX251bV9ncm91cHMoUGxhbm5lckluZm8gKnJv b3QsIExpc3QgKmdyb3VwRXhwcnMsIGRvdWJsZSBpbnB1dF9yb3dzLAogCSAqLwogCW51bWRp c3RpbmN0ID0gMS4wOwogCi0JaSA9IDA7CisJaSA9IGogPSAwOwogCWZvcmVhY2gobCwgZ3Jv dXBFeHBycykKIAl7CiAJCU5vZGUJICAgKmdyb3VwZXhwciA9IChOb2RlICopIGxmaXJzdChs KTsKQEAgLTM0MTIsNiArMzQyOSwxNCBAQCBlc3RpbWF0ZV9udW1fZ3JvdXBzKFBsYW5uZXJJ bmZvICpyb290LCBMaXN0ICpncm91cEV4cHJzLCBkb3VibGUgaW5wdXRfcm93cywKIAkJTGlz dAkgICAqdmFyc2hlcmU7CiAJCUxpc3RDZWxsICAgKmwyOwogCisJCS8qIHdhcyBkb25lIG9u IHByZXZpb3VzIGNhbGwgKi8KKwkJaWYgKGNhY2hlX3ZhcmluZm9zICYmIGorKyA8IHByZXZO RXhwcnMpCisJCXsKKwkJCWlmIChwZ3NldCkKKwkJCQlpKys7IC8qIHRvIGtlZXAgaW4gc3lu YyB3aXRoIGxpbmVzIGJlbG93ICovCisJCQljb250aW51ZTsKKwkJfQorCiAJCS8qIGlzIGV4 cHJlc3Npb24gaW4gdGhpcyBncm91cGluZyBzZXQ/ICovCiAJCWlmIChwZ3NldCAmJiAhbGlz dF9tZW1iZXJfaW50KCpwZ3NldCwgaSsrKSkKIAkJCWNvbnRpbnVlOwpAQCAtMzQ4MSw3ICsz NTA2LDExIEBAIGVzdGltYXRlX251bV9ncm91cHMoUGxhbm5lckluZm8gKnJvb3QsIExpc3Qg Kmdyb3VwRXhwcnMsIGRvdWJsZSBpbnB1dF9yb3dzLAogCQlpZiAodmFyc2hlcmUgPT0gTklM KQogCQl7CiAJCQlpZiAoY29udGFpbl92b2xhdGlsZV9mdW5jdGlvbnMoZ3JvdXBleHByKSkK KwkJCXsKKwkJCQlpZiAoY2FjaGVfdmFyaW5mb3MpCisJCQkJCSpjYWNoZV92YXJpbmZvcyA9 IHZhcmluZm9zOwogCQkJCXJldHVybiBpbnB1dF9yb3dzOworCQkJfQogCQkJY29udGludWU7 CiAJCX0KIApAQCAtMzQ5OCw2ICszNTI3LDkgQEAgZXN0aW1hdGVfbnVtX2dyb3VwcyhQbGFu bmVySW5mbyAqcm9vdCwgTGlzdCAqZ3JvdXBFeHBycywgZG91YmxlIGlucHV0X3Jvd3MsCiAJ CX0KIAl9CiAKKwlpZiAoY2FjaGVfdmFyaW5mb3MpCisJCSpjYWNoZV92YXJpbmZvcyA9IHZh cmluZm9zOworCiAJLyoKIAkgKiBJZiBub3cgbm8gVmFycywgd2UgbXVzdCBoYXZlIGFuIGFs bC1jb25zdGFudCBvciBhbGwtYm9vbGVhbiBHUk9VUCBCWQogCSAqIGxpc3QuCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Yy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMv bWlzYy9ndWMuYwppbmRleCBlYjNhMDNiOTc2Mi4uOWU4YWIxNDIwZDkgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMv bWlzYy9ndWMuYwpAQCAtMTE4Miw2ICsxMTgyLDE2IEBAIHN0YXRpYyBzdHJ1Y3QgY29uZmln X2Jvb2wgQ29uZmlndXJlTmFtZXNCb29sW10gPQogCQl0cnVlLAogCQlOVUxMLCBOVUxMLCBO VUxMCiAJfSwKKwl7CisJCXsiZW5hYmxlX2dyb3VwX2J5X3Jlb3JkZXJpbmciLCBQR0NfVVNF UlNFVCwgUVVFUllfVFVOSU5HX01FVEhPRCwKKwkJCWdldHRleHRfbm9vcCgiZW5hYmxlIHJl b3JkZXJpbmcgb2YgR1JPVVAgQlkga2V5IiksCisJCQlOVUxMLAorCQkJR1VDX0VYUExBSU4K KwkJfSwKKwkJJmVuYWJsZV9ncm91cF9ieV9yZW9yZGVyaW5nLAorCQl0cnVlLAorCQlOVUxM LCBOVUxMLCBOVUxMCisJfSwKIAl7CiAJCXsiZ2VxbyIsIFBHQ19VU0VSU0VULCBRVUVSWV9U VU5JTkdfR0VRTywKIAkJCWdldHRleHRfbm9vcCgiRW5hYmxlcyBnZW5ldGljIHF1ZXJ5IG9w dGltaXphdGlvbi4iKSwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9z dGdyZXNxbC5jb25mLnNhbXBsZSBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNx bC5jb25mLnNhbXBsZQppbmRleCBiOTMzZmFkZThjNi4uOTNkMjIxYTM3YjEgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZQorKysg Yi9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUKQEAgLTM4 Miw2ICszODIsNyBAQAogI2VuYWJsZV9zZXFzY2FuID0gb24KICNlbmFibGVfc29ydCA9IG9u CiAjZW5hYmxlX3RpZHNjYW4gPSBvbgorI2VuYWJsZV9ncm91cF9ieV9yZW9yZGVyaW5nID0g b24KIAogIyAtIFBsYW5uZXIgQ29zdCBDb25zdGFudHMgLQogCmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS9ub2Rlcy9ub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvbm9kZXMuaAppbmRl eCBlOGYzMDM2N2E0OC4uZTc0YTdjNzJlYTYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25v ZGVzL25vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvbm9kZXMuaApAQCAtMjcxLDYg KzI3MSw3IEBAIHR5cGVkZWYgZW51bSBOb2RlVGFnCiAJVF9FcXVpdmFsZW5jZUNsYXNzLAog CVRfRXF1aXZhbGVuY2VNZW1iZXIsCiAJVF9QYXRoS2V5LAorCVRfUGF0aEtleUluZm8sCiAJ VF9QYXRoVGFyZ2V0LAogCVRfUmVzdHJpY3RJbmZvLAogCVRfSW5kZXhDbGF1c2UsCmRpZmYg LS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaCBiL3NyYy9pbmNsdWRlL25v ZGVzL3BhdGhub2Rlcy5oCmluZGV4IDM2NTAwMGJkY2RiLi42Y2JjYjY3YmRmMSAxMDA2NDQK LS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUv bm9kZXMvcGF0aG5vZGVzLmgKQEAgLTEwNzAsNiArMTA3MCwxNiBAQCB0eXBlZGVmIHN0cnVj dCBQYXRoS2V5CiAJYm9vbAkJcGtfbnVsbHNfZmlyc3Q7IC8qIGRvIE5VTExzIGNvbWUgYmVm b3JlIG5vcm1hbCB2YWx1ZXM/ICovCiB9IFBhdGhLZXk7CiAKKy8qCisgKiBDb21iaW5lcyBp bmZvcm1hdGlvbiBhYm91dCBwYXRoa2V5cyBhbmQgdGhlIGFzc29jaWF0ZWQgY2xhdXNlcy4K KyAqLwordHlwZWRlZiBzdHJ1Y3QgUGF0aEtleUluZm8KK3sKKwlOb2RlVGFnCQl0eXBlOwor CUxpc3QJICAgKnBhdGhrZXlzOworCUxpc3QJICAgKmNsYXVzZXM7Cit9IFBhdGhLZXlJbmZv OworCiAvKgogICogVm9sYXRpbGVGdW5jdGlvblN0YXR1cyAtLSBhbGxvd3Mgbm9kZXMgdG8g Y2FjaGUgdGhlaXIKICAqIGNvbnRhaW5fdm9sYXRpbGVfZnVuY3Rpb25zIHByb3BlcnRpZXMu IFZPTEFUSUxJVFlfVU5LTk9XTiBtZWFucyBub3QgeWV0CmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS9vcHRpbWl6ZXIvY29zdC5oIGIvc3JjL2luY2x1ZGUvb3B0aW1pemVyL2Nvc3QuaApp bmRleCBiYzEyMDcxYWY2ZS4uZGM3ZmMxNzQxMTQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRl L29wdGltaXplci9jb3N0LmgKKysrIGIvc3JjL2luY2x1ZGUvb3B0aW1pemVyL2Nvc3QuaApA QCAtMTE0LDcgKzExNCw5IEBAIGV4dGVybiB2b2lkIGNvc3RfaW5jcmVtZW50YWxfc29ydChQ YXRoICpwYXRoLAogCQkJCQkJCQkgIENvc3QgaW5wdXRfc3RhcnR1cF9jb3N0LCBDb3N0IGlu cHV0X3RvdGFsX2Nvc3QsCiAJCQkJCQkJCSAgZG91YmxlIGlucHV0X3R1cGxlcywgaW50IHdp ZHRoLCBDb3N0IGNvbXBhcmlzb25fY29zdCwgaW50IHNvcnRfbWVtLAogCQkJCQkJCQkgIGRv dWJsZSBsaW1pdF90dXBsZXMpOwotZXh0ZXJuIHZvaWQgY29zdF9hcHBlbmQoQXBwZW5kUGF0 aCAqcGF0aCk7CitleHRlcm4gQ29zdCBjb3N0X3NvcnRfZXN0aW1hdGUoUGxhbm5lckluZm8g KnJvb3QsIExpc3QgKnBhdGhrZXlzLAorCQkJCQkJCSAgIGludCBuUHJlc29ydGVkS2V5cywg ZG91YmxlIHR1cGxlcyk7CitleHRlcm4gdm9pZCBjb3N0X2FwcGVuZChBcHBlbmRQYXRoICpw YXRoLCBQbGFubmVySW5mbyAqcm9vdCk7CiBleHRlcm4gdm9pZCBjb3N0X21lcmdlX2FwcGVu ZChQYXRoICpwYXRoLCBQbGFubmVySW5mbyAqcm9vdCwKIAkJCQkJCQkgIExpc3QgKnBhdGhr ZXlzLCBpbnQgbl9zdHJlYW1zLAogCQkJCQkJCSAgQ29zdCBpbnB1dF9zdGFydHVwX2Nvc3Qs IENvc3QgaW5wdXRfdG90YWxfY29zdCwKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL29wdGlt aXplci9wYXRocy5oIGIvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhzLmgKaW5kZXggMGMz YTBiOTBjODUuLjJmZmEyNGFhODk5IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9vcHRpbWl6 ZXIvcGF0aHMuaAorKysgYi9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0aHMuaApAQCAtMjQs NiArMjQsNyBAQCBleHRlcm4gUEdETExJTVBPUlQgYm9vbCBlbmFibGVfZ2VxbzsKIGV4dGVy biBQR0RMTElNUE9SVCBpbnQgZ2Vxb190aHJlc2hvbGQ7CiBleHRlcm4gUEdETExJTVBPUlQg aW50IG1pbl9wYXJhbGxlbF90YWJsZV9zY2FuX3NpemU7CiBleHRlcm4gUEdETExJTVBPUlQg aW50IG1pbl9wYXJhbGxlbF9pbmRleF9zY2FuX3NpemU7CitleHRlcm4gUEdETExJTVBPUlQg Ym9vbCBlbmFibGVfZ3JvdXBfYnlfcmVvcmRlcmluZzsKIAogLyogSG9vayBmb3IgcGx1Z2lu cyB0byBnZXQgY29udHJvbCBpbiBzZXRfcmVsX3BhdGhsaXN0KCkgKi8KIHR5cGVkZWYgdm9p ZCAoKnNldF9yZWxfcGF0aGxpc3RfaG9va190eXBlKSAoUGxhbm5lckluZm8gKnJvb3QsCkBA IC0yMDMsNiArMjA0LDEyIEBAIHR5cGVkZWYgZW51bQogZXh0ZXJuIFBhdGhLZXlzQ29tcGFy aXNvbiBjb21wYXJlX3BhdGhrZXlzKExpc3QgKmtleXMxLCBMaXN0ICprZXlzMik7CiBleHRl cm4gYm9vbCBwYXRoa2V5c19jb250YWluZWRfaW4oTGlzdCAqa2V5czEsIExpc3QgKmtleXMy KTsKIGV4dGVybiBib29sIHBhdGhrZXlzX2NvdW50X2NvbnRhaW5lZF9pbihMaXN0ICprZXlz MSwgTGlzdCAqa2V5czIsIGludCAqbl9jb21tb24pOworZXh0ZXJuIGludCBncm91cF9rZXlz X3Jlb3JkZXJfYnlfcGF0aGtleXMoTGlzdCAqcGF0aGtleXMsCisJCQkJCQkJCQkJICBMaXN0 ICoqZ3JvdXBfcGF0aGtleXMsCisJCQkJCQkJCQkJICBMaXN0ICoqZ3JvdXBfY2xhdXNlcyk7 CitleHRlcm4gTGlzdCAqZ2V0X3VzZWZ1bF9ncm91cF9rZXlzX29yZGVyaW5ncyhQbGFubmVy SW5mbyAqcm9vdCwgZG91YmxlIG5yb3dzLAorCQkJCQkJCQkJCQkgTGlzdCAqcGF0aF9wYXRo a2V5cywKKwkJCQkJCQkJCQkJIExpc3QgKnBhdGhrZXlzLCBMaXN0ICpjbGF1c2VzKTsKIGV4 dGVybiBQYXRoICpnZXRfY2hlYXBlc3RfcGF0aF9mb3JfcGF0aGtleXMoTGlzdCAqcGF0aHMs IExpc3QgKnBhdGhrZXlzLAogCQkJCQkJCQkJCQlSZWxpZHMgcmVxdWlyZWRfb3V0ZXIsCiAJ CQkJCQkJCQkJCUNvc3RTZWxlY3RvciBjb3N0X2NyaXRlcmlvbiwKZGlmZiAtLWdpdCBhL3Ny Yy9pbmNsdWRlL3V0aWxzL3NlbGZ1bmNzLmggYi9zcmMvaW5jbHVkZS91dGlscy9zZWxmdW5j cy5oCmluZGV4IDhmM2Q3M2VkZmIyLi5jMzEzYTA4ZDU0MSAxMDA2NDQKLS0tIGEvc3JjL2lu Y2x1ZGUvdXRpbHMvc2VsZnVuY3MuaAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9zZWxmdW5j cy5oCkBAIC0yMTQsNiArMjE0LDExIEBAIGV4dGVybiBkb3VibGUgZXN0aW1hdGVfbnVtX2dy b3VwcyhQbGFubmVySW5mbyAqcm9vdCwgTGlzdCAqZ3JvdXBFeHBycywKIAkJCQkJCQkJICBk b3VibGUgaW5wdXRfcm93cywgTGlzdCAqKnBnc2V0LAogCQkJCQkJCQkgIEVzdGltYXRpb25J bmZvICplc3RpbmZvKTsKIAorZXh0ZXJuIGRvdWJsZSBlc3RpbWF0ZV9udW1fZ3JvdXBzX2lu Y3JlbWVudGFsKFBsYW5uZXJJbmZvICpyb290LCBMaXN0ICpncm91cEV4cHJzLAorCQkJCQlk b3VibGUgaW5wdXRfcm93cywgTGlzdCAqKnBnc2V0LAorCQkJCQlFc3RpbWF0aW9uSW5mbyAq ZXN0aW5mbywKKwkJCQkJTGlzdCAqKmNhY2hlX3ZhcmluZm9zLCBpbnQgcHJldk5FeHBycyk7 CisKIGV4dGVybiB2b2lkIGVzdGltYXRlX2hhc2hfYnVja2V0X3N0YXRzKFBsYW5uZXJJbmZv ICpyb290LAogCQkJCQkJCQkJICAgTm9kZSAqaGFzaGtleSwgZG91YmxlIG5idWNrZXRzLAog CQkJCQkJCQkJICAgU2VsZWN0aXZpdHkgKm1jdl9mcmVxLApkaWZmIC0tZ2l0IGEvc3JjL3Rl c3QvcmVncmVzcy9leHBlY3RlZC9hZ2dyZWdhdGVzLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3Mv ZXhwZWN0ZWQvYWdncmVnYXRlcy5vdXQKaW5kZXggMGEyM2EzOWFhMjkuLjYwMTA0N2ZhM2Rk IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2FnZ3JlZ2F0ZXMub3V0 CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvYWdncmVnYXRlcy5vdXQKQEAgLTEy MTAsNyArMTIxMCw4IEBAIGV4cGxhaW4gKGNvc3RzIG9mZikKICAgc2VsZWN0IGRpc3RpbmN0 IG1pbihmMSksIG1heChmMSkgZnJvbSBtaW5tYXh0ZXN0OwogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KLSBVbmlxdWUKKyBIYXNoQWdncmVnYXRlCisgICBHcm91cCBLZXk6ICQwLCAk MQogICAgSW5pdFBsYW4gMSAocmV0dXJucyAkMCkKICAgICAgLT4gIExpbWl0CiAgICAgICAg ICAgIC0+ICBNZXJnZSBBcHBlbmQKQEAgLTEyMzMsMTAgKzEyMzQsOCBAQCBleHBsYWluIChj b3N0cyBvZmYpCiAgICAgICAgICAgICAgICAgIC0+ICBJbmRleCBPbmx5IFNjYW4gdXNpbmcg bWlubWF4dGVzdDJpIG9uIG1pbm1heHRlc3QyIG1pbm1heHRlc3RfOAogICAgICAgICAgICAg ICAgICAgICAgICBJbmRleCBDb25kOiAoZjEgSVMgTk9UIE5VTEwpCiAgICAgICAgICAgICAg ICAgIC0+ICBJbmRleCBPbmx5IFNjYW4gQmFja3dhcmQgdXNpbmcgbWlubWF4dGVzdDNpIG9u IG1pbm1heHRlc3QzIG1pbm1heHRlc3RfOQotICAgLT4gIFNvcnQKLSAgICAgICAgIFNvcnQg S2V5OiAoJDApLCAoJDEpCi0gICAgICAgICAtPiAgUmVzdWx0Ci0oMjYgcm93cykKKyAgIC0+ ICBSZXN1bHQKKygyNSByb3dzKQogCiBzZWxlY3QgZGlzdGluY3QgbWluKGYxKSwgbWF4KGYx KSBmcm9tIG1pbm1heHRlc3Q7CiAgbWluIHwgbWF4IApAQCAtMjQ0OCw2ICsyNDQ3LDI0MSBA QCBTRUxFQ1QgYmFsayhodW5kcmVkKSBGUk9NIHRlbmsxOwogKDEgcm93KQogCiBST0xMQkFD SzsKKy0tIEdST1VQIEJZIG9wdGltaXphdGlvbiBieSByZW9yZGVyIGNvbHVtbnMKK1NFTEVD VAorCWkgQVMgaWQsCisJaS8yIEFTIHAsCisJZm9ybWF0KCclNjBzJywgaSUyKSBBUyB2LAor CWkvNCBBUyBjLAorCWkvOCBBUyBkLAorCShyYW5kb20oKSAqICgxMDAwMC84KSk6OmludCBh cyBlIC0tdGhlIHNhbWUgYXMgZCBidXQgbm8gY29ycmVsYXRpb24gd2l0aCBwCisJSU5UTyBi dGcKK0ZST00KKwlnZW5lcmF0ZV9zZXJpZXMoMSwgMTAwMDApIGk7CitWQUNVVU0gYnRnOwor QU5BTFlaRSBidGc7CistLSBHUk9VUCBCWSBvcHRpbWl6YXRpb24gYnkgcmVvcmRlciBjb2x1 bW5zIGJ5IGZyZXF1ZW5jeQorU0VUIGVuYWJsZV9oYXNoYWdnPW9mZjsKK1NFVCBtYXhfcGFy YWxsZWxfd29ya2Vycz0gMDsKK1NFVCBtYXhfcGFyYWxsZWxfd29ya2Vyc19wZXJfZ2F0aGVy ID0gMDsKK0VYUExBSU4gKENPU1RTIG9mZikKK1NFTEVDVCBjb3VudCgqKSBGUk9NIGJ0ZyBH Uk9VUCBCWSBwLCB2OworICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgR3JvdXBBZ2dyZWdhdGUKKyAgIEdyb3VwIEtleTog cCwgdgorICAgLT4gIFNvcnQKKyAgICAgICAgIFNvcnQgS2V5OiBwLCB2CisgICAgICAgICAt PiAgU2VxIFNjYW4gb24gYnRnCisoNSByb3dzKQorCitFWFBMQUlOIChDT1NUUyBvZmYpCitT RUxFQ1QgY291bnQoKikgRlJPTSBidGcgR1JPVVAgQlkgdiwgcDsKKyAgICAgICAgIFFVRVJZ IFBMQU4gICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEdyb3Vw QWdncmVnYXRlCisgICBHcm91cCBLZXk6IHAsIHYKKyAgIC0+ICBTb3J0CisgICAgICAgICBT b3J0IEtleTogcCwgdgorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGJ0ZworKDUgcm93cykK KworRVhQTEFJTiAoQ09TVFMgb2ZmKQorU0VMRUNUIGNvdW50KCopIEZST00gYnRnIEdST1VQ IEJZIHYsIHAsIGM7CisgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBHcm91cEFnZ3JlZ2F0ZQorICAgR3JvdXAgS2V5OiBw LCBjLCB2CisgICAtPiAgU29ydAorICAgICAgICAgU29ydCBLZXk6IHAsIGMsIHYKKyAgICAg ICAgIC0+ICBTZXEgU2NhbiBvbiBidGcKKyg1IHJvd3MpCisKK0VYUExBSU4gKENPU1RTIG9m ZikKK1NFTEVDVCBjb3VudCgqKSBGUk9NIGJ0ZyBHUk9VUCBCWSB2LCBwLCBjIE9SREVSIEJZ IHYsIHAsIGM7CisgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyBHcm91cEFnZ3JlZ2F0ZQorICAgR3JvdXAgS2V5OiB2LCBw LCBjCisgICAtPiAgU29ydAorICAgICAgICAgU29ydCBLZXk6IHYsIHAsIGMKKyAgICAgICAg IC0+ICBTZXEgU2NhbiBvbiBidGcKKyg1IHJvd3MpCisKK0VYUExBSU4gKENPU1RTIG9mZikK K1NFTEVDVCBjb3VudCgqKSBGUk9NIGJ0ZyBHUk9VUCBCWSB2LCBwLCBkLCBjOworICAgICAg ICAgIFFVRVJZIFBMQU4gICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyBHcm91cEFnZ3JlZ2F0ZQorICAgR3JvdXAgS2V5OiBwLCBkLCBjLCB2CisgICAtPiAg U29ydAorICAgICAgICAgU29ydCBLZXk6IHAsIGQsIGMsIHYKKyAgICAgICAgIC0+ICBTZXEg U2NhbiBvbiBidGcKKyg1IHJvd3MpCisKK0VYUExBSU4gKENPU1RTIG9mZikKK1NFTEVDVCBj b3VudCgqKSBGUk9NIGJ0ZyBHUk9VUCBCWSB2LCBwLCBkLCBjIE9SREVSIEJZIHYsIHAsIGQg LGM7CisgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIEdyb3VwQWdncmVnYXRlCisgICBHcm91cCBLZXk6IHYsIHAsIGQs IGMKKyAgIC0+ICBTb3J0CisgICAgICAgICBTb3J0IEtleTogdiwgcCwgZCwgYworICAgICAg ICAgLT4gIFNlcSBTY2FuIG9uIGJ0ZworKDUgcm93cykKKworRVhQTEFJTiAoQ09TVFMgb2Zm KQorU0VMRUNUIGNvdW50KCopIEZST00gYnRnIEdST1VQIEJZIHYsIHAsIGQsIGMgT1JERVIg QlkgcCwgdiwgZCAsYzsKKyAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgR3JvdXBBZ2dyZWdhdGUKKyAgIEdyb3VwIEtl eTogcCwgdiwgZCwgYworICAgLT4gIFNvcnQKKyAgICAgICAgIFNvcnQgS2V5OiBwLCB2LCBk LCBjCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gYnRnCisoNSByb3dzKQorCitFWFBMQUlO IChDT1NUUyBvZmYpCitTRUxFQ1QgY291bnQoKikgRlJPTSBidGcgR1JPVVAgQlkgcCwgZCwg ZTsKKyAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorIEdyb3VwQWdncmVnYXRlCisgICBHcm91cCBLZXk6IHAsIGQsIGUKKyAg IC0+ICBTb3J0CisgICAgICAgICBTb3J0IEtleTogcCwgZCwgZQorICAgICAgICAgLT4gIFNl cSBTY2FuIG9uIGJ0ZworKDUgcm93cykKKworRVhQTEFJTiAoQ09TVFMgb2ZmKQorU0VMRUNU IGNvdW50KCopIEZST00gYnRnIEdST1VQIEJZIHAsIGUsIGQ7CisgICAgICAgICBRVUVSWSBQ TEFOICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBHcm91cEFn Z3JlZ2F0ZQorICAgR3JvdXAgS2V5OiBwLCBlLCBkCisgICAtPiAgU29ydAorICAgICAgICAg U29ydCBLZXk6IHAsIGUsIGQKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBidGcKKyg1IHJv d3MpCisKK0NSRUFURSBTVEFUSVNUSUNTIGJ0Z19kZXAgT04gZCwgZSwgcCBGUk9NIGJ0ZzsK K0FOQUxZWkUgYnRnOworRVhQTEFJTiAoQ09TVFMgb2ZmKQorU0VMRUNUIGNvdW50KCopIEZS T00gYnRnIEdST1VQIEJZIHAsIGQsIGU7CisgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAg IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBHcm91cEFnZ3JlZ2F0ZQorICAg R3JvdXAgS2V5OiBwLCBkLCBlCisgICAtPiAgU29ydAorICAgICAgICAgU29ydCBLZXk6IHAs IGQsIGUKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBidGcKKyg1IHJvd3MpCisKK0VYUExB SU4gKENPU1RTIG9mZikKK1NFTEVDVCBjb3VudCgqKSBGUk9NIGJ0ZyBHUk9VUCBCWSBwLCBl LCBkOworICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgR3JvdXBBZ2dyZWdhdGUKKyAgIEdyb3VwIEtleTogcCwgZSwgZAor ICAgLT4gIFNvcnQKKyAgICAgICAgIFNvcnQgS2V5OiBwLCBlLCBkCisgICAgICAgICAtPiAg U2VxIFNjYW4gb24gYnRnCisoNSByb3dzKQorCistLSBHUk9VUCBCWSBvcHRpbWl6YXRpb24g YnkgcmVvcmRlciBjb2x1bW5zIGJ5IGluZGV4IHNjYW4KK0NSRUFURSBJTkRFWCBPTiBidGco cCwgdik7CitTRVQgZW5hYmxlX3NlcXNjYW49b2ZmOworU0VUIGVuYWJsZV9iaXRtYXBzY2Fu PW9mZjsKK1ZBQ1VVTSBidGc7CitFWFBMQUlOIChDT1NUUyBvZmYpCitTRUxFQ1QgY291bnQo KikgRlJPTSBidGcgR1JPVVAgQlkgcCwgdjsKKyAgICAgICAgICAgICAgICAgICBRVUVSWSBQ TEFOICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgR3JvdXBBZ2dyZWdhdGUKKyAgIEdyb3VwIEtleTogcCwg dgorICAgLT4gIEluZGV4IE9ubHkgU2NhbiB1c2luZyBidGdfcF92X2lkeCBvbiBidGcKKygz IHJvd3MpCisKK0VYUExBSU4gKENPU1RTIG9mZikKK1NFTEVDVCBjb3VudCgqKSBGUk9NIGJ0 ZyBHUk9VUCBCWSBwLCB2IE9SREVSIEJZIHAsIHY7CisgICAgICAgICAgICAgICAgICAgUVVF UlkgUExBTiAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEdyb3VwQWdncmVnYXRlCisgICBHcm91cCBLZXk6 IHAsIHYKKyAgIC0+ICBJbmRleCBPbmx5IFNjYW4gdXNpbmcgYnRnX3Bfdl9pZHggb24gYnRn CisoMyByb3dzKQorCitFWFBMQUlOIChDT1NUUyBvZmYpCitTRUxFQ1QgY291bnQoKikgRlJP TSBidGcgR1JPVVAgQlkgdiwgcDsKKyAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAg ICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgR3JvdXBBZ2dyZWdhdGUKKyAgIEdyb3VwIEtleTogcCwgdgorICAg LT4gIEluZGV4IE9ubHkgU2NhbiB1c2luZyBidGdfcF92X2lkeCBvbiBidGcKKygzIHJvd3Mp CisKK0VYUExBSU4gKENPU1RTIG9mZikKK1NFTEVDVCBjb3VudCgqKSBGUk9NIGJ0ZyBHUk9V UCBCWSB2LCBwIE9SREVSIEJZIHAsIHY7CisgICAgICAgICAgICAgICAgICAgUVVFUlkgUExB TiAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorIEdyb3VwQWdncmVnYXRlCisgICBHcm91cCBLZXk6IHAsIHYK KyAgIC0+ICBJbmRleCBPbmx5IFNjYW4gdXNpbmcgYnRnX3Bfdl9pZHggb24gYnRnCisoMyBy b3dzKQorCitFWFBMQUlOIChDT1NUUyBvZmYpCitTRUxFQ1QgY291bnQoKikgRlJPTSBidGcg R1JPVVAgQlkgdiwgcCwgYzsKKyAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAg ICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyBHcm91cEFnZ3JlZ2F0ZQorICAgR3JvdXAgS2V5OiBwLCBjLCB2Cisg ICAtPiAgSW5jcmVtZW50YWwgU29ydAorICAgICAgICAgU29ydCBLZXk6IHAsIGMsIHYKKyAg ICAgICAgIFByZXNvcnRlZCBLZXk6IHAKKyAgICAgICAgIC0+ICBJbmRleCBTY2FuIHVzaW5n IGJ0Z19wX3ZfaWR4IG9uIGJ0ZworKDYgcm93cykKKworRVhQTEFJTiAoQ09TVFMgb2ZmKQor U0VMRUNUIGNvdW50KCopIEZST00gYnRnIEdST1VQIEJZIHYsIHAsIGMgT1JERVIgQlkgcCwg djsKKyAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBH cm91cEFnZ3JlZ2F0ZQorICAgR3JvdXAgS2V5OiBwLCB2LCBjCisgICAtPiAgSW5jcmVtZW50 YWwgU29ydAorICAgICAgICAgU29ydCBLZXk6IHAsIHYsIGMKKyAgICAgICAgIFByZXNvcnRl ZCBLZXk6IHAsIHYKKyAgICAgICAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIGJ0Z19wX3ZfaWR4 IG9uIGJ0ZworKDYgcm93cykKKworRVhQTEFJTiAoQ09TVFMgb2ZmKQorU0VMRUNUIGNvdW50 KCopIEZST00gYnRnIEdST1VQIEJZIHYsIGMsIHAsIGQ7CisgICAgICAgICAgICAgICAgICAg UVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgR3JvdXBBZ2dyZWdhdGUKKyAgIEdyb3Vw IEtleTogcCwgYywgZCwgdgorICAgLT4gIEluY3JlbWVudGFsIFNvcnQKKyAgICAgICAgIFNv cnQgS2V5OiBwLCBjLCBkLCB2CisgICAgICAgICBQcmVzb3J0ZWQgS2V5OiBwCisgICAgICAg ICAtPiAgSW5kZXggU2NhbiB1c2luZyBidGdfcF92X2lkeCBvbiBidGcKKyg2IHJvd3MpCisK K0VYUExBSU4gKENPU1RTIG9mZikKK1NFTEVDVCBjb3VudCgqKSBGUk9NIGJ0ZyBHUk9VUCBC WSB2LCBjLCBwLCBkIE9SREVSIEJZIHAsIHY7CisgICAgICAgICAgICAgICAgICAgUVVFUlkg UExBTiAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgR3JvdXBBZ2dyZWdhdGUKKyAgIEdyb3VwIEtleTog cCwgdiwgYywgZAorICAgLT4gIEluY3JlbWVudGFsIFNvcnQKKyAgICAgICAgIFNvcnQgS2V5 OiBwLCB2LCBjLCBkCisgICAgICAgICBQcmVzb3J0ZWQgS2V5OiBwLCB2CisgICAgICAgICAt PiAgSW5kZXggU2NhbiB1c2luZyBidGdfcF92X2lkeCBvbiBidGcKKyg2IHJvd3MpCisKK0RS T1AgVEFCTEUgYnRnOworUkVTRVQgZW5hYmxlX2hhc2hhZ2c7CitSRVNFVCBtYXhfcGFyYWxs ZWxfd29ya2VyczsKK1JFU0VUIG1heF9wYXJhbGxlbF93b3JrZXJzX3Blcl9nYXRoZXI7CitS RVNFVCBlbmFibGVfc2Vxc2NhbjsKK1JFU0VUIGVuYWJsZV9iaXRtYXBzY2FuOwogLS0gU2Vj b25kbHkgdGVzdCB0aGUgY2FzZSBvZiBhIHBhcmFsbGVsIGFnZ3JlZ2F0ZSBjb21iaW5lciBm dW5jdGlvbgogLS0gcmV0dXJuaW5nIE5VTEwuIEZvciB0aGF0IHVzZSBub3JtYWwgdHJhbnNp dGlvbiBmdW5jdGlvbiwgYnV0IGEKIC0tIGNvbWJpbmVyIGZ1bmN0aW9uIHJldHVybmluZyBO VUxMLgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9pbmNyZW1lbnRh bF9zb3J0Lm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvaW5jcmVtZW50YWxfc29y dC5vdXQKaW5kZXggNTQ1ZTMwMWU0ODIuLjIxYzQyOTIyNmY3IDEwMDY0NAotLS0gYS9zcmMv dGVzdC9yZWdyZXNzL2V4cGVjdGVkL2luY3JlbWVudGFsX3NvcnQub3V0CisrKyBiL3NyYy90 ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvaW5jcmVtZW50YWxfc29ydC5vdXQKQEAgLTE0MzksNyAr MTQzOSw3IEBAIHNldCBwYXJhbGxlbF9zZXR1cF9jb3N0ID0gMDsKIHNldCBwYXJhbGxlbF90 dXBsZV9jb3N0ID0gMDsKIHNldCBtYXhfcGFyYWxsZWxfd29ya2Vyc19wZXJfZ2F0aGVyID0g MjsKIGNyZWF0ZSB0YWJsZSB0IChhIGludCwgYiBpbnQsIGMgaW50KTsKLWluc2VydCBpbnRv IHQgc2VsZWN0IG1vZChpLDEwKSxtb2QoaSwxMCksaSBmcm9tIGdlbmVyYXRlX3Nlcmllcygx LDEwMDAwKSBzKGkpOworaW5zZXJ0IGludG8gdCBzZWxlY3QgbW9kKGksMTApLG1vZChpLDEw KSxpIGZyb20gZ2VuZXJhdGVfc2VyaWVzKDEsNjAwMDApIHMoaSk7CiBjcmVhdGUgaW5kZXgg b24gdCAoYSk7CiBhbmFseXplIHQ7CiBzZXQgZW5hYmxlX2luY3JlbWVudGFsX3NvcnQgPSBv ZmY7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pvaW4ub3V0IGIv c3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9qb2luLm91dAppbmRleCAxOWNhZWJhYmQwMS4u YmYxYTJkYjJjZjAgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvam9p bi5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9qb2luLm91dApAQCAtMTk4 NCw4ICsxOTg0LDggQEAgVVNJTkcgKG5hbWUpOwogLS0tLS0tKy0tLS0rLS0tLQogIGJiICAg fCAxMiB8IDEzCiAgY2MgICB8IDIyIHwgMjMKLSBkZCAgIHwgICAgfCAzMwogIGVlICAgfCA0 MiB8ICAgCisgZGQgICB8ICAgIHwgMzMKICg0IHJvd3MpCiAKIC0tIENhc2VzIHdpdGggbm9u LW51bGxhYmxlIGV4cHJlc3Npb25zIGluIHN1YnF1ZXJ5IHJlc3VsdHM7CkBAIC0yMDE5LDgg KzIwMTksOCBAQCBOQVRVUkFMIEZVTEwgSk9JTgogLS0tLS0tKy0tLS0tLSstLS0tLS0rLS0t LS0tKy0tLS0tLQogIGJiICAgfCAgIDEyIHwgICAgMiB8ICAgMTMgfCAgICAzCiAgY2MgICB8 ICAgMjIgfCAgICAyIHwgICAyMyB8ICAgIDMKLSBkZCAgIHwgICAgICB8ICAgICAgfCAgIDMz IHwgICAgMwogIGVlICAgfCAgIDQyIHwgICAgMiB8ICAgICAgfCAgICAgCisgZGQgICB8ICAg ICAgfCAgICAgIHwgICAzMyB8ICAgIDMKICg0IHJvd3MpCiAKIFNFTEVDVCAqIEZST00KQEAg LTQ2MTgsMTggKzQ2MTgsMjAgQEAgc2VsZWN0IGQuKiBmcm9tIGQgbGVmdCBqb2luIChzZWxl Y3QgKiBmcm9tIGIgZ3JvdXAgYnkgYi5pZCwgYi5jX2lkKSBzCiBleHBsYWluIChjb3N0cyBv ZmYpCiBzZWxlY3QgZC4qIGZyb20gZCBsZWZ0IGpvaW4gKHNlbGVjdCBkaXN0aW5jdCAqIGZy b20gYikgcwogICBvbiBkLmEgPSBzLmlkOwotICAgICAgICAgICAgICBRVUVSWSBQTEFOICAg ICAgICAgICAgICAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0g TWVyZ2UgUmlnaHQgSm9pbgotICAgTWVyZ2UgQ29uZDogKGIuaWQgPSBkLmEpCi0gICAtPiAg VW5pcXVlCi0gICAgICAgICAtPiAgU29ydAotICAgICAgICAgICAgICAgU29ydCBLZXk6IGIu aWQsIGIuY19pZAotICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGIKKyAgICAgICAg ICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTWVyZ2UgTGVmdCBKb2luCisgICBN ZXJnZSBDb25kOiAoZC5hID0gcy5pZCkKICAgIC0+ICBTb3J0CiAgICAgICAgICBTb3J0IEtl eTogZC5hCiAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gZAotKDkgcm93cykKKyAgIC0+ICBT b3J0CisgICAgICAgICBTb3J0IEtleTogcy5pZAorICAgICAgICAgLT4gIFN1YnF1ZXJ5IFNj YW4gb24gcworICAgICAgICAgICAgICAgLT4gIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAg ICAgICAgICAgIEdyb3VwIEtleTogYi5pZCwgYi5jX2lkCisgICAgICAgICAgICAgICAgICAg ICAtPiAgU2VxIFNjYW4gb24gYgorKDExIHJvd3MpCiAKIC0tIGNoZWNrIGpvaW4gcmVtb3Zh bCB3b3JrcyB3aGVuIHVuaXF1ZW5lc3Mgb2YgdGhlIGpvaW4gY29uZGl0aW9uIGlzIGVuZm9y Y2VkCiAtLSBieSBhIFVOSU9OCkBAIC02MzM2LDQ0ICs2MzM4LDM5IEBAIHNlbGVjdCAqIGZy b20gajEgbmF0dXJhbCBqb2luIGoyOwogZXhwbGFpbiAodmVyYm9zZSwgY29zdHMgb2ZmKQog c2VsZWN0ICogZnJvbSBqMQogaW5uZXIgam9pbiAoc2VsZWN0IGRpc3RpbmN0IGlkIGZyb20g ajMpIGozIG9uIGoxLmlkID0gajMuaWQ7Ci0gICAgICAgICAgICAgICBRVUVSWSBQTEFOICAg ICAgICAgICAgICAgIAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIE5lc3RlZCBMb29wCiAgICBPdXRwdXQ6IGoxLmlk LCBqMy5pZAogICAgSW5uZXIgVW5pcXVlOiB0cnVlCiAgICBKb2luIEZpbHRlcjogKGoxLmlk ID0gajMuaWQpCi0gICAtPiAgVW5pcXVlCisgICAtPiAgSGFzaEFnZ3JlZ2F0ZQogICAgICAg ICAgT3V0cHV0OiBqMy5pZAotICAgICAgICAgLT4gIFNvcnQKKyAgICAgICAgIEdyb3VwIEtl eTogajMuaWQKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuajMKICAgICAgICAg ICAgICAgIE91dHB1dDogajMuaWQKLSAgICAgICAgICAgICAgIFNvcnQgS2V5OiBqMy5pZAot ICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5qMwotICAgICAgICAgICAg ICAgICAgICAgT3V0cHV0OiBqMy5pZAogICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5qMQog ICAgICAgICAgT3V0cHV0OiBqMS5pZAotKDEzIHJvd3MpCisoMTEgcm93cykKIAogLS0gZW5z dXJlIGdyb3VwIGJ5IGNsYXVzZSBhbGxvd3MgdGhlIGlubmVyIHRvIGJlY29tZSB1bmlxdWUK IGV4cGxhaW4gKHZlcmJvc2UsIGNvc3RzIG9mZikKIHNlbGVjdCAqIGZyb20gajEKIGlubmVy IGpvaW4gKHNlbGVjdCBpZCBmcm9tIGozIGdyb3VwIGJ5IGlkKSBqMyBvbiBqMS5pZCA9IGoz LmlkOwotICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAKLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICBRVUVS WSBQTEFOICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KICBOZXN0ZWQgTG9vcAogICAgT3V0cHV0OiBqMS5pZCwgajMuaWQKICAgIElubmVyIFVu aXF1ZTogdHJ1ZQogICAgSm9pbiBGaWx0ZXI6IChqMS5pZCA9IGozLmlkKQotICAgLT4gIEdy b3VwCisgICAtPiAgSGFzaEFnZ3JlZ2F0ZQogICAgICAgICAgT3V0cHV0OiBqMy5pZAogICAg ICAgICAgR3JvdXAgS2V5OiBqMy5pZAotICAgICAgICAgLT4gIFNvcnQKKyAgICAgICAgIC0+ ICBTZXEgU2NhbiBvbiBwdWJsaWMuajMKICAgICAgICAgICAgICAgIE91dHB1dDogajMuaWQK LSAgICAgICAgICAgICAgIFNvcnQgS2V5OiBqMy5pZAotICAgICAgICAgICAgICAgLT4gIFNl cSBTY2FuIG9uIHB1YmxpYy5qMwotICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiBqMy5p ZAogICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5qMQogICAgICAgICAgT3V0cHV0OiBqMS5p ZAotKDE0IHJvd3MpCisoMTEgcm93cykKIAogZHJvcCB0YWJsZSBqMTsKIGRyb3AgdGFibGUg ajI7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BhcnRpdGlvbl9h Z2dyZWdhdGUub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wYXJ0aXRpb25fYWdn cmVnYXRlLm91dAppbmRleCBkZmE0YjAzNmI1Mi4uYTA4YTM4MjVmZjYgMTAwNjQ0Ci0tLSBh L3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcGFydGl0aW9uX2FnZ3JlZ2F0ZS5vdXQKKysr IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wYXJ0aXRpb25fYWdncmVnYXRlLm91dApA QCAtOTUyLDMyICs5NTIsMzAgQEAgU0VMRUNUIGEsIHN1bShiKSwgYXJyYXlfYWdnKGRpc3Rp bmN0IGMpLCBjb3VudCgqKSBGUk9NIHBhZ2dfdGFiX21sIEdST1VQIEJZIGEgSEEKIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgU29ydAogICAgU29ydCBLZXk6IHBhZ2df dGFiX21sLmEsIChzdW0ocGFnZ190YWJfbWwuYikpLCAoYXJyYXlfYWdnKERJU1RJTkNUIHBh Z2dfdGFiX21sLmMpKQotICAgLT4gIEdhdGhlcgotICAgICAgICAgV29ya2VycyBQbGFubmVk OiAyCi0gICAgICAgICAtPiAgUGFyYWxsZWwgQXBwZW5kCi0gICAgICAgICAgICAgICAtPiAg R3JvdXBBZ2dyZWdhdGUKLSAgICAgICAgICAgICAgICAgICAgIEdyb3VwIEtleTogcGFnZ190 YWJfbWwuYQotICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAoYXZnKHBhZ2dfdGFiX21s LmIpIDwgJzMnOjpudW1lcmljKQotICAgICAgICAgICAgICAgICAgICAgLT4gIFNvcnQKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgIFNvcnQgS2V5OiBwYWdnX3RhYl9tbC5hCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcGFnZ190YWJfbWxfcDEg cGFnZ190YWJfbWwKLSAgICAgICAgICAgICAgIC0+ICBHcm91cEFnZ3JlZ2F0ZQotICAgICAg ICAgICAgICAgICAgICAgR3JvdXAgS2V5OiBwYWdnX3RhYl9tbF81LmEKLSAgICAgICAgICAg ICAgICAgICAgIEZpbHRlcjogKGF2ZyhwYWdnX3RhYl9tbF81LmIpIDwgJzMnOjpudW1lcmlj KQotICAgICAgICAgICAgICAgICAgICAgLT4gIFNvcnQKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgIFNvcnQgS2V5OiBwYWdnX3RhYl9tbF81LmEKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgIC0+ICBBcHBlbmQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ ICBTZXEgU2NhbiBvbiBwYWdnX3RhYl9tbF9wM19zMSBwYWdnX3RhYl9tbF81Ci0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcGFnZ190YWJfbWxf cDNfczIgcGFnZ190YWJfbWxfNgotICAgICAgICAgICAgICAgLT4gIEdyb3VwQWdncmVnYXRl Ci0gICAgICAgICAgICAgICAgICAgICBHcm91cCBLZXk6IHBhZ2dfdGFiX21sXzIuYQotICAg ICAgICAgICAgICAgICAgICAgRmlsdGVyOiAoYXZnKHBhZ2dfdGFiX21sXzIuYikgPCAnMyc6 Om51bWVyaWMpCi0gICAgICAgICAgICAgICAgICAgICAtPiAgU29ydAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgU29ydCBLZXk6IHBhZ2dfdGFiX21sXzIuYQotICAgICAgICAgICAg ICAgICAgICAgICAgICAgLT4gIEFwcGVuZAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLT4gIFNlcSBTY2FuIG9uIHBhZ2dfdGFiX21sX3AyX3MxIHBhZ2dfdGFiX21sXzIK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwYWdn X3RhYl9tbF9wMl9zMiBwYWdnX3RhYl9tbF8zCi0oMjcgcm93cykKKyAgIC0+ICBBcHBlbmQK KyAgICAgICAgIC0+ICBHcm91cEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAgR3JvdXAgS2V5 OiBwYWdnX3RhYl9tbC5hCisgICAgICAgICAgICAgICBGaWx0ZXI6IChhdmcocGFnZ190YWJf bWwuYikgPCAnMyc6Om51bWVyaWMpCisgICAgICAgICAgICAgICAtPiAgU29ydAorICAgICAg ICAgICAgICAgICAgICAgU29ydCBLZXk6IHBhZ2dfdGFiX21sLmEKKyAgICAgICAgICAgICAg ICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwYWdnX3RhYl9tbF9wMSBwYWdnX3RhYl9tbAorICAg ICAgICAgLT4gIEdyb3VwQWdncmVnYXRlCisgICAgICAgICAgICAgICBHcm91cCBLZXk6IHBh Z2dfdGFiX21sXzIuYQorICAgICAgICAgICAgICAgRmlsdGVyOiAoYXZnKHBhZ2dfdGFiX21s XzIuYikgPCAnMyc6Om51bWVyaWMpCisgICAgICAgICAgICAgICAtPiAgU29ydAorICAgICAg ICAgICAgICAgICAgICAgU29ydCBLZXk6IHBhZ2dfdGFiX21sXzIuYQorICAgICAgICAgICAg ICAgICAgICAgLT4gIEFwcGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNl cSBTY2FuIG9uIHBhZ2dfdGFiX21sX3AyX3MxIHBhZ2dfdGFiX21sXzIKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwYWdnX3RhYl9tbF9wMl9zMiBwYWdn X3RhYl9tbF8zCisgICAgICAgICAtPiAgR3JvdXBBZ2dyZWdhdGUKKyAgICAgICAgICAgICAg IEdyb3VwIEtleTogcGFnZ190YWJfbWxfNS5hCisgICAgICAgICAgICAgICBGaWx0ZXI6IChh dmcocGFnZ190YWJfbWxfNS5iKSA8ICczJzo6bnVtZXJpYykKKyAgICAgICAgICAgICAgIC0+ ICBTb3J0CisgICAgICAgICAgICAgICAgICAgICBTb3J0IEtleTogcGFnZ190YWJfbWxfNS5h CisgICAgICAgICAgICAgICAgICAgICAtPiAgQXBwZW5kCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAtPiAgU2VxIFNjYW4gb24gcGFnZ190YWJfbWxfcDNfczEgcGFnZ190YWJfbWxf NQorICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHBhZ2dfdGFi X21sX3AzX3MyIHBhZ2dfdGFiX21sXzYKKygyNSByb3dzKQogCiBTRUxFQ1QgYSwgc3VtKGIp LCBhcnJheV9hZ2coZGlzdGluY3QgYyksIGNvdW50KCopIEZST00gcGFnZ190YWJfbWwgR1JP VVAgQlkgYSBIQVZJTkcgYXZnKGIpIDwgMyBPUkRFUiBCWSAxLCAyLCAzOwogIGEgIHwgc3Vt ICB8ICBhcnJheV9hZ2cgIHwgY291bnQgCkBAIC05OTYsMzQgKzk5NCwzMiBAQCBTRUxFQ1Qg YSwgc3VtKGIpLCBhcnJheV9hZ2coZGlzdGluY3QgYyksIGNvdW50KCopIEZST00gcGFnZ190 YWJfbWwgR1JPVVAgQlkgYSBIQQogLS0gV2l0aG91dCBPUkRFUiBCWSBjbGF1c2UsIHRvIHRl c3QgR2F0aGVyIGF0IHRvcC1tb3N0IHBhdGgKIEVYUExBSU4gKENPU1RTIE9GRikKIFNFTEVD VCBhLCBzdW0oYiksIGFycmF5X2FnZyhkaXN0aW5jdCBjKSwgY291bnQoKikgRlJPTSBwYWdn X3RhYl9tbCBHUk9VUCBCWSBhIEhBVklORyBhdmcoYikgPCAzOwotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSBHYXRoZXIKLSAgIFdvcmtlcnMgUGxh bm5lZDogMgotICAgLT4gIFBhcmFsbGVsIEFwcGVuZAotICAgICAgICAgLT4gIEdyb3VwQWdn cmVnYXRlCi0gICAgICAgICAgICAgICBHcm91cCBLZXk6IHBhZ2dfdGFiX21sLmEKLSAgICAg ICAgICAgICAgIEZpbHRlcjogKGF2ZyhwYWdnX3RhYl9tbC5iKSA8ICczJzo6bnVtZXJpYykK LSAgICAgICAgICAgICAgIC0+ICBTb3J0Ci0gICAgICAgICAgICAgICAgICAgICBTb3J0IEtl eTogcGFnZ190YWJfbWwuYQotICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9u IHBhZ2dfdGFiX21sX3AxIHBhZ2dfdGFiX21sCi0gICAgICAgICAtPiAgR3JvdXBBZ2dyZWdh dGUKLSAgICAgICAgICAgICAgIEdyb3VwIEtleTogcGFnZ190YWJfbWxfNS5hCi0gICAgICAg ICAgICAgICBGaWx0ZXI6IChhdmcocGFnZ190YWJfbWxfNS5iKSA8ICczJzo6bnVtZXJpYykK LSAgICAgICAgICAgICAgIC0+ICBTb3J0Ci0gICAgICAgICAgICAgICAgICAgICBTb3J0IEtl eTogcGFnZ190YWJfbWxfNS5hCi0gICAgICAgICAgICAgICAgICAgICAtPiAgQXBwZW5kCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcGFnZ190YWJfbWxf cDNfczEgcGFnZ190YWJfbWxfNQotICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNl cSBTY2FuIG9uIHBhZ2dfdGFiX21sX3AzX3MyIHBhZ2dfdGFiX21sXzYKLSAgICAgICAgIC0+ ICBHcm91cEFnZ3JlZ2F0ZQotICAgICAgICAgICAgICAgR3JvdXAgS2V5OiBwYWdnX3RhYl9t bF8yLmEKLSAgICAgICAgICAgICAgIEZpbHRlcjogKGF2ZyhwYWdnX3RhYl9tbF8yLmIpIDwg JzMnOjpudW1lcmljKQotICAgICAgICAgICAgICAgLT4gIFNvcnQKLSAgICAgICAgICAgICAg ICAgICAgIFNvcnQgS2V5OiBwYWdnX3RhYl9tbF8yLmEKLSAgICAgICAgICAgICAgICAgICAg IC0+ICBBcHBlbmQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBv biBwYWdnX3RhYl9tbF9wMl9zMSBwYWdnX3RhYl9tbF8yCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAtPiAgU2VxIFNjYW4gb24gcGFnZ190YWJfbWxfcDJfczIgcGFnZ190YWJfbWxf MwotKDI1IHJvd3MpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEFwcGVu ZAorICAgLT4gIEdyb3VwQWdncmVnYXRlCisgICAgICAgICBHcm91cCBLZXk6IHBhZ2dfdGFi X21sLmEKKyAgICAgICAgIEZpbHRlcjogKGF2ZyhwYWdnX3RhYl9tbC5iKSA8ICczJzo6bnVt ZXJpYykKKyAgICAgICAgIC0+ICBTb3J0CisgICAgICAgICAgICAgICBTb3J0IEtleTogcGFn Z190YWJfbWwuYQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHBhZ2dfdGFiX21s X3AxIHBhZ2dfdGFiX21sCisgICAtPiAgR3JvdXBBZ2dyZWdhdGUKKyAgICAgICAgIEdyb3Vw IEtleTogcGFnZ190YWJfbWxfMi5hCisgICAgICAgICBGaWx0ZXI6IChhdmcocGFnZ190YWJf bWxfMi5iKSA8ICczJzo6bnVtZXJpYykKKyAgICAgICAgIC0+ICBTb3J0CisgICAgICAgICAg ICAgICBTb3J0IEtleTogcGFnZ190YWJfbWxfMi5hCisgICAgICAgICAgICAgICAtPiAgQXBw ZW5kCisgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcGFnZ190YWJfbWxf cDJfczEgcGFnZ190YWJfbWxfMgorICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2Fu IG9uIHBhZ2dfdGFiX21sX3AyX3MyIHBhZ2dfdGFiX21sXzMKKyAgIC0+ICBHcm91cEFnZ3Jl Z2F0ZQorICAgICAgICAgR3JvdXAgS2V5OiBwYWdnX3RhYl9tbF81LmEKKyAgICAgICAgIEZp bHRlcjogKGF2ZyhwYWdnX3RhYl9tbF81LmIpIDwgJzMnOjpudW1lcmljKQorICAgICAgICAg LT4gIFNvcnQKKyAgICAgICAgICAgICAgIFNvcnQgS2V5OiBwYWdnX3RhYl9tbF81LmEKKyAg ICAgICAgICAgICAgIC0+ICBBcHBlbmQKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEg U2NhbiBvbiBwYWdnX3RhYl9tbF9wM19zMSBwYWdnX3RhYl9tbF81CisgICAgICAgICAgICAg ICAgICAgICAtPiAgU2VxIFNjYW4gb24gcGFnZ190YWJfbWxfcDNfczIgcGFnZ190YWJfbWxf NgorKDIzIHJvd3MpCiAKIC0tIEZ1bGwgYWdncmVnYXRpb24gYXQgbGV2ZWwgMSBhcyBHUk9V UCBCWSBjbGF1c2UgbWF0Y2hlcyB3aXRoIFBBUlRJVElPTiBLRVkKIC0tIGZvciBsZXZlbCAx IG9ubHkuIEZvciBzdWJwYXJ0aXRpb25zLCBHUk9VUCBCWSBjbGF1c2UgZG9lcyBub3QgbWF0 Y2ggd2l0aApAQCAtMTM3OSwyOCArMTM3NSwyNiBAQCBTRUxFQ1QgeCwgc3VtKHkpLCBhdmco eSksIGNvdW50KCopIEZST00gcGFnZ190YWJfcGFyYSBHUk9VUCBCWSB4IEhBVklORyBhdmco eSkgPAogLS0gV2hlbiBHUk9VUCBCWSBjbGF1c2UgZG9lcyBub3QgbWF0Y2g7IHBhcnRpYWwg YWdncmVnYXRpb24gaXMgcGVyZm9ybWVkIGZvciBlYWNoIHBhcnRpdGlvbi4KIEVYUExBSU4g KENPU1RTIE9GRikKIFNFTEVDVCB5LCBzdW0oeCksIGF2Zyh4KSwgY291bnQoKikgRlJPTSBw YWdnX3RhYl9wYXJhIEdST1VQIEJZIHkgSEFWSU5HIGF2Zyh4KSA8IDEyIE9SREVSIEJZIDEs IDIsIDM7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkg UExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgU29ydAogICAg U29ydCBLZXk6IHBhZ2dfdGFiX3BhcmEueSwgKHN1bShwYWdnX3RhYl9wYXJhLngpKSwgKGF2 ZyhwYWdnX3RhYl9wYXJhLngpKQotICAgLT4gIEZpbmFsaXplIEdyb3VwQWdncmVnYXRlCisg ICAtPiAgRmluYWxpemUgSGFzaEFnZ3JlZ2F0ZQogICAgICAgICAgR3JvdXAgS2V5OiBwYWdn X3RhYl9wYXJhLnkKICAgICAgICAgIEZpbHRlcjogKGF2ZyhwYWdnX3RhYl9wYXJhLngpIDwg JzEyJzo6bnVtZXJpYykKLSAgICAgICAgIC0+ICBHYXRoZXIgTWVyZ2UKKyAgICAgICAgIC0+ ICBHYXRoZXIKICAgICAgICAgICAgICAgIFdvcmtlcnMgUGxhbm5lZDogMgotICAgICAgICAg ICAgICAgLT4gIFNvcnQKLSAgICAgICAgICAgICAgICAgICAgIFNvcnQgS2V5OiBwYWdnX3Rh Yl9wYXJhLnkKLSAgICAgICAgICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBBcHBlbmQKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBQYXJ0aWFsIEhhc2hBZ2dyZWdhdGUKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyb3VwIEtleTogcGFnZ190YWJfcGFy YS55Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgUGFyYWxsZWwgU2Vx IFNjYW4gb24gcGFnZ190YWJfcGFyYV9wMSBwYWdnX3RhYl9wYXJhCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAtPiAgUGFydGlhbCBIYXNoQWdncmVnYXRlCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBHcm91cCBLZXk6IHBhZ2dfdGFiX3BhcmFfMS55Ci0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgUGFyYWxsZWwgU2VxIFNjYW4gb24g cGFnZ190YWJfcGFyYV9wMiBwYWdnX3RhYl9wYXJhXzEKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgIC0+ICBQYXJ0aWFsIEhhc2hBZ2dyZWdhdGUKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEdyb3VwIEtleTogcGFnZ190YWJfcGFyYV8yLnkKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBTZXEgU2NhbiBvbiBwYWdnX3Rh Yl9wYXJhX3AzIHBhZ2dfdGFiX3BhcmFfMgotKDE5IHJvd3MpCisgICAgICAgICAgICAgICAt PiAgUGFyYWxsZWwgQXBwZW5kCisgICAgICAgICAgICAgICAgICAgICAtPiAgUGFydGlhbCBI YXNoQWdncmVnYXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICBHcm91cCBLZXk6IHBh Z2dfdGFiX3BhcmEueQorICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFBhcmFsbGVs IFNlcSBTY2FuIG9uIHBhZ2dfdGFiX3BhcmFfcDEgcGFnZ190YWJfcGFyYQorICAgICAgICAg ICAgICAgICAgICAgLT4gIFBhcnRpYWwgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgR3JvdXAgS2V5OiBwYWdnX3RhYl9wYXJhXzEueQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgLT4gIFBhcmFsbGVsIFNlcSBTY2FuIG9uIHBhZ2dfdGFiX3BhcmFf cDIgcGFnZ190YWJfcGFyYV8xCisgICAgICAgICAgICAgICAgICAgICAtPiAgUGFydGlhbCBI YXNoQWdncmVnYXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICBHcm91cCBLZXk6IHBh Z2dfdGFiX3BhcmFfMi55CisgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgUGFyYWxs ZWwgU2VxIFNjYW4gb24gcGFnZ190YWJfcGFyYV9wMyBwYWdnX3RhYl9wYXJhXzIKKygxNyBy b3dzKQogCiBTRUxFQ1QgeSwgc3VtKHgpLCBhdmcoeCksIGNvdW50KCopIEZST00gcGFnZ190 YWJfcGFyYSBHUk9VUCBCWSB5IEhBVklORyBhdmcoeCkgPCAxMiBPUkRFUiBCWSAxLCAyLCAz OwogIHkgIHwgIHN1bSAgfCAgICAgICAgIGF2ZyAgICAgICAgIHwgY291bnQgCmRpZmYgLS1n aXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BhcnRpdGlvbl9qb2luLm91dCBiL3Ny Yy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcGFydGl0aW9uX2pvaW4ub3V0CmluZGV4IGJiNWI3 YzQ3YTQ1Li4wMzkyNmE4NDEzOCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBl Y3RlZC9wYXJ0aXRpb25fam9pbi5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3Rl ZC9wYXJ0aXRpb25fam9pbi5vdXQKQEAgLTQ2Niw1MiArNDY2LDQxIEBAIEVYUExBSU4gKENP U1RTIE9GRikKIFNFTEVDVCBhLCBiIEZST00gcHJ0MSBGVUxMIEpPSU4gcHJ0MiBwMihiLGEs YykgVVNJTkcoYSxiKQogICBXSEVSRSBhIEJFVFdFRU4gNDkwIEFORCA1MTAKICAgR1JPVVAg QlkgMSwgMiBPUkRFUiBCWSAxLCAyOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICBHcm91cAogICAgR3Jv dXAgS2V5OiAoQ09BTEVTQ0UocHJ0MS5hLCBwMi5hKSksIChDT0FMRVNDRShwcnQxLmIsIHAy LmIpKQotICAgLT4gIE1lcmdlIEFwcGVuZAorICAgLT4gIFNvcnQKICAgICAgICAgIFNvcnQg S2V5OiAoQ09BTEVTQ0UocHJ0MS5hLCBwMi5hKSksIChDT0FMRVNDRShwcnQxLmIsIHAyLmIp KQotICAgICAgICAgLT4gIEdyb3VwCi0gICAgICAgICAgICAgICBHcm91cCBLZXk6IChDT0FM RVNDRShwcnQxLmEsIHAyLmEpKSwgKENPQUxFU0NFKHBydDEuYiwgcDIuYikpCi0gICAgICAg ICAgICAgICAtPiAgU29ydAotICAgICAgICAgICAgICAgICAgICAgU29ydCBLZXk6IChDT0FM RVNDRShwcnQxLmEsIHAyLmEpKSwgKENPQUxFU0NFKHBydDEuYiwgcDIuYikpCi0gICAgICAg ICAgICAgICAgICAgICAtPiAgTWVyZ2UgRnVsbCBKb2luCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICBNZXJnZSBDb25kOiAoKHBydDEuYSA9IHAyLmEpIEFORCAocHJ0MS5iID0gcDIu YikpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICgoQ09BTEVTQ0UocHJ0 MS5hLCBwMi5hKSA+PSA0OTApIEFORCAoQ09BTEVTQ0UocHJ0MS5hLCBwMi5hKSA8PSA1MTAp KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNvcnQKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFNvcnQgS2V5OiBwcnQxLmEsIHBydDEuYgotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHBydDFfcDEgcHJ0MQot ICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNvcnQKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFNvcnQgS2V5OiBwMi5hLCBwMi5iCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHJ0Ml9wMSBwMgotICAgICAgICAg LT4gIEdyb3VwCi0gICAgICAgICAgICAgICBHcm91cCBLZXk6IChDT0FMRVNDRShwcnQxXzEu YSwgcDJfMS5hKSksIChDT0FMRVNDRShwcnQxXzEuYiwgcDJfMS5iKSkKLSAgICAgICAgICAg ICAgIC0+ICBTb3J0Ci0gICAgICAgICAgICAgICAgICAgICBTb3J0IEtleTogKENPQUxFU0NF KHBydDFfMS5hLCBwMl8xLmEpKSwgKENPQUxFU0NFKHBydDFfMS5iLCBwMl8xLmIpKQotICAg ICAgICAgICAgICAgICAgICAgLT4gIE1lcmdlIEZ1bGwgSm9pbgotICAgICAgICAgICAgICAg ICAgICAgICAgICAgTWVyZ2UgQ29uZDogKChwcnQxXzEuYSA9IHAyXzEuYSkgQU5EIChwcnQx XzEuYiA9IHAyXzEuYikpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICgo Q09BTEVTQ0UocHJ0MV8xLmEsIHAyXzEuYSkgPj0gNDkwKSBBTkQgKENPQUxFU0NFKHBydDFf MS5hLCBwMl8xLmEpIDw9IDUxMCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAg U29ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU29ydCBLZXk6IHBydDFf MS5hLCBwcnQxXzEuYgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNl cSBTY2FuIG9uIHBydDFfcDIgcHJ0MV8xCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAt PiAgU29ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU29ydCBLZXk6IHAy XzEuYSwgcDJfMS5iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2Vx IFNjYW4gb24gcHJ0Ml9wMiBwMl8xCi0gICAgICAgICAtPiAgR3JvdXAKLSAgICAgICAgICAg ICAgIEdyb3VwIEtleTogKENPQUxFU0NFKHBydDFfMi5hLCBwMl8yLmEpKSwgKENPQUxFU0NF KHBydDFfMi5iLCBwMl8yLmIpKQotICAgICAgICAgICAgICAgLT4gIFNvcnQKLSAgICAgICAg ICAgICAgICAgICAgIFNvcnQgS2V5OiAoQ09BTEVTQ0UocHJ0MV8yLmEsIHAyXzIuYSkpLCAo Q09BTEVTQ0UocHJ0MV8yLmIsIHAyXzIuYikpCi0gICAgICAgICAgICAgICAgICAgICAtPiAg TWVyZ2UgRnVsbCBKb2luCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBNZXJnZSBDb25k OiAoKHBydDFfMi5hID0gcDJfMi5hKSBBTkQgKHBydDFfMi5iID0gcDJfMi5iKSkKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKChDT0FMRVNDRShwcnQxXzIuYSwgcDJf Mi5hKSA+PSA0OTApIEFORCAoQ09BTEVTQ0UocHJ0MV8yLmEsIHAyXzIuYSkgPD0gNTEwKSkK LSAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTb3J0Ci0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBTb3J0IEtleTogcHJ0MV8yLmEsIHBydDFfMi5iCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHJ0MV9wMyBwcnQx XzIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTb3J0Ci0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBTb3J0IEtleTogcDJfMi5hLCBwMl8yLmIKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwcnQyX3AzIHAyXzIK LSg0MyByb3dzKQorICAgICAgICAgLT4gIEFwcGVuZAorICAgICAgICAgICAgICAgLT4gIE1l cmdlIEZ1bGwgSm9pbgorICAgICAgICAgICAgICAgICAgICAgTWVyZ2UgQ29uZDogKChwcnQx XzEuYSA9IHAyXzEuYSkgQU5EIChwcnQxXzEuYiA9IHAyXzEuYikpCisgICAgICAgICAgICAg ICAgICAgICBGaWx0ZXI6ICgoQ09BTEVTQ0UocHJ0MV8xLmEsIHAyXzEuYSkgPj0gNDkwKSBB TkQgKENPQUxFU0NFKHBydDFfMS5hLCBwMl8xLmEpIDw9IDUxMCkpCisgICAgICAgICAgICAg ICAgICAgICAtPiAgU29ydAorICAgICAgICAgICAgICAgICAgICAgICAgICAgU29ydCBLZXk6 IHBydDFfMS5hLCBwcnQxXzEuYgorICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNl cSBTY2FuIG9uIHBydDFfcDEgcHJ0MV8xCisgICAgICAgICAgICAgICAgICAgICAtPiAgU29y dAorICAgICAgICAgICAgICAgICAgICAgICAgICAgU29ydCBLZXk6IHAyXzEuYSwgcDJfMS5i CisgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHJ0Ml9wMSBw Ml8xCisgICAgICAgICAgICAgICAtPiAgTWVyZ2UgRnVsbCBKb2luCisgICAgICAgICAgICAg ICAgICAgICBNZXJnZSBDb25kOiAoKHBydDFfMi5hID0gcDJfMi5hKSBBTkQgKHBydDFfMi5i ID0gcDJfMi5iKSkKKyAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKChDT0FMRVNDRShw cnQxXzIuYSwgcDJfMi5hKSA+PSA0OTApIEFORCAoQ09BTEVTQ0UocHJ0MV8yLmEsIHAyXzIu YSkgPD0gNTEwKSkKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTb3J0CisgICAgICAgICAg ICAgICAgICAgICAgICAgICBTb3J0IEtleTogcHJ0MV8yLmEsIHBydDFfMi5iCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHJ0MV9wMiBwcnQxXzIKKyAg ICAgICAgICAgICAgICAgICAgIC0+ICBTb3J0CisgICAgICAgICAgICAgICAgICAgICAgICAg ICBTb3J0IEtleTogcDJfMi5hLCBwMl8yLmIKKyAgICAgICAgICAgICAgICAgICAgICAgICAg IC0+ICBTZXEgU2NhbiBvbiBwcnQyX3AyIHAyXzIKKyAgICAgICAgICAgICAgIC0+ICBNZXJn ZSBGdWxsIEpvaW4KKyAgICAgICAgICAgICAgICAgICAgIE1lcmdlIENvbmQ6ICgocHJ0MV8z LmIgPSBwMl8zLmIpIEFORCAocHJ0MV8zLmEgPSBwMl8zLmEpKQorICAgICAgICAgICAgICAg ICAgICAgRmlsdGVyOiAoKENPQUxFU0NFKHBydDFfMy5hLCBwMl8zLmEpID49IDQ5MCkgQU5E IChDT0FMRVNDRShwcnQxXzMuYSwgcDJfMy5hKSA8PSA1MTApKQorICAgICAgICAgICAgICAg ICAgICAgLT4gIFNvcnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvcnQgS2V5OiBw cnQxXzMuYiwgcHJ0MV8zLmEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEg U2NhbiBvbiBwcnQxX3AzIHBydDFfMworICAgICAgICAgICAgICAgICAgICAgLT4gIFNvcnQK KyAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvcnQgS2V5OiBwMl8zLmIsIHAyXzMuYQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHBydDJfcDMgcDJf MworKDMyIHJvd3MpCiAKIFNFTEVDVCBhLCBiIEZST00gcHJ0MSBGVUxMIEpPSU4gcHJ0MiBw MihiLGEsYykgVVNJTkcoYSxiKQogICBXSEVSRSBhIEJFVFdFRU4gNDkwIEFORCA1MTAKZGlm ZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3lzdmlld3Mub3V0IGIvc3Jj L3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zeXN2aWV3cy5vdXQKaW5kZXggNTc5Yjg2MWQ4NGYu LjRlNzc1YWYxNzU4IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N5 c3ZpZXdzLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N5c3ZpZXdzLm91 dApAQCAtMTE0LDYgKzExNCw3IEBAIHNlbGVjdCBuYW1lLCBzZXR0aW5nIGZyb20gcGdfc2V0 dGluZ3Mgd2hlcmUgbmFtZSBsaWtlICdlbmFibGUlJzsKICBlbmFibGVfYXN5bmNfYXBwZW5k ICAgICAgICAgICAgfCBvbgogIGVuYWJsZV9iaXRtYXBzY2FuICAgICAgICAgICAgICB8IG9u CiAgZW5hYmxlX2dhdGhlcm1lcmdlICAgICAgICAgICAgIHwgb24KKyBlbmFibGVfZ3JvdXBf YnlfcmVvcmRlcmluZyAgICAgfCBvbgogIGVuYWJsZV9oYXNoYWdnICAgICAgICAgICAgICAg ICB8IG9uCiAgZW5hYmxlX2hhc2hqb2luICAgICAgICAgICAgICAgIHwgb24KICBlbmFibGVf aW5jcmVtZW50YWxfc29ydCAgICAgICAgfCBvbgpAQCAtMTMxLDcgKzEzMiw3IEBAIHNlbGVj dCBuYW1lLCBzZXR0aW5nIGZyb20gcGdfc2V0dGluZ3Mgd2hlcmUgbmFtZSBsaWtlICdlbmFi bGUlJzsKICBlbmFibGVfc2Vxc2NhbiAgICAgICAgICAgICAgICAgfCBvbgogIGVuYWJsZV9z b3J0ICAgICAgICAgICAgICAgICAgICB8IG9uCiAgZW5hYmxlX3RpZHNjYW4gICAgICAgICAg ICAgICAgIHwgb24KLSgyMCByb3dzKQorKDIxIHJvd3MpCiAKIC0tIFRlc3QgdGhhdCB0aGUg cGdfdGltZXpvbmVfbmFtZXMgYW5kIHBnX3RpbWV6b25lX2FiYnJldnMgdmlld3MgYXJlCiAt LSBtb3JlLW9yLWxlc3Mgd29ya2luZy4gIFdlIGNhbid0IHRlc3QgdGhlaXIgY29udGVudHMg aW4gYW55IGdyZWF0IGRldGFpbApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBl Y3RlZC91bmlvbi5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3VuaW9uLm91dApp bmRleCBkZWNlNzMxMGNmZS4uN2FjNGE5MzgwZTIgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3Jl Z3Jlc3MvZXhwZWN0ZWQvdW5pb24ub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0 ZWQvdW5pb24ub3V0CkBAIC0xMzAzLDI0ICsxMzAzLDIyIEBAIHNlbGVjdCBkaXN0aW5jdCBx MSBmcm9tCiAgICB1bmlvbiBhbGwKICAgIHNlbGVjdCBkaXN0aW5jdCAqIGZyb20gaW50OF90 YmwgaTgyKSBzcwogd2hlcmUgcTIgPSBxMjsKLSAgICAgICAgICAgICAgICAgICAgICAgIFFV RVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAKLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSBVbmlxdWUKLSAgIC0+ ICBNZXJnZSBBcHBlbmQKLSAgICAgICAgIFNvcnQgS2V5OiAiKlNFTEVDVCogMSIucTEKKyAg ICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBI YXNoQWdncmVnYXRlCisgICBHcm91cCBLZXk6ICIqU0VMRUNUKiAxIi5xMQorICAgLT4gIEFw cGVuZAogICAgICAgICAgLT4gIFN1YnF1ZXJ5IFNjYW4gb24gIipTRUxFQ1QqIDEiCi0gICAg ICAgICAgICAgICAtPiAgVW5pcXVlCi0gICAgICAgICAgICAgICAgICAgICAtPiAgU29ydAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgU29ydCBLZXk6IGk4MS5xMSwgaTgxLnEyCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gaW50OF90YmwgaTgx Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6IChxMiBJUyBOT1Qg TlVMTCkKKyAgICAgICAgICAgICAgIC0+ICBIYXNoQWdncmVnYXRlCisgICAgICAgICAgICAg ICAgICAgICBHcm91cCBLZXk6IGk4MS5xMSwgaTgxLnEyCisgICAgICAgICAgICAgICAgICAg ICAtPiAgU2VxIFNjYW4gb24gaW50OF90YmwgaTgxCisgICAgICAgICAgICAgICAgICAgICAg ICAgICBGaWx0ZXI6IChxMiBJUyBOT1QgTlVMTCkKICAgICAgICAgIC0+ICBTdWJxdWVyeSBT Y2FuIG9uICIqU0VMRUNUKiAyIgotICAgICAgICAgICAgICAgLT4gIFVuaXF1ZQotICAgICAg ICAgICAgICAgICAgICAgLT4gIFNvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFNv cnQgS2V5OiBpODIucTEsIGk4Mi5xMgotICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4g IFNlcSBTY2FuIG9uIGludDhfdGJsIGk4MgotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgRmlsdGVyOiAocTIgSVMgTk9UIE5VTEwpCi0oMTUgcm93cykKKyAgICAgICAgICAg ICAgIC0+ICBIYXNoQWdncmVnYXRlCisgICAgICAgICAgICAgICAgICAgICBHcm91cCBLZXk6 IGk4Mi5xMSwgaTgyLnEyCisgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24g aW50OF90YmwgaTgyCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6IChxMiBJ UyBOT1QgTlVMTCkKKygxMyByb3dzKQogCiBzZWxlY3QgZGlzdGluY3QgcTEgZnJvbQogICAo c2VsZWN0IGRpc3RpbmN0ICogZnJvbSBpbnQ4X3RibCBpODEKQEAgLTEzMzksMjQgKzEzMzcs MjIgQEAgc2VsZWN0IGRpc3RpbmN0IHExIGZyb20KICAgIHVuaW9uIGFsbAogICAgc2VsZWN0 IGRpc3RpbmN0ICogZnJvbSBpbnQ4X3RibCBpODIpIHNzCiB3aGVyZSAtcTEgPSBxMjsKLSAg ICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAg Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQotIFVuaXF1ZQotICAgLT4gIE1lcmdlIEFwcGVuZAotICAgICAgICAgU29ydCBLZXk6 ICIqU0VMRUNUKiAxIi5xMQorICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAg ICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgSGFzaEFnZ3JlZ2F0ZQorICAgR3JvdXAgS2V5OiAiKlNFTEVDVCog MSIucTEKKyAgIC0+ICBBcHBlbmQKICAgICAgICAgIC0+ICBTdWJxdWVyeSBTY2FuIG9uICIq U0VMRUNUKiAxIgotICAgICAgICAgICAgICAgLT4gIFVuaXF1ZQotICAgICAgICAgICAgICAg ICAgICAgLT4gIFNvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvcnQgS2V5OiBp ODEucTEsIGk4MS5xMgotICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2Fu IG9uIGludDhfdGJsIGk4MQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmls dGVyOiAoKC0gcTEpID0gcTIpCisgICAgICAgICAgICAgICAtPiAgSGFzaEFnZ3JlZ2F0ZQor ICAgICAgICAgICAgICAgICAgICAgR3JvdXAgS2V5OiBpODEucTEsIGk4MS5xMgorICAgICAg ICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGludDhfdGJsIGk4MQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgRmlsdGVyOiAoKC0gcTEpID0gcTIpCiAgICAgICAgICAtPiAg U3VicXVlcnkgU2NhbiBvbiAiKlNFTEVDVCogMiIKLSAgICAgICAgICAgICAgIC0+ICBVbmlx dWUKLSAgICAgICAgICAgICAgICAgICAgIC0+ICBTb3J0Ci0gICAgICAgICAgICAgICAgICAg ICAgICAgICBTb3J0IEtleTogaTgyLnExLCBpODIucTIKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgIC0+ICBTZXEgU2NhbiBvbiBpbnQ4X3RibCBpODIKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEZpbHRlcjogKCgtIHExKSA9IHEyKQotKDE1IHJvd3MpCisgICAg ICAgICAgICAgICAtPiAgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAgICAgICAgR3Jv dXAgS2V5OiBpODIucTEsIGk4Mi5xMgorICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBT Y2FuIG9uIGludDhfdGJsIGk4MgorICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsdGVy OiAoKC0gcTEpID0gcTIpCisoMTMgcm93cykKIAogc2VsZWN0IGRpc3RpbmN0IHExIGZyb20K ICAgKHNlbGVjdCBkaXN0aW5jdCAqIGZyb20gaW50OF90YmwgaTgxCmRpZmYgLS1naXQgYS9z cmMvdGVzdC9yZWdyZXNzL3NxbC9hZ2dyZWdhdGVzLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mv c3FsL2FnZ3JlZ2F0ZXMuc3FsCmluZGV4IDJmNWQwZTAwZjNkLi5jNmUwZDdiYTJiNyAxMDA2 NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvYWdncmVnYXRlcy5zcWwKKysrIGIvc3Jj L3Rlc3QvcmVncmVzcy9zcWwvYWdncmVnYXRlcy5zcWwKQEAgLTEwMjUsNiArMTAyNSwxMDUg QEAgU0VMRUNUIGJhbGsoaHVuZHJlZCkgRlJPTSB0ZW5rMTsKIAogUk9MTEJBQ0s7CiAKKy0t IEdST1VQIEJZIG9wdGltaXphdGlvbiBieSByZW9yZGVyIGNvbHVtbnMKKworU0VMRUNUCisJ aSBBUyBpZCwKKwlpLzIgQVMgcCwKKwlmb3JtYXQoJyU2MHMnLCBpJTIpIEFTIHYsCisJaS80 IEFTIGMsCisJaS84IEFTIGQsCisJKHJhbmRvbSgpICogKDEwMDAwLzgpKTo6aW50IGFzIGUg LS10aGUgc2FtZSBhcyBkIGJ1dCBubyBjb3JyZWxhdGlvbiB3aXRoIHAKKwlJTlRPIGJ0Zwor RlJPTQorCWdlbmVyYXRlX3NlcmllcygxLCAxMDAwMCkgaTsKKworVkFDVVVNIGJ0ZzsKK0FO QUxZWkUgYnRnOworCistLSBHUk9VUCBCWSBvcHRpbWl6YXRpb24gYnkgcmVvcmRlciBjb2x1 bW5zIGJ5IGZyZXF1ZW5jeQorCitTRVQgZW5hYmxlX2hhc2hhZ2c9b2ZmOworU0VUIG1heF9w YXJhbGxlbF93b3JrZXJzPSAwOworU0VUIG1heF9wYXJhbGxlbF93b3JrZXJzX3Blcl9nYXRo ZXIgPSAwOworCitFWFBMQUlOIChDT1NUUyBvZmYpCitTRUxFQ1QgY291bnQoKikgRlJPTSBi dGcgR1JPVVAgQlkgcCwgdjsKKworRVhQTEFJTiAoQ09TVFMgb2ZmKQorU0VMRUNUIGNvdW50 KCopIEZST00gYnRnIEdST1VQIEJZIHYsIHA7CisKK0VYUExBSU4gKENPU1RTIG9mZikKK1NF TEVDVCBjb3VudCgqKSBGUk9NIGJ0ZyBHUk9VUCBCWSB2LCBwLCBjOworCitFWFBMQUlOIChD T1NUUyBvZmYpCitTRUxFQ1QgY291bnQoKikgRlJPTSBidGcgR1JPVVAgQlkgdiwgcCwgYyBP UkRFUiBCWSB2LCBwLCBjOworCitFWFBMQUlOIChDT1NUUyBvZmYpCitTRUxFQ1QgY291bnQo KikgRlJPTSBidGcgR1JPVVAgQlkgdiwgcCwgZCwgYzsKKworRVhQTEFJTiAoQ09TVFMgb2Zm KQorU0VMRUNUIGNvdW50KCopIEZST00gYnRnIEdST1VQIEJZIHYsIHAsIGQsIGMgT1JERVIg QlkgdiwgcCwgZCAsYzsKKworRVhQTEFJTiAoQ09TVFMgb2ZmKQorU0VMRUNUIGNvdW50KCop IEZST00gYnRnIEdST1VQIEJZIHYsIHAsIGQsIGMgT1JERVIgQlkgcCwgdiwgZCAsYzsKKwor RVhQTEFJTiAoQ09TVFMgb2ZmKQorU0VMRUNUIGNvdW50KCopIEZST00gYnRnIEdST1VQIEJZ IHAsIGQsIGU7CisKK0VYUExBSU4gKENPU1RTIG9mZikKK1NFTEVDVCBjb3VudCgqKSBGUk9N IGJ0ZyBHUk9VUCBCWSBwLCBlLCBkOworCitDUkVBVEUgU1RBVElTVElDUyBidGdfZGVwIE9O IGQsIGUsIHAgRlJPTSBidGc7CitBTkFMWVpFIGJ0ZzsKKworRVhQTEFJTiAoQ09TVFMgb2Zm KQorU0VMRUNUIGNvdW50KCopIEZST00gYnRnIEdST1VQIEJZIHAsIGQsIGU7CisKK0VYUExB SU4gKENPU1RTIG9mZikKK1NFTEVDVCBjb3VudCgqKSBGUk9NIGJ0ZyBHUk9VUCBCWSBwLCBl LCBkOworCisKKy0tIEdST1VQIEJZIG9wdGltaXphdGlvbiBieSByZW9yZGVyIGNvbHVtbnMg YnkgaW5kZXggc2NhbgorCitDUkVBVEUgSU5ERVggT04gYnRnKHAsIHYpOworU0VUIGVuYWJs ZV9zZXFzY2FuPW9mZjsKK1NFVCBlbmFibGVfYml0bWFwc2Nhbj1vZmY7CitWQUNVVU0gYnRn OworCitFWFBMQUlOIChDT1NUUyBvZmYpCitTRUxFQ1QgY291bnQoKikgRlJPTSBidGcgR1JP VVAgQlkgcCwgdjsKKworRVhQTEFJTiAoQ09TVFMgb2ZmKQorU0VMRUNUIGNvdW50KCopIEZS T00gYnRnIEdST1VQIEJZIHAsIHYgT1JERVIgQlkgcCwgdjsKKworRVhQTEFJTiAoQ09TVFMg b2ZmKQorU0VMRUNUIGNvdW50KCopIEZST00gYnRnIEdST1VQIEJZIHYsIHA7CisKK0VYUExB SU4gKENPU1RTIG9mZikKK1NFTEVDVCBjb3VudCgqKSBGUk9NIGJ0ZyBHUk9VUCBCWSB2LCBw IE9SREVSIEJZIHAsIHY7CisKK0VYUExBSU4gKENPU1RTIG9mZikKK1NFTEVDVCBjb3VudCgq KSBGUk9NIGJ0ZyBHUk9VUCBCWSB2LCBwLCBjOworCitFWFBMQUlOIChDT1NUUyBvZmYpCitT RUxFQ1QgY291bnQoKikgRlJPTSBidGcgR1JPVVAgQlkgdiwgcCwgYyBPUkRFUiBCWSBwLCB2 OworCitFWFBMQUlOIChDT1NUUyBvZmYpCitTRUxFQ1QgY291bnQoKikgRlJPTSBidGcgR1JP VVAgQlkgdiwgYywgcCwgZDsKKworRVhQTEFJTiAoQ09TVFMgb2ZmKQorU0VMRUNUIGNvdW50 KCopIEZST00gYnRnIEdST1VQIEJZIHYsIGMsIHAsIGQgT1JERVIgQlkgcCwgdjsKKworRFJP UCBUQUJMRSBidGc7CisKK1JFU0VUIGVuYWJsZV9oYXNoYWdnOworUkVTRVQgbWF4X3BhcmFs bGVsX3dvcmtlcnM7CitSRVNFVCBtYXhfcGFyYWxsZWxfd29ya2Vyc19wZXJfZ2F0aGVyOwor UkVTRVQgZW5hYmxlX3NlcXNjYW47CitSRVNFVCBlbmFibGVfYml0bWFwc2NhbjsKKworCiAt LSBTZWNvbmRseSB0ZXN0IHRoZSBjYXNlIG9mIGEgcGFyYWxsZWwgYWdncmVnYXRlIGNvbWJp bmVyIGZ1bmN0aW9uCiAtLSByZXR1cm5pbmcgTlVMTC4gRm9yIHRoYXQgdXNlIG5vcm1hbCB0 cmFuc2l0aW9uIGZ1bmN0aW9uLCBidXQgYQogLS0gY29tYmluZXIgZnVuY3Rpb24gcmV0dXJu aW5nIE5VTEwuCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9pbmNyZW1lbnRh bF9zb3J0LnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2luY3JlbWVudGFsX3NvcnQuc3Fs CmluZGV4IGQ4NzY4YTZiNTRkLi4xZGUxNjNlMDM5NSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3Qv cmVncmVzcy9zcWwvaW5jcmVtZW50YWxfc29ydC5zcWwKKysrIGIvc3JjL3Rlc3QvcmVncmVz cy9zcWwvaW5jcmVtZW50YWxfc29ydC5zcWwKQEAgLTIxMyw3ICsyMTMsNyBAQCBzZXQgcGFy YWxsZWxfdHVwbGVfY29zdCA9IDA7CiBzZXQgbWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dh dGhlciA9IDI7CiAKIGNyZWF0ZSB0YWJsZSB0IChhIGludCwgYiBpbnQsIGMgaW50KTsKLWlu c2VydCBpbnRvIHQgc2VsZWN0IG1vZChpLDEwKSxtb2QoaSwxMCksaSBmcm9tIGdlbmVyYXRl X3NlcmllcygxLDEwMDAwKSBzKGkpOworaW5zZXJ0IGludG8gdCBzZWxlY3QgbW9kKGksMTAp LG1vZChpLDEwKSxpIGZyb20gZ2VuZXJhdGVfc2VyaWVzKDEsNjAwMDApIHMoaSk7CiBjcmVh dGUgaW5kZXggb24gdCAoYSk7CiBhbmFseXplIHQ7CiAKLS0gCjIuMzQuMQoK --------------SJuT9jwVxrByFnZ3US0uWQs7--