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 1tYUpQ-00BMmx-5e for pgsql-hackers@arkaria.postgresql.org; Thu, 16 Jan 2025 18:42:53 +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 1tYUpN-00HYyB-SH for pgsql-hackers@arkaria.postgresql.org; Thu, 16 Jan 2025 18:42:50 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1tYUpN-00HYy2-Cc for pgsql-hackers@lists.postgresql.org; Thu, 16 Jan 2025 18:42:50 +0000 Received: from mail-wm1-x334.google.com ([2a00:1450:4864:20::334]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1tYUpL-000oXW-0V for pgsql-hackers@postgresql.org; Thu, 16 Jan 2025 18:42:49 +0000 Received: by mail-wm1-x334.google.com with SMTP id 5b1f17b1804b1-4361815b96cso8325805e9.1 for ; Thu, 16 Jan 2025 10:42:46 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1737052965; x=1737657765; 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=VbzOt8P/I8xBIRTwDaU9BfFTBlj4UzEw7P0yxPNw6iA=; b=DxeloHiBEmqKcdjoBBiccic6fy2m7REBHlqPKY2b4Qj4JkKs5Qgg9qKBzh+DO/4+lj K4tJaPPGYAVsA8IE61RHjXcBvOWePCprHNwXccy29wbzdzSDZ60Or2UjhHh4p7iAf1R0 QZN/ErzbRsRZGtfUcggj/aySx9GVMC/hojIxVORUqzzwZmup3De3Br1xkuQh9YvYSwSk uNGDWnuTT2+2lf3KoMKbjQSjGv1CUVKv2S2RtP1piANH2X4IbSV9VBQQEuQseXf3j1Cd Ro01LAY8pN4Xhx3+5ojuLw5HiomjWHlfKUFCspZEyfakAeBy1SGarhVdzmuFIen8TbMJ mH3g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1737052965; x=1737657765; 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=VbzOt8P/I8xBIRTwDaU9BfFTBlj4UzEw7P0yxPNw6iA=; b=to9yoiAA++eoRdaFuZK38mp9dpZx+xNkUOddLOBlMrVNSj4DB1tUp8Ddx+UlzmMXof jVZSf40ut6kZQ+9m1+NkgsRwVkrOGAw/Dc4nAS3oOiFGgc/FZwD1F7BrRuDWESzzLmAK A36sdPsFnANcQJEQZdC36dqVh/yIu0ixuTeBgl60+h8vUMxYb3YkAfIM1g4L6VlE/H75 eaF0lwysxSS4aaWju3DrnzHyGicpeWqywa7C6Usg4ODMbllLhjARmkztL7/bzyBLLTZS OYyAHkHSh1SReyJkpOXammY74DK2WMssIJWDtuQmWBzNK5FF/njWz/un7wkWXNAUUMpu 0OtA== X-Forwarded-Encrypted: i=1; AJvYcCX/eNsxgG3veHsh6DniEWk6slH8tkk+oeqirhooccxHRjWJ9Y/rwmC/GnNMKRxAqhrW105KIJ4l0mve/Bbr@postgresql.org X-Gm-Message-State: AOJu0Yx3Fkky171htcy5CnXzyoOJj0KAFtVg/K1+LrKbO3umR3wBm14x UQVYuUIO/0KO7c8OqAEPbgLHOFvPgJiiLlTON0OkQa53Gtgd9Z09Sjo1auC6EA8SDlC4cxnW7pS 599sAKvVW0V0cTuDjA20z9SdbrTs= X-Gm-Gg: ASbGnctA2pyn9yTB01NBRPRUhiJeV6Gj7rHUk2HYObJVBHTazSJxel85a1QULI6m4p+ 90NgjBKACWtg0bPkuHr8o0QXT7iJDZv0jTyUV3A== X-Google-Smtp-Source: AGHT+IGIfk/NDHYW3us+pTXtBVbeCdgHYVQypz2Smu4sl4Qfy5qI3QZdcw/yK/CZgka25KXhyrBVOPfqBdvQwf9mlcc= X-Received: by 2002:a05:600c:a44:b0:434:feb1:adcf with SMTP id 5b1f17b1804b1-436e26efe1fmr267388155e9.25.1737052964949; Thu, 16 Jan 2025 10:42:44 -0800 (PST) MIME-Version: 1.0 References: <202501110844.5ztsym4vbflm@alvherre.pgsql> In-Reply-To: From: Mahendra Singh Thalor Date: Fri, 17 Jan 2025 00:12:32 +0530 X-Gm-Features: AbW1kvbGTUA5oem6xJkCzqob0qREEpy0euhxt5sx6PWhPS9RFuuPnXYJXgrkXbk 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="000000000000eec35a062bd728c5" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000eec35a062bd728c5 Content-Type: text/plain; charset="UTF-8" Thanks Jian. On Thu, 16 Jan 2025 at 14:14, jian he wrote: > > hi. > > $BIN6/pg_dumpall --format=directory --verbose --file=test1 > pg_dumpall: executing SELECT pg_catalog.set_config('search_path', '', false); > pg_dumpall: error: could not create directory "test1": File exists > > we should first validate --file option, if not ok error out immediately. > if ok then connect to db then run the sql query? > > create_or_open_dir also needs to change. > > The attached is the minor change I came up with. As per your comment and suggestions, I merged the delta patch. I think, many places we are validating files after connection also. > } > opts->tocSummary is true (pg_restore --list), no query will be executed. > but your patch (pg_restore --list) may call execute_global_sql_commands, > which executes a query. > Okay. I will do more study for this case. > sscanf(line, "%u" , &db_oid); > sscanf(line, "%s" , db_oid_str); > i think it would be better > sscanf(line, "%u %s" , &db_oid, db_oid_str); No, we can't use this as dbname can be complex with multiple spaces. Ex: create database "database db is long string"; If we use %s, it will read only the first string till space. We can use something like: sscanf("%u %2000[^\n]s", &db_oid, db_oid_str); > > in doc/src/sgml/ref/pg_dumpall.sgml > Note: This option can be omitted only when --format=p|plain. > maybe change to > Note: This option can be omitted only when is plain. Fixed. > > --format=format section: > "" > Under this databases subdirectory, there will be subdirectory with > dboid name for each database. > "" > this sentence is not correct? because > drwxr-xr-x databases > .rw-rw-r-- global.dat > .rw-rw-r-- map.dat > > "databases" is a directory, and under the "database" directory, it's a > list of files. > each file filename is corresponding to a unique database name > so there is no subdirectory under subdirectory? If it is a directory format, then we will create a subdirectory. I did some modifications to this para in the latest patch. > > > in src/bin/pg_dump/meson.build > you need add 'common_dumpall_restore.c', to the pg_dump_common_sources section. > otherwise meson build cannot compile. > I think we should not add under pg_dump_common_sources, rather we should add it into pg_dumpall and pg_restore only. I added this. > > $BIN6/pg_restore --dbname=src6 --verbose --list $SRC6/dumpall.custom6 > pg_restore: error: option -C/--create should be specified when using > dump of pg_dumpall > this command should not fail? If a dump has multiple databases, then we should use -C option otherwise all dumps will be restored in a single db. As of now I removed this error and changed this to pg_log_info. > > > in doc/src/sgml/ref/pg_restore.sgml > > ... > > also need > plain > ? plain format is not supported with pg_restore. I added an error for this format. Here, I am attaching an updated patch for review and testing. -- Thanks and Regards Mahendra Singh Thalor EnterpriseDB: http://www.enterprisedb.com --000000000000eec35a062bd728c5 Content-Type: application/octet-stream; name="v10_pg_dumpall-with-directory-tar-custom-format-17-jan.patch" Content-Disposition: attachment; filename="v10_pg_dumpall-with-directory-tar-custom-format-17-jan.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m5zofk4f0 RnJvbSAwNTI0MWUxNzY5NDU3OWI2YzRmYmM1NGYwN2UwYWNlMDVjMGZjZDIzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYWhlbmRyYSBTaW5naCBUaGFsb3IgPG1haGk2cnVuQGdtYWls LmNvbT4KRGF0ZTogVGh1LCAxNiBKYW4gMjAyNSAyMzo1MTo0MCArMDUzMApTdWJqZWN0OiBbUEFU 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 Ci0tLQogZG9jL3NyYy9zZ21sL3JlZi9wZ19kdW1wYWxsLnNnbWwgICAgICAgICAgICB8ICA3OCAr Ky0KIGRvYy9zcmMvc2dtbC9yZWYvcGdfcmVzdG9yZS5zZ21sICAgICAgICAgICAgfCAgMjkgKwog c3JjL2Jpbi9wZ19kdW1wL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICB8ICAgOCArLQogc3Jj L2Jpbi9wZ19kdW1wL2NvbW1vbl9kdW1wYWxsX3Jlc3RvcmUuYyAgICB8IDMxNCArKysrKysrKysK IHNyYy9iaW4vcGdfZHVtcC9jb21tb25fZHVtcGFsbF9yZXN0b3JlLmggICAgfCAgMjYgKwogc3Jj L2Jpbi9wZ19kdW1wL21lc29uLmJ1aWxkICAgICAgICAgICAgICAgICB8ICAgMiArCiBzcmMvYmlu L3BnX2R1bXAvcGdfYmFja3VwLmggICAgICAgICAgICAgICAgIHwgICA0ICstCiBzcmMvYmluL3Bn X2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMgICAgICAgIHwgIDE1ICstCiBzcmMvYmluL3BnX2R1 bXAvcGdfYmFja3VwX3Rhci5jICAgICAgICAgICAgIHwgICAyICstCiBzcmMvYmluL3BnX2R1bXAv cGdfYmFja3VwX3V0aWxzLmMgICAgICAgICAgIHwgICAzICstCiBzcmMvYmluL3BnX2R1bXAvcGdf ZHVtcC5jICAgICAgICAgICAgICAgICAgIHwgICAyICstCiBzcmMvYmluL3BnX2R1bXAvcGdfZHVt cGFsbC5jICAgICAgICAgICAgICAgIHwgNTAzICsrKysrKy0tLS0tLS0tCiBzcmMvYmluL3BnX2R1 bXAvcGdfcmVzdG9yZS5jICAgICAgICAgICAgICAgIHwgNjk1ICsrKysrKysrKysrKysrKysrKyst CiBzcmMvYmluL3BnX2R1bXAvdC8wMDFfYmFzaWMucGwgICAgICAgICAgICAgIHwgICA0ICsKIHNy Yy9iaW4vcGdfZHVtcC90LzAwNV9wZ19kdW1wX2ZpbHRlcmZpbGUucGwgfCAgIDggKwogMTUgZmls ZXMgY2hhbmdlZCwgMTM1MyBpbnNlcnRpb25zKCspLCAzNDAgZGVsZXRpb25zKC0pCiBjcmVhdGUg bW9kZSAxMDA2NDQgc3JjL2Jpbi9wZ19kdW1wL2NvbW1vbl9kdW1wYWxsX3Jlc3RvcmUuYwogY3Jl YXRlIG1vZGUgMTAwNjQ0IHNyYy9iaW4vcGdfZHVtcC9jb21tb25fZHVtcGFsbF9yZXN0b3JlLmgK IG1vZGUgY2hhbmdlIDEwMDY0NCA9PiAxMDA3NTUgc3JjL2Jpbi9wZ19kdW1wL3QvMDAxX2Jhc2lj LnBsCgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3JlZi9wZ19kdW1wYWxsLnNnbWwgYi9kb2Mv c3JjL3NnbWwvcmVmL3BnX2R1bXBhbGwuc2dtbAppbmRleCAwMTRmMjc5MjU4OS4uOGNhNDlhNjU5 NzcgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9yZWYvcGdfZHVtcGFsbC5zZ21sCisrKyBiL2Rv Yy9zcmMvc2dtbC9yZWYvcGdfZHVtcGFsbC5zZ21sCkBAIC0xMjEsNyArMTIxLDgzIEBAIFBvc3Rn cmVTUUwgZG9jdW1lbnRhdGlvbgogICAgICAgIDxwYXJhPgogICAgICAgICBTZW5kIG91dHB1dCB0 byB0aGUgc3BlY2lmaWVkIGZpbGUuICBJZiB0aGlzIGlzIG9taXR0ZWQsIHRoZQogICAgICAgICBz dGFuZGFyZCBvdXRwdXQgaXMgdXNlZC4KLSAgICAgICA8L3BhcmE+CisgICAgICAgIE5vdGU6IFRo aXMgb3B0aW9uIGNhbiBiZSBvbWl0dGVkIG9ubHkgd2hlbiA8b3B0aW9uPi0tZm9ybWF0PC9vcHRp b24+IGlzIHBsYWluCisgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgPC92 YXJsaXN0ZW50cnk+CisKKzx2YXJsaXN0ZW50cnk+CisgICAgICA8dGVybT48b3B0aW9uPi1GIDxy ZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5mb3JtYXQ8L3JlcGxhY2VhYmxlPjwvb3B0aW9u PjwvdGVybT4KKyAgICAgIDx0ZXJtPjxvcHRpb24+LS1mb3JtYXQ9PHJlcGxhY2VhYmxlIGNsYXNz PSJwYXJhbWV0ZXIiPmZvcm1hdDwvcmVwbGFjZWFibGU+PC9vcHRpb24+PC90ZXJtPgorICAgICAg PGxpc3RpdGVtPgorICAgICAgIDxwYXJhPgorICAgICAgICBTcGVjaWZ5IGZvcm1hdCBvZiBkdW1w IGZpbGVzLiAgSWYgd2Ugd2FudCB0byBkdW1wIGFsbCB0aGUgZGF0YWJhc2VzLAorICAgICAgICB0 aGVuIHBhc3MgdGhpcyBhcyBub24tcGxhaW4gc28gdGhhdCBkdW1wIG9mIGFsbCBkYXRhYmFzZXMg Y2FuIGJlIHRha2VuCisgICAgICAgIGluIHNlcGFyYXRlIHN1YmRpcmVjdG9yeSBpbiBhcmNoaXZl IGZvcm1hdC4KKyAgICAgICAgYnkgZGVmYXVsdCwgdGhpcyBpcyBwbGFpbiBmb3JtYXQuCisKKyAg ICAgICAgSWYgbm9uLXBsYWluIG1vZGUgaXMgcGFzc2VkLCB0aGVuIGdsb2JhbC5kYXQgKGdsb2Jh bCBzcWwgY29tbWFuZHMpIGFuZAorICAgICAgICBtYXAuZGF0KGRib2lkIGFuZCBkYm5hbWVzIGxp c3Qgb2YgYWxsIHRoZSBkYXRhYmFzZXMpIGZpbGVzIHdpbGwgYmUgY3JlYXRlZC4KKyAgICAgICAg QXBhcnQgZnJvbSB0aGVzZSBmaWxlcywgb25lIHN1YmRpcmVjdG9yeSB3aXRoIGRhdGFiYXNlcyBu YW1lIHdpbGwgYmUgY3JlYXRlZC4KKyAgICAgICAgVW5kZXIgdGhpcyBkYXRhYmFzZXMgc3ViZGly ZWN0b3J5LCB0aGVyZSB3aWxsIGJlIGZpbGVzIHdpdGggZGJvaWQgbmFtZSBmb3IgZWFjaAorICAg ICAgICBkYXRhYmFzZSBhbmQgaWYgPG9wdGlvbj4tLWZvcm1hdDwvb3B0aW9uPiBpcyBkaXJlY3Rv cnksIHRoZW4gdG9jLmRhdCBhbmQgb3RoZXIKKyAgICAgICAgZHVtcCBmaWxlcyB3aWxsIGJlIHVu ZGVyIGRib2lkIHN1YmRpcmVjdG9yeS4KKworICAgICAgIDx2YXJpYWJsZWxpc3Q+CisgICAgICAg IDx2YXJsaXN0ZW50cnk+CisgICAgICAgICA8dGVybT48bGl0ZXJhbD5kPC9saXRlcmFsPjwvdGVy bT4KKyAgICAgICAgIDx0ZXJtPjxsaXRlcmFsPmRpcmVjdG9yeTwvbGl0ZXJhbD48L3Rlcm0+Cisg ICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgIE91dHB1dCBh IGRpcmVjdG9yeS1mb3JtYXQgYXJjaGl2ZSBzdWl0YWJsZSBmb3IgaW5wdXQgaW50byBwZ19yZXN0 b3JlLiBVbmRlciBkYm9pZAorICAgICAgICAgICBzdWJkaXJlY3RvcnksIHRoaXMgd2lsbCBjcmVh dGUgYSBkaXJlY3Rvcnkgd2l0aCBvbmUgZmlsZSBmb3IgZWFjaCB0YWJsZSBhbmQgbGFyZ2UKKyAg ICAgICAgICAgb2JqZWN0IGJlaW5nIGR1bXBlZCwgcGx1cyBhIHNvLWNhbGxlZCBUYWJsZSBvZiBD b250ZW50cyBmaWxlIGRlc2NyaWJpbmcgdGhlIGR1bXBlZAorICAgICAgICAgICBvYmplY3RzIGlu IGEgbWFjaGluZS1yZWFkYWJsZSBmb3JtYXQgdGhhdCBwZ19yZXN0b3JlIGNhbiByZWFkLiBBIGRp cmVjdG9yeSBmb3JtYXQKKyAgICAgICAgICAgYXJjaGl2ZSBjYW4gYmUgbWFuaXB1bGF0ZWQgd2l0 aCBzdGFuZGFyZCBVbml4IHRvb2xzOyBmb3IgZXhhbXBsZSwgZmlsZXMgaW4gYW4KKyAgICAgICAg ICAgdW5jb21wcmVzc2VkIGFyY2hpdmUgY2FuIGJlIGNvbXByZXNzZWQgd2l0aCB0aGUgZ3ppcCwg bHo0LCBvciB6c3RkIHRvb2xzLiBUaGlzCisgICAgICAgICAgIGZvcm1hdCBpcyBjb21wcmVzc2Vk IGJ5IGRlZmF1bHQgdXNpbmcgZ3ppcCBhbmQgYWxzbyBzdXBwb3J0cyBwYXJhbGxlbCBkdW1wcy4K KyAgICAgICAgICA8L3BhcmE+CisgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L3Zhcmxp c3RlbnRyeT4KKworICAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICAgPHRlcm0+PGxpdGVy YWw+cDwvbGl0ZXJhbD48L3Rlcm0+CisgICAgICAgICA8dGVybT48bGl0ZXJhbD5wbGFpbjwvbGl0 ZXJhbD48L3Rlcm0+CisgICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgPHBhcmE+CisgICAg ICAgICAgIE91dHB1dCBhIHBsYWluLXRleHQgU1FMIHNjcmlwdCBmaWxlICh0aGUgZGVmYXVsdCku CisgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC92YXJs aXN0ZW50cnk+CisKKyAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgIDx0ZXJtPjxsaXRl cmFsPmM8L2xpdGVyYWw+PC90ZXJtPgorICAgICAgICAgPHRlcm0+PGxpdGVyYWw+Y3VzdG9tPC9s aXRlcmFsPjwvdGVybT4KKyAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICA8cGFyYT4KKyAg ICAgICAgICAgT3V0cHV0IGEgY3VzdG9tLWZvcm1hdCBhcmNoaXZlIHN1aXRhYmxlIGZvciBpbnB1 dCBpbnRvIHBnX3Jlc3RvcmUuIFRvZ2V0aGVyIHdpdGggdGhlCisgICAgICAgICAgIGRpcmVjdG9y eSBvdXRwdXQgZm9ybWF0LCB0aGlzIGlzIHRoZSBtb3N0IGZsZXhpYmxlIG91dHB1dCBmb3JtYXQg aW4gdGhhdCBpdCBhbGxvd3MgbWFudWFsCisgICAgICAgICAgIHNlbGVjdGlvbiBhbmQgcmVvcmRl cmluZyBvZiBhcmNoaXZlZCBpdGVtcyBkdXJpbmcgcmVzdG9yZS4gVGhpcyBmb3JtYXQgaXMgYWxz bworICAgICAgICAgICBjb21wcmVzc2VkIGJ5IGRlZmF1bHQuCisgICAgICAgICAgPC9wYXJhPgor ICAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAgICAg IDx2YXJsaXN0ZW50cnk+CisgICAgICAgICA8dGVybT48bGl0ZXJhbD50PC9saXRlcmFsPjwvdGVy bT4KKyAgICAgICAgIDx0ZXJtPjxsaXRlcmFsPnRhcjwvbGl0ZXJhbD48L3Rlcm0+CisgICAgICAg ICA8bGlzdGl0ZW0+CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgIE91dHB1dCBhIHRhci1m b3JtYXQgYXJjaGl2ZSBzdWl0YWJsZSBmb3IgaW5wdXQgaW50byBwZ19yZXN0b3JlLiBUaGUgdGFy IGZvcm1hdCBpcworICAgICAgICAgICBjb21wYXRpYmxlIHdpdGggdGhlIGRpcmVjdG9yeSBmb3Jt YXQ6IGV4dHJhY3RpbmcgYSB0YXItZm9ybWF0IGFyY2hpdmUgcHJvZHVjZXMgYSB2YWxpZAorICAg ICAgICAgICBkaXJlY3RvcnktZm9ybWF0IGFyY2hpdmUuIEhvd2V2ZXIsIHRoZSB0YXIgZm9ybWF0 IGRvZXMgbm90IHN1cHBvcnQgY29tcHJlc3Npb24uIEFsc28sCisgICAgICAgICAgIHdoZW4gdXNp bmcgdGFyIGZvcm1hdCB0aGUgcmVsYXRpdmUgb3JkZXIgb2YgdGFibGUgZGF0YSBpdGVtcyBjYW5u b3QgYmUgY2hhbmdlZCBkdXJpbmcgcmVzdG9yZS4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAg ICA8L2xpc3RpdGVtPgorICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgICAgICA8L3Zhcmlh YmxlbGlzdD4KKyAgICAgICAgPC9wYXJhPgogICAgICAgPC9saXN0aXRlbT4KICAgICAgPC92YXJs aXN0ZW50cnk+CiAKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvcGdfcmVzdG9yZS5zZ21s IGIvZG9jL3NyYy9zZ21sL3JlZi9wZ19yZXN0b3JlLnNnbWwKaW5kZXggYjhiMjdlMTcxOWUuLmJh MjkxM2IzMzU2IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcmVmL3BnX3Jlc3RvcmUuc2dtbAor KysgYi9kb2Mvc3JjL3NnbWwvcmVmL3BnX3Jlc3RvcmUuc2dtbApAQCAtMTY2LDYgKzE2NiwyNSBA QCBQb3N0Z3JlU1FMIGRvY3VtZW50YXRpb24KICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgIDwvdmFy bGlzdGVudHJ5PgogCisgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICA8dGVybT48b3B0aW9uPi0t ZXhjbHVkZS1kYXRhYmFzZT08cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+cGF0dGVybjwv cmVwbGFjZWFibGU+PC9vcHRpb24+PC90ZXJtPgorICAgICAgPGxpc3RpdGVtPgorICAgICAgIDxw YXJhPgorICAgICAgICBEbyBub3QgcmVzdG9yZSBkYXRhYmFzZXMgd2hvc2UgbmFtZSBtYXRjaGVz CisgICAgICAgIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5wYXR0ZXJuPC9yZXBsYWNl YWJsZT4uCisgICAgICAgIE11bHRpcGxlIHBhdHRlcm5zIGNhbiBiZSBleGNsdWRlZCBieSB3cml0 aW5nIG11bHRpcGxlCisgICAgICAgIDxvcHRpb24+LS1leGNsdWRlLWRhdGFiYXNlPC9vcHRpb24+ IHN3aXRjaGVzLiAgVGhlCisgICAgICAgIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5w YXR0ZXJuPC9yZXBsYWNlYWJsZT4gcGFyYW1ldGVyIGlzCisgICAgICAgIGludGVycHJldGVkIGFz IGEgcGF0dGVybiBhY2NvcmRpbmcgdG8gdGhlIHNhbWUgcnVsZXMgdXNlZCBieQorICAgICAgICA8 YXBwbGljYXRpb24+cHNxbDwvYXBwbGljYXRpb24+J3MgPGxpdGVyYWw+XGQ8L2xpdGVyYWw+Cisg ICAgICAgIGNvbW1hbmRzIChzZWUgPHhyZWYgbGlua2VuZD0iYXBwLXBzcWwtcGF0dGVybnMiLz4p LAorICAgICAgICBzbyBtdWx0aXBsZSBkYXRhYmFzZXMgY2FuIGFsc28gYmUgZXhjbHVkZWQgYnkg d3JpdGluZyB3aWxkY2FyZAorICAgICAgICBjaGFyYWN0ZXJzIGluIHRoZSBwYXR0ZXJuLiAgV2hl biB1c2luZyB3aWxkY2FyZHMsIGJlIGNhcmVmdWwgdG8KKyAgICAgICAgcXVvdGUgdGhlIHBhdHRl cm4gaWYgbmVlZGVkIHRvIHByZXZlbnQgc2hlbGwgd2lsZGNhcmQgZXhwYW5zaW9uLgorICAgICAg IDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgIDwvdmFybGlzdGVudHJ5PgorCiAgICAg IDx2YXJsaXN0ZW50cnk+CiAgICAgICA8dGVybT48b3B0aW9uPi1lPC9vcHRpb24+PC90ZXJtPgog ICAgICAgPHRlcm0+PG9wdGlvbj4tLWV4aXQtb24tZXJyb3I8L29wdGlvbj48L3Rlcm0+CkBAIC0z MTUsNiArMzM0LDE2IEBAIFBvc3RncmVTUUwgZG9jdW1lbnRhdGlvbgogICAgICAgPC9saXN0aXRl bT4KICAgICAgPC92YXJsaXN0ZW50cnk+CiAKKyAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgIDx0 ZXJtPjxvcHRpb24+LWc8L29wdGlvbj48L3Rlcm0+CisgICAgICA8dGVybT48b3B0aW9uPi0tZ2xv YmFscy1vbmx5PC9vcHRpb24+PC90ZXJtPgorICAgICAgPGxpc3RpdGVtPgorICAgICAgIDxwYXJh PgorICAgICAgICBSZXN0b3JlIG9ubHkgZ2xvYmFsIG9iamVjdHMgKHJvbGVzIGFuZCB0YWJsZXNw YWNlcyksIG5vIGRhdGFiYXNlcy4KKyAgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgor ICAgICA8L3Zhcmxpc3RlbnRyeT4KKwogICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgPHRlcm0+ PG9wdGlvbj4tSSA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+aW5kZXg8L3JlcGxhY2Vh YmxlPjwvb3B0aW9uPjwvdGVybT4KICAgICAgIDx0ZXJtPjxvcHRpb24+LS1pbmRleD08cmVwbGFj ZWFibGUgY2xhc3M9InBhcmFtZXRlciI+aW5kZXg8L3JlcGxhY2VhYmxlPjwvb3B0aW9uPjwvdGVy bT4KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9NYWtlZmlsZSBiL3NyYy9iaW4vcGdfZHVt cC9NYWtlZmlsZQppbmRleCAyMzNhZDE1Y2E3NS4uYTRlNTU3ZDYyYzcgMTAwNjQ0Ci0tLSBhL3Ny Yy9iaW4vcGdfZHVtcC9NYWtlZmlsZQorKysgYi9zcmMvYmluL3BnX2R1bXAvTWFrZWZpbGUKQEAg LTQ3LDExICs0NywxMSBAQCBhbGw6IHBnX2R1bXAgcGdfcmVzdG9yZSBwZ19kdW1wYWxsCiBwZ19k dW1wOiBwZ19kdW1wLm8gY29tbW9uLm8gcGdfZHVtcF9zb3J0Lm8gJChPQkpTKSB8IHN1Ym1ha2Ut bGlicHEgc3VibWFrZS1saWJwZ3BvcnQgc3VibWFrZS1saWJwZ2ZldXRpbHMKIAkkKENDKSAkKENG TEFHUykgcGdfZHVtcC5vIGNvbW1vbi5vIHBnX2R1bXBfc29ydC5vICQoT0JKUykgJChMREZMQUdT KSAkKExERkxBR1NfRVgpICQoTElCUykgLW8gJEAkKFgpCiAKLXBnX3Jlc3RvcmU6IHBnX3Jlc3Rv cmUubyAkKE9CSlMpIHwgc3VibWFrZS1saWJwcSBzdWJtYWtlLWxpYnBncG9ydCBzdWJtYWtlLWxp YnBnZmV1dGlscwotCSQoQ0MpICQoQ0ZMQUdTKSBwZ19yZXN0b3JlLm8gJChPQkpTKSAkKExERkxB R1MpICQoTERGTEFHU19FWCkgJChMSUJTKSAtbyAkQCQoWCkKK3BnX3Jlc3RvcmU6IHBnX3Jlc3Rv cmUubyBjb21tb25fZHVtcGFsbF9yZXN0b3JlLm8gJChPQkpTKSB8IHN1Ym1ha2UtbGlicHEgc3Vi bWFrZS1saWJwZ3BvcnQgc3VibWFrZS1saWJwZ2ZldXRpbHMKKwkkKENDKSAkKENGTEFHUykgcGdf cmVzdG9yZS5vIGNvbW1vbl9kdW1wYWxsX3Jlc3RvcmUubyAkKE9CSlMpICQoTERGTEFHUykgJChM REZMQUdTX0VYKSAkKExJQlMpIC1vICRAJChYKQogCi1wZ19kdW1wYWxsOiBwZ19kdW1wYWxsLm8g ZHVtcHV0aWxzLm8gZmlsdGVyLm8gJChXSU4zMlJFUykgfCBzdWJtYWtlLWxpYnBxIHN1Ym1ha2Ut bGlicGdwb3J0IHN1Ym1ha2UtbGlicGdmZXV0aWxzCi0JJChDQykgJChDRkxBR1MpIHBnX2R1bXBh bGwubyBkdW1wdXRpbHMubyBmaWx0ZXIubyAkKFdJTjMyUkVTKSAkKExERkxBR1MpICQoTERGTEFH U19FWCkgJChMSUJTKSAtbyAkQCQoWCkKK3BnX2R1bXBhbGw6IHBnX2R1bXBhbGwubyBkdW1wdXRp bHMubyBmaWx0ZXIubyBjb21tb25fZHVtcGFsbF9yZXN0b3JlLm8gJChXSU4zMlJFUykgfCBzdWJt YWtlLWxpYnBxIHN1Ym1ha2UtbGlicGdwb3J0IHN1Ym1ha2UtbGlicGdmZXV0aWxzCisJJChDQykg JChDRkxBR1MpIHBnX2R1bXBhbGwubyBkdW1wdXRpbHMubyBmaWx0ZXIubyBjb21tb25fZHVtcGFs bF9yZXN0b3JlLm8gJChXSU4zMlJFUykgJChMREZMQUdTKSAkKExERkxBR1NfRVgpICQoTElCUykg LW8gJEAkKFgpCiAKIGluc3RhbGw6IGFsbCBpbnN0YWxsZGlycwogCSQoSU5TVEFMTF9QUk9HUkFN KSBwZ19kdW1wJChYKSAnJChERVNURElSKSQoYmluZGlyKScvcGdfZHVtcCQoWCkKZGlmZiAtLWdp dCBhL3NyYy9iaW4vcGdfZHVtcC9jb21tb25fZHVtcGFsbF9yZXN0b3JlLmMgYi9zcmMvYmluL3Bn X2R1bXAvY29tbW9uX2R1bXBhbGxfcmVzdG9yZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwMDAwLi5hY2U1MDc3MDg1YwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iaW4vcGdf ZHVtcC9jb21tb25fZHVtcGFsbF9yZXN0b3JlLmMKQEAgLTAsMCArMSwzMTQgQEAKKy8qLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorICoKKyAqIGNvbW1vbl9kdW1wYWxsX3Jlc3RvcmUuYworICoKKyAqIFBvcnRp b25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVu dCBHcm91cAorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBV bml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKKyAqCisgKiB0aGlzIGlzIGEgY29tbW9uIGZpbGUgZm9y IHBnX2R1bXBhbGwgYW5kIHBnX3Jlc3RvcmUuCisgKiBzcmMvYmluL3BnX2R1bXAvY29tbW9uX2R1 bXBhbGxfcmVzdG9yZS5jCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworI2luY2x1ZGUg InBvc3RncmVzX2ZlLmgiCisKKyNpbmNsdWRlICJjb21tb24vY29ubmVjdC5oIgorI2luY2x1ZGUg ImNvbW1vbi9sb2dnaW5nLmgiCisjaW5jbHVkZSAiY29tbW9uL3N0cmluZy5oIgorI2luY2x1ZGUg ImNvbW1vbl9kdW1wYWxsX3Jlc3RvcmUuaCIKKyNpbmNsdWRlICJkdW1wdXRpbHMuaCIKKyNpbmNs dWRlICJmZV91dGlscy9zdHJpbmdfdXRpbHMuaCIKKworc3RhdGljIGNoYXIgKmNvbnN0cnVjdENv bm5TdHIoY29uc3QgY2hhciAqKmtleXdvcmRzLCBjb25zdCBjaGFyICoqdmFsdWVzKTsKKyNkZWZp bmUgZXhpdF9uaWNlbHkoY29kZSkgZXhpdChjb2RlKQorCisvKgorICogTWFrZSBhIGRhdGFiYXNl IGNvbm5lY3Rpb24gd2l0aCB0aGUgZ2l2ZW4gcGFyYW1ldGVycy4gIEFuCisgKiBpbnRlcmFjdGl2 ZSBwYXNzd29yZCBwcm9tcHQgaXMgYXV0b21hdGljYWxseSBpc3N1ZWQgaWYgcmVxdWlyZWQuCisg KgorICogSWYgZmFpbF9vbl9lcnJvciBpcyBmYWxzZSwgd2UgcmV0dXJuIE5VTEwgd2l0aG91dCBw cmludGluZyBhbnkgbWVzc2FnZQorICogb24gZmFpbHVyZSwgYnV0IHByZXNlcnZlIGFueSBwcm9t cHRlZCBwYXNzd29yZCBmb3IgdGhlIG5leHQgdHJ5LgorICoKKyAqIE9uIHN1Y2Nlc3MsIHRoZSBn bG9iYWwgdmFyaWFibGUgJ2Nvbm5zdHInIGlzIHNldCB0byBhIGNvbm5lY3Rpb24gc3RyaW5nCisg KiBjb250YWluaW5nIHRoZSBvcHRpb25zIHVzZWQuCisgKi8KK1BHY29ubiAqCitjb25uZWN0RGF0 YWJhc2UoY29uc3QgY2hhciAqZGJuYW1lLCBjb25zdCBjaGFyICpjb25uZWN0aW9uX3N0cmluZywK KwkJCQljb25zdCBjaGFyICpwZ2hvc3QsIGNvbnN0IGNoYXIgKnBncG9ydCwgY29uc3QgY2hhciAq cGd1c2VyLAorCQkJCXRyaXZhbHVlIHByb21wdF9wYXNzd29yZCwgYm9vbCBmYWlsX29uX2Vycm9y LCBjb25zdCBjaGFyICpwcm9nbmFtZSwKKwkJCQljb25zdCBjaGFyICoqY29ubnN0ciwgaW50ICpz ZXJ2ZXJfdmVyc2lvbikKK3sKKwlQR2Nvbm4JICAgKmNvbm47CisJYm9vbAkJbmV3X3Bhc3M7CisJ Y29uc3QgY2hhciAqcmVtb3RldmVyc2lvbl9zdHI7CisJaW50CQkJbXlfdmVyc2lvbjsKKwljb25z dCBjaGFyICoqa2V5d29yZHMgPSBOVUxMOworCWNvbnN0IGNoYXIgKip2YWx1ZXMgPSBOVUxMOwor CVBRY29ubmluZm9PcHRpb24gKmNvbm5fb3B0cyA9IE5VTEw7CisJc3RhdGljIGNoYXIgKnBhc3N3 b3JkID0gTlVMTDsKKwlpbnQJCQlzZXJ2ZXJfdmVyc2lvbl90ZW1wOworCisJaWYgKHByb21wdF9w YXNzd29yZCA9PSBUUklfWUVTICYmICFwYXNzd29yZCkKKwkJcGFzc3dvcmQgPSBzaW1wbGVfcHJv bXB0KCJQYXNzd29yZDogIiwgZmFsc2UpOworCisJLyoKKwkgKiBTdGFydCB0aGUgY29ubmVjdGlv bi4gIExvb3AgdW50aWwgd2UgaGF2ZSBhIHBhc3N3b3JkIGlmIHJlcXVlc3RlZCBieQorCSAqIGJh Y2tlbmQuCisJICovCisJZG8KKwl7CisJCWludAkJCWFyZ2NvdW50ID0gNjsKKwkJUFFjb25uaW5m b09wdGlvbiAqY29ubl9vcHQ7CisJCWNoYXIJICAgKmVycl9tc2cgPSBOVUxMOworCQlpbnQJCQlp ID0gMDsKKworCQlmcmVlKGtleXdvcmRzKTsKKwkJZnJlZSh2YWx1ZXMpOworCQlQUWNvbm5pbmZv RnJlZShjb25uX29wdHMpOworCisJCS8qCisJCSAqIE1lcmdlIHRoZSBjb25uZWN0aW9uIGluZm8g aW5wdXRzIGdpdmVuIGluIGZvcm0gb2YgY29ubmVjdGlvbiBzdHJpbmcKKwkJICogYW5kIG90aGVy IG9wdGlvbnMuICBFeHBsaWNpdGx5IGRpc2NhcmQgYW55IGRibmFtZSB2YWx1ZSBpbiB0aGUKKwkJ ICogY29ubmVjdGlvbiBzdHJpbmc7IG90aGVyd2lzZSwgUFFjb25uZWN0ZGJQYXJhbXMoKSB3b3Vs ZCBpbnRlcnByZXQKKwkJICogdGhhdCB2YWx1ZSBhcyBiZWluZyBpdHNlbGYgYSBjb25uZWN0aW9u IHN0cmluZy4KKwkJICovCisJCWlmIChjb25uZWN0aW9uX3N0cmluZykKKwkJeworCQkJY29ubl9v cHRzID0gUFFjb25uaW5mb1BhcnNlKGNvbm5lY3Rpb25fc3RyaW5nLCAmZXJyX21zZyk7CisJCQlp ZiAoY29ubl9vcHRzID09IE5VTEwpCisJCQkJcGdfZmF0YWwoIiVzIiwgZXJyX21zZyk7CisKKwkJ CWZvciAoY29ubl9vcHQgPSBjb25uX29wdHM7IGNvbm5fb3B0LT5rZXl3b3JkICE9IE5VTEw7IGNv bm5fb3B0KyspCisJCQl7CisJCQkJaWYgKGNvbm5fb3B0LT52YWwgIT0gTlVMTCAmJiBjb25uX29w dC0+dmFsWzBdICE9ICdcMCcgJiYKKwkJCQkJc3RyY21wKGNvbm5fb3B0LT5rZXl3b3JkLCAiZGJu YW1lIikgIT0gMCkKKwkJCQkJYXJnY291bnQrKzsKKwkJCX0KKworCQkJa2V5d29yZHMgPSBwZ19t YWxsb2MwKChhcmdjb3VudCArIDEpICogc2l6ZW9mKCprZXl3b3JkcykpOworCQkJdmFsdWVzID0g cGdfbWFsbG9jMCgoYXJnY291bnQgKyAxKSAqIHNpemVvZigqdmFsdWVzKSk7CisKKwkJCWZvciAo Y29ubl9vcHQgPSBjb25uX29wdHM7IGNvbm5fb3B0LT5rZXl3b3JkICE9IE5VTEw7IGNvbm5fb3B0 KyspCisJCQl7CisJCQkJaWYgKGNvbm5fb3B0LT52YWwgIT0gTlVMTCAmJiBjb25uX29wdC0+dmFs WzBdICE9ICdcMCcgJiYKKwkJCQkJc3RyY21wKGNvbm5fb3B0LT5rZXl3b3JkLCAiZGJuYW1lIikg IT0gMCkKKwkJCQl7CisJCQkJCWtleXdvcmRzW2ldID0gY29ubl9vcHQtPmtleXdvcmQ7CisJCQkJ CXZhbHVlc1tpXSA9IGNvbm5fb3B0LT52YWw7CisJCQkJCWkrKzsKKwkJCQl9CisJCQl9CisJCX0K KwkJZWxzZQorCQl7CisJCQlrZXl3b3JkcyA9IHBnX21hbGxvYzAoKGFyZ2NvdW50ICsgMSkgKiBz aXplb2YoKmtleXdvcmRzKSk7CisJCQl2YWx1ZXMgPSBwZ19tYWxsb2MwKChhcmdjb3VudCArIDEp ICogc2l6ZW9mKCp2YWx1ZXMpKTsKKwkJfQorCisJCWlmIChwZ2hvc3QpCisJCXsKKwkJCWtleXdv cmRzW2ldID0gImhvc3QiOworCQkJdmFsdWVzW2ldID0gcGdob3N0OworCQkJaSsrOworCQl9CisJ CWlmIChwZ3BvcnQpCisJCXsKKwkJCWtleXdvcmRzW2ldID0gInBvcnQiOworCQkJdmFsdWVzW2ld ID0gcGdwb3J0OworCQkJaSsrOworCQl9CisJCWlmIChwZ3VzZXIpCisJCXsKKwkJCWtleXdvcmRz W2ldID0gInVzZXIiOworCQkJdmFsdWVzW2ldID0gcGd1c2VyOworCQkJaSsrOworCQl9CisJCWlm IChwYXNzd29yZCkKKwkJeworCQkJa2V5d29yZHNbaV0gPSAicGFzc3dvcmQiOworCQkJdmFsdWVz W2ldID0gcGFzc3dvcmQ7CisJCQlpKys7CisJCX0KKwkJaWYgKGRibmFtZSkKKwkJeworCQkJa2V5 d29yZHNbaV0gPSAiZGJuYW1lIjsKKwkJCXZhbHVlc1tpXSA9IGRibmFtZTsKKwkJCWkrKzsKKwkJ fQorCQlrZXl3b3Jkc1tpXSA9ICJmYWxsYmFja19hcHBsaWNhdGlvbl9uYW1lIjsKKwkJdmFsdWVz W2ldID0gcHJvZ25hbWU7CisJCWkrKzsKKworCQluZXdfcGFzcyA9IGZhbHNlOworCQljb25uID0g UFFjb25uZWN0ZGJQYXJhbXMoa2V5d29yZHMsIHZhbHVlcywgdHJ1ZSk7CisKKwkJaWYgKCFjb25u KQorCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBjb25uZWN0IHRvIGRhdGFiYXNlIFwiJXNcIiIsIGRi bmFtZSk7CisKKwkJaWYgKFBRc3RhdHVzKGNvbm4pID09IENPTk5FQ1RJT05fQkFEICYmCisJCQlQ UWNvbm5lY3Rpb25OZWVkc1Bhc3N3b3JkKGNvbm4pICYmCisJCQkhcGFzc3dvcmQgJiYKKwkJCXBy b21wdF9wYXNzd29yZCAhPSBUUklfTk8pCisJCXsKKwkJCVBRZmluaXNoKGNvbm4pOworCQkJcGFz c3dvcmQgPSBzaW1wbGVfcHJvbXB0KCJQYXNzd29yZDogIiwgZmFsc2UpOworCQkJbmV3X3Bhc3Mg PSB0cnVlOworCQl9CisJfSB3aGlsZSAobmV3X3Bhc3MpOworCisJLyogY2hlY2sgdG8gc2VlIHRo YXQgdGhlIGJhY2tlbmQgY29ubmVjdGlvbiB3YXMgc3VjY2Vzc2Z1bGx5IG1hZGUgKi8KKwlpZiAo UFFzdGF0dXMoY29ubikgPT0gQ09OTkVDVElPTl9CQUQpCisJeworCQlpZiAoZmFpbF9vbl9lcnJv cikKKwkJCXBnX2ZhdGFsKCIlcyIsIFBRZXJyb3JNZXNzYWdlKGNvbm4pKTsKKwkJZWxzZQorCQl7 CisJCQlQUWZpbmlzaChjb25uKTsKKworCQkJZnJlZShrZXl3b3Jkcyk7CisJCQlmcmVlKHZhbHVl cyk7CisJCQlQUWNvbm5pbmZvRnJlZShjb25uX29wdHMpOworCisJCQlyZXR1cm4gTlVMTDsKKwkJ fQorCX0KKworCS8qCisJICogT2ssIGNvbm5lY3RlZCBzdWNjZXNzZnVsbHkuIFJlbWVtYmVyIHRo ZSBvcHRpb25zIHVzZWQsIGluIHRoZSBmb3JtIG9mIGEKKwkgKiBjb25uZWN0aW9uIHN0cmluZy4K KwkgKi8KKwlpZiAoY29ubnN0cikKKwkJKmNvbm5zdHIgPSBjb25zdHJ1Y3RDb25uU3RyKGtleXdv cmRzLCB2YWx1ZXMpOworCisJZnJlZShrZXl3b3Jkcyk7CisJZnJlZSh2YWx1ZXMpOworCVBRY29u bmluZm9GcmVlKGNvbm5fb3B0cyk7CisKKwkvKiBDaGVjayB2ZXJzaW9uICovCisJcmVtb3RldmVy c2lvbl9zdHIgPSBQUXBhcmFtZXRlclN0YXR1cyhjb25uLCAic2VydmVyX3ZlcnNpb24iKTsKKwlp ZiAoIXJlbW90ZXZlcnNpb25fc3RyKQorCQlwZ19mYXRhbCgiY291bGQgbm90IGdldCBzZXJ2ZXIg dmVyc2lvbiIpOworCXNlcnZlcl92ZXJzaW9uX3RlbXAgPSBQUXNlcnZlclZlcnNpb24oY29ubik7 CisJaWYgKHNlcnZlcl92ZXJzaW9uX3RlbXAgPT0gMCkKKwkJcGdfZmF0YWwoImNvdWxkIG5vdCBw YXJzZSBzZXJ2ZXIgdmVyc2lvbiBcIiVzXCIiLAorCQkJCSByZW1vdGV2ZXJzaW9uX3N0cik7CisK KwkvKiBJZiBuZWVkZWQsIHRoZW4gY29weSBzZXJ2ZXIgdmVyc2lvbiB0byBvdXRlciBmdW5jdGlv bi4gKi8KKwlpZiAoc2VydmVyX3ZlcnNpb24pCisJCSpzZXJ2ZXJfdmVyc2lvbiA9IHNlcnZlcl92 ZXJzaW9uX3RlbXA7CisKKwlteV92ZXJzaW9uID0gUEdfVkVSU0lPTl9OVU07CisKKwkvKgorCSAq IFdlIGFsbG93IHRoZSBzZXJ2ZXIgdG8gYmUgYmFjayB0byA5LjIsIGFuZCB1cCB0byBhbnkgbWlu b3IgcmVsZWFzZSBvZgorCSAqIG91ciBvd24gbWFqb3IgdmVyc2lvbi4gIChTZWUgYWxzbyB2ZXJz aW9uIGNoZWNrIGluIHBnX2R1bXAuYy4pCisJICovCisJaWYgKG15X3ZlcnNpb24gIT0gc2VydmVy X3ZlcnNpb25fdGVtcAorCQkmJiAoc2VydmVyX3ZlcnNpb25fdGVtcCA8IDkwMjAwIHx8CisJCQko c2VydmVyX3ZlcnNpb25fdGVtcCAvIDEwMCkgPiAobXlfdmVyc2lvbiAvIDEwMCkpKQorCXsKKwkJ cGdfbG9nX2Vycm9yKCJhYm9ydGluZyBiZWNhdXNlIG9mIHNlcnZlciB2ZXJzaW9uIG1pc21hdGNo Iik7CisJCXBnX2xvZ19lcnJvcl9kZXRhaWwoInNlcnZlciB2ZXJzaW9uOiAlczsgJXMgdmVyc2lv bjogJXMiLAorCQkJCQkJCXJlbW90ZXZlcnNpb25fc3RyLCBwcm9nbmFtZSwgUEdfVkVSU0lPTik7 CisJCWV4aXRfbmljZWx5KDEpOworCX0KKworCVBRY2xlYXIoZXhlY3V0ZVF1ZXJ5KGNvbm4sIEFM V0FZU19TRUNVUkVfU0VBUkNIX1BBVEhfU1FMKSk7CisKKwlyZXR1cm4gY29ubjsKK30KKworLyog LS0tLS0tLS0tLQorICogQ29uc3RydWN0IGEgY29ubmVjdGlvbiBzdHJpbmcgZnJvbSB0aGUgZ2l2 ZW4ga2V5d29yZC92YWx1ZSBwYWlycy4gSXQgaXMKKyAqIHVzZWQgdG8gcGFzcyB0aGUgY29ubmVj dGlvbiBvcHRpb25zIHRvIHRoZSBwZ19kdW1wIHN1YnByb2Nlc3MuCisgKgorICogVGhlIGZvbGxv d2luZyBwYXJhbWV0ZXJzIGFyZSBleGNsdWRlZDoKKyAqCWRibmFtZQkJLSB2YXJpZXMgaW4gZWFj aCBwZ19kdW1wIGludm9jYXRpb24KKyAqCXBhc3N3b3JkCS0gaXQncyBub3Qgc2VjdXJlIHRvIHBh c3MgYSBwYXNzd29yZCBvbiB0aGUgY29tbWFuZCBsaW5lCisgKglmYWxsYmFja19hcHBsaWNhdGlv bl9uYW1lIC0gd2UnbGwgbGV0IHBnX2R1bXAgc2V0IGl0CisgKiAtLS0tLS0tLS0tCisgKi8KK3N0 YXRpYyBjaGFyICoKK2NvbnN0cnVjdENvbm5TdHIoY29uc3QgY2hhciAqKmtleXdvcmRzLCBjb25z dCBjaGFyICoqdmFsdWVzKQoreworCVBRRXhwQnVmZmVyIGJ1ZiA9IGNyZWF0ZVBRRXhwQnVmZmVy KCk7CisJY2hhcgkgICAqY29ubnN0cjsKKwlpbnQJCQlpOworCWJvb2wJCWZpcnN0a2V5d29yZCA9 IHRydWU7CisKKwkvKiBDb25zdHJ1Y3QgYSBuZXcgY29ubmVjdGlvbiBzdHJpbmcgaW4ga2V5PSd2 YWx1ZScgZm9ybWF0LiAqLworCWZvciAoaSA9IDA7IGtleXdvcmRzW2ldICE9IE5VTEw7IGkrKykK Kwl7CisJCWlmIChzdHJjbXAoa2V5d29yZHNbaV0sICJkYm5hbWUiKSA9PSAwIHx8CisJCQlzdHJj bXAoa2V5d29yZHNbaV0sICJwYXNzd29yZCIpID09IDAgfHwKKwkJCXN0cmNtcChrZXl3b3Jkc1tp XSwgImZhbGxiYWNrX2FwcGxpY2F0aW9uX25hbWUiKSA9PSAwKQorCQkJY29udGludWU7CisKKwkJ aWYgKCFmaXJzdGtleXdvcmQpCisJCQlhcHBlbmRQUUV4cEJ1ZmZlckNoYXIoYnVmLCAnICcpOwor CQlmaXJzdGtleXdvcmQgPSBmYWxzZTsKKwkJYXBwZW5kUFFFeHBCdWZmZXIoYnVmLCAiJXM9Iiwg a2V5d29yZHNbaV0pOworCQlhcHBlbmRDb25uU3RyVmFsKGJ1ZiwgdmFsdWVzW2ldKTsKKwl9CisK Kwljb25uc3RyID0gcGdfc3RyZHVwKGJ1Zi0+ZGF0YSk7CisJZGVzdHJveVBRRXhwQnVmZmVyKGJ1 Zik7CisJcmV0dXJuIGNvbm5zdHI7Cit9CisKKy8qCisgKiBSdW4gYSBxdWVyeSwgcmV0dXJuIHRo ZSByZXN1bHRzLCBleGl0IHByb2dyYW0gb24gZmFpbHVyZS4KKyAqLworUEdyZXN1bHQgKgorZXhl Y3V0ZVF1ZXJ5KFBHY29ubiAqY29ubiwgY29uc3QgY2hhciAqcXVlcnkpCit7CisJUEdyZXN1bHQg ICAqcmVzOworCisJcGdfbG9nX2luZm8oImV4ZWN1dGluZyAlcyIsIHF1ZXJ5KTsKKworCXJlcyA9 IFBRZXhlYyhjb25uLCBxdWVyeSk7CisJaWYgKCFyZXMgfHwKKwkJUFFyZXN1bHRTdGF0dXMocmVz KSAhPSBQR1JFU19UVVBMRVNfT0spCisJeworCQlwZ19sb2dfZXJyb3IoInF1ZXJ5IGZhaWxlZDog JXMiLCBQUWVycm9yTWVzc2FnZShjb25uKSk7CisJCXBnX2xvZ19lcnJvcl9kZXRhaWwoIlF1ZXJ5 IHdhczogJXMiLCBxdWVyeSk7CisJCVBRZmluaXNoKGNvbm4pOworCQlleGl0X25pY2VseSgxKTsK Kwl9CisKKwlyZXR1cm4gcmVzOworfQorCisvKgorICogcGFyc2VEdW1wRm9ybWF0CisgKgorICog VGhpcyB3aWxsIHZhbGlkYXRlIGR1bXAgZm9ybWF0cy4KKyAqLworQXJjaGl2ZUZvcm1hdAorcGFy c2VEdW1wRm9ybWF0KGNvbnN0IGNoYXIgKmZvcm1hdCkKK3sKKwlBcmNoaXZlRm9ybWF0CWFyY2hE dW1wRm9ybWF0OworCisJaWYgKHBnX3N0cmNhc2VjbXAoZm9ybWF0LCAiYyIpID09IDApCisJCWFy Y2hEdW1wRm9ybWF0ID0gYXJjaEN1c3RvbTsKKwllbHNlIGlmIChwZ19zdHJjYXNlY21wKGZvcm1h dCwgImN1c3RvbSIpID09IDApCisJCWFyY2hEdW1wRm9ybWF0ID0gYXJjaEN1c3RvbTsKKwllbHNl IGlmIChwZ19zdHJjYXNlY21wKGZvcm1hdCwgImQiKSA9PSAwKQorCQlhcmNoRHVtcEZvcm1hdCA9 IGFyY2hEaXJlY3Rvcnk7CisJZWxzZSBpZiAocGdfc3RyY2FzZWNtcChmb3JtYXQsICJkaXJlY3Rv cnkiKSA9PSAwKQorCQlhcmNoRHVtcEZvcm1hdCA9IGFyY2hEaXJlY3Rvcnk7CisJZWxzZSBpZiAo cGdfc3RyY2FzZWNtcChmb3JtYXQsICJwIikgPT0gMCkKKwkJYXJjaER1bXBGb3JtYXQgPSBhcmNo TnVsbDsKKwllbHNlIGlmIChwZ19zdHJjYXNlY21wKGZvcm1hdCwgInBsYWluIikgPT0gMCkKKwkJ YXJjaER1bXBGb3JtYXQgPSBhcmNoTnVsbDsKKwllbHNlIGlmIChwZ19zdHJjYXNlY21wKGZvcm1h dCwgInQiKSA9PSAwKQorCQlhcmNoRHVtcEZvcm1hdCA9IGFyY2hUYXI7CisJZWxzZSBpZiAocGdf c3RyY2FzZWNtcChmb3JtYXQsICJ0YXIiKSA9PSAwKQorCQlhcmNoRHVtcEZvcm1hdCA9IGFyY2hU YXI7CisJZWxzZQorCQlwZ19mYXRhbCgidW5yZWNvZ25pemVkIGFyY2hpdmUgZm9ybWF0IFwiJXNc IjsgcGxlYXNlIHNwZWNpZnkgXCJjXCIsIFwiZFwiLCBvciBcInRcIiIsCisJCQkJZm9ybWF0KTsK KworCXJldHVybiBhcmNoRHVtcEZvcm1hdDsKK30KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVt cC9jb21tb25fZHVtcGFsbF9yZXN0b3JlLmggYi9zcmMvYmluL3BnX2R1bXAvY29tbW9uX2R1bXBh bGxfcmVzdG9yZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5hMjdj M2U5ZmI4OQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9jb21tb25fZHVtcGFs bF9yZXN0b3JlLmgKQEAgLTAsMCArMSwyNiBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICog Y29tbW9uX2R1bXBhbGxfcmVzdG9yZS5oCisgKiAgICAgIENvbW1vbiBoZWFkZXIgZmlsZSBmb3Ig cGdfZHVtcGFsbCBhbmQgcGdfcmVzdG9yZQorICoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykg MTk5Ni0yMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICogUG9ydGlv bnMgQ29weXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlm b3JuaWEKKyAqCisgKiBJREVOVElGSUNBVElPTgorICogICAgc3JjL2Jpbi9wZ19kdW1wL2NvbW1v bl9kdW1wYWxsX3Jlc3RvcmUuaAorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaWZuZGVm IENPTU1PTl9EVU1QQUxMX1JFU1RPUkVfSAorI2RlZmluZSBDT01NT05fRFVNUEFMTF9SRVNUT1JF X0gKKworI2luY2x1ZGUgInBnX2JhY2t1cC5oIgorCitleHRlcm4gUEdjb25uICpjb25uZWN0RGF0 YWJhc2UoY29uc3QgY2hhciAqZGJuYW1lLAorCQljb25zdCBjaGFyICpjb25uZWN0aW9uX3N0cmlu ZywgY29uc3QgY2hhciAqcGdob3N0LAorCQljb25zdCBjaGFyICpwZ3BvcnQsIGNvbnN0IGNoYXIg KnBndXNlciwKKwkJdHJpdmFsdWUgcHJvbXB0X3Bhc3N3b3JkLCBib29sIGZhaWxfb25fZXJyb3Is CisJCWNvbnN0IGNoYXIgKnByb2duYW1lLCBjb25zdCBjaGFyICoqY29ubnN0ciwgaW50ICpzZXJ2 ZXJfdmVyc2lvbik7CitleHRlcm4gIFBHcmVzdWx0ICpleGVjdXRlUXVlcnkoUEdjb25uICpjb25u LCBjb25zdCBjaGFyICpxdWVyeSk7CitleHRlcm4gQXJjaGl2ZUZvcm1hdCBwYXJzZUR1bXBGb3Jt YXQoY29uc3QgY2hhciAqZm9ybWF0KTsKKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAg LyogQ09NTU9OX0RVTVBBTExfUkVTVE9SRV9IICovCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1 bXAvbWVzb24uYnVpbGQgYi9zcmMvYmluL3BnX2R1bXAvbWVzb24uYnVpbGQKaW5kZXggNjAzYmE2 Y2ZiZjAuLmRkZWNhYzVjZjA5IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvbWVzb24uYnVp bGQKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL21lc29uLmJ1aWxkCkBAIC00OSw2ICs0OSw3IEBAIGJp bl90YXJnZXRzICs9IHBnX2R1bXAKIAogcGdfZHVtcGFsbF9zb3VyY2VzID0gZmlsZXMoCiAgICdw Z19kdW1wYWxsLmMnLAorICAnY29tbW9uX2R1bXBhbGxfcmVzdG9yZS5jJywKICkKIAogaWYgaG9z dF9zeXN0ZW0gPT0gJ3dpbmRvd3MnCkBAIC02OCw2ICs2OSw3IEBAIGJpbl90YXJnZXRzICs9IHBn X2R1bXBhbGwKIAogcGdfcmVzdG9yZV9zb3VyY2VzID0gZmlsZXMoCiAgICdwZ19yZXN0b3JlLmMn LAorICAnY29tbW9uX2R1bXBhbGxfcmVzdG9yZS5jJywKICkKIAogaWYgaG9zdF9zeXN0ZW0gPT0g J3dpbmRvd3MnCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwLmggYi9zcmMv YmluL3BnX2R1bXAvcGdfYmFja3VwLmgKaW5kZXggZjBmMTliYjBiMjkuLjY1MDAwZTVhMDgzIDEw MDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwLmgKKysrIGIvc3JjL2Jpbi9wZ19k dW1wL3BnX2JhY2t1cC5oCkBAIC0zMDYsNyArMzA2LDcgQEAgZXh0ZXJuIHZvaWQgU2V0QXJjaGl2 ZU9wdGlvbnMoQXJjaGl2ZSAqQUgsIER1bXBPcHRpb25zICpkb3B0LCBSZXN0b3JlT3B0aW9ucyAq cm8KIAogZXh0ZXJuIHZvaWQgUHJvY2Vzc0FyY2hpdmVSZXN0b3JlT3B0aW9ucyhBcmNoaXZlICpB SFgpOwogCi1leHRlcm4gdm9pZCBSZXN0b3JlQXJjaGl2ZShBcmNoaXZlICpBSFgpOworZXh0ZXJu IHZvaWQgUmVzdG9yZUFyY2hpdmUoQXJjaGl2ZSAqQUhYLCBib29sIGFwcGVuZF9kYXRhKTsKIAog LyogT3BlbiBhbiBleGlzdGluZyBhcmNoaXZlICovCiBleHRlcm4gQXJjaGl2ZSAqT3BlbkFyY2hp dmUoY29uc3QgY2hhciAqRmlsZVNwZWMsIGNvbnN0IEFyY2hpdmVGb3JtYXQgZm10KTsKQEAgLTMx OSw3ICszMTksNyBAQCBleHRlcm4gQXJjaGl2ZSAqQ3JlYXRlQXJjaGl2ZShjb25zdCBjaGFyICpG aWxlU3BlYywgY29uc3QgQXJjaGl2ZUZvcm1hdCBmbXQsCiAJCQkJCQkJICBEYXRhRGlyU3luY01l dGhvZCBzeW5jX21ldGhvZCk7CiAKIC8qIFRoZSAtLWxpc3Qgb3B0aW9uICovCi1leHRlcm4gdm9p ZCBQcmludFRPQ1N1bW1hcnkoQXJjaGl2ZSAqQUhYKTsKK2V4dGVybiB2b2lkIFByaW50VE9DU3Vt bWFyeShBcmNoaXZlICpBSFgsIGJvb2wgYXBwZW5kX2RhdGEpOwogCiBleHRlcm4gUmVzdG9yZU9w dGlvbnMgKk5ld1Jlc3RvcmVPcHRpb25zKHZvaWQpOwogCmRpZmYgLS1naXQgYS9zcmMvYmluL3Bn X2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2Fy Y2hpdmVyLmMKaW5kZXggNzA3YTNmYzg0NGMuLjcxNTNkNGE0MGI2IDEwMDY0NAotLS0gYS9zcmMv YmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3Bn X2JhY2t1cF9hcmNoaXZlci5jCkBAIC04Miw3ICs4Miw3IEBAIHN0YXRpYyBpbnQJUmVzdG9yaW5n VG9EQihBcmNoaXZlSGFuZGxlICpBSCk7CiBzdGF0aWMgdm9pZCBkdW1wX2xvX2J1ZihBcmNoaXZl SGFuZGxlICpBSCk7CiBzdGF0aWMgdm9pZCBkdW1wVGltZXN0YW1wKEFyY2hpdmVIYW5kbGUgKkFI LCBjb25zdCBjaGFyICptc2csIHRpbWVfdCB0aW0pOwogc3RhdGljIHZvaWQgU2V0T3V0cHV0KEFy Y2hpdmVIYW5kbGUgKkFILCBjb25zdCBjaGFyICpmaWxlbmFtZSwKLQkJCQkJICBjb25zdCBwZ19j b21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3NwZWMpOworCQkJY29uc3QgcGdfY29t cHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjLCBib29sIGFwcGVuZF9kYXRhKTsK IHN0YXRpYyBDb21wcmVzc0ZpbGVIYW5kbGUgKlNhdmVPdXRwdXQoQXJjaGl2ZUhhbmRsZSAqQUgp Owogc3RhdGljIHZvaWQgUmVzdG9yZU91dHB1dChBcmNoaXZlSGFuZGxlICpBSCwgQ29tcHJlc3NG aWxlSGFuZGxlICpzYXZlZE91dHB1dCk7CiAKQEAgLTMzMyw3ICszMzMsNyBAQCBQcm9jZXNzQXJj aGl2ZVJlc3RvcmVPcHRpb25zKEFyY2hpdmUgKkFIWCkKIAogLyogUHVibGljICovCiB2b2lkCi1S ZXN0b3JlQXJjaGl2ZShBcmNoaXZlICpBSFgpCitSZXN0b3JlQXJjaGl2ZShBcmNoaXZlICpBSFgs IGJvb2wgYXBwZW5kX2RhdGEpCiB7CiAJQXJjaGl2ZUhhbmRsZSAqQUggPSAoQXJjaGl2ZUhhbmRs ZSAqKSBBSFg7CiAJUmVzdG9yZU9wdGlvbnMgKnJvcHQgPSBBSC0+cHVibGljLnJvcHQ7CkBAIC00 NTAsNyArNDUwLDcgQEAgUmVzdG9yZUFyY2hpdmUoQXJjaGl2ZSAqQUhYKQogCSAqLwogCXNhdiA9 IFNhdmVPdXRwdXQoQUgpOwogCWlmIChyb3B0LT5maWxlbmFtZSB8fCByb3B0LT5jb21wcmVzc2lv bl9zcGVjLmFsZ29yaXRobSAhPSBQR19DT01QUkVTU0lPTl9OT05FKQotCQlTZXRPdXRwdXQoQUgs IHJvcHQtPmZpbGVuYW1lLCByb3B0LT5jb21wcmVzc2lvbl9zcGVjKTsKKwkJU2V0T3V0cHV0KEFI LCByb3B0LT5maWxlbmFtZSwgcm9wdC0+Y29tcHJlc3Npb25fc3BlYywgYXBwZW5kX2RhdGEpOwog CiAJYWhwcmludGYoQUgsICItLVxuLS0gUG9zdGdyZVNRTCBkYXRhYmFzZSBkdW1wXG4tLVxuXG4i KTsKIApAQCAtMTI2Myw3ICsxMjYzLDcgQEAgQXJjaGl2ZUVudHJ5KEFyY2hpdmUgKkFIWCwgQ2F0 YWxvZ0lkIGNhdGFsb2dJZCwgRHVtcElkIGR1bXBJZCwKIAogLyogUHVibGljICovCiB2b2lkCi1Q cmludFRPQ1N1bW1hcnkoQXJjaGl2ZSAqQUhYKQorUHJpbnRUT0NTdW1tYXJ5KEFyY2hpdmUgKkFI WCwgYm9vbCBhcHBlbmRfZGF0YSkKIHsKIAlBcmNoaXZlSGFuZGxlICpBSCA9IChBcmNoaXZlSGFu ZGxlICopIEFIWDsKIAlSZXN0b3JlT3B0aW9ucyAqcm9wdCA9IEFILT5wdWJsaWMucm9wdDsKQEAg LTEyNzksNyArMTI3OSw3IEBAIFByaW50VE9DU3VtbWFyeShBcmNoaXZlICpBSFgpCiAKIAlzYXYg PSBTYXZlT3V0cHV0KEFIKTsKIAlpZiAocm9wdC0+ZmlsZW5hbWUpCi0JCVNldE91dHB1dChBSCwg cm9wdC0+ZmlsZW5hbWUsIG91dF9jb21wcmVzc2lvbl9zcGVjKTsKKwkJU2V0T3V0cHV0KEFILCBy b3B0LT5maWxlbmFtZSwgb3V0X2NvbXByZXNzaW9uX3NwZWMsIGFwcGVuZF9kYXRhKTsKIAogCWlm IChzdHJmdGltZShzdGFtcF9zdHIsIHNpemVvZihzdGFtcF9zdHIpLCBQR0RVTVBfU1RSRlRJTUVf Rk1ULAogCQkJCSBsb2NhbHRpbWUoJkFILT5jcmVhdGVEYXRlKSkgPT0gMCkKQEAgLTE2NTgsNyAr MTY1OCw4IEBAIGFyY2hwcmludGYoQXJjaGl2ZSAqQUgsIGNvbnN0IGNoYXIgKmZtdCwuLi4pCiAK IHN0YXRpYyB2b2lkCiBTZXRPdXRwdXQoQXJjaGl2ZUhhbmRsZSAqQUgsIGNvbnN0IGNoYXIgKmZp bGVuYW1lLAotCQkgIGNvbnN0IHBnX2NvbXByZXNzX3NwZWNpZmljYXRpb24gY29tcHJlc3Npb25f c3BlYykKKwkJICBjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNzaW9uX3Nw ZWMsCisJCSAgYm9vbCBhcHBlbmRfZGF0YSkKIHsKIAlDb21wcmVzc0ZpbGVIYW5kbGUgKkNGSDsK IAljb25zdCBjaGFyICptb2RlOwpAQCAtMTY3OCw3ICsxNjc5LDcgQEAgU2V0T3V0cHV0KEFyY2hp dmVIYW5kbGUgKkFILCBjb25zdCBjaGFyICpmaWxlbmFtZSwKIAllbHNlCiAJCWZuID0gZmlsZW5v KHN0ZG91dCk7CiAKLQlpZiAoQUgtPm1vZGUgPT0gYXJjaE1vZGVBcHBlbmQpCisJaWYgKGFwcGVu ZF9kYXRhIHx8IEFILT5tb2RlID09IGFyY2hNb2RlQXBwZW5kKQogCQltb2RlID0gUEdfQklOQVJZ X0E7CiAJZWxzZQogCQltb2RlID0gUEdfQklOQVJZX1c7CmRpZmYgLS1naXQgYS9zcmMvYmluL3Bn X2R1bXAvcGdfYmFja3VwX3Rhci5jIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF90YXIuYwpp bmRleCBiNWJhM2I0NmRkOS4uZDk0ZDBkZTJhNWQgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVt cC9wZ19iYWNrdXBfdGFyLmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF90YXIuYwpA QCAtODI2LDcgKzgyNiw3IEBAIF9DbG9zZUFyY2hpdmUoQXJjaGl2ZUhhbmRsZSAqQUgpCiAJCXNh dlZlcmJvc2UgPSBBSC0+cHVibGljLnZlcmJvc2U7CiAJCUFILT5wdWJsaWMudmVyYm9zZSA9IDA7 CiAKLQkJUmVzdG9yZUFyY2hpdmUoKEFyY2hpdmUgKikgQUgpOworCQlSZXN0b3JlQXJjaGl2ZSgo QXJjaGl2ZSAqKSBBSCwgZmFsc2UpOwogCiAJCVNldEFyY2hpdmVPcHRpb25zKChBcmNoaXZlICop IEFILCBzYXZEb3B0LCBzYXZSb3B0KTsKIApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3Bn X2JhY2t1cF91dGlscy5jIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF91dGlscy5jCmluZGV4 IDc5YWVjNWY1MTU4Li5mNzBlYTkyMzNmZSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3Bn X2JhY2t1cF91dGlscy5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfdXRpbHMuYwpA QCAtMjEsNyArMjEsOCBAQAogLyogR2xvYmFscyBleHBvcnRlZCBieSB0aGlzIGZpbGUgKi8KIGNv bnN0IGNoYXIgKnByb2duYW1lID0gTlVMTDsKIAotI2RlZmluZSBNQVhfT05fRVhJVF9OSUNFTFkJ CQkJMjAKKy8qIFRPRE86IGluY3JlYXNpbmcgdGhpcyB0byBrZWVwIDEwMCBkYiByZXN0b3Jpbmcg Ynkgc2luZ2xlIHBnX3Jlc3RvcmUgY29tbWFuZC4gKi8KKyNkZWZpbmUgTUFYX09OX0VYSVRfTklD RUxZCQkJCTEwMAogCiBzdGF0aWMgc3RydWN0CiB7CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1 bXAvcGdfZHVtcC5jIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYwppbmRleCA4ZjczYTVkZjk1 Ni4uZWFlNjI2ZjYyMTMgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMKKysr IGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYwpAQCAtMTE0Nyw3ICsxMTQ3LDcgQEAgbWFpbihp bnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJICogcmlnaHQgbm93LgogCSAqLwogCWlmIChwbGFpblRl eHQpCi0JCVJlc3RvcmVBcmNoaXZlKGZvdXQpOworCQlSZXN0b3JlQXJjaGl2ZShmb3V0LCBmYWxz ZSk7CiAKIAlDbG9zZUFyY2hpdmUoZm91dCk7CiAKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVt cC9wZ19kdW1wYWxsLmMgYi9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcGFsbC5jCmluZGV4IDM5NmY3 OTc4MWM1Li44NDA5MzU5YjliNCAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXBh bGwuYworKysgYi9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcGFsbC5jCkBAIC0xNSw2ICsxNSw3IEBA CiAKICNpbmNsdWRlICJwb3N0Z3Jlc19mZS5oIgogCisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KICNp bmNsdWRlIDx0aW1lLmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAKQEAgLTI0LDE0ICsyNSwxNyBA QAogI2luY2x1ZGUgImNvbW1vbi9oYXNoZm5fdW5zdGFibGUuaCIKICNpbmNsdWRlICJjb21tb24v bG9nZ2luZy5oIgogI2luY2x1ZGUgImNvbW1vbi9zdHJpbmcuaCIKKyNpbmNsdWRlICJjb21tb25f ZHVtcGFsbF9yZXN0b3JlLmgiCiAjaW5jbHVkZSAiZHVtcHV0aWxzLmgiCiAjaW5jbHVkZSAiZmVf dXRpbHMvc3RyaW5nX3V0aWxzLmgiCiAjaW5jbHVkZSAiZmlsdGVyLmgiCiAjaW5jbHVkZSAiZ2V0 b3B0X2xvbmcuaCIKICNpbmNsdWRlICJwZ19iYWNrdXAuaCIKKyNpbmNsdWRlICJwZ19iYWNrdXBf YXJjaGl2ZXIuaCIKIAogLyogdmVyc2lvbiBzdHJpbmcgd2UgZXhwZWN0IGJhY2sgZnJvbSBwZ19k dW1wICovCiAjZGVmaW5lIFBHRFVNUF9WRVJTSU9OU1RSICJwZ19kdW1wIChQb3N0Z3JlU1FMKSAi IFBHX1ZFUlNJT04gIlxuIgorI2RlZmluZSBleGl0X25pY2VseShjb2RlKSBleGl0KGNvZGUpCiAK IHR5cGVkZWYgc3RydWN0CiB7CkBAIC02NCwyOCArNjgsMjQgQEAgc3RhdGljIHZvaWQgZHJvcFRh Ymxlc3BhY2VzKFBHY29ubiAqY29ubik7CiBzdGF0aWMgdm9pZCBkdW1wVGFibGVzcGFjZXMoUEdj b25uICpjb25uKTsKIHN0YXRpYyB2b2lkIGRyb3BEQnMoUEdjb25uICpjb25uKTsKIHN0YXRpYyB2 b2lkIGR1bXBVc2VyQ29uZmlnKFBHY29ubiAqY29ubiwgY29uc3QgY2hhciAqdXNlcm5hbWUpOwot c3RhdGljIHZvaWQgZHVtcERhdGFiYXNlcyhQR2Nvbm4gKmNvbm4pOworc3RhdGljIHZvaWQgZHVt cERhdGFiYXNlcyhQR2Nvbm4gKmNvbm4sIEFyY2hpdmVGb3JtYXQgYXJjaER1bXBGb3JtYXQpOwog c3RhdGljIHZvaWQgZHVtcFRpbWVzdGFtcChjb25zdCBjaGFyICptc2cpOwotc3RhdGljIGludAly dW5QZ0R1bXAoY29uc3QgY2hhciAqZGJuYW1lLCBjb25zdCBjaGFyICpjcmVhdGVfb3B0cyk7Citz dGF0aWMgaW50IHJ1blBnRHVtcChjb25zdCBjaGFyICpkYm5hbWUsIGNvbnN0IGNoYXIgKmNyZWF0 ZV9vcHRzLAorCQkJCQkgY2hhciAqZGJmaWxlLCBBcmNoaXZlRm9ybWF0IGFyY2hEdW1wRm9ybWF0 KTsKIHN0YXRpYyB2b2lkIGJ1aWxkU2hTZWNMYWJlbHMoUEdjb25uICpjb25uLAogCQkJCQkJCSBj b25zdCBjaGFyICpjYXRhbG9nX25hbWUsIE9pZCBvYmplY3RJZCwKIAkJCQkJCQkgY29uc3QgY2hh ciAqb2JqdHlwZSwgY29uc3QgY2hhciAqb2JqbmFtZSwKIAkJCQkJCQkgUFFFeHBCdWZmZXIgYnVm ZmVyKTsKLXN0YXRpYyBQR2Nvbm4gKmNvbm5lY3REYXRhYmFzZShjb25zdCBjaGFyICpkYm5hbWUs Ci0JCQkJCQkJICAgY29uc3QgY2hhciAqY29ubmVjdGlvbl9zdHJpbmcsIGNvbnN0IGNoYXIgKnBn aG9zdCwKLQkJCQkJCQkgICBjb25zdCBjaGFyICpwZ3BvcnQsIGNvbnN0IGNoYXIgKnBndXNlciwK LQkJCQkJCQkgICB0cml2YWx1ZSBwcm9tcHRfcGFzc3dvcmQsIGJvb2wgZmFpbF9vbl9lcnJvcik7 Ci1zdGF0aWMgY2hhciAqY29uc3RydWN0Q29ublN0cihjb25zdCBjaGFyICoqa2V5d29yZHMsIGNv bnN0IGNoYXIgKip2YWx1ZXMpOwotc3RhdGljIFBHcmVzdWx0ICpleGVjdXRlUXVlcnkoUEdjb25u ICpjb25uLCBjb25zdCBjaGFyICpxdWVyeSk7CiBzdGF0aWMgdm9pZCBleGVjdXRlQ29tbWFuZChQ R2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKnF1ZXJ5KTsKIHN0YXRpYyB2b2lkIGV4cGFuZF9kYm5h bWVfcGF0dGVybnMoUEdjb25uICpjb25uLCBTaW1wbGVTdHJpbmdMaXN0ICpwYXR0ZXJucywKIAkJ CQkJCQkJICAgU2ltcGxlU3RyaW5nTGlzdCAqbmFtZXMpOwogc3RhdGljIHZvaWQgcmVhZF9kdW1w YWxsX2ZpbHRlcnMoY29uc3QgY2hhciAqZmlsZW5hbWUsIFNpbXBsZVN0cmluZ0xpc3QgKnBhdHRl cm4pOworc3RhdGljIHZvaWQgY3JlYXRlX29yX29wZW5fZGlyKGNvbnN0IGNoYXIgKmRpcm5hbWUp OwogCiBzdGF0aWMgY2hhciBwZ19kdW1wX2JpbltNQVhQR1BBVEhdOwogc3RhdGljIGNvbnN0IGNo YXIgKnByb2duYW1lOwogc3RhdGljIFBRRXhwQnVmZmVyIHBnZHVtcG9wdHM7Ci1zdGF0aWMgY2hh ciAqY29ubnN0ciA9ICIiOworc3RhdGljIGNvbnN0IGNoYXIgKmNvbm5zdHIgPSAiIjsKIHN0YXRp YyBib29sIG91dHB1dF9jbGVhbiA9IGZhbHNlOwogc3RhdGljIGJvb2wgc2tpcF9hY2xzID0gZmFs c2U7CiBzdGF0aWMgYm9vbCB2ZXJib3NlID0gZmFsc2U7CkBAIC0xMDcsNyArMTA3LDcgQEAgc3Rh dGljIGludAlub19zdWJzY3JpcHRpb25zID0gMDsKIHN0YXRpYyBpbnQJbm9fdG9hc3RfY29tcHJl c3Npb24gPSAwOwogc3RhdGljIGludAlub191bmxvZ2dlZF90YWJsZV9kYXRhID0gMDsKIHN0YXRp YyBpbnQJbm9fcm9sZV9wYXNzd29yZHMgPSAwOwotc3RhdGljIGludAlzZXJ2ZXJfdmVyc2lvbjsK K3N0YXRpYyBpbnQgc2VydmVyX3ZlcnNpb247CiBzdGF0aWMgaW50CWxvYWRfdmlhX3BhcnRpdGlv bl9yb290ID0gMDsKIHN0YXRpYyBpbnQJb25fY29uZmxpY3RfZG9fbm90aGluZyA9IDA7CiAKQEAg LTEyMSw4ICsxMjEsNiBAQCBzdGF0aWMgY2hhciAqZmlsZW5hbWUgPSBOVUxMOwogc3RhdGljIFNp bXBsZVN0cmluZ0xpc3QgZGF0YWJhc2VfZXhjbHVkZV9wYXR0ZXJucyA9IHtOVUxMLCBOVUxMfTsK IHN0YXRpYyBTaW1wbGVTdHJpbmdMaXN0IGRhdGFiYXNlX2V4Y2x1ZGVfbmFtZXMgPSB7TlVMTCwg TlVMTH07CiAKLSNkZWZpbmUgZXhpdF9uaWNlbHkoY29kZSkgZXhpdChjb2RlKQotCiBpbnQKIG1h aW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIHsKQEAgLTE0Nyw2ICsxNDUsNyBAQCBtYWluKGlu dCBhcmdjLCBjaGFyICphcmd2W10pCiAJCXsicGFzc3dvcmQiLCBub19hcmd1bWVudCwgTlVMTCwg J1cnfSwKIAkJeyJuby1wcml2aWxlZ2VzIiwgbm9fYXJndW1lbnQsIE5VTEwsICd4J30sCiAJCXsi bm8tYWNsIiwgbm9fYXJndW1lbnQsIE5VTEwsICd4J30sCisJCXsiZm9ybWF0IiwgcmVxdWlyZWRf YXJndW1lbnQsIE5VTEwsICdGJ30sCiAKIAkJLyoKIAkJICogdGhlIGZvbGxvd2luZyBvcHRpb25z IGRvbid0IGhhdmUgYW4gZXF1aXZhbGVudCBzaG9ydCBvcHRpb24gbGV0dGVyCkBAIC0xODgsNiAr MTg3LDggQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCWNoYXIJICAgKnBnZGIgPSBO VUxMOwogCWNoYXIJICAgKnVzZV9yb2xlID0gTlVMTDsKIAljb25zdCBjaGFyICpkdW1wZW5jb2Rp bmcgPSBOVUxMOworCUFyY2hpdmVGb3JtYXQgYXJjaER1bXBGb3JtYXQgPSBhcmNoTnVsbDsKKwlj b25zdCBjaGFyICpmb3JtYXROYW1lID0gInAiOwogCXRyaXZhbHVlCXByb21wdF9wYXNzd29yZCA9 IFRSSV9ERUZBVUxUOwogCWJvb2wJCWRhdGFfb25seSA9IGZhbHNlOwogCWJvb2wJCWdsb2JhbHNf b25seSA9IGZhbHNlOwpAQCAtMjM3LDcgKzIzOCw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFy Z3ZbXSkKIAogCXBnZHVtcG9wdHMgPSBjcmVhdGVQUUV4cEJ1ZmZlcigpOwogCi0Jd2hpbGUgKChj ID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJndiwgImFjZDpFOmY6Z2g6bDpPcDpyc1M6dFU6dndXeCIs IGxvbmdfb3B0aW9ucywgJm9wdGluZGV4KSkgIT0gLTEpCisJd2hpbGUgKChjID0gZ2V0b3B0X2xv bmcoYXJnYywgYXJndiwgImFjZDpFOmY6RjpnaDpsOk9wOnJzUzp0VTp2d1d4IiwgbG9uZ19vcHRp b25zLCAmb3B0aW5kZXgpKSAhPSAtMSkKIAl7CiAJCXN3aXRjaCAoYykKIAkJewpAQCAtMjY1LDcg KzI2Niw5IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAkJCQlhcHBlbmRQUUV4cEJ1 ZmZlclN0cihwZ2R1bXBvcHRzLCAiIC1mICIpOwogCQkJCWFwcGVuZFNoZWxsU3RyaW5nKHBnZHVt cG9wdHMsIGZpbGVuYW1lKTsKIAkJCQlicmVhazsKLQorCQkJY2FzZSAnRic6CisJCQkJZm9ybWF0 TmFtZSA9IHBnX3N0cmR1cChvcHRhcmcpOworCQkJCWJyZWFrOwogCQkJY2FzZSAnZyc6CiAJCQkJ Z2xvYmFsc19vbmx5ID0gdHJ1ZTsKIAkJCQlicmVhazsKQEAgLTQxNCw2ICs0MTcsMjEgQEAgbWFp bihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCQlleGl0X25pY2VseSgxKTsKIAl9CiAKKwkvKiBH ZXQgZm9ybWF0IGZvciBkdW1wLiAqLworCWFyY2hEdW1wRm9ybWF0ID0gcGFyc2VEdW1wRm9ybWF0 KGZvcm1hdE5hbWUpOworCisJLyoKKwkgKiBJZiBub24tcGxhaW4gZm9ybWF0IGlzIHNwZWNpZmll ZCB0aGVuIHdlIG11c3QgcHJvdmlkZSB0aGUKKwkgKiBmaWxlIG5hbWUgdG8gY3JlYXRlIG9uZSBt YWluIGRpcmVjdG9yeS4KKwkgKi8KKwlpZiAoYXJjaER1bXBGb3JtYXQgIT0gYXJjaE51bGwgJiYK KwkJCSghZmlsZW5hbWUgfHwgc3RyY21wKGZpbGVuYW1lLCAiIikgPT0gMCkpCisJeworCQlwZ19s b2dfZXJyb3IoIm9wdGlvbnMgLUYvLS1mb3JtYXQ9ZHxjfHQgcmVxdWlyZXMgb3B0aW9uIC1mLy0t ZmlsZW5hbWUgd2l0aCBub24tZW1wdHkgc3RyaW5nIik7CisJCXBnX2xvZ19lcnJvcl9oaW50KCJU cnkgXCIlcyAtLWhlbHBcIiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iLCBwcm9nbmFtZSk7CisJCWV4 aXRfbmljZWx5KDEpOworCX0KKwogCS8qCiAJICogSWYgcGFzc3dvcmQgdmFsdWVzIGFyZSBub3Qg cmVxdWlyZWQgaW4gdGhlIGR1bXAsIHN3aXRjaCB0byB1c2luZwogCSAqIHBnX3JvbGVzIHdoaWNo IGlzIGVxdWFsbHkgdXNlZnVsLCBqdXN0IG1vcmUgbGlrZWx5IHRvIGhhdmUgdW5yZXN0cmljdGVk CkBAIC00NjAsNiArNDc4LDMzIEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAlpZiAo b25fY29uZmxpY3RfZG9fbm90aGluZykKIAkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocGdkdW1wb3B0 cywgIiAtLW9uLWNvbmZsaWN0LWRvLW5vdGhpbmciKTsKIAorCS8qCisJICogT3BlbiB0aGUgb3V0 cHV0IGZpbGUgaWYgcmVxdWlyZWQsIG90aGVyd2lzZSB1c2Ugc3Rkb3V0LiAgSWYgcmVxdWlyZWQs CisJICogdGhlbiBjcmVhdGUgbmV3IGRpcmVjdG9yeSBhbmQgZ2xvYmFsLmRhdCBmaWxlLgorCSAq LworCWlmIChhcmNoRHVtcEZvcm1hdCAhPSBhcmNoTnVsbCkKKwl7CisJCWNoYXIJdG9jX3BhdGhb TUFYUEdQQVRIXTsKKworCQkvKiBDcmVhdGUgbmV3IGRpcmVjdG9yeSBvciBhY2NlcHQgdGhlIGVt cHR5IGV4aXN0aW5nIGRpcmVjdG9yeS4gKi8KKwkJY3JlYXRlX29yX29wZW5fZGlyKGZpbGVuYW1l KTsKKworCQlzbnByaW50Zih0b2NfcGF0aCwgTUFYUEdQQVRILCAiJXMvZ2xvYmFsLmRhdCIsIGZp bGVuYW1lKTsKKworCQlPUEYgPSBmb3Blbih0b2NfcGF0aCwgInciKTsKKwkJaWYgKCFPUEYpCisJ CQlwZ19mYXRhbCgiY291bGQgbm90IG9wZW4gZ2xvYmFsLmRhdCBmaWxlOiAlcyIsIHN0cmVycm9y KGVycm5vKSk7CisJfQorCWVsc2UgaWYgKGZpbGVuYW1lKQorCXsKKwkJT1BGID0gZm9wZW4oZmls ZW5hbWUsIFBHX0JJTkFSWV9XKTsKKwkJaWYgKCFPUEYpCisJCQlwZ19mYXRhbCgiY291bGQgbm90 IG9wZW4gb3V0cHV0IGZpbGUgXCIlc1wiOiAlbSIsCisJCQkJCSBmaWxlbmFtZSk7CisJfQorCWVs c2UKKwkJT1BGID0gc3Rkb3V0OworCiAJLyoKIAkgKiBJZiB0aGVyZSB3YXMgYSBkYXRhYmFzZSBz cGVjaWZpZWQgb24gdGhlIGNvbW1hbmQgbGluZSwgdXNlIHRoYXQsCiAJICogb3RoZXJ3aXNlIHRy eSB0byBjb25uZWN0IHRvIGRhdGFiYXNlICJwb3N0Z3JlcyIsIGFuZCBmYWlsaW5nIHRoYXQKQEAg LTQ2OCw3ICs1MTMsOCBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJaWYgKHBnZGIp CiAJewogCQljb25uID0gY29ubmVjdERhdGFiYXNlKHBnZGIsIGNvbm5zdHIsIHBnaG9zdCwgcGdw b3J0LCBwZ3VzZXIsCi0JCQkJCQkJICAgcHJvbXB0X3Bhc3N3b3JkLCBmYWxzZSk7CisJCQkJCQkJ ICAgcHJvbXB0X3Bhc3N3b3JkLCBmYWxzZSwKKwkJCQkJCQkgICBwcm9nbmFtZSwgJmNvbm5zdHIs ICZzZXJ2ZXJfdmVyc2lvbik7CiAKIAkJaWYgKCFjb25uKQogCQkJcGdfZmF0YWwoImNvdWxkIG5v dCBjb25uZWN0IHRvIGRhdGFiYXNlIFwiJXNcIiIsIHBnZGIpOwpAQCAtNDc2LDEwICs1MjIsMTIg QEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCWVsc2UKIAl7CiAJCWNvbm4gPSBjb25u ZWN0RGF0YWJhc2UoInBvc3RncmVzIiwgY29ubnN0ciwgcGdob3N0LCBwZ3BvcnQsIHBndXNlciwK LQkJCQkJCQkgICBwcm9tcHRfcGFzc3dvcmQsIGZhbHNlKTsKKwkJCQkJCQkgICBwcm9tcHRfcGFz c3dvcmQsIGZhbHNlLAorCQkJCQkJCSAgIHByb2duYW1lLCAmY29ubnN0ciwgJnNlcnZlcl92ZXJz aW9uKTsKIAkJaWYgKCFjb25uKQogCQkJY29ubiA9IGNvbm5lY3REYXRhYmFzZSgidGVtcGxhdGUx IiwgY29ubnN0ciwgcGdob3N0LCBwZ3BvcnQsIHBndXNlciwKLQkJCQkJCQkJICAgcHJvbXB0X3Bh c3N3b3JkLCB0cnVlKTsKKwkJCQkJCQkJICAgcHJvbXB0X3Bhc3N3b3JkLCB0cnVlLAorCQkJCQkJ CQkgICBwcm9nbmFtZSwgJmNvbm5zdHIsICZzZXJ2ZXJfdmVyc2lvbik7CiAKIAkJaWYgKCFjb25u KQogCQl7CkBAIC00OTYsMTkgKzU0NCw2IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkK IAlleHBhbmRfZGJuYW1lX3BhdHRlcm5zKGNvbm4sICZkYXRhYmFzZV9leGNsdWRlX3BhdHRlcm5z LAogCQkJCQkJICAgJmRhdGFiYXNlX2V4Y2x1ZGVfbmFtZXMpOwogCi0JLyoKLQkgKiBPcGVuIHRo ZSBvdXRwdXQgZmlsZSBpZiByZXF1aXJlZCwgb3RoZXJ3aXNlIHVzZSBzdGRvdXQKLQkgKi8KLQlp ZiAoZmlsZW5hbWUpCi0JewotCQlPUEYgPSBmb3BlbihmaWxlbmFtZSwgUEdfQklOQVJZX1cpOwot CQlpZiAoIU9QRikKLQkJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgb3BlbiBvdXRwdXQgZmlsZSBcIiVz XCI6ICVtIiwKLQkJCQkJIGZpbGVuYW1lKTsKLQl9Ci0JZWxzZQotCQlPUEYgPSBzdGRvdXQ7Ci0K IAkvKgogCSAqIFNldCB0aGUgY2xpZW50IGVuY29kaW5nIGlmIHJlcXVlc3RlZC4KIAkgKi8KQEAg LTYwNyw3ICs2NDIsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJfQogCiAJaWYg KCFnbG9iYWxzX29ubHkgJiYgIXJvbGVzX29ubHkgJiYgIXRhYmxlc3BhY2VzX29ubHkpCi0JCWR1 bXBEYXRhYmFzZXMoY29ubik7CisJCWR1bXBEYXRhYmFzZXMoY29ubiwgYXJjaER1bXBGb3JtYXQp OwogCiAJUFFmaW5pc2goY29ubik7CiAKQEAgLTYyMCw3ICs2NTUsNyBAQCBtYWluKGludCBhcmdj LCBjaGFyICphcmd2W10pCiAJCWZjbG9zZShPUEYpOwogCiAJCS8qIHN5bmMgdGhlIHJlc3VsdGlu ZyBmaWxlLCBlcnJvcnMgYXJlIG5vdCBmYXRhbCAqLwotCQlpZiAoZG9zeW5jKQorCQlpZiAoZG9z eW5jICYmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkpCiAJCQkodm9pZCkgZnN5bmNfZm5h bWUoZmlsZW5hbWUsIGZhbHNlKTsKIAl9CiAKQEAgLTYzNyw2ICs2NzIsOCBAQCBoZWxwKHZvaWQp CiAKIAlwcmludGYoXygiXG5HZW5lcmFsIG9wdGlvbnM6XG4iKSk7CiAJcHJpbnRmKF8oIiAgLWYs IC0tZmlsZT1GSUxFTkFNRSAgICAgICAgICBvdXRwdXQgZmlsZSBuYW1lXG4iKSk7CisJcHJpbnRm KF8oIiAgLUYsIC0tZm9ybWF0PWN8ZHx0fHAgICAgICAgICBvdXRwdXQgZmlsZSBmb3JtYXQgKGN1 c3RvbSwgZGlyZWN0b3J5LCB0YXIsXG4iCisJCQkJIiAgICAgICAgICAgICAgICAgICAgICAgICAg ICBwbGFpbiB0ZXh0IChkZWZhdWx0KSlcbiIpKTsKIAlwcmludGYoXygiICAtdiwgLS12ZXJib3Nl ICAgICAgICAgICAgICAgIHZlcmJvc2UgbW9kZVxuIikpOwogCXByaW50ZihfKCIgIC1WLCAtLXZl cnNpb24gICAgICAgICAgICAgICAgb3V0cHV0IHZlcnNpb24gaW5mb3JtYXRpb24sIHRoZW4gZXhp dFxuIikpOwogCXByaW50ZihfKCIgIC0tbG9jay13YWl0LXRpbWVvdXQ9VElNRU9VVCAgZmFpbCBh ZnRlciB3YWl0aW5nIFRJTUVPVVQgZm9yIGEgdGFibGUgbG9ja1xuIikpOwpAQCAtMTQ4NywxMCAr MTUyNCwxMyBAQCBleHBhbmRfZGJuYW1lX3BhdHRlcm5zKFBHY29ubiAqY29ubiwKICAqIER1bXAg Y29udGVudHMgb2YgZGF0YWJhc2VzLgogICovCiBzdGF0aWMgdm9pZAotZHVtcERhdGFiYXNlcyhQ R2Nvbm4gKmNvbm4pCitkdW1wRGF0YWJhc2VzKFBHY29ubiAqY29ubiwgQXJjaGl2ZUZvcm1hdCBh cmNoRHVtcEZvcm1hdCkKIHsKIAlQR3Jlc3VsdCAgICpyZXM7CiAJaW50CQkJaTsKKwljaGFyCQlk Yl9zdWJkaXJbTUFYUEdQQVRIXTsKKwljaGFyCQlkYmZpbGVwYXRoW01BWFBHUEFUSF07CisJRklM RSAgICAgICAqbWFwX2ZpbGU7CiAKIAkvKgogCSAqIFNraXAgZGF0YWJhc2VzIG1hcmtlZCBub3Qg ZGF0YWxsb3djb25uLCBzaW5jZSB3ZSdkIGJlIHVuYWJsZSB0byBjb25uZWN0CkBAIC0xNTA0LDcg KzE1NDQsNyBAQCBkdW1wRGF0YWJhc2VzKFBHY29ubiAqY29ubikKIAkgKiBkb2Vzbid0IGhhdmUg c29tZSBmYWlsdXJlIG1vZGUgd2l0aCAtLWNsZWFuLgogCSAqLwogCXJlcyA9IGV4ZWN1dGVRdWVy eShjb25uLAotCQkJCQkgICAiU0VMRUNUIGRhdG5hbWUgIgorCQkJCQkgICAiU0VMRUNUIGRhdG5h bWUsIG9pZCAiCiAJCQkJCSAgICJGUk9NIHBnX2RhdGFiYXNlIGQgIgogCQkJCQkgICAiV0hFUkUg ZGF0YWxsb3djb25uIEFORCBkYXRjb25ubGltaXQgIT0gLTIgIgogCQkJCQkgICAiT1JERVIgQlkg KGRhdG5hbWUgPD4gJ3RlbXBsYXRlMScpLCBkYXRuYW1lIik7CkBAIC0xNTEyLDkgKzE1NTIsMzMg QEAgZHVtcERhdGFiYXNlcyhQR2Nvbm4gKmNvbm4pCiAJaWYgKFBRbnR1cGxlcyhyZXMpID4gMCkK IAkJZnByaW50ZihPUEYsICItLVxuLS0gRGF0YWJhc2VzXG4tLVxuXG4iKTsKIAorCS8qCisJICog SWYgZGlyZWN0b3J5L3Rhci9jdXN0b20gZm9ybWF0IGlzIHNwZWNpZmllZCB0aGVuIGNyZWF0ZSBh IHN1YmRpcmVjdG9yeQorCSAqIHVuZGVyIHRoZSBtYWluIGRpcmVjdG9yeSBhbmQgZWFjaCBkYXRh YmFzZSBkdW1wIGZpbGUgc3ViZGlyZWN0b3J5IHdpbGwKKwkgKiBiZSBjcmVhdGVkIHVuZGVyIHRo ZSBzdWJkaXJlY3RvcnkgaW4gYXJjaGl2ZSBtb2RlIGFzIHBlciBzaW5nbGUgZGIgcGdfZHVtcC4K KwkgKi8KKwlpZiAoYXJjaER1bXBGb3JtYXQgIT0gYXJjaE51bGwpCisJeworCQljaGFyCW1hcF9m aWxlX3BhdGhbTUFYUEdQQVRIXTsKKworCQlzbnByaW50ZihkYl9zdWJkaXIsIE1BWFBHUEFUSCwg IiVzL2RhdGFiYXNlcyIsIGZpbGVuYW1lKTsKKworCQkvKiBDcmVhdGUgYSBzdWJkaXJlY3Rvcnkg d2l0aCAnZGF0YWJhc2VzJyBuYW1lIHVuZGVyIG1haW4gZGlyZWN0b3J5LiAqLworCQlpZiAobWtk aXIoZGJfc3ViZGlyLCAwNzU1KSAhPSAwKQorCQkJcGdfbG9nX2Vycm9yKCJjb3VsZCBub3QgY3Jl YXRlIHN1YmRpcmVjdG9yeSBcIiVzXCI6ICVtIiwgZGJfc3ViZGlyKTsKKworCQlzbnByaW50Ziht YXBfZmlsZV9wYXRoLCBNQVhQR1BBVEgsICIlcy9tYXAuZGF0IiwgZmlsZW5hbWUpOworCisJCS8q IENyZWF0ZSBhIG1hcCBmaWxlICh0byBzdG9yZSBkYm9pZCBhbmQgZGJuYW1lKSAqLworCQltYXBf ZmlsZSA9IGZvcGVuKG1hcF9maWxlX3BhdGgsICJ3Iik7CisJCWlmICghbWFwX2ZpbGUpCisJCQlw Z19mYXRhbCgiY291bGQgbm90IG9wZW4gbWFwIGZpbGU6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsK Kwl9CisKIAlmb3IgKGkgPSAwOyBpIDwgUFFudHVwbGVzKHJlcyk7IGkrKykKIAl7CiAJCWNoYXIJ ICAgKmRibmFtZSA9IFBRZ2V0dmFsdWUocmVzLCBpLCAwKTsKKwkJY2hhcgkgICAqb2lkID0gUFFn ZXR2YWx1ZShyZXMsIGksIDEpOwogCQljb25zdCBjaGFyICpjcmVhdGVfb3B0czsKIAkJaW50CQkJ cmV0OwogCkBAIC0xNTI5LDkgKzE1OTMsMjIgQEAgZHVtcERhdGFiYXNlcyhQR2Nvbm4gKmNvbm4p CiAJCQljb250aW51ZTsKIAkJfQogCisJCS8qCisJCSAqIElmIHRoaXMgaXMgbm9uLXBsYWluIGR1 bXAgZm9ybWF0LCB0aGVuIGFwcGVuZCBkYm9pZCBhbmQgZGJuYW1lIHRvCisJCSAqIHRoZSBtYXAu ZGF0IGZpbGUuCisJCSAqLworCQlpZiAoYXJjaER1bXBGb3JtYXQgIT0gYXJjaE51bGwpCisJCXsK KwkJCXNucHJpbnRmKGRiZmlsZXBhdGgsIE1BWFBHUEFUSCwgIlwiJXNcIi9cIiVzXCIiLCBkYl9z dWJkaXIsIG9pZCk7CisKKwkJCS8qIFB1dCBvbmUgbGluZSBlbnRyeSBmb3IgZGJvaWQgYW5kIGRi bmFtZSBpbiBtYXAgZmlsZS4gKi8KKwkJCWZwcmludGYobWFwX2ZpbGUsICIlcyAlc1xuIiwgb2lk LCBwZ19zdHJkdXAoZGJuYW1lKSk7CisJCX0KKwogCQlwZ19sb2dfaW5mbygiZHVtcGluZyBkYXRh YmFzZSBcIiVzXCIiLCBkYm5hbWUpOwogCi0JCWZwcmludGYoT1BGLCAiLS1cbi0tIERhdGFiYXNl IFwiJXNcIiBkdW1wXG4tLVxuXG4iLCBkYm5hbWUpOworCQlpZiAoYXJjaER1bXBGb3JtYXQgPT0g YXJjaE51bGwpCisJCQlmcHJpbnRmKE9QRiwgIi0tXG4tLSBEYXRhYmFzZSBcIiVzXCIgZHVtcFxu LS1cblxuIiwgZGJuYW1lKTsKIAogCQkvKgogCQkgKiBXZSBhc3N1bWUgdGhhdCAidGVtcGxhdGUx IiBhbmQgInBvc3RncmVzIiBhbHJlYWR5IGV4aXN0IGluIHRoZQpAQCAtMTU0OSwyMCArMTYyNiwy MSBAQCBkdW1wRGF0YWJhc2VzKFBHY29ubiAqY29ubikKIAkJCXsKIAkJCQljcmVhdGVfb3B0cyA9 ICIiOwogCQkJCS8qIFNpbmNlIHBnX2R1bXAgd29uJ3QgZW1pdCBhIFxjb25uZWN0IGNvbW1hbmQs IHdlIG11c3QgKi8KLQkJCQlmcHJpbnRmKE9QRiwgIlxcY29ubmVjdCAlc1xuXG4iLCBkYm5hbWUp OworCQkJCWlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkKKwkJCQkJZnByaW50ZihPUEYs ICJcXGNvbm5lY3QgJXNcblxuIiwgZGJuYW1lKTsKIAkJCX0KIAkJfQogCQllbHNlCiAJCQljcmVh dGVfb3B0cyA9ICItLWNyZWF0ZSI7CiAKLQkJaWYgKGZpbGVuYW1lKQorCQlpZiAoKGFyY2hEdW1w Rm9ybWF0ID09IGFyY2hOdWxsKSAmJiBmaWxlbmFtZSkKIAkJCWZjbG9zZShPUEYpOwogCi0JCXJl dCA9IHJ1blBnRHVtcChkYm5hbWUsIGNyZWF0ZV9vcHRzKTsKKwkJcmV0ID0gcnVuUGdEdW1wKGRi bmFtZSwgY3JlYXRlX29wdHMsIGRiZmlsZXBhdGgsIGFyY2hEdW1wRm9ybWF0KTsKIAkJaWYgKHJl dCAhPSAwKQogCQkJcGdfZmF0YWwoInBnX2R1bXAgZmFpbGVkIG9uIGRhdGFiYXNlIFwiJXNcIiwg ZXhpdGluZyIsIGRibmFtZSk7CiAKLQkJaWYgKGZpbGVuYW1lKQorCQlpZiAoKGFyY2hEdW1wRm9y bWF0ID09IGFyY2hOdWxsKSAmJiBmaWxlbmFtZSkKIAkJewogCQkJT1BGID0gZm9wZW4oZmlsZW5h bWUsIFBHX0JJTkFSWV9BKTsKIAkJCWlmICghT1BGKQpAQCAtMTU3MSw2ICsxNjQ5LDEwIEBAIGR1 bXBEYXRhYmFzZXMoUEdjb25uICpjb25uKQogCQl9CiAJfQogCisJLyogQ2xvc2UgbWFwIGZpbGUg Ki8KKwlpZiAoYXJjaER1bXBGb3JtYXQgIT0gYXJjaE51bGwpCisJCWZjbG9zZShtYXBfZmlsZSk7 CisKIAlQUWNsZWFyKHJlcyk7CiB9CiAKQEAgLTE1ODAsNyArMTY2Miw4IEBAIGR1bXBEYXRhYmFz ZXMoUEdjb25uICpjb25uKQogICogUnVuIHBnX2R1bXAgb24gZGJuYW1lLCB3aXRoIHNwZWNpZmll ZCBvcHRpb25zLgogICovCiBzdGF0aWMgaW50Ci1ydW5QZ0R1bXAoY29uc3QgY2hhciAqZGJuYW1l LCBjb25zdCBjaGFyICpjcmVhdGVfb3B0cykKK3J1blBnRHVtcChjb25zdCBjaGFyICpkYm5hbWUs IGNvbnN0IGNoYXIgKmNyZWF0ZV9vcHRzLCBjaGFyICpkYmZpbGUsCisJCUFyY2hpdmVGb3JtYXQg YXJjaER1bXBGb3JtYXQpCiB7CiAJUFFFeHBCdWZmZXJEYXRhIGNvbm5zdHJidWY7CiAJUFFFeHBC dWZmZXJEYXRhIGNtZDsKQEAgLTE1ODksMTcgKzE2NzIsMzYgQEAgcnVuUGdEdW1wKGNvbnN0IGNo YXIgKmRibmFtZSwgY29uc3QgY2hhciAqY3JlYXRlX29wdHMpCiAJaW5pdFBRRXhwQnVmZmVyKCZj b25uc3RyYnVmKTsKIAlpbml0UFFFeHBCdWZmZXIoJmNtZCk7CiAKLQlwcmludGZQUUV4cEJ1ZmZl cigmY21kLCAiXCIlc1wiICVzICVzIiwgcGdfZHVtcF9iaW4sCi0JCQkJCSAgcGdkdW1wb3B0cy0+ ZGF0YSwgY3JlYXRlX29wdHMpOwotCiAJLyoKLQkgKiBJZiB3ZSBoYXZlIGEgZmlsZW5hbWUsIHVz ZSB0aGUgdW5kb2N1bWVudGVkIHBsYWluLWFwcGVuZCBwZ19kdW1wCi0JICogZm9ybWF0LgorCSAq IElmIHRoaXMgaXMgbm9uLXBsYWluIGZvcm1hdCBkdW1wLCB0aGVuIGFwcGVuZCBmaWxlIG5hbWUg YW5kIGR1bXAKKwkgKiBmb3JtYXQgdG8gdGhlIHBnX2R1bXAgY29tbWFuZCB0byBnZXQgYXJjaGl2 ZSBkdW1wLgogCSAqLwotCWlmIChmaWxlbmFtZSkKLQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmNt ZCwgIiAtRmEgIik7CisJaWYgKGFyY2hEdW1wRm9ybWF0ICE9IGFyY2hOdWxsKQorCXsKKwkJcHJp bnRmUFFFeHBCdWZmZXIoJmNtZCwgIlwiJXNcIiAtZiAlcyAlcyIsIHBnX2R1bXBfYmluLAorCQkJ CQkJICBkYmZpbGUsIGNyZWF0ZV9vcHRzKTsKKworCQlpZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJj aERpcmVjdG9yeSkKKwkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZjbWQsICIgIC0tZm9ybWF0PWRp cmVjdG9yeSAiKTsKKwkJZWxzZSBpZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaEN1c3RvbSkKKwkJ CWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZjbWQsICIgIC0tZm9ybWF0PWN1c3RvbSAiKTsKKwkJZWxz ZSBpZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaFRhcikKKwkJCWFwcGVuZFBRRXhwQnVmZmVyU3Ry KCZjbWQsICIgIC0tZm9ybWF0PXRhciAiKTsKKwl9CiAJZWxzZQotCQlhcHBlbmRQUUV4cEJ1ZmZl clN0cigmY21kLCAiIC1GcCAiKTsKKwl7CisJCXByaW50ZlBRRXhwQnVmZmVyKCZjbWQsICJcIiVz XCIgJXMgJXMiLCBwZ19kdW1wX2JpbiwKKwkJCQkJCXBnZHVtcG9wdHMtPmRhdGEsIGNyZWF0ZV9v cHRzKTsKKworCQkvKgorCQkqIElmIHdlIGhhdmUgYSBmaWxlbmFtZSwgdXNlIHRoZSB1bmRvY3Vt ZW50ZWQgcGxhaW4tYXBwZW5kIHBnX2R1bXAKKwkJKiBmb3JtYXQuCisJCSovCisJCWlmIChmaWxl bmFtZSkKKwkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZjbWQsICIgLUZhICIpOworCQllbHNlCisJ CQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmY21kLCAiIC1GcCAiKTsKKwl9CiAKIAkvKgogCSAqIEFw cGVuZCB0aGUgZGF0YWJhc2UgbmFtZSB0byB0aGUgYWxyZWFkeS1jb25zdHJ1Y3RlZCBzdGVtIG9m IGNvbm5lY3Rpb24KQEAgLTE2NDksMjU2ICsxNzUxLDYgQEAgYnVpbGRTaFNlY0xhYmVscyhQR2Nv bm4gKmNvbm4sIGNvbnN0IGNoYXIgKmNhdGFsb2dfbmFtZSwgT2lkIG9iamVjdElkLAogCWRlc3Ry b3lQUUV4cEJ1ZmZlcihzcWwpOwogfQogCi0vKgotICogTWFrZSBhIGRhdGFiYXNlIGNvbm5lY3Rp b24gd2l0aCB0aGUgZ2l2ZW4gcGFyYW1ldGVycy4gIEFuCi0gKiBpbnRlcmFjdGl2ZSBwYXNzd29y ZCBwcm9tcHQgaXMgYXV0b21hdGljYWxseSBpc3N1ZWQgaWYgcmVxdWlyZWQuCi0gKgotICogSWYg ZmFpbF9vbl9lcnJvciBpcyBmYWxzZSwgd2UgcmV0dXJuIE5VTEwgd2l0aG91dCBwcmludGluZyBh bnkgbWVzc2FnZQotICogb24gZmFpbHVyZSwgYnV0IHByZXNlcnZlIGFueSBwcm9tcHRlZCBwYXNz d29yZCBmb3IgdGhlIG5leHQgdHJ5LgotICoKLSAqIE9uIHN1Y2Nlc3MsIHRoZSBnbG9iYWwgdmFy aWFibGUgJ2Nvbm5zdHInIGlzIHNldCB0byBhIGNvbm5lY3Rpb24gc3RyaW5nCi0gKiBjb250YWlu aW5nIHRoZSBvcHRpb25zIHVzZWQuCi0gKi8KLXN0YXRpYyBQR2Nvbm4gKgotY29ubmVjdERhdGFi YXNlKGNvbnN0IGNoYXIgKmRibmFtZSwgY29uc3QgY2hhciAqY29ubmVjdGlvbl9zdHJpbmcsCi0J CQkJY29uc3QgY2hhciAqcGdob3N0LCBjb25zdCBjaGFyICpwZ3BvcnQsIGNvbnN0IGNoYXIgKnBn dXNlciwKLQkJCQl0cml2YWx1ZSBwcm9tcHRfcGFzc3dvcmQsIGJvb2wgZmFpbF9vbl9lcnJvcikK LXsKLQlQR2Nvbm4JICAgKmNvbm47Ci0JYm9vbAkJbmV3X3Bhc3M7Ci0JY29uc3QgY2hhciAqcmVt b3RldmVyc2lvbl9zdHI7Ci0JaW50CQkJbXlfdmVyc2lvbjsKLQljb25zdCBjaGFyICoqa2V5d29y ZHMgPSBOVUxMOwotCWNvbnN0IGNoYXIgKip2YWx1ZXMgPSBOVUxMOwotCVBRY29ubmluZm9PcHRp b24gKmNvbm5fb3B0cyA9IE5VTEw7Ci0Jc3RhdGljIGNoYXIgKnBhc3N3b3JkID0gTlVMTDsKLQot CWlmIChwcm9tcHRfcGFzc3dvcmQgPT0gVFJJX1lFUyAmJiAhcGFzc3dvcmQpCi0JCXBhc3N3b3Jk ID0gc2ltcGxlX3Byb21wdCgiUGFzc3dvcmQ6ICIsIGZhbHNlKTsKLQotCS8qCi0JICogU3RhcnQg dGhlIGNvbm5lY3Rpb24uICBMb29wIHVudGlsIHdlIGhhdmUgYSBwYXNzd29yZCBpZiByZXF1ZXN0 ZWQgYnkKLQkgKiBiYWNrZW5kLgotCSAqLwotCWRvCi0JewotCQlpbnQJCQlhcmdjb3VudCA9IDY7 Ci0JCVBRY29ubmluZm9PcHRpb24gKmNvbm5fb3B0OwotCQljaGFyCSAgICplcnJfbXNnID0gTlVM TDsKLQkJaW50CQkJaSA9IDA7Ci0KLQkJZnJlZShrZXl3b3Jkcyk7Ci0JCWZyZWUodmFsdWVzKTsK LQkJUFFjb25uaW5mb0ZyZWUoY29ubl9vcHRzKTsKLQotCQkvKgotCQkgKiBNZXJnZSB0aGUgY29u bmVjdGlvbiBpbmZvIGlucHV0cyBnaXZlbiBpbiBmb3JtIG9mIGNvbm5lY3Rpb24gc3RyaW5nCi0J CSAqIGFuZCBvdGhlciBvcHRpb25zLiAgRXhwbGljaXRseSBkaXNjYXJkIGFueSBkYm5hbWUgdmFs dWUgaW4gdGhlCi0JCSAqIGNvbm5lY3Rpb24gc3RyaW5nOyBvdGhlcndpc2UsIFBRY29ubmVjdGRi UGFyYW1zKCkgd291bGQgaW50ZXJwcmV0Ci0JCSAqIHRoYXQgdmFsdWUgYXMgYmVpbmcgaXRzZWxm IGEgY29ubmVjdGlvbiBzdHJpbmcuCi0JCSAqLwotCQlpZiAoY29ubmVjdGlvbl9zdHJpbmcpCi0J CXsKLQkJCWNvbm5fb3B0cyA9IFBRY29ubmluZm9QYXJzZShjb25uZWN0aW9uX3N0cmluZywgJmVy cl9tc2cpOwotCQkJaWYgKGNvbm5fb3B0cyA9PSBOVUxMKQotCQkJCXBnX2ZhdGFsKCIlcyIsIGVy cl9tc2cpOwotCi0JCQlmb3IgKGNvbm5fb3B0ID0gY29ubl9vcHRzOyBjb25uX29wdC0+a2V5d29y ZCAhPSBOVUxMOyBjb25uX29wdCsrKQotCQkJewotCQkJCWlmIChjb25uX29wdC0+dmFsICE9IE5V TEwgJiYgY29ubl9vcHQtPnZhbFswXSAhPSAnXDAnICYmCi0JCQkJCXN0cmNtcChjb25uX29wdC0+ a2V5d29yZCwgImRibmFtZSIpICE9IDApCi0JCQkJCWFyZ2NvdW50Kys7Ci0JCQl9Ci0KLQkJCWtl eXdvcmRzID0gcGdfbWFsbG9jMCgoYXJnY291bnQgKyAxKSAqIHNpemVvZigqa2V5d29yZHMpKTsK LQkJCXZhbHVlcyA9IHBnX21hbGxvYzAoKGFyZ2NvdW50ICsgMSkgKiBzaXplb2YoKnZhbHVlcykp OwotCi0JCQlmb3IgKGNvbm5fb3B0ID0gY29ubl9vcHRzOyBjb25uX29wdC0+a2V5d29yZCAhPSBO VUxMOyBjb25uX29wdCsrKQotCQkJewotCQkJCWlmIChjb25uX29wdC0+dmFsICE9IE5VTEwgJiYg Y29ubl9vcHQtPnZhbFswXSAhPSAnXDAnICYmCi0JCQkJCXN0cmNtcChjb25uX29wdC0+a2V5d29y ZCwgImRibmFtZSIpICE9IDApCi0JCQkJewotCQkJCQlrZXl3b3Jkc1tpXSA9IGNvbm5fb3B0LT5r ZXl3b3JkOwotCQkJCQl2YWx1ZXNbaV0gPSBjb25uX29wdC0+dmFsOwotCQkJCQlpKys7Ci0JCQkJ fQotCQkJfQotCQl9Ci0JCWVsc2UKLQkJewotCQkJa2V5d29yZHMgPSBwZ19tYWxsb2MwKChhcmdj b3VudCArIDEpICogc2l6ZW9mKCprZXl3b3JkcykpOwotCQkJdmFsdWVzID0gcGdfbWFsbG9jMCgo YXJnY291bnQgKyAxKSAqIHNpemVvZigqdmFsdWVzKSk7Ci0JCX0KLQotCQlpZiAocGdob3N0KQot CQl7Ci0JCQlrZXl3b3Jkc1tpXSA9ICJob3N0IjsKLQkJCXZhbHVlc1tpXSA9IHBnaG9zdDsKLQkJ CWkrKzsKLQkJfQotCQlpZiAocGdwb3J0KQotCQl7Ci0JCQlrZXl3b3Jkc1tpXSA9ICJwb3J0IjsK LQkJCXZhbHVlc1tpXSA9IHBncG9ydDsKLQkJCWkrKzsKLQkJfQotCQlpZiAocGd1c2VyKQotCQl7 Ci0JCQlrZXl3b3Jkc1tpXSA9ICJ1c2VyIjsKLQkJCXZhbHVlc1tpXSA9IHBndXNlcjsKLQkJCWkr KzsKLQkJfQotCQlpZiAocGFzc3dvcmQpCi0JCXsKLQkJCWtleXdvcmRzW2ldID0gInBhc3N3b3Jk IjsKLQkJCXZhbHVlc1tpXSA9IHBhc3N3b3JkOwotCQkJaSsrOwotCQl9Ci0JCWlmIChkYm5hbWUp Ci0JCXsKLQkJCWtleXdvcmRzW2ldID0gImRibmFtZSI7Ci0JCQl2YWx1ZXNbaV0gPSBkYm5hbWU7 Ci0JCQlpKys7Ci0JCX0KLQkJa2V5d29yZHNbaV0gPSAiZmFsbGJhY2tfYXBwbGljYXRpb25fbmFt ZSI7Ci0JCXZhbHVlc1tpXSA9IHByb2duYW1lOwotCQlpKys7Ci0KLQkJbmV3X3Bhc3MgPSBmYWxz ZTsKLQkJY29ubiA9IFBRY29ubmVjdGRiUGFyYW1zKGtleXdvcmRzLCB2YWx1ZXMsIHRydWUpOwot Ci0JCWlmICghY29ubikKLQkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgY29ubmVjdCB0byBkYXRhYmFz ZSBcIiVzXCIiLCBkYm5hbWUpOwotCi0JCWlmIChQUXN0YXR1cyhjb25uKSA9PSBDT05ORUNUSU9O X0JBRCAmJgotCQkJUFFjb25uZWN0aW9uTmVlZHNQYXNzd29yZChjb25uKSAmJgotCQkJIXBhc3N3 b3JkICYmCi0JCQlwcm9tcHRfcGFzc3dvcmQgIT0gVFJJX05PKQotCQl7Ci0JCQlQUWZpbmlzaChj b25uKTsKLQkJCXBhc3N3b3JkID0gc2ltcGxlX3Byb21wdCgiUGFzc3dvcmQ6ICIsIGZhbHNlKTsK LQkJCW5ld19wYXNzID0gdHJ1ZTsKLQkJfQotCX0gd2hpbGUgKG5ld19wYXNzKTsKLQotCS8qIGNo ZWNrIHRvIHNlZSB0aGF0IHRoZSBiYWNrZW5kIGNvbm5lY3Rpb24gd2FzIHN1Y2Nlc3NmdWxseSBt YWRlICovCi0JaWYgKFBRc3RhdHVzKGNvbm4pID09IENPTk5FQ1RJT05fQkFEKQotCXsKLQkJaWYg KGZhaWxfb25fZXJyb3IpCi0JCQlwZ19mYXRhbCgiJXMiLCBQUWVycm9yTWVzc2FnZShjb25uKSk7 Ci0JCWVsc2UKLQkJewotCQkJUFFmaW5pc2goY29ubik7Ci0KLQkJCWZyZWUoa2V5d29yZHMpOwot CQkJZnJlZSh2YWx1ZXMpOwotCQkJUFFjb25uaW5mb0ZyZWUoY29ubl9vcHRzKTsKLQotCQkJcmV0 dXJuIE5VTEw7Ci0JCX0KLQl9Ci0KLQkvKgotCSAqIE9rLCBjb25uZWN0ZWQgc3VjY2Vzc2Z1bGx5 LiBSZW1lbWJlciB0aGUgb3B0aW9ucyB1c2VkLCBpbiB0aGUgZm9ybSBvZiBhCi0JICogY29ubmVj dGlvbiBzdHJpbmcuCi0JICovCi0JY29ubnN0ciA9IGNvbnN0cnVjdENvbm5TdHIoa2V5d29yZHMs IHZhbHVlcyk7Ci0KLQlmcmVlKGtleXdvcmRzKTsKLQlmcmVlKHZhbHVlcyk7Ci0JUFFjb25uaW5m b0ZyZWUoY29ubl9vcHRzKTsKLQotCS8qIENoZWNrIHZlcnNpb24gKi8KLQlyZW1vdGV2ZXJzaW9u X3N0ciA9IFBRcGFyYW1ldGVyU3RhdHVzKGNvbm4sICJzZXJ2ZXJfdmVyc2lvbiIpOwotCWlmICgh cmVtb3RldmVyc2lvbl9zdHIpCi0JCXBnX2ZhdGFsKCJjb3VsZCBub3QgZ2V0IHNlcnZlciB2ZXJz aW9uIik7Ci0Jc2VydmVyX3ZlcnNpb24gPSBQUXNlcnZlclZlcnNpb24oY29ubik7Ci0JaWYgKHNl cnZlcl92ZXJzaW9uID09IDApCi0JCXBnX2ZhdGFsKCJjb3VsZCBub3QgcGFyc2Ugc2VydmVyIHZl cnNpb24gXCIlc1wiIiwKLQkJCQkgcmVtb3RldmVyc2lvbl9zdHIpOwotCi0JbXlfdmVyc2lvbiA9 IFBHX1ZFUlNJT05fTlVNOwotCi0JLyoKLQkgKiBXZSBhbGxvdyB0aGUgc2VydmVyIHRvIGJlIGJh Y2sgdG8gOS4yLCBhbmQgdXAgdG8gYW55IG1pbm9yIHJlbGVhc2Ugb2YKLQkgKiBvdXIgb3duIG1h am9yIHZlcnNpb24uICAoU2VlIGFsc28gdmVyc2lvbiBjaGVjayBpbiBwZ19kdW1wLmMuKQotCSAq LwotCWlmIChteV92ZXJzaW9uICE9IHNlcnZlcl92ZXJzaW9uCi0JCSYmIChzZXJ2ZXJfdmVyc2lv biA8IDkwMjAwIHx8Ci0JCQkoc2VydmVyX3ZlcnNpb24gLyAxMDApID4gKG15X3ZlcnNpb24gLyAx MDApKSkKLQl7Ci0JCXBnX2xvZ19lcnJvcigiYWJvcnRpbmcgYmVjYXVzZSBvZiBzZXJ2ZXIgdmVy c2lvbiBtaXNtYXRjaCIpOwotCQlwZ19sb2dfZXJyb3JfZGV0YWlsKCJzZXJ2ZXIgdmVyc2lvbjog JXM7ICVzIHZlcnNpb246ICVzIiwKLQkJCQkJCQlyZW1vdGV2ZXJzaW9uX3N0ciwgcHJvZ25hbWUs IFBHX1ZFUlNJT04pOwotCQlleGl0X25pY2VseSgxKTsKLQl9Ci0KLQlQUWNsZWFyKGV4ZWN1dGVR dWVyeShjb25uLCBBTFdBWVNfU0VDVVJFX1NFQVJDSF9QQVRIX1NRTCkpOwotCi0JcmV0dXJuIGNv bm47Ci19Ci0KLS8qIC0tLS0tLS0tLS0KLSAqIENvbnN0cnVjdCBhIGNvbm5lY3Rpb24gc3RyaW5n IGZyb20gdGhlIGdpdmVuIGtleXdvcmQvdmFsdWUgcGFpcnMuIEl0IGlzCi0gKiB1c2VkIHRvIHBh c3MgdGhlIGNvbm5lY3Rpb24gb3B0aW9ucyB0byB0aGUgcGdfZHVtcCBzdWJwcm9jZXNzLgotICoK LSAqIFRoZSBmb2xsb3dpbmcgcGFyYW1ldGVycyBhcmUgZXhjbHVkZWQ6Ci0gKglkYm5hbWUJCS0g dmFyaWVzIGluIGVhY2ggcGdfZHVtcCBpbnZvY2F0aW9uCi0gKglwYXNzd29yZAktIGl0J3Mgbm90 IHNlY3VyZSB0byBwYXNzIGEgcGFzc3dvcmQgb24gdGhlIGNvbW1hbmQgbGluZQotICoJZmFsbGJh Y2tfYXBwbGljYXRpb25fbmFtZSAtIHdlJ2xsIGxldCBwZ19kdW1wIHNldCBpdAotICogLS0tLS0t LS0tLQotICovCi1zdGF0aWMgY2hhciAqCi1jb25zdHJ1Y3RDb25uU3RyKGNvbnN0IGNoYXIgKipr ZXl3b3JkcywgY29uc3QgY2hhciAqKnZhbHVlcykKLXsKLQlQUUV4cEJ1ZmZlciBidWYgPSBjcmVh dGVQUUV4cEJ1ZmZlcigpOwotCWNoYXIJICAgKmNvbm5zdHI7Ci0JaW50CQkJaTsKLQlib29sCQlm aXJzdGtleXdvcmQgPSB0cnVlOwotCi0JLyogQ29uc3RydWN0IGEgbmV3IGNvbm5lY3Rpb24gc3Ry aW5nIGluIGtleT0ndmFsdWUnIGZvcm1hdC4gKi8KLQlmb3IgKGkgPSAwOyBrZXl3b3Jkc1tpXSAh PSBOVUxMOyBpKyspCi0JewotCQlpZiAoc3RyY21wKGtleXdvcmRzW2ldLCAiZGJuYW1lIikgPT0g MCB8fAotCQkJc3RyY21wKGtleXdvcmRzW2ldLCAicGFzc3dvcmQiKSA9PSAwIHx8Ci0JCQlzdHJj bXAoa2V5d29yZHNbaV0sICJmYWxsYmFja19hcHBsaWNhdGlvbl9uYW1lIikgPT0gMCkKLQkJCWNv bnRpbnVlOwotCi0JCWlmICghZmlyc3RrZXl3b3JkKQotCQkJYXBwZW5kUFFFeHBCdWZmZXJDaGFy KGJ1ZiwgJyAnKTsKLQkJZmlyc3RrZXl3b3JkID0gZmFsc2U7Ci0JCWFwcGVuZFBRRXhwQnVmZmVy KGJ1ZiwgIiVzPSIsIGtleXdvcmRzW2ldKTsKLQkJYXBwZW5kQ29ublN0clZhbChidWYsIHZhbHVl c1tpXSk7Ci0JfQotCi0JY29ubnN0ciA9IHBnX3N0cmR1cChidWYtPmRhdGEpOwotCWRlc3Ryb3lQ UUV4cEJ1ZmZlcihidWYpOwotCXJldHVybiBjb25uc3RyOwotfQotCi0vKgotICogUnVuIGEgcXVl cnksIHJldHVybiB0aGUgcmVzdWx0cywgZXhpdCBwcm9ncmFtIG9uIGZhaWx1cmUuCi0gKi8KLXN0 YXRpYyBQR3Jlc3VsdCAqCi1leGVjdXRlUXVlcnkoUEdjb25uICpjb25uLCBjb25zdCBjaGFyICpx dWVyeSkKLXsKLQlQR3Jlc3VsdCAgICpyZXM7Ci0KLQlwZ19sb2dfaW5mbygiZXhlY3V0aW5nICVz IiwgcXVlcnkpOwotCi0JcmVzID0gUFFleGVjKGNvbm4sIHF1ZXJ5KTsKLQlpZiAoIXJlcyB8fAot CQlQUXJlc3VsdFN0YXR1cyhyZXMpICE9IFBHUkVTX1RVUExFU19PSykKLQl7Ci0JCXBnX2xvZ19l cnJvcigicXVlcnkgZmFpbGVkOiAlcyIsIFBRZXJyb3JNZXNzYWdlKGNvbm4pKTsKLQkJcGdfbG9n X2Vycm9yX2RldGFpbCgiUXVlcnkgd2FzOiAlcyIsIHF1ZXJ5KTsKLQkJUFFmaW5pc2goY29ubik7 Ci0JCWV4aXRfbmljZWx5KDEpOwotCX0KLQotCXJldHVybiByZXM7Ci19Ci0KIC8qCiAgKiBBcyBh Ym92ZSBmb3IgYSBTUUwgY29tbWFuZCAod2hpY2ggcmV0dXJucyBub3RoaW5nKS4KICAqLwpAQCAt MTk5NCwzICsxODQ2LDU4IEBAIHJlYWRfZHVtcGFsbF9maWx0ZXJzKGNvbnN0IGNoYXIgKmZpbGVu YW1lLCBTaW1wbGVTdHJpbmdMaXN0ICpwYXR0ZXJuKQogCiAJZmlsdGVyX2ZyZWUoJmZzdGF0ZSk7 CiB9CisKKy8qCisgKiBjcmVhdGVfb3Jfb3Blbl9kaXIKKyAqCisgKiBUaGlzIHdpbGwgY3JlYXRl IGEgbmV3IGRpcmVjdG9yeSB3aXRoIGdpdmVuIG5hbWUuICBJZiB0aGVyZSBpcyBhbHJlYWR5IHNh bWUKKyAqIGVtcHR5IGRpcmVjdG9yeSBleGlzdCwgdGhlbiB1c2UgaXQuCisgKi8KK3N0YXRpYyB2 b2lkCitjcmVhdGVfb3Jfb3Blbl9kaXIoY29uc3QgY2hhciAqZGlybmFtZSkKK3sKKwlzdHJ1Y3Qg c3RhdAkJc3Q7CisJYm9vbAkJCWlzX2VtcHR5ID0gZmFsc2U7CisKKwkvKiB3ZSBhY2NlcHQgYW4g ZW1wdHkgZXhpc3RpbmcgZGlyZWN0b3J5ICovCisJaWYgKHN0YXQoZGlybmFtZSwgJnN0KSA9PSAw ICYmIFNfSVNESVIoc3Quc3RfbW9kZSkpCisJeworCQlESVIJCSpkaXIgPSBvcGVuZGlyKGRpcm5h bWUpOworCisJCWlmIChkaXIpCisJCXsKKwkJCXN0cnVjdCBkaXJlbnQJKmQ7CisKKwkJCWlzX2Vt cHR5ID0gdHJ1ZTsKKworCQkJd2hpbGUgKGVycm5vID0gMCwgKGQgPSByZWFkZGlyKGRpcikpKQor CQkJeworCQkJCWlmIChzdHJjbXAoZC0+ZF9uYW1lLCAiLiIpICE9IDAgJiYgc3RyY21wKGQtPmRf bmFtZSwgIi4uIikgIT0gMCkKKwkJCQl7CisJCQkJCWlzX2VtcHR5ID0gZmFsc2U7CisJCQkJCWJy ZWFrOworCQkJCX0KKwkJCX0KKworCQkJaWYgKGVycm5vKQorCQkJCXBnX2ZhdGFsKCJjb3VsZCBu b3QgcmVhZCBkaXJlY3RvcnkgXCIlc1wiOiAlbSIsCisJCQkJCQlkaXJuYW1lKTsKKworCQkJaWYg KGNsb3NlZGlyKGRpcikpCisJCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBjbG9zZSBkaXJlY3Rvcnkg XCIlc1wiOiAlbSIsCisJCQkJCQlkaXJuYW1lKTsKKwkJfQorCisJCWlmKCFpc19lbXB0eSkKKwkJ eworCQkJcGdfbG9nX2Vycm9yKCJkaXJlY3RvcnkgXCIlc1wiIGV4aXN0cyBidXQgaXMgbm90IGVt cHR5IiwgZGlybmFtZSk7CisJCQlwZ19sb2dfZXJyb3JfaGludCgiSWYgeW91IHdhbnQgdG8gZHVt cCBkYXRhIG9uIHRoaXMgZGlyZWN0b3J5LCBlaXRoZXIgcmVtb3ZlIG9yIGVtcHR5ICIKKwkJCQkJ CQkgICJ0aGlzIGRpcmVjdG9yeSBcIiVzXCIgb3IgcnVuICVzICIKKwkJCQkJCQkgICJ3aXRoIGFu IGFyZ3VtZW50IG90aGVyIHRoYW4gXCIlc1wiLiIsCisJCQkJCQkJICBkaXJuYW1lLCBwcm9nbmFt ZSwgZGlybmFtZSk7CisJCQlleGl0X25pY2VseSgxKTsKKwkJfQorCX0KKwllbHNlIGlmIChta2Rp cihkaXJuYW1lLCAwNzAwKSA8IDApCisJCXBnX2ZhdGFsKCJjb3VsZCBub3QgY3JlYXRlIGRpcmVj dG9yeSBcIiVzXCI6ICVtIiwgZGlybmFtZSk7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1 bXAvcGdfcmVzdG9yZS5jIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX3Jlc3RvcmUuYwppbmRleCA4OGFl MzlkOTM4YS4uZTc5NTUwNjVmY2QgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19yZXN0 b3JlLmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX3Jlc3RvcmUuYwpAQCAtMiw3ICsyLDcgQEAK ICAqCiAgKiBwZ19yZXN0b3JlLmMKICAqCXBnX3Jlc3RvcmUgaXMgYW4gdXRpbGl0eSBleHRyYWN0 aW5nIHBvc3RncmVzIGRhdGFiYXNlIGRlZmluaXRpb25zCi0gKglmcm9tIGEgYmFja3VwIGFyY2hp dmUgY3JlYXRlZCBieSBwZ19kdW1wIHVzaW5nIHRoZSBhcmNoaXZlcgorICoJZnJvbSBhIGJhY2t1 cCBhcmNoaXZlIGNyZWF0ZWQgYnkgcGdfZHVtcC9wZ19kdW1wYWxsIHVzaW5nIHRoZSBhcmNoaXZl cgogICoJaW50ZXJmYWNlLgogICoKICAqCXBnX3Jlc3RvcmUgd2lsbCByZWFkIHRoZSBiYWNrdXAg YXJjaGl2ZSBhbmQKQEAgLTQxLDI3ICs0MSw2NyBAQAogI2luY2x1ZGUgInBvc3RncmVzX2ZlLmgi CiAKICNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CiAjaWZkZWYgSEFW RV9URVJNSU9TX0gKICNpbmNsdWRlIDx0ZXJtaW9zLmg+CiAjZW5kaWYKIAorI2luY2x1ZGUgImNv bW1vbi9jb25uZWN0LmgiCisjaW5jbHVkZSAiY29tcHJlc3NfaW8uaCIKKyNpbmNsdWRlICJjb21t b24vc3RyaW5nLmgiCisjaW5jbHVkZSAiY29tbW9uX2R1bXBhbGxfcmVzdG9yZS5oIgogI2luY2x1 ZGUgImZlX3V0aWxzL29wdGlvbl91dGlscy5oIgorI2luY2x1ZGUgImZlX3V0aWxzL3N0cmluZ191 dGlscy5oIgogI2luY2x1ZGUgImZpbHRlci5oIgogI2luY2x1ZGUgImdldG9wdF9sb25nLmgiCiAj aW5jbHVkZSAicGFyYWxsZWwuaCIKKyNpbmNsdWRlICJwZ19iYWNrdXBfYXJjaGl2ZXIuaCIKICNp bmNsdWRlICJwZ19iYWNrdXBfdXRpbHMuaCIKIAordHlwZWRlZiBzdHJ1Y3QgU2ltcGxlRGF0YWJh c2VPaWRMaXN0Q2VsbAoreworCXN0cnVjdCBTaW1wbGVEYXRhYmFzZU9pZExpc3RDZWxsCSpuZXh0 OworCU9pZAkJCQkJCQkJCWRiX29pZDsKKwljb25zdCBjaGFyCQkJCQkJCSpkYl9uYW1lOworfSBT aW1wbGVEYXRhYmFzZU9pZExpc3RDZWxsOworCit0eXBlZGVmIHN0cnVjdCBTaW1wbGVEYXRhYmFz ZU9pZExpc3QKK3sKKwlTaW1wbGVEYXRhYmFzZU9pZExpc3RDZWxsICpoZWFkOworCVNpbXBsZURh dGFiYXNlT2lkTGlzdENlbGwgKnRhaWw7Cit9IFNpbXBsZURhdGFiYXNlT2lkTGlzdDsKKworc3Rh dGljIHZvaWQKK3NpbXBsZV9kYl9vaWRfbGlzdF9hcHBlbmQoU2ltcGxlRGF0YWJhc2VPaWRMaXN0 ICpsaXN0LCBPaWQgZGJfb2lkLCBjb25zdCBjaGFyICpkYm5hbWUpOworCiBzdGF0aWMgdm9pZCB1 c2FnZShjb25zdCBjaGFyICpwcm9nbmFtZSk7CiBzdGF0aWMgdm9pZCByZWFkX3Jlc3RvcmVfZmls dGVycyhjb25zdCBjaGFyICpmaWxlbmFtZSwgUmVzdG9yZU9wdGlvbnMgKm9wdHMpOworc3RhdGlj IGJvb2wgSXNGaWxlRXhpc3RzSW5EaXJlY3RvcnkoY29uc3QgY2hhciAqZGlyLCBjb25zdCBjaGFy ICpmaWxlbmFtZSk7CitzdGF0aWMgYm9vbCByZXN0b3JlT25lRGF0YWJhc2UoY29uc3QgY2hhciAq aW5wdXRGaWxlU3BlYywKKwkJUmVzdG9yZU9wdGlvbnMgKm9wdHMsIGludCBudW1Xb3JrZXJzLCBi b29sIGFwcGVuZF9kYXRhKTsKK3N0YXRpYyBpbnQgUmVhZE9uZVN0YXRlbWVudChTdHJpbmdJbmZv IGluQnVmLCBGSUxFICpwZmlsZSk7CitzdGF0aWMgaW50IHJlc3RvcmVBbGxEYXRhYmFzZXMoUEdj b25uICpjb25uLCBjb25zdCBjaGFyICpkdW1wZGlycGF0aCwKKwlTaW1wbGVTdHJpbmdMaXN0IGRi X2V4Y2x1ZGVfcGF0dGVybnMsIFJlc3RvcmVPcHRpb25zICpvcHRzLCBpbnQgbnVtV29ya2Vycyk7 CitzdGF0aWMgdm9pZCBleGVjdXRlX2dsb2JhbF9zcWxfY29tbWFuZHMoUEdjb25uICpjb25uLCBj b25zdCBjaGFyICpkdW1wZGlycGF0aCwKKwkJY29uc3QgY2hhciAqb3V0ZmlsZSk7CitzdGF0aWMg aW50IGZpbHRlcl9kYm5hbWVzX2Zvcl9yZXN0b3JlKFBHY29ubiAqY29ubiwKKwkJU2ltcGxlRGF0 YWJhc2VPaWRMaXN0ICpkYm5hbWVfb2lkX2xpc3QsIFNpbXBsZVN0cmluZ0xpc3QgZGJfZXhjbHVk ZV9wYXR0ZXJucyk7CitzdGF0aWMgaW50IGdldF9kYm5hbWVfb2lkX2xpc3RfZnJvbV9tZmlsZShj b25zdCBjaGFyICpkdW1wZGlycGF0aCwKKwkJU2ltcGxlRGF0YWJhc2VPaWRMaXN0ICpkYm5hbWVf b2lkX2xpc3QpOworc3RhdGljIHZvaWQgc2ltcGxlX2RiX29pZF9saXN0X2FwcGVuZChTaW1wbGVE YXRhYmFzZU9pZExpc3QgKmxpc3QsIE9pZCBkYl9vaWQsCisJCWNvbnN0IGNoYXIgKmRibmFtZSk7 CitzdGF0aWMgYm9vbCBpc19mdWxsX3BhdHRlcm4oUEdjb25uICpjb25uLCBjb25zdCBjaGFyICpz dHIsIGNvbnN0IGNoYXIgKnB0cm4pOworc3RhdGljIHZvaWQgc2ltcGxlX3N0cmluZ19mdWxsX2xp c3RfZGVsZXRlKFNpbXBsZVN0cmluZ0xpc3QgKmxpc3QpOworc3RhdGljIHZvaWQgc2ltcGxlX2Ri X29pZF9mdWxsX2xpc3RfZGVsZXRlKFNpbXBsZURhdGFiYXNlT2lkTGlzdCAqbGlzdCk7CitzdGF0 aWMgdm9pZCBzaW1wbGVfZGJfb2lkX2xpc3RfZGVsZXRlKFNpbXBsZURhdGFiYXNlT2lkTGlzdCAq bGlzdCwKKwkJU2ltcGxlRGF0YWJhc2VPaWRMaXN0Q2VsbCAqY2VsbCwgU2ltcGxlRGF0YWJhc2VP aWRMaXN0Q2VsbCAqcHJldik7CiAKIGludAogbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiB7 CiAJUmVzdG9yZU9wdGlvbnMgKm9wdHM7CiAJaW50CQkJYzsKLQlpbnQJCQlleGl0X2NvZGU7CiAJ aW50CQkJbnVtV29ya2VycyA9IDE7Ci0JQXJjaGl2ZSAgICAqQUg7CiAJY2hhcgkgICAqaW5wdXRG aWxlU3BlYzsKIAlzdGF0aWMgaW50CWRpc2FibGVfdHJpZ2dlcnMgPSAwOwogCXN0YXRpYyBpbnQJ ZW5hYmxlX3Jvd19zZWN1cml0eSA9IDA7CkBAIC03NywxMSArMTE3LDE0IEBAIG1haW4oaW50IGFy Z2MsIGNoYXIgKiphcmd2KQogCXN0YXRpYyBpbnQJc3RyaWN0X25hbWVzID0gMDsKIAlib29sCQlk YXRhX29ubHkgPSBmYWxzZTsKIAlib29sCQlzY2hlbWFfb25seSA9IGZhbHNlOworCVNpbXBsZVN0 cmluZ0xpc3QgICAgZGJfZXhjbHVkZV9wYXR0ZXJucyA9IHtOVUxMLCBOVUxMfTsKKwlib29sCQkJ CWdsb2JhbHNfb25seSA9IGZhbHNlOwogCiAJc3RydWN0IG9wdGlvbiBjbWRvcHRzW10gPSB7CiAJ CXsiY2xlYW4iLCAwLCBOVUxMLCAnYyd9LAogCQl7ImNyZWF0ZSIsIDAsIE5VTEwsICdDJ30sCiAJ CXsiZGF0YS1vbmx5IiwgMCwgTlVMTCwgJ2EnfSwKKwkJeyJnbG9iYWxzLW9ubHkiLCAwLCBOVUxM LCAnZyd9LAogCQl7ImRibmFtZSIsIDEsIE5VTEwsICdkJ30sCiAJCXsiZXhpdC1vbi1lcnJvciIs IDAsIE5VTEwsICdlJ30sCiAJCXsiZXhjbHVkZS1zY2hlbWEiLCAxLCBOVUxMLCAnTid9LApAQCAt MTI4LDYgKzE3MSw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQl7Im5vLXNlY3Vy aXR5LWxhYmVscyIsIG5vX2FyZ3VtZW50LCAmbm9fc2VjdXJpdHlfbGFiZWxzLCAxfSwKIAkJeyJu by1zdWJzY3JpcHRpb25zIiwgbm9fYXJndW1lbnQsICZub19zdWJzY3JpcHRpb25zLCAxfSwKIAkJ eyJmaWx0ZXIiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgNH0sCisJCXsiZXhjbHVkZS1kYXRh YmFzZSIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCA2fSwKIAogCQl7TlVMTCwgMCwgTlVMTCwg MH0KIAl9OwpAQCAtMTU2LDcgKzIwMCw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQog CQl9CiAJfQogCi0Jd2hpbGUgKChjID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJndiwgImFjQ2Q6ZWY6 RjpoOkk6ajpsTDpuOk46T3A6UDpSc1M6dDpUOlU6dndXeDEiLAorCXdoaWxlICgoYyA9IGdldG9w dF9sb25nKGFyZ2MsIGFyZ3YsICJhQWNDZDplZjpGOmdoOkk6ajpsTDpuOk46T3A6UDpSc1M6dDpU OlU6dndXeDEiLAogCQkJCQkJCWNtZG9wdHMsIE5VTEwpKSAhPSAtMSkKIAl7CiAJCXN3aXRjaCAo YykKQEAgLTE4MywxMSArMjI3LDE0IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQkJ CWlmIChzdHJsZW4ob3B0YXJnKSAhPSAwKQogCQkJCQlvcHRzLT5mb3JtYXROYW1lID0gcGdfc3Ry ZHVwKG9wdGFyZyk7CiAJCQkJYnJlYWs7CisJCQljYXNlICdnJzoKKwkJCQkvKiByZXN0b3JlIG9u bHkgZ2xvYmFsLmRhdCBmaWxlIGZyb20gZGlyZWN0b3J5ICovCisJCQkJZ2xvYmFsc19vbmx5ID0g dHJ1ZTsKKwkJCQlicmVhazsKIAkJCWNhc2UgJ2gnOgogCQkJCWlmIChzdHJsZW4ob3B0YXJnKSAh PSAwKQogCQkJCQlvcHRzLT5jcGFyYW1zLnBnaG9zdCA9IHBnX3N0cmR1cChvcHRhcmcpOwogCQkJ CWJyZWFrOwotCiAJCQljYXNlICdqJzoJCQkvKiBudW1iZXIgb2YgcmVzdG9yZSBqb2JzICovCiAJ CQkJaWYgKCFvcHRpb25fcGFyc2VfaW50KG9wdGFyZywgIi1qLy0tam9icyIsIDEsCiAJCQkJCQkJ CQkgIFBHX01BWF9KT0JTLApAQCAtMzAyLDYgKzM0OSwxMCBAQCBtYWluKGludCBhcmdjLCBjaGFy ICoqYXJndikKIAkJCQkJZXhpdCgxKTsKIAkJCQlvcHRzLT5leGl0X29uX2Vycm9yID0gdHJ1ZTsK IAkJCQlicmVhazsKKwkJCWNhc2UgNjoKKwkJCQkvKiBsaXN0IG9mIGRhdGFiYXNlcyBwYXR0ZXJu cyB0aG9zZSBuZWVkcyB0byBza2lwIHdoaWxlIHJlc3RvcmluZyAqLworCQkJCXNpbXBsZV9zdHJp bmdfbGlzdF9hcHBlbmQoJmRiX2V4Y2x1ZGVfcGF0dGVybnMsIG9wdGFyZyk7CisJCQkJYnJlYWs7 CiAKIAkJCWRlZmF1bHQ6CiAJCQkJLyogZ2V0b3B0X2xvbmcgYWxyZWFkeSBlbWl0dGVkIGEgY29t cGxhaW50ICovCkBAIC0zMjksNiArMzgwLDEzIEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2 KQogCWlmICghb3B0cy0+Y3BhcmFtcy5kYm5hbWUgJiYgIW9wdHMtPmZpbGVuYW1lICYmICFvcHRz LT50b2NTdW1tYXJ5KQogCQlwZ19mYXRhbCgib25lIG9mIC1kLy0tZGJuYW1lIGFuZCAtZi8tLWZp bGUgbXVzdCBiZSBzcGVjaWZpZWQiKTsKIAorCWlmIChkYl9leGNsdWRlX3BhdHRlcm5zLmhlYWQg IT0gTlVMTCAmJiBnbG9iYWxzX29ubHkpCisJeworCQlwZ19sb2dfZXJyb3IoIm9wdGlvbiAtLWV4 Y2x1ZGUtZGF0YWJhc2UgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIgd2l0aCAtZy8tLWdsb2JhbHMt b25seSIpOworCQlwZ19sb2dfZXJyb3JfaGludCgiVHJ5IFwiJXMgLS1oZWxwXCIgZm9yIG1vcmUg aW5mb3JtYXRpb24uIiwgcHJvZ25hbWUpOworCQlleGl0X25pY2VseSgxKTsKKwl9CisKIAkvKiBT aG91bGQgZ2V0IGF0IG1vc3Qgb25lIG9mIC1kIGFuZCAtZiwgZWxzZSB1c2VyIGlzIGNvbmZ1c2Vk ICovCiAJaWYgKG9wdHMtPmNwYXJhbXMuZGJuYW1lKQogCXsKQEAgLTM4MywyOCArNDQxLDgwIEBA IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCiAJaWYgKG9wdHMtPmZvcm1hdE5hbWUpCiAJ ewotCQlzd2l0Y2ggKG9wdHMtPmZvcm1hdE5hbWVbMF0pCisJCW9wdHMtPmZvcm1hdCA9IHBhcnNl RHVtcEZvcm1hdChvcHRzLT5mb3JtYXROYW1lKTsKKworCQkvKiBQbGFpbiBmb3JtYXQgaXMgbm90 IHN1cHBvcnRlZCBmb3IgcGdfcmVzdG9yZS4gKi8KKwkJaWYgKG9wdHMtPmZvcm1hdCA9PSBhcmNo TnVsbCkKIAkJewotCQkJY2FzZSAnYyc6Ci0JCQljYXNlICdDJzoKLQkJCQlvcHRzLT5mb3JtYXQg PSBhcmNoQ3VzdG9tOwotCQkJCWJyZWFrOworCQkJcGdfZmF0YWwoInVucmVjb2duaXplZCBhcmNo aXZlIGZvcm1hdCBcIiVzXCI7IHBsZWFzZSBzcGVjaWZ5IFwiY1wiLCBcImRcIiwgb3IgXCJ0XCIi LAorCQkJCQlvcHRzLT5mb3JtYXROYW1lKTsKKwkJfQorCX0KIAotCQkJY2FzZSAnZCc6Ci0JCQlj YXNlICdEJzoKLQkJCQlvcHRzLT5mb3JtYXQgPSBhcmNoRGlyZWN0b3J5OwotCQkJCWJyZWFrOwor CS8qCisJICogSWYgdG9jLmRhdCBmaWxlIGRvZXMgbm90IHByZXNlbnQgaW4gY3VycmVudCBwYXRo LCB0aGVuIGNoZWNrIGZvcgorCSAqIGdsb2JhbC5kYXQgYW5kIG1hcC5kYXQgZmlsZXMuICBJZiBi b3RoIGZpbGVzIGFyZSBwcmVzZW50LCB0aGVuCisJICogcmVzdG9yZSBhbGwgdGhlIGRhdGFiYXNl cyBmcm9tIG1hcC5kYXQgZmlsZSBsaXN0IGFuZCBza2lwIHJlc3RvcmluZyBmb3IKKwkgKiAtLWV4 Y2x1ZGUtZGF0YWJhc2UgcGF0dGVybnMuCisJICovCisJaWYgKGlucHV0RmlsZVNwZWMgIT0gTlVM TCAmJgorCQkJIUlzRmlsZUV4aXN0c0luRGlyZWN0b3J5KGlucHV0RmlsZVNwZWMsICJ0b2MuZGF0 IikpCisJeworCQkvKiBJZiBnbG9iYWwuZGF0IGFuZCBtYXAuZGF0IGFyZSBleGlzdCwgdGhlbiBw cm9jZXMgdGhlbS4gKi8KKwkJaWYgKElzRmlsZUV4aXN0c0luRGlyZWN0b3J5KHBnX3N0cmR1cChp bnB1dEZpbGVTcGVjKSwgImdsb2JhbC5kYXQiKQorCQkJCSYmIElzRmlsZUV4aXN0c0luRGlyZWN0 b3J5KHBnX3N0cmR1cChpbnB1dEZpbGVTcGVjKSwgIm1hcC5kYXQiKSkKKwkJeworCQkJUEdjb25u CSpjb25uID0gTlVMTDsgLyogQ29ubmVjdGlvbiB0byByZXN0b3JlIGdsb2JhbCBzcWwgY29tbWFu ZHMuICovCisJCQlpbnQJCWV4aXRfY29kZSA9IDA7CiAKLQkJCWNhc2UgJ3QnOgotCQkJY2FzZSAn VCc6Ci0JCQkJb3B0cy0+Zm9ybWF0ID0gYXJjaFRhcjsKLQkJCQlicmVhazsKKwkJCS8qIENvbm5l Y3QgdG8gZGF0YWJhc2UgdG8gZXhlY3V0ZSBnbG9iYWwgc3FsIGNvbW1hbmRzIGZyb20gZ2xvYmFs LmRhdCBmaWxlLiAqLworCQkJaWYgKG9wdHMtPmNwYXJhbXMuZGJuYW1lKQorCQkJeworCQkJCWNv bm4gPSBjb25uZWN0RGF0YWJhc2Uob3B0cy0+Y3BhcmFtcy5kYm5hbWUsIE5VTEwsIG9wdHMtPmNw YXJhbXMucGdob3N0LAorCQkJCQkJb3B0cy0+Y3BhcmFtcy5wZ3BvcnQsIG9wdHMtPmNwYXJhbXMu dXNlcm5hbWUsIFRSSV9ERUZBVUxULCBmYWxzZSwKKwkJCQkJCXByb2duYW1lLCBOVUxMLCBOVUxM KTsKIAotCQkJZGVmYXVsdDoKLQkJCQlwZ19mYXRhbCgidW5yZWNvZ25pemVkIGFyY2hpdmUgZm9y bWF0IFwiJXNcIjsgcGxlYXNlIHNwZWNpZnkgXCJjXCIsIFwiZFwiLCBvciBcInRcIiIsCi0JCQkJ CQkgb3B0cy0+Zm9ybWF0TmFtZSk7Ci0JCX0KLQl9CisJCQkJaWYgKCFjb25uKQorCQkJCQlwZ19m YXRhbCgiY291bGQgbm90IGNvbm5lY3QgdG8gZGF0YWJhc2UgXCIlc1wiIiwgb3B0cy0+Y3BhcmFt cy5kYm5hbWUpOworCQkJfQorCisJCQkvKiBPcGVuIGdsb2JhbC5kYXQgZmlsZSBhbmQgZXhlY3V0 ZS9hcHBlbmQgYWxsIHRoZSBnbG9iYWwgc3FsIGNvbW1hbmRzLiAqLworCQkJZXhlY3V0ZV9nbG9i YWxfc3FsX2NvbW1hbmRzKGNvbm4sIGlucHV0RmlsZVNwZWMsIG9wdHMtPmZpbGVuYW1lKTsKKwor CQkJLyogSWYgZ2xvYmFscy1vbmx5LCB0aGVuIHJldHVybiBmcm9tIGhlcmUuICovCisJCQlpZiAo Z2xvYmFsc19vbmx5KQorCQkJeworCQkJCWlmIChjb25uKQorCQkJCQlQUWZpbmlzaChjb25uKTsK KwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQkvKiBOb3cgcmVzdG9yZSBhbGwgdGhlIGRhdGFiYXNl cyBmcm9tIG1hcC5kYXQgZmlsZS4gKi8KKwkJCQlleGl0X2NvZGUgPSByZXN0b3JlQWxsRGF0YWJh c2VzKGNvbm4sIGlucHV0RmlsZVNwZWMsIGRiX2V4Y2x1ZGVfcGF0dGVybnMsCisJCQkJCQlvcHRz LCBudW1Xb3JrZXJzKTsKKwkJCX0KKworCQkJLyogRnJlZSBkYiBwYXR0ZXJuIGxpc3QuICovCisJ CQlzaW1wbGVfc3RyaW5nX2Z1bGxfbGlzdF9kZWxldGUoJmRiX2V4Y2x1ZGVfcGF0dGVybnMpOwor CisJCQlyZXR1cm4gZXhpdF9jb2RlOworCQl9LyogZW5kIGlmICovCisJfS8qIGVuZCBpZiAqLwor CisJcmV0dXJuIHJlc3RvcmVPbmVEYXRhYmFzZShpbnB1dEZpbGVTcGVjLCBvcHRzLCBudW1Xb3Jr ZXJzLCBmYWxzZSk7Cit9CisKKy8qCisgKiByZXN0b3JlT25lRGF0YWJhc2UKKyAqCisgKiBUaGlz IHdpbGwgcmVzdG9yZSBvbmUgZGF0YWJhc2UgdXNpbmcgdG9jLmRhdCBmaWxlLgorICovCitzdGF0 aWMgYm9vbAorcmVzdG9yZU9uZURhdGFiYXNlKGNvbnN0IGNoYXIgKmlucHV0RmlsZVNwZWMsIFJl c3RvcmVPcHRpb25zICpvcHRzLAorCQlpbnQgbnVtV29ya2VycywgYm9vbCBhcHBlbmRfZGF0YSkK K3sKKwlBcmNoaXZlCQkqQUg7CisJYm9vbAkJZXhpdF9jb2RlOwogCiAJQUggPSBPcGVuQXJjaGl2 ZShpbnB1dEZpbGVTcGVjLCBvcHRzLT5mb3JtYXQpOwogCkBAIC00MzEsMTEgKzU0MSwxMSBAQCBt YWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAlBSC0+bnVtV29ya2VycyA9IG51bVdvcmtlcnM7 CiAKIAlpZiAob3B0cy0+dG9jU3VtbWFyeSkKLQkJUHJpbnRUT0NTdW1tYXJ5KEFIKTsKKwkJUHJp bnRUT0NTdW1tYXJ5KEFILCBhcHBlbmRfZGF0YSk7CiAJZWxzZQogCXsKIAkJUHJvY2Vzc0FyY2hp dmVSZXN0b3JlT3B0aW9ucyhBSCk7Ci0JCVJlc3RvcmVBcmNoaXZlKEFIKTsKKwkJUmVzdG9yZUFy Y2hpdmUoQUgsIGFwcGVuZF9kYXRhKTsKIAl9CiAKIAkvKiBkb25lLCBwcmludCBhIHN1bW1hcnkg b2YgaWdub3JlZCBlcnJvcnMgKi8KQEAgLTQ3MSw2ICs1ODEsNyBAQCB1c2FnZShjb25zdCBjaGFy ICpwcm9nbmFtZSkKIAlwcmludGYoXygiICAtYywgLS1jbGVhbiAgICAgICAgICAgICAgICAgIGNs ZWFuIChkcm9wKSBkYXRhYmFzZSBvYmplY3RzIGJlZm9yZSByZWNyZWF0aW5nXG4iKSk7CiAJcHJp bnRmKF8oIiAgLUMsIC0tY3JlYXRlICAgICAgICAgICAgICAgICBjcmVhdGUgdGhlIHRhcmdldCBk YXRhYmFzZVxuIikpOwogCXByaW50ZihfKCIgIC1lLCAtLWV4aXQtb24tZXJyb3IgICAgICAgICAg ZXhpdCBvbiBlcnJvciwgZGVmYXVsdCBpcyB0byBjb250aW51ZVxuIikpOworCXByaW50ZihfKCIg IC1nLCAtLWdsb2JhbHMtb25seSAgICAgICAgICAgcmVzdG9yZSBvbmx5IGdsb2JhbCBvYmplY3Rz LCBubyBkYXRhYmFzZXNcbiIpKTsKIAlwcmludGYoXygiICAtSSwgLS1pbmRleD1OQU1FICAgICAg ICAgICAgIHJlc3RvcmUgbmFtZWQgaW5kZXhcbiIpKTsKIAlwcmludGYoXygiICAtaiwgLS1qb2Jz PU5VTSAgICAgICAgICAgICAgIHVzZSB0aGlzIG1hbnkgcGFyYWxsZWwgam9icyB0byByZXN0b3Jl XG4iKSk7CiAJcHJpbnRmKF8oIiAgLUwsIC0tdXNlLWxpc3Q9RklMRU5BTUUgICAgICB1c2UgdGFi bGUgb2YgY29udGVudHMgZnJvbSB0aGlzIGZpbGUgZm9yXG4iCkBAIC00ODMsNiArNTk0LDcgQEAg dXNhZ2UoY29uc3QgY2hhciAqcHJvZ25hbWUpCiAJcHJpbnRmKF8oIiAgLVMsIC0tc3VwZXJ1c2Vy PU5BTUUgICAgICAgICBzdXBlcnVzZXIgdXNlciBuYW1lIHRvIHVzZSBmb3IgZGlzYWJsaW5nIHRy aWdnZXJzXG4iKSk7CiAJcHJpbnRmKF8oIiAgLXQsIC0tdGFibGU9TkFNRSAgICAgICAgICAgICBy ZXN0b3JlIG5hbWVkIHJlbGF0aW9uICh0YWJsZSwgdmlldywgZXRjLilcbiIpKTsKIAlwcmludGYo XygiICAtVCwgLS10cmlnZ2VyPU5BTUUgICAgICAgICAgIHJlc3RvcmUgbmFtZWQgdHJpZ2dlclxu IikpOworCXByaW50ZihfKCIgIC0tZXhjbHVkZS1kYXRhYmFzZT1QQVRURVJOICAgZXhjbHVkZSBk YXRhYmFzZXMgd2hvc2UgbmFtZSBtYXRjaGVzIHdpdGggcGF0dGVyblxuIikpOwogCXByaW50Zihf KCIgIC14LCAtLW5vLXByaXZpbGVnZXMgICAgICAgICAgc2tpcCByZXN0b3JhdGlvbiBvZiBhY2Nl c3MgcHJpdmlsZWdlcyAoZ3JhbnQvcmV2b2tlKVxuIikpOwogCXByaW50ZihfKCIgIC0xLCAtLXNp bmdsZS10cmFuc2FjdGlvbiAgICAgcmVzdG9yZSBhcyBhIHNpbmdsZSB0cmFuc2FjdGlvblxuIikp OwogCXByaW50ZihfKCIgIC0tZGlzYWJsZS10cmlnZ2VycyAgICAgICAgICAgZGlzYWJsZSB0cmln Z2VycyBkdXJpbmcgZGF0YS1vbmx5IHJlc3RvcmVcbiIpKTsKQEAgLTYyMSwzICs3MzMsNTM2IEBA IHJlYWRfcmVzdG9yZV9maWx0ZXJzKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBSZXN0b3JlT3B0aW9u cyAqb3B0cykKIAogCWZpbHRlcl9mcmVlKCZmc3RhdGUpOwogfQorCisvKgorICogSXNGaWxlRXhp c3RzSW5EaXJlY3RvcnkKKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgZmlsZSBleGlzdCBpbiBjdXJy ZW50IGRpcmVjdG9yeS4KKyAqLworc3RhdGljIGJvb2wKK0lzRmlsZUV4aXN0c0luRGlyZWN0b3J5 KGNvbnN0IGNoYXIgKmRpciwgY29uc3QgY2hhciAqZmlsZW5hbWUpCit7CisJc3RydWN0IHN0YXQJ CQlzdDsKKwljaGFyCQkJCWJ1ZltNQVhQR1BBVEhdOworCisJaWYgKHNucHJpbnRmKGJ1ZiwgTUFY UEdQQVRILCAiJXMvJXMiLCBkaXIsIGZpbGVuYW1lKSA+PSBNQVhQR1BBVEgpCisJCXBnX2ZhdGFs KCJkaXJlY3RvcnkgbmFtZSB0b28gbG9uZzogXCIlc1wiIiwgZGlyKTsKKworCXJldHVybiAoc3Rh dChidWYsICZzdCkgPT0gMCAmJiBTX0lTUkVHKHN0LnN0X21vZGUpKTsKK30KKworLyoKKyAqIFJl YWRPbmVTdGF0ZW1lbnQKKyAqCisgKiBUaGlzIHdpbGwgc3RhcnQgcmVhZGluZyBmcm9tIHBhc3Nl ZCBmaWxlIHBvaW50ZXIgdXNpbmcgZmdldGMgYW5kIHJlYWQgdGlsbAorICogc2VtaWNvbG9uKHNx bCBzdGF0ZW1lbnQgdGVybWluYXRvciBmb3IgZ2xvYmFsLnNxbCBmaWxlKQorICoKKyAqIEVPRiBp cyByZXR1cm5lZCBpZiBlbmQtb2YtZmlsZSBpbnB1dCBpcyBzZWVuOyB0aW1lIHRvIHNodXQgZG93 bi4KKyAqLworCitzdGF0aWMgaW50CitSZWFkT25lU3RhdGVtZW50KFN0cmluZ0luZm8gaW5CdWYs IEZJTEUgKnBmaWxlKQoreworCWludAkJCWM7IC8qIGNoYXJhY3RlciByZWFkIGZyb20gZ2V0Yygp ICovCisKKwlyZXNldFN0cmluZ0luZm8oaW5CdWYpOworCisJLyoKKwkgKiBSZWFkIGNoYXJhY3Rl cnMgdW50aWwgRU9GIG9yIHRoZSBhcHByb3ByaWF0ZSBkZWxpbWl0ZXIgaXMgc2Vlbi4KKwkgKi8K Kwl3aGlsZSAoKGMgPSBmZ2V0YyhwZmlsZSkpICE9IEVPRikKKwl7CisJCWFwcGVuZFN0cmluZ0lu Zm9DaGFyKGluQnVmLCAoY2hhcikgYyk7CisKKwkJaWYgKGMgPT0gJ1xuJykKKwkJeworCQkJaWYo aW5CdWYtPmxlbiA+IDEgJiYKKwkJCQkJaW5CdWYtPmRhdGFbaW5CdWYtPmxlbiAtIDJdID09ICc7 JykKKwkJCQlicmVhazsKKwkJCWVsc2UKKwkJCQljb250aW51ZTsKKwkJfQorCX0KKworCS8qIE5v IGlucHV0IGJlZm9yZSBFT0Ygc2lnbmFsIG1lYW5zIHRpbWUgdG8gcXVpdC4gKi8KKwlpZiAoYyA9 PSBFT0YgJiYgaW5CdWYtPmxlbiA9PSAwKQorCQlyZXR1cm4gRU9GOworCisJLyogQWRkICdcMCcg dG8gbWFrZSBpdCBsb29rIHRoZSBzYW1lIGFzIG1lc3NhZ2UgY2FzZS4gKi8KKwlhcHBlbmRTdHJp bmdJbmZvQ2hhcihpbkJ1ZiwgKGNoYXIpICdcMCcpOworCisJcmV0dXJuICdRJzsKK30KKworLyoK KyAqIGZpbHRlcl9kYm5hbWVzX2Zvcl9yZXN0b3JlCisgKgorICogVGhpcyB3aWxsIHJlbW92ZSBu YW1lcyBmcm9tIGFsbCBkYmxpc3QgdGhhdCBhcmUgZ2l2ZW4gd2l0aCBleGNsdWRlLWRhdGFiYXNl CisgKiBvcHRpb24uCisgKgorICogcmV0dXJucyBudW1iZXIgb2YgZGJuYW1lcyB0aG9zZSB3aWxs IGJlIHJlc3RvcmVkLgorICovCitzdGF0aWMgaW50CitmaWx0ZXJfZGJuYW1lc19mb3JfcmVzdG9y ZShQR2Nvbm4gKmNvbm4sIFNpbXBsZURhdGFiYXNlT2lkTGlzdCAqZGJuYW1lX29pZF9saXN0LAor CQlTaW1wbGVTdHJpbmdMaXN0IGRiX2V4Y2x1ZGVfcGF0dGVybnMpCit7CisJU2ltcGxlRGF0YWJh c2VPaWRMaXN0Q2VsbAkqZGJvaWRfY2VsbCA9IGRibmFtZV9vaWRfbGlzdC0+aGVhZDsKKwlTaW1w bGVEYXRhYmFzZU9pZExpc3RDZWxsCSpkYm9pZHByZWNlbGwgPSBOVUxMOworCWludAkJCQkJCQlj b3VudF9kYiA9IDA7CisKKwkvKiBSZXR1cm4gMCBpZiB0aGVyZSBpcyBubyBkYiB0byByZXN0b3Jl LiAqLworCWlmIChkYm9pZF9jZWxsID09IE5VTEwpCisJCXJldHVybiAwOworCisJLyogUHJvY2Vz cyBvbmUgYnkgb25lIGFsbCBkYm5hbWVzIGFuZCBpZiBuZWVkcyB0byBza2lwIHJlc3RvcmluZy4g Ki8KKwl3aGlsZSAoZGJvaWRfY2VsbCAhPSBOVUxMKQorCXsKKwkJYm9vbAkJCQkJCXNraXBfZGJf cmVzdG9yZSA9IGZhbHNlOworCQlTaW1wbGVEYXRhYmFzZU9pZExpc3RDZWxsCSpuZXh0ID0gZGJv aWRfY2VsbC0+bmV4dDsKKworCQkvKiBOb3cgbWF0Y2ggdGhpcyBkYm5hbWUgd2l0aCBleGNsdWRl LWRhdGFiYXNlIGxpc3QuICovCisJCWZvciAoU2ltcGxlU3RyaW5nTGlzdENlbGwgKmNlbGxkYiA9 IGRiX2V4Y2x1ZGVfcGF0dGVybnMuaGVhZDsgY2VsbGRiOyBjZWxsZGIgPSBjZWxsZGItPm5leHQp CisJCXsKKwkJCWlmICgoY29ubiAmJiBpc19mdWxsX3BhdHRlcm4oY29ubiwgZGJvaWRfY2VsbC0+ ZGJfbmFtZSwgY2VsbGRiLT52YWwpKSB8fAorCQkJCQkoIWNvbm4gJiYgcGdfc3RyY2FzZWNtcChk Ym9pZF9jZWxsLT5kYl9uYW1lLCBjZWxsZGItPnZhbCkgPT0gMCkpCisJCQl7CisJCQkJLyoKKwkJ CQkgKiBBcyB3ZSBuZWVkIHRvIHNraXAgdGhpcyBkYm5hbWUgc28gc2V0IGZsYWcgdG8gcmVtb3Zl IGl0IGZyb20KKwkJCQkgKiBsaXN0LgorCQkJCSAqCisJCQkJICogTm90ZTogd2UgY2FuJ3QgcmVt b3ZlIHRoaXMgcGF0dGVybiBmcm9tIHNraXAgbGlzdCBhcyB3ZQorCQkJCSAqIG1pZ2h0IGhhdmUg bXVsdGlwbGUgZGF0YWJhc2UgbmFtZSB3aXRoIHRoaXMgc2FtZSBwYXR0ZXJuLgorCQkJCSAqLwor CQkJCXNraXBfZGJfcmVzdG9yZSA9IHRydWU7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQkv KiBJbmNyZW1lbnQgY291bnQgaWYgZGIgbmVlZHMgdG8gYmUgcmVzdG9yZWQuICovCisJCWlmIChz a2lwX2RiX3Jlc3RvcmUpCisJCXsKKwkJCXBnX2xvZ19pbmZvKCJleGNsdWRpbmcgZGF0YWJhc2Ug XCIlc1wiIiwgZGJvaWRfY2VsbC0+ZGJfbmFtZSk7CisJCQlzaW1wbGVfZGJfb2lkX2xpc3RfZGVs ZXRlKGRibmFtZV9vaWRfbGlzdCwgZGJvaWRfY2VsbCwgZGJvaWRwcmVjZWxsKTsKKwkJfQorCQll bHNlCisJCXsKKwkJCWNvdW50X2RiKys7IC8qIEluY3JlbWVudCBkYiBjb3V0ZXIuICovCisJCQlk Ym9pZHByZWNlbGwgPSBkYm9pZF9jZWxsOworCQl9CisKKwkJLyogUHJvY2VzcyBuZXh0IGRibmFt ZSBmcm9tIGRibmFtZSBsaXN0LiAqLworCQlkYm9pZF9jZWxsID0gbmV4dDsKKwl9CisKKwlyZXR1 cm4gY291bnRfZGI7Cit9CisKKy8qCisgKiBnZXRfZGJuYW1lX29pZF9saXN0X2Zyb21fbWZpbGUK KyAqCisgKiBPcGVuIG1hcC5kYXQgZmlsZSBhbmQgcmVhZCBsaW5lIGJ5IGxpbmUgYW5kIHRoZW4g cHJlcGFyZSBhIGxpc3Qgb2YgZGF0YWJhc2UKKyAqIG5hbWVzIGFuZCBjb3JyZXNwb2RpbmcgZGJf b2lkLgorICoKKyAqIFJldHVybnMsIHRvdGFsIG51bWJlciBvZiBkYXRhYmFzZSBuYW1lcyBpbiBt YXAuZGF0IGZpbGUuCisgKi8KK3N0YXRpYyBpbnQKK2dldF9kYm5hbWVfb2lkX2xpc3RfZnJvbV9t ZmlsZShjb25zdCBjaGFyICpkdW1wZGlycGF0aCwgU2ltcGxlRGF0YWJhc2VPaWRMaXN0ICpkYm5h bWVfb2lkX2xpc3QpCit7CisJRklMRSAgICAqcGZpbGU7CisJY2hhciAgICBtYXBfZmlsZV9wYXRo W01BWFBHUEFUSF07CisJY2hhciAgICBsaW5lW01BWFBHUEFUSF07CisJaW50ICAgICBjb3VudCA9 IDA7CisKKwlzbnByaW50ZihtYXBfZmlsZV9wYXRoLCBNQVhQR1BBVEgsICIlcy9tYXAuZGF0Iiwg ZHVtcGRpcnBhdGgpOworCisJLyogT3BlbiBtYXAuZGF0IGZpbGUuICovCisJcGZpbGUgPSBmb3Bl bihtYXBfZmlsZV9wYXRoLCAiciIpOworCisJaWYgKHBmaWxlID09IE5VTEwpCisJCXBnX2ZhdGFs KCJjb3VsZCBub3Qgb3BlbiBtYXAuZGF0IGZpbGU6IFwiJXNcIiIsIG1hcF9maWxlX3BhdGgpOwor CisJLyogQXBwZW5kIGFsbCB0aGUgZGJuYW1lIGFuZCBkYl9vaWQgdG8gdGhlIGxpc3QuICovCisJ d2hpbGUoKGZnZXRzKGxpbmUsIE1BWFBHUEFUSCwgcGZpbGUpKSAhPSBOVUxMKQorCXsKKwkJT2lk ICAgICAgICAgZGJfb2lkOworCQljaGFyCQlkYl9vaWRfc3RyW01BWFBHUEFUSCArIDFdOworCQlj aGFyICAgICAgICBkYm5hbWVbTUFYUEdQQVRIICsgMV07CisKKwkJLyogRXh0cmFjdCBkYm9pZC4g Ki8KKwkJc3NjYW5mKGxpbmUsICIldSIgLCAmZGJfb2lkKTsKKwkJc3NjYW5mKGxpbmUsICIlcyIg LCBkYl9vaWRfc3RyKTsKKworCQkvKiBOb3cgY29weSBkYm5hbWUuICovCisJCXN0cmNweShkYm5h bWUsIGxpbmUgKyBzdHJsZW4oZGJfb2lkX3N0cikgKyAxKTsKKworCQkvKiBSZW1vdmUgXG4gZnJv bSBkYmFubWUuICovCisJCWRibmFtZVtzdHJsZW4oZGJuYW1lKSAtIDFdID0gJ1wwJzsKKworCQlw Z19sb2dfaW5mbygiZm91bmQgZGJuYW1lIGFzIDogXCIlc1wiIGFuZCBkYl9vaWQ6JXUgaW4gbWFw LmRhdCBmaWxlIHdoaWxlIHJlc3RvcmluZyIsIGRibmFtZSwgZGJfb2lkKTsKKworCQkvKiBSZXBv cnQgZXJyb3IgaWYgZmlsZSBoYXMgYW55IGNvcnJ1cHRlZCBkYXRhLiAqLworCQlpZiAoIU9pZElz VmFsaWQoZGJfb2lkKSB8fCBzdHJsZW4oZGJuYW1lKSA9PSAwKQorCQkJcGdfZmF0YWwoImludmFs aWQgZW50cnkgaW4gbWFwLmRhdCBmaWxlIGF0IGxpbmUgOiAlZCIsIGNvdW50ICsgMSk7CisKKwkJ LyoKKwkJICogWFhYIDogYmVmb3JlIGFkZGluZyBkYm5hbWUgaW50byBsaXN0LCB3ZSBjYW4gdmVy aWZ5IHRoYXQgdGhpcyBkYgorCQkgKiBuZWVkcyB0byBza2lwcGVkIGZvciByZXN0b3JlIG9yIG5v dCBidXQgYXMgb2Ygbm93LCB3ZSBhcmUgbWFraW5nCisJCSAqIGEgbGlzdCBvZiBhbGwgdGhlIGRh dGFiYXNlcy4KKwkJICovCisJCXNpbXBsZV9kYl9vaWRfbGlzdF9hcHBlbmQoZGJuYW1lX29pZF9s aXN0LCBkYl9vaWQsIGRibmFtZSk7CisJCWNvdW50Kys7CisJfQorCisJLyogQ2xvc2UgbWFwLmRh dCBmaWxlLiAqLworCWZjbG9zZShwZmlsZSk7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKKy8qCisg KiByZXN0b3JlQWxsRGF0YWJhc2VzCisgKgorICogVGhpcyB3aWxsIHJlc3RvcmUgZGF0YWJhc2Vz IHRob3NlIGR1bXBzIGFyZSBwcmVzZW50IGluCisgKiBkaXJlY3RvcnkgYmFzZWQgb24gbWFwLmRh dCBmaWxlIG1hcHBpbmcuCisgKgorICogVGhpcyB3aWxsIHNraXAgcmVzdG9yaW5nIGZvciBkYXRh YmFzZXMgdGhhdCBhcmUgc3BlY2lmaWVkIHdpdGgKKyAqIGV4Y2x1ZGUtZGF0YWJhc2Ugb3B0aW9u LgorICovCitzdGF0aWMgaW50CityZXN0b3JlQWxsRGF0YWJhc2VzKFBHY29ubiAqY29ubiwgY29u c3QgY2hhciAqZHVtcGRpcnBhdGgsCisJCVNpbXBsZVN0cmluZ0xpc3QgZGJfZXhjbHVkZV9wYXR0 ZXJucywgUmVzdG9yZU9wdGlvbnMgKm9wdHMsCisJCWludCBudW1Xb3JrZXJzKQoreworCVNpbXBs ZURhdGFiYXNlT2lkTGlzdAkJCWRibmFtZV9vaWRfbGlzdCA9IHtOVUxMLCBOVUxMfTsKKwlTaW1w bGVEYXRhYmFzZU9pZExpc3RDZWxsCQkqZGJvaWRfY2VsbDsKKwlpbnQJCQkJCQkJCWV4aXRfY29k ZSA9IDA7CisJaW50CQkJCQkJCQludW1fZGJfcmVzdG9yZTsKKwlpbnQJCQkJCQkJCW51bV90b3Rh bF9kYjsKKworCW51bV90b3RhbF9kYiA9IGdldF9kYm5hbWVfb2lkX2xpc3RfZnJvbV9tZmlsZShk dW1wZGlycGF0aCwgJmRibmFtZV9vaWRfbGlzdCk7CisKKwkvKiBJZiBtYXAuZGF0IGhhcyBubyBl bnRyeSwgcmV0dXJuIGZyb20gaGVyZS4gKi8KKwlpZiAoZGJuYW1lX29pZF9saXN0LmhlYWQgPT0g TlVMTCkKKwkJcmV0dXJuIDA7CisKKwlwZ19sb2dfaW5mbygiZm91bmQgdG90YWwgJWQgZGF0YWJh c2UgbmFtZXMgaW4gbWFwLmRhdCBmaWxlIiwgbnVtX3RvdGFsX2RiKTsKKworCWlmICghY29ubikK Kwl7CisJCXBnX2xvZ19pbmZvKCJ0cnlpbmcgdG8gY29ubmVjdCBwb3N0Z3JlcyBkYXRhYmFzZSB0 byBkdW1wIGludG8gb3V0IGZpbGUiKTsKKworCQljb25uID0gY29ubmVjdERhdGFiYXNlKCJwb3N0 Z3JlcyIsIE5VTEwsIG9wdHMtPmNwYXJhbXMucGdob3N0LAorCQkJCW9wdHMtPmNwYXJhbXMucGdw b3J0LCBvcHRzLT5jcGFyYW1zLnVzZXJuYW1lLCBUUklfREVGQVVMVCwgZmFsc2UsCisJCQkJcHJv Z25hbWUsIE5VTEwsIE5VTEwpOworCisJCS8qIFRyeSB3aXRoIHRlbXBsYXRlMS4gKi8KKwkJaWYg KCFjb25uKQorCQl7CisJCQlwZ19sb2dfaW5mbygidHJ5aW5nIHRvIGNvbm5lY3QgdGVtcGxhdGUx IGRhdGFiYXNlIGFzIGZhaWxlZCB0byBjb25uZWN0IHRvIHBvc3RncmVzIHRvIGR1bXAgaW50byBv dXQgZmlsZSIpOworCisJCQljb25uID0gY29ubmVjdERhdGFiYXNlKCJ0ZW1wbGF0ZTEiLCBOVUxM LCBvcHRzLT5jcGFyYW1zLnBnaG9zdCwKKwkJCQkJb3B0cy0+Y3BhcmFtcy5wZ3BvcnQsIG9wdHMt PmNwYXJhbXMudXNlcm5hbWUsIFRSSV9ERUZBVUxULCBmYWxzZSwKKwkJCQkJcHJvZ25hbWUsIE5V TEwsIE5VTEwpOworCisJCQlpZiAoIWNvbm4pCisJCQkJcGdfbG9nX2luZm8oInRoZXJlIGlzIG5v IGRhdGFiYXNlIGNvbm5lY3Rpb24gc28gY29uc2lkZXIgcGF0dGVybiBhcyBzaW1wbGUgbmFtZSBm b3IgZXhjbHVkZS1kYXRhYmFzZSIpOworCQl9CisJfQorCisJLyoKKwkgKiBUT0RPOiBUbyBza2lw IGRhdGFiYXNlcywgd2UgbmVlZCB0byBtYWtlIGEgZGVzaWduLgorCSAqCisJICogU2tpcCBhbnkg ZXhwbGljaXRseSBleGNsdWRlZCBkYXRhYmFzZS4gIElmIHRoZXJlIGlzIG5vIGRhdGFiYXNlCisJ ICogY29ubmVjdGlvbiwgdGhlbiBqdXN0IGNvbnNpZGVyIHBhdHRlcm4gYXMgc2ltcGxlIG5hbWUg dG8gY29tcGFyZS4KKwkgKi8KKwludW1fZGJfcmVzdG9yZSA9IGZpbHRlcl9kYm5hbWVzX2Zvcl9y ZXN0b3JlKGNvbm4sICZkYm5hbWVfb2lkX2xpc3QsCisJCQlkYl9leGNsdWRlX3BhdHRlcm5zKTsK KworCS8qIENsb3NlIHRoZSBkYiBjb25uZWN0aW9uIGFzIHdlIGFyZSBkb25lIGdsb2JhbHMgYW5k IHBhdHRlcm5zLiAqLworCWlmIChjb25uKQorCQlQUWZpbmlzaChjb25uKTsKKworCS8qIEV4aXQg aWYgbm8gZGIgbmVlZHMgdG8gYmUgcmVzdG9yZWQuICovCisJaWYgKGRibmFtZV9vaWRfbGlzdC5o ZWFkID09IE5VTEwpCisJCXJldHVybiAwOworCisJcGdfbG9nX2luZm8oIm5lZWRzIHRvIHJlc3Rv cmUgJWQgZGF0YWJhc2VzIG91dCBvZiAlZCBkYXRhYmFzZXMiLCBudW1fZGJfcmVzdG9yZSwgbnVt X3RvdGFsX2RiKTsKKworCS8qCisJICogVG8gcmVzdG9yZSBtdWx0aXBsZSBkYXRhYmFzZXMsIC1D IChjcmVhdGUgZGF0YWJhc2UpIG9wdGlvbiBzaG91bGQgYmUgc3BlY2lmaWVkCisJICogb3IgYWxs IGRhdGFiYXNlcyBzaG91bGQgYmUgY3JlYXRlZCBiZWZvcmUgcGdfcmVzdG9yZS4KKwkgKi8KKwlp ZiAob3B0cy0+Y3JlYXRlREIgIT0gMSkKKwkJcGdfbG9nX2luZm8oInJlc3RvcmluZyBkdW1wIG9m IHBnX2R1bXBhbGwgd2l0aG91dCAtQyBvcHRpb24sIHRoZXJlIG1pZ2h0IGJlIG11bHRpcGxlIGRh dGFiYXNlcyBpbiBkaXJlY3RvcnkuIik7CisKKwkvKiBUT0RPOiBNQVhfT05fRVhJVF9OSUNFTFkg aXMgMTAwIG5vdy4uLiBtYXggQUggaGFuZGxlIHJlZ2lzdGVyIG9uIGV4aXQgLiovCisJaWYgKG51 bV9kYl9yZXN0b3JlID4gMTAwKQorCXsKKwkJc2ltcGxlX2RiX29pZF9mdWxsX2xpc3RfZGVsZXRl KCZkYm5hbWVfb2lkX2xpc3QpOworCQlwZ19mYXRhbCgiY291bmQgbm90IHJlc3RvcmUgbW9yZSB0 aGFuIDEwMCBkYXRhYmFzZXMgYnkgc2luZ2xlIHBnX3Jlc3RvcmUsIGhlcmUgdG90YWwgZGI6JWQi LCBudW1fZGJfcmVzdG9yZSk7CisJfQorCisJLyoKKwkgKiBYWFg6IFRPRE8gdGlsbCBub3csIHdl IG1hZGUgYSBsaXN0IG9mIGRhdGFiYXNlcywgdGhvc2UgbmVlZHMgdG8gYmUgcmVzdG9yZWQKKwkg KiBhZnRlciBza2lwcGluZyBuYW1lcyBvZiBleGNsdWRlLWRhdGFiYXNlLiAgTm93IHdlIGNhbiBs YXVuY2ggcGFyYWxsZWwKKwkgKiB3b3JrZXJzIHRvIHJlc3RvcmUgdGhlc2UgZGF0YWJhc2VzLgor CSAqLworCWRib2lkX2NlbGwgPSBkYm5hbWVfb2lkX2xpc3QuaGVhZDsKKworCXdoaWxlKGRib2lk X2NlbGwgIT0gTlVMTCkKKwl7CisJCWNoYXIJCXN1YmRpcnBhdGhbTUFYUEdQQVRIXTsKKwkJaW50 CQkJZGJleGl0X2NvZGU7CisKKwkJLyoKKwkJICogV2UgbmVlZCB0byByZXNldCBvdmVycmlkZV9k Ym5hbWUgc28gdGhhdCBvYmplY3RzIGNhbiBiZSByZXN0b3JlZCBpbnRvCisJCSAqIGFscmVhZHkg Y3JlYXRlZCBkYXRhYmFzZS4gKHVzZWQgd2l0aCAtZC8tLWRibmFtZSBvcHRpb24pCisJCSAqLwor CQlpZiAob3B0cy0+Y3BhcmFtcy5vdmVycmlkZV9kYm5hbWUpCisJCXsKKwkJCXBmcmVlKG9wdHMt PmNwYXJhbXMub3ZlcnJpZGVfZGJuYW1lKTsKKwkJCW9wdHMtPmNwYXJhbXMub3ZlcnJpZGVfZGJu YW1lID0gTlVMTDsKKwkJfQorCisJCXNucHJpbnRmKHN1YmRpcnBhdGgsIE1BWFBHUEFUSCwgIiVz L2RhdGFiYXNlcy8ldSIsIGR1bXBkaXJwYXRoLCBkYm9pZF9jZWxsLT5kYl9vaWQpOworCisJCXBn X2xvZ19pbmZvKCJyZXN0b3JpbmcgZGF0YWJhc2UgXCIlc1wiIiwgZGJvaWRfY2VsbC0+ZGJfbmFt ZSk7CisKKwkJZGJleGl0X2NvZGUgPSByZXN0b3JlT25lRGF0YWJhc2Uoc3ViZGlycGF0aCwgb3B0 cywgbnVtV29ya2VycywgdHJ1ZSk7CisKKwkJLyogU3RvcmUgZXhpdF9jb2RlIHRvIHJlcG9ydCBp dCBiYWNrLiAqLworCQlpZiAoZXhpdF9jb2RlID09IDAgJiYgZGJleGl0X2NvZGUgIT0gMCkKKwkJ CWV4aXRfY29kZSA9IGRiZXhpdF9jb2RlOworCisJCWRib2lkX2NlbGwgPSBkYm9pZF9jZWxsLT5u ZXh0OworCX0gLyogZW5kIHdoaWxlICovCisKKwkvKiBMb2cgbnVtYmVyIG9mIHByb2Nlc3NlZCBk YXRhYmFzZXMuKi8KKwlwZ19sb2dfaW5mbygibnVtYmVyIG9mIHJlc3RvcmVkIGRhdGFiYXNlcyBh cmUgJWQiLCBudW1fZGJfcmVzdG9yZSk7CisKKwkvKiBGcmVlIGRibmFtZSBhbmQgZGJvaWQgbGlz dC4gKi8KKwlzaW1wbGVfZGJfb2lkX2Z1bGxfbGlzdF9kZWxldGUoJmRibmFtZV9vaWRfbGlzdCk7 CisKKwlyZXR1cm4gZXhpdF9jb2RlOworfQorCisvKgorICogZXhlY3V0ZV9nbG9iYWxfc3FsX2Nv bW1hbmRzCisgKgorICogVGhpcyB3aWxsIG9wZW4gZ2xvYmFsLmRhdCBmaWxlIGFuZCB3aWxsIGV4 ZWN1dGUgYWxsIGdsb2JhbCBzcWwgY29tbWFuZHMgb25lCisgKiBieSBvbmUgc3RhdGVtZW50Lgor ICogU2VtaWNvbG9uIGlzIGNvbnNpZGVyZWQgYXMgc3RhdGVtZW50IHRlcm1pbmF0b3IuICBJZiBv dXRmaWxlIGlzIHBhc3NlZCwgdGhlbgorICogdGhpcyB3aWxsIGNvcHkgYWxsIHNxbCBjb21tYW5k cyBpbnRvIG91dGZpbGUgcmF0aGVyIHRoZW4gZXhlY3V0aW5nIHRoZW0uCisgKi8KK3N0YXRpYyB2 b2lkCitleGVjdXRlX2dsb2JhbF9zcWxfY29tbWFuZHMoUEdjb25uICpjb25uLCBjb25zdCBjaGFy ICpkdW1wZGlycGF0aCwgY29uc3QgY2hhciAqb3V0ZmlsZSkKK3sKKwljaGFyICAgICAgICAgICAg Z2xvYmFsX2ZpbGVfcGF0aFtNQVhQR1BBVEhdOworCVBHcmVzdWx0CQkqcmVzdWx0OworCVN0cmlu Z0luZm9EYXRhCXNxbHN0YXRlbWVudDsKKwlGSUxFCQkJKnBmaWxlOworCisJc25wcmludGYoZ2xv YmFsX2ZpbGVfcGF0aCwgTUFYUEdQQVRILCAiJXMvZ2xvYmFsLmRhdCIsIGR1bXBkaXJwYXRoKTsK KworCS8qIE5vdyBvcGVuIGdsb2JhbC5kYXQgZmlsZS4gKi8KKwlwZmlsZSA9IGZvcGVuKGdsb2Jh bF9maWxlX3BhdGgsICJyIik7CisKKwlpZiAocGZpbGUgPT0gTlVMTCkKKwkJcGdfZmF0YWwoImNv dWxkIG5vdCBvcGVuIGdsb2JhbC5kYXQgZmlsZTogXCIlc1wiIiwgZ2xvYmFsX2ZpbGVfcGF0aCk7 CisKKwkvKgorCSAqIElmIG91dGZpbGUgaXMgZ2l2ZW4sIHRoZW4ganVzdCBjb3B5IGFsbCBnbG9i YWwuZGF0IGZpbGUgZGF0YSBpbnRvCisJICogb3V0ZmlsZS4KKwkgKi8KKwlpZiAob3V0ZmlsZSkK Kwl7CisJCWNoYXIgICAgICAgICAgICBvdXRfZmlsZV9wYXRoW01BWFBHUEFUSF07CisJCUZJTEUg ICAgICAgICAgICAqb2ZpbGU7CisJCWludAkJCQljOworCisJCXNucHJpbnRmKG91dF9maWxlX3Bh dGgsIE1BWFBHUEFUSCwgIlwiJXNcIiIsIG91dGZpbGUpOworCisJCW9maWxlID0gZm9wZW4ob3V0 X2ZpbGVfcGF0aCwgInciKTsKKworCQlpZiAob2ZpbGUgPT0gTlVMTCkKKwkJeworCQkJZmNsb3Nl KHBmaWxlKTsKKwkJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgb3BlbiBmaWxlOiBcIiVzXCIiLCBvdXRf ZmlsZV9wYXRoKTsKKwkJfQorCisJCS8qIE5vdyBhcHBlbmQgZ2xvYmFsLmRhdCBpbm90IG91dGZp bGUuICovCisJCXdoaWxlICgoYyA9IGZnZXRjKHBmaWxlKSkgIT0gRU9GKQorCQl7CisJCQlmcHV0 YyhjLCBvZmlsZSk7CisJCX0KKworCQlmY2xvc2UocGZpbGUpOworCQlmY2xvc2Uob2ZpbGUpOwor CQlyZXR1cm47CisJfQorCisJLyogSW5pdCBzcWxzdGF0ZW1lbnQgdG8gYXBwZW5kIGNvbW1hbmRz ICovCisJaW5pdFN0cmluZ0luZm8oJnNxbHN0YXRlbWVudCk7CisKKwkvKiBQcm9jZXNzIGZpbGUg dGlsbCBFT0YgYW5kIGV4ZWN1dGUgc3FsIHN0YXRlbWVudHMgKi8KKwl3aGlsZSAoUmVhZE9uZVN0 YXRlbWVudCgmc3Fsc3RhdGVtZW50LCBwZmlsZSkgIT0gRU9GKQorCXsKKwkJcmVzdWx0ID0gUFFl eGVjKGNvbm4sIHNxbHN0YXRlbWVudC5kYXRhKTsKKworCQlzd2l0Y2ggKFBRcmVzdWx0U3RhdHVz KHJlc3VsdCkpCisJCXsKKwkJCWNhc2UgUEdSRVNfQ09NTUFORF9PSzoKKwkJCWNhc2UgUEdSRVNf VFVQTEVTX09LOgorCQkJY2FzZSBQR1JFU19FTVBUWV9RVUVSWToKKwkJCQlicmVhazsKKwkJCWRl ZmF1bHQ6CisJCQkJcGdfbG9nX2Vycm9yKCJjb3VsZCBub3QgZXhlY3V0ZSBxdWVyeTogXCIlc1wi IFxuQ29tbWFuZCB3YXM6IFwiJXNcIiIsIFBRZXJyb3JNZXNzYWdlKGNvbm4pLCBzcWxzdGF0ZW1l bnQuZGF0YSk7CisJCX0KKwkJUFFjbGVhcihyZXN1bHQpOworCX0KKworCWZjbG9zZShwZmlsZSk7 Cit9CisKKy8qCisgKiBzaW1wbGVfZGJfb2lkX2xpc3RfYXBwZW5kCisgKgorICogYXBwZW5kcyBh IG5vZGUgdG8gdGhlIGxpc3QgaW4gdGhlIGVuZC4KKyAqLworc3RhdGljIHZvaWQKK3NpbXBsZV9k Yl9vaWRfbGlzdF9hcHBlbmQoU2ltcGxlRGF0YWJhc2VPaWRMaXN0ICpsaXN0LCBPaWQgZGJfb2lk LCBjb25zdCBjaGFyICpkYm5hbWUpCit7CisJU2ltcGxlRGF0YWJhc2VPaWRMaXN0Q2VsbCAqY2Vs bDsKKworCWNlbGwgPSBwZ19tYWxsb2Nfb2JqZWN0KFNpbXBsZURhdGFiYXNlT2lkTGlzdENlbGwp OworCisJY2VsbC0+bmV4dCA9IE5VTEw7CisJY2VsbC0+ZGJfb2lkID0gZGJfb2lkOworCWNlbGwt PmRiX25hbWUgPSBwZ19zdHJkdXAoZGJuYW1lKTsKKworCWlmIChsaXN0LT50YWlsKQorCQlsaXN0 LT50YWlsLT5uZXh0ID0gY2VsbDsKKwllbHNlCisJCWxpc3QtPmhlYWQgPSBjZWxsOworCWxpc3Qt PnRhaWwgPSBjZWxsOworfQorCisvKgorICogc2ltcGxlX2RiX29pZF9mdWxsX2xpc3RfZGVsZXRl CisgKgorICogZGVsZXRlIGFsbCBjZWxsIGZyb20gZGJuYW1lIGFuZCBkYm9pZCBsaXN0LgorICov CitzdGF0aWMgdm9pZAorc2ltcGxlX2RiX29pZF9mdWxsX2xpc3RfZGVsZXRlKFNpbXBsZURhdGFi YXNlT2lkTGlzdCAqbGlzdCkKK3sKKwlTaW1wbGVEYXRhYmFzZU9pZExpc3RDZWxsCSpjZWxsID0g bGlzdC0+aGVhZDsKKwlTaW1wbGVEYXRhYmFzZU9pZExpc3RDZWxsCSpuZXh0Y2VsbCA9IE5VTEw7 CisKKwl3aGlsZSAoY2VsbCkKKwl7CisJCW5leHRjZWxsID0gY2VsbC0+bmV4dDsKKwkJcGZyZWUg KGNlbGwpOworCQljZWxsID0gbmV4dGNlbGw7CisJfQorCisJbGlzdC0+aGVhZCA9IE5VTEw7CisJ bGlzdC0+dGFpbCA9IE5VTEw7Cit9CisKKy8qCisgKiBzaW1wbGVfc3RyaW5nX2Z1bGxfbGlzdF9k ZWxldGUKKyAqCisgKiBkZWxldGUgYWxsIGNlbGwgZnJvbSBzdHJpbmcgbGlzdC4KKyAqLworc3Rh dGljIHZvaWQKK3NpbXBsZV9zdHJpbmdfZnVsbF9saXN0X2RlbGV0ZShTaW1wbGVTdHJpbmdMaXN0 ICpsaXN0KQoreworCVNpbXBsZVN0cmluZ0xpc3RDZWxsCSpjZWxsID0gbGlzdC0+aGVhZDsKKwlT aW1wbGVTdHJpbmdMaXN0Q2VsbCAgICAqY2VsbG5leHQgPSBOVUxMOworCisJd2hpbGUgKGNlbGwp CisJeworCQljZWxsbmV4dCA9IGNlbGwtPm5leHQ7CisJCXBmcmVlKGNlbGwpOworCQljZWxsID0g Y2VsbG5leHQ7CisJfQorCisJbGlzdC0+aGVhZCA9IE5VTEw7CisJbGlzdC0+dGFpbCA9IE5VTEw7 Cit9CisKKy8qCisgKiBzaW1wbGVfZGJfb2lkX2xpc3RfZGVsZXRlCisgKgorICogZGVsZXRlIGNl bGwgZnJvbSBkYXRhYmFzZSBhbmQgb2lkIGxpc3QuCisgKi8KK3N0YXRpYyB2b2lkCitzaW1wbGVf ZGJfb2lkX2xpc3RfZGVsZXRlKFNpbXBsZURhdGFiYXNlT2lkTGlzdCAqbGlzdCwgU2ltcGxlRGF0 YWJhc2VPaWRMaXN0Q2VsbCAqY2VsbCwKKwkJU2ltcGxlRGF0YWJhc2VPaWRMaXN0Q2VsbCAqcHJl dikKK3sKKwlpZiAocHJldiA9PSBOVUxMKQorCXsKKwkJbGlzdC0+aGVhZCA9IGNlbGwtPm5leHQ7 CisJCXBmcmVlKGNlbGwpOworCX0KKwllbHNlCisJeworCQlwcmV2LT5uZXh0ID0gY2VsbC0+bmV4 dDsKKwkJcGZyZWUoY2VsbCk7CisJfQorfQorCisvKgorICogaXNfZnVsbF9wYXR0ZXJuCisgKgor ICogVGhpcyB1c2VzIHN1YnN0cmluZyBmdW5jdGlvbiB0byBtYWtlIDFzdCBzdHJpbmcgZnJvbSBw YXR0ZXJuLgorICogT3V0c3RyaW5nIG9mIHN1YnN0cmluZyBmdW5jdGlvbiBpcyBjb21wYXJlZCB3 aXRoIDFzdCBzdHJpbmcgdG8KKyAqIHZhbGlkYXRlIHRoaXMgcGF0dGVybi4KKyAqCisgKiBSZXR1 cm5zIHRydWUgaWYgMXN0IHN0cmluZyBjYW4gYmUgY29uc3RydWN0ZWQgZnJvbSBnaXZlbiBwYXR0 ZXJuLgorICoKKyAqLworc3RhdGljIGJvb2wKK2lzX2Z1bGxfcGF0dGVybihQR2Nvbm4gKmNvbm4s IGNvbnN0IGNoYXIgKnN0ciwgY29uc3QgY2hhciAqcHRybikKK3sKKwlQUUV4cEJ1ZmZlcgkJcXVl cnk7CisJUEdyZXN1bHQJCSpyZXN1bHQ7CisKKwlxdWVyeSA9IGNyZWF0ZVBRRXhwQnVmZmVyKCk7 CisKKwlwcmludGZQUUV4cEJ1ZmZlcihxdWVyeSwKKwkJCSJTRUxFQ1Qgc3Vic3RyaW5nICggIgor CQkJIiAnJXMnICwgIgorCQkJIiAnJXMnICkgIiwgc3RyLCBwdHJuKTsKKworICAgcmVzdWx0ID0g ZXhlY3V0ZVF1ZXJ5KGNvbm4sIHF1ZXJ5LT5kYXRhKTsKKworCWlmIChQUXJlc3VsdFN0YXR1cyhy ZXN1bHQpID09IFBHUkVTX1RVUExFU19PSykKKwl7CisJCWlmIChQUW50dXBsZXMocmVzdWx0KSA9 PSAxKQorCQl7CisJCQljb25zdCBjaGFyCSpvdXRzdHI7CisKKwkJCW91dHN0ciA9IFBRZ2V0dmFs dWUocmVzdWx0LCAwLCAwKTsKKworCQkJUFFjbGVhcihyZXN1bHQpOworCQkJZGVzdHJveVBRRXhw QnVmZmVyKHF1ZXJ5KTsKKworCQkJLyoKKwkJCSAqIElmIG91dHB1dCBzdHJpbmcgb2Ygc3Vic3Ry aW5nIGZ1bmN0aW9uIGlzIG1hdGNoZXMgd2l0aCBzdHIsIHRoZW4KKwkJCSAqIHdlIGNhbiBjb25z dHJ1Y3Qgc3RyIGZyb20gcGF0dGVybi4KKwkJCSAqLworCQkJaWYgKG91dHN0ciAmJiBwZ19zdHJj YXNlY21wKG91dHN0ciwgc3RyKSA9PSAwKQorCQkJCXJldHVybiB0cnVlOworCQkJZWxzZQorCQkJ CXJldHVybiBmYWxzZTsKKwkJfQorCX0KKwllbHNlCisJCXBnX2xvZ19lcnJvcigiY291bGQgbm90 IGV4ZWN1dGUgcXVlcnk6IFwiJXNcIiBcbkNvbW1hbmQgd2FzOiBcIiVzXCIiLCBQUWVycm9yTWVz c2FnZShjb25uKSwgcXVlcnktPmRhdGEpOworCisJUFFjbGVhcihyZXN1bHQpOworCWRlc3Ryb3lQ UUV4cEJ1ZmZlcihxdWVyeSk7CisKKwlyZXR1cm4gZmFsc2U7Cit9CmRpZmYgLS1naXQgYS9zcmMv YmluL3BnX2R1bXAvdC8wMDFfYmFzaWMucGwgYi9zcmMvYmluL3BnX2R1bXAvdC8wMDFfYmFzaWMu cGwKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQppbmRleCAyMTQyNDBmMWFlNS4uZDQy ZThiZGViYmYKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3QvMDAxX2Jhc2ljLnBsCisrKyBiL3NyYy9i aW4vcGdfZHVtcC90LzAwMV9iYXNpYy5wbApAQCAtMjI2LDQgKzIyNiw4IEBAIGNvbW1hbmRfZmFp bHNfbGlrZSgKIAkncGdfZHVtcGFsbDogb3B0aW9uIC0tZXhjbHVkZS1kYXRhYmFzZSBjYW5ub3Qg YmUgdXNlZCB0b2dldGhlciB3aXRoIC1nLy0tZ2xvYmFscy1vbmx5JwogKTsKIAorY29tbWFuZF9m YWlsc19saWtlKAorCVsgJ3BnX2R1bXBhbGwnLCAnLS1mb3JtYXQnLCAneCcgXSwKKwlxci9cUXBn X2R1bXBhbGw6IGVycm9yOiB1bnJlY29nbml6ZWQgYXJjaGl2ZSBmb3JtYXQgIngiO1xFLywKKwkn cGdfZHVtcGFsbDogdW5yZWNvZ25pemVkIGFyY2hpdmUgZm9ybWF0Jyk7CiBkb25lX3Rlc3Rpbmco KTsKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC90LzAwNV9wZ19kdW1wX2ZpbHRlcmZpbGUu cGwgYi9zcmMvYmluL3BnX2R1bXAvdC8wMDVfcGdfZHVtcF9maWx0ZXJmaWxlLnBsCmluZGV4IDM1 NjhhMjQ2YjIzLi5mZWNkMzQ3OGRkZSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3QvMDA1 X3BnX2R1bXBfZmlsdGVyZmlsZS5wbAorKysgYi9zcmMvYmluL3BnX2R1bXAvdC8wMDVfcGdfZHVt cF9maWx0ZXJmaWxlLnBsCkBAIC01MjksNiArNTI5LDE0IEBAIGNvbW1hbmRfZmFpbHNfbGlrZSgK IAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMgcGdfcmVzdG9y ZSB0ZXN0cworY29tbWFuZF9mYWlsc19saWtlKAorCVsKKwkJJ3BnX3Jlc3RvcmUnLCAnLXAnLCAk cG9ydCwgJy1mJywgJHBsYWluZmlsZSwKKwkJIi0tZXhjbHVkZS1kYXRhYmFzZT1ncmFiYWRnZSIs CisJCSctLWdsb2JhbHMtb25seScKKwldLAorCXFyL1xRZ19yZXN0b3JlOiBlcnJvcjogb3B0aW9u IC0tZXhjbHVkZS1kYXRhYmFzZSBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciB3aXRoIC1nXC8tLWds b2JhbHMtb25seVxFLywKKwkncGdfcmVzdG9yZTogb3B0aW9uIC0tZXhjbHVkZS1kYXRhYmFzZSBj YW5ub3QgYmUgdXNlZCB0b2dldGhlciB3aXRoIC1nLy0tZ2xvYmFscy1vbmx5Jyk7CiAKIGNvbW1h bmRfb2soCiAJWwotLSAKMi4zOS4zCgo= --000000000000eec35a062bd728c5--