Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1taJQR-000hdw-KP for pgsql-hackers@arkaria.postgresql.org; Tue, 21 Jan 2025 18:56:36 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1taJQQ-0046Iz-Ni for pgsql-hackers@arkaria.postgresql.org; Tue, 21 Jan 2025 18:56:34 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1taJQP-0046Iq-Op for pgsql-hackers@lists.postgresql.org; Tue, 21 Jan 2025 18:56:34 +0000 Received: from mail-wm1-x330.google.com ([2a00:1450:4864:20::330]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1taJQN-000mHe-03 for pgsql-hackers@postgresql.org; Tue, 21 Jan 2025 18:56:32 +0000 Received: by mail-wm1-x330.google.com with SMTP id 5b1f17b1804b1-4363dc916ceso655655e9.0 for ; Tue, 21 Jan 2025 10:56:31 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1737485790; x=1738090590; darn=postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=f8ZDksiOA4w2B//SbYBxjMlxhjmO318eC+4/EuXENFw=; b=GA1dUIS/GbSDdVjeW5Buwuqu2fnszxUvmiyj1XYH73O7He/0nmWXOyvySF8LkHtnR1 oXyOAhlHYeijuEl8zjZOu0gPUpSlqeRz1wJS9IpogW5gIj7p1de+TAqauWprziCNLac0 ijvSBoxVGfxWJXMcuEo5ZQbJaBKa816pYMAa60evJTv0mjE+BBRDkNoLUG/1Mz5lxyzK ZQlkN+UHuHdfuYGM1ctK3R+jKEwOx3x5CG0A88z94fM4D+Cu79PKO6hFrNQHM2W7HKt1 y+6f6pCY+nZzc7WVChE0rb+UNgyu8wM8qqqimdmozt7u2UmTClaCSGyjJBdFId/l8IkH VdwQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1737485790; x=1738090590; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=f8ZDksiOA4w2B//SbYBxjMlxhjmO318eC+4/EuXENFw=; b=CH1DDzA2od6XXrXXzIIYalkgpoNh7olPBZP9fmbSM866Yt7bw/ZKXjQDiOvFAoFvaW B28OXToGRcxOOzO0c8xU99/HDB0DhjIAn4ifYV3aDXX5CE8E2YhVfE/b2X/7LI5W1oXv CkuKtlWrLzHs8F5sr3LQMOzpX4JwNsYVHuz5Lh9DVe+J6UFBXwwSniDKlLACqxCpSIja Mmn3HK1wa3YSQ8vuomhEabUfAj4sFG08xz19wlKIp8VJf53dJfAnfmMHZRh3udj2fR1k BdfU63Bbu2Ecg3Gks/N6C/ArZG0ML1zyOTWBEvUMkqXqM43nTPBXnjbdJjnb9dbBmGhr TB4Q== X-Forwarded-Encrypted: i=1; AJvYcCXF0xjnxUS6RWryuhe+M/x+74vpS75JBgSbVVQcIIpPPlUK0015scbm2GUGjcJcKNbSTmz4tSctPN9Rw0uX@postgresql.org X-Gm-Message-State: AOJu0Yzz2fAB0M9jnen9Cgxe3bAOQdgwIZKniE821D33I7FYCtyp0UTx bxYphYlnSdJowMM3oKVxZ/pKv/qWyf1m92WKPGSJ+7ylsYTvsMeZlikZUy0VeHaoLjm5iEpgOLs 7hOVCphHGTHiF7Do0R98mMO2Bmc6CDs01 X-Gm-Gg: ASbGnctZQt11pB2BQjMC8hvIqj502jbvr4gLgKw8lK6M6RJIWmA9dhR77EPlxQlujhn rdOwKcdZKfi9III5SndB9dVOe77wRroin3ibfQf/uG1b6bNIBqQ== X-Google-Smtp-Source: AGHT+IGIzkWkQdPx0JghJRyA3MCyv/7RBz+n/rWl8G5clNdonzj5O5Z69yQXqU2Gplol7uwWOJAkO0+iV9jYPxAfEUw= X-Received: by 2002:a05:600c:1e09:b0:434:f2af:6e74 with SMTP id 5b1f17b1804b1-438919136c6mr167772145e9.15.1737485789328; Tue, 21 Jan 2025 10:56:29 -0800 (PST) MIME-Version: 1.0 References: <202501110844.5ztsym4vbflm@alvherre.pgsql> In-Reply-To: From: Mahendra Singh Thalor Date: Wed, 22 Jan 2025 00:26:17 +0530 X-Gm-Features: AbW1kvZEYjrxiSI0s0XJmJXLzgySHLLh1eJhW81OfoUpwb5XMnsvh2-FvzFbrxo Message-ID: Subject: Re: Non-text mode for pg_dumpall To: jian he Cc: Alvaro Herrera , Guillaume Lelarge , Nathan Bossart , Magnus Hagander , Tom Lane , Andrew Dunstan , PostgreSQL-development , Dilip Kumar Content-Type: multipart/mixed; boundary="00000000000046e92f062c3bef56" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000046e92f062c3bef56 Content-Type: text/plain; charset="UTF-8" Thanks Jian for the detailed review and testing. On Mon, 20 Jan 2025 at 21:32, jian he wrote: > > hi. > some minor issues come to my mind when I look at it again. > > looking at set_null_conf, > i think "if (archDumpFormat != archNull)" can be: > > if (archDumpFormat != archNull) > { > OPF = fopen(toc_path, "w"); > if (!OPF) > pg_fatal("could not open global.dat file: \"%s\" for writing: %m", > toc_path); > } > > some places we use ``fopen(filename, PG_BINARY_W)``, > some places we use ``fopen(filename, "w");`` > kind of inconsistent... Fixed. We should use PG_BINARY_W/PG_BINARY_R. > > > + printf(_(" -F, --format=c|d|t|p output file format > (custom, directory, tar,\n" > + " plain text (default))\n")); > this indentation level is not right? > if we look closely at the surrounding output of `pg_dumpall --help`. Fixed. > > > pg_dump.sgml --create option description: > This option is ignored when emitting an archive (non-text) output file. For the > archive formats, you can specify the option when you call pg_restore. > > in runPgDump, we have: > /* > * If this is non-plain format dump, then append file name and dump > * format to the pg_dump command to get archive dump. > */ > if (archDumpFormat != archNull) > { > printfPQExpBuffer(&cmd, "\"%s\" -f %s %s", pg_dump_bin, > dbfile, create_opts); > ... > } > > so in here, create_opts is not necessary per pg_dump.sgml above description. > we can simplify it as: > > if (archDumpFormat != archNull) > { > printfPQExpBuffer(&cmd, "\"%s\" --file=%s", pg_dump_bin, dbfile); > } > ? We are already using the same code without this patch also. I haven't tested this without create_opts. I think, if your theory is right, then you can submit a patch for this change in another thread. On Tue, 21 Jan 2025 at 09:37, jian he wrote: > > hi. > > $BIN10/pg_restore --globals-only --verbose --file=test.sql x.dump > it will create a "test.sql" file, but it should create file test.sql > (no double quotes). Fixed. > > ------<>>>>------ > if (archDumpFormat != archNull && > (!filename || strcmp(filename, "") == 0)) > { > pg_log_error("options -F/--format=d|c|t requires option > -f/--filename with non-empty string"); > ... > } > here, it should be > pg_log_error("options -F/--format=d|c|t requires option -f/--file with > non-empty string"); Fixed. > ------<>>>>------ > the following pg_dumpall, pg_restore not working. > $BIN10/pg_dumpall --format=custom --file=x1.dump --globals-only > $BIN10/pg_restore --file=3.sql x1.dump > > ERROR: pg_restore: error: directory "x1.dump" does not appear to be a > valid archive ("toc.dat" does not exist) Fixed. > > these two also not working: > $BIN10/pg_dumpall --format=custom --file=x1.dump --verbose --globals-only > $BIN10/pg_restore --file=3.sql --format=custom x1.dump Fixed. > > error message: > pg_restore: error: could not read from input file: Is a directory Fixed. > ------<>>>>------ > IsFileExistsInDirectory function is the same as _fileExistsInDirectory. > Can we make _fileExistsInDirectory extern function? No, we can't make it as we are using this function in different-2 modules. > > + /* If global.dat and map.dat are exist, then proces them. */ > + if (IsFileExistsInDirectory(pg_strdup(inputFileSpec), "global.dat") > + && IsFileExistsInDirectory(pg_strdup(inputFileSpec), > "map.dat")) > + { > comment typo, "proces" should "process". Fixed. > here, we don't need pg_strdup? In most places, we are dumping strings so I kept the same here also. > ------<>>>>------ > # pg_restore tests > +command_fails_like( > + [ > + 'pg_restore', '-p', $port, '-f', $plainfile, > + "--exclude-database=grabadge", > + '--globals-only' > + ], > + qr/\Qg_restore: error: option --exclude-database cannot be used > together with -g\/--globals-only\E/, > + 'pg_restore: option --exclude-database cannot be used together > with -g/--globals-only'); > > We can put the above test on src/bin/pg_dump/t/001_basic.pl, > since validating these conflict options don't need a cluster to be set up. Done. > > > typedef struct SimpleDatabaseOidListCell > and > typedef struct SimpleDatabaseOidList > need also put into src/tools/pgindent/typedefs.list Fixed. On Tue, 21 Jan 2025 at 15:00, jian he wrote: > > hi. > > + printfPQExpBuffer(query, > + "SELECT substring ( " > + " '%s' , " > + " '%s' ) ", str, ptrn); > + result = executeQuery(conn, query->data); > + if (PQresultStatus(result) == PGRES_TUPLES_OK) > + { > + if (PQntuples(result) == 1) > + { > + const char *outstr; > + > + outstr = PQgetvalue(result, 0, 0); > i think here you should use PQgetisnull(result, 0, 0) Fixed. > > example: pg_dumpall and pg_restore: > $BIN10/pg_dumpall --verbose --format=custom --file=x12.dump > $BIN10/pg_restore --verbose --dbname=src10 x12.dump > > some log message for the above command: > pg_restore: found dbname as : "template1" and db_oid:1 in map.dat file > while restoring > pg_restore: found dbname as : "s1" and db_oid:17960 in map.dat file > while restoring > pg_restore: found dbname as : "src10" and db_oid:5 in map.dat file > while restoring > pg_restore: found total 3 database names in map.dat file > pg_restore: needs to restore 3 databases out of 3 databases > pg_restore: restoring dump of pg_dumpall without -C option, there > might be multiple databases in directory. > pg_restore: restoring database "template1" > pg_restore: connecting to database for restore > pg_restore: implied data-only restore > pg_restore: restoring database "s1" > pg_restore: connecting to database for restore > pg_restore: processing data for table "public.t" > pg_restore: while PROCESSING TOC: > pg_restore: from TOC entry 3376; 0 17961 TABLE DATA t jian > pg_restore: error: could not execute query: ERROR: relation > "public.t" does not exist > Command was: COPY public.t (a) FROM stdin; > > > 1. message: "pg_restore: implied data-only restore" > Normally pg_dump and pg_restore will dump the schema and the data, > then when we are connecting to the same database with pg_restore, > there will be lots of schema elements already exists ERROR. > but the above command case, pg_restore only restores the content/data > not schema, that's why there is very little error happening. > so here pg_restore not restore schema seems not ok? > > > 2. pg_dumpall with non-text mode, we don't have \connect command in > file global.dat or map.dat > I have database "s1" with table "public.t". > if I create a table src10.public.t (database.schema.table) with column a. > then pg_restore will restore content of s1.public.t (database s1) to > src10.public.t (database src10). > > in ConnectDatabase(Archive *AHX, > const ConnParams *cparams, > bool isReconnect) > i added > if (cparams->dbname) > fprintf(stderr, "pg_backup_db.c:%d %s called connecting to %s > now\n", __LINE__, __func__, cparams->dbname); > to confirm that we are connecting the same database "src10", while > dumping all the contents in x12.dump. I will do some more study for this and will update. As of now, I added the "--create" option in the dump. Here, I am attaching an updated patch for review and testing. -- Thanks and Regards Mahendra Singh Thalor EnterpriseDB: http://www.enterprisedb.com --00000000000046e92f062c3bef56 Content-Type: application/octet-stream; name="v11_pg_dumpall-with-directory-tar-custom-format-21-jan.patch" Content-Disposition: attachment; filename="v11_pg_dumpall-with-directory-tar-custom-format-21-jan.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m66u5zb90 RnJvbSBiY2EzNDI5MzNjOTVhNjczOWUxOTVkMzMzMjU4NDczN2RkNGY2NGNjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYWhlbmRyYSBTaW5naCBUaGFsb3IgPG1haGk2cnVuQGdtYWls LmNvbT4KRGF0ZTogV2VkLCAyMiBKYW4gMjAyNSAwMDowODoyMiArMDUzMApTdWJqZWN0OiBbUEFU Q0hdIHBnX2R1bXBhbGwgd2l0aCBkaXJlY3Rvcnl8dGFyfGN1c3RvbSBmb3JtYXQgYW5kIHJlc3Rv cmUgIGl0IAogYnkgcGdfcmVzdG9yZQoKbmV3IG9wdGlvbiB0byBwZ19kdW1wYWxsOgotRiwgLS1m b3JtYXQ9ZHx0fGN8cCAgb3V0cHV0IGZpbGUgZm9ybWF0ICggcGxhaW4gdGV4dCAoZGVmYXVsdCkp CgpFeDoxIC4vcGdfZHVtcGFsbCAtLWZvcm1hdD1kaXJlY3RvcnkgLS1maWxlPWR1bXBEaXJOYW1l CkV4OjIgLi9wZ19kdW1wYWxsIC0tZm9ybWF0PXRhciAtLWZpbGU9ZHVtcERpck5hbWUKRXg6MyAu L3BnX2R1bXBhbGwgLS1mb3JtYXQ9Y3VzdG9tIC0tZmlsZT1kdW1wRGlyTmFtZQpFeDo0IC4vcGdf ZHVtcGFsbCAtLWZvcm1hdD1wbGFpbiAtLWZpbGU9ZHVtcERpck5hbWUKCmR1bXBzIGFyZSBhczoK Z2xvYmFsLmRhdCA6OjogZ2xvYmFsIHNxbCBjb21tYW5kcyBpbiBzaW1wbGUgcGxhaW4gZm9ybWF0 Cm1hcC5kYXQuICAgOjo6IGRib2lkIGRibmFtZSAtLS1lbnRyaWVzIGZvciBhbGwgZGF0YWJhc2Vz IGluIHNpbXBsZSB0ZXh0IGZvcm0KZGF0YWJhc2VzLiA6OjoKICAgICAgc3ViZGlyICAgICBkYm9p ZDEgIC0+IHRvYy5kYXQgYW5kIGRhdGEgZmlsZXMgaW4gYXJjaGl2ZSBmb3JtYXQKICAgICAgc3Vi ZGlyICAgICBkYm9pZDIuIC0+IHRvYy5kYXQgYW5kIGRhdGEgZmlsZXMgaW4gYXJjaGl2ZSBmb3Jt YXQKICAgICAgICAgICAgICBldGMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCk5PVEU6CmlmIG5lZWRlZCwg cmVzdG9yZSBzaW5nbGUgZGIgYnkgcGFydGljdWxhciBzdWJkaXIKCkV4OiAuL3BnX3Jlc3RvcmUg LS1mb3JtYXQ9ZGlyZWN0b3J5IC1kIHBvc3RncmVzIGR1bXBEaXJOYW1lL2RhdGFiYXNlcy81CiAg IC0tIGhlcmUsIDUgaXMgdGhlIGRib2lkIG9mIHBvc3RncmVzIGRiCiAgIC0tIHRvIGdldCBkYm9p ZCwgcmVmZXIgZGJuYW1lIGluIG1hcC5maWxlCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpuZXcgb3B0aW9u cyB0byBwZ19yZXN0b3JlOgotZywgLS1nbG9iYWxzLW9ubHkgICAgICAgICAgIHJlc3RvcmUgb25s eSBnbG9iYWwgb2JqZWN0cywgbm8gZGF0YWJhc2VzCi0tZXhjbHVkZS1kYXRhYmFzZT1QQVRURVJO ICAgZXhjbHVkZSBkYXRhYmFzZSB3aG9zZSBuYW1lIG1hdGNoZXMgcGF0dGVybgoKV2hlbiB3ZSBn aXZlIC1nLy0tZ2xvYmFscy1vbmx5IG9wdGlvbiwgdGhlbiBvbmx5IHJlc3RvcmUgZ2xvYmFscywg bm8gZGIgcmVzdG9yaW5nLgoKRGVzaWduOgpXaGVuIC0tZm9ybWF0PWR8dHxjIGlzIHNwZWNpZmll ZCBhbmQgdGhlcmUgaXMgbm8gdG9jLmRhdCBpbiBtYWluIGRpcmVjdG9yeSwgdGhlbiBjaGVjawpm b3IgZ2xvYmFsLmRhdCBhbmQgbWFwLmRhdCB0byByZXN0b3JlIGFsbCBkYXRhYmFzZXMuIElmIGJv dGggZmlsZXMgYXJlIGV4aXN0cyBpbiBkaXJlY3RvcnksCnRoZW4gZmlyc3QgcmVzdG9yZSBhbGwg Z2xvYmFscyBmcm9tIGdsb2JhbC5kYXQgYW5kIHRoZW4gcmVzdG9yZSBhbGwgZGF0YWJhc2VzIG9u ZSBieSBvbmUKZnJvbSBtYXAuZGF0IGxpc3QuCgpUT0RPMTogV2UgbmVlZCB0byB0aGluayBmb3Ig LS1leGNsdWRlLWRhdGFiYXNlPVBBVFRFUk4gZm9yIHBnX3Jlc3RvcmUuCgpUT0RPMjogV2UgbmVl ZCB0byBtYWtlIGNoYW5nZXMgZm9yIGV4aXRfbmljZWx5IGFzIHdlIGFyZSBvbmUgZW50cnkgZm9y IGVhY2ggZGF0YWJhc2Ugd2hpbGUKcmVzdG9yaW5nLiBNQVhfT05fRVhJVF9OSUNFTFkKClRPRE8z OiBzb21lIG1vcmUgdGVzdCBjYXNlcyBmb3IgbmV3IGFkZGVkIG9wdGlvbnMuCgpUT0RPNDogV2Ug Y2FuIGR1bXAgYW5kIHJlc3RvcmUgZGF0YWJhc2VzIGluIHBhcmFsbGVsIG1vZGUuClRoaXMgbmVl ZHMgbW9yZSBzdHVkeQoKdGhyZWFkOgpodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9tZXNzYWdl LWlkL2ZsYXQvQ0FLWXROQXA5dk90eWRYTDNfcG5HSiUyQlRldFp0TiUzREZZU25aU01DcVhjZVUz bWtIUHhQZyU0MG1haWwuZ21haWwuY29tIzA2NjQzM2NiNWFlMDA3Y2JlMzVmZWZkZGY3OTZkNTJm Ci0tLQogZG9jL3NyYy9zZ21sL3JlZi9wZ19kdW1wYWxsLnNnbWwgICAgICAgICB8ICA3OCArKy0K IGRvYy9zcmMvc2dtbC9yZWYvcGdfcmVzdG9yZS5zZ21sICAgICAgICAgfCAgMjkgKwogc3JjL2Jp bi9wZ19kdW1wL01ha2VmaWxlICAgICAgICAgICAgICAgICB8ICAgOCArLQogc3JjL2Jpbi9wZ19k dW1wL2NvbW1vbl9kdW1wYWxsX3Jlc3RvcmUuYyB8IDMxNCArKysrKysrKysrCiBzcmMvYmluL3Bn X2R1bXAvY29tbW9uX2R1bXBhbGxfcmVzdG9yZS5oIHwgIDI2ICsKIHNyYy9iaW4vcGdfZHVtcC9t ZXNvbi5idWlsZCAgICAgICAgICAgICAgfCAgIDIgKwogc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1 cC5oICAgICAgICAgICAgICB8ICAgNCArLQogc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNo aXZlci5jICAgICB8ICAxNSArLQogc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF90YXIuYyAgICAg ICAgICB8ICAgMiArLQogc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF91dGlscy5jICAgICAgICB8 ICAgMyArLQogc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYyAgICAgICAgICAgICAgICB8ICAgMiAr LQogc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXBhbGwuYyAgICAgICAgICAgICB8IDUxNiArKysrKysr LS0tLS0tLS0tLQogc3JjL2Jpbi9wZ19kdW1wL3BnX3Jlc3RvcmUuYyAgICAgICAgICAgICB8IDcw MSArKysrKysrKysrKysrKysrKysrKysrLQogc3JjL2Jpbi9wZ19kdW1wL3QvMDAxX2Jhc2ljLnBs ICAgICAgICAgICB8ICAxMSArCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCAgICAg ICAgIHwgICAyICsKIDE1IGZpbGVzIGNoYW5nZWQsIDEzNzMgaW5zZXJ0aW9ucygrKSwgMzQwIGRl bGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iaW4vcGdfZHVtcC9jb21tb25fZHVt cGFsbF9yZXN0b3JlLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmluL3BnX2R1bXAvY29tbW9u X2R1bXBhbGxfcmVzdG9yZS5oCiBtb2RlIGNoYW5nZSAxMDA2NDQgPT4gMTAwNzU1IHNyYy9iaW4v cGdfZHVtcC90LzAwMV9iYXNpYy5wbAoKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvcGdf ZHVtcGFsbC5zZ21sIGIvZG9jL3NyYy9zZ21sL3JlZi9wZ19kdW1wYWxsLnNnbWwKaW5kZXggMDE0 ZjI3OTI1ODkuLjhjYTQ5YTY1OTc3IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcmVmL3BnX2R1 bXBhbGwuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvcmVmL3BnX2R1bXBhbGwuc2dtbApAQCAtMTIx LDcgKzEyMSw4MyBAQCBQb3N0Z3JlU1FMIGRvY3VtZW50YXRpb24KICAgICAgICA8cGFyYT4KICAg ICAgICAgU2VuZCBvdXRwdXQgdG8gdGhlIHNwZWNpZmllZCBmaWxlLiAgSWYgdGhpcyBpcyBvbWl0 dGVkLCB0aGUKICAgICAgICAgc3RhbmRhcmQgb3V0cHV0IGlzIHVzZWQuCi0gICAgICAgPC9wYXJh PgorICAgICAgICBOb3RlOiBUaGlzIG9wdGlvbiBjYW4gYmUgb21pdHRlZCBvbmx5IHdoZW4gPG9w dGlvbj4tLWZvcm1hdDwvb3B0aW9uPiBpcyBwbGFpbgorICAgICAgIDwvcGFyYT4KKyAgICAgIDwv bGlzdGl0ZW0+CisgICAgIDwvdmFybGlzdGVudHJ5PgorCis8dmFybGlzdGVudHJ5PgorICAgICAg PHRlcm0+PG9wdGlvbj4tRiA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+Zm9ybWF0PC9y ZXBsYWNlYWJsZT48L29wdGlvbj48L3Rlcm0+CisgICAgICA8dGVybT48b3B0aW9uPi0tZm9ybWF0 PTxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5mb3JtYXQ8L3JlcGxhY2VhYmxlPjwvb3B0 aW9uPjwvdGVybT4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgU3Bl Y2lmeSBmb3JtYXQgb2YgZHVtcCBmaWxlcy4gIElmIHdlIHdhbnQgdG8gZHVtcCBhbGwgdGhlIGRh dGFiYXNlcywKKyAgICAgICAgdGhlbiBwYXNzIHRoaXMgYXMgbm9uLXBsYWluIHNvIHRoYXQgZHVt cCBvZiBhbGwgZGF0YWJhc2VzIGNhbiBiZSB0YWtlbgorICAgICAgICBpbiBzZXBhcmF0ZSBzdWJk aXJlY3RvcnkgaW4gYXJjaGl2ZSBmb3JtYXQuCisgICAgICAgIGJ5IGRlZmF1bHQsIHRoaXMgaXMg cGxhaW4gZm9ybWF0LgorCisgICAgICAgIElmIG5vbi1wbGFpbiBtb2RlIGlzIHBhc3NlZCwgdGhl biBnbG9iYWwuZGF0IChnbG9iYWwgc3FsIGNvbW1hbmRzKSBhbmQKKyAgICAgICAgbWFwLmRhdChk Ym9pZCBhbmQgZGJuYW1lcyBsaXN0IG9mIGFsbCB0aGUgZGF0YWJhc2VzKSBmaWxlcyB3aWxsIGJl IGNyZWF0ZWQuCisgICAgICAgIEFwYXJ0IGZyb20gdGhlc2UgZmlsZXMsIG9uZSBzdWJkaXJlY3Rv cnkgd2l0aCBkYXRhYmFzZXMgbmFtZSB3aWxsIGJlIGNyZWF0ZWQuCisgICAgICAgIFVuZGVyIHRo aXMgZGF0YWJhc2VzIHN1YmRpcmVjdG9yeSwgdGhlcmUgd2lsbCBiZSBmaWxlcyB3aXRoIGRib2lk IG5hbWUgZm9yIGVhY2gKKyAgICAgICAgZGF0YWJhc2UgYW5kIGlmIDxvcHRpb24+LS1mb3JtYXQ8 L29wdGlvbj4gaXMgZGlyZWN0b3J5LCB0aGVuIHRvYy5kYXQgYW5kIG90aGVyCisgICAgICAgIGR1 bXAgZmlsZXMgd2lsbCBiZSB1bmRlciBkYm9pZCBzdWJkaXJlY3RvcnkuCisKKyAgICAgICA8dmFy aWFibGVsaXN0PgorICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgPHRlcm0+PGxpdGVy YWw+ZDwvbGl0ZXJhbD48L3Rlcm0+CisgICAgICAgICA8dGVybT48bGl0ZXJhbD5kaXJlY3Rvcnk8 L2xpdGVyYWw+PC90ZXJtPgorICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgIDxwYXJhPgor ICAgICAgICAgICBPdXRwdXQgYSBkaXJlY3RvcnktZm9ybWF0IGFyY2hpdmUgc3VpdGFibGUgZm9y IGlucHV0IGludG8gcGdfcmVzdG9yZS4gVW5kZXIgZGJvaWQKKyAgICAgICAgICAgc3ViZGlyZWN0 b3J5LCB0aGlzIHdpbGwgY3JlYXRlIGEgZGlyZWN0b3J5IHdpdGggb25lIGZpbGUgZm9yIGVhY2gg dGFibGUgYW5kIGxhcmdlCisgICAgICAgICAgIG9iamVjdCBiZWluZyBkdW1wZWQsIHBsdXMgYSBz by1jYWxsZWQgVGFibGUgb2YgQ29udGVudHMgZmlsZSBkZXNjcmliaW5nIHRoZSBkdW1wZWQKKyAg ICAgICAgICAgb2JqZWN0cyBpbiBhIG1hY2hpbmUtcmVhZGFibGUgZm9ybWF0IHRoYXQgcGdfcmVz dG9yZSBjYW4gcmVhZC4gQSBkaXJlY3RvcnkgZm9ybWF0CisgICAgICAgICAgIGFyY2hpdmUgY2Fu IGJlIG1hbmlwdWxhdGVkIHdpdGggc3RhbmRhcmQgVW5peCB0b29sczsgZm9yIGV4YW1wbGUsIGZp bGVzIGluIGFuCisgICAgICAgICAgIHVuY29tcHJlc3NlZCBhcmNoaXZlIGNhbiBiZSBjb21wcmVz c2VkIHdpdGggdGhlIGd6aXAsIGx6NCwgb3IgenN0ZCB0b29scy4gVGhpcworICAgICAgICAgICBm b3JtYXQgaXMgY29tcHJlc3NlZCBieSBkZWZhdWx0IHVzaW5nIGd6aXAgYW5kIGFsc28gc3VwcG9y dHMgcGFyYWxsZWwgZHVtcHMuCisgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgPC9saXN0aXRl bT4KKyAgICAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAg ICAgICAgIDx0ZXJtPjxsaXRlcmFsPnA8L2xpdGVyYWw+PC90ZXJtPgorICAgICAgICAgPHRlcm0+ PGxpdGVyYWw+cGxhaW48L2xpdGVyYWw+PC90ZXJtPgorICAgICAgICAgPGxpc3RpdGVtPgorICAg ICAgICAgIDxwYXJhPgorICAgICAgICAgICBPdXRwdXQgYSBwbGFpbi10ZXh0IFNRTCBzY3JpcHQg ZmlsZSAodGhlIGRlZmF1bHQpLgorICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgIDwvbGlzdGl0 ZW0+CisgICAgICAgIDwvdmFybGlzdGVudHJ5PgorCisgICAgICAgIDx2YXJsaXN0ZW50cnk+Cisg ICAgICAgICA8dGVybT48bGl0ZXJhbD5jPC9saXRlcmFsPjwvdGVybT4KKyAgICAgICAgIDx0ZXJt PjxsaXRlcmFsPmN1c3RvbTwvbGl0ZXJhbD48L3Rlcm0+CisgICAgICAgICA8bGlzdGl0ZW0+Cisg ICAgICAgICAgPHBhcmE+CisgICAgICAgICAgIE91dHB1dCBhIGN1c3RvbS1mb3JtYXQgYXJjaGl2 ZSBzdWl0YWJsZSBmb3IgaW5wdXQgaW50byBwZ19yZXN0b3JlLiBUb2dldGhlciB3aXRoIHRoZQor ICAgICAgICAgICBkaXJlY3Rvcnkgb3V0cHV0IGZvcm1hdCwgdGhpcyBpcyB0aGUgbW9zdCBmbGV4 aWJsZSBvdXRwdXQgZm9ybWF0IGluIHRoYXQgaXQgYWxsb3dzIG1hbnVhbAorICAgICAgICAgICBz ZWxlY3Rpb24gYW5kIHJlb3JkZXJpbmcgb2YgYXJjaGl2ZWQgaXRlbXMgZHVyaW5nIHJlc3RvcmUu IFRoaXMgZm9ybWF0IGlzIGFsc28KKyAgICAgICAgICAgY29tcHJlc3NlZCBieSBkZWZhdWx0Lgor ICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDwvdmFybGlz dGVudHJ5PgorCisgICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgPHRlcm0+PGxpdGVy YWw+dDwvbGl0ZXJhbD48L3Rlcm0+CisgICAgICAgICA8dGVybT48bGl0ZXJhbD50YXI8L2xpdGVy YWw+PC90ZXJtPgorICAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgIDxwYXJhPgorICAgICAg ICAgICBPdXRwdXQgYSB0YXItZm9ybWF0IGFyY2hpdmUgc3VpdGFibGUgZm9yIGlucHV0IGludG8g cGdfcmVzdG9yZS4gVGhlIHRhciBmb3JtYXQgaXMKKyAgICAgICAgICAgY29tcGF0aWJsZSB3aXRo IHRoZSBkaXJlY3RvcnkgZm9ybWF0OiBleHRyYWN0aW5nIGEgdGFyLWZvcm1hdCBhcmNoaXZlIHBy b2R1Y2VzIGEgdmFsaWQKKyAgICAgICAgICAgZGlyZWN0b3J5LWZvcm1hdCBhcmNoaXZlLiBIb3dl dmVyLCB0aGUgdGFyIGZvcm1hdCBkb2VzIG5vdCBzdXBwb3J0IGNvbXByZXNzaW9uLiBBbHNvLAor ICAgICAgICAgICB3aGVuIHVzaW5nIHRhciBmb3JtYXQgdGhlIHJlbGF0aXZlIG9yZGVyIG9mIHRh YmxlIGRhdGEgaXRlbXMgY2Fubm90IGJlIGNoYW5nZWQgZHVyaW5nIHJlc3RvcmUuCisgICAgICAg ICAgPC9wYXJhPgorICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC92YXJsaXN0ZW50cnk+ CisKKyAgICAgICAgPC92YXJpYWJsZWxpc3Q+CisgICAgICAgIDwvcGFyYT4KICAgICAgIDwvbGlz dGl0ZW0+CiAgICAgIDwvdmFybGlzdGVudHJ5PgogCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwv cmVmL3BnX3Jlc3RvcmUuc2dtbCBiL2RvYy9zcmMvc2dtbC9yZWYvcGdfcmVzdG9yZS5zZ21sCmlu ZGV4IGI4YjI3ZTE3MTllLi5iYTI5MTNiMzM1NiAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3Jl Zi9wZ19yZXN0b3JlLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3JlZi9wZ19yZXN0b3JlLnNnbWwK QEAgLTE2Niw2ICsxNjYsMjUgQEAgUG9zdGdyZVNRTCBkb2N1bWVudGF0aW9uCiAgICAgICA8L2xp c3RpdGVtPgogICAgICA8L3Zhcmxpc3RlbnRyeT4KIAorICAgICA8dmFybGlzdGVudHJ5PgorICAg ICAgPHRlcm0+PG9wdGlvbj4tLWV4Y2x1ZGUtZGF0YWJhc2U9PHJlcGxhY2VhYmxlIGNsYXNzPSJw YXJhbWV0ZXIiPnBhdHRlcm48L3JlcGxhY2VhYmxlPjwvb3B0aW9uPjwvdGVybT4KKyAgICAgIDxs aXN0aXRlbT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgRG8gbm90IHJlc3RvcmUgZGF0YWJhc2Vz IHdob3NlIG5hbWUgbWF0Y2hlcworICAgICAgICA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRl ciI+cGF0dGVybjwvcmVwbGFjZWFibGU+LgorICAgICAgICBNdWx0aXBsZSBwYXR0ZXJucyBjYW4g YmUgZXhjbHVkZWQgYnkgd3JpdGluZyBtdWx0aXBsZQorICAgICAgICA8b3B0aW9uPi0tZXhjbHVk ZS1kYXRhYmFzZTwvb3B0aW9uPiBzd2l0Y2hlcy4gIFRoZQorICAgICAgICA8cmVwbGFjZWFibGUg Y2xhc3M9InBhcmFtZXRlciI+cGF0dGVybjwvcmVwbGFjZWFibGU+IHBhcmFtZXRlciBpcworICAg ICAgICBpbnRlcnByZXRlZCBhcyBhIHBhdHRlcm4gYWNjb3JkaW5nIHRvIHRoZSBzYW1lIHJ1bGVz IHVzZWQgYnkKKyAgICAgICAgPGFwcGxpY2F0aW9uPnBzcWw8L2FwcGxpY2F0aW9uPidzIDxsaXRl cmFsPlxkPC9saXRlcmFsPgorICAgICAgICBjb21tYW5kcyAoc2VlIDx4cmVmIGxpbmtlbmQ9ImFw cC1wc3FsLXBhdHRlcm5zIi8+KSwKKyAgICAgICAgc28gbXVsdGlwbGUgZGF0YWJhc2VzIGNhbiBh bHNvIGJlIGV4Y2x1ZGVkIGJ5IHdyaXRpbmcgd2lsZGNhcmQKKyAgICAgICAgY2hhcmFjdGVycyBp biB0aGUgcGF0dGVybi4gIFdoZW4gdXNpbmcgd2lsZGNhcmRzLCBiZSBjYXJlZnVsIHRvCisgICAg ICAgIHF1b3RlIHRoZSBwYXR0ZXJuIGlmIG5lZWRlZCB0byBwcmV2ZW50IHNoZWxsIHdpbGRjYXJk IGV4cGFuc2lvbi4KKyAgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgICA8L3Zh cmxpc3RlbnRyeT4KKwogICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgPHRlcm0+PG9wdGlvbj4t ZTwvb3B0aW9uPjwvdGVybT4KICAgICAgIDx0ZXJtPjxvcHRpb24+LS1leGl0LW9uLWVycm9yPC9v cHRpb24+PC90ZXJtPgpAQCAtMzE1LDYgKzMzNCwxNiBAQCBQb3N0Z3JlU1FMIGRvY3VtZW50YXRp b24KICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgIDwvdmFybGlzdGVudHJ5PgogCisgICAgIDx2YXJs aXN0ZW50cnk+CisgICAgICA8dGVybT48b3B0aW9uPi1nPC9vcHRpb24+PC90ZXJtPgorICAgICAg PHRlcm0+PG9wdGlvbj4tLWdsb2JhbHMtb25seTwvb3B0aW9uPjwvdGVybT4KKyAgICAgIDxsaXN0 aXRlbT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgUmVzdG9yZSBvbmx5IGdsb2JhbCBvYmplY3Rz IChyb2xlcyBhbmQgdGFibGVzcGFjZXMpLCBubyBkYXRhYmFzZXMuCisgICAgICAgPC9wYXJhPgor ICAgICAgPC9saXN0aXRlbT4KKyAgICAgPC92YXJsaXN0ZW50cnk+CisKICAgICAgPHZhcmxpc3Rl bnRyeT4KICAgICAgIDx0ZXJtPjxvcHRpb24+LUkgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0 ZXIiPmluZGV4PC9yZXBsYWNlYWJsZT48L29wdGlvbj48L3Rlcm0+CiAgICAgICA8dGVybT48b3B0 aW9uPi0taW5kZXg9PHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmluZGV4PC9yZXBsYWNl YWJsZT48L29wdGlvbj48L3Rlcm0+CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvTWFrZWZp bGUgYi9zcmMvYmluL3BnX2R1bXAvTWFrZWZpbGUKaW5kZXggMjMzYWQxNWNhNzUuLmE0ZTU1N2Q2 MmM3IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvTWFrZWZpbGUKKysrIGIvc3JjL2Jpbi9w Z19kdW1wL01ha2VmaWxlCkBAIC00NywxMSArNDcsMTEgQEAgYWxsOiBwZ19kdW1wIHBnX3Jlc3Rv cmUgcGdfZHVtcGFsbAogcGdfZHVtcDogcGdfZHVtcC5vIGNvbW1vbi5vIHBnX2R1bXBfc29ydC5v ICQoT0JKUykgfCBzdWJtYWtlLWxpYnBxIHN1Ym1ha2UtbGlicGdwb3J0IHN1Ym1ha2UtbGlicGdm ZXV0aWxzCiAJJChDQykgJChDRkxBR1MpIHBnX2R1bXAubyBjb21tb24ubyBwZ19kdW1wX3NvcnQu byAkKE9CSlMpICQoTERGTEFHUykgJChMREZMQUdTX0VYKSAkKExJQlMpIC1vICRAJChYKQogCi1w Z19yZXN0b3JlOiBwZ19yZXN0b3JlLm8gJChPQkpTKSB8IHN1Ym1ha2UtbGlicHEgc3VibWFrZS1s aWJwZ3BvcnQgc3VibWFrZS1saWJwZ2ZldXRpbHMKLQkkKENDKSAkKENGTEFHUykgcGdfcmVzdG9y ZS5vICQoT0JKUykgJChMREZMQUdTKSAkKExERkxBR1NfRVgpICQoTElCUykgLW8gJEAkKFgpCitw Z19yZXN0b3JlOiBwZ19yZXN0b3JlLm8gY29tbW9uX2R1bXBhbGxfcmVzdG9yZS5vICQoT0JKUykg fCBzdWJtYWtlLWxpYnBxIHN1Ym1ha2UtbGlicGdwb3J0IHN1Ym1ha2UtbGlicGdmZXV0aWxzCisJ JChDQykgJChDRkxBR1MpIHBnX3Jlc3RvcmUubyBjb21tb25fZHVtcGFsbF9yZXN0b3JlLm8gJChP QkpTKSAkKExERkxBR1MpICQoTERGTEFHU19FWCkgJChMSUJTKSAtbyAkQCQoWCkKIAotcGdfZHVt cGFsbDogcGdfZHVtcGFsbC5vIGR1bXB1dGlscy5vIGZpbHRlci5vICQoV0lOMzJSRVMpIHwgc3Vi bWFrZS1saWJwcSBzdWJtYWtlLWxpYnBncG9ydCBzdWJtYWtlLWxpYnBnZmV1dGlscwotCSQoQ0Mp ICQoQ0ZMQUdTKSBwZ19kdW1wYWxsLm8gZHVtcHV0aWxzLm8gZmlsdGVyLm8gJChXSU4zMlJFUykg JChMREZMQUdTKSAkKExERkxBR1NfRVgpICQoTElCUykgLW8gJEAkKFgpCitwZ19kdW1wYWxsOiBw Z19kdW1wYWxsLm8gZHVtcHV0aWxzLm8gZmlsdGVyLm8gY29tbW9uX2R1bXBhbGxfcmVzdG9yZS5v ICQoV0lOMzJSRVMpIHwgc3VibWFrZS1saWJwcSBzdWJtYWtlLWxpYnBncG9ydCBzdWJtYWtlLWxp YnBnZmV1dGlscworCSQoQ0MpICQoQ0ZMQUdTKSBwZ19kdW1wYWxsLm8gZHVtcHV0aWxzLm8gZmls dGVyLm8gY29tbW9uX2R1bXBhbGxfcmVzdG9yZS5vICQoV0lOMzJSRVMpICQoTERGTEFHUykgJChM REZMQUdTX0VYKSAkKExJQlMpIC1vICRAJChYKQogCiBpbnN0YWxsOiBhbGwgaW5zdGFsbGRpcnMK IAkkKElOU1RBTExfUFJPR1JBTSkgcGdfZHVtcCQoWCkgJyQoREVTVERJUikkKGJpbmRpciknL3Bn X2R1bXAkKFgpCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvY29tbW9uX2R1bXBhbGxfcmVz dG9yZS5jIGIvc3JjL2Jpbi9wZ19kdW1wL2NvbW1vbl9kdW1wYWxsX3Jlc3RvcmUuYwpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYWNlNTA3NzA4NWMKLS0tIC9kZXYvbnVs bAorKysgYi9zcmMvYmluL3BnX2R1bXAvY29tbW9uX2R1bXBhbGxfcmVzdG9yZS5jCkBAIC0wLDAg KzEsMzE0IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBjb21tb25fZHVtcGFsbF9yZXN0 b3JlLmMKKyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAyNSwgUG9zdGdyZVNR TCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5 NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhCisgKgorICogdGhpcyBp cyBhIGNvbW1vbiBmaWxlIGZvciBwZ19kdW1wYWxsIGFuZCBwZ19yZXN0b3JlLgorICogc3JjL2Jp bi9wZ19kdW1wL2NvbW1vbl9kdW1wYWxsX3Jlc3RvcmUuYworICoKKyAqLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorICovCisKKyNpbmNsdWRlICJwb3N0Z3Jlc19mZS5oIgorCisjaW5jbHVkZSAiY29tbW9uL2Nv bm5lY3QuaCIKKyNpbmNsdWRlICJjb21tb24vbG9nZ2luZy5oIgorI2luY2x1ZGUgImNvbW1vbi9z dHJpbmcuaCIKKyNpbmNsdWRlICJjb21tb25fZHVtcGFsbF9yZXN0b3JlLmgiCisjaW5jbHVkZSAi ZHVtcHV0aWxzLmgiCisjaW5jbHVkZSAiZmVfdXRpbHMvc3RyaW5nX3V0aWxzLmgiCisKK3N0YXRp YyBjaGFyICpjb25zdHJ1Y3RDb25uU3RyKGNvbnN0IGNoYXIgKiprZXl3b3JkcywgY29uc3QgY2hh ciAqKnZhbHVlcyk7CisjZGVmaW5lIGV4aXRfbmljZWx5KGNvZGUpIGV4aXQoY29kZSkKKworLyoK KyAqIE1ha2UgYSBkYXRhYmFzZSBjb25uZWN0aW9uIHdpdGggdGhlIGdpdmVuIHBhcmFtZXRlcnMu ICBBbgorICogaW50ZXJhY3RpdmUgcGFzc3dvcmQgcHJvbXB0IGlzIGF1dG9tYXRpY2FsbHkgaXNz dWVkIGlmIHJlcXVpcmVkLgorICoKKyAqIElmIGZhaWxfb25fZXJyb3IgaXMgZmFsc2UsIHdlIHJl dHVybiBOVUxMIHdpdGhvdXQgcHJpbnRpbmcgYW55IG1lc3NhZ2UKKyAqIG9uIGZhaWx1cmUsIGJ1 dCBwcmVzZXJ2ZSBhbnkgcHJvbXB0ZWQgcGFzc3dvcmQgZm9yIHRoZSBuZXh0IHRyeS4KKyAqCisg KiBPbiBzdWNjZXNzLCB0aGUgZ2xvYmFsIHZhcmlhYmxlICdjb25uc3RyJyBpcyBzZXQgdG8gYSBj b25uZWN0aW9uIHN0cmluZworICogY29udGFpbmluZyB0aGUgb3B0aW9ucyB1c2VkLgorICovCitQ R2Nvbm4gKgorY29ubmVjdERhdGFiYXNlKGNvbnN0IGNoYXIgKmRibmFtZSwgY29uc3QgY2hhciAq Y29ubmVjdGlvbl9zdHJpbmcsCisJCQkJY29uc3QgY2hhciAqcGdob3N0LCBjb25zdCBjaGFyICpw Z3BvcnQsIGNvbnN0IGNoYXIgKnBndXNlciwKKwkJCQl0cml2YWx1ZSBwcm9tcHRfcGFzc3dvcmQs IGJvb2wgZmFpbF9vbl9lcnJvciwgY29uc3QgY2hhciAqcHJvZ25hbWUsCisJCQkJY29uc3QgY2hh ciAqKmNvbm5zdHIsIGludCAqc2VydmVyX3ZlcnNpb24pCit7CisJUEdjb25uCSAgICpjb25uOwor CWJvb2wJCW5ld19wYXNzOworCWNvbnN0IGNoYXIgKnJlbW90ZXZlcnNpb25fc3RyOworCWludAkJ CW15X3ZlcnNpb247CisJY29uc3QgY2hhciAqKmtleXdvcmRzID0gTlVMTDsKKwljb25zdCBjaGFy ICoqdmFsdWVzID0gTlVMTDsKKwlQUWNvbm5pbmZvT3B0aW9uICpjb25uX29wdHMgPSBOVUxMOwor CXN0YXRpYyBjaGFyICpwYXNzd29yZCA9IE5VTEw7CisJaW50CQkJc2VydmVyX3ZlcnNpb25fdGVt cDsKKworCWlmIChwcm9tcHRfcGFzc3dvcmQgPT0gVFJJX1lFUyAmJiAhcGFzc3dvcmQpCisJCXBh c3N3b3JkID0gc2ltcGxlX3Byb21wdCgiUGFzc3dvcmQ6ICIsIGZhbHNlKTsKKworCS8qCisJICog U3RhcnQgdGhlIGNvbm5lY3Rpb24uICBMb29wIHVudGlsIHdlIGhhdmUgYSBwYXNzd29yZCBpZiBy ZXF1ZXN0ZWQgYnkKKwkgKiBiYWNrZW5kLgorCSAqLworCWRvCisJeworCQlpbnQJCQlhcmdjb3Vu dCA9IDY7CisJCVBRY29ubmluZm9PcHRpb24gKmNvbm5fb3B0OworCQljaGFyCSAgICplcnJfbXNn ID0gTlVMTDsKKwkJaW50CQkJaSA9IDA7CisKKwkJZnJlZShrZXl3b3Jkcyk7CisJCWZyZWUodmFs dWVzKTsKKwkJUFFjb25uaW5mb0ZyZWUoY29ubl9vcHRzKTsKKworCQkvKgorCQkgKiBNZXJnZSB0 aGUgY29ubmVjdGlvbiBpbmZvIGlucHV0cyBnaXZlbiBpbiBmb3JtIG9mIGNvbm5lY3Rpb24gc3Ry aW5nCisJCSAqIGFuZCBvdGhlciBvcHRpb25zLiAgRXhwbGljaXRseSBkaXNjYXJkIGFueSBkYm5h bWUgdmFsdWUgaW4gdGhlCisJCSAqIGNvbm5lY3Rpb24gc3RyaW5nOyBvdGhlcndpc2UsIFBRY29u bmVjdGRiUGFyYW1zKCkgd291bGQgaW50ZXJwcmV0CisJCSAqIHRoYXQgdmFsdWUgYXMgYmVpbmcg aXRzZWxmIGEgY29ubmVjdGlvbiBzdHJpbmcuCisJCSAqLworCQlpZiAoY29ubmVjdGlvbl9zdHJp bmcpCisJCXsKKwkJCWNvbm5fb3B0cyA9IFBRY29ubmluZm9QYXJzZShjb25uZWN0aW9uX3N0cmlu ZywgJmVycl9tc2cpOworCQkJaWYgKGNvbm5fb3B0cyA9PSBOVUxMKQorCQkJCXBnX2ZhdGFsKCIl cyIsIGVycl9tc2cpOworCisJCQlmb3IgKGNvbm5fb3B0ID0gY29ubl9vcHRzOyBjb25uX29wdC0+ a2V5d29yZCAhPSBOVUxMOyBjb25uX29wdCsrKQorCQkJeworCQkJCWlmIChjb25uX29wdC0+dmFs ICE9IE5VTEwgJiYgY29ubl9vcHQtPnZhbFswXSAhPSAnXDAnICYmCisJCQkJCXN0cmNtcChjb25u X29wdC0+a2V5d29yZCwgImRibmFtZSIpICE9IDApCisJCQkJCWFyZ2NvdW50Kys7CisJCQl9CisK KwkJCWtleXdvcmRzID0gcGdfbWFsbG9jMCgoYXJnY291bnQgKyAxKSAqIHNpemVvZigqa2V5d29y ZHMpKTsKKwkJCXZhbHVlcyA9IHBnX21hbGxvYzAoKGFyZ2NvdW50ICsgMSkgKiBzaXplb2YoKnZh bHVlcykpOworCisJCQlmb3IgKGNvbm5fb3B0ID0gY29ubl9vcHRzOyBjb25uX29wdC0+a2V5d29y ZCAhPSBOVUxMOyBjb25uX29wdCsrKQorCQkJeworCQkJCWlmIChjb25uX29wdC0+dmFsICE9IE5V TEwgJiYgY29ubl9vcHQtPnZhbFswXSAhPSAnXDAnICYmCisJCQkJCXN0cmNtcChjb25uX29wdC0+ a2V5d29yZCwgImRibmFtZSIpICE9IDApCisJCQkJeworCQkJCQlrZXl3b3Jkc1tpXSA9IGNvbm5f b3B0LT5rZXl3b3JkOworCQkJCQl2YWx1ZXNbaV0gPSBjb25uX29wdC0+dmFsOworCQkJCQlpKys7 CisJCQkJfQorCQkJfQorCQl9CisJCWVsc2UKKwkJeworCQkJa2V5d29yZHMgPSBwZ19tYWxsb2Mw KChhcmdjb3VudCArIDEpICogc2l6ZW9mKCprZXl3b3JkcykpOworCQkJdmFsdWVzID0gcGdfbWFs bG9jMCgoYXJnY291bnQgKyAxKSAqIHNpemVvZigqdmFsdWVzKSk7CisJCX0KKworCQlpZiAocGdo b3N0KQorCQl7CisJCQlrZXl3b3Jkc1tpXSA9ICJob3N0IjsKKwkJCXZhbHVlc1tpXSA9IHBnaG9z dDsKKwkJCWkrKzsKKwkJfQorCQlpZiAocGdwb3J0KQorCQl7CisJCQlrZXl3b3Jkc1tpXSA9ICJw b3J0IjsKKwkJCXZhbHVlc1tpXSA9IHBncG9ydDsKKwkJCWkrKzsKKwkJfQorCQlpZiAocGd1c2Vy KQorCQl7CisJCQlrZXl3b3Jkc1tpXSA9ICJ1c2VyIjsKKwkJCXZhbHVlc1tpXSA9IHBndXNlcjsK KwkJCWkrKzsKKwkJfQorCQlpZiAocGFzc3dvcmQpCisJCXsKKwkJCWtleXdvcmRzW2ldID0gInBh c3N3b3JkIjsKKwkJCXZhbHVlc1tpXSA9IHBhc3N3b3JkOworCQkJaSsrOworCQl9CisJCWlmIChk Ym5hbWUpCisJCXsKKwkJCWtleXdvcmRzW2ldID0gImRibmFtZSI7CisJCQl2YWx1ZXNbaV0gPSBk Ym5hbWU7CisJCQlpKys7CisJCX0KKwkJa2V5d29yZHNbaV0gPSAiZmFsbGJhY2tfYXBwbGljYXRp b25fbmFtZSI7CisJCXZhbHVlc1tpXSA9IHByb2duYW1lOworCQlpKys7CisKKwkJbmV3X3Bhc3Mg PSBmYWxzZTsKKwkJY29ubiA9IFBRY29ubmVjdGRiUGFyYW1zKGtleXdvcmRzLCB2YWx1ZXMsIHRy dWUpOworCisJCWlmICghY29ubikKKwkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgY29ubmVjdCB0byBk YXRhYmFzZSBcIiVzXCIiLCBkYm5hbWUpOworCisJCWlmIChQUXN0YXR1cyhjb25uKSA9PSBDT05O RUNUSU9OX0JBRCAmJgorCQkJUFFjb25uZWN0aW9uTmVlZHNQYXNzd29yZChjb25uKSAmJgorCQkJ IXBhc3N3b3JkICYmCisJCQlwcm9tcHRfcGFzc3dvcmQgIT0gVFJJX05PKQorCQl7CisJCQlQUWZp bmlzaChjb25uKTsKKwkJCXBhc3N3b3JkID0gc2ltcGxlX3Byb21wdCgiUGFzc3dvcmQ6ICIsIGZh bHNlKTsKKwkJCW5ld19wYXNzID0gdHJ1ZTsKKwkJfQorCX0gd2hpbGUgKG5ld19wYXNzKTsKKwor CS8qIGNoZWNrIHRvIHNlZSB0aGF0IHRoZSBiYWNrZW5kIGNvbm5lY3Rpb24gd2FzIHN1Y2Nlc3Nm dWxseSBtYWRlICovCisJaWYgKFBRc3RhdHVzKGNvbm4pID09IENPTk5FQ1RJT05fQkFEKQorCXsK KwkJaWYgKGZhaWxfb25fZXJyb3IpCisJCQlwZ19mYXRhbCgiJXMiLCBQUWVycm9yTWVzc2FnZShj b25uKSk7CisJCWVsc2UKKwkJeworCQkJUFFmaW5pc2goY29ubik7CisKKwkJCWZyZWUoa2V5d29y ZHMpOworCQkJZnJlZSh2YWx1ZXMpOworCQkJUFFjb25uaW5mb0ZyZWUoY29ubl9vcHRzKTsKKwor CQkJcmV0dXJuIE5VTEw7CisJCX0KKwl9CisKKwkvKgorCSAqIE9rLCBjb25uZWN0ZWQgc3VjY2Vz c2Z1bGx5LiBSZW1lbWJlciB0aGUgb3B0aW9ucyB1c2VkLCBpbiB0aGUgZm9ybSBvZiBhCisJICog Y29ubmVjdGlvbiBzdHJpbmcuCisJICovCisJaWYgKGNvbm5zdHIpCisJCSpjb25uc3RyID0gY29u c3RydWN0Q29ublN0cihrZXl3b3JkcywgdmFsdWVzKTsKKworCWZyZWUoa2V5d29yZHMpOworCWZy ZWUodmFsdWVzKTsKKwlQUWNvbm5pbmZvRnJlZShjb25uX29wdHMpOworCisJLyogQ2hlY2sgdmVy c2lvbiAqLworCXJlbW90ZXZlcnNpb25fc3RyID0gUFFwYXJhbWV0ZXJTdGF0dXMoY29ubiwgInNl cnZlcl92ZXJzaW9uIik7CisJaWYgKCFyZW1vdGV2ZXJzaW9uX3N0cikKKwkJcGdfZmF0YWwoImNv dWxkIG5vdCBnZXQgc2VydmVyIHZlcnNpb24iKTsKKwlzZXJ2ZXJfdmVyc2lvbl90ZW1wID0gUFFz ZXJ2ZXJWZXJzaW9uKGNvbm4pOworCWlmIChzZXJ2ZXJfdmVyc2lvbl90ZW1wID09IDApCisJCXBn X2ZhdGFsKCJjb3VsZCBub3QgcGFyc2Ugc2VydmVyIHZlcnNpb24gXCIlc1wiIiwKKwkJCQkgcmVt b3RldmVyc2lvbl9zdHIpOworCisJLyogSWYgbmVlZGVkLCB0aGVuIGNvcHkgc2VydmVyIHZlcnNp b24gdG8gb3V0ZXIgZnVuY3Rpb24uICovCisJaWYgKHNlcnZlcl92ZXJzaW9uKQorCQkqc2VydmVy X3ZlcnNpb24gPSBzZXJ2ZXJfdmVyc2lvbl90ZW1wOworCisJbXlfdmVyc2lvbiA9IFBHX1ZFUlNJ T05fTlVNOworCisJLyoKKwkgKiBXZSBhbGxvdyB0aGUgc2VydmVyIHRvIGJlIGJhY2sgdG8gOS4y LCBhbmQgdXAgdG8gYW55IG1pbm9yIHJlbGVhc2Ugb2YKKwkgKiBvdXIgb3duIG1ham9yIHZlcnNp b24uICAoU2VlIGFsc28gdmVyc2lvbiBjaGVjayBpbiBwZ19kdW1wLmMuKQorCSAqLworCWlmICht eV92ZXJzaW9uICE9IHNlcnZlcl92ZXJzaW9uX3RlbXAKKwkJJiYgKHNlcnZlcl92ZXJzaW9uX3Rl bXAgPCA5MDIwMCB8fAorCQkJKHNlcnZlcl92ZXJzaW9uX3RlbXAgLyAxMDApID4gKG15X3ZlcnNp b24gLyAxMDApKSkKKwl7CisJCXBnX2xvZ19lcnJvcigiYWJvcnRpbmcgYmVjYXVzZSBvZiBzZXJ2 ZXIgdmVyc2lvbiBtaXNtYXRjaCIpOworCQlwZ19sb2dfZXJyb3JfZGV0YWlsKCJzZXJ2ZXIgdmVy c2lvbjogJXM7ICVzIHZlcnNpb246ICVzIiwKKwkJCQkJCQlyZW1vdGV2ZXJzaW9uX3N0ciwgcHJv Z25hbWUsIFBHX1ZFUlNJT04pOworCQlleGl0X25pY2VseSgxKTsKKwl9CisKKwlQUWNsZWFyKGV4 ZWN1dGVRdWVyeShjb25uLCBBTFdBWVNfU0VDVVJFX1NFQVJDSF9QQVRIX1NRTCkpOworCisJcmV0 dXJuIGNvbm47Cit9CisKKy8qIC0tLS0tLS0tLS0KKyAqIENvbnN0cnVjdCBhIGNvbm5lY3Rpb24g c3RyaW5nIGZyb20gdGhlIGdpdmVuIGtleXdvcmQvdmFsdWUgcGFpcnMuIEl0IGlzCisgKiB1c2Vk IHRvIHBhc3MgdGhlIGNvbm5lY3Rpb24gb3B0aW9ucyB0byB0aGUgcGdfZHVtcCBzdWJwcm9jZXNz LgorICoKKyAqIFRoZSBmb2xsb3dpbmcgcGFyYW1ldGVycyBhcmUgZXhjbHVkZWQ6CisgKglkYm5h bWUJCS0gdmFyaWVzIGluIGVhY2ggcGdfZHVtcCBpbnZvY2F0aW9uCisgKglwYXNzd29yZAktIGl0 J3Mgbm90IHNlY3VyZSB0byBwYXNzIGEgcGFzc3dvcmQgb24gdGhlIGNvbW1hbmQgbGluZQorICoJ ZmFsbGJhY2tfYXBwbGljYXRpb25fbmFtZSAtIHdlJ2xsIGxldCBwZ19kdW1wIHNldCBpdAorICog LS0tLS0tLS0tLQorICovCitzdGF0aWMgY2hhciAqCitjb25zdHJ1Y3RDb25uU3RyKGNvbnN0IGNo YXIgKiprZXl3b3JkcywgY29uc3QgY2hhciAqKnZhbHVlcykKK3sKKwlQUUV4cEJ1ZmZlciBidWYg PSBjcmVhdGVQUUV4cEJ1ZmZlcigpOworCWNoYXIJICAgKmNvbm5zdHI7CisJaW50CQkJaTsKKwli b29sCQlmaXJzdGtleXdvcmQgPSB0cnVlOworCisJLyogQ29uc3RydWN0IGEgbmV3IGNvbm5lY3Rp b24gc3RyaW5nIGluIGtleT0ndmFsdWUnIGZvcm1hdC4gKi8KKwlmb3IgKGkgPSAwOyBrZXl3b3Jk c1tpXSAhPSBOVUxMOyBpKyspCisJeworCQlpZiAoc3RyY21wKGtleXdvcmRzW2ldLCAiZGJuYW1l IikgPT0gMCB8fAorCQkJc3RyY21wKGtleXdvcmRzW2ldLCAicGFzc3dvcmQiKSA9PSAwIHx8CisJ CQlzdHJjbXAoa2V5d29yZHNbaV0sICJmYWxsYmFja19hcHBsaWNhdGlvbl9uYW1lIikgPT0gMCkK KwkJCWNvbnRpbnVlOworCisJCWlmICghZmlyc3RrZXl3b3JkKQorCQkJYXBwZW5kUFFFeHBCdWZm ZXJDaGFyKGJ1ZiwgJyAnKTsKKwkJZmlyc3RrZXl3b3JkID0gZmFsc2U7CisJCWFwcGVuZFBRRXhw QnVmZmVyKGJ1ZiwgIiVzPSIsIGtleXdvcmRzW2ldKTsKKwkJYXBwZW5kQ29ublN0clZhbChidWYs IHZhbHVlc1tpXSk7CisJfQorCisJY29ubnN0ciA9IHBnX3N0cmR1cChidWYtPmRhdGEpOworCWRl c3Ryb3lQUUV4cEJ1ZmZlcihidWYpOworCXJldHVybiBjb25uc3RyOworfQorCisvKgorICogUnVu IGEgcXVlcnksIHJldHVybiB0aGUgcmVzdWx0cywgZXhpdCBwcm9ncmFtIG9uIGZhaWx1cmUuCisg Ki8KK1BHcmVzdWx0ICoKK2V4ZWN1dGVRdWVyeShQR2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKnF1 ZXJ5KQoreworCVBHcmVzdWx0ICAgKnJlczsKKworCXBnX2xvZ19pbmZvKCJleGVjdXRpbmcgJXMi LCBxdWVyeSk7CisKKwlyZXMgPSBQUWV4ZWMoY29ubiwgcXVlcnkpOworCWlmICghcmVzIHx8CisJ CVBRcmVzdWx0U3RhdHVzKHJlcykgIT0gUEdSRVNfVFVQTEVTX09LKQorCXsKKwkJcGdfbG9nX2Vy cm9yKCJxdWVyeSBmYWlsZWQ6ICVzIiwgUFFlcnJvck1lc3NhZ2UoY29ubikpOworCQlwZ19sb2df ZXJyb3JfZGV0YWlsKCJRdWVyeSB3YXM6ICVzIiwgcXVlcnkpOworCQlQUWZpbmlzaChjb25uKTsK KwkJZXhpdF9uaWNlbHkoMSk7CisJfQorCisJcmV0dXJuIHJlczsKK30KKworLyoKKyAqIHBhcnNl RHVtcEZvcm1hdAorICoKKyAqIFRoaXMgd2lsbCB2YWxpZGF0ZSBkdW1wIGZvcm1hdHMuCisgKi8K K0FyY2hpdmVGb3JtYXQKK3BhcnNlRHVtcEZvcm1hdChjb25zdCBjaGFyICpmb3JtYXQpCit7CisJ QXJjaGl2ZUZvcm1hdAlhcmNoRHVtcEZvcm1hdDsKKworCWlmIChwZ19zdHJjYXNlY21wKGZvcm1h dCwgImMiKSA9PSAwKQorCQlhcmNoRHVtcEZvcm1hdCA9IGFyY2hDdXN0b207CisJZWxzZSBpZiAo cGdfc3RyY2FzZWNtcChmb3JtYXQsICJjdXN0b20iKSA9PSAwKQorCQlhcmNoRHVtcEZvcm1hdCA9 IGFyY2hDdXN0b207CisJZWxzZSBpZiAocGdfc3RyY2FzZWNtcChmb3JtYXQsICJkIikgPT0gMCkK KwkJYXJjaER1bXBGb3JtYXQgPSBhcmNoRGlyZWN0b3J5OworCWVsc2UgaWYgKHBnX3N0cmNhc2Vj bXAoZm9ybWF0LCAiZGlyZWN0b3J5IikgPT0gMCkKKwkJYXJjaER1bXBGb3JtYXQgPSBhcmNoRGly ZWN0b3J5OworCWVsc2UgaWYgKHBnX3N0cmNhc2VjbXAoZm9ybWF0LCAicCIpID09IDApCisJCWFy Y2hEdW1wRm9ybWF0ID0gYXJjaE51bGw7CisJZWxzZSBpZiAocGdfc3RyY2FzZWNtcChmb3JtYXQs ICJwbGFpbiIpID09IDApCisJCWFyY2hEdW1wRm9ybWF0ID0gYXJjaE51bGw7CisJZWxzZSBpZiAo cGdfc3RyY2FzZWNtcChmb3JtYXQsICJ0IikgPT0gMCkKKwkJYXJjaER1bXBGb3JtYXQgPSBhcmNo VGFyOworCWVsc2UgaWYgKHBnX3N0cmNhc2VjbXAoZm9ybWF0LCAidGFyIikgPT0gMCkKKwkJYXJj aER1bXBGb3JtYXQgPSBhcmNoVGFyOworCWVsc2UKKwkJcGdfZmF0YWwoInVucmVjb2duaXplZCBh cmNoaXZlIGZvcm1hdCBcIiVzXCI7IHBsZWFzZSBzcGVjaWZ5IFwiY1wiLCBcImRcIiwgb3IgXCJ0 XCIiLAorCQkJCWZvcm1hdCk7CisKKwlyZXR1cm4gYXJjaER1bXBGb3JtYXQ7Cit9CmRpZmYgLS1n aXQgYS9zcmMvYmluL3BnX2R1bXAvY29tbW9uX2R1bXBhbGxfcmVzdG9yZS5oIGIvc3JjL2Jpbi9w Z19kdW1wL2NvbW1vbl9kdW1wYWxsX3Jlc3RvcmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAwMC4uYTI3YzNlOWZiODkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmluL3Bn X2R1bXAvY29tbW9uX2R1bXBhbGxfcmVzdG9yZS5oCkBAIC0wLDAgKzEsMjYgQEAKKy8qLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorICoKKyAqIGNvbW1vbl9kdW1wYWxsX3Jlc3RvcmUuaAorICogICAgICBDb21t b24gaGVhZGVyIGZpbGUgZm9yIHBnX2R1bXBhbGwgYW5kIHBnX3Jlc3RvcmUKKyAqCisgKiBQb3J0 aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1l bnQgR3JvdXAKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUg VW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhCisgKgorICogSURFTlRJRklDQVRJT04KKyAqICAgIHNy Yy9iaW4vcGdfZHVtcC9jb21tb25fZHVtcGFsbF9yZXN0b3JlLmgKKyAqCisgKi0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyAqLworI2lmbmRlZiBDT01NT05fRFVNUEFMTF9SRVNUT1JFX0gKKyNkZWZpbmUgQ09N TU9OX0RVTVBBTExfUkVTVE9SRV9ICisKKyNpbmNsdWRlICJwZ19iYWNrdXAuaCIKKworZXh0ZXJu IFBHY29ubiAqY29ubmVjdERhdGFiYXNlKGNvbnN0IGNoYXIgKmRibmFtZSwKKwkJY29uc3QgY2hh ciAqY29ubmVjdGlvbl9zdHJpbmcsIGNvbnN0IGNoYXIgKnBnaG9zdCwKKwkJY29uc3QgY2hhciAq cGdwb3J0LCBjb25zdCBjaGFyICpwZ3VzZXIsCisJCXRyaXZhbHVlIHByb21wdF9wYXNzd29yZCwg Ym9vbCBmYWlsX29uX2Vycm9yLAorCQljb25zdCBjaGFyICpwcm9nbmFtZSwgY29uc3QgY2hhciAq KmNvbm5zdHIsIGludCAqc2VydmVyX3ZlcnNpb24pOworZXh0ZXJuICBQR3Jlc3VsdCAqZXhlY3V0 ZVF1ZXJ5KFBHY29ubiAqY29ubiwgY29uc3QgY2hhciAqcXVlcnkpOworZXh0ZXJuIEFyY2hpdmVG b3JtYXQgcGFyc2VEdW1wRm9ybWF0KGNvbnN0IGNoYXIgKmZvcm1hdCk7CisjZW5kaWYgICAgICAg ICAgICAgICAgICAgICAgICAgIC8qIENPTU1PTl9EVU1QQUxMX1JFU1RPUkVfSCAqLwpkaWZmIC0t Z2l0IGEvc3JjL2Jpbi9wZ19kdW1wL21lc29uLmJ1aWxkIGIvc3JjL2Jpbi9wZ19kdW1wL21lc29u LmJ1aWxkCmluZGV4IDYwM2JhNmNmYmYwLi5kZGVjYWM1Y2YwOSAxMDA2NDQKLS0tIGEvc3JjL2Jp bi9wZ19kdW1wL21lc29uLmJ1aWxkCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9tZXNvbi5idWlsZApA QCAtNDksNiArNDksNyBAQCBiaW5fdGFyZ2V0cyArPSBwZ19kdW1wCiAKIHBnX2R1bXBhbGxfc291 cmNlcyA9IGZpbGVzKAogICAncGdfZHVtcGFsbC5jJywKKyAgJ2NvbW1vbl9kdW1wYWxsX3Jlc3Rv cmUuYycsCiApCiAKIGlmIGhvc3Rfc3lzdGVtID09ICd3aW5kb3dzJwpAQCAtNjgsNiArNjksNyBA QCBiaW5fdGFyZ2V0cyArPSBwZ19kdW1wYWxsCiAKIHBnX3Jlc3RvcmVfc291cmNlcyA9IGZpbGVz KAogICAncGdfcmVzdG9yZS5jJywKKyAgJ2NvbW1vbl9kdW1wYWxsX3Jlc3RvcmUuYycsCiApCiAK IGlmIGhvc3Rfc3lzdGVtID09ICd3aW5kb3dzJwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1w L3BnX2JhY2t1cC5oIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cC5oCmluZGV4IGYwZjE5YmIw YjI5Li42NTAwMGU1YTA4MyAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cC5o CisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXAuaApAQCAtMzA2LDcgKzMwNiw3IEBAIGV4 dGVybiB2b2lkIFNldEFyY2hpdmVPcHRpb25zKEFyY2hpdmUgKkFILCBEdW1wT3B0aW9ucyAqZG9w dCwgUmVzdG9yZU9wdGlvbnMgKnJvCiAKIGV4dGVybiB2b2lkIFByb2Nlc3NBcmNoaXZlUmVzdG9y ZU9wdGlvbnMoQXJjaGl2ZSAqQUhYKTsKIAotZXh0ZXJuIHZvaWQgUmVzdG9yZUFyY2hpdmUoQXJj aGl2ZSAqQUhYKTsKK2V4dGVybiB2b2lkIFJlc3RvcmVBcmNoaXZlKEFyY2hpdmUgKkFIWCwgYm9v bCBhcHBlbmRfZGF0YSk7CiAKIC8qIE9wZW4gYW4gZXhpc3RpbmcgYXJjaGl2ZSAqLwogZXh0ZXJu IEFyY2hpdmUgKk9wZW5BcmNoaXZlKGNvbnN0IGNoYXIgKkZpbGVTcGVjLCBjb25zdCBBcmNoaXZl Rm9ybWF0IGZtdCk7CkBAIC0zMTksNyArMzE5LDcgQEAgZXh0ZXJuIEFyY2hpdmUgKkNyZWF0ZUFy Y2hpdmUoY29uc3QgY2hhciAqRmlsZVNwZWMsIGNvbnN0IEFyY2hpdmVGb3JtYXQgZm10LAogCQkJ CQkJCSAgRGF0YURpclN5bmNNZXRob2Qgc3luY19tZXRob2QpOwogCiAvKiBUaGUgLS1saXN0IG9w dGlvbiAqLwotZXh0ZXJuIHZvaWQgUHJpbnRUT0NTdW1tYXJ5KEFyY2hpdmUgKkFIWCk7CitleHRl cm4gdm9pZCBQcmludFRPQ1N1bW1hcnkoQXJjaGl2ZSAqQUhYLCBib29sIGFwcGVuZF9kYXRhKTsK IAogZXh0ZXJuIFJlc3RvcmVPcHRpb25zICpOZXdSZXN0b3JlT3B0aW9ucyh2b2lkKTsKIApkaWZm IC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5jIGIvc3JjL2Jpbi9w Z19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5jCmluZGV4IDcwN2EzZmM4NDRjLi43MTUzZDRhNDBi NiAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5jCisrKyBi L3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuYwpAQCAtODIsNyArODIsNyBAQCBz dGF0aWMgaW50CVJlc3RvcmluZ1RvREIoQXJjaGl2ZUhhbmRsZSAqQUgpOwogc3RhdGljIHZvaWQg ZHVtcF9sb19idWYoQXJjaGl2ZUhhbmRsZSAqQUgpOwogc3RhdGljIHZvaWQgZHVtcFRpbWVzdGFt cChBcmNoaXZlSGFuZGxlICpBSCwgY29uc3QgY2hhciAqbXNnLCB0aW1lX3QgdGltKTsKIHN0YXRp YyB2b2lkIFNldE91dHB1dChBcmNoaXZlSGFuZGxlICpBSCwgY29uc3QgY2hhciAqZmlsZW5hbWUs Ci0JCQkJCSAgY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVj KTsKKwkJCWNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25fc3BlYywg Ym9vbCBhcHBlbmRfZGF0YSk7CiBzdGF0aWMgQ29tcHJlc3NGaWxlSGFuZGxlICpTYXZlT3V0cHV0 KEFyY2hpdmVIYW5kbGUgKkFIKTsKIHN0YXRpYyB2b2lkIFJlc3RvcmVPdXRwdXQoQXJjaGl2ZUhh bmRsZSAqQUgsIENvbXByZXNzRmlsZUhhbmRsZSAqc2F2ZWRPdXRwdXQpOwogCkBAIC0zMzMsNyAr MzMzLDcgQEAgUHJvY2Vzc0FyY2hpdmVSZXN0b3JlT3B0aW9ucyhBcmNoaXZlICpBSFgpCiAKIC8q IFB1YmxpYyAqLwogdm9pZAotUmVzdG9yZUFyY2hpdmUoQXJjaGl2ZSAqQUhYKQorUmVzdG9yZUFy Y2hpdmUoQXJjaGl2ZSAqQUhYLCBib29sIGFwcGVuZF9kYXRhKQogewogCUFyY2hpdmVIYW5kbGUg KkFIID0gKEFyY2hpdmVIYW5kbGUgKikgQUhYOwogCVJlc3RvcmVPcHRpb25zICpyb3B0ID0gQUgt PnB1YmxpYy5yb3B0OwpAQCAtNDUwLDcgKzQ1MCw3IEBAIFJlc3RvcmVBcmNoaXZlKEFyY2hpdmUg KkFIWCkKIAkgKi8KIAlzYXYgPSBTYXZlT3V0cHV0KEFIKTsKIAlpZiAocm9wdC0+ZmlsZW5hbWUg fHwgcm9wdC0+Y29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0gIT0gUEdfQ09NUFJFU1NJT05fTk9O RSkKLQkJU2V0T3V0cHV0KEFILCByb3B0LT5maWxlbmFtZSwgcm9wdC0+Y29tcHJlc3Npb25fc3Bl Yyk7CisJCVNldE91dHB1dChBSCwgcm9wdC0+ZmlsZW5hbWUsIHJvcHQtPmNvbXByZXNzaW9uX3Nw ZWMsIGFwcGVuZF9kYXRhKTsKIAogCWFocHJpbnRmKEFILCAiLS1cbi0tIFBvc3RncmVTUUwgZGF0 YWJhc2UgZHVtcFxuLS1cblxuIik7CiAKQEAgLTEyNjMsNyArMTI2Myw3IEBAIEFyY2hpdmVFbnRy eShBcmNoaXZlICpBSFgsIENhdGFsb2dJZCBjYXRhbG9nSWQsIER1bXBJZCBkdW1wSWQsCiAKIC8q IFB1YmxpYyAqLwogdm9pZAotUHJpbnRUT0NTdW1tYXJ5KEFyY2hpdmUgKkFIWCkKK1ByaW50VE9D U3VtbWFyeShBcmNoaXZlICpBSFgsIGJvb2wgYXBwZW5kX2RhdGEpCiB7CiAJQXJjaGl2ZUhhbmRs ZSAqQUggPSAoQXJjaGl2ZUhhbmRsZSAqKSBBSFg7CiAJUmVzdG9yZU9wdGlvbnMgKnJvcHQgPSBB SC0+cHVibGljLnJvcHQ7CkBAIC0xMjc5LDcgKzEyNzksNyBAQCBQcmludFRPQ1N1bW1hcnkoQXJj aGl2ZSAqQUhYKQogCiAJc2F2ID0gU2F2ZU91dHB1dChBSCk7CiAJaWYgKHJvcHQtPmZpbGVuYW1l KQotCQlTZXRPdXRwdXQoQUgsIHJvcHQtPmZpbGVuYW1lLCBvdXRfY29tcHJlc3Npb25fc3BlYyk7 CisJCVNldE91dHB1dChBSCwgcm9wdC0+ZmlsZW5hbWUsIG91dF9jb21wcmVzc2lvbl9zcGVjLCBh cHBlbmRfZGF0YSk7CiAKIAlpZiAoc3RyZnRpbWUoc3RhbXBfc3RyLCBzaXplb2Yoc3RhbXBfc3Ry KSwgUEdEVU1QX1NUUkZUSU1FX0ZNVCwKIAkJCQkgbG9jYWx0aW1lKCZBSC0+Y3JlYXRlRGF0ZSkp ID09IDApCkBAIC0xNjU4LDcgKzE2NTgsOCBAQCBhcmNocHJpbnRmKEFyY2hpdmUgKkFILCBjb25z dCBjaGFyICpmbXQsLi4uKQogCiBzdGF0aWMgdm9pZAogU2V0T3V0cHV0KEFyY2hpdmVIYW5kbGUg KkFILCBjb25zdCBjaGFyICpmaWxlbmFtZSwKLQkJICBjb25zdCBwZ19jb21wcmVzc19zcGVjaWZp Y2F0aW9uIGNvbXByZXNzaW9uX3NwZWMpCisJCSAgY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNh dGlvbiBjb21wcmVzc2lvbl9zcGVjLAorCQkgIGJvb2wgYXBwZW5kX2RhdGEpCiB7CiAJQ29tcHJl c3NGaWxlSGFuZGxlICpDRkg7CiAJY29uc3QgY2hhciAqbW9kZTsKQEAgLTE2NzgsNyArMTY3OSw3 IEBAIFNldE91dHB1dChBcmNoaXZlSGFuZGxlICpBSCwgY29uc3QgY2hhciAqZmlsZW5hbWUsCiAJ ZWxzZQogCQlmbiA9IGZpbGVubyhzdGRvdXQpOwogCi0JaWYgKEFILT5tb2RlID09IGFyY2hNb2Rl QXBwZW5kKQorCWlmIChhcHBlbmRfZGF0YSB8fCBBSC0+bW9kZSA9PSBhcmNoTW9kZUFwcGVuZCkK IAkJbW9kZSA9IFBHX0JJTkFSWV9BOwogCWVsc2UKIAkJbW9kZSA9IFBHX0JJTkFSWV9XOwpkaWZm IC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF90YXIuYyBiL3NyYy9iaW4vcGdfZHVt cC9wZ19iYWNrdXBfdGFyLmMKaW5kZXggYjViYTNiNDZkZDkuLmQ5NGQwZGUyYTVkIDEwMDY0NAot LS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX3Rhci5jCisrKyBiL3NyYy9iaW4vcGdfZHVt cC9wZ19iYWNrdXBfdGFyLmMKQEAgLTgyNiw3ICs4MjYsNyBAQCBfQ2xvc2VBcmNoaXZlKEFyY2hp dmVIYW5kbGUgKkFIKQogCQlzYXZWZXJib3NlID0gQUgtPnB1YmxpYy52ZXJib3NlOwogCQlBSC0+ cHVibGljLnZlcmJvc2UgPSAwOwogCi0JCVJlc3RvcmVBcmNoaXZlKChBcmNoaXZlICopIEFIKTsK KwkJUmVzdG9yZUFyY2hpdmUoKEFyY2hpdmUgKikgQUgsIGZhbHNlKTsKIAogCQlTZXRBcmNoaXZl T3B0aW9ucygoQXJjaGl2ZSAqKSBBSCwgc2F2RG9wdCwgc2F2Um9wdCk7CiAKZGlmZiAtLWdpdCBh L3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfdXRpbHMuYyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19i YWNrdXBfdXRpbHMuYwppbmRleCA3OWFlYzVmNTE1OC4uZjcwZWE5MjMzZmUgMTAwNjQ0Ci0tLSBh L3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfdXRpbHMuYworKysgYi9zcmMvYmluL3BnX2R1bXAv cGdfYmFja3VwX3V0aWxzLmMKQEAgLTIxLDcgKzIxLDggQEAKIC8qIEdsb2JhbHMgZXhwb3J0ZWQg YnkgdGhpcyBmaWxlICovCiBjb25zdCBjaGFyICpwcm9nbmFtZSA9IE5VTEw7CiAKLSNkZWZpbmUg TUFYX09OX0VYSVRfTklDRUxZCQkJCTIwCisvKiBUT0RPOiBpbmNyZWFzaW5nIHRoaXMgdG8ga2Vl cCAxMDAgZGIgcmVzdG9yaW5nIGJ5IHNpbmdsZSBwZ19yZXN0b3JlIGNvbW1hbmQuICovCisjZGVm aW5lIE1BWF9PTl9FWElUX05JQ0VMWQkJCQkxMDAKIAogc3RhdGljIHN0cnVjdAogewpkaWZmIC0t Z2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1w LmMKaW5kZXggOGY3M2E1ZGY5NTYuLmVhZTYyNmY2MjEzIDEwMDY0NAotLS0gYS9zcmMvYmluL3Bn X2R1bXAvcGdfZHVtcC5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMKQEAgLTExNDcs NyArMTE0Nyw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCSAqIHJpZ2h0IG5vdy4K IAkgKi8KIAlpZiAocGxhaW5UZXh0KQotCQlSZXN0b3JlQXJjaGl2ZShmb3V0KTsKKwkJUmVzdG9y ZUFyY2hpdmUoZm91dCwgZmFsc2UpOwogCiAJQ2xvc2VBcmNoaXZlKGZvdXQpOwogCmRpZmYgLS1n aXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcGFsbC5jIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1 bXBhbGwuYwppbmRleCAzOTZmNzk3ODFjNS4uNTkxNWIxYjA1MTYgMTAwNjQ0Ci0tLSBhL3NyYy9i aW4vcGdfZHVtcC9wZ19kdW1wYWxsLmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXBhbGwu YwpAQCAtMTUsNiArMTUsNyBAQAogCiAjaW5jbHVkZSAicG9zdGdyZXNfZmUuaCIKIAorI2luY2x1 ZGUgPHN5cy9zdGF0Lmg+CiAjaW5jbHVkZSA8dGltZS5oPgogI2luY2x1ZGUgPHVuaXN0ZC5oPgog CkBAIC0yNCwxNCArMjUsMTcgQEAKICNpbmNsdWRlICJjb21tb24vaGFzaGZuX3Vuc3RhYmxlLmgi CiAjaW5jbHVkZSAiY29tbW9uL2xvZ2dpbmcuaCIKICNpbmNsdWRlICJjb21tb24vc3RyaW5nLmgi CisjaW5jbHVkZSAiY29tbW9uX2R1bXBhbGxfcmVzdG9yZS5oIgogI2luY2x1ZGUgImR1bXB1dGls cy5oIgogI2luY2x1ZGUgImZlX3V0aWxzL3N0cmluZ191dGlscy5oIgogI2luY2x1ZGUgImZpbHRl ci5oIgogI2luY2x1ZGUgImdldG9wdF9sb25nLmgiCiAjaW5jbHVkZSAicGdfYmFja3VwLmgiCisj aW5jbHVkZSAicGdfYmFja3VwX2FyY2hpdmVyLmgiCiAKIC8qIHZlcnNpb24gc3RyaW5nIHdlIGV4 cGVjdCBiYWNrIGZyb20gcGdfZHVtcCAqLwogI2RlZmluZSBQR0RVTVBfVkVSU0lPTlNUUiAicGdf ZHVtcCAoUG9zdGdyZVNRTCkgIiBQR19WRVJTSU9OICJcbiIKKyNkZWZpbmUgZXhpdF9uaWNlbHko Y29kZSkgZXhpdChjb2RlKQogCiB0eXBlZGVmIHN0cnVjdAogewpAQCAtNjQsMjggKzY4LDI0IEBA IHN0YXRpYyB2b2lkIGRyb3BUYWJsZXNwYWNlcyhQR2Nvbm4gKmNvbm4pOwogc3RhdGljIHZvaWQg ZHVtcFRhYmxlc3BhY2VzKFBHY29ubiAqY29ubik7CiBzdGF0aWMgdm9pZCBkcm9wREJzKFBHY29u biAqY29ubik7CiBzdGF0aWMgdm9pZCBkdW1wVXNlckNvbmZpZyhQR2Nvbm4gKmNvbm4sIGNvbnN0 IGNoYXIgKnVzZXJuYW1lKTsKLXN0YXRpYyB2b2lkIGR1bXBEYXRhYmFzZXMoUEdjb25uICpjb25u KTsKK3N0YXRpYyB2b2lkIGR1bXBEYXRhYmFzZXMoUEdjb25uICpjb25uLCBBcmNoaXZlRm9ybWF0 IGFyY2hEdW1wRm9ybWF0KTsKIHN0YXRpYyB2b2lkIGR1bXBUaW1lc3RhbXAoY29uc3QgY2hhciAq bXNnKTsKLXN0YXRpYyBpbnQJcnVuUGdEdW1wKGNvbnN0IGNoYXIgKmRibmFtZSwgY29uc3QgY2hh ciAqY3JlYXRlX29wdHMpOworc3RhdGljIGludCBydW5QZ0R1bXAoY29uc3QgY2hhciAqZGJuYW1l LCBjb25zdCBjaGFyICpjcmVhdGVfb3B0cywKKwkJCQkJIGNoYXIgKmRiZmlsZSwgQXJjaGl2ZUZv cm1hdCBhcmNoRHVtcEZvcm1hdCk7CiBzdGF0aWMgdm9pZCBidWlsZFNoU2VjTGFiZWxzKFBHY29u biAqY29ubiwKIAkJCQkJCQkgY29uc3QgY2hhciAqY2F0YWxvZ19uYW1lLCBPaWQgb2JqZWN0SWQs CiAJCQkJCQkJIGNvbnN0IGNoYXIgKm9ianR5cGUsIGNvbnN0IGNoYXIgKm9iam5hbWUsCiAJCQkJ CQkJIFBRRXhwQnVmZmVyIGJ1ZmZlcik7Ci1zdGF0aWMgUEdjb25uICpjb25uZWN0RGF0YWJhc2Uo Y29uc3QgY2hhciAqZGJuYW1lLAotCQkJCQkJCSAgIGNvbnN0IGNoYXIgKmNvbm5lY3Rpb25fc3Ry aW5nLCBjb25zdCBjaGFyICpwZ2hvc3QsCi0JCQkJCQkJICAgY29uc3QgY2hhciAqcGdwb3J0LCBj b25zdCBjaGFyICpwZ3VzZXIsCi0JCQkJCQkJICAgdHJpdmFsdWUgcHJvbXB0X3Bhc3N3b3JkLCBi b29sIGZhaWxfb25fZXJyb3IpOwotc3RhdGljIGNoYXIgKmNvbnN0cnVjdENvbm5TdHIoY29uc3Qg Y2hhciAqKmtleXdvcmRzLCBjb25zdCBjaGFyICoqdmFsdWVzKTsKLXN0YXRpYyBQR3Jlc3VsdCAq ZXhlY3V0ZVF1ZXJ5KFBHY29ubiAqY29ubiwgY29uc3QgY2hhciAqcXVlcnkpOwogc3RhdGljIHZv aWQgZXhlY3V0ZUNvbW1hbmQoUEdjb25uICpjb25uLCBjb25zdCBjaGFyICpxdWVyeSk7CiBzdGF0 aWMgdm9pZCBleHBhbmRfZGJuYW1lX3BhdHRlcm5zKFBHY29ubiAqY29ubiwgU2ltcGxlU3RyaW5n TGlzdCAqcGF0dGVybnMsCiAJCQkJCQkJCSAgIFNpbXBsZVN0cmluZ0xpc3QgKm5hbWVzKTsKIHN0 YXRpYyB2b2lkIHJlYWRfZHVtcGFsbF9maWx0ZXJzKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBTaW1w bGVTdHJpbmdMaXN0ICpwYXR0ZXJuKTsKK3N0YXRpYyB2b2lkIGNyZWF0ZV9vcl9vcGVuX2Rpcihj b25zdCBjaGFyICpkaXJuYW1lKTsKIAogc3RhdGljIGNoYXIgcGdfZHVtcF9iaW5bTUFYUEdQQVRI XTsKIHN0YXRpYyBjb25zdCBjaGFyICpwcm9nbmFtZTsKIHN0YXRpYyBQUUV4cEJ1ZmZlciBwZ2R1 bXBvcHRzOwotc3RhdGljIGNoYXIgKmNvbm5zdHIgPSAiIjsKK3N0YXRpYyBjb25zdCBjaGFyICpj b25uc3RyID0gIiI7CiBzdGF0aWMgYm9vbCBvdXRwdXRfY2xlYW4gPSBmYWxzZTsKIHN0YXRpYyBi b29sIHNraXBfYWNscyA9IGZhbHNlOwogc3RhdGljIGJvb2wgdmVyYm9zZSA9IGZhbHNlOwpAQCAt MTA3LDcgKzEwNyw3IEBAIHN0YXRpYyBpbnQJbm9fc3Vic2NyaXB0aW9ucyA9IDA7CiBzdGF0aWMg aW50CW5vX3RvYXN0X2NvbXByZXNzaW9uID0gMDsKIHN0YXRpYyBpbnQJbm9fdW5sb2dnZWRfdGFi bGVfZGF0YSA9IDA7CiBzdGF0aWMgaW50CW5vX3JvbGVfcGFzc3dvcmRzID0gMDsKLXN0YXRpYyBp bnQJc2VydmVyX3ZlcnNpb247CitzdGF0aWMgaW50IHNlcnZlcl92ZXJzaW9uOwogc3RhdGljIGlu dAlsb2FkX3ZpYV9wYXJ0aXRpb25fcm9vdCA9IDA7CiBzdGF0aWMgaW50CW9uX2NvbmZsaWN0X2Rv X25vdGhpbmcgPSAwOwogCkBAIC0xMjEsOCArMTIxLDYgQEAgc3RhdGljIGNoYXIgKmZpbGVuYW1l ID0gTlVMTDsKIHN0YXRpYyBTaW1wbGVTdHJpbmdMaXN0IGRhdGFiYXNlX2V4Y2x1ZGVfcGF0dGVy bnMgPSB7TlVMTCwgTlVMTH07CiBzdGF0aWMgU2ltcGxlU3RyaW5nTGlzdCBkYXRhYmFzZV9leGNs dWRlX25hbWVzID0ge05VTEwsIE5VTEx9OwogCi0jZGVmaW5lIGV4aXRfbmljZWx5KGNvZGUpIGV4 aXQoY29kZSkKLQogaW50CiBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiB7CkBAIC0xNDcs NiArMTQ1LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCQl7InBhc3N3b3JkIiwg bm9fYXJndW1lbnQsIE5VTEwsICdXJ30sCiAJCXsibm8tcHJpdmlsZWdlcyIsIG5vX2FyZ3VtZW50 LCBOVUxMLCAneCd9LAogCQl7Im5vLWFjbCIsIG5vX2FyZ3VtZW50LCBOVUxMLCAneCd9LAorCQl7 ImZvcm1hdCIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAnRid9LAogCiAJCS8qCiAJCSAqIHRo ZSBmb2xsb3dpbmcgb3B0aW9ucyBkb24ndCBoYXZlIGFuIGVxdWl2YWxlbnQgc2hvcnQgb3B0aW9u IGxldHRlcgpAQCAtMTg4LDYgKzE4Nyw4IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkK IAljaGFyCSAgICpwZ2RiID0gTlVMTDsKIAljaGFyCSAgICp1c2Vfcm9sZSA9IE5VTEw7CiAJY29u c3QgY2hhciAqZHVtcGVuY29kaW5nID0gTlVMTDsKKwlBcmNoaXZlRm9ybWF0IGFyY2hEdW1wRm9y bWF0ID0gYXJjaE51bGw7CisJY29uc3QgY2hhciAqZm9ybWF0TmFtZSA9ICJwIjsKIAl0cml2YWx1 ZQlwcm9tcHRfcGFzc3dvcmQgPSBUUklfREVGQVVMVDsKIAlib29sCQlkYXRhX29ubHkgPSBmYWxz ZTsKIAlib29sCQlnbG9iYWxzX29ubHkgPSBmYWxzZTsKQEAgLTIzNyw3ICsyMzgsNyBAQCBtYWlu KGludCBhcmdjLCBjaGFyICphcmd2W10pCiAKIAlwZ2R1bXBvcHRzID0gY3JlYXRlUFFFeHBCdWZm ZXIoKTsKIAotCXdoaWxlICgoYyA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsICJhY2Q6RTpmOmdo Omw6T3A6cnNTOnRVOnZ3V3giLCBsb25nX29wdGlvbnMsICZvcHRpbmRleCkpICE9IC0xKQorCXdo aWxlICgoYyA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsICJhY2Q6RTpmOkY6Z2g6bDpPcDpyc1M6 dFU6dndXeCIsIGxvbmdfb3B0aW9ucywgJm9wdGluZGV4KSkgIT0gLTEpCiAJewogCQlzd2l0Y2gg KGMpCiAJCXsKQEAgLTI2NSw3ICsyNjYsOSBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10p CiAJCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocGdkdW1wb3B0cywgIiAtZiAiKTsKIAkJCQlhcHBl bmRTaGVsbFN0cmluZyhwZ2R1bXBvcHRzLCBmaWxlbmFtZSk7CiAJCQkJYnJlYWs7Ci0KKwkJCWNh c2UgJ0YnOgorCQkJCWZvcm1hdE5hbWUgPSBwZ19zdHJkdXAob3B0YXJnKTsKKwkJCQlicmVhazsK IAkJCWNhc2UgJ2cnOgogCQkJCWdsb2JhbHNfb25seSA9IHRydWU7CiAJCQkJYnJlYWs7CkBAIC00 MTQsNiArNDE3LDIxIEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAkJZXhpdF9uaWNl bHkoMSk7CiAJfQogCisJLyogR2V0IGZvcm1hdCBmb3IgZHVtcC4gKi8KKwlhcmNoRHVtcEZvcm1h dCA9IHBhcnNlRHVtcEZvcm1hdChmb3JtYXROYW1lKTsKKworCS8qCisJICogSWYgbm9uLXBsYWlu IGZvcm1hdCBpcyBzcGVjaWZpZWQgdGhlbiB3ZSBtdXN0IHByb3ZpZGUgdGhlCisJICogZmlsZSBu YW1lIHRvIGNyZWF0ZSBvbmUgbWFpbiBkaXJlY3RvcnkuCisJICovCisJaWYgKGFyY2hEdW1wRm9y bWF0ICE9IGFyY2hOdWxsICYmCisJCQkoIWZpbGVuYW1lIHx8IHN0cmNtcChmaWxlbmFtZSwgIiIp ID09IDApKQorCXsKKwkJcGdfbG9nX2Vycm9yKCJvcHRpb25zIC1GLy0tZm9ybWF0PWR8Y3x0IHJl cXVpcmVzIG9wdGlvbiAtZi8tLWZpbGUgd2l0aCBub24tZW1wdHkgc3RyaW5nIik7CisJCXBnX2xv Z19lcnJvcl9oaW50KCJUcnkgXCIlcyAtLWhlbHBcIiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iLCBw cm9nbmFtZSk7CisJCWV4aXRfbmljZWx5KDEpOworCX0KKwogCS8qCiAJICogSWYgcGFzc3dvcmQg dmFsdWVzIGFyZSBub3QgcmVxdWlyZWQgaW4gdGhlIGR1bXAsIHN3aXRjaCB0byB1c2luZwogCSAq IHBnX3JvbGVzIHdoaWNoIGlzIGVxdWFsbHkgdXNlZnVsLCBqdXN0IG1vcmUgbGlrZWx5IHRvIGhh dmUgdW5yZXN0cmljdGVkCkBAIC00NjAsNiArNDc4LDMzIEBAIG1haW4oaW50IGFyZ2MsIGNoYXIg KmFyZ3ZbXSkKIAlpZiAob25fY29uZmxpY3RfZG9fbm90aGluZykKIAkJYXBwZW5kUFFFeHBCdWZm ZXJTdHIocGdkdW1wb3B0cywgIiAtLW9uLWNvbmZsaWN0LWRvLW5vdGhpbmciKTsKIAorCS8qCisJ ICogT3BlbiB0aGUgb3V0cHV0IGZpbGUgaWYgcmVxdWlyZWQsIG90aGVyd2lzZSB1c2Ugc3Rkb3V0 LiAgSWYgcmVxdWlyZWQsCisJICogdGhlbiBjcmVhdGUgbmV3IGRpcmVjdG9yeSBhbmQgZ2xvYmFs LmRhdCBmaWxlLgorCSAqLworCWlmIChhcmNoRHVtcEZvcm1hdCAhPSBhcmNoTnVsbCkKKwl7CisJ CWNoYXIJdG9jX3BhdGhbTUFYUEdQQVRIXTsKKworCQkvKiBDcmVhdGUgbmV3IGRpcmVjdG9yeSBv ciBhY2NlcHQgdGhlIGVtcHR5IGV4aXN0aW5nIGRpcmVjdG9yeS4gKi8KKwkJY3JlYXRlX29yX29w ZW5fZGlyKGZpbGVuYW1lKTsKKworCQlzbnByaW50Zih0b2NfcGF0aCwgTUFYUEdQQVRILCAiJXMv Z2xvYmFsLmRhdCIsIGZpbGVuYW1lKTsKKworCQlPUEYgPSBmb3Blbih0b2NfcGF0aCwgUEdfQklO QVJZX1cpOworCQlpZiAoIU9QRikKKwkJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgb3BlbiBnbG9iYWwu ZGF0IGZpbGU6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKwl9CisJZWxzZSBpZiAoZmlsZW5hbWUp CisJeworCQlPUEYgPSBmb3BlbihmaWxlbmFtZSwgUEdfQklOQVJZX1cpOworCQlpZiAoIU9QRikK KwkJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgb3BlbiBvdXRwdXQgZmlsZSBcIiVzXCI6ICVtIiwKKwkJ CQkJIGZpbGVuYW1lKTsKKwl9CisJZWxzZQorCQlPUEYgPSBzdGRvdXQ7CisKIAkvKgogCSAqIElm IHRoZXJlIHdhcyBhIGRhdGFiYXNlIHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZCBsaW5lLCB1c2Ug dGhhdCwKIAkgKiBvdGhlcndpc2UgdHJ5IHRvIGNvbm5lY3QgdG8gZGF0YWJhc2UgInBvc3RncmVz IiwgYW5kIGZhaWxpbmcgdGhhdApAQCAtNDY4LDcgKzUxMyw4IEBAIG1haW4oaW50IGFyZ2MsIGNo YXIgKmFyZ3ZbXSkKIAlpZiAocGdkYikKIAl7CiAJCWNvbm4gPSBjb25uZWN0RGF0YWJhc2UocGdk YiwgY29ubnN0ciwgcGdob3N0LCBwZ3BvcnQsIHBndXNlciwKLQkJCQkJCQkgICBwcm9tcHRfcGFz c3dvcmQsIGZhbHNlKTsKKwkJCQkJCQkgICBwcm9tcHRfcGFzc3dvcmQsIGZhbHNlLAorCQkJCQkJ CSAgIHByb2duYW1lLCAmY29ubnN0ciwgJnNlcnZlcl92ZXJzaW9uKTsKIAogCQlpZiAoIWNvbm4p CiAJCQlwZ19mYXRhbCgiY291bGQgbm90IGNvbm5lY3QgdG8gZGF0YWJhc2UgXCIlc1wiIiwgcGdk Yik7CkBAIC00NzYsMTAgKzUyMiwxMiBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJ ZWxzZQogCXsKIAkJY29ubiA9IGNvbm5lY3REYXRhYmFzZSgicG9zdGdyZXMiLCBjb25uc3RyLCBw Z2hvc3QsIHBncG9ydCwgcGd1c2VyLAotCQkJCQkJCSAgIHByb21wdF9wYXNzd29yZCwgZmFsc2Up OworCQkJCQkJCSAgIHByb21wdF9wYXNzd29yZCwgZmFsc2UsCisJCQkJCQkJICAgcHJvZ25hbWUs ICZjb25uc3RyLCAmc2VydmVyX3ZlcnNpb24pOwogCQlpZiAoIWNvbm4pCiAJCQljb25uID0gY29u bmVjdERhdGFiYXNlKCJ0ZW1wbGF0ZTEiLCBjb25uc3RyLCBwZ2hvc3QsIHBncG9ydCwgcGd1c2Vy LAotCQkJCQkJCQkgICBwcm9tcHRfcGFzc3dvcmQsIHRydWUpOworCQkJCQkJCQkgICBwcm9tcHRf cGFzc3dvcmQsIHRydWUsCisJCQkJCQkJCSAgIHByb2duYW1lLCAmY29ubnN0ciwgJnNlcnZlcl92 ZXJzaW9uKTsKIAogCQlpZiAoIWNvbm4pCiAJCXsKQEAgLTQ5NiwxOSArNTQ0LDYgQEAgbWFpbihp bnQgYXJnYywgY2hhciAqYXJndltdKQogCWV4cGFuZF9kYm5hbWVfcGF0dGVybnMoY29ubiwgJmRh dGFiYXNlX2V4Y2x1ZGVfcGF0dGVybnMsCiAJCQkJCQkgICAmZGF0YWJhc2VfZXhjbHVkZV9uYW1l cyk7CiAKLQkvKgotCSAqIE9wZW4gdGhlIG91dHB1dCBmaWxlIGlmIHJlcXVpcmVkLCBvdGhlcndp c2UgdXNlIHN0ZG91dAotCSAqLwotCWlmIChmaWxlbmFtZSkKLQl7Ci0JCU9QRiA9IGZvcGVuKGZp bGVuYW1lLCBQR19CSU5BUllfVyk7Ci0JCWlmICghT1BGKQotCQkJcGdfZmF0YWwoImNvdWxkIG5v dCBvcGVuIG91dHB1dCBmaWxlIFwiJXNcIjogJW0iLAotCQkJCQkgZmlsZW5hbWUpOwotCX0KLQll bHNlCi0JCU9QRiA9IHN0ZG91dDsKLQogCS8qCiAJICogU2V0IHRoZSBjbGllbnQgZW5jb2Rpbmcg aWYgcmVxdWVzdGVkLgogCSAqLwpAQCAtNjA3LDcgKzY0Miw3IEBAIG1haW4oaW50IGFyZ2MsIGNo YXIgKmFyZ3ZbXSkKIAl9CiAKIAlpZiAoIWdsb2JhbHNfb25seSAmJiAhcm9sZXNfb25seSAmJiAh dGFibGVzcGFjZXNfb25seSkKLQkJZHVtcERhdGFiYXNlcyhjb25uKTsKKwkJZHVtcERhdGFiYXNl cyhjb25uLCBhcmNoRHVtcEZvcm1hdCk7CiAKIAlQUWZpbmlzaChjb25uKTsKIApAQCAtNjIwLDcg KzY1NSw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAkJZmNsb3NlKE9QRik7CiAK IAkJLyogc3luYyB0aGUgcmVzdWx0aW5nIGZpbGUsIGVycm9ycyBhcmUgbm90IGZhdGFsICovCi0J CWlmIChkb3N5bmMpCisJCWlmIChkb3N5bmMgJiYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxs KSkKIAkJCSh2b2lkKSBmc3luY19mbmFtZShmaWxlbmFtZSwgZmFsc2UpOwogCX0KIApAQCAtNjM3 LDYgKzY3Miw4IEBAIGhlbHAodm9pZCkKIAogCXByaW50ZihfKCJcbkdlbmVyYWwgb3B0aW9uczpc biIpKTsKIAlwcmludGYoXygiICAtZiwgLS1maWxlPUZJTEVOQU1FICAgICAgICAgIG91dHB1dCBm aWxlIG5hbWVcbiIpKTsKKwlwcmludGYoXygiICAtRiwgLS1mb3JtYXQ9Y3xkfHR8cCAgICAgICAg IG91dHB1dCBmaWxlIGZvcm1hdCAoY3VzdG9tLCBkaXJlY3RvcnksIHRhcixcbiIKKwkJCSIgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWluIHRleHQgKGRlZmF1bHQpKVxuIikpOwog CXByaW50ZihfKCIgIC12LCAtLXZlcmJvc2UgICAgICAgICAgICAgICAgdmVyYm9zZSBtb2RlXG4i KSk7CiAJcHJpbnRmKF8oIiAgLVYsIC0tdmVyc2lvbiAgICAgICAgICAgICAgICBvdXRwdXQgdmVy c2lvbiBpbmZvcm1hdGlvbiwgdGhlbiBleGl0XG4iKSk7CiAJcHJpbnRmKF8oIiAgLS1sb2NrLXdh aXQtdGltZW91dD1USU1FT1VUICBmYWlsIGFmdGVyIHdhaXRpbmcgVElNRU9VVCBmb3IgYSB0YWJs ZSBsb2NrXG4iKSk7CkBAIC0xNDg3LDEwICsxNTI0LDEzIEBAIGV4cGFuZF9kYm5hbWVfcGF0dGVy bnMoUEdjb25uICpjb25uLAogICogRHVtcCBjb250ZW50cyBvZiBkYXRhYmFzZXMuCiAgKi8KIHN0 YXRpYyB2b2lkCi1kdW1wRGF0YWJhc2VzKFBHY29ubiAqY29ubikKK2R1bXBEYXRhYmFzZXMoUEdj b25uICpjb25uLCBBcmNoaXZlRm9ybWF0IGFyY2hEdW1wRm9ybWF0KQogewogCVBHcmVzdWx0ICAg KnJlczsKIAlpbnQJCQlpOworCWNoYXIJCWRiX3N1YmRpcltNQVhQR1BBVEhdOworCWNoYXIJCWRi ZmlsZXBhdGhbTUFYUEdQQVRIXTsKKwlGSUxFICAgICAgICptYXBfZmlsZSA9IE5VTEw7CiAKIAkv KgogCSAqIFNraXAgZGF0YWJhc2VzIG1hcmtlZCBub3QgZGF0YWxsb3djb25uLCBzaW5jZSB3ZSdk IGJlIHVuYWJsZSB0byBjb25uZWN0CkBAIC0xNTA0LDcgKzE1NDQsNyBAQCBkdW1wRGF0YWJhc2Vz KFBHY29ubiAqY29ubikKIAkgKiBkb2Vzbid0IGhhdmUgc29tZSBmYWlsdXJlIG1vZGUgd2l0aCAt LWNsZWFuLgogCSAqLwogCXJlcyA9IGV4ZWN1dGVRdWVyeShjb25uLAotCQkJCQkgICAiU0VMRUNU IGRhdG5hbWUgIgorCQkJCQkgICAiU0VMRUNUIGRhdG5hbWUsIG9pZCAiCiAJCQkJCSAgICJGUk9N IHBnX2RhdGFiYXNlIGQgIgogCQkJCQkgICAiV0hFUkUgZGF0YWxsb3djb25uIEFORCBkYXRjb25u bGltaXQgIT0gLTIgIgogCQkJCQkgICAiT1JERVIgQlkgKGRhdG5hbWUgPD4gJ3RlbXBsYXRlMScp LCBkYXRuYW1lIik7CkBAIC0xNTEyLDkgKzE1NTIsMzMgQEAgZHVtcERhdGFiYXNlcyhQR2Nvbm4g KmNvbm4pCiAJaWYgKFBRbnR1cGxlcyhyZXMpID4gMCkKIAkJZnByaW50ZihPUEYsICItLVxuLS0g RGF0YWJhc2VzXG4tLVxuXG4iKTsKIAorCS8qCisJICogSWYgZGlyZWN0b3J5L3Rhci9jdXN0b20g Zm9ybWF0IGlzIHNwZWNpZmllZCB0aGVuIGNyZWF0ZSBhIHN1YmRpcmVjdG9yeQorCSAqIHVuZGVy IHRoZSBtYWluIGRpcmVjdG9yeSBhbmQgZWFjaCBkYXRhYmFzZSBkdW1wIGZpbGUgc3ViZGlyZWN0 b3J5IHdpbGwKKwkgKiBiZSBjcmVhdGVkIHVuZGVyIHRoZSBzdWJkaXJlY3RvcnkgaW4gYXJjaGl2 ZSBtb2RlIGFzIHBlciBzaW5nbGUgZGIgcGdfZHVtcC4KKwkgKi8KKwlpZiAoYXJjaER1bXBGb3Jt YXQgIT0gYXJjaE51bGwpCisJeworCQljaGFyCW1hcF9maWxlX3BhdGhbTUFYUEdQQVRIXTsKKwor CQlzbnByaW50ZihkYl9zdWJkaXIsIE1BWFBHUEFUSCwgIiVzL2RhdGFiYXNlcyIsIGZpbGVuYW1l KTsKKworCQkvKiBDcmVhdGUgYSBzdWJkaXJlY3Rvcnkgd2l0aCAnZGF0YWJhc2VzJyBuYW1lIHVu ZGVyIG1haW4gZGlyZWN0b3J5LiAqLworCQlpZiAobWtkaXIoZGJfc3ViZGlyLCAwNzU1KSAhPSAw KQorCQkJcGdfbG9nX2Vycm9yKCJjb3VsZCBub3QgY3JlYXRlIHN1YmRpcmVjdG9yeSBcIiVzXCI6 ICVtIiwgZGJfc3ViZGlyKTsKKworCQlzbnByaW50ZihtYXBfZmlsZV9wYXRoLCBNQVhQR1BBVEgs ICIlcy9tYXAuZGF0IiwgZmlsZW5hbWUpOworCisJCS8qIENyZWF0ZSBhIG1hcCBmaWxlICh0byBz dG9yZSBkYm9pZCBhbmQgZGJuYW1lKSAqLworCQltYXBfZmlsZSA9IGZvcGVuKG1hcF9maWxlX3Bh dGgsIFBHX0JJTkFSWV9XKTsKKwkJaWYgKCFtYXBfZmlsZSkKKwkJCXBnX2ZhdGFsKCJjb3VsZCBu b3Qgb3BlbiBtYXAgZmlsZTogJXMiLCBzdHJlcnJvcihlcnJubykpOworCX0KKwogCWZvciAoaSA9 IDA7IGkgPCBQUW50dXBsZXMocmVzKTsgaSsrKQogCXsKIAkJY2hhcgkgICAqZGJuYW1lID0gUFFn ZXR2YWx1ZShyZXMsIGksIDApOworCQljaGFyCSAgICpvaWQgPSBQUWdldHZhbHVlKHJlcywgaSwg MSk7CiAJCWNvbnN0IGNoYXIgKmNyZWF0ZV9vcHRzOwogCQlpbnQJCQlyZXQ7CiAKQEAgLTE1Mjks NiArMTU5MywxOCBAQCBkdW1wRGF0YWJhc2VzKFBHY29ubiAqY29ubikKIAkJCWNvbnRpbnVlOwog CQl9CiAKKwkJLyoKKwkJICogSWYgdGhpcyBpcyBub24tcGxhaW4gZHVtcCBmb3JtYXQsIHRoZW4g YXBwZW5kIGRib2lkIGFuZCBkYm5hbWUgdG8KKwkJICogdGhlIG1hcC5kYXQgZmlsZS4KKwkJICov CisJCWlmIChhcmNoRHVtcEZvcm1hdCAhPSBhcmNoTnVsbCkKKwkJeworCQkJc25wcmludGYoZGJm aWxlcGF0aCwgTUFYUEdQQVRILCAiXCIlc1wiL1wiJXNcIiIsIGRiX3N1YmRpciwgb2lkKTsKKwor CQkJLyogUHV0IG9uZSBsaW5lIGVudHJ5IGZvciBkYm9pZCBhbmQgZGJuYW1lIGluIG1hcCBmaWxl LiAqLworCQkJZnByaW50ZihtYXBfZmlsZSwgIiVzICVzXG4iLCBvaWQsIHBnX3N0cmR1cChkYm5h bWUpKTsKKwkJfQorCiAJCXBnX2xvZ19pbmZvKCJkdW1waW5nIGRhdGFiYXNlIFwiJXNcIiIsIGRi bmFtZSk7CiAKIAkJZnByaW50ZihPUEYsICItLVxuLS0gRGF0YWJhc2UgXCIlc1wiIGR1bXBcbi0t XG5cbiIsIGRibmFtZSk7CkBAIC0xNTQ3LDkgKzE2MjMsMTcgQEAgZHVtcERhdGFiYXNlcyhQR2Nv bm4gKmNvbm4pCiAJCQkJY3JlYXRlX29wdHMgPSAiLS1jbGVhbiAtLWNyZWF0ZSI7CiAJCQllbHNl CiAJCQl7Ci0JCQkJY3JlYXRlX29wdHMgPSAiIjsKIAkJCQkvKiBTaW5jZSBwZ19kdW1wIHdvbid0 IGVtaXQgYSBcY29ubmVjdCBjb21tYW5kLCB3ZSBtdXN0ICovCi0JCQkJZnByaW50ZihPUEYsICJc XGNvbm5lY3QgJXNcblxuIiwgZGJuYW1lKTsKKwkJCQlpZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJj aE51bGwpCisJCQkJeworCQkJCQljcmVhdGVfb3B0cyA9ICIiOworCQkJCQlmcHJpbnRmKE9QRiwg IlxcY29ubmVjdCAlc1xuXG4iLCBkYm5hbWUpOworCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJ CQkvKiBEdW1waW5nIGFsbCBkYXRhYmFzZXMgc28gYWRkIC0tY3JlYXRlIG9wdGlvbi4gKi8KKwkJ CQkJY3JlYXRlX29wdHMgPSAiLS1jcmVhdGUiOworCQkJCX0KIAkJCX0KIAkJfQogCQllbHNlCkBA IC0xNTU4LDE5ICsxNjQyLDMwIEBAIGR1bXBEYXRhYmFzZXMoUEdjb25uICpjb25uKQogCQlpZiAo ZmlsZW5hbWUpCiAJCQlmY2xvc2UoT1BGKTsKIAotCQlyZXQgPSBydW5QZ0R1bXAoZGJuYW1lLCBj cmVhdGVfb3B0cyk7CisJCXJldCA9IHJ1blBnRHVtcChkYm5hbWUsIGNyZWF0ZV9vcHRzLCBkYmZp bGVwYXRoLCBhcmNoRHVtcEZvcm1hdCk7CiAJCWlmIChyZXQgIT0gMCkKIAkJCXBnX2ZhdGFsKCJw Z19kdW1wIGZhaWxlZCBvbiBkYXRhYmFzZSBcIiVzXCIsIGV4aXRpbmciLCBkYm5hbWUpOwogCiAJ CWlmIChmaWxlbmFtZSkKIAkJewotCQkJT1BGID0gZm9wZW4oZmlsZW5hbWUsIFBHX0JJTkFSWV9B KTsKKwkJCWNoYXIJdG9jX3BhdGhbTUFYUEdQQVRIXTsKKworCQkJaWYgKGFyY2hEdW1wRm9ybWF0 ICE9IGFyY2hOdWxsKQorCQkJCXNucHJpbnRmKHRvY19wYXRoLCBNQVhQR1BBVEgsICIlcy9nbG9i YWwuZGF0IiwgZmlsZW5hbWUpOworCQkJZWxzZQorCQkJCXNucHJpbnRmKHRvY19wYXRoLCBNQVhQ R1BBVEgsICIlcyIsIGZpbGVuYW1lKTsKKworCQkJT1BGID0gZm9wZW4odG9jX3BhdGgsIFBHX0JJ TkFSWV9BKTsKIAkJCWlmICghT1BGKQogCQkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgcmUtb3BlbiB0 aGUgb3V0cHV0IGZpbGUgXCIlc1wiOiAlbSIsCi0JCQkJCQkgZmlsZW5hbWUpOworCQkJCQkJIHRv Y19wYXRoKTsKIAkJfQogCX0KIAorCS8qIENsb3NlIG1hcCBmaWxlICovCisJaWYgKGFyY2hEdW1w Rm9ybWF0ICE9IGFyY2hOdWxsKQorCQlmY2xvc2UobWFwX2ZpbGUpOworCiAJUFFjbGVhcihyZXMp OwogfQogCkBAIC0xNTgwLDcgKzE2NzUsOCBAQCBkdW1wRGF0YWJhc2VzKFBHY29ubiAqY29ubikK ICAqIFJ1biBwZ19kdW1wIG9uIGRibmFtZSwgd2l0aCBzcGVjaWZpZWQgb3B0aW9ucy4KICAqLwog c3RhdGljIGludAotcnVuUGdEdW1wKGNvbnN0IGNoYXIgKmRibmFtZSwgY29uc3QgY2hhciAqY3Jl YXRlX29wdHMpCitydW5QZ0R1bXAoY29uc3QgY2hhciAqZGJuYW1lLCBjb25zdCBjaGFyICpjcmVh dGVfb3B0cywgY2hhciAqZGJmaWxlLAorCQlBcmNoaXZlRm9ybWF0IGFyY2hEdW1wRm9ybWF0KQog ewogCVBRRXhwQnVmZmVyRGF0YSBjb25uc3RyYnVmOwogCVBRRXhwQnVmZmVyRGF0YSBjbWQ7CkBA IC0xNTg5LDE3ICsxNjg1LDM2IEBAIHJ1blBnRHVtcChjb25zdCBjaGFyICpkYm5hbWUsIGNvbnN0 IGNoYXIgKmNyZWF0ZV9vcHRzKQogCWluaXRQUUV4cEJ1ZmZlcigmY29ubnN0cmJ1Zik7CiAJaW5p dFBRRXhwQnVmZmVyKCZjbWQpOwogCi0JcHJpbnRmUFFFeHBCdWZmZXIoJmNtZCwgIlwiJXNcIiAl cyAlcyIsIHBnX2R1bXBfYmluLAotCQkJCQkgIHBnZHVtcG9wdHMtPmRhdGEsIGNyZWF0ZV9vcHRz KTsKLQogCS8qCi0JICogSWYgd2UgaGF2ZSBhIGZpbGVuYW1lLCB1c2UgdGhlIHVuZG9jdW1lbnRl ZCBwbGFpbi1hcHBlbmQgcGdfZHVtcAotCSAqIGZvcm1hdC4KKwkgKiBJZiB0aGlzIGlzIG5vbi1w bGFpbiBmb3JtYXQgZHVtcCwgdGhlbiBhcHBlbmQgZmlsZSBuYW1lIGFuZCBkdW1wCisJICogZm9y bWF0IHRvIHRoZSBwZ19kdW1wIGNvbW1hbmQgdG8gZ2V0IGFyY2hpdmUgZHVtcC4KIAkgKi8KLQlp ZiAoZmlsZW5hbWUpCi0JCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZjbWQsICIgLUZhICIpOworCWlm IChhcmNoRHVtcEZvcm1hdCAhPSBhcmNoTnVsbCkKKwl7CisJCXByaW50ZlBRRXhwQnVmZmVyKCZj bWQsICJcIiVzXCIgLWYgJXMgJXMiLCBwZ19kdW1wX2JpbiwKKwkJCQkJCSAgZGJmaWxlLCBjcmVh dGVfb3B0cyk7CisKKwkJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hEaXJlY3RvcnkpCisJCQlh cHBlbmRQUUV4cEJ1ZmZlclN0cigmY21kLCAiICAtLWZvcm1hdD1kaXJlY3RvcnkgIik7CisJCWVs c2UgaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hDdXN0b20pCisJCQlhcHBlbmRQUUV4cEJ1ZmZl clN0cigmY21kLCAiICAtLWZvcm1hdD1jdXN0b20gIik7CisJCWVsc2UgaWYgKGFyY2hEdW1wRm9y bWF0ID09IGFyY2hUYXIpCisJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmY21kLCAiICAtLWZvcm1h dD10YXIgIik7CisJfQogCWVsc2UKLQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmNtZCwgIiAtRnAg Iik7CisJeworCQlwcmludGZQUUV4cEJ1ZmZlcigmY21kLCAiXCIlc1wiICVzICVzIiwgcGdfZHVt cF9iaW4sCisJCQkJCQlwZ2R1bXBvcHRzLT5kYXRhLCBjcmVhdGVfb3B0cyk7CisKKwkJLyoKKwkJ KiBJZiB3ZSBoYXZlIGEgZmlsZW5hbWUsIHVzZSB0aGUgdW5kb2N1bWVudGVkIHBsYWluLWFwcGVu ZCBwZ19kdW1wCisJCSogZm9ybWF0LgorCQkqLworCQlpZiAoZmlsZW5hbWUpCisJCQlhcHBlbmRQ UUV4cEJ1ZmZlclN0cigmY21kLCAiIC1GYSAiKTsKKwkJZWxzZQorCQkJYXBwZW5kUFFFeHBCdWZm ZXJTdHIoJmNtZCwgIiAtRnAgIik7CisJfQogCiAJLyoKIAkgKiBBcHBlbmQgdGhlIGRhdGFiYXNl IG5hbWUgdG8gdGhlIGFscmVhZHktY29uc3RydWN0ZWQgc3RlbSBvZiBjb25uZWN0aW9uCkBAIC0x NjQ5LDI1NiArMTc2NCw2IEBAIGJ1aWxkU2hTZWNMYWJlbHMoUEdjb25uICpjb25uLCBjb25zdCBj aGFyICpjYXRhbG9nX25hbWUsIE9pZCBvYmplY3RJZCwKIAlkZXN0cm95UFFFeHBCdWZmZXIoc3Fs KTsKIH0KIAotLyoKLSAqIE1ha2UgYSBkYXRhYmFzZSBjb25uZWN0aW9uIHdpdGggdGhlIGdpdmVu IHBhcmFtZXRlcnMuICBBbgotICogaW50ZXJhY3RpdmUgcGFzc3dvcmQgcHJvbXB0IGlzIGF1dG9t YXRpY2FsbHkgaXNzdWVkIGlmIHJlcXVpcmVkLgotICoKLSAqIElmIGZhaWxfb25fZXJyb3IgaXMg ZmFsc2UsIHdlIHJldHVybiBOVUxMIHdpdGhvdXQgcHJpbnRpbmcgYW55IG1lc3NhZ2UKLSAqIG9u IGZhaWx1cmUsIGJ1dCBwcmVzZXJ2ZSBhbnkgcHJvbXB0ZWQgcGFzc3dvcmQgZm9yIHRoZSBuZXh0 IHRyeS4KLSAqCi0gKiBPbiBzdWNjZXNzLCB0aGUgZ2xvYmFsIHZhcmlhYmxlICdjb25uc3RyJyBp cyBzZXQgdG8gYSBjb25uZWN0aW9uIHN0cmluZwotICogY29udGFpbmluZyB0aGUgb3B0aW9ucyB1 c2VkLgotICovCi1zdGF0aWMgUEdjb25uICoKLWNvbm5lY3REYXRhYmFzZShjb25zdCBjaGFyICpk Ym5hbWUsIGNvbnN0IGNoYXIgKmNvbm5lY3Rpb25fc3RyaW5nLAotCQkJCWNvbnN0IGNoYXIgKnBn aG9zdCwgY29uc3QgY2hhciAqcGdwb3J0LCBjb25zdCBjaGFyICpwZ3VzZXIsCi0JCQkJdHJpdmFs dWUgcHJvbXB0X3Bhc3N3b3JkLCBib29sIGZhaWxfb25fZXJyb3IpCi17Ci0JUEdjb25uCSAgICpj b25uOwotCWJvb2wJCW5ld19wYXNzOwotCWNvbnN0IGNoYXIgKnJlbW90ZXZlcnNpb25fc3RyOwot CWludAkJCW15X3ZlcnNpb247Ci0JY29uc3QgY2hhciAqKmtleXdvcmRzID0gTlVMTDsKLQljb25z dCBjaGFyICoqdmFsdWVzID0gTlVMTDsKLQlQUWNvbm5pbmZvT3B0aW9uICpjb25uX29wdHMgPSBO VUxMOwotCXN0YXRpYyBjaGFyICpwYXNzd29yZCA9IE5VTEw7Ci0KLQlpZiAocHJvbXB0X3Bhc3N3 b3JkID09IFRSSV9ZRVMgJiYgIXBhc3N3b3JkKQotCQlwYXNzd29yZCA9IHNpbXBsZV9wcm9tcHQo IlBhc3N3b3JkOiAiLCBmYWxzZSk7Ci0KLQkvKgotCSAqIFN0YXJ0IHRoZSBjb25uZWN0aW9uLiAg TG9vcCB1bnRpbCB3ZSBoYXZlIGEgcGFzc3dvcmQgaWYgcmVxdWVzdGVkIGJ5Ci0JICogYmFja2Vu ZC4KLQkgKi8KLQlkbwotCXsKLQkJaW50CQkJYXJnY291bnQgPSA2OwotCQlQUWNvbm5pbmZvT3B0 aW9uICpjb25uX29wdDsKLQkJY2hhcgkgICAqZXJyX21zZyA9IE5VTEw7Ci0JCWludAkJCWkgPSAw OwotCi0JCWZyZWUoa2V5d29yZHMpOwotCQlmcmVlKHZhbHVlcyk7Ci0JCVBRY29ubmluZm9GcmVl KGNvbm5fb3B0cyk7Ci0KLQkJLyoKLQkJICogTWVyZ2UgdGhlIGNvbm5lY3Rpb24gaW5mbyBpbnB1 dHMgZ2l2ZW4gaW4gZm9ybSBvZiBjb25uZWN0aW9uIHN0cmluZwotCQkgKiBhbmQgb3RoZXIgb3B0 aW9ucy4gIEV4cGxpY2l0bHkgZGlzY2FyZCBhbnkgZGJuYW1lIHZhbHVlIGluIHRoZQotCQkgKiBj b25uZWN0aW9uIHN0cmluZzsgb3RoZXJ3aXNlLCBQUWNvbm5lY3RkYlBhcmFtcygpIHdvdWxkIGlu dGVycHJldAotCQkgKiB0aGF0IHZhbHVlIGFzIGJlaW5nIGl0c2VsZiBhIGNvbm5lY3Rpb24gc3Ry aW5nLgotCQkgKi8KLQkJaWYgKGNvbm5lY3Rpb25fc3RyaW5nKQotCQl7Ci0JCQljb25uX29wdHMg PSBQUWNvbm5pbmZvUGFyc2UoY29ubmVjdGlvbl9zdHJpbmcsICZlcnJfbXNnKTsKLQkJCWlmIChj b25uX29wdHMgPT0gTlVMTCkKLQkJCQlwZ19mYXRhbCgiJXMiLCBlcnJfbXNnKTsKLQotCQkJZm9y IChjb25uX29wdCA9IGNvbm5fb3B0czsgY29ubl9vcHQtPmtleXdvcmQgIT0gTlVMTDsgY29ubl9v cHQrKykKLQkJCXsKLQkJCQlpZiAoY29ubl9vcHQtPnZhbCAhPSBOVUxMICYmIGNvbm5fb3B0LT52 YWxbMF0gIT0gJ1wwJyAmJgotCQkJCQlzdHJjbXAoY29ubl9vcHQtPmtleXdvcmQsICJkYm5hbWUi KSAhPSAwKQotCQkJCQlhcmdjb3VudCsrOwotCQkJfQotCi0JCQlrZXl3b3JkcyA9IHBnX21hbGxv YzAoKGFyZ2NvdW50ICsgMSkgKiBzaXplb2YoKmtleXdvcmRzKSk7Ci0JCQl2YWx1ZXMgPSBwZ19t YWxsb2MwKChhcmdjb3VudCArIDEpICogc2l6ZW9mKCp2YWx1ZXMpKTsKLQotCQkJZm9yIChjb25u X29wdCA9IGNvbm5fb3B0czsgY29ubl9vcHQtPmtleXdvcmQgIT0gTlVMTDsgY29ubl9vcHQrKykK LQkJCXsKLQkJCQlpZiAoY29ubl9vcHQtPnZhbCAhPSBOVUxMICYmIGNvbm5fb3B0LT52YWxbMF0g IT0gJ1wwJyAmJgotCQkJCQlzdHJjbXAoY29ubl9vcHQtPmtleXdvcmQsICJkYm5hbWUiKSAhPSAw KQotCQkJCXsKLQkJCQkJa2V5d29yZHNbaV0gPSBjb25uX29wdC0+a2V5d29yZDsKLQkJCQkJdmFs dWVzW2ldID0gY29ubl9vcHQtPnZhbDsKLQkJCQkJaSsrOwotCQkJCX0KLQkJCX0KLQkJfQotCQll bHNlCi0JCXsKLQkJCWtleXdvcmRzID0gcGdfbWFsbG9jMCgoYXJnY291bnQgKyAxKSAqIHNpemVv Zigqa2V5d29yZHMpKTsKLQkJCXZhbHVlcyA9IHBnX21hbGxvYzAoKGFyZ2NvdW50ICsgMSkgKiBz aXplb2YoKnZhbHVlcykpOwotCQl9Ci0KLQkJaWYgKHBnaG9zdCkKLQkJewotCQkJa2V5d29yZHNb aV0gPSAiaG9zdCI7Ci0JCQl2YWx1ZXNbaV0gPSBwZ2hvc3Q7Ci0JCQlpKys7Ci0JCX0KLQkJaWYg KHBncG9ydCkKLQkJewotCQkJa2V5d29yZHNbaV0gPSAicG9ydCI7Ci0JCQl2YWx1ZXNbaV0gPSBw Z3BvcnQ7Ci0JCQlpKys7Ci0JCX0KLQkJaWYgKHBndXNlcikKLQkJewotCQkJa2V5d29yZHNbaV0g PSAidXNlciI7Ci0JCQl2YWx1ZXNbaV0gPSBwZ3VzZXI7Ci0JCQlpKys7Ci0JCX0KLQkJaWYgKHBh c3N3b3JkKQotCQl7Ci0JCQlrZXl3b3Jkc1tpXSA9ICJwYXNzd29yZCI7Ci0JCQl2YWx1ZXNbaV0g PSBwYXNzd29yZDsKLQkJCWkrKzsKLQkJfQotCQlpZiAoZGJuYW1lKQotCQl7Ci0JCQlrZXl3b3Jk c1tpXSA9ICJkYm5hbWUiOwotCQkJdmFsdWVzW2ldID0gZGJuYW1lOwotCQkJaSsrOwotCQl9Ci0J CWtleXdvcmRzW2ldID0gImZhbGxiYWNrX2FwcGxpY2F0aW9uX25hbWUiOwotCQl2YWx1ZXNbaV0g PSBwcm9nbmFtZTsKLQkJaSsrOwotCi0JCW5ld19wYXNzID0gZmFsc2U7Ci0JCWNvbm4gPSBQUWNv bm5lY3RkYlBhcmFtcyhrZXl3b3JkcywgdmFsdWVzLCB0cnVlKTsKLQotCQlpZiAoIWNvbm4pCi0J CQlwZ19mYXRhbCgiY291bGQgbm90IGNvbm5lY3QgdG8gZGF0YWJhc2UgXCIlc1wiIiwgZGJuYW1l KTsKLQotCQlpZiAoUFFzdGF0dXMoY29ubikgPT0gQ09OTkVDVElPTl9CQUQgJiYKLQkJCVBRY29u bmVjdGlvbk5lZWRzUGFzc3dvcmQoY29ubikgJiYKLQkJCSFwYXNzd29yZCAmJgotCQkJcHJvbXB0 X3Bhc3N3b3JkICE9IFRSSV9OTykKLQkJewotCQkJUFFmaW5pc2goY29ubik7Ci0JCQlwYXNzd29y ZCA9IHNpbXBsZV9wcm9tcHQoIlBhc3N3b3JkOiAiLCBmYWxzZSk7Ci0JCQluZXdfcGFzcyA9IHRy dWU7Ci0JCX0KLQl9IHdoaWxlIChuZXdfcGFzcyk7Ci0KLQkvKiBjaGVjayB0byBzZWUgdGhhdCB0 aGUgYmFja2VuZCBjb25uZWN0aW9uIHdhcyBzdWNjZXNzZnVsbHkgbWFkZSAqLwotCWlmIChQUXN0 YXR1cyhjb25uKSA9PSBDT05ORUNUSU9OX0JBRCkKLQl7Ci0JCWlmIChmYWlsX29uX2Vycm9yKQot CQkJcGdfZmF0YWwoIiVzIiwgUFFlcnJvck1lc3NhZ2UoY29ubikpOwotCQllbHNlCi0JCXsKLQkJ CVBRZmluaXNoKGNvbm4pOwotCi0JCQlmcmVlKGtleXdvcmRzKTsKLQkJCWZyZWUodmFsdWVzKTsK LQkJCVBRY29ubmluZm9GcmVlKGNvbm5fb3B0cyk7Ci0KLQkJCXJldHVybiBOVUxMOwotCQl9Ci0J fQotCi0JLyoKLQkgKiBPaywgY29ubmVjdGVkIHN1Y2Nlc3NmdWxseS4gUmVtZW1iZXIgdGhlIG9w dGlvbnMgdXNlZCwgaW4gdGhlIGZvcm0gb2YgYQotCSAqIGNvbm5lY3Rpb24gc3RyaW5nLgotCSAq LwotCWNvbm5zdHIgPSBjb25zdHJ1Y3RDb25uU3RyKGtleXdvcmRzLCB2YWx1ZXMpOwotCi0JZnJl ZShrZXl3b3Jkcyk7Ci0JZnJlZSh2YWx1ZXMpOwotCVBRY29ubmluZm9GcmVlKGNvbm5fb3B0cyk7 Ci0KLQkvKiBDaGVjayB2ZXJzaW9uICovCi0JcmVtb3RldmVyc2lvbl9zdHIgPSBQUXBhcmFtZXRl clN0YXR1cyhjb25uLCAic2VydmVyX3ZlcnNpb24iKTsKLQlpZiAoIXJlbW90ZXZlcnNpb25fc3Ry KQotCQlwZ19mYXRhbCgiY291bGQgbm90IGdldCBzZXJ2ZXIgdmVyc2lvbiIpOwotCXNlcnZlcl92 ZXJzaW9uID0gUFFzZXJ2ZXJWZXJzaW9uKGNvbm4pOwotCWlmIChzZXJ2ZXJfdmVyc2lvbiA9PSAw KQotCQlwZ19mYXRhbCgiY291bGQgbm90IHBhcnNlIHNlcnZlciB2ZXJzaW9uIFwiJXNcIiIsCi0J CQkJIHJlbW90ZXZlcnNpb25fc3RyKTsKLQotCW15X3ZlcnNpb24gPSBQR19WRVJTSU9OX05VTTsK LQotCS8qCi0JICogV2UgYWxsb3cgdGhlIHNlcnZlciB0byBiZSBiYWNrIHRvIDkuMiwgYW5kIHVw IHRvIGFueSBtaW5vciByZWxlYXNlIG9mCi0JICogb3VyIG93biBtYWpvciB2ZXJzaW9uLiAgKFNl ZSBhbHNvIHZlcnNpb24gY2hlY2sgaW4gcGdfZHVtcC5jLikKLQkgKi8KLQlpZiAobXlfdmVyc2lv biAhPSBzZXJ2ZXJfdmVyc2lvbgotCQkmJiAoc2VydmVyX3ZlcnNpb24gPCA5MDIwMCB8fAotCQkJ KHNlcnZlcl92ZXJzaW9uIC8gMTAwKSA+IChteV92ZXJzaW9uIC8gMTAwKSkpCi0JewotCQlwZ19s b2dfZXJyb3IoImFib3J0aW5nIGJlY2F1c2Ugb2Ygc2VydmVyIHZlcnNpb24gbWlzbWF0Y2giKTsK LQkJcGdfbG9nX2Vycm9yX2RldGFpbCgic2VydmVyIHZlcnNpb246ICVzOyAlcyB2ZXJzaW9uOiAl cyIsCi0JCQkJCQkJcmVtb3RldmVyc2lvbl9zdHIsIHByb2duYW1lLCBQR19WRVJTSU9OKTsKLQkJ ZXhpdF9uaWNlbHkoMSk7Ci0JfQotCi0JUFFjbGVhcihleGVjdXRlUXVlcnkoY29ubiwgQUxXQVlT X1NFQ1VSRV9TRUFSQ0hfUEFUSF9TUUwpKTsKLQotCXJldHVybiBjb25uOwotfQotCi0vKiAtLS0t LS0tLS0tCi0gKiBDb25zdHJ1Y3QgYSBjb25uZWN0aW9uIHN0cmluZyBmcm9tIHRoZSBnaXZlbiBr ZXl3b3JkL3ZhbHVlIHBhaXJzLiBJdCBpcwotICogdXNlZCB0byBwYXNzIHRoZSBjb25uZWN0aW9u IG9wdGlvbnMgdG8gdGhlIHBnX2R1bXAgc3VicHJvY2Vzcy4KLSAqCi0gKiBUaGUgZm9sbG93aW5n IHBhcmFtZXRlcnMgYXJlIGV4Y2x1ZGVkOgotICoJZGJuYW1lCQktIHZhcmllcyBpbiBlYWNoIHBn X2R1bXAgaW52b2NhdGlvbgotICoJcGFzc3dvcmQJLSBpdCdzIG5vdCBzZWN1cmUgdG8gcGFzcyBh IHBhc3N3b3JkIG9uIHRoZSBjb21tYW5kIGxpbmUKLSAqCWZhbGxiYWNrX2FwcGxpY2F0aW9uX25h bWUgLSB3ZSdsbCBsZXQgcGdfZHVtcCBzZXQgaXQKLSAqIC0tLS0tLS0tLS0KLSAqLwotc3RhdGlj IGNoYXIgKgotY29uc3RydWN0Q29ublN0cihjb25zdCBjaGFyICoqa2V5d29yZHMsIGNvbnN0IGNo YXIgKip2YWx1ZXMpCi17Ci0JUFFFeHBCdWZmZXIgYnVmID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsK LQljaGFyCSAgICpjb25uc3RyOwotCWludAkJCWk7Ci0JYm9vbAkJZmlyc3RrZXl3b3JkID0gdHJ1 ZTsKLQotCS8qIENvbnN0cnVjdCBhIG5ldyBjb25uZWN0aW9uIHN0cmluZyBpbiBrZXk9J3ZhbHVl JyBmb3JtYXQuICovCi0JZm9yIChpID0gMDsga2V5d29yZHNbaV0gIT0gTlVMTDsgaSsrKQotCXsK LQkJaWYgKHN0cmNtcChrZXl3b3Jkc1tpXSwgImRibmFtZSIpID09IDAgfHwKLQkJCXN0cmNtcChr ZXl3b3Jkc1tpXSwgInBhc3N3b3JkIikgPT0gMCB8fAotCQkJc3RyY21wKGtleXdvcmRzW2ldLCAi ZmFsbGJhY2tfYXBwbGljYXRpb25fbmFtZSIpID09IDApCi0JCQljb250aW51ZTsKLQotCQlpZiAo IWZpcnN0a2V5d29yZCkKLQkJCWFwcGVuZFBRRXhwQnVmZmVyQ2hhcihidWYsICcgJyk7Ci0JCWZp cnN0a2V5d29yZCA9IGZhbHNlOwotCQlhcHBlbmRQUUV4cEJ1ZmZlcihidWYsICIlcz0iLCBrZXl3 b3Jkc1tpXSk7Ci0JCWFwcGVuZENvbm5TdHJWYWwoYnVmLCB2YWx1ZXNbaV0pOwotCX0KLQotCWNv bm5zdHIgPSBwZ19zdHJkdXAoYnVmLT5kYXRhKTsKLQlkZXN0cm95UFFFeHBCdWZmZXIoYnVmKTsK LQlyZXR1cm4gY29ubnN0cjsKLX0KLQotLyoKLSAqIFJ1biBhIHF1ZXJ5LCByZXR1cm4gdGhlIHJl c3VsdHMsIGV4aXQgcHJvZ3JhbSBvbiBmYWlsdXJlLgotICovCi1zdGF0aWMgUEdyZXN1bHQgKgot ZXhlY3V0ZVF1ZXJ5KFBHY29ubiAqY29ubiwgY29uc3QgY2hhciAqcXVlcnkpCi17Ci0JUEdyZXN1 bHQgICAqcmVzOwotCi0JcGdfbG9nX2luZm8oImV4ZWN1dGluZyAlcyIsIHF1ZXJ5KTsKLQotCXJl cyA9IFBRZXhlYyhjb25uLCBxdWVyeSk7Ci0JaWYgKCFyZXMgfHwKLQkJUFFyZXN1bHRTdGF0dXMo cmVzKSAhPSBQR1JFU19UVVBMRVNfT0spCi0JewotCQlwZ19sb2dfZXJyb3IoInF1ZXJ5IGZhaWxl ZDogJXMiLCBQUWVycm9yTWVzc2FnZShjb25uKSk7Ci0JCXBnX2xvZ19lcnJvcl9kZXRhaWwoIlF1 ZXJ5IHdhczogJXMiLCBxdWVyeSk7Ci0JCVBRZmluaXNoKGNvbm4pOwotCQlleGl0X25pY2VseSgx KTsKLQl9Ci0KLQlyZXR1cm4gcmVzOwotfQotCiAvKgogICogQXMgYWJvdmUgZm9yIGEgU1FMIGNv bW1hbmQgKHdoaWNoIHJldHVybnMgbm90aGluZykuCiAgKi8KQEAgLTE5OTQsMyArMTg1OSw1OCBA QCByZWFkX2R1bXBhbGxfZmlsdGVycyhjb25zdCBjaGFyICpmaWxlbmFtZSwgU2ltcGxlU3RyaW5n TGlzdCAqcGF0dGVybikKIAogCWZpbHRlcl9mcmVlKCZmc3RhdGUpOwogfQorCisvKgorICogY3Jl YXRlX29yX29wZW5fZGlyCisgKgorICogVGhpcyB3aWxsIGNyZWF0ZSBhIG5ldyBkaXJlY3Rvcnkg d2l0aCBnaXZlbiBuYW1lLiAgSWYgdGhlcmUgaXMgYWxyZWFkeSBzYW1lCisgKiBlbXB0eSBkaXJl Y3RvcnkgZXhpc3QsIHRoZW4gdXNlIGl0LgorICovCitzdGF0aWMgdm9pZAorY3JlYXRlX29yX29w ZW5fZGlyKGNvbnN0IGNoYXIgKmRpcm5hbWUpCit7CisJc3RydWN0IHN0YXQJCXN0OworCWJvb2wJ CQlpc19lbXB0eSA9IGZhbHNlOworCisJLyogd2UgYWNjZXB0IGFuIGVtcHR5IGV4aXN0aW5nIGRp cmVjdG9yeSAqLworCWlmIChzdGF0KGRpcm5hbWUsICZzdCkgPT0gMCAmJiBTX0lTRElSKHN0LnN0 X21vZGUpKQorCXsKKwkJRElSCQkqZGlyID0gb3BlbmRpcihkaXJuYW1lKTsKKworCQlpZiAoZGly KQorCQl7CisJCQlzdHJ1Y3QgZGlyZW50CSpkOworCisJCQlpc19lbXB0eSA9IHRydWU7CisKKwkJ CXdoaWxlIChlcnJubyA9IDAsIChkID0gcmVhZGRpcihkaXIpKSkKKwkJCXsKKwkJCQlpZiAoc3Ry Y21wKGQtPmRfbmFtZSwgIi4iKSAhPSAwICYmIHN0cmNtcChkLT5kX25hbWUsICIuLiIpICE9IDAp CisJCQkJeworCQkJCQlpc19lbXB0eSA9IGZhbHNlOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9 CisKKwkJCWlmIChlcnJubykKKwkJCQlwZ19mYXRhbCgiY291bGQgbm90IHJlYWQgZGlyZWN0b3J5 IFwiJXNcIjogJW0iLAorCQkJCQkJZGlybmFtZSk7CisKKwkJCWlmIChjbG9zZWRpcihkaXIpKQor CQkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgY2xvc2UgZGlyZWN0b3J5IFwiJXNcIjogJW0iLAorCQkJ CQkJZGlybmFtZSk7CisJCX0KKworCQlpZighaXNfZW1wdHkpCisJCXsKKwkJCXBnX2xvZ19lcnJv cigiZGlyZWN0b3J5IFwiJXNcIiBleGlzdHMgYnV0IGlzIG5vdCBlbXB0eSIsIGRpcm5hbWUpOwor CQkJcGdfbG9nX2Vycm9yX2hpbnQoIklmIHlvdSB3YW50IHRvIGR1bXAgZGF0YSBvbiB0aGlzIGRp cmVjdG9yeSwgZWl0aGVyIHJlbW92ZSBvciBlbXB0eSAiCisJCQkJCQkJICAidGhpcyBkaXJlY3Rv cnkgXCIlc1wiIG9yIHJ1biAlcyAiCisJCQkJCQkJICAid2l0aCBhbiBhcmd1bWVudCBvdGhlciB0 aGFuIFwiJXNcIi4iLAorCQkJCQkJCSAgZGlybmFtZSwgcHJvZ25hbWUsIGRpcm5hbWUpOworCQkJ ZXhpdF9uaWNlbHkoMSk7CisJCX0KKwl9CisJZWxzZSBpZiAobWtkaXIoZGlybmFtZSwgMDcwMCkg PCAwKQorCQlwZ19mYXRhbCgiY291bGQgbm90IGNyZWF0ZSBkaXJlY3RvcnkgXCIlc1wiOiAlbSIs IGRpcm5hbWUpOworfQpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX3Jlc3RvcmUuYyBi L3NyYy9iaW4vcGdfZHVtcC9wZ19yZXN0b3JlLmMKaW5kZXggODhhZTM5ZDkzOGEuLjc5ZjYxMzk1 YWUzIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfcmVzdG9yZS5jCisrKyBiL3NyYy9i aW4vcGdfZHVtcC9wZ19yZXN0b3JlLmMKQEAgLTIsNyArMiw3IEBACiAgKgogICogcGdfcmVzdG9y ZS5jCiAgKglwZ19yZXN0b3JlIGlzIGFuIHV0aWxpdHkgZXh0cmFjdGluZyBwb3N0Z3JlcyBkYXRh YmFzZSBkZWZpbml0aW9ucwotICoJZnJvbSBhIGJhY2t1cCBhcmNoaXZlIGNyZWF0ZWQgYnkgcGdf ZHVtcCB1c2luZyB0aGUgYXJjaGl2ZXIKKyAqCWZyb20gYSBiYWNrdXAgYXJjaGl2ZSBjcmVhdGVk IGJ5IHBnX2R1bXAvcGdfZHVtcGFsbCB1c2luZyB0aGUgYXJjaGl2ZXIKICAqCWludGVyZmFjZS4K ICAqCiAgKglwZ19yZXN0b3JlIHdpbGwgcmVhZCB0aGUgYmFja3VwIGFyY2hpdmUgYW5kCkBAIC00 MSwyNyArNDEsNjcgQEAKICNpbmNsdWRlICJwb3N0Z3Jlc19mZS5oIgogCiAjaW5jbHVkZSA8Y3R5 cGUuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgogI2lmZGVmIEhBVkVfVEVSTUlPU19ICiAjaW5j bHVkZSA8dGVybWlvcy5oPgogI2VuZGlmCiAKKyNpbmNsdWRlICJjb21tb24vY29ubmVjdC5oIgor I2luY2x1ZGUgImNvbXByZXNzX2lvLmgiCisjaW5jbHVkZSAiY29tbW9uL3N0cmluZy5oIgorI2lu Y2x1ZGUgImNvbW1vbl9kdW1wYWxsX3Jlc3RvcmUuaCIKICNpbmNsdWRlICJmZV91dGlscy9vcHRp b25fdXRpbHMuaCIKKyNpbmNsdWRlICJmZV91dGlscy9zdHJpbmdfdXRpbHMuaCIKICNpbmNsdWRl ICJmaWx0ZXIuaCIKICNpbmNsdWRlICJnZXRvcHRfbG9uZy5oIgogI2luY2x1ZGUgInBhcmFsbGVs LmgiCisjaW5jbHVkZSAicGdfYmFja3VwX2FyY2hpdmVyLmgiCiAjaW5jbHVkZSAicGdfYmFja3Vw X3V0aWxzLmgiCiAKK3R5cGVkZWYgc3RydWN0IFNpbXBsZURhdGFiYXNlT2lkTGlzdENlbGwKK3sK KwlzdHJ1Y3QgU2ltcGxlRGF0YWJhc2VPaWRMaXN0Q2VsbAkqbmV4dDsKKwlPaWQJCQkJCQkJCQlk Yl9vaWQ7CisJY29uc3QgY2hhcgkJCQkJCQkqZGJfbmFtZTsKK30gU2ltcGxlRGF0YWJhc2VPaWRM aXN0Q2VsbDsKKwordHlwZWRlZiBzdHJ1Y3QgU2ltcGxlRGF0YWJhc2VPaWRMaXN0Cit7CisJU2lt cGxlRGF0YWJhc2VPaWRMaXN0Q2VsbCAqaGVhZDsKKwlTaW1wbGVEYXRhYmFzZU9pZExpc3RDZWxs ICp0YWlsOworfSBTaW1wbGVEYXRhYmFzZU9pZExpc3Q7CisKK3N0YXRpYyB2b2lkCitzaW1wbGVf ZGJfb2lkX2xpc3RfYXBwZW5kKFNpbXBsZURhdGFiYXNlT2lkTGlzdCAqbGlzdCwgT2lkIGRiX29p ZCwgY29uc3QgY2hhciAqZGJuYW1lKTsKKwogc3RhdGljIHZvaWQgdXNhZ2UoY29uc3QgY2hhciAq cHJvZ25hbWUpOwogc3RhdGljIHZvaWQgcmVhZF9yZXN0b3JlX2ZpbHRlcnMoY29uc3QgY2hhciAq ZmlsZW5hbWUsIFJlc3RvcmVPcHRpb25zICpvcHRzKTsKK3N0YXRpYyBib29sIElzRmlsZUV4aXN0 c0luRGlyZWN0b3J5KGNvbnN0IGNoYXIgKmRpciwgY29uc3QgY2hhciAqZmlsZW5hbWUpOworc3Rh dGljIGJvb2wgcmVzdG9yZU9uZURhdGFiYXNlKGNvbnN0IGNoYXIgKmlucHV0RmlsZVNwZWMsCisJ CVJlc3RvcmVPcHRpb25zICpvcHRzLCBpbnQgbnVtV29ya2VycywgYm9vbCBhcHBlbmRfZGF0YSk7 CitzdGF0aWMgaW50IFJlYWRPbmVTdGF0ZW1lbnQoU3RyaW5nSW5mbyBpbkJ1ZiwgRklMRSAqcGZp bGUpOworc3RhdGljIGludCByZXN0b3JlQWxsRGF0YWJhc2VzKFBHY29ubiAqY29ubiwgY29uc3Qg Y2hhciAqZHVtcGRpcnBhdGgsCisJU2ltcGxlU3RyaW5nTGlzdCBkYl9leGNsdWRlX3BhdHRlcm5z LCBSZXN0b3JlT3B0aW9ucyAqb3B0cywgaW50IG51bVdvcmtlcnMpOworc3RhdGljIHZvaWQgZXhl Y3V0ZV9nbG9iYWxfc3FsX2NvbW1hbmRzKFBHY29ubiAqY29ubiwgY29uc3QgY2hhciAqZHVtcGRp cnBhdGgsCisJCWNvbnN0IGNoYXIgKm91dGZpbGUpOworc3RhdGljIGludCBmaWx0ZXJfZGJuYW1l c19mb3JfcmVzdG9yZShQR2Nvbm4gKmNvbm4sCisJCVNpbXBsZURhdGFiYXNlT2lkTGlzdCAqZGJu YW1lX29pZF9saXN0LCBTaW1wbGVTdHJpbmdMaXN0IGRiX2V4Y2x1ZGVfcGF0dGVybnMpOworc3Rh dGljIGludCBnZXRfZGJuYW1lX29pZF9saXN0X2Zyb21fbWZpbGUoY29uc3QgY2hhciAqZHVtcGRp cnBhdGgsCisJCVNpbXBsZURhdGFiYXNlT2lkTGlzdCAqZGJuYW1lX29pZF9saXN0KTsKK3N0YXRp YyB2b2lkIHNpbXBsZV9kYl9vaWRfbGlzdF9hcHBlbmQoU2ltcGxlRGF0YWJhc2VPaWRMaXN0ICps aXN0LCBPaWQgZGJfb2lkLAorCQljb25zdCBjaGFyICpkYm5hbWUpOworc3RhdGljIGJvb2wgaXNf ZnVsbF9wYXR0ZXJuKFBHY29ubiAqY29ubiwgY29uc3QgY2hhciAqc3RyLCBjb25zdCBjaGFyICpw dHJuKTsKK3N0YXRpYyB2b2lkIHNpbXBsZV9zdHJpbmdfZnVsbF9saXN0X2RlbGV0ZShTaW1wbGVT dHJpbmdMaXN0ICpsaXN0KTsKK3N0YXRpYyB2b2lkIHNpbXBsZV9kYl9vaWRfZnVsbF9saXN0X2Rl bGV0ZShTaW1wbGVEYXRhYmFzZU9pZExpc3QgKmxpc3QpOworc3RhdGljIHZvaWQgc2ltcGxlX2Ri X29pZF9saXN0X2RlbGV0ZShTaW1wbGVEYXRhYmFzZU9pZExpc3QgKmxpc3QsCisJCVNpbXBsZURh dGFiYXNlT2lkTGlzdENlbGwgKmNlbGwsIFNpbXBsZURhdGFiYXNlT2lkTGlzdENlbGwgKnByZXYp OwogCiBpbnQKIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogewogCVJlc3RvcmVPcHRpb25z ICpvcHRzOwogCWludAkJCWM7Ci0JaW50CQkJZXhpdF9jb2RlOwogCWludAkJCW51bVdvcmtlcnMg PSAxOwotCUFyY2hpdmUgICAgKkFIOwogCWNoYXIJICAgKmlucHV0RmlsZVNwZWM7CiAJc3RhdGlj IGludAlkaXNhYmxlX3RyaWdnZXJzID0gMDsKIAlzdGF0aWMgaW50CWVuYWJsZV9yb3dfc2VjdXJp dHkgPSAwOwpAQCAtNzcsMTEgKzExNywxNCBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikK IAlzdGF0aWMgaW50CXN0cmljdF9uYW1lcyA9IDA7CiAJYm9vbAkJZGF0YV9vbmx5ID0gZmFsc2U7 CiAJYm9vbAkJc2NoZW1hX29ubHkgPSBmYWxzZTsKKwlTaW1wbGVTdHJpbmdMaXN0ICAgIGRiX2V4 Y2x1ZGVfcGF0dGVybnMgPSB7TlVMTCwgTlVMTH07CisJYm9vbAkJCQlnbG9iYWxzX29ubHkgPSBm YWxzZTsKIAogCXN0cnVjdCBvcHRpb24gY21kb3B0c1tdID0gewogCQl7ImNsZWFuIiwgMCwgTlVM TCwgJ2MnfSwKIAkJeyJjcmVhdGUiLCAwLCBOVUxMLCAnQyd9LAogCQl7ImRhdGEtb25seSIsIDAs IE5VTEwsICdhJ30sCisJCXsiZ2xvYmFscy1vbmx5IiwgMCwgTlVMTCwgJ2cnfSwKIAkJeyJkYm5h bWUiLCAxLCBOVUxMLCAnZCd9LAogCQl7ImV4aXQtb24tZXJyb3IiLCAwLCBOVUxMLCAnZSd9LAog CQl7ImV4Y2x1ZGUtc2NoZW1hIiwgMSwgTlVMTCwgJ04nfSwKQEAgLTEyOCw2ICsxNzEsNyBAQCBt YWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJeyJuby1zZWN1cml0eS1sYWJlbHMiLCBub19h cmd1bWVudCwgJm5vX3NlY3VyaXR5X2xhYmVscywgMX0sCiAJCXsibm8tc3Vic2NyaXB0aW9ucyIs IG5vX2FyZ3VtZW50LCAmbm9fc3Vic2NyaXB0aW9ucywgMX0sCiAJCXsiZmlsdGVyIiwgcmVxdWly ZWRfYXJndW1lbnQsIE5VTEwsIDR9LAorCQl7ImV4Y2x1ZGUtZGF0YWJhc2UiLCByZXF1aXJlZF9h cmd1bWVudCwgTlVMTCwgNn0sCiAKIAkJe05VTEwsIDAsIE5VTEwsIDB9CiAJfTsKQEAgLTE1Niw3 ICsyMDAsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJfQogCX0KIAotCXdoaWxl ICgoYyA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsICJhY0NkOmVmOkY6aDpJOmo6bEw6bjpOOk9w OlA6UnNTOnQ6VDpVOnZ3V3gxIiwKKwl3aGlsZSAoKGMgPSBnZXRvcHRfbG9uZyhhcmdjLCBhcmd2 LCAiYUFjQ2Q6ZWY6RjpnaDpJOmo6bEw6bjpOOk9wOlA6UnNTOnQ6VDpVOnZ3V3gxIiwKIAkJCQkJ CQljbWRvcHRzLCBOVUxMKSkgIT0gLTEpCiAJewogCQlzd2l0Y2ggKGMpCkBAIC0xODMsMTEgKzIy NywxNCBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJCQlpZiAoc3RybGVuKG9wdGFy ZykgIT0gMCkKIAkJCQkJb3B0cy0+Zm9ybWF0TmFtZSA9IHBnX3N0cmR1cChvcHRhcmcpOwogCQkJ CWJyZWFrOworCQkJY2FzZSAnZyc6CisJCQkJLyogcmVzdG9yZSBvbmx5IGdsb2JhbC5kYXQgZmls ZSBmcm9tIGRpcmVjdG9yeSAqLworCQkJCWdsb2JhbHNfb25seSA9IHRydWU7CisJCQkJYnJlYWs7 CiAJCQljYXNlICdoJzoKIAkJCQlpZiAoc3RybGVuKG9wdGFyZykgIT0gMCkKIAkJCQkJb3B0cy0+ Y3BhcmFtcy5wZ2hvc3QgPSBwZ19zdHJkdXAob3B0YXJnKTsKIAkJCQlicmVhazsKLQogCQkJY2Fz ZSAnaic6CQkJLyogbnVtYmVyIG9mIHJlc3RvcmUgam9icyAqLwogCQkJCWlmICghb3B0aW9uX3Bh cnNlX2ludChvcHRhcmcsICItai8tLWpvYnMiLCAxLAogCQkJCQkJCQkJICBQR19NQVhfSk9CUywK QEAgLTMwMiw2ICszNDksMTAgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCQkJCWV4 aXQoMSk7CiAJCQkJb3B0cy0+ZXhpdF9vbl9lcnJvciA9IHRydWU7CiAJCQkJYnJlYWs7CisJCQlj YXNlIDY6CisJCQkJLyogbGlzdCBvZiBkYXRhYmFzZXMgcGF0dGVybnMgdGhvc2UgbmVlZHMgdG8g c2tpcCB3aGlsZSByZXN0b3JpbmcgKi8KKwkJCQlzaW1wbGVfc3RyaW5nX2xpc3RfYXBwZW5kKCZk Yl9leGNsdWRlX3BhdHRlcm5zLCBvcHRhcmcpOworCQkJCWJyZWFrOwogCiAJCQlkZWZhdWx0Ogog CQkJCS8qIGdldG9wdF9sb25nIGFscmVhZHkgZW1pdHRlZCBhIGNvbXBsYWludCAqLwpAQCAtMzI5 LDYgKzM4MCwxMyBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAlpZiAoIW9wdHMtPmNw YXJhbXMuZGJuYW1lICYmICFvcHRzLT5maWxlbmFtZSAmJiAhb3B0cy0+dG9jU3VtbWFyeSkKIAkJ cGdfZmF0YWwoIm9uZSBvZiAtZC8tLWRibmFtZSBhbmQgLWYvLS1maWxlIG11c3QgYmUgc3BlY2lm aWVkIik7CiAKKwlpZiAoZGJfZXhjbHVkZV9wYXR0ZXJucy5oZWFkICE9IE5VTEwgJiYgZ2xvYmFs c19vbmx5KQorCXsKKwkJcGdfbG9nX2Vycm9yKCJvcHRpb24gLS1leGNsdWRlLWRhdGFiYXNlIGNh bm5vdCBiZSB1c2VkIHRvZ2V0aGVyIHdpdGggLWcvLS1nbG9iYWxzLW9ubHkiKTsKKwkJcGdfbG9n X2Vycm9yX2hpbnQoIlRyeSBcIiVzIC0taGVscFwiIGZvciBtb3JlIGluZm9ybWF0aW9uLiIsIHBy b2duYW1lKTsKKwkJZXhpdF9uaWNlbHkoMSk7CisJfQorCiAJLyogU2hvdWxkIGdldCBhdCBtb3N0 IG9uZSBvZiAtZCBhbmQgLWYsIGVsc2UgdXNlciBpcyBjb25mdXNlZCAqLwogCWlmIChvcHRzLT5j cGFyYW1zLmRibmFtZSkKIAl7CkBAIC0zODMsMjggKzQ0MSw4MCBAQCBtYWluKGludCBhcmdjLCBj aGFyICoqYXJndikKIAogCWlmIChvcHRzLT5mb3JtYXROYW1lKQogCXsKLQkJc3dpdGNoIChvcHRz LT5mb3JtYXROYW1lWzBdKQorCQlvcHRzLT5mb3JtYXQgPSBwYXJzZUR1bXBGb3JtYXQob3B0cy0+ Zm9ybWF0TmFtZSk7CisKKwkJLyogUGxhaW4gZm9ybWF0IGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHBn X3Jlc3RvcmUuICovCisJCWlmIChvcHRzLT5mb3JtYXQgPT0gYXJjaE51bGwpCiAJCXsKLQkJCWNh c2UgJ2MnOgotCQkJY2FzZSAnQyc6Ci0JCQkJb3B0cy0+Zm9ybWF0ID0gYXJjaEN1c3RvbTsKLQkJ CQlicmVhazsKKwkJCXBnX2ZhdGFsKCJ1bnJlY29nbml6ZWQgYXJjaGl2ZSBmb3JtYXQgXCIlc1wi OyBwbGVhc2Ugc3BlY2lmeSBcImNcIiwgXCJkXCIsIG9yIFwidFwiIiwKKwkJCQkJb3B0cy0+Zm9y bWF0TmFtZSk7CisJCX0KKwl9CiAKLQkJCWNhc2UgJ2QnOgotCQkJY2FzZSAnRCc6Ci0JCQkJb3B0 cy0+Zm9ybWF0ID0gYXJjaERpcmVjdG9yeTsKLQkJCQlicmVhazsKKwkvKgorCSAqIElmIHRvYy5k YXQgZmlsZSBkb2VzIG5vdCBwcmVzZW50IGluIGN1cnJlbnQgcGF0aCwgdGhlbiBjaGVjayBmb3IK KwkgKiBnbG9iYWwuZGF0LiAgSWYgZ2xvYmFsLmRhdCBmaWxlIGlzIHByZXNlbnQsIHRoZW4gcmVz dG9yZSBhbGwgdGhlCisJICogZGF0YWJhc2VzIGZyb20gbWFwLmRhdChpZiBleGlzdCkgZmlsZSBs aXN0IGFuZCBza2lwIHJlc3RvcmluZyBmb3IKKwkgKiAtLWV4Y2x1ZGUtZGF0YWJhc2UgcGF0dGVy bnMuCisJICovCisJaWYgKGlucHV0RmlsZVNwZWMgIT0gTlVMTCAmJgorCQkJIUlzRmlsZUV4aXN0 c0luRGlyZWN0b3J5KGlucHV0RmlsZVNwZWMsICJ0b2MuZGF0IikpCisJeworCQkvKiBJZiBnbG9i YWwuZGF0IGlzIGV4aXN0LCB0aGVuIHByb2Nlc3MgaXQuICovCisJCWlmIChJc0ZpbGVFeGlzdHNJ bkRpcmVjdG9yeShwZ19zdHJkdXAoaW5wdXRGaWxlU3BlYyksICJnbG9iYWwuZGF0IikpCisJCXsK KwkJCVBHY29ubgkqY29ubiA9IE5VTEw7IC8qIENvbm5lY3Rpb24gdG8gcmVzdG9yZSBnbG9iYWwg c3FsIGNvbW1hbmRzLiAqLworCQkJaW50CQlleGl0X2NvZGUgPSAwOwogCi0JCQljYXNlICd0JzoK LQkJCWNhc2UgJ1QnOgotCQkJCW9wdHMtPmZvcm1hdCA9IGFyY2hUYXI7Ci0JCQkJYnJlYWs7CisJ CQkvKiBDb25uZWN0IHRvIGRhdGFiYXNlIHRvIGV4ZWN1dGUgZ2xvYmFsIHNxbCBjb21tYW5kcyBm cm9tIGdsb2JhbC5kYXQgZmlsZS4gKi8KKwkJCWlmIChvcHRzLT5jcGFyYW1zLmRibmFtZSkKKwkJ CXsKKwkJCQljb25uID0gY29ubmVjdERhdGFiYXNlKG9wdHMtPmNwYXJhbXMuZGJuYW1lLCBOVUxM LCBvcHRzLT5jcGFyYW1zLnBnaG9zdCwKKwkJCQkJCW9wdHMtPmNwYXJhbXMucGdwb3J0LCBvcHRz LT5jcGFyYW1zLnVzZXJuYW1lLCBUUklfREVGQVVMVCwgZmFsc2UsCisJCQkJCQlwcm9nbmFtZSwg TlVMTCwgTlVMTCk7CiAKLQkJCWRlZmF1bHQ6Ci0JCQkJcGdfZmF0YWwoInVucmVjb2duaXplZCBh cmNoaXZlIGZvcm1hdCBcIiVzXCI7IHBsZWFzZSBzcGVjaWZ5IFwiY1wiLCBcImRcIiwgb3IgXCJ0 XCIiLAotCQkJCQkJIG9wdHMtPmZvcm1hdE5hbWUpOwotCQl9Ci0JfQorCQkJCWlmICghY29ubikK KwkJCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBjb25uZWN0IHRvIGRhdGFiYXNlIFwiJXNcIiIsIG9w dHMtPmNwYXJhbXMuZGJuYW1lKTsKKwkJCX0KKworCQkJLyogT3BlbiBnbG9iYWwuZGF0IGZpbGUg YW5kIGV4ZWN1dGUvYXBwZW5kIGFsbCB0aGUgZ2xvYmFsIHNxbCBjb21tYW5kcy4gKi8KKwkJCWV4 ZWN1dGVfZ2xvYmFsX3NxbF9jb21tYW5kcyhjb25uLCBpbnB1dEZpbGVTcGVjLCBvcHRzLT5maWxl bmFtZSk7CisKKwkJCS8qIElmIGdsb2JhbHMtb25seSwgdGhlbiByZXR1cm4gZnJvbSBoZXJlLiAq LworCQkJaWYgKGdsb2JhbHNfb25seSkKKwkJCXsKKwkJCQlpZiAoY29ubikKKwkJCQkJUFFmaW5p c2goY29ubik7CisJCQkJcGdfbG9nX2luZm8oImRhdGFiYXNlcyByZXN0b3JpbmcgaXMgc2tpcHBl ZCBhcyAtZy8tLWdsb2JhbHMtb25seSBvcHRpb24gaXMgc3BlY2lmaWVkIik7CisJCQl9CisJCQll bHNlCisJCQl7CisJCQkJLyogTm93IHJlc3RvcmUgYWxsIHRoZSBkYXRhYmFzZXMgZnJvbSBtYXAu ZGF0IGZpbGUuICovCisJCQkJZXhpdF9jb2RlID0gcmVzdG9yZUFsbERhdGFiYXNlcyhjb25uLCBp bnB1dEZpbGVTcGVjLCBkYl9leGNsdWRlX3BhdHRlcm5zLAorCQkJCQkJb3B0cywgbnVtV29ya2Vy cyk7CisJCQl9CisKKwkJCS8qIEZyZWUgZGIgcGF0dGVybiBsaXN0LiAqLworCQkJc2ltcGxlX3N0 cmluZ19mdWxsX2xpc3RfZGVsZXRlKCZkYl9leGNsdWRlX3BhdHRlcm5zKTsKKworCQkJcmV0dXJu IGV4aXRfY29kZTsKKwkJfS8qIGVuZCBpZiAqLworCX0vKiBlbmQgaWYgKi8KKworCXJldHVybiBy ZXN0b3JlT25lRGF0YWJhc2UoaW5wdXRGaWxlU3BlYywgb3B0cywgbnVtV29ya2VycywgZmFsc2Up OworfQorCisvKgorICogcmVzdG9yZU9uZURhdGFiYXNlCisgKgorICogVGhpcyB3aWxsIHJlc3Rv cmUgb25lIGRhdGFiYXNlIHVzaW5nIHRvYy5kYXQgZmlsZS4KKyAqLworc3RhdGljIGJvb2wKK3Jl c3RvcmVPbmVEYXRhYmFzZShjb25zdCBjaGFyICppbnB1dEZpbGVTcGVjLCBSZXN0b3JlT3B0aW9u cyAqb3B0cywKKwkJaW50IG51bVdvcmtlcnMsIGJvb2wgYXBwZW5kX2RhdGEpCit7CisJQXJjaGl2 ZQkJKkFIOworCWJvb2wJCWV4aXRfY29kZTsKIAogCUFIID0gT3BlbkFyY2hpdmUoaW5wdXRGaWxl U3BlYywgb3B0cy0+Zm9ybWF0KTsKIApAQCAtNDMxLDExICs1NDEsMTEgQEAgbWFpbihpbnQgYXJn YywgY2hhciAqKmFyZ3YpCiAJQUgtPm51bVdvcmtlcnMgPSBudW1Xb3JrZXJzOwogCiAJaWYgKG9w dHMtPnRvY1N1bW1hcnkpCi0JCVByaW50VE9DU3VtbWFyeShBSCk7CisJCVByaW50VE9DU3VtbWFy eShBSCwgYXBwZW5kX2RhdGEpOwogCWVsc2UKIAl7CiAJCVByb2Nlc3NBcmNoaXZlUmVzdG9yZU9w dGlvbnMoQUgpOwotCQlSZXN0b3JlQXJjaGl2ZShBSCk7CisJCVJlc3RvcmVBcmNoaXZlKEFILCBh cHBlbmRfZGF0YSk7CiAJfQogCiAJLyogZG9uZSwgcHJpbnQgYSBzdW1tYXJ5IG9mIGlnbm9yZWQg ZXJyb3JzICovCkBAIC00NzEsNiArNTgxLDcgQEAgdXNhZ2UoY29uc3QgY2hhciAqcHJvZ25hbWUp CiAJcHJpbnRmKF8oIiAgLWMsIC0tY2xlYW4gICAgICAgICAgICAgICAgICBjbGVhbiAoZHJvcCkg ZGF0YWJhc2Ugb2JqZWN0cyBiZWZvcmUgcmVjcmVhdGluZ1xuIikpOwogCXByaW50ZihfKCIgIC1D LCAtLWNyZWF0ZSAgICAgICAgICAgICAgICAgY3JlYXRlIHRoZSB0YXJnZXQgZGF0YWJhc2VcbiIp KTsKIAlwcmludGYoXygiICAtZSwgLS1leGl0LW9uLWVycm9yICAgICAgICAgIGV4aXQgb24gZXJy b3IsIGRlZmF1bHQgaXMgdG8gY29udGludWVcbiIpKTsKKwlwcmludGYoXygiICAtZywgLS1nbG9i YWxzLW9ubHkgICAgICAgICAgIHJlc3RvcmUgb25seSBnbG9iYWwgb2JqZWN0cywgbm8gZGF0YWJh c2VzXG4iKSk7CiAJcHJpbnRmKF8oIiAgLUksIC0taW5kZXg9TkFNRSAgICAgICAgICAgICByZXN0 b3JlIG5hbWVkIGluZGV4XG4iKSk7CiAJcHJpbnRmKF8oIiAgLWosIC0tam9icz1OVU0gICAgICAg ICAgICAgICB1c2UgdGhpcyBtYW55IHBhcmFsbGVsIGpvYnMgdG8gcmVzdG9yZVxuIikpOwogCXBy aW50ZihfKCIgIC1MLCAtLXVzZS1saXN0PUZJTEVOQU1FICAgICAgdXNlIHRhYmxlIG9mIGNvbnRl bnRzIGZyb20gdGhpcyBmaWxlIGZvclxuIgpAQCAtNDgzLDYgKzU5NCw3IEBAIHVzYWdlKGNvbnN0 IGNoYXIgKnByb2duYW1lKQogCXByaW50ZihfKCIgIC1TLCAtLXN1cGVydXNlcj1OQU1FICAgICAg ICAgc3VwZXJ1c2VyIHVzZXIgbmFtZSB0byB1c2UgZm9yIGRpc2FibGluZyB0cmlnZ2Vyc1xuIikp OwogCXByaW50ZihfKCIgIC10LCAtLXRhYmxlPU5BTUUgICAgICAgICAgICAgcmVzdG9yZSBuYW1l ZCByZWxhdGlvbiAodGFibGUsIHZpZXcsIGV0Yy4pXG4iKSk7CiAJcHJpbnRmKF8oIiAgLVQsIC0t dHJpZ2dlcj1OQU1FICAgICAgICAgICByZXN0b3JlIG5hbWVkIHRyaWdnZXJcbiIpKTsKKwlwcmlu dGYoXygiICAtLWV4Y2x1ZGUtZGF0YWJhc2U9UEFUVEVSTiAgIGV4Y2x1ZGUgZGF0YWJhc2VzIHdo b3NlIG5hbWUgbWF0Y2hlcyB3aXRoIHBhdHRlcm5cbiIpKTsKIAlwcmludGYoXygiICAteCwgLS1u by1wcml2aWxlZ2VzICAgICAgICAgIHNraXAgcmVzdG9yYXRpb24gb2YgYWNjZXNzIHByaXZpbGVn ZXMgKGdyYW50L3Jldm9rZSlcbiIpKTsKIAlwcmludGYoXygiICAtMSwgLS1zaW5nbGUtdHJhbnNh Y3Rpb24gICAgIHJlc3RvcmUgYXMgYSBzaW5nbGUgdHJhbnNhY3Rpb25cbiIpKTsKIAlwcmludGYo XygiICAtLWRpc2FibGUtdHJpZ2dlcnMgICAgICAgICAgIGRpc2FibGUgdHJpZ2dlcnMgZHVyaW5n IGRhdGEtb25seSByZXN0b3JlXG4iKSk7CkBAIC02MjEsMyArNzMzLDU0MiBAQCByZWFkX3Jlc3Rv cmVfZmlsdGVycyhjb25zdCBjaGFyICpmaWxlbmFtZSwgUmVzdG9yZU9wdGlvbnMgKm9wdHMpCiAK IAlmaWx0ZXJfZnJlZSgmZnN0YXRlKTsKIH0KKworLyoKKyAqIElzRmlsZUV4aXN0c0luRGlyZWN0 b3J5CisgKgorICogUmV0dXJucyB0cnVlIGlmIGZpbGUgZXhpc3QgaW4gY3VycmVudCBkaXJlY3Rv cnkuCisgKi8KK3N0YXRpYyBib29sCitJc0ZpbGVFeGlzdHNJbkRpcmVjdG9yeShjb25zdCBjaGFy ICpkaXIsIGNvbnN0IGNoYXIgKmZpbGVuYW1lKQoreworCXN0cnVjdCBzdGF0CQkJc3Q7CisJY2hh cgkJCQlidWZbTUFYUEdQQVRIXTsKKworCWlmIChzbnByaW50ZihidWYsIE1BWFBHUEFUSCwgIiVz LyVzIiwgZGlyLCBmaWxlbmFtZSkgPj0gTUFYUEdQQVRIKQorCQlwZ19mYXRhbCgiZGlyZWN0b3J5 IG5hbWUgdG9vIGxvbmc6IFwiJXNcIiIsIGRpcik7CisKKwlyZXR1cm4gKHN0YXQoYnVmLCAmc3Qp ID09IDAgJiYgU19JU1JFRyhzdC5zdF9tb2RlKSk7Cit9CisKKy8qCisgKiBSZWFkT25lU3RhdGVt ZW50CisgKgorICogVGhpcyB3aWxsIHN0YXJ0IHJlYWRpbmcgZnJvbSBwYXNzZWQgZmlsZSBwb2lu dGVyIHVzaW5nIGZnZXRjIGFuZCByZWFkIHRpbGwKKyAqIHNlbWljb2xvbihzcWwgc3RhdGVtZW50 IHRlcm1pbmF0b3IgZm9yIGdsb2JhbC5zcWwgZmlsZSkKKyAqCisgKiBFT0YgaXMgcmV0dXJuZWQg aWYgZW5kLW9mLWZpbGUgaW5wdXQgaXMgc2VlbjsgdGltZSB0byBzaHV0IGRvd24uCisgKi8KKwor c3RhdGljIGludAorUmVhZE9uZVN0YXRlbWVudChTdHJpbmdJbmZvIGluQnVmLCBGSUxFICpwZmls ZSkKK3sKKwlpbnQJCQljOyAvKiBjaGFyYWN0ZXIgcmVhZCBmcm9tIGdldGMoKSAqLworCisJcmVz ZXRTdHJpbmdJbmZvKGluQnVmKTsKKworCS8qCisJICogUmVhZCBjaGFyYWN0ZXJzIHVudGlsIEVP RiBvciB0aGUgYXBwcm9wcmlhdGUgZGVsaW1pdGVyIGlzIHNlZW4uCisJICovCisJd2hpbGUgKChj ID0gZmdldGMocGZpbGUpKSAhPSBFT0YpCisJeworCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihpbkJ1 ZiwgKGNoYXIpIGMpOworCisJCWlmIChjID09ICdcbicpCisJCXsKKwkJCWlmKGluQnVmLT5sZW4g PiAxICYmCisJCQkJCWluQnVmLT5kYXRhW2luQnVmLT5sZW4gLSAyXSA9PSAnOycpCisJCQkJYnJl YWs7CisJCQllbHNlCisJCQkJY29udGludWU7CisJCX0KKwl9CisKKwkvKiBObyBpbnB1dCBiZWZv cmUgRU9GIHNpZ25hbCBtZWFucyB0aW1lIHRvIHF1aXQuICovCisJaWYgKGMgPT0gRU9GICYmIGlu QnVmLT5sZW4gPT0gMCkKKwkJcmV0dXJuIEVPRjsKKworCS8qIEFkZCAnXDAnIHRvIG1ha2UgaXQg bG9vayB0aGUgc2FtZSBhcyBtZXNzYWdlIGNhc2UuICovCisJYXBwZW5kU3RyaW5nSW5mb0NoYXIo aW5CdWYsIChjaGFyKSAnXDAnKTsKKworCXJldHVybiAnUSc7Cit9CisKKy8qCisgKiBmaWx0ZXJf ZGJuYW1lc19mb3JfcmVzdG9yZQorICoKKyAqIFRoaXMgd2lsbCByZW1vdmUgbmFtZXMgZnJvbSBh bGwgZGJsaXN0IHRoYXQgYXJlIGdpdmVuIHdpdGggZXhjbHVkZS1kYXRhYmFzZQorICogb3B0aW9u LgorICoKKyAqIHJldHVybnMgbnVtYmVyIG9mIGRibmFtZXMgdGhvc2Ugd2lsbCBiZSByZXN0b3Jl ZC4KKyAqLworc3RhdGljIGludAorZmlsdGVyX2RibmFtZXNfZm9yX3Jlc3RvcmUoUEdjb25uICpj b25uLCBTaW1wbGVEYXRhYmFzZU9pZExpc3QgKmRibmFtZV9vaWRfbGlzdCwKKwkJU2ltcGxlU3Ry aW5nTGlzdCBkYl9leGNsdWRlX3BhdHRlcm5zKQoreworCVNpbXBsZURhdGFiYXNlT2lkTGlzdENl bGwJKmRib2lkX2NlbGwgPSBkYm5hbWVfb2lkX2xpc3QtPmhlYWQ7CisJU2ltcGxlRGF0YWJhc2VP aWRMaXN0Q2VsbAkqZGJvaWRwcmVjZWxsID0gTlVMTDsKKwlpbnQJCQkJCQkJY291bnRfZGIgPSAw OworCisJLyogUmV0dXJuIDAgaWYgdGhlcmUgaXMgbm8gZGIgdG8gcmVzdG9yZS4gKi8KKwlpZiAo ZGJvaWRfY2VsbCA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCS8qIFByb2Nlc3Mgb25lIGJ5IG9u ZSBhbGwgZGJuYW1lcyBhbmQgaWYgbmVlZHMgdG8gc2tpcCByZXN0b3JpbmcuICovCisJd2hpbGUg KGRib2lkX2NlbGwgIT0gTlVMTCkKKwl7CisJCWJvb2wJCQkJCQlza2lwX2RiX3Jlc3RvcmUgPSBm YWxzZTsKKwkJU2ltcGxlRGF0YWJhc2VPaWRMaXN0Q2VsbAkqbmV4dCA9IGRib2lkX2NlbGwtPm5l eHQ7CisKKwkJLyogTm93IG1hdGNoIHRoaXMgZGJuYW1lIHdpdGggZXhjbHVkZS1kYXRhYmFzZSBs aXN0LiAqLworCQlmb3IgKFNpbXBsZVN0cmluZ0xpc3RDZWxsICpjZWxsZGIgPSBkYl9leGNsdWRl X3BhdHRlcm5zLmhlYWQ7IGNlbGxkYjsgY2VsbGRiID0gY2VsbGRiLT5uZXh0KQorCQl7CisJCQlp ZiAoKGNvbm4gJiYgaXNfZnVsbF9wYXR0ZXJuKGNvbm4sIGRib2lkX2NlbGwtPmRiX25hbWUsIGNl bGxkYi0+dmFsKSkgfHwKKwkJCQkJKCFjb25uICYmIHBnX3N0cmNhc2VjbXAoZGJvaWRfY2VsbC0+ ZGJfbmFtZSwgY2VsbGRiLT52YWwpID09IDApKQorCQkJeworCQkJCS8qCisJCQkJICogQXMgd2Ug bmVlZCB0byBza2lwIHRoaXMgZGJuYW1lIHNvIHNldCBmbGFnIHRvIHJlbW92ZSBpdCBmcm9tCisJ CQkJICogbGlzdC4KKwkJCQkgKgorCQkJCSAqIE5vdGU6IHdlIGNhbid0IHJlbW92ZSB0aGlzIHBh dHRlcm4gZnJvbSBza2lwIGxpc3QgYXMgd2UKKwkJCQkgKiBtaWdodCBoYXZlIG11bHRpcGxlIGRh dGFiYXNlIG5hbWUgd2l0aCB0aGlzIHNhbWUgcGF0dGVybi4KKwkJCQkgKi8KKwkJCQlza2lwX2Ri X3Jlc3RvcmUgPSB0cnVlOworCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJLyogSW5jcmVtZW50 IGNvdW50IGlmIGRiIG5lZWRzIHRvIGJlIHJlc3RvcmVkLiAqLworCQlpZiAoc2tpcF9kYl9yZXN0 b3JlKQorCQl7CisJCQlwZ19sb2dfaW5mbygiZXhjbHVkaW5nIGRhdGFiYXNlIFwiJXNcIiIsIGRi b2lkX2NlbGwtPmRiX25hbWUpOworCQkJc2ltcGxlX2RiX29pZF9saXN0X2RlbGV0ZShkYm5hbWVf b2lkX2xpc3QsIGRib2lkX2NlbGwsIGRib2lkcHJlY2VsbCk7CisJCX0KKwkJZWxzZQorCQl7CisJ CQljb3VudF9kYisrOyAvKiBJbmNyZW1lbnQgZGIgY291dGVyLiAqLworCQkJZGJvaWRwcmVjZWxs ID0gZGJvaWRfY2VsbDsKKwkJfQorCisJCS8qIFByb2Nlc3MgbmV4dCBkYm5hbWUgZnJvbSBkYm5h bWUgbGlzdC4gKi8KKwkJZGJvaWRfY2VsbCA9IG5leHQ7CisJfQorCisJcmV0dXJuIGNvdW50X2Ri OworfQorCisvKgorICogZ2V0X2RibmFtZV9vaWRfbGlzdF9mcm9tX21maWxlCisgKgorICogT3Bl biBtYXAuZGF0IGZpbGUgYW5kIHJlYWQgbGluZSBieSBsaW5lIGFuZCB0aGVuIHByZXBhcmUgYSBs aXN0IG9mIGRhdGFiYXNlCisgKiBuYW1lcyBhbmQgY29ycmVzcG9kaW5nIGRiX29pZC4KKyAqCisg KiBSZXR1cm5zLCB0b3RhbCBudW1iZXIgb2YgZGF0YWJhc2UgbmFtZXMgaW4gbWFwLmRhdCBmaWxl LgorICovCitzdGF0aWMgaW50CitnZXRfZGJuYW1lX29pZF9saXN0X2Zyb21fbWZpbGUoY29uc3Qg Y2hhciAqZHVtcGRpcnBhdGgsIFNpbXBsZURhdGFiYXNlT2lkTGlzdCAqZGJuYW1lX29pZF9saXN0 KQoreworCUZJTEUgICAgKnBmaWxlOworCWNoYXIgICAgbWFwX2ZpbGVfcGF0aFtNQVhQR1BBVEhd OworCWNoYXIgICAgbGluZVtNQVhQR1BBVEhdOworCWludCAgICAgY291bnQgPSAwOworCisJaWYg KCFJc0ZpbGVFeGlzdHNJbkRpcmVjdG9yeShwZ19zdHJkdXAoZHVtcGRpcnBhdGgpLCAibWFwLmRh dCIpKQorCXsKKwkJcGdfbG9nX2luZm8oIm1hcC5kYXQgZmlsZSBpcyBub3QgcHJlc2VudCBpbiBk dW1wIG9mIHBnX2R1bXBhbGwsIHNvIG5vdGhpbmcgdG8gcmVzdG9yZS4iKTsKKwkJcmV0dXJuIDA7 CisJfQorCisJc25wcmludGYobWFwX2ZpbGVfcGF0aCwgTUFYUEdQQVRILCAiJXMvbWFwLmRhdCIs IGR1bXBkaXJwYXRoKTsKKworCS8qIE9wZW4gbWFwLmRhdCBmaWxlLiAqLworCXBmaWxlID0gZm9w ZW4obWFwX2ZpbGVfcGF0aCwgUEdfQklOQVJZX1IpOworCisJaWYgKHBmaWxlID09IE5VTEwpCisJ CXBnX2ZhdGFsKCJjb3VsZCBub3Qgb3BlbiBtYXAuZGF0IGZpbGU6IFwiJXNcIiIsIG1hcF9maWxl X3BhdGgpOworCisJLyogQXBwZW5kIGFsbCB0aGUgZGJuYW1lIGFuZCBkYl9vaWQgdG8gdGhlIGxp c3QuICovCisJd2hpbGUoKGZnZXRzKGxpbmUsIE1BWFBHUEFUSCwgcGZpbGUpKSAhPSBOVUxMKQor CXsKKwkJT2lkICAgICAgICAgZGJfb2lkOworCQljaGFyCQlkYl9vaWRfc3RyW01BWFBHUEFUSCAr IDFdOworCQljaGFyICAgICAgICBkYm5hbWVbTUFYUEdQQVRIICsgMV07CisKKwkJLyogRXh0cmFj dCBkYm9pZC4gKi8KKwkJc3NjYW5mKGxpbmUsICIldSIgLCAmZGJfb2lkKTsKKwkJc3NjYW5mKGxp bmUsICIlcyIgLCBkYl9vaWRfc3RyKTsKKworCQkvKiBOb3cgY29weSBkYm5hbWUuICovCisJCXN0 cmNweShkYm5hbWUsIGxpbmUgKyBzdHJsZW4oZGJfb2lkX3N0cikgKyAxKTsKKworCQkvKiBSZW1v dmUgXG4gZnJvbSBkYmFubWUuICovCisJCWRibmFtZVtzdHJsZW4oZGJuYW1lKSAtIDFdID0gJ1ww JzsKKworCQlwZ19sb2dfaW5mbygiZm91bmQgZGJuYW1lIGFzIDogXCIlc1wiIGFuZCBkYl9vaWQ6 JXUgaW4gbWFwLmRhdCBmaWxlIHdoaWxlIHJlc3RvcmluZyIsIGRibmFtZSwgZGJfb2lkKTsKKwor CQkvKiBSZXBvcnQgZXJyb3IgaWYgZmlsZSBoYXMgYW55IGNvcnJ1cHRlZCBkYXRhLiAqLworCQlp ZiAoIU9pZElzVmFsaWQoZGJfb2lkKSB8fCBzdHJsZW4oZGJuYW1lKSA9PSAwKQorCQkJcGdfZmF0 YWwoImludmFsaWQgZW50cnkgaW4gbWFwLmRhdCBmaWxlIGF0IGxpbmUgOiAlZCIsIGNvdW50ICsg MSk7CisKKwkJLyoKKwkJICogWFhYIDogYmVmb3JlIGFkZGluZyBkYm5hbWUgaW50byBsaXN0LCB3 ZSBjYW4gdmVyaWZ5IHRoYXQgdGhpcyBkYgorCQkgKiBuZWVkcyB0byBza2lwcGVkIGZvciByZXN0 b3JlIG9yIG5vdCBidXQgYXMgb2Ygbm93LCB3ZSBhcmUgbWFraW5nCisJCSAqIGEgbGlzdCBvZiBh bGwgdGhlIGRhdGFiYXNlcy4KKwkJICovCisJCXNpbXBsZV9kYl9vaWRfbGlzdF9hcHBlbmQoZGJu YW1lX29pZF9saXN0LCBkYl9vaWQsIGRibmFtZSk7CisJCWNvdW50Kys7CisJfQorCisJLyogQ2xv c2UgbWFwLmRhdCBmaWxlLiAqLworCWZjbG9zZShwZmlsZSk7CisKKwlyZXR1cm4gY291bnQ7Cit9 CisKKy8qCisgKiByZXN0b3JlQWxsRGF0YWJhc2VzCisgKgorICogVGhpcyB3aWxsIHJlc3RvcmUg ZGF0YWJhc2VzIHRob3NlIGR1bXBzIGFyZSBwcmVzZW50IGluCisgKiBkaXJlY3RvcnkgYmFzZWQg b24gbWFwLmRhdCBmaWxlIG1hcHBpbmcuCisgKgorICogVGhpcyB3aWxsIHNraXAgcmVzdG9yaW5n IGZvciBkYXRhYmFzZXMgdGhhdCBhcmUgc3BlY2lmaWVkIHdpdGgKKyAqIGV4Y2x1ZGUtZGF0YWJh c2Ugb3B0aW9uLgorICovCitzdGF0aWMgaW50CityZXN0b3JlQWxsRGF0YWJhc2VzKFBHY29ubiAq Y29ubiwgY29uc3QgY2hhciAqZHVtcGRpcnBhdGgsCisJCVNpbXBsZVN0cmluZ0xpc3QgZGJfZXhj bHVkZV9wYXR0ZXJucywgUmVzdG9yZU9wdGlvbnMgKm9wdHMsCisJCWludCBudW1Xb3JrZXJzKQor eworCVNpbXBsZURhdGFiYXNlT2lkTGlzdAkJCWRibmFtZV9vaWRfbGlzdCA9IHtOVUxMLCBOVUxM fTsKKwlTaW1wbGVEYXRhYmFzZU9pZExpc3RDZWxsCQkqZGJvaWRfY2VsbDsKKwlpbnQJCQkJCQkJ CWV4aXRfY29kZSA9IDA7CisJaW50CQkJCQkJCQludW1fZGJfcmVzdG9yZTsKKwlpbnQJCQkJCQkJ CW51bV90b3RhbF9kYjsKKworCW51bV90b3RhbF9kYiA9IGdldF9kYm5hbWVfb2lkX2xpc3RfZnJv bV9tZmlsZShkdW1wZGlycGF0aCwgJmRibmFtZV9vaWRfbGlzdCk7CisKKwkvKiBJZiBtYXAuZGF0 IGhhcyBubyBlbnRyeSwgcmV0dXJuIGZyb20gaGVyZS4gKi8KKwlpZiAoZGJuYW1lX29pZF9saXN0 LmhlYWQgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwlwZ19sb2dfaW5mbygiZm91bmQgdG90YWwg JWQgZGF0YWJhc2UgbmFtZXMgaW4gbWFwLmRhdCBmaWxlIiwgbnVtX3RvdGFsX2RiKTsKKworCWlm ICghY29ubikKKwl7CisJCXBnX2xvZ19pbmZvKCJ0cnlpbmcgdG8gY29ubmVjdCBwb3N0Z3JlcyBk YXRhYmFzZSB0byBkdW1wIGludG8gb3V0IGZpbGUiKTsKKworCQljb25uID0gY29ubmVjdERhdGFi YXNlKCJwb3N0Z3JlcyIsIE5VTEwsIG9wdHMtPmNwYXJhbXMucGdob3N0LAorCQkJCW9wdHMtPmNw YXJhbXMucGdwb3J0LCBvcHRzLT5jcGFyYW1zLnVzZXJuYW1lLCBUUklfREVGQVVMVCwgZmFsc2Us CisJCQkJcHJvZ25hbWUsIE5VTEwsIE5VTEwpOworCisJCS8qIFRyeSB3aXRoIHRlbXBsYXRlMS4g Ki8KKwkJaWYgKCFjb25uKQorCQl7CisJCQlwZ19sb2dfaW5mbygidHJ5aW5nIHRvIGNvbm5lY3Qg dGVtcGxhdGUxIGRhdGFiYXNlIGFzIGZhaWxlZCB0byBjb25uZWN0IHRvIHBvc3RncmVzIHRvIGR1 bXAgaW50byBvdXQgZmlsZSIpOworCisJCQljb25uID0gY29ubmVjdERhdGFiYXNlKCJ0ZW1wbGF0 ZTEiLCBOVUxMLCBvcHRzLT5jcGFyYW1zLnBnaG9zdCwKKwkJCQkJb3B0cy0+Y3BhcmFtcy5wZ3Bv cnQsIG9wdHMtPmNwYXJhbXMudXNlcm5hbWUsIFRSSV9ERUZBVUxULCBmYWxzZSwKKwkJCQkJcHJv Z25hbWUsIE5VTEwsIE5VTEwpOworCisJCQlpZiAoIWNvbm4pCisJCQkJcGdfbG9nX2luZm8oInRo ZXJlIGlzIG5vIGRhdGFiYXNlIGNvbm5lY3Rpb24gc28gY29uc2lkZXIgcGF0dGVybiBhcyBzaW1w bGUgbmFtZSBmb3IgZXhjbHVkZS1kYXRhYmFzZSIpOworCQl9CisJfQorCisJLyoKKwkgKiBUT0RP OiBUbyBza2lwIGRhdGFiYXNlcywgd2UgbmVlZCB0byBtYWtlIGEgZGVzaWduLgorCSAqCisJICog U2tpcCBhbnkgZXhwbGljaXRseSBleGNsdWRlZCBkYXRhYmFzZS4gIElmIHRoZXJlIGlzIG5vIGRh dGFiYXNlCisJICogY29ubmVjdGlvbiwgdGhlbiBqdXN0IGNvbnNpZGVyIHBhdHRlcm4gYXMgc2lt cGxlIG5hbWUgdG8gY29tcGFyZS4KKwkgKi8KKwludW1fZGJfcmVzdG9yZSA9IGZpbHRlcl9kYm5h bWVzX2Zvcl9yZXN0b3JlKGNvbm4sICZkYm5hbWVfb2lkX2xpc3QsCisJCQlkYl9leGNsdWRlX3Bh dHRlcm5zKTsKKworCS8qIENsb3NlIHRoZSBkYiBjb25uZWN0aW9uIGFzIHdlIGFyZSBkb25lIGds b2JhbHMgYW5kIHBhdHRlcm5zLiAqLworCWlmIChjb25uKQorCQlQUWZpbmlzaChjb25uKTsKKwor CS8qIEV4aXQgaWYgbm8gZGIgbmVlZHMgdG8gYmUgcmVzdG9yZWQuICovCisJaWYgKGRibmFtZV9v aWRfbGlzdC5oZWFkID09IE5VTEwpCisJCXJldHVybiAwOworCisJcGdfbG9nX2luZm8oIm5lZWRz IHRvIHJlc3RvcmUgJWQgZGF0YWJhc2VzIG91dCBvZiAlZCBkYXRhYmFzZXMiLCBudW1fZGJfcmVz dG9yZSwgbnVtX3RvdGFsX2RiKTsKKworCS8qCisJICogVG8gcmVzdG9yZSBtdWx0aXBsZSBkYXRh YmFzZXMsIC1DIChjcmVhdGUgZGF0YWJhc2UpIG9wdGlvbiBzaG91bGQgYmUgc3BlY2lmaWVkCisJ ICogb3IgYWxsIGRhdGFiYXNlcyBzaG91bGQgYmUgY3JlYXRlZCBiZWZvcmUgcGdfcmVzdG9yZS4K KwkgKi8KKwlpZiAob3B0cy0+Y3JlYXRlREIgIT0gMSkKKwkJcGdfbG9nX2luZm8oInJlc3Rvcmlu ZyBkdW1wIG9mIHBnX2R1bXBhbGwgd2l0aG91dCAtQyBvcHRpb24sIHRoZXJlIG1pZ2h0IGJlIG11 bHRpcGxlIGRhdGFiYXNlcyBpbiBkaXJlY3RvcnkuIik7CisKKwkvKiBUT0RPOiBNQVhfT05fRVhJ VF9OSUNFTFkgaXMgMTAwIG5vdy4uLiBtYXggQUggaGFuZGxlIHJlZ2lzdGVyIG9uIGV4aXQgLiov CisJaWYgKG51bV9kYl9yZXN0b3JlID4gMTAwKQorCXsKKwkJc2ltcGxlX2RiX29pZF9mdWxsX2xp c3RfZGVsZXRlKCZkYm5hbWVfb2lkX2xpc3QpOworCQlwZ19mYXRhbCgiY291bmQgbm90IHJlc3Rv cmUgbW9yZSB0aGFuIDEwMCBkYXRhYmFzZXMgYnkgc2luZ2xlIHBnX3Jlc3RvcmUsIGhlcmUgdG90 YWwgZGI6JWQiLCBudW1fZGJfcmVzdG9yZSk7CisJfQorCisJLyoKKwkgKiBYWFg6IFRPRE8gdGls bCBub3csIHdlIG1hZGUgYSBsaXN0IG9mIGRhdGFiYXNlcywgdGhvc2UgbmVlZHMgdG8gYmUgcmVz dG9yZWQKKwkgKiBhZnRlciBza2lwcGluZyBuYW1lcyBvZiBleGNsdWRlLWRhdGFiYXNlLiAgTm93 IHdlIGNhbiBsYXVuY2ggcGFyYWxsZWwKKwkgKiB3b3JrZXJzIHRvIHJlc3RvcmUgdGhlc2UgZGF0 YWJhc2VzLgorCSAqLworCWRib2lkX2NlbGwgPSBkYm5hbWVfb2lkX2xpc3QuaGVhZDsKKworCXdo aWxlKGRib2lkX2NlbGwgIT0gTlVMTCkKKwl7CisJCWNoYXIJCXN1YmRpcnBhdGhbTUFYUEdQQVRI XTsKKwkJaW50CQkJZGJleGl0X2NvZGU7CisKKwkJLyoKKwkJICogV2UgbmVlZCB0byByZXNldCBv dmVycmlkZV9kYm5hbWUgc28gdGhhdCBvYmplY3RzIGNhbiBiZSByZXN0b3JlZCBpbnRvCisJCSAq IGFscmVhZHkgY3JlYXRlZCBkYXRhYmFzZS4gKHVzZWQgd2l0aCAtZC8tLWRibmFtZSBvcHRpb24p CisJCSAqLworCQlpZiAob3B0cy0+Y3BhcmFtcy5vdmVycmlkZV9kYm5hbWUpCisJCXsKKwkJCXBm cmVlKG9wdHMtPmNwYXJhbXMub3ZlcnJpZGVfZGJuYW1lKTsKKwkJCW9wdHMtPmNwYXJhbXMub3Zl cnJpZGVfZGJuYW1lID0gTlVMTDsKKwkJfQorCisJCXNucHJpbnRmKHN1YmRpcnBhdGgsIE1BWFBH UEFUSCwgIiVzL2RhdGFiYXNlcy8ldSIsIGR1bXBkaXJwYXRoLCBkYm9pZF9jZWxsLT5kYl9vaWQp OworCisJCXBnX2xvZ19pbmZvKCJyZXN0b3JpbmcgZGF0YWJhc2UgXCIlc1wiIiwgZGJvaWRfY2Vs bC0+ZGJfbmFtZSk7CisKKwkJZGJleGl0X2NvZGUgPSByZXN0b3JlT25lRGF0YWJhc2Uoc3ViZGly cGF0aCwgb3B0cywgbnVtV29ya2VycywgdHJ1ZSk7CisKKwkJLyogU3RvcmUgZXhpdF9jb2RlIHRv IHJlcG9ydCBpdCBiYWNrLiAqLworCQlpZiAoZXhpdF9jb2RlID09IDAgJiYgZGJleGl0X2NvZGUg IT0gMCkKKwkJCWV4aXRfY29kZSA9IGRiZXhpdF9jb2RlOworCisJCWRib2lkX2NlbGwgPSBkYm9p ZF9jZWxsLT5uZXh0OworCX0gLyogZW5kIHdoaWxlICovCisKKwkvKiBMb2cgbnVtYmVyIG9mIHBy b2Nlc3NlZCBkYXRhYmFzZXMuKi8KKwlwZ19sb2dfaW5mbygibnVtYmVyIG9mIHJlc3RvcmVkIGRh dGFiYXNlcyBhcmUgJWQiLCBudW1fZGJfcmVzdG9yZSk7CisKKwkvKiBGcmVlIGRibmFtZSBhbmQg ZGJvaWQgbGlzdC4gKi8KKwlzaW1wbGVfZGJfb2lkX2Z1bGxfbGlzdF9kZWxldGUoJmRibmFtZV9v aWRfbGlzdCk7CisKKwlyZXR1cm4gZXhpdF9jb2RlOworfQorCisvKgorICogZXhlY3V0ZV9nbG9i YWxfc3FsX2NvbW1hbmRzCisgKgorICogVGhpcyB3aWxsIG9wZW4gZ2xvYmFsLmRhdCBmaWxlIGFu ZCB3aWxsIGV4ZWN1dGUgYWxsIGdsb2JhbCBzcWwgY29tbWFuZHMgb25lCisgKiBieSBvbmUgc3Rh dGVtZW50LgorICogU2VtaWNvbG9uIGlzIGNvbnNpZGVyZWQgYXMgc3RhdGVtZW50IHRlcm1pbmF0 b3IuICBJZiBvdXRmaWxlIGlzIHBhc3NlZCwgdGhlbgorICogdGhpcyB3aWxsIGNvcHkgYWxsIHNx bCBjb21tYW5kcyBpbnRvIG91dGZpbGUgcmF0aGVyIHRoZW4gZXhlY3V0aW5nIHRoZW0uCisgKi8K K3N0YXRpYyB2b2lkCitleGVjdXRlX2dsb2JhbF9zcWxfY29tbWFuZHMoUEdjb25uICpjb25uLCBj b25zdCBjaGFyICpkdW1wZGlycGF0aCwgY29uc3QgY2hhciAqb3V0ZmlsZSkKK3sKKwljaGFyICAg ICAgICAgICAgZ2xvYmFsX2ZpbGVfcGF0aFtNQVhQR1BBVEhdOworCVBHcmVzdWx0CQkqcmVzdWx0 OworCVN0cmluZ0luZm9EYXRhCXNxbHN0YXRlbWVudDsKKwlGSUxFCQkJKnBmaWxlOworCisJc25w cmludGYoZ2xvYmFsX2ZpbGVfcGF0aCwgTUFYUEdQQVRILCAiJXMvZ2xvYmFsLmRhdCIsIGR1bXBk aXJwYXRoKTsKKworCS8qIE5vdyBvcGVuIGdsb2JhbC5kYXQgZmlsZS4gKi8KKwlwZmlsZSA9IGZv cGVuKGdsb2JhbF9maWxlX3BhdGgsIFBHX0JJTkFSWV9SKTsKKworCWlmIChwZmlsZSA9PSBOVUxM KQorCQlwZ19mYXRhbCgiY291bGQgbm90IG9wZW4gZ2xvYmFsLmRhdCBmaWxlOiBcIiVzXCIiLCBn bG9iYWxfZmlsZV9wYXRoKTsKKworCS8qCisJICogSWYgb3V0ZmlsZSBpcyBnaXZlbiwgdGhlbiBq dXN0IGNvcHkgYWxsIGdsb2JhbC5kYXQgZmlsZSBkYXRhIGludG8KKwkgKiBvdXRmaWxlLgorCSAq LworCWlmIChvdXRmaWxlKQorCXsKKwkJY2hhciAgICAgICAgICAgIG91dF9maWxlX3BhdGhbTUFY UEdQQVRIXTsKKwkJRklMRSAgICAgICAgICAgICpvZmlsZTsKKwkJaW50CQkJCWM7CisKKwkJc25w cmludGYob3V0X2ZpbGVfcGF0aCwgTUFYUEdQQVRILCAiJXMiLCBvdXRmaWxlKTsKKworCQlvZmls ZSA9IGZvcGVuKG91dF9maWxlX3BhdGgsIFBHX0JJTkFSWV9XKTsKKworCQlpZiAob2ZpbGUgPT0g TlVMTCkKKwkJeworCQkJZmNsb3NlKHBmaWxlKTsKKwkJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgb3Bl biBmaWxlOiBcIiVzXCIiLCBvdXRfZmlsZV9wYXRoKTsKKwkJfQorCisJCS8qIE5vdyBhcHBlbmQg Z2xvYmFsLmRhdCBpbm90IG91dGZpbGUuICovCisJCXdoaWxlICgoYyA9IGZnZXRjKHBmaWxlKSkg IT0gRU9GKQorCQl7CisJCQlmcHV0YyhjLCBvZmlsZSk7CisJCX0KKworCQlmY2xvc2UocGZpbGUp OworCQlmY2xvc2Uob2ZpbGUpOworCQlyZXR1cm47CisJfQorCisJLyogSW5pdCBzcWxzdGF0ZW1l bnQgdG8gYXBwZW5kIGNvbW1hbmRzICovCisJaW5pdFN0cmluZ0luZm8oJnNxbHN0YXRlbWVudCk7 CisKKwkvKiBQcm9jZXNzIGZpbGUgdGlsbCBFT0YgYW5kIGV4ZWN1dGUgc3FsIHN0YXRlbWVudHMg Ki8KKwl3aGlsZSAoUmVhZE9uZVN0YXRlbWVudCgmc3Fsc3RhdGVtZW50LCBwZmlsZSkgIT0gRU9G KQorCXsKKwkJcmVzdWx0ID0gUFFleGVjKGNvbm4sIHNxbHN0YXRlbWVudC5kYXRhKTsKKworCQlz d2l0Y2ggKFBRcmVzdWx0U3RhdHVzKHJlc3VsdCkpCisJCXsKKwkJCWNhc2UgUEdSRVNfQ09NTUFO RF9PSzoKKwkJCWNhc2UgUEdSRVNfVFVQTEVTX09LOgorCQkJY2FzZSBQR1JFU19FTVBUWV9RVUVS WToKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJcGdfbG9nX2Vycm9yKCJjb3VsZCBub3Qg ZXhlY3V0ZSBxdWVyeTogXCIlc1wiIFxuQ29tbWFuZCB3YXM6IFwiJXNcIiIsIFBRZXJyb3JNZXNz YWdlKGNvbm4pLCBzcWxzdGF0ZW1lbnQuZGF0YSk7CisJCX0KKwkJUFFjbGVhcihyZXN1bHQpOwor CX0KKworCWZjbG9zZShwZmlsZSk7Cit9CisKKy8qCisgKiBzaW1wbGVfZGJfb2lkX2xpc3RfYXBw ZW5kCisgKgorICogYXBwZW5kcyBhIG5vZGUgdG8gdGhlIGxpc3QgaW4gdGhlIGVuZC4KKyAqLwor c3RhdGljIHZvaWQKK3NpbXBsZV9kYl9vaWRfbGlzdF9hcHBlbmQoU2ltcGxlRGF0YWJhc2VPaWRM aXN0ICpsaXN0LCBPaWQgZGJfb2lkLCBjb25zdCBjaGFyICpkYm5hbWUpCit7CisJU2ltcGxlRGF0 YWJhc2VPaWRMaXN0Q2VsbCAqY2VsbDsKKworCWNlbGwgPSBwZ19tYWxsb2Nfb2JqZWN0KFNpbXBs ZURhdGFiYXNlT2lkTGlzdENlbGwpOworCisJY2VsbC0+bmV4dCA9IE5VTEw7CisJY2VsbC0+ZGJf b2lkID0gZGJfb2lkOworCWNlbGwtPmRiX25hbWUgPSBwZ19zdHJkdXAoZGJuYW1lKTsKKworCWlm IChsaXN0LT50YWlsKQorCQlsaXN0LT50YWlsLT5uZXh0ID0gY2VsbDsKKwllbHNlCisJCWxpc3Qt PmhlYWQgPSBjZWxsOworCWxpc3QtPnRhaWwgPSBjZWxsOworfQorCisvKgorICogc2ltcGxlX2Ri X29pZF9mdWxsX2xpc3RfZGVsZXRlCisgKgorICogZGVsZXRlIGFsbCBjZWxsIGZyb20gZGJuYW1l IGFuZCBkYm9pZCBsaXN0LgorICovCitzdGF0aWMgdm9pZAorc2ltcGxlX2RiX29pZF9mdWxsX2xp c3RfZGVsZXRlKFNpbXBsZURhdGFiYXNlT2lkTGlzdCAqbGlzdCkKK3sKKwlTaW1wbGVEYXRhYmFz ZU9pZExpc3RDZWxsCSpjZWxsID0gbGlzdC0+aGVhZDsKKwlTaW1wbGVEYXRhYmFzZU9pZExpc3RD ZWxsCSpuZXh0Y2VsbCA9IE5VTEw7CisKKwl3aGlsZSAoY2VsbCkKKwl7CisJCW5leHRjZWxsID0g Y2VsbC0+bmV4dDsKKwkJcGZyZWUgKGNlbGwpOworCQljZWxsID0gbmV4dGNlbGw7CisJfQorCisJ bGlzdC0+aGVhZCA9IE5VTEw7CisJbGlzdC0+dGFpbCA9IE5VTEw7Cit9CisKKy8qCisgKiBzaW1w bGVfc3RyaW5nX2Z1bGxfbGlzdF9kZWxldGUKKyAqCisgKiBkZWxldGUgYWxsIGNlbGwgZnJvbSBz dHJpbmcgbGlzdC4KKyAqLworc3RhdGljIHZvaWQKK3NpbXBsZV9zdHJpbmdfZnVsbF9saXN0X2Rl bGV0ZShTaW1wbGVTdHJpbmdMaXN0ICpsaXN0KQoreworCVNpbXBsZVN0cmluZ0xpc3RDZWxsCSpj ZWxsID0gbGlzdC0+aGVhZDsKKwlTaW1wbGVTdHJpbmdMaXN0Q2VsbCAgICAqY2VsbG5leHQgPSBO VUxMOworCisJd2hpbGUgKGNlbGwpCisJeworCQljZWxsbmV4dCA9IGNlbGwtPm5leHQ7CisJCXBm cmVlKGNlbGwpOworCQljZWxsID0gY2VsbG5leHQ7CisJfQorCisJbGlzdC0+aGVhZCA9IE5VTEw7 CisJbGlzdC0+dGFpbCA9IE5VTEw7Cit9CisKKy8qCisgKiBzaW1wbGVfZGJfb2lkX2xpc3RfZGVs ZXRlCisgKgorICogZGVsZXRlIGNlbGwgZnJvbSBkYXRhYmFzZSBhbmQgb2lkIGxpc3QuCisgKi8K K3N0YXRpYyB2b2lkCitzaW1wbGVfZGJfb2lkX2xpc3RfZGVsZXRlKFNpbXBsZURhdGFiYXNlT2lk TGlzdCAqbGlzdCwgU2ltcGxlRGF0YWJhc2VPaWRMaXN0Q2VsbCAqY2VsbCwKKwkJU2ltcGxlRGF0 YWJhc2VPaWRMaXN0Q2VsbCAqcHJldikKK3sKKwlpZiAocHJldiA9PSBOVUxMKQorCXsKKwkJbGlz dC0+aGVhZCA9IGNlbGwtPm5leHQ7CisJCXBmcmVlKGNlbGwpOworCX0KKwllbHNlCisJeworCQlw cmV2LT5uZXh0ID0gY2VsbC0+bmV4dDsKKwkJcGZyZWUoY2VsbCk7CisJfQorfQorCisvKgorICog aXNfZnVsbF9wYXR0ZXJuCisgKgorICogVGhpcyB1c2VzIHN1YnN0cmluZyBmdW5jdGlvbiB0byBt YWtlIDFzdCBzdHJpbmcgZnJvbSBwYXR0ZXJuLgorICogT3V0c3RyaW5nIG9mIHN1YnN0cmluZyBm dW5jdGlvbiBpcyBjb21wYXJlZCB3aXRoIDFzdCBzdHJpbmcgdG8KKyAqIHZhbGlkYXRlIHRoaXMg cGF0dGVybi4KKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgMXN0IHN0cmluZyBjYW4gYmUgY29uc3Ry dWN0ZWQgZnJvbSBnaXZlbiBwYXR0ZXJuLgorICoKKyAqLworc3RhdGljIGJvb2wKK2lzX2Z1bGxf cGF0dGVybihQR2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKnN0ciwgY29uc3QgY2hhciAqcHRybikK K3sKKwlQUUV4cEJ1ZmZlcgkJcXVlcnk7CisJUEdyZXN1bHQJCSpyZXN1bHQ7CisKKwlxdWVyeSA9 IGNyZWF0ZVBRRXhwQnVmZmVyKCk7CisKKwlwcmludGZQUUV4cEJ1ZmZlcihxdWVyeSwKKwkJCSJT RUxFQ1Qgc3Vic3RyaW5nICggIgorCQkJIiAnJXMnICwgIgorCQkJIiAnJXMnICkgIiwgc3RyLCBw dHJuKTsKKworICAgcmVzdWx0ID0gZXhlY3V0ZVF1ZXJ5KGNvbm4sIHF1ZXJ5LT5kYXRhKTsKKwor CWlmIChQUXJlc3VsdFN0YXR1cyhyZXN1bHQpID09IFBHUkVTX1RVUExFU19PSykKKwl7CisJCWlm IChQUW50dXBsZXMocmVzdWx0KSA9PSAxKQorCQl7CisJCQljb25zdCBjaGFyCSpvdXRzdHIgPSBO VUxMOworCisJCQkvKgorCQkJICogSWYgb3V0cHV0IHN0cmluZyBvZiBzdWJzdHJpbmcgZnVuY3Rp b24gaXMgbWF0Y2hlcyB3aXRoIHN0ciwgdGhlbgorCQkJICogd2UgY2FuIGNvbnN0cnVjdCBzdHIg ZnJvbSBwYXR0ZXJuLgorCQkJICovCisJCQlpZiAoIVBRZ2V0aXNudWxsKHJlc3VsdCwgMCwgMCkp CisJCQkJb3V0c3RyID0gUFFnZXR2YWx1ZShyZXN1bHQsIDAsIDApOworCisJCQlpZiAob3V0c3Ry ICYmIHBnX3N0cmNhc2VjbXAob3V0c3RyLCBzdHIpID09IDApCisJCQl7CisJCQkJUFFjbGVhcihy ZXN1bHQpOworCQkJCWRlc3Ryb3lQUUV4cEJ1ZmZlcihxdWVyeSk7CisJCQkJcmV0dXJuIHRydWU7 CisJCQl9CisJCX0KKwl9CisJZWxzZQorCQlwZ19sb2dfZXJyb3IoImNvdWxkIG5vdCBleGVjdXRl IHF1ZXJ5OiBcIiVzXCIgXG5Db21tYW5kIHdhczogXCIlc1wiIiwgUFFlcnJvck1lc3NhZ2UoY29u biksIHF1ZXJ5LT5kYXRhKTsKKworCVBRY2xlYXIocmVzdWx0KTsKKwlkZXN0cm95UFFFeHBCdWZm ZXIocXVlcnkpOworCisJcmV0dXJuIGZhbHNlOworfQpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19k dW1wL3QvMDAxX2Jhc2ljLnBsIGIvc3JjL2Jpbi9wZ19kdW1wL3QvMDAxX2Jhc2ljLnBsCm9sZCBt b2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKaW5kZXggMjE0MjQwZjFhZTUuLjk2YTcyOGFkZmFi Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC90LzAwMV9iYXNpYy5wbAorKysgYi9zcmMvYmluL3BnX2R1 bXAvdC8wMDFfYmFzaWMucGwKQEAgLTIxOSw2ICsyMTksMTMgQEAgY29tbWFuZF9mYWlsc19saWtl KAogCSdwZ19yZXN0b3JlOiBvcHRpb25zIC1DXC8tLWNyZWF0ZSBhbmQgLTFcLy0tc2luZ2xlLXRy YW5zYWN0aW9uIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyJwogKTsKIAorY29tbWFuZF9mYWlsc19s aWtlKAorCVsgJ3BnX3Jlc3RvcmUnLCAnLXAnLCAkcG9ydCwgJy1mJywgJHBsYWluZmlsZSwKKwkJ Ii0tZXhjbHVkZS1kYXRhYmFzZT1ncmFiYWRnZSIsCisJCSctLWdsb2JhbHMtb25seScgXSwKKwlx ci9cUXBnX3Jlc3RvcmU6IGVycm9yOiBvcHRpb24gLS1leGNsdWRlLWRhdGFiYXNlIGNhbm5vdCBi ZSB1c2VkIHRvZ2V0aGVyIHdpdGggLWdcLy0tZ2xvYmFscy1vbmx5XEUvLAorCSdwZ19yZXN0b3Jl OiBvcHRpb24gLS1leGNsdWRlLWRhdGFiYXNlIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIHdpdGgg LWcvLS1nbG9iYWxzLW9ubHknKTsKKwogIyBhbHNvIGZhaWxzIGZvciAtciBhbmQgLXQsIGJ1dCBp dCBzZWVtcyBwb2ludGxlc3MgdG8gYWRkIG1vcmUgdGVzdHMgZm9yIHRob3NlLgogY29tbWFuZF9m YWlsc19saWtlKAogCVsgJ3BnX2R1bXBhbGwnLCAnLS1leGNsdWRlLWRhdGFiYXNlPWZvbycsICct LWdsb2JhbHMtb25seScgXSwKQEAgLTIyNiw0ICsyMzMsOCBAQCBjb21tYW5kX2ZhaWxzX2xpa2Uo CiAJJ3BnX2R1bXBhbGw6IG9wdGlvbiAtLWV4Y2x1ZGUtZGF0YWJhc2UgY2Fubm90IGJlIHVzZWQg dG9nZXRoZXIgd2l0aCAtZy8tLWdsb2JhbHMtb25seScKICk7CiAKK2NvbW1hbmRfZmFpbHNfbGlr ZSgKKwlbICdwZ19kdW1wYWxsJywgJy0tZm9ybWF0JywgJ3gnIF0sCisJcXIvXFFwZ19kdW1wYWxs OiBlcnJvcjogdW5yZWNvZ25pemVkIGFyY2hpdmUgZm9ybWF0ICJ4IjtcRS8sCisJJ3BnX2R1bXBh bGw6IHVucmVjb2duaXplZCBhcmNoaXZlIGZvcm1hdCcpOwogZG9uZV90ZXN0aW5nKCk7CmRpZmYg LS1naXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2lu ZGVudC90eXBlZGVmcy5saXN0CmluZGV4IGQ1YWE1YzI5NWFlLi41NjA4NTEyYWNlZCAxMDA2NDQK LS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3Bn aW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTI2NzIsNiArMjY3Miw4IEBAIFNodXRkb3duTW9kZQog U2lnblRTVmVjdG9yCiBTaW1wbGVBY3Rpb25MaXN0CiBTaW1wbGVBY3Rpb25MaXN0Q2VsbAorU2lt cGxlRGF0YWJhc2VPaWRMaXN0CitTaW1wbGVEYXRhYmFzZU9pZExpc3RDZWxsCiBTaW1wbGVFY29u dGV4dFN0YWNrRW50cnkKIFNpbXBsZU9pZExpc3QKIFNpbXBsZU9pZExpc3RDZWxsCi0tIAoyLjM5 LjMKCg== --00000000000046e92f062c3bef56--