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 1tegR7-00F1IX-P2 for pgsql-hackers@arkaria.postgresql.org; Sun, 02 Feb 2025 20:19:22 +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 1tegR4-008JVT-4i for pgsql-hackers@arkaria.postgresql.org; Sun, 02 Feb 2025 20:19:18 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1tegR3-008JVL-L3 for pgsql-hackers@lists.postgresql.org; Sun, 02 Feb 2025 20:19:17 +0000 Received: from mail-qt1-x835.google.com ([2607:f8b0:4864:20::835]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1tegQz-002uuO-1w for pgsql-hackers@lists.postgresql.org; Sun, 02 Feb 2025 20:19:16 +0000 Received: by mail-qt1-x835.google.com with SMTP id d75a77b69052e-467b086e0easo16236271cf.1 for ; Sun, 02 Feb 2025 12:19:13 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1738527552; x=1739132352; 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=LdNXEFSKuZGKJLmW4DgV+icpTtH2AFHtQ2HvpUkLvnY=; b=SApl6/Yq6Z0Lo7TkyGUj/rAUC18DAJRvvlJpGkyrQx7CIrvHNc2fKs06OR2IlpQHRa EIpwx1k7lalmMB1NxbY8mrwg01Bz34M4zfgC6pZkUTJa/8l9Sblr/lMIgsdxOiLg09UY FAuCOFrbY5OPpoRBldClqaxL9PpPDwkpFzbaSDZmlUZGv1ZRilHYaPCoTBr8tWULl0FS EnFa2hiyfpk+17tjQhFCVYet35W1uWdhTamY++U4fHagcMqLptaWhnq+wLpcT+1xbgIM jaV6sISGXKLG5Jv3UQxzIgzsAqSOTG9qeI0v76LqXczipKy+4ifPezsRUvOYcRQZsnfw f8ug== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738527552; x=1739132352; 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=LdNXEFSKuZGKJLmW4DgV+icpTtH2AFHtQ2HvpUkLvnY=; b=KBsiSYmTZw74kzulYAGiBe0X4hXvRS8m7e9DxpUbTxnC8wTqrYGJOyETfXDMRLG+/5 0Oc5xysD7+cm5lowheXMH7tR37odmolol/sajVqQRI9UBcJm1sSqf+svUwrENmximkY5 405Vepx1ItD2WVToTzetCzkY0qqGKuU/AkGDQ/DKYUUYxA0r471zp8XiZw+47uapQW5L ZquHefaGgUUkc4d7yGNz1xHaqKg5b+1917WOEGZgzLNLEqHLWXxVnm7TT7L/7Gj2vg5s d9EVAy7fYmCy+gbJ9dWlsJSL7MmwbzrjGqYyGsAzd+gL4o4nHltc6l4my91Kz147ACjC OpPQ== X-Forwarded-Encrypted: i=1; AJvYcCV2NGGTCQOTn4di7t4oFq0inRmOs5dfDKhBvg3t3JzDWvNa4AWE4iQoWShKhCf0zdP+BBLAW0qyhF2ABqo4@lists.postgresql.org X-Gm-Message-State: AOJu0YzMg21KLwJmU0OmGTiV2sKpgtgEQbAe5qEk84NPrO8JZOP4m08d xANSHZ8TDxIr57P2QNevFQWgOwXfKOPaTSWPZFn/wFoNA+wt4uXueVwpWUkfU77SToyliGR4MUq o3vDCeaLBBfvKmS/L9eA7AsffCb4= X-Gm-Gg: ASbGncvceXZXkdoN8UkBQ61TQtg9FLIpODGx+G6Ev6LmQaeXOk5YedADy6S6fZUg9W6 hwrQGTZlkNRpEsy3Tw/f3DSh37NTFXq28pS31rkXoVCl1bZzUrBsXgr/VOIawW3wBlEUdgVPo8T s= X-Google-Smtp-Source: AGHT+IE12EDcZkPOu5eDrFuGKCrb6j7gJUd3ofC+vScFPwyVs8bNA9HrrHN5/ec2/55a4G4NUE8iNa5kQDFMC7HNzb8= X-Received: by 2002:a05:622a:248:b0:468:fb3c:5e75 with SMTP id d75a77b69052e-46fd0b6a0cbmr322158391cf.38.1738527552147; Sun, 02 Feb 2025 12:19:12 -0800 (PST) MIME-Version: 1.0 References: <202501110844.5ztsym4vbflm@alvherre.pgsql> In-Reply-To: From: Mahendra Singh Thalor Date: Mon, 3 Feb 2025 01:49:00 +0530 X-Gm-Features: AWEUYZmIoUOclmBfHuMDqrY0sDSFlptdES9kDmIHdVp-I6l0LCpY6mOH7z6ZaGU Message-ID: Subject: Re: Non-text mode for pg_dumpall To: jian he Cc: Srinath Reddy , pgsql-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="0000000000002ddd12062d2e7d02" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000002ddd12062d2e7d02 Content-Type: multipart/alternative; boundary="0000000000002ddd11062d2e7d00" --0000000000002ddd11062d2e7d00 Content-Type: text/plain; charset="UTF-8" Thanks Jian for review, testing and delta patches. On Wed, 29 Jan 2025 at 15:09, jian he wrote: > > hi. > > we need to escape the semicolon within the single quotes or double quotes. > I think my patch in [1] is correct. > > we can have "ERROR: role "z" already exists > but > error message like > pg_restore: error: could not execute query: "ERROR: unterminated > quoted string at or near "'; > should not be accepted in execute_global_sql_commands, ReadOneStatement, PQexec > > attached is the all the corner test case i come up with against > ReadOneStatement. > your v13 will generate errors like "ERROR: unterminated quoted string > at or near ..."', > which is not good, i think. > > [1] https://www.postgresql.org/message-id/CACJufxEQUcjBocKJQ0Amf3AfiS9wFB7zYSHrj1qqD_oWeaJoGQ%40mail.gmail.com Yes, you are right. We can't read line by line. We should read char by char and we need some extra handling for double quote names. I have merged your delta patch into this and now I am doing some more testing for corner cases of this type of names. *Ex*: add some comments in names etc or multiple semicolons or other special characters in name. On Fri, 31 Jan 2025 at 09:23, jian he wrote: > > hi. > > -extern void RestoreArchive(Archive *AHX); > +extern void RestoreArchive(Archive *AHX, bool append_data); > Can we spare some words to explain the purpose of append_data. Fixed. I added some comments on the top of the RestoreArchive function. > > in get_dbname_oid_list_from_mfile > pg_log_info("map.dat file is not present in dump of > pg_dumpall, so nothing to restore."); > maybe we can change it to > pg_log_info("databases restoring is skipped as map.dat file is > not present in \"%s\"", dumpdirpath); Fixed. > we can aslo add Assert(dumpdirpath != NULL) No, we don't need it as we are already checking inputfileSpec!= NULL. > > pg_log_info("found dbname as : \"%s\" and db_oid:%u in map.dat file > while restoring", dbname, db_oid); > also need to change. maybe > pg_log_info("found database \"%s\" (OID: %u) in map.dat file while > restoring.", dbname, db_oid); Fixed. > > I also did some minor refactoring, please check attached. Thanks. I merged it. > > > doc/src/sgml/ref/pg_restore.sgml > > pg_restore > > > restore a PostgreSQL database from an > archive file created by pg_dump > > > need to change, since now we can restore multiple databases. Agreed. I added some comments. > > doc/src/sgml/ref/pg_dumpall.sgml > > pg_dumpall > extract a PostgreSQL database > cluster into a script file > > also need change. On Sat, 1 Feb 2025 at 21:36, Srinath Reddy wrote: > > Hi, > i think we have to change the pg_dumpall "--help" message similar to pg_dump's specifying that now pg_dumpall dumps cluster into to other non-text formats. > Need similar "--help" message change in pg_restore to specify that now pg_restore supports restoring whole cluster from archive created from pg_dumpall. As Jian suggested, we need to change docs so I did the same changes into doc and --help also. On Fri, 31 Jan 2025 at 14:22, jian he wrote: > > hi. > more small issues. > > + count_db++; /* Increment db couter. */ > + dboidprecell = dboid_cell; > + } > + > typo, "couter" should be "counter". Fixed. > > + > +/* > + * get_dbname_oid_list_from_mfile > + * > + * Open map.dat file and read line by line and then prepare a list of database > + * names and correspoding db_oid. > + * > typo, "correspoding" should be "corresponding". Fixed. > > > execute_global_sql_commands comments didn't mention ``IF (outfile) `` > branch related code. > We can add some comments saying that > ""IF opts->filename is not specified, then copy the content of > global.dat to opts->filename""". We already have some comments on the top of the execute_global_sql_commands function. > > or split it into two functions. Done. I added a new function for outfile. > > > + while((fgets(line, MAXPGPATH, pfile)) != NULL) > + { > + Oid db_oid; > + char db_oid_str[MAXPGPATH + 1]; > + char dbname[MAXPGPATH + 1]; > + > + /* Extract dboid. */ > + sscanf(line, "%u" , &db_oid); > + sscanf(line, "%s" , db_oid_str); > + > + /* Now copy dbname. */ > + strcpy(dbname, line + strlen(db_oid_str) + 1); > + > + /* Remove \n from dbanme. */ > + dbname[strlen(dbname) - 1] = '\0'; > + > + pg_log_info("found dbname as : \"%s\" and db_oid:%u in map.dat file > while restoring", dbname, db_oid); > + > + /* Report error if file has any corrupted data. */ > + if (!OidIsValid(db_oid) || strlen(dbname) == 0) > + pg_fatal("invalid entry in map.dat file at line : %d", count + 1); > + > + /* > + * XXX : before adding dbname into list, we can verify that this db > + * needs to skipped for restore or not but as of now, we are making > + * a list of all the databases. > + */ > + simple_db_oid_list_append(dbname_oid_list, db_oid, dbname); > + count++; > + } > > > db_oid first should be set to 0, dbname first character first should be set to 0 > (char dbname[0] = '\0') before sscanf call. > so if sscanf fail, the db_oid and dbname value is not undermined) Okay. Fixed. Here, I am attaching an updated patch for review and testing. -- Thanks and Regards Mahendra Singh Thalor EnterpriseDB: http://www.enterprisedb.com --0000000000002ddd11062d2e7d00 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Thanks Jian for review, testing and delta=C2=A0patche= s.

On Wed, 29 Jan 2025 at 15:09, jian he <jian.universality@gmail.com> wr= ote:
>
> hi.
>
> we need to escape the semicolon wi= thin the single quotes or double quotes.
> I think my patch in [1] is= correct.
>
> we can have "ERROR: =C2=A0role "z"= already exists
> but
> error message like
> pg_restore: = error: could not execute query: "ERROR: =C2=A0unterminated
> quo= ted string at or near "';
> should not be accepted in execut= e_global_sql_commands, ReadOneStatement, PQexec
>
> attached is= the all the corner test case i come up with against
> ReadOneStateme= nt.
> your v13 will generate errors like "ERROR: =C2=A0untermina= ted quoted string
> at or near ..."',
> which is not g= ood, i think.
>
> [1] https://www.postgresql.org/message-id/CACJufxEQUcjBocKJQ0Amf3AfiS9wFB7zY= SHrj1qqD_oWeaJoGQ%40mail.gmail.com

Yes, you are=C2= =A0right. We can't read line by line. We should read char by char and w= e need some extra handling for double quote names.
I have merged = your delta patch into this and now I am doing some more testing for corner = cases of this type of names.
Ex: add some comments in name= s etc or multiple=C2=A0semicolons or other special=C2=A0characters in name.=

On Fri, 31 Jan 2025 at 09:23, jian he <jian.universality@gmail.com> wrote:
= >
> hi.
>
> -extern void RestoreArchive(Archive *AHX);=
> +extern void RestoreArchive(Archive *AHX, bool append_data);
&g= t; Can we spare some words to explain the purpose of append_data.

Fixed. I added some comments on the top of the RestoreArchi= ve function.

>
> in get_dbname_oid_list_from_mfile> =C2=A0 =C2=A0 =C2=A0 =C2=A0 pg_log_info("map.dat file is not pr= esent in dump of
> pg_dumpall, so nothing to restore.");
>= maybe we can change it to
> =C2=A0 =C2=A0 =C2=A0 =C2=A0 pg_log_info(= "databases restoring is skipped as map.dat file is
> not present= in \"%s\"", dumpdirpath);

Fixed.

> we can aslo add Assert(dumpdirpath !=3D NULL)
<= br>
No, we don't need it as we are already checking inputfile= Spec!=3D NULL.

>
> pg_log_info("found dbname as= : \"%s\" and db_oid:%u in map.dat file
> while restoring&q= uot;, dbname, db_oid);
> also need to change. maybe
> pg_log_in= fo("found database \"%s\" (OID: %u) in map.dat file while> restoring.", dbname, db_oid);

Fixed.

>
> I also did some minor refactoring, please check at= tached.

Thanks. I merged it.

>>
> doc/src/sgml/ref/pg_restore.sgml
> =C2=A0<refnamediv= >
> =C2=A0 <refname>pg_restore</refname>
>
&g= t; =C2=A0 <refpurpose>
> =C2=A0 =C2=A0restore a <productname= >PostgreSQL</productname> database from an
> =C2=A0 =C2=A0ar= chive file created by <application>pg_dump</application>
>= ; =C2=A0 </refpurpose>
> =C2=A0</refnamediv>
> need= to change, since now we can restore multiple databases.

Agreed. I added some comments.

>
> doc/src/sg= ml/ref/pg_dumpall.sgml
> =C2=A0<refnamediv>
> =C2=A0 <= refname>pg_dumpall</refname>
> =C2=A0 <refpurpose>extr= act a <productname>PostgreSQL</productname> database
> cl= uster into a script file</refpurpose>
> =C2=A0</refnamediv&g= t;
> also need change.


On Fri, 31 Jan 2025 at 14:22, jian he <jian.universality@gmail.com> wrote:
>
> = hi.
> more small issues.
>
> + count_db++; /* Increment d= b couter. */
> + dboidprecell =3D dboid_cell;
> + }
> +> typo, "couter" should be "counter".
Fixed.

>
> +
> +/*
> + * ge= t_dbname_oid_list_from_mfile
> + *
> + * Open map.dat file and = read line by line and then prepare a list of database
> + * names and= correspoding db_oid.
> + *
> typo, "correspoding" sh= ould be "corresponding".

Fixed.

>
>
> execute_global_sql_commands comments didn't = mention ``IF (outfile) ``
> branch related code.
> We can add s= ome comments saying that
> ""IF opts->filename is not sp= ecified, then copy the content of
> global.dat to opts->filename&q= uot;"".

We already have some comments on= the top of the execute_global_sql_commands function.

>> or split it into two functions.

Done. I adde= d a new function for outfile.

>
>
> + while((f= gets(line, MAXPGPATH, pfile)) !=3D NULL)
> + {
> + Oid =C2=A0 = =C2=A0 =C2=A0 =C2=A0 db_oid;
> + char db_oid_str[MAXPGPATH + 1];
&= gt; + char =C2=A0 =C2=A0 =C2=A0 =C2=A0dbname[MAXPGPATH + 1];
> +
&= gt; + /* Extract dboid. */
> + sscanf(line, "%u" , &db_= oid);
> + sscanf(line, "%s" , db_oid_str);
> +
>= ; + /* Now copy dbname. */
> + strcpy(dbname, line + strlen(db_oid_st= r) + 1);
> +
> + /* Remove \n from dbanme. */
> + dbname[= strlen(dbname) - 1] =3D '\0';
> +
> + pg_log_info("= ;found dbname as : \"%s\" and db_oid:%u in map.dat file
> w= hile restoring", dbname, db_oid);
> +
> + /* Report error = if file has any corrupted data. */
> + if (!OidIsValid(db_oid) || str= len(dbname) =3D=3D 0)
> + pg_fatal("invalid entry in map.dat fil= e at line : %d", count + 1);
> +
> + /*
> + * XXX : = before adding dbname into list, we can verify that this db
> + * need= s to skipped for restore or not but as of now, we are making
> + * a = list of all the databases.
> + */
> + simple_db_oid_list_append= (dbname_oid_list, db_oid, dbname);
> + count++;
> + }
>>
> db_oid first should be set to 0, dbname first character firs= t should be set to 0
> (char =C2=A0 =C2=A0 =C2=A0 =C2=A0dbname[0] =3D= '\0') before sscanf call.
> so if sscanf fail, the db_oid an= d dbname value is not undermined)

Okay. Fixed.
=
Here, I am attaching an updated patch for review and testing.

