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 1oSmdR-0006Aq-QC for pgsql-hackers@arkaria.postgresql.org; Mon, 29 Aug 2022 21:49:35 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1oSmdQ-0001Gf-Mw for pgsql-hackers@arkaria.postgresql.org; Mon, 29 Aug 2022 21:49:32 +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 1oSmdP-0001GW-FA for pgsql-hackers@lists.postgresql.org; Mon, 29 Aug 2022 21:49:32 +0000 Received: from mail.postgrespro.ru ([93.174.131.139]) by makus.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1oSmdD-0002wS-7H for pgsql-hackers@lists.postgresql.org; Mon, 29 Aug 2022 21:49:30 +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 D478921C3159; Tue, 30 Aug 2022 00:49:10 +0300 (MSK) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mail; t=1661809751; bh=XtldJao4K1V1iGeUFFhZ+VHPWOVdYTA35vLLnlO97sc=; h=Date:Subject:To:Cc:References:From:In-Reply-To; b=DG8haZQMD98fTt4pF8XmZe+cYgZi3ve44H0X2SKyGTjWr/RGYxBTOeNiFM3iUsaK7 LRErALbaIVGUN3orLwygHgiwu5vaa4RYA8YC70r6KkaV175KD5CmkJZ6nHAnVJBCU9 NEv+osWVGs4dfdKJlfyJ0S1Y/0cmbX1I4ea7yR1I= Content-Type: multipart/mixed; boundary="------------jNrKutSsb0Ih2JPBTjkEydni" Message-ID: Date: Tue, 30 Aug 2022 00:49:08 +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: Amit Langote Cc: Andrew Dunstan , "Jonathan S. Katz" , Tom Lane , Robert Haas , Andres Freund , PostgreSQL Hackers , Michael Paquier , John Naylor References: <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> <6ba7ba7b-9fdd-674f-c227-59a59e0de1ec@postgrespro.ru> From: Nikita Glukhov In-Reply-To: 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. --------------jNrKutSsb0Ih2JPBTjkEydni Content-Type: multipart/alternative; boundary="------------Vz0Q0eKPsmOkP1udc0v0mUfW" --------------Vz0Q0eKPsmOkP1udc0v0mUfW Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Hi, On 29.08.2022 15:56, Amit Langote wrote: > On Sat, Aug 27, 2022 at 5:11 AM Nikita Glukhov wrote: >> On 26.08.2022 22:25, Andrew Dunstan wrote: >> >> On 2022-08-24 We 20:05, Nikita Glukhov wrote: >> >> 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. > Didn't know that we have done similar things in the past for jsonpath, as in: > > commit 16d489b0fe058e527619f5e9d92fd7ca3c6c2994 > Author: Alexander Korotkov > Date: Sat Mar 16 12:21:19 2019 +0300 > > Numeric error suppression in jsonpath This was necessary for handling errors in arithmetic operations. > BTW, maybe the following hunk in boolin_opt_error() is unnecessary? > > - len = strlen(str); > + len -= str - in_str; > This is really not necessary, but helps to avoid extra strlen() call. I have replaced it with more intuitive + { str++; + len--; + } - len = strlen(str); >> - 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(). > I am not sure if it's OK to eval_const_expressions() on a Query > sub-expression during parse-analysis. IIUC, it is only correct to > apply it to after the rewriting phase. I also was not sure. Maybe it can be moved to rewriting phase or even to execution phase. >> Maybe it would be better to simply remove DEFAULT ON EMPTY. > So +1 to this for now. See last patch #9. >> It is possible to easily split this patch into several subpatches, >> I will do it if needed. > That would be nice indeed. I have extracted patches #1-6 with numerous safe input and type conversion functions. > I'm wondering if you're going to change the PASSING values > initialization to add the steps into the parent JsonExpr's ExprState, > like the previous patch was doing? I forget to incorporate your changes for subsidary ExprStates elimination. See patch #8. -- Nikita Glukhov Postgres Professional:http://www.postgrespro.com The Russian Postgres Company --------------Vz0Q0eKPsmOkP1udc0v0mUfW Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: 7bit

Hi,

On 29.08.2022 15:56, Amit Langote wrote:
On Sat, Aug 27, 2022 at 5:11 AM Nikita Glukhov <n.gluhov@postgrespro.ru> wrote:
On 26.08.2022 22:25, Andrew Dunstan wrote:

On 2022-08-24 We 20:05, Nikita Glukhov wrote:

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.
Didn't know that we have done similar things in the past for jsonpath, as in:

commit 16d489b0fe058e527619f5e9d92fd7ca3c6c2994
Author: Alexander Korotkov <akorotkov@postgresql.org>
Date:   Sat Mar 16 12:21:19 2019 +0300

    Numeric error suppression in jsonpath
This was necessary for handling errors in arithmetic operations.

BTW, maybe the following hunk in boolin_opt_error() is unnecessary?

-   len = strlen(str);
+   len -= str - in_str;

This is really not necessary, but helps to avoid extra strlen() call. 
I have  replaced it with more intuitive

+   {
        str++;
+       len--;
+   }
   
-   len = strlen(str);

      
 - 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().
I am not sure if it's OK to eval_const_expressions() on a Query
sub-expression during parse-analysis.  IIUC, it is only correct to
apply it to after the rewriting phase.
I also was not sure. Maybe it can be moved to rewriting phase or 
even to execution phase.

   Maybe it would be better to simply remove DEFAULT ON EMPTY.
So +1 to this for now.
See last patch #9.

It is possible to easily split this patch into several subpatches,
I will do it if needed.
That would be nice indeed.
I have extracted patches #1-6 with numerous safe input and type conversion 
functions.

I'm wondering if you're going to change the PASSING values
initialization to add the steps into the parent JsonExpr's ExprState,
like the previous patch was doing?
I forget to incorporate your changes for subsidary ExprStates elimination. 
See patch #8.
-- 
Nikita Glukhov
Postgres Professional: http://www.postgrespro.com
The Russian Postgres Company


--------------Vz0Q0eKPsmOkP1udc0v0mUfW-- --------------jNrKutSsb0Ih2JPBTjkEydni Content-Type: text/x-patch; charset=UTF-8; name="v9-0001-Add-safe-input-function-for-bool.patch" Content-Disposition: attachment; filename="v9-0001-Add-safe-input-function-for-bool.patch" Content-Transfer-Encoding: base64 RnJvbSBmZmVhZGIwOWU4YWI1NWI1YTY3NzcxNmM2ZjdlYmRhZmJhNzc4ZDM4IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBOaWtpdGEgR2x1a2hvdiA8bi5nbHVob3ZAcG9zdGdy ZXNwcm8ucnU+CkRhdGU6IE1vbiwgMjkgQXVnIDIwMjIgMjM6NTM6MDYgKzAzMDAKU3ViamVj dDogW1BBVENIIHY5IDEvOV0gQWRkIHNhZmUgaW5wdXQgZnVuY3Rpb24gZm9yIGJvb2wKCi0t LQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2Jvb2wuYyB8IDMzICsrKysrKysrKysrKysrKysr KysrKy0tLS0tLS0tLS0tLQogc3JjL2luY2x1ZGUvdXRpbHMvYnVpbHRpbnMuaCB8ICAxICsK IDIgZmlsZXMgY2hhbmdlZCwgMjIgaW5zZXJ0aW9ucygrKSwgMTIgZGVsZXRpb25zKC0pCgpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2Jvb2wuYyBiL3NyYy9iYWNrZW5k L3V0aWxzL2FkdC9ib29sLmMKaW5kZXggY2Q3MzM1Mjg3ZjkuLjI0OTRmNDQxMjg1IDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvYm9vbC5jCisrKyBiL3NyYy9iYWNrZW5k L3V0aWxzL2FkdC9ib29sLmMKQEAgLTEyNiwxMiArMTI2LDEwIEBAIHBhcnNlX2Jvb2xfd2l0 aF9sZW4oY29uc3QgY2hhciAqdmFsdWUsIHNpemVfdCBsZW4sIGJvb2wgKnJlc3VsdCkKICAq CiAgKiBJbiB0aGUgc3dpdGNoIHN0YXRlbWVudCwgY2hlY2sgdGhlIG1vc3QtdXNlZCBwb3Nz aWJpbGl0aWVzIGZpcnN0LgogICovCi1EYXR1bQotYm9vbGluKFBHX0ZVTkNUSU9OX0FSR1Mp Citib29sCitib29saW5fb3B0X2Vycm9yKGNvbnN0IGNoYXIgKmluX3N0ciwgc2l6ZV90CWxl biwgYm9vbCAqZXJyb3IpCiB7Ci0JY29uc3QgY2hhciAqaW5fc3RyID0gUEdfR0VUQVJHX0NT VFJJTkcoMCk7CiAJY29uc3QgY2hhciAqc3RyOwotCXNpemVfdAkJbGVuOwogCWJvb2wJCXJl c3VsdDsKIAogCS8qCkBAIC0xMzksMjIgKzEzNywzMyBAQCBib29saW4oUEdfRlVOQ1RJT05f QVJHUykKIAkgKi8KIAlzdHIgPSBpbl9zdHI7CiAJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVk IGNoYXIpICpzdHIpKQorCXsKIAkJc3RyKys7CisJCWxlbi0tOworCX0KIAotCWxlbiA9IHN0 cmxlbihzdHIpOwogCXdoaWxlIChsZW4gPiAwICYmIGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIp IHN0cltsZW4gLSAxXSkpCiAJCWxlbi0tOwogCiAJaWYgKHBhcnNlX2Jvb2xfd2l0aF9sZW4o c3RyLCBsZW4sICZyZXN1bHQpKQotCQlQR19SRVRVUk5fQk9PTChyZXN1bHQpOworCQlyZXR1 cm4gcmVzdWx0OworCisJaWYgKCFlcnJvcikKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJy Y29kZShFUlJDT0RFX0lOVkFMSURfVEVYVF9SRVBSRVNFTlRBVElPTiksCisJCQkJIGVycm1z ZygiaW52YWxpZCBpbnB1dCBzeW50YXggZm9yIHR5cGUgJXM6IFwiJXNcIiIsCisJCQkJCQki Ym9vbGVhbiIsIGluX3N0cikpKTsKIAotCWVyZXBvcnQoRVJST1IsCi0JCQkoZXJyY29kZShF UlJDT0RFX0lOVkFMSURfVEVYVF9SRVBSRVNFTlRBVElPTiksCi0JCQkgZXJybXNnKCJpbnZh bGlkIGlucHV0IHN5bnRheCBmb3IgdHlwZSAlczogXCIlc1wiIiwKLQkJCQkJImJvb2xlYW4i LCBpbl9zdHIpKSk7CisJKmVycm9yID0gdHJ1ZTsKKwlyZXR1cm4gZmFsc2U7Cit9CisKK0Rh dHVtCitib29saW4oUEdfRlVOQ1RJT05fQVJHUykKK3sKKwljaGFyCSAgICpzdHIgPSBQR19H RVRBUkdfQ1NUUklORygwKTsKIAotCS8qIG5vdCByZWFjaGVkICovCi0JUEdfUkVUVVJOX0JP T0woZmFsc2UpOworCVBHX1JFVFVSTl9CT09MKGJvb2xpbl9vcHRfZXJyb3Ioc3RyLCBzdHJs ZW4oc3RyKSwgTlVMTCkpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRp bHMvYnVpbHRpbnMuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL2J1aWx0aW5zLmgKaW5kZXggMjIx YzNlNmMzZGUuLjJjMDNjZTRmZTEyIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9i dWlsdGlucy5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL2J1aWx0aW5zLmgKQEAgLTI0LDYg KzI0LDcgQEAKIC8qIGJvb2wuYyAqLwogZXh0ZXJuIGJvb2wgcGFyc2VfYm9vbChjb25zdCBj aGFyICp2YWx1ZSwgYm9vbCAqcmVzdWx0KTsKIGV4dGVybiBib29sIHBhcnNlX2Jvb2xfd2l0 aF9sZW4oY29uc3QgY2hhciAqdmFsdWUsIHNpemVfdCBsZW4sIGJvb2wgKnJlc3VsdCk7Citl eHRlcm4gYm9vbCBib29saW5fb3B0X2Vycm9yKGNvbnN0IGNoYXIgKnZhbHVlLCBzaXplX3QJ bGVuLCBib29sICplcnJvcik7CiAKIC8qIGRvbWFpbnMuYyAqLwogZXh0ZXJuIHZvaWQgZG9t YWluX2NoZWNrKERhdHVtIHZhbHVlLCBib29sIGlzbnVsbCwgT2lkIGRvbWFpblR5cGUsCi0t IAoyLjE3LjEKCg== --------------jNrKutSsb0Ih2JPBTjkEydni Content-Type: text/x-patch; charset=UTF-8; name="v9-0002-Add-safe-input-function-for-int8.patch" Content-Disposition: attachment; filename="v9-0002-Add-safe-input-function-for-int8.patch" Content-Transfer-Encoding: base64 RnJvbSA3YTBmNzFlNDMwMTM2YTNiY2VjOTU5MTkxNDliMmExZTFkNmU4NmY1IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBOaWtpdGEgR2x1a2hvdiA8bi5nbHVob3ZAcG9zdGdy ZXNwcm8ucnU+CkRhdGU6IFR1ZSwgMzAgQXVnIDIwMjIgMDA6MTM6NTQgKzAzMDAKU3ViamVj dDogW1BBVENIIHY5IDIvOV0gQWRkIHNhZmUgaW5wdXQgZnVuY3Rpb24gZm9yIGludDgKCi0t LQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L251bXV0aWxzLmMgfCAyMCArKysrKysrKysrKysr KysrKysrLQogc3JjL2luY2x1ZGUvdXRpbHMvYnVpbHRpbnMuaCAgICAgfCAgMSArCiAyIGZp bGVzIGNoYW5nZWQsIDIwIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvbnVtdXRpbHMuYyBiL3NyYy9iYWNrZW5kL3V0 aWxzL2FkdC9udW11dGlscy5jCmluZGV4IGNjM2Y5NWQzOTkwLi5iODJiMzBmOTAxMyAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L251bXV0aWxzLmMKKysrIGIvc3JjL2Jh Y2tlbmQvdXRpbHMvYWR0L251bXV0aWxzLmMKQEAgLTI0OCw3ICsyNDgsNyBAQCBpbnZhbGlk X3N5bnRheDoKICAqIHBvc2l0aXZlIG51bWJlci4KICAqLwogaW50NjQKLXBnX3N0cnRvaW50 NjQoY29uc3QgY2hhciAqcykKK3BnX3N0cnRvaW50NjRfb3B0X2Vycm9yKGNvbnN0IGNoYXIg KnMsIGJvb2wgKmVycm9yKQogewogCWNvbnN0IGNoYXIgKnB0ciA9IHM7CiAJaW50NjQJCXRt cCA9IDA7CkBAIC0zMDcsMTIgKzMwNywyNCBAQCBwZ19zdHJ0b2ludDY0KGNvbnN0IGNoYXIg KnMpCiAJcmV0dXJuIHRtcDsKIAogb3V0X29mX3JhbmdlOgorCWlmIChlcnJvcikKKwl7CisJ CSplcnJvciA9IHRydWU7CisJCXJldHVybiAwOworCX0KKwogCWVyZXBvcnQoRVJST1IsCiAJ CQkoZXJyY29kZShFUlJDT0RFX05VTUVSSUNfVkFMVUVfT1VUX09GX1JBTkdFKSwKIAkJCSBl cnJtc2coInZhbHVlIFwiJXNcIiBpcyBvdXQgb2YgcmFuZ2UgZm9yIHR5cGUgJXMiLAogCQkJ CQlzLCAiYmlnaW50IikpKTsKIAogaW52YWxpZF9zeW50YXg6CisJaWYgKGVycm9yKQorCXsK KwkJKmVycm9yID0gdHJ1ZTsKKwkJcmV0dXJuIDA7CisJfQorCiAJZXJlcG9ydChFUlJPUiwK IAkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9URVhUX1JFUFJFU0VOVEFUSU9OKSwKIAkJ CSBlcnJtc2coImludmFsaWQgaW5wdXQgc3ludGF4IGZvciB0eXBlICVzOiBcIiVzXCIiLApA QCAtMzIxLDYgKzMzMywxMiBAQCBpbnZhbGlkX3N5bnRheDoKIAlyZXR1cm4gMDsJCQkJCS8q IGtlZXAgY29tcGlsZXIgcXVpZXQgKi8KIH0KIAoraW50NjQKK3BnX3N0cnRvaW50NjQoY29u c3QgY2hhciAqcykKK3sKKwlyZXR1cm4gcGdfc3RydG9pbnQ2NF9vcHRfZXJyb3IocywgTlVM TCk7Cit9CisKIC8qCiAgKiBwZ19pdG9hOiBjb252ZXJ0cyBhIHNpZ25lZCAxNi1iaXQgaW50 ZWdlciB0byBpdHMgc3RyaW5nIHJlcHJlc2VudGF0aW9uCiAgKiBhbmQgcmV0dXJucyBzdHJs ZW4oYSkuCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9idWlsdGlucy5oIGIvc3Jj L2luY2x1ZGUvdXRpbHMvYnVpbHRpbnMuaAppbmRleCAyYzAzY2U0ZmUxMi4uNWUxYWEzN2Mx ZjUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxzL2J1aWx0aW5zLmgKKysrIGIvc3Jj L2luY2x1ZGUvdXRpbHMvYnVpbHRpbnMuaApAQCAtNDcsNiArNDcsNyBAQCBleHRlcm4gaW50 CW5hbWVzdHJjbXAoTmFtZSBuYW1lLCBjb25zdCBjaGFyICpzdHIpOwogZXh0ZXJuIGludDE2 IHBnX3N0cnRvaW50MTYoY29uc3QgY2hhciAqcyk7CiBleHRlcm4gaW50MzIgcGdfc3RydG9p bnQzMihjb25zdCBjaGFyICpzKTsKIGV4dGVybiBpbnQ2NCBwZ19zdHJ0b2ludDY0KGNvbnN0 IGNoYXIgKnMpOworZXh0ZXJuIGludDY0IHBnX3N0cnRvaW50NjRfb3B0X2Vycm9yKGNvbnN0 IGNoYXIgKnMsIGJvb2wgKmVycm9yKTsKIGV4dGVybiBpbnQJcGdfaXRvYShpbnQxNiBpLCBj aGFyICphKTsKIGV4dGVybiBpbnQJcGdfdWx0b2Ffbih1aW50MzIgbCwgY2hhciAqYSk7CiBl eHRlcm4gaW50CXBnX3VsbHRvYV9uKHVpbnQ2NCBsLCBjaGFyICphKTsKLS0gCjIuMTcuMQoK --------------jNrKutSsb0Ih2JPBTjkEydni Content-Type: text/x-patch; charset=UTF-8; name="v9-0003-Add-safe-input-function-for-float4.patch" Content-Disposition: attachment; filename="v9-0003-Add-safe-input-function-for-float4.patch" Content-Transfer-Encoding: base64 RnJvbSA5ZjQxNzk0OTRlZjQ2MTJlYWRkOGMyYzY3ODczOTFkODUzNDdmYTRkIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBOaWtpdGEgR2x1a2hvdiA8bi5nbHVob3ZAcG9zdGdy ZXNwcm8ucnU+CkRhdGU6IFR1ZSwgMzAgQXVnIDIwMjIgMDA6MTM6MzYgKzAzMDAKU3ViamVj dDogW1BBVENIIHY5IDMvOV0gQWRkIHNhZmUgaW5wdXQgZnVuY3Rpb24gZm9yIGZsb2F0NAoK LS0tCiBzcmMvYmFja2VuZC91dGlscy9hZHQvZmxvYXQuYyB8IDcwICsrKysrKysrKysrKysr KysrKystLS0tLS0tLS0tLS0tLS0tCiBzcmMvaW5jbHVkZS91dGlscy9mbG9hdC5oICAgICB8 ICAxICsKIDIgZmlsZXMgY2hhbmdlZCwgNDAgaW5zZXJ0aW9ucygrKSwgMzEgZGVsZXRpb25z KC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2Zsb2F0LmMgYi9zcmMv YmFja2VuZC91dGlscy9hZHQvZmxvYXQuYwppbmRleCBmYzhmMzlhN2E5OC4uZDlkYThjODQ2 NmQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9mbG9hdC5jCisrKyBiL3Ny Yy9iYWNrZW5kL3V0aWxzL2FkdC9mbG9hdC5jCkBAIC03Myw2ICs3MywxNiBAQCBzdGF0aWMg ZG91YmxlIHNpbmRfcTEoZG91YmxlIHgpOwogc3RhdGljIGRvdWJsZSBjb3NkX3ExKGRvdWJs ZSB4KTsKIHN0YXRpYyB2b2lkIGluaXRfZGVncmVlX2NvbnN0YW50cyh2b2lkKTsKIAorLyog Q29udmVuaWVuY2UgbWFjcm86IHNldCAqaGF2ZV9lcnJvciBmbGFnIChpZiBwcm92aWRlZCkg b3IgdGhyb3cgZXJyb3IgKi8KKyNkZWZpbmUgUkVUVVJOX0VSUk9SKHRocm93X2Vycm9yLCBo YXZlX2Vycm9yKSBcCitkbyB7IFwKKwlpZiAoaGF2ZV9lcnJvcikgeyBcCisJCSpoYXZlX2Vy cm9yID0gdHJ1ZTsgXAorCQlyZXR1cm4gMC4wOyBcCisJfSBlbHNlIHsgXAorCQl0aHJvd19l cnJvcjsgXAorCX0gXAorfSB3aGlsZSAoMCkKIAogLyoKICAqIFdlIHVzZSB0aGVzZSBvdXQt b2YtbGluZSBlcmVwb3J0KCkgY2FsbHMgdG8gcmVwb3J0IGZsb2F0IG92ZXJmbG93LApAQCAt MTU5LDEwICsxNjksOSBAQCBpc19pbmZpbml0ZShkb3VibGUgdmFsKQogICogcmVzdWx0IG9m IDB4QUU0M0ZFcC0xMDcuCiAgKgogICovCi1EYXR1bQotZmxvYXQ0aW4oUEdfRlVOQ1RJT05f QVJHUykKK2Zsb2F0CitmbG9hdDRpbl9vcHRfZXJyb3IoY2hhcgkqbnVtLCBib29sICpoYXZl X2Vycm9yKQogewotCWNoYXIJICAgKm51bSA9IFBHX0dFVEFSR19DU1RSSU5HKDApOwogCWNo YXIJICAgKm9yaWdfbnVtOwogCWZsb2F0CQl2YWw7CiAJY2hhcgkgICAqZW5kcHRyOwpAQCAt MTgzLDEwICsxOTIsMTEgQEAgZmxvYXQ0aW4oUEdfRlVOQ1RJT05fQVJHUykKIAkgKiBzdHJ0 b2QoKSBvbiBkaWZmZXJlbnQgcGxhdGZvcm1zLgogCSAqLwogCWlmICgqbnVtID09ICdcMCcp Ci0JCWVyZXBvcnQoRVJST1IsCi0JCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1RFWFRf UkVQUkVTRU5UQVRJT04pLAotCQkJCSBlcnJtc2coImludmFsaWQgaW5wdXQgc3ludGF4IGZv ciB0eXBlICVzOiBcIiVzXCIiLAotCQkJCQkJInJlYWwiLCBvcmlnX251bSkpKTsKKwkJUkVU VVJOX0VSUk9SKGVyZXBvcnQoRVJST1IsCisJCQkJCQkJIChlcnJjb2RlKEVSUkNPREVfSU5W QUxJRF9URVhUX1JFUFJFU0VOVEFUSU9OKSwKKwkJCQkJCQkgIGVycm1zZygiaW52YWxpZCBp bnB1dCBzeW50YXggZm9yIHR5cGUgJXM6IFwiJXNcIiIsCisJCQkJCQkJCQkgInJlYWwiLCBv cmlnX251bSkpKSwKKwkJCQkJIGhhdmVfZXJyb3IpOwogCiAJZXJybm8gPSAwOwogCXZhbCA9 IHN0cnRvZihudW0sICZlbmRwdHIpOwpAQCAtMjU3LDE2ICsyNjcsMTggQEAgZmxvYXQ0aW4o UEdfRlVOQ1RJT05fQVJHUykKIAkJCQkodmFsID49IEhVR0VfVkFMRiB8fCB2YWwgPD0gLUhV R0VfVkFMRikKICNlbmRpZgogCQkJCSkKLQkJCQllcmVwb3J0KEVSUk9SLAotCQkJCQkJKGVy cmNvZGUoRVJSQ09ERV9OVU1FUklDX1ZBTFVFX09VVF9PRl9SQU5HRSksCi0JCQkJCQkgZXJy bXNnKCJcIiVzXCIgaXMgb3V0IG9mIHJhbmdlIGZvciB0eXBlIHJlYWwiLAotCQkJCQkJCQlv cmlnX251bSkpKTsKKwkJCQlSRVRVUk5fRVJST1IoZXJlcG9ydChFUlJPUiwKKwkJCQkJCQkJ CSAoZXJyY29kZShFUlJDT0RFX05VTUVSSUNfVkFMVUVfT1VUX09GX1JBTkdFKSwKKwkJCQkJ CQkJCSAgZXJybXNnKCJcIiVzXCIgaXMgb3V0IG9mIHJhbmdlIGZvciB0eXBlIHJlYWwiLAor CQkJCQkJCQkJCQkgb3JpZ19udW0pKSksCisJCQkJCQkJIGhhdmVfZXJyb3IpOwogCQl9CiAJ CWVsc2UKLQkJCWVyZXBvcnQoRVJST1IsCi0JCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJ RF9URVhUX1JFUFJFU0VOVEFUSU9OKSwKLQkJCQkJIGVycm1zZygiaW52YWxpZCBpbnB1dCBz eW50YXggZm9yIHR5cGUgJXM6IFwiJXNcIiIsCi0JCQkJCQkJInJlYWwiLCBvcmlnX251bSkp KTsKKwkJCVJFVFVSTl9FUlJPUihlcmVwb3J0KEVSUk9SLAorCQkJCQkJCQkgKGVycmNvZGUo RVJSQ09ERV9JTlZBTElEX1RFWFRfUkVQUkVTRU5UQVRJT04pLAorCQkJCQkJCQkgIGVycm1z ZygiaW52YWxpZCBpbnB1dCBzeW50YXggZm9yIHR5cGUgJXM6IFwiJXNcIiIsCisJCQkJCQkJ CQkJICJyZWFsIiwgb3JpZ19udW0pKSksCisJCQkJCQkgaGF2ZV9lcnJvcik7CiAJfQogCiAJ Lyogc2tpcCB0cmFpbGluZyB3aGl0ZXNwYWNlICovCkBAIC0yNzUsMTIgKzI4NywxOSBAQCBm bG9hdDRpbihQR19GVU5DVElPTl9BUkdTKQogCiAJLyogaWYgdGhlcmUgaXMgYW55IGp1bmsg bGVmdCBhdCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcsIGJhaWwgb3V0ICovCiAJaWYgKCplbmRw dHIgIT0gJ1wwJykKLQkJZXJlcG9ydChFUlJPUiwKLQkJCQkoZXJyY29kZShFUlJDT0RFX0lO VkFMSURfVEVYVF9SRVBSRVNFTlRBVElPTiksCi0JCQkJIGVycm1zZygiaW52YWxpZCBpbnB1 dCBzeW50YXggZm9yIHR5cGUgJXM6IFwiJXNcIiIsCi0JCQkJCQkicmVhbCIsIG9yaWdfbnVt KSkpOworCQlSRVRVUk5fRVJST1IoZXJlcG9ydChFUlJPUiwKKwkJCQkJCQkgKGVycmNvZGUo RVJSQ09ERV9JTlZBTElEX1RFWFRfUkVQUkVTRU5UQVRJT04pLAorCQkJCQkJCSAgZXJybXNn KCJpbnZhbGlkIGlucHV0IHN5bnRheCBmb3IgdHlwZSAlczogXCIlc1wiIiwKKwkJCQkJCQkJ CSAicmVhbCIsIG9yaWdfbnVtKSkpLAorCQkJCQkgaGF2ZV9lcnJvcik7CisKKwlyZXR1cm4g dmFsOworfQogCi0JUEdfUkVUVVJOX0ZMT0FUNCh2YWwpOworRGF0dW0KK2Zsb2F0NGluKFBH X0ZVTkNUSU9OX0FSR1MpCit7CisJUEdfUkVUVVJOX0ZMT0FUNChmbG9hdDRpbl9vcHRfZXJy b3IoUEdfR0VUQVJHX0NTVFJJTkcoMCksIE5VTEwpKTsKIH0KIAogLyoKQEAgLTM0MCwxNyAr MzU5LDYgQEAgZmxvYXQ4aW4oUEdfRlVOQ1RJT05fQVJHUykKIAlQR19SRVRVUk5fRkxPQVQ4 KGZsb2F0OGluX2ludGVybmFsKG51bSwgTlVMTCwgImRvdWJsZSBwcmVjaXNpb24iLCBudW0p KTsKIH0KIAotLyogQ29udmVuaWVuY2UgbWFjcm86IHNldCAqaGF2ZV9lcnJvciBmbGFnIChp ZiBwcm92aWRlZCkgb3IgdGhyb3cgZXJyb3IgKi8KLSNkZWZpbmUgUkVUVVJOX0VSUk9SKHRo cm93X2Vycm9yLCBoYXZlX2Vycm9yKSBcCi1kbyB7IFwKLQlpZiAoaGF2ZV9lcnJvcikgeyBc Ci0JCSpoYXZlX2Vycm9yID0gdHJ1ZTsgXAotCQlyZXR1cm4gMC4wOyBcCi0JfSBlbHNlIHsg XAotCQl0aHJvd19lcnJvcjsgXAotCX0gXAotfSB3aGlsZSAoMCkKLQogLyoKICAqIGZsb2F0 OGluX2ludGVybmFsX29wdF9lcnJvciAtIGd1dHMgb2YgZmxvYXQ4aW4oKQogICoKZGlmZiAt LWdpdCBhL3NyYy9pbmNsdWRlL3V0aWxzL2Zsb2F0LmggYi9zcmMvaW5jbHVkZS91dGlscy9m bG9hdC5oCmluZGV4IDRiZjBlM2FjMDdhLi4wYWQ0ZDlmMzk3MyAxMDA2NDQKLS0tIGEvc3Jj L2luY2x1ZGUvdXRpbHMvZmxvYXQuaAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9mbG9hdC5o CkBAIC00Niw2ICs0Niw3IEBAIGV4dGVybiBmbG9hdDggZmxvYXQ4aW5faW50ZXJuYWwoY2hh ciAqbnVtLCBjaGFyICoqZW5kcHRyX3AsCiBleHRlcm4gZmxvYXQ4IGZsb2F0OGluX2ludGVy bmFsX29wdF9lcnJvcihjaGFyICpudW0sIGNoYXIgKiplbmRwdHJfcCwKIAkJCQkJCQkJCQkg IGNvbnN0IGNoYXIgKnR5cGVfbmFtZSwgY29uc3QgY2hhciAqb3JpZ19zdHJpbmcsCiAJCQkJ CQkJCQkJICBib29sICpoYXZlX2Vycm9yKTsKK2V4dGVybiBmbG9hdCBmbG9hdDRpbl9vcHRf ZXJyb3IoY2hhciAqbnVtLCBib29sICpoYXZlX2Vycm9yKTsKIGV4dGVybiBjaGFyICpmbG9h dDhvdXRfaW50ZXJuYWwoZmxvYXQ4IG51bSk7CiBleHRlcm4gaW50CWZsb2F0NF9jbXBfaW50 ZXJuYWwoZmxvYXQ0IGEsIGZsb2F0NCBiKTsKIGV4dGVybiBpbnQJZmxvYXQ4X2NtcF9pbnRl cm5hbChmbG9hdDggYSwgZmxvYXQ4IGIpOwotLSAKMi4xNy4xCgo= --------------jNrKutSsb0Ih2JPBTjkEydni Content-Type: text/x-patch; charset=UTF-8; name="v9-0004-Add-safe-input-and-type-conversion-functions-for-.patch" Content-Disposition: attachment; filename*0="v9-0004-Add-safe-input-and-type-conversion-functions-for-.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSA4MzY1YjQxMjIzOTQ1YTNjZmQ5NjE1ZmEzMzQ4OGQ3NzRmMDBlMGY4IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBOaWtpdGEgR2x1a2hvdiA8bi5nbHVob3ZAcG9zdGdy ZXNwcm8ucnU+CkRhdGU6IE1vbiwgMjkgQXVnIDIwMjIgMjM6NTU6NTIgKzAzMDAKU3ViamVj dDogW1BBVENIIHY5IDQvOV0gQWRkIHNhZmUgaW5wdXQgYW5kIHR5cGUgY29udmVyc2lvbiBm dW5jdGlvbnMgZm9yCiBudW1lcmljCgotLS0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9udW1l cmljLmMgfCAyMzAgKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0KIHNyYy9pbmNs dWRlL3V0aWxzL251bWVyaWMuaCAgICAgfCAgIDYgKy0KIDIgZmlsZXMgY2hhbmdlZCwgMTYx IGluc2VydGlvbnMoKyksIDc1IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL3V0aWxzL2FkdC9udW1lcmljLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvbnVtZXJp Yy5jCmluZGV4IDkyMGE2M2IwMDgxLi45NTFiMmY0M2FiMSAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvdXRpbHMvYWR0L251bWVyaWMuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQv bnVtZXJpYy5jCkBAIC00OTgsNyArNDk4LDcgQEAgc3RhdGljIHZvaWQgZnJlZV92YXIoTnVt ZXJpY1ZhciAqdmFyKTsKIHN0YXRpYyB2b2lkIHplcm9fdmFyKE51bWVyaWNWYXIgKnZhcik7 CiAKIHN0YXRpYyBjb25zdCBjaGFyICpzZXRfdmFyX2Zyb21fc3RyKGNvbnN0IGNoYXIgKnN0 ciwgY29uc3QgY2hhciAqY3AsCi0JCQkJCQkJCQlOdW1lcmljVmFyICpkZXN0KTsKKwkJCQkJ CQkJCU51bWVyaWNWYXIgKmRlc3QsIGJvb2wgKmhhdmVfZXJyb3IpOwogc3RhdGljIHZvaWQg c2V0X3Zhcl9mcm9tX251bShOdW1lcmljIHZhbHVlLCBOdW1lcmljVmFyICpkZXN0KTsKIHN0 YXRpYyB2b2lkIGluaXRfdmFyX2Zyb21fbnVtKE51bWVyaWMgbnVtLCBOdW1lcmljVmFyICpk ZXN0KTsKIHN0YXRpYyB2b2lkIHNldF92YXJfZnJvbV92YXIoY29uc3QgTnVtZXJpY1ZhciAq dmFsdWUsIE51bWVyaWNWYXIgKmRlc3QpOwpAQCAtNTEyLDggKzUxMiw4IEBAIHN0YXRpYyBO dW1lcmljIGR1cGxpY2F0ZV9udW1lcmljKE51bWVyaWMgbnVtKTsKIHN0YXRpYyBOdW1lcmlj IG1ha2VfcmVzdWx0KGNvbnN0IE51bWVyaWNWYXIgKnZhcik7CiBzdGF0aWMgTnVtZXJpYyBt YWtlX3Jlc3VsdF9vcHRfZXJyb3IoY29uc3QgTnVtZXJpY1ZhciAqdmFyLCBib29sICplcnJv cik7CiAKLXN0YXRpYyB2b2lkIGFwcGx5X3R5cG1vZChOdW1lcmljVmFyICp2YXIsIGludDMy IHR5cG1vZCk7Ci1zdGF0aWMgdm9pZCBhcHBseV90eXBtb2Rfc3BlY2lhbChOdW1lcmljIG51 bSwgaW50MzIgdHlwbW9kKTsKK3N0YXRpYyBib29sIGFwcGx5X3R5cG1vZChOdW1lcmljVmFy ICp2YXIsIGludDMyIHR5cG1vZCwgYm9vbCAqZXJyb3IpOworc3RhdGljIHZvaWQgYXBwbHlf dHlwbW9kX3NwZWNpYWwoTnVtZXJpYyBudW0sIGludDMyIHR5cG1vZCwgYm9vbCAqZXJyb3Ip OwogCiBzdGF0aWMgYm9vbCBudW1lcmljdmFyX3RvX2ludDMyKGNvbnN0IE51bWVyaWNWYXIg KnZhciwgaW50MzIgKnJlc3VsdCk7CiBzdGF0aWMgYm9vbCBudW1lcmljdmFyX3RvX2ludDY0 KGNvbnN0IE51bWVyaWNWYXIgKnZhciwgaW50NjQgKnJlc3VsdCk7CkBAIC02MDcsMjEgKzYw NywyNSBAQCBzdGF0aWMgdm9pZCBhY2N1bV9zdW1fY29tYmluZShOdW1lcmljU3VtQWNjdW0g KmFjY3VtLCBOdW1lcmljU3VtQWNjdW0gKmFjY3VtMik7CiAgKiAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CiAgKi8KIAorLyogQ29udmVuaWVuY2UgbWFjcm86IHNldCAqaGF2ZV9lcnJvciBmbGFnIChp ZiBwcm92aWRlZCkgb3IgdGhyb3cgZXJyb3IgKi8KKyNkZWZpbmUgUkVUVVJOX0VSUk9SKHRo cm93X2Vycm9yLCBoYXZlX2Vycm9yKSBcCitkbyB7IFwKKwlpZiAoaGF2ZV9lcnJvcikgeyBc CisJCSooaGF2ZV9lcnJvcikgPSB0cnVlOyBcCisJCXJldHVybiBOVUxMOyBcCisJfSBlbHNl IHsgXAorCQl0aHJvd19lcnJvcjsgXAorCX0gXAorfSB3aGlsZSAoMCkKIAogLyoKICAqIG51 bWVyaWNfaW4oKSAtCiAgKgogICoJSW5wdXQgZnVuY3Rpb24gZm9yIG51bWVyaWMgZGF0YSB0 eXBlCiAgKi8KLURhdHVtCi1udW1lcmljX2luKFBHX0ZVTkNUSU9OX0FSR1MpCitOdW1lcmlj CitudW1lcmljX2luX29wdF9lcnJvcihjaGFyICpzdHIsIGludDMyIHR5cG1vZCwgYm9vbCAq aGF2ZV9lcnJvcikKIHsKLQljaGFyCSAgICpzdHIgPSBQR19HRVRBUkdfQ1NUUklORygwKTsK LQotI2lmZGVmIE5PVF9VU0VECi0JT2lkCQkJdHlwZWxlbSA9IFBHX0dFVEFSR19PSUQoMSk7 Ci0jZW5kaWYKLQlpbnQzMgkJdHlwbW9kID0gUEdfR0VUQVJHX0lOVDMyKDIpOwogCU51bWVy aWMJCXJlczsKIAljb25zdCBjaGFyICpjcDsKIApAQCAtNjgyLDcgKzY4NiwxMCBAQCBudW1l cmljX2luKFBHX0ZVTkNUSU9OX0FSR1MpCiAKIAkJaW5pdF92YXIoJnZhbHVlKTsKIAotCQlj cCA9IHNldF92YXJfZnJvbV9zdHIoc3RyLCBjcCwgJnZhbHVlKTsKKwkJY3AgPSBzZXRfdmFy X2Zyb21fc3RyKHN0ciwgY3AsICZ2YWx1ZSwgaGF2ZV9lcnJvcik7CisKKwkJaWYgKCFjcCkK KwkJCXJldHVybiBOVUxMOwkvKiBlcnJvciAqLwogCiAJCS8qCiAJCSAqIFdlIGR1cGxpY2F0 ZSBhIGZldyBsaW5lcyBvZiBjb2RlIGhlcmUgYmVjYXVzZSB3ZSB3b3VsZCBsaWtlIHRvCkBA IC02OTMsMzggKzcwMCw1OSBAQCBudW1lcmljX2luKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCXdo aWxlICgqY3ApCiAJCXsKIAkJCWlmICghaXNzcGFjZSgodW5zaWduZWQgY2hhcikgKmNwKSkK LQkJCQllcmVwb3J0KEVSUk9SLAotCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1RF WFRfUkVQUkVTRU5UQVRJT04pLAotCQkJCQkJIGVycm1zZygiaW52YWxpZCBpbnB1dCBzeW50 YXggZm9yIHR5cGUgJXM6IFwiJXNcIiIsCi0JCQkJCQkJCSJudW1lcmljIiwgc3RyKSkpOwor CQkJCVJFVFVSTl9FUlJPUihlcmVwb3J0KEVSUk9SLAorCQkJCQkJCQkJIChlcnJjb2RlKEVS UkNPREVfSU5WQUxJRF9URVhUX1JFUFJFU0VOVEFUSU9OKSwKKwkJCQkJCQkJCSAgZXJybXNn KCJpbnZhbGlkIGlucHV0IHN5bnRheCBmb3IgdHlwZSAlczogXCIlc1wiIiwKKwkJCQkJCQkJ CQkJICJudW1lcmljIiwgc3RyKSkpLAorCQkJCQkJCSBoYXZlX2Vycm9yKTsKIAkJCWNwKys7 CiAJCX0KIAotCQlhcHBseV90eXBtb2QoJnZhbHVlLCB0eXBtb2QpOworCQlpZiAoIWFwcGx5 X3R5cG1vZCgmdmFsdWUsIHR5cG1vZCwgaGF2ZV9lcnJvcikpCisJCQlyZXR1cm4gTlVMTDsg LyogZXJyb3IgKi8KIAotCQlyZXMgPSBtYWtlX3Jlc3VsdCgmdmFsdWUpOworCQlyZXMgPSBt YWtlX3Jlc3VsdF9vcHRfZXJyb3IoJnZhbHVlLCBoYXZlX2Vycm9yKTsKIAkJZnJlZV92YXIo JnZhbHVlKTsKIAotCQlQR19SRVRVUk5fTlVNRVJJQyhyZXMpOworCQlyZXR1cm4gcmVzOwog CX0KIAogCS8qIFNob3VsZCBiZSBub3RoaW5nIGxlZnQgYnV0IHNwYWNlcyAqLwogCXdoaWxl ICgqY3ApCiAJewogCQlpZiAoIWlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpICpjcCkpCi0JCQll cmVwb3J0KEVSUk9SLAotCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfVEVYVF9SRVBS RVNFTlRBVElPTiksCi0JCQkJCSBlcnJtc2coImludmFsaWQgaW5wdXQgc3ludGF4IGZvciB0 eXBlICVzOiBcIiVzXCIiLAotCQkJCQkJCSJudW1lcmljIiwgc3RyKSkpOworCQkJUkVUVVJO X0VSUk9SKGVyZXBvcnQoRVJST1IsCisJCQkJCQkJCSAoZXJyY29kZShFUlJDT0RFX0lOVkFM SURfVEVYVF9SRVBSRVNFTlRBVElPTiksCisJCQkJCQkJCSAgZXJybXNnKCJpbnZhbGlkIGlu cHV0IHN5bnRheCBmb3IgdHlwZSAlczogXCIlc1wiIiwKKwkJCQkJCQkJCQkgIm51bWVyaWMi LCBzdHIpKSksCisJCQkJCQkgaGF2ZV9lcnJvcik7CisKIAkJY3ArKzsKIAl9CiAKIAkvKiBB cyBhYm92ZSwgdGhyb3cgYW55IHR5cG1vZCBlcnJvciBhZnRlciBmaW5pc2hpbmcgc3ludGF4 IGNoZWNrICovCi0JYXBwbHlfdHlwbW9kX3NwZWNpYWwocmVzLCB0eXBtb2QpOworCWFwcGx5 X3R5cG1vZF9zcGVjaWFsKHJlcywgdHlwbW9kLCBoYXZlX2Vycm9yKTsKIAotCVBHX1JFVFVS Tl9OVU1FUklDKHJlcyk7CisJcmV0dXJuIHJlczsKIH0KIAorLyoKKyAqIG51bWVyaWNfaW4o KSAtCisgKgorICoJSW5wdXQgZnVuY3Rpb24gZm9yIG51bWVyaWMgZGF0YSB0eXBlCisgKi8K K0RhdHVtCitudW1lcmljX2luKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJY2hhcgkgICAqc3Ry ID0gUEdfR0VUQVJHX0NTVFJJTkcoMCk7CisKKyNpZmRlZiBOT1RfVVNFRAorCU9pZAkJCXR5 cGVsZW0gPSBQR19HRVRBUkdfT0lEKDEpOworI2VuZGlmCisJaW50MzIJCXR5cG1vZCA9IFBH X0dFVEFSR19JTlQzMigyKTsKKworCVBHX1JFVFVSTl9OVU1FUklDKG51bWVyaWNfaW5fb3B0 X2Vycm9yKHN0ciwgdHlwbW9kLCBOVUxMKSk7Cit9CiAKIC8qCiAgKiBudW1lcmljX291dCgp IC0KQEAgLTEwNTgsNyArMTA4Niw3IEBAIG51bWVyaWNfcmVjdihQR19GVU5DVElPTl9BUkdT KQogCXsKIAkJdHJ1bmNfdmFyKCZ2YWx1ZSwgdmFsdWUuZHNjYWxlKTsKIAotCQlhcHBseV90 eXBtb2QoJnZhbHVlLCB0eXBtb2QpOworCQlhcHBseV90eXBtb2QoJnZhbHVlLCB0eXBtb2Qs IE5VTEwpOwogCiAJCXJlcyA9IG1ha2VfcmVzdWx0KCZ2YWx1ZSk7CiAJfQpAQCAtMTA2Nyw3 ICsxMDk1LDcgQEAgbnVtZXJpY19yZWN2KFBHX0ZVTkNUSU9OX0FSR1MpCiAJCS8qIGFwcGx5 X3R5cG1vZF9zcGVjaWFsIHdhbnRzIHVzIHRvIG1ha2UgdGhlIE51bWVyaWMgZmlyc3QgKi8K IAkJcmVzID0gbWFrZV9yZXN1bHQoJnZhbHVlKTsKIAotCQlhcHBseV90eXBtb2Rfc3BlY2lh bChyZXMsIHR5cG1vZCk7CisJCWFwcGx5X3R5cG1vZF9zcGVjaWFsKHJlcywgdHlwbW9kLCBO VUxMKTsKIAl9CiAKIAlmcmVlX3ZhcigmdmFsdWUpOwpAQCAtMTE4MCw3ICsxMjA4LDcgQEAg bnVtZXJpYwkJKFBHX0ZVTkNUSU9OX0FSR1MpCiAJICovCiAJaWYgKE5VTUVSSUNfSVNfU1BF Q0lBTChudW0pKQogCXsKLQkJYXBwbHlfdHlwbW9kX3NwZWNpYWwobnVtLCB0eXBtb2QpOwor CQlhcHBseV90eXBtb2Rfc3BlY2lhbChudW0sIHR5cG1vZCwgTlVMTCk7CiAJCVBHX1JFVFVS Tl9OVU1FUklDKGR1cGxpY2F0ZV9udW1lcmljKG51bSkpOwogCX0KIApAQCAtMTIzMSw3ICsx MjU5LDcgQEAgbnVtZXJpYwkJKFBHX0ZVTkNUSU9OX0FSR1MpCiAJaW5pdF92YXIoJnZhcik7 CiAKIAlzZXRfdmFyX2Zyb21fbnVtKG51bSwgJnZhcik7Ci0JYXBwbHlfdHlwbW9kKCZ2YXIs IHR5cG1vZCk7CisJYXBwbHlfdHlwbW9kKCZ2YXIsIHR5cG1vZCwgTlVMTCk7CiAJbmV3ID0g bWFrZV9yZXN1bHQoJnZhcik7CiAKIAlmcmVlX3ZhcigmdmFyKTsKQEAgLTQzMDgsMTUgKzQz MzYsMjAgQEAgaW50OF9udW1lcmljKFBHX0ZVTkNUSU9OX0FSR1MpCiB9CiAKIAotRGF0dW0K LW51bWVyaWNfaW50OChQR19GVU5DVElPTl9BUkdTKQoraW50NjQKK251bWVyaWNfaW50OF9v cHRfZXJyb3IoTnVtZXJpYyBudW0sIGJvb2wgKmVycm9yKQogewotCU51bWVyaWMJCW51bSA9 IFBHX0dFVEFSR19OVU1FUklDKDApOwogCU51bWVyaWNWYXIJeDsKIAlpbnQ2NAkJcmVzdWx0 OwogCiAJaWYgKE5VTUVSSUNfSVNfU1BFQ0lBTChudW0pKQogCXsKKwkJaWYgKGVycm9yKQor CQl7CisJCQkqZXJyb3IgPSB0cnVlOworCQkJcmV0dXJuIDA7CisJCX0KKwogCQlpZiAoTlVN RVJJQ19JU19OQU4obnVtKSkKIAkJCWVyZXBvcnQoRVJST1IsCiAJCQkJCShlcnJjb2RlKEVS UkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKQEAgLTQzMzEsMTMgKzQzNjQsMjYgQEAg bnVtZXJpY19pbnQ4KFBHX0ZVTkNUSU9OX0FSR1MpCiAJaW5pdF92YXJfZnJvbV9udW0obnVt LCAmeCk7CiAKIAlpZiAoIW51bWVyaWN2YXJfdG9faW50NjQoJngsICZyZXN1bHQpKQorCXsK KwkJaWYgKGVycm9yKQorCQl7CisJCQkqZXJyb3IgPSB0cnVlOworCQkJcmV0dXJuIDA7CisJ CX0KKwogCQllcmVwb3J0KEVSUk9SLAogCQkJCShlcnJjb2RlKEVSUkNPREVfTlVNRVJJQ19W QUxVRV9PVVRfT0ZfUkFOR0UpLAogCQkJCSBlcnJtc2coImJpZ2ludCBvdXQgb2YgcmFuZ2Ui KSkpOworCX0KIAotCVBHX1JFVFVSTl9JTlQ2NChyZXN1bHQpOworCXJldHVybiByZXN1bHQ7 CiB9CiAKK0RhdHVtCitudW1lcmljX2ludDgoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlQR19S RVRVUk5fSU5UNjQobnVtZXJpY19pbnQ4X29wdF9lcnJvcihQR19HRVRBUkdfTlVNRVJJQygw KSwgTlVMTCkpOworfQogCiBEYXR1bQogaW50Ml9udW1lcmljKFBHX0ZVTkNUSU9OX0FSR1Mp CkBAIC00MzQ3LDE3ICs0MzkzLDIwIEBAIGludDJfbnVtZXJpYyhQR19GVU5DVElPTl9BUkdT KQogCVBHX1JFVFVSTl9OVU1FUklDKGludDY0X3RvX251bWVyaWModmFsKSk7CiB9CiAKLQot RGF0dW0KLW51bWVyaWNfaW50MihQR19GVU5DVElPTl9BUkdTKQoraW50MTYKK251bWVyaWNf aW50Ml9vcHRfZXJyb3IoTnVtZXJpYyBudW0sIGJvb2wgKmVycm9yKQogewotCU51bWVyaWMJ CW51bSA9IFBHX0dFVEFSR19OVU1FUklDKDApOwogCU51bWVyaWNWYXIJeDsKIAlpbnQ2NAkJ dmFsOwotCWludDE2CQlyZXN1bHQ7CiAKIAlpZiAoTlVNRVJJQ19JU19TUEVDSUFMKG51bSkp CiAJeworCQlpZiAoZXJyb3IpCisJCXsKKwkJCSplcnJvciA9IHRydWU7CisJCQlyZXR1cm4g MDsKKwkJfQorCiAJCWlmIChOVU1FUklDX0lTX05BTihudW0pKQogCQkJZXJlcG9ydChFUlJP UiwKIAkJCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLApAQCAt NDM3MiwyMSArNDQyMSw0MCBAQCBudW1lcmljX2ludDIoUEdfRlVOQ1RJT05fQVJHUykKIAlp bml0X3Zhcl9mcm9tX251bShudW0sICZ4KTsKIAogCWlmICghbnVtZXJpY3Zhcl90b19pbnQ2 NCgmeCwgJnZhbCkpCisJeworCQlpZiAoZXJyb3IpCisJCXsKKwkJCSplcnJvciA9IHRydWU7 CisJCQlyZXR1cm4gMDsKKwkJfQorCiAJCWVyZXBvcnQoRVJST1IsCiAJCQkJKGVycmNvZGUo RVJSQ09ERV9OVU1FUklDX1ZBTFVFX09VVF9PRl9SQU5HRSksCiAJCQkJIGVycm1zZygic21h bGxpbnQgb3V0IG9mIHJhbmdlIikpKTsKKwl9CiAKIAlpZiAodW5saWtlbHkodmFsIDwgUEdf SU5UMTZfTUlOKSB8fCB1bmxpa2VseSh2YWwgPiBQR19JTlQxNl9NQVgpKQorCXsKKwkJaWYg KGVycm9yKQorCQl7CisJCQkqZXJyb3IgPSB0cnVlOworCQkJcmV0dXJuIDA7CisJCX0KKwog CQllcmVwb3J0KEVSUk9SLAogCQkJCShlcnJjb2RlKEVSUkNPREVfTlVNRVJJQ19WQUxVRV9P VVRfT0ZfUkFOR0UpLAogCQkJCSBlcnJtc2coInNtYWxsaW50IG91dCBvZiByYW5nZSIpKSk7 CisJfQogCiAJLyogRG93bi1jb252ZXJ0IHRvIGludDIgKi8KLQlyZXN1bHQgPSAoaW50MTYp IHZhbDsKLQotCVBHX1JFVFVSTl9JTlQxNihyZXN1bHQpOworCXJldHVybiAoaW50MTYpIHZh bDsKIH0KIAorRGF0dW0KK251bWVyaWNfaW50MihQR19GVU5DVElPTl9BUkdTKQoreworCVBH X1JFVFVSTl9JTlQxNihudW1lcmljX2ludDJfb3B0X2Vycm9yKFBHX0dFVEFSR19OVU1FUklD KDApLCBOVUxMKSk7Cit9CiAKIERhdHVtCiBmbG9hdDhfbnVtZXJpYyhQR19GVU5DVElPTl9B UkdTKQpAQCAtNDQxMiw3ICs0NDgwLDcgQEAgZmxvYXQ4X251bWVyaWMoUEdfRlVOQ1RJT05f QVJHUykKIAlpbml0X3ZhcigmcmVzdWx0KTsKIAogCS8qIEFzc3VtZSB3ZSBuZWVkIG5vdCB3 b3JyeSBhYm91dCBsZWFkaW5nL3RyYWlsaW5nIHNwYWNlcyAqLwotCSh2b2lkKSBzZXRfdmFy X2Zyb21fc3RyKGJ1ZiwgYnVmLCAmcmVzdWx0KTsKKwkodm9pZCkgc2V0X3Zhcl9mcm9tX3N0 cihidWYsIGJ1ZiwgJnJlc3VsdCwgTlVMTCk7CiAKIAlyZXMgPSBtYWtlX3Jlc3VsdCgmcmVz dWx0KTsKIApAQCAtNDUwNSw3ICs0NTczLDcgQEAgZmxvYXQ0X251bWVyaWMoUEdfRlVOQ1RJ T05fQVJHUykKIAlpbml0X3ZhcigmcmVzdWx0KTsKIAogCS8qIEFzc3VtZSB3ZSBuZWVkIG5v dCB3b3JyeSBhYm91dCBsZWFkaW5nL3RyYWlsaW5nIHNwYWNlcyAqLwotCSh2b2lkKSBzZXRf dmFyX2Zyb21fc3RyKGJ1ZiwgYnVmLCAmcmVzdWx0KTsKKwkodm9pZCkgc2V0X3Zhcl9mcm9t X3N0cihidWYsIGJ1ZiwgJnJlc3VsdCwgTlVMTCk7CiAKIAlyZXMgPSBtYWtlX3Jlc3VsdCgm cmVzdWx0KTsKIApAQCAtNjgxMSw3ICs2ODc5LDggQEAgemVyb192YXIoTnVtZXJpY1ZhciAq dmFyKQogICogcmVwb3J0cy4gIChUeXBpY2FsbHkgY3Agd291bGQgYmUgdGhlIHNhbWUgZXhj ZXB0IGFkdmFuY2VkIG92ZXIgc3BhY2VzLikKICAqLwogc3RhdGljIGNvbnN0IGNoYXIgKgot c2V0X3Zhcl9mcm9tX3N0cihjb25zdCBjaGFyICpzdHIsIGNvbnN0IGNoYXIgKmNwLCBOdW1l cmljVmFyICpkZXN0KQorc2V0X3Zhcl9mcm9tX3N0cihjb25zdCBjaGFyICpzdHIsIGNvbnN0 IGNoYXIgKmNwLCBOdW1lcmljVmFyICpkZXN0LAorCQkJCSBib29sICpoYXZlX2Vycm9yKQog ewogCWJvb2wJCWhhdmVfZHAgPSBmYWxzZTsKIAlpbnQJCQlpOwpAQCAtNjg0OSwxMCArNjkx OCwxMSBAQCBzZXRfdmFyX2Zyb21fc3RyKGNvbnN0IGNoYXIgKnN0ciwgY29uc3QgY2hhciAq Y3AsIE51bWVyaWNWYXIgKmRlc3QpCiAJfQogCiAJaWYgKCFpc2RpZ2l0KCh1bnNpZ25lZCBj aGFyKSAqY3ApKQotCQllcmVwb3J0KEVSUk9SLAotCQkJCShlcnJjb2RlKEVSUkNPREVfSU5W QUxJRF9URVhUX1JFUFJFU0VOVEFUSU9OKSwKLQkJCQkgZXJybXNnKCJpbnZhbGlkIGlucHV0 IHN5bnRheCBmb3IgdHlwZSAlczogXCIlc1wiIiwKLQkJCQkJCSJudW1lcmljIiwgc3RyKSkp OworCQlSRVRVUk5fRVJST1IoZXJlcG9ydChFUlJPUiwKKwkJCQkJCQkgKGVycmNvZGUoRVJS Q09ERV9JTlZBTElEX1RFWFRfUkVQUkVTRU5UQVRJT04pLAorCQkJCQkJCSAgZXJybXNnKCJp bnZhbGlkIGlucHV0IHN5bnRheCBmb3IgdHlwZSAlczogXCIlc1wiIiwKKwkJCQkJCQkJCSAi bnVtZXJpYyIsIHN0cikpKSwKKwkJCQkJIGhhdmVfZXJyb3IpOwogCiAJZGVjZGlnaXRzID0g KHVuc2lnbmVkIGNoYXIgKikgcGFsbG9jKHN0cmxlbihjcCkgKyBERUNfRElHSVRTICogMik7 CiAKQEAgLTY4NzMsMTAgKzY5NDMsMTEgQEAgc2V0X3Zhcl9mcm9tX3N0cihjb25zdCBjaGFy ICpzdHIsIGNvbnN0IGNoYXIgKmNwLCBOdW1lcmljVmFyICpkZXN0KQogCQllbHNlIGlmICgq Y3AgPT0gJy4nKQogCQl7CiAJCQlpZiAoaGF2ZV9kcCkKLQkJCQllcmVwb3J0KEVSUk9SLAot CQkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1RFWFRfUkVQUkVTRU5UQVRJT04pLAot CQkJCQkJIGVycm1zZygiaW52YWxpZCBpbnB1dCBzeW50YXggZm9yIHR5cGUgJXM6IFwiJXNc IiIsCi0JCQkJCQkJCSJudW1lcmljIiwgc3RyKSkpOworCQkJCVJFVFVSTl9FUlJPUihlcmVw b3J0KEVSUk9SLAorCQkJCQkJCQkJIChlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9URVhUX1JF UFJFU0VOVEFUSU9OKSwKKwkJCQkJCQkJCSAgZXJybXNnKCJpbnZhbGlkIGlucHV0IHN5bnRh eCBmb3IgdHlwZSAlczogXCIlc1wiIiwKKwkJCQkJCQkJCQkJICJudW1lcmljIiwgc3RyKSkp LAorCQkJCQkJCSBoYXZlX2Vycm9yKTsKIAkJCWhhdmVfZHAgPSB0cnVlOwogCQkJY3ArKzsK IAkJfQpAQCAtNjg5NywxMCArNjk2OCwxMSBAQCBzZXRfdmFyX2Zyb21fc3RyKGNvbnN0IGNo YXIgKnN0ciwgY29uc3QgY2hhciAqY3AsIE51bWVyaWNWYXIgKmRlc3QpCiAJCWNwKys7CiAJ CWV4cG9uZW50ID0gc3RydG9sKGNwLCAmZW5kcHRyLCAxMCk7CiAJCWlmIChlbmRwdHIgPT0g Y3ApCi0JCQllcmVwb3J0KEVSUk9SLAotCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURf VEVYVF9SRVBSRVNFTlRBVElPTiksCi0JCQkJCSBlcnJtc2coImludmFsaWQgaW5wdXQgc3lu dGF4IGZvciB0eXBlICVzOiBcIiVzXCIiLAotCQkJCQkJCSJudW1lcmljIiwgc3RyKSkpOwor CQkJUkVUVVJOX0VSUk9SKGVyZXBvcnQoRVJST1IsCisJCQkJCQkJCSAoZXJyY29kZShFUlJD T0RFX0lOVkFMSURfVEVYVF9SRVBSRVNFTlRBVElPTiksCisJCQkJCQkJCSAgZXJybXNnKCJp bnZhbGlkIGlucHV0IHN5bnRheCBmb3IgdHlwZSAlczogXCIlc1wiIiwKKwkJCQkJCQkJCQkg Im51bWVyaWMiLCBzdHIpKSksCisJCQkJCQkgaGF2ZV9lcnJvcik7CiAJCWNwID0gZW5kcHRy OwogCiAJCS8qCkBAIC02OTEyLDkgKzY5ODQsMTAgQEAgc2V0X3Zhcl9mcm9tX3N0cihjb25z dCBjaGFyICpzdHIsIGNvbnN0IGNoYXIgKmNwLCBOdW1lcmljVmFyICpkZXN0KQogCQkgKiBm b3IgY29uc2lzdGVuY3kgdXNlIHRoZSBzYW1lIGVyZXBvcnQgZXJyY29kZS90ZXh0IGFzIG1h a2VfcmVzdWx0KCkuCiAJCSAqLwogCQlpZiAoZXhwb25lbnQgPj0gSU5UX01BWCAvIDIgfHwg ZXhwb25lbnQgPD0gLShJTlRfTUFYIC8gMikpCi0JCQllcmVwb3J0KEVSUk9SLAotCQkJCQko ZXJyY29kZShFUlJDT0RFX05VTUVSSUNfVkFMVUVfT1VUX09GX1JBTkdFKSwKLQkJCQkJIGVy cm1zZygidmFsdWUgb3ZlcmZsb3dzIG51bWVyaWMgZm9ybWF0IikpKTsKKwkJCVJFVFVSTl9F UlJPUihlcmVwb3J0KEVSUk9SLAorCQkJCQkJCQkgKGVycmNvZGUoRVJSQ09ERV9OVU1FUklD X1ZBTFVFX09VVF9PRl9SQU5HRSksCisJCQkJCQkJCSAgZXJybXNnKCJ2YWx1ZSBvdmVyZmxv d3MgbnVtZXJpYyBmb3JtYXQiKSkpLAorCQkJCQkJIGhhdmVfZXJyb3IpOwogCQlkd2VpZ2h0 ICs9IChpbnQpIGV4cG9uZW50OwogCQlkc2NhbGUgLT0gKGludCkgZXhwb25lbnQ7CiAJCWlm IChkc2NhbGUgPCAwKQpAQCAtNzQyMCwxNyArNzQ5MywxMCBAQCBtYWtlX3Jlc3VsdF9vcHRf ZXJyb3IoY29uc3QgTnVtZXJpY1ZhciAqdmFyLCBib29sICpoYXZlX2Vycm9yKQogCWlmIChO VU1FUklDX1dFSUdIVChyZXN1bHQpICE9IHdlaWdodCB8fAogCQlOVU1FUklDX0RTQ0FMRShy ZXN1bHQpICE9IHZhci0+ZHNjYWxlKQogCXsKLQkJaWYgKGhhdmVfZXJyb3IpCi0JCXsKLQkJ CSpoYXZlX2Vycm9yID0gdHJ1ZTsKLQkJCXJldHVybiBOVUxMOwotCQl9Ci0JCWVsc2UKLQkJ ewotCQkJZXJlcG9ydChFUlJPUiwKLQkJCQkJKGVycmNvZGUoRVJSQ09ERV9OVU1FUklDX1ZB TFVFX09VVF9PRl9SQU5HRSksCi0JCQkJCSBlcnJtc2coInZhbHVlIG92ZXJmbG93cyBudW1l cmljIGZvcm1hdCIpKSk7Ci0JCX0KKwkJUkVUVVJOX0VSUk9SKGVyZXBvcnQoRVJST1IsCisJ CQkJCQkJIChlcnJjb2RlKEVSUkNPREVfTlVNRVJJQ19WQUxVRV9PVVRfT0ZfUkFOR0UpLAor CQkJCQkJCSAgZXJybXNnKCJ2YWx1ZSBvdmVyZmxvd3MgbnVtZXJpYyBmb3JtYXQiKSkpLAor CQkJCQkgaGF2ZV9lcnJvcik7CiAJfQogCiAJZHVtcF9udW1lcmljKCJtYWtlX3Jlc3VsdCgp IiwgcmVzdWx0KTsKQEAgLTc0NTYsOCArNzUyMiw4IEBAIG1ha2VfcmVzdWx0KGNvbnN0IE51 bWVyaWNWYXIgKnZhcikKICAqCURvIGJvdW5kcyBjaGVja2luZyBhbmQgcm91bmRpbmcgYWNj b3JkaW5nIHRvIHRoZSBzcGVjaWZpZWQgdHlwbW9kLgogICoJTm90ZSB0aGF0IHRoaXMgaXMg b25seSBhcHBsaWVkIHRvIG5vcm1hbCBmaW5pdGUgdmFsdWVzLgogICovCi1zdGF0aWMgdm9p ZAotYXBwbHlfdHlwbW9kKE51bWVyaWNWYXIgKnZhciwgaW50MzIgdHlwbW9kKQorc3RhdGlj IGJvb2wKK2FwcGx5X3R5cG1vZChOdW1lcmljVmFyICp2YXIsIGludDMyIHR5cG1vZCwgYm9v bCAqaGF2ZV9lcnJvcikKIHsKIAlpbnQJCQlwcmVjaXNpb247CiAJaW50CQkJc2NhbGU7CkBA IC03NDY3LDcgKzc1MzMsNyBAQCBhcHBseV90eXBtb2QoTnVtZXJpY1ZhciAqdmFyLCBpbnQz MiB0eXBtb2QpCiAKIAkvKiBEbyBub3RoaW5nIGlmIHdlIGhhdmUgYW4gaW52YWxpZCB0eXBt b2QgKi8KIAlpZiAoIWlzX3ZhbGlkX251bWVyaWNfdHlwbW9kKHR5cG1vZCkpCi0JCXJldHVy bjsKKwkJcmV0dXJuIHRydWU7CiAKIAlwcmVjaXNpb24gPSBudW1lcmljX3R5cG1vZF9wcmVj aXNpb24odHlwbW9kKTsKIAlzY2FsZSA9IG51bWVyaWNfdHlwbW9kX3NjYWxlKHR5cG1vZCk7 CkBAIC03NTE0LDYgKzc1ODAsMTMgQEAgYXBwbHlfdHlwbW9kKE51bWVyaWNWYXIgKnZhciwg aW50MzIgdHlwbW9kKQogI2Vycm9yIHVuc3VwcG9ydGVkIE5CQVNFCiAjZW5kaWYKIAkJCQlp ZiAoZGRpZ2l0cyA+IG1heGRpZ2l0cykKKwkJCQl7CisJCQkJCWlmIChoYXZlX2Vycm9yKQor CQkJCQl7CisJCQkJCQkqaGF2ZV9lcnJvciA9IHRydWU7CisJCQkJCQlyZXR1cm4gZmFsc2U7 CisJCQkJCX0KKwogCQkJCQllcmVwb3J0KEVSUk9SLAogCQkJCQkJCShlcnJjb2RlKEVSUkNP REVfTlVNRVJJQ19WQUxVRV9PVVRfT0ZfUkFOR0UpLAogCQkJCQkJCSBlcnJtc2coIm51bWVy aWMgZmllbGQgb3ZlcmZsb3ciKSwKQEAgLTc1MjMsMTEgKzc1OTYsMTQgQEAgYXBwbHlfdHlw bW9kKE51bWVyaWNWYXIgKnZhciwgaW50MzIgdHlwbW9kKQogCQkJCQkJCQkJICAgbWF4ZGln aXRzID8gIjEwXiIgOiAiIiwKIAkJCQkJCQkJCSAgIG1heGRpZ2l0cyA/IG1heGRpZ2l0cyA6 IDEKIAkJCQkJCQkJCSAgICkpKTsKKwkJCQl9CiAJCQkJYnJlYWs7CiAJCQl9CiAJCQlkZGln aXRzIC09IERFQ19ESUdJVFM7CiAJCX0KIAl9CisKKwlyZXR1cm4gdHJ1ZTsKIH0KIAogLyoK QEAgLTc1MzcsNyArNzYxMyw3IEBAIGFwcGx5X3R5cG1vZChOdW1lcmljVmFyICp2YXIsIGlu dDMyIHR5cG1vZCkKICAqCUZvciBjb252ZW5pZW5jZSBvZiBtb3N0IGNhbGxlcnMsIHRoZSB2 YWx1ZSBpcyBwcmVzZW50ZWQgaW4gcGFja2VkIGZvcm0uCiAgKi8KIHN0YXRpYyB2b2lkCi1h cHBseV90eXBtb2Rfc3BlY2lhbChOdW1lcmljIG51bSwgaW50MzIgdHlwbW9kKQorYXBwbHlf dHlwbW9kX3NwZWNpYWwoTnVtZXJpYyBudW0sIGludDMyIHR5cG1vZCwgYm9vbCAqaGF2ZV9l cnJvcikKIHsKIAlpbnQJCQlwcmVjaXNpb247CiAJaW50CQkJc2NhbGU7CkBAIC03NTYwLDYg Kzc2MzYsMTIgQEAgYXBwbHlfdHlwbW9kX3NwZWNpYWwoTnVtZXJpYyBudW0sIGludDMyIHR5 cG1vZCkKIAlwcmVjaXNpb24gPSBudW1lcmljX3R5cG1vZF9wcmVjaXNpb24odHlwbW9kKTsK IAlzY2FsZSA9IG51bWVyaWNfdHlwbW9kX3NjYWxlKHR5cG1vZCk7CiAKKwlpZiAoaGF2ZV9l cnJvcikKKwl7CisJCSpoYXZlX2Vycm9yID0gdHJ1ZTsKKwkJcmV0dXJuOworCX0KKwogCWVy ZXBvcnQoRVJST1IsCiAJCQkoZXJyY29kZShFUlJDT0RFX05VTUVSSUNfVkFMVUVfT1VUX09G X1JBTkdFKSwKIAkJCSBlcnJtc2coIm51bWVyaWMgZmllbGQgb3ZlcmZsb3ciKSwKZGlmZiAt LWdpdCBhL3NyYy9pbmNsdWRlL3V0aWxzL251bWVyaWMuaCBiL3NyYy9pbmNsdWRlL3V0aWxz L251bWVyaWMuaAppbmRleCAzY2FhNzRkZmU3YS4uZjMyODA3Y2ZkYWEgMTAwNjQ0Ci0tLSBh L3NyYy9pbmNsdWRlL3V0aWxzL251bWVyaWMuaAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9u dW1lcmljLmgKQEAgLTg1LDYgKzg1LDEwIEBAIGV4dGVybiBOdW1lcmljIG51bWVyaWNfZGl2 X29wdF9lcnJvcihOdW1lcmljIG51bTEsIE51bWVyaWMgbnVtMiwKIAkJCQkJCQkJCSBib29s ICpoYXZlX2Vycm9yKTsKIGV4dGVybiBOdW1lcmljIG51bWVyaWNfbW9kX29wdF9lcnJvcihO dW1lcmljIG51bTEsIE51bWVyaWMgbnVtMiwKIAkJCQkJCQkJCSBib29sICpoYXZlX2Vycm9y KTsKLWV4dGVybiBpbnQzMiBudW1lcmljX2ludDRfb3B0X2Vycm9yKE51bWVyaWMgbnVtLCBi b29sICplcnJvcik7CitleHRlcm4gaW50MTYgbnVtZXJpY19pbnQyX29wdF9lcnJvcihOdW1l cmljIG51bSwgYm9vbCAqaGF2ZV9lcnJvcik7CitleHRlcm4gaW50MzIgbnVtZXJpY19pbnQ0 X29wdF9lcnJvcihOdW1lcmljIG51bSwgYm9vbCAqaGF2ZV9lcnJvcik7CitleHRlcm4gaW50 NjQgbnVtZXJpY19pbnQ4X29wdF9lcnJvcihOdW1lcmljIG51bSwgYm9vbCAqaGF2ZV9lcnJv cik7CitleHRlcm4gTnVtZXJpYyBudW1lcmljX2luX29wdF9lcnJvcihjaGFyICpzdHIsIGlu dDMyIHR5cG1vZCwKKwkJCQkJCQkJCWJvb2wgKmhhdmVfZXJyb3IpOwogCiAjZW5kaWYJCQkJ CQkJLyogX1BHX05VTUVSSUNfSF8gKi8KLS0gCjIuMTcuMQoK --------------jNrKutSsb0Ih2JPBTjkEydni Content-Type: text/x-patch; charset=UTF-8; name="v9-0005-Add-safe-input-and-type-conversion-functions-for-.patch" Content-Disposition: attachment; filename*0="v9-0005-Add-safe-input-and-type-conversion-functions-for-.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSA3M2RkNTU3NzViNGVkMjYwOWI2YjA1MjA0NjQyM2RiNjI0MWU2YTU0IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBOaWtpdGEgR2x1a2hvdiA8bi5nbHVob3ZAcG9zdGdy ZXNwcm8ucnU+CkRhdGU6IE1vbiwgMjkgQXVnIDIwMjIgMjM6NTQ6NDUgKzAzMDAKU3ViamVj dDogW1BBVENIIHY5IDUvOV0gQWRkIHNhZmUgaW5wdXQgYW5kIHR5cGUgY29udmVyc2lvbiBm dW5jdGlvbnMgZm9yCiBkYXRldGltZSB0eXBlcwoKLS0tCiBjb250cmliL2FkbWlucGFjay9h ZG1pbnBhY2suYyAgICAgfCAgIDIgKy0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9kYXRlLmMg ICAgICB8IDI3NyArKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0KIHNyYy9iYWNrZW5k L3V0aWxzL2FkdC9kYXRldGltZS5jICB8ICAxNiArLQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0 L3RpbWVzdGFtcC5jIHwgMTI2ICsrKysrKysrKysrLS0tCiBzcmMvYmFja2VuZC91dGlscy9t aXNjL2d1Yy5jICAgICAgfCAgIDIgKy0KIHNyYy9pbmNsdWRlL3V0aWxzL2RhdGUuaCAgICAg ICAgICB8ICAxMyArKwogc3JjL2luY2x1ZGUvdXRpbHMvZGF0ZXRpbWUuaCAgICAgIHwgICA2 ICstCiBzcmMvaW5jbHVkZS91dGlscy90aW1lc3RhbXAuaCAgICAgfCAgIDYgKwogOCBmaWxl cyBjaGFuZ2VkLCAzNjMgaW5zZXJ0aW9ucygrKSwgODUgZGVsZXRpb25zKC0pCgpkaWZmIC0t Z2l0IGEvY29udHJpYi9hZG1pbnBhY2svYWRtaW5wYWNrLmMgYi9jb250cmliL2FkbWlucGFj ay9hZG1pbnBhY2suYwppbmRleCAwM2FkZGYxZGM1Zi4uNGJmNzk1ZDQyYTQgMTAwNjQ0Ci0t LSBhL2NvbnRyaWIvYWRtaW5wYWNrL2FkbWlucGFjay5jCisrKyBiL2NvbnRyaWIvYWRtaW5w YWNrL2FkbWlucGFjay5jCkBAIC01NzEsNyArNTcxLDcgQEAgcGdfbG9nZGlyX2xzX2ludGVy bmFsKEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvKQogCQlpZiAoUGFyc2VEYXRlVGltZSh0aW1l c3RhbXBidWYsIGxvd3N0ciwgTUFYREFURUxFTiwgZmllbGQsIGZ0eXBlLCBNQVhEQVRFRklF TERTLCAmbmYpKQogCQkJY29udGludWU7CiAKLQkJaWYgKERlY29kZURhdGVUaW1lKGZpZWxk LCBmdHlwZSwgbmYsICZkdHlwZSwgJmRhdGUsICZmc2VjLCAmdHopKQorCQlpZiAoRGVjb2Rl RGF0ZVRpbWUoZmllbGQsIGZ0eXBlLCBuZiwgJmR0eXBlLCAmZGF0ZSwgJmZzZWMsICZ0eiwg dHJ1ZSkpCiAJCQljb250aW51ZTsKIAogCQkvKiBTZWVtcyB0aGUgdGltZXN0YW1wIGlzIE9L OyBwcmVwYXJlIGFuZCByZXR1cm4gdHVwbGUgKi8KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L3V0aWxzL2FkdC9kYXRlLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvZGF0ZS5jCmluZGV4 IDA4MWRmYTI0NTBmLi40M2E5NmZjNTE0MiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRp bHMvYWR0L2RhdGUuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvZGF0ZS5jCkBAIC0x MDgsMTAgKzEwOCw5IEBAIGFueXRpbWVfdHlwbW9kb3V0KGJvb2wgaXN0eiwgaW50MzIgdHlw bW9kKQogLyogZGF0ZV9pbigpCiAgKiBHaXZlbiBkYXRlIHRleHQgc3RyaW5nLCBjb252ZXJ0 IHRvIGludGVybmFsIGRhdGUgZm9ybWF0LgogICovCi1EYXR1bQotZGF0ZV9pbihQR19GVU5D VElPTl9BUkdTKQorRGF0ZUFEVAorZGF0ZV9pbl9vcHRfZXJyb3IoY2hhciAqc3RyLCBib29s ICplcnJvcikKIHsKLQljaGFyCSAgICpzdHIgPSBQR19HRVRBUkdfQ1NUUklORygwKTsKIAlE YXRlQURUCQlkYXRlOwogCWZzZWNfdAkJZnNlYzsKIAlzdHJ1Y3QgcGdfdG0gdHQsCkBAIC0x MjcsOSArMTI2LDE4IEBAIGRhdGVfaW4oUEdfRlVOQ1RJT05fQVJHUykKIAlkdGVyciA9IFBh cnNlRGF0ZVRpbWUoc3RyLCB3b3JrYnVmLCBzaXplb2Yod29ya2J1ZiksCiAJCQkJCQkgIGZp ZWxkLCBmdHlwZSwgTUFYREFURUZJRUxEUywgJm5mKTsKIAlpZiAoZHRlcnIgPT0gMCkKLQkJ ZHRlcnIgPSBEZWNvZGVEYXRlVGltZShmaWVsZCwgZnR5cGUsIG5mLCAmZHR5cGUsIHRtLCAm ZnNlYywgJnR6cCk7CisJCWR0ZXJyID0gRGVjb2RlRGF0ZVRpbWUoZmllbGQsIGZ0eXBlLCBu ZiwgJmR0eXBlLCB0bSwgJmZzZWMsICZ0enAsCisJCQkJCQkJICAgIWVycm9yKTsKIAlpZiAo ZHRlcnIgIT0gMCkKKwl7CisJCWlmIChlcnJvcikKKwkJeworCQkJKmVycm9yID0gdHJ1ZTsK KwkJCXJldHVybiAwOworCQl9CisKIAkJRGF0ZVRpbWVQYXJzZUVycm9yKGR0ZXJyLCBzdHIs ICJkYXRlIik7CisJfQogCiAJc3dpdGNoIChkdHlwZSkKIAl7CkBAIC0xNDksMjUgKzE1Nyw1 NiBAQCBkYXRlX2luKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCQlQR19SRVRVUk5fREFURUFEVChk YXRlKTsKIAogCQlkZWZhdWx0OgorCQkJaWYgKCplcnJvcikKKwkJCXsKKwkJCQkqZXJyb3Ig PSB0cnVlOworCQkJCXJldHVybiAwOworCQkJfQorCiAJCQlEYXRlVGltZVBhcnNlRXJyb3Io RFRFUlJfQkFEX0ZPUk1BVCwgc3RyLCAiZGF0ZSIpOwogCQkJYnJlYWs7CiAJfQogCiAJLyog UHJldmVudCBvdmVyZmxvdyBpbiBKdWxpYW4tZGF5IHJvdXRpbmVzICovCiAJaWYgKCFJU19W QUxJRF9KVUxJQU4odG0tPnRtX3llYXIsIHRtLT50bV9tb24sIHRtLT50bV9tZGF5KSkKKwl7 CisJCWlmIChlcnJvcikKKwkJeworCQkJKmVycm9yID0gdHJ1ZTsKKwkJCXJldHVybiAwOwor CQl9CisKIAkJZXJlcG9ydChFUlJPUiwKIAkJCQkoZXJyY29kZShFUlJDT0RFX0RBVEVUSU1F X1ZBTFVFX09VVF9PRl9SQU5HRSksCiAJCQkJIGVycm1zZygiZGF0ZSBvdXQgb2YgcmFuZ2U6 IFwiJXNcIiIsIHN0cikpKTsKKwl9CiAKIAlkYXRlID0gZGF0ZTJqKHRtLT50bV95ZWFyLCB0 bS0+dG1fbW9uLCB0bS0+dG1fbWRheSkgLSBQT1NUR1JFU19FUE9DSF9KREFURTsKIAogCS8q IE5vdyBjaGVjayBmb3IganVzdC1vdXQtb2YtcmFuZ2UgZGF0ZXMgKi8KIAlpZiAoIUlTX1ZB TElEX0RBVEUoZGF0ZSkpCisJeworCQlpZiAoZXJyb3IpCisJCXsKKwkJCSplcnJvciA9IHRy dWU7CisJCQlyZXR1cm4gMDsKKwkJfQorCiAJCWVyZXBvcnQoRVJST1IsCiAJCQkJKGVycmNv ZGUoRVJSQ09ERV9EQVRFVElNRV9WQUxVRV9PVVRfT0ZfUkFOR0UpLAogCQkJCSBlcnJtc2co ImRhdGUgb3V0IG9mIHJhbmdlOiBcIiVzXCIiLCBzdHIpKSk7CisJfQogCi0JUEdfUkVUVVJO X0RBVEVBRFQoZGF0ZSk7CisJcmV0dXJuIGRhdGU7Cit9CisKKy8qIGRhdGVfaW4oKQorICog R2l2ZW4gZGF0ZSB0ZXh0IHN0cmluZywgY29udmVydCB0byBpbnRlcm5hbCBkYXRlIGZvcm1h dC4KKyAqLworRGF0dW0KK2RhdGVfaW4oUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlQR19SRVRV Uk5fREFURUFEVChkYXRlX2luX29wdF9lcnJvcihQR19HRVRBUkdfQ1NUUklORygwKSwgTlVM TCkpOwogfQogCiAvKiBkYXRlX291dCgpCkBAIC0xMjg2LDEwICsxMzI1LDkgQEAgZGF0ZV90 aW1lc3RhbXAoUEdfRlVOQ1RJT05fQVJHUykKIC8qIHRpbWVzdGFtcF9kYXRlKCkKICAqIENv bnZlcnQgdGltZXN0YW1wIHRvIGRhdGUgZGF0YSB0eXBlLgogICovCi1EYXR1bQotdGltZXN0 YW1wX2RhdGUoUEdfRlVOQ1RJT05fQVJHUykKK0RhdGVBRFQKK3RpbWVzdGFtcF9kYXRlX29w dF9lcnJvcihUaW1lc3RhbXAgdGltZXN0YW1wLCBib29sICplcnJvcikKIHsKLQlUaW1lc3Rh bXAJdGltZXN0YW1wID0gUEdfR0VUQVJHX1RJTUVTVEFNUCgwKTsKIAlEYXRlQURUCQlyZXN1 bHQ7CiAJc3RydWN0IHBnX3RtIHR0LAogCQkJICAgKnRtID0gJnR0OwpAQCAtMTMwMiwxNiAr MTM0MCwzMiBAQCB0aW1lc3RhbXBfZGF0ZShQR19GVU5DVElPTl9BUkdTKQogCWVsc2UKIAl7 CiAJCWlmICh0aW1lc3RhbXAydG0odGltZXN0YW1wLCBOVUxMLCB0bSwgJmZzZWMsIE5VTEws IE5VTEwpICE9IDApCisJCXsKKwkJCWlmIChlcnJvcikKKwkJCXsKKwkJCQkqZXJyb3IgPSB0 cnVlOworCQkJCXJldHVybiAwOworCQkJfQorCiAJCQllcmVwb3J0KEVSUk9SLAogCQkJCQko ZXJyY29kZShFUlJDT0RFX0RBVEVUSU1FX1ZBTFVFX09VVF9PRl9SQU5HRSksCiAJCQkJCSBl cnJtc2coInRpbWVzdGFtcCBvdXQgb2YgcmFuZ2UiKSkpOworCQl9CiAKIAkJcmVzdWx0ID0g ZGF0ZTJqKHRtLT50bV95ZWFyLCB0bS0+dG1fbW9uLCB0bS0+dG1fbWRheSkgLSBQT1NUR1JF U19FUE9DSF9KREFURTsKIAl9CiAKLQlQR19SRVRVUk5fREFURUFEVChyZXN1bHQpOworCXJl dHVybiByZXN1bHQ7CiB9CiAKKy8qIHRpbWVzdGFtcF9kYXRlKCkKKyAqIENvbnZlcnQgdGlt ZXN0YW1wIHRvIGRhdGUgZGF0YSB0eXBlLgorICovCitEYXR1bQordGltZXN0YW1wX2RhdGUo UEdfRlVOQ1RJT05fQVJHUykKK3sKKwlQR19SRVRVUk5fREFURUFEVCh0aW1lc3RhbXBfZGF0 ZV9vcHRfZXJyb3IoUEdfR0VUQVJHX1RJTUVTVEFNUCgwKSwgTlVMTCkpOworfQogCiAvKiBk YXRlX3RpbWVzdGFtcHR6KCkKICAqIENvbnZlcnQgZGF0ZSB0byB0aW1lc3RhbXAgd2l0aCB0 aW1lIHpvbmUgZGF0YSB0eXBlLgpAQCAtMTMyNywxNCArMTM4MSw5IEBAIGRhdGVfdGltZXN0 YW1wdHooUEdfRlVOQ1RJT05fQVJHUykKIAlQR19SRVRVUk5fVElNRVNUQU1QKHJlc3VsdCk7 CiB9CiAKLQotLyogdGltZXN0YW1wdHpfZGF0ZSgpCi0gKiBDb252ZXJ0IHRpbWVzdGFtcCB3 aXRoIHRpbWUgem9uZSB0byBkYXRlIGRhdGEgdHlwZS4KLSAqLwotRGF0dW0KLXRpbWVzdGFt cHR6X2RhdGUoUEdfRlVOQ1RJT05fQVJHUykKK0RhdGVBRFQKK3RpbWVzdGFtcHR6X2RhdGVf b3B0X2Vycm9yKFRpbWVzdGFtcFR6IHRpbWVzdGFtcCwgYm9vbCAqZXJyb3IpCiB7Ci0JVGlt ZXN0YW1wVHogdGltZXN0YW1wID0gUEdfR0VUQVJHX1RJTUVTVEFNUCgwKTsKIAlEYXRlQURU CQlyZXN1bHQ7CiAJc3RydWN0IHBnX3RtIHR0LAogCQkJICAgKnRtID0gJnR0OwpAQCAtMTM0 OCwxNCArMTM5NywzMSBAQCB0aW1lc3RhbXB0el9kYXRlKFBHX0ZVTkNUSU9OX0FSR1MpCiAJ ZWxzZQogCXsKIAkJaWYgKHRpbWVzdGFtcDJ0bSh0aW1lc3RhbXAsICZ0eiwgdG0sICZmc2Vj LCBOVUxMLCBOVUxMKSAhPSAwKQorCQl7CisJCQlpZiAoZXJyb3IpCisJCQl7CisJCQkJKmVy cm9yID0gdHJ1ZTsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKwogCQkJZXJlcG9ydChFUlJPUiwK IAkJCQkJKGVycmNvZGUoRVJSQ09ERV9EQVRFVElNRV9WQUxVRV9PVVRfT0ZfUkFOR0UpLAog CQkJCQkgZXJybXNnKCJ0aW1lc3RhbXAgb3V0IG9mIHJhbmdlIikpKTsKKwkJfQogCiAJCXJl c3VsdCA9IGRhdGUyaih0bS0+dG1feWVhciwgdG0tPnRtX21vbiwgdG0tPnRtX21kYXkpIC0g UE9TVEdSRVNfRVBPQ0hfSkRBVEU7CiAJfQogCi0JUEdfUkVUVVJOX0RBVEVBRFQocmVzdWx0 KTsKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKiB0aW1lc3RhbXB0el9kYXRlKCkKKyAqIENv bnZlcnQgdGltZXN0YW1wIHdpdGggdGltZSB6b25lIHRvIGRhdGUgZGF0YSB0eXBlLgorICov CitEYXR1bQordGltZXN0YW1wdHpfZGF0ZShQR19GVU5DVElPTl9BUkdTKQoreworCVBHX1JF VFVSTl9EQVRFQURUKHRpbWVzdGFtcHR6X2RhdGVfb3B0X2Vycm9yKFBHX0dFVEFSR19USU1F U1RBTVAoMCksIE5VTEwpKTsKIH0KIAogCkBAIC0xMzYzLDE1ICsxNDI5LDkgQEAgdGltZXN0 YW1wdHpfZGF0ZShQR19GVU5DVElPTl9BUkdTKQogICoJIFRpbWUgQURUCiAgKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKiovCiAKLURhdHVtCi10aW1lX2luKFBHX0ZVTkNUSU9OX0FSR1MpCitU aW1lQURUCit0aW1lX2luX29wdF9lcnJvcihjaGFyICpzdHIsIGludDMyIHR5cG1vZCwgYm9v bCAqZXJyb3IpCiB7Ci0JY2hhcgkgICAqc3RyID0gUEdfR0VUQVJHX0NTVFJJTkcoMCk7Ci0K LSNpZmRlZiBOT1RfVVNFRAotCU9pZAkJCXR5cGVsZW0gPSBQR19HRVRBUkdfT0lEKDEpOwot I2VuZGlmCi0JaW50MzIJCXR5cG1vZCA9IFBHX0dFVEFSR19JTlQzMigyKTsKIAlUaW1lQURU CQlyZXN1bHQ7CiAJZnNlY190CQlmc2VjOwogCXN0cnVjdCBwZ190bSB0dCwKQEAgLTEzODcs MTQgKzE0NDcsMzUgQEAgdGltZV9pbihQR19GVU5DVElPTl9BUkdTKQogCWR0ZXJyID0gUGFy c2VEYXRlVGltZShzdHIsIHdvcmtidWYsIHNpemVvZih3b3JrYnVmKSwKIAkJCQkJCSAgZmll bGQsIGZ0eXBlLCBNQVhEQVRFRklFTERTLCAmbmYpOwogCWlmIChkdGVyciA9PSAwKQotCQlk dGVyciA9IERlY29kZVRpbWVPbmx5KGZpZWxkLCBmdHlwZSwgbmYsICZkdHlwZSwgdG0sICZm c2VjLCAmdHopOworCQlkdGVyciA9IERlY29kZVRpbWVPbmx5KGZpZWxkLCBmdHlwZSwgbmYs ICZkdHlwZSwgdG0sICZmc2VjLCAmdHosCisJCQkJCQkJICAgIWVycm9yKTsKIAlpZiAoZHRl cnIgIT0gMCkKKwl7CisJCWlmIChlcnJvcikKKwkJeworCQkJKmVycm9yID0gdHJ1ZTsKKwkJ CXJldHVybiAwOworCQl9CisKIAkJRGF0ZVRpbWVQYXJzZUVycm9yKGR0ZXJyLCBzdHIsICJ0 aW1lIik7CisJfQogCiAJdG0ydGltZSh0bSwgZnNlYywgJnJlc3VsdCk7CiAJQWRqdXN0VGlt ZUZvclR5cG1vZCgmcmVzdWx0LCB0eXBtb2QpOwogCi0JUEdfUkVUVVJOX1RJTUVBRFQocmVz dWx0KTsKKwlyZXR1cm4gcmVzdWx0OworfQorCitEYXR1bQordGltZV9pbihQR19GVU5DVElP Tl9BUkdTKQoreworCWNoYXIJICAgKnN0ciA9IFBHX0dFVEFSR19DU1RSSU5HKDApOworI2lm ZGVmIE5PVF9VU0VECisJT2lkCQkJdHlwZWxlbSA9IFBHX0dFVEFSR19PSUQoMSk7CisjZW5k aWYKKwlpbnQzMgkJdHlwbW9kID0gUEdfR0VUQVJHX0lOVDMyKDIpOworCisJUEdfUkVUVVJO X1RJTUVBRFQodGltZV9pbl9vcHRfZXJyb3Ioc3RyLCB0eXBtb2QsIE5VTEwpKTsKIH0KIAog LyogdG0ydGltZSgpCkBAIC0xODg5LDIyICsxOTcwLDMyIEBAIG92ZXJsYXBzX3RpbWUoUEdf RlVOQ1RJT05fQVJHUykKIC8qIHRpbWVzdGFtcF90aW1lKCkKICAqIENvbnZlcnQgdGltZXN0 YW1wIHRvIHRpbWUgZGF0YSB0eXBlLgogICovCi1EYXR1bQotdGltZXN0YW1wX3RpbWUoUEdf RlVOQ1RJT05fQVJHUykKK1RpbWVBRFQKK3RpbWVzdGFtcF90aW1lX29wdF9lcnJvcihUaW1l c3RhbXAgdGltZXN0YW1wLCBib29sICppc251bGwsIGJvb2wgKmVycm9yKQogewotCVRpbWVz dGFtcAl0aW1lc3RhbXAgPSBQR19HRVRBUkdfVElNRVNUQU1QKDApOwogCVRpbWVBRFQJCXJl c3VsdDsKIAlzdHJ1Y3QgcGdfdG0gdHQsCiAJCQkgICAqdG0gPSAmdHQ7CiAJZnNlY190CQlm c2VjOwogCiAJaWYgKFRJTUVTVEFNUF9OT1RfRklOSVRFKHRpbWVzdGFtcCkpCi0JCVBHX1JF VFVSTl9OVUxMKCk7CisJeworCQkqaXNudWxsID0gdHJ1ZTsKKwkJcmV0dXJuIDA7CisJfQog CiAJaWYgKHRpbWVzdGFtcDJ0bSh0aW1lc3RhbXAsIE5VTEwsIHRtLCAmZnNlYywgTlVMTCwg TlVMTCkgIT0gMCkKKwl7CisJCWlmIChlcnJvcikKKwkJeworCQkJKmVycm9yID0gKmlzbnVs bCA9IHRydWU7CisJCQlyZXR1cm4gKERhdHVtKSAwOworCQl9CisKIAkJZXJlcG9ydChFUlJP UiwKIAkJCQkoZXJyY29kZShFUlJDT0RFX0RBVEVUSU1FX1ZBTFVFX09VVF9PRl9SQU5HRSks CiAJCQkJIGVycm1zZygidGltZXN0YW1wIG91dCBvZiByYW5nZSIpKSk7CisJfQogCiAJLyoK IAkgKiBDb3VsZCBhbHNvIGRvIHRoaXMgd2l0aCB0aW1lID0gKHRpbWVzdGFtcCAvIFVTRUNT X1BFUl9EQVkgKgpAQCAtMTkxMiwxNyArMjAwMywzMyBAQCB0aW1lc3RhbXBfdGltZShQR19G VU5DVElPTl9BUkdTKQogCSAqLwogCXJlc3VsdCA9ICgoKCh0bS0+dG1faG91ciAqIE1JTlNf UEVSX0hPVVIgKyB0bS0+dG1fbWluKSAqIFNFQ1NfUEVSX01JTlVURSkgKyB0bS0+dG1fc2Vj KSAqCiAJCQkgIFVTRUNTX1BFUl9TRUMpICsgZnNlYzsKKwkqaXNudWxsID0gZmFsc2U7CiAK LQlQR19SRVRVUk5fVElNRUFEVChyZXN1bHQpOworCXJldHVybiByZXN1bHQ7CiB9CiAKLS8q IHRpbWVzdGFtcHR6X3RpbWUoKQotICogQ29udmVydCB0aW1lc3RhbXB0eiB0byB0aW1lIGRh dGEgdHlwZS4KKy8qIHRpbWVzdGFtcF90aW1lKCkKKyAqIENvbnZlcnQgdGltZXN0YW1wIHRv IHRpbWUgZGF0YSB0eXBlLgogICovCiBEYXR1bQotdGltZXN0YW1wdHpfdGltZShQR19GVU5D VElPTl9BUkdTKQordGltZXN0YW1wX3RpbWUoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlib29s CQlpc251bGw7CisJVGltZUFEVAkJdGltZSA9CisJCXRpbWVzdGFtcF90aW1lX29wdF9lcnJv cihQR19HRVRBUkdfVElNRVNUQU1QKDApLCAmaXNudWxsLCBOVUxMKTsKKworCWlmIChpc251 bGwpCisJCVBHX1JFVFVSTl9OVUxMKCk7CisJZWxzZQorCQlQR19SRVRVUk5fVElNRUFEVCh0 aW1lKTsKK30KKworLyogdGltZXN0YW1wdHpfdGltZV9vcHRfZXJyb3IoKQorICogQ29udmVy dCB0aW1lc3RhbXB0eiB0byB0aW1lIGRhdGEgdHlwZS4KKyAqLworVGltZUFEVAordGltZXN0 YW1wdHpfdGltZV9vcHRfZXJyb3IoVGltZXN0YW1wVHogdGltZXN0YW1wLCBib29sICppc251 bGwsIGJvb2wgKmVycm9yKQogewotCVRpbWVzdGFtcFR6IHRpbWVzdGFtcCA9IFBHX0dFVEFS R19USU1FU1RBTVAoMCk7CiAJVGltZUFEVAkJcmVzdWx0OwogCXN0cnVjdCBwZ190bSB0dCwK IAkJCSAgICp0bSA9ICZ0dDsKQEAgLTE5MzAsMTIgKzIwMzcsMjMgQEAgdGltZXN0YW1wdHpf dGltZShQR19GVU5DVElPTl9BUkdTKQogCWZzZWNfdAkJZnNlYzsKIAogCWlmIChUSU1FU1RB TVBfTk9UX0ZJTklURSh0aW1lc3RhbXApKQotCQlQR19SRVRVUk5fTlVMTCgpOworCXsKKwkJ KmlzbnVsbCA9IHRydWU7CisJCXJldHVybiAwOworCX0KIAogCWlmICh0aW1lc3RhbXAydG0o dGltZXN0YW1wLCAmdHosIHRtLCAmZnNlYywgTlVMTCwgTlVMTCkgIT0gMCkKKwl7CisJCWlm IChlcnJvcikKKwkJeworCQkJKmVycm9yID0gKmlzbnVsbCA9IHRydWU7CisJCQlyZXR1cm4g MDsKKwkJfQorCiAJCWVyZXBvcnQoRVJST1IsCiAJCQkJKGVycmNvZGUoRVJSQ09ERV9EQVRF VElNRV9WQUxVRV9PVVRfT0ZfUkFOR0UpLAogCQkJCSBlcnJtc2coInRpbWVzdGFtcCBvdXQg b2YgcmFuZ2UiKSkpOworCX0KIAogCS8qCiAJICogQ291bGQgYWxzbyBkbyB0aGlzIHdpdGgg dGltZSA9ICh0aW1lc3RhbXAgLyBVU0VDU19QRVJfREFZICoKQEAgLTE5NDMsOCArMjA2MSwy NSBAQCB0aW1lc3RhbXB0el90aW1lKFBHX0ZVTkNUSU9OX0FSR1MpCiAJICovCiAJcmVzdWx0 ID0gKCgoKHRtLT50bV9ob3VyICogTUlOU19QRVJfSE9VUiArIHRtLT50bV9taW4pICogU0VD U19QRVJfTUlOVVRFKSArIHRtLT50bV9zZWMpICoKIAkJCSAgVVNFQ1NfUEVSX1NFQykgKyBm c2VjOworCSppc251bGwgPSBmYWxzZTsKIAotCVBHX1JFVFVSTl9USU1FQURUKHJlc3VsdCk7 CisJcmV0dXJuIHJlc3VsdDsKK30KKworLyogdGltZXN0YW1wdHpfdGltZSgpCisgKiBDb252 ZXJ0IHRpbWVzdGFtcHR6IHRvIHRpbWUgZGF0YSB0eXBlLgorICovCitEYXR1bQordGltZXN0 YW1wdHpfdGltZShQR19GVU5DVElPTl9BUkdTKQoreworCWJvb2wJCWlzbnVsbDsKKwlUaW1l QURUCQlyZXN1bHQgPQorCQl0aW1lc3RhbXB0el90aW1lX29wdF9lcnJvcihQR19HRVRBUkdf VElNRVNUQU1QKDApLCAmaXNudWxsLCBOVUxMKTsKKworCWlmIChpc251bGwpCisJCVBHX1JF VFVSTl9OVUxMKCk7CisJZWxzZQorCQlQR19SRVRVUk5fVElNRUFEVChyZXN1bHQpOwogfQog CiAvKiBkYXRldGltZV90aW1lc3RhbXAoKQpAQCAtMjI0OSwxNSArMjM4NCw5IEBAIHRtMnRp bWV0eihzdHJ1Y3QgcGdfdG0gKnRtLCBmc2VjX3QgZnNlYywgaW50IHR6LCBUaW1lVHpBRFQg KnJlc3VsdCkKIAlyZXR1cm4gMDsKIH0KIAotRGF0dW0KLXRpbWV0el9pbihQR19GVU5DVElP Tl9BUkdTKQorVGltZVR6QURUICoKK3RpbWV0el9pbl9vcHRfZXJyb3IoY2hhciAqc3RyLCBp bnQzMiB0eXBtb2QsIGJvb2wgKmVycm9yKQogewotCWNoYXIJICAgKnN0ciA9IFBHX0dFVEFS R19DU1RSSU5HKDApOwotCi0jaWZkZWYgTk9UX1VTRUQKLQlPaWQJCQl0eXBlbGVtID0gUEdf R0VUQVJHX09JRCgxKTsKLSNlbmRpZgotCWludDMyCQl0eXBtb2QgPSBQR19HRVRBUkdfSU5U MzIoMik7CiAJVGltZVR6QURUICAqcmVzdWx0OwogCWZzZWNfdAkJZnNlYzsKIAlzdHJ1Y3Qg cGdfdG0gdHQsCkBAIC0yMjczLDE3ICsyNDAyLDM4IEBAIHRpbWV0el9pbihQR19GVU5DVElP Tl9BUkdTKQogCWR0ZXJyID0gUGFyc2VEYXRlVGltZShzdHIsIHdvcmtidWYsIHNpemVvZih3 b3JrYnVmKSwKIAkJCQkJCSAgZmllbGQsIGZ0eXBlLCBNQVhEQVRFRklFTERTLCAmbmYpOwog CWlmIChkdGVyciA9PSAwKQotCQlkdGVyciA9IERlY29kZVRpbWVPbmx5KGZpZWxkLCBmdHlw ZSwgbmYsICZkdHlwZSwgdG0sICZmc2VjLCAmdHopOworCQlkdGVyciA9IERlY29kZVRpbWVP bmx5KGZpZWxkLCBmdHlwZSwgbmYsICZkdHlwZSwgdG0sICZmc2VjLCAmdHosCisJCQkJCQkJ ICAgIWVycm9yKTsKIAlpZiAoZHRlcnIgIT0gMCkKKwl7CisJCWlmIChlcnJvcikKKwkJewor CQkJKmVycm9yID0gdHJ1ZTsKKwkJCXJldHVybiBOVUxMOworCQl9CisKIAkJRGF0ZVRpbWVQ YXJzZUVycm9yKGR0ZXJyLCBzdHIsICJ0aW1lIHdpdGggdGltZSB6b25lIik7CisJfQogCiAJ cmVzdWx0ID0gKFRpbWVUekFEVCAqKSBwYWxsb2Moc2l6ZW9mKFRpbWVUekFEVCkpOwogCXRt MnRpbWV0eih0bSwgZnNlYywgdHosIHJlc3VsdCk7CiAJQWRqdXN0VGltZUZvclR5cG1vZCgm KHJlc3VsdC0+dGltZSksIHR5cG1vZCk7CiAKLQlQR19SRVRVUk5fVElNRVRaQURUX1AocmVz dWx0KTsKKwlyZXR1cm4gcmVzdWx0OwogfQogCitEYXR1bQordGltZXR6X2luKFBHX0ZVTkNU SU9OX0FSR1MpCit7CisJY2hhcgkgICAqc3RyID0gUEdfR0VUQVJHX0NTVFJJTkcoMCk7CisK KyNpZmRlZiBOT1RfVVNFRAorCU9pZAkJCXR5cGVsZW0gPSBQR19HRVRBUkdfT0lEKDEpOwor I2VuZGlmCisJaW50MzIJCXR5cG1vZCA9IFBHX0dFVEFSR19JTlQzMigyKTsKKworCVBHX1JF VFVSTl9USU1FVFpBRFRfUCh0aW1ldHpfaW5fb3B0X2Vycm9yKHN0ciwgdHlwbW9kLCBOVUxM KSk7Cit9CiBEYXR1bQogdGltZXR6X291dChQR19GVU5DVElPTl9BUkdTKQogewpAQCAtMjgx MiwxMCArMjk2Miw5IEBAIHRpbWVfdGltZXR6KFBHX0ZVTkNUSU9OX0FSR1MpCiAvKiB0aW1l c3RhbXB0el90aW1ldHooKQogICogQ29udmVydCB0aW1lc3RhbXAgdG8gdGltZXR6IGRhdGEg dHlwZS4KICAqLwotRGF0dW0KLXRpbWVzdGFtcHR6X3RpbWV0eihQR19GVU5DVElPTl9BUkdT KQorVGltZVR6QURUICoKK3RpbWVzdGFtcHR6X3RpbWV0el9vcHRfZXJyb3IoVGltZXN0YW1w VHogdGltZXN0YW1wLCBib29sICplcnJvcikKIHsKLQlUaW1lc3RhbXBUeiB0aW1lc3RhbXAg PSBQR19HRVRBUkdfVElNRVNUQU1QKDApOwogCVRpbWVUekFEVCAgKnJlc3VsdDsKIAlzdHJ1 Y3QgcGdfdG0gdHQsCiAJCQkgICAqdG0gPSAmdHQ7CkBAIC0yODIzLDIwICsyOTcyLDQyIEBA IHRpbWVzdGFtcHR6X3RpbWV0eihQR19GVU5DVElPTl9BUkdTKQogCWZzZWNfdAkJZnNlYzsK IAogCWlmIChUSU1FU1RBTVBfTk9UX0ZJTklURSh0aW1lc3RhbXApKQotCQlQR19SRVRVUk5f TlVMTCgpOworCQlyZXR1cm4gTlVMTDsKIAogCWlmICh0aW1lc3RhbXAydG0odGltZXN0YW1w LCAmdHosIHRtLCAmZnNlYywgTlVMTCwgTlVMTCkgIT0gMCkKKwl7CisJCWlmIChlcnJvcikK KwkJeworCQkJKmVycm9yID0gdHJ1ZTsKKwkJCXJldHVybiBOVUxMOworCQl9CisKIAkJZXJl cG9ydChFUlJPUiwKIAkJCQkoZXJyY29kZShFUlJDT0RFX0RBVEVUSU1FX1ZBTFVFX09VVF9P Rl9SQU5HRSksCiAJCQkJIGVycm1zZygidGltZXN0YW1wIG91dCBvZiByYW5nZSIpKSk7CisJ fQogCiAJcmVzdWx0ID0gKFRpbWVUekFEVCAqKSBwYWxsb2Moc2l6ZW9mKFRpbWVUekFEVCkp OwogCiAJdG0ydGltZXR6KHRtLCBmc2VjLCB0eiwgcmVzdWx0KTsKIAotCVBHX1JFVFVSTl9U SU1FVFpBRFRfUChyZXN1bHQpOworCXJldHVybiByZXN1bHQ7CiB9CiAKKy8qIHRpbWVzdGFt cHR6X3RpbWV0eigpCisgKiBDb252ZXJ0IHRpbWVzdGFtcCB0byB0aW1ldHogZGF0YSB0eXBl LgorICovCitEYXR1bQordGltZXN0YW1wdHpfdGltZXR6KFBHX0ZVTkNUSU9OX0FSR1MpCit7 CisJVGltZVR6QURUICAqcmVzdWx0ID0KKwkJdGltZXN0YW1wdHpfdGltZXR6X29wdF9lcnJv cihQR19HRVRBUkdfVElNRVNUQU1QKDApLCBOVUxMKTsKKworCWlmIChyZXN1bHQpCisJCVBH X1JFVFVSTl9USU1FVFpBRFRfUChyZXN1bHQpOworCWVsc2UKKwkJUEdfUkVUVVJOX05VTEwo KTsKK30KIAogLyogZGF0ZXRpbWV0el90aW1lc3RhbXB0eigpCiAgKiBDb252ZXJ0IGRhdGUg YW5kIHRpbWV0eiB0byB0aW1lc3RhbXAgd2l0aCB0aW1lIHpvbmUgZGF0YSB0eXBlLgpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2RhdGV0aW1lLmMgYi9zcmMvYmFja2Vu ZC91dGlscy9hZHQvZGF0ZXRpbWUuYwppbmRleCA0M2ZmZjUwZDQ5MC4uMzI3NWU1ZmQ5NDgg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9kYXRldGltZS5jCisrKyBiL3Ny Yy9iYWNrZW5kL3V0aWxzL2FkdC9kYXRldGltZS5jCkBAIC05NzEsNyArOTcxLDggQEAgUGFy c2VEYXRlVGltZShjb25zdCBjaGFyICp0aW1lc3RyLCBjaGFyICp3b3JrYnVmLCBzaXplX3Qg YnVmbGVuLAogICovCiBpbnQKIERlY29kZURhdGVUaW1lKGNoYXIgKipmaWVsZCwgaW50ICpm dHlwZSwgaW50IG5mLAotCQkJICAgaW50ICpkdHlwZSwgc3RydWN0IHBnX3RtICp0bSwgZnNl Y190ICpmc2VjLCBpbnQgKnR6cCkKKwkJCSAgIGludCAqZHR5cGUsIHN0cnVjdCBwZ190bSAq dG0sIGZzZWNfdCAqZnNlYywgaW50ICp0enAsCisJCQkgICBib29sIHRocm93X2Vycm9ycykK IHsKIAlpbnQJCQlmbWFzayA9IDAsCiAJCQkJdG1hc2ssCkBAIC0xMTE0LDggKzExMTUsMTMg QEAgRGVjb2RlRGF0ZVRpbWUoY2hhciAqKmZpZWxkLCBpbnQgKmZ0eXBlLCBpbnQgbmYsCiAJ CQkJCQkJLyoKIAkJCQkJCQkgKiBXZSBzaG91bGQgcmV0dXJuIGFuIGVycm9yIGNvZGUgaW5z dGVhZCBvZgogCQkJCQkJCSAqIGVyZXBvcnQnaW5nIGRpcmVjdGx5LCBidXQgdGhlbiB0aGVy ZSBpcyBubyB3YXkKLQkJCQkJCQkgKiB0byByZXBvcnQgdGhlIGJhZCB0aW1lIHpvbmUgbmFt ZS4KKwkJCQkJCQkgKiB0byByZXBvcnQgdGhlIGJhZCB0aW1lIHpvbmUgbmFtZS4gIEJ1dAor CQkJCQkJCSAqIHRocm93aW5nIGVycm9ycyBpcyBkaXNhbGxvd2VkLCBzaW1wbHkKKwkJCQkJ CQkgKiByZXR1cm4gZXJyb3IgY29kZS4KIAkJCQkJCQkgKi8KKwkJCQkJCQlpZiAoIXRocm93 X2Vycm9ycykKKwkJCQkJCQkJcmV0dXJuIERURVJSX0JBRF9GT1JNQVQ7CisKIAkJCQkJCQll cmVwb3J0KEVSUk9SLAogCQkJCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFN RVRFUl9WQUxVRSksCiAJCQkJCQkJCQkgZXJybXNnKCJ0aW1lIHpvbmUgXCIlc1wiIG5vdCBy ZWNvZ25pemVkIiwKQEAgLTE5MjEsNyArMTkyNyw4IEBAIERldGVybWluZVRpbWVab25lQWJi cmV2T2Zmc2V0SW50ZXJuYWwocGdfdGltZV90IHQsIGNvbnN0IGNoYXIgKmFiYnIsIHBnX3R6 ICp0enAsCiAgKi8KIGludAogRGVjb2RlVGltZU9ubHkoY2hhciAqKmZpZWxkLCBpbnQgKmZ0 eXBlLCBpbnQgbmYsCi0JCQkgICBpbnQgKmR0eXBlLCBzdHJ1Y3QgcGdfdG0gKnRtLCBmc2Vj X3QgKmZzZWMsIGludCAqdHpwKQorCQkJICAgaW50ICpkdHlwZSwgc3RydWN0IHBnX3RtICp0 bSwgZnNlY190ICpmc2VjLCBpbnQgKnR6cCwKKwkJCSAgIGJvb2wgdGhyb3dfZXJyb3JzKQog ewogCWludAkJCWZtYXNrID0gMCwKIAkJCQl0bWFzaywKQEAgLTIwMjIsNiArMjAyOSw5IEBA IERlY29kZVRpbWVPbmx5KGNoYXIgKipmaWVsZCwgaW50ICpmdHlwZSwgaW50IG5mLAogCQkJ CQkJCSAqIGVyZXBvcnQnaW5nIGRpcmVjdGx5LCBidXQgdGhlbiB0aGVyZSBpcyBubyB3YXkK IAkJCQkJCQkgKiB0byByZXBvcnQgdGhlIGJhZCB0aW1lIHpvbmUgbmFtZS4KIAkJCQkJCQkg Ki8KKwkJCQkJCQlpZiAoIXRocm93X2Vycm9ycykKKwkJCQkJCQkJcmV0dXJuIERURVJSX0JB RF9GT1JNQVQ7CisKIAkJCQkJCQllcmVwb3J0KEVSUk9SLAogCQkJCQkJCQkJKGVycmNvZGUo RVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCiAJCQkJCQkJCQkgZXJybXNnKCJ0 aW1lIHpvbmUgXCIlc1wiIG5vdCByZWNvZ25pemVkIiwKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL3V0aWxzL2FkdC90aW1lc3RhbXAuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC90aW1l c3RhbXAuYwppbmRleCA0OWNkYjI5MGFjMi4uMDRhMGUzZWIwNjMgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL3V0aWxzL2FkdC90aW1lc3RhbXAuYworKysgYi9zcmMvYmFja2VuZC91dGls cy9hZHQvdGltZXN0YW1wLmMKQEAgLTEzOSwxOCArMTM5LDEyIEBAIGFueXRpbWVzdGFtcF90 eXBtb2RvdXQoYm9vbCBpc3R6LCBpbnQzMiB0eXBtb2QpCiAgKgkgVVNFUiBJL08gUk9VVElO RVMJCQkJCQkJCQkJCQkJCSAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLS8qIHRp bWVzdGFtcF9pbigpCi0gKiBDb252ZXJ0IGEgc3RyaW5nIHRvIGludGVybmFsIGZvcm0uCisv KiB0aW1lc3RhbXBfaW5fb3B0X2Vycm9yKCkKKyAqIENvbnZlcnQgYSBzdHJpbmcgdG8gaW50 ZXJuYWwgZm9ybSwgcmV0dXJuaW5nIGVycm9yIGluc3RlYWQgb2YgdGhyb3dpbmcgaWYgbmVl ZGVkLgogICovCi1EYXR1bQotdGltZXN0YW1wX2luKFBHX0ZVTkNUSU9OX0FSR1MpCitUaW1l c3RhbXAKK3RpbWVzdGFtcF9pbl9vcHRfZXJyb3IoY2hhciAqc3RyLCBpbnQzMiB0eXBtb2Qs IGJvb2wgKmVycm9yKQogewotCWNoYXIJICAgKnN0ciA9IFBHX0dFVEFSR19DU1RSSU5HKDAp OwotCi0jaWZkZWYgTk9UX1VTRUQKLQlPaWQJCQl0eXBlbGVtID0gUEdfR0VUQVJHX09JRCgx KTsKLSNlbmRpZgotCWludDMyCQl0eXBtb2QgPSBQR19HRVRBUkdfSU5UMzIoMik7CiAJVGlt ZXN0YW1wCXJlc3VsdDsKIAlmc2VjX3QJCWZzZWM7CiAJc3RydWN0IHBnX3RtIHR0LApAQCAt MTY2LDE3ICsxNjAsMzQgQEAgdGltZXN0YW1wX2luKFBHX0ZVTkNUSU9OX0FSR1MpCiAJZHRl cnIgPSBQYXJzZURhdGVUaW1lKHN0ciwgd29ya2J1Ziwgc2l6ZW9mKHdvcmtidWYpLAogCQkJ CQkJICBmaWVsZCwgZnR5cGUsIE1BWERBVEVGSUVMRFMsICZuZik7CiAJaWYgKGR0ZXJyID09 IDApCi0JCWR0ZXJyID0gRGVjb2RlRGF0ZVRpbWUoZmllbGQsIGZ0eXBlLCBuZiwgJmR0eXBl LCB0bSwgJmZzZWMsICZ0eik7CisJCWR0ZXJyID0gRGVjb2RlRGF0ZVRpbWUoZmllbGQsIGZ0 eXBlLCBuZiwgJmR0eXBlLCB0bSwgJmZzZWMsICZ0eiwKKwkJCQkJCQkgICAhZXJyb3IpOwog CWlmIChkdGVyciAhPSAwKQorCXsKKwkJaWYgKGVycm9yKQorCQl7CisJCQkqZXJyb3IgPSB0 cnVlOworCQkJcmV0dXJuIDA7CisJCX0KKwogCQlEYXRlVGltZVBhcnNlRXJyb3IoZHRlcnIs IHN0ciwgInRpbWVzdGFtcCIpOworCX0KIAogCXN3aXRjaCAoZHR5cGUpCiAJewogCQljYXNl IERUS19EQVRFOgogCQkJaWYgKHRtMnRpbWVzdGFtcCh0bSwgZnNlYywgTlVMTCwgJnJlc3Vs dCkgIT0gMCkKKwkJCXsKKwkJCQlpZiAoZXJyb3IpCisJCQkJeworCQkJCQkqZXJyb3IgPSB0 cnVlOworCQkJCQlyZXR1cm4gMDsKKwkJCQl9CisKIAkJCQllcmVwb3J0KEVSUk9SLAogCQkJ CQkJKGVycmNvZGUoRVJSQ09ERV9EQVRFVElNRV9WQUxVRV9PVVRfT0ZfUkFOR0UpLAogCQkJ CQkJIGVycm1zZygidGltZXN0YW1wIG91dCBvZiByYW5nZTogXCIlc1wiIiwgc3RyKSkpOwor CQkJfQogCQkJYnJlYWs7CiAKIAkJY2FzZSBEVEtfRVBPQ0g6CkBAIC0xOTcsMTEgKzIwOCwy NyBAQCB0aW1lc3RhbXBfaW4oUEdfRlVOQ1RJT05fQVJHUykKIAkJCVRJTUVTVEFNUF9OT0VO RChyZXN1bHQpOwogCX0KIAotCUFkanVzdFRpbWVzdGFtcEZvclR5cG1vZCgmcmVzdWx0LCB0 eXBtb2QpOworCUFkanVzdFRpbWVzdGFtcEZvclR5cG1vZEVycm9yKCZyZXN1bHQsIHR5cG1v ZCwgZXJyb3IpOwogCiAJUEdfUkVUVVJOX1RJTUVTVEFNUChyZXN1bHQpOwogfQogCisvKiB0 aW1lc3RhbXBfaW4oKQorICogQ29udmVydCBhIHN0cmluZyB0byBpbnRlcm5hbCBmb3JtLgor ICovCitEYXR1bQordGltZXN0YW1wX2luKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJY2hhcgkg ICAqc3RyID0gUEdfR0VUQVJHX0NTVFJJTkcoMCk7CisKKyNpZmRlZiBOT1RfVVNFRAorCU9p ZAkJCXR5cGVsZW0gPSBQR19HRVRBUkdfT0lEKDEpOworI2VuZGlmCisJaW50MzIJCXR5cG1v ZCA9IFBHX0dFVEFSR19JTlQzMigyKTsKKworCVBHX1JFVFVSTl9USU1FU1RBTVAodGltZXN0 YW1wX2luX29wdF9lcnJvcihzdHIsIHR5cG1vZCwgTlVMTCkpOworfQorCiAvKiB0aW1lc3Rh bXBfb3V0KCkKICAqIENvbnZlcnQgYSB0aW1lc3RhbXAgdG8gZXh0ZXJuYWwgZm9ybS4KICAq LwpAQCAtNDAwLDE1ICs0MjcsOSBAQCBBZGp1c3RUaW1lc3RhbXBGb3JUeXBtb2QoVGltZXN0 YW1wICp0aW1lLCBpbnQzMiB0eXBtb2QpCiAvKiB0aW1lc3RhbXB0el9pbigpCiAgKiBDb252 ZXJ0IGEgc3RyaW5nIHRvIGludGVybmFsIGZvcm0uCiAgKi8KLURhdHVtCi10aW1lc3RhbXB0 el9pbihQR19GVU5DVElPTl9BUkdTKQorVGltZXN0YW1wVHoKK3RpbWVzdGFtcHR6X2luX29w dF9lcnJvcihjaGFyICpzdHIsIGludDMyIHR5cG1vZCwgYm9vbCAqZXJyb3IpCiB7Ci0JY2hh cgkgICAqc3RyID0gUEdfR0VUQVJHX0NTVFJJTkcoMCk7Ci0KLSNpZmRlZiBOT1RfVVNFRAot CU9pZAkJCXR5cGVsZW0gPSBQR19HRVRBUkdfT0lEKDEpOwotI2VuZGlmCi0JaW50MzIJCXR5 cG1vZCA9IFBHX0dFVEFSR19JTlQzMigyKTsKIAlUaW1lc3RhbXBUeiByZXN1bHQ7CiAJZnNl Y190CQlmc2VjOwogCXN0cnVjdCBwZ190bSB0dCwKQEAgLTQyNCwxNyArNDQ1LDM0IEBAIHRp bWVzdGFtcHR6X2luKFBHX0ZVTkNUSU9OX0FSR1MpCiAJZHRlcnIgPSBQYXJzZURhdGVUaW1l KHN0ciwgd29ya2J1Ziwgc2l6ZW9mKHdvcmtidWYpLAogCQkJCQkJICBmaWVsZCwgZnR5cGUs IE1BWERBVEVGSUVMRFMsICZuZik7CiAJaWYgKGR0ZXJyID09IDApCi0JCWR0ZXJyID0gRGVj b2RlRGF0ZVRpbWUoZmllbGQsIGZ0eXBlLCBuZiwgJmR0eXBlLCB0bSwgJmZzZWMsICZ0eik7 CisJCWR0ZXJyID0gRGVjb2RlRGF0ZVRpbWUoZmllbGQsIGZ0eXBlLCBuZiwgJmR0eXBlLCB0 bSwgJmZzZWMsICZ0eiwKKwkJCQkJCQkgICAhZXJyb3IpOwogCWlmIChkdGVyciAhPSAwKQor CXsKKwkJaWYgKGVycm9yKQorCQl7CisJCQkqZXJyb3IgPSB0cnVlOworCQkJcmV0dXJuIDA7 CisJCX0KKwogCQlEYXRlVGltZVBhcnNlRXJyb3IoZHRlcnIsIHN0ciwgInRpbWVzdGFtcCB3 aXRoIHRpbWUgem9uZSIpOworCX0KIAogCXN3aXRjaCAoZHR5cGUpCiAJewogCQljYXNlIERU S19EQVRFOgogCQkJaWYgKHRtMnRpbWVzdGFtcCh0bSwgZnNlYywgJnR6LCAmcmVzdWx0KSAh PSAwKQorCQkJeworCQkJCWlmIChlcnJvcikKKwkJCQl7CisJCQkJCSplcnJvciA9IHRydWU7 CisJCQkJCXJldHVybiAwOworCQkJCX0KKwogCQkJCWVyZXBvcnQoRVJST1IsCiAJCQkJCQko ZXJyY29kZShFUlJDT0RFX0RBVEVUSU1FX1ZBTFVFX09VVF9PRl9SQU5HRSksCiAJCQkJCQkg ZXJybXNnKCJ0aW1lc3RhbXAgb3V0IG9mIHJhbmdlOiBcIiVzXCIiLCBzdHIpKSk7CisJCQl9 CiAJCQlicmVhazsKIAogCQljYXNlIERUS19FUE9DSDoKQEAgLTQ1NSw5ICs0OTMsMjQgQEAg dGltZXN0YW1wdHpfaW4oUEdfRlVOQ1RJT05fQVJHUykKIAkJCVRJTUVTVEFNUF9OT0VORChy ZXN1bHQpOwogCX0KIAotCUFkanVzdFRpbWVzdGFtcEZvclR5cG1vZCgmcmVzdWx0LCB0eXBt b2QpOworCUFkanVzdFRpbWVzdGFtcEZvclR5cG1vZEVycm9yKCZyZXN1bHQsIHR5cG1vZCwg ZXJyb3IpOwogCi0JUEdfUkVUVVJOX1RJTUVTVEFNUFRaKHJlc3VsdCk7CisJcmV0dXJuIHJl c3VsdDsKK30KKworLyogdGltZXN0YW1wdHpfaW4oKQorICogQ29udmVydCBhIHN0cmluZyB0 byBpbnRlcm5hbCBmb3JtLgorICovCitEYXR1bQordGltZXN0YW1wdHpfaW4oUEdfRlVOQ1RJ T05fQVJHUykKK3sKKwljaGFyCSAgICpzdHIgPSBQR19HRVRBUkdfQ1NUUklORygwKTsKKyNp ZmRlZiBOT1RfVVNFRAorCU9pZAkJCXR5cGVsZW0gPSBQR19HRVRBUkdfT0lEKDEpOworI2Vu ZGlmCisJaW50MzIJCXR5cG1vZCA9IFBHX0dFVEFSR19JTlQzMigyKTsKKworCVBHX1JFVFVS Tl9USU1FU1RBTVBUWih0aW1lc3RhbXB0el9pbl9vcHRfZXJyb3Ioc3RyLCB0eXBtb2QsIE5V TEwpKTsKIH0KIAogLyoKQEAgLTU2MTQsOCArNTY2Nyw4IEBAIHRpbWVzdGFtcHR6X3RpbWVz dGFtcChQR19GVU5DVElPTl9BUkdTKQogCVBHX1JFVFVSTl9USU1FU1RBTVAodGltZXN0YW1w dHoydGltZXN0YW1wKHRpbWVzdGFtcCkpOwogfQogCi1zdGF0aWMgVGltZXN0YW1wCi10aW1l c3RhbXB0ejJ0aW1lc3RhbXAoVGltZXN0YW1wVHogdGltZXN0YW1wKQorVGltZXN0YW1wCit0 aW1lc3RhbXB0ejJ0aW1lc3RhbXBfb3B0X2Vycm9yKFRpbWVzdGFtcFR6IHRpbWVzdGFtcCwg Ym9vbCAqZXJyb3IpCiB7CiAJVGltZXN0YW1wCXJlc3VsdDsKIAlzdHJ1Y3QgcGdfdG0gdHQs CkBAIC01NjI4LDE3ICs1NjgxLDQwIEBAIHRpbWVzdGFtcHR6MnRpbWVzdGFtcChUaW1lc3Rh bXBUeiB0aW1lc3RhbXApCiAJZWxzZQogCXsKIAkJaWYgKHRpbWVzdGFtcDJ0bSh0aW1lc3Rh bXAsICZ0eiwgdG0sICZmc2VjLCBOVUxMLCBOVUxMKSAhPSAwKQorCQl7CisJCQlpZiAoZXJy b3IpCisJCQl7CisJCQkJKmVycm9yID0gdHJ1ZTsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKwog CQkJZXJlcG9ydChFUlJPUiwKIAkJCQkJKGVycmNvZGUoRVJSQ09ERV9EQVRFVElNRV9WQUxV RV9PVVRfT0ZfUkFOR0UpLAogCQkJCQkgZXJybXNnKCJ0aW1lc3RhbXAgb3V0IG9mIHJhbmdl IikpKTsKKwkJfQorCiAJCWlmICh0bTJ0aW1lc3RhbXAodG0sIGZzZWMsIE5VTEwsICZyZXN1 bHQpICE9IDApCisJCXsKKwkJCWlmIChlcnJvcikKKwkJCXsKKwkJCQkqZXJyb3IgPSB0cnVl OworCQkJCXJldHVybiAwOworCQkJfQorCiAJCQllcmVwb3J0KEVSUk9SLAogCQkJCQkoZXJy Y29kZShFUlJDT0RFX0RBVEVUSU1FX1ZBTFVFX09VVF9PRl9SQU5HRSksCiAJCQkJCSBlcnJt c2coInRpbWVzdGFtcCBvdXQgb2YgcmFuZ2UiKSkpOworCQl9CiAJfQogCXJldHVybiByZXN1 bHQ7CiB9CiAKK3N0YXRpYyBUaW1lc3RhbXAKK3RpbWVzdGFtcHR6MnRpbWVzdGFtcChUaW1l c3RhbXBUeiB0aW1lc3RhbXApCit7CisJcmV0dXJuIHRpbWVzdGFtcHR6MnRpbWVzdGFtcF9v cHRfZXJyb3IodGltZXN0YW1wLCBOVUxMKTsKK30KKwogLyogdGltZXN0YW1wdHpfem9uZSgp CiAgKiBFdmFsdWF0ZSB0aW1lc3RhbXAgd2l0aCB0aW1lIHpvbmUgdHlwZSBhdCB0aGUgc3Bl Y2lmaWVkIHRpbWUgem9uZS4KICAqIFJldHVybnMgYSB0aW1lc3RhbXAgd2l0aG91dCB0aW1l IHpvbmUuCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Yy5jIGIvc3Jj L2JhY2tlbmQvdXRpbHMvbWlzYy9ndWMuYwppbmRleCA5ZmJiZmIxYmU1NC4uNzg3N2JjZTYw NDMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjLmMKKysrIGIvc3Jj L2JhY2tlbmQvdXRpbHMvbWlzYy9ndWMuYwpAQCAtMTI4NjYsNyArMTI4NjYsNyBAQCBjaGVj a19yZWNvdmVyeV90YXJnZXRfdGltZShjaGFyICoqbmV3dmFsLCB2b2lkICoqZXh0cmEsIEd1 Y1NvdXJjZSBzb3VyY2UpCiAJCQlkdGVyciA9IFBhcnNlRGF0ZVRpbWUoc3RyLCB3b3JrYnVm LCBzaXplb2Yod29ya2J1ZiksCiAJCQkJCQkJCSAgZmllbGQsIGZ0eXBlLCBNQVhEQVRFRklF TERTLCAmbmYpOwogCQkJaWYgKGR0ZXJyID09IDApCi0JCQkJZHRlcnIgPSBEZWNvZGVEYXRl VGltZShmaWVsZCwgZnR5cGUsIG5mLCAmZHR5cGUsIHRtLCAmZnNlYywgJnR6KTsKKwkJCQlk dGVyciA9IERlY29kZURhdGVUaW1lKGZpZWxkLCBmdHlwZSwgbmYsICZkdHlwZSwgdG0sICZm c2VjLCAmdHosIHRydWUpOwogCQkJaWYgKGR0ZXJyICE9IDApCiAJCQkJcmV0dXJuIGZhbHNl OwogCQkJaWYgKGR0eXBlICE9IERUS19EQVRFKQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUv dXRpbHMvZGF0ZS5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvZGF0ZS5oCmluZGV4IDkxYWUyNDI1 NGRmLi5mMjkxNjhhMDI1YiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMvZGF0ZS5o CisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL2RhdGUuaApAQCAtODcsNCArODcsMTcgQEAgZXh0 ZXJuIGJvb2wgdGltZV9vdmVyZmxvd3MoaW50IGhvdXIsIGludCBtaW4sIGludCBzZWMsIGZz ZWNfdCBmc2VjKTsKIGV4dGVybiBib29sIGZsb2F0X3RpbWVfb3ZlcmZsb3dzKGludCBob3Vy LCBpbnQgbWluLCBkb3VibGUgc2VjKTsKIGV4dGVybiB2b2lkIEFkanVzdFRpbWVGb3JUeXBt b2QoVGltZUFEVCAqdGltZSwgaW50MzIgdHlwbW9kKTsKIAorZXh0ZXJuIERhdGVBRFQgdGlt ZXN0YW1wX2RhdGVfb3B0X2Vycm9yKFRpbWVzdGFtcCB0aW1lc3RhbXAsIGJvb2wgKmVycm9y KTsKK2V4dGVybiBUaW1lQURUIHRpbWVzdGFtcF90aW1lX29wdF9lcnJvcihUaW1lc3RhbXAg dGltZXN0YW1wLAorCQkJCQkJCQkJCWJvb2wgKmlzbnVsbCwgYm9vbCAqZXJyb3IpOworCitl eHRlcm4gRGF0ZUFEVCB0aW1lc3RhbXB0el9kYXRlX29wdF9lcnJvcihUaW1lc3RhbXAgdGlt ZXN0YW1wLCBib29sICplcnJvcik7CitleHRlcm4gVGltZUFEVCB0aW1lc3RhbXB0el90aW1l X29wdF9lcnJvcihUaW1lc3RhbXBUeiB0aW1lc3RhbXAsCisJCQkJCQkJCQkJICBib29sICpp c251bGwsIGJvb2wgKmVycm9yKTsKK2V4dGVybiBUaW1lVHpBRFQgKnRpbWVzdGFtcHR6X3Rp bWV0el9vcHRfZXJyb3IoVGltZXN0YW1wVHogdGltZXN0YW1wLAorCQkJCQkJCQkJCQkgICBi b29sICplcnJvcik7CitleHRlcm4gRGF0ZUFEVCBkYXRlX2luX29wdF9lcnJvcihjaGFyICpz dHIsIGJvb2wgKmVycm9yKTsKK2V4dGVybiBUaW1lQURUIHRpbWVfaW5fb3B0X2Vycm9yKGNo YXIgKnN0ciwgaW50MzIgdHlwbW9kLCBib29sICplcnJvcik7CitleHRlcm4gVGltZVR6QURU ICp0aW1ldHpfaW5fb3B0X2Vycm9yKGNoYXIgKnN0ciwgaW50MzIgdHlwbW9kLCBib29sICpl cnJvcik7CisKICNlbmRpZgkJCQkJCQkvKiBEQVRFX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9p bmNsdWRlL3V0aWxzL2RhdGV0aW1lLmggYi9zcmMvaW5jbHVkZS91dGlscy9kYXRldGltZS5o CmluZGV4IDQ1MjdlODI1MTc3Li42ODI0MWQ3YzRjYyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1 ZGUvdXRpbHMvZGF0ZXRpbWUuaAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9kYXRldGltZS5o CkBAIC0yOTUsMTEgKzI5NSwxMyBAQCBleHRlcm4gaW50CVBhcnNlRGF0ZVRpbWUoY29uc3Qg Y2hhciAqdGltZXN0ciwgY2hhciAqd29ya2J1Ziwgc2l6ZV90IGJ1ZmxlbiwKIAkJCQkJCSAg aW50IG1heGZpZWxkcywgaW50ICpudW1maWVsZHMpOwogZXh0ZXJuIGludAlEZWNvZGVEYXRl VGltZShjaGFyICoqZmllbGQsIGludCAqZnR5cGUsCiAJCQkJCQkgICBpbnQgbmYsIGludCAq ZHR5cGUsCi0JCQkJCQkgICBzdHJ1Y3QgcGdfdG0gKnRtLCBmc2VjX3QgKmZzZWMsIGludCAq dHpwKTsKKwkJCQkJCSAgIHN0cnVjdCBwZ190bSAqdG0sIGZzZWNfdCAqZnNlYywgaW50ICp0 enAsCisJCQkJCQkgICBib29sIHRocm93X2Vycm9ycyk7CiBleHRlcm4gaW50CURlY29kZVRp bWV6b25lKGNoYXIgKnN0ciwgaW50ICp0enApOwogZXh0ZXJuIGludAlEZWNvZGVUaW1lT25s eShjaGFyICoqZmllbGQsIGludCAqZnR5cGUsCiAJCQkJCQkgICBpbnQgbmYsIGludCAqZHR5 cGUsCi0JCQkJCQkgICBzdHJ1Y3QgcGdfdG0gKnRtLCBmc2VjX3QgKmZzZWMsIGludCAqdHpw KTsKKwkJCQkJCSAgIHN0cnVjdCBwZ190bSAqdG0sIGZzZWNfdCAqZnNlYywgaW50ICp0enAs CisJCQkJCQkgICBib29sIHRocm93X2Vycm9ycyk7CiBleHRlcm4gaW50CURlY29kZUludGVy dmFsKGNoYXIgKipmaWVsZCwgaW50ICpmdHlwZSwgaW50IG5mLCBpbnQgcmFuZ2UsCiAJCQkJ CQkgICBpbnQgKmR0eXBlLCBzdHJ1Y3QgcGdfaXRtX2luICppdG1faW4pOwogZXh0ZXJuIGlu dAlEZWNvZGVJU084NjAxSW50ZXJ2YWwoY2hhciAqc3RyLApkaWZmIC0tZ2l0IGEvc3JjL2lu Y2x1ZGUvdXRpbHMvdGltZXN0YW1wLmggYi9zcmMvaW5jbHVkZS91dGlscy90aW1lc3RhbXAu aAppbmRleCBlZGYzYTk3MzE4Ni4uMjY4NWQxNDM0MmQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNs dWRlL3V0aWxzL3RpbWVzdGFtcC5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL3RpbWVzdGFt cC5oCkBAIC0xMDIsOCArMTAyLDE0IEBAIGV4dGVybiBpbnQJdGltZXN0YW1wX2NtcF9pbnRl cm5hbChUaW1lc3RhbXAgZHQxLCBUaW1lc3RhbXAgZHQyKTsKIAogZXh0ZXJuIFRpbWVzdGFt cFR6IHRpbWVzdGFtcDJ0aW1lc3RhbXB0el9vcHRfb3ZlcmZsb3coVGltZXN0YW1wIHRpbWVz dGFtcCwKIAkJCQkJCQkJCQkJCQkgIGludCAqb3ZlcmZsb3cpOworZXh0ZXJuIFRpbWVzdGFt cCB0aW1lc3RhbXB0ejJ0aW1lc3RhbXBfb3B0X2Vycm9yKFRpbWVzdGFtcFR6IHRpbWVzdGFt cCwKKwkJCQkJCQkJCQkJCSBib29sICplcnJvcik7CiBleHRlcm4gaW50MzIgdGltZXN0YW1w X2NtcF90aW1lc3RhbXB0el9pbnRlcm5hbChUaW1lc3RhbXAgdGltZXN0YW1wVmFsLAogCQkJ CQkJCQkJCQkJVGltZXN0YW1wVHogZHQyKTsKK2V4dGVybiBUaW1lc3RhbXAgdGltZXN0YW1w X2luX29wdF9lcnJvcihjaGFyICpzdHIsIGludDMyIHR5cG1vZCwKKwkJCQkJCQkJCQlib29s ICplcnJvcik7CitleHRlcm4gVGltZXN0YW1wVHogdGltZXN0YW1wdHpfaW5fb3B0X2Vycm9y KGNoYXIgKnN0ciwgaW50MzIgdHlwbW9kLAorCQkJCQkJCQkJCQlib29sICplcnJvcik7CiAK IGV4dGVybiBpbnQJaXNvd2VlazJqKGludCB5ZWFyLCBpbnQgd2Vlayk7CiBleHRlcm4gdm9p ZCBpc293ZWVrMmRhdGUoaW50IHdveSwgaW50ICp5ZWFyLCBpbnQgKm1vbiwgaW50ICptZGF5 KTsKLS0gCjIuMTcuMQoK --------------jNrKutSsb0Ih2JPBTjkEydni Content-Type: text/x-patch; charset=UTF-8; name="v9-0006-Add-safe-input-function-for-jsonb.patch" Content-Disposition: attachment; filename="v9-0006-Add-safe-input-function-for-jsonb.patch" Content-Transfer-Encoding: base64 RnJvbSA2MmEyN2UwYjI0M2NlYmM1ZTNlYjg2MjhjYmIyMjI1MzNhMDIzMzhmIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBOaWtpdGEgR2x1a2hvdiA8bi5nbHVob3ZAcG9zdGdy ZXNwcm8ucnU+CkRhdGU6IE1vbiwgMjkgQXVnIDIwMjIgMjM6NTY6NDUgKzAzMDAKU3ViamVj dDogW1BBVENIIHY5IDYvOV0gQWRkIHNhZmUgaW5wdXQgZnVuY3Rpb24gZm9yIGpzb25iCgot LS0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29uYi5jIHwgMjYgKysrKysrKysrKysrKysr KysrLS0tLS0tLS0KIHNyYy9pbmNsdWRlL3V0aWxzL2pzb25iLmggICAgIHwgIDIgKysKIDIg ZmlsZXMgY2hhbmdlZCwgMjAgaW5zZXJ0aW9ucygrKSwgOCBkZWxldGlvbnMoLSkKCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvanNvbmIuYyBiL3NyYy9iYWNrZW5kL3V0 aWxzL2FkdC9qc29uYi5jCmluZGV4IGY3MDBjNWI0YzkzLi4xZGE1MTlkYWFlZiAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb25iLmMKKysrIGIvc3JjL2JhY2tlbmQv dXRpbHMvYWR0L2pzb25iLmMKQEAgLTQ2LDcgKzQ2LDYgQEAgdHlwZWRlZiBzdHJ1Y3QgSnNv bmJBZ2dTdGF0ZQogCU9pZAkJCXZhbF9vdXRwdXRfZnVuYzsKIH0gSnNvbmJBZ2dTdGF0ZTsK IAotc3RhdGljIGlubGluZSBEYXR1bSBqc29uYl9mcm9tX2NzdHJpbmcoY2hhciAqanNvbiwg aW50IGxlbiwgYm9vbCB1bmlxdWVfa2V5cyk7CiBzdGF0aWMgc2l6ZV90IGNoZWNrU3RyaW5n TGVuKHNpemVfdCBsZW4pOwogc3RhdGljIHZvaWQganNvbmJfaW5fb2JqZWN0X3N0YXJ0KHZv aWQgKnBzdGF0ZSk7CiBzdGF0aWMgdm9pZCBqc29uYl9pbl9vYmplY3RfZW5kKHZvaWQgKnBz dGF0ZSk7CkBAIC03Nyw3ICs3Niw3IEBAIGpzb25iX2luKFBHX0ZVTkNUSU9OX0FSR1MpCiB7 CiAJY2hhcgkgICAqanNvbiA9IFBHX0dFVEFSR19DU1RSSU5HKDApOwogCi0JcmV0dXJuIGpz b25iX2Zyb21fY3N0cmluZyhqc29uLCBzdHJsZW4oanNvbiksIGZhbHNlKTsKKwlQR19SRVRV Uk5fREFUVU0oanNvbmJfZnJvbV9jc3RyaW5nKGpzb24sIHN0cmxlbihqc29uKSwgZmFsc2Us IE5VTEwpKTsKIH0KIAogLyoKQEAgLTEwMSw3ICsxMDAsNyBAQCBqc29uYl9yZWN2KFBHX0ZV TkNUSU9OX0FSR1MpCiAJZWxzZQogCQllbG9nKEVSUk9SLCAidW5zdXBwb3J0ZWQganNvbmIg dmVyc2lvbiBudW1iZXIgJWQiLCB2ZXJzaW9uKTsKIAotCXJldHVybiBqc29uYl9mcm9tX2Nz dHJpbmcoc3RyLCBuYnl0ZXMsIGZhbHNlKTsKKwlyZXR1cm4ganNvbmJfZnJvbV9jc3RyaW5n KHN0ciwgbmJ5dGVzLCBmYWxzZSwgTlVMTCk7CiB9CiAKIC8qCkBAIC0xNDcsNyArMTQ2LDcg QEAganNvbmJfZnJvbV90ZXh0KHRleHQgKmpzLCBib29sIHVuaXF1ZV9rZXlzKQogewogCXJl dHVybiBqc29uYl9mcm9tX2NzdHJpbmcoVkFSREFUQV9BTlkoanMpLAogCQkJCQkJCSAgVkFS U0laRV9BTllfRVhIRFIoanMpLAotCQkJCQkJCSAgdW5pcXVlX2tleXMpOworCQkJCQkJCSAg dW5pcXVlX2tleXMsIE5VTEwpOwogfQogCiAvKgpAQCAtMjM5LDEyICsyMzgsMTMgQEAganNv bmJfdHlwZW9mKFBHX0ZVTkNUSU9OX0FSR1MpCiAgKgogICogVXNlcyB0aGUganNvbiBwYXJz ZXIgKHdpdGggaG9va3MpIHRvIGNvbnN0cnVjdCBhIGpzb25iLgogICovCi1zdGF0aWMgaW5s aW5lIERhdHVtCi1qc29uYl9mcm9tX2NzdHJpbmcoY2hhciAqanNvbiwgaW50IGxlbiwgYm9v bCB1bmlxdWVfa2V5cykKK0RhdHVtCitqc29uYl9mcm9tX2NzdHJpbmcoY2hhciAqanNvbiwg aW50IGxlbiwgYm9vbCB1bmlxdWVfa2V5cywgYm9vbCAqZXJyb3IpCiB7CiAJSnNvbkxleENv bnRleHQgKmxleDsKIAlKc29uYkluU3RhdGUgc3RhdGU7CiAJSnNvblNlbUFjdGlvbiBzZW07 CisJSnNvblBhcnNlRXJyb3JUeXBlIHJlc3VsdDsKIAogCW1lbXNldCgmc3RhdGUsIDAsIHNp emVvZihzdGF0ZSkpOwogCW1lbXNldCgmc2VtLCAwLCBzaXplb2Yoc2VtKSk7CkBAIC0yNjEs MTAgKzI2MSwyMCBAQCBqc29uYl9mcm9tX2NzdHJpbmcoY2hhciAqanNvbiwgaW50IGxlbiwg Ym9vbCB1bmlxdWVfa2V5cykKIAlzZW0uc2NhbGFyID0ganNvbmJfaW5fc2NhbGFyOwogCXNl bS5vYmplY3RfZmllbGRfc3RhcnQgPSBqc29uYl9pbl9vYmplY3RfZmllbGRfc3RhcnQ7CiAK LQlwZ19wYXJzZV9qc29uX29yX2VyZXBvcnQobGV4LCAmc2VtKTsKKwlyZXN1bHQgPSBwZ19w YXJzZV9qc29uKGxleCwgJnNlbSk7CisJaWYgKHJlc3VsdCAhPSBKU09OX1NVQ0NFU1MpCisJ eworCQlpZiAoZXJyb3IpCisJCXsKKwkJCSplcnJvciA9IHRydWU7CisJCQlyZXR1cm4gKERh dHVtKSAwOworCQl9CisKKwkJanNvbl9lcmVwb3J0X2Vycm9yKHJlc3VsdCwgbGV4KTsKKwl9 CiAKIAkvKiBhZnRlciBwYXJzaW5nLCB0aGUgaXRlbSBtZW1iZXIgaGFzIHRoZSBjb21wb3Nl ZCBqc29uYiBzdHJ1Y3R1cmUgKi8KLQlQR19SRVRVUk5fUE9JTlRFUihKc29uYlZhbHVlVG9K c29uYihzdGF0ZS5yZXMpKTsKKwlyZXR1cm4gSnNvbmJQR2V0RGF0dW0oSnNvbmJWYWx1ZVRv SnNvbmIoc3RhdGUucmVzKSk7CiB9CiAKIHN0YXRpYyBzaXplX3QKZGlmZiAtLWdpdCBhL3Ny Yy9pbmNsdWRlL3V0aWxzL2pzb25iLmggYi9zcmMvaW5jbHVkZS91dGlscy9qc29uYi5oCmlu ZGV4IGJhZTQ2NmI1MjM0Li5kNTU3NGZhYTc5ZSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUv dXRpbHMvanNvbmIuaAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9qc29uYi5oCkBAIC00MjAs NiArNDIwLDggQEAgZXh0ZXJuIHZvaWQgSnNvbmJIYXNoU2NhbGFyVmFsdWVFeHRlbmRlZChj b25zdCBKc29uYlZhbHVlICpzY2FsYXJWYWwsCiAKIC8qIGpzb25iLmMgc3VwcG9ydCBmdW5j dGlvbnMgKi8KIGV4dGVybiBEYXR1bSBqc29uYl9mcm9tX3RleHQodGV4dCAqanMsIGJvb2wg dW5pcXVlX2tleXMpOworZXh0ZXJuIERhdHVtIGpzb25iX2Zyb21fY3N0cmluZyhjaGFyICpq c29uLCBpbnQgbGVuLCBib29sIHVuaXF1ZV9rZXlzLAorCQkJCQkJCQlib29sICplcnJvcik7 CiBleHRlcm4gY2hhciAqSnNvbmJUb0NTdHJpbmcoU3RyaW5nSW5mbyBvdXQsIEpzb25iQ29u dGFpbmVyICppbiwKIAkJCQkJCQlpbnQgZXN0aW1hdGVkX2xlbik7CiBleHRlcm4gY2hhciAq SnNvbmJUb0NTdHJpbmdJbmRlbnQoU3RyaW5nSW5mbyBvdXQsIEpzb25iQ29udGFpbmVyICpp biwKLS0gCjIuMTcuMQoK --------------jNrKutSsb0Ih2JPBTjkEydni Content-Type: text/x-patch; charset=UTF-8; name="v9-0007-Remove-subtransaction-in-SQL-JSON-execution.patch" Content-Disposition: attachment; filename*0="v9-0007-Remove-subtransaction-in-SQL-JSON-execution.patch" Content-Transfer-Encoding: base64 RnJvbSA5MTU0ZmYzNWYyMmZlN2U4Y2U2NWZmZGFkNzU3ZmY5NGFiZDc5NDQwIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBOaWtpdGEgR2x1a2hvdiA8bi5nbHVob3ZAcG9zdGdy ZXNwcm8ucnU+CkRhdGU6IFR1ZSwgMzAgQXVnIDIwMjIgMDA6MTA6NDQgKzAzMDAKU3ViamVj dDogW1BBVENIIHY5IDcvOV0gUmVtb3ZlIHN1YnRyYW5zYWN0aW9uIGluIFNRTC9KU09OIGV4 ZWN1dGlvbgoKLS0tCiBzcmMvYmFja2VuZC9leGVjdXRvci9leGVjRXhwci5jICAgICAgICAg ICAgIHwgMTgwICsrLS0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNFeHBySW50ZXJwLmMg ICAgICAgfCA5NDYgKysrKysrKysrKysrLS0tLS0tLS0KIHNyYy9iYWNrZW5kL2ppdC9sbHZt L2xsdm1qaXRfZXhwci5jICAgICAgICAgfCAgIDIgKy0KIHNyYy9iYWNrZW5kL2ppdC9sbHZt L2xsdm1qaXRfdHlwZXMuYyAgICAgICAgfCAgIDIgKy0KIHNyYy9iYWNrZW5kL25vZGVzL25v ZGVGdW5jcy5jICAgICAgICAgICAgICAgfCAgOTEgKy0KIHNyYy9iYWNrZW5kL29wdGltaXpl ci91dGlsL2NsYXVzZXMuYyAgICAgICAgfCAgNzMgKy0KIHNyYy9iYWNrZW5kL3BhcnNlci9w YXJzZV9leHByLmMgICAgICAgICAgICAgfCAyMjYgKystLS0KIHNyYy9iYWNrZW5kL3V0aWxz L2FkdC9qc29ucGF0aC5jICAgICAgICAgICAgfCAgIDggKy0KIHNyYy9pbmNsdWRlL2V4ZWN1 dG9yL2V4ZWNFeHByLmggICAgICAgICAgICAgfCAgNDkgKy0KIHNyYy9pbmNsdWRlL25vZGVz L3ByaW1ub2Rlcy5oICAgICAgICAgICAgICAgfCAgMzYgKy0KIHNyYy9pbmNsdWRlL29wdGlt aXplci9jbGF1c2VzLmggICAgICAgICAgICAgfCAgIDIgKwogc3JjL2luY2x1ZGUvdXRpbHMv anNvbnBhdGguaCAgICAgICAgICAgICAgICB8ICAgMyArLQogc3JjL3Rlc3QvcmVncmVzcy9l eHBlY3RlZC9qc29uYl9zcWxqc29uLm91dCB8IDMyNyArKysrKy0tCiBzcmMvdGVzdC9yZWdy ZXNzL3NxbC9qc29uYl9zcWxqc29uLnNxbCAgICAgIHwgIDcyICstCiAxNCBmaWxlcyBjaGFu Z2VkLCAxMTMxIGluc2VydGlvbnMoKyksIDg4NiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjRXhwci5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0 b3IvZXhlY0V4cHIuYwppbmRleCBkMGE1N2M3YWFlZS4uZjUwZTBkNzAzZjggMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNFeHByLmMKKysrIGIvc3JjL2JhY2tlbmQv ZXhlY3V0b3IvZXhlY0V4cHIuYwpAQCAtODYsNyArODYsOSBAQCBzdGF0aWMgdm9pZCBFeGVj QnVpbGRBZ2dUcmFuc0NhbGwoRXhwclN0YXRlICpzdGF0ZSwgQWdnU3RhdGUgKmFnZ3N0YXRl LAogCQkJCQkJCQkgIEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvLCBBZ2dTdGF0ZVBlclRyYW5z IHBlcnRyYW5zLAogCQkJCQkJCQkgIGludCB0cmFuc25vLCBpbnQgc2V0bm8sIGludCBzZXRv ZmYsIGJvb2wgaXNoYXNoLAogCQkJCQkJCQkgIGJvb2wgbnVsbGNoZWNrKTsKLQorc3RhdGlj IHZvaWQgRXhlY0luaXRKc29uRXhwcihKc29uRXhwciAqamV4cHIsIEV4cHJTdGF0ZSAqc3Rh dGUsCisJCQkJCQkJIEV4cHJFdmFsU3RlcCAqc2NyYXRjaCwKKwkJCQkJCQkgRGF0dW0gKnJl c3YsIGJvb2wgKnJlc251bGwpOwogCiBzdGF0aWMgRXhwclN0YXRlICoKIEV4ZWNJbml0RXhw ckludGVybmFsKEV4cHIgKm5vZGUsIFBsYW5TdGF0ZSAqcGFyZW50LCBQYXJhbUxpc3RJbmZv IGV4dF9wYXJhbXMsCkBAIC0yNTU5LDExNCArMjU2MSw5IEBAIEV4ZWNJbml0RXhwclJlYyhF eHByICpub2RlLCBFeHByU3RhdGUgKnN0YXRlLAogCQkJfQogCiAJCWNhc2UgVF9Kc29uRXhw cjoKLQkJCXsKLQkJCQlKc29uRXhwciAgICpqZXhwciA9IGNhc3ROb2RlKEpzb25FeHByLCBu b2RlKTsKLQkJCQlKc29uRXhwclN0YXRlICpqc2VzdGF0ZSA9IHBhbGxvYzAoc2l6ZW9mKEpz b25FeHByU3RhdGUpKTsKLQkJCQlMaXN0Q2VsbCAgICphcmdleHBybGM7Ci0JCQkJTGlzdENl bGwgICAqYXJnbmFtZWxjOwotCi0JCQkJc2NyYXRjaC5vcGNvZGUgPSBFRU9QX0pTT05FWFBS OwotCQkJCXNjcmF0Y2guZC5qc29uZXhwci5qc2VzdGF0ZSA9IGpzZXN0YXRlOwotCi0JCQkJ anNlc3RhdGUtPmpzZXhwciA9IGpleHByOwotCi0JCQkJanNlc3RhdGUtPmZvcm1hdHRlZF9l eHByID0KLQkJCQkJcGFsbG9jKHNpemVvZigqanNlc3RhdGUtPmZvcm1hdHRlZF9leHByKSk7 Ci0KLQkJCQlFeGVjSW5pdEV4cHJSZWMoKEV4cHIgKikgamV4cHItPmZvcm1hdHRlZF9leHBy LCBzdGF0ZSwKLQkJCQkJCQkJJmpzZXN0YXRlLT5mb3JtYXR0ZWRfZXhwci0+dmFsdWUsCi0J CQkJCQkJCSZqc2VzdGF0ZS0+Zm9ybWF0dGVkX2V4cHItPmlzbnVsbCk7Ci0KLQkJCQlqc2Vz dGF0ZS0+cGF0aHNwZWMgPQotCQkJCQlwYWxsb2Moc2l6ZW9mKCpqc2VzdGF0ZS0+cGF0aHNw ZWMpKTsKLQotCQkJCUV4ZWNJbml0RXhwclJlYygoRXhwciAqKSBqZXhwci0+cGF0aF9zcGVj LCBzdGF0ZSwKLQkJCQkJCQkJJmpzZXN0YXRlLT5wYXRoc3BlYy0+dmFsdWUsCi0JCQkJCQkJ CSZqc2VzdGF0ZS0+cGF0aHNwZWMtPmlzbnVsbCk7Ci0KLQkJCQlqc2VzdGF0ZS0+cmVzX2V4 cHIgPQotCQkJCQlwYWxsb2Moc2l6ZW9mKCpqc2VzdGF0ZS0+cmVzX2V4cHIpKTsKLQotCQkJ CWpzZXN0YXRlLT5yZXN1bHRfZXhwciA9IGpleHByLT5yZXN1bHRfY29lcmNpb24KLQkJCQkJ PyBFeGVjSW5pdEV4cHJXaXRoQ2FzZVZhbHVlKChFeHByICopIGpleHByLT5yZXN1bHRfY29l cmNpb24tPmV4cHIsCi0JCQkJCQkJCQkJCQlzdGF0ZS0+cGFyZW50LAotCQkJCQkJCQkJCQkJ JmpzZXN0YXRlLT5yZXNfZXhwci0+dmFsdWUsCi0JCQkJCQkJCQkJCQkmanNlc3RhdGUtPnJl c19leHByLT5pc251bGwpCi0JCQkJCTogTlVMTDsKLQotCQkJCWpzZXN0YXRlLT5kZWZhdWx0 X29uX2VtcHR5ID0gIWpleHByLT5vbl9lbXB0eSA/IE5VTEwgOgotCQkJCQlFeGVjSW5pdEV4 cHIoKEV4cHIgKikgamV4cHItPm9uX2VtcHR5LT5kZWZhdWx0X2V4cHIsCi0JCQkJCQkJCSBz dGF0ZS0+cGFyZW50KTsKLQotCQkJCWpzZXN0YXRlLT5kZWZhdWx0X29uX2Vycm9yID0KLQkJ CQkJRXhlY0luaXRFeHByKChFeHByICopIGpleHByLT5vbl9lcnJvci0+ZGVmYXVsdF9leHBy LAotCQkJCQkJCQkgc3RhdGUtPnBhcmVudCk7Ci0KLQkJCQlpZiAoamV4cHItPm9taXRfcXVv dGVzIHx8Ci0JCQkJCShqZXhwci0+cmVzdWx0X2NvZXJjaW9uICYmIGpleHByLT5yZXN1bHRf Y29lcmNpb24tPnZpYV9pbykpCi0JCQkJewotCQkJCQlPaWQJCQl0eXBpbnB1dDsKLQotCQkJ CQkvKiBsb29rdXAgdGhlIHJlc3VsdCB0eXBlJ3MgaW5wdXQgZnVuY3Rpb24gKi8KLQkJCQkJ Z2V0VHlwZUlucHV0SW5mbyhqZXhwci0+cmV0dXJuaW5nLT50eXBpZCwgJnR5cGlucHV0LAot CQkJCQkJCQkJICZqc2VzdGF0ZS0+aW5wdXQudHlwaW9wYXJhbSk7Ci0JCQkJCWZtZ3JfaW5m byh0eXBpbnB1dCwgJmpzZXN0YXRlLT5pbnB1dC5mdW5jKTsKLQkJCQl9Ci0KLQkJCQlqc2Vz dGF0ZS0+YXJncyA9IE5JTDsKLQotCQkJCWZvcmJvdGgoYXJnZXhwcmxjLCBqZXhwci0+cGFz c2luZ192YWx1ZXMsCi0JCQkJCQlhcmduYW1lbGMsIGpleHByLT5wYXNzaW5nX25hbWVzKQot CQkJCXsKLQkJCQkJRXhwcgkgICAqYXJnZXhwciA9IChFeHByICopIGxmaXJzdChhcmdleHBy bGMpOwotCQkJCQlTdHJpbmcJICAgKmFyZ25hbWUgPSBsZmlyc3Rfbm9kZShTdHJpbmcsIGFy Z25hbWVsYyk7Ci0JCQkJCUpzb25QYXRoVmFyaWFibGVFdmFsQ29udGV4dCAqdmFyID0gcGFs bG9jKHNpemVvZigqdmFyKSk7Ci0KLQkJCQkJdmFyLT5uYW1lID0gcHN0cmR1cChhcmduYW1l LT5zdmFsKTsKLQkJCQkJdmFyLT50eXBpZCA9IGV4cHJUeXBlKChOb2RlICopIGFyZ2V4cHIp OwotCQkJCQl2YXItPnR5cG1vZCA9IGV4cHJUeXBtb2QoKE5vZGUgKikgYXJnZXhwcik7Ci0J CQkJCXZhci0+ZXN0YXRlID0gRXhlY0luaXRFeHByKGFyZ2V4cHIsIHN0YXRlLT5wYXJlbnQp OwotCQkJCQl2YXItPmVjb250ZXh0ID0gTlVMTDsKLQkJCQkJdmFyLT5tY3h0ID0gTlVMTDsK LQkJCQkJdmFyLT5ldmFsdWF0ZWQgPSBmYWxzZTsKLQkJCQkJdmFyLT52YWx1ZSA9IChEYXR1 bSkgMDsKLQkJCQkJdmFyLT5pc251bGwgPSB0cnVlOwotCi0JCQkJCWpzZXN0YXRlLT5hcmdz ID0KLQkJCQkJCWxhcHBlbmQoanNlc3RhdGUtPmFyZ3MsIHZhcik7Ci0JCQkJfQotCi0JCQkJ anNlc3RhdGUtPmNhY2hlID0gTlVMTDsKLQotCQkJCWlmIChqZXhwci0+Y29lcmNpb25zKQot CQkJCXsKLQkJCQkJSnNvbkNvZXJjaW9uICoqY29lcmNpb247Ci0JCQkJCXN0cnVjdCBKc29u Q29lcmNpb25TdGF0ZSAqY3N0YXRlOwotCQkJCQlEYXR1bQkgICAqY2FzZXZhbDsKLQkJCQkJ Ym9vbAkgICAqY2FzZW51bGw7Ci0KLQkJCQkJanNlc3RhdGUtPmNvZXJjaW9uX2V4cHIgPQot CQkJCQkJcGFsbG9jKHNpemVvZigqanNlc3RhdGUtPmNvZXJjaW9uX2V4cHIpKTsKLQotCQkJ CQljYXNldmFsID0gJmpzZXN0YXRlLT5jb2VyY2lvbl9leHByLT52YWx1ZTsKLQkJCQkJY2Fz ZW51bGwgPSAmanNlc3RhdGUtPmNvZXJjaW9uX2V4cHItPmlzbnVsbDsKLQotCQkJCQlmb3Ig KGNzdGF0ZSA9ICZqc2VzdGF0ZS0+Y29lcmNpb25zLm51bGwsCi0JCQkJCQkgY29lcmNpb24g PSAmamV4cHItPmNvZXJjaW9ucy0+bnVsbDsKLQkJCQkJCSBjb2VyY2lvbiA8PSAmamV4cHIt PmNvZXJjaW9ucy0+Y29tcG9zaXRlOwotCQkJCQkJIGNvZXJjaW9uKyssIGNzdGF0ZSsrKQot CQkJCQl7Ci0JCQkJCQljc3RhdGUtPmNvZXJjaW9uID0gKmNvZXJjaW9uOwotCQkJCQkJY3N0 YXRlLT5lc3RhdGUgPSAqY29lcmNpb24gPwotCQkJCQkJCUV4ZWNJbml0RXhwcldpdGhDYXNl VmFsdWUoKEV4cHIgKikgKCpjb2VyY2lvbiktPmV4cHIsCi0JCQkJCQkJCQkJCQkJICBzdGF0 ZS0+cGFyZW50LAotCQkJCQkJCQkJCQkJCSAgY2FzZXZhbCwgY2FzZW51bGwpIDogTlVMTDsK LQkJCQkJfQotCQkJCX0KLQotCQkJCUV4cHJFdmFsUHVzaFN0ZXAoc3RhdGUsICZzY3JhdGNo KTsKLQkJCQlicmVhazsKLQkJCX0KKwkJCUV4ZWNJbml0SnNvbkV4cHIoY2FzdE5vZGUoSnNv bkV4cHIsIG5vZGUpLCBzdGF0ZSwgJnNjcmF0Y2gsCisJCQkJCQkJIHJlc3YsIHJlc251bGwp OworCQkJYnJlYWs7CiAKIAkJZGVmYXVsdDoKIAkJCWVsb2coRVJST1IsICJ1bnJlY29nbml6 ZWQgbm9kZSB0eXBlOiAlZCIsCkBAIC00MjU3LDMgKzQxNTQsNjggQEAgRXhlY0J1aWxkUGFy YW1TZXRFcXVhbChUdXBsZURlc2MgZGVzYywKIAogCXJldHVybiBzdGF0ZTsKIH0KKworc3Rh dGljIHZvaWQKK0V4ZWNJbml0SnNvbkV4cHIoSnNvbkV4cHIgKmpleHByLCBFeHByU3RhdGUg KnN0YXRlLCBFeHByRXZhbFN0ZXAgKnNjcmF0Y2gsCisJCQkJIERhdHVtICpyZXN2LCBib29s ICpyZXNudWxsKQoreworCUpzb25FeHByU3RhdGUgKmpzZXN0YXRlOworCUxpc3RDZWxsICAg KmFyZ2V4cHJsYzsKKwlMaXN0Q2VsbCAgICphcmduYW1lbGM7CisKKwkvKiBKU09OX1RBQkxF IHByZXVkby1mdW5jdGlvbiByZXR1cm5zIGNvbnRleHQgaXRlbSBhcyBhIHJlc3VsdCAqLwor CWlmIChqZXhwci0+b3AgPT0gSlNPTl9UQUJMRV9PUCkKKwl7CisJCUV4ZWNJbml0RXhwclJl YygoRXhwciAqKSBqZXhwci0+Zm9ybWF0dGVkX2V4cHIsIHN0YXRlLAorCQkJCQkJcmVzdiwg cmVzbnVsbCk7CisJCXJldHVybjsKKwl9CisKKwlqc2VzdGF0ZSA9IHBhbGxvYzAoc2l6ZW9m KEpzb25FeHByU3RhdGUpKTsKKwlqc2VzdGF0ZS0+anNleHByID0gamV4cHI7CisKKwlzY3Jh dGNoLT5vcGNvZGUgPSBFRU9QX0pTT05FWFBSOworCXNjcmF0Y2gtPmQuanNvbmV4cHIuanNl c3RhdGUgPSBqc2VzdGF0ZTsKKworCUV4ZWNJbml0RXhwclJlYygoRXhwciAqKSBqZXhwci0+ Zm9ybWF0dGVkX2V4cHIsIHN0YXRlLAorCQkJCQkmanNlc3RhdGUtPmZvcm1hdHRlZF9leHBy LnZhbHVlLAorCQkJCQkmanNlc3RhdGUtPmZvcm1hdHRlZF9leHByLmlzbnVsbCk7CisKKwlF eGVjSW5pdEV4cHJSZWMoKEV4cHIgKikgamV4cHItPnBhdGhfc3BlYywgc3RhdGUsCisJCQkJ CSZqc2VzdGF0ZS0+cGF0aHNwZWMudmFsdWUsCisJCQkJCSZqc2VzdGF0ZS0+cGF0aHNwZWMu aXNudWxsKTsKKworCWlmIChqZXhwci0+b25fZW1wdHkpCisJCWpzZXN0YXRlLT5kZWZhdWx0 X29uX2VtcHR5ID0KKwkJCUV4ZWNJbml0RXhwcigoRXhwciAqKSBqZXhwci0+b25fZW1wdHkt PmRlZmF1bHRfZXhwciwKKwkJCQkJCSBzdGF0ZS0+cGFyZW50KTsKKworCWpzZXN0YXRlLT5k ZWZhdWx0X29uX2Vycm9yID0KKwkJRXhlY0luaXRFeHByKChFeHByICopIGpleHByLT5vbl9l cnJvci0+ZGVmYXVsdF9leHByLAorCQkJCQkgc3RhdGUtPnBhcmVudCk7CisKKwlqc2VzdGF0 ZS0+YXJncyA9IE5JTDsKKworCWZvcmJvdGgoYXJnZXhwcmxjLCBqZXhwci0+cGFzc2luZ192 YWx1ZXMsCisJCQlhcmduYW1lbGMsIGpleHByLT5wYXNzaW5nX25hbWVzKQorCXsKKwkJRXhw cgkgICAqYXJnZXhwciA9IChFeHByICopIGxmaXJzdChhcmdleHBybGMpOworCQlTdHJpbmcJ ICAgKmFyZ25hbWUgPSBsZmlyc3Rfbm9kZShTdHJpbmcsIGFyZ25hbWVsYyk7CisJCUpzb25Q YXRoVmFyaWFibGVFdmFsQ29udGV4dCAqdmFyID0gcGFsbG9jKHNpemVvZigqdmFyKSk7CisK KwkJdmFyLT5uYW1lID0gcHN0cmR1cChhcmduYW1lLT5zdmFsKTsKKwkJdmFyLT50eXBpZCA9 IGV4cHJUeXBlKChOb2RlICopIGFyZ2V4cHIpOworCQl2YXItPnR5cG1vZCA9IGV4cHJUeXBt b2QoKE5vZGUgKikgYXJnZXhwcik7CisJCXZhci0+ZXN0YXRlID0gRXhlY0luaXRFeHByKGFy Z2V4cHIsIHN0YXRlLT5wYXJlbnQpOworCQl2YXItPmVjb250ZXh0ID0gTlVMTDsKKwkJdmFy LT5tY3h0ID0gTlVMTDsKKwkJdmFyLT5ldmFsdWF0ZWQgPSBmYWxzZTsKKwkJdmFyLT52YWx1 ZSA9IChEYXR1bSkgMDsKKwkJdmFyLT5pc251bGwgPSB0cnVlOworCisJCWpzZXN0YXRlLT5h cmdzID0KKwkJCWxhcHBlbmQoanNlc3RhdGUtPmFyZ3MsIHZhcik7CisJfQorCisJRXhwckV2 YWxQdXNoU3RlcChzdGF0ZSwgc2NyYXRjaCk7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9leGVjdXRvci9leGVjRXhwckludGVycC5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhl Y0V4cHJJbnRlcnAuYwppbmRleCA2MzY3OTRjYTZmMS4uNDVjNjQ4ODE3YmEgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNFeHBySW50ZXJwLmMKKysrIGIvc3JjL2Jh Y2tlbmQvZXhlY3V0b3IvZXhlY0V4cHJJbnRlcnAuYwpAQCAtNzUsNiArNzUsNyBAQAogI2lu Y2x1ZGUgInV0aWxzL2RhdGUuaCIKICNpbmNsdWRlICJ1dGlscy9kYXR1bS5oIgogI2luY2x1 ZGUgInV0aWxzL2V4cGFuZGVkcmVjb3JkLmgiCisjaW5jbHVkZSAidXRpbHMvZmxvYXQuaCIK ICNpbmNsdWRlICJ1dGlscy9qc29uLmgiCiAjaW5jbHVkZSAidXRpbHMvanNvbmIuaCIKICNp bmNsdWRlICJ1dGlscy9qc29uZnVuY3MuaCIKQEAgLTE4NDQsNyArMTg0NSw3IEBAIEV4ZWNJ bnRlcnBFeHByKEV4cHJTdGF0ZSAqc3RhdGUsIEV4cHJDb250ZXh0ICplY29udGV4dCwgYm9v bCAqaXNudWxsKQogCQlFRU9fQ0FTRShFRU9QX0pTT05FWFBSKQogCQl7CiAJCQkvKiB0b28g Y29tcGxleCBmb3IgYW4gaW5saW5lIGltcGxlbWVudGF0aW9uICovCi0JCQlFeGVjRXZhbEpz b24oc3RhdGUsIG9wLCBlY29udGV4dCk7CisJCQlFeGVjRXZhbEpzb25FeHByKHN0YXRlLCBv cCwgZWNvbnRleHQpOwogCQkJRUVPX05FWFQoKTsKIAkJfQogCkBAIC00NzAwLDk2ICs0NzAx LDYgQEAgRXhlY0V2YWxKc29uQ29uc3RydWN0b3IoRXhwclN0YXRlICpzdGF0ZSwgRXhwckV2 YWxTdGVwICpvcCwKIAkqb3AtPnJlc251bGwgPSBpc251bGw7CiB9CiAKLS8qCi0gKiBFdmFs dWF0ZSBhIEpTT04gZXJyb3IvZW1wdHkgYmVoYXZpb3IgcmVzdWx0LgotICovCi1zdGF0aWMg RGF0dW0KLUV4ZWNFdmFsSnNvbkJlaGF2aW9yKEV4cHJDb250ZXh0ICplY29udGV4dCwgSnNv bkJlaGF2aW9yICpiZWhhdmlvciwKLQkJCQkJIEV4cHJTdGF0ZSAqZGVmYXVsdF9lc3RhdGUs IGJvb2wgKmlzX251bGwpCi17Ci0JKmlzX251bGwgPSBmYWxzZTsKLQotCXN3aXRjaCAoYmVo YXZpb3ItPmJ0eXBlKQotCXsKLQkJY2FzZSBKU09OX0JFSEFWSU9SX0VNUFRZX0FSUkFZOgot CQkJcmV0dXJuIEpzb25iUEdldERhdHVtKEpzb25iTWFrZUVtcHR5QXJyYXkoKSk7Ci0KLQkJ Y2FzZSBKU09OX0JFSEFWSU9SX0VNUFRZX09CSkVDVDoKLQkJCXJldHVybiBKc29uYlBHZXRE YXR1bShKc29uYk1ha2VFbXB0eU9iamVjdCgpKTsKLQotCQljYXNlIEpTT05fQkVIQVZJT1Jf VFJVRToKLQkJCXJldHVybiBCb29sR2V0RGF0dW0odHJ1ZSk7Ci0KLQkJY2FzZSBKU09OX0JF SEFWSU9SX0ZBTFNFOgotCQkJcmV0dXJuIEJvb2xHZXREYXR1bShmYWxzZSk7Ci0KLQkJY2Fz ZSBKU09OX0JFSEFWSU9SX05VTEw6Ci0JCWNhc2UgSlNPTl9CRUhBVklPUl9VTktOT1dOOgot CQljYXNlIEpTT05fQkVIQVZJT1JfRU1QVFk6Ci0JCQkqaXNfbnVsbCA9IHRydWU7Ci0JCQly ZXR1cm4gKERhdHVtKSAwOwotCi0JCWNhc2UgSlNPTl9CRUhBVklPUl9ERUZBVUxUOgotCQkJ cmV0dXJuIEV4ZWNFdmFsRXhwcihkZWZhdWx0X2VzdGF0ZSwgZWNvbnRleHQsIGlzX251bGwp OwotCi0JCWRlZmF1bHQ6Ci0JCQllbG9nKEVSUk9SLCAidW5yZWNvZ25pemVkIFNRTC9KU09O IGJlaGF2aW9yICVkIiwgYmVoYXZpb3ItPmJ0eXBlKTsKLQkJCXJldHVybiAoRGF0dW0pIDA7 Ci0JfQotfQotCi0vKgotICogRXZhbHVhdGUgYSBjb2VyY2lvbiBvZiBhIEpTT04gaXRlbSB0 byB0aGUgdGFyZ2V0IHR5cGUuCi0gKi8KLXN0YXRpYyBEYXR1bQotRXhlY0V2YWxKc29uRXhw ckNvZXJjaW9uKEV4cHJFdmFsU3RlcCAqb3AsIEV4cHJDb250ZXh0ICplY29udGV4dCwKLQkJ CQkJCSBEYXR1bSByZXMsIGJvb2wgKmlzTnVsbCwgdm9pZCAqcCwgYm9vbCAqZXJyb3IpCi17 Ci0JRXhwclN0YXRlICAqZXN0YXRlID0gcDsKLQlKc29uRXhwclN0YXRlICpqc2VzdGF0ZTsK LQotCWlmIChlc3RhdGUpCQkJCQkvKiBjb2VyY2UgdXNpbmcgc3BlY2lmaWVkIGV4cHJlc3Np b24gKi8KLQkJcmV0dXJuIEV4ZWNFdmFsRXhwcihlc3RhdGUsIGVjb250ZXh0LCBpc051bGwp OwotCi0JanNlc3RhdGUgPSBvcC0+ZC5qc29uZXhwci5qc2VzdGF0ZTsKLQotCWlmIChqc2Vz dGF0ZS0+anNleHByLT5vcCAhPSBKU09OX0VYSVNUU19PUCkKLQl7Ci0JCUpzb25Db2VyY2lv biAqY29lcmNpb24gPSBqc2VzdGF0ZS0+anNleHByLT5yZXN1bHRfY29lcmNpb247Ci0JCUpz b25FeHByICAgKmpleHByID0ganNlc3RhdGUtPmpzZXhwcjsKLQkJSnNvbmIJICAgKmpiID0g KmlzTnVsbCA/IE5VTEwgOiBEYXR1bUdldEpzb25iUChyZXMpOwotCi0JCWlmICgoY29lcmNp b24gJiYgY29lcmNpb24tPnZpYV9pbykgfHwKLQkJCShqZXhwci0+b21pdF9xdW90ZXMgJiYg ISppc051bGwgJiYKLQkJCSBKQl9ST09UX0lTX1NDQUxBUihqYikpKQotCQl7Ci0JCQkvKiBz dHJpcCBxdW90ZXMgYW5kIGNhbGwgdHlwaW5wdXQgZnVuY3Rpb24gKi8KLQkJCWNoYXIJICAg KnN0ciA9ICppc051bGwgPyBOVUxMIDogSnNvbmJVbnF1b3RlKGpiKTsKLQotCQkJcmV0dXJu IElucHV0RnVuY3Rpb25DYWxsKCZqc2VzdGF0ZS0+aW5wdXQuZnVuYywgc3RyLAotCQkJCQkJ CQkJIGpzZXN0YXRlLT5pbnB1dC50eXBpb3BhcmFtLAotCQkJCQkJCQkJIGpleHByLT5yZXR1 cm5pbmctPnR5cG1vZCk7Ci0JCX0KLQkJZWxzZSBpZiAoY29lcmNpb24gJiYgY29lcmNpb24t PnZpYV9wb3B1bGF0ZSkKLQkJCXJldHVybiBqc29uX3BvcHVsYXRlX3R5cGUocmVzLCBKU09O Qk9JRCwKLQkJCQkJCQkJCSAgamV4cHItPnJldHVybmluZy0+dHlwaWQsCi0JCQkJCQkJCQkg IGpleHByLT5yZXR1cm5pbmctPnR5cG1vZCwKLQkJCQkJCQkJCSAgJmpzZXN0YXRlLT5jYWNo ZSwKLQkJCQkJCQkJCSAgZWNvbnRleHQtPmVjeHRfcGVyX3F1ZXJ5X21lbW9yeSwKLQkJCQkJ CQkJCSAgaXNOdWxsKTsKLQl9Ci0KLQlpZiAoanNlc3RhdGUtPnJlc3VsdF9leHByKQotCXsK LQkJanNlc3RhdGUtPnJlc19leHByLT52YWx1ZSA9IHJlczsKLQkJanNlc3RhdGUtPnJlc19l eHByLT5pc251bGwgPSAqaXNOdWxsOwotCi0JCXJlcyA9IEV4ZWNFdmFsRXhwcihqc2VzdGF0 ZS0+cmVzdWx0X2V4cHIsIGVjb250ZXh0LCBpc051bGwpOwotCX0KLQotCXJldHVybiByZXM7 Ci19Ci0KIC8qCiAgKiBFdmFsdWF0ZSBhIEpTT04gcGF0aCB2YXJpYWJsZSBjYWNoaW5nIGNv bXB1dGVkIHZhbHVlLgogICovCkBAIC00ODQ0LDg0ICs0NzU1LDQzOCBAQCBFdmFsSnNvblBh dGhWYXIodm9pZCAqY3h0LCBjaGFyICp2YXJOYW1lLCBpbnQgdmFyTmFtZUxlbiwKIH0KIAog LyoKLSAqIFByZXBhcmUgU1FML0pTT04gaXRlbSBjb2VyY2lvbiB0byB0aGUgb3V0cHV0IHR5 cGUuIFJldHVybmVkIGEgZGF0dW0gb2YgdGhlCi0gKiBjb3JyZXNwb25kaW5nIFNRTCB0eXBl IGFuZCBhIHBvaW50ZXIgdG8gdGhlIGNvZXJjaW9uIHN0YXRlLgorICogQ2hlY2sgd2hldGhl ciB3ZSBuZWVkIHRvIG92ZXJyaWRlIGRlZmF1bHQgY29lcmNpb24gaW4KKyAqIEpTT05fUVVF UlkoT01JVCBRVU9URVMpIGNhc2UuCiAgKi8KLURhdHVtCi1FeGVjUHJlcGFyZUpzb25JdGVt Q29lcmNpb24oSnNvbmJWYWx1ZSAqaXRlbSwKLQkJCQkJCQlKc29uUmV0dXJuaW5nICpyZXR1 cm5pbmcsCi0JCQkJCQkJc3RydWN0IEpzb25Db2VyY2lvbnNTdGF0ZSAqY29lcmNpb25zLAot CQkJCQkJCXN0cnVjdCBKc29uQ29lcmNpb25TdGF0ZSAqKnBjb2VyY2lvbikKK3N0YXRpYyBi b29sCitFeGVjSnNvblF1ZXJ5TmVlZHNJT0NvZXJjaW9uKEpzb25FeHByICpqc2V4cHIsIERh dHVtIHJlcywgYm9vbCBpc251bGwpCiB7Ci0Jc3RydWN0IEpzb25Db2VyY2lvblN0YXRlICpj b2VyY2lvbjsKLQlEYXR1bQkJcmVzOwotCUpzb25iVmFsdWUJYnVmOworCWlmIChqc2V4cHIt Pm9taXRfcXVvdGVzICYmICFpc251bGwpCisJeworCQlKc29uYgkgICAqamIgPSBEYXR1bUdl dEpzb25iUChyZXMpOworCQlKc29uYlZhbHVlCWpidjsKKworCQkvKiBDb2VyY2Ugc3RyaW5n IGl0ZW1zIHZpYSBJL08gaW4gT01JVCBRVU9URVMgY2FzZSAqLworCQlyZXR1cm4gSnNvbmJF eHRyYWN0U2NhbGFyKCZqYi0+cm9vdCwgJmpidikgJiYKKwkJCWpidi50eXBlID09IGpidlN0 cmluZzsKKwl9CisKKwlyZXR1cm4gZmFsc2U7Cit9CiAKLQlpZiAoaXRlbS0+dHlwZSA9PSBq YnZCaW5hcnkgJiYKLQkJSnNvbkNvbnRhaW5lcklzU2NhbGFyKGl0ZW0tPnZhbC5iaW5hcnku ZGF0YSkpCisvKiBDb2VyY2UgQyBzdHJpbmcgdG8gdGV4dCwgdmFyY2hhcihOKSwgb3IgYnBj aGFyKE4pICovCitzdGF0aWMgRGF0dW0KK0V4ZWNKc29uU3RyaW5nQ29lcmNpb24oY29uc3Qg Y2hhciAqc3RyLCBpbnQzMiBsZW4sIE9pZCB0eXBpZCwgaW50MzIgdHlwbW9kKQoreworCWlm ICh0eXBpZCA9PSBCWVRFQU9JRCkKIAl7Ci0JCWJvb2wJCXJlcyBQR19VU0VEX0ZPUl9BU1NF UlRTX09OTFk7CisJCXRleHQJICAgKnR4dCA9IGNzdHJpbmdfdG9fdGV4dF93aXRoX2xlbihz dHIsIGxlbik7CisJCU5hbWVEYXRhCWVuY29kaW5nID0gezB9OworCisJCS8qIFVURjggaXMg dGhlIG9ubHkgb25lIHN1cHBvcnRlZCBlbmNvZGluZyAqLworCQlzdHJjcHkoTmFtZVN0cihl bmNvZGluZyksICJVVEY4Iik7CiAKLQkJcmVzID0gSnNvbmJFeHRyYWN0U2NhbGFyKGl0ZW0t PnZhbC5iaW5hcnkuZGF0YSwgJmJ1Zik7Ci0JCWl0ZW0gPSAmYnVmOwotCQlBc3NlcnQocmVz KTsKKwkJcmV0dXJuIERpcmVjdEZ1bmN0aW9uQ2FsbDIocGdfY29udmVydF90bywKKwkJCQkJ CQkJICAgUG9pbnRlckdldERhdHVtKHR4dCksCisJCQkJCQkJCSAgIFBvaW50ZXJHZXREYXR1 bSgmZW5jb2RpbmcpKTsKIAl9CisJZWxzZSBpZiAodHlwaWQgPT0gVEVYVE9JRCB8fCB0eXBp ZCA9PSBKU09OT0lEIHx8IHR5cG1vZCA8PSBWQVJIRFJTWikKKwkJcmV0dXJuIFBvaW50ZXJH ZXREYXR1bShjc3RyaW5nX3RvX3RleHRfd2l0aF9sZW4oc3RyLCBsZW4pKTsKKwllbHNlCisJ eworCQljaGFyCSAgICp0eHQ7CisJCWludDMyCQlzaXplOworCisJCWxlbiA9IFZBUkhEUlNa ICsgbGVuOworCisJCWlmICh0eXBpZCA9PSBCUENIQVJPSUQpCisJCQlzaXplID0gdHlwbW9k OworCQllbHNlCisJCQlzaXplID0gTWluKGxlbiwgdHlwbW9kKTsKKworCQl0eHQgPSBwYWxs b2Moc2l6ZSk7CisJCVNFVF9WQVJTSVpFKHR4dCwgc2l6ZSk7CisKKwkJbWVtY3B5KFZBUkRB VEEodHh0KSwgc3RyLCBNaW4oc2l6ZSwgbGVuKSAtIFZBUkhEUlNaKTsKKworCQlpZiAobGVu IDwgc2l6ZSkKKwkJCW1lbXNldCh0eHQgKyBsZW4sICcgJywgc2l6ZSAtIGxlbik7CiAKLQkv KiBnZXQgY29lcmNpb24gc3RhdGUgcmVmZXJlbmNlIGFuZCBkYXR1bSBvZiB0aGUgY29ycmVz cG9uZGluZyBTUUwgdHlwZSAqLworCQlyZXR1cm4gUG9pbnRlckdldERhdHVtKHR4dCk7CisJ fQorfQorCisvKiBDb2VyY2UgU1FML0pTT04gaXRlbSB0byB0ZXh0ICovCitzdGF0aWMgRGF0 dW0KK0V4ZWNKc29uQ29lcmNpb25Ub1RleHQoUEdGdW5jdGlvbiBvdXRmdW5jLCBEYXR1bSB2 YWx1ZSwgT2lkIHR5cGlkLCBpbnQzMiB0eXBtb2QpCit7CisJY2hhcgkgICAqc3RyID0gRGF0 dW1HZXRDU3RyaW5nKERpcmVjdEZ1bmN0aW9uQ2FsbDEob3V0ZnVuYywgdmFsdWUpKTsKKwor CXJldHVybiBFeGVjSnNvblN0cmluZ0NvZXJjaW9uKHN0ciwgc3RybGVuKHN0ciksIHR5cGlk LCB0eXBtb2QpOworfQorCisvKiBDb2VyY2UgZGF0ZXRpbWUgU1FML0pTT04gaXRlbSB0byB0 aGUgb3V0cHV0IHR5cGlkICovCitzdGF0aWMgRGF0dW0KK0V4ZWNKc29uRGF0ZXRpbWVDb2Vy Y2lvbihEYXR1bSB2YWwsIE9pZCB2YWxfdHlwaWQsIE9pZCB0eXBpZCwgaW50MzIgdHlwbW9k LAorCQkJCQkJIGJvb2wgKmlzbnVsbCwgYm9vbCAqZXJyb3IpCit7CisJaWYgKHZhbF90eXBp ZCA9PSB0eXBpZCkKKwkJcmV0dXJuIHZhbDsKKworCS8qCisJICogWFhYIGNvZXJjaW9uIHRv IHRleHQgaXMgZG9uZSB1c2luZyBvdXRwdXQgZnVuY3Rpb25zLCBhbmQgdGhleQorCSAqIGFy ZSBtdXRhYmxlIGZvciBub24tdGltZVt0el0gdHlwZXMgZHVlIHRvIHVzaW5nIG9mIERhdGVT dHlsZS4KKwkgKiBXZSBjYW4gcGFzcyBVU0VfSVNPX0RBVEVTLCB3aGljaCBpcyB1c2VkIGlu c2lkZSBqc29ucGF0aCwgdG8KKwkgKiBtYWtlIHRoZXNlIGNvZXJjaW9ucyBhbmQgSlNPTl9W QUxVRShSRVRVUk5JTkcgdGV4dCkgaW1tdXRhYmxlLgorCSAqCisJICogWFhYIEFsc28gdGlt ZXN0YW1wW3R6XSBvdXRwdXQgZnVuY3Rpb25zIGNhbiB0aHJvdyAib3V0IG9mIHJhbmdlIgor CSAqIGVycm9yLCBidXQgdGhpcyBlcnJvciBzZWVtIHRvIGJlIG5vdCBwb3NzaWJsZS4KKwkg Ki8KKwlzd2l0Y2ggKHZhbF90eXBpZCkKKwl7CisJCWNhc2UgREFURU9JRDoKKwkJCWlmICh0 eXBpZCA9PSBURVhUT0lEIHx8IHR5cGlkID09IFZBUkNIQVJPSUQgfHwgdHlwaWQgPT0gQlBD SEFST0lEKQorCQkJCXJldHVybiBFeGVjSnNvbkNvZXJjaW9uVG9UZXh0KGRhdGVfb3V0LCB2 YWwsIHR5cGlkLCB0eXBtb2QpOworCQkJZWxzZSBpZiAodHlwaWQgPT0gREFURU9JRCkKKwkJ CQlyZXR1cm4gdmFsOworCQkJZWxzZSBpZiAodHlwaWQgPT0gVElNRVNUQU1QT0lEKQorCQkJ eworCQkJCWludAkJCW92ZXJmbG93ID0gMDsKKwkJCQlUaW1lc3RhbXAJdHMgPQorCQkJCQlk YXRlMnRpbWVzdGFtcF9vcHRfb3ZlcmZsb3coRGF0dW1HZXREYXRlQURUKHZhbCksCisJCQkJ CQkJCQkJCQllcnJvciA/ICZvdmVyZmxvdyA6IE5VTEwpOworCisJCQkJaWYgKG92ZXJmbG93 KQorCQkJCXsKKwkJCQkJKmVycm9yID0gdHJ1ZTsKKwkJCQkJcmV0dXJuIChEYXR1bSkgMDsK KwkJCQl9CisKKwkJCQlyZXR1cm4gVGltZXN0YW1wR2V0RGF0dW0odHMpOworCQkJfQorCQkJ ZWxzZSBpZiAodHlwaWQgPT0gVElNRVNUQU1QVFpPSUQpCisJCQl7CisJCQkJaW50CQkJb3Zl cmZsb3cgPSAwOworCQkJCVRpbWVzdGFtcFR6CXJlcyA9CisJCQkJCWRhdGUydGltZXN0YW1w dHpfb3B0X292ZXJmbG93KERhdHVtR2V0RGF0ZUFEVCh2YWwpLAorCQkJCQkJCQkJCQkJICBl cnJvciA/ICZvdmVyZmxvdyA6IE5VTEwpOworCisJCQkJaWYgKG92ZXJmbG93KQorCQkJCXsK KwkJCQkJKmVycm9yID0gdHJ1ZTsKKwkJCQkJcmV0dXJuIChEYXR1bSkgMDsKKwkJCQl9CisK KwkJCQlyZXR1cm4gVGltZXN0YW1wVHpHZXREYXR1bShyZXMpOworCQkJfQorCQkJZWxzZQor CQkJCWJyZWFrOyAvKiBObyBjYXN0ICovCisKKwkJY2FzZSBUSU1FT0lEOgorCQkJaWYgKHR5 cGlkID09IFRFWFRPSUQgfHwgdHlwaWQgPT0gVkFSQ0hBUk9JRCB8fCB0eXBpZCA9PSBCUENI QVJPSUQpCisJCQkJcmV0dXJuIEV4ZWNKc29uQ29lcmNpb25Ub1RleHQodGltZV9vdXQsIHZh bCwgdHlwaWQsIHR5cG1vZCk7CisJCQllbHNlIGlmICh0eXBpZCA9PSBUSU1FT0lEKQorCQkJ CXJldHVybiB2YWw7CisJCQllbHNlIGlmICh0eXBpZCA9PSBUSU1FVFpPSUQpCisJCQkJcmV0 dXJuIERpcmVjdEZ1bmN0aW9uQ2FsbDEodGltZV90aW1ldHosIHZhbCk7CisJCQllbHNlCisJ CQkJYnJlYWs7CS8qIE5vIGNhc3QgKi8KKworCQljYXNlIFRJTUVUWk9JRDoKKwkJCWlmICh0 eXBpZCA9PSBURVhUT0lEIHx8IHR5cGlkID09IFZBUkNIQVJPSUQgfHwgdHlwaWQgPT0gQlBD SEFST0lEKQorCQkJCXJldHVybiBFeGVjSnNvbkNvZXJjaW9uVG9UZXh0KHRpbWV0el9vdXQs IHZhbCwgdHlwaWQsIHR5cG1vZCk7CisJCQllbHNlIGlmICh0eXBpZCA9PSBUSU1FVFpPSUQp CisJCQkJcmV0dXJuIHZhbDsKKwkJCWVsc2UgaWYgKHR5cGlkID09IFRJTUVPSUQpCisJCQkJ cmV0dXJuIERpcmVjdEZ1bmN0aW9uQ2FsbDEodGltZXR6X3RpbWUsIHZhbCk7CisJCQllbHNl CisJCQkJYnJlYWs7CisKKwkJY2FzZSBUSU1FU1RBTVBPSUQ6CisJCQlpZiAodHlwaWQgPT0g VEVYVE9JRCB8fCB0eXBpZCA9PSBWQVJDSEFST0lEIHx8IHR5cGlkID09IEJQQ0hBUk9JRCkK KwkJCQlyZXR1cm4gRXhlY0pzb25Db2VyY2lvblRvVGV4dCh0aW1lc3RhbXBfb3V0LCB2YWws IHR5cGlkLCB0eXBtb2QpOworCQkJZWxzZSBpZiAodHlwaWQgPT0gVElNRVNUQU1QT0lEKQor CQkJCXJldHVybiB2YWw7CisJCQllbHNlIGlmICh0eXBpZCA9PSBEQVRFT0lEKQorCQkJCXJl dHVybiB0aW1lc3RhbXBfZGF0ZV9vcHRfZXJyb3IoRGF0dW1HZXRUaW1lc3RhbXAodmFsKSwg ZXJyb3IpOworCQkJZWxzZSBpZiAodHlwaWQgPT0gVElNRU9JRCkKKwkJCXsKKwkJCQlUaW1l QURUCQl0aW1lID0KKwkJCQkJdGltZXN0YW1wX3RpbWVfb3B0X2Vycm9yKERhdHVtR2V0VGlt ZXN0YW1wKHZhbCksCisJCQkJCQkJCQkJCSBpc251bGwsIGVycm9yKTsKKworCQkJCWlmICgo ZXJyb3IgJiYgKmVycm9yKSB8fCAqaXNudWxsKQorCQkJCQlyZXR1cm4gKERhdHVtKSAwOwor CQkJCWVsc2UKKwkJCQkJcmV0dXJuIFRpbWVBRFRHZXREYXR1bSh0aW1lKTsKKwkJCX0KKwkJ CWVsc2UgaWYgKHR5cGlkID09IFRJTUVTVEFNUFRaT0lEKQorCQkJeworCQkJCWludAkJCW92 ZXJmbG93ID0gMDsKKwkJCQlUaW1lc3RhbXBUeiB0c3R6ID0KKwkJCQkJdGltZXN0YW1wMnRp bWVzdGFtcHR6X29wdF9vdmVyZmxvdyhEYXR1bUdldFRpbWVzdGFtcCh2YWwpLAorCQkJCQkJ CQkJCQkJCSAgIGVycm9yID8gJm92ZXJmbG93IDogTlVMTCk7CisKKwkJCQlpZiAob3ZlcmZs b3cpCisJCQkJeworCQkJCQkqZXJyb3IgPSB0cnVlOworCQkJCQlyZXR1cm4gKERhdHVtKSAw OworCQkJCX0KKworCQkJCXJldHVybiBUaW1lc3RhbXBUekdldERhdHVtKHRzdHopOworCQkJ fQorCQkJZWxzZQorCQkJCWJyZWFrOwkvKiBObyBjYXN0ICovCisKKwkJY2FzZSBUSU1FU1RB TVBUWk9JRDoKKwkJCWlmICh0eXBpZCA9PSBURVhUT0lEIHx8IHR5cGlkID09IFZBUkNIQVJP SUQgfHwgdHlwaWQgPT0gQlBDSEFST0lEKQorCQkJCXJldHVybiBFeGVjSnNvbkNvZXJjaW9u VG9UZXh0KHRpbWVzdGFtcHR6X291dCwgdmFsLCB0eXBpZCwgdHlwbW9kKTsKKwkJCWVsc2Ug aWYgKHR5cGlkID09IFRJTUVTVEFNUFRaT0lEKQorCQkJCXJldHVybiB2YWw7CisJCQllbHNl IGlmICh0eXBpZCA9PSBEQVRFT0lEKQorCQkJCXJldHVybiB0aW1lc3RhbXB0el9kYXRlX29w dF9lcnJvcihEYXR1bUdldFRpbWVzdGFtcFR6KHZhbCksIGVycm9yKTsKKwkJCWVsc2UgaWYg KHR5cGlkID09IFRJTUVPSUQpCisJCQl7CisJCQkJVGltZUFEVAkJdGltZSA9CisJCQkJCXRp bWVzdGFtcHR6X3RpbWVfb3B0X2Vycm9yKERhdHVtR2V0VGltZXN0YW1wVHoodmFsKSwKKwkJ CQkJCQkJCQkJICAgaXNudWxsLCBlcnJvcik7CisKKwkJCQlpZiAoKGVycm9yICYmICplcnJv cikgfHwgKmlzbnVsbCkKKwkJCQkJcmV0dXJuIChEYXR1bSkgMDsKKwkJCQllbHNlCisJCQkJ CXJldHVybiBUaW1lQURUR2V0RGF0dW0odGltZSk7CisJCQl9CisJCQllbHNlIGlmICh0eXBp ZCA9PSBUSU1FVFpPSUQpCisJCQl7CisJCQkJVGltZVR6QURUICAqcmVzdWx0ID0KKwkJCQkJ dGltZXN0YW1wdHpfdGltZXR6X29wdF9lcnJvcihEYXR1bUdldFRpbWVzdGFtcFR6KHZhbCks IGVycm9yKTsKKworCQkJCWlmICgoZXJyb3IgJiYgKmVycm9yKSB8fCAhcmVzdWx0KQorCQkJ CXsKKwkJCQkJKmlzbnVsbCA9IHRydWU7CisJCQkJCXJldHVybiAoRGF0dW0pIDA7CisJCQkJ fQorCisJCQkJcmV0dXJuIFRpbWVUekFEVFBHZXREYXR1bShyZXN1bHQpOworCQkJfQorCQkJ ZWxzZSBpZiAodHlwaWQgPT0gVElNRVNUQU1QT0lEKQorCQkJeworCQkJCVRpbWVzdGFtcAl0 cyA9CisJCQkJCXRpbWVzdGFtcHR6MnRpbWVzdGFtcF9vcHRfZXJyb3IoRGF0dW1HZXRUaW1l c3RhbXBUeih2YWwpLAorCQkJCQkJCQkJCQkJCWVycm9yKTsKKworCQkJCWlmIChlcnJvciAm JiAqZXJyb3IpCisJCQkJCXJldHVybiAoRGF0dW0pIDA7CisKKwkJCQlyZXR1cm4gVGltZXN0 YW1wR2V0RGF0dW0odHMpOworCQkJfQorCQkJZWxzZQorCQkJCWJyZWFrOwkvKiBObyBjYXN0 ICovCisKKwkJZGVmYXVsdDoKKwkJCWVsb2coRVJST1IsICJ1bmV4cGVjdGVkIGpzb25iIGRh dGV0aW1lIHR5cGUgb2lkICV1IiwgdmFsX3R5cGlkKTsKKwkJCWJyZWFrOworCX0KKworCWlm ICghZXJyb3IpCisJCWVyZXBvcnQoRVJST1IsCisJCQkoZXJyY29kZShFUlJDT0RFX1NRTF9K U09OX0lURU1fQ0FOTk9UX0JFX0NBU1RfVE9fVEFSR0VUX1RZUEUpLAorCQkJIGVycm1zZygi U1FML0pTT04gaXRlbSBjYW5ub3QgYmUgY2FzdCB0byB0YXJnZXQgdHlwZSIpKSk7CisKKwkq ZXJyb3IgPSB0cnVlOworCSppc251bGwgPSB0cnVlOworCisJcmV0dXJuIChEYXR1bSkgMDsK K30KKworLyogQ29lcmNlIGJvb2xlYW4gU1FML0pTT04gaXRlbSBvciBKU09OX0VYSVNUUyBy ZXN1bHQgdG8gdGhlIG91dHB1dCB0eXBlICovCitzdGF0aWMgYm9vbAorRXhlY0pzb25Cb29s Q29lcmNpb24oYm9vbCB2YWwsIE9pZCB0eXBpZCwgaW50MzIgdHlwbW9kLCBEYXR1bSAqcmVz KQoreworCWlmICh0eXBpZCA9PSBCT09MT0lEKQorCQkqcmVzID0gQm9vbEdldERhdHVtKHZh bCk7CisJZWxzZSBpZiAodHlwaWQgPT0gSU5UNE9JRCkKKwkJLyogV2Ugb25seSBoYXZlIGNh c3QgYm9vbDo6aW50NCBpbiB0aGUgY2F0YWxvZy4gKi8KKwkJKnJlcyA9IEludDMyR2V0RGF0 dW0odmFsID8gMSA6IDApOworCWVsc2UgaWYgKHR5cGlkID09IFRFWFRPSUQgfHwgdHlwaWQg PT0gVkFSQ0hBUk9JRCB8fCB0eXBpZCA9PSBCUENIQVJPSUQpCisJCS8qCisJCSAqIGJvb2w6 OnRleHQgcmV0dXJucyAndHJ1ZScgLyAnZmFsc2UnLAorCQkgKiBib29sb3V0KCkgcmV0dXJu cyAndCcgLyAnZicuCisJCSAqLworCQkqcmVzID0gRXhlY0pzb25TdHJpbmdDb2VyY2lvbih2 YWwgPyAidHJ1ZSIgOiAiZmFsc2UiLCB2YWwgPyA0IDogNSwKKwkJCQkJCQkJCSAgdHlwaWQs IHR5cG1vZCk7CisJZWxzZQorCQlyZXR1cm4gZmFsc2U7CisKKwlyZXR1cm4gdHJ1ZTsKK30K Kworc3RhdGljIERhdHVtCitKc29uYlBHZXRUZXh0RGF0dW0oSnNvbmIgKmpiKQoreworCWNo YXIJICAgKnN0ciA9IEpzb25iVG9DU3RyaW5nKE5VTEwsICZqYi0+cm9vdCwgVkFSU0laRShq YikpOworCURhdHVtCQlyZXMgPSBDU3RyaW5nR2V0VGV4dERhdHVtKHN0cik7CisKKwlwZnJl ZShzdHIpOworCXJldHVybiByZXM7Cit9CisKKy8qIENvZXJjZSBTUUwvSlNPTiBpdGVtIHRv IHRoZSBvdXRwdXQgdHlwaWQgKi8KK3N0YXRpYyBEYXR1bQorRXhlY0pzb25WYWx1ZUNvZXJj aW9uKEpzb25iVmFsdWUgKml0ZW0sIE9pZCB0eXBpZCwgaW50MzIgdHlwbW9kLAorCQkJCQkg IGJvb2wgKmlzbnVsbCwgYm9vbCAqZXJyb3IpCit7CisJKmlzbnVsbCA9IGZhbHNlOworCisJ LyogU3BlY2lhbCBjYXNlIGZvciBqc29uIGFuZCBqc29uYiBvdXRwdXQgdHlwZXMgKi8KKwlp ZiAodHlwaWQgPT0gSlNPTkJPSUQpCisJCXJldHVybiBKc29uYlBHZXREYXR1bShKc29uYlZh bHVlVG9Kc29uYihpdGVtKSk7CisKKwlpZiAodHlwaWQgPT0gSlNPTk9JRCkKKwkJcmV0dXJu IEpzb25iUEdldFRleHREYXR1bShKc29uYlZhbHVlVG9Kc29uYihpdGVtKSk7CisKKwkvKgor CSAqIENvZXJjaW9uIG1ldGhvZCBhbmQgc2V0IG9mIHN1cHBvcnRlZCBvdXRwdXQgdHlwZXMg YXJlIGRldGVybWluZWQKKwkgKiBieSB0aGUgaXRlbSB0eXBlLgorCSAqLwogCXN3aXRjaCAo aXRlbS0+dHlwZSkKIAl7CiAJCWNhc2UgamJ2TnVsbDoKLQkJCWNvZXJjaW9uID0gJmNvZXJj aW9ucy0+bnVsbDsKLQkJCXJlcyA9IChEYXR1bSkgMDsKLQkJCWJyZWFrOworCQkJQXNzZXJ0 KDApOyAvKiBtdXN0IGJlIGhhbmRsZWQgYnkgdGhlIGNhbGxlciAqLworCQkJKmlzbnVsbCA9 IHRydWU7CisJCQlyZXR1cm4gKERhdHVtKSAwOwogCiAJCWNhc2UgamJ2U3RyaW5nOgotCQkJ Y29lcmNpb24gPSAmY29lcmNpb25zLT5zdHJpbmc7Ci0JCQlyZXMgPSBQb2ludGVyR2V0RGF0 dW0oY3N0cmluZ190b190ZXh0X3dpdGhfbGVuKGl0ZW0tPnZhbC5zdHJpbmcudmFsLAotCQkJ CQkJCQkJCQkJCQkgICBpdGVtLT52YWwuc3RyaW5nLmxlbikpOwotCQkJYnJlYWs7CisJCQlp ZiAodHlwaWQgPT0gVEVYVE9JRCB8fCB0eXBpZCA9PSBWQVJDSEFST0lEIHx8IHR5cGlkID09 IEJQQ0hBUk9JRCkKKwkJCXsKKwkJCQlyZXR1cm4gRXhlY0pzb25TdHJpbmdDb2VyY2lvbihp dGVtLT52YWwuc3RyaW5nLnZhbCwKKwkJCQkJCQkJCQkJICBpdGVtLT52YWwuc3RyaW5nLmxl biwKKwkJCQkJCQkJCQkJICB0eXBpZCwgdHlwbW9kKTsKKwkJCX0KKwkJCWVsc2UgaWYgKHR5 cGlkID09IElOVDJPSUQgfHwgdHlwaWQgPT0gSU5UNE9JRCB8fCB0eXBpZCA9PSBJTlQ4T0lE KQorCQkJeworCQkJCWNoYXIJICAgKnN0ciA9IHBuc3RyZHVwKGl0ZW0tPnZhbC5zdHJpbmcu dmFsLAorCQkJCQkJCQkJCSAgIGl0ZW0tPnZhbC5zdHJpbmcubGVuKTsKKworCQkJCWlmIChl cnJvcikKKwkJCQl7CisJCQkJCWludDY0CQl2YWwgPSBwZ19zdHJ0b2ludDY0X29wdF9lcnJv cihzdHIsIGVycm9yKTsKKworCQkJCQlpZiAoKmVycm9yKQorCQkJCQkJcmV0dXJuIChEYXR1 bSkgMDsKKworCQkJCQlpZiAodHlwaWQgPT0gSU5UMk9JRCkKKwkJCQkJeworCQkJCQkJaWYg KHZhbCA8PSBQR19JTlQxNl9NQVggfHwgdmFsID49IFBHX0lOVDE2X01JTikKKwkJCQkJCQly ZXR1cm4gSW50MTZHZXREYXR1bSgoaW50MTYpIHZhbCk7CisJCQkJCX0KKwkJCQkJZWxzZSBp ZiAodHlwaWQgPT0gSU5UNE9JRCkKKwkJCQkJeworCQkJCQkJaWYgKHZhbCA8PSBQR19JTlQz Ml9NQVggfHwgdmFsID49IFBHX0lOVDMyX01JTikKKwkJCQkJCQlyZXR1cm4gSW50MzJHZXRE YXR1bSgoaW50MzIpIHZhbCk7CisJCQkJCX0KKwkJCQkJZWxzZQorCQkJCQkJcmV0dXJuIElu dDY0R2V0RGF0dW0odmFsKTsKKworCQkJCQkqZXJyb3IgPSB0cnVlOworCQkJCQlyZXR1cm4g KERhdHVtKSAwOworCQkJCX0KKwkJCQllbHNlIGlmICh0eXBpZCA9PSBJTlQyT0lEKQorCQkJ CQlyZXR1cm4gSW50MTZHZXREYXR1bShwZ19zdHJ0b2ludDE2KHN0cikpOworCQkJCWVsc2Ug aWYgKHR5cGlkID09IElOVDRPSUQpCisJCQkJCXJldHVybiBJbnQzMkdldERhdHVtKHBnX3N0 cnRvaW50MzIoc3RyKSk7CisJCQkJZWxzZQorCQkJCQlyZXR1cm4gSW50NjRHZXREYXR1bShw Z19zdHJ0b2ludDY0KHN0cikpOworCQkJfQorCQkJZWxzZSBpZiAodHlwaWQgPT0gQk9PTE9J RCkKKwkJCXsKKwkJCQlyZXR1cm4gQm9vbEdldERhdHVtKGJvb2xpbl9vcHRfZXJyb3IoaXRl bS0+dmFsLnN0cmluZy52YWwsCisJCQkJCQkJCQkJCQkJIGl0ZW0tPnZhbC5zdHJpbmcubGVu LAorCQkJCQkJCQkJCQkJCSBlcnJvcikpOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCWNo YXIJICAgKnN0ciA9IHBuc3RyZHVwKGl0ZW0tPnZhbC5zdHJpbmcudmFsLAorCQkJCQkJCQkJ CSAgIGl0ZW0tPnZhbC5zdHJpbmcubGVuKTsKKworCQkJCWlmICh0eXBpZCA9PSBGTE9BVDRP SUQpCisJCQkJCXJldHVybiBGbG9hdDRHZXREYXR1bShmbG9hdDRpbl9vcHRfZXJyb3Ioc3Ry LCBlcnJvcikpOworCQkJCWVsc2UgaWYgKHR5cGlkID09IEZMT0FUOE9JRCkKKwkJCQkJcmV0 dXJuIEZsb2F0OEdldERhdHVtKAorCQkJCQkJZmxvYXQ4aW5faW50ZXJuYWxfb3B0X2Vycm9y KHN0ciwgTlVMTCwKKwkJCQkJCQkJCQkJCQkiZG91YmxlIHByZWNpc2lvbiIsCisJCQkJCQkJ CQkJCQkJc3RyLCBlcnJvcikpOworCQkJCWVsc2UgaWYgKHR5cGlkID09IE5VTUVSSUNPSUQp CisJCQkJCXJldHVybiBOdW1lcmljR2V0RGF0dW0obnVtZXJpY19pbl9vcHRfZXJyb3Ioc3Ry LCB0eXBtb2QsIGVycm9yKSk7CisJCQkJZWxzZSBpZiAodHlwaWQgPT0gREFURU9JRCkKKwkJ CQkJcmV0dXJuIERhdGVBRFRHZXREYXR1bShkYXRlX2luX29wdF9lcnJvcihzdHIsIGVycm9y KSk7CisJCQkJZWxzZSBpZiAodHlwaWQgPT0gVElNRU9JRCkKKwkJCQkJcmV0dXJuIFRpbWVB RFRHZXREYXR1bSh0aW1lX2luX29wdF9lcnJvcihzdHIsIHR5cG1vZCwgZXJyb3IpKTsKKwkJ CQllbHNlIGlmICh0eXBpZCA9PSBUSU1FVFpPSUQpCisJCQkJCXJldHVybiBUaW1lVHpBRFRQ R2V0RGF0dW0odGltZXR6X2luX29wdF9lcnJvcihzdHIsIHR5cG1vZCwgZXJyb3IpKTsKKwkJ CQllbHNlIGlmICh0eXBpZCA9PSBUSU1FU1RBTVBPSUQpCisJCQkJCXJldHVybiBUaW1lc3Rh bXBHZXREYXR1bSh0aW1lc3RhbXBfaW5fb3B0X2Vycm9yKHN0ciwgdHlwbW9kLCBlcnJvcikp OworCQkJCWVsc2UgaWYgKHR5cGlkID09IFRJTUVTVEFNUFRaT0lEKQorCQkJCQlyZXR1cm4g VGltZXN0YW1wVHpHZXREYXR1bSh0aW1lc3RhbXB0el9pbl9vcHRfZXJyb3Ioc3RyLCB0eXBt b2QsIGVycm9yKSk7CisJCQkJZWxzZQorCQkJCQlicmVhazsJLyogTm8gY2FzdCAqLworCQkJ fQogCiAJCWNhc2UgamJ2TnVtZXJpYzoKLQkJCWNvZXJjaW9uID0gJmNvZXJjaW9ucy0+bnVt ZXJpYzsKLQkJCXJlcyA9IE51bWVyaWNHZXREYXR1bShpdGVtLT52YWwubnVtZXJpYyk7Ci0J CQlicmVhazsKKwkJCXsKKwkJCQlOdW1lcmljCQludW0gPSBpdGVtLT52YWwubnVtZXJpYzsK KworCQkJCWlmICh0eXBpZCA9PSBOVU1FUklDT0lEKQorCQkJCQlyZXR1cm4gTnVtZXJpY0dl dERhdHVtKG51bSk7CisJCQkJZWxzZSBpZiAodHlwaWQgPT0gVEVYVE9JRCB8fCB0eXBpZCA9 PSBWQVJDSEFST0lEIHx8IHR5cGlkID09IEJQQ0hBUk9JRCkKKwkJCQkJcmV0dXJuIEV4ZWNK c29uQ29lcmNpb25Ub1RleHQobnVtZXJpY19vdXQsIE51bWVyaWNHZXREYXR1bShudW0pLCB0 eXBpZCwgdHlwbW9kKTsKKwkJCQllbHNlIGlmICh0eXBpZCA9PSBJTlQyT0lEKQorCQkJCQly ZXR1cm4gSW50MTZHZXREYXR1bShudW1lcmljX2ludDJfb3B0X2Vycm9yKG51bSwgZXJyb3Ip KTsKKwkJCQllbHNlIGlmICh0eXBpZCA9PSBJTlQ0T0lEKQorCQkJCQlyZXR1cm4gSW50MzJH ZXREYXR1bShudW1lcmljX2ludDRfb3B0X2Vycm9yKG51bSwgZXJyb3IpKTsKKwkJCQllbHNl IGlmICh0eXBpZCA9PSBJTlQ4T0lEKQorCQkJCQlyZXR1cm4gSW50NjRHZXREYXR1bShudW1l cmljX2ludDhfb3B0X2Vycm9yKG51bSwgZXJyb3IpKTsKKwkJCQllbHNlIGlmICh0eXBpZCA9 PSBGTE9BVDRPSUQgfHwgdHlwaWQgPT0gRkxPQVQ4T0lEKQorCQkJCXsKKwkJCQkJLyoKKwkJ CQkJICogWFhYIG51bWVyaWNfZmxvYXQ4KCkgYWxzbyB1c2VzIEkvTyBjb2VyY2lvbiwgYnV0 CisJCQkJCSAqIGl0IGhhcyBzcGVjaWFsIGhhbmRsaW5nIG9mIEluZiBhbmQgTmFOLgorCQkJ CQkgKi8KKwkJCQkJRGF0dW0JCWNzdHIgPSBEaXJlY3RGdW5jdGlvbkNhbGwxKG51bWVyaWNf b3V0LAorCQkJCQkJCQkJCQkJCQkgICBOdW1lcmljR2V0RGF0dW0obnVtKSk7CisJCQkJCWNo YXIJICAgKnN0ciA9IERhdHVtR2V0Q1N0cmluZyhjc3RyKTsKIAotCQljYXNlIGpidkJvb2w6 Ci0JCQljb2VyY2lvbiA9ICZjb2VyY2lvbnMtPmJvb2xlYW47Ci0JCQlyZXMgPSBCb29sR2V0 RGF0dW0oaXRlbS0+dmFsLmJvb2xlYW4pOwotCQkJYnJlYWs7CisJCQkJCWlmICh0eXBpZCA9 PSBGTE9BVDRPSUQpCisJCQkJCQlyZXR1cm4gRmxvYXQ0R2V0RGF0dW0oZmxvYXQ0aW5fb3B0 X2Vycm9yKHN0ciwgZXJyb3IpKTsKKwkJCQkJZWxzZQorCQkJCQkJcmV0dXJuIEZsb2F0OEdl dERhdHVtKAorCQkJCQkJCWZsb2F0OGluX2ludGVybmFsX29wdF9lcnJvcihzdHIsIE5VTEws CisJCQkJCQkJCQkJCQkJCSJkb3VibGUgcHJlY2lzaW9uIiwKKwkJCQkJCQkJCQkJCQkJc3Ry LCBlcnJvcikpOworCQkJCX0KKwkJCQllbHNlCisJCQkJCWJyZWFrOwkvKiBObyBjYXN0ICov CisJCQl9CiAKLQkJY2FzZSBqYnZEYXRldGltZToKLQkJCXJlcyA9IGl0ZW0tPnZhbC5kYXRl dGltZS52YWx1ZTsKLQkJCXN3aXRjaCAoaXRlbS0+dmFsLmRhdGV0aW1lLnR5cGlkKQorCQlj YXNlIGpidkJvb2w6CiAJCQl7Ci0JCQkJY2FzZSBEQVRFT0lEOgotCQkJCQljb2VyY2lvbiA9 ICZjb2VyY2lvbnMtPmRhdGU7Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgVElNRU9JRDoKLQkJ CQkJY29lcmNpb24gPSAmY29lcmNpb25zLT50aW1lOwotCQkJCQlicmVhazsKLQkJCQljYXNl IFRJTUVUWk9JRDoKLQkJCQkJY29lcmNpb24gPSAmY29lcmNpb25zLT50aW1ldHo7Ci0JCQkJ CWJyZWFrOwotCQkJCWNhc2UgVElNRVNUQU1QT0lEOgotCQkJCQljb2VyY2lvbiA9ICZjb2Vy Y2lvbnMtPnRpbWVzdGFtcDsKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSBUSU1FU1RBTVBUWk9J RDoKLQkJCQkJY29lcmNpb24gPSAmY29lcmNpb25zLT50aW1lc3RhbXB0ejsKLQkJCQkJYnJl YWs7Ci0JCQkJZGVmYXVsdDoKLQkJCQkJZWxvZyhFUlJPUiwgInVuZXhwZWN0ZWQganNvbmIg ZGF0ZXRpbWUgdHlwZSBvaWQgJXUiLAotCQkJCQkJIGl0ZW0tPnZhbC5kYXRldGltZS50eXBp ZCk7Ci0JCQkJCXJldHVybiAoRGF0dW0pIDA7CisJCQkJRGF0dW0JCXJlczsKKworCQkJCWlm IChFeGVjSnNvbkJvb2xDb2VyY2lvbihpdGVtLT52YWwuYm9vbGVhbiwgdHlwaWQsIHR5cG1v ZCwgJnJlcykpCisJCQkJCXJldHVybiByZXM7CisKKwkJCQlicmVhazsgLyogTm8gY2FzdCAq LwogCQkJfQotCQkJYnJlYWs7CisKKwkJY2FzZSBqYnZEYXRldGltZToKKwkJCXJldHVybiBF eGVjSnNvbkRhdGV0aW1lQ29lcmNpb24oaXRlbS0+dmFsLmRhdGV0aW1lLnZhbHVlLAorCQkJ CQkJCQkJCQlpdGVtLT52YWwuZGF0ZXRpbWUudHlwaWQsCisJCQkJCQkJCQkJCXR5cGlkLCB0 eXBtb2QsIGlzbnVsbCwgZXJyb3IpOwogCiAJCWNhc2UgamJ2QXJyYXk6CiAJCWNhc2UgamJ2 T2JqZWN0OgogCQljYXNlIGpidkJpbmFyeToKLQkJCWNvZXJjaW9uID0gJmNvZXJjaW9ucy0+ Y29tcG9zaXRlOwotCQkJcmVzID0gSnNvbmJQR2V0RGF0dW0oSnNvbmJWYWx1ZVRvSnNvbmIo aXRlbSkpOworCQkJQXNzZXJ0KDApOwkvKiBub24tc2NhbGFycyBtdXN0IGJlIHJlamVjdGVk IGJ5IEpzb25QYXRoVmFsdWUoKSAqLwogCQkJYnJlYWs7CiAKIAkJZGVmYXVsdDoKQEAgLTQ5 MjksOTkgKzUxOTQsMTAwIEBAIEV4ZWNQcmVwYXJlSnNvbkl0ZW1Db2VyY2lvbihKc29uYlZh bHVlICppdGVtLAogCQkJcmV0dXJuIChEYXR1bSkgMDsKIAl9CiAKLQkqcGNvZXJjaW9uID0g Y29lcmNpb247CisJaWYgKCFlcnJvcikKKwkJZXJlcG9ydChFUlJPUiwKKwkJCShlcnJjb2Rl KEVSUkNPREVfU1FMX0pTT05fSVRFTV9DQU5OT1RfQkVfQ0FTVF9UT19UQVJHRVRfVFlQRSks CisJCQkgZXJybXNnKCJTUUwvSlNPTiBpdGVtIGNhbm5vdCBiZSBjYXN0IHRvIHRhcmdldCB0 eXBlIikpKTsKIAotCXJldHVybiByZXM7Ci19CisJKmVycm9yID0gdHJ1ZTsKKwkqaXNudWxs ID0gdHJ1ZTsKIAotdHlwZWRlZiBEYXR1bSAoKkpzb25GdW5jKSAoRXhwckV2YWxTdGVwICpv cCwgRXhwckNvbnRleHQgKmVjb250ZXh0LAotCQkJCQkJICAgRGF0dW0gaXRlbSwgYm9vbCAq cmVzbnVsbCwgdm9pZCAqcCwgYm9vbCAqZXJyb3IpOworCXJldHVybiAoRGF0dW0pIDA7Cit9 CiAKKy8qCisgKiBFdmFsdWF0ZSBhIEpTT04gZXJyb3IvZW1wdHkgYmVoYXZpb3IgYW5kIGNv ZXJjZSByZXN1bHQgdG8gdGhlIG91dHB1dAorICogdHlwZS4KKyAqLwogc3RhdGljIERhdHVt Ci1FeGVjRXZhbEpzb25FeHByU3VidHJhbnMoSnNvbkZ1bmMgZnVuYywgRXhwckV2YWxTdGVw ICpvcCwKLQkJCQkJCSBFeHByQ29udGV4dCAqZWNvbnRleHQsCi0JCQkJCQkgRGF0dW0gcmVz LCBib29sICpyZXNudWxsLAotCQkJCQkJIHZvaWQgKnAsIGJvb2wgKmVycm9yLCBib29sIHN1 YnRyYW5zKQorRXhlY0V2YWxKc29uQmVoYXZpb3IoRXhwckNvbnRleHQgKmVjb250ZXh0LCBK c29uQmVoYXZpb3IgKmJlaGF2aW9yLAorCQkJCQkgRXhwclN0YXRlICpkZWZhdWx0X2VzdGF0 ZSwKKwkJCQkJIE9pZCByZXRfdHlwaWQsIGludDMyIHJldF90eXBtb2QsIGJvb2wgKmlzX251 bGwpCiB7Ci0JTWVtb3J5Q29udGV4dCBvbGRjb250ZXh0OwotCVJlc291cmNlT3duZXIgb2xk b3duZXI7Ci0KLQlpZiAoIXN1YnRyYW5zKQotCQkvKiBObyBuZWVkIHRvIHVzZSBzdWJ0cmFu c2FjdGlvbnMuICovCi0JCXJldHVybiBmdW5jKG9wLCBlY29udGV4dCwgcmVzLCByZXNudWxs LCBwLCBlcnJvcik7CisJKmlzX251bGwgPSBmYWxzZTsKIAotCS8qCi0JICogV2Ugc2hvdWxk IGNhdGNoIGV4Y2VwdGlvbnMgb2YgY2F0ZWdvcnkgRVJSQ09ERV9EQVRBX0VYQ0VQVElPTiBh bmQKLQkgKiBleGVjdXRlIHRoZSBjb3JyZXNwb25kaW5nIE9OIEVSUk9SIGJlaGF2aW9yIHRo ZW4uCi0JICovCi0Jb2xkY29udGV4dCA9IEN1cnJlbnRNZW1vcnlDb250ZXh0OwotCW9sZG93 bmVyID0gQ3VycmVudFJlc291cmNlT3duZXI7CisJc3dpdGNoIChiZWhhdmlvci0+YnR5cGUp CisJeworCQljYXNlIEpTT05fQkVIQVZJT1JfRU1QVFlfQVJSQVk6CisJCQlpZiAocmV0X3R5 cGlkID09IEpTT05CT0lEKQorCQkJCXJldHVybiBKc29uYlBHZXREYXR1bShKc29uYk1ha2VF bXB0eUFycmF5KCkpOworCQkJZWxzZQorCQkJeworCQkJCUFzc2VydChyZXRfdHlwaWQgPT0g SlNPTk9JRCB8fCByZXRfdHlwaWQgPT0gVEVYVE9JRCB8fAorCQkJCQkgICByZXRfdHlwaWQg PT0gVkFSQ0hBUk9JRCB8fCByZXRfdHlwaWQgPT0gQlBDSEFST0lEIHx8CisJCQkJCSAgIHJl dF90eXBpZCA9PSBCWVRFQU9JRCk7CiAKLQlBc3NlcnQoZXJyb3IpOworCQkJCXJldHVybiBF eGVjSnNvblN0cmluZ0NvZXJjaW9uKCJbXSIsIDIsIHJldF90eXBpZCwgcmV0X3R5cG1vZCk7 CisJCQl9CiAKLQlCZWdpbkludGVybmFsU3ViVHJhbnNhY3Rpb24oTlVMTCk7Ci0JLyogV2Fu dCB0byBleGVjdXRlIGV4cHJlc3Npb25zIGluc2lkZSBmdW5jdGlvbidzIG1lbW9yeSBjb250 ZXh0ICovCi0JTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRleHQpOworCQljYXNlIEpT T05fQkVIQVZJT1JfRU1QVFlfT0JKRUNUOgorCQkJaWYgKHJldF90eXBpZCA9PSBKU09OQk9J RCkKKwkJCQlyZXR1cm4gSnNvbmJQR2V0RGF0dW0oSnNvbmJNYWtlRW1wdHlPYmplY3QoKSk7 CisJCQllbHNlCisJCQl7CisJCQkJQXNzZXJ0KHJldF90eXBpZCA9PSBKU09OT0lEIHx8IHJl dF90eXBpZCA9PSBURVhUT0lEIHx8CisJCQkJCSAgIHJldF90eXBpZCA9PSBWQVJDSEFST0lE IHx8IHJldF90eXBpZCA9PSBCUENIQVJPSUQgfHwKKwkJCQkJICAgcmV0X3R5cGlkID09IEJZ VEVBT0lEKTsKIAotCVBHX1RSWSgpOwotCXsKLQkJcmVzID0gZnVuYyhvcCwgZWNvbnRleHQs IHJlcywgcmVzbnVsbCwgcCwgZXJyb3IpOworCQkJCXJldHVybiBFeGVjSnNvblN0cmluZ0Nv ZXJjaW9uKCJ7fSIsIDIsIHJldF90eXBpZCwgcmV0X3R5cG1vZCk7CisJCQl9CiAKLQkJLyog Q29tbWl0IHRoZSBpbm5lciB0cmFuc2FjdGlvbiwgcmV0dXJuIHRvIG91dGVyIHhhY3QgY29u dGV4dCAqLwotCQlSZWxlYXNlQ3VycmVudFN1YlRyYW5zYWN0aW9uKCk7Ci0JCU1lbW9yeUNv bnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKLQkJQ3VycmVudFJlc291cmNlT3duZXIgPSBv bGRvd25lcjsKLQl9Ci0JUEdfQ0FUQ0goKTsKLQl7Ci0JCUVycm9yRGF0YSAgKmVkYXRhOwot CQlpbnQJCQllY2F0ZWdvcnk7CisJCWNhc2UgSlNPTl9CRUhBVklPUl9UUlVFOgorCQljYXNl IEpTT05fQkVIQVZJT1JfRkFMU0U6CisJCQl7CisJCQkJRGF0dW0JCXJlczsKKwkJCQlib29s CQlvayA9CisJCQkJCUV4ZWNKc29uQm9vbENvZXJjaW9uKGJlaGF2aW9yLT5idHlwZSA9PSBK U09OX0JFSEFWSU9SX1RSVUUsCisJCQkJCQkJCQkJIHJldF90eXBpZCwgcmV0X3R5cG1vZCwg JnJlcyk7CiAKLQkJLyogU2F2ZSBlcnJvciBpbmZvIGluIG9sZGNvbnRleHQgKi8KLQkJTWVt b3J5Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRleHQpOwotCQllZGF0YSA9IENvcHlFcnJvckRh dGEoKTsKLQkJRmx1c2hFcnJvclN0YXRlKCk7CisJCQkJQXNzZXJ0KG9rKTsgLyogcmV0dXJu aW5nIHR5cGUgbXVzdCBiZSBjaGVja2VkIGluIHBhcnNlciAqLwogCi0JCS8qIEFib3J0IHRo ZSBpbm5lciB0cmFuc2FjdGlvbiAqLwotCQlSb2xsYmFja0FuZFJlbGVhc2VDdXJyZW50U3Vi VHJhbnNhY3Rpb24oKTsKLQkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRleHQpOwot CQlDdXJyZW50UmVzb3VyY2VPd25lciA9IG9sZG93bmVyOworCQkJCXJldHVybiByZXM7CisJ CQl9CiAKLQkJZWNhdGVnb3J5ID0gRVJSQ09ERV9UT19DQVRFR09SWShlZGF0YS0+c3FsZXJy Y29kZSk7CisJCWNhc2UgSlNPTl9CRUhBVklPUl9OVUxMOgorCQljYXNlIEpTT05fQkVIQVZJ T1JfVU5LTk9XTjoKKwkJY2FzZSBKU09OX0JFSEFWSU9SX0VNUFRZOgorCQkJKmlzX251bGwg PSB0cnVlOworCQkJcmV0dXJuIChEYXR1bSkgMDsKIAotCQlpZiAoZWNhdGVnb3J5ICE9IEVS UkNPREVfREFUQV9FWENFUFRJT04gJiYJLyoganNvbnBhdGggYW5kIG90aGVyIGRhdGEKLQkJ CQkJCQkJCQkJCQkgKiBlcnJvcnMgKi8KLQkJCWVjYXRlZ29yeSAhPSBFUlJDT0RFX0lOVEVH UklUWV9DT05TVFJBSU5UX1ZJT0xBVElPTikJLyogZG9tYWluIGVycm9ycyAqLwotCQkJUmVU aHJvd0Vycm9yKGVkYXRhKTsKKwkJY2FzZSBKU09OX0JFSEFWSU9SX0RFRkFVTFQ6CisJCQkv KgorCQkJICogRXhlY3V0ZSBERUZBVUxUIGV4cHJlc3Npb24uCisJCQkgKiBDb2VyY2lvbiBp cyBub3QgbmVlZGVkIGhlcmUsIGJlY2F1c2UgZXhwcmVzc2lvbiBpcworCQkJICogYWxyZWFk eSBjb2VyY2VkIHRvIHRoZSB0YXJnZXQgdHlwZSBieSB0aGUgcGFyc2VyLgorCQkJICovCisJ CQlyZXR1cm4gRXhlY0V2YWxFeHByKGRlZmF1bHRfZXN0YXRlLCBlY29udGV4dCwgaXNfbnVs bCk7CiAKLQkJcmVzID0gKERhdHVtKSAwOwotCQkqZXJyb3IgPSB0cnVlOworCQlkZWZhdWx0 OgorCQkJZWxvZyhFUlJPUiwgInVucmVjb2duaXplZCBTUUwvSlNPTiBiZWhhdmlvciAlZCIs IGJlaGF2aW9yLT5idHlwZSk7CisJCQlyZXR1cm4gKERhdHVtKSAwOwogCX0KLQlQR19FTkRf VFJZKCk7Ci0KLQlyZXR1cm4gcmVzOwogfQogCi0KLXR5cGVkZWYgc3RydWN0Ci17Ci0JSnNv blBhdGggICAqcGF0aDsKLQlib29sCSAgICplcnJvcjsKLQlib29sCQljb2VyY2lvbkluU3Vi dHJhbnM7Ci19IEV4ZWNFdmFsSnNvbkV4cHJDb250ZXh0OwotCiBzdGF0aWMgRGF0dW0KLUV4 ZWNFdmFsSnNvbkV4cHIoRXhwckV2YWxTdGVwICpvcCwgRXhwckNvbnRleHQgKmVjb250ZXh0 LAotCQkJCSBEYXR1bSBpdGVtLCBib29sICpyZXNudWxsLCB2b2lkICpwY3h0LAotCQkJCSBi b29sICplcnJvcikKK0V4ZWNFdmFsSnNvbkV4cHJJbnRlcm5hbChFeHByU3RhdGUgKnN0YXRl LAorCQkJCQkJIEpzb25FeHByU3RhdGUgKmpzZXN0YXRlLCBFeHByQ29udGV4dCAqZWNvbnRl eHQsCisJCQkJCQkgSnNvblBhdGggKnBhdGgsIERhdHVtIGl0ZW0sIGJvb2wgKnJlc251bGws CisJCQkJCQkgYm9vbCAqZXJyb3IpCiB7Ci0JRXhlY0V2YWxKc29uRXhwckNvbnRleHQgKmN4 dCA9IHBjeHQ7Ci0JSnNvblBhdGggICAqcGF0aCA9IGN4dC0+cGF0aDsKLQlKc29uRXhwclN0 YXRlICpqc2VzdGF0ZSA9IG9wLT5kLmpzb25leHByLmpzZXN0YXRlOwogCUpzb25FeHByICAg KmpleHByID0ganNlc3RhdGUtPmpzZXhwcjsKLQlFeHByU3RhdGUgICplc3RhdGUgPSBOVUxM OwogCWJvb2wJCWVtcHR5ID0gZmFsc2U7CiAJRGF0dW0JCXJlcyA9IChEYXR1bSkgMDsKKwlP aWQJCQlyZXRfdHlwaWQgPSBqZXhwci0+cmV0dXJuaW5nLT50eXBpZDsKKwlpbnQzMgkJcmV0 X3R5cG1vZCA9IGpleHByLT5yZXR1cm5pbmctPnR5cG1vZDsKKworCSpyZXNudWxsID0gdHJ1 ZTsKIAogCXN3aXRjaCAoamV4cHItPm9wKQogCXsKQEAgLTUwMjksNzAgKzUyOTUsOTYgQEAg RXhlY0V2YWxKc29uRXhwcihFeHByRXZhbFN0ZXAgKm9wLCBFeHByQ29udGV4dCAqZWNvbnRl eHQsCiAJCQlyZXMgPSBKc29uUGF0aFF1ZXJ5KGl0ZW0sIHBhdGgsIGpleHByLT53cmFwcGVy LCAmZW1wdHksIGVycm9yLAogCQkJCQkJCQlqc2VzdGF0ZS0+YXJncyk7CiAJCQlpZiAoZXJy b3IgJiYgKmVycm9yKQotCQkJewotCQkJCSpyZXNudWxsID0gdHJ1ZTsKIAkJCQlyZXR1cm4g KERhdHVtKSAwOwotCQkJfQorCisJCQlpZiAoZW1wdHkpCisJCQkJYnJlYWs7CisKIAkJCSpy ZXNudWxsID0gIURhdHVtR2V0UG9pbnRlcihyZXMpOwotCQkJYnJlYWs7CisKKwkJCS8qIE92 ZXJyaWRlIGRlZmF1bHQgY29lcmNpb24gaW4gT01JVCBRVU9URVMgY2FzZSAqLworCQkJaWYg KEV4ZWNKc29uUXVlcnlOZWVkc0lPQ29lcmNpb24oamV4cHIsIHJlcywgKnJlc251bGwpKQor CQkJeworCQkJCWNoYXIJICAgKnN0ciA9IEpzb25iVW5xdW90ZShEYXR1bUdldEpzb25iUChy ZXMpKTsKKworCQkJCWlmIChyZXRfdHlwaWQgPT0gSlNPTkJPSUQpCisJCQkJeworCQkJCQly ZXMgPSBqc29uYl9mcm9tX2NzdHJpbmcoc3RyLCBzdHJsZW4oc3RyKSwgZmFsc2UsIGVycm9y KTsKKworCQkJCQlpZiAoZXJyb3IgJiYgKmVycm9yKQorCQkJCQkJcmV0dXJuIChEYXR1bSkg MDsKKworCQkJCQlyZXR1cm4gcmVzOworCQkJCX0KKwkJCQllbHNlIGlmIChyZXRfdHlwaWQg PT0gSlNPTk9JRCkKKwkJCQl7CisJCQkJCXRleHQJICAgKmpzb24gPSBjc3RyaW5nX3RvX3Rl eHQoc3RyKTsKKwkJCQkJSnNvbkxleENvbnRleHQgKmxleDsKKwkJCQkJSnNvblBhcnNlRXJy b3JUeXBlIHJlc3VsdDsKKworCQkJCQkvKiB2YWxpZGF0ZSBpdCAqLworCQkJCQlsZXggPSBt YWtlSnNvbkxleENvbnRleHQoanNvbiwgZmFsc2UpOworCQkJCQlyZXN1bHQgPSBwZ19wYXJz ZV9qc29uKGxleCwgJm51bGxTZW1BY3Rpb24pOworCisJCQkJCWlmIChyZXN1bHQgIT0gSlNP Tl9TVUNDRVNTKQorCQkJCQl7CisJCQkJCQlpZiAoZXJyb3IpCisJCQkJCQl7CisJCQkJCQkJ KmVycm9yID0gdHJ1ZTsKKwkJCQkJCQlyZXR1cm4gKERhdHVtKSAwOworCQkJCQkJfQorCisJ CQkJCQlqc29uX2VyZXBvcnRfZXJyb3IocmVzdWx0LCBsZXgpOworCQkJCQl9CisKKwkJCQkJ cmV0dXJuIFBvaW50ZXJHZXREYXR1bShqc29uKTsKKwkJCQl9CisJCQkJZWxzZSBpZiAocmV0 X3R5cGlkID09IFRFWFRPSUQgfHwKKwkJCQkJCSByZXRfdHlwaWQgPT0gVkFSQ0hBUk9JRCB8 fAorCQkJCQkJIHJldF90eXBpZCA9PSBCUENIQVJPSUQgfHwKKwkJCQkJCSByZXRfdHlwaWQg PT0gQllURUFPSUQpCisJCQkJCXJldHVybiBFeGVjSnNvblN0cmluZ0NvZXJjaW9uKHN0ciwg c3RybGVuKHN0ciksIHJldF90eXBpZCwgcmV0X3R5cG1vZCk7CisJCQl9CisJCQllbHNlIGlm IChyZXRfdHlwaWQgPT0gSlNPTkJPSUQpCisJCQkJcmV0dXJuIHJlczsKKwkJCWVsc2UgaWYg KHJldF90eXBpZCA9PSBKU09OT0lEIHx8IHJldF90eXBpZCA9PSBURVhUT0lEKQorCQkJCXJl dHVybiBKc29uYlBHZXRUZXh0RGF0dW0oRGF0dW1HZXRKc29uYlAocmVzKSk7CisJCQllbHNl IGlmIChyZXRfdHlwaWQgPT0gVkFSQ0hBUk9JRCB8fCByZXRfdHlwaWQgPT0gQlBDSEFST0lE IHx8CisJCQkJCSByZXRfdHlwaWQgPT0gQllURUFPSUQpCisJCQl7CisJCQkJSnNvbmIJICAg KmpiID0gRGF0dW1HZXRKc29uYlAocmVzKTsKKwkJCQljaGFyCSAgICpzdHIgPSBKc29uYlRv Q1N0cmluZyhOVUxMLCAmamItPnJvb3QsIFZBUlNJWkUoamIpKTsKKworCQkJCXJldHVybiBF eGVjSnNvblN0cmluZ0NvZXJjaW9uKHN0ciwgc3RybGVuKHN0ciksIHJldF90eXBpZCwgcmV0 X3R5cG1vZCk7CisJCQl9CisKKwkJCUFzc2VydCgwKTsJLyogdW5zdXBwb3J0ZWQgb3V0cHV0 IHR5cGUgKi8KKwkJCSplcnJvciA9ICpyZXNudWxsID0gdHJ1ZTsKKwkJCXJldHVybiAoRGF0 dW0pIDA7CiAKIAkJY2FzZSBKU09OX1ZBTFVFX09QOgogCQkJewotCQkJCXN0cnVjdCBKc29u Q29lcmNpb25TdGF0ZSAqamNzdGF0ZTsKIAkJCQlKc29uYlZhbHVlICpqYnYgPSBKc29uUGF0 aFZhbHVlKGl0ZW0sIHBhdGgsICZlbXB0eSwgZXJyb3IsCiAJCQkJCQkJCQkJCQlqc2VzdGF0 ZS0+YXJncyk7CiAKIAkJCQlpZiAoZXJyb3IgJiYgKmVycm9yKQogCQkJCQlyZXR1cm4gKERh dHVtKSAwOwogCi0JCQkJaWYgKCFqYnYpCQkvKiBOVUxMIG9yIGVtcHR5ICovCisJCQkJaWYg KGVtcHR5KQogCQkJCQlicmVhazsKIAotCQkJCUFzc2VydCghZW1wdHkpOwotCi0JCQkJKnJl c251bGwgPSBmYWxzZTsKKwkJCQlpZiAoIWpidikKKwkJCQkJcmV0dXJuIChEYXR1bSkgMDsJ LyogTlVMTCAqLwogCi0JCQkJLyogY29lcmNlIHNjYWxhciBpdGVtIHRvIHRoZSBvdXRwdXQg dHlwZSAqLwotCQkJCWlmIChqZXhwci0+cmV0dXJuaW5nLT50eXBpZCA9PSBKU09OT0lEIHx8 Ci0JCQkJCWpleHByLT5yZXR1cm5pbmctPnR5cGlkID09IEpTT05CT0lEKQotCQkJCXsKLQkJ CQkJLyogVXNlIHJlc3VsdCBjb2VyY2lvbiBmcm9tIGpzb25bYl0gdG8gdGhlIG91dHB1dCB0 eXBlICovCi0JCQkJCXJlcyA9IEpzb25iUEdldERhdHVtKEpzb25iVmFsdWVUb0pzb25iKGpi dikpOwotCQkJCQlicmVhazsKLQkJCQl9CisJCQkJQXNzZXJ0KGpidi0+dHlwZSAhPSBqYnZO dWxsKTsKIAotCQkJCS8qIFVzZSBjb2VyY2lvbiBmcm9tIFNRTC9KU09OIGl0ZW0gdHlwZSB0 byB0aGUgb3V0cHV0IHR5cGUgKi8KLQkJCQlyZXMgPSBFeGVjUHJlcGFyZUpzb25JdGVtQ29l cmNpb24oamJ2LAotCQkJCQkJCQkJCQkJICBqc2VzdGF0ZS0+anNleHByLT5yZXR1cm5pbmcs Ci0JCQkJCQkJCQkJCQkgICZqc2VzdGF0ZS0+Y29lcmNpb25zLAotCQkJCQkJCQkJCQkJICAm amNzdGF0ZSk7CisJCQkJcmVzID0gRXhlY0pzb25WYWx1ZUNvZXJjaW9uKGpidiwgcmV0X3R5 cGlkLCByZXRfdHlwbW9kLAorCQkJCQkJCQkJCQlyZXNudWxsLCBlcnJvcik7CiAKLQkJCQlp ZiAoamNzdGF0ZS0+Y29lcmNpb24gJiYKLQkJCQkJKGpjc3RhdGUtPmNvZXJjaW9uLT52aWFf aW8gfHwKLQkJCQkJIGpjc3RhdGUtPmNvZXJjaW9uLT52aWFfcG9wdWxhdGUpKQotCQkJCXsK LQkJCQkJaWYgKGVycm9yKQotCQkJCQl7Ci0JCQkJCQkqZXJyb3IgPSB0cnVlOwotCQkJCQkJ cmV0dXJuIChEYXR1bSkgMDsKLQkJCQkJfQotCi0JCQkJCS8qCi0JCQkJCSAqIENvZXJjaW9u IHZpYSBJL08gbWVhbnMgaGVyZSB0aGF0IHRoZSBjYXN0IHRvIHRoZSB0YXJnZXQKLQkJCQkJ ICogdHlwZSBzaW1wbHkgZG9lcyBub3QgZXhpc3QuCi0JCQkJCSAqLwotCQkJCQllcmVwb3J0 KEVSUk9SLAotCQkJCQkJCShlcnJjb2RlKEVSUkNPREVfU1FMX0pTT05fSVRFTV9DQU5OT1Rf QkVfQ0FTVF9UT19UQVJHRVRfVFlQRSksCi0JCQkJCQkJIGVycm1zZygiU1FML0pTT04gaXRl bSBjYW5ub3QgYmUgY2FzdCB0byB0YXJnZXQgdHlwZSIpKSk7Ci0JCQkJfQotCQkJCWVsc2Ug aWYgKCFqY3N0YXRlLT5lc3RhdGUpCi0JCQkJCXJldHVybiByZXM7IC8qIG5vIGNvZXJjaW9u ICovCisJCQkJaWYgKGVycm9yICYmICplcnJvcikKKwkJCQkJcmV0dXJuIChEYXR1bSkgMDsK IAotCQkJCS8qIGNvZXJjZSB1c2luZyBzcGVjaWZpYyBleHByZXNzaW9uICovCi0JCQkJZXN0 YXRlID0gamNzdGF0ZS0+ZXN0YXRlOwotCQkJCWpzZXN0YXRlLT5jb2VyY2lvbl9leHByLT52 YWx1ZSA9IHJlczsKLQkJCQlqc2VzdGF0ZS0+Y29lcmNpb25fZXhwci0+aXNudWxsID0gKnJl c251bGw7Ci0JCQkJYnJlYWs7CisJCQkJcmV0dXJuIHJlczsKIAkJCX0KIAogCQljYXNlIEpT T05fRVhJU1RTX09QOgpAQCAtNTEwMSwxMTMgKzUzOTMsNjggQEAgRXhlY0V2YWxKc29uRXhw cihFeHByRXZhbFN0ZXAgKm9wLCBFeHByQ29udGV4dCAqZWNvbnRleHQsCiAJCQkJCQkJCQkJ CQkJanNlc3RhdGUtPmFyZ3MsCiAJCQkJCQkJCQkJCQkJZXJyb3IpOwogCi0JCQkJKnJlc251 bGwgPSBlcnJvciAmJiAqZXJyb3I7Ci0JCQkJcmVzID0gQm9vbEdldERhdHVtKGV4aXN0cyk7 Ci0KLQkJCQlpZiAoIWpzZXN0YXRlLT5yZXN1bHRfZXhwcikKLQkJCQkJcmV0dXJuIHJlczsK KwkJCQlpZiAoIWVycm9yIHx8ICEqZXJyb3IpCisJCQkJeworCQkJCQkvKiBTaG91bGQgc3Vj Y2VlZCwgb3V0cHV0IHR5cGUgaXMgY2hlY2tlZCBieSBwYXJzZXIgKi8KKwkJCQkJKHZvaWQp IEV4ZWNKc29uQm9vbENvZXJjaW9uKGV4aXN0cywgcmV0X3R5cGlkLCByZXRfdHlwbW9kLCAm cmVzKTsKKwkJCQkJKnJlc251bGwgPSBmYWxzZTsKKwkJCQl9CiAKLQkJCQkvKiBjb2VyY2Ug dXNpbmcgcmVzdWx0IGV4cHJlc3Npb24gKi8KLQkJCQllc3RhdGUgPSBqc2VzdGF0ZS0+cmVz dWx0X2V4cHI7Ci0JCQkJanNlc3RhdGUtPnJlc19leHByLT52YWx1ZSA9IHJlczsKLQkJCQlq c2VzdGF0ZS0+cmVzX2V4cHItPmlzbnVsbCA9ICpyZXNudWxsOwotCQkJCWJyZWFrOworCQkJ CXJldHVybiByZXM7CiAJCQl9CiAKLQkJY2FzZSBKU09OX1RBQkxFX09QOgotCQkJKnJlc251 bGwgPSBmYWxzZTsKLQkJCXJldHVybiBpdGVtOwotCiAJCWRlZmF1bHQ6CiAJCQllbG9nKEVS Uk9SLCAidW5yZWNvZ25pemVkIFNRTC9KU09OIGV4cHJlc3Npb24gb3AgJWQiLCBqZXhwci0+ b3ApOwogCQkJcmV0dXJuIChEYXR1bSkgMDsKIAl9CiAKLQlpZiAoZW1wdHkpCi0JewotCQlB c3NlcnQoamV4cHItPm9uX2VtcHR5KTsJLyogaXQgaXMgbm90IEpTT05fRVhJU1RTICovCisJ QXNzZXJ0KGVtcHR5KTsKKwlBc3NlcnQoamV4cHItPm9uX2VtcHR5KTsJLyogaXQgaXMgbm90 IEpTT05fRVhJU1RTICovCiAKLQkJaWYgKGpleHByLT5vbl9lbXB0eS0+YnR5cGUgPT0gSlNP Tl9CRUhBVklPUl9FUlJPUikKKwlpZiAoamV4cHItPm9uX2VtcHR5LT5idHlwZSA9PSBKU09O X0JFSEFWSU9SX0VSUk9SKQorCXsKKwkJaWYgKGVycm9yKQogCQl7Ci0JCQlpZiAoZXJyb3Ip Ci0JCQl7Ci0JCQkJKmVycm9yID0gdHJ1ZTsKLQkJCQlyZXR1cm4gKERhdHVtKSAwOwotCQkJ fQotCi0JCQllcmVwb3J0KEVSUk9SLAotCQkJCQkoZXJyY29kZShFUlJDT0RFX05PX1NRTF9K U09OX0lURU0pLAotCQkJCQkgZXJybXNnKCJubyBTUUwvSlNPTiBpdGVtIikpKTsKKwkJCSpl cnJvciA9IHRydWU7CisJCQlyZXR1cm4gKERhdHVtKSAwOwogCQl9CiAKLQkJaWYgKGpleHBy LT5vbl9lbXB0eS0+YnR5cGUgPT0gSlNPTl9CRUhBVklPUl9ERUZBVUxUKQotCi0JCQkvKgot CQkJICogRXhlY3V0ZSBERUZBVUxUIGV4cHJlc3Npb24gYXMgYSBjb2VyY2lvbiBleHByZXNz aW9uLCBiZWNhdXNlCi0JCQkgKiBpdHMgcmVzdWx0IGlzIGFscmVhZHkgY29lcmNlZCB0byB0 aGUgdGFyZ2V0IHR5cGUuCi0JCQkgKi8KLQkJCWVzdGF0ZSA9IGpzZXN0YXRlLT5kZWZhdWx0 X29uX2VtcHR5OwotCQllbHNlCi0JCQkvKiBFeGVjdXRlIE9OIEVNUFRZIGJlaGF2aW9yICov Ci0JCQlyZXMgPSBFeGVjRXZhbEpzb25CZWhhdmlvcihlY29udGV4dCwgamV4cHItPm9uX2Vt cHR5LAotCQkJCQkJCQkJICAganNlc3RhdGUtPmRlZmF1bHRfb25fZW1wdHksCi0JCQkJCQkJ CQkgICByZXNudWxsKTsKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RF X05PX1NRTF9KU09OX0lURU0pLAorCQkJCSBlcnJtc2coIm5vIFNRTC9KU09OIGl0ZW0iKSkp OwogCX0KIAotCXJldHVybiBFeGVjRXZhbEpzb25FeHByU3VidHJhbnMoRXhlY0V2YWxKc29u RXhwckNvZXJjaW9uLCBvcCwgZWNvbnRleHQsCi0JCQkJCQkJCQlyZXMsIHJlc251bGwsIGVz dGF0ZSwgZXJyb3IsCi0JCQkJCQkJCQljeHQtPmNvZXJjaW9uSW5TdWJ0cmFucyk7Ci19Ci0K LWJvb2wKLUV4ZWNFdmFsSnNvbk5lZWRzU3ViVHJhbnNhY3Rpb24oSnNvbkV4cHIgKmpzZXhw ciwKLQkJCQkJCQkJc3RydWN0IEpzb25Db2VyY2lvbnNTdGF0ZSAqY29lcmNpb25zKQotewot CWlmIChqc2V4cHItPm9uX2Vycm9yLT5idHlwZSA9PSBKU09OX0JFSEFWSU9SX0VSUk9SKQot CQlyZXR1cm4gZmFsc2U7Ci0KLQlpZiAoanNleHByLT5vcCA9PSBKU09OX0VYSVNUU19PUCAm JiAhanNleHByLT5yZXN1bHRfY29lcmNpb24pCi0JCXJldHVybiBmYWxzZTsKLQotCWlmICgh Y29lcmNpb25zKQotCQlyZXR1cm4gdHJ1ZTsKLQotCXJldHVybiBmYWxzZTsKKwkvKiBFeGVj dXRlIE9OIEVNUFRZIGJlaGF2aW9yICovCisJcmV0dXJuIEV4ZWNFdmFsSnNvbkJlaGF2aW9y KGVjb250ZXh0LCBqZXhwci0+b25fZW1wdHksCisJCQkJCQkJCWpzZXN0YXRlLT5kZWZhdWx0 X29uX2VtcHR5LAorCQkJCQkJCQlyZXRfdHlwaWQsIHJldF90eXBtb2QsIHJlc251bGwpOwog fQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCi0gKgkJRXhlY0V2YWxKc29uCisgKgkJRXhlY0V2YWxKc29u RXhwcgogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiB2b2lkCi1FeGVjRXZhbEpzb24oRXhwclN0YXRl ICpzdGF0ZSwgRXhwckV2YWxTdGVwICpvcCwgRXhwckNvbnRleHQgKmVjb250ZXh0KQorRXhl Y0V2YWxKc29uRXhwcihFeHByU3RhdGUgKnN0YXRlLCBFeHByRXZhbFN0ZXAgKm9wLCBFeHBy Q29udGV4dCAqZWNvbnRleHQpCiB7Ci0JRXhlY0V2YWxKc29uRXhwckNvbnRleHQgY3h0Owog CUpzb25FeHByU3RhdGUgKmpzZXN0YXRlID0gb3AtPmQuanNvbmV4cHIuanNlc3RhdGU7CiAJ SnNvbkV4cHIgICAqamV4cHIgPSBqc2VzdGF0ZS0+anNleHByOwogCURhdHVtCQlpdGVtOwot CURhdHVtCQlyZXMgPSAoRGF0dW0pIDA7CisJRGF0dW0JCXJlczsKIAlKc29uUGF0aCAgICpw YXRoOwogCUxpc3RDZWxsICAgKmxjOwogCWJvb2wJCWVycm9yID0gZmFsc2U7Ci0JYm9vbAkJ bmVlZFN1YnRyYW5zOwogCWJvb2wJCXRocm93RXJyb3JzID0gamV4cHItPm9uX2Vycm9yLT5i dHlwZSA9PSBKU09OX0JFSEFWSU9SX0VSUk9SOwogCi0JKm9wLT5yZXNudWxsID0gdHJ1ZTsJ CS8qIHVudGlsIHdlIGdldCBhIHJlc3VsdCAqLwotCSpvcC0+cmVzdmFsdWUgPSAoRGF0dW0p IDA7Ci0KLQlpZiAoanNlc3RhdGUtPmZvcm1hdHRlZF9leHByLT5pc251bGwgfHwganNlc3Rh dGUtPnBhdGhzcGVjLT5pc251bGwpCisJaWYgKGpzZXN0YXRlLT5mb3JtYXR0ZWRfZXhwci5p c251bGwgfHwganNlc3RhdGUtPnBhdGhzcGVjLmlzbnVsbCkKIAl7Ci0JCS8qIGV4ZWN1dGUg ZG9tYWluIGNoZWNrcyBmb3IgTlVMTHMgKi8KLQkJKHZvaWQpIEV4ZWNFdmFsSnNvbkV4cHJD b2VyY2lvbihvcCwgZWNvbnRleHQsIHJlcywgb3AtPnJlc251bGwsCi0JCQkJCQkJCQkJTlVM TCwgTlVMTCk7Ci0KLQkJQXNzZXJ0KCpvcC0+cmVzbnVsbCk7CisJCSpvcC0+cmVzbnVsbCA9 IHRydWU7CisJCSpvcC0+cmVzdmFsdWUgPSAoRGF0dW0pIDA7CiAJCXJldHVybjsKIAl9CiAK LQlpdGVtID0ganNlc3RhdGUtPmZvcm1hdHRlZF9leHByLT52YWx1ZTsKLQlwYXRoID0gRGF0 dW1HZXRKc29uUGF0aFAoanNlc3RhdGUtPnBhdGhzcGVjLT52YWx1ZSk7CisJaXRlbSA9IGpz ZXN0YXRlLT5mb3JtYXR0ZWRfZXhwci52YWx1ZTsKKwlwYXRoID0gRGF0dW1HZXRKc29uUGF0 aFAoanNlc3RhdGUtPnBhdGhzcGVjLnZhbHVlKTsKIAogCS8qIHJlc2V0IEpTT04gcGF0aCB2 YXJpYWJsZSBjb250ZXh0cyAqLwogCWZvcmVhY2gobGMsIGpzZXN0YXRlLT5hcmdzKQpAQCAt NTIxOCwyOSArNTQ2NSwyMCBAQCBFeGVjRXZhbEpzb24oRXhwclN0YXRlICpzdGF0ZSwgRXhw ckV2YWxTdGVwICpvcCwgRXhwckNvbnRleHQgKmVjb250ZXh0KQogCQl2YXItPmV2YWx1YXRl ZCA9IGZhbHNlOwogCX0KIAotCW5lZWRTdWJ0cmFucyA9IEV4ZWNFdmFsSnNvbk5lZWRzU3Vi VHJhbnNhY3Rpb24oamV4cHIsICZqc2VzdGF0ZS0+Y29lcmNpb25zKTsKLQotCWN4dC5wYXRo ID0gcGF0aDsKLQljeHQuZXJyb3IgPSB0aHJvd0Vycm9ycyA/IE5VTEwgOiAmZXJyb3I7Ci0J Y3h0LmNvZXJjaW9uSW5TdWJ0cmFucyA9ICFuZWVkU3VidHJhbnMgJiYgIXRocm93RXJyb3Jz OwotCUFzc2VydCghbmVlZFN1YnRyYW5zIHx8IGN4dC5lcnJvcik7Ci0KLQlyZXMgPSBFeGVj RXZhbEpzb25FeHByU3VidHJhbnMoRXhlY0V2YWxKc29uRXhwciwgb3AsIGVjb250ZXh0LCBp dGVtLAotCQkJCQkJCQkgICBvcC0+cmVzbnVsbCwgJmN4dCwgY3h0LmVycm9yLAotCQkJCQkJ CQkgICBuZWVkU3VidHJhbnMpOworCXJlcyA9IEV4ZWNFdmFsSnNvbkV4cHJJbnRlcm5hbChz dGF0ZSwganNlc3RhdGUsIGVjb250ZXh0LAorCQkJCQkJCQkgICBwYXRoLCBpdGVtLCBvcC0+ cmVzbnVsbCwKKwkJCQkJCQkJICAgdGhyb3dFcnJvcnMgPyBOVUxMIDogJmVycm9yKTsKIAog CWlmIChlcnJvcikKIAl7CisJCUFzc2VydCghdGhyb3dFcnJvcnMpOworCiAJCS8qIEV4ZWN1 dGUgT04gRVJST1IgYmVoYXZpb3IgKi8KIAkJcmVzID0gRXhlY0V2YWxKc29uQmVoYXZpb3Io ZWNvbnRleHQsIGpleHByLT5vbl9lcnJvciwKIAkJCQkJCQkJICAganNlc3RhdGUtPmRlZmF1 bHRfb25fZXJyb3IsCisJCQkJCQkJCSAgIGpleHByLT5yZXR1cm5pbmctPnR5cGlkLAorCQkJ CQkJCQkgICBqZXhwci0+cmV0dXJuaW5nLT50eXBtb2QsCiAJCQkJCQkJCSAgIG9wLT5yZXNu dWxsKTsKLQotCQkvKiByZXN1bHQgaXMgYWxyZWFkeSBjb2VyY2VkIGluIERFRkFVTFQgYmVo YXZpb3IgY2FzZSAqLwotCQlpZiAoamV4cHItPm9uX2Vycm9yLT5idHlwZSAhPSBKU09OX0JF SEFWSU9SX0RFRkFVTFQpCi0JCQlyZXMgPSBFeGVjRXZhbEpzb25FeHByQ29lcmNpb24ob3As IGVjb250ZXh0LCByZXMsCi0JCQkJCQkJCQkJICAgb3AtPnJlc251bGwsCi0JCQkJCQkJCQkJ ICAgTlVMTCwgTlVMTCk7CiAJfQogCiAJKm9wLT5yZXN2YWx1ZSA9IHJlczsKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL2ppdC9sbHZtL2xsdm1qaXRfZXhwci5jIGIvc3JjL2JhY2tlbmQv aml0L2xsdm0vbGx2bWppdF9leHByLmMKaW5kZXggYmQzOTY1MTQzZGEuLmZkNzI2MzBmNWU2 IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9qaXQvbGx2bS9sbHZtaml0X2V4cHIuYworKysg Yi9zcmMvYmFja2VuZC9qaXQvbGx2bS9sbHZtaml0X2V4cHIuYwpAQCAtMjQwOCw3ICsyNDA4 LDcgQEAgbGx2bV9jb21waWxlX2V4cHIoRXhwclN0YXRlICpzdGF0ZSkKIAkJCQlicmVhazsK IAogCQkJY2FzZSBFRU9QX0pTT05FWFBSOgotCQkJCWJ1aWxkX0V2YWxYRnVuYyhiLCBtb2Qs ICJFeGVjRXZhbEpzb24iLAorCQkJCWJ1aWxkX0V2YWxYRnVuYyhiLCBtb2QsICJFeGVjRXZh bEpzb25FeHByIiwKIAkJCQkJCQkJdl9zdGF0ZSwgb3AsIHZfZWNvbnRleHQpOwogCQkJCUxM Vk1CdWlsZEJyKGIsIG9wYmxvY2tzW29wbm8gKyAxXSk7CiAJCQkJYnJlYWs7CmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9qaXQvbGx2bS9sbHZtaml0X3R5cGVzLmMgYi9zcmMvYmFja2Vu ZC9qaXQvbGx2bS9sbHZtaml0X3R5cGVzLmMKaW5kZXggMzczNDcxYWQyN2YuLjM3ZmU2NDY1 NGI2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9qaXQvbGx2bS9sbHZtaml0X3R5cGVzLmMK KysrIGIvc3JjL2JhY2tlbmQvaml0L2xsdm0vbGx2bWppdF90eXBlcy5jCkBAIC0xMzUsNyAr MTM1LDcgQEAgdm9pZAkgICAqcmVmZXJlbmNlZF9mdW5jdGlvbnNbXSA9CiAJRXhlY0V2YWxY bWxFeHByLAogCUV4ZWNFdmFsSnNvbkNvbnN0cnVjdG9yLAogCUV4ZWNFdmFsSnNvbklzUHJl ZGljYXRlLAotCUV4ZWNFdmFsSnNvbiwKKwlFeGVjRXZhbEpzb25FeHByLAogCU1ha2VFeHBh bmRlZE9iamVjdFJlYWRPbmx5SW50ZXJuYWwsCiAJc2xvdF9nZXRtaXNzaW5nYXR0cnMsCiAJ c2xvdF9nZXRzb21lYXR0cnNfaW50LApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvbm9kZXMv bm9kZUZ1bmNzLmMgYi9zcmMvYmFja2VuZC9ub2Rlcy9ub2RlRnVuY3MuYwppbmRleCBjMzM0 ZGFhZTM5Mi4uZTAyNDBiZWVlYWIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL25vZGVzL25v ZGVGdW5jcy5jCisrKyBiL3NyYy9iYWNrZW5kL25vZGVzL25vZGVGdW5jcy5jCkBAIC0yNjYs OSArMjY2LDYgQEAgZXhwclR5cGUoY29uc3QgTm9kZSAqZXhwcikKIAkJY2FzZSBUX0pzb25F eHByOgogCQkJdHlwZSA9ICgoY29uc3QgSnNvbkV4cHIgKikgZXhwciktPnJldHVybmluZy0+ dHlwaWQ7CiAJCQlicmVhazsKLQkJY2FzZSBUX0pzb25Db2VyY2lvbjoKLQkJCXR5cGUgPSBl eHByVHlwZSgoKGNvbnN0IEpzb25Db2VyY2lvbiAqKSBleHByKS0+ZXhwcik7Ci0JCQlicmVh azsKIAkJZGVmYXVsdDoKIAkJCWVsb2coRVJST1IsICJ1bnJlY29nbml6ZWQgbm9kZSB0eXBl OiAlZCIsIChpbnQpIG5vZGVUYWcoZXhwcikpOwogCQkJdHlwZSA9IEludmFsaWRPaWQ7CS8q IGtlZXAgY29tcGlsZXIgcXVpZXQgKi8KQEAgLTUwNyw4ICs1MDQsNiBAQCBleHByVHlwbW9k KGNvbnN0IE5vZGUgKmV4cHIpCiAJCQlyZXR1cm4gKChjb25zdCBKc29uQ29uc3RydWN0b3JF eHByICopIGV4cHIpLT5yZXR1cm5pbmctPnR5cG1vZDsKIAkJY2FzZSBUX0pzb25FeHByOgog CQkJcmV0dXJuICgoSnNvbkV4cHIgKikgZXhwciktPnJldHVybmluZy0+dHlwbW9kOwotCQlj YXNlIFRfSnNvbkNvZXJjaW9uOgotCQkJcmV0dXJuIGV4cHJUeXBtb2QoKChjb25zdCBKc29u Q29lcmNpb24gKikgZXhwciktPmV4cHIpOwogCQlkZWZhdWx0OgogCQkJYnJlYWs7CiAJfQpA QCAtMTAxMCwxNCArMTAwNSwxMiBAQCBleHByQ29sbGF0aW9uKGNvbnN0IE5vZGUgKmV4cHIp CiAJCWNhc2UgVF9Kc29uRXhwcjoKIAkJCXsKIAkJCQlKc29uRXhwciAgICpqZXhwciA9IChK c29uRXhwciAqKSBleHByOwotCQkJCUpzb25Db2VyY2lvbiAqY29lcmNpb24gPSBqZXhwci0+ cmVzdWx0X2NvZXJjaW9uOwogCi0JCQkJaWYgKCFjb2VyY2lvbikKLQkJCQkJY29sbCA9IElu dmFsaWRPaWQ7Ci0JCQkJZWxzZSBpZiAoY29lcmNpb24tPmV4cHIpCi0JCQkJCWNvbGwgPSBl eHByQ29sbGF0aW9uKGNvZXJjaW9uLT5leHByKTsKLQkJCQllbHNlIGlmIChjb2VyY2lvbi0+ dmlhX2lvIHx8IGNvZXJjaW9uLT52aWFfcG9wdWxhdGUpCi0JCQkJCWNvbGwgPSBjb2VyY2lv bi0+Y29sbGF0aW9uOworCQkJCWlmIChqZXhwci0+cmV0dXJuaW5nLT50eXBpZCA9PSBURVhU T0lEIHx8CisJCQkJCWpleHByLT5yZXR1cm5pbmctPnR5cGlkID09IENIQVJPSUQgfHwKKwkJ CQkJamV4cHItPnJldHVybmluZy0+dHlwaWQgPT0gVkFSQ0hBUk9JRCB8fAorCQkJCQlqZXhw ci0+cmV0dXJuaW5nLT50eXBpZCA9PSBCUENIQVJPSUQpCisJCQkJCWNvbGwgPSBqZXhwci0+ Y29sbGF0aW9uOwogCQkJCWVsc2UKIAkJCQkJY29sbCA9IEludmFsaWRPaWQ7CiAJCQl9CkBA IC0xMjU1LDE0ICsxMjQ4LDEyIEBAIGV4cHJTZXRDb2xsYXRpb24oTm9kZSAqZXhwciwgT2lk IGNvbGxhdGlvbikKIAkJY2FzZSBUX0pzb25FeHByOgogCQkJewogCQkJCUpzb25FeHByICAg KmpleHByID0gKEpzb25FeHByICopIGV4cHI7Ci0JCQkJSnNvbkNvZXJjaW9uICpjb2VyY2lv biA9IGpleHByLT5yZXN1bHRfY29lcmNpb247CiAKLQkJCQlpZiAoIWNvZXJjaW9uKQotCQkJ CQlBc3NlcnQoIU9pZElzVmFsaWQoY29sbGF0aW9uKSk7Ci0JCQkJZWxzZSBpZiAoY29lcmNp b24tPmV4cHIpCi0JCQkJCWV4cHJTZXRDb2xsYXRpb24oY29lcmNpb24tPmV4cHIsIGNvbGxh dGlvbik7Ci0JCQkJZWxzZSBpZiAoY29lcmNpb24tPnZpYV9pbyB8fCBjb2VyY2lvbi0+dmlh X3BvcHVsYXRlKQotCQkJCQljb2VyY2lvbi0+Y29sbGF0aW9uID0gY29sbGF0aW9uOworCQkJ CWlmIChqZXhwci0+cmV0dXJuaW5nLT50eXBpZCA9PSBURVhUT0lEIHx8CisJCQkJCWpleHBy LT5yZXR1cm5pbmctPnR5cGlkID09IENIQVJPSUQgfHwKKwkJCQkJamV4cHItPnJldHVybmlu Zy0+dHlwaWQgPT0gVkFSQ0hBUk9JRCB8fAorCQkJCQlqZXhwci0+cmV0dXJuaW5nLT50eXBp ZCA9PSBCUENIQVJPSUQpCisJCQkJCWpleHByLT5jb2xsYXRpb24gPSBjb2xsYXRpb247CiAJ CQkJZWxzZQogCQkJCQlBc3NlcnQoIU9pZElzVmFsaWQoY29sbGF0aW9uKSk7CiAJCQl9CkBA IC0yNTA3LDggKzI0OTgsNiBAQCBleHByZXNzaW9uX3RyZWVfd2Fsa2VyKE5vZGUgKm5vZGUs CiAKIAkJCQlpZiAod2Fsa2VyKGpleHByLT5mb3JtYXR0ZWRfZXhwciwgY29udGV4dCkpCiAJ CQkJCXJldHVybiB0cnVlOwotCQkJCWlmICh3YWxrZXIoamV4cHItPnJlc3VsdF9jb2VyY2lv biwgY29udGV4dCkpCi0JCQkJCXJldHVybiB0cnVlOwogCQkJCWlmICh3YWxrZXIoamV4cHIt PnBhc3NpbmdfdmFsdWVzLCBjb250ZXh0KSkKIAkJCQkJcmV0dXJuIHRydWU7CiAJCQkJLyog d2UgYXNzdW1lIHdhbGtlciBkb2Vzbid0IGNhcmUgYWJvdXQgcGFzc2luZ19uYW1lcyAqLwpA QCAtMjUxNywzNiArMjUwNiw2IEBAIGV4cHJlc3Npb25fdHJlZV93YWxrZXIoTm9kZSAqbm9k ZSwKIAkJCQkJcmV0dXJuIHRydWU7CiAJCQkJaWYgKHdhbGtlcihqZXhwci0+b25fZXJyb3It PmRlZmF1bHRfZXhwciwgY29udGV4dCkpCiAJCQkJCXJldHVybiB0cnVlOwotCQkJCWlmICh3 YWxrZXIoamV4cHItPmNvZXJjaW9ucywgY29udGV4dCkpCi0JCQkJCXJldHVybiB0cnVlOwot CQkJfQotCQkJYnJlYWs7Ci0JCWNhc2UgVF9Kc29uQ29lcmNpb246Ci0JCQlyZXR1cm4gd2Fs a2VyKCgoSnNvbkNvZXJjaW9uICopIG5vZGUpLT5leHByLCBjb250ZXh0KTsKLQkJY2FzZSBU X0pzb25JdGVtQ29lcmNpb25zOgotCQkJewotCQkJCUpzb25JdGVtQ29lcmNpb25zICpjb2Vy Y2lvbnMgPSAoSnNvbkl0ZW1Db2VyY2lvbnMgKikgbm9kZTsKLQotCQkJCWlmICh3YWxrZXIo Y29lcmNpb25zLT5udWxsLCBjb250ZXh0KSkKLQkJCQkJcmV0dXJuIHRydWU7Ci0JCQkJaWYg KHdhbGtlcihjb2VyY2lvbnMtPnN0cmluZywgY29udGV4dCkpCi0JCQkJCXJldHVybiB0cnVl OwotCQkJCWlmICh3YWxrZXIoY29lcmNpb25zLT5udW1lcmljLCBjb250ZXh0KSkKLQkJCQkJ cmV0dXJuIHRydWU7Ci0JCQkJaWYgKHdhbGtlcihjb2VyY2lvbnMtPmJvb2xlYW4sIGNvbnRl eHQpKQotCQkJCQlyZXR1cm4gdHJ1ZTsKLQkJCQlpZiAod2Fsa2VyKGNvZXJjaW9ucy0+ZGF0 ZSwgY29udGV4dCkpCi0JCQkJCXJldHVybiB0cnVlOwotCQkJCWlmICh3YWxrZXIoY29lcmNp b25zLT50aW1lLCBjb250ZXh0KSkKLQkJCQkJcmV0dXJuIHRydWU7Ci0JCQkJaWYgKHdhbGtl cihjb2VyY2lvbnMtPnRpbWV0eiwgY29udGV4dCkpCi0JCQkJCXJldHVybiB0cnVlOwotCQkJ CWlmICh3YWxrZXIoY29lcmNpb25zLT50aW1lc3RhbXAsIGNvbnRleHQpKQotCQkJCQlyZXR1 cm4gdHJ1ZTsKLQkJCQlpZiAod2Fsa2VyKGNvZXJjaW9ucy0+dGltZXN0YW1wdHosIGNvbnRl eHQpKQotCQkJCQlyZXR1cm4gdHJ1ZTsKLQkJCQlpZiAod2Fsa2VyKGNvZXJjaW9ucy0+Y29t cG9zaXRlLCBjb250ZXh0KSkKLQkJCQkJcmV0dXJuIHRydWU7CiAJCQl9CiAJCQlicmVhazsK IAkJZGVmYXVsdDoKQEAgLTM1NzYsNyArMzUzNSw2IEBAIGV4cHJlc3Npb25fdHJlZV9tdXRh dG9yKE5vZGUgKm5vZGUsCiAJCQkJRkxBVENPUFkobmV3bm9kZSwgamV4cHIsIEpzb25FeHBy KTsKIAkJCQlNVVRBVEUobmV3bm9kZS0+cGF0aF9zcGVjLCBqZXhwci0+cGF0aF9zcGVjLCBO b2RlICopOwogCQkJCU1VVEFURShuZXdub2RlLT5mb3JtYXR0ZWRfZXhwciwgamV4cHItPmZv cm1hdHRlZF9leHByLCBOb2RlICopOwotCQkJCU1VVEFURShuZXdub2RlLT5yZXN1bHRfY29l cmNpb24sIGpleHByLT5yZXN1bHRfY29lcmNpb24sIEpzb25Db2VyY2lvbiAqKTsKIAkJCQlN VVRBVEUobmV3bm9kZS0+cGFzc2luZ192YWx1ZXMsIGpleHByLT5wYXNzaW5nX3ZhbHVlcywg TGlzdCAqKTsKIAkJCQkvKiBhc3N1bWUgbXV0YXRvciBkb2VzIG5vdCBjYXJlIGFib3V0IHBh c3NpbmdfbmFtZXMgKi8KIAkJCQlpZiAobmV3bm9kZS0+b25fZW1wdHkpCkBAIC0zNTg3LDM1 ICszNTQ1LDYgQEAgZXhwcmVzc2lvbl90cmVlX211dGF0b3IoTm9kZSAqbm9kZSwKIAkJCQly ZXR1cm4gKE5vZGUgKikgbmV3bm9kZTsKIAkJCX0KIAkJCWJyZWFrOwotCQljYXNlIFRfSnNv bkNvZXJjaW9uOgotCQkJewotCQkJCUpzb25Db2VyY2lvbiAqY29lcmNpb24gPSAoSnNvbkNv ZXJjaW9uICopIG5vZGU7Ci0JCQkJSnNvbkNvZXJjaW9uICpuZXdub2RlOwotCi0JCQkJRkxB VENPUFkobmV3bm9kZSwgY29lcmNpb24sIEpzb25Db2VyY2lvbik7Ci0JCQkJTVVUQVRFKG5l d25vZGUtPmV4cHIsIGNvZXJjaW9uLT5leHByLCBOb2RlICopOwotCQkJCXJldHVybiAoTm9k ZSAqKSBuZXdub2RlOwotCQkJfQotCQkJYnJlYWs7Ci0JCWNhc2UgVF9Kc29uSXRlbUNvZXJj aW9uczoKLQkJCXsKLQkJCQlKc29uSXRlbUNvZXJjaW9ucyAqY29lcmNpb25zID0gKEpzb25J dGVtQ29lcmNpb25zICopIG5vZGU7Ci0JCQkJSnNvbkl0ZW1Db2VyY2lvbnMgKm5ld25vZGU7 Ci0KLQkJCQlGTEFUQ09QWShuZXdub2RlLCBjb2VyY2lvbnMsIEpzb25JdGVtQ29lcmNpb25z KTsKLQkJCQlNVVRBVEUobmV3bm9kZS0+bnVsbCwgY29lcmNpb25zLT5udWxsLCBKc29uQ29l cmNpb24gKik7Ci0JCQkJTVVUQVRFKG5ld25vZGUtPnN0cmluZywgY29lcmNpb25zLT5zdHJp bmcsIEpzb25Db2VyY2lvbiAqKTsKLQkJCQlNVVRBVEUobmV3bm9kZS0+bnVtZXJpYywgY29l cmNpb25zLT5udW1lcmljLCBKc29uQ29lcmNpb24gKik7Ci0JCQkJTVVUQVRFKG5ld25vZGUt PmJvb2xlYW4sIGNvZXJjaW9ucy0+Ym9vbGVhbiwgSnNvbkNvZXJjaW9uICopOwotCQkJCU1V VEFURShuZXdub2RlLT5kYXRlLCBjb2VyY2lvbnMtPmRhdGUsIEpzb25Db2VyY2lvbiAqKTsK LQkJCQlNVVRBVEUobmV3bm9kZS0+dGltZSwgY29lcmNpb25zLT50aW1lLCBKc29uQ29lcmNp b24gKik7Ci0JCQkJTVVUQVRFKG5ld25vZGUtPnRpbWV0eiwgY29lcmNpb25zLT50aW1ldHos IEpzb25Db2VyY2lvbiAqKTsKLQkJCQlNVVRBVEUobmV3bm9kZS0+dGltZXN0YW1wLCBjb2Vy Y2lvbnMtPnRpbWVzdGFtcCwgSnNvbkNvZXJjaW9uICopOwotCQkJCU1VVEFURShuZXdub2Rl LT50aW1lc3RhbXB0eiwgY29lcmNpb25zLT50aW1lc3RhbXB0eiwgSnNvbkNvZXJjaW9uICop OwotCQkJCU1VVEFURShuZXdub2RlLT5jb21wb3NpdGUsIGNvZXJjaW9ucy0+Y29tcG9zaXRl LCBKc29uQ29lcmNpb24gKik7Ci0JCQkJcmV0dXJuIChOb2RlICopIG5ld25vZGU7Ci0JCQl9 Ci0JCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCWVsb2coRVJST1IsICJ1bnJlY29nbml6ZWQg bm9kZSB0eXBlOiAlZCIsCiAJCQkJIChpbnQpIG5vZGVUYWcobm9kZSkpOwpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvY2xhdXNlcy5jIGIvc3JjL2JhY2tlbmQv b3B0aW1pemVyL3V0aWwvY2xhdXNlcy5jCmluZGV4IDUzM2RmODZmZjc3Li42ZWI5MjM4OTJm NCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvY2xhdXNlcy5jCisr KyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL2NsYXVzZXMuYwpAQCAtNDExLDYgKzQx MSwyNiBAQCBjb250YWluX211dGFibGVfZnVuY3Rpb25zX3dhbGtlcihOb2RlICpub2RlLCB2 b2lkICpjb250ZXh0KQogCXsKIAkJSnNvbkV4cHIgICAqamV4cHIgPSBjYXN0Tm9kZShKc29u RXhwciwgbm9kZSk7CiAJCUNvbnN0CSAgICpjbnN0OworCQlib29sCQlyZXR1cm5zX2RhdGV0 aW1lOworCisJCS8qCisJCSAqIElucHV0IGZ1Y3Rpb25zIGZvciBkYXRldGltZSB0eXBlcyBh cmUgc3RhYmxlLiAgVGhleSBjYW4gYmUKKwkJICogY2FsbGVkIGluIEpTT05fVkFMVUUoKSwg d2hlbiB0aGUgcmVzdWx0aW5nIFNRTC9KU09OIGlzIGEKKwkJICogc3RyaW5nLgorCQkgKi8K KwkJaWYgKGpleHByLT5yZXR1cm5pbmctPnR5cGlkID09IERBVEVPSUQgfHwKKwkJCWpleHBy LT5yZXR1cm5pbmctPnR5cGlkID09IFRJTUVPSUQgfHwKKwkJCWpleHByLT5yZXR1cm5pbmct PnR5cGlkID09IFRJTUVUWk9JRCB8fAorCQkJamV4cHItPnJldHVybmluZy0+dHlwaWQgPT0g VElNRVNUQU1QT0lEIHx8CisJCQlqZXhwci0+cmV0dXJuaW5nLT50eXBpZCA9PSBUSU1FU1RB TVBUWk9JRCkKKwkJCXJldHVybiB0cnVlOworCisJCS8qCisJCSAqIHBnX2NvbnZlcnRfdG8o KSwgd2hpY2ggaXMgdXNlZCBmb3IgaW1wbGVtZW50YXRpb24gb2YKKwkJICogSlNPTl9RVUVS WShSRVRVUk5JTkcgYnl0ZWEgRk9STUFUIEpTT04pLCBpcyBzdGFibGUuCisJCSAqLworCQlp ZiAoamV4cHItPnJldHVybmluZy0+dHlwaWQgPT0gQllURUFPSUQpCisJCQlyZXR1cm4gdHJ1 ZTsKIAogCQlpZiAoIUlzQShqZXhwci0+cGF0aF9zcGVjLCBDb25zdCkpCiAJCQlyZXR1cm4g dHJ1ZTsKQEAgLTQyMSw4ICs0NDEsMzIgQEAgY29udGFpbl9tdXRhYmxlX2Z1bmN0aW9uc193 YWxrZXIoTm9kZSAqbm9kZSwgdm9pZCAqY29udGV4dCkKIAkJaWYgKGNuc3QtPmNvbnN0aXNu dWxsKQogCQkJcmV0dXJuIGZhbHNlOwogCi0JCXJldHVybiBqc3BJc011dGFibGUoRGF0dW1H ZXRKc29uUGF0aFAoY25zdC0+Y29uc3R2YWx1ZSksCi0JCQkJCQkJamV4cHItPnBhc3Npbmdf bmFtZXMsIGpleHByLT5wYXNzaW5nX3ZhbHVlcyk7CisJCWlmIChqc3BJc011dGFibGUoRGF0 dW1HZXRKc29uUGF0aFAoY25zdC0+Y29uc3R2YWx1ZSksCisJCQkJCQkgamV4cHItPnBhc3Np bmdfbmFtZXMsIGpleHByLT5wYXNzaW5nX3ZhbHVlcywKKwkJCQkJCSAmcmV0dXJuc19kYXRl dGltZSkpCisJCQlyZXR1cm4gdHJ1ZTsKKworCQlpZiAocmV0dXJuc19kYXRldGltZSAmJiBq ZXhwci0+b3AgPT0gSlNPTl9WQUxVRV9PUCkKKwkJeworCQkJLyoKKwkJCSAqIFNvbWUgZGF0 ZXRpbWUgdHlwZXMgaGF2ZSBtdXRhYmxlIG91dHB1dCBmdW5jdGlvbnMsCisJCQkgKiBzbyBp ZiByZXR1cm5pbmcgc3RyaW5nIHR5cGVzIHdob2xlIGV4cHJlc3Npb24gaXMgbXV0YWJsZS4K KwkJCSAqIFRPRE8gY2hlY2sgaW5kaXZpZHVhbCBkYXRldGltZSB0eXBlIGlmIGl0IGlzIGtu b3duLgorCQkJICoKKwkJCSAqIE90aGVyIG5vbi1KU09OIG91dHB1dCB0eXBlcyBoYXZlIG5v IGNvbnZlcnNpb24gZnJvbQorCQkJICogZGF0ZXRpbWUgdHlwZXMuCisJCQkgKgorCQkJICog RGF0ZXRpbWUgcmV0dXJuaW5nIHR5cGVzIHdlcmUgY2hlY2tlZCBhYm92ZSwgbm8gbmVlZCB0 bworCQkJICogY2hlY2sgdGhlbSBoZXJlLiAgQnV0IGNvbnZlcnNpb24gYmV0d2VlbiB0aGVt IGFsc28gY2FuCisJCQkgKiBiZSBtdXRhYmxlLgorCQkJICovCisJCQlpZiAoamV4cHItPnJl dHVybmluZy0+dHlwaWQgPT0gVEVYVE9JRCB8fAorCQkJCWpleHByLT5yZXR1cm5pbmctPnR5 cGlkID09IFZBUkNIQVJPSUQgfHwKKwkJCQlqZXhwci0+cmV0dXJuaW5nLT50eXBpZCA9PSBC UENIQVJPSUQpCisJCQkJcmV0dXJuIHRydWU7CisJCX0KKworCQlyZXR1cm4gZmFsc2U7CiAJ fQogCiAJaWYgKElzQShub2RlLCBTUUxWYWx1ZUZ1bmN0aW9uKSkKQEAgLTg5NiwxOCArOTQw LDYgQEAgbWF4X3BhcmFsbGVsX2hhemFyZF93YWxrZXIoTm9kZSAqbm9kZSwgbWF4X3BhcmFs bGVsX2hhemFyZF9jb250ZXh0ICpjb250ZXh0KQogCQkJCQkJCQkgY29udGV4dCwgMCk7CiAJ fQogCi0JLyogSnNvbkV4cHIgaXMgcGFyYWxsZWwtdW5zYWZlIGlmIHN1YnRyYW5zYWN0aW9u cyBjYW4gYmUgdXNlZC4gKi8KLQllbHNlIGlmIChJc0Eobm9kZSwgSnNvbkV4cHIpKQotCXsK LQkJSnNvbkV4cHIgICAqanNleHByID0gKEpzb25FeHByICopIG5vZGU7Ci0KLQkJaWYgKEV4 ZWNFdmFsSnNvbk5lZWRzU3ViVHJhbnNhY3Rpb24oanNleHByLCBOVUxMKSkKLQkJewotCQkJ Y29udGV4dC0+bWF4X2hhemFyZCA9IFBST1BBUkFMTEVMX1VOU0FGRTsKLQkJCXJldHVybiB0 cnVlOwotCQl9Ci0JfQotCiAJLyogUmVjdXJzZSB0byBjaGVjayBhcmd1bWVudHMgKi8KIAly ZXR1cm4gZXhwcmVzc2lvbl90cmVlX3dhbGtlcihub2RlLAogCQkJCQkJCQkgIG1heF9wYXJh bGxlbF9oYXphcmRfd2Fsa2VyLApAQCAtNTMyMywzICs1MzU1LDE2IEBAIHB1bGxfcGFyYW1p ZHNfd2Fsa2VyKE5vZGUgKm5vZGUsIEJpdG1hcHNldCAqKmNvbnRleHQpCiAJcmV0dXJuIGV4 cHJlc3Npb25fdHJlZV93YWxrZXIobm9kZSwgcHVsbF9wYXJhbWlkc193YWxrZXIsCiAJCQkJ CQkJCSAgKHZvaWQgKikgY29udGV4dCk7CiB9CisKK2Jvb2wKK2V4cHJfY2FuX3Rocm93X2Vy cm9ycyhOb2RlICpleHByKQoreworCWlmICghZXhwcikKKwkJcmV0dXJuIGZhbHNlOworCisJ aWYgKElzQShleHByLCBDb25zdCkpCisJCXJldHVybiBmYWxzZTsKKworCS8qIFRPRE8gY29u c2lkZXIgbW9yZSBjYXNlcyAqLworCXJldHVybiB0cnVlOworfQpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvcGFyc2VyL3BhcnNlX2V4cHIuYyBiL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJz ZV9leHByLmMKaW5kZXggZmFiYjVmNzIwNzYuLmMwMjUzMGEzNjcxIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfZXhwci5jCisrKyBiL3NyYy9iYWNrZW5kL3BhcnNl ci9wYXJzZV9leHByLmMKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlICJtaXNjYWRtaW4u aCIKICNpbmNsdWRlICJub2Rlcy9tYWtlZnVuY3MuaCIKICNpbmNsdWRlICJub2Rlcy9ub2Rl RnVuY3MuaCIKKyNpbmNsdWRlICJvcHRpbWl6ZXIvY2xhdXNlcy5oIgogI2luY2x1ZGUgIm9w dGltaXplci9vcHRpbWl6ZXIuaCIKICNpbmNsdWRlICJwYXJzZXIvYW5hbHl6ZS5oIgogI2lu Y2x1ZGUgInBhcnNlci9wYXJzZV9hZ2cuaCIKQEAgLTQxMDgsNyArNDEwOSw2IEBAIHRyYW5z Zm9ybUpzb25FeHByQ29tbW9uKFBhcnNlU3RhdGUgKnBzdGF0ZSwgSnNvbkZ1bmNFeHByICpm dW5jKQogCS8qIGZvcm1hdCBpcyBkZXRlcm1pbmVkIGJ5IGNvbnRleHQgaXRlbSB0eXBlICov CiAJZm9ybWF0ID0gZXhwclR5cGUoanNleHByLT5mb3JtYXR0ZWRfZXhwcikgPT0gSlNPTkJP SUQgPyBKU19GT1JNQVRfSlNPTkIgOiBKU19GT1JNQVRfSlNPTjsKIAotCWpzZXhwci0+cmVz dWx0X2NvZXJjaW9uID0gTlVMTDsKIAlqc2V4cHItPm9taXRfcXVvdGVzID0gZmFsc2U7CiAK IAlqc2V4cHItPmZvcm1hdCA9IGZ1bmMtPmNvbW1vbi0+ZXhwci0+Zm9ybWF0OwpAQCAtNDE2 OSw0MCArNDE2OSw2IEBAIGFzc2lnbkRlZmF1bHRKc29uUmV0dXJuaW5nVHlwZShOb2RlICpj b250ZXh0X2l0ZW0sIEpzb25Gb3JtYXQgKmNvbnRleHRfZm9ybWF0LAogCXJldC0+dHlwbW9k ID0gLTE7CiB9CiAKLS8qCi0gKiBUcnkgdG8gY29lcmNlIGV4cHJlc3Npb24gdG8gdGhlIG91 dHB1dCB0eXBlIG9yCi0gKiB1c2UganNvbl9wb3B1bGF0ZV90eXBlKCkgZm9yIGNvbXBvc2l0 ZSwgYXJyYXkgYW5kIGRvbWFpbiB0eXBlcyBvcgotICogdXNlIGNvZXJjaW9uIHZpYSBJL08u Ci0gKi8KLXN0YXRpYyBKc29uQ29lcmNpb24gKgotY29lcmNlSnNvbkV4cHIoUGFyc2VTdGF0 ZSAqcHN0YXRlLCBOb2RlICpleHByLCBjb25zdCBKc29uUmV0dXJuaW5nICpyZXR1cm5pbmcp Ci17Ci0JY2hhcgkJdHlwdHlwZTsKLQlKc29uQ29lcmNpb24gKmNvZXJjaW9uID0gbWFrZU5v ZGUoSnNvbkNvZXJjaW9uKTsKLQotCWNvZXJjaW9uLT5leHByID0gY29lcmNlSnNvbkZ1bmNF eHByKHBzdGF0ZSwgZXhwciwgcmV0dXJuaW5nLCBmYWxzZSk7Ci0KLQlpZiAoY29lcmNpb24t PmV4cHIpCi0JewotCQlpZiAoY29lcmNpb24tPmV4cHIgPT0gZXhwcikKLQkJCWNvZXJjaW9u LT5leHByID0gTlVMTDsKLQotCQlyZXR1cm4gY29lcmNpb247Ci0JfQotCi0JdHlwdHlwZSA9 IGdldF90eXB0eXBlKHJldHVybmluZy0+dHlwaWQpOwotCi0JaWYgKHJldHVybmluZy0+dHlw aWQgPT0gUkVDT1JET0lEIHx8Ci0JCXR5cHR5cGUgPT0gVFlQVFlQRV9DT01QT1NJVEUgfHwK LQkJdHlwdHlwZSA9PSBUWVBUWVBFX0RPTUFJTiB8fAotCQl0eXBlX2lzX2FycmF5KHJldHVy bmluZy0+dHlwaWQpKQotCQljb2VyY2lvbi0+dmlhX3BvcHVsYXRlID0gdHJ1ZTsKLQllbHNl Ci0JCWNvZXJjaW9uLT52aWFfaW8gPSB0cnVlOwotCi0JcmV0dXJuIGNvZXJjaW9uOwotfQot CiAvKgogICogVHJhbnNmb3JtIGEgSlNPTiBvdXRwdXQgY2xhdXNlIG9mIEpTT05fVkFMVUUg YW5kIEpTT05fUVVFUlkuCiAgKi8KQEAgLTQyMTAsOCArNDE3Niw2IEBAIHN0YXRpYyB2b2lk CiB0cmFuc2Zvcm1Kc29uRnVuY0V4cHJPdXRwdXQoUGFyc2VTdGF0ZSAqcHN0YXRlLCBKc29u RnVuY0V4cHIgKmZ1bmMsCiAJCQkJCQkJSnNvbkV4cHIgKmpzZXhwcikKIHsKLQlOb2RlCSAg ICpleHByID0ganNleHByLT5mb3JtYXR0ZWRfZXhwcjsKLQogCWpzZXhwci0+cmV0dXJuaW5n ID0gdHJhbnNmb3JtSnNvbk91dHB1dChwc3RhdGUsIGZ1bmMtPm91dHB1dCwgZmFsc2UpOwog CiAJLyogSlNPTl9WQUxVRSByZXR1cm5zIHRleHQgYnkgZGVmYXVsdCAqLwpAQCAtNDIyNSwx NCArNDE4OSw0MSBAQCB0cmFuc2Zvcm1Kc29uRnVuY0V4cHJPdXRwdXQoUGFyc2VTdGF0ZSAq cHN0YXRlLCBKc29uRnVuY0V4cHIgKmZ1bmMsCiAJewogCQlKc29uUmV0dXJuaW5nIHJldDsK IAotCQlpZiAoZnVuYy0+b3AgPT0gSlNPTl9WQUxVRV9PUCAmJgotCQkJanNleHByLT5yZXR1 cm5pbmctPnR5cGlkICE9IEpTT05PSUQgJiYKLQkJCWpzZXhwci0+cmV0dXJuaW5nLT50eXBp ZCAhPSBKU09OQk9JRCkKKwkJaWYgKGZ1bmMtPm9wID09IEpTT05fVkFMVUVfT1ApCiAJCXsK LQkJCS8qIEZvcmNlZCBjb2VyY2lvbiB2aWEgSS9PIGZvciBKU09OX1ZBTFVFIGZvciBub24t SlNPTiB0eXBlcyAqLwotCQkJanNleHByLT5yZXN1bHRfY29lcmNpb24gPSBtYWtlTm9kZShK c29uQ29lcmNpb24pOwotCQkJanNleHByLT5yZXN1bHRfY29lcmNpb24tPmV4cHIgPSBOVUxM OwotCQkJanNleHByLT5yZXN1bHRfY29lcmNpb24tPnZpYV9pbyA9IHRydWU7CisJCQkvKgor CQkJICogT25seSBhIGxpbWl0ZWQgbGlzdCBvZiBvdXRwdXQgdHlwZXMgaXMgc3VwcG9ydGVk IGluCisJCQkgKiBKU09OX1ZBTFVFKCkgbm93LgorCQkJICovCisJCQlzd2l0Y2ggKGpzZXhw ci0+cmV0dXJuaW5nLT50eXBpZCkKKwkJCXsKKwkJCQljYXNlIEpTT05CT0lEOgorCQkJCWNh c2UgSlNPTk9JRDoKKwkJCQljYXNlIFRFWFRPSUQ6CisJCQkJY2FzZSBWQVJDSEFST0lEOgor CQkJCWNhc2UgQlBDSEFST0lEOgorCQkJCWNhc2UgQk9PTE9JRDoKKwkJCQljYXNlIE5VTUVS SUNPSUQ6CisJCQkJY2FzZSBJTlQyT0lEOgorCQkJCWNhc2UgSU5UNE9JRDoKKwkJCQljYXNl IElOVDhPSUQ6CisJCQkJY2FzZSBGTE9BVDRPSUQ6CisJCQkJY2FzZSBGTE9BVDhPSUQ6CisJ CQkJY2FzZSBEQVRFT0lEOgorCQkJCWNhc2UgVElNRU9JRDoKKwkJCQljYXNlIFRJTUVUWk9J RDoKKwkJCQljYXNlIFRJTUVTVEFNUE9JRDoKKwkJCQljYXNlIFRJTUVTVEFNUFRaT0lEOgor CQkJCQlicmVhazsgLyogT2sgKi8KKworCQkJCWRlZmF1bHQ6CisJCQkJCWVyZXBvcnQoRVJS T1IsCisJCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAor CQkJCQkJCSBlcnJtc2coInJldHVybmluZyB0eXBlICVzIGlzIG5vdCBzdXBwb3J0ZWQgaW4g SlNPTl9WQUxVRSgpIiwKKwkJCQkJCQkJCWZvcm1hdF90eXBlX2JlKGpzZXhwci0+cmV0dXJu aW5nLT50eXBpZCkpLAorCQkJCQkJCSBwYXJzZXJfY29lcmNpb25fZXJycG9zaXRpb24ocHN0 YXRlLCBmdW5jLT5sb2NhdGlvbiwgKE5vZGUgKikganNleHByKSkpOworCQkJfQorCiAJCQly ZXR1cm47CiAJCX0KIApAQCAtNDI0MSwxMyArNDIzMiwyMyBAQCB0cmFuc2Zvcm1Kc29uRnVu Y0V4cHJPdXRwdXQoUGFyc2VTdGF0ZSAqcHN0YXRlLCBKc29uRnVuY0V4cHIgKmZ1bmMsCiAJ CWlmIChyZXQudHlwaWQgIT0ganNleHByLT5yZXR1cm5pbmctPnR5cGlkIHx8CiAJCQlyZXQu dHlwbW9kICE9IGpzZXhwci0+cmV0dXJuaW5nLT50eXBtb2QpCiAJCXsKLQkJCU5vZGUJICAg KnBsYWNlaG9sZGVyID0gbWFrZUNhc2VUZXN0RXhwcihleHByKTsKLQotCQkJQXNzZXJ0KCgo Q2FzZVRlc3RFeHByICopIHBsYWNlaG9sZGVyKS0+dHlwZUlkID09IHJldC50eXBpZCk7Ci0J CQlBc3NlcnQoKChDYXNlVGVzdEV4cHIgKikgcGxhY2Vob2xkZXIpLT50eXBlTW9kID09IHJl dC50eXBtb2QpOworCQkJc3dpdGNoIChqc2V4cHItPnJldHVybmluZy0+dHlwaWQpCisJCQl7 CisJCQkJY2FzZSBKU09OQk9JRDoKKwkJCQljYXNlIEpTT05PSUQ6CisJCQkJY2FzZSBURVhU T0lEOgorCQkJCWNhc2UgVkFSQ0hBUk9JRDoKKwkJCQljYXNlIEJQQ0hBUk9JRDoKKwkJCQlj YXNlIEJZVEVBT0lEOgorCQkJCQlicmVhazsKIAotCQkJanNleHByLT5yZXN1bHRfY29lcmNp b24gPSBjb2VyY2VKc29uRXhwcihwc3RhdGUsIHBsYWNlaG9sZGVyLAotCQkJCQkJCQkJCQkJ CSBqc2V4cHItPnJldHVybmluZyk7CisJCQkJZGVmYXVsdDoKKwkJCQkJZXJlcG9ydChFUlJP UiwKKwkJCQkJCQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCisJ CQkJCQkJIGVycm1zZygicmV0dXJuaW5nIHR5cGUgJXMgaXMgbm90IHN1cHBvcnRlZCBpbiBK U09OX1FVRVJZKCkiLAorCQkJCQkJCQkJZm9ybWF0X3R5cGVfYmUoanNleHByLT5yZXR1cm5p bmctPnR5cGlkKSksCisJCQkJCQkJIHBhcnNlcl9jb2VyY2lvbl9lcnJwb3NpdGlvbihwc3Rh dGUsIGZ1bmMtPmxvY2F0aW9uLCAoTm9kZSAqKSBqc2V4cHIpKSk7CisJCQl9CiAJCX0KIAl9 CiAJZWxzZQpAQCAtNDI1OSw4ICs0MjYwLDEwIEBAIHRyYW5zZm9ybUpzb25GdW5jRXhwck91 dHB1dChQYXJzZVN0YXRlICpwc3RhdGUsIEpzb25GdW5jRXhwciAqZnVuYywKICAqIENvZXJj ZSBhbiBleHByZXNzaW9uIGluIEpTT04gREVGQVVMVCBiZWhhdmlvciB0byB0aGUgdGFyZ2V0 IG91dHB1dCB0eXBlLgogICovCiBzdGF0aWMgTm9kZSAqCi1jb2VyY2VEZWZhdWx0SnNvbkV4 cHIoUGFyc2VTdGF0ZSAqcHN0YXRlLCBKc29uRXhwciAqanNleHByLCBOb2RlICpkZWZleHBy KQorY29lcmNlRGVmYXVsdEpzb25FeHByKFBhcnNlU3RhdGUgKnBzdGF0ZSwgSnNvbkV4cHIg KmpzZXhwciwKKwkJCQkJICBib29sIGlzX29uX2VtcHR5LCBOb2RlICpkZWZleHByKQogewor CU5vZGUJICAgKm9yaWdfZGVmZXhwciA9IGRlZmV4cHI7CiAJaW50CQkJbG9jYXRpb247CiAJ T2lkCQkJZXhwcnR5cGU7CiAKQEAgLTQyOTAsNjMgKzQyOTMsMzEgQEAgY29lcmNlRGVmYXVs dEpzb25FeHByKFBhcnNlU3RhdGUgKnBzdGF0ZSwgSnNvbkV4cHIgKmpzZXhwciwgTm9kZSAq ZGVmZXhwcikKIAkJCQkJCWZvcm1hdF90eXBlX2JlKGpzZXhwci0+cmV0dXJuaW5nLT50eXBp ZCkpLAogCQkJCSBwYXJzZXJfZXJycG9zaXRpb24ocHN0YXRlLCBsb2NhdGlvbikpKTsKIAot CXJldHVybiBkZWZleHByOwotfQorCS8qIERvbid0IGFsbG93IHVuc2FmZSBERUZBVUwgT04g RU1QVFkgZXhwcmVzc2lvbnMsIHVubGVzcyBFUlJPUiBPTiBFUlJPUiAqLworCWlmICghaXNf b25fZW1wdHkgfHwKKwkJanNleHByLT5vbl9lcnJvci0+YnR5cGUgPT0gSlNPTl9CRUhBVklP Ul9FUlJPUikKKwkJcmV0dXJuIGRlZmV4cHI7CiAKLS8qCi0gKiBJbml0aWFsaXplIFNRTC9K U09OIGl0ZW0gY29lcmNpb24gZnJvbSB0aGUgU1FMIHR5cGUgInR5cGlkIiB0byB0aGUgdGFy Z2V0Ci0gKiAicmV0dXJuaW5nIiB0eXBlLgotICovCi1zdGF0aWMgSnNvbkNvZXJjaW9uICoK LWluaXRKc29uSXRlbUNvZXJjaW9uKFBhcnNlU3RhdGUgKnBzdGF0ZSwgT2lkIHR5cGlkLAot CQkJCQkgY29uc3QgSnNvblJldHVybmluZyAqcmV0dXJuaW5nKQotewotCU5vZGUJICAgKmV4 cHI7CisJaWYgKCFleHByX2Nhbl90aHJvd19lcnJvcnMoZGVmZXhwcikpCisJCXJldHVybiBk ZWZleHByOwogCi0JaWYgKHR5cGlkID09IFVOS05PV05PSUQpCisJLyogVHJ5IHRvIHNpbXBs aWZ5IGV4cHJlc3Npb24gaWYgdGhlcmUgaXMgbm9uLWVtcHR5IGNvZXJjaW9uICovCisJaWYg KGRlZmV4cHIgIT0gb3JpZ19kZWZleHByICYmCisJCSFleHByX2Nhbl90aHJvd19lcnJvcnMo b3JpZ19kZWZleHByKSkKIAl7Ci0JCWV4cHIgPSAoTm9kZSAqKSBtYWtlTnVsbENvbnN0KFVO S05PV05PSUQsIC0xLCBJbnZhbGlkT2lkKTsKLQl9Ci0JZWxzZQotCXsKLQkJQ2FzZVRlc3RF eHByICpwbGFjZWhvbGRlciA9IG1ha2VOb2RlKENhc2VUZXN0RXhwcik7CisJCWRlZmV4cHIg PSBldmFsX2NvbnN0X2V4cHJlc3Npb25zKE5VTEwsIGRlZmV4cHIpOwogCi0JCXBsYWNlaG9s ZGVyLT50eXBlSWQgPSB0eXBpZDsKLQkJcGxhY2Vob2xkZXItPnR5cGVNb2QgPSAtMTsKLQkJ cGxhY2Vob2xkZXItPmNvbGxhdGlvbiA9IEludmFsaWRPaWQ7Ci0KLQkJZXhwciA9IChOb2Rl ICopIHBsYWNlaG9sZGVyOworCQlpZiAoIWV4cHJfY2FuX3Rocm93X2Vycm9ycyhkZWZleHBy KSkKKwkJCXJldHVybiBkZWZleHByOwogCX0KIAotCXJldHVybiBjb2VyY2VKc29uRXhwcihw c3RhdGUsIGV4cHIsIHJldHVybmluZyk7Ci19CisJZXJlcG9ydChFUlJPUiwKKwkJCShlcnJj b2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKKwkJCSBlcnJtc2coInVuc2Fm ZSBERUZBVUxUIE9OIEVNUFRZIGV4cHJlc3Npb25zIGFyZSBub3Qgc3VwcG9ydGVkIiksCisJ CQkgZXJyaGludCgiVXNlIEVSUk9SIE9OIEVSUk9SIGNsYXVzZSBvciB0cnkgdG8gc2ltcGxp ZnkgZXhwcmVzc2lvbiBpbnRvIGNvbnN0YW50LWxpa2UgZm9ybS4iKSwKKwkJCSBwYXJzZXJf ZXJycG9zaXRpb24ocHN0YXRlLCBsb2NhdGlvbikpKTsKIAotc3RhdGljIHZvaWQKLWluaXRK c29uSXRlbUNvZXJjaW9ucyhQYXJzZVN0YXRlICpwc3RhdGUsIEpzb25JdGVtQ29lcmNpb25z ICpjb2VyY2lvbnMsCi0JCQkJCSAgY29uc3QgSnNvblJldHVybmluZyAqcmV0dXJuaW5nLCBP aWQgY29udGV4dEl0ZW1UeXBlSWQpCi17Ci0Jc3RydWN0Ci0JewotCQlKc29uQ29lcmNpb24g Kipjb2VyY2lvbjsKLQkJT2lkCQkJdHlwaWQ7Ci0JfQkJICAgKnAsCi0JCQkJY29lcmNpb25U eXBpZHNbXSA9Ci0JewotCQl7JmNvZXJjaW9ucy0+bnVsbCwgVU5LTk9XTk9JRH0sCi0JCXsm Y29lcmNpb25zLT5zdHJpbmcsIFRFWFRPSUR9LAotCQl7JmNvZXJjaW9ucy0+bnVtZXJpYywg TlVNRVJJQ09JRH0sCi0JCXsmY29lcmNpb25zLT5ib29sZWFuLCBCT09MT0lEfSwKLQkJeyZj b2VyY2lvbnMtPmRhdGUsIERBVEVPSUR9LAotCQl7JmNvZXJjaW9ucy0+dGltZSwgVElNRU9J RH0sCi0JCXsmY29lcmNpb25zLT50aW1ldHosIFRJTUVUWk9JRH0sCi0JCXsmY29lcmNpb25z LT50aW1lc3RhbXAsIFRJTUVTVEFNUE9JRH0sCi0JCXsmY29lcmNpb25zLT50aW1lc3RhbXB0 eiwgVElNRVNUQU1QVFpPSUR9LAotCQl7JmNvZXJjaW9ucy0+Y29tcG9zaXRlLCBjb250ZXh0 SXRlbVR5cGVJZH0sCi0JCXtOVUxMLCBJbnZhbGlkT2lkfQotCX07Ci0KLQlmb3IgKHAgPSBj b2VyY2lvblR5cGlkczsgcC0+Y29lcmNpb247IHArKykKLQkJKnAtPmNvZXJjaW9uID0gaW5p dEpzb25JdGVtQ29lcmNpb24ocHN0YXRlLCBwLT50eXBpZCwgcmV0dXJuaW5nKTsKKwlyZXR1 cm4gTlVMTDsKIH0KIAogLyoKQEAgLTQzNzAsMTcgKzQzNDEsMTMgQEAgdHJhbnNmb3JtSnNv bkZ1bmNFeHByKFBhcnNlU3RhdGUgKnBzdGF0ZSwgSnNvbkZ1bmNFeHByICpmdW5jKQogCQkJ anNleHByLT5yZXR1cm5pbmctPmZvcm1hdC0+ZW5jb2RpbmcgPSBKU19FTkNfREVGQVVMVDsK IAogCQkJanNleHByLT5vbl9lbXB0eS0+ZGVmYXVsdF9leHByID0KLQkJCQljb2VyY2VEZWZh dWx0SnNvbkV4cHIocHN0YXRlLCBqc2V4cHIsCisJCQkJY29lcmNlRGVmYXVsdEpzb25FeHBy KHBzdGF0ZSwganNleHByLCB0cnVlLAogCQkJCQkJCQkJICBqc2V4cHItPm9uX2VtcHR5LT5k ZWZhdWx0X2V4cHIpOwogCiAJCQlqc2V4cHItPm9uX2Vycm9yLT5kZWZhdWx0X2V4cHIgPQot CQkJCWNvZXJjZURlZmF1bHRKc29uRXhwcihwc3RhdGUsIGpzZXhwciwKKwkJCQljb2VyY2VE ZWZhdWx0SnNvbkV4cHIocHN0YXRlLCBqc2V4cHIsIGZhbHNlLAogCQkJCQkJCQkJICBqc2V4 cHItPm9uX2Vycm9yLT5kZWZhdWx0X2V4cHIpOwogCi0JCQlqc2V4cHItPmNvZXJjaW9ucyA9 IG1ha2VOb2RlKEpzb25JdGVtQ29lcmNpb25zKTsKLQkJCWluaXRKc29uSXRlbUNvZXJjaW9u cyhwc3RhdGUsIGpzZXhwci0+Y29lcmNpb25zLCBqc2V4cHItPnJldHVybmluZywKLQkJCQkJ CQkJICBleHByVHlwZShjb250ZXh0SXRlbUV4cHIpKTsKLQogCQkJYnJlYWs7CiAKIAkJY2Fz ZSBKU09OX1FVRVJZX09QOgpAQCAtNDM4OSwxMSArNDM1NiwxMSBAQCB0cmFuc2Zvcm1Kc29u RnVuY0V4cHIoUGFyc2VTdGF0ZSAqcHN0YXRlLCBKc29uRnVuY0V4cHIgKmZ1bmMpCiAJCQl0 cmFuc2Zvcm1Kc29uRnVuY0V4cHJPdXRwdXQocHN0YXRlLCBmdW5jLCBqc2V4cHIpOwogCiAJ CQlqc2V4cHItPm9uX2VtcHR5LT5kZWZhdWx0X2V4cHIgPQotCQkJCWNvZXJjZURlZmF1bHRK c29uRXhwcihwc3RhdGUsIGpzZXhwciwKKwkJCQljb2VyY2VEZWZhdWx0SnNvbkV4cHIocHN0 YXRlLCBqc2V4cHIsIHRydWUsCiAJCQkJCQkJCQkgIGpzZXhwci0+b25fZW1wdHktPmRlZmF1 bHRfZXhwcik7CiAKIAkJCWpzZXhwci0+b25fZXJyb3ItPmRlZmF1bHRfZXhwciA9Ci0JCQkJ Y29lcmNlRGVmYXVsdEpzb25FeHByKHBzdGF0ZSwganNleHByLAorCQkJCWNvZXJjZURlZmF1 bHRKc29uRXhwcihwc3RhdGUsIGpzZXhwciwgZmFsc2UsCiAJCQkJCQkJCQkgIGpzZXhwci0+ b25fZXJyb3ItPmRlZmF1bHRfZXhwcik7CiAKIAkJCWpzZXhwci0+d3JhcHBlciA9IGZ1bmMt PndyYXBwZXI7CkBAIC00NDA5LDYgKzQzNzYsNyBAQCB0cmFuc2Zvcm1Kc29uRnVuY0V4cHIo UGFyc2VTdGF0ZSAqcHN0YXRlLCBKc29uRnVuY0V4cHIgKmZ1bmMpCiAJCQlqc2V4cHItPnJl dHVybmluZy0+Zm9ybWF0LT5mb3JtYXRfdHlwZSA9IEpTX0ZPUk1BVF9ERUZBVUxUOwogCQkJ anNleHByLT5yZXR1cm5pbmctPmZvcm1hdC0+ZW5jb2RpbmcgPSBKU19FTkNfREVGQVVMVDsK IAorCQkJLyogQ29lcmNlIGludGVybWVkaWF0ZSBib29sZWFuIHJlc3VsdCB0byB0aGUgb3V0 cHV0IHR5cGUgaWYgbmVlZGVkICovCiAJCQlpZiAoIU9pZElzVmFsaWQoanNleHByLT5yZXR1 cm5pbmctPnR5cGlkKSkKIAkJCXsKIAkJCQlqc2V4cHItPnJldHVybmluZy0+dHlwaWQgPSBC T09MT0lEOwpAQCAtNDQxNiwzMiArNDM4NCwyMSBAQCB0cmFuc2Zvcm1Kc29uRnVuY0V4cHIo UGFyc2VTdGF0ZSAqcHN0YXRlLCBKc29uRnVuY0V4cHIgKmZ1bmMpCiAJCQl9CiAJCQllbHNl IGlmIChqc2V4cHItPnJldHVybmluZy0+dHlwaWQgIT0gQk9PTE9JRCkKIAkJCXsKLQkJCQlD YXNlVGVzdEV4cHIgKnBsYWNlaG9sZGVyID0gbWFrZU5vZGUoQ2FzZVRlc3RFeHByKTsKLQkJ CQlpbnQJCQlsb2NhdGlvbiA9IGV4cHJMb2NhdGlvbigoTm9kZSAqKSBqc2V4cHIpOwotCi0J CQkJcGxhY2Vob2xkZXItPnR5cGVJZCA9IEJPT0xPSUQ7Ci0JCQkJcGxhY2Vob2xkZXItPnR5 cGVNb2QgPSAtMTsKLQkJCQlwbGFjZWhvbGRlci0+Y29sbGF0aW9uID0gSW52YWxpZE9pZDsK LQotCQkJCWpzZXhwci0+cmVzdWx0X2NvZXJjaW9uID0gbWFrZU5vZGUoSnNvbkNvZXJjaW9u KTsKLQkJCQlqc2V4cHItPnJlc3VsdF9jb2VyY2lvbi0+ZXhwciA9Ci0JCQkJCWNvZXJjZV90 b190YXJnZXRfdHlwZShwc3RhdGUsIChOb2RlICopIHBsYWNlaG9sZGVyLCBCT09MT0lELAot CQkJCQkJCQkJCSAganNleHByLT5yZXR1cm5pbmctPnR5cGlkLAotCQkJCQkJCQkJCSAganNl eHByLT5yZXR1cm5pbmctPnR5cG1vZCwKLQkJCQkJCQkJCQkgIENPRVJDSU9OX0VYUExJQ0lU LAotCQkJCQkJCQkJCSAgQ09FUkNFX0lNUExJQ0lUX0NBU1QsCi0JCQkJCQkJCQkJICBsb2Nh dGlvbik7Ci0KLQkJCQlpZiAoIWpzZXhwci0+cmVzdWx0X2NvZXJjaW9uLT5leHByKQotCQkJ CQllcmVwb3J0KEVSUk9SLAotCQkJCQkJCShlcnJjb2RlKEVSUkNPREVfQ0FOTk9UX0NPRVJD RSksCi0JCQkJCQkJIGVycm1zZygiY2Fubm90IGNhc3QgdHlwZSAlcyB0byAlcyIsCi0JCQkJ CQkJCQlmb3JtYXRfdHlwZV9iZShCT09MT0lEKSwKLQkJCQkJCQkJCWZvcm1hdF90eXBlX2Jl KGpzZXhwci0+cmV0dXJuaW5nLT50eXBpZCkpLAotCQkJCQkJCSBwYXJzZXJfY29lcmNpb25f ZXJycG9zaXRpb24ocHN0YXRlLCBsb2NhdGlvbiwgKE5vZGUgKikganNleHByKSkpOworCQkJ CXN3aXRjaCAoanNleHByLT5yZXR1cm5pbmctPnR5cGlkKQorCQkJCXsKKwkJCQkJY2FzZSBJ TlQ0T0lEOgorCQkJCQljYXNlIFRFWFRPSUQ6CisJCQkJCWNhc2UgVkFSQ0hBUk9JRDoKKwkJ CQkJY2FzZSBCUENIQVJPSUQ6CisJCQkJCQlicmVhazsKIAotCQkJCWlmIChqc2V4cHItPnJl c3VsdF9jb2VyY2lvbi0+ZXhwciA9PSAoTm9kZSAqKSBwbGFjZWhvbGRlcikKLQkJCQkJanNl eHByLT5yZXN1bHRfY29lcmNpb24tPmV4cHIgPSBOVUxMOworCQkJCQlkZWZhdWx0OgorCQkJ CQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05P VF9TVVBQT1JURUQpLAorCQkJCQkJCQkgZXJybXNnKCJyZXR1cm5pbmcgdHlwZSAlcyBpcyBu b3Qgc3VwcG9ydGVkIGluIEpTT05fRVhJU1RTKCkiLAorCQkJCQkJCQkJCWZvcm1hdF90eXBl X2JlKGpzZXhwci0+cmV0dXJuaW5nLT50eXBpZCkpLAorCQkJCQkJCQkgcGFyc2VyX2NvZXJj aW9uX2VycnBvc2l0aW9uKHBzdGF0ZSwgZnVuYy0+bG9jYXRpb24sIChOb2RlICopIGpzZXhw cikpKTsKKwkJCQl9CiAJCQl9CiAJCQlicmVhazsKIApAQCAtNDQ1Nyw3ICs0NDE0LDYgQEAg dHJhbnNmb3JtSnNvbkZ1bmNFeHByKFBhcnNlU3RhdGUgKnBzdGF0ZSwgSnNvbkZ1bmNFeHBy ICpmdW5jKQogCQkJCQkJIGVycm1zZygiSlNPTl9UQUJMRSgpIGlzIG5vdCB5ZXQgaW1wbGVt ZW50ZWQgZm9yIHRoZSBqc29uIHR5cGUiKSwKIAkJCQkJCSBlcnJoaW50KCJUcnkgY2FzdGlu ZyB0aGUgYXJndW1lbnQgdG8ganNvbmIiKSwKIAkJCQkJCSBwYXJzZXJfZXJycG9zaXRpb24o cHN0YXRlLCBmdW5jLT5sb2NhdGlvbikpKTsKLQogCQkJYnJlYWs7CiAJfQogCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvanNvbnBhdGguYyBiL3NyYy9iYWNrZW5kL3V0 aWxzL2FkdC9qc29ucGF0aC5jCmluZGV4IGRhOWRmNGFlNzY2Li45YzlmOWFkNzAzZiAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb25wYXRoLmMKKysrIGIvc3JjL2Jh Y2tlbmQvdXRpbHMvYWR0L2pzb25wYXRoLmMKQEAgLTEzMTgsOSArMTMxOCwxMSBAQCBqc3BJ c011dGFibGVXYWxrZXIoSnNvblBhdGhJdGVtICpqcGksIEpzb25QYXRoTXV0YWJsZUNvbnRl eHQgKmN4dCkKICAqIENoZWNrIHdoZXRoZXIganNvbnBhdGggZXhwcmVzc2lvbiBpcyBpbW11 dGFibGUgb3Igbm90LgogICovCiBib29sCi1qc3BJc011dGFibGUoSnNvblBhdGggKnBhdGgs IExpc3QgKnZhcm5hbWVzLCBMaXN0ICp2YXJleHBycykKK2pzcElzTXV0YWJsZShKc29uUGF0 aCAqcGF0aCwgTGlzdCAqdmFybmFtZXMsIExpc3QgKnZhcmV4cHJzLAorCQkJIGJvb2wgKnJl dHVybnNfZGF0ZXRpbWUpCiB7CiAJSnNvblBhdGhNdXRhYmxlQ29udGV4dCBjeHQ7CisJSnNv blBhdGhEYXRhdHlwZVN0YXR1cyBzdGF0dXM7CiAJSnNvblBhdGhJdGVtIGpwaTsKIAogCWN4 dC52YXJuYW1lcyA9IHZhcm5hbWVzOwpAQCAtMTMzMCw3ICsxMzMyLDkgQEAganNwSXNNdXRh YmxlKEpzb25QYXRoICpwYXRoLCBMaXN0ICp2YXJuYW1lcywgTGlzdCAqdmFyZXhwcnMpCiAJ Y3h0Lm11dGFibGUgPSBmYWxzZTsKIAogCWpzcEluaXQoJmpwaSwgcGF0aCk7Ci0JanNwSXNN dXRhYmxlV2Fsa2VyKCZqcGksICZjeHQpOworCXN0YXR1cyA9IGpzcElzTXV0YWJsZVdhbGtl cigmanBpLCAmY3h0KTsKKworCSpyZXR1cm5zX2RhdGV0aW1lID0gc3RhdHVzICE9IGpwZHNO b25EYXRlVGltZTsKIAogCXJldHVybiBjeHQubXV0YWJsZTsKIH0KZGlmZiAtLWdpdCBhL3Ny Yy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWNFeHByLmggYi9zcmMvaW5jbHVkZS9leGVjdXRvci9l eGVjRXhwci5oCmluZGV4IGM4ZWY5MTdmZmUwLi5hZGFiZjU3Yzk3YiAxMDA2NDQKLS0tIGEv c3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY0V4cHIuaAorKysgYi9zcmMvaW5jbHVkZS9leGVj dXRvci9leGVjRXhwci5oCkBAIC03NjIsNDMgKzc2MiwxNCBAQCB0eXBlZGVmIHN0cnVjdCBK c29uRXhwclN0YXRlCiB7CiAJSnNvbkV4cHIgICAqanNleHByOwkJCS8qIG9yaWdpbmFsIGV4 cHJlc3Npb24gbm9kZSAqLwogCi0Jc3RydWN0Ci0JewotCQlGbWdySW5mbwlmdW5jOwkJLyog dHlwaW5wdXQgZnVuY3Rpb24gZm9yIG91dHB1dCB0eXBlICovCi0JCU9pZAkJCXR5cGlvcGFy YW07Ci0JfQkJCWlucHV0OwkJCS8qIEkvTyBpbmZvIGZvciBvdXRwdXQgdHlwZSAqLwotCiAJ TnVsbGFibGVEYXR1bQotCQkJICAgKmZvcm1hdHRlZF9leHByLCAvKiBmb3JtYXR0ZWQgY29u dGV4dCBpdGVtIHZhbHVlICovCi0JCQkgICAqcmVzX2V4cHIsCQkvKiByZXN1bHQgaXRlbSAq LwotCQkJICAgKmNvZXJjaW9uX2V4cHIsCS8qIGlucHV0IGZvciBKU09OIGl0ZW0gY29lcmNp b24gKi8KLQkJCSAgICpwYXRoc3BlYzsJCS8qIHBhdGggc3BlY2lmaWNhdGlvbiB2YWx1ZSAq LworCQkJCWZvcm1hdHRlZF9leHByLAkvKiBmb3JtYXR0ZWQgY29udGV4dCBpdGVtIHZhbHVl ICovCisJCQkJY29lcmNpb25fZXhwciwJLyogaW5wdXQgZm9yIEpTT04gaXRlbSBjb2VyY2lv biAqLworCQkJCXBhdGhzcGVjOwkJLyogcGF0aCBzcGVjaWZpY2F0aW9uIHZhbHVlICovCiAK LQlFeHByU3RhdGUgICpyZXN1bHRfZXhwcjsJLyogY29lcmNlZCB0byBvdXRwdXQgdHlwZSAq LwogCUV4cHJTdGF0ZSAgKmRlZmF1bHRfb25fZW1wdHk7CS8qIE9OIEVNUFRZIERFRkFVTFQg ZXhwcmVzc2lvbiAqLwogCUV4cHJTdGF0ZSAgKmRlZmF1bHRfb25fZXJyb3I7CS8qIE9OIEVS Uk9SIERFRkFVTFQgZXhwcmVzc2lvbiAqLwogCUxpc3QJICAgKmFyZ3M7CQkJLyogcGFzc2lu ZyBhcmd1bWVudHMgKi8KLQotCXZvaWQJICAgKmNhY2hlOwkJCS8qIGNhY2hlIGZvciBqc29u X3BvcHVsYXRlX3R5cGUoKSAqLwotCi0Jc3RydWN0IEpzb25Db2VyY2lvbnNTdGF0ZQotCXsK LQkJc3RydWN0IEpzb25Db2VyY2lvblN0YXRlCi0JCXsKLQkJCUpzb25Db2VyY2lvbiAqY29l cmNpb247IC8qIGNvZXJjaW9uIGV4cHJlc3Npb24gKi8KLQkJCUV4cHJTdGF0ZSAgKmVzdGF0 ZTsgLyogY29lcmNpb24gZXhwcmVzc2lvbiBzdGF0ZSAqLwotCQl9CQkJbnVsbCwKLQkJCQkJ c3RyaW5nLAotCQludW1lcmljICAgICwKLQkJCQkJYm9vbGVhbiwKLQkJCQkJZGF0ZSwKLQkJ CQkJdGltZSwKLQkJCQkJdGltZXR6LAotCQkJCQl0aW1lc3RhbXAsCi0JCQkJCXRpbWVzdGFt cHR6LAotCQkJCQljb21wb3NpdGU7Ci0JfQkJCWNvZXJjaW9uczsJCS8qIHN0YXRlcyBmb3Ig Y29lcmNpb24gZnJvbSBTUUwvSlNPTiBpdGVtCi0JCQkJCQkJCSAqIHR5cGVzIGRpcmVjdGx5 IHRvIHRoZSBvdXRwdXQgdHlwZSAqLwogfSBKc29uRXhwclN0YXRlOwogCiAvKiBmdW5jdGlv bnMgaW4gZXhlY0V4cHIuYyAqLwpAQCAtODYwLDE4ICs4MzEsOCBAQCBleHRlcm4gdm9pZCBF eGVjRXZhbFN5c1ZhcihFeHByU3RhdGUgKnN0YXRlLCBFeHByRXZhbFN0ZXAgKm9wLAogCQkJ CQkJICAgRXhwckNvbnRleHQgKmVjb250ZXh0LCBUdXBsZVRhYmxlU2xvdCAqc2xvdCk7CiBl eHRlcm4gdm9pZCBFeGVjRXZhbEpzb25Db25zdHJ1Y3RvcihFeHByU3RhdGUgKnN0YXRlLCBF eHByRXZhbFN0ZXAgKm9wLAogCQkJCQkJCQkJRXhwckNvbnRleHQgKmVjb250ZXh0KTsKLWV4 dGVybiB2b2lkIEV4ZWNFdmFsSnNvbihFeHByU3RhdGUgKnN0YXRlLCBFeHByRXZhbFN0ZXAg Km9wLAotCQkJCQkJIEV4cHJDb250ZXh0ICplY29udGV4dCk7Ci1leHRlcm4gRGF0dW0gRXhl Y1ByZXBhcmVKc29uSXRlbUNvZXJjaW9uKHN0cnVjdCBKc29uYlZhbHVlICppdGVtLAotCQkJ CQkJCQkJCSBKc29uUmV0dXJuaW5nICpyZXR1cm5pbmcsCi0JCQkJCQkJCQkJIHN0cnVjdCBK c29uQ29lcmNpb25zU3RhdGUgKmNvZXJjaW9ucywKLQkJCQkJCQkJCQkgc3RydWN0IEpzb25D b2VyY2lvblN0YXRlICoqcGpjc3RhdGUpOwotZXh0ZXJuIGJvb2wgRXhlY0V2YWxKc29uTmVl ZHNTdWJUcmFuc2FjdGlvbihKc29uRXhwciAqanNleHByLAotCQkJCQkJCQkJCQlzdHJ1Y3Qg SnNvbkNvZXJjaW9uc1N0YXRlICopOwotZXh0ZXJuIERhdHVtIEV4ZWNFdmFsRXhwclBhc3Np bmdDYXNlVmFsdWUoRXhwclN0YXRlICplc3RhdGUsCi0JCQkJCQkJCQkJICBFeHByQ29udGV4 dCAqZWNvbnRleHQsIGJvb2wgKmlzbnVsbCwKLQkJCQkJCQkJCQkgIERhdHVtIGNhc2V2YWxf ZGF0dW0sCi0JCQkJCQkJCQkJICBib29sIGNhc2V2YWxfaXNudWxsKTsKK2V4dGVybiB2b2lk IEV4ZWNFdmFsSnNvbkV4cHIoRXhwclN0YXRlICpzdGF0ZSwgRXhwckV2YWxTdGVwICpvcCwK KwkJCQkJCQkgRXhwckNvbnRleHQgKmVjb250ZXh0KTsKIAogZXh0ZXJuIHZvaWQgRXhlY0Fn Z0luaXRHcm91cChBZ2dTdGF0ZSAqYWdnc3RhdGUsIEFnZ1N0YXRlUGVyVHJhbnMgcGVydHJh bnMsIEFnZ1N0YXRlUGVyR3JvdXAgcGVyZ3JvdXAsCiAJCQkJCQkJIEV4cHJDb250ZXh0ICph Z2djb250ZXh0KTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL3ByaW1ub2Rlcy5o IGIvc3JjL2luY2x1ZGUvbm9kZXMvcHJpbW5vZGVzLmgKaW5kZXggM2FhOTZiYjY4NTUuLjE0 ZmJiMzJjZTljIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9wcmltbm9kZXMuaAor KysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9wcmltbm9kZXMuaApAQCAtMTU1MSwzOSArMTU1MSw2 IEBAIHR5cGVkZWYgc3RydWN0IEpzb25CZWhhdmlvcgogCU5vZGUJICAgKmRlZmF1bHRfZXhw cjsJLyogZGVmYXVsdCBleHByZXNzaW9uLCBpZiBhbnkgKi8KIH0gSnNvbkJlaGF2aW9yOwog Ci0vKgotICogSnNvbkNvZXJjaW9uIC0KLSAqCQljb2VyY2lvbiBmcm9tIFNRTC9KU09OIGl0 ZW0gdHlwZXMgdG8gU1FMIHR5cGVzCi0gKi8KLXR5cGVkZWYgc3RydWN0IEpzb25Db2VyY2lv bgotewotCU5vZGVUYWcJCXR5cGU7Ci0JTm9kZQkgICAqZXhwcjsJCQkvKiByZXN1bHRpbmcg ZXhwcmVzc2lvbiBjb2VyY2VkIHRvIHRhcmdldCB0eXBlICovCi0JYm9vbAkJdmlhX3BvcHVs YXRlOwkvKiBjb2VyY2UgcmVzdWx0IHVzaW5nIGpzb25fcG9wdWxhdGVfdHlwZSgpPyAqLwot CWJvb2wJCXZpYV9pbzsJCQkvKiBjb2VyY2UgcmVzdWx0IHVzaW5nIHR5cGUgaW5wdXQgZnVu Y3Rpb24/ICovCi0JT2lkCQkJY29sbGF0aW9uOwkJLyogY29sbGF0aW9uIGZvciBjb2VyY2lv biB2aWEgSS9PIG9yIHBvcHVsYXRlICovCi19IEpzb25Db2VyY2lvbjsKLQotLyoKLSAqIEpz b25JdGVtQ29lcmNpb25zIC0KLSAqCQlleHByZXNzaW9ucyBmb3IgY29lcmNpb24gZnJvbSBT UUwvSlNPTiBpdGVtIHR5cGVzIGRpcmVjdGx5IHRvIHRoZQotICoJCW91dHB1dCBTUUwgdHlw ZQotICovCi10eXBlZGVmIHN0cnVjdCBKc29uSXRlbUNvZXJjaW9ucwotewotCU5vZGVUYWcJ CXR5cGU7Ci0JSnNvbkNvZXJjaW9uICpudWxsOwotCUpzb25Db2VyY2lvbiAqc3RyaW5nOwot CUpzb25Db2VyY2lvbiAqbnVtZXJpYzsKLQlKc29uQ29lcmNpb24gKmJvb2xlYW47Ci0JSnNv bkNvZXJjaW9uICpkYXRlOwotCUpzb25Db2VyY2lvbiAqdGltZTsKLQlKc29uQ29lcmNpb24g KnRpbWV0ejsKLQlKc29uQ29lcmNpb24gKnRpbWVzdGFtcDsKLQlKc29uQ29lcmNpb24gKnRp bWVzdGFtcHR6OwotCUpzb25Db2VyY2lvbiAqY29tcG9zaXRlOwkvKiBhcnJheXMgYW5kIG9i amVjdHMgKi8KLX0gSnNvbkl0ZW1Db2VyY2lvbnM7Ci0KIC8qCiAgKiBKc29uRXhwciAtCiAg KgkJdHJhbnNmb3JtZWQgcmVwcmVzZW50YXRpb24gb2YgSlNPTl9WQUxVRSgpLCBKU09OX1FV RVJZKCksIEpTT05fRVhJU1RTKCkKQEAgLTE1OTMsNyArMTU2MCw2IEBAIHR5cGVkZWYgc3Ry dWN0IEpzb25FeHByCiAJRXhwcgkJeHByOwogCUpzb25FeHByT3AJb3A7CQkJCS8qIGpzb24g ZnVuY3Rpb24gSUQgKi8KIAlOb2RlCSAgICpmb3JtYXR0ZWRfZXhwcjsgLyogZm9ybWF0dGVk IGNvbnRleHQgaXRlbSBleHByZXNzaW9uICovCi0JSnNvbkNvZXJjaW9uICpyZXN1bHRfY29l cmNpb247CS8qIHJlc3VsdGluZyBjb2VyY2lvbiB0byBSRVRVUk5JTkcgdHlwZSAqLwogCUpz b25Gb3JtYXQgKmZvcm1hdDsJCQkvKiBjb250ZXh0IGl0ZW0gZm9ybWF0IChKU09OL0pTT05C KSAqLwogCU5vZGUJICAgKnBhdGhfc3BlYzsJCS8qIEpTT04gcGF0aCBzcGVjaWZpY2F0aW9u IGV4cHJlc3Npb24gKi8KIAlMaXN0CSAgICpwYXNzaW5nX25hbWVzOwkvKiBQQVNTSU5HIGFy Z3VtZW50IG5hbWVzICovCkBAIC0xNjAxLDggKzE1NjcsOCBAQCB0eXBlZGVmIHN0cnVjdCBK c29uRXhwcgogCUpzb25SZXR1cm5pbmcgKnJldHVybmluZzsJLyogUkVUVVJOSU5HIGNsYXVz ZSB0eXBlL2Zvcm1hdCBpbmZvICovCiAJSnNvbkJlaGF2aW9yICpvbl9lbXB0eTsJCS8qIE9O IEVNUFRZIGJlaGF2aW9yICovCiAJSnNvbkJlaGF2aW9yICpvbl9lcnJvcjsJCS8qIE9OIEVS Uk9SIGJlaGF2aW9yICovCi0JSnNvbkl0ZW1Db2VyY2lvbnMgKmNvZXJjaW9uczsJLyogY29l cmNpb25zIGZvciBKU09OX1ZBTFVFICovCiAJSnNvbldyYXBwZXIgd3JhcHBlcjsJCS8qIFdS QVBQRVIgZm9yIEpTT05fUVVFUlkgKi8KKwlPaWQJCQljb2xsYXRpb247CQkvKiBPSUQgb2Yg Y29sbGF0aW9uLCBvciBJbnZhbGlkT2lkIGlmIG5vbmUgKi8KIAlib29sCQlvbWl0X3F1b3Rl czsJLyogS0VFUC9PTUlUIFFVT1RFUyBmb3IgSlNPTl9RVUVSWSAqLwogCWludAkJCWxvY2F0 aW9uOwkJLyogdG9rZW4gbG9jYXRpb24sIG9yIC0xIGlmIHVua25vd24gKi8KIH0gSnNvbkV4 cHI7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvY2xhdXNlcy5oIGIvc3Jj L2luY2x1ZGUvb3B0aW1pemVyL2NsYXVzZXMuaAppbmRleCA2YzUyMDNkYzQ0OC4uNGQ2MWI4 OGMxNjEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL29wdGltaXplci9jbGF1c2VzLmgKKysr IGIvc3JjL2luY2x1ZGUvb3B0aW1pemVyL2NsYXVzZXMuaApAQCAtNTUsNCArNTUsNiBAQCBl eHRlcm4gUXVlcnkgKmlubGluZV9zZXRfcmV0dXJuaW5nX2Z1bmN0aW9uKFBsYW5uZXJJbmZv ICpyb290LAogCiBleHRlcm4gQml0bWFwc2V0ICpwdWxsX3BhcmFtaWRzKEV4cHIgKmV4cHIp OwogCitleHRlcm4gYm9vbCBleHByX2Nhbl90aHJvd19lcnJvcnMoTm9kZSAqZXhwcik7CisK ICNlbmRpZgkJCQkJCQkvKiBDTEFVU0VTX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L3V0aWxzL2pzb25wYXRoLmggYi9zcmMvaW5jbHVkZS91dGlscy9qc29ucGF0aC5oCmluZGV4 IDhlNzliOGRjOWYwLi5lOTEzNGI3ZWFiNCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRp bHMvanNvbnBhdGguaAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9qc29ucGF0aC5oCkBAIC0x NzcsNyArMTc3LDggQEAgZXh0ZXJuIGJvb2wganNwR2V0Qm9vbChKc29uUGF0aEl0ZW0gKnYp OwogZXh0ZXJuIGNoYXIgKmpzcEdldFN0cmluZyhKc29uUGF0aEl0ZW0gKnYsIGludDMyICps ZW4pOwogZXh0ZXJuIGJvb2wganNwR2V0QXJyYXlTdWJzY3JpcHQoSnNvblBhdGhJdGVtICp2 LCBKc29uUGF0aEl0ZW0gKmZyb20sCiAJCQkJCQkJCSBKc29uUGF0aEl0ZW0gKnRvLCBpbnQg aSk7Ci1leHRlcm4gYm9vbCBqc3BJc011dGFibGUoSnNvblBhdGggKnBhdGgsIExpc3QgKnZh cm5hbWVzLCBMaXN0ICp2YXJleHBycyk7CitleHRlcm4gYm9vbCBqc3BJc011dGFibGUoSnNv blBhdGggKnBhdGgsIExpc3QgKnZhcm5hbWVzLCBMaXN0ICp2YXJleHBycywKKwkJCQkJCSBi b29sICpyZXR1cm5zX2RhdGV0aW1lKTsKIAogZXh0ZXJuIGNvbnN0IGNoYXIgKmpzcE9wZXJh dGlvbk5hbWUoSnNvblBhdGhJdGVtVHlwZSB0eXBlKTsKIApkaWZmIC0tZ2l0IGEvc3JjL3Rl c3QvcmVncmVzcy9leHBlY3RlZC9qc29uYl9zcWxqc29uLm91dCBiL3NyYy90ZXN0L3JlZ3Jl c3MvZXhwZWN0ZWQvanNvbmJfc3FsanNvbi5vdXQKaW5kZXggZWY0OTYxMTBhZjMuLjBlMDdi YmM4NThmIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pzb25iX3Nx bGpzb24ub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvanNvbmJfc3FsanNv bi5vdXQKQEAgLTE4NCwxMSArMTg0LDExIEBAIFNFTEVDVCBKU09OX0VYSVNUUyhqc29uYiAn MScsICdzdHJpY3QgJFsxXScgUkVUVVJOSU5HIHRleHQgRkFMU0UgT04gRVJST1IpOwogKDEg cm93KQogCiBTRUxFQ1QgSlNPTl9FWElTVFMoanNvbmIgJzEnLCAnJFswXScgUkVUVVJOSU5H IGpzb25iKTsKLUVSUk9SOiAgY2Fubm90IGNhc3QgdHlwZSBib29sZWFuIHRvIGpzb25iCitF UlJPUjogIHJldHVybmluZyB0eXBlIGpzb25iIGlzIG5vdCBzdXBwb3J0ZWQgaW4gSlNPTl9F WElTVFMoKQogTElORSAxOiBTRUxFQ1QgSlNPTl9FWElTVFMoanNvbmIgJzEnLCAnJFswXScg UkVUVVJOSU5HIGpzb25iKTsKICAgICAgICAgICAgICAgIF4KIFNFTEVDVCBKU09OX0VYSVNU Uyhqc29uYiAnMScsICckWzBdJyBSRVRVUk5JTkcgZmxvYXQ0KTsKLUVSUk9SOiAgY2Fubm90 IGNhc3QgdHlwZSBib29sZWFuIHRvIHJlYWwKK0VSUk9SOiAgcmV0dXJuaW5nIHR5cGUgcmVh bCBpcyBub3Qgc3VwcG9ydGVkIGluIEpTT05fRVhJU1RTKCkKIExJTkUgMTogU0VMRUNUIEpT T05fRVhJU1RTKGpzb25iICcxJywgJyRbMF0nIFJFVFVSTklORyBmbG9hdDQpOwogICAgICAg ICAgICAgICAgXgogLS0gSlNPTl9WQUxVRQpAQCAtMjQyLDcgKzI0Miw5IEBAIFNFTEVDVCBK U09OX1ZBTFVFKGpzb25iICcxMjMnLCAnJCcgUkVUVVJOSU5HIHRleHQpOwogCiAvKiBqc29u YiBieXRlYSA/Pz8gKi8KIFNFTEVDVCBKU09OX1ZBTFVFKGpzb25iICcxMjMnLCAnJCcgUkVU VVJOSU5HIGJ5dGVhIEVSUk9SIE9OIEVSUk9SKTsKLUVSUk9SOiAgU1FML0pTT04gaXRlbSBj YW5ub3QgYmUgY2FzdCB0byB0YXJnZXQgdHlwZQorRVJST1I6ICByZXR1cm5pbmcgdHlwZSBi eXRlYSBpcyBub3Qgc3VwcG9ydGVkIGluIEpTT05fVkFMVUUoKQorTElORSAyOiBTRUxFQ1Qg SlNPTl9WQUxVRShqc29uYiAnMTIzJywgJyQnIFJFVFVSTklORyBieXRlYSBFUlJPUiBPTiAu Li4KKyAgICAgICAgICAgICAgIF4KIFNFTEVDVCBKU09OX1ZBTFVFKGpzb25iICcxLjIzJywg JyQnKTsKICBqc29uX3ZhbHVlIAogLS0tLS0tLS0tLS0tCkBAIC0zNDksMTQgKzM1MSwxMjkg QEAgU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJyIyMDE3LTAyLTIwIicsICckJyBSRVRVUk5J TkcgZGF0ZSkgKyA5OwogIDAzLTAxLTIwMTcKICgxIHJvdykKIAotLS0gVGVzdCBOVUxMIGNo ZWNrcyBleGVjdXRpb24gaW4gZG9tYWluIHR5cGVzCitTRUxFQ1QgSlNPTl9WQUxVRShqc29u YiAgJzEuMjMnLCAgJyQnIFJFVFVSTklORyBmbG9hdDQpOworIGpzb25fdmFsdWUgCistLS0t LS0tLS0tLS0KKyAgICAgICAxLjIzCisoMSByb3cpCisKK1NFTEVDVCBKU09OX1ZBTFVFKGpz b25iICciMS4yMyInLCAnJCcgUkVUVVJOSU5HIGZsb2F0NCk7CisganNvbl92YWx1ZSAKKy0t LS0tLS0tLS0tLQorICAgICAgIDEuMjMKKygxIHJvdykKKworU0VMRUNUIEpTT05fVkFMVUUo anNvbmIgICcibmFuIicsICckJyBSRVRVUk5JTkcgZmxvYXQ0KTsKKyBqc29uX3ZhbHVlIAor LS0tLS0tLS0tLS0tCisgICAgICAgIE5hTgorKDEgcm93KQorCitTRUxFQ1QgSlNPTl9WQUxV RShqc29uYiAnIi1pbmYiJywgJyQnIFJFVFVSTklORyBmbG9hdDQpOworIGpzb25fdmFsdWUg CistLS0tLS0tLS0tLS0KKyAgLUluZmluaXR5CisoMSByb3cpCisKK1NFTEVDVCBKU09OX1ZB TFVFKGpzb25iICciZXJyIicsICckJyBSRVRVUk5JTkcgZmxvYXQ0IERFRkFVTFQgLTEgT04g RVJST1IpOworIGpzb25fdmFsdWUgCistLS0tLS0tLS0tLS0KKyAgICAgICAgIC0xCisoMSBy b3cpCisKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICciZXJyIicsICckJyBSRVRVUk5JTkcg ZmxvYXQ0IEVSUk9SIE9OIEVSUk9SKTsKK0VSUk9SOiAgaW52YWxpZCBpbnB1dCBzeW50YXgg Zm9yIHR5cGUgcmVhbDogImVyciIKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICAnMS4yMycs ICAnJCcgUkVUVVJOSU5HIGZsb2F0OCk7CisganNvbl92YWx1ZSAKKy0tLS0tLS0tLS0tLQor ICAgICAgIDEuMjMKKygxIHJvdykKKworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJyIxLjIz IicsICckJyBSRVRVUk5JTkcgZmxvYXQ4KTsKKyBqc29uX3ZhbHVlIAorLS0tLS0tLS0tLS0t CisgICAgICAgMS4yMworKDEgcm93KQorCitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAgJyJu YW4iJywgJyQnIFJFVFVSTklORyBmbG9hdDgpOworIGpzb25fdmFsdWUgCistLS0tLS0tLS0t LS0KKyAgICAgICAgTmFOCisoMSByb3cpCisKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICci LWluZiInLCAnJCcgUkVUVVJOSU5HIGZsb2F0OCk7CisganNvbl92YWx1ZSAKKy0tLS0tLS0t LS0tLQorICAtSW5maW5pdHkKKygxIHJvdykKKworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIg JyJlcnIiJywgJyQnIFJFVFVSTklORyBmbG9hdDggREVGQVVMVCAtMSBPTiBFUlJPUik7Cisg anNvbl92YWx1ZSAKKy0tLS0tLS0tLS0tLQorICAgICAgICAgLTEKKygxIHJvdykKKworU0VM RUNUIEpTT05fVkFMVUUoanNvbmIgJyJlcnIiJywgJyQnIFJFVFVSTklORyBmbG9hdDggRVJS T1IgT04gRVJST1IpOworRVJST1I6ICBpbnZhbGlkIGlucHV0IHN5bnRheCBmb3IgdHlwZSBk b3VibGUgcHJlY2lzaW9uOiAiZXJyIgorU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgICcxLjIz JywgICckJyBSRVRVUk5JTkcgbnVtZXJpYyk7CisganNvbl92YWx1ZSAKKy0tLS0tLS0tLS0t LQorICAgICAgIDEuMjMKKygxIHJvdykKKworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJyIx LjIzIicsICckJyBSRVRVUk5JTkcgbnVtZXJpYyk7CisganNvbl92YWx1ZSAKKy0tLS0tLS0t LS0tLQorICAgICAgIDEuMjMKKygxIHJvdykKKworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIg ICcibmFuIicsICckJyBSRVRVUk5JTkcgbnVtZXJpYyk7CisganNvbl92YWx1ZSAKKy0tLS0t LS0tLS0tLQorICAgICAgICBOYU4KKygxIHJvdykKKworU0VMRUNUIEpTT05fVkFMVUUoanNv bmIgJyItaW5mIicsICckJyBSRVRVUk5JTkcgbnVtZXJpYyk7CisganNvbl92YWx1ZSAKKy0t LS0tLS0tLS0tLQorICAtSW5maW5pdHkKKygxIHJvdykKKworU0VMRUNUIEpTT05fVkFMVUUo anNvbmIgJyJlcnIiJywgJyQnIFJFVFVSTklORyBudW1lcmljIERFRkFVTFQgLTEgT04gRVJS T1IpOworIGpzb25fdmFsdWUgCistLS0tLS0tLS0tLS0KKyAgICAgICAgIC0xCisoMSByb3cp CisKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICciZXJyIicsICckJyBSRVRVUk5JTkcgbnVt ZXJpYyBFUlJPUiBPTiBFUlJPUik7CitFUlJPUjogIGludmFsaWQgaW5wdXQgc3ludGF4IGZv ciB0eXBlIG51bWVyaWM6ICJlcnIiCistLSBUZXN0IGZvciBkb21haW4gdHlwZXMKIENSRUFU RSBET01BSU4gc3FsanNvbmJfaW50X25vdF9udWxsIEFTIGludCBOT1QgTlVMTDsKK0NSRUFU RSBET01BSU4gc3FsanNvbmJfanNvbl9ub3RfbnVsbCBBUyBqc29uIE5PVCBOVUxMIENIRUNL IChWQUxVRTo6dGV4dCA8PiAnMCcpOworQ1JFQVRFIERPTUFJTiBzcWxqc29uYl9qc29uYl9u b3RfbnVsbCBBUyBqc29uYiBOT1QgTlVMTCBDSEVDSyAoVkFMVUUgPD4gJzAnKTsKKy0tIFRl c3QgY2FzdGluZyB0byBqc29uW2JdIGRvbWFpbnMgKGl0ZW1zIGNhc3RlZCBhcyBpcywgc3Ry aW5ncyBhcmUgbm90IHVucXVvdGVkKQorU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJyIxIics ICckJyBSRVRVUk5JTkcgc3FsanNvbmJfanNvbl9ub3RfbnVsbCk7CitFUlJPUjogIHJldHVy bmluZyB0eXBlIHNxbGpzb25iX2pzb25fbm90X251bGwgaXMgbm90IHN1cHBvcnRlZCBpbiBK U09OX1ZBTFVFKCkKK0xJTkUgMTogU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJyIxIicsICck JyBSRVRVUk5JTkcgc3FsanNvbmJfanNvbl9uLi4uCisgICAgICAgICAgICAgICBeCitTRUxF Q1QgSlNPTl9WQUxVRShqc29uYiAnIjEiJywgJyQnIFJFVFVSTklORyBzcWxqc29uYl9qc29u Yl9ub3RfbnVsbCk7CitFUlJPUjogIHJldHVybmluZyB0eXBlIHNxbGpzb25iX2pzb25iX25v dF9udWxsIGlzIG5vdCBzdXBwb3J0ZWQgaW4gSlNPTl9WQUxVRSgpCitMSU5FIDE6IFNFTEVD VCBKU09OX1ZBTFVFKGpzb25iICciMSInLCAnJCcgUkVUVVJOSU5HIHNxbGpzb25iX2pzb25i Xy4uLgorICAgICAgICAgICAgICAgXgorLS0gVGVzdCBOVUxMIGNoZWNrcyBleGVjdXRpb24g aW4gZG9tYWluIHR5cGVzCiBTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnMScsICckLmEnIFJF VFVSTklORyBzcWxqc29uYl9pbnRfbm90X251bGwpOwotRVJST1I6ICBkb21haW4gc3FsanNv bmJfaW50X25vdF9udWxsIGRvZXMgbm90IGFsbG93IG51bGwgdmFsdWVzCitFUlJPUjogIHJl dHVybmluZyB0eXBlIHNxbGpzb25iX2ludF9ub3RfbnVsbCBpcyBub3Qgc3VwcG9ydGVkIGlu IEpTT05fVkFMVUUoKQorTElORSAxOiBTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnMScsICck LmEnIFJFVFVSTklORyBzcWxqc29uYl9pbnRfbm8uLi4KKyAgICAgICAgICAgICAgIF4KIFNF TEVDVCBKU09OX1ZBTFVFKGpzb25iICcxJywgJyQuYScgUkVUVVJOSU5HIHNxbGpzb25iX2lu dF9ub3RfbnVsbCBOVUxMIE9OIEVSUk9SKTsKLUVSUk9SOiAgZG9tYWluIHNxbGpzb25iX2lu dF9ub3RfbnVsbCBkb2VzIG5vdCBhbGxvdyBudWxsIHZhbHVlcworRVJST1I6ICByZXR1cm5p bmcgdHlwZSBzcWxqc29uYl9pbnRfbm90X251bGwgaXMgbm90IHN1cHBvcnRlZCBpbiBKU09O X1ZBTFVFKCkKK0xJTkUgMTogU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJzEnLCAnJC5hJyBS RVRVUk5JTkcgc3FsanNvbmJfaW50X25vLi4uCisgICAgICAgICAgICAgICBeCiBTRUxFQ1Qg SlNPTl9WQUxVRShqc29uYiAnMScsICckLmEnIFJFVFVSTklORyBzcWxqc29uYl9pbnRfbm90 X251bGwgREVGQVVMVCBOVUxMIE9OIEVSUk9SKTsKLUVSUk9SOiAgZG9tYWluIHNxbGpzb25i X2ludF9ub3RfbnVsbCBkb2VzIG5vdCBhbGxvdyBudWxsIHZhbHVlcworRVJST1I6ICByZXR1 cm5pbmcgdHlwZSBzcWxqc29uYl9pbnRfbm90X251bGwgaXMgbm90IHN1cHBvcnRlZCBpbiBK U09OX1ZBTFVFKCkKK0xJTkUgMTogU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJzEnLCAnJC5h JyBSRVRVUk5JTkcgc3FsanNvbmJfaW50X25vLi4uCisgICAgICAgICAgICAgICBeCistLSBU ZXN0IHJldHVybmluZyBvZiBub24tc2NhbGFyIGl0ZW1zCiBTRUxFQ1QgSlNPTl9WQUxVRShq c29uYiAnW10nLCAnJCcpOwogIGpzb25fdmFsdWUgCiAtLS0tLS0tLS0tLS0KQEAgLTQ3OCwx MSArNTk1LDkgQEAgU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJ251bGwnLCAnJGEnIFBBU1NJ TkcgcG9pbnQgJyAoMSwgMiApJyBBUyBhKTsKICgxIHJvdykKIAogU0VMRUNUIEpTT05fVkFM VUUoanNvbmIgJ251bGwnLCAnJGEnIFBBU1NJTkcgcG9pbnQgJyAoMSwgMiApJyBBUyBhIFJF VFVSTklORyBwb2ludCk7Ci0ganNvbl92YWx1ZSAKLS0tLS0tLS0tLS0tLQotICgxLDIpCi0o MSByb3cpCi0KK0VSUk9SOiAgcmV0dXJuaW5nIHR5cGUgcG9pbnQgaXMgbm90IHN1cHBvcnRl ZCBpbiBKU09OX1ZBTFVFKCkKK0xJTkUgMTogU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJ251 bGwnLCAnJGEnIFBBU1NJTkcgcG9pbnQgJyAoMSwgMiApLi4uCisgICAgICAgICAgICAgICBe CiAtLSBUZXN0IHRpbWVzdGFtcHR6IHBhc3NpbmcgYW5kIG91dHB1dAogU0VMRUNUIEpTT05f VkFMVUUoanNvbmIgJ251bGwnLCAnJHRzJyBQQVNTSU5HIHRpbWVzdGFtcHR6ICcyMDE4LTAy LTIxIDEyOjM0OjU2ICsxMCcgQVMgdHMpOwogICAgICAgICAgIGpzb25fdmFsdWUgICAgICAg ICAgCkBAIC01MTQsNiArNjI5LDM2IEBAIFNFTEVDVCBKU09OX1ZBTFVFKGpzb25iICdudWxs JywgJyR0cycgUEFTU0lORyB0aW1lc3RhbXB0eiAnMjAxOC0wMi0yMSAxMjozNDo1NiArCiAg IjIwMTgtMDItMjFUMDI6MzQ6NTYrMDA6MDAiCiAoMSByb3cpCiAKKy0tIHRlc3QgZXJyb3Jz IGluIERFRkFVTFQgT04gRU1QVFkgZXhwcmVzc2lvbnMKK1NFTEVDVCBKU09OX1ZBTFVFKCcx Jzo6anNvbmIsICckLngnIFJFVFVSTklORyBpbnQKKyAgICAgICAgICAgICAgICAgIERFRkFV TFQgMSAvIHggT04gRU1QVFkKKyAgICAgICAgICAgICAgICAgIERFRkFVTFQgMiBPTiBFUlJP UikKK0ZST00gKFZBTFVFUyAoMTo6aW50KSwgKDApKSB4KHgpOworRVJST1I6ICB1bnNhZmUg REVGQVVMVCBPTiBFTVBUWSBleHByZXNzaW9ucyBhcmUgbm90IHN1cHBvcnRlZAorTElORSAy OiAgICAgICAgICAgICAgICAgICBERUZBVUxUIDEgLyB4IE9OIEVNUFRZCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXgorSElOVDogIFVzZSBFUlJPUiBPTiBFUlJPUiBj bGF1c2Ugb3IgdHJ5IHRvIHNpbXBsaWZ5IGV4cHJlc3Npb24gaW50byBjb25zdGFudC1saWtl IGZvcm0uCitTRUxFQ1QgSlNPTl9WQUxVRSgnMSc6Ompzb25iLCAnJC54JyBSRVRVUk5JTkcg aW50IERFRkFVTFQgLTEgT04gRU1QVFkpOworIGpzb25fdmFsdWUgCistLS0tLS0tLS0tLS0K KyAgICAgICAgIC0xCisoMSByb3cpCisKK1NFTEVDVCBKU09OX1ZBTFVFKCcxJzo6anNvbmIs ICckLngnIFJFVFVSTklORyBpbnQgREVGQVVMVCAnLTEnIE9OIEVNUFRZKTsKKyBqc29uX3Zh bHVlIAorLS0tLS0tLS0tLS0tCisgICAgICAgICAtMQorKDEgcm93KQorCitTRUxFQ1QgSlNP Tl9WQUxVRSgnMSc6Ompzb25iLCAnJC54JyBSRVRVUk5JTkcgaW50IERFRkFVTFQgJ2Vycicg T04gRU1QVFkpOworRVJST1I6ICBpbnZhbGlkIGlucHV0IHN5bnRheCBmb3IgdHlwZSBpbnRl Z2VyOiAiZXJyIgorTElORSAxOiAuLi5TT05fVkFMVUUoJzEnOjpqc29uYiwgJyQueCcgUkVU VVJOSU5HIGludCBERUZBVUxUICdlcnInIE9OIEUuLi4KKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCitTRUxFQ1QgSlNP Tl9WQUxVRSgnMSc6Ompzb25iLCAnJC54JyBSRVRVUk5JTkcgaW50IERFRkFVTFQgLTE6OmZs b2F0IE9OIEVNUFRZKTsKK0VSUk9SOiAgdW5zYWZlIERFRkFVTFQgT04gRU1QVFkgZXhwcmVz c2lvbnMgYXJlIG5vdCBzdXBwb3J0ZWQKK0xJTkUgMTogLi4uU09OX1ZBTFVFKCcxJzo6anNv bmIsICckLngnIFJFVFVSTklORyBpbnQgREVGQVVMVCAtMTo6ZmxvYXQgLi4uCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XgorSElOVDogIFVzZSBFUlJPUiBPTiBFUlJPUiBjbGF1c2Ugb3IgdHJ5IHRvIHNpbXBsaWZ5 IGV4cHJlc3Npb24gaW50byBjb25zdGFudC1saWtlIGZvcm0uCiAtLSBKU09OX1FVRVJZCiBT RUxFQ1QKIAlKU09OX1FVRVJZKGpzLCAnJCcpLApAQCAtODUyLDQ5ICs5OTcsMzUgQEAgRlJP TQogQ1JFQVRFIFRZUEUgc3FsanNvbmJfcmVjIEFTIChhIGludCwgdCB0ZXh0LCBqcyBqc29u LCBqYiBqc29uYiwganNhIGpzb25bXSk7CiBDUkVBVEUgVFlQRSBzcWxqc29uYl9yZWNhIEFT IChyZWNhIHNxbGpzb25iX3JlY1tdKTsKIFNFTEVDVCBKU09OX1FVRVJZKGpzb25iICdbeyJh IjogMSwgImIiOiAiZm9vIiwgInQiOiAiYWFhIiwgImpzIjogWzEsICIyIiwge31dLCAiamIi OiB7IngiOiBbMSwgIjIiLCB7fV19fSwgIHsiYSI6IDJ9XScsICckWzBdJyBSRVRVUk5JTkcg c3FsanNvbmJfcmVjKTsKLSAgICAgICAgICAgICAgICAgICAgIGpzb25fcXVlcnkgICAgICAg ICAgICAgICAgICAgICAgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQotICgxLGFhYSwiWzEsICIiMiIiLCB7fV0iLCJ7IiJ4IiI6IFsx LCAiIjIiIiwge31dfSIsKQotKDEgcm93KQotCitFUlJPUjogIHJldHVybmluZyB0eXBlIHNx bGpzb25iX3JlYyBpcyBub3Qgc3VwcG9ydGVkIGluIEpTT05fUVVFUlkoKQorTElORSAxOiBT RUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnW3siYSI6IDEsICJiIjogImZvbyIsICJ0IjogImFh YSIsICIuLi4KKyAgICAgICAgICAgICAgIF4KIFNFTEVDVCAqIEZST00gdW5uZXN0KChKU09O X1FVRVJZKGpzb25iICd7ImpzYSI6ICBbeyJhIjogMSwgImIiOiBbImZvbyJdfSwgeyJhIjog MiwgImMiOiB7fX0sIDEyM119JywgJyQnIFJFVFVSTklORyBzcWxqc29uYl9yZWMpKS5qc2Ep OwotICAgICAgICAgdW5uZXN0ICAgICAgICAgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K LSB7ImEiOiAxLCAiYiI6IFsiZm9vIl19Ci0geyJhIjogMiwgImMiOiB7fX0KLSAxMjMKLSgz IHJvd3MpCi0KK0VSUk9SOiAgcmV0dXJuaW5nIHR5cGUgc3FsanNvbmJfcmVjIGlzIG5vdCBz dXBwb3J0ZWQgaW4gSlNPTl9RVUVSWSgpCitMSU5FIDE6IFNFTEVDVCAqIEZST00gdW5uZXN0 KChKU09OX1FVRVJZKGpzb25iICd7ImpzYSI6ICBbeyJhIjogMSwgIi4uLgorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXgogU0VMRUNUICogRlJPTSB1bm5lc3QoKEpTT05fUVVF UlkoanNvbmIgJ3sicmVjYSI6IFt7ImEiOiAxLCAidCI6IFsiZm9vIiwgW11dfSwgeyJhIjog MiwgImpiIjogW3t9LCB0cnVlXX1dfScsICckJyBSRVRVUk5JTkcgc3FsanNvbmJfcmVjYSkp LnJlY2EpOwotIGEgfCAgICAgIHQgICAgICB8IGpzIHwgICAgIGpiICAgICB8IGpzYSAKLS0t LSstLS0tLS0tLS0tLS0tKy0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tCi0gMSB8IFsiZm9vIiwg W11dIHwgICAgfCAgICAgICAgICAgIHwgCi0gMiB8ICAgICAgICAgICAgIHwgICAgfCBbe30s IHRydWVdIHwgCi0oMiByb3dzKQotCitFUlJPUjogIHJldHVybmluZyB0eXBlIHNxbGpzb25i X3JlY2EgaXMgbm90IHN1cHBvcnRlZCBpbiBKU09OX1FVRVJZKCkKK0xJTkUgMTogU0VMRUNU ICogRlJPTSB1bm5lc3QoKEpTT05fUVVFUlkoanNvbmIgJ3sicmVjYSI6IFt7ImEiOiAxLCAi Li4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCiAtLSBFeHRlbnNpb246IGFy cmF5IHR5cGVzIHJldHVybmluZwogU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1sxLDIsbnVs bCwiMyJdJywgJyRbKl0nIFJFVFVSTklORyBpbnRbXSBXSVRIIFdSQVBQRVIpOwotICBqc29u X3F1ZXJ5ICAKLS0tLS0tLS0tLS0tLS0tCi0gezEsMixOVUxMLDN9Ci0oMSByb3cpCi0KK0VS Uk9SOiAgcmV0dXJuaW5nIHR5cGUgaW50ZWdlcltdIGlzIG5vdCBzdXBwb3J0ZWQgaW4gSlNP Tl9RVUVSWSgpCitMSU5FIDE6IFNFTEVDVCBKU09OX1FVRVJZKGpzb25iICdbMSwyLG51bGws IjMiXScsICckWypdJyBSRVRVUk5JTkcgaS4uLgorICAgICAgICAgICAgICAgXgogU0VMRUNU ICogRlJPTSB1bm5lc3QoSlNPTl9RVUVSWShqc29uYiAnW3siYSI6IDEsICJ0IjogWyJmb28i LCBbXV19LCB7ImEiOiAyLCAiamIiOiBbe30sIHRydWVdfV0nLCAnJCcgUkVUVVJOSU5HIHNx bGpzb25iX3JlY1tdKSk7Ci0gYSB8ICAgICAgdCAgICAgIHwganMgfCAgICAgamIgICAgIHwg anNhIAotLS0tKy0tLS0tLS0tLS0tLS0rLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0KLSAxIHwg WyJmb28iLCBbXV0gfCAgICB8ICAgICAgICAgICAgfCAKLSAyIHwgICAgICAgICAgICAgfCAg ICB8IFt7fSwgdHJ1ZV0gfCAKLSgyIHJvd3MpCi0KK0VSUk9SOiAgcmV0dXJuaW5nIHR5cGUg c3FsanNvbmJfcmVjW10gaXMgbm90IHN1cHBvcnRlZCBpbiBKU09OX1FVRVJZKCkKK0xJTkUg MTogU0VMRUNUICogRlJPTSB1bm5lc3QoSlNPTl9RVUVSWShqc29uYiAnW3siYSI6IDEsICJ0 IjogWyJmb28iLi4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KIC0tIEV4dGVu c2lvbjogZG9tYWluIHR5cGVzIHJldHVybmluZwogU0VMRUNUIEpTT05fUVVFUlkoanNvbmIg J3siYSI6IDF9JywgJyQuYScgUkVUVVJOSU5HIHNxbGpzb25iX2ludF9ub3RfbnVsbCk7Ci0g anNvbl9xdWVyeSAKLS0tLS0tLS0tLS0tLQotICAgICAgICAgIDEKLSgxIHJvdykKLQorRVJS T1I6ICByZXR1cm5pbmcgdHlwZSBzcWxqc29uYl9pbnRfbm90X251bGwgaXMgbm90IHN1cHBv cnRlZCBpbiBKU09OX1FVRVJZKCkKK0xJTkUgMTogU0VMRUNUIEpTT05fUVVFUlkoanNvbmIg J3siYSI6IDF9JywgJyQuYScgUkVUVVJOSU5HIHNxbGpzb25iLi4uCisgICAgICAgICAgICAg ICBeCiBTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAneyJhIjogMX0nLCAnJC5iJyBSRVRVUk5J Tkcgc3FsanNvbmJfaW50X25vdF9udWxsKTsKLUVSUk9SOiAgZG9tYWluIHNxbGpzb25iX2lu dF9ub3RfbnVsbCBkb2VzIG5vdCBhbGxvdyBudWxsIHZhbHVlcworRVJST1I6ICByZXR1cm5p bmcgdHlwZSBzcWxqc29uYl9pbnRfbm90X251bGwgaXMgbm90IHN1cHBvcnRlZCBpbiBKU09O X1FVRVJZKCkKK0xJTkUgMTogU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ3siYSI6IDF9Jywg JyQuYicgUkVUVVJOSU5HIHNxbGpzb25iLi4uCisgICAgICAgICAgICAgICBeCiAtLSBUZXN0 IHRpbWVzdGFtcHR6IHBhc3NpbmcgYW5kIG91dHB1dAogU0VMRUNUIEpTT05fUVVFUlkoanNv bmIgJ251bGwnLCAnJHRzJyBQQVNTSU5HIHRpbWVzdGFtcHR6ICcyMDE4LTAyLTIxIDEyOjM0 OjU2ICsxMCcgQVMgdHMpOwogICAgICAgICAganNvbl9xdWVyeSAgICAgICAgICAKQEAgLTEw MTksNiArMTE1MCwyNSBAQCBFUlJPUjogIGZ1bmN0aW9ucyBpbiBpbmRleCBleHByZXNzaW9u IG11c3QgYmUgbWFya2VkIElNTVVUQUJMRQogQ1JFQVRFIElOREVYIE9OIHRlc3RfanNvbmJf bXV0YWJpbGl0eSAoSlNPTl9RVUVSWShqcywgJyRbMSwgMCB0byAkLmEgPyAoQC5kYXRldGlt ZSgpID09ICR4KV0nIFBBU1NJTkcgJzEyOjM0Jzo6dGltZSBBUyB4KSk7CiBFUlJPUjogIGZ1 bmN0aW9ucyBpbiBpbmRleCBleHByZXNzaW9uIG11c3QgYmUgbWFya2VkIElNTVVUQUJMRQog Q1JFQVRFIElOREVYIE9OIHRlc3RfanNvbmJfbXV0YWJpbGl0eSAoSlNPTl9RVUVSWShqcywg JyRbMSwgJC5hID8gKEAuZGF0ZXRpbWUoIkhIOk1JIikgPT0gJHgpXScgUEFTU0lORyAnMTI6 MzQnOjp0aW1lIEFTIHgpKTsKK0NSRUFURSBJTkRFWCBPTiB0ZXN0X2pzb25iX211dGFiaWxp dHkgKEpTT05fVkFMVUUoanMsICckJyBSRVRVUk5JTkcgaW50KSk7IC0tIGltbXV0YWJsZQor Q1JFQVRFIElOREVYIE9OIHRlc3RfanNvbmJfbXV0YWJpbGl0eSAoSlNPTl9WQUxVRShqcywg JyQnIFJFVFVSTklORyBkYXRlKSk7CitFUlJPUjogIGZ1bmN0aW9ucyBpbiBpbmRleCBleHBy ZXNzaW9uIG11c3QgYmUgbWFya2VkIElNTVVUQUJMRQorQ1JFQVRFIElOREVYIE9OIHRlc3Rf anNvbmJfbXV0YWJpbGl0eSAoSlNPTl9WQUxVRShqcywgJyQnIFJFVFVSTklORyB0aW1lKSk7 CitFUlJPUjogIGZ1bmN0aW9ucyBpbiBpbmRleCBleHByZXNzaW9uIG11c3QgYmUgbWFya2Vk IElNTVVUQUJMRQorQ1JFQVRFIElOREVYIE9OIHRlc3RfanNvbmJfbXV0YWJpbGl0eSAoSlNP Tl9WQUxVRShqcywgJyQnIFJFVFVSTklORyB0aW1ldHopKTsKK0VSUk9SOiAgZnVuY3Rpb25z IGluIGluZGV4IGV4cHJlc3Npb24gbXVzdCBiZSBtYXJrZWQgSU1NVVRBQkxFCitDUkVBVEUg SU5ERVggT04gdGVzdF9qc29uYl9tdXRhYmlsaXR5IChKU09OX1ZBTFVFKGpzLCAnJCcgUkVU VVJOSU5HIHRpbWVzdGFtcCkpOworRVJST1I6ICBmdW5jdGlvbnMgaW4gaW5kZXggZXhwcmVz c2lvbiBtdXN0IGJlIG1hcmtlZCBJTU1VVEFCTEUKK0NSRUFURSBJTkRFWCBPTiB0ZXN0X2pz b25iX211dGFiaWxpdHkgKEpTT05fVkFMVUUoanMsICckJyBSRVRVUk5JTkcgdGltZXN0YW1w dHopKTsKK0VSUk9SOiAgZnVuY3Rpb25zIGluIGluZGV4IGV4cHJlc3Npb24gbXVzdCBiZSBt YXJrZWQgSU1NVVRBQkxFCitDUkVBVEUgSU5ERVggT04gdGVzdF9qc29uYl9tdXRhYmlsaXR5 IChKU09OX1ZBTFVFKGpzLCAnJC5kYXRldGltZSgpJykpOworRVJST1I6ICBmdW5jdGlvbnMg aW4gaW5kZXggZXhwcmVzc2lvbiBtdXN0IGJlIG1hcmtlZCBJTU1VVEFCTEUKK0NSRUFURSBJ TkRFWCBPTiB0ZXN0X2pzb25iX211dGFiaWxpdHkgKEpTT05fVkFMVUUoanMsICckLmRhdGV0 aW1lKClbKl1bMSwyXS4qKicpKTsKK0VSUk9SOiAgZnVuY3Rpb25zIGluIGluZGV4IGV4cHJl c3Npb24gbXVzdCBiZSBtYXJrZWQgSU1NVVRBQkxFCitDUkVBVEUgSU5ERVggT04gdGVzdF9q c29uYl9tdXRhYmlsaXR5IChKU09OX1ZBTFVFKGpzLCAnJHgnIFBBU1NJTkcgJzIwMjItMDgt MjUnOjpkYXRlIEFTIHgpKTsKK0VSUk9SOiAgZnVuY3Rpb25zIGluIGluZGV4IGV4cHJlc3Np b24gbXVzdCBiZSBtYXJrZWQgSU1NVVRBQkxFCitDUkVBVEUgSU5ERVggT04gdGVzdF9qc29u Yl9tdXRhYmlsaXR5IChKU09OX1ZBTFVFKGpzLCAnJC5kYXRldGltZSgpJyBSRVRVUk5JTkcg aW50KSk7IC0tIGltbXV0YWJsZQorQ1JFQVRFIElOREVYIE9OIHRlc3RfanNvbmJfbXV0YWJp bGl0eSAoSlNPTl9RVUVSWShqcywgJyQuZGF0ZXRpbWUoKScpKTsgLS0gaW1tdXRhYmxlCiBE Uk9QIFRBQkxFIHRlc3RfanNvbmJfbXV0YWJpbGl0eTsKIC0tIEpTT05fVEFCTEUKIC0tIFNo b3VsZCBmYWlsIChKU09OX1RBQkxFIGNhbiBiZSB1c2VkIG9ubHkgaW4gRlJPTSBjbGF1c2Up CkBAIC0xMDQ4LDcgKzExOTgsNiBAQCBTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoanNvbmIg JzEyMycsICckJwogKDEgcm93KQogCiAtLSBKU09OX1RBQkxFOiBiYXNpYyBmdW5jdGlvbmFs aXR5Ci1DUkVBVEUgRE9NQUlOIGpzb25iX3Rlc3RfZG9tYWluIEFTIHRleHQgQ0hFQ0sgKHZh bHVlIDw+ICdmb28nKTsKIFNFTEVDVCAqCiBGUk9NCiAJKFZBTFVFUwpAQCAtMTA2OSw3ICsx MjE4LDYgQEAgRlJPTQogCQkJImNoYXIoNCkiIGNoYXIoNCkgUEFUSCAnJCcsCiAJCQkiYm9v bCIgYm9vbCBQQVRIICckJywKIAkJCSJudW1lcmljIiBudW1lcmljIFBBVEggJyQnLAotCQkJ ImRvbWFpbiIganNvbmJfdGVzdF9kb21haW4gUEFUSCAnJCcsCiAJCQlqcyBqc29uIFBBVEgg JyQnLAogCQkJamIganNvbmIgUEFUSCAnJCcsCiAJCQlqc3QgdGV4dCAgICBGT1JNQVQgSlNP TiAgUEFUSCAnJCcsCkBAIC0xMDg1LDI5ICsxMjMzLDI2IEBAIEZST00KIAkJCWV4aXN0czQg dGV4dCBFWElTVFMgUEFUSCAnc3RyaWN0ICQuYWFhJyBGQUxTRSBPTiBFUlJPUiwKIAkJCWpz MiBqc29uIFBBVEggJyQnLAogCQkJanNiMncganNvbmIgUEFUSCAnJCcgV0lUSCBXUkFQUEVS LAotCQkJanNiMnEganNvbmIgUEFUSCAnJCcgT01JVCBRVU9URVMsCi0JCQlpYSBpbnRbXSBQ QVRIICckJywKLQkJCXRhIHRleHRbXSBQQVRIICckJywKLQkJCWpiYSBqc29uYltdIFBBVEgg JyQnCisJCQlqc2IycSBqc29uYiBQQVRIICckJyBPTUlUIFFVT1RFUwogCQkpCiAJKSBqdAog CU9OIHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBq cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGlkIHwgaWQy IHwgaW50IHwgIHRleHQgICB8IGNoYXIoNCkgfCBib29sIHwgbnVtZXJpYyB8IGRvbWFpbiAg fCAgICAgIGpzICAgICAgfCAgICAgIGpiICAgICAgfCAgICAganN0ICAgICAgfCBqc2MgIHwg anN2ICB8ICAgICBqc2IgICAgICB8ICAgICBqc2JxICAgICB8IGFhYSB8IGFhYTEgfCBleGlz dHMxIHwgZXhpc3RzMiB8IGV4aXN0czMgfCBleGlzdHM0IHwgICAgIGpzMiAgICAgIHwgICAg IGpzYjJ3ICAgICAgfCAgICBqc2IycSAgICAgfCBpYSB8IHRhIHwgamJhIAotLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0rLS0tLS0rLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLSstLS0tLS0rLS0tLS0tKy0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLS0tKy0tLS0tKy0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tLSstLS0tKy0tLS0rLS0tLS0KLSAxICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHwgIDEgfCAgIDEgfCAgIDEgfCAxICAgICAgIHwgMSAgICAgICB8ICAgICAgfCAgICAg ICAxIHwgMSAgICAgICB8IDEgICAgICAgICAgICB8IDEgICAgICAgICAgICB8IDEgICAgICAg ICAgICB8IDEgICAgfCAxICAgIHwgMSAgICAgICAgICAgIHwgMSAgICAgICAgICAgIHwgICAg IHwgICAgICB8IGYgICAgICAgfCAgICAgICAwIHwgICAgICAgICB8IGZhbHNlICAgfCAxICAg ICAgICAgICAgfCBbMV0gICAgICAgICAgICB8IDEgICAgICAgICAgICB8ICAgIHwgICAgfCAK LSBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgfCAgICAgfCAgICAgfCAg ICAgICAgIHwgICAgICAgICB8ICAgICAgfCAgICAgICAgIHwgICAgICAgICB8ICAgICAgICAg ICAgICB8ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICB8ICAgICAgfCAgICAgIHwgICAg ICAgICAgICAgIHwgICAgICAgICAgICAgIHwgICAgIHwgICAgICB8ICAgICAgICAgfCAgICAg ICAgIHwgICAgICAgICB8ICAgICAgICAgfCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAg ICB8ICAgICAgICAgICAgICB8ICAgIHwgICAgfCAKLSB7fSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHwgIDEgfCAgIDEgfCAgICAgfCAgICAgICAgIHwgICAgICAgICB8ICAgICAg fCAgICAgICAgIHwgICAgICAgICB8IHt9ICAgICAgICAgICB8IHt9ICAgICAgICAgICB8IHt9 ICAgICAgICAgICB8IHt9ICAgfCB7fSAgIHwge30gICAgICAgICAgIHwge30gICAgICAgICAg IHwgICAgIHwgICAgICB8IGYgICAgICAgfCAgICAgICAwIHwgICAgICAgICB8IGZhbHNlICAg fCB7fSAgICAgICAgICAgfCBbe31dICAgICAgICAgICB8IHt9ICAgICAgICAgICB8ICAgIHwg ICAgfCAKLSBbMSwgMS4yMywgIjIiLCAiYWFhYWFhYSIsICJmb28iLCBudWxsLCBmYWxzZSwg dHJ1ZSwgeyJhYWEiOiAxMjN9LCAiWzEsMl0iLCAiXCJzdHJcIiJdIHwgIDEgfCAgIDEgfCAg IDEgfCAxICAgICAgIHwgMSAgICAgICB8ICAgICAgfCAgICAgICAxIHwgMSAgICAgICB8IDEg ICAgICAgICAgICB8IDEgICAgICAgICAgICB8IDEgICAgICAgICAgICB8IDEgICAgfCAxICAg IHwgMSAgICAgICAgICAgIHwgMSAgICAgICAgICAgIHwgICAgIHwgICAgICB8IGYgICAgICAg fCAgICAgICAwIHwgICAgICAgICB8IGZhbHNlICAgfCAxICAgICAgICAgICAgfCBbMV0gICAg ICAgICAgICB8IDEgICAgICAgICAgICB8ICAgIHwgICAgfCAKLSBbMSwgMS4yMywgIjIiLCAi YWFhYWFhYSIsICJmb28iLCBudWxsLCBmYWxzZSwgdHJ1ZSwgeyJhYWEiOiAxMjN9LCAiWzEs Ml0iLCAiXCJzdHJcIiJdIHwgIDIgfCAgIDIgfCAgIDEgfCAxLjIzICAgIHwgMS4yMyAgICB8 ICAgICAgfCAgICAxLjIzIHwgMS4yMyAgICB8IDEuMjMgICAgICAgICB8IDEuMjMgICAgICAg ICB8IDEuMjMgICAgICAgICB8IDEuMjMgfCAxLjIzIHwgMS4yMyAgICAgICAgIHwgMS4yMyAg ICAgICAgIHwgICAgIHwgICAgICB8IGYgICAgICAgfCAgICAgICAwIHwgICAgICAgICB8IGZh bHNlICAgfCAxLjIzICAgICAgICAgfCBbMS4yM10gICAgICAgICB8IDEuMjMgICAgICAgICB8 ICAgIHwgICAgfCAKLSBbMSwgMS4yMywgIjIiLCAiYWFhYWFhYSIsICJmb28iLCBudWxsLCBm YWxzZSwgdHJ1ZSwgeyJhYWEiOiAxMjN9LCAiWzEsMl0iLCAiXCJzdHJcIiJdIHwgIDMgfCAg IDMgfCAgIDIgfCAyICAgICAgIHwgMiAgICAgICB8ICAgICAgfCAgICAgICAyIHwgMiAgICAg ICB8ICIyIiAgICAgICAgICB8ICIyIiAgICAgICAgICB8ICIyIiAgICAgICAgICB8ICIyIiAg fCAiMiIgIHwgIjIiICAgICAgICAgIHwgMiAgICAgICAgICAgIHwgICAgIHwgICAgICB8IGYg ICAgICAgfCAgICAgICAwIHwgICAgICAgICB8IGZhbHNlICAgfCAiMiIgICAgICAgICAgfCBb IjIiXSAgICAgICAgICB8IDIgICAgICAgICAgICB8ICAgIHwgICAgfCAKLSBbMSwgMS4yMywg IjIiLCAiYWFhYWFhYSIsICJmb28iLCBudWxsLCBmYWxzZSwgdHJ1ZSwgeyJhYWEiOiAxMjN9 LCAiWzEsMl0iLCAiXCJzdHJcIiJdIHwgIDQgfCAgIDQgfCAgICAgfCBhYWFhYWFhIHwgYWFh YSAgICB8ICAgICAgfCAgICAgICAgIHwgYWFhYWFhYSB8ICJhYWFhYWFhIiAgICB8ICJhYWFh YWFhIiAgICB8ICJhYWFhYWFhIiAgICB8ICJhYWEgfCAiYWFhIHwgImFhYWFhYWEiICAgIHwg ICAgICAgICAgICAgIHwgICAgIHwgICAgICB8IGYgICAgICAgfCAgICAgICAwIHwgICAgICAg ICB8IGZhbHNlICAgfCAiYWFhYWFhYSIgICAgfCBbImFhYWFhYWEiXSAgICB8ICAgICAgICAg ICAgICB8ICAgIHwgICAgfCAKLSBbMSwgMS4yMywgIjIiLCAiYWFhYWFhYSIsICJmb28iLCBu dWxsLCBmYWxzZSwgdHJ1ZSwgeyJhYWEiOiAxMjN9LCAiWzEsMl0iLCAiXCJzdHJcIiJdIHwg IDUgfCAgIDUgfCAgICAgfCBmb28gICAgIHwgZm9vICAgICB8ICAgICAgfCAgICAgICAgIHwg ICAgICAgICB8ICJmb28iICAgICAgICB8ICJmb28iICAgICAgICB8ICJmb28iICAgICAgICB8 ICJmb28gfCAiZm9vIHwgImZvbyIgICAgICAgIHwgICAgICAgICAgICAgIHwgICAgIHwgICAg ICB8IGYgICAgICAgfCAgICAgICAwIHwgICAgICAgICB8IGZhbHNlICAgfCAiZm9vIiAgICAg ICAgfCBbImZvbyJdICAgICAgICB8ICAgICAgICAgICAgICB8ICAgIHwgICAgfCAKLSBbMSwg MS4yMywgIjIiLCAiYWFhYWFhYSIsICJmb28iLCBudWxsLCBmYWxzZSwgdHJ1ZSwgeyJhYWEi OiAxMjN9LCAiWzEsMl0iLCAiXCJzdHJcIiJdIHwgIDYgfCAgIDYgfCAgICAgfCAgICAgICAg IHwgICAgICAgICB8ICAgICAgfCAgICAgICAgIHwgICAgICAgICB8IG51bGwgICAgICAgICB8 IG51bGwgICAgICAgICB8IG51bGwgICAgICAgICB8IG51bGwgfCBudWxsIHwgbnVsbCAgICAg ICAgIHwgbnVsbCAgICAgICAgIHwgICAgIHwgICAgICB8IGYgICAgICAgfCAgICAgICAwIHwg ICAgICAgICB8IGZhbHNlICAgfCBudWxsICAgICAgICAgfCBbbnVsbF0gICAgICAgICB8IG51 bGwgICAgICAgICB8ICAgIHwgICAgfCAKLSBbMSwgMS4yMywgIjIiLCAiYWFhYWFhYSIsICJm b28iLCBudWxsLCBmYWxzZSwgdHJ1ZSwgeyJhYWEiOiAxMjN9LCAiWzEsMl0iLCAiXCJzdHJc IiJdIHwgIDcgfCAgIDcgfCAgIDAgfCBmYWxzZSAgIHwgZmFscyAgICB8IGYgICAgfCAgICAg ICAgIHwgZmFsc2UgICB8IGZhbHNlICAgICAgICB8IGZhbHNlICAgICAgICB8IGZhbHNlICAg ICAgICB8IGZhbHMgfCBmYWxzIHwgZmFsc2UgICAgICAgIHwgZmFsc2UgICAgICAgIHwgICAg IHwgICAgICB8IGYgICAgICAgfCAgICAgICAwIHwgICAgICAgICB8IGZhbHNlICAgfCBmYWxz ZSAgICAgICAgfCBbZmFsc2VdICAgICAgICB8IGZhbHNlICAgICAgICB8ICAgIHwgICAgfCAK LSBbMSwgMS4yMywgIjIiLCAiYWFhYWFhYSIsICJmb28iLCBudWxsLCBmYWxzZSwgdHJ1ZSwg eyJhYWEiOiAxMjN9LCAiWzEsMl0iLCAiXCJzdHJcIiJdIHwgIDggfCAgIDggfCAgIDEgfCB0 cnVlICAgIHwgdHJ1ZSAgICB8IHQgICAgfCAgICAgICAgIHwgdHJ1ZSAgICB8IHRydWUgICAg ICAgICB8IHRydWUgICAgICAgICB8IHRydWUgICAgICAgICB8IHRydWUgfCB0cnVlIHwgdHJ1 ZSAgICAgICAgIHwgdHJ1ZSAgICAgICAgIHwgICAgIHwgICAgICB8IGYgICAgICAgfCAgICAg ICAwIHwgICAgICAgICB8IGZhbHNlICAgfCB0cnVlICAgICAgICAgfCBbdHJ1ZV0gICAgICAg ICB8IHRydWUgICAgICAgICB8ICAgIHwgICAgfCAKLSBbMSwgMS4yMywgIjIiLCAiYWFhYWFh YSIsICJmb28iLCBudWxsLCBmYWxzZSwgdHJ1ZSwgeyJhYWEiOiAxMjN9LCAiWzEsMl0iLCAi XCJzdHJcIiJdIHwgIDkgfCAgIDkgfCAgICAgfCAgICAgICAgIHwgICAgICAgICB8ICAgICAg fCAgICAgICAgIHwgICAgICAgICB8IHsiYWFhIjogMTIzfSB8IHsiYWFhIjogMTIzfSB8IHsi YWFhIjogMTIzfSB8IHsiYWEgfCB7ImFhIHwgeyJhYWEiOiAxMjN9IHwgeyJhYWEiOiAxMjN9 IHwgMTIzIHwgIDEyMyB8IHQgICAgICAgfCAgICAgICAxIHwgICAgICAgMSB8IHRydWUgICAg fCB7ImFhYSI6IDEyM30gfCBbeyJhYWEiOiAxMjN9XSB8IHsiYWFhIjogMTIzfSB8ICAgIHwg ICAgfCAKLSBbMSwgMS4yMywgIjIiLCAiYWFhYWFhYSIsICJmb28iLCBudWxsLCBmYWxzZSwg dHJ1ZSwgeyJhYWEiOiAxMjN9LCAiWzEsMl0iLCAiXCJzdHJcIiJdIHwgMTAgfCAgMTAgfCAg ICAgfCBbMSwyXSAgIHwgWzEsMiAgICB8ICAgICAgfCAgICAgICAgIHwgWzEsMl0gICB8ICJb MSwyXSIgICAgICB8ICJbMSwyXSIgICAgICB8ICJbMSwyXSIgICAgICB8ICJbMSwgfCAiWzEs IHwgIlsxLDJdIiAgICAgIHwgWzEsIDJdICAgICAgIHwgICAgIHwgICAgICB8IGYgICAgICAg fCAgICAgICAwIHwgICAgICAgICB8IGZhbHNlICAgfCAiWzEsMl0iICAgICAgfCBbIlsxLDJd Il0gICAgICB8IFsxLCAyXSAgICAgICB8ICAgIHwgICAgfCAKLSBbMSwgMS4yMywgIjIiLCAi YWFhYWFhYSIsICJmb28iLCBudWxsLCBmYWxzZSwgdHJ1ZSwgeyJhYWEiOiAxMjN9LCAiWzEs Ml0iLCAiXCJzdHJcIiJdIHwgMTEgfCAgMTEgfCAgICAgfCAic3RyIiAgIHwgInN0ciAgICB8 ICAgICAgfCAgICAgICAgIHwgInN0ciIgICB8ICJcInN0clwiIiAgICB8ICJcInN0clwiIiAg ICB8ICJcInN0clwiIiAgICB8ICJcInMgfCAiXCJzIHwgIlwic3RyXCIiICAgIHwgInN0ciIg ICAgICAgIHwgICAgIHwgICAgICB8IGYgICAgICAgfCAgICAgICAwIHwgICAgICAgICB8IGZh bHNlICAgfCAiXCJzdHJcIiIgICAgfCBbIlwic3RyXCIiXSAgICB8ICJzdHIiICAgICAgICB8 ICAgIHwgICAgfCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGpzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaWQgfCBp ZDIgfCBpbnQgfCAgdGV4dCAgIHwgY2hhcig0KSB8IGJvb2wgfCBudW1lcmljIHwgICAgICBq cyAgICAgIHwgICAgICBqYiAgICAgIHwgICAgIGpzdCAgICAgIHwganNjICB8IGpzdiAgfCAg ICAganNiICAgICAgfCAgICAganNicSAgICAgfCBhYWEgfCBhYWExIHwgZXhpc3RzMSB8IGV4 aXN0czIgfCBleGlzdHMzIHwgZXhpc3RzNCB8ICAgICBqczIgICAgICB8ICAgICBqc2IydyAg ICAgIHwgICAganNiMnEgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0rLS0tLS0rLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tKy0tLS0tLSst LS0tLS0rLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0rLS0tLS0rLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tCisgMSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB8ICAxIHwgICAxIHwgICAxIHwgMSAgICAgICB8IDEgICAgICAgfCAgICAgIHwg ICAgICAgMSB8IDEgICAgICAgICAgICB8IDEgICAgICAgICAgICB8IDEgICAgICAgICAgICB8 IDEgICAgfCAxICAgIHwgMSAgICAgICAgICAgIHwgMSAgICAgICAgICAgIHwgICAgIHwgICAg ICB8IGYgICAgICAgfCAgICAgICAwIHwgICAgICAgICB8IGZhbHNlICAgfCAxICAgICAgICAg ICAgfCBbMV0gICAgICAgICAgICB8IDEKKyBbXSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHwgICAgfCAgICAgfCAgICAgfCAgICAgICAgIHwgICAgICAgICB8ICAgICAgfCAgICAg ICAgIHwgICAgICAgICAgICAgIHwgICAgICAgICAgICAgIHwgICAgICAgICAgICAgIHwgICAg ICB8ICAgICAgfCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgfCAgICAgfCAgICAgIHwg ICAgICAgICB8ICAgICAgICAgfCAgICAgICAgIHwgICAgICAgICB8ICAgICAgICAgICAgICB8 ICAgICAgICAgICAgICAgIHwgCisge30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8 ICAxIHwgICAxIHwgICAgIHwgICAgICAgICB8ICAgICAgICAgfCAgICAgIHwgICAgICAgICB8 IHt9ICAgICAgICAgICB8IHt9ICAgICAgICAgICB8IHt9ICAgICAgICAgICB8IHt9ICAgfCB7 fSAgIHwge30gICAgICAgICAgIHwge30gICAgICAgICAgIHwgICAgIHwgICAgICB8IGYgICAg ICAgfCAgICAgICAwIHwgICAgICAgICB8IGZhbHNlICAgfCB7fSAgICAgICAgICAgfCBbe31d ICAgICAgICAgICB8IHt9CisgWzEsIDEuMjMsICIyIiwgImFhYWFhYWEiLCAiZm9vIiwgbnVs bCwgZmFsc2UsIHRydWUsIHsiYWFhIjogMTIzfSwgIlsxLDJdIiwgIlwic3RyXCIiXSB8ICAx IHwgICAxIHwgICAxIHwgMSAgICAgICB8IDEgICAgICAgfCAgICAgIHwgICAgICAgMSB8IDEg ICAgICAgICAgICB8IDEgICAgICAgICAgICB8IDEgICAgICAgICAgICB8IDEgICAgfCAxICAg IHwgMSAgICAgICAgICAgIHwgMSAgICAgICAgICAgIHwgICAgIHwgICAgICB8IGYgICAgICAg fCAgICAgICAwIHwgICAgICAgICB8IGZhbHNlICAgfCAxICAgICAgICAgICAgfCBbMV0gICAg ICAgICAgICB8IDEKKyBbMSwgMS4yMywgIjIiLCAiYWFhYWFhYSIsICJmb28iLCBudWxsLCBm YWxzZSwgdHJ1ZSwgeyJhYWEiOiAxMjN9LCAiWzEsMl0iLCAiXCJzdHJcIiJdIHwgIDIgfCAg IDIgfCAgIDEgfCAxLjIzICAgIHwgMS4yMyAgICB8ICAgICAgfCAgICAxLjIzIHwgMS4yMyAg ICAgICAgIHwgMS4yMyAgICAgICAgIHwgMS4yMyAgICAgICAgIHwgMS4yMyB8IDEuMjMgfCAx LjIzICAgICAgICAgfCAxLjIzICAgICAgICAgfCAgICAgfCAgICAgIHwgZiAgICAgICB8ICAg ICAgIDAgfCAgICAgICAgIHwgZmFsc2UgICB8IDEuMjMgICAgICAgICB8IFsxLjIzXSAgICAg ICAgIHwgMS4yMworIFsxLCAxLjIzLCAiMiIsICJhYWFhYWFhIiwgImZvbyIsIG51bGwsIGZh bHNlLCB0cnVlLCB7ImFhYSI6IDEyM30sICJbMSwyXSIsICJcInN0clwiIl0gfCAgMyB8ICAg MyB8ICAgMiB8IDIgICAgICAgfCAyICAgICAgIHwgICAgICB8ICAgICAgIDIgfCAiMiIgICAg ICAgICAgfCAiMiIgICAgICAgICAgfCAiMiIgICAgICAgICAgfCAiMiIgIHwgIjIiICB8ICIy IiAgICAgICAgICB8IDIgICAgICAgICAgICB8ICAgICB8ICAgICAgfCBmICAgICAgIHwgICAg ICAgMCB8ICAgICAgICAgfCBmYWxzZSAgIHwgIjIiICAgICAgICAgIHwgWyIyIl0gICAgICAg ICAgfCAyCisgWzEsIDEuMjMsICIyIiwgImFhYWFhYWEiLCAiZm9vIiwgbnVsbCwgZmFsc2Us IHRydWUsIHsiYWFhIjogMTIzfSwgIlsxLDJdIiwgIlwic3RyXCIiXSB8ICA0IHwgICA0IHwg ICAgIHwgYWFhYWFhYSB8IGFhYWEgICAgfCAgICAgIHwgICAgICAgICB8ICJhYWFhYWFhIiAg ICB8ICJhYWFhYWFhIiAgICB8ICJhYWFhYWFhIiAgICB8ICJhYWEgfCAiYWFhIHwgImFhYWFh YWEiICAgIHwgICAgICAgICAgICAgIHwgICAgIHwgICAgICB8IGYgICAgICAgfCAgICAgICAw IHwgICAgICAgICB8IGZhbHNlICAgfCAiYWFhYWFhYSIgICAgfCBbImFhYWFhYWEiXSAgICB8 IAorIFsxLCAxLjIzLCAiMiIsICJhYWFhYWFhIiwgImZvbyIsIG51bGwsIGZhbHNlLCB0cnVl LCB7ImFhYSI6IDEyM30sICJbMSwyXSIsICJcInN0clwiIl0gfCAgNSB8ICAgNSB8ICAgICB8 IGZvbyAgICAgfCBmb28gICAgIHwgICAgICB8ICAgICAgICAgfCAiZm9vIiAgICAgICAgfCAi Zm9vIiAgICAgICAgfCAiZm9vIiAgICAgICAgfCAiZm9vIHwgImZvbyB8ICJmb28iICAgICAg ICB8ICAgICAgICAgICAgICB8ICAgICB8ICAgICAgfCBmICAgICAgIHwgICAgICAgMCB8ICAg ICAgICAgfCBmYWxzZSAgIHwgImZvbyIgICAgICAgIHwgWyJmb28iXSAgICAgICAgfCAKKyBb MSwgMS4yMywgIjIiLCAiYWFhYWFhYSIsICJmb28iLCBudWxsLCBmYWxzZSwgdHJ1ZSwgeyJh YWEiOiAxMjN9LCAiWzEsMl0iLCAiXCJzdHJcIiJdIHwgIDYgfCAgIDYgfCAgICAgfCAgICAg ICAgIHwgICAgICAgICB8ICAgICAgfCAgICAgICAgIHwgbnVsbCAgICAgICAgIHwgbnVsbCAg ICAgICAgIHwgbnVsbCAgICAgICAgIHwgbnVsbCB8IG51bGwgfCBudWxsICAgICAgICAgfCBu dWxsICAgICAgICAgfCAgICAgfCAgICAgIHwgZiAgICAgICB8ICAgICAgIDAgfCAgICAgICAg IHwgZmFsc2UgICB8IG51bGwgICAgICAgICB8IFtudWxsXSAgICAgICAgIHwgbnVsbAorIFsx LCAxLjIzLCAiMiIsICJhYWFhYWFhIiwgImZvbyIsIG51bGwsIGZhbHNlLCB0cnVlLCB7ImFh YSI6IDEyM30sICJbMSwyXSIsICJcInN0clwiIl0gfCAgNyB8ICAgNyB8ICAgMCB8IGZhbHNl ICAgfCBmYWxzICAgIHwgZiAgICB8ICAgICAgICAgfCBmYWxzZSAgICAgICAgfCBmYWxzZSAg ICAgICAgfCBmYWxzZSAgICAgICAgfCBmYWxzIHwgZmFscyB8IGZhbHNlICAgICAgICB8IGZh bHNlICAgICAgICB8ICAgICB8ICAgICAgfCBmICAgICAgIHwgICAgICAgMCB8ICAgICAgICAg fCBmYWxzZSAgIHwgZmFsc2UgICAgICAgIHwgW2ZhbHNlXSAgICAgICAgfCBmYWxzZQorIFsx LCAxLjIzLCAiMiIsICJhYWFhYWFhIiwgImZvbyIsIG51bGwsIGZhbHNlLCB0cnVlLCB7ImFh YSI6IDEyM30sICJbMSwyXSIsICJcInN0clwiIl0gfCAgOCB8ICAgOCB8ICAgMSB8IHRydWUg ICAgfCB0cnVlICAgIHwgdCAgICB8ICAgICAgICAgfCB0cnVlICAgICAgICAgfCB0cnVlICAg ICAgICAgfCB0cnVlICAgICAgICAgfCB0cnVlIHwgdHJ1ZSB8IHRydWUgICAgICAgICB8IHRy dWUgICAgICAgICB8ICAgICB8ICAgICAgfCBmICAgICAgIHwgICAgICAgMCB8ICAgICAgICAg fCBmYWxzZSAgIHwgdHJ1ZSAgICAgICAgIHwgW3RydWVdICAgICAgICAgfCB0cnVlCisgWzEs IDEuMjMsICIyIiwgImFhYWFhYWEiLCAiZm9vIiwgbnVsbCwgZmFsc2UsIHRydWUsIHsiYWFh IjogMTIzfSwgIlsxLDJdIiwgIlwic3RyXCIiXSB8ICA5IHwgICA5IHwgICAgIHwgICAgICAg ICB8ICAgICAgICAgfCAgICAgIHwgICAgICAgICB8IHsiYWFhIjogMTIzfSB8IHsiYWFhIjog MTIzfSB8IHsiYWFhIjogMTIzfSB8IHsiYWEgfCB7ImFhIHwgeyJhYWEiOiAxMjN9IHwgeyJh YWEiOiAxMjN9IHwgMTIzIHwgIDEyMyB8IHQgICAgICAgfCAgICAgICAxIHwgICAgICAgMSB8 IHRydWUgICAgfCB7ImFhYSI6IDEyM30gfCBbeyJhYWEiOiAxMjN9XSB8IHsiYWFhIjogMTIz fQorIFsxLCAxLjIzLCAiMiIsICJhYWFhYWFhIiwgImZvbyIsIG51bGwsIGZhbHNlLCB0cnVl LCB7ImFhYSI6IDEyM30sICJbMSwyXSIsICJcInN0clwiIl0gfCAxMCB8ICAxMCB8ICAgICB8 IFsxLDJdICAgfCBbMSwyICAgIHwgICAgICB8ICAgICAgICAgfCAiWzEsMl0iICAgICAgfCAi WzEsMl0iICAgICAgfCAiWzEsMl0iICAgICAgfCAiWzEsIHwgIlsxLCB8ICJbMSwyXSIgICAg ICB8IFsxLCAyXSAgICAgICB8ICAgICB8ICAgICAgfCBmICAgICAgIHwgICAgICAgMCB8ICAg ICAgICAgfCBmYWxzZSAgIHwgIlsxLDJdIiAgICAgIHwgWyJbMSwyXSJdICAgICAgfCBbMSwg Ml0KKyBbMSwgMS4yMywgIjIiLCAiYWFhYWFhYSIsICJmb28iLCBudWxsLCBmYWxzZSwgdHJ1 ZSwgeyJhYWEiOiAxMjN9LCAiWzEsMl0iLCAiXCJzdHJcIiJdIHwgMTEgfCAgMTEgfCAgICAg fCAic3RyIiAgIHwgInN0ciAgICB8ICAgICAgfCAgICAgICAgIHwgIlwic3RyXCIiICAgIHwg Ilwic3RyXCIiICAgIHwgIlwic3RyXCIiICAgIHwgIlwicyB8ICJcInMgfCAiXCJzdHJcIiIg ICAgfCAic3RyIiAgICAgICAgfCAgICAgfCAgICAgIHwgZiAgICAgICB8ICAgICAgIDAgfCAg ICAgICAgIHwgZmFsc2UgICB8ICJcInN0clwiIiAgICB8IFsiXCJzdHJcIiJdICAgIHwgInN0 ciIKICgxNCByb3dzKQogCiAtLSBKU09OX1RBQkxFOiBUZXN0IGJhY2t3YXJkIHBhcnNpbmcK QEAgLTExMjMsNyArMTI2OCw2IEBAIFNFTEVDVCAqIEZST00KIAkJCSJjaGFyKDQpIiBjaGFy KDQpIFBBVEggJyQnLAogCQkJImJvb2wiIGJvb2wgUEFUSCAnJCcsCiAJCQkibnVtZXJpYyIg bnVtZXJpYyBQQVRIICckJywKLQkJCSJkb21haW4iIGpzb25iX3Rlc3RfZG9tYWluIFBBVEgg JyQnLAogCQkJanMganNvbiBQQVRIICckJywKIAkJCWpiIGpzb25iIFBBVEggJyQnLAogCQkJ anN0IHRleHQgICAgRk9STUFUIEpTT04gIFBBVEggJyQnLApAQCAtMTEzOSw5ICsxMjgzLDYg QEAgU0VMRUNUICogRlJPTQogCQkJanMyIGpzb24gUEFUSCAnJCcsCiAJCQlqc2IydyBqc29u YiBQQVRIICckJyBXSVRIIFdSQVBQRVIsCiAJCQlqc2IycSBqc29uYiBQQVRIICckJyBPTUlU IFFVT1RFUywKLQkJCWlhIGludFtdIFBBVEggJyQnLAotCQkJdGEgdGV4dFtdIFBBVEggJyQn LAotCQkJamJhIGpzb25iW10gUEFUSCAnJCcsCiAJCQlORVNURUQgUEFUSCAnJFsxXScgQVMg cDEgQ09MVU1OUyAoCiAJCQkJYTEgaW50LAogCQkJCU5FU1RFRCBQQVRIICckWypdJyBBUyAi cDEgMSIgQ09MVU1OUyAoCkBAIC0xMTY4LDcgKzEzMDksNiBAQCBDUkVBVEUgT1IgUkVQTEFD RSBWSUVXIHB1YmxpYy5qc29uYl90YWJsZV92aWV3IEFTCiAgICAgImpzb25fdGFibGUiLiJj aGFyKDQpIiwKICAgICAianNvbl90YWJsZSIuYm9vbCwKICAgICAianNvbl90YWJsZSIuIm51 bWVyaWMiLAotICAgICJqc29uX3RhYmxlIi5kb21haW4sCiAgICAgImpzb25fdGFibGUiLmpz LAogICAgICJqc29uX3RhYmxlIi5qYiwKICAgICAianNvbl90YWJsZSIuanN0LApAQCAtMTE4 NCw5ICsxMzI0LDYgQEAgQ1JFQVRFIE9SIFJFUExBQ0UgVklFVyBwdWJsaWMuanNvbmJfdGFi bGVfdmlldyBBUwogICAgICJqc29uX3RhYmxlIi5qczIsCiAgICAgImpzb25fdGFibGUiLmpz YjJ3LAogICAgICJqc29uX3RhYmxlIi5qc2IycSwKLSAgICAianNvbl90YWJsZSIuaWEsCi0g ICAgImpzb25fdGFibGUiLnRhLAotICAgICJqc29uX3RhYmxlIi5qYmEsCiAgICAgImpzb25f dGFibGUiLmExLAogICAgICJqc29uX3RhYmxlIi5iMSwKICAgICAianNvbl90YWJsZSIuYTEx LApAQCAtMTIwNSw3ICsxMzQyLDYgQEAgQ1JFQVRFIE9SIFJFUExBQ0UgVklFVyBwdWJsaWMu anNvbmJfdGFibGVfdmlldyBBUwogICAgICAgICAgICAgICAgICJjaGFyKDQpIiBjaGFyYWN0 ZXIoNCkgUEFUSCAnJCcsCiAgICAgICAgICAgICAgICAgYm9vbCBib29sZWFuIFBBVEggJyQn LAogICAgICAgICAgICAgICAgICJudW1lcmljIiBudW1lcmljIFBBVEggJyQnLAotICAgICAg ICAgICAgICAgIGRvbWFpbiBqc29uYl90ZXN0X2RvbWFpbiBQQVRIICckJywKICAgICAgICAg ICAgICAgICBqcyBqc29uIFBBVEggJyQnLAogICAgICAgICAgICAgICAgIGpiIGpzb25iIFBB VEggJyQnLAogICAgICAgICAgICAgICAgIGpzdCB0ZXh0IEZPUk1BVCBKU09OIFBBVEggJyQn LApAQCAtMTIyMSw5ICsxMzU3LDYgQEAgQ1JFQVRFIE9SIFJFUExBQ0UgVklFVyBwdWJsaWMu anNvbmJfdGFibGVfdmlldyBBUwogICAgICAgICAgICAgICAgIGpzMiBqc29uIFBBVEggJyQn LAogICAgICAgICAgICAgICAgIGpzYjJ3IGpzb25iIFBBVEggJyQnIFdJVEggVU5DT05ESVRJ T05BTCBXUkFQUEVSLAogICAgICAgICAgICAgICAgIGpzYjJxIGpzb25iIFBBVEggJyQnIE9N SVQgUVVPVEVTLAotICAgICAgICAgICAgICAgIGlhIGludGVnZXJbXSBQQVRIICckJywKLSAg ICAgICAgICAgICAgICB0YSB0ZXh0W10gUEFUSCAnJCcsCi0gICAgICAgICAgICAgICAgamJh IGpzb25iW10gUEFUSCAnJCcsCiAgICAgICAgICAgICAgICAgTkVTVEVEIFBBVEggJyRbMV0n IEFTIHAxCiAgICAgICAgICAgICAgICAgQ09MVU1OUyAoCiAgICAgICAgICAgICAgICAgICAg IGExIGludGVnZXIgUEFUSCAnJC4iYTEiJywKQEAgLTEyNDgsMTUgKzEzODEsMTQgQEAgQ1JF QVRFIE9SIFJFUExBQ0UgVklFVyBwdWJsaWMuanNvbmJfdGFibGVfdmlldyBBUwogICAgICAg ICAgICAgUExBTiAoanNvbl90YWJsZV9wYXRoXzEgT1VURVIgKChwMSBPVVRFUiAicDEgMSIp IFVOSU9OIChwMiBPVVRFUiAoInAyOjEiIFVOSU9OIHAyMikpKSkKICAgICAgICAgKQogRVhQ TEFJTiAoQ09TVFMgT0ZGLCBWRVJCT1NFKSBTRUxFQ1QgKiBGUk9NIGpzb25iX3RhYmxlX3Zp ZXc7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIFRhYmxlIEZ1bmN0aW9uIFNjYW4gb24gImpz b25fdGFibGUiCi0gICBPdXRwdXQ6ICJqc29uX3RhYmxlIi5pZCwgImpzb25fdGFibGUiLmlk MiwgImpzb25fdGFibGUiLiJpbnQiLCAianNvbl90YWJsZSIudGV4dCwgImpzb25fdGFibGUi LiJjaGFyKDQpIiwgImpzb25fdGFibGUiLmJvb2wsICJqc29uX3RhYmxlIi4ibnVtZXJpYyIs ICJqc29uX3RhYmxlIi5kb21haW4sICJqc29uX3RhYmxlIi5qcywgImpzb25fdGFibGUiLmpi LCAianNvbl90YWJsZSIuanN0LCAianNvbl90YWJsZSIuanNjLCAianNvbl90YWJsZSIuanN2 LCAianNvbl90YWJsZSIuanNiLCAianNvbl90YWJsZSIuanNicSwgImpzb25fdGFibGUiLmFh YSwgImpzb25fdGFibGUiLmFhYTEsICJqc29uX3RhYmxlIi5leGlzdHMxLCAianNvbl90YWJs ZSIuZXhpc3RzMiwgImpzb25fdGFibGUiLmV4aXN0czMsICJqc29uX3RhYmxlIi5qczIsICJq c29uX3RhYmxlIi5qc2IydywgImpzb25fdGFibGUiLmpzYjJxLCAianNvbl90YWJsZSIuaWEs ICJqc29uX3RhYmxlIi50YSwgImpzb25fdGFibGUiLmpiYSwgImpzb25fdGFibGUiLmExLCAi anNvbl90YWJsZSIuYjEsICJqc29uX3RhYmxlIi5hMTEsICJqc29uX3RhYmxlIi5hMjEsICJq c29uX3RhYmxlIi5hMjIKLSAgIFRhYmxlIEZ1bmN0aW9uIENhbGw6IEpTT05fVEFCTEUoJ251 bGwnOjpqc29uYiwgJyRbKl0nIEFTIGpzb25fdGFibGVfcGF0aF8xIFBBU1NJTkcgMyBBUyBh LCAnImZvbyInOjpqc29uYiBBUyAiYiBjIiBDT0xVTU5TIChpZCBGT1IgT1JESU5BTElUWSwg aWQyIEZPUiBPUkRJTkFMSVRZLCAiaW50IiBpbnRlZ2VyIFBBVEggJyQnLCB0ZXh0IHRleHQg UEFUSCAnJCcsICJjaGFyKDQpIiBjaGFyYWN0ZXIoNCkgUEFUSCAnJCcsIGJvb2wgYm9vbGVh biBQQVRIICckJywgIm51bWVyaWMiIG51bWVyaWMgUEFUSCAnJCcsIGRvbWFpbiBqc29uYl90 ZXN0X2RvbWFpbiBQQVRIICckJywganMganNvbiBQQVRIICckJywgamIganNvbmIgUEFUSCAn JCcsIGpzdCB0ZXh0IEZPUk1BVCBKU09OIFBBVEggJyQnLCBqc2MgY2hhcmFjdGVyKDQpIEZP Uk1BVCBKU09OIFBBVEggJyQnLCBqc3YgY2hhcmFjdGVyIHZhcnlpbmcoNCkgRk9STUFUIEpT T04gUEFUSCAnJCcsIGpzYiBqc29uYiBQQVRIICckJywganNicSBqc29uYiBQQVRIICckJyBP TUlUIFFVT1RFUywgYWFhIGludGVnZXIgUEFUSCAnJC4iYWFhIicsIGFhYTEgaW50ZWdlciBQ QVRIICckLiJhYWEiJywgZXhpc3RzMSBib29sZWFuIEVYSVNUUyBQQVRIICckLiJhYWEiJywg ZXhpc3RzMiBpbnRlZ2VyIEVYSVNUUyBQQVRIICckLiJhYWEiJyBUUlVFIE9OIEVSUk9SLCBl eGlzdHMzIHRleHQgRVhJU1RTIFBBVEggJ3N0cmljdCAkLiJhYWEiJyBVTktOT1dOIE9OIEVS Uk9SLCBqczIganNvbiBQQVRIICckJywganNiMncganNvbmIgUEFUSCAnJCcgV0lUSCBVTkNP TkRJVElPTkFMIFdSQVBQRVIsIGpzYjJxIGpzb25iIFBBVEggJyQnIE9NSVQgUVVPVEVTLCBp YSBpbnRlZ2VyW10gUEFUSCAnJCcsIHRhIHRleHRbXSBQQVRIICckJywgamJhIGpzb25iW10g UEFUSCAnJCcsIE5FU1RFRCBQQVRIICckWzFdJyBBUyBwMSBDT0xVTU5TIChhMSBpbnRlZ2Vy IFBBVEggJyQuImExIicsIGIxIHRleHQgUEFUSCAnJC4iYjEiJywgTkVTVEVEIFBBVEggJyRb Kl0nIEFTICJwMSAxIiBDT0xVTU5TIChhMTEgdGV4dCBQQVRIICckLiJhMTEiJykpLCBORVNU RUQgUEFUSCAnJFsyXScgQVMgcDIgQ09MVU1OUyAoIE5FU1RFRCBQQVRIICckWypdJyBBUyAi cDI6MSIgQ09MVU1OUyAoYTIxIHRleHQgUEFUSCAnJC4iYTIxIicpLCBORVNURUQgUEFUSCAn JFsqXScgQVMgcDIyIENPTFVNTlMgKGEyMiB0ZXh0IFBBVEggJyQuImEyMiInKSkpIFBMQU4g KGpzb25fdGFibGVfcGF0aF8xIE9VVEVSICgocDEgT1VURVIgInAxIDEiKSBVTklPTiAocDIg T1VURVIgKCJwMjoxIiBVTklPTiBwMjIpKSkpKQorICAgT3V0cHV0OiAianNvbl90YWJsZSIu aWQsICJqc29uX3RhYmxlIi5pZDIsICJqc29uX3RhYmxlIi4iaW50IiwgImpzb25fdGFibGUi LnRleHQsICJqc29uX3RhYmxlIi4iY2hhcig0KSIsICJqc29uX3RhYmxlIi5ib29sLCAianNv bl90YWJsZSIuIm51bWVyaWMiLCAianNvbl90YWJsZSIuanMsICJqc29uX3RhYmxlIi5qYiwg Impzb25fdGFibGUiLmpzdCwgImpzb25fdGFibGUiLmpzYywgImpzb25fdGFibGUiLmpzdiwg Impzb25fdGFibGUiLmpzYiwgImpzb25fdGFibGUiLmpzYnEsICJqc29uX3RhYmxlIi5hYWEs ICJqc29uX3RhYmxlIi5hYWExLCAianNvbl90YWJsZSIuZXhpc3RzMSwgImpzb25fdGFibGUi LmV4aXN0czIsICJqc29uX3RhYmxlIi5leGlzdHMzLCAianNvbl90YWJsZSIuanMyLCAianNv bl90YWJsZSIuanNiMncsICJqc29uX3RhYmxlIi5qc2IycSwgImpzb25fdGFibGUiLmExLCAi anNvbl90YWJsZSIuYjEsICJqc29uX3RhYmxlIi5hMTEsICJqc29uX3RhYmxlIi5hMjEsICJq c29uX3RhYmxlIi5hMjIKKyAgIFRhYmxlIEZ1bmN0aW9uIENhbGw6IEpTT05fVEFCTEUoJ251 bGwnOjpqc29uYiwgJyRbKl0nIEFTIGpzb25fdGFibGVfcGF0aF8xIFBBU1NJTkcgMyBBUyBh LCAnImZvbyInOjpqc29uYiBBUyAiYiBjIiBDT0xVTU5TIChpZCBGT1IgT1JESU5BTElUWSwg aWQyIEZPUiBPUkRJTkFMSVRZLCAiaW50IiBpbnRlZ2VyIFBBVEggJyQnLCB0ZXh0IHRleHQg UEFUSCAnJCcsICJjaGFyKDQpIiBjaGFyYWN0ZXIoNCkgUEFUSCAnJCcsIGJvb2wgYm9vbGVh biBQQVRIICckJywgIm51bWVyaWMiIG51bWVyaWMgUEFUSCAnJCcsIGpzIGpzb24gUEFUSCAn JCcsIGpiIGpzb25iIFBBVEggJyQnLCBqc3QgdGV4dCBGT1JNQVQgSlNPTiBQQVRIICckJywg anNjIGNoYXJhY3Rlcig0KSBGT1JNQVQgSlNPTiBQQVRIICckJywganN2IGNoYXJhY3RlciB2 YXJ5aW5nKDQpIEZPUk1BVCBKU09OIFBBVEggJyQnLCBqc2IganNvbmIgUEFUSCAnJCcsIGpz YnEganNvbmIgUEFUSCAnJCcgT01JVCBRVU9URVMsIGFhYSBpbnRlZ2VyIFBBVEggJyQuImFh YSInLCBhYWExIGludGVnZXIgUEFUSCAnJC4iYWFhIicsIGV4aXN0czEgYm9vbGVhbiBFWElT VFMgUEFUSCAnJC4iYWFhIicsIGV4aXN0czIgaW50ZWdlciBFWElTVFMgUEFUSCAnJC4iYWFh IicgVFJVRSBPTiBFUlJPUiwgZXhpc3RzMyB0ZXh0IEVYSVNUUyBQQVRIICdzdHJpY3QgJC4i YWFhIicgVU5LTk9XTiBPTiBFUlJPUiwganMyIGpzb24gUEFUSCAnJCcsIGpzYjJ3IGpzb25i IFBBVEggJyQnIFdJVEggVU5DT05ESVRJT05BTCBXUkFQUEVSLCBqc2IycSBqc29uYiBQQVRI ICckJyBPTUlUIFFVT1RFUywgTkVTVEVEIFBBVEggJyRbMV0nIEFTIHAxIENPTFVNTlMgKGEx IGludGVnZXIgUEFUSCAnJC4iYTEiJywgYjEgdGV4dCBQQVRIICckLiJiMSInLCBORVNURUQg UEFUSCAnJFsqXScgQVMgInAxIDEiIENPTFVNTlMgKGExMSB0ZXh0IFBBVEggJyQuImExMSIn KSksIE5FU1RFRCBQQVRIICckWzJdJyBBUyBwMiBDT0xVTU5TICggTkVTVEVEIFBBVEggJyRb Kl0nIEFTICJwMjoxIiBDT0xVTU5TIChhMjEgdGV4dCBQQVRIICckLiJhMjEiJyksIE5FU1RF RCBQQVRIICckWypdJyBBUyBwMjIgQ09MVU1OUyAoYTIyIHRleHQgUEFUSCAnJC4iYTIyIicp KSkgUExBTiAoanNvbl90YWJsZV9wYXRoXzEgT1VURVIgKChwMSBPVVRFUiAicDEgMSIpIFVO SU9OIChwMiBPVVRFUiAoInAyOjEiIFVOSU9OIHAyMikpKSkpCiAoMyByb3dzKQogCiBEUk9Q IFZJRVcganNvbmJfdGFibGVfdmlldzsKLURST1AgRE9NQUlOIGpzb25iX3Rlc3RfZG9tYWlu OwogLS0gSlNPTl9UQUJMRTogT04gRU1QVFkvT04gRVJST1IgYmVoYXZpb3IKIFNFTEVDVCAq CiBGUk9NCkBAIC0xMzE4LDE1ICsxNDUwLDE1IEBAIFNFTEVDVCAqIEZST00gSlNPTl9UQUJM RShqc29uYiAnImEiJywgJyQnIENPTFVNTlMgKGEgaW50NCBFWElTVFMgUEFUSCAnJC5hJykp OwogKDEgcm93KQogCiBTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoanNvbmIgJyJhIicsICck JyBDT0xVTU5TIChhIGludDIgRVhJU1RTIFBBVEggJyQuYScpKTsKLUVSUk9SOiAgY2Fubm90 IGNhc3QgdHlwZSBib29sZWFuIHRvIHNtYWxsaW50CitFUlJPUjogIHJldHVybmluZyB0eXBl IHNtYWxsaW50IGlzIG5vdCBzdXBwb3J0ZWQgaW4gSlNPTl9FWElTVFMoKQogTElORSAxOiAu Li5FTEVDVCAqIEZST00gSlNPTl9UQUJMRShqc29uYiAnImEiJywgJyQnIENPTFVNTlMgKGEg aW50MiBFWEkuLi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBeCiBTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoanNvbmIg JyJhIicsICckJyBDT0xVTU5TIChhIGludDggRVhJU1RTIFBBVEggJyQuYScpKTsKLUVSUk9S OiAgY2Fubm90IGNhc3QgdHlwZSBib29sZWFuIHRvIGJpZ2ludAorRVJST1I6ICByZXR1cm5p bmcgdHlwZSBiaWdpbnQgaXMgbm90IHN1cHBvcnRlZCBpbiBKU09OX0VYSVNUUygpCiBMSU5F IDE6IC4uLkVMRUNUICogRlJPTSBKU09OX1RBQkxFKGpzb25iICciYSInLCAnJCcgQ09MVU1O UyAoYSBpbnQ4IEVYSS4uLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF4KIFNFTEVDVCAqIEZST00gSlNPTl9UQUJMRShq c29uYiAnImEiJywgJyQnIENPTFVNTlMgKGEgZmxvYXQ0IEVYSVNUUyBQQVRIICckLmEnKSk7 Ci1FUlJPUjogIGNhbm5vdCBjYXN0IHR5cGUgYm9vbGVhbiB0byByZWFsCitFUlJPUjogIHJl dHVybmluZyB0eXBlIHJlYWwgaXMgbm90IHN1cHBvcnRlZCBpbiBKU09OX0VYSVNUUygpCiBM SU5FIDE6IC4uLkVMRUNUICogRlJPTSBKU09OX1RBQkxFKGpzb25iICciYSInLCAnJCcgQ09M VU1OUyAoYSBmbG9hdDQgRS4uLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KIFNFTEVDVCAqIEZST00gSlNPTl9UQUJM RShqc29uYiAnImEiJywgJyQnIENPTFVNTlMgKGEgY2hhcigzKSBFWElTVFMgUEFUSCAnJC5h JykpOwpAQCAtMTMzNiwxMSArMTQ2OCwxMSBAQCBTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUo anNvbmIgJyJhIicsICckJyBDT0xVTU5TIChhIGNoYXIoMykgRVhJU1RTIFBBVEggJyQuYScp KQogKDEgcm93KQogCiBTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoanNvbmIgJyJhIicsICck JyBDT0xVTU5TIChhIGpzb24gRVhJU1RTIFBBVEggJyQuYScpKTsKLUVSUk9SOiAgY2Fubm90 IGNhc3QgdHlwZSBib29sZWFuIHRvIGpzb24KK0VSUk9SOiAgcmV0dXJuaW5nIHR5cGUganNv biBpcyBub3Qgc3VwcG9ydGVkIGluIEpTT05fRVhJU1RTKCkKIExJTkUgMTogLi4uRUxFQ1Qg KiBGUk9NIEpTT05fVEFCTEUoanNvbmIgJyJhIicsICckJyBDT0xVTU5TIChhIGpzb24gRVhJ Li4uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXgogU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKGpzb25iICciYSInLCAn JCcgQ09MVU1OUyAoYSBqc29uYiBFWElTVFMgUEFUSCAnJC5hJykpOwotRVJST1I6ICBjYW5u b3QgY2FzdCB0eXBlIGJvb2xlYW4gdG8ganNvbmIKK0VSUk9SOiAgcmV0dXJuaW5nIHR5cGUg anNvbmIgaXMgbm90IHN1cHBvcnRlZCBpbiBKU09OX0VYSVNUUygpCiBMSU5FIDE6IC4uLkVM RUNUICogRlJPTSBKU09OX1RBQkxFKGpzb25iICciYSInLCAnJCcgQ09MVU1OUyAoYSBqc29u YiBFWC4uLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF4KIC0tIEpTT05fVEFCTEU6IG5lc3RlZCBwYXRocyBhbmQgcGxh bnMKQEAgLTIxMDIsMTEgKzIyMzQsMTQgQEAgc2V0IHBhcmFsbGVsX2xlYWRlcl9wYXJ0aWNp cGF0aW9uID0gb2ZmOwogLS0gU2hvdWxkIGJlIG5vbi1wYXJhbGxlbCBkdWUgdG8gc3VidHJh bnNhY3Rpb25zCiBFWFBMQUlOIChDT1NUUyBPRkYpCiBTRUxFQ1Qgc3VtKEpTT05fVkFMVUUo anMsICckJyBSRVRVUk5JTkcgbnVtZXJpYykpIEZST00gdGVzdF9wYXJhbGxlbF9qc29uYl92 YWx1ZTsKLSAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgIAot LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gQWdncmVn YXRlCi0gICAtPiAgU2VxIFNjYW4gb24gdGVzdF9wYXJhbGxlbF9qc29uYl92YWx1ZQotKDIg cm93cykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAg ICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgRmluYWxpemUgQWdncmVnYXRl CisgICAtPiAgR2F0aGVyCisgICAgICAgICBXb3JrZXJzIFBsYW5uZWQ6IDQKKyAgICAgICAg IC0+ICBQYXJ0aWFsIEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAgLT4gIFBhcmFsbGVsIFNl cSBTY2FuIG9uIHRlc3RfcGFyYWxsZWxfanNvbmJfdmFsdWUKKyg1IHJvd3MpCiAKIFNFTEVD VCBzdW0oSlNPTl9WQUxVRShqcywgJyQnIFJFVFVSTklORyBudW1lcmljKSkgRlJPTSB0ZXN0 X3BhcmFsbGVsX2pzb25iX3ZhbHVlOwogICAgIHN1bSAgICAgCmRpZmYgLS1naXQgYS9zcmMv dGVzdC9yZWdyZXNzL3NxbC9qc29uYl9zcWxqc29uLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mv c3FsL2pzb25iX3NxbGpzb24uc3FsCmluZGV4IGZmZjI1Mzc0ODA4Li40M2ExOTRhZDA5ZiAx MDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvanNvbmJfc3FsanNvbi5zcWwKKysr IGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvanNvbmJfc3FsanNvbi5zcWwKQEAgLTgyLDEyICs4 Miw0MyBAQCBTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnIjEyMyInLCAnJCcgUkVUVVJOSU5H IGludCkgKyAyMzQ7CiAKIFNFTEVDVCBKU09OX1ZBTFVFKGpzb25iICciMjAxNy0wMi0yMCIn LCAnJCcgUkVUVVJOSU5HIGRhdGUpICsgOTsKIAotLS0gVGVzdCBOVUxMIGNoZWNrcyBleGVj dXRpb24gaW4gZG9tYWluIHR5cGVzCitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAgJzEuMjMn LCAgJyQnIFJFVFVSTklORyBmbG9hdDQpOworU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJyIx LjIzIicsICckJyBSRVRVUk5JTkcgZmxvYXQ0KTsKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25i ICAnIm5hbiInLCAnJCcgUkVUVVJOSU5HIGZsb2F0NCk7CitTRUxFQ1QgSlNPTl9WQUxVRShq c29uYiAnIi1pbmYiJywgJyQnIFJFVFVSTklORyBmbG9hdDQpOworU0VMRUNUIEpTT05fVkFM VUUoanNvbmIgJyJlcnIiJywgJyQnIFJFVFVSTklORyBmbG9hdDQgREVGQVVMVCAtMSBPTiBF UlJPUik7CitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnImVyciInLCAnJCcgUkVUVVJOSU5H IGZsb2F0NCBFUlJPUiBPTiBFUlJPUik7CisKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICAn MS4yMycsICAnJCcgUkVUVVJOSU5HIGZsb2F0OCk7CitTRUxFQ1QgSlNPTl9WQUxVRShqc29u YiAnIjEuMjMiJywgJyQnIFJFVFVSTklORyBmbG9hdDgpOworU0VMRUNUIEpTT05fVkFMVUUo anNvbmIgICcibmFuIicsICckJyBSRVRVUk5JTkcgZmxvYXQ4KTsKK1NFTEVDVCBKU09OX1ZB TFVFKGpzb25iICciLWluZiInLCAnJCcgUkVUVVJOSU5HIGZsb2F0OCk7CitTRUxFQ1QgSlNP Tl9WQUxVRShqc29uYiAnImVyciInLCAnJCcgUkVUVVJOSU5HIGZsb2F0OCBERUZBVUxUIC0x IE9OIEVSUk9SKTsKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICciZXJyIicsICckJyBSRVRV Uk5JTkcgZmxvYXQ4IEVSUk9SIE9OIEVSUk9SKTsKKworU0VMRUNUIEpTT05fVkFMVUUoanNv bmIgICcxLjIzJywgICckJyBSRVRVUk5JTkcgbnVtZXJpYyk7CitTRUxFQ1QgSlNPTl9WQUxV RShqc29uYiAnIjEuMjMiJywgJyQnIFJFVFVSTklORyBudW1lcmljKTsKK1NFTEVDVCBKU09O X1ZBTFVFKGpzb25iICAnIm5hbiInLCAnJCcgUkVUVVJOSU5HIG51bWVyaWMpOworU0VMRUNU IEpTT05fVkFMVUUoanNvbmIgJyItaW5mIicsICckJyBSRVRVUk5JTkcgbnVtZXJpYyk7CitT RUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnImVyciInLCAnJCcgUkVUVVJOSU5HIG51bWVyaWMg REVGQVVMVCAtMSBPTiBFUlJPUik7CitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnImVyciIn LCAnJCcgUkVUVVJOSU5HIG51bWVyaWMgRVJST1IgT04gRVJST1IpOworCistLSBUZXN0IGZv ciBkb21haW4gdHlwZXMKIENSRUFURSBET01BSU4gc3FsanNvbmJfaW50X25vdF9udWxsIEFT IGludCBOT1QgTlVMTDsKK0NSRUFURSBET01BSU4gc3FsanNvbmJfanNvbl9ub3RfbnVsbCBB UyBqc29uIE5PVCBOVUxMIENIRUNLIChWQUxVRTo6dGV4dCA8PiAnMCcpOworQ1JFQVRFIERP TUFJTiBzcWxqc29uYl9qc29uYl9ub3RfbnVsbCBBUyBqc29uYiBOT1QgTlVMTCBDSEVDSyAo VkFMVUUgPD4gJzAnKTsKKworLS0gVGVzdCBjYXN0aW5nIHRvIGpzb25bYl0gZG9tYWlucyAo aXRlbXMgY2FzdGVkIGFzIGlzLCBzdHJpbmdzIGFyZSBub3QgdW5xdW90ZWQpCitTRUxFQ1Qg SlNPTl9WQUxVRShqc29uYiAnIjEiJywgJyQnIFJFVFVSTklORyBzcWxqc29uYl9qc29uX25v dF9udWxsKTsKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICciMSInLCAnJCcgUkVUVVJOSU5H IHNxbGpzb25iX2pzb25iX25vdF9udWxsKTsKKworLS0gVGVzdCBOVUxMIGNoZWNrcyBleGVj dXRpb24gaW4gZG9tYWluIHR5cGVzCiBTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnMScsICck LmEnIFJFVFVSTklORyBzcWxqc29uYl9pbnRfbm90X251bGwpOwogU0VMRUNUIEpTT05fVkFM VUUoanNvbmIgJzEnLCAnJC5hJyBSRVRVUk5JTkcgc3FsanNvbmJfaW50X25vdF9udWxsIE5V TEwgT04gRVJST1IpOwogU0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJzEnLCAnJC5hJyBSRVRV Uk5JTkcgc3FsanNvbmJfaW50X25vdF9udWxsIERFRkFVTFQgTlVMTCBPTiBFUlJPUik7CiAK KworLS0gVGVzdCByZXR1cm5pbmcgb2Ygbm9uLXNjYWxhciBpdGVtcwogU0VMRUNUIEpTT05f VkFMVUUoanNvbmIgJ1tdJywgJyQnKTsKIFNFTEVDVCBKU09OX1ZBTFVFKGpzb25iICdbXScs ICckJyBFUlJPUiBPTiBFUlJPUik7CiBTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAne30nLCAn JCcpOwpAQCAtMTMzLDYgKzE2NCwxNyBAQCBTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnbnVs bCcsICckdHMnIFBBU1NJTkcgdGltZXN0YW1wdHogJzIwMTgtMDItMjEgMTI6MzQ6NTYgKwog U0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJ251bGwnLCAnJHRzJyBQQVNTSU5HIHRpbWVzdGFt cHR6ICcyMDE4LTAyLTIxIDEyOjM0OjU2ICsxMCcgQVMgdHMgUkVUVVJOSU5HIGpzb24pOwog U0VMRUNUIEpTT05fVkFMVUUoanNvbmIgJ251bGwnLCAnJHRzJyBQQVNTSU5HIHRpbWVzdGFt cHR6ICcyMDE4LTAyLTIxIDEyOjM0OjU2ICsxMCcgQVMgdHMgUkVUVVJOSU5HIGpzb25iKTsK IAorLS0gdGVzdCBlcnJvcnMgaW4gREVGQVVMVCBPTiBFTVBUWSBleHByZXNzaW9ucworU0VM RUNUIEpTT05fVkFMVUUoJzEnOjpqc29uYiwgJyQueCcgUkVUVVJOSU5HIGludAorICAgICAg ICAgICAgICAgICAgREVGQVVMVCAxIC8geCBPTiBFTVBUWQorICAgICAgICAgICAgICAgICAg REVGQVVMVCAyIE9OIEVSUk9SKQorRlJPTSAoVkFMVUVTICgxOjppbnQpLCAoMCkpIHgoeCk7 CisKK1NFTEVDVCBKU09OX1ZBTFVFKCcxJzo6anNvbmIsICckLngnIFJFVFVSTklORyBpbnQg REVGQVVMVCAtMSBPTiBFTVBUWSk7CitTRUxFQ1QgSlNPTl9WQUxVRSgnMSc6Ompzb25iLCAn JC54JyBSRVRVUk5JTkcgaW50IERFRkFVTFQgJy0xJyBPTiBFTVBUWSk7CitTRUxFQ1QgSlNP Tl9WQUxVRSgnMSc6Ompzb25iLCAnJC54JyBSRVRVUk5JTkcgaW50IERFRkFVTFQgJ2Vycicg T04gRU1QVFkpOworU0VMRUNUIEpTT05fVkFMVUUoJzEnOjpqc29uYiwgJyQueCcgUkVUVVJO SU5HIGludCBERUZBVUxUIC0xOjpmbG9hdCBPTiBFTVBUWSk7CisKIC0tIEpTT05fUVVFUlkK IAogU0VMRUNUCkBAIC0zMTgsNiArMzYwLDIxIEBAIENSRUFURSBJTkRFWCBPTiB0ZXN0X2pz b25iX211dGFiaWxpdHkgKEpTT05fUVVFUlkoanMsICckLmRhdGV0aW1lKCJZWS1NTS1ERCIp ID8KIENSRUFURSBJTkRFWCBPTiB0ZXN0X2pzb25iX211dGFiaWxpdHkgKEpTT05fUVVFUlko anMsICckWzEsICQuYSA/IChALmRhdGV0aW1lKCkgPT0gJHgpXScgUEFTU0lORyAnMTI6MzQn Ojp0aW1lIEFTIHgpKTsKIENSRUFURSBJTkRFWCBPTiB0ZXN0X2pzb25iX211dGFiaWxpdHkg KEpTT05fUVVFUlkoanMsICckWzEsIDAgdG8gJC5hID8gKEAuZGF0ZXRpbWUoKSA9PSAkeCld JyBQQVNTSU5HICcxMjozNCc6OnRpbWUgQVMgeCkpOwogQ1JFQVRFIElOREVYIE9OIHRlc3Rf anNvbmJfbXV0YWJpbGl0eSAoSlNPTl9RVUVSWShqcywgJyRbMSwgJC5hID8gKEAuZGF0ZXRp bWUoIkhIOk1JIikgPT0gJHgpXScgUEFTU0lORyAnMTI6MzQnOjp0aW1lIEFTIHgpKTsKKwor Q1JFQVRFIElOREVYIE9OIHRlc3RfanNvbmJfbXV0YWJpbGl0eSAoSlNPTl9WQUxVRShqcywg JyQnIFJFVFVSTklORyBpbnQpKTsgLS0gaW1tdXRhYmxlCitDUkVBVEUgSU5ERVggT04gdGVz dF9qc29uYl9tdXRhYmlsaXR5IChKU09OX1ZBTFVFKGpzLCAnJCcgUkVUVVJOSU5HIGRhdGUp KTsKK0NSRUFURSBJTkRFWCBPTiB0ZXN0X2pzb25iX211dGFiaWxpdHkgKEpTT05fVkFMVUUo anMsICckJyBSRVRVUk5JTkcgdGltZSkpOworQ1JFQVRFIElOREVYIE9OIHRlc3RfanNvbmJf bXV0YWJpbGl0eSAoSlNPTl9WQUxVRShqcywgJyQnIFJFVFVSTklORyB0aW1ldHopKTsKK0NS RUFURSBJTkRFWCBPTiB0ZXN0X2pzb25iX211dGFiaWxpdHkgKEpTT05fVkFMVUUoanMsICck JyBSRVRVUk5JTkcgdGltZXN0YW1wKSk7CitDUkVBVEUgSU5ERVggT04gdGVzdF9qc29uYl9t dXRhYmlsaXR5IChKU09OX1ZBTFVFKGpzLCAnJCcgUkVUVVJOSU5HIHRpbWVzdGFtcHR6KSk7 CisKK0NSRUFURSBJTkRFWCBPTiB0ZXN0X2pzb25iX211dGFiaWxpdHkgKEpTT05fVkFMVUUo anMsICckLmRhdGV0aW1lKCknKSk7CitDUkVBVEUgSU5ERVggT04gdGVzdF9qc29uYl9tdXRh YmlsaXR5IChKU09OX1ZBTFVFKGpzLCAnJC5kYXRldGltZSgpWypdWzEsMl0uKionKSk7CitD UkVBVEUgSU5ERVggT04gdGVzdF9qc29uYl9tdXRhYmlsaXR5IChKU09OX1ZBTFVFKGpzLCAn JHgnIFBBU1NJTkcgJzIwMjItMDgtMjUnOjpkYXRlIEFTIHgpKTsKK0NSRUFURSBJTkRFWCBP TiB0ZXN0X2pzb25iX211dGFiaWxpdHkgKEpTT05fVkFMVUUoanMsICckLmRhdGV0aW1lKCkn IFJFVFVSTklORyBpbnQpKTsgLS0gaW1tdXRhYmxlCisKK0NSRUFURSBJTkRFWCBPTiB0ZXN0 X2pzb25iX211dGFiaWxpdHkgKEpTT05fUVVFUlkoanMsICckLmRhdGV0aW1lKCknKSk7IC0t IGltbXV0YWJsZQorCiBEUk9QIFRBQkxFIHRlc3RfanNvbmJfbXV0YWJpbGl0eTsKIAogLS0g SlNPTl9UQUJMRQpAQCAtMzM4LDggKzM5NSw2IEBAIFNFTEVDVCAqIEZST00gSlNPTl9UQUJM RShqc29uYiAnMTIzJywgJyQnCiAJQ09MVU1OUyAoaXRlbSBpbnQgUEFUSCAnJCcsIGZvbyBp bnQpKSBiYXI7CiAKIC0tIEpTT05fVEFCTEU6IGJhc2ljIGZ1bmN0aW9uYWxpdHkKLUNSRUFU RSBET01BSU4ganNvbmJfdGVzdF9kb21haW4gQVMgdGV4dCBDSEVDSyAodmFsdWUgPD4gJ2Zv bycpOwotCiBTRUxFQ1QgKgogRlJPTQogCShWQUxVRVMKQEAgLTM2MCw3ICs0MTUsNiBAQCBG Uk9NCiAJCQkiY2hhcig0KSIgY2hhcig0KSBQQVRIICckJywKIAkJCSJib29sIiBib29sIFBB VEggJyQnLAogCQkJIm51bWVyaWMiIG51bWVyaWMgUEFUSCAnJCcsCi0JCQkiZG9tYWluIiBq c29uYl90ZXN0X2RvbWFpbiBQQVRIICckJywKIAkJCWpzIGpzb24gUEFUSCAnJCcsCiAJCQlq YiBqc29uYiBQQVRIICckJywKIAkJCWpzdCB0ZXh0ICAgIEZPUk1BVCBKU09OICBQQVRIICck JywKQEAgLTM3NywxMCArNDMxLDcgQEAgRlJPTQogCiAJCQlqczIganNvbiBQQVRIICckJywK IAkJCWpzYjJ3IGpzb25iIFBBVEggJyQnIFdJVEggV1JBUFBFUiwKLQkJCWpzYjJxIGpzb25i IFBBVEggJyQnIE9NSVQgUVVPVEVTLAotCQkJaWEgaW50W10gUEFUSCAnJCcsCi0JCQl0YSB0 ZXh0W10gUEFUSCAnJCcsCi0JCQlqYmEganNvbmJbXSBQQVRIICckJworCQkJanNiMnEganNv bmIgUEFUSCAnJCcgT01JVCBRVU9URVMKIAkJKQogCSkganQKIAlPTiB0cnVlOwpAQCAtMzk5 LDcgKzQ1MCw2IEBAIFNFTEVDVCAqIEZST00KIAkJCSJjaGFyKDQpIiBjaGFyKDQpIFBBVEgg JyQnLAogCQkJImJvb2wiIGJvb2wgUEFUSCAnJCcsCiAJCQkibnVtZXJpYyIgbnVtZXJpYyBQ QVRIICckJywKLQkJCSJkb21haW4iIGpzb25iX3Rlc3RfZG9tYWluIFBBVEggJyQnLAogCQkJ anMganNvbiBQQVRIICckJywKIAkJCWpiIGpzb25iIFBBVEggJyQnLAogCQkJanN0IHRleHQg ICAgRk9STUFUIEpTT04gIFBBVEggJyQnLApAQCAtNDE2LDkgKzQ2Niw2IEBAIFNFTEVDVCAq IEZST00KIAkJCWpzMiBqc29uIFBBVEggJyQnLAogCQkJanNiMncganNvbmIgUEFUSCAnJCcg V0lUSCBXUkFQUEVSLAogCQkJanNiMnEganNvbmIgUEFUSCAnJCcgT01JVCBRVU9URVMsCi0J CQlpYSBpbnRbXSBQQVRIICckJywKLQkJCXRhIHRleHRbXSBQQVRIICckJywKLQkJCWpiYSBq c29uYltdIFBBVEggJyQnLAogCiAJCQlORVNURUQgUEFUSCAnJFsxXScgQVMgcDEgQ09MVU1O UyAoCiAJCQkJYTEgaW50LApAQCAtNDQzLDcgKzQ5MCw2IEBAIFNFTEVDVCAqIEZST00KIEVY UExBSU4gKENPU1RTIE9GRiwgVkVSQk9TRSkgU0VMRUNUICogRlJPTSBqc29uYl90YWJsZV92 aWV3OwogCiBEUk9QIFZJRVcganNvbmJfdGFibGVfdmlldzsKLURST1AgRE9NQUlOIGpzb25i X3Rlc3RfZG9tYWluOwogCiAtLSBKU09OX1RBQkxFOiBPTiBFTVBUWS9PTiBFUlJPUiBiZWhh dmlvcgogU0VMRUNUICoKLS0gCjIuMTcuMQoK --------------jNrKutSsb0Ih2JPBTjkEydni Content-Type: text/x-patch; charset=UTF-8; name="v9-0008-Remove-subsidary-ExprStates-in-SQL-JSON-execution.patch" Content-Disposition: attachment; filename*0="v9-0008-Remove-subsidary-ExprStates-in-SQL-JSON-execution.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSAwMDNiZmNjZmZjNjk4MjRlMGZiOTQ3ZDExZjNmNzVhN2I3MGZlZmI0IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBOaWtpdGEgR2x1a2hvdiA8bi5nbHVob3ZAcG9zdGdy ZXNwcm8ucnU+CkRhdGU6IE1vbiwgMjkgQXVnIDIwMjIgMjI6NDE6MDggKzAzMDAKU3ViamVj dDogW1BBVENIIHY5IDgvOV0gUmVtb3ZlIHN1YnNpZGFyeSBFeHByU3RhdGVzIGluIFNRTC9K U09OIGV4ZWN1dGlvbgoKLS0tCiBzcmMvYmFja2VuZC9leGVjdXRvci9leGVjRXhwci5jICAg ICAgIHwgIDg4ICsrKysrKysrLS0tCiBzcmMvYmFja2VuZC9leGVjdXRvci9leGVjRXhwcklu dGVycC5jIHwgMjA2ICsrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tCiBzcmMvYmFja2VuZC9q aXQvbGx2bS9sbHZtaml0X2V4cHIuYyAgIHwgIDcwICsrKysrKysrLQogc3JjL2JhY2tlbmQv aml0L2xsdm0vbGx2bWppdF90eXBlcy5jICB8ICAgMSArCiBzcmMvYmFja2VuZC91dGlscy9h ZHQvanNvbnBhdGhfZXhlYy5jIHwgIDc5ICsrKysrKysrKy0KIHNyYy9pbmNsdWRlL2V4ZWN1 dG9yL2V4ZWNFeHByLmggICAgICAgfCAgMjAgKystCiBzcmMvaW5jbHVkZS91dGlscy9qc29u cGF0aC5oICAgICAgICAgIHwgICA0IC0KIDcgZmlsZXMgY2hhbmdlZCwgMzE3IGluc2VydGlv bnMoKyksIDE1MSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVj dXRvci9leGVjRXhwci5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0V4cHIuYwppbmRl eCBmNTBlMGQ3MDNmOC4uNjgyMjdlYmVlMjEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4 ZWN1dG9yL2V4ZWNFeHByLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0V4cHIu YwpAQCAtNDE1OSw5ICs0MTU5LDE2IEBAIHN0YXRpYyB2b2lkCiBFeGVjSW5pdEpzb25FeHBy KEpzb25FeHByICpqZXhwciwgRXhwclN0YXRlICpzdGF0ZSwgRXhwckV2YWxTdGVwICpzY3Jh dGNoLAogCQkJCSBEYXR1bSAqcmVzdiwgYm9vbCAqcmVzbnVsbCkKIHsKKwlFeHByRXZhbFN0 ZXAgKnN0ZXA7CiAJSnNvbkV4cHJTdGF0ZSAqanNlc3RhdGU7CiAJTGlzdENlbGwgICAqYXJn ZXhwcmxjOwogCUxpc3RDZWxsICAgKmFyZ25hbWVsYzsKKwlpbnQJCQlza2lwX3N0ZXBfb2Zm OworCWludAkJCWV4ZWNwYXRoX3N0ZXBfb2ZmOworCWludAkJCWRvbmVfc3RlcF9vZmY7CisJ aW50CQkJZGVmYXVsdF9vbl9lbXB0eV9zdGVwX29mZiA9IC0xOworCWludAkJCWRlZmF1bHRf b25fZXJyb3Jfc3RlcF9vZmYgPSAtMTsKKwlpbnQJCQlkZWZhdWx0X29uX2VtcHR5X2p1bXBf b2ZmID0gLTE7CiAKIAkvKiBKU09OX1RBQkxFIHByZXVkby1mdW5jdGlvbiByZXR1cm5zIGNv bnRleHQgaXRlbSBhcyBhIHJlc3VsdCAqLwogCWlmIChqZXhwci0+b3AgPT0gSlNPTl9UQUJM RV9PUCkKQEAgLTQxNzQsOSArNDE4MSw2IEBAIEV4ZWNJbml0SnNvbkV4cHIoSnNvbkV4cHIg KmpleHByLCBFeHByU3RhdGUgKnN0YXRlLCBFeHByRXZhbFN0ZXAgKnNjcmF0Y2gsCiAJanNl c3RhdGUgPSBwYWxsb2MwKHNpemVvZihKc29uRXhwclN0YXRlKSk7CiAJanNlc3RhdGUtPmpz ZXhwciA9IGpleHByOwogCi0Jc2NyYXRjaC0+b3Bjb2RlID0gRUVPUF9KU09ORVhQUjsKLQlz Y3JhdGNoLT5kLmpzb25leHByLmpzZXN0YXRlID0ganNlc3RhdGU7Ci0KIAlFeGVjSW5pdEV4 cHJSZWMoKEV4cHIgKikgamV4cHItPmZvcm1hdHRlZF9leHByLCBzdGF0ZSwKIAkJCQkJJmpz ZXN0YXRlLT5mb3JtYXR0ZWRfZXhwci52YWx1ZSwKIAkJCQkJJmpzZXN0YXRlLT5mb3JtYXR0 ZWRfZXhwci5pc251bGwpOwpAQCAtNDE4NSwxNSArNDE4OSwxMiBAQCBFeGVjSW5pdEpzb25F eHByKEpzb25FeHByICpqZXhwciwgRXhwclN0YXRlICpzdGF0ZSwgRXhwckV2YWxTdGVwICpz Y3JhdGNoLAogCQkJCQkmanNlc3RhdGUtPnBhdGhzcGVjLnZhbHVlLAogCQkJCQkmanNlc3Rh dGUtPnBhdGhzcGVjLmlzbnVsbCk7CiAKLQlpZiAoamV4cHItPm9uX2VtcHR5KQotCQlqc2Vz dGF0ZS0+ZGVmYXVsdF9vbl9lbXB0eSA9Ci0JCQlFeGVjSW5pdEV4cHIoKEV4cHIgKikgamV4 cHItPm9uX2VtcHR5LT5kZWZhdWx0X2V4cHIsCi0JCQkJCQkgc3RhdGUtPnBhcmVudCk7Ci0K LQlqc2VzdGF0ZS0+ZGVmYXVsdF9vbl9lcnJvciA9Ci0JCUV4ZWNJbml0RXhwcigoRXhwciAq KSBqZXhwci0+b25fZXJyb3ItPmRlZmF1bHRfZXhwciwKLQkJCQkJIHN0YXRlLT5wYXJlbnQp OworCXNjcmF0Y2gtPm9wY29kZSA9IEVFT1BfSlNPTkVYUFJfU0tJUDsKKwlzY3JhdGNoLT5k Lmpzb25leHByX3NraXAuanNlc3RhdGUgPSBqc2VzdGF0ZTsKKwlza2lwX3N0ZXBfb2ZmID0g c3RhdGUtPnN0ZXBzX2xlbjsKKwlFeHByRXZhbFB1c2hTdGVwKHN0YXRlLCBzY3JhdGNoKTsK IAorCS8qIFBBU1NJTkcgYXJncy4gKi8KIAlqc2VzdGF0ZS0+YXJncyA9IE5JTDsKIAogCWZv cmJvdGgoYXJnZXhwcmxjLCBqZXhwci0+cGFzc2luZ192YWx1ZXMsCkBAIC00MjA2LDE2ICs0 MjA3LDY5IEBAIEV4ZWNJbml0SnNvbkV4cHIoSnNvbkV4cHIgKmpleHByLCBFeHByU3RhdGUg KnN0YXRlLCBFeHByRXZhbFN0ZXAgKnNjcmF0Y2gsCiAJCXZhci0+bmFtZSA9IHBzdHJkdXAo YXJnbmFtZS0+c3ZhbCk7CiAJCXZhci0+dHlwaWQgPSBleHByVHlwZSgoTm9kZSAqKSBhcmdl eHByKTsKIAkJdmFyLT50eXBtb2QgPSBleHByVHlwbW9kKChOb2RlICopIGFyZ2V4cHIpOwot CQl2YXItPmVzdGF0ZSA9IEV4ZWNJbml0RXhwcihhcmdleHByLCBzdGF0ZS0+cGFyZW50KTsK KworCQkvKgorCQkgKiBBIHNlcGFyYXRlIEV4cHJTdGF0ZSBpcyBub3QgbmVjZXNzYXJ5IGZv ciB0aGVzZSBleHByZXNzaW9ucworCQkgKiB3aGVuIGJlaW5nIGV2YWx1YXRlZCBmb3IgYSBK c29uRXhwciwgbGlrZSBpbiB0aGlzIGNhc2UsCisJCSAqIGJlY2F1c2UgdGhleSB3aWxsIGV2 YWx1YXRlZCBhcyB0aGUgc3RlcHMgb2YgdGhlIEpzb25FeHByLgorCQkgKi8KKwkJdmFyLT5l c3RhdGUgPSBOVUxMOwogCQl2YXItPmVjb250ZXh0ID0gTlVMTDsKIAkJdmFyLT5tY3h0ID0g TlVMTDsKLQkJdmFyLT5ldmFsdWF0ZWQgPSBmYWxzZTsKLQkJdmFyLT52YWx1ZSA9IChEYXR1 bSkgMDsKLQkJdmFyLT5pc251bGwgPSB0cnVlOwogCi0JCWpzZXN0YXRlLT5hcmdzID0KLQkJ CWxhcHBlbmQoanNlc3RhdGUtPmFyZ3MsIHZhcik7CisJCS8qCisJCSAqIE1hcmsgdGhlc2Ug YXMgYWx3YXlzIGV2YWx1YXRlZCBiZWNhdXNlIHRoZXkgbXVzdCBoYXZlIGJlZW4KKwkJICog ZXZhbHVhdGVkIGJlZm9yZSBKU09OIHBhdGggZXZhbHVhdGlvbiBiZWdpbnMsIGJlY2F1c2Ug d2UKKwkJICogaGF2ZW4ndCBwdXNoZWQgdGhlIHN0ZXAgZm9yIHRoZSBsYXR0ZXIgeWV0Lgor CQkgKi8KKwkJdmFyLT5ldmFsdWF0ZWQgPSB0cnVlOworCisJCUV4ZWNJbml0RXhwclJlYygo RXhwciAqKSBhcmdleHByLCBzdGF0ZSwgJnZhci0+dmFsdWUsICZ2YXItPmlzbnVsbCk7CisK KwkJanNlc3RhdGUtPmFyZ3MgPSBsYXBwZW5kKGpzZXN0YXRlLT5hcmdzLCB2YXIpOwogCX0K IAorCS8qIFN0ZXAgZm9yIHRoZSBhY3R1YWwgSlNPTiBwYXRoIGV2YWx1YXRpb24uICovCisJ c2NyYXRjaC0+b3Bjb2RlID0gRUVPUF9KU09ORVhQUl9QQVRIOworCXNjcmF0Y2gtPmQuanNv bmV4cHIuanNlc3RhdGUgPSBqc2VzdGF0ZTsKKwlleGVjcGF0aF9zdGVwX29mZiA9IHN0YXRl LT5zdGVwc19sZW47CiAJRXhwckV2YWxQdXNoU3RlcChzdGF0ZSwgc2NyYXRjaCk7CisKKwlp ZiAoamV4cHItPm9uX2VtcHR5ICYmIGpleHByLT5vbl9lbXB0eS0+ZGVmYXVsdF9leHByKQor CXsKKwkJZGVmYXVsdF9vbl9lbXB0eV9zdGVwX29mZiA9IHN0YXRlLT5zdGVwc19sZW47CisJ CUV4ZWNJbml0RXhwclJlYygoRXhwciAqKSBqZXhwci0+b25fZW1wdHktPmRlZmF1bHRfZXhw ciwgc3RhdGUsIHJlc3YsIHJlc251bGwpOworCisJCXNjcmF0Y2gtPm9wY29kZSA9IEVFT1Bf SlVNUDsKKwkJZGVmYXVsdF9vbl9lbXB0eV9qdW1wX29mZiA9IHN0YXRlLT5zdGVwc19sZW47 CisJCUV4cHJFdmFsUHVzaFN0ZXAoc3RhdGUsIHNjcmF0Y2gpOworCX0KKworCWlmIChqZXhw ci0+b25fZXJyb3ItPmRlZmF1bHRfZXhwcikKKwl7CisJCWRlZmF1bHRfb25fZXJyb3Jfc3Rl cF9vZmYgPSBzdGF0ZS0+c3RlcHNfbGVuOworCQlFeGVjSW5pdEV4cHJSZWMoKEV4cHIgKikg amV4cHItPm9uX2Vycm9yLT5kZWZhdWx0X2V4cHIsIHN0YXRlLCByZXN2LCByZXNudWxsKTsK Kwl9CisKKwkvKiBBZGp1c3QganVtcCBsb2NhdGlvbnMgKi8KKwlkb25lX3N0ZXBfb2ZmID0g c3RhdGUtPnN0ZXBzX2xlbjsKKworCS8qIEVFT1BfSlNPTkVYUFJfU0tJUCAqLworCXN0ZXAg PSAmc3RhdGUtPnN0ZXBzW3NraXBfc3RlcF9vZmZdOworCXN0ZXAtPmQuanNvbmV4cHJfc2tp cC5qdW1wX2RvbmUgPSBkb25lX3N0ZXBfb2ZmOworCisJLyogRUVPUF9KU09ORVhQUl9QQVRI ICovCisJc3RlcCA9ICZzdGF0ZS0+c3RlcHNbZXhlY3BhdGhfc3RlcF9vZmZdOworCXN0ZXAt PmQuanNvbmV4cHIuanVtcF9kb25lID0gZG9uZV9zdGVwX29mZjsKKwlzdGVwLT5kLmpzb25l eHByLmp1bXBfZGVmYXVsdF9vbl9lbXB0eSA9CisJCWRlZmF1bHRfb25fZW1wdHlfc3RlcF9v ZmYgPiAwID8gZGVmYXVsdF9vbl9lbXB0eV9zdGVwX29mZiA6IGRvbmVfc3RlcF9vZmY7CisJ c3RlcC0+ZC5qc29uZXhwci5qdW1wX2RlZmF1bHRfb25fZXJyb3IgPQorCQlkZWZhdWx0X29u X2Vycm9yX3N0ZXBfb2ZmID4gMCA/IGRlZmF1bHRfb25fZXJyb3Jfc3RlcF9vZmYgOiBkb25l X3N0ZXBfb2ZmOworCisJLyogRUVPUF9KVU1QICovCisJaWYgKGRlZmF1bHRfb25fZW1wdHlf anVtcF9vZmYgPiAwKQorCXsKKwkJc3RlcCA9ICZzdGF0ZS0+c3RlcHNbZGVmYXVsdF9vbl9l bXB0eV9qdW1wX29mZl07CisJCXN0ZXAtPmQuanVtcC5qdW1wZG9uZSA9IGRvbmVfc3RlcF9v ZmY7CisJfQogfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0V4cHJJ bnRlcnAuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNFeHBySW50ZXJwLmMKaW5kZXgg NDVjNjQ4ODE3YmEuLmQzOTIyM2UwZDE1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVj dXRvci9leGVjRXhwckludGVycC5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNF eHBySW50ZXJwLmMKQEAgLTQ5MSw3ICs0OTEsOCBAQCBFeGVjSW50ZXJwRXhwcihFeHByU3Rh dGUgKnN0YXRlLCBFeHByQ29udGV4dCAqZWNvbnRleHQsIGJvb2wgKmlzbnVsbCkKIAkJJiZD QVNFX0VFT1BfU1VCUExBTiwKIAkJJiZDQVNFX0VFT1BfSlNPTl9DT05TVFJVQ1RPUiwKIAkJ JiZDQVNFX0VFT1BfSVNfSlNPTiwKLQkJJiZDQVNFX0VFT1BfSlNPTkVYUFIsCisJCSYmQ0FT RV9FRU9QX0pTT05FWFBSX1NLSVAsCisJCSYmQ0FTRV9FRU9QX0pTT05FWFBSX1BBVEgsCiAJ CSYmQ0FTRV9FRU9QX0FHR19TVFJJQ1RfREVTRVJJQUxJWkUsCiAJCSYmQ0FTRV9FRU9QX0FH R19ERVNFUklBTElaRSwKIAkJJiZDQVNFX0VFT1BfQUdHX1NUUklDVF9JTlBVVF9DSEVDS19B UkdTLApAQCAtMTg0MiwxMSArMTg0MywyNiBAQCBFeGVjSW50ZXJwRXhwcihFeHByU3RhdGUg KnN0YXRlLCBFeHByQ29udGV4dCAqZWNvbnRleHQsIGJvb2wgKmlzbnVsbCkKIAkJCUVFT19O RVhUKCk7CiAJCX0KIAotCQlFRU9fQ0FTRShFRU9QX0pTT05FWFBSKQorCQlFRU9fQ0FTRShF RU9QX0pTT05FWFBSX1NLSVApCiAJCXsKIAkJCS8qIHRvbyBjb21wbGV4IGZvciBhbiBpbmxp bmUgaW1wbGVtZW50YXRpb24gKi8KLQkJCUV4ZWNFdmFsSnNvbkV4cHIoc3RhdGUsIG9wLCBl Y29udGV4dCk7Ci0JCQlFRU9fTkVYVCgpOworCQkJaWYgKEV4ZWNFdmFsSnNvbkV4cHJTa2lw KHN0YXRlLCBvcCkpCisJCQkJRUVPX0pVTVAob3AtPmQuanNvbmV4cHJfc2tpcC5qdW1wX2Rv bmUpOworCQkJZWxzZQorCQkJCUVFT19ORVhUKCk7CisJCX0KKworCQlFRU9fQ0FTRShFRU9Q X0pTT05FWFBSX1BBVEgpCisJCXsKKwkJCS8qIHRvbyBjb21wbGV4IGZvciBhbiBpbmxpbmUg aW1wbGVtZW50YXRpb24gKi8KKwkJCWludAkJCXJlcyA9IEV4ZWNFdmFsSnNvbkV4cHIoc3Rh dGUsIG9wKTsKKworCQkJaWYgKHJlcyA9PSAwKQorCQkJCUVFT19KVU1QKG9wLT5kLmpzb25l eHByLmp1bXBfZGVmYXVsdF9vbl9lbXB0eSk7CisJCQllbHNlIGlmIChyZXMgPT0gLTEpCisJ CQkJRUVPX0pVTVAob3AtPmQuanNvbmV4cHIuanVtcF9kZWZhdWx0X29uX2Vycm9yKTsKKwkJ CWVsc2UKKwkJCQlFRU9fSlVNUChvcC0+ZC5qc29uZXhwci5qdW1wX2RvbmUpOwogCQl9CiAK IAkJRUVPX0NBU0UoRUVPUF9MQVNUKQpAQCAtNDcwMSw1OSArNDcxNyw2IEBAIEV4ZWNFdmFs SnNvbkNvbnN0cnVjdG9yKEV4cHJTdGF0ZSAqc3RhdGUsIEV4cHJFdmFsU3RlcCAqb3AsCiAJ Km9wLT5yZXNudWxsID0gaXNudWxsOwogfQogCi0vKgotICogRXZhbHVhdGUgYSBKU09OIHBh dGggdmFyaWFibGUgY2FjaGluZyBjb21wdXRlZCB2YWx1ZS4KLSAqLwotaW50Ci1FdmFsSnNv blBhdGhWYXIodm9pZCAqY3h0LCBjaGFyICp2YXJOYW1lLCBpbnQgdmFyTmFtZUxlbiwKLQkJ CQlKc29uYlZhbHVlICp2YWwsIEpzb25iVmFsdWUgKmJhc2VPYmplY3QpCi17Ci0JSnNvblBh dGhWYXJpYWJsZUV2YWxDb250ZXh0ICp2YXIgPSBOVUxMOwotCUxpc3QJICAgKnZhcnMgPSBj eHQ7Ci0JTGlzdENlbGwgICAqbGM7Ci0JaW50CQkJaWQgPSAxOwotCi0JaWYgKCF2YXJOYW1l KQotCQlyZXR1cm4gbGlzdF9sZW5ndGgodmFycyk7Ci0KLQlmb3JlYWNoKGxjLCB2YXJzKQot CXsKLQkJdmFyID0gbGZpcnN0KGxjKTsKLQotCQlpZiAoIXN0cm5jbXAodmFyLT5uYW1lLCB2 YXJOYW1lLCB2YXJOYW1lTGVuKSkKLQkJCWJyZWFrOwotCi0JCXZhciA9IE5VTEw7Ci0JCWlk Kys7Ci0JfQotCi0JaWYgKCF2YXIpCi0JCXJldHVybiAtMTsKLQotCWlmICghdmFyLT5ldmFs dWF0ZWQpCi0JewotCQlNZW1vcnlDb250ZXh0IG9sZGN4dCA9IHZhci0+bWN4dCA/Ci0JCU1l bW9yeUNvbnRleHRTd2l0Y2hUbyh2YXItPm1jeHQpIDogTlVMTDsKLQotCQl2YXItPnZhbHVl ID0gRXhlY0V2YWxFeHByKHZhci0+ZXN0YXRlLCB2YXItPmVjb250ZXh0LCAmdmFyLT5pc251 bGwpOwotCQl2YXItPmV2YWx1YXRlZCA9IHRydWU7Ci0KLQkJaWYgKG9sZGN4dCkKLQkJCU1l bW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjeHQpOwotCX0KLQotCWlmICh2YXItPmlzbnVsbCkK LQl7Ci0JCXZhbC0+dHlwZSA9IGpidk51bGw7Ci0JCXJldHVybiAwOwotCX0KLQotCUpzb25J dGVtRnJvbURhdHVtKHZhci0+dmFsdWUsIHZhci0+dHlwaWQsIHZhci0+dHlwbW9kLCB2YWwp OwotCi0JKmJhc2VPYmplY3QgPSAqdmFsOwotCXJldHVybiBpZDsKLX0KLQogLyoKICAqIENo ZWNrIHdoZXRoZXIgd2UgbmVlZCB0byBvdmVycmlkZSBkZWZhdWx0IGNvZXJjaW9uIGluCiAg KiBKU09OX1FVRVJZKE9NSVQgUVVPVEVTKSBjYXNlLgpAQCAtNTIxMCw5ICs1MTczLDggQEAg RXhlY0pzb25WYWx1ZUNvZXJjaW9uKEpzb25iVmFsdWUgKml0ZW0sIE9pZCB0eXBpZCwgaW50 MzIgdHlwbW9kLAogICogdHlwZS4KICAqLwogc3RhdGljIERhdHVtCi1FeGVjRXZhbEpzb25C ZWhhdmlvcihFeHByQ29udGV4dCAqZWNvbnRleHQsIEpzb25CZWhhdmlvciAqYmVoYXZpb3Is Ci0JCQkJCSBFeHByU3RhdGUgKmRlZmF1bHRfZXN0YXRlLAotCQkJCQkgT2lkIHJldF90eXBp ZCwgaW50MzIgcmV0X3R5cG1vZCwgYm9vbCAqaXNfbnVsbCkKK0V4ZWNFdmFsSnNvbkJlaGF2 aW9yKEpzb25CZWhhdmlvciAqYmVoYXZpb3IsIE9pZCByZXRfdHlwaWQsCisJCQkJCSBpbnQz MiByZXRfdHlwbW9kLCBib29sICppc19udWxsKQogewogCSppc19udWxsID0gZmFsc2U7CiAK QEAgLTUyNjIsMTIgKzUyMjQsOCBAQCBFeGVjRXZhbEpzb25CZWhhdmlvcihFeHByQ29udGV4 dCAqZWNvbnRleHQsIEpzb25CZWhhdmlvciAqYmVoYXZpb3IsCiAJCQlyZXR1cm4gKERhdHVt KSAwOwogCiAJCWNhc2UgSlNPTl9CRUhBVklPUl9ERUZBVUxUOgotCQkJLyoKLQkJCSAqIEV4 ZWN1dGUgREVGQVVMVCBleHByZXNzaW9uLgotCQkJICogQ29lcmNpb24gaXMgbm90IG5lZWRl ZCBoZXJlLCBiZWNhdXNlIGV4cHJlc3Npb24gaXMKLQkJCSAqIGFscmVhZHkgY29lcmNlZCB0 byB0aGUgdGFyZ2V0IHR5cGUgYnkgdGhlIHBhcnNlci4KLQkJCSAqLwotCQkJcmV0dXJuIEV4 ZWNFdmFsRXhwcihkZWZhdWx0X2VzdGF0ZSwgZWNvbnRleHQsIGlzX251bGwpOworCQkJQXNz ZXJ0KDApOworCQkJcmV0dXJuIChEYXR1bSkgMDsJLyogbXVzdCBiZSBoYW5kbGVkIGJ5IGNh bGxlciAqLwogCiAJCWRlZmF1bHQ6CiAJCQllbG9nKEVSUk9SLCAidW5yZWNvZ25pemVkIFNR TC9KU09OIGJlaGF2aW9yICVkIiwgYmVoYXZpb3ItPmJ0eXBlKTsKQEAgLTUyNzYsMjggKzUy MzQsMjcgQEAgRXhlY0V2YWxKc29uQmVoYXZpb3IoRXhwckNvbnRleHQgKmVjb250ZXh0LCBK c29uQmVoYXZpb3IgKmJlaGF2aW9yLAogfQogCiBzdGF0aWMgRGF0dW0KLUV4ZWNFdmFsSnNv bkV4cHJJbnRlcm5hbChFeHByU3RhdGUgKnN0YXRlLAotCQkJCQkJIEpzb25FeHByU3RhdGUg KmpzZXN0YXRlLCBFeHByQ29udGV4dCAqZWNvbnRleHQsCitFeGVjRXZhbEpzb25FeHBySW50 ZXJuYWwoRXhwclN0YXRlICpzdGF0ZSwgSnNvbkV4cHJTdGF0ZSAqanNlc3RhdGUsCiAJCQkJ CQkgSnNvblBhdGggKnBhdGgsIERhdHVtIGl0ZW0sIGJvb2wgKnJlc251bGwsCi0JCQkJCQkg Ym9vbCAqZXJyb3IpCisJCQkJCQkgYm9vbCAqZW1wdHksIGJvb2wgKmVycm9yKQogewogCUpz b25FeHByICAgKmpleHByID0ganNlc3RhdGUtPmpzZXhwcjsKLQlib29sCQllbXB0eSA9IGZh bHNlOwogCURhdHVtCQlyZXMgPSAoRGF0dW0pIDA7CiAJT2lkCQkJcmV0X3R5cGlkID0gamV4 cHItPnJldHVybmluZy0+dHlwaWQ7CiAJaW50MzIJCXJldF90eXBtb2QgPSBqZXhwci0+cmV0 dXJuaW5nLT50eXBtb2Q7CiAKIAkqcmVzbnVsbCA9IHRydWU7CisJKmVtcHR5ID0gZmFsc2U7 CiAKIAlzd2l0Y2ggKGpleHByLT5vcCkKIAl7CiAJCWNhc2UgSlNPTl9RVUVSWV9PUDoKLQkJ CXJlcyA9IEpzb25QYXRoUXVlcnkoaXRlbSwgcGF0aCwgamV4cHItPndyYXBwZXIsICZlbXB0 eSwgZXJyb3IsCisJCQlyZXMgPSBKc29uUGF0aFF1ZXJ5KGl0ZW0sIHBhdGgsIGpleHByLT53 cmFwcGVyLCBlbXB0eSwgZXJyb3IsCiAJCQkJCQkJCWpzZXN0YXRlLT5hcmdzKTsKIAkJCWlm IChlcnJvciAmJiAqZXJyb3IpCiAJCQkJcmV0dXJuIChEYXR1bSkgMDsKIAotCQkJaWYgKGVt cHR5KQorCQkJaWYgKCplbXB0eSkKIAkJCQlicmVhazsKIAogCQkJKnJlc251bGwgPSAhRGF0 dW1HZXRQb2ludGVyKHJlcyk7CkBAIC01MzY0LDEzICs1MzIxLDEzIEBAIEV4ZWNFdmFsSnNv bkV4cHJJbnRlcm5hbChFeHByU3RhdGUgKnN0YXRlLAogCiAJCWNhc2UgSlNPTl9WQUxVRV9P UDoKIAkJCXsKLQkJCQlKc29uYlZhbHVlICpqYnYgPSBKc29uUGF0aFZhbHVlKGl0ZW0sIHBh dGgsICZlbXB0eSwgZXJyb3IsCisJCQkJSnNvbmJWYWx1ZSAqamJ2ID0gSnNvblBhdGhWYWx1 ZShpdGVtLCBwYXRoLCBlbXB0eSwgZXJyb3IsCiAJCQkJCQkJCQkJCQlqc2VzdGF0ZS0+YXJn cyk7CiAKIAkJCQlpZiAoZXJyb3IgJiYgKmVycm9yKQogCQkJCQlyZXR1cm4gKERhdHVtKSAw OwogCi0JCQkJaWYgKGVtcHR5KQorCQkJCWlmICgqZW1wdHkpCiAJCQkJCWJyZWFrOwogCiAJ CQkJaWYgKCFqYnYpCkBAIC01NDA4LDc4ICs1MzY1LDEwMSBAQCBFeGVjRXZhbEpzb25FeHBy SW50ZXJuYWwoRXhwclN0YXRlICpzdGF0ZSwKIAkJCXJldHVybiAoRGF0dW0pIDA7CiAJfQog Ci0JQXNzZXJ0KGVtcHR5KTsKLQlBc3NlcnQoamV4cHItPm9uX2VtcHR5KTsJLyogaXQgaXMg bm90IEpTT05fRVhJU1RTICovCisJQXNzZXJ0KCplbXB0eSk7CiAKLQlpZiAoamV4cHItPm9u X2VtcHR5LT5idHlwZSA9PSBKU09OX0JFSEFWSU9SX0VSUk9SKQotCXsKLQkJaWYgKGVycm9y KQotCQl7Ci0JCQkqZXJyb3IgPSB0cnVlOwotCQkJcmV0dXJuIChEYXR1bSkgMDsKLQkJfQor CXJldHVybiAoRGF0dW0pIDA7Cit9CiAKLQkJZXJlcG9ydChFUlJPUiwKLQkJCQkoZXJyY29k ZShFUlJDT0RFX05PX1NRTF9KU09OX0lURU0pLAotCQkJCSBlcnJtc2coIm5vIFNRTC9KU09O IGl0ZW0iKSkpOworYm9vbAorRXhlY0V2YWxKc29uRXhwclNraXAoRXhwclN0YXRlICpzdGF0 ZSwgRXhwckV2YWxTdGVwICpvcCkKK3sKKwlKc29uRXhwclN0YXRlICpqc2VzdGF0ZSA9IG9w LT5kLmpzb25leHByX3NraXAuanNlc3RhdGU7CisKKwkvKgorCSAqIFNraXAgaWYgZWl0aGVy IG9mIHRoZSBpbnB1dCBleHByZXNzaW9ucyBoYXMgdHVybmVkIG91dCB0byBiZQorCSAqIE5V TEwsIHRob3VnaCBkbyBleGVjdXRlIGRvbWFpbiBjaGVja3MgZm9yIE5VTExzLCB3aGljaCBh cmUKKwkgKiBoYW5kbGVkIGJ5IHRoZSBjb2VyY2lvbiBzdGVwLgorCSAqLworCWlmIChqc2Vz dGF0ZS0+Zm9ybWF0dGVkX2V4cHIuaXNudWxsIHx8CisJCWpzZXN0YXRlLT5wYXRoc3BlYy5p c251bGwpCisJeworCQkqb3AtPnJlc3ZhbHVlID0gKERhdHVtKSAwOworCQkqb3AtPnJlc251 bGwgPSB0cnVlOworCQlyZXR1cm4gdHJ1ZTsKIAl9CiAKLQkvKiBFeGVjdXRlIE9OIEVNUFRZ IGJlaGF2aW9yICovCi0JcmV0dXJuIEV4ZWNFdmFsSnNvbkJlaGF2aW9yKGVjb250ZXh0LCBq ZXhwci0+b25fZW1wdHksCi0JCQkJCQkJCWpzZXN0YXRlLT5kZWZhdWx0X29uX2VtcHR5LAot CQkJCQkJCQlyZXRfdHlwaWQsIHJldF90eXBtb2QsIHJlc251bGwpOworCS8qCisJICogR28g ZXZhbHVhdGUgdGhlIFBBU1NJTkcgYXJncyBpZiBhbnkgYW5kIHN1YnNlcXVlbnRseSBKU09O IHBhdGgKKwkgKiBpdHNlbGYuCisJICovCisJcmV0dXJuIGZhbHNlOwogfQogCiAvKiAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCiAgKgkJRXhlY0V2YWxKc29uRXhwcgogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIFJl dHVybiB2YWx1ZToKKyAqICAgMSAtIE9rLCBqdW1wIHRvIHRoZSBlbmQgb2YgSnNvbkV4cHIK KyAqICAgMCAtIGVtcHR5IHJlc3VsdCwgbmVlZCB0byBleGVjdXRlIERFRkFVTFQgT04gRU1Q VFkgZXhwcmVzc2lvbgorICogIC0xIC0gZXJyb3Igb2NjdXJlZCwgbmVlZCB0byBleGVjdXRl IERFRkFVTFQgT04gRVJST1IgZXhwcmVzc2lvbgogICovCi12b2lkCi1FeGVjRXZhbEpzb25F eHByKEV4cHJTdGF0ZSAqc3RhdGUsIEV4cHJFdmFsU3RlcCAqb3AsIEV4cHJDb250ZXh0ICpl Y29udGV4dCkKK2ludAorRXhlY0V2YWxKc29uRXhwcihFeHByU3RhdGUgKnN0YXRlLCBFeHBy RXZhbFN0ZXAgKm9wKQogewogCUpzb25FeHByU3RhdGUgKmpzZXN0YXRlID0gb3AtPmQuanNv bmV4cHIuanNlc3RhdGU7CiAJSnNvbkV4cHIgICAqamV4cHIgPSBqc2VzdGF0ZS0+anNleHBy OwogCURhdHVtCQlpdGVtOwogCURhdHVtCQlyZXM7CiAJSnNvblBhdGggICAqcGF0aDsKLQlM aXN0Q2VsbCAgICpsYzsKKwlib29sCQllbXB0eSA9IGZhbHNlOwogCWJvb2wJCWVycm9yID0g ZmFsc2U7Ci0JYm9vbAkJdGhyb3dFcnJvcnMgPSBqZXhwci0+b25fZXJyb3ItPmJ0eXBlID09 IEpTT05fQkVIQVZJT1JfRVJST1I7Ci0KLQlpZiAoanNlc3RhdGUtPmZvcm1hdHRlZF9leHBy LmlzbnVsbCB8fCBqc2VzdGF0ZS0+cGF0aHNwZWMuaXNudWxsKQotCXsKLQkJKm9wLT5yZXNu dWxsID0gdHJ1ZTsKLQkJKm9wLT5yZXN2YWx1ZSA9IChEYXR1bSkgMDsKLQkJcmV0dXJuOwot CX0KKwlib29sCQl0aHJvd19lcnJvcnMgPSBqZXhwci0+b25fZXJyb3ItPmJ0eXBlID09IEpT T05fQkVIQVZJT1JfRVJST1I7CiAKIAlpdGVtID0ganNlc3RhdGUtPmZvcm1hdHRlZF9leHBy LnZhbHVlOwogCXBhdGggPSBEYXR1bUdldEpzb25QYXRoUChqc2VzdGF0ZS0+cGF0aHNwZWMu dmFsdWUpOwogCi0JLyogcmVzZXQgSlNPTiBwYXRoIHZhcmlhYmxlIGNvbnRleHRzICovCi0J Zm9yZWFjaChsYywganNlc3RhdGUtPmFyZ3MpCisJcmVzID0gRXhlY0V2YWxKc29uRXhwcklu dGVybmFsKHN0YXRlLCBqc2VzdGF0ZSwgcGF0aCwgaXRlbSwKKwkJCQkJCQkJICAgb3AtPnJl c251bGwsICZlbXB0eSwKKwkJCQkJCQkJICAgdGhyb3dfZXJyb3JzID8gTlVMTCA6ICZlcnJv cik7CisKKwlpZiAoZW1wdHkgJiYgIWVycm9yKQogCXsKLQkJSnNvblBhdGhWYXJpYWJsZUV2 YWxDb250ZXh0ICp2YXIgPSBsZmlyc3QobGMpOworCQlBc3NlcnQoamV4cHItPm9uX2VtcHR5 KTsJLyogaXQgaXMgbm90IEpTT05fRVhJU1RTICovCiAKLQkJdmFyLT5lY29udGV4dCA9IGVj b250ZXh0OwotCQl2YXItPmV2YWx1YXRlZCA9IGZhbHNlOwotCX0KKwkJaWYgKGpleHByLT5v bl9lbXB0eS0+YnR5cGUgPT0gSlNPTl9CRUhBVklPUl9FUlJPUikKKwkJeworCQkJaWYgKHRo cm93X2Vycm9ycykKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJKGVycmNvZGUoRVJSQ09E RV9OT19TUUxfSlNPTl9JVEVNKSwKKwkJCQkJCSBlcnJtc2coIm5vIFNRTC9KU09OIGl0ZW0i KSkpOwogCi0JcmVzID0gRXhlY0V2YWxKc29uRXhwckludGVybmFsKHN0YXRlLCBqc2VzdGF0 ZSwgZWNvbnRleHQsCi0JCQkJCQkJCSAgIHBhdGgsIGl0ZW0sIG9wLT5yZXNudWxsLAotCQkJ CQkJCQkgICB0aHJvd0Vycm9ycyA/IE5VTEwgOiAmZXJyb3IpOworCQkJZXJyb3IgPSB0cnVl OyAvKiBmYWxsYmFjayB0byBlcnJvciBiZWhhdmlvciAqLworCQl9CisJCWVsc2UgaWYgKGpl eHByLT5vbl9lbXB0eS0+YnR5cGUgPT0gSlNPTl9CRUhBVklPUl9ERUZBVUxUKQorCQkJcmV0 dXJuIDA7CS8qIGp1bXAgdG8gT04gRU1QVFkgZXhwcmVzc2lvbiAqLworCQllbHNlCisJCQkv KiBFeGVjdXRlIE9OIEVNUFRZIGJlaGF2aW9yICovCisJCQlyZXMgPSBFeGVjRXZhbEpzb25C ZWhhdmlvcihqZXhwci0+b25fZW1wdHksCisJCQkJCQkJCQkgICBqZXhwci0+cmV0dXJuaW5n LT50eXBpZCwKKwkJCQkJCQkJCSAgIGpleHByLT5yZXR1cm5pbmctPnR5cG1vZCwKKwkJCQkJ CQkJCSAgIG9wLT5yZXNudWxsKTsKKwl9CiAKIAlpZiAoZXJyb3IpCiAJewotCQlBc3NlcnQo IXRocm93RXJyb3JzKTsKKwkJQXNzZXJ0KCF0aHJvd19lcnJvcnMpOworCisJCWlmIChqZXhw ci0+b25fZXJyb3ItPmJ0eXBlID09IEpTT05fQkVIQVZJT1JfREVGQVVMVCkKKwkJCXJldHVy biAtMTsJLyoganVtcCB0byBPTiBFUlJPUiBleHByZXNzaW9uICovCiAKIAkJLyogRXhlY3V0 ZSBPTiBFUlJPUiBiZWhhdmlvciAqLwotCQlyZXMgPSBFeGVjRXZhbEpzb25CZWhhdmlvcihl Y29udGV4dCwgamV4cHItPm9uX2Vycm9yLAotCQkJCQkJCQkgICBqc2VzdGF0ZS0+ZGVmYXVs dF9vbl9lcnJvciwKKwkJcmVzID0gRXhlY0V2YWxKc29uQmVoYXZpb3IoamV4cHItPm9uX2Vy cm9yLAogCQkJCQkJCQkgICBqZXhwci0+cmV0dXJuaW5nLT50eXBpZCwKIAkJCQkJCQkJICAg amV4cHItPnJldHVybmluZy0+dHlwbW9kLAogCQkJCQkJCQkgICBvcC0+cmVzbnVsbCk7CiAJ fQogCiAJKm9wLT5yZXN2YWx1ZSA9IHJlczsKKwlyZXR1cm4gMTsJLyoganVtcCB0byB0aGUg ZW5kIG9mIGV4cHJlc3Npb24gKi8KIH0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2ppdC9s bHZtL2xsdm1qaXRfZXhwci5jIGIvc3JjL2JhY2tlbmQvaml0L2xsdm0vbGx2bWppdF9leHBy LmMKaW5kZXggZmQ3MjYzMGY1ZTYuLjc2ODFhNzdjZDYzIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9qaXQvbGx2bS9sbHZtaml0X2V4cHIuYworKysgYi9zcmMvYmFja2VuZC9qaXQvbGx2 bS9sbHZtaml0X2V4cHIuYwpAQCAtMjQwNywxMSArMjQwNyw3MSBAQCBsbHZtX2NvbXBpbGVf ZXhwcihFeHByU3RhdGUgKnN0YXRlKQogCQkJCUxMVk1CdWlsZEJyKGIsIG9wYmxvY2tzW29w bm8gKyAxXSk7CiAJCQkJYnJlYWs7CiAKLQkJCWNhc2UgRUVPUF9KU09ORVhQUjoKLQkJCQli dWlsZF9FdmFsWEZ1bmMoYiwgbW9kLCAiRXhlY0V2YWxKc29uRXhwciIsCi0JCQkJCQkJCXZf c3RhdGUsIG9wLCB2X2Vjb250ZXh0KTsKLQkJCQlMTFZNQnVpbGRCcihiLCBvcGJsb2Nrc1tv cG5vICsgMV0pOwotCQkJCWJyZWFrOworCQkJY2FzZSBFRU9QX0pTT05FWFBSX1NLSVA6CisJ CQkJeworCQkJCQlMTFZNVmFsdWVSZWYgdl9yZXQ7CisKKwkJCQkJLyoKKwkJCQkJICogQ2Fs bCBFeGVjRXZhbEpzb25FeHByU2tpcCgpIHRvIGRlY2lkZSBpZiBKU09OCisJCQkJCSAqIHBh dGggZXZhbHVhdGlvbiBjYW4gYmUgc2tpcHBlZC4gIFRoaXMgcmV0dXJucworCQkJCQkgKiBi b29sZWFuICJza2lwIiBmbGFnLgorCQkJCQkgKi8KKwkJCQkJdl9yZXQgPSBidWlsZF9FdmFs WEZ1bmMoYiwgbW9kLCAiRXhlY0V2YWxKc29uRXhwclNraXAiLAorCQkJCQkJCQkJCQl2X3N0 YXRlLCBvcCk7CisJCQkJCXZfcmV0ID0gTExWTUJ1aWxkWkV4dChiLCB2X3JldCwgVHlwZVN0 b3JhZ2VCb29sLCAiIik7CisKKwkJCQkJLyoKKwkJCQkJICogSnVtcCB0byBjb2VyY2lvbiBz dGVwIGlmIHRydWUgd2FzIHJldHVybmVkLAorCQkJCQkgKiB3aGljaCBzaWduaWZpZXMgc2tp cHBpbmcgb2YgSlNPTiBwYXRoIGV2YWx1YXRpb24sCisJCQkJCSAqIGVsc2UgdG8gdGhlIG5l eHQgc3RlcCB3aGljaCBtdXN0IHBvaW50IHRvIHRoZQorCQkJCQkgKiBzdGVwcyB0byBldmFs dWF0ZSBQQVNTSU5HIGFyZ3MsIGlmIGFueSwgb3IgdG8KKwkJCQkJICogdGhlIEpTT04gcGF0 aCBldmFsdWF0aW9uLgorCQkJCQkgKi8KKwkJCQkJTExWTUJ1aWxkQ29uZEJyKGIsCisJCQkJ CQkJCQlMTFZNQnVpbGRJQ21wKGIsCisJCQkJCQkJCQkJCQkgIExMVk1JbnRFUSwKKwkJCQkJ CQkJCQkJCSAgdl9yZXQsCisJCQkJCQkJCQkJCQkgIGxfc2Jvb2xfY29uc3QoMCksCisJCQkJ CQkJCQkJCQkgICIiKSwKKwkJCQkJCQkJCW9wYmxvY2tzW29wbm8gKyAxXSwKKwkJCQkJCQkJ CW9wYmxvY2tzW29wLT5kLmpzb25leHByX3NraXAuanVtcF9kb25lXSk7CisJCQkJCWJyZWFr OworCQkJCX0KKworCQkJY2FzZSBFRU9QX0pTT05FWFBSX1BBVEg6CisJCQkJeworCQkJCQlM TFZNVmFsdWVSZWYgdl9yZXQ7CisJCQkJCUxMVk1WYWx1ZVJlZiB2X3N3aXRjaDsKKwkJCQkJ aW50CQkJbl9qdW1wcyA9IDA7CisKKwkJCQkJdl9yZXQgPSBidWlsZF9FdmFsWEZ1bmMoYiwg bW9kLCAiRXhlY0V2YWxKc29uRXhwciIsCisJCQkJCQkJCQkJCXZfc3RhdGUsIG9wKTsKKwor CQkJCQlpZiAob3AtPmQuanNvbmV4cHIuanVtcF9kZWZhdWx0X29uX2VtcHR5ICE9IG9wLT5k Lmpzb25leHByLmp1bXBfZG9uZSkKKwkJCQkJCW5fanVtcHMrKzsKKworCQkJCQlpZiAob3At PmQuanNvbmV4cHIuanVtcF9kZWZhdWx0X29uX2Vycm9yICE9IG9wLT5kLmpzb25leHByLmp1 bXBfZG9uZSkKKwkJCQkJCW5fanVtcHMrKzsKKworCQkJCQlpZiAoIW5fanVtcHMpCisJCQkJ CQlMTFZNQnVpbGRCcihiLCBvcGJsb2Nrc1tvcC0+ZC5qc29uZXhwci5qdW1wX2RvbmVdKTsK KwkJCQkJZWxzZQorCQkJCQl7CisJCQkJCQl2X3N3aXRjaCA9IExMVk1CdWlsZFN3aXRjaChi LCB2X3JldCwKKwkJCQkJCQkJCQkJCSAgIG9wYmxvY2tzW29wLT5kLmpzb25leHByLmp1bXBf ZG9uZV0sCisJCQkJCQkJCQkJCQkgICBuX2p1bXBzKTsKKworCQkJCQkJaWYgKG9wLT5kLmpz b25leHByLmp1bXBfZGVmYXVsdF9vbl9lbXB0eSAhPSBvcC0+ZC5qc29uZXhwci5qdW1wX2Rv bmUpCisJCQkJCQkJTExWTUFkZENhc2Uodl9zd2l0Y2gsIGxfaW50MzJfY29uc3QoMCksCisJ CQkJCQkJCQkJb3BibG9ja3Nbb3AtPmQuanNvbmV4cHIuanVtcF9kZWZhdWx0X29uX2VtcHR5 XSk7CisKKwkJCQkJCWlmIChvcC0+ZC5qc29uZXhwci5qdW1wX2RlZmF1bHRfb25fZXJyb3Ig IT0gb3AtPmQuanNvbmV4cHIuanVtcF9kb25lKQorCQkJCQkJCUxMVk1BZGRDYXNlKHZfc3dp dGNoLCBsX2ludDMyX2NvbnN0KC0xKSwKKwkJCQkJCQkJCQlvcGJsb2Nrc1tvcC0+ZC5qc29u ZXhwci5qdW1wX2RlZmF1bHRfb25fZXJyb3JdKTsKKwkJCQkJfQorCisJCQkJCWJyZWFrOwor CQkJCX0KIAogCQkJY2FzZSBFRU9QX0xBU1Q6CiAJCQkJQXNzZXJ0KGZhbHNlKTsKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2ppdC9sbHZtL2xsdm1qaXRfdHlwZXMuYyBiL3NyYy9iYWNr ZW5kL2ppdC9sbHZtL2xsdm1qaXRfdHlwZXMuYwppbmRleCAzN2ZlNjQ2NTRiNi4uYjkxNDhj ZTUxNWMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2ppdC9sbHZtL2xsdm1qaXRfdHlwZXMu YworKysgYi9zcmMvYmFja2VuZC9qaXQvbGx2bS9sbHZtaml0X3R5cGVzLmMKQEAgLTEzNiw2 ICsxMzYsNyBAQCB2b2lkCSAgICpyZWZlcmVuY2VkX2Z1bmN0aW9uc1tdID0KIAlFeGVjRXZh bEpzb25Db25zdHJ1Y3RvciwKIAlFeGVjRXZhbEpzb25Jc1ByZWRpY2F0ZSwKIAlFeGVjRXZh bEpzb25FeHByLAorCUV4ZWNFdmFsSnNvbkV4cHJTa2lwLAogCU1ha2VFeHBhbmRlZE9iamVj dFJlYWRPbmx5SW50ZXJuYWwsCiAJc2xvdF9nZXRtaXNzaW5nYXR0cnMsCiAJc2xvdF9nZXRz b21lYXR0cnNfaW50LApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb25w YXRoX2V4ZWMuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29ucGF0aF9leGVjLmMKaW5k ZXggNWI2YTQ4MDU3MjEuLmI4OTQ5Nzg5NzEwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91 dGlscy9hZHQvanNvbnBhdGhfZXhlYy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9q c29ucGF0aF9leGVjLmMKQEAgLTI4Niw2ICsyODYsOCBAQCBzdGF0aWMgSnNvblBhdGhFeGVj UmVzdWx0IGFwcGVuZEJvb2xSZXN1bHQoSnNvblBhdGhFeGVjQ29udGV4dCAqY3h0LAogCQkJ CQkJCQkJCSAgIEpzb25QYXRoSXRlbSAqanNwLCBKc29uVmFsdWVMaXN0ICpmb3VuZCwgSnNv blBhdGhCb29sIHJlcyk7CiBzdGF0aWMgdm9pZCBnZXRKc29uUGF0aEl0ZW0oSnNvblBhdGhF eGVjQ29udGV4dCAqY3h0LCBKc29uUGF0aEl0ZW0gKml0ZW0sCiAJCQkJCQkJSnNvbmJWYWx1 ZSAqdmFsdWUpOworc3RhdGljIGludCBldmFsSnNvblBhdGhWYXJpYWJsZSh2b2lkICpjeHQs IGNoYXIgKnZhck5hbWUsIGludCB2YXJOYW1lTGVuLAorCQkJCQkJCQlKc29uYlZhbHVlICp2 YWwsIEpzb25iVmFsdWUgKmJhc2VPYmplY3QpOwogc3RhdGljIHZvaWQgZ2V0SnNvblBhdGhW YXJpYWJsZShKc29uUGF0aEV4ZWNDb250ZXh0ICpjeHQsCiAJCQkJCQkJCUpzb25QYXRoSXRl bSAqdmFyaWFibGUsIEpzb25iVmFsdWUgKnZhbHVlKTsKIHN0YXRpYyBpbnQJZ2V0SnNvblBh dGhWYXJpYWJsZUZyb21Kc29uYih2b2lkICp2YXJzSnNvbmIsIGNoYXIgKnZhck5hbWUsCkBA IC0yMTcyLDYgKzIxNzQsNzEgQEAgZ2V0SnNvblBhdGhJdGVtKEpzb25QYXRoRXhlY0NvbnRl eHQgKmN4dCwgSnNvblBhdGhJdGVtICppdGVtLAogCX0KIH0KIAorLyoKKyAqIEV2YWx1YXRl IGEgSlNPTiBwYXRoIHZhcmlhYmxlIGNhY2hpbmcgY29tcHV0ZWQgdmFsdWUuCisgKi8KK3N0 YXRpYyBpbnQKK2V2YWxKc29uUGF0aFZhcmlhYmxlKHZvaWQgKmN4dCwgY2hhciAqdmFyTmFt ZSwgaW50IHZhck5hbWVMZW4sCisJCQkJCSBKc29uYlZhbHVlICp2YWwsIEpzb25iVmFsdWUg KmJhc2VPYmplY3QpCit7CisJSnNvblBhdGhWYXJpYWJsZUV2YWxDb250ZXh0ICp2YXIgPSBO VUxMOworCUxpc3QJICAgKnZhcnMgPSBjeHQ7CisJTGlzdENlbGwgICAqbGM7CisJaW50CQkJ aWQgPSAxOworCisJaWYgKCF2YXJOYW1lKQorCQlyZXR1cm4gbGlzdF9sZW5ndGgodmFycyk7 CisKKwlmb3JlYWNoKGxjLCB2YXJzKQorCXsKKwkJdmFyID0gbGZpcnN0KGxjKTsKKworCQlp ZiAoIXN0cm5jbXAodmFyLT5uYW1lLCB2YXJOYW1lLCB2YXJOYW1lTGVuKSkKKwkJCWJyZWFr OworCisJCXZhciA9IE5VTEw7CisJCWlkKys7CisJfQorCisJaWYgKCF2YXIpCisJCXJldHVy biAtMTsKKworCS8qCisJICogV2hlbiBiZWxvbmdpbmcgdG8gYSBKc29uRXhwciwgcGF0aCB2 YXJpYWJsZXMgYXJlIGNvbXB1dGVkIHdpdGggdGhlCisJICogSnNvbkV4cHIncyBFeHByU3Rh dGUgKHZhci0+ZXN0YXRlIGlzIE5VTEwpLCBzbyBkb24ndCBuZWVkIHRvIGJlIGNvbXB1dGVk CisJICogaGVyZS4gIEluIHNvbWUgb3RoZXIgY2FzZXMsIHN1Y2ggYXMgd2hlbiB0aGUgcGF0 aCB2YXJpYWJsZXMgYmVsb25naW5nCisJICogdG8gYSBKc29uVGFibGUgaW5zdGVhZCwgdGhv c2UgdmFyaWFibGVzIG11c3QgYmUgZXZhbHVhdGVkIG9uIHRoZWlyIG93biwKKwkgKiB3aXRo b3V0IHRoZSBlbmNsb3NpbmcgSnNvbkV4cHIgaXRzZWxmIG5lZWRpbmcgdG8gYmUgZXZhbHVh dGVkLCBzbyBtdXN0CisJICogYmUgaGFuZGxlZCBoZXJlLgorCSAqLworCWlmICghdmFyLT5l c3RhdGUpCisJeworCQlBc3NlcnQodmFyLT5ldmFsdWF0ZWQpOworCX0KKwllbHNlIGlmICgh dmFyLT5ldmFsdWF0ZWQpCisJeworCQlNZW1vcnlDb250ZXh0IG9sZGN4dCA9IHZhci0+bWN4 dCA/IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyh2YXItPm1jeHQpIDogTlVMTDsKKworCQlBc3Nl cnQodmFyLT5lY29udGV4dCk7CisJCXZhci0+dmFsdWUgPSBFeGVjRXZhbEV4cHIodmFyLT5l c3RhdGUsIHZhci0+ZWNvbnRleHQsICZ2YXItPmlzbnVsbCk7CisJCXZhci0+ZXZhbHVhdGVk ID0gdHJ1ZTsKKworCQlpZiAob2xkY3h0KQorCQkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9s ZGN4dCk7CisJfQorCisJaWYgKHZhci0+aXNudWxsKQorCXsKKwkJdmFsLT50eXBlID0gamJ2 TnVsbDsKKwkJcmV0dXJuIDA7CisJfQorCisJSnNvbkl0ZW1Gcm9tRGF0dW0odmFyLT52YWx1 ZSwgdmFyLT50eXBpZCwgdmFyLT50eXBtb2QsIHZhbCk7CisKKwkqYmFzZU9iamVjdCA9ICp2 YWw7CisJcmV0dXJuIGlkOworfQorCiAvKgogICogR2V0IHRoZSB2YWx1ZSBvZiB2YXJpYWJs ZSBwYXNzZWQgdG8ganNvbnBhdGggZXhlY3V0b3IKICAqLwpAQCAtMjkwMyw3ICsyOTcwLDcg QEAgY29tcGFyZURhdGV0aW1lKERhdHVtIHZhbDEsIE9pZCB0eXBpZDEsIERhdHVtIHZhbDIs IE9pZCB0eXBpZDIsCiBib29sCiBKc29uUGF0aEV4aXN0cyhEYXR1bSBqYiwgSnNvblBhdGgg KmpwLCBMaXN0ICp2YXJzLCBib29sICplcnJvcikKIHsKLQlKc29uUGF0aEV4ZWNSZXN1bHQg cmVzID0gZXhlY3V0ZUpzb25QYXRoKGpwLCB2YXJzLCBFdmFsSnNvblBhdGhWYXIsCisJSnNv blBhdGhFeGVjUmVzdWx0IHJlcyA9IGV4ZWN1dGVKc29uUGF0aChqcCwgdmFycywgZXZhbEpz b25QYXRoVmFyaWFibGUsCiAJCQkJCQkJCQkJCSBEYXR1bUdldEpzb25iUChqYiksICFlcnJv ciwgTlVMTCwKIAkJCQkJCQkJCQkJIHRydWUpOwogCkBAIC0yOTI1LDggKzI5OTIsOCBAQCBK c29uUGF0aFF1ZXJ5KERhdHVtIGpiLCBKc29uUGF0aCAqanAsIEpzb25XcmFwcGVyIHdyYXBw ZXIsIGJvb2wgKmVtcHR5LAogCUpzb25QYXRoRXhlY1Jlc3VsdCByZXMgUEdfVVNFRF9GT1Jf QVNTRVJUU19PTkxZOwogCWludAkJCWNvdW50OwogCi0JcmVzID0gZXhlY3V0ZUpzb25QYXRo KGpwLCB2YXJzLCBFdmFsSnNvblBhdGhWYXIsIERhdHVtR2V0SnNvbmJQKGpiKSwgIWVycm9y LAotCQkJCQkJICAmZm91bmQsIHRydWUpOworCXJlcyA9IGV4ZWN1dGVKc29uUGF0aChqcCwg dmFycywgZXZhbEpzb25QYXRoVmFyaWFibGUsCisJCQkJCQkgIERhdHVtR2V0SnNvbmJQKGpi KSwgIWVycm9yLCAmZm91bmQsIHRydWUpOwogCiAJQXNzZXJ0KGVycm9yIHx8ICFqcGVySXNF cnJvcihyZXMpKTsKIApAQCAtMjk5Miw4ICszMDU5LDggQEAgSnNvblBhdGhWYWx1ZShEYXR1 bSBqYiwgSnNvblBhdGggKmpwLCBib29sICplbXB0eSwgYm9vbCAqZXJyb3IsIExpc3QgKnZh cnMpCiAJSnNvblBhdGhFeGVjUmVzdWx0IGpwZXIgUEdfVVNFRF9GT1JfQVNTRVJUU19PTkxZ OwogCWludAkJCWNvdW50OwogCi0JanBlciA9IGV4ZWN1dGVKc29uUGF0aChqcCwgdmFycywg RXZhbEpzb25QYXRoVmFyLCBEYXR1bUdldEpzb25iUChqYiksICFlcnJvciwKLQkJCQkJCSAg ICZmb3VuZCwgdHJ1ZSk7CisJanBlciA9IGV4ZWN1dGVKc29uUGF0aChqcCwgdmFycywgZXZh bEpzb25QYXRoVmFyaWFibGUsCisJCQkJCQkgICBEYXR1bUdldEpzb25iUChqYiksICFlcnJv ciwgJmZvdW5kLCB0cnVlKTsKIAogCUFzc2VydChlcnJvciB8fCAhanBlcklzRXJyb3IoanBl cikpOwogCkBAIC0zMzA2LDcgKzMzNzMsNyBAQCBKc29uVGFibGVSZXNldENvbnRleHRJdGVt KEpzb25UYWJsZVNjYW5TdGF0ZSAqc2NhbiwgRGF0dW0gaXRlbSkKIAogCW9sZGN4dCA9IE1l bW9yeUNvbnRleHRTd2l0Y2hUbyhzY2FuLT5tY3h0KTsKIAotCXJlcyA9IGV4ZWN1dGVKc29u UGF0aChzY2FuLT5wYXRoLCBzY2FuLT5hcmdzLCBFdmFsSnNvblBhdGhWYXIsIGpzLAorCXJl cyA9IGV4ZWN1dGVKc29uUGF0aChzY2FuLT5wYXRoLCBzY2FuLT5hcmdzLCBldmFsSnNvblBh dGhWYXJpYWJsZSwganMsCiAJCQkJCQkgIHNjYW4tPmVycm9yT25FcnJvciwgJnNjYW4tPmZv dW5kLCBmYWxzZSAvKiBGSVhNRSAqLyApOwogCiAJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9s ZGN4dCk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjRXhwci5oIGIv c3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY0V4cHIuaAppbmRleCBhZGFiZjU3Yzk3Yi4uYjAw NWJmNDQwZGQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWNFeHByLmgK KysrIGIvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY0V4cHIuaApAQCAtMjQ0LDcgKzI0NCw4 IEBAIHR5cGVkZWYgZW51bSBFeHByRXZhbE9wCiAJRUVPUF9TVUJQTEFOLAogCUVFT1BfSlNP Tl9DT05TVFJVQ1RPUiwKIAlFRU9QX0lTX0pTT04sCi0JRUVPUF9KU09ORVhQUiwKKwlFRU9Q X0pTT05FWFBSX1NLSVAsCisJRUVPUF9KU09ORVhQUl9QQVRILAogCiAJLyogYWdncmVnYXRp b24gcmVsYXRlZCBub2RlcyAqLwogCUVFT1BfQUdHX1NUUklDVF9ERVNFUklBTElaRSwKQEAg LTY5Niw4ICs2OTcsMTggQEAgdHlwZWRlZiBzdHJ1Y3QgRXhwckV2YWxTdGVwCiAJCXN0cnVj dAogCQl7CiAJCQlzdHJ1Y3QgSnNvbkV4cHJTdGF0ZSAqanNlc3RhdGU7CisJCQlpbnQJCQlq dW1wX2RvbmU7CisJCQlpbnQJCQlqdW1wX2RlZmF1bHRfb25fZW1wdHk7IC8qIE9OIEVNUFRZ IERFRkFVTFQgZXhwcmVzc2lvbiAqLworCQkJaW50CQkJanVtcF9kZWZhdWx0X29uX2Vycm9y OyAvKiBPTiBFUlJPUiBERUZBVUxUIGV4cHJlc3Npb24gKi8KIAkJfQkJCWpzb25leHByOwog CisJCS8qIGZvciBFRU9QX0pTT05FWFBSX1NLSVAgKi8KKwkJc3RydWN0CisJCXsKKwkJCXN0 cnVjdCBKc29uRXhwclN0YXRlICpqc2VzdGF0ZTsKKwkJCWludAkJCWp1bXBfZG9uZTsKKwkJ fQkJCWpzb25leHByX3NraXA7CisKIAl9CQkJZDsKIH0gRXhwckV2YWxTdGVwOwogCkBAIC03 NjQsMTEgKzc3NSw4IEBAIHR5cGVkZWYgc3RydWN0IEpzb25FeHByU3RhdGUKIAogCU51bGxh YmxlRGF0dW0KIAkJCQlmb3JtYXR0ZWRfZXhwciwJLyogZm9ybWF0dGVkIGNvbnRleHQgaXRl bSB2YWx1ZSAqLwotCQkJCWNvZXJjaW9uX2V4cHIsCS8qIGlucHV0IGZvciBKU09OIGl0ZW0g Y29lcmNpb24gKi8KIAkJCQlwYXRoc3BlYzsJCS8qIHBhdGggc3BlY2lmaWNhdGlvbiB2YWx1 ZSAqLwogCi0JRXhwclN0YXRlICAqZGVmYXVsdF9vbl9lbXB0eTsJLyogT04gRU1QVFkgREVG QVVMVCBleHByZXNzaW9uICovCi0JRXhwclN0YXRlICAqZGVmYXVsdF9vbl9lcnJvcjsJLyog T04gRVJST1IgREVGQVVMVCBleHByZXNzaW9uICovCiAJTGlzdAkgICAqYXJnczsJCQkvKiBw YXNzaW5nIGFyZ3VtZW50cyAqLwogfSBKc29uRXhwclN0YXRlOwogCkBAIC04MzEsOCArODM5 LDggQEAgZXh0ZXJuIHZvaWQgRXhlY0V2YWxTeXNWYXIoRXhwclN0YXRlICpzdGF0ZSwgRXhw ckV2YWxTdGVwICpvcCwKIAkJCQkJCSAgIEV4cHJDb250ZXh0ICplY29udGV4dCwgVHVwbGVU YWJsZVNsb3QgKnNsb3QpOwogZXh0ZXJuIHZvaWQgRXhlY0V2YWxKc29uQ29uc3RydWN0b3Io RXhwclN0YXRlICpzdGF0ZSwgRXhwckV2YWxTdGVwICpvcCwKIAkJCQkJCQkJCUV4cHJDb250 ZXh0ICplY29udGV4dCk7Ci1leHRlcm4gdm9pZCBFeGVjRXZhbEpzb25FeHByKEV4cHJTdGF0 ZSAqc3RhdGUsIEV4cHJFdmFsU3RlcCAqb3AsCi0JCQkJCQkJIEV4cHJDb250ZXh0ICplY29u dGV4dCk7CitleHRlcm4gaW50IEV4ZWNFdmFsSnNvbkV4cHIoRXhwclN0YXRlICpzdGF0ZSwg RXhwckV2YWxTdGVwICpvcCk7CitleHRlcm4gYm9vbCBFeGVjRXZhbEpzb25FeHByU2tpcChF eHByU3RhdGUgKnN0YXRlLCBFeHByRXZhbFN0ZXAgKm9wKTsKIAogZXh0ZXJuIHZvaWQgRXhl Y0FnZ0luaXRHcm91cChBZ2dTdGF0ZSAqYWdnc3RhdGUsIEFnZ1N0YXRlUGVyVHJhbnMgcGVy dHJhbnMsIEFnZ1N0YXRlUGVyR3JvdXAgcGVyZ3JvdXAsCiAJCQkJCQkJIEV4cHJDb250ZXh0 ICphZ2djb250ZXh0KTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3V0aWxzL2pzb25wYXRo LmggYi9zcmMvaW5jbHVkZS91dGlscy9qc29ucGF0aC5oCmluZGV4IGU5MTM0YjdlYWI0Li5h MzNhNzcwZjdhYSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMvanNvbnBhdGguaAor KysgYi9zcmMvaW5jbHVkZS91dGlscy9qc29ucGF0aC5oCkBAIC0yODAsMTAgKzI4MCw2IEBA IGV4dGVybiBEYXR1bSBKc29uUGF0aFF1ZXJ5KERhdHVtIGpiLCBKc29uUGF0aCAqanAsIEpz b25XcmFwcGVyIHdyYXBwZXIsCiAJCQkJCQkgICBib29sICplbXB0eSwgYm9vbCAqZXJyb3Is IExpc3QgKnZhcnMpOwogZXh0ZXJuIEpzb25iVmFsdWUgKkpzb25QYXRoVmFsdWUoRGF0dW0g amIsIEpzb25QYXRoICpqcCwgYm9vbCAqZW1wdHksCiAJCQkJCQkJCSBib29sICplcnJvciwg TGlzdCAqdmFycyk7Ci0KLWV4dGVybiBpbnQJRXZhbEpzb25QYXRoVmFyKHZvaWQgKnZhcnMs IGNoYXIgKnZhck5hbWUsIGludCB2YXJOYW1lTGVuLAotCQkJCQkJCUpzb25iVmFsdWUgKnZh bCwgSnNvbmJWYWx1ZSAqYmFzZU9iamVjdCk7Ci0KIGV4dGVybiBQR0RMTElNUE9SVCBjb25z dCBUYWJsZUZ1bmNSb3V0aW5lIEpzb25iVGFibGVSb3V0aW5lOwogCiAjZW5kaWYKLS0gCjIu MTcuMQoK --------------jNrKutSsb0Ih2JPBTjkEydni Content-Type: text/x-patch; charset=UTF-8; name="v9-0009-Remove-support-of-DEFAULT-ON-EMPTY-in-SQL-JSON-fu.patch" Content-Disposition: attachment; filename*0="v9-0009-Remove-support-of-DEFAULT-ON-EMPTY-in-SQL-JSON-fu.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSBkN2U2OTRhMzAwNmRiY2ExN2ZkMTU2NzI0YzhiMWFjOWI1MTFhZDExIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBOaWtpdGEgR2x1a2hvdiA8bi5nbHVob3ZAcG9zdGdy ZXNwcm8ucnU+CkRhdGU6IE1vbiwgMjkgQXVnIDIwMjIgMjM6MjM6MDIgKzAzMDAKU3ViamVj dDogW1BBVENIIHY5IDkvOV0gUmVtb3ZlIHN1cHBvcnQgb2YgREVGQVVMVCBPTiBFTVBUWSBp biBTUUwvSlNPTgogZnVuY3Rpb25zCgotLS0KIGRvYy9zcmMvc2dtbC9mdW5jLnNnbWwgICAg ICAgICAgICAgICAgICAgICAgfCAgNCArLQogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0V4 cHIuYyAgICAgICAgICAgICB8IDIxIC0tLS0tLQogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhl Y0V4cHJJbnRlcnAuYyAgICAgICB8IDI3ICsrKystLS0tCiBzcmMvYmFja2VuZC9qaXQvbGx2 bS9sbHZtaml0X2V4cHIuYyAgICAgICAgIHwgMzIgKysrLS0tLS0tCiBzcmMvYmFja2VuZC9w YXJzZXIvcGFyc2VfZXhwci5jICAgICAgICAgICAgIHwgMzMgKystLS0tLS0tCiBzcmMvaW5j bHVkZS9leGVjdXRvci9leGVjRXhwci5oICAgICAgICAgICAgIHwgIDMgKy0KIHNyYy90ZXN0 L3JlZ3Jlc3MvZXhwZWN0ZWQvanNvbmJfc3FsanNvbi5vdXQgfCA3NCArKysrKysrKystLS0t LS0tLS0tLS0KIHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2pzb25iX3NxbGpzb24uc3FsICAgICAg fCAzNCArKysrKy0tLS0tCiA4IGZpbGVzIGNoYW5nZWQsIDgyIGluc2VydGlvbnMoKyksIDE0 NiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvZnVuYy5zZ21sIGIv ZG9jL3NyYy9zZ21sL2Z1bmMuc2dtbAppbmRleCA4ZGQ2M2MwNDU1Ni4uOGUwM2ExODMxYWIg MTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9mdW5jLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21s L2Z1bmMuc2dtbApAQCAtMTc5NzYsNyArMTc5NzYsNyBAQCBGUk9NCiAgICAgICAgIDxwYXJh bWV0ZXI+Y29udGV4dF9pdGVtPC9wYXJhbWV0ZXI+LCA8cGFyYW1ldGVyPnBhdGhfZXhwcmVz c2lvbjwvcGFyYW1ldGVyPgogICAgICAgICA8b3B0aW9uYWw+IDxsaXRlcmFsPlBBU1NJTkc8 L2xpdGVyYWw+IHsgPHBhcmFtZXRlcj52YWx1ZTwvcGFyYW1ldGVyPiA8bGl0ZXJhbD5BUzwv bGl0ZXJhbD4gPHBhcmFtZXRlcj52YXJuYW1lPC9wYXJhbWV0ZXI+IH0gPG9wdGlvbmFsPiwg Li4uPC9vcHRpb25hbD48L29wdGlvbmFsPgogICAgICAgICA8b3B0aW9uYWw+IDxsaXRlcmFs PlJFVFVSTklORzwvbGl0ZXJhbD4gPHBhcmFtZXRlcj5kYXRhX3R5cGU8L3BhcmFtZXRlcj4g PC9vcHRpb25hbD4KLSAgICAgICAgPG9wdGlvbmFsPiB7IDxsaXRlcmFsPkVSUk9SPC9saXRl cmFsPiB8IDxsaXRlcmFsPk5VTEw8L2xpdGVyYWw+IHwgPGxpdGVyYWw+REVGQVVMVDwvbGl0 ZXJhbD4gPHBhcmFtZXRlcj5leHByZXNzaW9uPC9wYXJhbWV0ZXI+IH0gPGxpdGVyYWw+T04g RU1QVFk8L2xpdGVyYWw+IDwvb3B0aW9uYWw+CisgICAgICAgIDxvcHRpb25hbD4geyA8bGl0 ZXJhbD5FUlJPUjwvbGl0ZXJhbD4gfCA8bGl0ZXJhbD5OVUxMPC9saXRlcmFsPiB9IDxsaXRl cmFsPk9OIEVNUFRZPC9saXRlcmFsPiA8L29wdGlvbmFsPgogICAgICAgICA8b3B0aW9uYWw+ IHsgPGxpdGVyYWw+RVJST1I8L2xpdGVyYWw+IHwgPGxpdGVyYWw+TlVMTDwvbGl0ZXJhbD4g fCA8bGl0ZXJhbD5ERUZBVUxUPC9saXRlcmFsPiA8cGFyYW1ldGVyPmV4cHJlc3Npb248L3Bh cmFtZXRlcj4gfSA8bGl0ZXJhbD5PTiBFUlJPUjwvbGl0ZXJhbD4gPC9vcHRpb25hbD4pCiAg ICAgICAgPC9wYXJhPgogICAgICAgIDxwYXJhPgpAQCAtMTgwMTcsNyArMTgwMTcsNyBAQCBG Uk9NCiAgICAgICAgIDxvcHRpb25hbD4gPGxpdGVyYWw+UkVUVVJOSU5HPC9saXRlcmFsPiA8 cGFyYW1ldGVyPmRhdGFfdHlwZTwvcGFyYW1ldGVyPiA8b3B0aW9uYWw+IDxsaXRlcmFsPkZP Uk1BVCBKU09OPC9saXRlcmFsPiA8b3B0aW9uYWw+IDxsaXRlcmFsPkVOQ09ESU5HIFVURjg8 L2xpdGVyYWw+IDwvb3B0aW9uYWw+IDwvb3B0aW9uYWw+IDwvb3B0aW9uYWw+CiAgICAgICAg IDxvcHRpb25hbD4geyA8bGl0ZXJhbD5XSVRIT1VUPC9saXRlcmFsPiB8IDxsaXRlcmFsPldJ VEg8L2xpdGVyYWw+IHsgPGxpdGVyYWw+Q09ORElUSU9OQUw8L2xpdGVyYWw+IHwgPG9wdGlv bmFsPjxsaXRlcmFsPlVOQ09ORElUSU9OQUw8L2xpdGVyYWw+PC9vcHRpb25hbD4gfSB9IDxv cHRpb25hbD4gPGxpdGVyYWw+QVJSQVk8L2xpdGVyYWw+IDwvb3B0aW9uYWw+IDxsaXRlcmFs PldSQVBQRVI8L2xpdGVyYWw+IDwvb3B0aW9uYWw+CiAgICAgICAgIDxvcHRpb25hbD4geyA8 bGl0ZXJhbD5LRUVQPC9saXRlcmFsPiB8IDxsaXRlcmFsPk9NSVQ8L2xpdGVyYWw+IH0gPGxp dGVyYWw+UVVPVEVTPC9saXRlcmFsPiA8b3B0aW9uYWw+IDxsaXRlcmFsPk9OIFNDQUxBUiBT VFJJTkc8L2xpdGVyYWw+IDwvb3B0aW9uYWw+IDwvb3B0aW9uYWw+Ci0gICAgICAgIDxvcHRp b25hbD4geyA8bGl0ZXJhbD5FUlJPUjwvbGl0ZXJhbD4gfCA8bGl0ZXJhbD5OVUxMPC9saXRl cmFsPiB8IDxsaXRlcmFsPkVNUFRZPC9saXRlcmFsPiB7IDxvcHRpb25hbD4gPGxpdGVyYWw+ QVJSQVk8L2xpdGVyYWw+IDwvb3B0aW9uYWw+IHwgPGxpdGVyYWw+T0JKRUNUPC9saXRlcmFs PiB9IHwgPGxpdGVyYWw+REVGQVVMVDwvbGl0ZXJhbD4gPHBhcmFtZXRlcj5leHByZXNzaW9u PC9wYXJhbWV0ZXI+IH0gPGxpdGVyYWw+T04gRU1QVFk8L2xpdGVyYWw+IDwvb3B0aW9uYWw+ CisgICAgICAgIDxvcHRpb25hbD4geyA8bGl0ZXJhbD5FUlJPUjwvbGl0ZXJhbD4gfCA8bGl0 ZXJhbD5OVUxMPC9saXRlcmFsPiB8IDxsaXRlcmFsPkVNUFRZPC9saXRlcmFsPiB7IDxvcHRp b25hbD4gPGxpdGVyYWw+QVJSQVk8L2xpdGVyYWw+IDwvb3B0aW9uYWw+IHwgPGxpdGVyYWw+ T0JKRUNUPC9saXRlcmFsPiB9IH0gPGxpdGVyYWw+T04gRU1QVFk8L2xpdGVyYWw+IDwvb3B0 aW9uYWw+CiAgICAgICAgIDxvcHRpb25hbD4geyA8bGl0ZXJhbD5FUlJPUjwvbGl0ZXJhbD4g fCA8bGl0ZXJhbD5OVUxMPC9saXRlcmFsPiB8IDxsaXRlcmFsPkVNUFRZPC9saXRlcmFsPiB7 IDxvcHRpb25hbD4gPGxpdGVyYWw+QVJSQVk8L2xpdGVyYWw+IDwvb3B0aW9uYWw+IHwgPGxp dGVyYWw+T0JKRUNUPC9saXRlcmFsPiB9IHwgPGxpdGVyYWw+REVGQVVMVDwvbGl0ZXJhbD4g PHBhcmFtZXRlcj5leHByZXNzaW9uPC9wYXJhbWV0ZXI+IH0gPGxpdGVyYWw+T04gRVJST1I8 L2xpdGVyYWw+IDwvb3B0aW9uYWw+KQogICAgICAgPC9wYXJhPgogICAgICAgIDxwYXJhPgpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0V4cHIuYyBiL3NyYy9iYWNr ZW5kL2V4ZWN1dG9yL2V4ZWNFeHByLmMKaW5kZXggNjgyMjdlYmVlMjEuLjVlYTdlNmI0MjFh IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjRXhwci5jCisrKyBiL3Ny Yy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNFeHByLmMKQEAgLTQxNjYsOSArNDE2Niw3IEBAIEV4 ZWNJbml0SnNvbkV4cHIoSnNvbkV4cHIgKmpleHByLCBFeHByU3RhdGUgKnN0YXRlLCBFeHBy RXZhbFN0ZXAgKnNjcmF0Y2gsCiAJaW50CQkJc2tpcF9zdGVwX29mZjsKIAlpbnQJCQlleGVj cGF0aF9zdGVwX29mZjsKIAlpbnQJCQlkb25lX3N0ZXBfb2ZmOwotCWludAkJCWRlZmF1bHRf b25fZW1wdHlfc3RlcF9vZmYgPSAtMTsKIAlpbnQJCQlkZWZhdWx0X29uX2Vycm9yX3N0ZXBf b2ZmID0gLTE7Ci0JaW50CQkJZGVmYXVsdF9vbl9lbXB0eV9qdW1wX29mZiA9IC0xOwogCiAJ LyogSlNPTl9UQUJMRSBwcmV1ZG8tZnVuY3Rpb24gcmV0dXJucyBjb250ZXh0IGl0ZW0gYXMg YSByZXN1bHQgKi8KIAlpZiAoamV4cHItPm9wID09IEpTT05fVEFCTEVfT1ApCkBAIC00MjM1 LDE2ICs0MjMzLDYgQEAgRXhlY0luaXRKc29uRXhwcihKc29uRXhwciAqamV4cHIsIEV4cHJT dGF0ZSAqc3RhdGUsIEV4cHJFdmFsU3RlcCAqc2NyYXRjaCwKIAlleGVjcGF0aF9zdGVwX29m ZiA9IHN0YXRlLT5zdGVwc19sZW47CiAJRXhwckV2YWxQdXNoU3RlcChzdGF0ZSwgc2NyYXRj aCk7CiAKLQlpZiAoamV4cHItPm9uX2VtcHR5ICYmIGpleHByLT5vbl9lbXB0eS0+ZGVmYXVs dF9leHByKQotCXsKLQkJZGVmYXVsdF9vbl9lbXB0eV9zdGVwX29mZiA9IHN0YXRlLT5zdGVw c19sZW47Ci0JCUV4ZWNJbml0RXhwclJlYygoRXhwciAqKSBqZXhwci0+b25fZW1wdHktPmRl ZmF1bHRfZXhwciwgc3RhdGUsIHJlc3YsIHJlc251bGwpOwotCi0JCXNjcmF0Y2gtPm9wY29k ZSA9IEVFT1BfSlVNUDsKLQkJZGVmYXVsdF9vbl9lbXB0eV9qdW1wX29mZiA9IHN0YXRlLT5z dGVwc19sZW47Ci0JCUV4cHJFdmFsUHVzaFN0ZXAoc3RhdGUsIHNjcmF0Y2gpOwotCX0KLQog CWlmIChqZXhwci0+b25fZXJyb3ItPmRlZmF1bHRfZXhwcikKIAl7CiAJCWRlZmF1bHRfb25f ZXJyb3Jfc3RlcF9vZmYgPSBzdGF0ZS0+c3RlcHNfbGVuOwpAQCAtNDI2MSwxNSArNDI0OSw2 IEBAIEV4ZWNJbml0SnNvbkV4cHIoSnNvbkV4cHIgKmpleHByLCBFeHByU3RhdGUgKnN0YXRl LCBFeHByRXZhbFN0ZXAgKnNjcmF0Y2gsCiAJLyogRUVPUF9KU09ORVhQUl9QQVRIICovCiAJ c3RlcCA9ICZzdGF0ZS0+c3RlcHNbZXhlY3BhdGhfc3RlcF9vZmZdOwogCXN0ZXAtPmQuanNv bmV4cHIuanVtcF9kb25lID0gZG9uZV9zdGVwX29mZjsKLQlzdGVwLT5kLmpzb25leHByLmp1 bXBfZGVmYXVsdF9vbl9lbXB0eSA9Ci0JCWRlZmF1bHRfb25fZW1wdHlfc3RlcF9vZmYgPiAw ID8gZGVmYXVsdF9vbl9lbXB0eV9zdGVwX29mZiA6IGRvbmVfc3RlcF9vZmY7CiAJc3RlcC0+ ZC5qc29uZXhwci5qdW1wX2RlZmF1bHRfb25fZXJyb3IgPQogCQlkZWZhdWx0X29uX2Vycm9y X3N0ZXBfb2ZmID4gMCA/IGRlZmF1bHRfb25fZXJyb3Jfc3RlcF9vZmYgOiBkb25lX3N0ZXBf b2ZmOwotCi0JLyogRUVPUF9KVU1QICovCi0JaWYgKGRlZmF1bHRfb25fZW1wdHlfanVtcF9v ZmYgPiAwKQotCXsKLQkJc3RlcCA9ICZzdGF0ZS0+c3RlcHNbZGVmYXVsdF9vbl9lbXB0eV9q dW1wX29mZl07Ci0JCXN0ZXAtPmQuanVtcC5qdW1wZG9uZSA9IGRvbmVfc3RlcF9vZmY7Ci0J fQogfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0V4cHJJbnRlcnAu YyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNFeHBySW50ZXJwLmMKaW5kZXggZDM5MjIz ZTBkMTUuLjlhMTg0MTNjNmU4IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9l eGVjRXhwckludGVycC5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNFeHBySW50 ZXJwLmMKQEAgLTE4NTUsMTQgKzE4NTUsMTAgQEAgRXhlY0ludGVycEV4cHIoRXhwclN0YXRl ICpzdGF0ZSwgRXhwckNvbnRleHQgKmVjb250ZXh0LCBib29sICppc251bGwpCiAJCUVFT19D QVNFKEVFT1BfSlNPTkVYUFJfUEFUSCkKIAkJewogCQkJLyogdG9vIGNvbXBsZXggZm9yIGFu IGlubGluZSBpbXBsZW1lbnRhdGlvbiAqLwotCQkJaW50CQkJcmVzID0gRXhlY0V2YWxKc29u RXhwcihzdGF0ZSwgb3ApOwotCi0JCQlpZiAocmVzID09IDApCi0JCQkJRUVPX0pVTVAob3At PmQuanNvbmV4cHIuanVtcF9kZWZhdWx0X29uX2VtcHR5KTsKLQkJCWVsc2UgaWYgKHJlcyA9 PSAtMSkKLQkJCQlFRU9fSlVNUChvcC0+ZC5qc29uZXhwci5qdW1wX2RlZmF1bHRfb25fZXJy b3IpOwotCQkJZWxzZQorCQkJaWYgKEV4ZWNFdmFsSnNvbkV4cHIoc3RhdGUsIG9wKSkKIAkJ CQlFRU9fSlVNUChvcC0+ZC5qc29uZXhwci5qdW1wX2RvbmUpOworCQkJZWxzZQorCQkJCUVF T19KVU1QKG9wLT5kLmpzb25leHByLmp1bXBfZGVmYXVsdF9vbl9lcnJvcik7CiAJCX0KIAog CQlFRU9fQ0FTRShFRU9QX0xBU1QpCkBAIC01NDAwLDExICs1Mzk2LDEwIEBAIEV4ZWNFdmFs SnNvbkV4cHJTa2lwKEV4cHJTdGF0ZSAqc3RhdGUsIEV4cHJFdmFsU3RlcCAqb3ApCiAgKiAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCiAgKgogICogUmV0dXJuIHZhbHVlOgotICogICAxIC0gT2ssIGp1bXAgdG8g dGhlIGVuZCBvZiBKc29uRXhwcgotICogICAwIC0gZW1wdHkgcmVzdWx0LCBuZWVkIHRvIGV4 ZWN1dGUgREVGQVVMVCBPTiBFTVBUWSBleHByZXNzaW9uCi0gKiAgLTEgLSBlcnJvciBvY2N1 cmVkLCBuZWVkIHRvIGV4ZWN1dGUgREVGQVVMVCBPTiBFUlJPUiBleHByZXNzaW9uCisgKiAg IHRydWUgIC0gT2ssIGp1bXAgdG8gdGhlIGVuZCBvZiBKc29uRXhwcgorICogICBmYWxzZSAt IGVycm9yIG9jY3VyZWQsIG5lZWQgdG8gZXhlY3V0ZSBERUZBVUxUIE9OIEVSUk9SIGV4cHJl c3Npb24KICAqLwotaW50Citib29sCiBFeGVjRXZhbEpzb25FeHByKEV4cHJTdGF0ZSAqc3Rh dGUsIEV4cHJFdmFsU3RlcCAqb3ApCiB7CiAJSnNvbkV4cHJTdGF0ZSAqanNlc3RhdGUgPSBv cC0+ZC5qc29uZXhwci5qc2VzdGF0ZTsKQEAgLTU0MzYsMTQgKzU0MzEsMTYgQEAgRXhlY0V2 YWxKc29uRXhwcihFeHByU3RhdGUgKnN0YXRlLCBFeHByRXZhbFN0ZXAgKm9wKQogCiAJCQll cnJvciA9IHRydWU7IC8qIGZhbGxiYWNrIHRvIGVycm9yIGJlaGF2aW9yICovCiAJCX0KLQkJ ZWxzZSBpZiAoamV4cHItPm9uX2VtcHR5LT5idHlwZSA9PSBKU09OX0JFSEFWSU9SX0RFRkFV TFQpCi0JCQlyZXR1cm4gMDsJLyoganVtcCB0byBPTiBFTVBUWSBleHByZXNzaW9uICovCiAJ CWVsc2UKKwkJeworCQkJQXNzZXJ0KGpleHByLT5vbl9lbXB0eS0+YnR5cGUgIT0gSlNPTl9C RUhBVklPUl9ERUZBVUxUKTsgLyogbm90IHN1cHBvcnRlZCAqLworCiAJCQkvKiBFeGVjdXRl IE9OIEVNUFRZIGJlaGF2aW9yICovCiAJCQlyZXMgPSBFeGVjRXZhbEpzb25CZWhhdmlvcihq ZXhwci0+b25fZW1wdHksCiAJCQkJCQkJCQkgICBqZXhwci0+cmV0dXJuaW5nLT50eXBpZCwK IAkJCQkJCQkJCSAgIGpleHByLT5yZXR1cm5pbmctPnR5cG1vZCwKIAkJCQkJCQkJCSAgIG9w LT5yZXNudWxsKTsKKwkJfQogCX0KIAogCWlmIChlcnJvcikKQEAgLTU0NTEsNyArNTQ0OCw3 IEBAIEV4ZWNFdmFsSnNvbkV4cHIoRXhwclN0YXRlICpzdGF0ZSwgRXhwckV2YWxTdGVwICpv cCkKIAkJQXNzZXJ0KCF0aHJvd19lcnJvcnMpOwogCiAJCWlmIChqZXhwci0+b25fZXJyb3It PmJ0eXBlID09IEpTT05fQkVIQVZJT1JfREVGQVVMVCkKLQkJCXJldHVybiAtMTsJLyoganVt cCB0byBPTiBFUlJPUiBleHByZXNzaW9uICovCisJCQlyZXR1cm4gZmFsc2U7CS8qIGp1bXAg dG8gT04gRVJST1IgZXhwcmVzc2lvbiAqLwogCiAJCS8qIEV4ZWN1dGUgT04gRVJST1IgYmVo YXZpb3IgKi8KIAkJcmVzID0gRXhlY0V2YWxKc29uQmVoYXZpb3IoamV4cHItPm9uX2Vycm9y LApAQCAtNTQ2MSw1ICs1NDU4LDUgQEAgRXhlY0V2YWxKc29uRXhwcihFeHByU3RhdGUgKnN0 YXRlLCBFeHByRXZhbFN0ZXAgKm9wKQogCX0KIAogCSpvcC0+cmVzdmFsdWUgPSByZXM7Ci0J cmV0dXJuIDE7CS8qIGp1bXAgdG8gdGhlIGVuZCBvZiBleHByZXNzaW9uICovCisJcmV0dXJu IHRydWU7CS8qIGp1bXAgdG8gdGhlIGVuZCBvZiBleHByZXNzaW9uICovCiB9CmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9qaXQvbGx2bS9sbHZtaml0X2V4cHIuYyBiL3NyYy9iYWNrZW5k L2ppdC9sbHZtL2xsdm1qaXRfZXhwci5jCmluZGV4IDc2ODFhNzdjZDYzLi5lMDg5MGZiNjNm MSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvaml0L2xsdm0vbGx2bWppdF9leHByLmMKKysr IGIvc3JjL2JhY2tlbmQvaml0L2xsdm0vbGx2bWppdF9leHByLmMKQEAgLTI0NDEsMzQgKzI0 NDEsMjIgQEAgbGx2bV9jb21waWxlX2V4cHIoRXhwclN0YXRlICpzdGF0ZSkKIAkJCWNhc2Ug RUVPUF9KU09ORVhQUl9QQVRIOgogCQkJCXsKIAkJCQkJTExWTVZhbHVlUmVmIHZfcmV0Owot CQkJCQlMTFZNVmFsdWVSZWYgdl9zd2l0Y2g7Ci0JCQkJCWludAkJCW5fanVtcHMgPSAwOwog CiAJCQkJCXZfcmV0ID0gYnVpbGRfRXZhbFhGdW5jKGIsIG1vZCwgIkV4ZWNFdmFsSnNvbkV4 cHIiLAogCQkJCQkJCQkJCQl2X3N0YXRlLCBvcCk7Ci0KLQkJCQkJaWYgKG9wLT5kLmpzb25l eHByLmp1bXBfZGVmYXVsdF9vbl9lbXB0eSAhPSBvcC0+ZC5qc29uZXhwci5qdW1wX2RvbmUp Ci0JCQkJCQluX2p1bXBzKys7CisJCQkJCXZfcmV0ID0gTExWTUJ1aWxkWkV4dChiLCB2X3Jl dCwgVHlwZVN0b3JhZ2VCb29sLCAiIik7CiAKIAkJCQkJaWYgKG9wLT5kLmpzb25leHByLmp1 bXBfZGVmYXVsdF9vbl9lcnJvciAhPSBvcC0+ZC5qc29uZXhwci5qdW1wX2RvbmUpCi0JCQkJ CQluX2p1bXBzKys7Ci0KLQkJCQkJaWYgKCFuX2p1bXBzKQotCQkJCQkJTExWTUJ1aWxkQnIo Yiwgb3BibG9ja3Nbb3AtPmQuanNvbmV4cHIuanVtcF9kb25lXSk7CisJCQkJCQlMTFZNQnVp bGRDb25kQnIoYiwKKwkJCQkJCQkJCQlMTFZNQnVpbGRJQ21wKGIsCisJCQkJCQkJCQkJCQkJ ICBMTFZNSW50RVEsCisJCQkJCQkJCQkJCQkJICB2X3JldCwKKwkJCQkJCQkJCQkJCQkgIGxf c2Jvb2xfY29uc3QoMCksCisJCQkJCQkJCQkJCQkJICAiIiksCisJCQkJCQkJCQkJb3BibG9j a3Nbb3AtPmQuanNvbmV4cHIuanVtcF9kZWZhdWx0X29uX2Vycm9yXSwKKwkJCQkJCQkJCQlv cGJsb2Nrc1tvcC0+ZC5qc29uZXhwci5qdW1wX2RvbmVdKTsKIAkJCQkJZWxzZQotCQkJCQl7 Ci0JCQkJCQl2X3N3aXRjaCA9IExMVk1CdWlsZFN3aXRjaChiLCB2X3JldCwKLQkJCQkJCQkJ CQkJCSAgIG9wYmxvY2tzW29wLT5kLmpzb25leHByLmp1bXBfZG9uZV0sCi0JCQkJCQkJCQkJ CQkgICBuX2p1bXBzKTsKLQotCQkJCQkJaWYgKG9wLT5kLmpzb25leHByLmp1bXBfZGVmYXVs dF9vbl9lbXB0eSAhPSBvcC0+ZC5qc29uZXhwci5qdW1wX2RvbmUpCi0JCQkJCQkJTExWTUFk ZENhc2Uodl9zd2l0Y2gsIGxfaW50MzJfY29uc3QoMCksCi0JCQkJCQkJCQkJb3BibG9ja3Nb b3AtPmQuanNvbmV4cHIuanVtcF9kZWZhdWx0X29uX2VtcHR5XSk7Ci0KLQkJCQkJCWlmIChv cC0+ZC5qc29uZXhwci5qdW1wX2RlZmF1bHRfb25fZXJyb3IgIT0gb3AtPmQuanNvbmV4cHIu anVtcF9kb25lKQotCQkJCQkJCUxMVk1BZGRDYXNlKHZfc3dpdGNoLCBsX2ludDMyX2NvbnN0 KC0xKSwKLQkJCQkJCQkJCQlvcGJsb2Nrc1tvcC0+ZC5qc29uZXhwci5qdW1wX2RlZmF1bHRf b25fZXJyb3JdKTsKLQkJCQkJfQorCQkJCQkJTExWTUJ1aWxkQnIoYiwgb3BibG9ja3Nbb3At PmQuanNvbmV4cHIuanVtcF9kb25lXSk7CiAKIAkJCQkJYnJlYWs7CiAJCQkJfQpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX2V4cHIuYyBiL3NyYy9iYWNrZW5kL3Bh cnNlci9wYXJzZV9leHByLmMKaW5kZXggYzAyNTMwYTM2NzEuLmY5NjMzNGNlMDg4IDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfZXhwci5jCisrKyBiL3NyYy9iYWNr ZW5kL3BhcnNlci9wYXJzZV9leHByLmMKQEAgLTQyNjMsNyArNDI2Myw2IEBAIHN0YXRpYyBO b2RlICoKIGNvZXJjZURlZmF1bHRKc29uRXhwcihQYXJzZVN0YXRlICpwc3RhdGUsIEpzb25F eHByICpqc2V4cHIsCiAJCQkJCSAgYm9vbCBpc19vbl9lbXB0eSwgTm9kZSAqZGVmZXhwcikK IHsKLQlOb2RlCSAgICpvcmlnX2RlZmV4cHIgPSBkZWZleHByOwogCWludAkJCWxvY2F0aW9u OwogCU9pZAkJCWV4cHJ0eXBlOwogCkBAIC00Mjc2LDYgKzQyNzUsMTIgQEAgY29lcmNlRGVm YXVsdEpzb25FeHByKFBhcnNlU3RhdGUgKnBzdGF0ZSwgSnNvbkV4cHIgKmpzZXhwciwKIAlp ZiAobG9jYXRpb24gPCAwKQogCQlsb2NhdGlvbiA9IGpzZXhwci0+bG9jYXRpb247CiAKKwlp ZiAoaXNfb25fZW1wdHkpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09E RV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAorCQkJCSBlcnJtc2coIkRFRkFVTFQgT04gRU1Q VFkgZXhwcmVzc2lvbnMgYXJlIG5vdCBzdXBwb3J0ZWQiKSwKKwkJCQkgcGFyc2VyX2VycnBv c2l0aW9uKHBzdGF0ZSwgbG9jYXRpb24pKSk7CisKIAlkZWZleHByID0gY29lcmNlX3RvX3Rh cmdldF90eXBlKHBzdGF0ZSwKIAkJCQkJCQkJCWRlZmV4cHIsCiAJCQkJCQkJCQlleHBydHlw ZSwKQEAgLTQyOTMsMzEgKzQyOTgsNyBAQCBjb2VyY2VEZWZhdWx0SnNvbkV4cHIoUGFyc2VT dGF0ZSAqcHN0YXRlLCBKc29uRXhwciAqanNleHByLAogCQkJCQkJZm9ybWF0X3R5cGVfYmUo anNleHByLT5yZXR1cm5pbmctPnR5cGlkKSksCiAJCQkJIHBhcnNlcl9lcnJwb3NpdGlvbihw c3RhdGUsIGxvY2F0aW9uKSkpOwogCi0JLyogRG9uJ3QgYWxsb3cgdW5zYWZlIERFRkFVTCBP TiBFTVBUWSBleHByZXNzaW9ucywgdW5sZXNzIEVSUk9SIE9OIEVSUk9SICovCi0JaWYgKCFp c19vbl9lbXB0eSB8fAotCQlqc2V4cHItPm9uX2Vycm9yLT5idHlwZSA9PSBKU09OX0JFSEFW SU9SX0VSUk9SKQotCQlyZXR1cm4gZGVmZXhwcjsKLQotCWlmICghZXhwcl9jYW5fdGhyb3df ZXJyb3JzKGRlZmV4cHIpKQotCQlyZXR1cm4gZGVmZXhwcjsKLQotCS8qIFRyeSB0byBzaW1w bGlmeSBleHByZXNzaW9uIGlmIHRoZXJlIGlzIG5vbi1lbXB0eSBjb2VyY2lvbiAqLwotCWlm IChkZWZleHByICE9IG9yaWdfZGVmZXhwciAmJgotCQkhZXhwcl9jYW5fdGhyb3dfZXJyb3Jz KG9yaWdfZGVmZXhwcikpCi0JewotCQlkZWZleHByID0gZXZhbF9jb25zdF9leHByZXNzaW9u cyhOVUxMLCBkZWZleHByKTsKLQotCQlpZiAoIWV4cHJfY2FuX3Rocm93X2Vycm9ycyhkZWZl eHByKSkKLQkJCXJldHVybiBkZWZleHByOwotCX0KLQotCWVyZXBvcnQoRVJST1IsCi0JCQko ZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCi0JCQkgZXJybXNnKCJ1 bnNhZmUgREVGQVVMVCBPTiBFTVBUWSBleHByZXNzaW9ucyBhcmUgbm90IHN1cHBvcnRlZCIp LAotCQkJIGVycmhpbnQoIlVzZSBFUlJPUiBPTiBFUlJPUiBjbGF1c2Ugb3IgdHJ5IHRvIHNp bXBsaWZ5IGV4cHJlc3Npb24gaW50byBjb25zdGFudC1saWtlIGZvcm0uIiksCi0JCQkgcGFy c2VyX2VycnBvc2l0aW9uKHBzdGF0ZSwgbG9jYXRpb24pKSk7Ci0KLQlyZXR1cm4gTlVMTDsK KwlyZXR1cm4gZGVmZXhwcjsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2V4 ZWN1dG9yL2V4ZWNFeHByLmggYi9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjRXhwci5oCmlu ZGV4IGIwMDViZjQ0MGRkLi5kNjc0MTljNjZhOSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUv ZXhlY3V0b3IvZXhlY0V4cHIuaAorKysgYi9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjRXhw ci5oCkBAIC02OTgsNyArNjk4LDYgQEAgdHlwZWRlZiBzdHJ1Y3QgRXhwckV2YWxTdGVwCiAJ CXsKIAkJCXN0cnVjdCBKc29uRXhwclN0YXRlICpqc2VzdGF0ZTsKIAkJCWludAkJCWp1bXBf ZG9uZTsKLQkJCWludAkJCWp1bXBfZGVmYXVsdF9vbl9lbXB0eTsgLyogT04gRU1QVFkgREVG QVVMVCBleHByZXNzaW9uICovCiAJCQlpbnQJCQlqdW1wX2RlZmF1bHRfb25fZXJyb3I7IC8q IE9OIEVSUk9SIERFRkFVTFQgZXhwcmVzc2lvbiAqLwogCQl9CQkJanNvbmV4cHI7CiAKQEAg LTgzOSw3ICs4MzgsNyBAQCBleHRlcm4gdm9pZCBFeGVjRXZhbFN5c1ZhcihFeHByU3RhdGUg KnN0YXRlLCBFeHByRXZhbFN0ZXAgKm9wLAogCQkJCQkJICAgRXhwckNvbnRleHQgKmVjb250 ZXh0LCBUdXBsZVRhYmxlU2xvdCAqc2xvdCk7CiBleHRlcm4gdm9pZCBFeGVjRXZhbEpzb25D b25zdHJ1Y3RvcihFeHByU3RhdGUgKnN0YXRlLCBFeHByRXZhbFN0ZXAgKm9wLAogCQkJCQkJ CQkJRXhwckNvbnRleHQgKmVjb250ZXh0KTsKLWV4dGVybiBpbnQgRXhlY0V2YWxKc29uRXhw cihFeHByU3RhdGUgKnN0YXRlLCBFeHByRXZhbFN0ZXAgKm9wKTsKK2V4dGVybiBib29sIEV4 ZWNFdmFsSnNvbkV4cHIoRXhwclN0YXRlICpzdGF0ZSwgRXhwckV2YWxTdGVwICpvcCk7CiBl eHRlcm4gYm9vbCBFeGVjRXZhbEpzb25FeHByU2tpcChFeHByU3RhdGUgKnN0YXRlLCBFeHBy RXZhbFN0ZXAgKm9wKTsKIAogZXh0ZXJuIHZvaWQgRXhlY0FnZ0luaXRHcm91cChBZ2dTdGF0 ZSAqYWdnc3RhdGUsIEFnZ1N0YXRlUGVyVHJhbnMgcGVydHJhbnMsIEFnZ1N0YXRlUGVyR3Jv dXAgcGVyZ3JvdXAsCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pz b25iX3NxbGpzb24ub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9qc29uYl9zcWxq c29uLm91dAppbmRleCAwZTA3YmJjODU4Zi4uZmNkOTIxMTMwZjUgMTAwNjQ0Ci0tLSBhL3Ny Yy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvanNvbmJfc3FsanNvbi5vdXQKKysrIGIvc3JjL3Rl c3QvcmVncmVzcy9leHBlY3RlZC9qc29uYl9zcWxqc29uLm91dApAQCAtNTM3LDExICs1Mzcs OSBAQCBTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnMScsICdsYXggJC5hJyBOVUxMIE9OIEVN UFRZIERFRkFVTFQgJzInIE9OIEVSUk9SKTsKICgxIHJvdykKIAogU0VMRUNUIEpTT05fVkFM VUUoanNvbmIgJzEnLCAnbGF4ICQuYScgREVGQVVMVCAnMicgT04gRU1QVFkgREVGQVVMVCAn MycgT04gRVJST1IpOwotIGpzb25fdmFsdWUgCi0tLS0tLS0tLS0tLS0KLSAyCi0oMSByb3cp Ci0KK0VSUk9SOiAgREVGQVVMVCBPTiBFTVBUWSBleHByZXNzaW9ucyBhcmUgbm90IHN1cHBv cnRlZAorTElORSAxOiBTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnMScsICdsYXggJC5hJyBE RUZBVUxUICcyJyBPTiBFTVBUWSAuLi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBeCiBTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAn MScsICdsYXggJC5hJyBFUlJPUiBPTiBFTVBUWSBERUZBVUxUICczJyBPTiBFUlJPUik7CiAg anNvbl92YWx1ZSAKIC0tLS0tLS0tLS0tLQpAQCAtNTc2LDcgKzU3NCw3IEBAIFNFTEVDVAog CQlqc29uYiAneyJhIjogMSwgImIiOiAyfScsCiAJCSckLiogPyAoQCA+ICR4KScgUEFTU0lO RyB4IEFTIHgKIAkJUkVUVVJOSU5HIGludAotCQlERUZBVUxUIC0xIE9OIEVNUFRZCisJCU5V TEwgT04gRU1QVFkKIAkJREVGQVVMVCAtMiBPTiBFUlJPUgogCSkgeQogRlJPTQpAQCAtNTg1 LDcgKzU4Myw3IEBAIEZST00KIC0tLSstLS0tCiAgMCB8IC0yCiAgMSB8ICAyCi0gMiB8IC0x CisgMiB8ICAgCiAoMyByb3dzKQogCiBTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAnbnVsbCcs ICckYScgUEFTU0lORyBwb2ludCAnICgxLCAyICknIEFTIGEpOwpAQCAtNjM0LDMxICs2MzIs MjUgQEAgU0VMRUNUIEpTT05fVkFMVUUoJzEnOjpqc29uYiwgJyQueCcgUkVUVVJOSU5HIGlu dAogICAgICAgICAgICAgICAgICAgREVGQVVMVCAxIC8geCBPTiBFTVBUWQogICAgICAgICAg ICAgICAgICAgREVGQVVMVCAyIE9OIEVSUk9SKQogRlJPTSAoVkFMVUVTICgxOjppbnQpLCAo MCkpIHgoeCk7Ci1FUlJPUjogIHVuc2FmZSBERUZBVUxUIE9OIEVNUFRZIGV4cHJlc3Npb25z IGFyZSBub3Qgc3VwcG9ydGVkCitFUlJPUjogIERFRkFVTFQgT04gRU1QVFkgZXhwcmVzc2lv bnMgYXJlIG5vdCBzdXBwb3J0ZWQKIExJTkUgMjogICAgICAgICAgICAgICAgICAgREVGQVVM VCAxIC8geCBPTiBFTVBUWQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4K LUhJTlQ6ICBVc2UgRVJST1IgT04gRVJST1IgY2xhdXNlIG9yIHRyeSB0byBzaW1wbGlmeSBl eHByZXNzaW9uIGludG8gY29uc3RhbnQtbGlrZSBmb3JtLgogU0VMRUNUIEpTT05fVkFMVUUo JzEnOjpqc29uYiwgJyQueCcgUkVUVVJOSU5HIGludCBERUZBVUxUIC0xIE9OIEVNUFRZKTsK LSBqc29uX3ZhbHVlIAotLS0tLS0tLS0tLS0tCi0gICAgICAgICAtMQotKDEgcm93KQotCitF UlJPUjogIERFRkFVTFQgT04gRU1QVFkgZXhwcmVzc2lvbnMgYXJlIG5vdCBzdXBwb3J0ZWQK K0xJTkUgMTogLi4uU09OX1ZBTFVFKCcxJzo6anNvbmIsICckLngnIFJFVFVSTklORyBpbnQg REVGQVVMVCAtMSBPTiBFTVBULi4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgogU0VMRUNUIEpTT05fVkFMVUUoJzEn Ojpqc29uYiwgJyQueCcgUkVUVVJOSU5HIGludCBERUZBVUxUICctMScgT04gRU1QVFkpOwot IGpzb25fdmFsdWUgCi0tLS0tLS0tLS0tLS0KLSAgICAgICAgIC0xCi0oMSByb3cpCi0KK0VS Uk9SOiAgREVGQVVMVCBPTiBFTVBUWSBleHByZXNzaW9ucyBhcmUgbm90IHN1cHBvcnRlZAor TElORSAxOiAuLi5TT05fVkFMVUUoJzEnOjpqc29uYiwgJyQueCcgUkVUVVJOSU5HIGludCBE RUZBVUxUICctMScgT04gRU0uLi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCiBTRUxFQ1QgSlNPTl9WQUxVRSgnMSc6 Ompzb25iLCAnJC54JyBSRVRVUk5JTkcgaW50IERFRkFVTFQgJ2VycicgT04gRU1QVFkpOwot RVJST1I6ICBpbnZhbGlkIGlucHV0IHN5bnRheCBmb3IgdHlwZSBpbnRlZ2VyOiAiZXJyIgor RVJST1I6ICBERUZBVUxUIE9OIEVNUFRZIGV4cHJlc3Npb25zIGFyZSBub3Qgc3VwcG9ydGVk CiBMSU5FIDE6IC4uLlNPTl9WQUxVRSgnMSc6Ompzb25iLCAnJC54JyBSRVRVUk5JTkcgaW50 IERFRkFVTFQgJ2VycicgT04gRS4uLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KIFNFTEVDVCBKU09OX1ZBTFVFKCcx Jzo6anNvbmIsICckLngnIFJFVFVSTklORyBpbnQgREVGQVVMVCAtMTo6ZmxvYXQgT04gRU1Q VFkpOwotRVJST1I6ICB1bnNhZmUgREVGQVVMVCBPTiBFTVBUWSBleHByZXNzaW9ucyBhcmUg bm90IHN1cHBvcnRlZAorRVJST1I6ICBERUZBVUxUIE9OIEVNUFRZIGV4cHJlc3Npb25zIGFy ZSBub3Qgc3VwcG9ydGVkCiBMSU5FIDE6IC4uLlNPTl9WQUxVRSgnMSc6Ompzb25iLCAnJC54 JyBSRVRVUk5JTkcgaW50IERFRkFVTFQgLTE6OmZsb2F0IC4uLgogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KLUhJTlQ6 ICBVc2UgRVJST1IgT04gRVJST1IgY2xhdXNlIG9yIHRyeSB0byBzaW1wbGlmeSBleHByZXNz aW9uIGludG8gY29uc3RhbnQtbGlrZSBmb3JtLgogLS0gSlNPTl9RVUVSWQogU0VMRUNUCiAJ SlNPTl9RVUVSWShqcywgJyQnKSwKQEAgLTgyNyw3ICs4MTksNyBAQCBTRUxFQ1QgSlNPTl9R VUVSWShqc29uYiAnW10nLCAnJFsqXScgRVJST1IgT04gRU1QVFkpOwogIAogKDEgcm93KQog Ci1TRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnW10nLCAnJFsqXScgREVGQVVMVCAnImVtcHR5 IicgT04gRU1QVFkpOworU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1tdJywgJyRbKl0nIEVS Uk9SIE9OIEVNUFRZIERFRkFVTFQgJyJlbXB0eSInIE9OIEVSUk9SKTsKICBqc29uX3F1ZXJ5 IAogLS0tLS0tLS0tLS0tCiAgImVtcHR5IgpAQCAtMTA1NSw3ICsxMDQ3LDcgQEAgQ1JFQVRF IFRBQkxFIHRlc3RfanNvbmJfY29uc3RyYWludHMgKAogCUNPTlNUUkFJTlQgdGVzdF9qc29u Yl9jb25zdHJhaW50MgogCQlDSEVDSyAoSlNPTl9FWElTVFMoanM6Ompzb25iLCAnJC5hJyBQ QVNTSU5HIGkgKyA1IEFTIGludCwgaTo6dGV4dCBBUyB0eHQsIGFycmF5WzEsMiwzXSBhcyBh cnIpKQogCUNPTlNUUkFJTlQgdGVzdF9qc29uYl9jb25zdHJhaW50MwotCQlDSEVDSyAoSlNP Tl9WQUxVRShqczo6anNvbmIsICckLmEnIFJFVFVSTklORyBpbnQgREVGQVVMVCAoJzEyJyB8 fCBpKTo6aW50IE9OIEVNUFRZIEVSUk9SIE9OIEVSUk9SKSA+IGkpCisJCUNIRUNLIChKU09O X1ZBTFVFKGpzOjpqc29uYiwgJyQuYScgUkVUVVJOSU5HIGludCBOVUxMIE9OIEVNUFRZIEVS Uk9SIE9OIEVSUk9SKSA+IGkpCiAJQ09OU1RSQUlOVCB0ZXN0X2pzb25iX2NvbnN0cmFpbnQ0 CiAJCUNIRUNLIChKU09OX1FVRVJZKGpzOjpqc29uYiwgJyQuYScgV0lUSCBDT05ESVRJT05B TCBXUkFQUEVSIEVNUFRZIE9CSkVDVCBPTiBFUlJPUikgPCBqc29uYiAnWzEwXScpCiAJQ09O U1RSQUlOVCB0ZXN0X2pzb25iX2NvbnN0cmFpbnQ1CkBAIC0xMDczLDcgKzEwNjUsNyBAQCBD UkVBVEUgVEFCTEUgdGVzdF9qc29uYl9jb25zdHJhaW50cyAoCiBDaGVjayBjb25zdHJhaW50 czoKICAgICAidGVzdF9qc29uYl9jb25zdHJhaW50MSIgQ0hFQ0sgKGpzIElTIEpTT04pCiAg ICAgInRlc3RfanNvbmJfY29uc3RyYWludDIiIENIRUNLIChKU09OX0VYSVNUUyhqczo6anNv bmIsICckLiJhIicgUEFTU0lORyBpICsgNSBBUyBpbnQsIGk6OnRleHQgQVMgdHh0LCBBUlJB WVsxLCAyLCAzXSBBUyBhcnIpKQotICAgICJ0ZXN0X2pzb25iX2NvbnN0cmFpbnQzIiBDSEVD SyAoSlNPTl9WQUxVRShqczo6anNvbmIsICckLiJhIicgUkVUVVJOSU5HIGludGVnZXIgREVG QVVMVCAoJzEyJzo6dGV4dCB8fCBpKTo6aW50ZWdlciBPTiBFTVBUWSBFUlJPUiBPTiBFUlJP UikgPiBpKQorICAgICJ0ZXN0X2pzb25iX2NvbnN0cmFpbnQzIiBDSEVDSyAoSlNPTl9WQUxV RShqczo6anNvbmIsICckLiJhIicgUkVUVVJOSU5HIGludGVnZXIgRVJST1IgT04gRVJST1Ip ID4gaSkKICAgICAidGVzdF9qc29uYl9jb25zdHJhaW50NCIgQ0hFQ0sgKEpTT05fUVVFUlko anM6Ompzb25iLCAnJC4iYSInIFJFVFVSTklORyBqc29uYiBXSVRIIENPTkRJVElPTkFMIFdS QVBQRVIgRU1QVFkgT0JKRUNUIE9OIEVSUk9SKSA8ICdbMTBdJzo6anNvbmIpCiAgICAgInRl c3RfanNvbmJfY29uc3RyYWludDUiIENIRUNLIChKU09OX1FVRVJZKGpzOjpqc29uYiwgJyQu ImEiJyBSRVRVUk5JTkcgY2hhcmFjdGVyKDUpIE9NSVQgUVVPVEVTIEVNUFRZIEFSUkFZIE9O IEVNUFRZKSA+ICgnYSc6OmJwY2hhciBDT0xMQVRFICJDIikpCiAgICAgInRlc3RfanNvbmJf Y29uc3RyYWludDYiIENIRUNLIChKU09OX0VYSVNUUyhqczo6anNvbmIsICdzdHJpY3QgJC4i YSInIFJFVFVSTklORyBpbnRlZ2VyIFRSVUUgT04gRVJST1IpIDwgMikKQEAgLTEwODcsNyAr MTA3OSw3IEBAIE9SREVSIEJZIDE7CiAgKChKU09OX0VYSVNUUygoanMpOjpqc29uYiwgJ3N0 cmljdCAkLiJhIicgUkVUVVJOSU5HIGludGVnZXIgVFJVRSBPTiBFUlJPUikgPCAyKSkKICAo KEpTT05fUVVFUlkoKGpzKTo6anNvbmIsICckLiJhIicgUkVUVVJOSU5HIGNoYXJhY3Rlcig1 KSBPTUlUIFFVT1RFUyBFTVBUWSBBUlJBWSBPTiBFTVBUWSkgPiAoJ2EnOjpicGNoYXIgQ09M TEFURSAiQyIpKSkKICAoKEpTT05fUVVFUlkoKGpzKTo6anNvbmIsICckLiJhIicgUkVUVVJO SU5HIGpzb25iIFdJVEggQ09ORElUSU9OQUwgV1JBUFBFUiBFTVBUWSBPQkpFQ1QgT04gRVJS T1IpIDwgJ1sxMF0nOjpqc29uYikpCi0gKChKU09OX1ZBTFVFKChqcyk6Ompzb25iLCAnJC4i YSInIFJFVFVSTklORyBpbnRlZ2VyIERFRkFVTFQgKCgnMTInOjp0ZXh0IHx8IGkpKTo6aW50 ZWdlciBPTiBFTVBUWSBFUlJPUiBPTiBFUlJPUikgPiBpKSkKKyAoKEpTT05fVkFMVUUoKGpz KTo6anNvbmIsICckLiJhIicgUkVUVVJOSU5HIGludGVnZXIgRVJST1IgT04gRVJST1IpID4g aSkpCiAgKChqcyBJUyBKU09OKSkKICAoSlNPTl9FWElTVFMoKGpzKTo6anNvbmIsICckLiJh IicgUEFTU0lORyAoaSArIDUpIEFTIGludCwgKGkpOjp0ZXh0IEFTIHR4dCwgQVJSQVlbMSwg MiwgM10gQVMgYXJyKSkKICg2IHJvd3MpCkBAIC0xNDI0LDIyICsxNDE2LDIyIEBAIFNFTEVD VCAqIEZST00gSlNPTl9UQUJMRShqc29uYiAnMScsICckJyBDT0xVTU5TIChhIGludCBQQVRI ICdzdHJpY3QgJC5hJyBFUlJPUiBPCiBFUlJPUjogIGpzb25wYXRoIG1lbWJlciBhY2Nlc3Nv ciBjYW4gb25seSBiZSBhcHBsaWVkIHRvIGFuIG9iamVjdAogU0VMRUNUICogRlJPTSBKU09O X1RBQkxFKGpzb25iICcxJywgJyQnIENPTFVNTlMgKGEgaW50IFBBVEggJ2xheCAkLmEnIEVS Uk9SIE9OIEVNUFRZKSBFUlJPUiBPTiBFUlJPUikganQ7CiBFUlJPUjogIG5vIFNRTC9KU09O IGl0ZW0KLVNFTEVDVCAqIEZST00gSlNPTl9UQUJMRShqc29uYiAnImEiJywgJyQnIENPTFVN TlMgKGEgaW50IFBBVEggJyQnICAgREVGQVVMVCAxIE9OIEVNUFRZIERFRkFVTFQgMiBPTiBF UlJPUikpIGp0OworU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKGpzb25iICciYSInLCAnJCcg Q09MVU1OUyAoYSBpbnQgUEFUSCAnJCcgICBOVUxMIE9OIEVNUFRZIERFRkFVTFQgMiBPTiBF UlJPUikpIGp0OwogIGEgCiAtLS0KICAyCiAoMSByb3cpCiAKLVNFTEVDVCAqIEZST00gSlNP Tl9UQUJMRShqc29uYiAnImEiJywgJyQnIENPTFVNTlMgKGEgaW50IFBBVEggJ3N0cmljdCAk LmEnIERFRkFVTFQgMSBPTiBFTVBUWSBERUZBVUxUIDIgT04gRVJST1IpKSBqdDsKK1NFTEVD VCAqIEZST00gSlNPTl9UQUJMRShqc29uYiAnImEiJywgJyQnIENPTFVNTlMgKGEgaW50IFBB VEggJ3N0cmljdCAkLmEnIE5VTEwgT04gRU1QVFkgREVGQVVMVCAyIE9OIEVSUk9SKSkganQ7 CiAgYSAKIC0tLQogIDIKICgxIHJvdykKIAotU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKGpz b25iICciYSInLCAnJCcgQ09MVU1OUyAoYSBpbnQgUEFUSCAnbGF4ICQuYScgREVGQVVMVCAx IE9OIEVNUFRZIERFRkFVTFQgMiBPTiBFUlJPUikpIGp0OworU0VMRUNUICogRlJPTSBKU09O X1RBQkxFKGpzb25iICciYSInLCAnJCcgQ09MVU1OUyAoYSBpbnQgUEFUSCAnbGF4ICQuYScg TlVMTCBPTiBFTVBUWSBERUZBVUxUIDIgT04gRVJST1IpKSBqdDsKICBhIAogLS0tCi0gMQor ICAKICgxIHJvdykKIAogLS0gSlNPTl9UQUJMRTogRVhJU1RTIFBBVEggdHlwZXMKQEAgLTE3 NjEsNyArMTc1Myw3IEBAIGZyb20KIAkJanR0LmpzLCdzdHJpY3QgJFsqXScgYXMgcAogCQlj b2x1bW5zICgKIAkJCW4gZm9yIG9yZGluYWxpdHksCi0JCQlhIGludCBwYXRoICdsYXggJC5h JyBkZWZhdWx0IC0xIG9uIGVtcHR5LAorCQkJYSBpbnQgcGF0aCAnbGF4ICQuYScgZXJyb3Ig b24gZW1wdHkgZGVmYXVsdCAtMSBvbiBlcnJvciwKIAkJCW5lc3RlZCBwYXRoICdzdHJpY3Qg JC5iWypdJyBhcyBwYiBjb2x1bW5zICggYiBpbnQgcGF0aCAnJCcgKSwKIAkJCW5lc3RlZCBw YXRoICdzdHJpY3QgJC5jWypdJyBhcyBwYyBjb2x1bW5zICggYyBpbnQgcGF0aCAnJCcgKQog CQkpCkBAIC0xNzkwLDcgKzE3ODIsNyBAQCBmcm9tCiAJCWp0dC5qcywnc3RyaWN0ICRbKl0n IGFzIHAKIAkJY29sdW1ucyAoCiAJCQluIGZvciBvcmRpbmFsaXR5LAotCQkJYSBpbnQgcGF0 aCAnbGF4ICQuYScgZGVmYXVsdCAtMSBvbiBlbXB0eSwKKwkJCWEgaW50IHBhdGggJ2xheCAk LmEnIGVycm9yIG9uIGVtcHR5IGRlZmF1bHQgLTEgb24gZXJyb3IsCiAJCQluZXN0ZWQgcGF0 aCAnc3RyaWN0ICQuYlsqXScgYXMgcGIgY29sdW1ucyAoIGIgaW50IHBhdGggJyQnICksCiAJ CQluZXN0ZWQgcGF0aCAnc3RyaWN0ICQuY1sqXScgYXMgcGMgY29sdW1ucyAoIGMgaW50IHBh dGggJyQnICkKIAkJKQpAQCAtMTgyMCw3ICsxODEyLDcgQEAgZnJvbQogCQlqdHQuanMsJ3N0 cmljdCAkWypdJyBhcyBwCiAJCWNvbHVtbnMgKAogCQkJbiBmb3Igb3JkaW5hbGl0eSwKLQkJ CWEgaW50IHBhdGggJ2xheCAkLmEnIGRlZmF1bHQgLTEgb24gZW1wdHksCisJCQlhIGludCBw YXRoICdsYXggJC5hJyBlcnJvciBvbiBlbXB0eSBkZWZhdWx0IC0xIG9uIGVycm9yLAogCQkJ bmVzdGVkIHBhdGggJ3N0cmljdCAkLmJbKl0nIGFzIHBiIGNvbHVtbnMgKCBiIGludCBwYXRo ICckJyApLAogCQkJbmVzdGVkIHBhdGggJ3N0cmljdCAkLmNbKl0nIGFzIHBjIGNvbHVtbnMg KCBjIGludCBwYXRoICckJyApCiAJCSkKQEAgLTE4NTAsNyArMTg0Miw3IEBAIGZyb20KIAkJ anR0LmpzLCdzdHJpY3QgJFsqXScgYXMgcAogCQljb2x1bW5zICgKIAkJCW4gZm9yIG9yZGlu YWxpdHksCi0JCQlhIGludCBwYXRoICdsYXggJC5hJyBkZWZhdWx0IC0xIG9uIGVtcHR5LAor CQkJYSBpbnQgcGF0aCAnbGF4ICQuYScgZXJyb3Igb24gZW1wdHkgZGVmYXVsdCAtMSBvbiBl cnJvciwKIAkJCW5lc3RlZCBwYXRoICdzdHJpY3QgJC5iWypdJyBhcyBwYiBjb2x1bW5zICgg YiBpbnQgcGF0aCAnJCcgKSwKIAkJCW5lc3RlZCBwYXRoICdzdHJpY3QgJC5jWypdJyBhcyBw YyBjb2x1bW5zICggYyBpbnQgcGF0aCAnJCcgKQogCQkpCkBAIC0xODgwLDcgKzE4NzIsNyBA QCBmcm9tCiAJCWp0dC5qcywnc3RyaWN0ICRbKl0nIGFzIHAKIAkJY29sdW1ucyAoCiAJCQlu IGZvciBvcmRpbmFsaXR5LAotCQkJYSBpbnQgcGF0aCAnbGF4ICQuYScgZGVmYXVsdCAtMSBv biBlbXB0eSwKKwkJCWEgaW50IHBhdGggJ2xheCAkLmEnIGVycm9yIG9uIGVtcHR5IGRlZmF1 bHQgLTEgb24gZXJyb3IsCiAJCQluZXN0ZWQgcGF0aCAnc3RyaWN0ICQuYlsqXScgYXMgcGIg Y29sdW1ucyAoIGIgaW50IHBhdGggJyQnICksCiAJCQluZXN0ZWQgcGF0aCAnc3RyaWN0ICQu Y1sqXScgYXMgcGMgY29sdW1ucyAoIGMgaW50IHBhdGggJyQnICkKIAkJKQpAQCAtMTkwOSw3 ICsxOTAxLDcgQEAgZnJvbQogCQlqdHQuanMsJ3N0cmljdCAkWypdJyBhcyBwCiAJCWNvbHVt bnMgKAogCQkJbiBmb3Igb3JkaW5hbGl0eSwKLQkJCWEgaW50IHBhdGggJ2xheCAkLmEnIGRl ZmF1bHQgLTEgb24gZW1wdHksCisJCQlhIGludCBwYXRoICdsYXggJC5hJyBlcnJvciBvbiBl bXB0eSBkZWZhdWx0IC0xIG9uIGVycm9yLAogCQkJbmVzdGVkIHBhdGggJ3N0cmljdCAkLmJb Kl0nIGFzIHBiIGNvbHVtbnMgKCBiIGludCBwYXRoICckJyApLAogCQkJbmVzdGVkIHBhdGgg J3N0cmljdCAkLmNbKl0nIGFzIHBjIGNvbHVtbnMgKCBjIGludCBwYXRoICckJyApCiAJCSkK QEAgLTE5MzgsNyArMTkzMCw3IEBAIGZyb20KIAkJanR0LmpzLCdzdHJpY3QgJFsqXScgYXMg cAogCQljb2x1bW5zICgKIAkJCW4gZm9yIG9yZGluYWxpdHksCi0JCQlhIGludCBwYXRoICds YXggJC5hJyBkZWZhdWx0IC0xIG9uIGVtcHR5LAorCQkJYSBpbnQgcGF0aCAnbGF4ICQuYScg ZXJyb3Igb24gZW1wdHkgZGVmYXVsdCAtMSBvbiBlcnJvciwKIAkJCW5lc3RlZCBwYXRoICdz dHJpY3QgJC5iWypdJyBhcyBwYiBjb2x1bW5zICggYiBpbnQgcGF0aCAnJCcgKSwKIAkJCW5l c3RlZCBwYXRoICdzdHJpY3QgJC5jWypdJyBhcyBwYyBjb2x1bW5zICggYyBpbnQgcGF0aCAn JCcgKQogCQkpCkBAIC0xOTY2LDcgKzE5NTgsNyBAQCBmcm9tCiAJCWp0dC5qcywnc3RyaWN0 ICRbKl0nIGFzIHAKIAkJY29sdW1ucyAoCiAJCQluIGZvciBvcmRpbmFsaXR5LAotCQkJYSBp bnQgcGF0aCAnbGF4ICQuYScgZGVmYXVsdCAtMSBvbiBlbXB0eSwKKwkJCWEgaW50IHBhdGgg J2xheCAkLmEnIGVycm9yIG9uIGVtcHR5IGRlZmF1bHQgLTEgb24gZXJyb3IsCiAJCQluZXN0 ZWQgcGF0aCAnc3RyaWN0ICQuYlsqXScgYXMgcGIgY29sdW1ucyAoIGIgaW50IHBhdGggJyQn ICksCiAJCQluZXN0ZWQgcGF0aCAnc3RyaWN0ICQuY1sqXScgYXMgcGMgY29sdW1ucyAoIGMg aW50IHBhdGggJyQnICkKIAkJKQpAQCAtMTk5NCw3ICsxOTg2LDcgQEAgZnJvbQogCQlqdHQu anMsJ3N0cmljdCAkWypdJyBhcyBwCiAJCWNvbHVtbnMgKAogCQkJbiBmb3Igb3JkaW5hbGl0 eSwKLQkJCWEgaW50IHBhdGggJ2xheCAkLmEnIGRlZmF1bHQgLTEgb24gZW1wdHksCisJCQlh IGludCBwYXRoICdsYXggJC5hJyBlcnJvciBvbiBlbXB0eSBkZWZhdWx0IC0xIG9uIGVycm9y LAogCQkJbmVzdGVkIHBhdGggJ3N0cmljdCAkLmJbKl0nIGFzIHBiIGNvbHVtbnMgKCBiIGlu dCBwYXRoICckJyApLAogCQkJbmVzdGVkIHBhdGggJ3N0cmljdCAkLmNbKl0nIGFzIHBjIGNv bHVtbnMgKCBjIGludCBwYXRoICckJyApCiAJCSkKQEAgLTIwMjUsNyArMjAxNyw3IEBAIGZy b20KIAkJanR0LmpzLCdzdHJpY3QgJFsqXScgYXMgcAogCQljb2x1bW5zICgKIAkJCW4gZm9y IG9yZGluYWxpdHksCi0JCQlhIGludCBwYXRoICdsYXggJC5hJyBkZWZhdWx0IC0xIG9uIGVt cHR5LAorCQkJYSBpbnQgcGF0aCAnbGF4ICQuYScgZXJyb3Igb24gZW1wdHkgZGVmYXVsdCAt MSBvbiBlcnJvciwKIAkJCW5lc3RlZCBwYXRoICdzdHJpY3QgJC5iWypdJyBhcyBwYiBjb2x1 bW5zICggYiBpbnQgcGF0aCAnJCcgKSwKIAkJCW5lc3RlZCBwYXRoICdzdHJpY3QgJC5jWypd JyBhcyBwYyBjb2x1bW5zICggYyBpbnQgcGF0aCAnJCcgKQogCQkpCkBAIC0yMTk1LDcgKzIx ODcsNyBAQCBTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAneyJhIjogMTIzfScsICckJyB8fCAn LicgfHwgJ2EnKTsKICAxMjMKICgxIHJvdykKIAotU0VMRUNUIEpTT05fVkFMVUUoanNvbmIg J3siYSI6IDEyM30nLCAnJCcgfHwgJy4nIHx8ICdiJyBERUZBVUxUICdmb28nIE9OIEVNUFRZ KTsKK1NFTEVDVCBKU09OX1ZBTFVFKGpzb25iICd7ImEiOiAxMjN9JywgJyQnIHx8ICcuJyB8 fCAnYicgRVJST1IgT04gRU1QVFkgREVGQVVMVCAnZm9vJyBPTiBFUlJPUik7CiAganNvbl92 YWx1ZSAKIC0tLS0tLS0tLS0tLQogIGZvbwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVz cy9zcWwvanNvbmJfc3FsanNvbi5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9qc29uYl9z cWxqc29uLnNxbAppbmRleCA0M2ExOTRhZDA5Zi4uNzZkNGM5Y2MxNGUgMTAwNjQ0Ci0tLSBh L3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2pzb25iX3NxbGpzb24uc3FsCisrKyBiL3NyYy90ZXN0 L3JlZ3Jlc3Mvc3FsL2pzb25iX3NxbGpzb24uc3FsCkBAIC0xNDgsNyArMTQ4LDcgQEAgU0VM RUNUCiAJCWpzb25iICd7ImEiOiAxLCAiYiI6IDJ9JywKIAkJJyQuKiA/IChAID4gJHgpJyBQ QVNTSU5HIHggQVMgeAogCQlSRVRVUk5JTkcgaW50Ci0JCURFRkFVTFQgLTEgT04gRU1QVFkK KwkJTlVMTCBPTiBFTVBUWQogCQlERUZBVUxUIC0yIE9OIEVSUk9SCiAJKSB5CiBGUk9NCkBA IC0yMzcsNyArMjM3LDcgQEAgU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1tdJywgJyRbKl0n IEVNUFRZIE9OIEVNUFRZKTsKIFNFTEVDVCBKU09OX1FVRVJZKGpzb25iICdbXScsICckWypd JyBFTVBUWSBBUlJBWSBPTiBFTVBUWSk7CiBTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAnW10n LCAnJFsqXScgRU1QVFkgT0JKRUNUIE9OIEVNUFRZKTsKIFNFTEVDVCBKU09OX1FVRVJZKGpz b25iICdbXScsICckWypdJyBFUlJPUiBPTiBFTVBUWSk7Ci1TRUxFQ1QgSlNPTl9RVUVSWShq c29uYiAnW10nLCAnJFsqXScgREVGQVVMVCAnImVtcHR5IicgT04gRU1QVFkpOworU0VMRUNU IEpTT05fUVVFUlkoanNvbmIgJ1tdJywgJyRbKl0nIEVSUk9SIE9OIEVNUFRZIERFRkFVTFQg JyJlbXB0eSInIE9OIEVSUk9SKTsKIAogU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ1tdJywg JyRbKl0nIEVSUk9SIE9OIEVNUFRZIE5VTEwgT04gRVJST1IpOwogU0VMRUNUIEpTT05fUVVF UlkoanNvbmIgJ1tdJywgJyRbKl0nIEVSUk9SIE9OIEVNUFRZIEVNUFRZIEFSUkFZIE9OIEVS Uk9SKTsKQEAgLTMwOSw3ICszMDksNyBAQCBDUkVBVEUgVEFCTEUgdGVzdF9qc29uYl9jb25z dHJhaW50cyAoCiAJQ09OU1RSQUlOVCB0ZXN0X2pzb25iX2NvbnN0cmFpbnQyCiAJCUNIRUNL IChKU09OX0VYSVNUUyhqczo6anNvbmIsICckLmEnIFBBU1NJTkcgaSArIDUgQVMgaW50LCBp Ojp0ZXh0IEFTIHR4dCwgYXJyYXlbMSwyLDNdIGFzIGFycikpCiAJQ09OU1RSQUlOVCB0ZXN0 X2pzb25iX2NvbnN0cmFpbnQzCi0JCUNIRUNLIChKU09OX1ZBTFVFKGpzOjpqc29uYiwgJyQu YScgUkVUVVJOSU5HIGludCBERUZBVUxUICgnMTInIHx8IGkpOjppbnQgT04gRU1QVFkgRVJS T1IgT04gRVJST1IpID4gaSkKKwkJQ0hFQ0sgKEpTT05fVkFMVUUoanM6Ompzb25iLCAnJC5h JyBSRVRVUk5JTkcgaW50IE5VTEwgT04gRU1QVFkgRVJST1IgT04gRVJST1IpID4gaSkKIAlD T05TVFJBSU5UIHRlc3RfanNvbmJfY29uc3RyYWludDQKIAkJQ0hFQ0sgKEpTT05fUVVFUlko anM6Ompzb25iLCAnJC5hJyBXSVRIIENPTkRJVElPTkFMIFdSQVBQRVIgRU1QVFkgT0JKRUNU IE9OIEVSUk9SKSA8IGpzb25iICdbMTBdJykKIAlDT05TVFJBSU5UIHRlc3RfanNvbmJfY29u c3RyYWludDUKQEAgLTUxNSw5ICs1MTUsOSBAQCBTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUo anNvbmIgJzEnLCAnJCcgQ09MVU1OUyAoYSBpbnQgUEFUSCAnJC5hJyBFUlJPUiBPTiBFTVBU WQogU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKGpzb25iICcxJywgJyQnIENPTFVNTlMgKGEg aW50IFBBVEggJ3N0cmljdCAkLmEnIEVSUk9SIE9OIEVNUFRZKSBFUlJPUiBPTiBFUlJPUikg anQ7CiBTRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoanNvbmIgJzEnLCAnJCcgQ09MVU1OUyAo YSBpbnQgUEFUSCAnbGF4ICQuYScgRVJST1IgT04gRU1QVFkpIEVSUk9SIE9OIEVSUk9SKSBq dDsKIAotU0VMRUNUICogRlJPTSBKU09OX1RBQkxFKGpzb25iICciYSInLCAnJCcgQ09MVU1O UyAoYSBpbnQgUEFUSCAnJCcgICBERUZBVUxUIDEgT04gRU1QVFkgREVGQVVMVCAyIE9OIEVS Uk9SKSkganQ7Ci1TRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoanNvbmIgJyJhIicsICckJyBD T0xVTU5TIChhIGludCBQQVRIICdzdHJpY3QgJC5hJyBERUZBVUxUIDEgT04gRU1QVFkgREVG QVVMVCAyIE9OIEVSUk9SKSkganQ7Ci1TRUxFQ1QgKiBGUk9NIEpTT05fVEFCTEUoanNvbmIg JyJhIicsICckJyBDT0xVTU5TIChhIGludCBQQVRIICdsYXggJC5hJyBERUZBVUxUIDEgT04g RU1QVFkgREVGQVVMVCAyIE9OIEVSUk9SKSkganQ7CitTRUxFQ1QgKiBGUk9NIEpTT05fVEFC TEUoanNvbmIgJyJhIicsICckJyBDT0xVTU5TIChhIGludCBQQVRIICckJyAgIE5VTEwgT04g RU1QVFkgREVGQVVMVCAyIE9OIEVSUk9SKSkganQ7CitTRUxFQ1QgKiBGUk9NIEpTT05fVEFC TEUoanNvbmIgJyJhIicsICckJyBDT0xVTU5TIChhIGludCBQQVRIICdzdHJpY3QgJC5hJyBO VUxMIE9OIEVNUFRZIERFRkFVTFQgMiBPTiBFUlJPUikpIGp0OworU0VMRUNUICogRlJPTSBK U09OX1RBQkxFKGpzb25iICciYSInLCAnJCcgQ09MVU1OUyAoYSBpbnQgUEFUSCAnbGF4ICQu YScgTlVMTCBPTiBFTVBUWSBERUZBVUxUIDIgT04gRVJST1IpKSBqdDsKIAogLS0gSlNPTl9U QUJMRTogRVhJU1RTIFBBVEggdHlwZXMKIFNFTEVDVCAqIEZST00gSlNPTl9UQUJMRShqc29u YiAnImEiJywgJyQnIENPTFVNTlMgKGEgaW50NCBFWElTVFMgUEFUSCAnJC5hJykpOwpAQCAt Nzc2LDcgKzc3Niw3IEBAIGZyb20KIAkJanR0LmpzLCdzdHJpY3QgJFsqXScgYXMgcAogCQlj b2x1bW5zICgKIAkJCW4gZm9yIG9yZGluYWxpdHksCi0JCQlhIGludCBwYXRoICdsYXggJC5h JyBkZWZhdWx0IC0xIG9uIGVtcHR5LAorCQkJYSBpbnQgcGF0aCAnbGF4ICQuYScgZXJyb3Ig b24gZW1wdHkgZGVmYXVsdCAtMSBvbiBlcnJvciwKIAkJCW5lc3RlZCBwYXRoICdzdHJpY3Qg JC5iWypdJyBhcyBwYiBjb2x1bW5zICggYiBpbnQgcGF0aCAnJCcgKSwKIAkJCW5lc3RlZCBw YXRoICdzdHJpY3QgJC5jWypdJyBhcyBwYyBjb2x1bW5zICggYyBpbnQgcGF0aCAnJCcgKQog CQkpCkBAIC03OTEsNyArNzkxLDcgQEAgZnJvbQogCQlqdHQuanMsJ3N0cmljdCAkWypdJyBh cyBwCiAJCWNvbHVtbnMgKAogCQkJbiBmb3Igb3JkaW5hbGl0eSwKLQkJCWEgaW50IHBhdGgg J2xheCAkLmEnIGRlZmF1bHQgLTEgb24gZW1wdHksCisJCQlhIGludCBwYXRoICdsYXggJC5h JyBlcnJvciBvbiBlbXB0eSBkZWZhdWx0IC0xIG9uIGVycm9yLAogCQkJbmVzdGVkIHBhdGgg J3N0cmljdCAkLmJbKl0nIGFzIHBiIGNvbHVtbnMgKCBiIGludCBwYXRoICckJyApLAogCQkJ bmVzdGVkIHBhdGggJ3N0cmljdCAkLmNbKl0nIGFzIHBjIGNvbHVtbnMgKCBjIGludCBwYXRo ICckJyApCiAJCSkKQEAgLTgwNyw3ICs4MDcsNyBAQCBmcm9tCiAJCWp0dC5qcywnc3RyaWN0 ICRbKl0nIGFzIHAKIAkJY29sdW1ucyAoCiAJCQluIGZvciBvcmRpbmFsaXR5LAotCQkJYSBp bnQgcGF0aCAnbGF4ICQuYScgZGVmYXVsdCAtMSBvbiBlbXB0eSwKKwkJCWEgaW50IHBhdGgg J2xheCAkLmEnIGVycm9yIG9uIGVtcHR5IGRlZmF1bHQgLTEgb24gZXJyb3IsCiAJCQluZXN0 ZWQgcGF0aCAnc3RyaWN0ICQuYlsqXScgYXMgcGIgY29sdW1ucyAoIGIgaW50IHBhdGggJyQn ICksCiAJCQluZXN0ZWQgcGF0aCAnc3RyaWN0ICQuY1sqXScgYXMgcGMgY29sdW1ucyAoIGMg aW50IHBhdGggJyQnICkKIAkJKQpAQCAtODIzLDcgKzgyMyw3IEBAIGZyb20KIAkJanR0Lmpz LCdzdHJpY3QgJFsqXScgYXMgcAogCQljb2x1bW5zICgKIAkJCW4gZm9yIG9yZGluYWxpdHks Ci0JCQlhIGludCBwYXRoICdsYXggJC5hJyBkZWZhdWx0IC0xIG9uIGVtcHR5LAorCQkJYSBp bnQgcGF0aCAnbGF4ICQuYScgZXJyb3Igb24gZW1wdHkgZGVmYXVsdCAtMSBvbiBlcnJvciwK IAkJCW5lc3RlZCBwYXRoICdzdHJpY3QgJC5iWypdJyBhcyBwYiBjb2x1bW5zICggYiBpbnQg cGF0aCAnJCcgKSwKIAkJCW5lc3RlZCBwYXRoICdzdHJpY3QgJC5jWypdJyBhcyBwYyBjb2x1 bW5zICggYyBpbnQgcGF0aCAnJCcgKQogCQkpCkBAIC04MzksNyArODM5LDcgQEAgZnJvbQog CQlqdHQuanMsJ3N0cmljdCAkWypdJyBhcyBwCiAJCWNvbHVtbnMgKAogCQkJbiBmb3Igb3Jk aW5hbGl0eSwKLQkJCWEgaW50IHBhdGggJ2xheCAkLmEnIGRlZmF1bHQgLTEgb24gZW1wdHks CisJCQlhIGludCBwYXRoICdsYXggJC5hJyBlcnJvciBvbiBlbXB0eSBkZWZhdWx0IC0xIG9u IGVycm9yLAogCQkJbmVzdGVkIHBhdGggJ3N0cmljdCAkLmJbKl0nIGFzIHBiIGNvbHVtbnMg KCBiIGludCBwYXRoICckJyApLAogCQkJbmVzdGVkIHBhdGggJ3N0cmljdCAkLmNbKl0nIGFz IHBjIGNvbHVtbnMgKCBjIGludCBwYXRoICckJyApCiAJCSkKQEAgLTg1NSw3ICs4NTUsNyBA QCBmcm9tCiAJCWp0dC5qcywnc3RyaWN0ICRbKl0nIGFzIHAKIAkJY29sdW1ucyAoCiAJCQlu IGZvciBvcmRpbmFsaXR5LAotCQkJYSBpbnQgcGF0aCAnbGF4ICQuYScgZGVmYXVsdCAtMSBv biBlbXB0eSwKKwkJCWEgaW50IHBhdGggJ2xheCAkLmEnIGVycm9yIG9uIGVtcHR5IGRlZmF1 bHQgLTEgb24gZXJyb3IsCiAJCQluZXN0ZWQgcGF0aCAnc3RyaWN0ICQuYlsqXScgYXMgcGIg Y29sdW1ucyAoIGIgaW50IHBhdGggJyQnICksCiAJCQluZXN0ZWQgcGF0aCAnc3RyaWN0ICQu Y1sqXScgYXMgcGMgY29sdW1ucyAoIGMgaW50IHBhdGggJyQnICkKIAkJKQpAQCAtODcxLDcg Kzg3MSw3IEBAIGZyb20KIAkJanR0LmpzLCdzdHJpY3QgJFsqXScgYXMgcAogCQljb2x1bW5z ICgKIAkJCW4gZm9yIG9yZGluYWxpdHksCi0JCQlhIGludCBwYXRoICdsYXggJC5hJyBkZWZh dWx0IC0xIG9uIGVtcHR5LAorCQkJYSBpbnQgcGF0aCAnbGF4ICQuYScgZXJyb3Igb24gZW1w dHkgZGVmYXVsdCAtMSBvbiBlcnJvciwKIAkJCW5lc3RlZCBwYXRoICdzdHJpY3QgJC5iWypd JyBhcyBwYiBjb2x1bW5zICggYiBpbnQgcGF0aCAnJCcgKSwKIAkJCW5lc3RlZCBwYXRoICdz dHJpY3QgJC5jWypdJyBhcyBwYyBjb2x1bW5zICggYyBpbnQgcGF0aCAnJCcgKQogCQkpCkBA IC04ODcsNyArODg3LDcgQEAgZnJvbQogCQlqdHQuanMsJ3N0cmljdCAkWypdJyBhcyBwCiAJ CWNvbHVtbnMgKAogCQkJbiBmb3Igb3JkaW5hbGl0eSwKLQkJCWEgaW50IHBhdGggJ2xheCAk LmEnIGRlZmF1bHQgLTEgb24gZW1wdHksCisJCQlhIGludCBwYXRoICdsYXggJC5hJyBlcnJv ciBvbiBlbXB0eSBkZWZhdWx0IC0xIG9uIGVycm9yLAogCQkJbmVzdGVkIHBhdGggJ3N0cmlj dCAkLmJbKl0nIGFzIHBiIGNvbHVtbnMgKCBiIGludCBwYXRoICckJyApLAogCQkJbmVzdGVk IHBhdGggJ3N0cmljdCAkLmNbKl0nIGFzIHBjIGNvbHVtbnMgKCBjIGludCBwYXRoICckJyAp CiAJCSkKQEAgLTkwMyw3ICs5MDMsNyBAQCBmcm9tCiAJCWp0dC5qcywnc3RyaWN0ICRbKl0n IGFzIHAKIAkJY29sdW1ucyAoCiAJCQluIGZvciBvcmRpbmFsaXR5LAotCQkJYSBpbnQgcGF0 aCAnbGF4ICQuYScgZGVmYXVsdCAtMSBvbiBlbXB0eSwKKwkJCWEgaW50IHBhdGggJ2xheCAk LmEnIGVycm9yIG9uIGVtcHR5IGRlZmF1bHQgLTEgb24gZXJyb3IsCiAJCQluZXN0ZWQgcGF0 aCAnc3RyaWN0ICQuYlsqXScgYXMgcGIgY29sdW1ucyAoIGIgaW50IHBhdGggJyQnICksCiAJ CQluZXN0ZWQgcGF0aCAnc3RyaWN0ICQuY1sqXScgYXMgcGMgY29sdW1ucyAoIGMgaW50IHBh dGggJyQnICkKIAkJKQpAQCAtOTE5LDcgKzkxOSw3IEBAIGZyb20KIAkJanR0LmpzLCdzdHJp Y3QgJFsqXScgYXMgcAogCQljb2x1bW5zICgKIAkJCW4gZm9yIG9yZGluYWxpdHksCi0JCQlh IGludCBwYXRoICdsYXggJC5hJyBkZWZhdWx0IC0xIG9uIGVtcHR5LAorCQkJYSBpbnQgcGF0 aCAnbGF4ICQuYScgZXJyb3Igb24gZW1wdHkgZGVmYXVsdCAtMSBvbiBlcnJvciwKIAkJCW5l c3RlZCBwYXRoICdzdHJpY3QgJC5iWypdJyBhcyBwYiBjb2x1bW5zICggYiBpbnQgcGF0aCAn JCcgKSwKIAkJCW5lc3RlZCBwYXRoICdzdHJpY3QgJC5jWypdJyBhcyBwYyBjb2x1bW5zICgg YyBpbnQgcGF0aCAnJCcgKQogCQkpCkBAIC05ODcsNyArOTg3LDcgQEAgRlJPTSBKU09OX1RB QkxFKAogLS0gRXh0ZW5zaW9uOiBub24tY29uc3RhbnQgSlNPTiBwYXRoCiBTRUxFQ1QgSlNP Tl9FWElTVFMoanNvbmIgJ3siYSI6IDEyM30nLCAnJCcgfHwgJy4nIHx8ICdhJyk7CiBTRUxF Q1QgSlNPTl9WQUxVRShqc29uYiAneyJhIjogMTIzfScsICckJyB8fCAnLicgfHwgJ2EnKTsK LVNFTEVDVCBKU09OX1ZBTFVFKGpzb25iICd7ImEiOiAxMjN9JywgJyQnIHx8ICcuJyB8fCAn YicgREVGQVVMVCAnZm9vJyBPTiBFTVBUWSk7CitTRUxFQ1QgSlNPTl9WQUxVRShqc29uYiAn eyJhIjogMTIzfScsICckJyB8fCAnLicgfHwgJ2InIEVSUk9SIE9OIEVNUFRZIERFRkFVTFQg J2ZvbycgT04gRVJST1IpOwogU0VMRUNUIEpTT05fUVVFUlkoanNvbmIgJ3siYSI6IDEyM30n LCAnJCcgfHwgJy4nIHx8ICdhJyk7CiBTRUxFQ1QgSlNPTl9RVUVSWShqc29uYiAneyJhIjog MTIzfScsICckJyB8fCAnLicgfHwgJ2EnIFdJVEggV1JBUFBFUik7CiAtLSBTaG91bGQgZmFp bCAoaW52YWxpZCBwYXRoKQotLSAKMi4xNy4xCgo= --------------jNrKutSsb0Ih2JPBTjkEydni--