Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1oRfg3-0003ri-Ls for pgsql-hackers@arkaria.postgresql.org; Fri, 26 Aug 2022 20:11:41 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1oRfg2-0001Iu-G3 for pgsql-hackers@arkaria.postgresql.org; Fri, 26 Aug 2022 20:11:38 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1oRfg1-0001Gd-9M for pgsql-hackers@lists.postgresql.org; Fri, 26 Aug 2022 20:11:38 +0000 Received: from mail.postgrespro.ru ([93.174.131.139]) by makus.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1oRffo-0002v4-41 for pgsql-hackers@lists.postgresql.org; Fri, 26 Aug 2022 20:11:36 +0000 Received: from [192.168.8.199] (unknown [93.174.131.141]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client did not present a certificate) by mail.postgrespro.ru (Postfix) with ESMTPSA id 5ED8921C3BC9; Fri, 26 Aug 2022 23:11:20 +0300 (MSK) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mail; t=1661544681; bh=qtztbcdcjMQi1YTWAS7km6Th+0UJIWbSMiyJLzBjiDE=; h=Date:Subject:To:Cc:References:From:In-Reply-To; b=QPO6soUrc8nyG42SXuJRfMz60Me0tnxJK+JLm+s1Q7o+J4mpf99jG9KJonlqkFBgv UhUB53qSvRuByqLrm8xpeZp+V0FiunRpY4smb6dYva5+rzDdftr/CK4Ri+PdZy4MRK GEykDlJILhnTdUTmESBX7bxvj14zf8g4CfzztBrg= Content-Type: multipart/mixed; boundary="------------EgcrP7oVVxLbsS1r3ExJxL0B" Message-ID: <6ba7ba7b-9fdd-674f-c227-59a59e0de1ec@postgrespro.ru> Date: Fri, 26 Aug 2022 23:11:14 +0300 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.11.0 Subject: Re: SQL/JSON features for v15 Content-Language: en-US To: Andrew Dunstan , "Jonathan S. Katz" , Tom Lane Cc: Robert Haas , Andres Freund , PostgreSQL Hackers , Michael Paquier , John Naylor , Amit Langote References: <20220816021425.5sa6gx67zmpou3bc@awork3.anarazel.de> <8d0ffc54-469a-ffab-68a3-8b547e24a08d@postgresql.org> <7d83684b-7932-9f29-400b-0beedfafcdd4@postgrespro.ru> <69022273-e7e3-6d1a-10f8-d1b4740e4b97@postgresql.org> <92cab50c-152b-84fc-fd49-12b936113a3d@postgresql.org> <692364.1661267311@sss.pgh.pa.us> <35468585-e18f-3be6-a228-4ec478f796ac@postgresql.org> <716936.1661275451@sss.pgh.pa.us> <3596205e-ce1e-6959-7559-6ddd67f8294b@postgrespro.ru> <3f8d4c2b-1e58-bf19-580e-64e9755897ef@postgrespro.ru> <072a47f0-7a39-2266-5f90-1178a3860be1@dunslane.net> <1992b190-f00b-8435-b561-e3c6ac450482@postgresql.org> <59660a0b-7b7a-75ab-75c4-b6d53fbda5f6@dunslane.net> From: Nikita Glukhov In-Reply-To: <59660a0b-7b7a-75ab-75c4-b6d53fbda5f6@dunslane.net> List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------EgcrP7oVVxLbsS1r3ExJxL0B Content-Type: multipart/alternative; boundary="------------ilB0BA93YpzQ8YF302jceO9m" --------------ilB0BA93YpzQ8YF302jceO9m Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Hi, On 26.08.2022 22:25, Andrew Dunstan wrote: > On 2022-08-24 We 20:05, Nikita Glukhov wrote: >> v8 - is a highly WIP patch, which I failed to finish today. >> Even some test cases fail now, and they simply show unfinished >> things like casts to bytea (they can be simply removed) and missing >> safe input functions. > Thanks for your work, please keep going. I have completed in v9 all the things I previously planned: - Added missing safe I/O and type conversion functions for datetime, float4, varchar, bpchar. This introduces a lot of boilerplate code for returning errors and also maybe adds some overhead. - Added JSON_QUERY coercion to UTF8 bytea using pg_convert_to(). - Added immutability checks that were missed with elimination of coercion expressions. Coercions text::datetime, datetime1::datetime2 and even datetime::text for some datetime types are mutable. datetime::text can be made immutable by passing ISO date style into output functions (like in jsonpath). - Disabled non-Const expressions in DEFAULT ON EMPTY in non ERROR ON ERROR case. Non-constant expressions are tried to evaluate into Const directly inside transformExpr(). Maybe it would be better to simply remove DEFAULT ON EMPTY. It is possible to easily split this patch into several subpatches, I will do it if needed. -- Nikita Glukhov Postgres Professional:http://www.postgrespro.com The Russian Postgres Company --------------ilB0BA93YpzQ8YF302jceO9m Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: 7bit

Hi,

On 26.08.2022 22:25, Andrew Dunstan wrote:
On 2022-08-24 We 20:05, Nikita Glukhov wrote:
v8 - is a highly WIP patch, which I failed to finish today.
Even some test cases fail now, and they simply show unfinished
things like casts to bytea (they can be simply removed) and missing
safe input functions.
Thanks for your work, please keep going.
I have completed in v9 all the things I previously planned:

 - Added missing safe I/O and type conversion functions for 
   datetime, float4, varchar, bpchar.  This introduces a lot 
   of boilerplate code for returning errors and also maybe 
   adds some overhead.

 - Added JSON_QUERY coercion to UTF8 bytea using pg_convert_to().

 - Added immutability checks that were missed with elimination 
   of coercion expressions.  
   Coercions text::datetime, datetime1::datetime2 and even 
   datetime::text for some datetime types are mutable.
   datetime::text can be made immutable by passing ISO date 
   style into output functions (like in jsonpath).

 - Disabled non-Const expressions in DEFAULT ON EMPTY in non 
   ERROR ON ERROR case.  Non-constant expressions are tried to 
   evaluate into Const directly inside transformExpr().
   Maybe it would be better to simply remove DEFAULT ON EMPTY.


It is possible to easily split this patch into several subpatches, 
I will do it if needed.

-- 
Nikita Glukhov
Postgres Professional: http://www.postgrespro.com
The Russian Postgres Company

--------------ilB0BA93YpzQ8YF302jceO9m-- --------------EgcrP7oVVxLbsS1r3ExJxL0B Content-Type: text/x-patch; charset=UTF-8; name="v9-0001-Remove-subtransactions-in-SQL-JSON-execution.patch" Content-Disposition: attachment; filename*0="v9-0001-Remove-subtransactions-in-SQL-JSON-execution.patch" Content-Transfer-Encoding: base64 RnJvbSA5NTQxN2MzMzdjMmFiNjg5OWRmMjgwMTc2NDFlNTM0MmNiOTI1YTExIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBOaWtpdGEgR2x1a2hvdiA8bi5nbHVob3ZAcG9zdGdy ZXNwcm8ucnU+CkRhdGU6IEZyaSwgMjYgQXVnIDIwMjIgMjI6NDY6MDIgKzAzMDAKU3ViamVj dDogW1BBVENIIHY5XSBSZW1vdmUgc3VidHJhbnNhY3Rpb25zIGluIFNRTC9KU09OIGV4ZWN1 dGlvbgoKLS0tCiBjb250cmliL2FkbWlucGFjay9hZG1pbnBhY2suYyAgICAgICAgICAgICAg IHwgICAyICstCiBzcmMvYmFja2VuZC9leGVjdXRvci9leGVjRXhwci5jICAgICAgICAgICAg IHwgIDg0ICstCiBzcmMvYmFja2VuZC9leGVjdXRvci9leGVjRXhwckludGVycC5jICAgICAg IHwgOTQ2ICsrKysrKysrKysrKy0tLS0tLS0tCiBzcmMvYmFja2VuZC9qaXQvbGx2bS9sbHZt aml0X2V4cHIuYyAgICAgICAgIHwgICAyICstCiBzcmMvYmFja2VuZC9qaXQvbGx2bS9sbHZt aml0X3R5cGVzLmMgICAgICAgIHwgICAyICstCiBzcmMvYmFja2VuZC9ub2Rlcy9ub2RlRnVu Y3MuYyAgICAgICAgICAgICAgIHwgIDkxICstCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRp bC9jbGF1c2VzLmMgICAgICAgIHwgIDczICstCiBzcmMvYmFja2VuZC9wYXJzZXIvcGFyc2Vf ZXhwci5jICAgICAgICAgICAgIHwgMjI2ICsrLS0tCiBzcmMvYmFja2VuZC91dGlscy9hZHQv Ym9vbC5jICAgICAgICAgICAgICAgIHwgIDMxICstCiBzcmMvYmFja2VuZC91dGlscy9hZHQv ZGF0ZS5jICAgICAgICAgICAgICAgIHwgMjc3ICsrKystLQogc3JjL2JhY2tlbmQvdXRpbHMv YWR0L2RhdGV0aW1lLmMgICAgICAgICAgICB8ICAxNiArLQogc3JjL2JhY2tlbmQvdXRpbHMv YWR0L2Zsb2F0LmMgICAgICAgICAgICAgICB8ICA3MCArLQogc3JjL2JhY2tlbmQvdXRpbHMv YWR0L2pzb25iLmMgICAgICAgICAgICAgICB8ICAyNiArLQogc3JjL2JhY2tlbmQvdXRpbHMv YWR0L2pzb25wYXRoLmMgICAgICAgICAgICB8ICAgOCArLQogc3JjL2JhY2tlbmQvdXRpbHMv YWR0L251bWVyaWMuYyAgICAgICAgICAgICB8IDIzMCArKystLQogc3JjL2JhY2tlbmQvdXRp bHMvYWR0L251bXV0aWxzLmMgICAgICAgICAgICB8ICAyMCArLQogc3JjL2JhY2tlbmQvdXRp bHMvYWR0L3RpbWVzdGFtcC5jICAgICAgICAgICB8IDEyNiArKy0KIHNyYy9iYWNrZW5kL3V0 aWxzL21pc2MvZ3VjLmMgICAgICAgICAgICAgICAgfCAgIDIgKy0KIHNyYy9pbmNsdWRlL2V4 ZWN1dG9yL2V4ZWNFeHByLmggICAgICAgICAgICAgfCAgNDkgKy0KIHNyYy9pbmNsdWRlL25v ZGVzL3ByaW1ub2Rlcy5oICAgICAgICAgICAgICAgfCAgMzYgKy0KIHNyYy9pbmNsdWRlL29w dGltaXplci9jbGF1c2VzLmggICAgICAgICAgICAgfCAgIDIgKwogc3JjL2luY2x1ZGUvdXRp bHMvYnVpbHRpbnMuaCAgICAgICAgICAgICAgICB8ICAgMiArCiBzcmMvaW5jbHVkZS91dGls cy9kYXRlLmggICAgICAgICAgICAgICAgICAgIHwgIDEzICsKIHNyYy9pbmNsdWRlL3V0aWxz L2RhdGV0aW1lLmggICAgICAgICAgICAgICAgfCAgIDYgKy0KIHNyYy9pbmNsdWRlL3V0aWxz L2Zsb2F0LmggICAgICAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL2luY2x1ZGUvdXRpbHMv anNvbmIuaCAgICAgICAgICAgICAgICAgICB8ICAgMiArCiBzcmMvaW5jbHVkZS91dGlscy9q c29ucGF0aC5oICAgICAgICAgICAgICAgIHwgICAzICstCiBzcmMvaW5jbHVkZS91dGlscy9u dW1lcmljLmggICAgICAgICAgICAgICAgIHwgICA2ICstCiBzcmMvaW5jbHVkZS91dGlscy90 aW1lc3RhbXAuaCAgICAgICAgICAgICAgIHwgICA2ICsKIHNyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvanNvbmJfc3FsanNvbi5vdXQgfCAzMjcgKysrKystLQogc3JjL3Rlc3QvcmVncmVz cy9zcWwvanNvbmJfc3FsanNvbi5zcWwgICAgICB8ICA3MiArLQogMzEgZmlsZXMgY2hhbmdl ZCwgMTcwNCBpbnNlcnRpb25zKCspLCAxMDUzIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBh L2NvbnRyaWIvYWRtaW5wYWNrL2FkbWlucGFjay5jIGIvY29udHJpYi9hZG1pbnBhY2svYWRt aW5wYWNrLmMKaW5kZXggMDNhZGRmMWRjNWYuLjRiZjc5NWQ0MmE0IDEwMDY0NAotLS0gYS9j b250cmliL2FkbWlucGFjay9hZG1pbnBhY2suYworKysgYi9jb250cmliL2FkbWlucGFjay9h ZG1pbnBhY2suYwpAQCAtNTcxLDcgKzU3MSw3IEBAIHBnX2xvZ2Rpcl9sc19pbnRlcm5hbChG dW5jdGlvbkNhbGxJbmZvIGZjaW5mbykKIAkJaWYgKFBhcnNlRGF0ZVRpbWUodGltZXN0YW1w YnVmLCBsb3dzdHIsIE1BWERBVEVMRU4sIGZpZWxkLCBmdHlwZSwgTUFYREFURUZJRUxEUywg Jm5mKSkKIAkJCWNvbnRpbnVlOwogCi0JCWlmIChEZWNvZGVEYXRlVGltZShmaWVsZCwgZnR5 cGUsIG5mLCAmZHR5cGUsICZkYXRlLCAmZnNlYywgJnR6KSkKKwkJaWYgKERlY29kZURhdGVU aW1lKGZpZWxkLCBmdHlwZSwgbmYsICZkdHlwZSwgJmRhdGUsICZmc2VjLCAmdHosIHRydWUp KQogCQkJY29udGludWU7CiAKIAkJLyogU2VlbXMgdGhlIHRpbWVzdGFtcCBpcyBPSzsgcHJl cGFyZSBhbmQgcmV0dXJuIHR1cGxlICovCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVj dXRvci9leGVjRXhwci5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0V4cHIuYwppbmRl eCBkMGE1N2M3YWFlZS4uNTU4OTkyZGY5MDkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4 ZWN1dG9yL2V4ZWNFeHByLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0V4cHIu YwpAQCAtMjU2MSw1OCArMjU2MSw0MSBAQCBFeGVjSW5pdEV4cHJSZWMoRXhwciAqbm9kZSwg RXhwclN0YXRlICpzdGF0ZSwKIAkJY2FzZSBUX0pzb25FeHByOgogCQkJewogCQkJCUpzb25F eHByICAgKmpleHByID0gY2FzdE5vZGUoSnNvbkV4cHIsIG5vZGUpOwotCQkJCUpzb25FeHBy U3RhdGUgKmpzZXN0YXRlID0gcGFsbG9jMChzaXplb2YoSnNvbkV4cHJTdGF0ZSkpOworCQkJ CUpzb25FeHByU3RhdGUgKmpzZXN0YXRlOwogCQkJCUxpc3RDZWxsICAgKmFyZ2V4cHJsYzsK IAkJCQlMaXN0Q2VsbCAgICphcmduYW1lbGM7CiAKLQkJCQlzY3JhdGNoLm9wY29kZSA9IEVF T1BfSlNPTkVYUFI7Ci0JCQkJc2NyYXRjaC5kLmpzb25leHByLmpzZXN0YXRlID0ganNlc3Rh dGU7CisJCQkJLyogSlNPTl9UQUJMRSBwcmV1ZG8tZnVuY3Rpb24gcmV0dXJucyBjb250ZXh0 IGl0ZW0gYXMgYSByZXN1bHQgKi8KKwkJCQlpZiAoamV4cHItPm9wID09IEpTT05fVEFCTEVf T1ApCisJCQkJeworCQkJCQlFeGVjSW5pdEV4cHJSZWMoKEV4cHIgKikgamV4cHItPmZvcm1h dHRlZF9leHByLCBzdGF0ZSwKKwkJCQkJCQkJCXJlc3YsIHJlc251bGwpOworCQkJCQlicmVh azsKKwkJCQl9CiAKKwkJCQlqc2VzdGF0ZSA9IHBhbGxvYzAoc2l6ZW9mKEpzb25FeHByU3Rh dGUpKTsKIAkJCQlqc2VzdGF0ZS0+anNleHByID0gamV4cHI7CiAKLQkJCQlqc2VzdGF0ZS0+ Zm9ybWF0dGVkX2V4cHIgPQotCQkJCQlwYWxsb2Moc2l6ZW9mKCpqc2VzdGF0ZS0+Zm9ybWF0 dGVkX2V4cHIpKTsKKwkJCQlzY3JhdGNoLm9wY29kZSA9IEVFT1BfSlNPTkVYUFI7CisJCQkJ c2NyYXRjaC5kLmpzb25leHByLmpzZXN0YXRlID0ganNlc3RhdGU7CiAKIAkJCQlFeGVjSW5p dEV4cHJSZWMoKEV4cHIgKikgamV4cHItPmZvcm1hdHRlZF9leHByLCBzdGF0ZSwKLQkJCQkJ CQkJJmpzZXN0YXRlLT5mb3JtYXR0ZWRfZXhwci0+dmFsdWUsCi0JCQkJCQkJCSZqc2VzdGF0 ZS0+Zm9ybWF0dGVkX2V4cHItPmlzbnVsbCk7Ci0KLQkJCQlqc2VzdGF0ZS0+cGF0aHNwZWMg PQotCQkJCQlwYWxsb2Moc2l6ZW9mKCpqc2VzdGF0ZS0+cGF0aHNwZWMpKTsKKwkJCQkJCQkJ JmpzZXN0YXRlLT5mb3JtYXR0ZWRfZXhwci52YWx1ZSwKKwkJCQkJCQkJJmpzZXN0YXRlLT5m b3JtYXR0ZWRfZXhwci5pc251bGwpOwogCiAJCQkJRXhlY0luaXRFeHByUmVjKChFeHByICop IGpleHByLT5wYXRoX3NwZWMsIHN0YXRlLAotCQkJCQkJCQkmanNlc3RhdGUtPnBhdGhzcGVj LT52YWx1ZSwKLQkJCQkJCQkJJmpzZXN0YXRlLT5wYXRoc3BlYy0+aXNudWxsKTsKLQotCQkJ CWpzZXN0YXRlLT5yZXNfZXhwciA9Ci0JCQkJCXBhbGxvYyhzaXplb2YoKmpzZXN0YXRlLT5y ZXNfZXhwcikpOwotCi0JCQkJanNlc3RhdGUtPnJlc3VsdF9leHByID0gamV4cHItPnJlc3Vs dF9jb2VyY2lvbgotCQkJCQk/IEV4ZWNJbml0RXhwcldpdGhDYXNlVmFsdWUoKEV4cHIgKikg amV4cHItPnJlc3VsdF9jb2VyY2lvbi0+ZXhwciwKLQkJCQkJCQkJCQkJCXN0YXRlLT5wYXJl bnQsCi0JCQkJCQkJCQkJCQkmanNlc3RhdGUtPnJlc19leHByLT52YWx1ZSwKLQkJCQkJCQkJ CQkJCSZqc2VzdGF0ZS0+cmVzX2V4cHItPmlzbnVsbCkKLQkJCQkJOiBOVUxMOworCQkJCQkJ CQkmanNlc3RhdGUtPnBhdGhzcGVjLnZhbHVlLAorCQkJCQkJCQkmanNlc3RhdGUtPnBhdGhz cGVjLmlzbnVsbCk7CiAKLQkJCQlqc2VzdGF0ZS0+ZGVmYXVsdF9vbl9lbXB0eSA9ICFqZXhw ci0+b25fZW1wdHkgPyBOVUxMIDoKLQkJCQkJRXhlY0luaXRFeHByKChFeHByICopIGpleHBy LT5vbl9lbXB0eS0+ZGVmYXVsdF9leHByLAotCQkJCQkJCQkgc3RhdGUtPnBhcmVudCk7CisJ CQkJaWYgKGpleHByLT5vbl9lbXB0eSkKKwkJCQkJanNlc3RhdGUtPmRlZmF1bHRfb25fZW1w dHkgPQorCQkJCQkJRXhlY0luaXRFeHByKChFeHByICopIGpleHByLT5vbl9lbXB0eS0+ZGVm YXVsdF9leHByLAorCQkJCQkJCQkJIHN0YXRlLT5wYXJlbnQpOwogCiAJCQkJanNlc3RhdGUt PmRlZmF1bHRfb25fZXJyb3IgPQogCQkJCQlFeGVjSW5pdEV4cHIoKEV4cHIgKikgamV4cHIt Pm9uX2Vycm9yLT5kZWZhdWx0X2V4cHIsCiAJCQkJCQkJCSBzdGF0ZS0+cGFyZW50KTsKIAot CQkJCWlmIChqZXhwci0+b21pdF9xdW90ZXMgfHwKLQkJCQkJKGpleHByLT5yZXN1bHRfY29l cmNpb24gJiYgamV4cHItPnJlc3VsdF9jb2VyY2lvbi0+dmlhX2lvKSkKLQkJCQl7Ci0JCQkJ CU9pZAkJCXR5cGlucHV0OwotCi0JCQkJCS8qIGxvb2t1cCB0aGUgcmVzdWx0IHR5cGUncyBp bnB1dCBmdW5jdGlvbiAqLwotCQkJCQlnZXRUeXBlSW5wdXRJbmZvKGpleHByLT5yZXR1cm5p bmctPnR5cGlkLCAmdHlwaW5wdXQsCi0JCQkJCQkJCQkgJmpzZXN0YXRlLT5pbnB1dC50eXBp b3BhcmFtKTsKLQkJCQkJZm1ncl9pbmZvKHR5cGlucHV0LCAmanNlc3RhdGUtPmlucHV0LmZ1 bmMpOwotCQkJCX0KLQogCQkJCWpzZXN0YXRlLT5hcmdzID0gTklMOwogCiAJCQkJZm9yYm90 aChhcmdleHBybGMsIGpleHByLT5wYXNzaW5nX3ZhbHVlcywKQEAgLTI2MzYsMzUgKzI2MTks OCBAQCBFeGVjSW5pdEV4cHJSZWMoRXhwciAqbm9kZSwgRXhwclN0YXRlICpzdGF0ZSwKIAkJ CQkJCWxhcHBlbmQoanNlc3RhdGUtPmFyZ3MsIHZhcik7CiAJCQkJfQogCi0JCQkJanNlc3Rh dGUtPmNhY2hlID0gTlVMTDsKLQotCQkJCWlmIChqZXhwci0+Y29lcmNpb25zKQotCQkJCXsK LQkJCQkJSnNvbkNvZXJjaW9uICoqY29lcmNpb247Ci0JCQkJCXN0cnVjdCBKc29uQ29lcmNp b25TdGF0ZSAqY3N0YXRlOwotCQkJCQlEYXR1bQkgICAqY2FzZXZhbDsKLQkJCQkJYm9vbAkg ICAqY2FzZW51bGw7Ci0KLQkJCQkJanNlc3RhdGUtPmNvZXJjaW9uX2V4cHIgPQotCQkJCQkJ cGFsbG9jKHNpemVvZigqanNlc3RhdGUtPmNvZXJjaW9uX2V4cHIpKTsKLQotCQkJCQljYXNl dmFsID0gJmpzZXN0YXRlLT5jb2VyY2lvbl9leHByLT52YWx1ZTsKLQkJCQkJY2FzZW51bGwg PSAmanNlc3RhdGUtPmNvZXJjaW9uX2V4cHItPmlzbnVsbDsKLQotCQkJCQlmb3IgKGNzdGF0 ZSA9ICZqc2VzdGF0ZS0+Y29lcmNpb25zLm51bGwsCi0JCQkJCQkgY29lcmNpb24gPSAmamV4 cHItPmNvZXJjaW9ucy0+bnVsbDsKLQkJCQkJCSBjb2VyY2lvbiA8PSAmamV4cHItPmNvZXJj aW9ucy0+Y29tcG9zaXRlOwotCQkJCQkJIGNvZXJjaW9uKyssIGNzdGF0ZSsrKQotCQkJCQl7 Ci0JCQkJCQljc3RhdGUtPmNvZXJjaW9uID0gKmNvZXJjaW9uOwotCQkJCQkJY3N0YXRlLT5l c3RhdGUgPSAqY29lcmNpb24gPwotCQkJCQkJCUV4ZWNJbml0RXhwcldpdGhDYXNlVmFsdWUo KEV4cHIgKikgKCpjb2VyY2lvbiktPmV4cHIsCi0JCQkJCQkJCQkJCQkJICBzdGF0ZS0+cGFy ZW50LAotCQkJCQkJCQkJCQkJCSAgY2FzZXZhbCwgY2FzZW51bGwpIDogTlVMTDsKLQkJCQkJ fQotCQkJCX0KLQogCQkJCUV4cHJFdmFsUHVzaFN0ZXAoc3RhdGUsICZzY3JhdGNoKTsKKwog CQkJCWJyZWFrOwogCQkJfQogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9l eGVjRXhwckludGVycC5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0V4cHJJbnRlcnAu YwppbmRleCA2MzY3OTRjYTZmMS4uNDVjNjQ4ODE3YmEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL2V4ZWN1dG9yL2V4ZWNFeHBySW50ZXJwLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0 b3IvZXhlY0V4cHJJbnRlcnAuYwpAQCAtNzUsNiArNzUsNyBAQAogI2luY2x1ZGUgInV0aWxz L2RhdGUuaCIKICNpbmNsdWRlICJ1dGlscy9kYXR1bS5oIgogI2luY2x1ZGUgInV0aWxzL2V4 cGFuZGVkcmVjb3JkLmgiCisjaW5jbHVkZSAidXRpbHMvZmxvYXQuaCIKICNpbmNsdWRlICJ1 dGlscy9qc29uLmgiCiAjaW5jbHVkZSAidXRpbHMvanNvbmIuaCIKICNpbmNsdWRlICJ1dGls cy9qc29uZnVuY3MuaCIKQEAgLTE4NDQsNyArMTg0NSw3IEBAIEV4ZWNJbnRlcnBFeHByKEV4 cHJTdGF0ZSAqc3RhdGUsIEV4cHJDb250ZXh0ICplY29udGV4dCwgYm9vbCAqaXNudWxsKQog CQlFRU9fQ0FTRShFRU9QX0pTT05FWFBSKQogCQl7CiAJCQkvKiB0b28gY29tcGxleCBmb3Ig YW4gaW5saW5lIGltcGxlbWVudGF0aW9uICovCi0JCQlFeGVjRXZhbEpzb24oc3RhdGUsIG9w LCBlY29udGV4dCk7CisJCQlFeGVjRXZhbEpzb25FeHByKHN0YXRlLCBvcCwgZWNvbnRleHQp OwogCQkJRUVPX05FWFQoKTsKIAkJfQogCkBAIC00NzAwLDk2ICs0NzAxLDYgQEAgRXhlY0V2 YWxKc29uQ29uc3RydWN0b3IoRXhwclN0YXRlICpzdGF0ZSwgRXhwckV2YWxTdGVwICpvcCwK IAkqb3AtPnJlc251bGwgPSBpc251bGw7CiB9CiAKLS8qCi0gKiBFdmFsdWF0ZSBhIEpTT04g ZXJyb3IvZW1wdHkgYmVoYXZpb3IgcmVzdWx0LgotICovCi1zdGF0aWMgRGF0dW0KLUV4ZWNF dmFsSnNvbkJlaGF2aW9yKEV4cHJDb250ZXh0ICplY29udGV4dCwgSnNvbkJlaGF2aW9yICpi ZWhhdmlvciwKLQkJCQkJIEV4cHJTdGF0ZSAqZGVmYXVsdF9lc3RhdGUsIGJvb2wgKmlzX251 bGwpCi17Ci0JKmlzX251bGwgPSBmYWxzZTsKLQotCXN3aXRjaCAoYmVoYXZpb3ItPmJ0eXBl KQotCXsKLQkJY2FzZSBKU09OX0JFSEFWSU9SX0VNUFRZX0FSUkFZOgotCQkJcmV0dXJuIEpz b25iUEdldERhdHVtKEpzb25iTWFrZUVtcHR5QXJyYXkoKSk7Ci0KLQkJY2FzZSBKU09OX0JF SEFWSU9SX0VNUFRZX09CSkVDVDoKLQkJCXJldHVybiBKc29uYlBHZXREYXR1bShKc29uYk1h a2VFbXB0eU9iamVjdCgpKTsKLQotCQljYXNlIEpTT05fQkVIQVZJT1JfVFJVRToKLQkJCXJl dHVybiBCb29sR2V0RGF0dW0odHJ1ZSk7Ci0KLQkJY2FzZSBKU09OX0JFSEFWSU9SX0ZBTFNF OgotCQkJcmV0dXJuIEJvb2xHZXREYXR1bShmYWxzZSk7Ci0KLQkJY2FzZSBKU09OX0JFSEFW SU9SX05VTEw6Ci0JCWNhc2UgSlNPTl9CRUhBVklPUl9VTktOT1dOOgotCQljYXNlIEpTT05f QkVIQVZJT1JfRU1QVFk6Ci0JCQkqaXNfbnVsbCA9IHRydWU7Ci0JCQlyZXR1cm4gKERhdHVt KSAwOwotCi0JCWNhc2UgSlNPTl9CRUhBVklPUl9ERUZBVUxUOgotCQkJcmV0dXJuIEV4ZWNF dmFsRXhwcihkZWZhdWx0X2VzdGF0ZSwgZWNvbnRleHQsIGlzX251bGwpOwotCi0JCWRlZmF1 bHQ6Ci0JCQllbG9nKEVSUk9SLCAidW5yZWNvZ25pemVkIFNRTC9KU09OIGJlaGF2aW9yICVk IiwgYmVoYXZpb3ItPmJ0eXBlKTsKLQkJCXJldHVybiAoRGF0dW0pIDA7Ci0JfQotfQotCi0v KgotICogRXZhbHVhdGUgYSBjb2VyY2lvbiBvZiBhIEpTT04gaXRlbSB0byB0aGUgdGFyZ2V0 IHR5cGUuCi0gKi8KLXN0YXRpYyBEYXR1bQotRXhlY0V2YWxKc29uRXhwckNvZXJjaW9uKEV4 cHJFdmFsU3RlcCAqb3AsIEV4cHJDb250ZXh0ICplY29udGV4dCwKLQkJCQkJCSBEYXR1bSBy ZXMsIGJvb2wgKmlzTnVsbCwgdm9pZCAqcCwgYm9vbCAqZXJyb3IpCi17Ci0JRXhwclN0YXRl ICAqZXN0YXRlID0gcDsKLQlKc29uRXhwclN0YXRlICpqc2VzdGF0ZTsKLQotCWlmIChlc3Rh dGUpCQkJCQkvKiBjb2VyY2UgdXNpbmcgc3BlY2lmaWVkIGV4cHJlc3Npb24gKi8KLQkJcmV0 dXJuIEV4ZWNFdmFsRXhwcihlc3RhdGUsIGVjb250ZXh0LCBpc051bGwpOwotCi0JanNlc3Rh dGUgPSBvcC0+ZC5qc29uZXhwci5qc2VzdGF0ZTsKLQotCWlmIChqc2VzdGF0ZS0+anNleHBy LT5vcCAhPSBKU09OX0VYSVNUU19PUCkKLQl7Ci0JCUpzb25Db2VyY2lvbiAqY29lcmNpb24g PSBqc2VzdGF0ZS0+anNleHByLT5yZXN1bHRfY29lcmNpb247Ci0JCUpzb25FeHByICAgKmpl eHByID0ganNlc3RhdGUtPmpzZXhwcjsKLQkJSnNvbmIJICAgKmpiID0gKmlzTnVsbCA/IE5V TEwgOiBEYXR1bUdldEpzb25iUChyZXMpOwotCi0JCWlmICgoY29lcmNpb24gJiYgY29lcmNp b24tPnZpYV9pbykgfHwKLQkJCShqZXhwci0+b21pdF9xdW90ZXMgJiYgISppc051bGwgJiYK LQkJCSBKQl9ST09UX0lTX1NDQUxBUihqYikpKQotCQl7Ci0JCQkvKiBzdHJpcCBxdW90ZXMg YW5kIGNhbGwgdHlwaW5wdXQgZnVuY3Rpb24gKi8KLQkJCWNoYXIJICAgKnN0ciA9ICppc051 bGwgPyBOVUxMIDogSnNvbmJVbnF1b3RlKGpiKTsKLQotCQkJcmV0dXJuIElucHV0RnVuY3Rp b25DYWxsKCZqc2VzdGF0ZS0+aW5wdXQuZnVuYywgc3RyLAotCQkJCQkJCQkJIGpzZXN0YXRl LT5pbnB1dC50eXBpb3BhcmFtLAotCQkJCQkJCQkJIGpleHByLT5yZXR1cm5pbmctPnR5cG1v ZCk7Ci0JCX0KLQkJZWxzZSBpZiAoY29lcmNpb24gJiYgY29lcmNpb24tPnZpYV9wb3B1bGF0 ZSkKLQkJCXJldHVybiBqc29uX3BvcHVsYXRlX3R5cGUocmVzLCBKU09OQk9JRCwKLQkJCQkJ CQkJCSAgamV4cHItPnJldHVybmluZy0+dHlwaWQsCi0JCQkJCQkJCQkgIGpleHByLT5yZXR1 cm5pbmctPnR5cG1vZCwKLQkJCQkJCQkJCSAgJmpzZXN0YXRlLT5jYWNoZSwKLQkJCQkJCQkJ CSAgZWNvbnRleHQtPmVjeHRfcGVyX3F1ZXJ5X21lbW9yeSwKLQkJCQkJCQkJCSAgaXNOdWxs KTsKLQl9Ci0KLQlpZiAoanNlc3RhdGUtPnJlc3VsdF9leHByKQotCXsKLQkJanNlc3RhdGUt PnJlc19leHByLT52YWx1ZSA9IHJlczsKLQkJanNlc3RhdGUtPnJlc19leHByLT5pc251bGwg PSAqaXNOdWxsOwotCi0JCXJlcyA9IEV4ZWNFdmFsRXhwcihqc2VzdGF0ZS0+cmVzdWx0X2V4 cHIsIGVjb250ZXh0LCBpc051bGwpOwotCX0KLQotCXJldHVybiByZXM7Ci19Ci0KIC8qCiAg KiBFdmFsdWF0ZSBhIEpTT04gcGF0aCB2YXJpYWJsZSBjYWNoaW5nIGNvbXB1dGVkIHZhbHVl LgogICovCkBAIC00ODQ0LDg0ICs0NzU1LDQzOCBAQCBFdmFsSnNvblBhdGhWYXIodm9pZCAq Y3h0LCBjaGFyICp2YXJOYW1lLCBpbnQgdmFyTmFtZUxlbiwKIH0KIAogLyoKLSAqIFByZXBh cmUgU1FML0pTT04gaXRlbSBjb2VyY2lvbiB0byB0aGUgb3V0cHV0IHR5cGUuIFJldHVybmVk IGEgZGF0dW0gb2YgdGhlCi0gKiBjb3JyZXNwb25kaW5nIFNRTCB0eXBlIGFuZCBhIHBvaW50 ZXIgdG8gdGhlIGNvZXJjaW9uIHN0YXRlLgorICogQ2hlY2sgd2hldGhlciB3ZSBuZWVkIHRv IG92ZXJyaWRlIGRlZmF1bHQgY29lcmNpb24gaW4KKyAqIEpTT05fUVVFUlkoT01JVCBRVU9U RVMpIGNhc2UuCiAgKi8KLURhdHVtCi1FeGVjUHJlcGFyZUpzb25JdGVtQ29lcmNpb24oSnNv bmJWYWx1ZSAqaXRlbSwKLQkJCQkJCQlKc29uUmV0dXJuaW5nICpyZXR1cm5pbmcsCi0JCQkJ CQkJc3RydWN0IEpzb25Db2VyY2lvbnNTdGF0ZSAqY29lcmNpb25zLAotCQkJCQkJCXN0cnVj dCBKc29uQ29lcmNpb25TdGF0ZSAqKnBjb2VyY2lvbikKK3N0YXRpYyBib29sCitFeGVjSnNv blF1ZXJ5TmVlZHNJT0NvZXJjaW9uKEpzb25FeHByICpqc2V4cHIsIERhdHVtIHJlcywgYm9v bCBpc251bGwpCiB7Ci0Jc3RydWN0IEpzb25Db2VyY2lvblN0YXRlICpjb2VyY2lvbjsKLQlE YXR1bQkJcmVzOwotCUpzb25iVmFsdWUJYnVmOworCWlmIChqc2V4cHItPm9taXRfcXVvdGVz ICYmICFpc251bGwpCisJeworCQlKc29uYgkgICAqamIgPSBEYXR1bUdldEpzb25iUChyZXMp OworCQlKc29uYlZhbHVlCWpidjsKKworCQkvKiBDb2VyY2Ugc3RyaW5nIGl0ZW1zIHZpYSBJ L08gaW4gT01JVCBRVU9URVMgY2FzZSAqLworCQlyZXR1cm4gSnNvbmJFeHRyYWN0U2NhbGFy KCZqYi0+cm9vdCwgJmpidikgJiYKKwkJCWpidi50eXBlID09IGpidlN0cmluZzsKKwl9CisK KwlyZXR1cm4gZmFsc2U7Cit9CiAKLQlpZiAoaXRlbS0+dHlwZSA9PSBqYnZCaW5hcnkgJiYK LQkJSnNvbkNvbnRhaW5lcklzU2NhbGFyKGl0ZW0tPnZhbC5iaW5hcnkuZGF0YSkpCisvKiBD b2VyY2UgQyBzdHJpbmcgdG8gdGV4dCwgdmFyY2hhcihOKSwgb3IgYnBjaGFyKE4pICovCitz dGF0aWMgRGF0dW0KK0V4ZWNKc29uU3RyaW5nQ29lcmNpb24oY29uc3QgY2hhciAqc3RyLCBp bnQzMiBsZW4sIE9pZCB0eXBpZCwgaW50MzIgdHlwbW9kKQoreworCWlmICh0eXBpZCA9PSBC WVRFQU9JRCkKIAl7Ci0JCWJvb2wJCXJlcyBQR19VU0VEX0ZPUl9BU1NFUlRTX09OTFk7CisJ CXRleHQJICAgKnR4dCA9IGNzdHJpbmdfdG9fdGV4dF93aXRoX2xlbihzdHIsIGxlbik7CisJ CU5hbWVEYXRhCWVuY29kaW5nID0gezB9OworCisJCS8qIFVURjggaXMgdGhlIG9ubHkgb25l IHN1cHBvcnRlZCBlbmNvZGluZyAqLworCQlzdHJjcHkoTmFtZVN0cihlbmNvZGluZyksICJV VEY4Iik7CiAKLQkJcmVzID0gSnNvbmJFeHRyYWN0U2NhbGFyKGl0ZW0tPnZhbC5iaW5hcnku ZGF0YSwgJmJ1Zik7Ci0JCWl0ZW0gPSAmYnVmOwotCQlBc3NlcnQocmVzKTsKKwkJcmV0dXJu IERpcmVjdEZ1bmN0aW9uQ2FsbDIocGdfY29udmVydF90bywKKwkJCQkJCQkJICAgUG9pbnRl ckdldERhdHVtKHR4dCksCisJCQkJCQkJCSAgIFBvaW50ZXJHZXREYXR1bSgmZW5jb2Rpbmcp KTsKIAl9CisJZWxzZSBpZiAodHlwaWQgPT0gVEVYVE9JRCB8fCB0eXBpZCA9PSBKU09OT0lE IHx8IHR5cG1vZCA8PSBWQVJIRFJTWikKKwkJcmV0dXJuIFBvaW50ZXJHZXREYXR1bShjc3Ry aW5nX3RvX3RleHRfd2l0aF9sZW4oc3RyLCBsZW4pKTsKKwllbHNlCisJeworCQljaGFyCSAg ICp0eHQ7CisJCWludDMyCQlzaXplOworCisJCWxlbiA9IFZBUkhEUlNaICsgbGVuOworCisJ CWlmICh0eXBpZCA9PSBCUENIQVJPSUQpCisJCQlzaXplID0gdHlwbW9kOworCQllbHNlCisJ CQlzaXplID0gTWluKGxlbiwgdHlwbW9kKTsKKworCQl0eHQgPSBwYWxsb2Moc2l6ZSk7CisJ CVNFVF9WQVJTSVpFKHR4dCwgc2l6ZSk7CisKKwkJbWVtY3B5KFZBUkRBVEEodHh0KSwgc3Ry LCBNaW4oc2l6ZSwgbGVuKSAtIFZBUkhEUlNaKTsKKworCQlpZiAobGVuIDwgc2l6ZSkKKwkJ CW1lbXNldCh0eHQgKyBsZW4sICcgJywgc2l6ZSAtIGxlbik7CiAKLQkvKiBnZXQgY29lcmNp b24gc3RhdGUgcmVmZXJlbmNlIGFuZCBkYXR1bSBvZiB0aGUgY29ycmVzcG9uZGluZyBTUUwg dHlwZSAqLworCQlyZXR1cm4gUG9pbnRlckdldERhdHVtKHR4dCk7CisJfQorfQorCisvKiBD b2VyY2UgU1FML0pTT04gaXRlbSB0byB0ZXh0ICovCitzdGF0aWMgRGF0dW0KK0V4ZWNKc29u Q29lcmNpb25Ub1RleHQoUEdGdW5jdGlvbiBvdXRmdW5jLCBEYXR1bSB2YWx1ZSwgT2lkIHR5 cGlkLCBpbnQzMiB0eXBtb2QpCit7CisJY2hhcgkgICAqc3RyID0gRGF0dW1HZXRDU3RyaW5n KERpcmVjdEZ1bmN0aW9uQ2FsbDEob3V0ZnVuYywgdmFsdWUpKTsKKworCXJldHVybiBFeGVj SnNvblN0cmluZ0NvZXJjaW9uKHN0ciwgc3RybGVuKHN0ciksIHR5cGlkLCB0eXBtb2QpOwor fQorCisvKiBDb2VyY2UgZGF0ZXRpbWUgU1FML0pTT04gaXRlbSB0byB0aGUgb3V0cHV0IHR5 cGlkICovCitzdGF0aWMgRGF0dW0KK0V4ZWNKc29uRGF0ZXRpbWVDb2VyY2lvbihEYXR1bSB2 YWwsIE9pZCB2YWxfdHlwaWQsIE9pZCB0eXBpZCwgaW50MzIgdHlwbW9kLAorCQkJCQkJIGJv b2wgKmlzbnVsbCwgYm9vbCAqZXJyb3IpCit7CisJaWYgKHZhbF90eXBpZCA9PSB0eXBpZCkK KwkJcmV0dXJuIHZhbDsKKworCS8qCisJICogWFhYIGNvZXJjaW9uIHRvIHRleHQgaXMgZG9u ZSB1c2luZyBvdXRwdXQgZnVuY3Rpb25zLCBhbmQgdGhleQorCSAqIGFyZSBtdXRhYmxlIGZv ciBub24tdGltZVt0el0gdHlwZXMgZHVlIHRvIHVzaW5nIG9mIERhdGVTdHlsZS4KKwkgKiBX ZSBjYW4gcGFzcyBVU0VfSVNPX0RBVEVTLCB3aGljaCBpcyB1c2VkIGluc2lkZSBqc29ucGF0 aCwgdG8KKwkgKiBtYWtlIHRoZXNlIGNvZXJjaW9ucyBhbmQgSlNPTl9WQUxVRShSRVRVUk5J TkcgdGV4dCkgaW1tdXRhYmxlLgorCSAqCisJICogWFhYIEFsc28gdGltZXN0YW1wW3R6XSBv dXRwdXQgZnVuY3Rpb25zIGNhbiB0aHJvdyAib3V0IG9mIHJhbmdlIgorCSAqIGVycm9yLCBi dXQgdGhpcyBlcnJvciBzZWVtIHRvIGJlIG5vdCBwb3NzaWJsZS4KKwkgKi8KKwlzd2l0Y2gg KHZhbF90eXBpZCkKKwl7CisJCWNhc2UgREFURU9JRDoKKwkJCWlmICh0eXBpZCA9PSBURVhU T0lEIHx8IHR5cGlkID09IFZBUkNIQVJPSUQgfHwgdHlwaWQgPT0gQlBDSEFST0lEKQorCQkJ CXJldHVybiBFeGVjSnNvbkNvZXJjaW9uVG9UZXh0KGRhdGVfb3V0LCB2YWwsIHR5cGlkLCB0 eXBtb2QpOworCQkJZWxzZSBpZiAodHlwaWQgPT0gREFURU9JRCkKKwkJCQlyZXR1cm4gdmFs OworCQkJZWxzZSBpZiAodHlwaWQgPT0gVElNRVNUQU1QT0lEKQorCQkJeworCQkJCWludAkJ CW92ZXJmbG93ID0gMDsKKwkJCQlUaW1lc3RhbXAJdHMgPQorCQkJCQlkYXRlMnRpbWVzdGFt cF9vcHRfb3ZlcmZsb3coRGF0dW1HZXREYXRlQURUKHZhbCksCisJCQkJCQkJCQkJCQllcnJv ciA/ICZvdmVyZmxvdyA6IE5VTEwpOworCisJCQkJaWYgKG92ZXJmbG93KQorCQkJCXsKKwkJ CQkJKmVycm9yID0gdHJ1ZTsKKwkJCQkJcmV0dXJuIChEYXR1bSkgMDsKKwkJCQl9CisKKwkJ CQlyZXR1cm4gVGltZXN0YW1wR2V0RGF0dW0odHMpOworCQkJfQorCQkJZWxzZSBpZiAodHlw aWQgPT0gVElNRVNUQU1QVFpPSUQpCisJCQl7CisJCQkJaW50CQkJb3ZlcmZsb3cgPSAwOwor CQkJCVRpbWVzdGFtcFR6CXJlcyA9CisJCQkJCWRhdGUydGltZXN0YW1wdHpfb3B0X292ZXJm bG93KERhdHVtR2V0RGF0ZUFEVCh2YWwpLAorCQkJCQkJCQkJCQkJICBlcnJvciA/ICZvdmVy ZmxvdyA6IE5VTEwpOworCisJCQkJaWYgKG92ZXJmbG93KQorCQkJCXsKKwkJCQkJKmVycm9y ID0gdHJ1ZTsKKwkJCQkJcmV0dXJuIChEYXR1bSkgMDsKKwkJCQl9CisKKwkJCQlyZXR1cm4g VGltZXN0YW1wVHpHZXREYXR1bShyZXMpOworCQkJfQorCQkJZWxzZQorCQkJCWJyZWFrOyAv KiBObyBjYXN0ICovCisKKwkJY2FzZSBUSU1FT0lEOgorCQkJaWYgKHR5cGlkID09IFRFWFRP SUQgfHwgdHlwaWQgPT0gVkFSQ0hBUk9JRCB8fCB0eXBpZCA9PSBCUENIQVJPSUQpCisJCQkJ cmV0dXJuIEV4ZWNKc29uQ29lcmNpb25Ub1RleHQodGltZV9vdXQsIHZhbCwgdHlwaWQsIHR5 cG1vZCk7CisJCQllbHNlIGlmICh0eXBpZCA9PSBUSU1FT0lEKQorCQkJCXJldHVybiB2YWw7 CisJCQllbHNlIGlmICh0eXBpZCA9PSBUSU1FVFpPSUQpCisJCQkJcmV0dXJuIERpcmVjdEZ1 bmN0aW9uQ2FsbDEodGltZV90aW1ldHosIHZhbCk7CisJCQllbHNlCisJCQkJYnJlYWs7CS8q IE5vIGNhc3QgKi8KKworCQljYXNlIFRJTUVUWk9JRDoKKwkJCWlmICh0eXBpZCA9PSBURVhU T0lEIHx8IHR5cGlkID09IFZBUkNIQVJPSUQgfHwgdHlwaWQgPT0gQlBDSEFST0lEKQorCQkJ CXJldHVybiBFeGVjSnNvbkNvZXJjaW9uVG9UZXh0KHRpbWV0el9vdXQsIHZhbCwgdHlwaWQs IHR5cG1vZCk7CisJCQllbHNlIGlmICh0eXBpZCA9PSBUSU1FVFpPSUQpCisJCQkJcmV0dXJu IHZhbDsKKwkJCWVsc2UgaWYgKHR5cGlkID09IFRJTUVPSUQpCisJCQkJcmV0dXJuIERpcmVj dEZ1bmN0aW9uQ2FsbDEodGltZXR6X3RpbWUsIHZhbCk7CisJCQllbHNlCisJCQkJYnJlYWs7 CisKKwkJY2FzZSBUSU1FU1RBTVBPSUQ6CisJCQlpZiAodHlwaWQgPT0gVEVYVE9JRCB8fCB0 eXBpZCA9PSBWQVJDSEFST0lEIHx8IHR5cGlkID09IEJQQ0hBUk9JRCkKKwkJCQlyZXR1cm4g RXhlY0pzb25Db2VyY2lvblRvVGV4dCh0aW1lc3RhbXBfb3V0LCB2YWwsIHR5cGlkLCB0eXBt b2QpOworCQkJZWxzZSBpZiAodHlwaWQgPT0gVElNRVNUQU1QT0lEKQorCQkJCXJldHVybiB2 YWw7CisJCQllbHNlIGlmICh0eXBpZCA9PSBEQVRFT0lEKQorCQkJCXJldHVybiB0aW1lc3Rh bXBfZGF0ZV9vcHRfZXJyb3IoRGF0dW1HZXRUaW1lc3RhbXAodmFsKSwgZXJyb3IpOworCQkJ ZWxzZSBpZiAodHlwaWQgPT0gVElNRU9JRCkKKwkJCXsKKwkJCQlUaW1lQURUCQl0aW1lID0K KwkJCQkJdGltZXN0YW1wX3RpbWVfb3B0X2Vycm9yKERhdHVtR2V0VGltZXN0YW1wKHZhbCks CisJCQkJCQkJCQkJCSBpc251bGwsIGVycm9yKTsKKworCQkJCWlmICgoZXJyb3IgJiYgKmVy cm9yKSB8fCAqaXNudWxsKQorCQkJCQlyZXR1cm4gKERhdHVtKSAwOworCQkJCWVsc2UKKwkJ CQkJcmV0dXJuIFRpbWVBRFRHZXREYXR1bSh0aW1lKTsKKwkJCX0KKwkJCWVsc2UgaWYgKHR5 cGlkID09IFRJTUVTVEFNUFRaT0lEKQorCQkJeworCQkJCWludAkJCW92ZXJmbG93ID0gMDsK KwkJCQlUaW1lc3RhbXBUeiB0c3R6ID0KKwkJCQkJdGltZXN0YW1wMnRpbWVzdGFtcHR6X29w dF9vdmVyZmxvdyhEYXR1bUdldFRpbWVzdGFtcCh2YWwpLAorCQkJCQkJCQkJCQkJCSAgIGVy cm9yID8gJm92ZXJmbG93IDogTlVMTCk7CisKKwkJCQlpZiAob3ZlcmZsb3cpCisJCQkJewor CQkJCQkqZXJyb3IgPSB0cnVlOworCQkJCQlyZXR1cm4gKERhdHVtKSAwOworCQkJCX0KKwor CQkJCXJldHVybiBUaW1lc3RhbXBUekdldERhdHVtKHRzdHopOworCQkJfQorCQkJZWxzZQor CQkJCWJyZWFrOwkvKiBObyBjYXN0ICovCisKKwkJY2FzZSBUSU1FU1RBTVBUWk9JRDoKKwkJ CWlmICh0eXBpZCA9PSBURVhUT0lEIHx8IHR5cGlkID09IFZBUkNIQVJPSUQgfHwgdHlwaWQg PT0gQlBDSEFST0lEKQorCQkJCXJldHVybiBFeGVjSnNvbkNvZXJjaW9uVG9UZXh0KHRpbWVz dGFtcHR6X291dCwgdmFsLCB0eXBpZCwgdHlwbW9kKTsKKwkJCWVsc2UgaWYgKHR5cGlkID09 IFRJTUVTVEFNUFRaT0lEKQorCQkJCXJldHVybiB2YWw7CisJCQllbHNlIGlmICh0eXBpZCA9 PSBEQVRFT0lEKQorCQkJCXJldHVybiB0aW1lc3RhbXB0el9kYXRlX29wdF9lcnJvcihEYXR1 bUdldFRpbWVzdGFtcFR6KHZhbCksIGVycm9yKTsKKwkJCWVsc2UgaWYgKHR5cGlkID09IFRJ TUVPSUQpCisJCQl7CisJCQkJVGltZUFEVAkJdGltZSA9CisJCQkJCXRpbWVzdGFtcHR6X3Rp bWVfb3B0X2Vycm9yKERhdHVtR2V0VGltZXN0YW1wVHoodmFsKSwKKwkJCQkJCQkJCQkJICAg aXNudWxsLCBlcnJvcik7CisKKwkJCQlpZiAoKGVycm9yICYmICplcnJvcikgfHwgKmlzbnVs bCkKKwkJCQkJcmV0dXJuIChEYXR1bSkgMDsKKwkJCQllbHNlCisJCQkJCXJldHVybiBUaW1l QURUR2V0RGF0dW0odGltZSk7CisJCQl9CisJCQllbHNlIGlmICh0eXBpZCA9PSBUSU1FVFpP SUQpCisJCQl7CisJCQkJVGltZVR6QURUICAqcmVzdWx0ID0KKwkJCQkJdGltZXN0YW1wdHpf dGltZXR6X29wdF9lcnJvcihEYXR1bUdldFRpbWVzdGFtcFR6KHZhbCksIGVycm9yKTsKKwor CQkJCWlmICgoZXJyb3IgJiYgKmVycm9yKSB8fCAhcmVzdWx0KQorCQkJCXsKKwkJCQkJKmlz bnVsbCA9IHRydWU7CisJCQkJCXJldHVybiAoRGF0dW0pIDA7CisJCQkJfQorCisJCQkJcmV0 dXJuIFRpbWVUekFEVFBHZXREYXR1bShyZXN1bHQpOworCQkJfQorCQkJZWxzZSBpZiAodHlw aWQgPT0gVElNRVNUQU1QT0lEKQorCQkJeworCQkJCVRpbWVzdGFtcAl0cyA9CisJCQkJCXRp bWVzdGFtcHR6MnRpbWVzdGFtcF9vcHRfZXJyb3IoRGF0dW1HZXRUaW1lc3RhbXBUeih2YWwp LAorCQkJCQkJCQkJCQkJCWVycm9yKTsKKworCQkJCWlmIChlcnJvciAmJiAqZXJyb3IpCisJ CQkJCXJldHVybiAoRGF0dW0pIDA7CisKKwkJCQlyZXR1cm4gVGltZXN0YW1wR2V0RGF0dW0o dHMpOworCQkJfQorCQkJZWxzZQorCQkJCWJyZWFrOwkvKiBObyBjYXN0ICovCisKKwkJZGVm YXVsdDoKKwkJCWVsb2coRVJST1IsICJ1bmV4cGVjdGVkIGpzb25iIGRhdGV0aW1lIHR5cGUg b2lkICV1IiwgdmFsX3R5cGlkKTsKKwkJCWJyZWFrOworCX0KKworCWlmICghZXJyb3IpCisJ CWVyZXBvcnQoRVJST1IsCisJCQkoZXJyY29kZShFUlJDT0RFX1NRTF9KU09OX0lURU1fQ0FO Tk9UX0JFX0NBU1RfVE9fVEFSR0VUX1RZUEUpLAorCQkJIGVycm1zZygiU1FML0pTT04gaXRl bSBjYW5ub3QgYmUgY2FzdCB0byB0YXJnZXQgdHlwZSIpKSk7CisKKwkqZXJyb3IgPSB0cnVl OworCSppc251bGwgPSB0cnVlOworCisJcmV0dXJuIChEYXR1bSkgMDsKK30KKworLyogQ29l cmNlIGJvb2xlYW4gU1FML0pTT04gaXRlbSBvciBKU09OX0VYSVNUUyByZXN1bHQgdG8gdGhl IG91dHB1dCB0eXBlICovCitzdGF0aWMgYm9vbAorRXhlY0pzb25Cb29sQ29lcmNpb24oYm9v bCB2YWwsIE9pZCB0eXBpZCwgaW50MzIgdHlwbW9kLCBEYXR1bSAqcmVzKQoreworCWlmICh0 eXBpZCA9PSBCT09MT0lEKQorCQkqcmVzID0gQm9vbEdldERhdHVtKHZhbCk7CisJZWxzZSBp ZiAodHlwaWQgPT0gSU5UNE9JRCkKKwkJLyogV2Ugb25seSBoYXZlIGNhc3QgYm9vbDo6aW50 NCBpbiB0aGUgY2F0YWxvZy4gKi8KKwkJKnJlcyA9IEludDMyR2V0RGF0dW0odmFsID8gMSA6 IDApOworCWVsc2UgaWYgKHR5cGlkID09IFRFWFRPSUQgfHwgdHlwaWQgPT0gVkFSQ0hBUk9J RCB8fCB0eXBpZCA9PSBCUENIQVJPSUQpCisJCS8qCisJCSAqIGJvb2w6OnRleHQgcmV0dXJu cyAndHJ1ZScgLyAnZmFsc2UnLAorCQkgKiBib29sb3V0KCkgcmV0dXJucyAndCcgLyAnZicu CisJCSAqLworCQkqcmVzID0gRXhlY0pzb25TdHJpbmdDb2VyY2lvbih2YWwgPyAidHJ1ZSIg OiAiZmFsc2UiLCB2YWwgPyA0IDogNSwKKwkJCQkJCQkJCSAgdHlwaWQsIHR5cG1vZCk7CisJ ZWxzZQorCQlyZXR1cm4gZmFsc2U7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIERh dHVtCitKc29uYlBHZXRUZXh0RGF0dW0oSnNvbmIgKmpiKQoreworCWNoYXIJICAgKnN0ciA9 IEpzb25iVG9DU3RyaW5nKE5VTEwsICZqYi0+cm9vdCwgVkFSU0laRShqYikpOworCURhdHVt CQlyZXMgPSBDU3RyaW5nR2V0VGV4dERhdHVtKHN0cik7CisKKwlwZnJlZShzdHIpOworCXJl dHVybiByZXM7Cit9CisKKy8qIENvZXJjZSBTUUwvSlNPTiBpdGVtIHRvIHRoZSBvdXRwdXQg dHlwaWQgKi8KK3N0YXRpYyBEYXR1bQorRXhlY0pzb25WYWx1ZUNvZXJjaW9uKEpzb25iVmFs dWUgKml0ZW0sIE9pZCB0eXBpZCwgaW50MzIgdHlwbW9kLAorCQkJCQkgIGJvb2wgKmlzbnVs bCwgYm9vbCAqZXJyb3IpCit7CisJKmlzbnVsbCA9IGZhbHNlOworCisJLyogU3BlY2lhbCBj YXNlIGZvciBqc29uIGFuZCBqc29uYiBvdXRwdXQgdHlwZXMgKi8KKwlpZiAodHlwaWQgPT0g SlNPTkJPSUQpCisJCXJldHVybiBKc29uYlBHZXREYXR1bShKc29uYlZhbHVlVG9Kc29uYihp dGVtKSk7CisKKwlpZiAodHlwaWQgPT0gSlNPTk9JRCkKKwkJcmV0dXJuIEpzb25iUEdldFRl eHREYXR1bShKc29uYlZhbHVlVG9Kc29uYihpdGVtKSk7CisKKwkvKgorCSAqIENvZXJjaW9u IG1ldGhvZCBhbmQgc2V0IG9mIHN1cHBvcnRlZCBvdXRwdXQgdHlwZXMgYXJlIGRldGVybWlu ZWQKKwkgKiBieSB0aGUgaXRlbSB0eXBlLgorCSAqLwogCXN3aXRjaCAoaXRlbS0+dHlwZSkK IAl7CiAJCWNhc2UgamJ2TnVsbDoKLQkJCWNvZXJjaW9uID0gJmNvZXJjaW9ucy0+bnVsbDsK LQkJCXJlcyA9IChEYXR1bSkgMDsKLQkJCWJyZWFrOworCQkJQXNzZXJ0KDApOyAvKiBtdXN0 IGJlIGhhbmRsZWQgYnkgdGhlIGNhbGxlciAqLworCQkJKmlzbnVsbCA9IHRydWU7CisJCQly ZXR1cm4gKERhdHVtKSAwOwogCiAJCWNhc2UgamJ2U3RyaW5nOgotCQkJY29lcmNpb24gPSAm Y29lcmNpb25zLT5zdHJpbmc7Ci0JCQlyZXMgPSBQb2ludGVyR2V0RGF0dW0oY3N0cmluZ190 b190ZXh0X3dpdGhfbGVuKGl0ZW0tPnZhbC5zdHJpbmcudmFsLAotCQkJCQkJCQkJCQkJCQkg ICBpdGVtLT52YWwuc3RyaW5nLmxlbikpOwotCQkJYnJlYWs7CisJCQlpZiAodHlwaWQgPT0g VEVYVE9JRCB8fCB0eXBpZCA9PSBWQVJDSEFST0lEIHx8IHR5cGlkID09IEJQQ0hBUk9JRCkK KwkJCXsKKwkJCQlyZXR1cm4gRXhlY0pzb25TdHJpbmdDb2VyY2lvbihpdGVtLT52YWwuc3Ry aW5nLnZhbCwKKwkJCQkJCQkJCQkJICBpdGVtLT52YWwuc3RyaW5nLmxlbiwKKwkJCQkJCQkJ CQkJICB0eXBpZCwgdHlwbW9kKTsKKwkJCX0KKwkJCWVsc2UgaWYgKHR5cGlkID09IElOVDJP SUQgfHwgdHlwaWQgPT0gSU5UNE9JRCB8fCB0eXBpZCA9PSBJTlQ4T0lEKQorCQkJeworCQkJ CWNoYXIJICAgKnN0ciA9IHBuc3RyZHVwKGl0ZW0tPnZhbC5zdHJpbmcudmFsLAorCQkJCQkJ CQkJCSAgIGl0ZW0tPnZhbC5zdHJpbmcubGVuKTsKKworCQkJCWlmIChlcnJvcikKKwkJCQl7 CisJCQkJCWludDY0CQl2YWwgPSBwZ19zdHJ0b2ludDY0X29wdF9lcnJvcihzdHIsIGVycm9y KTsKKworCQkJCQlpZiAoKmVycm9yKQorCQkJCQkJcmV0dXJuIChEYXR1bSkgMDsKKworCQkJ CQlpZiAodHlwaWQgPT0gSU5UMk9JRCkKKwkJCQkJeworCQkJCQkJaWYgKHZhbCA8PSBQR19J TlQxNl9NQVggfHwgdmFsID49IFBHX0lOVDE2X01JTikKKwkJCQkJCQlyZXR1cm4gSW50MTZH ZXREYXR1bSgoaW50MTYpIHZhbCk7CisJCQkJCX0KKwkJCQkJZWxzZSBpZiAodHlwaWQgPT0g SU5UNE9JRCkKKwkJCQkJeworCQkJCQkJaWYgKHZhbCA8PSBQR19JTlQzMl9NQVggfHwgdmFs ID49IFBHX0lOVDMyX01JTikKKwkJCQkJCQlyZXR1cm4gSW50MzJHZXREYXR1bSgoaW50MzIp IHZhbCk7CisJCQkJCX0KKwkJCQkJZWxzZQorCQkJCQkJcmV0dXJuIEludDY0R2V0RGF0dW0o dmFsKTsKKworCQkJCQkqZXJyb3IgPSB0cnVlOworCQkJCQlyZXR1cm4gKERhdHVtKSAwOwor CQkJCX0KKwkJCQllbHNlIGlmICh0eXBpZCA9PSBJTlQyT0lEKQorCQkJCQlyZXR1cm4gSW50 MTZHZXREYXR1bShwZ19zdHJ0b2ludDE2KHN0cikpOworCQkJCWVsc2UgaWYgKHR5cGlkID09 IElOVDRPSUQpCisJCQkJCXJldHVybiBJbnQzMkdldERhdHVtKHBnX3N0cnRvaW50MzIoc3Ry KSk7CisJCQkJZWxzZQorCQkJCQlyZXR1cm4gSW50NjRHZXREYXR1bShwZ19zdHJ0b2ludDY0 KHN0cikpOworCQkJfQorCQkJZWxzZSBpZiAodHlwaWQgPT0gQk9PTE9JRCkKKwkJCXsKKwkJ CQlyZXR1cm4gQm9vbEdldERhdHVtKGJvb2xpbl9vcHRfZXJyb3IoaXRlbS0+dmFsLnN0cmlu Zy52YWwsCisJCQkJCQkJCQkJCQkJIGl0ZW0tPnZhbC5zdHJpbmcubGVuLAorCQkJCQkJCQkJ CQkJCSBlcnJvcikpOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCWNoYXIJICAgKnN0ciA9 IHBuc3RyZHVwKGl0ZW0tPnZhbC5zdHJpbmcudmFsLAorCQkJCQkJCQkJCSAgIGl0ZW0tPnZh bC5zdHJpbmcubGVuKTsKKworCQkJCWlmICh0eXBpZCA9PSBGTE9BVDRPSUQpCisJCQkJCXJl dHVybiBGbG9hdDRHZXREYXR1bShmbG9hdDRpbl9vcHRfZXJyb3Ioc3RyLCBlcnJvcikpOwor CQkJCWVsc2UgaWYgKHR5cGlkID09IEZMT0FUOE9JRCkKKwkJCQkJcmV0dXJuIEZsb2F0OEdl dERhdHVtKAorCQkJCQkJZmxvYXQ4aW5faW50ZXJuYWxfb3B0X2Vycm9yKHN0ciwgTlVMTCwK KwkJCQkJCQkJCQkJCQkiZG91YmxlIHByZWNpc2lvbiIsCisJCQkJCQkJCQkJCQkJc3RyLCBl cnJvcikpOworCQkJCWVsc2UgaWYgKHR5cGlkID09IE5VTUVSSUNPSUQpCisJCQkJCXJldHVy biBOdW1lcmljR2V0RGF0dW0obnVtZXJpY19pbl9vcHRfZXJyb3Ioc3RyLCB0eXBtb2QsIGVy cm9yKSk7CisJCQkJZWxzZSBpZiAodHlwaWQgPT0gREFURU9JRCkKKwkJCQkJcmV0dXJuIERh dGVBRFRHZXREYXR1bShkYXRlX2luX29wdF9lcnJvcihzdHIsIGVycm9yKSk7CisJCQkJZWxz ZSBpZiAodHlwaWQgPT0gVElNRU9JRCkKKwkJCQkJcmV0dXJuIFRpbWVBRFRHZXREYXR1bSh0 aW1lX2luX29wdF9lcnJvcihzdHIsIHR5cG1vZCwgZXJyb3IpKTsKKwkJCQllbHNlIGlmICh0 eXBpZCA9PSBUSU1FVFpPSUQpCisJCQkJCXJldHVybiBUaW1lVHpBRFRQR2V0RGF0dW0odGlt ZXR6X2luX29wdF9lcnJvcihzdHIsIHR5cG1vZCwgZXJyb3IpKTsKKwkJCQllbHNlIGlmICh0 eXBpZCA9PSBUSU1FU1RBTVBPSUQpCisJCQkJCXJldHVybiBUaW1lc3RhbXBHZXREYXR1bSh0 aW1lc3RhbXBfaW5fb3B0X2Vycm9yKHN0ciwgdHlwbW9kLCBlcnJvcikpOworCQkJCWVsc2Ug aWYgKHR5cGlkID09IFRJTUVTVEFNUFRaT0lEKQorCQkJCQlyZXR1cm4gVGltZXN0YW1wVHpH ZXREYXR1bSh0aW1lc3RhbXB0el9pbl9vcHRfZXJyb3Ioc3RyLCB0eXBtb2QsIGVycm9yKSk7 CisJCQkJZWxzZQorCQkJCQlicmVhazsJLyogTm8gY2FzdCAqLworCQkJfQogCiAJCWNhc2Ug amJ2TnVtZXJpYzoKLQkJCWNvZXJjaW9uID0gJmNvZXJjaW9ucy0+bnVtZXJpYzsKLQkJCXJl cyA9IE51bWVyaWNHZXREYXR1bShpdGVtLT52YWwubnVtZXJpYyk7Ci0JCQlicmVhazsKKwkJ CXsKKwkJCQlOdW1lcmljCQludW0gPSBpdGVtLT52YWwubnVtZXJpYzsKKworCQkJCWlmICh0 eXBpZCA9PSBOVU1FUklDT0lEKQorCQkJCQlyZXR1cm4gTnVtZXJpY0dldERhdHVtKG51bSk7 CisJCQkJZWxzZSBpZiAodHlwaWQgPT0gVEVYVE9JRCB8fCB0eXBpZCA9PSBWQVJDSEFST0lE IHx8IHR5cGlkID09IEJQQ0hBUk9JRCkKKwkJCQkJcmV0dXJuIEV4ZWNKc29uQ29lcmNpb25U b1RleHQobnVtZXJpY19vdXQsIE51bWVyaWNHZXREYXR1bShudW0pLCB0eXBpZCwgdHlwbW9k KTsKKwkJCQllbHNlIGlmICh0eXBpZCA9PSBJTlQyT0lEKQorCQkJCQlyZXR1cm4gSW50MTZH ZXREYXR1bShudW1lcmljX2ludDJfb3B0X2Vycm9yKG51bSwgZXJyb3IpKTsKKwkJCQllbHNl IGlmICh0eXBpZCA9PSBJTlQ0T0lEKQorCQkJCQlyZXR1cm4gSW50MzJHZXREYXR1bShudW1l cmljX2ludDRfb3B0X2Vycm9yKG51bSwgZXJyb3IpKTsKKwkJCQllbHNlIGlmICh0eXBpZCA9 PSBJTlQ4T0lEKQorCQkJCQlyZXR1cm4gSW50NjRHZXREYXR1bShudW1lcmljX2ludDhfb3B0 X2Vycm9yKG51bSwgZXJyb3IpKTsKKwkJCQllbHNlIGlmICh0eXBpZCA9PSBGTE9BVDRPSUQg fHwgdHlwaWQgPT0gRkxPQVQ4T0lEKQorCQkJCXsKKwkJCQkJLyoKKwkJCQkJICogWFhYIG51 bWVyaWNfZmxvYXQ4KCkgYWxzbyB1c2VzIEkvTyBjb2VyY2lvbiwgYnV0CisJCQkJCSAqIGl0 IGhhcyBzcGVjaWFsIGhhbmRsaW5nIG9mIEluZiBhbmQgTmFOLgorCQkJCQkgKi8KKwkJCQkJ RGF0dW0JCWNzdHIgPSBEaXJlY3RGdW5jdGlvbkNhbGwxKG51bWVyaWNfb3V0LAorCQkJCQkJ CQkJCQkJCQkgICBOdW1lcmljR2V0RGF0dW0obnVtKSk7CisJCQkJCWNoYXIJICAgKnN0ciA9 IERhdHVtR2V0Q1N0cmluZyhjc3RyKTsKIAotCQljYXNlIGpidkJvb2w6Ci0JCQljb2VyY2lv biA9ICZjb2VyY2lvbnMtPmJvb2xlYW47Ci0JCQlyZXMgPSBCb29sR2V0RGF0dW0oaXRlbS0+ dmFsLmJvb2xlYW4pOwotCQkJYnJlYWs7CisJCQkJCWlmICh0eXBpZCA9PSBGTE9BVDRPSUQp CisJCQkJCQlyZXR1cm4gRmxvYXQ0R2V0RGF0dW0oZmxvYXQ0aW5fb3B0X2Vycm9yKHN0ciwg ZXJyb3IpKTsKKwkJCQkJZWxzZQorCQkJCQkJcmV0dXJuIEZsb2F0OEdldERhdHVtKAorCQkJ CQkJCWZsb2F0OGluX2ludGVybmFsX29wdF9lcnJvcihzdHIsIE5VTEwsCisJCQkJCQkJCQkJ CQkJCSJkb3VibGUgcHJlY2lzaW9uIiwKKwkJCQkJCQkJCQkJCQkJc3RyLCBlcnJvcikpOwor CQkJCX0KKwkJCQllbHNlCisJCQkJCWJyZWFrOwkvKiBObyBjYXN0ICovCisJCQl9CiAKLQkJ Y2FzZSBqYnZEYXRldGltZToKLQkJCXJlcyA9IGl0ZW0tPnZhbC5kYXRldGltZS52YWx1ZTsK LQkJCXN3aXRjaCAoaXRlbS0+dmFsLmRhdGV0aW1lLnR5cGlkKQorCQljYXNlIGpidkJvb2w6 CiAJCQl7Ci0JCQkJY2FzZSBEQVRFT0lEOgotCQkJCQljb2VyY2lvbiA9ICZjb2VyY2lvbnMt PmRhdGU7Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgVElNRU9JRDoKLQkJCQkJY29lcmNpb24g PSAmY29lcmNpb25zLT50aW1lOwotCQkJCQlicmVhazsKLQkJCQljYXNlIFRJTUVUWk9JRDoK LQkJCQkJY29lcmNpb24gPSAmY29lcmNpb25zLT50aW1ldHo7Ci0JCQkJCWJyZWFrOwotCQkJ CWNhc2UgVElNRVNUQU1QT0lEOgotCQkJCQljb2VyY2lvbiA9ICZjb2VyY2lvbnMtPnRpbWVz dGFtcDsKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSBUSU1FU1RBTVBUWk9JRDoKLQkJCQkJY29l cmNpb24gPSAmY29lcmNpb25zLT50aW1lc3RhbXB0ejsKLQkJCQkJYnJlYWs7Ci0JCQkJZGVm YXVsdDoKLQkJCQkJZWxvZyhFUlJPUiwgInVuZXhwZWN0ZWQganNvbmIgZGF0ZXRpbWUgdHlw ZSBvaWQgJXUiLAotCQkJCQkJIGl0ZW0tPnZhbC5kYXRldGltZS50eXBpZCk7Ci0JCQkJCXJl dHVybiAoRGF0dW0pIDA7CisJCQkJRGF0dW0JCXJlczsKKworCQkJCWlmIChFeGVjSnNvbkJv b2xDb2VyY2lvbihpdGVtLT52YWwuYm9vbGVhbiwgdHlwaWQsIHR5cG1vZCwgJnJlcykpCisJ CQkJCXJldHVybiByZXM7CisKKwkJCQlicmVhazsgLyogTm8gY2FzdCAqLwogCQkJfQotCQkJ YnJlYWs7CisKKwkJY2FzZSBqYnZEYXRldGltZToKKwkJCXJldHVybiBFeGVjSnNvbkRhdGV0 aW1lQ29lcmNpb24oaXRlbS0+dmFsLmRhdGV0aW1lLnZhbHVlLAorCQkJCQkJCQkJCQlpdGVt LT52YWwuZGF0ZXRpbWUudHlwaWQsCisJCQkJCQkJCQkJCXR5cGlkLCB0eXBtb2QsIGlzbnVs bCwgZXJyb3IpOwogCiAJCWNhc2UgamJ2QXJyYXk6CiAJCWNhc2UgamJ2T2JqZWN0OgogCQlj YXNlIGpidkJpbmFyeToKLQkJCWNvZXJjaW9uID0gJmNvZXJjaW9ucy0+Y29tcG9zaXRlOwot CQkJcmVzID0gSnNvbmJQR2V0RGF0dW0oSnNvbmJWYWx1ZVRvSnNvbmIoaXRlbSkpOworCQkJ QXNzZXJ0KDApOwkvKiBub24tc2NhbGFycyBtdXN0IGJlIHJlamVjdGVkIGJ5IEpzb25QYXRo VmFsdWUoKSAqLwogCQkJYnJlYWs7CiAKIAkJZGVmYXVsdDoKQEAgLTQ5MjksOTkgKzUxOTQs MTAwIEBAIEV4ZWNQcmVwYXJlSnNvbkl0ZW1Db2VyY2lvbihKc29uYlZhbHVlICppdGVtLAog CQkJcmV0dXJuIChEYXR1bSkgMDsKIAl9CiAKLQkqcGNvZXJjaW9uID0gY29lcmNpb247CisJ aWYgKCFlcnJvcikKKwkJZXJlcG9ydChFUlJPUiwKKwkJCShlcnJjb2RlKEVSUkNPREVfU1FM X0pTT05fSVRFTV9DQU5OT1RfQkVfQ0FTVF9UT19UQVJHRVRfVFlQRSksCisJCQkgZXJybXNn KCJTUUwvSlNPTiBpdGVtIGNhbm5vdCBiZSBjYXN0IHRvIHRhcmdldCB0eXBlIikpKTsKIAot CXJldHVybiByZXM7Ci19CisJKmVycm9yID0gdHJ1ZTsKKwkqaXNudWxsID0gdHJ1ZTsKIAot dHlwZWRlZiBEYXR1bSAoKkpzb25GdW5jKSAoRXhwckV2YWxTdGVwICpvcCwgRXhwckNvbnRl eHQgKmVjb250ZXh0LAotCQkJCQkJICAgRGF0dW0gaXRlbSwgYm9vbCAqcmVzbnVsbCwgdm9p ZCAqcCwgYm9vbCAqZXJyb3IpOworCXJldHVybiAoRGF0dW0pIDA7Cit9CiAKKy8qCisgKiBF dmFsdWF0ZSBhIEpTT04gZXJyb3IvZW1wdHkgYmVoYXZpb3IgYW5kIGNvZXJjZSByZXN1bHQg dG8gdGhlIG91dHB1dAorICogdHlwZS4KKyAqLwogc3RhdGljIERhdHVtCi1FeGVjRXZhbEpz b25FeHByU3VidHJhbnMoSnNvbkZ1bmMgZnVuYywgRXhwckV2YWxTdGVwICpvcCwKLQkJCQkJ CSBFeHByQ29udGV4dCAqZWNvbnRleHQsCi0JCQkJCQkgRGF0dW0gcmVzLCBib29sICpyZXNu dWxsLAotCQkJCQkJIHZvaWQgKnAsIGJvb2wgKmVycm9yLCBib29sIHN1YnRyYW5zKQorRXhl Y0V2YWxKc29uQmVoYXZpb3IoRXhwckNvbnRleHQgKmVjb250ZXh0LCBKc29uQmVoYXZpb3Ig KmJlaGF2aW9yLAorCQkJCQkgRXhwclN0YXRlICpkZWZhdWx0X2VzdGF0ZSwKKwkJCQkJIE9p ZCByZXRfdHlwaWQsIGludDMyIHJldF90eXBtb2QsIGJvb2wgKmlzX251bGwpCiB7Ci0JTWVt b3J5Q29udGV4dCBvbGRjb250ZXh0OwotCVJlc291cmNlT3duZXIgb2xkb3duZXI7Ci0KLQlp ZiAoIXN1YnRyYW5zKQotCQkvKiBObyBuZWVkIHRvIHVzZSBzdWJ0cmFuc2FjdGlvbnMuICov Ci0JCXJldHVybiBmdW5jKG9wLCBlY29udGV4dCwgcmVzLCByZXNudWxsLCBwLCBlcnJvcik7 CisJKmlzX251bGwgPSBmYWxzZTsKIAotCS8qCi0JICogV2Ugc2hvdWxkIGNhdGNoIGV4Y2Vw dGlvbnMgb2YgY2F0ZWdvcnkgRVJSQ09ERV9EQVRBX0VYQ0VQVElPTiBhbmQKLQkgKiBleGVj dXRlIHRoZSBjb3JyZXNwb25kaW5nIE9OIEVSUk9SIGJlaGF2aW9yIHRoZW4uCi0JICovCi0J b2xkY29udGV4dCA9IEN1cnJlbnRNZW1vcnlDb250ZXh0OwotCW9sZG93bmVyID0gQ3VycmVu dFJlc291cmNlT3duZXI7CisJc3dpdGNoIChiZWhhdmlvci0+YnR5cGUpCisJeworCQljYXNl IEpTT05fQkVIQVZJT1JfRU1QVFlfQVJSQVk6CisJCQlpZiAocmV0X3R5cGlkID09IEpTT05C T0lEKQorCQkJCXJldHVybiBKc29uYlBHZXREYXR1bShKc29uYk1ha2VFbXB0eUFycmF5KCkp OworCQkJZWxzZQorCQkJeworCQkJCUFzc2VydChyZXRfdHlwaWQgPT0gSlNPTk9JRCB8fCBy ZXRfdHlwaWQgPT0gVEVYVE9JRCB8fAorCQkJCQkgICByZXRfdHlwaWQgPT0gVkFSQ0hBUk9J RCB8fCByZXRfdHlwaWQgPT0gQlBDSEFST0lEIHx8CisJCQkJCSAgIHJldF90eXBpZCA9PSBC WVRFQU9JRCk7CiAKLQlBc3NlcnQoZXJyb3IpOworCQkJCXJldHVybiBFeGVjSnNvblN0cmlu Z0NvZXJjaW9uKCJbXSIsIDIsIHJldF90eXBpZCwgcmV0X3R5cG1vZCk7CisJCQl9CiAKLQlC ZWdpbkludGVybmFsU3ViVHJhbnNhY3Rpb24oTlVMTCk7Ci0JLyogV2FudCB0byBleGVjdXRl IGV4cHJlc3Npb25zIGluc2lkZSBmdW5jdGlvbidzIG1lbW9yeSBjb250ZXh0ICovCi0JTWVt b3J5Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRleHQpOworCQljYXNlIEpTT05fQkVIQVZJT1Jf RU1QVFlfT0JKRUNUOgorCQkJaWYgKHJldF90eXBpZCA9PSBKU09OQk9JRCkKKwkJCQlyZXR1 cm4gSnNvbmJQR2V0RGF0dW0oSnNvbmJNYWtlRW1wdHlPYmplY3QoKSk7CisJCQllbHNlCisJ CQl7CisJCQkJQXNzZXJ0KHJldF90eXBpZCA9PSBKU09OT0lEIHx8IHJldF90eXBpZCA9PSBU RVhUT0lEIHx8CisJCQkJCSAgIHJldF90eXBpZCA9PSBWQVJDSEFST0lEIHx8IHJldF90eXBp ZCA9PSBCUENIQVJPSUQgfHwKKwkJCQkJICAgcmV0X3R5cGlkID09IEJZVEVBT0lEKTsKIAot CVBHX1RSWSgpOwotCXsKLQkJcmVzID0gZnVuYyhvcCwgZWNvbnRleHQsIHJlcywgcmVzbnVs bCwgcCwgZXJyb3IpOworCQkJCXJldHVybiBFeGVjSnNvblN0cmluZ0NvZXJjaW9uKCJ7fSIs IDIsIHJldF90eXBpZCwgcmV0X3R5cG1vZCk7CisJCQl9CiAKLQkJLyogQ29tbWl0IHRoZSBp bm5lciB0cmFuc2FjdGlvbiwgcmV0dXJuIHRvIG91dGVyIHhhY3QgY29udGV4dCAqLwotCQlS ZWxlYXNlQ3VycmVudFN1YlRyYW5zYWN0aW9uKCk7Ci0JCU1lbW9yeUNvbnRleHRTd2l0Y2hU byhvbGRjb250ZXh0KTsKLQkJQ3VycmVudFJlc291cmNlT3duZXIgPSBvbGRvd25lcjsKLQl9 Ci0JUEdfQ0FUQ0goKTsKLQl7Ci0JCUVycm9yRGF0YSAgKmVkYXRhOwotCQlpbnQJCQllY2F0 ZWdvcnk7CisJCWNhc2UgSlNPTl9CRUhBVklPUl9UUlVFOgorCQljYXNlIEpTT05fQkVIQVZJ T1JfRkFMU0U6CisJCQl7CisJCQkJRGF0dW0JCXJlczsKKwkJCQlib29sCQlvayA9CisJCQkJ CUV4ZWNKc29uQm9vbENvZXJjaW9uKGJlaGF2aW9yLT5idHlwZSA9PSBKU09OX0JFSEFWSU9S X1RSVUUsCisJCQkJCQkJCQkJIHJldF90eXBpZCwgcmV0X3R5cG1vZCwgJnJlcyk7CiAKLQkJ LyogU2F2ZSBlcnJvciBpbmZvIGluIG9sZGNvbnRleHQgKi8KLQkJTWVtb3J5Q29udGV4dFN3 aXRjaFRvKG9sZGNvbnRleHQpOwotCQllZGF0YSA9IENvcHlFcnJvckRhdGEoKTsKLQkJRmx1 c2hFcnJvclN0YXRlKCk7CisJCQkJQXNzZXJ0KG9rKTsgLyogcmV0dXJuaW5nIHR5cGUgbXVz dCBiZSBjaGVja2VkIGluIHBhcnNlciAqLwogCi0JCS8qIEFib3J0IHRoZSBpbm5lciB0cmFu c2FjdGlvbiAqLwotCQlSb2xsYmFja0FuZFJlbGVhc2VDdXJyZW50U3ViVHJhbnNhY3Rpb24o KTsKLQkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRleHQpOwotCQlDdXJyZW50UmVz b3VyY2VPd25lciA9IG9sZG93bmVyOworCQkJCXJldHVybiByZXM7CisJCQl9CiAKLQkJZWNh dGVnb3J5ID0gRVJSQ09ERV9UT19DQVRFR09SWShlZGF0YS0+c3FsZXJyY29kZSk7CisJCWNh c2UgSlNPTl9CRUhBVklPUl9OVUxMOgorCQljYXNlIEpTT05fQkVIQVZJT1JfVU5LTk9XTjoK KwkJY2FzZSBKU09OX0JFSEFWSU9SX0VNUFRZOgorCQkJKmlzX251bGwgPSB0cnVlOworCQkJ cmV0dXJuIChEYXR1bSkgMDsKIAotCQlpZiAoZWNhdGVnb3J5ICE9IEVSUkNPREVfREFUQV9F WENFUFRJT04gJiYJLyoganNvbnBhdGggYW5kIG90aGVyIGRhdGEKLQkJCQkJCQkJCQkJCQkg KiBlcnJvcnMgKi8KLQkJCWVjYXRlZ29yeSAhPSBFUlJDT0RFX0lOVEVHUklUWV9DT05TVFJB SU5UX1ZJT0xBVElPTikJLyogZG9tYWluIGVycm9ycyAqLwotCQkJUmVUaHJvd0Vycm9yKGVk YXRhKTsKKwkJY2FzZSBKU09OX0JFSEFWSU9SX0RFRkFVTFQ6CisJCQkvKgorCQkJICogRXhl Y3V0ZSBERUZBVUxUIGV4cHJlc3Npb24uCisJCQkgKiBDb2VyY2lvbiBpcyBub3QgbmVlZGVk IGhlcmUsIGJlY2F1c2UgZXhwcmVzc2lvbiBpcworCQkJICogYWxyZWFkeSBjb2VyY2VkIHRv IHRoZSB0YXJnZXQgdHlwZSBieSB0aGUgcGFyc2VyLgorCQkJICovCisJCQlyZXR1cm4gRXhl Y0V2YWxFeHByKGRlZmF1bHRfZXN0YXRlLCBlY29udGV4dCwgaXNfbnVsbCk7CiAKLQkJcmVz ID0gKERhdHVtKSAwOwotCQkqZXJyb3IgPSB0cnVlOworCQlkZWZhdWx0OgorCQkJZWxvZyhF UlJPUiwgInVucmVjb2duaXplZCBTUUwvSlNPTiBiZWhhdmlvciAlZCIsIGJlaGF2aW9yLT5i dHlwZSk7CisJCQlyZXR1cm4gKERhdHVtKSAwOwogCX0KLQlQR19FTkRfVFJZKCk7Ci0KLQly ZXR1cm4gcmVzOwogfQogCi0KLXR5cGVkZWYgc3RydWN0Ci17Ci0JSnNvblBhdGggICAqcGF0 aDsKLQlib29sCSAgICplcnJvcjsKLQlib29sCQljb2VyY2lvbkluU3VidHJhbnM7Ci19IEV4 ZWNFdmFsSnNvbkV4cHJDb250ZXh0OwotCiBzdGF0aWMgRGF0dW0KLUV4ZWNFdmFsSnNvbkV4 cHIoRXhwckV2YWxTdGVwICpvcCwgRXhwckNvbnRleHQgKmVjb250ZXh0LAotCQkJCSBEYXR1 bSBpdGVtLCBib29sICpyZXNudWxsLCB2b2lkICpwY3h0LAotCQkJCSBib29sICplcnJvcikK K0V4ZWNFdmFsSnNvbkV4cHJJbnRlcm5hbChFeHByU3RhdGUgKnN0YXRlLAorCQkJCQkJIEpz b25FeHByU3RhdGUgKmpzZXN0YXRlLCBFeHByQ29udGV4dCAqZWNvbnRleHQsCisJCQkJCQkg SnNvblBhdGggKnBhdGgsIERhdHVtIGl0ZW0sIGJvb2wgKnJlc251bGwsCisJCQkJCQkgYm9v bCAqZXJyb3IpCiB7Ci0JRXhlY0V2YWxKc29uRXhwckNvbnRleHQgKmN4dCA9IHBjeHQ7Ci0J SnNvblBhdGggICAqcGF0aCA9IGN4dC0+cGF0aDsKLQlKc29uRXhwclN0YXRlICpqc2VzdGF0 ZSA9IG9wLT5kLmpzb25leHByLmpzZXN0YXRlOwogCUpzb25FeHByICAgKmpleHByID0ganNl c3RhdGUtPmpzZXhwcjsKLQlFeHByU3RhdGUgICplc3RhdGUgPSBOVUxMOwogCWJvb2wJCWVt cHR5ID0gZmFsc2U7CiAJRGF0dW0JCXJlcyA9IChEYXR1bSkgMDsKKwlPaWQJCQlyZXRfdHlw aWQgPSBqZXhwci0+cmV0dXJuaW5nLT50eXBpZDsKKwlpbnQzMgkJcmV0X3R5cG1vZCA9IGpl eHByLT5yZXR1cm5pbmctPnR5cG1vZDsKKworCSpyZXNudWxsID0gdHJ1ZTsKIAogCXN3aXRj aCAoamV4cHItPm9wKQogCXsKQEAgLTUwMjksNzAgKzUyOTUsOTYgQEAgRXhlY0V2YWxKc29u RXhwcihFeHByRXZhbFN0ZXAgKm9wLCBFeHByQ29udGV4dCAqZWNvbnRleHQsCiAJCQlyZXMg PSBKc29uUGF0aFF1ZXJ5KGl0ZW0sIHBhdGgsIGpleHByLT53cmFwcGVyLCAmZW1wdHksIGVy cm9yLAogCQkJCQkJCQlqc2VzdGF0ZS0+YXJncyk7CiAJCQlpZiAoZXJyb3IgJiYgKmVycm9y KQotCQkJewotCQkJCSpyZXNudWxsID0gdHJ1ZTsKIAkJCQlyZXR1cm4gKERhdHVtKSAwOwot CQkJfQorCisJCQlpZiAoZW1wdHkpCisJCQkJYnJlYWs7CisKIAkJCSpyZXNudWxsID0gIURh dHVtR2V0UG9pbnRlcihyZXMpOwotCQkJYnJlYWs7CisKKwkJCS8qIE92ZXJyaWRlIGRlZmF1 bHQgY29lcmNpb24gaW4gT01JVCBRVU9URVMgY2FzZSAqLworCQkJaWYgKEV4ZWNKc29uUXVl cnlOZWVkc0lPQ29lcmNpb24oamV4cHIsIHJlcywgKnJlc251bGwpKQorCQkJeworCQkJCWNo YXIJICAgKnN0ciA9IEpzb25iVW5xdW90ZShEYXR1bUdldEpzb25iUChyZXMpKTsKKworCQkJ CWlmIChyZXRfdHlwaWQgPT0gSlNPTkJPSUQpCisJCQkJeworCQkJCQlyZXMgPSBqc29uYl9m cm9tX2NzdHJpbmcoc3RyLCBzdHJsZW4oc3RyKSwgZmFsc2UsIGVycm9yKTsKKworCQkJCQlp ZiAoZXJyb3IgJiYgKmVycm9yKQorCQkJCQkJcmV0dXJuIChEYXR1bSkgMDsKKworCQkJCQly ZXR1cm4gcmVzOworCQkJCX0KKwkJCQllbHNlIGlmIChyZXRfdHlwaWQgPT0gSlNPTk9JRCkK KwkJCQl7CisJCQkJCXRleHQJICAgKmpzb24gPSBjc3RyaW5nX3RvX3RleHQoc3RyKTsKKwkJ CQkJSnNvbkxleENvbnRleHQgKmxleDsKKwkJCQkJSnNvblBhcnNlRXJyb3JUeXBlIHJlc3Vs dDsKKworCQkJCQkvKiB2YWxpZGF0ZSBpdCAqLworCQkJCQlsZXggPSBtYWtlSnNvbkxleENv bnRleHQoanNvbiwgZmFsc2UpOworCQkJCQlyZXN1bHQgPSBwZ19wYXJzZV9qc29uKGxleCwg Jm51bGxTZW1BY3Rpb24pOworCisJCQkJCWlmIChyZXN1bHQgIT0gSlNPTl9TVUNDRVNTKQor CQkJCQl7CisJCQkJCQlpZiAoZXJyb3IpCisJCQkJCQl7CisJCQkJCQkJKmVycm9yID0gdHJ1 ZTsKKwkJCQkJCQlyZXR1cm4gKERhdHVtKSAwOworCQkJCQkJfQorCisJCQkJCQlqc29uX2Vy ZXBvcnRfZXJyb3IocmVzdWx0LCBsZXgpOworCQkJCQl9CisKKwkJCQkJcmV0dXJuIFBvaW50 ZXJHZXREYXR1bShqc29uKTsKKwkJCQl9CisJCQkJZWxzZSBpZiAocmV0X3R5cGlkID09IFRF WFRPSUQgfHwKKwkJCQkJCSByZXRfdHlwaWQgPT0gVkFSQ0hBUk9JRCB8fAorCQkJCQkJIHJl dF90eXBpZCA9PSBCUENIQVJPSUQgfHwKKwkJCQkJCSByZXRfdHlwaWQgPT0gQllURUFPSUQp CisJCQkJCXJldHVybiBFeGVjSnNvblN0cmluZ0NvZXJjaW9uKHN0ciwgc3RybGVuKHN0ciks IHJldF90eXBpZCwgcmV0X3R5cG1vZCk7CisJCQl9CisJCQllbHNlIGlmIChyZXRfdHlwaWQg PT0gSlNPTkJPSUQpCisJCQkJcmV0dXJuIHJlczsKKwkJCWVsc2UgaWYgKHJldF90eXBpZCA9 PSBKU09OT0lEIHx8IHJldF90eXBpZCA9PSBURVhUT0lEKQorCQkJCXJldHVybiBKc29uYlBH ZXRUZXh0RGF0dW0oRGF0dW1HZXRKc29uYlAocmVzKSk7CisJCQllbHNlIGlmIChyZXRfdHlw aWQgPT0gVkFSQ0hBUk9JRCB8fCByZXRfdHlwaWQgPT0gQlBDSEFST0lEIHx8CisJCQkJCSBy ZXRfdHlwaWQgPT0gQllURUFPSUQpCisJCQl7CisJCQkJSnNvbmIJICAgKmpiID0gRGF0dW1H ZXRKc29uYlAocmVzKTsKKwkJCQljaGFyCSAgICpzdHIgPSBKc29uYlRvQ1N0cmluZyhOVUxM LCAmamItPnJvb3QsIFZBUlNJWkUoamIpKTsKKworCQkJCXJldHVybiBFeGVjSnNvblN0cmlu Z0NvZXJjaW9uKHN0ciwgc3RybGVuKHN0ciksIHJldF90eXBpZCwgcmV0X3R5cG1vZCk7CisJ CQl9CisKKwkJCUFzc2VydCgwKTsJLyogdW5zdXBwb3J0ZWQgb3V0cHV0IHR5cGUgKi8KKwkJ CSplcnJvciA9ICpyZXNudWxsID0gdHJ1ZTsKKwkJCXJldHVybiAoRGF0dW0pIDA7CiAKIAkJ Y2FzZSBKU09OX1ZBTFVFX09QOgogCQkJewotCQkJCXN0cnVjdCBKc29uQ29lcmNpb25TdGF0 ZSAqamNzdGF0ZTsKIAkJCQlKc29uYlZhbHVlICpqYnYgPSBKc29uUGF0aFZhbHVlKGl0ZW0s IHBhdGgsICZlbXB0eSwgZXJyb3IsCiAJCQkJCQkJCQkJCQlqc2VzdGF0ZS0+YXJncyk7CiAK IAkJCQlpZiAoZXJyb3IgJiYgKmVycm9yKQogCQkJCQlyZXR1cm4gKERhdHVtKSAwOwogCi0J CQkJaWYgKCFqYnYpCQkvKiBOVUxMIG9yIGVtcHR5ICovCisJCQkJaWYgKGVtcHR5KQogCQkJ CQlicmVhazsKIAotCQkJCUFzc2VydCghZW1wdHkpOwotCi0JCQkJKnJlc251bGwgPSBmYWxz ZTsKKwkJCQlpZiAoIWpidikKKwkJCQkJcmV0dXJuIChEYXR1bSkgMDsJLyogTlVMTCAqLwog Ci0JCQkJLyogY29lcmNlIHNjYWxhciBpdGVtIHRvIHRoZSBvdXRwdXQgdHlwZSAqLwotCQkJ CWlmIChqZXhwci0+cmV0dXJuaW5nLT50eXBpZCA9PSBKU09OT0lEIHx8Ci0JCQkJCWpleHBy LT5yZXR1cm5pbmctPnR5cGlkID09IEpTT05CT0lEKQotCQkJCXsKLQkJCQkJLyogVXNlIHJl c3VsdCBjb2VyY2lvbiBmcm9tIGpzb25bYl0gdG8gdGhlIG91dHB1dCB0eXBlICovCi0JCQkJ CXJlcyA9IEpzb25iUEdldERhdHVtKEpzb25iVmFsdWVUb0pzb25iKGpidikpOwotCQkJCQli cmVhazsKLQkJCQl9CisJCQkJQXNzZXJ0KGpidi0+dHlwZSAhPSBqYnZOdWxsKTsKIAotCQkJ CS8qIFVzZSBjb2VyY2lvbiBmcm9tIFNRTC9KU09OIGl0ZW0gdHlwZSB0byB0aGUgb3V0cHV0 IHR5cGUgKi8KLQkJCQlyZXMgPSBFeGVjUHJlcGFyZUpzb25JdGVtQ29lcmNpb24oamJ2LAot CQkJCQkJCQkJCQkJICBqc2VzdGF0ZS0+anNleHByLT5yZXR1cm5pbmcsCi0JCQkJCQkJCQkJ CQkgICZqc2VzdGF0ZS0+Y29lcmNpb25zLAotCQkJCQkJCQkJCQkJICAmamNzdGF0ZSk7CisJ CQkJcmVzID0gRXhlY0pzb25WYWx1ZUNvZXJjaW9uKGpidiwgcmV0X3R5cGlkLCByZXRfdHlw bW9kLAorCQkJCQkJCQkJCQlyZXNudWxsLCBlcnJvcik7CiAKLQkJCQlpZiAoamNzdGF0ZS0+ Y29lcmNpb24gJiYKLQkJCQkJKGpjc3RhdGUtPmNvZXJjaW9uLT52aWFfaW8gfHwKLQkJCQkJ IGpjc3RhdGUtPmNvZXJjaW9uLT52aWFfcG9wdWxhdGUpKQotCQkJCXsKLQkJCQkJaWYgKGVy cm9yKQotCQkJCQl7Ci0JCQkJCQkqZXJyb3IgPSB0cnVlOwotCQkJCQkJcmV0dXJuIChEYXR1 bSkgMDsKLQkJCQkJfQotCi0JCQkJCS8qCi0JCQkJCSAqIENvZXJjaW9uIHZpYSBJL08gbWVh bnMgaGVyZSB0aGF0IHRoZSBjYXN0IHRvIHRoZSB0YXJnZXQKLQkJCQkJICogdHlwZSBzaW1w bHkgZG9lcyBub3QgZXhpc3QuCi0JCQkJCSAqLwotCQkJCQllcmVwb3J0KEVSUk9SLAotCQkJ CQkJCShlcnJjb2RlKEVSUkNPREVfU1FMX0pTT05fSVRFTV9DQU5OT1RfQkVfQ0FTVF9UT19U QVJHRVRfVFlQRSksCi0JCQkJCQkJIGVycm1zZygiU1FML0pTT04gaXRlbSBjYW5ub3QgYmUg Y2FzdCB0byB0YXJnZXQgdHlwZSIpKSk7Ci0JCQkJfQotCQkJCWVsc2UgaWYgKCFqY3N0YXRl LT5lc3RhdGUpCi0JCQkJCXJldHVybiByZXM7IC8qIG5vIGNvZXJjaW9uICovCisJCQkJaWYg KGVycm9yICYmICplcnJvcikKKwkJCQkJcmV0dXJuIChEYXR1bSkgMDsKIAotCQkJCS8qIGNv ZXJjZSB1c2luZyBzcGVjaWZpYyBleHByZXNzaW9uICovCi0JCQkJZXN0YXRlID0gamNzdGF0 ZS0+ZXN0YXRlOwotCQkJCWpzZXN0YXRlLT5jb2VyY2lvbl9leHByLT52YWx1ZSA9IHJlczsK LQkJCQlqc2VzdGF0ZS0+Y29lcmNpb25fZXhwci0+aXNudWxsID0gKnJlc251bGw7Ci0JCQkJ YnJlYWs7CisJCQkJcmV0dXJuIHJlczsKIAkJCX0KIAogCQljYXNlIEpTT05fRVhJU1RTX09Q OgpAQCAtNTEwMSwxMTMgKzUzOTMsNjggQEAgRXhlY0V2YWxKc29uRXhwcihFeHByRXZhbFN0 ZXAgKm9wLCBFeHByQ29udGV4dCAqZWNvbnRleHQsCiAJCQkJCQkJCQkJCQkJanNlc3RhdGUt PmFyZ3MsCiAJCQkJCQkJCQkJCQkJZXJyb3IpOwogCi0JCQkJKnJlc251bGwgPSBlcnJvciAm JiAqZXJyb3I7Ci0JCQkJcmVzID0gQm9vbEdldERhdHVtKGV4aXN0cyk7Ci0KLQkJCQlpZiAo IWpzZXN0YXRlLT5yZXN1bHRfZXhwcikKLQkJCQkJcmV0dXJuIHJlczsKKwkJCQlpZiAoIWVy cm9yIHx8ICEqZXJyb3IpCisJCQkJeworCQkJCQkvKiBTaG91bGQgc3VjY2VlZCwgb3V0cHV0 IHR5cGUgaXMgY2hlY2tlZCBieSBwYXJzZXIgKi8KKwkJCQkJKHZvaWQpIEV4ZWNKc29uQm9v bENvZXJjaW9uKGV4aXN0cywgcmV0X3R5cGlkLCByZXRfdHlwbW9kLCAmcmVzKTsKKwkJCQkJ KnJlc251bGwgPSBmYWxzZTsKKwkJCQl9CiAKLQkJCQkvKiBjb2VyY2UgdXNpbmcgcmVzdWx0 IGV4cHJlc3Npb24gKi8KLQkJCQllc3RhdGUgPSBqc2VzdGF0ZS0+cmVzdWx0X2V4cHI7Ci0J CQkJanNlc3RhdGUtPnJlc19leHByLT52YWx1ZSA9IHJlczsKLQkJCQlqc2VzdGF0ZS0+cmVz X2V4cHItPmlzbnVsbCA9ICpyZXNudWxsOwotCQkJCWJyZWFrOworCQkJCXJldHVybiByZXM7 CiAJCQl9CiAKLQkJY2FzZSBKU09OX1RBQkxFX09QOgotCQkJKnJlc251bGwgPSBmYWxzZTsK LQkJCXJldHVybiBpdGVtOwotCiAJCWRlZmF1bHQ6CiAJCQllbG9nKEVSUk9SLCAidW5yZWNv Z25pemVkIFNRTC9KU09OIGV4cHJlc3Npb24gb3AgJWQiLCBqZXhwci0+b3ApOwogCQkJcmV0 dXJuIChEYXR1bSkgMDsKIAl9CiAKLQlpZiAoZW1wdHkpCi0JewotCQlBc3NlcnQoamV4cHIt Pm9uX2VtcHR5KTsJLyogaXQgaXMgbm90IEpTT05fRVhJU1RTICovCisJQXNzZXJ0KGVtcHR5 KTsKKwlBc3NlcnQoamV4cHItPm9uX2VtcHR5KTsJLyogaXQgaXMgbm90IEpTT05fRVhJU1RT ICovCiAKLQkJaWYgKGpleHByLT5vbl9lbXB0eS0+YnR5cGUgPT0gSlNPTl9CRUhBVklPUl9F UlJPUikKKwlpZiAoamV4cHItPm9uX2VtcHR5LT5idHlwZSA9PSBKU09OX0JFSEFWSU9SX0VS Uk9SKQorCXsKKwkJaWYgKGVycm9yKQogCQl7Ci0JCQlpZiAoZXJyb3IpCi0JCQl7Ci0JCQkJ KmVycm9yID0gdHJ1ZTsKLQkJCQlyZXR1cm4gKERhdHVtKSAwOwotCQkJfQotCi0JCQllcmVw b3J0KEVSUk9SLAotCQkJCQkoZXJyY29kZShFUlJDT0RFX05PX1NRTF9KU09OX0lURU0pLAot CQkJCQkgZXJybXNnKCJubyBTUUwvSlNPTiBpdGVtIikpKTsKKwkJCSplcnJvciA9IHRydWU7 CisJCQlyZXR1cm4gKERhdHVtKSAwOwogCQl9CiAKLQkJaWYgKGpleHByLT5vbl9lbXB0eS0+ YnR5cGUgPT0gSlNPTl9CRUhBVklPUl9ERUZBVUxUKQotCi0JCQkvKgotCQkJICogRXhlY3V0 ZSBERUZBVUxUIGV4cHJlc3Npb24gYXMgYSBjb2VyY2lvbiBleHByZXNzaW9uLCBiZWNhdXNl Ci0JCQkgKiBpdHMgcmVzdWx0IGlzIGFscmVhZHkgY29lcmNlZCB0byB0aGUgdGFyZ2V0IHR5 cGUuCi0JCQkgKi8KLQkJCWVzdGF0ZSA9IGpzZXN0YXRlLT5kZWZhdWx0X29uX2VtcHR5Owot CQllbHNlCi0JCQkvKiBFeGVjdXRlIE9OIEVNUFRZIGJlaGF2aW9yICovCi0JCQlyZXMgPSBF eGVjRXZhbEpzb25CZWhhdmlvcihlY29udGV4dCwgamV4cHItPm9uX2VtcHR5LAotCQkJCQkJ CQkJICAganNlc3RhdGUtPmRlZmF1bHRfb25fZW1wdHksCi0JCQkJCQkJCQkgICByZXNudWxs KTsKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX05PX1NRTF9KU09O X0lURU0pLAorCQkJCSBlcnJtc2coIm5vIFNRTC9KU09OIGl0ZW0iKSkpOwogCX0KIAotCXJl dHVybiBFeGVjRXZhbEpzb25FeHByU3VidHJhbnMoRXhlY0V2YWxKc29uRXhwckNvZXJjaW9u LCBvcCwgZWNvbnRleHQsCi0JCQkJCQkJCQlyZXMsIHJlc251bGwsIGVzdGF0ZSwgZXJyb3Is Ci0JCQkJCQkJCQljeHQtPmNvZXJjaW9uSW5TdWJ0cmFucyk7Ci19Ci0KLWJvb2wKLUV4ZWNF dmFsSnNvbk5lZWRzU3ViVHJhbnNhY3Rpb24oSnNvbkV4cHIgKmpzZXhwciwKLQkJCQkJCQkJ c3RydWN0IEpzb25Db2VyY2lvbnNTdGF0ZSAqY29lcmNpb25zKQotewotCWlmIChqc2V4cHIt Pm9uX2Vycm9yLT5idHlwZSA9PSBKU09OX0JFSEFWSU9SX0VSUk9SKQotCQlyZXR1cm4gZmFs c2U7Ci0KLQlpZiAoanNleHByLT5vcCA9PSBKU09OX0VYSVNUU19PUCAmJiAhanNleHByLT5y ZXN1bHRfY29lcmNpb24pCi0JCXJldHVybiBmYWxzZTsKLQotCWlmICghY29lcmNpb25zKQot CQlyZXR1cm4gdHJ1ZTsKLQotCXJldHVybiBmYWxzZTsKKwkvKiBFeGVjdXRlIE9OIEVNUFRZ IGJlaGF2aW9yICovCisJcmV0dXJuIEV4ZWNFdmFsSnNvbkJlaGF2aW9yKGVjb250ZXh0LCBq ZXhwci0+b25fZW1wdHksCisJCQkJCQkJCWpzZXN0YXRlLT5kZWZhdWx0X29uX2VtcHR5LAor CQkJCQkJCQlyZXRfdHlwaWQsIHJldF90eXBtb2QsIHJlc251bGwpOwogfQogCiAvKiAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCi0gKgkJRXhlY0V2YWxKc29uCisgKgkJRXhlY0V2YWxKc29uRXhwcgogICogLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQogICovCiB2b2lkCi1FeGVjRXZhbEpzb24oRXhwclN0YXRlICpzdGF0ZSwgRXhw ckV2YWxTdGVwICpvcCwgRXhwckNvbnRleHQgKmVjb250ZXh0KQorRXhlY0V2YWxKc29uRXhw cihFeHByU3RhdGUgKnN0YXRlLCBFeHByRXZhbFN0ZXAgKm9wLCBFeHByQ29udGV4dCAqZWNv bnRleHQpCiB7Ci0JRXhlY0V2YWxKc29uRXhwckNvbnRleHQgY3h0OwogCUpzb25FeHByU3Rh dGUgKmpzZXN0YXRlID0gb3AtPmQuanNvbmV4cHIuanNlc3RhdGU7CiAJSnNvbkV4cHIgICAq amV4cHIgPSBqc2VzdGF0ZS0+anNleHByOwogCURhdHVtCQlpdGVtOwotCURhdHVtCQlyZXMg PSAoRGF0dW0pIDA7CisJRGF0dW0JCXJlczsKIAlKc29uUGF0aCAgICpwYXRoOwogCUxpc3RD ZWxsICAgKmxjOwogCWJvb2wJCWVycm9yID0gZmFsc2U7Ci0JYm9vbAkJbmVlZFN1YnRyYW5z OwogCWJvb2wJCXRocm93RXJyb3JzID0gamV4cHItPm9uX2Vycm9yLT5idHlwZSA9PSBKU09O X0JFSEFWSU9SX0VSUk9SOwogCi0JKm9wLT5yZXNudWxsID0gdHJ1ZTsJCS8qIHVudGlsIHdl IGdldCBhIHJlc3VsdCAqLwotCSpvcC0+cmVzdmFsdWUgPSAoRGF0dW0pIDA7Ci0KLQlpZiAo anNlc3RhdGUtPmZvcm1hdHRlZF9leHByLT5pc251bGwgfHwganNlc3RhdGUtPnBhdGhzcGVj LT5pc251bGwpCisJaWYgKGpzZXN0YXRlLT5mb3JtYXR0ZWRfZXhwci5pc251bGwgfHwganNl c3RhdGUtPnBhdGhzcGVjLmlzbnVsbCkKIAl7Ci0JCS8qIGV4ZWN1dGUgZG9tYWluIGNoZWNr cyBmb3IgTlVMTHMgKi8KLQkJKHZvaWQpIEV4ZWNFdmFsSnNvbkV4cHJDb2VyY2lvbihvcCwg ZWNvbnRleHQsIHJlcywgb3AtPnJlc251bGwsCi0JCQkJCQkJCQkJTlVMTCwgTlVMTCk7Ci0K LQkJQXNzZXJ0KCpvcC0+cmVzbnVsbCk7CisJCSpvcC0+cmVzbnVsbCA9IHRydWU7CisJCSpv cC0+cmVzdmFsdWUgPSAoRGF0dW0pIDA7CiAJCXJldHVybjsKIAl9CiAKLQlpdGVtID0ganNl c3RhdGUtPmZvcm1hdHRlZF9leHByLT52YWx1ZTsKLQlwYXRoID0gRGF0dW1HZXRKc29uUGF0 aFAoanNlc3RhdGUtPnBhdGhzcGVjLT52YWx1ZSk7CisJaXRlbSA9IGpzZXN0YXRlLT5mb3Jt YXR0ZWRfZXhwci52YWx1ZTsKKwlwYXRoID0gRGF0dW1HZXRKc29uUGF0aFAoanNlc3RhdGUt PnBhdGhzcGVjLnZhbHVlKTsKIAogCS8qIHJlc2V0IEpTT04gcGF0aCB2YXJpYWJsZSBjb250 ZXh0cyAqLwogCWZvcmVhY2gobGMsIGpzZXN0YXRlLT5hcmdzKQpAQCAtNTIxOCwyOSArNTQ2 NSwyMCBAQCBFeGVjRXZhbEpzb24oRXhwclN0YXRlICpzdGF0ZSwgRXhwckV2YWxTdGVwICpv cCwgRXhwckNvbnRleHQgKmVjb250ZXh0KQogCQl2YXItPmV2YWx1YXRlZCA9IGZhbHNlOwog CX0KIAotCW5lZWRTdWJ0cmFucyA9IEV4ZWNFdmFsSnNvbk5lZWRzU3ViVHJhbnNhY3Rpb24o amV4cHIsICZqc2VzdGF0ZS0+Y29lcmNpb25zKTsKLQotCWN4dC5wYXRoID0gcGF0aDsKLQlj eHQuZXJyb3IgPSB0aHJvd0Vycm9ycyA/IE5VTEwgOiAmZXJyb3I7Ci0JY3h0LmNvZXJjaW9u SW5TdWJ0cmFucyA9ICFuZWVkU3VidHJhbnMgJiYgIXRocm93RXJyb3JzOwotCUFzc2VydCgh bmVlZFN1YnRyYW5zIHx8IGN4dC5lcnJvcik7Ci0KLQlyZXMgPSBFeGVjRXZhbEpzb25FeHBy U3VidHJhbnMoRXhlY0V2YWxKc29uRXhwciwgb3AsIGVjb250ZXh0LCBpdGVtLAotCQkJCQkJ CQkgICBvcC0+cmVzbnVsbCwgJmN4dCwgY3h0LmVycm9yLAotCQkJCQkJCQkgICBuZWVkU3Vi dHJhbnMpOworCXJlcyA9IEV4ZWNFdmFsSnNvbkV4cHJJbnRlcm5hbChzdGF0ZSwganNlc3Rh dGUsIGVjb250ZXh0LAorCQkJCQkJCQkgICBwYXRoLCBpdGVtLCBvcC0+cmVzbnVsbCwKKwkJ CQkJCQkJICAgdGhyb3dFcnJvcnMgPyBOVUxMIDogJmVycm9yKTsKIAogCWlmIChlcnJvcikK IAl7CisJCUFzc2VydCghdGhyb3dFcnJvcnMpOworCiAJCS8qIEV4ZWN1dGUgT04gRVJST1Ig YmVoYXZpb3IgKi8KIAkJcmVzID0gRXhlY0V2YWxKc29uQmVoYXZpb3IoZWNvbnRleHQsIGpl eHByLT5vbl9lcnJvciwKIAkJCQkJCQkJICAganNlc3RhdGUtPmRlZmF1bHRfb25fZXJyb3Is CisJCQkJCQkJCSAgIGpleHByLT5yZXR1cm5pbmctPnR5cGlkLAorCQkJCQkJCQkgICBqZXhw ci0+cmV0dXJuaW5nLT50eXBtb2QsCiAJCQkJCQkJCSAgIG9wLT5yZXNudWxsKTsKLQotCQkv KiByZXN1bHQgaXMgYWxyZWFkeSBjb2VyY2VkIGluIERFRkFVTFQgYmVoYXZpb3IgY2FzZSAq LwotCQlpZiAoamV4cHItPm9uX2Vycm9yLT5idHlwZSAhPSBKU09OX0JFSEFWSU9SX0RFRkFV TFQpCi0JCQlyZXMgPSBFeGVjRXZhbEpzb25FeHByQ29lcmNpb24ob3AsIGVjb250ZXh0LCBy ZXMsCi0JCQkJCQkJCQkJICAgb3AtPnJlc251bGwsCi0JCQkJCQkJCQkJICAgTlVMTCwgTlVM TCk7CiAJfQogCiAJKm9wLT5yZXN2YWx1ZSA9IHJlczsKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL2ppdC9sbHZtL2xsdm1qaXRfZXhwci5jIGIvc3JjL2JhY2tlbmQvaml0L2xsdm0vbGx2 bWppdF9leHByLmMKaW5kZXggYmQzOTY1MTQzZGEuLmZkNzI2MzBmNWU2IDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9qaXQvbGx2bS9sbHZtaml0X2V4cHIuYworKysgYi9zcmMvYmFja2Vu ZC9qaXQvbGx2bS9sbHZtaml0X2V4cHIuYwpAQCAtMjQwOCw3ICsyNDA4LDcgQEAgbGx2bV9j b21waWxlX2V4cHIoRXhwclN0YXRlICpzdGF0ZSkKIAkJCQlicmVhazsKIAogCQkJY2FzZSBF RU9QX0pTT05FWFBSOgotCQkJCWJ1aWxkX0V2YWxYRnVuYyhiLCBtb2QsICJFeGVjRXZhbEpz b24iLAorCQkJCWJ1aWxkX0V2YWxYRnVuYyhiLCBtb2QsICJFeGVjRXZhbEpzb25FeHByIiwK IAkJCQkJCQkJdl9zdGF0ZSwgb3AsIHZfZWNvbnRleHQpOwogCQkJCUxMVk1CdWlsZEJyKGIs IG9wYmxvY2tzW29wbm8gKyAxXSk7CiAJCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9qaXQvbGx2bS9sbHZtaml0X3R5cGVzLmMgYi9zcmMvYmFja2VuZC9qaXQvbGx2bS9s bHZtaml0X3R5cGVzLmMKaW5kZXggMzczNDcxYWQyN2YuLjM3ZmU2NDY1NGI2IDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9qaXQvbGx2bS9sbHZtaml0X3R5cGVzLmMKKysrIGIvc3JjL2Jh Y2tlbmQvaml0L2xsdm0vbGx2bWppdF90eXBlcy5jCkBAIC0xMzUsNyArMTM1LDcgQEAgdm9p ZAkgICAqcmVmZXJlbmNlZF9mdW5jdGlvbnNbXSA9CiAJRXhlY0V2YWxYbWxFeHByLAogCUV4 ZWNFdmFsSnNvbkNvbnN0cnVjdG9yLAogCUV4ZWNFdmFsSnNvbklzUHJlZGljYXRlLAotCUV4 ZWNFdmFsSnNvbiwKKwlFeGVjRXZhbEpzb25FeHByLAogCU1ha2VFeHBhbmRlZE9iamVjdFJl YWRPbmx5SW50ZXJuYWwsCiAJc2xvdF9nZXRtaXNzaW5nYXR0cnMsCiAJc2xvdF9nZXRzb21l YXR0cnNfaW50LApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvbm9kZXMvbm9kZUZ1bmNzLmMg Yi9zcmMvYmFja2VuZC9ub2Rlcy9ub2RlRnVuY3MuYwppbmRleCBjMzM0ZGFhZTM5Mi4uZTAy NDBiZWVlYWIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL25vZGVzL25vZGVGdW5jcy5jCisr KyBiL3NyYy9iYWNrZW5kL25vZGVzL25vZGVGdW5jcy5jCkBAIC0yNjYsOSArMjY2LDYgQEAg ZXhwclR5cGUoY29uc3QgTm9kZSAqZXhwcikKIAkJY2FzZSBUX0pzb25FeHByOgogCQkJdHlw ZSA9ICgoY29uc3QgSnNvbkV4cHIgKikgZXhwciktPnJldHVybmluZy0+dHlwaWQ7CiAJCQli cmVhazsKLQkJY2FzZSBUX0pzb25Db2VyY2lvbjoKLQkJCXR5cGUgPSBleHByVHlwZSgoKGNv bnN0IEpzb25Db2VyY2lvbiAqKSBleHByKS0+ZXhwcik7Ci0JCQlicmVhazsKIAkJZGVmYXVs dDoKIAkJCWVsb2coRVJST1IsICJ1bnJlY29nbml6ZWQgbm9kZSB0eXBlOiAlZCIsIChpbnQp IG5vZGVUYWcoZXhwcikpOwogCQkJdHlwZSA9IEludmFsaWRPaWQ7CS8qIGtlZXAgY29tcGls ZXIgcXVpZXQgKi8KQEAgLTUwNyw4ICs1MDQsNiBAQCBleHByVHlwbW9kKGNvbnN0IE5vZGUg KmV4cHIpCiAJCQlyZXR1cm4gKChjb25zdCBKc29uQ29uc3RydWN0b3JFeHByICopIGV4cHIp LT5yZXR1cm5pbmctPnR5cG1vZDsKIAkJY2FzZSBUX0pzb25FeHByOgogCQkJcmV0dXJuICgo SnNvbkV4cHIgKikgZXhwciktPnJldHVybmluZy0+dHlwbW9kOwotCQljYXNlIFRfSnNvbkNv ZXJjaW9uOgotCQkJcmV0dXJuIGV4cHJUeXBtb2QoKChjb25zdCBKc29uQ29lcmNpb24gKikg ZXhwciktPmV4cHIpOwogCQlkZWZhdWx0OgogCQkJYnJlYWs7CiAJfQpAQCAtMTAxMCwxNCAr MTAwNSwxMiBAQCBleHByQ29sbGF0aW9uKGNvbnN0IE5vZGUgKmV4cHIpCiAJCWNhc2UgVF9K c29uRXhwcjoKIAkJCXsKIAkJCQlKc29uRXhwciAgICpqZXhwciA9IChKc29uRXhwciAqKSBl eHByOwotCQkJCUpzb25Db2VyY2lvbiAqY29lcmNpb24gPSBqZXhwci0+cmVzdWx0X2NvZXJj aW9uOwogCi0JCQkJaWYgKCFjb2VyY2lvbikKLQkJCQkJY29sbCA9IEludmFsaWRPaWQ7Ci0J CQkJZWxzZSBpZiAoY29lcmNpb24tPmV4cHIpCi0JCQkJCWNvbGwgPSBleHByQ29sbGF0aW9u KGNvZXJjaW9uLT5leHByKTsKLQkJCQllbHNlIGlmIChjb2VyY2lvbi0+dmlhX2lvIHx8IGNv ZXJjaW9uLT52aWFfcG9wdWxhdGUpCi0JCQkJCWNvbGwgPSBjb2VyY2lvbi0+Y29sbGF0aW9u OworCQkJCWlmIChqZXhwci0+cmV0dXJuaW5nLT50eXBpZCA9PSBURVhUT0lEIHx8CisJCQkJ CWpleHByLT5yZXR1cm5pbmctPnR5cGlkID09IENIQVJPSUQgfHwKKwkJCQkJamV4cHItPnJl dHVybmluZy0+dHlwaWQgPT0gVkFSQ0hBUk9JRCB8fAorCQkJCQlqZXhwci0+cmV0dXJuaW5n LT50eXBpZCA9PSBCUENIQVJPSUQpCisJCQkJCWNvbGwgPSBqZXhwci0+Y29sbGF0aW9uOwog CQkJCWVsc2UKIAkJCQkJY29sbCA9IEludmFsaWRPaWQ7CiAJCQl9CkBAIC0xMjU1LDE0ICsx MjQ4LDEyIEBAIGV4cHJTZXRDb2xsYXRpb24oTm9kZSAqZXhwciwgT2lkIGNvbGxhdGlvbikK IAkJY2FzZSBUX0pzb25FeHByOgogCQkJewogCQkJCUpzb25FeHByICAgKmpleHByID0gKEpz b25FeHByICopIGV4cHI7Ci0JCQkJSnNvbkNvZXJjaW9uICpjb2VyY2lvbiA9IGpleHByLT5y ZXN1bHRfY29lcmNpb247CiAKLQkJCQlpZiAoIWNvZXJjaW9uKQotCQkJCQlBc3NlcnQoIU9p ZElzVmFsaWQoY29sbGF0aW9uKSk7Ci0JCQkJZWxzZSBpZiAoY29lcmNpb24tPmV4cHIpCi0J CQkJCWV4cHJTZXRDb2xsYXRpb24oY29lcmNpb24tPmV4cHIsIGNvbGxhdGlvbik7Ci0JCQkJ ZWxzZSBpZiAoY29lcmNpb24tPnZpYV9pbyB8fCBjb2VyY2lvbi0+dmlhX3BvcHVsYXRlKQot CQkJCQljb2VyY2lvbi0+Y29sbGF0aW9uID0gY29sbGF0aW9uOworCQkJCWlmIChqZXhwci0+ cmV0dXJuaW5nLT50eXBpZCA9PSBURVhUT0lEIHx8CisJCQkJCWpleHByLT5yZXR1cm5pbmct PnR5cGlkID09IENIQVJPSUQgfHwKKwkJCQkJamV4cHItPnJldHVybmluZy0+dHlwaWQgPT0g VkFSQ0hBUk9JRCB8fAorCQkJCQlqZXhwci0+cmV0dXJuaW5nLT50eXBpZCA9PSBCUENIQVJP SUQpCisJCQkJCWpleHByLT5jb2xsYXRpb24gPSBjb2xsYXRpb247CiAJCQkJZWxzZQogCQkJ CQlBc3NlcnQoIU9pZElzVmFsaWQoY29sbGF0aW9uKSk7CiAJCQl9CkBAIC0yNTA3LDggKzI0 OTgsNiBAQCBleHByZXNzaW9uX3RyZWVfd2Fsa2VyKE5vZGUgKm5vZGUsCiAKIAkJCQlpZiAo d2Fsa2VyKGpleHByLT5mb3JtYXR0ZWRfZXhwciwgY29udGV4dCkpCiAJCQkJCXJldHVybiB0 cnVlOwotCQkJCWlmICh3YWxrZXIoamV4cHItPnJlc3VsdF9jb2VyY2lvbiwgY29udGV4dCkp Ci0JCQkJCXJldHVybiB0cnVlOwogCQkJCWlmICh3YWxrZXIoamV4cHItPnBhc3NpbmdfdmFs dWVzLCBjb250ZXh0KSkKIAkJCQkJcmV0dXJuIHRydWU7CiAJCQkJLyogd2UgYXNzdW1lIHdh bGtlciBkb2Vzbid0IGNhcmUgYWJvdXQgcGFzc2luZ19uYW1lcyAqLwpAQCAtMjUxNywzNiAr MjUwNiw2IEBAIGV4cHJlc3Npb25fdHJlZV93YWxrZXIoTm9kZSAqbm9kZSwKIAkJCQkJcmV0 dXJuIHRydWU7CiAJCQkJaWYgKHdhbGtlcihqZXhwci0+b25fZXJyb3ItPmRlZmF1bHRfZXhw ciwgY29udGV4dCkpCiAJCQkJCXJldHVybiB0cnVlOwotCQkJCWlmICh3YWxrZXIoamV4cHIt PmNvZXJjaW9ucywgY29udGV4dCkpCi0JCQkJCXJldHVybiB0cnVlOwotCQkJfQotCQkJYnJl YWs7Ci0JCWNhc2UgVF9Kc29uQ29lcmNpb246Ci0JCQlyZXR1cm4gd2Fsa2VyKCgoSnNvbkNv ZXJjaW9uICopIG5vZGUpLT5leHByLCBjb250ZXh0KTsKLQkJY2FzZSBUX0pzb25JdGVtQ29l cmNpb25zOgotCQkJewotCQkJCUpzb25JdGVtQ29lcmNpb25zICpjb2VyY2lvbnMgPSAoSnNv bkl0ZW1Db2VyY2lvbnMgKikgbm9kZTsKLQotCQkJCWlmICh3YWxrZXIoY29lcmNpb25zLT5u dWxsLCBjb250ZXh0KSkKLQkJCQkJcmV0dXJuIHRydWU7Ci0JCQkJaWYgKHdhbGtlcihjb2Vy Y2lvbnMtPnN0cmluZywgY29udGV4dCkpCi0JCQkJCXJldHVybiB0cnVlOwotCQkJCWlmICh3 YWxrZXIoY29lcmNpb25zLT5udW1lcmljLCBjb250ZXh0KSkKLQkJCQkJcmV0dXJuIHRydWU7 Ci0JCQkJaWYgKHdhbGtlcihjb2VyY2lvbnMtPmJvb2xlYW4sIGNvbnRleHQpKQotCQkJCQly ZXR1cm4gdHJ1ZTsKLQkJCQlpZiAod2Fsa2VyKGNvZXJjaW9ucy0+ZGF0ZSwgY29udGV4dCkp Ci0JCQkJCXJldHVybiB0cnVlOwotCQkJCWlmICh3YWxrZXIoY29lcmNpb25zLT50aW1lLCBj b250ZXh0KSkKLQkJCQkJcmV0dXJuIHRydWU7Ci0JCQkJaWYgKHdhbGtlcihjb2VyY2lvbnMt PnRpbWV0eiwgY29udGV4dCkpCi0JCQkJCXJldHVybiB0cnVlOwotCQkJCWlmICh3YWxrZXIo Y29lcmNpb25zLT50aW1lc3RhbXAsIGNvbnRleHQpKQotCQkJCQlyZXR1cm4gdHJ1ZTsKLQkJ CQlpZiAod2Fsa2VyKGNvZXJjaW9ucy0+dGltZXN0YW1wdHosIGNvbnRleHQpKQotCQkJCQly ZXR1cm4gdHJ1ZTsKLQkJCQlpZiAod2Fsa2VyKGNvZXJjaW9ucy0+Y29tcG9zaXRlLCBjb250 ZXh0KSkKLQkJCQkJcmV0dXJuIHRydWU7CiAJCQl9CiAJCQlicmVhazsKIAkJZGVmYXVsdDoK QEAgLTM1NzYsNyArMzUzNSw2IEBAIGV4cHJlc3Npb25fdHJlZV9tdXRhdG9yKE5vZGUgKm5v ZGUsCiAJCQkJRkxBVENPUFkobmV3bm9kZSwgamV4cHIsIEpzb25FeHByKTsKIAkJCQlNVVRB VEUobmV3bm9kZS0+cGF0aF9zcGVjLCBqZXhwci0+cGF0aF9zcGVjLCBOb2RlICopOwogCQkJ CU1VVEFURShuZXdub2RlLT5mb3JtYXR0ZWRfZXhwciwgamV4cHItPmZvcm1hdHRlZF9leHBy LCBOb2RlICopOwotCQkJCU1VVEFURShuZXdub2RlLT5yZXN1bHRfY29lcmNpb24sIGpleHBy LT5yZXN1bHRfY29lcmNpb24sIEpzb25Db2VyY2lvbiAqKTsKIAkJCQlNVVRBVEUobmV3bm9k ZS0+cGFzc2luZ192YWx1ZXMsIGpleHByLT5wYXNzaW5nX3ZhbHVlcywgTGlzdCAqKTsKIAkJ CQkvKiBhc3N1bWUgbXV0YXRvciBkb2VzIG5vdCBjYXJlIGFib3V0IHBhc3NpbmdfbmFtZXMg Ki8KIAkJCQlpZiAobmV3bm9kZS0+b25fZW1wdHkpCkBAIC0zNTg3LDM1ICszNTQ1LDYgQEAg ZXhwcmVzc2lvbl90cmVlX211dGF0b3IoTm9kZSAqbm9kZSwKIAkJCQlyZXR1cm4gKE5vZGUg KikgbmV3bm9kZTsKIAkJCX0KIAkJCWJyZWFrOwotCQljYXNlIFRfSnNvbkNvZXJjaW9uOgot CQkJewotCQkJCUpzb25Db2VyY2lvbiAqY29lcmNpb24gPSAoSnNvbkNvZXJjaW9uICopIG5v ZGU7Ci0JCQkJSnNvbkNvZXJjaW9uICpuZXdub2RlOwotCi0JCQkJRkxBVENPUFkobmV3bm9k ZSwgY29lcmNpb24sIEpzb25Db2VyY2lvbik7Ci0JCQkJTVVUQVRFKG5ld25vZGUtPmV4cHIs IGNvZXJjaW9uLT5leHByLCBOb2RlICopOwotCQkJCXJldHVybiAoTm9kZSAqKSBuZXdub2Rl OwotCQkJfQotCQkJYnJlYWs7Ci0JCWNhc2UgVF9Kc29uSXRlbUNvZXJjaW9uczoKLQkJCXsK LQkJCQlKc29uSXRlbUNvZXJjaW9ucyAqY29lcmNpb25zID0gKEpzb25JdGVtQ29lcmNpb25z ICopIG5vZGU7Ci0JCQkJSnNvbkl0ZW1Db2VyY2lvbnMgKm5ld25vZGU7Ci0KLQkJCQlGTEFU Q09QWShuZXdub2RlLCBjb2VyY2lvbnMsIEpzb25JdGVtQ29lcmNpb25zKTsKLQkJCQlNVVRB VEUobmV3bm9kZS0+bnVsbCwgY29lcmNpb25zLT5udWxsLCBKc29uQ29lcmNpb24gKik7Ci0J CQkJTVVUQVRFKG5ld25vZGUtPnN0cmluZywgY29lcmNpb25zLT5zdHJpbmcsIEpzb25Db2Vy Y2lvbiAqKTsKLQkJCQlNVVRBVEUobmV3bm9kZS0+bnVtZXJpYywgY29lcmNpb25zLT5udW1l cmljLCBKc29uQ29lcmNpb24gKik7Ci0JCQkJTVVUQVRFKG5ld25vZGUtPmJvb2xlYW4sIGNv ZXJjaW9ucy0+Ym9vbGVhbiwgSnNvbkNvZXJjaW9uICopOwotCQkJCU1VVEFURShuZXdub2Rl LT5kYXRlLCBjb2VyY2lvbnMtPmRhdGUsIEpzb25Db2VyY2lvbiAqKTsKLQkJCQlNVVRBVEUo bmV3bm9kZS0+dGltZSwgY29lcmNpb25zLT50aW1lLCBKc29uQ29lcmNpb24gKik7Ci0JCQkJ TVVUQVRFKG5ld25vZGUtPnRpbWV0eiwgY29lcmNpb25zLT50aW1ldHosIEpzb25Db2VyY2lv biAqKTsKLQkJCQlNVVRBVEUobmV3bm9kZS0+dGltZXN0YW1wLCBjb2VyY2lvbnMtPnRpbWVz dGFtcCwgSnNvbkNvZXJjaW9uICopOwotCQkJCU1VVEFURShuZXdub2RlLT50aW1lc3RhbXB0 eiwgY29lcmNpb25zLT50aW1lc3RhbXB0eiwgSnNvbkNvZXJjaW9uICopOwotCQkJCU1VVEFU RShuZXdub2RlLT5jb21wb3NpdGUsIGNvZXJjaW9ucy0+Y29tcG9zaXRlLCBKc29uQ29lcmNp b24gKik7Ci0JCQkJcmV0dXJuIChOb2RlICopIG5ld25vZGU7Ci0JCQl9Ci0JCQlicmVhazsK IAkJZGVmYXVsdDoKIAkJCWVsb2coRVJST1IsICJ1bnJlY29nbml6ZWQgbm9kZSB0eXBlOiAl ZCIsCiAJCQkJIChpbnQpIG5vZGVUYWcobm9kZSkpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvb3B0aW1pemVyL3V0aWwvY2xhdXNlcy5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0 aWwvY2xhdXNlcy5jCmluZGV4IDUzM2RmODZmZjc3Li42ZWI5MjM4OTJmNCAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvY2xhdXNlcy5jCisrKyBiL3NyYy9iYWNr ZW5kL29wdGltaXplci91dGlsL2NsYXVzZXMuYwpAQCAtNDExLDYgKzQxMSwyNiBAQCBjb250 YWluX211dGFibGVfZnVuY3Rpb25zX3dhbGtlcihOb2RlICpub2RlLCB2b2lkICpjb250ZXh0 KQogCXsKIAkJSnNvbkV4cHIgICAqamV4cHIgPSBjYXN0Tm9kZShKc29uRXhwciwgbm9kZSk7 CiAJCUNvbnN0CSAgICpjbnN0OworCQlib29sCQlyZXR1cm5zX2RhdGV0aW1lOworCisJCS8q CisJCSAqIElucHV0IGZ1Y3Rpb25zIGZvciBkYXRldGltZSB0eXBlcyBhcmUgc3RhYmxlLiAg VGhleSBjYW4gYmUKKwkJICogY2FsbGVkIGluIEpTT05fVkFMVUUoKSwgd2hlbiB0aGUgcmVz dWx0aW5nIFNRTC9KU09OIGlzIGEKKwkJICogc3RyaW5nLgorCQkgKi8KKwkJaWYgKGpleHBy LT5yZXR1cm5pbmctPnR5cGlkID09IERBVEVPSUQgfHwKKwkJCWpleHByLT5yZXR1cm5pbmct PnR5cGlkID09IFRJTUVPSUQgfHwKKwkJCWpleHByLT5yZXR1cm5pbmctPnR5cGlkID09IFRJ TUVUWk9JRCB8fAorCQkJamV4cHItPnJldHVybmluZy0+dHlwaWQgPT0gVElNRVNUQU1QT0lE IHx8CisJCQlqZXhwci0+cmV0dXJuaW5nLT50eXBpZCA9PSBUSU1FU1RBTVBUWk9JRCkKKwkJ CXJldHVybiB0cnVlOworCisJCS8qCisJCSAqIHBnX2NvbnZlcnRfdG8oKSwgd2hpY2ggaXMg dXNlZCBmb3IgaW1wbGVtZW50YXRpb24gb2YKKwkJICogSlNPTl9RVUVSWShSRVRVUk5JTkcg Ynl0ZWEgRk9STUFUIEpTT04pLCBpcyBzdGFibGUuCisJCSAqLworCQlpZiAoamV4cHItPnJl dHVybmluZy0+dHlwaWQgPT0gQllURUFPSUQpCisJCQlyZXR1cm4gdHJ1ZTsKIAogCQlpZiAo IUlzQShqZXhwci0+cGF0aF9zcGVjLCBDb25zdCkpCiAJCQlyZXR1cm4gdHJ1ZTsKQEAgLTQy MSw4ICs0NDEsMzIgQEAgY29udGFpbl9tdXRhYmxlX2Z1bmN0aW9uc193YWxrZXIoTm9kZSAq bm9kZSwgdm9pZCAqY29udGV4dCkKIAkJaWYgKGNuc3QtPmNvbnN0aXNudWxsKQogCQkJcmV0 dXJuIGZhbHNlOwogCi0JCXJldHVybiBqc3BJc011dGFibGUoRGF0dW1HZXRKc29uUGF0aFAo Y25zdC0+Y29uc3R2YWx1ZSksCi0JCQkJCQkJamV4cHItPnBhc3NpbmdfbmFtZXMsIGpleHBy LT5wYXNzaW5nX3ZhbHVlcyk7CisJCWlmIChqc3BJc011dGFibGUoRGF0dW1HZXRKc29uUGF0 aFAoY25zdC0+Y29uc3R2YWx1ZSksCisJCQkJCQkgamV4cHItPnBhc3NpbmdfbmFtZXMsIGpl eHByLT5wYXNzaW5nX3ZhbHVlcywKKwkJCQkJCSAmcmV0dXJuc19kYXRldGltZSkpCisJCQly ZXR1cm4gdHJ1ZTsKKworCQlpZiAocmV0dXJuc19kYXRldGltZSAmJiBqZXhwci0+b3AgPT0g SlNPTl9WQUxVRV9PUCkKKwkJeworCQkJLyoKKwkJCSAqIFNvbWUgZGF0ZXRpbWUgdHlwZXMg aGF2ZSBtdXRhYmxlIG91dHB1dCBmdW5jdGlvbnMsCisJCQkgKiBzbyBpZiByZXR1cm5pbmcg c3RyaW5nIHR5cGVzIHdob2xlIGV4cHJlc3Npb24gaXMgbXV0YWJsZS4KKwkJCSAqIFRPRE8g Y2hlY2sgaW5kaXZpZHVhbCBkYXRldGltZSB0eXBlIGlmIGl0IGlzIGtub3duLgorCQkJICoK KwkJCSAqIE90aGVyIG5vbi1KU09OIG91dHB1dCB0eXBlcyBoYXZlIG5vIGNvbnZlcnNpb24g ZnJvbQorCQkJICogZGF0ZXRpbWUgdHlwZXMuCisJCQkgKgorCQkJICogRGF0ZXRpbWUgcmV0 dXJuaW5nIHR5cGVzIHdlcmUgY2hlY2tlZCBhYm92ZSwgbm8gbmVlZCB0bworCQkJICogY2hl Y2sgdGhlbSBoZXJlLiAgQnV0IGNvbnZlcnNpb24gYmV0d2VlbiB0aGVtIGFsc28gY2FuCisJ CQkgKiBiZSBtdXRhYmxlLgorCQkJICovCisJCQlpZiAoamV4cHItPnJldHVybmluZy0+dHlw aWQgPT0gVEVYVE9JRCB8fAorCQkJCWpleHByLT5yZXR1cm5pbmctPnR5cGlkID09IFZBUkNI QVJPSUQgfHwKKwkJCQlqZXhwci0+cmV0dXJuaW5nLT50eXBpZCA9PSBCUENIQVJPSUQpCisJ CQkJcmV0dXJuIHRydWU7CisJCX0KKworCQlyZXR1cm4gZmFsc2U7CiAJfQogCiAJaWYgKElz QShub2RlLCBTUUxWYWx1ZUZ1bmN0aW9uKSkKQEAgLTg5NiwxOCArOTQwLDYgQEAgbWF4X3Bh cmFsbGVsX2hhemFyZF93YWxrZXIoTm9kZSAqbm9kZSwgbWF4X3BhcmFsbGVsX2hhemFyZF9j b250ZXh0ICpjb250ZXh0KQogCQkJCQkJCQkgY29udGV4dCwgMCk7CiAJfQogCi0JLyogSnNv bkV4cHIgaXMgcGFyYWxsZWwtdW5zYWZlIGlmIHN1YnRyYW5zYWN0aW9ucyBjYW4gYmUgdXNl ZC4gKi8KLQllbHNlIGlmIChJc0Eobm9kZSwgSnNvbkV4cHIpKQotCXsKLQkJSnNvbkV4cHIg ICAqanNleHByID0gKEpzb25FeHByICopIG5vZGU7Ci0KLQkJaWYgKEV4ZWNFdmFsSnNvbk5l ZWRzU3ViVHJhbnNhY3Rpb24oanNleHByLCBOVUxMKSkKLQkJewotCQkJY29udGV4dC0+bWF4 X2hhemFyZCA9IFBST1BBUkFMTEVMX1VOU0FGRTsKLQkJCXJldHVybiB0cnVlOwotCQl9Ci0J fQotCiAJLyogUmVjdXJzZSB0byBjaGVjayBhcmd1bWVudHMgKi8KIAlyZXR1cm4gZXhwcmVz c2lvbl90cmVlX3dhbGtlcihub2RlLAogCQkJCQkJCQkgIG1heF9wYXJhbGxlbF9oYXphcmRf d2Fsa2VyLApAQCAtNTMyMywzICs1MzU1LDE2IEBAIHB1bGxfcGFyYW1pZHNfd2Fsa2VyKE5v ZGUgKm5vZGUsIEJpdG1hcHNldCAqKmNvbnRleHQpCiAJcmV0dXJuIGV4cHJlc3Npb25fdHJl ZV93YWxrZXIobm9kZSwgcHVsbF9wYXJhbWlkc193YWxrZXIsCiAJCQkJCQkJCSAgKHZvaWQg KikgY29udGV4dCk7CiB9CisKK2Jvb2wKK2V4cHJfY2FuX3Rocm93X2Vycm9ycyhOb2RlICpl eHByKQoreworCWlmICghZXhwcikKKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKElzQShleHBy LCBDb25zdCkpCisJCXJldHVybiBmYWxzZTsKKworCS8qIFRPRE8gY29uc2lkZXIgbW9yZSBj YXNlcyAqLworCXJldHVybiB0cnVlOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcGFy c2VyL3BhcnNlX2V4cHIuYyBiL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9leHByLmMKaW5k ZXggZmFiYjVmNzIwNzYuLjAxYzJmZGYzODU5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9w YXJzZXIvcGFyc2VfZXhwci5jCisrKyBiL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9leHBy LmMKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRl ICJub2Rlcy9tYWtlZnVuY3MuaCIKICNpbmNsdWRlICJub2Rlcy9ub2RlRnVuY3MuaCIKKyNp bmNsdWRlICJvcHRpbWl6ZXIvY2xhdXNlcy5oIgogI2luY2x1ZGUgIm9wdGltaXplci9vcHRp bWl6ZXIuaCIKICNpbmNsdWRlICJwYXJzZXIvYW5hbHl6ZS5oIgogI2luY2x1ZGUgInBhcnNl ci9wYXJzZV9hZ2cuaCIKQEAgLTQxMDgsNyArNDEwOSw2IEBAIHRyYW5zZm9ybUpzb25FeHBy Q29tbW9uKFBhcnNlU3RhdGUgKnBzdGF0ZSwgSnNvbkZ1bmNFeHByICpmdW5jKQogCS8qIGZv cm1hdCBpcyBkZXRlcm1pbmVkIGJ5IGNvbnRleHQgaXRlbSB0eXBlICovCiAJZm9ybWF0ID0g ZXhwclR5cGUoanNleHByLT5mb3JtYXR0ZWRfZXhwcikgPT0gSlNPTkJPSUQgPyBKU19GT1JN QVRfSlNPTkIgOiBKU19GT1JNQVRfSlNPTjsKIAotCWpzZXhwci0+cmVzdWx0X2NvZXJjaW9u ID0gTlVMTDsKIAlqc2V4cHItPm9taXRfcXVvdGVzID0gZmFsc2U7CiAKIAlqc2V4cHItPmZv cm1hdCA9IGZ1bmMtPmNvbW1vbi0+ZXhwci0+Zm9ybWF0OwpAQCAtNDE2OSw0MCArNDE2OSw2 IEBAIGFzc2lnbkRlZmF1bHRKc29uUmV0dXJuaW5nVHlwZShOb2RlICpjb250ZXh0X2l0ZW0s IEpzb25Gb3JtYXQgKmNvbnRleHRfZm9ybWF0LAogCXJldC0+dHlwbW9kID0gLTE7CiB9CiAK LS8qCi0gKiBUcnkgdG8gY29lcmNlIGV4cHJlc3Npb24gdG8gdGhlIG91dHB1dCB0eXBlIG9y Ci0gKiB1c2UganNvbl9wb3B1bGF0ZV90eXBlKCkgZm9yIGNvbXBvc2l0ZSwgYXJyYXkgYW5k IGRvbWFpbiB0eXBlcyBvcgotICogdXNlIGNvZXJjaW9uIHZpYSBJL08uCi0gKi8KLXN0YXRp YyBKc29uQ29lcmNpb24gKgotY29lcmNlSnNvbkV4cHIoUGFyc2VTdGF0ZSAqcHN0YXRlLCBO b2RlICpleHByLCBjb25zdCBKc29uUmV0dXJuaW5nICpyZXR1cm5pbmcpCi17Ci0JY2hhcgkJ dHlwdHlwZTsKLQlKc29uQ29lcmNpb24gKmNvZXJjaW9uID0gbWFrZU5vZGUoSnNvbkNvZXJj aW9uKTsKLQotCWNvZXJjaW9uLT5leHByID0gY29lcmNlSnNvbkZ1bmNFeHByKHBzdGF0ZSwg ZXhwciwgcmV0dXJuaW5nLCBmYWxzZSk7Ci0KLQlpZiAoY29lcmNpb24tPmV4cHIpCi0Jewot CQlpZiAoY29lcmNpb24tPmV4cHIgPT0gZXhwcikKLQkJCWNvZXJjaW9uLT5leHByID0gTlVM TDsKLQotCQlyZXR1cm4gY29lcmNpb247Ci0JfQotCi0JdHlwdHlwZSA9IGdldF90eXB0eXBl KHJldHVybmluZy0+dHlwaWQpOwotCi0JaWYgKHJldHVybmluZy0+dHlwaWQgPT0gUkVDT1JE T0lEIHx8Ci0JCXR5cHR5cGUgPT0gVFlQVFlQRV9DT01QT1NJVEUgfHwKLQkJdHlwdHlwZSA9 PSBUWVBUWVBFX0RPTUFJTiB8fAotCQl0eXBlX2lzX2FycmF5KHJldHVybmluZy0+dHlwaWQp KQotCQljb2VyY2lvbi0+dmlhX3BvcHVsYXRlID0gdHJ1ZTsKLQllbHNlCi0JCWNvZXJjaW9u LT52aWFfaW8gPSB0cnVlOwotCi0JcmV0dXJuIGNvZXJjaW9uOwotfQotCiAvKgogICogVHJh bnNmb3JtIGEgSlNPTiBvdXRwdXQgY2xhdXNlIG9mIEpTT05fVkFMVUUgYW5kIEpTT05fUVVF UlkuCiAgKi8KQEAgLTQyMTAsOCArNDE3Niw2IEBAIHN0YXRpYyB2b2lkCiB0cmFuc2Zvcm1K c29uRnVuY0V4cHJPdXRwdXQoUGFyc2VTdGF0ZSAqcHN0YXRlLCBKc29uRnVuY0V4cHIgKmZ1 bmMsCiAJCQkJCQkJSnNvbkV4cHIgKmpzZXhwcikKIHsKLQlOb2RlCSAgICpleHByID0ganNl eHByLT5mb3JtYXR0ZWRfZXhwcjsKLQogCWpzZXhwci0+cmV0dXJuaW5nID0gdHJhbnNmb3Jt SnNvbk91dHB1dChwc3RhdGUsIGZ1bmMtPm91dHB1dCwgZmFsc2UpOwogCiAJLyogSlNPTl9W QUxVRSByZXR1cm5zIHRleHQgYnkgZGVmYXVsdCAqLwpAQCAtNDIyNSwxNCArNDE4OSw0MSBA QCB0cmFuc2Zvcm1Kc29uRnVuY0V4cHJPdXRwdXQoUGFyc2VTdGF0ZSAqcHN0YXRlLCBKc29u RnVuY0V4cHIgKmZ1bmMsCiAJewogCQlKc29uUmV0dXJuaW5nIHJldDsKIAotCQlpZiAoZnVu Yy0+b3AgPT0gSlNPTl9WQUxVRV9PUCAmJgotCQkJanNleHByLT5yZXR1cm5pbmctPnR5cGlk ICE9IEpTT05PSUQgJiYKLQkJCWpzZXhwci0+cmV0dXJuaW5nLT50eXBpZCAhPSBKU09OQk9J RCkKKwkJaWYgKGZ1bmMtPm9wID09IEpTT05fVkFMVUVfT1ApCiAJCXsKLQkJCS8qIEZvcmNl ZCBjb2VyY2lvbiB2aWEgSS9PIGZvciBKU09OX1ZBTFVFIGZvciBub24tSlNPTiB0eXBlcyAq LwotCQkJanNleHByLT5yZXN1bHRfY29lcmNpb24gPSBtYWtlTm9kZShKc29uQ29lcmNpb24p OwotCQkJanNleHByLT5yZXN1bHRfY29lcmNpb24tPmV4cHIgPSBOVUxMOwotCQkJanNleHBy LT5yZXN1bHRfY29lcmNpb24tPnZpYV9pbyA9IHRydWU7CisJCQkvKgorCQkJICogT25seSBh IGxpbWl0ZWQgbGlzdCBvZiBvdXRwdXQgdHlwZXMgaXMgc3VwcG9ydGVkIGluCisJCQkgKiBK U09OX1ZBTFVFKCkgbm93LgorCQkJICovCisJCQlzd2l0Y2ggKGpzZXhwci0+cmV0dXJuaW5n LT50eXBpZCkKKwkJCXsKKwkJCQljYXNlIEpTT05CT0lEOgorCQkJCWNhc2UgSlNPTk9JRDoK KwkJCQljYXNlIFRFWFRPSUQ6CisJCQkJY2FzZSBWQVJDSEFST0lEOgorCQkJCWNhc2UgQlBD SEFST0lEOgorCQkJCWNhc2UgQk9PTE9JRDoKKwkJCQljYXNlIE5VTUVSSUNPSUQ6CisJCQkJ Y2FzZSBJTlQyT0lEOgorCQkJCWNhc2UgSU5UNE9JRDoKKwkJCQljYXNlIElOVDhPSUQ6CisJ CQkJY2FzZSBGTE9BVDRPSUQ6CisJCQkJY2FzZSBGTE9BVDhPSUQ6CisJCQkJY2FzZSBEQVRF T0lEOgorCQkJCWNhc2UgVElNRU9JRDoKKwkJCQljYXNlIFRJTUVUWk9JRDoKKwkJCQljYXNl IFRJTUVTVEFNUE9JRDoKKwkJCQljYXNlIFRJTUVTVEFNUFRaT0lEOgorCQkJCQlicmVhazsg LyogT2sgKi8KKworCQkJCWRlZmF1bHQ6CisJCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkJ KGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAorCQkJCQkJCSBlcnJt c2coInJldHVybmluZyB0eXBlICVzIGlzIG5vdCBzdXBwb3J0ZWQgaW4gSlNPTl9WQUxVRSgp IiwKKwkJCQkJCQkJCWZvcm1hdF90eXBlX2JlKGpzZXhwci0+cmV0dXJuaW5nLT50eXBpZCkp LAorCQkJCQkJCSBwYXJzZXJfY29lcmNpb25fZXJycG9zaXRpb24ocHN0YXRlLCBmdW5jLT5s b2NhdGlvbiwgKE5vZGUgKikganNleHByKSkpOworCQkJfQorCiAJCQlyZXR1cm47CiAJCX0K IApAQCAtNDI0MSwxMyArNDIzMiwyMyBAQCB0cmFuc2Zvcm1Kc29uRnVuY0V4cHJPdXRwdXQo UGFyc2VTdGF0ZSAqcHN0YXRlLCBKc29uRnVuY0V4cHIgKmZ1bmMsCiAJCWlmIChyZXQudHlw aWQgIT0ganNleHByLT5yZXR1cm5pbmctPnR5cGlkIHx8CiAJCQlyZXQudHlwbW9kICE9IGpz ZXhwci0+cmV0dXJuaW5nLT50eXBtb2QpCiAJCXsKLQkJCU5vZGUJICAgKnBsYWNlaG9sZGVy ID0gbWFrZUNhc2VUZXN0RXhwcihleHByKTsKLQotCQkJQXNzZXJ0KCgoQ2FzZVRlc3RFeHBy ICopIHBsYWNlaG9sZGVyKS0+dHlwZUlkID09IHJldC50eXBpZCk7Ci0JCQlBc3NlcnQoKChD YXNlVGVzdEV4cHIgKikgcGxhY2Vob2xkZXIpLT50eXBlTW9kID09IHJldC50eXBtb2QpOwor CQkJc3dpdGNoIChqc2V4cHItPnJldHVybmluZy0+dHlwaWQpCisJCQl7CisJCQkJY2FzZSBK U09OQk9JRDoKKwkJCQljYXNlIEpTT05PSUQ6CisJCQkJY2FzZSBURVhUT0lEOgorCQkJCWNh c2UgVkFSQ0hBUk9JRDoKKwkJCQljYXNlIEJQQ0hBUk9JRDoKKwkJCQljYXNlIEJZVEVBT0lE OgorCQkJCQlicmVhazsKIAotCQkJanNleHByLT5yZXN1bHRfY29lcmNpb24gPSBjb2VyY2VK c29uRXhwcihwc3RhdGUsIHBsYWNlaG9sZGVyLAotCQkJCQkJCQkJCQkJCSBqc2V4cHItPnJl dHVybmluZyk7CisJCQkJZGVmYXVsdDoKKwkJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCQko ZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCisJCQkJCQkJIGVycm1z ZygicmV0dXJuaW5nIHR5cGUgJXMgaXMgbm90IHN1cHBvcnRlZCBpbiBKU09OX1FVRVJZKCki LAorCQkJCQkJCQkJZm9ybWF0X3R5cGVfYmUoanNleHByLT5yZXR1cm5pbmctPnR5cGlkKSks CisJCQkJCQkJIHBhcnNlcl9jb2VyY2lvbl9lcnJwb3NpdGlvbihwc3RhdGUsIGZ1bmMtPmxv Y2F0aW9uLCAoTm9kZSAqKSBqc2V4cHIpKSk7CisJCQl9CiAJCX0KIAl9CiAJZWxzZQpAQCAt NDI1OSw4ICs0MjYwLDEwIEBAIHRyYW5zZm9ybUpzb25GdW5jRXhwck91dHB1dChQYXJzZVN0 YXRlICpwc3RhdGUsIEpzb25GdW5jRXhwciAqZnVuYywKICAqIENvZXJjZSBhbiBleHByZXNz aW9uIGluIEpTT04gREVGQVVMVCBiZWhhdmlvciB0byB0aGUgdGFyZ2V0IG91dHB1dCB0eXBl LgogICovCiBzdGF0aWMgTm9kZSAqCi1jb2VyY2VEZWZhdWx0SnNvbkV4cHIoUGFyc2VTdGF0 ZSAqcHN0YXRlLCBKc29uRXhwciAqanNleHByLCBOb2RlICpkZWZleHByKQorY29lcmNlRGVm YXVsdEpzb25FeHByKFBhcnNlU3RhdGUgKnBzdGF0ZSwgSnNvbkV4cHIgKmpzZXhwciwKKwkJ CQkJICBib29sIGlzX29uX2VtcHR5LCBOb2RlICpkZWZleHByKQogeworCU5vZGUJICAgKm9y aWdfZGVmZXhwciA9IGRlZmV4cHI7CiAJaW50CQkJbG9jYXRpb247CiAJT2lkCQkJZXhwcnR5 cGU7CiAKQEAgLTQyOTAsNjMgKzQyOTMsMzEgQEAgY29lcmNlRGVmYXVsdEpzb25FeHByKFBh cnNlU3RhdGUgKnBzdGF0ZSwgSnNvbkV4cHIgKmpzZXhwciwgTm9kZSAqZGVmZXhwcikKIAkJ CQkJCWZvcm1hdF90eXBlX2JlKGpzZXhwci0+cmV0dXJuaW5nLT50eXBpZCkpLAogCQkJCSBw YXJzZXJfZXJycG9zaXRpb24ocHN0YXRlLCBsb2NhdGlvbikpKTsKIAotCXJldHVybiBkZWZl eHByOwotfQorCS8qIERvbid0IGFsbG93IHVuc2FmZSBERUZBVUwgT04gRU1QVFkgZXhwcmVz c2lvbnMsIHVubGVzcyBFUlJPUiBPTiBFUlJPUiAqLworCWlmICghaXNfb25fZW1wdHkgfHwK KwkJanNleHByLT5vbl9lcnJvci0+YnR5cGUgPT0gSlNPTl9CRUhBVklPUl9FUlJPUikKKwkJ cmV0dXJuIGRlZmV4cHI7CiAKLS8qCi0gKiBJbml0aWFsaXplIFNRTC9KU09OIGl0ZW0gY29l cmNpb24gZnJvbSB0aGUgU1FMIHR5cGUgInR5cGlkIiB0byB0aGUgdGFyZ2V0Ci0gKiAicmV0 dXJuaW5nIiB0eXBlLgotICovCi1zdGF0aWMgSnNvbkNvZXJjaW9uICoKLWluaXRKc29uSXRl bUNvZXJjaW9uKFBhcnNlU3RhdGUgKnBzdGF0ZSwgT2lkIHR5cGlkLAotCQkJCQkgY29uc3Qg SnNvblJldHVybmluZyAqcmV0dXJuaW5nKQotewotCU5vZGUJICAgKmV4cHI7CisJaWYgKCFl eHByX2Nhbl90aHJvd19lcnJvcnMoZGVmZXhwcikpCisJCXJldHVybiBkZWZleHByOwogCi0J aWYgKHR5cGlkID09IFVOS05PV05PSUQpCisJLyogVHJ5IHRvIHNpbXBsaWZ5IGV4cHJlc3Np b24gaWYgdGhlcmUgaXMgbm9uLWVtcHR5IGNvZXJjaW9uICovCisJaWYgKGRlZmV4cHIgIT0g b3JpZ19kZWZleHByICYmCisJCSFleHByX2Nhbl90aHJvd19lcnJvcnMob3JpZ19kZWZleHBy KSkKIAl7Ci0JCWV4cHIgPSAoTm9kZSAqKSBtYWtlTnVsbENvbnN0KFVOS05PV05PSUQsIC0x LCBJbnZhbGlkT2lkKTsKLQl9Ci0JZWxzZQotCXsKLQkJQ2FzZVRlc3RFeHByICpwbGFjZWhv bGRlciA9IG1ha2VOb2RlKENhc2VUZXN0RXhwcik7CisJCWRlZmV4cHIgPSBldmFsX2NvbnN0 X2V4cHJlc3Npb25zKE5VTEwsIGRlZmV4cHIpOwogCi0JCXBsYWNlaG9sZGVyLT50eXBlSWQg PSB0eXBpZDsKLQkJcGxhY2Vob2xkZXItPnR5cGVNb2QgPSAtMTsKLQkJcGxhY2Vob2xkZXIt PmNvbGxhdGlvbiA9IEludmFsaWRPaWQ7Ci0KLQkJZXhwciA9IChOb2RlICopIHBsYWNlaG9s ZGVyOworCQlpZiAoIWV4cHJfY2FuX3Rocm93X2Vycm9ycyhkZWZleHByKSkKKwkJCXJldHVy biBkZWZleHByOwogCX0KIAotCXJldHVybiBjb2VyY2VKc29uRXhwcihwc3RhdGUsIGV4cHIs IHJldHVybmluZyk7Ci19CisJZXJlcG9ydChFUlJPUiwKKwkJCShlcnJjb2RlKEVSUkNPREVf RkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKKwkJCSBlcnJtc2coInVuc2FmZSBERUZBVUxUIE9O IEVNUFRZIGV4cHJlc3Npb25zIGFyZSBub3Qgc3VwcG9ydGVkIiksCisJCQkgZXJyaGludCgi VXNlIEVSUk9SIE9OIEVSUk9SIGNsYXVzZSBvciB0cnkgdG8gc2ltcGxpZnkgZXhwcmVzc2lv biBpbnRvIGNvbnN0YW50LWxpa2UgZm9ybSIpLAorCQkJIHBhcnNlcl9lcnJwb3NpdGlvbihw c3RhdGUsIGxvY2F0aW9uKSkpOwogCi1zdGF0aWMgdm9pZAotaW5pdEpzb25JdGVtQ29lcmNp b25zKFBhcnNlU3RhdGUgKnBzdGF0ZSwgSnNvbkl0ZW1Db2VyY2lvbnMgKmNvZXJjaW9ucywK LQkJCQkJICBjb25zdCBKc29uUmV0dXJuaW5nICpyZXR1cm5pbmcsIE9pZCBjb250ZXh0SXRl bVR5cGVJZCkKLXsKLQlzdHJ1Y3QKLQl7Ci0JCUpzb25Db2VyY2lvbiAqKmNvZXJjaW9uOwot CQlPaWQJCQl0eXBpZDsKLQl9CQkgICAqcCwKLQkJCQljb2VyY2lvblR5cGlkc1tdID0KLQl7 Ci0JCXsmY29lcmNpb25zLT5udWxsLCBVTktOT1dOT0lEfSwKLQkJeyZjb2VyY2lvbnMtPnN0 cmluZywgVEVYVE9JRH0sCi0JCXsmY29lcmNpb25zLT5udW1lcmljLCBOVU1FUklDT0lEfSwK LQkJeyZjb2VyY2lvbnMtPmJvb2xlYW4sIEJPT0xPSUR9LAotCQl7JmNvZXJjaW9ucy0+ZGF0 ZSwgREFURU9JRH0sCi0JCXsmY29lcmNpb25zLT50aW1lLCBUSU1FT0lEfSwKLQkJeyZjb2Vy Y2lvbnMtPnRpbWV0eiwgVElNRVRaT0lEfSwKLQkJeyZjb2VyY2lvbnMtPnRpbWVzdGFtcCwg VElNRVNUQU1QT0lEfSwKLQkJeyZjb2VyY2lvbnMtPnRpbWVzdGFtcHR6LCBUSU1FU1RBTVBU Wk9JRH0sCi0JCXsmY29lcmNpb25zLT5jb21wb3NpdGUsIGNvbnRleHRJdGVtVHlwZUlkfSwK LQkJe05VTEwsIEludmFsaWRPaWR9Ci0JfTsKLQotCWZvciAocCA9IGNvZXJjaW9uVHlwaWRz OyBwLT5jb2VyY2lvbjsgcCsrKQotCQkqcC0+Y29lcmNpb24gPSBpbml0SnNvbkl0ZW1Db2Vy Y2lvbihwc3RhdGUsIHAtPnR5cGlkLCByZXR1cm5pbmcpOworCXJldHVybiBOVUxMOwogfQog CiAvKgpAQCAtNDM3MCwxNyArNDM0MSwxMyBAQCB0cmFuc2Zvcm1Kc29uRnVuY0V4cHIoUGFy c2VTdGF0ZSAqcHN0YXRlLCBKc29uRnVuY0V4cHIgKmZ1bmMpCiAJCQlqc2V4cHItPnJldHVy bmluZy0+Zm9ybWF0LT5lbmNvZGluZyA9IEpTX0VOQ19ERUZBVUxUOwogCiAJCQlqc2V4cHIt Pm9uX2VtcHR5LT5kZWZhdWx0X2V4cHIgPQotCQkJCWNvZXJjZURlZmF1bHRKc29uRXhwcihw c3RhdGUsIGpzZXhwciwKKwkJCQljb2VyY2VEZWZhdWx0SnNvbkV4cHIocHN0YXRlLCBqc2V4 cHIsIHRydWUsCiAJCQkJCQkJCQkgIGpzZXhwci0+b25fZW1wdHktPmRlZmF1bHRfZXhwcik7 CiAKIAkJCWpzZXhwci0+b25fZXJyb3ItPmRlZmF1bHRfZXhwciA9Ci0JCQkJY29lcmNlRGVm YXVsdEpzb25FeHByKHBzdGF0ZSwganNleHByLAorCQkJCWNvZXJjZURlZmF1bHRKc29uRXhw cihwc3RhdGUsIGpzZXhwciwgZmFsc2UsCiAJCQkJCQkJCQkgIGpzZXhwci0+b25fZXJyb3It PmRlZmF1bHRfZXhwcik7CiAKLQkJCWpzZXhwci0+Y29lcmNpb25zID0gbWFrZU5vZGUoSnNv bkl0ZW1Db2VyY2lvbnMpOwotCQkJaW5pdEpzb25JdGVtQ29lcmNpb25zKHBzdGF0ZSwganNl eHByLT5jb2VyY2lvbnMsIGpzZXhwci0+cmV0dXJuaW5nLAotCQkJCQkJCQkgIGV4cHJUeXBl KGNvbnRleHRJdGVtRXhwcikpOwotCiAJCQlicmVhazsKIAogCQljYXNlIEpTT05fUVVFUllf T1A6CkBAIC00Mzg5LDExICs0MzU2LDExIEBAIHRyYW5zZm9ybUpzb25GdW5jRXhwcihQYXJz ZVN0YXRlICpwc3RhdGUsIEpzb25GdW5jRXhwciAqZnVuYykKIAkJCXRyYW5zZm9ybUpzb25G dW5jRXhwck91dHB1dChwc3RhdGUsIGZ1bmMsIGpzZXhwcik7CiAKIAkJCWpzZXhwci0+b25f ZW1wdHktPmRlZmF1bHRfZXhwciA9Ci0JCQkJY29lcmNlRGVmYXVsdEpzb25FeHByKHBzdGF0 ZSwganNleHByLAorCQkJCWNvZXJjZURlZmF1bHRKc29uRXhwcihwc3RhdGUsIGpzZXhwciwg dHJ1ZSwKIAkJCQkJCQkJCSAganNleHByLT5vbl9lbXB0eS0+ZGVmYXVsdF9leHByKTsKIAog CQkJanNleHByLT5vbl9lcnJvci0+ZGVmYXVsdF9leHByID0KLQkJCQljb2VyY2VEZWZhdWx0 SnNvbkV4cHIocHN0YXRlLCBqc2V4cHIsCisJCQkJY29lcmNlRGVmYXVsdEpzb25FeHByKHBz dGF0ZSwganNleHByLCBmYWxzZSwKIAkJCQkJCQkJCSAganNleHByLT5vbl9lcnJvci0+ZGVm YXVsdF9leHByKTsKIAogCQkJanNleHByLT53cmFwcGVyID0gZnVuYy0+d3JhcHBlcjsKQEAg LTQ0MDksNiArNDM3Niw3IEBAIHRyYW5zZm9ybUpzb25GdW5jRXhwcihQYXJzZVN0YXRlICpw c3RhdGUsIEpzb25GdW5jRXhwciAqZnVuYykKIAkJCWpzZXhwci0+cmV0dXJuaW5nLT5mb3Jt YXQtPmZvcm1hdF90eXBlID0gSlNfRk9STUFUX0RFRkFVTFQ7CiAJCQlqc2V4cHItPnJldHVy bmluZy0+Zm9ybWF0LT5lbmNvZGluZyA9IEpTX0VOQ19ERUZBVUxUOwogCisJCQkvKiBDb2Vy Y2UgaW50ZXJtZWRpYXRlIGJvb2xlYW4gcmVzdWx0IHRvIHRoZSBvdXRwdXQgdHlwZSBpZiBu ZWVkZWQgKi8KIAkJCWlmICghT2lkSXNWYWxpZChqc2V4cHItPnJldHVybmluZy0+dHlwaWQp KQogCQkJewogCQkJCWpzZXhwci0+cmV0dXJuaW5nLT50eXBpZCA9IEJPT0xPSUQ7CkBAIC00 NDE2LDMyICs0Mzg0LDIxIEBAIHRyYW5zZm9ybUpzb25GdW5jRXhwcihQYXJzZVN0YXRlICpw c3RhdGUsIEpzb25GdW5jRXhwciAqZnVuYykKIAkJCX0KIAkJCWVsc2UgaWYgKGpzZXhwci0+ cmV0dXJuaW5nLT50eXBpZCAhPSBCT09MT0lEKQogCQkJewotCQkJCUNhc2VUZXN0RXhwciAq cGxhY2Vob2xkZXIgPSBtYWtlTm9kZShDYXNlVGVzdEV4cHIpOwotCQkJCWludAkJCWxvY2F0 aW9uID0gZXhwckxvY2F0aW9uKChOb2RlICopIGpzZXhwcik7Ci0KLQkJCQlwbGFjZWhvbGRl ci0+dHlwZUlkID0gQk9PTE9JRDsKLQkJCQlwbGFjZWhvbGRlci0+dHlwZU1vZCA9IC0xOwot CQkJCXBsYWNlaG9sZGVyLT5jb2xsYXRpb24gPSBJbnZhbGlkT2lkOwotCi0JCQkJanNleHBy LT5yZXN1bHRfY29lcmNpb24gPSBtYWtlTm9kZShKc29uQ29lcmNpb24pOwotCQkJCWpzZXhw ci0+cmVzdWx0X2NvZXJjaW9uLT5leHByID0KLQkJCQkJY29lcmNlX3RvX3RhcmdldF90eXBl KHBzdGF0ZSwgKE5vZGUgKikgcGxhY2Vob2xkZXIsIEJPT0xPSUQsCi0JCQkJCQkJCQkJICBq c2V4cHItPnJldHVybmluZy0+dHlwaWQsCi0JCQkJCQkJCQkJICBqc2V4cHItPnJldHVybmlu Zy0+dHlwbW9kLAotCQkJCQkJCQkJCSAgQ09FUkNJT05fRVhQTElDSVQsCi0JCQkJCQkJCQkJ ICBDT0VSQ0VfSU1QTElDSVRfQ0FTVCwKLQkJCQkJCQkJCQkgIGxvY2F0aW9uKTsKLQotCQkJ CWlmICghanNleHByLT5yZXN1bHRfY29lcmNpb24tPmV4cHIpCi0JCQkJCWVyZXBvcnQoRVJS T1IsCi0JCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9DQU5OT1RfQ09FUkNFKSwKLQkJCQkJCQkg ZXJybXNnKCJjYW5ub3QgY2FzdCB0eXBlICVzIHRvICVzIiwKLQkJCQkJCQkJCWZvcm1hdF90 eXBlX2JlKEJPT0xPSUQpLAotCQkJCQkJCQkJZm9ybWF0X3R5cGVfYmUoanNleHByLT5yZXR1 cm5pbmctPnR5cGlkKSksCi0JCQkJCQkJIHBhcnNlcl9jb2VyY2lvbl9lcnJwb3NpdGlvbihw c3RhdGUsIGxvY2F0aW9uLCAoTm9kZSAqKSBqc2V4cHIpKSk7CisJCQkJc3dpdGNoIChqc2V4 cHItPnJldHVybmluZy0+dHlwaWQpCisJCQkJeworCQkJCQljYXNlIElOVDRPSUQ6CisJCQkJ CWNhc2UgVEVYVE9JRDoKKwkJCQkJY2FzZSBWQVJDSEFST0lEOgorCQkJCQljYXNlIEJQQ0hB Uk9JRDoKKwkJCQkJCWJyZWFrOwogCi0JCQkJaWYgKGpzZXhwci0+cmVzdWx0X2NvZXJjaW9u LT5leHByID09IChOb2RlICopIHBsYWNlaG9sZGVyKQotCQkJCQlqc2V4cHItPnJlc3VsdF9j b2VyY2lvbi0+ZXhwciA9IE5VTEw7CisJCQkJCWRlZmF1bHQ6CisJCQkJCQllcmVwb3J0KEVS Uk9SLAorCQkJCQkJCQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCks CisJCQkJCQkJCSBlcnJtc2coInJldHVybmluZyB0eXBlICVzIGlzIG5vdCBzdXBwb3J0ZWQg aW4gSlNPTl9FWElTVFMoKSIsCisJCQkJCQkJCQkJZm9ybWF0X3R5cGVfYmUoanNleHByLT5y ZXR1cm5pbmctPnR5cGlkKSksCisJCQkJCQkJCSBwYXJzZXJfY29lcmNpb25fZXJycG9zaXRp b24ocHN0YXRlLCBmdW5jLT5sb2NhdGlvbiwgKE5vZGUgKikganNleHByKSkpOworCQkJCX0K IAkJCX0KIAkJCWJyZWFrOwogCkBAIC00NDU3LDcgKzQ0MTQsNiBAQCB0cmFuc2Zvcm1Kc29u RnVuY0V4cHIoUGFyc2VTdGF0ZSAqcHN0YXRlLCBKc29uRnVuY0V4cHIgKmZ1bmMpCiAJCQkJ CQkgZXJybXNnKCJKU09OX1RBQkxFKCkgaXMgbm90IHlldCBpbXBsZW1lbnRlZCBmb3IgdGhl IGpzb24gdHlwZSIpLAogCQkJCQkJIGVycmhpbnQoIlRyeSBjYXN0aW5nIHRoZSBhcmd1bWVu dCB0byBqc29uYiIpLAogCQkJCQkJIHBhcnNlcl9lcnJwb3NpdGlvbihwc3RhdGUsIGZ1bmMt PmxvY2F0aW9uKSkpOwotCiAJCQlicmVhazsKIAl9CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL3V0aWxzL2FkdC9ib29sLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvYm9vbC5jCmlu ZGV4IGNkNzMzNTI4N2Y5Li43ODU1N2M5OWRjNSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv dXRpbHMvYWR0L2Jvb2wuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvYm9vbC5jCkBA IC0xMjYsMTIgKzEyNiwxMCBAQCBwYXJzZV9ib29sX3dpdGhfbGVuKGNvbnN0IGNoYXIgKnZh bHVlLCBzaXplX3QgbGVuLCBib29sICpyZXN1bHQpCiAgKgogICogSW4gdGhlIHN3aXRjaCBz dGF0ZW1lbnQsIGNoZWNrIHRoZSBtb3N0LXVzZWQgcG9zc2liaWxpdGllcyBmaXJzdC4KICAq LwotRGF0dW0KLWJvb2xpbihQR19GVU5DVElPTl9BUkdTKQorYm9vbAorYm9vbGluX29wdF9l cnJvcihjb25zdCBjaGFyICppbl9zdHIsIHNpemVfdAlsZW4sIGJvb2wgKmVycm9yKQogewot CWNvbnN0IGNoYXIgKmluX3N0ciA9IFBHX0dFVEFSR19DU1RSSU5HKDApOwogCWNvbnN0IGNo YXIgKnN0cjsKLQlzaXplX3QJCWxlbjsKIAlib29sCQlyZXN1bHQ7CiAKIAkvKgpAQCAtMTQx LDIwICsxMzksMjkgQEAgYm9vbGluKFBHX0ZVTkNUSU9OX0FSR1MpCiAJd2hpbGUgKGlzc3Bh Y2UoKHVuc2lnbmVkIGNoYXIpICpzdHIpKQogCQlzdHIrKzsKIAotCWxlbiA9IHN0cmxlbihz dHIpOworCWxlbiAtPSBzdHIgLSBpbl9zdHI7CiAJd2hpbGUgKGxlbiA+IDAgJiYgaXNzcGFj ZSgodW5zaWduZWQgY2hhcikgc3RyW2xlbiAtIDFdKSkKIAkJbGVuLS07CiAKIAlpZiAocGFy c2VfYm9vbF93aXRoX2xlbihzdHIsIGxlbiwgJnJlc3VsdCkpCi0JCVBHX1JFVFVSTl9CT09M KHJlc3VsdCk7CisJCXJldHVybiByZXN1bHQ7CisKKwlpZiAoIWVycm9yKQorCQllcmVwb3J0 KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9URVhUX1JFUFJFU0VOVEFU SU9OKSwKKwkJCQkgZXJybXNnKCJpbnZhbGlkIGlucHV0IHN5bnRheCBmb3IgdHlwZSAlczog XCIlc1wiIiwKKwkJCQkJCSJib29sZWFuIiwgaW5fc3RyKSkpOworCisJKmVycm9yID0gdHJ1 ZTsKKwlyZXR1cm4gZmFsc2U7Cit9CiAKLQllcmVwb3J0KEVSUk9SLAotCQkJKGVycmNvZGUo RVJSQ09ERV9JTlZBTElEX1RFWFRfUkVQUkVTRU5UQVRJT04pLAotCQkJIGVycm1zZygiaW52 YWxpZCBpbnB1dCBzeW50YXggZm9yIHR5cGUgJXM6IFwiJXNcIiIsCi0JCQkJCSJib29sZWFu IiwgaW5fc3RyKSkpOworRGF0dW0KK2Jvb2xpbihQR19GVU5DVElPTl9BUkdTKQoreworCWNo YXIJICAgKnN0ciA9IFBHX0dFVEFSR19DU1RSSU5HKDApOwogCi0JLyogbm90IHJlYWNoZWQg Ki8KLQlQR19SRVRVUk5fQk9PTChmYWxzZSk7CisJUEdfUkVUVVJOX0JPT0woYm9vbGluX29w dF9lcnJvcihzdHIsIHN0cmxlbihzdHIpLCBOVUxMKSk7CiB9CiAKIC8qCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC91dGlscy9hZHQvZGF0ZS5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0 L2RhdGUuYwppbmRleCAwODFkZmEyNDUwZi4uNDNhOTZmYzUxNDIgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL3V0aWxzL2FkdC9kYXRlLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0 L2RhdGUuYwpAQCAtMTA4LDEwICsxMDgsOSBAQCBhbnl0aW1lX3R5cG1vZG91dChib29sIGlz dHosIGludDMyIHR5cG1vZCkKIC8qIGRhdGVfaW4oKQogICogR2l2ZW4gZGF0ZSB0ZXh0IHN0 cmluZywgY29udmVydCB0byBpbnRlcm5hbCBkYXRlIGZvcm1hdC4KICAqLwotRGF0dW0KLWRh dGVfaW4oUEdfRlVOQ1RJT05fQVJHUykKK0RhdGVBRFQKK2RhdGVfaW5fb3B0X2Vycm9yKGNo YXIgKnN0ciwgYm9vbCAqZXJyb3IpCiB7Ci0JY2hhcgkgICAqc3RyID0gUEdfR0VUQVJHX0NT VFJJTkcoMCk7CiAJRGF0ZUFEVAkJZGF0ZTsKIAlmc2VjX3QJCWZzZWM7CiAJc3RydWN0IHBn X3RtIHR0LApAQCAtMTI3LDkgKzEyNiwxOCBAQCBkYXRlX2luKFBHX0ZVTkNUSU9OX0FSR1Mp CiAJZHRlcnIgPSBQYXJzZURhdGVUaW1lKHN0ciwgd29ya2J1Ziwgc2l6ZW9mKHdvcmtidWYp LAogCQkJCQkJICBmaWVsZCwgZnR5cGUsIE1BWERBVEVGSUVMRFMsICZuZik7CiAJaWYgKGR0 ZXJyID09IDApCi0JCWR0ZXJyID0gRGVjb2RlRGF0ZVRpbWUoZmllbGQsIGZ0eXBlLCBuZiwg JmR0eXBlLCB0bSwgJmZzZWMsICZ0enApOworCQlkdGVyciA9IERlY29kZURhdGVUaW1lKGZp ZWxkLCBmdHlwZSwgbmYsICZkdHlwZSwgdG0sICZmc2VjLCAmdHpwLAorCQkJCQkJCSAgICFl cnJvcik7CiAJaWYgKGR0ZXJyICE9IDApCisJeworCQlpZiAoZXJyb3IpCisJCXsKKwkJCSpl cnJvciA9IHRydWU7CisJCQlyZXR1cm4gMDsKKwkJfQorCiAJCURhdGVUaW1lUGFyc2VFcnJv cihkdGVyciwgc3RyLCAiZGF0ZSIpOworCX0KIAogCXN3aXRjaCAoZHR5cGUpCiAJewpAQCAt MTQ5LDI1ICsxNTcsNTYgQEAgZGF0ZV9pbihQR19GVU5DVElPTl9BUkdTKQogCQkJUEdfUkVU VVJOX0RBVEVBRFQoZGF0ZSk7CiAKIAkJZGVmYXVsdDoKKwkJCWlmICgqZXJyb3IpCisJCQl7 CisJCQkJKmVycm9yID0gdHJ1ZTsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKwogCQkJRGF0ZVRp bWVQYXJzZUVycm9yKERURVJSX0JBRF9GT1JNQVQsIHN0ciwgImRhdGUiKTsKIAkJCWJyZWFr OwogCX0KIAogCS8qIFByZXZlbnQgb3ZlcmZsb3cgaW4gSnVsaWFuLWRheSByb3V0aW5lcyAq LwogCWlmICghSVNfVkFMSURfSlVMSUFOKHRtLT50bV95ZWFyLCB0bS0+dG1fbW9uLCB0bS0+ dG1fbWRheSkpCisJeworCQlpZiAoZXJyb3IpCisJCXsKKwkJCSplcnJvciA9IHRydWU7CisJ CQlyZXR1cm4gMDsKKwkJfQorCiAJCWVyZXBvcnQoRVJST1IsCiAJCQkJKGVycmNvZGUoRVJS Q09ERV9EQVRFVElNRV9WQUxVRV9PVVRfT0ZfUkFOR0UpLAogCQkJCSBlcnJtc2coImRhdGUg b3V0IG9mIHJhbmdlOiBcIiVzXCIiLCBzdHIpKSk7CisJfQogCiAJZGF0ZSA9IGRhdGUyaih0 bS0+dG1feWVhciwgdG0tPnRtX21vbiwgdG0tPnRtX21kYXkpIC0gUE9TVEdSRVNfRVBPQ0hf SkRBVEU7CiAKIAkvKiBOb3cgY2hlY2sgZm9yIGp1c3Qtb3V0LW9mLXJhbmdlIGRhdGVzICov CiAJaWYgKCFJU19WQUxJRF9EQVRFKGRhdGUpKQorCXsKKwkJaWYgKGVycm9yKQorCQl7CisJ CQkqZXJyb3IgPSB0cnVlOworCQkJcmV0dXJuIDA7CisJCX0KKwogCQllcmVwb3J0KEVSUk9S LAogCQkJCShlcnJjb2RlKEVSUkNPREVfREFURVRJTUVfVkFMVUVfT1VUX09GX1JBTkdFKSwK IAkJCQkgZXJybXNnKCJkYXRlIG91dCBvZiByYW5nZTogXCIlc1wiIiwgc3RyKSkpOworCX0K IAotCVBHX1JFVFVSTl9EQVRFQURUKGRhdGUpOworCXJldHVybiBkYXRlOworfQorCisvKiBk YXRlX2luKCkKKyAqIEdpdmVuIGRhdGUgdGV4dCBzdHJpbmcsIGNvbnZlcnQgdG8gaW50ZXJu YWwgZGF0ZSBmb3JtYXQuCisgKi8KK0RhdHVtCitkYXRlX2luKFBHX0ZVTkNUSU9OX0FSR1Mp Cit7CisJUEdfUkVUVVJOX0RBVEVBRFQoZGF0ZV9pbl9vcHRfZXJyb3IoUEdfR0VUQVJHX0NT VFJJTkcoMCksIE5VTEwpKTsKIH0KIAogLyogZGF0ZV9vdXQoKQpAQCAtMTI4NiwxMCArMTMy NSw5IEBAIGRhdGVfdGltZXN0YW1wKFBHX0ZVTkNUSU9OX0FSR1MpCiAvKiB0aW1lc3RhbXBf ZGF0ZSgpCiAgKiBDb252ZXJ0IHRpbWVzdGFtcCB0byBkYXRlIGRhdGEgdHlwZS4KICAqLwot RGF0dW0KLXRpbWVzdGFtcF9kYXRlKFBHX0ZVTkNUSU9OX0FSR1MpCitEYXRlQURUCit0aW1l c3RhbXBfZGF0ZV9vcHRfZXJyb3IoVGltZXN0YW1wIHRpbWVzdGFtcCwgYm9vbCAqZXJyb3Ip CiB7Ci0JVGltZXN0YW1wCXRpbWVzdGFtcCA9IFBHX0dFVEFSR19USU1FU1RBTVAoMCk7CiAJ RGF0ZUFEVAkJcmVzdWx0OwogCXN0cnVjdCBwZ190bSB0dCwKIAkJCSAgICp0bSA9ICZ0dDsK QEAgLTEzMDIsMTYgKzEzNDAsMzIgQEAgdGltZXN0YW1wX2RhdGUoUEdfRlVOQ1RJT05fQVJH UykKIAllbHNlCiAJewogCQlpZiAodGltZXN0YW1wMnRtKHRpbWVzdGFtcCwgTlVMTCwgdG0s ICZmc2VjLCBOVUxMLCBOVUxMKSAhPSAwKQorCQl7CisJCQlpZiAoZXJyb3IpCisJCQl7CisJ CQkJKmVycm9yID0gdHJ1ZTsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKwogCQkJZXJlcG9ydChF UlJPUiwKIAkJCQkJKGVycmNvZGUoRVJSQ09ERV9EQVRFVElNRV9WQUxVRV9PVVRfT0ZfUkFO R0UpLAogCQkJCQkgZXJybXNnKCJ0aW1lc3RhbXAgb3V0IG9mIHJhbmdlIikpKTsKKwkJfQog CiAJCXJlc3VsdCA9IGRhdGUyaih0bS0+dG1feWVhciwgdG0tPnRtX21vbiwgdG0tPnRtX21k YXkpIC0gUE9TVEdSRVNfRVBPQ0hfSkRBVEU7CiAJfQogCi0JUEdfUkVUVVJOX0RBVEVBRFQo cmVzdWx0KTsKKwlyZXR1cm4gcmVzdWx0OwogfQogCisvKiB0aW1lc3RhbXBfZGF0ZSgpCisg KiBDb252ZXJ0IHRpbWVzdGFtcCB0byBkYXRlIGRhdGEgdHlwZS4KKyAqLworRGF0dW0KK3Rp bWVzdGFtcF9kYXRlKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJUEdfUkVUVVJOX0RBVEVBRFQo dGltZXN0YW1wX2RhdGVfb3B0X2Vycm9yKFBHX0dFVEFSR19USU1FU1RBTVAoMCksIE5VTEwp KTsKK30KIAogLyogZGF0ZV90aW1lc3RhbXB0eigpCiAgKiBDb252ZXJ0IGRhdGUgdG8gdGlt ZXN0YW1wIHdpdGggdGltZSB6b25lIGRhdGEgdHlwZS4KQEAgLTEzMjcsMTQgKzEzODEsOSBA QCBkYXRlX3RpbWVzdGFtcHR6KFBHX0ZVTkNUSU9OX0FSR1MpCiAJUEdfUkVUVVJOX1RJTUVT VEFNUChyZXN1bHQpOwogfQogCi0KLS8qIHRpbWVzdGFtcHR6X2RhdGUoKQotICogQ29udmVy dCB0aW1lc3RhbXAgd2l0aCB0aW1lIHpvbmUgdG8gZGF0ZSBkYXRhIHR5cGUuCi0gKi8KLURh dHVtCi10aW1lc3RhbXB0el9kYXRlKFBHX0ZVTkNUSU9OX0FSR1MpCitEYXRlQURUCit0aW1l c3RhbXB0el9kYXRlX29wdF9lcnJvcihUaW1lc3RhbXBUeiB0aW1lc3RhbXAsIGJvb2wgKmVy cm9yKQogewotCVRpbWVzdGFtcFR6IHRpbWVzdGFtcCA9IFBHX0dFVEFSR19USU1FU1RBTVAo MCk7CiAJRGF0ZUFEVAkJcmVzdWx0OwogCXN0cnVjdCBwZ190bSB0dCwKIAkJCSAgICp0bSA9 ICZ0dDsKQEAgLTEzNDgsMTQgKzEzOTcsMzEgQEAgdGltZXN0YW1wdHpfZGF0ZShQR19GVU5D VElPTl9BUkdTKQogCWVsc2UKIAl7CiAJCWlmICh0aW1lc3RhbXAydG0odGltZXN0YW1wLCAm dHosIHRtLCAmZnNlYywgTlVMTCwgTlVMTCkgIT0gMCkKKwkJeworCQkJaWYgKGVycm9yKQor CQkJeworCQkJCSplcnJvciA9IHRydWU7CisJCQkJcmV0dXJuIDA7CisJCQl9CisKIAkJCWVy ZXBvcnQoRVJST1IsCiAJCQkJCShlcnJjb2RlKEVSUkNPREVfREFURVRJTUVfVkFMVUVfT1VU X09GX1JBTkdFKSwKIAkJCQkJIGVycm1zZygidGltZXN0YW1wIG91dCBvZiByYW5nZSIpKSk7 CisJCX0KIAogCQlyZXN1bHQgPSBkYXRlMmoodG0tPnRtX3llYXIsIHRtLT50bV9tb24sIHRt LT50bV9tZGF5KSAtIFBPU1RHUkVTX0VQT0NIX0pEQVRFOwogCX0KIAotCVBHX1JFVFVSTl9E QVRFQURUKHJlc3VsdCk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworLyogdGltZXN0YW1wdHpf ZGF0ZSgpCisgKiBDb252ZXJ0IHRpbWVzdGFtcCB3aXRoIHRpbWUgem9uZSB0byBkYXRlIGRh dGEgdHlwZS4KKyAqLworRGF0dW0KK3RpbWVzdGFtcHR6X2RhdGUoUEdfRlVOQ1RJT05fQVJH UykKK3sKKwlQR19SRVRVUk5fREFURUFEVCh0aW1lc3RhbXB0el9kYXRlX29wdF9lcnJvcihQ R19HRVRBUkdfVElNRVNUQU1QKDApLCBOVUxMKSk7CiB9CiAKIApAQCAtMTM2MywxNSArMTQy OSw5IEBAIHRpbWVzdGFtcHR6X2RhdGUoUEdfRlVOQ1RJT05fQVJHUykKICAqCSBUaW1lIEFE VAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi1EYXR1bQotdGltZV9pbihQR19GVU5D VElPTl9BUkdTKQorVGltZUFEVAordGltZV9pbl9vcHRfZXJyb3IoY2hhciAqc3RyLCBpbnQz MiB0eXBtb2QsIGJvb2wgKmVycm9yKQogewotCWNoYXIJICAgKnN0ciA9IFBHX0dFVEFSR19D U1RSSU5HKDApOwotCi0jaWZkZWYgTk9UX1VTRUQKLQlPaWQJCQl0eXBlbGVtID0gUEdfR0VU QVJHX09JRCgxKTsKLSNlbmRpZgotCWludDMyCQl0eXBtb2QgPSBQR19HRVRBUkdfSU5UMzIo Mik7CiAJVGltZUFEVAkJcmVzdWx0OwogCWZzZWNfdAkJZnNlYzsKIAlzdHJ1Y3QgcGdfdG0g dHQsCkBAIC0xMzg3LDE0ICsxNDQ3LDM1IEBAIHRpbWVfaW4oUEdfRlVOQ1RJT05fQVJHUykK IAlkdGVyciA9IFBhcnNlRGF0ZVRpbWUoc3RyLCB3b3JrYnVmLCBzaXplb2Yod29ya2J1Ziks CiAJCQkJCQkgIGZpZWxkLCBmdHlwZSwgTUFYREFURUZJRUxEUywgJm5mKTsKIAlpZiAoZHRl cnIgPT0gMCkKLQkJZHRlcnIgPSBEZWNvZGVUaW1lT25seShmaWVsZCwgZnR5cGUsIG5mLCAm ZHR5cGUsIHRtLCAmZnNlYywgJnR6KTsKKwkJZHRlcnIgPSBEZWNvZGVUaW1lT25seShmaWVs ZCwgZnR5cGUsIG5mLCAmZHR5cGUsIHRtLCAmZnNlYywgJnR6LAorCQkJCQkJCSAgICFlcnJv cik7CiAJaWYgKGR0ZXJyICE9IDApCisJeworCQlpZiAoZXJyb3IpCisJCXsKKwkJCSplcnJv ciA9IHRydWU7CisJCQlyZXR1cm4gMDsKKwkJfQorCiAJCURhdGVUaW1lUGFyc2VFcnJvcihk dGVyciwgc3RyLCAidGltZSIpOworCX0KIAogCXRtMnRpbWUodG0sIGZzZWMsICZyZXN1bHQp OwogCUFkanVzdFRpbWVGb3JUeXBtb2QoJnJlc3VsdCwgdHlwbW9kKTsKIAotCVBHX1JFVFVS Tl9USU1FQURUKHJlc3VsdCk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworRGF0dW0KK3RpbWVf aW4oUEdfRlVOQ1RJT05fQVJHUykKK3sKKwljaGFyCSAgICpzdHIgPSBQR19HRVRBUkdfQ1NU UklORygwKTsKKyNpZmRlZiBOT1RfVVNFRAorCU9pZAkJCXR5cGVsZW0gPSBQR19HRVRBUkdf T0lEKDEpOworI2VuZGlmCisJaW50MzIJCXR5cG1vZCA9IFBHX0dFVEFSR19JTlQzMigyKTsK KworCVBHX1JFVFVSTl9USU1FQURUKHRpbWVfaW5fb3B0X2Vycm9yKHN0ciwgdHlwbW9kLCBO VUxMKSk7CiB9CiAKIC8qIHRtMnRpbWUoKQpAQCAtMTg4OSwyMiArMTk3MCwzMiBAQCBvdmVy bGFwc190aW1lKFBHX0ZVTkNUSU9OX0FSR1MpCiAvKiB0aW1lc3RhbXBfdGltZSgpCiAgKiBD b252ZXJ0IHRpbWVzdGFtcCB0byB0aW1lIGRhdGEgdHlwZS4KICAqLwotRGF0dW0KLXRpbWVz dGFtcF90aW1lKFBHX0ZVTkNUSU9OX0FSR1MpCitUaW1lQURUCit0aW1lc3RhbXBfdGltZV9v cHRfZXJyb3IoVGltZXN0YW1wIHRpbWVzdGFtcCwgYm9vbCAqaXNudWxsLCBib29sICplcnJv cikKIHsKLQlUaW1lc3RhbXAJdGltZXN0YW1wID0gUEdfR0VUQVJHX1RJTUVTVEFNUCgwKTsK IAlUaW1lQURUCQlyZXN1bHQ7CiAJc3RydWN0IHBnX3RtIHR0LAogCQkJICAgKnRtID0gJnR0 OwogCWZzZWNfdAkJZnNlYzsKIAogCWlmIChUSU1FU1RBTVBfTk9UX0ZJTklURSh0aW1lc3Rh bXApKQotCQlQR19SRVRVUk5fTlVMTCgpOworCXsKKwkJKmlzbnVsbCA9IHRydWU7CisJCXJl dHVybiAwOworCX0KIAogCWlmICh0aW1lc3RhbXAydG0odGltZXN0YW1wLCBOVUxMLCB0bSwg JmZzZWMsIE5VTEwsIE5VTEwpICE9IDApCisJeworCQlpZiAoZXJyb3IpCisJCXsKKwkJCSpl cnJvciA9ICppc251bGwgPSB0cnVlOworCQkJcmV0dXJuIChEYXR1bSkgMDsKKwkJfQorCiAJ CWVyZXBvcnQoRVJST1IsCiAJCQkJKGVycmNvZGUoRVJSQ09ERV9EQVRFVElNRV9WQUxVRV9P VVRfT0ZfUkFOR0UpLAogCQkJCSBlcnJtc2coInRpbWVzdGFtcCBvdXQgb2YgcmFuZ2UiKSkp OworCX0KIAogCS8qCiAJICogQ291bGQgYWxzbyBkbyB0aGlzIHdpdGggdGltZSA9ICh0aW1l c3RhbXAgLyBVU0VDU19QRVJfREFZICoKQEAgLTE5MTIsMTcgKzIwMDMsMzMgQEAgdGltZXN0 YW1wX3RpbWUoUEdfRlVOQ1RJT05fQVJHUykKIAkgKi8KIAlyZXN1bHQgPSAoKCgodG0tPnRt X2hvdXIgKiBNSU5TX1BFUl9IT1VSICsgdG0tPnRtX21pbikgKiBTRUNTX1BFUl9NSU5VVEUp ICsgdG0tPnRtX3NlYykgKgogCQkJICBVU0VDU19QRVJfU0VDKSArIGZzZWM7CisJKmlzbnVs bCA9IGZhbHNlOwogCi0JUEdfUkVUVVJOX1RJTUVBRFQocmVzdWx0KTsKKwlyZXR1cm4gcmVz dWx0OwogfQogCi0vKiB0aW1lc3RhbXB0el90aW1lKCkKLSAqIENvbnZlcnQgdGltZXN0YW1w dHogdG8gdGltZSBkYXRhIHR5cGUuCisvKiB0aW1lc3RhbXBfdGltZSgpCisgKiBDb252ZXJ0 IHRpbWVzdGFtcCB0byB0aW1lIGRhdGEgdHlwZS4KICAqLwogRGF0dW0KLXRpbWVzdGFtcHR6 X3RpbWUoUEdfRlVOQ1RJT05fQVJHUykKK3RpbWVzdGFtcF90aW1lKFBHX0ZVTkNUSU9OX0FS R1MpCit7CisJYm9vbAkJaXNudWxsOworCVRpbWVBRFQJCXRpbWUgPQorCQl0aW1lc3RhbXBf dGltZV9vcHRfZXJyb3IoUEdfR0VUQVJHX1RJTUVTVEFNUCgwKSwgJmlzbnVsbCwgTlVMTCk7 CisKKwlpZiAoaXNudWxsKQorCQlQR19SRVRVUk5fTlVMTCgpOworCWVsc2UKKwkJUEdfUkVU VVJOX1RJTUVBRFQodGltZSk7Cit9CisKKy8qIHRpbWVzdGFtcHR6X3RpbWVfb3B0X2Vycm9y KCkKKyAqIENvbnZlcnQgdGltZXN0YW1wdHogdG8gdGltZSBkYXRhIHR5cGUuCisgKi8KK1Rp bWVBRFQKK3RpbWVzdGFtcHR6X3RpbWVfb3B0X2Vycm9yKFRpbWVzdGFtcFR6IHRpbWVzdGFt cCwgYm9vbCAqaXNudWxsLCBib29sICplcnJvcikKIHsKLQlUaW1lc3RhbXBUeiB0aW1lc3Rh bXAgPSBQR19HRVRBUkdfVElNRVNUQU1QKDApOwogCVRpbWVBRFQJCXJlc3VsdDsKIAlzdHJ1 Y3QgcGdfdG0gdHQsCiAJCQkgICAqdG0gPSAmdHQ7CkBAIC0xOTMwLDEyICsyMDM3LDIzIEBA IHRpbWVzdGFtcHR6X3RpbWUoUEdfRlVOQ1RJT05fQVJHUykKIAlmc2VjX3QJCWZzZWM7CiAK IAlpZiAoVElNRVNUQU1QX05PVF9GSU5JVEUodGltZXN0YW1wKSkKLQkJUEdfUkVUVVJOX05V TEwoKTsKKwl7CisJCSppc251bGwgPSB0cnVlOworCQlyZXR1cm4gMDsKKwl9CiAKIAlpZiAo dGltZXN0YW1wMnRtKHRpbWVzdGFtcCwgJnR6LCB0bSwgJmZzZWMsIE5VTEwsIE5VTEwpICE9 IDApCisJeworCQlpZiAoZXJyb3IpCisJCXsKKwkJCSplcnJvciA9ICppc251bGwgPSB0cnVl OworCQkJcmV0dXJuIDA7CisJCX0KKwogCQllcmVwb3J0KEVSUk9SLAogCQkJCShlcnJjb2Rl KEVSUkNPREVfREFURVRJTUVfVkFMVUVfT1VUX09GX1JBTkdFKSwKIAkJCQkgZXJybXNnKCJ0 aW1lc3RhbXAgb3V0IG9mIHJhbmdlIikpKTsKKwl9CiAKIAkvKgogCSAqIENvdWxkIGFsc28g ZG8gdGhpcyB3aXRoIHRpbWUgPSAodGltZXN0YW1wIC8gVVNFQ1NfUEVSX0RBWSAqCkBAIC0x OTQzLDggKzIwNjEsMjUgQEAgdGltZXN0YW1wdHpfdGltZShQR19GVU5DVElPTl9BUkdTKQog CSAqLwogCXJlc3VsdCA9ICgoKCh0bS0+dG1faG91ciAqIE1JTlNfUEVSX0hPVVIgKyB0bS0+ dG1fbWluKSAqIFNFQ1NfUEVSX01JTlVURSkgKyB0bS0+dG1fc2VjKSAqCiAJCQkgIFVTRUNT X1BFUl9TRUMpICsgZnNlYzsKKwkqaXNudWxsID0gZmFsc2U7CiAKLQlQR19SRVRVUk5fVElN RUFEVChyZXN1bHQpOworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qIHRpbWVzdGFtcHR6X3Rp bWUoKQorICogQ29udmVydCB0aW1lc3RhbXB0eiB0byB0aW1lIGRhdGEgdHlwZS4KKyAqLwor RGF0dW0KK3RpbWVzdGFtcHR6X3RpbWUoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlib29sCQlp c251bGw7CisJVGltZUFEVAkJcmVzdWx0ID0KKwkJdGltZXN0YW1wdHpfdGltZV9vcHRfZXJy b3IoUEdfR0VUQVJHX1RJTUVTVEFNUCgwKSwgJmlzbnVsbCwgTlVMTCk7CisKKwlpZiAoaXNu dWxsKQorCQlQR19SRVRVUk5fTlVMTCgpOworCWVsc2UKKwkJUEdfUkVUVVJOX1RJTUVBRFQo cmVzdWx0KTsKIH0KIAogLyogZGF0ZXRpbWVfdGltZXN0YW1wKCkKQEAgLTIyNDksMTUgKzIz ODQsOSBAQCB0bTJ0aW1ldHooc3RydWN0IHBnX3RtICp0bSwgZnNlY190IGZzZWMsIGludCB0 eiwgVGltZVR6QURUICpyZXN1bHQpCiAJcmV0dXJuIDA7CiB9CiAKLURhdHVtCi10aW1ldHpf aW4oUEdfRlVOQ1RJT05fQVJHUykKK1RpbWVUekFEVCAqCit0aW1ldHpfaW5fb3B0X2Vycm9y KGNoYXIgKnN0ciwgaW50MzIgdHlwbW9kLCBib29sICplcnJvcikKIHsKLQljaGFyCSAgICpz dHIgPSBQR19HRVRBUkdfQ1NUUklORygwKTsKLQotI2lmZGVmIE5PVF9VU0VECi0JT2lkCQkJ dHlwZWxlbSA9IFBHX0dFVEFSR19PSUQoMSk7Ci0jZW5kaWYKLQlpbnQzMgkJdHlwbW9kID0g UEdfR0VUQVJHX0lOVDMyKDIpOwogCVRpbWVUekFEVCAgKnJlc3VsdDsKIAlmc2VjX3QJCWZz ZWM7CiAJc3RydWN0IHBnX3RtIHR0LApAQCAtMjI3MywxNyArMjQwMiwzOCBAQCB0aW1ldHpf aW4oUEdfRlVOQ1RJT05fQVJHUykKIAlkdGVyciA9IFBhcnNlRGF0ZVRpbWUoc3RyLCB3b3Jr YnVmLCBzaXplb2Yod29ya2J1ZiksCiAJCQkJCQkgIGZpZWxkLCBmdHlwZSwgTUFYREFURUZJ RUxEUywgJm5mKTsKIAlpZiAoZHRlcnIgPT0gMCkKLQkJZHRlcnIgPSBEZWNvZGVUaW1lT25s eShmaWVsZCwgZnR5cGUsIG5mLCAmZHR5cGUsIHRtLCAmZnNlYywgJnR6KTsKKwkJZHRlcnIg PSBEZWNvZGVUaW1lT25seShmaWVsZCwgZnR5cGUsIG5mLCAmZHR5cGUsIHRtLCAmZnNlYywg JnR6LAorCQkJCQkJCSAgICFlcnJvcik7CiAJaWYgKGR0ZXJyICE9IDApCisJeworCQlpZiAo ZXJyb3IpCisJCXsKKwkJCSplcnJvciA9IHRydWU7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQor CiAJCURhdGVUaW1lUGFyc2VFcnJvcihkdGVyciwgc3RyLCAidGltZSB3aXRoIHRpbWUgem9u ZSIpOworCX0KIAogCXJlc3VsdCA9IChUaW1lVHpBRFQgKikgcGFsbG9jKHNpemVvZihUaW1l VHpBRFQpKTsKIAl0bTJ0aW1ldHoodG0sIGZzZWMsIHR6LCByZXN1bHQpOwogCUFkanVzdFRp bWVGb3JUeXBtb2QoJihyZXN1bHQtPnRpbWUpLCB0eXBtb2QpOwogCi0JUEdfUkVUVVJOX1RJ TUVUWkFEVF9QKHJlc3VsdCk7CisJcmV0dXJuIHJlc3VsdDsKIH0KIAorRGF0dW0KK3RpbWV0 el9pbihQR19GVU5DVElPTl9BUkdTKQoreworCWNoYXIJICAgKnN0ciA9IFBHX0dFVEFSR19D U1RSSU5HKDApOworCisjaWZkZWYgTk9UX1VTRUQKKwlPaWQJCQl0eXBlbGVtID0gUEdfR0VU QVJHX09JRCgxKTsKKyNlbmRpZgorCWludDMyCQl0eXBtb2QgPSBQR19HRVRBUkdfSU5UMzIo Mik7CisKKwlQR19SRVRVUk5fVElNRVRaQURUX1AodGltZXR6X2luX29wdF9lcnJvcihzdHIs IHR5cG1vZCwgTlVMTCkpOworfQogRGF0dW0KIHRpbWV0el9vdXQoUEdfRlVOQ1RJT05fQVJH UykKIHsKQEAgLTI4MTIsMTAgKzI5NjIsOSBAQCB0aW1lX3RpbWV0eihQR19GVU5DVElPTl9B UkdTKQogLyogdGltZXN0YW1wdHpfdGltZXR6KCkKICAqIENvbnZlcnQgdGltZXN0YW1wIHRv IHRpbWV0eiBkYXRhIHR5cGUuCiAgKi8KLURhdHVtCi10aW1lc3RhbXB0el90aW1ldHooUEdf RlVOQ1RJT05fQVJHUykKK1RpbWVUekFEVCAqCit0aW1lc3RhbXB0el90aW1ldHpfb3B0X2Vy cm9yKFRpbWVzdGFtcFR6IHRpbWVzdGFtcCwgYm9vbCAqZXJyb3IpCiB7Ci0JVGltZXN0YW1w VHogdGltZXN0YW1wID0gUEdfR0VUQVJHX1RJTUVTVEFNUCgwKTsKIAlUaW1lVHpBRFQgICpy ZXN1bHQ7CiAJc3RydWN0IHBnX3RtIHR0LAogCQkJICAgKnRtID0gJnR0OwpAQCAtMjgyMywy MCArMjk3Miw0MiBAQCB0aW1lc3RhbXB0el90aW1ldHooUEdfRlVOQ1RJT05fQVJHUykKIAlm c2VjX3QJCWZzZWM7CiAKIAlpZiAoVElNRVNUQU1QX05PVF9GSU5JVEUodGltZXN0YW1wKSkK LQkJUEdfUkVUVVJOX05VTEwoKTsKKwkJcmV0dXJuIE5VTEw7CiAKIAlpZiAodGltZXN0YW1w MnRtKHRpbWVzdGFtcCwgJnR6LCB0bSwgJmZzZWMsIE5VTEwsIE5VTEwpICE9IDApCisJewor CQlpZiAoZXJyb3IpCisJCXsKKwkJCSplcnJvciA9IHRydWU7CisJCQlyZXR1cm4gTlVMTDsK KwkJfQorCiAJCWVyZXBvcnQoRVJST1IsCiAJCQkJKGVycmNvZGUoRVJSQ09ERV9EQVRFVElN RV9WQUxVRV9PVVRfT0ZfUkFOR0UpLAogCQkJCSBlcnJtc2coInRpbWVzdGFtcCBvdXQgb2Yg cmFuZ2UiKSkpOworCX0KIAogCXJlc3VsdCA9IChUaW1lVHpBRFQgKikgcGFsbG9jKHNpemVv ZihUaW1lVHpBRFQpKTsKIAogCXRtMnRpbWV0eih0bSwgZnNlYywgdHosIHJlc3VsdCk7CiAK LQlQR19SRVRVUk5fVElNRVRaQURUX1AocmVzdWx0KTsKKwlyZXR1cm4gcmVzdWx0OwogfQog CisvKiB0aW1lc3RhbXB0el90aW1ldHooKQorICogQ29udmVydCB0aW1lc3RhbXAgdG8gdGlt ZXR6IGRhdGEgdHlwZS4KKyAqLworRGF0dW0KK3RpbWVzdGFtcHR6X3RpbWV0eihQR19GVU5D VElPTl9BUkdTKQoreworCVRpbWVUekFEVCAgKnJlc3VsdCA9CisJCXRpbWVzdGFtcHR6X3Rp bWV0el9vcHRfZXJyb3IoUEdfR0VUQVJHX1RJTUVTVEFNUCgwKSwgTlVMTCk7CisKKwlpZiAo cmVzdWx0KQorCQlQR19SRVRVUk5fVElNRVRaQURUX1AocmVzdWx0KTsKKwllbHNlCisJCVBH X1JFVFVSTl9OVUxMKCk7Cit9CiAKIC8qIGRhdGV0aW1ldHpfdGltZXN0YW1wdHooKQogICog Q29udmVydCBkYXRlIGFuZCB0aW1ldHogdG8gdGltZXN0YW1wIHdpdGggdGltZSB6b25lIGRh dGEgdHlwZS4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9kYXRldGltZS5j IGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2RhdGV0aW1lLmMKaW5kZXggNDNmZmY1MGQ0OTAu LjMyNzVlNWZkOTQ4IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvZGF0ZXRp bWUuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvZGF0ZXRpbWUuYwpAQCAtOTcxLDcg Kzk3MSw4IEBAIFBhcnNlRGF0ZVRpbWUoY29uc3QgY2hhciAqdGltZXN0ciwgY2hhciAqd29y a2J1Ziwgc2l6ZV90IGJ1ZmxlbiwKICAqLwogaW50CiBEZWNvZGVEYXRlVGltZShjaGFyICoq ZmllbGQsIGludCAqZnR5cGUsIGludCBuZiwKLQkJCSAgIGludCAqZHR5cGUsIHN0cnVjdCBw Z190bSAqdG0sIGZzZWNfdCAqZnNlYywgaW50ICp0enApCisJCQkgICBpbnQgKmR0eXBlLCBz dHJ1Y3QgcGdfdG0gKnRtLCBmc2VjX3QgKmZzZWMsIGludCAqdHpwLAorCQkJICAgYm9vbCB0 aHJvd19lcnJvcnMpCiB7CiAJaW50CQkJZm1hc2sgPSAwLAogCQkJCXRtYXNrLApAQCAtMTEx NCw4ICsxMTE1LDEzIEBAIERlY29kZURhdGVUaW1lKGNoYXIgKipmaWVsZCwgaW50ICpmdHlw ZSwgaW50IG5mLAogCQkJCQkJCS8qCiAJCQkJCQkJICogV2Ugc2hvdWxkIHJldHVybiBhbiBl cnJvciBjb2RlIGluc3RlYWQgb2YKIAkJCQkJCQkgKiBlcmVwb3J0J2luZyBkaXJlY3RseSwg YnV0IHRoZW4gdGhlcmUgaXMgbm8gd2F5Ci0JCQkJCQkJICogdG8gcmVwb3J0IHRoZSBiYWQg dGltZSB6b25lIG5hbWUuCisJCQkJCQkJICogdG8gcmVwb3J0IHRoZSBiYWQgdGltZSB6b25l IG5hbWUuICBCdXQKKwkJCQkJCQkgKiB0aHJvd2luZyBlcnJvcnMgaXMgZGlzYWxsb3dlZCwg c2ltcGx5CisJCQkJCQkJICogcmV0dXJuIGVycm9yIGNvZGUuCiAJCQkJCQkJICovCisJCQkJ CQkJaWYgKCF0aHJvd19lcnJvcnMpCisJCQkJCQkJCXJldHVybiBEVEVSUl9CQURfRk9STUFU OworCiAJCQkJCQkJZXJlcG9ydChFUlJPUiwKIAkJCQkJCQkJCShlcnJjb2RlKEVSUkNPREVf SU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAogCQkJCQkJCQkJIGVycm1zZygidGltZSB6b25l IFwiJXNcIiBub3QgcmVjb2duaXplZCIsCkBAIC0xOTIxLDcgKzE5MjcsOCBAQCBEZXRlcm1p bmVUaW1lWm9uZUFiYnJldk9mZnNldEludGVybmFsKHBnX3RpbWVfdCB0LCBjb25zdCBjaGFy ICphYmJyLCBwZ190eiAqdHpwLAogICovCiBpbnQKIERlY29kZVRpbWVPbmx5KGNoYXIgKipm aWVsZCwgaW50ICpmdHlwZSwgaW50IG5mLAotCQkJICAgaW50ICpkdHlwZSwgc3RydWN0IHBn X3RtICp0bSwgZnNlY190ICpmc2VjLCBpbnQgKnR6cCkKKwkJCSAgIGludCAqZHR5cGUsIHN0 cnVjdCBwZ190bSAqdG0sIGZzZWNfdCAqZnNlYywgaW50ICp0enAsCisJCQkgICBib29sIHRo cm93X2Vycm9ycykKIHsKIAlpbnQJCQlmbWFzayA9IDAsCiAJCQkJdG1hc2ssCkBAIC0yMDIy LDYgKzIwMjksOSBAQCBEZWNvZGVUaW1lT25seShjaGFyICoqZmllbGQsIGludCAqZnR5cGUs IGludCBuZiwKIAkJCQkJCQkgKiBlcmVwb3J0J2luZyBkaXJlY3RseSwgYnV0IHRoZW4gdGhl cmUgaXMgbm8gd2F5CiAJCQkJCQkJICogdG8gcmVwb3J0IHRoZSBiYWQgdGltZSB6b25lIG5h bWUuCiAJCQkJCQkJICovCisJCQkJCQkJaWYgKCF0aHJvd19lcnJvcnMpCisJCQkJCQkJCXJl dHVybiBEVEVSUl9CQURfRk9STUFUOworCiAJCQkJCQkJZXJlcG9ydChFUlJPUiwKIAkJCQkJ CQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAogCQkJCQkJ CQkJIGVycm1zZygidGltZSB6b25lIFwiJXNcIiBub3QgcmVjb2duaXplZCIsCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvZmxvYXQuYyBiL3NyYy9iYWNrZW5kL3V0aWxz L2FkdC9mbG9hdC5jCmluZGV4IGZjOGYzOWE3YTk4Li5kOWRhOGM4NDY2ZCAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2Zsb2F0LmMKKysrIGIvc3JjL2JhY2tlbmQvdXRp bHMvYWR0L2Zsb2F0LmMKQEAgLTczLDYgKzczLDE2IEBAIHN0YXRpYyBkb3VibGUgc2luZF9x MShkb3VibGUgeCk7CiBzdGF0aWMgZG91YmxlIGNvc2RfcTEoZG91YmxlIHgpOwogc3RhdGlj IHZvaWQgaW5pdF9kZWdyZWVfY29uc3RhbnRzKHZvaWQpOwogCisvKiBDb252ZW5pZW5jZSBt YWNybzogc2V0ICpoYXZlX2Vycm9yIGZsYWcgKGlmIHByb3ZpZGVkKSBvciB0aHJvdyBlcnJv ciAqLworI2RlZmluZSBSRVRVUk5fRVJST1IodGhyb3dfZXJyb3IsIGhhdmVfZXJyb3IpIFwK K2RvIHsgXAorCWlmIChoYXZlX2Vycm9yKSB7IFwKKwkJKmhhdmVfZXJyb3IgPSB0cnVlOyBc CisJCXJldHVybiAwLjA7IFwKKwl9IGVsc2UgeyBcCisJCXRocm93X2Vycm9yOyBcCisJfSBc Cit9IHdoaWxlICgwKQogCiAvKgogICogV2UgdXNlIHRoZXNlIG91dC1vZi1saW5lIGVyZXBv cnQoKSBjYWxscyB0byByZXBvcnQgZmxvYXQgb3ZlcmZsb3csCkBAIC0xNTksMTAgKzE2OSw5 IEBAIGlzX2luZmluaXRlKGRvdWJsZSB2YWwpCiAgKiByZXN1bHQgb2YgMHhBRTQzRkVwLTEw Ny4KICAqCiAgKi8KLURhdHVtCi1mbG9hdDRpbihQR19GVU5DVElPTl9BUkdTKQorZmxvYXQK K2Zsb2F0NGluX29wdF9lcnJvcihjaGFyCSpudW0sIGJvb2wgKmhhdmVfZXJyb3IpCiB7Ci0J Y2hhcgkgICAqbnVtID0gUEdfR0VUQVJHX0NTVFJJTkcoMCk7CiAJY2hhcgkgICAqb3JpZ19u dW07CiAJZmxvYXQJCXZhbDsKIAljaGFyCSAgICplbmRwdHI7CkBAIC0xODMsMTAgKzE5Miwx MSBAQCBmbG9hdDRpbihQR19GVU5DVElPTl9BUkdTKQogCSAqIHN0cnRvZCgpIG9uIGRpZmZl cmVudCBwbGF0Zm9ybXMuCiAJICovCiAJaWYgKCpudW0gPT0gJ1wwJykKLQkJZXJlcG9ydChF UlJPUiwKLQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfVEVYVF9SRVBSRVNFTlRBVElP TiksCi0JCQkJIGVycm1zZygiaW52YWxpZCBpbnB1dCBzeW50YXggZm9yIHR5cGUgJXM6IFwi JXNcIiIsCi0JCQkJCQkicmVhbCIsIG9yaWdfbnVtKSkpOworCQlSRVRVUk5fRVJST1IoZXJl cG9ydChFUlJPUiwKKwkJCQkJCQkgKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1RFWFRfUkVQ UkVTRU5UQVRJT04pLAorCQkJCQkJCSAgZXJybXNnKCJpbnZhbGlkIGlucHV0IHN5bnRheCBm b3IgdHlwZSAlczogXCIlc1wiIiwKKwkJCQkJCQkJCSAicmVhbCIsIG9yaWdfbnVtKSkpLAor CQkJCQkgaGF2ZV9lcnJvcik7CiAKIAllcnJubyA9IDA7CiAJdmFsID0gc3RydG9mKG51bSwg JmVuZHB0cik7CkBAIC0yNTcsMTYgKzI2NywxOCBAQCBmbG9hdDRpbihQR19GVU5DVElPTl9B UkdTKQogCQkJCSh2YWwgPj0gSFVHRV9WQUxGIHx8IHZhbCA8PSAtSFVHRV9WQUxGKQogI2Vu ZGlmCiAJCQkJKQotCQkJCWVyZXBvcnQoRVJST1IsCi0JCQkJCQkoZXJyY29kZShFUlJDT0RF X05VTUVSSUNfVkFMVUVfT1VUX09GX1JBTkdFKSwKLQkJCQkJCSBlcnJtc2coIlwiJXNcIiBp cyBvdXQgb2YgcmFuZ2UgZm9yIHR5cGUgcmVhbCIsCi0JCQkJCQkJCW9yaWdfbnVtKSkpOwor CQkJCVJFVFVSTl9FUlJPUihlcmVwb3J0KEVSUk9SLAorCQkJCQkJCQkJIChlcnJjb2RlKEVS UkNPREVfTlVNRVJJQ19WQUxVRV9PVVRfT0ZfUkFOR0UpLAorCQkJCQkJCQkJICBlcnJtc2co IlwiJXNcIiBpcyBvdXQgb2YgcmFuZ2UgZm9yIHR5cGUgcmVhbCIsCisJCQkJCQkJCQkJCSBv cmlnX251bSkpKSwKKwkJCQkJCQkgaGF2ZV9lcnJvcik7CiAJCX0KIAkJZWxzZQotCQkJZXJl cG9ydChFUlJPUiwKLQkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1RFWFRfUkVQUkVT RU5UQVRJT04pLAotCQkJCQkgZXJybXNnKCJpbnZhbGlkIGlucHV0IHN5bnRheCBmb3IgdHlw ZSAlczogXCIlc1wiIiwKLQkJCQkJCQkicmVhbCIsIG9yaWdfbnVtKSkpOworCQkJUkVUVVJO X0VSUk9SKGVyZXBvcnQoRVJST1IsCisJCQkJCQkJCSAoZXJyY29kZShFUlJDT0RFX0lOVkFM SURfVEVYVF9SRVBSRVNFTlRBVElPTiksCisJCQkJCQkJCSAgZXJybXNnKCJpbnZhbGlkIGlu cHV0IHN5bnRheCBmb3IgdHlwZSAlczogXCIlc1wiIiwKKwkJCQkJCQkJCQkgInJlYWwiLCBv cmlnX251bSkpKSwKKwkJCQkJCSBoYXZlX2Vycm9yKTsKIAl9CiAKIAkvKiBza2lwIHRyYWls aW5nIHdoaXRlc3BhY2UgKi8KQEAgLTI3NSwxMiArMjg3LDE5IEBAIGZsb2F0NGluKFBHX0ZV TkNUSU9OX0FSR1MpCiAKIAkvKiBpZiB0aGVyZSBpcyBhbnkganVuayBsZWZ0IGF0IHRoZSBl bmQgb2YgdGhlIHN0cmluZywgYmFpbCBvdXQgKi8KIAlpZiAoKmVuZHB0ciAhPSAnXDAnKQot CQllcmVwb3J0KEVSUk9SLAotCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9URVhUX1JF UFJFU0VOVEFUSU9OKSwKLQkJCQkgZXJybXNnKCJpbnZhbGlkIGlucHV0IHN5bnRheCBmb3Ig dHlwZSAlczogXCIlc1wiIiwKLQkJCQkJCSJyZWFsIiwgb3JpZ19udW0pKSk7CisJCVJFVFVS Tl9FUlJPUihlcmVwb3J0KEVSUk9SLAorCQkJCQkJCSAoZXJyY29kZShFUlJDT0RFX0lOVkFM SURfVEVYVF9SRVBSRVNFTlRBVElPTiksCisJCQkJCQkJICBlcnJtc2coImludmFsaWQgaW5w dXQgc3ludGF4IGZvciB0eXBlICVzOiBcIiVzXCIiLAorCQkJCQkJCQkJICJyZWFsIiwgb3Jp Z19udW0pKSksCisJCQkJCSBoYXZlX2Vycm9yKTsKKworCXJldHVybiB2YWw7Cit9CiAKLQlQ R19SRVRVUk5fRkxPQVQ0KHZhbCk7CitEYXR1bQorZmxvYXQ0aW4oUEdfRlVOQ1RJT05fQVJH UykKK3sKKwlQR19SRVRVUk5fRkxPQVQ0KGZsb2F0NGluX29wdF9lcnJvcihQR19HRVRBUkdf Q1NUUklORygwKSwgTlVMTCkpOwogfQogCiAvKgpAQCAtMzQwLDE3ICszNTksNiBAQCBmbG9h dDhpbihQR19GVU5DVElPTl9BUkdTKQogCVBHX1JFVFVSTl9GTE9BVDgoZmxvYXQ4aW5faW50 ZXJuYWwobnVtLCBOVUxMLCAiZG91YmxlIHByZWNpc2lvbiIsIG51bSkpOwogfQogCi0vKiBD b252ZW5pZW5jZSBtYWNybzogc2V0ICpoYXZlX2Vycm9yIGZsYWcgKGlmIHByb3ZpZGVkKSBv ciB0aHJvdyBlcnJvciAqLwotI2RlZmluZSBSRVRVUk5fRVJST1IodGhyb3dfZXJyb3IsIGhh dmVfZXJyb3IpIFwKLWRvIHsgXAotCWlmIChoYXZlX2Vycm9yKSB7IFwKLQkJKmhhdmVfZXJy b3IgPSB0cnVlOyBcCi0JCXJldHVybiAwLjA7IFwKLQl9IGVsc2UgeyBcCi0JCXRocm93X2Vy cm9yOyBcCi0JfSBcCi19IHdoaWxlICgwKQotCiAvKgogICogZmxvYXQ4aW5faW50ZXJuYWxf b3B0X2Vycm9yIC0gZ3V0cyBvZiBmbG9hdDhpbigpCiAgKgpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvdXRpbHMvYWR0L2pzb25iLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvanNvbmIu YwppbmRleCBmNzAwYzViNGM5My4uMWRhNTE5ZGFhZWYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL3V0aWxzL2FkdC9qc29uYi5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29u Yi5jCkBAIC00Niw3ICs0Niw2IEBAIHR5cGVkZWYgc3RydWN0IEpzb25iQWdnU3RhdGUKIAlP aWQJCQl2YWxfb3V0cHV0X2Z1bmM7CiB9IEpzb25iQWdnU3RhdGU7CiAKLXN0YXRpYyBpbmxp bmUgRGF0dW0ganNvbmJfZnJvbV9jc3RyaW5nKGNoYXIgKmpzb24sIGludCBsZW4sIGJvb2wg dW5pcXVlX2tleXMpOwogc3RhdGljIHNpemVfdCBjaGVja1N0cmluZ0xlbihzaXplX3QgbGVu KTsKIHN0YXRpYyB2b2lkIGpzb25iX2luX29iamVjdF9zdGFydCh2b2lkICpwc3RhdGUpOwog c3RhdGljIHZvaWQganNvbmJfaW5fb2JqZWN0X2VuZCh2b2lkICpwc3RhdGUpOwpAQCAtNzcs NyArNzYsNyBAQCBqc29uYl9pbihQR19GVU5DVElPTl9BUkdTKQogewogCWNoYXIJICAgKmpz b24gPSBQR19HRVRBUkdfQ1NUUklORygwKTsKIAotCXJldHVybiBqc29uYl9mcm9tX2NzdHJp bmcoanNvbiwgc3RybGVuKGpzb24pLCBmYWxzZSk7CisJUEdfUkVUVVJOX0RBVFVNKGpzb25i X2Zyb21fY3N0cmluZyhqc29uLCBzdHJsZW4oanNvbiksIGZhbHNlLCBOVUxMKSk7CiB9CiAK IC8qCkBAIC0xMDEsNyArMTAwLDcgQEAganNvbmJfcmVjdihQR19GVU5DVElPTl9BUkdTKQog CWVsc2UKIAkJZWxvZyhFUlJPUiwgInVuc3VwcG9ydGVkIGpzb25iIHZlcnNpb24gbnVtYmVy ICVkIiwgdmVyc2lvbik7CiAKLQlyZXR1cm4ganNvbmJfZnJvbV9jc3RyaW5nKHN0ciwgbmJ5 dGVzLCBmYWxzZSk7CisJcmV0dXJuIGpzb25iX2Zyb21fY3N0cmluZyhzdHIsIG5ieXRlcywg ZmFsc2UsIE5VTEwpOwogfQogCiAvKgpAQCAtMTQ3LDcgKzE0Niw3IEBAIGpzb25iX2Zyb21f dGV4dCh0ZXh0ICpqcywgYm9vbCB1bmlxdWVfa2V5cykKIHsKIAlyZXR1cm4ganNvbmJfZnJv bV9jc3RyaW5nKFZBUkRBVEFfQU5ZKGpzKSwKIAkJCQkJCQkgIFZBUlNJWkVfQU5ZX0VYSERS KGpzKSwKLQkJCQkJCQkgIHVuaXF1ZV9rZXlzKTsKKwkJCQkJCQkgIHVuaXF1ZV9rZXlzLCBO VUxMKTsKIH0KIAogLyoKQEAgLTIzOSwxMiArMjM4LDEzIEBAIGpzb25iX3R5cGVvZihQR19G VU5DVElPTl9BUkdTKQogICoKICAqIFVzZXMgdGhlIGpzb24gcGFyc2VyICh3aXRoIGhvb2tz KSB0byBjb25zdHJ1Y3QgYSBqc29uYi4KICAqLwotc3RhdGljIGlubGluZSBEYXR1bQotanNv bmJfZnJvbV9jc3RyaW5nKGNoYXIgKmpzb24sIGludCBsZW4sIGJvb2wgdW5pcXVlX2tleXMp CitEYXR1bQoranNvbmJfZnJvbV9jc3RyaW5nKGNoYXIgKmpzb24sIGludCBsZW4sIGJvb2wg dW5pcXVlX2tleXMsIGJvb2wgKmVycm9yKQogewogCUpzb25MZXhDb250ZXh0ICpsZXg7CiAJ SnNvbmJJblN0YXRlIHN0YXRlOwogCUpzb25TZW1BY3Rpb24gc2VtOworCUpzb25QYXJzZUVy cm9yVHlwZSByZXN1bHQ7CiAKIAltZW1zZXQoJnN0YXRlLCAwLCBzaXplb2Yoc3RhdGUpKTsK IAltZW1zZXQoJnNlbSwgMCwgc2l6ZW9mKHNlbSkpOwpAQCAtMjYxLDEwICsyNjEsMjAgQEAg anNvbmJfZnJvbV9jc3RyaW5nKGNoYXIgKmpzb24sIGludCBsZW4sIGJvb2wgdW5pcXVlX2tl eXMpCiAJc2VtLnNjYWxhciA9IGpzb25iX2luX3NjYWxhcjsKIAlzZW0ub2JqZWN0X2ZpZWxk X3N0YXJ0ID0ganNvbmJfaW5fb2JqZWN0X2ZpZWxkX3N0YXJ0OwogCi0JcGdfcGFyc2VfanNv bl9vcl9lcmVwb3J0KGxleCwgJnNlbSk7CisJcmVzdWx0ID0gcGdfcGFyc2VfanNvbihsZXgs ICZzZW0pOworCWlmIChyZXN1bHQgIT0gSlNPTl9TVUNDRVNTKQorCXsKKwkJaWYgKGVycm9y KQorCQl7CisJCQkqZXJyb3IgPSB0cnVlOworCQkJcmV0dXJuIChEYXR1bSkgMDsKKwkJfQor CisJCWpzb25fZXJlcG9ydF9lcnJvcihyZXN1bHQsIGxleCk7CisJfQogCiAJLyogYWZ0ZXIg cGFyc2luZywgdGhlIGl0ZW0gbWVtYmVyIGhhcyB0aGUgY29tcG9zZWQganNvbmIgc3RydWN0 dXJlICovCi0JUEdfUkVUVVJOX1BPSU5URVIoSnNvbmJWYWx1ZVRvSnNvbmIoc3RhdGUucmVz KSk7CisJcmV0dXJuIEpzb25iUEdldERhdHVtKEpzb25iVmFsdWVUb0pzb25iKHN0YXRlLnJl cykpOwogfQogCiBzdGF0aWMgc2l6ZV90CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGls cy9hZHQvanNvbnBhdGguYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29ucGF0aC5jCmlu ZGV4IGRhOWRmNGFlNzY2Li45YzlmOWFkNzAzZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv dXRpbHMvYWR0L2pzb25wYXRoLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb25w YXRoLmMKQEAgLTEzMTgsOSArMTMxOCwxMSBAQCBqc3BJc011dGFibGVXYWxrZXIoSnNvblBh dGhJdGVtICpqcGksIEpzb25QYXRoTXV0YWJsZUNvbnRleHQgKmN4dCkKICAqIENoZWNrIHdo ZXRoZXIganNvbnBhdGggZXhwcmVzc2lvbiBpcyBpbW11dGFibGUgb3Igbm90LgogICovCiBi b29sCi1qc3BJc011dGFibGUoSnNvblBhdGggKnBhdGgsIExpc3QgKnZhcm5hbWVzLCBMaXN0 ICp2YXJleHBycykKK2pzcElzTXV0YWJsZShKc29uUGF0aCAqcGF0aCwgTGlzdCAqdmFybmFt ZXMsIExpc3QgKnZhcmV4cHJzLAorCQkJIGJvb2wgKnJldHVybnNfZGF0ZXRpbWUpCiB7CiAJ SnNvblBhdGhNdXRhYmxlQ29udGV4dCBjeHQ7CisJSnNvblBhdGhEYXRhdHlwZVN0YXR1cyBz dGF0dXM7CiAJSnNvblBhdGhJdGVtIGpwaTsKIAogCWN4dC52YXJuYW1lcyA9IHZhcm5hbWVz OwpAQCAtMTMzMCw3ICsxMzMyLDkgQEAganNwSXNNdXRhYmxlKEpzb25QYXRoICpwYXRoLCBM aXN0ICp2YXJuYW1lcywgTGlzdCAqdmFyZXhwcnMpCiAJY3h0Lm11dGFibGUgPSBmYWxzZTsK IAogCWpzcEluaXQoJmpwaSwgcGF0aCk7Ci0JanNwSXNNdXRhYmxlV2Fsa2VyKCZqcGksICZj eHQpOworCXN0YXR1cyA9IGpzcElzTXV0YWJsZVdhbGtlcigmanBpLCAmY3h0KTsKKworCSpy ZXR1cm5zX2RhdGV0aW1lID0gc3RhdHVzICE9IGpwZHNOb25EYXRlVGltZTsKIAogCXJldHVy biBjeHQubXV0YWJsZTsKIH0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9u dW1lcmljLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvbnVtZXJpYy5jCmluZGV4IDkyMGE2 M2IwMDgxLi45NTFiMmY0M2FiMSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0 L251bWVyaWMuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvbnVtZXJpYy5jCkBAIC00 OTgsNyArNDk4LDcgQEAgc3RhdGljIHZvaWQgZnJlZV92YXIoTnVtZXJpY1ZhciAqdmFyKTsK IHN0YXRpYyB2b2lkIHplcm9fdmFyKE51bWVyaWNWYXIgKnZhcik7CiAKIHN0YXRpYyBjb25z dCBjaGFyICpzZXRfdmFyX2Zyb21fc3RyKGNvbnN0IGNoYXIgKnN0ciwgY29uc3QgY2hhciAq Y3AsCi0JCQkJCQkJCQlOdW1lcmljVmFyICpkZXN0KTsKKwkJCQkJCQkJCU51bWVyaWNWYXIg KmRlc3QsIGJvb2wgKmhhdmVfZXJyb3IpOwogc3RhdGljIHZvaWQgc2V0X3Zhcl9mcm9tX251 bShOdW1lcmljIHZhbHVlLCBOdW1lcmljVmFyICpkZXN0KTsKIHN0YXRpYyB2b2lkIGluaXRf dmFyX2Zyb21fbnVtKE51bWVyaWMgbnVtLCBOdW1lcmljVmFyICpkZXN0KTsKIHN0YXRpYyB2 b2lkIHNldF92YXJfZnJvbV92YXIoY29uc3QgTnVtZXJpY1ZhciAqdmFsdWUsIE51bWVyaWNW YXIgKmRlc3QpOwpAQCAtNTEyLDggKzUxMiw4IEBAIHN0YXRpYyBOdW1lcmljIGR1cGxpY2F0 ZV9udW1lcmljKE51bWVyaWMgbnVtKTsKIHN0YXRpYyBOdW1lcmljIG1ha2VfcmVzdWx0KGNv bnN0IE51bWVyaWNWYXIgKnZhcik7CiBzdGF0aWMgTnVtZXJpYyBtYWtlX3Jlc3VsdF9vcHRf ZXJyb3IoY29uc3QgTnVtZXJpY1ZhciAqdmFyLCBib29sICplcnJvcik7CiAKLXN0YXRpYyB2 b2lkIGFwcGx5X3R5cG1vZChOdW1lcmljVmFyICp2YXIsIGludDMyIHR5cG1vZCk7Ci1zdGF0 aWMgdm9pZCBhcHBseV90eXBtb2Rfc3BlY2lhbChOdW1lcmljIG51bSwgaW50MzIgdHlwbW9k KTsKK3N0YXRpYyBib29sIGFwcGx5X3R5cG1vZChOdW1lcmljVmFyICp2YXIsIGludDMyIHR5 cG1vZCwgYm9vbCAqZXJyb3IpOworc3RhdGljIHZvaWQgYXBwbHlfdHlwbW9kX3NwZWNpYWwo TnVtZXJpYyBudW0sIGludDMyIHR5cG1vZCwgYm9vbCAqZXJyb3IpOwogCiBzdGF0aWMgYm9v bCBudW1lcmljdmFyX3RvX2ludDMyKGNvbnN0IE51bWVyaWNWYXIgKnZhciwgaW50MzIgKnJl c3VsdCk7CiBzdGF0aWMgYm9vbCBudW1lcmljdmFyX3RvX2ludDY0KGNvbnN0IE51bWVyaWNW YXIgKnZhciwgaW50NjQgKnJlc3VsdCk7CkBAIC02MDcsMjEgKzYwNywyNSBAQCBzdGF0aWMg dm9pZCBhY2N1bV9zdW1fY29tYmluZShOdW1lcmljU3VtQWNjdW0gKmFjY3VtLCBOdW1lcmlj U3VtQWNjdW0gKmFjY3VtMik7CiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKi8KIAorLyogQ29u dmVuaWVuY2UgbWFjcm86IHNldCAqaGF2ZV9lcnJvciBmbGFnIChpZiBwcm92aWRlZCkgb3Ig dGhyb3cgZXJyb3IgKi8KKyNkZWZpbmUgUkVUVVJOX0VSUk9SKHRocm93X2Vycm9yLCBoYXZl X2Vycm9yKSBcCitkbyB7IFwKKwlpZiAoaGF2ZV9lcnJvcikgeyBcCisJCSooaGF2ZV9lcnJv cikgPSB0cnVlOyBcCisJCXJldHVybiBOVUxMOyBcCisJfSBlbHNlIHsgXAorCQl0aHJvd19l cnJvcjsgXAorCX0gXAorfSB3aGlsZSAoMCkKIAogLyoKICAqIG51bWVyaWNfaW4oKSAtCiAg KgogICoJSW5wdXQgZnVuY3Rpb24gZm9yIG51bWVyaWMgZGF0YSB0eXBlCiAgKi8KLURhdHVt Ci1udW1lcmljX2luKFBHX0ZVTkNUSU9OX0FSR1MpCitOdW1lcmljCitudW1lcmljX2luX29w dF9lcnJvcihjaGFyICpzdHIsIGludDMyIHR5cG1vZCwgYm9vbCAqaGF2ZV9lcnJvcikKIHsK LQljaGFyCSAgICpzdHIgPSBQR19HRVRBUkdfQ1NUUklORygwKTsKLQotI2lmZGVmIE5PVF9V U0VECi0JT2lkCQkJdHlwZWxlbSA9IFBHX0dFVEFSR19PSUQoMSk7Ci0jZW5kaWYKLQlpbnQz MgkJdHlwbW9kID0gUEdfR0VUQVJHX0lOVDMyKDIpOwogCU51bWVyaWMJCXJlczsKIAljb25z dCBjaGFyICpjcDsKIApAQCAtNjgyLDcgKzY4NiwxMCBAQCBudW1lcmljX2luKFBHX0ZVTkNU SU9OX0FSR1MpCiAKIAkJaW5pdF92YXIoJnZhbHVlKTsKIAotCQljcCA9IHNldF92YXJfZnJv bV9zdHIoc3RyLCBjcCwgJnZhbHVlKTsKKwkJY3AgPSBzZXRfdmFyX2Zyb21fc3RyKHN0ciwg Y3AsICZ2YWx1ZSwgaGF2ZV9lcnJvcik7CisKKwkJaWYgKCFjcCkKKwkJCXJldHVybiBOVUxM OwkvKiBlcnJvciAqLwogCiAJCS8qCiAJCSAqIFdlIGR1cGxpY2F0ZSBhIGZldyBsaW5lcyBv ZiBjb2RlIGhlcmUgYmVjYXVzZSB3ZSB3b3VsZCBsaWtlIHRvCkBAIC02OTMsMzggKzcwMCw1 OSBAQCBudW1lcmljX2luKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCXdoaWxlICgqY3ApCiAJCXsK IAkJCWlmICghaXNzcGFjZSgodW5zaWduZWQgY2hhcikgKmNwKSkKLQkJCQllcmVwb3J0KEVS Uk9SLAotCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1RFWFRfUkVQUkVTRU5UQVRJ T04pLAotCQkJCQkJIGVycm1zZygiaW52YWxpZCBpbnB1dCBzeW50YXggZm9yIHR5cGUgJXM6 IFwiJXNcIiIsCi0JCQkJCQkJCSJudW1lcmljIiwgc3RyKSkpOworCQkJCVJFVFVSTl9FUlJP UihlcmVwb3J0KEVSUk9SLAorCQkJCQkJCQkJIChlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9U RVhUX1JFUFJFU0VOVEFUSU9OKSwKKwkJCQkJCQkJCSAgZXJybXNnKCJpbnZhbGlkIGlucHV0 IHN5bnRheCBmb3IgdHlwZSAlczogXCIlc1wiIiwKKwkJCQkJCQkJCQkJICJudW1lcmljIiwg c3RyKSkpLAorCQkJCQkJCSBoYXZlX2Vycm9yKTsKIAkJCWNwKys7CiAJCX0KIAotCQlhcHBs eV90eXBtb2QoJnZhbHVlLCB0eXBtb2QpOworCQlpZiAoIWFwcGx5X3R5cG1vZCgmdmFsdWUs IHR5cG1vZCwgaGF2ZV9lcnJvcikpCisJCQlyZXR1cm4gTlVMTDsgLyogZXJyb3IgKi8KIAot CQlyZXMgPSBtYWtlX3Jlc3VsdCgmdmFsdWUpOworCQlyZXMgPSBtYWtlX3Jlc3VsdF9vcHRf ZXJyb3IoJnZhbHVlLCBoYXZlX2Vycm9yKTsKIAkJZnJlZV92YXIoJnZhbHVlKTsKIAotCQlQ R19SRVRVUk5fTlVNRVJJQyhyZXMpOworCQlyZXR1cm4gcmVzOwogCX0KIAogCS8qIFNob3Vs ZCBiZSBub3RoaW5nIGxlZnQgYnV0IHNwYWNlcyAqLwogCXdoaWxlICgqY3ApCiAJewogCQlp ZiAoIWlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpICpjcCkpCi0JCQllcmVwb3J0KEVSUk9SLAot CQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfVEVYVF9SRVBSRVNFTlRBVElPTiksCi0J CQkJCSBlcnJtc2coImludmFsaWQgaW5wdXQgc3ludGF4IGZvciB0eXBlICVzOiBcIiVzXCIi LAotCQkJCQkJCSJudW1lcmljIiwgc3RyKSkpOworCQkJUkVUVVJOX0VSUk9SKGVyZXBvcnQo RVJST1IsCisJCQkJCQkJCSAoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfVEVYVF9SRVBSRVNF TlRBVElPTiksCisJCQkJCQkJCSAgZXJybXNnKCJpbnZhbGlkIGlucHV0IHN5bnRheCBmb3Ig dHlwZSAlczogXCIlc1wiIiwKKwkJCQkJCQkJCQkgIm51bWVyaWMiLCBzdHIpKSksCisJCQkJ CQkgaGF2ZV9lcnJvcik7CisKIAkJY3ArKzsKIAl9CiAKIAkvKiBBcyBhYm92ZSwgdGhyb3cg YW55IHR5cG1vZCBlcnJvciBhZnRlciBmaW5pc2hpbmcgc3ludGF4IGNoZWNrICovCi0JYXBw bHlfdHlwbW9kX3NwZWNpYWwocmVzLCB0eXBtb2QpOworCWFwcGx5X3R5cG1vZF9zcGVjaWFs KHJlcywgdHlwbW9kLCBoYXZlX2Vycm9yKTsKIAotCVBHX1JFVFVSTl9OVU1FUklDKHJlcyk7 CisJcmV0dXJuIHJlczsKIH0KIAorLyoKKyAqIG51bWVyaWNfaW4oKSAtCisgKgorICoJSW5w dXQgZnVuY3Rpb24gZm9yIG51bWVyaWMgZGF0YSB0eXBlCisgKi8KK0RhdHVtCitudW1lcmlj X2luKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJY2hhcgkgICAqc3RyID0gUEdfR0VUQVJHX0NT VFJJTkcoMCk7CisKKyNpZmRlZiBOT1RfVVNFRAorCU9pZAkJCXR5cGVsZW0gPSBQR19HRVRB UkdfT0lEKDEpOworI2VuZGlmCisJaW50MzIJCXR5cG1vZCA9IFBHX0dFVEFSR19JTlQzMigy KTsKKworCVBHX1JFVFVSTl9OVU1FUklDKG51bWVyaWNfaW5fb3B0X2Vycm9yKHN0ciwgdHlw bW9kLCBOVUxMKSk7Cit9CiAKIC8qCiAgKiBudW1lcmljX291dCgpIC0KQEAgLTEwNTgsNyAr MTA4Niw3IEBAIG51bWVyaWNfcmVjdihQR19GVU5DVElPTl9BUkdTKQogCXsKIAkJdHJ1bmNf dmFyKCZ2YWx1ZSwgdmFsdWUuZHNjYWxlKTsKIAotCQlhcHBseV90eXBtb2QoJnZhbHVlLCB0 eXBtb2QpOworCQlhcHBseV90eXBtb2QoJnZhbHVlLCB0eXBtb2QsIE5VTEwpOwogCiAJCXJl cyA9IG1ha2VfcmVzdWx0KCZ2YWx1ZSk7CiAJfQpAQCAtMTA2Nyw3ICsxMDk1LDcgQEAgbnVt ZXJpY19yZWN2KFBHX0ZVTkNUSU9OX0FSR1MpCiAJCS8qIGFwcGx5X3R5cG1vZF9zcGVjaWFs IHdhbnRzIHVzIHRvIG1ha2UgdGhlIE51bWVyaWMgZmlyc3QgKi8KIAkJcmVzID0gbWFrZV9y ZXN1bHQoJnZhbHVlKTsKIAotCQlhcHBseV90eXBtb2Rfc3BlY2lhbChyZXMsIHR5cG1vZCk7 CisJCWFwcGx5X3R5cG1vZF9zcGVjaWFsKHJlcywgdHlwbW9kLCBOVUxMKTsKIAl9CiAKIAlm cmVlX3ZhcigmdmFsdWUpOwpAQCAtMTE4MCw3ICsxMjA4LDcgQEAgbnVtZXJpYwkJKFBHX0ZV TkNUSU9OX0FSR1MpCiAJICovCiAJaWYgKE5VTUVSSUNfSVNfU1BFQ0lBTChudW0pKQogCXsK LQkJYXBwbHlfdHlwbW9kX3NwZWNpYWwobnVtLCB0eXBtb2QpOworCQlhcHBseV90eXBtb2Rf c3BlY2lhbChudW0sIHR5cG1vZCwgTlVMTCk7CiAJCVBHX1JFVFVSTl9OVU1FUklDKGR1cGxp Y2F0ZV9udW1lcmljKG51bSkpOwogCX0KIApAQCAtMTIzMSw3ICsxMjU5LDcgQEAgbnVtZXJp YwkJKFBHX0ZVTkNUSU9OX0FSR1MpCiAJaW5pdF92YXIoJnZhcik7CiAKIAlzZXRfdmFyX2Zy b21fbnVtKG51bSwgJnZhcik7Ci0JYXBwbHlfdHlwbW9kKCZ2YXIsIHR5cG1vZCk7CisJYXBw bHlfdHlwbW9kKCZ2YXIsIHR5cG1vZCwgTlVMTCk7CiAJbmV3ID0gbWFrZV9yZXN1bHQoJnZh cik7CiAKIAlmcmVlX3ZhcigmdmFyKTsKQEAgLTQzMDgsMTUgKzQzMzYsMjAgQEAgaW50OF9u dW1lcmljKFBHX0ZVTkNUSU9OX0FSR1MpCiB9CiAKIAotRGF0dW0KLW51bWVyaWNfaW50OChQ R19GVU5DVElPTl9BUkdTKQoraW50NjQKK251bWVyaWNfaW50OF9vcHRfZXJyb3IoTnVtZXJp YyBudW0sIGJvb2wgKmVycm9yKQogewotCU51bWVyaWMJCW51bSA9IFBHX0dFVEFSR19OVU1F UklDKDApOwogCU51bWVyaWNWYXIJeDsKIAlpbnQ2NAkJcmVzdWx0OwogCiAJaWYgKE5VTUVS SUNfSVNfU1BFQ0lBTChudW0pKQogCXsKKwkJaWYgKGVycm9yKQorCQl7CisJCQkqZXJyb3Ig PSB0cnVlOworCQkJcmV0dXJuIDA7CisJCX0KKwogCQlpZiAoTlVNRVJJQ19JU19OQU4obnVt KSkKIAkJCWVyZXBvcnQoRVJST1IsCiAJCQkJCShlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9O T1RfU1VQUE9SVEVEKSwKQEAgLTQzMzEsMTMgKzQzNjQsMjYgQEAgbnVtZXJpY19pbnQ4KFBH X0ZVTkNUSU9OX0FSR1MpCiAJaW5pdF92YXJfZnJvbV9udW0obnVtLCAmeCk7CiAKIAlpZiAo IW51bWVyaWN2YXJfdG9faW50NjQoJngsICZyZXN1bHQpKQorCXsKKwkJaWYgKGVycm9yKQor CQl7CisJCQkqZXJyb3IgPSB0cnVlOworCQkJcmV0dXJuIDA7CisJCX0KKwogCQllcmVwb3J0 KEVSUk9SLAogCQkJCShlcnJjb2RlKEVSUkNPREVfTlVNRVJJQ19WQUxVRV9PVVRfT0ZfUkFO R0UpLAogCQkJCSBlcnJtc2coImJpZ2ludCBvdXQgb2YgcmFuZ2UiKSkpOworCX0KIAotCVBH X1JFVFVSTl9JTlQ2NChyZXN1bHQpOworCXJldHVybiByZXN1bHQ7CiB9CiAKK0RhdHVtCitu dW1lcmljX2ludDgoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlQR19SRVRVUk5fSU5UNjQobnVt ZXJpY19pbnQ4X29wdF9lcnJvcihQR19HRVRBUkdfTlVNRVJJQygwKSwgTlVMTCkpOworfQog CiBEYXR1bQogaW50Ml9udW1lcmljKFBHX0ZVTkNUSU9OX0FSR1MpCkBAIC00MzQ3LDE3ICs0 MzkzLDIwIEBAIGludDJfbnVtZXJpYyhQR19GVU5DVElPTl9BUkdTKQogCVBHX1JFVFVSTl9O VU1FUklDKGludDY0X3RvX251bWVyaWModmFsKSk7CiB9CiAKLQotRGF0dW0KLW51bWVyaWNf aW50MihQR19GVU5DVElPTl9BUkdTKQoraW50MTYKK251bWVyaWNfaW50Ml9vcHRfZXJyb3Io TnVtZXJpYyBudW0sIGJvb2wgKmVycm9yKQogewotCU51bWVyaWMJCW51bSA9IFBHX0dFVEFS R19OVU1FUklDKDApOwogCU51bWVyaWNWYXIJeDsKIAlpbnQ2NAkJdmFsOwotCWludDE2CQly ZXN1bHQ7CiAKIAlpZiAoTlVNRVJJQ19JU19TUEVDSUFMKG51bSkpCiAJeworCQlpZiAoZXJy b3IpCisJCXsKKwkJCSplcnJvciA9IHRydWU7CisJCQlyZXR1cm4gMDsKKwkJfQorCiAJCWlm IChOVU1FUklDX0lTX05BTihudW0pKQogCQkJZXJlcG9ydChFUlJPUiwKIAkJCQkJKGVycmNv ZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLApAQCAtNDM3MiwyMSArNDQyMSw0 MCBAQCBudW1lcmljX2ludDIoUEdfRlVOQ1RJT05fQVJHUykKIAlpbml0X3Zhcl9mcm9tX251 bShudW0sICZ4KTsKIAogCWlmICghbnVtZXJpY3Zhcl90b19pbnQ2NCgmeCwgJnZhbCkpCisJ eworCQlpZiAoZXJyb3IpCisJCXsKKwkJCSplcnJvciA9IHRydWU7CisJCQlyZXR1cm4gMDsK KwkJfQorCiAJCWVyZXBvcnQoRVJST1IsCiAJCQkJKGVycmNvZGUoRVJSQ09ERV9OVU1FUklD X1ZBTFVFX09VVF9PRl9SQU5HRSksCiAJCQkJIGVycm1zZygic21hbGxpbnQgb3V0IG9mIHJh bmdlIikpKTsKKwl9CiAKIAlpZiAodW5saWtlbHkodmFsIDwgUEdfSU5UMTZfTUlOKSB8fCB1 bmxpa2VseSh2YWwgPiBQR19JTlQxNl9NQVgpKQorCXsKKwkJaWYgKGVycm9yKQorCQl7CisJ CQkqZXJyb3IgPSB0cnVlOworCQkJcmV0dXJuIDA7CisJCX0KKwogCQllcmVwb3J0KEVSUk9S LAogCQkJCShlcnJjb2RlKEVSUkNPREVfTlVNRVJJQ19WQUxVRV9PVVRfT0ZfUkFOR0UpLAog CQkJCSBlcnJtc2coInNtYWxsaW50IG91dCBvZiByYW5nZSIpKSk7CisJfQogCiAJLyogRG93 bi1jb252ZXJ0IHRvIGludDIgKi8KLQlyZXN1bHQgPSAoaW50MTYpIHZhbDsKLQotCVBHX1JF VFVSTl9JTlQxNihyZXN1bHQpOworCXJldHVybiAoaW50MTYpIHZhbDsKIH0KIAorRGF0dW0K K251bWVyaWNfaW50MihQR19GVU5DVElPTl9BUkdTKQoreworCVBHX1JFVFVSTl9JTlQxNihu dW1lcmljX2ludDJfb3B0X2Vycm9yKFBHX0dFVEFSR19OVU1FUklDKDApLCBOVUxMKSk7Cit9 CiAKIERhdHVtCiBmbG9hdDhfbnVtZXJpYyhQR19GVU5DVElPTl9BUkdTKQpAQCAtNDQxMiw3 ICs0NDgwLDcgQEAgZmxvYXQ4X251bWVyaWMoUEdfRlVOQ1RJT05fQVJHUykKIAlpbml0X3Zh cigmcmVzdWx0KTsKIAogCS8qIEFzc3VtZSB3ZSBuZWVkIG5vdCB3b3JyeSBhYm91dCBsZWFk aW5nL3RyYWlsaW5nIHNwYWNlcyAqLwotCSh2b2lkKSBzZXRfdmFyX2Zyb21fc3RyKGJ1Ziwg YnVmLCAmcmVzdWx0KTsKKwkodm9pZCkgc2V0X3Zhcl9mcm9tX3N0cihidWYsIGJ1ZiwgJnJl c3VsdCwgTlVMTCk7CiAKIAlyZXMgPSBtYWtlX3Jlc3VsdCgmcmVzdWx0KTsKIApAQCAtNDUw NSw3ICs0NTczLDcgQEAgZmxvYXQ0X251bWVyaWMoUEdfRlVOQ1RJT05fQVJHUykKIAlpbml0 X3ZhcigmcmVzdWx0KTsKIAogCS8qIEFzc3VtZSB3ZSBuZWVkIG5vdCB3b3JyeSBhYm91dCBs ZWFkaW5nL3RyYWlsaW5nIHNwYWNlcyAqLwotCSh2b2lkKSBzZXRfdmFyX2Zyb21fc3RyKGJ1 ZiwgYnVmLCAmcmVzdWx0KTsKKwkodm9pZCkgc2V0X3Zhcl9mcm9tX3N0cihidWYsIGJ1Ziwg JnJlc3VsdCwgTlVMTCk7CiAKIAlyZXMgPSBtYWtlX3Jlc3VsdCgmcmVzdWx0KTsKIApAQCAt NjgxMSw3ICs2ODc5LDggQEAgemVyb192YXIoTnVtZXJpY1ZhciAqdmFyKQogICogcmVwb3J0 cy4gIChUeXBpY2FsbHkgY3Agd291bGQgYmUgdGhlIHNhbWUgZXhjZXB0IGFkdmFuY2VkIG92 ZXIgc3BhY2VzLikKICAqLwogc3RhdGljIGNvbnN0IGNoYXIgKgotc2V0X3Zhcl9mcm9tX3N0 cihjb25zdCBjaGFyICpzdHIsIGNvbnN0IGNoYXIgKmNwLCBOdW1lcmljVmFyICpkZXN0KQor c2V0X3Zhcl9mcm9tX3N0cihjb25zdCBjaGFyICpzdHIsIGNvbnN0IGNoYXIgKmNwLCBOdW1l cmljVmFyICpkZXN0LAorCQkJCSBib29sICpoYXZlX2Vycm9yKQogewogCWJvb2wJCWhhdmVf ZHAgPSBmYWxzZTsKIAlpbnQJCQlpOwpAQCAtNjg0OSwxMCArNjkxOCwxMSBAQCBzZXRfdmFy X2Zyb21fc3RyKGNvbnN0IGNoYXIgKnN0ciwgY29uc3QgY2hhciAqY3AsIE51bWVyaWNWYXIg KmRlc3QpCiAJfQogCiAJaWYgKCFpc2RpZ2l0KCh1bnNpZ25lZCBjaGFyKSAqY3ApKQotCQll cmVwb3J0KEVSUk9SLAotCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9URVhUX1JFUFJF U0VOVEFUSU9OKSwKLQkJCQkgZXJybXNnKCJpbnZhbGlkIGlucHV0IHN5bnRheCBmb3IgdHlw ZSAlczogXCIlc1wiIiwKLQkJCQkJCSJudW1lcmljIiwgc3RyKSkpOworCQlSRVRVUk5fRVJS T1IoZXJlcG9ydChFUlJPUiwKKwkJCQkJCQkgKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1RF WFRfUkVQUkVTRU5UQVRJT04pLAorCQkJCQkJCSAgZXJybXNnKCJpbnZhbGlkIGlucHV0IHN5 bnRheCBmb3IgdHlwZSAlczogXCIlc1wiIiwKKwkJCQkJCQkJCSAibnVtZXJpYyIsIHN0cikp KSwKKwkJCQkJIGhhdmVfZXJyb3IpOwogCiAJZGVjZGlnaXRzID0gKHVuc2lnbmVkIGNoYXIg KikgcGFsbG9jKHN0cmxlbihjcCkgKyBERUNfRElHSVRTICogMik7CiAKQEAgLTY4NzMsMTAg KzY5NDMsMTEgQEAgc2V0X3Zhcl9mcm9tX3N0cihjb25zdCBjaGFyICpzdHIsIGNvbnN0IGNo YXIgKmNwLCBOdW1lcmljVmFyICpkZXN0KQogCQllbHNlIGlmICgqY3AgPT0gJy4nKQogCQl7 CiAJCQlpZiAoaGF2ZV9kcCkKLQkJCQllcmVwb3J0KEVSUk9SLAotCQkJCQkJKGVycmNvZGUo RVJSQ09ERV9JTlZBTElEX1RFWFRfUkVQUkVTRU5UQVRJT04pLAotCQkJCQkJIGVycm1zZygi aW52YWxpZCBpbnB1dCBzeW50YXggZm9yIHR5cGUgJXM6IFwiJXNcIiIsCi0JCQkJCQkJCSJu dW1lcmljIiwgc3RyKSkpOworCQkJCVJFVFVSTl9FUlJPUihlcmVwb3J0KEVSUk9SLAorCQkJ CQkJCQkJIChlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9URVhUX1JFUFJFU0VOVEFUSU9OKSwK KwkJCQkJCQkJCSAgZXJybXNnKCJpbnZhbGlkIGlucHV0IHN5bnRheCBmb3IgdHlwZSAlczog XCIlc1wiIiwKKwkJCQkJCQkJCQkJICJudW1lcmljIiwgc3RyKSkpLAorCQkJCQkJCSBoYXZl X2Vycm9yKTsKIAkJCWhhdmVfZHAgPSB0cnVlOwogCQkJY3ArKzsKIAkJfQpAQCAtNjg5Nywx MCArNjk2OCwxMSBAQCBzZXRfdmFyX2Zyb21fc3RyKGNvbnN0IGNoYXIgKnN0ciwgY29uc3Qg Y2hhciAqY3AsIE51bWVyaWNWYXIgKmRlc3QpCiAJCWNwKys7CiAJCWV4cG9uZW50ID0gc3Ry dG9sKGNwLCAmZW5kcHRyLCAxMCk7CiAJCWlmIChlbmRwdHIgPT0gY3ApCi0JCQllcmVwb3J0 KEVSUk9SLAotCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfVEVYVF9SRVBSRVNFTlRB VElPTiksCi0JCQkJCSBlcnJtc2coImludmFsaWQgaW5wdXQgc3ludGF4IGZvciB0eXBlICVz OiBcIiVzXCIiLAotCQkJCQkJCSJudW1lcmljIiwgc3RyKSkpOworCQkJUkVUVVJOX0VSUk9S KGVyZXBvcnQoRVJST1IsCisJCQkJCQkJCSAoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfVEVY VF9SRVBSRVNFTlRBVElPTiksCisJCQkJCQkJCSAgZXJybXNnKCJpbnZhbGlkIGlucHV0IHN5 bnRheCBmb3IgdHlwZSAlczogXCIlc1wiIiwKKwkJCQkJCQkJCQkgIm51bWVyaWMiLCBzdHIp KSksCisJCQkJCQkgaGF2ZV9lcnJvcik7CiAJCWNwID0gZW5kcHRyOwogCiAJCS8qCkBAIC02 OTEyLDkgKzY5ODQsMTAgQEAgc2V0X3Zhcl9mcm9tX3N0cihjb25zdCBjaGFyICpzdHIsIGNv bnN0IGNoYXIgKmNwLCBOdW1lcmljVmFyICpkZXN0KQogCQkgKiBmb3IgY29uc2lzdGVuY3kg dXNlIHRoZSBzYW1lIGVyZXBvcnQgZXJyY29kZS90ZXh0IGFzIG1ha2VfcmVzdWx0KCkuCiAJ CSAqLwogCQlpZiAoZXhwb25lbnQgPj0gSU5UX01BWCAvIDIgfHwgZXhwb25lbnQgPD0gLShJ TlRfTUFYIC8gMikpCi0JCQllcmVwb3J0KEVSUk9SLAotCQkJCQkoZXJyY29kZShFUlJDT0RF X05VTUVSSUNfVkFMVUVfT1VUX09GX1JBTkdFKSwKLQkJCQkJIGVycm1zZygidmFsdWUgb3Zl cmZsb3dzIG51bWVyaWMgZm9ybWF0IikpKTsKKwkJCVJFVFVSTl9FUlJPUihlcmVwb3J0KEVS Uk9SLAorCQkJCQkJCQkgKGVycmNvZGUoRVJSQ09ERV9OVU1FUklDX1ZBTFVFX09VVF9PRl9S QU5HRSksCisJCQkJCQkJCSAgZXJybXNnKCJ2YWx1ZSBvdmVyZmxvd3MgbnVtZXJpYyBmb3Jt YXQiKSkpLAorCQkJCQkJIGhhdmVfZXJyb3IpOwogCQlkd2VpZ2h0ICs9IChpbnQpIGV4cG9u ZW50OwogCQlkc2NhbGUgLT0gKGludCkgZXhwb25lbnQ7CiAJCWlmIChkc2NhbGUgPCAwKQpA QCAtNzQyMCwxNyArNzQ5MywxMCBAQCBtYWtlX3Jlc3VsdF9vcHRfZXJyb3IoY29uc3QgTnVt ZXJpY1ZhciAqdmFyLCBib29sICpoYXZlX2Vycm9yKQogCWlmIChOVU1FUklDX1dFSUdIVChy ZXN1bHQpICE9IHdlaWdodCB8fAogCQlOVU1FUklDX0RTQ0FMRShyZXN1bHQpICE9IHZhci0+ ZHNjYWxlKQogCXsKLQkJaWYgKGhhdmVfZXJyb3IpCi0JCXsKLQkJCSpoYXZlX2Vycm9yID0g dHJ1ZTsKLQkJCXJldHVybiBOVUxMOwotCQl9Ci0JCWVsc2UKLQkJewotCQkJZXJlcG9ydChF UlJPUiwKLQkJCQkJKGVycmNvZGUoRVJSQ09ERV9OVU1FUklDX1ZBTFVFX09VVF9PRl9SQU5H RSksCi0JCQkJCSBlcnJtc2coInZhbHVlIG92ZXJmbG93cyBudW1lcmljIGZvcm1hdCIpKSk7 Ci0JCX0KKwkJUkVUVVJOX0VSUk9SKGVyZXBvcnQoRVJST1IsCisJCQkJCQkJIChlcnJjb2Rl KEVSUkNPREVfTlVNRVJJQ19WQUxVRV9PVVRfT0ZfUkFOR0UpLAorCQkJCQkJCSAgZXJybXNn KCJ2YWx1ZSBvdmVyZmxvd3MgbnVtZXJpYyBmb3JtYXQiKSkpLAorCQkJCQkgaGF2ZV9lcnJv cik7CiAJfQogCiAJZHVtcF9udW1lcmljKCJtYWtlX3Jlc3VsdCgpIiwgcmVzdWx0KTsKQEAg LTc0NTYsOCArNzUyMiw4IEBAIG1ha2VfcmVzdWx0KGNvbnN0IE51bWVyaWNWYXIgKnZhcikK ICAqCURvIGJvdW5kcyBjaGVja2luZyBhbmQgcm91bmRpbmcgYWNjb3JkaW5nIHRvIHRoZSBz cGVjaWZpZWQgdHlwbW9kLgogICoJTm90ZSB0aGF0IHRoaXMgaXMgb25seSBhcHBsaWVkIHRv IG5vcm1hbCBmaW5pdGUgdmFsdWVzLgogICovCi1zdGF0aWMgdm9pZAotYXBwbHlfdHlwbW9k KE51bWVyaWNWYXIgKnZhciwgaW50MzIgdHlwbW9kKQorc3RhdGljIGJvb2wKK2FwcGx5X3R5 cG1vZChOdW1lcmljVmFyICp2YXIsIGludDMyIHR5cG1vZCwgYm9vbCAqaGF2ZV9lcnJvcikK IHsKIAlpbnQJCQlwcmVjaXNpb247CiAJaW50CQkJc2NhbGU7CkBAIC03NDY3LDcgKzc1MzMs NyBAQCBhcHBseV90eXBtb2QoTnVtZXJpY1ZhciAqdmFyLCBpbnQzMiB0eXBtb2QpCiAKIAkv KiBEbyBub3RoaW5nIGlmIHdlIGhhdmUgYW4gaW52YWxpZCB0eXBtb2QgKi8KIAlpZiAoIWlz X3ZhbGlkX251bWVyaWNfdHlwbW9kKHR5cG1vZCkpCi0JCXJldHVybjsKKwkJcmV0dXJuIHRy dWU7CiAKIAlwcmVjaXNpb24gPSBudW1lcmljX3R5cG1vZF9wcmVjaXNpb24odHlwbW9kKTsK IAlzY2FsZSA9IG51bWVyaWNfdHlwbW9kX3NjYWxlKHR5cG1vZCk7CkBAIC03NTE0LDYgKzc1 ODAsMTMgQEAgYXBwbHlfdHlwbW9kKE51bWVyaWNWYXIgKnZhciwgaW50MzIgdHlwbW9kKQog I2Vycm9yIHVuc3VwcG9ydGVkIE5CQVNFCiAjZW5kaWYKIAkJCQlpZiAoZGRpZ2l0cyA+IG1h eGRpZ2l0cykKKwkJCQl7CisJCQkJCWlmIChoYXZlX2Vycm9yKQorCQkJCQl7CisJCQkJCQkq aGF2ZV9lcnJvciA9IHRydWU7CisJCQkJCQlyZXR1cm4gZmFsc2U7CisJCQkJCX0KKwogCQkJ CQllcmVwb3J0KEVSUk9SLAogCQkJCQkJCShlcnJjb2RlKEVSUkNPREVfTlVNRVJJQ19WQUxV RV9PVVRfT0ZfUkFOR0UpLAogCQkJCQkJCSBlcnJtc2coIm51bWVyaWMgZmllbGQgb3ZlcmZs b3ciKSwKQEAgLTc1MjMsMTEgKzc1OTYsMTQgQEAgYXBwbHlfdHlwbW9kKE51bWVyaWNWYXIg KnZhciwgaW50MzIgdHlwbW9kKQogCQkJCQkJCQkJICAgbWF4ZGlnaXRzID8gIjEwXiIgOiAi IiwKIAkJCQkJCQkJCSAgIG1heGRpZ2l0cyA/IG1heGRpZ2l0cyA6IDEKIAkJCQkJCQkJCSAg ICkpKTsKKwkJCQl9CiAJCQkJYnJlYWs7CiAJCQl9CiAJCQlkZGlnaXRzIC09IERFQ19ESUdJ VFM7CiAJCX0KIAl9CisKKwlyZXR1cm4gdHJ1ZTsKIH0KIAogLyoKQEAgLTc1MzcsNyArNzYx Myw3IEBAIGFwcGx5X3R5cG1vZChOdW1lcmljVmFyICp2YXIsIGludDMyIHR5cG1vZCkKICAq CUZvciBjb252ZW5pZW5jZSBvZiBtb3N0IGNhbGxlcnMsIHRoZSB2YWx1ZSBpcyBwcmVzZW50 ZWQgaW4gcGFja2VkIGZvcm0uCiAgKi8KIHN0YXRpYyB2b2lkCi1hcHBseV90eXBtb2Rfc3Bl Y2lhbChOdW1lcmljIG51bSwgaW50MzIgdHlwbW9kKQorYXBwbHlfdHlwbW9kX3NwZWNpYWwo TnVtZXJpYyBudW0sIGludDMyIHR5cG1vZCwgYm9vbCAqaGF2ZV9lcnJvcikKIHsKIAlpbnQJ CQlwcmVjaXNpb247CiAJaW50CQkJc2NhbGU7CkBAIC03NTYwLDYgKzc2MzYsMTIgQEAgYXBw bHlfdHlwbW9kX3NwZWNpYWwoTnVtZXJpYyBudW0sIGludDMyIHR5cG1vZCkKIAlwcmVjaXNp b24gPSBudW1lcmljX3R5cG1vZF9wcmVjaXNpb24odHlwbW9kKTsKIAlzY2FsZSA9IG51bWVy aWNfdHlwbW9kX3NjYWxlKHR5cG1vZCk7CiAKKwlpZiAoaGF2ZV9lcnJvcikKKwl7CisJCSpo YXZlX2Vycm9yID0gdHJ1ZTsKKwkJcmV0dXJuOworCX0KKwogCWVyZXBvcnQoRVJST1IsCiAJ CQkoZXJyY29kZShFUlJDT0RFX05VTUVSSUNfVkFMVUVfT1VUX09GX1JBTkdFKSwKIAkJCSBl cnJtc2coIm51bWVyaWMgZmllbGQgb3ZlcmZsb3ciKSwKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL3V0aWxzL2FkdC9udW11dGlscy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L251bXV0 aWxzLmMKaW5kZXggY2MzZjk1ZDM5OTAuLmI4MmIzMGY5MDEzIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC91dGlscy9hZHQvbnVtdXRpbHMuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9h ZHQvbnVtdXRpbHMuYwpAQCAtMjQ4LDcgKzI0OCw3IEBAIGludmFsaWRfc3ludGF4OgogICog cG9zaXRpdmUgbnVtYmVyLgogICovCiBpbnQ2NAotcGdfc3RydG9pbnQ2NChjb25zdCBjaGFy ICpzKQorcGdfc3RydG9pbnQ2NF9vcHRfZXJyb3IoY29uc3QgY2hhciAqcywgYm9vbCAqZXJy b3IpCiB7CiAJY29uc3QgY2hhciAqcHRyID0gczsKIAlpbnQ2NAkJdG1wID0gMDsKQEAgLTMw NywxMiArMzA3LDI0IEBAIHBnX3N0cnRvaW50NjQoY29uc3QgY2hhciAqcykKIAlyZXR1cm4g dG1wOwogCiBvdXRfb2ZfcmFuZ2U6CisJaWYgKGVycm9yKQorCXsKKwkJKmVycm9yID0gdHJ1 ZTsKKwkJcmV0dXJuIDA7CisJfQorCiAJZXJlcG9ydChFUlJPUiwKIAkJCShlcnJjb2RlKEVS UkNPREVfTlVNRVJJQ19WQUxVRV9PVVRfT0ZfUkFOR0UpLAogCQkJIGVycm1zZygidmFsdWUg XCIlc1wiIGlzIG91dCBvZiByYW5nZSBmb3IgdHlwZSAlcyIsCiAJCQkJCXMsICJiaWdpbnQi KSkpOwogCiBpbnZhbGlkX3N5bnRheDoKKwlpZiAoZXJyb3IpCisJeworCQkqZXJyb3IgPSB0 cnVlOworCQlyZXR1cm4gMDsKKwl9CisKIAllcmVwb3J0KEVSUk9SLAogCQkJKGVycmNvZGUo RVJSQ09ERV9JTlZBTElEX1RFWFRfUkVQUkVTRU5UQVRJT04pLAogCQkJIGVycm1zZygiaW52 YWxpZCBpbnB1dCBzeW50YXggZm9yIHR5cGUgJXM6IFwiJXNcIiIsCkBAIC0zMjEsNiArMzMz LDEyIEBAIGludmFsaWRfc3ludGF4OgogCXJldHVybiAwOwkJCQkJLyoga2VlcCBjb21waWxl ciBxdWlldCAqLwogfQogCitpbnQ2NAorcGdfc3RydG9pbnQ2NChjb25zdCBjaGFyICpzKQor eworCXJldHVybiBwZ19zdHJ0b2ludDY0X29wdF9lcnJvcihzLCBOVUxMKTsKK30KKwogLyoK ICAqIHBnX2l0b2E6IGNvbnZlcnRzIGEgc2lnbmVkIDE2LWJpdCBpbnRlZ2VyIHRvIGl0cyBz dHJpbmcgcmVwcmVzZW50YXRpb24KICAqIGFuZCByZXR1cm5zIHN0cmxlbihhKS4KZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC90aW1lc3RhbXAuYyBiL3NyYy9iYWNrZW5k L3V0aWxzL2FkdC90aW1lc3RhbXAuYwppbmRleCA0OWNkYjI5MGFjMi4uMDRhMGUzZWIwNjMg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC90aW1lc3RhbXAuYworKysgYi9z cmMvYmFja2VuZC91dGlscy9hZHQvdGltZXN0YW1wLmMKQEAgLTEzOSwxOCArMTM5LDEyIEBA IGFueXRpbWVzdGFtcF90eXBtb2RvdXQoYm9vbCBpc3R6LCBpbnQzMiB0eXBtb2QpCiAgKgkg VVNFUiBJL08gUk9VVElORVMJCQkJCQkJCQkJCQkJCSAqCiAgKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKiovCiAKLS8qIHRpbWVzdGFtcF9pbigpCi0gKiBDb252ZXJ0IGEgc3RyaW5nIHRvIGlu dGVybmFsIGZvcm0uCisvKiB0aW1lc3RhbXBfaW5fb3B0X2Vycm9yKCkKKyAqIENvbnZlcnQg YSBzdHJpbmcgdG8gaW50ZXJuYWwgZm9ybSwgcmV0dXJuaW5nIGVycm9yIGluc3RlYWQgb2Yg dGhyb3dpbmcgaWYgbmVlZGVkLgogICovCi1EYXR1bQotdGltZXN0YW1wX2luKFBHX0ZVTkNU SU9OX0FSR1MpCitUaW1lc3RhbXAKK3RpbWVzdGFtcF9pbl9vcHRfZXJyb3IoY2hhciAqc3Ry LCBpbnQzMiB0eXBtb2QsIGJvb2wgKmVycm9yKQogewotCWNoYXIJICAgKnN0ciA9IFBHX0dF VEFSR19DU1RSSU5HKDApOwotCi0jaWZkZWYgTk9UX1VTRUQKLQlPaWQJCQl0eXBlbGVtID0g UEdfR0VUQVJHX09JRCgxKTsKLSNlbmRpZgotCWludDMyCQl0eXBtb2QgPSBQR19HRVRBUkdf SU5UMzIoMik7CiAJVGltZXN0YW1wCXJlc3VsdDsKIAlmc2VjX3QJCWZzZWM7CiAJc3RydWN0 IHBnX3RtIHR0LApAQCAtMTY2LDE3ICsxNjAsMzQgQEAgdGltZXN0YW1wX2luKFBHX0ZVTkNU SU9OX0FSR1MpCiAJZHRlcnIgPSBQYXJzZURhdGVUaW1lKHN0ciwgd29ya2J1Ziwgc2l6ZW9m KHdvcmtidWYpLAogCQkJCQkJICBmaWVsZCwgZnR5cGUsIE1BWERBVEVGSUVMRFMsICZuZik7 CiAJaWYgKGR0ZXJyID09IDApCi0JCWR0ZXJyID0gRGVjb2RlRGF0ZVRpbWUoZmllbGQsIGZ0 eXBlLCBuZiwgJmR0eXBlLCB0bSwgJmZzZWMsICZ0eik7CisJCWR0ZXJyID0gRGVjb2RlRGF0 ZVRpbWUoZmllbGQsIGZ0eXBlLCBuZiwgJmR0eXBlLCB0bSwgJmZzZWMsICZ0eiwKKwkJCQkJ CQkgICAhZXJyb3IpOwogCWlmIChkdGVyciAhPSAwKQorCXsKKwkJaWYgKGVycm9yKQorCQl7 CisJCQkqZXJyb3IgPSB0cnVlOworCQkJcmV0dXJuIDA7CisJCX0KKwogCQlEYXRlVGltZVBh cnNlRXJyb3IoZHRlcnIsIHN0ciwgInRpbWVzdGFtcCIpOworCX0KIAogCXN3aXRjaCAoZHR5 cGUpCiAJewogCQljYXNlIERUS19EQVRFOgogCQkJaWYgKHRtMnRpbWVzdGFtcCh0bSwgZnNl YywgTlVMTCwgJnJlc3VsdCkgIT0gMCkKKwkJCXsKKwkJCQlpZiAoZXJyb3IpCisJCQkJewor CQkJCQkqZXJyb3IgPSB0cnVlOworCQkJCQlyZXR1cm4gMDsKKwkJCQl9CisKIAkJCQllcmVw b3J0KEVSUk9SLAogCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9EQVRFVElNRV9WQUxVRV9PVVRf T0ZfUkFOR0UpLAogCQkJCQkJIGVycm1zZygidGltZXN0YW1wIG91dCBvZiByYW5nZTogXCIl c1wiIiwgc3RyKSkpOworCQkJfQogCQkJYnJlYWs7CiAKIAkJY2FzZSBEVEtfRVBPQ0g6CkBA IC0xOTcsMTEgKzIwOCwyNyBAQCB0aW1lc3RhbXBfaW4oUEdfRlVOQ1RJT05fQVJHUykKIAkJ CVRJTUVTVEFNUF9OT0VORChyZXN1bHQpOwogCX0KIAotCUFkanVzdFRpbWVzdGFtcEZvclR5 cG1vZCgmcmVzdWx0LCB0eXBtb2QpOworCUFkanVzdFRpbWVzdGFtcEZvclR5cG1vZEVycm9y KCZyZXN1bHQsIHR5cG1vZCwgZXJyb3IpOwogCiAJUEdfUkVUVVJOX1RJTUVTVEFNUChyZXN1 bHQpOwogfQogCisvKiB0aW1lc3RhbXBfaW4oKQorICogQ29udmVydCBhIHN0cmluZyB0byBp bnRlcm5hbCBmb3JtLgorICovCitEYXR1bQordGltZXN0YW1wX2luKFBHX0ZVTkNUSU9OX0FS R1MpCit7CisJY2hhcgkgICAqc3RyID0gUEdfR0VUQVJHX0NTVFJJTkcoMCk7CisKKyNpZmRl ZiBOT1RfVVNFRAorCU9pZAkJCXR5cGVsZW0gPSBQR19HRVRBUkdfT0lEKDEpOworI2VuZGlm CisJaW50MzIJCXR5cG1vZCA9IFBHX0dFVEFSR19JTlQzMigyKTsKKworCVBHX1JFVFVSTl9U SU1FU1RBTVAodGltZXN0YW1wX2luX29wdF9lcnJvcihzdHIsIHR5cG1vZCwgTlVMTCkpOwor fQorCiAvKiB0aW1lc3RhbXBfb3V0KCkKICAqIENvbnZlcnQgYSB0aW1lc3RhbXAgdG8gZXh0 ZXJuYWwgZm9ybS4KICAqLwpAQCAtNDAwLDE1ICs0MjcsOSBAQCBBZGp1c3RUaW1lc3RhbXBG b3JUeXBtb2QoVGltZXN0YW1wICp0aW1lLCBpbnQzMiB0eXBtb2QpCiAvKiB0aW1lc3RhbXB0 el9pbigpCiAgKiBDb252ZXJ0IGEgc3RyaW5nIHRvIGludGVybmFsIGZvcm0uCiAgKi8KLURh dHVtCi10aW1lc3RhbXB0el9pbihQR19GVU5DVElPTl9BUkdTKQorVGltZXN0YW1wVHoKK3Rp bWVzdGFtcHR6X2luX29wdF9lcnJvcihjaGFyICpzdHIsIGludDMyIHR5cG1vZCwgYm9vbCAq ZXJyb3IpCiB7Ci0JY2hhcgkgICAqc3RyID0gUEdfR0VUQVJHX0NTVFJJTkcoMCk7Ci0KLSNp ZmRlZiBOT1RfVVNFRAotCU9pZAkJCXR5cGVsZW0gPSBQR19HRVRBUkdfT0lEKDEpOwotI2Vu ZGlmCi0JaW50MzIJCXR5cG1vZCA9IFBHX0dFVEFSR19JTlQzMigyKTsKIAlUaW1lc3RhbXBU eiByZXN1bHQ7CiAJZnNlY190CQlmc2VjOwogCXN0cnVjdCBwZ190bSB0dCwKQEAgLTQyNCwx NyArNDQ1LDM0IEBAIHRpbWVzdGFtcHR6X2luKFBHX0ZVTkNUSU9OX0FSR1MpCiAJZHRlcnIg PSBQYXJzZURhdGVUaW1lKHN0ciwgd29ya2J1Ziwgc2l6ZW9mKHdvcmtidWYpLAogCQkJCQkJ ICBmaWVsZCwgZnR5cGUsIE1BWERBVEVGSUVMRFMsICZuZik7CiAJaWYgKGR0ZXJyID09IDAp Ci0JCWR0ZXJyID0gRGVjb2RlRGF0ZVRpbWUoZmllbGQsIGZ0eXBlLCBuZiwgJmR0eXBlLCB0 bSwgJmZzZWMsICZ0eik7CisJCWR0ZXJyID0gRGVjb2RlRGF0ZVRpbWUoZmllbGQsIGZ0eXBl LCBuZiwgJmR0eXBlLCB0bSwgJmZzZWMsICZ0eiwKKwkJCQkJCQkgICAhZXJyb3IpOwogCWlm IChkdGVyciAhPSAwKQorCXsKKwkJaWYgKGVycm9yKQorCQl7CisJCQkqZXJyb3IgPSB0cnVl OworCQkJcmV0dXJuIDA7CisJCX0KKwogCQlEYXRlVGltZVBhcnNlRXJyb3IoZHRlcnIsIHN0 ciwgInRpbWVzdGFtcCB3aXRoIHRpbWUgem9uZSIpOworCX0KIAogCXN3aXRjaCAoZHR5cGUp CiAJewogCQljYXNlIERUS19EQVRFOgogCQkJaWYgKHRtMnRpbWVzdGFtcCh0bSwgZnNlYywg JnR6LCAmcmVzdWx0KSAhPSAwKQorCQkJeworCQkJCWlmIChlcnJvcikKKwkJCQl7CisJCQkJ CSplcnJvciA9IHRydWU7CisJCQkJCXJldHVybiAwOworCQkJCX0KKwogCQkJCWVyZXBvcnQo RVJST1IsCiAJCQkJCQkoZXJyY29kZShFUlJDT0RFX0RBVEVUSU1FX1ZBTFVFX09VVF9PRl9S QU5HRSksCiAJCQkJCQkgZXJybXNnKCJ0aW1lc3RhbXAgb3V0IG9mIHJhbmdlOiBcIiVzXCIi LCBzdHIpKSk7CisJCQl9CiAJCQlicmVhazsKIAogCQljYXNlIERUS19FUE9DSDoKQEAgLTQ1 NSw5ICs0OTMsMjQgQEAgdGltZXN0YW1wdHpfaW4oUEdfRlVOQ1RJT05fQVJHUykKIAkJCVRJ TUVTVEFNUF9OT0VORChyZXN1bHQpOwogCX0KIAotCUFkanVzdFRpbWVzdGFtcEZvclR5cG1v ZCgmcmVzdWx0LCB0eXBtb2QpOworCUFkanVzdFRpbWVzdGFtcEZvclR5cG1vZEVycm9yKCZy ZXN1bHQsIHR5cG1vZCwgZXJyb3IpOwogCi0JUEdfUkVUVVJOX1RJTUVTVEFNUFRaKHJlc3Vs dCk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworLyogdGltZXN0YW1wdHpfaW4oKQorICogQ29u dmVydCBhIHN0cmluZyB0byBpbnRlcm5hbCBmb3JtLgorICovCitEYXR1bQordGltZXN0YW1w dHpfaW4oUEdfRlVOQ1RJT05fQVJHUykKK3sKKwljaGFyCSAgICpzdHIgPSBQR19HRVRBUkdf Q1NUUklORygwKTsKKyNpZmRlZiBOT1RfVVNFRAorCU9pZAkJCXR5cGVsZW0gPSBQR19HRVRB UkdfT0lEKDEpOworI2VuZGlmCisJaW50MzIJCXR5cG1vZCA9IFBHX0dFVEFSR19JTlQzMigy KTsKKworCVBHX1JFVFVSTl9USU1FU1RBTVBUWih0aW1lc3RhbXB0el9pbl9vcHRfZXJyb3Io c3RyLCB0eXBtb2QsIE5VTEwpKTsKIH0KIAogLyoKQEAgLTU2MTQsOCArNTY2Nyw4IEBAIHRp bWVzdGFtcHR6X3RpbWVzdGFtcChQR19GVU5DVElPTl9BUkdTKQogCVBHX1JFVFVSTl9USU1F U1RBTVAodGltZXN0YW1wdHoydGltZXN0YW1wKHRpbWVzdGFtcCkpOwogfQogCi1zdGF0aWMg VGltZXN0YW1wCi10aW1lc3RhbXB0ejJ0aW1lc3RhbXAoVGltZXN0YW1wVHogdGltZXN0YW1w KQorVGltZXN0YW1wCit0aW1lc3RhbXB0ejJ0aW1lc3RhbXBfb3B0X2Vycm9yKFRpbWVzdGFt cFR6IHRpbWVzdGFtcCwgYm9vbCAqZXJyb3IpCiB7CiAJVGltZXN0YW1wCXJlc3VsdDsKIAlz dHJ1Y3QgcGdfdG0gdHQsCkBAIC01NjI4LDE3ICs1NjgxLDQwIEBAIHRpbWVzdGFtcHR6MnRp bWVzdGFtcChUaW1lc3RhbXBUeiB0aW1lc3RhbXApCiAJZWxzZQogCXsKIAkJaWYgKHRpbWVz dGFtcDJ0bSh0aW1lc3RhbXAsICZ0eiwgdG0sICZmc2VjLCBOVUxMLCBOVUxMKSAhPSAwKQor CQl7CisJCQlpZiAoZXJyb3IpCisJCQl7CisJCQkJKmVycm9yID0gdHJ1ZTsKKwkJCQlyZXR1 cm4gMDsKKwkJCX0KKwogCQkJZXJlcG9ydChFUlJPUiwKIAkJCQkJKGVycmNvZGUoRVJSQ09E RV9EQVRFVElNRV9WQUxVRV9PVVRfT0ZfUkFOR0UpLAogCQkJCQkgZXJybXNnKCJ0aW1lc3Rh bXAgb3V0IG9mIHJhbmdlIikpKTsKKwkJfQorCiAJCWlmICh0bTJ0aW1lc3RhbXAodG0sIGZz ZWMsIE5VTEwsICZyZXN1bHQpICE9IDApCisJCXsKKwkJCWlmIChlcnJvcikKKwkJCXsKKwkJ CQkqZXJyb3IgPSB0cnVlOworCQkJCXJldHVybiAwOworCQkJfQorCiAJCQllcmVwb3J0KEVS Uk9SLAogCQkJCQkoZXJyY29kZShFUlJDT0RFX0RBVEVUSU1FX1ZBTFVFX09VVF9PRl9SQU5H RSksCiAJCQkJCSBlcnJtc2coInRpbWVzdGFtcCBvdXQgb2YgcmFuZ2UiKSkpOworCQl9CiAJ fQogCXJldHVybiByZXN1bHQ7CiB9CiAKK3N0YXRpYyBUaW1lc3RhbXAKK3RpbWVzdGFtcHR6 MnRpbWVzdGFtcChUaW1lc3RhbXBUeiB0aW1lc3RhbXApCit7CisJcmV0dXJuIHRpbWVzdGFt cHR6MnRpbWVzdGFtcF9vcHRfZXJyb3IodGltZXN0YW1wLCBOVUxMKTsKK30KKwogLyogdGlt ZXN0YW1wdHpfem9uZSgpCiAgKiBFdmFsdWF0ZSB0aW1lc3RhbXAgd2l0aCB0aW1lIHpvbmUg dHlwZSBhdCB0aGUgc3BlY2lmaWVkIHRpbWUgem9uZS4KICAqIFJldHVybnMgYSB0aW1lc3Rh bXAgd2l0aG91dCB0aW1lIHpvbmUuCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9t aXNjL2d1Yy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWMuYwppbmRleCA5ZmJiZmIx YmU1NC4uNzg3N2JjZTYwNDMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2Mv Z3VjLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWMuYwpAQCAtMTI4NjYsNyAr MTI4NjYsNyBAQCBjaGVja19yZWNvdmVyeV90YXJnZXRfdGltZShjaGFyICoqbmV3dmFsLCB2 b2lkICoqZXh0cmEsIEd1Y1NvdXJjZSBzb3VyY2UpCiAJCQlkdGVyciA9IFBhcnNlRGF0ZVRp bWUoc3RyLCB3b3JrYnVmLCBzaXplb2Yod29ya2J1ZiksCiAJCQkJCQkJCSAgZmllbGQsIGZ0 eXBlLCBNQVhEQVRFRklFTERTLCAmbmYpOwogCQkJaWYgKGR0ZXJyID09IDApCi0JCQkJZHRl cnIgPSBEZWNvZGVEYXRlVGltZShmaWVsZCwgZnR5cGUsIG5mLCAmZHR5cGUsIHRtLCAmZnNl YywgJnR6KTsKKwkJCQlkdGVyciA9IERlY29kZURhdGVUaW1lKGZpZWxkLCBmdHlwZSwgbmYs ICZkdHlwZSwgdG0sICZmc2VjLCAmdHosIHRydWUpOwogCQkJaWYgKGR0ZXJyICE9IDApCiAJ CQkJcmV0dXJuIGZhbHNlOwogCQkJaWYgKGR0eXBlICE9IERUS19EQVRFKQpkaWZmIC0tZ2l0 IGEvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY0V4cHIuaCBiL3NyYy9pbmNsdWRlL2V4ZWN1 dG9yL2V4ZWNFeHByLmgKaW5kZXggYzhlZjkxN2ZmZTAuLmFkYWJmNTdjOTdiIDEwMDY0NAot LS0gYS9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjRXhwci5oCisrKyBiL3NyYy9pbmNsdWRl L2V4ZWN1dG9yL2V4ZWNFeHByLmgKQEAgLTc2Miw0MyArNzYyLDE0IEBAIHR5cGVkZWYgc3Ry dWN0IEpzb25FeHByU3RhdGUKIHsKIAlKc29uRXhwciAgICpqc2V4cHI7CQkJLyogb3JpZ2lu YWwgZXhwcmVzc2lvbiBub2RlICovCiAKLQlzdHJ1Y3QKLQl7Ci0JCUZtZ3JJbmZvCWZ1bmM7 CQkvKiB0eXBpbnB1dCBmdW5jdGlvbiBmb3Igb3V0cHV0IHR5cGUgKi8KLQkJT2lkCQkJdHlw aW9wYXJhbTsKLQl9CQkJaW5wdXQ7CQkJLyogSS9PIGluZm8gZm9yIG91dHB1dCB0eXBlICov Ci0KIAlOdWxsYWJsZURhdHVtCi0JCQkgICAqZm9ybWF0dGVkX2V4cHIsIC8qIGZvcm1hdHRl ZCBjb250ZXh0IGl0ZW0gdmFsdWUgKi8KLQkJCSAgICpyZXNfZXhwciwJCS8qIHJlc3VsdCBp dGVtICovCi0JCQkgICAqY29lcmNpb25fZXhwciwJLyogaW5wdXQgZm9yIEpTT04gaXRlbSBj b2VyY2lvbiAqLwotCQkJICAgKnBhdGhzcGVjOwkJLyogcGF0aCBzcGVjaWZpY2F0aW9uIHZh bHVlICovCisJCQkJZm9ybWF0dGVkX2V4cHIsCS8qIGZvcm1hdHRlZCBjb250ZXh0IGl0ZW0g dmFsdWUgKi8KKwkJCQljb2VyY2lvbl9leHByLAkvKiBpbnB1dCBmb3IgSlNPTiBpdGVtIGNv ZXJjaW9uICovCisJCQkJcGF0aHNwZWM7CQkvKiBwYXRoIHNwZWNpZmljYXRpb24gdmFsdWUg Ki8KIAotCUV4cHJTdGF0ZSAgKnJlc3VsdF9leHByOwkvKiBjb2VyY2VkIHRvIG91dHB1dCB0 eXBlICovCiAJRXhwclN0YXRlICAqZGVmYXVsdF9vbl9lbXB0eTsJLyogT04gRU1QVFkgREVG QVVMVCBleHByZXNzaW9uICovCiAJRXhwclN0YXRlICAqZGVmYXVsdF9vbl9lcnJvcjsJLyog T04gRVJST1IgREVGQVVMVCBleHByZXNzaW9uICovCiAJTGlzdAkgICAqYXJnczsJCQkvKiBw YXNzaW5nIGFyZ3VtZW50cyAqLwotCi0Jdm9pZAkgICAqY2FjaGU7CQkJLyogY2FjaGUgZm9y IGpzb25fcG9wdWxhdGVfdHlwZSgpICovCi0KLQlzdHJ1Y3QgSnNvbkNvZXJjaW9uc1N0YXRl Ci0JewotCQlzdHJ1Y3QgSnNvbkNvZXJjaW9uU3RhdGUKLQkJewotCQkJSnNvbkNvZXJjaW9u ICpjb2VyY2lvbjsgLyogY29lcmNpb24gZXhwcmVzc2lvbiAqLwotCQkJRXhwclN0YXRlICAq ZXN0YXRlOyAvKiBjb2VyY2lvbiBleHByZXNzaW9uIHN0YXRlICovCi0JCX0JCQludWxsLAot CQkJCQlzdHJpbmcsCi0JCW51bWVyaWMgICAgLAotCQkJCQlib29sZWFuLAotCQkJCQlkYXRl LAotCQkJCQl0aW1lLAotCQkJCQl0aW1ldHosCi0JCQkJCXRpbWVzdGFtcCwKLQkJCQkJdGlt ZXN0YW1wdHosCi0JCQkJCWNvbXBvc2l0ZTsKLQl9CQkJY29lcmNpb25zOwkJLyogc3RhdGVz IGZvciBjb2VyY2lvbiBmcm9tIFNRTC9KU09OIGl0ZW0KLQkJCQkJCQkJICogdHlwZXMgZGly ZWN0bHkgdG8gdGhlIG91dHB1dCB0eXBlICovCiB9IEpzb25FeHByU3RhdGU7CiAKIC8qIGZ1 bmN0aW9ucyBpbiBleGVjRXhwci5jICovCkBAIC04NjAsMTggKzgzMSw4IEBAIGV4dGVybiB2 b2lkIEV4ZWNFdmFsU3lzVmFyKEV4cHJTdGF0ZSAqc3RhdGUsIEV4cHJFdmFsU3RlcCAqb3As CiAJCQkJCQkgICBFeHByQ29udGV4dCAqZWNvbnRleHQsIFR1cGxlVGFibGVTbG90ICpzbG90 KTsKIGV4dGVybiB2b2lkIEV4ZWNFdmFsSnNvbkNvbnN0cnVjdG9yKEV4cHJTdGF0ZSAqc3Rh dGUsIEV4cHJFdmFsU3RlcCAqb3AsCiAJCQkJCQkJCQlFeHByQ29udGV4dCAqZWNvbnRleHQp OwotZXh0ZXJuIHZvaWQgRXhlY0V2YWxKc29uKEV4cHJTdGF0ZSAqc3RhdGUsIEV4cHJFdmFs U3RlcCAqb3AsCi0JCQkJCQkgRXhwckNvbnRleHQgKmVjb250ZXh0KTsKLWV4dGVybiBEYXR1 bSBFeGVjUHJlcGFyZUpzb25JdGVtQ29lcmNpb24oc3RydWN0IEpzb25iVmFsdWUgKml0ZW0s Ci0JCQkJCQkJCQkJIEpzb25SZXR1cm5pbmcgKnJldHVybmluZywKLQkJCQkJCQkJCQkgc3Ry dWN0IEpzb25Db2VyY2lvbnNTdGF0ZSAqY29lcmNpb25zLAotCQkJCQkJCQkJCSBzdHJ1Y3Qg SnNvbkNvZXJjaW9uU3RhdGUgKipwamNzdGF0ZSk7Ci1leHRlcm4gYm9vbCBFeGVjRXZhbEpz b25OZWVkc1N1YlRyYW5zYWN0aW9uKEpzb25FeHByICpqc2V4cHIsCi0JCQkJCQkJCQkJCXN0 cnVjdCBKc29uQ29lcmNpb25zU3RhdGUgKik7Ci1leHRlcm4gRGF0dW0gRXhlY0V2YWxFeHBy UGFzc2luZ0Nhc2VWYWx1ZShFeHByU3RhdGUgKmVzdGF0ZSwKLQkJCQkJCQkJCQkgIEV4cHJD b250ZXh0ICplY29udGV4dCwgYm9vbCAqaXNudWxsLAotCQkJCQkJCQkJCSAgRGF0dW0gY2Fz ZXZhbF9kYXR1bSwKLQkJCQkJCQkJCQkgIGJvb2wgY2FzZXZhbF9pc251bGwpOworZXh0ZXJu IHZvaWQgRXhlY0V2YWxKc29uRXhwcihFeHByU3RhdGUgKnN0YXRlLCBFeHByRXZhbFN0ZXAg Km9wLAorCQkJCQkJCSBFeHByQ29udGV4dCAqZWNvbnRleHQpOwogCiBleHRlcm4gdm9pZCBF eGVjQWdnSW5pdEdyb3VwKEFnZ1N0YXRlICphZ2dzdGF0ZSwgQWdnU3RhdGVQZXJUcmFucyBw ZXJ0cmFucywgQWdnU3RhdGVQZXJHcm91cCBwZXJncm91cCwKIAkJCQkJCQkgRXhwckNvbnRl eHQgKmFnZ2NvbnRleHQpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvcHJpbW5v ZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9wcmltbm9kZXMuaAppbmRleCAzYWE5NmJiNjg1 NS4uMTRmYmIzMmNlOWMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL3ByaW1ub2Rl cy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL3ByaW1ub2Rlcy5oCkBAIC0xNTUxLDM5ICsx NTUxLDYgQEAgdHlwZWRlZiBzdHJ1Y3QgSnNvbkJlaGF2aW9yCiAJTm9kZQkgICAqZGVmYXVs dF9leHByOwkvKiBkZWZhdWx0IGV4cHJlc3Npb24sIGlmIGFueSAqLwogfSBKc29uQmVoYXZp b3I7CiAKLS8qCi0gKiBKc29uQ29lcmNpb24gLQotICoJCWNvZXJjaW9uIGZyb20gU1FML0pT T04gaXRlbSB0eXBlcyB0byBTUUwgdHlwZXMKLSAqLwotdHlwZWRlZiBzdHJ1Y3QgSnNvbkNv ZXJjaW9uCi17Ci0JTm9kZVRhZwkJdHlwZTsKLQlOb2RlCSAgICpleHByOwkJCS8qIHJlc3Vs dGluZyBleHByZXNzaW9uIGNvZXJjZWQgdG8gdGFyZ2V0IHR5cGUgKi8KLQlib29sCQl2aWFf cG9wdWxhdGU7CS8qIGNvZXJjZSByZXN1bHQgdXNpbmcganNvbl9wb3B1bGF0ZV90eXBlKCk/ ICovCi0JYm9vbAkJdmlhX2lvOwkJCS8qIGNvZXJjZSByZXN1bHQgdXNpbmcgdHlwZSBpbnB1 dCBmdW5jdGlvbj8gKi8KLQlPaWQJCQljb2xsYXRpb247CQkvKiBjb2xsYXRpb24gZm9yIGNv ZXJjaW9uIHZpYSBJL08gb3IgcG9wdWxhdGUgKi8KLX0gSnNvbkNvZXJjaW9uOwotCi0vKgot ICogSnNvbkl0ZW1Db2VyY2lvbnMgLQotICoJCWV4cHJlc3Npb25zIGZvciBjb2VyY2lvbiBm cm9tIFNRTC9KU09OIGl0ZW0gdHlwZXMgZGlyZWN0bHkgdG8gdGhlCi0gKgkJb3V0cHV0IFNR TCB0eXBlCi0gKi8KLXR5cGVkZWYgc3RydWN0IEpzb25JdGVtQ29lcmNpb25zCi17Ci0JTm9k ZVRhZwkJdHlwZTsKLQlKc29uQ29lcmNpb24gKm51bGw7Ci0JSnNvbkNvZXJjaW9uICpzdHJp bmc7Ci0JSnNvbkNvZXJjaW9uICpudW1lcmljOwotCUpzb25Db2VyY2lvbiAqYm9vbGVhbjsK LQlKc29uQ29lcmNpb24gKmRhdGU7Ci0JSnNvbkNvZXJjaW9uICp0aW1lOwotCUpzb25Db2Vy Y2lvbiAqdGltZXR6OwotCUpzb25Db2VyY2lvbiAqdGltZXN0YW1wOwotCUpzb25Db2VyY2lv biAqdGltZXN0YW1wdHo7Ci0JSnNvbkNvZXJjaW9uICpjb21wb3NpdGU7CS8qIGFycmF5cyBh bmQgb2JqZWN0cyAqLwotfSBKc29uSXRlbUNvZXJjaW9uczsKLQogLyoKICAqIEpzb25FeHBy IC0KICAqCQl0cmFuc2Zvcm1lZCByZXByZXNlbnRhdGlvbiBvZiBKU09OX1ZBTFVFKCksIEpT T05fUVVFUlkoKSwgSlNPTl9FWElTVFMoKQpAQCAtMTU5Myw3ICsxNTYwLDYgQEAgdHlwZWRl ZiBzdHJ1Y3QgSnNvbkV4cHIKIAlFeHByCQl4cHI7CiAJSnNvbkV4cHJPcAlvcDsJCQkJLyog anNvbiBmdW5jdGlvbiBJRCAqLwogCU5vZGUJICAgKmZvcm1hdHRlZF9leHByOyAvKiBmb3Jt YXR0ZWQgY29udGV4dCBpdGVtIGV4cHJlc3Npb24gKi8KLQlKc29uQ29lcmNpb24gKnJlc3Vs dF9jb2VyY2lvbjsJLyogcmVzdWx0aW5nIGNvZXJjaW9uIHRvIFJFVFVSTklORyB0eXBlICov CiAJSnNvbkZvcm1hdCAqZm9ybWF0OwkJCS8qIGNvbnRleHQgaXRlbSBmb3JtYXQgKEpTT04v SlNPTkIpICovCiAJTm9kZQkgICAqcGF0aF9zcGVjOwkJLyogSlNPTiBwYXRoIHNwZWNpZmlj YXRpb24gZXhwcmVzc2lvbiAqLwogCUxpc3QJICAgKnBhc3NpbmdfbmFtZXM7CS8qIFBBU1NJ TkcgYXJndW1lbnQgbmFtZXMgKi8KQEAgLTE2MDEsOCArMTU2Nyw4IEBAIHR5cGVkZWYgc3Ry dWN0IEpzb25FeHByCiAJSnNvblJldHVybmluZyAqcmV0dXJuaW5nOwkvKiBSRVRVUk5JTkcg Y2xhdXNlIHR5cGUvZm9ybWF0IGluZm8gKi8KIAlKc29uQmVoYXZpb3IgKm9uX2VtcHR5OwkJ LyogT04gRU1QVFkgYmVoYXZpb3IgKi8KIAlKc29uQmVoYXZpb3IgKm9uX2Vycm9yOwkJLyog T04gRVJST1IgYmVoYXZpb3IgKi8KLQlKc29uSXRlbUNvZXJjaW9ucyAqY29lcmNpb25zOwkv KiBjb2VyY2lvbnMgZm9yIEpTT05fVkFMVUUgKi8KIAlKc29uV3JhcHBlciB3cmFwcGVyOwkJ LyogV1JBUFBFUiBmb3IgSlNPTl9RVUVSWSAqLworCU9pZAkJCWNvbGxhdGlvbjsJCS8qIE9J RCBvZiBjb2xsYXRpb24sIG9yIEludmFsaWRPaWQgaWYgbm9uZSAqLwogCWJvb2wJCW9taXRf cXVvdGVzOwkvKiBLRUVQL09NSVQgUVVPVEVTIGZvciBKU09OX1FVRVJZICovCiAJaW50CQkJ bG9jYXRpb247CQkvKiB0b2tlbiBsb2NhdGlvbiwgb3IgLTEgaWYgdW5rbm93biAqLwogfSBK c29uRXhwcjsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL29wdGltaXplci9jbGF1c2VzLmgg Yi9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvY2xhdXNlcy5oCmluZGV4IDZjNTIwM2RjNDQ4Li40 ZDYxYjg4YzE2MSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvb3B0aW1pemVyL2NsYXVzZXMu aAorKysgYi9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvY2xhdXNlcy5oCkBAIC01NSw0ICs1NSw2 IEBAIGV4dGVybiBRdWVyeSAqaW5saW5lX3NldF9yZXR1cm5pbmdfZnVuY3Rpb24oUGxhbm5l ckluZm8gKnJvb3QsCiAKIGV4dGVybiBCaXRtYXBzZXQgKnB1bGxfcGFyYW1pZHMoRXhwciAq ZXhwcik7CiAKK2V4dGVybiBib29sIGV4cHJfY2FuX3Rocm93X2Vycm9ycyhOb2RlICpleHBy KTsKKwogI2VuZGlmCQkJCQkJCS8qIENMQVVTRVNfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2lu Y2x1ZGUvdXRpbHMvYnVpbHRpbnMuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL2J1aWx0aW5zLmgK aW5kZXggMjIxYzNlNmMzZGUuLjVlMWFhMzdjMWY1IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVk ZS91dGlscy9idWlsdGlucy5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL2J1aWx0aW5zLmgK QEAgLTI0LDYgKzI0LDcgQEAKIC8qIGJvb2wuYyAqLwogZXh0ZXJuIGJvb2wgcGFyc2VfYm9v bChjb25zdCBjaGFyICp2YWx1ZSwgYm9vbCAqcmVzdWx0KTsKIGV4dGVybiBib29sIHBhcnNl X2Jvb2xfd2l0aF9sZW4oY29uc3QgY2hhciAqdmFsdWUsIHNpemVfdCBsZW4sIGJvb2wgKnJl c3VsdCk7CitleHRlcm4gYm9vbCBib29saW5fb3B0X2Vycm9yKGNvbnN0IGNoYXIgKnZhbHVl LCBzaXplX3QJbGVuLCBib29sICplcnJvcik7CiAKIC8qIGRvbWFpbnMuYyAqLwogZXh0ZXJu IHZvaWQgZG9tYWluX2NoZWNrKERhdHVtIHZhbHVlLCBib29sIGlzbnVsbCwgT2lkIGRvbWFp blR5cGUsCkBAIC00Niw2ICs0Nyw3IEBAIGV4dGVybiBpbnQJbmFtZXN0cmNtcChOYW1lIG5h bWUsIGNvbnN0IGNoYXIgKnN0cik7CiBleHRlcm4gaW50MTYgcGdfc3RydG9pbnQxNihjb25z dCBjaGFyICpzKTsKIGV4dGVybiBpbnQzMiBwZ19zdHJ0b2ludDMyKGNvbnN0IGNoYXIgKnMp OwogZXh0ZXJuIGludDY0IHBnX3N0cnRvaW50NjQoY29uc3QgY2hhciAqcyk7CitleHRlcm4g aW50NjQgcGdfc3RydG9pbnQ2NF9vcHRfZXJyb3IoY29uc3QgY2hhciAqcywgYm9vbCAqZXJy b3IpOwogZXh0ZXJuIGludAlwZ19pdG9hKGludDE2IGksIGNoYXIgKmEpOwogZXh0ZXJuIGlu dAlwZ191bHRvYV9uKHVpbnQzMiBsLCBjaGFyICphKTsKIGV4dGVybiBpbnQJcGdfdWxsdG9h X24odWludDY0IGwsIGNoYXIgKmEpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMv ZGF0ZS5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvZGF0ZS5oCmluZGV4IDkxYWUyNDI1NGRmLi5m MjkxNjhhMDI1YiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMvZGF0ZS5oCisrKyBi L3NyYy9pbmNsdWRlL3V0aWxzL2RhdGUuaApAQCAtODcsNCArODcsMTcgQEAgZXh0ZXJuIGJv b2wgdGltZV9vdmVyZmxvd3MoaW50IGhvdXIsIGludCBtaW4sIGludCBzZWMsIGZzZWNfdCBm c2VjKTsKIGV4dGVybiBib29sIGZsb2F0X3RpbWVfb3ZlcmZsb3dzKGludCBob3VyLCBpbnQg bWluLCBkb3VibGUgc2VjKTsKIGV4dGVybiB2b2lkIEFkanVzdFRpbWVGb3JUeXBtb2QoVGlt ZUFEVCAqdGltZSwgaW50MzIgdHlwbW9kKTsKIAorZXh0ZXJuIERhdGVBRFQgdGltZXN0YW1w X2RhdGVfb3B0X2Vycm9yKFRpbWVzdGFtcCB0aW1lc3RhbXAsIGJvb2wgKmVycm9yKTsKK2V4 dGVybiBUaW1lQURUIHRpbWVzdGFtcF90aW1lX29wdF9lcnJvcihUaW1lc3RhbXAgdGltZXN0 YW1wLAorCQkJCQkJCQkJCWJvb2wgKmlzbnVsbCwgYm9vbCAqZXJyb3IpOworCitleHRlcm4g RGF0ZUFEVCB0aW1lc3RhbXB0el9kYXRlX29wdF9lcnJvcihUaW1lc3RhbXAgdGltZXN0YW1w LCBib29sICplcnJvcik7CitleHRlcm4gVGltZUFEVCB0aW1lc3RhbXB0el90aW1lX29wdF9l cnJvcihUaW1lc3RhbXBUeiB0aW1lc3RhbXAsCisJCQkJCQkJCQkJICBib29sICppc251bGws IGJvb2wgKmVycm9yKTsKK2V4dGVybiBUaW1lVHpBRFQgKnRpbWVzdGFtcHR6X3RpbWV0el9v cHRfZXJyb3IoVGltZXN0YW1wVHogdGltZXN0YW1wLAorCQkJCQkJCQkJCQkgICBib29sICpl cnJvcik7CitleHRlcm4gRGF0ZUFEVCBkYXRlX2luX29wdF9lcnJvcihjaGFyICpzdHIsIGJv b2wgKmVycm9yKTsKK2V4dGVybiBUaW1lQURUIHRpbWVfaW5fb3B0X2Vycm9yKGNoYXIgKnN0 ciwgaW50MzIgdHlwbW9kLCBib29sICplcnJvcik7CitleHRlcm4gVGltZVR6QURUICp0aW1l dHpfaW5fb3B0X2Vycm9yKGNoYXIgKnN0ciwgaW50MzIgdHlwbW9kLCBib29sICplcnJvcik7 CisKICNlbmRpZgkJCQkJCQkvKiBEQVRFX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L3V0aWxzL2RhdGV0aW1lLmggYi9zcmMvaW5jbHVkZS91dGlscy9kYXRldGltZS5oCmluZGV4 IDQ1MjdlODI1MTc3Li42ODI0MWQ3YzRjYyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRp bHMvZGF0ZXRpbWUuaAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9kYXRldGltZS5oCkBAIC0y OTUsMTEgKzI5NSwxMyBAQCBleHRlcm4gaW50CVBhcnNlRGF0ZVRpbWUoY29uc3QgY2hhciAq dGltZXN0ciwgY2hhciAqd29ya2J1Ziwgc2l6ZV90IGJ1ZmxlbiwKIAkJCQkJCSAgaW50IG1h eGZpZWxkcywgaW50ICpudW1maWVsZHMpOwogZXh0ZXJuIGludAlEZWNvZGVEYXRlVGltZShj aGFyICoqZmllbGQsIGludCAqZnR5cGUsCiAJCQkJCQkgICBpbnQgbmYsIGludCAqZHR5cGUs Ci0JCQkJCQkgICBzdHJ1Y3QgcGdfdG0gKnRtLCBmc2VjX3QgKmZzZWMsIGludCAqdHpwKTsK KwkJCQkJCSAgIHN0cnVjdCBwZ190bSAqdG0sIGZzZWNfdCAqZnNlYywgaW50ICp0enAsCisJ CQkJCQkgICBib29sIHRocm93X2Vycm9ycyk7CiBleHRlcm4gaW50CURlY29kZVRpbWV6b25l KGNoYXIgKnN0ciwgaW50ICp0enApOwogZXh0ZXJuIGludAlEZWNvZGVUaW1lT25seShjaGFy ICoqZmllbGQsIGludCAqZnR5cGUsCiAJCQkJCQkgICBpbnQgbmYsIGludCAqZHR5cGUsCi0J CQkJCQkgICBzdHJ1Y3QgcGdfdG0gKnRtLCBmc2VjX3QgKmZzZWMsIGludCAqdHpwKTsKKwkJ CQkJCSAgIHN0cnVjdCBwZ190bSAqdG0sIGZzZWNfdCAqZnNlYywgaW50ICp0enAsCisJCQkJ CQkgICBib29sIHRocm93X2Vycm9ycyk7CiBleHRlcm4gaW50CURlY29kZUludGVydmFsKGNo YXIgKipmaWVsZCwgaW50ICpmdHlwZSwgaW50IG5mLCBpbnQgcmFuZ2UsCiAJCQkJCQkgICBp bnQgKmR0eXBlLCBzdHJ1Y3QgcGdfaXRtX2luICppdG1faW4pOwogZXh0ZXJuIGludAlEZWNv ZGVJU084NjAxSW50ZXJ2YWwoY2hhciAqc3RyLApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUv dXRpbHMvZmxvYXQuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL2Zsb2F0LmgKaW5kZXggNGJmMGUz YWMwN2EuLjBhZDRkOWYzOTczIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9mbG9h dC5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL2Zsb2F0LmgKQEAgLTQ2LDYgKzQ2LDcgQEAg ZXh0ZXJuIGZsb2F0OCBmbG9hdDhpbl9pbnRlcm5hbChjaGFyICpudW0sIGNoYXIgKiplbmRw dHJfcCwKIGV4dGVybiBmbG9hdDggZmxvYXQ4aW5faW50ZXJuYWxfb3B0X2Vycm9yKGNoYXIg Km51bSwgY2hhciAqKmVuZHB0cl9wLAogCQkJCQkJCQkJCSAgY29uc3QgY2hhciAqdHlwZV9u YW1lLCBjb25zdCBjaGFyICpvcmlnX3N0cmluZywKIAkJCQkJCQkJCQkgIGJvb2wgKmhhdmVf ZXJyb3IpOworZXh0ZXJuIGZsb2F0IGZsb2F0NGluX29wdF9lcnJvcihjaGFyICpudW0sIGJv b2wgKmhhdmVfZXJyb3IpOwogZXh0ZXJuIGNoYXIgKmZsb2F0OG91dF9pbnRlcm5hbChmbG9h dDggbnVtKTsKIGV4dGVybiBpbnQJZmxvYXQ0X2NtcF9pbnRlcm5hbChmbG9hdDQgYSwgZmxv YXQ0IGIpOwogZXh0ZXJuIGludAlmbG9hdDhfY21wX2ludGVybmFsKGZsb2F0OCBhLCBmbG9h dDggYik7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9qc29uYi5oIGIvc3JjL2lu Y2x1ZGUvdXRpbHMvanNvbmIuaAppbmRleCBiYWU0NjZiNTIzNC4uZDU1NzRmYWE3OWUgMTAw NjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxzL2pzb25iLmgKKysrIGIvc3JjL2luY2x1ZGUv dXRpbHMvanNvbmIuaApAQCAtNDIwLDYgKzQyMCw4IEBAIGV4dGVybiB2b2lkIEpzb25iSGFz aFNjYWxhclZhbHVlRXh0ZW5kZWQoY29uc3QgSnNvbmJWYWx1ZSAqc2NhbGFyVmFsLAogCiAv KiBqc29uYi5jIHN1cHBvcnQgZnVuY3Rpb25zICovCiBleHRlcm4gRGF0dW0ganNvbmJfZnJv bV90ZXh0KHRleHQgKmpzLCBib29sIHVuaXF1ZV9rZXlzKTsKK2V4dGVybiBEYXR1bSBqc29u Yl9mcm9tX2NzdHJpbmcoY2hhciAqanNvbiwgaW50IGxlbiwgYm9vbCB1bmlxdWVfa2V5cywK KwkJCQkJCQkJYm9vbCAqZXJyb3IpOwogZXh0ZXJuIGNoYXIgKkpzb25iVG9DU3RyaW5nKFN0 cmluZ0luZm8gb3V0LCBKc29uYkNvbnRhaW5lciAqaW4sCiAJCQkJCQkJaW50IGVzdGltYXRl ZF9sZW4pOwogZXh0ZXJuIGNoYXIgKkpzb25iVG9DU3RyaW5nSW5kZW50KFN0cmluZ0luZm8g b3V0LCBKc29uYkNvbnRhaW5lciAqaW4sCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGls cy9qc29ucGF0aC5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvanNvbnBhdGguaAppbmRleCA4ZTc5 YjhkYzlmMC4uZTkxMzRiN2VhYjQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxzL2pz b25wYXRoLmgKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMvanNvbnBhdGguaApAQCAtMTc3LDcg KzE3Nyw4IEBAIGV4dGVybiBib29sIGpzcEdldEJvb2woSnNvblBhdGhJdGVtICp2KTsKIGV4 dGVybiBjaGFyICpqc3BHZXRTdHJpbmcoSnNvblBhdGhJdGVtICp2LCBpbnQzMiAqbGVuKTsK IGV4dGVybiBib29sIGpzcEdldEFycmF5U3Vic2NyaXB0KEpzb25QYXRoSXRlbSAqdiwgSnNv blBhdGhJdGVtICpmcm9tLAogCQkJCQkJCQkgSnNvblBhdGhJdGVtICp0bywgaW50IGkpOwot ZXh0ZXJuIGJvb2wganNwSXNNdXRhYmxlKEpzb25QYXRoICpwYXRoLCBMaXN0ICp2YXJuYW1l cywgTGlzdCAqdmFyZXhwcnMpOworZXh0ZXJuIGJvb2wganNwSXNNdXRhYmxlKEpzb25QYXRo ICpwYXRoLCBMaXN0ICp2YXJuYW1lcywgTGlzdCAqdmFyZXhwcnMsCisJCQkJCQkgYm9vbCAq cmV0dXJuc19kYXRldGltZSk7CiAKIGV4dGVybiBjb25zdCBjaGFyICpqc3BPcGVyYXRpb25O YW1lKEpzb25QYXRoSXRlbVR5cGUgdHlwZSk7CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L3V0aWxzL251bWVyaWMuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL251bWVyaWMuaAppbmRleCAz Y2FhNzRkZmU3YS4uZjMyODA3Y2ZkYWEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxz L251bWVyaWMuaAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9udW1lcmljLmgKQEAgLTg1LDYg Kzg1LDEwIEBAIGV4dGVybiBOdW1lcmljIG51bWVyaWNfZGl2X29wdF9lcnJvcihOdW1lcmlj IG51bTEsIE51bWVyaWMgbnVtMiwKIAkJCQkJCQkJCSBib29sICpoYXZlX2Vycm9yKTsKIGV4 dGVybiBOdW1lcmljIG51bWVyaWNfbW9kX29wdF9lcnJvcihOdW1lcmljIG51bTEsIE51bWVy aWMgbnVtMiwKIAkJCQkJCQkJCSBib29sICpoYXZlX2Vycm9yKTsKLWV4dGVybiBpbnQzMiBu dW1lcmljX2ludDRfb3B0X2Vycm9yKE51bWVyaWMgbnVtLCBib29sICplcnJvcik7CitleHRl cm4gaW50MTYgbnVtZXJpY19pbnQyX29wdF9lcnJvcihOdW1lcmljIG51bSwgYm9vbCAqaGF2 ZV9lcnJvcik7CitleHRlcm4gaW50MzIgbnVtZXJpY19pbnQ0X29wdF9lcnJvcihOdW1lcmlj IG51bSwgYm9vbCAqaGF2ZV9lcnJvcik7CitleHRlcm4gaW50NjQgbnVtZXJpY19pbnQ4X29w dF9lcnJvcihOdW1lcmljIG51bSwgYm9vbCAqaGF2ZV9lcnJvcik7CitleHRlcm4gTnVtZXJp YyBudW1lcmljX2luX29wdF9lcnJvcihjaGFyICpzdHIsIGludDMyIHR5cG1vZCwKKwkJCQkJ CQkJCWJvb2wgKmhhdmVfZXJyb3IpOwogCiAjZW5kaWYJCQkJCQkJLyogX1BHX05VTUVSSUNf SF8gKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3V0aWxzL3RpbWVzdGFtcC5oIGIvc3Jj L2luY2x1ZGUvdXRpbHMvdGltZXN0YW1wLmgKaW5kZXggZWRmM2E5NzMxODYuLjI2ODVkMTQz NDJkIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy90aW1lc3RhbXAuaAorKysgYi9z cmMvaW5jbHVkZS91dGlscy90aW1lc3RhbXAuaApAQCAtMTAyLDggKzEwMiwxNCBAQCBleHRl cm4gaW50CXRpbWVzdGFtcF9jbXBfaW50ZXJuYWwoVGltZXN0YW1wIGR0MSwgVGltZXN0YW1w IGR0Mik7CiAKIGV4dGVybiBUaW1lc3RhbXBUeiB0aW1lc3RhbXAydGltZXN0YW1wdHpfb3B0 X292ZXJmbG93KFRpbWVzdGFtcCB0aW1lc3RhbXAsCiAJCQkJCQkJCQkJCQkJICBpbnQgKm92 ZXJmbG93KTsKK2V4dGVybiBUaW1lc3RhbXAgdGltZXN0YW1wdHoydGltZXN0YW1wX29wdF9l cnJvcihUaW1lc3RhbXBUeiB0aW1lc3RhbXAsCisJCQkJCQkJCQkJCQkgYm9vbCAqZXJyb3Ip OwogZXh0ZXJuIGludDMyIHRpbWVzdGFtcF9jbXBfdGltZXN0YW1wdHpfaW50ZXJuYWwoVGlt ZXN0YW1wIHRpbWVzdGFtcFZhbCwKIAkJCQkJCQkJCQkJCVRpbWVzdGFtcFR6IGR0Mik7Citl eHRlcm4gVGltZXN0YW1wIHRpbWVzdGFtcF9pbl9vcHRfZXJyb3IoY2hhciAqc3RyLCBpbnQz MiB0eXBtb2QsCisJCQkJCQkJCQkJYm9vbCAqZXJyb3IpOworZXh0ZXJuIFRpbWVzdGFtcFR6 IHRpbWVzdGFtcHR6X2luX29wdF9lcnJvcihjaGFyICpzdHIsIGludDMyIHR5cG1vZCwKKwkJ CQkJCQkJCQkJYm9vbCAqZXJyb3IpOwogCiBleHRlcm4gaW50CWlzb3dlZWsyaihpbnQgeWVh ciwgaW50IHdlZWspOwogZXh0ZXJuIHZvaWQgaXNvd2VlazJkYXRlKGludCB3b3ksIGludCAq eWVhciwgaW50ICptb24sIGludCAqbWRheSk7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdy ZXNzL2V4cGVjdGVkL2pzb25iX3NxbGpzb24ub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBl Y3RlZC9qc29uYl9zcWxqc29uLm91dAppbmRleCBlZjQ5NjExMGFmMy4uMjk4MmMxOTFhODAg MTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvanNvbmJfc3FsanNvbi5v dXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9qc29uYl9zcWxqc29uLm91dApA QCAtMTg0LDExICsxODQsMTEgQEAgU0VMRUNUIEpTT05fRVhJU1RTKGpzb25iICcxJywgJ3N0 cmljdCAkWzFdJyBSRVRVUk5JTkcgdGV4dCBGQUxTRSBPTiBFUlJPUik7CiAoMSByb3cpCiAK IFNFTEVDVCBKU09OX0VYSVNUUyhqc29uYiAnMScsICckWzBdJyBSRVRVUk5JTkcganNvbmIp OwotRVJST1I6ICBjYW5ub3QgY2FzdCB0eXBlIGJvb2xlYW4gdG8ganNvbmIKK0VSUk9SOiAg cmV0dXJuaW5nIHR5cGUganNvbmIgaXMgbm90IHN1cHBvcnRlZCBpbiBKU09OX0VYSVNUUygp CiBMSU5FIDE6IFNFTEVDVCBKU09OX0VYSVNUUyhqc29uYiAnMScsICckWzBdJyBSRVRVUk5J TkcganNvbmIpOwogICAgICAgICAgICAgICAgXgogU0VMRUNUIEpTT05fRVhJU1RTKGpzb25i ICcxJywgJyRbMF0nIFJFVFVSTklORyBmbG9hdDQpOwotRVJST1I6ICBjYW5ub3QgY2FzdCB0 eXBlIGJvb2xlYW4gdG8gcmVhbAorRVJST1I6ICByZXR1cm5pbmcgdHlwZSByZWFsIGlzIG5v dCBzdXBwb3J0ZWQgaW4gSlNPTl9FWElTVFMoKQogTElORSAxOiBTRUxFQ1QgSlNPTl9FWElT VFMoanNvbmIgJzEnLCAnJFswXScgUkVUVVJOSU5HIGZsb2F0NCk7CiAgICAgICAgICAgICAg ICBeCiAtLSBKU09OX1ZBTFVFCkBAIC0yNDIsNyArMjQyLDkgQEAgU0VMRUNUIEpTT05fVkFM VUUoanNvbmIgJzEyMycsICckJyBSRVRVUk5JTkcgdGV4dCk7CiAKIC8qIGpzb25iIGJ5dGVh ID8/PyAqLwogU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJzEyMycsICckJyBSRVRVUk5JTkcg Ynl0ZWEgRVJST1IgT04gRVJST1IpOwotRVJST1I6ICBTUUwvSlNPTiBpdGVtIGNhbm5vdCBi ZSBjYXN0IHRvIHRhcmdldCB0eXBlCitFUlJPUjogIHJldHVybmluZyB0eXBlIGJ5dGVhIGlz IG5vdCBzdXBwb3J0ZWQgaW4gSlNPTl9WQUxVRSgpCitMSU5FIDI6IFNFTEVDVCBKU09OX1ZB TFVFKGpzb25iICcxMjMnLCAnJCcgUkVUVVJOSU5HIGJ5dGVhIEVSUk9SIE9OIC4uLgorICAg ICAgICAgICAgICAgXgogU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJzEuMjMnLCAnJCcpOwog IGpzb25fdmFsdWUgCiAtLS0tLS0tLS0tLS0KQEAgLTM0OSwxNCArMzUxLDEyOSBAQCBTRUxF Q1QgSlNPTl9WQUxVRShqc29uYiAnIjIwMTctMDItMjAiJywgJyQnIFJFVFVSTklORyBkYXRl KSArIDk7CiAgMDMtMDEtMjAxNwogKDEgcm93KQogCi0tLSBUZXN0IE5VTEwgY2hlY2tzIGV4 ZWN1dGlvbiBpbiBkb21haW4gdHlwZXMKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICAnMS4y MycsICAnJCcgUkVUVVJOSU5HIGZsb2F0NCk7CisganNvbl92YWx1ZSAKKy0tLS0tLS0tLS0t LQorICAgICAgIDEuMjMKKygxIHJvdykKKworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJyIx LjIzIicsICckJyBSRVRVUk5JTkcgZmxvYXQ0KTsKKyBqc29uX3ZhbHVlIAorLS0tLS0tLS0t LS0tCisgICAgICAgMS4yMworKDEgcm93KQorCitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAg JyJuYW4iJywgJyQnIFJFVFVSTklORyBmbG9hdDQpOworIGpzb25fdmFsdWUgCistLS0tLS0t LS0tLS0KKyAgICAgICAgTmFOCisoMSByb3cpCisKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25i ICciLWluZiInLCAnJCcgUkVUVVJOSU5HIGZsb2F0NCk7CisganNvbl92YWx1ZSAKKy0tLS0t LS0tLS0tLQorICAtSW5maW5pdHkKKygxIHJvdykKKworU0VMRUNUIEpTT05fVkFMVUUoanNv bmIgJyJlcnIiJywgJyQnIFJFVFVSTklORyBmbG9hdDQgREVGQVVMVCAtMSBPTiBFUlJPUik7 CisganNvbl92YWx1ZSAKKy0tLS0tLS0tLS0tLQorICAgICAgICAgLTEKKygxIHJvdykKKwor U0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJyJlcnIiJywgJyQnIFJFVFVSTklORyBmbG9hdDQg RVJST1IgT04gRVJST1IpOworRVJST1I6ICBpbnZhbGlkIGlucHV0IHN5bnRheCBmb3IgdHlw ZSByZWFsOiAiZXJyIgorU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgICcxLjIzJywgICckJyBS RVRVUk5JTkcgZmxvYXQ4KTsKKyBqc29uX3ZhbHVlIAorLS0tLS0tLS0tLS0tCisgICAgICAg MS4yMworKDEgcm93KQorCitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnIjEuMjMiJywgJyQn IFJFVFVSTklORyBmbG9hdDgpOworIGpzb25fdmFsdWUgCistLS0tLS0tLS0tLS0KKyAgICAg ICAxLjIzCisoMSByb3cpCisKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICAnIm5hbiInLCAn JCcgUkVUVVJOSU5HIGZsb2F0OCk7CisganNvbl92YWx1ZSAKKy0tLS0tLS0tLS0tLQorICAg ICAgICBOYU4KKygxIHJvdykKKworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJyItaW5mIics ICckJyBSRVRVUk5JTkcgZmxvYXQ4KTsKKyBqc29uX3ZhbHVlIAorLS0tLS0tLS0tLS0tCisg IC1JbmZpbml0eQorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnImVyciIn LCAnJCcgUkVUVVJOSU5HIGZsb2F0OCBERUZBVUxUIC0xIE9OIEVSUk9SKTsKKyBqc29uX3Zh bHVlIAorLS0tLS0tLS0tLS0tCisgICAgICAgICAtMQorKDEgcm93KQorCitTRUxFQ1QgSlNP Tl9WQUxVRShqc29uYiAnImVyciInLCAnJCcgUkVUVVJOSU5HIGZsb2F0OCBFUlJPUiBPTiBF UlJPUik7CitFUlJPUjogIGludmFsaWQgaW5wdXQgc3ludGF4IGZvciB0eXBlIGRvdWJsZSBw cmVjaXNpb246ICJlcnIiCitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAgJzEuMjMnLCAgJyQn IFJFVFVSTklORyBudW1lcmljKTsKKyBqc29uX3ZhbHVlIAorLS0tLS0tLS0tLS0tCisgICAg ICAgMS4yMworKDEgcm93KQorCitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnIjEuMjMiJywg JyQnIFJFVFVSTklORyBudW1lcmljKTsKKyBqc29uX3ZhbHVlIAorLS0tLS0tLS0tLS0tCisg ICAgICAgMS4yMworKDEgcm93KQorCitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAgJyJuYW4i JywgJyQnIFJFVFVSTklORyBudW1lcmljKTsKKyBqc29uX3ZhbHVlIAorLS0tLS0tLS0tLS0t CisgICAgICAgIE5hTgorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnIi1p bmYiJywgJyQnIFJFVFVSTklORyBudW1lcmljKTsKKyBqc29uX3ZhbHVlIAorLS0tLS0tLS0t LS0tCisgIC1JbmZpbml0eQorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAn ImVyciInLCAnJCcgUkVUVVJOSU5HIG51bWVyaWMgREVGQVVMVCAtMSBPTiBFUlJPUik7Cisg anNvbl92YWx1ZSAKKy0tLS0tLS0tLS0tLQorICAgICAgICAgLTEKKygxIHJvdykKKworU0VM RUNUIEpTT05fVkFMVUUoanNvbmIgJyJlcnIiJywgJyQnIFJFVFVSTklORyBudW1lcmljIEVS Uk9SIE9OIEVSUk9SKTsKK0VSUk9SOiAgaW52YWxpZCBpbnB1dCBzeW50YXggZm9yIHR5cGUg bnVtZXJpYzogImVyciIKKy0tIFRlc3QgZm9yIGRvbWFpbiB0eXBlcwogQ1JFQVRFIERPTUFJ TiBzcWxqc29uYl9pbnRfbm90X251bGwgQVMgaW50IE5PVCBOVUxMOworQ1JFQVRFIERPTUFJ TiBzcWxqc29uYl9qc29uX25vdF9udWxsIEFTIGpzb24gTk9UIE5VTEwgQ0hFQ0sgKFZBTFVF Ojp0ZXh0IDw+ICcwJyk7CitDUkVBVEUgRE9NQUlOIHNxbGpzb25iX2pzb25iX25vdF9udWxs IEFTIGpzb25iIE5PVCBOVUxMIENIRUNLIChWQUxVRSA8PiAnMCcpOworLS0gVGVzdCBjYXN0 aW5nIHRvIGpzb25bYl0gZG9tYWlucyAoaXRlbXMgY2FzdGVkIGFzIGlzLCBzdHJpbmdzIGFy ZSBub3QgdW5xdW90ZWQpCitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnIjEiJywgJyQnIFJF VFVSTklORyBzcWxqc29uYl9qc29uX25vdF9udWxsKTsKK0VSUk9SOiAgcmV0dXJuaW5nIHR5 cGUgc3FsanNvbmJfanNvbl9ub3RfbnVsbCBpcyBub3Qgc3VwcG9ydGVkIGluIEpTT05fVkFM VUUoKQorTElORSAxOiBTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnIjEiJywgJyQnIFJFVFVS TklORyBzcWxqc29uYl9qc29uX24uLi4KKyAgICAgICAgICAgICAgIF4KK1NFTEVDVCBKU09O X1ZBTFVFKGpzb25iICciMSInLCAnJCcgUkVUVVJOSU5HIHNxbGpzb25iX2pzb25iX25vdF9u dWxsKTsKK0VSUk9SOiAgcmV0dXJuaW5nIHR5cGUgc3FsanNvbmJfanNvbmJfbm90X251bGwg aXMgbm90IHN1cHBvcnRlZCBpbiBKU09OX1ZBTFVFKCkKK0xJTkUgMTogU0VMRUNUIEpTT05f VkFMVUUoanNvbmIgJyIxIicsICckJyBSRVRVUk5JTkcgc3FsanNvbmJfanNvbmJfLi4uCisg ICAgICAgICAgICAgICBeCistLSBUZXN0IE5VTEwgY2hlY2tzIGV4ZWN1dGlvbiBpbiBkb21h aW4gdHlwZXMKIFNFTEVDVCBKU09OX1ZBTFVFKGpzb25iICcxJywgJyQuYScgUkVUVVJOSU5H IHNxbGpzb25iX2ludF9ub3RfbnVsbCk7Ci1FUlJPUjogIGRvbWFpbiBzcWxqc29uYl9pbnRf bm90X251bGwgZG9lcyBub3QgYWxsb3cgbnVsbCB2YWx1ZXMKK0VSUk9SOiAgcmV0dXJuaW5n IHR5cGUgc3FsanNvbmJfaW50X25vdF9udWxsIGlzIG5vdCBzdXBwb3J0ZWQgaW4gSlNPTl9W QUxVRSgpCitMSU5FIDE6IFNFTEVDVCBKU09OX1ZBTFVFKGpzb25iICcxJywgJyQuYScgUkVU VVJOSU5HIHNxbGpzb25iX2ludF9uby4uLgorICAgICAgICAgICAgICAgXgogU0VMRUNUIEpT T05fVkFMVUUoanNvbmIgJzEnLCAnJC5hJyBSRVRVUk5JTkcgc3FsanNvbmJfaW50X25vdF9u dWxsIE5VTEwgT04gRVJST1IpOwotRVJST1I6ICBkb21haW4gc3FsanNvbmJfaW50X25vdF9u dWxsIGRvZXMgbm90IGFsbG93IG51bGwgdmFsdWVzCitFUlJPUjogIHJldHVybmluZyB0eXBl IHNxbGpzb25iX2ludF9ub3RfbnVsbCBpcyBub3Qgc3VwcG9ydGVkIGluIEpTT05fVkFMVUUo KQorTElORSAxOiBTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnMScsICckLmEnIFJFVFVSTklO RyBzcWxqc29uYl9pbnRfbm8uLi4KKyAgICAgICAgICAgICAgIF4KIFNFTEVDVCBKU09OX1ZB TFVFKGpzb25iICcxJywgJyQuYScgUkVUVVJOSU5HIHNxbGpzb25iX2ludF9ub3RfbnVsbCBE RUZBVUxUIE5VTEwgT04gRVJST1IpOwotRVJST1I6ICBkb21haW4gc3FsanNvbmJfaW50X25v dF9udWxsIGRvZXMgbm90IGFsbG93IG51bGwgdmFsdWVzCitFUlJPUjogIHJldHVybmluZyB0 eXBlIHNxbGpzb25iX2ludF9ub3RfbnVsbCBpcyBub3Qgc3VwcG9ydGVkIGluIEpTT05fVkFM VUUoKQorTElORSAxOiBTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnMScsICckLmEnIFJFVFVS TklORyBzcWxqc29uYl9pbnRfbm8uLi4KKyAgICAgICAgICAgICAgIF4KKy0tIFRlc3QgcmV0 dXJuaW5nIG9mIG5vbi1zY2FsYXIgaXRlbXMKIFNFTEVDVCBKU09OX1ZBTFVFKGpzb25iICdb XScsICckJyk7CiAganNvbl92YWx1ZSAKIC0tLS0tLS0tLS0tLQpAQCAtNDc4LDExICs1OTUs OSBAQCBTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnbnVsbCcsICckYScgUEFTU0lORyBwb2lu dCAnICgxLCAyICknIEFTIGEpOwogKDEgcm93KQogCiBTRUxFQ1QgSlNPTl9WQUxVRShqc29u YiAnbnVsbCcsICckYScgUEFTU0lORyBwb2ludCAnICgxLCAyICknIEFTIGEgUkVUVVJOSU5H IHBvaW50KTsKLSBqc29uX3ZhbHVlIAotLS0tLS0tLS0tLS0tCi0gKDEsMikKLSgxIHJvdykK LQorRVJST1I6ICByZXR1cm5pbmcgdHlwZSBwb2ludCBpcyBub3Qgc3VwcG9ydGVkIGluIEpT T05fVkFMVUUoKQorTElORSAxOiBTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnbnVsbCcsICck YScgUEFTU0lORyBwb2ludCAnICgxLCAyICkuLi4KKyAgICAgICAgICAgICAgIF4KIC0tIFRl c3QgdGltZXN0YW1wdHogcGFzc2luZyBhbmQgb3V0cHV0CiBTRUxFQ1QgSlNPTl9WQUxVRShq c29uYiAnbnVsbCcsICckdHMnIFBBU1NJTkcgdGltZXN0YW1wdHogJzIwMTgtMDItMjEgMTI6 MzQ6NTYgKzEwJyBBUyB0cyk7CiAgICAgICAgICAganNvbl92YWx1ZSAgICAgICAgICAKQEAg LTUxNCw2ICs2MjksMzYgQEAgU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJ251bGwnLCAnJHRz JyBQQVNTSU5HIHRpbWVzdGFtcHR6ICcyMDE4LTAyLTIxIDEyOjM0OjU2ICsKICAiMjAxOC0w Mi0yMVQwMjozNDo1NiswMDowMCIKICgxIHJvdykKIAorLS0gdGVzdCBlcnJvcnMgaW4gREVG QVVMVCBPTiBFTVBUWSBleHByZXNzaW9ucworU0VMRUNUIEpTT05fVkFMVUUoJzEnOjpqc29u YiwgJyQueCcgUkVUVVJOSU5HIGludAorICAgICAgICAgICAgICAgICAgREVGQVVMVCAxIC8g eCBPTiBFTVBUWQorICAgICAgICAgICAgICAgICAgREVGQVVMVCAyIE9OIEVSUk9SKQorRlJP TSAoVkFMVUVTICgxOjppbnQpLCAoMCkpIHgoeCk7CitFUlJPUjogIHVuc2FmZSBERUZBVUxU IE9OIEVNUFRZIGV4cHJlc3Npb25zIGFyZSBub3Qgc3VwcG9ydGVkCitMSU5FIDI6ICAgICAg ICAgICAgICAgICAgIERFRkFVTFQgMSAvIHggT04gRU1QVFkKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBeCitISU5UOiAgVXNlIEVSUk9SIE9OIEVSUk9SIGNsYXVzZSBv ciB0cnkgdG8gc2ltcGxpZnkgZXhwcmVzc2lvbiBpbnRvIGNvbnN0YW50LWxpa2UgZm9ybQor U0VMRUNUIEpTT05fVkFMVUUoJzEnOjpqc29uYiwgJyQueCcgUkVUVVJOSU5HIGludCBERUZB VUxUIC0xIE9OIEVNUFRZKTsKKyBqc29uX3ZhbHVlIAorLS0tLS0tLS0tLS0tCisgICAgICAg ICAtMQorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9WQUxVRSgnMSc6Ompzb25iLCAnJC54JyBS RVRVUk5JTkcgaW50IERFRkFVTFQgJy0xJyBPTiBFTVBUWSk7CisganNvbl92YWx1ZSAKKy0t LS0tLS0tLS0tLQorICAgICAgICAgLTEKKygxIHJvdykKKworU0VMRUNUIEpTT05fVkFMVUUo JzEnOjpqc29uYiwgJyQueCcgUkVUVVJOSU5HIGludCBERUZBVUxUICdlcnInIE9OIEVNUFRZ KTsKK0VSUk9SOiAgaW52YWxpZCBpbnB1dCBzeW50YXggZm9yIHR5cGUgaW50ZWdlcjogImVy ciIKK0xJTkUgMTogLi4uU09OX1ZBTFVFKCcxJzo6anNvbmIsICckLngnIFJFVFVSTklORyBp bnQgREVGQVVMVCAnZXJyJyBPTiBFLi4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgorU0VMRUNUIEpTT05fVkFMVUUo JzEnOjpqc29uYiwgJyQueCcgUkVUVVJOSU5HIGludCBERUZBVUxUIC0xOjpmbG9hdCBPTiBF TVBUWSk7CitFUlJPUjogIHVuc2FmZSBERUZBVUxUIE9OIEVNUFRZIGV4cHJlc3Npb25zIGFy ZSBub3Qgc3VwcG9ydGVkCitMSU5FIDE6IC4uLlNPTl9WQUxVRSgnMSc6Ompzb25iLCAnJC54 JyBSRVRVUk5JTkcgaW50IERFRkFVTFQgLTE6OmZsb2F0IC4uLgorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KK0hJTlQ6 ICBVc2UgRVJST1IgT04gRVJST1IgY2xhdXNlIG9yIHRyeSB0byBzaW1wbGlmeSBleHByZXNz aW9uIGludG8gY29uc3RhbnQtbGlrZSBmb3JtCiAtLSBKU09OX1FVRVJZCiBTRUxFQ1QKIAlK U09OX1FVRVJZKGpzLCAnJCcpLApAQCAtODUyLDQ5ICs5OTcsMzUgQEAgRlJPTQogQ1JFQVRF IFRZUEUgc3FsanNvbmJfcmVjIEFTIChhIGludCwgdCB0ZXh0LCBqcyBqc29uLCBqYiBqc29u YiwganNhIGpzb25bXSk7CiBDUkVBVEUgVFlQRSBzcWxqc29uYl9yZWNhIEFTIChyZWNhIHNx bGpzb25iX3JlY1tdKTsKIFNFTEVDVCBKU09OX1FVRVJZKGpzb25iICdbeyJhIjogMSwgImIi OiAiZm9vIiwgInQiOiAiYWFhIiwgImpzIjogWzEsICIyIiwge31dLCAiamIiOiB7IngiOiBb MSwgIjIiLCB7fV19fSwgIHsiYSI6IDJ9XScsICckWzBdJyBSRVRVUk5JTkcgc3FsanNvbmJf cmVjKTsKLSAgICAgICAgICAgICAgICAgICAgIGpzb25fcXVlcnkgICAgICAgICAgICAgICAg ICAgICAgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQotICgxLGFhYSwiWzEsICIiMiIiLCB7fV0iLCJ7IiJ4IiI6IFsxLCAiIjIiIiwg e31dfSIsKQotKDEgcm93KQotCitFUlJPUjogIHJldHVybmluZyB0eXBlIHNxbGpzb25iX3Jl YyBpcyBub3Qgc3VwcG9ydGVkIGluIEpTT05fUVVFUlkoKQorTElORSAxOiBTRUxFQ1QgSlNP Tl9RVUVSWShqc29uYiAnW3siYSI6IDEsICJiIjogImZvbyIsICJ0IjogImFhYSIsICIuLi4K KyAgICAgICAgICAgICAgIF4KIFNFTEVDVCAqIEZST00gdW5uZXN0KChKU09OX1FVRVJZKGpz b25iICd7ImpzYSI6ICBbeyJhIjogMSwgImIiOiBbImZvbyJdfSwgeyJhIjogMiwgImMiOiB7 fX0sIDEyM119JywgJyQnIFJFVFVSTklORyBzcWxqc29uYl9yZWMpKS5qc2EpOwotICAgICAg ICAgdW5uZXN0ICAgICAgICAgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSB7ImEiOiAx LCAiYiI6IFsiZm9vIl19Ci0geyJhIjogMiwgImMiOiB7fX0KLSAxMjMKLSgzIHJvd3MpCi0K K0VSUk9SOiAgcmV0dXJuaW5nIHR5cGUgc3FsanNvbmJfcmVjIGlzIG5vdCBzdXBwb3J0ZWQg aW4gSlNPTl9RVUVSWSgpCitMSU5FIDE6IFNFTEVDVCAqIEZST00gdW5uZXN0KChKU09OX1FV RVJZKGpzb25iICd7ImpzYSI6ICBbeyJhIjogMSwgIi4uLgorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXgogU0VMRUNUICogRlJPTSB1bm5lc3QoKEpTT05fUVVFUlkoanNvbmIg J3sicmVjYSI6IFt7ImEiOiAxLCAidCI6IFsiZm9vIiwgW11dfSwgeyJhIjogMiwgImpiIjog W3t9LCB0cnVlXX1dfScsICckJyBSRVRVUk5JTkcgc3FsanNvbmJfcmVjYSkpLnJlY2EpOwot IGEgfCAgICAgIHQgICAgICB8IGpzIHwgICAgIGpiICAgICB8IGpzYSAKLS0tLSstLS0tLS0t LS0tLS0tKy0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tCi0gMSB8IFsiZm9vIiwgW11dIHwgICAg fCAgICAgICAgICAgIHwgCi0gMiB8ICAgICAgICAgICAgIHwgICAgfCBbe30sIHRydWVdIHwg Ci0oMiByb3dzKQotCitFUlJPUjogIHJldHVybmluZyB0eXBlIHNxbGpzb25iX3JlY2EgaXMg bm90IHN1cHBvcnRlZCBpbiBKU09OX1FVRVJZKCkKK0xJTkUgMTogU0VMRUNUICogRlJPTSB1 bm5lc3QoKEpTT05fUVVFUlkoanNvbmIgJ3sicmVjYSI6IFt7ImEiOiAxLCAiLi4uCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBeCiAtLSBFeHRlbnNpb246IGFycmF5IHR5cGVz IHJldHVybmluZwogU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1sxLDIsbnVsbCwiMyJdJywg JyRbKl0nIFJFVFVSTklORyBpbnRbXSBXSVRIIFdSQVBQRVIpOwotICBqc29uX3F1ZXJ5ICAK LS0tLS0tLS0tLS0tLS0tCi0gezEsMixOVUxMLDN9Ci0oMSByb3cpCi0KK0VSUk9SOiAgcmV0 dXJuaW5nIHR5cGUgaW50ZWdlcltdIGlzIG5vdCBzdXBwb3J0ZWQgaW4gSlNPTl9RVUVSWSgp CitMSU5FIDE6IFNFTEVDVCBKU09OX1FVRVJZKGpzb25iICdbMSwyLG51bGwsIjMiXScsICck WypdJyBSRVRVUk5JTkcgaS4uLgorICAgICAgICAgICAgICAgXgogU0VMRUNUICogRlJPTSB1 bm5lc3QoSlNPTl9RVUVSWShqc29uYiAnW3siYSI6IDEsICJ0IjogWyJmb28iLCBbXV19LCB7 ImEiOiAyLCAiamIiOiBbe30sIHRydWVdfV0nLCAnJCcgUkVUVVJOSU5HIHNxbGpzb25iX3Jl Y1tdKSk7Ci0gYSB8ICAgICAgdCAgICAgIHwganMgfCAgICAgamIgICAgIHwganNhIAotLS0t Ky0tLS0tLS0tLS0tLS0rLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0KLSAxIHwgWyJmb28iLCBb XV0gfCAgICB8ICAgICAgICAgICAgfCAKLSAyIHwgICAgICAgICAgICAgfCAgICB8IFt7fSwg dHJ1ZV0gfCAKLSgyIHJvd3MpCi0KK0VSUk9SOiAgcmV0dXJuaW5nIHR5cGUgc3FsanNvbmJf cmVjW10gaXMgbm90IHN1cHBvcnRlZCBpbiBKU09OX1FVRVJZKCkKK0xJTkUgMTogU0VMRUNU ICogRlJPTSB1bm5lc3QoSlNPTl9RVUVSWShqc29uYiAnW3siYSI6IDEsICJ0IjogWyJmb28i Li4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KIC0tIEV4dGVuc2lvbjogZG9t YWluIHR5cGVzIHJldHVybmluZwogU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ3siYSI6IDF9 JywgJyQuYScgUkVUVVJOSU5HIHNxbGpzb25iX2ludF9ub3RfbnVsbCk7Ci0ganNvbl9xdWVy eSAKLS0tLS0tLS0tLS0tLQotICAgICAgICAgIDEKLSgxIHJvdykKLQorRVJST1I6ICByZXR1 cm5pbmcgdHlwZSBzcWxqc29uYl9pbnRfbm90X251bGwgaXMgbm90IHN1cHBvcnRlZCBpbiBK U09OX1FVRVJZKCkKK0xJTkUgMTogU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ3siYSI6IDF9 JywgJyQuYScgUkVUVVJOSU5HIHNxbGpzb25iLi4uCisgICAgICAgICAgICAgICBeCiBTRUxF Q1QgSlNPTl9RVUVSWShqc29uYiAneyJhIjogMX0nLCAnJC5iJyBSRVRVUk5JTkcgc3FsanNv bmJfaW50X25vdF9udWxsKTsKLUVSUk9SOiAgZG9tYWluIHNxbGpzb25iX2ludF9ub3RfbnVs bCBkb2VzIG5vdCBhbGxvdyBudWxsIHZhbHVlcworRVJST1I6ICByZXR1cm5pbmcgdHlwZSBz cWxqc29uYl9pbnRfbm90X251bGwgaXMgbm90IHN1cHBvcnRlZCBpbiBKU09OX1FVRVJZKCkK K0xJTkUgMTogU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ3siYSI6IDF9JywgJyQuYicgUkVU VVJOSU5HIHNxbGpzb25iLi4uCisgICAgICAgICAgICAgICBeCiAtLSBUZXN0IHRpbWVzdGFt cHR6IHBhc3NpbmcgYW5kIG91dHB1dAogU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ251bGwn LCAnJHRzJyBQQVNTSU5HIHRpbWVzdGFtcHR6ICcyMDE4LTAyLTIxIDEyOjM0OjU2ICsxMCcg QVMgdHMpOwogICAgICAgICAganNvbl9xdWVyeSAgICAgICAgICAKQEAgLTEwMTksNiArMTE1 MCwyNSBAQCBFUlJPUjogIGZ1bmN0aW9ucyBpbiBpbmRleCBleHByZXNzaW9uIG11c3QgYmUg bWFya2VkIElNTVVUQUJMRQogQ1JFQVRFIElOREVYIE9OIHRlc3RfanNvbmJfbXV0YWJpbGl0 eSAoSlNPTl9RVUVSWShqcywgJyRbMSwgMCB0byAkLmEgPyAoQC5kYXRldGltZSgpID09ICR4 KV0nIFBBU1NJTkcgJzEyOjM0Jzo6dGltZSBBUyB4KSk7CiBFUlJPUjogIGZ1bmN0aW9ucyBp biBpbmRleCBleHByZXNzaW9uIG11c3QgYmUgbWFya2VkIElNTVVUQUJMRQogQ1JFQVRFIElO REVYIE9OIHRlc3RfanNvbmJfbXV0YWJpbGl0eSAoSlNPTl9RVUVSWShqcywgJyRbMSwgJC5h ID8gKEAuZGF0ZXRpbWUoIkhIOk1JIikgPT0gJHgpXScgUEFTU0lORyAnMTI6MzQnOjp0aW1l IEFTIHgpKTsKK0NSRUFURSBJTkRFWCBPTiB0ZXN0X2pzb25iX211dGFiaWxpdHkgKEpTT05f VkFMVUUoanMsICckJyBSRVRVUk5JTkcgaW50KSk7IC0tIGltbXV0YWJsZQorQ1JFQVRFIElO REVYIE9OIHRlc3RfanNvbmJfbXV0YWJpbGl0eSAoSlNPTl9WQUxVRShqcywgJyQnIFJFVFVS TklORyBkYXRlKSk7CitFUlJPUjogIGZ1bmN0aW9ucyBpbiBpbmRleCBleHByZXNzaW9uIG11 c3QgYmUgbWFya2VkIElNTVVUQUJMRQorQ1JFQVRFIElOREVYIE9OIHRlc3RfanNvbmJfbXV0 YWJpbGl0eSAoSlNPTl9WQUxVRShqcywgJyQnIFJFVFVSTklORyB0aW1lKSk7CitFUlJPUjog IGZ1bmN0aW9ucyBpbiBpbmRleCBleHByZXNzaW9uIG11c3QgYmUgbWFya2VkIElNTVVUQUJM RQorQ1JFQVRFIElOREVYIE9OIHRlc3RfanNvbmJfbXV0YWJpbGl0eSAoSlNPTl9WQUxVRShq cywgJyQnIFJFVFVSTklORyB0aW1ldHopKTsKK0VSUk9SOiAgZnVuY3Rpb25zIGluIGluZGV4 IGV4cHJlc3Npb24gbXVzdCBiZSBtYXJrZWQgSU1NVVRBQkxFCitDUkVBVEUgSU5ERVggT04g dGVzdF9qc29uYl9tdXRhYmlsaXR5IChKU09OX1ZBTFVFKGpzLCAnJCcgUkVUVVJOSU5HIHRp bWVzdGFtcCkpOworRVJST1I6ICBmdW5jdGlvbnMgaW4gaW5kZXggZXhwcmVzc2lvbiBtdXN0 IGJlIG1hcmtlZCBJTU1VVEFCTEUKK0NSRUFURSBJTkRFWCBPTiB0ZXN0X2pzb25iX211dGFi aWxpdHkgKEpTT05fVkFMVUUoanMsICckJyBSRVRVUk5JTkcgdGltZXN0YW1wdHopKTsKK0VS Uk9SOiAgZnVuY3Rpb25zIGluIGluZGV4IGV4cHJlc3Npb24gbXVzdCBiZSBtYXJrZWQgSU1N VVRBQkxFCitDUkVBVEUgSU5ERVggT04gdGVzdF9qc29uYl9tdXRhYmlsaXR5IChKU09OX1ZB TFVFKGpzLCAnJC5kYXRldGltZSgpJykpOworRVJST1I6ICBmdW5jdGlvbnMgaW4gaW5kZXgg ZXhwcmVzc2lvbiBtdXN0IGJlIG1hcmtlZCBJTU1VVEFCTEUKK0NSRUFURSBJTkRFWCBPTiB0 ZXN0X2pzb25iX211dGFiaWxpdHkgKEpTT05fVkFMVUUoanMsICckLmRhdGV0aW1lKClbKl1b MSwyXS4qKicpKTsKK0VSUk9SOiAgZnVuY3Rpb25zIGluIGluZGV4IGV4cHJlc3Npb24gbXVz dCBiZSBtYXJrZWQgSU1NVVRBQkxFCitDUkVBVEUgSU5ERVggT04gdGVzdF9qc29uYl9tdXRh YmlsaXR5IChKU09OX1ZBTFVFKGpzLCAnJHgnIFBBU1NJTkcgJzIwMjItMDgtMjUnOjpkYXRl IEFTIHgpKTsKK0VSUk9SOiAgZnVuY3Rpb25zIGluIGluZGV4IGV4cHJlc3Npb24gbXVzdCBi ZSBtYXJrZWQgSU1NVVRBQkxFCitDUkVBVEUgSU5ERVggT04gdGVzdF9qc29uYl9tdXRhYmls aXR5IChKU09OX1ZBTFVFKGpzLCAnJC5kYXRldGltZSgpJyBSRVRVUk5JTkcgaW50KSk7IC0t IGltbXV0YWJsZQorQ1JFQVRFIElOREVYIE9OIHRlc3RfanNvbmJfbXV0YWJpbGl0eSAoSlNP Tl9RVUVSWShqcywgJyQuZGF0ZXRpbWUoKScpKTsgLS0gaW1tdXRhYmxlCiBEUk9QIFRBQkxF IHRlc3RfanNvbmJfbXV0YWJpbGl0eTsKIC0tIEpTT05fVEFCTEUKIC0tIFNob3VsZCBmYWls IChKU09OX1RBQkxFIGNhbiBiZSB1c2VkIG9ubHkgaW4gRlJPTSBjbGF1c2UpCkBAIC0xMDQ4 LDcgKzExOTgsNiBAQCBTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoanNvbmIgJzEyMycsICck JwogKDEgcm93KQogCiAtLSBKU09OX1RBQkxFOiBiYXNpYyBmdW5jdGlvbmFsaXR5Ci1DUkVB VEUgRE9NQUlOIGpzb25iX3Rlc3RfZG9tYWluIEFTIHRleHQgQ0hFQ0sgKHZhbHVlIDw+ICdm b28nKTsKIFNFTEVDVCAqCiBGUk9NCiAJKFZBTFVFUwpAQCAtMTA2OSw3ICsxMjE4LDYgQEAg RlJPTQogCQkJImNoYXIoNCkiIGNoYXIoNCkgUEFUSCAnJCcsCiAJCQkiYm9vbCIgYm9vbCBQ QVRIICckJywKIAkJCSJudW1lcmljIiBudW1lcmljIFBBVEggJyQnLAotCQkJImRvbWFpbiIg anNvbmJfdGVzdF9kb21haW4gUEFUSCAnJCcsCiAJCQlqcyBqc29uIFBBVEggJyQnLAogCQkJ amIganNvbmIgUEFUSCAnJCcsCiAJCQlqc3QgdGV4dCAgICBGT1JNQVQgSlNPTiAgUEFUSCAn JCcsCkBAIC0xMDg1LDI5ICsxMjMzLDI2IEBAIEZST00KIAkJCWV4aXN0czQgdGV4dCBFWElT VFMgUEFUSCAnc3RyaWN0ICQuYWFhJyBGQUxTRSBPTiBFUlJPUiwKIAkJCWpzMiBqc29uIFBB VEggJyQnLAogCQkJanNiMncganNvbmIgUEFUSCAnJCcgV0lUSCBXUkFQUEVSLAotCQkJanNi MnEganNvbmIgUEFUSCAnJCcgT01JVCBRVU9URVMsCi0JCQlpYSBpbnRbXSBQQVRIICckJywK LQkJCXRhIHRleHRbXSBQQVRIICckJywKLQkJCWpiYSBqc29uYltdIFBBVEggJyQnCisJCQlq c2IycSBqc29uYiBQQVRIICckJyBPTUlUIFFVT1RFUwogCQkpCiAJKSBqdAogCU9OIHRydWU7 Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqcyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGlkIHwgaWQyIHwgaW50IHwg IHRleHQgICB8IGNoYXIoNCkgfCBib29sIHwgbnVtZXJpYyB8IGRvbWFpbiAgfCAgICAgIGpz ICAgICAgfCAgICAgIGpiICAgICAgfCAgICAganN0ICAgICAgfCBqc2MgIHwganN2ICB8ICAg ICBqc2IgICAgICB8ICAgICBqc2JxICAgICB8IGFhYSB8IGFhYTEgfCBleGlzdHMxIHwgZXhp c3RzMiB8IGV4aXN0czMgfCBleGlzdHM0IHwgICAgIGpzMiAgICAgIHwgICAgIGpzYjJ3ICAg ICAgfCAgICBqc2IycSAgICAgfCBpYSB8IHRhIHwgamJhIAotLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0rLS0tLS0rLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0tLSstLS0tLS0rLS0tLS0tKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0tKy0tLS0tKy0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLSst LS0tKy0tLS0rLS0tLS0KLSAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDEg fCAgIDEgfCAgIDEgfCAxICAgICAgIHwgMSAgICAgICB8ICAgICAgfCAgICAgICAxIHwgMSAg ICAgICB8IDEgICAgICAgICAgICB8IDEgICAgICAgICAgICB8IDEgICAgICAgICAgICB8IDEg ICAgfCAxICAgIHwgMSAgICAgICAgICAgIHwgMSAgICAgICAgICAgIHwgICAgIHwgICAgICB8 IGYgICAgICAgfCAgICAgICAwIHwgICAgICAgICB8IGZhbHNlICAgfCAxICAgICAgICAgICAg fCBbMV0gICAgICAgICAgICB8IDEgICAgICAgICAgICB8ICAgIHwgICAgfCAKLSBbXSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgfCAgICAgfCAgICAgfCAgICAgICAgIHwg ICAgICAgICB8ICAgICAgfCAgICAgICAgIHwgICAgICAgICB8ICAgICAgICAgICAgICB8ICAg ICAgICAgICAgICB8ICAgICAgICAgICAgICB8ICAgICAgfCAgICAgIHwgICAgICAgICAgICAg IHwgICAgICAgICAgICAgIHwgICAgIHwgICAgICB8ICAgICAgICAgfCAgICAgICAgIHwgICAg ICAgICB8ICAgICAgICAgfCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICB8ICAgICAg ICAgICAgICB8ICAgIHwgICAgfCAKLSB7fSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHwgIDEgfCAgIDEgfCAgICAgfCAgICAgICAgIHwgICAgICAgICB8ICAgICAgfCAgICAgICAg IHwgICAgICAgICB8IHt9ICAgICAgICAgICB8IHt9ICAgICAgICAgICB8IHt9ICAgICAgICAg ICB8IHt9ICAgfCB7fSAgIHwge30gICAgICAgICAgIHwge30gICAgICAgICAgIHwgICAgIHwg ICAgICB8IGYgICAgICAgfCAgICAgICAwIHwgICAgICAgICB8IGZhbHNlICAgfCB7fSAgICAg ICAgICAgfCBbe31dICAgICAgICAgICB8IHt9ICAgICAgICAgICB8ICAgIHwgICAgfCAKLSBb MSwgMS4yMywgIjIiLCAiYWFhYWFhYSIsICJmb28iLCBudWxsLCBmYWxzZSwgdHJ1ZSwgeyJh YWEiOiAxMjN9LCAiWzEsMl0iLCAiXCJzdHJcIiJdIHwgIDEgfCAgIDEgfCAgIDEgfCAxICAg ICAgIHwgMSAgICAgICB8ICAgICAgfCAgICAgICAxIHwgMSAgICAgICB8IDEgICAgICAgICAg ICB8IDEgICAgICAgICAgICB8IDEgICAgICAgICAgICB8IDEgICAgfCAxICAgIHwgMSAgICAg ICAgICAgIHwgMSAgICAgICAgICAgIHwgICAgIHwgICAgICB8IGYgICAgICAgfCAgICAgICAw IHwgICAgICAgICB8IGZhbHNlICAgfCAxICAgICAgICAgICAgfCBbMV0gICAgICAgICAgICB8 IDEgICAgICAgICAgICB8ICAgIHwgICAgfCAKLSBbMSwgMS4yMywgIjIiLCAiYWFhYWFhYSIs ICJmb28iLCBudWxsLCBmYWxzZSwgdHJ1ZSwgeyJhYWEiOiAxMjN9LCAiWzEsMl0iLCAiXCJz dHJcIiJdIHwgIDIgfCAgIDIgfCAgIDEgfCAxLjIzICAgIHwgMS4yMyAgICB8ICAgICAgfCAg ICAxLjIzIHwgMS4yMyAgICB8IDEuMjMgICAgICAgICB8IDEuMjMgICAgICAgICB8IDEuMjMg ICAgICAgICB8IDEuMjMgfCAxLjIzIHwgMS4yMyAgICAgICAgIHwgMS4yMyAgICAgICAgIHwg ICAgIHwgICAgICB8IGYgICAgICAgfCAgICAgICAwIHwgICAgICAgICB8IGZhbHNlICAgfCAx LjIzICAgICAgICAgfCBbMS4yM10gICAgICAgICB8IDEuMjMgICAgICAgICB8ICAgIHwgICAg fCAKLSBbMSwgMS4yMywgIjIiLCAiYWFhYWFhYSIsICJmb28iLCBudWxsLCBmYWxzZSwgdHJ1 ZSwgeyJhYWEiOiAxMjN9LCAiWzEsMl0iLCAiXCJzdHJcIiJdIHwgIDMgfCAgIDMgfCAgIDIg fCAyICAgICAgIHwgMiAgICAgICB8ICAgICAgfCAgICAgICAyIHwgMiAgICAgICB8ICIyIiAg ICAgICAgICB8ICIyIiAgICAgICAgICB8ICIyIiAgICAgICAgICB8ICIyIiAgfCAiMiIgIHwg IjIiICAgICAgICAgIHwgMiAgICAgICAgICAgIHwgICAgIHwgICAgICB8IGYgICAgICAgfCAg ICAgICAwIHwgICAgICAgICB8IGZhbHNlICAgfCAiMiIgICAgICAgICAgfCBbIjIiXSAgICAg ICAgICB8IDIgICAgICAgICAgICB8ICAgIHwgICAgfCAKLSBbMSwgMS4yMywgIjIiLCAiYWFh YWFhYSIsICJmb28iLCBudWxsLCBmYWxzZSwgdHJ1ZSwgeyJhYWEiOiAxMjN9LCAiWzEsMl0i LCAiXCJzdHJcIiJdIHwgIDQgfCAgIDQgfCAgICAgfCBhYWFhYWFhIHwgYWFhYSAgICB8ICAg ICAgfCAgICAgICAgIHwgYWFhYWFhYSB8ICJhYWFhYWFhIiAgICB8ICJhYWFhYWFhIiAgICB8 ICJhYWFhYWFhIiAgICB8ICJhYWEgfCAiYWFhIHwgImFhYWFhYWEiICAgIHwgICAgICAgICAg ICAgIHwgICAgIHwgICAgICB8IGYgICAgICAgfCAgICAgICAwIHwgICAgICAgICB8IGZhbHNl ICAgfCAiYWFhYWFhYSIgICAgfCBbImFhYWFhYWEiXSAgICB8ICAgICAgICAgICAgICB8ICAg IHwgICAgfCAKLSBbMSwgMS4yMywgIjIiLCAiYWFhYWFhYSIsICJmb28iLCBudWxsLCBmYWxz ZSwgdHJ1ZSwgeyJhYWEiOiAxMjN9LCAiWzEsMl0iLCAiXCJzdHJcIiJdIHwgIDUgfCAgIDUg fCAgICAgfCBmb28gICAgIHwgZm9vICAgICB8ICAgICAgfCAgICAgICAgIHwgICAgICAgICB8 ICJmb28iICAgICAgICB8ICJmb28iICAgICAgICB8ICJmb28iICAgICAgICB8ICJmb28gfCAi Zm9vIHwgImZvbyIgICAgICAgIHwgICAgICAgICAgICAgIHwgICAgIHwgICAgICB8IGYgICAg ICAgfCAgICAgICAwIHwgICAgICAgICB8IGZhbHNlICAgfCAiZm9vIiAgICAgICAgfCBbImZv byJdICAgICAgICB8ICAgICAgICAgICAgICB8ICAgIHwgICAgfCAKLSBbMSwgMS4yMywgIjIi LCAiYWFhYWFhYSIsICJmb28iLCBudWxsLCBmYWxzZSwgdHJ1ZSwgeyJhYWEiOiAxMjN9LCAi WzEsMl0iLCAiXCJzdHJcIiJdIHwgIDYgfCAgIDYgfCAgICAgfCAgICAgICAgIHwgICAgICAg ICB8ICAgICAgfCAgICAgICAgIHwgICAgICAgICB8IG51bGwgICAgICAgICB8IG51bGwgICAg ICAgICB8IG51bGwgICAgICAgICB8IG51bGwgfCBudWxsIHwgbnVsbCAgICAgICAgIHwgbnVs bCAgICAgICAgIHwgICAgIHwgICAgICB8IGYgICAgICAgfCAgICAgICAwIHwgICAgICAgICB8 IGZhbHNlICAgfCBudWxsICAgICAgICAgfCBbbnVsbF0gICAgICAgICB8IG51bGwgICAgICAg ICB8ICAgIHwgICAgfCAKLSBbMSwgMS4yMywgIjIiLCAiYWFhYWFhYSIsICJmb28iLCBudWxs LCBmYWxzZSwgdHJ1ZSwgeyJhYWEiOiAxMjN9LCAiWzEsMl0iLCAiXCJzdHJcIiJdIHwgIDcg fCAgIDcgfCAgIDAgfCBmYWxzZSAgIHwgZmFscyAgICB8IGYgICAgfCAgICAgICAgIHwgZmFs c2UgICB8IGZhbHNlICAgICAgICB8IGZhbHNlICAgICAgICB8IGZhbHNlICAgICAgICB8IGZh bHMgfCBmYWxzIHwgZmFsc2UgICAgICAgIHwgZmFsc2UgICAgICAgIHwgICAgIHwgICAgICB8 IGYgICAgICAgfCAgICAgICAwIHwgICAgICAgICB8IGZhbHNlICAgfCBmYWxzZSAgICAgICAg fCBbZmFsc2VdICAgICAgICB8IGZhbHNlICAgICAgICB8ICAgIHwgICAgfCAKLSBbMSwgMS4y MywgIjIiLCAiYWFhYWFhYSIsICJmb28iLCBudWxsLCBmYWxzZSwgdHJ1ZSwgeyJhYWEiOiAx MjN9LCAiWzEsMl0iLCAiXCJzdHJcIiJdIHwgIDggfCAgIDggfCAgIDEgfCB0cnVlICAgIHwg dHJ1ZSAgICB8IHQgICAgfCAgICAgICAgIHwgdHJ1ZSAgICB8IHRydWUgICAgICAgICB8IHRy dWUgICAgICAgICB8IHRydWUgICAgICAgICB8IHRydWUgfCB0cnVlIHwgdHJ1ZSAgICAgICAg IHwgdHJ1ZSAgICAgICAgIHwgICAgIHwgICAgICB8IGYgICAgICAgfCAgICAgICAwIHwgICAg ICAgICB8IGZhbHNlICAgfCB0cnVlICAgICAgICAgfCBbdHJ1ZV0gICAgICAgICB8IHRydWUg ICAgICAgICB8ICAgIHwgICAgfCAKLSBbMSwgMS4yMywgIjIiLCAiYWFhYWFhYSIsICJmb28i LCBudWxsLCBmYWxzZSwgdHJ1ZSwgeyJhYWEiOiAxMjN9LCAiWzEsMl0iLCAiXCJzdHJcIiJd IHwgIDkgfCAgIDkgfCAgICAgfCAgICAgICAgIHwgICAgICAgICB8ICAgICAgfCAgICAgICAg IHwgICAgICAgICB8IHsiYWFhIjogMTIzfSB8IHsiYWFhIjogMTIzfSB8IHsiYWFhIjogMTIz fSB8IHsiYWEgfCB7ImFhIHwgeyJhYWEiOiAxMjN9IHwgeyJhYWEiOiAxMjN9IHwgMTIzIHwg IDEyMyB8IHQgICAgICAgfCAgICAgICAxIHwgICAgICAgMSB8IHRydWUgICAgfCB7ImFhYSI6 IDEyM30gfCBbeyJhYWEiOiAxMjN9XSB8IHsiYWFhIjogMTIzfSB8ICAgIHwgICAgfCAKLSBb MSwgMS4yMywgIjIiLCAiYWFhYWFhYSIsICJmb28iLCBudWxsLCBmYWxzZSwgdHJ1ZSwgeyJh YWEiOiAxMjN9LCAiWzEsMl0iLCAiXCJzdHJcIiJdIHwgMTAgfCAgMTAgfCAgICAgfCBbMSwy XSAgIHwgWzEsMiAgICB8ICAgICAgfCAgICAgICAgIHwgWzEsMl0gICB8ICJbMSwyXSIgICAg ICB8ICJbMSwyXSIgICAgICB8ICJbMSwyXSIgICAgICB8ICJbMSwgfCAiWzEsIHwgIlsxLDJd IiAgICAgIHwgWzEsIDJdICAgICAgIHwgICAgIHwgICAgICB8IGYgICAgICAgfCAgICAgICAw IHwgICAgICAgICB8IGZhbHNlICAgfCAiWzEsMl0iICAgICAgfCBbIlsxLDJdIl0gICAgICB8 IFsxLCAyXSAgICAgICB8ICAgIHwgICAgfCAKLSBbMSwgMS4yMywgIjIiLCAiYWFhYWFhYSIs ICJmb28iLCBudWxsLCBmYWxzZSwgdHJ1ZSwgeyJhYWEiOiAxMjN9LCAiWzEsMl0iLCAiXCJz dHJcIiJdIHwgMTEgfCAgMTEgfCAgICAgfCAic3RyIiAgIHwgInN0ciAgICB8ICAgICAgfCAg ICAgICAgIHwgInN0ciIgICB8ICJcInN0clwiIiAgICB8ICJcInN0clwiIiAgICB8ICJcInN0 clwiIiAgICB8ICJcInMgfCAiXCJzIHwgIlwic3RyXCIiICAgIHwgInN0ciIgICAgICAgIHwg ICAgIHwgICAgICB8IGYgICAgICAgfCAgICAgICAwIHwgICAgICAgICB8IGZhbHNlICAgfCAi XCJzdHJcIiIgICAgfCBbIlwic3RyXCIiXSAgICB8ICJzdHIiICAgICAgICB8ICAgIHwgICAg fCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaWQgfCBpZDIgfCBpbnQg fCAgdGV4dCAgIHwgY2hhcig0KSB8IGJvb2wgfCBudW1lcmljIHwgICAgICBqcyAgICAgIHwg ICAgICBqYiAgICAgIHwgICAgIGpzdCAgICAgIHwganNjICB8IGpzdiAgfCAgICAganNiICAg ICAgfCAgICAganNicSAgICAgfCBhYWEgfCBhYWExIHwgZXhpc3RzMSB8IGV4aXN0czIgfCBl eGlzdHMzIHwgZXhpc3RzNCB8ICAgICBqczIgICAgICB8ICAgICBqc2IydyAgICAgIHwgICAg anNiMnEgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0rLS0t LS0rLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tKy0tLS0tLSstLS0tLS0rLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0rLS0tLS0rLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0tCisgMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8 ICAxIHwgICAxIHwgICAxIHwgMSAgICAgICB8IDEgICAgICAgfCAgICAgIHwgICAgICAgMSB8 IDEgICAgICAgICAgICB8IDEgICAgICAgICAgICB8IDEgICAgICAgICAgICB8IDEgICAgfCAx ICAgIHwgMSAgICAgICAgICAgIHwgMSAgICAgICAgICAgIHwgICAgIHwgICAgICB8IGYgICAg ICAgfCAgICAgICAwIHwgICAgICAgICB8IGZhbHNlICAgfCAxICAgICAgICAgICAgfCBbMV0g ICAgICAgICAgICB8IDEKKyBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAg fCAgICAgfCAgICAgfCAgICAgICAgIHwgICAgICAgICB8ICAgICAgfCAgICAgICAgIHwgICAg ICAgICAgICAgIHwgICAgICAgICAgICAgIHwgICAgICAgICAgICAgIHwgICAgICB8ICAgICAg fCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgfCAgICAgfCAgICAgIHwgICAgICAgICB8 ICAgICAgICAgfCAgICAgICAgIHwgICAgICAgICB8ICAgICAgICAgICAgICB8ICAgICAgICAg ICAgICAgIHwgCisge30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAxIHwgICAx IHwgICAgIHwgICAgICAgICB8ICAgICAgICAgfCAgICAgIHwgICAgICAgICB8IHt9ICAgICAg ICAgICB8IHt9ICAgICAgICAgICB8IHt9ICAgICAgICAgICB8IHt9ICAgfCB7fSAgIHwge30g ICAgICAgICAgIHwge30gICAgICAgICAgIHwgICAgIHwgICAgICB8IGYgICAgICAgfCAgICAg ICAwIHwgICAgICAgICB8IGZhbHNlICAgfCB7fSAgICAgICAgICAgfCBbe31dICAgICAgICAg ICB8IHt9CisgWzEsIDEuMjMsICIyIiwgImFhYWFhYWEiLCAiZm9vIiwgbnVsbCwgZmFsc2Us IHRydWUsIHsiYWFhIjogMTIzfSwgIlsxLDJdIiwgIlwic3RyXCIiXSB8ICAxIHwgICAxIHwg ICAxIHwgMSAgICAgICB8IDEgICAgICAgfCAgICAgIHwgICAgICAgMSB8IDEgICAgICAgICAg ICB8IDEgICAgICAgICAgICB8IDEgICAgICAgICAgICB8IDEgICAgfCAxICAgIHwgMSAgICAg ICAgICAgIHwgMSAgICAgICAgICAgIHwgICAgIHwgICAgICB8IGYgICAgICAgfCAgICAgICAw IHwgICAgICAgICB8IGZhbHNlICAgfCAxICAgICAgICAgICAgfCBbMV0gICAgICAgICAgICB8 IDEKKyBbMSwgMS4yMywgIjIiLCAiYWFhYWFhYSIsICJmb28iLCBudWxsLCBmYWxzZSwgdHJ1 ZSwgeyJhYWEiOiAxMjN9LCAiWzEsMl0iLCAiXCJzdHJcIiJdIHwgIDIgfCAgIDIgfCAgIDEg fCAxLjIzICAgIHwgMS4yMyAgICB8ICAgICAgfCAgICAxLjIzIHwgMS4yMyAgICAgICAgIHwg MS4yMyAgICAgICAgIHwgMS4yMyAgICAgICAgIHwgMS4yMyB8IDEuMjMgfCAxLjIzICAgICAg ICAgfCAxLjIzICAgICAgICAgfCAgICAgfCAgICAgIHwgZiAgICAgICB8ICAgICAgIDAgfCAg ICAgICAgIHwgZmFsc2UgICB8IDEuMjMgICAgICAgICB8IFsxLjIzXSAgICAgICAgIHwgMS4y MworIFsxLCAxLjIzLCAiMiIsICJhYWFhYWFhIiwgImZvbyIsIG51bGwsIGZhbHNlLCB0cnVl LCB7ImFhYSI6IDEyM30sICJbMSwyXSIsICJcInN0clwiIl0gfCAgMyB8ICAgMyB8ICAgMiB8 IDIgICAgICAgfCAyICAgICAgIHwgICAgICB8ICAgICAgIDIgfCAiMiIgICAgICAgICAgfCAi MiIgICAgICAgICAgfCAiMiIgICAgICAgICAgfCAiMiIgIHwgIjIiICB8ICIyIiAgICAgICAg ICB8IDIgICAgICAgICAgICB8ICAgICB8ICAgICAgfCBmICAgICAgIHwgICAgICAgMCB8ICAg ICAgICAgfCBmYWxzZSAgIHwgIjIiICAgICAgICAgIHwgWyIyIl0gICAgICAgICAgfCAyCisg WzEsIDEuMjMsICIyIiwgImFhYWFhYWEiLCAiZm9vIiwgbnVsbCwgZmFsc2UsIHRydWUsIHsi YWFhIjogMTIzfSwgIlsxLDJdIiwgIlwic3RyXCIiXSB8ICA0IHwgICA0IHwgICAgIHwgYWFh YWFhYSB8IGFhYWEgICAgfCAgICAgIHwgICAgICAgICB8ICJhYWFhYWFhIiAgICB8ICJhYWFh YWFhIiAgICB8ICJhYWFhYWFhIiAgICB8ICJhYWEgfCAiYWFhIHwgImFhYWFhYWEiICAgIHwg ICAgICAgICAgICAgIHwgICAgIHwgICAgICB8IGYgICAgICAgfCAgICAgICAwIHwgICAgICAg ICB8IGZhbHNlICAgfCAiYWFhYWFhYSIgICAgfCBbImFhYWFhYWEiXSAgICB8IAorIFsxLCAx LjIzLCAiMiIsICJhYWFhYWFhIiwgImZvbyIsIG51bGwsIGZhbHNlLCB0cnVlLCB7ImFhYSI6 IDEyM30sICJbMSwyXSIsICJcInN0clwiIl0gfCAgNSB8ICAgNSB8ICAgICB8IGZvbyAgICAg fCBmb28gICAgIHwgICAgICB8ICAgICAgICAgfCAiZm9vIiAgICAgICAgfCAiZm9vIiAgICAg ICAgfCAiZm9vIiAgICAgICAgfCAiZm9vIHwgImZvbyB8ICJmb28iICAgICAgICB8ICAgICAg ICAgICAgICB8ICAgICB8ICAgICAgfCBmICAgICAgIHwgICAgICAgMCB8ICAgICAgICAgfCBm YWxzZSAgIHwgImZvbyIgICAgICAgIHwgWyJmb28iXSAgICAgICAgfCAKKyBbMSwgMS4yMywg IjIiLCAiYWFhYWFhYSIsICJmb28iLCBudWxsLCBmYWxzZSwgdHJ1ZSwgeyJhYWEiOiAxMjN9 LCAiWzEsMl0iLCAiXCJzdHJcIiJdIHwgIDYgfCAgIDYgfCAgICAgfCAgICAgICAgIHwgICAg ICAgICB8ICAgICAgfCAgICAgICAgIHwgbnVsbCAgICAgICAgIHwgbnVsbCAgICAgICAgIHwg bnVsbCAgICAgICAgIHwgbnVsbCB8IG51bGwgfCBudWxsICAgICAgICAgfCBudWxsICAgICAg ICAgfCAgICAgfCAgICAgIHwgZiAgICAgICB8ICAgICAgIDAgfCAgICAgICAgIHwgZmFsc2Ug ICB8IG51bGwgICAgICAgICB8IFtudWxsXSAgICAgICAgIHwgbnVsbAorIFsxLCAxLjIzLCAi MiIsICJhYWFhYWFhIiwgImZvbyIsIG51bGwsIGZhbHNlLCB0cnVlLCB7ImFhYSI6IDEyM30s ICJbMSwyXSIsICJcInN0clwiIl0gfCAgNyB8ICAgNyB8ICAgMCB8IGZhbHNlICAgfCBmYWxz ICAgIHwgZiAgICB8ICAgICAgICAgfCBmYWxzZSAgICAgICAgfCBmYWxzZSAgICAgICAgfCBm YWxzZSAgICAgICAgfCBmYWxzIHwgZmFscyB8IGZhbHNlICAgICAgICB8IGZhbHNlICAgICAg ICB8ICAgICB8ICAgICAgfCBmICAgICAgIHwgICAgICAgMCB8ICAgICAgICAgfCBmYWxzZSAg IHwgZmFsc2UgICAgICAgIHwgW2ZhbHNlXSAgICAgICAgfCBmYWxzZQorIFsxLCAxLjIzLCAi MiIsICJhYWFhYWFhIiwgImZvbyIsIG51bGwsIGZhbHNlLCB0cnVlLCB7ImFhYSI6IDEyM30s ICJbMSwyXSIsICJcInN0clwiIl0gfCAgOCB8ICAgOCB8ICAgMSB8IHRydWUgICAgfCB0cnVl ICAgIHwgdCAgICB8ICAgICAgICAgfCB0cnVlICAgICAgICAgfCB0cnVlICAgICAgICAgfCB0 cnVlICAgICAgICAgfCB0cnVlIHwgdHJ1ZSB8IHRydWUgICAgICAgICB8IHRydWUgICAgICAg ICB8ICAgICB8ICAgICAgfCBmICAgICAgIHwgICAgICAgMCB8ICAgICAgICAgfCBmYWxzZSAg IHwgdHJ1ZSAgICAgICAgIHwgW3RydWVdICAgICAgICAgfCB0cnVlCisgWzEsIDEuMjMsICIy IiwgImFhYWFhYWEiLCAiZm9vIiwgbnVsbCwgZmFsc2UsIHRydWUsIHsiYWFhIjogMTIzfSwg IlsxLDJdIiwgIlwic3RyXCIiXSB8ICA5IHwgICA5IHwgICAgIHwgICAgICAgICB8ICAgICAg ICAgfCAgICAgIHwgICAgICAgICB8IHsiYWFhIjogMTIzfSB8IHsiYWFhIjogMTIzfSB8IHsi YWFhIjogMTIzfSB8IHsiYWEgfCB7ImFhIHwgeyJhYWEiOiAxMjN9IHwgeyJhYWEiOiAxMjN9 IHwgMTIzIHwgIDEyMyB8IHQgICAgICAgfCAgICAgICAxIHwgICAgICAgMSB8IHRydWUgICAg fCB7ImFhYSI6IDEyM30gfCBbeyJhYWEiOiAxMjN9XSB8IHsiYWFhIjogMTIzfQorIFsxLCAx LjIzLCAiMiIsICJhYWFhYWFhIiwgImZvbyIsIG51bGwsIGZhbHNlLCB0cnVlLCB7ImFhYSI6 IDEyM30sICJbMSwyXSIsICJcInN0clwiIl0gfCAxMCB8ICAxMCB8ICAgICB8IFsxLDJdICAg fCBbMSwyICAgIHwgICAgICB8ICAgICAgICAgfCAiWzEsMl0iICAgICAgfCAiWzEsMl0iICAg ICAgfCAiWzEsMl0iICAgICAgfCAiWzEsIHwgIlsxLCB8ICJbMSwyXSIgICAgICB8IFsxLCAy XSAgICAgICB8ICAgICB8ICAgICAgfCBmICAgICAgIHwgICAgICAgMCB8ICAgICAgICAgfCBm YWxzZSAgIHwgIlsxLDJdIiAgICAgIHwgWyJbMSwyXSJdICAgICAgfCBbMSwgMl0KKyBbMSwg MS4yMywgIjIiLCAiYWFhYWFhYSIsICJmb28iLCBudWxsLCBmYWxzZSwgdHJ1ZSwgeyJhYWEi OiAxMjN9LCAiWzEsMl0iLCAiXCJzdHJcIiJdIHwgMTEgfCAgMTEgfCAgICAgfCAic3RyIiAg IHwgInN0ciAgICB8ICAgICAgfCAgICAgICAgIHwgIlwic3RyXCIiICAgIHwgIlwic3RyXCIi ICAgIHwgIlwic3RyXCIiICAgIHwgIlwicyB8ICJcInMgfCAiXCJzdHJcIiIgICAgfCAic3Ry IiAgICAgICAgfCAgICAgfCAgICAgIHwgZiAgICAgICB8ICAgICAgIDAgfCAgICAgICAgIHwg ZmFsc2UgICB8ICJcInN0clwiIiAgICB8IFsiXCJzdHJcIiJdICAgIHwgInN0ciIKICgxNCBy b3dzKQogCiAtLSBKU09OX1RBQkxFOiBUZXN0IGJhY2t3YXJkIHBhcnNpbmcKQEAgLTExMjMs NyArMTI2OCw2IEBAIFNFTEVDVCAqIEZST00KIAkJCSJjaGFyKDQpIiBjaGFyKDQpIFBBVEgg JyQnLAogCQkJImJvb2wiIGJvb2wgUEFUSCAnJCcsCiAJCQkibnVtZXJpYyIgbnVtZXJpYyBQ QVRIICckJywKLQkJCSJkb21haW4iIGpzb25iX3Rlc3RfZG9tYWluIFBBVEggJyQnLAogCQkJ anMganNvbiBQQVRIICckJywKIAkJCWpiIGpzb25iIFBBVEggJyQnLAogCQkJanN0IHRleHQg ICAgRk9STUFUIEpTT04gIFBBVEggJyQnLApAQCAtMTEzOSw5ICsxMjgzLDYgQEAgU0VMRUNU ICogRlJPTQogCQkJanMyIGpzb24gUEFUSCAnJCcsCiAJCQlqc2IydyBqc29uYiBQQVRIICck JyBXSVRIIFdSQVBQRVIsCiAJCQlqc2IycSBqc29uYiBQQVRIICckJyBPTUlUIFFVT1RFUywK LQkJCWlhIGludFtdIFBBVEggJyQnLAotCQkJdGEgdGV4dFtdIFBBVEggJyQnLAotCQkJamJh IGpzb25iW10gUEFUSCAnJCcsCiAJCQlORVNURUQgUEFUSCAnJFsxXScgQVMgcDEgQ09MVU1O UyAoCiAJCQkJYTEgaW50LAogCQkJCU5FU1RFRCBQQVRIICckWypdJyBBUyAicDEgMSIgQ09M VU1OUyAoCkBAIC0xMTY4LDcgKzEzMDksNiBAQCBDUkVBVEUgT1IgUkVQTEFDRSBWSUVXIHB1 YmxpYy5qc29uYl90YWJsZV92aWV3IEFTCiAgICAgImpzb25fdGFibGUiLiJjaGFyKDQpIiwK ICAgICAianNvbl90YWJsZSIuYm9vbCwKICAgICAianNvbl90YWJsZSIuIm51bWVyaWMiLAot ICAgICJqc29uX3RhYmxlIi5kb21haW4sCiAgICAgImpzb25fdGFibGUiLmpzLAogICAgICJq c29uX3RhYmxlIi5qYiwKICAgICAianNvbl90YWJsZSIuanN0LApAQCAtMTE4NCw5ICsxMzI0 LDYgQEAgQ1JFQVRFIE9SIFJFUExBQ0UgVklFVyBwdWJsaWMuanNvbmJfdGFibGVfdmlldyBB UwogICAgICJqc29uX3RhYmxlIi5qczIsCiAgICAgImpzb25fdGFibGUiLmpzYjJ3LAogICAg ICJqc29uX3RhYmxlIi5qc2IycSwKLSAgICAianNvbl90YWJsZSIuaWEsCi0gICAgImpzb25f dGFibGUiLnRhLAotICAgICJqc29uX3RhYmxlIi5qYmEsCiAgICAgImpzb25fdGFibGUiLmEx LAogICAgICJqc29uX3RhYmxlIi5iMSwKICAgICAianNvbl90YWJsZSIuYTExLApAQCAtMTIw NSw3ICsxMzQyLDYgQEAgQ1JFQVRFIE9SIFJFUExBQ0UgVklFVyBwdWJsaWMuanNvbmJfdGFi bGVfdmlldyBBUwogICAgICAgICAgICAgICAgICJjaGFyKDQpIiBjaGFyYWN0ZXIoNCkgUEFU SCAnJCcsCiAgICAgICAgICAgICAgICAgYm9vbCBib29sZWFuIFBBVEggJyQnLAogICAgICAg ICAgICAgICAgICJudW1lcmljIiBudW1lcmljIFBBVEggJyQnLAotICAgICAgICAgICAgICAg IGRvbWFpbiBqc29uYl90ZXN0X2RvbWFpbiBQQVRIICckJywKICAgICAgICAgICAgICAgICBq cyBqc29uIFBBVEggJyQnLAogICAgICAgICAgICAgICAgIGpiIGpzb25iIFBBVEggJyQnLAog ICAgICAgICAgICAgICAgIGpzdCB0ZXh0IEZPUk1BVCBKU09OIFBBVEggJyQnLApAQCAtMTIy MSw5ICsxMzU3LDYgQEAgQ1JFQVRFIE9SIFJFUExBQ0UgVklFVyBwdWJsaWMuanNvbmJfdGFi bGVfdmlldyBBUwogICAgICAgICAgICAgICAgIGpzMiBqc29uIFBBVEggJyQnLAogICAgICAg ICAgICAgICAgIGpzYjJ3IGpzb25iIFBBVEggJyQnIFdJVEggVU5DT05ESVRJT05BTCBXUkFQ UEVSLAogICAgICAgICAgICAgICAgIGpzYjJxIGpzb25iIFBBVEggJyQnIE9NSVQgUVVPVEVT LAotICAgICAgICAgICAgICAgIGlhIGludGVnZXJbXSBQQVRIICckJywKLSAgICAgICAgICAg ICAgICB0YSB0ZXh0W10gUEFUSCAnJCcsCi0gICAgICAgICAgICAgICAgamJhIGpzb25iW10g UEFUSCAnJCcsCiAgICAgICAgICAgICAgICAgTkVTVEVEIFBBVEggJyRbMV0nIEFTIHAxCiAg ICAgICAgICAgICAgICAgQ09MVU1OUyAoCiAgICAgICAgICAgICAgICAgICAgIGExIGludGVn ZXIgUEFUSCAnJC4iYTEiJywKQEAgLTEyNDgsMTUgKzEzODEsMTQgQEAgQ1JFQVRFIE9SIFJF UExBQ0UgVklFVyBwdWJsaWMuanNvbmJfdGFibGVfdmlldyBBUwogICAgICAgICAgICAgUExB TiAoanNvbl90YWJsZV9wYXRoXzEgT1VURVIgKChwMSBPVVRFUiAicDEgMSIpIFVOSU9OIChw MiBPVVRFUiAoInAyOjEiIFVOSU9OIHAyMikpKSkKICAgICAgICAgKQogRVhQTEFJTiAoQ09T VFMgT0ZGLCBWRVJCT1NFKSBTRUxFQ1QgKiBGUk9NIGpzb25iX3RhYmxlX3ZpZXc7Ci0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVF UlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQogIFRhYmxlIEZ1bmN0aW9uIFNjYW4gb24gImpzb25fdGFibGUi Ci0gICBPdXRwdXQ6ICJqc29uX3RhYmxlIi5pZCwgImpzb25fdGFibGUiLmlkMiwgImpzb25f dGFibGUiLiJpbnQiLCAianNvbl90YWJsZSIudGV4dCwgImpzb25fdGFibGUiLiJjaGFyKDQp IiwgImpzb25fdGFibGUiLmJvb2wsICJqc29uX3RhYmxlIi4ibnVtZXJpYyIsICJqc29uX3Rh YmxlIi5kb21haW4sICJqc29uX3RhYmxlIi5qcywgImpzb25fdGFibGUiLmpiLCAianNvbl90 YWJsZSIuanN0LCAianNvbl90YWJsZSIuanNjLCAianNvbl90YWJsZSIuanN2LCAianNvbl90 YWJsZSIuanNiLCAianNvbl90YWJsZSIuanNicSwgImpzb25fdGFibGUiLmFhYSwgImpzb25f dGFibGUiLmFhYTEsICJqc29uX3RhYmxlIi5leGlzdHMxLCAianNvbl90YWJsZSIuZXhpc3Rz MiwgImpzb25fdGFibGUiLmV4aXN0czMsICJqc29uX3RhYmxlIi5qczIsICJqc29uX3RhYmxl Ii5qc2IydywgImpzb25fdGFibGUiLmpzYjJxLCAianNvbl90YWJsZSIuaWEsICJqc29uX3Rh YmxlIi50YSwgImpzb25fdGFibGUiLmpiYSwgImpzb25fdGFibGUiLmExLCAianNvbl90YWJs ZSIuYjEsICJqc29uX3RhYmxlIi5hMTEsICJqc29uX3RhYmxlIi5hMjEsICJqc29uX3RhYmxl Ii5hMjIKLSAgIFRhYmxlIEZ1bmN0aW9uIENhbGw6IEpTT05fVEFCTEUoJ251bGwnOjpqc29u YiwgJyRbKl0nIEFTIGpzb25fdGFibGVfcGF0aF8xIFBBU1NJTkcgMyBBUyBhLCAnImZvbyIn Ojpqc29uYiBBUyAiYiBjIiBDT0xVTU5TIChpZCBGT1IgT1JESU5BTElUWSwgaWQyIEZPUiBP UkRJTkFMSVRZLCAiaW50IiBpbnRlZ2VyIFBBVEggJyQnLCB0ZXh0IHRleHQgUEFUSCAnJCcs ICJjaGFyKDQpIiBjaGFyYWN0ZXIoNCkgUEFUSCAnJCcsIGJvb2wgYm9vbGVhbiBQQVRIICck JywgIm51bWVyaWMiIG51bWVyaWMgUEFUSCAnJCcsIGRvbWFpbiBqc29uYl90ZXN0X2RvbWFp biBQQVRIICckJywganMganNvbiBQQVRIICckJywgamIganNvbmIgUEFUSCAnJCcsIGpzdCB0 ZXh0IEZPUk1BVCBKU09OIFBBVEggJyQnLCBqc2MgY2hhcmFjdGVyKDQpIEZPUk1BVCBKU09O IFBBVEggJyQnLCBqc3YgY2hhcmFjdGVyIHZhcnlpbmcoNCkgRk9STUFUIEpTT04gUEFUSCAn JCcsIGpzYiBqc29uYiBQQVRIICckJywganNicSBqc29uYiBQQVRIICckJyBPTUlUIFFVT1RF UywgYWFhIGludGVnZXIgUEFUSCAnJC4iYWFhIicsIGFhYTEgaW50ZWdlciBQQVRIICckLiJh YWEiJywgZXhpc3RzMSBib29sZWFuIEVYSVNUUyBQQVRIICckLiJhYWEiJywgZXhpc3RzMiBp bnRlZ2VyIEVYSVNUUyBQQVRIICckLiJhYWEiJyBUUlVFIE9OIEVSUk9SLCBleGlzdHMzIHRl eHQgRVhJU1RTIFBBVEggJ3N0cmljdCAkLiJhYWEiJyBVTktOT1dOIE9OIEVSUk9SLCBqczIg anNvbiBQQVRIICckJywganNiMncganNvbmIgUEFUSCAnJCcgV0lUSCBVTkNPTkRJVElPTkFM IFdSQVBQRVIsIGpzYjJxIGpzb25iIFBBVEggJyQnIE9NSVQgUVVPVEVTLCBpYSBpbnRlZ2Vy W10gUEFUSCAnJCcsIHRhIHRleHRbXSBQQVRIICckJywgamJhIGpzb25iW10gUEFUSCAnJCcs IE5FU1RFRCBQQVRIICckWzFdJyBBUyBwMSBDT0xVTU5TIChhMSBpbnRlZ2VyIFBBVEggJyQu ImExIicsIGIxIHRleHQgUEFUSCAnJC4iYjEiJywgTkVTVEVEIFBBVEggJyRbKl0nIEFTICJw MSAxIiBDT0xVTU5TIChhMTEgdGV4dCBQQVRIICckLiJhMTEiJykpLCBORVNURUQgUEFUSCAn JFsyXScgQVMgcDIgQ09MVU1OUyAoIE5FU1RFRCBQQVRIICckWypdJyBBUyAicDI6MSIgQ09M VU1OUyAoYTIxIHRleHQgUEFUSCAnJC4iYTIxIicpLCBORVNURUQgUEFUSCAnJFsqXScgQVMg cDIyIENPTFVNTlMgKGEyMiB0ZXh0IFBBVEggJyQuImEyMiInKSkpIFBMQU4gKGpzb25fdGFi bGVfcGF0aF8xIE9VVEVSICgocDEgT1VURVIgInAxIDEiKSBVTklPTiAocDIgT1VURVIgKCJw MjoxIiBVTklPTiBwMjIpKSkpKQorICAgT3V0cHV0OiAianNvbl90YWJsZSIuaWQsICJqc29u X3RhYmxlIi5pZDIsICJqc29uX3RhYmxlIi4iaW50IiwgImpzb25fdGFibGUiLnRleHQsICJq c29uX3RhYmxlIi4iY2hhcig0KSIsICJqc29uX3RhYmxlIi5ib29sLCAianNvbl90YWJsZSIu Im51bWVyaWMiLCAianNvbl90YWJsZSIuanMsICJqc29uX3RhYmxlIi5qYiwgImpzb25fdGFi bGUiLmpzdCwgImpzb25fdGFibGUiLmpzYywgImpzb25fdGFibGUiLmpzdiwgImpzb25fdGFi bGUiLmpzYiwgImpzb25fdGFibGUiLmpzYnEsICJqc29uX3RhYmxlIi5hYWEsICJqc29uX3Rh YmxlIi5hYWExLCAianNvbl90YWJsZSIuZXhpc3RzMSwgImpzb25fdGFibGUiLmV4aXN0czIs ICJqc29uX3RhYmxlIi5leGlzdHMzLCAianNvbl90YWJsZSIuanMyLCAianNvbl90YWJsZSIu anNiMncsICJqc29uX3RhYmxlIi5qc2IycSwgImpzb25fdGFibGUiLmExLCAianNvbl90YWJs ZSIuYjEsICJqc29uX3RhYmxlIi5hMTEsICJqc29uX3RhYmxlIi5hMjEsICJqc29uX3RhYmxl Ii5hMjIKKyAgIFRhYmxlIEZ1bmN0aW9uIENhbGw6IEpTT05fVEFCTEUoJ251bGwnOjpqc29u YiwgJyRbKl0nIEFTIGpzb25fdGFibGVfcGF0aF8xIFBBU1NJTkcgMyBBUyBhLCAnImZvbyIn Ojpqc29uYiBBUyAiYiBjIiBDT0xVTU5TIChpZCBGT1IgT1JESU5BTElUWSwgaWQyIEZPUiBP UkRJTkFMSVRZLCAiaW50IiBpbnRlZ2VyIFBBVEggJyQnLCB0ZXh0IHRleHQgUEFUSCAnJCcs ICJjaGFyKDQpIiBjaGFyYWN0ZXIoNCkgUEFUSCAnJCcsIGJvb2wgYm9vbGVhbiBQQVRIICck JywgIm51bWVyaWMiIG51bWVyaWMgUEFUSCAnJCcsIGpzIGpzb24gUEFUSCAnJCcsIGpiIGpz b25iIFBBVEggJyQnLCBqc3QgdGV4dCBGT1JNQVQgSlNPTiBQQVRIICckJywganNjIGNoYXJh Y3Rlcig0KSBGT1JNQVQgSlNPTiBQQVRIICckJywganN2IGNoYXJhY3RlciB2YXJ5aW5nKDQp IEZPUk1BVCBKU09OIFBBVEggJyQnLCBqc2IganNvbmIgUEFUSCAnJCcsIGpzYnEganNvbmIg UEFUSCAnJCcgT01JVCBRVU9URVMsIGFhYSBpbnRlZ2VyIFBBVEggJyQuImFhYSInLCBhYWEx IGludGVnZXIgUEFUSCAnJC4iYWFhIicsIGV4aXN0czEgYm9vbGVhbiBFWElTVFMgUEFUSCAn JC4iYWFhIicsIGV4aXN0czIgaW50ZWdlciBFWElTVFMgUEFUSCAnJC4iYWFhIicgVFJVRSBP TiBFUlJPUiwgZXhpc3RzMyB0ZXh0IEVYSVNUUyBQQVRIICdzdHJpY3QgJC4iYWFhIicgVU5L Tk9XTiBPTiBFUlJPUiwganMyIGpzb24gUEFUSCAnJCcsIGpzYjJ3IGpzb25iIFBBVEggJyQn IFdJVEggVU5DT05ESVRJT05BTCBXUkFQUEVSLCBqc2IycSBqc29uYiBQQVRIICckJyBPTUlU IFFVT1RFUywgTkVTVEVEIFBBVEggJyRbMV0nIEFTIHAxIENPTFVNTlMgKGExIGludGVnZXIg UEFUSCAnJC4iYTEiJywgYjEgdGV4dCBQQVRIICckLiJiMSInLCBORVNURUQgUEFUSCAnJFsq XScgQVMgInAxIDEiIENPTFVNTlMgKGExMSB0ZXh0IFBBVEggJyQuImExMSInKSksIE5FU1RF RCBQQVRIICckWzJdJyBBUyBwMiBDT0xVTU5TICggTkVTVEVEIFBBVEggJyRbKl0nIEFTICJw MjoxIiBDT0xVTU5TIChhMjEgdGV4dCBQQVRIICckLiJhMjEiJyksIE5FU1RFRCBQQVRIICck WypdJyBBUyBwMjIgQ09MVU1OUyAoYTIyIHRleHQgUEFUSCAnJC4iYTIyIicpKSkgUExBTiAo anNvbl90YWJsZV9wYXRoXzEgT1VURVIgKChwMSBPVVRFUiAicDEgMSIpIFVOSU9OIChwMiBP VVRFUiAoInAyOjEiIFVOSU9OIHAyMikpKSkpCiAoMyByb3dzKQogCiBEUk9QIFZJRVcganNv bmJfdGFibGVfdmlldzsKLURST1AgRE9NQUlOIGpzb25iX3Rlc3RfZG9tYWluOwogLS0gSlNP Tl9UQUJMRTogT04gRU1QVFkvT04gRVJST1IgYmVoYXZpb3IKIFNFTEVDVCAqCiBGUk9NCkBA IC0xMzE4LDE1ICsxNDUwLDE1IEBAIFNFTEVDVCAqIEZST00gSlNPTl9UQUJMRShqc29uYiAn ImEiJywgJyQnIENPTFVNTlMgKGEgaW50NCBFWElTVFMgUEFUSCAnJC5hJykpOwogKDEgcm93 KQogCiBTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoanNvbmIgJyJhIicsICckJyBDT0xVTU5T IChhIGludDIgRVhJU1RTIFBBVEggJyQuYScpKTsKLUVSUk9SOiAgY2Fubm90IGNhc3QgdHlw ZSBib29sZWFuIHRvIHNtYWxsaW50CitFUlJPUjogIHJldHVybmluZyB0eXBlIHNtYWxsaW50 IGlzIG5vdCBzdXBwb3J0ZWQgaW4gSlNPTl9FWElTVFMoKQogTElORSAxOiAuLi5FTEVDVCAq IEZST00gSlNPTl9UQUJMRShqc29uYiAnImEiJywgJyQnIENPTFVNTlMgKGEgaW50MiBFWEku Li4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBeCiBTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoanNvbmIgJyJhIicsICck JyBDT0xVTU5TIChhIGludDggRVhJU1RTIFBBVEggJyQuYScpKTsKLUVSUk9SOiAgY2Fubm90 IGNhc3QgdHlwZSBib29sZWFuIHRvIGJpZ2ludAorRVJST1I6ICByZXR1cm5pbmcgdHlwZSBi aWdpbnQgaXMgbm90IHN1cHBvcnRlZCBpbiBKU09OX0VYSVNUUygpCiBMSU5FIDE6IC4uLkVM RUNUICogRlJPTSBKU09OX1RBQkxFKGpzb25iICciYSInLCAnJCcgQ09MVU1OUyAoYSBpbnQ4 IEVYSS4uLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF4KIFNFTEVDVCAqIEZST00gSlNPTl9UQUJMRShqc29uYiAnImEi JywgJyQnIENPTFVNTlMgKGEgZmxvYXQ0IEVYSVNUUyBQQVRIICckLmEnKSk7Ci1FUlJPUjog IGNhbm5vdCBjYXN0IHR5cGUgYm9vbGVhbiB0byByZWFsCitFUlJPUjogIHJldHVybmluZyB0 eXBlIHJlYWwgaXMgbm90IHN1cHBvcnRlZCBpbiBKU09OX0VYSVNUUygpCiBMSU5FIDE6IC4u LkVMRUNUICogRlJPTSBKU09OX1RBQkxFKGpzb25iICciYSInLCAnJCcgQ09MVU1OUyAoYSBm bG9hdDQgRS4uLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF4KIFNFTEVDVCAqIEZST00gSlNPTl9UQUJMRShqc29uYiAn ImEiJywgJyQnIENPTFVNTlMgKGEgY2hhcigzKSBFWElTVFMgUEFUSCAnJC5hJykpOwpAQCAt MTMzNiwxMSArMTQ2OCwxMSBAQCBTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoanNvbmIgJyJh IicsICckJyBDT0xVTU5TIChhIGNoYXIoMykgRVhJU1RTIFBBVEggJyQuYScpKQogKDEgcm93 KQogCiBTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoanNvbmIgJyJhIicsICckJyBDT0xVTU5T IChhIGpzb24gRVhJU1RTIFBBVEggJyQuYScpKTsKLUVSUk9SOiAgY2Fubm90IGNhc3QgdHlw ZSBib29sZWFuIHRvIGpzb24KK0VSUk9SOiAgcmV0dXJuaW5nIHR5cGUganNvbiBpcyBub3Qg c3VwcG9ydGVkIGluIEpTT05fRVhJU1RTKCkKIExJTkUgMTogLi4uRUxFQ1QgKiBGUk9NIEpT T05fVEFCTEUoanNvbmIgJyJhIicsICckJyBDT0xVTU5TIChhIGpzb24gRVhJLi4uCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXgogU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKGpzb25iICciYSInLCAnJCcgQ09MVU1O UyAoYSBqc29uYiBFWElTVFMgUEFUSCAnJC5hJykpOwotRVJST1I6ICBjYW5ub3QgY2FzdCB0 eXBlIGJvb2xlYW4gdG8ganNvbmIKK0VSUk9SOiAgcmV0dXJuaW5nIHR5cGUganNvbmIgaXMg bm90IHN1cHBvcnRlZCBpbiBKU09OX0VYSVNUUygpCiBMSU5FIDE6IC4uLkVMRUNUICogRlJP TSBKU09OX1RBQkxFKGpzb25iICciYSInLCAnJCcgQ09MVU1OUyAoYSBqc29uYiBFWC4uLgog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF4KIC0tIEpTT05fVEFCTEU6IG5lc3RlZCBwYXRocyBhbmQgcGxhbnMKQEAgLTIx MDIsMTEgKzIyMzQsMTQgQEAgc2V0IHBhcmFsbGVsX2xlYWRlcl9wYXJ0aWNpcGF0aW9uID0g b2ZmOwogLS0gU2hvdWxkIGJlIG5vbi1wYXJhbGxlbCBkdWUgdG8gc3VidHJhbnNhY3Rpb25z CiBFWFBMQUlOIChDT1NUUyBPRkYpCiBTRUxFQ1Qgc3VtKEpTT05fVkFMVUUoanMsICckJyBS RVRVUk5JTkcgbnVtZXJpYykpIEZST00gdGVzdF9wYXJhbGxlbF9qc29uYl92YWx1ZTsKLSAg ICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgIAotLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gQWdncmVnYXRlCi0gICAt PiAgU2VxIFNjYW4gb24gdGVzdF9wYXJhbGxlbF9qc29uYl92YWx1ZQotKDIgcm93cykKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAg ICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgRmluYWxpemUgQWdncmVnYXRlCisgICAtPiAg R2F0aGVyCisgICAgICAgICBXb3JrZXJzIFBsYW5uZWQ6IDQKKyAgICAgICAgIC0+ICBQYXJ0 aWFsIEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAgLT4gIFBhcmFsbGVsIFNlcSBTY2FuIG9u IHRlc3RfcGFyYWxsZWxfanNvbmJfdmFsdWUKKyg1IHJvd3MpCiAKIFNFTEVDVCBzdW0oSlNP Tl9WQUxVRShqcywgJyQnIFJFVFVSTklORyBudW1lcmljKSkgRlJPTSB0ZXN0X3BhcmFsbGVs X2pzb25iX3ZhbHVlOwogICAgIHN1bSAgICAgCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdy ZXNzL3NxbC9qc29uYl9zcWxqc29uLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2pzb25i X3NxbGpzb24uc3FsCmluZGV4IGZmZjI1Mzc0ODA4Li40M2ExOTRhZDA5ZiAxMDA2NDQKLS0t IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvanNvbmJfc3FsanNvbi5zcWwKKysrIGIvc3JjL3Rl c3QvcmVncmVzcy9zcWwvanNvbmJfc3FsanNvbi5zcWwKQEAgLTgyLDEyICs4Miw0MyBAQCBT RUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnIjEyMyInLCAnJCcgUkVUVVJOSU5HIGludCkgKyAy MzQ7CiAKIFNFTEVDVCBKU09OX1ZBTFVFKGpzb25iICciMjAxNy0wMi0yMCInLCAnJCcgUkVU VVJOSU5HIGRhdGUpICsgOTsKIAotLS0gVGVzdCBOVUxMIGNoZWNrcyBleGVjdXRpb24gaW4g ZG9tYWluIHR5cGVzCitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAgJzEuMjMnLCAgJyQnIFJF VFVSTklORyBmbG9hdDQpOworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJyIxLjIzIicsICck JyBSRVRVUk5JTkcgZmxvYXQ0KTsKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICAnIm5hbiIn LCAnJCcgUkVUVVJOSU5HIGZsb2F0NCk7CitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnIi1p bmYiJywgJyQnIFJFVFVSTklORyBmbG9hdDQpOworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIg JyJlcnIiJywgJyQnIFJFVFVSTklORyBmbG9hdDQgREVGQVVMVCAtMSBPTiBFUlJPUik7CitT RUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnImVyciInLCAnJCcgUkVUVVJOSU5HIGZsb2F0NCBF UlJPUiBPTiBFUlJPUik7CisKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICAnMS4yMycsICAn JCcgUkVUVVJOSU5HIGZsb2F0OCk7CitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnIjEuMjMi JywgJyQnIFJFVFVSTklORyBmbG9hdDgpOworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgICci bmFuIicsICckJyBSRVRVUk5JTkcgZmxvYXQ4KTsKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25i ICciLWluZiInLCAnJCcgUkVUVVJOSU5HIGZsb2F0OCk7CitTRUxFQ1QgSlNPTl9WQUxVRShq c29uYiAnImVyciInLCAnJCcgUkVUVVJOSU5HIGZsb2F0OCBERUZBVUxUIC0xIE9OIEVSUk9S KTsKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICciZXJyIicsICckJyBSRVRVUk5JTkcgZmxv YXQ4IEVSUk9SIE9OIEVSUk9SKTsKKworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgICcxLjIz JywgICckJyBSRVRVUk5JTkcgbnVtZXJpYyk7CitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAn IjEuMjMiJywgJyQnIFJFVFVSTklORyBudW1lcmljKTsKK1NFTEVDVCBKU09OX1ZBTFVFKGpz b25iICAnIm5hbiInLCAnJCcgUkVUVVJOSU5HIG51bWVyaWMpOworU0VMRUNUIEpTT05fVkFM VUUoanNvbmIgJyItaW5mIicsICckJyBSRVRVUk5JTkcgbnVtZXJpYyk7CitTRUxFQ1QgSlNP Tl9WQUxVRShqc29uYiAnImVyciInLCAnJCcgUkVUVVJOSU5HIG51bWVyaWMgREVGQVVMVCAt MSBPTiBFUlJPUik7CitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnImVyciInLCAnJCcgUkVU VVJOSU5HIG51bWVyaWMgRVJST1IgT04gRVJST1IpOworCistLSBUZXN0IGZvciBkb21haW4g dHlwZXMKIENSRUFURSBET01BSU4gc3FsanNvbmJfaW50X25vdF9udWxsIEFTIGludCBOT1Qg TlVMTDsKK0NSRUFURSBET01BSU4gc3FsanNvbmJfanNvbl9ub3RfbnVsbCBBUyBqc29uIE5P VCBOVUxMIENIRUNLIChWQUxVRTo6dGV4dCA8PiAnMCcpOworQ1JFQVRFIERPTUFJTiBzcWxq c29uYl9qc29uYl9ub3RfbnVsbCBBUyBqc29uYiBOT1QgTlVMTCBDSEVDSyAoVkFMVUUgPD4g JzAnKTsKKworLS0gVGVzdCBjYXN0aW5nIHRvIGpzb25bYl0gZG9tYWlucyAoaXRlbXMgY2Fz dGVkIGFzIGlzLCBzdHJpbmdzIGFyZSBub3QgdW5xdW90ZWQpCitTRUxFQ1QgSlNPTl9WQUxV RShqc29uYiAnIjEiJywgJyQnIFJFVFVSTklORyBzcWxqc29uYl9qc29uX25vdF9udWxsKTsK K1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICciMSInLCAnJCcgUkVUVVJOSU5HIHNxbGpzb25i X2pzb25iX25vdF9udWxsKTsKKworLS0gVGVzdCBOVUxMIGNoZWNrcyBleGVjdXRpb24gaW4g ZG9tYWluIHR5cGVzCiBTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnMScsICckLmEnIFJFVFVS TklORyBzcWxqc29uYl9pbnRfbm90X251bGwpOwogU0VMRUNUIEpTT05fVkFMVUUoanNvbmIg JzEnLCAnJC5hJyBSRVRVUk5JTkcgc3FsanNvbmJfaW50X25vdF9udWxsIE5VTEwgT04gRVJS T1IpOwogU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJzEnLCAnJC5hJyBSRVRVUk5JTkcgc3Fs anNvbmJfaW50X25vdF9udWxsIERFRkFVTFQgTlVMTCBPTiBFUlJPUik7CiAKKworLS0gVGVz dCByZXR1cm5pbmcgb2Ygbm9uLXNjYWxhciBpdGVtcwogU0VMRUNUIEpTT05fVkFMVUUoanNv bmIgJ1tdJywgJyQnKTsKIFNFTEVDVCBKU09OX1ZBTFVFKGpzb25iICdbXScsICckJyBFUlJP UiBPTiBFUlJPUik7CiBTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAne30nLCAnJCcpOwpAQCAt MTMzLDYgKzE2NCwxNyBAQCBTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnbnVsbCcsICckdHMn IFBBU1NJTkcgdGltZXN0YW1wdHogJzIwMTgtMDItMjEgMTI6MzQ6NTYgKwogU0VMRUNUIEpT T05fVkFMVUUoanNvbmIgJ251bGwnLCAnJHRzJyBQQVNTSU5HIHRpbWVzdGFtcHR6ICcyMDE4 LTAyLTIxIDEyOjM0OjU2ICsxMCcgQVMgdHMgUkVUVVJOSU5HIGpzb24pOwogU0VMRUNUIEpT T05fVkFMVUUoanNvbmIgJ251bGwnLCAnJHRzJyBQQVNTSU5HIHRpbWVzdGFtcHR6ICcyMDE4 LTAyLTIxIDEyOjM0OjU2ICsxMCcgQVMgdHMgUkVUVVJOSU5HIGpzb25iKTsKIAorLS0gdGVz dCBlcnJvcnMgaW4gREVGQVVMVCBPTiBFTVBUWSBleHByZXNzaW9ucworU0VMRUNUIEpTT05f VkFMVUUoJzEnOjpqc29uYiwgJyQueCcgUkVUVVJOSU5HIGludAorICAgICAgICAgICAgICAg ICAgREVGQVVMVCAxIC8geCBPTiBFTVBUWQorICAgICAgICAgICAgICAgICAgREVGQVVMVCAy IE9OIEVSUk9SKQorRlJPTSAoVkFMVUVTICgxOjppbnQpLCAoMCkpIHgoeCk7CisKK1NFTEVD VCBKU09OX1ZBTFVFKCcxJzo6anNvbmIsICckLngnIFJFVFVSTklORyBpbnQgREVGQVVMVCAt MSBPTiBFTVBUWSk7CitTRUxFQ1QgSlNPTl9WQUxVRSgnMSc6Ompzb25iLCAnJC54JyBSRVRV Uk5JTkcgaW50IERFRkFVTFQgJy0xJyBPTiBFTVBUWSk7CitTRUxFQ1QgSlNPTl9WQUxVRSgn MSc6Ompzb25iLCAnJC54JyBSRVRVUk5JTkcgaW50IERFRkFVTFQgJ2VycicgT04gRU1QVFkp OworU0VMRUNUIEpTT05fVkFMVUUoJzEnOjpqc29uYiwgJyQueCcgUkVUVVJOSU5HIGludCBE RUZBVUxUIC0xOjpmbG9hdCBPTiBFTVBUWSk7CisKIC0tIEpTT05fUVVFUlkKIAogU0VMRUNU CkBAIC0zMTgsNiArMzYwLDIxIEBAIENSRUFURSBJTkRFWCBPTiB0ZXN0X2pzb25iX211dGFi aWxpdHkgKEpTT05fUVVFUlkoanMsICckLmRhdGV0aW1lKCJZWS1NTS1ERCIpID8KIENSRUFU RSBJTkRFWCBPTiB0ZXN0X2pzb25iX211dGFiaWxpdHkgKEpTT05fUVVFUlkoanMsICckWzEs ICQuYSA/IChALmRhdGV0aW1lKCkgPT0gJHgpXScgUEFTU0lORyAnMTI6MzQnOjp0aW1lIEFT IHgpKTsKIENSRUFURSBJTkRFWCBPTiB0ZXN0X2pzb25iX211dGFiaWxpdHkgKEpTT05fUVVF UlkoanMsICckWzEsIDAgdG8gJC5hID8gKEAuZGF0ZXRpbWUoKSA9PSAkeCldJyBQQVNTSU5H ICcxMjozNCc6OnRpbWUgQVMgeCkpOwogQ1JFQVRFIElOREVYIE9OIHRlc3RfanNvbmJfbXV0 YWJpbGl0eSAoSlNPTl9RVUVSWShqcywgJyRbMSwgJC5hID8gKEAuZGF0ZXRpbWUoIkhIOk1J IikgPT0gJHgpXScgUEFTU0lORyAnMTI6MzQnOjp0aW1lIEFTIHgpKTsKKworQ1JFQVRFIElO REVYIE9OIHRlc3RfanNvbmJfbXV0YWJpbGl0eSAoSlNPTl9WQUxVRShqcywgJyQnIFJFVFVS TklORyBpbnQpKTsgLS0gaW1tdXRhYmxlCitDUkVBVEUgSU5ERVggT04gdGVzdF9qc29uYl9t dXRhYmlsaXR5IChKU09OX1ZBTFVFKGpzLCAnJCcgUkVUVVJOSU5HIGRhdGUpKTsKK0NSRUFU RSBJTkRFWCBPTiB0ZXN0X2pzb25iX211dGFiaWxpdHkgKEpTT05fVkFMVUUoanMsICckJyBS RVRVUk5JTkcgdGltZSkpOworQ1JFQVRFIElOREVYIE9OIHRlc3RfanNvbmJfbXV0YWJpbGl0 eSAoSlNPTl9WQUxVRShqcywgJyQnIFJFVFVSTklORyB0aW1ldHopKTsKK0NSRUFURSBJTkRF WCBPTiB0ZXN0X2pzb25iX211dGFiaWxpdHkgKEpTT05fVkFMVUUoanMsICckJyBSRVRVUk5J TkcgdGltZXN0YW1wKSk7CitDUkVBVEUgSU5ERVggT04gdGVzdF9qc29uYl9tdXRhYmlsaXR5 IChKU09OX1ZBTFVFKGpzLCAnJCcgUkVUVVJOSU5HIHRpbWVzdGFtcHR6KSk7CisKK0NSRUFU RSBJTkRFWCBPTiB0ZXN0X2pzb25iX211dGFiaWxpdHkgKEpTT05fVkFMVUUoanMsICckLmRh dGV0aW1lKCknKSk7CitDUkVBVEUgSU5ERVggT04gdGVzdF9qc29uYl9tdXRhYmlsaXR5IChK U09OX1ZBTFVFKGpzLCAnJC5kYXRldGltZSgpWypdWzEsMl0uKionKSk7CitDUkVBVEUgSU5E RVggT04gdGVzdF9qc29uYl9tdXRhYmlsaXR5IChKU09OX1ZBTFVFKGpzLCAnJHgnIFBBU1NJ TkcgJzIwMjItMDgtMjUnOjpkYXRlIEFTIHgpKTsKK0NSRUFURSBJTkRFWCBPTiB0ZXN0X2pz b25iX211dGFiaWxpdHkgKEpTT05fVkFMVUUoanMsICckLmRhdGV0aW1lKCknIFJFVFVSTklO RyBpbnQpKTsgLS0gaW1tdXRhYmxlCisKK0NSRUFURSBJTkRFWCBPTiB0ZXN0X2pzb25iX211 dGFiaWxpdHkgKEpTT05fUVVFUlkoanMsICckLmRhdGV0aW1lKCknKSk7IC0tIGltbXV0YWJs ZQorCiBEUk9QIFRBQkxFIHRlc3RfanNvbmJfbXV0YWJpbGl0eTsKIAogLS0gSlNPTl9UQUJM RQpAQCAtMzM4LDggKzM5NSw2IEBAIFNFTEVDVCAqIEZST00gSlNPTl9UQUJMRShqc29uYiAn MTIzJywgJyQnCiAJQ09MVU1OUyAoaXRlbSBpbnQgUEFUSCAnJCcsIGZvbyBpbnQpKSBiYXI7 CiAKIC0tIEpTT05fVEFCTEU6IGJhc2ljIGZ1bmN0aW9uYWxpdHkKLUNSRUFURSBET01BSU4g anNvbmJfdGVzdF9kb21haW4gQVMgdGV4dCBDSEVDSyAodmFsdWUgPD4gJ2ZvbycpOwotCiBT RUxFQ1QgKgogRlJPTQogCShWQUxVRVMKQEAgLTM2MCw3ICs0MTUsNiBAQCBGUk9NCiAJCQki Y2hhcig0KSIgY2hhcig0KSBQQVRIICckJywKIAkJCSJib29sIiBib29sIFBBVEggJyQnLAog CQkJIm51bWVyaWMiIG51bWVyaWMgUEFUSCAnJCcsCi0JCQkiZG9tYWluIiBqc29uYl90ZXN0 X2RvbWFpbiBQQVRIICckJywKIAkJCWpzIGpzb24gUEFUSCAnJCcsCiAJCQlqYiBqc29uYiBQ QVRIICckJywKIAkJCWpzdCB0ZXh0ICAgIEZPUk1BVCBKU09OICBQQVRIICckJywKQEAgLTM3 NywxMCArNDMxLDcgQEAgRlJPTQogCiAJCQlqczIganNvbiBQQVRIICckJywKIAkJCWpzYjJ3 IGpzb25iIFBBVEggJyQnIFdJVEggV1JBUFBFUiwKLQkJCWpzYjJxIGpzb25iIFBBVEggJyQn IE9NSVQgUVVPVEVTLAotCQkJaWEgaW50W10gUEFUSCAnJCcsCi0JCQl0YSB0ZXh0W10gUEFU SCAnJCcsCi0JCQlqYmEganNvbmJbXSBQQVRIICckJworCQkJanNiMnEganNvbmIgUEFUSCAn JCcgT01JVCBRVU9URVMKIAkJKQogCSkganQKIAlPTiB0cnVlOwpAQCAtMzk5LDcgKzQ1MCw2 IEBAIFNFTEVDVCAqIEZST00KIAkJCSJjaGFyKDQpIiBjaGFyKDQpIFBBVEggJyQnLAogCQkJ ImJvb2wiIGJvb2wgUEFUSCAnJCcsCiAJCQkibnVtZXJpYyIgbnVtZXJpYyBQQVRIICckJywK LQkJCSJkb21haW4iIGpzb25iX3Rlc3RfZG9tYWluIFBBVEggJyQnLAogCQkJanMganNvbiBQ QVRIICckJywKIAkJCWpiIGpzb25iIFBBVEggJyQnLAogCQkJanN0IHRleHQgICAgRk9STUFU IEpTT04gIFBBVEggJyQnLApAQCAtNDE2LDkgKzQ2Niw2IEBAIFNFTEVDVCAqIEZST00KIAkJ CWpzMiBqc29uIFBBVEggJyQnLAogCQkJanNiMncganNvbmIgUEFUSCAnJCcgV0lUSCBXUkFQ UEVSLAogCQkJanNiMnEganNvbmIgUEFUSCAnJCcgT01JVCBRVU9URVMsCi0JCQlpYSBpbnRb XSBQQVRIICckJywKLQkJCXRhIHRleHRbXSBQQVRIICckJywKLQkJCWpiYSBqc29uYltdIFBB VEggJyQnLAogCiAJCQlORVNURUQgUEFUSCAnJFsxXScgQVMgcDEgQ09MVU1OUyAoCiAJCQkJ YTEgaW50LApAQCAtNDQzLDcgKzQ5MCw2IEBAIFNFTEVDVCAqIEZST00KIEVYUExBSU4gKENP U1RTIE9GRiwgVkVSQk9TRSkgU0VMRUNUICogRlJPTSBqc29uYl90YWJsZV92aWV3OwogCiBE Uk9QIFZJRVcganNvbmJfdGFibGVfdmlldzsKLURST1AgRE9NQUlOIGpzb25iX3Rlc3RfZG9t YWluOwogCiAtLSBKU09OX1RBQkxFOiBPTiBFTVBUWS9PTiBFUlJPUiBiZWhhdmlvcgogU0VM RUNUICoKLS0gCjIuMTcuMQoK --------------EgcrP7oVVxLbsS1r3ExJxL0B--