--
Thanks and Regards
Mahendra Singh Thalor
EnterpriseDB: http://www.enterprisedb.com
= --0000000000002ddd11062d2e7d00-- --0000000000002ddd12062d2e7d02 Content-Type: application/octet-stream; name="v14_pg_dumpall-with-non-text_format-3rd_feb.patch" Content-Disposition: attachment; filename="v14_pg_dumpall-with-non-text_format-3rd_feb.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m6o2c6mq0 RnJvbSBhZjM0NDUxZGIyNmExMTU0MzE5NmY1MjQ2NDg0OTc3NGU1YTNmZTU5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYWhlbmRyYSBTaW5naCBUaGFsb3IgPG1haGk2cnVuQGdtYWls LmNvbT4KRGF0ZTogTW9uLCAzIEZlYiAyMDI1IDAxOjI3OjI5ICswNTMwClN1YmplY3Q6IFtQQVRD SF0gcGdfZHVtcGFsbCB3aXRoIGRpcmVjdG9yeXx0YXJ8Y3VzdG9tIGZvcm1hdCBhbmQgcmVzdG9y ZSAgaXQgCiBieSBwZ19yZXN0b3JlCgpuZXcgb3B0aW9uIHRvIHBnX2R1bXBhbGw6Ci1GLCAtLWZv cm1hdD1kfHR8Y3xwICBvdXRwdXQgZmlsZSBmb3JtYXQgKCBwbGFpbiB0ZXh0IChkZWZhdWx0KSkK CkV4OjEgLi9wZ19kdW1wYWxsIC0tZm9ybWF0PWRpcmVjdG9yeSAtLWZpbGU9ZHVtcERpck5hbWUK RXg6MiAuL3BnX2R1bXBhbGwgLS1mb3JtYXQ9dGFyIC0tZmlsZT1kdW1wRGlyTmFtZQpFeDozIC4v cGdfZHVtcGFsbCAtLWZvcm1hdD1jdXN0b20gLS1maWxlPWR1bXBEaXJOYW1lCkV4OjQgLi9wZ19k dW1wYWxsIC0tZm9ybWF0PXBsYWluIC0tZmlsZT1kdW1wRGlyTmFtZQoKZHVtcHMgYXJlIGFzOgpn bG9iYWwuZGF0IDo6OiBnbG9iYWwgc3FsIGNvbW1hbmRzIGluIHNpbXBsZSBwbGFpbiBmb3JtYXQK bWFwLmRhdC4gICA6OjogZGJvaWQgZGJuYW1lIC0tLWVudHJpZXMgZm9yIGFsbCBkYXRhYmFzZXMg aW4gc2ltcGxlIHRleHQgZm9ybQpkYXRhYmFzZXMuIDo6OgogICAgICBzdWJkaXIgICAgIGRib2lk MSAgLT4gdG9jLmRhdCBhbmQgZGF0YSBmaWxlcyBpbiBhcmNoaXZlIGZvcm1hdAogICAgICBzdWJk aXIgICAgIGRib2lkMi4gLT4gdG9jLmRhdCBhbmQgZGF0YSBmaWxlcyBpbiBhcmNoaXZlIGZvcm1h dAogICAgICAgICAgICAgIGV0YwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KTk9URToKaWYgbmVlZGVkLCBy ZXN0b3JlIHNpbmdsZSBkYiBieSBwYXJ0aWN1bGFyIHN1YmRpcgoKRXg6IC4vcGdfcmVzdG9yZSAt LWZvcm1hdD1kaXJlY3RvcnkgLWQgcG9zdGdyZXMgZHVtcERpck5hbWUvZGF0YWJhc2VzLzUKICAg LS0gaGVyZSwgNSBpcyB0aGUgZGJvaWQgb2YgcG9zdGdyZXMgZGIKICAgLS0gdG8gZ2V0IGRib2lk LCByZWZlciBkYm5hbWUgaW4gbWFwLmZpbGUKCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCm5ldyBvcHRpb25z IHRvIHBnX3Jlc3RvcmU6Ci1nLCAtLWdsb2JhbHMtb25seSAgICAgICAgICAgcmVzdG9yZSBvbmx5 IGdsb2JhbCBvYmplY3RzLCBubyBkYXRhYmFzZXMKLS1leGNsdWRlLWRhdGFiYXNlPVBBVFRFUk4g ICBleGNsdWRlIGRhdGFiYXNlIHdob3NlIG5hbWUgbWF0Y2hlcyBwYXR0ZXJuCgpXaGVuIHdlIGdp dmUgLWcvLS1nbG9iYWxzLW9ubHkgb3B0aW9uLCB0aGVuIG9ubHkgcmVzdG9yZSBnbG9iYWxzLCBu byBkYiByZXN0b3JpbmcuCgpEZXNpZ246CldoZW4gLS1mb3JtYXQ9ZHx0fGMgaXMgc3BlY2lmaWVk IGFuZCB0aGVyZSBpcyBubyB0b2MuZGF0IGluIG1haW4gZGlyZWN0b3J5LCB0aGVuIGNoZWNrCmZv ciBnbG9iYWwuZGF0IHRvIHJlc3RvcmUgYWxsIGRhdGFiYXNlcy4gSWYgZ2xvYmFsLmRhdCBmaWxl IGlzIGV4aXN0IGluIGRpcmVjdG9yeSwKdGhlbiBmaXJzdCByZXN0b3JlIGFsbCBnbG9iYWxzIGZy b20gZ2xvYmFsLmRhdCBhbmQgdGhlbiByZXN0b3JlIGFsbCBkYXRhYmFzZXMgb25lIGJ5IG9uZQpm cm9tIG1hcC5kYXQgbGlzdCAoaWYgZXhpc3QpCgpUT0RPMTogV2UgbmVlZCB0byB0aGluayBmb3Ig LS1leGNsdWRlLWRhdGFiYXNlPVBBVFRFUk4gZm9yIHBnX3Jlc3RvcmUuCmFzIG9mIG5vdywgU0VM RUNUIDEgV0hFUkUgWFhYIE9QRVJBVE9SKHBnX2NhdGFsb2cufikgJ14oUEFUVEVSTikkJyBDT0xM QVRFIHBnX2NhdGFsb2cuZGVmYXVsdAppZiBkYiBjb25uZWN0aW9uLAppZiBubyBkYiBjb25uZWN0 aW9uLCB0aGVuIFBBVFRFUk49TkFNRSBtYXRjaGluZyBvbmx5CgpUT0RPMjogV2UgbmVlZCB0byBt YWtlIGNoYW5nZXMgZm9yIGV4aXRfbmljZWx5IGFzIHdlIGFyZSBvbmUgZW50cnkgZm9yIGVhY2gg ZGF0YWJhc2Ugd2hpbGUKcmVzdG9yaW5nLiBNQVhfT05fRVhJVF9OSUNFTFkKClRPRE8zOiBzb21l IG1vcmUgdGVzdCBjYXNlcyBmb3IgbmV3IGFkZGVkIG9wdGlvbnMuCgpUT0RPNDogV2UgY2FuIGR1 bXAgYW5kIHJlc3RvcmUgZGF0YWJhc2VzIGluIHBhcmFsbGVsIG1vZGUuClRoaXMgbmVlZHMgbW9y ZSBzdHVkeQoKdGhyZWFkOgpodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9tZXNzYWdlLWlkL2Zs YXQvQ0FLWXROQXA5dk90eWRYTDNfcG5HSiUyQlRldFp0TiUzREZZU25aU01DcVhjZVUzbWtIUHhQ ZyU0MG1haWwuZ21haWwuY29tIzA2NjQzM2NiNWFlMDA3Y2JlMzVmZWZkZGY3OTZkNTJmCi0tLQog ZG9jL3NyYy9zZ21sL3JlZi9wZ19kdW1wYWxsLnNnbWwgICAgICAgICB8ICA4MCArKy0KIGRvYy9z cmMvc2dtbC9yZWYvcGdfcmVzdG9yZS5zZ21sICAgICAgICAgfCAgMzEgKwogc3JjL2Jpbi9wZ19k dW1wL01ha2VmaWxlICAgICAgICAgICAgICAgICB8ICAgOCArLQogc3JjL2Jpbi9wZ19kdW1wL2Nv bW1vbl9kdW1wYWxsX3Jlc3RvcmUuYyB8IDI4NiArKysrKysrKysKIHNyYy9iaW4vcGdfZHVtcC9j b21tb25fZHVtcGFsbF9yZXN0b3JlLmggfCAgMjYgKwogc3JjL2Jpbi9wZ19kdW1wL21lc29uLmJ1 aWxkICAgICAgICAgICAgICB8ICAgMiArCiBzcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwLmggICAg ICAgICAgICAgIHwgICA0ICstCiBzcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMg ICAgIHwgIDIyICstCiBzcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX3Rhci5jICAgICAgICAgIHwg ICAyICstCiBzcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX3V0aWxzLmMgICAgICAgIHwgICAzICst CiBzcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jICAgICAgICAgICAgICAgIHwgICAyICstCiBzcmMv YmluL3BnX2R1bXAvcGdfZHVtcGFsbC5jICAgICAgICAgICAgIHwgNTUyICsrKysrKysrLS0tLS0t LS0KIHNyYy9iaW4vcGdfZHVtcC9wZ19yZXN0b3JlLmMgICAgICAgICAgICAgfCA3NzMgKysrKysr KysrKysrKysrKysrKysrKy0KIHNyYy9iaW4vcGdfZHVtcC90LzAwMV9iYXNpYy5wbCAgICAgICAg ICAgfCAgIDkgKwogc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgICAgICAgICB8ICAg MiArCiAxNSBmaWxlcyBjaGFuZ2VkLCAxNDc2IGluc2VydGlvbnMoKyksIDMyNiBkZWxldGlvbnMo LSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmluL3BnX2R1bXAvY29tbW9uX2R1bXBhbGxfcmVz dG9yZS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2Jpbi9wZ19kdW1wL2NvbW1vbl9kdW1wYWxs X3Jlc3RvcmUuaAogbW9kZSBjaGFuZ2UgMTAwNjQ0ID0+IDEwMDc1NSBzcmMvYmluL3BnX2R1bXAv dC8wMDFfYmFzaWMucGwKCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvcmVmL3BnX2R1bXBhbGwu c2dtbCBiL2RvYy9zcmMvc2dtbC9yZWYvcGdfZHVtcGFsbC5zZ21sCmluZGV4IDM5ZDkzYzJjMGUz Li42ZTE5NzVmNWZmMCAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3JlZi9wZ19kdW1wYWxsLnNn bWwKKysrIGIvZG9jL3NyYy9zZ21sL3JlZi9wZ19kdW1wYWxsLnNnbWwKQEAgLTE2LDcgKzE2LDcg QEAgUG9zdGdyZVNRTCBkb2N1bWVudGF0aW9uCiAKICA8cmVmbmFtZWRpdj4KICAgPHJlZm5hbWU+ cGdfZHVtcGFsbDwvcmVmbmFtZT4KLSAgPHJlZnB1cnBvc2U+ZXh0cmFjdCBhIDxwcm9kdWN0bmFt ZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFtZT4gZGF0YWJhc2UgY2x1c3RlciBpbnRvIGEgc2NyaXB0 IGZpbGU8L3JlZnB1cnBvc2U+CisgIDxyZWZwdXJwb3NlPmV4dHJhY3QgYSA8cHJvZHVjdG5hbWU+ UG9zdGdyZVNRTDwvcHJvZHVjdG5hbWU+IGRhdGFiYXNlIGNsdXN0ZXIgYmFzZWQgb24gc3BlY2lm aWVkIGR1bXAgZm9ybWF0IDwvcmVmcHVycG9zZT4KICA8L3JlZm5hbWVkaXY+CiAKICA8cmVmc3lu b3BzaXNkaXY+CkBAIC0xMjEsNyArMTIxLDgzIEBAIFBvc3RncmVTUUwgZG9jdW1lbnRhdGlvbgog ICAgICAgIDxwYXJhPgogICAgICAgICBTZW5kIG91dHB1dCB0byB0aGUgc3BlY2lmaWVkIGZpbGUu ICBJZiB0aGlzIGlzIG9taXR0ZWQsIHRoZQogICAgICAgICBzdGFuZGFyZCBvdXRwdXQgaXMgdXNl ZC4KLSAgICAgICA8L3BhcmE+CisgICAgICAgIE5vdGU6IFRoaXMgb3B0aW9uIGNhbiBiZSBvbWl0 dGVkIG9ubHkgd2hlbiA8b3B0aW9uPi0tZm9ybWF0PC9vcHRpb24+IGlzIHBsYWluCisgICAgICAg PC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAg PHZhcmxpc3RlbnRyeT4KKyAgICAgIDx0ZXJtPjxvcHRpb24+LUYgPHJlcGxhY2VhYmxlIGNsYXNz PSJwYXJhbWV0ZXIiPmZvcm1hdDwvcmVwbGFjZWFibGU+PC9vcHRpb24+PC90ZXJtPgorICAgICAg PHRlcm0+PG9wdGlvbj4tLWZvcm1hdD08cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+Zm9y bWF0PC9yZXBsYWNlYWJsZT48L29wdGlvbj48L3Rlcm0+CisgICAgICA8bGlzdGl0ZW0+CisgICAg ICAgPHBhcmE+CisgICAgICAgIFNwZWNpZnkgZm9ybWF0IG9mIGR1bXAgZmlsZXMuICBJZiB3ZSB3 YW50IHRvIGR1bXAgYWxsIHRoZSBkYXRhYmFzZXMsCisgICAgICAgIHRoZW4gcGFzcyB0aGlzIGFz IG5vbi1wbGFpbiBzbyB0aGF0IGR1bXAgb2YgYWxsIGRhdGFiYXNlcyBjYW4gYmUgdGFrZW4KKyAg ICAgICAgaW4gc2VwYXJhdGUgc3ViZGlyZWN0b3J5IGluIGFyY2hpdmUgZm9ybWF0LgorICAgICAg ICBieSBkZWZhdWx0LCB0aGlzIGlzIHBsYWluIGZvcm1hdC4KKworICAgICAgICBJZiBub24tcGxh aW4gbW9kZSBpcyBwYXNzZWQsIHRoZW4gZ2xvYmFsLmRhdCAoZ2xvYmFsIHNxbCBjb21tYW5kcykg YW5kCisgICAgICAgIG1hcC5kYXQoZGJvaWQgYW5kIGRibmFtZXMgbGlzdCBvZiBhbGwgdGhlIGRh dGFiYXNlcykgZmlsZXMgd2lsbCBiZSBjcmVhdGVkLgorICAgICAgICBBcGFydCBmcm9tIHRoZXNl IGZpbGVzLCBvbmUgc3ViZGlyZWN0b3J5IHdpdGggZGF0YWJhc2VzIG5hbWUgd2lsbCBiZSBjcmVh dGVkLgorICAgICAgICBVbmRlciB0aGlzIGRhdGFiYXNlcyBzdWJkaXJlY3RvcnksIHRoZXJlIHdp bGwgYmUgZmlsZXMgd2l0aCBkYm9pZCBuYW1lIGZvciBlYWNoCisgICAgICAgIGRhdGFiYXNlIGFu ZCBpZiA8b3B0aW9uPi0tZm9ybWF0PC9vcHRpb24+IGlzIGRpcmVjdG9yeSwgdGhlbiB0b2MuZGF0 IGFuZCBvdGhlcgorICAgICAgICBkdW1wIGZpbGVzIHdpbGwgYmUgdW5kZXIgZGJvaWQgc3ViZGly ZWN0b3J5LgorCisgICAgICAgPHZhcmlhYmxlbGlzdD4KKyAgICAgICAgPHZhcmxpc3RlbnRyeT4K KyAgICAgICAgIDx0ZXJtPjxsaXRlcmFsPmQ8L2xpdGVyYWw+PC90ZXJtPgorICAgICAgICAgPHRl cm0+PGxpdGVyYWw+ZGlyZWN0b3J5PC9saXRlcmFsPjwvdGVybT4KKyAgICAgICAgIDxsaXN0aXRl bT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgT3V0cHV0IGEgZGlyZWN0b3J5LWZvcm1h dCBhcmNoaXZlIHN1aXRhYmxlIGZvciBpbnB1dCBpbnRvIHBnX3Jlc3RvcmUuIFVuZGVyIGRib2lk CisgICAgICAgICAgIHN1YmRpcmVjdG9yeSwgdGhpcyB3aWxsIGNyZWF0ZSBhIGRpcmVjdG9yeSB3 aXRoIG9uZSBmaWxlIGZvciBlYWNoIHRhYmxlIGFuZCBsYXJnZQorICAgICAgICAgICBvYmplY3Qg YmVpbmcgZHVtcGVkLCBwbHVzIGEgc28tY2FsbGVkIFRhYmxlIG9mIENvbnRlbnRzIGZpbGUgZGVz Y3JpYmluZyB0aGUgZHVtcGVkCisgICAgICAgICAgIG9iamVjdHMgaW4gYSBtYWNoaW5lLXJlYWRh YmxlIGZvcm1hdCB0aGF0IHBnX3Jlc3RvcmUgY2FuIHJlYWQuIEEgZGlyZWN0b3J5IGZvcm1hdAor ICAgICAgICAgICBhcmNoaXZlIGNhbiBiZSBtYW5pcHVsYXRlZCB3aXRoIHN0YW5kYXJkIFVuaXgg dG9vbHM7IGZvciBleGFtcGxlLCBmaWxlcyBpbiBhbgorICAgICAgICAgICB1bmNvbXByZXNzZWQg YXJjaGl2ZSBjYW4gYmUgY29tcHJlc3NlZCB3aXRoIHRoZSBnemlwLCBsejQsIG9yIHpzdGQgdG9v bHMuIFRoaXMKKyAgICAgICAgICAgZm9ybWF0IGlzIGNvbXByZXNzZWQgYnkgZGVmYXVsdCB1c2lu ZyBnemlwIGFuZCBhbHNvIHN1cHBvcnRzIHBhcmFsbGVsIGR1bXBzLgorICAgICAgICAgIDwvcGFy YT4KKyAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvdmFybGlzdGVudHJ5PgorCisgICAg ICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICA8dGVybT48bGl0ZXJhbD5wPC9saXRlcmFsPjwv dGVybT4KKyAgICAgICAgIDx0ZXJtPjxsaXRlcmFsPnBsYWluPC9saXRlcmFsPjwvdGVybT4KKyAg ICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgT3V0cHV0IGEg cGxhaW4tdGV4dCBTUUwgc2NyaXB0IGZpbGUgKHRoZSBkZWZhdWx0KS4KKyAgICAgICAgICA8L3Bh cmE+CisgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAg ICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgPHRlcm0+PGxpdGVyYWw+YzwvbGl0ZXJhbD48 L3Rlcm0+CisgICAgICAgICA8dGVybT48bGl0ZXJhbD5jdXN0b208L2xpdGVyYWw+PC90ZXJtPgor ICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICBPdXRwdXQg YSBjdXN0b20tZm9ybWF0IGFyY2hpdmUgc3VpdGFibGUgZm9yIGlucHV0IGludG8gcGdfcmVzdG9y ZS4gVG9nZXRoZXIgd2l0aCB0aGUKKyAgICAgICAgICAgZGlyZWN0b3J5IG91dHB1dCBmb3JtYXQs IHRoaXMgaXMgdGhlIG1vc3QgZmxleGlibGUgb3V0cHV0IGZvcm1hdCBpbiB0aGF0IGl0IGFsbG93 cyBtYW51YWwKKyAgICAgICAgICAgc2VsZWN0aW9uIGFuZCByZW9yZGVyaW5nIG9mIGFyY2hpdmVk IGl0ZW1zIGR1cmluZyByZXN0b3JlLiBUaGlzIGZvcm1hdCBpcyBhbHNvCisgICAgICAgICAgIGNv bXByZXNzZWQgYnkgZGVmYXVsdC4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgICA8L2xpc3Rp dGVtPgorICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgICAgICAgPHZhcmxpc3RlbnRyeT4K KyAgICAgICAgIDx0ZXJtPjxsaXRlcmFsPnQ8L2xpdGVyYWw+PC90ZXJtPgorICAgICAgICAgPHRl cm0+PGxpdGVyYWw+dGFyPC9saXRlcmFsPjwvdGVybT4KKyAgICAgICAgIDxsaXN0aXRlbT4KKyAg ICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgT3V0cHV0IGEgdGFyLWZvcm1hdCBhcmNoaXZlIHN1 aXRhYmxlIGZvciBpbnB1dCBpbnRvIHBnX3Jlc3RvcmUuIFRoZSB0YXIgZm9ybWF0IGlzCisgICAg ICAgICAgIGNvbXBhdGlibGUgd2l0aCB0aGUgZGlyZWN0b3J5IGZvcm1hdDogZXh0cmFjdGluZyBh IHRhci1mb3JtYXQgYXJjaGl2ZSBwcm9kdWNlcyBhIHZhbGlkCisgICAgICAgICAgIGRpcmVjdG9y eS1mb3JtYXQgYXJjaGl2ZS4gSG93ZXZlciwgdGhlIHRhciBmb3JtYXQgZG9lcyBub3Qgc3VwcG9y dCBjb21wcmVzc2lvbi4gQWxzbywKKyAgICAgICAgICAgd2hlbiB1c2luZyB0YXIgZm9ybWF0IHRo ZSByZWxhdGl2ZSBvcmRlciBvZiB0YWJsZSBkYXRhIGl0ZW1zIGNhbm5vdCBiZSBjaGFuZ2VkIGR1 cmluZyByZXN0b3JlLgorICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgIDwvbGlzdGl0ZW0+Cisg ICAgICAgIDwvdmFybGlzdGVudHJ5PgorCisgICAgICAgIDwvdmFyaWFibGVsaXN0PgorICAgICAg ICA8L3BhcmE+CiAgICAgICA8L2xpc3RpdGVtPgogICAgICA8L3Zhcmxpc3RlbnRyeT4KIApkaWZm IC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3JlZi9wZ19yZXN0b3JlLnNnbWwgYi9kb2Mvc3JjL3NnbWwv cmVmL3BnX3Jlc3RvcmUuc2dtbAppbmRleCBiOGIyN2UxNzE5ZS4uMDYwOWI3ZWI1MzQgMTAwNjQ0 Ci0tLSBhL2RvYy9zcmMvc2dtbC9yZWYvcGdfcmVzdG9yZS5zZ21sCisrKyBiL2RvYy9zcmMvc2dt bC9yZWYvcGdfcmVzdG9yZS5zZ21sCkBAIC0yMCw2ICsyMCw4IEBAIFBvc3RncmVTUUwgZG9jdW1l bnRhdGlvbgogICA8cmVmcHVycG9zZT4KICAgIHJlc3RvcmUgYSA8cHJvZHVjdG5hbWU+UG9zdGdy ZVNRTDwvcHJvZHVjdG5hbWU+IGRhdGFiYXNlIGZyb20gYW4KICAgIGFyY2hpdmUgZmlsZSBjcmVh dGVkIGJ5IDxhcHBsaWNhdGlvbj5wZ19kdW1wPC9hcHBsaWNhdGlvbj4KKyAgIG9yIHJlc3RvcmUg bXVsdGlwbGUgPHByb2R1Y3RuYW1lPlBvc3RncmVTUUw8L3Byb2R1Y3RuYW1lPiBkYXRhYmFzZSBm cm9tIGFuCisgICBhcmNoaXZlIGRpcmVjdG9yeSBpcyBjcmVhdGVkIGJ5IDxhcHBsaWNhdGlvbj5w Z19kdW1wYWxsPC9hcHBsaWNhdGlvbj4KICAgPC9yZWZwdXJwb3NlPgogIDwvcmVmbmFtZWRpdj4K IApAQCAtMTY2LDYgKzE2OCwyNSBAQCBQb3N0Z3JlU1FMIGRvY3VtZW50YXRpb24KICAgICAgIDwv bGlzdGl0ZW0+CiAgICAgIDwvdmFybGlzdGVudHJ5PgogCisgICAgIDx2YXJsaXN0ZW50cnk+Cisg ICAgICA8dGVybT48b3B0aW9uPi0tZXhjbHVkZS1kYXRhYmFzZT08cmVwbGFjZWFibGUgY2xhc3M9 InBhcmFtZXRlciI+cGF0dGVybjwvcmVwbGFjZWFibGU+PC9vcHRpb24+PC90ZXJtPgorICAgICAg PGxpc3RpdGVtPgorICAgICAgIDxwYXJhPgorICAgICAgICBEbyBub3QgcmVzdG9yZSBkYXRhYmFz ZXMgd2hvc2UgbmFtZSBtYXRjaGVzCisgICAgICAgIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1l dGVyIj5wYXR0ZXJuPC9yZXBsYWNlYWJsZT4uCisgICAgICAgIE11bHRpcGxlIHBhdHRlcm5zIGNh biBiZSBleGNsdWRlZCBieSB3cml0aW5nIG11bHRpcGxlCisgICAgICAgIDxvcHRpb24+LS1leGNs dWRlLWRhdGFiYXNlPC9vcHRpb24+IHN3aXRjaGVzLiAgVGhlCisgICAgICAgIDxyZXBsYWNlYWJs ZSBjbGFzcz0icGFyYW1ldGVyIj5wYXR0ZXJuPC9yZXBsYWNlYWJsZT4gcGFyYW1ldGVyIGlzCisg ICAgICAgIGludGVycHJldGVkIGFzIGEgcGF0dGVybiBhY2NvcmRpbmcgdG8gdGhlIHNhbWUgcnVs ZXMgdXNlZCBieQorICAgICAgICA8YXBwbGljYXRpb24+cHNxbDwvYXBwbGljYXRpb24+J3MgPGxp dGVyYWw+XGQ8L2xpdGVyYWw+CisgICAgICAgIGNvbW1hbmRzIChzZWUgPHhyZWYgbGlua2VuZD0i YXBwLXBzcWwtcGF0dGVybnMiLz4pLAorICAgICAgICBzbyBtdWx0aXBsZSBkYXRhYmFzZXMgY2Fu IGFsc28gYmUgZXhjbHVkZWQgYnkgd3JpdGluZyB3aWxkY2FyZAorICAgICAgICBjaGFyYWN0ZXJz IGluIHRoZSBwYXR0ZXJuLiAgV2hlbiB1c2luZyB3aWxkY2FyZHMsIGJlIGNhcmVmdWwgdG8KKyAg ICAgICAgcXVvdGUgdGhlIHBhdHRlcm4gaWYgbmVlZGVkIHRvIHByZXZlbnQgc2hlbGwgd2lsZGNh cmQgZXhwYW5zaW9uLgorICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgIDwv dmFybGlzdGVudHJ5PgorCiAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICA8dGVybT48b3B0aW9u Pi1lPC9vcHRpb24+PC90ZXJtPgogICAgICAgPHRlcm0+PG9wdGlvbj4tLWV4aXQtb24tZXJyb3I8 L29wdGlvbj48L3Rlcm0+CkBAIC0zMTUsNiArMzM2LDE2IEBAIFBvc3RncmVTUUwgZG9jdW1lbnRh dGlvbgogICAgICAgPC9saXN0aXRlbT4KICAgICAgPC92YXJsaXN0ZW50cnk+CiAKKyAgICAgPHZh cmxpc3RlbnRyeT4KKyAgICAgIDx0ZXJtPjxvcHRpb24+LWc8L29wdGlvbj48L3Rlcm0+CisgICAg ICA8dGVybT48b3B0aW9uPi0tZ2xvYmFscy1vbmx5PC9vcHRpb24+PC90ZXJtPgorICAgICAgPGxp c3RpdGVtPgorICAgICAgIDxwYXJhPgorICAgICAgICBSZXN0b3JlIG9ubHkgZ2xvYmFsIG9iamVj dHMgKHJvbGVzIGFuZCB0YWJsZXNwYWNlcyksIG5vIGRhdGFiYXNlcy4KKyAgICAgICA8L3BhcmE+ CisgICAgICA8L2xpc3RpdGVtPgorICAgICA8L3Zhcmxpc3RlbnRyeT4KKwogICAgICA8dmFybGlz dGVudHJ5PgogICAgICAgPHRlcm0+PG9wdGlvbj4tSSA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFt ZXRlciI+aW5kZXg8L3JlcGxhY2VhYmxlPjwvb3B0aW9uPjwvdGVybT4KICAgICAgIDx0ZXJtPjxv cHRpb24+LS1pbmRleD08cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+aW5kZXg8L3JlcGxh Y2VhYmxlPjwvb3B0aW9uPjwvdGVybT4KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9NYWtl ZmlsZSBiL3NyYy9iaW4vcGdfZHVtcC9NYWtlZmlsZQppbmRleCAyMzNhZDE1Y2E3NS4uYTRlNTU3 ZDYyYzcgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9NYWtlZmlsZQorKysgYi9zcmMvYmlu L3BnX2R1bXAvTWFrZWZpbGUKQEAgLTQ3LDExICs0NywxMSBAQCBhbGw6IHBnX2R1bXAgcGdfcmVz dG9yZSBwZ19kdW1wYWxsCiBwZ19kdW1wOiBwZ19kdW1wLm8gY29tbW9uLm8gcGdfZHVtcF9zb3J0 Lm8gJChPQkpTKSB8IHN1Ym1ha2UtbGlicHEgc3VibWFrZS1saWJwZ3BvcnQgc3VibWFrZS1saWJw Z2ZldXRpbHMKIAkkKENDKSAkKENGTEFHUykgcGdfZHVtcC5vIGNvbW1vbi5vIHBnX2R1bXBfc29y dC5vICQoT0JKUykgJChMREZMQUdTKSAkKExERkxBR1NfRVgpICQoTElCUykgLW8gJEAkKFgpCiAK LXBnX3Jlc3RvcmU6IHBnX3Jlc3RvcmUubyAkKE9CSlMpIHwgc3VibWFrZS1saWJwcSBzdWJtYWtl LWxpYnBncG9ydCBzdWJtYWtlLWxpYnBnZmV1dGlscwotCSQoQ0MpICQoQ0ZMQUdTKSBwZ19yZXN0 b3JlLm8gJChPQkpTKSAkKExERkxBR1MpICQoTERGTEFHU19FWCkgJChMSUJTKSAtbyAkQCQoWCkK K3BnX3Jlc3RvcmU6IHBnX3Jlc3RvcmUubyBjb21tb25fZHVtcGFsbF9yZXN0b3JlLm8gJChPQkpT KSB8IHN1Ym1ha2UtbGlicHEgc3VibWFrZS1saWJwZ3BvcnQgc3VibWFrZS1saWJwZ2ZldXRpbHMK KwkkKENDKSAkKENGTEFHUykgcGdfcmVzdG9yZS5vIGNvbW1vbl9kdW1wYWxsX3Jlc3RvcmUubyAk KE9CSlMpICQoTERGTEFHUykgJChMREZMQUdTX0VYKSAkKExJQlMpIC1vICRAJChYKQogCi1wZ19k dW1wYWxsOiBwZ19kdW1wYWxsLm8gZHVtcHV0aWxzLm8gZmlsdGVyLm8gJChXSU4zMlJFUykgfCBz dWJtYWtlLWxpYnBxIHN1Ym1ha2UtbGlicGdwb3J0IHN1Ym1ha2UtbGlicGdmZXV0aWxzCi0JJChD QykgJChDRkxBR1MpIHBnX2R1bXBhbGwubyBkdW1wdXRpbHMubyBmaWx0ZXIubyAkKFdJTjMyUkVT KSAkKExERkxBR1MpICQoTERGTEFHU19FWCkgJChMSUJTKSAtbyAkQCQoWCkKK3BnX2R1bXBhbGw6 IHBnX2R1bXBhbGwubyBkdW1wdXRpbHMubyBmaWx0ZXIubyBjb21tb25fZHVtcGFsbF9yZXN0b3Jl Lm8gJChXSU4zMlJFUykgfCBzdWJtYWtlLWxpYnBxIHN1Ym1ha2UtbGlicGdwb3J0IHN1Ym1ha2Ut bGlicGdmZXV0aWxzCisJJChDQykgJChDRkxBR1MpIHBnX2R1bXBhbGwubyBkdW1wdXRpbHMubyBm aWx0ZXIubyBjb21tb25fZHVtcGFsbF9yZXN0b3JlLm8gJChXSU4zMlJFUykgJChMREZMQUdTKSAk KExERkxBR1NfRVgpICQoTElCUykgLW8gJEAkKFgpCiAKIGluc3RhbGw6IGFsbCBpbnN0YWxsZGly cwogCSQoSU5TVEFMTF9QUk9HUkFNKSBwZ19kdW1wJChYKSAnJChERVNURElSKSQoYmluZGlyKScv cGdfZHVtcCQoWCkKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9jb21tb25fZHVtcGFsbF9y ZXN0b3JlLmMgYi9zcmMvYmluL3BnX2R1bXAvY29tbW9uX2R1bXBhbGxfcmVzdG9yZS5jCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5iMTYyY2Y2OTQxMgotLS0gL2Rldi9u dWxsCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9jb21tb25fZHVtcGFsbF9yZXN0b3JlLmMKQEAgLTAs MCArMSwyODYgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGNvbW1vbl9kdW1wYWxsX3Jl c3RvcmUuYworICoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDI1LCBQb3N0Z3Jl U1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAx OTk0LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKKyAqCisgKiBUaGlz IGlzIGEgY29tbW9uIGZpbGUgZm9yIHBnX2R1bXBhbGwgYW5kIHBnX3Jlc3RvcmUuCisgKiBzcmMv YmluL3BnX2R1bXAvY29tbW9uX2R1bXBhbGxfcmVzdG9yZS5jCisgKgorICotLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgKi8KKworI2luY2x1ZGUgInBvc3RncmVzX2ZlLmgiCisKKyNpbmNsdWRlICJjb21tb24v Y29ubmVjdC5oIgorI2luY2x1ZGUgImNvbW1vbi9sb2dnaW5nLmgiCisjaW5jbHVkZSAiY29tbW9u L3N0cmluZy5oIgorI2luY2x1ZGUgImNvbW1vbl9kdW1wYWxsX3Jlc3RvcmUuaCIKKyNpbmNsdWRl ICJkdW1wdXRpbHMuaCIKKyNpbmNsdWRlICJmZV91dGlscy9zdHJpbmdfdXRpbHMuaCIKKworc3Rh dGljIGNoYXIgKmNvbnN0cnVjdENvbm5TdHIoY29uc3QgY2hhciAqKmtleXdvcmRzLCBjb25zdCBj aGFyICoqdmFsdWVzKTsKKyNkZWZpbmUgZXhpdF9uaWNlbHkoY29kZSkgZXhpdChjb2RlKQorCisv KgorICogY29ubmVjdERhdGFiYXNlCisgKgorICogTWFrZSBhIGRhdGFiYXNlIGNvbm5lY3Rpb24g d2l0aCB0aGUgZ2l2ZW4gcGFyYW1ldGVycy4gIEFuCisgKiBpbnRlcmFjdGl2ZSBwYXNzd29yZCBw cm9tcHQgaXMgYXV0b21hdGljYWxseSBpc3N1ZWQgaWYgcmVxdWlyZWQuCisgKgorICogSWYgZmFp bF9vbl9lcnJvciBpcyBmYWxzZSwgd2UgcmV0dXJuIE5VTEwgd2l0aG91dCBwcmludGluZyBhbnkg bWVzc2FnZQorICogb24gZmFpbHVyZSwgYnV0IHByZXNlcnZlIGFueSBwcm9tcHRlZCBwYXNzd29y ZCBmb3IgdGhlIG5leHQgdHJ5LgorICoKKyAqIE9uIHN1Y2Nlc3MsIHRoZSBnbG9iYWwgdmFyaWFi bGUgJ2Nvbm5zdHInIGlzIHNldCB0byBhIGNvbm5lY3Rpb24gc3RyaW5nCisgKiBjb250YWluaW5n IHRoZSBvcHRpb25zIHVzZWQuCisgKi8KK1BHY29ubiAqCitjb25uZWN0RGF0YWJhc2UoY29uc3Qg Y2hhciAqZGJuYW1lLCBjb25zdCBjaGFyICpjb25uZWN0aW9uX3N0cmluZywKKwkJCQljb25zdCBj aGFyICpwZ2hvc3QsIGNvbnN0IGNoYXIgKnBncG9ydCwgY29uc3QgY2hhciAqcGd1c2VyLAorCQkJ CXRyaXZhbHVlIHByb21wdF9wYXNzd29yZCwgYm9vbCBmYWlsX29uX2Vycm9yLCBjb25zdCBjaGFy ICpwcm9nbmFtZSwKKwkJCQljb25zdCBjaGFyICoqY29ubnN0ciwgaW50ICpzZXJ2ZXJfdmVyc2lv bikKK3sKKwlQR2Nvbm4JICAgKmNvbm47CisJYm9vbAkJbmV3X3Bhc3M7CisJY29uc3QgY2hhciAq cmVtb3RldmVyc2lvbl9zdHI7CisJaW50CQkJbXlfdmVyc2lvbjsKKwljb25zdCBjaGFyICoqa2V5 d29yZHMgPSBOVUxMOworCWNvbnN0IGNoYXIgKip2YWx1ZXMgPSBOVUxMOworCVBRY29ubmluZm9P cHRpb24gKmNvbm5fb3B0cyA9IE5VTEw7CisJc3RhdGljIGNoYXIgKnBhc3N3b3JkID0gTlVMTDsK KwlpbnQJCQlzZXJ2ZXJfdmVyc2lvbl90ZW1wOworCisJaWYgKHByb21wdF9wYXNzd29yZCA9PSBU UklfWUVTICYmICFwYXNzd29yZCkKKwkJcGFzc3dvcmQgPSBzaW1wbGVfcHJvbXB0KCJQYXNzd29y ZDogIiwgZmFsc2UpOworCisJLyoKKwkgKiBTdGFydCB0aGUgY29ubmVjdGlvbi4gIExvb3AgdW50 aWwgd2UgaGF2ZSBhIHBhc3N3b3JkIGlmIHJlcXVlc3RlZCBieQorCSAqIGJhY2tlbmQuCisJICov CisJZG8KKwl7CisJCWludAkJCWFyZ2NvdW50ID0gNjsKKwkJUFFjb25uaW5mb09wdGlvbiAqY29u bl9vcHQ7CisJCWNoYXIJICAgKmVycl9tc2cgPSBOVUxMOworCQlpbnQJCQlpID0gMDsKKworCQlm cmVlKGtleXdvcmRzKTsKKwkJZnJlZSh2YWx1ZXMpOworCQlQUWNvbm5pbmZvRnJlZShjb25uX29w dHMpOworCisJCS8qCisJCSAqIE1lcmdlIHRoZSBjb25uZWN0aW9uIGluZm8gaW5wdXRzIGdpdmVu IGluIGZvcm0gb2YgY29ubmVjdGlvbiBzdHJpbmcKKwkJICogYW5kIG90aGVyIG9wdGlvbnMuICBF eHBsaWNpdGx5IGRpc2NhcmQgYW55IGRibmFtZSB2YWx1ZSBpbiB0aGUKKwkJICogY29ubmVjdGlv biBzdHJpbmc7IG90aGVyd2lzZSwgUFFjb25uZWN0ZGJQYXJhbXMoKSB3b3VsZCBpbnRlcnByZXQK KwkJICogdGhhdCB2YWx1ZSBhcyBiZWluZyBpdHNlbGYgYSBjb25uZWN0aW9uIHN0cmluZy4KKwkJ ICovCisJCWlmIChjb25uZWN0aW9uX3N0cmluZykKKwkJeworCQkJY29ubl9vcHRzID0gUFFjb25u aW5mb1BhcnNlKGNvbm5lY3Rpb25fc3RyaW5nLCAmZXJyX21zZyk7CisJCQlpZiAoY29ubl9vcHRz ID09IE5VTEwpCisJCQkJcGdfZmF0YWwoIiVzIiwgZXJyX21zZyk7CisKKwkJCWZvciAoY29ubl9v cHQgPSBjb25uX29wdHM7IGNvbm5fb3B0LT5rZXl3b3JkICE9IE5VTEw7IGNvbm5fb3B0KyspCisJ CQl7CisJCQkJaWYgKGNvbm5fb3B0LT52YWwgIT0gTlVMTCAmJiBjb25uX29wdC0+dmFsWzBdICE9 ICdcMCcgJiYKKwkJCQkJc3RyY21wKGNvbm5fb3B0LT5rZXl3b3JkLCAiZGJuYW1lIikgIT0gMCkK KwkJCQkJYXJnY291bnQrKzsKKwkJCX0KKworCQkJa2V5d29yZHMgPSBwZ19tYWxsb2MwKChhcmdj b3VudCArIDEpICogc2l6ZW9mKCprZXl3b3JkcykpOworCQkJdmFsdWVzID0gcGdfbWFsbG9jMCgo YXJnY291bnQgKyAxKSAqIHNpemVvZigqdmFsdWVzKSk7CisKKwkJCWZvciAoY29ubl9vcHQgPSBj b25uX29wdHM7IGNvbm5fb3B0LT5rZXl3b3JkICE9IE5VTEw7IGNvbm5fb3B0KyspCisJCQl7CisJ CQkJaWYgKGNvbm5fb3B0LT52YWwgIT0gTlVMTCAmJiBjb25uX29wdC0+dmFsWzBdICE9ICdcMCcg JiYKKwkJCQkJc3RyY21wKGNvbm5fb3B0LT5rZXl3b3JkLCAiZGJuYW1lIikgIT0gMCkKKwkJCQl7 CisJCQkJCWtleXdvcmRzW2ldID0gY29ubl9vcHQtPmtleXdvcmQ7CisJCQkJCXZhbHVlc1tpXSA9 IGNvbm5fb3B0LT52YWw7CisJCQkJCWkrKzsKKwkJCQl9CisJCQl9CisJCX0KKwkJZWxzZQorCQl7 CisJCQlrZXl3b3JkcyA9IHBnX21hbGxvYzAoKGFyZ2NvdW50ICsgMSkgKiBzaXplb2YoKmtleXdv cmRzKSk7CisJCQl2YWx1ZXMgPSBwZ19tYWxsb2MwKChhcmdjb3VudCArIDEpICogc2l6ZW9mKCp2 YWx1ZXMpKTsKKwkJfQorCisJCWlmIChwZ2hvc3QpCisJCXsKKwkJCWtleXdvcmRzW2ldID0gImhv c3QiOworCQkJdmFsdWVzW2ldID0gcGdob3N0OworCQkJaSsrOworCQl9CisJCWlmIChwZ3BvcnQp CisJCXsKKwkJCWtleXdvcmRzW2ldID0gInBvcnQiOworCQkJdmFsdWVzW2ldID0gcGdwb3J0Owor CQkJaSsrOworCQl9CisJCWlmIChwZ3VzZXIpCisJCXsKKwkJCWtleXdvcmRzW2ldID0gInVzZXIi OworCQkJdmFsdWVzW2ldID0gcGd1c2VyOworCQkJaSsrOworCQl9CisJCWlmIChwYXNzd29yZCkK KwkJeworCQkJa2V5d29yZHNbaV0gPSAicGFzc3dvcmQiOworCQkJdmFsdWVzW2ldID0gcGFzc3dv cmQ7CisJCQlpKys7CisJCX0KKwkJaWYgKGRibmFtZSkKKwkJeworCQkJa2V5d29yZHNbaV0gPSAi ZGJuYW1lIjsKKwkJCXZhbHVlc1tpXSA9IGRibmFtZTsKKwkJCWkrKzsKKwkJfQorCQlrZXl3b3Jk c1tpXSA9ICJmYWxsYmFja19hcHBsaWNhdGlvbl9uYW1lIjsKKwkJdmFsdWVzW2ldID0gcHJvZ25h bWU7CisJCWkrKzsKKworCQluZXdfcGFzcyA9IGZhbHNlOworCQljb25uID0gUFFjb25uZWN0ZGJQ YXJhbXMoa2V5d29yZHMsIHZhbHVlcywgdHJ1ZSk7CisKKwkJaWYgKCFjb25uKQorCQkJcGdfZmF0 YWwoImNvdWxkIG5vdCBjb25uZWN0IHRvIGRhdGFiYXNlIFwiJXNcIiIsIGRibmFtZSk7CisKKwkJ aWYgKFBRc3RhdHVzKGNvbm4pID09IENPTk5FQ1RJT05fQkFEICYmCisJCQlQUWNvbm5lY3Rpb25O ZWVkc1Bhc3N3b3JkKGNvbm4pICYmCisJCQkhcGFzc3dvcmQgJiYKKwkJCXByb21wdF9wYXNzd29y ZCAhPSBUUklfTk8pCisJCXsKKwkJCVBRZmluaXNoKGNvbm4pOworCQkJcGFzc3dvcmQgPSBzaW1w bGVfcHJvbXB0KCJQYXNzd29yZDogIiwgZmFsc2UpOworCQkJbmV3X3Bhc3MgPSB0cnVlOworCQl9 CisJfSB3aGlsZSAobmV3X3Bhc3MpOworCisJLyogY2hlY2sgdG8gc2VlIHRoYXQgdGhlIGJhY2tl bmQgY29ubmVjdGlvbiB3YXMgc3VjY2Vzc2Z1bGx5IG1hZGUgKi8KKwlpZiAoUFFzdGF0dXMoY29u bikgPT0gQ09OTkVDVElPTl9CQUQpCisJeworCQlpZiAoZmFpbF9vbl9lcnJvcikKKwkJCXBnX2Zh dGFsKCIlcyIsIFBRZXJyb3JNZXNzYWdlKGNvbm4pKTsKKwkJZWxzZQorCQl7CisJCQlQUWZpbmlz aChjb25uKTsKKworCQkJZnJlZShrZXl3b3Jkcyk7CisJCQlmcmVlKHZhbHVlcyk7CisJCQlQUWNv bm5pbmZvRnJlZShjb25uX29wdHMpOworCisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCX0KKworCS8q CisJICogT2ssIGNvbm5lY3RlZCBzdWNjZXNzZnVsbHkuIFJlbWVtYmVyIHRoZSBvcHRpb25zIHVz ZWQsIGluIHRoZSBmb3JtIG9mIGEKKwkgKiBjb25uZWN0aW9uIHN0cmluZy4KKwkgKi8KKwlpZiAo Y29ubnN0cikKKwkJKmNvbm5zdHIgPSBjb25zdHJ1Y3RDb25uU3RyKGtleXdvcmRzLCB2YWx1ZXMp OworCisJZnJlZShrZXl3b3Jkcyk7CisJZnJlZSh2YWx1ZXMpOworCVBRY29ubmluZm9GcmVlKGNv bm5fb3B0cyk7CisKKwkvKiBDaGVjayB2ZXJzaW9uICovCisJcmVtb3RldmVyc2lvbl9zdHIgPSBQ UXBhcmFtZXRlclN0YXR1cyhjb25uLCAic2VydmVyX3ZlcnNpb24iKTsKKwlpZiAoIXJlbW90ZXZl cnNpb25fc3RyKQorCQlwZ19mYXRhbCgiY291bGQgbm90IGdldCBzZXJ2ZXIgdmVyc2lvbiIpOwor CXNlcnZlcl92ZXJzaW9uX3RlbXAgPSBQUXNlcnZlclZlcnNpb24oY29ubik7CisJaWYgKHNlcnZl cl92ZXJzaW9uX3RlbXAgPT0gMCkKKwkJcGdfZmF0YWwoImNvdWxkIG5vdCBwYXJzZSBzZXJ2ZXIg dmVyc2lvbiBcIiVzXCIiLAorCQkJCSByZW1vdGV2ZXJzaW9uX3N0cik7CisKKwkvKiBJZiBuZWVk ZWQsIHRoZW4gY29weSBzZXJ2ZXIgdmVyc2lvbiB0byBvdXRlciBmdW5jdGlvbi4gKi8KKwlpZiAo c2VydmVyX3ZlcnNpb24pCisJCSpzZXJ2ZXJfdmVyc2lvbiA9IHNlcnZlcl92ZXJzaW9uX3RlbXA7 CisKKwlteV92ZXJzaW9uID0gUEdfVkVSU0lPTl9OVU07CisKKwkvKgorCSAqIFdlIGFsbG93IHRo ZSBzZXJ2ZXIgdG8gYmUgYmFjayB0byA5LjIsIGFuZCB1cCB0byBhbnkgbWlub3IgcmVsZWFzZSBv ZgorCSAqIG91ciBvd24gbWFqb3IgdmVyc2lvbi4gIChTZWUgYWxzbyB2ZXJzaW9uIGNoZWNrIGlu IHBnX2R1bXAuYy4pCisJICovCisJaWYgKG15X3ZlcnNpb24gIT0gc2VydmVyX3ZlcnNpb25fdGVt cAorCQkmJiAoc2VydmVyX3ZlcnNpb25fdGVtcCA8IDkwMjAwIHx8CisJCQkoc2VydmVyX3ZlcnNp b25fdGVtcCAvIDEwMCkgPiAobXlfdmVyc2lvbiAvIDEwMCkpKQorCXsKKwkJcGdfbG9nX2Vycm9y KCJhYm9ydGluZyBiZWNhdXNlIG9mIHNlcnZlciB2ZXJzaW9uIG1pc21hdGNoIik7CisJCXBnX2xv Z19lcnJvcl9kZXRhaWwoInNlcnZlciB2ZXJzaW9uOiAlczsgJXMgdmVyc2lvbjogJXMiLAorCQkJ CQkJCXJlbW90ZXZlcnNpb25fc3RyLCBwcm9nbmFtZSwgUEdfVkVSU0lPTik7CisJCWV4aXRfbmlj ZWx5KDEpOworCX0KKworCVBRY2xlYXIoZXhlY3V0ZVF1ZXJ5KGNvbm4sIEFMV0FZU19TRUNVUkVf U0VBUkNIX1BBVEhfU1FMKSk7CisKKwlyZXR1cm4gY29ubjsKK30KKworLyoKKyAqIGNvbnN0cnVj dENvbm5TdHIKKyAqCisgKiBDb25zdHJ1Y3QgYSBjb25uZWN0aW9uIHN0cmluZyBmcm9tIHRoZSBn aXZlbiBrZXl3b3JkL3ZhbHVlIHBhaXJzLiBJdCBpcworICogdXNlZCB0byBwYXNzIHRoZSBjb25u ZWN0aW9uIG9wdGlvbnMgdG8gdGhlIHBnX2R1bXAgc3VicHJvY2Vzcy4KKyAqCisgKiBUaGUgZm9s bG93aW5nIHBhcmFtZXRlcnMgYXJlIGV4Y2x1ZGVkOgorICoJZGJuYW1lCQktIHZhcmllcyBpbiBl YWNoIHBnX2R1bXAgaW52b2NhdGlvbgorICoJcGFzc3dvcmQJLSBpdCdzIG5vdCBzZWN1cmUgdG8g cGFzcyBhIHBhc3N3b3JkIG9uIHRoZSBjb21tYW5kIGxpbmUKKyAqCWZhbGxiYWNrX2FwcGxpY2F0 aW9uX25hbWUgLSB3ZSdsbCBsZXQgcGdfZHVtcCBzZXQgaXQKKyAqLworc3RhdGljIGNoYXIgKgor Y29uc3RydWN0Q29ublN0cihjb25zdCBjaGFyICoqa2V5d29yZHMsIGNvbnN0IGNoYXIgKip2YWx1 ZXMpCit7CisJUFFFeHBCdWZmZXIgYnVmID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsKKwljaGFyCSAg ICpjb25uc3RyOworCWludAkJCWk7CisJYm9vbAkJZmlyc3RrZXl3b3JkID0gdHJ1ZTsKKworCS8q IENvbnN0cnVjdCBhIG5ldyBjb25uZWN0aW9uIHN0cmluZyBpbiBrZXk9J3ZhbHVlJyBmb3JtYXQu ICovCisJZm9yIChpID0gMDsga2V5d29yZHNbaV0gIT0gTlVMTDsgaSsrKQorCXsKKwkJaWYgKHN0 cmNtcChrZXl3b3Jkc1tpXSwgImRibmFtZSIpID09IDAgfHwKKwkJCXN0cmNtcChrZXl3b3Jkc1tp XSwgInBhc3N3b3JkIikgPT0gMCB8fAorCQkJc3RyY21wKGtleXdvcmRzW2ldLCAiZmFsbGJhY2tf YXBwbGljYXRpb25fbmFtZSIpID09IDApCisJCQljb250aW51ZTsKKworCQlpZiAoIWZpcnN0a2V5 d29yZCkKKwkJCWFwcGVuZFBRRXhwQnVmZmVyQ2hhcihidWYsICcgJyk7CisJCWZpcnN0a2V5d29y ZCA9IGZhbHNlOworCQlhcHBlbmRQUUV4cEJ1ZmZlcihidWYsICIlcz0iLCBrZXl3b3Jkc1tpXSk7 CisJCWFwcGVuZENvbm5TdHJWYWwoYnVmLCB2YWx1ZXNbaV0pOworCX0KKworCWNvbm5zdHIgPSBw Z19zdHJkdXAoYnVmLT5kYXRhKTsKKwlkZXN0cm95UFFFeHBCdWZmZXIoYnVmKTsKKwlyZXR1cm4g Y29ubnN0cjsKK30KKworLyoKKyAqIGV4ZWN1dGVRdWVyeQorICoKKyAqIFJ1biBhIHF1ZXJ5LCBy ZXR1cm4gdGhlIHJlc3VsdHMsIGV4aXQgcHJvZ3JhbSBvbiBmYWlsdXJlLgorICovCitQR3Jlc3Vs dCAqCitleGVjdXRlUXVlcnkoUEdjb25uICpjb25uLCBjb25zdCBjaGFyICpxdWVyeSkKK3sKKwlQ R3Jlc3VsdCAgICpyZXM7CisKKwlwZ19sb2dfaW5mbygiZXhlY3V0aW5nICVzIiwgcXVlcnkpOwor CisJcmVzID0gUFFleGVjKGNvbm4sIHF1ZXJ5KTsKKwlpZiAoIXJlcyB8fAorCQlQUXJlc3VsdFN0 YXR1cyhyZXMpICE9IFBHUkVTX1RVUExFU19PSykKKwl7CisJCXBnX2xvZ19lcnJvcigicXVlcnkg ZmFpbGVkOiAlcyIsIFBRZXJyb3JNZXNzYWdlKGNvbm4pKTsKKwkJcGdfbG9nX2Vycm9yX2RldGFp bCgiUXVlcnkgd2FzOiAlcyIsIHF1ZXJ5KTsKKwkJUFFmaW5pc2goY29ubik7CisJCWV4aXRfbmlj ZWx5KDEpOworCX0KKworCXJldHVybiByZXM7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1 bXAvY29tbW9uX2R1bXBhbGxfcmVzdG9yZS5oIGIvc3JjL2Jpbi9wZ19kdW1wL2NvbW1vbl9kdW1w YWxsX3Jlc3RvcmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYTBk Y2RiZTA4MDcKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmluL3BnX2R1bXAvY29tbW9uX2R1bXBh bGxfcmVzdG9yZS5oCkBAIC0wLDAgKzEsMjYgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAq IGNvbW1vbl9kdW1wYWxsX3Jlc3RvcmUuaAorICogICAgICBDb21tb24gaGVhZGVyIGZpbGUgZm9y IHBnX2R1bXBhbGwgYW5kIHBnX3Jlc3RvcmUKKyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMp IDE5OTYtMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBvcnRp b25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxp Zm9ybmlhCisgKgorICogSURFTlRJRklDQVRJT04KKyAqICAgIHNyYy9iaW4vcGdfZHVtcC9jb21t b25fZHVtcGFsbF9yZXN0b3JlLmgKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2lmbmRl ZiBDT01NT05fRFVNUEFMTF9SRVNUT1JFX0gKKyNkZWZpbmUgQ09NTU9OX0RVTVBBTExfUkVTVE9S RV9ICisKKyNpbmNsdWRlICJwZ19iYWNrdXAuaCIKKworLyogVE9ETzogaW5jcmVhc2luZyB0aGlz IHRvIGtlZXAgMTAwIGRiIHJlc3RvcmluZyBieSBzaW5nbGUgcGdfcmVzdG9yZSBjb21tYW5kLiAq LworI2RlZmluZSBNQVhfT05fRVhJVF9OSUNFTFkJCQkJMTAwCitleHRlcm4gUEdjb25uICpjb25u ZWN0RGF0YWJhc2UoY29uc3QgY2hhciAqZGJuYW1lLCBjb25zdCBjaGFyICpjb25uZWN0aW9uX3N0 cmluZywgY29uc3QgY2hhciAqcGdob3N0LAorCQkJCQkJCSAgIGNvbnN0IGNoYXIgKnBncG9ydCwg Y29uc3QgY2hhciAqcGd1c2VyLAorCQkJCQkJCSAgIHRyaXZhbHVlIHByb21wdF9wYXNzd29yZCwg Ym9vbCBmYWlsX29uX2Vycm9yLAorCQkJCQkJCSAgIGNvbnN0IGNoYXIgKnByb2duYW1lLCBjb25z dCBjaGFyICoqY29ubnN0ciwgaW50ICpzZXJ2ZXJfdmVyc2lvbik7CitleHRlcm4gIFBHcmVzdWx0 ICpleGVjdXRlUXVlcnkoUEdjb25uICpjb25uLCBjb25zdCBjaGFyICpxdWVyeSk7CisjZW5kaWYg ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENPTU1PTl9EVU1QQUxMX1JFU1RPUkVfSCAqLwpk aWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL21lc29uLmJ1aWxkIGIvc3JjL2Jpbi9wZ19kdW1w L21lc29uLmJ1aWxkCmluZGV4IDYwM2JhNmNmYmYwLi5kZGVjYWM1Y2YwOSAxMDA2NDQKLS0tIGEv c3JjL2Jpbi9wZ19kdW1wL21lc29uLmJ1aWxkCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9tZXNvbi5i dWlsZApAQCAtNDksNiArNDksNyBAQCBiaW5fdGFyZ2V0cyArPSBwZ19kdW1wCiAKIHBnX2R1bXBh bGxfc291cmNlcyA9IGZpbGVzKAogICAncGdfZHVtcGFsbC5jJywKKyAgJ2NvbW1vbl9kdW1wYWxs X3Jlc3RvcmUuYycsCiApCiAKIGlmIGhvc3Rfc3lzdGVtID09ICd3aW5kb3dzJwpAQCAtNjgsNiAr NjksNyBAQCBiaW5fdGFyZ2V0cyArPSBwZ19kdW1wYWxsCiAKIHBnX3Jlc3RvcmVfc291cmNlcyA9 IGZpbGVzKAogICAncGdfcmVzdG9yZS5jJywKKyAgJ2NvbW1vbl9kdW1wYWxsX3Jlc3RvcmUuYycs CiApCiAKIGlmIGhvc3Rfc3lzdGVtID09ICd3aW5kb3dzJwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9w Z19kdW1wL3BnX2JhY2t1cC5oIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cC5oCmluZGV4IGYw ZjE5YmIwYjI5Li42NTAwMGU1YTA4MyAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2Jh Y2t1cC5oCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXAuaApAQCAtMzA2LDcgKzMwNiw3 IEBAIGV4dGVybiB2b2lkIFNldEFyY2hpdmVPcHRpb25zKEFyY2hpdmUgKkFILCBEdW1wT3B0aW9u cyAqZG9wdCwgUmVzdG9yZU9wdGlvbnMgKnJvCiAKIGV4dGVybiB2b2lkIFByb2Nlc3NBcmNoaXZl UmVzdG9yZU9wdGlvbnMoQXJjaGl2ZSAqQUhYKTsKIAotZXh0ZXJuIHZvaWQgUmVzdG9yZUFyY2hp dmUoQXJjaGl2ZSAqQUhYKTsKK2V4dGVybiB2b2lkIFJlc3RvcmVBcmNoaXZlKEFyY2hpdmUgKkFI WCwgYm9vbCBhcHBlbmRfZGF0YSk7CiAKIC8qIE9wZW4gYW4gZXhpc3RpbmcgYXJjaGl2ZSAqLwog ZXh0ZXJuIEFyY2hpdmUgKk9wZW5BcmNoaXZlKGNvbnN0IGNoYXIgKkZpbGVTcGVjLCBjb25zdCBB cmNoaXZlRm9ybWF0IGZtdCk7CkBAIC0zMTksNyArMzE5LDcgQEAgZXh0ZXJuIEFyY2hpdmUgKkNy ZWF0ZUFyY2hpdmUoY29uc3QgY2hhciAqRmlsZVNwZWMsIGNvbnN0IEFyY2hpdmVGb3JtYXQgZm10 LAogCQkJCQkJCSAgRGF0YURpclN5bmNNZXRob2Qgc3luY19tZXRob2QpOwogCiAvKiBUaGUgLS1s aXN0IG9wdGlvbiAqLwotZXh0ZXJuIHZvaWQgUHJpbnRUT0NTdW1tYXJ5KEFyY2hpdmUgKkFIWCk7 CitleHRlcm4gdm9pZCBQcmludFRPQ1N1bW1hcnkoQXJjaGl2ZSAqQUhYLCBib29sIGFwcGVuZF9k YXRhKTsKIAogZXh0ZXJuIFJlc3RvcmVPcHRpb25zICpOZXdSZXN0b3JlT3B0aW9ucyh2b2lkKTsK IApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5jIGIvc3Jj L2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5jCmluZGV4IDcwN2EzZmM4NDRjLi5lOTFm NGI4MzZmNiAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5j CisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuYwpAQCAtODIsNyArODIs NyBAQCBzdGF0aWMgaW50CVJlc3RvcmluZ1RvREIoQXJjaGl2ZUhhbmRsZSAqQUgpOwogc3RhdGlj IHZvaWQgZHVtcF9sb19idWYoQXJjaGl2ZUhhbmRsZSAqQUgpOwogc3RhdGljIHZvaWQgZHVtcFRp bWVzdGFtcChBcmNoaXZlSGFuZGxlICpBSCwgY29uc3QgY2hhciAqbXNnLCB0aW1lX3QgdGltKTsK IHN0YXRpYyB2b2lkIFNldE91dHB1dChBcmNoaXZlSGFuZGxlICpBSCwgY29uc3QgY2hhciAqZmls ZW5hbWUsCi0JCQkJCSAgY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lv bl9zcGVjKTsKKwkJCWNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25f c3BlYywgYm9vbCBhcHBlbmRfZGF0YSk7CiBzdGF0aWMgQ29tcHJlc3NGaWxlSGFuZGxlICpTYXZl T3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFIKTsKIHN0YXRpYyB2b2lkIFJlc3RvcmVPdXRwdXQoQXJj aGl2ZUhhbmRsZSAqQUgsIENvbXByZXNzRmlsZUhhbmRsZSAqc2F2ZWRPdXRwdXQpOwogCkBAIC0z MzEsOSArMzMxLDE0IEBAIFByb2Nlc3NBcmNoaXZlUmVzdG9yZU9wdGlvbnMoQXJjaGl2ZSAqQUhY KQogCQlTdHJpY3ROYW1lc0NoZWNrKHJvcHQpOwogfQogCi0vKiBQdWJsaWMgKi8KKy8qCisgKiBS ZXN0b3JlQXJjaGl2ZQorICoKKyAqIElmIGFwcGVuZF9kYXRhIGlzIHNldCwgdGhlbiBhcHBlbmQg ZGF0YSBpbnRvIGZpbGUgYXMgd2UgYXJlIHJlc3RvcmluZyBkdW1wCisgKiBvZiBtdWx0aXBsZSBk YXRhYmFzZXMgd2hpY2ggd2FzIHRha2VuIGJ5IHBnX2R1bXBhbGwuCisgKi8KIHZvaWQKLVJlc3Rv cmVBcmNoaXZlKEFyY2hpdmUgKkFIWCkKK1Jlc3RvcmVBcmNoaXZlKEFyY2hpdmUgKkFIWCwgYm9v bCBhcHBlbmRfZGF0YSkKIHsKIAlBcmNoaXZlSGFuZGxlICpBSCA9IChBcmNoaXZlSGFuZGxlICop IEFIWDsKIAlSZXN0b3JlT3B0aW9ucyAqcm9wdCA9IEFILT5wdWJsaWMucm9wdDsKQEAgLTQ1MCw3 ICs0NTUsNyBAQCBSZXN0b3JlQXJjaGl2ZShBcmNoaXZlICpBSFgpCiAJICovCiAJc2F2ID0gU2F2 ZU91dHB1dChBSCk7CiAJaWYgKHJvcHQtPmZpbGVuYW1lIHx8IHJvcHQtPmNvbXByZXNzaW9uX3Nw ZWMuYWxnb3JpdGhtICE9IFBHX0NPTVBSRVNTSU9OX05PTkUpCi0JCVNldE91dHB1dChBSCwgcm9w dC0+ZmlsZW5hbWUsIHJvcHQtPmNvbXByZXNzaW9uX3NwZWMpOworCQlTZXRPdXRwdXQoQUgsIHJv cHQtPmZpbGVuYW1lLCByb3B0LT5jb21wcmVzc2lvbl9zcGVjLCBhcHBlbmRfZGF0YSk7CiAKIAlh aHByaW50ZihBSCwgIi0tXG4tLSBQb3N0Z3JlU1FMIGRhdGFiYXNlIGR1bXBcbi0tXG5cbiIpOwog CkBAIC0xMjYzLDcgKzEyNjgsNyBAQCBBcmNoaXZlRW50cnkoQXJjaGl2ZSAqQUhYLCBDYXRhbG9n SWQgY2F0YWxvZ0lkLCBEdW1wSWQgZHVtcElkLAogCiAvKiBQdWJsaWMgKi8KIHZvaWQKLVByaW50 VE9DU3VtbWFyeShBcmNoaXZlICpBSFgpCitQcmludFRPQ1N1bW1hcnkoQXJjaGl2ZSAqQUhYLCBi b29sIGFwcGVuZF9kYXRhKQogewogCUFyY2hpdmVIYW5kbGUgKkFIID0gKEFyY2hpdmVIYW5kbGUg KikgQUhYOwogCVJlc3RvcmVPcHRpb25zICpyb3B0ID0gQUgtPnB1YmxpYy5yb3B0OwpAQCAtMTI3 OSw3ICsxMjg0LDcgQEAgUHJpbnRUT0NTdW1tYXJ5KEFyY2hpdmUgKkFIWCkKIAogCXNhdiA9IFNh dmVPdXRwdXQoQUgpOwogCWlmIChyb3B0LT5maWxlbmFtZSkKLQkJU2V0T3V0cHV0KEFILCByb3B0 LT5maWxlbmFtZSwgb3V0X2NvbXByZXNzaW9uX3NwZWMpOworCQlTZXRPdXRwdXQoQUgsIHJvcHQt PmZpbGVuYW1lLCBvdXRfY29tcHJlc3Npb25fc3BlYywgYXBwZW5kX2RhdGEpOwogCiAJaWYgKHN0 cmZ0aW1lKHN0YW1wX3N0ciwgc2l6ZW9mKHN0YW1wX3N0ciksIFBHRFVNUF9TVFJGVElNRV9GTVQs CiAJCQkJIGxvY2FsdGltZSgmQUgtPmNyZWF0ZURhdGUpKSA9PSAwKQpAQCAtMTY1OCw3ICsxNjYz LDggQEAgYXJjaHByaW50ZihBcmNoaXZlICpBSCwgY29uc3QgY2hhciAqZm10LC4uLikKIAogc3Rh dGljIHZvaWQKIFNldE91dHB1dChBcmNoaXZlSGFuZGxlICpBSCwgY29uc3QgY2hhciAqZmlsZW5h bWUsCi0JCSAgY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVj KQorCQkgIGNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYywK KwkJICBib29sIGFwcGVuZF9kYXRhKQogewogCUNvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIOwogCWNv bnN0IGNoYXIgKm1vZGU7CkBAIC0xNjc4LDcgKzE2ODQsNyBAQCBTZXRPdXRwdXQoQXJjaGl2ZUhh bmRsZSAqQUgsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLAogCWVsc2UKIAkJZm4gPSBmaWxlbm8oc3Rk b3V0KTsKIAotCWlmIChBSC0+bW9kZSA9PSBhcmNoTW9kZUFwcGVuZCkKKwlpZiAoYXBwZW5kX2Rh dGEgfHwgQUgtPm1vZGUgPT0gYXJjaE1vZGVBcHBlbmQpCiAJCW1vZGUgPSBQR19CSU5BUllfQTsK IAllbHNlCiAJCW1vZGUgPSBQR19CSU5BUllfVzsKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVt cC9wZ19iYWNrdXBfdGFyLmMgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX3Rhci5jCmluZGV4 IGI1YmEzYjQ2ZGQ5Li5kOTRkMGRlMmE1ZCAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3Bn X2JhY2t1cF90YXIuYworKysgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX3Rhci5jCkBAIC04 MjYsNyArODI2LDcgQEAgX0Nsb3NlQXJjaGl2ZShBcmNoaXZlSGFuZGxlICpBSCkKIAkJc2F2VmVy Ym9zZSA9IEFILT5wdWJsaWMudmVyYm9zZTsKIAkJQUgtPnB1YmxpYy52ZXJib3NlID0gMDsKIAot CQlSZXN0b3JlQXJjaGl2ZSgoQXJjaGl2ZSAqKSBBSCk7CisJCVJlc3RvcmVBcmNoaXZlKChBcmNo aXZlICopIEFILCBmYWxzZSk7CiAKIAkJU2V0QXJjaGl2ZU9wdGlvbnMoKEFyY2hpdmUgKikgQUgs IHNhdkRvcHQsIHNhdlJvcHQpOwogCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFj a3VwX3V0aWxzLmMgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX3V0aWxzLmMKaW5kZXggNzlh ZWM1ZjUxNTguLjQ3NTg5Y2NhOTBmIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFj a3VwX3V0aWxzLmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF91dGlscy5jCkBAIC0x Myw2ICsxMyw3IEBACiAgKi8KICNpbmNsdWRlICJwb3N0Z3Jlc19mZS5oIgogCisjaW5jbHVkZSAi Y29tbW9uX2R1bXBhbGxfcmVzdG9yZS5oIgogI2lmZGVmIFdJTjMyCiAjaW5jbHVkZSAicGFyYWxs ZWwuaCIKICNlbmRpZgpAQCAtMjEsOCArMjIsNiBAQAogLyogR2xvYmFscyBleHBvcnRlZCBieSB0 aGlzIGZpbGUgKi8KIGNvbnN0IGNoYXIgKnByb2duYW1lID0gTlVMTDsKIAotI2RlZmluZSBNQVhf T05fRVhJVF9OSUNFTFkJCQkJMjAKLQogc3RhdGljIHN0cnVjdAogewogCW9uX2V4aXRfbmljZWx5 X2NhbGxiYWNrIGZ1bmN0aW9uOwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAu YyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMKaW5kZXggMDJlMWZkZjhmNzguLjYxMDY3ZTE1 NDJlIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jCisrKyBiL3NyYy9iaW4v cGdfZHVtcC9wZ19kdW1wLmMKQEAgLTExNDgsNyArMTE0OCw3IEBAIG1haW4oaW50IGFyZ2MsIGNo YXIgKiphcmd2KQogCSAqIHJpZ2h0IG5vdy4KIAkgKi8KIAlpZiAocGxhaW5UZXh0KQotCQlSZXN0 b3JlQXJjaGl2ZShmb3V0KTsKKwkJUmVzdG9yZUFyY2hpdmUoZm91dCwgZmFsc2UpOwogCiAJQ2xv c2VBcmNoaXZlKGZvdXQpOwogCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcGFs bC5jIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXBhbGwuYwppbmRleCAzOTZmNzk3ODFjNS4uODAz NDFkYjMyNGQgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wYWxsLmMKKysrIGIv c3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXBhbGwuYwpAQCAtMTUsNiArMTUsNyBAQAogCiAjaW5jbHVk ZSAicG9zdGdyZXNfZmUuaCIKIAorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CiAjaW5jbHVkZSA8dGlt ZS5oPgogI2luY2x1ZGUgPHVuaXN0ZC5oPgogCkBAIC0yNCwxNCArMjUsMTcgQEAKICNpbmNsdWRl ICJjb21tb24vaGFzaGZuX3Vuc3RhYmxlLmgiCiAjaW5jbHVkZSAiY29tbW9uL2xvZ2dpbmcuaCIK ICNpbmNsdWRlICJjb21tb24vc3RyaW5nLmgiCisjaW5jbHVkZSAiY29tbW9uX2R1bXBhbGxfcmVz dG9yZS5oIgogI2luY2x1ZGUgImR1bXB1dGlscy5oIgogI2luY2x1ZGUgImZlX3V0aWxzL3N0cmlu Z191dGlscy5oIgogI2luY2x1ZGUgImZpbHRlci5oIgogI2luY2x1ZGUgImdldG9wdF9sb25nLmgi CiAjaW5jbHVkZSAicGdfYmFja3VwLmgiCisjaW5jbHVkZSAicGdfYmFja3VwX2FyY2hpdmVyLmgi CiAKIC8qIHZlcnNpb24gc3RyaW5nIHdlIGV4cGVjdCBiYWNrIGZyb20gcGdfZHVtcCAqLwogI2Rl ZmluZSBQR0RVTVBfVkVSU0lPTlNUUiAicGdfZHVtcCAoUG9zdGdyZVNRTCkgIiBQR19WRVJTSU9O ICJcbiIKKyNkZWZpbmUgZXhpdF9uaWNlbHkoY29kZSkgZXhpdChjb2RlKQogCiB0eXBlZGVmIHN0 cnVjdAogewpAQCAtNjQsMjggKzY4LDI1IEBAIHN0YXRpYyB2b2lkIGRyb3BUYWJsZXNwYWNlcyhQ R2Nvbm4gKmNvbm4pOwogc3RhdGljIHZvaWQgZHVtcFRhYmxlc3BhY2VzKFBHY29ubiAqY29ubik7 CiBzdGF0aWMgdm9pZCBkcm9wREJzKFBHY29ubiAqY29ubik7CiBzdGF0aWMgdm9pZCBkdW1wVXNl ckNvbmZpZyhQR2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKnVzZXJuYW1lKTsKLXN0YXRpYyB2b2lk IGR1bXBEYXRhYmFzZXMoUEdjb25uICpjb25uKTsKK3N0YXRpYyB2b2lkIGR1bXBEYXRhYmFzZXMo UEdjb25uICpjb25uLCBBcmNoaXZlRm9ybWF0IGFyY2hEdW1wRm9ybWF0KTsKIHN0YXRpYyB2b2lk IGR1bXBUaW1lc3RhbXAoY29uc3QgY2hhciAqbXNnKTsKLXN0YXRpYyBpbnQJcnVuUGdEdW1wKGNv bnN0IGNoYXIgKmRibmFtZSwgY29uc3QgY2hhciAqY3JlYXRlX29wdHMpOworc3RhdGljIGludCBy dW5QZ0R1bXAoY29uc3QgY2hhciAqZGJuYW1lLCBjb25zdCBjaGFyICpjcmVhdGVfb3B0cywKKwkJ CQkJIGNoYXIgKmRiZmlsZSwgQXJjaGl2ZUZvcm1hdCBhcmNoRHVtcEZvcm1hdCk7CiBzdGF0aWMg dm9pZCBidWlsZFNoU2VjTGFiZWxzKFBHY29ubiAqY29ubiwKIAkJCQkJCQkgY29uc3QgY2hhciAq Y2F0YWxvZ19uYW1lLCBPaWQgb2JqZWN0SWQsCiAJCQkJCQkJIGNvbnN0IGNoYXIgKm9ianR5cGUs IGNvbnN0IGNoYXIgKm9iam5hbWUsCiAJCQkJCQkJIFBRRXhwQnVmZmVyIGJ1ZmZlcik7Ci1zdGF0 aWMgUEdjb25uICpjb25uZWN0RGF0YWJhc2UoY29uc3QgY2hhciAqZGJuYW1lLAotCQkJCQkJCSAg IGNvbnN0IGNoYXIgKmNvbm5lY3Rpb25fc3RyaW5nLCBjb25zdCBjaGFyICpwZ2hvc3QsCi0JCQkJ CQkJICAgY29uc3QgY2hhciAqcGdwb3J0LCBjb25zdCBjaGFyICpwZ3VzZXIsCi0JCQkJCQkJICAg dHJpdmFsdWUgcHJvbXB0X3Bhc3N3b3JkLCBib29sIGZhaWxfb25fZXJyb3IpOwotc3RhdGljIGNo YXIgKmNvbnN0cnVjdENvbm5TdHIoY29uc3QgY2hhciAqKmtleXdvcmRzLCBjb25zdCBjaGFyICoq dmFsdWVzKTsKLXN0YXRpYyBQR3Jlc3VsdCAqZXhlY3V0ZVF1ZXJ5KFBHY29ubiAqY29ubiwgY29u c3QgY2hhciAqcXVlcnkpOwogc3RhdGljIHZvaWQgZXhlY3V0ZUNvbW1hbmQoUEdjb25uICpjb25u LCBjb25zdCBjaGFyICpxdWVyeSk7CiBzdGF0aWMgdm9pZCBleHBhbmRfZGJuYW1lX3BhdHRlcm5z KFBHY29ubiAqY29ubiwgU2ltcGxlU3RyaW5nTGlzdCAqcGF0dGVybnMsCiAJCQkJCQkJCSAgIFNp bXBsZVN0cmluZ0xpc3QgKm5hbWVzKTsKIHN0YXRpYyB2b2lkIHJlYWRfZHVtcGFsbF9maWx0ZXJz KGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBTaW1wbGVTdHJpbmdMaXN0ICpwYXR0ZXJuKTsKK3N0YXRp YyB2b2lkIGNyZWF0ZV9vcl9vcGVuX2Rpcihjb25zdCBjaGFyICpkaXJuYW1lKTsKK3N0YXRpYyBB cmNoaXZlRm9ybWF0IHBhcnNlRHVtcEZvcm1hdChjb25zdCBjaGFyICpmb3JtYXQpOwogCiBzdGF0 aWMgY2hhciBwZ19kdW1wX2JpbltNQVhQR1BBVEhdOwogc3RhdGljIGNvbnN0IGNoYXIgKnByb2du YW1lOwogc3RhdGljIFBRRXhwQnVmZmVyIHBnZHVtcG9wdHM7Ci1zdGF0aWMgY2hhciAqY29ubnN0 ciA9ICIiOworc3RhdGljIGNvbnN0IGNoYXIgKmNvbm5zdHIgPSAiIjsKIHN0YXRpYyBib29sIG91 dHB1dF9jbGVhbiA9IGZhbHNlOwogc3RhdGljIGJvb2wgc2tpcF9hY2xzID0gZmFsc2U7CiBzdGF0 aWMgYm9vbCB2ZXJib3NlID0gZmFsc2U7CkBAIC0xMDcsNyArMTA4LDcgQEAgc3RhdGljIGludAlu b19zdWJzY3JpcHRpb25zID0gMDsKIHN0YXRpYyBpbnQJbm9fdG9hc3RfY29tcHJlc3Npb24gPSAw Owogc3RhdGljIGludAlub191bmxvZ2dlZF90YWJsZV9kYXRhID0gMDsKIHN0YXRpYyBpbnQJbm9f cm9sZV9wYXNzd29yZHMgPSAwOwotc3RhdGljIGludAlzZXJ2ZXJfdmVyc2lvbjsKK3N0YXRpYyBp bnQgc2VydmVyX3ZlcnNpb247CiBzdGF0aWMgaW50CWxvYWRfdmlhX3BhcnRpdGlvbl9yb290ID0g MDsKIHN0YXRpYyBpbnQJb25fY29uZmxpY3RfZG9fbm90aGluZyA9IDA7CiAKQEAgLTEyMSw4ICsx MjIsNiBAQCBzdGF0aWMgY2hhciAqZmlsZW5hbWUgPSBOVUxMOwogc3RhdGljIFNpbXBsZVN0cmlu Z0xpc3QgZGF0YWJhc2VfZXhjbHVkZV9wYXR0ZXJucyA9IHtOVUxMLCBOVUxMfTsKIHN0YXRpYyBT aW1wbGVTdHJpbmdMaXN0IGRhdGFiYXNlX2V4Y2x1ZGVfbmFtZXMgPSB7TlVMTCwgTlVMTH07CiAK LSNkZWZpbmUgZXhpdF9uaWNlbHkoY29kZSkgZXhpdChjb2RlKQotCiBpbnQKIG1haW4oaW50IGFy Z2MsIGNoYXIgKmFyZ3ZbXSkKIHsKQEAgLTE0Nyw2ICsxNDYsNyBAQCBtYWluKGludCBhcmdjLCBj aGFyICphcmd2W10pCiAJCXsicGFzc3dvcmQiLCBub19hcmd1bWVudCwgTlVMTCwgJ1cnfSwKIAkJ eyJuby1wcml2aWxlZ2VzIiwgbm9fYXJndW1lbnQsIE5VTEwsICd4J30sCiAJCXsibm8tYWNsIiwg bm9fYXJndW1lbnQsIE5VTEwsICd4J30sCisJCXsiZm9ybWF0IiwgcmVxdWlyZWRfYXJndW1lbnQs IE5VTEwsICdGJ30sCiAKIAkJLyoKIAkJICogdGhlIGZvbGxvd2luZyBvcHRpb25zIGRvbid0IGhh dmUgYW4gZXF1aXZhbGVudCBzaG9ydCBvcHRpb24gbGV0dGVyCkBAIC0xODgsNiArMTg4LDggQEAg bWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCWNoYXIJICAgKnBnZGIgPSBOVUxMOwogCWNo YXIJICAgKnVzZV9yb2xlID0gTlVMTDsKIAljb25zdCBjaGFyICpkdW1wZW5jb2RpbmcgPSBOVUxM OworCUFyY2hpdmVGb3JtYXQgYXJjaER1bXBGb3JtYXQgPSBhcmNoTnVsbDsKKwljb25zdCBjaGFy ICpmb3JtYXROYW1lID0gInAiOwogCXRyaXZhbHVlCXByb21wdF9wYXNzd29yZCA9IFRSSV9ERUZB VUxUOwogCWJvb2wJCWRhdGFfb25seSA9IGZhbHNlOwogCWJvb2wJCWdsb2JhbHNfb25seSA9IGZh bHNlOwpAQCAtMjM3LDcgKzIzOSw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAog CXBnZHVtcG9wdHMgPSBjcmVhdGVQUUV4cEJ1ZmZlcigpOwogCi0Jd2hpbGUgKChjID0gZ2V0b3B0 X2xvbmcoYXJnYywgYXJndiwgImFjZDpFOmY6Z2g6bDpPcDpyc1M6dFU6dndXeCIsIGxvbmdfb3B0 aW9ucywgJm9wdGluZGV4KSkgIT0gLTEpCisJd2hpbGUgKChjID0gZ2V0b3B0X2xvbmcoYXJnYywg YXJndiwgImFjZDpFOmY6RjpnaDpsOk9wOnJzUzp0VTp2d1d4IiwgbG9uZ19vcHRpb25zLCAmb3B0 aW5kZXgpKSAhPSAtMSkKIAl7CiAJCXN3aXRjaCAoYykKIAkJewpAQCAtMjY1LDcgKzI2Nyw5IEBA IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAkJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihw Z2R1bXBvcHRzLCAiIC1mICIpOwogCQkJCWFwcGVuZFNoZWxsU3RyaW5nKHBnZHVtcG9wdHMsIGZp bGVuYW1lKTsKIAkJCQlicmVhazsKLQorCQkJY2FzZSAnRic6CisJCQkJZm9ybWF0TmFtZSA9IHBn X3N0cmR1cChvcHRhcmcpOworCQkJCWJyZWFrOwogCQkJY2FzZSAnZyc6CiAJCQkJZ2xvYmFsc19v bmx5ID0gdHJ1ZTsKIAkJCQlicmVhazsKQEAgLTQxNCw2ICs0MTgsMjEgQEAgbWFpbihpbnQgYXJn YywgY2hhciAqYXJndltdKQogCQlleGl0X25pY2VseSgxKTsKIAl9CiAKKwkvKiBHZXQgZm9ybWF0 IGZvciBkdW1wLiAqLworCWFyY2hEdW1wRm9ybWF0ID0gcGFyc2VEdW1wRm9ybWF0KGZvcm1hdE5h bWUpOworCisJLyoKKwkgKiBJZiBub24tcGxhaW4gZm9ybWF0IGlzIHNwZWNpZmllZCB0aGVuIHdl IG11c3QgcHJvdmlkZSB0aGUKKwkgKiBmaWxlIG5hbWUgdG8gY3JlYXRlIG9uZSBtYWluIGRpcmVj dG9yeS4KKwkgKi8KKwlpZiAoYXJjaER1bXBGb3JtYXQgIT0gYXJjaE51bGwgJiYKKwkJCSghZmls ZW5hbWUgfHwgc3RyY21wKGZpbGVuYW1lLCAiIikgPT0gMCkpCisJeworCQlwZ19sb2dfZXJyb3Io Im9wdGlvbnMgLUYvLS1mb3JtYXQ9ZHxjfHQgcmVxdWlyZXMgb3B0aW9uIC1mLy0tZmlsZSB3aXRo IG5vbi1lbXB0eSBzdHJpbmciKTsKKwkJcGdfbG9nX2Vycm9yX2hpbnQoIlRyeSBcIiVzIC0taGVs cFwiIGZvciBtb3JlIGluZm9ybWF0aW9uLiIsIHByb2duYW1lKTsKKwkJZXhpdF9uaWNlbHkoMSk7 CisJfQorCiAJLyoKIAkgKiBJZiBwYXNzd29yZCB2YWx1ZXMgYXJlIG5vdCByZXF1aXJlZCBpbiB0 aGUgZHVtcCwgc3dpdGNoIHRvIHVzaW5nCiAJICogcGdfcm9sZXMgd2hpY2ggaXMgZXF1YWxseSB1 c2VmdWwsIGp1c3QgbW9yZSBsaWtlbHkgdG8gaGF2ZSB1bnJlc3RyaWN0ZWQKQEAgLTQ2MCw2ICs0 NzksMzMgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCWlmIChvbl9jb25mbGljdF9k b19ub3RoaW5nKQogCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihwZ2R1bXBvcHRzLCAiIC0tb24tY29u ZmxpY3QtZG8tbm90aGluZyIpOwogCisJLyoKKwkgKiBPcGVuIHRoZSBvdXRwdXQgZmlsZSBpZiBy ZXF1aXJlZCwgb3RoZXJ3aXNlIHVzZSBzdGRvdXQuICBJZiByZXF1aXJlZCwKKwkgKiB0aGVuIGNy ZWF0ZSBuZXcgZGlyZWN0b3J5IGFuZCBnbG9iYWwuZGF0IGZpbGUuCisJICovCisJaWYgKGFyY2hE dW1wRm9ybWF0ICE9IGFyY2hOdWxsKQorCXsKKwkJY2hhcgl0b2NfcGF0aFtNQVhQR1BBVEhdOwor CisJCS8qIENyZWF0ZSBuZXcgZGlyZWN0b3J5IG9yIGFjY2VwdCB0aGUgZW1wdHkgZXhpc3Rpbmcg ZGlyZWN0b3J5LiAqLworCQljcmVhdGVfb3Jfb3Blbl9kaXIoZmlsZW5hbWUpOworCisJCXNucHJp bnRmKHRvY19wYXRoLCBNQVhQR1BBVEgsICIlcy9nbG9iYWwuZGF0IiwgZmlsZW5hbWUpOworCisJ CU9QRiA9IGZvcGVuKHRvY19wYXRoLCBQR19CSU5BUllfVyk7CisJCWlmICghT1BGKQorCQkJcGdf ZmF0YWwoImNvdWxkIG5vdCBvcGVuIGdsb2JhbC5kYXQgZmlsZTogJXMiLCBzdHJlcnJvcihlcnJu bykpOworCX0KKwllbHNlIGlmIChmaWxlbmFtZSkKKwl7CisJCU9QRiA9IGZvcGVuKGZpbGVuYW1l LCBQR19CSU5BUllfVyk7CisJCWlmICghT1BGKQorCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBvcGVu IG91dHB1dCBmaWxlIFwiJXNcIjogJW0iLAorCQkJCQkgZmlsZW5hbWUpOworCX0KKwllbHNlCisJ CU9QRiA9IHN0ZG91dDsKKwogCS8qCiAJICogSWYgdGhlcmUgd2FzIGEgZGF0YWJhc2Ugc3BlY2lm aWVkIG9uIHRoZSBjb21tYW5kIGxpbmUsIHVzZSB0aGF0LAogCSAqIG90aGVyd2lzZSB0cnkgdG8g Y29ubmVjdCB0byBkYXRhYmFzZSAicG9zdGdyZXMiLCBhbmQgZmFpbGluZyB0aGF0CkBAIC00Njgs NyArNTE0LDggQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCWlmIChwZ2RiKQogCXsK IAkJY29ubiA9IGNvbm5lY3REYXRhYmFzZShwZ2RiLCBjb25uc3RyLCBwZ2hvc3QsIHBncG9ydCwg cGd1c2VyLAotCQkJCQkJCSAgIHByb21wdF9wYXNzd29yZCwgZmFsc2UpOworCQkJCQkJCSAgIHBy b21wdF9wYXNzd29yZCwgZmFsc2UsCisJCQkJCQkJICAgcHJvZ25hbWUsICZjb25uc3RyLCAmc2Vy dmVyX3ZlcnNpb24pOwogCiAJCWlmICghY29ubikKIAkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgY29u bmVjdCB0byBkYXRhYmFzZSBcIiVzXCIiLCBwZ2RiKTsKQEAgLTQ3NiwxMCArNTIzLDEyIEBAIG1h aW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAllbHNlCiAJewogCQljb25uID0gY29ubmVjdERh dGFiYXNlKCJwb3N0Z3JlcyIsIGNvbm5zdHIsIHBnaG9zdCwgcGdwb3J0LCBwZ3VzZXIsCi0JCQkJ CQkJICAgcHJvbXB0X3Bhc3N3b3JkLCBmYWxzZSk7CisJCQkJCQkJICAgcHJvbXB0X3Bhc3N3b3Jk LCBmYWxzZSwKKwkJCQkJCQkgICBwcm9nbmFtZSwgJmNvbm5zdHIsICZzZXJ2ZXJfdmVyc2lvbik7 CiAJCWlmICghY29ubikKIAkJCWNvbm4gPSBjb25uZWN0RGF0YWJhc2UoInRlbXBsYXRlMSIsIGNv bm5zdHIsIHBnaG9zdCwgcGdwb3J0LCBwZ3VzZXIsCi0JCQkJCQkJCSAgIHByb21wdF9wYXNzd29y ZCwgdHJ1ZSk7CisJCQkJCQkJCSAgIHByb21wdF9wYXNzd29yZCwgdHJ1ZSwKKwkJCQkJCQkJICAg cHJvZ25hbWUsICZjb25uc3RyLCAmc2VydmVyX3ZlcnNpb24pOwogCiAJCWlmICghY29ubikKIAkJ ewpAQCAtNDk2LDE5ICs1NDUsNiBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJZXhw YW5kX2RibmFtZV9wYXR0ZXJucyhjb25uLCAmZGF0YWJhc2VfZXhjbHVkZV9wYXR0ZXJucywKIAkJ CQkJCSAgICZkYXRhYmFzZV9leGNsdWRlX25hbWVzKTsKIAotCS8qCi0JICogT3BlbiB0aGUgb3V0 cHV0IGZpbGUgaWYgcmVxdWlyZWQsIG90aGVyd2lzZSB1c2Ugc3Rkb3V0Ci0JICovCi0JaWYgKGZp bGVuYW1lKQotCXsKLQkJT1BGID0gZm9wZW4oZmlsZW5hbWUsIFBHX0JJTkFSWV9XKTsKLQkJaWYg KCFPUEYpCi0JCQlwZ19mYXRhbCgiY291bGQgbm90IG9wZW4gb3V0cHV0IGZpbGUgXCIlc1wiOiAl bSIsCi0JCQkJCSBmaWxlbmFtZSk7Ci0JfQotCWVsc2UKLQkJT1BGID0gc3Rkb3V0OwotCiAJLyoK IAkgKiBTZXQgdGhlIGNsaWVudCBlbmNvZGluZyBpZiByZXF1ZXN0ZWQuCiAJICovCkBAIC02MDcs NyArNjQzLDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCX0KIAogCWlmICghZ2xv YmFsc19vbmx5ICYmICFyb2xlc19vbmx5ICYmICF0YWJsZXNwYWNlc19vbmx5KQotCQlkdW1wRGF0 YWJhc2VzKGNvbm4pOworCQlkdW1wRGF0YWJhc2VzKGNvbm4sIGFyY2hEdW1wRm9ybWF0KTsKIAog CVBRZmluaXNoKGNvbm4pOwogCkBAIC02MjAsNyArNjU2LDcgQEAgbWFpbihpbnQgYXJnYywgY2hh ciAqYXJndltdKQogCQlmY2xvc2UoT1BGKTsKIAogCQkvKiBzeW5jIHRoZSByZXN1bHRpbmcgZmls ZSwgZXJyb3JzIGFyZSBub3QgZmF0YWwgKi8KLQkJaWYgKGRvc3luYykKKwkJaWYgKGRvc3luYyAm JiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwpKQogCQkJKHZvaWQpIGZzeW5jX2ZuYW1lKGZp bGVuYW1lLCBmYWxzZSk7CiAJfQogCkBAIC02MzEsMTIgKzY2NywxNCBAQCBtYWluKGludCBhcmdj LCBjaGFyICphcmd2W10pCiBzdGF0aWMgdm9pZAogaGVscCh2b2lkKQogewotCXByaW50ZihfKCIl cyBleHRyYWN0cyBhIFBvc3RncmVTUUwgZGF0YWJhc2UgY2x1c3RlciBpbnRvIGFuIFNRTCBzY3Jp cHQgZmlsZS5cblxuIiksIHByb2duYW1lKTsKKwlwcmludGYoXygiJXMgZXh0cmFjdHMgYSBQb3N0 Z3JlU1FMIGRhdGFiYXNlIGNsdXN0ZXIgYmFzZWQgb24gc3BlY2lmaWVkIGR1bXAgZm9ybWF0Llxu XG4iKSwgcHJvZ25hbWUpOwogCXByaW50ZihfKCJVc2FnZTpcbiIpKTsKIAlwcmludGYoXygiICAl cyBbT1BUSU9OXS4uLlxuIiksIHByb2duYW1lKTsKIAogCXByaW50ZihfKCJcbkdlbmVyYWwgb3B0 aW9uczpcbiIpKTsKIAlwcmludGYoXygiICAtZiwgLS1maWxlPUZJTEVOQU1FICAgICAgICAgIG91 dHB1dCBmaWxlIG5hbWVcbiIpKTsKKwlwcmludGYoXygiICAtRiwgLS1mb3JtYXQ9Y3xkfHR8cCAg ICAgICAgIG91dHB1dCBmaWxlIGZvcm1hdCAoY3VzdG9tLCBkaXJlY3RvcnksIHRhcixcbiIKKwkJ CSAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWluIHRleHQgKGRlZmF1bHQpKVxu IikpOwogCXByaW50ZihfKCIgIC12LCAtLXZlcmJvc2UgICAgICAgICAgICAgICAgdmVyYm9zZSBt b2RlXG4iKSk7CiAJcHJpbnRmKF8oIiAgLVYsIC0tdmVyc2lvbiAgICAgICAgICAgICAgICBvdXRw dXQgdmVyc2lvbiBpbmZvcm1hdGlvbiwgdGhlbiBleGl0XG4iKSk7CiAJcHJpbnRmKF8oIiAgLS1s b2NrLXdhaXQtdGltZW91dD1USU1FT1VUICBmYWlsIGFmdGVyIHdhaXRpbmcgVElNRU9VVCBmb3Ig YSB0YWJsZSBsb2NrXG4iKSk7CkBAIC0xNDg3LDEwICsxNTI1LDEzIEBAIGV4cGFuZF9kYm5hbWVf cGF0dGVybnMoUEdjb25uICpjb25uLAogICogRHVtcCBjb250ZW50cyBvZiBkYXRhYmFzZXMuCiAg Ki8KIHN0YXRpYyB2b2lkCi1kdW1wRGF0YWJhc2VzKFBHY29ubiAqY29ubikKK2R1bXBEYXRhYmFz ZXMoUEdjb25uICpjb25uLCBBcmNoaXZlRm9ybWF0IGFyY2hEdW1wRm9ybWF0KQogewogCVBHcmVz dWx0ICAgKnJlczsKIAlpbnQJCQlpOworCWNoYXIJCWRiX3N1YmRpcltNQVhQR1BBVEhdOworCWNo YXIJCWRiZmlsZXBhdGhbTUFYUEdQQVRIXTsKKwlGSUxFICAgICAgICptYXBfZmlsZSA9IE5VTEw7 CiAKIAkvKgogCSAqIFNraXAgZGF0YWJhc2VzIG1hcmtlZCBub3QgZGF0YWxsb3djb25uLCBzaW5j ZSB3ZSdkIGJlIHVuYWJsZSB0byBjb25uZWN0CkBAIC0xNTA0LDcgKzE1NDUsNyBAQCBkdW1wRGF0 YWJhc2VzKFBHY29ubiAqY29ubikKIAkgKiBkb2Vzbid0IGhhdmUgc29tZSBmYWlsdXJlIG1vZGUg d2l0aCAtLWNsZWFuLgogCSAqLwogCXJlcyA9IGV4ZWN1dGVRdWVyeShjb25uLAotCQkJCQkgICAi U0VMRUNUIGRhdG5hbWUgIgorCQkJCQkgICAiU0VMRUNUIGRhdG5hbWUsIG9pZCAiCiAJCQkJCSAg ICJGUk9NIHBnX2RhdGFiYXNlIGQgIgogCQkJCQkgICAiV0hFUkUgZGF0YWxsb3djb25uIEFORCBk YXRjb25ubGltaXQgIT0gLTIgIgogCQkJCQkgICAiT1JERVIgQlkgKGRhdG5hbWUgPD4gJ3RlbXBs YXRlMScpLCBkYXRuYW1lIik7CkBAIC0xNTEyLDkgKzE1NTMsMzMgQEAgZHVtcERhdGFiYXNlcyhQ R2Nvbm4gKmNvbm4pCiAJaWYgKFBRbnR1cGxlcyhyZXMpID4gMCkKIAkJZnByaW50ZihPUEYsICIt LVxuLS0gRGF0YWJhc2VzXG4tLVxuXG4iKTsKIAorCS8qCisJICogSWYgZGlyZWN0b3J5L3Rhci9j dXN0b20gZm9ybWF0IGlzIHNwZWNpZmllZCB0aGVuIGNyZWF0ZSBhIHN1YmRpcmVjdG9yeQorCSAq IHVuZGVyIHRoZSBtYWluIGRpcmVjdG9yeSBhbmQgZWFjaCBkYXRhYmFzZSBkdW1wIGZpbGUgc3Vi ZGlyZWN0b3J5IHdpbGwKKwkgKiBiZSBjcmVhdGVkIHVuZGVyIHRoZSBzdWJkaXJlY3RvcnkgaW4g YXJjaGl2ZSBtb2RlIGFzIHBlciBzaW5nbGUgZGIgcGdfZHVtcC4KKwkgKi8KKwlpZiAoYXJjaER1 bXBGb3JtYXQgIT0gYXJjaE51bGwpCisJeworCQljaGFyCW1hcF9maWxlX3BhdGhbTUFYUEdQQVRI XTsKKworCQlzbnByaW50ZihkYl9zdWJkaXIsIE1BWFBHUEFUSCwgIiVzL2RhdGFiYXNlcyIsIGZp bGVuYW1lKTsKKworCQkvKiBDcmVhdGUgYSBzdWJkaXJlY3Rvcnkgd2l0aCAnZGF0YWJhc2VzJyBu YW1lIHVuZGVyIG1haW4gZGlyZWN0b3J5LiAqLworCQlpZiAobWtkaXIoZGJfc3ViZGlyLCAwNzU1 KSAhPSAwKQorCQkJcGdfbG9nX2Vycm9yKCJjb3VsZCBub3QgY3JlYXRlIHN1YmRpcmVjdG9yeSBc IiVzXCI6ICVtIiwgZGJfc3ViZGlyKTsKKworCQlzbnByaW50ZihtYXBfZmlsZV9wYXRoLCBNQVhQ R1BBVEgsICIlcy9tYXAuZGF0IiwgZmlsZW5hbWUpOworCisJCS8qIENyZWF0ZSBhIG1hcCBmaWxl ICh0byBzdG9yZSBkYm9pZCBhbmQgZGJuYW1lKSAqLworCQltYXBfZmlsZSA9IGZvcGVuKG1hcF9m aWxlX3BhdGgsIFBHX0JJTkFSWV9XKTsKKwkJaWYgKCFtYXBfZmlsZSkKKwkJCXBnX2ZhdGFsKCJj b3VsZCBub3Qgb3BlbiBtYXAgZmlsZTogJXMiLCBzdHJlcnJvcihlcnJubykpOworCX0KKwogCWZv ciAoaSA9IDA7IGkgPCBQUW50dXBsZXMocmVzKTsgaSsrKQogCXsKIAkJY2hhcgkgICAqZGJuYW1l ID0gUFFnZXR2YWx1ZShyZXMsIGksIDApOworCQljaGFyCSAgICpvaWQgPSBQUWdldHZhbHVlKHJl cywgaSwgMSk7CiAJCWNvbnN0IGNoYXIgKmNyZWF0ZV9vcHRzOwogCQlpbnQJCQlyZXQ7CiAKQEAg LTE1MjksNiArMTU5NCwxOCBAQCBkdW1wRGF0YWJhc2VzKFBHY29ubiAqY29ubikKIAkJCWNvbnRp bnVlOwogCQl9CiAKKwkJLyoKKwkJICogSWYgdGhpcyBpcyBub24tcGxhaW4gZHVtcCBmb3JtYXQs IHRoZW4gYXBwZW5kIGRib2lkIGFuZCBkYm5hbWUgdG8KKwkJICogdGhlIG1hcC5kYXQgZmlsZS4K KwkJICovCisJCWlmIChhcmNoRHVtcEZvcm1hdCAhPSBhcmNoTnVsbCkKKwkJeworCQkJc25wcmlu dGYoZGJmaWxlcGF0aCwgTUFYUEdQQVRILCAiXCIlc1wiL1wiJXNcIiIsIGRiX3N1YmRpciwgb2lk KTsKKworCQkJLyogUHV0IG9uZSBsaW5lIGVudHJ5IGZvciBkYm9pZCBhbmQgZGJuYW1lIGluIG1h cCBmaWxlLiAqLworCQkJZnByaW50ZihtYXBfZmlsZSwgIiVzICVzXG4iLCBvaWQsIHBnX3N0cmR1 cChkYm5hbWUpKTsKKwkJfQorCiAJCXBnX2xvZ19pbmZvKCJkdW1waW5nIGRhdGFiYXNlIFwiJXNc IiIsIGRibmFtZSk7CiAKIAkJZnByaW50ZihPUEYsICItLVxuLS0gRGF0YWJhc2UgXCIlc1wiIGR1 bXBcbi0tXG5cbiIsIGRibmFtZSk7CkBAIC0xNTQ3LDkgKzE2MjQsMTcgQEAgZHVtcERhdGFiYXNl cyhQR2Nvbm4gKmNvbm4pCiAJCQkJY3JlYXRlX29wdHMgPSAiLS1jbGVhbiAtLWNyZWF0ZSI7CiAJ CQllbHNlCiAJCQl7Ci0JCQkJY3JlYXRlX29wdHMgPSAiIjsKIAkJCQkvKiBTaW5jZSBwZ19kdW1w IHdvbid0IGVtaXQgYSBcY29ubmVjdCBjb21tYW5kLCB3ZSBtdXN0ICovCi0JCQkJZnByaW50ZihP UEYsICJcXGNvbm5lY3QgJXNcblxuIiwgZGJuYW1lKTsKKwkJCQlpZiAoYXJjaER1bXBGb3JtYXQg PT0gYXJjaE51bGwpCisJCQkJeworCQkJCQljcmVhdGVfb3B0cyA9ICIiOworCQkJCQlmcHJpbnRm KE9QRiwgIlxcY29ubmVjdCAlc1xuXG4iLCBkYm5hbWUpOworCQkJCX0KKwkJCQllbHNlCisJCQkJ eworCQkJCQkvKiBEdW1waW5nIGFsbCBkYXRhYmFzZXMgc28gYWRkIC0tY3JlYXRlIG9wdGlvbi4g Ki8KKwkJCQkJY3JlYXRlX29wdHMgPSAiLS1jcmVhdGUiOworCQkJCX0KIAkJCX0KIAkJfQogCQll bHNlCkBAIC0xNTU4LDE5ICsxNjQzLDMwIEBAIGR1bXBEYXRhYmFzZXMoUEdjb25uICpjb25uKQog CQlpZiAoZmlsZW5hbWUpCiAJCQlmY2xvc2UoT1BGKTsKIAotCQlyZXQgPSBydW5QZ0R1bXAoZGJu YW1lLCBjcmVhdGVfb3B0cyk7CisJCXJldCA9IHJ1blBnRHVtcChkYm5hbWUsIGNyZWF0ZV9vcHRz LCBkYmZpbGVwYXRoLCBhcmNoRHVtcEZvcm1hdCk7CiAJCWlmIChyZXQgIT0gMCkKIAkJCXBnX2Zh dGFsKCJwZ19kdW1wIGZhaWxlZCBvbiBkYXRhYmFzZSBcIiVzXCIsIGV4aXRpbmciLCBkYm5hbWUp OwogCiAJCWlmIChmaWxlbmFtZSkKIAkJewotCQkJT1BGID0gZm9wZW4oZmlsZW5hbWUsIFBHX0JJ TkFSWV9BKTsKKwkJCWNoYXIJdG9jX3BhdGhbTUFYUEdQQVRIXTsKKworCQkJaWYgKGFyY2hEdW1w Rm9ybWF0ICE9IGFyY2hOdWxsKQorCQkJCXNucHJpbnRmKHRvY19wYXRoLCBNQVhQR1BBVEgsICIl cy9nbG9iYWwuZGF0IiwgZmlsZW5hbWUpOworCQkJZWxzZQorCQkJCXNucHJpbnRmKHRvY19wYXRo LCBNQVhQR1BBVEgsICIlcyIsIGZpbGVuYW1lKTsKKworCQkJT1BGID0gZm9wZW4odG9jX3BhdGgs IFBHX0JJTkFSWV9BKTsKIAkJCWlmICghT1BGKQogCQkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgcmUt b3BlbiB0aGUgb3V0cHV0IGZpbGUgXCIlc1wiOiAlbSIsCi0JCQkJCQkgZmlsZW5hbWUpOworCQkJ CQkJIHRvY19wYXRoKTsKIAkJfQogCX0KIAorCS8qIENsb3NlIG1hcCBmaWxlICovCisJaWYgKGFy Y2hEdW1wRm9ybWF0ICE9IGFyY2hOdWxsKQorCQlmY2xvc2UobWFwX2ZpbGUpOworCiAJUFFjbGVh cihyZXMpOwogfQogCkBAIC0xNTgwLDcgKzE2NzYsOCBAQCBkdW1wRGF0YWJhc2VzKFBHY29ubiAq Y29ubikKICAqIFJ1biBwZ19kdW1wIG9uIGRibmFtZSwgd2l0aCBzcGVjaWZpZWQgb3B0aW9ucy4K ICAqLwogc3RhdGljIGludAotcnVuUGdEdW1wKGNvbnN0IGNoYXIgKmRibmFtZSwgY29uc3QgY2hh ciAqY3JlYXRlX29wdHMpCitydW5QZ0R1bXAoY29uc3QgY2hhciAqZGJuYW1lLCBjb25zdCBjaGFy ICpjcmVhdGVfb3B0cywgY2hhciAqZGJmaWxlLAorCQlBcmNoaXZlRm9ybWF0IGFyY2hEdW1wRm9y bWF0KQogewogCVBRRXhwQnVmZmVyRGF0YSBjb25uc3RyYnVmOwogCVBRRXhwQnVmZmVyRGF0YSBj bWQ7CkBAIC0xNTg5LDE3ICsxNjg2LDM2IEBAIHJ1blBnRHVtcChjb25zdCBjaGFyICpkYm5hbWUs IGNvbnN0IGNoYXIgKmNyZWF0ZV9vcHRzKQogCWluaXRQUUV4cEJ1ZmZlcigmY29ubnN0cmJ1Zik7 CiAJaW5pdFBRRXhwQnVmZmVyKCZjbWQpOwogCi0JcHJpbnRmUFFFeHBCdWZmZXIoJmNtZCwgIlwi JXNcIiAlcyAlcyIsIHBnX2R1bXBfYmluLAotCQkJCQkgIHBnZHVtcG9wdHMtPmRhdGEsIGNyZWF0 ZV9vcHRzKTsKLQogCS8qCi0JICogSWYgd2UgaGF2ZSBhIGZpbGVuYW1lLCB1c2UgdGhlIHVuZG9j dW1lbnRlZCBwbGFpbi1hcHBlbmQgcGdfZHVtcAotCSAqIGZvcm1hdC4KKwkgKiBJZiB0aGlzIGlz IG5vbi1wbGFpbiBmb3JtYXQgZHVtcCwgdGhlbiBhcHBlbmQgZmlsZSBuYW1lIGFuZCBkdW1wCisJ ICogZm9ybWF0IHRvIHRoZSBwZ19kdW1wIGNvbW1hbmQgdG8gZ2V0IGFyY2hpdmUgZHVtcC4KIAkg Ki8KLQlpZiAoZmlsZW5hbWUpCi0JCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZjbWQsICIgLUZhICIp OworCWlmIChhcmNoRHVtcEZvcm1hdCAhPSBhcmNoTnVsbCkKKwl7CisJCXByaW50ZlBRRXhwQnVm ZmVyKCZjbWQsICJcIiVzXCIgLWYgJXMgJXMiLCBwZ19kdW1wX2JpbiwKKwkJCQkJCSAgZGJmaWxl LCBjcmVhdGVfb3B0cyk7CisKKwkJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hEaXJlY3Rvcnkp CisJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmY21kLCAiICAtLWZvcm1hdD1kaXJlY3RvcnkgIik7 CisJCWVsc2UgaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hDdXN0b20pCisJCQlhcHBlbmRQUUV4 cEJ1ZmZlclN0cigmY21kLCAiICAtLWZvcm1hdD1jdXN0b20gIik7CisJCWVsc2UgaWYgKGFyY2hE dW1wRm9ybWF0ID09IGFyY2hUYXIpCisJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmY21kLCAiICAt LWZvcm1hdD10YXIgIik7CisJfQogCWVsc2UKLQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmNtZCwg IiAtRnAgIik7CisJeworCQlwcmludGZQUUV4cEJ1ZmZlcigmY21kLCAiXCIlc1wiICVzICVzIiwg cGdfZHVtcF9iaW4sCisJCQkJCQlwZ2R1bXBvcHRzLT5kYXRhLCBjcmVhdGVfb3B0cyk7CisKKwkJ LyoKKwkJKiBJZiB3ZSBoYXZlIGEgZmlsZW5hbWUsIHVzZSB0aGUgdW5kb2N1bWVudGVkIHBsYWlu LWFwcGVuZCBwZ19kdW1wCisJCSogZm9ybWF0LgorCQkqLworCQlpZiAoZmlsZW5hbWUpCisJCQlh cHBlbmRQUUV4cEJ1ZmZlclN0cigmY21kLCAiIC1GYSAiKTsKKwkJZWxzZQorCQkJYXBwZW5kUFFF eHBCdWZmZXJTdHIoJmNtZCwgIiAtRnAgIik7CisJfQogCiAJLyoKIAkgKiBBcHBlbmQgdGhlIGRh dGFiYXNlIG5hbWUgdG8gdGhlIGFscmVhZHktY29uc3RydWN0ZWQgc3RlbSBvZiBjb25uZWN0aW9u CkBAIC0xNjQ5LDI1NiArMTc2NSw2IEBAIGJ1aWxkU2hTZWNMYWJlbHMoUEdjb25uICpjb25uLCBj b25zdCBjaGFyICpjYXRhbG9nX25hbWUsIE9pZCBvYmplY3RJZCwKIAlkZXN0cm95UFFFeHBCdWZm ZXIoc3FsKTsKIH0KIAotLyoKLSAqIE1ha2UgYSBkYXRhYmFzZSBjb25uZWN0aW9uIHdpdGggdGhl IGdpdmVuIHBhcmFtZXRlcnMuICBBbgotICogaW50ZXJhY3RpdmUgcGFzc3dvcmQgcHJvbXB0IGlz IGF1dG9tYXRpY2FsbHkgaXNzdWVkIGlmIHJlcXVpcmVkLgotICoKLSAqIElmIGZhaWxfb25fZXJy b3IgaXMgZmFsc2UsIHdlIHJldHVybiBOVUxMIHdpdGhvdXQgcHJpbnRpbmcgYW55IG1lc3NhZ2UK LSAqIG9uIGZhaWx1cmUsIGJ1dCBwcmVzZXJ2ZSBhbnkgcHJvbXB0ZWQgcGFzc3dvcmQgZm9yIHRo ZSBuZXh0IHRyeS4KLSAqCi0gKiBPbiBzdWNjZXNzLCB0aGUgZ2xvYmFsIHZhcmlhYmxlICdjb25u c3RyJyBpcyBzZXQgdG8gYSBjb25uZWN0aW9uIHN0cmluZwotICogY29udGFpbmluZyB0aGUgb3B0 aW9ucyB1c2VkLgotICovCi1zdGF0aWMgUEdjb25uICoKLWNvbm5lY3REYXRhYmFzZShjb25zdCBj aGFyICpkYm5hbWUsIGNvbnN0IGNoYXIgKmNvbm5lY3Rpb25fc3RyaW5nLAotCQkJCWNvbnN0IGNo YXIgKnBnaG9zdCwgY29uc3QgY2hhciAqcGdwb3J0LCBjb25zdCBjaGFyICpwZ3VzZXIsCi0JCQkJ dHJpdmFsdWUgcHJvbXB0X3Bhc3N3b3JkLCBib29sIGZhaWxfb25fZXJyb3IpCi17Ci0JUEdjb25u CSAgICpjb25uOwotCWJvb2wJCW5ld19wYXNzOwotCWNvbnN0IGNoYXIgKnJlbW90ZXZlcnNpb25f c3RyOwotCWludAkJCW15X3ZlcnNpb247Ci0JY29uc3QgY2hhciAqKmtleXdvcmRzID0gTlVMTDsK LQljb25zdCBjaGFyICoqdmFsdWVzID0gTlVMTDsKLQlQUWNvbm5pbmZvT3B0aW9uICpjb25uX29w dHMgPSBOVUxMOwotCXN0YXRpYyBjaGFyICpwYXNzd29yZCA9IE5VTEw7Ci0KLQlpZiAocHJvbXB0 X3Bhc3N3b3JkID09IFRSSV9ZRVMgJiYgIXBhc3N3b3JkKQotCQlwYXNzd29yZCA9IHNpbXBsZV9w cm9tcHQoIlBhc3N3b3JkOiAiLCBmYWxzZSk7Ci0KLQkvKgotCSAqIFN0YXJ0IHRoZSBjb25uZWN0 aW9uLiAgTG9vcCB1bnRpbCB3ZSBoYXZlIGEgcGFzc3dvcmQgaWYgcmVxdWVzdGVkIGJ5Ci0JICog YmFja2VuZC4KLQkgKi8KLQlkbwotCXsKLQkJaW50CQkJYXJnY291bnQgPSA2OwotCQlQUWNvbm5p bmZvT3B0aW9uICpjb25uX29wdDsKLQkJY2hhcgkgICAqZXJyX21zZyA9IE5VTEw7Ci0JCWludAkJ CWkgPSAwOwotCi0JCWZyZWUoa2V5d29yZHMpOwotCQlmcmVlKHZhbHVlcyk7Ci0JCVBRY29ubmlu Zm9GcmVlKGNvbm5fb3B0cyk7Ci0KLQkJLyoKLQkJICogTWVyZ2UgdGhlIGNvbm5lY3Rpb24gaW5m byBpbnB1dHMgZ2l2ZW4gaW4gZm9ybSBvZiBjb25uZWN0aW9uIHN0cmluZwotCQkgKiBhbmQgb3Ro ZXIgb3B0aW9ucy4gIEV4cGxpY2l0bHkgZGlzY2FyZCBhbnkgZGJuYW1lIHZhbHVlIGluIHRoZQot CQkgKiBjb25uZWN0aW9uIHN0cmluZzsgb3RoZXJ3aXNlLCBQUWNvbm5lY3RkYlBhcmFtcygpIHdv dWxkIGludGVycHJldAotCQkgKiB0aGF0IHZhbHVlIGFzIGJlaW5nIGl0c2VsZiBhIGNvbm5lY3Rp b24gc3RyaW5nLgotCQkgKi8KLQkJaWYgKGNvbm5lY3Rpb25fc3RyaW5nKQotCQl7Ci0JCQljb25u X29wdHMgPSBQUWNvbm5pbmZvUGFyc2UoY29ubmVjdGlvbl9zdHJpbmcsICZlcnJfbXNnKTsKLQkJ CWlmIChjb25uX29wdHMgPT0gTlVMTCkKLQkJCQlwZ19mYXRhbCgiJXMiLCBlcnJfbXNnKTsKLQot CQkJZm9yIChjb25uX29wdCA9IGNvbm5fb3B0czsgY29ubl9vcHQtPmtleXdvcmQgIT0gTlVMTDsg Y29ubl9vcHQrKykKLQkJCXsKLQkJCQlpZiAoY29ubl9vcHQtPnZhbCAhPSBOVUxMICYmIGNvbm5f b3B0LT52YWxbMF0gIT0gJ1wwJyAmJgotCQkJCQlzdHJjbXAoY29ubl9vcHQtPmtleXdvcmQsICJk Ym5hbWUiKSAhPSAwKQotCQkJCQlhcmdjb3VudCsrOwotCQkJfQotCi0JCQlrZXl3b3JkcyA9IHBn X21hbGxvYzAoKGFyZ2NvdW50ICsgMSkgKiBzaXplb2YoKmtleXdvcmRzKSk7Ci0JCQl2YWx1ZXMg PSBwZ19tYWxsb2MwKChhcmdjb3VudCArIDEpICogc2l6ZW9mKCp2YWx1ZXMpKTsKLQotCQkJZm9y IChjb25uX29wdCA9IGNvbm5fb3B0czsgY29ubl9vcHQtPmtleXdvcmQgIT0gTlVMTDsgY29ubl9v cHQrKykKLQkJCXsKLQkJCQlpZiAoY29ubl9vcHQtPnZhbCAhPSBOVUxMICYmIGNvbm5fb3B0LT52 YWxbMF0gIT0gJ1wwJyAmJgotCQkJCQlzdHJjbXAoY29ubl9vcHQtPmtleXdvcmQsICJkYm5hbWUi KSAhPSAwKQotCQkJCXsKLQkJCQkJa2V5d29yZHNbaV0gPSBjb25uX29wdC0+a2V5d29yZDsKLQkJ CQkJdmFsdWVzW2ldID0gY29ubl9vcHQtPnZhbDsKLQkJCQkJaSsrOwotCQkJCX0KLQkJCX0KLQkJ fQotCQllbHNlCi0JCXsKLQkJCWtleXdvcmRzID0gcGdfbWFsbG9jMCgoYXJnY291bnQgKyAxKSAq IHNpemVvZigqa2V5d29yZHMpKTsKLQkJCXZhbHVlcyA9IHBnX21hbGxvYzAoKGFyZ2NvdW50ICsg MSkgKiBzaXplb2YoKnZhbHVlcykpOwotCQl9Ci0KLQkJaWYgKHBnaG9zdCkKLQkJewotCQkJa2V5 d29yZHNbaV0gPSAiaG9zdCI7Ci0JCQl2YWx1ZXNbaV0gPSBwZ2hvc3Q7Ci0JCQlpKys7Ci0JCX0K LQkJaWYgKHBncG9ydCkKLQkJewotCQkJa2V5d29yZHNbaV0gPSAicG9ydCI7Ci0JCQl2YWx1ZXNb aV0gPSBwZ3BvcnQ7Ci0JCQlpKys7Ci0JCX0KLQkJaWYgKHBndXNlcikKLQkJewotCQkJa2V5d29y ZHNbaV0gPSAidXNlciI7Ci0JCQl2YWx1ZXNbaV0gPSBwZ3VzZXI7Ci0JCQlpKys7Ci0JCX0KLQkJ aWYgKHBhc3N3b3JkKQotCQl7Ci0JCQlrZXl3b3Jkc1tpXSA9ICJwYXNzd29yZCI7Ci0JCQl2YWx1 ZXNbaV0gPSBwYXNzd29yZDsKLQkJCWkrKzsKLQkJfQotCQlpZiAoZGJuYW1lKQotCQl7Ci0JCQlr ZXl3b3Jkc1tpXSA9ICJkYm5hbWUiOwotCQkJdmFsdWVzW2ldID0gZGJuYW1lOwotCQkJaSsrOwot CQl9Ci0JCWtleXdvcmRzW2ldID0gImZhbGxiYWNrX2FwcGxpY2F0aW9uX25hbWUiOwotCQl2YWx1 ZXNbaV0gPSBwcm9nbmFtZTsKLQkJaSsrOwotCi0JCW5ld19wYXNzID0gZmFsc2U7Ci0JCWNvbm4g PSBQUWNvbm5lY3RkYlBhcmFtcyhrZXl3b3JkcywgdmFsdWVzLCB0cnVlKTsKLQotCQlpZiAoIWNv bm4pCi0JCQlwZ19mYXRhbCgiY291bGQgbm90IGNvbm5lY3QgdG8gZGF0YWJhc2UgXCIlc1wiIiwg ZGJuYW1lKTsKLQotCQlpZiAoUFFzdGF0dXMoY29ubikgPT0gQ09OTkVDVElPTl9CQUQgJiYKLQkJ CVBRY29ubmVjdGlvbk5lZWRzUGFzc3dvcmQoY29ubikgJiYKLQkJCSFwYXNzd29yZCAmJgotCQkJ cHJvbXB0X3Bhc3N3b3JkICE9IFRSSV9OTykKLQkJewotCQkJUFFmaW5pc2goY29ubik7Ci0JCQlw YXNzd29yZCA9IHNpbXBsZV9wcm9tcHQoIlBhc3N3b3JkOiAiLCBmYWxzZSk7Ci0JCQluZXdfcGFz cyA9IHRydWU7Ci0JCX0KLQl9IHdoaWxlIChuZXdfcGFzcyk7Ci0KLQkvKiBjaGVjayB0byBzZWUg dGhhdCB0aGUgYmFja2VuZCBjb25uZWN0aW9uIHdhcyBzdWNjZXNzZnVsbHkgbWFkZSAqLwotCWlm IChQUXN0YXR1cyhjb25uKSA9PSBDT05ORUNUSU9OX0JBRCkKLQl7Ci0JCWlmIChmYWlsX29uX2Vy cm9yKQotCQkJcGdfZmF0YWwoIiVzIiwgUFFlcnJvck1lc3NhZ2UoY29ubikpOwotCQllbHNlCi0J CXsKLQkJCVBRZmluaXNoKGNvbm4pOwotCi0JCQlmcmVlKGtleXdvcmRzKTsKLQkJCWZyZWUodmFs dWVzKTsKLQkJCVBRY29ubmluZm9GcmVlKGNvbm5fb3B0cyk7Ci0KLQkJCXJldHVybiBOVUxMOwot CQl9Ci0JfQotCi0JLyoKLQkgKiBPaywgY29ubmVjdGVkIHN1Y2Nlc3NmdWxseS4gUmVtZW1iZXIg dGhlIG9wdGlvbnMgdXNlZCwgaW4gdGhlIGZvcm0gb2YgYQotCSAqIGNvbm5lY3Rpb24gc3RyaW5n LgotCSAqLwotCWNvbm5zdHIgPSBjb25zdHJ1Y3RDb25uU3RyKGtleXdvcmRzLCB2YWx1ZXMpOwot Ci0JZnJlZShrZXl3b3Jkcyk7Ci0JZnJlZSh2YWx1ZXMpOwotCVBRY29ubmluZm9GcmVlKGNvbm5f b3B0cyk7Ci0KLQkvKiBDaGVjayB2ZXJzaW9uICovCi0JcmVtb3RldmVyc2lvbl9zdHIgPSBQUXBh cmFtZXRlclN0YXR1cyhjb25uLCAic2VydmVyX3ZlcnNpb24iKTsKLQlpZiAoIXJlbW90ZXZlcnNp b25fc3RyKQotCQlwZ19mYXRhbCgiY291bGQgbm90IGdldCBzZXJ2ZXIgdmVyc2lvbiIpOwotCXNl cnZlcl92ZXJzaW9uID0gUFFzZXJ2ZXJWZXJzaW9uKGNvbm4pOwotCWlmIChzZXJ2ZXJfdmVyc2lv biA9PSAwKQotCQlwZ19mYXRhbCgiY291bGQgbm90IHBhcnNlIHNlcnZlciB2ZXJzaW9uIFwiJXNc IiIsCi0JCQkJIHJlbW90ZXZlcnNpb25fc3RyKTsKLQotCW15X3ZlcnNpb24gPSBQR19WRVJTSU9O X05VTTsKLQotCS8qCi0JICogV2UgYWxsb3cgdGhlIHNlcnZlciB0byBiZSBiYWNrIHRvIDkuMiwg YW5kIHVwIHRvIGFueSBtaW5vciByZWxlYXNlIG9mCi0JICogb3VyIG93biBtYWpvciB2ZXJzaW9u LiAgKFNlZSBhbHNvIHZlcnNpb24gY2hlY2sgaW4gcGdfZHVtcC5jLikKLQkgKi8KLQlpZiAobXlf dmVyc2lvbiAhPSBzZXJ2ZXJfdmVyc2lvbgotCQkmJiAoc2VydmVyX3ZlcnNpb24gPCA5MDIwMCB8 fAotCQkJKHNlcnZlcl92ZXJzaW9uIC8gMTAwKSA+IChteV92ZXJzaW9uIC8gMTAwKSkpCi0Jewot CQlwZ19sb2dfZXJyb3IoImFib3J0aW5nIGJlY2F1c2Ugb2Ygc2VydmVyIHZlcnNpb24gbWlzbWF0 Y2giKTsKLQkJcGdfbG9nX2Vycm9yX2RldGFpbCgic2VydmVyIHZlcnNpb246ICVzOyAlcyB2ZXJz aW9uOiAlcyIsCi0JCQkJCQkJcmVtb3RldmVyc2lvbl9zdHIsIHByb2duYW1lLCBQR19WRVJTSU9O KTsKLQkJZXhpdF9uaWNlbHkoMSk7Ci0JfQotCi0JUFFjbGVhcihleGVjdXRlUXVlcnkoY29ubiwg QUxXQVlTX1NFQ1VSRV9TRUFSQ0hfUEFUSF9TUUwpKTsKLQotCXJldHVybiBjb25uOwotfQotCi0v KiAtLS0tLS0tLS0tCi0gKiBDb25zdHJ1Y3QgYSBjb25uZWN0aW9uIHN0cmluZyBmcm9tIHRoZSBn aXZlbiBrZXl3b3JkL3ZhbHVlIHBhaXJzLiBJdCBpcwotICogdXNlZCB0byBwYXNzIHRoZSBjb25u ZWN0aW9uIG9wdGlvbnMgdG8gdGhlIHBnX2R1bXAgc3VicHJvY2Vzcy4KLSAqCi0gKiBUaGUgZm9s bG93aW5nIHBhcmFtZXRlcnMgYXJlIGV4Y2x1ZGVkOgotICoJZGJuYW1lCQktIHZhcmllcyBpbiBl YWNoIHBnX2R1bXAgaW52b2NhdGlvbgotICoJcGFzc3dvcmQJLSBpdCdzIG5vdCBzZWN1cmUgdG8g cGFzcyBhIHBhc3N3b3JkIG9uIHRoZSBjb21tYW5kIGxpbmUKLSAqCWZhbGxiYWNrX2FwcGxpY2F0 aW9uX25hbWUgLSB3ZSdsbCBsZXQgcGdfZHVtcCBzZXQgaXQKLSAqIC0tLS0tLS0tLS0KLSAqLwot c3RhdGljIGNoYXIgKgotY29uc3RydWN0Q29ublN0cihjb25zdCBjaGFyICoqa2V5d29yZHMsIGNv bnN0IGNoYXIgKip2YWx1ZXMpCi17Ci0JUFFFeHBCdWZmZXIgYnVmID0gY3JlYXRlUFFFeHBCdWZm ZXIoKTsKLQljaGFyCSAgICpjb25uc3RyOwotCWludAkJCWk7Ci0JYm9vbAkJZmlyc3RrZXl3b3Jk ID0gdHJ1ZTsKLQotCS8qIENvbnN0cnVjdCBhIG5ldyBjb25uZWN0aW9uIHN0cmluZyBpbiBrZXk9 J3ZhbHVlJyBmb3JtYXQuICovCi0JZm9yIChpID0gMDsga2V5d29yZHNbaV0gIT0gTlVMTDsgaSsr KQotCXsKLQkJaWYgKHN0cmNtcChrZXl3b3Jkc1tpXSwgImRibmFtZSIpID09IDAgfHwKLQkJCXN0 cmNtcChrZXl3b3Jkc1tpXSwgInBhc3N3b3JkIikgPT0gMCB8fAotCQkJc3RyY21wKGtleXdvcmRz W2ldLCAiZmFsbGJhY2tfYXBwbGljYXRpb25fbmFtZSIpID09IDApCi0JCQljb250aW51ZTsKLQot CQlpZiAoIWZpcnN0a2V5d29yZCkKLQkJCWFwcGVuZFBRRXhwQnVmZmVyQ2hhcihidWYsICcgJyk7 Ci0JCWZpcnN0a2V5d29yZCA9IGZhbHNlOwotCQlhcHBlbmRQUUV4cEJ1ZmZlcihidWYsICIlcz0i LCBrZXl3b3Jkc1tpXSk7Ci0JCWFwcGVuZENvbm5TdHJWYWwoYnVmLCB2YWx1ZXNbaV0pOwotCX0K LQotCWNvbm5zdHIgPSBwZ19zdHJkdXAoYnVmLT5kYXRhKTsKLQlkZXN0cm95UFFFeHBCdWZmZXIo YnVmKTsKLQlyZXR1cm4gY29ubnN0cjsKLX0KLQotLyoKLSAqIFJ1biBhIHF1ZXJ5LCByZXR1cm4g dGhlIHJlc3VsdHMsIGV4aXQgcHJvZ3JhbSBvbiBmYWlsdXJlLgotICovCi1zdGF0aWMgUEdyZXN1 bHQgKgotZXhlY3V0ZVF1ZXJ5KFBHY29ubiAqY29ubiwgY29uc3QgY2hhciAqcXVlcnkpCi17Ci0J UEdyZXN1bHQgICAqcmVzOwotCi0JcGdfbG9nX2luZm8oImV4ZWN1dGluZyAlcyIsIHF1ZXJ5KTsK LQotCXJlcyA9IFBRZXhlYyhjb25uLCBxdWVyeSk7Ci0JaWYgKCFyZXMgfHwKLQkJUFFyZXN1bHRT dGF0dXMocmVzKSAhPSBQR1JFU19UVVBMRVNfT0spCi0JewotCQlwZ19sb2dfZXJyb3IoInF1ZXJ5 IGZhaWxlZDogJXMiLCBQUWVycm9yTWVzc2FnZShjb25uKSk7Ci0JCXBnX2xvZ19lcnJvcl9kZXRh aWwoIlF1ZXJ5IHdhczogJXMiLCBxdWVyeSk7Ci0JCVBRZmluaXNoKGNvbm4pOwotCQlleGl0X25p Y2VseSgxKTsKLQl9Ci0KLQlyZXR1cm4gcmVzOwotfQotCiAvKgogICogQXMgYWJvdmUgZm9yIGEg U1FMIGNvbW1hbmQgKHdoaWNoIHJldHVybnMgbm90aGluZykuCiAgKi8KQEAgLTE5OTQsMyArMTg2 MCw5MSBAQCByZWFkX2R1bXBhbGxfZmlsdGVycyhjb25zdCBjaGFyICpmaWxlbmFtZSwgU2ltcGxl U3RyaW5nTGlzdCAqcGF0dGVybikKIAogCWZpbHRlcl9mcmVlKCZmc3RhdGUpOwogfQorCisvKgor ICogY3JlYXRlX29yX29wZW5fZGlyCisgKgorICogVGhpcyB3aWxsIGNyZWF0ZSBhIG5ldyBkaXJl Y3Rvcnkgd2l0aCBnaXZlbiBuYW1lLiAgSWYgdGhlcmUgaXMgYWxyZWFkeSBzYW1lCisgKiBlbXB0 eSBkaXJlY3RvcnkgZXhpc3QsIHRoZW4gdXNlIGl0LgorICovCitzdGF0aWMgdm9pZAorY3JlYXRl X29yX29wZW5fZGlyKGNvbnN0IGNoYXIgKmRpcm5hbWUpCit7CisJc3RydWN0IHN0YXQJCXN0Owor CWJvb2wJCQlpc19lbXB0eSA9IGZhbHNlOworCisJLyogd2UgYWNjZXB0IGFuIGVtcHR5IGV4aXN0 aW5nIGRpcmVjdG9yeSAqLworCWlmIChzdGF0KGRpcm5hbWUsICZzdCkgPT0gMCAmJiBTX0lTRElS KHN0LnN0X21vZGUpKQorCXsKKwkJRElSCQkqZGlyID0gb3BlbmRpcihkaXJuYW1lKTsKKworCQlp ZiAoZGlyKQorCQl7CisJCQlzdHJ1Y3QgZGlyZW50CSpkOworCisJCQlpc19lbXB0eSA9IHRydWU7 CisKKwkJCXdoaWxlIChlcnJubyA9IDAsIChkID0gcmVhZGRpcihkaXIpKSkKKwkJCXsKKwkJCQlp ZiAoc3RyY21wKGQtPmRfbmFtZSwgIi4iKSAhPSAwICYmIHN0cmNtcChkLT5kX25hbWUsICIuLiIp ICE9IDApCisJCQkJeworCQkJCQlpc19lbXB0eSA9IGZhbHNlOworCQkJCQlicmVhazsKKwkJCQl9 CisJCQl9CisKKwkJCWlmIChlcnJubykKKwkJCQlwZ19mYXRhbCgiY291bGQgbm90IHJlYWQgZGly ZWN0b3J5IFwiJXNcIjogJW0iLAorCQkJCQkJZGlybmFtZSk7CisKKwkJCWlmIChjbG9zZWRpcihk aXIpKQorCQkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgY2xvc2UgZGlyZWN0b3J5IFwiJXNcIjogJW0i LAorCQkJCQkJZGlybmFtZSk7CisJCX0KKworCQlpZighaXNfZW1wdHkpCisJCXsKKwkJCXBnX2xv Z19lcnJvcigiZGlyZWN0b3J5IFwiJXNcIiBleGlzdHMgYnV0IGlzIG5vdCBlbXB0eSIsIGRpcm5h bWUpOworCQkJcGdfbG9nX2Vycm9yX2hpbnQoIklmIHlvdSB3YW50IHRvIGR1bXAgZGF0YSBvbiB0 aGlzIGRpcmVjdG9yeSwgZWl0aGVyIHJlbW92ZSBvciBlbXB0eSAiCisJCQkJCQkJICAidGhpcyBk aXJlY3RvcnkgXCIlc1wiIG9yIHJ1biAlcyAiCisJCQkJCQkJICAid2l0aCBhbiBhcmd1bWVudCBv dGhlciB0aGFuIFwiJXNcIi4iLAorCQkJCQkJCSAgZGlybmFtZSwgcHJvZ25hbWUsIGRpcm5hbWUp OworCQkJZXhpdF9uaWNlbHkoMSk7CisJCX0KKwl9CisJZWxzZSBpZiAobWtkaXIoZGlybmFtZSwg MDcwMCkgPCAwKQorCQlwZ19mYXRhbCgiY291bGQgbm90IGNyZWF0ZSBkaXJlY3RvcnkgXCIlc1wi OiAlbSIsIGRpcm5hbWUpOworfQorCisvKgorICogcGFyc2VEdW1wRm9ybWF0CisgKgorICogVGhp cyB3aWxsIHZhbGlkYXRlIGR1bXAgZm9ybWF0cy4KKyAqLworc3RhdGljIEFyY2hpdmVGb3JtYXQK K3BhcnNlRHVtcEZvcm1hdChjb25zdCBjaGFyICpmb3JtYXQpCit7CisJQXJjaGl2ZUZvcm1hdAlh cmNoRHVtcEZvcm1hdDsKKworCWlmIChwZ19zdHJjYXNlY21wKGZvcm1hdCwgImMiKSA9PSAwKQor CQlhcmNoRHVtcEZvcm1hdCA9IGFyY2hDdXN0b207CisJZWxzZSBpZiAocGdfc3RyY2FzZWNtcChm b3JtYXQsICJjdXN0b20iKSA9PSAwKQorCQlhcmNoRHVtcEZvcm1hdCA9IGFyY2hDdXN0b207CisJ ZWxzZSBpZiAocGdfc3RyY2FzZWNtcChmb3JtYXQsICJkIikgPT0gMCkKKwkJYXJjaER1bXBGb3Jt YXQgPSBhcmNoRGlyZWN0b3J5OworCWVsc2UgaWYgKHBnX3N0cmNhc2VjbXAoZm9ybWF0LCAiZGly ZWN0b3J5IikgPT0gMCkKKwkJYXJjaER1bXBGb3JtYXQgPSBhcmNoRGlyZWN0b3J5OworCWVsc2Ug aWYgKHBnX3N0cmNhc2VjbXAoZm9ybWF0LCAicCIpID09IDApCisJCWFyY2hEdW1wRm9ybWF0ID0g YXJjaE51bGw7CisJZWxzZSBpZiAocGdfc3RyY2FzZWNtcChmb3JtYXQsICJwbGFpbiIpID09IDAp CisJCWFyY2hEdW1wRm9ybWF0ID0gYXJjaE51bGw7CisJZWxzZSBpZiAocGdfc3RyY2FzZWNtcChm b3JtYXQsICJ0IikgPT0gMCkKKwkJYXJjaER1bXBGb3JtYXQgPSBhcmNoVGFyOworCWVsc2UgaWYg KHBnX3N0cmNhc2VjbXAoZm9ybWF0LCAidGFyIikgPT0gMCkKKwkJYXJjaER1bXBGb3JtYXQgPSBh cmNoVGFyOworCWVsc2UKKwkJcGdfZmF0YWwoInVucmVjb2duaXplZCBhcmNoaXZlIGZvcm1hdCBc IiVzXCI7IHBsZWFzZSBzcGVjaWZ5IFwiY1wiLCBcImRcIiwgXCJwXCIsIG9yIFwidFwiIiwKKwkJ CQlmb3JtYXQpOworCisJcmV0dXJuIGFyY2hEdW1wRm9ybWF0OworfQpkaWZmIC0tZ2l0IGEvc3Jj L2Jpbi9wZ19kdW1wL3BnX3Jlc3RvcmUuYyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19yZXN0b3JlLmMK aW5kZXggYzYwMjI3MmQ3ZGIuLjQyYzRmZTNjZTJlIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1 bXAvcGdfcmVzdG9yZS5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19yZXN0b3JlLmMKQEAgLTIs NyArMiw3IEBACiAgKgogICogcGdfcmVzdG9yZS5jCiAgKglwZ19yZXN0b3JlIGlzIGFuIHV0aWxp dHkgZXh0cmFjdGluZyBwb3N0Z3JlcyBkYXRhYmFzZSBkZWZpbml0aW9ucwotICoJZnJvbSBhIGJh Y2t1cCBhcmNoaXZlIGNyZWF0ZWQgYnkgcGdfZHVtcCB1c2luZyB0aGUgYXJjaGl2ZXIKKyAqCWZy b20gYSBiYWNrdXAgYXJjaGl2ZSBjcmVhdGVkIGJ5IHBnX2R1bXAvcGdfZHVtcGFsbCB1c2luZyB0 aGUgYXJjaGl2ZXIKICAqCWludGVyZmFjZS4KICAqCiAgKglwZ19yZXN0b3JlIHdpbGwgcmVhZCB0 aGUgYmFja3VwIGFyY2hpdmUgYW5kCkBAIC00MSwyNyArNDEsNzEgQEAKICNpbmNsdWRlICJwb3N0 Z3Jlc19mZS5oIgogCiAjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgog I2lmZGVmIEhBVkVfVEVSTUlPU19ICiAjaW5jbHVkZSA8dGVybWlvcy5oPgogI2VuZGlmCiAKKyNp bmNsdWRlICJjb21tb24vY29ubmVjdC5oIgorI2luY2x1ZGUgImNvbXByZXNzX2lvLmgiCisjaW5j bHVkZSAiY29tbW9uL3N0cmluZy5oIgorI2luY2x1ZGUgImNvbW1vbl9kdW1wYWxsX3Jlc3RvcmUu aCIKICNpbmNsdWRlICJmZV91dGlscy9vcHRpb25fdXRpbHMuaCIKKyNpbmNsdWRlICJmZV91dGls cy9zdHJpbmdfdXRpbHMuaCIKICNpbmNsdWRlICJmaWx0ZXIuaCIKICNpbmNsdWRlICJnZXRvcHRf bG9uZy5oIgogI2luY2x1ZGUgInBhcmFsbGVsLmgiCisjaW5jbHVkZSAicGdfYmFja3VwX2FyY2hp dmVyLmgiCiAjaW5jbHVkZSAicGdfYmFja3VwX3V0aWxzLmgiCiAKK3R5cGVkZWYgc3RydWN0IFNp bXBsZURhdGFiYXNlT2lkTGlzdENlbGwKK3sKKwlzdHJ1Y3QgU2ltcGxlRGF0YWJhc2VPaWRMaXN0 Q2VsbAkqbmV4dDsKKwlPaWQJCQkJCQkJCQlkYl9vaWQ7CisJY29uc3QgY2hhcgkJCQkJCQkqZGJf bmFtZTsKK30gU2ltcGxlRGF0YWJhc2VPaWRMaXN0Q2VsbDsKKwordHlwZWRlZiBzdHJ1Y3QgU2lt cGxlRGF0YWJhc2VPaWRMaXN0Cit7CisJU2ltcGxlRGF0YWJhc2VPaWRMaXN0Q2VsbCAqaGVhZDsK KwlTaW1wbGVEYXRhYmFzZU9pZExpc3RDZWxsICp0YWlsOworfSBTaW1wbGVEYXRhYmFzZU9pZExp c3Q7CisKK3N0YXRpYyB2b2lkCitzaW1wbGVfZGJfb2lkX2xpc3RfYXBwZW5kKFNpbXBsZURhdGFi YXNlT2lkTGlzdCAqbGlzdCwgT2lkIGRiX29pZCwgY29uc3QgY2hhciAqZGJuYW1lKTsKKwogc3Rh dGljIHZvaWQgdXNhZ2UoY29uc3QgY2hhciAqcHJvZ25hbWUpOwogc3RhdGljIHZvaWQgcmVhZF9y ZXN0b3JlX2ZpbHRlcnMoY29uc3QgY2hhciAqZmlsZW5hbWUsIFJlc3RvcmVPcHRpb25zICpvcHRz KTsKK3N0YXRpYyBib29sIElzRmlsZUV4aXN0c0luRGlyZWN0b3J5KGNvbnN0IGNoYXIgKmRpciwg Y29uc3QgY2hhciAqZmlsZW5hbWUpOworc3RhdGljIGludCByZXN0b3JlT25lRGF0YWJhc2UoY29u c3QgY2hhciAqaW5wdXRGaWxlU3BlYywgUmVzdG9yZU9wdGlvbnMgKm9wdHMsCisJCQkJCQkJICBp bnQgbnVtV29ya2VycywgYm9vbCBhcHBlbmRfZGF0YSk7CitzdGF0aWMgaW50IFJlYWRPbmVTdGF0 ZW1lbnQoU3RyaW5nSW5mbyBpbkJ1ZiwgRklMRSAqcGZpbGUpOworc3RhdGljIGludCByZXN0b3Jl QWxsRGF0YWJhc2VzKFBHY29ubiAqY29ubiwgY29uc3QgY2hhciAqZHVtcGRpcnBhdGgsCisJCQkJ CQkJICAgU2ltcGxlU3RyaW5nTGlzdCBkYl9leGNsdWRlX3BhdHRlcm5zLCBSZXN0b3JlT3B0aW9u cyAqb3B0cywgaW50IG51bVdvcmtlcnMpOworc3RhdGljIHZvaWQgZXhlY3V0ZV9nbG9iYWxfc3Fs X2NvbW1hbmRzKFBHY29ubiAqY29ubiwgY29uc3QgY2hhciAqZHVtcGRpcnBhdGgsCisJCQkJCQkJ CQkJY29uc3QgY2hhciAqb3V0ZmlsZSk7CitzdGF0aWMgdm9pZCBjb3B5X2dsb2JhbF9maWxlX3Rv X291dF9maWxlKGNvbnN0IGNoYXIgKm91dGZpbGUsIEZJTEUgKnBmaWxlKTsKK3N0YXRpYyBpbnQg ZmlsdGVyX2RibmFtZXNfZm9yX3Jlc3RvcmUoUEdjb25uICpjb25uLAorCQkJCQkJCQkJICBTaW1w bGVEYXRhYmFzZU9pZExpc3QgKmRibmFtZV9vaWRfbGlzdCwKKwkJCQkJCQkJCSAgU2ltcGxlU3Ry aW5nTGlzdCBkYl9leGNsdWRlX3BhdHRlcm5zKTsKK3N0YXRpYyBpbnQgZ2V0X2RibmFtZV9vaWRf bGlzdF9mcm9tX21maWxlKGNvbnN0IGNoYXIgKmR1bXBkaXJwYXRoLAorCQkJCQkJCQkJCSAgU2lt cGxlRGF0YWJhc2VPaWRMaXN0ICpkYm5hbWVfb2lkX2xpc3QpOworc3RhdGljIHZvaWQgc2ltcGxl X2RiX29pZF9saXN0X2FwcGVuZChTaW1wbGVEYXRhYmFzZU9pZExpc3QgKmxpc3QsIE9pZCBkYl9v aWQsCisJCQkJCQkJCQkgIGNvbnN0IGNoYXIgKmRibmFtZSk7CitzdGF0aWMgdm9pZCBzaW1wbGVf c3RyaW5nX2Z1bGxfbGlzdF9kZWxldGUoU2ltcGxlU3RyaW5nTGlzdCAqbGlzdCk7CitzdGF0aWMg dm9pZCBzaW1wbGVfZGJfb2lkX2Z1bGxfbGlzdF9kZWxldGUoU2ltcGxlRGF0YWJhc2VPaWRMaXN0 ICpsaXN0KTsKK3N0YXRpYyB2b2lkIHNpbXBsZV9kYl9vaWRfbGlzdF9kZWxldGUoU2ltcGxlRGF0 YWJhc2VPaWRMaXN0ICpsaXN0LAorCQkJCQkJCQkJICBTaW1wbGVEYXRhYmFzZU9pZExpc3RDZWxs ICpjZWxsLAorCQkJCQkJCQkJICBTaW1wbGVEYXRhYmFzZU9pZExpc3RDZWxsICpwcmV2KTsKK3N0 YXRpYyBzaXplX3QgcXVvdGVfbGl0ZXJhbF9pbnRlcm5hbChjaGFyICpkc3QsIGNvbnN0IGNoYXIg KnNyYywgc2l6ZV90IGxlbik7CitzdGF0aWMgY2hhciAqcXVvdGVfbGl0ZXJhbF9jc3RyKGNvbnN0 IGNoYXIgKnJhd3N0cik7CiAKIGludAogbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiB7CiAJ UmVzdG9yZU9wdGlvbnMgKm9wdHM7CiAJaW50CQkJYzsKLQlpbnQJCQlleGl0X2NvZGU7CiAJaW50 CQkJbnVtV29ya2VycyA9IDE7Ci0JQXJjaGl2ZSAgICAqQUg7CiAJY2hhcgkgICAqaW5wdXRGaWxl U3BlYzsKIAlzdGF0aWMgaW50CWRpc2FibGVfdHJpZ2dlcnMgPSAwOwogCXN0YXRpYyBpbnQJZW5h YmxlX3Jvd19zZWN1cml0eSA9IDA7CkBAIC03NywxMSArMTIxLDE0IEBAIG1haW4oaW50IGFyZ2Ms IGNoYXIgKiphcmd2KQogCXN0YXRpYyBpbnQJc3RyaWN0X25hbWVzID0gMDsKIAlib29sCQlkYXRh X29ubHkgPSBmYWxzZTsKIAlib29sCQlzY2hlbWFfb25seSA9IGZhbHNlOworCWJvb2wJCQkJZ2xv YmFsc19vbmx5ID0gZmFsc2U7CisJU2ltcGxlU3RyaW5nTGlzdAlkYl9leGNsdWRlX3BhdHRlcm5z ID0ge05VTEwsIE5VTEx9OwogCiAJc3RydWN0IG9wdGlvbiBjbWRvcHRzW10gPSB7CiAJCXsiY2xl YW4iLCAwLCBOVUxMLCAnYyd9LAogCQl7ImNyZWF0ZSIsIDAsIE5VTEwsICdDJ30sCiAJCXsiZGF0 YS1vbmx5IiwgMCwgTlVMTCwgJ2EnfSwKKwkJeyJnbG9iYWxzLW9ubHkiLCAwLCBOVUxMLCAnZyd9 LAogCQl7ImRibmFtZSIsIDEsIE5VTEwsICdkJ30sCiAJCXsiZXhpdC1vbi1lcnJvciIsIDAsIE5V TEwsICdlJ30sCiAJCXsiZXhjbHVkZS1zY2hlbWEiLCAxLCBOVUxMLCAnTid9LApAQCAtMTI4LDYg KzE3NSw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQl7Im5vLXNlY3VyaXR5LWxh YmVscyIsIG5vX2FyZ3VtZW50LCAmbm9fc2VjdXJpdHlfbGFiZWxzLCAxfSwKIAkJeyJuby1zdWJz Y3JpcHRpb25zIiwgbm9fYXJndW1lbnQsICZub19zdWJzY3JpcHRpb25zLCAxfSwKIAkJeyJmaWx0 ZXIiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgNH0sCisJCXsiZXhjbHVkZS1kYXRhYmFzZSIs IHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCA2fSwKIAogCQl7TlVMTCwgMCwgTlVMTCwgMH0KIAl9 OwpAQCAtMTU2LDcgKzIwNCw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQl9CiAJ fQogCi0Jd2hpbGUgKChjID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJndiwgImFjQ2Q6ZWY6RjpoOkk6 ajpsTDpuOk46T3A6UDpSc1M6dDpUOlU6dndXeDEiLAorCXdoaWxlICgoYyA9IGdldG9wdF9sb25n KGFyZ2MsIGFyZ3YsICJhQWNDZDplZjpGOmdoOkk6ajpsTDpuOk46T3A6UDpSc1M6dDpUOlU6dndX eDEiLAogCQkJCQkJCWNtZG9wdHMsIE5VTEwpKSAhPSAtMSkKIAl7CiAJCXN3aXRjaCAoYykKQEAg LTE4MywxMSArMjMxLDE0IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQkJCWlmIChz dHJsZW4ob3B0YXJnKSAhPSAwKQogCQkJCQlvcHRzLT5mb3JtYXROYW1lID0gcGdfc3RyZHVwKG9w dGFyZyk7CiAJCQkJYnJlYWs7CisJCQljYXNlICdnJzoKKwkJCQkvKiByZXN0b3JlIG9ubHkgZ2xv YmFsLmRhdCBmaWxlIGZyb20gZGlyZWN0b3J5ICovCisJCQkJZ2xvYmFsc19vbmx5ID0gdHJ1ZTsK KwkJCQlicmVhazsKIAkJCWNhc2UgJ2gnOgogCQkJCWlmIChzdHJsZW4ob3B0YXJnKSAhPSAwKQog CQkJCQlvcHRzLT5jcGFyYW1zLnBnaG9zdCA9IHBnX3N0cmR1cChvcHRhcmcpOwogCQkJCWJyZWFr OwotCiAJCQljYXNlICdqJzoJCQkvKiBudW1iZXIgb2YgcmVzdG9yZSBqb2JzICovCiAJCQkJaWYg KCFvcHRpb25fcGFyc2VfaW50KG9wdGFyZywgIi1qLy0tam9icyIsIDEsCiAJCQkJCQkJCQkgIFBH X01BWF9KT0JTLApAQCAtMzAyLDYgKzM1MywxMCBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJn dikKIAkJCQkJZXhpdCgxKTsKIAkJCQlvcHRzLT5leGl0X29uX2Vycm9yID0gdHJ1ZTsKIAkJCQli cmVhazsKKwkJCWNhc2UgNjoKKwkJCQkvKiBsaXN0IG9mIGRhdGFiYXNlcyBwYXR0ZXJucyB0aG9z ZSBuZWVkcyB0byBza2lwIHdoaWxlIHJlc3RvcmluZyAqLworCQkJCXNpbXBsZV9zdHJpbmdfbGlz dF9hcHBlbmQoJmRiX2V4Y2x1ZGVfcGF0dGVybnMsIG9wdGFyZyk7CisJCQkJYnJlYWs7CiAKIAkJ CWRlZmF1bHQ6CiAJCQkJLyogZ2V0b3B0X2xvbmcgYWxyZWFkeSBlbWl0dGVkIGEgY29tcGxhaW50 ICovCkBAIC0zMjksNiArMzg0LDEzIEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCWlm ICghb3B0cy0+Y3BhcmFtcy5kYm5hbWUgJiYgIW9wdHMtPmZpbGVuYW1lICYmICFvcHRzLT50b2NT dW1tYXJ5KQogCQlwZ19mYXRhbCgib25lIG9mIC1kLy0tZGJuYW1lIGFuZCAtZi8tLWZpbGUgbXVz dCBiZSBzcGVjaWZpZWQiKTsKIAorCWlmIChkYl9leGNsdWRlX3BhdHRlcm5zLmhlYWQgIT0gTlVM TCAmJiBnbG9iYWxzX29ubHkpCisJeworCQlwZ19sb2dfZXJyb3IoIm9wdGlvbiAtLWV4Y2x1ZGUt ZGF0YWJhc2UgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIgd2l0aCAtZy8tLWdsb2JhbHMtb25seSIp OworCQlwZ19sb2dfZXJyb3JfaGludCgiVHJ5IFwiJXMgLS1oZWxwXCIgZm9yIG1vcmUgaW5mb3Jt YXRpb24uIiwgcHJvZ25hbWUpOworCQlleGl0X25pY2VseSgxKTsKKwl9CisKIAkvKiBTaG91bGQg Z2V0IGF0IG1vc3Qgb25lIG9mIC1kIGFuZCAtZiwgZWxzZSB1c2VyIGlzIGNvbmZ1c2VkICovCiAJ aWYgKG9wdHMtPmNwYXJhbXMuZGJuYW1lKQogCXsKQEAgLTQwNCw2ICs0NjYsNzggQEAgbWFpbihp bnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCQkJCSBvcHRzLT5mb3JtYXROYW1lKTsKIAl9CiAKKwkv KgorCSAqIElmIHRvYy5kYXQgZmlsZSBkb2VzIG5vdCBwcmVzZW50IGluIGN1cnJlbnQgcGF0aCwg dGhlbiBjaGVjayBmb3IKKwkgKiBnbG9iYWwuZGF0LiAgSWYgZ2xvYmFsLmRhdCBmaWxlIGlzIHBy ZXNlbnQsIHRoZW4gcmVzdG9yZSBhbGwgdGhlCisJICogZGF0YWJhc2VzIGZyb20gbWFwLmRhdChp ZiBleGlzdCkgZmlsZSBsaXN0IGFuZCBza2lwIHJlc3RvcmluZyBmb3IKKwkgKiAtLWV4Y2x1ZGUt ZGF0YWJhc2UgcGF0dGVybnMuCisJICovCisJaWYgKGlucHV0RmlsZVNwZWMgIT0gTlVMTCAmJgor CQkhSXNGaWxlRXhpc3RzSW5EaXJlY3RvcnkoaW5wdXRGaWxlU3BlYywgInRvYy5kYXQiKSkKKwl7 CisJCS8qIElmIGdsb2JhbC5kYXQgaXMgZXhpc3QsIHRoZW4gcHJvY2VzcyBpdC4gKi8KKwkJaWYg KElzRmlsZUV4aXN0c0luRGlyZWN0b3J5KHBnX3N0cmR1cChpbnB1dEZpbGVTcGVjKSwgImdsb2Jh bC5kYXQiKSkKKwkJeworCQkJUEdjb25uICAqY29ubiA9IE5VTEw7IC8qIENvbm5lY3Rpb24gdG8g cmVzdG9yZSBnbG9iYWwgc3FsIGNvbW1hbmRzLiAqLworCQkJaW50ICAgICBleGl0X2NvZGUgPSAw OworCisJCQkvKgorCQkJICogQ29ubmVjdCB0byBkYXRhYmFzZSB0byBleGVjdXRlIGdsb2JhbCBz cWwgY29tbWFuZHMgZnJvbQorCQkJICogZ2xvYmFsLmRhdCBmaWxlLgorCQkJICovCisJCQlpZiAo b3B0cy0+Y3BhcmFtcy5kYm5hbWUpCisJCQl7CisJCQkJY29ubiA9IGNvbm5lY3REYXRhYmFzZShv cHRzLT5jcGFyYW1zLmRibmFtZSwgTlVMTCwgb3B0cy0+Y3BhcmFtcy5wZ2hvc3QsCisJCQkJCQkJ CQkgICBvcHRzLT5jcGFyYW1zLnBncG9ydCwgb3B0cy0+Y3BhcmFtcy51c2VybmFtZSwgVFJJX0RF RkFVTFQsCisJCQkJCQkJCQkgICBmYWxzZSwgcHJvZ25hbWUsIE5VTEwsIE5VTEwpOworCisJCQkJ aWYgKCFjb25uKQorCQkJCQlwZ19mYXRhbCgiY291bGQgbm90IGNvbm5lY3QgdG8gZGF0YWJhc2Ug XCIlc1wiIiwgb3B0cy0+Y3BhcmFtcy5kYm5hbWUpOworCQkJfQorCisJCQkvKgorCQkJICogT3Bl biBnbG9iYWwuZGF0IGZpbGUgYW5kIGV4ZWN1dGUvYXBwZW5kIGFsbCB0aGUgZ2xvYmFsIHNxbAor CQkJICogY29tbWFuZHMuCisJCQkgKi8KKwkJCWV4ZWN1dGVfZ2xvYmFsX3NxbF9jb21tYW5kcyhj b25uLCBpbnB1dEZpbGVTcGVjLCBvcHRzLT5maWxlbmFtZSk7CisKKwkJCS8qIElmIGdsb2JhbHMt b25seSwgdGhlbiByZXR1cm4gZnJvbSBoZXJlLiAqLworCQkJaWYgKGdsb2JhbHNfb25seSkKKwkJ CXsKKwkJCQlpZiAoY29ubikKKwkJCQkJUFFmaW5pc2goY29ubik7CisJCQkJcGdfbG9nX2luZm8o ImRhdGFiYXNlcyByZXN0b3JpbmcgaXMgc2tpcHBlZCBhcyAtZy8tLWdsb2JhbHMtb25seSBvcHRp b24gaXMgc3BlY2lmaWVkIik7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJLyogTm93IHJlc3Rv cmUgYWxsIHRoZSBkYXRhYmFzZXMgZnJvbSBtYXAuZGF0IGZpbGUuICovCisJCQkJZXhpdF9jb2Rl ID0gcmVzdG9yZUFsbERhdGFiYXNlcyhjb25uLCBpbnB1dEZpbGVTcGVjLAorCQkJCQkJCQkJCQkJ ZGJfZXhjbHVkZV9wYXR0ZXJucywKKwkJCQkJCQkJCQkJCW9wdHMsCisJCQkJCQkJCQkJCQludW1X b3JrZXJzKTsKKwkJCX0KKworCQkJLyogRnJlZSBkYiBwYXR0ZXJuIGxpc3QuICovCisJCQlzaW1w bGVfc3RyaW5nX2Z1bGxfbGlzdF9kZWxldGUoJmRiX2V4Y2x1ZGVfcGF0dGVybnMpOworCisJCQly ZXR1cm4gZXhpdF9jb2RlOworCQl9CisJfQorCisJcmV0dXJuIHJlc3RvcmVPbmVEYXRhYmFzZShp bnB1dEZpbGVTcGVjLCBvcHRzLCBudW1Xb3JrZXJzLCBmYWxzZSk7Cit9CisvKgorICogcmVzdG9y ZU9uZURhdGFiYXNlCisgKgorICogVGhpcyB3aWxsIHJlc3RvcmUgb25lIGRhdGFiYXNlIHVzaW5n IHRvYy5kYXQgZmlsZS4KKyAqLworc3RhdGljIGludAorcmVzdG9yZU9uZURhdGFiYXNlKGNvbnN0 IGNoYXIgKmlucHV0RmlsZVNwZWMsIFJlc3RvcmVPcHRpb25zICpvcHRzLAorCQkJCSAgIGludCBu dW1Xb3JrZXJzLCBib29sIGFwcGVuZF9kYXRhKQoreworCUFyY2hpdmUJCSpBSDsKKwlpbnQJCQll eGl0X2NvZGU7CisKIAlBSCA9IE9wZW5BcmNoaXZlKGlucHV0RmlsZVNwZWMsIG9wdHMtPmZvcm1h dCk7CiAKIAlTZXRBcmNoaXZlT3B0aW9ucyhBSCwgTlVMTCwgb3B0cyk7CkBAIC00MjksMTEgKzU2 MywxMSBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAlBSC0+bnVtV29ya2VycyA9IG51 bVdvcmtlcnM7CiAKIAlpZiAob3B0cy0+dG9jU3VtbWFyeSkKLQkJUHJpbnRUT0NTdW1tYXJ5KEFI KTsKKwkJUHJpbnRUT0NTdW1tYXJ5KEFILCBhcHBlbmRfZGF0YSk7CiAJZWxzZQogCXsKIAkJUHJv Y2Vzc0FyY2hpdmVSZXN0b3JlT3B0aW9ucyhBSCk7Ci0JCVJlc3RvcmVBcmNoaXZlKEFIKTsKKwkJ UmVzdG9yZUFyY2hpdmUoQUgsIGFwcGVuZF9kYXRhKTsKIAl9CiAKIAkvKiBkb25lLCBwcmludCBh IHN1bW1hcnkgb2YgaWdub3JlZCBlcnJvcnMgKi8KQEAgLTQ2OSw2ICs2MDMsNyBAQCB1c2FnZShj b25zdCBjaGFyICpwcm9nbmFtZSkKIAlwcmludGYoXygiICAtYywgLS1jbGVhbiAgICAgICAgICAg ICAgICAgIGNsZWFuIChkcm9wKSBkYXRhYmFzZSBvYmplY3RzIGJlZm9yZSByZWNyZWF0aW5nXG4i KSk7CiAJcHJpbnRmKF8oIiAgLUMsIC0tY3JlYXRlICAgICAgICAgICAgICAgICBjcmVhdGUgdGhl IHRhcmdldCBkYXRhYmFzZVxuIikpOwogCXByaW50ZihfKCIgIC1lLCAtLWV4aXQtb24tZXJyb3Ig ICAgICAgICAgZXhpdCBvbiBlcnJvciwgZGVmYXVsdCBpcyB0byBjb250aW51ZVxuIikpOworCXBy aW50ZihfKCIgIC1nLCAtLWdsb2JhbHMtb25seSAgICAgICAgICAgcmVzdG9yZSBvbmx5IGdsb2Jh bCBvYmplY3RzLCBubyBkYXRhYmFzZXNcbiIpKTsKIAlwcmludGYoXygiICAtSSwgLS1pbmRleD1O QU1FICAgICAgICAgICAgIHJlc3RvcmUgbmFtZWQgaW5kZXhcbiIpKTsKIAlwcmludGYoXygiICAt aiwgLS1qb2JzPU5VTSAgICAgICAgICAgICAgIHVzZSB0aGlzIG1hbnkgcGFyYWxsZWwgam9icyB0 byByZXN0b3JlXG4iKSk7CiAJcHJpbnRmKF8oIiAgLUwsIC0tdXNlLWxpc3Q9RklMRU5BTUUgICAg ICB1c2UgdGFibGUgb2YgY29udGVudHMgZnJvbSB0aGlzIGZpbGUgZm9yXG4iCkBAIC00ODEsNiAr NjE2LDcgQEAgdXNhZ2UoY29uc3QgY2hhciAqcHJvZ25hbWUpCiAJcHJpbnRmKF8oIiAgLVMsIC0t c3VwZXJ1c2VyPU5BTUUgICAgICAgICBzdXBlcnVzZXIgdXNlciBuYW1lIHRvIHVzZSBmb3IgZGlz YWJsaW5nIHRyaWdnZXJzXG4iKSk7CiAJcHJpbnRmKF8oIiAgLXQsIC0tdGFibGU9TkFNRSAgICAg ICAgICAgICByZXN0b3JlIG5hbWVkIHJlbGF0aW9uICh0YWJsZSwgdmlldywgZXRjLilcbiIpKTsK IAlwcmludGYoXygiICAtVCwgLS10cmlnZ2VyPU5BTUUgICAgICAgICAgIHJlc3RvcmUgbmFtZWQg dHJpZ2dlclxuIikpOworCXByaW50ZihfKCIgIC0tZXhjbHVkZS1kYXRhYmFzZT1QQVRURVJOICAg ZXhjbHVkZSBkYXRhYmFzZXMgd2hvc2UgbmFtZSBtYXRjaGVzIHdpdGggcGF0dGVyblxuIikpOwog CXByaW50ZihfKCIgIC14LCAtLW5vLXByaXZpbGVnZXMgICAgICAgICAgc2tpcCByZXN0b3JhdGlv biBvZiBhY2Nlc3MgcHJpdmlsZWdlcyAoZ3JhbnQvcmV2b2tlKVxuIikpOwogCXByaW50ZihfKCIg IC0xLCAtLXNpbmdsZS10cmFuc2FjdGlvbiAgICAgcmVzdG9yZSBhcyBhIHNpbmdsZSB0cmFuc2Fj dGlvblxuIikpOwogCXByaW50ZihfKCIgIC0tZGlzYWJsZS10cmlnZ2VycyAgICAgICAgICAgZGlz YWJsZSB0cmlnZ2VycyBkdXJpbmcgZGF0YS1vbmx5IHJlc3RvcmVcbiIpKTsKQEAgLTYxOSwzICs3 NTUsNjI2IEBAIHJlYWRfcmVzdG9yZV9maWx0ZXJzKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBSZXN0 b3JlT3B0aW9ucyAqb3B0cykKIAogCWZpbHRlcl9mcmVlKCZmc3RhdGUpOwogfQorCisvKgorICog SXNGaWxlRXhpc3RzSW5EaXJlY3RvcnkKKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgZmlsZSBleGlz dCBpbiBjdXJyZW50IGRpcmVjdG9yeS4KKyAqLworc3RhdGljIGJvb2wKK0lzRmlsZUV4aXN0c0lu RGlyZWN0b3J5KGNvbnN0IGNoYXIgKmRpciwgY29uc3QgY2hhciAqZmlsZW5hbWUpCit7CisJc3Ry dWN0IHN0YXQJCQlzdDsKKwljaGFyCQkJCWJ1ZltNQVhQR1BBVEhdOworCisJaWYgKHNucHJpbnRm KGJ1ZiwgTUFYUEdQQVRILCAiJXMvJXMiLCBkaXIsIGZpbGVuYW1lKSA+PSBNQVhQR1BBVEgpCisJ CXBnX2ZhdGFsKCJkaXJlY3RvcnkgbmFtZSB0b28gbG9uZzogXCIlc1wiIiwgZGlyKTsKKworCXJl dHVybiAoc3RhdChidWYsICZzdCkgPT0gMCAmJiBTX0lTUkVHKHN0LnN0X21vZGUpKTsKK30KKwor LyoKKyAqIFJlYWRPbmVTdGF0ZW1lbnQKKyAqCisgKiBUaGlzIHdpbGwgc3RhcnQgcmVhZGluZyBm cm9tIHBhc3NlZCBmaWxlIHBvaW50ZXIgdXNpbmcgZmdldGMgYW5kIHJlYWQgdGlsbAorICogc2Vt aWNvbG9uKHNxbCBzdGF0ZW1lbnQgdGVybWluYXRvciBmb3IgZ2xvYmFsLnNxbCBmaWxlKQorICoK KyAqIEVPRiBpcyByZXR1cm5lZCBpZiBlbmQtb2YtZmlsZSBpbnB1dCBpcyBzZWVuOyB0aW1lIHRv IHNodXQgZG93bi4KKyAqLworCitzdGF0aWMgaW50CitSZWFkT25lU3RhdGVtZW50KFN0cmluZ0lu Zm8gaW5CdWYsIEZJTEUgKnBmaWxlKQoreworCWludAkJCWM7IC8qIGNoYXJhY3RlciByZWFkIGZy b20gZ2V0YygpICovCisJaW50CQkJbTsKKworCVN0cmluZ0luZm9EYXRhCXE7CisJaW5pdFN0cmlu Z0luZm8oJnEpOworCisJcmVzZXRTdHJpbmdJbmZvKGluQnVmKTsKKworCS8qCisJICogUmVhZCBj aGFyYWN0ZXJzIHVudGlsIEVPRiBvciB0aGUgYXBwcm9wcmlhdGUgZGVsaW1pdGVyIGlzIHNlZW4u CisJICovCisJd2hpbGUgKChjID0gZmdldGMocGZpbGUpKSAhPSBFT0YpCisJeworCQlpZiAoYyAh PSAnXCcnICYmIGMgIT0gJyInICYmIGMgIT0gJ1xuJyAmJiBjICE9ICc7JykKKwkJeworCQkJYXBw ZW5kU3RyaW5nSW5mb0NoYXIoaW5CdWYsIChjaGFyKSBjKTsKKwkJCXdoaWxlICgoYyA9IGZnZXRj KHBmaWxlKSkgIT0gRU9GKQorCQkJeworCQkJCWlmIChjICE9ICdcJycgJiYgYyAhPSAnIicgJiYg YyAhPSAnOycgJiYgYyAhPSAnXG4nKQorCQkJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihpbkJ1Ziwg KGNoYXIpIGMpOworCQkJCWVsc2UKKwkJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQlpZiAoYyA9 PSAnXCcnIHx8IGMgPT0gJyInKQorCQl7CisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcigmcSwgKGNo YXIpIGMpOworCQkJbSA9IGM7CisKKwkJCXdoaWxlICgoYyA9IGZnZXRjKHBmaWxlKSkgIT0gRU9G KQorCQkJeworCQkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKCZxLCAoY2hhcikgYyk7CisKKwkJCQlp ZihjID09IG0pCisJCQkJeworCQkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGluQnVmLCBxLmRh dGEpOworCQkJCQlyZXNldFN0cmluZ0luZm8oJnEpOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9 CisJCX0KKworCQlpZiAoYyA9PSAnOycpCisJCXsKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGlu QnVmLCAoY2hhcikgJzsnKTsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKGMgPT0gJ1xuJykKKwkJ CWFwcGVuZFN0cmluZ0luZm9DaGFyKGluQnVmLCAoY2hhcikgJ1xuJyk7CisJfQorCisJLyogTm8g aW5wdXQgYmVmb3JlIEVPRiBzaWduYWwgbWVhbnMgdGltZSB0byBxdWl0LiAqLworCWlmIChjID09 IEVPRiAmJiBpbkJ1Zi0+bGVuID09IDApCisJCXJldHVybiBFT0Y7CisKKwkvKiBBZGQgJ1wwJyB0 byBtYWtlIGl0IGxvb2sgdGhlIHNhbWUgYXMgbWVzc2FnZSBjYXNlLiAqLworCWFwcGVuZFN0cmlu Z0luZm9DaGFyKGluQnVmLCAoY2hhcikgJ1wwJyk7CisKKwlyZXR1cm4gJ1EnOworfQorCisvKgor ICogZmlsdGVyX2RibmFtZXNfZm9yX3Jlc3RvcmUKKyAqCisgKiBUaGlzIHdpbGwgcmVtb3ZlIG5h bWVzIGZyb20gYWxsIGRibGlzdCB0aG9zZSBjYW4KKyAqIGJlIGNvbnN0cnVjdGVkIGZyb20gZGF0 YWJhc2VfZXhjbHVkZV9wYXR0ZXJuIGxpc3QuCisgKgorICogcmV0dXJucyBudW1iZXIgb2YgZGJu YW1lcyB0aG9zZSB3aWxsIGJlIHJlc3RvcmVkLgorICovCitzdGF0aWMgaW50CitmaWx0ZXJfZGJu YW1lc19mb3JfcmVzdG9yZShQR2Nvbm4gKmNvbm4sCisJCQkJCQkgICBTaW1wbGVEYXRhYmFzZU9p ZExpc3QgKmRibmFtZV9vaWRfbGlzdCwKKwkJCQkJCSAgIFNpbXBsZVN0cmluZ0xpc3QgZGJfZXhj bHVkZV9wYXR0ZXJucykKK3sKKwlTaW1wbGVEYXRhYmFzZU9pZExpc3RDZWxsCSpkYm9pZF9jZWxs ID0gZGJuYW1lX29pZF9saXN0LT5oZWFkOworCVNpbXBsZURhdGFiYXNlT2lkTGlzdENlbGwJKmRi b2lkcHJlY2VsbCA9IE5VTEw7CisJaW50CQkJCQkJCWNvdW50X2RiID0gMDsKKwlQUUV4cEJ1ZmZl ciBxdWVyeTsKKwlQR3Jlc3VsdCAgICpyZXM7CisKKwkvKiBSZXR1cm4gMCBpZiB0aGVyZSBpcyBu byBkYiB0byByZXN0b3JlLiAqLworCWlmIChkYm9pZF9jZWxsID09IE5VTEwpCisJCXJldHVybiAw OworCisJcXVlcnkgPSBjcmVhdGVQUUV4cEJ1ZmZlcigpOworCisJaWYgKCFjb25uKQorCQlwZ19s b2dfaW5mbygiY29uc2lkZXJpbmcgUEFUVEVSTiBhcyBOQU1FIGZvciAtLWV4Y2x1ZGUtZGF0YWJh c2Ugb3B0aW9uIGFzIG5vIGRiIGNvbm5lY3Rpb24gd2hpbGUgZG9pbmcgcGdfcmVzdG9yZS4iKTsK KworCS8qCisJICogUHJvY2VzcyBvbmUgYnkgb25lIGFsbCBkYm5hbWVzIGFuZCBpZiBzcGVjaWZp ZWQgdG8gc2tpcCByZXN0b3JpbmcsIHRoZW4KKwkgKiByZW1vdmUgZGJuYW1lIGZyb20gbGlzdC4K KwkgKi8KKwl3aGlsZSAoZGJvaWRfY2VsbCAhPSBOVUxMKQorCXsKKwkJYm9vbAkJCQkJCXNraXBf ZGJfcmVzdG9yZSA9IGZhbHNlOworCQlTaW1wbGVEYXRhYmFzZU9pZExpc3RDZWxsCSpuZXh0ID0g ZGJvaWRfY2VsbC0+bmV4dDsKKworCQlmb3IgKFNpbXBsZVN0cmluZ0xpc3RDZWxsICpjZWxsZGIg PSBkYl9leGNsdWRlX3BhdHRlcm5zLmhlYWQ7IGNlbGxkYjsgY2VsbGRiID0gY2VsbGRiLT5uZXh0 KQorCQl7CisJCQkvKgorCQkJICogdGhlIGNvbnN0cnVjdCBwYXR0ZXJuIG1hdGNoaW5nIHF1ZXJ5 OgorCQkJICogU0VMRUNUIDEgV0hFUkUgWFhYIE9QRVJBVE9SKHBnX2NhdGFsb2cufikgJ14oUEFU VEVSTikkJyBDT0xMQVRFCisJCQkgKiBwZ19jYXRhbG9nLmRlZmF1bHQKKwkJCSAqCisJCQkgKiBY WFggcmVwcmVzZW50cyB0aGUgc3RyaW5nIGxpdGVyYWwgZGF0YWJhc2UgbmFtZSBkZXJpdmVkIGZy b20gdGhlCisJCQkgKiBkYm9pZF9saXN0IHZhcmlhYmxlLCB3aGljaCBpcyBpbml0aWFsbHkgZXh0 cmFjdGVkIGZyb20gdGhlCisJCQkgKiBtYXAuZGF0IGZpbGUgbG9jYXRlZCBpbiB0aGUgYmFja3Vw IGRpcmVjdG9yeS4gIHRoYXQncyB3aHkgd2UKKwkJCSAqIG5lZWQgcXVvdGVfbGl0ZXJhbF9jc3Ry LgorCQkJICoKKwkJCSAqIElmIHdlIGRvbid0IGhhdmUgZGIgY29ubmVjdGlvbiwgdGhlbiBjb25z aWRlciBwYXR0ZXJucyBhcyBOQU1FCisJCQkgKiBvbmx5LgorCQkJICovCisJCQlpZiAocGdfc3Ry Y2FzZWNtcChkYm9pZF9jZWxsLT5kYl9uYW1lLCBjZWxsZGItPnZhbCkgPT0gMCkKKwkJCSAgIHNr aXBfZGJfcmVzdG9yZSA9IHRydWU7CisJCQllbHNlIGlmIChjb25uKQorCQkJeworCQkJCWludAlk b3RjbnQ7CisKKwkJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwgIlNFTEVDVCAxICIpOwor CQkJCXByb2Nlc3NTUUxOYW1lUGF0dGVybihjb25uLCBxdWVyeSwgY2VsbGRiLT52YWwsIGZhbHNl LAorCQkJCQkJCQkJICBmYWxzZSwgTlVMTCwgcXVvdGVfbGl0ZXJhbF9jc3RyKGRib2lkX2NlbGwt PmRiX25hbWUpLAorCQkJCQkJCQkJICBOVUxMLCBOVUxMLCBOVUxMLCAmZG90Y250KTsKKworCQkJ CWlmIChkb3RjbnQgPiAwKQorCQkJCXsKKwkJCQkJcGdfbG9nX2Vycm9yKCJpbXByb3BlciBxdWFs aWZpZWQgbmFtZSAodG9vIG1hbnkgZG90dGVkIG5hbWVzKTogJXMiLAorCQkJCQkJCQkgIGNlbGxk Yi0+dmFsKTsKKwkJCQkJUFFmaW5pc2goY29ubik7CisJCQkJCWV4aXRfbmljZWx5KDEpOworCQkJ CX0KKworCQkJCXJlcyA9IGV4ZWN1dGVRdWVyeShjb25uLCBxdWVyeS0+ZGF0YSk7CisKKwkJCQlp ZiAoKFBRcmVzdWx0U3RhdHVzKHJlcykgPT0gUEdSRVNfVFVQTEVTX09LKSAmJiBQUW50dXBsZXMo cmVzKSkKKwkJCQl7CisJCQkJCXNraXBfZGJfcmVzdG9yZSA9IHRydWU7CisJCQkJCXBnX2xvZ19p bmZvKCJkYXRhYmFzZSBcIiVzXCIgaXMgbWF0Y2hpbmcgd2l0aCBleGNsdWRlIHBhdHRlcm46IFwi JXNcIiIsIGRib2lkX2NlbGwtPmRiX25hbWUsIGNlbGxkYi0+dmFsKTsKKwkJCQl9CisKKwkJCQlQ UWNsZWFyKHJlcyk7CisJCQkJcmVzZXRQUUV4cEJ1ZmZlcihxdWVyeSk7CisJCQl9CisKKwkJCWlm IChza2lwX2RiX3Jlc3RvcmUpCisJCQkJYnJlYWs7CisJCX0KKworCQkvKiBJbmNyZW1lbnQgY291 bnQgaWYgZGIgbmVlZHMgdG8gYmUgcmVzdG9yZWQuICovCisJCWlmIChza2lwX2RiX3Jlc3RvcmUp CisJCXsKKwkJCXBnX2xvZ19pbmZvKCJleGNsdWRpbmcgZGF0YWJhc2UgXCIlc1wiIiwgZGJvaWRf Y2VsbC0+ZGJfbmFtZSk7CisJCQlzaW1wbGVfZGJfb2lkX2xpc3RfZGVsZXRlKGRibmFtZV9vaWRf bGlzdCwgZGJvaWRfY2VsbCwgZGJvaWRwcmVjZWxsKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCWNv dW50X2RiKys7IC8qIEluY3JlbWVudCBkYiBjb3VudGVyLiAqLworCQkJZGJvaWRwcmVjZWxsID0g ZGJvaWRfY2VsbDsKKwkJfQorCisJCS8qIFByb2Nlc3MgbmV4dCBkYm5hbWUgZnJvbSBkYm5hbWUg bGlzdC4gKi8KKwkJZGJvaWRfY2VsbCA9IG5leHQ7CisJfQorCisJcmV0dXJuIGNvdW50X2RiOwor fQorCisvKgorICogZ2V0X2RibmFtZV9vaWRfbGlzdF9mcm9tX21maWxlCisgKgorICogT3BlbiBt YXAuZGF0IGZpbGUgYW5kIHJlYWQgbGluZSBieSBsaW5lIGFuZCB0aGVuIHByZXBhcmUgYSBsaXN0 IG9mIGRhdGFiYXNlCisgKiBuYW1lcyBhbmQgY29ycmVzcG9uZGluZyBkYl9vaWQuCisgKgorICog UmV0dXJucywgdG90YWwgbnVtYmVyIG9mIGRhdGFiYXNlIG5hbWVzIGluIG1hcC5kYXQgZmlsZS4K KyAqLworc3RhdGljIGludAorZ2V0X2RibmFtZV9vaWRfbGlzdF9mcm9tX21maWxlKGNvbnN0IGNo YXIgKmR1bXBkaXJwYXRoLCBTaW1wbGVEYXRhYmFzZU9pZExpc3QgKmRibmFtZV9vaWRfbGlzdCkK K3sKKwlGSUxFICAgICpwZmlsZTsKKwljaGFyICAgIG1hcF9maWxlX3BhdGhbTUFYUEdQQVRIXTsK KwljaGFyICAgIGxpbmVbTUFYUEdQQVRIXTsKKwlpbnQgICAgIGNvdW50ID0gMDsKKworCWlmICgh SXNGaWxlRXhpc3RzSW5EaXJlY3RvcnkocGdfc3RyZHVwKGR1bXBkaXJwYXRoKSwgIm1hcC5kYXQi KSkKKwl7CisJCXBnX2xvZ19pbmZvKCJkYXRhYmFzZXMgcmVzdG9yaW5nIGlzIHNraXBwZWQgYXMg bWFwLmRhdCBmaWxlIGlzIG5vdCBwcmVzZW50IGluIFwiJXNcIiIsIGR1bXBkaXJwYXRoKTsKKwkJ cmV0dXJuIDA7CisJfQorCisJc25wcmludGYobWFwX2ZpbGVfcGF0aCwgTUFYUEdQQVRILCAiJXMv bWFwLmRhdCIsIGR1bXBkaXJwYXRoKTsKKworCS8qIE9wZW4gbWFwLmRhdCBmaWxlLiAqLworCXBm aWxlID0gZm9wZW4obWFwX2ZpbGVfcGF0aCwgUEdfQklOQVJZX1IpOworCisJaWYgKHBmaWxlID09 IE5VTEwpCisJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgb3BlbiBtYXAuZGF0IGZpbGU6IFwiJXNcIiIs IG1hcF9maWxlX3BhdGgpOworCisJLyogQXBwZW5kIGFsbCB0aGUgZGJuYW1lIGFuZCBkYl9vaWQg dG8gdGhlIGxpc3QuICovCisJd2hpbGUoKGZnZXRzKGxpbmUsIE1BWFBHUEFUSCwgcGZpbGUpKSAh PSBOVUxMKQorCXsKKwkJT2lkICAgICAgICAgZGJfb2lkID0gSW52YWxpZE9pZDsKKwkJY2hhcgkJ ZGJfb2lkX3N0cltNQVhQR1BBVEggKyAxXTsKKwkJY2hhciAgICAgICAgZGJuYW1lW01BWFBHUEFU SCArIDFdID0geydcMCd9OworCisJCS8qIEV4dHJhY3QgZGJvaWQuICovCisJCXNzY2FuZihsaW5l LCAiJXUiICwgJmRiX29pZCk7CisJCXNzY2FuZihsaW5lLCAiJXMiICwgZGJfb2lkX3N0cik7CisK KwkJLyogTm93IGNvcHkgZGJuYW1lLiAqLworCQlzdHJjcHkoZGJuYW1lLCBsaW5lICsgc3RybGVu KGRiX29pZF9zdHIpICsgMSk7CisKKwkJLyogUmVtb3ZlIFxuIGZyb20gZGJhbm1lLiAqLworCQlk Ym5hbWVbc3RybGVuKGRibmFtZSkgLSAxXSA9ICdcMCc7CisKKwkJcGdfbG9nX2luZm8oImZvdW5k IGRhdGFiYXNlIFwiJXNcIiAoT0lEOiAldSkgaW4gbWFwLmRhdCBmaWxlIHdoaWxlIHJlc3Rvcmlu Zy4iLCBkYm5hbWUsIGRiX29pZCk7CisKKwkJLyogUmVwb3J0IGVycm9yIGlmIGZpbGUgaGFzIGFu eSBjb3JydXB0ZWQgZGF0YS4gKi8KKwkJaWYgKCFPaWRJc1ZhbGlkKGRiX29pZCkgfHwgc3RybGVu KGRibmFtZSkgPT0gMCkKKwkJCXBnX2ZhdGFsKCJpbnZhbGlkIGVudHJ5IGluIG1hcC5kYXQgZmls ZSBhdCBsaW5lIDogJWQiLCBjb3VudCArIDEpOworCisJCS8qCisJCSAqIFhYWCA6IGJlZm9yZSBh ZGRpbmcgZGJuYW1lIGludG8gbGlzdCwgd2UgY2FuIHZlcmlmeSB0aGF0IHRoaXMgZGIKKwkJICog bmVlZHMgdG8gc2tpcHBlZCBmb3IgcmVzdG9yZSBvciBub3QgYnV0IGFzIG9mIG5vdywgd2UgYXJl IG1ha2luZworCQkgKiBhIGxpc3Qgb2YgYWxsIHRoZSBkYXRhYmFzZXMuCisJCSAqLworCQlzaW1w bGVfZGJfb2lkX2xpc3RfYXBwZW5kKGRibmFtZV9vaWRfbGlzdCwgZGJfb2lkLCBkYm5hbWUpOwor CQljb3VudCsrOworCX0KKworCS8qIENsb3NlIG1hcC5kYXQgZmlsZS4gKi8KKwlmY2xvc2UocGZp bGUpOworCisJcmV0dXJuIGNvdW50OworfQorCisvKgorICogcmVzdG9yZUFsbERhdGFiYXNlcwor ICoKKyAqIFRoaXMgd2lsbCByZXN0b3JlIGRhdGFiYXNlcyB0aG9zZSBkdW1wcyBhcmUgcHJlc2Vu dCBpbgorICogZGlyZWN0b3J5IGJhc2VkIG9uIG1hcC5kYXQgZmlsZSBtYXBwaW5nLgorICoKKyAq IFRoaXMgd2lsbCBza2lwIHJlc3RvcmluZyBmb3IgZGF0YWJhc2VzIHRoYXQgYXJlIHNwZWNpZmll ZCB3aXRoCisgKiBleGNsdWRlLWRhdGFiYXNlIG9wdGlvbi4KKyAqLworc3RhdGljIGludAorcmVz dG9yZUFsbERhdGFiYXNlcyhQR2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKmR1bXBkaXJwYXRoLAor CQkJCQlTaW1wbGVTdHJpbmdMaXN0IGRiX2V4Y2x1ZGVfcGF0dGVybnMsIFJlc3RvcmVPcHRpb25z ICpvcHRzLAorCQkJCQlpbnQgbnVtV29ya2VycykKK3sKKwlTaW1wbGVEYXRhYmFzZU9pZExpc3QJ CQlkYm5hbWVfb2lkX2xpc3QgPSB7TlVMTCwgTlVMTH07CisJU2ltcGxlRGF0YWJhc2VPaWRMaXN0 Q2VsbAkJKmRib2lkX2NlbGw7CisJaW50CQkJCQkJCQlleGl0X2NvZGUgPSAwOworCWludAkJCQkJ CQkJbnVtX2RiX3Jlc3RvcmUgPSAwOworCWludAkJCQkJCQkJbnVtX3RvdGFsX2RiOworCisJbnVt X3RvdGFsX2RiID0gZ2V0X2RibmFtZV9vaWRfbGlzdF9mcm9tX21maWxlKGR1bXBkaXJwYXRoLCAm ZGJuYW1lX29pZF9saXN0KTsKKworCS8qIElmIG1hcC5kYXQgaGFzIG5vIGVudHJ5LCByZXR1cm4g ZnJvbSBoZXJlLiAqLworCWlmIChkYm5hbWVfb2lkX2xpc3QuaGVhZCA9PSBOVUxMKQorCQlyZXR1 cm4gMDsKKworCXBnX2xvZ19pbmZvKCJmb3VuZCB0b3RhbCAlZCBkYXRhYmFzZSBuYW1lcyBpbiBt YXAuZGF0IGZpbGUiLCBudW1fdG90YWxfZGIpOworCisJaWYgKCFjb25uKQorCXsKKwkJcGdfbG9n X2luZm8oInRyeWluZyB0byBjb25uZWN0IGRhdGFiYXNlIFwicG9zdGdyZXNcIiAgdG8gZHVtcCBp bnRvIG91dCBmaWxlIik7CisKKwkJY29ubiA9IGNvbm5lY3REYXRhYmFzZSgicG9zdGdyZXMiLCBO VUxMLCBvcHRzLT5jcGFyYW1zLnBnaG9zdCwKKwkJCQkJCQkgICBvcHRzLT5jcGFyYW1zLnBncG9y dCwgb3B0cy0+Y3BhcmFtcy51c2VybmFtZSwgVFJJX0RFRkFVTFQsCisJCQkJCQkJICAgZmFsc2Us IHByb2duYW1lLCBOVUxMLCBOVUxMKTsKKworCQkvKiBUcnkgd2l0aCB0ZW1wbGF0ZTEuICovCisJ CWlmICghY29ubikKKwkJeworCQkJcGdfbG9nX2luZm8oInRyeWluZyB0byBjb25uZWN0IGRhdGFi YXNlIFwidGVtcGxhdGUxXCIgYXMgZmFpbGVkIHRvIGNvbm5lY3QgdG8gZGF0YWJhc2UgXCJwb3N0 Z3Jlc1wiIHRvIGR1bXAgaW50byBvdXQgZmlsZSIpOworCisJCQljb25uID0gY29ubmVjdERhdGFi YXNlKCJ0ZW1wbGF0ZTEiLCBOVUxMLCBvcHRzLT5jcGFyYW1zLnBnaG9zdCwKKwkJCQkJCQkJICAg b3B0cy0+Y3BhcmFtcy5wZ3BvcnQsIG9wdHMtPmNwYXJhbXMudXNlcm5hbWUsIFRSSV9ERUZBVUxU LAorCQkJCQkJCQkgICBmYWxzZSwgcHJvZ25hbWUsIE5VTEwsIE5VTEwpOworCisJCQlpZiAoIWNv bm4pCisJCQkJcGdfbG9nX2luZm8oInRoZXJlIGlzIG5vIGRhdGFiYXNlIGNvbm5lY3Rpb24gc28g Y29uc2lkZXIgcGF0dGVybiBhcyBzaW1wbGUgbmFtZSBmb3IgZXhjbHVkZS1kYXRhYmFzZSIpOwor CQl9CisJfQorCisJLyoKKwkgKiBwcm9jZXNzaW5nIHBnX3JldHNvcmUgLS1leGNsdWRlLWRhdGFi YXNlPVBBVFRFUk4vTkFNRSBpZiBubyBjb25uZWN0aW9uLgorCSAqLworCW51bV9kYl9yZXN0b3Jl ID0gZmlsdGVyX2RibmFtZXNfZm9yX3Jlc3RvcmUoY29ubiwgJmRibmFtZV9vaWRfbGlzdCwKKwkJ CQkJCQkJCQkJCWRiX2V4Y2x1ZGVfcGF0dGVybnMpOworCisJLyogQ2xvc2UgdGhlIGRiIGNvbm5l Y3Rpb24gYXMgd2UgYXJlIGRvbmUgd2l0aCBnbG9iYWxzIGFuZCBwYXR0ZXJucy4gKi8KKwlpZiAo Y29ubikKKwkJUFFmaW5pc2goY29ubik7CisKKwkvKiBFeGl0IGlmIG5vIGRiIG5lZWRzIHRvIGJl IHJlc3RvcmVkLiAqLworCWlmIChkYm5hbWVfb2lkX2xpc3QuaGVhZCA9PSBOVUxMKQorCQlyZXR1 cm4gMDsKKworCXBnX2xvZ19pbmZvKCJuZWVkcyB0byByZXN0b3JlICVkIGRhdGFiYXNlcyBvdXQg b2YgJWQgZGF0YWJhc2VzIiwgbnVtX2RiX3Jlc3RvcmUsIG51bV90b3RhbF9kYik7CisKKwkvKgor CSAqIFRvIHJlc3RvcmUgbXVsdGlwbGUgZGF0YWJhc2VzLCAtQyAoY3JlYXRlIGRhdGFiYXNlKSBv cHRpb24gc2hvdWxkIGJlIHNwZWNpZmllZAorCSAqIG9yIGFsbCBkYXRhYmFzZXMgc2hvdWxkIGJl IGNyZWF0ZWQgYmVmb3JlIHBnX3Jlc3RvcmUuCisJICovCisJaWYgKG9wdHMtPmNyZWF0ZURCICE9 IDEpCisJCXBnX2xvZ19pbmZvKCJyZXN0b3JpbmcgZHVtcCBvZiBwZ19kdW1wYWxsIHdpdGhvdXQg LUMgb3B0aW9uLCB0aGVyZSBtaWdodCBiZSBtdWx0aXBsZSBkYXRhYmFzZXMgaW4gZGlyZWN0b3J5 LiIpOworCisJLyogVE9ETzogTUFYX09OX0VYSVRfTklDRUxZIGlzIDEwMCBub3cuLi4gbWF4IEFI IGhhbmRsZSByZWdpc3RlciBvbiBleGl0IC4qLworCWlmIChudW1fZGJfcmVzdG9yZSA+IE1BWF9P Tl9FWElUX05JQ0VMWSkKKwl7CisJCXNpbXBsZV9kYl9vaWRfZnVsbF9saXN0X2RlbGV0ZSgmZGJu YW1lX29pZF9saXN0KTsKKwkJcGdfZmF0YWwoImNvdW5kIG5vdCByZXN0b3JlIG1vcmUgdGhhbiAl ZCBkYXRhYmFzZXMgYnkgc2luZ2xlIHBnX3Jlc3RvcmUsIGhlcmUgdG90YWwgZGI6JWQiLAorCQkJ CSAgTUFYX09OX0VYSVRfTklDRUxZLAorCQkJCSAgbnVtX2RiX3Jlc3RvcmUpOworCX0KKworCS8q CisJICogWFhYOiBUT0RPIHRpbGwgbm93LCB3ZSBtYWRlIGEgbGlzdCBvZiBkYXRhYmFzZXMsIHRo b3NlIG5lZWRzIHRvIGJlIHJlc3RvcmVkCisJICogYWZ0ZXIgc2tpcHBpbmcgbmFtZXMgb2YgZXhj bHVkZS1kYXRhYmFzZS4gIE5vdyB3ZSBjYW4gbGF1bmNoIHBhcmFsbGVsCisJICogd29ya2VycyB0 byByZXN0b3JlIHRoZXNlIGRhdGFiYXNlcy4KKwkgKi8KKwlkYm9pZF9jZWxsID0gZGJuYW1lX29p ZF9saXN0LmhlYWQ7CisKKwl3aGlsZShkYm9pZF9jZWxsICE9IE5VTEwpCisJeworCQljaGFyCQlz dWJkaXJwYXRoW01BWFBHUEFUSF07CisJCWludAkJCWRiZXhpdF9jb2RlOworCisJCS8qCisJCSAq IFdlIG5lZWQgdG8gcmVzZXQgb3ZlcnJpZGVfZGJuYW1lIHNvIHRoYXQgb2JqZWN0cyBjYW4gYmUg cmVzdG9yZWQgaW50bworCQkgKiBhbHJlYWR5IGNyZWF0ZWQgZGF0YWJhc2UuICh1c2VkIHdpdGgg LWQvLS1kYm5hbWUgb3B0aW9uKQorCQkgKi8KKwkJaWYgKG9wdHMtPmNwYXJhbXMub3ZlcnJpZGVf ZGJuYW1lKQorCQl7CisJCQlwZnJlZShvcHRzLT5jcGFyYW1zLm92ZXJyaWRlX2RibmFtZSk7CisJ CQlvcHRzLT5jcGFyYW1zLm92ZXJyaWRlX2RibmFtZSA9IE5VTEw7CisJCX0KKworCQlzbnByaW50 ZihzdWJkaXJwYXRoLCBNQVhQR1BBVEgsICIlcy9kYXRhYmFzZXMvJXUiLCBkdW1wZGlycGF0aCwg ZGJvaWRfY2VsbC0+ZGJfb2lkKTsKKworCQlwZ19sb2dfaW5mbygicmVzdG9yaW5nIGRhdGFiYXNl IFwiJXNcIiIsIGRib2lkX2NlbGwtPmRiX25hbWUpOworCisJCWRiZXhpdF9jb2RlID0gcmVzdG9y ZU9uZURhdGFiYXNlKHN1YmRpcnBhdGgsIG9wdHMsIG51bVdvcmtlcnMsIHRydWUpOworCisJCS8q IFN0b3JlIGV4aXRfY29kZSB0byByZXBvcnQgaXQgYmFjay4gKi8KKwkJaWYgKGV4aXRfY29kZSA9 PSAwICYmIGRiZXhpdF9jb2RlICE9IDApCisJCQlleGl0X2NvZGUgPSBkYmV4aXRfY29kZTsKKwor CQlkYm9pZF9jZWxsID0gZGJvaWRfY2VsbC0+bmV4dDsKKwl9CisKKwkvKiBMb2cgbnVtYmVyIG9m IHByb2Nlc3NlZCBkYXRhYmFzZXMuKi8KKwlwZ19sb2dfaW5mbygibnVtYmVyIG9mIHJlc3RvcmVk IGRhdGFiYXNlcyBhcmUgJWQiLCBudW1fZGJfcmVzdG9yZSk7CisKKwkvKiBGcmVlIGRibmFtZSBh bmQgZGJvaWQgbGlzdC4gKi8KKwlzaW1wbGVfZGJfb2lkX2Z1bGxfbGlzdF9kZWxldGUoJmRibmFt ZV9vaWRfbGlzdCk7CisKKwlyZXR1cm4gZXhpdF9jb2RlOworfQorCisvKgorICogZXhlY3V0ZV9n bG9iYWxfc3FsX2NvbW1hbmRzCisgKgorICogVGhpcyB3aWxsIG9wZW4gZ2xvYmFsLmRhdCBmaWxl IGFuZCB3aWxsIGV4ZWN1dGUgYWxsIGdsb2JhbCBzcWwgY29tbWFuZHMgb25lCisgKiBieSBvbmUg c3RhdGVtZW50LgorICogU2VtaWNvbG9uIGlzIGNvbnNpZGVyZWQgYXMgc3RhdGVtZW50IHRlcm1p bmF0b3IuICBJZiBvdXRmaWxlIGlzIHBhc3NlZCwgdGhlbgorICogdGhpcyB3aWxsIGNvcHkgYWxs IHNxbCBjb21tYW5kcyBpbnRvIG91dGZpbGUgcmF0aGVyIHRoZW4gZXhlY3V0aW5nIHRoZW0uCisg Ki8KK3N0YXRpYyB2b2lkCitleGVjdXRlX2dsb2JhbF9zcWxfY29tbWFuZHMoUEdjb25uICpjb25u LCBjb25zdCBjaGFyICpkdW1wZGlycGF0aCwgY29uc3QgY2hhciAqb3V0ZmlsZSkKK3sKKwljaGFy ICAgICAgICAgICAgZ2xvYmFsX2ZpbGVfcGF0aFtNQVhQR1BBVEhdOworCVBHcmVzdWx0CQkqcmVz dWx0OworCVN0cmluZ0luZm9EYXRhCXNxbHN0YXRlbWVudDsKKwlGSUxFCQkJKnBmaWxlOworCisJ c25wcmludGYoZ2xvYmFsX2ZpbGVfcGF0aCwgTUFYUEdQQVRILCAiJXMvZ2xvYmFsLmRhdCIsIGR1 bXBkaXJwYXRoKTsKKworCS8qIE5vdyBvcGVuIGdsb2JhbC5kYXQgZmlsZS4gKi8KKwlwZmlsZSA9 IGZvcGVuKGdsb2JhbF9maWxlX3BhdGgsIFBHX0JJTkFSWV9SKTsKKworCWlmIChwZmlsZSA9PSBO VUxMKQorCQlwZ19mYXRhbCgiY291bGQgbm90IG9wZW4gZ2xvYmFsLmRhdCBmaWxlOiBcIiVzXCIi LCBnbG9iYWxfZmlsZV9wYXRoKTsKKworCS8qCisJICogSWYgb3V0ZmlsZSBpcyBnaXZlbiwgdGhl biBqdXN0IGNvcHkgYWxsIGdsb2JhbC5kYXQgZmlsZSBkYXRhIGludG8KKwkgKiBvdXRmaWxlLgor CSAqLworCWlmIChvdXRmaWxlKQorCXsKKwkJY29weV9nbG9iYWxfZmlsZV90b19vdXRfZmlsZShv dXRmaWxlLCBwZmlsZSk7CisJCXJldHVybjsKKwl9CisKKwkvKiBJbml0IHNxbHN0YXRlbWVudCB0 byBhcHBlbmQgY29tbWFuZHMgKi8KKwlpbml0U3RyaW5nSW5mbygmc3Fsc3RhdGVtZW50KTsKKwor CS8qIFByb2Nlc3MgZmlsZSB0aWxsIEVPRiBhbmQgZXhlY3V0ZSBzcWwgc3RhdGVtZW50cyAqLwor CXdoaWxlIChSZWFkT25lU3RhdGVtZW50KCZzcWxzdGF0ZW1lbnQsIHBmaWxlKSAhPSBFT0YpCisJ eworCQlwZ19sb2dfaW5mbygiZXhlY3V0aW5nICVzIiwgc3Fsc3RhdGVtZW50LmRhdGEpOworCQly ZXN1bHQgPSBQUWV4ZWMoY29ubiwgc3Fsc3RhdGVtZW50LmRhdGEpOworCisJCXN3aXRjaCAoUFFy ZXN1bHRTdGF0dXMocmVzdWx0KSkKKwkJeworCQkJY2FzZSBQR1JFU19DT01NQU5EX09LOgorCQkJ Y2FzZSBQR1JFU19UVVBMRVNfT0s6CisJCQljYXNlIFBHUkVTX0VNUFRZX1FVRVJZOgorCQkJCWJy ZWFrOworCQkJZGVmYXVsdDoKKwkJCQlwZ19sb2dfZXJyb3IoImNvdWxkIG5vdCBleGVjdXRlIHF1 ZXJ5OiBcIiVzXCIgXG5Db21tYW5kIHdhczogXCIlc1wiIiwgUFFlcnJvck1lc3NhZ2UoY29ubiks IHNxbHN0YXRlbWVudC5kYXRhKTsKKwkJfQorCQlQUWNsZWFyKHJlc3VsdCk7CisJfQorCisJZmNs b3NlKHBmaWxlKTsKK30KKworLyoKKyAqIGNvcHlfZ2xvYmFsX2ZpbGVfdG9fb3V0X2ZpbGUKKyAq CisgKiBUaGlzIHdpbGwgY29weSBnbG9iYWwuZGF0IGZpbGUgaW50byBvdXQgZmlsZS4KKyAqLwor c3RhdGljIHZvaWQKK2NvcHlfZ2xvYmFsX2ZpbGVfdG9fb3V0X2ZpbGUoY29uc3QgY2hhciAqb3V0 ZmlsZSwgRklMRSAqcGZpbGUpCit7CisJY2hhcglvdXRfZmlsZV9wYXRoW01BWFBHUEFUSF07CisJ RklMRQkqb2ZpbGU7CisJaW50CQljOworCisJc25wcmludGYob3V0X2ZpbGVfcGF0aCwgTUFYUEdQ QVRILCAiJXMiLCBvdXRmaWxlKTsKKwlvZmlsZSA9IGZvcGVuKG91dF9maWxlX3BhdGgsIFBHX0JJ TkFSWV9XKTsKKworCWlmIChvZmlsZSA9PSBOVUxMKQorCXsKKwkJZmNsb3NlKHBmaWxlKTsKKwkJ cGdfZmF0YWwoImNvdWxkIG5vdCBvcGVuIGZpbGU6IFwiJXNcIiIsIG91dF9maWxlX3BhdGgpOwor CX0KKworCS8qIE5vdyBhcHBlbmQgZ2xvYmFsLmRhdCBpbnRvIG91dCBmaWxlLiAqLworCXdoaWxl ICgoYyA9IGZnZXRjKHBmaWxlKSkgIT0gRU9GKQorCQlmcHV0YyhjLCBvZmlsZSk7CisKKwlmY2xv c2UocGZpbGUpOworCWZjbG9zZShvZmlsZSk7Cit9CisKKy8qCisgKiBzaW1wbGVfZGJfb2lkX2xp c3RfYXBwZW5kCisgKgorICogYXBwZW5kcyBhIG5vZGUgdG8gdGhlIGxpc3QgaW4gdGhlIGVuZC4K KyAqLworc3RhdGljIHZvaWQKK3NpbXBsZV9kYl9vaWRfbGlzdF9hcHBlbmQoU2ltcGxlRGF0YWJh c2VPaWRMaXN0ICpsaXN0LCBPaWQgZGJfb2lkLAorCQljb25zdCBjaGFyICpkYm5hbWUpCit7CisJ U2ltcGxlRGF0YWJhc2VPaWRMaXN0Q2VsbCAqY2VsbDsKKworCWNlbGwgPSBwZ19tYWxsb2Nfb2Jq ZWN0KFNpbXBsZURhdGFiYXNlT2lkTGlzdENlbGwpOworCisJY2VsbC0+bmV4dCA9IE5VTEw7CisJ Y2VsbC0+ZGJfb2lkID0gZGJfb2lkOworCWNlbGwtPmRiX25hbWUgPSBwZ19zdHJkdXAoZGJuYW1l KTsKKworCWlmIChsaXN0LT50YWlsKQorCQlsaXN0LT50YWlsLT5uZXh0ID0gY2VsbDsKKwllbHNl CisJCWxpc3QtPmhlYWQgPSBjZWxsOworCWxpc3QtPnRhaWwgPSBjZWxsOworfQorCisvKgorICog c2ltcGxlX2RiX29pZF9mdWxsX2xpc3RfZGVsZXRlCisgKgorICogZGVsZXRlIGFsbCBjZWxsIGZy b20gZGJuYW1lIGFuZCBkYm9pZCBsaXN0LgorICovCitzdGF0aWMgdm9pZAorc2ltcGxlX2RiX29p ZF9mdWxsX2xpc3RfZGVsZXRlKFNpbXBsZURhdGFiYXNlT2lkTGlzdCAqbGlzdCkKK3sKKwlTaW1w bGVEYXRhYmFzZU9pZExpc3RDZWxsCSpjZWxsID0gbGlzdC0+aGVhZDsKKwlTaW1wbGVEYXRhYmFz ZU9pZExpc3RDZWxsCSpuZXh0Y2VsbCA9IE5VTEw7CisKKwl3aGlsZSAoY2VsbCkKKwl7CisJCW5l eHRjZWxsID0gY2VsbC0+bmV4dDsKKwkJcGZyZWUgKGNlbGwpOworCQljZWxsID0gbmV4dGNlbGw7 CisJfQorCisJbGlzdC0+aGVhZCA9IE5VTEw7CisJbGlzdC0+dGFpbCA9IE5VTEw7Cit9CisKKy8q CisgKiBzaW1wbGVfc3RyaW5nX2Z1bGxfbGlzdF9kZWxldGUKKyAqCisgKiBkZWxldGUgYWxsIGNl bGwgZnJvbSBzdHJpbmcgbGlzdC4KKyAqLworc3RhdGljIHZvaWQKK3NpbXBsZV9zdHJpbmdfZnVs bF9saXN0X2RlbGV0ZShTaW1wbGVTdHJpbmdMaXN0ICpsaXN0KQoreworCVNpbXBsZVN0cmluZ0xp c3RDZWxsCSpjZWxsID0gbGlzdC0+aGVhZDsKKwlTaW1wbGVTdHJpbmdMaXN0Q2VsbCAgICAqY2Vs bG5leHQgPSBOVUxMOworCisJd2hpbGUgKGNlbGwpCisJeworCQljZWxsbmV4dCA9IGNlbGwtPm5l eHQ7CisJCXBmcmVlKGNlbGwpOworCQljZWxsID0gY2VsbG5leHQ7CisJfQorCisJbGlzdC0+aGVh ZCA9IE5VTEw7CisJbGlzdC0+dGFpbCA9IE5VTEw7Cit9CisKKy8qCisgKiBzaW1wbGVfZGJfb2lk X2xpc3RfZGVsZXRlCisgKgorICogZGVsZXRlIGNlbGwgZnJvbSBkYXRhYmFzZSBhbmQgb2lkIGxp c3QuCisgKi8KK3N0YXRpYyB2b2lkCitzaW1wbGVfZGJfb2lkX2xpc3RfZGVsZXRlKFNpbXBsZURh dGFiYXNlT2lkTGlzdCAqbGlzdCwKKwkJU2ltcGxlRGF0YWJhc2VPaWRMaXN0Q2VsbCAqY2VsbCwK KwkJU2ltcGxlRGF0YWJhc2VPaWRMaXN0Q2VsbCAqcHJldikKK3sKKwlpZiAocHJldiA9PSBOVUxM KQorCXsKKwkJbGlzdC0+aGVhZCA9IGNlbGwtPm5leHQ7CisJCXBmcmVlKGNlbGwpOworCX0KKwll bHNlCisJeworCQlwcmV2LT5uZXh0ID0gY2VsbC0+bmV4dDsKKwkJcGZyZWUoY2VsbCk7CisJfQor fQorCisvKgorICogcXVvdGVfbGl0ZXJhbF9pbnRlcm5hbAorICovCitzdGF0aWMgc2l6ZV90Citx dW90ZV9saXRlcmFsX2ludGVybmFsKGNoYXIgKmRzdCwgY29uc3QgY2hhciAqc3JjLCBzaXplX3Qg bGVuKQoreworCWNvbnN0IGNoYXIgKnM7CisJY2hhcgkgICAqc2F2ZWRzdCA9IGRzdDsKKworCWZv ciAocyA9IHNyYzsgcyA8IHNyYyArIGxlbjsgcysrKQorCXsKKwkJaWYgKCpzID09ICdcXCcpCisJ CXsKKwkJCSpkc3QrKyA9IEVTQ0FQRV9TVFJJTkdfU1lOVEFYOworCQkJYnJlYWs7CisJCX0KKwl9 CisKKwkqZHN0KysgPSAnXCcnOworCXdoaWxlIChsZW4tLSA+IDApCisJeworCQlpZiAoU1FMX1NU Ul9ET1VCTEUoKnNyYywgdHJ1ZSkpCisJCQkqZHN0KysgPSAqc3JjOworCQkqZHN0KysgPSAqc3Jj Kys7CisJfQorCSpkc3QrKyA9ICdcJyc7CisKKwlyZXR1cm4gZHN0IC0gc2F2ZWRzdDsKK30KKwor LyoKKyAqIHF1b3RlX2xpdGVyYWxfY3N0cgorICoKKyAqCSAgcmV0dXJucyBhIHByb3Blcmx5IHF1 b3RlZCBsaXRlcmFsCisgKiBjb3BpZWQgZnJvbSBzcmMvYmFja2VuZC91dGlscy9hZHQvcXVvdGUu YworICovCitzdGF0aWMgY2hhciAqCitxdW90ZV9saXRlcmFsX2NzdHIoY29uc3QgY2hhciAqcmF3 c3RyKQoreworCWNoYXIJICAgKnJlc3VsdDsKKwlpbnQJCQlsZW47CisJaW50CQkJbmV3bGVuOwor CisJbGVuID0gc3RybGVuKHJhd3N0cik7CisKKwkvKiBXZSBtYWtlIGEgd29yc3QtY2FzZSByZXN1 bHQgYXJlYTsgd2FzdGluZyBhIGxpdHRsZSBzcGFjZSBpcyBPSyAqLworCXJlc3VsdCA9IHBnX21h bGxvYyhsZW4gKiAyICsgMyArIDEpOworCisJbmV3bGVuID0gcXVvdGVfbGl0ZXJhbF9pbnRlcm5h bChyZXN1bHQsIHJhd3N0ciwgbGVuKTsKKwlyZXN1bHRbbmV3bGVuXSA9ICdcMCc7CisKKwlyZXR1 cm4gcmVzdWx0OworfQpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3QvMDAxX2Jhc2ljLnBs IGIvc3JjL2Jpbi9wZ19kdW1wL3QvMDAxX2Jhc2ljLnBsCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9k ZSAxMDA3NTUKaW5kZXggMjE0MjQwZjFhZTUuLmRlNDFlYzA2ZDg2Ci0tLSBhL3NyYy9iaW4vcGdf ZHVtcC90LzAwMV9iYXNpYy5wbAorKysgYi9zcmMvYmluL3BnX2R1bXAvdC8wMDFfYmFzaWMucGwK QEAgLTIxOSw2ICsyMTksMTEgQEAgY29tbWFuZF9mYWlsc19saWtlKAogCSdwZ19yZXN0b3JlOiBv cHRpb25zIC1DXC8tLWNyZWF0ZSBhbmQgLTFcLy0tc2luZ2xlLXRyYW5zYWN0aW9uIGNhbm5vdCBi ZSB1c2VkIHRvZ2V0aGVyJwogKTsKIAorY29tbWFuZF9mYWlsc19saWtlKAorCVsgJ3BnX3Jlc3Rv cmUnLCAnLS1leGNsdWRlLWRhdGFiYXNlPWZvbycsICctLWdsb2JhbHMtb25seScsICctZCcsICd4 eHgnIF0sCisJcXIvXFFwZ19yZXN0b3JlOiBlcnJvcjogb3B0aW9uIC0tZXhjbHVkZS1kYXRhYmFz ZSBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciB3aXRoIC1nXC8tLWdsb2JhbHMtb25seVxFLywKKwkn cGdfcmVzdG9yZTogb3B0aW9uIC0tZXhjbHVkZS1kYXRhYmFzZSBjYW5ub3QgYmUgdXNlZCB0b2dl dGhlciB3aXRoIC1nLy0tZ2xvYmFscy1vbmx5Jyk7CisKICMgYWxzbyBmYWlscyBmb3IgLXIgYW5k IC10LCBidXQgaXQgc2VlbXMgcG9pbnRsZXNzIHRvIGFkZCBtb3JlIHRlc3RzIGZvciB0aG9zZS4K IGNvbW1hbmRfZmFpbHNfbGlrZSgKIAlbICdwZ19kdW1wYWxsJywgJy0tZXhjbHVkZS1kYXRhYmFz ZT1mb28nLCAnLS1nbG9iYWxzLW9ubHknIF0sCkBAIC0yMjYsNCArMjMxLDggQEAgY29tbWFuZF9m YWlsc19saWtlKAogCSdwZ19kdW1wYWxsOiBvcHRpb24gLS1leGNsdWRlLWRhdGFiYXNlIGNhbm5v dCBiZSB1c2VkIHRvZ2V0aGVyIHdpdGggLWcvLS1nbG9iYWxzLW9ubHknCiApOwogCitjb21tYW5k X2ZhaWxzX2xpa2UoCisJWyAncGdfZHVtcGFsbCcsICctLWZvcm1hdCcsICd4JyBdLAorCXFyL1xR cGdfZHVtcGFsbDogZXJyb3I6IHVucmVjb2duaXplZCBhcmNoaXZlIGZvcm1hdCAieCI7XEUvLAor CSdwZ19kdW1wYWxsOiB1bnJlY29nbml6ZWQgYXJjaGl2ZSBmb3JtYXQnKTsKIGRvbmVfdGVzdGlu ZygpOwpkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMv dG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAppbmRleCA5YTNiZWU5M2RlYy4uY2RhZjFhZDM0 M2MgMTAwNjQ0Ci0tLSBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3Ny Yy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CkBAIC0yNjczLDYgKzI2NzMsOCBAQCBTaHV0 ZG93bk1vZGUKIFNpZ25UU1ZlY3RvcgogU2ltcGxlQWN0aW9uTGlzdAogU2ltcGxlQWN0aW9uTGlz dENlbGwKK1NpbXBsZURhdGFiYXNlT2lkTGlzdAorU2ltcGxlRGF0YWJhc2VPaWRMaXN0Q2VsbAog U2ltcGxlRWNvbnRleHRTdGFja0VudHJ5CiBTaW1wbGVPaWRMaXN0CiBTaW1wbGVPaWRMaXN0Q2Vs bAotLSAKMi4zOS4zCgo= --0000000000002ddd12062d2e7d02--