Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1tl6vz-009O60-Ch for pgsql-hackers@arkaria.postgresql.org; Thu, 20 Feb 2025 13:49:47 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1tl6vv-006ueN-Nj for pgsql-hackers@arkaria.postgresql.org; Thu, 20 Feb 2025 13:49:43 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1tl6vu-006ueC-SS for pgsql-hackers@lists.postgresql.org; Thu, 20 Feb 2025 13:49:43 +0000 Received: from mail-qv1-xf31.google.com ([2607:f8b0:4864:20::f31]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1tl6vs-001uG0-2h for pgsql-hackers@lists.postgresql.org; Thu, 20 Feb 2025 13:49:42 +0000 Received: by mail-qv1-xf31.google.com with SMTP id 6a1803df08f44-6e6827984b2so10262846d6.1 for ; Thu, 20 Feb 2025 05:49:40 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1740059380; x=1740664180; darn=lists.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=k6PXJ3q+YnD5r4CK398AHxPX13YARmiBQj6V9UlOMs0=; b=DpJserWiU/idAirEgp5hp5rLCvHSxZ0zEL6Cq16j8DlkmraopqO+Nf2uw2lhv5UaX4 aNUM9sh+w6pHQQJkXAoAa5nRqnstP+19gFiRSsjRGWAZ/oL2vAAPzGwxckXBvu+iHPyS nRZklGqQNiArRHJh7Zsn+PvNCEqiEykzfsWIkyF+paF7207SWvkIQWHf5OhpldV+5zZ0 MR0ilCYGrWM0Vj38a+qVYLA+iZy2l25fCTCcB+GkMTMZRpyGU08SPPZ9JZ7OCuKs3Z4S 2ZHmNe7vBBncfPpBfzWKnN8aMd9jGzsQR9dXvDEJlsmphltRtDRZrIupB/prvUUZTuWS wXeQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740059380; x=1740664180; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=k6PXJ3q+YnD5r4CK398AHxPX13YARmiBQj6V9UlOMs0=; b=P4a5+0dgM3Z5Trs4TUdGAOzfEfLzMtKZHmjlvab0L7cjQ/fxneLjAcEju6/p+AuCZJ PwO+qo8NQ0ideZqz+VOpADwyQVNakiuwbaC6X8dxF2Njd6Hxm3e0vxmjZHtJjUrLxucK PSRc86xTT1sh52fZKIOfTxb8jBsYjCE3lmavwYtXHWbcDYRBShMsU1EH9Gk1aoyGqEOV Uwidw1IdvGYNF0ZwNTNTB8coE8/HtVux2QpxF7nwF4JTCz5HfkxVrJO1UfeYAmCmFkLQ 9XkNMupZptLKtDXuWQSy1hi8f3rmVVSu3b+LKxamGAYNVnvxV4nrm48QJk053UFnkeZc j6nA== X-Forwarded-Encrypted: i=1; AJvYcCXrg/y9wy2lW2BVt1fPxnKO6V1pIVrNvAAc9F1FiEA4g+5uujIKMPNzdsBRwMlynLtF2wjcGneaaaMPxPPF@lists.postgresql.org X-Gm-Message-State: AOJu0YyFNLgEoFpD5HLsf3Pa6xdKRmkOKTqoBnOTqcCuIRg7sPHIlLbp vvTFxVeXGMu+R82D8S1I3+sQliD7UOOkfR7mwgEl7OCt9mhoVl9lXrxPnByJ58cbH2pzj63GdSQ UHAJeEdvibqSPmjViL+NPeoBOUjM= X-Gm-Gg: ASbGncv5mo/9xC8DnrixkBKYm6w83ht+FCgaeXBMqftqGKyKDhb9/wdyGYMDeXuI1Dg b3dJiYMyuZVZlo1J5liGPI9ZPslsiSv/2/08WMYyrfj3Ymh6w3esyDqkf2Aefkwq09I/cxQJqOd 4uGiGZGpTKicm5UgAm3WkDYvDXeLCSvIM= X-Google-Smtp-Source: AGHT+IEKXtCAOZ7uh7NMppaxm0GAGCt/dRkOoA8eaZzkUdAKTkja2VJlIDiWLzljw+cEJ5V8CZ4wMyM7Lv9KPGH4i6s= X-Received: by 2002:a05:6214:d4a:b0:6e6:64c2:3575 with SMTP id 6a1803df08f44-6e66ccc3923mr283076086d6.20.1740059379578; Thu, 20 Feb 2025 05:49:39 -0800 (PST) MIME-Version: 1.0 References: <202502192109.5ifhfegolh6w@alvherre.pgsql> In-Reply-To: From: Mahendra Singh Thalor Date: Thu, 20 Feb 2025 19:19:27 +0530 X-Gm-Features: AWEUYZlta4bh0OTl8JG879Dwmhrv_v1V66znFUZ4LP-7CRJLNtfJEqfIe-iGLkA Message-ID: Subject: Re: Non-text mode for pg_dumpall To: jian he Cc: =?UTF-8?Q?=C3=81lvaro_Herrera?= , Srinath Reddy , pgsql-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="00000000000035c1d9062e932521" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000035c1d9062e932521 Content-Type: multipart/alternative; boundary="00000000000035c1d8062e93251f" --00000000000035c1d8062e93251f Content-Type: text/plain; charset="UTF-8" On Thu, 20 Feb 2025 at 14:48, jian he wrote: > > hi. > about 0001 > > /* > * connectDatabase > * > * Make a database connection with the given parameters. An > * interactive password prompt is automatically issued if required. > * > * If fail_on_error is false, we return NULL without printing any message > * on failure, but preserve any prompted password for the next try. > * > * On success, the global variable 'connstr' is set to a connection string > * containing the options used. > */ > PGconn * > connectDatabase(const char *dbname, const char *connection_string, > const char *pghost, const char *pgport, const char *pguser, > trivalue prompt_password, bool fail_on_error, const > char *progname, > const char **connstr, int *server_version) > do the comments need to change? since no > global variable 'connstr' in common_dumpall_restore.c > maybe we need some words to explain server_version, (i don't have a > huge opinion though). Fixed. > > > /*------------------------------------------------------------------------- > * > * common_dumpall_restore.c > * > * Portions Copyright (c) 1996-2025, PostgreSQL Global Development Group > * Portions Copyright (c) 1994, Regents of the University of California > * > * This is a common file for pg_dumpall and pg_restore. > * src/bin/pg_dump/common_dumpall_restore.c > * > *------------------------------------------------------------------------- > */ > > may change to > > /*------------------------------------------------------------------------- > * > * common_dumpall_restore.c > * This is a common file for pg_dumpall and pg_restore. > * > * Portions Copyright (c) 1996-2025, PostgreSQL Global Development Group > * Portions Copyright (c) 1994, Regents of the University of California > * > * IDENTIFICATION > * src/bin/pg_dump/common_dumpall_restore.c > * > *------------------------------------------------------------------------- > */ > so the style aligns with most other files. Fixed. > (we can apply the same logic to src/bin/pg_dump/common_dumpall_restore.h) We are already doing the same in the .h file. > > > in src/bin/pg_dump/pg_dumpall.c > #include "common_dumpall_restore.h" > imply include "pg_backup.h". > so in src/bin/pg_dump/pg_dumpall.c, we don't need include "pg_backup.h" Fixed. Also I removed some extra .h files from the patch. > > > attached are minor cosmetic changes for v19. - /* return number of errors */ > - if (AH->n_errors) > - n_errors = AH->n_errors; > - > /* AH may be freed in CloseArchive? */ > CloseArchive(AH); As per this comment, we can't return AH->n_errors as this might already be freed so we should copy before CloseArchive. Here, I am attaching updated patches for review and testing. -- Thanks and Regards Mahendra Singh Thalor EnterpriseDB: http://www.enterprisedb.com --00000000000035c1d8062e93251f Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
On Thu, 20 Feb 2025 at 14:48, jian he <jian.universality@gmail.com> wrote:>
> hi.
> about 0001
>
> /*
> =C2=A0* co= nnectDatabase
> =C2=A0*
> =C2=A0* Make a database connection wi= th the given parameters.=C2=A0 An
> =C2=A0* interactive password prom= pt is automatically issued if required.
> =C2=A0*
> =C2=A0* If = fail_on_error is false, we return NULL without printing any message
>= =C2=A0* on failure, but preserve any prompted password for the next try.> =C2=A0*
> =C2=A0* On success, the global variable 'connstr= ' is set to a connection string
> =C2=A0* containing the options = used.
> =C2=A0*/
> PGconn *
> connectDatabase(const char = *dbname, const char *connection_string,
> =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0 =C2=A0 =C2=A0 const char *pghost, const char *pgport, const = char *pguser,
> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 trivalue prompt_password, bool fail_on_error, const
> char *progn= ame,
> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 const = char **connstr, int *server_version)
> do the comments need to change= ? since no
> global variable 'connstr' in common_dumpall_rest= ore.c
> maybe we need some words to explain server_version, (i don= 9;t have a
> huge opinion though).

Fixed.

>
>
> /*----------------------------------------------= ---------------------------
> =C2=A0*
> =C2=A0* common_dumpall_= restore.c
> =C2=A0*
> =C2=A0* Portions Copyright (c) 1996-2025,= PostgreSQL Global Development Group
> =C2=A0* Portions Copyright (c)= 1994, Regents of the University of California
> =C2=A0*
> =C2= =A0* This is a common file for pg_dumpall and pg_restore.
> =C2=A0* s= rc/bin/pg_dump/common_dumpall_restore.c
> =C2=A0*
> =C2=A0*----= ---------------------------------------------------------------------
&g= t; =C2=A0*/
>
> may change to
>
> /*---------------= ----------------------------------------------------------
> =C2=A0*<= br>> =C2=A0* common_dumpall_restore.c
> =C2=A0* =C2=A0 =C2=A0 This= is a common file for pg_dumpall and pg_restore.
> =C2=A0*
> = =C2=A0* Portions Copyright (c) 1996-2025, PostgreSQL Global Development Gro= up
> =C2=A0* Portions Copyright (c) 1994, Regents of the University o= f California
> =C2=A0*
> =C2=A0* IDENTIFICATION
> =C2=A0*= =C2=A0 =C2=A0src/bin/pg_dump/common_dumpall_restore.c
> =C2=A0*
&= gt; =C2=A0*----------------------------------------------------------------= ---------
> =C2=A0*/
> so the style aligns with most other file= s.

Fixed.

> (we can apply the sam= e logic to src/bin/pg_dump/common_dumpall_restore.h)

We are already doing the same in the .h file.

>
>=
> in src/bin/pg_dump/pg_dumpall.c
> #include "common_dump= all_restore.h"
> imply include "pg_backup.h".
> = so in src/bin/pg_dump/pg_dumpall.c, we don't need include "pg_back= up.h"

Fixed. Also I removed some extra .h fil= es from the patch.

>
>
> attached are minor co= smetic changes for v19.

- /* return number of errors */
- if (AH->n_errors)
- n_err= ors =3D AH->n_errors;
-
=C2=A0 /* AH may be freed in CloseArchive?= */
=C2=A0 CloseArchive(AH);
As per this comment, we can'= ;t return AH->n_errors as this might already be freed so we should copy = before CloseArchive.

Here, I am attaching updated = patches for review and testing.

--
Thanks and Regards
= Mahendra Singh Thalor
EnterpriseDB: http://www.enterprisedb.com
--00000000000035c1d8062e93251f-- --00000000000035c1d9062e932521 Content-Type: application/octet-stream; name="v20_0001_move-common-code-of-pg_dumpall-and-pg_restore-to-new_file.patch" Content-Disposition: attachment; filename="v20_0001_move-common-code-of-pg_dumpall-and-pg_restore-to-new_file.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m7deef3e0 RnJvbSBhNDUzMTNhYzllMzQzZDdlZGQ2NTQ1MzU0ZjU5NWFmYzcxYmYyOWM0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYWhlbmRyYSBTaW5naCBUaGFsb3IgPG1haGk2cnVuQGdtYWls LmNvbT4KRGF0ZTogVGh1LCAyMCBGZWIgMjAyNSAxNjoyNzoxNyArMDUzMApTdWJqZWN0OiBbUEFU Q0ggMS8yXSBtb3ZlIGNvbW1vbiBjb2RlIG9mIHBnX2R1bXBhbGwgYW5kIHBnX3Jlc3RvcmUgdG8g bmV3IGZpbGUKCmNvbm5lY3REYXRhYmFzZSBpcyB1c2VkIGJ5IGJvdGggcGdfZHVtcGFsbCBhbmQg cGdfcmVzdG9yZSBzbwptb3ZlIGNvbW1vbiBjb2RlIHRvIG5ldyBmaWxlLgotLS0KIHNyYy9iaW4v cGdfZHVtcC9NYWtlZmlsZSAgICAgICAgICAgICAgICAgfCAgIDQgKy0KIHNyYy9iaW4vcGdfZHVt cC9jb21tb25fZHVtcGFsbF9yZXN0b3JlLmMgfCAyODkgKysrKysrKysrKysrKysrKysrKysrKysK IHNyYy9iaW4vcGdfZHVtcC9jb21tb25fZHVtcGFsbF9yZXN0b3JlLmggfCAgMjQgKysKIHNyYy9i aW4vcGdfZHVtcC9tZXNvbi5idWlsZCAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL2Jpbi9wZ19k dW1wL3BnX2R1bXBhbGwuYyAgICAgICAgICAgICB8IDI2OCArLS0tLS0tLS0tLS0tLS0tLS0tLS0K IDUgZmlsZXMgY2hhbmdlZCwgMzI0IGluc2VydGlvbnMoKyksIDI2MiBkZWxldGlvbnMoLSkKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmluL3BnX2R1bXAvY29tbW9uX2R1bXBhbGxfcmVzdG9yZS5j CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2Jpbi9wZ19kdW1wL2NvbW1vbl9kdW1wYWxsX3Jlc3Rv cmUuaAoKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9NYWtlZmlsZSBiL3NyYy9iaW4vcGdf ZHVtcC9NYWtlZmlsZQppbmRleCAyMzNhZDE1Y2E3NS4uODYwMDZkMTExYzMgMTAwNjQ0Ci0tLSBh L3NyYy9iaW4vcGdfZHVtcC9NYWtlZmlsZQorKysgYi9zcmMvYmluL3BnX2R1bXAvTWFrZWZpbGUK QEAgLTUwLDggKzUwLDggQEAgcGdfZHVtcDogcGdfZHVtcC5vIGNvbW1vbi5vIHBnX2R1bXBfc29y dC5vICQoT0JKUykgfCBzdWJtYWtlLWxpYnBxIHN1Ym1ha2UtbGlicGcKIHBnX3Jlc3RvcmU6IHBn X3Jlc3RvcmUubyAkKE9CSlMpIHwgc3VibWFrZS1saWJwcSBzdWJtYWtlLWxpYnBncG9ydCBzdWJt YWtlLWxpYnBnZmV1dGlscwogCSQoQ0MpICQoQ0ZMQUdTKSBwZ19yZXN0b3JlLm8gJChPQkpTKSAk KExERkxBR1MpICQoTERGTEFHU19FWCkgJChMSUJTKSAtbyAkQCQoWCkKIAotcGdfZHVtcGFsbDog cGdfZHVtcGFsbC5vIGR1bXB1dGlscy5vIGZpbHRlci5vICQoV0lOMzJSRVMpIHwgc3VibWFrZS1s aWJwcSBzdWJtYWtlLWxpYnBncG9ydCBzdWJtYWtlLWxpYnBnZmV1dGlscwotCSQoQ0MpICQoQ0ZM QUdTKSBwZ19kdW1wYWxsLm8gZHVtcHV0aWxzLm8gZmlsdGVyLm8gJChXSU4zMlJFUykgJChMREZM QUdTKSAkKExERkxBR1NfRVgpICQoTElCUykgLW8gJEAkKFgpCitwZ19kdW1wYWxsOiBwZ19kdW1w YWxsLm8gZHVtcHV0aWxzLm8gZmlsdGVyLm8gY29tbW9uX2R1bXBhbGxfcmVzdG9yZS5vICQoV0lO MzJSRVMpIHwgc3VibWFrZS1saWJwcSBzdWJtYWtlLWxpYnBncG9ydCBzdWJtYWtlLWxpYnBnZmV1 dGlscworCSQoQ0MpICQoQ0ZMQUdTKSBwZ19kdW1wYWxsLm8gZHVtcHV0aWxzLm8gZmlsdGVyLm8g Y29tbW9uX2R1bXBhbGxfcmVzdG9yZS5vICQoV0lOMzJSRVMpICQoTERGTEFHUykgJChMREZMQUdT X0VYKSAkKExJQlMpIC1vICRAJChYKQogCiBpbnN0YWxsOiBhbGwgaW5zdGFsbGRpcnMKIAkkKElO U1RBTExfUFJPR1JBTSkgcGdfZHVtcCQoWCkgJyQoREVTVERJUikkKGJpbmRpciknL3BnX2R1bXAk KFgpCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvY29tbW9uX2R1bXBhbGxfcmVzdG9yZS5j IGIvc3JjL2Jpbi9wZ19kdW1wL2NvbW1vbl9kdW1wYWxsX3Jlc3RvcmUuYwpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uOTJmNTJiNzIzOWEKLS0tIC9kZXYvbnVsbAorKysg Yi9zcmMvYmluL3BnX2R1bXAvY29tbW9uX2R1bXBhbGxfcmVzdG9yZS5jCkBAIC0wLDAgKzEsMjg5 IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBjb21tb25fZHVtcGFsbF9yZXN0b3JlLmMK KyAqICAgIFRoaXMgaXMgYSBjb21tb24gZmlsZSBmb3IgcGdfZHVtcGFsbCBhbmQgcGdfcmVzdG9y ZS4KKyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAyNSwgUG9zdGdyZVNRTCBH bG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwg UmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhCisgKgorICogSURFTlRJRklD QVRJT04KKyAqICAgIHNyYy9iaW4vcGdfZHVtcC9jb21tb25fZHVtcGFsbF9yZXN0b3JlLmMKKyAq CisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisjaW5jbHVkZSAicG9zdGdyZXNfZmUuaCIKKwor I2luY2x1ZGUgImNvbW1vbi9jb25uZWN0LmgiCisjaW5jbHVkZSAiY29tbW9uL2xvZ2dpbmcuaCIK KyNpbmNsdWRlICJjb21tb24vc3RyaW5nLmgiCisjaW5jbHVkZSAiY29tbW9uX2R1bXBhbGxfcmVz dG9yZS5oIgorI2luY2x1ZGUgImR1bXB1dGlscy5oIgorI2luY2x1ZGUgImZlX3V0aWxzL3N0cmlu Z191dGlscy5oIgorCitzdGF0aWMgY2hhciAqY29uc3RydWN0Q29ublN0cihjb25zdCBjaGFyICoq a2V5d29yZHMsIGNvbnN0IGNoYXIgKip2YWx1ZXMpOworI2RlZmluZSBleGl0X25pY2VseShjb2Rl KSBleGl0KGNvZGUpCisKKy8qCisgKiBjb25uZWN0RGF0YWJhc2UKKyAqCisgKiBNYWtlIGEgZGF0 YWJhc2UgY29ubmVjdGlvbiB3aXRoIHRoZSBnaXZlbiBwYXJhbWV0ZXJzLiAgQW4KKyAqIGludGVy YWN0aXZlIHBhc3N3b3JkIHByb21wdCBpcyBhdXRvbWF0aWNhbGx5IGlzc3VlZCBpZiByZXF1aXJl ZC4KKyAqCisgKiBJZiBmYWlsX29uX2Vycm9yIGlzIGZhbHNlLCB3ZSByZXR1cm4gTlVMTCB3aXRo b3V0IHByaW50aW5nIGFueSBtZXNzYWdlCisgKiBvbiBmYWlsdXJlLCBidXQgcHJlc2VydmUgYW55 IHByb21wdGVkIHBhc3N3b3JkIGZvciB0aGUgbmV4dCB0cnkuCisgKgorICogT24gc3VjY2Vzcywg dGhlICdjb25uc3RyJyBpcyBzZXQgdG8gYSBjb25uZWN0aW9uIHN0cmluZyBjb250YWluaW5nCisg KiB0aGUgb3B0aW9ucyB1c2VkIGFuZCAnc2VydmVyX3ZlcnNpb24nIGlzIHNldCB0byB2ZXJzaW9u IHNvIHRoYXQgY2FsbGVyCisgKiBjYW4gdXNlIHRoZW0uCisgKi8KK1BHY29ubiAqCitjb25uZWN0 RGF0YWJhc2UoY29uc3QgY2hhciAqZGJuYW1lLCBjb25zdCBjaGFyICpjb25uZWN0aW9uX3N0cmlu ZywKKwkJCQljb25zdCBjaGFyICpwZ2hvc3QsIGNvbnN0IGNoYXIgKnBncG9ydCwgY29uc3QgY2hh ciAqcGd1c2VyLAorCQkJCXRyaXZhbHVlIHByb21wdF9wYXNzd29yZCwgYm9vbCBmYWlsX29uX2Vy cm9yLCBjb25zdCBjaGFyICpwcm9nbmFtZSwKKwkJCQljb25zdCBjaGFyICoqY29ubnN0ciwgaW50 ICpzZXJ2ZXJfdmVyc2lvbikKK3sKKwlQR2Nvbm4JICAgKmNvbm47CisJYm9vbAkJbmV3X3Bhc3M7 CisJY29uc3QgY2hhciAqcmVtb3RldmVyc2lvbl9zdHI7CisJaW50CQkJbXlfdmVyc2lvbjsKKwlj b25zdCBjaGFyICoqa2V5d29yZHMgPSBOVUxMOworCWNvbnN0IGNoYXIgKip2YWx1ZXMgPSBOVUxM OworCVBRY29ubmluZm9PcHRpb24gKmNvbm5fb3B0cyA9IE5VTEw7CisJc3RhdGljIGNoYXIgKnBh c3N3b3JkID0gTlVMTDsKKwlpbnQJCQlzZXJ2ZXJfdmVyc2lvbl90ZW1wOworCisJaWYgKHByb21w dF9wYXNzd29yZCA9PSBUUklfWUVTICYmICFwYXNzd29yZCkKKwkJcGFzc3dvcmQgPSBzaW1wbGVf cHJvbXB0KCJQYXNzd29yZDogIiwgZmFsc2UpOworCisJLyoKKwkgKiBTdGFydCB0aGUgY29ubmVj dGlvbi4gIExvb3AgdW50aWwgd2UgaGF2ZSBhIHBhc3N3b3JkIGlmIHJlcXVlc3RlZCBieQorCSAq IGJhY2tlbmQuCisJICovCisJZG8KKwl7CisJCWludAkJCWFyZ2NvdW50ID0gNjsKKwkJUFFjb25u aW5mb09wdGlvbiAqY29ubl9vcHQ7CisJCWNoYXIJICAgKmVycl9tc2cgPSBOVUxMOworCQlpbnQJ CQlpID0gMDsKKworCQlmcmVlKGtleXdvcmRzKTsKKwkJZnJlZSh2YWx1ZXMpOworCQlQUWNvbm5p bmZvRnJlZShjb25uX29wdHMpOworCisJCS8qCisJCSAqIE1lcmdlIHRoZSBjb25uZWN0aW9uIGlu Zm8gaW5wdXRzIGdpdmVuIGluIGZvcm0gb2YgY29ubmVjdGlvbiBzdHJpbmcKKwkJICogYW5kIG90 aGVyIG9wdGlvbnMuICBFeHBsaWNpdGx5IGRpc2NhcmQgYW55IGRibmFtZSB2YWx1ZSBpbiB0aGUK KwkJICogY29ubmVjdGlvbiBzdHJpbmc7IG90aGVyd2lzZSwgUFFjb25uZWN0ZGJQYXJhbXMoKSB3 b3VsZCBpbnRlcnByZXQKKwkJICogdGhhdCB2YWx1ZSBhcyBiZWluZyBpdHNlbGYgYSBjb25uZWN0 aW9uIHN0cmluZy4KKwkJICovCisJCWlmIChjb25uZWN0aW9uX3N0cmluZykKKwkJeworCQkJY29u bl9vcHRzID0gUFFjb25uaW5mb1BhcnNlKGNvbm5lY3Rpb25fc3RyaW5nLCAmZXJyX21zZyk7CisJ CQlpZiAoY29ubl9vcHRzID09IE5VTEwpCisJCQkJcGdfZmF0YWwoIiVzIiwgZXJyX21zZyk7CisK KwkJCWZvciAoY29ubl9vcHQgPSBjb25uX29wdHM7IGNvbm5fb3B0LT5rZXl3b3JkICE9IE5VTEw7 IGNvbm5fb3B0KyspCisJCQl7CisJCQkJaWYgKGNvbm5fb3B0LT52YWwgIT0gTlVMTCAmJiBjb25u X29wdC0+dmFsWzBdICE9ICdcMCcgJiYKKwkJCQkJc3RyY21wKGNvbm5fb3B0LT5rZXl3b3JkLCAi ZGJuYW1lIikgIT0gMCkKKwkJCQkJYXJnY291bnQrKzsKKwkJCX0KKworCQkJa2V5d29yZHMgPSBw Z19tYWxsb2MwKChhcmdjb3VudCArIDEpICogc2l6ZW9mKCprZXl3b3JkcykpOworCQkJdmFsdWVz ID0gcGdfbWFsbG9jMCgoYXJnY291bnQgKyAxKSAqIHNpemVvZigqdmFsdWVzKSk7CisKKwkJCWZv ciAoY29ubl9vcHQgPSBjb25uX29wdHM7IGNvbm5fb3B0LT5rZXl3b3JkICE9IE5VTEw7IGNvbm5f b3B0KyspCisJCQl7CisJCQkJaWYgKGNvbm5fb3B0LT52YWwgIT0gTlVMTCAmJiBjb25uX29wdC0+ dmFsWzBdICE9ICdcMCcgJiYKKwkJCQkJc3RyY21wKGNvbm5fb3B0LT5rZXl3b3JkLCAiZGJuYW1l IikgIT0gMCkKKwkJCQl7CisJCQkJCWtleXdvcmRzW2ldID0gY29ubl9vcHQtPmtleXdvcmQ7CisJ CQkJCXZhbHVlc1tpXSA9IGNvbm5fb3B0LT52YWw7CisJCQkJCWkrKzsKKwkJCQl9CisJCQl9CisJ CX0KKwkJZWxzZQorCQl7CisJCQlrZXl3b3JkcyA9IHBnX21hbGxvYzAoKGFyZ2NvdW50ICsgMSkg KiBzaXplb2YoKmtleXdvcmRzKSk7CisJCQl2YWx1ZXMgPSBwZ19tYWxsb2MwKChhcmdjb3VudCAr IDEpICogc2l6ZW9mKCp2YWx1ZXMpKTsKKwkJfQorCisJCWlmIChwZ2hvc3QpCisJCXsKKwkJCWtl eXdvcmRzW2ldID0gImhvc3QiOworCQkJdmFsdWVzW2ldID0gcGdob3N0OworCQkJaSsrOworCQl9 CisJCWlmIChwZ3BvcnQpCisJCXsKKwkJCWtleXdvcmRzW2ldID0gInBvcnQiOworCQkJdmFsdWVz W2ldID0gcGdwb3J0OworCQkJaSsrOworCQl9CisJCWlmIChwZ3VzZXIpCisJCXsKKwkJCWtleXdv cmRzW2ldID0gInVzZXIiOworCQkJdmFsdWVzW2ldID0gcGd1c2VyOworCQkJaSsrOworCQl9CisJ CWlmIChwYXNzd29yZCkKKwkJeworCQkJa2V5d29yZHNbaV0gPSAicGFzc3dvcmQiOworCQkJdmFs dWVzW2ldID0gcGFzc3dvcmQ7CisJCQlpKys7CisJCX0KKwkJaWYgKGRibmFtZSkKKwkJeworCQkJ a2V5d29yZHNbaV0gPSAiZGJuYW1lIjsKKwkJCXZhbHVlc1tpXSA9IGRibmFtZTsKKwkJCWkrKzsK KwkJfQorCQlrZXl3b3Jkc1tpXSA9ICJmYWxsYmFja19hcHBsaWNhdGlvbl9uYW1lIjsKKwkJdmFs dWVzW2ldID0gcHJvZ25hbWU7CisJCWkrKzsKKworCQluZXdfcGFzcyA9IGZhbHNlOworCQljb25u ID0gUFFjb25uZWN0ZGJQYXJhbXMoa2V5d29yZHMsIHZhbHVlcywgdHJ1ZSk7CisKKwkJaWYgKCFj b25uKQorCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBjb25uZWN0IHRvIGRhdGFiYXNlIFwiJXNcIiIs IGRibmFtZSk7CisKKwkJaWYgKFBRc3RhdHVzKGNvbm4pID09IENPTk5FQ1RJT05fQkFEICYmCisJ CQlQUWNvbm5lY3Rpb25OZWVkc1Bhc3N3b3JkKGNvbm4pICYmCisJCQkhcGFzc3dvcmQgJiYKKwkJ CXByb21wdF9wYXNzd29yZCAhPSBUUklfTk8pCisJCXsKKwkJCVBRZmluaXNoKGNvbm4pOworCQkJ cGFzc3dvcmQgPSBzaW1wbGVfcHJvbXB0KCJQYXNzd29yZDogIiwgZmFsc2UpOworCQkJbmV3X3Bh c3MgPSB0cnVlOworCQl9CisJfSB3aGlsZSAobmV3X3Bhc3MpOworCisJLyogY2hlY2sgdG8gc2Vl IHRoYXQgdGhlIGJhY2tlbmQgY29ubmVjdGlvbiB3YXMgc3VjY2Vzc2Z1bGx5IG1hZGUgKi8KKwlp ZiAoUFFzdGF0dXMoY29ubikgPT0gQ09OTkVDVElPTl9CQUQpCisJeworCQlpZiAoZmFpbF9vbl9l cnJvcikKKwkJCXBnX2ZhdGFsKCIlcyIsIFBRZXJyb3JNZXNzYWdlKGNvbm4pKTsKKwkJZWxzZQor CQl7CisJCQlQUWZpbmlzaChjb25uKTsKKworCQkJZnJlZShrZXl3b3Jkcyk7CisJCQlmcmVlKHZh bHVlcyk7CisJCQlQUWNvbm5pbmZvRnJlZShjb25uX29wdHMpOworCisJCQlyZXR1cm4gTlVMTDsK KwkJfQorCX0KKworCS8qCisJICogT2ssIGNvbm5lY3RlZCBzdWNjZXNzZnVsbHkuIElmIHJlcXVl c3RlZCwgcmVtZW1iZXIgdGhlIG9wdGlvbnMgdXNlZCwgaW4gdGhlCisJICogZm9ybSBvZiBhIGNv bm5lY3Rpb24gc3RyaW5nLgorCSAqLworCWlmIChjb25uc3RyKQorCQkqY29ubnN0ciA9IGNvbnN0 cnVjdENvbm5TdHIoa2V5d29yZHMsIHZhbHVlcyk7CisKKwlmcmVlKGtleXdvcmRzKTsKKwlmcmVl KHZhbHVlcyk7CisJUFFjb25uaW5mb0ZyZWUoY29ubl9vcHRzKTsKKworCS8qIENoZWNrIHZlcnNp b24gKi8KKwlyZW1vdGV2ZXJzaW9uX3N0ciA9IFBRcGFyYW1ldGVyU3RhdHVzKGNvbm4sICJzZXJ2 ZXJfdmVyc2lvbiIpOworCWlmICghcmVtb3RldmVyc2lvbl9zdHIpCisJCXBnX2ZhdGFsKCJjb3Vs ZCBub3QgZ2V0IHNlcnZlciB2ZXJzaW9uIik7CisKKwlzZXJ2ZXJfdmVyc2lvbl90ZW1wID0gUFFz ZXJ2ZXJWZXJzaW9uKGNvbm4pOworCWlmIChzZXJ2ZXJfdmVyc2lvbl90ZW1wID09IDApCisJCXBn X2ZhdGFsKCJjb3VsZCBub3QgcGFyc2Ugc2VydmVyIHZlcnNpb24gXCIlc1wiIiwKKwkJCQkgcmVt b3RldmVyc2lvbl9zdHIpOworCisJLyogSWYgcmVxdWVzdGVkLCB0aGVuIGNvcHkgc2VydmVyIHZl cnNpb24gdG8gb3V0IHZhcmlhYmxlLiAqLworCWlmIChzZXJ2ZXJfdmVyc2lvbikKKwkJKnNlcnZl cl92ZXJzaW9uID0gc2VydmVyX3ZlcnNpb25fdGVtcDsKKworCW15X3ZlcnNpb24gPSBQR19WRVJT SU9OX05VTTsKKworCS8qCisJICogV2UgYWxsb3cgdGhlIHNlcnZlciB0byBiZSBiYWNrIHRvIDku MiwgYW5kIHVwIHRvIGFueSBtaW5vciByZWxlYXNlIG9mCisJICogb3VyIG93biBtYWpvciB2ZXJz aW9uLiAgKFNlZSBhbHNvIHZlcnNpb24gY2hlY2sgaW4gcGdfZHVtcC5jLikKKwkgKi8KKwlpZiAo bXlfdmVyc2lvbiAhPSBzZXJ2ZXJfdmVyc2lvbl90ZW1wCisJCSYmIChzZXJ2ZXJfdmVyc2lvbl90 ZW1wIDwgOTAyMDAgfHwKKwkJCShzZXJ2ZXJfdmVyc2lvbl90ZW1wIC8gMTAwKSA+IChteV92ZXJz aW9uIC8gMTAwKSkpCisJeworCQlwZ19sb2dfZXJyb3IoImFib3J0aW5nIGJlY2F1c2Ugb2Ygc2Vy dmVyIHZlcnNpb24gbWlzbWF0Y2giKTsKKwkJcGdfbG9nX2Vycm9yX2RldGFpbCgic2VydmVyIHZl cnNpb246ICVzOyAlcyB2ZXJzaW9uOiAlcyIsCisJCQkJCQkJcmVtb3RldmVyc2lvbl9zdHIsIHBy b2duYW1lLCBQR19WRVJTSU9OKTsKKwkJZXhpdF9uaWNlbHkoMSk7CisJfQorCisJUFFjbGVhcihl eGVjdXRlUXVlcnkoY29ubiwgQUxXQVlTX1NFQ1VSRV9TRUFSQ0hfUEFUSF9TUUwpKTsKKworCXJl dHVybiBjb25uOworfQorCisvKgorICogY29uc3RydWN0Q29ublN0cgorICoKKyAqIENvbnN0cnVj dCBhIGNvbm5lY3Rpb24gc3RyaW5nIGZyb20gdGhlIGdpdmVuIGtleXdvcmQvdmFsdWUgcGFpcnMu IEl0IGlzCisgKiB1c2VkIHRvIHBhc3MgdGhlIGNvbm5lY3Rpb24gb3B0aW9ucyB0byB0aGUgcGdf ZHVtcCBzdWJwcm9jZXNzLgorICoKKyAqIFRoZSBmb2xsb3dpbmcgcGFyYW1ldGVycyBhcmUgZXhj bHVkZWQ6CisgKglkYm5hbWUJCS0gdmFyaWVzIGluIGVhY2ggcGdfZHVtcCBpbnZvY2F0aW9uCisg KglwYXNzd29yZAktIGl0J3Mgbm90IHNlY3VyZSB0byBwYXNzIGEgcGFzc3dvcmQgb24gdGhlIGNv bW1hbmQgbGluZQorICoJZmFsbGJhY2tfYXBwbGljYXRpb25fbmFtZSAtIHdlJ2xsIGxldCBwZ19k dW1wIHNldCBpdAorICovCitzdGF0aWMgY2hhciAqCitjb25zdHJ1Y3RDb25uU3RyKGNvbnN0IGNo YXIgKiprZXl3b3JkcywgY29uc3QgY2hhciAqKnZhbHVlcykKK3sKKwlQUUV4cEJ1ZmZlciBidWYg PSBjcmVhdGVQUUV4cEJ1ZmZlcigpOworCWNoYXIJICAgKmNvbm5zdHI7CisJaW50CQkJaTsKKwli b29sCQlmaXJzdGtleXdvcmQgPSB0cnVlOworCisJLyogQ29uc3RydWN0IGEgbmV3IGNvbm5lY3Rp b24gc3RyaW5nIGluIGtleT0ndmFsdWUnIGZvcm1hdC4gKi8KKwlmb3IgKGkgPSAwOyBrZXl3b3Jk c1tpXSAhPSBOVUxMOyBpKyspCisJeworCQlpZiAoc3RyY21wKGtleXdvcmRzW2ldLCAiZGJuYW1l IikgPT0gMCB8fAorCQkJc3RyY21wKGtleXdvcmRzW2ldLCAicGFzc3dvcmQiKSA9PSAwIHx8CisJ CQlzdHJjbXAoa2V5d29yZHNbaV0sICJmYWxsYmFja19hcHBsaWNhdGlvbl9uYW1lIikgPT0gMCkK KwkJCWNvbnRpbnVlOworCisJCWlmICghZmlyc3RrZXl3b3JkKQorCQkJYXBwZW5kUFFFeHBCdWZm ZXJDaGFyKGJ1ZiwgJyAnKTsKKwkJZmlyc3RrZXl3b3JkID0gZmFsc2U7CisJCWFwcGVuZFBRRXhw QnVmZmVyKGJ1ZiwgIiVzPSIsIGtleXdvcmRzW2ldKTsKKwkJYXBwZW5kQ29ublN0clZhbChidWYs IHZhbHVlc1tpXSk7CisJfQorCisJY29ubnN0ciA9IHBnX3N0cmR1cChidWYtPmRhdGEpOworCWRl c3Ryb3lQUUV4cEJ1ZmZlcihidWYpOworCXJldHVybiBjb25uc3RyOworfQorCisvKgorICogZXhl Y3V0ZVF1ZXJ5CisgKgorICogUnVuIGEgcXVlcnksIHJldHVybiB0aGUgcmVzdWx0cywgZXhpdCBw cm9ncmFtIG9uIGZhaWx1cmUuCisgKi8KK1BHcmVzdWx0ICoKK2V4ZWN1dGVRdWVyeShQR2Nvbm4g KmNvbm4sIGNvbnN0IGNoYXIgKnF1ZXJ5KQoreworCVBHcmVzdWx0ICAgKnJlczsKKworCXBnX2xv Z19pbmZvKCJleGVjdXRpbmcgJXMiLCBxdWVyeSk7CisKKwlyZXMgPSBQUWV4ZWMoY29ubiwgcXVl cnkpOworCWlmICghcmVzIHx8CisJCVBRcmVzdWx0U3RhdHVzKHJlcykgIT0gUEdSRVNfVFVQTEVT X09LKQorCXsKKwkJcGdfbG9nX2Vycm9yKCJxdWVyeSBmYWlsZWQ6ICVzIiwgUFFlcnJvck1lc3Nh Z2UoY29ubikpOworCQlwZ19sb2dfZXJyb3JfZGV0YWlsKCJRdWVyeSB3YXM6ICVzIiwgcXVlcnkp OworCQlQUWZpbmlzaChjb25uKTsKKwkJZXhpdF9uaWNlbHkoMSk7CisJfQorCisJcmV0dXJuIHJl czsKK30KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9jb21tb25fZHVtcGFsbF9yZXN0b3Jl LmggYi9zcmMvYmluL3BnX2R1bXAvY29tbW9uX2R1bXBhbGxfcmVzdG9yZS5oCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi43ZmUxYzAwYWI3MQotLS0gL2Rldi9udWxsCisr KyBiL3NyYy9iaW4vcGdfZHVtcC9jb21tb25fZHVtcGFsbF9yZXN0b3JlLmgKQEAgLTAsMCArMSwy NCBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogY29tbW9uX2R1bXBhbGxfcmVzdG9yZS5o CisgKiAgICAgIENvbW1vbiBoZWFkZXIgZmlsZSBmb3IgcGdfZHVtcGFsbCBhbmQgcGdfcmVzdG9y ZQorICoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDI1LCBQb3N0Z3JlU1FMIEds b2JhbCBEZXZlbG9wbWVudCBHcm91cAorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBS ZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKKyAqCisgKiBJREVOVElGSUNB VElPTgorICogICAgc3JjL2Jpbi9wZ19kdW1wL2NvbW1vbl9kdW1wYWxsX3Jlc3RvcmUuaAorICoK KyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaWZuZGVmIENPTU1PTl9EVU1QQUxMX1JFU1RPUkVf SAorI2RlZmluZSBDT01NT05fRFVNUEFMTF9SRVNUT1JFX0gKKworI2luY2x1ZGUgInBnX2JhY2t1 cC5oIgorCitleHRlcm4gUEdjb25uICpjb25uZWN0RGF0YWJhc2UoY29uc3QgY2hhciAqZGJuYW1l LCBjb25zdCBjaGFyICpjb25uZWN0aW9uX3N0cmluZywgY29uc3QgY2hhciAqcGdob3N0LAorCQkJ CQkJCSAgIGNvbnN0IGNoYXIgKnBncG9ydCwgY29uc3QgY2hhciAqcGd1c2VyLAorCQkJCQkJCSAg IHRyaXZhbHVlIHByb21wdF9wYXNzd29yZCwgYm9vbCBmYWlsX29uX2Vycm9yLAorCQkJCQkJCSAg IGNvbnN0IGNoYXIgKnByb2duYW1lLCBjb25zdCBjaGFyICoqY29ubnN0ciwgaW50ICpzZXJ2ZXJf dmVyc2lvbik7CitleHRlcm4gIFBHcmVzdWx0ICpleGVjdXRlUXVlcnkoUEdjb25uICpjb25uLCBj b25zdCBjaGFyICpxdWVyeSk7CisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENP TU1PTl9EVU1QQUxMX1JFU1RPUkVfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL21l c29uLmJ1aWxkIGIvc3JjL2Jpbi9wZ19kdW1wL21lc29uLmJ1aWxkCmluZGV4IDYwM2JhNmNmYmYw Li45N2RiZmFlYjY3ZiAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL21lc29uLmJ1aWxkCisr KyBiL3NyYy9iaW4vcGdfZHVtcC9tZXNvbi5idWlsZApAQCAtNDksNiArNDksNyBAQCBiaW5fdGFy Z2V0cyArPSBwZ19kdW1wCiAKIHBnX2R1bXBhbGxfc291cmNlcyA9IGZpbGVzKAogICAncGdfZHVt cGFsbC5jJywKKyAgJ2NvbW1vbl9kdW1wYWxsX3Jlc3RvcmUuYycsCiApCiAKIGlmIGhvc3Rfc3lz dGVtID09ICd3aW5kb3dzJwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXBhbGwu YyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wYWxsLmMKaW5kZXggYjk5M2IwNWNjMjIuLmE2ZGFm YjkyMzc3IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcGFsbC5jCisrKyBiL3Ny Yy9iaW4vcGdfZHVtcC9wZ19kdW1wYWxsLmMKQEAgLTIwLDYgKzIwLDcgQEAKIAogI2luY2x1ZGUg ImNhdGFsb2cvcGdfYXV0aGlkX2QuaCIKICNpbmNsdWRlICJjb21tb24vY29ubmVjdC5oIgorI2lu Y2x1ZGUgImNvbW1vbl9kdW1wYWxsX3Jlc3RvcmUuaCIKICNpbmNsdWRlICJjb21tb24vZmlsZV91 dGlscy5oIgogI2luY2x1ZGUgImNvbW1vbi9oYXNoZm5fdW5zdGFibGUuaCIKICNpbmNsdWRlICJj b21tb24vbG9nZ2luZy5oIgpAQCAtNzEsMTIgKzcyLDYgQEAgc3RhdGljIHZvaWQgYnVpbGRTaFNl Y0xhYmVscyhQR2Nvbm4gKmNvbm4sCiAJCQkJCQkJIGNvbnN0IGNoYXIgKmNhdGFsb2dfbmFtZSwg T2lkIG9iamVjdElkLAogCQkJCQkJCSBjb25zdCBjaGFyICpvYmp0eXBlLCBjb25zdCBjaGFyICpv YmpuYW1lLAogCQkJCQkJCSBQUUV4cEJ1ZmZlciBidWZmZXIpOwotc3RhdGljIFBHY29ubiAqY29u bmVjdERhdGFiYXNlKGNvbnN0IGNoYXIgKmRibmFtZSwKLQkJCQkJCQkgICBjb25zdCBjaGFyICpj b25uZWN0aW9uX3N0cmluZywgY29uc3QgY2hhciAqcGdob3N0LAotCQkJCQkJCSAgIGNvbnN0IGNo YXIgKnBncG9ydCwgY29uc3QgY2hhciAqcGd1c2VyLAotCQkJCQkJCSAgIHRyaXZhbHVlIHByb21w dF9wYXNzd29yZCwgYm9vbCBmYWlsX29uX2Vycm9yKTsKLXN0YXRpYyBjaGFyICpjb25zdHJ1Y3RD b25uU3RyKGNvbnN0IGNoYXIgKiprZXl3b3JkcywgY29uc3QgY2hhciAqKnZhbHVlcyk7Ci1zdGF0 aWMgUEdyZXN1bHQgKmV4ZWN1dGVRdWVyeShQR2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKnF1ZXJ5 KTsKIHN0YXRpYyB2b2lkIGV4ZWN1dGVDb21tYW5kKFBHY29ubiAqY29ubiwgY29uc3QgY2hhciAq cXVlcnkpOwogc3RhdGljIHZvaWQgZXhwYW5kX2RibmFtZV9wYXR0ZXJucyhQR2Nvbm4gKmNvbm4s IFNpbXBsZVN0cmluZ0xpc3QgKnBhdHRlcm5zLAogCQkJCQkJCQkgICBTaW1wbGVTdHJpbmdMaXN0 ICpuYW1lcyk7CkBAIC04NSw3ICs4MCw3IEBAIHN0YXRpYyB2b2lkIHJlYWRfZHVtcGFsbF9maWx0 ZXJzKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBTaW1wbGVTdHJpbmdMaXN0ICpwYXR0ZXJuCiBzdGF0 aWMgY2hhciBwZ19kdW1wX2JpbltNQVhQR1BBVEhdOwogc3RhdGljIGNvbnN0IGNoYXIgKnByb2du YW1lOwogc3RhdGljIFBRRXhwQnVmZmVyIHBnZHVtcG9wdHM7Ci1zdGF0aWMgY2hhciAqY29ubnN0 ciA9ICIiOworc3RhdGljIGNvbnN0IGNoYXIgKmNvbm5zdHIgPSAiIjsKIHN0YXRpYyBib29sIG91 dHB1dF9jbGVhbiA9IGZhbHNlOwogc3RhdGljIGJvb2wgc2tpcF9hY2xzID0gZmFsc2U7CiBzdGF0 aWMgYm9vbCB2ZXJib3NlID0gZmFsc2U7CkBAIC00ODQsNyArNDc5LDggQEAgbWFpbihpbnQgYXJn YywgY2hhciAqYXJndltdKQogCWlmIChwZ2RiKQogCXsKIAkJY29ubiA9IGNvbm5lY3REYXRhYmFz ZShwZ2RiLCBjb25uc3RyLCBwZ2hvc3QsIHBncG9ydCwgcGd1c2VyLAotCQkJCQkJCSAgIHByb21w dF9wYXNzd29yZCwgZmFsc2UpOworCQkJCQkJCSAgIHByb21wdF9wYXNzd29yZCwgZmFsc2UsCisJ CQkJCQkJICAgcHJvZ25hbWUsICZjb25uc3RyLCAmc2VydmVyX3ZlcnNpb24pOwogCiAJCWlmICgh Y29ubikKIAkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgY29ubmVjdCB0byBkYXRhYmFzZSBcIiVzXCIi LCBwZ2RiKTsKQEAgLTQ5MiwxMCArNDg4LDEyIEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3Zb XSkKIAllbHNlCiAJewogCQljb25uID0gY29ubmVjdERhdGFiYXNlKCJwb3N0Z3JlcyIsIGNvbm5z dHIsIHBnaG9zdCwgcGdwb3J0LCBwZ3VzZXIsCi0JCQkJCQkJICAgcHJvbXB0X3Bhc3N3b3JkLCBm YWxzZSk7CisJCQkJCQkJICAgcHJvbXB0X3Bhc3N3b3JkLCBmYWxzZSwKKwkJCQkJCQkgICBwcm9n bmFtZSwgJmNvbm5zdHIsICZzZXJ2ZXJfdmVyc2lvbik7CiAJCWlmICghY29ubikKIAkJCWNvbm4g PSBjb25uZWN0RGF0YWJhc2UoInRlbXBsYXRlMSIsIGNvbm5zdHIsIHBnaG9zdCwgcGdwb3J0LCBw Z3VzZXIsCi0JCQkJCQkJCSAgIHByb21wdF9wYXNzd29yZCwgdHJ1ZSk7CisJCQkJCQkJCSAgIHBy b21wdF9wYXNzd29yZCwgdHJ1ZSwKKwkJCQkJCQkJICAgcHJvZ25hbWUsICZjb25uc3RyLCAmc2Vy dmVyX3ZlcnNpb24pOwogCiAJCWlmICghY29ubikKIAkJewpAQCAtMTY3MCwyNTYgKzE2NjgsNiBA QCBidWlsZFNoU2VjTGFiZWxzKFBHY29ubiAqY29ubiwgY29uc3QgY2hhciAqY2F0YWxvZ19uYW1l LCBPaWQgb2JqZWN0SWQsCiAJZGVzdHJveVBRRXhwQnVmZmVyKHNxbCk7CiB9CiAKLS8qCi0gKiBN YWtlIGEgZGF0YWJhc2UgY29ubmVjdGlvbiB3aXRoIHRoZSBnaXZlbiBwYXJhbWV0ZXJzLiAgQW4K LSAqIGludGVyYWN0aXZlIHBhc3N3b3JkIHByb21wdCBpcyBhdXRvbWF0aWNhbGx5IGlzc3VlZCBp ZiByZXF1aXJlZC4KLSAqCi0gKiBJZiBmYWlsX29uX2Vycm9yIGlzIGZhbHNlLCB3ZSByZXR1cm4g TlVMTCB3aXRob3V0IHByaW50aW5nIGFueSBtZXNzYWdlCi0gKiBvbiBmYWlsdXJlLCBidXQgcHJl c2VydmUgYW55IHByb21wdGVkIHBhc3N3b3JkIGZvciB0aGUgbmV4dCB0cnkuCi0gKgotICogT24g c3VjY2VzcywgdGhlIGdsb2JhbCB2YXJpYWJsZSAnY29ubnN0cicgaXMgc2V0IHRvIGEgY29ubmVj dGlvbiBzdHJpbmcKLSAqIGNvbnRhaW5pbmcgdGhlIG9wdGlvbnMgdXNlZC4KLSAqLwotc3RhdGlj IFBHY29ubiAqCi1jb25uZWN0RGF0YWJhc2UoY29uc3QgY2hhciAqZGJuYW1lLCBjb25zdCBjaGFy ICpjb25uZWN0aW9uX3N0cmluZywKLQkJCQljb25zdCBjaGFyICpwZ2hvc3QsIGNvbnN0IGNoYXIg KnBncG9ydCwgY29uc3QgY2hhciAqcGd1c2VyLAotCQkJCXRyaXZhbHVlIHByb21wdF9wYXNzd29y ZCwgYm9vbCBmYWlsX29uX2Vycm9yKQotewotCVBHY29ubgkgICAqY29ubjsKLQlib29sCQluZXdf cGFzczsKLQljb25zdCBjaGFyICpyZW1vdGV2ZXJzaW9uX3N0cjsKLQlpbnQJCQlteV92ZXJzaW9u OwotCWNvbnN0IGNoYXIgKiprZXl3b3JkcyA9IE5VTEw7Ci0JY29uc3QgY2hhciAqKnZhbHVlcyA9 IE5VTEw7Ci0JUFFjb25uaW5mb09wdGlvbiAqY29ubl9vcHRzID0gTlVMTDsKLQlzdGF0aWMgY2hh ciAqcGFzc3dvcmQgPSBOVUxMOwotCi0JaWYgKHByb21wdF9wYXNzd29yZCA9PSBUUklfWUVTICYm ICFwYXNzd29yZCkKLQkJcGFzc3dvcmQgPSBzaW1wbGVfcHJvbXB0KCJQYXNzd29yZDogIiwgZmFs c2UpOwotCi0JLyoKLQkgKiBTdGFydCB0aGUgY29ubmVjdGlvbi4gIExvb3AgdW50aWwgd2UgaGF2 ZSBhIHBhc3N3b3JkIGlmIHJlcXVlc3RlZCBieQotCSAqIGJhY2tlbmQuCi0JICovCi0JZG8KLQl7 Ci0JCWludAkJCWFyZ2NvdW50ID0gNjsKLQkJUFFjb25uaW5mb09wdGlvbiAqY29ubl9vcHQ7Ci0J CWNoYXIJICAgKmVycl9tc2cgPSBOVUxMOwotCQlpbnQJCQlpID0gMDsKLQotCQlmcmVlKGtleXdv cmRzKTsKLQkJZnJlZSh2YWx1ZXMpOwotCQlQUWNvbm5pbmZvRnJlZShjb25uX29wdHMpOwotCi0J CS8qCi0JCSAqIE1lcmdlIHRoZSBjb25uZWN0aW9uIGluZm8gaW5wdXRzIGdpdmVuIGluIGZvcm0g b2YgY29ubmVjdGlvbiBzdHJpbmcKLQkJICogYW5kIG90aGVyIG9wdGlvbnMuICBFeHBsaWNpdGx5 IGRpc2NhcmQgYW55IGRibmFtZSB2YWx1ZSBpbiB0aGUKLQkJICogY29ubmVjdGlvbiBzdHJpbmc7 IG90aGVyd2lzZSwgUFFjb25uZWN0ZGJQYXJhbXMoKSB3b3VsZCBpbnRlcnByZXQKLQkJICogdGhh dCB2YWx1ZSBhcyBiZWluZyBpdHNlbGYgYSBjb25uZWN0aW9uIHN0cmluZy4KLQkJICovCi0JCWlm IChjb25uZWN0aW9uX3N0cmluZykKLQkJewotCQkJY29ubl9vcHRzID0gUFFjb25uaW5mb1BhcnNl KGNvbm5lY3Rpb25fc3RyaW5nLCAmZXJyX21zZyk7Ci0JCQlpZiAoY29ubl9vcHRzID09IE5VTEwp Ci0JCQkJcGdfZmF0YWwoIiVzIiwgZXJyX21zZyk7Ci0KLQkJCWZvciAoY29ubl9vcHQgPSBjb25u X29wdHM7IGNvbm5fb3B0LT5rZXl3b3JkICE9IE5VTEw7IGNvbm5fb3B0KyspCi0JCQl7Ci0JCQkJ aWYgKGNvbm5fb3B0LT52YWwgIT0gTlVMTCAmJiBjb25uX29wdC0+dmFsWzBdICE9ICdcMCcgJiYK LQkJCQkJc3RyY21wKGNvbm5fb3B0LT5rZXl3b3JkLCAiZGJuYW1lIikgIT0gMCkKLQkJCQkJYXJn Y291bnQrKzsKLQkJCX0KLQotCQkJa2V5d29yZHMgPSBwZ19tYWxsb2MwKChhcmdjb3VudCArIDEp ICogc2l6ZW9mKCprZXl3b3JkcykpOwotCQkJdmFsdWVzID0gcGdfbWFsbG9jMCgoYXJnY291bnQg KyAxKSAqIHNpemVvZigqdmFsdWVzKSk7Ci0KLQkJCWZvciAoY29ubl9vcHQgPSBjb25uX29wdHM7 IGNvbm5fb3B0LT5rZXl3b3JkICE9IE5VTEw7IGNvbm5fb3B0KyspCi0JCQl7Ci0JCQkJaWYgKGNv bm5fb3B0LT52YWwgIT0gTlVMTCAmJiBjb25uX29wdC0+dmFsWzBdICE9ICdcMCcgJiYKLQkJCQkJ c3RyY21wKGNvbm5fb3B0LT5rZXl3b3JkLCAiZGJuYW1lIikgIT0gMCkKLQkJCQl7Ci0JCQkJCWtl eXdvcmRzW2ldID0gY29ubl9vcHQtPmtleXdvcmQ7Ci0JCQkJCXZhbHVlc1tpXSA9IGNvbm5fb3B0 LT52YWw7Ci0JCQkJCWkrKzsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJZWxzZQotCQl7Ci0JCQlrZXl3 b3JkcyA9IHBnX21hbGxvYzAoKGFyZ2NvdW50ICsgMSkgKiBzaXplb2YoKmtleXdvcmRzKSk7Ci0J CQl2YWx1ZXMgPSBwZ19tYWxsb2MwKChhcmdjb3VudCArIDEpICogc2l6ZW9mKCp2YWx1ZXMpKTsK LQkJfQotCi0JCWlmIChwZ2hvc3QpCi0JCXsKLQkJCWtleXdvcmRzW2ldID0gImhvc3QiOwotCQkJ dmFsdWVzW2ldID0gcGdob3N0OwotCQkJaSsrOwotCQl9Ci0JCWlmIChwZ3BvcnQpCi0JCXsKLQkJ CWtleXdvcmRzW2ldID0gInBvcnQiOwotCQkJdmFsdWVzW2ldID0gcGdwb3J0OwotCQkJaSsrOwot CQl9Ci0JCWlmIChwZ3VzZXIpCi0JCXsKLQkJCWtleXdvcmRzW2ldID0gInVzZXIiOwotCQkJdmFs dWVzW2ldID0gcGd1c2VyOwotCQkJaSsrOwotCQl9Ci0JCWlmIChwYXNzd29yZCkKLQkJewotCQkJ a2V5d29yZHNbaV0gPSAicGFzc3dvcmQiOwotCQkJdmFsdWVzW2ldID0gcGFzc3dvcmQ7Ci0JCQlp Kys7Ci0JCX0KLQkJaWYgKGRibmFtZSkKLQkJewotCQkJa2V5d29yZHNbaV0gPSAiZGJuYW1lIjsK LQkJCXZhbHVlc1tpXSA9IGRibmFtZTsKLQkJCWkrKzsKLQkJfQotCQlrZXl3b3Jkc1tpXSA9ICJm YWxsYmFja19hcHBsaWNhdGlvbl9uYW1lIjsKLQkJdmFsdWVzW2ldID0gcHJvZ25hbWU7Ci0JCWkr KzsKLQotCQluZXdfcGFzcyA9IGZhbHNlOwotCQljb25uID0gUFFjb25uZWN0ZGJQYXJhbXMoa2V5 d29yZHMsIHZhbHVlcywgdHJ1ZSk7Ci0KLQkJaWYgKCFjb25uKQotCQkJcGdfZmF0YWwoImNvdWxk IG5vdCBjb25uZWN0IHRvIGRhdGFiYXNlIFwiJXNcIiIsIGRibmFtZSk7Ci0KLQkJaWYgKFBRc3Rh dHVzKGNvbm4pID09IENPTk5FQ1RJT05fQkFEICYmCi0JCQlQUWNvbm5lY3Rpb25OZWVkc1Bhc3N3 b3JkKGNvbm4pICYmCi0JCQkhcGFzc3dvcmQgJiYKLQkJCXByb21wdF9wYXNzd29yZCAhPSBUUklf Tk8pCi0JCXsKLQkJCVBRZmluaXNoKGNvbm4pOwotCQkJcGFzc3dvcmQgPSBzaW1wbGVfcHJvbXB0 KCJQYXNzd29yZDogIiwgZmFsc2UpOwotCQkJbmV3X3Bhc3MgPSB0cnVlOwotCQl9Ci0JfSB3aGls ZSAobmV3X3Bhc3MpOwotCi0JLyogY2hlY2sgdG8gc2VlIHRoYXQgdGhlIGJhY2tlbmQgY29ubmVj dGlvbiB3YXMgc3VjY2Vzc2Z1bGx5IG1hZGUgKi8KLQlpZiAoUFFzdGF0dXMoY29ubikgPT0gQ09O TkVDVElPTl9CQUQpCi0JewotCQlpZiAoZmFpbF9vbl9lcnJvcikKLQkJCXBnX2ZhdGFsKCIlcyIs IFBRZXJyb3JNZXNzYWdlKGNvbm4pKTsKLQkJZWxzZQotCQl7Ci0JCQlQUWZpbmlzaChjb25uKTsK LQotCQkJZnJlZShrZXl3b3Jkcyk7Ci0JCQlmcmVlKHZhbHVlcyk7Ci0JCQlQUWNvbm5pbmZvRnJl ZShjb25uX29wdHMpOwotCi0JCQlyZXR1cm4gTlVMTDsKLQkJfQotCX0KLQotCS8qCi0JICogT2ss IGNvbm5lY3RlZCBzdWNjZXNzZnVsbHkuIFJlbWVtYmVyIHRoZSBvcHRpb25zIHVzZWQsIGluIHRo ZSBmb3JtIG9mIGEKLQkgKiBjb25uZWN0aW9uIHN0cmluZy4KLQkgKi8KLQljb25uc3RyID0gY29u c3RydWN0Q29ublN0cihrZXl3b3JkcywgdmFsdWVzKTsKLQotCWZyZWUoa2V5d29yZHMpOwotCWZy ZWUodmFsdWVzKTsKLQlQUWNvbm5pbmZvRnJlZShjb25uX29wdHMpOwotCi0JLyogQ2hlY2sgdmVy c2lvbiAqLwotCXJlbW90ZXZlcnNpb25fc3RyID0gUFFwYXJhbWV0ZXJTdGF0dXMoY29ubiwgInNl cnZlcl92ZXJzaW9uIik7Ci0JaWYgKCFyZW1vdGV2ZXJzaW9uX3N0cikKLQkJcGdfZmF0YWwoImNv dWxkIG5vdCBnZXQgc2VydmVyIHZlcnNpb24iKTsKLQlzZXJ2ZXJfdmVyc2lvbiA9IFBRc2VydmVy VmVyc2lvbihjb25uKTsKLQlpZiAoc2VydmVyX3ZlcnNpb24gPT0gMCkKLQkJcGdfZmF0YWwoImNv dWxkIG5vdCBwYXJzZSBzZXJ2ZXIgdmVyc2lvbiBcIiVzXCIiLAotCQkJCSByZW1vdGV2ZXJzaW9u X3N0cik7Ci0KLQlteV92ZXJzaW9uID0gUEdfVkVSU0lPTl9OVU07Ci0KLQkvKgotCSAqIFdlIGFs bG93IHRoZSBzZXJ2ZXIgdG8gYmUgYmFjayB0byA5LjIsIGFuZCB1cCB0byBhbnkgbWlub3IgcmVs ZWFzZSBvZgotCSAqIG91ciBvd24gbWFqb3IgdmVyc2lvbi4gIChTZWUgYWxzbyB2ZXJzaW9uIGNo ZWNrIGluIHBnX2R1bXAuYy4pCi0JICovCi0JaWYgKG15X3ZlcnNpb24gIT0gc2VydmVyX3ZlcnNp b24KLQkJJiYgKHNlcnZlcl92ZXJzaW9uIDwgOTAyMDAgfHwKLQkJCShzZXJ2ZXJfdmVyc2lvbiAv IDEwMCkgPiAobXlfdmVyc2lvbiAvIDEwMCkpKQotCXsKLQkJcGdfbG9nX2Vycm9yKCJhYm9ydGlu ZyBiZWNhdXNlIG9mIHNlcnZlciB2ZXJzaW9uIG1pc21hdGNoIik7Ci0JCXBnX2xvZ19lcnJvcl9k ZXRhaWwoInNlcnZlciB2ZXJzaW9uOiAlczsgJXMgdmVyc2lvbjogJXMiLAotCQkJCQkJCXJlbW90 ZXZlcnNpb25fc3RyLCBwcm9nbmFtZSwgUEdfVkVSU0lPTik7Ci0JCWV4aXRfbmljZWx5KDEpOwot CX0KLQotCVBRY2xlYXIoZXhlY3V0ZVF1ZXJ5KGNvbm4sIEFMV0FZU19TRUNVUkVfU0VBUkNIX1BB VEhfU1FMKSk7Ci0KLQlyZXR1cm4gY29ubjsKLX0KLQotLyogLS0tLS0tLS0tLQotICogQ29uc3Ry dWN0IGEgY29ubmVjdGlvbiBzdHJpbmcgZnJvbSB0aGUgZ2l2ZW4ga2V5d29yZC92YWx1ZSBwYWly cy4gSXQgaXMKLSAqIHVzZWQgdG8gcGFzcyB0aGUgY29ubmVjdGlvbiBvcHRpb25zIHRvIHRoZSBw Z19kdW1wIHN1YnByb2Nlc3MuCi0gKgotICogVGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzIGFyZSBl eGNsdWRlZDoKLSAqCWRibmFtZQkJLSB2YXJpZXMgaW4gZWFjaCBwZ19kdW1wIGludm9jYXRpb24K LSAqCXBhc3N3b3JkCS0gaXQncyBub3Qgc2VjdXJlIHRvIHBhc3MgYSBwYXNzd29yZCBvbiB0aGUg Y29tbWFuZCBsaW5lCi0gKglmYWxsYmFja19hcHBsaWNhdGlvbl9uYW1lIC0gd2UnbGwgbGV0IHBn X2R1bXAgc2V0IGl0Ci0gKiAtLS0tLS0tLS0tCi0gKi8KLXN0YXRpYyBjaGFyICoKLWNvbnN0cnVj dENvbm5TdHIoY29uc3QgY2hhciAqKmtleXdvcmRzLCBjb25zdCBjaGFyICoqdmFsdWVzKQotewot CVBRRXhwQnVmZmVyIGJ1ZiA9IGNyZWF0ZVBRRXhwQnVmZmVyKCk7Ci0JY2hhcgkgICAqY29ubnN0 cjsKLQlpbnQJCQlpOwotCWJvb2wJCWZpcnN0a2V5d29yZCA9IHRydWU7Ci0KLQkvKiBDb25zdHJ1 Y3QgYSBuZXcgY29ubmVjdGlvbiBzdHJpbmcgaW4ga2V5PSd2YWx1ZScgZm9ybWF0LiAqLwotCWZv ciAoaSA9IDA7IGtleXdvcmRzW2ldICE9IE5VTEw7IGkrKykKLQl7Ci0JCWlmIChzdHJjbXAoa2V5 d29yZHNbaV0sICJkYm5hbWUiKSA9PSAwIHx8Ci0JCQlzdHJjbXAoa2V5d29yZHNbaV0sICJwYXNz d29yZCIpID09IDAgfHwKLQkJCXN0cmNtcChrZXl3b3Jkc1tpXSwgImZhbGxiYWNrX2FwcGxpY2F0 aW9uX25hbWUiKSA9PSAwKQotCQkJY29udGludWU7Ci0KLQkJaWYgKCFmaXJzdGtleXdvcmQpCi0J CQlhcHBlbmRQUUV4cEJ1ZmZlckNoYXIoYnVmLCAnICcpOwotCQlmaXJzdGtleXdvcmQgPSBmYWxz ZTsKLQkJYXBwZW5kUFFFeHBCdWZmZXIoYnVmLCAiJXM9Iiwga2V5d29yZHNbaV0pOwotCQlhcHBl bmRDb25uU3RyVmFsKGJ1ZiwgdmFsdWVzW2ldKTsKLQl9Ci0KLQljb25uc3RyID0gcGdfc3RyZHVw KGJ1Zi0+ZGF0YSk7Ci0JZGVzdHJveVBRRXhwQnVmZmVyKGJ1Zik7Ci0JcmV0dXJuIGNvbm5zdHI7 Ci19Ci0KLS8qCi0gKiBSdW4gYSBxdWVyeSwgcmV0dXJuIHRoZSByZXN1bHRzLCBleGl0IHByb2dy YW0gb24gZmFpbHVyZS4KLSAqLwotc3RhdGljIFBHcmVzdWx0ICoKLWV4ZWN1dGVRdWVyeShQR2Nv bm4gKmNvbm4sIGNvbnN0IGNoYXIgKnF1ZXJ5KQotewotCVBHcmVzdWx0ICAgKnJlczsKLQotCXBn X2xvZ19pbmZvKCJleGVjdXRpbmcgJXMiLCBxdWVyeSk7Ci0KLQlyZXMgPSBQUWV4ZWMoY29ubiwg cXVlcnkpOwotCWlmICghcmVzIHx8Ci0JCVBRcmVzdWx0U3RhdHVzKHJlcykgIT0gUEdSRVNfVFVQ TEVTX09LKQotCXsKLQkJcGdfbG9nX2Vycm9yKCJxdWVyeSBmYWlsZWQ6ICVzIiwgUFFlcnJvck1l c3NhZ2UoY29ubikpOwotCQlwZ19sb2dfZXJyb3JfZGV0YWlsKCJRdWVyeSB3YXM6ICVzIiwgcXVl cnkpOwotCQlQUWZpbmlzaChjb25uKTsKLQkJZXhpdF9uaWNlbHkoMSk7Ci0JfQotCi0JcmV0dXJu IHJlczsKLX0KLQogLyoKICAqIEFzIGFib3ZlIGZvciBhIFNRTCBjb21tYW5kICh3aGljaCByZXR1 cm5zIG5vdGhpbmcpLgogICovCi0tIAoyLjM5LjMKCg== --00000000000035c1d9062e932521 Content-Type: application/octet-stream; name="v20_0002_pg_dumpall-with-non-text_format-20th_feb.patch" Content-Disposition: attachment; filename="v20_0002_pg_dumpall-with-non-text_format-20th_feb.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m7deef3j1 RnJvbSA2ZDNlODA1MmNiYTVhODA1MTRmY2NlOGIyZjQ3OWNmMTkyOWU4NmZjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYWhlbmRyYSBTaW5naCBUaGFsb3IgPG1haGk2cnVuQGdtYWls LmNvbT4KRGF0ZTogVGh1LCAyMCBGZWIgMjAyNSAxOTowOTo1NSArMDUzMApTdWJqZWN0OiBbUEFU Q0ggMi8yXSBwZ19kdW1wYWxsIHdpdGggZGlyZWN0b3J5fHRhcnxjdXN0b20gZm9ybWF0IGFuZCBy ZXN0b3JlIAogaXQgIGJ5IHBnX3Jlc3RvcmUKCm5ldyBvcHRpb24gdG8gcGdfZHVtcGFsbDoKLUYs IC0tZm9ybWF0PWR8dHxjfHAgIG91dHB1dCBmaWxlIGZvcm1hdCAoIHBsYWluIHRleHQgKGRlZmF1 bHQpKQoKRXg6MSAuL3BnX2R1bXBhbGwgLS1mb3JtYXQ9ZGlyZWN0b3J5IC0tZmlsZT1kdW1wRGly TmFtZQpFeDoyIC4vcGdfZHVtcGFsbCAtLWZvcm1hdD10YXIgLS1maWxlPWR1bXBEaXJOYW1lCkV4 OjMgLi9wZ19kdW1wYWxsIC0tZm9ybWF0PWN1c3RvbSAtLWZpbGU9ZHVtcERpck5hbWUKRXg6NCAu L3BnX2R1bXBhbGwgLS1mb3JtYXQ9cGxhaW4gLS1maWxlPWR1bXBEaXJOYW1lCgpkdW1wcyBhcmUg YXM6Cmdsb2JhbC5kYXQgOjo6IGdsb2JhbCBzcWwgY29tbWFuZHMgaW4gc2ltcGxlIHBsYWluIGZv cm1hdAptYXAuZGF0LiAgIDo6OiBkYm9pZCBkYm5hbWUgLS0tZW50cmllcyBmb3IgYWxsIGRhdGFi YXNlcyBpbiBzaW1wbGUgdGV4dCBmb3JtCmRhdGFiYXNlcy4gOjo6CiAgICAgIHN1YmRpciAgICAg ZGJvaWQxICAtPiB0b2MuZGF0IGFuZCBkYXRhIGZpbGVzIGluIGFyY2hpdmUgZm9ybWF0CiAgICAg IHN1YmRpciAgICAgZGJvaWQyLiAtPiB0b2MuZGF0IGFuZCBkYXRhIGZpbGVzIGluIGFyY2hpdmUg Zm9ybWF0CiAgICAgICAgICAgICAgZXRjCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpOT1RFOgppZiBuZWVk ZWQsIHJlc3RvcmUgc2luZ2xlIGRiIGJ5IHBhcnRpY3VsYXIgc3ViZGlyCgpFeDogLi9wZ19yZXN0 b3JlIC0tZm9ybWF0PWRpcmVjdG9yeSAtZCBwb3N0Z3JlcyBkdW1wRGlyTmFtZS9kYXRhYmFzZXMv NQogICAtLSBoZXJlLCA1IGlzIHRoZSBkYm9pZCBvZiBwb3N0Z3JlcyBkYgogICAtLSB0byBnZXQg ZGJvaWQsIHJlZmVyIGRibmFtZSBpbiBtYXAuZmlsZQoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KbmV3IG9w dGlvbnMgdG8gcGdfcmVzdG9yZToKLWcsIC0tZ2xvYmFscy1vbmx5ICAgICAgICAgICByZXN0b3Jl IG9ubHkgZ2xvYmFsIG9iamVjdHMsIG5vIGRhdGFiYXNlcwotLWV4Y2x1ZGUtZGF0YWJhc2U9UEFU VEVSTiAgIGV4Y2x1ZGUgZGF0YWJhc2Ugd2hvc2UgbmFtZSBtYXRjaGVzIHBhdHRlcm4KCldoZW4g d2UgZ2l2ZSAtZy8tLWdsb2JhbHMtb25seSBvcHRpb24sIHRoZW4gb25seSByZXN0b3JlIGdsb2Jh bHMsIG5vIGRiIHJlc3RvcmluZy4KCkRlc2lnbjoKV2hlbiAtLWZvcm1hdD1kfHR8YyBpcyBzcGVj aWZpZWQgYW5kIHRoZXJlIGlzIG5vIHRvYy5kYXQgaW4gbWFpbiBkaXJlY3RvcnksIHRoZW4gY2hl Y2sKZm9yIGdsb2JhbC5kYXQgdG8gcmVzdG9yZSBhbGwgZGF0YWJhc2VzLiBJZiBnbG9iYWwuZGF0 IGZpbGUgaXMgZXhpc3QgaW4gZGlyZWN0b3J5LAp0aGVuIGZpcnN0IHJlc3RvcmUgYWxsIGdsb2Jh bHMgZnJvbSBnbG9iYWwuZGF0IGFuZCB0aGVuIHJlc3RvcmUgYWxsIGRhdGFiYXNlcyBvbmUgYnkg b25lCmZyb20gbWFwLmRhdCBsaXN0IChpZiBleGlzdCkKCmZvciAtLWV4Y2x1ZGUtZGF0YWJhc2U9 UEFUVEVSTiBmb3IgcGdfcmVzdG9yZS4KYXMgb2Ygbm93LCBTRUxFQ1QgMSBXSEVSRSBYWFggT1BF UkFUT1IocGdfY2F0YWxvZy5+KSAnXihQQVRURVJOKSQnIENPTExBVEUgcGdfY2F0YWxvZy5kZWZh dWx0CmlmIG5vIGRiIGNvbm5lY3Rpb24sIHRoZW4gUEFUVEVSTj1OQU1FIG1hdGNoaW5nIG9ubHkK CmZvciBlYWNoIGRhdGFiYXNlLCB3ZSBhcmUgY2xlYW5pbmcgb25fZXhpdF9uaWNlbHlfaW5kZXgg bGlzdC4KCmF0IHRoZSBlbmQgb2YgcmVzdG9yZSwgd2UgYXJlIGdpdmluZyB3YXJuaW5nIHdpdGgg dG90YWwgbnVtYmVyIG9mIGVycm9ycyAoaW5jbHVkaW5nIGdsb2JhbC5kYXQsCmFuZCBlYWNoIGRh dGFiYXNlIGVycm9ycykgYW5kIGZvciBlYWNoIGRhdGFiYXNlLCB3ZSBhcmUgcHJpbnRpbmcgd2Fy bmluZyB3aXRoIGRibmFtZSBhbmQgdG90YWwKZXJyb3JzLgoKdGhyZWFkOgpodHRwczovL3d3dy5w b3N0Z3Jlc3FsLm9yZy9tZXNzYWdlLWlkL2ZsYXQvQ0FLWXROQXA5dk90eWRYTDNfcG5HSiUyQlRl dFp0TiUzREZZU25aU01DcVhjZVUzbWtIUHhQZyU0MG1haWwuZ21haWwuY29tIzA2NjQzM2NiNWFl MDA3Y2JlMzVmZWZkZGY3OTZkNTJmCi0tLQogZG9jL3NyYy9zZ21sL3JlZi9wZ19kdW1wYWxsLnNn bWwgICAgIHwgIDgwICsrLQogZG9jL3NyYy9zZ21sL3JlZi9wZ19yZXN0b3JlLnNnbWwgICAgIHwg IDQxICstCiBzcmMvYmluL3BnX2R1bXAvTWFrZWZpbGUgICAgICAgICAgICAgfCAgIDQgKy0KIHNy Yy9iaW4vcGdfZHVtcC9tZXNvbi5idWlsZCAgICAgICAgICB8ICAgMSArCiBzcmMvYmluL3BnX2R1 bXAvcGdfYmFja3VwLmggICAgICAgICAgfCAgIDIgKy0KIHNyYy9iaW4vcGdfZHVtcC9wZ19iYWNr dXBfYXJjaGl2ZXIuYyB8ICAyMCArLQogc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF90YXIuYyAg ICAgIHwgICAyICstCiBzcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX3V0aWxzLmMgICAgfCAgMjMg Ky0KIHNyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfdXRpbHMuaCAgICB8ICAgMSArCiBzcmMvYmlu L3BnX2R1bXAvcGdfZHVtcC5jICAgICAgICAgICAgfCAgIDIgKy0KIHNyYy9iaW4vcGdfZHVtcC9w Z19kdW1wYWxsLmMgICAgICAgICB8IDI4NiArKysrKysrLS0KIHNyYy9iaW4vcGdfZHVtcC9wZ19y ZXN0b3JlLmMgICAgICAgICB8IDg0MSArKysrKysrKysrKysrKysrKysrKysrKysrKy0KIHNyYy9i aW4vcGdfZHVtcC90LzAwMV9iYXNpYy5wbCAgICAgICB8ICAgOSArCiBzcmMvdG9vbHMvcGdpbmRl bnQvdHlwZWRlZnMubGlzdCAgICAgfCAgIDIgKwogMTQgZmlsZXMgY2hhbmdlZCwgMTIzNiBpbnNl cnRpb25zKCspLCA3OCBkZWxldGlvbnMoLSkKIG1vZGUgY2hhbmdlIDEwMDY0NCA9PiAxMDA3NTUg c3JjL2Jpbi9wZ19kdW1wL3QvMDAxX2Jhc2ljLnBsCgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21s L3JlZi9wZ19kdW1wYWxsLnNnbWwgYi9kb2Mvc3JjL3NnbWwvcmVmL3BnX2R1bXBhbGwuc2dtbApp bmRleCBmMDgyMzc2NWM0ZS4uMzllN2Y4ZGRiODkgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9y ZWYvcGdfZHVtcGFsbC5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9yZWYvcGdfZHVtcGFsbC5zZ21s CkBAIC0xNiw3ICsxNiw3IEBAIFBvc3RncmVTUUwgZG9jdW1lbnRhdGlvbgogCiAgPHJlZm5hbWVk aXY+CiAgIDxyZWZuYW1lPnBnX2R1bXBhbGw8L3JlZm5hbWU+Ci0gIDxyZWZwdXJwb3NlPmV4dHJh Y3QgYSA8cHJvZHVjdG5hbWU+UG9zdGdyZVNRTDwvcHJvZHVjdG5hbWU+IGRhdGFiYXNlIGNsdXN0 ZXIgaW50byBhIHNjcmlwdCBmaWxlPC9yZWZwdXJwb3NlPgorICA8cmVmcHVycG9zZT5leHRyYWN0 IGEgPHByb2R1Y3RuYW1lPlBvc3RncmVTUUw8L3Byb2R1Y3RuYW1lPiBkYXRhYmFzZSBjbHVzdGVy IGJhc2VkIG9uIHNwZWNpZmllZCBkdW1wIGZvcm1hdCA8L3JlZnB1cnBvc2U+CiAgPC9yZWZuYW1l ZGl2PgogCiAgPHJlZnN5bm9wc2lzZGl2PgpAQCAtMTIxLDcgKzEyMSw4MyBAQCBQb3N0Z3JlU1FM IGRvY3VtZW50YXRpb24KICAgICAgICA8cGFyYT4KICAgICAgICAgU2VuZCBvdXRwdXQgdG8gdGhl IHNwZWNpZmllZCBmaWxlLiAgSWYgdGhpcyBpcyBvbWl0dGVkLCB0aGUKICAgICAgICAgc3RhbmRh cmQgb3V0cHV0IGlzIHVzZWQuCi0gICAgICAgPC9wYXJhPgorICAgICAgICBOb3RlOiBUaGlzIG9w dGlvbiBjYW4gYmUgb21pdHRlZCBvbmx5IHdoZW4gPG9wdGlvbj4tLWZvcm1hdDwvb3B0aW9uPiBp cyBwbGFpbgorICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgIDwvdmFybGlz dGVudHJ5PgorCisgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICA8dGVybT48b3B0aW9uPi1GIDxy ZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5mb3JtYXQ8L3JlcGxhY2VhYmxlPjwvb3B0aW9u PjwvdGVybT4KKyAgICAgIDx0ZXJtPjxvcHRpb24+LS1mb3JtYXQ9PHJlcGxhY2VhYmxlIGNsYXNz PSJwYXJhbWV0ZXIiPmZvcm1hdDwvcmVwbGFjZWFibGU+PC9vcHRpb24+PC90ZXJtPgorICAgICAg PGxpc3RpdGVtPgorICAgICAgIDxwYXJhPgorICAgICAgICBTcGVjaWZ5IGZvcm1hdCBvZiBkdW1w IGZpbGVzLiAgSWYgd2Ugd2FudCB0byBkdW1wIGFsbCB0aGUgZGF0YWJhc2VzLAorICAgICAgICB0 aGVuIHBhc3MgdGhpcyBhcyBub24tcGxhaW4gc28gdGhhdCBkdW1wIG9mIGFsbCBkYXRhYmFzZXMg Y2FuIGJlIHRha2VuCisgICAgICAgIGluIHNlcGFyYXRlIHN1YmRpcmVjdG9yeSBpbiBhcmNoaXZl IGZvcm1hdC4KKyAgICAgICAgYnkgZGVmYXVsdCwgdGhpcyBpcyBwbGFpbiBmb3JtYXQuCisKKyAg ICAgICAgSWYgbm9uLXBsYWluIG1vZGUgaXMgcGFzc2VkLCB0aGVuIGdsb2JhbC5kYXQgKGdsb2Jh bCBzcWwgY29tbWFuZHMpIGFuZAorICAgICAgICBtYXAuZGF0KGRib2lkIGFuZCBkYm5hbWVzIGxp c3Qgb2YgYWxsIHRoZSBkYXRhYmFzZXMpIGZpbGVzIHdpbGwgYmUgY3JlYXRlZC4KKyAgICAgICAg QXBhcnQgZnJvbSB0aGVzZSBmaWxlcywgb25lIHN1YmRpcmVjdG9yeSB3aXRoIGRhdGFiYXNlcyBu YW1lIHdpbGwgYmUgY3JlYXRlZC4KKyAgICAgICAgVW5kZXIgdGhpcyBkYXRhYmFzZXMgc3ViZGly ZWN0b3J5LCB0aGVyZSB3aWxsIGJlIGZpbGVzIHdpdGggZGJvaWQgbmFtZSBmb3IgZWFjaAorICAg ICAgICBkYXRhYmFzZSBhbmQgaWYgPG9wdGlvbj4tLWZvcm1hdDwvb3B0aW9uPiBpcyBkaXJlY3Rv cnksIHRoZW4gdG9jLmRhdCBhbmQgb3RoZXIKKyAgICAgICAgZHVtcCBmaWxlcyB3aWxsIGJlIHVu ZGVyIGRib2lkIHN1YmRpcmVjdG9yeS4KKworICAgICAgIDx2YXJpYWJsZWxpc3Q+CisgICAgICAg IDx2YXJsaXN0ZW50cnk+CisgICAgICAgICA8dGVybT48bGl0ZXJhbD5kPC9saXRlcmFsPjwvdGVy bT4KKyAgICAgICAgIDx0ZXJtPjxsaXRlcmFsPmRpcmVjdG9yeTwvbGl0ZXJhbD48L3Rlcm0+Cisg ICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgIE91dHB1dCBh IGRpcmVjdG9yeS1mb3JtYXQgYXJjaGl2ZSBzdWl0YWJsZSBmb3IgaW5wdXQgaW50byBwZ19yZXN0 b3JlLiBVbmRlciBkYm9pZAorICAgICAgICAgICBzdWJkaXJlY3RvcnksIHRoaXMgd2lsbCBjcmVh dGUgYSBkaXJlY3Rvcnkgd2l0aCBvbmUgZmlsZSBmb3IgZWFjaCB0YWJsZSBhbmQgbGFyZ2UKKyAg ICAgICAgICAgb2JqZWN0IGJlaW5nIGR1bXBlZCwgcGx1cyBhIHNvLWNhbGxlZCBUYWJsZSBvZiBD b250ZW50cyBmaWxlIGRlc2NyaWJpbmcgdGhlIGR1bXBlZAorICAgICAgICAgICBvYmplY3RzIGlu IGEgbWFjaGluZS1yZWFkYWJsZSBmb3JtYXQgdGhhdCBwZ19yZXN0b3JlIGNhbiByZWFkLiBBIGRp cmVjdG9yeSBmb3JtYXQKKyAgICAgICAgICAgYXJjaGl2ZSBjYW4gYmUgbWFuaXB1bGF0ZWQgd2l0 aCBzdGFuZGFyZCBVbml4IHRvb2xzOyBmb3IgZXhhbXBsZSwgZmlsZXMgaW4gYW4KKyAgICAgICAg ICAgdW5jb21wcmVzc2VkIGFyY2hpdmUgY2FuIGJlIGNvbXByZXNzZWQgd2l0aCB0aGUgZ3ppcCwg bHo0LCBvciB6c3RkIHRvb2xzLiBUaGlzCisgICAgICAgICAgIGZvcm1hdCBpcyBjb21wcmVzc2Vk IGJ5IGRlZmF1bHQgdXNpbmcgZ3ppcCBhbmQgYWxzbyBzdXBwb3J0cyBwYXJhbGxlbCBkdW1wcy4K KyAgICAgICAgICA8L3BhcmE+CisgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L3Zhcmxp c3RlbnRyeT4KKworICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgPHRlcm0+PGxpdGVy YWw+cDwvbGl0ZXJhbD48L3Rlcm0+CisgICAgICAgICA8dGVybT48bGl0ZXJhbD5wbGFpbjwvbGl0 ZXJhbD48L3Rlcm0+CisgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgPHBhcmE+CisgICAg ICAgICAgIE91dHB1dCBhIHBsYWluLXRleHQgU1FMIHNjcmlwdCBmaWxlICh0aGUgZGVmYXVsdCku CisgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC92YXJs aXN0ZW50cnk+CisKKyAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgIDx0ZXJtPjxsaXRl cmFsPmM8L2xpdGVyYWw+PC90ZXJtPgorICAgICAgICAgPHRlcm0+PGxpdGVyYWw+Y3VzdG9tPC9s aXRlcmFsPjwvdGVybT4KKyAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICA8cGFyYT4KKyAg ICAgICAgICAgT3V0cHV0IGEgY3VzdG9tLWZvcm1hdCBhcmNoaXZlIHN1aXRhYmxlIGZvciBpbnB1 dCBpbnRvIHBnX3Jlc3RvcmUuIFRvZ2V0aGVyIHdpdGggdGhlCisgICAgICAgICAgIGRpcmVjdG9y eSBvdXRwdXQgZm9ybWF0LCB0aGlzIGlzIHRoZSBtb3N0IGZsZXhpYmxlIG91dHB1dCBmb3JtYXQg aW4gdGhhdCBpdCBhbGxvd3MgbWFudWFsCisgICAgICAgICAgIHNlbGVjdGlvbiBhbmQgcmVvcmRl cmluZyBvZiBhcmNoaXZlZCBpdGVtcyBkdXJpbmcgcmVzdG9yZS4gVGhpcyBmb3JtYXQgaXMgYWxz bworICAgICAgICAgICBjb21wcmVzc2VkIGJ5IGRlZmF1bHQuCisgICAgICAgICAgPC9wYXJhPgor ICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAgICAg IDx2YXJsaXN0ZW50cnk+CisgICAgICAgICA8dGVybT48bGl0ZXJhbD50PC9saXRlcmFsPjwvdGVy bT4KKyAgICAgICAgIDx0ZXJtPjxsaXRlcmFsPnRhcjwvbGl0ZXJhbD48L3Rlcm0+CisgICAgICAg ICA8bGlzdGl0ZW0+CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgIE91dHB1dCBhIHRhci1m b3JtYXQgYXJjaGl2ZSBzdWl0YWJsZSBmb3IgaW5wdXQgaW50byBwZ19yZXN0b3JlLiBUaGUgdGFy IGZvcm1hdCBpcworICAgICAgICAgICBjb21wYXRpYmxlIHdpdGggdGhlIGRpcmVjdG9yeSBmb3Jt YXQ6IGV4dHJhY3RpbmcgYSB0YXItZm9ybWF0IGFyY2hpdmUgcHJvZHVjZXMgYSB2YWxpZAorICAg ICAgICAgICBkaXJlY3RvcnktZm9ybWF0IGFyY2hpdmUuIEhvd2V2ZXIsIHRoZSB0YXIgZm9ybWF0 IGRvZXMgbm90IHN1cHBvcnQgY29tcHJlc3Npb24uIEFsc28sCisgICAgICAgICAgIHdoZW4gdXNp bmcgdGFyIGZvcm1hdCB0aGUgcmVsYXRpdmUgb3JkZXIgb2YgdGFibGUgZGF0YSBpdGVtcyBjYW5u b3QgYmUgY2hhbmdlZCBkdXJpbmcgcmVzdG9yZS4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAg ICA8L2xpc3RpdGVtPgorICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgICAgICA8L3Zhcmlh YmxlbGlzdD4KKyAgICAgICAgPC9wYXJhPgogICAgICAgPC9saXN0aXRlbT4KICAgICAgPC92YXJs aXN0ZW50cnk+CiAKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvcGdfcmVzdG9yZS5zZ21s IGIvZG9jL3NyYy9zZ21sL3JlZi9wZ19yZXN0b3JlLnNnbWwKaW5kZXggYjQwMzE3MDg0MzAuLmIx YjZiMmJiYThkIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcmVmL3BnX3Jlc3RvcmUuc2dtbAor KysgYi9kb2Mvc3JjL3NnbWwvcmVmL3BnX3Jlc3RvcmUuc2dtbApAQCAtMTgsOCArMTgsOSBAQCBQ b3N0Z3JlU1FMIGRvY3VtZW50YXRpb24KICAgPHJlZm5hbWU+cGdfcmVzdG9yZTwvcmVmbmFtZT4K IAogICA8cmVmcHVycG9zZT4KLSAgIHJlc3RvcmUgYSA8cHJvZHVjdG5hbWU+UG9zdGdyZVNRTDwv cHJvZHVjdG5hbWU+IGRhdGFiYXNlIGZyb20gYW4KLSAgIGFyY2hpdmUgZmlsZSBjcmVhdGVkIGJ5 IDxhcHBsaWNhdGlvbj5wZ19kdW1wPC9hcHBsaWNhdGlvbj4KKyAgIHJlc3RvcmUgPHByb2R1Y3Ru YW1lPlBvc3RncmVTUUw8L3Byb2R1Y3RuYW1lPiBkYXRhYmFzZSBmcm9tIGFuCisgICBhcmNoaXZl IGZpbGUgY3JlYXRlZCBieSA8YXBwbGljYXRpb24+cGdfZHVtcDwvYXBwbGljYXRpb24+IG9yCisg ICA8YXBwbGljYXRpb24+cGdfZHVtcGFsbDwvYXBwbGljYXRpb24+CiAgIDwvcmVmcHVycG9zZT4K ICA8L3JlZm5hbWVkaXY+CiAKQEAgLTM3LDkgKzM4LDEwIEBAIFBvc3RncmVTUUwgZG9jdW1lbnRh dGlvbgogICA8dGl0bGU+RGVzY3JpcHRpb248L3RpdGxlPgogCiAgIDxwYXJhPgotICAgPGFwcGxp Y2F0aW9uPnBnX3Jlc3RvcmU8L2FwcGxpY2F0aW9uPiBpcyBhIHV0aWxpdHkgZm9yIHJlc3Rvcmlu ZyBhCisgICA8YXBwbGljYXRpb24+cGdfcmVzdG9yZTwvYXBwbGljYXRpb24+IGlzIGEgdXRpbGl0 eSBmb3IgcmVzdG9yaW5nCiAgICA8cHJvZHVjdG5hbWU+UG9zdGdyZVNRTDwvcHJvZHVjdG5hbWU+ IGRhdGFiYXNlIGZyb20gYW4gYXJjaGl2ZQotICAgY3JlYXRlZCBieSA8eHJlZiBsaW5rZW5kPSJh cHAtcGdkdW1wIi8+IGluIG9uZSBvZiB0aGUgbm9uLXBsYWluLXRleHQKKyAgIGNyZWF0ZWQgYnkg PHhyZWYgbGlua2VuZD0iYXBwLXBnZHVtcCIvPiBvcgorICAgPHhyZWYgbGlua2VuZD0iYXBwLXBn LWR1bXBhbGwiLz4gaW4gb25lIG9mIHRoZSBub24tcGxhaW4tdGV4dAogICAgZm9ybWF0cy4gIEl0 IHdpbGwgaXNzdWUgdGhlIGNvbW1hbmRzIG5lY2Vzc2FyeSB0byByZWNvbnN0cnVjdCB0aGUKICAg IGRhdGFiYXNlIHRvIHRoZSBzdGF0ZSBpdCB3YXMgaW4gYXQgdGhlIHRpbWUgaXQgd2FzIHNhdmVk LiAgVGhlCiAgICBhcmNoaXZlIGZpbGVzIGFsc28gYWxsb3cgPGFwcGxpY2F0aW9uPnBnX3Jlc3Rv cmU8L2FwcGxpY2F0aW9uPiB0bwpAQCAtMTQwLDYgKzE0Miw4IEBAIFBvc3RncmVTUUwgZG9jdW1l bnRhdGlvbgogICAgICAgICBjb21tYW5kcyB0aGF0IG1lbnRpb24gdGhpcyBkYXRhYmFzZS4KICAg ICAgICAgQWNjZXNzIHByaXZpbGVnZXMgZm9yIHRoZSBkYXRhYmFzZSBpdHNlbGYgYXJlIGFsc28g cmVzdG9yZWQsCiAgICAgICAgIHVubGVzcyA8b3B0aW9uPi0tbm8tYWNsPC9vcHRpb24+IGlzIHNw ZWNpZmllZC4KKyAgICAgICAgPG9wdGlvbj4tLWNyZWF0ZTwvb3B0aW9uPiBpcyByZXF1aXJlZCB3 aGVuIHJlc3RvcmluZyBtdWx0aXBsZSBkYXRhYmFzZXMKKyAgICAgICAgZnJvbSBkdW1wIG9mIDxh cHBsaWNhdGlvbj5wZ19kdW1wYWxsPC9hcHBsaWNhdGlvbj4uCiAgICAgICAgPC9wYXJhPgogCiAg ICAgICAgPHBhcmE+CkBAIC0xNjYsNiArMTcwLDI1IEBAIFBvc3RncmVTUUwgZG9jdW1lbnRhdGlv bgogICAgICAgPC9saXN0aXRlbT4KICAgICAgPC92YXJsaXN0ZW50cnk+CiAKKyAgICAgPHZhcmxp c3RlbnRyeT4KKyAgICAgIDx0ZXJtPjxvcHRpb24+LS1leGNsdWRlLWRhdGFiYXNlPTxyZXBsYWNl YWJsZSBjbGFzcz0icGFyYW1ldGVyIj5wYXR0ZXJuPC9yZXBsYWNlYWJsZT48L29wdGlvbj48L3Rl cm0+CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAgPHBhcmE+CisgICAgICAgIERvIG5vdCByZXN0 b3JlIGRhdGFiYXNlcyB3aG9zZSBuYW1lIG1hdGNoZXMKKyAgICAgICAgPHJlcGxhY2VhYmxlIGNs YXNzPSJwYXJhbWV0ZXIiPnBhdHRlcm48L3JlcGxhY2VhYmxlPi4KKyAgICAgICAgTXVsdGlwbGUg cGF0dGVybnMgY2FuIGJlIGV4Y2x1ZGVkIGJ5IHdyaXRpbmcgbXVsdGlwbGUKKyAgICAgICAgPG9w dGlvbj4tLWV4Y2x1ZGUtZGF0YWJhc2U8L29wdGlvbj4gc3dpdGNoZXMuICBUaGUKKyAgICAgICAg PHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnBhdHRlcm48L3JlcGxhY2VhYmxlPiBwYXJh bWV0ZXIgaXMKKyAgICAgICAgaW50ZXJwcmV0ZWQgYXMgYSBwYXR0ZXJuIGFjY29yZGluZyB0byB0 aGUgc2FtZSBydWxlcyB1c2VkIGJ5CisgICAgICAgIDxhcHBsaWNhdGlvbj5wc3FsPC9hcHBsaWNh dGlvbj4ncyA8bGl0ZXJhbD5cZDwvbGl0ZXJhbD4KKyAgICAgICAgY29tbWFuZHMgKHNlZSA8eHJl ZiBsaW5rZW5kPSJhcHAtcHNxbC1wYXR0ZXJucyIvPiksCisgICAgICAgIHNvIG11bHRpcGxlIGRh dGFiYXNlcyBjYW4gYWxzbyBiZSBleGNsdWRlZCBieSB3cml0aW5nIHdpbGRjYXJkCisgICAgICAg IGNoYXJhY3RlcnMgaW4gdGhlIHBhdHRlcm4uICBXaGVuIHVzaW5nIHdpbGRjYXJkcywgYmUgY2Fy ZWZ1bCB0bworICAgICAgICBxdW90ZSB0aGUgcGF0dGVybiBpZiBuZWVkZWQgdG8gcHJldmVudCBz aGVsbCB3aWxkY2FyZCBleHBhbnNpb24uCisgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRl bT4KKyAgICAgPC92YXJsaXN0ZW50cnk+CisKICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgIDx0 ZXJtPjxvcHRpb24+LWU8L29wdGlvbj48L3Rlcm0+CiAgICAgICA8dGVybT48b3B0aW9uPi0tZXhp dC1vbi1lcnJvcjwvb3B0aW9uPjwvdGVybT4KQEAgLTMxNSw2ICszMzgsMTYgQEAgUG9zdGdyZVNR TCBkb2N1bWVudGF0aW9uCiAgICAgICA8L2xpc3RpdGVtPgogICAgICA8L3Zhcmxpc3RlbnRyeT4K IAorICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgPHRlcm0+PG9wdGlvbj4tZzwvb3B0aW9uPjwv dGVybT4KKyAgICAgIDx0ZXJtPjxvcHRpb24+LS1nbG9iYWxzLW9ubHk8L29wdGlvbj48L3Rlcm0+ CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAgPHBhcmE+CisgICAgICAgIFJlc3RvcmUgb25seSBn bG9iYWwgb2JqZWN0cyAocm9sZXMgYW5kIHRhYmxlc3BhY2VzKSwgbm8gZGF0YWJhc2VzLgorICAg ICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgIDwvdmFybGlzdGVudHJ5PgorCiAg ICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICA8dGVybT48b3B0aW9uPi1JIDxyZXBsYWNlYWJsZSBj bGFzcz0icGFyYW1ldGVyIj5pbmRleDwvcmVwbGFjZWFibGU+PC9vcHRpb24+PC90ZXJtPgogICAg ICAgPHRlcm0+PG9wdGlvbj4tLWluZGV4PTxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5p bmRleDwvcmVwbGFjZWFibGU+PC9vcHRpb24+PC90ZXJtPgpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9w Z19kdW1wL01ha2VmaWxlIGIvc3JjL2Jpbi9wZ19kdW1wL01ha2VmaWxlCmluZGV4IDg2MDA2ZDEx MWMzLi5hNGU1NTdkNjJjNyAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL01ha2VmaWxlCisr KyBiL3NyYy9iaW4vcGdfZHVtcC9NYWtlZmlsZQpAQCAtNDcsOCArNDcsOCBAQCBhbGw6IHBnX2R1 bXAgcGdfcmVzdG9yZSBwZ19kdW1wYWxsCiBwZ19kdW1wOiBwZ19kdW1wLm8gY29tbW9uLm8gcGdf ZHVtcF9zb3J0Lm8gJChPQkpTKSB8IHN1Ym1ha2UtbGlicHEgc3VibWFrZS1saWJwZ3BvcnQgc3Vi bWFrZS1saWJwZ2ZldXRpbHMKIAkkKENDKSAkKENGTEFHUykgcGdfZHVtcC5vIGNvbW1vbi5vIHBn X2R1bXBfc29ydC5vICQoT0JKUykgJChMREZMQUdTKSAkKExERkxBR1NfRVgpICQoTElCUykgLW8g JEAkKFgpCiAKLXBnX3Jlc3RvcmU6IHBnX3Jlc3RvcmUubyAkKE9CSlMpIHwgc3VibWFrZS1saWJw cSBzdWJtYWtlLWxpYnBncG9ydCBzdWJtYWtlLWxpYnBnZmV1dGlscwotCSQoQ0MpICQoQ0ZMQUdT KSBwZ19yZXN0b3JlLm8gJChPQkpTKSAkKExERkxBR1MpICQoTERGTEFHU19FWCkgJChMSUJTKSAt byAkQCQoWCkKK3BnX3Jlc3RvcmU6IHBnX3Jlc3RvcmUubyBjb21tb25fZHVtcGFsbF9yZXN0b3Jl Lm8gJChPQkpTKSB8IHN1Ym1ha2UtbGlicHEgc3VibWFrZS1saWJwZ3BvcnQgc3VibWFrZS1saWJw Z2ZldXRpbHMKKwkkKENDKSAkKENGTEFHUykgcGdfcmVzdG9yZS5vIGNvbW1vbl9kdW1wYWxsX3Jl c3RvcmUubyAkKE9CSlMpICQoTERGTEFHUykgJChMREZMQUdTX0VYKSAkKExJQlMpIC1vICRAJChY KQogCiBwZ19kdW1wYWxsOiBwZ19kdW1wYWxsLm8gZHVtcHV0aWxzLm8gZmlsdGVyLm8gY29tbW9u X2R1bXBhbGxfcmVzdG9yZS5vICQoV0lOMzJSRVMpIHwgc3VibWFrZS1saWJwcSBzdWJtYWtlLWxp YnBncG9ydCBzdWJtYWtlLWxpYnBnZmV1dGlscwogCSQoQ0MpICQoQ0ZMQUdTKSBwZ19kdW1wYWxs Lm8gZHVtcHV0aWxzLm8gZmlsdGVyLm8gY29tbW9uX2R1bXBhbGxfcmVzdG9yZS5vICQoV0lOMzJS RVMpICQoTERGTEFHUykgJChMREZMQUdTX0VYKSAkKExJQlMpIC1vICRAJChYKQpkaWZmIC0tZ2l0 IGEvc3JjL2Jpbi9wZ19kdW1wL21lc29uLmJ1aWxkIGIvc3JjL2Jpbi9wZ19kdW1wL21lc29uLmJ1 aWxkCmluZGV4IDk3ZGJmYWViNjdmLi5kZGVjYWM1Y2YwOSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9w Z19kdW1wL21lc29uLmJ1aWxkCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9tZXNvbi5idWlsZApAQCAt NjksNiArNjksNyBAQCBiaW5fdGFyZ2V0cyArPSBwZ19kdW1wYWxsCiAKIHBnX3Jlc3RvcmVfc291 cmNlcyA9IGZpbGVzKAogICAncGdfcmVzdG9yZS5jJywKKyAgJ2NvbW1vbl9kdW1wYWxsX3Jlc3Rv cmUuYycsCiApCiAKIGlmIGhvc3Rfc3lzdGVtID09ICd3aW5kb3dzJwpkaWZmIC0tZ2l0IGEvc3Jj L2Jpbi9wZ19kdW1wL3BnX2JhY2t1cC5oIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cC5oCmlu ZGV4IDM1MGNmNjU5YzQxLi5mMzZhOWFlN2NkOSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1w L3BnX2JhY2t1cC5oCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXAuaApAQCAtMzA4LDcg KzMwOCw3IEBAIGV4dGVybiB2b2lkIFNldEFyY2hpdmVPcHRpb25zKEFyY2hpdmUgKkFILCBEdW1w T3B0aW9ucyAqZG9wdCwgUmVzdG9yZU9wdGlvbnMgKnJvCiAKIGV4dGVybiB2b2lkIFByb2Nlc3NB cmNoaXZlUmVzdG9yZU9wdGlvbnMoQXJjaGl2ZSAqQUhYKTsKIAotZXh0ZXJuIHZvaWQgUmVzdG9y ZUFyY2hpdmUoQXJjaGl2ZSAqQUhYKTsKK2V4dGVybiB2b2lkIFJlc3RvcmVBcmNoaXZlKEFyY2hp dmUgKkFIWCwgYm9vbCBhcHBlbmRfZGF0YSk7CiAKIC8qIE9wZW4gYW4gZXhpc3RpbmcgYXJjaGl2 ZSAqLwogZXh0ZXJuIEFyY2hpdmUgKk9wZW5BcmNoaXZlKGNvbnN0IGNoYXIgKkZpbGVTcGVjLCBj b25zdCBBcmNoaXZlRm9ybWF0IGZtdCk7CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdf YmFja3VwX2FyY2hpdmVyLmMgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMK aW5kZXggNjMyMDc3MTEzYTQuLmZiMDcxMTUyN2JmIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1 bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9h cmNoaXZlci5jCkBAIC04NSw3ICs4NSw3IEBAIHN0YXRpYyBpbnQJUmVzdG9yaW5nVG9EQihBcmNo aXZlSGFuZGxlICpBSCk7CiBzdGF0aWMgdm9pZCBkdW1wX2xvX2J1ZihBcmNoaXZlSGFuZGxlICpB SCk7CiBzdGF0aWMgdm9pZCBkdW1wVGltZXN0YW1wKEFyY2hpdmVIYW5kbGUgKkFILCBjb25zdCBj aGFyICptc2csIHRpbWVfdCB0aW0pOwogc3RhdGljIHZvaWQgU2V0T3V0cHV0KEFyY2hpdmVIYW5k bGUgKkFILCBjb25zdCBjaGFyICpmaWxlbmFtZSwKLQkJCQkJICBjb25zdCBwZ19jb21wcmVzc19z cGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMpOworCQkJY29uc3QgcGdfY29tcHJlc3Nfc3Bl Y2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjLCBib29sIGFwcGVuZF9kYXRhKTsKIHN0YXRpYyBD b21wcmVzc0ZpbGVIYW5kbGUgKlNhdmVPdXRwdXQoQXJjaGl2ZUhhbmRsZSAqQUgpOwogc3RhdGlj IHZvaWQgUmVzdG9yZU91dHB1dChBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NGaWxlSGFuZGxl ICpzYXZlZE91dHB1dCk7CiAKQEAgLTMzNiw5ICszMzYsMTQgQEAgUHJvY2Vzc0FyY2hpdmVSZXN0 b3JlT3B0aW9ucyhBcmNoaXZlICpBSFgpCiAJCVN0cmljdE5hbWVzQ2hlY2socm9wdCk7CiB9CiAK LS8qIFB1YmxpYyAqLworLyoKKyAqIFJlc3RvcmVBcmNoaXZlCisgKgorICogSWYgYXBwZW5kX2Rh dGEgaXMgc2V0LCB0aGVuIGFwcGVuZCBkYXRhIGludG8gZmlsZSBhcyB3ZSBhcmUgcmVzdG9yaW5n IGR1bXAKKyAqIG9mIG11bHRpcGxlIGRhdGFiYXNlcyB3aGljaCB3YXMgdGFrZW4gYnkgcGdfZHVt cGFsbC4KKyAqLwogdm9pZAotUmVzdG9yZUFyY2hpdmUoQXJjaGl2ZSAqQUhYKQorUmVzdG9yZUFy Y2hpdmUoQXJjaGl2ZSAqQUhYLCBib29sIGFwcGVuZF9kYXRhKQogewogCUFyY2hpdmVIYW5kbGUg KkFIID0gKEFyY2hpdmVIYW5kbGUgKikgQUhYOwogCVJlc3RvcmVPcHRpb25zICpyb3B0ID0gQUgt PnB1YmxpYy5yb3B0OwpAQCAtNDU1LDcgKzQ2MCw3IEBAIFJlc3RvcmVBcmNoaXZlKEFyY2hpdmUg KkFIWCkKIAkgKi8KIAlzYXYgPSBTYXZlT3V0cHV0KEFIKTsKIAlpZiAocm9wdC0+ZmlsZW5hbWUg fHwgcm9wdC0+Y29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0gIT0gUEdfQ09NUFJFU1NJT05fTk9O RSkKLQkJU2V0T3V0cHV0KEFILCByb3B0LT5maWxlbmFtZSwgcm9wdC0+Y29tcHJlc3Npb25fc3Bl Yyk7CisJCVNldE91dHB1dChBSCwgcm9wdC0+ZmlsZW5hbWUsIHJvcHQtPmNvbXByZXNzaW9uX3Nw ZWMsIGFwcGVuZF9kYXRhKTsKIAogCWFocHJpbnRmKEFILCAiLS1cbi0tIFBvc3RncmVTUUwgZGF0 YWJhc2UgZHVtcFxuLS1cblxuIik7CiAKQEAgLTEyOTEsNyArMTI5Niw3IEBAIFByaW50VE9DU3Vt bWFyeShBcmNoaXZlICpBSFgpCiAKIAlzYXYgPSBTYXZlT3V0cHV0KEFIKTsKIAlpZiAocm9wdC0+ ZmlsZW5hbWUpCi0JCVNldE91dHB1dChBSCwgcm9wdC0+ZmlsZW5hbWUsIG91dF9jb21wcmVzc2lv bl9zcGVjKTsKKwkJU2V0T3V0cHV0KEFILCByb3B0LT5maWxlbmFtZSwgb3V0X2NvbXByZXNzaW9u X3NwZWMsIGZhbHNlKTsKIAogCWlmIChzdHJmdGltZShzdGFtcF9zdHIsIHNpemVvZihzdGFtcF9z dHIpLCBQR0RVTVBfU1RSRlRJTUVfRk1ULAogCQkJCSBsb2NhbHRpbWUoJkFILT5jcmVhdGVEYXRl KSkgPT0gMCkKQEAgLTE2NzAsNyArMTY3NSw4IEBAIGFyY2hwcmludGYoQXJjaGl2ZSAqQUgsIGNv bnN0IGNoYXIgKmZtdCwuLi4pCiAKIHN0YXRpYyB2b2lkCiBTZXRPdXRwdXQoQXJjaGl2ZUhhbmRs ZSAqQUgsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLAotCQkgIGNvbnN0IHBnX2NvbXByZXNzX3NwZWNp ZmljYXRpb24gY29tcHJlc3Npb25fc3BlYykKKwkJICBjb25zdCBwZ19jb21wcmVzc19zcGVjaWZp Y2F0aW9uIGNvbXByZXNzaW9uX3NwZWMsCisJCSAgYm9vbCBhcHBlbmRfZGF0YSkKIHsKIAlDb21w cmVzc0ZpbGVIYW5kbGUgKkNGSDsKIAljb25zdCBjaGFyICptb2RlOwpAQCAtMTY5MCw3ICsxNjk2 LDcgQEAgU2V0T3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFILCBjb25zdCBjaGFyICpmaWxlbmFtZSwK IAllbHNlCiAJCWZuID0gZmlsZW5vKHN0ZG91dCk7CiAKLQlpZiAoQUgtPm1vZGUgPT0gYXJjaE1v ZGVBcHBlbmQpCisJaWYgKGFwcGVuZF9kYXRhIHx8IEFILT5tb2RlID09IGFyY2hNb2RlQXBwZW5k KQogCQltb2RlID0gUEdfQklOQVJZX0E7CiAJZWxzZQogCQltb2RlID0gUEdfQklOQVJZX1c7CmRp ZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX3Rhci5jIGIvc3JjL2Jpbi9wZ19k dW1wL3BnX2JhY2t1cF90YXIuYwppbmRleCBiNWJhM2I0NmRkOS4uZDk0ZDBkZTJhNWQgMTAwNjQ0 Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfdGFyLmMKKysrIGIvc3JjL2Jpbi9wZ19k dW1wL3BnX2JhY2t1cF90YXIuYwpAQCAtODI2LDcgKzgyNiw3IEBAIF9DbG9zZUFyY2hpdmUoQXJj aGl2ZUhhbmRsZSAqQUgpCiAJCXNhdlZlcmJvc2UgPSBBSC0+cHVibGljLnZlcmJvc2U7CiAJCUFI LT5wdWJsaWMudmVyYm9zZSA9IDA7CiAKLQkJUmVzdG9yZUFyY2hpdmUoKEFyY2hpdmUgKikgQUgp OworCQlSZXN0b3JlQXJjaGl2ZSgoQXJjaGl2ZSAqKSBBSCwgZmFsc2UpOwogCiAJCVNldEFyY2hp dmVPcHRpb25zKChBcmNoaXZlICopIEFILCBzYXZEb3B0LCBzYXZSb3B0KTsKIApkaWZmIC0tZ2l0 IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF91dGlscy5jIGIvc3JjL2Jpbi9wZ19kdW1wL3Bn X2JhY2t1cF91dGlscy5jCmluZGV4IDc5YWVjNWY1MTU4Li4wZjZhZDhiMjFkOCAxMDA2NDQKLS0t IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF91dGlscy5jCisrKyBiL3NyYy9iaW4vcGdfZHVt cC9wZ19iYWNrdXBfdXRpbHMuYwpAQCAtOTEsMTEgKzkxLDcgQEAgb25fZXhpdF9uaWNlbHkob25f ZXhpdF9uaWNlbHlfY2FsbGJhY2sgZnVuY3Rpb24sIHZvaWQgKmFyZykKIHZvaWQKIGV4aXRfbmlj ZWx5KGludCBjb2RlKQogewotCWludAkJCWk7Ci0KLQlmb3IgKGkgPSBvbl9leGl0X25pY2VseV9p bmRleCAtIDE7IGkgPj0gMDsgaS0tKQotCQlvbl9leGl0X25pY2VseV9saXN0W2ldLmZ1bmN0aW9u KGNvZGUsCi0JCQkJCQkJCQkJb25fZXhpdF9uaWNlbHlfbGlzdFtpXS5hcmcpOworCXJlc2V0X2V4 aXRfbmljZWx5X2xpc3QoY29kZSk7CiAKICNpZmRlZiBXSU4zMgogCWlmIChwYXJhbGxlbF9pbml0 X2RvbmUgJiYgR2V0Q3VycmVudFRocmVhZElkKCkgIT0gbWFpblRocmVhZElkKQpAQCAtMTA0LDMg KzEwMCwyMCBAQCBleGl0X25pY2VseShpbnQgY29kZSkKIAogCWV4aXQoY29kZSk7CiB9CisKKy8q CisgKiByZXNldF9leGl0X25pY2VseV9saXN0CisgKgorICogY2xlYW5zIGluZGV4IG9mIGV4aXRf bmljZWx5IGxpc3QuCisgKi8KK3ZvaWQKK3Jlc2V0X2V4aXRfbmljZWx5X2xpc3QoaW50IGNvZGUp Cit7CisJaW50ICAgICAgICAgaTsKKworCWZvciAoaSA9IG9uX2V4aXRfbmljZWx5X2luZGV4IC0g MTsgaSA+PSAwOyBpLS0pCisJCW9uX2V4aXRfbmljZWx5X2xpc3RbaV0uZnVuY3Rpb24oY29kZSwK KwkJCQlvbl9leGl0X25pY2VseV9saXN0W2ldLmFyZyk7CisKKwlvbl9leGl0X25pY2VseV9pbmRl eCA9IDA7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX3V0aWxzLmgg Yi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX3V0aWxzLmgKaW5kZXggMzg1NTE5NDQ1MTMuLmMy MjQ5YTg4MTg1IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX3V0aWxzLmgK KysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF91dGlscy5oCkBAIC0zMCw2ICszMCw3IEBA IGV4dGVybiBjb25zdCBjaGFyICpwcm9nbmFtZTsKIGV4dGVybiB2b2lkIHNldF9kdW1wX3NlY3Rp b24oY29uc3QgY2hhciAqYXJnLCBpbnQgKmR1bXBTZWN0aW9ucyk7CiBleHRlcm4gdm9pZCBvbl9l eGl0X25pY2VseShvbl9leGl0X25pY2VseV9jYWxsYmFjayBmdW5jdGlvbiwgdm9pZCAqYXJnKTsK IGV4dGVybiB2b2lkIGV4aXRfbmljZWx5KGludCBjb2RlKSBwZ19hdHRyaWJ1dGVfbm9yZXR1cm4o KTsKK2V4dGVybiB2b2lkIHJlc2V0X2V4aXRfbmljZWx5X2xpc3QoaW50IGNvZGUpOwogCiAvKiBJ biBwZ19kdW1wLCB3ZSBtb2RpZnkgcGdfZmF0YWwgdG8gY2FsbCBleGl0X25pY2VseSBpbnN0ZWFk IG9mIGV4aXQgKi8KICN1bmRlZiBwZ19mYXRhbApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1w L3BnX2R1bXAuYyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMKaW5kZXggYWZkNzkyODcxNzcu LmNlMjI1YzY4OWRlIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jCisrKyBi L3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMKQEAgLTExODUsNyArMTE4NSw3IEBAIG1haW4oaW50 IGFyZ2MsIGNoYXIgKiphcmd2KQogCSAqIHJpZ2h0IG5vdy4KIAkgKi8KIAlpZiAocGxhaW5UZXh0 KQotCQlSZXN0b3JlQXJjaGl2ZShmb3V0KTsKKwkJUmVzdG9yZUFyY2hpdmUoZm91dCwgZmFsc2Up OwogCiAJQ2xvc2VBcmNoaXZlKGZvdXQpOwogCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAv cGdfZHVtcGFsbC5jIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXBhbGwuYwppbmRleCBhNmRhZmI5 MjM3Ny4uYWRhN2Q1NDhkODYgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wYWxs LmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXBhbGwuYwpAQCAtMTUsNiArMTUsNyBAQAog CiAjaW5jbHVkZSAicG9zdGdyZXNfZmUuaCIKIAorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CiAjaW5j bHVkZSA8dGltZS5oPgogI2luY2x1ZGUgPHVuaXN0ZC5oPgogCkBAIC0yNSwxNCArMjYsMTYgQEAK ICNpbmNsdWRlICJjb21tb24vaGFzaGZuX3Vuc3RhYmxlLmgiCiAjaW5jbHVkZSAiY29tbW9uL2xv Z2dpbmcuaCIKICNpbmNsdWRlICJjb21tb24vc3RyaW5nLmgiCisjaW5jbHVkZSAiY29tbW9uX2R1 bXBhbGxfcmVzdG9yZS5oIgogI2luY2x1ZGUgImR1bXB1dGlscy5oIgogI2luY2x1ZGUgImZlX3V0 aWxzL3N0cmluZ191dGlscy5oIgogI2luY2x1ZGUgImZpbHRlci5oIgogI2luY2x1ZGUgImdldG9w dF9sb25nLmgiCi0jaW5jbHVkZSAicGdfYmFja3VwLmgiCisjaW5jbHVkZSAicGdfYmFja3VwX2Fy Y2hpdmVyLmgiCiAKIC8qIHZlcnNpb24gc3RyaW5nIHdlIGV4cGVjdCBiYWNrIGZyb20gcGdfZHVt cCAqLwogI2RlZmluZSBQR0RVTVBfVkVSU0lPTlNUUiAicGdfZHVtcCAoUG9zdGdyZVNRTCkgIiBQ R19WRVJTSU9OICJcbiIKKyNkZWZpbmUgZXhpdF9uaWNlbHkoY29kZSkgZXhpdChjb2RlKQogCiB0 eXBlZGVmIHN0cnVjdAogewpAQCAtNjUsOSArNjgsMTAgQEAgc3RhdGljIHZvaWQgZHJvcFRhYmxl c3BhY2VzKFBHY29ubiAqY29ubik7CiBzdGF0aWMgdm9pZCBkdW1wVGFibGVzcGFjZXMoUEdjb25u ICpjb25uKTsKIHN0YXRpYyB2b2lkIGRyb3BEQnMoUEdjb25uICpjb25uKTsKIHN0YXRpYyB2b2lk IGR1bXBVc2VyQ29uZmlnKFBHY29ubiAqY29ubiwgY29uc3QgY2hhciAqdXNlcm5hbWUpOwotc3Rh dGljIHZvaWQgZHVtcERhdGFiYXNlcyhQR2Nvbm4gKmNvbm4pOworc3RhdGljIHZvaWQgZHVtcERh dGFiYXNlcyhQR2Nvbm4gKmNvbm4sIEFyY2hpdmVGb3JtYXQgYXJjaER1bXBGb3JtYXQpOwogc3Rh dGljIHZvaWQgZHVtcFRpbWVzdGFtcChjb25zdCBjaGFyICptc2cpOwotc3RhdGljIGludAlydW5Q Z0R1bXAoY29uc3QgY2hhciAqZGJuYW1lLCBjb25zdCBjaGFyICpjcmVhdGVfb3B0cyk7CitzdGF0 aWMgaW50CXJ1blBnRHVtcChjb25zdCBjaGFyICpkYm5hbWUsIGNvbnN0IGNoYXIgKmNyZWF0ZV9v cHRzLAorCQljaGFyICpkYmZpbGUsIEFyY2hpdmVGb3JtYXQgYXJjaER1bXBGb3JtYXQpOwogc3Rh dGljIHZvaWQgYnVpbGRTaFNlY0xhYmVscyhQR2Nvbm4gKmNvbm4sCiAJCQkJCQkJIGNvbnN0IGNo YXIgKmNhdGFsb2dfbmFtZSwgT2lkIG9iamVjdElkLAogCQkJCQkJCSBjb25zdCBjaGFyICpvYmp0 eXBlLCBjb25zdCBjaGFyICpvYmpuYW1lLApAQCAtNzYsNiArODAsOCBAQCBzdGF0aWMgdm9pZCBl eGVjdXRlQ29tbWFuZChQR2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKnF1ZXJ5KTsKIHN0YXRpYyB2 b2lkIGV4cGFuZF9kYm5hbWVfcGF0dGVybnMoUEdjb25uICpjb25uLCBTaW1wbGVTdHJpbmdMaXN0 ICpwYXR0ZXJucywKIAkJCQkJCQkJICAgU2ltcGxlU3RyaW5nTGlzdCAqbmFtZXMpOwogc3RhdGlj IHZvaWQgcmVhZF9kdW1wYWxsX2ZpbHRlcnMoY29uc3QgY2hhciAqZmlsZW5hbWUsIFNpbXBsZVN0 cmluZ0xpc3QgKnBhdHRlcm4pOworc3RhdGljIHZvaWQgY3JlYXRlX29yX29wZW5fZGlyKGNvbnN0 IGNoYXIgKmRpcm5hbWUpOworc3RhdGljIEFyY2hpdmVGb3JtYXQgcGFyc2VEdW1wRm9ybWF0KGNv bnN0IGNoYXIgKmZvcm1hdCk7CiAKIHN0YXRpYyBjaGFyIHBnX2R1bXBfYmluW01BWFBHUEFUSF07 CiBzdGF0aWMgY29uc3QgY2hhciAqcHJvZ25hbWU7CkBAIC0xMDUsNyArMTExLDcgQEAgc3RhdGlj IGludAlub19zdWJzY3JpcHRpb25zID0gMDsKIHN0YXRpYyBpbnQJbm9fdG9hc3RfY29tcHJlc3Np b24gPSAwOwogc3RhdGljIGludAlub191bmxvZ2dlZF90YWJsZV9kYXRhID0gMDsKIHN0YXRpYyBp bnQJbm9fcm9sZV9wYXNzd29yZHMgPSAwOwotc3RhdGljIGludAlzZXJ2ZXJfdmVyc2lvbjsKK3N0 YXRpYyBpbnQgc2VydmVyX3ZlcnNpb247CiBzdGF0aWMgaW50CWxvYWRfdmlhX3BhcnRpdGlvbl9y b290ID0gMDsKIHN0YXRpYyBpbnQJb25fY29uZmxpY3RfZG9fbm90aGluZyA9IDA7CiBzdGF0aWMg aW50CXN0YXRpc3RpY3Nfb25seSA9IDA7CkBAIC0xMjAsOCArMTI2LDYgQEAgc3RhdGljIGNoYXIg KmZpbGVuYW1lID0gTlVMTDsKIHN0YXRpYyBTaW1wbGVTdHJpbmdMaXN0IGRhdGFiYXNlX2V4Y2x1 ZGVfcGF0dGVybnMgPSB7TlVMTCwgTlVMTH07CiBzdGF0aWMgU2ltcGxlU3RyaW5nTGlzdCBkYXRh YmFzZV9leGNsdWRlX25hbWVzID0ge05VTEwsIE5VTEx9OwogCi0jZGVmaW5lIGV4aXRfbmljZWx5 KGNvZGUpIGV4aXQoY29kZSkKLQogaW50CiBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiB7 CkBAIC0xNDYsNiArMTUwLDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCQl7InBh c3N3b3JkIiwgbm9fYXJndW1lbnQsIE5VTEwsICdXJ30sCiAJCXsibm8tcHJpdmlsZWdlcyIsIG5v X2FyZ3VtZW50LCBOVUxMLCAneCd9LAogCQl7Im5vLWFjbCIsIG5vX2FyZ3VtZW50LCBOVUxMLCAn eCd9LAorCQl7ImZvcm1hdCIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAnRid9LAogCiAJCS8q CiAJCSAqIHRoZSBmb2xsb3dpbmcgb3B0aW9ucyBkb24ndCBoYXZlIGFuIGVxdWl2YWxlbnQgc2hv cnQgb3B0aW9uIGxldHRlcgpAQCAtMTkxLDYgKzE5Niw4IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIg KmFyZ3ZbXSkKIAljaGFyCSAgICpwZ2RiID0gTlVMTDsKIAljaGFyCSAgICp1c2Vfcm9sZSA9IE5V TEw7CiAJY29uc3QgY2hhciAqZHVtcGVuY29kaW5nID0gTlVMTDsKKwlBcmNoaXZlRm9ybWF0IGFy Y2hEdW1wRm9ybWF0ID0gYXJjaE51bGw7CisJY29uc3QgY2hhciAqZm9ybWF0TmFtZSA9ICJwIjsK IAl0cml2YWx1ZQlwcm9tcHRfcGFzc3dvcmQgPSBUUklfREVGQVVMVDsKIAlib29sCQlkYXRhX29u bHkgPSBmYWxzZTsKIAlib29sCQlnbG9iYWxzX29ubHkgPSBmYWxzZTsKQEAgLTI0MCw3ICsyNDcs NyBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAKIAlwZ2R1bXBvcHRzID0gY3JlYXRl UFFFeHBCdWZmZXIoKTsKIAotCXdoaWxlICgoYyA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsICJh Y2Q6RTpmOmdoOmw6T3A6cnNTOnRVOnZ3V3giLCBsb25nX29wdGlvbnMsICZvcHRpbmRleCkpICE9 IC0xKQorCXdoaWxlICgoYyA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsICJhY2Q6RTpmOkY6Z2g6 bDpPcDpyc1M6dFU6dndXeCIsIGxvbmdfb3B0aW9ucywgJm9wdGluZGV4KSkgIT0gLTEpCiAJewog CQlzd2l0Y2ggKGMpCiAJCXsKQEAgLTI2OCw3ICsyNzUsOSBAQCBtYWluKGludCBhcmdjLCBjaGFy ICphcmd2W10pCiAJCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocGdkdW1wb3B0cywgIiAtZiAiKTsK IAkJCQlhcHBlbmRTaGVsbFN0cmluZyhwZ2R1bXBvcHRzLCBmaWxlbmFtZSk7CiAJCQkJYnJlYWs7 Ci0KKwkJCWNhc2UgJ0YnOgorCQkJCWZvcm1hdE5hbWUgPSBwZ19zdHJkdXAob3B0YXJnKTsKKwkJ CQlicmVhazsKIAkJCWNhc2UgJ2cnOgogCQkJCWdsb2JhbHNfb25seSA9IHRydWU7CiAJCQkJYnJl YWs7CkBAIC00MTcsNiArNDI2LDIxIEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAkJ ZXhpdF9uaWNlbHkoMSk7CiAJfQogCisJLyogR2V0IGZvcm1hdCBmb3IgZHVtcC4gKi8KKwlhcmNo RHVtcEZvcm1hdCA9IHBhcnNlRHVtcEZvcm1hdChmb3JtYXROYW1lKTsKKworCS8qCisJICogSWYg bm9uLXBsYWluIGZvcm1hdCBpcyBzcGVjaWZpZWQgdGhlbiB3ZSBtdXN0IHByb3ZpZGUgdGhlCisJ ICogZmlsZSBuYW1lIHRvIGNyZWF0ZSBvbmUgbWFpbiBkaXJlY3RvcnkuCisJICovCisJaWYgKGFy Y2hEdW1wRm9ybWF0ICE9IGFyY2hOdWxsICYmCisJCQkoIWZpbGVuYW1lIHx8IHN0cmNtcChmaWxl bmFtZSwgIiIpID09IDApKQorCXsKKwkJcGdfbG9nX2Vycm9yKCJvcHRpb25zIC1GLy0tZm9ybWF0 PWR8Y3x0IHJlcXVpcmVzIG9wdGlvbiAtZi8tLWZpbGUgd2l0aCBub24tZW1wdHkgc3RyaW5nIik7 CisJCXBnX2xvZ19lcnJvcl9oaW50KCJUcnkgXCIlcyAtLWhlbHBcIiBmb3IgbW9yZSBpbmZvcm1h dGlvbi4iLCBwcm9nbmFtZSk7CisJCWV4aXRfbmljZWx5KDEpOworCX0KKwogCS8qCiAJICogSWYg cGFzc3dvcmQgdmFsdWVzIGFyZSBub3QgcmVxdWlyZWQgaW4gdGhlIGR1bXAsIHN3aXRjaCB0byB1 c2luZwogCSAqIHBnX3JvbGVzIHdoaWNoIGlzIGVxdWFsbHkgdXNlZnVsLCBqdXN0IG1vcmUgbGlr ZWx5IHRvIGhhdmUgdW5yZXN0cmljdGVkCkBAIC00NzEsNiArNDk1LDMzIEBAIG1haW4oaW50IGFy Z2MsIGNoYXIgKmFyZ3ZbXSkKIAlpZiAoc3RhdGlzdGljc19vbmx5KQogCQlhcHBlbmRQUUV4cEJ1 ZmZlclN0cihwZ2R1bXBvcHRzLCAiIC0tc3RhdGlzdGljcy1vbmx5Iik7CiAKKwkvKgorCSAqIE9w ZW4gdGhlIG91dHB1dCBmaWxlIGlmIHJlcXVpcmVkLCBvdGhlcndpc2UgdXNlIHN0ZG91dC4gIElm IHJlcXVpcmVkLAorCSAqIHRoZW4gY3JlYXRlIG5ldyBkaXJlY3RvcnkgYW5kIGdsb2JhbC5kYXQg ZmlsZS4KKwkgKi8KKwlpZiAoYXJjaER1bXBGb3JtYXQgIT0gYXJjaE51bGwpCisJeworCQljaGFy CXRvY19wYXRoW01BWFBHUEFUSF07CisKKwkJLyogQ3JlYXRlIG5ldyBkaXJlY3Rvcnkgb3IgYWNj ZXB0IHRoZSBlbXB0eSBleGlzdGluZyBkaXJlY3RvcnkuICovCisJCWNyZWF0ZV9vcl9vcGVuX2Rp cihmaWxlbmFtZSk7CisKKwkJc25wcmludGYodG9jX3BhdGgsIE1BWFBHUEFUSCwgIiVzL2dsb2Jh bC5kYXQiLCBmaWxlbmFtZSk7CisKKwkJT1BGID0gZm9wZW4odG9jX3BhdGgsIFBHX0JJTkFSWV9X KTsKKwkJaWYgKCFPUEYpCisJCQlwZ19mYXRhbCgiY291bGQgbm90IG9wZW4gZ2xvYmFsLmRhdCBm aWxlOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisJfQorCWVsc2UgaWYgKGZpbGVuYW1lKQorCXsK KwkJT1BGID0gZm9wZW4oZmlsZW5hbWUsIFBHX0JJTkFSWV9XKTsKKwkJaWYgKCFPUEYpCisJCQlw Z19mYXRhbCgiY291bGQgbm90IG9wZW4gb3V0cHV0IGZpbGUgXCIlc1wiOiAlbSIsCisJCQkJCSBm aWxlbmFtZSk7CisJfQorCWVsc2UKKwkJT1BGID0gc3Rkb3V0OworCiAJLyoKIAkgKiBJZiB0aGVy ZSB3YXMgYSBkYXRhYmFzZSBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQgbGluZSwgdXNlIHRoYXQs CiAJICogb3RoZXJ3aXNlIHRyeSB0byBjb25uZWN0IHRvIGRhdGFiYXNlICJwb3N0Z3JlcyIsIGFu ZCBmYWlsaW5nIHRoYXQKQEAgLTUxMCwxOSArNTYxLDYgQEAgbWFpbihpbnQgYXJnYywgY2hhciAq YXJndltdKQogCWV4cGFuZF9kYm5hbWVfcGF0dGVybnMoY29ubiwgJmRhdGFiYXNlX2V4Y2x1ZGVf cGF0dGVybnMsCiAJCQkJCQkgICAmZGF0YWJhc2VfZXhjbHVkZV9uYW1lcyk7CiAKLQkvKgotCSAq IE9wZW4gdGhlIG91dHB1dCBmaWxlIGlmIHJlcXVpcmVkLCBvdGhlcndpc2UgdXNlIHN0ZG91dAot CSAqLwotCWlmIChmaWxlbmFtZSkKLQl7Ci0JCU9QRiA9IGZvcGVuKGZpbGVuYW1lLCBQR19CSU5B UllfVyk7Ci0JCWlmICghT1BGKQotCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBvcGVuIG91dHB1dCBm aWxlIFwiJXNcIjogJW0iLAotCQkJCQkgZmlsZW5hbWUpOwotCX0KLQllbHNlCi0JCU9QRiA9IHN0 ZG91dDsKLQogCS8qCiAJICogU2V0IHRoZSBjbGllbnQgZW5jb2RpbmcgaWYgcmVxdWVzdGVkLgog CSAqLwpAQCAtNjIyLDcgKzY2MCw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAl9 CiAKIAlpZiAoIWdsb2JhbHNfb25seSAmJiAhcm9sZXNfb25seSAmJiAhdGFibGVzcGFjZXNfb25s eSkKLQkJZHVtcERhdGFiYXNlcyhjb25uKTsKKwkJZHVtcERhdGFiYXNlcyhjb25uLCBhcmNoRHVt cEZvcm1hdCk7CiAKIAlQUWZpbmlzaChjb25uKTsKIApAQCAtNjM1LDcgKzY3Myw3IEBAIG1haW4o aW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAkJZmNsb3NlKE9QRik7CiAKIAkJLyogc3luYyB0aGUg cmVzdWx0aW5nIGZpbGUsIGVycm9ycyBhcmUgbm90IGZhdGFsICovCi0JCWlmIChkb3N5bmMpCisJ CWlmIChkb3N5bmMgJiYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKSkKIAkJCSh2b2lkKSBm c3luY19mbmFtZShmaWxlbmFtZSwgZmFsc2UpOwogCX0KIApAQCAtNjQ2LDEyICs2ODQsMTQgQEAg bWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogc3RhdGljIHZvaWQKIGhlbHAodm9pZCkKIHsK LQlwcmludGYoXygiJXMgZXh0cmFjdHMgYSBQb3N0Z3JlU1FMIGRhdGFiYXNlIGNsdXN0ZXIgaW50 byBhbiBTUUwgc2NyaXB0IGZpbGUuXG5cbiIpLCBwcm9nbmFtZSk7CisJcHJpbnRmKF8oIiVzIGV4 dHJhY3RzIGEgUG9zdGdyZVNRTCBkYXRhYmFzZSBjbHVzdGVyIGJhc2VkIG9uIHNwZWNpZmllZCBk dW1wIGZvcm1hdC5cblxuIiksIHByb2duYW1lKTsKIAlwcmludGYoXygiVXNhZ2U6XG4iKSk7CiAJ cHJpbnRmKF8oIiAgJXMgW09QVElPTl0uLi5cbiIpLCBwcm9nbmFtZSk7CiAKIAlwcmludGYoXygi XG5HZW5lcmFsIG9wdGlvbnM6XG4iKSk7CiAJcHJpbnRmKF8oIiAgLWYsIC0tZmlsZT1GSUxFTkFN RSAgICAgICAgICBvdXRwdXQgZmlsZSBuYW1lXG4iKSk7CisJcHJpbnRmKF8oIiAgLUYsIC0tZm9y bWF0PWN8ZHx0fHAgICAgICAgICBvdXRwdXQgZmlsZSBmb3JtYXQgKGN1c3RvbSwgZGlyZWN0b3J5 LCB0YXIsXG4iCisJCQkgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFpbiB0ZXh0 IChkZWZhdWx0KSlcbiIpKTsKIAlwcmludGYoXygiICAtdiwgLS12ZXJib3NlICAgICAgICAgICAg ICAgIHZlcmJvc2UgbW9kZVxuIikpOwogCXByaW50ZihfKCIgIC1WLCAtLXZlcnNpb24gICAgICAg ICAgICAgICAgb3V0cHV0IHZlcnNpb24gaW5mb3JtYXRpb24sIHRoZW4gZXhpdFxuIikpOwogCXBy aW50ZihfKCIgIC0tbG9jay13YWl0LXRpbWVvdXQ9VElNRU9VVCAgZmFpbCBhZnRlciB3YWl0aW5n IFRJTUVPVVQgZm9yIGEgdGFibGUgbG9ja1xuIikpOwpAQCAtMTUwNiwxMCArMTU0NiwxMyBAQCBl eHBhbmRfZGJuYW1lX3BhdHRlcm5zKFBHY29ubiAqY29ubiwKICAqIER1bXAgY29udGVudHMgb2Yg ZGF0YWJhc2VzLgogICovCiBzdGF0aWMgdm9pZAotZHVtcERhdGFiYXNlcyhQR2Nvbm4gKmNvbm4p CitkdW1wRGF0YWJhc2VzKFBHY29ubiAqY29ubiwgQXJjaGl2ZUZvcm1hdCBhcmNoRHVtcEZvcm1h dCkKIHsKIAlQR3Jlc3VsdCAgICpyZXM7CiAJaW50CQkJaTsKKwljaGFyCQlkYl9zdWJkaXJbTUFY UEdQQVRIXTsKKwljaGFyCQlkYmZpbGVwYXRoW01BWFBHUEFUSF07CisJRklMRSAgICAgICAqbWFw X2ZpbGUgPSBOVUxMOwogCiAJLyoKIAkgKiBTa2lwIGRhdGFiYXNlcyBtYXJrZWQgbm90IGRhdGFs bG93Y29ubiwgc2luY2Ugd2UnZCBiZSB1bmFibGUgdG8gY29ubmVjdApAQCAtMTUyMyw3ICsxNTY2 LDcgQEAgZHVtcERhdGFiYXNlcyhQR2Nvbm4gKmNvbm4pCiAJICogZG9lc24ndCBoYXZlIHNvbWUg ZmFpbHVyZSBtb2RlIHdpdGggLS1jbGVhbi4KIAkgKi8KIAlyZXMgPSBleGVjdXRlUXVlcnkoY29u biwKLQkJCQkJICAgIlNFTEVDVCBkYXRuYW1lICIKKwkJCQkJICAgIlNFTEVDVCBkYXRuYW1lLCBv aWQgIgogCQkJCQkgICAiRlJPTSBwZ19kYXRhYmFzZSBkICIKIAkJCQkJICAgIldIRVJFIGRhdGFs bG93Y29ubiBBTkQgZGF0Y29ubmxpbWl0ICE9IC0yICIKIAkJCQkJICAgIk9SREVSIEJZIChkYXRu YW1lIDw+ICd0ZW1wbGF0ZTEnKSwgZGF0bmFtZSIpOwpAQCAtMTUzMSw5ICsxNTc0LDMzIEBAIGR1 bXBEYXRhYmFzZXMoUEdjb25uICpjb25uKQogCWlmIChQUW50dXBsZXMocmVzKSA+IDApCiAJCWZw cmludGYoT1BGLCAiLS1cbi0tIERhdGFiYXNlc1xuLS1cblxuIik7CiAKKwkvKgorCSAqIElmIGRp cmVjdG9yeS90YXIvY3VzdG9tIGZvcm1hdCBpcyBzcGVjaWZpZWQgdGhlbiBjcmVhdGUgYSBzdWJk aXJlY3RvcnkKKwkgKiB1bmRlciB0aGUgbWFpbiBkaXJlY3RvcnkgYW5kIGVhY2ggZGF0YWJhc2Ug ZHVtcCBmaWxlIHN1YmRpcmVjdG9yeSB3aWxsCisJICogYmUgY3JlYXRlZCB1bmRlciB0aGUgc3Vi ZGlyZWN0b3J5IGluIGFyY2hpdmUgbW9kZSBhcyBwZXIgc2luZ2xlIGRiIHBnX2R1bXAuCisJICov CisJaWYgKGFyY2hEdW1wRm9ybWF0ICE9IGFyY2hOdWxsKQorCXsKKwkJY2hhcgltYXBfZmlsZV9w YXRoW01BWFBHUEFUSF07CisKKwkJc25wcmludGYoZGJfc3ViZGlyLCBNQVhQR1BBVEgsICIlcy9k YXRhYmFzZXMiLCBmaWxlbmFtZSk7CisKKwkJLyogQ3JlYXRlIGEgc3ViZGlyZWN0b3J5IHdpdGgg J2RhdGFiYXNlcycgbmFtZSB1bmRlciBtYWluIGRpcmVjdG9yeS4gKi8KKwkJaWYgKG1rZGlyKGRi X3N1YmRpciwgMDc1NSkgIT0gMCkKKwkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgY3JlYXRlIHN1YmRp cmVjdG9yeSBcIiVzXCI6ICVtIiwgZGJfc3ViZGlyKTsKKworCQlzbnByaW50ZihtYXBfZmlsZV9w YXRoLCBNQVhQR1BBVEgsICIlcy9tYXAuZGF0IiwgZmlsZW5hbWUpOworCisJCS8qIENyZWF0ZSBh IG1hcCBmaWxlICh0byBzdG9yZSBkYm9pZCBhbmQgZGJuYW1lKSAqLworCQltYXBfZmlsZSA9IGZv cGVuKG1hcF9maWxlX3BhdGgsIFBHX0JJTkFSWV9XKTsKKwkJaWYgKCFtYXBfZmlsZSkKKwkJCXBn X2ZhdGFsKCJjb3VsZCBub3Qgb3BlbiBtYXAgZmlsZTogJXMiLCBzdHJlcnJvcihlcnJubykpOwor CX0KKwogCWZvciAoaSA9IDA7IGkgPCBQUW50dXBsZXMocmVzKTsgaSsrKQogCXsKIAkJY2hhcgkg ICAqZGJuYW1lID0gUFFnZXR2YWx1ZShyZXMsIGksIDApOworCQljaGFyCSAgICpvaWQgPSBQUWdl dHZhbHVlKHJlcywgaSwgMSk7CiAJCWNvbnN0IGNoYXIgKmNyZWF0ZV9vcHRzOwogCQlpbnQJCQly ZXQ7CiAKQEAgLTE1NDgsNiArMTYxNSwxOCBAQCBkdW1wRGF0YWJhc2VzKFBHY29ubiAqY29ubikK IAkJCWNvbnRpbnVlOwogCQl9CiAKKwkJLyoKKwkJICogSWYgdGhpcyBpcyBub24tcGxhaW4gZHVt cCBmb3JtYXQsIHRoZW4gYXBwZW5kIGRib2lkIGFuZCBkYm5hbWUgdG8KKwkJICogdGhlIG1hcC5k YXQgZmlsZS4KKwkJICovCisJCWlmIChhcmNoRHVtcEZvcm1hdCAhPSBhcmNoTnVsbCkKKwkJewor CQkJc25wcmludGYoZGJmaWxlcGF0aCwgTUFYUEdQQVRILCAiXCIlc1wiL1wiJXNcIiIsIGRiX3N1 YmRpciwgb2lkKTsKKworCQkJLyogUHV0IG9uZSBsaW5lIGVudHJ5IGZvciBkYm9pZCBhbmQgZGJu YW1lIGluIG1hcCBmaWxlLiAqLworCQkJZnByaW50ZihtYXBfZmlsZSwgIiVzICVzXG4iLCBvaWQs IHBnX3N0cmR1cChkYm5hbWUpKTsKKwkJfQorCiAJCXBnX2xvZ19pbmZvKCJkdW1waW5nIGRhdGFi YXNlIFwiJXNcIiIsIGRibmFtZSk7CiAKIAkJZnByaW50ZihPUEYsICItLVxuLS0gRGF0YWJhc2Ug XCIlc1wiIGR1bXBcbi0tXG5cbiIsIGRibmFtZSk7CkBAIC0xNTY2LDkgKzE2NDUsMTcgQEAgZHVt cERhdGFiYXNlcyhQR2Nvbm4gKmNvbm4pCiAJCQkJY3JlYXRlX29wdHMgPSAiLS1jbGVhbiAtLWNy ZWF0ZSI7CiAJCQllbHNlCiAJCQl7Ci0JCQkJY3JlYXRlX29wdHMgPSAiIjsKIAkJCQkvKiBTaW5j ZSBwZ19kdW1wIHdvbid0IGVtaXQgYSBcY29ubmVjdCBjb21tYW5kLCB3ZSBtdXN0ICovCi0JCQkJ ZnByaW50ZihPUEYsICJcXGNvbm5lY3QgJXNcblxuIiwgZGJuYW1lKTsKKwkJCQlpZiAoYXJjaER1 bXBGb3JtYXQgPT0gYXJjaE51bGwpCisJCQkJeworCQkJCQljcmVhdGVfb3B0cyA9ICIiOworCQkJ CQlmcHJpbnRmKE9QRiwgIlxcY29ubmVjdCAlc1xuXG4iLCBkYm5hbWUpOworCQkJCX0KKwkJCQll bHNlCisJCQkJeworCQkJCQkvKiBEdW1waW5nIGFsbCBkYXRhYmFzZXMgc28gYWRkIC0tY3JlYXRl IG9wdGlvbi4gKi8KKwkJCQkJY3JlYXRlX29wdHMgPSAiLS1jcmVhdGUiOworCQkJCX0KIAkJCX0K IAkJfQogCQllbHNlCkBAIC0xNTc3LDE5ICsxNjY0LDMwIEBAIGR1bXBEYXRhYmFzZXMoUEdjb25u ICpjb25uKQogCQlpZiAoZmlsZW5hbWUpCiAJCQlmY2xvc2UoT1BGKTsKIAotCQlyZXQgPSBydW5Q Z0R1bXAoZGJuYW1lLCBjcmVhdGVfb3B0cyk7CisJCXJldCA9IHJ1blBnRHVtcChkYm5hbWUsIGNy ZWF0ZV9vcHRzLCBkYmZpbGVwYXRoLCBhcmNoRHVtcEZvcm1hdCk7CiAJCWlmIChyZXQgIT0gMCkK IAkJCXBnX2ZhdGFsKCJwZ19kdW1wIGZhaWxlZCBvbiBkYXRhYmFzZSBcIiVzXCIsIGV4aXRpbmci LCBkYm5hbWUpOwogCiAJCWlmIChmaWxlbmFtZSkKIAkJewotCQkJT1BGID0gZm9wZW4oZmlsZW5h bWUsIFBHX0JJTkFSWV9BKTsKKwkJCWNoYXIJdG9jX3BhdGhbTUFYUEdQQVRIXTsKKworCQkJaWYg KGFyY2hEdW1wRm9ybWF0ICE9IGFyY2hOdWxsKQorCQkJCXNucHJpbnRmKHRvY19wYXRoLCBNQVhQ R1BBVEgsICIlcy9nbG9iYWwuZGF0IiwgZmlsZW5hbWUpOworCQkJZWxzZQorCQkJCXNucHJpbnRm KHRvY19wYXRoLCBNQVhQR1BBVEgsICIlcyIsIGZpbGVuYW1lKTsKKworCQkJT1BGID0gZm9wZW4o dG9jX3BhdGgsIFBHX0JJTkFSWV9BKTsKIAkJCWlmICghT1BGKQogCQkJCXBnX2ZhdGFsKCJjb3Vs ZCBub3QgcmUtb3BlbiB0aGUgb3V0cHV0IGZpbGUgXCIlc1wiOiAlbSIsCi0JCQkJCQkgZmlsZW5h bWUpOworCQkJCQkJIHRvY19wYXRoKTsKIAkJfQogCX0KIAorCS8qIENsb3NlIG1hcCBmaWxlICov CisJaWYgKGFyY2hEdW1wRm9ybWF0ICE9IGFyY2hOdWxsKQorCQlmY2xvc2UobWFwX2ZpbGUpOwor CiAJUFFjbGVhcihyZXMpOwogfQogCkBAIC0xNTk5LDcgKzE2OTcsOCBAQCBkdW1wRGF0YWJhc2Vz KFBHY29ubiAqY29ubikKICAqIFJ1biBwZ19kdW1wIG9uIGRibmFtZSwgd2l0aCBzcGVjaWZpZWQg b3B0aW9ucy4KICAqLwogc3RhdGljIGludAotcnVuUGdEdW1wKGNvbnN0IGNoYXIgKmRibmFtZSwg Y29uc3QgY2hhciAqY3JlYXRlX29wdHMpCitydW5QZ0R1bXAoY29uc3QgY2hhciAqZGJuYW1lLCBj b25zdCBjaGFyICpjcmVhdGVfb3B0cywgY2hhciAqZGJmaWxlLAorCQlBcmNoaXZlRm9ybWF0IGFy Y2hEdW1wRm9ybWF0KQogewogCVBRRXhwQnVmZmVyRGF0YSBjb25uc3RyYnVmOwogCVBRRXhwQnVm ZmVyRGF0YSBjbWQ7CkBAIC0xNjA4LDE3ICsxNzA3LDM2IEBAIHJ1blBnRHVtcChjb25zdCBjaGFy ICpkYm5hbWUsIGNvbnN0IGNoYXIgKmNyZWF0ZV9vcHRzKQogCWluaXRQUUV4cEJ1ZmZlcigmY29u bnN0cmJ1Zik7CiAJaW5pdFBRRXhwQnVmZmVyKCZjbWQpOwogCi0JcHJpbnRmUFFFeHBCdWZmZXIo JmNtZCwgIlwiJXNcIiAlcyAlcyIsIHBnX2R1bXBfYmluLAotCQkJCQkgIHBnZHVtcG9wdHMtPmRh dGEsIGNyZWF0ZV9vcHRzKTsKLQogCS8qCi0JICogSWYgd2UgaGF2ZSBhIGZpbGVuYW1lLCB1c2Ug dGhlIHVuZG9jdW1lbnRlZCBwbGFpbi1hcHBlbmQgcGdfZHVtcAotCSAqIGZvcm1hdC4KKwkgKiBJ ZiB0aGlzIGlzIG5vbi1wbGFpbiBmb3JtYXQgZHVtcCwgdGhlbiBhcHBlbmQgZmlsZSBuYW1lIGFu ZCBkdW1wCisJICogZm9ybWF0IHRvIHRoZSBwZ19kdW1wIGNvbW1hbmQgdG8gZ2V0IGFyY2hpdmUg ZHVtcC4KIAkgKi8KLQlpZiAoZmlsZW5hbWUpCi0JCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZjbWQs ICIgLUZhICIpOworCWlmIChhcmNoRHVtcEZvcm1hdCAhPSBhcmNoTnVsbCkKKwl7CisJCXByaW50 ZlBRRXhwQnVmZmVyKCZjbWQsICJcIiVzXCIgLWYgJXMgJXMiLCBwZ19kdW1wX2JpbiwKKwkJCQkJ CSAgZGJmaWxlLCBjcmVhdGVfb3B0cyk7CisKKwkJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hE aXJlY3RvcnkpCisJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmY21kLCAiICAtLWZvcm1hdD1kaXJl Y3RvcnkgIik7CisJCWVsc2UgaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hDdXN0b20pCisJCQlh cHBlbmRQUUV4cEJ1ZmZlclN0cigmY21kLCAiICAtLWZvcm1hdD1jdXN0b20gIik7CisJCWVsc2Ug aWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hUYXIpCisJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigm Y21kLCAiICAtLWZvcm1hdD10YXIgIik7CisJfQogCWVsc2UKLQkJYXBwZW5kUFFFeHBCdWZmZXJT dHIoJmNtZCwgIiAtRnAgIik7CisJeworCQlwcmludGZQUUV4cEJ1ZmZlcigmY21kLCAiXCIlc1wi ICVzICVzIiwgcGdfZHVtcF9iaW4sCisJCQkJCQlwZ2R1bXBvcHRzLT5kYXRhLCBjcmVhdGVfb3B0 cyk7CisKKwkJLyoKKwkJKiBJZiB3ZSBoYXZlIGEgZmlsZW5hbWUsIHVzZSB0aGUgdW5kb2N1bWVu dGVkIHBsYWluLWFwcGVuZCBwZ19kdW1wCisJCSogZm9ybWF0LgorCQkqLworCQlpZiAoZmlsZW5h bWUpCisJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmY21kLCAiIC1GYSAiKTsKKwkJZWxzZQorCQkJ YXBwZW5kUFFFeHBCdWZmZXJTdHIoJmNtZCwgIiAtRnAgIik7CisJfQogCiAJLyoKIAkgKiBBcHBl bmQgdGhlIGRhdGFiYXNlIG5hbWUgdG8gdGhlIGFscmVhZHktY29uc3RydWN0ZWQgc3RlbSBvZiBj b25uZWN0aW9uCkBAIC0xNzYzLDMgKzE4ODEsOTEgQEAgcmVhZF9kdW1wYWxsX2ZpbHRlcnMoY29u c3QgY2hhciAqZmlsZW5hbWUsIFNpbXBsZVN0cmluZ0xpc3QgKnBhdHRlcm4pCiAKIAlmaWx0ZXJf ZnJlZSgmZnN0YXRlKTsKIH0KKworLyoKKyAqIGNyZWF0ZV9vcl9vcGVuX2RpcgorICoKKyAqIFRo aXMgd2lsbCBjcmVhdGUgYSBuZXcgZGlyZWN0b3J5IHdpdGggZ2l2ZW4gbmFtZS4gIElmIHRoZXJl IGlzIGFscmVhZHkgc2FtZQorICogZW1wdHkgZGlyZWN0b3J5IGV4aXN0LCB0aGVuIHVzZSBpdC4K KyAqLworc3RhdGljIHZvaWQKK2NyZWF0ZV9vcl9vcGVuX2Rpcihjb25zdCBjaGFyICpkaXJuYW1l KQoreworCXN0cnVjdCBzdGF0CQlzdDsKKwlib29sCQkJaXNfZW1wdHkgPSBmYWxzZTsKKworCS8q IHdlIGFjY2VwdCBhbiBlbXB0eSBleGlzdGluZyBkaXJlY3RvcnkgKi8KKwlpZiAoc3RhdChkaXJu YW1lLCAmc3QpID09IDAgJiYgU19JU0RJUihzdC5zdF9tb2RlKSkKKwl7CisJCURJUgkJKmRpciA9 IG9wZW5kaXIoZGlybmFtZSk7CisKKwkJaWYgKGRpcikKKwkJeworCQkJc3RydWN0IGRpcmVudAkq ZDsKKworCQkJaXNfZW1wdHkgPSB0cnVlOworCisJCQl3aGlsZSAoZXJybm8gPSAwLCAoZCA9IHJl YWRkaXIoZGlyKSkpCisJCQl7CisJCQkJaWYgKHN0cmNtcChkLT5kX25hbWUsICIuIikgIT0gMCAm JiBzdHJjbXAoZC0+ZF9uYW1lLCAiLi4iKSAhPSAwKQorCQkJCXsKKwkJCQkJaXNfZW1wdHkgPSBm YWxzZTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCisJCQlpZiAoZXJybm8pCisJCQkJcGdf ZmF0YWwoImNvdWxkIG5vdCByZWFkIGRpcmVjdG9yeSBcIiVzXCI6ICVtIiwKKwkJCQkJCWRpcm5h bWUpOworCisJCQlpZiAoY2xvc2VkaXIoZGlyKSkKKwkJCQlwZ19mYXRhbCgiY291bGQgbm90IGNs b3NlIGRpcmVjdG9yeSBcIiVzXCI6ICVtIiwKKwkJCQkJCWRpcm5hbWUpOworCQl9CisKKwkJaWYo IWlzX2VtcHR5KQorCQl7CisJCQlwZ19sb2dfZXJyb3IoImRpcmVjdG9yeSBcIiVzXCIgZXhpc3Rz IGJ1dCBpcyBub3QgZW1wdHkiLCBkaXJuYW1lKTsKKwkJCXBnX2xvZ19lcnJvcl9oaW50KCJJZiB5 b3Ugd2FudCB0byBkdW1wIGRhdGEgb24gdGhpcyBkaXJlY3RvcnksIGVpdGhlciByZW1vdmUgb3Ig ZW1wdHkgIgorCQkJCQkJCSAgInRoaXMgZGlyZWN0b3J5IFwiJXNcIiBvciBydW4gJXMgIgorCQkJ CQkJCSAgIndpdGggYW4gYXJndW1lbnQgb3RoZXIgdGhhbiBcIiVzXCIuIiwKKwkJCQkJCQkgIGRp cm5hbWUsIHByb2duYW1lLCBkaXJuYW1lKTsKKwkJCWV4aXRfbmljZWx5KDEpOworCQl9CisJfQor CWVsc2UgaWYgKG1rZGlyKGRpcm5hbWUsIDA3MDApIDwgMCkKKwkJcGdfZmF0YWwoImNvdWxkIG5v dCBjcmVhdGUgZGlyZWN0b3J5IFwiJXNcIjogJW0iLCBkaXJuYW1lKTsKK30KKworLyoKKyAqIHBh cnNlRHVtcEZvcm1hdAorICoKKyAqIFRoaXMgd2lsbCB2YWxpZGF0ZSBkdW1wIGZvcm1hdHMuCisg Ki8KK3N0YXRpYyBBcmNoaXZlRm9ybWF0CitwYXJzZUR1bXBGb3JtYXQoY29uc3QgY2hhciAqZm9y bWF0KQoreworCUFyY2hpdmVGb3JtYXQJYXJjaER1bXBGb3JtYXQ7CisKKwlpZiAocGdfc3RyY2Fz ZWNtcChmb3JtYXQsICJjIikgPT0gMCkKKwkJYXJjaER1bXBGb3JtYXQgPSBhcmNoQ3VzdG9tOwor CWVsc2UgaWYgKHBnX3N0cmNhc2VjbXAoZm9ybWF0LCAiY3VzdG9tIikgPT0gMCkKKwkJYXJjaER1 bXBGb3JtYXQgPSBhcmNoQ3VzdG9tOworCWVsc2UgaWYgKHBnX3N0cmNhc2VjbXAoZm9ybWF0LCAi ZCIpID09IDApCisJCWFyY2hEdW1wRm9ybWF0ID0gYXJjaERpcmVjdG9yeTsKKwllbHNlIGlmIChw Z19zdHJjYXNlY21wKGZvcm1hdCwgImRpcmVjdG9yeSIpID09IDApCisJCWFyY2hEdW1wRm9ybWF0 ID0gYXJjaERpcmVjdG9yeTsKKwllbHNlIGlmIChwZ19zdHJjYXNlY21wKGZvcm1hdCwgInAiKSA9 PSAwKQorCQlhcmNoRHVtcEZvcm1hdCA9IGFyY2hOdWxsOworCWVsc2UgaWYgKHBnX3N0cmNhc2Vj bXAoZm9ybWF0LCAicGxhaW4iKSA9PSAwKQorCQlhcmNoRHVtcEZvcm1hdCA9IGFyY2hOdWxsOwor CWVsc2UgaWYgKHBnX3N0cmNhc2VjbXAoZm9ybWF0LCAidCIpID09IDApCisJCWFyY2hEdW1wRm9y bWF0ID0gYXJjaFRhcjsKKwllbHNlIGlmIChwZ19zdHJjYXNlY21wKGZvcm1hdCwgInRhciIpID09 IDApCisJCWFyY2hEdW1wRm9ybWF0ID0gYXJjaFRhcjsKKwllbHNlCisJCXBnX2ZhdGFsKCJ1bnJl Y29nbml6ZWQgYXJjaGl2ZSBmb3JtYXQgXCIlc1wiOyBwbGVhc2Ugc3BlY2lmeSBcImNcIiwgXCJk XCIsIFwicFwiLCBvciBcInRcIiIsCisJCQkJZm9ybWF0KTsKKworCXJldHVybiBhcmNoRHVtcEZv cm1hdDsKK30KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19yZXN0b3JlLmMgYi9zcmMv YmluL3BnX2R1bXAvcGdfcmVzdG9yZS5jCmluZGV4IDEzZTRkYzUwN2UwLi41ODU2YmJlOWRhNCAx MDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX3Jlc3RvcmUuYworKysgYi9zcmMvYmluL3Bn X2R1bXAvcGdfcmVzdG9yZS5jCkBAIC0yLDcgKzIsNyBAQAogICoKICAqIHBnX3Jlc3RvcmUuYwog ICoJcGdfcmVzdG9yZSBpcyBhbiB1dGlsaXR5IGV4dHJhY3RpbmcgcG9zdGdyZXMgZGF0YWJhc2Ug ZGVmaW5pdGlvbnMKLSAqCWZyb20gYSBiYWNrdXAgYXJjaGl2ZSBjcmVhdGVkIGJ5IHBnX2R1bXAg dXNpbmcgdGhlIGFyY2hpdmVyCisgKglmcm9tIGEgYmFja3VwIGFyY2hpdmUgY3JlYXRlZCBieSBw Z19kdW1wL3BnX2R1bXBhbGwgdXNpbmcgdGhlIGFyY2hpdmVyCiAgKglpbnRlcmZhY2UuCiAgKgog ICoJcGdfcmVzdG9yZSB3aWxsIHJlYWQgdGhlIGJhY2t1cCBhcmNoaXZlIGFuZApAQCAtNDEsMzAg KzQxLDc2IEBACiAjaW5jbHVkZSAicG9zdGdyZXNfZmUuaCIKIAogI2luY2x1ZGUgPGN0eXBlLmg+ CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KICNpZmRlZiBIQVZFX1RFUk1JT1NfSAogI2luY2x1ZGUg PHRlcm1pb3MuaD4KICNlbmRpZgogCisjaW5jbHVkZSAiY29tbW9uL2Nvbm5lY3QuaCIKKyNpbmNs dWRlICJjb21wcmVzc19pby5oIgorI2luY2x1ZGUgImNvbW1vbi9zdHJpbmcuaCIKKyNpbmNsdWRl ICJjb21tb25fZHVtcGFsbF9yZXN0b3JlLmgiCiAjaW5jbHVkZSAiZmVfdXRpbHMvb3B0aW9uX3V0 aWxzLmgiCisjaW5jbHVkZSAiZmVfdXRpbHMvc3RyaW5nX3V0aWxzLmgiCiAjaW5jbHVkZSAiZmls dGVyLmgiCiAjaW5jbHVkZSAiZ2V0b3B0X2xvbmcuaCIKICNpbmNsdWRlICJwYXJhbGxlbC5oIgor I2luY2x1ZGUgInBnX2JhY2t1cF9hcmNoaXZlci5oIgogI2luY2x1ZGUgInBnX2JhY2t1cF91dGls cy5oIgogCit0eXBlZGVmIHN0cnVjdCBTaW1wbGVEYXRhYmFzZU9pZExpc3RDZWxsCit7CisJc3Ry dWN0IFNpbXBsZURhdGFiYXNlT2lkTGlzdENlbGwJKm5leHQ7CisJT2lkCQkJCQkJCQkJZGJfb2lk OworCWNvbnN0IGNoYXIJCQkJCQkJKmRiX25hbWU7Cit9IFNpbXBsZURhdGFiYXNlT2lkTGlzdENl bGw7CisKK3R5cGVkZWYgc3RydWN0IFNpbXBsZURhdGFiYXNlT2lkTGlzdAoreworCVNpbXBsZURh dGFiYXNlT2lkTGlzdENlbGwgKmhlYWQ7CisJU2ltcGxlRGF0YWJhc2VPaWRMaXN0Q2VsbCAqdGFp bDsKK30gU2ltcGxlRGF0YWJhc2VPaWRMaXN0OworCiBzdGF0aWMgdm9pZCB1c2FnZShjb25zdCBj aGFyICpwcm9nbmFtZSk7CiBzdGF0aWMgdm9pZCByZWFkX3Jlc3RvcmVfZmlsdGVycyhjb25zdCBj aGFyICpmaWxlbmFtZSwgUmVzdG9yZU9wdGlvbnMgKm9wdHMpOworc3RhdGljIGJvb2wgSXNGaWxl RXhpc3RzSW5EaXJlY3RvcnkoY29uc3QgY2hhciAqZGlyLCBjb25zdCBjaGFyICpmaWxlbmFtZSk7 CitzdGF0aWMgaW50IHJlc3RvcmVPbmVEYXRhYmFzZShjb25zdCBjaGFyICppbnB1dEZpbGVTcGVj LCBSZXN0b3JlT3B0aW9ucyAqb3B0cywKKwkJCQkJCQkgIGludCBudW1Xb3JrZXJzLCBib29sIGFw cGVuZF9kYXRhKTsKK3N0YXRpYyBpbnQgUmVhZE9uZVN0YXRlbWVudChTdHJpbmdJbmZvIGluQnVm LCBGSUxFICpwZmlsZSk7CitzdGF0aWMgaW50IHJlc3RvcmVBbGxEYXRhYmFzZXMoUEdjb25uICpj b25uLCBjb25zdCBjaGFyICpkdW1wZGlycGF0aCwKKwkJCQkJCQkgICBTaW1wbGVTdHJpbmdMaXN0 IGRiX2V4Y2x1ZGVfcGF0dGVybnMsIFJlc3RvcmVPcHRpb25zICpvcHRzLCBpbnQgbnVtV29ya2Vy cyk7CitzdGF0aWMgaW50IHByb2Nlc3NfZ2xvYmFsX3NxbF9jb21tYW5kcyhQR2Nvbm4gKmNvbm4s IGNvbnN0IGNoYXIgKmR1bXBkaXJwYXRoLAorCQkJCQkJCQkJCWNvbnN0IGNoYXIgKm91dGZpbGUp Oworc3RhdGljIHZvaWQgY29weV9vcl9wcmludF9nbG9iYWxfZmlsZShjb25zdCBjaGFyICpvdXRm aWxlLCBGSUxFICpwZmlsZSk7CitzdGF0aWMgaW50IGdldF9kYm5hbWVzX2xpc3RfdG9fcmVzdG9y ZShQR2Nvbm4gKmNvbm4sCisJCVNpbXBsZURhdGFiYXNlT2lkTGlzdCAqZGJuYW1lX29pZF9saXN0 LAorCQlTaW1wbGVTdHJpbmdMaXN0IGRiX2V4Y2x1ZGVfcGF0dGVybnMpOworc3RhdGljIGludCBn ZXRfZGJuYW1lX29pZF9saXN0X2Zyb21fbWZpbGUoY29uc3QgY2hhciAqZHVtcGRpcnBhdGgsCisJ CQkJCQkJCQkJICBTaW1wbGVEYXRhYmFzZU9pZExpc3QgKmRibmFtZV9vaWRfbGlzdCk7CitzdGF0 aWMgdm9pZCBzaW1wbGVfZGJfb2lkX2xpc3RfYXBwZW5kKFNpbXBsZURhdGFiYXNlT2lkTGlzdCAq bGlzdCwgT2lkIGRiX29pZCwKKwkJCQkJCQkJCSAgY29uc3QgY2hhciAqZGJuYW1lKTsKK3N0YXRp YyB2b2lkIHNpbXBsZV9zdHJpbmdfZnVsbF9saXN0X2RlbGV0ZShTaW1wbGVTdHJpbmdMaXN0ICps aXN0KTsKK3N0YXRpYyB2b2lkIHNpbXBsZV9kYl9vaWRfZnVsbF9saXN0X2RlbGV0ZShTaW1wbGVE YXRhYmFzZU9pZExpc3QgKmxpc3QpOworc3RhdGljIHZvaWQgc2ltcGxlX2RiX29pZF9saXN0X2Rl bGV0ZShTaW1wbGVEYXRhYmFzZU9pZExpc3QgKmxpc3QsCisJCQkJCQkJCQkgIFNpbXBsZURhdGFi YXNlT2lkTGlzdENlbGwgKmNlbGwsCisJCQkJCQkJCQkgIFNpbXBsZURhdGFiYXNlT2lkTGlzdENl bGwgKnByZXYpOworc3RhdGljIHZvaWQgc2ltcGxlX2RiX29pZF9saXN0X2FwcGVuZChTaW1wbGVE YXRhYmFzZU9pZExpc3QgKmxpc3QsCisJCU9pZCBkYl9vaWQsIGNvbnN0IGNoYXIgKmRibmFtZSk7 CitzdGF0aWMgc2l6ZV90IHF1b3RlX2xpdGVyYWxfaW50ZXJuYWwoY2hhciAqZHN0LCBjb25zdCBj aGFyICpzcmMsIHNpemVfdCBsZW4pOworc3RhdGljIGNoYXIgKnF1b3RlX2xpdGVyYWxfY3N0cihj b25zdCBjaGFyICpyYXdzdHIpOwogCiBpbnQKIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQog ewogCVJlc3RvcmVPcHRpb25zICpvcHRzOwogCWludAkJCWM7Ci0JaW50CQkJZXhpdF9jb2RlOwog CWludAkJCW51bVdvcmtlcnMgPSAxOwotCUFyY2hpdmUgICAgKkFIOwogCWNoYXIJICAgKmlucHV0 RmlsZVNwZWM7CiAJYm9vbAkJZGF0YV9vbmx5ID0gZmFsc2U7CiAJYm9vbAkJc2NoZW1hX29ubHkg PSBmYWxzZTsKKwlpbnQJCQluX2Vycm9ycyA9IDA7CisJYm9vbAkJZ2xvYmFsc19vbmx5ID0gZmFs c2U7CisJU2ltcGxlU3RyaW5nTGlzdAlkYl9leGNsdWRlX3BhdHRlcm5zID0ge05VTEwsIE5VTEx9 OwogCXN0YXRpYyBpbnQJZGlzYWJsZV90cmlnZ2VycyA9IDA7CiAJc3RhdGljIGludAllbmFibGVf cm93X3NlY3VyaXR5ID0gMDsKIAlzdGF0aWMgaW50CWlmX2V4aXN0cyA9IDA7CkBAIC04Niw2ICsx MzIsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJeyJjbGVhbiIsIDAsIE5VTEws ICdjJ30sCiAJCXsiY3JlYXRlIiwgMCwgTlVMTCwgJ0MnfSwKIAkJeyJkYXRhLW9ubHkiLCAwLCBO VUxMLCAnYSd9LAorCQl7Imdsb2JhbHMtb25seSIsIDAsIE5VTEwsICdnJ30sCiAJCXsiZGJuYW1l IiwgMSwgTlVMTCwgJ2QnfSwKIAkJeyJleGl0LW9uLWVycm9yIiwgMCwgTlVMTCwgJ2UnfSwKIAkJ eyJleGNsdWRlLXNjaGVtYSIsIDEsIE5VTEwsICdOJ30sCkBAIC0xMzYsNiArMTgzLDcgQEAgbWFp bihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCXsibm8tc3RhdGlzdGljcyIsIG5vX2FyZ3VtZW50 LCAmbm9fc3RhdGlzdGljcywgMX0sCiAJCXsic3RhdGlzdGljcy1vbmx5Iiwgbm9fYXJndW1lbnQs ICZzdGF0aXN0aWNzX29ubHksIDF9LAogCQl7ImZpbHRlciIsIHJlcXVpcmVkX2FyZ3VtZW50LCBO VUxMLCA0fSwKKwkJeyJleGNsdWRlLWRhdGFiYXNlIiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEws IDZ9LAogCiAJCXtOVUxMLCAwLCBOVUxMLCAwfQogCX07CkBAIC0xNjQsNyArMjEyLDcgQEAgbWFp bihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCX0KIAl9CiAKLQl3aGlsZSAoKGMgPSBnZXRvcHRf bG9uZyhhcmdjLCBhcmd2LCAiYWNDZDplZjpGOmg6STpqOmxMOm46TjpPcDpQOlJzUzp0OlQ6VTp2 d1d4MSIsCisJd2hpbGUgKChjID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJndiwgImFBY0NkOmVmOkY6 Z2g6STpqOmxMOm46TjpPcDpQOlJzUzp0OlQ6VTp2d1d4MSIsCiAJCQkJCQkJY21kb3B0cywgTlVM TCkpICE9IC0xKQogCXsKIAkJc3dpdGNoIChjKQpAQCAtMTkxLDExICsyMzksMTQgQEAgbWFpbihp bnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCQkJaWYgKHN0cmxlbihvcHRhcmcpICE9IDApCiAJCQkJ CW9wdHMtPmZvcm1hdE5hbWUgPSBwZ19zdHJkdXAob3B0YXJnKTsKIAkJCQlicmVhazsKKwkJCWNh c2UgJ2cnOgorCQkJCS8qIHJlc3RvcmUgb25seSBnbG9iYWwuZGF0IGZpbGUgZnJvbSBkaXJlY3Rv cnkgKi8KKwkJCQlnbG9iYWxzX29ubHkgPSB0cnVlOworCQkJCWJyZWFrOwogCQkJY2FzZSAnaCc6 CiAJCQkJaWYgKHN0cmxlbihvcHRhcmcpICE9IDApCiAJCQkJCW9wdHMtPmNwYXJhbXMucGdob3N0 ID0gcGdfc3RyZHVwKG9wdGFyZyk7CiAJCQkJYnJlYWs7Ci0KIAkJCWNhc2UgJ2onOgkJCS8qIG51 bWJlciBvZiByZXN0b3JlIGpvYnMgKi8KIAkJCQlpZiAoIW9wdGlvbl9wYXJzZV9pbnQob3B0YXJn LCAiLWovLS1qb2JzIiwgMSwKIAkJCQkJCQkJCSAgUEdfTUFYX0pPQlMsCkBAIC0zMTAsNiArMzYx LDEwIEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQkJCQlleGl0KDEpOwogCQkJCW9w dHMtPmV4aXRfb25fZXJyb3IgPSB0cnVlOwogCQkJCWJyZWFrOworCQkJY2FzZSA2OgorCQkJCS8q IGxpc3Qgb2YgZGF0YWJhc2VzIHBhdHRlcm5zIHRob3NlIG5lZWRzIHRvIHNraXAgd2hpbGUgcmVz dG9yaW5nICovCisJCQkJc2ltcGxlX3N0cmluZ19saXN0X2FwcGVuZCgmZGJfZXhjbHVkZV9wYXR0 ZXJucywgb3B0YXJnKTsKKwkJCQlicmVhazsKIAogCQkJZGVmYXVsdDoKIAkJCQkvKiBnZXRvcHRf bG9uZyBhbHJlYWR5IGVtaXR0ZWQgYSBjb21wbGFpbnQgKi8KQEAgLTMzNyw2ICszOTIsMTMgQEAg bWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJaWYgKCFvcHRzLT5jcGFyYW1zLmRibmFtZSAm JiAhb3B0cy0+ZmlsZW5hbWUgJiYgIW9wdHMtPnRvY1N1bW1hcnkpCiAJCXBnX2ZhdGFsKCJvbmUg b2YgLWQvLS1kYm5hbWUgYW5kIC1mLy0tZmlsZSBtdXN0IGJlIHNwZWNpZmllZCIpOwogCisJaWYg KGRiX2V4Y2x1ZGVfcGF0dGVybnMuaGVhZCAhPSBOVUxMICYmIGdsb2JhbHNfb25seSkKKwl7CisJ CXBnX2xvZ19lcnJvcigib3B0aW9uIC0tZXhjbHVkZS1kYXRhYmFzZSBjYW5ub3QgYmUgdXNlZCB0 b2dldGhlciB3aXRoIC1nLy0tZ2xvYmFscy1vbmx5Iik7CisJCXBnX2xvZ19lcnJvcl9oaW50KCJU cnkgXCIlcyAtLWhlbHBcIiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iLCBwcm9nbmFtZSk7CisJCWV4 aXRfbmljZWx5KDEpOworCX0KKwogCS8qIFNob3VsZCBnZXQgYXQgbW9zdCBvbmUgb2YgLWQgYW5k IC1mLCBlbHNlIHVzZXIgaXMgY29uZnVzZWQgKi8KIAlpZiAob3B0cy0+Y3BhcmFtcy5kYm5hbWUp CiAJewpAQCAtNDE3LDYgKzQ3OSwxMDYgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJ CQkJCSBvcHRzLT5mb3JtYXROYW1lKTsKIAl9CiAKKwkvKgorCSAqIElmIHRvYy5kYXQgZmlsZSBk b2VzIG5vdCBwcmVzZW50IGluIGN1cnJlbnQgcGF0aCwgdGhlbiBjaGVjayBmb3IKKwkgKiBnbG9i YWwuZGF0LiAgSWYgZ2xvYmFsLmRhdCBmaWxlIGlzIHByZXNlbnQsIHRoZW4gcmVzdG9yZSBhbGwg dGhlCisJICogZGF0YWJhc2VzIGZyb20gbWFwLmRhdChpZiBleGlzdCkgZmlsZSBsaXN0IGFuZCBz a2lwIHJlc3RvcmluZyBmb3IKKwkgKiAtLWV4Y2x1ZGUtZGF0YWJhc2UgcGF0dGVybnMuCisJICov CisJaWYgKGlucHV0RmlsZVNwZWMgIT0gTlVMTCAmJiAhSXNGaWxlRXhpc3RzSW5EaXJlY3Rvcnko aW5wdXRGaWxlU3BlYywgInRvYy5kYXQiKSAmJgorCQkJSXNGaWxlRXhpc3RzSW5EaXJlY3Rvcnko aW5wdXRGaWxlU3BlYywgImdsb2JhbC5kYXQiKSkKKwl7CisJCVBHY29ubiAgKmNvbm4gPSBOVUxM OyAvKiBDb25uZWN0aW9uIHRvIHJlc3RvcmUgZ2xvYmFsIHNxbCBjb21tYW5kcy4gKi8KKworCQkv KgorCQkgKiBVc2VyIGlzIHN1Z2dlc3RlZCB0byB1c2Ugc2luZ2xlIGRhdGFiYXNlIGR1bXAgZm9y IC0tbGlzdCBvcHRpb24uCisJCSAqLworCQlpZiAob3B0cy0+dG9jU3VtbWFyeSkKKwkJCXBnX2Zh dGFsKCJvcHRpb24gLWwvLS1saXN0IGNhbm5vdCBiZSB1c2VkIHdoZW4gcmVzdG9yaW5nIG11bHRp cGxlIGRhdGFiYXNlcyBieSBhcmNoaXZlIG9mIHBnX2R1bXBhbGwiKTsKKworCQkvKgorCQkgKiBU byByZXN0b3JlIG11bHRpcGxlIGRhdGFiYXNlcywgLUMgKGNyZWF0ZSBkYXRhYmFzZSkgb3B0aW9u IHNob3VsZCBiZSBzcGVjaWZpZWQuCisJCSAqIEV2ZW4gdGhlcmUgaXMgc2luZ2xlIGRhdGFiYXNl IGluIGR1bXAsIHJlcG9ydCBlcnJvciBiZWNhdXNlIGl0IG1pZ2h0IGJlIHBvc3NpYmxlCisJCSAq IHRoYXQgZGF0YWJhc2UgaGFzbid0IGNyZWF0ZWQgc28gYmV0dGVyIHdlIHJlcG9ydCBlcnJvci4K KwkJICovCisJCWlmICghZ2xvYmFsc19vbmx5ICYmIG9wdHMtPmNyZWF0ZURCICE9IDEpCisJCXsK KwkJCXBnX2xvZ19lcnJvcigiLUMvLS1jcmVhdGUgb3B0aW9uIHNob3VsZCBiZSBzcGVjaWZpZWQg d2hlbiByZXN0b3JpbmcgbXVsdGlwbGUgZGF0YWJhc2VzIGJ5IGFyY2hpdmUgb2YgcGdfZHVtcGFs bCIpOworCQkJcGdfbG9nX2Vycm9yX2hpbnQoIlRyeSBcIiVzIC0taGVscFwiIGZvciBtb3JlIGlu Zm9ybWF0aW9uLiIsIHByb2duYW1lKTsKKwkJCXBnX2xvZ19lcnJvcl9oaW50KCJJZiBkYiBpcyBh bHJlYWR5IGNyZWF0ZWQgYW5kIGR1bXAgaGFzIHNpbmdsZSBkYiBkdW1wLCB0aGVuIHVzZSBwYXJ0 aWN1bGFyIGR1bXAgZmlsZS4iKTsKKwkJCWV4aXRfbmljZWx5KDEpOworCQl9CisKKwkJLyoKKwkJ ICogQ29ubmVjdCB0byBkYXRhYmFzZSB0byBleGVjdXRlIGdsb2JhbCBzcWwgY29tbWFuZHMgZnJv bSBnbG9iYWwuZGF0IGZpbGUuCisJCSAqLworCQlpZiAob3B0cy0+Y3BhcmFtcy5kYm5hbWUpCisJ CXsKKwkJCWNvbm4gPSBjb25uZWN0RGF0YWJhc2Uob3B0cy0+Y3BhcmFtcy5kYm5hbWUsIE5VTEws IG9wdHMtPmNwYXJhbXMucGdob3N0LAorCQkJCQlvcHRzLT5jcGFyYW1zLnBncG9ydCwgb3B0cy0+ Y3BhcmFtcy51c2VybmFtZSwgVFJJX0RFRkFVTFQsCisJCQkJCWZhbHNlLCBwcm9nbmFtZSwgTlVM TCwgTlVMTCk7CisKKwkJCWlmICghY29ubikKKwkJCQlwZ19mYXRhbCgiY291bGQgbm90IGNvbm5l Y3QgdG8gZGF0YWJhc2UgXCIlc1wiIiwgb3B0cy0+Y3BhcmFtcy5kYm5hbWUpOworCQl9CisKKwkJ LyogSWYgZ2xvYmFscy1vbmx5LCB0aGVuIHJldHVybiBmcm9tIGhlcmUuICovCisJCWlmIChnbG9i YWxzX29ubHkpCisJCXsKKwkJCS8qIE9wZW4gZ2xvYmFsLmRhdCBmaWxlIGFuZCBleGVjdXRlL2Fw cGVuZCBhbGwgdGhlIGdsb2JhbCBzcWwgY29tbWFuZHMuICovCisJCQluX2Vycm9ycyA9IHByb2Nl c3NfZ2xvYmFsX3NxbF9jb21tYW5kcyhjb25uLCBpbnB1dEZpbGVTcGVjLAorCQkJCQlvcHRzLT5m aWxlbmFtZSk7CisKKwkJCWlmIChjb25uKQorCQkJCVBRZmluaXNoKGNvbm4pOworCisJCQlwZ19s b2dfaW5mbygiZGF0YWJhc2VzIHJlc3RvcmluZyBpcyBza2lwcGVkIGFzIC1nLy0tZ2xvYmFscy1v bmx5IG9wdGlvbiBpcyBzcGVjaWZpZWQiKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCS8qIE5vdyBy ZXN0b3JlIGFsbCB0aGUgZGF0YWJhc2VzIGZyb20gbWFwLmRhdCBmaWxlLiAqLworCQkJbl9lcnJv cnMgPSByZXN0b3JlQWxsRGF0YWJhc2VzKGNvbm4sIGlucHV0RmlsZVNwZWMsIGRiX2V4Y2x1ZGVf cGF0dGVybnMsCisJCQkJCW9wdHMsIG51bVdvcmtlcnMpOworCQl9CisKKwkJLyogRnJlZSBkYiBw YXR0ZXJuIGxpc3QuICovCisJCXNpbXBsZV9zdHJpbmdfZnVsbF9saXN0X2RlbGV0ZSgmZGJfZXhj bHVkZV9wYXR0ZXJucyk7CisJfQorCWVsc2UgLyogcHJvY2VzcyBpZiBnbG9iYWwuZGF0IGZpbGUg ZG9lcyBub3QgZXhpc3QuICovCisJeworCQlpZiAoZGJfZXhjbHVkZV9wYXR0ZXJucy5oZWFkICE9 IE5VTEwpCisJCQlwZ19mYXRhbCgib3B0aW9uIC0tZXhjbHVkZS1kYXRhYmFzZSBjYW4gYmUgdXNl ZCBvbmx5IHdoZW4gcmVzdG9yaW5nIG11bHRpcGxlIGRhdGFiYXNlcyBieSBhcmNoaXZlIG9mIHBn X2R1bXBhbGwiKTsKKworCQlpZiAoZ2xvYmFsc19vbmx5KQorCQkJcGdfZmF0YWwoIm9wdGlvbiAt Zy8tLWdsb2JhbHMtb25seSBjYW4gYmUgdXNlZCBvbmx5IHdoZW4gcmVzdG9yaW5nIG11bHRpcGxl IGRhdGFiYXNlcyBieSBhcmNoaXZlIG9mIHBnX2R1bXBhbGwiKTsKKworCQluX2Vycm9ycyA9IHJl c3RvcmVPbmVEYXRhYmFzZShpbnB1dEZpbGVTcGVjLCBvcHRzLCBudW1Xb3JrZXJzLCBmYWxzZSk7 CisJfQorCisJLyogRG9uZSwgcHJpbnQgYSBzdW1tYXJ5IG9mIGlnbm9yZWQgZXJyb3JzIGR1cmlu ZyByZXN0b3JlLiAqLworCWlmIChuX2Vycm9ycykKKwl7CisJCXBnX2xvZ193YXJuaW5nKCJlcnJv cnMgaWdub3JlZCBvbiByZXN0b3JlOiAlZCIsIG5fZXJyb3JzKTsKKwkJcmV0dXJuIDE7CisJfQor CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiByZXN0b3JlT25lRGF0YWJhc2UKKyAqCisgKiBUaGlz IHdpbGwgcmVzdG9yZSBvbmUgZGF0YWJhc2UgdXNpbmcgdG9jLmRhdCBmaWxlLgorICoKKyAqIHJl dHVybnMgdGhlIG51bWJlciBvZiBlcnJvcnMgd2hpbGUgZG9pbmcgcmVzdG9yZS4KKyAqLworc3Rh dGljIGludAorcmVzdG9yZU9uZURhdGFiYXNlKGNvbnN0IGNoYXIgKmlucHV0RmlsZVNwZWMsIFJl c3RvcmVPcHRpb25zICpvcHRzLAorCQkJCSAgIGludCBudW1Xb3JrZXJzLCBib29sIGFwcGVuZF9k YXRhKQoreworCUFyY2hpdmUJCSpBSDsKKwlpbnQJCQluX2Vycm9yczsKKwogCUFIID0gT3BlbkFy Y2hpdmUoaW5wdXRGaWxlU3BlYywgb3B0cy0+Zm9ybWF0KTsKIAogCVNldEFyY2hpdmVPcHRpb25z KEFILCBOVUxMLCBvcHRzKTsKQEAgLTQ0NiwyNSArNjA4LDIyIEBAIG1haW4oaW50IGFyZ2MsIGNo YXIgKiphcmd2KQogCWVsc2UKIAl7CiAJCVByb2Nlc3NBcmNoaXZlUmVzdG9yZU9wdGlvbnMoQUgp OwotCQlSZXN0b3JlQXJjaGl2ZShBSCk7CisJCVJlc3RvcmVBcmNoaXZlKEFILCBhcHBlbmRfZGF0 YSk7CiAJfQogCi0JLyogZG9uZSwgcHJpbnQgYSBzdW1tYXJ5IG9mIGlnbm9yZWQgZXJyb3JzICov Ci0JaWYgKEFILT5uX2Vycm9ycykKLQkJcGdfbG9nX3dhcm5pbmcoImVycm9ycyBpZ25vcmVkIG9u IHJlc3RvcmU6ICVkIiwgQUgtPm5fZXJyb3JzKTsKKwluX2Vycm9ycyA9IEFILT5uX2Vycm9yczsK IAogCS8qIEFIIG1heSBiZSBmcmVlZCBpbiBDbG9zZUFyY2hpdmU/ICovCi0JZXhpdF9jb2RlID0g QUgtPm5fZXJyb3JzID8gMSA6IDA7Ci0KIAlDbG9zZUFyY2hpdmUoQUgpOwogCi0JcmV0dXJuIGV4 aXRfY29kZTsKKwlyZXR1cm4gbl9lcnJvcnM7CiB9CiAKIHN0YXRpYyB2b2lkCiB1c2FnZShjb25z dCBjaGFyICpwcm9nbmFtZSkKIHsKLQlwcmludGYoXygiJXMgcmVzdG9yZXMgYSBQb3N0Z3JlU1FM IGRhdGFiYXNlIGZyb20gYW4gYXJjaGl2ZSBjcmVhdGVkIGJ5IHBnX2R1bXAuXG5cbiIpLCBwcm9n bmFtZSk7CisJcHJpbnRmKF8oIiVzIHJlc3RvcmVzIGEgUG9zdGdyZVNRTCBkYXRhYmFzZSBmcm9t IGFuIGFyY2hpdmUgY3JlYXRlZCBieSBwZ19kdW1wLlxuIgorCQkJCSJJZiBhcmNoaXZlIGlzIGNy ZWF0ZWQgYnkgcGdfZHVtcGFsbCwgdGhlbiByZXN0b3JlcyBtdWx0aXBsZSBkYXRhYmFzZXMgYWxz by4gXG5cbiIpLCBwcm9nbmFtZSk7CiAJcHJpbnRmKF8oIlVzYWdlOlxuIikpOwogCXByaW50Zihf KCIgICVzIFtPUFRJT05dLi4uIFtGSUxFXVxuIiksIHByb2duYW1lKTsKIApAQCAtNDgyLDYgKzY0 MSw3IEBAIHVzYWdlKGNvbnN0IGNoYXIgKnByb2duYW1lKQogCXByaW50ZihfKCIgIC1jLCAtLWNs ZWFuICAgICAgICAgICAgICAgICAgY2xlYW4gKGRyb3ApIGRhdGFiYXNlIG9iamVjdHMgYmVmb3Jl IHJlY3JlYXRpbmdcbiIpKTsKIAlwcmludGYoXygiICAtQywgLS1jcmVhdGUgICAgICAgICAgICAg ICAgIGNyZWF0ZSB0aGUgdGFyZ2V0IGRhdGFiYXNlXG4iKSk7CiAJcHJpbnRmKF8oIiAgLWUsIC0t ZXhpdC1vbi1lcnJvciAgICAgICAgICBleGl0IG9uIGVycm9yLCBkZWZhdWx0IGlzIHRvIGNvbnRp bnVlXG4iKSk7CisJcHJpbnRmKF8oIiAgLWcsIC0tZ2xvYmFscy1vbmx5ICAgICAgICAgICByZXN0 b3JlIG9ubHkgZ2xvYmFsIG9iamVjdHMsIG5vIGRhdGFiYXNlc1xuIikpOwogCXByaW50ZihfKCIg IC1JLCAtLWluZGV4PU5BTUUgICAgICAgICAgICAgcmVzdG9yZSBuYW1lZCBpbmRleFxuIikpOwog CXByaW50ZihfKCIgIC1qLCAtLWpvYnM9TlVNICAgICAgICAgICAgICAgdXNlIHRoaXMgbWFueSBw YXJhbGxlbCBqb2JzIHRvIHJlc3RvcmVcbiIpKTsKIAlwcmludGYoXygiICAtTCwgLS11c2UtbGlz dD1GSUxFTkFNRSAgICAgIHVzZSB0YWJsZSBvZiBjb250ZW50cyBmcm9tIHRoaXMgZmlsZSBmb3Jc biIKQEAgLTQ5NCw2ICs2NTQsNyBAQCB1c2FnZShjb25zdCBjaGFyICpwcm9nbmFtZSkKIAlwcmlu dGYoXygiICAtUywgLS1zdXBlcnVzZXI9TkFNRSAgICAgICAgIHN1cGVydXNlciB1c2VyIG5hbWUg dG8gdXNlIGZvciBkaXNhYmxpbmcgdHJpZ2dlcnNcbiIpKTsKIAlwcmludGYoXygiICAtdCwgLS10 YWJsZT1OQU1FICAgICAgICAgICAgIHJlc3RvcmUgbmFtZWQgcmVsYXRpb24gKHRhYmxlLCB2aWV3 LCBldGMuKVxuIikpOwogCXByaW50ZihfKCIgIC1ULCAtLXRyaWdnZXI9TkFNRSAgICAgICAgICAg cmVzdG9yZSBuYW1lZCB0cmlnZ2VyXG4iKSk7CisJcHJpbnRmKF8oIiAgLS1leGNsdWRlLWRhdGFi YXNlPVBBVFRFUk4gICBleGNsdWRlIGRhdGFiYXNlcyB3aG9zZSBuYW1lIG1hdGNoZXMgd2l0aCBw YXR0ZXJuXG4iKSk7CiAJcHJpbnRmKF8oIiAgLXgsIC0tbm8tcHJpdmlsZWdlcyAgICAgICAgICBz a2lwIHJlc3RvcmF0aW9uIG9mIGFjY2VzcyBwcml2aWxlZ2VzIChncmFudC9yZXZva2UpXG4iKSk7 CiAJcHJpbnRmKF8oIiAgLTEsIC0tc2luZ2xlLXRyYW5zYWN0aW9uICAgICByZXN0b3JlIGFzIGEg c2luZ2xlIHRyYW5zYWN0aW9uXG4iKSk7CiAJcHJpbnRmKF8oIiAgLS1kaXNhYmxlLXRyaWdnZXJz ICAgICAgICAgICBkaXNhYmxlIHRyaWdnZXJzIGR1cmluZyBkYXRhLW9ubHkgcmVzdG9yZVxuIikp OwpAQCAtNTMwLDggKzY5MSw4IEBAIHVzYWdlKGNvbnN0IGNoYXIgKnByb2duYW1lKQogCXByaW50 ZihfKCIgIC0tcm9sZT1ST0xFTkFNRSAgICAgICAgICBkbyBTRVQgUk9MRSBiZWZvcmUgcmVzdG9y ZVxuIikpOwogCiAJcHJpbnRmKF8oIlxuIgotCQkJICJUaGUgb3B0aW9ucyAtSSwgLW4sIC1OLCAt UCwgLXQsIC1ULCBhbmQgLS1zZWN0aW9uIGNhbiBiZSBjb21iaW5lZCBhbmQgc3BlY2lmaWVkXG4i Ci0JCQkgIm11bHRpcGxlIHRpbWVzIHRvIHNlbGVjdCBtdWx0aXBsZSBvYmplY3RzLlxuIikpOwor CQkJICJUaGUgb3B0aW9ucyAtSSwgLW4sIC1OLCAtUCwgLXQsIC1ULCAtLXNlY3Rpb24sIGFuZCAt LWV4Y2x1ZGUtZGF0YWJhc2UgY2FuIGJlIGNvbWJpbmVkXG4iCisJCQkgImFuZCBzcGVjaWZpZWQg bXVsdGlwbGUgdGltZXMgdG8gc2VsZWN0IG11bHRpcGxlIG9iamVjdHMuXG4iKSk7CiAJcHJpbnRm KF8oIlxuSWYgbm8gaW5wdXQgZmlsZSBuYW1lIGlzIHN1cHBsaWVkLCB0aGVuIHN0YW5kYXJkIGlu cHV0IGlzIHVzZWQuXG5cbiIpKTsKIAlwcmludGYoXygiUmVwb3J0IGJ1Z3MgdG8gPCVzPi5cbiIp LCBQQUNLQUdFX0JVR1JFUE9SVCk7CiAJcHJpbnRmKF8oIiVzIGhvbWUgcGFnZTogPCVzPlxuIiks IFBBQ0tBR0VfTkFNRSwgUEFDS0FHRV9VUkwpOwpAQCAtNjM2LDMgKzc5Nyw2NTMgQEAgcmVhZF9y ZXN0b3JlX2ZpbHRlcnMoY29uc3QgY2hhciAqZmlsZW5hbWUsIFJlc3RvcmVPcHRpb25zICpvcHRz KQogCiAJZmlsdGVyX2ZyZWUoJmZzdGF0ZSk7CiB9CisKKy8qCisgKiBJc0ZpbGVFeGlzdHNJbkRp cmVjdG9yeQorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiBmaWxlIGV4aXN0IGluIGN1cnJlbnQgZGly ZWN0b3J5LgorICovCitzdGF0aWMgYm9vbAorSXNGaWxlRXhpc3RzSW5EaXJlY3RvcnkoY29uc3Qg Y2hhciAqZGlyLCBjb25zdCBjaGFyICpmaWxlbmFtZSkKK3sKKwlzdHJ1Y3Qgc3RhdAkJCXN0Owor CWNoYXIJCQkJYnVmW01BWFBHUEFUSF07CisKKwlpZiAoc25wcmludGYoYnVmLCBNQVhQR1BBVEgs ICIlcy8lcyIsIGRpciwgZmlsZW5hbWUpID49IE1BWFBHUEFUSCkKKwkJcGdfZmF0YWwoImRpcmVj dG9yeSBuYW1lIHRvbyBsb25nOiBcIiVzXCIiLCBkaXIpOworCisJcmV0dXJuIChzdGF0KGJ1Ziwg JnN0KSA9PSAwICYmIFNfSVNSRUcoc3Quc3RfbW9kZSkpOworfQorCisvKgorICogUmVhZE9uZVN0 YXRlbWVudAorICoKKyAqIFRoaXMgd2lsbCBzdGFydCByZWFkaW5nIGZyb20gcGFzc2VkIGZpbGUg cG9pbnRlciB1c2luZyBmZ2V0YyBhbmQgcmVhZCB0aWxsCisgKiBzZW1pY29sb24oc3FsIHN0YXRl bWVudCB0ZXJtaW5hdG9yIGZvciBnbG9iYWwuZGF0IGZpbGUpCisgKgorICogRU9GIGlzIHJldHVy bmVkIGlmIGVuZC1vZi1maWxlIGlucHV0IGlzIHNlZW47IHRpbWUgdG8gc2h1dCBkb3duLgorICov CisKK3N0YXRpYyBpbnQKK1JlYWRPbmVTdGF0ZW1lbnQoU3RyaW5nSW5mbyBpbkJ1ZiwgRklMRSAq cGZpbGUpCit7CisJaW50CQkJYzsgLyogY2hhcmFjdGVyIHJlYWQgZnJvbSBnZXRjKCkgKi8KKwlp bnQJCQltOworCisJU3RyaW5nSW5mb0RhdGEJcTsKKwlpbml0U3RyaW5nSW5mbygmcSk7CisKKwly ZXNldFN0cmluZ0luZm8oaW5CdWYpOworCisJLyoKKwkgKiBSZWFkIGNoYXJhY3RlcnMgdW50aWwg RU9GIG9yIHRoZSBhcHByb3ByaWF0ZSBkZWxpbWl0ZXIgaXMgc2Vlbi4KKwkgKi8KKwl3aGlsZSAo KGMgPSBmZ2V0YyhwZmlsZSkpICE9IEVPRikKKwl7CisJCWlmIChjICE9ICdcJycgJiYgYyAhPSAn IicgJiYgYyAhPSAnXG4nICYmIGMgIT0gJzsnKQorCQl7CisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hh cihpbkJ1ZiwgKGNoYXIpIGMpOworCQkJd2hpbGUgKChjID0gZmdldGMocGZpbGUpKSAhPSBFT0Yp CisJCQl7CisJCQkJaWYgKGMgIT0gJ1wnJyAmJiBjICE9ICciJyAmJiBjICE9ICc7JyAmJiBjICE9 ICdcbicpCisJCQkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGluQnVmLCAoY2hhcikgYyk7CisJCQkJ ZWxzZQorCQkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCWlmIChjID09ICdcJycgfHwgYyA9PSAn IicpCisJCXsKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKCZxLCAoY2hhcikgYyk7CisJCQltID0g YzsKKworCQkJd2hpbGUgKChjID0gZmdldGMocGZpbGUpKSAhPSBFT0YpCisJCQl7CisJCQkJYXBw ZW5kU3RyaW5nSW5mb0NoYXIoJnEsIChjaGFyKSBjKTsKKworCQkJCWlmKGMgPT0gbSkKKwkJCQl7 CisJCQkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoaW5CdWYsIHEuZGF0YSk7CisJCQkJCXJlc2V0 U3RyaW5nSW5mbygmcSk7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJfQorCisJCWlmIChj ID09ICc7JykKKwkJeworCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoaW5CdWYsIChjaGFyKSAnOycp OworCQkJYnJlYWs7CisJCX0KKworCQlpZiAoYyA9PSAnXG4nKQorCQkJYXBwZW5kU3RyaW5nSW5m b0NoYXIoaW5CdWYsIChjaGFyKSAnXG4nKTsKKwl9CisKKwkvKiBObyBpbnB1dCBiZWZvcmUgRU9G IHNpZ25hbCBtZWFucyB0aW1lIHRvIHF1aXQuICovCisJaWYgKGMgPT0gRU9GICYmIGluQnVmLT5s ZW4gPT0gMCkKKwkJcmV0dXJuIEVPRjsKKworCS8qIEFkZCAnXDAnIHRvIG1ha2UgaXQgbG9vayB0 aGUgc2FtZSBhcyBtZXNzYWdlIGNhc2UuICovCisJYXBwZW5kU3RyaW5nSW5mb0NoYXIoaW5CdWYs IChjaGFyKSAnXDAnKTsKKworCXJldHVybiAnUSc7Cit9CisKKy8qCisgKiBnZXRfZGJuYW1lc19s aXN0X3RvX3Jlc3RvcmUKKyAqCisgKiBUaGlzIHdpbGwgcmVtb3ZlIGVudHJpZXMgZnJvbSBkYm5h bWVfb2lkX2xpc3QgdGhhdCBwYXR0ZXJuIG1hdGNoaW5nIGFueQorICogaW4gdGhlIGRiX2V4Y2x1 ZGVfcGF0dGVybnMgbGlzdC4gIGRibmFtZV9vaWRfbGlzdCBtYXliZSBpbnBsYWNlIG1vZGlmaWVk LgorICoKKyAqIHJldHVybnMsIG51bWJlciBvZiBkYXRhYmFzZSB3aWxsIGJlIHJlc3RvcmVkLgor ICoKKyAqLworc3RhdGljIGludAorZ2V0X2RibmFtZXNfbGlzdF90b19yZXN0b3JlKFBHY29ubiAq Y29ubiwKKwkJU2ltcGxlRGF0YWJhc2VPaWRMaXN0ICpkYm5hbWVfb2lkX2xpc3QsCisJCVNpbXBs ZVN0cmluZ0xpc3QgZGJfZXhjbHVkZV9wYXR0ZXJucykKK3sKKwlTaW1wbGVEYXRhYmFzZU9pZExp c3RDZWxsCSpkYm9pZF9jZWxsID0gZGJuYW1lX29pZF9saXN0LT5oZWFkOworCVNpbXBsZURhdGFi YXNlT2lkTGlzdENlbGwJKmRib2lkcHJlY2VsbCA9IE5VTEw7CisJaW50CQkJCQkJCWNvdW50X2Ri ID0gMDsKKwlQUUV4cEJ1ZmZlciBxdWVyeTsKKwlQR3Jlc3VsdCAgICpyZXM7CisKKwkvKiBSZXR1 cm4gMCBpZiB0aGVyZSBpcyBubyBkYXRhYmFzZSB0byByZXN0b3JlLiAqLworCWlmIChkYm9pZF9j ZWxsID09IE5VTEwpCisJCXJldHVybiAwOworCisJcXVlcnkgPSBjcmVhdGVQUUV4cEJ1ZmZlcigp OworCisJaWYgKCFjb25uKQorCQlwZ19sb2dfaW5mbygiY29uc2lkZXJpbmcgUEFUVEVSTiBhcyBO QU1FIGZvciAtLWV4Y2x1ZGUtZGF0YWJhc2Ugb3B0aW9uIGFzIG5vIGRiIGNvbm5lY3Rpb24gd2hp bGUgZG9pbmcgcGdfcmVzdG9yZS4iKTsKKworCS8qCisJICogUHJvY2VzcyBvbmUgYnkgb25lIGFs bCBkYm5hbWVzIGFuZCBpZiBzcGVjaWZpZWQgdG8gc2tpcCByZXN0b3JpbmcsIHRoZW4KKwkgKiBy ZW1vdmUgZGJuYW1lIGZyb20gbGlzdC4KKwkgKi8KKwl3aGlsZSAoZGJvaWRfY2VsbCAhPSBOVUxM KQorCXsKKwkJYm9vbAkJCQkJCXNraXBfZGJfcmVzdG9yZSA9IGZhbHNlOworCQlTaW1wbGVEYXRh YmFzZU9pZExpc3RDZWxsCSpuZXh0ID0gZGJvaWRfY2VsbC0+bmV4dDsKKworCQlmb3IgKFNpbXBs ZVN0cmluZ0xpc3RDZWxsICpjZWxsZGIgPSBkYl9leGNsdWRlX3BhdHRlcm5zLmhlYWQ7IGNlbGxk YjsgY2VsbGRiID0gY2VsbGRiLT5uZXh0KQorCQl7CisJCQkvKgorCQkJICogdGhlIGNvbnN0cnVj dCBwYXR0ZXJuIG1hdGNoaW5nIHF1ZXJ5OgorCQkJICogU0VMRUNUIDEgV0hFUkUgWFhYIE9QRVJB VE9SKHBnX2NhdGFsb2cufikgJ14oUEFUVEVSTikkJyBDT0xMQVRFCisJCQkgKiBwZ19jYXRhbG9n LmRlZmF1bHQKKwkJCSAqCisJCQkgKiBYWFggcmVwcmVzZW50cyB0aGUgc3RyaW5nIGxpdGVyYWwg ZGF0YWJhc2UgbmFtZSBkZXJpdmVkIGZyb20gdGhlCisJCQkgKiBkYm5hbWVfb2lkX2xpc3QsIHdo aWNoIGlzIGluaXRpYWxseSBleHRyYWN0ZWQgZnJvbSB0aGUgbWFwLmRhdAorCQkJICogZmlsZSBs b2NhdGVkIGluIHRoZSBiYWNrdXAgZGlyZWN0b3J5LiAgdGhhdCdzIHdoeSB3ZSBuZWVkCisJCQkg KiBxdW90ZV9saXRlcmFsX2NzdHIuCisJCQkgKgorCQkJICogSWYgbm8gZGIgY29ubmVjdGlvbiwg dGhlbiBjb25zaWRlciBQQVRURVJOIGFzIE5BTUUuCisJCQkgKi8KKwkJCWlmIChwZ19zdHJjYXNl Y21wKGRib2lkX2NlbGwtPmRiX25hbWUsIGNlbGxkYi0+dmFsKSA9PSAwKQorCQkJICAgc2tpcF9k Yl9yZXN0b3JlID0gdHJ1ZTsKKwkJCWVsc2UgaWYgKGNvbm4pCisJCQl7CisJCQkJaW50CWRvdGNu dDsKKworCQkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHF1ZXJ5LCAiU0VMRUNUIDEgIik7CisJCQkJ cHJvY2Vzc1NRTE5hbWVQYXR0ZXJuKGNvbm4sIHF1ZXJ5LCBjZWxsZGItPnZhbCwgZmFsc2UsCisJ CQkJCQkJCQkgIGZhbHNlLCBOVUxMLCBxdW90ZV9saXRlcmFsX2NzdHIoZGJvaWRfY2VsbC0+ZGJf bmFtZSksCisJCQkJCQkJCQkgIE5VTEwsIE5VTEwsIE5VTEwsICZkb3RjbnQpOworCisJCQkJaWYg KGRvdGNudCA+IDApCisJCQkJeworCQkJCQlwZ19sb2dfZXJyb3IoImltcHJvcGVyIHF1YWxpZmll ZCBuYW1lICh0b28gbWFueSBkb3R0ZWQgbmFtZXMpOiAlcyIsCisJCQkJCQkJCSAgY2VsbGRiLT52 YWwpOworCQkJCQlQUWZpbmlzaChjb25uKTsKKwkJCQkJZXhpdF9uaWNlbHkoMSk7CisJCQkJfQor CisJCQkJcmVzID0gZXhlY3V0ZVF1ZXJ5KGNvbm4sIHF1ZXJ5LT5kYXRhKTsKKworCQkJCWlmICgo UFFyZXN1bHRTdGF0dXMocmVzKSA9PSBQR1JFU19UVVBMRVNfT0spICYmIFBRbnR1cGxlcyhyZXMp KQorCQkJCXsKKwkJCQkJc2tpcF9kYl9yZXN0b3JlID0gdHJ1ZTsKKwkJCQkJcGdfbG9nX2luZm8o ImRhdGFiYXNlIFwiJXNcIiBpcyBtYXRjaGluZyB3aXRoIGV4Y2x1ZGUgcGF0dGVybjogXCIlc1wi IiwgZGJvaWRfY2VsbC0+ZGJfbmFtZSwgY2VsbGRiLT52YWwpOworCQkJCX0KKworCQkJCVBRY2xl YXIocmVzKTsKKwkJCQlyZXNldFBRRXhwQnVmZmVyKHF1ZXJ5KTsKKwkJCX0KKworCQkJaWYgKHNr aXBfZGJfcmVzdG9yZSkKKwkJCQlicmVhazsKKwkJfQorCisJCS8qIEluY3JlbWVudCBjb3VudCBp ZiBkYXRhYmFzZSBuZWVkcyB0byBiZSByZXN0b3JlZC4gKi8KKwkJaWYgKHNraXBfZGJfcmVzdG9y ZSkKKwkJeworCQkJcGdfbG9nX2luZm8oImV4Y2x1ZGluZyBkYXRhYmFzZSBcIiVzXCIiLCBkYm9p ZF9jZWxsLT5kYl9uYW1lKTsKKwkJCXNpbXBsZV9kYl9vaWRfbGlzdF9kZWxldGUoZGJuYW1lX29p ZF9saXN0LCBkYm9pZF9jZWxsLCBkYm9pZHByZWNlbGwpOworCQl9CisJCWVsc2UKKwkJeworCQkJ Y291bnRfZGIrKzsKKwkJCWRib2lkcHJlY2VsbCA9IGRib2lkX2NlbGw7CisJCX0KKworCQkvKiBQ cm9jZXNzIG5leHQgZGJuYW1lIGZyb20gZGJuYW1lIGxpc3QuICovCisJCWRib2lkX2NlbGwgPSBu ZXh0OworCX0KKworCXJldHVybiBjb3VudF9kYjsKK30KKworLyoKKyAqIGdldF9kYm5hbWVfb2lk X2xpc3RfZnJvbV9tZmlsZQorICoKKyAqIE9wZW4gbWFwLmRhdCBmaWxlIGFuZCByZWFkIGxpbmUg YnkgbGluZSBhbmQgdGhlbiBwcmVwYXJlIGEgbGlzdCBvZiBkYXRhYmFzZQorICogbmFtZXMgYW5k IGNvcnJlc3BvbmRpbmcgZGJfb2lkLgorICoKKyAqIFJldHVybnMsIHRvdGFsIG51bWJlciBvZiBk YXRhYmFzZSBuYW1lcyBpbiBtYXAuZGF0IGZpbGUuCisgKi8KK3N0YXRpYyBpbnQKK2dldF9kYm5h bWVfb2lkX2xpc3RfZnJvbV9tZmlsZShjb25zdCBjaGFyICpkdW1wZGlycGF0aCwgU2ltcGxlRGF0 YWJhc2VPaWRMaXN0ICpkYm5hbWVfb2lkX2xpc3QpCit7CisJRklMRSAgICAqcGZpbGU7CisJY2hh ciAgICBtYXBfZmlsZV9wYXRoW01BWFBHUEFUSF07CisJY2hhciAgICBsaW5lW01BWFBHUEFUSF07 CisJaW50ICAgICBjb3VudCA9IDA7CisKKwkvKgorCSAqIElmIHRoZXJlIGlzIG9ubHkgZ2xvYmFs LmRhdCBmaWxlIGluIGR1bXAsIHRoZW4gcmV0dXJuIGZyb20gaGVyZSBhcyB0aGVyZQorCSAqIGlz IG5vIGRhdGFiYXNlIHRvIHJlc3RvcmUuCisJICovCisJaWYgKCFJc0ZpbGVFeGlzdHNJbkRpcmVj dG9yeShwZ19zdHJkdXAoZHVtcGRpcnBhdGgpLCAibWFwLmRhdCIpKQorCXsKKwkJcGdfbG9nX2lu Zm8oImRhdGFiYXNlcyByZXN0b3JpbmcgaXMgc2tpcHBlZCBhcyBtYXAuZGF0IGZpbGUgaXMgbm90 IHByZXNlbnQgaW4gXCIlc1wiIiwgZHVtcGRpcnBhdGgpOworCQlyZXR1cm4gMDsKKwl9CisKKwlz bnByaW50ZihtYXBfZmlsZV9wYXRoLCBNQVhQR1BBVEgsICIlcy9tYXAuZGF0IiwgZHVtcGRpcnBh dGgpOworCisJLyogT3BlbiBtYXAuZGF0IGZpbGUuICovCisJcGZpbGUgPSBmb3BlbihtYXBfZmls ZV9wYXRoLCBQR19CSU5BUllfUik7CisKKwlpZiAocGZpbGUgPT0gTlVMTCkKKwkJcGdfZmF0YWwo ImNvdWxkIG5vdCBvcGVuIG1hcC5kYXQgZmlsZTogXCIlc1wiIiwgbWFwX2ZpbGVfcGF0aCk7CisK KwkvKiBBcHBlbmQgYWxsIHRoZSBkYm5hbWUgYW5kIGRiX29pZCB0byB0aGUgbGlzdC4gKi8KKwl3 aGlsZSgoZmdldHMobGluZSwgTUFYUEdQQVRILCBwZmlsZSkpICE9IE5VTEwpCisJeworCQlPaWQg ICAgICAgICBkYl9vaWQgPSBJbnZhbGlkT2lkOworCQljaGFyCQlkYl9vaWRfc3RyW01BWFBHUEFU SCArIDFdID0geydcMCd9OworCQljaGFyICAgICAgICBkYm5hbWVbTUFYUEdQQVRIICsgMV0gPSB7 J1wwJ307CisKKwkJLyogRXh0cmFjdCBkYm9pZC4gKi8KKwkJc3NjYW5mKGxpbmUsICIldSIgLCAm ZGJfb2lkKTsKKwkJc3NjYW5mKGxpbmUsICIlcyIgLCBkYl9vaWRfc3RyKTsKKworCQkvKiBOb3cg Y29weSBkYm5hbWUuICovCisJCXN0cmNweShkYm5hbWUsIGxpbmUgKyBzdHJsZW4oZGJfb2lkX3N0 cikgKyAxKTsKKworCQkvKiBSZW1vdmUgXG4gZnJvbSBkYmFubWUuICovCisJCWRibmFtZVtzdHJs ZW4oZGJuYW1lKSAtIDFdID0gJ1wwJzsKKworCQlwZ19sb2dfaW5mbygiZm91bmQgZGF0YWJhc2Ug XCIlc1wiIChPSUQ6ICV1KSBpbiBtYXAuZGF0IGZpbGUgd2hpbGUgcmVzdG9yaW5nLiIsIGRibmFt ZSwgZGJfb2lkKTsKKworCQkvKiBSZXBvcnQgZXJyb3IgYW5kIGV4aXQgaWYgdGhlIGZpbGUgaGFz IGFueSBjb3JydXB0ZWQgZGF0YS4gKi8KKwkJaWYgKCFPaWRJc1ZhbGlkKGRiX29pZCkgfHwgc3Ry bGVuKGRibmFtZSkgPT0gMCkKKwkJCXBnX2ZhdGFsKCJpbnZhbGlkIGVudHJ5IGluIG1hcC5kYXQg ZmlsZSBhdCBsaW5lIDogJWQiLCBjb3VudCArIDEpOworCisJCS8qCisJCSAqIFhYWCA6IGJlZm9y ZSBhZGRpbmcgZGJuYW1lIGludG8gbGlzdCwgd2UgY2FuIHZlcmlmeSB0aGF0IHRoaXMgZGIKKwkJ ICogbmVlZHMgdG8gc2tpcHBlZCBmb3IgcmVzdG9yZSBvciBub3QgYnV0IGFzIG9mIG5vdywgd2Ug YXJlIG1ha2luZworCQkgKiBhIGxpc3Qgb2YgYWxsIHRoZSBkYXRhYmFzZXMuCisJCSAqLworCQlz aW1wbGVfZGJfb2lkX2xpc3RfYXBwZW5kKGRibmFtZV9vaWRfbGlzdCwgZGJfb2lkLCBkYm5hbWUp OworCQljb3VudCsrOworCX0KKworCS8qIENsb3NlIG1hcC5kYXQgZmlsZS4gKi8KKwlmY2xvc2Uo cGZpbGUpOworCisJcmV0dXJuIGNvdW50OworfQorCisvKgorICogcmVzdG9yZUFsbERhdGFiYXNl cworICoKKyAqIFRoaXMgd2lsbCByZXN0b3JlIGRhdGFiYXNlcyB0aG9zZSBkdW1wcyBhcmUgcHJl c2VudCBpbgorICogZGlyZWN0b3J5IGJhc2VkIG9uIG1hcC5kYXQgZmlsZSBtYXBwaW5nLgorICoK KyAqIFRoaXMgd2lsbCBza2lwIHJlc3RvcmluZyBmb3IgZGF0YWJhc2VzIHRoYXQgYXJlIHNwZWNp ZmllZCB3aXRoCisgKiBleGNsdWRlLWRhdGFiYXNlIG9wdGlvbi4KKyAqCisgKiByZXR1cm5zLCBu dW1iZXIgb2YgZXJyb3JzIHdoaWxlIGRvaW5nIHJlc3RvcmUuCisgKi8KK3N0YXRpYyBpbnQKK3Jl c3RvcmVBbGxEYXRhYmFzZXMoUEdjb25uICpjb25uLCBjb25zdCBjaGFyICpkdW1wZGlycGF0aCwK KwkJCQkJU2ltcGxlU3RyaW5nTGlzdCBkYl9leGNsdWRlX3BhdHRlcm5zLCBSZXN0b3JlT3B0aW9u cyAqb3B0cywKKwkJCQkJaW50IG51bVdvcmtlcnMpCit7CisJU2ltcGxlRGF0YWJhc2VPaWRMaXN0 CQkJZGJuYW1lX29pZF9saXN0ID0ge05VTEwsIE5VTEx9OworCVNpbXBsZURhdGFiYXNlT2lkTGlz dENlbGwJCSpkYm9pZF9jZWxsOworCWludAkJCQkJCQkJbnVtX2RiX3Jlc3RvcmUgPSAwOworCWlu dAkJCQkJCQkJbnVtX3RvdGFsX2RiOworCWludAkJCQkJCQkJbl9lcnJvcnNfdG90YWw7CisKKwlu dW1fdG90YWxfZGIgPSBnZXRfZGJuYW1lX29pZF9saXN0X2Zyb21fbWZpbGUoZHVtcGRpcnBhdGgs ICZkYm5hbWVfb2lkX2xpc3QpOworCisJLyoKKwkgKiBJZiBtYXAuZGF0IGhhcyBubyBlbnRyeSwg cmV0dXJuIGZyb20gaGVyZSBhZnRlciBwcm9jZXNzaW5nCisJICogZ2xvYmFsLmRhdCBmaWxlLgor CSAqLworCWlmIChkYm5hbWVfb2lkX2xpc3QuaGVhZCA9PSBOVUxMKQorCQlyZXR1cm4gcHJvY2Vz c19nbG9iYWxfc3FsX2NvbW1hbmRzKGNvbm4sIGR1bXBkaXJwYXRoLCBvcHRzLT5maWxlbmFtZSk7 CisKKwlwZ19sb2dfaW5mbygiZm91bmQgdG90YWwgJWQgZGF0YWJhc2UgbmFtZXMgaW4gbWFwLmRh dCBmaWxlIiwgbnVtX3RvdGFsX2RiKTsKKworCWlmICghY29ubikKKwl7CisJCXBnX2xvZ19pbmZv KCJ0cnlpbmcgdG8gY29ubmVjdCBkYXRhYmFzZSBcInBvc3RncmVzXCIgIHRvIGR1bXAgaW50byBv dXQgZmlsZSIpOworCisJCWNvbm4gPSBjb25uZWN0RGF0YWJhc2UoInBvc3RncmVzIiwgTlVMTCwg b3B0cy0+Y3BhcmFtcy5wZ2hvc3QsCisJCQkJCQkJICAgb3B0cy0+Y3BhcmFtcy5wZ3BvcnQsIG9w dHMtPmNwYXJhbXMudXNlcm5hbWUsIFRSSV9ERUZBVUxULAorCQkJCQkJCSAgIGZhbHNlLCBwcm9n bmFtZSwgTlVMTCwgTlVMTCk7CisKKwkJLyogVHJ5IHdpdGggdGVtcGxhdGUxLiAqLworCQlpZiAo IWNvbm4pCisJCXsKKwkJCXBnX2xvZ19pbmZvKCJ0cnlpbmcgdG8gY29ubmVjdCBkYXRhYmFzZSBc InRlbXBsYXRlMVwiIGFzIGZhaWxlZCB0byBjb25uZWN0IHRvIGRhdGFiYXNlIFwicG9zdGdyZXNc IiB0byBkdW1wIGludG8gb3V0IGZpbGUiKTsKKworCQkJY29ubiA9IGNvbm5lY3REYXRhYmFzZSgi dGVtcGxhdGUxIiwgTlVMTCwgb3B0cy0+Y3BhcmFtcy5wZ2hvc3QsCisJCQkJCQkJCSAgIG9wdHMt PmNwYXJhbXMucGdwb3J0LCBvcHRzLT5jcGFyYW1zLnVzZXJuYW1lLCBUUklfREVGQVVMVCwKKwkJ CQkJCQkJICAgZmFsc2UsIHByb2duYW1lLCBOVUxMLCBOVUxMKTsKKwkJfQorCX0KKworCS8qCisJ ICogcHJvY2Vzc2luZyBwZ19yZXRzb3JlIC0tZXhjbHVkZS1kYXRhYmFzZT1QQVRURVJOL05BTUUg aWYgbm8gY29ubmVjdGlvbi4KKwkgKi8KKwludW1fZGJfcmVzdG9yZSA9IGdldF9kYm5hbWVzX2xp c3RfdG9fcmVzdG9yZShjb25uLCAmZGJuYW1lX29pZF9saXN0LAorCQkJZGJfZXhjbHVkZV9wYXR0 ZXJucyk7CisKKwkvKiBPcGVuIGdsb2JhbC5kYXQgZmlsZSBhbmQgZXhlY3V0ZS9hcHBlbmQgYWxs IHRoZSBnbG9iYWwgc3FsIGNvbW1hbmRzLiAqLworCW5fZXJyb3JzX3RvdGFsID0gcHJvY2Vzc19n bG9iYWxfc3FsX2NvbW1hbmRzKGNvbm4sIGR1bXBkaXJwYXRoLCBvcHRzLT5maWxlbmFtZSk7CisK KwkvKiBDbG9zZSB0aGUgZGIgY29ubmVjdGlvbiBhcyB3ZSBhcmUgZG9uZSB3aXRoIGdsb2JhbHMg YW5kIHBhdHRlcm5zLiAqLworCWlmIChjb25uKQorCQlQUWZpbmlzaChjb25uKTsKKworCS8qIEV4 aXQgaWYgbm8gZGIgbmVlZHMgdG8gYmUgcmVzdG9yZWQuICovCisJaWYgKGRibmFtZV9vaWRfbGlz dC5oZWFkID09IE5VTEwpCisJeworCQlwZ19sb2dfaW5mbygibm8gZGF0YWJhc2UgbmVlZHMgdG8g cmVzdG9yZSBvdXQgb2YgJWQgZGF0YWJhc2VzIiwgbnVtX3RvdGFsX2RiKTsKKwkJcmV0dXJuIG5f ZXJyb3JzX3RvdGFsOworCX0KKworCXBnX2xvZ19pbmZvKCJuZWVkcyB0byByZXN0b3JlICVkIGRh dGFiYXNlcyBvdXQgb2YgJWQgZGF0YWJhc2VzIiwgbnVtX2RiX3Jlc3RvcmUsIG51bV90b3RhbF9k Yik7CisKKwkvKgorCSAqIFRpbGwgbm93LCB3ZSBtYWRlIGEgbGlzdCBvZiBkYXRhYmFzZXMsIHRo b3NlIG5lZWRzIHRvIGJlIHJlc3RvcmVkCisJICogYWZ0ZXIgc2tpcHBpbmcgbmFtZXMgb2YgZXhj bHVkZS1kYXRhYmFzZS4gIE5vdyB3ZSBjYW4gbGF1bmNoIHBhcmFsbGVsCisJICogd29ya2VycyB0 byByZXN0b3JlIHRoZXNlIGRhdGFiYXNlcy4KKwkgKi8KKwlkYm9pZF9jZWxsID0gZGJuYW1lX29p ZF9saXN0LmhlYWQ7CisKKwl3aGlsZShkYm9pZF9jZWxsICE9IE5VTEwpCisJeworCQljaGFyCQlz dWJkaXJwYXRoW01BWFBHUEFUSF07CisJCWludAkJCW5fZXJyb3JzOworCisJCS8qCisJCSAqIFdl IG5lZWQgdG8gcmVzZXQgb3ZlcnJpZGVfZGJuYW1lIHNvIHRoYXQgb2JqZWN0cyBjYW4gYmUgcmVz dG9yZWQgaW50bworCQkgKiBhbHJlYWR5IGNyZWF0ZWQgZGF0YWJhc2UuICh1c2VkIHdpdGggLWQv LS1kYm5hbWUgb3B0aW9uKQorCQkgKi8KKwkJaWYgKG9wdHMtPmNwYXJhbXMub3ZlcnJpZGVfZGJu YW1lKQorCQl7CisJCQlwZnJlZShvcHRzLT5jcGFyYW1zLm92ZXJyaWRlX2RibmFtZSk7CisJCQlv cHRzLT5jcGFyYW1zLm92ZXJyaWRlX2RibmFtZSA9IE5VTEw7CisJCX0KKworCQlzbnByaW50Zihz dWJkaXJwYXRoLCBNQVhQR1BBVEgsICIlcy9kYXRhYmFzZXMvJXUiLCBkdW1wZGlycGF0aCwgZGJv aWRfY2VsbC0+ZGJfb2lkKTsKKworCQlwZ19sb2dfaW5mbygicmVzdG9yaW5nIGRhdGFiYXNlIFwi JXNcIiIsIGRib2lkX2NlbGwtPmRiX25hbWUpOworCisJCS8qIFJlc3RvcmUgc2luZ2xlIGRhdGFi YXNlLiAqLworCQluX2Vycm9ycyA9IHJlc3RvcmVPbmVEYXRhYmFzZShzdWJkaXJwYXRoLCBvcHRz LCBudW1Xb3JrZXJzLCB0cnVlKTsKKworCQkvKiBQcmludCBhIHN1bW1hcnkgb2YgaWdub3JlZCBl cnJvcnMgZHVyaW5nIHNpbmdsZSBkYXRhYmFzZSByZXN0b3JlLiAqLworCQlpZiAobl9lcnJvcnMp CisJCXsKKwkJCW5fZXJyb3JzX3RvdGFsICs9IG5fZXJyb3JzOworCQkJcGdfbG9nX3dhcm5pbmco ImVycm9ycyBpZ25vcmVkIG9uIGRhdGFiYXNlIFwiJXNcIiByZXN0b3JlOiAlZCIsIGRib2lkX2Nl bGwtPmRiX25hbWUsIG5fZXJyb3JzKTsKKwkJfQorCisJCWRib2lkX2NlbGwgPSBkYm9pZF9jZWxs LT5uZXh0OworCisJCS8qCisJCSAqIFdlIG5lZWQgdG8gcmVzZXQgb25fZXhpdF9uaWNlbHlfaW5k ZXggd2l0aCBlYWNoIGRhdGFiYXNlIHNvIHRoYXQgd2UgY2FuIHJlc3RvcmUKKwkJICogbXVsdGlw bGUgZGF0YWJhc2VzIGJ5IGFyY2hpdmUuICBTZWUgRVhJVF9OSUNFTFkgbWFjcm8gZm9yIG1vcmUg ZGV0YWlscy4KKwkJICovCisJCWlmIChkYm9pZF9jZWxsICE9IE5VTEwpCisJCQlyZXNldF9leGl0 X25pY2VseV9saXN0KG5fZXJyb3JzID8gMSA6IDApOworCX0KKworCS8qIExvZyBudW1iZXIgb2Yg cHJvY2Vzc2VkIGRhdGFiYXNlcy4qLworCXBnX2xvZ19pbmZvKCJudW1iZXIgb2YgcmVzdG9yZWQg ZGF0YWJhc2VzIGFyZSAlZCIsIG51bV9kYl9yZXN0b3JlKTsKKworCS8qIEZyZWUgZGJuYW1lIGFu ZCBkYm9pZCBsaXN0LiAqLworCXNpbXBsZV9kYl9vaWRfZnVsbF9saXN0X2RlbGV0ZSgmZGJuYW1l X29pZF9saXN0KTsKKworCXJldHVybiBuX2Vycm9yc190b3RhbDsKK30KKworLyoKKyAqIHByb2Nl c3NfZ2xvYmFsX3NxbF9jb21tYW5kcworICoKKyAqIFRoaXMgd2lsbCBvcGVuIGdsb2JhbC5kYXQg ZmlsZSBhbmQgd2lsbCBleGVjdXRlIGFsbCBnbG9iYWwgc3FsIGNvbW1hbmRzIG9uZQorICogYnkg b25lIHN0YXRlbWVudC4KKyAqIFNlbWljb2xvbiBpcyBjb25zaWRlcmVkIGFzIHN0YXRlbWVudCB0 ZXJtaW5hdG9yLiAgSWYgb3V0ZmlsZSBpcyBwYXNzZWQsIHRoZW4KKyAqIHRoaXMgd2lsbCBjb3B5 IGFsbCBzcWwgY29tbWFuZHMgaW50byBvdXRmaWxlIHJhdGhlciB0aGVuIGV4ZWN1dGluZyB0aGVt LgorICoKKyAqIHJldHVybnMgdGhlIG51bWJlciBvZiBlcnJvcnMgd2hpbGUgcHJvY2Vzc2luZyBn bG9iYWwuZGF0CisgKi8KK3N0YXRpYyBpbnQKK3Byb2Nlc3NfZ2xvYmFsX3NxbF9jb21tYW5kcyhQ R2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKmR1bXBkaXJwYXRoLCBjb25zdCBjaGFyICpvdXRmaWxl KQoreworCWNoYXIgICAgICAgICAgICBnbG9iYWxfZmlsZV9wYXRoW01BWFBHUEFUSF07CisJUEdy ZXN1bHQJCSpyZXN1bHQ7CisJU3RyaW5nSW5mb0RhdGEJc3Fsc3RhdGVtZW50OworCUZJTEUJCQkq cGZpbGU7CisJaW50CQkJCW5fZXJyb3JzID0gMDsKKworCXNucHJpbnRmKGdsb2JhbF9maWxlX3Bh dGgsIE1BWFBHUEFUSCwgIiVzL2dsb2JhbC5kYXQiLCBkdW1wZGlycGF0aCk7CisKKwkvKiBPcGVu IGdsb2JhbC5kYXQgZmlsZS4gKi8KKwlwZmlsZSA9IGZvcGVuKGdsb2JhbF9maWxlX3BhdGgsIFBH X0JJTkFSWV9SKTsKKworCWlmIChwZmlsZSA9PSBOVUxMKQorCQlwZ19mYXRhbCgiY291bGQgbm90 IG9wZW4gZ2xvYmFsLmRhdCBmaWxlOiBcIiVzXCIiLCBnbG9iYWxfZmlsZV9wYXRoKTsKKworCS8q CisJICogSWYgb3V0ZmlsZSBpcyBnaXZlbiwgdGhlbiBqdXN0IGNvcHkgYWxsIGdsb2JhbC5kYXQg ZmlsZSBkYXRhIGludG8KKwkgKiBvdXRmaWxlLgorCSAqLworCWlmIChvdXRmaWxlKQorCXsKKwkJ Y29weV9vcl9wcmludF9nbG9iYWxfZmlsZShvdXRmaWxlLCBwZmlsZSk7CisJCXJldHVybiAwOwor CX0KKworCS8qIEluaXQgc3Fsc3RhdGVtZW50IHRvIGFwcGVuZCBjb21tYW5kcy4gKi8KKwlpbml0 U3RyaW5nSW5mbygmc3Fsc3RhdGVtZW50KTsKKworCS8qIFByb2Nlc3MgZmlsZSB0aWxsIEVPRiBh bmQgZXhlY3V0ZSBzcWwgc3RhdGVtZW50cy4gKi8KKwl3aGlsZSAoUmVhZE9uZVN0YXRlbWVudCgm c3Fsc3RhdGVtZW50LCBwZmlsZSkgIT0gRU9GKQorCXsKKwkJcGdfbG9nX2luZm8oImV4ZWN1dGlu ZyBxdWVyeTogJXMiLCBzcWxzdGF0ZW1lbnQuZGF0YSk7CisJCXJlc3VsdCA9IFBRZXhlYyhjb25u LCBzcWxzdGF0ZW1lbnQuZGF0YSk7CisKKwkJc3dpdGNoIChQUXJlc3VsdFN0YXR1cyhyZXN1bHQp KQorCQl7CisJCQljYXNlIFBHUkVTX0NPTU1BTkRfT0s6CisJCQljYXNlIFBHUkVTX1RVUExFU19P SzoKKwkJCWNhc2UgUEdSRVNfRU1QVFlfUVVFUlk6CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0Ogor CQkJCW5fZXJyb3JzKys7CisJCQkJcGdfbG9nX2Vycm9yKCJjb3VsZCBub3QgZXhlY3V0ZSBxdWVy eTogXCIlc1wiIFxuQ29tbWFuZCB3YXM6IFwiJXNcIiIsIFBRZXJyb3JNZXNzYWdlKGNvbm4pLCBz cWxzdGF0ZW1lbnQuZGF0YSk7CisJCX0KKwkJUFFjbGVhcihyZXN1bHQpOworCX0KKworCS8qIFBy aW50IGEgc3VtbWFyeSBvZiBpZ25vcmVkIGVycm9ycyBkdXJpbmcgZ2xvYmFsLmRhdC4gKi8KKwlp ZiAobl9lcnJvcnMpCisJCXBnX2xvZ193YXJuaW5nKCJlcnJvcnMgaWdub3JlZCBvbiBnbG9iYWwu ZGF0IGZpbGUgcmVzdG9yZTogJWQiLCBuX2Vycm9ycyk7CisKKwlmY2xvc2UocGZpbGUpOworCisJ cmV0dXJuIG5fZXJyb3JzOworfQorCisvKgorICogY29weV9vcl9wcmludF9nbG9iYWxfZmlsZQor ICoKKyAqIFRoaXMgd2lsbCBjb3B5IGdsb2JhbC5kYXQgZmlsZSBpbnRvIG91dCBmaWxlLiAgSWYg Ii0iIGlzIHVzZWQgYXMgb3V0ZmlsZSwKKyAqIHRoZW4gcHJpbnQgY29tbWFuZHMgdG8gdGhlIHN0 ZG91dC4KKyAqLworc3RhdGljIHZvaWQKK2NvcHlfb3JfcHJpbnRfZ2xvYmFsX2ZpbGUoY29uc3Qg Y2hhciAqb3V0ZmlsZSwgRklMRSAqcGZpbGUpCit7CisJY2hhcglvdXRfZmlsZV9wYXRoW01BWFBH UEFUSF07CisJRklMRQkqT1BGOworCWludAkJYzsKKworCS8qICItIiBpcyB1c2VkIGZvciBzdGRv dXQuICovCisJaWYgKHN0cmNtcChvdXRmaWxlLCAiLSIpID09IDApCisJCU9QRiA9IHN0ZG91dDsK KwllbHNlCisJeworCQlzbnByaW50ZihvdXRfZmlsZV9wYXRoLCBNQVhQR1BBVEgsICIlcyIsIG91 dGZpbGUpOworCQlPUEYgPSBmb3BlbihvdXRfZmlsZV9wYXRoLCBQR19CSU5BUllfVyk7CisKKwkJ aWYgKE9QRiA9PSBOVUxMKQorCQl7CisJCQlmY2xvc2UocGZpbGUpOworCQkJcGdfZmF0YWwoImNv dWxkIG5vdCBvcGVuIGZpbGU6IFwiJXNcIiIsIG91dGZpbGUpOworCQl9CisJfQorCisJLyogQXBw ZW5kIGdsb2JhbC5kYXQgaW50byBvdXQgZmlsZSBvciBwcmludCB0byB0aGUgc3Rkb3V0LiAqLwor CXdoaWxlICgoYyA9IGZnZXRjKHBmaWxlKSkgIT0gRU9GKQorCQlmcHV0YyhjLCBPUEYpOworCisJ ZmNsb3NlKHBmaWxlKTsKKworCS8qIENsb3NlIG91dCBmaWxlLiAqLworCWlmIChzdHJjbXAob3V0 ZmlsZSwgIi0iKSAhPSAwKQorCQlmY2xvc2UoT1BGKTsKK30KKworLyoKKyAqIHNpbXBsZV9kYl9v aWRfbGlzdF9hcHBlbmQKKyAqCisgKiBhcHBlbmRzIGEgbm9kZSB0byB0aGUgbGlzdCBpbiB0aGUg ZW5kLgorICovCitzdGF0aWMgdm9pZAorc2ltcGxlX2RiX29pZF9saXN0X2FwcGVuZChTaW1wbGVE YXRhYmFzZU9pZExpc3QgKmxpc3QsIE9pZCBkYl9vaWQsCisJCWNvbnN0IGNoYXIgKmRibmFtZSkK K3sKKwlTaW1wbGVEYXRhYmFzZU9pZExpc3RDZWxsICpjZWxsOworCisJY2VsbCA9IHBnX21hbGxv Y19vYmplY3QoU2ltcGxlRGF0YWJhc2VPaWRMaXN0Q2VsbCk7CisKKwljZWxsLT5uZXh0ID0gTlVM TDsKKwljZWxsLT5kYl9vaWQgPSBkYl9vaWQ7CisJY2VsbC0+ZGJfbmFtZSA9IHBnX3N0cmR1cChk Ym5hbWUpOworCisJaWYgKGxpc3QtPnRhaWwpCisJCWxpc3QtPnRhaWwtPm5leHQgPSBjZWxsOwor CWVsc2UKKwkJbGlzdC0+aGVhZCA9IGNlbGw7CisJbGlzdC0+dGFpbCA9IGNlbGw7Cit9CisKKy8q CisgKiBzaW1wbGVfZGJfb2lkX2Z1bGxfbGlzdF9kZWxldGUKKyAqCisgKiBkZWxldGUgYWxsIGNl bGwgZnJvbSBkYm5hbWUgYW5kIGRib2lkIGxpc3QuCisgKi8KK3N0YXRpYyB2b2lkCitzaW1wbGVf ZGJfb2lkX2Z1bGxfbGlzdF9kZWxldGUoU2ltcGxlRGF0YWJhc2VPaWRMaXN0ICpsaXN0KQorewor CVNpbXBsZURhdGFiYXNlT2lkTGlzdENlbGwJKmNlbGwgPSBsaXN0LT5oZWFkOworCVNpbXBsZURh dGFiYXNlT2lkTGlzdENlbGwJKm5leHRjZWxsID0gTlVMTDsKKworCXdoaWxlIChjZWxsKQorCXsK KwkJbmV4dGNlbGwgPSBjZWxsLT5uZXh0OworCQlwZnJlZSAoY2VsbCk7CisJCWNlbGwgPSBuZXh0 Y2VsbDsKKwl9CisKKwlsaXN0LT5oZWFkID0gTlVMTDsKKwlsaXN0LT50YWlsID0gTlVMTDsKK30K KworLyoKKyAqIHNpbXBsZV9zdHJpbmdfZnVsbF9saXN0X2RlbGV0ZQorICoKKyAqIGRlbGV0ZSBh bGwgY2VsbCBmcm9tIHN0cmluZyBsaXN0LgorICovCitzdGF0aWMgdm9pZAorc2ltcGxlX3N0cmlu Z19mdWxsX2xpc3RfZGVsZXRlKFNpbXBsZVN0cmluZ0xpc3QgKmxpc3QpCit7CisJU2ltcGxlU3Ry aW5nTGlzdENlbGwJKmNlbGwgPSBsaXN0LT5oZWFkOworCVNpbXBsZVN0cmluZ0xpc3RDZWxsICAg ICpjZWxsbmV4dCA9IE5VTEw7CisKKwl3aGlsZSAoY2VsbCkKKwl7CisJCWNlbGxuZXh0ID0gY2Vs bC0+bmV4dDsKKwkJcGZyZWUoY2VsbCk7CisJCWNlbGwgPSBjZWxsbmV4dDsKKwl9CisKKwlsaXN0 LT5oZWFkID0gTlVMTDsKKwlsaXN0LT50YWlsID0gTlVMTDsKK30KKworLyoKKyAqIHNpbXBsZV9k Yl9vaWRfbGlzdF9kZWxldGUKKyAqCisgKiBkZWxldGUgY2VsbCBmcm9tIGRhdGFiYXNlIGFuZCBv aWQgbGlzdC4KKyAqLworc3RhdGljIHZvaWQKK3NpbXBsZV9kYl9vaWRfbGlzdF9kZWxldGUoU2lt cGxlRGF0YWJhc2VPaWRMaXN0ICpsaXN0LAorCQlTaW1wbGVEYXRhYmFzZU9pZExpc3RDZWxsICpj ZWxsLAorCQlTaW1wbGVEYXRhYmFzZU9pZExpc3RDZWxsICpwcmV2KQoreworCWlmIChwcmV2ID09 IE5VTEwpCisJeworCQlsaXN0LT5oZWFkID0gY2VsbC0+bmV4dDsKKwkJcGZyZWUoY2VsbCk7CisJ fQorCWVsc2UKKwl7CisJCXByZXYtPm5leHQgPSBjZWxsLT5uZXh0OworCQlwZnJlZShjZWxsKTsK Kwl9Cit9CisKKy8qCisgKiBxdW90ZV9saXRlcmFsX2ludGVybmFsCisgKi8KK3N0YXRpYyBzaXpl X3QKK3F1b3RlX2xpdGVyYWxfaW50ZXJuYWwoY2hhciAqZHN0LCBjb25zdCBjaGFyICpzcmMsIHNp emVfdCBsZW4pCit7CisJY29uc3QgY2hhciAqczsKKwljaGFyCSAgICpzYXZlZHN0ID0gZHN0Owor CisJZm9yIChzID0gc3JjOyBzIDwgc3JjICsgbGVuOyBzKyspCisJeworCQlpZiAoKnMgPT0gJ1xc JykKKwkJeworCQkJKmRzdCsrID0gRVNDQVBFX1NUUklOR19TWU5UQVg7CisJCQlicmVhazsKKwkJ fQorCX0KKworCSpkc3QrKyA9ICdcJyc7CisJd2hpbGUgKGxlbi0tID4gMCkKKwl7CisJCWlmIChT UUxfU1RSX0RPVUJMRSgqc3JjLCB0cnVlKSkKKwkJCSpkc3QrKyA9ICpzcmM7CisJCSpkc3QrKyA9 ICpzcmMrKzsKKwl9CisJKmRzdCsrID0gJ1wnJzsKKworCXJldHVybiBkc3QgLSBzYXZlZHN0Owor fQorCisvKgorICogcXVvdGVfbGl0ZXJhbF9jc3RyCisgKgorICoJICByZXR1cm5zIGEgcHJvcGVy bHkgcXVvdGVkIGxpdGVyYWwKKyAqIGNvcGllZCBmcm9tIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9x dW90ZS5jCisgKi8KK3N0YXRpYyBjaGFyICoKK3F1b3RlX2xpdGVyYWxfY3N0cihjb25zdCBjaGFy ICpyYXdzdHIpCit7CisJY2hhcgkgICAqcmVzdWx0OworCWludAkJCWxlbjsKKwlpbnQJCQluZXds ZW47CisKKwlsZW4gPSBzdHJsZW4ocmF3c3RyKTsKKworCS8qIFdlIG1ha2UgYSB3b3JzdC1jYXNl IHJlc3VsdCBhcmVhOyB3YXN0aW5nIGEgbGl0dGxlIHNwYWNlIGlzIE9LICovCisJcmVzdWx0ID0g cGdfbWFsbG9jKGxlbiAqIDIgKyAzICsgMSk7CisKKwluZXdsZW4gPSBxdW90ZV9saXRlcmFsX2lu dGVybmFsKHJlc3VsdCwgcmF3c3RyLCBsZW4pOworCXJlc3VsdFtuZXdsZW5dID0gJ1wwJzsKKwor CXJldHVybiByZXN1bHQ7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvdC8wMDFfYmFz aWMucGwgYi9zcmMvYmluL3BnX2R1bXAvdC8wMDFfYmFzaWMucGwKb2xkIG1vZGUgMTAwNjQ0Cm5l dyBtb2RlIDEwMDc1NQppbmRleCAzN2Q4OTNkNWU2YS4uMGJiY2RiZTg0YTcKLS0tIGEvc3JjL2Jp bi9wZ19kdW1wL3QvMDAxX2Jhc2ljLnBsCisrKyBiL3NyYy9iaW4vcGdfZHVtcC90LzAwMV9iYXNp Yy5wbApAQCAtMjM3LDYgKzIzNywxMSBAQCBjb21tYW5kX2ZhaWxzX2xpa2UoCiAJJ3BnX3Jlc3Rv cmU6IG9wdGlvbnMgLUNcLy0tY3JlYXRlIGFuZCAtMVwvLS1zaW5nbGUtdHJhbnNhY3Rpb24gY2Fu bm90IGJlIHVzZWQgdG9nZXRoZXInCiApOwogCitjb21tYW5kX2ZhaWxzX2xpa2UoCisJWyAncGdf cmVzdG9yZScsICctLWV4Y2x1ZGUtZGF0YWJhc2U9Zm9vJywgJy0tZ2xvYmFscy1vbmx5JywgJy1k JywgJ3h4eCcgXSwKKwlxci9cUXBnX3Jlc3RvcmU6IGVycm9yOiBvcHRpb24gLS1leGNsdWRlLWRh dGFiYXNlIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIHdpdGggLWdcLy0tZ2xvYmFscy1vbmx5XEUv LAorCSdwZ19yZXN0b3JlOiBvcHRpb24gLS1leGNsdWRlLWRhdGFiYXNlIGNhbm5vdCBiZSB1c2Vk IHRvZ2V0aGVyIHdpdGggLWcvLS1nbG9iYWxzLW9ubHknKTsKKwogIyBhbHNvIGZhaWxzIGZvciAt ciBhbmQgLXQsIGJ1dCBpdCBzZWVtcyBwb2ludGxlc3MgdG8gYWRkIG1vcmUgdGVzdHMgZm9yIHRo b3NlLgogY29tbWFuZF9mYWlsc19saWtlKAogCVsgJ3BnX2R1bXBhbGwnLCAnLS1leGNsdWRlLWRh dGFiYXNlPWZvbycsICctLWdsb2JhbHMtb25seScgXSwKQEAgLTI0NCw0ICsyNDksOCBAQCBjb21t YW5kX2ZhaWxzX2xpa2UoCiAJJ3BnX2R1bXBhbGw6IG9wdGlvbiAtLWV4Y2x1ZGUtZGF0YWJhc2Ug Y2Fubm90IGJlIHVzZWQgdG9nZXRoZXIgd2l0aCAtZy8tLWdsb2JhbHMtb25seScKICk7CiAKK2Nv bW1hbmRfZmFpbHNfbGlrZSgKKwlbICdwZ19kdW1wYWxsJywgJy0tZm9ybWF0JywgJ3gnIF0sCisJ cXIvXFFwZ19kdW1wYWxsOiBlcnJvcjogdW5yZWNvZ25pemVkIGFyY2hpdmUgZm9ybWF0ICJ4Ijtc RS8sCisJJ3BnX2R1bXBhbGw6IHVucmVjb2duaXplZCBhcmNoaXZlIGZvcm1hdCcpOwogZG9uZV90 ZXN0aW5nKCk7CmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBi L3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CmluZGV4IDk4YWI0NWFkZmEzLi4xODlm ODQxNDQxMiAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysr IGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTI2NzgsNiArMjY3OCw4IEBA IFNodXRkb3duTW9kZQogU2lnblRTVmVjdG9yCiBTaW1wbGVBY3Rpb25MaXN0CiBTaW1wbGVBY3Rp b25MaXN0Q2VsbAorU2ltcGxlRGF0YWJhc2VPaWRMaXN0CitTaW1wbGVEYXRhYmFzZU9pZExpc3RD ZWxsCiBTaW1wbGVFY29udGV4dFN0YWNrRW50cnkKIFNpbXBsZU9pZExpc3QKIFNpbXBsZU9pZExp c3RDZWxsCi0tIAoyLjM5LjMKCg== --00000000000035c1d9062e932521--