Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vgq8H-0055H2-2m for pgsql-hackers@arkaria.postgresql.org; Fri, 16 Jan 2026 20:09:22 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vgq8F-004uU4-39 for pgsql-hackers@arkaria.postgresql.org; Fri, 16 Jan 2026 20:09:20 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vgq8F-004uTw-1b for pgsql-hackers@lists.postgresql.org; Fri, 16 Jan 2026 20:09:19 +0000 Received: from mail-yx1-xb12e.google.com ([2607:f8b0:4864:20::b12e]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vgq8D-000sR0-0t for pgsql-hackers@lists.postgresql.org; Fri, 16 Jan 2026 20:09:19 +0000 Received: by mail-yx1-xb12e.google.com with SMTP id 956f58d0204a3-6442e2dd8bbso1768119d50.0 for ; Fri, 16 Jan 2026 12:09:16 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1768594155; x=1769198955; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=3tOrR6oALEaYdn9twJ/GJGAn/aJQ+lvE/mFvIKvvnu8=; b=OUbBJoIyN89K2hve9GmlOpkaer+N+Mw5/oGIHksaaDVa97QwTYmgB/HDJOrL/sZwmi CXiYfWP1SVB4iGG9AiBiv04o2vnCWHObfqWaeDrjf7c8yzD/b10CvEhoOJD/XcZrCyJE p4xA7SJzGMIMcij8LYoZtcHJ2cNM5nS72OvTQBzRXVk4zIgniH7seeLxCAfF4hCZe66m NWnamBKzeWVxZ6sx6piOLpXU6bCqW9dXqLVpBX66e0YYmOBEGLWtggEgCq0NFqa9dmok UL3YeNpLGt6lHgAMuiK2qmp+xw5V7McQ2yKQzRrzOHypCX1N4MhOGrrF7htnNJmZs7ec trNQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768594155; x=1769198955; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=3tOrR6oALEaYdn9twJ/GJGAn/aJQ+lvE/mFvIKvvnu8=; b=Mc9lUIU4hLetwJcLCnH9NtGIqrAQ6NQpCozu6qBzW8m4Re21VvBoOeZCbX41QlY2Ol Hlspc7/w5JraZKzYv6Nsi8syZ8HK2Y/0QFuglr65yiw+cjMthxz/5/gvkMQzsh+17NG0 N6eqy/AupMOPu69JTioo0z0tmfb6273GgVbJs8Ed7EDeD2TO0fgF7o0DXrapOkRr/j6N Pmfka74sfEBkiyWD1uqZ5pos0v+HDMK4fGae8O8hY4ynoMWRtQvBCFPtWwhPxT9V4ct+ z/pqjrgb5aY8VhwMNreIWza6YviPurbqmygD7Oj7gVkvjiwnZCKY1duSaWomGdawXYgI OiTg== X-Forwarded-Encrypted: i=1; AJvYcCVBlVXFKBbC5wf42U0dMsJGz1A78xfQhy96M4hjBJlCBQW5dh6LjvqCO8q2V9emcW/wx9AKPR2h/d5y7QPu@lists.postgresql.org X-Gm-Message-State: AOJu0YyjAso6PKLBR3P/26AZljZog9+M5FBkMoJiXd7C/UqyJq0e3VOU P5BVzs4iITlEgpu5IIQD43SWg+9IawXQGsNLZ76X7ZUFA8K0YI83/KlEz1WcFgJBnn/R7bE0zp+ Z8PsH3+70gnVQSG6xNTOZYPoYitBXGwc= X-Gm-Gg: AY/fxX6Tzw/WpvWWTEuIKVM+mKPApah6q+YRosAODKZk+iZoSq8TYbUlRnHwExTDuvB RoKl98b3z2kPA0R5Mzb3zdLwD70MEtR9YBUVA8DUSxy0Gw7+/VQ820zkSDfPAH2L8Qh6RusQ9fp Mu+CDwocgjuF/QRONc8Rv3AebwYYsWvlu74GTy0zppT7mLwpunnro/J12sZUKISduPE6GAKlmqi wEcnDqdX3wHuYRZzs/NT3I7eMCWw4HvxpCp5n+bSebiDk8zJKvHtGLpQ7LUd7PeW232+1gY X-Received: by 2002:a05:690e:138a:b0:644:60d9:750f with SMTP id 956f58d0204a3-64916508db5mr3140710d50.95.1768594155221; Fri, 16 Jan 2026 12:09:15 -0800 (PST) MIME-Version: 1.0 References: <3f22a8bb-29e8-40cc-97a1-309181da2c13@dunslane.net> <2bed001a-462c-42da-9a6b-3c7884502932@dunslane.net> <20250824010811.4d.nmisch@google.com> <82eb35b8-7f07-493b-b689-0934919e1dc3@dunslane.net> <17555e46-4fb2-4265-90e0-95cb8ed584a6@dunslane.net> In-Reply-To: From: Mahendra Singh Thalor Date: Sat, 17 Jan 2026 01:39:03 +0530 X-Gm-Features: AZwV_QiXXNge8ZVmhwNz3-YhfrKxejqSe_qXTVjDb6aFYdrM0iXos5FWEIHIVkk Message-ID: Subject: Re: Non-text mode for pg_dumpall To: tushar Cc: jian he , Vaibhav Dalvi , pgsql-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="0000000000005fec59064886ea8a" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000005fec59064886ea8a Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Thanks Tushar for the testing. On Wed, 7 Jan 2026 at 13:53, tushar wrote: > > > > On Tue, Jan 6, 2026 at 11:56=E2=80=AFAM Mahendra Singh Thalor wrote: >> >> >> >> >> We have another thread for this. We have patches also. Last year, we >> planned to block these databases at creation time. >> >> > >> > It's probably harmless, we connect to the databases further down to do= actual work. But it's also not nice. The toc.glo seems to have a bunch of = extraneous entries of type COMMENT and CONNECT. Why is that? As far as poib= le this should have output pretty much identical to a plain pg_dumpall. >> > >> > >> > cheer >> > >> > >> > andrew >> Thanks Andrew for the feedback. In the attached patch, I fixed some comments. In the next version, I will try to make it much identical to a plain pg_dumpall. >> If we don't dump those comments in non-text format, then the output of >> "pg_restore -f filename dump_non_text" will not be the same as the >> plain dump of pg_dumpall. >> >> Here, I am attaching an updated patch for the review and testing. >> > > Hi Mahendra, > > I found a scenario in which the table is not restored if --transaction-s= ize switch is used at the time of pg_restore operation > > Please refer this scenario: > Case A --pg_restore operation with "--transaction-size" against the dump= (taken using pg_dump) - > create a table ( create table t(n int); ) > perform pg_dump ( ./pg_dump -Ft postgres -f xyz.tar) > create a database (create database test;) > perform pg_restore using switch "--transaction-size" ( ./pg_restore --tra= nsaction-size=3D1 -d test xyz.tar) > table is restored into test database > > Case B --pg_restore operation with "--transaction-size" against the dump= (taken using pg_dumpall) - > create a table ( create table t(n int); ) > perform pg_dumpall ( ./pg_dumpall -Ft -f abc.tar) > create a new cluster, start the server against a different port > perform pg_restore using switch "--transaction-size" (./pg_restore -Ft --= transaction-size=3D10 -d postgres abc.tar -p 9000 -C) > table is not restored > > if i remove --transaction-size switch then this works. > > regards, > Fixed. On Mon, 12 Jan 2026 at 13:39, tushar wrote: > > > > On Tue, Jan 6, 2026 at 11:56=E2=80=AFAM Mahendra Singh Thalor wrote: >> >> >> Here, I am attaching an updated patch for the review and testing. >> >> Note: some of the review comments are still not fixed. I am working on >> those and will post an updated patch. >> > Hi Mahendra, > Please refer this scenario - if we are using with "--jobs" switch then ge= tting an error at the time of restore > > Create a table ( create table t(n int); insert into t values (1); ) > Perform pg_dumpall ( ./pg_dumpall -Fd -f abc1.dr ) > Create a new cluster, start the server against a different port > Perform pg_restore using switch "--jobs 4 " (./pg_restore -j 4 -d postgre= s abc1.dr/ -p 9000 -C ) > > " > [edb@1a1c15437e7c bin]$ ./pg_restore -j 4 -d postgres abc1.dr/ -p 9000 -= C > pg_restore: error: could not execute query: ERROR: role "edb" already ex= ists > Command was: CREATE ROLE edb; > ALTER ROLE edb WITH SUPERUSER INHERIT CREATEROLE CREATEDB LOGIN REPLICATI= ON BYPASSRLS; > > > pg_restore: error: could not execute query: ERROR: syntax error at or ne= ar "\" > LINE 1: \connect template1 > ^ > Command was: \connect template1 > > > > pg_restore: error: could not execute query: ERROR: syntax error at or ne= ar "\" > LINE 1: \connect postgres > ^ > Command was: \connect postgres > > > > pg_restore: warning: errors ignored on restore: 3 > [edb@1a1c15437e7c bin]$ > " > > regards, Fixed this syntax error but user error is still there for parallel mode(for non-parallel, fixed). This will be fixed in the next version. Here, I am attaching an updated patch for the review and testing. --=20 Thanks and Regards Mahendra Singh Thalor EnterpriseDB: http://www.enterprisedb.com --0000000000005fec59064886ea8a Content-Type: application/octet-stream; name="v14_17012026-Non-text-modes-for-pg_dumpall-correspondingly-change.patch" Content-Disposition: attachment; filename="v14_17012026-Non-text-modes-for-pg_dumpall-correspondingly-change.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mkhb9oy40 RnJvbSBiYzVmZTYzOTMwYTkyZGQ3MDJmOWU0ZGIxN2VhZDAzMjQwYzY1ODZjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYWhlbmRyYSBTaW5naCBUaGFsb3IgPG1haGk2cnVuQGdtYWls LmNvbT4KRGF0ZTogU2F0LCAxNyBKYW4gMjAyNiAwMToyMzowMSArMDUzMApTdWJqZWN0OiBbUEFU Q0hdIE5vbiB0ZXh0IG1vZGVzIGZvciBwZ19kdW1wYWxsLCBjb3JyZXNwb25kaW5nbHkgY2hhbmdl IAogcGdfcmVzdG9yZQoKICAgIHBnX2R1bXBhbGwgYWNxdWlyZXMgYSBuZXcgLUYvLS1mb3JtYXQg b3B0aW9uLCB3aXRoIHRoZSBzYW1lIG1lYW5pbmdzIGFzCiAgICBwZ19kdW1wLiBUaGUgZGVmYXVs dCBpcyBwLCBtZWFuaW5nIHBsYWluIHRleHQuIEZvciBhbnkgb3RoZXIgdmFsdWUsIGEKICAgIGRp cmVjdG9yeSBpcyBjcmVhdGVkIGNvbnRhaW5pbmcgdHdvIGZpbGVzLCB0b2MuZ2xvIGFuZCBtYXAu ZGF0LiBUaGUKICAgIGZpcnN0IGNvbnRhaW5zIGNvbW1hbmRzIHJlc3RvcmluZyB0aGUgZ2xvYmFs IGRhdGEgaW4gY3VzdG9tIGZvcm1hdCwgYW5kIHRoZSBzZWNvbmQKICAgIGNvbnRhaW5zIGEgbWFw IGZyb20gb2lkcyB0byBkYXRhYmFzZSBuYW1lcyBpbiB0ZXh0IGZvcm1hdC4gSXQgd2lsbCBhbHNv IGNvbnRhaW4gYQogICAgc3ViZGlyZWN0b3J5IGNhbGxlZCBkYXRhYmFzZXMsIGluc2lkZSB3aGlj aCBpdCB3aWxsIGNyZWF0ZSBhcmNoaXZlcyBpbgogICAgdGhlIHNwZWNpZmllZCBmb3JtYXQsIG5h bWVkIHVzaW5nIHRoZSBkYXRhYmFzZSBvaWRzLgoKICAgIEluIHRoZXNlIGNhc2VzcyB0aGUgLWYg YXJndW1lbnQgaXMgcmVxdWlyZWQuCgogICAgSWYgcGdfcmVzdG9yZSBlbmNvdW50ZXJzIGEgZGly ZWN0b3J5IGNvbnRhaW5pbmcgbWFwLmRhdCBhbmQgdG9jLmdsbywKICAgIGl0IHJlc3RvcmVzIHRo ZSBnbG9iYWwgc2V0dGluZ3MgZnJvbSB0b2MuZ2xvIGlmIGV4aXN0LCBhbmQgdGhlbgogICAgcmVz dG9yZXMgZWFjaCBkYXRhYmFzZS4KCiAgICBwZ19yZXN0b3JlIGFjcXVpcmVzIHR3byBuZXcgb3B0 aW9uczogLWcvLS1nbG9iYWxzLW9ubHkgd2hpY2ggc3VwcHJlc3NlcwogICAgcmVzdG9yYXRpb24g b2YgYW55IGRhdGFiYXNlcywgYW5kIC0tZXhjbHVkZS1kYXRhYmFzZSB3aGljaCBpbmhpYml0cwog ICAgcmVzdG9yYXRpb24gb2YgcGFydGljdWFsciBkYXRhYmFzZShzKSBpbiB0aGUgc2FtZSB3YXkg dGhlIHNhbWUgb3B0aW9uCiAgICB3b3JrcyBpbiBwZ19kdW1wYWxsLgoKdjE0Ci0tLQogZG9jL3Ny Yy9zZ21sL3JlZi9wZ19kdW1wYWxsLnNnbWwgICAgIHwgMTA3ICsrKystCiBkb2Mvc3JjL3NnbWwv cmVmL3BnX3Jlc3RvcmUuc2dtbCAgICAgfCAgNjYgKystCiBzcmMvYmluL3BnX2R1bXAvY29ubmVj dGRiLmMgICAgICAgICAgfCAgMTMgKy0KIHNyYy9iaW4vcGdfZHVtcC9jb25uZWN0ZGIuaCAgICAg ICAgICB8ICAgMiArLQogc3JjL2Jpbi9wZ19kdW1wL21lc29uLmJ1aWxkICAgICAgICAgIHwgICAx ICsKIHNyYy9iaW4vcGdfZHVtcC9wYXJhbGxlbC5jICAgICAgICAgICB8ICAxMCArCiBzcmMvYmlu L3BnX2R1bXAvcGdfYmFja3VwLmggICAgICAgICAgfCAgIDIgKy0KIHNyYy9iaW4vcGdfZHVtcC9w Z19iYWNrdXBfYXJjaGl2ZXIuYyB8ICAzNSArLQogc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9h cmNoaXZlci5oIHwgICAxICsKIHNyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfdGFyLmMgICAgICB8 ICAgMiArLQogc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYyAgICAgICAgICAgIHwgICAyICstCiBz cmMvYmluL3BnX2R1bXAvcGdfZHVtcGFsbC5jICAgICAgICAgfCA2MjIgKysrKysrKysrKysrKysr KysrKystLS0tLS0KIHNyYy9iaW4vcGdfZHVtcC9wZ19yZXN0b3JlLmMgICAgICAgICB8IDYyNSAr KysrKysrKysrKysrKysrKysrKysrKysrKy0KIHNyYy9iaW4vcGdfZHVtcC90LzAwMV9iYXNpYy5w bCAgICAgICB8ICAyNyArKwogc3JjL2Jpbi9wZ19kdW1wL3QvMDA3X3BnX2R1bXBhbGwucGwgIHwg Mzk2ICsrKysrKysrKysrKysrKysrCiAxNSBmaWxlcyBjaGFuZ2VkLCAxNzM2IGluc2VydGlvbnMo KyksIDE3NSBkZWxldGlvbnMoLSkKIG1vZGUgY2hhbmdlIDEwMDY0NCA9PiAxMDA3NTUgc3JjL2Jp bi9wZ19kdW1wL3QvMDAxX2Jhc2ljLnBsCiBjcmVhdGUgbW9kZSAxMDA3NTUgc3JjL2Jpbi9wZ19k dW1wL3QvMDA3X3BnX2R1bXBhbGwucGwKCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvcmVmL3Bn X2R1bXBhbGwuc2dtbCBiL2RvYy9zcmMvc2dtbC9yZWYvcGdfZHVtcGFsbC5zZ21sCmluZGV4IDg4 MzRiN2VjMTQxLi41MWVjNGY3MzBlMCAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3JlZi9wZ19k dW1wYWxsLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3JlZi9wZ19kdW1wYWxsLnNnbWwKQEAgLTE2 LDcgKzE2LDEwIEBAIFBvc3RncmVTUUwgZG9jdW1lbnRhdGlvbgogCiAgPHJlZm5hbWVkaXY+CiAg IDxyZWZuYW1lPnBnX2R1bXBhbGw8L3JlZm5hbWU+Ci0gIDxyZWZwdXJwb3NlPmV4dHJhY3QgYSA8 cHJvZHVjdG5hbWU+UG9zdGdyZVNRTDwvcHJvZHVjdG5hbWU+IGRhdGFiYXNlIGNsdXN0ZXIgaW50 byBhIHNjcmlwdCBmaWxlPC9yZWZwdXJwb3NlPgorCisgIDxyZWZwdXJwb3NlPgorICAgZXhwb3J0 IGEgPHByb2R1Y3RuYW1lPlBvc3RncmVTUUw8L3Byb2R1Y3RuYW1lPiBkYXRhYmFzZSBjbHVzdGVy IGFzIGFuIFNRTCBzY3JpcHQgb3IgdG8gb3RoZXIgZm9ybWF0cworICA8L3JlZnB1cnBvc2U+CiAg PC9yZWZuYW1lZGl2PgogCiAgPHJlZnN5bm9wc2lzZGl2PgpAQCAtMzMsNyArMzYsNyBAQCBQb3N0 Z3JlU1FMIGRvY3VtZW50YXRpb24KICAgPHBhcmE+CiAgICA8YXBwbGljYXRpb24+cGdfZHVtcGFs bDwvYXBwbGljYXRpb24+IGlzIGEgdXRpbGl0eSBmb3Igd3JpdGluZyBvdXQKICAgICg8cXVvdGU+ ZHVtcGluZzwvcXVvdGU+KSBhbGwgPHByb2R1Y3RuYW1lPlBvc3RncmVTUUw8L3Byb2R1Y3RuYW1l PiBkYXRhYmFzZXMKLSAgIG9mIGEgY2x1c3RlciBpbnRvIG9uZSBzY3JpcHQgZmlsZS4gIFRoZSBz Y3JpcHQgZmlsZSBjb250YWlucworICAgb2YgYSBjbHVzdGVyIGludG8gYW4gU1FMIHNjcmlwdCBm aWxlIG9yIGFuIGFyY2hpdmUuICBUaGUgb3V0cHV0IGNvbnRhaW5zCiAgICA8YWNyb255bT5TUUw8 L2Fjcm9ueW0+IGNvbW1hbmRzIHRoYXQgY2FuIGJlIHVzZWQgYXMgaW5wdXQgdG8gPHhyZWYKICAg IGxpbmtlbmQ9ImFwcC1wc3FsIi8+IHRvIHJlc3RvcmUgdGhlIGRhdGFiYXNlcy4gIEl0IGRvZXMg dGhpcyBieQogICAgY2FsbGluZyA8eHJlZiBsaW5rZW5kPSJhcHAtcGdkdW1wIi8+IGZvciBlYWNo IGRhdGFiYXNlIGluIHRoZSBjbHVzdGVyLgpAQCAtNTIsMTEgKzU1LDE2IEBAIFBvc3RncmVTUUwg ZG9jdW1lbnRhdGlvbgogICA8L3BhcmE+CiAKICAgPHBhcmE+Ci0gICBUaGUgU1FMIHNjcmlwdCB3 aWxsIGJlIHdyaXR0ZW4gdG8gdGhlIHN0YW5kYXJkIG91dHB1dC4gIFVzZSB0aGUKKyAgIFBsYWlu IHRleHQgU1FMIHNjcmlwdHMgd2lsbCBiZSB3cml0dGVuIHRvIHRoZSBzdGFuZGFyZCBvdXRwdXQu ICBVc2UgdGhlCiAgICA8b3B0aW9uPi1mPC9vcHRpb24+LzxvcHRpb24+LS1maWxlPC9vcHRpb24+ IG9wdGlvbiBvciBzaGVsbCBvcGVyYXRvcnMgdG8KICAgIHJlZGlyZWN0IGl0IGludG8gYSBmaWxl LgogICA8L3BhcmE+CiAKKyAgPHBhcmE+CisgICBBcmNoaXZlcyBpbiBvdGhlciBmb3JtYXRzIHdp bGwgYmUgcGxhY2VkIGluIGEgZGlyZWN0b3J5IG5hbWVkIHVzaW5nIHRoZQorICAgPG9wdGlvbj4t Zjwvb3B0aW9uPi88b3B0aW9uPi0tZmlsZTwvb3B0aW9uPiwgd2hpY2ggaXMgcmVxdWlyZWQgaW4g dGhpcyBjYXNlLgorICA8L3BhcmE+CisKICAgPHBhcmE+CiAgIDxhcHBsaWNhdGlvbj5wZ19kdW1w YWxsPC9hcHBsaWNhdGlvbj4gbmVlZHMgdG8gY29ubmVjdCBzZXZlcmFsCiAgIHRpbWVzIHRvIHRo ZSA8cHJvZHVjdG5hbWU+UG9zdGdyZVNRTDwvcHJvZHVjdG5hbWU+IHNlcnZlciAob25jZSBwZXIK QEAgLTEzMSwxMCArMTM5LDg1IEBAIFBvc3RncmVTUUwgZG9jdW1lbnRhdGlvbgogICAgICAgIDxw YXJhPgogICAgICAgICBTZW5kIG91dHB1dCB0byB0aGUgc3BlY2lmaWVkIGZpbGUuICBJZiB0aGlz IGlzIG9taXR0ZWQsIHRoZQogICAgICAgICBzdGFuZGFyZCBvdXRwdXQgaXMgdXNlZC4KKyAgICAg ICAgTm90ZTogVGhpcyBvcHRpb24gY2FuIG9ubHkgYmUgb21pdHRlZCB3aGVuIDxvcHRpb24+LS1m b3JtYXQ8L29wdGlvbj4gaXMgcGxhaW4KICAgICAgICA8L3BhcmE+CiAgICAgICA8L2xpc3RpdGVt PgogICAgICA8L3Zhcmxpc3RlbnRyeT4KIAorICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgPHRl cm0+PG9wdGlvbj4tRiA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+Zm9ybWF0PC9yZXBs YWNlYWJsZT48L29wdGlvbj48L3Rlcm0+CisgICAgICA8dGVybT48b3B0aW9uPi0tZm9ybWF0PTxy ZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5mb3JtYXQ8L3JlcGxhY2VhYmxlPjwvb3B0aW9u PjwvdGVybT4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgU3BlY2lm eSB0aGUgZm9ybWF0IG9mIGR1bXAgZmlsZXMuICBJbiBwbGFpbiBmb3JtYXQsIGFsbCB0aGUgZHVt cCBkYXRhIGlzCisgICAgICAgIHNlbnQgaW4gYSBzaW5nbGUgdGV4dCBzdHJlYW0uIFRoaXMgaXMg dGhlIGRlZmF1bHQuCisKKyAgICAgICAgSW4gYWxsIG90aGVyIG1vZGVzLCA8YXBwbGljYXRpb24+ cGdfZHVtcGFsbDwvYXBwbGljYXRpb24+IGZpcnN0IGNyZWF0ZXMgdHdvIGZpbGVzOgorICAgICAg ICA8ZmlsZW5hbWU+dG9jLmdsbzwvZmlsZW5hbWU+IGFuZCA8ZmlsZW5hbWU+bWFwLmRhdDwvZmls ZW5hbWU+LCBpbiB0aGUgZGlyZWN0b3J5CisgICAgICAgIHNwZWNpZmllZCBieSA8b3B0aW9uPi0t ZmlsZTwvb3B0aW9uPi4KKyAgICAgICAgVGhlIGZpcnN0IGZpbGUgY29udGFpbnMgZ2xvYmFsIGRh dGEsIHN1Y2ggYXMgcm9sZXMgYW5kIHRhYmxlc3BhY2VzIGluIGN1c3RvbSBmb3JtYXQuIFRoZSBz ZWNvbmQKKyAgICAgICAgY29udGFpbnMgYSBtYXBwaW5nIGJldHdlZW4gZGF0YWJhc2Ugb2lkcyBh bmQgbmFtZXMuIFRoZXNlIGZpbGVzIGFyZSB1c2VkIGJ5CisgICAgICAgIDxhcHBsaWNhdGlvbj5w Z19yZXN0b3JlPC9hcHBsaWNhdGlvbj4uIERhdGEgZm9yIGluZGl2aWR1YWwgZGF0YWJhc2VzIGlz IHBsYWNlZCBpbgorICAgICAgICA8ZmlsZW5hbWU+ZGF0YWJhc2VzPC9maWxlbmFtZT4gc3ViZGly ZWN0b3J5LCBuYW1lZCB1c2luZyB0aGUgZGF0YWJhc2UncyA8dHlwZT5vaWQ8L3R5cGU+LgorCisg ICAgICAgPHZhcmlhYmxlbGlzdD4KKyAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgIDx0 ZXJtPjxsaXRlcmFsPmQ8L2xpdGVyYWw+PC90ZXJtPgorICAgICAgICAgPHRlcm0+PGxpdGVyYWw+ ZGlyZWN0b3J5PC9saXRlcmFsPjwvdGVybT4KKyAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAg ICA8cGFyYT4KKyAgICAgICAgICAgT3V0cHV0IGRpcmVjdG9yeS1mb3JtYXQgYXJjaGl2ZXMgZm9y IGVhY2ggZGF0YWJhc2UsCisgICAgICAgICAgIHN1aXRhYmxlIGZvciBpbnB1dCBpbnRvIHBnX3Jl c3RvcmUuIFRoZSBkaXJlY3RvcnkKKyAgICAgICAgICAgd2lsbCBoYXZlIGRhdGFiYXNlIDx0eXBl Pm9pZDwvdHlwZT4gYXMgaXRzIG5hbWUuCisgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgPC9s aXN0aXRlbT4KKyAgICAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAgICAgPHZhcmxpc3RlbnRy eT4KKyAgICAgICAgIDx0ZXJtPjxsaXRlcmFsPnA8L2xpdGVyYWw+PC90ZXJtPgorICAgICAgICAg PHRlcm0+PGxpdGVyYWw+cGxhaW48L2xpdGVyYWw+PC90ZXJtPgorICAgICAgICAgPGxpc3RpdGVt PgorICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICBPdXRwdXQgYSBwbGFpbi10ZXh0IFNRTCBz Y3JpcHQgZmlsZSAodGhlIGRlZmF1bHQpLgorICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgIDwv bGlzdGl0ZW0+CisgICAgICAgIDwvdmFybGlzdGVudHJ5PgorCisgICAgICAgIDx2YXJsaXN0ZW50 cnk+CisgICAgICAgICA8dGVybT48bGl0ZXJhbD5jPC9saXRlcmFsPjwvdGVybT4KKyAgICAgICAg IDx0ZXJtPjxsaXRlcmFsPmN1c3RvbTwvbGl0ZXJhbD48L3Rlcm0+CisgICAgICAgICA8bGlzdGl0 ZW0+CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgIE91dHB1dCBhIGN1c3RvbS1mb3JtYXQg YXJjaGl2ZSBmb3IgZWFjaCBkYXRhYmFzZSwKKyAgICAgICAgICAgc3VpdGFibGUgZm9yIGlucHV0 IGludG8gcGdfcmVzdG9yZS4gVGhlIGFyY2hpdmUKKyAgICAgICAgICAgd2lsbCBiZSBuYW1lZCA8 ZmlsZW5hbWU+ZGJvaWQuZG1wPC9maWxlbmFtZT4gd2hlcmUgPHR5cGU+ZGJvaWQ8L3R5cGU+IGlz IHRoZQorICAgICAgICAgICA8dHlwZT5vaWQ8L3R5cGU+IG9mIHRoZSBkYXRhYmFzZS4KKyAgICAg ICAgICA8L3BhcmE+CisgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgICA8L3Zhcmxpc3RlbnRy eT4KKworICAgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgIDx0ZXJtPjxsaXRlcmFsPnQ8 L2xpdGVyYWw+PC90ZXJtPgorICAgICAgICAgPHRlcm0+PGxpdGVyYWw+dGFyPC9saXRlcmFsPjwv dGVybT4KKyAgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAg T3V0cHV0IGEgdGFyLWZvcm1hdCBhcmNoaXZlIGZvciBlYWNoIGRhdGFiYXNlLAorICAgICAgICAg ICBzdWl0YWJsZSBmb3IgaW5wdXQgaW50byBwZ19yZXN0b3JlLiBUaGUgYXJjaGl2ZQorICAgICAg ICAgICB3aWxsIGJlIG5hbWVkIDxmaWxlbmFtZT5kYm9pZC50YXI8L2ZpbGVuYW1lPiB3aGVyZSA8 dHlwZT5kYm9pZDwvdHlwZT4gaXMgdGhlCisgICAgICAgICAgIDx0eXBlPm9pZDwvdHlwZT4gb2Yg dGhlIGRhdGFiYXNlLgorICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgIDwvbGlzdGl0ZW0+Cisg ICAgICAgIDwvdmFybGlzdGVudHJ5PgorCisgICAgICAgIDwvdmFyaWFibGVsaXN0PgorCisgICAg ICAgTm90ZTogc2VlIDx4cmVmIGxpbmtlbmQ9ImFwcC1wZ2R1bXAiLz4gZm9yIGRldGFpbHMKKyAg ICAgICBvZiBob3cgdGhlIHZhcmlvdXMgbm9uIHBsYWluIHRleHQgYXJjaGl2ZXMgd29yay4KKwor ICAgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgICA8L3Zhcmxpc3RlbnRyeT4K KwogICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgPHRlcm0+PG9wdGlvbj4tZzwvb3B0aW9uPjwv dGVybT4KICAgICAgIDx0ZXJtPjxvcHRpb24+LS1nbG9iYWxzLW9ubHk8L29wdGlvbj48L3Rlcm0+ CkBAIC05MzcsOSArMTAyMCwxNiBAQCBleGNsdWRlIGRhdGFiYXNlIDxyZXBsYWNlYWJsZSBjbGFz cz0icGFyYW1ldGVyIj5QQVRURVJOPC9yZXBsYWNlYWJsZT4KICAgPHRpdGxlPkV4YW1wbGVzPC90 aXRsZT4KICAgPHBhcmE+CiAgICBUbyBkdW1wIGFsbCBkYXRhYmFzZXM6Ci0KKyAgIElmIGZvcm1h dCBpcyBnaXZlbiwgdGhlbiBkdW1wIHdpbGwgYmUgYmFzZWQgb24gZm9ybWF0LCBkZWZhdWx0IHBs YWluLgogPHNjcmVlbj4KIDxwcm9tcHQ+JDwvcHJvbXB0PiA8dXNlcmlucHV0PnBnX2R1bXBhbGwg Jmd0OyBkYi5vdXQ8L3VzZXJpbnB1dD4KKzwvc2NyZWVuPgorCis8c2NyZWVuPgorPHByb21wdD4k PC9wcm9tcHQ+IDx1c2VyaW5wdXQ+cGdfZHVtcGFsbCAtLWZvcm1hdD1kaXJlY3RvcnkgLWYgZGIu b3V0PC91c2VyaW5wdXQ+Cis8cHJvbXB0PiQ8L3Byb21wdD4gPHVzZXJpbnB1dD5wZ19kdW1wYWxs IC0tZm9ybWF0PWN1c3RvbSAtZiBkYi5vdXQ8L3VzZXJpbnB1dD4KKzxwcm9tcHQ+JDwvcHJvbXB0 PiA8dXNlcmlucHV0PnBnX2R1bXBhbGwgLS1mb3JtYXQ9dGFyIC1mIGRiLm91dDwvdXNlcmlucHV0 PgorPHByb21wdD4kPC9wcm9tcHQ+IDx1c2VyaW5wdXQ+cGdfZHVtcGFsbCAtLWZvcm1hdD1wbGFp biAtZiBkYi5vdXQ8L3VzZXJpbnB1dD4KIDwvc2NyZWVuPgogICA8L3BhcmE+CiAKQEAgLTk1Niw2 ICsxMDQ2LDE1IEBAIGV4Y2x1ZGUgZGF0YWJhc2UgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0 ZXIiPlBBVFRFUk48L3JlcGxhY2VhYmxlPgogICAgdGhlIHNjcmlwdCB3aWxsIGF0dGVtcHQgdG8g ZHJvcCBvdGhlciBkYXRhYmFzZXMgaW1tZWRpYXRlbHksIGFuZCB0aGF0CiAgICB3aWxsIGZhaWwg Zm9yIHRoZSBkYXRhYmFzZSB5b3UgYXJlIGNvbm5lY3RlZCB0by4KICAgPC9wYXJhPgorCisgIDxw YXJhPgorICAgIElmIGR1bXAgd2FzIHRha2VuIGluIG5vbi10ZXh0IGZvcm1hdCwgdGhlbiB1c2Ug cGdfcmVzdG9yZSB0byByZXN0b3JlIGFsbCBkYXRhYmFzZXMuCis8c2NyZWVuPgorPHByb21wdD4k PC9wcm9tcHQ+IDx1c2VyaW5wdXQ+cGdfcmVzdG9yZSBkYi5vdXQgLWQgcG9zdGdyZXMgLUM8L3Vz ZXJpbnB1dD4KKzwvc2NyZWVuPgorICAgVGhpcyB3aWxsIHJlc3RvcmUgYWxsIHRoZSBkYXRhYmFz ZXMuIElmIHVzZXIgZG9uJ3Qgd2FudCB0byByZXN0b3JlIHNvbWUgZGF0YWJhc2VzLCB0aGVuIHVz ZQorICAgLS1leGNsdWRlLXBhdHRlcm4gdG8gc2tpcCB0aG9zZS4KKzwvcGFyYT4KICA8L3JlZnNl Y3QxPgogCiAgPHJlZnNlY3QxPgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3JlZi9wZ19yZXN0 b3JlLnNnbWwgYi9kb2Mvc3JjL3NnbWwvcmVmL3BnX3Jlc3RvcmUuc2dtbAppbmRleCAyYzI5NWJi ZjhkYy4uZTRmZTM1ZTAyZDkgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9yZWYvcGdfcmVzdG9y ZS5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9yZWYvcGdfcmVzdG9yZS5zZ21sCkBAIC0xOCw4ICsx OCw5IEBAIFBvc3RncmVTUUwgZG9jdW1lbnRhdGlvbgogICA8cmVmbmFtZT5wZ19yZXN0b3JlPC9y ZWZuYW1lPgogCiAgIDxyZWZwdXJwb3NlPgotICAgcmVzdG9yZSBhIDxwcm9kdWN0bmFtZT5Qb3N0 Z3JlU1FMPC9wcm9kdWN0bmFtZT4gZGF0YWJhc2UgZnJvbSBhbgotICAgYXJjaGl2ZSBmaWxlIGNy ZWF0ZWQgYnkgPGFwcGxpY2F0aW9uPnBnX2R1bXA8L2FwcGxpY2F0aW9uPgorICAgcmVzdG9yZSA8 cHJvZHVjdG5hbWU+UG9zdGdyZVNRTDwvcHJvZHVjdG5hbWU+IGRhdGFiYXNlcyBmcm9tIGFyY2hp dmVzCisgICBjcmVhdGVkIGJ5IDxhcHBsaWNhdGlvbj5wZ19kdW1wPC9hcHBsaWNhdGlvbj4gb3IK KyAgIDxhcHBsaWNhdGlvbj5wZ19kdW1wYWxsPC9hcHBsaWNhdGlvbj4KICAgPC9yZWZwdXJwb3Nl PgogIDwvcmVmbmFtZWRpdj4KIApAQCAtMzgsMTMgKzM5LDE0IEBAIFBvc3RncmVTUUwgZG9jdW1l bnRhdGlvbgogCiAgIDxwYXJhPgogICAgPGFwcGxpY2F0aW9uPnBnX3Jlc3RvcmU8L2FwcGxpY2F0 aW9uPiBpcyBhIHV0aWxpdHkgZm9yIHJlc3RvcmluZyBhCi0gICA8cHJvZHVjdG5hbWU+UG9zdGdy ZVNRTDwvcHJvZHVjdG5hbWU+IGRhdGFiYXNlIGZyb20gYW4gYXJjaGl2ZQotICAgY3JlYXRlZCBi eSA8eHJlZiBsaW5rZW5kPSJhcHAtcGdkdW1wIi8+IGluIG9uZSBvZiB0aGUgbm9uLXBsYWluLXRl eHQKKyAgIDxwcm9kdWN0bmFtZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFtZT4gZGF0YWJhc2Ugb3Ig Y2x1c3RlciBmcm9tIGFuIGFyY2hpdmUKKyAgIGNyZWF0ZWQgYnkgPHhyZWYgbGlua2VuZD0iYXBw LXBnZHVtcCIvPiBvcgorICAgPHhyZWYgbGlua2VuZD0iYXBwLXBnLWR1bXBhbGwiLz4gaW4gb25l IG9mIHRoZSBub24tcGxhaW4tdGV4dAogICAgZm9ybWF0cy4gIEl0IHdpbGwgaXNzdWUgdGhlIGNv bW1hbmRzIG5lY2Vzc2FyeSB0byByZWNvbnN0cnVjdCB0aGUKLSAgIGRhdGFiYXNlIHRvIHRoZSBz dGF0ZSBpdCB3YXMgaW4gYXQgdGhlIHRpbWUgaXQgd2FzIHNhdmVkLiAgVGhlCi0gICBhcmNoaXZl IGZpbGVzIGFsc28gYWxsb3cgPGFwcGxpY2F0aW9uPnBnX3Jlc3RvcmU8L2FwcGxpY2F0aW9uPiB0 bworICAgZGF0YWJhc2Ugb3IgY2x1c3RlciB0byB0aGUgc3RhdGUgaXQgd2FzIGluIGF0IHRoZSB0 aW1lIGl0IHdhcyBzYXZlZC4gVGhlCisgICBhcmNoaXZlcyBhbHNvIGFsbG93IDxhcHBsaWNhdGlv bj5wZ19yZXN0b3JlPC9hcHBsaWNhdGlvbj4gdG8KICAgIGJlIHNlbGVjdGl2ZSBhYm91dCB3aGF0 IGlzIHJlc3RvcmVkLCBvciBldmVuIHRvIHJlb3JkZXIgdGhlIGl0ZW1zCi0gICBwcmlvciB0byBi ZWluZyByZXN0b3JlZC4gVGhlIGFyY2hpdmUgZmlsZXMgYXJlIGRlc2lnbmVkIHRvIGJlCisgICBw cmlvciB0byBiZWluZyByZXN0b3JlZC4gVGhlIGFyY2hpdmUgZm9ybWF0cyBhcmUgZGVzaWduZWQg dG8gYmUKICAgIHBvcnRhYmxlIGFjcm9zcyBhcmNoaXRlY3R1cmVzLgogICA8L3BhcmE+CiAKQEAg LTUyLDEwICs1NCwxNyBAQCBQb3N0Z3JlU1FMIGRvY3VtZW50YXRpb24KICAgIDxhcHBsaWNhdGlv bj5wZ19yZXN0b3JlPC9hcHBsaWNhdGlvbj4gY2FuIG9wZXJhdGUgaW4gdHdvIG1vZGVzLgogICAg SWYgYSBkYXRhYmFzZSBuYW1lIGlzIHNwZWNpZmllZCwgPGFwcGxpY2F0aW9uPnBnX3Jlc3RvcmU8 L2FwcGxpY2F0aW9uPgogICAgY29ubmVjdHMgdG8gdGhhdCBkYXRhYmFzZSBhbmQgcmVzdG9yZXMg YXJjaGl2ZSBjb250ZW50cyBkaXJlY3RseSBpbnRvCi0gICB0aGUgZGF0YWJhc2UuICBPdGhlcndp c2UsIGEgc2NyaXB0IGNvbnRhaW5pbmcgdGhlIFNRTAotICAgY29tbWFuZHMgbmVjZXNzYXJ5IHRv IHJlYnVpbGQgdGhlIGRhdGFiYXNlIGlzIGNyZWF0ZWQgYW5kIHdyaXR0ZW4KKyAgIHRoZSBkYXRh YmFzZS4KKyAgIFdoZW4gcmVzdG9yaW5nIGZyb20gYSBkdW1wIG1hZGUgYnkgPGFwcGxpY2F0aW9u PnBnX2R1bXBhbGw8L2FwcGxpY2F0aW9uPiwKKyAgIGVhY2ggZGF0YWJhc2Ugd2lsbCBiZSBjcmVh dGVkIGFuZCB0aGVuIHRoZSByZXN0b3JhdGlvbiB3aWxsIGJlIHJ1biBpbiB0aGF0CisgICBkYXRh YmFzZS4KKworICAgT3RoZXJ3aXNlLCB3aGVuIGEgZGF0YWJhc2UgbmFtZSBpcyBub3Qgc3BlY2lm aWVkLCBhIHNjcmlwdCBjb250YWluaW5nIHRoZSBTUUwKKyAgIGNvbW1hbmRzIG5lY2Vzc2FyeSB0 byByZWJ1aWxkIHRoZSBkYXRhYmFzZSBvciBjbHVzdGVyIGlzIGNyZWF0ZWQgYW5kIHdyaXR0ZW4K ICAgIHRvIGEgZmlsZSBvciBzdGFuZGFyZCBvdXRwdXQuICBUaGlzIHNjcmlwdCBvdXRwdXQgaXMg ZXF1aXZhbGVudCB0bwotICAgdGhlIHBsYWluIHRleHQgb3V0cHV0IGZvcm1hdCBvZiA8YXBwbGlj YXRpb24+cGdfZHVtcDwvYXBwbGljYXRpb24+LgorICAgdGhlIHBsYWluIHRleHQgb3V0cHV0IGZv cm1hdCBvZiA8YXBwbGljYXRpb24+cGdfZHVtcDwvYXBwbGljYXRpb24+IG9yCisgICA8YXBwbGlj YXRpb24+cGdfZHVtcGFsbDwvYXBwbGljYXRpb24+LgorCiAgICBTb21lIG9mIHRoZSBvcHRpb25z IGNvbnRyb2xsaW5nIHRoZSBvdXRwdXQgYXJlIHRoZXJlZm9yZSBhbmFsb2dvdXMgdG8KICAgIDxh cHBsaWNhdGlvbj5wZ19kdW1wPC9hcHBsaWNhdGlvbj4gb3B0aW9ucy4KICAgPC9wYXJhPgpAQCAt MTUyLDYgKzE2MSw4IEBAIFBvc3RncmVTUUwgZG9jdW1lbnRhdGlvbgogICAgICAgICBjb21tYW5k cyB0aGF0IG1lbnRpb24gdGhpcyBkYXRhYmFzZS4KICAgICAgICAgQWNjZXNzIHByaXZpbGVnZXMg Zm9yIHRoZSBkYXRhYmFzZSBpdHNlbGYgYXJlIGFsc28gcmVzdG9yZWQsCiAgICAgICAgIHVubGVz cyA8b3B0aW9uPi0tbm8tYWNsPC9vcHRpb24+IGlzIHNwZWNpZmllZC4KKyAgICAgICAgPG9wdGlv bj4tLWNyZWF0ZTwvb3B0aW9uPiBpcyByZXF1aXJlZCB3aGVuIHJlc3RvcmluZyBtdWx0aXBsZSBk YXRhYmFzZXMKKyAgICAgICAgZnJvbSBhbiBhcmNoaXZlIGNyZWF0ZWQgYnkgPGFwcGxpY2F0aW9u PnBnX2R1bXBhbGw8L2FwcGxpY2F0aW9uPi4KICAgICAgICA8L3BhcmE+CiAKICAgICAgICA8cGFy YT4KQEAgLTI0Nyw2ICsyNTgsMTkgQEAgUG9zdGdyZVNRTCBkb2N1bWVudGF0aW9uCiAgICAgICA8 L2xpc3RpdGVtPgogICAgICA8L3Zhcmxpc3RlbnRyeT4KIAorICAgICA8dmFybGlzdGVudHJ5Pgor ICAgICAgPHRlcm0+PG9wdGlvbj4tZzwvb3B0aW9uPjwvdGVybT4KKyAgICAgIDx0ZXJtPjxvcHRp b24+LS1nbG9iYWxzLW9ubHk8L29wdGlvbj48L3Rlcm0+CisgICAgICA8bGlzdGl0ZW0+CisgICAg ICAgPHBhcmE+CisgICAgICAgIFJlc3RvcmUgb25seSBnbG9iYWwgb2JqZWN0cyAocm9sZXMgYW5k IHRhYmxlc3BhY2VzKSwgbm8gZGF0YWJhc2VzLgorICAgICAgIDwvcGFyYT4KKyAgICAgICA8cGFy YT4KKyAgICAgICAgVGhpcyBvcHRpb24gaXMgb25seSByZWxldmFudCB3aGVuIHJlc3RvcmluZyBm cm9tIGFuIGFyY2hpdmUgbWFkZSB1c2luZyA8YXBwbGljYXRpb24+cGdfZHVtcGFsbDwvYXBwbGlj YXRpb24+LgorICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgIDwvdmFybGlz dGVudHJ5PgorCiAgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICA8dGVybT48b3B0aW9uPi1JIDxy ZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5pbmRleDwvcmVwbGFjZWFibGU+PC9vcHRpb24+ PC90ZXJtPgogICAgICAgPHRlcm0+PG9wdGlvbj4tLWluZGV4PTxyZXBsYWNlYWJsZSBjbGFzcz0i cGFyYW1ldGVyIj5pbmRleDwvcmVwbGFjZWFibGU+PC9vcHRpb24+PC90ZXJtPgpAQCAtNTkxLDYg KzYxNSwyOCBAQCBQb3N0Z3JlU1FMIGRvY3VtZW50YXRpb24KICAgICAgIDwvbGlzdGl0ZW0+CiAg ICAgIDwvdmFybGlzdGVudHJ5PgogCisgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICA8dGVybT48 b3B0aW9uPi0tZXhjbHVkZS1kYXRhYmFzZT08cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+ cGF0dGVybjwvcmVwbGFjZWFibGU+PC9vcHRpb24+PC90ZXJtPgorICAgICAgPGxpc3RpdGVtPgor ICAgICAgIDxwYXJhPgorICAgICAgICBEbyBub3QgcmVzdG9yZSBkYXRhYmFzZXMgd2hvc2UgbmFt ZSBtYXRjaGVzCisgICAgICAgIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5wYXR0ZXJu PC9yZXBsYWNlYWJsZT4uCisgICAgICAgIE11bHRpcGxlIHBhdHRlcm5zIGNhbiBiZSBleGNsdWRl ZCBieSB3cml0aW5nIG11bHRpcGxlCisgICAgICAgIDxvcHRpb24+LS1leGNsdWRlLWRhdGFiYXNl PC9vcHRpb24+IHN3aXRjaGVzLiAgVGhlCisgICAgICAgIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFy YW1ldGVyIj5wYXR0ZXJuPC9yZXBsYWNlYWJsZT4gcGFyYW1ldGVyIGlzCisgICAgICAgIGludGVy cHJldGVkIGFzIGEgcGF0dGVybiBhY2NvcmRpbmcgdG8gdGhlIHNhbWUgcnVsZXMgdXNlZCBieQor ICAgICAgICA8YXBwbGljYXRpb24+cHNxbDwvYXBwbGljYXRpb24+J3MgPGxpdGVyYWw+XGQ8L2xp dGVyYWw+CisgICAgICAgIGNvbW1hbmRzIChzZWUgPHhyZWYgbGlua2VuZD0iYXBwLXBzcWwtcGF0 dGVybnMiLz4pLAorICAgICAgICBzbyBtdWx0aXBsZSBkYXRhYmFzZXMgY2FuIGFsc28gYmUgZXhj bHVkZWQgYnkgd3JpdGluZyB3aWxkY2FyZAorICAgICAgICBjaGFyYWN0ZXJzIGluIHRoZSBwYXR0 ZXJuLiAgV2hlbiB1c2luZyB3aWxkY2FyZHMsIGJlIGNhcmVmdWwgdG8KKyAgICAgICAgcXVvdGUg dGhlIHBhdHRlcm4gaWYgbmVlZGVkIHRvIHByZXZlbnQgc2hlbGwgd2lsZGNhcmQgZXhwYW5zaW9u LgorICAgICAgIDwvcGFyYT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgVGhpcyBvcHRpb24gaXMg b25seSByZWxldmFudCB3aGVuIHJlc3RvcmluZyBmcm9tIGFuIGFyY2hpdmUgbWFkZSB1c2luZyA8 YXBwbGljYXRpb24+cGdfZHVtcGFsbDwvYXBwbGljYXRpb24+LgorICAgICAgIDwvcGFyYT4KKyAg ICAgIDwvbGlzdGl0ZW0+CisgICAgIDwvdmFybGlzdGVudHJ5PgorCiAgICAgIDx2YXJsaXN0ZW50 cnk+CiAgICAgICA8dGVybT48b3B0aW9uPi0tZmlsdGVyPTxyZXBsYWNlYWJsZSBjbGFzcz0icGFy YW1ldGVyIj5maWxlbmFtZTwvcmVwbGFjZWFibGU+PC9vcHRpb24+PC90ZXJtPgogICAgICAgPGxp c3RpdGVtPgpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL2Nvbm5lY3RkYi5jIGIvc3JjL2Jp bi9wZ19kdW1wL2Nvbm5lY3RkYi5jCmluZGV4IDM4OGQyOWQwYWViLi5iMTJhNzBmZjYwYiAxMDA2 NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL2Nvbm5lY3RkYi5jCisrKyBiL3NyYy9iaW4vcGdfZHVt cC9jb25uZWN0ZGIuYwpAQCAtMjI1LDcgKzIyNSw3IEBAIENvbm5lY3REYXRhYmFzZShjb25zdCBj aGFyICpkYm5hbWUsIGNvbnN0IGNoYXIgKmNvbm5lY3Rpb25fc3RyaW5nLAogCQlleGl0X25pY2Vs eSgxKTsKIAl9CiAKLQlQUWNsZWFyKGV4ZWN1dGVRdWVyeShjb25uLCBBTFdBWVNfU0VDVVJFX1NF QVJDSF9QQVRIX1NRTCkpOworCVBRY2xlYXIoZXhlY3V0ZVF1ZXJ5KGNvbm4sIEFMV0FZU19TRUNV UkVfU0VBUkNIX1BBVEhfU1FMLCBmYWxzZSkpOwogCiAJcmV0dXJuIGNvbm47CiB9CkBAIC0yNzUs NyArMjc1LDcgQEAgY29uc3RydWN0Q29ublN0cihjb25zdCBjaGFyICoqa2V5d29yZHMsIGNvbnN0 IGNoYXIgKip2YWx1ZXMpCiAgKiBSdW4gYSBxdWVyeSwgcmV0dXJuIHRoZSByZXN1bHRzLCBleGl0 IHByb2dyYW0gb24gZmFpbHVyZS4KICAqLwogUEdyZXN1bHQgKgotZXhlY3V0ZVF1ZXJ5KFBHY29u biAqY29ubiwgY29uc3QgY2hhciAqcXVlcnkpCitleGVjdXRlUXVlcnkoUEdjb25uICpjb25uLCBj b25zdCBjaGFyICpxdWVyeSwgYm9vbCBpc19hcmNoaXZlKQogewogCVBHcmVzdWx0ICAgKnJlczsK IApAQCAtMjg3LDcgKzI4NywxNCBAQCBleGVjdXRlUXVlcnkoUEdjb25uICpjb25uLCBjb25zdCBj aGFyICpxdWVyeSkKIAl7CiAJCXBnX2xvZ19lcnJvcigicXVlcnkgZmFpbGVkOiAlcyIsIFBRZXJy b3JNZXNzYWdlKGNvbm4pKTsKIAkJcGdfbG9nX2Vycm9yX2RldGFpbCgiUXVlcnkgd2FzOiAlcyIs IHF1ZXJ5KTsKLQkJUFFmaW5pc2goY29ubik7CisKKwkJLyoKKwkJICogV2hlbiBpc19hcmNoaXZl IGlzIHNldCB0aGVuIHdlIGFyZSBzdXJlIHRoYXQgY29ubmVjdGlvbiBpcyByZWdpc3RlcmVkIGlu dG8gb25fZXhpdCBob29rCisJCSAqIHNvIGV4aXRfbmljZWx5IHdpbGwgY2xvc2UgdGhlIGNvbm5l Y3Rpb24gaW4gdGhlIGVuZC4gIElmIHdlIHRyeSB0byBjbG9zZSBpbiAyIHBsYWNlcywgd2UKKwkJ ICogd2lsbCBnZXQgY3Jhc2guCisJCSAqLworCQlpZiAoIWlzX2FyY2hpdmUpCisJCQlQUWZpbmlz aChjb25uKTsKIAkJZXhpdF9uaWNlbHkoMSk7CiAJfQogCmRpZmYgLS1naXQgYS9zcmMvYmluL3Bn X2R1bXAvY29ubmVjdGRiLmggYi9zcmMvYmluL3BnX2R1bXAvY29ubmVjdGRiLmgKaW5kZXggNjc4 MTM4NTNlNjUuLjlkMjdiOTMxNjkyIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvY29ubmVj dGRiLmgKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL2Nvbm5lY3RkYi5oCkBAIC0yMiw1ICsyMiw1IEBA IGV4dGVybiBQR2Nvbm4gKkNvbm5lY3REYXRhYmFzZShjb25zdCBjaGFyICpkYm5hbWUsIGNvbnN0 IGNoYXIgKmNvbm5lY3Rpb25fc3RyaW5nCiAJCQkJCQkJICAgdHJpdmFsdWUgcHJvbXB0X3Bhc3N3 b3JkLCBib29sIGZhaWxfb25fZXJyb3IsCiAJCQkJCQkJICAgY29uc3QgY2hhciAqcHJvZ25hbWUs IGNvbnN0IGNoYXIgKipjb25uc3RyLCBpbnQgKnNlcnZlcl92ZXJzaW9uLAogCQkJCQkJCSAgIGNo YXIgKnBhc3N3b3JkLCBjaGFyICpvdmVycmlkZV9kYm5hbWUpOwotZXh0ZXJuIFBHcmVzdWx0ICpl eGVjdXRlUXVlcnkoUEdjb25uICpjb25uLCBjb25zdCBjaGFyICpxdWVyeSk7CitleHRlcm4gUEdy ZXN1bHQgKmV4ZWN1dGVRdWVyeShQR2Nvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKnF1ZXJ5LCBib29s IGlzX2FyY2hpdmUpOwogI2VuZGlmCQkJCQkJCS8qIENPTk5FQ1REQl9IICovCmRpZmYgLS1naXQg YS9zcmMvYmluL3BnX2R1bXAvbWVzb24uYnVpbGQgYi9zcmMvYmluL3BnX2R1bXAvbWVzb24uYnVp bGQKaW5kZXggNzliZDUwMzY4NDEuLjdjOWE0NzU5NjNiIDEwMDY0NAotLS0gYS9zcmMvYmluL3Bn X2R1bXAvbWVzb24uYnVpbGQKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL21lc29uLmJ1aWxkCkBAIC0x MDMsNiArMTAzLDcgQEAgdGVzdHMgKz0gewogICAgICAgJ3QvMDA0X3BnX2R1bXBfcGFyYWxsZWwu cGwnLAogICAgICAgJ3QvMDA1X3BnX2R1bXBfZmlsdGVyZmlsZS5wbCcsCiAgICAgICAndC8wMDZf cGdfZHVtcF9jb21wcmVzcy5wbCcsCisJICAndC8wMDdfcGdfZHVtcGFsbC5wbCcsCiAgICAgICAn dC8wMTBfZHVtcF9jb25uc3RyLnBsJywKICAgICBdLAogICB9LApkaWZmIC0tZ2l0IGEvc3JjL2Jp bi9wZ19kdW1wL3BhcmFsbGVsLmMgYi9zcmMvYmluL3BnX2R1bXAvcGFyYWxsZWwuYwppbmRleCBk ZGFmMDhmYWEzMC4uMjJmNTczNjA0NDQgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wYXJh bGxlbC5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wYXJhbGxlbC5jCkBAIC0zMzMsNiArMzMzLDE2 IEBAIG9uX2V4aXRfY2xvc2VfYXJjaGl2ZShBcmNoaXZlICpBSFgpCiAJb25fZXhpdF9uaWNlbHko YXJjaGl2ZV9jbG9zZV9jb25uZWN0aW9uLCAmc2h1dGRvd25faW5mbyk7CiB9CiAKKy8qCisgKiBX aGVuIHBnX3Jlc3RvcmUgcmVzdG9yZXMgbXVsdGlwbGUgZGF0YWJhc2VzLCB0aGVuIHVwZGF0ZSBh bHJlYWR5IGFkZGVkIGVudHJ5CisgKiBpbnRvIGFycmF5IGZvciBjbGVhbnVwLgorICovCit2b2lk CityZXBsYWNlX29uX2V4aXRfY2xvc2VfYXJjaGl2ZShBcmNoaXZlICpBSFgpCit7CisJc2h1dGRv d25faW5mby5BSFggPSBBSFg7Cit9CisKIC8qCiAgKiBvbl9leGl0X25pY2VseSBoYW5kbGVyIGZv ciBzaHV0dGluZyBkb3duIGRhdGFiYXNlIGNvbm5lY3Rpb25zIGFuZAogICogd29ya2VyIHByb2Nl c3NlcyBjbGVhbmx5LgpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cC5oIGIv c3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cC5oCmluZGV4IGQ5MDQxZGFkNzIwLi5mNjMxZDk0NTQ3 MiAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cC5oCisrKyBiL3NyYy9iaW4v cGdfZHVtcC9wZ19iYWNrdXAuaApAQCAtMzEyLDcgKzMxMiw3IEBAIGV4dGVybiB2b2lkIFNldEFy Y2hpdmVPcHRpb25zKEFyY2hpdmUgKkFILCBEdW1wT3B0aW9ucyAqZG9wdCwgUmVzdG9yZU9wdGlv bnMgKnJvCiAKIGV4dGVybiB2b2lkIFByb2Nlc3NBcmNoaXZlUmVzdG9yZU9wdGlvbnMoQXJjaGl2 ZSAqQUhYKTsKIAotZXh0ZXJuIHZvaWQgUmVzdG9yZUFyY2hpdmUoQXJjaGl2ZSAqQUhYKTsKK2V4 dGVybiB2b2lkIFJlc3RvcmVBcmNoaXZlKEFyY2hpdmUgKkFIWCwgYm9vbCBhcHBlbmRfZGF0YSwg Ym9vbCBnbG9iYWxzX29ubHkpOwogCiAvKiBPcGVuIGFuIGV4aXN0aW5nIGFyY2hpdmUgKi8KIGV4 dGVybiBBcmNoaXZlICpPcGVuQXJjaGl2ZShjb25zdCBjaGFyICpGaWxlU3BlYywgY29uc3QgQXJj aGl2ZUZvcm1hdCBmbXQpOwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9h cmNoaXZlci5jIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5jCmluZGV4IDRh NjNmNzM5MmFlLi45ZmYxZDZiNDdmZiAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2Jh Y2t1cF9hcmNoaXZlci5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIu YwpAQCAtODYsNyArODYsNyBAQCBzdGF0aWMgaW50CVJlc3RvcmluZ1RvREIoQXJjaGl2ZUhhbmRs ZSAqQUgpOwogc3RhdGljIHZvaWQgZHVtcF9sb19idWYoQXJjaGl2ZUhhbmRsZSAqQUgpOwogc3Rh dGljIHZvaWQgZHVtcFRpbWVzdGFtcChBcmNoaXZlSGFuZGxlICpBSCwgY29uc3QgY2hhciAqbXNn LCB0aW1lX3QgdGltKTsKIHN0YXRpYyB2b2lkIFNldE91dHB1dChBcmNoaXZlSGFuZGxlICpBSCwg Y29uc3QgY2hhciAqZmlsZW5hbWUsCi0JCQkJCSAgY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNh dGlvbiBjb21wcmVzc2lvbl9zcGVjKTsKKwkJCQkJICBjb25zdCBwZ19jb21wcmVzc19zcGVjaWZp Y2F0aW9uIGNvbXByZXNzaW9uX3NwZWMsIGJvb2wgYXBwZW5kX2RhdGEpOwogc3RhdGljIENvbXBy ZXNzRmlsZUhhbmRsZSAqU2F2ZU91dHB1dChBcmNoaXZlSGFuZGxlICpBSCk7CiBzdGF0aWMgdm9p ZCBSZXN0b3JlT3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFILCBDb21wcmVzc0ZpbGVIYW5kbGUgKnNh dmVkT3V0cHV0KTsKIApAQCAtMzM5LDkgKzMzOSwxNCBAQCBQcm9jZXNzQXJjaGl2ZVJlc3RvcmVP cHRpb25zKEFyY2hpdmUgKkFIWCkKIAkJU3RyaWN0TmFtZXNDaGVjayhyb3B0KTsKIH0KIAotLyog UHVibGljICovCisvKgorICogUmVzdG9yZUFyY2hpdmUKKyAqCisgKiBJZiBhcHBlbmRfZGF0YSBp cyBzZXQsIHRoZW4gYXBwZW5kIGRhdGEgaW50byBmaWxlIGFzIHdlIGFyZSByZXN0b3JpbmcgZHVt cAorICogb2YgbXVsdGlwbGUgZGF0YWJhc2VzIHdoaWNoIHdhcyB0YWtlbiBieSBwZ19kdW1wYWxs LgorICovCiB2b2lkCi1SZXN0b3JlQXJjaGl2ZShBcmNoaXZlICpBSFgpCitSZXN0b3JlQXJjaGl2 ZShBcmNoaXZlICpBSFgsIGJvb2wgYXBwZW5kX2RhdGEsIGJvb2wgZ2xvYmFsc19vbmx5KQogewog CUFyY2hpdmVIYW5kbGUgKkFIID0gKEFyY2hpdmVIYW5kbGUgKikgQUhYOwogCVJlc3RvcmVPcHRp b25zICpyb3B0ID0gQUgtPnB1YmxpYy5yb3B0OwpAQCAtNDU4LDcgKzQ2Myw3IEBAIFJlc3RvcmVB cmNoaXZlKEFyY2hpdmUgKkFIWCkKIAkgKi8KIAlzYXYgPSBTYXZlT3V0cHV0KEFIKTsKIAlpZiAo cm9wdC0+ZmlsZW5hbWUgfHwgcm9wdC0+Y29tcHJlc3Npb25fc3BlYy5hbGdvcml0aG0gIT0gUEdf Q09NUFJFU1NJT05fTk9ORSkKLQkJU2V0T3V0cHV0KEFILCByb3B0LT5maWxlbmFtZSwgcm9wdC0+ Y29tcHJlc3Npb25fc3BlYyk7CisJCVNldE91dHB1dChBSCwgcm9wdC0+ZmlsZW5hbWUsIHJvcHQt PmNvbXByZXNzaW9uX3NwZWMsIGFwcGVuZF9kYXRhKTsKIAogCWFocHJpbnRmKEFILCAiLS1cbi0t IFBvc3RncmVTUUwgZGF0YWJhc2UgZHVtcFxuLS1cblxuIik7CiAKQEAgLTc2MSw2ICs3NjYsMjEg QEAgUmVzdG9yZUFyY2hpdmUoQXJjaGl2ZSAqQUhYKQogCQkJaWYgKCh0ZS0+cmVxcyAmIChSRVFf U0NIRU1BIHwgUkVRX0RBVEEgfCBSRVFfU1RBVFMpKSA9PSAwKQogCQkJCWNvbnRpbnVlOwkJLyog aWdub3JlIGlmIG5vdCB0byBiZSBkdW1wZWQgYXQgYWxsICovCiAKKwkJCS8qIFNraXAgRFJPUCBE QVRBQkFTRSBpZiBnbG9iYWxzX29ubHkuICovCisJCQlpZiAoZ2xvYmFsc19vbmx5ICYmIHRlICYm IHRlLT50YWcgJiYgKHN0cmNtcCh0ZS0+dGFnLCAiRFJPUF9EQVRBQkFTRSIpID09IDApKQorCQkJ CWNvbnRpbnVlOworCisJCQkvKiBTa2lwIGlmIG5vLXRhYmxlc3BhY2UgaXMgZ2l2ZW4uICovCisJ CQlpZiAocm9wdC0+bm9UYWJsZXNwYWNlICYmIHRlICYmIHRlLT50YWcgJiYKKwkJCQkoKHN0cmNt cCh0ZS0+dGFnLCAiZHVtcFRhYmxlc3BhY2VzIikgPT0gMCkgfHwKKwkJCQkgKHN0cmNtcCh0ZS0+ dGFnLCAiZHJvcFRhYmxlc3BhY2VzIikgPT0gMCkpKQorCQkJCWNvbnRpbnVlOworCisJCQkvKiBT a2lwIGNyZWF0ZSBhbmQgYWx0ZXIgY29tbWFuZCBmb3IgY3VycmVudCByb2xlLiAqLworCQkJaWYg KCFyb3B0LT5maWxlbmFtZSAmJiB0ZSAmJiB0ZS0+dGFnICYmCisJCQkJCShzdHJjbXAodGUtPnRh ZywgIkRVTVBfQ1VSUkVOVF9ST0xFIikgPT0gMCkpCisJCQkJY29udGludWU7CisKIAkJCXN3aXRj aCAoX3RvY0VudHJ5UmVzdG9yZVBhc3ModGUpKQogCQkJewogCQkJCWNhc2UgUkVTVE9SRV9QQVNT X01BSU46CkBAIC0xMzE2LDcgKzEzMzYsNyBAQCBQcmludFRPQ1N1bW1hcnkoQXJjaGl2ZSAqQUhY KQogCiAJc2F2ID0gU2F2ZU91dHB1dChBSCk7CiAJaWYgKHJvcHQtPmZpbGVuYW1lKQotCQlTZXRP dXRwdXQoQUgsIHJvcHQtPmZpbGVuYW1lLCBvdXRfY29tcHJlc3Npb25fc3BlYyk7CisJCVNldE91 dHB1dChBSCwgcm9wdC0+ZmlsZW5hbWUsIG91dF9jb21wcmVzc2lvbl9zcGVjLCBmYWxzZSk7CiAK IAlpZiAoc3RyZnRpbWUoc3RhbXBfc3RyLCBzaXplb2Yoc3RhbXBfc3RyKSwgUEdEVU1QX1NUUkZU SU1FX0ZNVCwKIAkJCQkgbG9jYWx0aW1lKCZBSC0+Y3JlYXRlRGF0ZSkpID09IDApCkBAIC0xNjk1 LDcgKzE3MTUsOCBAQCBhcmNocHJpbnRmKEFyY2hpdmUgKkFILCBjb25zdCBjaGFyICpmbXQsLi4u KQogCiBzdGF0aWMgdm9pZAogU2V0T3V0cHV0KEFyY2hpdmVIYW5kbGUgKkFILCBjb25zdCBjaGFy ICpmaWxlbmFtZSwKLQkJICBjb25zdCBwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXByZXNz aW9uX3NwZWMpCisJCSAgY29uc3QgcGdfY29tcHJlc3Nfc3BlY2lmaWNhdGlvbiBjb21wcmVzc2lv bl9zcGVjLAorCQkgIGJvb2wgYXBwZW5kX2RhdGEpCiB7CiAJQ29tcHJlc3NGaWxlSGFuZGxlICpD Rkg7CiAJY29uc3QgY2hhciAqbW9kZTsKQEAgLTE3MTUsNyArMTczNiw3IEBAIFNldE91dHB1dChB cmNoaXZlSGFuZGxlICpBSCwgY29uc3QgY2hhciAqZmlsZW5hbWUsCiAJZWxzZQogCQlmbiA9IGZp bGVubyhzdGRvdXQpOwogCi0JaWYgKEFILT5tb2RlID09IGFyY2hNb2RlQXBwZW5kKQorCWlmIChh cHBlbmRfZGF0YSB8fCBBSC0+bW9kZSA9PSBhcmNoTW9kZUFwcGVuZCkKIAkJbW9kZSA9IFBHX0JJ TkFSWV9BOwogCWVsc2UKIAkJbW9kZSA9IFBHX0JJTkFSWV9XOwpkaWZmIC0tZ2l0IGEvc3JjL2Jp bi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5oIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1 cF9hcmNoaXZlci5oCmluZGV4IDMyNWI1M2ZjOWJkLi4zNjUwNzNiM2VhZSAxMDA2NDQKLS0tIGEv c3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5oCisrKyBiL3NyYy9iaW4vcGdfZHVt cC9wZ19iYWNrdXBfYXJjaGl2ZXIuaApAQCAtMzk0LDYgKzM5NCw3IEBAIHN0cnVjdCBfdG9jRW50 cnkKIAogZXh0ZXJuIGludAlwYXJhbGxlbF9yZXN0b3JlKEFyY2hpdmVIYW5kbGUgKkFILCBUb2NF bnRyeSAqdGUpOwogZXh0ZXJuIHZvaWQgb25fZXhpdF9jbG9zZV9hcmNoaXZlKEFyY2hpdmUgKkFI WCk7CitleHRlcm4gdm9pZCByZXBsYWNlX29uX2V4aXRfY2xvc2VfYXJjaGl2ZShBcmNoaXZlICpB SFgpOwogCiBleHRlcm4gdm9pZCB3YXJuX29yX2V4aXRfaG9ycmlibHkoQXJjaGl2ZUhhbmRsZSAq QUgsIGNvbnN0IGNoYXIgKmZtdCwuLi4pIHBnX2F0dHJpYnV0ZV9wcmludGYoMiwgMyk7CiAKZGlm ZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfdGFyLmMgYi9zcmMvYmluL3BnX2R1 bXAvcGdfYmFja3VwX3Rhci5jCmluZGV4IGI1YmEzYjQ2ZGQ5Li44MThiODBhOTM2OSAxMDA2NDQK LS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF90YXIuYworKysgYi9zcmMvYmluL3BnX2R1 bXAvcGdfYmFja3VwX3Rhci5jCkBAIC04MjYsNyArODI2LDcgQEAgX0Nsb3NlQXJjaGl2ZShBcmNo aXZlSGFuZGxlICpBSCkKIAkJc2F2VmVyYm9zZSA9IEFILT5wdWJsaWMudmVyYm9zZTsKIAkJQUgt PnB1YmxpYy52ZXJib3NlID0gMDsKIAotCQlSZXN0b3JlQXJjaGl2ZSgoQXJjaGl2ZSAqKSBBSCk7 CisJCVJlc3RvcmVBcmNoaXZlKChBcmNoaXZlICopIEFILCBmYWxzZSwgZmFsc2UpOwogCiAJCVNl dEFyY2hpdmVPcHRpb25zKChBcmNoaXZlICopIEFILCBzYXZEb3B0LCBzYXZSb3B0KTsKIApkaWZm IC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19k dW1wLmMKaW5kZXggNjg3ZGM5OGU0NmQuLjFkZGYxYzhjODNmIDEwMDY0NAotLS0gYS9zcmMvYmlu L3BnX2R1bXAvcGdfZHVtcC5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMKQEAgLTEz MDcsNyArMTMwNyw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCSAqIHJpZ2h0IG5v dy4KIAkgKi8KIAlpZiAocGxhaW5UZXh0KQotCQlSZXN0b3JlQXJjaGl2ZShmb3V0KTsKKwkJUmVz dG9yZUFyY2hpdmUoZm91dCwgZmFsc2UsIGZhbHNlKTsKIAogCUNsb3NlQXJjaGl2ZShmb3V0KTsK IApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXBhbGwuYyBiL3NyYy9iaW4vcGdf ZHVtcC9wZ19kdW1wYWxsLmMKaW5kZXggZTg1ZjIyN2QxODIuLjIxYjNiNDQ1OTM5IDEwMDY0NAot LS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcGFsbC5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9w Z19kdW1wYWxsLmMKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJmZV91dGlscy9zdHJpbmdf dXRpbHMuaCIKICNpbmNsdWRlICJmaWx0ZXIuaCIKICNpbmNsdWRlICJnZXRvcHRfbG9uZy5oIgor I2luY2x1ZGUgInBnX2JhY2t1cF9hcmNoaXZlci5oIgogCiAvKiB2ZXJzaW9uIHN0cmluZyB3ZSBl eHBlY3QgYmFjayBmcm9tIHBnX2R1bXAgKi8KICNkZWZpbmUgUEdEVU1QX1ZFUlNJT05TVFIgInBn X2R1bXAgKFBvc3RncmVTUUwpICIgUEdfVkVSU0lPTiAiXG4iCkBAIC02NSw5ICs2Niw5IEBAIHN0 YXRpYyB2b2lkIGRyb3BUYWJsZXNwYWNlcyhQR2Nvbm4gKmNvbm4pOwogc3RhdGljIHZvaWQgZHVt cFRhYmxlc3BhY2VzKFBHY29ubiAqY29ubik7CiBzdGF0aWMgdm9pZCBkcm9wREJzKFBHY29ubiAq Y29ubik7CiBzdGF0aWMgdm9pZCBkdW1wVXNlckNvbmZpZyhQR2Nvbm4gKmNvbm4sIGNvbnN0IGNo YXIgKnVzZXJuYW1lKTsKLXN0YXRpYyB2b2lkIGR1bXBEYXRhYmFzZXMoUEdjb25uICpjb25uKTsK K3N0YXRpYyB2b2lkIGR1bXBEYXRhYmFzZXMoUEdjb25uICpjb25uLCBib29sIG91dHB1dF9jbGVh bik7CiBzdGF0aWMgdm9pZCBkdW1wVGltZXN0YW1wKGNvbnN0IGNoYXIgKm1zZyk7Ci1zdGF0aWMg aW50CXJ1blBnRHVtcChjb25zdCBjaGFyICpkYm5hbWUsIGNvbnN0IGNoYXIgKmNyZWF0ZV9vcHRz KTsKK3N0YXRpYyBpbnQJcnVuUGdEdW1wKGNvbnN0IGNoYXIgKmRibmFtZSwgY29uc3QgY2hhciAq Y3JlYXRlX29wdHMsIGNoYXIgKmRiZmlsZSk7CiBzdGF0aWMgdm9pZCBidWlsZFNoU2VjTGFiZWxz KFBHY29ubiAqY29ubiwKIAkJCQkJCQkgY29uc3QgY2hhciAqY2F0YWxvZ19uYW1lLCBPaWQgb2Jq ZWN0SWQsCiAJCQkJCQkJIGNvbnN0IGNoYXIgKm9ianR5cGUsIGNvbnN0IGNoYXIgKm9iam5hbWUs CkBAIC03NiwxMSArNzcsMTMgQEAgc3RhdGljIHZvaWQgZXhlY3V0ZUNvbW1hbmQoUEdjb25uICpj b25uLCBjb25zdCBjaGFyICpxdWVyeSk7CiBzdGF0aWMgdm9pZCBleHBhbmRfZGJuYW1lX3BhdHRl cm5zKFBHY29ubiAqY29ubiwgU2ltcGxlU3RyaW5nTGlzdCAqcGF0dGVybnMsCiAJCQkJCQkJCSAg IFNpbXBsZVN0cmluZ0xpc3QgKm5hbWVzKTsKIHN0YXRpYyB2b2lkIHJlYWRfZHVtcGFsbF9maWx0 ZXJzKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBTaW1wbGVTdHJpbmdMaXN0ICpwYXR0ZXJuKTsKK3N0 YXRpYyBBcmNoaXZlRm9ybWF0IHBhcnNlRHVtcEZvcm1hdChjb25zdCBjaGFyICpmb3JtYXQpOwor c3RhdGljIGludAljcmVhdGVEdW1wSWQodm9pZCk7CitzdGF0aWMgdm9pZCBjcmVhdGVPbmVBcmNo aXZlRW50cnkoY29uc3QgY2hhciAqcXVlcnksIGNvbnN0IGNoYXIgKnRhZyk7CiAKIHN0YXRpYyBj aGFyIHBnX2R1bXBfYmluW01BWFBHUEFUSF07CiBzdGF0aWMgUFFFeHBCdWZmZXIgcGdkdW1wb3B0 czsKIHN0YXRpYyBjb25zdCBjaGFyICpjb25uc3RyID0gIiI7Ci1zdGF0aWMgYm9vbCBvdXRwdXRf Y2xlYW4gPSBmYWxzZTsKIHN0YXRpYyBib29sIHNraXBfYWNscyA9IGZhbHNlOwogc3RhdGljIGJv b2wgdmVyYm9zZSA9IGZhbHNlOwogc3RhdGljIGJvb2wgZG9zeW5jID0gdHJ1ZTsKQEAgLTEyMyw2 ICsxMjYsMTAgQEAgc3RhdGljIFNpbXBsZVN0cmluZ0xpc3QgZGF0YWJhc2VfZXhjbHVkZV9wYXR0 ZXJucyA9IHtOVUxMLCBOVUxMfTsKIHN0YXRpYyBTaW1wbGVTdHJpbmdMaXN0IGRhdGFiYXNlX2V4 Y2x1ZGVfbmFtZXMgPSB7TlVMTCwgTlVMTH07CiAKIHN0YXRpYyBjaGFyICpyZXN0cmljdF9rZXk7 CitzdGF0aWMgQXJjaGl2ZSAqZm91dCA9IE5VTEw7CitzdGF0aWMgcGdfY29tcHJlc3Nfc3BlY2lm aWNhdGlvbiBjb21wcmVzc2lvbl9zcGVjID0gezB9Oworc3RhdGljIGludAlkdW1wSWRWYWwgPSAw Oworc3RhdGljIEFyY2hpdmVGb3JtYXQgYXJjaER1bXBGb3JtYXQgPSBhcmNoTnVsbDsKIAogaW50 CiBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCkBAIC0xNDgsNiArMTU1LDcgQEAgbWFpbihp bnQgYXJnYywgY2hhciAqYXJndltdKQogCQl7InBhc3N3b3JkIiwgbm9fYXJndW1lbnQsIE5VTEws ICdXJ30sCiAJCXsibm8tcHJpdmlsZWdlcyIsIG5vX2FyZ3VtZW50LCBOVUxMLCAneCd9LAogCQl7 Im5vLWFjbCIsIG5vX2FyZ3VtZW50LCBOVUxMLCAneCd9LAorCQl7ImZvcm1hdCIsIHJlcXVpcmVk X2FyZ3VtZW50LCBOVUxMLCAnRid9LAogCiAJCS8qCiAJCSAqIHRoZSBmb2xsb3dpbmcgb3B0aW9u cyBkb24ndCBoYXZlIGFuIGVxdWl2YWxlbnQgc2hvcnQgb3B0aW9uIGxldHRlcgpAQCAtMTk3LDYg KzIwNSw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAljaGFyCSAgICpwZ2RiID0g TlVMTDsKIAljaGFyCSAgICp1c2Vfcm9sZSA9IE5VTEw7CiAJY29uc3QgY2hhciAqZHVtcGVuY29k aW5nID0gTlVMTDsKKwljb25zdCBjaGFyICpmb3JtYXRfbmFtZSA9ICJwIjsKIAl0cml2YWx1ZQlw cm9tcHRfcGFzc3dvcmQgPSBUUklfREVGQVVMVDsKIAlib29sCQlkYXRhX29ubHkgPSBmYWxzZTsK IAlib29sCQlnbG9iYWxzX29ubHkgPSBmYWxzZTsKQEAgLTIwOCw2ICsyMTcsNyBAQCBtYWluKGlu dCBhcmdjLCBjaGFyICphcmd2W10pCiAJaW50CQkJYywKIAkJCQlyZXQ7CiAJaW50CQkJb3B0aW5k ZXg7CisJRHVtcE9wdGlvbnMgZG9wdDsKIAogCXBnX2xvZ2dpbmdfaW5pdChhcmd2WzBdKTsKIAlw Z19sb2dnaW5nX3NldF9sZXZlbChQR19MT0dfV0FSTklORyk7CkBAIC0yNDUsOCArMjU1LDkgQEAg bWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCX0KIAogCXBnZHVtcG9wdHMgPSBjcmVhdGVQ UUV4cEJ1ZmZlcigpOworCUluaXREdW1wT3B0aW9ucygmZG9wdCk7CiAKLQl3aGlsZSAoKGMgPSBn ZXRvcHRfbG9uZyhhcmdjLCBhcmd2LCAiYWNkOkU6ZjpnaDpsOk9wOnJzUzp0VTp2d1d4IiwgbG9u Z19vcHRpb25zLCAmb3B0aW5kZXgpKSAhPSAtMSkKKwl3aGlsZSAoKGMgPSBnZXRvcHRfbG9uZyhh cmdjLCBhcmd2LCAiYWNkOkU6ZjpGOmdoOmw6T3A6cnNTOnRVOnZ3V3giLCBsb25nX29wdGlvbnMs ICZvcHRpbmRleCkpICE9IC0xKQogCXsKIAkJc3dpdGNoIChjKQogCQl7CkBAIC0yNTYsNyArMjY3 LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCQkJCWJyZWFrOwogCiAJCQljYXNl ICdjJzoKLQkJCQlvdXRwdXRfY2xlYW4gPSB0cnVlOworCQkJCWRvcHQub3V0cHV0Q2xlYW4gPSB0 cnVlOwogCQkJCWJyZWFrOwogCiAJCQljYXNlICdkJzoKQEAgLTI3NCw3ICsyODUsOSBAQCBtYWlu KGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocGdkdW1w b3B0cywgIiAtZiAiKTsKIAkJCQlhcHBlbmRTaGVsbFN0cmluZyhwZ2R1bXBvcHRzLCBmaWxlbmFt ZSk7CiAJCQkJYnJlYWs7Ci0KKwkJCWNhc2UgJ0YnOgorCQkJCWZvcm1hdF9uYW1lID0gcGdfc3Ry ZHVwKG9wdGFyZyk7CisJCQkJYnJlYWs7CiAJCQljYXNlICdnJzoKIAkJCQlnbG9iYWxzX29ubHkg PSB0cnVlOwogCQkJCWJyZWFrOwpAQCAtMzE0LDYgKzMyNyw3IEBAIG1haW4oaW50IGFyZ2MsIGNo YXIgKmFyZ3ZbXSkKIAogCQkJY2FzZSAnVSc6CiAJCQkJcGd1c2VyID0gcGdfc3RyZHVwKG9wdGFy Zyk7CisJCQkJZG9wdC5jcGFyYW1zLnVzZXJuYW1lID0gcGdfc3RyZHVwKG9wdGFyZyk7CiAJCQkJ YnJlYWs7CiAKIAkJCWNhc2UgJ3YnOgpAQCAtNDIzLDcgKzQzNyw3IEBAIG1haW4oaW50IGFyZ2Ms IGNoYXIgKmFyZ3ZbXSkKIAkJZXhpdF9uaWNlbHkoMSk7CiAJfQogCi0JaWYgKGlmX2V4aXN0cyAm JiAhb3V0cHV0X2NsZWFuKQorCWlmIChpZl9leGlzdHMgJiYgIWRvcHQub3V0cHV0Q2xlYW4pCiAJ CXBnX2ZhdGFsKCJvcHRpb24gJXMgcmVxdWlyZXMgb3B0aW9uICVzIiwKIAkJCQkgIi0taWYtZXhp c3RzIiwgIi1jLy0tY2xlYW4iKTsKIApAQCAtNDM1LDYgKzQ0OSwyNyBAQCBtYWluKGludCBhcmdj LCBjaGFyICphcmd2W10pCiAJCWV4aXRfbmljZWx5KDEpOwogCX0KIAorCS8qIEdldCBmb3JtYXQg Zm9yIGR1bXAuICovCisJYXJjaER1bXBGb3JtYXQgPSBwYXJzZUR1bXBGb3JtYXQoZm9ybWF0X25h bWUpOworCisJLyoKKwkgKiBJZiBhIG5vbi1wbGFpbiBmb3JtYXQgaXMgc3BlY2lmaWVkLCBhIGZp bGUgbmFtZSBpcyBhbHNvIHJlcXVpcmVkIGFzIHRoZQorCSAqIHBhdGggdG8gdGhlIG1haW4gZGly ZWN0b3J5LgorCSAqLworCWlmIChhcmNoRHVtcEZvcm1hdCAhPSBhcmNoTnVsbCAmJgorCQkoIWZp bGVuYW1lIHx8IHN0cmNtcChmaWxlbmFtZSwgIiIpID09IDApKQorCXsKKwkJcGdfbG9nX2Vycm9y KCJvcHRpb24gJXM9ZHxjfHQgcmVxdWlyZXMgb3B0aW9uICVzIiwKKwkJCQkJICItRi8tLWZvcm1h dCIsICItZi8tLWZpbGUiKTsKKwkJcGdfbG9nX2Vycm9yX2hpbnQoIlRyeSBcIiVzIC0taGVscFwi IGZvciBtb3JlIGluZm9ybWF0aW9uLiIsIHByb2duYW1lKTsKKwkJZXhpdF9uaWNlbHkoMSk7CisJ fQorCisJLyogcmVzdHJpY3Qta2V5IGlzIG9ubHkgc3VwcG9ydGVkIHdpdGggLS1mb3JtYXQ9cGxh aW4gKi8KKwlpZiAoYXJjaER1bXBGb3JtYXQgIT0gYXJjaE51bGwgJiYgcmVzdHJpY3Rfa2V5KQor CQlwZ19mYXRhbCgib3B0aW9uICVzIGNhbiBvbmx5IGJlIHVzZWQgd2l0aCAlcz1wbGFpbiIsCisJ CQkJICItLXJlc3RyaWN0LWtleSIsICItLWZvcm1hdCIpOworCiAJLyoKIAkgKiBJZiBwYXNzd29y ZCB2YWx1ZXMgYXJlIG5vdCByZXF1aXJlZCBpbiB0aGUgZHVtcCwgc3dpdGNoIHRvIHVzaW5nCiAJ ICogcGdfcm9sZXMgd2hpY2ggaXMgZXF1YWxseSB1c2VmdWwsIGp1c3QgbW9yZSBsaWtlbHkgdG8g aGF2ZSB1bnJlc3RyaWN0ZWQKQEAgLTQ5NSw2ICs1MzAsMjcgQEAgbWFpbihpbnQgYXJnYywgY2hh ciAqYXJndltdKQogCWlmIChzZXF1ZW5jZV9kYXRhKQogCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihw Z2R1bXBvcHRzLCAiIC0tc2VxdWVuY2UtZGF0YSIpOwogCisJLyoKKwkgKiBPcGVuIHRoZSBvdXRw dXQgZmlsZSBpZiByZXF1aXJlZCwgb3RoZXJ3aXNlIHVzZSBzdGRvdXQuICBJZiByZXF1aXJlZCwK KwkgKiB0aGVuIGNyZWF0ZSBuZXcgZGlyZWN0b3J5LgorCSAqLworCWlmIChhcmNoRHVtcEZvcm1h dCAhPSBhcmNoTnVsbCkKKwl7CisJCUFzc2VydChmaWxlbmFtZSk7CisKKwkJLyogQ3JlYXRlIG5l dyBkaXJlY3Rvcnkgb3IgYWNjZXB0IHRoZSBlbXB0eSBleGlzdGluZyBkaXJlY3RvcnkuICovCisJ CWNyZWF0ZV9vcl9vcGVuX2RpcihmaWxlbmFtZSk7CisJfQorCWVsc2UgaWYgKGZpbGVuYW1lKQor CXsKKwkJT1BGID0gZm9wZW4oZmlsZW5hbWUsIFBHX0JJTkFSWV9XKTsKKwkJaWYgKCFPUEYpCisJ CQlwZ19mYXRhbCgiY291bGQgbm90IG9wZW4gb3V0cHV0IGZpbGUgXCIlc1wiOiAlbSIsCisJCQkJ CSBmaWxlbmFtZSk7CisJfQorCWVsc2UKKwkJT1BGID0gc3Rkb3V0OworCiAJLyoKIAkgKiBJZiB5 b3UgZG9uJ3QgcHJvdmlkZSBhIHJlc3RyaWN0IGtleSwgb25lIHdpbGwgYmUgYXBwb2ludGVkIGZv ciB5b3UuCiAJICovCkBAIC01NDQsMTkgKzYwMCw2IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFy Z3ZbXSkKIAlleHBhbmRfZGJuYW1lX3BhdHRlcm5zKGNvbm4sICZkYXRhYmFzZV9leGNsdWRlX3Bh dHRlcm5zLAogCQkJCQkJICAgJmRhdGFiYXNlX2V4Y2x1ZGVfbmFtZXMpOwogCi0JLyoKLQkgKiBP cGVuIHRoZSBvdXRwdXQgZmlsZSBpZiByZXF1aXJlZCwgb3RoZXJ3aXNlIHVzZSBzdGRvdXQKLQkg Ki8KLQlpZiAoZmlsZW5hbWUpCi0JewotCQlPUEYgPSBmb3BlbihmaWxlbmFtZSwgUEdfQklOQVJZ X1cpOwotCQlpZiAoIU9QRikKLQkJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgb3BlbiBvdXRwdXQgZmls ZSBcIiVzXCI6ICVtIiwKLQkJCQkJIGZpbGVuYW1lKTsKLQl9Ci0JZWxzZQotCQlPUEYgPSBzdGRv dXQ7Ci0KIAkvKgogCSAqIFNldCB0aGUgY2xpZW50IGVuY29kaW5nIGlmIHJlcXVlc3RlZC4KIAkg Ki8KQEAgLTU5MSwzNyArNjM0LDk1IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAlp ZiAocXVvdGVfYWxsX2lkZW50aWZpZXJzKQogCQlleGVjdXRlQ29tbWFuZChjb25uLCAiU0VUIHF1 b3RlX2FsbF9pZGVudGlmaWVycyA9IHRydWUiKTsKIAotCWZwcmludGYoT1BGLCAiLS1cbi0tIFBv c3RncmVTUUwgZGF0YWJhc2UgY2x1c3RlciBkdW1wXG4tLVxuXG4iKTsKLQlpZiAodmVyYm9zZSkK KwlpZiAodmVyYm9zZSAmJiBhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkKIAkJZHVtcFRpbWVz dGFtcCgiU3RhcnRlZCBvbiIpOwogCi0JLyoKLQkgKiBFbnRlciByZXN0cmljdGVkIG1vZGUgdG8g YmxvY2sgYW55IHVuZXhwZWN0ZWQgcHNxbCBtZXRhLWNvbW1hbmRzLiAgQQotCSAqIG1hbGljaW91 cyBzb3VyY2UgbWlnaHQgdHJ5IHRvIGluamVjdCBhIHZhcmlldHkgb2YgdGhpbmdzIHZpYSBib2d1 cwotCSAqIHJlc3BvbnNlcyB0byBxdWVyaWVzLiAgV2hpbGUgd2UgY2Fubm90IHByZXZlbnQgc3Vj aCBzb3VyY2VzIGZyb20KLQkgKiBhZmZlY3RpbmcgdGhlIGRlc3RpbmF0aW9uIGF0IHJlc3RvcmUg dGltZSwgd2UgY2FuIGJsb2NrIHBzcWwKLQkgKiBtZXRhLWNvbW1hbmRzIHNvIHRoYXQgdGhlIGNs aWVudCBtYWNoaW5lIHRoYXQgcnVucyBwc3FsIHdpdGggdGhlIGR1bXAKLQkgKiBvdXRwdXQgcmVt YWlucyB1bmFmZmVjdGVkLgotCSAqLwotCWZwcmludGYoT1BGLCAiXFxyZXN0cmljdCAlc1xuXG4i LCByZXN0cmljdF9rZXkpOworCS8qIGNyZWF0ZSBhIGFyY2hpdmUgZmlsZSBmb3IgZ2xvYmFsIGNv bW1hbmRzLiAqLworCWlmIChmaWxlbmFtZSAmJiBhcmNoRHVtcEZvcm1hdCAhPSBhcmNoTnVsbCkK Kwl7CisJCWNoYXIJCWdsb2JhbF9wYXRoW01BWFBHUEFUSF07CiAKLQkvKgotCSAqIFdlIHVzZWQg dG8gZW1pdCBcY29ubmVjdCBwb3N0Z3JlcyBoZXJlLCBidXQgdGhhdCBzZXJ2ZWQgbm8gcHVycG9z ZQotCSAqIG90aGVyIHRoYW4gdG8gYnJlYWsgdGhpbmdzIGZvciBpbnN0YWxsYXRpb25zIHdpdGhv dXQgYSBwb3N0Z3JlcwotCSAqIGRhdGFiYXNlLiAgRXZlcnl0aGluZyB3ZSdyZSByZXN0b3Jpbmcg aGVyZSBpcyBhIGdsb2JhbCwgc28gd2hpY2hldmVyCi0JICogZGF0YWJhc2Ugd2UncmUgY29ubmVj dGVkIHRvIGF0IHRoZSBtb21lbnQgaXMgZmluZS4KLQkgKi8KKwkJLyogU2V0IGZpbGUgcGF0aCBm b3IgZ2xvYmFsIHNxbCBjb21tYW5kcy4gKi8KKwkJc25wcmludGYoZ2xvYmFsX3BhdGgsIE1BWFBH UEFUSCwgIiVzL3RvYy5nbG8iLCBmaWxlbmFtZSk7CisKKwkJLyogT3BlbiB0aGUgb3V0cHV0IGZp bGUgKi8KKwkJZm91dCA9IENyZWF0ZUFyY2hpdmUoZ2xvYmFsX3BhdGgsIGFyY2hDdXN0b20sIGNv bXByZXNzaW9uX3NwZWMsCisJCQkJCQkJIGRvc3luYywgYXJjaE1vZGVXcml0ZSwgTlVMTCwgREFU QV9ESVJfU1lOQ19NRVRIT0RfRlNZTkMpOwogCi0JLyogUmVzdG9yZSB3aWxsIG5lZWQgdG8gd3Jp dGUgdG8gdGhlIHRhcmdldCBjbHVzdGVyICovCi0JZnByaW50ZihPUEYsICJTRVQgZGVmYXVsdF90 cmFuc2FjdGlvbl9yZWFkX29ubHkgPSBvZmY7XG5cbiIpOworCQkvKiBNYWtlIGR1bXAgb3B0aW9u cyBhY2Nlc3NpYmxlIHJpZ2h0IGF3YXkgKi8KKwkJU2V0QXJjaGl2ZU9wdGlvbnMoZm91dCwgJmRv cHQsIE5VTEwpOworCQkoKEFyY2hpdmVIYW5kbGUgKikgZm91dCktPmNvbm5lY3Rpb24gPSBjb25u OworCQkoKEFyY2hpdmVIYW5kbGUgKikgZm91dCktPnB1YmxpYy5udW1Xb3JrZXJzID0gMTsKKwor CQkvKiBSZWdpc3RlciB0aGUgY2xlYW51cCBob29rICovCisJCW9uX2V4aXRfY2xvc2VfYXJjaGl2 ZShmb3V0KTsKKworCQkvKiBMZXQgdGhlIGFyY2hpdmVyIGtub3cgaG93IG5vaXN5IHRvIGJlICov CisJCWZvdXQtPnZlcmJvc2UgPSB2ZXJib3NlOworCisJCS8qCisJCSAqIFdlIGFsbG93IHRoZSBz ZXJ2ZXIgdG8gYmUgYmFjayB0byA5LjIsIGFuZCB1cCB0byBhbnkgbWlub3IgcmVsZWFzZQorCQkg KiBvZiBvdXIgb3duIG1ham9yIHZlcnNpb24uICAoU2VlIGFsc28gdmVyc2lvbiBjaGVjayBpbgor CQkgKiBwZ19kdW1wYWxsLmMuKQorCQkgKi8KKwkJZm91dC0+bWluUmVtb3RlVmVyc2lvbiA9IDkw MjAwOworCQlmb3V0LT5tYXhSZW1vdGVWZXJzaW9uID0gKFBHX1ZFUlNJT05fTlVNIC8gMTAwKSAq IDEwMCArIDk5OworCQlmb3V0LT5udW1Xb3JrZXJzID0gMTsKIAotCS8qIFJlcGxpY2F0ZSBlbmNv ZGluZyBhbmQgc3RkX3N0cmluZ3MgaW4gb3V0cHV0ICovCi0JZnByaW50ZihPUEYsICJTRVQgY2xp ZW50X2VuY29kaW5nID0gJyVzJztcbiIsCi0JCQlwZ19lbmNvZGluZ190b19jaGFyKGVuY29kaW5n KSk7Ci0JZnByaW50ZihPUEYsICJTRVQgc3RhbmRhcmRfY29uZm9ybWluZ19zdHJpbmdzID0gJXM7 XG4iLCBzdGRfc3RyaW5ncyk7Ci0JaWYgKHN0cmNtcChzdGRfc3RyaW5ncywgIm9mZiIpID09IDAp Ci0JCWZwcmludGYoT1BGLCAiU0VUIGVzY2FwZV9zdHJpbmdfd2FybmluZyA9IG9mZjtcbiIpOwot CWZwcmludGYoT1BGLCAiXG4iKTsKKwkJY3JlYXRlT25lQXJjaGl2ZUVudHJ5KCItLVxuLS0gUG9z dGdyZVNRTCBkYXRhYmFzZSBjbHVzdGVyIGR1bXBcbi0tXG5cbiIsICJDT01NRU5UIik7CisKKwkJ LyogRHVtcCBkZWZhdWx0X3RyYW5zYWN0aW9uX3JlYWRfb25seSwgZW5jb2RpbmcgYW5kIGVzY2Fw ZSBzdHJpbmcuICovCisJCXsKKwkJCVBRRXhwQnVmZmVyIHFyeSA9IGNyZWF0ZVBRRXhwQnVmZmVy KCk7CisJCQljb25zdCBjaGFyICplbmNuYW1lID0gcGdfZW5jb2RpbmdfdG9fY2hhcihlbmNvZGlu Zyk7CisJCQljb25zdCBjaGFyICpzdGRzdHJpbmdzID0gc3RkX3N0cmluZ3MgPyAib24iIDogIm9m ZiI7CisKKwkJCWFwcGVuZFBRRXhwQnVmZmVyKHFyeSwgIlNFVCBkZWZhdWx0X3RyYW5zYWN0aW9u X3JlYWRfb25seSA9IG9mZjtcblxuIik7CisKKwkJCS8qIFB1dCB0aGUgY29ycmVjdCBlbmNvZGlu ZyBpbnRvIHRoZSBhcmNoaXZlICovCisJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxcnksICJTRVQg Y2xpZW50X2VuY29kaW5nID0gIik7CisJCQlhcHBlbmRTdHJpbmdMaXRlcmFsQUgocXJ5LCBlbmNu YW1lLCBmb3V0KTsKKwkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHFyeSwgIjtcbiIpOworCisJCQkv KiBQdXQgdGhlIGNvcnJlY3QgZXNjYXBlIHN0cmluZyBiZWhhdmlvciBpbnRvIHRoZSBhcmNoaXZl LiAqLworCQkJYXBwZW5kUFFFeHBCdWZmZXIocXJ5LCAiU0VUIHN0YW5kYXJkX2NvbmZvcm1pbmdf c3RyaW5ncyA9ICclcyc7XG4iLAorCQkJCQlzdGRzdHJpbmdzKTsKKwkJCWNyZWF0ZU9uZUFyY2hp dmVFbnRyeShxcnktPmRhdGEsICJEVU1QU0VUQ09NTUFORFMiKTsKKwkJCWRlc3Ryb3lQUUV4cEJ1 ZmZlcihxcnkpOworCQl9CisJfQorCWVsc2UKKwl7CisJCWZwcmludGYoT1BGLCAiLS1cbi0tIFBv c3RncmVTUUwgZGF0YWJhc2UgY2x1c3RlciBkdW1wXG4tLVxuXG4iKTsKKworCQkvKgorCQkgKiBF bnRlciByZXN0cmljdGVkIG1vZGUgdG8gYmxvY2sgYW55IHVuZXhwZWN0ZWQgcHNxbCBtZXRhLWNv bW1hbmRzLiBBCisJCSAqIG1hbGljaW91cyBzb3VyY2UgbWlnaHQgdHJ5IHRvIGluamVjdCBhIHZh cmlldHkgb2YgdGhpbmdzIHZpYSBib2d1cworCQkgKiByZXNwb25zZXMgdG8gcXVlcmllcy4gIFdo aWxlIHdlIGNhbm5vdCBwcmV2ZW50IHN1Y2ggc291cmNlcyBmcm9tCisJCSAqIGFmZmVjdGluZyB0 aGUgZGVzdGluYXRpb24gYXQgcmVzdG9yZSB0aW1lLCB3ZSBjYW4gYmxvY2sgcHNxbAorCQkgKiBt ZXRhLWNvbW1hbmRzIHNvIHRoYXQgdGhlIGNsaWVudCBtYWNoaW5lIHRoYXQgcnVucyBwc3FsIHdp dGggdGhlCisJCSAqIGR1bXAgb3V0cHV0IHJlbWFpbnMgdW5hZmZlY3RlZC4KKwkJICovCisJCWZw cmludGYoT1BGLCAiXFxyZXN0cmljdCAlc1xuXG4iLCByZXN0cmljdF9rZXkpOworCisJCS8qCisJ CSAqIFdlIHVzZWQgdG8gZW1pdCBcY29ubmVjdCBwb3N0Z3JlcyBoZXJlLCBidXQgdGhhdCBzZXJ2 ZWQgbm8gcHVycG9zZQorCQkgKiBvdGhlciB0aGFuIHRvIGJyZWFrIHRoaW5ncyBmb3IgaW5zdGFs bGF0aW9ucyB3aXRob3V0IGEgcG9zdGdyZXMKKwkJICogZGF0YWJhc2UuICBFdmVyeXRoaW5nIHdl J3JlIHJlc3RvcmluZyBoZXJlIGlzIGEgZ2xvYmFsLCBzbworCQkgKiB3aGljaGV2ZXIgZGF0YWJh c2Ugd2UncmUgY29ubmVjdGVkIHRvIGF0IHRoZSBtb21lbnQgaXMgZmluZS4KKwkJICovCisKKwkJ LyogUmVzdG9yZSB3aWxsIG5lZWQgdG8gd3JpdGUgdG8gdGhlIHRhcmdldCBjbHVzdGVyICovCisJ CWZwcmludGYoT1BGLCAiU0VUIGRlZmF1bHRfdHJhbnNhY3Rpb25fcmVhZF9vbmx5ID0gb2ZmO1xu XG4iKTsKKworCQkvKiBSZXBsaWNhdGUgZW5jb2RpbmcgYW5kIHN0ZF9zdHJpbmdzIGluIG91dHB1 dCAqLworCQlmcHJpbnRmKE9QRiwgIlNFVCBjbGllbnRfZW5jb2RpbmcgPSAnJXMnO1xuIiwKKwkJ CQlwZ19lbmNvZGluZ190b19jaGFyKGVuY29kaW5nKSk7CisJCWZwcmludGYoT1BGLCAiU0VUIHN0 YW5kYXJkX2NvbmZvcm1pbmdfc3RyaW5ncyA9ICVzO1xuIiwgc3RkX3N0cmluZ3MpOworCQlpZiAo c3RyY21wKHN0ZF9zdHJpbmdzLCAib2ZmIikgPT0gMCkKKwkJCWZwcmludGYoT1BGLCAiU0VUIGVz Y2FwZV9zdHJpbmdfd2FybmluZyA9IG9mZjtcbiIpOworCQlmcHJpbnRmKE9QRiwgIlxuIik7CisJ fQogCiAJaWYgKCFkYXRhX29ubHkgJiYgIXN0YXRpc3RpY3Nfb25seSAmJiAhbm9fc2NoZW1hKQog CXsKQEAgLTYzMSw3ICs3MzIsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJCSAq IGFuZCB0YWJsZXNwYWNlcyBuZXZlciBkZXBlbmQgb24gZWFjaCBvdGhlci4gIFJvbGVzIGNvdWxk IGhhdmUKIAkJICogZ3JhbnRzIHRvIGVhY2ggb3RoZXIsIGJ1dCBEUk9QIFJPTEUgd2lsbCBjbGVh biB0aG9zZSB1cCBzaWxlbnRseS4KIAkJICovCi0JCWlmIChvdXRwdXRfY2xlYW4pCisJCWlmIChk b3B0Lm91dHB1dENsZWFuKQogCQl7CiAJCQlpZiAoIWdsb2JhbHNfb25seSAmJiAhcm9sZXNfb25s eSAmJiAhdGFibGVzcGFjZXNfb25seSkKIAkJCQlkcm9wREJzKGNvbm4pOwpAQCAtNjY1LDI3ICs3 NjYsNDIgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCQkJZHVtcFRhYmxlc3BhY2Vz KGNvbm4pOwogCX0KIAotCS8qCi0JICogRXhpdCByZXN0cmljdGVkIG1vZGUganVzdCBiZWZvcmUg ZHVtcGluZyB0aGUgZGF0YWJhc2VzLiAgcGdfZHVtcCB3aWxsCi0JICogaGFuZGxlIGVudGVyaW5n IHJlc3RyaWN0ZWQgbW9kZSBhZ2FpbiBhcyBhcHByb3ByaWF0ZS4KLQkgKi8KLQlmcHJpbnRmKE9Q RiwgIlxcdW5yZXN0cmljdCAlc1xuXG4iLCByZXN0cmljdF9rZXkpOworCWlmIChhcmNoRHVtcEZv cm1hdCA9PSBhcmNoTnVsbCkKKwl7CisJCS8qCisJCSAqIEV4aXQgcmVzdHJpY3RlZCBtb2RlIGp1 c3QgYmVmb3JlIGR1bXBpbmcgdGhlIGRhdGFiYXNlcy4gIHBnX2R1bXAKKwkJICogd2lsbCBoYW5k bGUgZW50ZXJpbmcgcmVzdHJpY3RlZCBtb2RlIGFnYWluIGFzIGFwcHJvcHJpYXRlLgorCQkgKi8K KwkJZnByaW50ZihPUEYsICJcXHVucmVzdHJpY3QgJXNcblxuIiwgcmVzdHJpY3Rfa2V5KTsKKwl9 CiAKIAlpZiAoIWdsb2JhbHNfb25seSAmJiAhcm9sZXNfb25seSAmJiAhdGFibGVzcGFjZXNfb25s eSkKLQkJZHVtcERhdGFiYXNlcyhjb25uKTsKKwkJZHVtcERhdGFiYXNlcyhjb25uLCBkb3B0Lm91 dHB1dENsZWFuKTsKIAotCVBRZmluaXNoKGNvbm4pOwotCi0JaWYgKHZlcmJvc2UpCisJaWYgKHZl cmJvc2UgJiYgYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwpCiAJCWR1bXBUaW1lc3RhbXAoIkNv bXBsZXRlZCBvbiIpOwotCWZwcmludGYoT1BGLCAiLS1cbi0tIFBvc3RncmVTUUwgZGF0YWJhc2Ug Y2x1c3RlciBkdW1wIGNvbXBsZXRlXG4tLVxuXG4iKTsKIAotCWlmIChmaWxlbmFtZSkKKwlpZiAo YXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwpCisJCWZwcmludGYoT1BGLCAiLS1cbi0tIFBvc3Rn cmVTUUwgZGF0YWJhc2UgY2x1c3RlciBkdW1wIGNvbXBsZXRlXG4tLVxuXG4iKTsKKworCWlmIChh cmNoRHVtcEZvcm1hdCAhPSBhcmNoTnVsbCkKKwl7CisJCVJlc3RvcmVPcHRpb25zICpyb3B0Owor CisJCWNyZWF0ZU9uZUFyY2hpdmVFbnRyeSgiLS1cbi0tIFBvc3RncmVTUUwgZGF0YWJhc2UgY2x1 c3RlciBkdW1wIGNvbXBsZXRlXG4tLVxuXG4iLCAiQ09NTUVOVCIpOworCQlyb3B0ID0gTmV3UmVz dG9yZU9wdGlvbnMoKTsKKwkJU2V0QXJjaGl2ZU9wdGlvbnMoZm91dCwgJmRvcHQsIHJvcHQpOwor CisJCS8qIE1hcmsgd2hpY2ggZW50cmllcyBzaG91bGQgYmUgb3V0cHV0ICovCisJCVByb2Nlc3NB cmNoaXZlUmVzdG9yZU9wdGlvbnMoZm91dCk7CisJCUNsb3NlQXJjaGl2ZShmb3V0KTsKKwl9CisJ ZWxzZSBpZiAoZmlsZW5hbWUpCiAJewogCQlmY2xvc2UoT1BGKTsKIAogCQkvKiBzeW5jIHRoZSBy ZXN1bHRpbmcgZmlsZSwgZXJyb3JzIGFyZSBub3QgZmF0YWwgKi8KLQkJaWYgKGRvc3luYykKKwkJ aWYgKGRvc3luYyAmJiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwpKQogCQkJKHZvaWQpIGZz eW5jX2ZuYW1lKGZpbGVuYW1lLCBmYWxzZSk7CiAJfQogCkBAIC02OTYsMTIgKzgxMiwxNCBAQCBt YWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiBzdGF0aWMgdm9pZAogaGVscCh2b2lkKQogewot CXByaW50ZihfKCIlcyBleHBvcnRzIGEgUG9zdGdyZVNRTCBkYXRhYmFzZSBjbHVzdGVyIGFzIGFu IFNRTCBzY3JpcHQuXG5cbiIpLCBwcm9nbmFtZSk7CisJcHJpbnRmKF8oIiVzIGV4cG9ydHMgYSBQ b3N0Z3JlU1FMIGRhdGFiYXNlIGNsdXN0ZXIgYXMgYW4gU1FMIHNjcmlwdCBvciB0byBvdGhlciBm b3JtYXRzLlxuXG4iKSwgcHJvZ25hbWUpOwogCXByaW50ZihfKCJVc2FnZTpcbiIpKTsKIAlwcmlu dGYoXygiICAlcyBbT1BUSU9OXS4uLlxuIiksIHByb2duYW1lKTsKIAogCXByaW50ZihfKCJcbkdl bmVyYWwgb3B0aW9uczpcbiIpKTsKIAlwcmludGYoXygiICAtZiwgLS1maWxlPUZJTEVOQU1FICAg ICAgICAgIG91dHB1dCBmaWxlIG5hbWVcbiIpKTsKKwlwcmludGYoXygiICAtRiwgLS1mb3JtYXQ9 Y3xkfHR8cCAgICAgICAgIG91dHB1dCBmaWxlIGZvcm1hdCAoY3VzdG9tLCBkaXJlY3RvcnksIHRh cixcbiIKKwkJCSAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWluIHRleHQgKGRl ZmF1bHQpKVxuIikpOwogCXByaW50ZihfKCIgIC12LCAtLXZlcmJvc2UgICAgICAgICAgICAgICAg dmVyYm9zZSBtb2RlXG4iKSk7CiAJcHJpbnRmKF8oIiAgLVYsIC0tdmVyc2lvbiAgICAgICAgICAg ICAgICBvdXRwdXQgdmVyc2lvbiBpbmZvcm1hdGlvbiwgdGhlbiBleGl0XG4iKSk7CiAJcHJpbnRm KF8oIiAgLS1sb2NrLXdhaXQtdGltZW91dD1USU1FT1VUICBmYWlsIGFmdGVyIHdhaXRpbmcgVElN RU9VVCBmb3IgYSB0YWJsZSBsb2NrXG4iKSk7CkBAIC03NzYsNiArODk0LDcgQEAgc3RhdGljIHZv aWQKIGRyb3BSb2xlcyhQR2Nvbm4gKmNvbm4pCiB7CiAJUFFFeHBCdWZmZXIgYnVmID0gY3JlYXRl UFFFeHBCdWZmZXIoKTsKKwlQUUV4cEJ1ZmZlciBkZWxRcnkgPSBjcmVhdGVQUUV4cEJ1ZmZlcigp OwogCVBHcmVzdWx0ICAgKnJlczsKIAlpbnQJCQlpX3JvbG5hbWU7CiAJaW50CQkJaTsKQEAgLTc5 MiwxMiArOTExLDE3IEBAIGRyb3BSb2xlcyhQR2Nvbm4gKmNvbm4pCiAJCQkJCQkgICJGUk9NICVz ICIKIAkJCQkJCSAgIk9SREVSIEJZIDEiLCByb2xlX2NhdGFsb2cpOwogCi0JcmVzID0gZXhlY3V0 ZVF1ZXJ5KGNvbm4sIGJ1Zi0+ZGF0YSk7CisJcmVzID0gZXhlY3V0ZVF1ZXJ5KGNvbm4sIGJ1Zi0+ ZGF0YSwgZm91dCA/IHRydWUgOiBmYWxzZSk7CiAKIAlpX3JvbG5hbWUgPSBQUWZudW1iZXIocmVz LCAicm9sbmFtZSIpOwogCiAJaWYgKFBRbnR1cGxlcyhyZXMpID4gMCkKLQkJZnByaW50ZihPUEYs ICItLVxuLS0gRHJvcCByb2xlc1xuLS1cblxuIik7CisJeworCQlpZiAoYXJjaER1bXBGb3JtYXQg PT0gYXJjaE51bGwpCisJCQlmcHJpbnRmKE9QRiwgIi0tXG4tLSBEcm9wIHJvbGVzXG4tLVxuXG4i KTsKKwkJZWxzZQorCQkJY3JlYXRlT25lQXJjaGl2ZUVudHJ5KCItLVxuLS0gRHJvcCByb2xlc1xu LS1cblxuIiwgIkNPTU1FTlQiKTsKKwl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgUFFudHVwbGVzKHJl cyk7IGkrKykKIAl7CkBAIC04MDUsMTUgKzkyOSwyMSBAQCBkcm9wUm9sZXMoUEdjb25uICpjb25u KQogCiAJCXJvbGVuYW1lID0gUFFnZXR2YWx1ZShyZXMsIGksIGlfcm9sbmFtZSk7CiAKLQkJZnBy aW50ZihPUEYsICJEUk9QIFJPTEUgJXMlcztcbiIsCi0JCQkJaWZfZXhpc3RzID8gIklGIEVYSVNU UyAiIDogIiIsCi0JCQkJZm10SWQocm9sZW5hbWUpKTsKKwkJYXBwZW5kUFFFeHBCdWZmZXIoZGVs UXJ5LCAiRFJPUCBST0xFICVzJXM7XG4iLAorCQkJCQkJICBpZl9leGlzdHMgPyAiSUYgRVhJU1RT ICIgOiAiIiwKKwkJCQkJCSAgZm10SWQocm9sZW5hbWUpKTsKKworCQlpZiAoYXJjaER1bXBGb3Jt YXQgPT0gYXJjaE51bGwpCisJCQlmcHJpbnRmKE9QRiwgIiVzIiwgZGVsUXJ5LT5kYXRhKTsKKwkJ ZWxzZQorCQkJY3JlYXRlT25lQXJjaGl2ZUVudHJ5KGRlbFFyeS0+ZGF0YSwgImRyb3BSb2xlcyIp OwogCX0KIAogCVBRY2xlYXIocmVzKTsKIAlkZXN0cm95UFFFeHBCdWZmZXIoYnVmKTsKIAotCWZw cmludGYoT1BGLCAiXG5cbiIpOworCWlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkKKwkJ ZnByaW50ZihPUEYsICJcblxuIik7CiB9CiAKIC8qCkBAIC04NzcsNyArMTAwNyw3IEBAIGR1bXBS b2xlcyhQR2Nvbm4gKmNvbm4pCiAJCQkJCQkgICJGUk9NICVzICIKIAkJCQkJCSAgIk9SREVSIEJZ IDIiLCByb2xlX2NhdGFsb2cpOwogCi0JcmVzID0gZXhlY3V0ZVF1ZXJ5KGNvbm4sIGJ1Zi0+ZGF0 YSk7CisJcmVzID0gZXhlY3V0ZVF1ZXJ5KGNvbm4sIGJ1Zi0+ZGF0YSwgZm91dCA/IHRydWUgOiBm YWxzZSk7CiAKIAlpX29pZCA9IFBRZm51bWJlcihyZXMsICJvaWQiKTsKIAlpX3JvbG5hbWUgPSBQ UWZudW1iZXIocmVzLCAicm9sbmFtZSIpOwpAQCAtODk1LDExICsxMDI1LDE3IEBAIGR1bXBSb2xl cyhQR2Nvbm4gKmNvbm4pCiAJaV9pc19jdXJyZW50X3VzZXIgPSBQUWZudW1iZXIocmVzLCAiaXNf Y3VycmVudF91c2VyIik7CiAKIAlpZiAoUFFudHVwbGVzKHJlcykgPiAwKQotCQlmcHJpbnRmKE9Q RiwgIi0tXG4tLSBSb2xlc1xuLS1cblxuIik7CisJeworCQlpZiAoYXJjaER1bXBGb3JtYXQgPT0g YXJjaE51bGwpCisJCQlmcHJpbnRmKE9QRiwgIi0tXG4tLSBSb2xlc1xuLS1cblxuIik7CisJCWVs c2UKKwkJCWNyZWF0ZU9uZUFyY2hpdmVFbnRyeSgiLS1cbi0tIFJvbGVzXG4tLVxuXG4iLCAiQ09N TUVOVCIpOworCX0KIAogCWZvciAoaSA9IDA7IGkgPCBQUW50dXBsZXMocmVzKTsgaSsrKQogCXsK IAkJY29uc3QgY2hhciAqcm9sZW5hbWU7CisJCWJvb2wJY3VycmVudF9yb2xlID0gZmFsc2U7CiAJ CU9pZAkJCWF1dGhfb2lkOwogCiAJCWF1dGhfb2lkID0gYXRvb2lkKFBRZ2V0dmFsdWUocmVzLCBp LCBpX29pZCkpOwpAQCAtOTM1LDYgKzEwNzEsOSBAQCBkdW1wUm9sZXMoUEdjb25uICpjb25uKQog CQkJYXBwZW5kUFFFeHBCdWZmZXIoYnVmLCAiQ1JFQVRFIFJPTEUgJXM7XG4iLCBmbXRJZChyb2xl bmFtZSkpOwogCQlhcHBlbmRQUUV4cEJ1ZmZlcihidWYsICJBTFRFUiBST0xFICVzIFdJVEgiLCBm bXRJZChyb2xlbmFtZSkpOwogCisJCWlmIChzdHJjbXAoZm10SWQocm9sZW5hbWUpLCBQUXVzZXIo Y29ubikpID09IDApCisJCQljdXJyZW50X3JvbGUgPSB0cnVlOworCiAJCWlmIChzdHJjbXAoUFFn ZXR2YWx1ZShyZXMsIGksIGlfcm9sc3VwZXIpLCAidCIpID09IDApCiAJCQlhcHBlbmRQUUV4cEJ1 ZmZlclN0cihidWYsICIgU1VQRVJVU0VSIik7CiAJCWVsc2UKQEAgLTk5OSw3ICsxMTM4LDEwIEBA IGR1bXBSb2xlcyhQR2Nvbm4gKmNvbm4pCiAJCQkJCQkJICJST0xFIiwgcm9sZW5hbWUsCiAJCQkJ CQkJIGJ1Zik7CiAKLQkJZnByaW50ZihPUEYsICIlcyIsIGJ1Zi0+ZGF0YSk7CisJCWlmIChhcmNo RHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkKKwkJCWZwcmludGYoT1BGLCAiJXMiLCBidWYtPmRhdGEp OworCQllbHNlCisJCQljcmVhdGVPbmVBcmNoaXZlRW50cnkoYnVmLT5kYXRhLCBjdXJyZW50X3Jv bGUgPyAiRFVNUF9DVVJSRU5UX1JPTEUiIDogIkRVTVBfUk9MRSIpOwogCX0KIAogCS8qCkBAIC0x MDA3LDE1ICsxMTQ5LDEzIEBAIGR1bXBSb2xlcyhQR2Nvbm4gKmNvbm4pCiAJICogV2UgZG8gaXQg dGhpcyB3YXkgYmVjYXVzZSBjb25maWcgc2V0dGluZ3MgZm9yIHJvbGVzIGNvdWxkIG1lbnRpb24g dGhlCiAJICogbmFtZXMgb2Ygb3RoZXIgcm9sZXMuCiAJICovCi0JaWYgKFBRbnR1cGxlcyhyZXMp ID4gMCkKLQkJZnByaW50ZihPUEYsICJcbi0tXG4tLSBVc2VyIENvbmZpZ3VyYXRpb25zXG4tLVxu Iik7Ci0KIAlmb3IgKGkgPSAwOyBpIDwgUFFudHVwbGVzKHJlcyk7IGkrKykKIAkJZHVtcFVzZXJD b25maWcoY29ubiwgUFFnZXR2YWx1ZShyZXMsIGksIGlfcm9sbmFtZSkpOwogCiAJUFFjbGVhcihy ZXMpOwogCi0JZnByaW50ZihPUEYsICJcblxuIik7CisJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFy Y2hOdWxsKQorCQlmcHJpbnRmKE9QRiwgIlxuXG4iKTsKIAogCWRlc3Ryb3lQUUV4cEJ1ZmZlcihi dWYpOwogfQpAQCAtMTA4Miw3ICsxMjIyLDcgQEAgZHVtcFJvbGVNZW1iZXJzaGlwKFBHY29ubiAq Y29ubikKIAkJCQkJICAiTEVGVCBKT0lOICVzIHVnIG9uIHVnLm9pZCA9IGEuZ3JhbnRvciAiCiAJ CQkJCSAgIldIRVJFIE5PVCAodXIucm9sbmFtZSB+ICdecGdfJyBBTkQgdW0ucm9sbmFtZSB+ICde cGdfJykiCiAJCQkJCSAgIk9SREVSIEJZIDEsMiwzIiwgcm9sZV9jYXRhbG9nLCByb2xlX2NhdGFs b2csIHJvbGVfY2F0YWxvZyk7Ci0JcmVzID0gZXhlY3V0ZVF1ZXJ5KGNvbm4sIGJ1Zi0+ZGF0YSk7 CisJcmVzID0gZXhlY3V0ZVF1ZXJ5KGNvbm4sIGJ1Zi0+ZGF0YSwgZm91dCA/IHRydWUgOiBmYWxz ZSk7CiAJaV9yb2xlID0gUFFmbnVtYmVyKHJlcywgInJvbGUiKTsKIAlpX21lbWJlciA9IFBRZm51 bWJlcihyZXMsICJtZW1iZXIiKTsKIAlpX2dyYW50b3IgPSBQUWZudW1iZXIocmVzLCAiZ3JhbnRv ciIpOwpAQCAtMTA5NCw3ICsxMjM0LDEyIEBAIGR1bXBSb2xlTWVtYmVyc2hpcChQR2Nvbm4gKmNv bm4pCiAJaV9zZXRfb3B0aW9uID0gUFFmbnVtYmVyKHJlcywgInNldF9vcHRpb24iKTsKIAogCWlm IChQUW50dXBsZXMocmVzKSA+IDApCi0JCWZwcmludGYoT1BGLCAiLS1cbi0tIFJvbGUgbWVtYmVy c2hpcHNcbi0tXG5cbiIpOworCXsKKwkJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQor CQkJZnByaW50ZihPUEYsICItLVxuLS0gUm9sZSBtZW1iZXJzaGlwc1xuLS1cblxuIik7CisJCWVs c2UKKwkJCWNyZWF0ZU9uZUFyY2hpdmVFbnRyeSgiLS1cbi0tIFJvbGUgbWVtYmVyc2hpcHNcbi0t XG5cbiIsICJDT01NRU5UIik7CisJfQogCiAJLyoKIAkgKiBXZSBjYW4ndCBkdW1wIHRoZXNlIEdS QU5UIGNvbW1hbmRzIGluIGFyYml0cmFyeSBvcmRlciwgYmVjYXVzZSBhIHJvbGUKQEAgLTExNzMs NiArMTMxOCw3IEBAIGR1bXBSb2xlTWVtYmVyc2hpcChQR2Nvbm4gKmNvbm4pCiAJCQkJY2hhcgkg ICAqZ3JhbnRvcjsKIAkJCQljaGFyCSAgICpzZXRfb3B0aW9uID0gInRydWUiOwogCQkJCWJvb2wJ CWZvdW5kOworCQkJCVBRRXhwQnVmZmVyIGNyZWFRcnkgPSBjcmVhdGVQUUV4cEJ1ZmZlcigpOwog CiAJCQkJLyogSWYgd2UgYWxyZWFkeSBkaWQgdGhpcyBncmFudCwgZG9uJ3QgZG8gaXQgYWdhaW4u ICovCiAJCQkJaWYgKGRvbmVbaSAtIHN0YXJ0XSkKQEAgLTEyMjksOCArMTM3NSw4IEBAIGR1bXBS b2xlTWVtYmVyc2hpcChQR2Nvbm4gKmNvbm4pCiAKIAkJCQkvKiBHZW5lcmF0ZSB0aGUgYWN0dWFs IEdSQU5UIHN0YXRlbWVudC4gKi8KIAkJCQlyZXNldFBRRXhwQnVmZmVyKG9wdGJ1Zik7Ci0JCQkJ ZnByaW50ZihPUEYsICJHUkFOVCAlcyIsIGZtdElkKHJvbGUpKTsKLQkJCQlmcHJpbnRmKE9QRiwg IiBUTyAlcyIsIGZtdElkKG1lbWJlcikpOworCQkJCWFwcGVuZFBRRXhwQnVmZmVyKGNyZWFRcnks ICJHUkFOVCAlcyIsIGZtdElkKHJvbGUpKTsKKwkJCQlhcHBlbmRQUUV4cEJ1ZmZlcihjcmVhUXJ5 LCAiIFRPICVzIiwgZm10SWQobWVtYmVyKSk7CiAJCQkJaWYgKCphZG1pbl9vcHRpb24gPT0gJ3Qn KQogCQkJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihvcHRidWYsICJBRE1JTiBPUFRJT04iKTsKIAkJ CQlpZiAoZHVtcF9ncmFudF9vcHRpb25zKQpAQCAtMTI1MSwxMCArMTM5NywxNSBAQCBkdW1wUm9s ZU1lbWJlcnNoaXAoUEdjb25uICpjb25uKQogCQkJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihvcHRi dWYsICJTRVQgRkFMU0UiKTsKIAkJCQl9CiAJCQkJaWYgKG9wdGJ1Zi0+ZGF0YVswXSAhPSAnXDAn KQotCQkJCQlmcHJpbnRmKE9QRiwgIiBXSVRIICVzIiwgb3B0YnVmLT5kYXRhKTsKKwkJCQkJYXBw ZW5kUFFFeHBCdWZmZXIoY3JlYVFyeSwgIiBXSVRIICVzIiwgb3B0YnVmLT5kYXRhKTsKIAkJCQlp ZiAoZHVtcF9ncmFudG9ycykKLQkJCQkJZnByaW50ZihPUEYsICIgR1JBTlRFRCBCWSAlcyIsIGZt dElkKGdyYW50b3IpKTsKLQkJCQlmcHJpbnRmKE9QRiwgIjtcbiIpOworCQkJCQlhcHBlbmRQUUV4 cEJ1ZmZlcihjcmVhUXJ5LCAiIEdSQU5URUQgQlkgJXMiLCBmbXRJZChncmFudG9yKSk7CisJCQkJ YXBwZW5kUFFFeHBCdWZmZXIoY3JlYVFyeSwgIjtcbiIpOworCisJCQkJaWYgKGFyY2hEdW1wRm9y bWF0ID09IGFyY2hOdWxsKQorCQkJCQlmcHJpbnRmKE9QRiwgIiVzIiwgY3JlYVFyeS0+ZGF0YSk7 CisJCQkJZWxzZQorCQkJCQljcmVhdGVPbmVBcmNoaXZlRW50cnkoY3JlYVFyeS0+ZGF0YSwgImR1 bXBSb2xlTWVtYmVyc2hpcCIpOwogCQkJfQogCQl9CiAKQEAgLTEyNjYsNyArMTQxNyw4IEBAIGR1 bXBSb2xlTWVtYmVyc2hpcChQR2Nvbm4gKmNvbm4pCiAJUFFjbGVhcihyZXMpOwogCWRlc3Ryb3lQ UUV4cEJ1ZmZlcihidWYpOwogCi0JZnByaW50ZihPUEYsICJcblxuIik7CisJaWYgKGFyY2hEdW1w Rm9ybWF0ID09IGFyY2hOdWxsKQorCQlmcHJpbnRmKE9QRiwgIlxuXG4iKTsKIH0KIAogCkBAIC0x MjkxLDEwICsxNDQzLDE1IEBAIGR1bXBSb2xlR1VDUHJpdnMoUEdjb25uICpjb25uKQogCQkJCQkg ICAicGFyYWNsLCAiCiAJCQkJCSAgICJwZ19jYXRhbG9nLmFjbGRlZmF1bHQoJ3AnLCAiIENwcEFz U3RyaW5nMihCT09UU1RSQVBfU1VQRVJVU0VSSUQpICIpIEFTIGFjbGRlZmF1bHQgIgogCQkJCQkg ICAiRlJPTSBwZ19jYXRhbG9nLnBnX3BhcmFtZXRlcl9hY2wgIgotCQkJCQkgICAiT1JERVIgQlkg MSIpOworCQkJCQkgICAiT1JERVIgQlkgMSIsIGZvdXQgPyB0cnVlIDogZmFsc2UpOwogCiAJaWYg KFBRbnR1cGxlcyhyZXMpID4gMCkKLQkJZnByaW50ZihPUEYsICItLVxuLS0gUm9sZSBwcml2aWxl Z2VzIG9uIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyc1xuLS1cblxuIik7CisJeworCQlpZiAoYXJj aER1bXBGb3JtYXQgPT0gYXJjaE51bGwpCisJCQlmcHJpbnRmKE9QRiwgIi0tXG4tLSBSb2xlIHBy aXZpbGVnZXMgb24gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzXG4tLVxuXG4iKTsKKwkJZWxzZQor CQkJY3JlYXRlT25lQXJjaGl2ZUVudHJ5KCItLVxuLS0gUm9sZSBwcml2aWxlZ2VzIG9uIGNvbmZp Z3VyYXRpb24gcGFyYW1ldGVyc1xuLS1cblxuIiwgIkNPTU1FTlQiKTsKKwl9CiAKIAlmb3IgKGkg PSAwOyBpIDwgUFFudHVwbGVzKHJlcyk7IGkrKykKIAl7CkBAIC0xMzE4LDE0ICsxNDc1LDE5IEBA IGR1bXBSb2xlR1VDUHJpdnMoUEdjb25uICpjb25uKQogCQkJZXhpdF9uaWNlbHkoMSk7CiAJCX0K IAotCQlmcHJpbnRmKE9QRiwgIiVzIiwgYnVmLT5kYXRhKTsKKwkJaWYgKGFyY2hEdW1wRm9ybWF0 ID09IGFyY2hOdWxsKQorCQkJZnByaW50ZihPUEYsICIlcyIsIGJ1Zi0+ZGF0YSk7CisJCWVsc2UK KwkJCWNyZWF0ZU9uZUFyY2hpdmVFbnRyeShidWYtPmRhdGEsICJkdW1wUm9sZUdVQ1ByaXZzIik7 CiAKIAkJZnJlZShmcGFybmFtZSk7CiAJCWRlc3Ryb3lQUUV4cEJ1ZmZlcihidWYpOwogCX0KIAog CVBRY2xlYXIocmVzKTsKLQlmcHJpbnRmKE9QRiwgIlxuXG4iKTsKKworCWlmIChhcmNoRHVtcEZv cm1hdCA9PSBhcmNoTnVsbCkKKwkJZnByaW50ZihPUEYsICJcblxuIik7CiB9CiAKIApAQCAtMTMz Nyw2ICsxNDk5LDcgQEAgZHJvcFRhYmxlc3BhY2VzKFBHY29ubiAqY29ubikKIHsKIAlQR3Jlc3Vs dCAgICpyZXM7CiAJaW50CQkJaTsKKwlQUUV4cEJ1ZmZlciBkZWxRcnkgPSBjcmVhdGVQUUV4cEJ1 ZmZlcigpOwogCiAJLyoKIAkgKiBHZXQgYWxsIHRhYmxlc3BhY2VzIGV4Y2VwdCBidWlsdC1pbiBv bmVzICh3aGljaCB3ZSBhc3N1bWUgYXJlIG5hbWVkCkBAIC0xMzQ1LDIzICsxNTA4LDM0IEBAIGRy b3BUYWJsZXNwYWNlcyhQR2Nvbm4gKmNvbm4pCiAJcmVzID0gZXhlY3V0ZVF1ZXJ5KGNvbm4sICJT RUxFQ1Qgc3BjbmFtZSAiCiAJCQkJCSAgICJGUk9NIHBnX2NhdGFsb2cucGdfdGFibGVzcGFjZSAi CiAJCQkJCSAgICJXSEVSRSBzcGNuYW1lICF+ICdecGdfJyAiCi0JCQkJCSAgICJPUkRFUiBCWSAx Iik7CisJCQkJCSAgICJPUkRFUiBCWSAxIiwgZm91dCA/IHRydWUgOiBmYWxzZSk7CiAKIAlpZiAo UFFudHVwbGVzKHJlcykgPiAwKQotCQlmcHJpbnRmKE9QRiwgIi0tXG4tLSBEcm9wIHRhYmxlc3Bh Y2VzXG4tLVxuXG4iKTsKKwl7CisJCWlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkKKwkJ CWZwcmludGYoT1BGLCAiLS1cbi0tIERyb3AgdGFibGVzcGFjZXNcbi0tXG5cbiIpOworCQllbHNl CisJCQljcmVhdGVPbmVBcmNoaXZlRW50cnkoIi0tXG4tLSBEcm9wIHRhYmxlc3BhY2VzXG4tLVxu XG4iLCAiQ09NTUVOVCIpOworCX0KIAogCWZvciAoaSA9IDA7IGkgPCBQUW50dXBsZXMocmVzKTsg aSsrKQogCXsKIAkJY2hhcgkgICAqc3BjbmFtZSA9IFBRZ2V0dmFsdWUocmVzLCBpLCAwKTsKIAot CQlmcHJpbnRmKE9QRiwgIkRST1AgVEFCTEVTUEFDRSAlcyVzO1xuIiwKLQkJCQlpZl9leGlzdHMg PyAiSUYgRVhJU1RTICIgOiAiIiwKLQkJCQlmbXRJZChzcGNuYW1lKSk7CisJCWFwcGVuZFBRRXhw QnVmZmVyKGRlbFFyeSwgIkRST1AgVEFCTEVTUEFDRSAlcyVzO1xuIiwKKwkJCQkJCSAgaWZfZXhp c3RzID8gIklGIEVYSVNUUyAiIDogIiIsCisJCQkJCQkgIGZtdElkKHNwY25hbWUpKTsKKworCQlp ZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwpCisJCQlmcHJpbnRmKE9QRiwgIiVzIiwgZGVs UXJ5LT5kYXRhKTsKKwkJZWxzZQorCQkJY3JlYXRlT25lQXJjaGl2ZUVudHJ5KGRlbFFyeS0+ZGF0 YSwgImRyb3BUYWJsZXNwYWNlcyIpOwogCX0KIAogCVBRY2xlYXIocmVzKTsKIAotCWZwcmludGYo T1BGLCAiXG5cbiIpOworCWlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkKKwkJZnByaW50 ZihPUEYsICJcblxuIik7CiB9CiAKIC8qCkBAIC0xMzg1LDEwICsxNTU5LDE1IEBAIGR1bXBUYWJs ZXNwYWNlcyhQR2Nvbm4gKmNvbm4pCiAJCQkJCSAgICJwZ19jYXRhbG9nLnNob2JqX2Rlc2NyaXB0 aW9uKG9pZCwgJ3BnX3RhYmxlc3BhY2UnKSAiCiAJCQkJCSAgICJGUk9NIHBnX2NhdGFsb2cucGdf dGFibGVzcGFjZSAiCiAJCQkJCSAgICJXSEVSRSBzcGNuYW1lICF+ICdecGdfJyAiCi0JCQkJCSAg ICJPUkRFUiBCWSAxIik7CisJCQkJCSAgICJPUkRFUiBCWSAxIiwgZm91dCA/IHRydWUgOiBmYWxz ZSk7CiAKIAlpZiAoUFFudHVwbGVzKHJlcykgPiAwKQotCQlmcHJpbnRmKE9QRiwgIi0tXG4tLSBU YWJsZXNwYWNlc1xuLS1cblxuIik7CisJeworCQlpZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51 bGwpCisJCQlmcHJpbnRmKE9QRiwgIi0tXG4tLSBUYWJsZXNwYWNlc1xuLS1cblxuIik7CisJCWVs c2UKKwkJCWNyZWF0ZU9uZUFyY2hpdmVFbnRyeSgiLS1cbi0tIFRhYmxlc3BhY2VzXG4tLVxuXG4i LCAiQ09NTUVOVCIpOworCX0KIAogCWZvciAoaSA9IDA7IGkgPCBQUW50dXBsZXMocmVzKTsgaSsr KQogCXsKQEAgLTE0NTcsMTQgKzE2MzYsMTkgQEAgZHVtcFRhYmxlc3BhY2VzKFBHY29ubiAqY29u bikKIAkJCQkJCQkgIlRBQkxFU1BBQ0UiLCBzcGNuYW1lLAogCQkJCQkJCSBidWYpOwogCi0JCWZw cmludGYoT1BGLCAiJXMiLCBidWYtPmRhdGEpOworCQlpZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJj aE51bGwpCisJCQlmcHJpbnRmKE9QRiwgIiVzIiwgYnVmLT5kYXRhKTsKKwkJZWxzZQorCQkJY3Jl YXRlT25lQXJjaGl2ZUVudHJ5KGJ1Zi0+ZGF0YSwgImR1bXBUYWJsZXNwYWNlcyIpOwogCiAJCWZy ZWUoZnNwY25hbWUpOwogCQlkZXN0cm95UFFFeHBCdWZmZXIoYnVmKTsKIAl9CiAKIAlQUWNsZWFy KHJlcyk7Ci0JZnByaW50ZihPUEYsICJcblxuIik7CisKKwlpZiAoYXJjaER1bXBGb3JtYXQgPT0g YXJjaE51bGwpCisJCWZwcmludGYoT1BGLCAiXG5cbiIpOwogfQogCiAKQEAgLTE0ODUsMTAgKzE2 NjksMTUgQEAgZHJvcERCcyhQR2Nvbm4gKmNvbm4pCiAJCQkJCSAgICJTRUxFQ1QgZGF0bmFtZSAi CiAJCQkJCSAgICJGUk9NIHBnX2RhdGFiYXNlIGQgIgogCQkJCQkgICAiV0hFUkUgZGF0YWxsb3dj b25uIEFORCBkYXRjb25ubGltaXQgIT0gLTIgIgotCQkJCQkgICAiT1JERVIgQlkgZGF0bmFtZSIp OworCQkJCQkgICAiT1JERVIgQlkgZGF0bmFtZSIsIGZvdXQgPyB0cnVlIDogZmFsc2UpOwogCiAJ aWYgKFBRbnR1cGxlcyhyZXMpID4gMCkKLQkJZnByaW50ZihPUEYsICItLVxuLS0gRHJvcCBkYXRh YmFzZXMgKGV4Y2VwdCBwb3N0Z3JlcyBhbmQgdGVtcGxhdGUxKVxuLS1cblxuIik7CisJeworCQlp ZiAoYXJjaER1bXBGb3JtYXQgPT0gYXJjaE51bGwpCisJCQlmcHJpbnRmKE9QRiwgIi0tXG4tLSBE cm9wIGRhdGFiYXNlcyAoZXhjZXB0IHBvc3RncmVzIGFuZCB0ZW1wbGF0ZTEpXG4tLVxuXG4iKTsK KwkJZWxzZQorCQkJY3JlYXRlT25lQXJjaGl2ZUVudHJ5KCItLVxuLS0gRHJvcCBkYXRhYmFzZXMg KGV4Y2VwdCBwb3N0Z3JlcyBhbmQgdGVtcGxhdGUxKVxuLS1cblxuIiwgIkNPTU1FTlQiKTsKKwl9 CiAKIAlmb3IgKGkgPSAwOyBpIDwgUFFudHVwbGVzKHJlcyk7IGkrKykKIAl7CkBAIC0xNTAzLDE1 ICsxNjkyLDIzIEBAIGRyb3BEQnMoUEdjb25uICpjb25uKQogCQkJc3RyY21wKGRibmFtZSwgInRl bXBsYXRlMCIpICE9IDAgJiYKIAkJCXN0cmNtcChkYm5hbWUsICJwb3N0Z3JlcyIpICE9IDApCiAJ CXsKLQkJCWZwcmludGYoT1BGLCAiRFJPUCBEQVRBQkFTRSAlcyVzO1xuIiwKLQkJCQkJaWZfZXhp c3RzID8gIklGIEVYSVNUUyAiIDogIiIsCi0JCQkJCWZtdElkKGRibmFtZSkpOworCQkJUFFFeHBC dWZmZXIgZGVsUXJ5ID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsKKworCQkJYXBwZW5kUFFFeHBCdWZm ZXIoZGVsUXJ5LCAiRFJPUCBEQVRBQkFTRSAlcyVzO1xuIiwKKwkJCQkJCQkgIGlmX2V4aXN0cyA/ ICJJRiBFWElTVFMgIiA6ICIiLAorCQkJCQkJCSAgZm10SWQoZGJuYW1lKSk7CisKKwkJCWlmIChh cmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkKKwkJCQlmcHJpbnRmKE9QRiwgIiVzIiwgZGVsUXJ5 LT5kYXRhKTsKKwkJCWVsc2UKKwkJCQljcmVhdGVPbmVBcmNoaXZlRW50cnkoZGVsUXJ5LT5kYXRh LCAiRFJPUF9EQVRBQkFTRSIpOwogCQl9CiAJfQogCiAJUFFjbGVhcihyZXMpOwogCi0JZnByaW50 ZihPUEYsICJcblxuIik7CisJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQorCQlmcHJp bnRmKE9QRiwgIlxuXG4iKTsKIH0KIAogCkBAIC0xNTMxLDE0ICsxNzI4LDI1IEBAIGR1bXBVc2Vy Q29uZmlnKFBHY29ubiAqY29ubiwgY29uc3QgY2hhciAqdXNlcm5hbWUpCiAJYXBwZW5kU3RyaW5n TGl0ZXJhbENvbm4oYnVmLCB1c2VybmFtZSwgY29ubik7CiAJYXBwZW5kUFFFeHBCdWZmZXJDaGFy KGJ1ZiwgJyknKTsKIAotCXJlcyA9IGV4ZWN1dGVRdWVyeShjb25uLCBidWYtPmRhdGEpOworCXJl cyA9IGV4ZWN1dGVRdWVyeShjb25uLCBidWYtPmRhdGEsIGZvdXQgPyB0cnVlIDogZmFsc2UpOwog CiAJaWYgKFBRbnR1cGxlcyhyZXMpID4gMCkKIAl7CiAJCWNoYXIJICAgKnNhbml0aXplZDsKIAog CQlzYW5pdGl6ZWQgPSBzYW5pdGl6ZV9saW5lKHVzZXJuYW1lLCB0cnVlKTsKLQkJZnByaW50ZihP UEYsICJcbi0tXG4tLSBVc2VyIENvbmZpZyBcIiVzXCJcbi0tXG5cbiIsIHNhbml0aXplZCk7CisK KwkJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQorCQkJZnByaW50ZihPUEYsICJcbi0t XG4tLSBVc2VyIENvbmZpZyBcIiVzXCJcbi0tXG5cbiIsIHNhbml0aXplZCk7CisJCWVsc2UKKwkJ eworCQkJUFFFeHBCdWZmZXIgcXJ5ID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsKKworCQkJYXBwZW5k UFFFeHBCdWZmZXIocXJ5LCAiXG4tLVxuLS0gVXNlciBDb25maWcgXCIlc1wiXG4tLVxuXG4iLCBz YW5pdGl6ZWQpOworCQkJY3JlYXRlT25lQXJjaGl2ZUVudHJ5KHFyeS0+ZGF0YSwgIkNPTU1FTlQi KTsKKwkJCWRlc3Ryb3lQUUV4cEJ1ZmZlcihxcnkpOworCQl9CisKIAkJZnJlZShzYW5pdGl6ZWQp OwogCX0KIApAQCAtMTU0OCw3ICsxNzU2LDExIEBAIGR1bXBVc2VyQ29uZmlnKFBHY29ubiAqY29u biwgY29uc3QgY2hhciAqdXNlcm5hbWUpCiAJCW1ha2VBbHRlckNvbmZpZ0NvbW1hbmQoY29ubiwg UFFnZXR2YWx1ZShyZXMsIGksIDApLAogCQkJCQkJCSAgICJST0xFIiwgdXNlcm5hbWUsIE5VTEws IE5VTEwsCiAJCQkJCQkJICAgYnVmKTsKLQkJZnByaW50ZihPUEYsICIlcyIsIGJ1Zi0+ZGF0YSk7 CisKKwkJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hOdWxsKQorCQkJZnByaW50ZihPUEYsICIl cyIsIGJ1Zi0+ZGF0YSk7CisJCWVsc2UKKwkJCWNyZWF0ZU9uZUFyY2hpdmVFbnRyeShidWYtPmRh dGEsICJkdW1wVXNlckNvbmZpZyIpOwogCX0KIAogCVBRY2xlYXIocmVzKTsKQEAgLTE1OTcsNyAr MTgwOSw3IEBAIGV4cGFuZF9kYm5hbWVfcGF0dGVybnMoUEdjb25uICpjb25uLAogCQkJZXhpdF9u aWNlbHkoMSk7CiAJCX0KIAotCQlyZXMgPSBleGVjdXRlUXVlcnkoY29ubiwgcXVlcnktPmRhdGEp OworCQlyZXMgPSBleGVjdXRlUXVlcnkoY29ubiwgcXVlcnktPmRhdGEsIGZvdXQgPyB0cnVlIDog ZmFsc2UpOwogCQlmb3IgKGludCBpID0gMDsgaSA8IFBRbnR1cGxlcyhyZXMpOyBpKyspCiAJCXsK IAkJCXNpbXBsZV9zdHJpbmdfbGlzdF9hcHBlbmQobmFtZXMsIFBRZ2V0dmFsdWUocmVzLCBpLCAw KSk7CkBAIC0xNjE0LDEwICsxODI2LDEzIEBAIGV4cGFuZF9kYm5hbWVfcGF0dGVybnMoUEdjb25u ICpjb25uLAogICogRHVtcCBjb250ZW50cyBvZiBkYXRhYmFzZXMuCiAgKi8KIHN0YXRpYyB2b2lk Ci1kdW1wRGF0YWJhc2VzKFBHY29ubiAqY29ubikKK2R1bXBEYXRhYmFzZXMoUEdjb25uICpjb25u LCBib29sIG91dHB1dF9jbGVhbikKIHsKIAlQR3Jlc3VsdCAgICpyZXM7CiAJaW50CQkJaTsKKwlj aGFyCQlkYl9zdWJkaXJbTUFYUEdQQVRIXTsKKwljaGFyCQlkYmZpbGVwYXRoW01BWFBHUEFUSF07 CisJRklMRQkgICAqbWFwX2ZpbGUgPSBOVUxMOwogCiAJLyoKIAkgKiBTa2lwIGRhdGFiYXNlcyBt YXJrZWQgbm90IGRhdGFsbG93Y29ubiwgc2luY2Ugd2UnZCBiZSB1bmFibGUgdG8gY29ubmVjdApA QCAtMTYzMSwxOSArMTg0Niw0OSBAQCBkdW1wRGF0YWJhc2VzKFBHY29ubiAqY29ubikKIAkgKiBk b2Vzbid0IGhhdmUgc29tZSBmYWlsdXJlIG1vZGUgd2l0aCAtLWNsZWFuLgogCSAqLwogCXJlcyA9 IGV4ZWN1dGVRdWVyeShjb25uLAotCQkJCQkgICAiU0VMRUNUIGRhdG5hbWUgIgorCQkJCQkgICAi U0VMRUNUIGRhdG5hbWUsIG9pZCAiCiAJCQkJCSAgICJGUk9NIHBnX2RhdGFiYXNlIGQgIgogCQkJ CQkgICAiV0hFUkUgZGF0YWxsb3djb25uIEFORCBkYXRjb25ubGltaXQgIT0gLTIgIgotCQkJCQkg ICAiT1JERVIgQlkgKGRhdG5hbWUgPD4gJ3RlbXBsYXRlMScpLCBkYXRuYW1lIik7CisJCQkJCSAg ICJPUkRFUiBCWSAoZGF0bmFtZSA8PiAndGVtcGxhdGUxJyksIGRhdG5hbWUiLAorCQkJCQkgICBm b3V0ID8gdHJ1ZSA6IGZhbHNlKTsKIAogCWlmIChQUW50dXBsZXMocmVzKSA+IDApCi0JCWZwcmlu dGYoT1BGLCAiLS1cbi0tIERhdGFiYXNlc1xuLS1cblxuIik7CisJeworCQlpZiAoYXJjaER1bXBG b3JtYXQgPT0gYXJjaE51bGwpCisJCQlmcHJpbnRmKE9QRiwgIi0tXG4tLSBEYXRhYmFzZXNcbi0t XG5cbiIpOworCQllbHNlCisJCQljcmVhdGVPbmVBcmNoaXZlRW50cnkoIi0tXG4tLSBEYXRhYmFz ZXNcbi0tXG5cbiIsICJDT01NRU5UIik7CisJfQorCisJLyoKKwkgKiBJZiBkaXJlY3RvcnkvdGFy L2N1c3RvbSBmb3JtYXQgaXMgc3BlY2lmaWVkLCBjcmVhdGUgYSBzdWJkaXJlY3RvcnkKKwkgKiB1 bmRlciB0aGUgbWFpbiBkaXJlY3RvcnkgYW5kIGVhY2ggZGF0YWJhc2UgZHVtcCBmaWxlIG9yIHN1 YmRpcmVjdG9yeQorCSAqIHdpbGwgYmUgY3JlYXRlZCBpbiB0aGF0IHN1YmRpcmVjdG9yeSBieSBw Z19kdW1wLgorCSAqLworCWlmIChhcmNoRHVtcEZvcm1hdCAhPSBhcmNoTnVsbCkKKwl7CisJCWNo YXIJCW1hcF9maWxlX3BhdGhbTUFYUEdQQVRIXTsKKworCQlzbnByaW50ZihkYl9zdWJkaXIsIE1B WFBHUEFUSCwgIiVzL2RhdGFiYXNlcyIsIGZpbGVuYW1lKTsKKworCQkvKiBDcmVhdGUgYSBzdWJk aXJlY3Rvcnkgd2l0aCAnZGF0YWJhc2VzJyBuYW1lIHVuZGVyIG1haW4gZGlyZWN0b3J5LiAqLwor CQlpZiAobWtkaXIoZGJfc3ViZGlyLCBwZ19kaXJfY3JlYXRlX21vZGUpICE9IDApCisJCQlwZ19m YXRhbCgiY291bGQgbm90IGNyZWF0ZSBkaXJlY3RvcnkgXCIlc1wiOiAlbSIsIGRiX3N1YmRpcik7 CisKKwkJc25wcmludGYobWFwX2ZpbGVfcGF0aCwgTUFYUEdQQVRILCAiJXMvbWFwLmRhdCIsIGZp bGVuYW1lKTsKKworCQkvKiBDcmVhdGUgYSBtYXAgZmlsZSAodG8gc3RvcmUgZGJvaWQgYW5kIGRi bmFtZSkgKi8KKwkJbWFwX2ZpbGUgPSBmb3BlbihtYXBfZmlsZV9wYXRoLCBQR19CSU5BUllfVyk7 CisJCWlmICghbWFwX2ZpbGUpCisJCQlwZ19mYXRhbCgiY291bGQgbm90IG9wZW4gZmlsZSBcIiVz XCI6ICVtIiwgbWFwX2ZpbGVfcGF0aCk7CisJfQogCiAJZm9yIChpID0gMDsgaSA8IFBRbnR1cGxl cyhyZXMpOyBpKyspCiAJewogCQljaGFyCSAgICpkYm5hbWUgPSBQUWdldHZhbHVlKHJlcywgaSwg MCk7CiAJCWNoYXIJICAgKnNhbml0aXplZDsKLQkJY29uc3QgY2hhciAqY3JlYXRlX29wdHM7CisJ CWNoYXIJICAgKm9pZCA9IFBRZ2V0dmFsdWUocmVzLCBpLCAxKTsKKwkJY29uc3QgY2hhciAqY3Jl YXRlX29wdHMgPSAiIjsKIAkJaW50CQkJcmV0OwogCiAJCS8qIFNraXAgdGVtcGxhdGUwLCBldmVu IGlmIGl0J3Mgbm90IG1hcmtlZCAhZGF0YWxsb3djb25uLiAqLwpAQCAtMTY2MCw3ICsxOTA1LDE4 IEBAIGR1bXBEYXRhYmFzZXMoUEdjb25uICpjb25uKQogCQlwZ19sb2dfaW5mbygiZHVtcGluZyBk YXRhYmFzZSBcIiVzXCIiLCBkYm5hbWUpOwogCiAJCXNhbml0aXplZCA9IHNhbml0aXplX2xpbmUo ZGJuYW1lLCB0cnVlKTsKLQkJZnByaW50ZihPUEYsICItLVxuLS0gRGF0YWJhc2UgXCIlc1wiIGR1 bXBcbi0tXG5cbiIsIHNhbml0aXplZCk7CisKKwkJaWYgKGFyY2hEdW1wRm9ybWF0ID09IGFyY2hO dWxsKQorCQkJZnByaW50ZihPUEYsICItLVxuLS0gRGF0YWJhc2UgXCIlc1wiIGR1bXBcbi0tXG5c biIsIHNhbml0aXplZCk7CisJCWVsc2UKKwkJeworCQkJUFFFeHBCdWZmZXIgcXJ5ID0gY3JlYXRl UFFFeHBCdWZmZXIoKTsKKworCQkJYXBwZW5kUFFFeHBCdWZmZXIocXJ5LCAiLS1cbi0tIERhdGFi YXNlIFwiJXNcIiBkdW1wXG4tLVxuXG4iLCBzYW5pdGl6ZWQpOworCQkJY3JlYXRlT25lQXJjaGl2 ZUVudHJ5KHFyeS0+ZGF0YSwgIkNPTU1FTlQiKTsKKwkJCWRlc3Ryb3lQUUV4cEJ1ZmZlcihxcnkp OworCQl9CisKIAkJZnJlZShzYW5pdGl6ZWQpOwogCiAJCS8qCkBAIC0xNjc1LDI0ICsxOTMxLDM4 IEBAIGR1bXBEYXRhYmFzZXMoUEdjb25uICpjb25uKQogCQl7CiAJCQlpZiAob3V0cHV0X2NsZWFu KQogCQkJCWNyZWF0ZV9vcHRzID0gIi0tY2xlYW4gLS1jcmVhdGUiOwotCQkJZWxzZQotCQkJewot CQkJCWNyZWF0ZV9vcHRzID0gIiI7Ci0JCQkJLyogU2luY2UgcGdfZHVtcCB3b24ndCBlbWl0IGEg XGNvbm5lY3QgY29tbWFuZCwgd2UgbXVzdCAqLworCQkJLyogU2luY2UgcGdfZHVtcCB3b24ndCBl bWl0IGEgXGNvbm5lY3QgY29tbWFuZCwgd2UgbXVzdCAqLworCQkJZWxzZSBpZiAoYXJjaER1bXBG b3JtYXQgPT0gYXJjaE51bGwpCiAJCQkJZnByaW50ZihPUEYsICJcXGNvbm5lY3QgJXNcblxuIiwg ZGJuYW1lKTsKLQkJCX0KIAkJfQogCQllbHNlCiAJCQljcmVhdGVfb3B0cyA9ICItLWNyZWF0ZSI7 CiAKLQkJaWYgKGZpbGVuYW1lKQorCQlpZiAoZmlsZW5hbWUgJiYgYXJjaER1bXBGb3JtYXQgPT0g YXJjaE51bGwpCiAJCQlmY2xvc2UoT1BGKTsKIAotCQlyZXQgPSBydW5QZ0R1bXAoZGJuYW1lLCBj cmVhdGVfb3B0cyk7CisJCS8qCisJCSAqIElmIHRoaXMgaXMgbm90IGEgcGxhaW4gZm9ybWF0IGR1 bXAsIHRoZW4gYXBwZW5kIGRib2lkIGFuZCBkYm5hbWUgdG8KKwkJICogdGhlIG1hcC5kYXQgZmls ZS4KKwkJICovCisJCWlmIChhcmNoRHVtcEZvcm1hdCAhPSBhcmNoTnVsbCkKKwkJeworCQkJaWYg KGFyY2hEdW1wRm9ybWF0ID09IGFyY2hDdXN0b20pCisJCQkJc25wcmludGYoZGJmaWxlcGF0aCwg TUFYUEdQQVRILCAiXCIlc1wiL1wiJXNcIi5kbXAiLCBkYl9zdWJkaXIsIG9pZCk7CisJCQllbHNl IGlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoVGFyKQorCQkJCXNucHJpbnRmKGRiZmlsZXBhdGgs IE1BWFBHUEFUSCwgIlwiJXNcIi9cIiVzXCIudGFyIiwgZGJfc3ViZGlyLCBvaWQpOworCQkJZWxz ZQorCQkJCXNucHJpbnRmKGRiZmlsZXBhdGgsIE1BWFBHUEFUSCwgIlwiJXNcIi9cIiVzXCIiLCBk Yl9zdWJkaXIsIG9pZCk7CisKKwkJCS8qIFB1dCBvbmUgbGluZSBlbnRyeSBmb3IgZGJvaWQgYW5k IGRibmFtZSBpbiBtYXAgZmlsZS4gKi8KKwkJCWZwcmludGYobWFwX2ZpbGUsICIlcyAlc1xuIiwg b2lkLCBkYm5hbWUpOworCQl9CisKKwkJcmV0ID0gcnVuUGdEdW1wKGRibmFtZSwgY3JlYXRlX29w dHMsIGRiZmlsZXBhdGgpOwogCQlpZiAocmV0ICE9IDApCiAJCQlwZ19mYXRhbCgicGdfZHVtcCBm YWlsZWQgb24gZGF0YWJhc2UgXCIlc1wiLCBleGl0aW5nIiwgZGJuYW1lKTsKIAotCQlpZiAoZmls ZW5hbWUpCisJCWlmIChmaWxlbmFtZSAmJiBhcmNoRHVtcEZvcm1hdCA9PSBhcmNoTnVsbCkKIAkJ ewogCQkJT1BGID0gZm9wZW4oZmlsZW5hbWUsIFBHX0JJTkFSWV9BKTsKIAkJCWlmICghT1BGKQpA QCAtMTcwMSw2ICsxOTcxLDEwIEBAIGR1bXBEYXRhYmFzZXMoUEdjb25uICpjb25uKQogCQl9CiAJ fQogCisJLyogQ2xvc2UgbWFwIGZpbGUgKi8KKwlpZiAoYXJjaER1bXBGb3JtYXQgIT0gYXJjaE51 bGwpCisJCWZjbG9zZShtYXBfZmlsZSk7CisKIAlQUWNsZWFyKHJlcyk7CiB9CiAKQEAgLTE3MTAs NyArMTk4NCw3IEBAIGR1bXBEYXRhYmFzZXMoUEdjb25uICpjb25uKQogICogUnVuIHBnX2R1bXAg b24gZGJuYW1lLCB3aXRoIHNwZWNpZmllZCBvcHRpb25zLgogICovCiBzdGF0aWMgaW50Ci1ydW5Q Z0R1bXAoY29uc3QgY2hhciAqZGJuYW1lLCBjb25zdCBjaGFyICpjcmVhdGVfb3B0cykKK3J1blBn RHVtcChjb25zdCBjaGFyICpkYm5hbWUsIGNvbnN0IGNoYXIgKmNyZWF0ZV9vcHRzLCBjaGFyICpk YmZpbGUpCiB7CiAJUFFFeHBCdWZmZXJEYXRhIGNvbm5zdHJidWY7CiAJUFFFeHBCdWZmZXJEYXRh IGNtZDsKQEAgLTE3MTksMTcgKzE5OTMsMzYgQEAgcnVuUGdEdW1wKGNvbnN0IGNoYXIgKmRibmFt ZSwgY29uc3QgY2hhciAqY3JlYXRlX29wdHMpCiAJaW5pdFBRRXhwQnVmZmVyKCZjb25uc3RyYnVm KTsKIAlpbml0UFFFeHBCdWZmZXIoJmNtZCk7CiAKLQlwcmludGZQUUV4cEJ1ZmZlcigmY21kLCAi XCIlc1wiICVzICVzIiwgcGdfZHVtcF9iaW4sCi0JCQkJCSAgcGdkdW1wb3B0cy0+ZGF0YSwgY3Jl YXRlX29wdHMpOwotCiAJLyoKLQkgKiBJZiB3ZSBoYXZlIGEgZmlsZW5hbWUsIHVzZSB0aGUgdW5k b2N1bWVudGVkIHBsYWluLWFwcGVuZCBwZ19kdW1wCi0JICogZm9ybWF0LgorCSAqIElmIHRoaXMg aXMgbm90IGEgcGxhaW4gZm9ybWF0IGR1bXAsIHRoZW4gYXBwZW5kIGZpbGUgbmFtZSBhbmQgZHVt cAorCSAqIGZvcm1hdCB0byB0aGUgcGdfZHVtcCBjb21tYW5kIHRvIGdldCBhcmNoaXZlIGR1bXAu CiAJICovCi0JaWYgKGZpbGVuYW1lKQotCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmY21kLCAiIC1G YSAiKTsKKwlpZiAoYXJjaER1bXBGb3JtYXQgIT0gYXJjaE51bGwpCisJeworCQlwcmludGZQUUV4 cEJ1ZmZlcigmY21kLCAiXCIlc1wiICVzIC1mICVzICVzIiwgcGdfZHVtcF9iaW4sCisJCQkJCQkg IHBnZHVtcG9wdHMtPmRhdGEsIGRiZmlsZSwgY3JlYXRlX29wdHMpOworCisJCWlmIChhcmNoRHVt cEZvcm1hdCA9PSBhcmNoRGlyZWN0b3J5KQorCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmNtZCwg IiAgLS1mb3JtYXQ9ZGlyZWN0b3J5ICIpOworCQllbHNlIGlmIChhcmNoRHVtcEZvcm1hdCA9PSBh cmNoQ3VzdG9tKQorCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmNtZCwgIiAgLS1mb3JtYXQ9Y3Vz dG9tICIpOworCQllbHNlIGlmIChhcmNoRHVtcEZvcm1hdCA9PSBhcmNoVGFyKQorCQkJYXBwZW5k UFFFeHBCdWZmZXJTdHIoJmNtZCwgIiAgLS1mb3JtYXQ9dGFyICIpOworCX0KIAllbHNlCi0JCWFw cGVuZFBRRXhwQnVmZmVyU3RyKCZjbWQsICIgLUZwICIpOworCXsKKwkJcHJpbnRmUFFFeHBCdWZm ZXIoJmNtZCwgIlwiJXNcIiAlcyAlcyIsIHBnX2R1bXBfYmluLAorCQkJCQkJICBwZ2R1bXBvcHRz LT5kYXRhLCBjcmVhdGVfb3B0cyk7CisKKwkJLyoKKwkJICogSWYgd2UgaGF2ZSBhIGZpbGVuYW1l LCB1c2UgdGhlIHVuZG9jdW1lbnRlZCBwbGFpbi1hcHBlbmQgcGdfZHVtcAorCQkgKiBmb3JtYXQu CisJCSAqLworCQlpZiAoZmlsZW5hbWUpCisJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmY21kLCAi IC1GYSAiKTsKKwkJZWxzZQorCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmNtZCwgIiAtRnAgIik7 CisJfQogCiAJLyoKIAkgKiBBcHBlbmQgdGhlIGRhdGFiYXNlIG5hbWUgdG8gdGhlIGFscmVhZHkt Y29uc3RydWN0ZWQgc3RlbSBvZiBjb25uZWN0aW9uCkBAIC0xNzcyLDcgKzIwNjUsNyBAQCBidWls ZFNoU2VjTGFiZWxzKFBHY29ubiAqY29ubiwgY29uc3QgY2hhciAqY2F0YWxvZ19uYW1lLCBPaWQg b2JqZWN0SWQsCiAJUEdyZXN1bHQgICAqcmVzOwogCiAJYnVpbGRTaFNlY0xhYmVsUXVlcnkoY2F0 YWxvZ19uYW1lLCBvYmplY3RJZCwgc3FsKTsKLQlyZXMgPSBleGVjdXRlUXVlcnkoY29ubiwgc3Fs LT5kYXRhKTsKKwlyZXMgPSBleGVjdXRlUXVlcnkoY29ubiwgc3FsLT5kYXRhLCBmb3V0ID8gdHJ1 ZSA6IGZhbHNlKTsKIAllbWl0U2hTZWNMYWJlbHMoY29ubiwgcmVzLCBidWZmZXIsIG9ianR5cGUs IG9iam5hbWUpOwogCiAJUFFjbGVhcihyZXMpOwpAQCAtMTg3NCwzICsyMTY3LDc0IEBAIHJlYWRf ZHVtcGFsbF9maWx0ZXJzKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBTaW1wbGVTdHJpbmdMaXN0ICpw YXR0ZXJuKQogCiAJZmlsdGVyX2ZyZWUoJmZzdGF0ZSk7CiB9CisKKy8qCisgKiBwYXJzZUR1bXBG b3JtYXQKKyAqCisgKiBUaGlzIHdpbGwgdmFsaWRhdGUgZHVtcCBmb3JtYXRzLgorICovCitzdGF0 aWMgQXJjaGl2ZUZvcm1hdAorcGFyc2VEdW1wRm9ybWF0KGNvbnN0IGNoYXIgKmZvcm1hdCkKK3sK KwlBcmNoaXZlRm9ybWF0IGFyY2hEdW1wRm9ybWF0OworCisJaWYgKHBnX3N0cmNhc2VjbXAoZm9y bWF0LCAiYyIpID09IDApCisJCWFyY2hEdW1wRm9ybWF0ID0gYXJjaEN1c3RvbTsKKwllbHNlIGlm IChwZ19zdHJjYXNlY21wKGZvcm1hdCwgImN1c3RvbSIpID09IDApCisJCWFyY2hEdW1wRm9ybWF0 ID0gYXJjaEN1c3RvbTsKKwllbHNlIGlmIChwZ19zdHJjYXNlY21wKGZvcm1hdCwgImQiKSA9PSAw KQorCQlhcmNoRHVtcEZvcm1hdCA9IGFyY2hEaXJlY3Rvcnk7CisJZWxzZSBpZiAocGdfc3RyY2Fz ZWNtcChmb3JtYXQsICJkaXJlY3RvcnkiKSA9PSAwKQorCQlhcmNoRHVtcEZvcm1hdCA9IGFyY2hE aXJlY3Rvcnk7CisJZWxzZSBpZiAocGdfc3RyY2FzZWNtcChmb3JtYXQsICJwIikgPT0gMCkKKwkJ YXJjaER1bXBGb3JtYXQgPSBhcmNoTnVsbDsKKwllbHNlIGlmIChwZ19zdHJjYXNlY21wKGZvcm1h dCwgInBsYWluIikgPT0gMCkKKwkJYXJjaER1bXBGb3JtYXQgPSBhcmNoTnVsbDsKKwllbHNlIGlm IChwZ19zdHJjYXNlY21wKGZvcm1hdCwgInQiKSA9PSAwKQorCQlhcmNoRHVtcEZvcm1hdCA9IGFy Y2hUYXI7CisJZWxzZSBpZiAocGdfc3RyY2FzZWNtcChmb3JtYXQsICJ0YXIiKSA9PSAwKQorCQlh cmNoRHVtcEZvcm1hdCA9IGFyY2hUYXI7CisJZWxzZQorCQlwZ19mYXRhbCgidW5yZWNvZ25pemVk IG91dHB1dCBmb3JtYXQgXCIlc1wiOyBwbGVhc2Ugc3BlY2lmeSBcImNcIiwgXCJkXCIsIFwicFwi LCBvciBcInRcIiIsCisJCQkJIGZvcm1hdCk7CisKKwlyZXR1cm4gYXJjaER1bXBGb3JtYXQ7Cit9 CisKKy8qCisgKiBjcmVhdGVEdW1wSWQKKyAqCisgKiBUaGlzIHdpbGwgcmV0dXJuIG5leHQgbGFz dCB1c2VkIG9pZC4KKyAqLworc3RhdGljIGludAorY3JlYXRlRHVtcElkKHZvaWQpCit7CisJcmV0 dXJuICsrZHVtcElkVmFsOworfQorCisvKgorICogY3JlYXRlT25lQXJjaGl2ZUVudHJ5CisgKgor ICogVGhpcyBjcmVhdGVzIG9uZSBhcmNoaXZlIGVudHJ5IGZvciBub24tdGV4dCBkdW1wIGZvcm1h dC4KKyAqLworc3RhdGljIHZvaWQKK2NyZWF0ZU9uZUFyY2hpdmVFbnRyeShjb25zdCBjaGFyICpx dWVyeSwgY29uc3QgY2hhciAqdGFnKQoreworCUNhdGFsb2dJZAluaWxDYXRhbG9nSWQgPSB7MCwg MH07CisJaW50IHR5cGU7CisKKwlBc3NlcnQoZm91dCAhPSBOVUxMKTsKKworCWlmKHN0cmNtcCh0 YWcsICJDT01NRU5UIikgPT0gMCkKKwkJdHlwZSA9IFNFQ1RJT05fTk9ORTsKKwllbHNlCisJCXR5 cGUgPSBTRUNUSU9OX1BSRV9EQVRBOworCisJQXJjaGl2ZUVudHJ5KGZvdXQsCisJCQkJIG5pbENh dGFsb2dJZCwJLyogY2F0YWxvZyBJRCAqLworCQkJCSBjcmVhdGVEdW1wSWQoKSwJLyogZHVtcCBJ RCAqLworCQkJCSBBUkNISVZFX09QVFMoLnRhZyA9IHRhZywKKwkJCQkJCQkgIC5kZXNjcmlwdGlv biA9IHRhZywKKwkJCQkJCQkgIC5zZWN0aW9uID0gdHlwZSwKKwkJCQkJCQkgIC5jcmVhdGVTdG10 ID0gcXVlcnkpKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19yZXN0b3JlLmMg Yi9zcmMvYmluL3BnX2R1bXAvcGdfcmVzdG9yZS5jCmluZGV4IDg0YjhkNDEwYzllLi4xNjlmYThl ZDMwZCAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX3Jlc3RvcmUuYworKysgYi9zcmMv YmluL3BnX2R1bXAvcGdfcmVzdG9yZS5jCkBAIC0yLDcgKzIsNyBAQAogICoKICAqIHBnX3Jlc3Rv cmUuYwogICoJcGdfcmVzdG9yZSBpcyBhbiB1dGlsaXR5IGV4dHJhY3RpbmcgcG9zdGdyZXMgZGF0 YWJhc2UgZGVmaW5pdGlvbnMKLSAqCWZyb20gYSBiYWNrdXAgYXJjaGl2ZSBjcmVhdGVkIGJ5IHBn X2R1bXAgdXNpbmcgdGhlIGFyY2hpdmVyCisgKglmcm9tIGEgYmFja3VwIGFyY2hpdmUgY3JlYXRl ZCBieSBwZ19kdW1wL3BnX2R1bXBhbGwgdXNpbmcgdGhlIGFyY2hpdmVyCiAgKglpbnRlcmZhY2Uu CiAgKgogICoJcGdfcmVzdG9yZSB3aWxsIHJlYWQgdGhlIGJhY2t1cCBhcmNoaXZlIGFuZApAQCAt NDEsMTIgKzQxLDE2IEBACiAjaW5jbHVkZSAicG9zdGdyZXNfZmUuaCIKIAogI2luY2x1ZGUgPGN0 eXBlLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KICNpZmRlZiBIQVZFX1RFUk1JT1NfSAogI2lu Y2x1ZGUgPHRlcm1pb3MuaD4KICNlbmRpZgogCisjaW5jbHVkZSAiY29tbW9uL3N0cmluZy5oIgor I2luY2x1ZGUgImNvbm5lY3RkYi5oIgogI2luY2x1ZGUgImR1bXB1dGlscy5oIgogI2luY2x1ZGUg ImZlX3V0aWxzL29wdGlvbl91dGlscy5oIgorI2luY2x1ZGUgImZlX3V0aWxzL3N0cmluZ191dGls cy5oIgogI2luY2x1ZGUgImZpbHRlci5oIgogI2luY2x1ZGUgImdldG9wdF9sb25nLmgiCiAjaW5j bHVkZSAicGFyYWxsZWwuaCIKQEAgLTU0LDE4ICs1OCw0NCBAQAogCiBzdGF0aWMgdm9pZCB1c2Fn ZShjb25zdCBjaGFyICpwcm9nbmFtZSk7CiBzdGF0aWMgdm9pZCByZWFkX3Jlc3RvcmVfZmlsdGVy cyhjb25zdCBjaGFyICpmaWxlbmFtZSwgUmVzdG9yZU9wdGlvbnMgKm9wdHMpOworc3RhdGljIGJv b2wgZmlsZV9leGlzdHNfaW5fZGlyZWN0b3J5KGNvbnN0IGNoYXIgKmRpciwgY29uc3QgY2hhciAq ZmlsZW5hbWUpOworc3RhdGljIGludAlyZXN0b3JlX29uZV9kYXRhYmFzZShjb25zdCBjaGFyICpp bnB1dEZpbGVTcGVjLCBSZXN0b3JlT3B0aW9ucyAqb3B0cywKKwkJCQkJCQkJIGludCBudW1Xb3Jr ZXJzLCBib29sIGFwcGVuZF9kYXRhLAorCQkJCQkJCQkgYm9vbCBnbG9iYWxzX29ubHksIGJvb2wg bm9Ub2NDb21tZW50cyk7CitzdGF0aWMgaW50CXJlc3RvcmVfZ2xvYmFsX29iamVjdHMoY29uc3Qg Y2hhciAqaW5wdXRGaWxlU3BlYywKKwkJCQkJCQkJICAgUmVzdG9yZU9wdGlvbnMgKm9wdHMsIGlu dCBudW1Xb3JrZXJzLAorCQkJCQkJCQkgICBib29sIGdsb2JhbHNfb25seSk7CitzdGF0aWMgaW50 CXJlc3RvcmVfYWxsX2RhdGFiYXNlcyhjb25zdCBjaGFyICppbnB1dEZpbGVTcGVjLAorCQkJCQkJ CQkgIFNpbXBsZVN0cmluZ0xpc3QgZGJfZXhjbHVkZV9wYXR0ZXJucywgUmVzdG9yZU9wdGlvbnMg Km9wdHMsIGludCBudW1Xb3JrZXJzKTsKK3N0YXRpYyBpbnQJZ2V0X2RibmFtZXNfbGlzdF90b19y ZXN0b3JlKFBHY29ubiAqY29ubiwKKwkJCQkJCQkJCQlTaW1wbGVQdHJMaXN0ICpkYm5hbWVfb2lk X2xpc3QsCisJCQkJCQkJCQkJU2ltcGxlU3RyaW5nTGlzdCBkYl9leGNsdWRlX3BhdHRlcm5zKTsK K3N0YXRpYyBpbnQJZ2V0X2RibmFtZV9vaWRfbGlzdF9mcm9tX21maWxlKGNvbnN0IGNoYXIgKmR1 bXBkaXJwYXRoLAorCQkJCQkJCQkJCSAgIFNpbXBsZVB0ckxpc3QgKmRibmFtZV9vaWRfbGlzdCk7 CisKK3N0YXRpYyBib29sIGRhdGFfb25seSA9IGZhbHNlOworCisvKgorICogU3RvcmVzIGEgZGF0 YWJhc2UgT0lEIGFuZCB0aGUgY29ycmVzcG9uZGluZyBuYW1lLgorICovCit0eXBlZGVmIHN0cnVj dCBEYk9pZE5hbWUKK3sKKwlPaWQJCQlvaWQ7CisJY2hhcgkJc3RyW0ZMRVhJQkxFX0FSUkFZX01F TUJFUl07IC8qIG51bGwtdGVybWluYXRlZCBzdHJpbmcgaGVyZSAqLworfQkJCURiT2lkTmFtZTsK KwogCiBpbnQKIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogewogCVJlc3RvcmVPcHRpb25z ICpvcHRzOwogCWludAkJCWM7Ci0JaW50CQkJZXhpdF9jb2RlOwogCWludAkJCW51bVdvcmtlcnMg PSAxOwotCUFyY2hpdmUgICAgKkFIOwogCWNoYXIJICAgKmlucHV0RmlsZVNwZWM7Ci0JYm9vbAkJ ZGF0YV9vbmx5ID0gZmFsc2U7CiAJYm9vbAkJc2NoZW1hX29ubHkgPSBmYWxzZTsKKwlpbnQJCQlu X2Vycm9ycyA9IDA7CisJYm9vbAkJZ2xvYmFsc19vbmx5ID0gZmFsc2U7CisJU2ltcGxlU3RyaW5n TGlzdCBkYl9leGNsdWRlX3BhdHRlcm5zID0ge05VTEwsIE5VTEx9OwogCXN0YXRpYyBpbnQJZGlz YWJsZV90cmlnZ2VycyA9IDA7CiAJc3RhdGljIGludAllbmFibGVfcm93X3NlY3VyaXR5ID0gMDsK IAlzdGF0aWMgaW50CWlmX2V4aXN0cyA9IDA7CkBAIC04OSw2ICsxMTksNyBAQCBtYWluKGludCBh cmdjLCBjaGFyICoqYXJndikKIAkJeyJjbGVhbiIsIDAsIE5VTEwsICdjJ30sCiAJCXsiY3JlYXRl IiwgMCwgTlVMTCwgJ0MnfSwKIAkJeyJkYXRhLW9ubHkiLCAwLCBOVUxMLCAnYSd9LAorCQl7Imds b2JhbHMtb25seSIsIDAsIE5VTEwsICdnJ30sCiAJCXsiZGJuYW1lIiwgMSwgTlVMTCwgJ2QnfSwK IAkJeyJleGl0LW9uLWVycm9yIiwgMCwgTlVMTCwgJ2UnfSwKIAkJeyJleGNsdWRlLXNjaGVtYSIs IDEsIE5VTEwsICdOJ30sCkBAIC0xNDIsNiArMTczLDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAq KmFyZ3YpCiAJCXsic3RhdGlzdGljcy1vbmx5Iiwgbm9fYXJndW1lbnQsICZzdGF0aXN0aWNzX29u bHksIDF9LAogCQl7ImZpbHRlciIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCA0fSwKIAkJeyJy ZXN0cmljdC1rZXkiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgNn0sCisJCXsiZXhjbHVkZS1k YXRhYmFzZSIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCA3fSwKIAogCQl7TlVMTCwgMCwgTlVM TCwgMH0KIAl9OwpAQCAtMTcwLDcgKzIwMiw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2 KQogCQl9CiAJfQogCi0Jd2hpbGUgKChjID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJndiwgImFjQ2Q6 ZWY6RjpoOkk6ajpsTDpuOk46T3A6UDpSc1M6dDpUOlU6dndXeDEiLAorCXdoaWxlICgoYyA9IGdl dG9wdF9sb25nKGFyZ2MsIGFyZ3YsICJhY0NkOmVmOkY6Z2g6STpqOmxMOm46TjpPcDpQOlJzUzp0 OlQ6VTp2d1d4MSIsCiAJCQkJCQkJY21kb3B0cywgTlVMTCkpICE9IC0xKQogCXsKIAkJc3dpdGNo IChjKQpAQCAtMTk3LDExICsyMjksMTQgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJ CQkJaWYgKHN0cmxlbihvcHRhcmcpICE9IDApCiAJCQkJCW9wdHMtPmZvcm1hdE5hbWUgPSBwZ19z dHJkdXAob3B0YXJnKTsKIAkJCQlicmVhazsKKwkJCWNhc2UgJ2cnOgorCQkJCS8qIHJlc3RvcmUg b25seSBnbG9iYWwgc3FsIGNvbW1hbmRzLiAqLworCQkJCWdsb2JhbHNfb25seSA9IHRydWU7CisJ CQkJYnJlYWs7CiAJCQljYXNlICdoJzoKIAkJCQlpZiAoc3RybGVuKG9wdGFyZykgIT0gMCkKIAkJ CQkJb3B0cy0+Y3BhcmFtcy5wZ2hvc3QgPSBwZ19zdHJkdXAob3B0YXJnKTsKIAkJCQlicmVhazsK LQogCQkJY2FzZSAnaic6CQkJLyogbnVtYmVyIG9mIHJlc3RvcmUgam9icyAqLwogCQkJCWlmICgh b3B0aW9uX3BhcnNlX2ludChvcHRhcmcsICItai8tLWpvYnMiLCAxLAogCQkJCQkJCQkJICBQR19N QVhfSk9CUywKQEAgLTMyMSw2ICszNTYsMTAgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3Yp CiAJCQkJb3B0cy0+cmVzdHJpY3Rfa2V5ID0gcGdfc3RyZHVwKG9wdGFyZyk7CiAJCQkJYnJlYWs7 CiAKKwkJCWNhc2UgNzoJCQkJLyogZGF0YWJhc2UgcGF0dGVybnMgdG8gc2tpcCAqLworCQkJCXNp bXBsZV9zdHJpbmdfbGlzdF9hcHBlbmQoJmRiX2V4Y2x1ZGVfcGF0dGVybnMsIG9wdGFyZyk7CisJ CQkJYnJlYWs7CisKIAkJCWRlZmF1bHQ6CiAJCQkJLyogZ2V0b3B0X2xvbmcgYWxyZWFkeSBlbWl0 dGVkIGEgY29tcGxhaW50ICovCiAJCQkJcGdfbG9nX2Vycm9yX2hpbnQoIlRyeSBcIiVzIC0taGVs cFwiIGZvciBtb3JlIGluZm9ybWF0aW9uLiIsIHByb2duYW1lKTsKQEAgLTM0Nyw2ICszODYsMTQg QEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJaWYgKCFvcHRzLT5jcGFyYW1zLmRibmFt ZSAmJiAhb3B0cy0+ZmlsZW5hbWUgJiYgIW9wdHMtPnRvY1N1bW1hcnkpCiAJCXBnX2ZhdGFsKCJv bmUgb2YgLWQvLS1kYm5hbWUgYW5kIC1mLy0tZmlsZSBtdXN0IGJlIHNwZWNpZmllZCIpOwogCisJ aWYgKGRiX2V4Y2x1ZGVfcGF0dGVybnMuaGVhZCAhPSBOVUxMICYmIGdsb2JhbHNfb25seSkKKwl7 CisJCXBnX2xvZ19lcnJvcigib3B0aW9uICVzIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIHdpdGgg JXMiLAorCQkJCQkgIi0tZXhjbHVkZS1kYXRhYmFzZSIsICItZy8tLWdsb2JhbHMtb25seSIpOwor CQlwZ19sb2dfZXJyb3JfaGludCgiVHJ5IFwiJXMgLS1oZWxwXCIgZm9yIG1vcmUgaW5mb3JtYXRp b24uIiwgcHJvZ25hbWUpOworCQlleGl0X25pY2VseSgxKTsKKwl9CisKIAkvKiBTaG91bGQgZ2V0 IGF0IG1vc3Qgb25lIG9mIC1kIGFuZCAtZiwgZWxzZSB1c2VyIGlzIGNvbmZ1c2VkICovCiAJaWYg KG9wdHMtPmNwYXJhbXMuZGJuYW1lKQogCXsKQEAgLTQyMCw2ICs0NjcsMTAgQEAgbWFpbihpbnQg YXJnYywgY2hhciAqKmFyZ3YpCiAJCXBnX2ZhdGFsKCJvcHRpb25zICVzIGFuZCAlcyBjYW5ub3Qg YmUgdXNlZCB0b2dldGhlciIsCiAJCQkJICItMS8tLXNpbmdsZS10cmFuc2FjdGlvbiIsICItLXRy YW5zYWN0aW9uLXNpemUiKTsKIAorCWlmIChkYXRhX29ubHkgJiYgZ2xvYmFsc19vbmx5KQorCQlw Z19mYXRhbCgib3B0aW9ucyAlcyBhbmQgJXMgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIiLAorCQkJ CSAiLWEvLS1kYXRhLW9ubHkiLCAiLWcvLS1nbG9iYWxzLW9ubHkiKTsKKwogCS8qCiAJICogLUMg aXMgbm90IGNvbXBhdGlibGUgd2l0aCAtMSwgYmVjYXVzZSB3ZSBjYW4ndCBjcmVhdGUgYSBkYXRh YmFzZSBpbnNpZGUKIAkgKiBhIHRyYW5zYWN0aW9uIGJsb2NrLgpAQCAtNDg1LDYgKzUzNiwxMjkg QEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAJCQkJCSBvcHRzLT5mb3JtYXROYW1lKTsK IAl9CiAKKwkvKgorCSAqIElmIHRvYy5nbG8gZmlsZSBpcyBwcmVzZW50LCB0aGVuIHJlc3RvcmUg YWxsIHRoZSBkYXRhYmFzZXMgZnJvbQorCSAqIG1hcC5kYXQsIGJ1dCBza2lwIHJlc3RvcmluZyB0 aG9zZSBtYXRjaGluZyAtLWV4Y2x1ZGUtZGF0YWJhc2UgcGF0dGVybnMuCisJICovCisJaWYgKGlu cHV0RmlsZVNwZWMgIT0gTlVMTCAmJgorCQkoZmlsZV9leGlzdHNfaW5fZGlyZWN0b3J5KGlucHV0 RmlsZVNwZWMsICJ0b2MuZ2xvIikpKQorCXsKKwkJLyoKKwkJICogQ2FuIG9ubHkgdXNlIC0tbGlz dCBvciAtLXVzZS1saXN0IG9wdGlvbnMgd2l0aCBhIHNpbmdsZSBkYXRhYmFzZQorCQkgKiBkdW1w LgorCQkgKi8KKwkJaWYgKG9wdHMtPnRvY1N1bW1hcnkpCisJCQlwZ19mYXRhbCgib3B0aW9uICVz IGNhbm5vdCBiZSB1c2VkIHdoZW4gcmVzdG9yaW5nIGFuIGFyY2hpdmUgY3JlYXRlZCBieSBwZ19k dW1wYWxsIiwKKwkJCQkJICItbC8tLWxpc3QiKTsKKwkJZWxzZSBpZiAob3B0cy0+dG9jRmlsZSkK KwkJCXBnX2ZhdGFsKCJvcHRpb24gJXMgY2Fubm90IGJlIHVzZWQgd2hlbiByZXN0b3JpbmcgYW4g YXJjaGl2ZSBjcmVhdGVkIGJ5IHBnX2R1bXBhbGwiLAorCQkJCQkgIi1MLy0tdXNlLWxpc3QiKTsK KworCQkvKgorCQkgKiBUbyByZXN0b3JlIGZyb20gYSBwZ19kdW1wYWxsIGFyY2hpdmUsIC1DIChj cmVhdGUgZGF0YWJhc2UpIG9wdGlvbgorCQkgKiBtdXN0IGJlIHNwZWNpZmllZCB1bmxlc3Mgd2Ug YXJlIG9ubHkgcmVzdG9yaW5nIGdsb2JhbHMuCisJCSAqLworCQlpZiAoIWdsb2JhbHNfb25seSAm JiBvcHRzLT5jcmVhdGVEQiAhPSAxKQorCQl7CisJCQlwZ19sb2dfZXJyb3IoIm9wdGlvbiAlcyBt dXN0IGJlIHNwZWNpZmllZCB3aGVuIHJlc3RvcmluZyBhbiBhcmNoaXZlIGNyZWF0ZWQgYnkgcGdf ZHVtcGFsbCIsCisJCQkJCQkgIi1DLy0tY3JlYXRlIik7CisJCQlwZ19sb2dfZXJyb3JfaGludCgi VHJ5IFwiJXMgLS1oZWxwXCIgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiwgcHJvZ25hbWUpOworCQkJ cGdfbG9nX2Vycm9yX2hpbnQoIkluZGl2aWR1YWwgZGF0YWJhc2VzIGNhbiBiZSByZXN0b3JlZCB1 c2luZyB0aGVpciBzcGVjaWZpYyBhcmNoaXZlcy4iKTsKKwkJCWV4aXRfbmljZWx5KDEpOworCQl9 CisKKwkJLyogSWYgZ2xvYmFscy1vbmx5LCB0aGVuIHJldHVybiBmcm9tIGhlcmUuICovCisJCWlm IChnbG9iYWxzX29ubHkpCisJCXsKKwkJCWNoYXIJCWdsb2JhbF9wYXRoW01BWFBHUEFUSF07CisK KwkJCS8qIFNldCBwYXRoIGZvciB0b2MuZ2xvIGZpbGUuICovCisJCQlzbnByaW50ZihnbG9iYWxf cGF0aCwgTUFYUEdQQVRILCAiJXMvdG9jLmdsbyIsIGlucHV0RmlsZVNwZWMpOworCQkJbl9lcnJv cnMgPSByZXN0b3JlX2dsb2JhbF9vYmplY3RzKGdsb2JhbF9wYXRoLCBvcHRzLCBudW1Xb3JrZXJz LCBnbG9iYWxzX29ubHkpOworCisJCQlwZ19sb2dfaW5mbygiZGF0YWJhc2UgcmVzdG9yaW5nIHNr aXBwZWQgYmVjYXVzZSBvcHRpb24gJXMgd2FzIHNwZWNpZmllZCIsCisJCQkJCQkiLWcvLS1nbG9i YWxzLW9ubHkiKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCS8qIE5vdyByZXN0b3JlIGFsbCB0aGUg ZGF0YWJhc2VzIGZyb20gbWFwLmRhdCAqLworCQkJbl9lcnJvcnMgPSByZXN0b3JlX2FsbF9kYXRh YmFzZXMoaW5wdXRGaWxlU3BlYywgZGJfZXhjbHVkZV9wYXR0ZXJucywKKwkJCQkJCQkJCQkJIG9w dHMsIG51bVdvcmtlcnMpOworCQl9CisKKwkJLyogRnJlZSBkYiBwYXR0ZXJuIGxpc3QuICovCisJ CXNpbXBsZV9zdHJpbmdfbGlzdF9kZXN0cm95KCZkYl9leGNsdWRlX3BhdHRlcm5zKTsKKwl9CisJ ZWxzZQorCXsKKwkJaWYgKGRiX2V4Y2x1ZGVfcGF0dGVybnMuaGVhZCAhPSBOVUxMKQorCQl7CisJ CQlzaW1wbGVfc3RyaW5nX2xpc3RfZGVzdHJveSgmZGJfZXhjbHVkZV9wYXR0ZXJucyk7CisJCQlw Z19mYXRhbCgib3B0aW9uICVzIGNhbiBiZSB1c2VkIG9ubHkgd2hlbiByZXN0b3JpbmcgYW4gYXJj aGl2ZSBjcmVhdGVkIGJ5IHBnX2R1bXBhbGwiLAorCQkJCQkgIi0tZXhjbHVkZS1kYXRhYmFzZSIp OworCQl9CisKKwkJaWYgKGdsb2JhbHNfb25seSkKKwkJCXBnX2ZhdGFsKCJvcHRpb24gJXMgY2Fu IGJlIHVzZWQgb25seSB3aGVuIHJlc3RvcmluZyBhbiBhcmNoaXZlIGNyZWF0ZWQgYnkgcGdfZHVt cGFsbCIsCisJCQkJCSAiLWcvLS1nbG9iYWxzLW9ubHkiKTsKKworCQkvKiBQcm9jZXNzIGlmIHRv Yy5nbG8gZmlsZSBkb2VzIG5vdCBleGlzdC4gKi8KKwkJbl9lcnJvcnMgPSByZXN0b3JlX29uZV9k YXRhYmFzZShpbnB1dEZpbGVTcGVjLCBvcHRzLAorCQkJCQkJCQkJCW51bVdvcmtlcnMsIGZhbHNl LCBnbG9iYWxzX29ubHksIGZhbHNlKTsKKwl9CisKKwkvKiBEb25lLCBwcmludCBhIHN1bW1hcnkg b2YgaWdub3JlZCBlcnJvcnMgZHVyaW5nIHJlc3RvcmUuICovCisJaWYgKG5fZXJyb3JzKQorCXsK KwkJcGdfbG9nX3dhcm5pbmcoImVycm9ycyBpZ25vcmVkIG9uIHJlc3RvcmU6ICVkIiwgbl9lcnJv cnMpOworCQlyZXR1cm4gMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIHJlc3RvcmVf Z2xvYmFsX29iamVjdHMKKyAqCisgKiBUaGlzIHJlc3RvcmUgYWxsIGdsb2JhbCBvYmplY3RzLgor ICoKKyAqIElmIGdsb2JhbHNfb25seSBpcyBzZXQsIHRoZW4gc2tpcCBEUk9QIERBVEFCQVNFIGNv bW1hbmRzIGZyb20gcmVzdG9yZS4KKyAqLworc3RhdGljIGludAorcmVzdG9yZV9nbG9iYWxfb2Jq ZWN0cyhjb25zdCBjaGFyICppbnB1dEZpbGVTcGVjLCBSZXN0b3JlT3B0aW9ucyAqb3B0cywKKwkJ CQkJICAgaW50IG51bVdvcmtlcnMsIGJvb2wgZ2xvYmFsc19vbmx5KQoreworCWludAkJCW5lcnJv ciA9IDA7CisJaW50CQkJZm9ybWF0ID0gb3B0cy0+Zm9ybWF0OworCisJLyogU2V0IGZvcm1hdCBh cyBjdXN0b20gc28gdGhhdCB0b2MuZ2xvIGZpbGUgY2FuIGJlIHJlYWQuICovCisJb3B0cy0+Zm9y bWF0ID0gYXJjaEN1c3RvbTsKKworCWlmICghZGF0YV9vbmx5KQorCQluZXJyb3IgPSByZXN0b3Jl X29uZV9kYXRhYmFzZShpbnB1dEZpbGVTcGVjLCBvcHRzLCBudW1Xb3JrZXJzLAorCQkJCQkJCQkJ ICBmYWxzZSwgZ2xvYmFsc19vbmx5LCB0cnVlKTsKKworCS8qIFJlc2V0IGZvcm1hdCB2YWx1ZS4g Ki8KKwlvcHRzLT5mb3JtYXQgPSBmb3JtYXQ7CisKKwlyZXR1cm4gbmVycm9yOworfQorCisvKgor ICogcmVzdG9yZV9vbmVfZGF0YWJhc2UKKyAqCisgKiBUaGlzIHdpbGwgcmVzdG9yZSBvbmUgZGF0 YWJhc2UgdXNpbmcgdG9jLmRhdCBmaWxlLgorICoKKyAqIHJldHVybnMgdGhlIG51bWJlciBvZiBl cnJvcnMgd2hpbGUgZG9pbmcgcmVzdG9yZS4KKyAqLworc3RhdGljIGludAorcmVzdG9yZV9vbmVf ZGF0YWJhc2UoY29uc3QgY2hhciAqaW5wdXRGaWxlU3BlYywgUmVzdG9yZU9wdGlvbnMgKm9wdHMs CisJCQkJCSBpbnQgbnVtV29ya2VycywgYm9vbCBhcHBlbmRfZGF0YSwgYm9vbCBnbG9iYWxzX29u bHksCisJCQkJCSBib29sIG5vVG9jQ29tbWVudHMpCit7CisJQXJjaGl2ZSAgICAqQUg7CisJaW50 CQkJbl9lcnJvcnM7CisKIAlBSCA9IE9wZW5BcmNoaXZlKGlucHV0RmlsZVNwZWMsIG9wdHMtPmZv cm1hdCk7CiAKIAlTZXRBcmNoaXZlT3B0aW9ucyhBSCwgTlVMTCwgb3B0cyk7CkBAIC00OTIsMTMg KzY2NiwyNiBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkvKgogCSAqIFdlIGRvbid0 IGhhdmUgYSBjb25uZWN0aW9uIHlldCBidXQgdGhhdCBkb2Vzbid0IG1hdHRlci4gVGhlIGNvbm5l Y3Rpb24KIAkgKiBpcyBpbml0aWFsaXplZCB0byBOVUxMIGFuZCBpZiB3ZSB0ZXJtaW5hdGUgdGhy b3VnaCBleGl0X25pY2VseSgpIHdoaWxlCi0JICogaXQncyBzdGlsbCBOVUxMLCB0aGUgY2xlYW51 cCBmdW5jdGlvbiB3aWxsIGp1c3QgYmUgYSBuby1vcC4KKwkgKiBpdCdzIHN0aWxsIE5VTEwsIHRo ZSBjbGVhbnVwIGZ1bmN0aW9uIHdpbGwganVzdCBiZSBhIG5vLW9wLiBJZiB3ZSBhcmUKKwkgKiBy ZXN0b3JpbmcgbXVsdGlwbGUgZGF0YWJhc2VzLCB0aGVuIG9ubHkgdXBkYXRlIEFYIGhhbmRsZSBm b3IgY2xlYW51cCBhcworCSAqIHRoZSBwcmV2aW91cyBlbnRyeSB3YXMgYWxyZWFkeSBpbiB0aGUg YXJyYXkgYW5kIHdlIGhhZCBjbG9zZWQgcHJldmlvdXMKKwkgKiBjb25uZWN0aW9uLCBzbyB3ZSBj YW4gdXNlIHRoZSBzYW1lIGFycmF5IHNsb3QuCiAJICovCi0Jb25fZXhpdF9jbG9zZV9hcmNoaXZl KEFIKTsKKwlpZiAoIWFwcGVuZF9kYXRhKQorCQlvbl9leGl0X2Nsb3NlX2FyY2hpdmUoQUgpOwor CWVsc2UKKwkJcmVwbGFjZV9vbl9leGl0X2Nsb3NlX2FyY2hpdmUoQUgpOwogCiAJLyogTGV0IHRo ZSBhcmNoaXZlciBrbm93IGhvdyBub2lzeSB0byBiZSAqLwogCUFILT52ZXJib3NlID0gb3B0cy0+ dmVyYm9zZTsKIAorCS8qCisJICogSWYgd2UncmUgdGFsa2luZyB0byB0aGUgREIgZGlyZWN0bHks IGRvbid0IHNlbmQgY29tbWVudHMgc2luY2UgdGhleQorCSAqIG9ic2N1cmUgU1FMIHdoZW4gZGlz cGxheWluZyBlcnJvcnMKKwkgKi8KKwlpZiAobm9Ub2NDb21tZW50cykKKwkJKChBcmNoaXZlSGFu ZGxlICopQUgpLT5ub1RvY0NvbW1lbnRzID0gMTsKKwogCS8qCiAJICogV2hldGhlciB0byBrZWVw IHN1Ym1pdHRpbmcgc3FsIGNvbW1hbmRzIGFzICJwZ19yZXN0b3JlIC4uLiB8IHBzcWwgLi4uICIK IAkgKi8KQEAgLTUxNCwyNSArNzAxLDIxIEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQog CWVsc2UKIAl7CiAJCVByb2Nlc3NBcmNoaXZlUmVzdG9yZU9wdGlvbnMoQUgpOwotCQlSZXN0b3Jl QXJjaGl2ZShBSCk7CisJCVJlc3RvcmVBcmNoaXZlKEFILCBhcHBlbmRfZGF0YSwgZ2xvYmFsc19v bmx5KTsKIAl9CiAKLQkvKiBkb25lLCBwcmludCBhIHN1bW1hcnkgb2YgaWdub3JlZCBlcnJvcnMg Ki8KLQlpZiAoQUgtPm5fZXJyb3JzKQotCQlwZ19sb2dfd2FybmluZygiZXJyb3JzIGlnbm9yZWQg b24gcmVzdG9yZTogJWQiLCBBSC0+bl9lcnJvcnMpOworCW5fZXJyb3JzID0gQUgtPm5fZXJyb3Jz OwogCiAJLyogQUggbWF5IGJlIGZyZWVkIGluIENsb3NlQXJjaGl2ZT8gKi8KLQlleGl0X2NvZGUg PSBBSC0+bl9lcnJvcnMgPyAxIDogMDsKLQogCUNsb3NlQXJjaGl2ZShBSCk7CiAKLQlyZXR1cm4g ZXhpdF9jb2RlOworCXJldHVybiBuX2Vycm9yczsKIH0KIAogc3RhdGljIHZvaWQKIHVzYWdlKGNv bnN0IGNoYXIgKnByb2duYW1lKQogewotCXByaW50ZihfKCIlcyByZXN0b3JlcyBhIFBvc3RncmVT UUwgZGF0YWJhc2UgZnJvbSBhbiBhcmNoaXZlIGNyZWF0ZWQgYnkgcGdfZHVtcC5cblxuIiksIHBy b2duYW1lKTsKKwlwcmludGYoXygiJXMgcmVzdG9yZXMgUG9zdGdyZVNRTCBkYXRhYmFzZXMgZnJv bSBhcmNoaXZlcyBjcmVhdGVkIGJ5IHBnX2R1bXAgb3IgcGdfZHVtcGFsbC5cblxuIiksIHByb2du YW1lKTsKIAlwcmludGYoXygiVXNhZ2U6XG4iKSk7CiAJcHJpbnRmKF8oIiAgJXMgW09QVElPTl0u Li4gW0ZJTEVdXG4iKSwgcHJvZ25hbWUpOwogCkBAIC01NTAsNiArNzMzLDcgQEAgdXNhZ2UoY29u c3QgY2hhciAqcHJvZ25hbWUpCiAJcHJpbnRmKF8oIiAgLWMsIC0tY2xlYW4gICAgICAgICAgICAg ICAgICBjbGVhbiAoZHJvcCkgZGF0YWJhc2Ugb2JqZWN0cyBiZWZvcmUgcmVjcmVhdGluZ1xuIikp OwogCXByaW50ZihfKCIgIC1DLCAtLWNyZWF0ZSAgICAgICAgICAgICAgICAgY3JlYXRlIHRoZSB0 YXJnZXQgZGF0YWJhc2VcbiIpKTsKIAlwcmludGYoXygiICAtZSwgLS1leGl0LW9uLWVycm9yICAg ICAgICAgIGV4aXQgb24gZXJyb3IsIGRlZmF1bHQgaXMgdG8gY29udGludWVcbiIpKTsKKwlwcmlu dGYoXygiICAtZywgLS1nbG9iYWxzLW9ubHkgICAgICAgICAgIHJlc3RvcmUgb25seSBnbG9iYWwg b2JqZWN0cywgbm8gZGF0YWJhc2VzXG4iKSk7CiAJcHJpbnRmKF8oIiAgLUksIC0taW5kZXg9TkFN RSAgICAgICAgICAgICByZXN0b3JlIG5hbWVkIGluZGV4XG4iKSk7CiAJcHJpbnRmKF8oIiAgLWos IC0tam9icz1OVU0gICAgICAgICAgICAgICB1c2UgdGhpcyBtYW55IHBhcmFsbGVsIGpvYnMgdG8g cmVzdG9yZVxuIikpOwogCXByaW50ZihfKCIgIC1MLCAtLXVzZS1saXN0PUZJTEVOQU1FICAgICAg dXNlIHRhYmxlIG9mIGNvbnRlbnRzIGZyb20gdGhpcyBmaWxlIGZvclxuIgpAQCAtNTY2LDYgKzc1 MCw3IEBAIHVzYWdlKGNvbnN0IGNoYXIgKnByb2duYW1lKQogCXByaW50ZihfKCIgIC0xLCAtLXNp bmdsZS10cmFuc2FjdGlvbiAgICAgcmVzdG9yZSBhcyBhIHNpbmdsZSB0cmFuc2FjdGlvblxuIikp OwogCXByaW50ZihfKCIgIC0tZGlzYWJsZS10cmlnZ2VycyAgICAgICAgICAgZGlzYWJsZSB0cmln Z2VycyBkdXJpbmcgZGF0YS1vbmx5IHJlc3RvcmVcbiIpKTsKIAlwcmludGYoXygiICAtLWVuYWJs ZS1yb3ctc2VjdXJpdHkgICAgICAgIGVuYWJsZSByb3cgc2VjdXJpdHlcbiIpKTsKKwlwcmludGYo XygiICAtLWV4Y2x1ZGUtZGF0YWJhc2U9UEFUVEVSTiAgIGRvIG5vdCByZXN0b3JlIHRoZSBzcGVj aWZpZWQgZGF0YWJhc2UocylcbiIpKTsKIAlwcmludGYoXygiICAtLWZpbHRlcj1GSUxFTkFNRSAg ICAgICAgICAgIHJlc3RvcmUgb3Igc2tpcCBvYmplY3RzIGJhc2VkIG9uIGV4cHJlc3Npb25zXG4i CiAJCQkgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBGSUxFTkFNRVxuIikpOwog CXByaW50ZihfKCIgIC0taWYtZXhpc3RzICAgICAgICAgICAgICAgICAgdXNlIElGIEVYSVNUUyB3 aGVuIGRyb3BwaW5nIG9iamVjdHNcbiIpKTsKQEAgLTYwMSw4ICs3ODYsOCBAQCB1c2FnZShjb25z dCBjaGFyICpwcm9nbmFtZSkKIAlwcmludGYoXygiICAtLXJvbGU9Uk9MRU5BTUUgICAgICAgICAg ZG8gU0VUIFJPTEUgYmVmb3JlIHJlc3RvcmVcbiIpKTsKIAogCXByaW50ZihfKCJcbiIKLQkJCSAi VGhlIG9wdGlvbnMgLUksIC1uLCAtTiwgLVAsIC10LCAtVCwgYW5kIC0tc2VjdGlvbiBjYW4gYmUg Y29tYmluZWQgYW5kIHNwZWNpZmllZFxuIgotCQkJICJtdWx0aXBsZSB0aW1lcyB0byBzZWxlY3Qg bXVsdGlwbGUgb2JqZWN0cy5cbiIpKTsKKwkJCSAiVGhlIG9wdGlvbnMgLUksIC1uLCAtTiwgLVAs IC10LCAtVCwgLS1zZWN0aW9uLCBhbmQgLS1leGNsdWRlLWRhdGFiYXNlIGNhbiBiZVxuIgorCQkJ ICJjb21iaW5lZCBhbmQgc3BlY2lmaWVkIG11bHRpcGxlIHRpbWVzIHRvIHNlbGVjdCBtdWx0aXBs ZSBvYmplY3RzLlxuIikpOwogCXByaW50ZihfKCJcbklmIG5vIGlucHV0IGZpbGUgbmFtZSBpcyBz dXBwbGllZCwgdGhlbiBzdGFuZGFyZCBpbnB1dCBpcyB1c2VkLlxuXG4iKSk7CiAJcHJpbnRmKF8o IlJlcG9ydCBidWdzIHRvIDwlcz4uXG4iKSwgUEFDS0FHRV9CVUdSRVBPUlQpOwogCXByaW50Zihf KCIlcyBob21lIHBhZ2U6IDwlcz5cbiIpLCBQQUNLQUdFX05BTUUsIFBBQ0tBR0VfVVJMKTsKQEAg LTcwNywzICs4OTIsNDA3IEBAIHJlYWRfcmVzdG9yZV9maWx0ZXJzKGNvbnN0IGNoYXIgKmZpbGVu YW1lLCBSZXN0b3JlT3B0aW9ucyAqb3B0cykKIAogCWZpbHRlcl9mcmVlKCZmc3RhdGUpOwogfQor CisvKgorICogZmlsZV9leGlzdHNfaW5fZGlyZWN0b3J5CisgKgorICogUmV0dXJucyB0cnVlIGlm IHRoZSBmaWxlIGV4aXN0cyBpbiB0aGUgZ2l2ZW4gZGlyZWN0b3J5LgorICovCitzdGF0aWMgYm9v bAorZmlsZV9leGlzdHNfaW5fZGlyZWN0b3J5KGNvbnN0IGNoYXIgKmRpciwgY29uc3QgY2hhciAq ZmlsZW5hbWUpCit7CisJc3RydWN0IHN0YXQgc3Q7CisJY2hhcgkJYnVmW01BWFBHUEFUSF07CisK KwlpZiAoc25wcmludGYoYnVmLCBNQVhQR1BBVEgsICIlcy8lcyIsIGRpciwgZmlsZW5hbWUpID49 IE1BWFBHUEFUSCkKKwkJcGdfZmF0YWwoImRpcmVjdG9yeSBuYW1lIHRvbyBsb25nOiBcIiVzXCIi LCBkaXIpOworCisJcmV0dXJuIChzdGF0KGJ1ZiwgJnN0KSA9PSAwICYmIFNfSVNSRUcoc3Quc3Rf bW9kZSkpOworfQorCisvKgorICogZ2V0X2RibmFtZXNfbGlzdF90b19yZXN0b3JlCisgKgorICog VGhpcyB3aWxsIG1hcmsgZm9yIHNraXBwaW5nIGFueSBlbnRyaWVzIGZyb20gZGJuYW1lX29pZF9s aXN0IHRoYXQgcGF0dGVybiBtYXRjaCBhbgorICogZW50cnkgaW4gdGhlIGRiX2V4Y2x1ZGVfcGF0 dGVybnMgbGlzdC4KKyAqCisgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZGF0YWJhc2UgdG8gYmUg cmVzdG9yZWQuCisgKgorICovCitzdGF0aWMgaW50CitnZXRfZGJuYW1lc19saXN0X3RvX3Jlc3Rv cmUoUEdjb25uICpjb25uLAorCQkJCQkJCVNpbXBsZVB0ckxpc3QgKmRibmFtZV9vaWRfbGlzdCwK KwkJCQkJCQlTaW1wbGVTdHJpbmdMaXN0IGRiX2V4Y2x1ZGVfcGF0dGVybnMpCit7CisJaW50CQkJ Y291bnRfZGIgPSAwOworCVBRRXhwQnVmZmVyIHF1ZXJ5OworCVBHcmVzdWx0ICAgKnJlczsKKwor CXF1ZXJ5ID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsKKworCWlmICghY29ubiAmJiBkYl9leGNsdWRl X3BhdHRlcm5zLmhlYWQgIT0gTlVMTCkKKwkJcGdfbG9nX2luZm8oImNvbnNpZGVyaW5nIFBBVFRF Uk4gYXMgTkFNRSBmb3IgLS1leGNsdWRlLWRhdGFiYXNlIG9wdGlvbiBhcyBubyBkYXRhYmFzZSBj b25uZWN0aW9uIHdoaWxlIGRvaW5nIHBnX3Jlc3RvcmUiKTsKKworCS8qCisJICogUHJvY2VzcyBv bmUgYnkgb25lIGFsbCBkYm5hbWVzIGFuZCBpZiBzcGVjaWZpZWQgdG8gc2tpcCByZXN0b3Jpbmcs IHRoZW4KKwkgKiByZW1vdmUgZGJuYW1lIGZyb20gbGlzdC4KKwkgKi8KKwlmb3IgKFNpbXBsZVB0 ckxpc3RDZWxsICpkYl9jZWxsID0gZGJuYW1lX29pZF9saXN0LT5oZWFkOworCQkgZGJfY2VsbDsg ZGJfY2VsbCA9IGRiX2NlbGwtPm5leHQpCisJeworCQlEYk9pZE5hbWUgICpkYmlkbmFtZSA9IChE Yk9pZE5hbWUgKikgZGJfY2VsbC0+cHRyOworCQlib29sCQlza2lwX2RiX3Jlc3RvcmUgPSBmYWxz ZTsKKwkJUFFFeHBCdWZmZXIgZGJfbGl0ID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsKKworCQlhcHBl bmRTdHJpbmdMaXRlcmFsQ29ubihkYl9saXQsIGRiaWRuYW1lLT5zdHIsIGNvbm4pOworCisJCWZv ciAoU2ltcGxlU3RyaW5nTGlzdENlbGwgKnBhdF9jZWxsID0gZGJfZXhjbHVkZV9wYXR0ZXJucy5o ZWFkOyBwYXRfY2VsbDsgcGF0X2NlbGwgPSBwYXRfY2VsbC0+bmV4dCkKKwkJeworCQkJLyoKKwkJ CSAqIElmIHRoZXJlIGlzIGFuIGV4YWN0IG1hdGNoIHRoZW4gd2UgZG9uJ3QgbmVlZCB0byB0cnkg YSBwYXR0ZXJuCisJCQkgKiBtYXRjaAorCQkJICovCisJCQlpZiAocGdfc3RyY2FzZWNtcChkYmlk bmFtZS0+c3RyLCBwYXRfY2VsbC0+dmFsKSA9PSAwKQorCQkJCXNraXBfZGJfcmVzdG9yZSA9IHRy dWU7CisJCQkvKiBPdGhlcndpc2UsIHRyeSBhIHBhdHRlcm4gbWF0Y2ggaWYgdGhlcmUgaXMgYSBj b25uZWN0aW9uICovCisJCQllbHNlIGlmIChjb25uKQorCQkJeworCQkJCWludAkJCWRvdGNudDsK KworCQkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHF1ZXJ5LCAiU0VMRUNUIDEgIik7CisJCQkJcHJv Y2Vzc1NRTE5hbWVQYXR0ZXJuKGNvbm4sIHF1ZXJ5LCBwYXRfY2VsbC0+dmFsLCBmYWxzZSwKKwkJ CQkJCQkJCSAgZmFsc2UsIE5VTEwsIGRiX2xpdC0+ZGF0YSwKKwkJCQkJCQkJCSAgTlVMTCwgTlVM TCwgTlVMTCwgJmRvdGNudCk7CisKKwkJCQlpZiAoZG90Y250ID4gMCkKKwkJCQl7CisJCQkJCXBn X2xvZ19lcnJvcigiaW1wcm9wZXIgcXVhbGlmaWVkIG5hbWUgKHRvbyBtYW55IGRvdHRlZCBuYW1l cyk6ICVzIiwKKwkJCQkJCQkJIGRiaWRuYW1lLT5zdHIpOworCQkJCQlQUWZpbmlzaChjb25uKTsK KwkJCQkJZXhpdF9uaWNlbHkoMSk7CisJCQkJfQorCisJCQkJcmVzID0gZXhlY3V0ZVF1ZXJ5KGNv bm4sIHF1ZXJ5LT5kYXRhLCBmYWxzZSk7CisKKwkJCQlpZiAoKFBRcmVzdWx0U3RhdHVzKHJlcykg PT0gUEdSRVNfVFVQTEVTX09LKSAmJiBQUW50dXBsZXMocmVzKSkKKwkJCQl7CisJCQkJCXNraXBf ZGJfcmVzdG9yZSA9IHRydWU7CisJCQkJCXBnX2xvZ19pbmZvKCJkYXRhYmFzZSBuYW1lIFwiJXNc IiBtYXRjaGVzIGV4Y2x1ZGUgcGF0dGVybiBcIiVzXCIiLCBkYmlkbmFtZS0+c3RyLCBwYXRfY2Vs bC0+dmFsKTsKKwkJCQl9CisKKwkJCQlQUWNsZWFyKHJlcyk7CisJCQkJcmVzZXRQUUV4cEJ1ZmZl cihxdWVyeSk7CisJCQl9CisKKwkJCWlmIChza2lwX2RiX3Jlc3RvcmUpCisJCQkJYnJlYWs7CisJ CX0KKworCQlkZXN0cm95UFFFeHBCdWZmZXIoZGJfbGl0KTsKKworCQkvKgorCQkgKiBNYXJrIGRi IHRvIGJlIHNraXBwZWQgb3IgaW5jcmVtZW50IHRoZSBjb3VudGVyIG9mIGRicyB0byBiZQorCQkg KiByZXN0b3JlZAorCQkgKi8KKwkJaWYgKHNraXBfZGJfcmVzdG9yZSkKKwkJeworCQkJcGdfbG9n X2luZm8oImV4Y2x1ZGluZyBkYXRhYmFzZSBcIiVzXCIiLCBkYmlkbmFtZS0+c3RyKTsKKwkJCWRi aWRuYW1lLT5vaWQgPSBJbnZhbGlkT2lkOworCQl9CisJCWVsc2UKKwkJeworCQkJY291bnRfZGIr KzsKKwkJfQorCX0KKworCWRlc3Ryb3lQUUV4cEJ1ZmZlcihxdWVyeSk7CisKKwlyZXR1cm4gY291 bnRfZGI7Cit9CisKKy8qCisgKiBnZXRfZGJuYW1lX29pZF9saXN0X2Zyb21fbWZpbGUKKyAqCisg KiBPcGVuIG1hcC5kYXQgZmlsZSBhbmQgcmVhZCBsaW5lIGJ5IGxpbmUgYW5kIHRoZW4gcHJlcGFy ZSBhIGxpc3Qgb2YgZGF0YWJhc2UKKyAqIG5hbWVzIGFuZCBjb3JyZXNwb25kaW5nIGRiX29pZC4K KyAqCisgKiBSZXR1cm5zLCB0b3RhbCBudW1iZXIgb2YgZGF0YWJhc2UgbmFtZXMgaW4gbWFwLmRh dCBmaWxlLgorICovCitzdGF0aWMgaW50CitnZXRfZGJuYW1lX29pZF9saXN0X2Zyb21fbWZpbGUo Y29uc3QgY2hhciAqZHVtcGRpcnBhdGgsIFNpbXBsZVB0ckxpc3QgKmRibmFtZV9vaWRfbGlzdCkK K3sKKwlTdHJpbmdJbmZvRGF0YSBsaW5lYnVmOworCUZJTEUJICAgKnBmaWxlOworCWNoYXIJCW1h cF9maWxlX3BhdGhbTUFYUEdQQVRIXTsKKwlpbnQJCQljb3VudCA9IDA7CisKKworCS8qCisJICog SWYgdGhlcmUgaXMgbm8gbWFwLmRhdCBmaWxlIGluIGR1bXAsIHRoZW4gcmV0dXJuIGZyb20gaGVy ZSBhcyB0aGVyZSBpcworCSAqIG5vIGRhdGFiYXNlIHRvIHJlc3RvcmUuCisJICovCisJaWYgKCFm aWxlX2V4aXN0c19pbl9kaXJlY3RvcnkoZHVtcGRpcnBhdGgsICJtYXAuZGF0IikpCisJeworCQlw Z19sb2dfaW5mbygiZGF0YWJhc2UgcmVzdG9yaW5nIGlzIHNraXBwZWQgYmVjYXVzZSBmaWxlIFwi JXNcIiBkb2VzIG5vdCBleGlzdCBpbiBkaXJlY3RvcnkgXCIlc1wiIiwgIm1hcC5kYXQiLCBkdW1w ZGlycGF0aCk7CisJCXJldHVybiAwOworCX0KKworCXNucHJpbnRmKG1hcF9maWxlX3BhdGgsIE1B WFBHUEFUSCwgIiVzL21hcC5kYXQiLCBkdW1wZGlycGF0aCk7CisKKwkvKiBPcGVuIG1hcC5kYXQg ZmlsZS4gKi8KKwlwZmlsZSA9IGZvcGVuKG1hcF9maWxlX3BhdGgsIFBHX0JJTkFSWV9SKTsKKwor CWlmIChwZmlsZSA9PSBOVUxMKQorCQlwZ19mYXRhbCgiY291bGQgbm90IG9wZW4gZmlsZSBcIiVz XCI6ICVtIiwgbWFwX2ZpbGVfcGF0aCk7CisKKwlpbml0U3RyaW5nSW5mbygmbGluZWJ1Zik7CisK KwkvKiBBcHBlbmQgYWxsIHRoZSBkYm5hbWUvZGJfb2lkIGNvbWJpbmF0aW9ucyB0byB0aGUgbGlz dC4gKi8KKwl3aGlsZSAocGdfZ2V0X2xpbmVfYnVmKHBmaWxlLCAmbGluZWJ1ZikpCisJeworCQlP aWQJCQlkYl9vaWQgPSBJbnZhbGlkT2lkOworCQljaGFyCSAgICpkYm5hbWU7CisJCURiT2lkTmFt ZSAgKmRiaWRuYW1lOworCQlpbnQJCQluYW1lbGVuOworCQljaGFyCSAgICpwID0gbGluZWJ1Zi5k YXRhOworCisJCS8qIEV4dHJhY3QgZGJvaWQuICovCisJCXdoaWxlIChpc2RpZ2l0KCh1bnNpZ25l ZCBjaGFyKSAqcCkpCisJCQlwKys7CisJCWlmIChwID4gbGluZWJ1Zi5kYXRhICYmICpwID09ICcg JykKKwkJeworCQkJc3NjYW5mKGxpbmVidWYuZGF0YSwgIiV1IiwgJmRiX29pZCk7CisJCQlwKys7 CisJCX0KKworCQkvKiBkYm5hbWUgaXMgdGhlIHJlc3Qgb2YgdGhlIGxpbmUgKi8KKwkJZGJuYW1l ID0gcDsKKwkJbmFtZWxlbiA9IHN0cmxlbihkYm5hbWUpOworCisJCS8qIFJlcG9ydCBlcnJvciBh bmQgZXhpdCBpZiB0aGUgZmlsZSBoYXMgYW55IGNvcnJ1cHRlZCBkYXRhLiAqLworCQlpZiAoIU9p ZElzVmFsaWQoZGJfb2lkKSB8fCBuYW1lbGVuIDw9IDEpCisJCQlwZ19mYXRhbCgiaW52YWxpZCBl bnRyeSBpbiBmaWxlIFwiJXNcIiBvbiBsaW5lICVkIiwgbWFwX2ZpbGVfcGF0aCwKKwkJCQkJIGNv dW50ICsgMSk7CisKKwkJcGdfbG9nX2luZm8oImZvdW5kIGRhdGFiYXNlIFwiJXNcIiAoT0lEOiAl dSkgaW4gZmlsZSBcIiVzXCIiLAorCQkJCQlkYm5hbWUsIGRiX29pZCwgbWFwX2ZpbGVfcGF0aCk7 CisKKwkJZGJpZG5hbWUgPSBwZ19tYWxsb2Mob2Zmc2V0b2YoRGJPaWROYW1lLCBzdHIpICsgbmFt ZWxlbiArIDEpOworCQlkYmlkbmFtZS0+b2lkID0gZGJfb2lkOworCQlzdHJsY3B5KGRiaWRuYW1l LT5zdHIsIGRibmFtZSwgbmFtZWxlbik7CisKKwkJc2ltcGxlX3B0cl9saXN0X2FwcGVuZChkYm5h bWVfb2lkX2xpc3QsIGRiaWRuYW1lKTsKKwkJY291bnQrKzsKKwl9CisKKwkvKiBDbG9zZSBtYXAu ZGF0IGZpbGUuICovCisJZmNsb3NlKHBmaWxlKTsKKworCXJldHVybiBjb3VudDsKK30KKworLyoK KyAqIHJlc3RvcmVfYWxsX2RhdGFiYXNlcworICoKKyAqIFRoaXMgd2lsbCByZXN0b3JlIGRhdGFi YXNlcyB0aG9zZSBkdW1wcyBhcmUgcHJlc2VudCBpbgorICogZGlyZWN0b3J5IGJhc2VkIG9uIG1h cC5kYXQgZmlsZSBtYXBwaW5nLgorICoKKyAqIFRoaXMgd2lsbCBza2lwIHJlc3RvcmluZyBmb3Ig ZGF0YWJhc2VzIHRoYXQgYXJlIHNwZWNpZmllZCB3aXRoCisgKiBleGNsdWRlLWRhdGFiYXNlIG9w dGlvbi4KKyAqCisgKiByZXR1cm5zLCBudW1iZXIgb2YgZXJyb3JzIHdoaWxlIGRvaW5nIHJlc3Rv cmUuCisgKi8KK3N0YXRpYyBpbnQKK3Jlc3RvcmVfYWxsX2RhdGFiYXNlcyhjb25zdCBjaGFyICpp bnB1dEZpbGVTcGVjLAorCQkJCQkgIFNpbXBsZVN0cmluZ0xpc3QgZGJfZXhjbHVkZV9wYXR0ZXJu cywgUmVzdG9yZU9wdGlvbnMgKm9wdHMsCisJCQkJCSAgaW50IG51bVdvcmtlcnMpCit7CisJU2lt cGxlUHRyTGlzdCBkYm5hbWVfb2lkX2xpc3QgPSB7TlVMTCwgTlVMTH07CisJaW50CQkJbnVtX2Ri X3Jlc3RvcmUgPSAwOworCWludAkJCW51bV90b3RhbF9kYjsKKwlpbnQJCQluX2Vycm9yc190b3Rh bDsKKwljaGFyCSAgICpjb25uZWN0ZWRfZGIgPSBOVUxMOworCWJvb2wJCWR1bXBEYXRhID0gb3B0 cy0+ZHVtcERhdGE7CisJYm9vbAkJZHVtcFNjaGVtYSA9IG9wdHMtPmR1bXBTY2hlbWE7CisJYm9v bAkJZHVtcFN0YXRpc3RpY3MgPSBvcHRzLT5kdW1wU2NoZW1hOworCVBHY29ubgkgICAqY29ubiA9 IE5VTEw7CisJY2hhcgkJZ2xvYmFsX3BhdGhbTUFYUEdQQVRIXTsKKworCS8qIFNldCBwYXRoIGZv ciB0b2MuZ2xvIGZpbGUuICovCisJc25wcmludGYoZ2xvYmFsX3BhdGgsIE1BWFBHUEFUSCwgIiVz L3RvYy5nbG8iLCBpbnB1dEZpbGVTcGVjKTsKKworCS8qIFNhdmUgZGIgbmFtZSB0byByZXVzZSBp dCBmb3IgYWxsIHRoZSBkYXRhYmFzZS4gKi8KKwlpZiAob3B0cy0+Y3BhcmFtcy5kYm5hbWUpCisJ CWNvbm5lY3RlZF9kYiA9IG9wdHMtPmNwYXJhbXMuZGJuYW1lOworCisJbnVtX3RvdGFsX2RiID0g Z2V0X2RibmFtZV9vaWRfbGlzdF9mcm9tX21maWxlKGlucHV0RmlsZVNwZWMsICZkYm5hbWVfb2lk X2xpc3QpOworCisJLyogSWYgbWFwLmRhdCBoYXMgbm8gZW50cmllcywgcmV0dXJuIGFmdGVyIHBy b2Nlc3NpbmcgZ2xvYmFsIGNvbW1hbmRzLiAqLworCWlmIChkYm5hbWVfb2lkX2xpc3QuaGVhZCA9 PSBOVUxMKQorCQlyZXR1cm4gcmVzdG9yZV9nbG9iYWxfb2JqZWN0cyhnbG9iYWxfcGF0aCwgb3B0 cywgbnVtV29ya2VycywgZmFsc2UpOworCisJcGdfbG9nX2luZm8obmdldHRleHQoImZvdW5kICVk IGRhdGFiYXNlIG5hbWUgaW4gXCIlc1wiIiwKKwkJCQkJCSAiZm91bmQgJWQgZGF0YWJhc2UgbmFt ZXMgaW4gXCIlc1wiIiwKKwkJCQkJCSBudW1fdG90YWxfZGIpLAorCQkJCW51bV90b3RhbF9kYiwg Im1hcC5kYXQiKTsKKworCS8qCisJICogSWYgZXhjbHVkZS1wYXR0ZXJucyBpcyBnaXZlbiwgdGhl biBjb25uZWN0IHRvIHRoZSBkYXRhYmFzZSB0byBwcm9jZXNzCisJICogaXQuCisJICovCisJaWYg KGRiX2V4Y2x1ZGVfcGF0dGVybnMuaGVhZCAhPSBOVUxMKQorCXsKKwkJaWYgKG9wdHMtPmNwYXJh bXMuZGJuYW1lKQorCQl7CisJCQljb25uID0gQ29ubmVjdERhdGFiYXNlKG9wdHMtPmNwYXJhbXMu ZGJuYW1lLCBOVUxMLCBvcHRzLT5jcGFyYW1zLnBnaG9zdCwKKwkJCQkJCQkJICAgb3B0cy0+Y3Bh cmFtcy5wZ3BvcnQsIG9wdHMtPmNwYXJhbXMudXNlcm5hbWUsIFRSSV9ERUZBVUxULAorCQkJCQkJ CQkgICBmYWxzZSwgcHJvZ25hbWUsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpOworCisJCQlpZiAo IWNvbm4pCisJCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBjb25uZWN0IHRvIGRhdGFiYXNlIFwiJXNc IiIsIG9wdHMtPmNwYXJhbXMuZGJuYW1lKTsKKwkJfQorCisJCWlmICghY29ubikKKwkJeworCQkJ cGdfbG9nX2luZm8oInRyeWluZyB0byBjb25uZWN0IHRvIGRhdGFiYXNlIFwiJXNcIiIsICJwb3N0 Z3JlcyIpOworCisJCQljb25uID0gQ29ubmVjdERhdGFiYXNlKCJwb3N0Z3JlcyIsIE5VTEwsIG9w dHMtPmNwYXJhbXMucGdob3N0LAorCQkJCQkJCQkgICBvcHRzLT5jcGFyYW1zLnBncG9ydCwgb3B0 cy0+Y3BhcmFtcy51c2VybmFtZSwgVFJJX0RFRkFVTFQsCisJCQkJCQkJCSAgIGZhbHNlLCBwcm9n bmFtZSwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCk7CisKKwkJCS8qIFRyeSB3aXRoIHRlbXBsYXRl MS4gKi8KKwkJCWlmICghY29ubikKKwkJCXsKKwkJCQlwZ19sb2dfaW5mbygidHJ5aW5nIHRvIGNv bm5lY3QgdG8gZGF0YWJhc2UgXCIlc1wiIiwgInRlbXBsYXRlMSIpOworCisJCQkJY29ubiA9IENv bm5lY3REYXRhYmFzZSgidGVtcGxhdGUxIiwgTlVMTCwgb3B0cy0+Y3BhcmFtcy5wZ2hvc3QsCisJ CQkJCQkJCQkgICBvcHRzLT5jcGFyYW1zLnBncG9ydCwgb3B0cy0+Y3BhcmFtcy51c2VybmFtZSwg VFJJX0RFRkFVTFQsCisJCQkJCQkJCQkgICBmYWxzZSwgcHJvZ25hbWUsIE5VTEwsIE5VTEwsIE5V TEwsIE5VTEwpOworCQkJfQorCQl9CisJfQorCisJLyoKKwkgKiBmaWx0ZXIgdGhlIGRiIGxpc3Qg YWNjb3JkaW5nIHRvIHRoZSBleGNsdWRlIHBhdHRlcm5zCisJICovCisJbnVtX2RiX3Jlc3RvcmUg PSBnZXRfZGJuYW1lc19saXN0X3RvX3Jlc3RvcmUoY29ubiwgJmRibmFtZV9vaWRfbGlzdCwKKwkJ CQkJCQkJCQkJCSBkYl9leGNsdWRlX3BhdHRlcm5zKTsKKworCS8qIENsb3NlIHRoZSBkYiBjb25u ZWN0aW9uIGFzIHdlIGFyZSBkb25lIHdpdGggZ2xvYmFscyBhbmQgcGF0dGVybnMuICovCisJaWYg KGNvbm4pCisJCVBRZmluaXNoKGNvbm4pOworCisJLyogT3BlbiB0b2MuZGF0IGZpbGUgYW5kIGV4 ZWN1dGUvYXBwZW5kIGFsbCB0aGUgZ2xvYmFsIHNxbCBjb21tYW5kcy4gKi8KKwluX2Vycm9yc190 b3RhbCA9IHJlc3RvcmVfZ2xvYmFsX29iamVjdHMoZ2xvYmFsX3BhdGgsIG9wdHMsIG51bVdvcmtl cnMsIGZhbHNlKTsKKworCS8qIEV4aXQgaWYgbm8gZGIgbmVlZHMgdG8gYmUgcmVzdG9yZWQuICov CisJaWYgKGRibmFtZV9vaWRfbGlzdC5oZWFkID09IE5VTEwgfHwgbnVtX2RiX3Jlc3RvcmUgPT0g MCkKKwl7CisJCXBnX2xvZ19pbmZvKG5nZXR0ZXh0KCJubyBkYXRhYmFzZSBuZWVkcyByZXN0b3Jp bmcgb3V0IG9mICVkIGRhdGFiYXNlIiwKKwkJCQkJCQkgIm5vIGRhdGFiYXNlIG5lZWRzIHJlc3Rv cmluZyBvdXQgb2YgJWQgZGF0YWJhc2VzIiwgbnVtX3RvdGFsX2RiKSwKKwkJCQkJbnVtX3RvdGFs X2RiKTsKKwkJcmV0dXJuIG5fZXJyb3JzX3RvdGFsOworCX0KKworCXBnX2xvZ19pbmZvKCJuZWVk IHRvIHJlc3RvcmUgJWQgZGF0YWJhc2VzIG91dCBvZiAlZCBkYXRhYmFzZXMiLCBudW1fZGJfcmVz dG9yZSwgbnVtX3RvdGFsX2RiKTsKKworCS8qCisJICogV2UgaGF2ZSBhIGxpc3Qgb2YgZGF0YWJh c2VzIHRvIHJlc3RvcmUgYWZ0ZXIgcHJvY2Vzc2luZyB0aGUKKwkgKiBleGNsdWRlLWRhdGFiYXNl IHN3aXRjaChlcykuICBOb3cgd2UgY2FuIHJlc3RvcmUgdGhlbSBvbmUgYnkgb25lLgorCSAqLwor CWZvciAoU2ltcGxlUHRyTGlzdENlbGwgKmRiX2NlbGwgPSBkYm5hbWVfb2lkX2xpc3QuaGVhZDsK KwkJIGRiX2NlbGw7IGRiX2NlbGwgPSBkYl9jZWxsLT5uZXh0KQorCXsKKwkJRGJPaWROYW1lICAq ZGJpZG5hbWUgPSAoRGJPaWROYW1lICopIGRiX2NlbGwtPnB0cjsKKwkJY2hhcgkJc3ViZGlycGF0 aFtNQVhQR1BBVEhdOworCQljaGFyCQlzdWJkaXJkYnBhdGhbTUFYUEdQQVRIXTsKKwkJY2hhcgkJ ZGJmaWxlbmFtZVtNQVhQR1BBVEhdOworCQlpbnQJCQluX2Vycm9yczsKKworCQkvKiBpZ25vcmUg ZGJzIG1hcmtlZCBmb3Igc2tpcHBpbmcgKi8KKwkJaWYgKGRiaWRuYW1lLT5vaWQgPT0gSW52YWxp ZE9pZCkKKwkJCWNvbnRpbnVlOworCisJCS8qCisJCSAqIFdlIG5lZWQgdG8gcmVzZXQgb3ZlcnJp ZGVfZGJuYW1lIHNvIHRoYXQgb2JqZWN0cyBjYW4gYmUgcmVzdG9yZWQKKwkJICogaW50byBhbiBh bHJlYWR5IGNyZWF0ZWQgZGF0YWJhc2UuICh1c2VkIHdpdGggLWQvLS1kYm5hbWUgb3B0aW9uKQor CQkgKi8KKwkJaWYgKG9wdHMtPmNwYXJhbXMub3ZlcnJpZGVfZGJuYW1lKQorCQl7CisJCQlwZnJl ZShvcHRzLT5jcGFyYW1zLm92ZXJyaWRlX2RibmFtZSk7CisJCQlvcHRzLT5jcGFyYW1zLm92ZXJy aWRlX2RibmFtZSA9IE5VTEw7CisJCX0KKworCQlzbnByaW50ZihzdWJkaXJkYnBhdGgsIE1BWFBH UEFUSCwgIiVzL2RhdGFiYXNlcyIsIGlucHV0RmlsZVNwZWMpOworCisJCS8qCisJCSAqIExvb2sg Zm9yIHRoZSBkYXRhYmFzZSBkdW1wIGZpbGUvZGlyLiBJZiB0aGVyZSBpcyBhbiB7b2lkfS50YXIg b3IKKwkJICoge29pZH0uZG1wIGZpbGUsIHVzZSBpdC4gT3RoZXJ3aXNlIHRyeSB0byB1c2UgYSBk aXJlY3RvcnkgY2FsbGVkCisJCSAqIHtvaWR9CisJCSAqLworCQlzbnByaW50ZihkYmZpbGVuYW1l LCBNQVhQR1BBVEgsICIldS50YXIiLCBkYmlkbmFtZS0+b2lkKTsKKwkJaWYgKGZpbGVfZXhpc3Rz X2luX2RpcmVjdG9yeShzdWJkaXJkYnBhdGgsIGRiZmlsZW5hbWUpKQorCQkJc25wcmludGYoc3Vi ZGlycGF0aCwgTUFYUEdQQVRILCAiJXMvZGF0YWJhc2VzLyV1LnRhciIsIGlucHV0RmlsZVNwZWMs IGRiaWRuYW1lLT5vaWQpOworCQllbHNlCisJCXsKKwkJCXNucHJpbnRmKGRiZmlsZW5hbWUsIE1B WFBHUEFUSCwgIiV1LmRtcCIsIGRiaWRuYW1lLT5vaWQpOworCisJCQlpZiAoZmlsZV9leGlzdHNf aW5fZGlyZWN0b3J5KHN1YmRpcmRicGF0aCwgZGJmaWxlbmFtZSkpCisJCQkJc25wcmludGYoc3Vi ZGlycGF0aCwgTUFYUEdQQVRILCAiJXMvZGF0YWJhc2VzLyV1LmRtcCIsIGlucHV0RmlsZVNwZWMs IGRiaWRuYW1lLT5vaWQpOworCQkJZWxzZQorCQkJCXNucHJpbnRmKHN1YmRpcnBhdGgsIE1BWFBH UEFUSCwgIiVzL2RhdGFiYXNlcy8ldSIsIGlucHV0RmlsZVNwZWMsIGRiaWRuYW1lLT5vaWQpOwor CQl9CisKKwkJcGdfbG9nX2luZm8oInJlc3RvcmluZyBkYXRhYmFzZSBcIiVzXCIiLCBkYmlkbmFt ZS0+c3RyKTsKKworCQkvKiBJZiBkYXRhYmFzZSBpcyBhbHJlYWR5IGNyZWF0ZWQsIHRoZW4gZG9u J3Qgc2V0IGNyZWF0ZURCIGZsYWcuICovCisJCWlmIChvcHRzLT5jcGFyYW1zLmRibmFtZSkKKwkJ eworCQkJUEdjb25uCSAgICp0ZXN0X2Nvbm47CisKKwkJCXRlc3RfY29ubiA9IENvbm5lY3REYXRh YmFzZShkYmlkbmFtZS0+c3RyLCBOVUxMLCBvcHRzLT5jcGFyYW1zLnBnaG9zdCwKKwkJCQkJCQkJ CQlvcHRzLT5jcGFyYW1zLnBncG9ydCwgb3B0cy0+Y3BhcmFtcy51c2VybmFtZSwgVFJJX0RFRkFV TFQsCisJCQkJCQkJCQkJZmFsc2UsIHByb2duYW1lLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKTsK KwkJCWlmICh0ZXN0X2Nvbm4pCisJCQl7CisJCQkJUFFmaW5pc2godGVzdF9jb25uKTsKKworCQkJ CS8qIFVzZSBhbHJlYWR5IGNyZWF0ZWQgZGF0YWJhc2UgZm9yIGNvbm5lY3Rpb24uICovCisJCQkJ b3B0cy0+Y3JlYXRlREIgPSAwOworCQkJCW9wdHMtPmNwYXJhbXMuZGJuYW1lID0gZGJpZG5hbWUt PnN0cjsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQkvKiB3ZSdsbCBoYXZlIHRvIGNyZWF0ZSBp dCAqLworCQkJCW9wdHMtPmNyZWF0ZURCID0gMTsKKwkJCQlvcHRzLT5jcGFyYW1zLmRibmFtZSA9 IGNvbm5lY3RlZF9kYjsKKwkJCX0KKwkJfQorCisJCS8qCisJCSAqIFJlc2V0IGZsYWdzIC0gbWln aHQgaGF2ZSBiZWVuIHJlc2V0IGluIHBnX2JhY2t1cF9hcmNoaXZlci5jIGJ5IHRoZQorCQkgKiBw cmV2aW91cyByZXN0b3JlLgorCQkgKi8KKwkJb3B0cy0+ZHVtcERhdGEgPSBkdW1wRGF0YTsKKwkJ b3B0cy0+ZHVtcFNjaGVtYSA9IGR1bXBTY2hlbWE7CisJCW9wdHMtPmR1bXBTdGF0aXN0aWNzID0g ZHVtcFN0YXRpc3RpY3M7CisKKwkJLyogUmVzdG9yZSB0aGUgc2luZ2xlIGRhdGFiYXNlLiAqLwor CQluX2Vycm9ycyA9IHJlc3RvcmVfb25lX2RhdGFiYXNlKHN1YmRpcnBhdGgsIG9wdHMsIG51bVdv cmtlcnMsIHRydWUsIGZhbHNlLCBmYWxzZSk7CisKKwkJLyogUHJpbnQgYSBzdW1tYXJ5IG9mIGln bm9yZWQgZXJyb3JzIGR1cmluZyBzaW5nbGUgZGF0YWJhc2UgcmVzdG9yZS4gKi8KKwkJaWYgKG5f ZXJyb3JzKQorCQl7CisJCQluX2Vycm9yc190b3RhbCArPSBuX2Vycm9yczsKKwkJCXBnX2xvZ193 YXJuaW5nKCJlcnJvcnMgaWdub3JlZCBvbiBkYXRhYmFzZSBcIiVzXCIgcmVzdG9yZTogJWQiLCBk YmlkbmFtZS0+c3RyLCBuX2Vycm9ycyk7CisJCX0KKwl9CisKKwkvKiBMb2cgbnVtYmVyIG9mIHBy b2Nlc3NlZCBkYXRhYmFzZXMuICovCisJcGdfbG9nX2luZm8oIm51bWJlciBvZiByZXN0b3JlZCBk YXRhYmFzZXMgaXMgJWQiLCBudW1fZGJfcmVzdG9yZSk7CisKKwkvKiBGcmVlIGRibmFtZSBhbmQg ZGJvaWQgbGlzdC4gKi8KKwlzaW1wbGVfcHRyX2xpc3RfZGVzdHJveSgmZGJuYW1lX29pZF9saXN0 KTsKKworCXJldHVybiBuX2Vycm9yc190b3RhbDsKK30KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdf ZHVtcC90LzAwMV9iYXNpYy5wbCBiL3NyYy9iaW4vcGdfZHVtcC90LzAwMV9iYXNpYy5wbApvbGQg bW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmluZGV4IGFiOTMxMGViNDJiLi45MjIxZDNjOWY1 YwotLS0gYS9zcmMvYmluL3BnX2R1bXAvdC8wMDFfYmFzaWMucGwKKysrIGIvc3JjL2Jpbi9wZ19k dW1wL3QvMDAxX2Jhc2ljLnBsCkBAIC0yNDQsNCArMjQ0LDMxIEBAIGNvbW1hbmRfZmFpbHNfbGlr ZSgKIAkncGdfZHVtcGFsbDogb3B0aW9uIC0tZXhjbHVkZS1kYXRhYmFzZSBjYW5ub3QgYmUgdXNl ZCB0b2dldGhlciB3aXRoIC1nLy0tZ2xvYmFscy1vbmx5JwogKTsKIAorY29tbWFuZF9mYWlsc19s aWtlKAorCVsgJ3BnX2R1bXBhbGwnLCAnLS1mb3JtYXQnLCAneCcgXSwKKwlxci9cUXBnX2R1bXBh bGw6IGVycm9yOiB1bnJlY29nbml6ZWQgb3V0cHV0IGZvcm1hdCAieCI7XEUvLAorCSdwZ19kdW1w YWxsOiB1bnJlY29nbml6ZWQgb3V0cHV0IGZvcm1hdCcpOworCitjb21tYW5kX2ZhaWxzX2xpa2Uo CisJWyAncGdfZHVtcGFsbCcsICctLWZvcm1hdCcsICdkJywgJy0tcmVzdHJpY3Qta2V5PXV1Jywg Jy1mIGR1bXBmaWxlJyBdLAorCXFyL1xRcGdfZHVtcGFsbDogZXJyb3I6IG9wdGlvbiAtLXJlc3Ry aWN0LWtleSBjYW4gb25seSBiZSB1c2VkIHdpdGggLS1mb3JtYXQ9cGxhaW5cRS8sCisJJ3BnX2R1 bXBhbGw6IC0tcmVzdHJpY3Qta2V5IGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBwbGFpbiBkdW1wIGZv cm1hdCcpOworCitjb21tYW5kX2ZhaWxzX2xpa2UoCisJWyAncGdfcmVzdG9yZScsICctLWV4Y2x1 ZGUtZGF0YWJhc2U9Zm9vJywgJy0tZ2xvYmFscy1vbmx5JywgJy1kJywgJ3h4eCcgXSwKKwlxci9c UXBnX3Jlc3RvcmU6IGVycm9yOiBvcHRpb24gLS1leGNsdWRlLWRhdGFiYXNlIGNhbm5vdCBiZSB1 c2VkIHRvZ2V0aGVyIHdpdGggLWdcLy0tZ2xvYmFscy1vbmx5XEUvLAorCSdwZ19yZXN0b3JlOiBv cHRpb24gLS1leGNsdWRlLWRhdGFiYXNlIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIHdpdGggLWcv LS1nbG9iYWxzLW9ubHknCispOworCitjb21tYW5kX2ZhaWxzX2xpa2UoCisJWyAncGdfcmVzdG9y ZScsICctLWV4Y2x1ZGUtZGF0YWJhc2U9Zm9vJywgJy1kJywgJ3h4eCcsICdkdW1wZGlyJyBdLAor CXFyL1xRcGdfcmVzdG9yZTogZXJyb3I6IG9wdGlvbiAtLWV4Y2x1ZGUtZGF0YWJhc2UgY2FuIGJl IHVzZWQgb25seSB3aGVuIHJlc3RvcmluZyBhbiBhcmNoaXZlIGNyZWF0ZWQgYnkgcGdfZHVtcGFs bFxFLywKKwknV2hlbiBvcHRpb24gLS1leGNsdWRlLWRhdGFiYXNlIGlzIHVzZWQgaW4gcGdfcmVz dG9yZSB3aXRoIGR1bXAgb2YgcGdfZHVtcCcKKyk7CisKK2NvbW1hbmRfZmFpbHNfbGlrZSgKKwlb ICdwZ19yZXN0b3JlJywgJy0tZ2xvYmFscy1vbmx5JywgJy1kJywgJ3h4eCcsICdkdW1wZGlyJyBd LAorCXFyL1xRcGdfcmVzdG9yZTogZXJyb3I6IG9wdGlvbiAtZ1wvLS1nbG9iYWxzLW9ubHkgY2Fu IGJlIHVzZWQgb25seSB3aGVuIHJlc3RvcmluZyBhbiBhcmNoaXZlIGNyZWF0ZWQgYnkgcGdfZHVt cGFsbFxFLywKKwknV2hlbiBvcHRpb24gLS1nbG9iYWxzLW9ubHkgaXMgbm90IHVzZWQgaW4gcGdf cmVzdG9yZSB3aXRoIGR1bXAgb2YgcGdfZHVtcCcKKyk7CiBkb25lX3Rlc3RpbmcoKTsKZGlmZiAt LWdpdCBhL3NyYy9iaW4vcGdfZHVtcC90LzAwN19wZ19kdW1wYWxsLnBsIGIvc3JjL2Jpbi9wZ19k dW1wL3QvMDA3X3BnX2R1bXBhbGwucGwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAw MDAwMDAuLjNjN2QyYWQ3YzUzCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3Qv MDA3X3BnX2R1bXBhbGwucGwKQEAgLTAsMCArMSwzOTYgQEAKKyMgQ29weXJpZ2h0IChjKSAyMDIx LTIwMjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisKK3VzZSBzdHJpY3Q7 Cit1c2Ugd2FybmluZ3MgRkFUQUwgPT4gJ2FsbCc7CisKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpD bHVzdGVyOwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOwordXNlIFRlc3Q6Ok1vcmU7CisK K215ICR0ZW1wZGlyID0gUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM6OnRlbXBkaXI7CitteSAkcnVu X2RiID0gJ3Bvc3RncmVzJzsKK215ICRzZXAgPSAkd2luZG93c19vcyA/ICJcXCIgOiAiLyI7CisK KyMgVGFibGVzcGFjZSBsb2NhdGlvbnMgdXNlZCBieSAicmVzdG9yZV90YWJsZXNwYWNlIiB0ZXN0 IGNhc2UuCitteSAkdGFibGVzcGFjZTEgPSAiJHt0ZW1wZGlyfSR7c2VwfXRibDEiOworbXkgJHRh Ymxlc3BhY2UyID0gIiR7dGVtcGRpcn0ke3NlcH10YmwyIjsKK21rZGlyKCR0YWJsZXNwYWNlMSkg fHwgZGllICJta2RpciAkdGFibGVzcGFjZTEgJCEiOworbWtkaXIoJHRhYmxlc3BhY2UyKSB8fCBk aWUgIm1rZGlyICR0YWJsZXNwYWNlMiAkISI7CisKKyMgU2NhcGUgdGFibGVzcGFjZSBsb2NhdGlv bnMgb24gV2luZG93cy4KKyR0YWJsZXNwYWNlMSA9ICR3aW5kb3dzX29zID8gKCR0YWJsZXNwYWNl MSA9fiBzL1xcL1xcXFwvZ3IpIDogJHRhYmxlc3BhY2UxOworJHRhYmxlc3BhY2UyID0gJHdpbmRv d3Nfb3MgPyAoJHRhYmxlc3BhY2UyID1+IHMvXFwvXFxcXC9ncikgOiAkdGFibGVzcGFjZTI7CisK KyMgV2hlcmUgcGdfZHVtcGFsbCB3aWxsIGJlIGV4ZWN1dGVkLgorbXkgJG5vZGUgPSBQb3N0Z3Jl U1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ25vZGUnKTsKKyRub2RlLT5pbml0OworJG5vZGUtPnN0 YXJ0OworCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIworIyBEZWZpbml0aW9uIG9mIHRoZSBwZ19kdW1wYWxsIHRlc3QgY2Fz ZXMgdG8gcnVuLgorIworIyBFYWNoIG9mIHRoZXNlIHRlc3QgY2FzZXMgYXJlIG5hbWVkIGFuZCB0 aG9zZSBuYW1lcyBhcmUgdXNlZCBmb3IgZmFpbAorIyByZXBvcnRpbmcgYW5kIGFsc28gdG8gc2F2 ZSB0aGUgZHVtcCBhbmQgcmVzdG9yZSBpbmZvcm1hdGlvbiBuZWVkZWQgZm9yIHRoZQorIyB0ZXN0 IHRvIGFzc2VydC4KKyMKKyMgVGhlICJzZXR1cF9zcWwiIGlzIGEgcHNxbCB2YWxpZCBzY3JpcHQg dGhhdCBjb250YWlucyBTUUwgY29tbWFuZHMgdG8gZXhlY3V0ZQorIyBiZWZvcmUgb2YgYWN0dWFs bHkgZXhlY3V0ZSB0aGUgdGVzdHMuIFRoZSBzZXR1cHMgYXJlIGFsbCBleGVjdXRlZCBiZWZvcmUg b2YKKyMgYW55IHRlc3QgZXhlY3V0aW9uLgorIworIyBUaGUgImR1bXBfY21kIiBhbmQgInJlc3Rv cmVfY21kIiBhcmUgdGhlIGNvbW1hbmRzIHRoYXQgd2lsbCBiZSBleGVjdXRlZC4gVGhlCisjICJy ZXN0b3JlX2NtZCIgbXVzdCBoYXZlIHRoZSAtLWZpbGUgZmxhZyB0byBzYXZlIHRoZSByZXN0b3Jl IG91dHB1dCBzbyB0aGF0IHdlCisjIGNhbiBhc3NlcnQgb24gaXQuCisjCisjIFRoZSAibGlrZSIg YW5kICJ1bmxpa2UiIGlzIGEgcmVnZXhwIHRoYXQgaXMgdXNlZCB0byBtYXRjaCB0aGUgcGdfcmVz dG9yZQorIyBvdXRwdXQuIEl0IG11c3QgaGF2ZSBhdCBsZWFzdCBvbmUgb2YgdGhlbiBmaWxsZWQg cGVyIHRlc3QgY2FzZXMgYnV0IGl0IGFsc28KKyMgY2FuIGhhdmUgYm90aC4gU2VlICJleGNsdWRp bmdfZGF0YWJhc2VzIiB0ZXN0IGNhc2UgZm9yIGV4YW1wbGUuCitteSAlcGdkdW1wYWxsX3J1bnMg PSAoCisJcmVzdG9yZV9yb2xlcyA9PiB7CisJCXNldHVwX3NxbCA9PiAnCisJCUNSRUFURSBST0xF IGR1bXBhbGwgV0lUSCBFTkNSWVBURUQgUEFTU1dPUkQgXCdhZG1pblwnIFNVUEVSVVNFUjsKKwkJ Q1JFQVRFIFJPTEUgZHVtcGFsbDIgV0lUSCBSRVBMSUNBVElPTiBDT05ORUNUSU9OIExJTUlUIDEw OycsCisJCWR1bXBfY21kID0+IFsKKwkJCSdwZ19kdW1wYWxsJywKKwkJCSctLWZvcm1hdCcgPT4g J2RpcmVjdG9yeScsCisJCQknLS1maWxlJyA9PiAiJHRlbXBkaXIvcmVzdG9yZV9yb2xlcyIsCisJ CV0sCisJCXJlc3RvcmVfY21kID0+IFsKKwkJCSdwZ19yZXN0b3JlJywgJy1DJywKKwkJCSctLWZv cm1hdCcgPT4gJ2RpcmVjdG9yeScsCisJCQknLS1maWxlJyA9PiAiJHRlbXBkaXIvcmVzdG9yZV9y b2xlcy5zcWwiLAorCQkJIiR0ZW1wZGlyL3Jlc3RvcmVfcm9sZXMiLAorCQldLAorCQlsaWtlID0+ IHFyLworCQkJXHMqXFFDUkVBVEUgUk9MRSBkdW1wYWxsMjtcRQorCQkJXHMqXFFBTFRFUiBST0xF IGR1bXBhbGwyIFdJVEggTk9TVVBFUlVTRVIgSU5IRVJJVCBOT0NSRUFURVJPTEUgTk9DUkVBVEVE QiBOT0xPR0lOIFJFUExJQ0FUSU9OIE5PQllQQVNTUkxTIENPTk5FQ1RJT04gTElNSVQgMTA7XEUK KwkJL3htCisJfSwKKworCXJlc3RvcmVfdGFibGVzcGFjZSA9PiB7CisJCXNldHVwX3NxbCA9PiAi CisJCUNSRUFURSBST0xFIHRhcDsKKwkJQ1JFQVRFIFRBQkxFU1BBQ0UgdGJsMSBPV05FUiB0YXAg TE9DQVRJT04gJyR0YWJsZXNwYWNlMSc7CisJCUNSRUFURSBUQUJMRVNQQUNFIHRibDIgT1dORVIg dGFwIExPQ0FUSU9OICckdGFibGVzcGFjZTInIFdJVEggKHNlcV9wYWdlX2Nvc3Q9MS4wKTsiLAor CQlkdW1wX2NtZCA9PiBbCisJCQkncGdfZHVtcGFsbCcsCisJCQknLS1mb3JtYXQnID0+ICdkaXJl Y3RvcnknLAorCQkJJy0tZmlsZScgPT4gIiR0ZW1wZGlyL3Jlc3RvcmVfdGFibGVzcGFjZSIsCisJ CV0sCisJCXJlc3RvcmVfY21kID0+IFsKKwkJCSdwZ19yZXN0b3JlJywgJy1DJywKKwkJCSctLWZv cm1hdCcgPT4gJ2RpcmVjdG9yeScsCisJCQknLS1maWxlJyA9PiAiJHRlbXBkaXIvcmVzdG9yZV90 YWJsZXNwYWNlLnNxbCIsCisJCQkiJHRlbXBkaXIvcmVzdG9yZV90YWJsZXNwYWNlIiwKKwkJXSwK KwkJIyBNYXRjaCAiRSIgYXMgb3B0aW9uYWwgc2luY2UgaXQgaXMgYWRkZWQgb24gTE9DQVRJT04g d2hlbiBydW5uaW5nIG9uCisJCSMgV2luZG93cy4KKwkJbGlrZSA9PiBxci9eCisJCQlcblxRQ1JF QVRFIFRBQkxFU1BBQ0UgdGJsMiBPV05FUiB0YXAgTE9DQVRJT04gXEUoPzpFKT9cUSckdGFibGVz cGFjZTInO1xFCisJCQlcblxRQUxURVIgVEFCTEVTUEFDRSB0YmwyIFNFVCAoc2VxX3BhZ2VfY29z dD0xLjApO1xFCisJCS94bSwKKwl9LAorCisJcmVzdG9yZV9ncmFudHMgPT4geworCQlzZXR1cF9z cWwgPT4gIgorCQlDUkVBVEUgREFUQUJBU0UgdGFwZ3JhbnRzZGI7CisJCUNSRUFURSBTQ0hFTUEg cHJpdmF0ZTsKKwkJQ1JFQVRFIFNFUVVFTkNFIHNlcmlhbCBTVEFSVCAxMDE7CisJCUNSRUFURSBG VU5DVElPTiBmbigpIFJFVFVSTlMgdm9pZCBBUyBcJFwkCisJCUJFR0lOCisJCUVORDsKKwkJXCRc JCBMQU5HVUFHRSBwbHBnc3FsOworCQlDUkVBVEUgUk9MRSBzdXBlcjsKKwkJQ1JFQVRFIFJPTEUg Z3JhbnQxOworCQlDUkVBVEUgUk9MRSBncmFudDI7CisJCUNSRUFURSBST0xFIGdyYW50MzsKKwkJ Q1JFQVRFIFJPTEUgZ3JhbnQ0OworCQlDUkVBVEUgUk9MRSBncmFudDU7CisJCUNSRUFURSBST0xF IGdyYW50NjsKKwkJQ1JFQVRFIFJPTEUgZ3JhbnQ3OworCQlDUkVBVEUgUk9MRSBncmFudDg7CisK KwkJQ1JFQVRFIFRBQkxFIHQgKGlkIGludCk7CisJCUlOU0VSVCBJTlRPIHQgVkFMVUVTICgxKSwg KDIpLCAoMyksICg0KTsKKworCQlHUkFOVCBTRUxFQ1QgT04gVEFCTEUgdCBUTyBncmFudDE7CisJ CUdSQU5UIElOU0VSVCBPTiBUQUJMRSB0IFRPIGdyYW50MjsKKwkJR1JBTlQgQUxMIFBSSVZJTEVH RVMgT04gVEFCTEUgdCB0byBncmFudDM7CisJCUdSQU5UIENPTk5FQ1QsIENSRUFURSBPTiBEQVRB QkFTRSB0YXBncmFudHNkYiBUTyBncmFudDQ7CisJCUdSQU5UIFVTQUdFLCBDUkVBVEUgT04gU0NI RU1BIHByaXZhdGUgVE8gZ3JhbnQ1OworCQlHUkFOVCBVU0FHRSwgU0VMRUNULCBVUERBVEUgT04g U0VRVUVOQ0Ugc2VyaWFsIFRPIGdyYW50NjsKKwkJR1JBTlQgc3VwZXIgVE8gZ3JhbnQ3OworCQlH UkFOVCBFWEVDVVRFIE9OIEZVTkNUSU9OIGZuKCkgVE8gZ3JhbnQ4OworCQkiLAorCQlkdW1wX2Nt ZCA9PiBbCisJCQkncGdfZHVtcGFsbCcsCisJCQknLS1mb3JtYXQnID0+ICdkaXJlY3RvcnknLAor CQkJJy0tZmlsZScgPT4gIiR0ZW1wZGlyL3Jlc3RvcmVfZ3JhbnRzIiwKKwkJXSwKKwkJcmVzdG9y ZV9jbWQgPT4gWworCQkJJ3BnX3Jlc3RvcmUnLCAnLUMnLAorCQkJJy0tZm9ybWF0JyA9PiAnZGly ZWN0b3J5JywKKwkJCSctLWZpbGUnID0+ICIkdGVtcGRpci9yZXN0b3JlX2dyYW50cy5zcWwiLAor CQkJIiR0ZW1wZGlyL3Jlc3RvcmVfZ3JhbnRzIiwKKwkJXSwKKwkJbGlrZSA9PiBxci9eCisJCQlc blxRR1JBTlQgc3VwZXIgVE8gZ3JhbnQ3IFdJVEggSU5IRVJJVCBUUlVFIEdSQU5URUQgQllcRQor CQkJKC4qXG4pKgorCQkJXG5cUUdSQU5UIEFMTCBPTiBTQ0hFTUEgcHJpdmF0ZSBUTyBncmFudDU7 XEUKKwkJCSguKlxuKSoKKwkJCVxuXFFHUkFOVCBBTEwgT04gRlVOQ1RJT04gcHVibGljLmZuKCkg VE8gZ3JhbnQ4O1xFCisJCQkoLipcbikqCisJCQlcblxRR1JBTlQgQUxMIE9OIFNFUVVFTkNFIHB1 YmxpYy5zZXJpYWwgVE8gZ3JhbnQ2O1xFCisJCQkoLipcbikqCisJCQlcblxRR1JBTlQgU0VMRUNU IE9OIFRBQkxFIHB1YmxpYy50IFRPIGdyYW50MTtcRQorCQkJXG5cUUdSQU5UIElOU0VSVCBPTiBU QUJMRSBwdWJsaWMudCBUTyBncmFudDI7XEUKKwkJCVxuXFFHUkFOVCBBTEwgT04gVEFCTEUgcHVi bGljLnQgVE8gZ3JhbnQzO1xFCisJCQkoLipcbikqCisJCQlcblxRR1JBTlQgQ1JFQVRFLENPTk5F Q1QgT04gREFUQUJBU0UgdGFwZ3JhbnRzZGIgVE8gZ3JhbnQ0O1xFCisJCS94bSwKKwl9LAorCisJ ZXhjbHVkaW5nX2RhdGFiYXNlcyA9PiB7CisJCXNldHVwX3NxbCA9PiAnQ1JFQVRFIERBVEFCQVNF IGRiMTsKKwkJXGMgZGIxCisJCUNSRUFURSBUQUJMRSB0MSAoaWQgaW50KTsKKwkJSU5TRVJUIElO VE8gdDEgVkFMVUVTICgxKSwgKDIpLCAoMyksICg0KTsKKwkJQ1JFQVRFIFRBQkxFIHQyIChpZCBp bnQpOworCQlJTlNFUlQgSU5UTyB0MiBWQUxVRVMgKDEpLCAoMiksICgzKSwgKDQpOworCisJCUNS RUFURSBEQVRBQkFTRSBkYjI7CisJCVxjIGRiMgorCQlDUkVBVEUgVEFCTEUgdDMgKGlkIGludCk7 CisJCUlOU0VSVCBJTlRPIHQzIFZBTFVFUyAoMSksICgyKSwgKDMpLCAoNCk7CisJCUNSRUFURSBU QUJMRSB0NCAoaWQgaW50KTsKKwkJSU5TRVJUIElOVE8gdDQgVkFMVUVTICgxKSwgKDIpLCAoMyks ICg0KTsKKworCQlDUkVBVEUgREFUQUJBU0UgZGJleDM7CisJCVxjIGRiZXgzCisJCUNSRUFURSBU QUJMRSB0NSAoaWQgaW50KTsKKwkJSU5TRVJUIElOVE8gdDUgVkFMVUVTICgxKSwgKDIpLCAoMyks ICg0KTsKKwkJQ1JFQVRFIFRBQkxFIHQ2IChpZCBpbnQpOworCQlJTlNFUlQgSU5UTyB0NiBWQUxV RVMgKDEpLCAoMiksICgzKSwgKDQpOworCisJCUNSRUFURSBEQVRBQkFTRSBkYmV4NDsKKwkJXGMg ZGJleDQKKwkJQ1JFQVRFIFRBQkxFIHQ3IChpZCBpbnQpOworCQlJTlNFUlQgSU5UTyB0NyBWQUxV RVMgKDEpLCAoMiksICgzKSwgKDQpOworCQlDUkVBVEUgVEFCTEUgdDggKGlkIGludCk7CisJCUlO U0VSVCBJTlRPIHQ4IFZBTFVFUyAoMSksICgyKSwgKDMpLCAoNCk7CisKKwkJQ1JFQVRFIERBVEFC QVNFIGRiNTsKKwkJXGMgZGI1CisJCUNSRUFURSBUQUJMRSB0OSAoaWQgaW50KTsKKwkJSU5TRVJU IElOVE8gdDkgVkFMVUVTICgxKSwgKDIpLCAoMyksICg0KTsKKwkJQ1JFQVRFIFRBQkxFIHQxMCAo aWQgaW50KTsKKwkJSU5TRVJUIElOVE8gdDEwIFZBTFVFUyAoMSksICgyKSwgKDMpLCAoNCk7CisJ CScsCisJCWR1bXBfY21kID0+IFsKKwkJCSdwZ19kdW1wYWxsJywKKwkJCSctLWZvcm1hdCcgPT4g J2RpcmVjdG9yeScsCisJCQknLS1maWxlJyA9PiAiJHRlbXBkaXIvZXhjbHVkaW5nX2RhdGFiYXNl cyIsCisJCQknLS1leGNsdWRlLWRhdGFiYXNlJyA9PiAnZGJleConLAorCQldLAorCQlyZXN0b3Jl X2NtZCA9PiBbCisJCQkncGdfcmVzdG9yZScsICctQycsCisJCQknLS1mb3JtYXQnID0+ICdkaXJl Y3RvcnknLAorCQkJJy0tZmlsZScgPT4gIiR0ZW1wZGlyL2V4Y2x1ZGluZ19kYXRhYmFzZXMuc3Fs IiwKKwkJCSctLWV4Y2x1ZGUtZGF0YWJhc2UnID0+ICdkYjUnLAorCQkJIiR0ZW1wZGlyL2V4Y2x1 ZGluZ19kYXRhYmFzZXMiLAorCQldLAorCQlsaWtlID0+IHFyL14KKwkJCVxuXFFDUkVBVEUgREFU QUJBU0UgZGIxXEUKKwkJCSguKlxuKSoKKwkJCVxuXFFDUkVBVEUgVEFCTEUgcHVibGljLnQxIChc RQorCQkJKC4qXG4pKgorCQkJXG5cUUNSRUFURSBUQUJMRSBwdWJsaWMudDIgKFxFCisJCQkoLipc bikqCisJCQlcblxRQ1JFQVRFIERBVEFCQVNFIGRiMlxFCisJCQkoLipcbikqCisJCQlcblxRQ1JF QVRFIFRBQkxFIHB1YmxpYy50MyAoXEUKKwkJCSguKlxuKSoKKwkJCVxuXFFDUkVBVEUgVEFCTEUg cHVibGljLnQ0ICgveG0sCisJCXVubGlrZSA9PiBxci9eCisJCQlcblxRQ1JFQVRFIERBVEFCQVNF IGRiM1xFCisJCQkoLipcbikqCisJCQlcblxRQ1JFQVRFIFRBQkxFIHB1YmxpYy50NSAoXEUKKwkJ CSguKlxuKSoKKwkJCVxuXFFDUkVBVEUgVEFCTEUgcHVibGljLnQ2IChcRQorCQkJKC4qXG4pKgor CQkJXG5cUUNSRUFURSBEQVRBQkFTRSBkYjRcRQorCQkJKC4qXG4pKgorCQkJXG5cUUNSRUFURSBU QUJMRSBwdWJsaWMudDcgKFxFCisJCQkoLipcbikqCisJCQlcblxRQ1JFQVRFIFRBQkxFIHB1Ymxp Yy50OCAoXEUKKwkJCVxuXFFDUkVBVEUgREFUQUJBU0UgZGI1XEUKKwkJCSguKlxuKSoKKwkJCVxu XFFDUkVBVEUgVEFCTEUgcHVibGljLnQ5IChcRQorCQkJKC4qXG4pKgorCQkJXG5cUUNSRUFURSBU QUJMRSBwdWJsaWMudDEwIChcRQorCQkveG0sCisJfSwKKworCWZvcm1hdF9kaXJlY3RvcnkgPT4g eworCQlzZXR1cF9zcWwgPT4gIkNSRUFURSBUQUJMRSBmb3JtYXRfZGlyZWN0b3J5KGEgaW50LCBi IGJvb2xlYW4sIGMgdGV4dCk7CisJCUlOU0VSVCBJTlRPIGZvcm1hdF9kaXJlY3RvcnkgVkFMVUVT ICgxLCB0cnVlLCAnbmFtZTEnKSwgKDIsIGZhbHNlLCAnbmFtZTInKTsiLAorCQlkdW1wX2NtZCA9 PiBbCisJCQkncGdfZHVtcGFsbCcsCisJCQknLS1mb3JtYXQnID0+ICdkaXJlY3RvcnknLAorCQkJ Jy0tZmlsZScgPT4gIiR0ZW1wZGlyL2Zvcm1hdF9kaXJlY3RvcnkiLAorCQldLAorCQlyZXN0b3Jl X2NtZCA9PiBbCisJCQkncGdfcmVzdG9yZScsICctQycsCisJCQknLS1mb3JtYXQnID0+ICdkaXJl Y3RvcnknLAorCQkJJy0tZmlsZScgPT4gIiR0ZW1wZGlyL2Zvcm1hdF9kaXJlY3Rvcnkuc3FsIiwK KwkJCSIkdGVtcGRpci9mb3JtYXRfZGlyZWN0b3J5IiwKKwkJXSwKKwkJbGlrZSA9PiBxci9eXG5c UUNPUFkgcHVibGljLmZvcm1hdF9kaXJlY3RvcnkgKGEsIGIsIGMpIEZST00gc3RkaW47L3htCisJ fSwKKworCWZvcm1hdF90YXIgPT4geworCQlzZXR1cF9zcWwgPT4gIkNSRUFURSBUQUJMRSBmb3Jt YXRfdGFyKGEgaW50LCBiIGJvb2xlYW4sIGMgdGV4dCk7CisJCUlOU0VSVCBJTlRPIGZvcm1hdF90 YXIgVkFMVUVTICgxLCBmYWxzZSwgJ25hbWUzJyksICgyLCB0cnVlLCAnbmFtZTQnKTsiLAorCQlk dW1wX2NtZCA9PiBbCisJCQkncGdfZHVtcGFsbCcsCisJCQknLS1mb3JtYXQnID0+ICd0YXInLAor CQkJJy0tZmlsZScgPT4gIiR0ZW1wZGlyL2Zvcm1hdF90YXIiLAorCQldLAorCQlyZXN0b3JlX2Nt ZCA9PiBbCisJCQkncGdfcmVzdG9yZScsICctQycsCisJCQknLS1mb3JtYXQnID0+ICd0YXInLAor CQkJJy0tZmlsZScgPT4gIiR0ZW1wZGlyL2Zvcm1hdF90YXIuc3FsIiwKKwkJCSIkdGVtcGRpci9m b3JtYXRfdGFyIiwKKwkJXSwKKwkJbGlrZSA9PiBxci9eXG5cUUNPUFkgcHVibGljLmZvcm1hdF90 YXIgKGEsIGIsIGMpIEZST00gc3RkaW47L3htCisJfSwKKworCWZvcm1hdF9jdXN0b20gPT4gewor CQlzZXR1cF9zcWwgPT4gIkNSRUFURSBUQUJMRSBmb3JtYXRfY3VzdG9tKGEgaW50LCBiIGJvb2xl YW4sIGMgdGV4dCk7CisJCUlOU0VSVCBJTlRPIGZvcm1hdF9jdXN0b20gVkFMVUVTICgxLCBmYWxz ZSwgJ25hbWU1JyksICgyLCB0cnVlLCAnbmFtZTYnKTsiLAorCQlkdW1wX2NtZCA9PiBbCisJCQkn cGdfZHVtcGFsbCcsCisJCQknLS1mb3JtYXQnID0+ICdjdXN0b20nLAorCQkJJy0tZmlsZScgPT4g IiR0ZW1wZGlyL2Zvcm1hdF9jdXN0b20iLAorCQldLAorCQlyZXN0b3JlX2NtZCA9PiBbCisJCQkn cGdfcmVzdG9yZScsICctQycsCisJCQknLS1mb3JtYXQnID0+ICdjdXN0b20nLAorCQkJJy0tZmls ZScgPT4gIiR0ZW1wZGlyL2Zvcm1hdF9jdXN0b20uc3FsIiwKKwkJCSIkdGVtcGRpci9mb3JtYXRf Y3VzdG9tIiwKKwkJXSwKKwkJbGlrZSA9PiBxci9eIFxuXFFDT1BZIHB1YmxpYy5mb3JtYXRfY3Vz dG9tIChhLCBiLCBjKSBGUk9NIHN0ZGluOy94bQorCX0sCisKKwlkdW1wX2dsb2JhbHNfb25seSA9 PiB7CisJCXNldHVwX3NxbCA9PiAiQ1JFQVRFIFRBQkxFIGZvcm1hdF9kaXIoYSBpbnQsIGIgYm9v bGVhbiwgYyB0ZXh0KTsKKwkJSU5TRVJUIElOVE8gZm9ybWF0X2RpciBWQUxVRVMgKDEsIGZhbHNl LCAnbmFtZTUnKSwgKDIsIHRydWUsICduYW1lNicpOyIsCisJCWR1bXBfY21kID0+IFsKKwkJCSdw Z19kdW1wYWxsJywKKwkJCSctLWZvcm1hdCcgPT4gJ2RpcmVjdG9yeScsCisJCQknLS1nbG9iYWxz LW9ubHknLAorCQkJJy0tZmlsZScgPT4gIiR0ZW1wZGlyL2R1bXBfZ2xvYmFsc19vbmx5IiwKKwkJ XSwKKwkJcmVzdG9yZV9jbWQgPT4gWworCQkJJ3BnX3Jlc3RvcmUnLCAnLUMnLCAnLS1nbG9iYWxz LW9ubHknLAorCQkJJy0tZm9ybWF0JyA9PiAnZGlyZWN0b3J5JywKKwkJCSctLWZpbGUnID0+ICIk dGVtcGRpci9kdW1wX2dsb2JhbHNfb25seS5zcWwiLAorCQkJIiR0ZW1wZGlyL2R1bXBfZ2xvYmFs c19vbmx5IiwKKwkJXSwKKwkJbGlrZSA9PiBxci8KKyAgICAgICAgICAgIF5ccypcUUNSRUFURSBS T0xFIGR1bXBhbGw7XEVccypcbgorCQkJL3htCisJfSwpOworCisjIEZpcnN0IGV4ZWN1dGUgdGhl IHNldHVwX3NxbAorZm9yZWFjaCBteSAkcnVuIChzb3J0IGtleXMgJXBnZHVtcGFsbF9ydW5zKQor eworCWlmICgkcGdkdW1wYWxsX3J1bnN7JHJ1bn0tPntzZXR1cF9zcWx9KQorCXsKKwkJJG5vZGUt PnNhZmVfcHNxbCgkcnVuX2RiLCAkcGdkdW1wYWxsX3J1bnN7JHJ1bn0tPntzZXR1cF9zcWx9KTsK Kwl9Cit9CisKKyMgRXhlY3V0ZSB0aGUgdGVzdHMKK2ZvcmVhY2ggbXkgJHJ1biAoc29ydCBrZXlz ICVwZ2R1bXBhbGxfcnVucykKK3sKKwkjIENyZWF0ZSBhIG5ldyB0YXJnZXQgY2x1c3RlciB0byBw Z19yZXN0b3JlIGVhY2ggdGVzdCBjYXNlIHJ1biBzbyB0aGF0IHdlCisJIyBkb24ndCBuZWVkIHRv IHRha2UgY2FyZSBvZiB0aGUgY2xlYW51cCBmcm9tIHRoZSB0YXJnZXQgY2x1c3RlciBhZnRlciBl YWNoCisJIyBydW4uCisJbXkgJHRhcmdldF9ub2RlID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rl ci0+bmV3KCJ0YXJnZXRfJHJ1biIpOworCSR0YXJnZXRfbm9kZS0+aW5pdDsKKwkkdGFyZ2V0X25v ZGUtPnN0YXJ0OworCisJIyBEdW1wYWxsIGZyb20gbm9kZSBjbHVzdGVyLgorCSRub2RlLT5jb21t YW5kX29rKFxAeyAkcGdkdW1wYWxsX3J1bnN7JHJ1bn0tPntkdW1wX2NtZH0gfSwKKwkJIiRydW46 IHBnX2R1bXBhbGwgcnVucyIpOworCisJIyBSZXN0b3JlIHRoZSBkdW1wIG9uICJ0YXJnZXRfbm9k ZSIgY2x1c3Rlci4KKwlteSBAcmVzdG9yZV9jbWQgPSAoCisJCUB7ICRwZ2R1bXBhbGxfcnVuc3sk cnVufS0+e3Jlc3RvcmVfY21kfSB9LAorCQknLS1ob3N0JywgJHRhcmdldF9ub2RlLT5ob3N0LCAn LS1wb3J0JywgJHRhcmdldF9ub2RlLT5wb3J0KTsKKworCW15ICgkc3Rkb3V0LCAkc3RkZXJyKSA9 IHJ1bl9jb21tYW5kKFxAcmVzdG9yZV9jbWQpOworCisJIyBwZ19yZXN0b3JlIC0tZmlsZSBvdXRw dXQgZmlsZS4KKwlteSAkb3V0cHV0X2ZpbGUgPSBzbHVycF9maWxlKCIkdGVtcGRpci8ke3J1bn0u c3FsIik7CisKKwlpZiAoICAgISgkcGdkdW1wYWxsX3J1bnN7JHJ1bn0tPntsaWtlfSkKKwkJJiYg ISgkcGdkdW1wYWxsX3J1bnN7JHJ1bn0tPnt1bmxpa2V9KSkKKwl7CisJCWRpZSAibWlzc2luZyBc Imxpa2VcIiBvciBcInVubGlrZVwiIGluIHRlc3QgXCIkcnVuXCIiOworCX0KKworCWlmICgkcGdk dW1wYWxsX3J1bnN7JHJ1bn0tPntsaWtlfSkKKwl7CisJCWxpa2UoJG91dHB1dF9maWxlLCAkcGdk dW1wYWxsX3J1bnN7JHJ1bn0tPntsaWtlfSwgInNob3VsZCBkdW1wICRydW4iKTsKKwl9CisKKwlp ZiAoJHBnZHVtcGFsbF9ydW5zeyRydW59LT57dW5saWtlfSkKKwl7CisJCXVubGlrZSgKKwkJCSRv dXRwdXRfZmlsZSwKKwkJCSRwZ2R1bXBhbGxfcnVuc3skcnVufS0+e3VubGlrZX0sCisJCQkic2hv dWxkIG5vdCBkdW1wICRydW4iKTsKKwl9Cit9CisKKyMgU29tZSBuZWdhdGl2ZSB0ZXN0IGNhc2Ug d2l0aCBkdW1wIG9mIHBnX2R1bXBhbGwgYW5kIHJlc3RvcmUgdXNpbmcgcGdfcmVzdG9yZQorIyB0 ZXN0IGNhc2UgMTogd2hlbiAtQyBpcyBub3QgdXNlZCBpbiBwZ19yZXN0b3JlIHdpdGggZHVtcCBv ZiBwZ19kdW1wYWxsCiskbm9kZS0+Y29tbWFuZF9mYWlsc19saWtlKAorCVsKKwkJJ3BnX3Jlc3Rv cmUnLAorCQkiJHRlbXBkaXIvZm9ybWF0X2N1c3RvbSIsCisJCSctLWZvcm1hdCcgPT4gJ2N1c3Rv bScsCisJCSctLWZpbGUnID0+ICIkdGVtcGRpci9lcnJvcl90ZXN0LnNxbCIsCisJXSwKKwlxci9c UXBnX3Jlc3RvcmU6IGVycm9yOiBvcHRpb24gLUNcLy0tY3JlYXRlIG11c3QgYmUgc3BlY2lmaWVk IHdoZW4gcmVzdG9yaW5nIGFuIGFyY2hpdmUgY3JlYXRlZCBieSBwZ19kdW1wYWxsXEUvLAorCSdX aGVuIC1DIGlzIG5vdCB1c2VkIGluIHBnX3Jlc3RvcmUgd2l0aCBkdW1wIG9mIHBnX2R1bXBhbGwn KTsKKworIyB0ZXN0IGNhc2UgMjogV2hlbiAtLWxpc3Qgb3B0aW9uIGlzIHVzZWQgd2l0aCBkdW1w IG9mIHBnX2R1bXBhbGwKKyRub2RlLT5jb21tYW5kX2ZhaWxzX2xpa2UoCisJWworCQkncGdfcmVz dG9yZScsCisJCSIkdGVtcGRpci9mb3JtYXRfY3VzdG9tIiwgJy1DJywKKwkJJy0tZm9ybWF0JyA9 PiAnY3VzdG9tJywKKwkJJy0tbGlzdCcsCisJCSctLWZpbGUnID0+ICIkdGVtcGRpci9lcnJvcl90 ZXN0LnNxbCIsCisJXSwKKwlxci9cUXBnX3Jlc3RvcmU6IGVycm9yOiBvcHRpb24gLWxcLy0tbGlz dCBjYW5ub3QgYmUgdXNlZCB3aGVuIHJlc3RvcmluZyBhbiBhcmNoaXZlIGNyZWF0ZWQgYnkgcGdf ZHVtcGFsbFxFLywKKwknV2hlbiAtLWxpc3QgaXMgdXNlZCBpbiBwZ19yZXN0b3JlIHdpdGggZHVt cCBvZiBwZ19kdW1wYWxsJyk7CisKKyMgdGVzdCBjYXNlIDM6IFdoZW4gbm9uLWV4aXN0IGRhdGFi YXNlIGlzIGdpdmVuIHdpdGggLWQgb3B0aW9uCiskbm9kZS0+Y29tbWFuZF9mYWlsc19saWtlKAor CVsKKwkJJ3BnX3Jlc3RvcmUnLAorCQkiJHRlbXBkaXIvZm9ybWF0X2N1c3RvbSIsICctQycsCisJ CSctLWZvcm1hdCcgPT4gJ2N1c3RvbScsCisJCSctZCcgPT4gJ2RicHEnLAorCV0sCisJcXIvXFFG QVRBTDogIGRhdGFiYXNlICJkYnBxIiBkb2VzIG5vdCBleGlzdFxFLywKKwknV2hlbiBub24tZXhp c3RlbnQgZGF0YWJhc2UgaXMgZ2l2ZW4gd2l0aCAtZCBvcHRpb24gaW4gcGdfcmVzdG9yZSB3aXRo IGR1bXAgb2YgcGdfZHVtcGFsbCcKKyk7CisKKyRub2RlLT5zdG9wKCdmYXN0Jyk7CisKK2RvbmVf dGVzdGluZygpOwotLSAKMi40Ny4zCgo= --0000000000005fec59064886ea8a--