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 1tVwJ9-00CoIF-N0 for pgsql-hackers@arkaria.postgresql.org; Thu, 09 Jan 2025 17:27:00 +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 1tVwJ9-005HyV-0K for pgsql-hackers@arkaria.postgresql.org; Thu, 09 Jan 2025 17:26:58 +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 1tVwJ8-005HyN-HD for pgsql-hackers@lists.postgresql.org; Thu, 09 Jan 2025 17:26:58 +0000 Received: from mail-wm1-x330.google.com ([2a00:1450:4864:20::330]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1tVwJ4-000lj9-2D for pgsql-hackers@postgresql.org; Thu, 09 Jan 2025 17:26:57 +0000 Received: by mail-wm1-x330.google.com with SMTP id 5b1f17b1804b1-43635796b48so8145895e9.0 for ; Thu, 09 Jan 2025 09:26:55 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1736443614; x=1737048414; darn=postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=XY8bWolUmrWgjwtVSDaGP/qdQWz+qJdfXutz/i1/uCA=; b=HSwluCbYGjE2C/X4W8qbNmBqjHSAuZmzfBJGPIvMgjL+g2UM42hXuIpclIIl55FlnS ypRTHOpKN3I6ePM9BPCf7mYKlpeaq+vEDM1T6G760B1Esy0jSXDT6e2jqOLtoF/dOuTn brktG25ZbPGDkota+NJeMA/z4+QYux8X5NfhlZPVrHjPPW4RLMBddVsxy7tqLa5YOIIj D7H82pPXIf0LswTVfLiBnaskgcp4GPYnU5kChPVzdQxz0kpwFbVWUOIR4mDgPg57K23L OM17m3pcpZn/0TVRNGGBpTUt6VBNeyjHWHiaopMHSJDoXkELqVvjz7/IBA8x8AUvyTxK 9Ipw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1736443614; x=1737048414; 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=XY8bWolUmrWgjwtVSDaGP/qdQWz+qJdfXutz/i1/uCA=; b=Oktvh7Fn0Nlx8NgPMUaYGySyaNMU9H3WagaKWIgMHA9O+uFBEdJHuwEYdlFrxx6o0V 1y8pL9tRJeef3Lcs/8VUw/LsDSqsgcq9EIoaIisoOIyI7Zpz24cs6NJfAyjuJL2eF3US EVcRuc9Qi4BlHE46XHVeUn89sJDIwqLNICNZLHVHaega6moCYive2EzZDql4wxHWc1n4 Pwn3h2IltymsO7YyRlV5i2MxG3SDtRyN0vTKXbCAfEUliwzxuUxdEkkmByvGSvomUunO N5aDRCWAxNyE27pvV07Gu/w/Joj+SiKfawLveyRrJLdy7ZHdspOcfwTAZ57IhelAN8zR Z7Tw== X-Forwarded-Encrypted: i=1; AJvYcCXEt7xFvrG8feWer0x55Qj3K8HFuUDMIF7An1blXgz7cgtjwuw6hQg6Y5RgJ21/sxMm35Zjn4iDDc+sWMbp@postgresql.org X-Gm-Message-State: AOJu0YzUveTZilatHtE9MfTEO5vHlUwp9ilSCJxAdMo3gfc4WUDUvYHM D/0uQ7IBzpd4EPu3wjttWNUCagqaZ79oUcA2VdAs+7sY3kvTNikSN6mFWRe/x9MC06UxX27EaEO s3t0yH1rdtjdsyB5fS654alLj1ns= X-Gm-Gg: ASbGncvW1dC3vV+hxBdmdYI9EfouuZmIFLH8plCN3QWCpyy0PUxqfxEXh6+4hO9HEhT TtL55iX+Uw16rLzLztiTByCrenUKOi4UNwa2iERvkH6Hq020kncDOTqMZYtG/qWaCZGy+aAXS X-Google-Smtp-Source: AGHT+IF4eQ1DAsapd+k5sEShgcig4c2WVwIularLCDiGmMm3kjKu1AMus98WVBqm6J1p3ISnbsCC6qoG6SXcgAP6JeQ= X-Received: by 2002:a05:600c:4e43:b0:434:fddf:5c06 with SMTP id 5b1f17b1804b1-436e9d686f3mr27743935e9.1.1736443613841; Thu, 09 Jan 2025 09:26:53 -0800 (PST) MIME-Version: 1.0 References: <740696.1718036463@sss.pgh.pa.us> In-Reply-To: From: Mahendra Singh Thalor Date: Thu, 9 Jan 2025 22:56:42 +0530 X-Gm-Features: AbW1kvYD03nPaoWU491QWcklkNiilkbIClnHs8Fh968xuisjM9F2r-V6Hs5SxXg Message-ID: Subject: Re: Non-text mode for pg_dumpall To: Guillaume Lelarge Cc: Nathan Bossart , Magnus Hagander , Tom Lane , Andrew Dunstan , PostgreSQL-development , Dilip Kumar Content-Type: multipart/mixed; boundary="000000000000c6a775062b494808" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000c6a775062b494808 Content-Type: multipart/alternative; boundary="000000000000c6a774062b494806" --000000000000c6a774062b494806 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Thu, 9 Jan 2025 at 08:11, Mahendra Singh Thalor wrote: > > On Thu, 9 Jan 2025 at 02:30, Guillaume Lelarge wrote: > > > > Hi, > > > > Le mer. 8 janv. 2025 =C3=A0 17:41, Mahendra Singh Thalor a =C3=A9crit : > >> > >> On Wed, 8 Jan 2025 at 20:07, Mahendra Singh Thalor wrote: > >> > > >> > Hi all, > >> > > >> > On Wed, 8 Jan 2025 at 00:34, Mahendra Singh Thalor < mahi6run@gmail.com> wrote: > >> > > > >> > > On Mon, 6 Jan 2025 at 23:05, Nathan Bossart < nathandbossart@gmail.com> wrote: > >> > > > > >> > > > On Thu, Jan 02, 2025 at 02:05:13AM +0530, Mahendra Singh Thalor wrote: > >> > > > > Here, I am attaching an updated patch. I fixed some bugs of v01 patch and > >> > > > > did some code cleanup also. > >> > > > > >> > > > Thank you for picking this up! I started to review it, but the > >> > > > documentation changes didn't build, and a few tests in check-world are > >> > > > failing. Would you mind resolving those issues? Also, if you haven't > >> > > > already, please add an entry to the next commitfest [0] to ensure that 1) > >> > > > this feature is tracked and 2) the automated tests will run. > >> > > > >> > > Thanks Nathan for the quick response. > >> > > > >> > > I fixed bugs of documentation changes and check-world in the latest patch. Now docs are building and check-world is passing. > >> > > > >> > > I added entry into commitfest for this patch.[0] > >> > > > >> > > > > >> > > > + if (dbfile) > >> > > > + { > >> > > > + printfPQExpBuffer(&cmd, "\"%s\" %s %s", pg_dump_bin, > >> > > > + dbfile, create_opts); > >> > > > + appendPQExpBufferStr(&cmd, " -F d "); > >> > > > + } > >> > > > > >> > > > Have you given any thought to allowing a directory of custom format files, > >> > > > as discussed upthread [1]? Perhaps that is better handled as a follow-up > >> > > > patch, but it'd be good to understand the plan, anyway. > >> > > > >> > > I will make these changes and will test. I will update my findings after doing some testing. > >> > > >> > In the latest patch, I added dump and restoring for directory/custom/tar/plain formats. Please consider this patch for review and testing. > >> > > >> > Design: > >> > When we give --format=3Dd|c|t then we are dumping all global sql commands in global.dat in plain sql format and we are making a map.dat file with dbname and dboid. For each database, we are making separate subdirectory with dboid under databases directory and dumping as per archive format(d|c|t). > >> > While restoring, first we are restoring all global sql commands from global.dat and then we are restoring one by one all databases. As we are supporting --exclude-database with pg_dumpall, the same we are supporting with pg_restore also to skip restoring on some specified database patterns. > >> > If we want to restore a single database, then we can specided particular subdirectory from the databases folder. To get file name, we refer dbname into map.file. > >> > > >> > TODO: Now I will work on test cases for these new added options to the pg_dumpall and pg_restore. > >> > > >> > Here, I am attaching the v04 patch for testing and review. > >> > >> Sorry. My mistake. > >> v04 was the delta patch on the top of v03. > >> > >> Here, I am attaching the v05 patch for testing and review. > >> > > > > Just FWIW, I did a quick test tonight. It applies cleanly, compiles OK. I did a dump: > > Thanks for testing and review. > > > > > $ pg_dumpall -Fd -f dir > > > > and then a restore (after dropping the databases I had): > > > > $ pg_restore -Cd postgres -v dir > > > > It worked really well. That's great. > > > > Quick thing to fix: you've got this error message: > > pg_restore: error: -d/--dbanme should be given when using archive dump of pg_dumpall > > > > I guess it is --dbname, rather than --dbanme. > > Fixed. > > > > > Of course, it needs much more testing, but this feature would be great to have. Thanks for working on this! > > > > > > Apart from above typo, I fixed some review comments those I received > from Andrew in offline discussion. Thanks Andrew for the quick review. > > Here, I am attaching an updated patch for review and testing. > Hi all, Based on some testing(dump was shared by Andrew, Thanks Andrew), I fixed some more bugs in the attached patch. There are some open points for this patch. I will put those points in follow-up patches also. *Point 1*: With pg_dumpall, we have option --exclude-database=3DPATTERN, an= d there we are validating this PATTERN by server because we have connection but in pg_restore, we don't have some db connection in some case so how to handle these patterns? or should we use only NAMES for --exclude-database ? *Point 2*: For each database, we are registering entry to on_exit_nicely array due AH entry but max size of array is MAX_ON_EXIT_NICELY=3D20, so after 20 db restoring, we are getting fatal so either my code needs to reset this array or do we need to increase array size? Here, I am attaching an updated patch for review and testing. --=20 Thanks and Regards Mahendra Singh Thalor EnterpriseDB: http://www.enterprisedb.com --000000000000c6a774062b494806 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
On Thu, 9 Jan 2025 at 08:11, Mahendra Singh Thalor <mahi6run@gmail.com> wrote:
>= ;
> On Thu, 9 Jan 2025 at 02:30, Guillaume Lelarge <guillaume@lelarge.info> wrote:
> &= gt;
> > Hi,
> >
> > Le mer. 8 janv. 2025 =C3=A0 = 17:41, Mahendra Singh Thalor <mahi= 6run@gmail.com> a =C3=A9crit :
> >>
> >> On = Wed, 8 Jan 2025 at 20:07, Mahendra Singh Thalor <mahi6run@gmail.com> wrote:
> >> >
&= gt; >> > Hi all,
> >> >
> >> > On We= d, 8 Jan 2025 at 00:34, Mahendra Singh Thalor <mahi6run@gmail.com> wrote:
> >> > >> >> > > On Mon, 6 Jan 2025 at 23:05, Nathan Bossart <<= a href=3D"mailto:nathandbossart@gmail.com">nathandbossart@gmail.com>= wrote:
> >> > > >
> >> > > > On = Thu, Jan 02, 2025 at 02:05:13AM +0530, Mahendra Singh Thalor wrote:
>= >> > > > > Here, I am attaching an updated patch. I fixe= d some bugs of v01 patch and
> >> > > > > did some = code cleanup also.
> >> > > >
> >> > &g= t; > Thank you for picking this up!=C2=A0 I started to review it, but th= e
> >> > > > documentation changes didn't build, a= nd a few tests in check-world are
> >> > > > failing.= =C2=A0 Would you mind resolving those issues?=C2=A0 Also, if you haven'= t
> >> > > > already, please add an entry to the next = commitfest [0] to ensure that 1)
> >> > > > this featu= re is tracked and 2) the automated tests will run.
> >> > &g= t;
> >> > > Thanks Nathan for the quick response.
>= >> > >
> >> > > I fixed bugs of documentatio= n changes and check-world in the latest patch. Now docs are building and ch= eck-world is passing.
> >> > >
> >> > >= I added entry into commitfest for this patch.[0]
> >> > >= ;
> >> > > >
> >> > > > + =C2=A0 = =C2=A0 =C2=A0 if (dbfile)
> >> > > > + =C2=A0 =C2=A0 = =C2=A0 {
> >> > > > + =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 printfPQExpBuffer(&cmd, "\"%s\" %s %s&= quot;, pg_dump_bin,
> >> > > > + =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 d= bfile, create_opts);
> >> > > > + =C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0 =C2=A0 =C2=A0 appendPQExpBufferStr(&cmd, " -F d &qu= ot;);
> >> > > > + =C2=A0 =C2=A0 =C2=A0 }
> >= > > > >
> >> > > > Have you given any thou= ght to allowing a directory of custom format files,
> >> > &= gt; > as discussed upthread [1]?=C2=A0 Perhaps that is better handled as= a follow-up
> >> > > > patch, but it'd be good to= understand the plan, anyway.
> >> > >
> >> &= gt; > I will make these changes and will test. I will update my findings= after doing some testing.
> >> >
> >> > In t= he latest patch, I added dump and restoring for directory/custom/tar/plain = formats. Please consider this patch for review and testing.
> >>= ; >
> >> > Design:
> >> > When we give --f= ormat=3Dd|c|t then we are dumping all global sql commands in global.dat in = plain sql format and we are making a map.dat file with dbname and dboid. Fo= r each database, we are making separate subdirectory with dboid under datab= ases directory and dumping as per archive format(d|c|t).
> >> &= gt; While restoring, first we are restoring all global sql commands from gl= obal.dat and then we are restoring one by one all databases.=C2=A0 As we ar= e supporting --exclude-database with pg_dumpall, the same we are supporting= with pg_restore also to skip restoring on some specified database patterns= .
> >> > If we want to restore a single database, then we ca= n specided particular subdirectory from the databases folder. To get file n= ame, we refer dbname into map.file.
> >> >
> >> = > TODO: Now I will work on test cases for these new added options to the= pg_dumpall and pg_restore.
> >> >
> >> > Her= e, I am attaching the v04 patch for testing and review.
> >>> >> Sorry. My mistake.
> >> v04 was the delta patch = on the top of v03.
> >>
> >> Here, I am attaching t= he v05 patch for testing and review.
> >>
> >
> = > Just FWIW, I did a quick test tonight. It applies cleanly, compiles OK= . I did a dump:
>
> Thanks for testing and review.
>
&= gt; >
> > $ pg_dumpall -Fd -f dir
> >
> > and= then a restore (after dropping the databases I had):
> >
> = > $ pg_restore -Cd postgres -v dir
> >
> > It worked r= eally well. That's great.
> >
> > Quick thing to fix:= you've got this error message:
> > pg_restore: error: =C2=A0-= d/--dbanme should be given when using archive dump of pg_dumpall
> &g= t;
> > I guess it is --dbname, rather than --dbanme.
>
&g= t; Fixed.
>
> >
> > Of course, it needs much more t= esting, but this feature would be great to have. Thanks for working on this= !
> >
> >
>
> Apart from above typo, I fixed = some review comments those I received
> from Andrew in offline discus= sion. Thanks Andrew for the quick review.
>
> Here, I am attach= ing an updated patch for review and testing.
>
Hi all,

Bas= ed on some testing(dump was shared by Andrew, Thanks Andrew), I fixed some = more bugs in the attached patch.
There are some open points for this pat= ch. I will put those points in follow-up patches also.

Point 1: With pg_dumpall, we have option --exclude-database=3DPATTERN, and there = we are validating this PATTERN by server because
we have connection but = in pg_restore, we don't have some db connection in some case so how to = handle these patterns? or should we use
only NAMES for --exclude-databas= e ?

Point 2:
For each database, we are registering entry t= o on_exit_nicely array due AH entry but max size of array is MAX_ON_EXIT_NI= CELY=3D20,=C2=A0
so after 20 db restoring, we are getting fatal so eith= er my code needs to reset this array or do we need to increase array size?<= /div>

Here, I am attaching an updated patch for review a= nd testing.


--
Thanks and Regards
Mahen= dra Singh Thalor
EnterpriseDB: h= ttp://www.enterprisedb.com
--000000000000c6a774062b494806-- --000000000000c6a775062b494808 Content-Type: application/octet-stream; name="v07_pg_dumpall-with-directory-tar-custom-format-08-jan.patch" Content-Disposition: attachment; filename="v07_pg_dumpall-with-directory-tar-custom-format-08-jan.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m5plomct0 RnJvbSBkNmQ3ZjQ2ZWYzNGI3NWZmM2IwYWY4YjQ2YjRiZWEyY2U4M2ZlMjJlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYWhlbmRyYSBTaW5naCBUaGFsb3IgPG1haGk2cnVuQGdtYWls LmNvbT4KRGF0ZTogVGh1LCA5IEphbiAyMDI1IDIyOjM3OjU2ICswNTMwClN1YmplY3Q6IFtQQVRD SF0gZ19kdW1wYWxsIHdpdGggZGlyZWN0b3J5fHRhcnxjdXN0b20gZm9ybWF0IGFuZCByZXN0b3Jl ICBpdCAKIGJ5IHBnX3Jlc3RvcmUKCm5ldyBvcHRpb24gdG8gcGdfZHVtcGFsbDoKLUYsIC0tZm9y bWF0PWR8dHxjfHAgIG91dHB1dCBmaWxlIGZvcm1hdCAoIHBsYWluIHRleHQgKGRlZmF1bHQpKQoK RXg6MSAuL3BnX2R1bXBhbGwgLS1mb3JtYXQ9ZGlyZWN0b3J5IC0tZmlsZT1kdW1wRGlyTmFtZQpF eDoyIC4vcGdfZHVtcGFsbCAtLWZvcm1hdD10YXIgLS1maWxlPWR1bXBEaXJOYW1lCkV4OjMgLi9w Z19kdW1wYWxsIC0tZm9ybWF0PWN1c3RvbSAtLWZpbGU9ZHVtcERpck5hbWUKRXg6NCAuL3BnX2R1 bXBhbGwgLS1mb3JtYXQ9cGxhaW4gLS1maWxlPWR1bXBEaXJOYW1lCgpkdW1wcyBhcmUgYXM6Cmds b2JhbC5kYXQgOjo6IGdsb2JhbCBzcWwgY29tbWFuZHMgaW4gc2ltcGxlIHBsYWluIGZvcm1hdApt YXAuZGF0LiAgIDo6OiBkYm9pZCBkYm5hbWUgLS0tZW50cmllcyBmb3IgYWxsIGRhdGFiYXNlcyBp biBzaW1wbGUgdGV4dCBmb3JtCmRhdGFiYXNlcy4gOjo6CiAgICAgIHN1YmRpciAgICAgZGJvaWQx ICAtPiB0b2MuZGF0IGFuZCBkYXRhIGZpbGVzIGluIGFyY2hpdmUgZm9ybWF0CiAgICAgIHN1YmRp ciAgICAgZGJvaWQyLiAtPiB0b2MuZGF0IGFuZCBkYXRhIGZpbGVzIGluIGFyY2hpdmUgZm9ybWF0 CiAgICAgICAgICAgICAgZXRjCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpOT1RFOgppZiBuZWVkZWQsIHJl c3RvcmUgc2luZ2xlIGRiIGJ5IHBhcnRpY3VsYXIgc3ViZGlyCgpFeDogLi9wZ19yZXN0b3JlIC0t Zm9ybWF0PWRpcmVjdG9yeSAtZCBwb3N0Z3JlcyBkdW1wRGlyTmFtZS9kYXRhYmFzZXMvNQogICAt LSBoZXJlLCA1IGlzIHRoZSBkYm9pZCBvZiBwb3N0Z3JlcyBkYgogICAtLSB0byBnZXQgZGJvaWQs IHJlZmVyIGRibmFtZSBpbiBtYXAuZmlsZQoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KbmV3IG9wdGlvbnMg dG8gcGdfcmVzdG9yZToKLWcsIC0tZ2xvYmFscy1vbmx5ICAgICAgICAgICByZXN0b3JlIG9ubHkg Z2xvYmFsIG9iamVjdHMsIG5vIGRhdGFiYXNlcwotLWV4Y2x1ZGUtZGF0YWJhc2U9UEFUVEVSTiAg IGV4Y2x1ZGUgZGF0YWJhc2Ugd2hvc2UgbmFtZSBtYXRjaGVzIHBhdHRlcm4KCldoZW4gd2UgZ2l2 ZSAtZy8tLWdsb2JhbHMtb25seSBvcHRpb24sIHRoZW4gb25seSByZXN0b3JlIGdsb2JhbHMsIG5v IGRiIHJlc3RvcmluZy4KCkRlc2lnbjoKV2hlbiAtLWZvcm1hdD1kfHR8YyBpcyBzcGVjaWZpZWQg YW5kIHRoZXJlIGlzIG5vIHRvYy5kYXQgaW4gbWFpbiBkaXJlY3RvcnksIHRoZW4gY2hlY2sKZm9y IGdsb2JhbC5kYXQgYW5kIG1hcC5kYXQgdG8gcmVzdG9yZSBhbGwgZGF0YWJhc2VzLiBJZiBib3Ro IGZpbGVzIGFyZSBleGlzdHMgaW4gZGlyZWN0b3J5LAp0aGVuIGZpcnN0IHJlc3RvcmUgYWxsIGds b2JhbHMgZnJvbSBnbG9iYWwuZGF0IGFuZCB0aGVuIHJlc3RvcmUgYWxsIGRhdGFiYXNlcyBvbmUg Ynkgb25lCmZyb20gbWFwLmRhdCBsaXN0LgoKVE9ETzE6IFdlIG5lZWQgdG8gdGhpbmsgZm9yIC0t ZXhjbHVkZS1kYXRhYmFzZT1QQVRURVJOIGZvciBwZ19yZXN0b3JlLgoKVE9ETzI6IFdlIG5lZWQg dG8gbWFrZSBjaGFuZ2VzIGZvciBleGl0X25pY2VseSBhcyB3ZSBhcmUgb25lIGVudHJ5IGZvciBl YWNoIGRhdGFiYXNlIHdoaWxlCnJlc3RvcmluZy4gTUFYX09OX0VYSVRfTklDRUxZCgpUT0RPMzog dGVzdCBjYXNlcyBmb3IgbmV3IGFkZGVkIG9wdGlvbnMuCgpUT0RPNDogV2UgY2FuIGR1bXAgYW5k IHJlc3RvcmUgZGF0YWJhc2VzIGluIHBhcmFsbGVsIG1vZGUuClRoaXMgbmVlZHMgbW9yZSBzdHVk eS4KLS0tCiBkb2Mvc3JjL3NnbWwvcmVmL3BnX2R1bXBhbGwuc2dtbCAgICAgfCAgNjcgKysrCiBk b2Mvc3JjL3NnbWwvcmVmL3BnX3Jlc3RvcmUuc2dtbCAgICAgfCAgMzAgKwogc3JjL2Jpbi9wZ19k dW1wL3BnX2JhY2t1cC5oICAgICAgICAgIHwgICA0ICstCiBzcmMvYmluL3BnX2R1bXAvcGdfYmFj a3VwX2FyY2hpdmVyLmMgfCAgMTUgKy0KIHNyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfdGFyLmMg ICAgICB8ICAgMiArLQogc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF91dGlscy5jICAgIHwgICAz ICstCiBzcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jICAgICAgICAgICAgfCAgIDIgKy0KIHNyYy9i aW4vcGdfZHVtcC9wZ19kdW1wYWxsLmMgICAgICAgICB8IDE3MSArKysrKy0KIHNyYy9iaW4vcGdf ZHVtcC9wZ19yZXN0b3JlLmMgICAgICAgICB8IDg3MSArKysrKysrKysrKysrKysrKysrKysrKysr Ky0KIDkgZmlsZXMgY2hhbmdlZCwgMTEyMiBpbnNlcnRpb25zKCspLCA0MyBkZWxldGlvbnMoLSkK CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvcmVmL3BnX2R1bXBhbGwuc2dtbCBiL2RvYy9zcmMv c2dtbC9yZWYvcGdfZHVtcGFsbC5zZ21sCmluZGV4IDAxNGYyNzkyNTguLjc3YThkNmEwYzUgMTAw NjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9yZWYvcGdfZHVtcGFsbC5zZ21sCisrKyBiL2RvYy9zcmMv c2dtbC9yZWYvcGdfZHVtcGFsbC5zZ21sCkBAIC0xMjUsNiArMTI1LDczIEBAIFBvc3RncmVTUUwg ZG9jdW1lbnRhdGlvbgogICAgICAgPC9saXN0aXRlbT4KICAgICAgPC92YXJsaXN0ZW50cnk+CiAK Kzx2YXJsaXN0ZW50cnk+CisgICAgICA8dGVybT48b3B0aW9uPi1GIDxyZXBsYWNlYWJsZSBjbGFz cz0icGFyYW1ldGVyIj5mb3JtYXQ8L3JlcGxhY2VhYmxlPjwvb3B0aW9uPjwvdGVybT4KKyAgICAg IDx0ZXJtPjxvcHRpb24+LS1mb3JtYXQ9PHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmZv cm1hdDwvcmVwbGFjZWFibGU+PC9vcHRpb24+PC90ZXJtPgorICAgICAgPGxpc3RpdGVtPgorICAg ICAgIDxwYXJhPgorICAgICAgICBTcGVjaWZ5IGZvcm1hdCBvZiBkdW1wIGZpbGVzLiAgSWYgd2Ug d2FudCB0byBkdW1wIGFsbCB0aGUgZGF0YWJhc2VzLAorICAgICAgICB0aGVuIHBhc3MgdGhpcyBh cyBkaXJlY3Rvcnkgc28gdGhhdCBkdW1wIG9mIGFsbCBkYXRhYmFzZXMgY2FuIGJlIHRha2VuCisg ICAgICAgIGluIHNlcGFyYXRlIHN1YmRpcmVjdG9yeSBpbiBhcmNoaXZlIGZvcm1hdC4KKyAgICAg ICAgYnkgZGVmYXVsdCwgdGhpcyBpcyBwbGFpbi4KKworICAgICAgIDx2YXJpYWJsZWxpc3Q+Cisg ICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgICA8dGVybT48bGl0ZXJhbD5kPC9saXRlcmFs PjwvdGVybT4KKyAgICAgICAgIDx0ZXJtPjxsaXRlcmFsPmRpcmVjdG9yeTwvbGl0ZXJhbD48L3Rl cm0+CisgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgIE91 dHB1dCBhIGRpcmVjdG9yeS1mb3JtYXQgYXJjaGl2ZSBzdWl0YWJsZSBmb3IgaW5wdXQgaW50byBw Z19yZXN0b3JlLiBUaGlzIHdpbGwgY3JlYXRlIGEgZGlyZWN0b3J5CisgICAgICAgICAgIHdpdGgg b25lIGZpbGUgZm9yIGVhY2ggdGFibGUgYW5kIGxhcmdlIG9iamVjdCBiZWluZyBkdW1wZWQsIHBs dXMgYSBzby1jYWxsZWQgVGFibGUgb2YgQ29udGVudHMKKyAgICAgICAgICAgZmlsZSBkZXNjcmli aW5nIHRoZSBkdW1wZWQgb2JqZWN0cyBpbiBhIG1hY2hpbmUtcmVhZGFibGUgZm9ybWF0IHRoYXQg cGdfcmVzdG9yZSBjYW4gcmVhZC4gQQorICAgICAgICAgICBkaXJlY3RvcnkgZm9ybWF0IGFyY2hp dmUgY2FuIGJlIG1hbmlwdWxhdGVkIHdpdGggc3RhbmRhcmQgVW5peCB0b29sczsgZm9yIGV4YW1w bGUsIGZpbGVzIGluIGFuCisgICAgICAgICAgIHVuY29tcHJlc3NlZCBhcmNoaXZlIGNhbiBiZSBj b21wcmVzc2VkIHdpdGggdGhlIGd6aXAsIGx6NCwgb3IgenN0ZCB0b29scy4gVGhpcyBmb3JtYXQg aXMgY29tcHJlc3NlZAorICAgICAgICAgICBieSBkZWZhdWx0IHVzaW5nIGd6aXAgYW5kIGFsc28g c3VwcG9ydHMgcGFyYWxsZWwgZHVtcHMuCisgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgPC9s aXN0aXRlbT4KKyAgICAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAgICAgPHZhcmxpc3RlbnRy eT4KKyAgICAgICAgIDx0ZXJtPjxsaXRlcmFsPnA8L2xpdGVyYWw+PC90ZXJtPgorICAgICAgICAg PHRlcm0+PGxpdGVyYWw+cGxhaW48L2xpdGVyYWw+PC90ZXJtPgorICAgICAgICAgPGxpc3RpdGVt PgorICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICBPdXRwdXQgYSBwbGFpbi10ZXh0IFNRTCBz Y3JpcHQgZmlsZSAodGhlIGRlZmF1bHQpLgorICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgIDwv bGlzdGl0ZW0+CisgICAgICAgIDwvdmFybGlzdGVudHJ5PgorCisgICAgICAgIDx2YXJsaXN0ZW50 cnk+CisgICAgICAgICA8dGVybT48bGl0ZXJhbD5jPC9saXRlcmFsPjwvdGVybT4KKyAgICAgICAg IDx0ZXJtPjxsaXRlcmFsPmN1c3RvbTwvbGl0ZXJhbD48L3Rlcm0+CisgICAgICAgICA8bGlzdGl0 ZW0+CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgIE91dHB1dCBhIGN1c3RvbS1mb3JtYXQg YXJjaGl2ZSBzdWl0YWJsZSBmb3IgaW5wdXQgaW50byBwZ19yZXN0b3JlLiBUb2dldGhlciB3aXRo IHRoZQorICAgICAgICAgICBkaXJlY3Rvcnkgb3V0cHV0IGZvcm1hdCwgdGhpcyBpcyB0aGUgbW9z dCBmbGV4aWJsZSBvdXRwdXQgZm9ybWF0IGluIHRoYXQgaXQgYWxsb3dzIG1hbnVhbAorICAgICAg ICAgICBzZWxlY3Rpb24gYW5kIHJlb3JkZXJpbmcgb2YgYXJjaGl2ZWQgaXRlbXMgZHVyaW5nIHJl c3RvcmUuIFRoaXMgZm9ybWF0IGlzIGFsc28KKyAgICAgICAgICAgY29tcHJlc3NlZCBieSBkZWZh dWx0LgorICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwv dmFybGlzdGVudHJ5PgorCisgICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgPHRlcm0+ PGxpdGVyYWw+dDwvbGl0ZXJhbD48L3Rlcm0+CisgICAgICAgICA8dGVybT48bGl0ZXJhbD50YXI8 L2xpdGVyYWw+PC90ZXJtPgorICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgIDxwYXJhPgor ICAgICAgICAgICBPdXRwdXQgYSB0YXItZm9ybWF0IGFyY2hpdmUgc3VpdGFibGUgZm9yIGlucHV0 IGludG8gcGdfcmVzdG9yZS4gVGhlIHRhciBmb3JtYXQgaXMKKyAgICAgICAgICAgY29tcGF0aWJs ZSB3aXRoIHRoZSBkaXJlY3RvcnkgZm9ybWF0OiBleHRyYWN0aW5nIGEgdGFyLWZvcm1hdCBhcmNo aXZlIHByb2R1Y2VzIGEgdmFsaWQKKyAgICAgICAgICAgZGlyZWN0b3J5LWZvcm1hdCBhcmNoaXZl LiBIb3dldmVyLCB0aGUgdGFyIGZvcm1hdCBkb2VzIG5vdCBzdXBwb3J0IGNvbXByZXNzaW9uLiBB bHNvLAorICAgICAgICAgICB3aGVuIHVzaW5nIHRhciBmb3JtYXQgdGhlIHJlbGF0aXZlIG9yZGVy IG9mIHRhYmxlIGRhdGEgaXRlbXMgY2Fubm90IGJlIGNoYW5nZWQgZHVyaW5nIHJlc3RvcmUuCisg ICAgICAgICAgPC9wYXJhPgorICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC92YXJsaXN0 ZW50cnk+CisKKyAgICAgICAgPC92YXJpYWJsZWxpc3Q+CisgICAgICAgIDwvcGFyYT4KKyAgICAg IDwvbGlzdGl0ZW0+CisgICAgIDwvdmFybGlzdGVudHJ5PgorCiAgICAgIDx2YXJsaXN0ZW50cnk+ CiAgICAgICA8dGVybT48b3B0aW9uPi0tZmlsdGVyPTxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1l dGVyIj5maWxlbmFtZTwvcmVwbGFjZWFibGU+PC9vcHRpb24+PC90ZXJtPgogICAgICAgPGxpc3Rp dGVtPgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3JlZi9wZ19yZXN0b3JlLnNnbWwgYi9kb2Mv c3JjL3NnbWwvcmVmL3BnX3Jlc3RvcmUuc2dtbAppbmRleCBiOGIyN2UxNzE5Li5hYjJlMDM1Njcx IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcmVmL3BnX3Jlc3RvcmUuc2dtbAorKysgYi9kb2Mv c3JjL3NnbWwvcmVmL3BnX3Jlc3RvcmUuc2dtbApAQCAtMzE1LDYgKzMxNSwxNiBAQCBQb3N0Z3Jl U1FMIGRvY3VtZW50YXRpb24KICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgIDwvdmFybGlzdGVudHJ5 PgogCisgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICA8dGVybT48b3B0aW9uPi1nPC9vcHRpb24+ PC90ZXJtPgorICAgICAgPHRlcm0+PG9wdGlvbj4tLWdsb2JhbHMtb25seTwvb3B0aW9uPjwvdGVy bT4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgUmVzdG9yZSBvbmx5 IGdsb2JhbCBvYmplY3RzIChyb2xlcyBhbmQgdGFibGVzcGFjZXMpLCBubyBkYXRhYmFzZXMuCisg ICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgPC92YXJsaXN0ZW50cnk+CisK ICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgIDx0ZXJtPjxvcHRpb24+LUkgPHJlcGxhY2VhYmxl IGNsYXNzPSJwYXJhbWV0ZXIiPmluZGV4PC9yZXBsYWNlYWJsZT48L29wdGlvbj48L3Rlcm0+CiAg ICAgICA8dGVybT48b3B0aW9uPi0taW5kZXg9PHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIi PmluZGV4PC9yZXBsYWNlYWJsZT48L29wdGlvbj48L3Rlcm0+CkBAIC05MzIsNiArOTQyLDI2IEBA IFBvc3RncmVTUUwgZG9jdW1lbnRhdGlvbgogICAgICAgPC9saXN0aXRlbT4KICAgICAgPC92YXJs aXN0ZW50cnk+CiAKKyAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgIDx0ZXJtPjxvcHRpb24+LS1l eGNsdWRlLWRhdGFiYXNlPTxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5wYXR0ZXJuPC9y ZXBsYWNlYWJsZT48L29wdGlvbj48L3Rlcm0+CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAgPHBh cmE+CisgICAgICAgIERvIG5vdCByZXN0b3JlIGRhdGFiYXNlcyB3aG9zZSBuYW1lIG1hdGNoZXMK KyAgICAgICAgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnBhdHRlcm48L3JlcGxhY2Vh YmxlPi4KKyAgICAgICAgTXVsdGlwbGUgcGF0dGVybnMgY2FuIGJlIGV4Y2x1ZGVkIGJ5IHdyaXRp bmcgbXVsdGlwbGUKKyAgICAgICAgPG9wdGlvbj4tLWV4Y2x1ZGUtZGF0YWJhc2U8L29wdGlvbj4g c3dpdGNoZXMuICBUaGUKKyAgICAgICAgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnBh dHRlcm48L3JlcGxhY2VhYmxlPiBwYXJhbWV0ZXIgaXMKKyAgICAgICAgaW50ZXJwcmV0ZWQgYXMg YSBwYXR0ZXJuIGFjY29yZGluZyB0byB0aGUgc2FtZSBydWxlcyB1c2VkIGJ5CisgICAgICAgIDxh cHBsaWNhdGlvbj5wc3FsPC9hcHBsaWNhdGlvbj4ncyA8bGl0ZXJhbD5cZDwvbGl0ZXJhbD4KKyAg ICAgICAgY29tbWFuZHMgKHNlZSA8eHJlZiBsaW5rZW5kPSJhcHAtcHNxbC1wYXR0ZXJucyIvPiks CisgICAgICAgIHNvIG11bHRpcGxlIGRhdGFiYXNlcyBjYW4gYWxzbyBiZSBleGNsdWRlZCBieSB3 cml0aW5nIHdpbGRjYXJkCisgICAgICAgIGNoYXJhY3RlcnMgaW4gdGhlIHBhdHRlcm4uICBXaGVu IHVzaW5nIHdpbGRjYXJkcywgYmUgY2FyZWZ1bCB0bworICAgICAgICBxdW90ZSB0aGUgcGF0dGVy biBpZiBuZWVkZWQgdG8gcHJldmVudCBzaGVsbCB3aWxkY2FyZCBleHBhbnNpb24uCisgICAgICAg PC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgPC92YXJsaXN0ZW50cnk+CisKKwogICAg IDwvdmFyaWFibGVsaXN0PgogICAgPC9wYXJhPgogIDwvcmVmc2VjdDE+CmRpZmYgLS1naXQgYS9z cmMvYmluL3BnX2R1bXAvcGdfYmFja3VwLmggYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwLmgK aW5kZXggZjBmMTliYjBiMi4uNjUwMDBlNWEwOCAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1w L3BnX2JhY2t1cC5oCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXAuaApAQCAtMzA2LDcg KzMwNiw3IEBAIGV4dGVybiB2b2lkIFNldEFyY2hpdmVPcHRpb25zKEFyY2hpdmUgKkFILCBEdW1w T3B0aW9ucyAqZG9wdCwgUmVzdG9yZU9wdGlvbnMgKnJvCiAKIGV4dGVybiB2b2lkIFByb2Nlc3NB cmNoaXZlUmVzdG9yZU9wdGlvbnMoQXJjaGl2ZSAqQUhYKTsKIAotZXh0ZXJuIHZvaWQgUmVzdG9y ZUFyY2hpdmUoQXJjaGl2ZSAqQUhYKTsKK2V4dGVybiB2b2lkIFJlc3RvcmVBcmNoaXZlKEFyY2hp dmUgKkFIWCwgYm9vbCBhcHBlbmRfZGF0YSk7CiAKIC8qIE9wZW4gYW4gZXhpc3RpbmcgYXJjaGl2 ZSAqLwogZXh0ZXJuIEFyY2hpdmUgKk9wZW5BcmNoaXZlKGNvbnN0IGNoYXIgKkZpbGVTcGVjLCBj b25zdCBBcmNoaXZlRm9ybWF0IGZtdCk7CkBAIC0zMTksNyArMzE5LDcgQEAgZXh0ZXJuIEFyY2hp dmUgKkNyZWF0ZUFyY2hpdmUoY29uc3QgY2hhciAqRmlsZVNwZWMsIGNvbnN0IEFyY2hpdmVGb3Jt YXQgZm10LAogCQkJCQkJCSAgRGF0YURpclN5bmNNZXRob2Qgc3luY19tZXRob2QpOwogCiAvKiBU aGUgLS1saXN0IG9wdGlvbiAqLwotZXh0ZXJuIHZvaWQgUHJpbnRUT0NTdW1tYXJ5KEFyY2hpdmUg KkFIWCk7CitleHRlcm4gdm9pZCBQcmludFRPQ1N1bW1hcnkoQXJjaGl2ZSAqQUhYLCBib29sIGFw cGVuZF9kYXRhKTsKIAogZXh0ZXJuIFJlc3RvcmVPcHRpb25zICpOZXdSZXN0b3JlT3B0aW9ucyh2 b2lkKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5j IGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5jCmluZGV4IDcwN2EzZmM4NDQu LjcxNTNkNGE0MGIgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2 ZXIuYworKysgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMKQEAgLTgyLDcg KzgyLDcgQEAgc3RhdGljIGludAlSZXN0b3JpbmdUb0RCKEFyY2hpdmVIYW5kbGUgKkFIKTsKIHN0 YXRpYyB2b2lkIGR1bXBfbG9fYnVmKEFyY2hpdmVIYW5kbGUgKkFIKTsKIHN0YXRpYyB2b2lkIGR1 bXBUaW1lc3RhbXAoQXJjaGl2ZUhhbmRsZSAqQUgsIGNvbnN0IGNoYXIgKm1zZywgdGltZV90IHRp bSk7CiBzdGF0aWMgdm9pZCBTZXRPdXRwdXQoQXJjaGl2ZUhhbmRsZSAqQUgsIGNvbnN0IGNoYXIg KmZpbGVuYW1lLAotCQkJCQkgIGNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJl c3Npb25fc3BlYyk7CisJCQljb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNz aW9uX3NwZWMsIGJvb2wgYXBwZW5kX2RhdGEpOwogc3RhdGljIENvbXByZXNzRmlsZUhhbmRsZSAq U2F2ZU91dHB1dChBcmNoaXZlSGFuZGxlICpBSCk7CiBzdGF0aWMgdm9pZCBSZXN0b3JlT3V0cHV0 KEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVzc0ZpbGVIYW5kbGUgKnNhdmVkT3V0cHV0KTsKIApA QCAtMzMzLDcgKzMzMyw3IEBAIFByb2Nlc3NBcmNoaXZlUmVzdG9yZU9wdGlvbnMoQXJjaGl2ZSAq QUhYKQogCiAvKiBQdWJsaWMgKi8KIHZvaWQKLVJlc3RvcmVBcmNoaXZlKEFyY2hpdmUgKkFIWCkK K1Jlc3RvcmVBcmNoaXZlKEFyY2hpdmUgKkFIWCwgYm9vbCBhcHBlbmRfZGF0YSkKIHsKIAlBcmNo aXZlSGFuZGxlICpBSCA9IChBcmNoaXZlSGFuZGxlICopIEFIWDsKIAlSZXN0b3JlT3B0aW9ucyAq cm9wdCA9IEFILT5wdWJsaWMucm9wdDsKQEAgLTQ1MCw3ICs0NTAsNyBAQCBSZXN0b3JlQXJjaGl2 ZShBcmNoaXZlICpBSFgpCiAJICovCiAJc2F2ID0gU2F2ZU91dHB1dChBSCk7CiAJaWYgKHJvcHQt PmZpbGVuYW1lIHx8IHJvcHQtPmNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtICE9IFBHX0NPTVBS RVNTSU9OX05PTkUpCi0JCVNldE91dHB1dChBSCwgcm9wdC0+ZmlsZW5hbWUsIHJvcHQtPmNvbXBy ZXNzaW9uX3NwZWMpOworCQlTZXRPdXRwdXQoQUgsIHJvcHQtPmZpbGVuYW1lLCByb3B0LT5jb21w cmVzc2lvbl9zcGVjLCBhcHBlbmRfZGF0YSk7CiAKIAlhaHByaW50ZihBSCwgIi0tXG4tLSBQb3N0 Z3JlU1FMIGRhdGFiYXNlIGR1bXBcbi0tXG5cbiIpOwogCkBAIC0xMjYzLDcgKzEyNjMsNyBAQCBB cmNoaXZlRW50cnkoQXJjaGl2ZSAqQUhYLCBDYXRhbG9nSWQgY2F0YWxvZ0lkLCBEdW1wSWQgZHVt cElkLAogCiAvKiBQdWJsaWMgKi8KIHZvaWQKLVByaW50VE9DU3VtbWFyeShBcmNoaXZlICpBSFgp CitQcmludFRPQ1N1bW1hcnkoQXJjaGl2ZSAqQUhYLCBib29sIGFwcGVuZF9kYXRhKQogewogCUFy Y2hpdmVIYW5kbGUgKkFIID0gKEFyY2hpdmVIYW5kbGUgKikgQUhYOwogCVJlc3RvcmVPcHRpb25z ICpyb3B0ID0gQUgtPnB1YmxpYy5yb3B0OwpAQCAtMTI3OSw3ICsxMjc5LDcgQEAgUHJpbnRUT0NT dW1tYXJ5KEFyY2hpdmUgKkFIWCkKIAogCXNhdiA9IFNhdmVPdXRwdXQoQUgpOwogCWlmIChyb3B0 LT5maWxlbmFtZSkKLQkJU2V0T3V0cHV0KEFILCByb3B0LT5maWxlbmFtZSwgb3V0X2NvbXByZXNz aW9uX3NwZWMpOworCQlTZXRPdXRwdXQoQUgsIHJvcHQtPmZpbGVuYW1lLCBvdXRfY29tcHJlc3Np b25fc3BlYywgYXBwZW5kX2RhdGEpOwogCiAJaWYgKHN0cmZ0aW1lKHN0YW1wX3N0ciwgc2l6ZW9m KHN0YW1wX3N0ciksIFBHRFVNUF9TVFJGVElNRV9GTVQsCiAJCQkJIGxvY2FsdGltZSgmQUgtPmNy ZWF0ZURhdGUpKSA9PSAwKQpAQCAtMTY1OCw3ICsxNjU4LDggQEAgYXJjaHByaW50ZihBcmNoaXZl ICpBSCwgY29uc3QgY2hhciAqZm10LC4uLikKIAogc3RhdGljIHZvaWQKIFNldE91dHB1dChBcmNo aXZlSGFuZGxlICpBSCwgY29uc3QgY2hhciAqZmlsZW5hbWUsCi0JCSAgY29uc3QgcGdfY29tcHJl c3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjKQorCQkgIGNvbnN0IHBnX2NvbXByZXNz X3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYywKKwkJICBib29sIGFwcGVuZF9kYXRhKQog ewogCUNvbXByZXNzRmlsZUhhbmRsZSAqQ0ZIOwogCWNvbnN0IGNoYXIgKm1vZGU7CkBAIC0xNjc4 LDcgKzE2NzksNyBAQCBTZXRPdXRwdXQoQXJjaGl2ZUhhbmRsZSAqQUgsIGNvbnN0IGNoYXIgKmZp bGVuYW1lLAogCWVsc2UKIAkJZm4gPSBmaWxlbm8oc3Rkb3V0KTsKIAotCWlmIChBSC0+bW9kZSA9 PSBhcmNoTW9kZUFwcGVuZCkKKwlpZiAoYXBwZW5kX2RhdGEgfHwgQUgtPm1vZGUgPT0gYXJjaE1v ZGVBcHBlbmQpCiAJCW1vZGUgPSBQR19CSU5BUllfQTsKIAllbHNlCiAJCW1vZGUgPSBQR19CSU5B UllfVzsKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfdGFyLmMgYi9zcmMv YmluL3BnX2R1bXAvcGdfYmFja3VwX3Rhci5jCmluZGV4IGI1YmEzYjQ2ZGQuLmQ5NGQwZGUyYTUg MTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfdGFyLmMKKysrIGIvc3JjL2Jp bi9wZ19kdW1wL3BnX2JhY2t1cF90YXIuYwpAQCAtODI2LDcgKzgyNiw3IEBAIF9DbG9zZUFyY2hp dmUoQXJjaGl2ZUhhbmRsZSAqQUgpCiAJCXNhdlZlcmJvc2UgPSBBSC0+cHVibGljLnZlcmJvc2U7 CiAJCUFILT5wdWJsaWMudmVyYm9zZSA9IDA7CiAKLQkJUmVzdG9yZUFyY2hpdmUoKEFyY2hpdmUg KikgQUgpOworCQlSZXN0b3JlQXJjaGl2ZSgoQXJjaGl2ZSAqKSBBSCwgZmFsc2UpOwogCiAJCVNl dEFyY2hpdmVPcHRpb25zKChBcmNoaXZlICopIEFILCBzYXZEb3B0LCBzYXZSb3B0KTsKIApkaWZm IC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF91dGlscy5jIGIvc3JjL2Jpbi9wZ19k dW1wL3BnX2JhY2t1cF91dGlscy5jCmluZGV4IDc5YWVjNWY1MTUuLmZlMzcwOTYzMzIgMTAwNjQ0 Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfdXRpbHMuYworKysgYi9zcmMvYmluL3Bn X2R1bXAvcGdfYmFja3VwX3V0aWxzLmMKQEAgLTIxLDcgKzIxLDggQEAKIC8qIEdsb2JhbHMgZXhw b3J0ZWQgYnkgdGhpcyBmaWxlICovCiBjb25zdCBjaGFyICpwcm9nbmFtZSA9IE5VTEw7CiAKLSNk ZWZpbmUgTUFYX09OX0VYSVRfTklDRUxZCQkJCTIwCisvKiBUT0RPOiBuY3JlYXNpbmcgdGhpcyB0 byBrZWVwIDEwMCBkYiByZXN0b3JpbmcgYnkgc2luZ2xlIHJlc3RvcmUgY29tbWFuZC4gKi8KKyNk ZWZpbmUgTUFYX09OX0VYSVRfTklDRUxZCQkJCTEwMAogCiBzdGF0aWMgc3RydWN0CiB7CmRpZmYg LS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1 bXAuYwppbmRleCA4ZjczYTVkZjk1Li5lYWU2MjZmNjIxIDEwMDY0NAotLS0gYS9zcmMvYmluL3Bn X2R1bXAvcGdfZHVtcC5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMKQEAgLTExNDcs NyArMTE0Nyw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCSAqIHJpZ2h0IG5vdy4K IAkgKi8KIAlpZiAocGxhaW5UZXh0KQotCQlSZXN0b3JlQXJjaGl2ZShmb3V0KTsKKwkJUmVzdG9y ZUFyY2hpdmUoZm91dCwgZmFsc2UpOwogCiAJQ2xvc2VBcmNoaXZlKGZvdXQpOwogCmRpZmYgLS1n aXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcGFsbC5jIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1 bXBhbGwuYwppbmRleCAzOTZmNzk3ODFjLi5hMmIzNWUzYWZiIDEwMDY0NAotLS0gYS9zcmMvYmlu L3BnX2R1bXAvcGdfZHVtcGFsbC5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wYWxsLmMK QEAgLTE1LDYgKzE1LDcgQEAKIAogI2luY2x1ZGUgInBvc3RncmVzX2ZlLmgiCiAKKyNpbmNsdWRl IDxzeXMvc3RhdC5oPgogI2luY2x1ZGUgPHRpbWUuaD4KICNpbmNsdWRlIDx1bmlzdGQuaD4KIApA QCAtMjksNiArMzAsNyBAQAogI2luY2x1ZGUgImZpbHRlci5oIgogI2luY2x1ZGUgImdldG9wdF9s b25nLmgiCiAjaW5jbHVkZSAicGdfYmFja3VwLmgiCisjaW5jbHVkZSAicGdfYmFja3VwX2FyY2hp dmVyLmgiCiAKIC8qIHZlcnNpb24gc3RyaW5nIHdlIGV4cGVjdCBiYWNrIGZyb20gcGdfZHVtcCAq LwogI2RlZmluZSBQR0RVTVBfVkVSU0lPTlNUUiAicGdfZHVtcCAoUG9zdGdyZVNRTCkgIiBQR19W RVJTSU9OICJcbiIKQEAgLTY0LDkgKzY2LDEwIEBAIHN0YXRpYyB2b2lkIGRyb3BUYWJsZXNwYWNl cyhQR2Nvbm4gKmNvbm4pOwogc3RhdGljIHZvaWQgZHVtcFRhYmxlc3BhY2VzKFBHY29ubiAqY29u bik7CiBzdGF0aWMgdm9pZCBkcm9wREJzKFBHY29ubiAqY29ubik7CiBzdGF0aWMgdm9pZCBkdW1w VXNlckNvbmZpZyhQR2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKnVzZXJuYW1lKTsKLXN0YXRpYyB2 b2lkIGR1bXBEYXRhYmFzZXMoUEdjb25uICpjb25uKTsKK3N0YXRpYyB2b2lkIGR1bXBEYXRhYmFz ZXMoUEdjb25uICpjb25uLCBBcmNoaXZlRm9ybWF0IGFyY2hEdW1wRm9ybWF0KTsKIHN0YXRpYyB2 b2lkIGR1bXBUaW1lc3RhbXAoY29uc3QgY2hhciAqbXNnKTsKLXN0YXRpYyBpbnQJcnVuUGdEdW1w KGNvbnN0IGNoYXIgKmRibmFtZSwgY29uc3QgY2hhciAqY3JlYXRlX29wdHMpOworc3RhdGljIGlu dCBydW5QZ0R1bXAoY29uc3QgY2hhciAqZGJuYW1lLCBjb25zdCBjaGFyICpjcmVhdGVfb3B0cywK KwkJCQkJIGNoYXIgKmRiZmlsZSwgQXJjaGl2ZUZvcm1hdCBhcmNoRHVtcEZvcm1hdCk7CiBzdGF0 aWMgdm9pZCBidWlsZFNoU2VjTGFiZWxzKFBHY29ubiAqY29ubiwKIAkJCQkJCQkgY29uc3QgY2hh ciAqY2F0YWxvZ19uYW1lLCBPaWQgb2JqZWN0SWQsCiAJCQkJCQkJIGNvbnN0IGNoYXIgKm9ianR5 cGUsIGNvbnN0IGNoYXIgKm9iam5hbWUsCkBAIC04MSw2ICs4NCw3IEBAIHN0YXRpYyB2b2lkIGV4 ZWN1dGVDb21tYW5kKFBHY29ubiAqY29ubiwgY29uc3QgY2hhciAqcXVlcnkpOwogc3RhdGljIHZv aWQgZXhwYW5kX2RibmFtZV9wYXR0ZXJucyhQR2Nvbm4gKmNvbm4sIFNpbXBsZVN0cmluZ0xpc3Qg KnBhdHRlcm5zLAogCQkJCQkJCQkgICBTaW1wbGVTdHJpbmdMaXN0ICpuYW1lcyk7CiBzdGF0aWMg dm9pZCByZWFkX2R1bXBhbGxfZmlsdGVycyhjb25zdCBjaGFyICpmaWxlbmFtZSwgU2ltcGxlU3Ry aW5nTGlzdCAqcGF0dGVybik7CitzdGF0aWMgQXJjaGl2ZUZvcm1hdCBwYXJzZUR1bXBGb3JtYXQo Y29uc3QgY2hhciAqZm9ybWF0KTsKIAogc3RhdGljIGNoYXIgcGdfZHVtcF9iaW5bTUFYUEdQQVRI XTsKIHN0YXRpYyBjb25zdCBjaGFyICpwcm9nbmFtZTsKQEAgLTE0Nyw2ICsxNTEsNyBAQCBtYWlu KGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJCXsicGFzc3dvcmQiLCBub19hcmd1bWVudCwgTlVM TCwgJ1cnfSwKIAkJeyJuby1wcml2aWxlZ2VzIiwgbm9fYXJndW1lbnQsIE5VTEwsICd4J30sCiAJ CXsibm8tYWNsIiwgbm9fYXJndW1lbnQsIE5VTEwsICd4J30sCisJCXsiZm9ybWF0IiwgcmVxdWly ZWRfYXJndW1lbnQsIE5VTEwsICdGJ30sCiAKIAkJLyoKIAkJICogdGhlIGZvbGxvd2luZyBvcHRp b25zIGRvbid0IGhhdmUgYW4gZXF1aXZhbGVudCBzaG9ydCBvcHRpb24gbGV0dGVyCkBAIC0xODgs NiArMTkzLDggQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCWNoYXIJICAgKnBnZGIg PSBOVUxMOwogCWNoYXIJICAgKnVzZV9yb2xlID0gTlVMTDsKIAljb25zdCBjaGFyICpkdW1wZW5j b2RpbmcgPSBOVUxMOworCUFyY2hpdmVGb3JtYXQgYXJjaER1bXBGb3JtYXQgPSBhcmNoTnVsbDsK Kwljb25zdCBjaGFyICpmb3JtYXROYW1lID0gInAiOwogCXRyaXZhbHVlCXByb21wdF9wYXNzd29y ZCA9IFRSSV9ERUZBVUxUOwogCWJvb2wJCWRhdGFfb25seSA9IGZhbHNlOwogCWJvb2wJCWdsb2Jh bHNfb25seSA9IGZhbHNlOwpAQCAtMjM3LDcgKzI0NCw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIg KmFyZ3ZbXSkKIAogCXBnZHVtcG9wdHMgPSBjcmVhdGVQUUV4cEJ1ZmZlcigpOwogCi0Jd2hpbGUg KChjID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJndiwgImFjZDpFOmY6Z2g6bDpPcDpyc1M6dFU6dndX eCIsIGxvbmdfb3B0aW9ucywgJm9wdGluZGV4KSkgIT0gLTEpCisJd2hpbGUgKChjID0gZ2V0b3B0 X2xvbmcoYXJnYywgYXJndiwgImFjZDpFOmY6RjpnaDpsOk9wOnJzUzp0VTp2d1d4IiwgbG9uZ19v cHRpb25zLCAmb3B0aW5kZXgpKSAhPSAtMSkKIAl7CiAJCXN3aXRjaCAoYykKIAkJewpAQCAtMjY1 LDcgKzI3Miw5IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAkJCQlhcHBlbmRQUUV4 cEJ1ZmZlclN0cihwZ2R1bXBvcHRzLCAiIC1mICIpOwogCQkJCWFwcGVuZFNoZWxsU3RyaW5nKHBn ZHVtcG9wdHMsIGZpbGVuYW1lKTsKIAkJCQlicmVhazsKLQorCQkJY2FzZSAnRic6CisJCQkJZm9y bWF0TmFtZSA9IHBnX3N0cmR1cChvcHRhcmcpOworCQkJCWJyZWFrOwogCQkJY2FzZSAnZyc6CiAJ CQkJZ2xvYmFsc19vbmx5ID0gdHJ1ZTsKIAkJCQlicmVhazsKQEAgLTQxNCw2ICs0MjMsOCBAQCBt YWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJCWV4aXRfbmljZWx5KDEpOwogCX0KIAorCWFy Y2hEdW1wRm9ybWF0ID0gcGFyc2VEdW1wRm9ybWF0KGZvcm1hdE5hbWUpOworCiAJLyoKIAkgKiBJ ZiBwYXNzd29yZCB2YWx1ZXMgYXJlIG5vdCByZXF1aXJlZCBpbiB0aGUgZHVtcCwgc3dpdGNoIHRv IHVzaW5nCiAJICogcGdfcm9sZXMgd2hpY2ggaXMgZXF1YWxseSB1c2VmdWwsIGp1c3QgbW9yZSBs aWtlbHkgdG8gaGF2ZSB1bnJlc3RyaWN0ZWQKQEAgLTQ5Nyw5ICs1MDgsMzIgQEAgbWFpbihpbnQg YXJnYywgY2hhciAqYXJndltdKQogCQkJCQkJICAgJmRhdGFiYXNlX2V4Y2x1ZGVfbmFtZXMpOwog CiAJLyoKLQkgKiBPcGVuIHRoZSBvdXRwdXQgZmlsZSBpZiByZXF1aXJlZCwgb3RoZXJ3aXNlIHVz ZSBzdGRvdXQKKwkgKiBPcGVuIHRoZSBvdXRwdXQgZmlsZSBpZiByZXF1aXJlZCwgb3RoZXJ3aXNl IHVzZSBzdGRvdXQuICBJZiByZXF1aXJlZCwKKwkgKiB0aGVuIGNyZWF0ZSBuZXcgZmlsZXMgd2l0 aCBnbG9iYWwuZGF0IGFuZCBtYXAuZGF0IG5hbWVzLgogCSAqLwotCWlmIChmaWxlbmFtZSkKKwlp ZiAoYXJjaER1bXBGb3JtYXQgIT0gYXJjaE51bGwpCisJeworCQljaGFyCXRvY19wYXRoW01BWFBH UEFUSF07CisKKwkJLyoKKwkJICogSWYgZGlyZWN0b3J5L3Rhci9jdXN0b20gZm9ybWF0IGlzIHNw ZWNpZmllZCB0aGVuIHdlIG11c3QgcHJvdmlkZSB0aGUKKwkJICogZmlsZSBuYW1lIHRvIGNyZWF0 ZSBvbmUgbWFpbiBkaXJlY3RvcnkuCisJCSAqLworCQlpZiAoIWZpbGVuYW1lIHx8IHN0cmNtcChm aWxlbmFtZSwgIiIpID09IDApCisJCQlwZ19mYXRhbCgibm8gb3V0cHV0IGRpcmVjdG9yeSBzcGVj aWZpZWQiKTsKKworCQkvKiBUT0RPOiBhY2NlcHQgdGhlIGVtcHR5IGV4aXN0aW5nIGRpcmVjdG9y eS4gKi8KKwkJaWYgKG1rZGlyKGZpbGVuYW1lLCAwNzAwKSA8IDApCisJCQlwZ19mYXRhbCgiY291 bGQgbm90IGNyZWF0ZSBkaXJlY3RvcnkgXCIlc1wiOiAlbSIsCisJCQkJCSBmaWxlbmFtZSk7CisK KwkJc25wcmludGYodG9jX3BhdGgsIE1BWFBHUEFUSCwgIiVzL2dsb2JhbC5kYXQiLCBmaWxlbmFt ZSk7CisKKwkJT1BGID0gZm9wZW4odG9jX3BhdGgsICJ3Iik7CisJCWlmICghT1BGKQorCQkJcGdf ZmF0YWwoImNvdWxkIG5vdCBvcGVuIGdsb2JhbC5kYXQgZmlsZTogJXMiLCBzdHJlcnJvcihlcnJu bykpOworCX0KKwllbHNlIGlmIChmaWxlbmFtZSkKIAl7CiAJCU9QRiA9IGZvcGVuKGZpbGVuYW1l LCBQR19CSU5BUllfVyk7CiAJCWlmICghT1BGKQpAQCAtNjA3LDcgKzY0MSw3IEBAIG1haW4oaW50 IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAl9CiAKIAlpZiAoIWdsb2JhbHNfb25seSAmJiAhcm9sZXNf b25seSAmJiAhdGFibGVzcGFjZXNfb25seSkKLQkJZHVtcERhdGFiYXNlcyhjb25uKTsKKwkJZHVt cERhdGFiYXNlcyhjb25uLCBhcmNoRHVtcEZvcm1hdCk7CiAKIAlQUWZpbmlzaChjb25uKTsKIApA QCAtNjIwLDcgKzY1NCw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAkJZmNsb3Nl KE9QRik7CiAKIAkJLyogc3luYyB0aGUgcmVzdWx0aW5nIGZpbGUsIGVycm9ycyBhcmUgbm90IGZh dGFsICovCi0JCWlmIChkb3N5bmMpCisJCWlmIChkb3N5bmMgJiYgKGFyY2hEdW1wRm9ybWF0ID09 IGFyY2hOdWxsKSkKIAkJCSh2b2lkKSBmc3luY19mbmFtZShmaWxlbmFtZSwgZmFsc2UpOwogCX0K IApAQCAtNjM3LDYgKzY3MSw4IEBAIGhlbHAodm9pZCkKIAogCXByaW50ZihfKCJcbkdlbmVyYWwg b3B0aW9uczpcbiIpKTsKIAlwcmludGYoXygiICAtZiwgLS1maWxlPUZJTEVOQU1FICAgICAgICAg IG91dHB1dCBmaWxlIG5hbWVcbiIpKTsKKwlwcmludGYoXygiICAtRiwgLS1mb3JtYXQ9Y3xkfHR8 cCAgICAgICAgIG91dHB1dCBmaWxlIGZvcm1hdCAoY3VzdG9tLCBkaXJlY3RvcnksIHRhcixcbiIK KwkJCQkiICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWluIHRleHQgKGRlZmF1bHQpKVxu IikpOwogCXByaW50ZihfKCIgIC12LCAtLXZlcmJvc2UgICAgICAgICAgICAgICAgdmVyYm9zZSBt b2RlXG4iKSk7CiAJcHJpbnRmKF8oIiAgLVYsIC0tdmVyc2lvbiAgICAgICAgICAgICAgICBvdXRw dXQgdmVyc2lvbiBpbmZvcm1hdGlvbiwgdGhlbiBleGl0XG4iKSk7CiAJcHJpbnRmKF8oIiAgLS1s b2NrLXdhaXQtdGltZW91dD1USU1FT1VUICBmYWlsIGFmdGVyIHdhaXRpbmcgVElNRU9VVCBmb3Ig YSB0YWJsZSBsb2NrXG4iKSk7CkBAIC0xNDg3LDEwICsxNTIzLDEzIEBAIGV4cGFuZF9kYm5hbWVf cGF0dGVybnMoUEdjb25uICpjb25uLAogICogRHVtcCBjb250ZW50cyBvZiBkYXRhYmFzZXMuCiAg Ki8KIHN0YXRpYyB2b2lkCi1kdW1wRGF0YWJhc2VzKFBHY29ubiAqY29ubikKK2R1bXBEYXRhYmFz ZXMoUEdjb25uICpjb25uLCBBcmNoaXZlRm9ybWF0IGFyY2hEdW1wRm9ybWF0KQogewogCVBHcmVz dWx0ICAgKnJlczsKIAlpbnQJCQlpOworCWNoYXIJCWRiX3N1YmRpcltNQVhQR1BBVEhdOworCWNo YXIJCWRiZmlsZXBhdGhbTUFYUEdQQVRIXTsKKwlGSUxFICAgICAgICptYXBfZmlsZTsKIAogCS8q CiAJICogU2tpcCBkYXRhYmFzZXMgbWFya2VkIG5vdCBkYXRhbGxvd2Nvbm4sIHNpbmNlIHdlJ2Qg YmUgdW5hYmxlIHRvIGNvbm5lY3QKQEAgLTE1MDQsNyArMTU0Myw3IEBAIGR1bXBEYXRhYmFzZXMo UEdjb25uICpjb25uKQogCSAqIGRvZXNuJ3QgaGF2ZSBzb21lIGZhaWx1cmUgbW9kZSB3aXRoIC0t Y2xlYW4uCiAJICovCiAJcmVzID0gZXhlY3V0ZVF1ZXJ5KGNvbm4sCi0JCQkJCSAgICJTRUxFQ1Qg ZGF0bmFtZSAiCisJCQkJCSAgICJTRUxFQ1QgZGF0bmFtZSwgb2lkICIKIAkJCQkJICAgIkZST00g cGdfZGF0YWJhc2UgZCAiCiAJCQkJCSAgICJXSEVSRSBkYXRhbGxvd2Nvbm4gQU5EIGRhdGNvbm5s aW1pdCAhPSAtMiAiCiAJCQkJCSAgICJPUkRFUiBCWSAoZGF0bmFtZSA8PiAndGVtcGxhdGUxJyks IGRhdG5hbWUiKTsKQEAgLTE1MTIsOSArMTU1MSwzMCBAQCBkdW1wRGF0YWJhc2VzKFBHY29ubiAq Y29ubikKIAlpZiAoUFFudHVwbGVzKHJlcykgPiAwKQogCQlmcHJpbnRmKE9QRiwgIi0tXG4tLSBE YXRhYmFzZXNcbi0tXG5cbiIpOwogCisJLyoKKwkgKiBJZiBkaXJlY3RvcnkvdGFyL2N1c3RvbSBm b3JtYXQgaXMgc3BlY2lmaWVkIHRoZW4gY3JlYXRlIGEgc3ViZGlyZWN0b3J5CisJICogdW5kZXIg dGhlIG1haW4gZGlyZWN0b3J5IGFuZCBlYWNoIGRhdGFiYXNlIGR1bXAgZmlsZSBzdWJkaXJlY3Rv cnkgYmUKKwkgKiBjcmVhdGVkIHVuZGVyIHRoZSBzdWJkaXJlY3RvcnkgaW4gYXJjaGl2ZSBtb2Rl IGFzIHBlciBzaW5nbGUgZGIgcGdfZHVtcC4KKwkgKi8KKwlpZiAoYXJjaER1bXBGb3JtYXQgIT0g YXJjaE51bGwpCisJeworCQljaGFyICAgIG1hcF9maWxlX3BhdGhbTUFYUEdQQVRIXTsKKworCQlz bnByaW50ZihkYl9zdWJkaXIsIE1BWFBHUEFUSCwgIiVzL2RhdGFiYXNlcyIsIGZpbGVuYW1lKTsK KwkJaWYgKG1rZGlyKGRiX3N1YmRpciwgMDc1NSkgIT0gMCkKKwkJCXBnX2xvZ19lcnJvcigiY291 bGQgbm90IGNyZWF0ZSBzdWJkaXJlY3RvcnkgXCIlc1wiOiAlbSIsIGRiX3N1YmRpcik7CisKKwkJ LyogQ3JlYXRlIGEgbWFwIGZpbGUgKHRvIHN0b3JlIGRib2lkIGFuZCBkYm5hbWUpICovCisJCXNu cHJpbnRmKG1hcF9maWxlX3BhdGgsIE1BWFBHUEFUSCwgIiVzL21hcC5kYXQiLCBmaWxlbmFtZSk7 CisJCW1hcF9maWxlID0gZm9wZW4obWFwX2ZpbGVfcGF0aCwgInciKTsKKwkJaWYgKCFtYXBfZmls ZSkKKwkJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgb3BlbiBtYXAgZmlsZTogJXMiLCBzdHJlcnJvcihl cnJubykpOworCX0KKwogCWZvciAoaSA9IDA7IGkgPCBQUW50dXBsZXMocmVzKTsgaSsrKQogCXsK IAkJY2hhcgkgICAqZGJuYW1lID0gUFFnZXR2YWx1ZShyZXMsIGksIDApOworCQljaGFyCSAgICpv aWQgPSBQUWdldHZhbHVlKHJlcywgaSwgMSk7CiAJCWNvbnN0IGNoYXIgKmNyZWF0ZV9vcHRzOwog CQlpbnQJCQlyZXQ7CiAKQEAgLTE1MjIsNiArMTU4MiwxNCBAQCBkdW1wRGF0YWJhc2VzKFBHY29u biAqY29ubikKIAkJaWYgKHN0cmNtcChkYm5hbWUsICJ0ZW1wbGF0ZTAiKSA9PSAwKQogCQkJY29u dGludWU7CiAKKwkJaWYgKGFyY2hEdW1wRm9ybWF0ICE9IGFyY2hOdWxsKQorCQl7CisJCQlzbnBy aW50ZihkYmZpbGVwYXRoLCBNQVhQR1BBVEgsICItZiAlcy8lcyIsIGRiX3N1YmRpciwgb2lkKTsK KworCQkJLyogYXBwZW5kIGRib2lkIGFuZCBkYm5hbWUgaW4gbWFwIGZpbGUuICovCisJCQlmcHJp bnRmKG1hcF9maWxlLCAiJXMgJXNcbiIsIG9pZCwgZGJuYW1lKTsKKwkJfQorCiAJCS8qIFNraXAg YW55IGV4cGxpY2l0bHkgZXhjbHVkZWQgZGF0YWJhc2UgKi8KIAkJaWYgKHNpbXBsZV9zdHJpbmdf bGlzdF9tZW1iZXIoJmRhdGFiYXNlX2V4Y2x1ZGVfbmFtZXMsIGRibmFtZSkpCiAJCXsKQEAgLTE1 MzEsNyArMTU5OSw4IEBAIGR1bXBEYXRhYmFzZXMoUEdjb25uICpjb25uKQogCiAJCXBnX2xvZ19p bmZvKCJkdW1waW5nIGRhdGFiYXNlIFwiJXNcIiIsIGRibmFtZSk7CiAKLQkJZnByaW50ZihPUEYs ICItLVxuLS0gRGF0YWJhc2UgXCIlc1wiIGR1bXBcbi0tXG5cbiIsIGRibmFtZSk7CisJCWlmIChh cmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkKKwkJCWZwcmludGYoT1BGLCAiLS1cbi0tIERhdGFi YXNlIFwiJXNcIiBkdW1wXG4tLVxuXG4iLCBkYm5hbWUpOwogCiAJCS8qCiAJCSAqIFdlIGFzc3Vt ZSB0aGF0ICJ0ZW1wbGF0ZTEiIGFuZCAicG9zdGdyZXMiIGFscmVhZHkgZXhpc3QgaW4gdGhlCkBA IC0xNTQ5LDIwICsxNjE4LDIxIEBAIGR1bXBEYXRhYmFzZXMoUEdjb25uICpjb25uKQogCQkJewog CQkJCWNyZWF0ZV9vcHRzID0gIiI7CiAJCQkJLyogU2luY2UgcGdfZHVtcCB3b24ndCBlbWl0IGEg XGNvbm5lY3QgY29tbWFuZCwgd2UgbXVzdCAqLwotCQkJCWZwcmludGYoT1BGLCAiXFxjb25uZWN0 ICVzXG5cbiIsIGRibmFtZSk7CisJCQkJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQor CQkJCQlmcHJpbnRmKE9QRiwgIlxcY29ubmVjdCAlc1xuXG4iLCBkYm5hbWUpOwogCQkJfQogCQl9 CiAJCWVsc2UKIAkJCWNyZWF0ZV9vcHRzID0gIi0tY3JlYXRlIjsKIAotCQlpZiAoZmlsZW5hbWUp CisJCWlmICgoYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwpICYmIGZpbGVuYW1lKQogCQkJZmNs b3NlKE9QRik7CiAKLQkJcmV0ID0gcnVuUGdEdW1wKGRibmFtZSwgY3JlYXRlX29wdHMpOworCQly ZXQgPSBydW5QZ0R1bXAoZGJuYW1lLCBjcmVhdGVfb3B0cywgZGJmaWxlcGF0aCwgYXJjaER1bXBG b3JtYXQpOwogCQlpZiAocmV0ICE9IDApCiAJCQlwZ19mYXRhbCgicGdfZHVtcCBmYWlsZWQgb24g ZGF0YWJhc2UgXCIlc1wiLCBleGl0aW5nIiwgZGJuYW1lKTsKIAotCQlpZiAoZmlsZW5hbWUpCisJ CWlmICgoYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwpICYmIGZpbGVuYW1lKQogCQl7CiAJCQlP UEYgPSBmb3BlbihmaWxlbmFtZSwgUEdfQklOQVJZX0EpOwogCQkJaWYgKCFPUEYpCkBAIC0xNTcx LDYgKzE2NDEsMTAgQEAgZHVtcERhdGFiYXNlcyhQR2Nvbm4gKmNvbm4pCiAJCX0KIAl9CiAKKwkv KiBDbG9zZSBtYXAgZmlsZSAqLworCWlmIChhcmNoRHVtcEZvcm1hdCAhPSBhcmNoTnVsbCkKKwkJ ZmNsb3NlKG1hcF9maWxlKTsKKwogCVBRY2xlYXIocmVzKTsKIH0KIApAQCAtMTU4MCw3ICsxNjU0 LDggQEAgZHVtcERhdGFiYXNlcyhQR2Nvbm4gKmNvbm4pCiAgKiBSdW4gcGdfZHVtcCBvbiBkYm5h bWUsIHdpdGggc3BlY2lmaWVkIG9wdGlvbnMuCiAgKi8KIHN0YXRpYyBpbnQKLXJ1blBnRHVtcChj b25zdCBjaGFyICpkYm5hbWUsIGNvbnN0IGNoYXIgKmNyZWF0ZV9vcHRzKQorcnVuUGdEdW1wKGNv bnN0IGNoYXIgKmRibmFtZSwgY29uc3QgY2hhciAqY3JlYXRlX29wdHMsIGNoYXIgKmRiZmlsZSwK KwkJQXJjaGl2ZUZvcm1hdCBhcmNoRHVtcEZvcm1hdCkKIHsKIAlQUUV4cEJ1ZmZlckRhdGEgY29u bnN0cmJ1ZjsKIAlQUUV4cEJ1ZmZlckRhdGEgY21kOwpAQCAtMTU4OSwxNyArMTY2NCwzOCBAQCBy dW5QZ0R1bXAoY29uc3QgY2hhciAqZGJuYW1lLCBjb25zdCBjaGFyICpjcmVhdGVfb3B0cykKIAlp bml0UFFFeHBCdWZmZXIoJmNvbm5zdHJidWYpOwogCWluaXRQUUV4cEJ1ZmZlcigmY21kKTsKIAot CXByaW50ZlBRRXhwQnVmZmVyKCZjbWQsICJcIiVzXCIgJXMgJXMiLCBwZ19kdW1wX2JpbiwKLQkJ CQkJICBwZ2R1bXBvcHRzLT5kYXRhLCBjcmVhdGVfb3B0cyk7Ci0KIAkvKgotCSAqIElmIHdlIGhh dmUgYSBmaWxlbmFtZSwgdXNlIHRoZSB1bmRvY3VtZW50ZWQgcGxhaW4tYXBwZW5kIHBnX2R1bXAK LQkgKiBmb3JtYXQuCisJICogSWYgdGhpcyBpcyBub3QgYSBwbGFpbiBkdW1wLCB0aGVuIGFwcGVu ZCBmaWxlIG5hbWUgYW5kIGR1bXAgZm9ybWF0IHRvCisJICogdGhlIHBnX2R1bXAgY29tbWFuZC4K IAkgKi8KLQlpZiAoZmlsZW5hbWUpCi0JCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZjbWQsICIgLUZh ICIpOworCWlmIChhcmNoRHVtcEZvcm1hdCAhPSBhcmNoTnVsbCkKKwl7CisJCXByaW50ZlBRRXhw QnVmZmVyKCZjbWQsICJcIiVzXCIgJXMgJXMiLCBwZ19kdW1wX2JpbiwKKwkJCQkJCSAgZGJmaWxl LCBjcmVhdGVfb3B0cyk7CisKKwkJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hEaXJlY3Rvcnkp CisJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmY21kLCAiIC1GIGQgIik7CisJCWVsc2UgaWYgKGFy Y2hEdW1wRm9ybWF0ID09IGFyY2hDdXN0b20pCisJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmY21k LCAiIC1GIGMgIik7CisJCWVsc2UgaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hUYXIpCisJCQlh cHBlbmRQUUV4cEJ1ZmZlclN0cigmY21kLCAiIC1GIHQgIik7CisJCWVsc2UKKwkJCXBnX2ZhdGFs KCJpbnZhbGlkIGR1bXAgZm9ybWF0ICVkLCBzcGVjaWZpZWQsIHBsZWFzZSB1c2UgZC9jL3Agb25s eSIsIGFyY2hEdW1wRm9ybWF0KTsKKwl9CiAJZWxzZQotCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigm Y21kLCAiIC1GcCAiKTsKKwl7CisJCXByaW50ZlBRRXhwQnVmZmVyKCZjbWQsICJcIiVzXCIgJXMg JXMiLCBwZ19kdW1wX2JpbiwKKwkJCQkJCXBnZHVtcG9wdHMtPmRhdGEsIGNyZWF0ZV9vcHRzKTsK KworCQkvKgorCQkqIElmIHdlIGhhdmUgYSBmaWxlbmFtZSwgdXNlIHRoZSB1bmRvY3VtZW50ZWQg cGxhaW4tYXBwZW5kIHBnX2R1bXAKKwkJKiBmb3JtYXQuCisJCSovCisJCWlmIChmaWxlbmFtZSkK KwkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZjbWQsICIgLUZhICIpOworCQllbHNlCisJCQlhcHBl bmRQUUV4cEJ1ZmZlclN0cigmY21kLCAiIC1GcCAiKTsKKwl9CiAKIAkvKgogCSAqIEFwcGVuZCB0 aGUgZGF0YWJhc2UgbmFtZSB0byB0aGUgYWxyZWFkeS1jb25zdHJ1Y3RlZCBzdGVtIG9mIGNvbm5l Y3Rpb24KQEAgLTE5OTQsMyArMjA5MCwzMCBAQCByZWFkX2R1bXBhbGxfZmlsdGVycyhjb25zdCBj aGFyICpmaWxlbmFtZSwgU2ltcGxlU3RyaW5nTGlzdCAqcGF0dGVybikKIAogCWZpbHRlcl9mcmVl KCZmc3RhdGUpOwogfQorCitzdGF0aWMgQXJjaGl2ZUZvcm1hdAorcGFyc2VEdW1wRm9ybWF0KGNv bnN0IGNoYXIgKmZvcm1hdCkKK3sKKwlBcmNoaXZlRm9ybWF0CWFyY2hEdW1wRm9ybWF0OworCisJ aWYgKHBnX3N0cmNhc2VjbXAoZm9ybWF0LCAiYyIpID09IDApCisJCWFyY2hEdW1wRm9ybWF0ID0g YXJjaEN1c3RvbTsKKwllbHNlIGlmIChwZ19zdHJjYXNlY21wKGZvcm1hdCwgImN1c3RvbSIpID09 IDApCisJCWFyY2hEdW1wRm9ybWF0ID0gYXJjaEN1c3RvbTsKKwllbHNlIGlmIChwZ19zdHJjYXNl Y21wKGZvcm1hdCwgImQiKSA9PSAwKQorCQlhcmNoRHVtcEZvcm1hdCA9IGFyY2hEaXJlY3Rvcnk7 CisJZWxzZSBpZiAocGdfc3RyY2FzZWNtcChmb3JtYXQsICJkaXJlY3RvcnkiKSA9PSAwKQorCQlh cmNoRHVtcEZvcm1hdCA9IGFyY2hEaXJlY3Rvcnk7CisJZWxzZSBpZiAocGdfc3RyY2FzZWNtcChm b3JtYXQsICJwIikgPT0gMCkKKwkJYXJjaER1bXBGb3JtYXQgPSBhcmNoTnVsbDsKKwllbHNlIGlm IChwZ19zdHJjYXNlY21wKGZvcm1hdCwgInBsYWluIikgPT0gMCkKKwkJYXJjaER1bXBGb3JtYXQg PSBhcmNoTnVsbDsKKwllbHNlIGlmIChwZ19zdHJjYXNlY21wKGZvcm1hdCwgInQiKSA9PSAwKQor CQlhcmNoRHVtcEZvcm1hdCA9IGFyY2hUYXI7CisJZWxzZSBpZiAocGdfc3RyY2FzZWNtcChmb3Jt YXQsICJ0YXIiKSA9PSAwKQorCQlhcmNoRHVtcEZvcm1hdCA9IGFyY2hUYXI7CisJZWxzZQorCQlw Z19mYXRhbCgiaW52YWxpZCBkdW1wIGZvcm1hdCBcIiVzXCIgc3BlY2lmaWVkIiwgZm9ybWF0KTsK KworCXJldHVybiBhcmNoRHVtcEZvcm1hdDsKK30KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVt cC9wZ19yZXN0b3JlLmMgYi9zcmMvYmluL3BnX2R1bXAvcGdfcmVzdG9yZS5jCmluZGV4IDg4YWUz OWQ5MzguLmE3NjVkOTE5ZTIgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19yZXN0b3Jl LmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX3Jlc3RvcmUuYwpAQCAtNDEsMjcgKzQxLDcwIEBA CiAjaW5jbHVkZSAicG9zdGdyZXNfZmUuaCIKIAogI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVk ZSA8c3lzL3N0YXQuaD4KICNpZmRlZiBIQVZFX1RFUk1JT1NfSAogI2luY2x1ZGUgPHRlcm1pb3Mu aD4KICNlbmRpZgogCisjaW5jbHVkZSAiY29tbW9uL2Nvbm5lY3QuaCIKKyNpbmNsdWRlICJjb21w cmVzc19pby5oIgorI2luY2x1ZGUgImNvbW1vbi9zdHJpbmcuaCIKICNpbmNsdWRlICJmZV91dGls cy9vcHRpb25fdXRpbHMuaCIKKyNpbmNsdWRlICJmZV91dGlscy9zdHJpbmdfdXRpbHMuaCIKICNp bmNsdWRlICJmaWx0ZXIuaCIKICNpbmNsdWRlICJnZXRvcHRfbG9uZy5oIgogI2luY2x1ZGUgInBh cmFsbGVsLmgiCisjaW5jbHVkZSAicGdfYmFja3VwX2FyY2hpdmVyLmgiCiAjaW5jbHVkZSAicGdf YmFja3VwX3V0aWxzLmgiCiAKK3R5cGVkZWYgc3RydWN0IFNpbXBsZURhdGFiYXNlT2lkTGlzdENl bGwKK3sKKwlzdHJ1Y3QgU2ltcGxlRGF0YWJhc2VPaWRMaXN0Q2VsbAkqbmV4dDsKKwlPaWQJCQkJ CQkJCQlkYl9vaWQ7CisJY29uc3QgY2hhcgkJCQkJCQkqZGJfbmFtZTsKK30gU2ltcGxlRGF0YWJh c2VPaWRMaXN0Q2VsbDsKKwordHlwZWRlZiBzdHJ1Y3QgU2ltcGxlRGF0YWJhc2VPaWRMaXN0Cit7 CisJU2ltcGxlRGF0YWJhc2VPaWRMaXN0Q2VsbCAqaGVhZDsKKwlTaW1wbGVEYXRhYmFzZU9pZExp c3RDZWxsICp0YWlsOworfSBTaW1wbGVEYXRhYmFzZU9pZExpc3Q7CisKK3N0YXRpYyB2b2lkCitz aW1wbGVfZGJfb2lkX2xpc3RfYXBwZW5kKFNpbXBsZURhdGFiYXNlT2lkTGlzdCAqbGlzdCwgT2lk IGRiX29pZCwgY29uc3QgY2hhciAqZGJuYW1lKTsKKwogc3RhdGljIHZvaWQgdXNhZ2UoY29uc3Qg Y2hhciAqcHJvZ25hbWUpOwogc3RhdGljIHZvaWQgcmVhZF9yZXN0b3JlX2ZpbHRlcnMoY29uc3Qg Y2hhciAqZmlsZW5hbWUsIFJlc3RvcmVPcHRpb25zICpvcHRzKTsKK3N0YXRpYyBib29sIElzRmls ZUV4aXN0c0luRGlyZWN0b3J5KGNvbnN0IGNoYXIgKmRpciwgY29uc3QgY2hhciAqZmlsZW5hbWUp Oworc3RhdGljIGJvb2wgcmVzdG9yZU9uZURhdGFiYXNlKGNvbnN0IGNoYXIgKmlucHV0RmlsZVNw ZWMsCisJCVJlc3RvcmVPcHRpb25zICpvcHRzLCBpbnQgbnVtV29ya2VycywgYm9vbCBhcHBlbmRf ZGF0YSk7CitzdGF0aWMgUEdjb25uICpjb25uZWN0RGF0YWJhc2UoY29uc3QgY2hhciAqZGJuYW1l LCBjb25zdCBjaGFyICpjb25uX3N0cmluZywKKwkJY29uc3QgY2hhciAqcGdob3N0LCBjb25zdCBj aGFyICpwZ3BvcnQsIGNvbnN0IGNoYXIgKnBndXNlciwKKwkJdHJpdmFsdWUgcHJvbXB0X3Bhc3N3 b3JkLCBib29sIGZhaWxfb25fZXJyb3IpOworc3RhdGljIFBHcmVzdWx0ICpleGVjdXRlUXVlcnko UEdjb25uICpjb25uLCBjb25zdCBjaGFyICpxdWVyeSk7CitzdGF0aWMgaW50IFJlYWRPbmVTdGF0 ZW1lbnQoU3RyaW5nSW5mbyBpbkJ1ZiwgRklMRSAqZl9nbG8pOworc3RhdGljIGludCByZXN0b3Jl QWxsRGF0YWJhc2VzKFBHY29ubiAqY29ubiwgY29uc3QgY2hhciAqZHVtcGRpcnBhdGgsCisJU2lt cGxlU3RyaW5nTGlzdCBkYl9leGNsdWRlX3BhdHRlcm5zLCBSZXN0b3JlT3B0aW9ucyAqb3B0cywg aW50IG51bVdvcmtlcnMpOworc3RhdGljIHZvaWQgZXhlY3V0ZV9nbG9iYWxfc3FsX2NvbW1hbmRz KFBHY29ubiAqY29ubiwgY29uc3QgY2hhciAqZHVtcGRpcnBhdGgsCisJCWNvbnN0IGNoYXIgKm91 dGZpbGUpOworc3RhdGljIGludCBmaWx0ZXJfZGJuYW1lc19mb3JfcmVzdG9yZShQR2Nvbm4gKmNv bm4sCisJCVNpbXBsZURhdGFiYXNlT2lkTGlzdCAqZGJuYW1lX29pZF9saXN0LCBTaW1wbGVTdHJp bmdMaXN0IGRiX2V4Y2x1ZGVfcGF0dGVybnMpOworc3RhdGljIGludCBnZXRfZGJuYW1lX29pZF9s aXN0X2Zyb21fbWZpbGUoY29uc3QgY2hhciAqZHVtcGRpcnBhdGgsCisJCVNpbXBsZURhdGFiYXNl T2lkTGlzdCAqZGJuYW1lX29pZF9saXN0KTsKK3N0YXRpYyB2b2lkIHNpbXBsZV9kYl9vaWRfbGlz dF9hcHBlbmQoU2ltcGxlRGF0YWJhc2VPaWRMaXN0ICpsaXN0LCBPaWQgZGJfb2lkLAorCQljb25z dCBjaGFyICpkYm5hbWUpOworc3RhdGljIGJvb2wgaXNfZnVsbF9wYXR0ZXJuKFBHY29ubiAqY29u biwgY29uc3QgY2hhciAqc3RyLCBjb25zdCBjaGFyICpwdHJuKTsKK3N0YXRpYyB2b2lkIHNpbXBs ZV9zdHJpbmdfZnVsbF9saXN0X2RlbGV0ZShTaW1wbGVTdHJpbmdMaXN0ICpsaXN0KTsKK3N0YXRp YyB2b2lkIHNpbXBsZV9kYl9vaWRfZnVsbF9saXN0X2RlbGV0ZShTaW1wbGVEYXRhYmFzZU9pZExp c3QgKmxpc3QpOworc3RhdGljIHZvaWQgc2ltcGxlX2RiX29pZF9saXN0X2RlbGV0ZShTaW1wbGVE YXRhYmFzZU9pZExpc3QgKmxpc3QsCisJCVNpbXBsZURhdGFiYXNlT2lkTGlzdENlbGwgKmNlbGws IFNpbXBsZURhdGFiYXNlT2lkTGlzdENlbGwgKnByZXYpOwogCiBpbnQKIG1haW4oaW50IGFyZ2Ms IGNoYXIgKiphcmd2KQogewogCVJlc3RvcmVPcHRpb25zICpvcHRzOwogCWludAkJCWM7Ci0JaW50 CQkJZXhpdF9jb2RlOwogCWludAkJCW51bVdvcmtlcnMgPSAxOwotCUFyY2hpdmUgICAgKkFIOwog CWNoYXIJICAgKmlucHV0RmlsZVNwZWM7CiAJc3RhdGljIGludAlkaXNhYmxlX3RyaWdnZXJzID0g MDsKIAlzdGF0aWMgaW50CWVuYWJsZV9yb3dfc2VjdXJpdHkgPSAwOwpAQCAtNzcsMTEgKzEyMCwx NCBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAlzdGF0aWMgaW50CXN0cmljdF9uYW1l cyA9IDA7CiAJYm9vbAkJZGF0YV9vbmx5ID0gZmFsc2U7CiAJYm9vbAkJc2NoZW1hX29ubHkgPSBm YWxzZTsKKwlTaW1wbGVTdHJpbmdMaXN0ICAgIGRiX2V4Y2x1ZGVfcGF0dGVybnMgPSB7TlVMTCwg TlVMTH07CisJYm9vbAkJCQlnbG9iYWxzX29ubHkgPSBmYWxzZTsKIAogCXN0cnVjdCBvcHRpb24g Y21kb3B0c1tdID0gewogCQl7ImNsZWFuIiwgMCwgTlVMTCwgJ2MnfSwKIAkJeyJjcmVhdGUiLCAw LCBOVUxMLCAnQyd9LAogCQl7ImRhdGEtb25seSIsIDAsIE5VTEwsICdhJ30sCisJCXsiZ2xvYmFs cy1vbmx5IiwgMCwgTlVMTCwgJ2cnfSwKIAkJeyJkYm5hbWUiLCAxLCBOVUxMLCAnZCd9LAogCQl7 ImV4aXQtb24tZXJyb3IiLCAwLCBOVUxMLCAnZSd9LAogCQl7ImV4Y2x1ZGUtc2NoZW1hIiwgMSwg TlVMTCwgJ04nfSwKQEAgLTEyOCw2ICsxNzQsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJn dikKIAkJeyJuby1zZWN1cml0eS1sYWJlbHMiLCBub19hcmd1bWVudCwgJm5vX3NlY3VyaXR5X2xh YmVscywgMX0sCiAJCXsibm8tc3Vic2NyaXB0aW9ucyIsIG5vX2FyZ3VtZW50LCAmbm9fc3Vic2Ny aXB0aW9ucywgMX0sCiAJCXsiZmlsdGVyIiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsIDR9LAor CQl7ImV4Y2x1ZGUtZGF0YWJhc2UiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgNn0sCiAKIAkJ e05VTEwsIDAsIE5VTEwsIDB9CiAJfTsKQEAgLTE1Niw3ICsyMDMsNyBAQCBtYWluKGludCBhcmdj LCBjaGFyICoqYXJndikKIAkJfQogCX0KIAotCXdoaWxlICgoYyA9IGdldG9wdF9sb25nKGFyZ2Ms IGFyZ3YsICJhY0NkOmVmOkY6aDpJOmo6bEw6bjpOOk9wOlA6UnNTOnQ6VDpVOnZ3V3gxIiwKKwl3 aGlsZSAoKGMgPSBnZXRvcHRfbG9uZyhhcmdjLCBhcmd2LCAiYUFjQ2Q6ZWY6RjpnaDpJOmo6bEw6 bjpOOk9wOlA6UnNTOnQ6VDpVOnZ3V3gxIiwKIAkJCQkJCQljbWRvcHRzLCBOVUxMKSkgIT0gLTEp CiAJewogCQlzd2l0Y2ggKGMpCkBAIC0xODMsMTEgKzIzMCwxNCBAQCBtYWluKGludCBhcmdjLCBj aGFyICoqYXJndikKIAkJCQlpZiAoc3RybGVuKG9wdGFyZykgIT0gMCkKIAkJCQkJb3B0cy0+Zm9y bWF0TmFtZSA9IHBnX3N0cmR1cChvcHRhcmcpOwogCQkJCWJyZWFrOworCQkJY2FzZSAnZyc6CisJ CQkJLyogcmVzdG9yZSBvbmx5IGdsb2JhbC5kYXQgZmlsZSBmcm9tIGRpcmVjdG9yeSAqLworCQkJ CWdsb2JhbHNfb25seSA9IHRydWU7CisJCQkJYnJlYWs7CiAJCQljYXNlICdoJzoKIAkJCQlpZiAo c3RybGVuKG9wdGFyZykgIT0gMCkKIAkJCQkJb3B0cy0+Y3BhcmFtcy5wZ2hvc3QgPSBwZ19zdHJk dXAob3B0YXJnKTsKIAkJCQlicmVhazsKLQogCQkJY2FzZSAnaic6CQkJLyogbnVtYmVyIG9mIHJl c3RvcmUgam9icyAqLwogCQkJCWlmICghb3B0aW9uX3BhcnNlX2ludChvcHRhcmcsICItai8tLWpv YnMiLCAxLAogCQkJCQkJCQkJICBQR19NQVhfSk9CUywKQEAgLTMwMiw2ICszNTIsMTAgQEAgbWFp bihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCQkJCWV4aXQoMSk7CiAJCQkJb3B0cy0+ZXhpdF9v bl9lcnJvciA9IHRydWU7CiAJCQkJYnJlYWs7CisJCQljYXNlIDY6CisJCQkJLyogbGlzdCBvZiBk YXRhYmFzZXMgcGF0dGVybnMgdGhvc2UgbmVlZHMgdG8gc2tpcCB3aGlsZSByZXN0b3JpbmcgKi8K KwkJCQlzaW1wbGVfc3RyaW5nX2xpc3RfYXBwZW5kKCZkYl9leGNsdWRlX3BhdHRlcm5zLCBvcHRh cmcpOworCQkJCWJyZWFrOwogCiAJCQlkZWZhdWx0OgogCQkJCS8qIGdldG9wdF9sb25nIGFscmVh ZHkgZW1pdHRlZCBhIGNvbXBsYWludCAqLwpAQCAtMzI5LDYgKzM4MywxNiBAQCBtYWluKGludCBh cmdjLCBjaGFyICoqYXJndikKIAlpZiAoIW9wdHMtPmNwYXJhbXMuZGJuYW1lICYmICFvcHRzLT5m aWxlbmFtZSAmJiAhb3B0cy0+dG9jU3VtbWFyeSkKIAkJcGdfZmF0YWwoIm9uZSBvZiAtZC8tLWRi bmFtZSBhbmQgLWYvLS1maWxlIG11c3QgYmUgc3BlY2lmaWVkIik7CiAKKwlpZiAoZGJfZXhjbHVk ZV9wYXR0ZXJucy5oZWFkICE9IE5VTEwgJiYgZ2xvYmFsc19vbmx5KQorCXsKKwkJcGdfbG9nX2Vy cm9yKCJvcHRpb24gLS1leGNsdWRlLWRhdGFiYXNlIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIHdp dGggLWcvLS1nbG9iYWxzLW9ubHkiKTsKKwkJcGdfbG9nX2Vycm9yX2hpbnQoIlRyeSBcIiVzIC0t aGVscFwiIGZvciBtb3JlIGluZm9ybWF0aW9uLiIsIHByb2duYW1lKTsKKwkJZXhpdF9uaWNlbHko MSk7CisJfQorCisJaWYgKGdsb2JhbHNfb25seSAmJiBvcHRzLT5jcGFyYW1zLmRibmFtZSA9PSBO VUxMKQorCQlwZ19mYXRhbCgib3B0aW9uIC1nLy0tZ2xvYmFscy1vbmx5IHJlcXVpcmVzIG9wdGlv biAtZC8tLWRibmFtZSIpOworCiAJLyogU2hvdWxkIGdldCBhdCBtb3N0IG9uZSBvZiAtZCBhbmQg LWYsIGVsc2UgdXNlciBpcyBjb25mdXNlZCAqLwogCWlmIChvcHRzLT5jcGFyYW1zLmRibmFtZSkK IAl7CkBAIC0zOTUsMTcgKzQ1OSw5MiBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJ CQlvcHRzLT5mb3JtYXQgPSBhcmNoRGlyZWN0b3J5OwogCQkJCWJyZWFrOwogCisJCQljYXNlICdw JzoKKwkJCWNhc2UgJ1AnOgorCQkJCWJyZWFrOyAvKiBkZWZhdWx0IGZvcm1hdCAqLworCiAJCQlj YXNlICd0JzoKIAkJCWNhc2UgJ1QnOgogCQkJCW9wdHMtPmZvcm1hdCA9IGFyY2hUYXI7CiAJCQkJ YnJlYWs7CiAKIAkJCWRlZmF1bHQ6Ci0JCQkJcGdfZmF0YWwoInVucmVjb2duaXplZCBhcmNoaXZl IGZvcm1hdCBcIiVzXCI7IHBsZWFzZSBzcGVjaWZ5IFwiY1wiLCBcImRcIiwgb3IgXCJ0XCIiLAor CQkJCXBnX2ZhdGFsKCJ1bnJlY29nbml6ZWQgYXJjaGl2ZSBmb3JtYXQgXCIlc1wiOyBwbGVhc2Ug c3BlY2lmeSBcImNcIiwgXCJkXCIsIFwicFwiLCBvciBcInRcIiIsCiAJCQkJCQkgb3B0cy0+Zm9y bWF0TmFtZSk7CiAJCX0KIAl9CiAKKwkvKgorCSAqIElmIHRvYy5kYXQgZmlsZSBkb2VzIG5vdCBw cmVzZW50IGluIGN1cnJlbnQgcGF0aCwgdGhlbiBjaGVjayBmb3IKKwkgKiBnbG9iYWwuZGF0IGFu ZCBtYXAuZGF0IGZpbGVzLiAgSWYgYm90aCBmaWxlcyBhcmUgcHJlc2VudCwgdGhlbgorCSAqIHJl c3RvcmUgYWxsIHRoZSBkYXRhYmFzZXMgZnJvbSBtYXAuZGF0IGZpbGUgbGlzdCBhbmQgc2tpcCBy ZXN0b3JpbmcgZm9yCisJICogLS1leGNsdWRlLWRhdGFiYXNlIHBhdHRlcm5zLgorCSAqLworCWlm IChpbnB1dEZpbGVTcGVjICE9IE5VTEwgJiYKKwkJCSFJc0ZpbGVFeGlzdHNJbkRpcmVjdG9yeShp bnB1dEZpbGVTcGVjLCAidG9jLmRhdCIpKQorCXsKKwkJLyogSWYgZ2xvYmFsLmRhdCBhbmQgbWFw LmRhdCBhcmUgZXhpc3QsIHRoZW4gcHJvY2VzIHRoZW0uICovCisJCWlmIChJc0ZpbGVFeGlzdHNJ bkRpcmVjdG9yeShwZ19zdHJkdXAoaW5wdXRGaWxlU3BlYyksICJnbG9iYWwuZGF0IikKKwkJCQkm JiBJc0ZpbGVFeGlzdHNJbkRpcmVjdG9yeShwZ19zdHJkdXAoaW5wdXRGaWxlU3BlYyksICJtYXAu ZGF0IikpCisJCXsKKwkJCVBHY29ubgkqY29ubiA9IE5VTEw7IC8qIENvbm5lY3Rpb24gdG8gcmVz dG9yZSBnbG9iYWwgc3FsIGNvbW1hbmRzLiAqLworCQkJaW50CQlleGl0X2NvZGUgPSAwOworCisJ CQkvKgorCQkJICogVG8gcmVzdG9yZSBtdWx0aXBsZSBkYXRhYmFzZXMsIGNyZWF0ZSBkYXRhYmFz ZSBvcHRpb24gc2hvdWxkIGJlCisJCQkgKiBzcGVjaWZpZWQuCisJCQkgKi8KKwkJCWlmIChvcHRz LT5jcmVhdGVEQiAhPSAxKQorCQkJCXBnX2ZhdGFsKCJvcHRpb24gLUMvLS1jcmVhdGUgc2hvdWxk IGJlIHNwZWNpZmllZCB3aGVuIHVzaW5nIGR1bXAgb2YgcGdfZHVtcGFsbCIpOworCisJCQkvKiBD b25uZWN0IHRvIGRhdGFiYXNlIHRvIGV4ZWN1dGUgZ2xvYmFsIHNxbCBjb21tYW5kcyBmcm9tIGds b2JhbC5kYXQgZmlsZS4gKi8KKwkJCWlmIChvcHRzLT5jcGFyYW1zLmRibmFtZSkKKwkJCXsKKwkJ CQljb25uID0gY29ubmVjdERhdGFiYXNlKG9wdHMtPmNwYXJhbXMuZGJuYW1lLCBOVUxMLCBvcHRz LT5jcGFyYW1zLnBnaG9zdCwKKwkJCQkJCW9wdHMtPmNwYXJhbXMucGdwb3J0LCBvcHRzLT5jcGFy YW1zLnVzZXJuYW1lLCBUUklfREVGQVVMVCwgZmFsc2UpOworCisJCQkJaWYgKCFjb25uKQorCQkJ CQlwZ19mYXRhbCgiY291bGQgbm90IGNvbm5lY3QgdG8gZGF0YWJhc2UgXCIlc1wiIiwgb3B0cy0+ Y3BhcmFtcy5kYm5hbWUpOworCQkJfQorCisJCQkvKiBPcGVuIGdsb2JhbC5kYXQgZmlsZSBhbmQg ZXhlY3V0ZS9hcHBlbmQgYWxsIHRoZSBnbG9iYWwgc3FsIGNvbW1hbmRzLiAqLworCQkJZXhlY3V0 ZV9nbG9iYWxfc3FsX2NvbW1hbmRzKGNvbm4sIGlucHV0RmlsZVNwZWMsIG9wdHMtPmZpbGVuYW1l KTsKKworCQkJLyogSWYgZ2xvYmFscy1vbmx5LCB0aGVuIHJldHVybiBmcm9tIGhlcmUuICovCisJ CQlpZiAoZ2xvYmFsc19vbmx5KQorCQkJeworCQkJCWlmIChjb25uKQorCQkJCQlQUWZpbmlzaChj b25uKTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQkvKiBOb3cgcmVzdG9yZSBhbGwgdGhlIGRh dGFiYXNlcyBmcm9tIG1hcC5kYXQgZmlsZS4gKi8KKwkJCQlleGl0X2NvZGUgPSByZXN0b3JlQWxs RGF0YWJhc2VzKGNvbm4sIGlucHV0RmlsZVNwZWMsIGRiX2V4Y2x1ZGVfcGF0dGVybnMsCisJCQkJ CQlvcHRzLCBudW1Xb3JrZXJzKTsKKwkJCX0KKworCQkJLyogRnJlZSBkYiBwYXR0ZXJuIGxpc3Qu ICovCisJCQlzaW1wbGVfc3RyaW5nX2Z1bGxfbGlzdF9kZWxldGUoJmRiX2V4Y2x1ZGVfcGF0dGVy bnMpOworCisJCQlyZXR1cm4gZXhpdF9jb2RlOworCQl9LyogZW5kIGlmICovCisJfS8qIGVuZCBp ZiAqLworCisJcmV0dXJuIHJlc3RvcmVPbmVEYXRhYmFzZShpbnB1dEZpbGVTcGVjLCBvcHRzLCBu dW1Xb3JrZXJzLCBmYWxzZSk7Cit9CisKKy8qCisgKiByZXN0b3JlT25lRGF0YWJhc2UKKyAqCisg KiBUaGlzIHdpbGwgcmVzdG9yZSBvbmUgZGF0YWJhc2UgdXNpbmcgdG9jLmRhdCBmaWxlLgorICov CitzdGF0aWMgYm9vbAorcmVzdG9yZU9uZURhdGFiYXNlKGNvbnN0IGNoYXIgKmlucHV0RmlsZVNw ZWMsIFJlc3RvcmVPcHRpb25zICpvcHRzLAorCQlpbnQgbnVtV29ya2VycywgYm9vbCBhcHBlbmRf ZGF0YSkKK3sKKwlBcmNoaXZlCQkqQUg7CisJYm9vbAkJZXhpdF9jb2RlOworCiAJQUggPSBPcGVu QXJjaGl2ZShpbnB1dEZpbGVTcGVjLCBvcHRzLT5mb3JtYXQpOwogCiAJU2V0QXJjaGl2ZU9wdGlv bnMoQUgsIE5VTEwsIG9wdHMpOwpAQCAtNDMxLDExICs1NzAsMTEgQEAgbWFpbihpbnQgYXJnYywg Y2hhciAqKmFyZ3YpCiAJQUgtPm51bVdvcmtlcnMgPSBudW1Xb3JrZXJzOwogCiAJaWYgKG9wdHMt PnRvY1N1bW1hcnkpCi0JCVByaW50VE9DU3VtbWFyeShBSCk7CisJCVByaW50VE9DU3VtbWFyeShB SCwgYXBwZW5kX2RhdGEpOwogCWVsc2UKIAl7CiAJCVByb2Nlc3NBcmNoaXZlUmVzdG9yZU9wdGlv bnMoQUgpOwotCQlSZXN0b3JlQXJjaGl2ZShBSCk7CisJCVJlc3RvcmVBcmNoaXZlKEFILCBhcHBl bmRfZGF0YSk7CiAJfQogCiAJLyogZG9uZSwgcHJpbnQgYSBzdW1tYXJ5IG9mIGlnbm9yZWQgZXJy b3JzICovCkBAIC00NzEsNiArNjEwLDcgQEAgdXNhZ2UoY29uc3QgY2hhciAqcHJvZ25hbWUpCiAJ cHJpbnRmKF8oIiAgLWMsIC0tY2xlYW4gICAgICAgICAgICAgICAgICBjbGVhbiAoZHJvcCkgZGF0 YWJhc2Ugb2JqZWN0cyBiZWZvcmUgcmVjcmVhdGluZ1xuIikpOwogCXByaW50ZihfKCIgIC1DLCAt LWNyZWF0ZSAgICAgICAgICAgICAgICAgY3JlYXRlIHRoZSB0YXJnZXQgZGF0YWJhc2VcbiIpKTsK IAlwcmludGYoXygiICAtZSwgLS1leGl0LW9uLWVycm9yICAgICAgICAgIGV4aXQgb24gZXJyb3Is IGRlZmF1bHQgaXMgdG8gY29udGludWVcbiIpKTsKKwlwcmludGYoXygiICAtZywgLS1nbG9iYWxz LW9ubHkgICAgICAgICAgIHJlc3RvcmUgb25seSBnbG9iYWwgb2JqZWN0cywgbm8gZGF0YWJhc2Vz XG4iKSk7CiAJcHJpbnRmKF8oIiAgLUksIC0taW5kZXg9TkFNRSAgICAgICAgICAgICByZXN0b3Jl IG5hbWVkIGluZGV4XG4iKSk7CiAJcHJpbnRmKF8oIiAgLWosIC0tam9icz1OVU0gICAgICAgICAg ICAgICB1c2UgdGhpcyBtYW55IHBhcmFsbGVsIGpvYnMgdG8gcmVzdG9yZVxuIikpOwogCXByaW50 ZihfKCIgIC1MLCAtLXVzZS1saXN0PUZJTEVOQU1FICAgICAgdXNlIHRhYmxlIG9mIGNvbnRlbnRz IGZyb20gdGhpcyBmaWxlIGZvclxuIgpAQCAtNDgzLDYgKzYyMyw3IEBAIHVzYWdlKGNvbnN0IGNo YXIgKnByb2duYW1lKQogCXByaW50ZihfKCIgIC1TLCAtLXN1cGVydXNlcj1OQU1FICAgICAgICAg c3VwZXJ1c2VyIHVzZXIgbmFtZSB0byB1c2UgZm9yIGRpc2FibGluZyB0cmlnZ2Vyc1xuIikpOwog CXByaW50ZihfKCIgIC10LCAtLXRhYmxlPU5BTUUgICAgICAgICAgICAgcmVzdG9yZSBuYW1lZCBy ZWxhdGlvbiAodGFibGUsIHZpZXcsIGV0Yy4pXG4iKSk7CiAJcHJpbnRmKF8oIiAgLVQsIC0tdHJp Z2dlcj1OQU1FICAgICAgICAgICByZXN0b3JlIG5hbWVkIHRyaWdnZXJcbiIpKTsKKwlwcmludGYo XygiICAtLWV4Y2x1ZGUtZGF0YWJhc2U9UEFUVEVSTiAgIGV4Y2x1ZGUgZGF0YWJhc2VzIHdob3Nl IG5hbWUgbWF0Y2hlcyB3aXRoIHBhdHRlcm5cbiIpKTsKIAlwcmludGYoXygiICAteCwgLS1uby1w cml2aWxlZ2VzICAgICAgICAgIHNraXAgcmVzdG9yYXRpb24gb2YgYWNjZXNzIHByaXZpbGVnZXMg KGdyYW50L3Jldm9rZSlcbiIpKTsKIAlwcmludGYoXygiICAtMSwgLS1zaW5nbGUtdHJhbnNhY3Rp b24gICAgIHJlc3RvcmUgYXMgYSBzaW5nbGUgdHJhbnNhY3Rpb25cbiIpKTsKIAlwcmludGYoXygi ICAtLWRpc2FibGUtdHJpZ2dlcnMgICAgICAgICAgIGRpc2FibGUgdHJpZ2dlcnMgZHVyaW5nIGRh dGEtb25seSByZXN0b3JlXG4iKSk7CkBAIC02MjEsMyArNzYyLDcxOSBAQCByZWFkX3Jlc3RvcmVf ZmlsdGVycyhjb25zdCBjaGFyICpmaWxlbmFtZSwgUmVzdG9yZU9wdGlvbnMgKm9wdHMpCiAKIAlm aWx0ZXJfZnJlZSgmZnN0YXRlKTsKIH0KKworLyoKKyAqIElzRmlsZUV4aXN0c0luRGlyZWN0b3J5 CisgKgorICogUmV0dXJucyB0cnVlIGlmIGZpbGUgZXhpc3QgaW4gY3VycmVudCBkaXJlY3Rvcnku CisgKi8KK3N0YXRpYyBib29sCitJc0ZpbGVFeGlzdHNJbkRpcmVjdG9yeShjb25zdCBjaGFyICpk aXIsIGNvbnN0IGNoYXIgKmZpbGVuYW1lKQoreworCXN0cnVjdCBzdGF0CQkJc3Q7CisJY2hhcgkJ CQlidWZbTUFYUEdQQVRIXTsKKworCWlmIChzbnByaW50ZihidWYsIE1BWFBHUEFUSCwgIiVzLyVz IiwgZGlyLCBmaWxlbmFtZSkgPj0gTUFYUEdQQVRIKQorCQlwZ19mYXRhbCgiZGlyZWN0b3J5IG5h bWUgdG9vIGxvbmc6IFwiJXNcIiIsIGRpcik7CisKKwlyZXR1cm4gKHN0YXQoYnVmLCAmc3QpID09 IDAgJiYgU19JU1JFRyhzdC5zdF9tb2RlKSk7Cit9CisKKy8qCisgKiBjb25uZWN0RGF0YWJhc2UK KyAqCisgKiBNYWtlIGEgZGF0YWJhc2UgY29ubmVjdGlvbiB3aXRoIHRoZSBnaXZlbiBwYXJhbWV0 ZXJzLiAgQW4KKyAqIGludGVyYWN0aXZlIHBhc3N3b3JkIHByb21wdCBpcyBhdXRvbWF0aWNhbGx5 IGlzc3VlZCBpZiByZXF1aXJlZC4KKyAqCisgKiBJZiBmYWlsX29uX2Vycm9yIGlzIGZhbHNlLCB3 ZSByZXR1cm4gTlVMTCB3aXRob3V0IHByaW50aW5nIGFueSBtZXNzYWdlCisgKiBvbiBmYWlsdXJl LCBidXQgcHJlc2VydmUgYW55IHByb21wdGVkIHBhc3N3b3JkIGZvciB0aGUgbmV4dCB0cnkuCisg Ki8KK3N0YXRpYyBQR2Nvbm4gKgorY29ubmVjdERhdGFiYXNlKGNvbnN0IGNoYXIgKmRibmFtZSwg Y29uc3QgY2hhciAqY29ubmVjdGlvbl9zdHJpbmcsCisJCQkJY29uc3QgY2hhciAqcGdob3N0LCBj b25zdCBjaGFyICpwZ3BvcnQsIGNvbnN0IGNoYXIgKnBndXNlciwKKwkJCQl0cml2YWx1ZSBwcm9t cHRfcGFzc3dvcmQsIGJvb2wgZmFpbF9vbl9lcnJvcikKK3sKKwlQR2Nvbm4JCQkJKmNvbm47CisJ Ym9vbAkJCQluZXdfcGFzczsKKwljb25zdCBjaGFyCQkJKnJlbW90ZXZlcnNpb25fc3RyOworCWlu dAkJCQkJbXlfdmVyc2lvbjsKKwljb25zdCBjaGFyCQkJKiprZXl3b3JkcyA9IE5VTEw7CisJY29u c3QgY2hhcgkJCSoqdmFsdWVzID0gTlVMTDsKKwlQUWNvbm5pbmZvT3B0aW9uIAkqY29ubl9vcHRz ID0gTlVMTDsKKwlzdGF0aWMgY2hhcgkJCSpwYXNzd29yZCA9IE5VTEw7CisJc3RhdGljIGludAkJ CXNlcnZlcl92ZXJzaW9uOworCisJaWYgKHByb21wdF9wYXNzd29yZCA9PSBUUklfWUVTICYmICFw YXNzd29yZCkKKwkJcGFzc3dvcmQgPSBzaW1wbGVfcHJvbXB0KCJQYXNzd29yZDogIiwgZmFsc2Up OworCisJLyoKKwkgKiBTdGFydCB0aGUgY29ubmVjdGlvbi4gIExvb3AgdW50aWwgd2UgaGF2ZSBh IHBhc3N3b3JkIGlmIHJlcXVlc3RlZCBieQorCSAqIGJhY2tlbmQuCisJICovCisJZG8KKwl7CisJ CWludAkJCQkJYXJnY291bnQgPSA2OworCQlQUWNvbm5pbmZvT3B0aW9uCSpjb25uX29wdDsKKwkJ Y2hhcgkJCQkqZXJyX21zZyA9IE5VTEw7CisJCWludAkJCQkJaSA9IDA7CisKKwkJZnJlZShrZXl3 b3Jkcyk7CisJCWZyZWUodmFsdWVzKTsKKwkJUFFjb25uaW5mb0ZyZWUoY29ubl9vcHRzKTsKKwor CQkvKgorCQkgKiBNZXJnZSB0aGUgY29ubmVjdGlvbiBpbmZvIGlucHV0cyBnaXZlbiBpbiBmb3Jt IG9mIGNvbm5lY3Rpb24gc3RyaW5nCisJCSAqIGFuZCBvdGhlciBvcHRpb25zLiAgRXhwbGljaXRs eSBkaXNjYXJkIGFueSBkYm5hbWUgdmFsdWUgaW4gdGhlCisJCSAqIGNvbm5lY3Rpb24gc3RyaW5n OyBvdGhlcndpc2UsIFBRY29ubmVjdGRiUGFyYW1zKCkgd291bGQgaW50ZXJwcmV0CisJCSAqIHRo YXQgdmFsdWUgYXMgYmVpbmcgaXRzZWxmIGEgY29ubmVjdGlvbiBzdHJpbmcuCisJCSAqLworCQlp ZiAoY29ubmVjdGlvbl9zdHJpbmcpCisJCXsKKwkJCWNvbm5fb3B0cyA9IFBRY29ubmluZm9QYXJz ZShjb25uZWN0aW9uX3N0cmluZywgJmVycl9tc2cpOworCQkJaWYgKGNvbm5fb3B0cyA9PSBOVUxM KQorCQkJCXBnX2ZhdGFsKCIlcyIsIGVycl9tc2cpOworCisJCQlmb3IgKGNvbm5fb3B0ID0gY29u bl9vcHRzOyBjb25uX29wdC0+a2V5d29yZCAhPSBOVUxMOyBjb25uX29wdCsrKQorCQkJeworCQkJ CWlmIChjb25uX29wdC0+dmFsICE9IE5VTEwgJiYgY29ubl9vcHQtPnZhbFswXSAhPSAnXDAnICYm CisJCQkJCXN0cmNtcChjb25uX29wdC0+a2V5d29yZCwgImRibmFtZSIpICE9IDApCisJCQkJCWFy Z2NvdW50Kys7CisJCQl9CisKKwkJCWtleXdvcmRzID0gcGdfbWFsbG9jMCgoYXJnY291bnQgKyAx KSAqIHNpemVvZigqa2V5d29yZHMpKTsKKwkJCXZhbHVlcyA9IHBnX21hbGxvYzAoKGFyZ2NvdW50 ICsgMSkgKiBzaXplb2YoKnZhbHVlcykpOworCisJCQlmb3IgKGNvbm5fb3B0ID0gY29ubl9vcHRz OyBjb25uX29wdC0+a2V5d29yZCAhPSBOVUxMOyBjb25uX29wdCsrKQorCQkJeworCQkJCWlmIChj b25uX29wdC0+dmFsICE9IE5VTEwgJiYgY29ubl9vcHQtPnZhbFswXSAhPSAnXDAnICYmCisJCQkJ CXN0cmNtcChjb25uX29wdC0+a2V5d29yZCwgImRibmFtZSIpICE9IDApCisJCQkJeworCQkJCQlr ZXl3b3Jkc1tpXSA9IGNvbm5fb3B0LT5rZXl3b3JkOworCQkJCQl2YWx1ZXNbaV0gPSBjb25uX29w dC0+dmFsOworCQkJCQlpKys7CisJCQkJfQorCQkJfQorCQl9CisJCWVsc2UKKwkJeworCQkJa2V5 d29yZHMgPSBwZ19tYWxsb2MwKChhcmdjb3VudCArIDEpICogc2l6ZW9mKCprZXl3b3JkcykpOwor CQkJdmFsdWVzID0gcGdfbWFsbG9jMCgoYXJnY291bnQgKyAxKSAqIHNpemVvZigqdmFsdWVzKSk7 CisJCX0KKworCQlpZiAocGdob3N0KQorCQl7CisJCQlrZXl3b3Jkc1tpXSA9ICJob3N0IjsKKwkJ CXZhbHVlc1tpXSA9IHBnaG9zdDsKKwkJCWkrKzsKKwkJfQorCQlpZiAocGdwb3J0KQorCQl7CisJ CQlrZXl3b3Jkc1tpXSA9ICJwb3J0IjsKKwkJCXZhbHVlc1tpXSA9IHBncG9ydDsKKwkJCWkrKzsK KwkJfQorCQlpZiAocGd1c2VyKQorCQl7CisJCQlrZXl3b3Jkc1tpXSA9ICJ1c2VyIjsKKwkJCXZh bHVlc1tpXSA9IHBndXNlcjsKKwkJCWkrKzsKKwkJfQorCQlpZiAocGFzc3dvcmQpCisJCXsKKwkJ CWtleXdvcmRzW2ldID0gInBhc3N3b3JkIjsKKwkJCXZhbHVlc1tpXSA9IHBhc3N3b3JkOworCQkJ aSsrOworCQl9CisJCWlmIChkYm5hbWUpCisJCXsKKwkJCWtleXdvcmRzW2ldID0gImRibmFtZSI7 CisJCQl2YWx1ZXNbaV0gPSBkYm5hbWU7CisJCQlpKys7CisJCX0KKwkJa2V5d29yZHNbaV0gPSAi ZmFsbGJhY2tfYXBwbGljYXRpb25fbmFtZSI7CisJCXZhbHVlc1tpXSA9IHByb2duYW1lOworCQlp Kys7CisKKwkJbmV3X3Bhc3MgPSBmYWxzZTsKKwkJY29ubiA9IFBRY29ubmVjdGRiUGFyYW1zKGtl eXdvcmRzLCB2YWx1ZXMsIHRydWUpOworCisJCWlmICghY29ubikKKwkJCXBnX2ZhdGFsKCJjb3Vs ZCBub3QgY29ubmVjdCB0byBkYXRhYmFzZSBcIiVzXCIiLCBkYm5hbWUpOworCisJCWlmIChQUXN0 YXR1cyhjb25uKSA9PSBDT05ORUNUSU9OX0JBRCAmJgorCQkJUFFjb25uZWN0aW9uTmVlZHNQYXNz d29yZChjb25uKSAmJgorCQkJIXBhc3N3b3JkICYmCisJCQlwcm9tcHRfcGFzc3dvcmQgIT0gVFJJ X05PKQorCQl7CisJCQlQUWZpbmlzaChjb25uKTsKKwkJCXBhc3N3b3JkID0gc2ltcGxlX3Byb21w dCgiUGFzc3dvcmQ6ICIsIGZhbHNlKTsKKwkJCW5ld19wYXNzID0gdHJ1ZTsKKwkJfQorCX0gd2hp bGUgKG5ld19wYXNzKTsKKworCS8qIGNoZWNrIHRvIHNlZSB0aGF0IHRoZSBiYWNrZW5kIGNvbm5l Y3Rpb24gd2FzIHN1Y2Nlc3NmdWxseSBtYWRlICovCisJaWYgKFBRc3RhdHVzKGNvbm4pID09IENP Tk5FQ1RJT05fQkFEKQorCXsKKwkJaWYgKGZhaWxfb25fZXJyb3IpCisJCQlwZ19mYXRhbCgiJXMi LCBQUWVycm9yTWVzc2FnZShjb25uKSk7CisJCWVsc2UKKwkJeworCQkJUFFmaW5pc2goY29ubik7 CisKKwkJCWZyZWUoa2V5d29yZHMpOworCQkJZnJlZSh2YWx1ZXMpOworCQkJUFFjb25uaW5mb0Zy ZWUoY29ubl9vcHRzKTsKKworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwl9CisKKwlmcmVlKGtleXdv cmRzKTsKKwlmcmVlKHZhbHVlcyk7CisJUFFjb25uaW5mb0ZyZWUoY29ubl9vcHRzKTsKKworCS8q IENoZWNrIHZlcnNpb24gKi8KKwlyZW1vdGV2ZXJzaW9uX3N0ciA9IFBRcGFyYW1ldGVyU3RhdHVz KGNvbm4sICJzZXJ2ZXJfdmVyc2lvbiIpOworCWlmICghcmVtb3RldmVyc2lvbl9zdHIpCisJCXBn X2ZhdGFsKCJjb3VsZCBub3QgZ2V0IHNlcnZlciB2ZXJzaW9uIik7CisJc2VydmVyX3ZlcnNpb24g PSBQUXNlcnZlclZlcnNpb24oY29ubik7CisJaWYgKHNlcnZlcl92ZXJzaW9uID09IDApCisJCXBn X2ZhdGFsKCJjb3VsZCBub3QgcGFyc2Ugc2VydmVyIHZlcnNpb24gXCIlc1wiIiwKKwkJCQkgcmVt b3RldmVyc2lvbl9zdHIpOworCisJbXlfdmVyc2lvbiA9IFBHX1ZFUlNJT05fTlVNOworCisJLyoK KwkgKiBXZSBhbGxvdyB0aGUgc2VydmVyIHRvIGJlIGJhY2sgdG8gOS4yLCBhbmQgdXAgdG8gYW55 IG1pbm9yIHJlbGVhc2Ugb2YKKwkgKiBvdXIgb3duIG1ham9yIHZlcnNpb24uICAoU2VlIGFsc28g dmVyc2lvbiBjaGVjayBpbiBwZ19kdW1wLmMuKQorCSAqLworCWlmIChteV92ZXJzaW9uICE9IHNl cnZlcl92ZXJzaW9uCisJCSYmIChzZXJ2ZXJfdmVyc2lvbiA8IDkwMjAwIHx8CisJCQkoc2VydmVy X3ZlcnNpb24gLyAxMDApID4gKG15X3ZlcnNpb24gLyAxMDApKSkKKwl7CisJCXBnX2xvZ19lcnJv cigiYWJvcnRpbmcgYmVjYXVzZSBvZiBzZXJ2ZXIgdmVyc2lvbiBtaXNtYXRjaCIpOworCQlwZ19s b2dfZXJyb3JfZGV0YWlsKCJzZXJ2ZXIgdmVyc2lvbjogJXM7ICVzIHZlcnNpb246ICVzIiwKKwkJ CQkJCQlyZW1vdGV2ZXJzaW9uX3N0ciwgcHJvZ25hbWUsIFBHX1ZFUlNJT04pOworCQlleGl0X25p Y2VseSgxKTsKKwl9CisKKwlQUWNsZWFyKGV4ZWN1dGVRdWVyeShjb25uLCBBTFdBWVNfU0VDVVJF X1NFQVJDSF9QQVRIX1NRTCkpOworCisJcmV0dXJuIGNvbm47Cit9CisKKy8qCisgKiBleGVjdXRl UXVlcnkKKyAqCisgKiBSdW4gYSBxdWVyeSwgcmV0dXJuIHRoZSByZXN1bHRzLCBleGl0IHByb2dy YW0gb24gZmFpbHVyZS4KKyAqLworc3RhdGljIFBHcmVzdWx0ICoKK2V4ZWN1dGVRdWVyeShQR2Nv bm4gKmNvbm4sIGNvbnN0IGNoYXIgKnF1ZXJ5KQoreworCVBHcmVzdWx0CSpyZXM7CisKKwlwZ19s b2dfaW5mbygiZXhlY3V0aW5nICVzIiwgcXVlcnkpOworCisJcmVzID0gUFFleGVjKGNvbm4sIHF1 ZXJ5KTsKKwlpZiAoIXJlcyB8fCBQUXJlc3VsdFN0YXR1cyhyZXMpICE9IFBHUkVTX1RVUExFU19P SykKKwl7CisJCXBnX2xvZ19lcnJvcigicXVlcnkgZmFpbGVkOiAlcyIsIFBRZXJyb3JNZXNzYWdl KGNvbm4pKTsKKwkJcGdfbG9nX2Vycm9yX2RldGFpbCgiUXVlcnkgd2FzOiAlcyIsIHF1ZXJ5KTsK KwkJUFFmaW5pc2goY29ubik7CisJCWV4aXRfbmljZWx5KDEpOworCX0KKworCXJldHVybiByZXM7 Cit9CisKKy8qCisgKglSZWFkT25lU3RhdGVtZW50CisgKgorICogVGhpcyB3aWxsIHN0YXJ0IHJl YWRpbmcgZnJvbSBwYXNzZWQgZmlsZSBwb2ludGVyIHVzaW5nIGZnZXRjIGFuZCByZWFkIHRpbGwK KyAqIHNlbWljb2xvbihzcWwgc3RhdGVtZW50IHRlcm1pbmF0b3IgZm9yIGdsb2JhbC5zcWwgZmls ZSkKKyAqCisgKglFT0YgaXMgcmV0dXJuZWQgaWYgZW5kLW9mLWZpbGUgaW5wdXQgaXMgc2Vlbjsg dGltZSB0byBzaHV0IGRvd24uCisgKi8KKworc3RhdGljIGludAorUmVhZE9uZVN0YXRlbWVudChT dHJpbmdJbmZvIGluQnVmLCBGSUxFICpmX2dsbykKK3sKKwlpbnQJCQljOyAvKiBjaGFyYWN0ZXIg cmVhZCBmcm9tIGdldGMoKSAqLworCisJcmVzZXRTdHJpbmdJbmZvKGluQnVmKTsKKworCS8qCisJ ICogUmVhZCBjaGFyYWN0ZXJzIHVudGlsIEVPRiBvciB0aGUgYXBwcm9wcmlhdGUgZGVsaW1pdGVy IGlzIHNlZW4uCisJICovCisJd2hpbGUgKChjID0gZmdldGMoZl9nbG8pKSAhPSBFT0YpCisJewor CQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihpbkJ1ZiwgKGNoYXIpIGMpOworCisJCWlmIChjID09ICdc bicpCisJCXsKKwkJCWlmKGluQnVmLT5sZW4gPiAxICYmCisJCQkJCWluQnVmLT5kYXRhW2luQnVm LT5sZW4gLSAyXSA9PSAnOycpCisJCQkJYnJlYWs7CisJCQllbHNlCisJCQkJY29udGludWU7CisJ CX0KKwl9CisKKwkvKiBObyBpbnB1dCBiZWZvcmUgRU9GIHNpZ25hbCBtZWFucyB0aW1lIHRvIHF1 aXQuICovCisJaWYgKGMgPT0gRU9GICYmIGluQnVmLT5sZW4gPT0gMCkKKwkJcmV0dXJuIEVPRjsK KworCS8qIEFkZCAnXDAnIHRvIG1ha2UgaXQgbG9vayB0aGUgc2FtZSBhcyBtZXNzYWdlIGNhc2Uu ICovCisJYXBwZW5kU3RyaW5nSW5mb0NoYXIoaW5CdWYsIChjaGFyKSAnXDAnKTsKKworCXJldHVy biAnUSc7Cit9CisKKy8qCisgKiBmaWx0ZXJfZGJuYW1lc19mb3JfcmVzdG9yZQorICoKKyAqIFRo aXMgd2lsbCByZW1vdmUgbmFtZXMgZnJvbSBhbGwgZGJsaXN0IHRoYXQgYXJlIGdpdmVuIHdpdGgg ZXhjbHVkZS1kYXRhYmFzZQorICogb3B0aW9uLgorICoKKyAqIHJldHVybnMgbnVtYmVyIG9mIGRi bmFtZXMgdGhvc2Ugd2lsbCBiZSByZXN0b3JlZC4KKyAqLworc3RhdGljIGludAorZmlsdGVyX2Ri bmFtZXNfZm9yX3Jlc3RvcmUoUEdjb25uICpjb25uLCBTaW1wbGVEYXRhYmFzZU9pZExpc3QgKmRi bmFtZV9vaWRfbGlzdCwKKwkJU2ltcGxlU3RyaW5nTGlzdCBkYl9leGNsdWRlX3BhdHRlcm5zKQor eworCVNpbXBsZURhdGFiYXNlT2lkTGlzdENlbGwJKmRib2lkX2NlbGwgPSBkYm5hbWVfb2lkX2xp c3QtPmhlYWQ7CisJU2ltcGxlRGF0YWJhc2VPaWRMaXN0Q2VsbAkqZGJvaWRwcmVjZWxsID0gTlVM TDsKKwlpbnQJCQkJCQkJY291bnRfZGIgPSAwOworCisJLyogUmV0dXJuIDAgaWYgdGhlcmUgaXMg bm8gZGIgdG8gcmVzdG9yZS4gKi8KKwlpZiAoZGJvaWRfY2VsbCA9PSBOVUxMKQorCQlyZXR1cm4g MDsKKworCS8qIFByb2Nlc3Mgb25lIGJ5IG9uZSBhbGwgZGJuYW1lcyBhbmQgaWYgbmVlZHMgdG8g c2tpcCByZXN0b3JpbmcuICovCisJd2hpbGUgKGRib2lkX2NlbGwgIT0gTlVMTCkKKwl7CisJCWJv b2wJCQkJCQlza2lwX2RiX3Jlc3RvcmUgPSBmYWxzZTsKKwkJU2ltcGxlRGF0YWJhc2VPaWRMaXN0 Q2VsbAkqbmV4dCA9IGRib2lkX2NlbGwtPm5leHQ7CisKKwkJLyogTm93IG1hdGNoIHRoaXMgZGJu YW1lIHdpdGggZXhjbHVkZS1kYXRhYmFzZSBsaXN0LiAqLworCQlmb3IgKFNpbXBsZVN0cmluZ0xp c3RDZWxsICpjZWxsZGIgPSBkYl9leGNsdWRlX3BhdHRlcm5zLmhlYWQ7IGNlbGxkYjsgY2VsbGRi ID0gY2VsbGRiLT5uZXh0KQorCQl7CisJCQlpZiAoKGNvbm4gJiYgaXNfZnVsbF9wYXR0ZXJuKGNv bm4sIGRib2lkX2NlbGwtPmRiX25hbWUsIGNlbGxkYi0+dmFsKSkgfHwKKwkJCQkJKCFjb25uICYm IHBnX3N0cmNhc2VjbXAoZGJvaWRfY2VsbC0+ZGJfbmFtZSwgY2VsbGRiLT52YWwpID09IDApKQor CQkJeworCQkJCS8qCisJCQkJICogQXMgd2UgbmVlZCB0byBza2lwIHRoaXMgZGJuYW1lIHNvIHNl dCBmbGFnIHRvIHJlbW92ZSBpdCBmcm9tCisJCQkJICogbGlzdC4KKwkJCQkgKgorCQkJCSAqIE5v dGU6IHdlIGNhbid0IHJlbW92ZSB0aGlzIHBhdHRlcm4gZnJvbSBza2lwIGxpc3QgYXMgd2UKKwkJ CQkgKiBtaWdodCBoYXZlIG11bHRpcGxlIGRhdGFiYXNlIG5hbWUgd2l0aCB0aGlzIHNhbWUgcGF0 dGVybi4KKwkJCQkgKi8KKwkJCQlza2lwX2RiX3Jlc3RvcmUgPSB0cnVlOworCQkJCWJyZWFrOwor CQkJfQorCQl9CisKKwkJLyogSW5jcmVtZW50IGNvdW50IGlmIGRiIG5lZWRzIHRvIGJlIHJlc3Rv cmVkLiAqLworCQlpZiAoc2tpcF9kYl9yZXN0b3JlKQorCQkJc2ltcGxlX2RiX29pZF9saXN0X2Rl bGV0ZShkYm5hbWVfb2lkX2xpc3QsIGRib2lkX2NlbGwsIGRib2lkcHJlY2VsbCk7CisJCWVsc2UK KwkJeworCQkJY291bnRfZGIrKzsgLyogSW5jcmVtZW50IGRiIGNvdXRlci4gKi8KKwkJCWRib2lk cHJlY2VsbCA9IGRib2lkX2NlbGw7CisJCX0KKworCQkvKiBQcm9jZXNzIG5leHQgZGJuYW1lIGZy b20gZGJuYW1lIGxpc3QuICovCisJCWRib2lkX2NlbGwgPSBuZXh0OworCX0KKworCXJldHVybiBj b3VudF9kYjsKK30KKworLyoKKyAqIGdldF9kYm5hbWVfb2lkX2xpc3RfZnJvbV9tZmlsZQorICoK KyAqIE9wZW4gbWFwLmRhdCBmaWxlIGFuZCByZWFkIGxpbmUgYnkgbGluZSBhbmQgdGhlbiBwcmVw YXJlIGEgbGlzdCBvZiBkYXRhYmFzZQorICogbmFtZXMgYW5kIGNvcnJlc3BvZGluZyBkYl9vaWQu CisgKgorICogUmV0dXJucywgdG90YWwgbnVtYmVyIG9mIGRhdGFiYXNlIG5hbWVzIGluIG1hcC5k YXQgZmlsZS4KKyAqLworc3RhdGljIGludAorZ2V0X2RibmFtZV9vaWRfbGlzdF9mcm9tX21maWxl KGNvbnN0IGNoYXIgKmR1bXBkaXJwYXRoLCBTaW1wbGVEYXRhYmFzZU9pZExpc3QgKmRibmFtZV9v aWRfbGlzdCkKK3sKKwlGSUxFICAgICpwZmlsZTsKKwljaGFyICAgIG1hcF9maWxlX3BhdGhbTUFY UEdQQVRIXTsKKwljaGFyICAgIGxpbmVbTUFYUEdQQVRIXTsKKwlpbnQgICAgIGNvdW50ID0gMDsK KworCXNucHJpbnRmKG1hcF9maWxlX3BhdGgsIE1BWFBHUEFUSCwgIiVzL21hcC5kYXQiLCBkdW1w ZGlycGF0aCk7CisKKwkvKiBPcGVuIG1hcC5kYXQgZmlsZS4gKi8KKwlwZmlsZSA9IGZvcGVuKG1h cF9maWxlX3BhdGgsICJyIik7CisKKwlpZiAocGZpbGUgPT0gTlVMTCkKKwkJcGdfZmF0YWwoImNv dWxkIG5vdCBvcGVuIG1hcC5kYXQgZmlsZTogJXMiLCBzdHJlcnJvcihlcnJubykpOworCisJLyog QXBwZW5kIGFsbCB0aGUgZGJuYW1lIGFuZCBkYl9vaWQgdG8gdGhlIGxpc3QuICovCisJd2hpbGUo KGZnZXRzKGxpbmUsIE1BWFBHUEFUSCwgcGZpbGUpKSAhPSBOVUxMKQorCXsKKwkJT2lkICAgICAg ICAgZGJfb2lkOworCQljaGFyICAgICAgICBkYm5hbWVbTUFYUEdQQVRIICsgMV07CisKKwkJLyog RXh0cmFjdCBkYm5hbWUgYW5kIGRiX29pZCBmcm9tIGxpbmUgKi8KKwkJc3NjYW5mKGxpbmUsICIl dSAlcyIgLCAmZGJfb2lkLCBkYm5hbWUpOworCisJCXBnX2xvZ19pbmZvKCJmb3VuZCBkYm5hbWUg YXMgOiVzIGFuZCBkYl9vaWQ6JWQgaW4gbWFwLmRhdCBmaWxlIHdoaWxlIHJlc3RvcmluZyIsIGRi bmFtZSwgZGJfb2lkKTsKKworCQkvKiBSZXBvcnQgZXJyb3IgaWYgZmlsZSBoYXMgYW55IGNvcnJ1 cHRlZCBkYXRhLiAqLworCQlpZiAoIU9pZElzVmFsaWQoZGJfb2lkKSB8fCBzdHJsZW4oZGJuYW1l KSA9PSAwKQorCQkJcGdfZmF0YWwoImludmFsaWQgZW50cnkgaW4gbWFwLmRhdCBmaWxlIGF0IGxp bmUgOiAlZCIsIGNvdW50ICsgMSk7CisKKwkJLyoKKwkJICogWFhYIDogYmVmb3JlIGFkZGluZyBk Ym5hbWUgaW50byBsaXN0LCB3ZSBjYW4gdmVyaWZ5IHRoYXQgdGhpcyBkYgorCQkgKiBuZWVkcyB0 byBza2lwcGVkIGZvciByZXN0b3JlIG9yIG5vdCBidXQgYXMgb2Ygbm93LCB3ZSBhcmUgbWFraW5n CisJCSAqIGEgbGlzdCBvZiBhbGwgdGhlIGRhdGFiYXNlcy4KKwkJICovCisJCXNpbXBsZV9kYl9v aWRfbGlzdF9hcHBlbmQoZGJuYW1lX29pZF9saXN0LCBkYl9vaWQsIGRibmFtZSk7CisJCWNvdW50 Kys7CisJfQorCisJLyogQ2xvc2UgbWFwLmRhdCBmaWxlLiAqLworCWZjbG9zZShwZmlsZSk7CisK KwlyZXR1cm4gY291bnQ7Cit9CisKKy8qCisgKiByZXN0b3JlQWxsRGF0YWJhc2VzCisgKgorICog VGhpcyB3aWxsIHJlc3RvcmUgZGF0YWJhc2VzIHRob3NlIGR1bXBzIGFyZSBwcmVzZW50IGluCisg KiBkaXJlY3RvcnkgYmFzZWQgb24gbWFwLmRhdCBmaWxlIG1hcHBpbmcuCisgKgorICogVGhpcyB3 aWxsIHNraXAgcmVzdG9yaW5nIGZvciBkYXRhYmFzZXMgdGhhdCBhcmUgc3BlY2lmaWVkIHdpdGgK KyAqIGV4Y2x1ZGUtZGF0YWJhc2Ugb3B0aW9uLgorICovCitzdGF0aWMgaW50CityZXN0b3JlQWxs RGF0YWJhc2VzKFBHY29ubiAqY29ubiwgY29uc3QgY2hhciAqZHVtcGRpcnBhdGgsCisJCVNpbXBs ZVN0cmluZ0xpc3QgZGJfZXhjbHVkZV9wYXR0ZXJucywgUmVzdG9yZU9wdGlvbnMgKm9wdHMsCisJ CWludCBudW1Xb3JrZXJzKQoreworCVNpbXBsZURhdGFiYXNlT2lkTGlzdAkJCWRibmFtZV9vaWRf bGlzdCA9IHtOVUxMLCBOVUxMfTsKKwlTaW1wbGVEYXRhYmFzZU9pZExpc3RDZWxsCQkqZGJvaWRf Y2VsbDsKKwlpbnQJCQkJCQkJCWV4aXRfY29kZSA9IDA7CisJaW50CQkJCQkJCQludW1fZGJfcmVz dG9yZTsKKwlpbnQJCQkJCQkJCW51bV90b3RhbF9kYjsKKworCW51bV90b3RhbF9kYiA9IGdldF9k Ym5hbWVfb2lkX2xpc3RfZnJvbV9tZmlsZShkdW1wZGlycGF0aCwgJmRibmFtZV9vaWRfbGlzdCk7 CisKKwkvKiBJZiBtYXAuZGF0IGhhcyBubyBlbnRyeSwgcmV0dXJuIGZyb20gaGVyZS4gKi8KKwlp ZiAoZGJuYW1lX29pZF9saXN0LmhlYWQgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwlwZ19sb2df aW5mbygiZm91bmQgdG90YWwgJWQgZGF0YWJhc2UgbmFtZXMgaW4gbWFwLmRhdCBmaWxlIiwgbnVt X3RvdGFsX2RiKTsKKworCWlmICghY29ubikKKwl7CisJCXBnX2xvZ19pbmZvKCJ0cnlpbmcgdG8g Y29ubmVjdCBwb3N0Z3JlcyBkYXRhYmFzZSB0byBkdW1wIGludG8gb3V0IGZpbGUiKTsKKworCQlj b25uID0gY29ubmVjdERhdGFiYXNlKCJwb3N0Z3JlcyIsIE5VTEwsIG9wdHMtPmNwYXJhbXMucGdo b3N0LAorCQkJCW9wdHMtPmNwYXJhbXMucGdwb3J0LCBvcHRzLT5jcGFyYW1zLnVzZXJuYW1lLCBU UklfREVGQVVMVCwgZmFsc2UpOworCisJCS8qIFRyeSB3aXRoIHRlbXBsYXRlMS4gKi8KKwkJaWYg KCFjb25uKQorCQl7CisJCQlwZ19sb2dfaW5mbygidHJ5aW5nIHRvIGNvbm5lY3QgdGVtcGxhdGUx IGRhdGFiYXNlIGFzIGZhaWxlZCB0byBjb25uZWN0IHRvIHBvc3RncmVzIHRvIGR1bXAgaW50byBv dXQgZmlsZSIpOworCisJCQljb25uID0gY29ubmVjdERhdGFiYXNlKCJ0ZW1wbGF0ZTEiLCBOVUxM LCBvcHRzLT5jcGFyYW1zLnBnaG9zdCwKKwkJCQkJb3B0cy0+Y3BhcmFtcy5wZ3BvcnQsIG9wdHMt PmNwYXJhbXMudXNlcm5hbWUsIFRSSV9ERUZBVUxULCBmYWxzZSk7CisKKwkJCWlmICghY29ubikK KwkJCQlwZ19sb2dfaW5mbygidGhlcmUgaXMgbm8gZGF0YWJhc2UgY29ubmVjdGlvbiBzbyBjb25z aWRlciBwYXR0ZXJuIGFzIHNpbXBsZSBuYW1lIGZvciBleGNsdWRlLWRhdGFiYXNlIik7CisJCX0K Kwl9CisKKwkvKgorCSAqIFRPRE86IFRvIHNraXAgZGF0YWJhc2VzLCB3ZSBuZWVkIHRvIG1ha2Ug YSBkZXNpZ24uCisJICoKKwkgKiBTa2lwIGFueSBleHBsaWNpdGx5IGV4Y2x1ZGVkIGRhdGFiYXNl LiAgSWYgdGhlcmUgaXMgbm8gZGF0YWJhc2UKKwkgKiBjb25uZWN0aW9uLCB0aGVuIGp1c3QgY29u c2lkZXIgcGF0dGVybiBhcyBzaW1wbGUgbmFtZSB0byBjb21wYXJlLgorCSAqLworCW51bV9kYl9y ZXN0b3JlID0gZmlsdGVyX2RibmFtZXNfZm9yX3Jlc3RvcmUoY29ubiwgJmRibmFtZV9vaWRfbGlz dCwKKwkJCWRiX2V4Y2x1ZGVfcGF0dGVybnMpOworCisJLyogQ2xvc2UgdGhlIGRiIGNvbm5lY3Rp b24gYXMgd2UgYXJlIGRvbmUgZ2xvYmFscyBhbmQgcGF0dGVybnMuICovCisJaWYgKGNvbm4pCisJ CVBRZmluaXNoKGNvbm4pOworCisJLyogRXhpdCBpZiBubyBkYiBuZWVkcyB0byBiZSByZXN0b3Jl ZC4gKi8KKwlpZiAoZGJuYW1lX29pZF9saXN0LmhlYWQgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisK KwlwZ19sb2dfaW5mbygibmVlZHMgdG8gcmVzdG9yZSAlZCBkYXRhYmFzZXMgb3V0IG9mICVkIGRh dGFiYXNlcyIsIG51bV9kYl9yZXN0b3JlLCBudW1fdG90YWxfZGIpOworCisJLyogVE9ETzogTUFY X09OX0VYSVRfTklDRUxZIGlzIDEwMCBub3cuLi4gbWF4IEFIIGhhbmRsZSByZWdpc3RlciBvbiBl eGl0IC4qLworCWlmIChudW1fZGJfcmVzdG9yZSA+IDEwMCkKKwl7CisJCXNpbXBsZV9kYl9vaWRf ZnVsbF9saXN0X2RlbGV0ZSgmZGJuYW1lX29pZF9saXN0KTsKKwkJcGdfZmF0YWwoImNvdW5kIG5v dCByZXN0b3JlIG1vcmUgdGhhbiAxMDAgZGF0YWJhc2VzIGJ5IHNpbmdsZSBwZ19yZXN0b3JlLCBo ZXJlIHRvdGFsIGRiOiVkIiwgbnVtX2RiX3Jlc3RvcmUpOworCX0KKworCS8qCisJICogWFhYOiBU T0RPIHRpbGwgbm93LCB3ZSBtYWRlIGEgbGlzdCBvZiBkYXRhYmFzZXMsIHRob3NlIG5lZWRzIHRv IGJlIHJlc3RvcmVkCisJICogYWZ0ZXIgc2tpcHBpbmcgbmFtZXMgb2YgZXhjbHVkZS1kYXRhYmFz ZS4gIE5vdyB3ZSBjYW4gbGF1bmNoIHBhcmFsbGVsCisJICogd29ya2VycyB0byByZXN0b3JlIHRo ZXNlIGRhdGFiYXNlcy4KKwkgKi8KKwlkYm9pZF9jZWxsID0gZGJuYW1lX29pZF9saXN0LmhlYWQ7 CisKKwl3aGlsZShkYm9pZF9jZWxsICE9IE5VTEwpCisJeworCQljaGFyCQlzdWJkaXJwYXRoW01B WFBHUEFUSF07CisJCWludAkJCWRiZXhpdF9jb2RlOworCisJCS8qCisJCSAqIFdlIG5lZWQgdG8g cmVzZXQgb3ZlcnJpZGVfZGJuYW1lIHNvIHRoYXQgb2JqZWN0cyBjYW4gYmUgcmVzdG9yZWQgaW50 bworCQkgKiBhbHJlYWR5IGNyZWF0ZWQgZGF0YWJhc2UuICh1c2VkIHdpdGggLWQvLS1kYm5hbWUg b3B0aW9uKQorCQkgKi8KKwkJaWYgKG9wdHMtPmNwYXJhbXMub3ZlcnJpZGVfZGJuYW1lKQorCQl7 CisJCQlwZnJlZShvcHRzLT5jcGFyYW1zLm92ZXJyaWRlX2RibmFtZSk7CisJCQlvcHRzLT5jcGFy YW1zLm92ZXJyaWRlX2RibmFtZSA9IE5VTEw7CisJCX0KKworCQlzbnByaW50ZihzdWJkaXJwYXRo LCBNQVhQR1BBVEgsICIlcy9kYXRhYmFzZXMvJXUiLCBkdW1wZGlycGF0aCwgZGJvaWRfY2VsbC0+ ZGJfb2lkKTsKKworCQlwZ19sb2dfaW5mbygicmVzdG9yaW5nIGRhdGFiYXNlIFwiJXNcIiIsIGRi b2lkX2NlbGwtPmRiX25hbWUpOworCisJCWRiZXhpdF9jb2RlID0gcmVzdG9yZU9uZURhdGFiYXNl KHN1YmRpcnBhdGgsIG9wdHMsIG51bVdvcmtlcnMsIHRydWUpOworCisJCS8qIFN0b3JlIGV4aXRf Y29kZSB0byByZXBvcnQgaXQgYmFjay4gKi8KKwkJaWYgKGV4aXRfY29kZSA9PSAwICYmIGRiZXhp dF9jb2RlICE9IDApCisJCQlleGl0X2NvZGUgPSBkYmV4aXRfY29kZTsKKworCQlkYm9pZF9jZWxs ID0gZGJvaWRfY2VsbC0+bmV4dDsKKwl9IC8qIGVuZCB3aGlsZSAqLworCisJLyogTG9nIG51bWJl ciBvZiBwcm9jZXNzZWQgZGF0YWJhc2VzLiovCisJcGdfbG9nX2luZm8oIm51bWJlciBvZiByZXN0 b3JlZCBkYXRhYmFzZXMgYXJlICVkIiwgbnVtX2RiX3Jlc3RvcmUpOworCisJLyogRnJlZSBkYm5h bWUgYW5kIGRib2lkIGxpc3QuICovCisJc2ltcGxlX2RiX29pZF9mdWxsX2xpc3RfZGVsZXRlKCZk Ym5hbWVfb2lkX2xpc3QpOworCisJcmV0dXJuIGV4aXRfY29kZTsKK30KKworLyoKKyAqIGV4ZWN1 dGVfZ2xvYmFsX3NxbF9jb21tYW5kcworICoKKyAqIFRoaXMgd2lsbCBvcGVuIGdsb2JhbC5kYXQg ZmlsZSBhbmQgd2lsbCBleGVjdXRlIGFsbCBnbG9iYWwgc3FsIGNvbW1hbmRzIG9uZQorICogYnkg b25lIHN0YXRlbWVudC4KKyAqIFNlbWljb2xvbiBpcyBjb25zaWRlcmVkIGFzIHN0YXRlbWVudCB0 ZXJtaW5hdG9yLiAgSWYgb3V0ZmlsZSBpcyBwYXNzZWQsIHRoZW4KKyAqIHRoaXMgd2lsbCBjb3B5 IGFsbCBzcWwgY29tbWFuZHMgaW50byBvdXRmaWxlIHJhdGhlciB0aGVuIGV4ZWN1dGluZyB0aGVt LgorICovCitzdGF0aWMgdm9pZAorZXhlY3V0ZV9nbG9iYWxfc3FsX2NvbW1hbmRzKFBHY29ubiAq Y29ubiwgY29uc3QgY2hhciAqZHVtcGRpcnBhdGgsIGNvbnN0IGNoYXIgKm91dGZpbGUpCit7CisJ Y2hhciAgICAgICAgICAgIGdsb2JhbF9maWxlX3BhdGhbTUFYUEdQQVRIXTsKKwlQR3Jlc3VsdAkJ KnJlc3VsdDsKKwlTdHJpbmdJbmZvRGF0YQlzcWxzdGF0ZW1lbnQ7CisJRklMRQkJCSpwZmlsZTsK KworCXNucHJpbnRmKGdsb2JhbF9maWxlX3BhdGgsIE1BWFBHUEFUSCwgIiVzL2dsb2JhbC5kYXQi LCBkdW1wZGlycGF0aCk7CisKKwkvKiBOb3cgb3BlbiBnbG9iYWwuZGF0IGZpbGUuICovCisJcGZp bGUgPSBmb3BlbihnbG9iYWxfZmlsZV9wYXRoLCAiciIpOworCisJaWYgKHBmaWxlID09IE5VTEwp CisJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgb3BlbiBnbG9iYWwuZGF0IGZpbGU6ICVzIiwgc3RyZXJy b3IoZXJybm8pKTsKKworCS8qCisJICogSWYgb3V0ZmlsZSBpcyBnaXZlbiwgdGhlbiBqdXN0IGNv cHkgYWxsIGdsb2JhbC5kYXQgZmlsZSBkYXRhIGludG8KKwkgKiBvdXRmaWxlLgorCSAqLworCWlm IChvdXRmaWxlKQorCXsKKwkJY2hhciAgICAgICAgICAgIG91dF9maWxlX3BhdGhbTUFYUEdQQVRI XTsKKwkJRklMRSAgICAgICAgICAgICpvZmlsZTsKKwkJaW50CQkJCWM7CisKKwkJc25wcmludGYo b3V0X2ZpbGVfcGF0aCwgTUFYUEdQQVRILCAiJXMiLCBvdXRmaWxlKTsKKworCQlvZmlsZSA9IGZv cGVuKG91dF9maWxlX3BhdGgsICJ3Iik7CisKKwkJaWYgKG9maWxlID09IE5VTEwpCisJCXsKKwkJ CWZjbG9zZShwZmlsZSk7CisJCQlwZ19mYXRhbCgiY291bGQgbm90IG9wZW4gZmlsZTogJXMiLCBz dHJlcnJvcihlcnJubykpOworCQl9CisKKwkJLyogTm93IGFwcGVuZCBnbG9iYWwuZGF0IGlub3Qg b3V0ZmlsZS4gKi8KKwkJd2hpbGUgKChjID0gZmdldGMocGZpbGUpKSAhPSBFT0YpCisJCXsKKwkJ CWZwdXRjKGMsIG9maWxlKTsKKwkJfQorCisJCWZjbG9zZShwZmlsZSk7CisJCWZjbG9zZShvZmls ZSk7CisJCXJldHVybjsKKwl9CisKKwkvKiBJbml0IHNxbHN0YXRlbWVudCB0byBhcHBlbmQgY29t bWFuZHMgKi8KKwlpbml0U3RyaW5nSW5mbygmc3Fsc3RhdGVtZW50KTsKKworCS8qIFByb2Nlc3Mg ZmlsZSB0aWxsIEVPRiBhbmQgZXhlY3V0ZSBzcWwgc3RhdGVtZW50cyAqLworCXdoaWxlIChSZWFk T25lU3RhdGVtZW50KCZzcWxzdGF0ZW1lbnQsIHBmaWxlKSAhPSBFT0YpCisJeworCQlyZXN1bHQg PSBQUWV4ZWMoY29ubiwgc3Fsc3RhdGVtZW50LmRhdGEpOworCisJCXN3aXRjaCAoUFFyZXN1bHRT dGF0dXMocmVzdWx0KSkKKwkJeworCQkJY2FzZSBQR1JFU19DT01NQU5EX09LOgorCQkJY2FzZSBQ R1JFU19UVVBMRVNfT0s6CisJCQljYXNlIFBHUkVTX0VNUFRZX1FVRVJZOgorCQkJCWJyZWFrOwor CQkJZGVmYXVsdDoKKwkJCQlwZ19sb2dfZXJyb3IoImNvdWxkIG5vdCBleGVjdXRlIHF1ZXJ5OiAl cyBcbkNvbW1hbmQgd2FzOiAlcyIsIFBRZXJyb3JNZXNzYWdlKGNvbm4pLCBzcWxzdGF0ZW1lbnQu ZGF0YSk7CisJCX0KKwkJUFFjbGVhcihyZXN1bHQpOworCX0KKworCWZjbG9zZShwZmlsZSk7Cit9 CisKKy8qCisgKiBzaW1wbGVfZGJfb2lkX2xpc3RfYXBwZW5kCisgKgorICogYXBwZW5kcyBhIG5v ZGUgdG8gdGhlIGxpc3QgaW4gdGhlIGVuZC4KKyAqLworc3RhdGljIHZvaWQKK3NpbXBsZV9kYl9v aWRfbGlzdF9hcHBlbmQoU2ltcGxlRGF0YWJhc2VPaWRMaXN0ICpsaXN0LCBPaWQgZGJfb2lkLCBj b25zdCBjaGFyICpkYm5hbWUpCit7CisJU2ltcGxlRGF0YWJhc2VPaWRMaXN0Q2VsbCAqY2VsbDsK KworCWNlbGwgPSBwZ19tYWxsb2Nfb2JqZWN0KFNpbXBsZURhdGFiYXNlT2lkTGlzdENlbGwpOwor CisJY2VsbC0+bmV4dCA9IE5VTEw7CisJY2VsbC0+ZGJfb2lkID0gZGJfb2lkOworCWNlbGwtPmRi X25hbWUgPSBwZ19zdHJkdXAoZGJuYW1lKTsKKworCWlmIChsaXN0LT50YWlsKQorCQlsaXN0LT50 YWlsLT5uZXh0ID0gY2VsbDsKKwllbHNlCisJCWxpc3QtPmhlYWQgPSBjZWxsOworCWxpc3QtPnRh aWwgPSBjZWxsOworfQorCisvKgorICogc2ltcGxlX2RiX29pZF9mdWxsX2xpc3RfZGVsZXRlCisg KgorICogZGVsZXRlIGFsbCBjZWxsIGZyb20gZGJuYW1lIGFuZCBkYm9pZCBsaXN0LgorICovCitz dGF0aWMgdm9pZAorc2ltcGxlX2RiX29pZF9mdWxsX2xpc3RfZGVsZXRlKFNpbXBsZURhdGFiYXNl T2lkTGlzdCAqbGlzdCkKK3sKKwlTaW1wbGVEYXRhYmFzZU9pZExpc3RDZWxsCSpjZWxsID0gbGlz dC0+aGVhZDsKKwlTaW1wbGVEYXRhYmFzZU9pZExpc3RDZWxsCSpuZXh0Y2VsbCA9IE5VTEw7CisK Kwl3aGlsZSAoY2VsbCkKKwl7CisJCW5leHRjZWxsID0gY2VsbC0+bmV4dDsKKwkJcGZyZWUgKGNl bGwpOworCQljZWxsID0gbmV4dGNlbGw7CisJfQorCisJbGlzdC0+aGVhZCA9IE5VTEw7CisJbGlz dC0+dGFpbCA9IE5VTEw7Cit9CisKKy8qCisgKiBzaW1wbGVfc3RyaW5nX2Z1bGxfbGlzdF9kZWxl dGUKKyAqCisgKiBkZWxldGUgYWxsIGNlbGwgZnJvbSBzdHJpbmcgbGlzdC4KKyAqLworc3RhdGlj IHZvaWQKK3NpbXBsZV9zdHJpbmdfZnVsbF9saXN0X2RlbGV0ZShTaW1wbGVTdHJpbmdMaXN0ICps aXN0KQoreworCVNpbXBsZVN0cmluZ0xpc3RDZWxsCSpjZWxsID0gbGlzdC0+aGVhZDsKKwlTaW1w bGVTdHJpbmdMaXN0Q2VsbCAgICAqY2VsbG5leHQgPSBOVUxMOworCisJd2hpbGUgKGNlbGwpCisJ eworCQljZWxsbmV4dCA9IGNlbGwtPm5leHQ7CisJCXBmcmVlKGNlbGwpOworCQljZWxsID0gY2Vs bG5leHQ7CisJfQorCisJbGlzdC0+aGVhZCA9IE5VTEw7CisJbGlzdC0+dGFpbCA9IE5VTEw7Cit9 CisKKy8qCisgKiBzaW1wbGVfZGJfb2lkX2xpc3RfZGVsZXRlCisgKgorICogZGVsZXRlIGNlbGwg ZnJvbSBkYXRhYmFzZSBhbmQgb2lkIGxpc3QuCisgKi8KK3N0YXRpYyB2b2lkCitzaW1wbGVfZGJf b2lkX2xpc3RfZGVsZXRlKFNpbXBsZURhdGFiYXNlT2lkTGlzdCAqbGlzdCwgU2ltcGxlRGF0YWJh c2VPaWRMaXN0Q2VsbCAqY2VsbCwKKwkJU2ltcGxlRGF0YWJhc2VPaWRMaXN0Q2VsbCAqcHJldikK K3sKKwlpZiAocHJldiA9PSBOVUxMKQorCXsKKwkJbGlzdC0+aGVhZCA9IGNlbGwtPm5leHQ7CisJ CXBmcmVlKGNlbGwpOworCX0KKwllbHNlCisJeworCQlwcmV2LT5uZXh0ID0gY2VsbC0+bmV4dDsK KwkJcGZyZWUoY2VsbCk7CisJfQorfQorCisvKgorICogaXNfZnVsbF9wYXR0ZXJuCisgKgorICog UmV0dXJucyB0cnVlIGlmIHdlIGNhbiBjb25zdHVjdCAxc3Qgc3RyaW5nIGZyb20gZ2l2ZW4gcGF0 dGVybi4KKyAqCisgKi8KK3N0YXRpYyBib29sCitpc19mdWxsX3BhdHRlcm4oUEdjb25uICpjb25u LCBjb25zdCBjaGFyICpzdHIsIGNvbnN0IGNoYXIgKnB0cm4pCit7CisJUFFFeHBCdWZmZXIJCXF1 ZXJ5OworCVBHcmVzdWx0CQkqcmVzdWx0OworCisJcXVlcnkgPSBjcmVhdGVQUUV4cEJ1ZmZlcigp OworCisJcHJpbnRmUFFFeHBCdWZmZXIocXVlcnksCisJCQkiU0VMRUNUIHN1YnN0cmluZyAoICIK KwkJCSIgJyVzJyAsICIKKwkJCSIgJyVzJyApICIsIHN0ciwgcHRybik7CisKKyAgIHJlc3VsdCA9 IGV4ZWN1dGVRdWVyeShjb25uLCBxdWVyeS0+ZGF0YSk7CisKKwlpZiAoUFFyZXN1bHRTdGF0dXMo cmVzdWx0KSA9PSBQR1JFU19UVVBMRVNfT0spCisJeworCQlpZiAoUFFudHVwbGVzKHJlc3VsdCkg PT0gMSkKKwkJeworCQkJY29uc3QgY2hhcgkqb3V0c3RyOworCisJCQlvdXRzdHIgPSBQUWdldHZh bHVlKHJlc3VsdCwgMCwgMCk7CisKKwkJCVBRY2xlYXIocmVzdWx0KTsKKwkJCWRlc3Ryb3lQUUV4 cEJ1ZmZlcihxdWVyeSk7CisKKwkJCS8qCisJCQkgKiBJZiBvdXRwdXQgc3RyaW5nIG9mIHN1YnN0 cmluZyBmdW5jdGlvbiBpcyBtYXRjaGVzIHdpdGggc3RyLCB0aGVuCisJCQkgKiB3ZSBjYW4gY29u c3RydWN0IHN0ciBmcm9tIHBhdHRlcm4uCisJCQkgKi8KKwkJCWlmIChvdXRzdHIgJiYgcGdfc3Ry Y2FzZWNtcChvdXRzdHIsIHN0cikgPT0gMCkKKwkJCQlyZXR1cm4gdHJ1ZTsKKwkJCWVsc2UKKwkJ CQlyZXR1cm4gZmFsc2U7CisJCX0KKwl9CisJZWxzZQorCQlwZ19sb2dfZXJyb3IoImNvdWxkIG5v dCBleGVjdXRlIHF1ZXJ5OiAlcyBcbkNvbW1hbmQgd2FzOiAlcyIsIFBRZXJyb3JNZXNzYWdlKGNv bm4pLCBxdWVyeS0+ZGF0YSk7CisKKwlQUWNsZWFyKHJlc3VsdCk7CisJZGVzdHJveVBRRXhwQnVm ZmVyKHF1ZXJ5KTsKKworCXJldHVybiBmYWxzZTsKK30KLS0gCjIuMzkuMwoK --000000000000c6a775062b494808--