Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vIhPX-00ApYY-2E for pgsql-hackers@arkaria.postgresql.org; Tue, 11 Nov 2025 05:59:23 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vIhPV-004g1U-1V for pgsql-hackers@arkaria.postgresql.org; Tue, 11 Nov 2025 05:59:21 +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.96) (envelope-from ) id 1vIhPV-004g1M-02 for pgsql-hackers@lists.postgresql.org; Tue, 11 Nov 2025 05:59:21 +0000 Received: from mail-qt1-x82f.google.com ([2607:f8b0:4864:20::82f]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vIhPS-0076o4-0V for pgsql-hackers@lists.postgresql.org; Tue, 11 Nov 2025 05:59:20 +0000 Received: by mail-qt1-x82f.google.com with SMTP id d75a77b69052e-4e4d9fc4316so38453661cf.2 for ; Mon, 10 Nov 2025 21:59:17 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1762840756; x=1763445556; 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=Uz0xoMZ5v0PwKlrwKACIrGMZCvdGpQHJsJrgg+7ecJI=; b=R4iEUlpi2kLGWcSH1sjIG2Xn/P5XdmAv4Pc6ZTPXt+3ptdlSRlJiY8xnho5ZVTZhPO F4LtZWDvXFZ5MPDuK0DdHKX4yt5kBPOYFanZNuDkfQo+H5+xrz6n6VSCyyJvUmBWHvD1 z0uJMZutQKFrMf9ll/LJmovYm1T8LsDw9FHrOVkMJI9ypCUt13NdIBlqmYVwycoqEWuT o2Jsn3rHhu987rh9pfN06zslukWqvwyhCGpHyxAOL8d108LutZkOlodWnAnGOUj/zZqM drw+txPmknqZKv7R1sJOGqTER1FBsyQL3mg2SFI0tNbRzbHhKaxjc8f1JEofrywEN8qP BVMQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1762840756; x=1763445556; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=Uz0xoMZ5v0PwKlrwKACIrGMZCvdGpQHJsJrgg+7ecJI=; b=vDyiJj7zoPOr9smajnL3a3Anw9zSS9gmMDNCM/OLKASEWzjQuu+3evnQzQN3G3peS4 BHOKh949+okNeU5hO9/tuIW5I49t40Xd74lUJI0LAl/iw6lGKV7kaAR7pmKP2hju5NWq kCo6NLH5GnaEoo8VCZu3TysQM3ssvY92Bnx4H6tFolIsRfYvnS/8lA2GG9bLdCnOfeer UyYCoZJ4LFS2s9Sh6IDPVNuKLu8Mg+JpziQXmtkqxAu492Q4Kgxx+ESelzdTqO8qP1sW 55FMHqQp0oHj2eNTDhl6MLtkNhQ/01936M73o8oxvQdqssf5L9qhJPhBB/N9lrHKk8iu LRbg== X-Gm-Message-State: AOJu0YxGnZ475T1SbkyMoTJ2CW8pE/M8nosmzJWtpzAn7XBUNKVXkDtR 7j5nrDTKvPBiKdJkEdnf/wEWBqn/5p4n3gYtp/LrZX0LlfS3epGJN3css6ThZ28zzTjiPsMicrs DKgVk4DIWlJK4cc95q08t+L1tTD8jjW5SlQ== X-Gm-Gg: ASbGncu4DYNtBF2K7CG0v1wyij3kV1kkrQa0RFetfZDZGRen0PnAJNrJh64agCKUvNi GrKmQQXeJZoKeA+LXJJ3oyEm3pfCq0cpVKaVfsCzG3iGQA7LzGLu3o9MHLtfdyVJMYplpfoZunx mYlUiaywyUH/ss0bnH9R42OomNV/BFAekcOtB4rieBIcs9F9JosLFyedN/7m3wFLJg3DdzwM+wd NAft1b+Bv2H5MWlWgLuJtV50ITw5NNHIZ4VY/e8NeSIz0QE0JXyTNJs+jP0vA== X-Google-Smtp-Source: AGHT+IF/2Tr3Ms9pZ4aJqNhZxkTTq2zjNoqbjr6a2yDJTo6FyWVe3iQOE8JaGUMZ68Zbiqu2E4VEFreIzLpb2Sblloc= X-Received: by 2002:ac8:594d:0:b0:4ed:1bba:f935 with SMTP id d75a77b69052e-4eda4fbc576mr132441461cf.57.1762840756314; Mon, 10 Nov 2025 21:59:16 -0800 (PST) MIME-Version: 1.0 References: <3f22a8bb-29e8-40cc-97a1-309181da2c13@dunslane.net> <20250722005339.ca.nmisch@google.com> <20250725162141.6f.nmisch@google.com> <2225040.1753477169@sss.pgh.pa.us> <20250727235628.e2.nmisch@google.com> <8f2ad50b-ebb7-4adc-997e-25e0ad96ff34@dunslane.net> <2bed001a-462c-42da-9a6b-3c7884502932@dunslane.net> <20250824010811.4d.nmisch@google.com> <82eb35b8-7f07-493b-b689-0934919e1dc3@dunslane.net> In-Reply-To: From: Mahendra Singh Thalor Date: Tue, 11 Nov 2025 11:29:04 +0530 X-Gm-Features: AWmQ_bltpS95rOSMzHhJbD213S1ZX6LL4W7kV_LvmPJqxPFSVkg1KbvMFQ9F0zY Message-ID: Subject: Re: Non-text mode for pg_dumpall To: Vaibhav Dalvi Cc: pgsql-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="00000000000013807d06434b5939" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000013807d06434b5939 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Thu, 6 Nov 2025 at 11:03, Mahendra Singh Thalor wro= te: > > Thanks Vaibhav, Tushar and Andrew for the review and testing. > > On Mon, 3 Nov 2025 at 17:30, Vaibhav Dalvi > wrote: > > > > Hi Mahendra, > > > > I have a few more review comments regarding the patch: > > > > 1. Is the following change in `src/bin/pg_dump/connectdb.c` intentional= ? > > > > ``` > > --- a/src/bin/pg_dump/connectdb.c > > +++ b/src/bin/pg_dump/connectdb.c > > Yes, we need this. If there is any error, then we were trying to > disconnect the database in 2 places so we were getting a crash. I will > try to reproduce crashe without this patch and will respond. > > On Tue, 4 Nov 2025 at 18:23, tushar wrote= : > > Thanks Mahendra, I am getting a segmentation fault against v05 patch. > > > > [edb@1a1c15437e7c bin]$ ./pg_dumpall -Ft --file a.3 -v > > pg_dumpall: executing SELECT pg_catalog.set_config('search_path', '', f= alse); > > Segmentation fault > > > > Issue is coming with all output file formats -F[t/c/d] except plain > > > > regards, > > Thanks for the report. Fixed, > > On Tue, 4 Nov 2025 at 22:25, Andrew Dunstan wrote: > > Yeah, I don't think we need to dump the timestamp in non-text modes. Th= is fix worked for me: > > > > > > diff --git a/src/bin/pg_dump/pg_dumpall.c b/src/bin/pg_dump/pg_dumpall.= c > > index 601b9f9738e..f66cc26d9a2 100644 > > --- a/src/bin/pg_dump/pg_dumpall.c > > +++ b/src/bin/pg_dump/pg_dumpall.c > > @@ -638,7 +638,7 @@ main(int argc, char *argv[]) > > if (quote_all_identifiers) > > executeCommand(conn, "SET quote_all_identifiers =3D true"); > > > > - if (verbose) > > + if (verbose && archDumpFormat =3D=3D archNull) > > dumpTimestamp("Started on"); > > Thanks Andrew. Yes, we should not dump timestamp in non-text modes. > > On Wed, 5 Nov 2025 at 18:47, Vaibhav Dalvi > wrote: > > > > Hi Mahendra, > > > > Here are a few more comments following my review of the patch: > > > > ### 1\. Incorrect Comment for `-g` (globals-only) Option > > > > The comment for the `-g` case in the code states that it restores the > > `global.dat` file. However, in the non-text dump output, I only see the > > following files: `databases`, `map.dat`, and `toc.dat`. > > Fixed. > > > > > ```c > > + case 'g': > > + /* restore only global.dat file from directory */ > > + globals_only =3D true; > > + break; > > Fixed. > > > ``` > > > > Please update this comment to accurately reflect the file being restore= d > > (e.g., `toc.dat` or the global objects within the archive). > > Fixed. > > > > > ### 2\. Incorrect Order of `case` Statements in `pg_restore.c` > > > > The new `case 7` statement in `pg_restore.c` appears to be > > inserted before `case 6`, disrupting the numerical order. > > > > ```c > > + case 7: /* database patterns to skip */ > > + simple_string_list_append(&db_exclude_patterns, optarg); > > + break; > > > > case 6: > > opts->restrict_key =3D pg_strdup(optarg); > > ``` > > > > Please re-order the `case` statements so they follow ascending > > numerical order. > > Fixed. > > > > > ### 3\. Missing Example in SGML Documentation > > > > The SGML documentation for `pg_dumpall` is missing an explicit > > example demonstrating its use with non-text formats (e.g., directory fo= rmat). > > It would be beneficial to include a clear example for this new feature. > > I think we don't add such cases in doc. We already added test cases in > code. If others also feel that we should add a test case in SGML, then > I will update the doc with the test case. > > > > > ### 4\. Cosmetic Issues > > > > Please address the following minor stylistic points: > > > > Please ensure the function signatures > > adhere to standard coding style, particularly for line wrapping. > > The following lines seem to have inconsistent indentation: > > > > ```c > > static int restore_global_objects(const char *inputFileSpec, RestoreOpt= ions *opts, > > int numWorkers, bool append_data, int num, bool globals_only); > > static int restore_all_databases(const char *inputFileSpec, > > SimpleStringList db_exclude_patterns, RestoreOptions *opts, int numWork= ers); > > ``` > > > > Please fix instances where the 80-character line limit is > > crossed, such as in the example below: > > Fixed. > > > > > ```c > > n_errors =3D restore_one_database(subdirpath, opts, numWorkers, true, 1= , false); > > ``` > > > > I believe this concludes my formal review. > > > > Thanks, > > Vaibhav Dalvi > > > > On Wed, Nov 5, 2025 at 12:29=E2=80=AFPM Vaibhav Dalvi wrote: > >> > >> Hi Mahendra, > >> > >> Thank you for the fix. Please find my further review comments below. > >> > >> ### Restrict-Key Option > >> > >> The `--restrict-key` option is currently being accepted by > >> `pg_dumpall` even when non-plain formats are specified, > >> which contradicts its intended use only with the plain format. > >> > >> For example: > >> > >> ``` > >> $ ./db/bin/pg_dump --format=3Dd -f testdump_dir --restrict-key=3DRESTR= ICT_KEY > >> pg_dump: error: option --restrict-key can only be used with --format= =3Dplain > >> $ ./db/bin/pg_dumpall --format=3Dd -f testdump_dir --restrict-key=3DRE= STRICT_KEY > >> pg_dumpall: error: invalid restrict key > >> ``` > >> > >> I have attached a delta patch that addresses the issue with the > >> `--restrict-key` option. It would be beneficial to include a dedicated > >> test case for this check. > > We should dump restrict-key with all modes as we need to restore with > the "-f file" option in text mode. > Ex: pg_dumpall --format=3Dd -f testdump_dir > and restore::: pg_restore testdump_dir -d dabasename -C -f testdumpfile > (In testdumpfile, we will generate commands from archive dump) > > So I am not merging this delat patch. > > >> > >> ### Use of Dump Options Structure (dopt) > >> > >> Please ensure consistency by utilizing the main dump options > >> structure (`dopt`) instead of declaring and using individual variables > >> where the structure already provides fields. For example, the > >> `output_clean` variable seems redundant here: > >> > >> ```c > >> case 'c': > >> output_clean =3D true; > >> dopt.outputClean =3D 1; > >> break; > > output_clean is not added by this patch. I will analyse this comment > and will respond in the next update. > > >> ``` > >> > >> In my attached delta file, I have replaced the unnecessary > >> `restrict_key` variable with `dopt.restrict_key`. > > This is also not part of this patch. If you feel to add this in DOPT, > please suggest in separate thread. > > >> > >> ### Cosmetic Issues > >> > >> 1. Please review the spacing around the pointer: > >> ```c > >> + ((ArchiveHandle * )fout) ->connection =3D conn; > >> + ((ArchiveHandle * ) fout) -> public.numWorkers =3D 1; > > Fixed. > > >> ``` > >> 2. Please be consistent with the punctuation of single-line comments; > >> some end with a full stop (`.`) and others do not. > > Based on nearby code comments, I made changes. I will try to fix these > inconsistencies.. > > > >> 3. In the SGML documentation changes, some new statements start > >> with one space, and others start with two. Please adhere to a sing= le > >> standard for indentation across the patch. > > Okay. I will fix these. > > >> > >> Regards, > >> Vaibhav > >> EnterpriseDB > >> > >> On Mon, Nov 3, 2025 at 5:24=E2=80=AFPM Mahendra Singh Thalor wrote: > >>> > >>> On Mon, 3 Nov 2025 at 12:06, Vaibhav Dalvi wrote: > >>> > > >>> > Hi Mahendra, > >>> > > >>> > Thank you for your work on this feature. > >>> > I have just begun reviewing the latest patch and > >>> > encountered the following errors during the initial setup: > >>> > > >>> > ``` > >>> > $ ./db/bin/pg_restore testdump_dir -C -d postgres -F d -p 5556 > >>> > pg_restore: error: could not execute query: ERROR: syntax error at = or near "\\" > >>> > LINE 1: \restrict aO9K1gzVZTlafidF5fWx8ADGzUnIiAcguFz5qskGaFDygTCjC= j... > >>> > ^ > >>> > Command was: \restrict aO9K1gzVZTlafidF5fWx8ADGzUnIiAcguFz5qskGaFDy= gTCjCj9vg3Xxys1b3hb > >>> > > >>> > pg_restore: error: could not execute query: ERROR: syntax error at = or near "\\" > >>> > LINE 1: \unrestrict aO9K1gzVZTlafidF5fWx8ADGzUnIiAcguFz5qskGaFDygTC= j... > >>> > ^ > >>> > Command was: \unrestrict aO9K1gzVZTlafidF5fWx8ADGzUnIiAcguFz5qskGaF= DygTCjCj9vg3Xxys1b3hb > >>> > > >>> > pg_restore: error: could not execute query: ERROR: syntax error at = or near "\\" > >>> > LINE 1: \connect template1 > >>> > ^ > >>> > Command was: \connect template1 > >>> > > >>> > pg_restore: error: could not execute query: ERROR: syntax error at = or near "\\" > >>> > LINE 1: \connect postgres > >>> > ^ > >>> > Command was: \connect postgres > >>> > ``` > >>> > To cross-check tried with plain dump(with pg_dumpall) and > >>> > restored(SQL file restore) without patch and didn't get above > >>> > connection errors. > >>> > > >>> > It appears there might be an issue with the dump file itself. > >>> > Please note that this is my first observation as I have just > >>> > started the review. I will continue with my assessment. > >>> > > >>> > Regards, > >>> > Vaibhav Dalvi > >>> > EnterpriseDB > >>> > >>> Thanks Vaibhav for the review. > >>> This change was added by me in v04. Only in the case of a file, we sh= ould restore these commands. Attached patch is fixing the same. > >>> > >>> If we dump and restore the same file with the same user, then we will= get an error of ROLE CREATE as the same role is already created. I think, = either we can ignore this error, or we can keep it as a restore can be done= with different users. > >>>> > >>>> mst@localhost bin]$ ./pg_restore d1 -C -d postgres > >>>> pg_restore: error: could not execute query: ERROR: role "mst" alrea= dy exists > >>>> Command was: CREATE ROLE mst; > >>>> ALTER ROLE mst WITH SUPERUSER INHERIT CREATEROLE CREATEDB LOGIN REPL= ICATION BYPASSRLS; > >>>> > >>>> > >>>> pg_restore: warning: errors ignored on restore: 1 > >>> > >>> > >>> > >>> > > >>> > On Fri, Oct 31, 2025 at 2:51=E2=80=AFPM Mahendra Singh Thalor wrote: > >>> >> > >>> >> On Tue, 28 Oct 2025 at 11:32, Mahendra Singh Thalor wrote: > >>> >> > > >>> >> > On Thu, 16 Oct 2025 at 16:24, Mahendra Singh Thalor wrote: > >>> >> > > > >>> >> > > On Wed, 15 Oct 2025 at 23:05, Mahendra Singh Thalor wrote: > >>> >> > > > > >>> >> > > > On Sun, 24 Aug 2025 at 22:12, Andrew Dunstan wrote: > >>> >> > > > > > >>> >> > > > > > >>> >> > > > > On 2025-08-23 Sa 9:08 PM, Noah Misch wrote: > >>> >> > > > > > >>> >> > > > > On Wed, Jul 30, 2025 at 02:51:59PM -0400, Andrew Dunstan w= rote: > >>> >> > > > > > >>> >> > > > > OK, now that's reverted we should discuss how to proceed. = I had two thoughts > >>> >> > > > > - we could use invent a JSON format for the globals, or we= could just use > >>> >> > > > > the existing archive format. I think the archive format is= pretty flexible, > >>> >> > > > > and should be able to accommodate this. The downside is it= 's not humanly > >>> >> > > > > readable. The upside is that we don't need to do anything = special either to > >>> >> > > > > write it or parse it. > >>> >> > > > > > >>> >> > > > > I would first try to use the existing archiver API, becaus= e that makes it > >>> >> > > > > harder to miss bugs. Any tension between that API and pg_= dumpall is likely to > >>> >> > > > > have corresponding tension on the pg_restore side. Resolv= ing that tension > >>> >> > > > > will reveal much of the project's scope that remained hidd= en during the v18 > >>> >> > > > > attempt. Perhaps more important than that, using the arch= iver API means > >>> >> > > > > future pg_dump and pg_restore options are more likely to c= ooperate properly > >>> >> > > > > with $SUBJECT. In other words, I want it to be hard to ad= d pg_dump/pg_restore > >>> >> > > > > features that malfunction only for $SUBJECT archives. The= strength of the > >>> >> > > > > archiver architecture shows in how rarely new features nee= d format-specific > >>> >> > > > > logic and how rarely format-specific bugs get reported. W= e've had little or > >>> >> > > > > no trouble with e.g. bugs that appear in -Fd but not in -F= c. > >>> >> > > > > > >>> >> > > > > > >>> >> > > > > Yeah, that's what we're going to try. > >>> >> > > > > > >>> >> > > > > > >>> >> > > > > cheers > >>> >> > > > > > >>> >> > > > > > >>> >> > > > > andrew > >>> >> > > > > > >>> >> > > > > -- > >>> >> > > > > Andrew Dunstan > >>> >> > > > > EDB: https://www.enterprisedb.com > >>> >> > > > > >>> >> > > > Thanks Andrew, Noah and all others for feedback. > >>> >> > > > > >>> >> > > > Based on the above suggestions and discussions, I removed sq= l commands > >>> >> > > > from the global.dat file. For global commands, now we are ma= king > >>> >> > > > toc.dat/toc.dmp/toc.tar file based on format specified and b= ased on > >>> >> > > > format specified, we are making archive entries for these gl= obal > >>> >> > > > commands. By this approach, we removed the hard-coded parsin= g part of > >>> >> > > > the global.dat file and we are able to skip DROP DATABASE wi= th the > >>> >> > > > globals-only option. > >>> >> > > > > >>> >> > > > Here, I am attaching a patch for review, testing and feedbac= k. This is > >>> >> > > > a WIP patch. I will do some more code cleanup and will add s= ome more > >>> >> > > > comments also. Please review this and let me know design lev= el > >>> >> > > > feedback. Thanks Tushar Ahuja for some internal testing and = feedback. > >>> >> > > > > >>> >> > > > >>> >> > > Hi, > >>> >> > > Here, I am attaching an updated patch. In offline discussion, = Andrew > >>> >> > > reported some test-case failures(Thanks Andrew). I fixed those= . > >>> >> > > Please let me know feedback for the patch. > >>> >> > > > >>> >> > > >>> >> > Hi, > >>> >> > Here I am attaching a re-based patch as v02 was failing on head. > >>> >> > Thanks Tushar for the testing. > >>> >> > Please review this and let me know feedback. > >>> >> > > >>> >> > >>> >> Hi all, > >>> >> Here I am attaching an updated patch for review and testing. Based= on > >>> >> some offline comments by Andrew, I did some code cleanup. > >>> >> Please consider this patch for feedback. > >>> >> > >>> >> -- > >>> >> Thanks and Regards > >>> >> Mahendra Singh Thalor > >>> >> EnterpriseDB: http://www.enterprisedb.com > >>> > >>> > >>> > >>> -- > >>> Thanks and Regards > >>> Mahendra Singh Thalor > >>> EnterpriseDB: http://www.enterprisedb.com > > Here, I am attaching an updated patch for the review and testing. > > -- > Thanks and Regards > Mahendra Singh Thalor > EnterpriseDB: http://www.enterprisedb.com Hi, Here, I am attaching an updated patch for the review and testing. FIX: as suggested by Vaibhav, added error for --restrict-key option with non-text format. --=20 Thanks and Regards Mahendra Singh Thalor EnterpriseDB: http://www.enterprisedb.com --00000000000013807d06434b5939 Content-Type: application/octet-stream; name="v07_11112025-Non-text-modes-for-pg_dumpall-correspondingly-change.patch" Content-Disposition: attachment; filename="v07_11112025-Non-text-modes-for-pg_dumpall-correspondingly-change.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mhu5uns70 RnJvbSBjZWYwMjJjZWU4NTZlNzFhNGE0YTA3OGZmMzYxMGVlYzkwZTFkODA1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUaGFsb3JNYWhlbmRyYSA8bWFoaTZydW5AZ21haWwuY29tPgpE YXRlOiBUdWUsIDExIE5vdiAyMDI1IDExOjI1OjM0ICswNTMwClN1YmplY3Q6IFtQQVRDSF0gTm9u IHRleHQgbW9kZXMgZm9yIHBnX2R1bXBhbGwsIGNvcnJlc3BvbmRpbmdseSBjaGFuZ2UgCiBwZ19y ZXN0b3JlCgogICAgcGdfZHVtcGFsbCBhY3F1aXJlcyBhIG5ldyAtRi8tLWZvcm1hdCBvcHRpb24s IHdpdGggdGhlIHNhbWUgbWVhbmluZ3MgYXMKICAgIHBnX2R1bXAuIFRoZSBkZWZhdWx0IGlzIHAs IG1lYW5pbmcgcGxhaW4gdGV4dC4gRm9yIGFueSBvdGhlciB2YWx1ZSwgYQogICAgZGlyZWN0b3J5 IGlzIGNyZWF0ZWQgY29udGFpbmluZyB0d28gZmlsZXMsIHRvYy5kYXQvLmRtcC8udGFyIGFuZCBt YXAuZGF0LiBUaGUKICAgIGZpcnN0IGNvbnRhaW5zIGNvbW1hbmRzIHJlc3RvcmluZyB0aGUgZ2xv YmFsIGRhdGEgYmFzZWQgb24gLUYsIGFuZCB0aGUgc2Vjb25kCiAgICBjb250YWlucyBhIG1hcCBm cm9tIG9pZHMgdG8gZGF0YWJhc2UgbmFtZXMuIEl0IHdpbGwgYWxzbyBjb250YWluIGEKICAgIHN1 YmRpcmVjdG9yeSBjYWxsZWQgZGF0YWJhc2VzLCBpbnNpZGUgd2hpY2ggaXQgd2lsbCBjcmVhdGUg YXJjaGl2ZXMgaW4KICAgIHRoZSBzcGVjaWZpZWQgZm9ybWF0LCBuYW1lZCB1c2luZyB0aGUgZGF0 YWJhc2Ugb2lkcy4KCiAgICBJbiB0aGVzZSBjYXNlc3MgdGhlIC1mIGFyZ3VtZW50IGlzIHJlcXVp cmVkLgoKICAgIElmIHBnX3Jlc3RvcmUgZW5jb3VudGVycyBhIGRpcmVjdG9yeSBjb250YWluaW5n IG1hcC5kYXQsCiAgICBpdCByZXN0b3JlcyB0aGUgZ2xvYmFsIHNldHRpbmdzIGZyb20gdG9jLmRh dC8uZG1wLy50YXIgaWYgZXhpc3QsIGFuZCB0aGVuCiAgICByZXN0b3JlcyBlYWNoIGRhdGFiYXNl LgoKICAgIHBnX3Jlc3RvcmUgYWNxdWlyZXMgdHdvIG5ldyBvcHRpb25zOiAtZy8tLWdsb2JhbHMt b25seSB3aGljaCBzdXBwcmVzc2VzCiAgICByZXN0b3JhdGlvbiBvZiBhbnkgZGF0YWJhc2VzLCBh bmQgLS1leGNsdWRlLWRhdGFiYXNlIHdoaWNoIGluaGliaXRzCiAgICByZXN0b3JhdGlvbiBvZiBw YXJ0aWN1YWxyIGRhdGFiYXNlKHMpIGluIHRoZSBzYW1lIHdheSB0aGUgc2FtZSBvcHRpb24KICAg IHdvcmtzIGluIHBnX2R1bXBhbGwuCgp2MDcKLS0tCiBkb2Mvc3JjL3NnbWwvcmVmL3BnX2R1bXBh bGwuc2dtbCAgICAgfCAgODkgKysrLQogZG9jL3NyYy9zZ21sL3JlZi9wZ19yZXN0b3JlLnNnbWwg ICAgIHwgIDY2ICsrLQogc3JjL2Jpbi9wZ19kdW1wL2Nvbm5lY3RkYi5jICAgICAgICAgIHwgICAx IC0KIHNyYy9iaW4vcGdfZHVtcC9tZXNvbi5idWlsZCAgICAgICAgICB8ICAgMSArCiBzcmMvYmlu L3BnX2R1bXAvcGFyYWxsZWwuYyAgICAgICAgICAgfCAgMTAgKwogc3JjL2Jpbi9wZ19kdW1wL3Bn X2JhY2t1cC5oICAgICAgICAgIHwgICAyICstCiBzcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2Fy Y2hpdmVyLmMgfCAgMzEgKy0KIHNyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuaCB8 ICAgMSArCiBzcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX3Rhci5jICAgICAgfCAgIDIgKy0KIHNy Yy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMgICAgICAgICAgICB8ICAgMiArLQogc3JjL2Jpbi9wZ19k dW1wL3BnX2R1bXBhbGwuYyAgICAgICAgIHwgNjA3ICsrKysrKysrKysrKysrKysrKysrKystLS0t LQogc3JjL2Jpbi9wZ19kdW1wL3BnX3Jlc3RvcmUuYyAgICAgICAgIHwgNTk1ICsrKysrKysrKysr KysrKysrKysrKysrKystCiBzcmMvYmluL3BnX2R1bXAvdC8wMDFfYmFzaWMucGwgICAgICAgfCAg MTUgKwogc3JjL2Jpbi9wZ19kdW1wL3QvMDA3X3BnX2R1bXBhbGwucGwgIHwgMzk2ICsrKysrKysr KysrKysrKysrCiAxNCBmaWxlcyBjaGFuZ2VkLCAxNjcxIGluc2VydGlvbnMoKyksIDE0NyBkZWxl dGlvbnMoLSkKIG1vZGUgY2hhbmdlIDEwMDY0NCA9PiAxMDA3NTUgc3JjL2Jpbi9wZ19kdW1wL3Qv MDAxX2Jhc2ljLnBsCiBjcmVhdGUgbW9kZSAxMDA3NTUgc3JjL2Jpbi9wZ19kdW1wL3QvMDA3X3Bn X2R1bXBhbGwucGwKCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvcmVmL3BnX2R1bXBhbGwuc2dt bCBiL2RvYy9zcmMvc2dtbC9yZWYvcGdfZHVtcGFsbC5zZ21sCmluZGV4IDlmNjM5ZjYxZGIwLi40 MDYzZTg4ZDM4OCAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3JlZi9wZ19kdW1wYWxsLnNnbWwK KysrIGIvZG9jL3NyYy9zZ21sL3JlZi9wZ19kdW1wYWxsLnNnbWwKQEAgLTE2LDcgKzE2LDEwIEBA IFBvc3RncmVTUUwgZG9jdW1lbnRhdGlvbgogCiAgPHJlZm5hbWVkaXY+CiAgIDxyZWZuYW1lPnBn X2R1bXBhbGw8L3JlZm5hbWU+Ci0gIDxyZWZwdXJwb3NlPmV4dHJhY3QgYSA8cHJvZHVjdG5hbWU+ UG9zdGdyZVNRTDwvcHJvZHVjdG5hbWU+IGRhdGFiYXNlIGNsdXN0ZXIgaW50byBhIHNjcmlwdCBm aWxlPC9yZWZwdXJwb3NlPgorCisgIDxyZWZwdXJwb3NlPgorICAgZXhwb3J0IGEgPHByb2R1Y3Ru YW1lPlBvc3RncmVTUUw8L3Byb2R1Y3RuYW1lPiBkYXRhYmFzZSBjbHVzdGVyIGFzIGFuIFNRTCBz Y3JpcHQgb3IgdG8gb3RoZXIgZm9ybWF0cworICA8L3JlZnB1cnBvc2U+CiAgPC9yZWZuYW1lZGl2 PgogCiAgPHJlZnN5bm9wc2lzZGl2PgpAQCAtMzMsNyArMzYsNyBAQCBQb3N0Z3JlU1FMIGRvY3Vt ZW50YXRpb24KICAgPHBhcmE+CiAgICA8YXBwbGljYXRpb24+cGdfZHVtcGFsbDwvYXBwbGljYXRp b24+IGlzIGEgdXRpbGl0eSBmb3Igd3JpdGluZyBvdXQKICAgICg8cXVvdGU+ZHVtcGluZzwvcXVv dGU+KSBhbGwgPHByb2R1Y3RuYW1lPlBvc3RncmVTUUw8L3Byb2R1Y3RuYW1lPiBkYXRhYmFzZXMK LSAgIG9mIGEgY2x1c3RlciBpbnRvIG9uZSBzY3JpcHQgZmlsZS4gIFRoZSBzY3JpcHQgZmlsZSBj b250YWlucworICAgb2YgYSBjbHVzdGVyIGludG8gYW4gU1FMIHNjcmlwdCBmaWxlIG9yIGFuIGFy Y2hpdmUuICBUaGUgb3V0cHV0IGNvbnRhaW5zCiAgICA8YWNyb255bT5TUUw8L2Fjcm9ueW0+IGNv bW1hbmRzIHRoYXQgY2FuIGJlIHVzZWQgYXMgaW5wdXQgdG8gPHhyZWYKICAgIGxpbmtlbmQ9ImFw cC1wc3FsIi8+IHRvIHJlc3RvcmUgdGhlIGRhdGFiYXNlcy4gIEl0IGRvZXMgdGhpcyBieQogICAg Y2FsbGluZyA8eHJlZiBsaW5rZW5kPSJhcHAtcGdkdW1wIi8+IGZvciBlYWNoIGRhdGFiYXNlIGlu IHRoZSBjbHVzdGVyLgpAQCAtNTIsMTEgKzU1LDE2IEBAIFBvc3RncmVTUUwgZG9jdW1lbnRhdGlv bgogICA8L3BhcmE+CiAKICAgPHBhcmE+Ci0gICBUaGUgU1FMIHNjcmlwdCB3aWxsIGJlIHdyaXR0 ZW4gdG8gdGhlIHN0YW5kYXJkIG91dHB1dC4gIFVzZSB0aGUKKyAgIFBsYWluIHRleHQgU1FMIHNj cmlwdHMgd2lsbCBiZSB3cml0dGVuIHRvIHRoZSBzdGFuZGFyZCBvdXRwdXQuICBVc2UgdGhlCiAg ICA8b3B0aW9uPi1mPC9vcHRpb24+LzxvcHRpb24+LS1maWxlPC9vcHRpb24+IG9wdGlvbiBvciBz aGVsbCBvcGVyYXRvcnMgdG8KICAgIHJlZGlyZWN0IGl0IGludG8gYSBmaWxlLgogICA8L3BhcmE+ CiAKKyAgPHBhcmE+CisgICBBcmNoaXZlcyBpbiBvdGhlciBmb3JtYXRzIHdpbGwgYmUgcGxhY2Vk IGluIGEgZGlyZWN0b3J5IG5hbWVkIHVzaW5nIHRoZQorICAgPG9wdGlvbj4tZjwvb3B0aW9uPi88 b3B0aW9uPi0tZmlsZTwvb3B0aW9uPiwgd2hpY2ggaXMgcmVxdWlyZWQgaW4gdGhpcyBjYXNlLgor ICA8L3BhcmE+CisKICAgPHBhcmE+CiAgIDxhcHBsaWNhdGlvbj5wZ19kdW1wYWxsPC9hcHBsaWNh dGlvbj4gbmVlZHMgdG8gY29ubmVjdCBzZXZlcmFsCiAgIHRpbWVzIHRvIHRoZSA8cHJvZHVjdG5h bWU+UG9zdGdyZVNRTDwvcHJvZHVjdG5hbWU+IHNlcnZlciAob25jZSBwZXIKQEAgLTEzMSwxMCAr MTM5LDg1IEBAIFBvc3RncmVTUUwgZG9jdW1lbnRhdGlvbgogICAgICAgIDxwYXJhPgogICAgICAg ICBTZW5kIG91dHB1dCB0byB0aGUgc3BlY2lmaWVkIGZpbGUuICBJZiB0aGlzIGlzIG9taXR0ZWQs IHRoZQogICAgICAgICBzdGFuZGFyZCBvdXRwdXQgaXMgdXNlZC4KKyAgICAgICAgTm90ZTogVGhp cyBvcHRpb24gY2FuIG9ubHkgYmUgb21pdHRlZCB3aGVuIDxvcHRpb24+LS1mb3JtYXQ8L29wdGlv bj4gaXMgcGxhaW4KICAgICAgICA8L3BhcmE+CiAgICAgICA8L2xpc3RpdGVtPgogICAgICA8L3Zh cmxpc3RlbnRyeT4KIAorICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgPHRlcm0+PG9wdGlvbj4t RiA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+Zm9ybWF0PC9yZXBsYWNlYWJsZT48L29w dGlvbj48L3Rlcm0+CisgICAgICA8dGVybT48b3B0aW9uPi0tZm9ybWF0PTxyZXBsYWNlYWJsZSBj bGFzcz0icGFyYW1ldGVyIj5mb3JtYXQ8L3JlcGxhY2VhYmxlPjwvb3B0aW9uPjwvdGVybT4KKyAg ICAgIDxsaXN0aXRlbT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgU3BlY2lmeSB0aGUgZm9ybWF0 IG9mIGR1bXAgZmlsZXMuICBJbiBwbGFpbiBmb3JtYXQsIGFsbCB0aGUgZHVtcCBkYXRhIGlzCisg ICAgICAgIHNlbnQgaW4gYSBzaW5nbGUgdGV4dCBzdHJlYW0uIFRoaXMgaXMgdGhlIGRlZmF1bHQu CisKKyAgICAgICAgSW4gYWxsIG90aGVyIG1vZGVzLCA8YXBwbGljYXRpb24+cGdfZHVtcGFsbDwv YXBwbGljYXRpb24+IGZpcnN0IGNyZWF0ZXMgdHdvIGZpbGVzOgorICAgICAgICA8ZmlsZW5hbWU+ dG9jLmRhdC90b2MuZG1wL3RvYy50YXI8L2ZpbGVuYW1lPiBhbmQgPGZpbGVuYW1lPm1hcC5kYXQ8 L2ZpbGVuYW1lPiwgaW4gdGhlIGRpcmVjdG9yeQorICAgICAgICBzcGVjaWZpZWQgYnkgPG9wdGlv bj4tLWZpbGU8L29wdGlvbj4uCisgICAgICAgIFRoZSBmaXJzdCBmaWxlIGNvbnRhaW5zIGdsb2Jh bCBkYXRhLCBzdWNoIGFzIHJvbGVzIGFuZCB0YWJsZXNwYWNlcy4gVGhlIHNlY29uZAorICAgICAg ICBjb250YWlucyBhIG1hcHBpbmcgYmV0d2VlbiBkYXRhYmFzZSBvaWRzIGFuZCBuYW1lcy4gVGhl c2UgZmlsZXMgYXJlIHVzZWQgYnkKKyAgICAgICAgPGFwcGxpY2F0aW9uPnBnX3Jlc3RvcmU8L2Fw cGxpY2F0aW9uPi4gRGF0YSBmb3IgaW5kaXZpZHVhbCBkYXRhYmFzZXMgaXMgcGxhY2VkIGluCisg ICAgICAgIDxmaWxlbmFtZT5kYXRhYmFzZXM8L2ZpbGVuYW1lPiBzdWJkaXJlY3RvcnksIG5hbWVk IHVzaW5nIHRoZSBkYXRhYmFzZSdzIDx0eXBlPm9pZDwvdHlwZT4uCisKKyAgICAgICA8dmFyaWFi bGVsaXN0PgorICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgPHRlcm0+PGxpdGVyYWw+ ZDwvbGl0ZXJhbD48L3Rlcm0+CisgICAgICAgICA8dGVybT48bGl0ZXJhbD5kaXJlY3Rvcnk8L2xp dGVyYWw+PC90ZXJtPgorICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgIDxwYXJhPgorICAg ICAgICAgICBPdXRwdXQgZGlyZWN0b3J5LWZvcm1hdCBhcmNoaXZlcyBmb3IgZWFjaCBkYXRhYmFz ZSwKKyAgICAgICAgICAgc3VpdGFibGUgZm9yIGlucHV0IGludG8gcGdfcmVzdG9yZS4gVGhlIGRp cmVjdG9yeQorICAgICAgICAgICB3aWxsIGhhdmUgZGF0YWJhc2UgPHR5cGU+b2lkPC90eXBlPiBh cyBpdHMgbmFtZS4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgICA8L2xpc3RpdGVtPgorICAg ICAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAg PHRlcm0+PGxpdGVyYWw+cDwvbGl0ZXJhbD48L3Rlcm0+CisgICAgICAgICA8dGVybT48bGl0ZXJh bD5wbGFpbjwvbGl0ZXJhbD48L3Rlcm0+CisgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAg PHBhcmE+CisgICAgICAgICAgIE91dHB1dCBhIHBsYWluLXRleHQgU1FMIHNjcmlwdCBmaWxlICh0 aGUgZGVmYXVsdCkuCisgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgPC9saXN0aXRlbT4KKyAg ICAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAg IDx0ZXJtPjxsaXRlcmFsPmM8L2xpdGVyYWw+PC90ZXJtPgorICAgICAgICAgPHRlcm0+PGxpdGVy YWw+Y3VzdG9tPC9saXRlcmFsPjwvdGVybT4KKyAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAg ICA8cGFyYT4KKyAgICAgICAgICAgT3V0cHV0IGEgY3VzdG9tLWZvcm1hdCBhcmNoaXZlIGZvciBl YWNoIGRhdGFiYXNlLAorICAgICAgICAgICBzdWl0YWJsZSBmb3IgaW5wdXQgaW50byBwZ19yZXN0 b3JlLiBUaGUgYXJjaGl2ZQorICAgICAgICAgICB3aWxsIGJlIG5hbWVkIDxmaWxlbmFtZT5kYm9p ZC5kbXA8L2ZpbGVuYW1lPiB3aGVyZSA8dHlwZT5kYm9pZDwvdHlwZT4gaXMgdGhlCisgICAgICAg ICAgIDx0eXBlPm9pZDwvdHlwZT4gb2YgdGhlIGRhdGFiYXNlLgorICAgICAgICAgIDwvcGFyYT4K KyAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvdmFybGlzdGVudHJ5PgorCisgICAgICAg ICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgPHRlcm0+PGxpdGVyYWw+dDwvbGl0ZXJhbD48L3Rl cm0+CisgICAgICAgICA8dGVybT48bGl0ZXJhbD50YXI8L2xpdGVyYWw+PC90ZXJtPgorICAgICAg ICAgPGxpc3RpdGVtPgorICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICBPdXRwdXQgYSB0YXIt Zm9ybWF0IGFyY2hpdmUgZm9yIGVhY2ggZGF0YWJhc2UsCisgICAgICAgICAgIHN1aXRhYmxlIGZv ciBpbnB1dCBpbnRvIHBnX3Jlc3RvcmUuIFRoZSBhcmNoaXZlCisgICAgICAgICAgIHdpbGwgYmUg bmFtZWQgPGZpbGVuYW1lPmRib2lkLnRhcjwvZmlsZW5hbWU+IHdoZXJlIDx0eXBlPmRib2lkPC90 eXBlPiBpcyB0aGUKKyAgICAgICAgICAgPHR5cGU+b2lkPC90eXBlPiBvZiB0aGUgZGF0YWJhc2Uu CisgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC92YXJs aXN0ZW50cnk+CisKKyAgICAgICAgPC92YXJpYWJsZWxpc3Q+CisKKyAgICAgICBOb3RlOiBzZWUg PHhyZWYgbGlua2VuZD0iYXBwLXBnZHVtcCIvPiBmb3IgZGV0YWlscworICAgICAgIG9mIGhvdyB0 aGUgdmFyaW91cyBub24gcGxhaW4gdGV4dCBhcmNoaXZlcyB3b3JrLgorCisgICAgICAgIDwvcGFy YT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgIDwvdmFybGlzdGVudHJ5PgorCiAgICAgIDx2YXJs aXN0ZW50cnk+CiAgICAgICA8dGVybT48b3B0aW9uPi1nPC9vcHRpb24+PC90ZXJtPgogICAgICAg PHRlcm0+PG9wdGlvbj4tLWdsb2JhbHMtb25seTwvb3B0aW9uPjwvdGVybT4KZGlmZiAtLWdpdCBh L2RvYy9zcmMvc2dtbC9yZWYvcGdfcmVzdG9yZS5zZ21sIGIvZG9jL3NyYy9zZ21sL3JlZi9wZ19y ZXN0b3JlLnNnbWwKaW5kZXggYTQ2OGEzODM2MWEuLjc0OTdiNTI3YWU2IDEwMDY0NAotLS0gYS9k b2Mvc3JjL3NnbWwvcmVmL3BnX3Jlc3RvcmUuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvcmVmL3Bn X3Jlc3RvcmUuc2dtbApAQCAtMTgsOCArMTgsOSBAQCBQb3N0Z3JlU1FMIGRvY3VtZW50YXRpb24K ICAgPHJlZm5hbWU+cGdfcmVzdG9yZTwvcmVmbmFtZT4KIAogICA8cmVmcHVycG9zZT4KLSAgIHJl c3RvcmUgYSA8cHJvZHVjdG5hbWU+UG9zdGdyZVNRTDwvcHJvZHVjdG5hbWU+IGRhdGFiYXNlIGZy b20gYW4KLSAgIGFyY2hpdmUgZmlsZSBjcmVhdGVkIGJ5IDxhcHBsaWNhdGlvbj5wZ19kdW1wPC9h cHBsaWNhdGlvbj4KKyAgIHJlc3RvcmUgPHByb2R1Y3RuYW1lPlBvc3RncmVTUUw8L3Byb2R1Y3Ru YW1lPiBkYXRhYmFzZXMgZnJvbSBhcmNoaXZlcworICAgY3JlYXRlZCBieSA8YXBwbGljYXRpb24+ cGdfZHVtcDwvYXBwbGljYXRpb24+IG9yCisgICA8YXBwbGljYXRpb24+cGdfZHVtcGFsbDwvYXBw bGljYXRpb24+CiAgIDwvcmVmcHVycG9zZT4KICA8L3JlZm5hbWVkaXY+CiAKQEAgLTM4LDEzICsz OSwxNCBAQCBQb3N0Z3JlU1FMIGRvY3VtZW50YXRpb24KIAogICA8cGFyYT4KICAgIDxhcHBsaWNh dGlvbj5wZ19yZXN0b3JlPC9hcHBsaWNhdGlvbj4gaXMgYSB1dGlsaXR5IGZvciByZXN0b3Jpbmcg YQotICAgPHByb2R1Y3RuYW1lPlBvc3RncmVTUUw8L3Byb2R1Y3RuYW1lPiBkYXRhYmFzZSBmcm9t IGFuIGFyY2hpdmUKLSAgIGNyZWF0ZWQgYnkgPHhyZWYgbGlua2VuZD0iYXBwLXBnZHVtcCIvPiBp biBvbmUgb2YgdGhlIG5vbi1wbGFpbi10ZXh0CisgICA8cHJvZHVjdG5hbWU+UG9zdGdyZVNRTDwv cHJvZHVjdG5hbWU+IGRhdGFiYXNlIG9yIGNsdXN0ZXIgZnJvbSBhbiBhcmNoaXZlCisgICBjcmVh dGVkIGJ5IDx4cmVmIGxpbmtlbmQ9ImFwcC1wZ2R1bXAiLz4gb3IKKyAgIDx4cmVmIGxpbmtlbmQ9 ImFwcC1wZy1kdW1wYWxsIi8+IGluIG9uZSBvZiB0aGUgbm9uLXBsYWluLXRleHQKICAgIGZvcm1h dHMuICBJdCB3aWxsIGlzc3VlIHRoZSBjb21tYW5kcyBuZWNlc3NhcnkgdG8gcmVjb25zdHJ1Y3Qg dGhlCi0gICBkYXRhYmFzZSB0byB0aGUgc3RhdGUgaXQgd2FzIGluIGF0IHRoZSB0aW1lIGl0IHdh cyBzYXZlZC4gIFRoZQotICAgYXJjaGl2ZSBmaWxlcyBhbHNvIGFsbG93IDxhcHBsaWNhdGlvbj5w Z19yZXN0b3JlPC9hcHBsaWNhdGlvbj4gdG8KKyAgIGRhdGFiYXNlIG9yIGNsdXN0ZXIgdG8gdGhl IHN0YXRlIGl0IHdhcyBpbiBhdCB0aGUgdGltZSBpdCB3YXMgc2F2ZWQuIFRoZQorICAgYXJjaGl2 ZXMgYWxzbyBhbGxvdyA8YXBwbGljYXRpb24+cGdfcmVzdG9yZTwvYXBwbGljYXRpb24+IHRvCiAg ICBiZSBzZWxlY3RpdmUgYWJvdXQgd2hhdCBpcyByZXN0b3JlZCwgb3IgZXZlbiB0byByZW9yZGVy IHRoZSBpdGVtcwotICAgcHJpb3IgdG8gYmVpbmcgcmVzdG9yZWQuIFRoZSBhcmNoaXZlIGZpbGVz IGFyZSBkZXNpZ25lZCB0byBiZQorICAgcHJpb3IgdG8gYmVpbmcgcmVzdG9yZWQuIFRoZSBhcmNo aXZlIGZvcm1hdHMgYXJlIGRlc2lnbmVkIHRvIGJlCiAgICBwb3J0YWJsZSBhY3Jvc3MgYXJjaGl0 ZWN0dXJlcy4KICAgPC9wYXJhPgogCkBAIC01MiwxMCArNTQsMTcgQEAgUG9zdGdyZVNRTCBkb2N1 bWVudGF0aW9uCiAgICA8YXBwbGljYXRpb24+cGdfcmVzdG9yZTwvYXBwbGljYXRpb24+IGNhbiBv cGVyYXRlIGluIHR3byBtb2Rlcy4KICAgIElmIGEgZGF0YWJhc2UgbmFtZSBpcyBzcGVjaWZpZWQs IDxhcHBsaWNhdGlvbj5wZ19yZXN0b3JlPC9hcHBsaWNhdGlvbj4KICAgIGNvbm5lY3RzIHRvIHRo YXQgZGF0YWJhc2UgYW5kIHJlc3RvcmVzIGFyY2hpdmUgY29udGVudHMgZGlyZWN0bHkgaW50bwot ICAgdGhlIGRhdGFiYXNlLiAgT3RoZXJ3aXNlLCBhIHNjcmlwdCBjb250YWluaW5nIHRoZSBTUUwK LSAgIGNvbW1hbmRzIG5lY2Vzc2FyeSB0byByZWJ1aWxkIHRoZSBkYXRhYmFzZSBpcyBjcmVhdGVk IGFuZCB3cml0dGVuCisgICB0aGUgZGF0YWJhc2UuCisgICBXaGVuIHJlc3RvcmluZyBmcm9tIGEg ZHVtcCBtYWRlIGJ5IDxhcHBsaWNhdGlvbj5wZ19kdW1wYWxsPC9hcHBsaWNhdGlvbj4sCisgICBl YWNoIGRhdGFiYXNlIHdpbGwgYmUgY3JlYXRlZCBhbmQgdGhlbiB0aGUgcmVzdG9yYXRpb24gd2ls bCBiZSBydW4gaW4gdGhhdAorICAgZGF0YWJhc2UuCisKKyAgIE90aGVyd2lzZSwgd2hlbiBhIGRh dGFiYXNlIG5hbWUgaXMgbm90IHNwZWNpZmllZCwgYSBzY3JpcHQgY29udGFpbmluZyB0aGUgU1FM CisgICBjb21tYW5kcyBuZWNlc3NhcnkgdG8gcmVidWlsZCB0aGUgZGF0YWJhc2Ugb3IgY2x1c3Rl ciBpcyBjcmVhdGVkIGFuZCB3cml0dGVuCiAgICB0byBhIGZpbGUgb3Igc3RhbmRhcmQgb3V0cHV0 LiAgVGhpcyBzY3JpcHQgb3V0cHV0IGlzIGVxdWl2YWxlbnQgdG8KLSAgIHRoZSBwbGFpbiB0ZXh0 IG91dHB1dCBmb3JtYXQgb2YgPGFwcGxpY2F0aW9uPnBnX2R1bXA8L2FwcGxpY2F0aW9uPi4KKyAg IHRoZSBwbGFpbiB0ZXh0IG91dHB1dCBmb3JtYXQgb2YgPGFwcGxpY2F0aW9uPnBnX2R1bXA8L2Fw cGxpY2F0aW9uPiBvcgorICAgPGFwcGxpY2F0aW9uPnBnX2R1bXBhbGw8L2FwcGxpY2F0aW9uPi4K KwogICAgU29tZSBvZiB0aGUgb3B0aW9ucyBjb250cm9sbGluZyB0aGUgb3V0cHV0IGFyZSB0aGVy ZWZvcmUgYW5hbG9nb3VzIHRvCiAgICA8YXBwbGljYXRpb24+cGdfZHVtcDwvYXBwbGljYXRpb24+ IG9wdGlvbnMuCiAgIDwvcGFyYT4KQEAgLTE1Miw2ICsxNjEsOCBAQCBQb3N0Z3JlU1FMIGRvY3Vt ZW50YXRpb24KICAgICAgICAgY29tbWFuZHMgdGhhdCBtZW50aW9uIHRoaXMgZGF0YWJhc2UuCiAg ICAgICAgIEFjY2VzcyBwcml2aWxlZ2VzIGZvciB0aGUgZGF0YWJhc2UgaXRzZWxmIGFyZSBhbHNv IHJlc3RvcmVkLAogICAgICAgICB1bmxlc3MgPG9wdGlvbj4tLW5vLWFjbDwvb3B0aW9uPiBpcyBz cGVjaWZpZWQuCisgICAgICAgIDxvcHRpb24+LS1jcmVhdGU8L29wdGlvbj4gaXMgcmVxdWlyZWQg d2hlbiByZXN0b3JpbmcgbXVsdGlwbGUgZGF0YWJhc2VzCisgICAgICAgIGZyb20gYW4gYXJjaGl2 ZSBjcmVhdGVkIGJ5IDxhcHBsaWNhdGlvbj5wZ19kdW1wYWxsPC9hcHBsaWNhdGlvbj4uCiAgICAg ICAgPC9wYXJhPgogCiAgICAgICAgPHBhcmE+CkBAIC0yNDcsNiArMjU4LDE5IEBAIFBvc3RncmVT UUwgZG9jdW1lbnRhdGlvbgogICAgICAgPC9saXN0aXRlbT4KICAgICAgPC92YXJsaXN0ZW50cnk+ CiAKKyAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgIDx0ZXJtPjxvcHRpb24+LWc8L29wdGlvbj48 L3Rlcm0+CisgICAgICA8dGVybT48b3B0aW9uPi0tZ2xvYmFscy1vbmx5PC9vcHRpb24+PC90ZXJt PgorICAgICAgPGxpc3RpdGVtPgorICAgICAgIDxwYXJhPgorICAgICAgICBSZXN0b3JlIG9ubHkg Z2xvYmFsIG9iamVjdHMgKHJvbGVzIGFuZCB0YWJsZXNwYWNlcyksIG5vIGRhdGFiYXNlcy4KKyAg ICAgICA8L3BhcmE+CisgICAgICAgPHBhcmE+CisgICAgICAgIFRoaXMgb3B0aW9uIGlzIG9ubHkg cmVsZXZhbnQgd2hlbiByZXN0b3JpbmcgZnJvbSBhbiBhcmNoaXZlIG1hZGUgdXNpbmcgPGFwcGxp Y2F0aW9uPnBnX2R1bXBhbGw8L2FwcGxpY2F0aW9uPi4KKyAgICAgICA8L3BhcmE+CisgICAgICA8 L2xpc3RpdGVtPgorICAgICA8L3Zhcmxpc3RlbnRyeT4KKwogICAgICA8dmFybGlzdGVudHJ5Pgog ICAgICAgPHRlcm0+PG9wdGlvbj4tSSA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+aW5k ZXg8L3JlcGxhY2VhYmxlPjwvb3B0aW9uPjwvdGVybT4KICAgICAgIDx0ZXJtPjxvcHRpb24+LS1p bmRleD08cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+aW5kZXg8L3JlcGxhY2VhYmxlPjwv b3B0aW9uPjwvdGVybT4KQEAgLTU5MSw2ICs2MTUsMjggQEAgUG9zdGdyZVNRTCBkb2N1bWVudGF0 aW9uCiAgICAgICA8L2xpc3RpdGVtPgogICAgICA8L3Zhcmxpc3RlbnRyeT4KIAorICAgICA8dmFy bGlzdGVudHJ5PgorICAgICAgPHRlcm0+PG9wdGlvbj4tLWV4Y2x1ZGUtZGF0YWJhc2U9PHJlcGxh Y2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnBhdHRlcm48L3JlcGxhY2VhYmxlPjwvb3B0aW9uPjwv dGVybT4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgRG8gbm90IHJl c3RvcmUgZGF0YWJhc2VzIHdob3NlIG5hbWUgbWF0Y2hlcworICAgICAgICA8cmVwbGFjZWFibGUg Y2xhc3M9InBhcmFtZXRlciI+cGF0dGVybjwvcmVwbGFjZWFibGU+LgorICAgICAgICBNdWx0aXBs ZSBwYXR0ZXJucyBjYW4gYmUgZXhjbHVkZWQgYnkgd3JpdGluZyBtdWx0aXBsZQorICAgICAgICA8 b3B0aW9uPi0tZXhjbHVkZS1kYXRhYmFzZTwvb3B0aW9uPiBzd2l0Y2hlcy4gIFRoZQorICAgICAg ICA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+cGF0dGVybjwvcmVwbGFjZWFibGU+IHBh cmFtZXRlciBpcworICAgICAgICBpbnRlcnByZXRlZCBhcyBhIHBhdHRlcm4gYWNjb3JkaW5nIHRv IHRoZSBzYW1lIHJ1bGVzIHVzZWQgYnkKKyAgICAgICAgPGFwcGxpY2F0aW9uPnBzcWw8L2FwcGxp Y2F0aW9uPidzIDxsaXRlcmFsPlxkPC9saXRlcmFsPgorICAgICAgICBjb21tYW5kcyAoc2VlIDx4 cmVmIGxpbmtlbmQ9ImFwcC1wc3FsLXBhdHRlcm5zIi8+KSwKKyAgICAgICAgc28gbXVsdGlwbGUg ZGF0YWJhc2VzIGNhbiBhbHNvIGJlIGV4Y2x1ZGVkIGJ5IHdyaXRpbmcgd2lsZGNhcmQKKyAgICAg ICAgY2hhcmFjdGVycyBpbiB0aGUgcGF0dGVybi4gIFdoZW4gdXNpbmcgd2lsZGNhcmRzLCBiZSBj YXJlZnVsIHRvCisgICAgICAgIHF1b3RlIHRoZSBwYXR0ZXJuIGlmIG5lZWRlZCB0byBwcmV2ZW50 IHNoZWxsIHdpbGRjYXJkIGV4cGFuc2lvbi4KKyAgICAgICA8L3BhcmE+CisgICAgICAgPHBhcmE+ CisgICAgICAgIFRoaXMgb3B0aW9uIGlzIG9ubHkgcmVsZXZhbnQgd2hlbiByZXN0b3JpbmcgZnJv bSBhbiBhcmNoaXZlIG1hZGUgdXNpbmcgPGFwcGxpY2F0aW9uPnBnX2R1bXBhbGw8L2FwcGxpY2F0 aW9uPi4KKyAgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgICA8L3Zhcmxpc3Rl bnRyeT4KKwogICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgPHRlcm0+PG9wdGlvbj4tLWZpbHRl cj08cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+ZmlsZW5hbWU8L3JlcGxhY2VhYmxlPjwv b3B0aW9uPjwvdGVybT4KICAgICAgIDxsaXN0aXRlbT4KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdf ZHVtcC9jb25uZWN0ZGIuYyBiL3NyYy9iaW4vcGdfZHVtcC9jb25uZWN0ZGIuYwppbmRleCBkNTVk NTNkYmVlYS4uZjQ0YThhNDVmY2EgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9jb25uZWN0 ZGIuYworKysgYi9zcmMvYmluL3BnX2R1bXAvY29ubmVjdGRiLmMKQEAgLTI4Nyw3ICsyODcsNiBA QCBleGVjdXRlUXVlcnkoUEdjb25uICpjb25uLCBjb25zdCBjaGFyICpxdWVyeSkKIAl7CiAJCXBn X2xvZ19lcnJvcigicXVlcnkgZmFpbGVkOiAlcyIsIFBRZXJyb3JNZXNzYWdlKGNvbm4pKTsKIAkJ cGdfbG9nX2Vycm9yX2RldGFpbCgiUXVlcnkgd2FzOiAlcyIsIHF1ZXJ5KTsKLQkJUFFmaW5pc2go Y29ubik7CiAJCWV4aXRfbmljZWx5KDEpOwogCX0KIApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19k dW1wL21lc29uLmJ1aWxkIGIvc3JjL2Jpbi9wZ19kdW1wL21lc29uLmJ1aWxkCmluZGV4IGYzYzY2 OWY0ODRlLi4zZTIxYWFmNTc4MCAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL21lc29uLmJ1 aWxkCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9tZXNvbi5idWlsZApAQCAtMTAzLDYgKzEwMyw3IEBA IHRlc3RzICs9IHsKICAgICAgICd0LzAwNF9wZ19kdW1wX3BhcmFsbGVsLnBsJywKICAgICAgICd0 LzAwNV9wZ19kdW1wX2ZpbHRlcmZpbGUucGwnLAogICAgICAgJ3QvMDA2X3BnX2R1bXBfY29tcHJl c3MucGwnLAorCSAgJ3QvMDA3X3BnX2R1bXBhbGwucGwnLAogICAgICAgJ3QvMDEwX2R1bXBfY29u bnN0ci5wbCcsCiAgICAgXSwKICAgfSwKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wYXJh bGxlbC5jIGIvc3JjL2Jpbi9wZ19kdW1wL3BhcmFsbGVsLmMKaW5kZXggMDg2YWRjZGM1MDIuLjU5 NzRkNjcwNmZkIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGFyYWxsZWwuYworKysgYi9z cmMvYmluL3BnX2R1bXAvcGFyYWxsZWwuYwpAQCAtMzMzLDYgKzMzMywxNiBAQCBvbl9leGl0X2Ns b3NlX2FyY2hpdmUoQXJjaGl2ZSAqQUhYKQogCW9uX2V4aXRfbmljZWx5KGFyY2hpdmVfY2xvc2Vf Y29ubmVjdGlvbiwgJnNodXRkb3duX2luZm8pOwogfQogCisvKgorICogV2hlbiBwZ19yZXN0b3Jl IHJlc3RvcmVzIG11bHRpcGxlIGRhdGFiYXNlcywgdGhlbiB1cGRhdGUgYWxyZWFkeSBhZGRlZCBl bnRyeQorICogaW50byBhcnJheSBmb3IgY2xlYW51cC4KKyAqLwordm9pZAorcmVwbGFjZV9vbl9l eGl0X2Nsb3NlX2FyY2hpdmUoQXJjaGl2ZSAqQUhYKQoreworCXNodXRkb3duX2luZm8uQUhYID0g QUhYOworfQorCiAvKgogICogb25fZXhpdF9uaWNlbHkgaGFuZGxlciBmb3Igc2h1dHRpbmcgZG93 biBkYXRhYmFzZSBjb25uZWN0aW9ucyBhbmQKICAqIHdvcmtlciBwcm9jZXNzZXMgY2xlYW5seS4K ZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXAuaCBiL3NyYy9iaW4vcGdfZHVt cC9wZ19iYWNrdXAuaAppbmRleCBkOTA0MWRhZDcyMC4uZjYzMWQ5NDU0NzIgMTAwNjQ0Ci0tLSBh L3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXAuaAorKysgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFj a3VwLmgKQEAgLTMxMiw3ICszMTIsNyBAQCBleHRlcm4gdm9pZCBTZXRBcmNoaXZlT3B0aW9ucyhB cmNoaXZlICpBSCwgRHVtcE9wdGlvbnMgKmRvcHQsIFJlc3RvcmVPcHRpb25zICpybwogCiBleHRl cm4gdm9pZCBQcm9jZXNzQXJjaGl2ZVJlc3RvcmVPcHRpb25zKEFyY2hpdmUgKkFIWCk7CiAKLWV4 dGVybiB2b2lkIFJlc3RvcmVBcmNoaXZlKEFyY2hpdmUgKkFIWCk7CitleHRlcm4gdm9pZCBSZXN0 b3JlQXJjaGl2ZShBcmNoaXZlICpBSFgsIGJvb2wgYXBwZW5kX2RhdGEsIGJvb2wgZ2xvYmFsc19v bmx5KTsKIAogLyogT3BlbiBhbiBleGlzdGluZyBhcmNoaXZlICovCiBleHRlcm4gQXJjaGl2ZSAq T3BlbkFyY2hpdmUoY29uc3QgY2hhciAqRmlsZVNwZWMsIGNvbnN0IEFyY2hpdmVGb3JtYXQgZm10 KTsKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuYyBiL3Ny Yy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuYwppbmRleCA1OWVhZWNiNGVkNy4uZjVk ZjlhYzVjMmIgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIu YworKysgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMKQEAgLTg2LDcgKzg2 LDcgQEAgc3RhdGljIGludAlSZXN0b3JpbmdUb0RCKEFyY2hpdmVIYW5kbGUgKkFIKTsKIHN0YXRp YyB2b2lkIGR1bXBfbG9fYnVmKEFyY2hpdmVIYW5kbGUgKkFIKTsKIHN0YXRpYyB2b2lkIGR1bXBU aW1lc3RhbXAoQXJjaGl2ZUhhbmRsZSAqQUgsIGNvbnN0IGNoYXIgKm1zZywgdGltZV90IHRpbSk7 CiBzdGF0aWMgdm9pZCBTZXRPdXRwdXQoQXJjaGl2ZUhhbmRsZSAqQUgsIGNvbnN0IGNoYXIgKmZp bGVuYW1lLAotCQkJCQkgIGNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Np b25fc3BlYyk7CisJCQkJY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lv bl9zcGVjLCBib29sIGFwcGVuZF9kYXRhKTsKIHN0YXRpYyBDb21wcmVzc0ZpbGVIYW5kbGUgKlNh dmVPdXRwdXQoQXJjaGl2ZUhhbmRsZSAqQUgpOwogc3RhdGljIHZvaWQgUmVzdG9yZU91dHB1dChB cmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NGaWxlSGFuZGxlICpzYXZlZE91dHB1dCk7CiAKQEAg LTMzOSw5ICszMzksMTQgQEAgUHJvY2Vzc0FyY2hpdmVSZXN0b3JlT3B0aW9ucyhBcmNoaXZlICpB SFgpCiAJCVN0cmljdE5hbWVzQ2hlY2socm9wdCk7CiB9CiAKLS8qIFB1YmxpYyAqLworLyoKKyAq IFJlc3RvcmVBcmNoaXZlCisgKgorICogSWYgYXBwZW5kX2RhdGEgaXMgc2V0LCB0aGVuIGFwcGVu ZCBkYXRhIGludG8gZmlsZSBhcyB3ZSBhcmUgcmVzdG9yaW5nIGR1bXAKKyAqIG9mIG11bHRpcGxl IGRhdGFiYXNlcyB3aGljaCB3YXMgdGFrZW4gYnkgcGdfZHVtcGFsbC4KKyAqLwogdm9pZAotUmVz dG9yZUFyY2hpdmUoQXJjaGl2ZSAqQUhYKQorUmVzdG9yZUFyY2hpdmUoQXJjaGl2ZSAqQUhYLCBi b29sIGFwcGVuZF9kYXRhLCBib29sIGdsb2JhbHNfb25seSkKIHsKIAlBcmNoaXZlSGFuZGxlICpB SCA9IChBcmNoaXZlSGFuZGxlICopIEFIWDsKIAlSZXN0b3JlT3B0aW9ucyAqcm9wdCA9IEFILT5w dWJsaWMucm9wdDsKQEAgLTQ1OCw3ICs0NjMsNyBAQCBSZXN0b3JlQXJjaGl2ZShBcmNoaXZlICpB SFgpCiAJICovCiAJc2F2ID0gU2F2ZU91dHB1dChBSCk7CiAJaWYgKHJvcHQtPmZpbGVuYW1lIHx8 IHJvcHQtPmNvbXByZXNzaW9uX3NwZWMuYWxnb3JpdGhtICE9IFBHX0NPTVBSRVNTSU9OX05PTkUp Ci0JCVNldE91dHB1dChBSCwgcm9wdC0+ZmlsZW5hbWUsIHJvcHQtPmNvbXByZXNzaW9uX3NwZWMp OworCQlTZXRPdXRwdXQoQUgsIHJvcHQtPmZpbGVuYW1lLCByb3B0LT5jb21wcmVzc2lvbl9zcGVj LCBhcHBlbmRfZGF0YSk7CiAKIAlhaHByaW50ZihBSCwgIi0tXG4tLSBQb3N0Z3JlU1FMIGRhdGFi YXNlIGR1bXBcbi0tXG5cbiIpOwogCkBAIC03NjEsNiArNzY2LDE3IEBAIFJlc3RvcmVBcmNoaXZl KEFyY2hpdmUgKkFIWCkKIAkJCWlmICgodGUtPnJlcXMgJiAoUkVRX1NDSEVNQSB8IFJFUV9EQVRB IHwgUkVRX1NUQVRTKSkgPT0gMCkKIAkJCQljb250aW51ZTsJCS8qIGlnbm9yZSBpZiBub3QgdG8g YmUgZHVtcGVkIGF0IGFsbCAqLwogCisJCQkvKiBTa2lwIERST1AgREFUQUJBU0UgaWYgZ2xvYmFs c19vbmx5LiAqLworCQkJaWYgKGdsb2JhbHNfb25seSAmJiB0ZSAmJiB0ZS0+dGFnICYmIChzdHJj bXAodGUtPnRhZywgIkRST1BfREFUQUJBU0UiKSA9PSAwKSkKKwkJCQljb250aW51ZTsKKworCQkJ LyogU2tpcCBmb3IgUkVTVFJJQ1QsIFVOUkVTVFJJQ1QsIENPTk5FQ1QuICovCisJCQlpZiAoIXJv cHQtPmZpbGVuYW1lICYmIHRlICYmIHRlLT50YWcgJiYKKwkJCQkJKChzdHJjbXAodGUtPnRhZywg IlJFU1RSSUNUIikgPT0gMCkgfHwKKwkJCQkJIChzdHJjbXAodGUtPnRhZywgIlVOUkVTVFJJQ1Qi KSA9PSAwKSB8fAorCQkJCQkgKHN0cmNtcCh0ZS0+dGFnLCAiQ09OTkVDVCIpID09IDApKSkKKwkJ CQljb250aW51ZTsKKwogCQkJc3dpdGNoIChfdG9jRW50cnlSZXN0b3JlUGFzcyh0ZSkpCiAJCQl7 CiAJCQkJY2FzZSBSRVNUT1JFX1BBU1NfTUFJTjoKQEAgLTEzMTYsNyArMTMzMiw3IEBAIFByaW50 VE9DU3VtbWFyeShBcmNoaXZlICpBSFgpCiAKIAlzYXYgPSBTYXZlT3V0cHV0KEFIKTsKIAlpZiAo cm9wdC0+ZmlsZW5hbWUpCi0JCVNldE91dHB1dChBSCwgcm9wdC0+ZmlsZW5hbWUsIG91dF9jb21w cmVzc2lvbl9zcGVjKTsKKwkJU2V0T3V0cHV0KEFILCByb3B0LT5maWxlbmFtZSwgb3V0X2NvbXBy ZXNzaW9uX3NwZWMsIGZhbHNlKTsKIAogCWlmIChzdHJmdGltZShzdGFtcF9zdHIsIHNpemVvZihz dGFtcF9zdHIpLCBQR0RVTVBfU1RSRlRJTUVfRk1ULAogCQkJCSBsb2NhbHRpbWUoJkFILT5jcmVh dGVEYXRlKSkgPT0gMCkKQEAgLTE2OTUsNyArMTcxMSw4IEBAIGFyY2hwcmludGYoQXJjaGl2ZSAq QUgsIGNvbnN0IGNoYXIgKmZtdCwuLi4pCiAKIHN0YXRpYyB2b2lkCiBTZXRPdXRwdXQoQXJjaGl2 ZUhhbmRsZSAqQUgsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLAotCQkgIGNvbnN0IHBnX2NvbXByZXNz X3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYykKKwkJICBjb25zdCBwZ19jb21wcmVzc19z cGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMsCisJCSAgYm9vbCBhcHBlbmRfZGF0YSkKIHsK IAlDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSDsKIAljb25zdCBjaGFyICptb2RlOwpAQCAtMTcxNSw3 ICsxNzMyLDcgQEAgU2V0T3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFILCBjb25zdCBjaGFyICpmaWxl bmFtZSwKIAllbHNlCiAJCWZuID0gZmlsZW5vKHN0ZG91dCk7CiAKLQlpZiAoQUgtPm1vZGUgPT0g YXJjaE1vZGVBcHBlbmQpCisJaWYgKGFwcGVuZF9kYXRhIHx8IEFILT5tb2RlID09IGFyY2hNb2Rl QXBwZW5kKQogCQltb2RlID0gUEdfQklOQVJZX0E7CiAJZWxzZQogCQltb2RlID0gUEdfQklOQVJZ X1c7CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmggYi9z cmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmgKaW5kZXggMzI1YjUzZmM5YmQuLjM2 NTA3M2IzZWFlIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVy LmgKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5oCkBAIC0zOTQsNiAr Mzk0LDcgQEAgc3RydWN0IF90b2NFbnRyeQogCiBleHRlcm4gaW50CXBhcmFsbGVsX3Jlc3RvcmUo QXJjaGl2ZUhhbmRsZSAqQUgsIFRvY0VudHJ5ICp0ZSk7CiBleHRlcm4gdm9pZCBvbl9leGl0X2Ns b3NlX2FyY2hpdmUoQXJjaGl2ZSAqQUhYKTsKK2V4dGVybiB2b2lkIHJlcGxhY2Vfb25fZXhpdF9j bG9zZV9hcmNoaXZlKEFyY2hpdmUgKkFIWCk7CiAKIGV4dGVybiB2b2lkIHdhcm5fb3JfZXhpdF9o b3JyaWJseShBcmNoaXZlSGFuZGxlICpBSCwgY29uc3QgY2hhciAqZm10LC4uLikgcGdfYXR0cmli dXRlX3ByaW50ZigyLCAzKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1 cF90YXIuYyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfdGFyLmMKaW5kZXggYjViYTNiNDZk ZDkuLjgxOGI4MGE5MzY5IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX3Rh ci5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfdGFyLmMKQEAgLTgyNiw3ICs4MjYs NyBAQCBfQ2xvc2VBcmNoaXZlKEFyY2hpdmVIYW5kbGUgKkFIKQogCQlzYXZWZXJib3NlID0gQUgt PnB1YmxpYy52ZXJib3NlOwogCQlBSC0+cHVibGljLnZlcmJvc2UgPSAwOwogCi0JCVJlc3RvcmVB cmNoaXZlKChBcmNoaXZlICopIEFIKTsKKwkJUmVzdG9yZUFyY2hpdmUoKEFyY2hpdmUgKikgQUgs IGZhbHNlLCBmYWxzZSk7CiAKIAkJU2V0QXJjaGl2ZU9wdGlvbnMoKEFyY2hpdmUgKikgQUgsIHNh dkRvcHQsIHNhdlJvcHQpOwogCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5j IGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYwppbmRleCBhMDA5MThiYWNiNC4uMTNlMTc2NGVj NzAgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMKKysrIGIvc3JjL2Jpbi9w Z19kdW1wL3BnX2R1bXAuYwpAQCAtMTI5Miw3ICsxMjkyLDcgQEAgbWFpbihpbnQgYXJnYywgY2hh ciAqKmFyZ3YpCiAJICogcmlnaHQgbm93LgogCSAqLwogCWlmIChwbGFpblRleHQpCi0JCVJlc3Rv cmVBcmNoaXZlKGZvdXQpOworCQlSZXN0b3JlQXJjaGl2ZShmb3V0LCBmYWxzZSwgZmFsc2UpOwog CiAJQ2xvc2VBcmNoaXZlKGZvdXQpOwogCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdf ZHVtcGFsbC5jIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXBhbGwuYwppbmRleCBiYjQ1MWMxYmFl MS4uOTI4YWQ3ZTVlMGEgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wYWxsLmMK KysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXBhbGwuYwpAQCAtMzAsNiArMzAsNyBAQAogI2lu Y2x1ZGUgImZlX3V0aWxzL3N0cmluZ191dGlscy5oIgogI2luY2x1ZGUgImZpbHRlci5oIgogI2lu Y2x1ZGUgImdldG9wdF9sb25nLmgiCisjaW5jbHVkZSAicGdfYmFja3VwX2FyY2hpdmVyLmgiCiAK IC8qIHZlcnNpb24gc3RyaW5nIHdlIGV4cGVjdCBiYWNrIGZyb20gcGdfZHVtcCAqLwogI2RlZmlu ZSBQR0RVTVBfVkVSU0lPTlNUUiAicGdfZHVtcCAoUG9zdGdyZVNRTCkgIiBQR19WRVJTSU9OICJc biIKQEAgLTY1LDkgKzY2LDEwIEBAIHN0YXRpYyB2b2lkIGRyb3BUYWJsZXNwYWNlcyhQR2Nvbm4g KmNvbm4pOwogc3RhdGljIHZvaWQgZHVtcFRhYmxlc3BhY2VzKFBHY29ubiAqY29ubik7CiBzdGF0 aWMgdm9pZCBkcm9wREJzKFBHY29ubiAqY29ubik7CiBzdGF0aWMgdm9pZCBkdW1wVXNlckNvbmZp ZyhQR2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKnVzZXJuYW1lKTsKLXN0YXRpYyB2b2lkIGR1bXBE YXRhYmFzZXMoUEdjb25uICpjb25uKTsKK3N0YXRpYyB2b2lkIGR1bXBEYXRhYmFzZXMoUEdjb25u ICpjb25uLCBBcmNoaXZlRm9ybWF0IGFyY2hEdW1wRm9ybWF0KTsKIHN0YXRpYyB2b2lkIGR1bXBU aW1lc3RhbXAoY29uc3QgY2hhciAqbXNnKTsKLXN0YXRpYyBpbnQJcnVuUGdEdW1wKGNvbnN0IGNo YXIgKmRibmFtZSwgY29uc3QgY2hhciAqY3JlYXRlX29wdHMpOworc3RhdGljIGludAlydW5QZ0R1 bXAoY29uc3QgY2hhciAqZGJuYW1lLCBjb25zdCBjaGFyICpjcmVhdGVfb3B0cywKKwkJCQkJICBj aGFyICpkYmZpbGUsIEFyY2hpdmVGb3JtYXQgYXJjaER1bXBGb3JtYXQpOwogc3RhdGljIHZvaWQg YnVpbGRTaFNlY0xhYmVscyhQR2Nvbm4gKmNvbm4sCiAJCQkJCQkJIGNvbnN0IGNoYXIgKmNhdGFs b2dfbmFtZSwgT2lkIG9iamVjdElkLAogCQkJCQkJCSBjb25zdCBjaGFyICpvYmp0eXBlLCBjb25z dCBjaGFyICpvYmpuYW1lLApAQCAtNzYsNiArNzgsOSBAQCBzdGF0aWMgdm9pZCBleGVjdXRlQ29t bWFuZChQR2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKnF1ZXJ5KTsKIHN0YXRpYyB2b2lkIGV4cGFu ZF9kYm5hbWVfcGF0dGVybnMoUEdjb25uICpjb25uLCBTaW1wbGVTdHJpbmdMaXN0ICpwYXR0ZXJu cywKIAkJCQkJCQkJICAgU2ltcGxlU3RyaW5nTGlzdCAqbmFtZXMpOwogc3RhdGljIHZvaWQgcmVh ZF9kdW1wYWxsX2ZpbHRlcnMoY29uc3QgY2hhciAqZmlsZW5hbWUsIFNpbXBsZVN0cmluZ0xpc3Qg KnBhdHRlcm4pOworc3RhdGljIEFyY2hpdmVGb3JtYXQgcGFyc2VEdW1wRm9ybWF0KGNvbnN0IGNo YXIgKmZvcm1hdCk7CitzdGF0aWMgaW50IGNyZWF0ZUR1bXBJZCh2b2lkKTsKK3N0YXRpYyB2b2lk IGNyZWF0ZU9uZUFyY2hpdmVFbnRyeShjb25zdCBjaGFyICpxdWVyeSwgY29uc3QgY2hhciAqdGFn KTsKIAogc3RhdGljIGNoYXIgcGdfZHVtcF9iaW5bTUFYUEdQQVRIXTsKIHN0YXRpYyBQUUV4cEJ1 ZmZlciBwZ2R1bXBvcHRzOwpAQCAtMTIzLDYgKzEyOCwxMyBAQCBzdGF0aWMgU2ltcGxlU3RyaW5n TGlzdCBkYXRhYmFzZV9leGNsdWRlX3BhdHRlcm5zID0ge05VTEwsIE5VTEx9Owogc3RhdGljIFNp bXBsZVN0cmluZ0xpc3QgZGF0YWJhc2VfZXhjbHVkZV9uYW1lcyA9IHtOVUxMLCBOVUxMfTsKIAog c3RhdGljIGNoYXIgKnJlc3RyaWN0X2tleTsKK3N0YXRpYyBBcmNoaXZlICpmb3V0ID0gTlVMTDsK K3N0YXRpYyBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMgPSB7MH07 CitzdGF0aWMgaW50IGR1bXBJZFZhbCA9IDA7CitzdGF0aWMgY29uc3QgQ2F0YWxvZ0lkIG5pbENh dGFsb2dJZCA9IHswLCAwfTsKK3N0YXRpYyBBcmNoaXZlTW9kZSBhcmNoaXZlTW9kZSA9IGFyY2hN b2RlV3JpdGU7CitzdGF0aWMgRGF0YURpclN5bmNNZXRob2Qgc3luY19tZXRob2QgPSBEQVRBX0RJ Ul9TWU5DX01FVEhPRF9GU1lOQzsKK3N0YXRpYyBBcmNoaXZlRm9ybWF0IGFyY2hEdW1wRm9ybWF0 ID0gYXJjaE51bGw7CiAKIGludAogbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQpAQCAtMTQ4 LDYgKzE2MCw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAkJeyJwYXNzd29yZCIs IG5vX2FyZ3VtZW50LCBOVUxMLCAnVyd9LAogCQl7Im5vLXByaXZpbGVnZXMiLCBub19hcmd1bWVu dCwgTlVMTCwgJ3gnfSwKIAkJeyJuby1hY2wiLCBub19hcmd1bWVudCwgTlVMTCwgJ3gnfSwKKwkJ eyJmb3JtYXQiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ0YnfSwKIAogCQkvKgogCQkgKiB0 aGUgZm9sbG93aW5nIG9wdGlvbnMgZG9uJ3QgaGF2ZSBhbiBlcXVpdmFsZW50IHNob3J0IG9wdGlv biBsZXR0ZXIKQEAgLTE5Nyw2ICsyMTAsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10p CiAJY2hhcgkgICAqcGdkYiA9IE5VTEw7CiAJY2hhcgkgICAqdXNlX3JvbGUgPSBOVUxMOwogCWNv bnN0IGNoYXIgKmR1bXBlbmNvZGluZyA9IE5VTEw7CisJY29uc3QgY2hhciAqZm9ybWF0TmFtZSA9 ICJwIjsKIAl0cml2YWx1ZQlwcm9tcHRfcGFzc3dvcmQgPSBUUklfREVGQVVMVDsKIAlib29sCQlk YXRhX29ubHkgPSBmYWxzZTsKIAlib29sCQlnbG9iYWxzX29ubHkgPSBmYWxzZTsKQEAgLTIwOCw2 ICsyMjIsOCBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJaW50CQkJYywKIAkJCQly ZXQ7CiAJaW50CQkJb3B0aW5kZXg7CisJRHVtcE9wdGlvbnMgZG9wdDsKKwljaGFyICAgICAgICBn bG9iYWxfcGF0aFtNQVhQR1BBVEhdOwogCiAJcGdfbG9nZ2luZ19pbml0KGFyZ3ZbMF0pOwogCXBn X2xvZ2dpbmdfc2V0X2xldmVsKFBHX0xPR19XQVJOSU5HKTsKQEAgLTI0Niw3ICsyNjIsOSBAQCBt YWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAKIAlwZ2R1bXBvcHRzID0gY3JlYXRlUFFFeHBC dWZmZXIoKTsKIAotCXdoaWxlICgoYyA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsICJhY2Q6RTpm OmdoOmw6T3A6cnNTOnRVOnZ3V3giLCBsb25nX29wdGlvbnMsICZvcHRpbmRleCkpICE9IC0xKQor CUluaXREdW1wT3B0aW9ucygmZG9wdCk7CisKKwl3aGlsZSAoKGMgPSBnZXRvcHRfbG9uZyhhcmdj LCBhcmd2LCAiYWNkOkU6ZjpGOmdoOmw6T3A6cnNTOnRVOnZ3V3giLCBsb25nX29wdGlvbnMsICZv cHRpbmRleCkpICE9IC0xKQogCXsKIAkJc3dpdGNoIChjKQogCQl7CkBAIC0yNTcsNiArMjc1LDcg QEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCiAJCQljYXNlICdjJzoKIAkJCQlvdXRw dXRfY2xlYW4gPSB0cnVlOworCQkJCWRvcHQub3V0cHV0Q2xlYW4gPSAxOwogCQkJCWJyZWFrOwog CiAJCQljYXNlICdkJzoKQEAgLTI3NCw3ICsyOTMsOSBAQCBtYWluKGludCBhcmdjLCBjaGFyICph cmd2W10pCiAJCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocGdkdW1wb3B0cywgIiAtZiAiKTsKIAkJ CQlhcHBlbmRTaGVsbFN0cmluZyhwZ2R1bXBvcHRzLCBmaWxlbmFtZSk7CiAJCQkJYnJlYWs7Ci0K KwkJCWNhc2UgJ0YnOgorCQkJCWZvcm1hdE5hbWUgPSBwZ19zdHJkdXAob3B0YXJnKTsKKwkJCQli cmVhazsKIAkJCWNhc2UgJ2cnOgogCQkJCWdsb2JhbHNfb25seSA9IHRydWU7CiAJCQkJYnJlYWs7 CkBAIC0zMTQsNiArMzM1LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCiAJCQlj YXNlICdVJzoKIAkJCQlwZ3VzZXIgPSBwZ19zdHJkdXAob3B0YXJnKTsKKwkJCQlkb3B0LmNwYXJh bXMudXNlcm5hbWUgPSBwZ19zdHJkdXAob3B0YXJnKTsKIAkJCQlicmVhazsKIAogCQkJY2FzZSAn dic6CkBAIC00MjksNiArNDUxLDI1IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAkJ ZXhpdF9uaWNlbHkoMSk7CiAJfQogCisJLyogR2V0IGZvcm1hdCBmb3IgZHVtcC4gKi8KKwlhcmNo RHVtcEZvcm1hdCA9IHBhcnNlRHVtcEZvcm1hdChmb3JtYXROYW1lKTsKKworCS8qCisJICogSWYg YSBub24tcGxhaW4gZm9ybWF0IGlzIHNwZWNpZmllZCwgYSBmaWxlIG5hbWUgaXMgYWxzbyByZXF1 aXJlZCBhcyB0aGUKKwkgKiBwYXRoIHRvIHRoZSBtYWluIGRpcmVjdG9yeS4KKwkgKi8KKwlpZiAo YXJjaER1bXBGb3JtYXQgIT0gYXJjaE51bGwgJiYKKwkJKCFmaWxlbmFtZSB8fCBzdHJjbXAoZmls ZW5hbWUsICIiKSA9PSAwKSkKKwl7CisJCXBnX2xvZ19lcnJvcigib3B0aW9uIC1GLy0tZm9ybWF0 PWR8Y3x0IHJlcXVpcmVzIG9wdGlvbiAtZi8tLWZpbGUiKTsKKwkJcGdfbG9nX2Vycm9yX2hpbnQo IlRyeSBcIiVzIC0taGVscFwiIGZvciBtb3JlIGluZm9ybWF0aW9uLiIsIHByb2duYW1lKTsKKwkJ ZXhpdF9uaWNlbHkoMSk7CisJfQorCisJLyogcmVzdHJpY3Qta2V5IGlzIG9ubHkgc3VwcG9ydGVk IHdpdGggLS1mb3JtYXQ9cGxhaW4gKi8KKwlpZiAoYXJjaER1bXBGb3JtYXQgIT0gYXJjaE51bGwg JiYgcmVzdHJpY3Rfa2V5KQorCQlwZ19mYXRhbCgib3B0aW9uIC0tcmVzdHJpY3Qta2V5IGNhbiBv bmx5IGJlIHVzZWQgd2l0aCAtLWZvcm1hdD1wbGFpbiIpOworCiAJLyoKIAkgKiBJZiBwYXNzd29y ZCB2YWx1ZXMgYXJlIG5vdCByZXF1aXJlZCBpbiB0aGUgZHVtcCwgc3dpdGNoIHRvIHVzaW5nCiAJ ICogcGdfcm9sZXMgd2hpY2ggaXMgZXF1YWxseSB1c2VmdWwsIGp1c3QgbW9yZSBsaWtlbHkgdG8g aGF2ZSB1bnJlc3RyaWN0ZWQKQEAgLTQ4OSw2ICs1MzAsMzUgQEAgbWFpbihpbnQgYXJnYywgY2hh ciAqYXJndltdKQogCWlmIChzZXF1ZW5jZV9kYXRhKQogCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihw Z2R1bXBvcHRzLCAiIC0tc2VxdWVuY2UtZGF0YSIpOwogCisJLyoKKwkgKiBPcGVuIHRoZSBvdXRw dXQgZmlsZSBpZiByZXF1aXJlZCwgb3RoZXJ3aXNlIHVzZSBzdGRvdXQuICBJZiByZXF1aXJlZCwK KwkgKiB0aGVuIGNyZWF0ZSBuZXcgZGlyZWN0b3J5LgorCSAqLworCWlmIChhcmNoRHVtcEZvcm1h dCAhPSBhcmNoTnVsbCkKKwl7CisJCUFzc2VydChmaWxlbmFtZSk7CisKKwkJLyogQ3JlYXRlIG5l dyBkaXJlY3Rvcnkgb3IgYWNjZXB0IHRoZSBlbXB0eSBleGlzdGluZyBkaXJlY3RvcnkuICovCisJ CWNyZWF0ZV9vcl9vcGVuX2RpcihmaWxlbmFtZSk7CisKKwkJLyogc2V0IGZpbGUgcGF0aCBmb3Ig Z2xvYmFsIHNxbCBjb21tYW5kcy4gKi8KKwkJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hDdXN0 b20pCisJCQlzbnByaW50ZihnbG9iYWxfcGF0aCwgTUFYUEdQQVRILCAiJXMvdG9jLmRtcCIsIGZp bGVuYW1lKTsKKwkJZWxzZSBpZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaFRhcikKKwkJCXNucHJp bnRmKGdsb2JhbF9wYXRoLCBNQVhQR1BBVEgsICIlcy90b2MudGFyIiwgZmlsZW5hbWUpOworCQll bHNlIGlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoRGlyZWN0b3J5KQorCQkJc25wcmludGYoZ2xv YmFsX3BhdGgsIE1BWFBHUEFUSCwgIiVzIiwgZmlsZW5hbWUpOworCX0KKwllbHNlIGlmIChmaWxl bmFtZSkKKwl7CisJCU9QRiA9IGZvcGVuKGZpbGVuYW1lLCBQR19CSU5BUllfVyk7CisJCWlmICgh T1BGKQorCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBvcGVuIG91dHB1dCBmaWxlIFwiJXNcIjogJW0i LAorCQkJCQkgZmlsZW5hbWUpOworCX0KKwllbHNlCisJCU9QRiA9IHN0ZG91dDsKKwogCS8qCiAJ ICogSWYgeW91IGRvbid0IHByb3ZpZGUgYSByZXN0cmljdCBrZXksIG9uZSB3aWxsIGJlIGFwcG9p bnRlZCBmb3IgeW91LgogCSAqLwpAQCAtNTM4LDE5ICs2MDgsNiBAQCBtYWluKGludCBhcmdjLCBj aGFyICphcmd2W10pCiAJZXhwYW5kX2RibmFtZV9wYXR0ZXJucyhjb25uLCAmZGF0YWJhc2VfZXhj bHVkZV9wYXR0ZXJucywKIAkJCQkJCSAgICZkYXRhYmFzZV9leGNsdWRlX25hbWVzKTsKIAotCS8q Ci0JICogT3BlbiB0aGUgb3V0cHV0IGZpbGUgaWYgcmVxdWlyZWQsIG90aGVyd2lzZSB1c2Ugc3Rk b3V0Ci0JICovCi0JaWYgKGZpbGVuYW1lKQotCXsKLQkJT1BGID0gZm9wZW4oZmlsZW5hbWUsIFBH X0JJTkFSWV9XKTsKLQkJaWYgKCFPUEYpCi0JCQlwZ19mYXRhbCgiY291bGQgbm90IG9wZW4gb3V0 cHV0IGZpbGUgXCIlc1wiOiAlbSIsCi0JCQkJCSBmaWxlbmFtZSk7Ci0JfQotCWVsc2UKLQkJT1BG ID0gc3Rkb3V0OwotCiAJLyoKIAkgKiBTZXQgdGhlIGNsaWVudCBlbmNvZGluZyBpZiByZXF1ZXN0 ZWQuCiAJICovCkBAIC01ODUsMzcgKzY0MiwxMDUgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJn dltdKQogCWlmIChxdW90ZV9hbGxfaWRlbnRpZmllcnMpCiAJCWV4ZWN1dGVDb21tYW5kKGNvbm4s ICJTRVQgcXVvdGVfYWxsX2lkZW50aWZpZXJzID0gdHJ1ZSIpOwogCi0JZnByaW50ZihPUEYsICIt LVxuLS0gUG9zdGdyZVNRTCBkYXRhYmFzZSBjbHVzdGVyIGR1bXBcbi0tXG5cbiIpOwogCWlmICh2 ZXJib3NlKQogCQlkdW1wVGltZXN0YW1wKCJTdGFydGVkIG9uIik7CiAKLQkvKgotCSAqIEVudGVy IHJlc3RyaWN0ZWQgbW9kZSB0byBibG9jayBhbnkgdW5leHBlY3RlZCBwc3FsIG1ldGEtY29tbWFu ZHMuICBBCi0JICogbWFsaWNpb3VzIHNvdXJjZSBtaWdodCB0cnkgdG8gaW5qZWN0IGEgdmFyaWV0 eSBvZiB0aGluZ3MgdmlhIGJvZ3VzCi0JICogcmVzcG9uc2VzIHRvIHF1ZXJpZXMuICBXaGlsZSB3 ZSBjYW5ub3QgcHJldmVudCBzdWNoIHNvdXJjZXMgZnJvbQotCSAqIGFmZmVjdGluZyB0aGUgZGVz dGluYXRpb24gYXQgcmVzdG9yZSB0aW1lLCB3ZSBjYW4gYmxvY2sgcHNxbAotCSAqIG1ldGEtY29t bWFuZHMgc28gdGhhdCB0aGUgY2xpZW50IG1hY2hpbmUgdGhhdCBydW5zIHBzcWwgd2l0aCB0aGUg ZHVtcAotCSAqIG91dHB1dCByZW1haW5zIHVuYWZmZWN0ZWQuCi0JICovCi0JZnByaW50ZihPUEYs ICJcXHJlc3RyaWN0ICVzXG5cbiIsIHJlc3RyaWN0X2tleSk7CisJLyogY3JlYXRlIGEgYXJjaGl2 ZSBmaWxlIGZvciBnbG9iYWwgY29tbWFuZHMuICovCisJaWYgKGZpbGVuYW1lICYmIGFyY2hEdW1w Rm9ybWF0ICE9IGFyY2hOdWxsKQorCXsKKwkJLyogT3BlbiB0aGUgb3V0cHV0IGZpbGUgKi8KKwkJ Zm91dCA9IENyZWF0ZUFyY2hpdmUoZ2xvYmFsX3BhdGgsIGFyY2hEdW1wRm9ybWF0LCBjb21wcmVz c2lvbl9zcGVjLAorCQkJCWRvc3luYywgYXJjaGl2ZU1vZGUsIE5VTEwsIHN5bmNfbWV0aG9kKTsK IAotCS8qCi0JICogV2UgdXNlZCB0byBlbWl0IFxjb25uZWN0IHBvc3RncmVzIGhlcmUsIGJ1dCB0 aGF0IHNlcnZlZCBubyBwdXJwb3NlCi0JICogb3RoZXIgdGhhbiB0byBicmVhayB0aGluZ3MgZm9y IGluc3RhbGxhdGlvbnMgd2l0aG91dCBhIHBvc3RncmVzCi0JICogZGF0YWJhc2UuICBFdmVyeXRo aW5nIHdlJ3JlIHJlc3RvcmluZyBoZXJlIGlzIGEgZ2xvYmFsLCBzbyB3aGljaGV2ZXIKLQkgKiBk YXRhYmFzZSB3ZSdyZSBjb25uZWN0ZWQgdG8gYXQgdGhlIG1vbWVudCBpcyBmaW5lLgotCSAqLwor CQkvKiBNYWtlIGR1bXAgb3B0aW9ucyBhY2Nlc3NpYmxlIHJpZ2h0IGF3YXkgKi8KKwkJU2V0QXJj aGl2ZU9wdGlvbnMoZm91dCwgJmRvcHQsIE5VTEwpOworCQkoKEFyY2hpdmVIYW5kbGUqKWZvdXQp LT5jb25uZWN0aW9uID0gY29ubjsKKwkJKChBcmNoaXZlSGFuZGxlKilmb3V0KS0+cHVibGljLm51 bVdvcmtlcnMgPSAxOworCisJCS8qIFJlZ2lzdGVyIHRoZSBjbGVhbnVwIGhvb2sgKi8KKwkJb25f ZXhpdF9jbG9zZV9hcmNoaXZlKGZvdXQpOworCisJCS8qIExldCB0aGUgYXJjaGl2ZXIga25vdyBo b3cgbm9pc3kgdG8gYmUgKi8KKwkJZm91dC0+dmVyYm9zZSA9IHZlcmJvc2U7CiAKLQkvKiBSZXN0 b3JlIHdpbGwgbmVlZCB0byB3cml0ZSB0byB0aGUgdGFyZ2V0IGNsdXN0ZXIgKi8KLQlmcHJpbnRm KE9QRiwgIlNFVCBkZWZhdWx0X3RyYW5zYWN0aW9uX3JlYWRfb25seSA9IG9mZjtcblxuIik7CisJ CS8qCisJCSAqIFdlIGFsbG93IHRoZSBzZXJ2ZXIgdG8gYmUgYmFjayB0byA5LjIsIGFuZCB1cCB0 byBhbnkgbWlub3IgcmVsZWFzZSBvZgorCQkgKiBvdXIgb3duIG1ham9yIHZlcnNpb24uICAoU2Vl IGFsc28gdmVyc2lvbiBjaGVjayBpbiBwZ19kdW1wYWxsLmMuKQorCQkgKi8KKwkJZm91dC0+bWlu UmVtb3RlVmVyc2lvbiA9IDkwMjAwOworCQlmb3V0LT5tYXhSZW1vdGVWZXJzaW9uID0gKFBHX1ZF UlNJT05fTlVNIC8gMTAwKSAqIDEwMCArIDk5OworCQlmb3V0LT5udW1Xb3JrZXJzID0gMTsKKwor CQljcmVhdGVPbmVBcmNoaXZlRW50cnkoIi0tXG4tLSBQb3N0Z3JlU1FMIGRhdGFiYXNlIGNsdXN0 ZXIgZHVtcFxuLS1cblxuIiwgIkNPTU1FTlQiKTsKIAotCS8qIFJlcGxpY2F0ZSBlbmNvZGluZyBh bmQgc3RkX3N0cmluZ3MgaW4gb3V0cHV0ICovCi0JZnByaW50ZihPUEYsICJTRVQgY2xpZW50X2Vu Y29kaW5nID0gJyVzJztcbiIsCi0JCQlwZ19lbmNvZGluZ190b19jaGFyKGVuY29kaW5nKSk7Ci0J ZnByaW50ZihPUEYsICJTRVQgc3RhbmRhcmRfY29uZm9ybWluZ19zdHJpbmdzID0gJXM7XG4iLCBz dGRfc3RyaW5ncyk7Ci0JaWYgKHN0cmNtcChzdGRfc3RyaW5ncywgIm9mZiIpID09IDApCi0JCWZw cmludGYoT1BGLCAiU0VUIGVzY2FwZV9zdHJpbmdfd2FybmluZyA9IG9mZjtcbiIpOwotCWZwcmlu dGYoT1BGLCAiXG4iKTsKKwkJLyogZGVmYXVsdF90cmFuc2FjdGlvbl9yZWFkX29ubHkgPSBvZmYg Ki8KKwkJeworCQkJUFFFeHBCdWZmZXIgcXJ5ID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsKKworCQkJ cGdfbG9nX2luZm8oInNhdmluZyBkZWZhdWx0X3RyYW5zYWN0aW9uX3JlYWRfb25seSA9IG9mZiIp OworCQkJYXBwZW5kUFFFeHBCdWZmZXIocXJ5LCAiU0VUIGRlZmF1bHRfdHJhbnNhY3Rpb25fcmVh ZF9vbmx5ID0gb2ZmO1xuIik7CisJCQljcmVhdGVPbmVBcmNoaXZlRW50cnkocXJ5LT5kYXRhLCAi REVGQVVMVF9UUkFOU0FDVElPTl9SRUFEX09OTFkiKTsKKwkJCWRlc3Ryb3lQUUV4cEJ1ZmZlcihx cnkpOworCQl9CisKKwkJLyogZHVtcEVuY29kaW5nOiBwdXQgdGhlIGNvcnJlY3QgZW5jb2Rpbmcg aW50byB0aGUgYXJjaGl2ZSAqLworCQl7CisJCQlQUUV4cEJ1ZmZlciBxcnkgPSBjcmVhdGVQUUV4 cEJ1ZmZlcigpOworCQkJY29uc3QgY2hhciAqZW5jbmFtZSA9IHBnX2VuY29kaW5nX3RvX2NoYXIo ZW5jb2RpbmcpOworCisJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxcnksICJTRVQgY2xpZW50X2Vu Y29kaW5nID0gIik7CisJCQlhcHBlbmRTdHJpbmdMaXRlcmFsQUgocXJ5LCBlbmNuYW1lLCBmb3V0 KTsKKwkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHFyeSwgIjtcbiIpOworCisJCQlwZ19sb2dfaW5m bygic2F2aW5nIGVuY29kaW5nID0gJXMiLCBlbmNuYW1lKTsKKwkJCWNyZWF0ZU9uZUFyY2hpdmVF bnRyeShxcnktPmRhdGEsICJFTkNPRElORyIpOworCQkJZGVzdHJveVBRRXhwQnVmZmVyKHFyeSk7 CisJCX0KKworCQkvKiBkdW1wU3RkU3RyaW5nczogcHV0IHRoZSBjb3JyZWN0IGVzY2FwZSBzdHJp bmcgYmVoYXZpb3IgaW50byB0aGUgYXJjaGl2ZSAqLworCQl7CisJCQljb25zdCBjaGFyICpzdGRz dHJpbmdzID0gc3RkX3N0cmluZ3MgPyAib24iIDogIm9mZiI7CisJCQlQUUV4cEJ1ZmZlciBxcnkg PSBjcmVhdGVQUUV4cEJ1ZmZlcigpOworCisJCQlwZ19sb2dfaW5mbygic2F2aW5nIFwic3RhbmRh cmRfY29uZm9ybWluZ19zdHJpbmdzID0gJXNcIiIsIHN0ZHN0cmluZ3MpOworCQkJYXBwZW5kUFFF eHBCdWZmZXIocXJ5LCAiU0VUIHN0YW5kYXJkX2NvbmZvcm1pbmdfc3RyaW5ncyA9ICclcyc7XG4i LAorCQkJCQlzdGRzdHJpbmdzKTsKKwkJCWNyZWF0ZU9uZUFyY2hpdmVFbnRyeShxcnktPmRhdGEs ICJTVERTVFJJTkdTIik7CisJCQlkZXN0cm95UFFFeHBCdWZmZXIocXJ5KTsKKwkJfQorCX0KKwll bHNlCisJeworCQlmcHJpbnRmKE9QRiwgIi0tXG4tLSBQb3N0Z3JlU1FMIGRhdGFiYXNlIGNsdXN0 ZXIgZHVtcFxuLS1cblxuIik7CisKKwkJLyoKKwkJICogRW50ZXIgcmVzdHJpY3RlZCBtb2RlIHRv IGJsb2NrIGFueSB1bmV4cGVjdGVkIHBzcWwgbWV0YS1jb21tYW5kcy4gIEEKKwkJICogbWFsaWNp b3VzIHNvdXJjZSBtaWdodCB0cnkgdG8gaW5qZWN0IGEgdmFyaWV0eSBvZiB0aGluZ3MgdmlhIGJv Z3VzCisJCSAqIHJlc3BvbnNlcyB0byBxdWVyaWVzLiAgV2hpbGUgd2UgY2Fubm90IHByZXZlbnQg c3VjaCBzb3VyY2VzIGZyb20KKwkJICogYWZmZWN0aW5nIHRoZSBkZXN0aW5hdGlvbiBhdCByZXN0 b3JlIHRpbWUsIHdlIGNhbiBibG9jayBwc3FsCisJCSAqIG1ldGEtY29tbWFuZHMgc28gdGhhdCB0 aGUgY2xpZW50IG1hY2hpbmUgdGhhdCBydW5zIHBzcWwgd2l0aCB0aGUgZHVtcAorCQkgKiBvdXRw dXQgcmVtYWlucyB1bmFmZmVjdGVkLgorCQkgKi8KKwkJZnByaW50ZihPUEYsICJcXHJlc3RyaWN0 ICVzXG5cbiIsIHJlc3RyaWN0X2tleSk7CisKKwkJLyoKKwkJICogV2UgdXNlZCB0byBlbWl0IFxj b25uZWN0IHBvc3RncmVzIGhlcmUsIGJ1dCB0aGF0IHNlcnZlZCBubyBwdXJwb3NlCisJCSAqIG90 aGVyIHRoYW4gdG8gYnJlYWsgdGhpbmdzIGZvciBpbnN0YWxsYXRpb25zIHdpdGhvdXQgYSBwb3N0 Z3JlcworCQkgKiBkYXRhYmFzZS4gIEV2ZXJ5dGhpbmcgd2UncmUgcmVzdG9yaW5nIGhlcmUgaXMg YSBnbG9iYWwsIHNvIHdoaWNoZXZlcgorCQkgKiBkYXRhYmFzZSB3ZSdyZSBjb25uZWN0ZWQgdG8g YXQgdGhlIG1vbWVudCBpcyBmaW5lLgorCQkgKi8KKworCQkvKiBSZXN0b3JlIHdpbGwgbmVlZCB0 byB3cml0ZSB0byB0aGUgdGFyZ2V0IGNsdXN0ZXIgKi8KKwkJZnByaW50ZihPUEYsICJTRVQgZGVm YXVsdF90cmFuc2FjdGlvbl9yZWFkX29ubHkgPSBvZmY7XG5cbiIpOworCisJCS8qIFJlcGxpY2F0 ZSBlbmNvZGluZyBhbmQgc3RkX3N0cmluZ3MgaW4gb3V0cHV0ICovCisJCWZwcmludGYoT1BGLCAi U0VUIGNsaWVudF9lbmNvZGluZyA9ICclcyc7XG4iLAorCQkJCXBnX2VuY29kaW5nX3RvX2NoYXIo ZW5jb2RpbmcpKTsKKwkJZnByaW50ZihPUEYsICJTRVQgc3RhbmRhcmRfY29uZm9ybWluZ19zdHJp bmdzID0gJXM7XG4iLCBzdGRfc3RyaW5ncyk7CisJCWlmIChzdHJjbXAoc3RkX3N0cmluZ3MsICJv ZmYiKSA9PSAwKQorCQkJZnByaW50ZihPUEYsICJTRVQgZXNjYXBlX3N0cmluZ193YXJuaW5nID0g b2ZmO1xuIik7CisJCWZwcmludGYoT1BGLCAiXG4iKTsKKwl9CiAKIAlpZiAoIWRhdGFfb25seSAm JiAhc3RhdGlzdGljc19vbmx5ICYmICFub19zY2hlbWEpCiAJewpAQCAtNjU5LDI3ICs3ODQsNDIg QEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCQkJZHVtcFRhYmxlc3BhY2VzKGNvbm4p OwogCX0KIAotCS8qCi0JICogRXhpdCByZXN0cmljdGVkIG1vZGUganVzdCBiZWZvcmUgZHVtcGlu ZyB0aGUgZGF0YWJhc2VzLiAgcGdfZHVtcCB3aWxsCi0JICogaGFuZGxlIGVudGVyaW5nIHJlc3Ry aWN0ZWQgbW9kZSBhZ2FpbiBhcyBhcHByb3ByaWF0ZS4KLQkgKi8KLQlmcHJpbnRmKE9QRiwgIlxc dW5yZXN0cmljdCAlc1xuXG4iLCByZXN0cmljdF9rZXkpOworCWlmIChhcmNoRHVtcEZvcm1hdCA9 PSBhcmNoTnVsbCkKKwl7CisJCS8qCisJCSAqIEV4aXQgcmVzdHJpY3RlZCBtb2RlIGp1c3QgYmVm b3JlIGR1bXBpbmcgdGhlIGRhdGFiYXNlcy4gIHBnX2R1bXAgd2lsbAorCQkgKiBoYW5kbGUgZW50 ZXJpbmcgcmVzdHJpY3RlZCBtb2RlIGFnYWluIGFzIGFwcHJvcHJpYXRlLgorCQkgKi8KKwkJZnBy aW50ZihPUEYsICJcXHVucmVzdHJpY3QgJXNcblxuIiwgcmVzdHJpY3Rfa2V5KTsKKwl9CiAKIAlp ZiAoIWdsb2JhbHNfb25seSAmJiAhcm9sZXNfb25seSAmJiAhdGFibGVzcGFjZXNfb25seSkKLQkJ ZHVtcERhdGFiYXNlcyhjb25uKTsKLQotCVBRZmluaXNoKGNvbm4pOworCQlkdW1wRGF0YWJhc2Vz KGNvbm4sIGFyY2hEdW1wRm9ybWF0KTsKIAotCWlmICh2ZXJib3NlKQorCWlmICh2ZXJib3NlICYm IGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQogCQlkdW1wVGltZXN0YW1wKCJDb21wbGV0ZWQg b24iKTsKLQlmcHJpbnRmKE9QRiwgIi0tXG4tLSBQb3N0Z3JlU1FMIGRhdGFiYXNlIGNsdXN0ZXIg ZHVtcCBjb21wbGV0ZVxuLS1cblxuIik7CiAKLQlpZiAoZmlsZW5hbWUpCisJaWYgKGFyY2hEdW1w Rm9ybWF0ID09IGFyY2hOdWxsKQorCQlmcHJpbnRmKE9QRiwgIi0tXG4tLSBQb3N0Z3JlU1FMIGRh dGFiYXNlIGNsdXN0ZXIgZHVtcCBjb21wbGV0ZVxuLS1cblxuIik7CisKKwlpZiAoYXJjaER1bXBG b3JtYXQgIT0gYXJjaE51bGwpCisJeworCQlSZXN0b3JlT3B0aW9ucyAqcm9wdDsKKworCQljcmVh dGVPbmVBcmNoaXZlRW50cnkoIi0tXG4tLSBQb3N0Z3JlU1FMIGRhdGFiYXNlIGNsdXN0ZXIgZHVt cCBjb21wbGV0ZVxuLS1cblxuIiwgIkNPTU1FTlQiKTsKKwkJcm9wdCA9IE5ld1Jlc3RvcmVPcHRp b25zKCk7CisJCVNldEFyY2hpdmVPcHRpb25zKGZvdXQsICZkb3B0LCByb3B0KTsKKworCQkvKiBN YXJrIHdoaWNoIGVudHJpZXMgc2hvdWxkIGJlIG91dHB1dCAqLworCQlQcm9jZXNzQXJjaGl2ZVJl c3RvcmVPcHRpb25zKGZvdXQpOworCQlDbG9zZUFyY2hpdmUoZm91dCk7CisJfQorCWVsc2UgaWYg KGZpbGVuYW1lKQogCXsKIAkJZmNsb3NlKE9QRik7CiAKIAkJLyogc3luYyB0aGUgcmVzdWx0aW5n IGZpbGUsIGVycm9ycyBhcmUgbm90IGZhdGFsICovCi0JCWlmIChkb3N5bmMpCisJCWlmIChkb3N5 bmMgJiYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKSkKIAkJCSh2b2lkKSBmc3luY19mbmFt ZShmaWxlbmFtZSwgZmFsc2UpOwogCX0KIApAQCAtNjkwLDEyICs4MzAsMTQgQEAgbWFpbihpbnQg YXJnYywgY2hhciAqYXJndltdKQogc3RhdGljIHZvaWQKIGhlbHAodm9pZCkKIHsKLQlwcmludGYo XygiJXMgZXhwb3J0cyBhIFBvc3RncmVTUUwgZGF0YWJhc2UgY2x1c3RlciBhcyBhbiBTUUwgc2Ny aXB0LlxuXG4iKSwgcHJvZ25hbWUpOworCXByaW50ZihfKCIlcyBleHBvcnRzIGEgUG9zdGdyZVNR TCBkYXRhYmFzZSBjbHVzdGVyIGFzIGFuIFNRTCBzY3JpcHQgb3IgdG8gb3RoZXIgZm9ybWF0cy5c blxuIiksIHByb2duYW1lKTsKIAlwcmludGYoXygiVXNhZ2U6XG4iKSk7CiAJcHJpbnRmKF8oIiAg JXMgW09QVElPTl0uLi5cbiIpLCBwcm9nbmFtZSk7CiAKIAlwcmludGYoXygiXG5HZW5lcmFsIG9w dGlvbnM6XG4iKSk7CiAJcHJpbnRmKF8oIiAgLWYsIC0tZmlsZT1GSUxFTkFNRSAgICAgICAgICBv dXRwdXQgZmlsZSBuYW1lXG4iKSk7CisJcHJpbnRmKF8oIiAgLUYsIC0tZm9ybWF0PWN8ZHx0fHAg ICAgICAgICBvdXRwdXQgZmlsZSBmb3JtYXQgKGN1c3RvbSwgZGlyZWN0b3J5LCB0YXIsXG4iCisJ CQkgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFpbiB0ZXh0IChkZWZhdWx0KSlc biIpKTsKIAlwcmludGYoXygiICAtdiwgLS12ZXJib3NlICAgICAgICAgICAgICAgIHZlcmJvc2Ug bW9kZVxuIikpOwogCXByaW50ZihfKCIgIC1WLCAtLXZlcnNpb24gICAgICAgICAgICAgICAgb3V0 cHV0IHZlcnNpb24gaW5mb3JtYXRpb24sIHRoZW4gZXhpdFxuIikpOwogCXByaW50ZihfKCIgIC0t bG9jay13YWl0LXRpbWVvdXQ9VElNRU9VVCAgZmFpbCBhZnRlciB3YWl0aW5nIFRJTUVPVVQgZm9y IGEgdGFibGUgbG9ja1xuIikpOwpAQCAtNzcwLDYgKzkxMiw3IEBAIHN0YXRpYyB2b2lkCiBkcm9w Um9sZXMoUEdjb25uICpjb25uKQogewogCVBRRXhwQnVmZmVyIGJ1ZiA9IGNyZWF0ZVBRRXhwQnVm ZmVyKCk7CisJUFFFeHBCdWZmZXIgZGVsUXJ5ID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsKIAlQR3Jl c3VsdCAgICpyZXM7CiAJaW50CQkJaV9yb2xuYW1lOwogCWludAkJCWk7CkBAIC03OTEsNyArOTM0 LDEyIEBAIGRyb3BSb2xlcyhQR2Nvbm4gKmNvbm4pCiAJaV9yb2xuYW1lID0gUFFmbnVtYmVyKHJl cywgInJvbG5hbWUiKTsKIAogCWlmIChQUW50dXBsZXMocmVzKSA+IDApCi0JCWZwcmludGYoT1BG LCAiLS1cbi0tIERyb3Agcm9sZXNcbi0tXG5cbiIpOworCXsKKwkJaWYgKGFyY2hEdW1wRm9ybWF0 ID09IGFyY2hOdWxsKQorCQkJZnByaW50ZihPUEYsICItLVxuLS0gRHJvcCByb2xlc1xuLS1cblxu Iik7CisJCWVsc2UKKwkJCWNyZWF0ZU9uZUFyY2hpdmVFbnRyeSgiLS1cbi0tIERyb3Agcm9sZXNc bi0tXG5cbiIsICJDT01NRU5UIik7CisJfQogCiAJZm9yIChpID0gMDsgaSA8IFBRbnR1cGxlcyhy ZXMpOyBpKyspCiAJewpAQCAtNzk5LDE1ICs5NDcsMjEgQEAgZHJvcFJvbGVzKFBHY29ubiAqY29u bikKIAogCQlyb2xlbmFtZSA9IFBRZ2V0dmFsdWUocmVzLCBpLCBpX3JvbG5hbWUpOwogCi0JCWZw cmludGYoT1BGLCAiRFJPUCBST0xFICVzJXM7XG4iLAorCQlhcHBlbmRQUUV4cEJ1ZmZlcihkZWxR cnksICJEUk9QIFJPTEUgJXMlcztcbiIsCiAJCQkJaWZfZXhpc3RzID8gIklGIEVYSVNUUyAiIDog IiIsCiAJCQkJZm10SWQocm9sZW5hbWUpKTsKKworCQlpZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJj aE51bGwpCisJCQlmcHJpbnRmKE9QRiwgIiVzIiwgZGVsUXJ5LT5kYXRhKTsKKwkJZWxzZQorCQkJ Y3JlYXRlT25lQXJjaGl2ZUVudHJ5KGRlbFFyeS0+ZGF0YSwgImRyb3BSb2xlcyIpOwogCX0KIAog CVBRY2xlYXIocmVzKTsKIAlkZXN0cm95UFFFeHBCdWZmZXIoYnVmKTsKIAotCWZwcmludGYoT1BG LCAiXG5cbiIpOworCWlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkKKwkJZnByaW50ZihP UEYsICJcblxuIik7CiB9CiAKIC8qCkBAIC04ODksNyArMTA0MywxMiBAQCBkdW1wUm9sZXMoUEdj b25uICpjb25uKQogCWlfaXNfY3VycmVudF91c2VyID0gUFFmbnVtYmVyKHJlcywgImlzX2N1cnJl bnRfdXNlciIpOwogCiAJaWYgKFBRbnR1cGxlcyhyZXMpID4gMCkKLQkJZnByaW50ZihPUEYsICIt LVxuLS0gUm9sZXNcbi0tXG5cbiIpOworCXsKKwkJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hO dWxsKQorCQkJZnByaW50ZihPUEYsICItLVxuLS0gUm9sZXNcbi0tXG5cbiIpOworCQllbHNlCisJ CQljcmVhdGVPbmVBcmNoaXZlRW50cnkoIi0tXG4tLSBSb2xlc1xuLS1cblxuIiwgIkNPTU1FTlQi KTsKKwl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgUFFudHVwbGVzKHJlcyk7IGkrKykKIAl7CkBAIC05 OTMsNyArMTE1MiwxMCBAQCBkdW1wUm9sZXMoUEdjb25uICpjb25uKQogCQkJCQkJCSAiUk9MRSIs IHJvbGVuYW1lLAogCQkJCQkJCSBidWYpOwogCi0JCWZwcmludGYoT1BGLCAiJXMiLCBidWYtPmRh dGEpOworCQlpZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwpCisJCQlmcHJpbnRmKE9QRiwg IiVzIiwgYnVmLT5kYXRhKTsKKwkJZWxzZQorCQkJY3JlYXRlT25lQXJjaGl2ZUVudHJ5KGJ1Zi0+ ZGF0YSwgImR1bXBSb2xlcyIpOwogCX0KIAogCS8qCkBAIC0xMDAxLDE1ICsxMTYzLDEzIEBAIGR1 bXBSb2xlcyhQR2Nvbm4gKmNvbm4pCiAJICogV2UgZG8gaXQgdGhpcyB3YXkgYmVjYXVzZSBjb25m aWcgc2V0dGluZ3MgZm9yIHJvbGVzIGNvdWxkIG1lbnRpb24gdGhlCiAJICogbmFtZXMgb2Ygb3Ro ZXIgcm9sZXMuCiAJICovCi0JaWYgKFBRbnR1cGxlcyhyZXMpID4gMCkKLQkJZnByaW50ZihPUEYs ICJcbi0tXG4tLSBVc2VyIENvbmZpZ3VyYXRpb25zXG4tLVxuIik7Ci0KIAlmb3IgKGkgPSAwOyBp IDwgUFFudHVwbGVzKHJlcyk7IGkrKykKIAkJZHVtcFVzZXJDb25maWcoY29ubiwgUFFnZXR2YWx1 ZShyZXMsIGksIGlfcm9sbmFtZSkpOwogCiAJUFFjbGVhcihyZXMpOwogCi0JZnByaW50ZihPUEYs ICJcblxuIik7CisJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQorCQlmcHJpbnRmKE9Q RiwgIlxuXG4iKTsKIAogCWRlc3Ryb3lQUUV4cEJ1ZmZlcihidWYpOwogfQpAQCAtMTA4OCw3ICsx MjQ4LDEyIEBAIGR1bXBSb2xlTWVtYmVyc2hpcChQR2Nvbm4gKmNvbm4pCiAJaV9zZXRfb3B0aW9u ID0gUFFmbnVtYmVyKHJlcywgInNldF9vcHRpb24iKTsKIAogCWlmIChQUW50dXBsZXMocmVzKSA+ IDApCi0JCWZwcmludGYoT1BGLCAiLS1cbi0tIFJvbGUgbWVtYmVyc2hpcHNcbi0tXG5cbiIpOwor CXsKKwkJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQorCQkJZnByaW50ZihPUEYsICIt LVxuLS0gUm9sZSBtZW1iZXJzaGlwc1xuLS1cblxuIik7CisJCWVsc2UKKwkJCWNyZWF0ZU9uZUFy Y2hpdmVFbnRyeSgiLS1cbi0tIFJvbGUgbWVtYmVyc2hpcHNcbi0tXG5cbiIsICJDT01NRU5UIik7 CisJfQogCiAJLyoKIAkgKiBXZSBjYW4ndCBkdW1wIHRoZXNlIEdSQU5UIGNvbW1hbmRzIGluIGFy Yml0cmFyeSBvcmRlciwgYmVjYXVzZSBhIHJvbGUKQEAgLTExNjcsNiArMTMzMiw3IEBAIGR1bXBS b2xlTWVtYmVyc2hpcChQR2Nvbm4gKmNvbm4pCiAJCQkJY2hhcgkgICAqZ3JhbnRvcjsKIAkJCQlj aGFyCSAgICpzZXRfb3B0aW9uID0gInRydWUiOwogCQkJCWJvb2wJCWZvdW5kOworCQkJCVBRRXhw QnVmZmVyIGNyZWFRcnkgPSBjcmVhdGVQUUV4cEJ1ZmZlcigpOwogCiAJCQkJLyogSWYgd2UgYWxy ZWFkeSBkaWQgdGhpcyBncmFudCwgZG9uJ3QgZG8gaXQgYWdhaW4uICovCiAJCQkJaWYgKGRvbmVb aSAtIHN0YXJ0XSkKQEAgLTEyMjMsOCArMTM4OSw4IEBAIGR1bXBSb2xlTWVtYmVyc2hpcChQR2Nv bm4gKmNvbm4pCiAKIAkJCQkvKiBHZW5lcmF0ZSB0aGUgYWN0dWFsIEdSQU5UIHN0YXRlbWVudC4g Ki8KIAkJCQlyZXNldFBRRXhwQnVmZmVyKG9wdGJ1Zik7Ci0JCQkJZnByaW50ZihPUEYsICJHUkFO VCAlcyIsIGZtdElkKHJvbGUpKTsKLQkJCQlmcHJpbnRmKE9QRiwgIiBUTyAlcyIsIGZtdElkKG1l bWJlcikpOworCQkJCWFwcGVuZFBRRXhwQnVmZmVyKGNyZWFRcnksICJHUkFOVCAlcyIsIGZtdElk KHJvbGUpKTsKKwkJCQlhcHBlbmRQUUV4cEJ1ZmZlcihjcmVhUXJ5LCAiIFRPICVzIiwgZm10SWQo bWVtYmVyKSk7CiAJCQkJaWYgKCphZG1pbl9vcHRpb24gPT0gJ3QnKQogCQkJCQlhcHBlbmRQUUV4 cEJ1ZmZlclN0cihvcHRidWYsICJBRE1JTiBPUFRJT04iKTsKIAkJCQlpZiAoZHVtcF9ncmFudF9v cHRpb25zKQpAQCAtMTI0NSwxMCArMTQxMSwxNSBAQCBkdW1wUm9sZU1lbWJlcnNoaXAoUEdjb25u ICpjb25uKQogCQkJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihvcHRidWYsICJTRVQgRkFMU0UiKTsK IAkJCQl9CiAJCQkJaWYgKG9wdGJ1Zi0+ZGF0YVswXSAhPSAnXDAnKQotCQkJCQlmcHJpbnRmKE9Q RiwgIiBXSVRIICVzIiwgb3B0YnVmLT5kYXRhKTsKKwkJCQkJYXBwZW5kUFFFeHBCdWZmZXIoY3Jl YVFyeSwgIiBXSVRIICVzIiwgb3B0YnVmLT5kYXRhKTsKIAkJCQlpZiAoZHVtcF9ncmFudG9ycykK LQkJCQkJZnByaW50ZihPUEYsICIgR1JBTlRFRCBCWSAlcyIsIGZtdElkKGdyYW50b3IpKTsKLQkJ CQlmcHJpbnRmKE9QRiwgIjtcbiIpOworCQkJCQlhcHBlbmRQUUV4cEJ1ZmZlcihjcmVhUXJ5LCAi IEdSQU5URUQgQlkgJXMiLCBmbXRJZChncmFudG9yKSk7CisJCQkJYXBwZW5kUFFFeHBCdWZmZXIo Y3JlYVFyeSwgIjtcbiIpOworCisJCQkJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQor CQkJCQlmcHJpbnRmKE9QRiwgIiVzIiwgY3JlYVFyeS0+ZGF0YSk7CisJCQkJZWxzZQorCQkJCQlj cmVhdGVPbmVBcmNoaXZlRW50cnkoY3JlYVFyeS0+ZGF0YSwgImR1bXBSb2xlTWVtYmVyc2hpcCIp OwogCQkJfQogCQl9CiAKQEAgLTEyNjAsNyArMTQzMSw4IEBAIGR1bXBSb2xlTWVtYmVyc2hpcChQ R2Nvbm4gKmNvbm4pCiAJUFFjbGVhcihyZXMpOwogCWRlc3Ryb3lQUUV4cEJ1ZmZlcihidWYpOwog Ci0JZnByaW50ZihPUEYsICJcblxuIik7CisJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxs KQorCQlmcHJpbnRmKE9QRiwgIlxuXG4iKTsKIH0KIAogCkBAIC0xMjg4LDcgKzE0NjAsMTIgQEAg ZHVtcFJvbGVHVUNQcml2cyhQR2Nvbm4gKmNvbm4pCiAJCQkJCSAgICJPUkRFUiBCWSAxIik7CiAK IAlpZiAoUFFudHVwbGVzKHJlcykgPiAwKQotCQlmcHJpbnRmKE9QRiwgIi0tXG4tLSBSb2xlIHBy aXZpbGVnZXMgb24gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzXG4tLVxuXG4iKTsKKwl7CisJCWlm IChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkKKwkJCWZwcmludGYoT1BGLCAiLS1cbi0tIFJv bGUgcHJpdmlsZWdlcyBvbiBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnNcbi0tXG5cbiIpOworCQll bHNlCisJCQljcmVhdGVPbmVBcmNoaXZlRW50cnkoIi0tXG4tLSBSb2xlIHByaXZpbGVnZXMgb24g Y29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzXG4tLVxuXG4iLCAiQ09NTUVOVCIpOworCX0KIAogCWZv ciAoaSA9IDA7IGkgPCBQUW50dXBsZXMocmVzKTsgaSsrKQogCXsKQEAgLTEzMTIsMTQgKzE0ODks MTkgQEAgZHVtcFJvbGVHVUNQcml2cyhQR2Nvbm4gKmNvbm4pCiAJCQlleGl0X25pY2VseSgxKTsK IAkJfQogCi0JCWZwcmludGYoT1BGLCAiJXMiLCBidWYtPmRhdGEpOworCQlpZiAoYXJjaER1bXBG b3JtYXQgPT0gYXJjaE51bGwpCisJCQlmcHJpbnRmKE9QRiwgIiVzIiwgYnVmLT5kYXRhKTsKKwkJ ZWxzZQorCQkJY3JlYXRlT25lQXJjaGl2ZUVudHJ5KGJ1Zi0+ZGF0YSwgImR1bXBSb2xlR1VDUHJp dnMiKTsKIAogCQlmcmVlKGZwYXJuYW1lKTsKIAkJZGVzdHJveVBRRXhwQnVmZmVyKGJ1Zik7CiAJ fQogCiAJUFFjbGVhcihyZXMpOwotCWZwcmludGYoT1BGLCAiXG5cbiIpOworCisJaWYgKGFyY2hE dW1wRm9ybWF0ID09IGFyY2hOdWxsKQorCQlmcHJpbnRmKE9QRiwgIlxuXG4iKTsKIH0KIAogCkBA IC0xMzMxLDYgKzE1MTMsNyBAQCBkcm9wVGFibGVzcGFjZXMoUEdjb25uICpjb25uKQogewogCVBH cmVzdWx0ICAgKnJlczsKIAlpbnQJCQlpOworCVBRRXhwQnVmZmVyIGRlbFFyeSA9IGNyZWF0ZVBR RXhwQnVmZmVyKCk7CiAKIAkvKgogCSAqIEdldCBhbGwgdGFibGVzcGFjZXMgZXhjZXB0IGJ1aWx0 LWluIG9uZXMgKHdoaWNoIHdlIGFzc3VtZSBhcmUgbmFtZWQKQEAgLTEzNDIsMjAgKzE1MjUsMzEg QEAgZHJvcFRhYmxlc3BhY2VzKFBHY29ubiAqY29ubikKIAkJCQkJICAgIk9SREVSIEJZIDEiKTsK IAogCWlmIChQUW50dXBsZXMocmVzKSA+IDApCi0JCWZwcmludGYoT1BGLCAiLS1cbi0tIERyb3Ag dGFibGVzcGFjZXNcbi0tXG5cbiIpOworCXsKKwkJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hO dWxsKQorCQkJZnByaW50ZihPUEYsICItLVxuLS0gRHJvcCB0YWJsZXNwYWNlc1xuLS1cblxuIik7 CisJCWVsc2UKKwkJCWNyZWF0ZU9uZUFyY2hpdmVFbnRyeSgiLS1cbi0tIERyb3AgdGFibGVzcGFj ZXNcbi0tXG5cbiIsICJDT01NRU5UIik7CisJfQogCiAJZm9yIChpID0gMDsgaSA8IFBRbnR1cGxl cyhyZXMpOyBpKyspCiAJewogCQljaGFyCSAgICpzcGNuYW1lID0gUFFnZXR2YWx1ZShyZXMsIGks IDApOwogCi0JCWZwcmludGYoT1BGLCAiRFJPUCBUQUJMRVNQQUNFICVzJXM7XG4iLAorCQlhcHBl bmRQUUV4cEJ1ZmZlcihkZWxRcnksICJEUk9QIFRBQkxFU1BBQ0UgJXMlcztcbiIsCiAJCQkJaWZf ZXhpc3RzID8gIklGIEVYSVNUUyAiIDogIiIsCiAJCQkJZm10SWQoc3BjbmFtZSkpOworCisJCWlm IChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkKKwkJCWZwcmludGYoT1BGLCAiJXMiLCBkZWxR cnktPmRhdGEpOworCQllbHNlCisJCQljcmVhdGVPbmVBcmNoaXZlRW50cnkoZGVsUXJ5LT5kYXRh LCAiZHJvcFRhYmxlc3BhY2VzIik7CiAJfQogCiAJUFFjbGVhcihyZXMpOwogCi0JZnByaW50ZihP UEYsICJcblxuIik7CisJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQorCQlmcHJpbnRm KE9QRiwgIlxuXG4iKTsKIH0KIAogLyoKQEAgLTEzODIsNyArMTU3NiwxMiBAQCBkdW1wVGFibGVz cGFjZXMoUEdjb25uICpjb25uKQogCQkJCQkgICAiT1JERVIgQlkgMSIpOwogCiAJaWYgKFBRbnR1 cGxlcyhyZXMpID4gMCkKLQkJZnByaW50ZihPUEYsICItLVxuLS0gVGFibGVzcGFjZXNcbi0tXG5c biIpOworCXsKKwkJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQorCQkJZnByaW50ZihP UEYsICItLVxuLS0gVGFibGVzcGFjZXNcbi0tXG5cbiIpOworCQllbHNlCisJCQljcmVhdGVPbmVB cmNoaXZlRW50cnkoIi0tXG4tLSBUYWJsZXNwYWNlc1xuLS1cblxuIiwgIkNPTU1FTlQiKTsKKwl9 CiAKIAlmb3IgKGkgPSAwOyBpIDwgUFFudHVwbGVzKHJlcyk7IGkrKykKIAl7CkBAIC0xNDUxLDE0 ICsxNjUwLDE5IEBAIGR1bXBUYWJsZXNwYWNlcyhQR2Nvbm4gKmNvbm4pCiAJCQkJCQkJICJUQUJM RVNQQUNFIiwgc3BjbmFtZSwKIAkJCQkJCQkgYnVmKTsKIAotCQlmcHJpbnRmKE9QRiwgIiVzIiwg YnVmLT5kYXRhKTsKKwkJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQorCQkJZnByaW50 ZihPUEYsICIlcyIsIGJ1Zi0+ZGF0YSk7CisJCWVsc2UKKwkJCWNyZWF0ZU9uZUFyY2hpdmVFbnRy eShidWYtPmRhdGEsICJkdW1wVGFibGVzcGFjZXMiKTsKIAogCQlmcmVlKGZzcGNuYW1lKTsKIAkJ ZGVzdHJveVBRRXhwQnVmZmVyKGJ1Zik7CiAJfQogCiAJUFFjbGVhcihyZXMpOwotCWZwcmludGYo T1BGLCAiXG5cbiIpOworCisJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQorCQlmcHJp bnRmKE9QRiwgIlxuXG4iKTsKIH0KIAogCkBAIC0xNDgyLDcgKzE2ODYsMTIgQEAgZHJvcERCcyhQ R2Nvbm4gKmNvbm4pCiAJCQkJCSAgICJPUkRFUiBCWSBkYXRuYW1lIik7CiAKIAlpZiAoUFFudHVw bGVzKHJlcykgPiAwKQotCQlmcHJpbnRmKE9QRiwgIi0tXG4tLSBEcm9wIGRhdGFiYXNlcyAoZXhj ZXB0IHBvc3RncmVzIGFuZCB0ZW1wbGF0ZTEpXG4tLVxuXG4iKTsKKwl7CisJCWlmIChhcmNoRHVt cEZvcm1hdCA9PSBhcmNoTnVsbCkKKwkJCWZwcmludGYoT1BGLCAiLS1cbi0tIERyb3AgZGF0YWJh c2VzIChleGNlcHQgcG9zdGdyZXMgYW5kIHRlbXBsYXRlMSlcbi0tXG5cbiIpOworCQllbHNlCisJ CQljcmVhdGVPbmVBcmNoaXZlRW50cnkoIi0tXG4tLSBEcm9wIGRhdGFiYXNlcyAoZXhjZXB0IHBv c3RncmVzIGFuZCB0ZW1wbGF0ZTEpXG4tLVxuXG4iLCAiQ09NTUVOVCIpOworCX0KIAogCWZvciAo aSA9IDA7IGkgPCBQUW50dXBsZXMocmVzKTsgaSsrKQogCXsKQEAgLTE0OTcsMTUgKzE3MDYsMjMg QEAgZHJvcERCcyhQR2Nvbm4gKmNvbm4pCiAJCQlzdHJjbXAoZGJuYW1lLCAidGVtcGxhdGUwIikg IT0gMCAmJgogCQkJc3RyY21wKGRibmFtZSwgInBvc3RncmVzIikgIT0gMCkKIAkJewotCQkJZnBy aW50ZihPUEYsICJEUk9QIERBVEFCQVNFICVzJXM7XG4iLAorCQkJUFFFeHBCdWZmZXIgZGVsUXJ5 ID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsKKworCQkJYXBwZW5kUFFFeHBCdWZmZXIoZGVsUXJ5LCAi RFJPUCBEQVRBQkFTRSAlcyVzO1xuIiwKIAkJCQkJaWZfZXhpc3RzID8gIklGIEVYSVNUUyAiIDog IiIsCiAJCQkJCWZtdElkKGRibmFtZSkpOworCisJCQlpZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJj aE51bGwpCisJCQkJZnByaW50ZihPUEYsICIlcyIsIGRlbFFyeS0+ZGF0YSk7CisJCQllbHNlCisJ CQkJY3JlYXRlT25lQXJjaGl2ZUVudHJ5KGRlbFFyeS0+ZGF0YSwgIkRST1BfREFUQUJBU0UiKTsK IAkJfQogCX0KIAogCVBRY2xlYXIocmVzKTsKIAotCWZwcmludGYoT1BGLCAiXG5cbiIpOworCWlm IChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkKKwkJZnByaW50ZihPUEYsICJcblxuIik7CiB9 CiAKIApAQCAtMTUzMiw3ICsxNzQ5LDE4IEBAIGR1bXBVc2VyQ29uZmlnKFBHY29ubiAqY29ubiwg Y29uc3QgY2hhciAqdXNlcm5hbWUpCiAJCWNoYXIJICAgKnNhbml0aXplZDsKIAogCQlzYW5pdGl6 ZWQgPSBzYW5pdGl6ZV9saW5lKHVzZXJuYW1lLCB0cnVlKTsKLQkJZnByaW50ZihPUEYsICJcbi0t XG4tLSBVc2VyIENvbmZpZyBcIiVzXCJcbi0tXG5cbiIsIHNhbml0aXplZCk7CisKKwkJaWYgKGFy Y2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQorCQkJZnByaW50ZihPUEYsICJcbi0tXG4tLSBVc2Vy IENvbmZpZyBcIiVzXCJcbi0tXG5cbiIsIHNhbml0aXplZCk7CisJCWVsc2UKKwkJeworCQkJUFFF eHBCdWZmZXIJcXJ5ID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsKKworCQkJYXBwZW5kUFFFeHBCdWZm ZXIocXJ5LCAiXG4tLVxuLS0gVXNlciBDb25maWcgXCIlc1wiXG4tLVxuXG4iLCBzYW5pdGl6ZWQp OworCQkJY3JlYXRlT25lQXJjaGl2ZUVudHJ5KHFyeS0+ZGF0YSwgIkNPTU1FTlQiKTsKKwkJCWRl c3Ryb3lQUUV4cEJ1ZmZlcihxcnkpOworCQl9CisKIAkJZnJlZShzYW5pdGl6ZWQpOwogCX0KIApA QCAtMTU0Miw3ICsxNzcwLDExIEBAIGR1bXBVc2VyQ29uZmlnKFBHY29ubiAqY29ubiwgY29uc3Qg Y2hhciAqdXNlcm5hbWUpCiAJCW1ha2VBbHRlckNvbmZpZ0NvbW1hbmQoY29ubiwgUFFnZXR2YWx1 ZShyZXMsIGksIDApLAogCQkJCQkJCSAgICJST0xFIiwgdXNlcm5hbWUsIE5VTEwsIE5VTEwsCiAJ CQkJCQkJICAgYnVmKTsKLQkJZnByaW50ZihPUEYsICIlcyIsIGJ1Zi0+ZGF0YSk7CisKKwkJaWYg KGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQorCQkJZnByaW50ZihPUEYsICIlcyIsIGJ1Zi0+ ZGF0YSk7CisJCWVsc2UKKwkJCWNyZWF0ZU9uZUFyY2hpdmVFbnRyeShidWYtPmRhdGEsICJkdW1w VXNlckNvbmZpZyIpOwogCX0KIAogCVBRY2xlYXIocmVzKTsKQEAgLTE2MDgsMTAgKzE4NDAsMTMg QEAgZXhwYW5kX2RibmFtZV9wYXR0ZXJucyhQR2Nvbm4gKmNvbm4sCiAgKiBEdW1wIGNvbnRlbnRz IG9mIGRhdGFiYXNlcy4KICAqLwogc3RhdGljIHZvaWQKLWR1bXBEYXRhYmFzZXMoUEdjb25uICpj b25uKQorZHVtcERhdGFiYXNlcyhQR2Nvbm4gKmNvbm4sIEFyY2hpdmVGb3JtYXQgYXJjaER1bXBG b3JtYXQpCiB7CiAJUEdyZXN1bHQgICAqcmVzOwogCWludAkJCWk7CisJY2hhcgkJZGJfc3ViZGly W01BWFBHUEFUSF07CisJY2hhcgkJZGJmaWxlcGF0aFtNQVhQR1BBVEhdOworCUZJTEUJICAgKm1h cF9maWxlID0gTlVMTDsKIAogCS8qCiAJICogU2tpcCBkYXRhYmFzZXMgbWFya2VkIG5vdCBkYXRh bGxvd2Nvbm4sIHNpbmNlIHdlJ2QgYmUgdW5hYmxlIHRvIGNvbm5lY3QKQEAgLTE2MjUsMTkgKzE4 NjAsNDggQEAgZHVtcERhdGFiYXNlcyhQR2Nvbm4gKmNvbm4pCiAJICogZG9lc24ndCBoYXZlIHNv bWUgZmFpbHVyZSBtb2RlIHdpdGggLS1jbGVhbi4KIAkgKi8KIAlyZXMgPSBleGVjdXRlUXVlcnko Y29ubiwKLQkJCQkJICAgIlNFTEVDVCBkYXRuYW1lICIKKwkJCQkJICAgIlNFTEVDVCBkYXRuYW1l LCBvaWQgIgogCQkJCQkgICAiRlJPTSBwZ19kYXRhYmFzZSBkICIKIAkJCQkJICAgIldIRVJFIGRh dGFsbG93Y29ubiBBTkQgZGF0Y29ubmxpbWl0ICE9IC0yICIKIAkJCQkJICAgIk9SREVSIEJZIChk YXRuYW1lIDw+ICd0ZW1wbGF0ZTEnKSwgZGF0bmFtZSIpOwogCiAJaWYgKFBRbnR1cGxlcyhyZXMp ID4gMCkKLQkJZnByaW50ZihPUEYsICItLVxuLS0gRGF0YWJhc2VzXG4tLVxuXG4iKTsKKwl7CisJ CWlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkKKwkJCWZwcmludGYoT1BGLCAiLS1cbi0t IERhdGFiYXNlc1xuLS1cblxuIik7CisJCWVsc2UKKwkJCWNyZWF0ZU9uZUFyY2hpdmVFbnRyeSgi LS1cbi0tIERhdGFiYXNlc1xuLS1cblxuIiwgIkNPTU1FTlQiKTsKKwl9CisKKwkvKgorCSAqIElm IGRpcmVjdG9yeS90YXIvY3VzdG9tIGZvcm1hdCBpcyBzcGVjaWZpZWQsIGNyZWF0ZSBhIHN1YmRp cmVjdG9yeQorCSAqIHVuZGVyIHRoZSBtYWluIGRpcmVjdG9yeSBhbmQgZWFjaCBkYXRhYmFzZSBk dW1wIGZpbGUgb3Igc3ViZGlyZWN0b3J5CisJICogd2lsbCBiZSBjcmVhdGVkIGluIHRoYXQgc3Vi ZGlyZWN0b3J5IGJ5IHBnX2R1bXAuCisJICovCisgICBpZiAoYXJjaER1bXBGb3JtYXQgIT0gYXJj aE51bGwpCisgICB7CisJICAgY2hhciAgICAgICAgbWFwX2ZpbGVfcGF0aFtNQVhQR1BBVEhdOwor CisJICAgc25wcmludGYoZGJfc3ViZGlyLCBNQVhQR1BBVEgsICIlcy9kYXRhYmFzZXMiLCBmaWxl bmFtZSk7CisKKwkgICAvKiBDcmVhdGUgYSBzdWJkaXJlY3Rvcnkgd2l0aCAnZGF0YWJhc2VzJyBu YW1lIHVuZGVyIG1haW4gZGlyZWN0b3J5LiAqLworCSAgIGlmIChta2RpcihkYl9zdWJkaXIsIHBn X2Rpcl9jcmVhdGVfbW9kZSkgIT0gMCkKKwkJICAgcGdfZmF0YWwoImNvdWxkIG5vdCBjcmVhdGUg ZGlyZWN0b3J5IFwiJXNcIjogJW0iLCBkYl9zdWJkaXIpOworCisJICAgc25wcmludGYobWFwX2Zp bGVfcGF0aCwgTUFYUEdQQVRILCAiJXMvbWFwLmRhdCIsIGZpbGVuYW1lKTsKKworCSAgIC8qIENy ZWF0ZSBhIG1hcCBmaWxlICh0byBzdG9yZSBkYm9pZCBhbmQgZGJuYW1lKSAqLworCSAgIG1hcF9m aWxlID0gZm9wZW4obWFwX2ZpbGVfcGF0aCwgUEdfQklOQVJZX1cpOworCSAgIGlmICghbWFwX2Zp bGUpCisJCSAgIHBnX2ZhdGFsKCJjb3VsZCBub3Qgb3BlbiBmaWxlIFwiJXNcIjogJW0iLCBtYXBf ZmlsZV9wYXRoKTsKKyAgIH0KIAogCWZvciAoaSA9IDA7IGkgPCBQUW50dXBsZXMocmVzKTsgaSsr KQogCXsKIAkJY2hhcgkgICAqZGJuYW1lID0gUFFnZXR2YWx1ZShyZXMsIGksIDApOwogCQljaGFy CSAgICpzYW5pdGl6ZWQ7Ci0JCWNvbnN0IGNoYXIgKmNyZWF0ZV9vcHRzOworCQljaGFyICAgICAg ICpvaWQgPSBQUWdldHZhbHVlKHJlcywgaSwgMSk7CisJCWNvbnN0IGNoYXIgKmNyZWF0ZV9vcHRz ID0gIiI7CiAJCWludAkJCXJldDsKIAogCQkvKiBTa2lwIHRlbXBsYXRlMCwgZXZlbiBpZiBpdCdz IG5vdCBtYXJrZWQgIWRhdGFsbG93Y29ubi4gKi8KQEAgLTE2NTQsNyArMTkxOCwxOCBAQCBkdW1w RGF0YWJhc2VzKFBHY29ubiAqY29ubikKIAkJcGdfbG9nX2luZm8oImR1bXBpbmcgZGF0YWJhc2Ug XCIlc1wiIiwgZGJuYW1lKTsKIAogCQlzYW5pdGl6ZWQgPSBzYW5pdGl6ZV9saW5lKGRibmFtZSwg dHJ1ZSk7Ci0JCWZwcmludGYoT1BGLCAiLS1cbi0tIERhdGFiYXNlIFwiJXNcIiBkdW1wXG4tLVxu XG4iLCBzYW5pdGl6ZWQpOworCisJCWlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkKKwkJ CWZwcmludGYoT1BGLCAiLS1cbi0tIERhdGFiYXNlIFwiJXNcIiBkdW1wXG4tLVxuXG4iLCBzYW5p dGl6ZWQpOworCQllbHNlCisJCXsKKwkJCVBRRXhwQnVmZmVyIHFyeSA9IGNyZWF0ZVBRRXhwQnVm ZmVyKCk7CisKKwkJCWFwcGVuZFBRRXhwQnVmZmVyKHFyeSwgIi0tXG4tLSBEYXRhYmFzZSBcIiVz XCIgZHVtcFxuLS1cblxuIiwgc2FuaXRpemVkKTsKKwkJCWNyZWF0ZU9uZUFyY2hpdmVFbnRyeShx cnktPmRhdGEsICJDT01NRU5UIik7CisJCQlkZXN0cm95UFFFeHBCdWZmZXIocXJ5KTsKKwkJfQor CiAJCWZyZWUoc2FuaXRpemVkKTsKIAogCQkvKgpAQCAtMTY2OSwyNCArMTk0NCw0NiBAQCBkdW1w RGF0YWJhc2VzKFBHY29ubiAqY29ubikKIAkJewogCQkJaWYgKG91dHB1dF9jbGVhbikKIAkJCQlj cmVhdGVfb3B0cyA9ICItLWNsZWFuIC0tY3JlYXRlIjsKKwkJCS8qIFNpbmNlIHBnX2R1bXAgd29u J3QgZW1pdCBhIFxjb25uZWN0IGNvbW1hbmQsIHdlIG11c3QgKi8KKwkJCWVsc2UgaWYgKGFyY2hE dW1wRm9ybWF0ID09IGFyY2hOdWxsKQorCQkJCWZwcmludGYoT1BGLCAiXFxjb25uZWN0ICVzXG5c biIsIGRibmFtZSk7CiAJCQllbHNlCiAJCQl7Ci0JCQkJY3JlYXRlX29wdHMgPSAiIjsKLQkJCQkv KiBTaW5jZSBwZ19kdW1wIHdvbid0IGVtaXQgYSBcY29ubmVjdCBjb21tYW5kLCB3ZSBtdXN0ICov Ci0JCQkJZnByaW50ZihPUEYsICJcXGNvbm5lY3QgJXNcblxuIiwgZGJuYW1lKTsKKwkJCQlQUUV4 cEJ1ZmZlcglxcnkgPSBjcmVhdGVQUUV4cEJ1ZmZlcigpOworCisJCQkJYXBwZW5kUFFFeHBCdWZm ZXIocXJ5LCAiXFxjb25uZWN0ICVzXG5cbiIsIGRibmFtZSk7CisJCQkJY3JlYXRlT25lQXJjaGl2 ZUVudHJ5KHFyeS0+ZGF0YSwgIkNPTk5FQ1QiKTsKKwkJCQlkZXN0cm95UFFFeHBCdWZmZXIocXJ5 KTsKIAkJCX0KIAkJfQogCQllbHNlCiAJCQljcmVhdGVfb3B0cyA9ICItLWNyZWF0ZSI7CiAKLQkJ aWYgKGZpbGVuYW1lKQorCQlpZiAoZmlsZW5hbWUgJiYgYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51 bGwpCiAJCQlmY2xvc2UoT1BGKTsKIAotCQlyZXQgPSBydW5QZ0R1bXAoZGJuYW1lLCBjcmVhdGVf b3B0cyk7CisJCS8qCisJCSAqIElmIHRoaXMgaXMgbm90IGEgcGxhaW4gZm9ybWF0IGR1bXAsIHRo ZW4gYXBwZW5kIGRib2lkIGFuZCBkYm5hbWUgdG8KKwkJICogdGhlIG1hcC5kYXQgZmlsZS4KKwkJ ICovCisJCWlmIChhcmNoRHVtcEZvcm1hdCAhPSBhcmNoTnVsbCkKKwkJeworCQkJaWYgKGFyY2hE dW1wRm9ybWF0ID09IGFyY2hDdXN0b20pCisJCQkJc25wcmludGYoZGJmaWxlcGF0aCwgTUFYUEdQ QVRILCAiXCIlc1wiL1wiJXNcIi5kbXAiLCBkYl9zdWJkaXIsIG9pZCk7CisJCQllbHNlIGlmIChh cmNoRHVtcEZvcm1hdCA9PSBhcmNoVGFyKQorCQkJCXNucHJpbnRmKGRiZmlsZXBhdGgsIE1BWFBH UEFUSCwgIlwiJXNcIi9cIiVzXCIudGFyIiwgZGJfc3ViZGlyLCBvaWQpOworCQkJZWxzZQorCQkJ CXNucHJpbnRmKGRiZmlsZXBhdGgsIE1BWFBHUEFUSCwgIlwiJXNcIi9cIiVzXCIiLCBkYl9zdWJk aXIsIG9pZCk7CisKKwkJCS8qIFB1dCBvbmUgbGluZSBlbnRyeSBmb3IgZGJvaWQgYW5kIGRibmFt ZSBpbiBtYXAgZmlsZS4gKi8KKwkJCWZwcmludGYobWFwX2ZpbGUsICIlcyAlc1xuIiwgb2lkLCBk Ym5hbWUpOworCQl9CisKKwkJcmV0ID0gcnVuUGdEdW1wKGRibmFtZSwgY3JlYXRlX29wdHMsIGRi ZmlsZXBhdGgsIGFyY2hEdW1wRm9ybWF0KTsKIAkJaWYgKHJldCAhPSAwKQogCQkJcGdfZmF0YWwo InBnX2R1bXAgZmFpbGVkIG9uIGRhdGFiYXNlIFwiJXNcIiwgZXhpdGluZyIsIGRibmFtZSk7CiAK LQkJaWYgKGZpbGVuYW1lKQorCQlpZiAoZmlsZW5hbWUgJiYgYXJjaER1bXBGb3JtYXQgPT0gYXJj aE51bGwpCiAJCXsKIAkJCU9QRiA9IGZvcGVuKGZpbGVuYW1lLCBQR19CSU5BUllfQSk7CiAJCQlp ZiAoIU9QRikKQEAgLTE2OTUsNiArMTk5MiwxMCBAQCBkdW1wRGF0YWJhc2VzKFBHY29ubiAqY29u bikKIAkJfQogCX0KIAorCS8qIENsb3NlIG1hcCBmaWxlICovCisJaWYgKGFyY2hEdW1wRm9ybWF0 ICE9IGFyY2hOdWxsKQorCQlmY2xvc2UobWFwX2ZpbGUpOworCiAJUFFjbGVhcihyZXMpOwogfQog CkBAIC0xNzA0LDcgKzIwMDUsOCBAQCBkdW1wRGF0YWJhc2VzKFBHY29ubiAqY29ubikKICAqIFJ1 biBwZ19kdW1wIG9uIGRibmFtZSwgd2l0aCBzcGVjaWZpZWQgb3B0aW9ucy4KICAqLwogc3RhdGlj IGludAotcnVuUGdEdW1wKGNvbnN0IGNoYXIgKmRibmFtZSwgY29uc3QgY2hhciAqY3JlYXRlX29w dHMpCitydW5QZ0R1bXAoY29uc3QgY2hhciAqZGJuYW1lLCBjb25zdCBjaGFyICpjcmVhdGVfb3B0 cywgY2hhciAqZGJmaWxlLAorCQkgIEFyY2hpdmVGb3JtYXQgYXJjaER1bXBGb3JtYXQpCiB7CiAJ UFFFeHBCdWZmZXJEYXRhIGNvbm5zdHJidWY7CiAJUFFFeHBCdWZmZXJEYXRhIGNtZDsKQEAgLTE3 MTMsMTcgKzIwMTUsMzYgQEAgcnVuUGdEdW1wKGNvbnN0IGNoYXIgKmRibmFtZSwgY29uc3QgY2hh ciAqY3JlYXRlX29wdHMpCiAJaW5pdFBRRXhwQnVmZmVyKCZjb25uc3RyYnVmKTsKIAlpbml0UFFF eHBCdWZmZXIoJmNtZCk7CiAKLQlwcmludGZQUUV4cEJ1ZmZlcigmY21kLCAiXCIlc1wiICVzICVz IiwgcGdfZHVtcF9iaW4sCi0JCQkJCSAgcGdkdW1wb3B0cy0+ZGF0YSwgY3JlYXRlX29wdHMpOwot CiAJLyoKLQkgKiBJZiB3ZSBoYXZlIGEgZmlsZW5hbWUsIHVzZSB0aGUgdW5kb2N1bWVudGVkIHBs YWluLWFwcGVuZCBwZ19kdW1wCi0JICogZm9ybWF0LgorCSAqIElmIHRoaXMgaXMgbm90IGEgcGxh aW4gZm9ybWF0IGR1bXAsIHRoZW4gYXBwZW5kIGZpbGUgbmFtZSBhbmQgZHVtcAorCSAqIGZvcm1h dCB0byB0aGUgcGdfZHVtcCBjb21tYW5kIHRvIGdldCBhcmNoaXZlIGR1bXAuCiAJICovCi0JaWYg KGZpbGVuYW1lKQotCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmY21kLCAiIC1GYSAiKTsKKwlpZiAo YXJjaER1bXBGb3JtYXQgIT0gYXJjaE51bGwpCisJeworCQlwcmludGZQUUV4cEJ1ZmZlcigmY21k LCAiXCIlc1wiIC1mICVzICVzIiwgcGdfZHVtcF9iaW4sCisJCQkJCQkgIGRiZmlsZSwgY3JlYXRl X29wdHMpOworCisJCWlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoRGlyZWN0b3J5KQorCQkJYXBw ZW5kUFFFeHBCdWZmZXJTdHIoJmNtZCwgIiAgLS1mb3JtYXQ9ZGlyZWN0b3J5ICIpOworCQllbHNl IGlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoQ3VzdG9tKQorCQkJYXBwZW5kUFFFeHBCdWZmZXJT dHIoJmNtZCwgIiAgLS1mb3JtYXQ9Y3VzdG9tICIpOworCQllbHNlIGlmIChhcmNoRHVtcEZvcm1h dCA9PSBhcmNoVGFyKQorCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmNtZCwgIiAgLS1mb3JtYXQ9 dGFyICIpOworCX0KIAllbHNlCi0JCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZjbWQsICIgLUZwICIp OworCXsKKwkJcHJpbnRmUFFFeHBCdWZmZXIoJmNtZCwgIlwiJXNcIiAlcyAlcyIsIHBnX2R1bXBf YmluLAorCQkJCQkJICBwZ2R1bXBvcHRzLT5kYXRhLCBjcmVhdGVfb3B0cyk7CisKKwkJLyoKKwkJ ICogSWYgd2UgaGF2ZSBhIGZpbGVuYW1lLCB1c2UgdGhlIHVuZG9jdW1lbnRlZCBwbGFpbi1hcHBl bmQgcGdfZHVtcAorCQkgKiBmb3JtYXQuCisJCSAqLworCQlpZiAoZmlsZW5hbWUpCisJCQlhcHBl bmRQUUV4cEJ1ZmZlclN0cigmY21kLCAiIC1GYSAiKTsKKwkJZWxzZQorCQkJYXBwZW5kUFFFeHBC dWZmZXJTdHIoJmNtZCwgIiAtRnAgIik7CisJfQogCiAJLyoKIAkgKiBBcHBlbmQgdGhlIGRhdGFi YXNlIG5hbWUgdG8gdGhlIGFscmVhZHktY29uc3RydWN0ZWQgc3RlbSBvZiBjb25uZWN0aW9uCkBA IC0xODA3LDcgKzIxMjgsMTggQEAgZHVtcFRpbWVzdGFtcChjb25zdCBjaGFyICptc2cpCiAJdGlt ZV90CQlub3cgPSB0aW1lKE5VTEwpOwogCiAJaWYgKHN0cmZ0aW1lKGJ1Ziwgc2l6ZW9mKGJ1Ziks IFBHRFVNUF9TVFJGVElNRV9GTVQsIGxvY2FsdGltZSgmbm93KSkgIT0gMCkKLQkJZnByaW50ZihP UEYsICItLSAlcyAlc1xuXG4iLCBtc2csIGJ1Zik7CisJeworCQlpZiAoYXJjaER1bXBGb3JtYXQg PT0gYXJjaE51bGwpCisJCQlmcHJpbnRmKE9QRiwgIi0tICVzICVzXG5cbiIsIG1zZywgYnVmKTsK KwkJZWxzZQorCQl7CisJCQlQUUV4cEJ1ZmZlcglxcnkgPSBjcmVhdGVQUUV4cEJ1ZmZlcigpOwor CisJCQlhcHBlbmRQUUV4cEJ1ZmZlcihxcnksICItLSAlcyAlc1xuXG4iLCBtc2csIGJ1Zik7CisJ CQljcmVhdGVPbmVBcmNoaXZlRW50cnkocXJ5LT5kYXRhLCAiQ09NTUVOVCIpOworCQkJZGVzdHJv eVBRRXhwQnVmZmVyKHFyeSk7CisJCX0KKwl9CiB9CiAKIC8qCkBAIC0xODY4LDMgKzIyMDAsNjYg QEAgcmVhZF9kdW1wYWxsX2ZpbHRlcnMoY29uc3QgY2hhciAqZmlsZW5hbWUsIFNpbXBsZVN0cmlu Z0xpc3QgKnBhdHRlcm4pCiAKIAlmaWx0ZXJfZnJlZSgmZnN0YXRlKTsKIH0KKworLyoKKyAqIHBh cnNlRHVtcEZvcm1hdAorICoKKyAqIFRoaXMgd2lsbCB2YWxpZGF0ZSBkdW1wIGZvcm1hdHMuCisg Ki8KK3N0YXRpYyBBcmNoaXZlRm9ybWF0CitwYXJzZUR1bXBGb3JtYXQoY29uc3QgY2hhciAqZm9y bWF0KQoreworCUFyY2hpdmVGb3JtYXQgYXJjaER1bXBGb3JtYXQ7CisKKwlpZiAocGdfc3RyY2Fz ZWNtcChmb3JtYXQsICJjIikgPT0gMCkKKwkJYXJjaER1bXBGb3JtYXQgPSBhcmNoQ3VzdG9tOwor CWVsc2UgaWYgKHBnX3N0cmNhc2VjbXAoZm9ybWF0LCAiY3VzdG9tIikgPT0gMCkKKwkJYXJjaER1 bXBGb3JtYXQgPSBhcmNoQ3VzdG9tOworCWVsc2UgaWYgKHBnX3N0cmNhc2VjbXAoZm9ybWF0LCAi ZCIpID09IDApCisJCWFyY2hEdW1wRm9ybWF0ID0gYXJjaERpcmVjdG9yeTsKKwllbHNlIGlmIChw Z19zdHJjYXNlY21wKGZvcm1hdCwgImRpcmVjdG9yeSIpID09IDApCisJCWFyY2hEdW1wRm9ybWF0 ID0gYXJjaERpcmVjdG9yeTsKKwllbHNlIGlmIChwZ19zdHJjYXNlY21wKGZvcm1hdCwgInAiKSA9 PSAwKQorCQlhcmNoRHVtcEZvcm1hdCA9IGFyY2hOdWxsOworCWVsc2UgaWYgKHBnX3N0cmNhc2Vj bXAoZm9ybWF0LCAicGxhaW4iKSA9PSAwKQorCQlhcmNoRHVtcEZvcm1hdCA9IGFyY2hOdWxsOwor CWVsc2UgaWYgKHBnX3N0cmNhc2VjbXAoZm9ybWF0LCAidCIpID09IDApCisJCWFyY2hEdW1wRm9y bWF0ID0gYXJjaFRhcjsKKwllbHNlIGlmIChwZ19zdHJjYXNlY21wKGZvcm1hdCwgInRhciIpID09 IDApCisJCWFyY2hEdW1wRm9ybWF0ID0gYXJjaFRhcjsKKwllbHNlCisJCXBnX2ZhdGFsKCJ1bnJl Y29nbml6ZWQgb3V0cHV0IGZvcm1hdCBcIiVzXCI7IHBsZWFzZSBzcGVjaWZ5IFwiY1wiLCBcImRc IiwgXCJwXCIsIG9yIFwidFwiIiwKKwkJCQkgZm9ybWF0KTsKKworCXJldHVybiBhcmNoRHVtcEZv cm1hdDsKK30KKworLyoKKyAqIGNyZWF0ZUR1bXBJZAorICoKKyAqIFRoaXMgd2lsbCByZXR1cm4g bmV4dCBsYXN0IHVzZWQgb2lkLgorICovCitzdGF0aWMgaW50CitjcmVhdGVEdW1wSWQodm9pZCkK K3sKKwlyZXR1cm4gKytkdW1wSWRWYWw7Cit9CisKKy8qCisgKiBjcmVhdGVPbmVBcmNoaXZlRW50 cnkKKyAqCisgKiBUaGlzIGNyZWF0ZXMgb25lIGFyY2hpdmUgZW50cnkgYmFzZWQgb24gZm9ybWF0 LgorICovCitzdGF0aWMgdm9pZAorY3JlYXRlT25lQXJjaGl2ZUVudHJ5KGNvbnN0IGNoYXIgKnF1 ZXJ5LCBjb25zdCBjaGFyICp0YWcpCit7CisJQXNzZXJ0KGZvdXQgIT0gTlVMTCk7CisKKwlBcmNo aXZlRW50cnkoZm91dCwKKwkJCW5pbENhdGFsb2dJZCwgLyogY2F0YWxvZyBJRCAqLworCQkJY3Jl YXRlRHVtcElkKCksIC8qIGR1bXAgSUQgKi8KKwkJCUFSQ0hJVkVfT1BUUygudGFnID0gdGFnLAor CQkJCS5kZXNjcmlwdGlvbiA9IHRhZywKKwkJCQkuc2VjdGlvbiA9IFNFQ1RJT05fUFJFX0RBVEEs CisJCQkJLmNyZWF0ZVN0bXQgPSBxdWVyeSkpOworfQpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19k dW1wL3BnX3Jlc3RvcmUuYyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19yZXN0b3JlLmMKaW5kZXggYzk3 NzYzMDZjNWMuLjk3YTZiY2I2ZDMxIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfcmVz dG9yZS5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19yZXN0b3JlLmMKQEAgLTIsNyArMiw3IEBA CiAgKgogICogcGdfcmVzdG9yZS5jCiAgKglwZ19yZXN0b3JlIGlzIGFuIHV0aWxpdHkgZXh0cmFj dGluZyBwb3N0Z3JlcyBkYXRhYmFzZSBkZWZpbml0aW9ucwotICoJZnJvbSBhIGJhY2t1cCBhcmNo aXZlIGNyZWF0ZWQgYnkgcGdfZHVtcCB1c2luZyB0aGUgYXJjaGl2ZXIKKyAqCWZyb20gYSBiYWNr dXAgYXJjaGl2ZSBjcmVhdGVkIGJ5IHBnX2R1bXAvcGdfZHVtcGFsbCB1c2luZyB0aGUgYXJjaGl2 ZXIKICAqCWludGVyZmFjZS4KICAqCiAgKglwZ19yZXN0b3JlIHdpbGwgcmVhZCB0aGUgYmFja3Vw IGFyY2hpdmUgYW5kCkBAIC00MSwzMSArNDEsNjEgQEAKICNpbmNsdWRlICJwb3N0Z3Jlc19mZS5o IgogCiAjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgogI2lmZGVmIEhB VkVfVEVSTUlPU19ICiAjaW5jbHVkZSA8dGVybWlvcy5oPgogI2VuZGlmCiAKKyNpbmNsdWRlICJj b21tb24vc3RyaW5nLmgiCisjaW5jbHVkZSAiY29ubmVjdGRiLmgiCiAjaW5jbHVkZSAiZHVtcHV0 aWxzLmgiCiAjaW5jbHVkZSAiZmVfdXRpbHMvb3B0aW9uX3V0aWxzLmgiCisjaW5jbHVkZSAiZmVf dXRpbHMvc3RyaW5nX3V0aWxzLmgiCiAjaW5jbHVkZSAiZmlsdGVyLmgiCiAjaW5jbHVkZSAiZ2V0 b3B0X2xvbmcuaCIKICNpbmNsdWRlICJwYXJhbGxlbC5oIgogI2luY2x1ZGUgInBnX2JhY2t1cF91 dGlscy5oIgogCisKIHN0YXRpYyB2b2lkIHVzYWdlKGNvbnN0IGNoYXIgKnByb2duYW1lKTsKIHN0 YXRpYyB2b2lkIHJlYWRfcmVzdG9yZV9maWx0ZXJzKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBSZXN0 b3JlT3B0aW9ucyAqb3B0cyk7CitzdGF0aWMgYm9vbCBmaWxlX2V4aXN0c19pbl9kaXJlY3Rvcnko Y29uc3QgY2hhciAqZGlyLCBjb25zdCBjaGFyICpmaWxlbmFtZSk7CitzdGF0aWMgaW50CXJlc3Rv cmVfb25lX2RhdGFiYXNlKGNvbnN0IGNoYXIgKmlucHV0RmlsZVNwZWMsIFJlc3RvcmVPcHRpb25z ICpvcHRzLAorCQkJCQkJCQkgaW50IG51bVdvcmtlcnMsIGJvb2wgYXBwZW5kX2RhdGEsIGludCBu dW0sCisJCQkJCQkJCSBib29sIGdsb2JhbHNfb25seSk7CitzdGF0aWMgaW50IHJlc3RvcmVfZ2xv YmFsX29iamVjdHMoY29uc3QgY2hhciAqaW5wdXRGaWxlU3BlYywKKwkJUmVzdG9yZU9wdGlvbnMg Km9wdHMsIGludCBudW1Xb3JrZXJzLCBib29sIGFwcGVuZF9kYXRhLAorCQlpbnQgbnVtLCBib29s IGdsb2JhbHNfb25seSk7CitzdGF0aWMgaW50CXJlc3RvcmVfYWxsX2RhdGFiYXNlcyhjb25zdCBj aGFyICppbnB1dEZpbGVTcGVjLAorCQlTaW1wbGVTdHJpbmdMaXN0IGRiX2V4Y2x1ZGVfcGF0dGVy bnMsIFJlc3RvcmVPcHRpb25zICpvcHRzLCBpbnQgbnVtV29ya2Vycyk7CitzdGF0aWMgaW50CWdl dF9kYm5hbWVzX2xpc3RfdG9fcmVzdG9yZShQR2Nvbm4gKmNvbm4sCisJCQkJCQkJCQkJU2ltcGxl UHRyTGlzdCAqZGJuYW1lX29pZF9saXN0LAorCQkJCQkJCQkJCVNpbXBsZVN0cmluZ0xpc3QgZGJf ZXhjbHVkZV9wYXR0ZXJucyk7CitzdGF0aWMgaW50CWdldF9kYm5hbWVfb2lkX2xpc3RfZnJvbV9t ZmlsZShjb25zdCBjaGFyICpkdW1wZGlycGF0aCwKKwkJCQkJCQkJCQkgICBTaW1wbGVQdHJMaXN0 ICpkYm5hbWVfb2lkX2xpc3QpOworCisvKgorICogU3RvcmVzIGEgZGF0YWJhc2UgT0lEIGFuZCB0 aGUgY29ycmVzcG9uZGluZyBuYW1lLgorICovCit0eXBlZGVmIHN0cnVjdCBEYk9pZE5hbWUKK3sK KwlPaWQJCQlvaWQ7CisJY2hhcgkJc3RyW0ZMRVhJQkxFX0FSUkFZX01FTUJFUl07IC8qIG51bGwt dGVybWluYXRlZCBzdHJpbmcgaGVyZSAqLworfSBEYk9pZE5hbWU7CisKIAogaW50CiBtYWluKGlu dCBhcmdjLCBjaGFyICoqYXJndikKIHsKIAlSZXN0b3JlT3B0aW9ucyAqb3B0czsKIAlpbnQJCQlj OwotCWludAkJCWV4aXRfY29kZTsKIAlpbnQJCQludW1Xb3JrZXJzID0gMTsKLQlBcmNoaXZlICAg ICpBSDsKIAljaGFyCSAgICppbnB1dEZpbGVTcGVjOwogCWJvb2wJCWRhdGFfb25seSA9IGZhbHNl OwogCWJvb2wJCXNjaGVtYV9vbmx5ID0gZmFsc2U7CisJaW50CQkJbl9lcnJvcnMgPSAwOworCWJv b2wJCWdsb2JhbHNfb25seSA9IGZhbHNlOworCVNpbXBsZVN0cmluZ0xpc3QgZGJfZXhjbHVkZV9w YXR0ZXJucyA9IHtOVUxMLCBOVUxMfTsKIAlzdGF0aWMgaW50CWRpc2FibGVfdHJpZ2dlcnMgPSAw OwogCXN0YXRpYyBpbnQJZW5hYmxlX3Jvd19zZWN1cml0eSA9IDA7CiAJc3RhdGljIGludAlpZl9l eGlzdHMgPSAwOwpAQCAtODksNiArMTE5LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3Yp CiAJCXsiY2xlYW4iLCAwLCBOVUxMLCAnYyd9LAogCQl7ImNyZWF0ZSIsIDAsIE5VTEwsICdDJ30s CiAJCXsiZGF0YS1vbmx5IiwgMCwgTlVMTCwgJ2EnfSwKKwkJeyJnbG9iYWxzLW9ubHkiLCAwLCBO VUxMLCAnZyd9LAogCQl7ImRibmFtZSIsIDEsIE5VTEwsICdkJ30sCiAJCXsiZXhpdC1vbi1lcnJv ciIsIDAsIE5VTEwsICdlJ30sCiAJCXsiZXhjbHVkZS1zY2hlbWEiLCAxLCBOVUxMLCAnTid9LApA QCAtMTQyLDYgKzE3Myw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQl7InN0YXRp c3RpY3Mtb25seSIsIG5vX2FyZ3VtZW50LCAmc3RhdGlzdGljc19vbmx5LCAxfSwKIAkJeyJmaWx0 ZXIiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgNH0sCiAJCXsicmVzdHJpY3Qta2V5IiwgcmVx dWlyZWRfYXJndW1lbnQsIE5VTEwsIDZ9LAorCQl7ImV4Y2x1ZGUtZGF0YWJhc2UiLCByZXF1aXJl ZF9hcmd1bWVudCwgTlVMTCwgN30sCiAKIAkJe05VTEwsIDAsIE5VTEwsIDB9CiAJfTsKQEAgLTE3 MCw3ICsyMDIsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJfQogCX0KIAotCXdo aWxlICgoYyA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsICJhY0NkOmVmOkY6aDpJOmo6bEw6bjpO Ok9wOlA6UnNTOnQ6VDpVOnZ3V3gxIiwKKwl3aGlsZSAoKGMgPSBnZXRvcHRfbG9uZyhhcmdjLCBh cmd2LCAiYWNDZDplZjpGOmdoOkk6ajpsTDpuOk46T3A6UDpSc1M6dDpUOlU6dndXeDEiLAogCQkJ CQkJCWNtZG9wdHMsIE5VTEwpKSAhPSAtMSkKIAl7CiAJCXN3aXRjaCAoYykKQEAgLTE5NywxMSAr MjI5LDE0IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQkJCWlmIChzdHJsZW4ob3B0 YXJnKSAhPSAwKQogCQkJCQlvcHRzLT5mb3JtYXROYW1lID0gcGdfc3RyZHVwKG9wdGFyZyk7CiAJ CQkJYnJlYWs7CisJCQljYXNlICdnJzoKKwkJCQkvKiByZXN0b3JlIG9ubHkgZ2xvYmFsIHNxbCBj b21tYW5kcy4gKi8KKwkJCQlnbG9iYWxzX29ubHkgPSB0cnVlOworCQkJCWJyZWFrOwogCQkJY2Fz ZSAnaCc6CiAJCQkJaWYgKHN0cmxlbihvcHRhcmcpICE9IDApCiAJCQkJCW9wdHMtPmNwYXJhbXMu cGdob3N0ID0gcGdfc3RyZHVwKG9wdGFyZyk7CiAJCQkJYnJlYWs7Ci0KIAkJCWNhc2UgJ2onOgkJ CS8qIG51bWJlciBvZiByZXN0b3JlIGpvYnMgKi8KIAkJCQlpZiAoIW9wdGlvbl9wYXJzZV9pbnQo b3B0YXJnLCAiLWovLS1qb2JzIiwgMSwKIAkJCQkJCQkJCSAgUEdfTUFYX0pPQlMsCkBAIC0zMjEs NiArMzU2LDEwIEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQkJCW9wdHMtPnJlc3Ry aWN0X2tleSA9IHBnX3N0cmR1cChvcHRhcmcpOwogCQkJCWJyZWFrOwogCisJCQljYXNlIDc6CQkJ CS8qIGRhdGFiYXNlIHBhdHRlcm5zIHRvIHNraXAgKi8KKwkJCQlzaW1wbGVfc3RyaW5nX2xpc3Rf YXBwZW5kKCZkYl9leGNsdWRlX3BhdHRlcm5zLCBvcHRhcmcpOworCQkJCWJyZWFrOworCiAJCQlk ZWZhdWx0OgogCQkJCS8qIGdldG9wdF9sb25nIGFscmVhZHkgZW1pdHRlZCBhIGNvbXBsYWludCAq LwogCQkJCXBnX2xvZ19lcnJvcl9oaW50KCJUcnkgXCIlcyAtLWhlbHBcIiBmb3IgbW9yZSBpbmZv cm1hdGlvbi4iLCBwcm9nbmFtZSk7CkBAIC0zNDcsNiArMzg2LDEzIEBAIG1haW4oaW50IGFyZ2Ms IGNoYXIgKiphcmd2KQogCWlmICghb3B0cy0+Y3BhcmFtcy5kYm5hbWUgJiYgIW9wdHMtPmZpbGVu YW1lICYmICFvcHRzLT50b2NTdW1tYXJ5KQogCQlwZ19mYXRhbCgib25lIG9mIC1kLy0tZGJuYW1l IGFuZCAtZi8tLWZpbGUgbXVzdCBiZSBzcGVjaWZpZWQiKTsKIAorCWlmIChkYl9leGNsdWRlX3Bh dHRlcm5zLmhlYWQgIT0gTlVMTCAmJiBnbG9iYWxzX29ubHkpCisJeworCQlwZ19sb2dfZXJyb3Io Im9wdGlvbiAtLWV4Y2x1ZGUtZGF0YWJhc2UgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIgd2l0aCAt Zy8tLWdsb2JhbHMtb25seSIpOworCQlwZ19sb2dfZXJyb3JfaGludCgiVHJ5IFwiJXMgLS1oZWxw XCIgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiwgcHJvZ25hbWUpOworCQlleGl0X25pY2VseSgxKTsK Kwl9CisKIAkvKiBTaG91bGQgZ2V0IGF0IG1vc3Qgb25lIG9mIC1kIGFuZCAtZiwgZWxzZSB1c2Vy IGlzIGNvbmZ1c2VkICovCiAJaWYgKG9wdHMtPmNwYXJhbXMuZGJuYW1lKQogCXsKQEAgLTQ3Miw2 ICs1MTgsMTA1IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQkJCQkgb3B0cy0+Zm9y bWF0TmFtZSk7CiAJfQogCisJLyoKKwkgKiBJZiBtYXAuZGF0IGZpbGUgaXMgcHJlc2VudCwgdGhl biByZXN0b3JlIGFsbCB0aGUKKwkgKiBkYXRhYmFzZXMgZnJvbSBtYXAuZGF0ICwgYnV0IHNraXAg cmVzdG9yaW5nIHRob3NlIG1hdGNoaW5nCisJICogLS1leGNsdWRlLWRhdGFiYXNlIHBhdHRlcm5z LgorCSAqLworCWlmIChpbnB1dEZpbGVTcGVjICE9IE5VTEwgJiYKKwkJCShmaWxlX2V4aXN0c19p bl9kaXJlY3RvcnkoaW5wdXRGaWxlU3BlYywgIm1hcC5kYXQiKSB8fAorCQkJIGZpbGVfZXhpc3Rz X2luX2RpcmVjdG9yeShpbnB1dEZpbGVTcGVjLCAidG9jLnRhciIpIHx8CisJCQkgZmlsZV9leGlz dHNfaW5fZGlyZWN0b3J5KGlucHV0RmlsZVNwZWMsICJ0b2MuZG1wIikpKQorCXsKKwkJY2hhciAg ICAgICAgZ2xvYmFsX3BhdGhbTUFYUEdQQVRIXTsKKworCQlpZiAoZmlsZV9leGlzdHNfaW5fZGly ZWN0b3J5KGlucHV0RmlsZVNwZWMsICJ0b2MudGFyIikpCisJCQlzbnByaW50ZihnbG9iYWxfcGF0 aCwgTUFYUEdQQVRILCAiJXMvdG9jLnRhciIsIGlucHV0RmlsZVNwZWMpOworCQllbHNlIGlmIChm aWxlX2V4aXN0c19pbl9kaXJlY3RvcnkoaW5wdXRGaWxlU3BlYywgInRvYy5kbXAiKSkKKwkJCXNu cHJpbnRmKGdsb2JhbF9wYXRoLCBNQVhQR1BBVEgsICIlcy90b2MuZG1wIiwgaW5wdXRGaWxlU3Bl Yyk7CisJCWVsc2UKKwkJCXNucHJpbnRmKGdsb2JhbF9wYXRoLCBNQVhQR1BBVEgsICIlcyIsIGlu cHV0RmlsZVNwZWMpOworCisJCS8qCisJCSAqIENhbiBvbmx5IHVzZSAtLWxpc3Qgb3IgLS11c2Ut bGlzdCBvcHRpb25zIHdpdGggYSBzaW5nbGUgZGF0YWJhc2UKKwkJICogZHVtcC4KKwkJICovCisJ CWlmIChvcHRzLT50b2NTdW1tYXJ5KQorCQkJcGdfZmF0YWwoIm9wdGlvbiAtbC8tLWxpc3QgY2Fu bm90IGJlIHVzZWQgd2hlbiByZXN0b3JpbmcgYW4gYXJjaGl2ZSBjcmVhdGVkIGJ5IHBnX2R1bXBh bGwiKTsKKwkJZWxzZSBpZiAob3B0cy0+dG9jRmlsZSkKKwkJCXBnX2ZhdGFsKCJvcHRpb24gLUwv LS11c2UtbGlzdCBjYW5ub3QgYmUgdXNlZCB3aGVuIHJlc3RvcmluZyBhbiBhcmNoaXZlIGNyZWF0 ZWQgYnkgcGdfZHVtcGFsbCIpOworCisJCS8qCisJCSAqIFRvIHJlc3RvcmUgZnJvbSBhIHBnX2R1 bXBhbGwgYXJjaGl2ZSwgLUMgKGNyZWF0ZSBkYXRhYmFzZSkgb3B0aW9uCisJCSAqIG11c3QgYmUg c3BlY2lmaWVkIHVubGVzcyB3ZSBhcmUgb25seSByZXN0b3JpbmcgZ2xvYmFscy4KKwkJICovCisJ CWlmICghZ2xvYmFsc19vbmx5ICYmIG9wdHMtPmNyZWF0ZURCICE9IDEpCisJCXsKKwkJCXBnX2xv Z19lcnJvcigib3B0aW9uIC1DLy0tY3JlYXRlIG11c3QgYmUgc3BlY2lmaWVkIHdoZW4gcmVzdG9y aW5nIGFuIGFyY2hpdmUgY3JlYXRlZCBieSBwZ19kdW1wYWxsIik7CisJCQlwZ19sb2dfZXJyb3Jf aGludCgiVHJ5IFwiJXMgLS1oZWxwXCIgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiwgcHJvZ25hbWUp OworCQkJcGdfbG9nX2Vycm9yX2hpbnQoIkluZGl2aWR1YWwgZGF0YWJhc2VzIGNhbiBiZSByZXN0 b3JlZCB1c2luZyB0aGVpciBzcGVjaWZpYyBhcmNoaXZlcy4iKTsKKwkJCWV4aXRfbmljZWx5KDEp OworCQl9CisKKwkJLyogSWYgZ2xvYmFscy1vbmx5LCB0aGVuIHJldHVybiBmcm9tIGhlcmUuICov CisJCWlmIChnbG9iYWxzX29ubHkpCisJCXsKKwkJCW5fZXJyb3JzID0gcmVzdG9yZV9nbG9iYWxf b2JqZWN0cyhnbG9iYWxfcGF0aCwgb3B0cywgbnVtV29ya2VycywgZmFsc2UsIDAsIGdsb2JhbHNf b25seSk7CisKKwkJCXBnX2xvZ19pbmZvKCJkYXRhYmFzZSByZXN0b3Jpbmcgc2tpcHBlZCBiZWNh dXNlIG9wdGlvbiAtZy8tLWdsb2JhbHMtb25seSB3YXMgc3BlY2lmaWVkIik7CisJCX0KKwkJZWxz ZQorCQl7CisJCQkvKiBOb3cgcmVzdG9yZSBhbGwgdGhlIGRhdGFiYXNlcyBmcm9tIG1hcC5kYXQg Ki8KKwkJCW5fZXJyb3JzID0gcmVzdG9yZV9hbGxfZGF0YWJhc2VzKGlucHV0RmlsZVNwZWMsIGRi X2V4Y2x1ZGVfcGF0dGVybnMsCisJCQkJCQkJCQkJCSBvcHRzLCBudW1Xb3JrZXJzKTsKKwkJfQor CisJCS8qIEZyZWUgZGIgcGF0dGVybiBsaXN0LiAqLworCQlzaW1wbGVfc3RyaW5nX2xpc3RfZGVz dHJveSgmZGJfZXhjbHVkZV9wYXR0ZXJucyk7CisJfQorCWVsc2UgLyogcHJvY2VzcyBpZiBtYXAu ZGF0IGZpbGUgZG9lcyBub3QgZXhpc3QuICovCisJCW5fZXJyb3JzID0gcmVzdG9yZV9vbmVfZGF0 YWJhc2UoaW5wdXRGaWxlU3BlYywgb3B0cywKKwkJCQludW1Xb3JrZXJzLCBmYWxzZSwgMCwgZ2xv YmFsc19vbmx5KTsKKworCS8qIERvbmUsIHByaW50IGEgc3VtbWFyeSBvZiBpZ25vcmVkIGVycm9y cyBkdXJpbmcgcmVzdG9yZS4gKi8KKwlpZiAobl9lcnJvcnMpCisJeworCQlwZ19sb2dfd2Fybmlu ZygiZXJyb3JzIGlnbm9yZWQgb24gcmVzdG9yZTogJWQiLCBuX2Vycm9ycyk7CisJCXJldHVybiAx OworCX0KKworCXJldHVybiAwOworfQorCisvKgorICogcmVzdG9yZV9nbG9iYWxfb2JqZWN0cwor ICoKKyAqIFRoaXMgcmVzdG9yZSBhbGwgZ2xvYmFsIG9iamVjdHMuCisgKgorICogSWYgZ2xvYmFs c19vbmx5IGlzIHNldCwgdGhlbiBza2lwIERST1AgREFUQUJBU0UgY29tbWFuZHMgZnJvbSByZXN0 b3JlLgorICovCitzdGF0aWMgaW50IHJlc3RvcmVfZ2xvYmFsX29iamVjdHMoY29uc3QgY2hhciAq aW5wdXRGaWxlU3BlYywgUmVzdG9yZU9wdGlvbnMgKm9wdHMsCisJCWludCBudW1Xb3JrZXJzLCBi b29sIGFwcGVuZF9kYXRhLCBpbnQgbnVtLCBib29sIGdsb2JhbHNfb25seSkKK3sKKwlyZXR1cm4g cmVzdG9yZV9vbmVfZGF0YWJhc2UoaW5wdXRGaWxlU3BlYywgb3B0cywgbnVtV29ya2VycywKKwkJ CWFwcGVuZF9kYXRhLCBudW0sIGdsb2JhbHNfb25seSk7Cit9CisKKy8qCisgKiByZXN0b3JlX29u ZV9kYXRhYmFzZQorICoKKyAqIFRoaXMgd2lsbCByZXN0b3JlIG9uZSBkYXRhYmFzZSB1c2luZyB0 b2MuZGF0IGZpbGUuCisgKgorICogcmV0dXJucyB0aGUgbnVtYmVyIG9mIGVycm9ycyB3aGlsZSBk b2luZyByZXN0b3JlLgorICovCitzdGF0aWMgaW50CityZXN0b3JlX29uZV9kYXRhYmFzZShjb25z dCBjaGFyICppbnB1dEZpbGVTcGVjLCBSZXN0b3JlT3B0aW9ucyAqb3B0cywKKwkJCQkJIGludCBu dW1Xb3JrZXJzLCBib29sIGFwcGVuZF9kYXRhLCBpbnQgbnVtLCBib29sIGdsb2JhbHNfb25seSkK K3sKKwlBcmNoaXZlICAgICpBSDsKKwlpbnQJCQluX2Vycm9yczsKKwogCUFIID0gT3BlbkFyY2hp dmUoaW5wdXRGaWxlU3BlYywgb3B0cy0+Zm9ybWF0KTsKIAogCVNldEFyY2hpdmVPcHRpb25zKEFI LCBOVUxMLCBvcHRzKTsKQEAgLTQ3OSw5ICs2MjQsMTUgQEAgbWFpbihpbnQgYXJnYywgY2hhciAq KmFyZ3YpCiAJLyoKIAkgKiBXZSBkb24ndCBoYXZlIGEgY29ubmVjdGlvbiB5ZXQgYnV0IHRoYXQg ZG9lc24ndCBtYXR0ZXIuIFRoZSBjb25uZWN0aW9uCiAJICogaXMgaW5pdGlhbGl6ZWQgdG8gTlVM TCBhbmQgaWYgd2UgdGVybWluYXRlIHRocm91Z2ggZXhpdF9uaWNlbHkoKSB3aGlsZQotCSAqIGl0 J3Mgc3RpbGwgTlVMTCwgdGhlIGNsZWFudXAgZnVuY3Rpb24gd2lsbCBqdXN0IGJlIGEgbm8tb3Au CisJICogaXQncyBzdGlsbCBOVUxMLCB0aGUgY2xlYW51cCBmdW5jdGlvbiB3aWxsIGp1c3QgYmUg YSBuby1vcC4gSWYgd2UgYXJlCisJICogcmVzdG9yaW5nIG11bHRpcGxlIGRhdGFiYXNlcywgdGhl biBvbmx5IHVwZGF0ZSBBWCBoYW5kbGUgZm9yIGNsZWFudXAgYXMKKwkgKiB0aGUgcHJldmlvdXMg ZW50cnkgd2FzIGFscmVhZHkgaW4gdGhlIGFycmF5IGFuZCB3ZSBoYWQgY2xvc2VkIHByZXZpb3Vz CisJICogY29ubmVjdGlvbiwgc28gd2UgY2FuIHVzZSB0aGUgc2FtZSBhcnJheSBzbG90LgogCSAq LwotCW9uX2V4aXRfY2xvc2VfYXJjaGl2ZShBSCk7CisJaWYgKCFhcHBlbmRfZGF0YSB8fCBudW0g PT0gMCkKKwkJb25fZXhpdF9jbG9zZV9hcmNoaXZlKEFIKTsKKwllbHNlCisJCXJlcGxhY2Vfb25f ZXhpdF9jbG9zZV9hcmNoaXZlKEFIKTsKIAogCS8qIExldCB0aGUgYXJjaGl2ZXIga25vdyBob3cg bm9pc3kgdG8gYmUgKi8KIAlBSC0+dmVyYm9zZSA9IG9wdHMtPnZlcmJvc2U7CkBAIC01MDEsMjUg KzY1MiwyMSBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAllbHNlCiAJewogCQlQcm9j ZXNzQXJjaGl2ZVJlc3RvcmVPcHRpb25zKEFIKTsKLQkJUmVzdG9yZUFyY2hpdmUoQUgpOworCQlS ZXN0b3JlQXJjaGl2ZShBSCwgYXBwZW5kX2RhdGEsIGdsb2JhbHNfb25seSk7CiAJfQogCi0JLyog ZG9uZSwgcHJpbnQgYSBzdW1tYXJ5IG9mIGlnbm9yZWQgZXJyb3JzICovCi0JaWYgKEFILT5uX2Vy cm9ycykKLQkJcGdfbG9nX3dhcm5pbmcoImVycm9ycyBpZ25vcmVkIG9uIHJlc3RvcmU6ICVkIiwg QUgtPm5fZXJyb3JzKTsKKwluX2Vycm9ycyA9IEFILT5uX2Vycm9yczsKIAogCS8qIEFIIG1heSBi ZSBmcmVlZCBpbiBDbG9zZUFyY2hpdmU/ICovCi0JZXhpdF9jb2RlID0gQUgtPm5fZXJyb3JzID8g MSA6IDA7Ci0KIAlDbG9zZUFyY2hpdmUoQUgpOwogCi0JcmV0dXJuIGV4aXRfY29kZTsKKwlyZXR1 cm4gbl9lcnJvcnM7CiB9CiAKIHN0YXRpYyB2b2lkCiB1c2FnZShjb25zdCBjaGFyICpwcm9nbmFt ZSkKIHsKLQlwcmludGYoXygiJXMgcmVzdG9yZXMgYSBQb3N0Z3JlU1FMIGRhdGFiYXNlIGZyb20g YW4gYXJjaGl2ZSBjcmVhdGVkIGJ5IHBnX2R1bXAuXG5cbiIpLCBwcm9nbmFtZSk7CisJcHJpbnRm KF8oIiVzIHJlc3RvcmVzIFBvc3RncmVTUUwgZGF0YWJhc2VzIGZyb20gYXJjaGl2ZXMgY3JlYXRl ZCBieSBwZ19kdW1wIG9yIHBnX2R1bXBhbGwuXG5cbiIpLCBwcm9nbmFtZSk7CiAJcHJpbnRmKF8o IlVzYWdlOlxuIikpOwogCXByaW50ZihfKCIgICVzIFtPUFRJT05dLi4uIFtGSUxFXVxuIiksIHBy b2duYW1lKTsKIApAQCAtNTM3LDYgKzY4NCw3IEBAIHVzYWdlKGNvbnN0IGNoYXIgKnByb2duYW1l KQogCXByaW50ZihfKCIgIC1jLCAtLWNsZWFuICAgICAgICAgICAgICAgICAgY2xlYW4gKGRyb3Ap IGRhdGFiYXNlIG9iamVjdHMgYmVmb3JlIHJlY3JlYXRpbmdcbiIpKTsKIAlwcmludGYoXygiICAt QywgLS1jcmVhdGUgICAgICAgICAgICAgICAgIGNyZWF0ZSB0aGUgdGFyZ2V0IGRhdGFiYXNlXG4i KSk7CiAJcHJpbnRmKF8oIiAgLWUsIC0tZXhpdC1vbi1lcnJvciAgICAgICAgICBleGl0IG9uIGVy cm9yLCBkZWZhdWx0IGlzIHRvIGNvbnRpbnVlXG4iKSk7CisJcHJpbnRmKF8oIiAgLWcsIC0tZ2xv YmFscy1vbmx5ICAgICAgICAgICByZXN0b3JlIG9ubHkgZ2xvYmFsIG9iamVjdHMsIG5vIGRhdGFi YXNlc1xuIikpOwogCXByaW50ZihfKCIgIC1JLCAtLWluZGV4PU5BTUUgICAgICAgICAgICAgcmVz dG9yZSBuYW1lZCBpbmRleFxuIikpOwogCXByaW50ZihfKCIgIC1qLCAtLWpvYnM9TlVNICAgICAg ICAgICAgICAgdXNlIHRoaXMgbWFueSBwYXJhbGxlbCBqb2JzIHRvIHJlc3RvcmVcbiIpKTsKIAlw cmludGYoXygiICAtTCwgLS11c2UtbGlzdD1GSUxFTkFNRSAgICAgIHVzZSB0YWJsZSBvZiBjb250 ZW50cyBmcm9tIHRoaXMgZmlsZSBmb3JcbiIKQEAgLTU1Myw2ICs3MDEsNyBAQCB1c2FnZShjb25z dCBjaGFyICpwcm9nbmFtZSkKIAlwcmludGYoXygiICAtMSwgLS1zaW5nbGUtdHJhbnNhY3Rpb24g ICAgIHJlc3RvcmUgYXMgYSBzaW5nbGUgdHJhbnNhY3Rpb25cbiIpKTsKIAlwcmludGYoXygiICAt LWRpc2FibGUtdHJpZ2dlcnMgICAgICAgICAgIGRpc2FibGUgdHJpZ2dlcnMgZHVyaW5nIGRhdGEt b25seSByZXN0b3JlXG4iKSk7CiAJcHJpbnRmKF8oIiAgLS1lbmFibGUtcm93LXNlY3VyaXR5ICAg ICAgICBlbmFibGUgcm93IHNlY3VyaXR5XG4iKSk7CisJcHJpbnRmKF8oIiAgLS1leGNsdWRlLWRh dGFiYXNlPVBBVFRFUk4gICBkbyBub3QgcmVzdG9yZSB0aGUgc3BlY2lmaWVkIGRhdGFiYXNlKHMp XG4iKSk7CiAJcHJpbnRmKF8oIiAgLS1maWx0ZXI9RklMRU5BTUUgICAgICAgICAgICByZXN0b3Jl IG9yIHNraXAgb2JqZWN0cyBiYXNlZCBvbiBleHByZXNzaW9uc1xuIgogCQkJICIgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaW4gRklMRU5BTUVcbiIpKTsKIAlwcmludGYoXygiICAtLWlm LWV4aXN0cyAgICAgICAgICAgICAgICAgIHVzZSBJRiBFWElTVFMgd2hlbiBkcm9wcGluZyBvYmpl Y3RzXG4iKSk7CkBAIC01ODgsOCArNzM3LDggQEAgdXNhZ2UoY29uc3QgY2hhciAqcHJvZ25hbWUp CiAJcHJpbnRmKF8oIiAgLS1yb2xlPVJPTEVOQU1FICAgICAgICAgIGRvIFNFVCBST0xFIGJlZm9y ZSByZXN0b3JlXG4iKSk7CiAKIAlwcmludGYoXygiXG4iCi0JCQkgIlRoZSBvcHRpb25zIC1JLCAt biwgLU4sIC1QLCAtdCwgLVQsIGFuZCAtLXNlY3Rpb24gY2FuIGJlIGNvbWJpbmVkIGFuZCBzcGVj aWZpZWRcbiIKLQkJCSAibXVsdGlwbGUgdGltZXMgdG8gc2VsZWN0IG11bHRpcGxlIG9iamVjdHMu XG4iKSk7CisJCQkgIlRoZSBvcHRpb25zIC1JLCAtbiwgLU4sIC1QLCAtdCwgLVQsIC0tc2VjdGlv biwgYW5kIC0tZXhjbHVkZS1kYXRhYmFzZSBjYW4gYmVcbiIKKwkJCSAiY29tYmluZWQgYW5kIHNw ZWNpZmllZCBtdWx0aXBsZSB0aW1lcyB0byBzZWxlY3QgbXVsdGlwbGUgb2JqZWN0cy5cbiIpKTsK IAlwcmludGYoXygiXG5JZiBubyBpbnB1dCBmaWxlIG5hbWUgaXMgc3VwcGxpZWQsIHRoZW4gc3Rh bmRhcmQgaW5wdXQgaXMgdXNlZC5cblxuIikpOwogCXByaW50ZihfKCJSZXBvcnQgYnVncyB0byA8 JXM+LlxuIiksIFBBQ0tBR0VfQlVHUkVQT1JUKTsKIAlwcmludGYoXygiJXMgaG9tZSBwYWdlOiA8 JXM+XG4iKSwgUEFDS0FHRV9OQU1FLCBQQUNLQUdFX1VSTCk7CkBAIC02OTQsMyArODQzLDQxNSBA QCByZWFkX3Jlc3RvcmVfZmlsdGVycyhjb25zdCBjaGFyICpmaWxlbmFtZSwgUmVzdG9yZU9wdGlv bnMgKm9wdHMpCiAKIAlmaWx0ZXJfZnJlZSgmZnN0YXRlKTsKIH0KKworLyoKKyAqIGZpbGVfZXhp c3RzX2luX2RpcmVjdG9yeQorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZmlsZSBleGlzdHMg aW4gdGhlIGdpdmVuIGRpcmVjdG9yeS4KKyAqLworc3RhdGljIGJvb2wKK2ZpbGVfZXhpc3RzX2lu X2RpcmVjdG9yeShjb25zdCBjaGFyICpkaXIsIGNvbnN0IGNoYXIgKmZpbGVuYW1lKQoreworCXN0 cnVjdCBzdGF0IHN0OworCWNoYXIJCWJ1ZltNQVhQR1BBVEhdOworCisJaWYgKHNucHJpbnRmKGJ1 ZiwgTUFYUEdQQVRILCAiJXMvJXMiLCBkaXIsIGZpbGVuYW1lKSA+PSBNQVhQR1BBVEgpCisJCXBn X2ZhdGFsKCJkaXJlY3RvcnkgbmFtZSB0b28gbG9uZzogXCIlc1wiIiwgZGlyKTsKKworCXJldHVy biAoc3RhdChidWYsICZzdCkgPT0gMCAmJiBTX0lTUkVHKHN0LnN0X21vZGUpKTsKK30KKworLyoK KyAqIGdldF9kYm5hbWVzX2xpc3RfdG9fcmVzdG9yZQorICoKKyAqIFRoaXMgd2lsbCBtYXJrIGZv ciBza2lwcGluZyBhbnkgZW50cmllcyBmcm9tIGRibmFtZV9vaWRfbGlzdCB0aGF0IHBhdHRlcm4g bWF0Y2ggYW4KKyAqIGVudHJ5IGluIHRoZSBkYl9leGNsdWRlX3BhdHRlcm5zIGxpc3QuCisgKgor ICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGRhdGFiYXNlIHRvIGJlIHJlc3RvcmVkLgorICoKKyAq Lworc3RhdGljIGludAorZ2V0X2RibmFtZXNfbGlzdF90b19yZXN0b3JlKFBHY29ubiAqY29ubiwK KwkJCQkJCQlTaW1wbGVQdHJMaXN0ICpkYm5hbWVfb2lkX2xpc3QsCisJCQkJCQkJU2ltcGxlU3Ry aW5nTGlzdCBkYl9leGNsdWRlX3BhdHRlcm5zKQoreworCWludAkJCWNvdW50X2RiID0gMDsKKwlQ UUV4cEJ1ZmZlciBxdWVyeTsKKwlQR3Jlc3VsdCAgICpyZXM7CisKKwlxdWVyeSA9IGNyZWF0ZVBR RXhwQnVmZmVyKCk7CisKKwlpZiAoIWNvbm4gJiYgZGJfZXhjbHVkZV9wYXR0ZXJucy5oZWFkICE9 IE5VTEwpCisJCXBnX2xvZ19pbmZvKCJjb25zaWRlcmluZyBQQVRURVJOIGFzIE5BTUUgZm9yIC0t ZXhjbHVkZS1kYXRhYmFzZSBvcHRpb24gYXMgbm8gZGF0YWJhc2UgY29ubmVjdGlvbiB3aGlsZSBk b2luZyBwZ19yZXN0b3JlIik7CisKKwkvKgorCSAqIFByb2Nlc3Mgb25lIGJ5IG9uZSBhbGwgZGJu YW1lcyBhbmQgaWYgc3BlY2lmaWVkIHRvIHNraXAgcmVzdG9yaW5nLCB0aGVuCisJICogcmVtb3Zl IGRibmFtZSBmcm9tIGxpc3QuCisJICovCisJZm9yIChTaW1wbGVQdHJMaXN0Q2VsbCAqZGJfY2Vs bCA9IGRibmFtZV9vaWRfbGlzdC0+aGVhZDsKKwkJIGRiX2NlbGw7IGRiX2NlbGwgPSBkYl9jZWxs LT5uZXh0KQorCXsKKwkJRGJPaWROYW1lICAqZGJpZG5hbWUgPSAoRGJPaWROYW1lICopIGRiX2Nl bGwtPnB0cjsKKwkJYm9vbAkJc2tpcF9kYl9yZXN0b3JlID0gZmFsc2U7CisJCVBRRXhwQnVmZmVy IGRiX2xpdCA9IGNyZWF0ZVBRRXhwQnVmZmVyKCk7CisKKwkJYXBwZW5kU3RyaW5nTGl0ZXJhbENv bm4oZGJfbGl0LCBkYmlkbmFtZS0+c3RyLCBjb25uKTsKKworCQlmb3IgKFNpbXBsZVN0cmluZ0xp c3RDZWxsICpwYXRfY2VsbCA9IGRiX2V4Y2x1ZGVfcGF0dGVybnMuaGVhZDsgcGF0X2NlbGw7IHBh dF9jZWxsID0gcGF0X2NlbGwtPm5leHQpCisJCXsKKwkJCS8qCisJCQkgKiBJZiB0aGVyZSBpcyBh biBleGFjdCBtYXRjaCB0aGVuIHdlIGRvbid0IG5lZWQgdG8gdHJ5IGEgcGF0dGVybgorCQkJICog bWF0Y2gKKwkJCSAqLworCQkJaWYgKHBnX3N0cmNhc2VjbXAoZGJpZG5hbWUtPnN0ciwgcGF0X2Nl bGwtPnZhbCkgPT0gMCkKKwkJCQlza2lwX2RiX3Jlc3RvcmUgPSB0cnVlOworCQkJLyogT3RoZXJ3 aXNlLCB0cnkgYSBwYXR0ZXJuIG1hdGNoIGlmIHRoZXJlIGlzIGEgY29ubmVjdGlvbiAqLworCQkJ ZWxzZSBpZiAoY29ubikKKwkJCXsKKwkJCQlpbnQJCQlkb3RjbnQ7CisKKwkJCQlhcHBlbmRQUUV4 cEJ1ZmZlclN0cihxdWVyeSwgIlNFTEVDVCAxICIpOworCQkJCXByb2Nlc3NTUUxOYW1lUGF0dGVy bihjb25uLCBxdWVyeSwgcGF0X2NlbGwtPnZhbCwgZmFsc2UsCisJCQkJCQkJCQkgIGZhbHNlLCBO VUxMLCBkYl9saXQtPmRhdGEsCisJCQkJCQkJCQkgIE5VTEwsIE5VTEwsIE5VTEwsICZkb3RjbnQp OworCisJCQkJaWYgKGRvdGNudCA+IDApCisJCQkJeworCQkJCQlwZ19sb2dfZXJyb3IoImltcHJv cGVyIHF1YWxpZmllZCBuYW1lICh0b28gbWFueSBkb3R0ZWQgbmFtZXMpOiAlcyIsCisJCQkJCQkJ CSBkYmlkbmFtZS0+c3RyKTsKKwkJCQkJUFFmaW5pc2goY29ubik7CisJCQkJCWV4aXRfbmljZWx5 KDEpOworCQkJCX0KKworCQkJCXJlcyA9IGV4ZWN1dGVRdWVyeShjb25uLCBxdWVyeS0+ZGF0YSk7 CisKKwkJCQlpZiAoKFBRcmVzdWx0U3RhdHVzKHJlcykgPT0gUEdSRVNfVFVQTEVTX09LKSAmJiBQ UW50dXBsZXMocmVzKSkKKwkJCQl7CisJCQkJCXNraXBfZGJfcmVzdG9yZSA9IHRydWU7CisJCQkJ CXBnX2xvZ19pbmZvKCJkYXRhYmFzZSBuYW1lIFwiJXNcIiBtYXRjaGVzIGV4Y2x1ZGUgcGF0dGVy biBcIiVzXCIiLCBkYmlkbmFtZS0+c3RyLCBwYXRfY2VsbC0+dmFsKTsKKwkJCQl9CisKKwkJCQlQ UWNsZWFyKHJlcyk7CisJCQkJcmVzZXRQUUV4cEJ1ZmZlcihxdWVyeSk7CisJCQl9CisKKwkJCWlm IChza2lwX2RiX3Jlc3RvcmUpCisJCQkJYnJlYWs7CisJCX0KKworCQlkZXN0cm95UFFFeHBCdWZm ZXIoZGJfbGl0KTsKKworCQkvKgorCQkgKiBNYXJrIGRiIHRvIGJlIHNraXBwZWQgb3IgaW5jcmVt ZW50IHRoZSBjb3VudGVyIG9mIGRicyB0byBiZQorCQkgKiByZXN0b3JlZAorCQkgKi8KKwkJaWYg KHNraXBfZGJfcmVzdG9yZSkKKwkJeworCQkJcGdfbG9nX2luZm8oImV4Y2x1ZGluZyBkYXRhYmFz ZSBcIiVzXCIiLCBkYmlkbmFtZS0+c3RyKTsKKwkJCWRiaWRuYW1lLT5vaWQgPSBJbnZhbGlkT2lk OworCQl9CisJCWVsc2UKKwkJeworCQkJY291bnRfZGIrKzsKKwkJfQorCX0KKworCWRlc3Ryb3lQ UUV4cEJ1ZmZlcihxdWVyeSk7CisKKwlyZXR1cm4gY291bnRfZGI7Cit9CisKKy8qCisgKiBnZXRf ZGJuYW1lX29pZF9saXN0X2Zyb21fbWZpbGUKKyAqCisgKiBPcGVuIG1hcC5kYXQgZmlsZSBhbmQg cmVhZCBsaW5lIGJ5IGxpbmUgYW5kIHRoZW4gcHJlcGFyZSBhIGxpc3Qgb2YgZGF0YWJhc2UKKyAq IG5hbWVzIGFuZCBjb3JyZXNwb25kaW5nIGRiX29pZC4KKyAqCisgKiBSZXR1cm5zLCB0b3RhbCBu dW1iZXIgb2YgZGF0YWJhc2UgbmFtZXMgaW4gbWFwLmRhdCBmaWxlLgorICovCitzdGF0aWMgaW50 CitnZXRfZGJuYW1lX29pZF9saXN0X2Zyb21fbWZpbGUoY29uc3QgY2hhciAqZHVtcGRpcnBhdGgs IFNpbXBsZVB0ckxpc3QgKmRibmFtZV9vaWRfbGlzdCkKK3sKKwlTdHJpbmdJbmZvRGF0YSBsaW5l YnVmOworCUZJTEUJICAgKnBmaWxlOworCWNoYXIJCW1hcF9maWxlX3BhdGhbTUFYUEdQQVRIXTsK KwlpbnQJCQljb3VudCA9IDA7CisKKworCS8qCisJICogSWYgdGhlcmUgaXMgbm8gbWFwLmRhdCBm aWxlIGluIGR1bXAsIHRoZW4gcmV0dXJuIGZyb20gaGVyZSBhcworCSAqIHRoZXJlIGlzIG5vIGRh dGFiYXNlIHRvIHJlc3RvcmUuCisJICovCisJaWYgKCFmaWxlX2V4aXN0c19pbl9kaXJlY3Rvcnko ZHVtcGRpcnBhdGgsICJtYXAuZGF0IikpCisJeworCQlwZ19sb2dfaW5mbygiZGF0YWJhc2UgcmVz dG9yaW5nIGlzIHNraXBwZWQgYmVjYXVzZSBmaWxlIFwiJXNcIiBkb2VzIG5vdCBleGlzdCBpbiBk aXJlY3RvcnkgXCIlc1wiIiwgIm1hcC5kYXQiLCBkdW1wZGlycGF0aCk7CisJCXJldHVybiAwOwor CX0KKworCXNucHJpbnRmKG1hcF9maWxlX3BhdGgsIE1BWFBHUEFUSCwgIiVzL21hcC5kYXQiLCBk dW1wZGlycGF0aCk7CisKKwkvKiBPcGVuIG1hcC5kYXQgZmlsZS4gKi8KKwlwZmlsZSA9IGZvcGVu KG1hcF9maWxlX3BhdGgsIFBHX0JJTkFSWV9SKTsKKworCWlmIChwZmlsZSA9PSBOVUxMKQorCQlw Z19mYXRhbCgiY291bGQgbm90IG9wZW4gZmlsZSBcIiVzXCI6ICVtIiwgbWFwX2ZpbGVfcGF0aCk7 CisKKwlpbml0U3RyaW5nSW5mbygmbGluZWJ1Zik7CisKKwkvKiBBcHBlbmQgYWxsIHRoZSBkYm5h bWUvZGJfb2lkIGNvbWJpbmF0aW9ucyB0byB0aGUgbGlzdC4gKi8KKwl3aGlsZSAocGdfZ2V0X2xp bmVfYnVmKHBmaWxlLCAmbGluZWJ1ZikpCisJeworCQlPaWQJCQlkYl9vaWQgPSBJbnZhbGlkT2lk OworCQljaGFyCSAgICpkYm5hbWU7CisJCURiT2lkTmFtZSAgKmRiaWRuYW1lOworCQlpbnQJCQlu YW1lbGVuOworCQljaGFyCSAgICpwID0gbGluZWJ1Zi5kYXRhOworCisJCS8qIEV4dHJhY3QgZGJv aWQuICovCisJCXdoaWxlIChpc2RpZ2l0KCh1bnNpZ25lZCBjaGFyKSAqcCkpCisJCQlwKys7CisJ CWlmIChwID4gbGluZWJ1Zi5kYXRhICYmICpwID09ICcgJykKKwkJeworCQkJc3NjYW5mKGxpbmVi dWYuZGF0YSwgIiV1IiwgJmRiX29pZCk7CisJCQlwKys7CisJCX0KKworCQkvKiBkYm5hbWUgaXMg dGhlIHJlc3Qgb2YgdGhlIGxpbmUgKi8KKwkJZGJuYW1lID0gcDsKKwkJbmFtZWxlbiA9IHN0cmxl bihkYm5hbWUpOworCisJCS8qIFJlcG9ydCBlcnJvciBhbmQgZXhpdCBpZiB0aGUgZmlsZSBoYXMg YW55IGNvcnJ1cHRlZCBkYXRhLiAqLworCQlpZiAoIU9pZElzVmFsaWQoZGJfb2lkKSB8fCBuYW1l bGVuIDw9IDEpCisJCQlwZ19mYXRhbCgiaW52YWxpZCBlbnRyeSBpbiBmaWxlIFwiJXNcIiBvbiBs aW5lICVkIiwgbWFwX2ZpbGVfcGF0aCwKKwkJCQkJIGNvdW50ICsgMSk7CisKKwkJcGdfbG9nX2lu Zm8oImZvdW5kIGRhdGFiYXNlIFwiJXNcIiAoT0lEOiAldSkgaW4gZmlsZSBcIiVzXCIiLAorCQkJ CQlkYm5hbWUsIGRiX29pZCwgbWFwX2ZpbGVfcGF0aCk7CisKKwkJZGJpZG5hbWUgPSBwZ19tYWxs b2Mob2Zmc2V0b2YoRGJPaWROYW1lLCBzdHIpICsgbmFtZWxlbiArIDEpOworCQlkYmlkbmFtZS0+ b2lkID0gZGJfb2lkOworCQlzdHJsY3B5KGRiaWRuYW1lLT5zdHIsIGRibmFtZSwgbmFtZWxlbik7 CisKKwkJc2ltcGxlX3B0cl9saXN0X2FwcGVuZChkYm5hbWVfb2lkX2xpc3QsIGRiaWRuYW1lKTsK KwkJY291bnQrKzsKKwl9CisKKwkvKiBDbG9zZSBtYXAuZGF0IGZpbGUuICovCisJZmNsb3NlKHBm aWxlKTsKKworCXJldHVybiBjb3VudDsKK30KKworLyoKKyAqIHJlc3RvcmVfYWxsX2RhdGFiYXNl cworICoKKyAqIFRoaXMgd2lsbCByZXN0b3JlIGRhdGFiYXNlcyB0aG9zZSBkdW1wcyBhcmUgcHJl c2VudCBpbgorICogZGlyZWN0b3J5IGJhc2VkIG9uIG1hcC5kYXQgZmlsZSBtYXBwaW5nLgorICoK KyAqIFRoaXMgd2lsbCBza2lwIHJlc3RvcmluZyBmb3IgZGF0YWJhc2VzIHRoYXQgYXJlIHNwZWNp ZmllZCB3aXRoCisgKiBleGNsdWRlLWRhdGFiYXNlIG9wdGlvbi4KKyAqCisgKiByZXR1cm5zLCBu dW1iZXIgb2YgZXJyb3JzIHdoaWxlIGRvaW5nIHJlc3RvcmUuCisgKi8KK3N0YXRpYyBpbnQKK3Jl c3RvcmVfYWxsX2RhdGFiYXNlcyhjb25zdCBjaGFyICppbnB1dEZpbGVTcGVjLAorCQkJCQkgIFNp bXBsZVN0cmluZ0xpc3QgZGJfZXhjbHVkZV9wYXR0ZXJucywgUmVzdG9yZU9wdGlvbnMgKm9wdHMs CisJCQkJCSAgaW50IG51bVdvcmtlcnMpCit7CisJU2ltcGxlUHRyTGlzdCBkYm5hbWVfb2lkX2xp c3QgPSB7TlVMTCwgTlVMTH07CisJaW50CQkJbnVtX2RiX3Jlc3RvcmUgPSAwOworCWludAkJCW51 bV90b3RhbF9kYjsKKwlpbnQJCQluX2Vycm9yc190b3RhbDsKKwlpbnQJCQljb3VudCA9IDA7CisJ Y2hhcgkgICAqY29ubmVjdGVkX2RiID0gTlVMTDsKKwlib29sCQlkdW1wRGF0YSA9IG9wdHMtPmR1 bXBEYXRhOworCWJvb2wJCWR1bXBTY2hlbWEgPSBvcHRzLT5kdW1wU2NoZW1hOworCWJvb2wJCWR1 bXBTdGF0aXN0aWNzID0gb3B0cy0+ZHVtcFNjaGVtYTsKKwlQR2Nvbm4gKmNvbm4gPSBOVUxMOwor CWNoYXIJCWdsb2JhbF9wYXRoW01BWFBHUEFUSF07CisKKwkvKiBCYXNlZCBvbiBmaWxlLCBzZXQg cGF0aC4gKi8KKwlpZiAoZmlsZV9leGlzdHNfaW5fZGlyZWN0b3J5KGlucHV0RmlsZVNwZWMsICJ0 b2MudGFyIikpCisJCXNucHJpbnRmKGdsb2JhbF9wYXRoLCBNQVhQR1BBVEgsICIlcy90b2MudGFy IiwgaW5wdXRGaWxlU3BlYyk7CisJZWxzZSBpZiAoZmlsZV9leGlzdHNfaW5fZGlyZWN0b3J5KGlu cHV0RmlsZVNwZWMsICJ0b2MuZG1wIikpCisJCXNucHJpbnRmKGdsb2JhbF9wYXRoLCBNQVhQR1BB VEgsICIlcy90b2MuZG1wIiwgaW5wdXRGaWxlU3BlYyk7CisJZWxzZQorCQlzbnByaW50ZihnbG9i YWxfcGF0aCwgTUFYUEdQQVRILCAiJXMiLCBpbnB1dEZpbGVTcGVjKTsKKworCS8qIFNhdmUgZGIg bmFtZSB0byByZXVzZSBpdCBmb3IgYWxsIHRoZSBkYXRhYmFzZS4gKi8KKwlpZiAob3B0cy0+Y3Bh cmFtcy5kYm5hbWUpCisJCWNvbm5lY3RlZF9kYiA9IG9wdHMtPmNwYXJhbXMuZGJuYW1lOworCisJ bnVtX3RvdGFsX2RiID0gZ2V0X2RibmFtZV9vaWRfbGlzdF9mcm9tX21maWxlKGlucHV0RmlsZVNw ZWMsICZkYm5hbWVfb2lkX2xpc3QpOworCisJLyogSWYgbWFwLmRhdCBoYXMgbm8gZW50cmllcywg cmV0dXJuIGFmdGVyIHByb2Nlc3NpbmcgZ2xvYmFsIGNvbW1hbmRzLiAqLworCWlmIChkYm5hbWVf b2lkX2xpc3QuaGVhZCA9PSBOVUxMKQorCQlyZXR1cm4gcmVzdG9yZV9nbG9iYWxfb2JqZWN0cyhn bG9iYWxfcGF0aCwgb3B0cywgbnVtV29ya2VycywgZmFsc2UsIDAsIGZhbHNlKTsKKworCXBnX2xv Z19pbmZvKG5nZXR0ZXh0KCJmb3VuZCAlZCBkYXRhYmFzZSBuYW1lIGluIFwiJXNcIiIsCisJCQkJ CQkgImZvdW5kICVkIGRhdGFiYXNlIG5hbWVzIGluIFwiJXNcIiIsCisJCQkJCQkgbnVtX3RvdGFs X2RiKSwKKwkJCQludW1fdG90YWxfZGIsICJtYXAuZGF0Iik7CisKKwkvKgorCSAqIElmIGV4Y2x1 ZGUtcGF0dGVybnMgaXMgZ2l2ZW4sIHRoZW4gY29ubmVjdCB0byB0aGUgZGF0YWJhc2UgdG8gcHJv Y2VzcworCSAqIGl0LgorCSAqLworCWlmIChkYl9leGNsdWRlX3BhdHRlcm5zLmhlYWQgIT0gTlVM TCkKKwl7CisJCWlmIChvcHRzLT5jcGFyYW1zLmRibmFtZSkKKwkJeworCQkJY29ubiA9IENvbm5l Y3REYXRhYmFzZShvcHRzLT5jcGFyYW1zLmRibmFtZSwgTlVMTCwgb3B0cy0+Y3BhcmFtcy5wZ2hv c3QsCisJCQkJCW9wdHMtPmNwYXJhbXMucGdwb3J0LCBvcHRzLT5jcGFyYW1zLnVzZXJuYW1lLCBU UklfREVGQVVMVCwKKwkJCQkJZmFsc2UsIHByb2duYW1lLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxM KTsKKworCQkJaWYgKCFjb25uKQorCQkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgY29ubmVjdCB0byBk YXRhYmFzZSBcIiVzXCIiLCBvcHRzLT5jcGFyYW1zLmRibmFtZSk7CisJCX0KKworCQlpZiAoIWNv bm4pCisJCXsKKwkJCXBnX2xvZ19pbmZvKCJ0cnlpbmcgdG8gY29ubmVjdCB0byBkYXRhYmFzZSBc IiVzXCIiLCAicG9zdGdyZXMiKTsKKworCQkJY29ubiA9IENvbm5lY3REYXRhYmFzZSgicG9zdGdy ZXMiLCBOVUxMLCBvcHRzLT5jcGFyYW1zLnBnaG9zdCwKKwkJCQkJb3B0cy0+Y3BhcmFtcy5wZ3Bv cnQsIG9wdHMtPmNwYXJhbXMudXNlcm5hbWUsIFRSSV9ERUZBVUxULAorCQkJCQlmYWxzZSwgcHJv Z25hbWUsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpOworCisJCQkvKiBUcnkgd2l0aCB0ZW1wbGF0 ZTEuICovCisJCQlpZiAoIWNvbm4pCisJCQl7CisJCQkJcGdfbG9nX2luZm8oInRyeWluZyB0byBj b25uZWN0IHRvIGRhdGFiYXNlIFwiJXNcIiIsICJ0ZW1wbGF0ZTEiKTsKKworCQkJCWNvbm4gPSBD b25uZWN0RGF0YWJhc2UoInRlbXBsYXRlMSIsIE5VTEwsIG9wdHMtPmNwYXJhbXMucGdob3N0LAor CQkJCQkJb3B0cy0+Y3BhcmFtcy5wZ3BvcnQsIG9wdHMtPmNwYXJhbXMudXNlcm5hbWUsIFRSSV9E RUZBVUxULAorCQkJCQkJZmFsc2UsIHByb2duYW1lLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKTsK KwkJCX0KKwkJfQorCX0KKworCS8qCisJICogZmlsdGVyIHRoZSBkYiBsaXN0IGFjY29yZGluZyB0 byB0aGUgZXhjbHVkZSBwYXR0ZXJucworCSAqLworCW51bV9kYl9yZXN0b3JlID0gZ2V0X2RibmFt ZXNfbGlzdF90b19yZXN0b3JlKGNvbm4sICZkYm5hbWVfb2lkX2xpc3QsCisJCQkJCQkJCQkJCQkg ZGJfZXhjbHVkZV9wYXR0ZXJucyk7CisKKwkvKiBDbG9zZSB0aGUgZGIgY29ubmVjdGlvbiBhcyB3 ZSBhcmUgZG9uZSB3aXRoIGdsb2JhbHMgYW5kIHBhdHRlcm5zLiAqLworCWlmIChjb25uKQorCQlQ UWZpbmlzaChjb25uKTsKKworCS8qIE9wZW4gdG9jLmRhdCBmaWxlIGFuZCBleGVjdXRlL2FwcGVu ZCBhbGwgdGhlIGdsb2JhbCBzcWwgY29tbWFuZHMuICovCisJbl9lcnJvcnNfdG90YWwgPSAgcmVz dG9yZV9nbG9iYWxfb2JqZWN0cyhnbG9iYWxfcGF0aCwgb3B0cywgbnVtV29ya2VycywgZmFsc2Us IDAsIGZhbHNlKTsKKworCS8qIEV4aXQgaWYgbm8gZGIgbmVlZHMgdG8gYmUgcmVzdG9yZWQuICov CisJaWYgKGRibmFtZV9vaWRfbGlzdC5oZWFkID09IE5VTEwgfHwgbnVtX2RiX3Jlc3RvcmUgPT0g MCkKKwl7CisJCXBnX2xvZ19pbmZvKG5nZXR0ZXh0KCJubyBkYXRhYmFzZSBuZWVkcyByZXN0b3Jp bmcgb3V0IG9mICVkIGRhdGFiYXNlIiwKKwkJCQkJCQkgIm5vIGRhdGFiYXNlIG5lZWRzIHJlc3Rv cmluZyBvdXQgb2YgJWQgZGF0YWJhc2VzIiwgbnVtX3RvdGFsX2RiKSwKKwkJCQkJbnVtX3RvdGFs X2RiKTsKKwkJcmV0dXJuIG5fZXJyb3JzX3RvdGFsOworCX0KKworCXBnX2xvZ19pbmZvKCJuZWVk IHRvIHJlc3RvcmUgJWQgZGF0YWJhc2VzIG91dCBvZiAlZCBkYXRhYmFzZXMiLCBudW1fZGJfcmVz dG9yZSwgbnVtX3RvdGFsX2RiKTsKKworCS8qCisJICogV2UgaGF2ZSBhIGxpc3Qgb2YgZGF0YWJh c2VzIHRvIHJlc3RvcmUgYWZ0ZXIgcHJvY2Vzc2luZyB0aGUKKwkgKiBleGNsdWRlLWRhdGFiYXNl IHN3aXRjaChlcykuICBOb3cgd2UgY2FuIHJlc3RvcmUgdGhlbSBvbmUgYnkgb25lLgorCSAqLwor CWZvciAoU2ltcGxlUHRyTGlzdENlbGwgKmRiX2NlbGwgPSBkYm5hbWVfb2lkX2xpc3QuaGVhZDsK KwkJIGRiX2NlbGw7IGRiX2NlbGwgPSBkYl9jZWxsLT5uZXh0KQorCXsKKwkJRGJPaWROYW1lICAq ZGJpZG5hbWUgPSAoRGJPaWROYW1lICopIGRiX2NlbGwtPnB0cjsKKwkJY2hhcgkJc3ViZGlycGF0 aFtNQVhQR1BBVEhdOworCQljaGFyCQlzdWJkaXJkYnBhdGhbTUFYUEdQQVRIXTsKKwkJY2hhcgkJ ZGJmaWxlbmFtZVtNQVhQR1BBVEhdOworCQlpbnQJCQluX2Vycm9yczsKKworCQkvKiBpZ25vcmUg ZGJzIG1hcmtlZCBmb3Igc2tpcHBpbmcgKi8KKwkJaWYgKGRiaWRuYW1lLT5vaWQgPT0gSW52YWxp ZE9pZCkKKwkJCWNvbnRpbnVlOworCisJCS8qCisJCSAqIFdlIG5lZWQgdG8gcmVzZXQgb3ZlcnJp ZGVfZGJuYW1lIHNvIHRoYXQgb2JqZWN0cyBjYW4gYmUgcmVzdG9yZWQKKwkJICogaW50byBhbiBh bHJlYWR5IGNyZWF0ZWQgZGF0YWJhc2UuICh1c2VkIHdpdGggLWQvLS1kYm5hbWUgb3B0aW9uKQor CQkgKi8KKwkJaWYgKG9wdHMtPmNwYXJhbXMub3ZlcnJpZGVfZGJuYW1lKQorCQl7CisJCQlwZnJl ZShvcHRzLT5jcGFyYW1zLm92ZXJyaWRlX2RibmFtZSk7CisJCQlvcHRzLT5jcGFyYW1zLm92ZXJy aWRlX2RibmFtZSA9IE5VTEw7CisJCX0KKworCQlzbnByaW50ZihzdWJkaXJkYnBhdGgsIE1BWFBH UEFUSCwgIiVzL2RhdGFiYXNlcyIsIGlucHV0RmlsZVNwZWMpOworCisJCS8qCisJCSAqIExvb2sg Zm9yIHRoZSBkYXRhYmFzZSBkdW1wIGZpbGUvZGlyLiBJZiB0aGVyZSBpcyBhbiB7b2lkfS50YXIg b3IKKwkJICoge29pZH0uZG1wIGZpbGUsIHVzZSBpdC4gT3RoZXJ3aXNlIHRyeSB0byB1c2UgYSBk aXJlY3RvcnkgY2FsbGVkCisJCSAqIHtvaWR9CisJCSAqLworCQlzbnByaW50ZihkYmZpbGVuYW1l LCBNQVhQR1BBVEgsICIldS50YXIiLCBkYmlkbmFtZS0+b2lkKTsKKwkJaWYgKGZpbGVfZXhpc3Rz X2luX2RpcmVjdG9yeShzdWJkaXJkYnBhdGgsIGRiZmlsZW5hbWUpKQorCQkJc25wcmludGYoc3Vi ZGlycGF0aCwgTUFYUEdQQVRILCAiJXMvZGF0YWJhc2VzLyV1LnRhciIsIGlucHV0RmlsZVNwZWMs IGRiaWRuYW1lLT5vaWQpOworCQllbHNlCisJCXsKKwkJCXNucHJpbnRmKGRiZmlsZW5hbWUsIE1B WFBHUEFUSCwgIiV1LmRtcCIsIGRiaWRuYW1lLT5vaWQpOworCisJCQlpZiAoZmlsZV9leGlzdHNf aW5fZGlyZWN0b3J5KHN1YmRpcmRicGF0aCwgZGJmaWxlbmFtZSkpCisJCQkJc25wcmludGYoc3Vi ZGlycGF0aCwgTUFYUEdQQVRILCAiJXMvZGF0YWJhc2VzLyV1LmRtcCIsIGlucHV0RmlsZVNwZWMs IGRiaWRuYW1lLT5vaWQpOworCQkJZWxzZQorCQkJCXNucHJpbnRmKHN1YmRpcnBhdGgsIE1BWFBH UEFUSCwgIiVzL2RhdGFiYXNlcy8ldSIsIGlucHV0RmlsZVNwZWMsIGRiaWRuYW1lLT5vaWQpOwor CQl9CisKKwkJcGdfbG9nX2luZm8oInJlc3RvcmluZyBkYXRhYmFzZSBcIiVzXCIiLCBkYmlkbmFt ZS0+c3RyKTsKKworCQkvKiBJZiBkYXRhYmFzZSBpcyBhbHJlYWR5IGNyZWF0ZWQsIHRoZW4gZG9u J3Qgc2V0IGNyZWF0ZURCIGZsYWcuICovCisJCWlmIChvcHRzLT5jcGFyYW1zLmRibmFtZSkKKwkJ eworCQkJUEdjb25uCSAgICp0ZXN0X2Nvbm47CisKKwkJCXRlc3RfY29ubiA9IENvbm5lY3REYXRh YmFzZShkYmlkbmFtZS0+c3RyLCBOVUxMLCBvcHRzLT5jcGFyYW1zLnBnaG9zdCwKKwkJCQkJCQkJ CQlvcHRzLT5jcGFyYW1zLnBncG9ydCwgb3B0cy0+Y3BhcmFtcy51c2VybmFtZSwgVFJJX0RFRkFV TFQsCisJCQkJCQkJCQkJZmFsc2UsIHByb2duYW1lLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKTsK KwkJCWlmICh0ZXN0X2Nvbm4pCisJCQl7CisJCQkJUFFmaW5pc2godGVzdF9jb25uKTsKKworCQkJ CS8qIFVzZSBhbHJlYWR5IGNyZWF0ZWQgZGF0YWJhc2UgZm9yIGNvbm5lY3Rpb24uICovCisJCQkJ b3B0cy0+Y3JlYXRlREIgPSAwOworCQkJCW9wdHMtPmNwYXJhbXMuZGJuYW1lID0gZGJpZG5hbWUt PnN0cjsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQkvKiB3ZSdsbCBoYXZlIHRvIGNyZWF0ZSBp dCAqLworCQkJCW9wdHMtPmNyZWF0ZURCID0gMTsKKwkJCQlvcHRzLT5jcGFyYW1zLmRibmFtZSA9 IGNvbm5lY3RlZF9kYjsKKwkJCX0KKwkJfQorCisJCS8qCisJCSAqIFJlc2V0IGZsYWdzIC0gbWln aHQgaGF2ZSBiZWVuIHJlc2V0IGluIHBnX2JhY2t1cF9hcmNoaXZlci5jIGJ5IHRoZQorCQkgKiBw cmV2aW91cyByZXN0b3JlLgorCQkgKi8KKwkJb3B0cy0+ZHVtcERhdGEgPSBkdW1wRGF0YTsKKwkJ b3B0cy0+ZHVtcFNjaGVtYSA9IGR1bXBTY2hlbWE7CisJCW9wdHMtPmR1bXBTdGF0aXN0aWNzID0g ZHVtcFN0YXRpc3RpY3M7CisKKwkJLyogUmVzdG9yZSB0aGUgc2luZ2xlIGRhdGFiYXNlLiAqLwor CQluX2Vycm9ycyA9IHJlc3RvcmVfb25lX2RhdGFiYXNlKHN1YmRpcnBhdGgsIG9wdHMsIG51bVdv cmtlcnMsIHRydWUsIDEsIGZhbHNlKTsKKworCQkvKiBQcmludCBhIHN1bW1hcnkgb2YgaWdub3Jl ZCBlcnJvcnMgZHVyaW5nIHNpbmdsZSBkYXRhYmFzZSByZXN0b3JlLiAqLworCQlpZiAobl9lcnJv cnMpCisJCXsKKwkJCW5fZXJyb3JzX3RvdGFsICs9IG5fZXJyb3JzOworCQkJcGdfbG9nX3dhcm5p bmcoImVycm9ycyBpZ25vcmVkIG9uIGRhdGFiYXNlIFwiJXNcIiByZXN0b3JlOiAlZCIsIGRiaWRu YW1lLT5zdHIsIG5fZXJyb3JzKTsKKwkJfQorCisJCWNvdW50Kys7CisJfQorCisJLyogTG9nIG51 bWJlciBvZiBwcm9jZXNzZWQgZGF0YWJhc2VzLiAqLworCXBnX2xvZ19pbmZvKCJudW1iZXIgb2Yg cmVzdG9yZWQgZGF0YWJhc2VzIGlzICVkIiwgbnVtX2RiX3Jlc3RvcmUpOworCisJLyogRnJlZSBk Ym5hbWUgYW5kIGRib2lkIGxpc3QuICovCisJc2ltcGxlX3B0cl9saXN0X2Rlc3Ryb3koJmRibmFt ZV9vaWRfbGlzdCk7CisKKwlyZXR1cm4gbl9lcnJvcnNfdG90YWw7Cit9CmRpZmYgLS1naXQgYS9z cmMvYmluL3BnX2R1bXAvdC8wMDFfYmFzaWMucGwgYi9zcmMvYmluL3BnX2R1bXAvdC8wMDFfYmFz aWMucGwKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQppbmRleCAzN2Q4OTNkNWU2YS4u ZThmODAwYTQ4YzEKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3QvMDAxX2Jhc2ljLnBsCisrKyBiL3Ny Yy9iaW4vcGdfZHVtcC90LzAwMV9iYXNpYy5wbApAQCAtMjM3LDYgKzIzNywxMiBAQCBjb21tYW5k X2ZhaWxzX2xpa2UoCiAJJ3BnX3Jlc3RvcmU6IG9wdGlvbnMgLUNcLy0tY3JlYXRlIGFuZCAtMVwv LS1zaW5nbGUtdHJhbnNhY3Rpb24gY2Fubm90IGJlIHVzZWQgdG9nZXRoZXInCiApOwogCitjb21t YW5kX2ZhaWxzX2xpa2UoCisJWyAncGdfcmVzdG9yZScsICctLWV4Y2x1ZGUtZGF0YWJhc2U9Zm9v JywgJy0tZ2xvYmFscy1vbmx5JywgJy1kJywgJ3h4eCcgXSwKKwlxci9cUXBnX3Jlc3RvcmU6IGVy cm9yOiBvcHRpb24gLS1leGNsdWRlLWRhdGFiYXNlIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIHdp dGggLWdcLy0tZ2xvYmFscy1vbmx5XEUvLAorCSdwZ19yZXN0b3JlOiBvcHRpb24gLS1leGNsdWRl LWRhdGFiYXNlIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIHdpdGggLWcvLS1nbG9iYWxzLW9ubHkn CispOworCiAjIGFsc28gZmFpbHMgZm9yIC1yIGFuZCAtdCwgYnV0IGl0IHNlZW1zIHBvaW50bGVz cyB0byBhZGQgbW9yZSB0ZXN0cyBmb3IgdGhvc2UuCiBjb21tYW5kX2ZhaWxzX2xpa2UoCiAJWyAn cGdfZHVtcGFsbCcsICctLWV4Y2x1ZGUtZGF0YWJhc2U9Zm9vJywgJy0tZ2xvYmFscy1vbmx5JyBd LApAQCAtMjQ0LDQgKzI1MCwxMyBAQCBjb21tYW5kX2ZhaWxzX2xpa2UoCiAJJ3BnX2R1bXBhbGw6 IG9wdGlvbiAtLWV4Y2x1ZGUtZGF0YWJhc2UgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIgd2l0aCAt Zy8tLWdsb2JhbHMtb25seScKICk7CiAKK2NvbW1hbmRfZmFpbHNfbGlrZSgKKwlbICdwZ19kdW1w YWxsJywgJy0tZm9ybWF0JywgJ3gnIF0sCisJcXIvXFFwZ19kdW1wYWxsOiBlcnJvcjogdW5yZWNv Z25pemVkIG91dHB1dCBmb3JtYXQgIngiO1xFLywKKwkncGdfZHVtcGFsbDogdW5yZWNvZ25pemVk IG91dHB1dCBmb3JtYXQnKTsKKworY29tbWFuZF9mYWlsc19saWtlKAorCVsgJ3BnX2R1bXBhbGwn LCAnLS1mb3JtYXQnLCAnZCcsICctLXJlc3RyaWN0LWtleT11dScsICctZiBkdW1wZmlsZScgXSwK Kwlxci9cUXBnX2R1bXBhbGw6IGVycm9yOiBvcHRpb24gLS1yZXN0cmljdC1rZXkgY2FuIG9ubHkg YmUgdXNlZCB3aXRoIC0tZm9ybWF0PXBsYWluXEUvLAorCSdwZ19kdW1wYWxsOiAtLXJlc3RyaWN0 LWtleSBjYW4gb25seSBiZSB1c2VkIHdpdGggcGxhaW4gZHVtcCBmb3JtYXQnKTsKIGRvbmVfdGVz dGluZygpOwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3QvMDA3X3BnX2R1bXBhbGwucGwg Yi9zcmMvYmluL3BnX2R1bXAvdC8wMDdfcGdfZHVtcGFsbC5wbApuZXcgZmlsZSBtb2RlIDEwMDc1 NQppbmRleCAwMDAwMDAwMDAwMC4uM2M3ZDJhZDdjNTMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMv YmluL3BnX2R1bXAvdC8wMDdfcGdfZHVtcGFsbC5wbApAQCAtMCwwICsxLDM5NiBAQAorIyBDb3B5 cmlnaHQgKGMpIDIwMjEtMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAK KwordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5ncyBGQVRBTCA9PiAnYWxsJzsKKwordXNlIFBvc3Rn cmVTUUw6OlRlc3Q6OkNsdXN0ZXI7Cit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM7Cit1c2Ug VGVzdDo6TW9yZTsKKworbXkgJHRlbXBkaXIgPSBQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczo6dGVt cGRpcjsKK215ICRydW5fZGIgPSAncG9zdGdyZXMnOworbXkgJHNlcCA9ICR3aW5kb3dzX29zID8g IlxcIiA6ICIvIjsKKworIyBUYWJsZXNwYWNlIGxvY2F0aW9ucyB1c2VkIGJ5ICJyZXN0b3JlX3Rh Ymxlc3BhY2UiIHRlc3QgY2FzZS4KK215ICR0YWJsZXNwYWNlMSA9ICIke3RlbXBkaXJ9JHtzZXB9 dGJsMSI7CitteSAkdGFibGVzcGFjZTIgPSAiJHt0ZW1wZGlyfSR7c2VwfXRibDIiOworbWtkaXIo JHRhYmxlc3BhY2UxKSB8fCBkaWUgIm1rZGlyICR0YWJsZXNwYWNlMSAkISI7Citta2RpcigkdGFi bGVzcGFjZTIpIHx8IGRpZSAibWtkaXIgJHRhYmxlc3BhY2UyICQhIjsKKworIyBTY2FwZSB0YWJs ZXNwYWNlIGxvY2F0aW9ucyBvbiBXaW5kb3dzLgorJHRhYmxlc3BhY2UxID0gJHdpbmRvd3Nfb3Mg PyAoJHRhYmxlc3BhY2UxID1+IHMvXFwvXFxcXC9ncikgOiAkdGFibGVzcGFjZTE7CiskdGFibGVz cGFjZTIgPSAkd2luZG93c19vcyA/ICgkdGFibGVzcGFjZTIgPX4gcy9cXC9cXFxcL2dyKSA6ICR0 YWJsZXNwYWNlMjsKKworIyBXaGVyZSBwZ19kdW1wYWxsIHdpbGwgYmUgZXhlY3V0ZWQuCitteSAk bm9kZSA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygnbm9kZScpOworJG5vZGUtPmlu aXQ7Ciskbm9kZS0+c3RhcnQ7CisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIERlZmluaXRpb24gb2YgdGhlIHBnX2R1 bXBhbGwgdGVzdCBjYXNlcyB0byBydW4uCisjCisjIEVhY2ggb2YgdGhlc2UgdGVzdCBjYXNlcyBh cmUgbmFtZWQgYW5kIHRob3NlIG5hbWVzIGFyZSB1c2VkIGZvciBmYWlsCisjIHJlcG9ydGluZyBh bmQgYWxzbyB0byBzYXZlIHRoZSBkdW1wIGFuZCByZXN0b3JlIGluZm9ybWF0aW9uIG5lZWRlZCBm b3IgdGhlCisjIHRlc3QgdG8gYXNzZXJ0LgorIworIyBUaGUgInNldHVwX3NxbCIgaXMgYSBwc3Fs IHZhbGlkIHNjcmlwdCB0aGF0IGNvbnRhaW5zIFNRTCBjb21tYW5kcyB0byBleGVjdXRlCisjIGJl Zm9yZSBvZiBhY3R1YWxseSBleGVjdXRlIHRoZSB0ZXN0cy4gVGhlIHNldHVwcyBhcmUgYWxsIGV4 ZWN1dGVkIGJlZm9yZSBvZgorIyBhbnkgdGVzdCBleGVjdXRpb24uCisjCisjIFRoZSAiZHVtcF9j bWQiIGFuZCAicmVzdG9yZV9jbWQiIGFyZSB0aGUgY29tbWFuZHMgdGhhdCB3aWxsIGJlIGV4ZWN1 dGVkLiBUaGUKKyMgInJlc3RvcmVfY21kIiBtdXN0IGhhdmUgdGhlIC0tZmlsZSBmbGFnIHRvIHNh dmUgdGhlIHJlc3RvcmUgb3V0cHV0IHNvIHRoYXQgd2UKKyMgY2FuIGFzc2VydCBvbiBpdC4KKyMK KyMgVGhlICJsaWtlIiBhbmQgInVubGlrZSIgaXMgYSByZWdleHAgdGhhdCBpcyB1c2VkIHRvIG1h dGNoIHRoZSBwZ19yZXN0b3JlCisjIG91dHB1dC4gSXQgbXVzdCBoYXZlIGF0IGxlYXN0IG9uZSBv ZiB0aGVuIGZpbGxlZCBwZXIgdGVzdCBjYXNlcyBidXQgaXQgYWxzbworIyBjYW4gaGF2ZSBib3Ro LiBTZWUgImV4Y2x1ZGluZ19kYXRhYmFzZXMiIHRlc3QgY2FzZSBmb3IgZXhhbXBsZS4KK215ICVw Z2R1bXBhbGxfcnVucyA9ICgKKwlyZXN0b3JlX3JvbGVzID0+IHsKKwkJc2V0dXBfc3FsID0+ICcK KwkJQ1JFQVRFIFJPTEUgZHVtcGFsbCBXSVRIIEVOQ1JZUFRFRCBQQVNTV09SRCBcJ2FkbWluXCcg U1VQRVJVU0VSOworCQlDUkVBVEUgUk9MRSBkdW1wYWxsMiBXSVRIIFJFUExJQ0FUSU9OIENPTk5F Q1RJT04gTElNSVQgMTA7JywKKwkJZHVtcF9jbWQgPT4gWworCQkJJ3BnX2R1bXBhbGwnLAorCQkJ Jy0tZm9ybWF0JyA9PiAnZGlyZWN0b3J5JywKKwkJCSctLWZpbGUnID0+ICIkdGVtcGRpci9yZXN0 b3JlX3JvbGVzIiwKKwkJXSwKKwkJcmVzdG9yZV9jbWQgPT4gWworCQkJJ3BnX3Jlc3RvcmUnLCAn LUMnLAorCQkJJy0tZm9ybWF0JyA9PiAnZGlyZWN0b3J5JywKKwkJCSctLWZpbGUnID0+ICIkdGVt cGRpci9yZXN0b3JlX3JvbGVzLnNxbCIsCisJCQkiJHRlbXBkaXIvcmVzdG9yZV9yb2xlcyIsCisJ CV0sCisJCWxpa2UgPT4gcXIvCisJCQlccypcUUNSRUFURSBST0xFIGR1bXBhbGwyO1xFCisJCQlc cypcUUFMVEVSIFJPTEUgZHVtcGFsbDIgV0lUSCBOT1NVUEVSVVNFUiBJTkhFUklUIE5PQ1JFQVRF Uk9MRSBOT0NSRUFURURCIE5PTE9HSU4gUkVQTElDQVRJT04gTk9CWVBBU1NSTFMgQ09OTkVDVElP TiBMSU1JVCAxMDtcRQorCQkveG0KKwl9LAorCisJcmVzdG9yZV90YWJsZXNwYWNlID0+IHsKKwkJ c2V0dXBfc3FsID0+ICIKKwkJQ1JFQVRFIFJPTEUgdGFwOworCQlDUkVBVEUgVEFCTEVTUEFDRSB0 YmwxIE9XTkVSIHRhcCBMT0NBVElPTiAnJHRhYmxlc3BhY2UxJzsKKwkJQ1JFQVRFIFRBQkxFU1BB Q0UgdGJsMiBPV05FUiB0YXAgTE9DQVRJT04gJyR0YWJsZXNwYWNlMicgV0lUSCAoc2VxX3BhZ2Vf Y29zdD0xLjApOyIsCisJCWR1bXBfY21kID0+IFsKKwkJCSdwZ19kdW1wYWxsJywKKwkJCSctLWZv cm1hdCcgPT4gJ2RpcmVjdG9yeScsCisJCQknLS1maWxlJyA9PiAiJHRlbXBkaXIvcmVzdG9yZV90 YWJsZXNwYWNlIiwKKwkJXSwKKwkJcmVzdG9yZV9jbWQgPT4gWworCQkJJ3BnX3Jlc3RvcmUnLCAn LUMnLAorCQkJJy0tZm9ybWF0JyA9PiAnZGlyZWN0b3J5JywKKwkJCSctLWZpbGUnID0+ICIkdGVt cGRpci9yZXN0b3JlX3RhYmxlc3BhY2Uuc3FsIiwKKwkJCSIkdGVtcGRpci9yZXN0b3JlX3RhYmxl c3BhY2UiLAorCQldLAorCQkjIE1hdGNoICJFIiBhcyBvcHRpb25hbCBzaW5jZSBpdCBpcyBhZGRl ZCBvbiBMT0NBVElPTiB3aGVuIHJ1bm5pbmcgb24KKwkJIyBXaW5kb3dzLgorCQlsaWtlID0+IHFy L14KKwkJCVxuXFFDUkVBVEUgVEFCTEVTUEFDRSB0YmwyIE9XTkVSIHRhcCBMT0NBVElPTiBcRSg/ OkUpP1xRJyR0YWJsZXNwYWNlMic7XEUKKwkJCVxuXFFBTFRFUiBUQUJMRVNQQUNFIHRibDIgU0VU IChzZXFfcGFnZV9jb3N0PTEuMCk7XEUKKwkJL3htLAorCX0sCisKKwlyZXN0b3JlX2dyYW50cyA9 PiB7CisJCXNldHVwX3NxbCA9PiAiCisJCUNSRUFURSBEQVRBQkFTRSB0YXBncmFudHNkYjsKKwkJ Q1JFQVRFIFNDSEVNQSBwcml2YXRlOworCQlDUkVBVEUgU0VRVUVOQ0Ugc2VyaWFsIFNUQVJUIDEw MTsKKwkJQ1JFQVRFIEZVTkNUSU9OIGZuKCkgUkVUVVJOUyB2b2lkIEFTIFwkXCQKKwkJQkVHSU4K KwkJRU5EOworCQlcJFwkIExBTkdVQUdFIHBscGdzcWw7CisJCUNSRUFURSBST0xFIHN1cGVyOwor CQlDUkVBVEUgUk9MRSBncmFudDE7CisJCUNSRUFURSBST0xFIGdyYW50MjsKKwkJQ1JFQVRFIFJP TEUgZ3JhbnQzOworCQlDUkVBVEUgUk9MRSBncmFudDQ7CisJCUNSRUFURSBST0xFIGdyYW50NTsK KwkJQ1JFQVRFIFJPTEUgZ3JhbnQ2OworCQlDUkVBVEUgUk9MRSBncmFudDc7CisJCUNSRUFURSBS T0xFIGdyYW50ODsKKworCQlDUkVBVEUgVEFCTEUgdCAoaWQgaW50KTsKKwkJSU5TRVJUIElOVE8g dCBWQUxVRVMgKDEpLCAoMiksICgzKSwgKDQpOworCisJCUdSQU5UIFNFTEVDVCBPTiBUQUJMRSB0 IFRPIGdyYW50MTsKKwkJR1JBTlQgSU5TRVJUIE9OIFRBQkxFIHQgVE8gZ3JhbnQyOworCQlHUkFO VCBBTEwgUFJJVklMRUdFUyBPTiBUQUJMRSB0IHRvIGdyYW50MzsKKwkJR1JBTlQgQ09OTkVDVCwg Q1JFQVRFIE9OIERBVEFCQVNFIHRhcGdyYW50c2RiIFRPIGdyYW50NDsKKwkJR1JBTlQgVVNBR0Us IENSRUFURSBPTiBTQ0hFTUEgcHJpdmF0ZSBUTyBncmFudDU7CisJCUdSQU5UIFVTQUdFLCBTRUxF Q1QsIFVQREFURSBPTiBTRVFVRU5DRSBzZXJpYWwgVE8gZ3JhbnQ2OworCQlHUkFOVCBzdXBlciBU TyBncmFudDc7CisJCUdSQU5UIEVYRUNVVEUgT04gRlVOQ1RJT04gZm4oKSBUTyBncmFudDg7CisJ CSIsCisJCWR1bXBfY21kID0+IFsKKwkJCSdwZ19kdW1wYWxsJywKKwkJCSctLWZvcm1hdCcgPT4g J2RpcmVjdG9yeScsCisJCQknLS1maWxlJyA9PiAiJHRlbXBkaXIvcmVzdG9yZV9ncmFudHMiLAor CQldLAorCQlyZXN0b3JlX2NtZCA9PiBbCisJCQkncGdfcmVzdG9yZScsICctQycsCisJCQknLS1m b3JtYXQnID0+ICdkaXJlY3RvcnknLAorCQkJJy0tZmlsZScgPT4gIiR0ZW1wZGlyL3Jlc3RvcmVf Z3JhbnRzLnNxbCIsCisJCQkiJHRlbXBkaXIvcmVzdG9yZV9ncmFudHMiLAorCQldLAorCQlsaWtl ID0+IHFyL14KKwkJCVxuXFFHUkFOVCBzdXBlciBUTyBncmFudDcgV0lUSCBJTkhFUklUIFRSVUUg R1JBTlRFRCBCWVxFCisJCQkoLipcbikqCisJCQlcblxRR1JBTlQgQUxMIE9OIFNDSEVNQSBwcml2 YXRlIFRPIGdyYW50NTtcRQorCQkJKC4qXG4pKgorCQkJXG5cUUdSQU5UIEFMTCBPTiBGVU5DVElP TiBwdWJsaWMuZm4oKSBUTyBncmFudDg7XEUKKwkJCSguKlxuKSoKKwkJCVxuXFFHUkFOVCBBTEwg T04gU0VRVUVOQ0UgcHVibGljLnNlcmlhbCBUTyBncmFudDY7XEUKKwkJCSguKlxuKSoKKwkJCVxu XFFHUkFOVCBTRUxFQ1QgT04gVEFCTEUgcHVibGljLnQgVE8gZ3JhbnQxO1xFCisJCQlcblxRR1JB TlQgSU5TRVJUIE9OIFRBQkxFIHB1YmxpYy50IFRPIGdyYW50MjtcRQorCQkJXG5cUUdSQU5UIEFM TCBPTiBUQUJMRSBwdWJsaWMudCBUTyBncmFudDM7XEUKKwkJCSguKlxuKSoKKwkJCVxuXFFHUkFO VCBDUkVBVEUsQ09OTkVDVCBPTiBEQVRBQkFTRSB0YXBncmFudHNkYiBUTyBncmFudDQ7XEUKKwkJ L3htLAorCX0sCisKKwlleGNsdWRpbmdfZGF0YWJhc2VzID0+IHsKKwkJc2V0dXBfc3FsID0+ICdD UkVBVEUgREFUQUJBU0UgZGIxOworCQlcYyBkYjEKKwkJQ1JFQVRFIFRBQkxFIHQxIChpZCBpbnQp OworCQlJTlNFUlQgSU5UTyB0MSBWQUxVRVMgKDEpLCAoMiksICgzKSwgKDQpOworCQlDUkVBVEUg VEFCTEUgdDIgKGlkIGludCk7CisJCUlOU0VSVCBJTlRPIHQyIFZBTFVFUyAoMSksICgyKSwgKDMp LCAoNCk7CisKKwkJQ1JFQVRFIERBVEFCQVNFIGRiMjsKKwkJXGMgZGIyCisJCUNSRUFURSBUQUJM RSB0MyAoaWQgaW50KTsKKwkJSU5TRVJUIElOVE8gdDMgVkFMVUVTICgxKSwgKDIpLCAoMyksICg0 KTsKKwkJQ1JFQVRFIFRBQkxFIHQ0IChpZCBpbnQpOworCQlJTlNFUlQgSU5UTyB0NCBWQUxVRVMg KDEpLCAoMiksICgzKSwgKDQpOworCisJCUNSRUFURSBEQVRBQkFTRSBkYmV4MzsKKwkJXGMgZGJl eDMKKwkJQ1JFQVRFIFRBQkxFIHQ1IChpZCBpbnQpOworCQlJTlNFUlQgSU5UTyB0NSBWQUxVRVMg KDEpLCAoMiksICgzKSwgKDQpOworCQlDUkVBVEUgVEFCTEUgdDYgKGlkIGludCk7CisJCUlOU0VS VCBJTlRPIHQ2IFZBTFVFUyAoMSksICgyKSwgKDMpLCAoNCk7CisKKwkJQ1JFQVRFIERBVEFCQVNF IGRiZXg0OworCQlcYyBkYmV4NAorCQlDUkVBVEUgVEFCTEUgdDcgKGlkIGludCk7CisJCUlOU0VS VCBJTlRPIHQ3IFZBTFVFUyAoMSksICgyKSwgKDMpLCAoNCk7CisJCUNSRUFURSBUQUJMRSB0OCAo aWQgaW50KTsKKwkJSU5TRVJUIElOVE8gdDggVkFMVUVTICgxKSwgKDIpLCAoMyksICg0KTsKKwor CQlDUkVBVEUgREFUQUJBU0UgZGI1OworCQlcYyBkYjUKKwkJQ1JFQVRFIFRBQkxFIHQ5IChpZCBp bnQpOworCQlJTlNFUlQgSU5UTyB0OSBWQUxVRVMgKDEpLCAoMiksICgzKSwgKDQpOworCQlDUkVB VEUgVEFCTEUgdDEwIChpZCBpbnQpOworCQlJTlNFUlQgSU5UTyB0MTAgVkFMVUVTICgxKSwgKDIp LCAoMyksICg0KTsKKwkJJywKKwkJZHVtcF9jbWQgPT4gWworCQkJJ3BnX2R1bXBhbGwnLAorCQkJ Jy0tZm9ybWF0JyA9PiAnZGlyZWN0b3J5JywKKwkJCSctLWZpbGUnID0+ICIkdGVtcGRpci9leGNs dWRpbmdfZGF0YWJhc2VzIiwKKwkJCSctLWV4Y2x1ZGUtZGF0YWJhc2UnID0+ICdkYmV4KicsCisJ CV0sCisJCXJlc3RvcmVfY21kID0+IFsKKwkJCSdwZ19yZXN0b3JlJywgJy1DJywKKwkJCSctLWZv cm1hdCcgPT4gJ2RpcmVjdG9yeScsCisJCQknLS1maWxlJyA9PiAiJHRlbXBkaXIvZXhjbHVkaW5n X2RhdGFiYXNlcy5zcWwiLAorCQkJJy0tZXhjbHVkZS1kYXRhYmFzZScgPT4gJ2RiNScsCisJCQki JHRlbXBkaXIvZXhjbHVkaW5nX2RhdGFiYXNlcyIsCisJCV0sCisJCWxpa2UgPT4gcXIvXgorCQkJ XG5cUUNSRUFURSBEQVRBQkFTRSBkYjFcRQorCQkJKC4qXG4pKgorCQkJXG5cUUNSRUFURSBUQUJM RSBwdWJsaWMudDEgKFxFCisJCQkoLipcbikqCisJCQlcblxRQ1JFQVRFIFRBQkxFIHB1YmxpYy50 MiAoXEUKKwkJCSguKlxuKSoKKwkJCVxuXFFDUkVBVEUgREFUQUJBU0UgZGIyXEUKKwkJCSguKlxu KSoKKwkJCVxuXFFDUkVBVEUgVEFCTEUgcHVibGljLnQzIChcRQorCQkJKC4qXG4pKgorCQkJXG5c UUNSRUFURSBUQUJMRSBwdWJsaWMudDQgKC94bSwKKwkJdW5saWtlID0+IHFyL14KKwkJCVxuXFFD UkVBVEUgREFUQUJBU0UgZGIzXEUKKwkJCSguKlxuKSoKKwkJCVxuXFFDUkVBVEUgVEFCTEUgcHVi bGljLnQ1IChcRQorCQkJKC4qXG4pKgorCQkJXG5cUUNSRUFURSBUQUJMRSBwdWJsaWMudDYgKFxF CisJCQkoLipcbikqCisJCQlcblxRQ1JFQVRFIERBVEFCQVNFIGRiNFxFCisJCQkoLipcbikqCisJ CQlcblxRQ1JFQVRFIFRBQkxFIHB1YmxpYy50NyAoXEUKKwkJCSguKlxuKSoKKwkJCVxuXFFDUkVB VEUgVEFCTEUgcHVibGljLnQ4IChcRQorCQkJXG5cUUNSRUFURSBEQVRBQkFTRSBkYjVcRQorCQkJ KC4qXG4pKgorCQkJXG5cUUNSRUFURSBUQUJMRSBwdWJsaWMudDkgKFxFCisJCQkoLipcbikqCisJ CQlcblxRQ1JFQVRFIFRBQkxFIHB1YmxpYy50MTAgKFxFCisJCS94bSwKKwl9LAorCisJZm9ybWF0 X2RpcmVjdG9yeSA9PiB7CisJCXNldHVwX3NxbCA9PiAiQ1JFQVRFIFRBQkxFIGZvcm1hdF9kaXJl Y3RvcnkoYSBpbnQsIGIgYm9vbGVhbiwgYyB0ZXh0KTsKKwkJSU5TRVJUIElOVE8gZm9ybWF0X2Rp cmVjdG9yeSBWQUxVRVMgKDEsIHRydWUsICduYW1lMScpLCAoMiwgZmFsc2UsICduYW1lMicpOyIs CisJCWR1bXBfY21kID0+IFsKKwkJCSdwZ19kdW1wYWxsJywKKwkJCSctLWZvcm1hdCcgPT4gJ2Rp cmVjdG9yeScsCisJCQknLS1maWxlJyA9PiAiJHRlbXBkaXIvZm9ybWF0X2RpcmVjdG9yeSIsCisJ CV0sCisJCXJlc3RvcmVfY21kID0+IFsKKwkJCSdwZ19yZXN0b3JlJywgJy1DJywKKwkJCSctLWZv cm1hdCcgPT4gJ2RpcmVjdG9yeScsCisJCQknLS1maWxlJyA9PiAiJHRlbXBkaXIvZm9ybWF0X2Rp cmVjdG9yeS5zcWwiLAorCQkJIiR0ZW1wZGlyL2Zvcm1hdF9kaXJlY3RvcnkiLAorCQldLAorCQls aWtlID0+IHFyL15cblxRQ09QWSBwdWJsaWMuZm9ybWF0X2RpcmVjdG9yeSAoYSwgYiwgYykgRlJP TSBzdGRpbjsveG0KKwl9LAorCisJZm9ybWF0X3RhciA9PiB7CisJCXNldHVwX3NxbCA9PiAiQ1JF QVRFIFRBQkxFIGZvcm1hdF90YXIoYSBpbnQsIGIgYm9vbGVhbiwgYyB0ZXh0KTsKKwkJSU5TRVJU IElOVE8gZm9ybWF0X3RhciBWQUxVRVMgKDEsIGZhbHNlLCAnbmFtZTMnKSwgKDIsIHRydWUsICdu YW1lNCcpOyIsCisJCWR1bXBfY21kID0+IFsKKwkJCSdwZ19kdW1wYWxsJywKKwkJCSctLWZvcm1h dCcgPT4gJ3RhcicsCisJCQknLS1maWxlJyA9PiAiJHRlbXBkaXIvZm9ybWF0X3RhciIsCisJCV0s CisJCXJlc3RvcmVfY21kID0+IFsKKwkJCSdwZ19yZXN0b3JlJywgJy1DJywKKwkJCSctLWZvcm1h dCcgPT4gJ3RhcicsCisJCQknLS1maWxlJyA9PiAiJHRlbXBkaXIvZm9ybWF0X3Rhci5zcWwiLAor CQkJIiR0ZW1wZGlyL2Zvcm1hdF90YXIiLAorCQldLAorCQlsaWtlID0+IHFyL15cblxRQ09QWSBw dWJsaWMuZm9ybWF0X3RhciAoYSwgYiwgYykgRlJPTSBzdGRpbjsveG0KKwl9LAorCisJZm9ybWF0 X2N1c3RvbSA9PiB7CisJCXNldHVwX3NxbCA9PiAiQ1JFQVRFIFRBQkxFIGZvcm1hdF9jdXN0b20o YSBpbnQsIGIgYm9vbGVhbiwgYyB0ZXh0KTsKKwkJSU5TRVJUIElOVE8gZm9ybWF0X2N1c3RvbSBW QUxVRVMgKDEsIGZhbHNlLCAnbmFtZTUnKSwgKDIsIHRydWUsICduYW1lNicpOyIsCisJCWR1bXBf Y21kID0+IFsKKwkJCSdwZ19kdW1wYWxsJywKKwkJCSctLWZvcm1hdCcgPT4gJ2N1c3RvbScsCisJ CQknLS1maWxlJyA9PiAiJHRlbXBkaXIvZm9ybWF0X2N1c3RvbSIsCisJCV0sCisJCXJlc3RvcmVf Y21kID0+IFsKKwkJCSdwZ19yZXN0b3JlJywgJy1DJywKKwkJCSctLWZvcm1hdCcgPT4gJ2N1c3Rv bScsCisJCQknLS1maWxlJyA9PiAiJHRlbXBkaXIvZm9ybWF0X2N1c3RvbS5zcWwiLAorCQkJIiR0 ZW1wZGlyL2Zvcm1hdF9jdXN0b20iLAorCQldLAorCQlsaWtlID0+IHFyL14gXG5cUUNPUFkgcHVi bGljLmZvcm1hdF9jdXN0b20gKGEsIGIsIGMpIEZST00gc3RkaW47L3htCisJfSwKKworCWR1bXBf Z2xvYmFsc19vbmx5ID0+IHsKKwkJc2V0dXBfc3FsID0+ICJDUkVBVEUgVEFCTEUgZm9ybWF0X2Rp cihhIGludCwgYiBib29sZWFuLCBjIHRleHQpOworCQlJTlNFUlQgSU5UTyBmb3JtYXRfZGlyIFZB TFVFUyAoMSwgZmFsc2UsICduYW1lNScpLCAoMiwgdHJ1ZSwgJ25hbWU2Jyk7IiwKKwkJZHVtcF9j bWQgPT4gWworCQkJJ3BnX2R1bXBhbGwnLAorCQkJJy0tZm9ybWF0JyA9PiAnZGlyZWN0b3J5JywK KwkJCSctLWdsb2JhbHMtb25seScsCisJCQknLS1maWxlJyA9PiAiJHRlbXBkaXIvZHVtcF9nbG9i YWxzX29ubHkiLAorCQldLAorCQlyZXN0b3JlX2NtZCA9PiBbCisJCQkncGdfcmVzdG9yZScsICct QycsICctLWdsb2JhbHMtb25seScsCisJCQknLS1mb3JtYXQnID0+ICdkaXJlY3RvcnknLAorCQkJ Jy0tZmlsZScgPT4gIiR0ZW1wZGlyL2R1bXBfZ2xvYmFsc19vbmx5LnNxbCIsCisJCQkiJHRlbXBk aXIvZHVtcF9nbG9iYWxzX29ubHkiLAorCQldLAorCQlsaWtlID0+IHFyLworICAgICAgICAgICAg XlxzKlxRQ1JFQVRFIFJPTEUgZHVtcGFsbDtcRVxzKlxuCisJCQkveG0KKwl9LCk7CisKKyMgRmly c3QgZXhlY3V0ZSB0aGUgc2V0dXBfc3FsCitmb3JlYWNoIG15ICRydW4gKHNvcnQga2V5cyAlcGdk dW1wYWxsX3J1bnMpCit7CisJaWYgKCRwZ2R1bXBhbGxfcnVuc3skcnVufS0+e3NldHVwX3NxbH0p CisJeworCQkkbm9kZS0+c2FmZV9wc3FsKCRydW5fZGIsICRwZ2R1bXBhbGxfcnVuc3skcnVufS0+ e3NldHVwX3NxbH0pOworCX0KK30KKworIyBFeGVjdXRlIHRoZSB0ZXN0cworZm9yZWFjaCBteSAk cnVuIChzb3J0IGtleXMgJXBnZHVtcGFsbF9ydW5zKQoreworCSMgQ3JlYXRlIGEgbmV3IHRhcmdl dCBjbHVzdGVyIHRvIHBnX3Jlc3RvcmUgZWFjaCB0ZXN0IGNhc2UgcnVuIHNvIHRoYXQgd2UKKwkj IGRvbid0IG5lZWQgdG8gdGFrZSBjYXJlIG9mIHRoZSBjbGVhbnVwIGZyb20gdGhlIHRhcmdldCBj bHVzdGVyIGFmdGVyIGVhY2gKKwkjIHJ1bi4KKwlteSAkdGFyZ2V0X25vZGUgPSBQb3N0Z3JlU1FM OjpUZXN0OjpDbHVzdGVyLT5uZXcoInRhcmdldF8kcnVuIik7CisJJHRhcmdldF9ub2RlLT5pbml0 OworCSR0YXJnZXRfbm9kZS0+c3RhcnQ7CisKKwkjIER1bXBhbGwgZnJvbSBub2RlIGNsdXN0ZXIu CisJJG5vZGUtPmNvbW1hbmRfb2soXEB7ICRwZ2R1bXBhbGxfcnVuc3skcnVufS0+e2R1bXBfY21k fSB9LAorCQkiJHJ1bjogcGdfZHVtcGFsbCBydW5zIik7CisKKwkjIFJlc3RvcmUgdGhlIGR1bXAg b24gInRhcmdldF9ub2RlIiBjbHVzdGVyLgorCW15IEByZXN0b3JlX2NtZCA9ICgKKwkJQHsgJHBn ZHVtcGFsbF9ydW5zeyRydW59LT57cmVzdG9yZV9jbWR9IH0sCisJCSctLWhvc3QnLCAkdGFyZ2V0 X25vZGUtPmhvc3QsICctLXBvcnQnLCAkdGFyZ2V0X25vZGUtPnBvcnQpOworCisJbXkgKCRzdGRv dXQsICRzdGRlcnIpID0gcnVuX2NvbW1hbmQoXEByZXN0b3JlX2NtZCk7CisKKwkjIHBnX3Jlc3Rv cmUgLS1maWxlIG91dHB1dCBmaWxlLgorCW15ICRvdXRwdXRfZmlsZSA9IHNsdXJwX2ZpbGUoIiR0 ZW1wZGlyLyR7cnVufS5zcWwiKTsKKworCWlmICggICAhKCRwZ2R1bXBhbGxfcnVuc3skcnVufS0+ e2xpa2V9KQorCQkmJiAhKCRwZ2R1bXBhbGxfcnVuc3skcnVufS0+e3VubGlrZX0pKQorCXsKKwkJ ZGllICJtaXNzaW5nIFwibGlrZVwiIG9yIFwidW5saWtlXCIgaW4gdGVzdCBcIiRydW5cIiI7CisJ fQorCisJaWYgKCRwZ2R1bXBhbGxfcnVuc3skcnVufS0+e2xpa2V9KQorCXsKKwkJbGlrZSgkb3V0 cHV0X2ZpbGUsICRwZ2R1bXBhbGxfcnVuc3skcnVufS0+e2xpa2V9LCAic2hvdWxkIGR1bXAgJHJ1 biIpOworCX0KKworCWlmICgkcGdkdW1wYWxsX3J1bnN7JHJ1bn0tPnt1bmxpa2V9KQorCXsKKwkJ dW5saWtlKAorCQkJJG91dHB1dF9maWxlLAorCQkJJHBnZHVtcGFsbF9ydW5zeyRydW59LT57dW5s aWtlfSwKKwkJCSJzaG91bGQgbm90IGR1bXAgJHJ1biIpOworCX0KK30KKworIyBTb21lIG5lZ2F0 aXZlIHRlc3QgY2FzZSB3aXRoIGR1bXAgb2YgcGdfZHVtcGFsbCBhbmQgcmVzdG9yZSB1c2luZyBw Z19yZXN0b3JlCisjIHRlc3QgY2FzZSAxOiB3aGVuIC1DIGlzIG5vdCB1c2VkIGluIHBnX3Jlc3Rv cmUgd2l0aCBkdW1wIG9mIHBnX2R1bXBhbGwKKyRub2RlLT5jb21tYW5kX2ZhaWxzX2xpa2UoCisJ WworCQkncGdfcmVzdG9yZScsCisJCSIkdGVtcGRpci9mb3JtYXRfY3VzdG9tIiwKKwkJJy0tZm9y bWF0JyA9PiAnY3VzdG9tJywKKwkJJy0tZmlsZScgPT4gIiR0ZW1wZGlyL2Vycm9yX3Rlc3Quc3Fs IiwKKwldLAorCXFyL1xRcGdfcmVzdG9yZTogZXJyb3I6IG9wdGlvbiAtQ1wvLS1jcmVhdGUgbXVz dCBiZSBzcGVjaWZpZWQgd2hlbiByZXN0b3JpbmcgYW4gYXJjaGl2ZSBjcmVhdGVkIGJ5IHBnX2R1 bXBhbGxcRS8sCisJJ1doZW4gLUMgaXMgbm90IHVzZWQgaW4gcGdfcmVzdG9yZSB3aXRoIGR1bXAg b2YgcGdfZHVtcGFsbCcpOworCisjIHRlc3QgY2FzZSAyOiBXaGVuIC0tbGlzdCBvcHRpb24gaXMg dXNlZCB3aXRoIGR1bXAgb2YgcGdfZHVtcGFsbAorJG5vZGUtPmNvbW1hbmRfZmFpbHNfbGlrZSgK KwlbCisJCSdwZ19yZXN0b3JlJywKKwkJIiR0ZW1wZGlyL2Zvcm1hdF9jdXN0b20iLCAnLUMnLAor CQknLS1mb3JtYXQnID0+ICdjdXN0b20nLAorCQknLS1saXN0JywKKwkJJy0tZmlsZScgPT4gIiR0 ZW1wZGlyL2Vycm9yX3Rlc3Quc3FsIiwKKwldLAorCXFyL1xRcGdfcmVzdG9yZTogZXJyb3I6IG9w dGlvbiAtbFwvLS1saXN0IGNhbm5vdCBiZSB1c2VkIHdoZW4gcmVzdG9yaW5nIGFuIGFyY2hpdmUg Y3JlYXRlZCBieSBwZ19kdW1wYWxsXEUvLAorCSdXaGVuIC0tbGlzdCBpcyB1c2VkIGluIHBnX3Jl c3RvcmUgd2l0aCBkdW1wIG9mIHBnX2R1bXBhbGwnKTsKKworIyB0ZXN0IGNhc2UgMzogV2hlbiBu b24tZXhpc3QgZGF0YWJhc2UgaXMgZ2l2ZW4gd2l0aCAtZCBvcHRpb24KKyRub2RlLT5jb21tYW5k X2ZhaWxzX2xpa2UoCisJWworCQkncGdfcmVzdG9yZScsCisJCSIkdGVtcGRpci9mb3JtYXRfY3Vz dG9tIiwgJy1DJywKKwkJJy0tZm9ybWF0JyA9PiAnY3VzdG9tJywKKwkJJy1kJyA9PiAnZGJwcScs CisJXSwKKwlxci9cUUZBVEFMOiAgZGF0YWJhc2UgImRicHEiIGRvZXMgbm90IGV4aXN0XEUvLAor CSdXaGVuIG5vbi1leGlzdGVudCBkYXRhYmFzZSBpcyBnaXZlbiB3aXRoIC1kIG9wdGlvbiBpbiBw Z19yZXN0b3JlIHdpdGggZHVtcCBvZiBwZ19kdW1wYWxsJworKTsKKworJG5vZGUtPnN0b3AoJ2Zh c3QnKTsKKworZG9uZV90ZXN0aW5nKCk7Ci0tIAoyLjM5LjMKCg== --00000000000013807d06434b5939--