Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1w7sEY-005mwg-01 for pgsql-hackers@arkaria.postgresql.org; Wed, 01 Apr 2026 09:51:34 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w7sEW-00GXGI-1X for pgsql-hackers@arkaria.postgresql.org; Wed, 01 Apr 2026 09:51:32 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1w7sEV-00GXG4-2X for pgsql-hackers@lists.postgresql.org; Wed, 01 Apr 2026 09:51:32 +0000 Received: from mail-pg1-x535.google.com ([2607:f8b0:4864:20::535]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w7sEU-000000027Nu-1TeC for pgsql-hackers@postgresql.org; Wed, 01 Apr 2026 09:51:31 +0000 Received: by mail-pg1-x535.google.com with SMTP id 41be03b00d2f7-c76b994f7a8so549555a12.3 for ; Wed, 01 Apr 2026 02:51:30 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1775037089; cv=none; d=google.com; s=arc-20240605; b=hdrHYI1GchysBgpSCAY2TfT3pefxRlDy6dYo04UvDBdxMy3PQfyYmSeNAYYjZ98uwr JElLCofM38vvKBFiyTVB5ojllgDJhC9deAWT2ZAsBXD0+DqGnq1qwKOZ9q3j5dyAzgwy jBK58L3uDDxJFKq0qVhp7CjAZYd57LhLab8xlqxYdrL4EehMmmAwSkrK84kJ9O9I+sOq lptBlOChU3RWxn3VxKxPb1hkHsMxmXBcvzioxV/8Vu0LOnEG6Up/DrKZUX6Z93Wz3kW5 vJPeuv+SwNViwwYsRXa9k71emS6RZ5nBXsRlartLKx82sgqcUdJG9OoltiGkyYe3AMx/ mrfw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=lsfT8GTw5zJLBYAEHE/ftlY9ODRuRUFuG+20gF9q/9o=; fh=zTwuZNEsFfntEbilTzhlVOqihIF9yDiC6MpKns4yZBQ=; b=cVTGpdpWOUCNAYtGMzbvVRYtkw62FpUgjYQr4alZhbduUktDV4hEAqmGdiAZmjh+3p ywXfMiIot4Sl9Sigg7bBweQpNbRvVrtgKOjx8YcM76NCB9zTkUjWrjR1GIc8SVEiQ1aE SYppnw+PL1dgKacupUC8JrYUHAg5HTCAugH8Zi09wnVQ/0PnZ9epAyJPTwNiIojbznvX Pf1jHbvGHSq+Td31pT+286wL5NgDWB0KcF6O7oSSjQiJJ2yVIC9q03oH+R1v4gOicl36 527gFaae3T06LzH1gdhmbnx6wx+h4YenZ9ZB2hfHdX9xXq0fJYomKR30V0fq2p85adtT 42eA==; darn=postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1775037089; x=1775641889; darn=postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=lsfT8GTw5zJLBYAEHE/ftlY9ODRuRUFuG+20gF9q/9o=; b=SHV24B3Czu8slRVWvxnoPDkgymg/hV6p0UVFmm4laO+ISl2Z/LcWre1dyBc6OUVHWm DCK0Bwt9tSVbuCW/6s+0aNOAGxLea81HHU6gjSg/F/61RTKsJt5ykfxry6Mz8CH7OUWg vdH76+XFq7pQipkJ1oyIkVPdMJNmcC5twESRB5IV6c9RCWEgG+45Q9YlTCu3CrnU3JGh hMKJQlJQwJg7NDPegOzAtpg67zIupMw8ym22Pr+6TJJfEcMig3n6oyTfH9C3xBWrHNSw RWZvcNaTOKyNvAlzmCFgk46JF+qK++QPSXebqQcBoEsCTBfnQDPdjGJ7VoTaiv7GoqBI ALqg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775037089; x=1775641889; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=lsfT8GTw5zJLBYAEHE/ftlY9ODRuRUFuG+20gF9q/9o=; b=kwnt/k5tmQCqZ2bgQpv1+A8Va89ANL2jyJhSRR4F55nPyxDPDnAhZOw/s7k8NKhLlh cqPjhvH5TfFHoXsifrXmkfo37IVevEybkTikPjsnfJQKJMmkgzr5Ai7FrZurN1hHOMLp 4zMzJTeley2e6TvUGWFhZKgh5oDtZfptSSV5Xrf4KLyrJ7V50sDQGXmA4bBAmjjjll4B CC+y43f/H9S03eLuMStkBp+C05OCTmeQSDEyq+Ej9E08VewjhMz3dogWTkMfP231EI+o cci3bzfKcY5ad40F6ldXIVr+RmxHyrxzi8Ttn2kUWXR9eFxPlr0SCU+fJJLR1nrH1HjK ys3g== X-Forwarded-Encrypted: i=1; AJvYcCWllQkluMnLIarvWlo/qzLWSwWLExnTlu8fqtEjMfFgKljDcZvDkNywPngU6emPp1yurXvnJGyGsshalGb/@postgresql.org X-Gm-Message-State: AOJu0YwTAOYVx1HIUhkF7OrpdUzjvO14Wi7ep47OkGaEPJbK42yZgFwv T/mxj38NrBPlowOT8k5+J0vuqRzJIMKkrUH0ZB0d4UQgdUJB6DRGyXRIf2I4tDh/0zjFtkg7/zS fZKITuwCkvgvwKHldMX3QTZVtV0Z0RtA= X-Gm-Gg: ATEYQzwVQjBz7gaZT/zao6G8pmn+8j+nVHHsoKB2T5FYfBpX5z8X+D8fe9gXfxPiZz6 tjJ7XaM1Jp1Dm+JHw9M6HXpSPqQoSgmv4upbrj8Rt5aOOb0GqpkFvJgwv3+KPM52mI560YIBAtH 6ES/3u6KmVWbjdUwWyZm/PwxXqkps33rsoq2JwlgzBeMtWR02mz4EBHWAdCeQt+V8OhnAj04PZb AIXWabNYcUzklCVoYcYrNb/WY4R8pVMKVtE2ASsxl7C5Qqntf4qQpTbjh3huBcEPYT28amrGTzn 9xZZjqAIeQfmSBooFMg= X-Received: by 2002:a05:6a20:6a22:b0:398:9574:a1d7 with SMTP id adf61e73a8af0-39ef71fb939mr3270516637.11.1775037089389; Wed, 01 Apr 2026 02:51:29 -0700 (PDT) MIME-Version: 1.0 References: <2BE661BA-D909-4093-BF78-DB9B0C099337@gmail.com> <77FA04FE-1F84-4DA1-8855-8BBFD8CC889A@gmail.com> In-Reply-To: From: Amit Langote Date: Wed, 1 Apr 2026 18:51:10 +0900 X-Gm-Features: AQROBzCieiTP1qfmWMmagXsHwsizrPBgG7hfwCuaeJAU8QrxvqTfQkrVLGIwM34 Message-ID: Subject: Re: Eliminating SPI / SQL from some RI triggers - take 3 To: Junwang Zhao Cc: Chao Li , Haibo Yan , Pavel Stehule , PostgreSQL-development , Tomas Vondra Content-Type: multipart/mixed; boundary="0000000000002d387d064e63070c" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000002d387d064e63070c Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Wed, Apr 1, 2026 at 5:51=E2=80=AFPM Amit Langote wrote: > On Wed, Apr 1, 2026 at 12:54=E2=80=AFAM Junwang Zhao = wrote: > > + if (riinfo->fpmeta =3D=3D NULL) > > + { > > + /* Reload to ensure it's valid. */ > > + riinfo =3D ri_LoadConstraintInfo(riinfo->constraint_id)= ; > > > > I was thinking of wrapping the reload in a conditional check like > > `!riinfo->valid`, since `riinfo` can be valid even when `fpmeta =3D=3D = NULL`. > > However, `if (riinfo->fpmeta =3D=3D NULL)` should rarely be true, so t= he > > unconditional reload is harmless, and the code is cleaner. > > > > +1 to the fix. > > Thanks for checking. > > I have just pushed a slightly modified version of that. > > > > 0002 is the rebased batching patch. > > > > The change of RI_FastPathEntry from storing riinfo to fk_relid > > makes sense to me. I'll do another review on 0002 tomorrow. > > Here's another version. > > This time, I have another fixup patch (0001) to make FastPathMeta > self-contained by copying the FmgrInfo structs it needs out of > RI_CompareHashEntry rather than storing pointers into it. This avoids > any dependency on those cache entries remaining stable. I'll push > that once the just committed patch has seen enough BF animals. Pushed. > 0002 is rebased over that. Rebased again. --=20 Thanks, Amit Langote --0000000000002d387d064e63070c Content-Type: application/octet-stream; name="v15-0001-Batch-FK-rows-and-use-SK_SEARCHARRAY-for-fast-pa.patch" Content-Disposition: attachment; filename="v15-0001-Batch-FK-rows-and-use-SK_SEARCHARRAY-for-fast-pa.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnfv8msh0 RnJvbSAxOTFjNGU2NjUyMTNiMzg2MDI3NjJjMDY4NDQ1ZDk4YjZjMzkxMzllIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IExhbmdvdGUgPGFtaXRsYW5AcG9zdGdyZXNxbC5vcmc+ CkRhdGU6IFR1ZSwgMzEgTWFyIDIwMjYgMTg6MjI6MjMgKzA5MDAKU3ViamVjdDogW1BBVENIIHYx NV0gQmF0Y2ggRksgcm93cyBhbmQgdXNlIFNLX1NFQVJDSEFSUkFZIGZvciBmYXN0LXBhdGggRksK IHByb2JlcwoKSW5zdGVhZCBvZiBwcm9iaW5nIHRoZSBQSyBpbmRleCBvbiBlYWNoIHRyaWdnZXIg aW52b2NhdGlvbiwgYnVmZmVyCkZLIHJvd3MgaW4gYSBuZXcgcGVyLWNvbnN0cmFpbnQgY2FjaGUg ZW50cnkgKFJJX0Zhc3RQYXRoRW50cnkpIGFuZApmbHVzaCB0aGVtIGFzIGEgYmF0Y2guICBDb21i aW5lZCB3aXRoIHRoZSBmYXN0IHBhdGggaW50cm9kdWNlZCBpbgp0aGUgcHJldmlvdXMgY29tbWl0 LCBidWxrIEZLIGluc2VydHMgYXJlIH4yLjl4IGZhc3RlciAoaW50IFBLIC8KaW50IEZLLCAxTSBy b3dzLCBQSyB0YWJsZSBhbmQgaW5kZXggY2FjaGVkIGluIG1lbW9yeSkuCgpPbiBlYWNoIHRyaWdn ZXIgaW52b2NhdGlvbiwgdGhlIG5ldyByaV9GYXN0UGF0aEJhdGNoQWRkKCkgYnVmZmVycwp0aGUg Rksgcm93IGluIFJJX0Zhc3RQYXRoRW50cnkuICBXaGVuIHRoZSBidWZmZXIgZmlsbHMgKDY0IHJv d3MpCm9yIHRoZSB0cmlnZ2VyLWZpcmluZyBjeWNsZSBlbmRzLCB0aGUgbmV3IHJpX0Zhc3RQYXRo QmF0Y2hGbHVzaCgpCnByb2JlcyB0aGUgaW5kZXggZm9yIGFsbCBidWZmZXJlZCByb3dzLCBzaGFy aW5nIGEgc2luZ2xlCkNvbW1hbmRDb3VudGVySW5jcmVtZW50LCBzbmFwc2hvdCwgcGVybWlzc2lv biBjaGVjaywgYW5kIHNlY3VyaXR5CmNvbnRleHQgc3dpdGNoIGFjcm9zcyB0aGUgYmF0Y2gsIHJh dGhlciB0aGFuIHJlcGVhdGluZyBlYWNoIHBlciByb3cKYXMgdGhlIFNQSSBwYXRoIGRvZXMuICBQ ZXItZmx1c2ggQ0NJIGlzIHNhZmUgYmVjYXVzZSBhbGwgQUZURVIKdHJpZ2dlcnMgZm9yIHRoZSBi dWZmZXJlZCByb3dzIGhhdmUgYWxyZWFkeSBmaXJlZCBieSBmbHVzaCB0aW1lLgoKRm9yIHNpbmds ZS1jb2x1bW4gZm9yZWlnbiBrZXlzLCB0aGUgZmx1c2ggYnVpbGRzIGFuIEFycmF5VHlwZSBmcm9t CnRoZSBidWZmZXJlZCBGSyB2YWx1ZXMgKGNhc3RpbmcgdG8gdGhlIFBLLXNpZGUgdHlwZSBpZiBu ZWVkZWQpIGFuZApjb25zdHJ1Y3RzIGEgc2NhbiBrZXkgd2l0aCB0aGUgU0tfU0VBUkNIQVJSQVkg ZmxhZy4gIFRoZSBpbmRleCBBTQpzb3J0cyBhbmQgZGVkdXBsaWNhdGVzIHRoZSBhcnJheSBpbnRl cm5hbGx5LCB0aGVuIHdhbGtzIG1hdGNoaW5nCmxlYWYgcGFnZXMgaW4gb25lIG9yZGVyZWQgdHJh dmVyc2FsIGluc3RlYWQgb2YgZGVzY2VuZGluZyBmcm9tIHRoZQpyb290IG9uY2UgcGVyIHJvdy4g IEEgbWF0Y2hlZFtdIGJpdG1hcCB0cmFja3Mgd2hpY2ggYmF0Y2ggaXRlbXMKd2VyZSBzYXRpc2Zp ZWQ7IHRoZSBmaXJzdCB1bm1hdGNoZWQgaXRlbSBpcyByZXBvcnRlZCBhcyBhCnZpb2xhdGlvbi4g IE11bHRpLWNvbHVtbiBmb3JlaWduIGtleXMgZmFsbCBiYWNrIHRvIHBlci1yb3cgcHJvYmluZwp2 aWEgdGhlIG5ldyByaV9GYXN0UGF0aEZsdXNoTG9vcCgpLgoKRksgdHVwbGVzIGFyZSBtYXRlcmlh bGl6ZWQgdmlhIEV4ZWNDb3B5U2xvdEhlYXBUdXBsZSgpIGludG8gYSBuZXcKcHVycG9zZS1zcGVj aWZpYyBtZW1vcnkgY29udGV4dCAoZmx1c2hfY3h0KSwgY2hpbGQgb2YKVG9wVHJhbnNhY3Rpb25D b250ZXh0LCB3aGljaCBpcyBhbHNvIHVzZWQgZm9yIHBlci1mbHVzaCB0cmFuc2llbnQKd29yazog Y2FzdCByZXN1bHRzLCB0aGUgc2VhcmNoIGFycmF5LCBhbmQgaW5kZXggc2NhbiBhbGxvY2F0aW9u cy4KSXQgaXMgcmVzZXQgYWZ0ZXIgZWFjaCBmbHVzaCBhbmQgZGVsZXRlZCBpbiB0ZWFyZG93bi4K ClRoZSBQSyByZWxhdGlvbiwgaW5kZXgsIHR1cGxlIHNsb3RzLCBhbmQgZmFzdC1wYXRoIG1ldGFk YXRhIGFyZQpjYWNoZWQgaW4gUklfRmFzdFBhdGhFbnRyeSBhY3Jvc3MgdHJpZ2dlciBpbnZvY2F0 aW9ucyB3aXRoaW4gYQp0cmlnZ2VyLWZpcmluZyBiYXRjaCwgYXZvaWRpbmcgcmVwZWF0ZWQgb3Bl bi9jbG9zZSBvdmVyaGVhZC4gIFRoZQpzbmFwc2hvdCBhbmQgSW5kZXhTY2FuRGVzYyBhcmUgdGFr ZW4gZnJlc2ggcGVyIGZsdXNoLgoKcmlfRmFzdFBhdGhFbmRCYXRjaCgpIGZsdXNoZXMgYW55IHBh cnRpYWwgYmF0Y2ggYmVmb3JlIHRlYXJpbmcKZG93biBjYWNoZWQgcmVzb3VyY2VzLiAgU2luY2Ug dGhlIEZLIHJlbGF0aW9uIG1heSBhbHJlYWR5IGJlCmNsb3NlZCBieSBmbHVzaCB0aW1lIChlLmcu IGZvciBkZWZlcnJlZCBjb25zdHJhaW50cyBhdCBDT01NSVQpLAppdCByZW9wZW5zIHRoZSByZWxh dGlvbiB1c2luZyBlbnRyeS0+ZmtfcmVsaWQgaWYgbmVlZGVkLgoKVGhlIGV4aXN0aW5nIEFMVEVS IFRBQkxFIHZhbGlkYXRpb24gcGF0aCBieXBhc3NlcyBiYXRjaGluZyBhbmQKY29udGludWVzIHRv IGNhbGwgcmlfRmFzdFBhdGhDaGVjaygpIGRpcmVjdGx5IHBlciByb3cuCgpMaWZlY3ljbGUgbWFu YWdlbWVudCBmb3IgUklfRmFzdFBhdGhFbnRyeSByZWxpZXMgb24gdGhyZWUgbmV3Cm1lY2hhbmlz bXM6CgogIC0gQWZ0ZXJUcmlnZ2VyQmF0Y2hDYWxsYmFjazogQSBuZXcgZ2VuZXJhbC1wdXJwb3Nl IGNhbGxiYWNrCiAgICBtZWNoYW5pc20gaW4gdHJpZ2dlci5jLiAgQ2FsbGJhY2tzIHJlZ2lzdGVy ZWQgdmlhCiAgICBSZWdpc3RlckFmdGVyVHJpZ2dlckJhdGNoQ2FsbGJhY2soKSBmaXJlIGF0IHRo ZSBlbmQgb2YgZWFjaAogICAgdHJpZ2dlci1maXJpbmcgYmF0Y2ggKEFmdGVyVHJpZ2dlckVuZFF1 ZXJ5IGZvciBpbW1lZGlhdGUKICAgIGNvbnN0cmFpbnRzLCBBZnRlclRyaWdnZXJGaXJlRGVmZXJy ZWQgYXQgQ09NTUlULCBhbmQKICAgIEFmdGVyVHJpZ2dlclNldFN0YXRlIGZvciBTRVQgQ09OU1RS QUlOVFMgSU1NRURJQVRFKS4gIFRoZSBSSQogICAgY29kZSByZWdpc3RlcnMgcmlfRmFzdFBhdGhF bmRCYXRjaCBhcyBhIGJhdGNoIGNhbGxiYWNrLgoKICAtIEJhdGNoIGNhbGxiYWNrcyBvbmx5IGZp cmUgYXQgdGhlIG91dGVybW9zdCBxdWVyeSBsZXZlbAogICAgKGNoZWNrZWQgaW5zaWRlIEZpcmVB ZnRlclRyaWdnZXJCYXRjaENhbGxiYWNrcyksIHNvIG5lc3RlZAogICAgcXVlcmllcyBmcm9tIFNQ SSBpbnNpZGUgb3RoZXIgQUZURVIgdHJpZ2dlcnMgZG8gbm90IHRlYXIgZG93bgogICAgdGhlIGNh Y2hlIG1pZC1iYXRjaC4KCiAgLSBYYWN0Q2FsbGJhY2s6IHJpX0Zhc3RQYXRoWGFjdENhbGxiYWNr IE5VTExzIHRoZSBzdGF0aWMgY2FjaGUKICAgIHBvaW50ZXIgYXQgdHJhbnNhY3Rpb24gZW5kLCBo YW5kbGluZyB0aGUgYWJvcnQgcGF0aCB3aGVyZSB0aGUKICAgIGJhdGNoIGNhbGxiYWNrIG5ldmVy IGZpcmVkLgoKICAtIFN1YlhhY3RDYWxsYmFjazogcmlfRmFzdFBhdGhTdWJYYWN0Q2FsbGJhY2sg TlVMTHMgdGhlIHN0YXRpYwogICAgY2FjaGUgcG9pbnRlciBvbiBzdWJ0cmFuc2FjdGlvbiBhYm9y dCwgcHJldmVudGluZyB0aGUgYmF0Y2gKICAgIGNhbGxiYWNrIGZyb20gYWNjZXNzaW5nIGFscmVh ZHktcmVsZWFzZWQgcmVzb3VyY2VzLgoKICAtIEFmdGVyVHJpZ2dlckJhdGNoSXNBY3RpdmUoKTog QSBuZXcgZXhwb3J0ZWQgYWNjZXNzb3IgdGhhdAogICAgcmV0dXJucyB0cnVlIHdoZW4gYWZ0ZXJU cmlnZ2Vycy5xdWVyeV9kZXB0aCA+PSAwLiAgRHVyaW5nCiAgICBBTFRFUiBUQUJMRSAuLi4gQURE IEZPUkVJR04gS0VZIHZhbGlkYXRpb24sIFJJIHRyaWdnZXJzIGFyZQogICAgY2FsbGVkIGRpcmVj dGx5IG91dHNpZGUgdGhlIGFmdGVyLXRyaWdnZXIgZnJhbWV3b3JrLCBzbyBiYXRjaAogICAgY2Fs bGJhY2tzIHdvdWxkIG5ldmVyIGZpcmUuICBUaGUgZmFzdC1wYXRoIGNvZGUgdXNlcyB0aGlzIHRv CiAgICBmYWxsIGJhY2sgdG8gdGhlIG5vbi1jYWNoZWQgcGVyLWludm9jYXRpb24gcGF0aCBpbiB0 aGF0CiAgICBjb250ZXh0LgoKQXV0aG9yOiBBbWl0IExhbmdvdGUgPGFtaXRsYW5nb3RlMDlAZ21h aWwuY29tPgpDby1hdXRob3JlZC1ieTogSnVud2FuZyBaaGFvIDx6aGp3cGt1QGdtYWlsLmNvbT4K UmV2aWV3ZWQtYnk6IEhhaWJvIFlhbiA8dHJpc3Rhbi55aW1AZ21haWwuY29tPgpUZXN0ZWQtYnk6 IFRvbWFzIFZvbmRyYSA8dG9tYXNAdm9uZHJhLm1lPgpEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rn ci5lcy9tL0NBK0hpd3FGNEMwd3MzY08rejVjTGtQdXZ3bkF3a1NwN3NmdmdHajN5UT1MaTZLTk1x QUBtYWlsLmdtYWlsLmNvbQotLS0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL3RyaWdnZXIuYyAgICAg ICAgICAgIHwgMTA1ICsrKysKIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9yaV90cmlnZ2Vycy5jICAg ICAgIHwgNTk0ICsrKysrKysrKysrKysrKysrKysrKy0KIHNyYy9pbmNsdWRlL2NvbW1hbmRzL3Ry aWdnZXIuaCAgICAgICAgICAgIHwgIDE4ICsKIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZm9y ZWlnbl9rZXkub3V0IHwgMTI2ICsrKysrCiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9mb3JlaWduX2tl eS5zcWwgICAgICB8IDExOCArKysrKwogc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3Qg ICAgICAgICAgfCAgIDMgKwogNiBmaWxlcyBjaGFuZ2VkLCA5NjAgaW5zZXJ0aW9ucygrKSwgNCBk ZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy90cmlnZ2VyLmMg Yi9zcmMvYmFja2VuZC9jb21tYW5kcy90cmlnZ2VyLmMKaW5kZXggNjU5Njg0M2E4ZDguLjRiYzMx Y2FiZmYyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy90cmlnZ2VyLmMKKysrIGIv c3JjL2JhY2tlbmQvY29tbWFuZHMvdHJpZ2dlci5jCkBAIC0zODkzLDYgKzM4OTMsOCBAQCB0eXBl ZGVmIHN0cnVjdCBBZnRlclRyaWdnZXJzRGF0YQogCS8qIHBlci1zdWJ0cmFuc2FjdGlvbi1sZXZl bCBkYXRhOiAqLwogCUFmdGVyVHJpZ2dlcnNUcmFuc0RhdGEgKnRyYW5zX3N0YWNrOwkvKiBhcnJh eSBvZiBzdHJ1Y3RzIHNob3duIGJlbG93ICovCiAJaW50CQkJbWF4dHJhbnNkZXB0aDsJLyogYWxs b2NhdGVkIGxlbiBvZiBhYm92ZSBhcnJheSAqLworCisJTGlzdAkgICAqYmF0Y2hfY2FsbGJhY2tz OwkvKiBMaXN0IG9mIEFmdGVyVHJpZ2dlckNhbGxiYWNrSXRlbSAqLwogfSBBZnRlclRyaWdnZXJz RGF0YTsKIAogc3RydWN0IEFmdGVyVHJpZ2dlcnNRdWVyeURhdGEKQEAgLTM5MjksNiArMzkzMSwx MyBAQCBzdHJ1Y3QgQWZ0ZXJUcmlnZ2Vyc1RhYmxlRGF0YQogCVR1cGxlVGFibGVTbG90ICpzdG9y ZXNsb3Q7CS8qIGZvciBjb252ZXJ0aW5nIHRvIHR1cGxlc3RvcmUncyBmb3JtYXQgKi8KIH07CiAK Ky8qIEVudHJ5IGluIGFmdGVyVHJpZ2dlcnMuYmF0Y2hfY2FsbGJhY2tzICovCit0eXBlZGVmIHN0 cnVjdCBBZnRlclRyaWdnZXJDYWxsYmFja0l0ZW0KK3sKKwlBZnRlclRyaWdnZXJCYXRjaENhbGxi YWNrIGNhbGxiYWNrOworCXZvaWQJICAgKmFyZzsKK30gQWZ0ZXJUcmlnZ2VyQ2FsbGJhY2tJdGVt OworCiBzdGF0aWMgQWZ0ZXJUcmlnZ2Vyc0RhdGEgYWZ0ZXJUcmlnZ2VyczsKIAogc3RhdGljIHZv aWQgQWZ0ZXJUcmlnZ2VyRXhlY3V0ZShFU3RhdGUgKmVzdGF0ZSwKQEAgLTM5NjQsNiArMzk3Myw3 IEBAIHN0YXRpYyBTZXRDb25zdHJhaW50U3RhdGUgU2V0Q29uc3RyYWludFN0YXRlQWRkSXRlbShT ZXRDb25zdHJhaW50U3RhdGUgc3RhdGUsCiAJCQkJCQkJCQkJCQkJT2lkIHRnb2lkLCBib29sIHRn aXNkZWZlcnJlZCk7CiBzdGF0aWMgdm9pZCBjYW5jZWxfcHJpb3Jfc3RtdF90cmlnZ2VycyhPaWQg cmVsaWQsIENtZFR5cGUgY21kVHlwZSwgaW50IHRnZXZlbnQpOwogCitzdGF0aWMgdm9pZCBGaXJl QWZ0ZXJUcmlnZ2VyQmF0Y2hDYWxsYmFja3Modm9pZCk7CiAKIC8qCiAgKiBHZXQgdGhlIEZEVyB0 dXBsZXN0b3JlIGZvciB0aGUgY3VycmVudCB0cmlnZ2VyIHF1ZXJ5IGxldmVsLCBjcmVhdGluZyBp dApAQCAtNTA4OSw2ICs1MDk5LDcgQEAgQWZ0ZXJUcmlnZ2VyQmVnaW5YYWN0KHZvaWQpCiAJICov CiAJYWZ0ZXJUcmlnZ2Vycy5maXJpbmdfY291bnRlciA9IChDb21tYW5kSWQpIDE7CS8qIG11c3Ru J3QgYmUgMCAqLwogCWFmdGVyVHJpZ2dlcnMucXVlcnlfZGVwdGggPSAtMTsKKwlhZnRlclRyaWdn ZXJzLmJhdGNoX2NhbGxiYWNrcyA9IE5JTDsKIAogCS8qCiAJICogVmVyaWZ5IHRoYXQgdGhlcmUg aXMgbm8gbGVmdG92ZXIgc3RhdGUgcmVtYWluaW5nLiAgSWYgdGhlc2UgYXNzZXJ0aW9ucwpAQCAt NTIxMCw2ICs1MjIxLDE1IEBAIEFmdGVyVHJpZ2dlckVuZFF1ZXJ5KEVTdGF0ZSAqZXN0YXRlKQog CQkJYnJlYWs7CiAJfQogCisJLyoKKwkgKiBGaXJlIGJhdGNoIGNhbGxiYWNrcyBiZWZvcmUgcmVs ZWFzaW5nIHF1ZXJ5LWxldmVsIHN0b3JhZ2UgYW5kIGJlZm9yZQorCSAqIGRlY3JlbWVudGluZyBx dWVyeV9kZXB0aC4gIENhbGxiYWNrcyBtYXkgZG8gcmVhbCB3b3JrIChpbmRleCBwcm9iZXMsCisJ ICogZXJyb3IgcmVwb3J0aW5nKSBhbmQgcmVseSBvbiBxdWVyeV9kZXB0aCBzdGlsbCByZWZsZWN0 aW5nIHRoZSBjdXJyZW50CisJICogYmF0Y2ggbGV2ZWwgc28gdGhhdCBuZXN0ZWQgY2FsbHMgZnJv bSBTUEkgaW5zaWRlIEFGVEVSIHRyaWdnZXJzIGFyZQorCSAqIGNvcnJlY3RseSBzdXBwcmVzc2Vk IGJ5IEZpcmVBZnRlclRyaWdnZXJCYXRjaENhbGxiYWNrcydzIGRlcHRoIGd1YXJkLgorCSAqLwor CUZpcmVBZnRlclRyaWdnZXJCYXRjaENhbGxiYWNrcygpOworCiAJLyogUmVsZWFzZSBxdWVyeS1s ZXZlbC1sb2NhbCBzdG9yYWdlLCBpbmNsdWRpbmcgdHVwbGVzdG9yZXMgaWYgYW55ICovCiAJQWZ0 ZXJUcmlnZ2VyRnJlZVF1ZXJ5KCZhZnRlclRyaWdnZXJzLnF1ZXJ5X3N0YWNrW2FmdGVyVHJpZ2dl cnMucXVlcnlfZGVwdGhdKTsKIApAQCAtNTMxNyw2ICs1MzM3LDkgQEAgQWZ0ZXJUcmlnZ2VyRmly ZURlZmVycmVkKHZvaWQpCiAJCQlicmVhazsJCQkJLyogYWxsIGZpcmVkICovCiAJfQogCisJLyog Rmx1c2ggYW55IGZhc3QtcGF0aCBiYXRjaGVzIGFjY3VtdWxhdGVkIGJ5IHRoZSB0cmlnZ2VycyBq dXN0IGZpcmVkLiAqLworCUZpcmVBZnRlclRyaWdnZXJCYXRjaENhbGxiYWNrcygpOworCiAJLyoK IAkgKiBXZSBkb24ndCBib3RoZXIgZnJlZWluZyB0aGUgZXZlbnQgbGlzdCwgc2luY2UgaXQgd2ls bCBnbyBhd2F5IGFueXdheQogCSAqIChhbmQgbW9yZSBlZmZpY2llbnRseSB0aGFuIHZpYSBwZnJl ZSkgaW4gQWZ0ZXJUcmlnZ2VyRW5kWGFjdC4KQEAgLTYwNTksNiArNjA4MiwxMSBAQCBBZnRlclRy aWdnZXJTZXRTdGF0ZShDb25zdHJhaW50c1NldFN0bXQgKnN0bXQpCiAJCQkJYnJlYWs7CQkJLyog YWxsIGZpcmVkICovCiAJCX0KIAorCQkvKgorCQkgKiBGbHVzaCBhbnkgZmFzdC1wYXRoIGJhdGNo ZXMgYWNjdW11bGF0ZWQgYnkgdGhlIHRyaWdnZXJzIGp1c3QgZmlyZWQuCisJCSAqLworCQlGaXJl QWZ0ZXJUcmlnZ2VyQmF0Y2hDYWxsYmFja3MoKTsKKwogCQlpZiAoc25hcHNob3Rfc2V0KQogCQkJ UG9wQWN0aXZlU25hcHNob3QoKTsKIAl9CkBAIC02NzU1LDMgKzY3ODMsODAgQEAgY2hlY2tfbW9k aWZpZWRfdmlydHVhbF9nZW5lcmF0ZWQoVHVwbGVEZXNjIHR1cGRlc2MsIEhlYXBUdXBsZSB0dXBs ZSkKIAogCXJldHVybiB0dXBsZTsKIH0KKworLyoKKyAqIFJlZ2lzdGVyQWZ0ZXJUcmlnZ2VyQmF0 Y2hDYWxsYmFjaworICoJCVJlZ2lzdGVyIGEgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gdGhl IGN1cnJlbnQgdHJpZ2dlci1maXJpbmcKKyAqCQliYXRjaCBjb21wbGV0ZXMuCisgKgorICogTXVz dCBiZSBjYWxsZWQgZnJvbSB3aXRoaW4gYSB0cmlnZ2VyIGZ1bmN0aW9uJ3MgZXhlY3V0aW9uIGNv bnRleHQKKyAqIChpLmUuLCB3aGlsZSBhZnRlclRyaWdnZXJzIHN0YXRlIGlzIGFjdGl2ZSkuCisg KgorICogVGhlIGNhbGxiYWNrIGxpc3QgaXMgY2xlYXJlZCBhZnRlciBpbnZvY2F0aW9uLCBzbyB0 aGUgY2FsbGVyIG11c3QKKyAqIHJlLXJlZ2lzdGVyIGZvciBlYWNoIG5ldyBiYXRjaCBpZiBuZWVk ZWQuCisgKi8KK3ZvaWQKK1JlZ2lzdGVyQWZ0ZXJUcmlnZ2VyQmF0Y2hDYWxsYmFjayhBZnRlclRy aWdnZXJCYXRjaENhbGxiYWNrIGNhbGxiYWNrLAorCQkJCQkJCQkgIHZvaWQgKmFyZykKK3sKKwlB ZnRlclRyaWdnZXJDYWxsYmFja0l0ZW0gKml0ZW07CisJTWVtb3J5Q29udGV4dCBvbGRjeHQ7CisK KwkvKgorCSAqIEFsbG9jYXRlIGluIFRvcFRyYW5zYWN0aW9uQ29udGV4dCBzbyB0aGUgaXRlbSBz dXJ2aXZlcyBmb3IgdGhlIGR1cmF0aW9uCisJICogb2YgdGhlIGJhdGNoLCB3aGljaCBtYXkgc3Bh biBtdWx0aXBsZSB0cmlnZ2VyIGludm9jYXRpb25zLgorCSAqCisJICogTXVzdCBiZSBjYWxsZWQg d2hpbGUgYWZ0ZXJUcmlnZ2VycyBpcyBhY3RpdmUgKHF1ZXJ5X2RlcHRoID49IDApOworCSAqIGNh bGxiYWNrcyByZWdpc3RlcmVkIG91dHNpZGUgYSB0cmlnZ2VyLWZpcmluZyBjb250ZXh0IHdvdWxk IG5ldmVyIGZpcmUuCisJICovCisJQXNzZXJ0KGFmdGVyVHJpZ2dlcnMucXVlcnlfZGVwdGggPj0g MCk7CisJb2xkY3h0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKFRvcFRyYW5zYWN0aW9uQ29udGV4 dCk7CisJaXRlbSA9IHBhbGxvYyhzaXplb2YoQWZ0ZXJUcmlnZ2VyQ2FsbGJhY2tJdGVtKSk7CisJ aXRlbS0+Y2FsbGJhY2sgPSBjYWxsYmFjazsKKwlpdGVtLT5hcmcgPSBhcmc7CisJYWZ0ZXJUcmln Z2Vycy5iYXRjaF9jYWxsYmFja3MgPQorCQlsYXBwZW5kKGFmdGVyVHJpZ2dlcnMuYmF0Y2hfY2Fs bGJhY2tzLCBpdGVtKTsKKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY3h0KTsKK30KKworLyoK KyAqIEZpcmVBZnRlclRyaWdnZXJCYXRjaENhbGxiYWNrcworICoJCUludm9rZSBhbmQgY2xlYXIg YWxsIHJlZ2lzdGVyZWQgYmF0Y2ggY2FsbGJhY2tzLgorICoKKyAqIE9ubHkgZmlyZXMgYXQgdGhl IG91dGVybW9zdCBxdWVyeSBsZXZlbCAocXVlcnlfZGVwdGggPT0gMCkgb3IgZnJvbQorICogdG9w LWxldmVsIG9wZXJhdGlvbnMgKHF1ZXJ5X2RlcHRoID09IC0xLCBlLmcuIEFmdGVyVHJpZ2dlckZp cmVEZWZlcnJlZAorICogYXQgQ09NTUlUKS4gIE5lc3RlZCBxdWVyaWVzIGZyb20gU1BJIGluc2lk ZSBBRlRFUiB0cmlnZ2VycyBydW4gYXQKKyAqIGRlcHRoID4gMCBhbmQgbXVzdCBub3QgdGVhciBk b3duIHJlc291cmNlcyB0aGUgb3V0ZXIgYmF0Y2ggc3RpbGwgbmVlZHMuCisgKi8KK3N0YXRpYyB2 b2lkCitGaXJlQWZ0ZXJUcmlnZ2VyQmF0Y2hDYWxsYmFja3Modm9pZCkKK3sKKwlMaXN0Q2VsbCAg ICpsYzsKKworCWlmIChhZnRlclRyaWdnZXJzLnF1ZXJ5X2RlcHRoID4gMCkKKwkJcmV0dXJuOwor CisJZm9yZWFjaChsYywgYWZ0ZXJUcmlnZ2Vycy5iYXRjaF9jYWxsYmFja3MpCisJeworCQlBZnRl clRyaWdnZXJDYWxsYmFja0l0ZW0gKml0ZW0gPSBsZmlyc3QobGMpOworCisJCWl0ZW0tPmNhbGxi YWNrKGl0ZW0tPmFyZyk7CisJfQorCisJbGlzdF9mcmVlX2RlZXAoYWZ0ZXJUcmlnZ2Vycy5iYXRj aF9jYWxsYmFja3MpOworCWFmdGVyVHJpZ2dlcnMuYmF0Y2hfY2FsbGJhY2tzID0gTklMOworfQor CisvKgorICogQWZ0ZXJUcmlnZ2VyQmF0Y2hJc0FjdGl2ZQorICoJCVJldHVybnMgdHJ1ZSBpZiB3 ZSdyZSBpbnNpZGUgYSBxdWVyeS1sZXZlbCB0cmlnZ2VyIGJhdGNoIHdoZXJlCisgKgkJcmVnaXN0 ZXJlZCBiYXRjaCBjYWxsYmFja3Mgd2lsbCBhY3R1YWxseSBiZSBpbnZva2VkLgorICoKKyAqIFRo aXMgaXMgZmFsc2UgZHVyaW5nIHZhbGlkYXRlRm9yZWlnbktleUNvbnN0cmFpbnQoKSwgd2hpY2gg Y2FsbHMKKyAqIFJJIHRyaWdnZXIgZnVuY3Rpb25zIGRpcmVjdGx5IG91dHNpZGUgdGhlIGFmdGVy LXRyaWdnZXIgZnJhbWV3b3JrLgorICovCitib29sCitBZnRlclRyaWdnZXJCYXRjaElzQWN0aXZl KHZvaWQpCit7CisJcmV0dXJuIGFmdGVyVHJpZ2dlcnMucXVlcnlfZGVwdGggPj0gMDsKK30KZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9yaV90cmlnZ2Vycy5jIGIvc3JjL2JhY2tl bmQvdXRpbHMvYWR0L3JpX3RyaWdnZXJzLmMKaW5kZXggMmRlMDhkYTY1MzkuLmI2MGU3OTU1NjM2 IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvcmlfdHJpZ2dlcnMuYworKysgYi9z cmMvYmFja2VuZC91dGlscy9hZHQvcmlfdHJpZ2dlcnMuYwpAQCAtMTk5LDYgKzE5OSw0OCBAQCB0 eXBlZGVmIHN0cnVjdCBSSV9Db21wYXJlSGFzaEVudHJ5CiAJRm1nckluZm8JY2FzdF9mdW5jX2Zp bmZvOwkvKiBpbiBjYXNlIHdlIG11c3QgY29lcmNlIGlucHV0ICovCiB9IFJJX0NvbXBhcmVIYXNo RW50cnk7CiAKKy8qCisgKiBNYXhpbXVtIG51bWJlciBvZiBGSyByb3dzIGJ1ZmZlcmVkIGJlZm9y ZSBmbHVzaGluZy4KKyAqCisgKiBMYXJnZXIgYmF0Y2hlcyBhbW9ydGl6ZSBwZXItZmx1c2ggb3Zl cmhlYWQgYW5kIGxldCB0aGUgU0tfU0VBUkNIQVJSQVkKKyAqIHBhdGggd2FsayBtb3JlIGxlYWYg cGFnZXMgaW4gYSBzaW5nbGUgc29ydGVkIHRyYXZlcnNhbC4gIEJ1dCBlYWNoCisgKiBidWZmZXJl ZCByb3cgaXMgYSBtYXRlcmlhbGl6ZWQgSGVhcFR1cGxlIGluIGZsdXNoX2N4dCwgYW5kIHRoZSBt YXRjaGVkW10KKyAqIHNjYW4gaW4gcmlfRmFzdFBhdGhGbHVzaEFycmF5KCkgaXMgTyhiYXRjaF9z aXplKSBwZXIgaW5kZXggbWF0Y2guCisgKiBCZW5jaG1hcmtpbmcgc2hvd2VkIGxpdHRsZSBkaWZm ZXJlbmNlIGJldHdlZW4gMTYgYW5kIDY0LCB3aXRoIDI1NgorICogY29uc2lzdGVudGx5IHNsb3dl ci4gIDY0IGlzIGEgcmVhc29uYWJsZSBkZWZhdWx0LgorICovCisjZGVmaW5lIFJJX0ZBU1RQQVRI X0JBVENIX1NJWkUJNjQKKworLyoKKyAqIFJJX0Zhc3RQYXRoRW50cnkKKyAqCQlQZXItY29uc3Ry YWludCBjYWNoZSBvZiByZXNvdXJjZXMgbmVlZGVkIGJ5IHJpX0Zhc3RQYXRoQmF0Y2hGbHVzaCgp LgorICoKKyAqIE9uZSBlbnRyeSBwZXIgY29uc3RyYWludCwga2V5ZWQgYnkgcGdfY29uc3RyYWlu dCBPSUQuICBDcmVhdGVkIGxhemlseQorICogYnkgcmlfRmFzdFBhdGhHZXRFbnRyeSgpIG9uIGZp cnN0IHVzZSB3aXRoaW4gYSB0cmlnZ2VyLWZpcmluZyBiYXRjaAorICogYW5kIHRvcm4gZG93biBi eSByaV9GYXN0UGF0aFRlYXJkb3duKCkgYXQgYmF0Y2ggZW5kLgorICoKKyAqIEZLIHR1cGxlcyBh cmUgYnVmZmVyZWQgaW4gYmF0Y2hbXSBhY3Jvc3MgdHJpZ2dlciBpbnZvY2F0aW9ucyBhbmQKKyAq IGZsdXNoZWQgd2hlbiB0aGUgYnVmZmVyIGZpbGxzIG9yIHRoZSBiYXRjaCBlbmRzLgorICovCit0 eXBlZGVmIHN0cnVjdCBSSV9GYXN0UGF0aEVudHJ5Cit7CisJT2lkCQkJY29ub2lkOwkJCS8qIGhh c2gga2V5OiBwZ19jb25zdHJhaW50IE9JRCAqLworCU9pZAkJCWZrX3JlbGlkOwkJLyogZm9yIHJp X0Zhc3RQYXRoRW5kQmF0Y2goKSAqLworCVJlbGF0aW9uCXBrX3JlbDsKKwlSZWxhdGlvbglpZHhf cmVsOworCVR1cGxlVGFibGVTbG90ICpwa19zbG90OworCVR1cGxlVGFibGVTbG90ICpma19zbG90 OworCU1lbW9yeUNvbnRleHQgZmx1c2hfY3h0OwkvKiBzaG9ydC1saXZlZCBjb250ZXh0IGZvciBw ZXItZmx1c2ggd29yayAqLworCisJLyoKKwkgKiBUT0RPOiBiYXRjaFtdIGlzIEhlYXBUdXBsZVtd IGJlY2F1c2UgdGhlIEFGVEVSIHRyaWdnZXIgbWFjaGluZXJ5CisJICogY3VycmVudGx5IHBhc3Nl cyB0dXBsZXMgYXMgSGVhcFR1cGxlcy4gIE9uY2UgdHJpZ2dlciBpbmZyYXN0cnVjdHVyZSBpcwor CSAqIHNsb3RpZmllZCwgdGhpcyBzaG91bGQgdXNlIGEgc2xvdCBhcnJheSBvciB3aGF0ZXZlciBi YXRjaGVkIHR1cGxlCisJICogc3RvcmFnZSBhYnN0cmFjdGlvbiBleGlzdHMgYXQgdGhhdCBwb2lu dCB0byBiZSBUQU0tYWdub3N0aWMuCisJICovCisJSGVhcFR1cGxlCWJhdGNoW1JJX0ZBU1RQQVRI X0JBVENIX1NJWkVdOworCWludAkJCWJhdGNoX2NvdW50OworfSBSSV9GYXN0UGF0aEVudHJ5Owog CiAvKgogICogTG9jYWwgZGF0YQpAQCAtMjA4LDYgKzI1MCw4IEBAIHN0YXRpYyBIVEFCICpyaV9x dWVyeV9jYWNoZSA9IE5VTEw7CiBzdGF0aWMgSFRBQiAqcmlfY29tcGFyZV9jYWNoZSA9IE5VTEw7 CiBzdGF0aWMgZGNsaXN0X2hlYWQgcmlfY29uc3RyYWludF9jYWNoZV92YWxpZF9saXN0OwogCitz dGF0aWMgSFRBQiAqcmlfZmFzdHBhdGhfY2FjaGUgPSBOVUxMOworc3RhdGljIGJvb2wgcmlfZmFz dHBhdGhfY2FsbGJhY2tfcmVnaXN0ZXJlZCA9IGZhbHNlOwogCiAvKgogICogTG9jYWwgZnVuY3Rp b24gcHJvdG90eXBlcwpAQCAtMjU4LDYgKzMwMiwxNiBAQCBzdGF0aWMgYm9vbCByaV9QZXJmb3Jt Q2hlY2soY29uc3QgUklfQ29uc3RyYWludEluZm8gKnJpaW5mbywKIAkJCQkJCQlib29sIGRldGVj dE5ld1Jvd3MsIGludCBleHBlY3RfT0spOwogc3RhdGljIHZvaWQgcmlfRmFzdFBhdGhDaGVjayhj b25zdCBSSV9Db25zdHJhaW50SW5mbyAqcmlpbmZvLAogCQkJCQkJCSBSZWxhdGlvbiBma19yZWws IFR1cGxlVGFibGVTbG90ICpuZXdzbG90KTsKK3N0YXRpYyB2b2lkIHJpX0Zhc3RQYXRoQmF0Y2hB ZGQoY29uc3QgUklfQ29uc3RyYWludEluZm8gKnJpaW5mbywKKwkJCQkJCQkJUmVsYXRpb24gZmtf cmVsLCBUdXBsZVRhYmxlU2xvdCAqbmV3c2xvdCk7CitzdGF0aWMgaW50CXJpX0Zhc3RQYXRoRmx1 c2hBcnJheShSSV9GYXN0UGF0aEVudHJ5ICpmcGVudHJ5LCBUdXBsZVRhYmxlU2xvdCAqZmtfc2xv dCwKKwkJCQkJCQkJICBjb25zdCBSSV9Db25zdHJhaW50SW5mbyAqcmlpbmZvLCBSZWxhdGlvbiBm a19yZWwsCisJCQkJCQkJCSAgU25hcHNob3Qgc25hcHNob3QsIEluZGV4U2NhbkRlc2Mgc2NhbmRl c2MpOworc3RhdGljIGludAlyaV9GYXN0UGF0aEZsdXNoTG9vcChSSV9GYXN0UGF0aEVudHJ5ICpm cGVudHJ5LCBUdXBsZVRhYmxlU2xvdCAqZmtfc2xvdCwKKwkJCQkJCQkJIGNvbnN0IFJJX0NvbnN0 cmFpbnRJbmZvICpyaWluZm8sIFJlbGF0aW9uIGZrX3JlbCwKKwkJCQkJCQkJIFNuYXBzaG90IHNu YXBzaG90LCBJbmRleFNjYW5EZXNjIHNjYW5kZXNjKTsKK3N0YXRpYyB2b2lkIHJpX0Zhc3RQYXRo QmF0Y2hGbHVzaChSSV9GYXN0UGF0aEVudHJ5ICpmcGVudHJ5LAorCQkJCQkJCQkgIFJlbGF0aW9u IGZrX3JlbCk7CiBzdGF0aWMgYm9vbCByaV9GYXN0UGF0aFByb2JlT25lKFJlbGF0aW9uIHBrX3Jl bCwgUmVsYXRpb24gaWR4X3JlbCwKIAkJCQkJCQkJSW5kZXhTY2FuRGVzYyBzY2FuZGVzYywgVHVw bGVUYWJsZVNsb3QgKnNsb3QsCiAJCQkJCQkJCVNuYXBzaG90IHNuYXBzaG90LCBjb25zdCBSSV9D b25zdHJhaW50SW5mbyAqcmlpbmZvLApAQCAtMjgwLDYgKzMzNCwxMCBAQCBwZ19ub3JldHVybiBz dGF0aWMgdm9pZCByaV9SZXBvcnRWaW9sYXRpb24oY29uc3QgUklfQ29uc3RyYWludEluZm8gKnJp aW5mbywKIAkJCQkJCQkJCQkgICBSZWxhdGlvbiBwa19yZWwsIFJlbGF0aW9uIGZrX3JlbCwKIAkJ CQkJCQkJCQkgICBUdXBsZVRhYmxlU2xvdCAqdmlvbGF0b3JzbG90LCBUdXBsZURlc2MgdHVwZGVz YywKIAkJCQkJCQkJCQkgICBpbnQgcXVlcnlubywgYm9vbCBpc19yZXN0cmljdCwgYm9vbCBwYXJ0 Z29uZSk7CitzdGF0aWMgUklfRmFzdFBhdGhFbnRyeSAqcmlfRmFzdFBhdGhHZXRFbnRyeShjb25z dCBSSV9Db25zdHJhaW50SW5mbyAqcmlpbmZvLAorCQkJCQkJCQkJCQkgUmVsYXRpb24gZmtfcmVs KTsKK3N0YXRpYyB2b2lkIHJpX0Zhc3RQYXRoRW5kQmF0Y2godm9pZCAqYXJnKTsKK3N0YXRpYyB2 b2lkIHJpX0Zhc3RQYXRoVGVhcmRvd24odm9pZCk7CiAKIAogLyoKQEAgLTM5MCwxMiArNDQ4LDIy IEBAIFJJX0ZLZXlfY2hlY2soVHJpZ2dlckRhdGEgKnRyaWdkYXRhKQogCSAqIGxvY2suICBUaGlz IGlzIHNlbWFudGljYWxseSBlcXVpdmFsZW50IHRvIHRoZSBTUEkgcGF0aCBiZWxvdyBidXQgYXZv aWRzCiAJICogdGhlIHBlci1yb3cgZXhlY3V0b3Igb3ZlcmhlYWQuCiAJICoKLQkgKiByaV9GYXN0 UGF0aENoZWNrKCkgcmVwb3J0cyB0aGUgdmlvbGF0aW9uIGl0c2VsZiAodmlhIGVyZXBvcnQpIGlm IG5vCi0JICogbWF0Y2hpbmcgUEsgcm93IGlzIGZvdW5kLCBzbyBpdCBvbmx5IHJldHVybnMgb24g c3VjY2Vzcy4KKwkgKiByaV9GYXN0UGF0aEJhdGNoQWRkKCkgYW5kIHJpX0Zhc3RQYXRoQ2hlY2so KSByZXBvcnQgdGhlIHZpb2xhdGlvbgorCSAqIHRoZW1zZWx2ZXMgaWYgbm8gbWF0Y2hpbmcgUEsg cm93IGlzIGZvdW5kLCBzbyB0aGV5IG9ubHkgcmV0dXJuIG9uCisJICogc3VjY2Vzcy4KIAkgKi8K IAlpZiAocmlfZmFzdHBhdGhfaXNfYXBwbGljYWJsZShyaWluZm8pKQogCXsKLQkJcmlfRmFzdFBh dGhDaGVjayhyaWluZm8sIGZrX3JlbCwgbmV3c2xvdCk7CisJCWlmIChBZnRlclRyaWdnZXJCYXRj aElzQWN0aXZlKCkpCisJCXsKKwkJCS8qIEJhdGNoZWQgcGF0aDogYnVmZmVyIGFuZCBwcm9iZSBp biBncm91cHMgKi8KKwkJCXJpX0Zhc3RQYXRoQmF0Y2hBZGQocmlpbmZvLCBma19yZWwsIG5ld3Ns b3QpOworCQl9CisJCWVsc2UKKwkJeworCQkJLyogQUxURVIgVEFCTEUgdmFsaWRhdGlvbjogcGVy LXJvdywgbm8gY2FjaGUgKi8KKwkJCXJpX0Zhc3RQYXRoQ2hlY2socmlpbmZvLCBma19yZWwsIG5l d3Nsb3QpOworCQl9CiAJCXJldHVybiBQb2ludGVyR2V0RGF0dW0oTlVMTCk7CiAJfQogCkBAIC0y NjkwLDEwICsyNzU4LDE0IEBAIHJpX1BlcmZvcm1DaGVjayhjb25zdCBSSV9Db25zdHJhaW50SW5m byAqcmlpbmZvLAogCiAvKgogICogcmlfRmFzdFBhdGhDaGVjawotICoJCVBlcmZvcm0gRksgZXhp c3RlbmNlIGNoZWNrIHZpYSBkaXJlY3QgaW5kZXggcHJvYmUsIGJ5cGFzc2luZyBTUEkuCisgKgkJ UGVyZm9ybSBwZXIgcm93IEZLIGV4aXN0ZW5jZSBjaGVjayB2aWEgZGlyZWN0IGluZGV4IHByb2Jl LAorICoJCWJ5cGFzc2luZyBTUEkuCiAgKgogICogSWYgbm8gbWF0Y2hpbmcgUEsgcm93IGV4aXN0 cywgcmVwb3J0IHRoZSB2aW9sYXRpb24gdmlhIHJpX1JlcG9ydFZpb2xhdGlvbigpLAogICogb3Ro ZXJ3aXNlLCB0aGUgZnVuY3Rpb24gcmV0dXJucyBub3JtYWxseS4KKyAqCisgKiBOb3RlOiBUaGlz IGlzIG9ubHkgdXNlZCBieSB0aGUgQUxURVIgVEFCTEUgdmFsaWRhdGlvbiBwYXRoLiBPdGhlciBw YXRocyB1c2UKKyAqIHJpX0Zhc3RQYXRoQmF0Y2hBZGQoKS4KICAqLwogc3RhdGljIHZvaWQKIHJp X0Zhc3RQYXRoQ2hlY2soY29uc3QgUklfQ29uc3RyYWludEluZm8gKnJpaW5mbywKQEAgLTI3NjEs NiArMjgzMywzMjcgQEAgcmlfRmFzdFBhdGhDaGVjayhjb25zdCBSSV9Db25zdHJhaW50SW5mbyAq cmlpbmZvLAogCXRhYmxlX2Nsb3NlKHBrX3JlbCwgTm9Mb2NrKTsKIH0KIAorLyoKKyAqIHJpX0Zh c3RQYXRoQmF0Y2hBZGQKKyAqCQlCdWZmZXIgYSBGSyByb3cgZm9yIGJhdGNoZWQgcHJvYmluZy4K KyAqCisgKiBBZGRzIHRoZSByb3cgdG8gdGhlIGJhdGNoIGJ1ZmZlci4gIFdoZW4gdGhlIGJ1ZmZl ciBpcyBmdWxsLCBmbHVzaGVzIGFsbAorICogYnVmZmVyZWQgcm93cyBieSBwcm9iaW5nIHRoZSBQ SyBpbmRleC4gIEFueSB2aW9sYXRpb24gaXMgcmVwb3J0ZWQKKyAqIGltbWVkaWF0ZWx5IGR1cmlu ZyB0aGUgZmx1c2ggdmlhIHJpX1JlcG9ydFZpb2xhdGlvbiAod2hpY2ggZG9lcyBub3QgcmV0dXJu KS4KKyAqCisgKiBVc2VzIHRoZSBwZXItYmF0Y2ggY2FjaGUgKFJJX0Zhc3RQYXRoRW50cnkpIHRv IGF2b2lkIHBlci1yb3cgcmVsYXRpb24KKyAqIG9wZW4vY2xvc2UsIHNsb3QgY3JlYXRpb24sIGV0 Yy4KKyAqCisgKiBUaGUgYmF0Y2ggaXMgYWxzbyBmbHVzaGVkIGF0IGVuZCBvZiB0cmlnZ2VyLWZp cmluZyBjeWNsZSB2aWEKKyAqIHJpX0Zhc3RQYXRoRW5kQmF0Y2goKS4KKyAqLworc3RhdGljIHZv aWQKK3JpX0Zhc3RQYXRoQmF0Y2hBZGQoY29uc3QgUklfQ29uc3RyYWludEluZm8gKnJpaW5mbywK KwkJCQkJUmVsYXRpb24gZmtfcmVsLCBUdXBsZVRhYmxlU2xvdCAqbmV3c2xvdCkKK3sKKwlSSV9G YXN0UGF0aEVudHJ5ICpmcGVudHJ5ID0gcmlfRmFzdFBhdGhHZXRFbnRyeShyaWluZm8sIGZrX3Jl bCk7CisJTWVtb3J5Q29udGV4dCBvbGRjeHQ7CisKKwlvbGRjeHQgPSBNZW1vcnlDb250ZXh0U3dp dGNoVG8oZnBlbnRyeS0+Zmx1c2hfY3h0KTsKKwlmcGVudHJ5LT5iYXRjaFtmcGVudHJ5LT5iYXRj aF9jb3VudF0gPQorCQlFeGVjQ29weVNsb3RIZWFwVHVwbGUobmV3c2xvdCk7CisJZnBlbnRyeS0+ YmF0Y2hfY291bnQrKzsKKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY3h0KTsKKworCWlmIChm cGVudHJ5LT5iYXRjaF9jb3VudCA+PSBSSV9GQVNUUEFUSF9CQVRDSF9TSVpFKQorCQlyaV9GYXN0 UGF0aEJhdGNoRmx1c2goZnBlbnRyeSwgZmtfcmVsKTsKK30KKworLyoKKyAqIHJpX0Zhc3RQYXRo QmF0Y2hGbHVzaAorICoJCUZsdXNoIGFsbCBidWZmZXJlZCBGSyByb3dzIGJ5IHByb2JpbmcgdGhl IFBLIGluZGV4LgorICoKKyAqIERpc3BhdGNoZXMgdG8gcmlfRmFzdFBhdGhGbHVzaEFycmF5KCkg Zm9yIHNpbmdsZS1jb2x1bW4gRktzCisgKiAodXNpbmcgU0tfU0VBUkNIQVJSQVkpIG9yIHJpX0Zh c3RQYXRoRmx1c2hMb29wKCkgZm9yIG11bHRpLWNvbHVtbgorICogRktzIChwZXItcm93IHByb2Jp bmcpLiAgVmlvbGF0aW9ucyBhcmUgcmVwb3J0ZWQgaW1tZWRpYXRlbHkgdmlhCisgKiByaV9SZXBv cnRWaW9sYXRpb24oKSwgd2hpY2ggZG9lcyBub3QgcmV0dXJuLgorICovCitzdGF0aWMgdm9pZAor cmlfRmFzdFBhdGhCYXRjaEZsdXNoKFJJX0Zhc3RQYXRoRW50cnkgKmZwZW50cnksIFJlbGF0aW9u IGZrX3JlbCkKK3sKKwkvKiBSZWxvYWQ7IG1heSBoYXZlIGJlZW4gaW52YWxpZGF0ZWQgc2luY2Ug bGFzdCBiYXRjaCBhY2N1bXVsYXRpb24uICovCisJY29uc3QgUklfQ29uc3RyYWludEluZm8gKnJp aW5mbyA9IHJpX0xvYWRDb25zdHJhaW50SW5mbyhmcGVudHJ5LT5jb25vaWQpOworCVJlbGF0aW9u CXBrX3JlbCA9IGZwZW50cnktPnBrX3JlbDsKKwlSZWxhdGlvbglpZHhfcmVsID0gZnBlbnRyeS0+ aWR4X3JlbDsKKwlUdXBsZVRhYmxlU2xvdCAqZmtfc2xvdCA9IGZwZW50cnktPmZrX3Nsb3Q7CisJ U25hcHNob3QJc25hcHNob3Q7CisJSW5kZXhTY2FuRGVzYyBzY2FuZGVzYzsKKwlPaWQJCQlzYXZl ZF91c2VyaWQ7CisJaW50CQkJc2F2ZWRfc2VjX2NvbnRleHQ7CisJTWVtb3J5Q29udGV4dCBvbGRj eHQ7CisJaW50CQkJdmlvbGF0aW9uX2luZGV4OworCisJaWYgKGZwZW50cnktPmJhdGNoX2NvdW50 ID09IDApCisJCXJldHVybjsKKworCS8qCisJICogQ0NJIGFuZCBzZWN1cml0eSBjb250ZXh0IHN3 aXRjaCBhcmUgZG9uZSBvbmNlIGZvciB0aGUgZW50aXJlIGJhdGNoLgorCSAqIFBlci1yb3cgQ0NJ IGlzIHVubmVjZXNzYXJ5IGJlY2F1c2UgYnkgdGhlIHRpbWUgYSBmbHVzaCBydW5zLCBhbGwgQUZU RVIKKwkgKiB0cmlnZ2VycyBmb3IgdGhlIGJ1ZmZlcmVkIHJvd3MgaGF2ZSBhbHJlYWR5IGZpcmVk ICh0cmlnZ2VyIGludm9jYXRpb25zCisJICogc3RyaWN0bHkgYWx0ZXJuYXRlIHBlciByb3cpLCBz byBhIHNpbmdsZSBDQ0kgYWR2YW5jZXMgcGFzdCBhbGwgdGhlaXIKKwkgKiBlZmZlY3RzLiAgUGVy LXJvdyBzZWN1cml0eSBjb250ZXh0IHN3aXRjaCBpcyB1bm5lY2Vzc2FyeSBiZWNhdXNlIGVhY2gK KwkgKiByb3cncyBwcm9iZSBydW5zIGVudGlyZWx5IGFzIHRoZSBQSyB0YWJsZSBvd25lciwgc2Ft ZSBhcyB0aGUgU1BJIHBhdGgKKwkgKiAtLSB0aGUgb25seSBkaWZmZXJlbmNlIGlzIHRoYXQgdGhl IFNQSSBwYXRoIHNldHMgYW5kIHJlc3RvcmVzIHRoZQorCSAqIGNvbnRleHQgcGVyIHJvdyB3aGVy ZWFzIHdlIGRvIGl0IG9uY2UgYXJvdW5kIHRoZSB3aG9sZSBiYXRjaC4KKwkgKi8KKwlDb21tYW5k Q291bnRlckluY3JlbWVudCgpOworCXNuYXBzaG90ID0gUmVnaXN0ZXJTbmFwc2hvdChHZXRUcmFu c2FjdGlvblNuYXBzaG90KCkpOworCisJLyoKKwkgKiBidWlsZF9pbmRleF9zY2Fua2V5cygpIG1h eSBwYWxsb2MgY2FzdCByZXN1bHRzIGZvciBjcm9zcy10eXBlIEZLcy4gVXNlCisJICogdGhlIGVu dHJ5J3Mgc2hvcnQtbGl2ZWQgZmx1c2ggY29udGV4dCBzbyB0aGVzZSBkb24ndCBhY2N1bXVsYXRl IGFjcm9zcworCSAqIGJhdGNoZXMuCisJICovCisJb2xkY3h0ID0gTWVtb3J5Q29udGV4dFN3aXRj aFRvKGZwZW50cnktPmZsdXNoX2N4dCk7CisKKwlzY2FuZGVzYyA9IGluZGV4X2JlZ2luc2Nhbihw a19yZWwsIGlkeF9yZWwsIHNuYXBzaG90LCBOVUxMLAorCQkJCQkJCSAgIHJpaW5mby0+bmtleXMs IDAsIFNPX05PTkUpOworCisJR2V0VXNlcklkQW5kU2VjQ29udGV4dCgmc2F2ZWRfdXNlcmlkLCAm c2F2ZWRfc2VjX2NvbnRleHQpOworCVNldFVzZXJJZEFuZFNlY0NvbnRleHQoUmVsYXRpb25HZXRG b3JtKHBrX3JlbCktPnJlbG93bmVyLAorCQkJCQkJICAgc2F2ZWRfc2VjX2NvbnRleHQgfAorCQkJ CQkJICAgU0VDVVJJVFlfTE9DQUxfVVNFUklEX0NIQU5HRSB8CisJCQkJCQkgICBTRUNVUklUWV9O T0ZPUkNFX1JMUyk7CisKKwkvKgorCSAqIENoZWNrIHRoYXQgdGhlIGN1cnJlbnQgdXNlciBoYXMg cGVybWlzc2lvbiB0byBhY2Nlc3MgcGtfcmVsLiBEb25lIGhlcmUKKwkgKiByYXRoZXIgdGhhbiBh dCBlbnRyeSBjcmVhdGlvbiBzbyB0aGF0IHBlcm1pc3Npb24gY2hhbmdlcyBiZXR3ZWVuCisJICog Zmx1c2hlcyBhcmUgcmVzcGVjdGVkLCBtYXRjaGluZyB0aGUgcGVyLXJvdyBiZWhhdmlvciBvZiB0 aGUgU1BJIHBhdGgsCisJICogYWxiZWl0IGNoZWNrZWQgb25jZSBwZXIgZmx1c2ggcmF0aGVyIHRo YW4gb25jZSBwZXIgcm93LCBsaWtlIGluCisJICogcmlfRmFzdFBhdGhDaGVjaygpLgorCSAqLwor CXJpX0NoZWNrUGVybWlzc2lvbnMocGtfcmVsKTsKKworCWlmIChyaWluZm8tPmZwbWV0YSA9PSBO VUxMKQorCXsKKwkJLyogUmVsb2FkIHRvIGVuc3VyZSBpdCdzIHZhbGlkLiAqLworCQlyaWluZm8g PSByaV9Mb2FkQ29uc3RyYWludEluZm8ocmlpbmZvLT5jb25zdHJhaW50X2lkKTsKKwkJcmlfcG9w dWxhdGVfZmFzdHBhdGhfbWV0YWRhdGEoKFJJX0NvbnN0cmFpbnRJbmZvICopIHJpaW5mbywKKwkJ CQkJCQkJCSAgZmtfcmVsLCBpZHhfcmVsKTsKKwl9CisJQXNzZXJ0KHJpaW5mby0+ZnBtZXRhKTsK KwlpZiAocmlpbmZvLT5ua2V5cyA9PSAxKQorCQl2aW9sYXRpb25faW5kZXggPSByaV9GYXN0UGF0 aEZsdXNoQXJyYXkoZnBlbnRyeSwgZmtfc2xvdCwgcmlpbmZvLAorCQkJCQkJCQkJCQkJZmtfcmVs LCBzbmFwc2hvdCwgc2NhbmRlc2MpOworCWVsc2UKKwkJdmlvbGF0aW9uX2luZGV4ID0gcmlfRmFz dFBhdGhGbHVzaExvb3AoZnBlbnRyeSwgZmtfc2xvdCwgcmlpbmZvLAorCQkJCQkJCQkJCQkgICBm a19yZWwsIHNuYXBzaG90LCBzY2FuZGVzYyk7CisKKwlTZXRVc2VySWRBbmRTZWNDb250ZXh0KHNh dmVkX3VzZXJpZCwgc2F2ZWRfc2VjX2NvbnRleHQpOworCVVucmVnaXN0ZXJTbmFwc2hvdChzbmFw c2hvdCk7CisJaW5kZXhfZW5kc2NhbihzY2FuZGVzYyk7CisKKwlpZiAodmlvbGF0aW9uX2luZGV4 ID49IDApCisJeworCQlFeGVjU3RvcmVIZWFwVHVwbGUoZnBlbnRyeS0+YmF0Y2hbdmlvbGF0aW9u X2luZGV4XSwgZmtfc2xvdCwgZmFsc2UpOworCQlyaV9SZXBvcnRWaW9sYXRpb24ocmlpbmZvLCBw a19yZWwsIGZrX3JlbCwKKwkJCQkJCSAgIGZrX3Nsb3QsIE5VTEwsCisJCQkJCQkgICBSSV9QTEFO X0NIRUNLX0xPT0tVUFBLLCBmYWxzZSwgZmFsc2UpOworCX0KKworCU1lbW9yeUNvbnRleHRSZXNl dChmcGVudHJ5LT5mbHVzaF9jeHQpOworCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjeHQpOwor CisJLyogUmVzZXQuICovCisJZnBlbnRyeS0+YmF0Y2hfY291bnQgPSAwOworfQorCisvKgorICog cmlfRmFzdFBhdGhGbHVzaExvb3AKKyAqCQlNdWx0aS1jb2x1bW4gZmFsbGJhY2s6IHByb2JlIHRo ZSBpbmRleCBvbmNlIHBlciBidWZmZXJlZCByb3cuCisgKgorICogVXNlZCBmb3IgY29tcG9zaXRl IGZvcmVpZ24ga2V5cyB3aGVyZSBTS19TRUFSQ0hBUlJBWSBkb2VzIG5vdAorICogYXBwbHkuCisg KgorICogUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IHZpb2xhdGluZyByb3cgaW4gdGhl IGJhdGNoIGFycmF5LCBvciAtMSBpZgorICogYWxsIHJvd3MgYXJlIHZhbGlkLgorICovCitzdGF0 aWMgaW50CityaV9GYXN0UGF0aEZsdXNoTG9vcChSSV9GYXN0UGF0aEVudHJ5ICpmcGVudHJ5LCBU dXBsZVRhYmxlU2xvdCAqZmtfc2xvdCwKKwkJCQkJIGNvbnN0IFJJX0NvbnN0cmFpbnRJbmZvICpy aWluZm8sIFJlbGF0aW9uIGZrX3JlbCwKKwkJCQkJIFNuYXBzaG90IHNuYXBzaG90LCBJbmRleFNj YW5EZXNjIHNjYW5kZXNjKQoreworCVJlbGF0aW9uCXBrX3JlbCA9IGZwZW50cnktPnBrX3JlbDsK KwlSZWxhdGlvbglpZHhfcmVsID0gZnBlbnRyeS0+aWR4X3JlbDsKKwlUdXBsZVRhYmxlU2xvdCAq cGtfc2xvdCA9IGZwZW50cnktPnBrX3Nsb3Q7CisJRGF0dW0JCXBrX3ZhbHNbSU5ERVhfTUFYX0tF WVNdOworCWNoYXIJCXBrX251bGxzW0lOREVYX01BWF9LRVlTXTsKKwlTY2FuS2V5RGF0YSBza2V5 W0lOREVYX01BWF9LRVlTXTsKKwlib29sCQlmb3VuZCA9IHRydWU7CisKKwlmb3IgKGludCBpID0g MDsgaSA8IGZwZW50cnktPmJhdGNoX2NvdW50OyBpKyspCisJeworCQlFeGVjU3RvcmVIZWFwVHVw bGUoZnBlbnRyeS0+YmF0Y2hbaV0sIGZrX3Nsb3QsIGZhbHNlKTsKKwkJcmlfRXh0cmFjdFZhbHVl cyhma19yZWwsIGZrX3Nsb3QsIHJpaW5mbywgZmFsc2UsIHBrX3ZhbHMsIHBrX251bGxzKTsKKwkJ YnVpbGRfaW5kZXhfc2NhbmtleXMocmlpbmZvLCBpZHhfcmVsLCBwa192YWxzLCBwa19udWxscywg c2tleSk7CisKKwkJZm91bmQgPSByaV9GYXN0UGF0aFByb2JlT25lKHBrX3JlbCwgaWR4X3JlbCwg c2NhbmRlc2MsIHBrX3Nsb3QsCisJCQkJCQkJCQlzbmFwc2hvdCwgcmlpbmZvLCBza2V5LCByaWlu Zm8tPm5rZXlzKTsKKworCQkvKiBSZXBvcnQgZmlyc3QgdW5tYXRjaGVkIHJvdyAqLworCQlpZiAo IWZvdW5kKQorCQkJcmV0dXJuIGk7CisJfQorCisJLyogQWxsIHBhc3MuICovCisJcmV0dXJuIC0x OworfQorCisvKgorICogcmlfRmFzdFBhdGhGbHVzaEFycmF5CisgKgkJU2luZ2xlLWNvbHVtbiBm YXN0IHBhdGggdXNpbmcgU0tfU0VBUkNIQVJSQVkuCisgKgorICogQnVpbGRzIGFuIGFycmF5IG9m IEZLIHZhbHVlcyBhbmQgZG9lcyBvbmUgaW5kZXggc2NhbiB3aXRoCisgKiBTS19TRUFSQ0hBUlJB WS4gIFRoZSBpbmRleCBBTSBzb3J0cyBhbmQgZGVkdXBsaWNhdGVzIHRoZSBhcnJheQorICogaW50 ZXJuYWxseSwgdGhlbiB3YWxrcyBtYXRjaGluZyBsZWFmIHBhZ2VzIGluIG9yZGVyLiAgRWFjaAor ICogbWF0Y2hlZCBQSyB0dXBsZSBpcyBsb2NrZWQgYW5kIHJlY2hlY2tlZCBhcyBiZWZvcmU7IGEg bWF0Y2hlZFtdCisgKiBiaXRtYXAgdHJhY2tzIHdoaWNoIGJhdGNoIGl0ZW1zIHdlcmUgc2F0aXNm aWVkLgorICoKKyAqIFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBmaXJzdCB2aW9sYXRpbmcgcm93 IGluIHRoZSBiYXRjaCBhcnJheSwgb3IgLTEgaWYKKyAqIGFsbCByb3dzIGFyZSB2YWxpZC4KKyAq Lworc3RhdGljIGludAorcmlfRmFzdFBhdGhGbHVzaEFycmF5KFJJX0Zhc3RQYXRoRW50cnkgKmZw ZW50cnksIFR1cGxlVGFibGVTbG90ICpma19zbG90LAorCQkJCQkgIGNvbnN0IFJJX0NvbnN0cmFp bnRJbmZvICpyaWluZm8sIFJlbGF0aW9uIGZrX3JlbCwKKwkJCQkJICBTbmFwc2hvdCBzbmFwc2hv dCwgSW5kZXhTY2FuRGVzYyBzY2FuZGVzYykKK3sKKwlGYXN0UGF0aE1ldGEgKmZwbWV0YSA9IHJp aW5mby0+ZnBtZXRhOworCVJlbGF0aW9uCXBrX3JlbCA9IGZwZW50cnktPnBrX3JlbDsKKwlSZWxh dGlvbglpZHhfcmVsID0gZnBlbnRyeS0+aWR4X3JlbDsKKwlUdXBsZVRhYmxlU2xvdCAqcGtfc2xv dCA9IGZwZW50cnktPnBrX3Nsb3Q7CisJRGF0dW0JCXNlYXJjaF92YWxzW1JJX0ZBU1RQQVRIX0JB VENIX1NJWkVdOworCWJvb2wJCW1hdGNoZWRbUklfRkFTVFBBVEhfQkFUQ0hfU0laRV07CisJaW50 CQkJbnZhbHMgPSBmcGVudHJ5LT5iYXRjaF9jb3VudDsKKwlEYXR1bQkJcGtfdmFsc1tJTkRFWF9N QVhfS0VZU107CisJY2hhcgkJcGtfbnVsbHNbSU5ERVhfTUFYX0tFWVNdOworCVNjYW5LZXlEYXRh IHNrZXlbMV07CisJRm1nckluZm8gICAqY2FzdF9mdW5jX2ZpbmZvOworCUZtZ3JJbmZvICAgKmVx X29wcl9maW5mbzsKKwlPaWQJCQllbGVtX3R5cGU7CisJaW50MTYJCWVsZW1fbGVuOworCWJvb2wJ CWVsZW1fYnl2YWw7CisJY2hhcgkJZWxlbV9hbGlnbjsKKwlBcnJheVR5cGUgICphcnI7CisKKwlB c3NlcnQoZnBtZXRhKTsKKworCW1lbXNldChtYXRjaGVkLCAwLCBudmFscyAqIHNpemVvZihib29s KSk7CisKKwkvKgorCSAqIEV4dHJhY3QgRksgdmFsdWVzLCBjYXN0aW5nIHRvIHRoZSBvcGVyYXRv cidzIGV4cGVjdGVkIGlucHV0IHR5cGUgaWYKKwkgKiBuZWVkZWQgKGUuZy4gaW50OCBGSyAtPiBp bnQ0IGZvciBpbnQ0OGVxKS4KKwkgKi8KKwljYXN0X2Z1bmNfZmluZm8gPSAmZnBtZXRhLT5jYXN0 X2Z1bmNfZmluZm9bMF07CisJZXFfb3ByX2ZpbmZvID0gJmZwbWV0YS0+ZXFfb3ByX2ZpbmZvWzBd OworCWZvciAoaW50IGkgPSAwOyBpIDwgbnZhbHM7IGkrKykKKwl7CisJCUV4ZWNTdG9yZUhlYXBU dXBsZShmcGVudHJ5LT5iYXRjaFtpXSwgZmtfc2xvdCwgZmFsc2UpOworCQlyaV9FeHRyYWN0VmFs dWVzKGZrX3JlbCwgZmtfc2xvdCwgcmlpbmZvLCBmYWxzZSwgcGtfdmFscywgcGtfbnVsbHMpOwor CisJCS8qIENhc3QgaWYgbmVlZGVkIChlLmcuIGludDggRksgLT4gbnVtZXJpYyBQSykgKi8KKwkJ aWYgKE9pZElzVmFsaWQoY2FzdF9mdW5jX2ZpbmZvLT5mbl9vaWQpKQorCQkJc2VhcmNoX3ZhbHNb aV0gPSBGdW5jdGlvbkNhbGwzKGNhc3RfZnVuY19maW5mbywKKwkJCQkJCQkJCQkgICBwa192YWxz WzBdLAorCQkJCQkJCQkJCSAgIEludDMyR2V0RGF0dW0oLTEpLAorCQkJCQkJCQkJCSAgIEJvb2xH ZXREYXR1bShmYWxzZSkpOworCQllbHNlCisJCQlzZWFyY2hfdmFsc1tpXSA9IHBrX3ZhbHNbMF07 CisJfQorCisJLyoKKwkgKiBBcnJheSBlbGVtZW50IHR5cGUgbXVzdCBtYXRjaCB0aGUgb3BlcmF0 b3IncyByaWdodC1oYW5kIGlucHV0IHR5cGUsCisJICogd2hpY2ggaXMgd2hhdCB0aGUgaW5kZXgg Y29tcGFyaXNvbiBleHBlY3RzIG9uIHRoZSBzZWFyY2ggc2lkZS4KKwkgKiByaV9wb3B1bGF0ZV9m YXN0cGF0aF9tZXRhZGF0YSgpIHN0b3JlcyBleGFjdGx5IHRoaXMgdmlhCisJICogZ2V0X29wX29w ZmFtaWx5X3Byb3BlcnRpZXMoKSwgd2hpY2ggcmV0dXJucyB0aGUgb3BlcmF0b3IncyByaWdodC1o YW5kCisJICogdHlwZSBhcyB0aGUgc3VidHlwZSBmb3IgY3Jvc3MtdHlwZSBvcGVyYXRvcnMgKGUu Zy4gaW50OCBmb3IgaW50NDhlcSkKKwkgKiBhbmQgdGhlIGNvbW1vbiB0eXBlIGZvciBzYW1lLXR5 cGUgb3BlcmF0b3JzLgorCSAqLworCWVsZW1fdHlwZSA9IGZwbWV0YS0+c3VidHlwZXNbMF07CisJ QXNzZXJ0KE9pZElzVmFsaWQoZWxlbV90eXBlKSk7CisJZ2V0X3R5cGxlbmJ5dmFsYWxpZ24oZWxl bV90eXBlLCAmZWxlbV9sZW4sICZlbGVtX2J5dmFsLCAmZWxlbV9hbGlnbik7CisKKwlhcnIgPSBj b25zdHJ1Y3RfYXJyYXkoc2VhcmNoX3ZhbHMsIG52YWxzLAorCQkJCQkJICBlbGVtX3R5cGUsIGVs ZW1fbGVuLCBlbGVtX2J5dmFsLCBlbGVtX2FsaWduKTsKKworCS8qCisJICogQnVpbGQgc2NhbiBr ZXkgd2l0aCBTS19TRUFSQ0hBUlJBWS4gIFRoZSBpbmRleCBBTSBjb2RlIHdpbGwgaW50ZXJuYWxs eQorCSAqIHNvcnQgYW5kIGRlZHVwbGljYXRlLCB0aGVuIHdhbGsgbGVhZiBwYWdlcyBpbiBvcmRl ci4KKwkgKi8KKwlTY2FuS2V5RW50cnlJbml0aWFsaXplKCZza2V5WzBdLAorCQkJCQkJICAgU0tf U0VBUkNIQVJSQVksCisJCQkJCQkgICAxLAkvKiBhdHRubyAqLworCQkJCQkJICAgZnBtZXRhLT5z dHJhdHNbMF0sCisJCQkJCQkgICBmcG1ldGEtPnN1YnR5cGVzWzBdLAorCQkJCQkJICAgaWR4X3Jl bC0+cmRfaW5kY29sbGF0aW9uWzBdLAorCQkJCQkJICAgZnBtZXRhLT5yZWdvcHNbMF0sCisJCQkJ CQkgICBQb2ludGVyR2V0RGF0dW0oYXJyKSk7CisKKwlpbmRleF9yZXNjYW4oc2NhbmRlc2MsIHNr ZXksIDEsIE5VTEwsIDApOworCisJLyoKKwkgKiBXYWxrIGFsbCBtYXRjaGVzLiAgVGhlIGluZGV4 IEFNIHJldHVybnMgdGhlbSBpbiBpbmRleCBvcmRlci4gIEZvciBlYWNoCisJICogbWF0Y2gsIGZp bmQgd2hpY2ggYmF0Y2ggaXRlbShzKSBpdCBzYXRpc2ZpZXMuCisJICovCisJd2hpbGUgKGluZGV4 X2dldG5leHRfc2xvdChzY2FuZGVzYywgRm9yd2FyZFNjYW5EaXJlY3Rpb24sIHBrX3Nsb3QpKQor CXsKKwkJRGF0dW0JCWZvdW5kX3ZhbDsKKwkJYm9vbAkJZm91bmRfbnVsbDsKKwkJYm9vbAkJY29u Y3VycmVudGx5X3VwZGF0ZWQ7CisJCVNjYW5LZXlEYXRhIHJlY2hlY2tfc2tleVsxXTsKKworCQlp ZiAoIXJpX0xvY2tQS1R1cGxlKHBrX3JlbCwgcGtfc2xvdCwgc25hcHNob3QsICZjb25jdXJyZW50 bHlfdXBkYXRlZCkpCisJCQljb250aW51ZTsKKworCQkvKiBFeHRyYWN0IHRoZSBQSyB2YWx1ZSBm cm9tIHRoZSBtYXRjaGVkIGFuZCBsb2NrZWQgdHVwbGUgKi8KKwkJZm91bmRfdmFsID0gc2xvdF9n ZXRhdHRyKHBrX3Nsb3QsIHJpaW5mby0+cGtfYXR0bnVtc1swXSwgJmZvdW5kX251bGwpOworCQlB c3NlcnQoIWZvdW5kX251bGwpOworCisJCWlmIChjb25jdXJyZW50bHlfdXBkYXRlZCkKKwkJewor CQkJLyoKKwkJCSAqIEJ1aWxkIGEgc2luZ2xlLWtleSBzY2Fua2V5IGZvciByZWNoZWNrLiAgV2Ug bmVlZCB0aGUgYWN0dWFsIFBLCisJCQkgKiB2YWx1ZSB0aGF0IHdhcyBmb3VuZCwgbm90IHRoZSBG SyBzZWFyY2ggdmFsdWUuCisJCQkgKi8KKwkJCVNjYW5LZXlFbnRyeUluaXRpYWxpemUoJnJlY2hl Y2tfc2tleVswXSwgMCwgMSwKKwkJCQkJCQkJICAgZnBtZXRhLT5zdHJhdHNbMF0sCisJCQkJCQkJ CSAgIGZwbWV0YS0+c3VidHlwZXNbMF0sCisJCQkJCQkJCSAgIGlkeF9yZWwtPnJkX2luZGNvbGxh dGlvblswXSwKKwkJCQkJCQkJICAgZnBtZXRhLT5yZWdvcHNbMF0sCisJCQkJCQkJCSAgIGZvdW5k X3ZhbCk7CisJCQlpZiAoIXJlY2hlY2tfbWF0Y2hlZF9wa190dXBsZShpZHhfcmVsLCByZWNoZWNr X3NrZXksIHBrX3Nsb3QpKQorCQkJCWNvbnRpbnVlOworCQl9CisKKwkJLyoKKwkJICogTGluZWFy IHNjYW4gdG8gbWFyayBhbGwgYmF0Y2ggaXRlbXMgbWF0Y2hpbmcgdGhpcyBQSyB2YWx1ZS4KKwkJ ICogTyhiYXRjaF9zaXplKSBwZXIgbWF0Y2gsIE8oYmF0Y2hfc2l6ZV4yKSB3b3JzdCBjYXNlIC0t IGZpbmUgZm9yIHRoZQorCQkgKiBjdXJyZW50IGJhdGNoIHNpemUgb2YgNjQuCisJCSAqLworCQlm b3IgKGludCBpID0gMDsgaSA8IG52YWxzOyBpKyspCisJCXsKKwkJCWlmICghbWF0Y2hlZFtpXSAm JgorCQkJCURhdHVtR2V0Qm9vbChGdW5jdGlvbkNhbGwyQ29sbChlcV9vcHJfZmluZm8sCisJCQkJ CQkJCQkJCSAgIGlkeF9yZWwtPnJkX2luZGNvbGxhdGlvblswXSwKKwkJCQkJCQkJCQkJICAgZm91 bmRfdmFsLAorCQkJCQkJCQkJCQkgICBzZWFyY2hfdmFsc1tpXSkpKQorCQkJCW1hdGNoZWRbaV0g PSB0cnVlOworCQl9CisJfQorCisJLyogUmVwb3J0IGZpcnN0IHVubWF0Y2hlZCByb3cgKi8KKwlm b3IgKGludCBpID0gMDsgaSA8IG52YWxzOyBpKyspCisJCWlmICghbWF0Y2hlZFtpXSkKKwkJCXJl dHVybiBpOworCisJLyogQWxsIHBhc3MuICovCisJcmV0dXJuIC0xOworfQorCiAvKgogICogcmlf RmFzdFBhdGhQcm9iZU9uZQogICoJCVByb2JlIHRoZSBQSyBpbmRleCBmb3Igb25lIHNldCBvZiBz Y2FuIGtleXMsIGxvY2sgdGhlIG1hdGNoaW5nCkBAIC0zNjg3LDMgKzQwODAsMTk2IEBAIFJJX0ZL ZXlfdHJpZ2dlcl90eXBlKE9pZCB0Z2ZvaWQpCiAKIAlyZXR1cm4gUklfVFJJR0dFUl9OT05FOwog fQorCisvKgorICogcmlfRmFzdFBhdGhFbmRCYXRjaAorICoJCUZsdXNoIHJlbWFpbmluZyByb3dz IGFuZCB0ZWFyIGRvd24gY2FjaGVkIHN0YXRlLgorICoKKyAqIFJlZ2lzdGVyZWQgYXMgYW4gQWZ0 ZXJUcmlnZ2VyQmF0Y2hDYWxsYmFjay4gIE5vdGU6IHRoZSBmbHVzaCBjYW4KKyAqIGRvIHJlYWwg d29yayAoQ0NJLCBzZWN1cml0eSBjb250ZXh0IHN3aXRjaCwgaW5kZXggcHJvYmVzKSBhbmQgY2Fu CisgKiB0aHJvdyBFUlJPUiBvbiBhIGNvbnN0cmFpbnQgdmlvbGF0aW9uLiAgSWYgdGhhdCBoYXBw ZW5zLAorICogcmlfRmFzdFBhdGhUZWFyZG93biBuZXZlciBydW5zOyBSZXNvdXJjZU93bmVyICsg WGFjdENhbGxiYWNrCisgKiBoYW5kbGUgcmVzb3VyY2UgY2xlYW51cCBvbiB0aGUgYWJvcnQgcGF0 aC4KKyAqLworc3RhdGljIHZvaWQKK3JpX0Zhc3RQYXRoRW5kQmF0Y2godm9pZCAqYXJnKQorewor CUhBU0hfU0VRX1NUQVRVUyBzdGF0dXM7CisJUklfRmFzdFBhdGhFbnRyeSAqZW50cnk7CisKKwlp ZiAocmlfZmFzdHBhdGhfY2FjaGUgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJLyogRmx1c2ggYW55 IHBhcnRpYWwgYmF0Y2hlcyAtLSBjYW4gdGhyb3cgRVJST1IgKi8KKwloYXNoX3NlcV9pbml0KCZz dGF0dXMsIHJpX2Zhc3RwYXRoX2NhY2hlKTsKKwl3aGlsZSAoKGVudHJ5ID0gaGFzaF9zZXFfc2Vh cmNoKCZzdGF0dXMpKSAhPSBOVUxMKQorCXsKKwkJaWYgKGVudHJ5LT5iYXRjaF9jb3VudCA+IDAp CisJCXsKKwkJCVJlbGF0aW9uCWZrX3JlbCA9IHRhYmxlX29wZW4oZW50cnktPmZrX3JlbGlkLCBB Y2Nlc3NTaGFyZUxvY2spOworCisJCQlyaV9GYXN0UGF0aEJhdGNoRmx1c2goZW50cnksIGZrX3Jl bCk7CisJCQl0YWJsZV9jbG9zZShma19yZWwsIE5vTG9jayk7CisJCX0KKwl9CisKKwkvKiBPcmRl cmx5IHRlYXJkb3duICovCisJcmlfRmFzdFBhdGhUZWFyZG93bigpOworfQorCisvKgorICogcmlf RmFzdFBhdGhUZWFyZG93bgorICoJCVRlYXIgZG93biBhbGwgY2FjaGVkIGZhc3QtcGF0aCBzdGF0 ZS4KKyAqCisgKiBDYWxsZWQgZnJvbSByaV9GYXN0UGF0aEVuZEJhdGNoKCkgYWZ0ZXIgZmx1c2hp bmcgYW55IHJlbWFpbmluZyByb3dzLgorICovCitzdGF0aWMgdm9pZAorcmlfRmFzdFBhdGhUZWFy ZG93bih2b2lkKQoreworCUhBU0hfU0VRX1NUQVRVUyBzdGF0dXM7CisJUklfRmFzdFBhdGhFbnRy eSAqZW50cnk7CisKKwlpZiAocmlfZmFzdHBhdGhfY2FjaGUgPT0gTlVMTCkKKwkJcmV0dXJuOwor CisJaGFzaF9zZXFfaW5pdCgmc3RhdHVzLCByaV9mYXN0cGF0aF9jYWNoZSk7CisJd2hpbGUgKChl bnRyeSA9IGhhc2hfc2VxX3NlYXJjaCgmc3RhdHVzKSkgIT0gTlVMTCkKKwl7CisJCWlmIChlbnRy eS0+aWR4X3JlbCkKKwkJCWluZGV4X2Nsb3NlKGVudHJ5LT5pZHhfcmVsLCBOb0xvY2spOworCQlp ZiAoZW50cnktPnBrX3JlbCkKKwkJCXRhYmxlX2Nsb3NlKGVudHJ5LT5wa19yZWwsIE5vTG9jayk7 CisJCWlmIChlbnRyeS0+cGtfc2xvdCkKKwkJCUV4ZWNEcm9wU2luZ2xlVHVwbGVUYWJsZVNsb3Qo ZW50cnktPnBrX3Nsb3QpOworCQlpZiAoZW50cnktPmZrX3Nsb3QpCisJCQlFeGVjRHJvcFNpbmds ZVR1cGxlVGFibGVTbG90KGVudHJ5LT5ma19zbG90KTsKKwkJaWYgKGVudHJ5LT5mbHVzaF9jeHQp CisJCQlNZW1vcnlDb250ZXh0RGVsZXRlKGVudHJ5LT5mbHVzaF9jeHQpOworCX0KKworCWhhc2hf ZGVzdHJveShyaV9mYXN0cGF0aF9jYWNoZSk7CisJcmlfZmFzdHBhdGhfY2FjaGUgPSBOVUxMOwor CXJpX2Zhc3RwYXRoX2NhbGxiYWNrX3JlZ2lzdGVyZWQgPSBmYWxzZTsKK30KKworc3RhdGljIGJv b2wgcmlfZmFzdHBhdGhfeGFjdF9jYWxsYmFja19yZWdpc3RlcmVkID0gZmFsc2U7CisKK3N0YXRp YyB2b2lkCityaV9GYXN0UGF0aFhhY3RDYWxsYmFjayhYYWN0RXZlbnQgZXZlbnQsIHZvaWQgKmFy ZykKK3sKKwkvKgorCSAqIE9uIGFib3J0LCBSZXNvdXJjZU93bmVyIGFscmVhZHkgcmVsZWFzZWQg cmVsYXRpb25zOyBvbiBjb21taXQsCisJICogcmlfRmFzdFBhdGhUZWFyZG93biBhbHJlYWR5IHJh bi4gIEVpdGhlciB3YXksIGp1c3QgTlVMTCB0aGUgc3RhdGljCisJICogcG9pbnRlcnMgc28gdGhl eSBkb24ndCBkYW5nbGUgaW50byB0aGUgbmV4dCB0cmFuc2FjdGlvbi4KKwkgKi8KKwlyaV9mYXN0 cGF0aF9jYWNoZSA9IE5VTEw7CisJcmlfZmFzdHBhdGhfY2FsbGJhY2tfcmVnaXN0ZXJlZCA9IGZh bHNlOworfQorCitzdGF0aWMgdm9pZAorcmlfRmFzdFBhdGhTdWJYYWN0Q2FsbGJhY2soU3ViWGFj dEV2ZW50IGV2ZW50LCBTdWJUcmFuc2FjdGlvbklkIG15U3ViaWQsCisJCQkJCQkgICBTdWJUcmFu c2FjdGlvbklkIHBhcmVudFN1YmlkLCB2b2lkICphcmcpCit7CisJaWYgKGV2ZW50ID09IFNVQlhB Q1RfRVZFTlRfQUJPUlRfU1VCKQorCXsKKwkJLyoKKwkJICogUmVzb3VyY2VPd25lciBhbHJlYWR5 IHJlbGVhc2VkIHJlbGF0aW9ucy4gIE5VTEwgdGhlIHN0YXRpYyBwb2ludGVycworCQkgKiBzbyB0 aGUgc3RpbGwtcmVnaXN0ZXJlZCBiYXRjaCBjYWxsYmFjayBiZWNvbWVzIGEgbm8tb3AgZm9yIHRo ZSByZXN0CisJCSAqIG9mIHRoaXMgdHJhbnNhY3Rpb24uCisJCSAqLworCQlyaV9mYXN0cGF0aF9j YWNoZSA9IE5VTEw7CisJCXJpX2Zhc3RwYXRoX2NhbGxiYWNrX3JlZ2lzdGVyZWQgPSBmYWxzZTsK Kwl9Cit9CisKKy8qCisgKiByaV9GYXN0UGF0aEdldEVudHJ5CisgKgkJTG9vayB1cCBvciBjcmVh dGUgYSBwZXItYmF0Y2ggY2FjaGUgZW50cnkgZm9yIHRoZSBnaXZlbiBjb25zdHJhaW50LgorICoK KyAqIE9uIGZpcnN0IGNhbGwgZm9yIGEgY29uc3RyYWludCB3aXRoaW4gYSBiYXRjaDogb3BlbnMg cGtfcmVsIGFuZCB0aGUgaW5kZXgsCisgKiBhbGxvY2F0ZXMgc2xvdHMgZm9yIGJvdGggRksgcm93 IGFuZCB0aGUgbG9va2VkIHVwIFBLIHJvdywgYW5kIHJlZ2lzdGVycyB0aGUKKyAqIGNsZWFudXAg Y2FsbGJhY2suCisgKgorICogT24gc3Vic2VxdWVudCBjYWxsczogcmV0dXJucyB0aGUgZXhpc3Rp bmcgZW50cnkuCisgKi8KK3N0YXRpYyBSSV9GYXN0UGF0aEVudHJ5ICoKK3JpX0Zhc3RQYXRoR2V0 RW50cnkoY29uc3QgUklfQ29uc3RyYWludEluZm8gKnJpaW5mbywgUmVsYXRpb24gZmtfcmVsKQor eworCVJJX0Zhc3RQYXRoRW50cnkgKmVudHJ5OworCWJvb2wJCWZvdW5kOworCisJLyogQ3JlYXRl IGhhc2ggdGFibGUgb24gZmlyc3QgdXNlIGluIHRoaXMgYmF0Y2ggKi8KKwlpZiAocmlfZmFzdHBh dGhfY2FjaGUgPT0gTlVMTCkKKwl7CisJCUhBU0hDVEwJCWN0bDsKKworCQlpZiAoIXJpX2Zhc3Rw YXRoX3hhY3RfY2FsbGJhY2tfcmVnaXN0ZXJlZCkKKwkJeworCQkJUmVnaXN0ZXJYYWN0Q2FsbGJh Y2socmlfRmFzdFBhdGhYYWN0Q2FsbGJhY2ssIE5VTEwpOworCQkJUmVnaXN0ZXJTdWJYYWN0Q2Fs bGJhY2socmlfRmFzdFBhdGhTdWJYYWN0Q2FsbGJhY2ssIE5VTEwpOworCQkJcmlfZmFzdHBhdGhf eGFjdF9jYWxsYmFja19yZWdpc3RlcmVkID0gdHJ1ZTsKKwkJfQorCisJCWN0bC5rZXlzaXplID0g c2l6ZW9mKE9pZCk7CisJCWN0bC5lbnRyeXNpemUgPSBzaXplb2YoUklfRmFzdFBhdGhFbnRyeSk7 CisJCWN0bC5oY3h0ID0gVG9wVHJhbnNhY3Rpb25Db250ZXh0OworCQlyaV9mYXN0cGF0aF9jYWNo ZSA9IGhhc2hfY3JlYXRlKCJSSSBmYXN0LXBhdGggY2FjaGUiLAorCQkJCQkJCQkJCTE2LAorCQkJ CQkJCQkJCSZjdGwsCisJCQkJCQkJCQkJSEFTSF9FTEVNIHwgSEFTSF9CTE9CUyB8IEhBU0hfQ09O VEVYVCk7CisJfQorCisJZW50cnkgPSBoYXNoX3NlYXJjaChyaV9mYXN0cGF0aF9jYWNoZSwgJnJp aW5mby0+Y29uc3RyYWludF9pZCwKKwkJCQkJCUhBU0hfRU5URVIsICZmb3VuZCk7CisKKwlpZiAo IWZvdW5kKQorCXsKKwkJTWVtb3J5Q29udGV4dCBvbGRjeHQ7CisKKwkJLyoKKwkJICogWmVybyBv dXQgbm9uLWtleSBmaWVsZHMgc28gcmlfRmFzdFBhdGhUZWFyZG93biBpcyBzYWZlIGlmIHdlIGVy cm9yCisJCSAqIG91dCBkdXJpbmcgcGFydGlhbCBpbml0aWFsaXphdGlvbiBiZWxvdy4KKwkJICov CisJCW1lbXNldCgoKGNoYXIgKikgZW50cnkpICsgb2Zmc2V0b2YoUklfRmFzdFBhdGhFbnRyeSwg cGtfcmVsKSwgMCwKKwkJCSAgIHNpemVvZihSSV9GYXN0UGF0aEVudHJ5KSAtIG9mZnNldG9mKFJJ X0Zhc3RQYXRoRW50cnksIHBrX3JlbCkpOworCisJCW9sZGN4dCA9IE1lbW9yeUNvbnRleHRTd2l0 Y2hUbyhUb3BUcmFuc2FjdGlvbkNvbnRleHQpOworCisJCWVudHJ5LT5ma19yZWxpZCA9IFJlbGF0 aW9uR2V0UmVsaWQoZmtfcmVsKTsKKworCQkvKgorCQkgKiBPcGVuIFBLIHRhYmxlIGFuZCBpdHMg dW5pcXVlIGluZGV4LgorCQkgKgorCQkgKiBSb3dTaGFyZUxvY2sgb24gcGtfcmVsIG1hdGNoZXMg d2hhdCB0aGUgU1BJIHBhdGgncyBTRUxFQ1QgLi4uIEZPUgorCQkgKiBLRVkgU0hBUkUgd291bGQg YWNxdWlyZSBhcyBhIHJlbGF0aW9uLWxldmVsIGxvY2suIEFjY2Vzc1NoYXJlTG9jaworCQkgKiBv biB0aGUgaW5kZXggaXMgc3RhbmRhcmQgZm9yIGluZGV4IHNjYW5zLgorCQkgKgorCQkgKiBXZSBk b24ndCByZWxlYXNlIHRoZXNlIGxvY2tzIHVudGlsIGVuZCBvZiB0cmFuc2FjdGlvbiwgbWF0Y2hp bmcgU1BJCisJCSAqIGJlaGF2aW9yLgorCQkgKi8KKwkJZW50cnktPnBrX3JlbCA9IHRhYmxlX29w ZW4ocmlpbmZvLT5wa19yZWxpZCwgUm93U2hhcmVMb2NrKTsKKwkJZW50cnktPmlkeF9yZWwgPSBp bmRleF9vcGVuKHJpaW5mby0+Y29uaW5kaWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJCWVudHJ5LT5w a19zbG90ID0gdGFibGVfc2xvdF9jcmVhdGUoZW50cnktPnBrX3JlbCwgTlVMTCk7CisKKwkJLyoK KwkJICogTXVzdCBiZSBUVFNPcHNIZWFwVHVwbGUgYmVjYXVzZSBFeGVjU3RvcmVIZWFwVHVwbGUo KSBpcyB1c2VkIHRvCisJCSAqIGxvYWQgZW50cmllcyBmcm9tIGJhdGNoW10gaW50byB0aGlzIHNs b3QgZm9yIHZhbHVlIGV4dHJhY3Rpb24uCisJCSAqLworCQllbnRyeS0+Zmtfc2xvdCA9IE1ha2VT aW5nbGVUdXBsZVRhYmxlU2xvdChSZWxhdGlvbkdldERlc2NyKGZrX3JlbCksCisJCQkJCQkJCQkJ CQkgICZUVFNPcHNIZWFwVHVwbGUpOworCisJCWVudHJ5LT5mbHVzaF9jeHQgPSBBbGxvY1NldENv bnRleHRDcmVhdGUoVG9wVHJhbnNhY3Rpb25Db250ZXh0LAorCQkJCQkJCQkJCQkJICJSSSBmYXN0 IHBhdGggZmx1c2ggdGVtcG9yYXJ5IGNvbnRleHQiLAorCQkJCQkJCQkJCQkJIEFMTE9DU0VUX1NN QUxMX1NJWkVTKTsKKwkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGN4dCk7CisKKwkJLyogRW5z dXJlIGNsZWFudXAgYXQgZW5kIG9mIHRoaXMgdHJpZ2dlci1maXJpbmcgYmF0Y2ggKi8KKwkJaWYg KCFyaV9mYXN0cGF0aF9jYWxsYmFja19yZWdpc3RlcmVkKQorCQl7CisJCQlSZWdpc3RlckFmdGVy VHJpZ2dlckJhdGNoQ2FsbGJhY2socmlfRmFzdFBhdGhFbmRCYXRjaCwgTlVMTCk7CisJCQlyaV9m YXN0cGF0aF9jYWxsYmFja19yZWdpc3RlcmVkID0gdHJ1ZTsKKwkJfQorCX0KKworCXJldHVybiBl bnRyeTsKK30KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3RyaWdnZXIuaCBiL3Ny Yy9pbmNsdWRlL2NvbW1hbmRzL3RyaWdnZXIuaAppbmRleCAyN2FmNTI4NDQwNi4uNzY2NDI5OGY1 YzggMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3RyaWdnZXIuaAorKysgYi9zcmMv aW5jbHVkZS9jb21tYW5kcy90cmlnZ2VyLmgKQEAgLTI4OSw0ICsyODksMjIgQEAgZXh0ZXJuIHZv aWQgUklfUGFydGl0aW9uUmVtb3ZlX0NoZWNrKFRyaWdnZXIgKnRyaWdnZXIsIFJlbGF0aW9uIGZr X3JlbCwKIAogZXh0ZXJuIGludAlSSV9GS2V5X3RyaWdnZXJfdHlwZShPaWQgdGdmb2lkKTsKIAor LyoKKyAqIENhbGxiYWNrIHR5cGUgZm9yIGVuZC1vZi10cmlnZ2VyLWJhdGNoIG5vdGlmaWNhdGlv bnMuCisgKgorICogUmVnaXN0ZXJlZCB2aWEgUmVnaXN0ZXJBZnRlclRyaWdnZXJCYXRjaENhbGxi YWNrKCkuICBJbnZva2VkIHdoZW4KKyAqIGEgYmF0Y2ggb2YgYWZ0ZXItdHJpZ2dlciBwcm9jZXNz aW5nIGNvbXBsZXRlczoKKyAqCS0gQWZ0ZXJUcmlnZ2VyRW5kUXVlcnkoKSAgICAgIChpbW1lZGlh dGUgY29uc3RyYWludHMpCisgKgktIEFmdGVyVHJpZ2dlckZpcmVEZWZlcnJlZCgpICAoZGVmZXJy ZWQgY29uc3RyYWludHMgYXQgQ09NTUlUKQorICoJLSBBZnRlclRyaWdnZXJTZXRTdGF0ZSgpICAg ICAgKFNFVCBDT05TVFJBSU5UUyBJTU1FRElBVEUpCisgKgorICogVGhlIGNhbGxiYWNrIGxpc3Qg aXMgY2xlYXJlZCBhZnRlciBlYWNoIGJhdGNoLiAgQ2FsbGVycyBtdXN0CisgKiByZS1yZWdpc3Rl ciBpZiB0aGV5IG5lZWQgdG8gYmUgY2FsbGVkIGFnYWluIGluIGEgc3Vic2VxdWVudCBiYXRjaC4K KyAqLwordHlwZWRlZiB2b2lkICgqQWZ0ZXJUcmlnZ2VyQmF0Y2hDYWxsYmFjaykgKHZvaWQgKmFy Zyk7CisKK2V4dGVybiB2b2lkIFJlZ2lzdGVyQWZ0ZXJUcmlnZ2VyQmF0Y2hDYWxsYmFjayhBZnRl clRyaWdnZXJCYXRjaENhbGxiYWNrIGNhbGxiYWNrLAorCQkJCQkJCQkJCQkgIHZvaWQgKmFyZyk7 CitleHRlcm4gYm9vbCBBZnRlclRyaWdnZXJCYXRjaElzQWN0aXZlKHZvaWQpOworCiAjZW5kaWYJ CQkJCQkJLyogVFJJR0dFUl9IICovCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVj dGVkL2ZvcmVpZ25fa2V5Lm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZm9yZWlnbl9r ZXkub3V0CmluZGV4IDZjNjA3ZDM2MjIyLi45MTI5NTc1NGJhYiAxMDA2NDQKLS0tIGEvc3JjL3Rl c3QvcmVncmVzcy9leHBlY3RlZC9mb3JlaWduX2tleS5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVz cy9leHBlY3RlZC9mb3JlaWduX2tleS5vdXQKQEAgLTM1NTcsMyArMzU1NywxMjkgQEAgREVUQUlM OiAgZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBma3BhcnQxM190MQogZHJvcCBjYXNjYWRlcyB0byB0 YWJsZSBma3BhcnQxM190MgogZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBma3BhcnQxM190MwogUkVT RVQgc2VhcmNoX3BhdGg7CistLSBUZXN0cyBmb3JlaWduIGtleSBjaGVjayBmYXN0LXBhdGggbm8t Y2FjaGUgcGF0aC4KK0NSRUFURSBUQUJMRSBmcF9wa19hbHRlciAoYSBpbnQgUFJJTUFSWSBLRVkp OworSU5TRVJUIElOVE8gZnBfcGtfYWx0ZXIgU0VMRUNUIGdlbmVyYXRlX3NlcmllcygxLCAxMDAp OworQ1JFQVRFIFRBQkxFIGZwX2ZrX2FsdGVyIChhIGludCk7CitJTlNFUlQgSU5UTyBmcF9ma19h bHRlciBTRUxFQ1QgZ2VuZXJhdGVfc2VyaWVzKDEsIDEwMCk7CistLSBWYWxpZGF0aW9uIHBhdGg6 IHNob3VsZCBzdWNjZWVkCitBTFRFUiBUQUJMRSBmcF9ma19hbHRlciBBREQgRk9SRUlHTiBLRVkg KGEpIFJFRkVSRU5DRVMgZnBfcGtfYWx0ZXI7CitJTlNFUlQgSU5UTyBmcF9ma19hbHRlciBWQUxV RVMgKDEwMSk7ICAtLSBzaG91bGQgZmFpbCAoY29uc3RyYWludCBhY3RpdmUpCitFUlJPUjogIGlu c2VydCBvciB1cGRhdGUgb24gdGFibGUgImZwX2ZrX2FsdGVyIiB2aW9sYXRlcyBmb3JlaWduIGtl eSBjb25zdHJhaW50ICJmcF9ma19hbHRlcl9hX2ZrZXkiCitERVRBSUw6ICBLZXkgKGEpPSgxMDEp IGlzIG5vdCBwcmVzZW50IGluIHRhYmxlICJmcF9wa19hbHRlciIuCitEUk9QIFRBQkxFIGZwX2Zr X2FsdGVyLCBmcF9wa19hbHRlcjsKKy0tIFNlcGFyYXRlIHRlc3Q6IHZhbGlkYXRpb24gY2F0Y2hl cyBleGlzdGluZyB2aW9sYXRpb24KK0NSRUFURSBUQUJMRSBmcF9wa19hbHRlcjIgKGEgaW50IFBS SU1BUlkgS0VZKTsKK0lOU0VSVCBJTlRPIGZwX3BrX2FsdGVyMiBWQUxVRVMgKDEpOworQ1JFQVRF IFRBQkxFIGZwX2ZrX2FsdGVyMiAoYSBpbnQpOworSU5TRVJUIElOVE8gZnBfZmtfYWx0ZXIyIFZB TFVFUyAoMSksICgyMDApOyAgLS0gMjAwIGhhcyBubyBQSyBtYXRjaAorQUxURVIgVEFCTEUgZnBf ZmtfYWx0ZXIyIEFERCBGT1JFSUdOIEtFWSAoYSkgUkVGRVJFTkNFUyBmcF9wa19hbHRlcjI7ICAt LSBzaG91bGQgZmFpbAorRVJST1I6ICBpbnNlcnQgb3IgdXBkYXRlIG9uIHRhYmxlICJmcF9ma19h bHRlcjIiIHZpb2xhdGVzIGZvcmVpZ24ga2V5IGNvbnN0cmFpbnQgImZwX2ZrX2FsdGVyMl9hX2Zr ZXkiCitERVRBSUw6ICBLZXkgKGEpPSgyMDApIGlzIG5vdCBwcmVzZW50IGluIHRhYmxlICJmcF9w a19hbHRlcjIiLgorRFJPUCBUQUJMRSBmcF9ma19hbHRlcjIsIGZwX3BrX2FsdGVyMjsKKy0tIFRl c3RzIHRoYXQgdGhlIGZhc3QtcGF0aCBoYW5kbGVzIGNhY2hpbmcgZm9yIG11bHRpcGxlIGNvbnN0 cmFpbnRzCitDUkVBVEUgVEFCTEUgZnBfcGsxIChhIGludCBQUklNQVJZIEtFWSk7CitDUkVBVEUg VEFCTEUgZnBfcGsyIChiIGludCBQUklNQVJZIEtFWSk7CitJTlNFUlQgSU5UTyBmcF9wazEgVkFM VUVTICgxKTsKK0lOU0VSVCBJTlRPIGZwX3BrMiBWQUxVRVMgKDEpOworQ1JFQVRFIFRBQkxFIGZw X211bHRpX2ZrICgKKyAgICBhIGludCBSRUZFUkVOQ0VTIGZwX3BrMSwKKyAgICBiIGludCBSRUZF UkVOQ0VTIGZwX3BrMgorKTsKK0lOU0VSVCBJTlRPIGZwX211bHRpX2ZrIFZBTFVFUyAoMSwgMSk7 ICAtLSB0d28gY29uc3RyYWludHMsIG9uZSBiYXRjaAorSU5TRVJUIElOVE8gZnBfbXVsdGlfZmsg VkFMVUVTICgxLCAyKTsgIC0tIHNlY29uZCBjb25zdHJhaW50IGZhaWxzCitFUlJPUjogIGluc2Vy dCBvciB1cGRhdGUgb24gdGFibGUgImZwX211bHRpX2ZrIiB2aW9sYXRlcyBmb3JlaWduIGtleSBj b25zdHJhaW50ICJmcF9tdWx0aV9ma19iX2ZrZXkiCitERVRBSUw6ICBLZXkgKGIpPSgyKSBpcyBu b3QgcHJlc2VudCBpbiB0YWJsZSAiZnBfcGsyIi4KK0RST1AgVEFCTEUgZnBfbXVsdGlfZmssIGZw X3BrMSwgZnBfcGsyOworLS0gVGVzdCB0aGF0IGZhc3QtcGF0aCBjYWNoZSBoYW5kbGVzIGRlZmVy cmVkIGNvbnN0cmFpbnRzIGFuZCBTRVQgQ09OU1RSQUlOVFMgSU1NRURJQVRFCitDUkVBVEUgVEFC TEUgZnBfcGtfZGVmZXIgKGEgaW50IFBSSU1BUlkgS0VZKTsKK0NSRUFURSBUQUJMRSBmcF9ma19k ZWZlciAoYSBpbnQgUkVGRVJFTkNFUyBmcF9wa19kZWZlciBERUZFUlJBQkxFIElOSVRJQUxMWSBE RUZFUlJFRCk7CitJTlNFUlQgSU5UTyBmcF9wa19kZWZlciBWQUxVRVMgKDEpLCAoMik7CitCRUdJ TjsKK0lOU0VSVCBJTlRPIGZwX2ZrX2RlZmVyIFZBTFVFUyAoMSk7CitJTlNFUlQgSU5UTyBmcF9m a19kZWZlciBWQUxVRVMgKDIpOworU0VUIENPTlNUUkFJTlRTIEFMTCBJTU1FRElBVEU7ICAtLSBm aXJlcyBiYXRjaCBjYWxsYmFjayBoZXJlCitJTlNFUlQgSU5UTyBmcF9ma19kZWZlciBWQUxVRVMg KDMpOyAgLS0gc2hvdWxkIGZhaWwsIGFsc28gdGVzdHMgdGhhdCBjYWNoZSB3YXMgY2xlYW5lZCB1 cAorRVJST1I6ICBpbnNlcnQgb3IgdXBkYXRlIG9uIHRhYmxlICJmcF9ma19kZWZlciIgdmlvbGF0 ZXMgZm9yZWlnbiBrZXkgY29uc3RyYWludCAiZnBfZmtfZGVmZXJfYV9ma2V5IgorREVUQUlMOiAg S2V5IChhKT0oMykgaXMgbm90IHByZXNlbnQgaW4gdGFibGUgImZwX3BrX2RlZmVyIi4KK0NPTU1J VDsKK0RST1AgVEFCTEUgZnBfcGtfZGVmZXIsIGZwX2ZrX2RlZmVyOworLS0gU3VidHJhbnNhY3Rp b24gYWJvcnQ6IGNhY2hlZCBzdGF0ZSBtdXN0IGJlIGludmFsaWRhdGVkIG9uIFJPTExCQUNLIFRP CitDUkVBVEUgVEFCTEUgZnBfcGtfc3VieGFjdCAoYSBpbnQgUFJJTUFSWSBLRVkpOworQ1JFQVRF IFRBQkxFIGZwX2ZrX3N1YnhhY3QgKGEgaW50IFJFRkVSRU5DRVMgZnBfcGtfc3VieGFjdCk7CitJ TlNFUlQgSU5UTyBmcF9wa19zdWJ4YWN0IFZBTFVFUyAoMSksICgyKTsKK0JFR0lOOworSU5TRVJU IElOVE8gZnBfZmtfc3VieGFjdCBWQUxVRVMgKDEpOworU0FWRVBPSU5UIHNwMTsKK0lOU0VSVCBJ TlRPIGZwX2ZrX3N1YnhhY3QgVkFMVUVTICgyKTsKK1JPTExCQUNLIFRPIHNwMTsKK0lOU0VSVCBJ TlRPIGZwX2ZrX3N1YnhhY3QgVkFMVUVTICgxKTsKK0NPTU1JVDsKK1NFTEVDVCAqIEZST00gZnBf Zmtfc3VieGFjdDsKKyBhIAorLS0tCisgMQorIDEKKygyIHJvd3MpCisKK0RST1AgVEFCTEUgZnBf Zmtfc3VieGFjdCwgZnBfcGtfc3VieGFjdDsKKy0tIEZLIGNoZWNrIG11c3Qgc2VlIFBLIHJvd3Mg aW5zZXJ0ZWQgYnkgZWFybGllciBBRlRFUiB0cmlnZ2VycworLS0gZmlyaW5nIG9uIHRoZSBzYW1l IHN0YXRlbWVudAorQ1JFQVRFIFRBQkxFIGZwX3BrX2NjaSAoYSBpbnQgUFJJTUFSWSBLRVkpOwor Q1JFQVRFIFRBQkxFIGZwX2ZrX2NjaSAoYSBpbnQgUkVGRVJFTkNFUyBmcF9wa19jY2kpOworQ1JF QVRFIEZVTkNUSU9OIGZwX2F1dG9fcGsoKSBSRVRVUk5TIHRyaWdnZXIgQVMgJCQKK0JFR0lOCisg IFJBSVNFIE5PVElDRSAnZnBfYXV0b19wayBjYWxsZWQnOworICBJTlNFUlQgSU5UTyBmcF9wa19j Y2kgVkFMVUVTIChORVcuYSk7CisgIFJFVFVSTiBORVc7CitFTkQgJCQgTEFOR1VBR0UgcGxwZ3Nx bDsKKy0tIE5hbWUgc29ydHMgYmVmb3JlIHRoZSBSSSB0cmlnZ2VyLCBzbyBmaXJlcyBmaXJzdCBw ZXIgcm93CitDUkVBVEUgVFJJR0dFUiAiQUFBX2F1dG8iIEFGVEVSIElOU0VSVCBPTiBmcF9ma19j Y2kKKyAgRk9SIEVBQ0ggUk9XIEVYRUNVVEUgRlVOQ1RJT04gZnBfYXV0b19waygpOworLS0gU2hv dWxkIHN1Y2NlZWQ6IEFBQV9hdXRvIHByb3Zpc2lvbnMgdGhlIFBLIHJvdyBiZWZvcmUgUkkgY2hl Y2sKK0lOU0VSVCBJTlRPIGZwX2ZrX2NjaSBWQUxVRVMgKDEpLCAoMiksICgzKTsKK05PVElDRTog IGZwX2F1dG9fcGsgY2FsbGVkCitOT1RJQ0U6ICBmcF9hdXRvX3BrIGNhbGxlZAorTk9USUNFOiAg ZnBfYXV0b19wayBjYWxsZWQKK0RST1AgVEFCTEUgZnBfZmtfY2NpLCBmcF9wa19jY2k7CitEUk9Q IEZVTkNUSU9OIGZwX2F1dG9fcGs7CistLSBNdWx0aS1jb2x1bW4gRks6IGV4ZXJjaXNlcyBiYXRj aGVkIHBlci1yb3cgcHJvYmluZyB3aXRoIGNvbXBvc2l0ZSBrZXlzCitDUkVBVEUgVEFCTEUgZnBf cGtfbXVsdGkgKGEgaW50LCBiIGludCwgUFJJTUFSWSBLRVkgKGEsIGIpKTsKK0lOU0VSVCBJTlRP IGZwX3BrX211bHRpIFNFTEVDVCBpLCBpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDEwMCkgaTsK K0NSRUFURSBUQUJMRSBmcF9ma19tdWx0aSAoeCBpbnQsIGEgaW50LCBiIGludCwKKyAgICBGT1JF SUdOIEtFWSAoYSwgYikgUkVGRVJFTkNFUyBmcF9wa19tdWx0aSk7CitJTlNFUlQgSU5UTyBmcF9m a19tdWx0aSBTRUxFQ1QgaSwgaSwgaSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAxMDApIGk7CitJ TlNFUlQgSU5UTyBmcF9ma19tdWx0aSBWQUxVRVMgKDEsIDk5OSwgOTk5KTsKK0VSUk9SOiAgaW5z ZXJ0IG9yIHVwZGF0ZSBvbiB0YWJsZSAiZnBfZmtfbXVsdGkiIHZpb2xhdGVzIGZvcmVpZ24ga2V5 IGNvbnN0cmFpbnQgImZwX2ZrX211bHRpX2FfYl9ma2V5IgorREVUQUlMOiAgS2V5IChhLCBiKT0o OTk5LCA5OTkpIGlzIG5vdCBwcmVzZW50IGluIHRhYmxlICJmcF9wa19tdWx0aSIuCitEUk9QIFRB QkxFIGZwX2ZrX211bHRpLCBmcF9wa19tdWx0aTsKKy0tIERlZmVycmVkIGNvbnN0cmFpbnQ6IGJh dGNoIGZsdXNoZWQgYXQgQ09NTUlULCBub3QgYXQgc3RhdGVtZW50IGVuZAorQ1JFQVRFIFRBQkxF IGZwX3BrX2NvbW1pdCAoYSBpbnQgUFJJTUFSWSBLRVkpOworQ1JFQVRFIFRBQkxFIGZwX2ZrX2Nv bW1pdCAoYSBpbnQgUkVGRVJFTkNFUyBmcF9wa19jb21taXQKKyAgICBERUZFUlJBQkxFIElOSVRJ QUxMWSBERUZFUlJFRCk7CitJTlNFUlQgSU5UTyBmcF9wa19jb21taXQgVkFMVUVTICgxKTsKK0JF R0lOOworSU5TRVJUIElOVE8gZnBfZmtfY29tbWl0IFZBTFVFUyAoMSk7CitJTlNFUlQgSU5UTyBm cF9ma19jb21taXQgVkFMVUVTICgxKTsKK0lOU0VSVCBJTlRPIGZwX2ZrX2NvbW1pdCBWQUxVRVMg KDk5OSk7CitDT01NSVQ7CitFUlJPUjogIGluc2VydCBvciB1cGRhdGUgb24gdGFibGUgImZwX2Zr X2NvbW1pdCIgdmlvbGF0ZXMgZm9yZWlnbiBrZXkgY29uc3RyYWludCAiZnBfZmtfY29tbWl0X2Ff ZmtleSIKK0RFVEFJTDogIEtleSAoYSk9KDk5OSkgaXMgbm90IHByZXNlbnQgaW4gdGFibGUgImZw X3BrX2NvbW1pdCIuCitEUk9QIFRBQkxFIGZwX2ZrX2NvbW1pdCwgZnBfcGtfY29tbWl0OworLS0g Q3Jvc3MtdHlwZSBGSyB3aXRoIGJ1bGsgaW5zZXJ0OiBpbnQ4IEZLIHJlZmVyZW5jaW5nIGludDQg UEssCistLSB2YWx1ZXMgY2FzdCBkdXJpbmcgYXJyYXkgY29uc3RydWN0aW9uCitDUkVBVEUgVEFC TEUgZnBfcGtfY3Jvc3MgKGEgaW50NCBQUklNQVJZIEtFWSk7CitJTlNFUlQgSU5UTyBmcF9wa19j cm9zcyBTRUxFQ1QgZ2VuZXJhdGVfc2VyaWVzKDEsIDIwMCk7CitDUkVBVEUgVEFCTEUgZnBfZmtf Y3Jvc3MgKGEgaW50OCBSRUZFUkVOQ0VTIGZwX3BrX2Nyb3NzKTsKK0lOU0VSVCBJTlRPIGZwX2Zr X2Nyb3NzIFNFTEVDVCBnZW5lcmF0ZV9zZXJpZXMoMSwgMjAwKTsKK0lOU0VSVCBJTlRPIGZwX2Zr X2Nyb3NzIFZBTFVFUyAoOTk5KTsKK0VSUk9SOiAgaW5zZXJ0IG9yIHVwZGF0ZSBvbiB0YWJsZSAi ZnBfZmtfY3Jvc3MiIHZpb2xhdGVzIGZvcmVpZ24ga2V5IGNvbnN0cmFpbnQgImZwX2ZrX2Nyb3Nz X2FfZmtleSIKK0RFVEFJTDogIEtleSAoYSk9KDk5OSkgaXMgbm90IHByZXNlbnQgaW4gdGFibGUg ImZwX3BrX2Nyb3NzIi4KK0RST1AgVEFCTEUgZnBfZmtfY3Jvc3MsIGZwX3BrX2Nyb3NzOworLS0g RHVwbGljYXRlIEZLIHZhbHVlczogd2hlbiB1c2luZyB0aGUgYmF0Y2hlZCBTQU9QIHBhdGgsIGV2 ZXJ5CistLSByb3cgbXVzdCBiZSByZWNvZ25pemVkIGFzIHNhdGlzZmllZCwgbm90IGp1c3QgdGhl IGZpcnN0IG1hdGNoCitDUkVBVEUgVEFCTEUgZnBfcGtfZHVwIChhIGludCBQUklNQVJZIEtFWSk7 CitJTlNFUlQgSU5UTyBmcF9wa19kdXAgVkFMVUVTICgxKTsKK0NSRUFURSBUQUJMRSBmcF9ma19k dXAgKGEgaW50IFJFRkVSRU5DRVMgZnBfcGtfZHVwKTsKK0lOU0VSVCBJTlRPIGZwX2ZrX2R1cCBT RUxFQ1QgMSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAxMDApOworRFJPUCBUQUJMRSBmcF9ma19k dXAsIGZwX3BrX2R1cDsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2ZvcmVpZ25f a2V5LnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2ZvcmVpZ25fa2V5LnNxbAppbmRleCBmY2Rk MDA2Yzk3MS4uZjY0NmRkMTA0MDEgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2Zv cmVpZ25fa2V5LnNxbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9mb3JlaWduX2tleS5zcWwK QEAgLTI1MzUsMyArMjUzNSwxMjEgQEAgV0lUSCBjdGUgQVMgKAogCiBEUk9QIFNDSEVNQSBma3Bh cnQxMyBDQVNDQURFOwogUkVTRVQgc2VhcmNoX3BhdGg7CisKKy0tIFRlc3RzIGZvcmVpZ24ga2V5 IGNoZWNrIGZhc3QtcGF0aCBuby1jYWNoZSBwYXRoLgorQ1JFQVRFIFRBQkxFIGZwX3BrX2FsdGVy IChhIGludCBQUklNQVJZIEtFWSk7CitJTlNFUlQgSU5UTyBmcF9wa19hbHRlciBTRUxFQ1QgZ2Vu ZXJhdGVfc2VyaWVzKDEsIDEwMCk7CitDUkVBVEUgVEFCTEUgZnBfZmtfYWx0ZXIgKGEgaW50KTsK K0lOU0VSVCBJTlRPIGZwX2ZrX2FsdGVyIFNFTEVDVCBnZW5lcmF0ZV9zZXJpZXMoMSwgMTAwKTsK Ky0tIFZhbGlkYXRpb24gcGF0aDogc2hvdWxkIHN1Y2NlZWQKK0FMVEVSIFRBQkxFIGZwX2ZrX2Fs dGVyIEFERCBGT1JFSUdOIEtFWSAoYSkgUkVGRVJFTkNFUyBmcF9wa19hbHRlcjsKK0lOU0VSVCBJ TlRPIGZwX2ZrX2FsdGVyIFZBTFVFUyAoMTAxKTsgIC0tIHNob3VsZCBmYWlsIChjb25zdHJhaW50 IGFjdGl2ZSkKK0RST1AgVEFCTEUgZnBfZmtfYWx0ZXIsIGZwX3BrX2FsdGVyOworCistLSBTZXBh cmF0ZSB0ZXN0OiB2YWxpZGF0aW9uIGNhdGNoZXMgZXhpc3RpbmcgdmlvbGF0aW9uCitDUkVBVEUg VEFCTEUgZnBfcGtfYWx0ZXIyIChhIGludCBQUklNQVJZIEtFWSk7CitJTlNFUlQgSU5UTyBmcF9w a19hbHRlcjIgVkFMVUVTICgxKTsKK0NSRUFURSBUQUJMRSBmcF9ma19hbHRlcjIgKGEgaW50KTsK K0lOU0VSVCBJTlRPIGZwX2ZrX2FsdGVyMiBWQUxVRVMgKDEpLCAoMjAwKTsgIC0tIDIwMCBoYXMg bm8gUEsgbWF0Y2gKK0FMVEVSIFRBQkxFIGZwX2ZrX2FsdGVyMiBBREQgRk9SRUlHTiBLRVkgKGEp IFJFRkVSRU5DRVMgZnBfcGtfYWx0ZXIyOyAgLS0gc2hvdWxkIGZhaWwKK0RST1AgVEFCTEUgZnBf ZmtfYWx0ZXIyLCBmcF9wa19hbHRlcjI7CisKKy0tIFRlc3RzIHRoYXQgdGhlIGZhc3QtcGF0aCBo YW5kbGVzIGNhY2hpbmcgZm9yIG11bHRpcGxlIGNvbnN0cmFpbnRzCitDUkVBVEUgVEFCTEUgZnBf cGsxIChhIGludCBQUklNQVJZIEtFWSk7CitDUkVBVEUgVEFCTEUgZnBfcGsyIChiIGludCBQUklN QVJZIEtFWSk7CitJTlNFUlQgSU5UTyBmcF9wazEgVkFMVUVTICgxKTsKK0lOU0VSVCBJTlRPIGZw X3BrMiBWQUxVRVMgKDEpOworQ1JFQVRFIFRBQkxFIGZwX211bHRpX2ZrICgKKyAgICBhIGludCBS RUZFUkVOQ0VTIGZwX3BrMSwKKyAgICBiIGludCBSRUZFUkVOQ0VTIGZwX3BrMgorKTsKK0lOU0VS VCBJTlRPIGZwX211bHRpX2ZrIFZBTFVFUyAoMSwgMSk7ICAtLSB0d28gY29uc3RyYWludHMsIG9u ZSBiYXRjaAorSU5TRVJUIElOVE8gZnBfbXVsdGlfZmsgVkFMVUVTICgxLCAyKTsgIC0tIHNlY29u ZCBjb25zdHJhaW50IGZhaWxzCitEUk9QIFRBQkxFIGZwX211bHRpX2ZrLCBmcF9wazEsIGZwX3Br MjsKKworLS0gVGVzdCB0aGF0IGZhc3QtcGF0aCBjYWNoZSBoYW5kbGVzIGRlZmVycmVkIGNvbnN0 cmFpbnRzIGFuZCBTRVQgQ09OU1RSQUlOVFMgSU1NRURJQVRFCitDUkVBVEUgVEFCTEUgZnBfcGtf ZGVmZXIgKGEgaW50IFBSSU1BUlkgS0VZKTsKK0NSRUFURSBUQUJMRSBmcF9ma19kZWZlciAoYSBp bnQgUkVGRVJFTkNFUyBmcF9wa19kZWZlciBERUZFUlJBQkxFIElOSVRJQUxMWSBERUZFUlJFRCk7 CitJTlNFUlQgSU5UTyBmcF9wa19kZWZlciBWQUxVRVMgKDEpLCAoMik7CisKK0JFR0lOOworSU5T RVJUIElOVE8gZnBfZmtfZGVmZXIgVkFMVUVTICgxKTsKK0lOU0VSVCBJTlRPIGZwX2ZrX2RlZmVy IFZBTFVFUyAoMik7CitTRVQgQ09OU1RSQUlOVFMgQUxMIElNTUVESUFURTsgIC0tIGZpcmVzIGJh dGNoIGNhbGxiYWNrIGhlcmUKK0lOU0VSVCBJTlRPIGZwX2ZrX2RlZmVyIFZBTFVFUyAoMyk7ICAt LSBzaG91bGQgZmFpbCwgYWxzbyB0ZXN0cyB0aGF0IGNhY2hlIHdhcyBjbGVhbmVkIHVwCitDT01N SVQ7CitEUk9QIFRBQkxFIGZwX3BrX2RlZmVyLCBmcF9ma19kZWZlcjsKKworLS0gU3VidHJhbnNh Y3Rpb24gYWJvcnQ6IGNhY2hlZCBzdGF0ZSBtdXN0IGJlIGludmFsaWRhdGVkIG9uIFJPTExCQUNL IFRPCitDUkVBVEUgVEFCTEUgZnBfcGtfc3VieGFjdCAoYSBpbnQgUFJJTUFSWSBLRVkpOworQ1JF QVRFIFRBQkxFIGZwX2ZrX3N1YnhhY3QgKGEgaW50IFJFRkVSRU5DRVMgZnBfcGtfc3VieGFjdCk7 CitJTlNFUlQgSU5UTyBmcF9wa19zdWJ4YWN0IFZBTFVFUyAoMSksICgyKTsKK0JFR0lOOworSU5T RVJUIElOVE8gZnBfZmtfc3VieGFjdCBWQUxVRVMgKDEpOworU0FWRVBPSU5UIHNwMTsKK0lOU0VS VCBJTlRPIGZwX2ZrX3N1YnhhY3QgVkFMVUVTICgyKTsKK1JPTExCQUNLIFRPIHNwMTsKK0lOU0VS VCBJTlRPIGZwX2ZrX3N1YnhhY3QgVkFMVUVTICgxKTsKK0NPTU1JVDsKK1NFTEVDVCAqIEZST00g ZnBfZmtfc3VieGFjdDsKK0RST1AgVEFCTEUgZnBfZmtfc3VieGFjdCwgZnBfcGtfc3VieGFjdDsK KworLS0gRksgY2hlY2sgbXVzdCBzZWUgUEsgcm93cyBpbnNlcnRlZCBieSBlYXJsaWVyIEFGVEVS IHRyaWdnZXJzCistLSBmaXJpbmcgb24gdGhlIHNhbWUgc3RhdGVtZW50CitDUkVBVEUgVEFCTEUg ZnBfcGtfY2NpIChhIGludCBQUklNQVJZIEtFWSk7CitDUkVBVEUgVEFCTEUgZnBfZmtfY2NpIChh IGludCBSRUZFUkVOQ0VTIGZwX3BrX2NjaSk7CisKK0NSRUFURSBGVU5DVElPTiBmcF9hdXRvX3Br KCkgUkVUVVJOUyB0cmlnZ2VyIEFTICQkCitCRUdJTgorICBSQUlTRSBOT1RJQ0UgJ2ZwX2F1dG9f cGsgY2FsbGVkJzsKKyAgSU5TRVJUIElOVE8gZnBfcGtfY2NpIFZBTFVFUyAoTkVXLmEpOworICBS RVRVUk4gTkVXOworRU5EICQkIExBTkdVQUdFIHBscGdzcWw7CisKKy0tIE5hbWUgc29ydHMgYmVm b3JlIHRoZSBSSSB0cmlnZ2VyLCBzbyBmaXJlcyBmaXJzdCBwZXIgcm93CitDUkVBVEUgVFJJR0dF UiAiQUFBX2F1dG8iIEFGVEVSIElOU0VSVCBPTiBmcF9ma19jY2kKKyAgRk9SIEVBQ0ggUk9XIEVY RUNVVEUgRlVOQ1RJT04gZnBfYXV0b19waygpOworCistLSBTaG91bGQgc3VjY2VlZDogQUFBX2F1 dG8gcHJvdmlzaW9ucyB0aGUgUEsgcm93IGJlZm9yZSBSSSBjaGVjaworSU5TRVJUIElOVE8gZnBf ZmtfY2NpIFZBTFVFUyAoMSksICgyKSwgKDMpOworCitEUk9QIFRBQkxFIGZwX2ZrX2NjaSwgZnBf cGtfY2NpOworRFJPUCBGVU5DVElPTiBmcF9hdXRvX3BrOworCistLSBNdWx0aS1jb2x1bW4gRks6 IGV4ZXJjaXNlcyBiYXRjaGVkIHBlci1yb3cgcHJvYmluZyB3aXRoIGNvbXBvc2l0ZSBrZXlzCitD UkVBVEUgVEFCTEUgZnBfcGtfbXVsdGkgKGEgaW50LCBiIGludCwgUFJJTUFSWSBLRVkgKGEsIGIp KTsKK0lOU0VSVCBJTlRPIGZwX3BrX211bHRpIFNFTEVDVCBpLCBpIEZST00gZ2VuZXJhdGVfc2Vy aWVzKDEsIDEwMCkgaTsKK0NSRUFURSBUQUJMRSBmcF9ma19tdWx0aSAoeCBpbnQsIGEgaW50LCBi IGludCwKKyAgICBGT1JFSUdOIEtFWSAoYSwgYikgUkVGRVJFTkNFUyBmcF9wa19tdWx0aSk7CitJ TlNFUlQgSU5UTyBmcF9ma19tdWx0aSBTRUxFQ1QgaSwgaSwgaSBGUk9NIGdlbmVyYXRlX3Nlcmll cygxLCAxMDApIGk7CitJTlNFUlQgSU5UTyBmcF9ma19tdWx0aSBWQUxVRVMgKDEsIDk5OSwgOTk5 KTsKK0RST1AgVEFCTEUgZnBfZmtfbXVsdGksIGZwX3BrX211bHRpOworCistLSBEZWZlcnJlZCBj b25zdHJhaW50OiBiYXRjaCBmbHVzaGVkIGF0IENPTU1JVCwgbm90IGF0IHN0YXRlbWVudCBlbmQK K0NSRUFURSBUQUJMRSBmcF9wa19jb21taXQgKGEgaW50IFBSSU1BUlkgS0VZKTsKK0NSRUFURSBU QUJMRSBmcF9ma19jb21taXQgKGEgaW50IFJFRkVSRU5DRVMgZnBfcGtfY29tbWl0CisgICAgREVG RVJSQUJMRSBJTklUSUFMTFkgREVGRVJSRUQpOworSU5TRVJUIElOVE8gZnBfcGtfY29tbWl0IFZB TFVFUyAoMSk7CitCRUdJTjsKK0lOU0VSVCBJTlRPIGZwX2ZrX2NvbW1pdCBWQUxVRVMgKDEpOwor SU5TRVJUIElOVE8gZnBfZmtfY29tbWl0IFZBTFVFUyAoMSk7CitJTlNFUlQgSU5UTyBmcF9ma19j b21taXQgVkFMVUVTICg5OTkpOworQ09NTUlUOworRFJPUCBUQUJMRSBmcF9ma19jb21taXQsIGZw X3BrX2NvbW1pdDsKKworLS0gQ3Jvc3MtdHlwZSBGSyB3aXRoIGJ1bGsgaW5zZXJ0OiBpbnQ4IEZL IHJlZmVyZW5jaW5nIGludDQgUEssCistLSB2YWx1ZXMgY2FzdCBkdXJpbmcgYXJyYXkgY29uc3Ry dWN0aW9uCitDUkVBVEUgVEFCTEUgZnBfcGtfY3Jvc3MgKGEgaW50NCBQUklNQVJZIEtFWSk7CitJ TlNFUlQgSU5UTyBmcF9wa19jcm9zcyBTRUxFQ1QgZ2VuZXJhdGVfc2VyaWVzKDEsIDIwMCk7CitD UkVBVEUgVEFCTEUgZnBfZmtfY3Jvc3MgKGEgaW50OCBSRUZFUkVOQ0VTIGZwX3BrX2Nyb3NzKTsK K0lOU0VSVCBJTlRPIGZwX2ZrX2Nyb3NzIFNFTEVDVCBnZW5lcmF0ZV9zZXJpZXMoMSwgMjAwKTsK K0lOU0VSVCBJTlRPIGZwX2ZrX2Nyb3NzIFZBTFVFUyAoOTk5KTsKK0RST1AgVEFCTEUgZnBfZmtf Y3Jvc3MsIGZwX3BrX2Nyb3NzOworCistLSBEdXBsaWNhdGUgRksgdmFsdWVzOiB3aGVuIHVzaW5n IHRoZSBiYXRjaGVkIFNBT1AgcGF0aCwgZXZlcnkKKy0tIHJvdyBtdXN0IGJlIHJlY29nbml6ZWQg YXMgc2F0aXNmaWVkLCBub3QganVzdCB0aGUgZmlyc3QgbWF0Y2gKK0NSRUFURSBUQUJMRSBmcF9w a19kdXAgKGEgaW50IFBSSU1BUlkgS0VZKTsKK0lOU0VSVCBJTlRPIGZwX3BrX2R1cCBWQUxVRVMg KDEpOworQ1JFQVRFIFRBQkxFIGZwX2ZrX2R1cCAoYSBpbnQgUkVGRVJFTkNFUyBmcF9wa19kdXAp OworSU5TRVJUIElOVE8gZnBfZmtfZHVwIFNFTEVDVCAxIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEs IDEwMCk7CitEUk9QIFRBQkxFIGZwX2ZrX2R1cCwgZnBfcGtfZHVwOwpkaWZmIC0tZ2l0IGEvc3Jj L3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRl ZnMubGlzdAppbmRleCA4ZTljMDY1NDdkNi4uYzBiOWU1MWUzMzUgMTAwNjQ0Ci0tLSBhL3NyYy90 b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3NyYy90b29scy9wZ2luZGVudC90eXBl ZGVmcy5saXN0CkBAIC0zMCw2ICszMCw4IEBAIEFkZEZvcmVpZ25VcGRhdGVUYXJnZXRzX2Z1bmN0 aW9uCiBBZGRySW5mbwogQWZmaXhOb2RlCiBBZmZpeE5vZGVEYXRhCitBZnRlclRyaWdnZXJCYXRj aENhbGxiYWNrCitBZnRlclRyaWdnZXJDYWxsYmFja0l0ZW0KIEFmdGVyVHJpZ2dlckV2ZW50CiBB ZnRlclRyaWdnZXJFdmVudENodW5rCiBBZnRlclRyaWdnZXJFdmVudERhdGEKQEAgLTI0ODUsNiAr MjQ4Nyw3IEBAIFJJWAogUklfQ29tcGFyZUhhc2hFbnRyeQogUklfQ29tcGFyZUtleQogUklfQ29u c3RyYWludEluZm8KK1JJX0Zhc3RQYXRoRW50cnkKIFJJX1F1ZXJ5SGFzaEVudHJ5CiBSSV9RdWVy eUtleQogUlRFS2luZAotLSAKMi40Ny4zCgo= --0000000000002d387d064e63070c--