Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1vGfaT-003nKp-T8 for pgsql-hackers@arkaria.postgresql.org; Wed, 05 Nov 2025 15:38:17 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1vGfaS-003HJW-RY for pgsql-hackers@arkaria.postgresql.org; Wed, 05 Nov 2025 15:38:15 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1vGfaS-003HJO-0l for pgsql-hackers@lists.postgresql.org; Wed, 05 Nov 2025 15:38:15 +0000 Received: from lahtoruutu.iki.fi ([2a0b:5c81:1c1::37]) by makus.postgresql.org with smtp (Exim 4.96) (envelope-from ) id 1vGfaK-005bbo-1U for pgsql-hackers@lists.postgresql.org; Wed, 05 Nov 2025 15:38:14 +0000 Received: from [10.0.2.15] (unknown [130.41.208.2]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: hlinnaka) by lahtoruutu.iki.fi (Postfix) with ESMTPSA id 4d1qGC3l8Lz49Q7N; Wed, 5 Nov 2025 17:37:55 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=iki.fi; s=lahtoruutu; t=1762357076; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=12RhHbxeFc2rE6Us9guWipBHAbWkK5UrQX3W57WpfF0=; b=r3PEAqp3EGAG2QOhMVne2NRMhUux4djOUyjguuO1ZvrVDq+zqVLz4aK15ILo65wQC97ab0 OuqgNiukxXnluT6/1ynaV3j4ZaOg4V+2BNo3yiTVUwcFdY1RnT1S+/S4kOOUnPA+TwhlLw a4FgGQlQR3NT9vO7Eu0ZnaKv1gxnn+IoaIJ+UMoB2EvpnExX8iusVV3XejjVbteCaJbPtR bRX6+bbJEmunQPtcDI6+VzbvYtlQW+czg+fszpDMjneZzxREfnwDHRz09WftNNCC/ggdIt K1Wh5aEBgsmgpX8lT6HoF1m762PSUwBU6mt5s51OxBg7EScu8+EB/P5bFYaLPQ== ARC-Seal: i=1; s=lahtoruutu; d=iki.fi; t=1762357076; a=rsa-sha256; cv=none; b=XExtPM3T8WfZtD+86IIMZYQTAk75nRz6E68+bfZV3M/HurIceH6fSGOmlRoojiz8WU/HZf j9UjgoJHm2cblg+EtOHgAiCt3mbaXWgGCI3pxkeYeszlSneZdX8nG3QLet1XC/Dl/odY8W 5dHrfrcI8Q8plybK4gjIgCqXpjje0vh8VmJB8D9M28ljTufH4vhcHh/4BLfsxCEn5XelUk MqHB3ev2Uykf+pkVOd3EoR5+z2c7vDzRdIAd7q/IjtCxwmyriSgipIfWkodBeNjZJlpNM9 SzVynNRBeH4GjluOcTZ5m8d+y5lGrTjBcfUGbZXyJqpS1kH3uf7JYaof/gpS3A== ARC-Authentication-Results: i=1; ORIGINATING; auth=pass smtp.auth=hlinnaka smtp.mailfrom=hlinnaka@iki.fi ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=iki.fi; s=lahtoruutu; t=1762357076; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=12RhHbxeFc2rE6Us9guWipBHAbWkK5UrQX3W57WpfF0=; b=OK1OjoY348EWvrL/j8VyWeXlFxNmwX2JeMQuaySBvkLO7tFmoUT0m2cSpUlL69h7GJuouX LJ+dvSf3dXQKZXRsH6stIsGmBEQeA0HguhW4jWjo+HO3yNl4csAfHeNscXTmIuHoBqK3X8 T4nrpIc9MPLwlZMeJefO+0TqI7jzvI79E6esbYijFqNgMGz4zPv8vOXvAAt52H2jQOZ5XV cFxFfcvU8bbCnJYa0x1OE9EkVAIsNIDHBK7v5FLSGwQ1jQOd2LmHMdv/zYQ2IP0i3jb6cZ hOxtFwTD824MRZeyhZbKlD+ACo+0x8Jj5UkFhnbllORrD6hyWqWez9CEfyG3ew== Content-Type: multipart/mixed; boundary="------------wdQFSa6hjCyS1wBv3Joac30h" Message-ID: Date: Wed, 5 Nov 2025 17:37:54 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: POC: make mxidoff 64 bits To: Maxim Orlov Cc: wenhui qiu , Alexander Korotkov , Ashutosh Bapat , Postgres hackers References: <0794857c-aaaf-4cd3-bd99-84c6155bb2f6@iki.fi> Content-Language: en-US From: Heikki Linnakangas 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. --------------wdQFSa6hjCyS1wBv3Joac30h Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: quoted-printable On 30/10/2025 18:17, Maxim Orlov wrote: > PFA v20 returns to using actual 64-bit offsets for on-disk SLRU > segments. >=20 > Fortunately, now that I've separated reading and writing offsets into > different functions, switching from one implementation to another is > easy to do. >=20 > Here's a quick overview of the current state of the patch: > 1) Access to the offset is placed to separate calls: > =C2=A0 =C2=A0MXOffsetWrite/MXOffsetRead. > 2) I abandoned byte juggling in pg_upgrade and moved to using logic tha= t > =C2=A0 =C2=A0replicates the work with offsets im multixact.c > 3) As a result, the update issue came down to the correct implementatio= n > =C2=A0 =C2=A0of functions MXOffsetWrite/MXOffsetRead. > 4) The only question that remains is the question of disk representatio= n > =C2=A0 =C2=A0of 64-bit offsets in SLRU segments. Here's another round of review and cleanup of this. I made a bunch of=20 small changes, but haven't found any major problems. Looking pretty good. Notable changes since v20: - Changed MULTIXACT_MEMBER_AUTOVAC_THRESHOLD to 4000000000 instead of=20 0xFFFFFFFF. The 2^32 mark doesn't have any particular meaning=20 significance and using a round number makes that more clear. We should=20 possibly expose that as a separate GUC, but that can be done in a=20 followup patch. - Removed the MXOffsetRead/Write functions again. They certainly make=20 sense if we make them more complicated with some kind of a compression=20 scheme, but I preferred to keep the code closer to 'master' for now. - Removed more remnants of offset wraparound handling. There were still=20 a few places that checked for wraparound and tried to deal with it,=20 while other places just assumed that it doesn't happen. I added a check=20 in GetNewMultiXactId() to error out if it would wrap around. It really=20 should not happen in the real world, one reason being that we would run=20 out of WAL before running out of 64-bit mxoffsets, but a sanity check=20 won't hurt just in case someone e.g. abuses pg_resetwal to get into that=20 situation. - Removed MaybeExtendOffsetSlru(). It was only used to deal with binary=20 upgrade from version 9.2 and below. Now that pg_upgrade rewrites the=20 files, it's not needed anymore. - Modified PerformMembersTruncation() to use SimpleLruTruncate() Changes in pg_upgrade: - Removed the nextMXact/nextOffset fields from MultiXactWriter. They=20 were redundant with the next_multi and next_offset local variables in=20 the caller. Remaining issues: - There's one more refactoring I'd like to do before merging this: Move=20 the definitions that are now duplicated between=20 src/bin/pg_upgrade/multixact_new.c and=20 src/backend/access/transam/multixact.c into a new header file,=20 multixact_internal.h. One complication with that is that it needs=20 SLRU_PAGES_PER_SEGMENT from access/slru.h, but slru.h cannot currently=20 be included in FRONTEND code. Perhaps we should move=20 SLRU_PAGES_PER_SEGMENT to pg_config_manual.h, or if that feels too=20 global, to a separate slru_config.h file. - I saw Alexander's proposal for a new compression scheme but didn't=20 incorporate that here. It might be a good idea, but I think we can do=20 that as a followup patch before the release, if it seems worth it. I=20 don't feel too bad about just making pg_multixact/offsets 2x larger eithe= r. - Have you done any performance testing of the pg_upgrade code? How long=20 does the conversion take if you have e.g. 1 billion multixids? - Is the !oldestOffsetKnown case in the code still reachable? I left one=20 FIXME comment about that. Needs a comment update at least. - The new pg_upgrade test fails on my system with this error in the log: > # Running: pg_dump --no-sync --restrict-key test -d port=3D22462 host=3D= /tmp/5KdMvth1jk dbname=3D'postgres' -f /home/heikki/git-sandbox/postgresq= l/build/testrun/pg_upgrade/007_mxoff/data/tmp_test_CINS/newnode_1_dump.sq= l > pg_dump: error: aborting because of server version mismatch > pg_dump: detail: server version: 19devel; pg_dump version: 17.6 > could not read "/home/heikki/git-sandbox/postgresql/build/testrun/pg_up= grade/007_mxoff/data/tmp_test_CINS/newnode_1_dump.sql": No such file or d= irectory at /home/heikki/git-sandbox/postgresql/src/bin/pg_upgrade/t/007_= mxoff.pl line 242. This turns out to be an issue with IPC::Run. Setting the=20 IPCRUNDEBUG=3Dbasic env variable reveals that it has a built-in command c= ache: > IPC::Run 0004 [#19(109223)]: ****** harnessing ***** > IPC::Run 0004 [#19(109223)]: parsing [ pg_dump --no-sync --restrict-key= test -d 'port=3D20999 host=3D/tmp/NsJKldN1Ie dbname=3D'postgres'' -f '/h= ome/heikki/git-sandbox/postgresql/build/testrun/pg_upgrade/007_mxoff/data= /tmp_test_urgw/newnode_1_dump.sql' ] > IPC::Run 0004 [#19(109223)]: ** starting > IPC::Run 0004 [#19(109223)]: 'pg_dump' found in cache: '/home/heikki/pg= sql.17stable/bin/pg_dump' > IPC::Run 0004 [#19(111432) pg_dump]: execing /home/heikki/pgsql.17stabl= e/bin/pg_dump --no-sync --restrict-key test -d 'port=3D20999 host=3D/tmp/= NsJKldN1Ie dbname=3D'postgres'' -f /home/heikki/git-sandbox/postgresql/bu= ild/testrun/pg_upgrade/007_mxoff/data/tmp_test_urgw/newnode_1_dump.sql > IPC::Run 0004 [#19(109223)]: ** finishing > pg_dump: error: aborting because of server version mismatch > pg_dump: detail: server version: 19devel; pg_dump version: 17.6 The test calls pg_dump twice: first with the old version, then with the=20 new version. But thanks to IPC::Run's command cache, the invocation of=20 the new pg_dump version actually also calls the old version. I'm not=20 sure how to fix that, but I was able to work around it by reversing the=20 pg_dump calls so that thew new version is called first. That way we use=20 the new pg_dump against both server versions which works. - The new pg_ugprade test is very slow. I would love to include that=20 test permanently in the test suite, but it's too slow for that currently. - Heikki --------------wdQFSa6hjCyS1wBv3Joac30h Content-Type: text/x-patch; charset=UTF-8; name="v22-0001-Use-64-bit-multixact-offsets.patch" Content-Disposition: attachment; filename="v22-0001-Use-64-bit-multixact-offsets.patch" Content-Transfer-Encoding: base64 RnJvbSAxMWEzNTJmNDBkYmMwZTUzNTA0Zjg2ZWI2MWRhMDE5ZTg5MzhlOTNmIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbSBPcmxvdiA8b3Jsb3ZtZ0BnbWFpbC5jb20+ CkRhdGU6IFdlZCwgNyBBdWcgMjAyNCAxNjozNToyMiArMDMwMApTdWJqZWN0OiBbUEFUQ0gg djIyIDEvNV0gVXNlIDY0LWJpdCBtdWx0aXhhY3Qgb2Zmc2V0cwoKU3dpdGNoaW5nIHRvIDY0 LWJpdCBtdWx0aXRyYW5zYWN0aW9uIG9mZnNldHMgcmVtb3ZlcyB3cmFwYXJvdW5kIGFuZCB0 aGUKMl4zMiBsaW1pdCBvbiB0aGVpciB0b3RhbCBudW1iZXIuCgpBdXRob3I6IE1heGltIE9y bG92IDxvcmxvdm1nQGdtYWlsLmNvbT4KRGlzY3Vzc2lvbjogRklYTUUKLS0tCiBzcmMvYmFj a2VuZC9hY2Nlc3Mvcm1ncmRlc2MvbXhhY3RkZXNjLmMgICB8ICAgNCArLQogc3JjL2JhY2tl bmQvYWNjZXNzL3JtZ3JkZXNjL3hsb2dkZXNjLmMgICAgfCAgIDIgKy0KIHNyYy9iYWNrZW5k L2FjY2Vzcy90cmFuc2FtL211bHRpeGFjdC5jICAgIHwgNDEyICsrKystLS0tLS0tLS0tLS0t LS0tLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cuYyAgICAgICAgIHwgICAy ICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9ncmVjb3ZlcnkuYyB8ICAgMiAr LQogc3JjL2JhY2tlbmQvY29tbWFuZHMvdmFjdXVtLmMgICAgICAgICAgICAgfCAgIDIgKy0K IHNyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYXV0b3ZhY3V1bS5jICAgICAgIHwgICA0ICstCiBz cmMvYmluL3BnX2NvbnRyb2xkYXRhL3BnX2NvbnRyb2xkYXRhLmMgICB8ICAgMiArLQogc3Jj L2Jpbi9wZ19yZXNldHdhbC9wZ19yZXNldHdhbC5jICAgICAgICAgfCAgIDYgKy0KIHNyYy9i aW4vcGdfcmVzZXR3YWwvdC8wMDFfYmFzaWMucGwgICAgICAgIHwgICAyICstCiBzcmMvaW5j bHVkZS9hY2Nlc3MvbXVsdGl4YWN0LmggICAgICAgICAgICB8ICAgMyAtCiBzcmMvaW5jbHVk ZS9jLmggICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMiArLQogMTIgZmlsZXMgY2hh bmdlZCwgNzMgaW5zZXJ0aW9ucygrKSwgMzcwIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9teGFjdGRlc2MuYyBiL3NyYy9iYWNrZW5k L2FjY2Vzcy9ybWdyZGVzYy9teGFjdGRlc2MuYwppbmRleCAzY2EwNTgyZGIzNi4uMDUyZGQw YTRjZTUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9teGFjdGRl c2MuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MvbXhhY3RkZXNjLmMKQEAg LTY1LDcgKzY1LDcgQEAgbXVsdGl4YWN0X2Rlc2MoU3RyaW5nSW5mbyBidWYsIFhMb2dSZWFk ZXJTdGF0ZSAqcmVjb3JkKQogCQl4bF9tdWx0aXhhY3RfY3JlYXRlICp4bHJlYyA9ICh4bF9t dWx0aXhhY3RfY3JlYXRlICopIHJlYzsKIAkJaW50CQkJaTsKIAotCQlhcHBlbmRTdHJpbmdJ bmZvKGJ1ZiwgIiV1IG9mZnNldCAldSBubWVtYmVycyAlZDogIiwgeGxyZWMtPm1pZCwKKwkJ YXBwZW5kU3RyaW5nSW5mbyhidWYsICIldSBvZmZzZXQgJSIgUFJJdTY0ICIgbm1lbWJlcnMg JWQ6ICIsIHhscmVjLT5taWQsCiAJCQkJCQkgeGxyZWMtPm1vZmYsIHhscmVjLT5ubWVtYmVy cyk7CiAJCWZvciAoaSA9IDA7IGkgPCB4bHJlYy0+bm1lbWJlcnM7IGkrKykKIAkJCW91dF9t ZW1iZXIoYnVmLCAmeGxyZWMtPm1lbWJlcnNbaV0pOwpAQCAtNzQsNyArNzQsNyBAQCBtdWx0 aXhhY3RfZGVzYyhTdHJpbmdJbmZvIGJ1ZiwgWExvZ1JlYWRlclN0YXRlICpyZWNvcmQpCiAJ ewogCQl4bF9tdWx0aXhhY3RfdHJ1bmNhdGUgKnhscmVjID0gKHhsX211bHRpeGFjdF90cnVu Y2F0ZSAqKSByZWM7CiAKLQkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICJvZmZzZXRzIFsldSwg JXUpLCBtZW1iZXJzIFsldSwgJXUpIiwKKwkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICJvZmZz ZXRzIFsldSwgJXUpLCBtZW1iZXJzIFslIiBQUkl1NjQgIiwgJSIgUFJJdTY0ICIpIiwKIAkJ CQkJCSB4bHJlYy0+c3RhcnRUcnVuY09mZiwgeGxyZWMtPmVuZFRydW5jT2ZmLAogCQkJCQkJ IHhscmVjLT5zdGFydFRydW5jTWVtYiwgeGxyZWMtPmVuZFRydW5jTWVtYik7CiAJfQpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL3hsb2dkZXNjLmMgYi9zcmMv YmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MveGxvZ2Rlc2MuYwppbmRleCBjZDZjMmEyZjY1MC4u NDQxMDM0ZjU5MjkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy94 bG9nZGVzYy5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy94bG9nZGVzYy5j CkBAIC02Niw3ICs2Niw3IEBAIHhsb2dfZGVzYyhTdHJpbmdJbmZvIGJ1ZiwgWExvZ1JlYWRl clN0YXRlICpyZWNvcmQpCiAJCUNoZWNrUG9pbnQgKmNoZWNrcG9pbnQgPSAoQ2hlY2tQb2lu dCAqKSByZWM7CiAKIAkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICJyZWRvICVYLyUwOFg7ICIK LQkJCQkJCSAidGxpICV1OyBwcmV2IHRsaSAldTsgZnB3ICVzOyB3YWxfbGV2ZWwgJXM7IHhp ZCAldToldTsgb2lkICV1OyBtdWx0aSAldTsgb2Zmc2V0ICV1OyAiCisJCQkJCQkgInRsaSAl dTsgcHJldiB0bGkgJXU7IGZwdyAlczsgd2FsX2xldmVsICVzOyB4aWQgJXU6JXU7IG9pZCAl dTsgbXVsdGkgJXU7IG9mZnNldCAlIiBQUkl1NjQgIjsgIgogCQkJCQkJICJvbGRlc3QgeGlk ICV1IGluIERCICV1OyBvbGRlc3QgbXVsdGkgJXUgaW4gREIgJXU7ICIKIAkJCQkJCSAib2xk ZXN0L25ld2VzdCBjb21taXQgdGltZXN0YW1wIHhpZDogJXUvJXU7ICIKIAkJCQkJCSAib2xk ZXN0IHJ1bm5pbmcgeGlkICV1OyAlcyIsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nl c3MvdHJhbnNhbS9tdWx0aXhhY3QuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL211 bHRpeGFjdC5jCmluZGV4IDlkNWYxMzBhZjdlLi42OGZkMzQ0MTgxNiAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vbXVsdGl4YWN0LmMKKysrIGIvc3JjL2JhY2tl bmQvYWNjZXNzL3RyYW5zYW0vbXVsdGl4YWN0LmMKQEAgLTkyLDE3ICs5Miw5IEBACiAvKgog ICogRGVmaW5lcyBmb3IgTXVsdGlYYWN0T2Zmc2V0IHBhZ2Ugc2l6ZXMuICBBIHBhZ2UgaXMg dGhlIHNhbWUgQkxDS1NaIGFzIGlzCiAgKiB1c2VkIGV2ZXJ5d2hlcmUgZWxzZSBpbiBQb3N0 Z3Jlcy4KLSAqCi0gKiBOb3RlOiBiZWNhdXNlIE11bHRpWGFjdE9mZnNldHMgYXJlIDMyIGJp dHMgYW5kIHdyYXAgYXJvdW5kIGF0IDB4RkZGRkZGRkYsCi0gKiBNdWx0aVhhY3QgcGFnZSBu dW1iZXJpbmcgYWxzbyB3cmFwcyBhcm91bmQgYXQKLSAqIDB4RkZGRkZGRkYvTVVMVElYQUNU X09GRlNFVFNfUEVSX1BBR0UsIGFuZCBzZWdtZW50IG51bWJlcmluZyBhdAotICogMHhGRkZG RkZGRi9NVUxUSVhBQ1RfT0ZGU0VUU19QRVJfUEFHRS9TTFJVX1BBR0VTX1BFUl9TRUdNRU5U LiAgV2UgbmVlZAotICogdGFrZSBubyBleHBsaWNpdCBub3RpY2Ugb2YgdGhhdCBmYWN0IGlu IHRoaXMgbW9kdWxlLCBleGNlcHQgd2hlbiBjb21wYXJpbmcKLSAqIHNlZ21lbnQgYW5kIHBh Z2UgbnVtYmVycyBpbiBUcnVuY2F0ZU11bHRpWGFjdCAoc2VlCi0gKiBNdWx0aVhhY3RPZmZz ZXRQYWdlUHJlY2VkZXMpLgogICovCiAKLS8qIFdlIG5lZWQgZm91ciBieXRlcyBwZXIgb2Zm c2V0ICovCisvKiBXZSBuZWVkIDggYnl0ZXMgcGVyIG9mZnNldCAqLwogI2RlZmluZSBNVUxU SVhBQ1RfT0ZGU0VUU19QRVJfUEFHRSAoQkxDS1NaIC8gc2l6ZW9mKE11bHRpWGFjdE9mZnNl dCkpCiAKIHN0YXRpYyBpbmxpbmUgaW50NjQKQEAgLTE1MSwxOSArMTQzLDYgQEAgTXVsdGlY YWN0SWRUb09mZnNldFNlZ21lbnQoTXVsdGlYYWN0SWQgbXVsdGkpCiAjZGVmaW5lIE1VTFRJ WEFDVF9NRU1CRVJTX1BFUl9QQUdFCVwKIAkoTVVMVElYQUNUX01FTUJFUkdST1VQU19QRVJf UEFHRSAqIE1VTFRJWEFDVF9NRU1CRVJTX1BFUl9NRU1CRVJHUk9VUCkKIAotLyoKLSAqIEJl Y2F1c2UgdGhlIG51bWJlciBvZiBpdGVtcyBwZXIgcGFnZSBpcyBub3QgYSBkaXZpc29yIG9m IHRoZSBsYXN0IGl0ZW0KLSAqIG51bWJlciAobWVtYmVyIDB4RkZGRkZGRkYpLCB0aGUgbGFz dCBzZWdtZW50IGRvZXMgbm90IHVzZSB0aGUgbWF4aW11bSBudW1iZXIKLSAqIG9mIHBhZ2Vz LCBhbmQgbW9yZW92ZXIgdGhlIGxhc3QgdXNlZCBwYWdlIHRoZXJlaW4gZG9lcyBub3QgdXNl IHRoZSBzYW1lCi0gKiBudW1iZXIgb2YgaXRlbXMgYXMgcHJldmlvdXMgcGFnZXMuICAoQW5v dGhlciB3YXkgdG8gc2F5IGl0IGlzIHRoYXQgdGhlCi0gKiAweEZGRkZGRkZGIG1lbWJlciBp cyBzb21ld2hlcmUgaW4gdGhlIG1pZGRsZSBvZiB0aGUgbGFzdCBwYWdlLCBzbyB0aGUgcGFn ZQotICogaGFzIHNvbWUgZW1wdHkgc3BhY2UgYWZ0ZXIgdGhhdCBpdGVtLikKLSAqCi0gKiBU aGlzIGNvbnN0YW50IGlzIHRoZSBudW1iZXIgb2YgbWVtYmVycyBpbiB0aGUgbGFzdCBwYWdl IG9mIHRoZSBsYXN0IHNlZ21lbnQuCi0gKi8KLSNkZWZpbmUgTUFYX01FTUJFUlNfSU5fTEFT VF9NRU1CRVJTX1BBR0UgXAotCQkoKHVpbnQzMikgKCgweEZGRkZGRkZGICUgTVVMVElYQUNU X01FTUJFUlNfUEVSX1BBR0UpICsgMSkpCi0KIC8qIHBhZ2UgaW4gd2hpY2ggYSBtZW1iZXIg aXMgdG8gYmUgZm91bmQgKi8KIHN0YXRpYyBpbmxpbmUgaW50NjQKIE1YT2Zmc2V0VG9NZW1i ZXJQYWdlKE11bHRpWGFjdE9mZnNldCBvZmZzZXQpCkBAIC0yMDgsMTAgKzE4NywxNCBAQCBN WE9mZnNldFRvTWVtYmVyT2Zmc2V0KE11bHRpWGFjdE9mZnNldCBvZmZzZXQpCiAJCW1lbWJl cl9pbl9ncm91cCAqIHNpemVvZihUcmFuc2FjdGlvbklkKTsKIH0KIAotLyogTXVsdGl4YWN0 IG1lbWJlcnMgd3JhcGFyb3VuZCB0aHJlc2hvbGRzLiAqLwotI2RlZmluZSBNVUxUSVhBQ1Rf TUVNQkVSX1NBRkVfVEhSRVNIT0xECQkoTWF4TXVsdGlYYWN0T2Zmc2V0IC8gMikKLSNkZWZp bmUgTVVMVElYQUNUX01FTUJFUl9EQU5HRVJfVEhSRVNIT0xECVwKLQkoTWF4TXVsdGlYYWN0 T2Zmc2V0IC0gTWF4TXVsdGlYYWN0T2Zmc2V0IC8gNCkKKy8qCisgKiBNdWx0aXhhY3QgbWVt YmVycyB3YXJuaW5nIHRocmVzaG9sZC4KKyAqCisgKiBJZiB0aGUgZGlmZmVyZW5jZSBiZXR3 ZWVuIG5leHRPZmZzZXQgYW5kIG9sZGVzdE9mZnNldCBleGNlZWRzIHRoaXMgdmFsdWUsCisg KiB3ZSB0cmlnZ2VyIGF1dG92YWN1dW0gaW4gb3JkZXIgdG8gcmVsZWFzZSBkaXNrIHNwYWNl IGNvbnN1bWVkIGJ5IHRoZQorICogbWVtYmVycyBTTFJVLgorICovCisjZGVmaW5lIE1VTFRJ WEFDVF9NRU1CRVJfQVVUT1ZBQ19USFJFU0hPTEQJCVVJTlQ2NENPTlNUKDQwMDAwMDAwMDAp CiAKIHN0YXRpYyBpbmxpbmUgTXVsdGlYYWN0SWQKIFByZXZpb3VzTXVsdGlYYWN0SWQoTXVs dGlYYWN0SWQgbXVsdGkpCkBAIC0yNjgsOSArMjUxLDYgQEAgdHlwZWRlZiBzdHJ1Y3QgTXVs dGlYYWN0U3RhdGVEYXRhCiAJTXVsdGlYYWN0SWQgbXVsdGlTdG9wTGltaXQ7CiAJTXVsdGlY YWN0SWQgbXVsdGlXcmFwTGltaXQ7CiAKLQkvKiBzdXBwb3J0IGZvciBtZW1iZXJzIGFudGkt d3JhcGFyb3VuZCBtZWFzdXJlcyAqLwotCU11bHRpWGFjdE9mZnNldCBvZmZzZXRTdG9wTGlt aXQ7CS8qIGtub3duIGlmIG9sZGVzdE9mZnNldEtub3duICovCi0KIAkvKgogCSAqIFRoaXMg aXMgdXNlZCB0byBzbGVlcCB1bnRpbCBhIG11bHRpeGFjdCBvZmZzZXQgaXMgd3JpdHRlbiB3 aGVuIHdlIHdhbnQKIAkgKiB0byBjcmVhdGUgdGhlIG5leHQgb25lLgpAQCAtNDAxLDggKzM4 MSw2IEBAIHN0YXRpYyBib29sIE11bHRpWGFjdE9mZnNldFByZWNlZGVzKE11bHRpWGFjdE9m ZnNldCBvZmZzZXQxLAogCQkJCQkJCQkJTXVsdGlYYWN0T2Zmc2V0IG9mZnNldDIpOwogc3Rh dGljIHZvaWQgRXh0ZW5kTXVsdGlYYWN0T2Zmc2V0KE11bHRpWGFjdElkIG11bHRpKTsKIHN0 YXRpYyB2b2lkIEV4dGVuZE11bHRpWGFjdE1lbWJlcihNdWx0aVhhY3RPZmZzZXQgb2Zmc2V0 LCBpbnQgbm1lbWJlcnMpOwotc3RhdGljIGJvb2wgTXVsdGlYYWN0T2Zmc2V0V291bGRXcmFw KE11bHRpWGFjdE9mZnNldCBib3VuZGFyeSwKLQkJCQkJCQkJCSBNdWx0aVhhY3RPZmZzZXQg c3RhcnQsIHVpbnQzMiBkaXN0YW5jZSk7CiBzdGF0aWMgYm9vbCBTZXRPZmZzZXRWYWN1dW1M aW1pdChib29sIGlzX3N0YXJ0dXApOwogc3RhdGljIGJvb2wgZmluZF9tdWx0aXhhY3Rfc3Rh cnQoTXVsdGlYYWN0SWQgbXVsdGksIE11bHRpWGFjdE9mZnNldCAqcmVzdWx0KTsKIHN0YXRp YyB2b2lkIFdyaXRlTVRydW5jYXRlWGxvZ1JlYyhPaWQgb2xkZXN0TXVsdGlEQiwKQEAgLTEx NDIsOTAgKzExMjAsMjIgQEAgR2V0TmV3TXVsdGlYYWN0SWQoaW50IG5tZW1iZXJzLCBNdWx0 aVhhY3RPZmZzZXQgKm9mZnNldCkKIAlFeHRlbmRNdWx0aVhhY3RPZmZzZXQocmVzdWx0KTsK IAogCS8qCi0JICogUmVzZXJ2ZSB0aGUgbWVtYmVycyBzcGFjZSwgc2ltaWxhcmx5IHRvIGFi b3ZlLiAgQWxzbywgYmUgY2FyZWZ1bCBub3QgdG8KLQkgKiByZXR1cm4gemVybyBhcyB0aGUg c3RhcnRpbmcgb2Zmc2V0IGZvciBhbnkgbXVsdGl4YWN0LiBTZWUKLQkgKiBHZXRNdWx0aVhh Y3RJZE1lbWJlcnMoKSBmb3IgbW90aXZhdGlvbi4KKwkgKiBSZXNlcnZlIHRoZSBtZW1iZXJz IHNwYWNlLCBzaW1pbGFybHkgdG8gYWJvdmUuCiAJICovCiAJbmV4dE9mZnNldCA9IE11bHRp WGFjdFN0YXRlLT5uZXh0T2Zmc2V0OwotCWlmIChuZXh0T2Zmc2V0ID09IDApCi0JewotCQkq b2Zmc2V0ID0gMTsKLQkJbm1lbWJlcnMrKzsJCQkJLyogYWxsb2NhdGUgbWVtYmVyIHNsb3Qg MCB0b28gKi8KLQl9Ci0JZWxzZQotCQkqb2Zmc2V0ID0gbmV4dE9mZnNldDsKLQotCS8qLS0t LS0tLS0tLQotCSAqIFByb3RlY3QgYWdhaW5zdCBvdmVycnVuIG9mIHRoZSBtZW1iZXJzIHNw YWNlIGFzIHdlbGwsIHdpdGggdGhlCi0JICogZm9sbG93aW5nIHJ1bGVzOgotCSAqCi0JICog SWYgd2UncmUgcGFzdCBvZmZzZXRTdG9wTGltaXQsIHJlZnVzZSB0byBnZW5lcmF0ZSBtb3Jl IG11bHRpcy4KLQkgKiBJZiB3ZSdyZSBjbG9zZSB0byBvZmZzZXRTdG9wTGltaXQsIGVtaXQg YSB3YXJuaW5nLgotCSAqCi0JICogQXJiaXRyYXJpbHksIHdlIHN0YXJ0IGVtaXR0aW5nIHdh cm5pbmdzIHdoZW4gd2UncmUgMjAgc2VnbWVudHMgb3IgbGVzcwotCSAqIGZyb20gb2Zmc2V0 U3RvcExpbWl0LgotCSAqCi0JICogTm90ZSB3ZSBoYXZlbid0IHVwZGF0ZWQgdGhlIHNoYXJl ZCBzdGF0ZSB5ZXQsIHNvIGlmIHdlIGZhaWwgYXQgdGhpcwotCSAqIHBvaW50LCB0aGUgbXVs dGl4YWN0IElEIHdlIGdyYWJiZWQgY2FuIHN0aWxsIGJlIHVzZWQgYnkgdGhlIG5leHQgZ3V5 LgotCSAqCi0JICogTm90ZSB0aGF0IHRoZXJlIGlzIG5vIHBvaW50IGluIGZvcmNpbmcgYXV0 b3ZhY3V1bSBydW5zIGhlcmU6IHRoZQotCSAqIG11bHRpeGFjdCBmcmVlemUgc2V0dGluZ3Mg d291bGQgaGF2ZSB0byBiZSByZWR1Y2VkIGZvciB0aGF0IHRvIGhhdmUgYW55Ci0JICogZWZm ZWN0LgotCSAqLS0tLS0tLS0tLQotCSAqLwotI2RlZmluZSBPRkZTRVRfV0FSTl9TRUdNRU5U UwkyMAotCWlmIChNdWx0aVhhY3RTdGF0ZS0+b2xkZXN0T2Zmc2V0S25vd24gJiYKLQkJTXVs dGlYYWN0T2Zmc2V0V291bGRXcmFwKE11bHRpWGFjdFN0YXRlLT5vZmZzZXRTdG9wTGltaXQs IG5leHRPZmZzZXQsCi0JCQkJCQkJCSBubWVtYmVycykpCi0JewotCQkvKiBzZWUgY29tbWVu dCBpbiB0aGUgY29ycmVzcG9uZGluZyBvZmZzZXRzIHdyYXBhcm91bmQgY2FzZSAqLwotCQlT ZW5kUG9zdG1hc3RlclNpZ25hbChQTVNJR05BTF9TVEFSVF9BVVRPVkFDX0xBVU5DSEVSKTsK LQotCQllcmVwb3J0KEVSUk9SLAotCQkJCShlcnJjb2RlKEVSUkNPREVfUFJPR1JBTV9MSU1J VF9FWENFRURFRCksCi0JCQkJIGVycm1zZygibXVsdGl4YWN0IFwibWVtYmVyc1wiIGxpbWl0 IGV4Y2VlZGVkIiksCi0JCQkJIGVycmRldGFpbF9wbHVyYWwoIlRoaXMgY29tbWFuZCB3b3Vs ZCBjcmVhdGUgYSBtdWx0aXhhY3Qgd2l0aCAldSBtZW1iZXJzLCBidXQgdGhlIHJlbWFpbmlu ZyBzcGFjZSBpcyBvbmx5IGVub3VnaCBmb3IgJXUgbWVtYmVyLiIsCi0JCQkJCQkJCSAgIlRo aXMgY29tbWFuZCB3b3VsZCBjcmVhdGUgYSBtdWx0aXhhY3Qgd2l0aCAldSBtZW1iZXJzLCBi dXQgdGhlIHJlbWFpbmluZyBzcGFjZSBpcyBvbmx5IGVub3VnaCBmb3IgJXUgbWVtYmVycy4i LAotCQkJCQkJCQkgIE11bHRpWGFjdFN0YXRlLT5vZmZzZXRTdG9wTGltaXQgLSBuZXh0T2Zm c2V0IC0gMSwKLQkJCQkJCQkJICBubWVtYmVycywKLQkJCQkJCQkJICBNdWx0aVhhY3RTdGF0 ZS0+b2Zmc2V0U3RvcExpbWl0IC0gbmV4dE9mZnNldCAtIDEpLAotCQkJCSBlcnJoaW50KCJF eGVjdXRlIGEgZGF0YWJhc2Utd2lkZSBWQUNVVU0gaW4gZGF0YWJhc2Ugd2l0aCBPSUQgJXUg d2l0aCByZWR1Y2VkIFwidmFjdXVtX211bHRpeGFjdF9mcmVlemVfbWluX2FnZVwiIGFuZCBc InZhY3V1bV9tdWx0aXhhY3RfZnJlZXplX3RhYmxlX2FnZVwiIHNldHRpbmdzLiIsCi0JCQkJ CQkgTXVsdGlYYWN0U3RhdGUtPm9sZGVzdE11bHRpWGFjdERCKSkpOwotCX0KIAogCS8qCi0J ICogQ2hlY2sgd2hldGhlciB3ZSBzaG91bGQga2ljayBhdXRvdmFjdXVtIGludG8gYWN0aW9u LCB0byBwcmV2ZW50IG1lbWJlcnMKLQkgKiB3cmFwYXJvdW5kLiBOQiB3ZSB1c2UgYSBtdWNo IGxhcmdlciB3aW5kb3cgdG8gdHJpZ2dlciBhdXRvdmFjdXVtIHRoYW4KLQkgKiBqdXN0IHRo ZSB3YXJuaW5nIGxpbWl0LiBUaGUgd2FybmluZyBpcyBqdXN0IGEgbWVhc3VyZSBvZiBsYXN0 IHJlc29ydCAtCi0JICogdGhpcyBpcyBpbiBsaW5lIHdpdGggR2V0TmV3VHJhbnNhY3Rpb25J ZCdzIGJlaGF2aW91ci4KKwkgKiBPZmZzZXRzIGFyZSA2NC1iaXQgaW50ZWdlcnMgYW5kIHdp bGwgbmV2ZXIgd3JhcCBhcm91bmQuICBGaXJzdGx5LCBpdAorCSAqIHdvdWxkIHRha2UgYW4g dW5yZWFsaXN0aWMgYW1vdW50IG9mIHRpbWUgYW5kIHJlc291cmNlcyB0byBjb25zdW1lIDJe NjQKKwkgKiBvZmZzZXRzLiAgU2Vjb25kbHksIG11bHRpeGlkIGNyZWF0aW9uIGlzIFdBTC1s b2dnZWQsIHNvIHlvdSB3b3VsZCBydW4KKwkgKiBvdXQgb2YgTFNOcyBiZWZvcmUgcmVhY2hp bmcgb2Zmc2V0IHdyYXBhcm91bmQuICBOZXZlcnRoZWxlc3MsIGNoZWNrIGZvcgorCSAqIHdy YXBhcm91bmQgYXMgYSBzYW5pdHkgY2hlY2suCiAJICovCi0JaWYgKCFNdWx0aVhhY3RTdGF0 ZS0+b2xkZXN0T2Zmc2V0S25vd24gfHwKLQkJKE11bHRpWGFjdFN0YXRlLT5uZXh0T2Zmc2V0 IC0gTXVsdGlYYWN0U3RhdGUtPm9sZGVzdE9mZnNldAotCQkgPiBNVUxUSVhBQ1RfTUVNQkVS X1NBRkVfVEhSRVNIT0xEKSkKLQl7Ci0JCS8qCi0JCSAqIFRvIGF2b2lkIHN3YW1waW5nIHRo ZSBwb3N0bWFzdGVyIHdpdGggc2lnbmFscywgd2UgaXNzdWUgdGhlIGF1dG92YWMKLQkJICog cmVxdWVzdCBvbmx5IHdoZW4gY3Jvc3NpbmcgYSBzZWdtZW50IGJvdW5kYXJ5LiBXaXRoIGRl ZmF1bHQKLQkJICogY29tcGlsYXRpb24gc2V0dGluZ3MgdGhhdCdzIHJvdWdobHkgYWZ0ZXIg NTBrIG1lbWJlcnMuICBUaGlzIHN0aWxsCi0JCSAqIGdpdmVzIHBsZW50eSBvZiBjaGFuY2Vz IGJlZm9yZSB3ZSBnZXQgaW50byByZWFsIHRyb3VibGUuCi0JCSAqLwotCQlpZiAoKE1YT2Zm c2V0VG9NZW1iZXJQYWdlKG5leHRPZmZzZXQpIC8gU0xSVV9QQUdFU19QRVJfU0VHTUVOVCkg IT0KLQkJCShNWE9mZnNldFRvTWVtYmVyUGFnZShuZXh0T2Zmc2V0ICsgbm1lbWJlcnMpIC8g U0xSVV9QQUdFU19QRVJfU0VHTUVOVCkpCi0JCQlTZW5kUG9zdG1hc3RlclNpZ25hbChQTVNJ R05BTF9TVEFSVF9BVVRPVkFDX0xBVU5DSEVSKTsKLQl9Ci0KLQlpZiAoTXVsdGlYYWN0U3Rh dGUtPm9sZGVzdE9mZnNldEtub3duICYmCi0JCU11bHRpWGFjdE9mZnNldFdvdWxkV3JhcChN dWx0aVhhY3RTdGF0ZS0+b2Zmc2V0U3RvcExpbWl0LAotCQkJCQkJCQkgbmV4dE9mZnNldCwK LQkJCQkJCQkJIG5tZW1iZXJzICsgTVVMVElYQUNUX01FTUJFUlNfUEVSX1BBR0UgKiBTTFJV X1BBR0VTX1BFUl9TRUdNRU5UICogT0ZGU0VUX1dBUk5fU0VHTUVOVFMpKQotCQllcmVwb3J0 KFdBUk5JTkcsCisJaWYgKG5leHRPZmZzZXQgKyBubWVtYmVycyA8IG5leHRPZmZzZXQpCisJ CWVyZXBvcnQoRVJST1IsCiAJCQkJKGVycmNvZGUoRVJSQ09ERV9QUk9HUkFNX0xJTUlUX0VY Q0VFREVEKSwKLQkJCQkgZXJybXNnX3BsdXJhbCgiZGF0YWJhc2Ugd2l0aCBPSUQgJXUgbXVz dCBiZSB2YWN1dW1lZCBiZWZvcmUgJWQgbW9yZSBtdWx0aXhhY3QgbWVtYmVyIGlzIHVzZWQi LAotCQkJCQkJCSAgICJkYXRhYmFzZSB3aXRoIE9JRCAldSBtdXN0IGJlIHZhY3V1bWVkIGJl Zm9yZSAlZCBtb3JlIG11bHRpeGFjdCBtZW1iZXJzIGFyZSB1c2VkIiwKLQkJCQkJCQkgICBN dWx0aVhhY3RTdGF0ZS0+b2Zmc2V0U3RvcExpbWl0IC0gbmV4dE9mZnNldCArIG5tZW1iZXJz LAotCQkJCQkJCSAgIE11bHRpWGFjdFN0YXRlLT5vbGRlc3RNdWx0aVhhY3REQiwKLQkJCQkJ CQkgICBNdWx0aVhhY3RTdGF0ZS0+b2Zmc2V0U3RvcExpbWl0IC0gbmV4dE9mZnNldCArIG5t ZW1iZXJzKSwKLQkJCQkgZXJyaGludCgiRXhlY3V0ZSBhIGRhdGFiYXNlLXdpZGUgVkFDVVVN IGluIHRoYXQgZGF0YWJhc2Ugd2l0aCByZWR1Y2VkIFwidmFjdXVtX211bHRpeGFjdF9mcmVl emVfbWluX2FnZVwiIGFuZCBcInZhY3V1bV9tdWx0aXhhY3RfZnJlZXplX3RhYmxlX2FnZVwi IHNldHRpbmdzLiIpKSk7CisJCQkJICJNdWx0aVhhY3QgbWVtYmVycyB3b3VsZCB3cmFwIGFy b3VuZCIpKTsKKwkqb2Zmc2V0ID0gbmV4dE9mZnNldDsKIAogCUV4dGVuZE11bHRpWGFjdE1l bWJlcihuZXh0T2Zmc2V0LCBubWVtYmVycyk7CiAKQEAgLTEyNDYsOCArMTE1Niw3IEBAIEdl dE5ld011bHRpWGFjdElkKGludCBubWVtYmVycywgTXVsdGlYYWN0T2Zmc2V0ICpvZmZzZXQp CiAJICogdGhlIG5leHQgaXRlcmF0aW9uLiAgQnV0IG5vdGUgdGhhdCBuZXh0TVhhY3QgbWF5 IGJlIEludmFsaWRNdWx0aVhhY3RJZAogCSAqIG9yIHRoZSBmaXJzdCB2YWx1ZSBvbiBhIHNl Z21lbnQtYmVnaW5uaW5nIHBhZ2UgYWZ0ZXIgdGhpcyByb3V0aW5lCiAJICogZXhpdHMsIHNv IGFueW9uZSBlbHNlIGxvb2tpbmcgYXQgdGhlIHZhcmlhYmxlIG11c3QgYmUgcHJlcGFyZWQg dG8gZGVhbAotCSAqIHdpdGggZWl0aGVyIGNhc2UuICBTaW1pbGFybHksIG5leHRPZmZzZXQg bWF5IGJlIHplcm8sIGJ1dCB3ZSB3b24ndCB1c2UKLQkgKiB0aGF0IGFzIHRoZSBhY3R1YWwg c3RhcnQgb2Zmc2V0IG9mIHRoZSBuZXh0IG11bHRpeGFjdC4KKwkgKiB3aXRoIGVpdGhlciBj YXNlLgogCSAqLwogCShNdWx0aVhhY3RTdGF0ZS0+bmV4dE1YYWN0KSsrOwogCkBAIC0xMjU1 LDcgKzExNjQsOCBAQCBHZXROZXdNdWx0aVhhY3RJZChpbnQgbm1lbWJlcnMsIE11bHRpWGFj dE9mZnNldCAqb2Zmc2V0KQogCiAJTFdMb2NrUmVsZWFzZShNdWx0aVhhY3RHZW5Mb2NrKTsK IAotCWRlYnVnX2Vsb2c0KERFQlVHMiwgIkdldE5ldzogcmV0dXJuaW5nICV1IG9mZnNldCAl dSIsIHJlc3VsdCwgKm9mZnNldCk7CisJZGVidWdfZWxvZzQoREVCVUcyLCAiR2V0TmV3OiBy ZXR1cm5pbmcgJXUgb2Zmc2V0ICUiIFBSSXU2NCwgcmVzdWx0LAorCQkJCSpvZmZzZXQpOwog CXJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTEyOTcsNyArMTIwNyw2IEBAIEdldE11bHRpWGFj dElkTWVtYmVycyhNdWx0aVhhY3RJZCBtdWx0aSwgTXVsdGlYYWN0TWVtYmVyICoqbWVtYmVy cywKIAlNdWx0aVhhY3RPZmZzZXQgKm9mZnB0cjsKIAlNdWx0aVhhY3RPZmZzZXQgb2Zmc2V0 OwogCWludAkJCWxlbmd0aDsKLQlpbnQJCQl0cnVlbGVuZ3RoOwogCU11bHRpWGFjdElkIG9s ZGVzdE1YYWN0OwogCU11bHRpWGFjdElkIG5leHRNWGFjdDsKIAlNdWx0aVhhY3RJZCB0bXBN WGFjdDsKQEAgLTEzOTYsMTYgKzEzMDUsNyBAQCBHZXRNdWx0aVhhY3RJZE1lbWJlcnMoTXVs dGlYYWN0SWQgbXVsdGksIE11bHRpWGFjdE1lbWJlciAqKm1lbWJlcnMsCiAJICogd2UgaGF2 ZSBqdXN0IGZvciB0aGlzOyB0aGUgcHJvY2VzcyBpbiBjaGFyZ2Ugd2lsbCBzaWduYWwgdGhl IENWIGFzIHNvb24KIAkgKiBhcyBpdCBoYXMgZmluaXNoZWQgd3JpdGluZyB0aGUgbXVsdGl4 YWN0IG9mZnNldC4KIAkgKgotCSAqIDMuIEJlY2F1c2UgR2V0TmV3TXVsdGlYYWN0SWQgaW5j cmVtZW50cyBvZmZzZXQgemVybyB0byBvZmZzZXQgb25lIHRvCi0JICogaGFuZGxlIGNhc2Ug IzIsIHRoZXJlIGlzIGFuIGFtYmlndWl0eSBuZWFyIHRoZSBwb2ludCBvZiBvZmZzZXQKLQkg KiB3cmFwYXJvdW5kLiAgSWYgd2Ugc2VlIG5leHQgbXVsdGl4YWN0J3Mgb2Zmc2V0IGlzIG9u ZSwgaXMgdGhhdCBvdXIKLQkgKiBtdWx0aXhhY3QncyBhY3R1YWwgZW5kcG9pbnQsIG9yIGRp ZCBpdCBlbmQgYXQgemVybyB3aXRoIGEgc3Vic2VxdWVudAotCSAqIGluY3JlbWVudD8gIFdl IGhhbmRsZSB0aGlzIHVzaW5nIHRoZSBrbm93bGVkZ2UgdGhhdCBpZiB0aGUgemVybyd0aAot CSAqIG1lbWJlciBzbG90IHdhc24ndCBmaWxsZWQsIGl0J2xsIGNvbnRhaW4gemVybywgYW5k IHplcm8gaXNuJ3QgYSB2YWxpZAotCSAqIHRyYW5zYWN0aW9uIElEIHNvIGl0IGNhbid0IGJl IGEgbXVsdGl4YWN0IG1lbWJlci4gIFRoZXJlZm9yZSwgaWYgd2UKLQkgKiByZWFkIGEgemVy byBmcm9tIHRoZSBtZW1iZXJzIGFycmF5LCBqdXN0IGlnbm9yZSBpdC4KLQkgKgotCSAqIFRo aXMgaXMgYWxsIHByZXR0eSBtZXNzeSwgYnV0IHRoZSBtZXNzIG9jY3VycyBvbmx5IGluIGlu ZnJlcXVlbnQgY29ybmVyCisJICogVGhpcyBpcyBhIGxpdHRsZSBtZXNzeSwgYnV0IHRoZSBt ZXNzIG9jY3VycyBvbmx5IGluIGluZnJlcXVlbnQgY29ybmVyCiAJICogY2FzZXMsIHNvIGl0 IHNlZW1zIGJldHRlciB0aGFuIGhvbGRpbmcgdGhlIE11bHRpWGFjdEdlbkxvY2sgZm9yIGEg bG9uZwogCSAqIHRpbWUgb24gZXZlcnkgbXVsdGl4YWN0IGNyZWF0aW9uLgogCSAqLwpAQCAt MTQ5MSw2ICsxMzkxLDkgQEAgcmV0cnk6CiAJTFdMb2NrUmVsZWFzZShsb2NrKTsKIAlsb2Nr ID0gTlVMTDsKIAorCS8qIEEgbXVsdGl4aWQgd2l0aCB6ZXJvIG1lbWJlcnMgc2hvdWxkIG5v dCBoYXBwZW4gKi8KKwlBc3NlcnQobGVuZ3RoID4gMCk7CisKIAkvKgogCSAqIElmIHdlIHNs ZXB0IGFib3ZlLCBjbGVhbiB1cCBzdGF0ZTsgaXQncyBubyBsb25nZXIgbmVlZGVkLgogCSAq LwpAQCAtMTQ5OSw3ICsxNDAyLDYgQEAgcmV0cnk6CiAKIAlwdHIgPSAoTXVsdGlYYWN0TWVt YmVyICopIHBhbGxvYyhsZW5ndGggKiBzaXplb2YoTXVsdGlYYWN0TWVtYmVyKSk7CiAKLQl0 cnVlbGVuZ3RoID0gMDsKIAlwcmV2X3BhZ2VubyA9IC0xOwogCWZvciAoaW50IGkgPSAwOyBp IDwgbGVuZ3RoOyBpKyssIG9mZnNldCsrKQogCXsKQEAgLTE1MzYsMzcgKzE0MzgsMjcgQEAg cmV0cnk6CiAKIAkJeGFjdHB0ciA9IChUcmFuc2FjdGlvbklkICopCiAJCQkoTXVsdGlYYWN0 TWVtYmVyQ3RsLT5zaGFyZWQtPnBhZ2VfYnVmZmVyW3Nsb3Rub10gKyBtZW1iZXJvZmYpOwot Ci0JCWlmICghVHJhbnNhY3Rpb25JZElzVmFsaWQoKnhhY3RwdHIpKQotCQl7Ci0JCQkvKiBD b3JuZXIgY2FzZSAzOiB3ZSBtdXN0IGJlIGxvb2tpbmcgYXQgdW51c2VkIHNsb3QgemVybyAq LwotCQkJQXNzZXJ0KG9mZnNldCA9PSAwKTsKLQkJCWNvbnRpbnVlOwotCQl9CisJCUFzc2Vy dChUcmFuc2FjdGlvbklkSXNWYWxpZCgqeGFjdHB0cikpOwogCiAJCWZsYWdzb2ZmID0gTVhP ZmZzZXRUb0ZsYWdzT2Zmc2V0KG9mZnNldCk7CiAJCWJzaGlmdCA9IE1YT2Zmc2V0VG9GbGFn c0JpdFNoaWZ0KG9mZnNldCk7CiAJCWZsYWdzcHRyID0gKHVpbnQzMiAqKSAoTXVsdGlYYWN0 TWVtYmVyQ3RsLT5zaGFyZWQtPnBhZ2VfYnVmZmVyW3Nsb3Rub10gKyBmbGFnc29mZik7CiAK LQkJcHRyW3RydWVsZW5ndGhdLnhpZCA9ICp4YWN0cHRyOwotCQlwdHJbdHJ1ZWxlbmd0aF0u c3RhdHVzID0gKCpmbGFnc3B0ciA+PiBic2hpZnQpICYgTVhBQ1RfTUVNQkVSX1hBQ1RfQklU TUFTSzsKLQkJdHJ1ZWxlbmd0aCsrOworCQlwdHJbaV0ueGlkID0gKnhhY3RwdHI7CisJCXB0 cltpXS5zdGF0dXMgPSAoKmZsYWdzcHRyID4+IGJzaGlmdCkgJiBNWEFDVF9NRU1CRVJfWEFD VF9CSVRNQVNLOwogCX0KIAogCUxXTG9ja1JlbGVhc2UobG9jayk7CiAKLQkvKiBBIG11bHRp eGlkIHdpdGggemVybyBtZW1iZXJzIHNob3VsZCBub3QgaGFwcGVuICovCi0JQXNzZXJ0KHRy dWVsZW5ndGggPiAwKTsKLQogCS8qCiAJICogQ29weSB0aGUgcmVzdWx0IGludG8gdGhlIGxv Y2FsIGNhY2hlLgogCSAqLwotCW1YYWN0Q2FjaGVQdXQobXVsdGksIHRydWVsZW5ndGgsIHB0 cik7CisJbVhhY3RDYWNoZVB1dChtdWx0aSwgbGVuZ3RoLCBwdHIpOwogCiAJZGVidWdfZWxv ZzMoREVCVUcyLCAiR2V0TWVtYmVyczogbm8gY2FjaGUgZm9yICVzIiwKLQkJCQlteGlkX3Rv X3N0cmluZyhtdWx0aSwgdHJ1ZWxlbmd0aCwgcHRyKSk7CisJCQkJbXhpZF90b19zdHJpbmco bXVsdGksIGxlbmd0aCwgcHRyKSk7CiAJKm1lbWJlcnMgPSBwdHI7Ci0JcmV0dXJuIHRydWVs ZW5ndGg7CisJcmV0dXJuIGxlbmd0aDsKIH0KIAogLyoKQEAgLTE5NzMsNyArMTg2NSw3IEBA IE11bHRpWGFjdFNobWVtSW5pdCh2b2lkKQogCQkJCSAgInBnX211bHRpeGFjdC9tZW1iZXJz IiwgTFdUUkFOQ0hFX01VTFRJWEFDVE1FTUJFUl9CVUZGRVIsCiAJCQkJICBMV1RSQU5DSEVf TVVMVElYQUNUTUVNQkVSX1NMUlUsCiAJCQkJICBTWU5DX0hBTkRMRVJfTVVMVElYQUNUX01F TUJFUiwKLQkJCQkgIGZhbHNlKTsKKwkJCQkgIHRydWUpOwogCS8qIGRvZXNuJ3QgY2FsbCBT aW1wbGVMcnVUcnVuY2F0ZSgpIG9yIG1lZXQgY3JpdGVyaWEgZm9yIHVuaXQgdGVzdHMgKi8K IAogCS8qIEluaXRpYWxpemUgb3VyIHNoYXJlZCBzdGF0ZSBzdHJ1Y3QgKi8KQEAgLTIxNTAs NyArMjA0Miw2IEBAIFRyaW1NdWx0aVhhY3Qodm9pZCkKIAkJc2xvdG5vID0gU2ltcGxlTHJ1 UmVhZFBhZ2UoTXVsdGlYYWN0T2Zmc2V0Q3RsLCBwYWdlbm8sIHRydWUsIG5leHRNWGFjdCk7 CiAJCW9mZnB0ciA9IChNdWx0aVhhY3RPZmZzZXQgKikgTXVsdGlYYWN0T2Zmc2V0Q3RsLT5z aGFyZWQtPnBhZ2VfYnVmZmVyW3Nsb3Rub107CiAJCW9mZnB0ciArPSBlbnRyeW5vOwotCiAJ CU1lbVNldChvZmZwdHIsIDAsIEJMQ0tTWiAtIChlbnRyeW5vICogc2l6ZW9mKE11bHRpWGFj dE9mZnNldCkpKTsKIAogCQlNdWx0aVhhY3RPZmZzZXRDdGwtPnNoYXJlZC0+cGFnZV9kaXJ0 eVtzbG90bm9dID0gdHJ1ZTsKQEAgLTIyMjMsNyArMjExNCw3IEBAIE11bHRpWGFjdEdldENo ZWNrcHRNdWx0aShib29sIGlzX3NodXRkb3duLAogCUxXTG9ja1JlbGVhc2UoTXVsdGlYYWN0 R2VuTG9jayk7CiAKIAlkZWJ1Z19lbG9nNihERUJVRzIsCi0JCQkJIk11bHRpWGFjdDogY2hl Y2twb2ludCBpcyBuZXh0TXVsdGkgJXUsIG5leHRPZmZzZXQgJXUsIG9sZGVzdE11bHRpICV1 IGluIERCICV1IiwKKwkJCQkiTXVsdGlYYWN0OiBjaGVja3BvaW50IGlzIG5leHRNdWx0aSAl dSwgbmV4dE9mZnNldCAlIiBQUkl1NjQgIiwgb2xkZXN0TXVsdGkgJXUgaW4gREIgJXUiLAog CQkJCSpuZXh0TXVsdGksICpuZXh0TXVsdGlPZmZzZXQsICpvbGRlc3RNdWx0aSwgKm9sZGVz dE11bHRpREIpOwogfQogCkBAIC0yMjU4LDcgKzIxNDksNyBAQCB2b2lkCiBNdWx0aVhhY3RT ZXROZXh0TVhhY3QoTXVsdGlYYWN0SWQgbmV4dE11bHRpLAogCQkJCQkgIE11bHRpWGFjdE9m ZnNldCBuZXh0TXVsdGlPZmZzZXQpCiB7Ci0JZGVidWdfZWxvZzQoREVCVUcyLCAiTXVsdGlY YWN0OiBzZXR0aW5nIG5leHQgbXVsdGkgdG8gJXUgb2Zmc2V0ICV1IiwKKwlkZWJ1Z19lbG9n NChERUJVRzIsICJNdWx0aVhhY3Q6IHNldHRpbmcgbmV4dCBtdWx0aSB0byAldSBvZmZzZXQg JSIgUFJJdTY0LAogCQkJCW5leHRNdWx0aSwgbmV4dE11bHRpT2Zmc2V0KTsKIAlMV0xvY2tB Y3F1aXJlKE11bHRpWGFjdEdlbkxvY2ssIExXX0VYQ0xVU0lWRSk7CiAJTXVsdGlYYWN0U3Rh dGUtPm5leHRNWGFjdCA9IG5leHRNdWx0aTsKQEAgLTI0NDksNyArMjM0MCw3IEBAIE11bHRp WGFjdEFkdmFuY2VOZXh0TVhhY3QoTXVsdGlYYWN0SWQgbWluTXVsdGksCiAJfQogCWlmIChN dWx0aVhhY3RPZmZzZXRQcmVjZWRlcyhNdWx0aVhhY3RTdGF0ZS0+bmV4dE9mZnNldCwgbWlu TXVsdGlPZmZzZXQpKQogCXsKLQkJZGVidWdfZWxvZzMoREVCVUcyLCAiTXVsdGlYYWN0OiBz ZXR0aW5nIG5leHQgb2Zmc2V0IHRvICV1IiwKKwkJZGVidWdfZWxvZzMoREVCVUcyLCAiTXVs dGlYYWN0OiBzZXR0aW5nIG5leHQgb2Zmc2V0IHRvICUiIFBSSVU2NCwKIAkJCQkJbWluTXVs dGlPZmZzZXQpOwogCQlNdWx0aVhhY3RTdGF0ZS0+bmV4dE9mZnNldCA9IG1pbk11bHRpT2Zm c2V0OwogCX0KQEAgLTI1NTEsMjMgKzI0NDIsOCBAQCBFeHRlbmRNdWx0aVhhY3RNZW1iZXIo TXVsdGlYYWN0T2Zmc2V0IG9mZnNldCwgaW50IG5tZW1iZXJzKQogCQkJTFdMb2NrUmVsZWFz ZShsb2NrKTsKIAkJfQogCi0JCS8qCi0JCSAqIENvbXB1dGUgdGhlIG51bWJlciBvZiBpdGVt cyB0aWxsIGVuZCBvZiBjdXJyZW50IHBhZ2UuICBDYXJlZnVsOiBpZgotCQkgKiBhZGRpdGlv biBvZiB1bnNpZ25lZCBpbnRzIHdyYXBzIGFyb3VuZCwgd2UncmUgYXQgdGhlIGxhc3QgcGFn ZSBvZgotCQkgKiB0aGUgbGFzdCBzZWdtZW50OyBzaW5jZSB0aGF0IHBhZ2UgaG9sZHMgYSBk aWZmZXJlbnQgbnVtYmVyIG9mIGl0ZW1zCi0JCSAqIHRoYW4gb3RoZXIgcGFnZXMsIHdlIG5l ZWQgdG8gZG8gaXQgZGlmZmVyZW50bHkuCi0JCSAqLwotCQlpZiAob2Zmc2V0ICsgTUFYX01F TUJFUlNfSU5fTEFTVF9NRU1CRVJTX1BBR0UgPCBvZmZzZXQpCi0JCXsKLQkJCS8qCi0JCQkg KiBUaGlzIGlzIHRoZSBsYXN0IHBhZ2Ugb2YgdGhlIGxhc3Qgc2VnbWVudDsgd2UgY2FuIGNv bXB1dGUgdGhlCi0JCQkgKiBudW1iZXIgb2YgaXRlbXMgbGVmdCB0byBhbGxvY2F0ZSBpbiBp dCB3aXRob3V0IG1vZHVsbwotCQkJICogYXJpdGhtZXRpYy4KLQkJCSAqLwotCQkJZGlmZmVy ZW5jZSA9IE1heE11bHRpWGFjdE9mZnNldCAtIG9mZnNldCArIDE7Ci0JCX0KLQkJZWxzZQot CQkJZGlmZmVyZW5jZSA9IE1VTFRJWEFDVF9NRU1CRVJTX1BFUl9QQUdFIC0gb2Zmc2V0ICUg TVVMVElYQUNUX01FTUJFUlNfUEVSX1BBR0U7CisJCS8qIENvbXB1dGUgdGhlIG51bWJlciBv ZiBpdGVtcyB0aWxsIGVuZCBvZiBjdXJyZW50IHBhZ2UuICovCisJCWRpZmZlcmVuY2UgPSBN VUxUSVhBQ1RfTUVNQkVSU19QRVJfUEFHRSAtIG9mZnNldCAlIE1VTFRJWEFDVF9NRU1CRVJT X1BFUl9QQUdFOwogCiAJCS8qCiAJCSAqIEFkdmFuY2UgdG8gbmV4dCBwYWdlLCB0YWtpbmcg Y2FyZSB0byBwcm9wZXJseSBoYW5kbGUgdGhlIHdyYXBhcm91bmQKQEAgLTI2MzMsMTUgKzI1 MDksMTQgQEAgR2V0T2xkZXN0TXVsdGlYYWN0SWQodm9pZCkKIH0KIAogLyoKLSAqIERldGVy bWluZSBob3cgYWdncmVzc2l2ZWx5IHdlIG5lZWQgdG8gdmFjdXVtIGluIG9yZGVyIHRvIHBy ZXZlbnQgbWVtYmVyCi0gKiB3cmFwYXJvdW5kLgorICogRGV0ZXJtaW5lIGlmIHdlIG5lZWQg dG8gdmFjdXVtIHRvIGtlZXAgdGhlIHNpemUgb2YgdGhlIG1lbWJlcnMgU0xSVSBpbgorICog Y2hlY2suCiAgKgogICogVG8gZG8gc28gZGV0ZXJtaW5lIHdoYXQncyB0aGUgb2xkZXN0IG1l bWJlciBvZmZzZXQgYW5kIGluc3RhbGwgdGhlIGxpbWl0CiAgKiBpbmZvIGluIE11bHRpWGFj dFN0YXRlLCB3aGVyZSBpdCBjYW4gYmUgdXNlZCB0byBwcmV2ZW50IG92ZXJydW4gb2Ygb2xk IGRhdGEKICAqIGluIHRoZSBtZW1iZXJzIFNMUlUgYXJlYS4KICAqCi0gKiBUaGUgcmV0dXJu IHZhbHVlIGlzIHRydWUgaWYgZW1lcmdlbmN5IGF1dG92YWN1dW0gaXMgcmVxdWlyZWQgYW5k IGZhbHNlCi0gKiBvdGhlcndpc2UuCisgKiBUaGUgcmV0dXJuIHZhbHVlIGlzIHRydWUgaWYg YXV0b3ZhY3V1bSBpcyByZXF1aXJlZCBhbmQgZmFsc2Ugb3RoZXJ3aXNlLgogICovCiBzdGF0 aWMgYm9vbAogU2V0T2Zmc2V0VmFjdXVtTGltaXQoYm9vbCBpc19zdGFydHVwKQpAQCAtMjY1 Myw4ICsyNTI4LDYgQEAgU2V0T2Zmc2V0VmFjdXVtTGltaXQoYm9vbCBpc19zdGFydHVwKQog CU11bHRpWGFjdE9mZnNldCBuZXh0T2Zmc2V0OwogCWJvb2wJCW9sZGVzdE9mZnNldEtub3du ID0gZmFsc2U7CiAJYm9vbAkJcHJldk9sZGVzdE9mZnNldEtub3duOwotCU11bHRpWGFjdE9m ZnNldCBvZmZzZXRTdG9wTGltaXQgPSAwOwotCU11bHRpWGFjdE9mZnNldCBwcmV2T2Zmc2V0 U3RvcExpbWl0OwogCiAJLyoKIAkgKiBOQjogSGF2ZSB0byBwcmV2ZW50IGNvbmN1cnJlbnQg dHJ1bmNhdGlvbiwgd2UgbWlnaHQgb3RoZXJ3aXNlIHRyeSB0bwpAQCAtMjY2OSw3ICsyNTQy LDYgQEAgU2V0T2Zmc2V0VmFjdXVtTGltaXQoYm9vbCBpc19zdGFydHVwKQogCW5leHRPZmZz ZXQgPSBNdWx0aVhhY3RTdGF0ZS0+bmV4dE9mZnNldDsKIAlwcmV2T2xkZXN0T2Zmc2V0S25v d24gPSBNdWx0aVhhY3RTdGF0ZS0+b2xkZXN0T2Zmc2V0S25vd247CiAJcHJldk9sZGVzdE9m ZnNldCA9IE11bHRpWGFjdFN0YXRlLT5vbGRlc3RPZmZzZXQ7Ci0JcHJldk9mZnNldFN0b3BM aW1pdCA9IE11bHRpWGFjdFN0YXRlLT5vZmZzZXRTdG9wTGltaXQ7CiAJQXNzZXJ0KE11bHRp WGFjdFN0YXRlLT5maW5pc2hlZFN0YXJ0dXApOwogCUxXTG9ja1JlbGVhc2UoTXVsdGlYYWN0 R2VuTG9jayk7CiAKQEAgLTI3MDAsMTMgKzI1NzIsOSBAQCBTZXRPZmZzZXRWYWN1dW1MaW1p dChib29sIGlzX3N0YXJ0dXApCiAJCW9sZGVzdE9mZnNldEtub3duID0KIAkJCWZpbmRfbXVs dGl4YWN0X3N0YXJ0KG9sZGVzdE11bHRpWGFjdElkLCAmb2xkZXN0T2Zmc2V0KTsKIAotCQlp ZiAob2xkZXN0T2Zmc2V0S25vd24pCi0JCQllcmVwb3J0KERFQlVHMSwKLQkJCQkJKGVycm1z Z19pbnRlcm5hbCgib2xkZXN0IE11bHRpWGFjdElkIG1lbWJlciBpcyBhdCBvZmZzZXQgJXUi LAotCQkJCQkJCQkJIG9sZGVzdE9mZnNldCkpKTsKLQkJZWxzZQorCQlpZiAoIW9sZGVzdE9m ZnNldEtub3duKQogCQkJZXJlcG9ydChMT0csCi0JCQkJCShlcnJtc2coIk11bHRpWGFjdCBt ZW1iZXIgd3JhcGFyb3VuZCBwcm90ZWN0aW9ucyBhcmUgZGlzYWJsZWQgYmVjYXVzZSBvbGRl c3QgY2hlY2twb2ludGVkIE11bHRpWGFjdCAldSBkb2VzIG5vdCBleGlzdCBvbiBkaXNrIiwK KwkJCQkJKGVycm1zZygib2xkZXN0IGNoZWNrcG9pbnRlZCBNdWx0aVhhY3QgJXUgZG9lcyBu b3QgZXhpc3Qgb24gZGlzayIsCiAJCQkJCQkJb2xkZXN0TXVsdGlYYWN0SWQpKSk7CiAJfQog CkBAIC0yNzE2LDk3ICsyNTg0LDMyIEBAIFNldE9mZnNldFZhY3V1bUxpbWl0KGJvb2wgaXNf c3RhcnR1cCkKIAkgKiBJZiB3ZSBjYW4sIGNvbXB1dGUgbGltaXRzIChhbmQgaW5zdGFsbCB0 aGVtIE11bHRpWGFjdFN0YXRlKSB0byBwcmV2ZW50CiAJICogb3ZlcnJ1biBvZiBvbGQgZGF0 YSBpbiB0aGUgbWVtYmVycyBTTFJVIGFyZWEuIFdlIGNhbiBvbmx5IGRvIHNvIGlmIHRoZQog CSAqIG9sZGVzdCBvZmZzZXQgaXMga25vd24gdGhvdWdoLgorCSAqCisJICogRklYTUU6IElz ICFvbGRlc3RPZmZzZXRLbm93biBwb3NzaWJsZSBhbnltb3JlPyBBdCBsZWFzdCB1cGRhdGUg dGhlIGNvbW1lbnQ6CisJICogd2Ugd29uJ3Qgb3ZlcnJ1biBtZW1iZXJzIGFueW1vcmUuCiAJ ICovCi0JaWYgKG9sZGVzdE9mZnNldEtub3duKQotCXsKLQkJLyogbW92ZSBiYWNrIHRvIHN0 YXJ0IG9mIHRoZSBjb3JyZXNwb25kaW5nIHNlZ21lbnQgKi8KLQkJb2Zmc2V0U3RvcExpbWl0 ID0gb2xkZXN0T2Zmc2V0IC0gKG9sZGVzdE9mZnNldCAlCi0JCQkJCQkJCQkJICAoTVVMVElY QUNUX01FTUJFUlNfUEVSX1BBR0UgKiBTTFJVX1BBR0VTX1BFUl9TRUdNRU5UKSk7Ci0KLQkJ LyogYWx3YXlzIGxlYXZlIG9uZSBzZWdtZW50IGJlZm9yZSB0aGUgd3JhcGFyb3VuZCBwb2lu dCAqLwotCQlvZmZzZXRTdG9wTGltaXQgLT0gKE1VTFRJWEFDVF9NRU1CRVJTX1BFUl9QQUdF ICogU0xSVV9QQUdFU19QRVJfU0VHTUVOVCk7Ci0KLQkJaWYgKCFwcmV2T2xkZXN0T2Zmc2V0 S25vd24gJiYgIWlzX3N0YXJ0dXApCi0JCQllcmVwb3J0KExPRywKLQkJCQkJKGVycm1zZygi TXVsdGlYYWN0IG1lbWJlciB3cmFwYXJvdW5kIHByb3RlY3Rpb25zIGFyZSBub3cgZW5hYmxl ZCIpKSk7Ci0KLQkJZXJlcG9ydChERUJVRzEsCi0JCQkJKGVycm1zZ19pbnRlcm5hbCgiTXVs dGlYYWN0IG1lbWJlciBzdG9wIGxpbWl0IGlzIG5vdyAldSBiYXNlZCBvbiBNdWx0aVhhY3Qg JXUiLAotCQkJCQkJCQkgb2Zmc2V0U3RvcExpbWl0LCBvbGRlc3RNdWx0aVhhY3RJZCkpKTsK LQl9Ci0JZWxzZSBpZiAocHJldk9sZGVzdE9mZnNldEtub3duKQorCWlmIChwcmV2T2xkZXN0 T2Zmc2V0S25vd24pCiAJewogCQkvKgogCQkgKiBJZiB3ZSBmYWlsZWQgdG8gZ2V0IHRoZSBv bGRlc3Qgb2Zmc2V0IHRoaXMgdGltZSwgYnV0IHdlIGhhdmUgYQogCQkgKiB2YWx1ZSBmcm9t IGEgcHJldmlvdXMgcGFzcyB0aHJvdWdoIHRoaXMgZnVuY3Rpb24sIHVzZSB0aGUgb2xkCi0J CSAqIHZhbHVlcyByYXRoZXIgdGhhbiBhdXRvbWF0aWNhbGx5IGZvcmNpbmcgYW4gZW1lcmdl bmN5IGF1dG92YWN1dW0KLQkJICogY3ljbGUgYWdhaW4uCisJCSAqIHZhbHVlcyByYXRoZXIg dGhhbiBhdXRvbWF0aWNhbGx5IGZvcmNpbmcgYW4gYXV0b3ZhY3V1bSBjeWNsZSBhZ2Fpbi4K IAkJICovCiAJCW9sZGVzdE9mZnNldCA9IHByZXZPbGRlc3RPZmZzZXQ7CiAJCW9sZGVzdE9m ZnNldEtub3duID0gdHJ1ZTsKLQkJb2Zmc2V0U3RvcExpbWl0ID0gcHJldk9mZnNldFN0b3BM aW1pdDsKIAl9CiAKIAkvKiBJbnN0YWxsIHRoZSBjb21wdXRlZCB2YWx1ZXMgKi8KIAlMV0xv Y2tBY3F1aXJlKE11bHRpWGFjdEdlbkxvY2ssIExXX0VYQ0xVU0lWRSk7CiAJTXVsdGlYYWN0 U3RhdGUtPm9sZGVzdE9mZnNldCA9IG9sZGVzdE9mZnNldDsKIAlNdWx0aVhhY3RTdGF0ZS0+ b2xkZXN0T2Zmc2V0S25vd24gPSBvbGRlc3RPZmZzZXRLbm93bjsKLQlNdWx0aVhhY3RTdGF0 ZS0+b2Zmc2V0U3RvcExpbWl0ID0gb2Zmc2V0U3RvcExpbWl0OwogCUxXTG9ja1JlbGVhc2Uo TXVsdGlYYWN0R2VuTG9jayk7CiAKIAkvKgotCSAqIERvIHdlIG5lZWQgYW4gZW1lcmdlbmN5 IGF1dG92YWN1dW0/CUlmIHdlJ3JlIG5vdCBzdXJlLCBhc3N1bWUgeWVzLgorCSAqIERvIHdl IG5lZWQgYXV0b3ZhY3V1bT8JSWYgd2UncmUgbm90IHN1cmUsIGFzc3VtZSB5ZXMuCiAJICov CiAJcmV0dXJuICFvbGRlc3RPZmZzZXRLbm93biB8fAotCQkobmV4dE9mZnNldCAtIG9sZGVz dE9mZnNldCA+IE1VTFRJWEFDVF9NRU1CRVJfU0FGRV9USFJFU0hPTEQpOwotfQotCi0vKgot ICogUmV0dXJuIHdoZXRoZXIgYWRkaW5nICJkaXN0YW5jZSIgdG8gInN0YXJ0IiB3b3VsZCBt b3ZlIHBhc3QgImJvdW5kYXJ5Ii4KLSAqCi0gKiBXZSB1c2UgdGhpcyB0byBkZXRlcm1pbmUg d2hldGhlciB0aGUgYWRkaXRpb24gaXMgIndyYXBwaW5nIGFyb3VuZCIgdGhlCi0gKiBib3Vu ZGFyeSBwb2ludCwgaGVuY2UgdGhlIG5hbWUuICBUaGUgcmVhc29uIHdlIGRvbid0IHdhbnQg dG8gdXNlIHRoZSByZWd1bGFyCi0gKiAyXjMxLW1vZHVsbyBhcml0aG1ldGljIGhlcmUgaXMg dGhhdCB3ZSB3YW50IHRvIGJlIGFibGUgdG8gdXNlIHRoZSB3aG9sZSBvZgotICogdGhlIDJe MzItMSBzcGFjZSBoZXJlLCBhbGxvd2luZyBmb3IgbW9yZSBtdWx0aXhhY3RzIHRoYW4gd291 bGQgZml0Ci0gKiBvdGhlcndpc2UuCi0gKi8KLXN0YXRpYyBib29sCi1NdWx0aVhhY3RPZmZz ZXRXb3VsZFdyYXAoTXVsdGlYYWN0T2Zmc2V0IGJvdW5kYXJ5LCBNdWx0aVhhY3RPZmZzZXQg c3RhcnQsCi0JCQkJCQkgdWludDMyIGRpc3RhbmNlKQotewotCU11bHRpWGFjdE9mZnNldCBm aW5pc2g7Ci0KLQkvKgotCSAqIE5vdGUgdGhhdCBvZmZzZXQgbnVtYmVyIDAgaXMgbm90IHVz ZWQgKHNlZSBHZXRNdWx0aVhhY3RJZE1lbWJlcnMpLCBzbwotCSAqIGlmIHRoZSBhZGRpdGlv biB3cmFwcyBhcm91bmQgdGhlIFVJTlRfTUFYIGJvdW5kYXJ5LCBza2lwIHRoYXQgdmFsdWUu Ci0JICovCi0JZmluaXNoID0gc3RhcnQgKyBkaXN0YW5jZTsKLQlpZiAoZmluaXNoIDwgc3Rh cnQpCi0JCWZpbmlzaCsrOwotCi0JLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCSAqIFdoZW4gdGhl IGJvdW5kYXJ5IGlzIG51bWVyaWNhbGx5IGdyZWF0ZXIgdGhhbiB0aGUgc3RhcnRpbmcgcG9p bnQsIGFueQotCSAqIHZhbHVlIG51bWVyaWNhbGx5IGJldHdlZW4gdGhlIHR3byBpcyBub3Qg d3JhcHBlZDoKLQkgKgotCSAqCTwtLS0tUy0tLS1CLS0tLT4KLQkgKglbLS0tKQkJCSA9IEYg d3JhcHBlZCBwYXN0IEIgKGFuZCBVSU5UX01BWCkKLQkgKgkJIFstLS0pCQkgPSBGIG5vdCB3 cmFwcGVkCi0JICoJCQkgIFstLS0tXSA9IEYgd3JhcHBlZCBwYXN0IEIKLQkgKgotCSAqIFdo ZW4gdGhlIGJvdW5kYXJ5IGlzIG51bWVyaWNhbGx5IGxlc3MgdGhhbiB0aGUgc3RhcnRpbmcg cG9pbnQgKGkuZS4gdGhlCi0JICogVUlOVF9NQVggd3JhcGFyb3VuZCBvY2N1cnMgc29tZXdo ZXJlIGluIGJldHdlZW4pIHRoZW4gYWxsIHZhbHVlcyBpbgotCSAqIGJldHdlZW4gYXJlIHdy YXBwZWQ6Ci0JICoKLQkgKgk8LS0tLUItLS0tUy0tLS0+Ci0JICoJWy0tLSkJCQkgPSBGIG5v dCB3cmFwcGVkIHBhc3QgQiAoYnV0IHdyYXBwZWQgcGFzdCBVSU5UX01BWCkKLQkgKgkJIFst LS0pCQkgPSBGIHdyYXBwZWQgcGFzdCBCIChhbmQgVUlOVF9NQVgpCi0JICoJCQkgIFstLS0t XSA9IEYgbm90IHdyYXBwZWQKLQkgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JICovCi0JaWYgKHN0 YXJ0IDwgYm91bmRhcnkpCi0JCXJldHVybiBmaW5pc2ggPj0gYm91bmRhcnkgfHwgZmluaXNo IDwgc3RhcnQ7Ci0JZWxzZQotCQlyZXR1cm4gZmluaXNoID49IGJvdW5kYXJ5ICYmIGZpbmlz aCA8IHN0YXJ0OworCQkobmV4dE9mZnNldCAtIG9sZGVzdE9mZnNldCA+IE1VTFRJWEFDVF9N RU1CRVJfQVVUT1ZBQ19USFJFU0hPTEQpOwogfQogCiAvKgpAQCAtMjg0Niw2ICsyNjQ5LDcg QEAgZmluZF9tdWx0aXhhY3Rfc3RhcnQoTXVsdGlYYWN0SWQgbXVsdGksIE11bHRpWGFjdE9m ZnNldCAqcmVzdWx0KQogCW9mZnB0ciA9IChNdWx0aVhhY3RPZmZzZXQgKikgTXVsdGlYYWN0 T2Zmc2V0Q3RsLT5zaGFyZWQtPnBhZ2VfYnVmZmVyW3Nsb3Rub107CiAJb2ZmcHRyICs9IGVu dHJ5bm87CiAJb2Zmc2V0ID0gKm9mZnB0cjsKKwogCUxXTG9ja1JlbGVhc2UoU2ltcGxlTHJ1 R2V0QmFua0xvY2soTXVsdGlYYWN0T2Zmc2V0Q3RsLCBwYWdlbm8pKTsKIAogCSpyZXN1bHQg PSBvZmZzZXQ7CkBAIC0yODkzLDczICsyNjk3LDYgQEAgR2V0TXVsdGlYYWN0SW5mbyh1aW50 MzIgKm11bHRpeGFjdHMsIE11bHRpWGFjdE9mZnNldCAqbWVtYmVycywKIAlyZXR1cm4gdHJ1 ZTsKIH0KIAotLyoKLSAqIE11bHRpeGFjdCBtZW1iZXJzIGNhbiBiZSByZW1vdmVkIG9uY2Ug dGhlIG11bHRpeGFjdHMgdGhhdCByZWZlciB0byB0aGVtCi0gKiBhcmUgb2xkZXIgdGhhbiBl dmVyeSBkYXRtaW5teGlkLiAgYXV0b3ZhY3V1bV9tdWx0aXhhY3RfZnJlZXplX21heF9hZ2Ug YW5kCi0gKiB2YWN1dW1fbXVsdGl4YWN0X2ZyZWV6ZV90YWJsZV9hZ2Ugd29yayB0b2dldGhl ciB0byBtYWtlIHN1cmUgd2UgbmV2ZXIgaGF2ZQotICogdG9vIG1hbnkgbXVsdGl4YWN0czsg d2UgaG9wZSB0aGF0LCBhdCBsZWFzdCB1bmRlciBub3JtYWwgY2lyY3Vtc3RhbmNlcywKLSAq IHRoaXMgd2lsbCBhbHNvIGJlIHN1ZmZpY2llbnQgdG8ga2VlcCB1cyBmcm9tIHVzaW5nIHRv byBtYW55IG9mZnNldHMuCi0gKiBIb3dldmVyLCBpZiB0aGUgYXZlcmFnZSBtdWx0aXhhY3Qg aGFzIG1hbnkgbWVtYmVycywgd2UgbWlnaHQgZXhoYXVzdCB0aGUKLSAqIG1lbWJlcnMgc3Bh Y2Ugd2hpbGUgc3RpbGwgdXNpbmcgZmV3IGVub3VnaCBtZW1iZXJzIHRoYXQgdGhlc2UgbGlt aXRzIGZhaWwKLSAqIHRvIHRyaWdnZXIgcmVsbWlubXhpZCBhZHZhbmNlbWVudCBieSBWQUNV VU0uICBBdCB0aGF0IHBvaW50LCB3ZSdkIGhhdmUgbm8KLSAqIGNob2ljZSBidXQgdG8gc3Rh cnQgZmFpbGluZyBtdWx0aXhhY3QtY3JlYXRpbmcgb3BlcmF0aW9ucyB3aXRoIGFuIGVycm9y LgotICoKLSAqIFRvIHByZXZlbnQgdGhhdCwgaWYgbW9yZSB0aGFuIGEgdGhyZXNob2xkIHBv cnRpb24gb2YgdGhlIG1lbWJlcnMgc3BhY2UgaXMKLSAqIHVzZWQsIHdlIGVmZmVjdGl2ZWx5 IHJlZHVjZSBhdXRvdmFjdXVtX211bHRpeGFjdF9mcmVlemVfbWF4X2FnZSBhbmQKLSAqIHRv IGEgdmFsdWUganVzdCBsZXNzIHRoYW4gdGhlIG51bWJlciBvZiBtdWx0aXhhY3RzIGluIHVz ZS4gIFdlIGhvcGUgdGhhdAotICogdGhpcyB3aWxsIHF1aWNrbHkgdHJpZ2dlciBhdXRvdmFj dXVtaW5nIG9uIHRoZSB0YWJsZSBvciB0YWJsZXMgd2l0aCB0aGUKLSAqIG9sZGVzdCByZWxt aW5teGlkLCB0aHVzIGFsbG93aW5nIGRhdG1pbm14aWQgdmFsdWVzIHRvIGFkdmFuY2UgYW5k IHJlbW92aW5nCi0gKiBzb21lIG1lbWJlcnMuCi0gKgotICogQXMgdGhlIGZyYWN0aW9uIG9m IHRoZSBtZW1iZXIgc3BhY2UgY3VycmVudGx5IGluIHVzZSBncm93cywgd2UgYmVjb21lCi0g KiBtb3JlIGFnZ3Jlc3NpdmUgaW4gY2xhbXBpbmcgdGhpcyB2YWx1ZS4gIFRoYXQgbm90IG9u bHkgY2F1c2VzIGF1dG92YWN1dW0KLSAqIHRvIHJhbXAgdXAsIGJ1dCBhbHNvIG1ha2VzIGFu eSBtYW51YWwgdmFjdXVtcyB0aGUgdXNlciBpc3N1ZXMgbW9yZQotICogYWdncmVzc2l2ZS4g IFRoaXMgaGFwcGVucyBiZWNhdXNlIHZhY3V1bV9nZXRfY3V0b2ZmcygpIHdpbGwgY2xhbXAg dGhlCi0gKiBmcmVlemUgdGFibGUgYW5kIHRoZSBtaW5pbXVtIGZyZWV6ZSBhZ2UgY3V0b2Zm cyBiYXNlZCBvbiB0aGUgZWZmZWN0aXZlCi0gKiBhdXRvdmFjdXVtX211bHRpeGFjdF9mcmVl emVfbWF4X2FnZSB0aGlzIGZ1bmN0aW9uIHJldHVybnMuICBJbiB0aGUgd29yc3QKLSAqIGNh c2UsIHdlJ2xsIGNsYWltIHRoZSBmcmVlemVfbWF4X2FnZSB0byB6ZXJvLCBhbmQgZXZlcnkg dmFjdXVtIG9mIGFueQotICogdGFibGUgd2lsbCBmcmVlemUgZXZlcnkgbXVsdGl4YWN0Lgot ICovCi1pbnQKLU11bHRpWGFjdE1lbWJlckZyZWV6ZVRocmVzaG9sZCh2b2lkKQotewotCU11 bHRpWGFjdE9mZnNldCBtZW1iZXJzOwotCXVpbnQzMgkJbXVsdGl4YWN0czsKLQl1aW50MzIJ CXZpY3RpbV9tdWx0aXhhY3RzOwotCWRvdWJsZQkJZnJhY3Rpb247Ci0JaW50CQkJcmVzdWx0 OwotCU11bHRpWGFjdElkIG9sZGVzdE11bHRpWGFjdElkOwotCU11bHRpWGFjdE9mZnNldCBv bGRlc3RPZmZzZXQ7Ci0KLQkvKiBJZiB3ZSBjYW4ndCBkZXRlcm1pbmUgbWVtYmVyIHNwYWNl IHV0aWxpemF0aW9uLCBhc3N1bWUgdGhlIHdvcnN0LiAqLwotCWlmICghR2V0TXVsdGlYYWN0 SW5mbygmbXVsdGl4YWN0cywgJm1lbWJlcnMsICZvbGRlc3RNdWx0aVhhY3RJZCwgJm9sZGVz dE9mZnNldCkpCi0JCXJldHVybiAwOwotCi0JLyogSWYgbWVtYmVyIHNwYWNlIHV0aWxpemF0 aW9uIGlzIGxvdywgbm8gc3BlY2lhbCBhY3Rpb24gaXMgcmVxdWlyZWQuICovCi0JaWYgKG1l bWJlcnMgPD0gTVVMVElYQUNUX01FTUJFUl9TQUZFX1RIUkVTSE9MRCkKLQkJcmV0dXJuIGF1 dG92YWN1dW1fbXVsdGl4YWN0X2ZyZWV6ZV9tYXhfYWdlOwotCi0JLyoKLQkgKiBDb21wdXRl IGEgdGFyZ2V0IGZvciByZWxtaW5teGlkIGFkdmFuY2VtZW50LiAgVGhlIG51bWJlciBvZiBt dWx0aXhhY3RzCi0JICogd2UgdHJ5IHRvIGVsaW1pbmF0ZSBmcm9tIHRoZSBzeXN0ZW0gaXMg YmFzZWQgb24gaG93IGZhciB3ZSBhcmUgcGFzdAotCSAqIE1VTFRJWEFDVF9NRU1CRVJfU0FG RV9USFJFU0hPTEQuCi0JICovCi0JZnJhY3Rpb24gPSAoZG91YmxlKSAobWVtYmVycyAtIE1V TFRJWEFDVF9NRU1CRVJfU0FGRV9USFJFU0hPTEQpIC8KLQkJKE1VTFRJWEFDVF9NRU1CRVJf REFOR0VSX1RIUkVTSE9MRCAtIE1VTFRJWEFDVF9NRU1CRVJfU0FGRV9USFJFU0hPTEQpOwot CXZpY3RpbV9tdWx0aXhhY3RzID0gbXVsdGl4YWN0cyAqIGZyYWN0aW9uOwotCi0JLyogZnJh Y3Rpb24gY291bGQgYmUgPiAxLjAsIGJ1dCBsb3dlc3QgcG9zc2libGUgZnJlZXplIGFnZSBp cyB6ZXJvICovCi0JaWYgKHZpY3RpbV9tdWx0aXhhY3RzID4gbXVsdGl4YWN0cykKLQkJcmV0 dXJuIDA7Ci0JcmVzdWx0ID0gbXVsdGl4YWN0cyAtIHZpY3RpbV9tdWx0aXhhY3RzOwotCi0J LyoKLQkgKiBDbGFtcCB0byBhdXRvdmFjdXVtX211bHRpeGFjdF9mcmVlemVfbWF4X2FnZSwg c28gdGhhdCB3ZSBuZXZlciBtYWtlCi0JICogYXV0b3ZhY3V1bSBsZXNzIGFnZ3Jlc3NpdmUg dGhhbiBpdCB3b3VsZCBvdGhlcndpc2UgYmUuCi0JICovCi0JcmV0dXJuIE1pbihyZXN1bHQs IGF1dG92YWN1dW1fbXVsdGl4YWN0X2ZyZWV6ZV9tYXhfYWdlKTsKLX0KLQogdHlwZWRlZiBz dHJ1Y3QgbXh0cnVuY2luZm8KIHsKIAlpbnQ2NAkJZWFybGllc3RFeGlzdGluZ1BhZ2U7CkBA IC0yOTg2LDM2ICsyNzIzLDEyIEBAIFNscnVTY2FuRGlyQ2JGaW5kRWFybGllc3QoU2xydUN0 bCBjdGwsIGNoYXIgKmZpbGVuYW1lLCBpbnQ2NCBzZWdwYWdlLCB2b2lkICpkYXRhCiAKIC8q CiAgKiBEZWxldGUgbWVtYmVycyBzZWdtZW50cyBbb2xkZXN0LCBuZXdPbGRlc3QpCi0gKgot ICogVGhlIG1lbWJlcnMgU0xSVSBjYW4sIGluIGNvbnRyYXN0IHRvIHRoZSBvZmZzZXRzIG9u ZSwgYmUgZmlsbGVkIHRvIGFsbW9zdAotICogdGhlIGZ1bGwgcmFuZ2UgYXQgb25jZS4gVGhp cyBtZWFucyBTaW1wbGVMcnVUcnVuY2F0ZSgpIGNhbid0IHRyaXZpYWxseSBiZQotICogdXNl ZCAtIGluc3RlYWQgdGhlIHRvLWJlLWRlbGV0ZWQgcmFuZ2UgaXMgY29tcHV0ZWQgdXNpbmcg dGhlIG9mZnNldHMKLSAqIFNMUlUuIEMuZi4gVHJ1bmNhdGVNdWx0aVhhY3QoKS4KICAqLwog c3RhdGljIHZvaWQKIFBlcmZvcm1NZW1iZXJzVHJ1bmNhdGlvbihNdWx0aVhhY3RPZmZzZXQg b2xkZXN0T2Zmc2V0LCBNdWx0aVhhY3RPZmZzZXQgbmV3T2xkZXN0T2Zmc2V0KQogewotCWNv bnN0IGludDY0IG1heHNlZ21lbnQgPSBNWE9mZnNldFRvTWVtYmVyU2VnbWVudChNYXhNdWx0 aVhhY3RPZmZzZXQpOwotCWludDY0CQlzdGFydHNlZ21lbnQgPSBNWE9mZnNldFRvTWVtYmVy U2VnbWVudChvbGRlc3RPZmZzZXQpOwotCWludDY0CQllbmRzZWdtZW50ID0gTVhPZmZzZXRU b01lbWJlclNlZ21lbnQobmV3T2xkZXN0T2Zmc2V0KTsKLQlpbnQ2NAkJc2VnbWVudCA9IHN0 YXJ0c2VnbWVudDsKLQotCS8qCi0JICogRGVsZXRlIGFsbCB0aGUgc2VnbWVudHMgYnV0IHRo ZSBsYXN0IG9uZS4gVGhlIGxhc3Qgc2VnbWVudCBjYW4gc3RpbGwKLQkgKiBjb250YWluLCBw b3NzaWJseSBwYXJ0aWFsbHksIHZhbGlkIGRhdGEuCi0JICovCi0Jd2hpbGUgKHNlZ21lbnQg IT0gZW5kc2VnbWVudCkKLQl7Ci0JCWVsb2coREVCVUcyLCAidHJ1bmNhdGluZyBtdWx0aXhh Y3QgbWVtYmVycyBzZWdtZW50ICUiIFBSSXg2NCwKLQkJCSBzZWdtZW50KTsKLQkJU2xydURl bGV0ZVNlZ21lbnQoTXVsdGlYYWN0TWVtYmVyQ3RsLCBzZWdtZW50KTsKLQotCQkvKiBtb3Zl IHRvIG5leHQgc2VnbWVudCwgaGFuZGxpbmcgd3JhcGFyb3VuZCBjb3JyZWN0bHkgKi8KLQkJ aWYgKHNlZ21lbnQgPT0gbWF4c2VnbWVudCkKLQkJCXNlZ21lbnQgPSAwOwotCQllbHNlCi0J CQlzZWdtZW50ICs9IDE7Ci0JfQorCVNpbXBsZUxydVRydW5jYXRlKE11bHRpWGFjdE1lbWJl ckN0bCwKKwkJCQkJICBNWE9mZnNldFRvTWVtYmVyUGFnZShuZXdPbGRlc3RPZmZzZXQpKTsK IH0KIAogLyoKQEAgLTMxNTksNyArMjg3Miw3IEBAIFRydW5jYXRlTXVsdGlYYWN0KE11bHRp WGFjdElkIG5ld09sZGVzdE11bHRpLCBPaWQgbmV3T2xkZXN0TXVsdGlEQikKIAogCWVsb2co REVCVUcxLCAicGVyZm9ybWluZyBtdWx0aXhhY3QgdHJ1bmNhdGlvbjogIgogCQkgIm9mZnNl dHMgWyV1LCAldSksIG9mZnNldHMgc2VnbWVudHMgWyUiIFBSSXg2NCAiLCAlIiBQUkl4NjQg IiksICIKLQkJICJtZW1iZXJzIFsldSwgJXUpLCBtZW1iZXJzIHNlZ21lbnRzIFslIiBQUkl4 NjQgIiwgJSIgUFJJeDY0ICIpIiwKKwkJICJtZW1iZXJzIFslIiBQUkl1NjQgIiwgJSIgUFJJ dTY0ICIpLCBtZW1iZXJzIHNlZ21lbnRzIFslIiBQUkl4NjQgIiwgJSIgUFJJeDY0ICIpIiwK IAkJIG9sZGVzdE11bHRpLCBuZXdPbGRlc3RNdWx0aSwKIAkJIE11bHRpWGFjdElkVG9PZmZz ZXRTZWdtZW50KG9sZGVzdE11bHRpKSwKIAkJIE11bHRpWGFjdElkVG9PZmZzZXRTZWdtZW50 KG5ld09sZGVzdE11bHRpKSwKQEAgLTMyMzksMjAgKzI5NTIsMTMgQEAgTXVsdGlYYWN0T2Zm c2V0UGFnZVByZWNlZGVzKGludDY0IHBhZ2UxLCBpbnQ2NCBwYWdlMikKIAogLyoKICAqIERl Y2lkZSB3aGV0aGVyIGEgTXVsdGlYYWN0TWVtYmVyIHBhZ2UgbnVtYmVyIGlzICJvbGRlciIg Zm9yIHRydW5jYXRpb24KLSAqIHB1cnBvc2VzLiAgVGhlcmUgaXMgbm8gImludmFsaWQgb2Zm c2V0IG51bWJlciIgc28gdXNlIHRoZSBudW1iZXJzIHZlcmJhdGltLgorICogcHVycG9zZXMu ICBUaGVyZSBpcyBubyAiaW52YWxpZCBvZmZzZXQgbnVtYmVyIiBhbmQgbWVtYmVycyBuZXZl ciB3cmFwCisgKiBhcm91bmQsIHNvIHVzZSB0aGUgbnVtYmVycyB2ZXJiYXRpbS4KICAqLwog c3RhdGljIGJvb2wKIE11bHRpWGFjdE1lbWJlclBhZ2VQcmVjZWRlcyhpbnQ2NCBwYWdlMSwg aW50NjQgcGFnZTIpCiB7Ci0JTXVsdGlYYWN0T2Zmc2V0IG9mZnNldDE7Ci0JTXVsdGlYYWN0 T2Zmc2V0IG9mZnNldDI7Ci0KLQlvZmZzZXQxID0gKChNdWx0aVhhY3RPZmZzZXQpIHBhZ2Ux KSAqIE1VTFRJWEFDVF9NRU1CRVJTX1BFUl9QQUdFOwotCW9mZnNldDIgPSAoKE11bHRpWGFj dE9mZnNldCkgcGFnZTIpICogTVVMVElYQUNUX01FTUJFUlNfUEVSX1BBR0U7Ci0KLQlyZXR1 cm4gKE11bHRpWGFjdE9mZnNldFByZWNlZGVzKG9mZnNldDEsIG9mZnNldDIpICYmCi0JCQlN dWx0aVhhY3RPZmZzZXRQcmVjZWRlcyhvZmZzZXQxLAotCQkJCQkJCQkJb2Zmc2V0MiArIE1V TFRJWEFDVF9NRU1CRVJTX1BFUl9QQUdFIC0gMSkpOworCXJldHVybiBwYWdlMSA8IHBhZ2Uy OwogfQogCiAvKgpAQCAtMzI5MCw3ICsyOTk2LDcgQEAgTXVsdGlYYWN0SWRQcmVjZWRlc09y RXF1YWxzKE11bHRpWGFjdElkIG11bHRpMSwgTXVsdGlYYWN0SWQgbXVsdGkyKQogc3RhdGlj IGJvb2wKIE11bHRpWGFjdE9mZnNldFByZWNlZGVzKE11bHRpWGFjdE9mZnNldCBvZmZzZXQx LCBNdWx0aVhhY3RPZmZzZXQgb2Zmc2V0MikKIHsKLQlpbnQzMgkJZGlmZiA9IChpbnQzMikg KG9mZnNldDEgLSBvZmZzZXQyKTsKKwlpbnQ2NAkJZGlmZiA9IChpbnQ2NCkgKG9mZnNldDEg LSBvZmZzZXQyKTsKIAogCXJldHVybiAoZGlmZiA8IDApOwogfQpAQCAtMzM4Nyw3ICszMDkz LDcgQEAgbXVsdGl4YWN0X3JlZG8oWExvZ1JlYWRlclN0YXRlICpyZWNvcmQpCiAKIAkJZWxv ZyhERUJVRzEsICJyZXBsYXlpbmcgbXVsdGl4YWN0IHRydW5jYXRpb246ICIKIAkJCSAib2Zm c2V0cyBbJXUsICV1KSwgb2Zmc2V0cyBzZWdtZW50cyBbJSIgUFJJeDY0ICIsICUiIFBSSXg2 NCAiKSwgIgotCQkJICJtZW1iZXJzIFsldSwgJXUpLCBtZW1iZXJzIHNlZ21lbnRzIFslIiBQ Ukl4NjQgIiwgJSIgUFJJeDY0ICIpIiwKKwkJCSAibWVtYmVycyBbJSIgUFJJdTY0ICIsICUi IFBSSXU2NCAiKSwgbWVtYmVycyBzZWdtZW50cyBbJSIgUFJJeDY0ICIsICUiIFBSSXg2NCAi KSIsCiAJCQkgeGxyZWMuc3RhcnRUcnVuY09mZiwgeGxyZWMuZW5kVHJ1bmNPZmYsCiAJCQkg TXVsdGlYYWN0SWRUb09mZnNldFNlZ21lbnQoeGxyZWMuc3RhcnRUcnVuY09mZiksCiAJCQkg TXVsdGlYYWN0SWRUb09mZnNldFNlZ21lbnQoeGxyZWMuZW5kVHJ1bmNPZmYpLApkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZy5jIGIvc3JjL2JhY2tlbmQv YWNjZXNzL3RyYW5zYW0veGxvZy5jCmluZGV4IDdjOTU5MDUxZTExLi4yYWRlMGI0YTA0MiAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZy5jCisrKyBiL3Ny Yy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cuYwpAQCAtNTEyOCw3ICs1MTI4LDcgQEAg Qm9vdFN0cmFwWExPRyh1aW50MzIgZGF0YV9jaGVja3N1bV92ZXJzaW9uKQogCQlGdWxsVHJh bnNhY3Rpb25JZEZyb21FcG9jaEFuZFhpZCgwLCBGaXJzdE5vcm1hbFRyYW5zYWN0aW9uSWQp OwogCWNoZWNrUG9pbnQubmV4dE9pZCA9IEZpcnN0R2VuYmtpT2JqZWN0SWQ7CiAJY2hlY2tQ b2ludC5uZXh0TXVsdGkgPSBGaXJzdE11bHRpWGFjdElkOwotCWNoZWNrUG9pbnQubmV4dE11 bHRpT2Zmc2V0ID0gMDsKKwljaGVja1BvaW50Lm5leHRNdWx0aU9mZnNldCA9IDE7CiAJY2hl Y2tQb2ludC5vbGRlc3RYaWQgPSBGaXJzdE5vcm1hbFRyYW5zYWN0aW9uSWQ7CiAJY2hlY2tQ b2ludC5vbGRlc3RYaWREQiA9IFRlbXBsYXRlMURiT2lkOwogCWNoZWNrUG9pbnQub2xkZXN0 TXVsdGkgPSBGaXJzdE11bHRpWGFjdElkOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNj ZXNzL3RyYW5zYW0veGxvZ3JlY292ZXJ5LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNh bS94bG9ncmVjb3ZlcnkuYwppbmRleCA1NTBkZTZlNGE1OS4uNjZjMjM2NGFhOWIgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2dyZWNvdmVyeS5jCisrKyBi L3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2dyZWNvdmVyeS5jCkBAIC04ODYsNyAr ODg2LDcgQEAgSW5pdFdhbFJlY292ZXJ5KENvbnRyb2xGaWxlRGF0YSAqQ29udHJvbEZpbGUs IGJvb2wgKndhc1NodXRkb3duX3B0ciwKIAkJCQkJCQkgVTY0RnJvbUZ1bGxUcmFuc2FjdGlv bklkKGNoZWNrUG9pbnQubmV4dFhpZCksCiAJCQkJCQkJIGNoZWNrUG9pbnQubmV4dE9pZCkp KTsKIAllcmVwb3J0KERFQlVHMSwKLQkJCShlcnJtc2dfaW50ZXJuYWwoIm5leHQgTXVsdGlY YWN0SWQ6ICV1OyBuZXh0IE11bHRpWGFjdE9mZnNldDogJXUiLAorCQkJKGVycm1zZ19pbnRl cm5hbCgibmV4dCBNdWx0aVhhY3RJZDogJXU7IG5leHQgTXVsdGlYYWN0T2Zmc2V0OiAlIiBQ Ukl1NjQsCiAJCQkJCQkJIGNoZWNrUG9pbnQubmV4dE11bHRpLCBjaGVja1BvaW50Lm5leHRN dWx0aU9mZnNldCkpKTsKIAllcmVwb3J0KERFQlVHMSwKIAkJCShlcnJtc2dfaW50ZXJuYWwo Im9sZGVzdCB1bmZyb3plbiB0cmFuc2FjdGlvbiBJRDogJXUsIGluIGRhdGFiYXNlICV1IiwK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3ZhY3V1bS5jIGIvc3JjL2JhY2tl bmQvY29tbWFuZHMvdmFjdXVtLmMKaW5kZXggZWQwM2UzYmQ1MGQuLjI1OWVmNjBiZDMxIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy92YWN1dW0uYworKysgYi9zcmMvYmFj a2VuZC9jb21tYW5kcy92YWN1dW0uYwpAQCAtMTE0Nyw3ICsxMTQ3LDcgQEAgdmFjdXVtX2dl dF9jdXRvZmZzKFJlbGF0aW9uIHJlbCwgY29uc3QgVmFjdXVtUGFyYW1zIHBhcmFtcywKIAkg KiBub3JtYWxseSBhdXRvdmFjdXVtX211bHRpeGFjdF9mcmVlemVfbWF4X2FnZSwgYnV0IG1h eSBiZSBsZXNzIGlmIHdlIGFyZQogCSAqIHNob3J0IG9mIG11bHRpeGFjdCBtZW1iZXIgc3Bh Y2UuCiAJICovCi0JZWZmZWN0aXZlX211bHRpeGFjdF9mcmVlemVfbWF4X2FnZSA9IE11bHRp WGFjdE1lbWJlckZyZWV6ZVRocmVzaG9sZCgpOworCWVmZmVjdGl2ZV9tdWx0aXhhY3RfZnJl ZXplX21heF9hZ2UgPSBhdXRvdmFjdXVtX211bHRpeGFjdF9mcmVlemVfbWF4X2FnZTsKIAog CS8qCiAJICogQWxtb3N0IHJlYWR5IHRvIHNldCBmcmVlemUgb3V0cHV0IHBhcmFtZXRlcnM7 IGNoZWNrIGlmIE9sZGVzdFhtaW4gb3IKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Bvc3Rt YXN0ZXIvYXV0b3ZhY3V1bS5jIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9hdXRvdmFjdXVt LmMKaW5kZXggZWQxOWM3NGJiMTkuLjM0OTA5ZWU1NGZmIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9wb3N0bWFzdGVyL2F1dG92YWN1dW0uYworKysgYi9zcmMvYmFja2VuZC9wb3N0bWFz dGVyL2F1dG92YWN1dW0uYwpAQCAtMTE1MSw3ICsxMTUxLDcgQEAgZG9fc3RhcnRfd29ya2Vy KHZvaWQpCiAKIAkvKiBBbHNvIGRldGVybWluZSB0aGUgb2xkZXN0IGRhdG1pbm14aWQgd2Ug d2lsbCBjb25zaWRlci4gKi8KIAlyZWNlbnRNdWx0aSA9IFJlYWROZXh0TXVsdGlYYWN0SWQo KTsKLQltdWx0aUZvcmNlTGltaXQgPSByZWNlbnRNdWx0aSAtIE11bHRpWGFjdE1lbWJlckZy ZWV6ZVRocmVzaG9sZCgpOworCW11bHRpRm9yY2VMaW1pdCA9IHJlY2VudE11bHRpIC0gYXV0 b3ZhY3V1bV9tdWx0aXhhY3RfZnJlZXplX21heF9hZ2U7CiAJaWYgKG11bHRpRm9yY2VMaW1p dCA8IEZpcnN0TXVsdGlYYWN0SWQpCiAJCW11bHRpRm9yY2VMaW1pdCAtPSBGaXJzdE11bHRp WGFjdElkOwogCkBAIC0xOTM5LDcgKzE5MzksNyBAQCBkb19hdXRvdmFjdXVtKHZvaWQpCiAJ ICogbm9ybWFsbHkgYXV0b3ZhY3V1bV9tdWx0aXhhY3RfZnJlZXplX21heF9hZ2UsIGJ1dCBt YXkgYmUgbGVzcyBpZiB3ZSBhcmUKIAkgKiBzaG9ydCBvZiBtdWx0aXhhY3QgbWVtYmVyIHNw YWNlLgogCSAqLwotCWVmZmVjdGl2ZV9tdWx0aXhhY3RfZnJlZXplX21heF9hZ2UgPSBNdWx0 aVhhY3RNZW1iZXJGcmVlemVUaHJlc2hvbGQoKTsKKwllZmZlY3RpdmVfbXVsdGl4YWN0X2Zy ZWV6ZV9tYXhfYWdlID0gYXV0b3ZhY3V1bV9tdWx0aXhhY3RfZnJlZXplX21heF9hZ2U7CiAK IAkvKgogCSAqIEZpbmQgdGhlIHBnX2RhdGFiYXNlIGVudHJ5IGFuZCBzZWxlY3QgdGhlIGRl ZmF1bHQgZnJlZXplIGFnZXMuIFdlIHVzZQpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19jb250 cm9sZGF0YS9wZ19jb250cm9sZGF0YS5jIGIvc3JjL2Jpbi9wZ19jb250cm9sZGF0YS9wZ19j b250cm9sZGF0YS5jCmluZGV4IDEwZGUwNThjZTkxLi41Mjk1MTA4YWRlMyAxMDA2NDQKLS0t IGEvc3JjL2Jpbi9wZ19jb250cm9sZGF0YS9wZ19jb250cm9sZGF0YS5jCisrKyBiL3NyYy9i aW4vcGdfY29udHJvbGRhdGEvcGdfY29udHJvbGRhdGEuYwpAQCAtMjY0LDcgKzI2NCw3IEBA IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAkJICAgQ29udHJvbEZpbGUtPmNoZWNr UG9pbnRDb3B5Lm5leHRPaWQpOwogCXByaW50ZihfKCJMYXRlc3QgY2hlY2twb2ludCdzIE5l eHRNdWx0aVhhY3RJZDogICV1XG4iKSwKIAkJICAgQ29udHJvbEZpbGUtPmNoZWNrUG9pbnRD b3B5Lm5leHRNdWx0aSk7Ci0JcHJpbnRmKF8oIkxhdGVzdCBjaGVja3BvaW50J3MgTmV4dE11 bHRpT2Zmc2V0OiAgJXVcbiIpLAorCXByaW50ZihfKCJMYXRlc3QgY2hlY2twb2ludCdzIE5l eHRNdWx0aU9mZnNldDogICUiIFBSSXU2NCAiXG4iKSwKIAkJICAgQ29udHJvbEZpbGUtPmNo ZWNrUG9pbnRDb3B5Lm5leHRNdWx0aU9mZnNldCk7CiAJcHJpbnRmKF8oIkxhdGVzdCBjaGVj a3BvaW50J3Mgb2xkZXN0WElEOiAgICAgICAgJXVcbiIpLAogCQkgICBDb250cm9sRmlsZS0+ Y2hlY2tQb2ludENvcHkub2xkZXN0WGlkKTsKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfcmVz ZXR3YWwvcGdfcmVzZXR3YWwuYyBiL3NyYy9iaW4vcGdfcmVzZXR3YWwvcGdfcmVzZXR3YWwu YwppbmRleCBhODlkNzJmYzVjZi4uNGU1ZWVjZWQ4OWQgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4v cGdfcmVzZXR3YWwvcGdfcmVzZXR3YWwuYworKysgYi9zcmMvYmluL3BnX3Jlc2V0d2FsL3Bn X3Jlc2V0d2FsLmMKQEAgLTI2Nyw3ICsyNjcsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICph cmd2W10pCiAKIAkJCWNhc2UgJ08nOgogCQkJCWVycm5vID0gMDsKLQkJCQlzZXRfbXhvZmYg PSBzdHJ0b3VsKG9wdGFyZywgJmVuZHB0ciwgMCk7CisJCQkJc2V0X214b2ZmID0gc3RydG91 NjQob3B0YXJnLCAmZW5kcHRyLCAwKTsKIAkJCQlpZiAoZW5kcHRyID09IG9wdGFyZyB8fCAq ZW5kcHRyICE9ICdcMCcgfHwgZXJybm8gIT0gMCkKIAkJCQl7CiAJCQkJCXBnX2xvZ19lcnJv cigiaW52YWxpZCBhcmd1bWVudCBmb3Igb3B0aW9uICVzIiwgIi1PIik7CkBAIC03NDMsNyAr NzQzLDcgQEAgUHJpbnRDb250cm9sVmFsdWVzKGJvb2wgZ3Vlc3NlZCkKIAkJICAgQ29udHJv bEZpbGUuY2hlY2tQb2ludENvcHkubmV4dE9pZCk7CiAJcHJpbnRmKF8oIkxhdGVzdCBjaGVj a3BvaW50J3MgTmV4dE11bHRpWGFjdElkOiAgJXVcbiIpLAogCQkgICBDb250cm9sRmlsZS5j aGVja1BvaW50Q29weS5uZXh0TXVsdGkpOwotCXByaW50ZihfKCJMYXRlc3QgY2hlY2twb2lu dCdzIE5leHRNdWx0aU9mZnNldDogICV1XG4iKSwKKwlwcmludGYoXygiTGF0ZXN0IGNoZWNr cG9pbnQncyBOZXh0TXVsdGlPZmZzZXQ6ICAlIiBQUkl1NjQgIlxuIiksCiAJCSAgIENvbnRy b2xGaWxlLmNoZWNrUG9pbnRDb3B5Lm5leHRNdWx0aU9mZnNldCk7CiAJcHJpbnRmKF8oIkxh dGVzdCBjaGVja3BvaW50J3Mgb2xkZXN0WElEOiAgICAgICAgJXVcbiIpLAogCQkgICBDb250 cm9sRmlsZS5jaGVja1BvaW50Q29weS5vbGRlc3RYaWQpOwpAQCAtODE3LDcgKzgxNyw3IEBA IFByaW50TmV3Q29udHJvbFZhbHVlcyh2b2lkKQogCiAJaWYgKHNldF9teG9mZiAhPSAtMSkK IAl7Ci0JCXByaW50ZihfKCJOZXh0TXVsdGlPZmZzZXQ6ICAgICAgICAgICAgICAgICAgICAg ICV1XG4iKSwKKwkJcHJpbnRmKF8oIk5leHRNdWx0aU9mZnNldDogICAgICAgICAgICAgICAg ICAgICAgJSIgUFJJdTY0ICJcbiIpLAogCQkJICAgQ29udHJvbEZpbGUuY2hlY2tQb2ludENv cHkubmV4dE11bHRpT2Zmc2V0KTsKIAl9CiAKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfcmVz ZXR3YWwvdC8wMDFfYmFzaWMucGwgYi9zcmMvYmluL3BnX3Jlc2V0d2FsL3QvMDAxX2Jhc2lj LnBsCmluZGV4IGQ2YmJiZDBjZWRhLi5jYzg5ZTA3NjRhZSAxMDA2NDQKLS0tIGEvc3JjL2Jp bi9wZ19yZXNldHdhbC90LzAwMV9iYXNpYy5wbAorKysgYi9zcmMvYmluL3BnX3Jlc2V0d2Fs L3QvMDAxX2Jhc2ljLnBsCkBAIC0yMTMsNyArMjEzLDcgQEAgcHVzaCBAY21kLAogICBzcHJp bnRmKCIlZCwlZCIsIGhleCgkZmlsZXNbMF0pID09IDAgPyAzIDogaGV4KCRmaWxlc1swXSks IGhleCgkZmlsZXNbLTFdKSk7CiAKIEBmaWxlcyA9IGdldF9zbHJ1X2ZpbGVzKCdwZ19tdWx0 aXhhY3Qvb2Zmc2V0cycpOwotJG11bHQgPSAzMiAqICRibGNrc3ogLyA0OworJG11bHQgPSAz MiAqICRibGNrc3ogLyA4OwogIyAtLW11bHRpeGFjdC1pZHMgYXJndW1lbnQgaXMgIm5ldyxv bGQiCiBwdXNoIEBjbWQsCiAgICctLW11bHRpeGFjdC1pZHMnID0+IHNwcmludGYoIiVkLCVk IiwKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9tdWx0aXhhY3QuaCBiL3NyYy9p bmNsdWRlL2FjY2Vzcy9tdWx0aXhhY3QuaAppbmRleCA4MmU0YmI5MGRkNS4uN2Q5OGZlMGZl MzIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9tdWx0aXhhY3QuaAorKysgYi9z cmMvaW5jbHVkZS9hY2Nlc3MvbXVsdGl4YWN0LmgKQEAgLTI4LDggKzI4LDYgQEAKIAogI2Rl ZmluZSBNdWx0aVhhY3RJZElzVmFsaWQobXVsdGkpICgobXVsdGkpICE9IEludmFsaWRNdWx0 aVhhY3RJZCkKIAotI2RlZmluZSBNYXhNdWx0aVhhY3RPZmZzZXQJKChNdWx0aVhhY3RPZmZz ZXQpIDB4RkZGRkZGRkYpCi0KIC8qCiAgKiBQb3NzaWJsZSBtdWx0aXhhY3QgbG9jayBtb2Rl cyAoInN0YXR1cyIpLiAgVGhlIGZpcnN0IGZvdXIgbW9kZXMgYXJlIGZvcgogICogdHVwbGUg bG9ja3MgKEZPUiBLRVkgU0hBUkUsIEZPUiBTSEFSRSwgRk9SIE5PIEtFWSBVUERBVEUsIEZP UiBVUERBVEUpOyB0aGUKQEAgLTE0Nyw3ICsxNDUsNiBAQCBleHRlcm4gdm9pZCBNdWx0aVhh Y3RTZXROZXh0TVhhY3QoTXVsdGlYYWN0SWQgbmV4dE11bHRpLAogZXh0ZXJuIHZvaWQgTXVs dGlYYWN0QWR2YW5jZU5leHRNWGFjdChNdWx0aVhhY3RJZCBtaW5NdWx0aSwKIAkJCQkJCQkJ CSAgTXVsdGlYYWN0T2Zmc2V0IG1pbk11bHRpT2Zmc2V0KTsKIGV4dGVybiB2b2lkIE11bHRp WGFjdEFkdmFuY2VPbGRlc3QoTXVsdGlYYWN0SWQgb2xkZXN0TXVsdGksIE9pZCBvbGRlc3RN dWx0aURCKTsKLWV4dGVybiBpbnQJTXVsdGlYYWN0TWVtYmVyRnJlZXplVGhyZXNob2xkKHZv aWQpOwogCiBleHRlcm4gdm9pZCBtdWx0aXhhY3RfdHdvcGhhc2VfcmVjb3ZlcihGdWxsVHJh bnNhY3Rpb25JZCBmeGlkLCB1aW50MTYgaW5mbywKIAkJCQkJCQkJCSAgIHZvaWQgKnJlY2Rh dGEsIHVpbnQzMiBsZW4pOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYy5oIGIvc3JjL2lu Y2x1ZGUvYy5oCmluZGV4IDc1N2RmZmY0NzgyLi5iYzkyYTZmNDU2NSAxMDA2NDQKLS0tIGEv c3JjL2luY2x1ZGUvYy5oCisrKyBiL3NyYy9pbmNsdWRlL2MuaApAQCAtNjcwLDcgKzY3MCw3 IEBAIHR5cGVkZWYgdWludDMyIFN1YlRyYW5zYWN0aW9uSWQ7CiAvKiBNdWx0aVhhY3RJZCBt dXN0IGJlIGVxdWl2YWxlbnQgdG8gVHJhbnNhY3Rpb25JZCwgdG8gZml0IGluIHRfeG1heCAq LwogdHlwZWRlZiBUcmFuc2FjdGlvbklkIE11bHRpWGFjdElkOwogCi10eXBlZGVmIHVpbnQz MiBNdWx0aVhhY3RPZmZzZXQ7Cit0eXBlZGVmIHVpbnQ2NCBNdWx0aVhhY3RPZmZzZXQ7CiAK IHR5cGVkZWYgdWludDMyIENvbW1hbmRJZDsKIAotLSAKMi40Ny4zCgo= --------------wdQFSa6hjCyS1wBv3Joac30h Content-Type: text/x-patch; charset=UTF-8; name="v22-0002-Add-pg_upgarde-for-64-bit-multixact-offsets.patch" Content-Disposition: attachment; filename*0="v22-0002-Add-pg_upgarde-for-64-bit-multixact-offsets.patch" Content-Transfer-Encoding: base64 RnJvbSBjMjNmZmNlYmZjNGE4MDdkMzA5MGJmY2Y2Mzk5OGFiZGI3MzY4ZWIzIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbSBPcmxvdiA8b3Jsb3ZtZ0BnbWFpbC5jb20+ CkRhdGU6IEZyaSwgMjQgT2N0IDIwMjUgMTA6NTg6MzcgKzAzMDAKU3ViamVjdDogW1BBVENI IHYyMiAyLzVdIEFkZCBwZ191cGdhcmRlIGZvciA2NCBiaXQgbXVsdGl4YWN0IG9mZnNldHMK CkF1dGhvcjogTWF4aW0gT3Jsb3YgPG9ybG92bWdAZ21haWwuY29tPgpBdXRob3I6IEhlaWtr aSBMaW5uYWthbmdhcyA8aGxpbm5ha2FAaWtpLmZpPgotLS0KIHNyYy9iYWNrZW5kL2FjY2Vz cy90cmFuc2FtL211bHRpeGFjdC5jIHwgIDU2IC0tLS0tCiBzcmMvYmluL3BnX3VwZ3JhZGUv TWFrZWZpbGUgICAgICAgICAgICB8ICAgMyArCiBzcmMvYmluL3BnX3VwZ3JhZGUvbWVzb24u YnVpbGQgICAgICAgICB8ICAgNCArCiBzcmMvYmluL3BnX3VwZ3JhZGUvbXVsdGl4YWN0X25l dy5jICAgICB8IDE3NCArKysrKysrKysrKysrKysKIHNyYy9iaW4vcGdfdXBncmFkZS9tdWx0 aXhhY3RfbmV3LmggICAgIHwgIDIzICsrCiBzcmMvYmluL3BnX3VwZ3JhZGUvbXVsdGl4YWN0 X29sZC5jICAgICB8IDI5NyArKysrKysrKysrKysrKysrKysrKysrKysrCiBzcmMvYmluL3Bn X3VwZ3JhZGUvbXVsdGl4YWN0X29sZC5oICAgICB8ICAyOSArKysKIHNyYy9iaW4vcGdfdXBn cmFkZS9wZ191cGdyYWRlLmMgICAgICAgIHwgMTA4ICsrKysrKysrLQogc3JjL2Jpbi9wZ191 cGdyYWRlL3BnX3VwZ3JhZGUuaCAgICAgICAgfCAgIDUgKwogc3JjL2Jpbi9wZ191cGdyYWRl L3NscnVfaW8uYyAgICAgICAgICAgfCAyMzkgKysrKysrKysrKysrKysrKysrKysKIHNyYy9i aW4vcGdfdXBncmFkZS9zbHJ1X2lvLmggICAgICAgICAgIHwgIDIzICsrCiBzcmMvdG9vbHMv cGdpbmRlbnQvdHlwZWRlZnMubGlzdCAgICAgICB8ICAgMyArCiAxMiBmaWxlcyBjaGFuZ2Vk LCA5MDIgaW5zZXJ0aW9ucygrKSwgNjIgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2 NDQgc3JjL2Jpbi9wZ191cGdyYWRlL211bHRpeGFjdF9uZXcuYwogY3JlYXRlIG1vZGUgMTAw NjQ0IHNyYy9iaW4vcGdfdXBncmFkZS9tdWx0aXhhY3RfbmV3LmgKIGNyZWF0ZSBtb2RlIDEw MDY0NCBzcmMvYmluL3BnX3VwZ3JhZGUvbXVsdGl4YWN0X29sZC5jCiBjcmVhdGUgbW9kZSAx MDA2NDQgc3JjL2Jpbi9wZ191cGdyYWRlL211bHRpeGFjdF9vbGQuaAogY3JlYXRlIG1vZGUg MTAwNjQ0IHNyYy9iaW4vcGdfdXBncmFkZS9zbHJ1X2lvLmMKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBzcmMvYmluL3BnX3VwZ3JhZGUvc2xydV9pby5oCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvYWNjZXNzL3RyYW5zYW0vbXVsdGl4YWN0LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJh bnNhbS9tdWx0aXhhY3QuYwppbmRleCA2OGZkMzQ0MTgxNi4uZWI1YTFkMzdjZTYgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL211bHRpeGFjdC5jCisrKyBiL3Ny Yy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL211bHRpeGFjdC5jCkBAIC0xOTIxLDQ4ICsxOTIx LDYgQEAgQm9vdFN0cmFwTXVsdGlYYWN0KHZvaWQpCiAJU2ltcGxlTHJ1WmVyb0FuZFdyaXRl UGFnZShNdWx0aVhhY3RNZW1iZXJDdGwsIDApOwogfQogCi0vKgotICogTWF5YmVFeHRlbmRP ZmZzZXRTbHJ1Ci0gKgkJRXh0ZW5kIHRoZSBvZmZzZXRzIFNMUlUgYXJlYSwgaWYgbmVjZXNz YXJ5Ci0gKgotICogQWZ0ZXIgYSBiaW5hcnkgdXBncmFkZSBmcm9tIDw9IDkuMiwgdGhlIHBn X211bHRpeGFjdC9vZmZzZXRzIFNMUlUgYXJlYSBtaWdodAotICogY29udGFpbiBmaWxlcyB0 aGF0IGFyZSBzaG9ydGVyIHRoYW4gbmVjZXNzYXJ5OyB0aGlzIHdvdWxkIG9jY3VyIGlmIHRo ZSBvbGQKLSAqIGluc3RhbGxhdGlvbiBoYWQgdXNlZCBtdWx0aXhhY3RzIGJleW9uZCB0aGUg Zmlyc3QgcGFnZSAoZmlsZXMgY2Fubm90IGJlCi0gKiBjb3BpZWQsIGJlY2F1c2UgdGhlIG9u LWRpc2sgcmVwcmVzZW50YXRpb24gaXMgZGlmZmVyZW50KS4gIHBnX3VwZ3JhZGUgd291bGQK LSAqIHVwZGF0ZSBwZ19jb250cm9sIHRvIHNldCB0aGUgbmV4dCBvZmZzZXQgdmFsdWUgdG8g YmUgYXQgdGhhdCBwb3NpdGlvbiwgc28KLSAqIHRoYXQgdHVwbGVzIG1hcmtlZCBhcyBsb2Nr ZWQgYnkgc3VjaCBNdWx0aVhhY3RzIHdvdWxkIGJlIHNlZW4gYXMgdmlzaWJsZQotICogd2l0 aG91dCBoYXZpbmcgdG8gY29uc3VsdCBtdWx0aXhhY3QuICBIb3dldmVyLCB0cnlpbmcgdG8g Y3JlYXRlIGFuZCB1c2UgYQotICogbmV3IE11bHRpWGFjdElkIHdvdWxkIHJlc3VsdCBpbiBh biBlcnJvciBiZWNhdXNlIHRoZSBwYWdlIG9uIHdoaWNoIHRoZSBuZXcKLSAqIHZhbHVlIHdv dWxkIHJlc2lkZSBkb2VzIG5vdCBleGlzdC4gIFRoaXMgcm91dGluZSBpcyBpbiBjaGFyZ2Ug b2YgY3JlYXRpbmcKLSAqIHN1Y2ggcGFnZXMuCi0gKi8KLXN0YXRpYyB2b2lkCi1NYXliZUV4 dGVuZE9mZnNldFNscnUodm9pZCkKLXsKLQlpbnQ2NAkJcGFnZW5vOwotCUxXTG9jawkgICAq bG9jazsKLQotCXBhZ2VubyA9IE11bHRpWGFjdElkVG9PZmZzZXRQYWdlKE11bHRpWGFjdFN0 YXRlLT5uZXh0TVhhY3QpOwotCWxvY2sgPSBTaW1wbGVMcnVHZXRCYW5rTG9jayhNdWx0aVhh Y3RPZmZzZXRDdGwsIHBhZ2Vubyk7Ci0KLQlMV0xvY2tBY3F1aXJlKGxvY2ssIExXX0VYQ0xV U0lWRSk7Ci0KLQlpZiAoIVNpbXBsZUxydURvZXNQaHlzaWNhbFBhZ2VFeGlzdChNdWx0aVhh Y3RPZmZzZXRDdGwsIHBhZ2VubykpCi0JewotCQlpbnQJCQlzbG90bm87Ci0KLQkJLyoKLQkJ ICogRm9ydHVuYXRlbHkgZm9yIHVzLCBTaW1wbGVMcnVXcml0ZVBhZ2UgaXMgYWxyZWFkeSBw cmVwYXJlZCB0byBkZWFsCi0JCSAqIHdpdGggY3JlYXRpbmcgYSBuZXcgc2VnbWVudCBmaWxl IGV2ZW4gaWYgdGhlIHBhZ2Ugd2UncmUgd3JpdGluZyBpcwotCQkgKiBub3QgdGhlIGZpcnN0 IGluIGl0LCBzbyB0aGlzIGlzIGVub3VnaC4KLQkJICovCi0JCXNsb3RubyA9IFNpbXBsZUxy dVplcm9QYWdlKE11bHRpWGFjdE9mZnNldEN0bCwgcGFnZW5vKTsKLQkJU2ltcGxlTHJ1V3Jp dGVQYWdlKE11bHRpWGFjdE9mZnNldEN0bCwgc2xvdG5vKTsKLQl9Ci0KLQlMV0xvY2tSZWxl YXNlKGxvY2spOwotfQotCiAvKgogICogVGhpcyBtdXN0IGJlIGNhbGxlZCBPTkNFIGR1cmlu ZyBwb3N0bWFzdGVyIG9yIHN0YW5kYWxvbmUtYmFja2VuZCBzdGFydHVwLgogICoKQEAgLTIx NTUsMjAgKzIxMTMsNiBAQCBNdWx0aVhhY3RTZXROZXh0TVhhY3QoTXVsdGlYYWN0SWQgbmV4 dE11bHRpLAogCU11bHRpWGFjdFN0YXRlLT5uZXh0TVhhY3QgPSBuZXh0TXVsdGk7CiAJTXVs dGlYYWN0U3RhdGUtPm5leHRPZmZzZXQgPSBuZXh0TXVsdGlPZmZzZXQ7CiAJTFdMb2NrUmVs ZWFzZShNdWx0aVhhY3RHZW5Mb2NrKTsKLQotCS8qCi0JICogRHVyaW5nIGEgYmluYXJ5IHVw Z3JhZGUsIG1ha2Ugc3VyZSB0aGF0IHRoZSBvZmZzZXRzIFNMUlUgaXMgbGFyZ2UKLQkgKiBl bm91Z2ggdG8gY29udGFpbiB0aGUgbmV4dCB2YWx1ZSB0aGF0IHdvdWxkIGJlIGNyZWF0ZWQu Ci0JICoKLQkgKiBXZSBuZWVkIHRvIGRvIHRoaXMgcHJldHR5IGVhcmx5IGR1cmluZyB0aGUg Zmlyc3Qgc3RhcnR1cCBpbiBiaW5hcnkKLQkgKiB1cGdyYWRlIG1vZGU6IGJlZm9yZSBTdGFy dHVwTXVsdGlYYWN0KCkgaW4gZmFjdCwgYmVjYXVzZSB0aGlzIHJvdXRpbmUKLQkgKiBpcyBj YWxsZWQgZXZlbiBiZWZvcmUgdGhhdCBieSBTdGFydHVwWExPRygpLiAgQW5kIHdlIGNhbid0 IGRvIGl0Ci0JICogZWFybGllciB0aGFuIGF0IHRoaXMgcG9pbnQsIGJlY2F1c2UgZHVyaW5n IHRoYXQgZmlyc3QgY2FsbCBvZiB0aGlzCi0JICogcm91dGluZSB3ZSBkZXRlcm1pbmUgdGhl IE11bHRpWGFjdFN0YXRlLT5uZXh0TVhhY3QgdmFsdWUgdGhhdAotCSAqIE1heWJlRXh0ZW5k T2Zmc2V0U2xydSBuZWVkcy4KLQkgKi8KLQlpZiAoSXNCaW5hcnlVcGdyYWRlKQotCQlNYXli ZUV4dGVuZE9mZnNldFNscnUoKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdf dXBncmFkZS9NYWtlZmlsZSBiL3NyYy9iaW4vcGdfdXBncmFkZS9NYWtlZmlsZQppbmRleCA2 OWZjZjU5M2NhZS4uNDI5OTVkNTNiMGIgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfdXBncmFk ZS9NYWtlZmlsZQorKysgYi9zcmMvYmluL3BnX3VwZ3JhZGUvTWFrZWZpbGUKQEAgLTE4LDEx ICsxOCwxNCBAQCBPQkpTID0gXAogCWZpbGUubyBcCiAJZnVuY3Rpb24ubyBcCiAJaW5mby5v IFwKKwltdWx0aXhhY3RfbmV3Lm8gXAorCW11bHRpeGFjdF9vbGQubyBcCiAJb3B0aW9uLm8g XAogCXBhcmFsbGVsLm8gXAogCXBnX3VwZ3JhZGUubyBcCiAJcmVsZmlsZW51bWJlci5vIFwK IAlzZXJ2ZXIubyBcCisJc2xydV9pby5vIFwKIAl0YWJsZXNwYWNlLm8gXAogCXRhc2subyBc CiAJdXRpbC5vIFwKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfdXBncmFkZS9tZXNvbi5idWls ZCBiL3NyYy9iaW4vcGdfdXBncmFkZS9tZXNvbi5idWlsZAppbmRleCBhYzk5MmYwZDE0Yi4u OTUyYmNiZTc0MzUgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfdXBncmFkZS9tZXNvbi5idWls ZAorKysgYi9zcmMvYmluL3BnX3VwZ3JhZGUvbWVzb24uYnVpbGQKQEAgLTgsMTEgKzgsMTQg QEAgcGdfdXBncmFkZV9zb3VyY2VzID0gZmlsZXMoCiAgICdmaWxlLmMnLAogICAnZnVuY3Rp b24uYycsCiAgICdpbmZvLmMnLAorICAnbXVsdGl4YWN0X25ldy5jJywKKyAgJ211bHRpeGFj dF9vbGQuYycsCiAgICdvcHRpb24uYycsCiAgICdwYXJhbGxlbC5jJywKICAgJ3BnX3VwZ3Jh ZGUuYycsCiAgICdyZWxmaWxlbnVtYmVyLmMnLAogICAnc2VydmVyLmMnLAorICAnc2xydV9p by5jJywKICAgJ3RhYmxlc3BhY2UuYycsCiAgICd0YXNrLmMnLAogICAndXRpbC5jJywKQEAg LTQ3LDYgKzUwLDcgQEAgdGVzdHMgKz0gewogICAgICAgJ3QvMDA0X3N1YnNjcmlwdGlvbi5w bCcsCiAgICAgICAndC8wMDVfY2hhcl9zaWduZWRuZXNzLnBsJywKICAgICAgICd0LzAwNl90 cmFuc2Zlcl9tb2Rlcy5wbCcsCisgICAgICAndC8wMDdfbXhvZmYucGwnLAogICAgIF0sCiAg ICAgJ3Rlc3Rfa3dhcmdzJzogeydwcmlvcml0eSc6IDQwfSwgIyBwZ191cGdyYWRlIHRlc3Rz IGFyZSBzbG93CiAgIH0sCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX3VwZ3JhZGUvbXVsdGl4 YWN0X25ldy5jIGIvc3JjL2Jpbi9wZ191cGdyYWRlL211bHRpeGFjdF9uZXcuYwpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNWRiN2FmNWIxMmQKLS0tIC9kZXYv bnVsbAorKysgYi9zcmMvYmluL3BnX3VwZ3JhZGUvbXVsdGl4YWN0X25ldy5jCkBAIC0wLDAg KzEsMTc0IEBACisvKgorICogbXVsdGl4YWN0X25ldy5jCisgKgorICogRnVuY3Rpb25zIHRv IHdyaXRlIG11bHRpeGFjdHMgaW4gdGhlIHYxOSBmb3JtYXQgd2l0aCA2NC1iaXQKKyAqIE11 bHRpWGFjdE9mZnNldHMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMjUsIFBvc3RncmVTUUwg R2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKiBzcmMvYmluL3BnX3VwZ3JhZGUvbXVsdGl4 YWN0X25ldy5jCisgKi8KKworI2luY2x1ZGUgInBvc3RncmVzX2ZlLmgiCisKKyNpbmNsdWRl ICJtdWx0aXhhY3RfbmV3LmgiCisKKy8qCisgKiBOT1RFOiBCZWxvdyBhcmUgYSBidW5jaCBv ZiBkZWZpbml0aW9ucyBhbmQgc2ltcGxlIGlubGluZSBmdW5jdGlvbnMgdGhhdCBhcmUKKyAq IGNvcHktcGFzdGVkIGZyb20gbXVsdGl4YWN0LmMKKyAqLworCisvKiBXZSBuZWVkIGZvdXIg Ynl0ZXMgcGVyIG9mZnNldCwgOCBieXRlcyBmb3IgdGhlIGJhc2UgKi8KKyNkZWZpbmUgTVVM VElYQUNUX09GRlNFVFNfUEVSX1BBR0UgKEJMQ0tTWiAvIHNpemVvZihNdWx0aVhhY3RPZmZz ZXQpKQorCitzdGF0aWMgaW5saW5lIGludDY0CitNdWx0aVhhY3RJZFRvT2Zmc2V0UGFnZShN dWx0aVhhY3RJZCBtdWx0aSkKK3sKKwlyZXR1cm4gbXVsdGkgLyBNVUxUSVhBQ1RfT0ZGU0VU U19QRVJfUEFHRTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK011bHRpWGFjdElkVG9PZmZz ZXRFbnRyeShNdWx0aVhhY3RJZCBtdWx0aSkKK3sKKwlyZXR1cm4gbXVsdGkgJSBNVUxUSVhB Q1RfT0ZGU0VUU19QRVJfUEFHRTsKK30KKworLyogV2UgbmVlZCBlaWdodCBiaXRzIHBlciB4 YWN0LCBzbyBvbmUgeGFjdCBmaXRzIGluIGEgYnl0ZSAqLworI2RlZmluZSBNWEFDVF9NRU1C RVJfQklUU19QRVJfWEFDVAkJCTgKKyNkZWZpbmUgTVhBQ1RfTUVNQkVSX0ZMQUdTX1BFUl9C WVRFCQkJMQorI2RlZmluZSBNWEFDVF9NRU1CRVJfWEFDVF9CSVRNQVNLCSgoMSA8PCBNWEFD VF9NRU1CRVJfQklUU19QRVJfWEFDVCkgLSAxKQorCisvKiBob3cgbWFueSBmdWxsIGJ5dGVz IG9mIGZsYWdzIGFyZSB0aGVyZSBpbiBhIGdyb3VwPyAqLworI2RlZmluZSBNVUxUSVhBQ1Rf RkxBR0JZVEVTX1BFUl9HUk9VUAkJNAorI2RlZmluZSBNVUxUSVhBQ1RfTUVNQkVSU19QRVJf TUVNQkVSR1JPVVAJXAorCShNVUxUSVhBQ1RfRkxBR0JZVEVTX1BFUl9HUk9VUCAqIE1YQUNU X01FTUJFUl9GTEFHU19QRVJfQllURSkKKy8qIHNpemUgaW4gYnl0ZXMgb2YgYSBjb21wbGV0 ZSBncm91cCAqLworI2RlZmluZSBNVUxUSVhBQ1RfTUVNQkVSR1JPVVBfU0laRSBcCisJKHNp emVvZihUcmFuc2FjdGlvbklkKSAqIE1VTFRJWEFDVF9NRU1CRVJTX1BFUl9NRU1CRVJHUk9V UCArIE1VTFRJWEFDVF9GTEFHQllURVNfUEVSX0dST1VQKQorI2RlZmluZSBNVUxUSVhBQ1Rf TUVNQkVSR1JPVVBTX1BFUl9QQUdFIChCTENLU1ogLyBNVUxUSVhBQ1RfTUVNQkVSR1JPVVBf U0laRSkKKyNkZWZpbmUgTVVMVElYQUNUX01FTUJFUlNfUEVSX1BBR0UJXAorCShNVUxUSVhB Q1RfTUVNQkVSR1JPVVBTX1BFUl9QQUdFICogTVVMVElYQUNUX01FTUJFUlNfUEVSX01FTUJF UkdST1VQKQorCisvKiBwYWdlIGluIHdoaWNoIGEgbWVtYmVyIGlzIHRvIGJlIGZvdW5kICov CitzdGF0aWMgaW5saW5lIGludDY0CitNWE9mZnNldFRvTWVtYmVyUGFnZShNdWx0aVhhY3RP ZmZzZXQgb2Zmc2V0KQoreworCXJldHVybiBvZmZzZXQgLyBNVUxUSVhBQ1RfTUVNQkVSU19Q RVJfUEFHRTsKK30KKworLyogTG9jYXRpb24gKGJ5dGUgb2Zmc2V0IHdpdGhpbiBwYWdlKSBv ZiBmbGFnIHdvcmQgZm9yIGEgZ2l2ZW4gbWVtYmVyICovCitzdGF0aWMgaW5saW5lIGludAor TVhPZmZzZXRUb0ZsYWdzT2Zmc2V0KE11bHRpWGFjdE9mZnNldCBvZmZzZXQpCit7CisJTXVs dGlYYWN0T2Zmc2V0IGdyb3VwID0gb2Zmc2V0IC8gTVVMVElYQUNUX01FTUJFUlNfUEVSX01F TUJFUkdST1VQOworCWludAkJCWdyb3Vwb25wZyA9IGdyb3VwICUgTVVMVElYQUNUX01FTUJF UkdST1VQU19QRVJfUEFHRTsKKwlpbnQJCQlieXRlb2ZmID0gZ3JvdXBvbnBnICogTVVMVElY QUNUX01FTUJFUkdST1VQX1NJWkU7CisKKwlyZXR1cm4gYnl0ZW9mZjsKK30KKworc3RhdGlj IGlubGluZSBpbnQKK01YT2Zmc2V0VG9GbGFnc0JpdFNoaWZ0KE11bHRpWGFjdE9mZnNldCBv ZmZzZXQpCit7CisJaW50CQkJbWVtYmVyX2luX2dyb3VwID0gb2Zmc2V0ICUgTVVMVElYQUNU X01FTUJFUlNfUEVSX01FTUJFUkdST1VQOworCWludAkJCWJzaGlmdCA9IG1lbWJlcl9pbl9n cm91cCAqIE1YQUNUX01FTUJFUl9CSVRTX1BFUl9YQUNUOworCisJcmV0dXJuIGJzaGlmdDsK K30KKworLyogTG9jYXRpb24gKGJ5dGUgb2Zmc2V0IHdpdGhpbiBwYWdlKSBvZiBUcmFuc2Fj dGlvbklkIG9mIGdpdmVuIG1lbWJlciAqLworc3RhdGljIGlubGluZSBpbnQKK01YT2Zmc2V0 VG9NZW1iZXJPZmZzZXQoTXVsdGlYYWN0T2Zmc2V0IG9mZnNldCkKK3sKKwlpbnQJCQltZW1i ZXJfaW5fZ3JvdXAgPSBvZmZzZXQgJSBNVUxUSVhBQ1RfTUVNQkVSU19QRVJfTUVNQkVSR1JP VVA7CisKKwlyZXR1cm4gTVhPZmZzZXRUb0ZsYWdzT2Zmc2V0KG9mZnNldCkgKworCQlNVUxU SVhBQ1RfRkxBR0JZVEVTX1BFUl9HUk9VUCArCisJCW1lbWJlcl9pbl9ncm91cCAqIHNpemVv ZihUcmFuc2FjdGlvbklkKTsKK30KKworTXVsdGlYYWN0V3JpdGVyICoKK0FsbG9jTXVsdGlY YWN0V3JpdGUoY29uc3QgY2hhciAqcGdkYXRhLCBNdWx0aVhhY3RJZCBmaXJzdE11bHRpLAor CQkJCQlNdWx0aVhhY3RPZmZzZXQgZmlyc3RPZmZzZXQpCit7CisJTXVsdGlYYWN0V3JpdGVy ICpzdGF0ZSA9IHBnX21hbGxvYyhzaXplb2YoKnN0YXRlKSk7CisJY2hhcgkJZGlyW01BWFBH UEFUSF0gPSB7MH07CisKKwlwZ19zcHJpbnRmKGRpciwgIiVzL3BnX211bHRpeGFjdC9vZmZz ZXRzIiwgcGdkYXRhKTsKKwlzdGF0ZS0+b2Zmc2V0ID0gQWxsb2NTbHJ1V3JpdGUoZGlyLCBm YWxzZSk7CisJU2xydVdyaXRlU3dpdGNoUGFnZShzdGF0ZS0+b2Zmc2V0LCBNdWx0aVhhY3RJ ZFRvT2Zmc2V0UGFnZShmaXJzdE11bHRpKSk7CisKKwlwZ19zcHJpbnRmKGRpciwgIiVzL3Bn X211bHRpeGFjdC9tZW1iZXJzIiwgcGdkYXRhKTsKKwlzdGF0ZS0+bWVtYmVycyA9IEFsbG9j U2xydVdyaXRlKGRpciwgdHJ1ZSAvKiB1c2UgbG9uZyBzZWdtZW50IG5hbWVzICovICk7CisJ U2xydVdyaXRlU3dpdGNoUGFnZShzdGF0ZS0+bWVtYmVycywgTVhPZmZzZXRUb01lbWJlclBh Z2UoZmlyc3RPZmZzZXQpKTsKKworCXJldHVybiBzdGF0ZTsKK30KKworLyoKKyAqIFdyaXRl IGEgbmV3IG11bHRpeGFjdCB3aXRoIG1lbWJlcnMuCisgKgorICogU2ltcGxpZmllZCB2ZXJz aW9uIG9mIHRoZSBjb3JyZXNwb2Rpbmcgc2VydmVyIGZ1bmN0aW9uLCBoZW5jZSB0aGUgbmFt ZS4KKyAqLwordm9pZAorUmVjb3JkTmV3TXVsdGlYYWN0KE11bHRpWGFjdFdyaXRlciAqc3Rh dGUsIE11bHRpWGFjdE9mZnNldCBvZmZzZXQsCisJCQkJICAgTXVsdGlYYWN0SWQgbXVsdGks IGludCBubWVtYmVycywgTXVsdGlYYWN0TWVtYmVyICptZW1iZXJzKQoreworCWludDY0CQlw YWdlbm87CisJaW50NjQJCXByZXZfcGFnZW5vOworCWludAkJCWVudHJ5bm87CisJY2hhcgkg ICAqYnVmOworCU11bHRpWGFjdE9mZnNldCAqb2ZmcHRyOworCisJcGFnZW5vID0gTXVsdGlY YWN0SWRUb09mZnNldFBhZ2UobXVsdGkpOworCWVudHJ5bm8gPSBNdWx0aVhhY3RJZFRvT2Zm c2V0RW50cnkobXVsdGkpOworCisJLyogU3RvcmUgdGhlIG9mZnNldCAqLworCWJ1ZiA9IFNs cnVXcml0ZVN3aXRjaFBhZ2Uoc3RhdGUtPm9mZnNldCwgcGFnZW5vKTsKKwlvZmZwdHIgPSAo TXVsdGlYYWN0T2Zmc2V0ICopIGJ1ZjsKKwlvZmZwdHJbZW50cnlub10gPSBvZmZzZXQ7CisK KwkvKiBTdG9yZSB0aGUgbWVtYmVycyAqLworCXByZXZfcGFnZW5vID0gLTE7CisJZm9yIChp bnQgaSA9IDA7IGkgPCBubWVtYmVyczsgaSsrLCBvZmZzZXQrKykKKwl7CisJCVRyYW5zYWN0 aW9uSWQgKm1lbWJlcnB0cjsKKwkJdWludDMyCSAgICpmbGFnc3B0cjsKKwkJdWludDMyCQlm bGFnc3ZhbDsKKwkJaW50CQkJYnNoaWZ0OworCQlpbnQJCQlmbGFnc29mZjsKKwkJaW50CQkJ bWVtYmVyb2ZmOworCisJCUFzc2VydChtZW1iZXJzW2ldLnN0YXR1cyA8PSBNdWx0aVhhY3RT dGF0dXNVcGRhdGUpOworCisJCXBhZ2VubyA9IE1YT2Zmc2V0VG9NZW1iZXJQYWdlKG9mZnNl dCk7CisJCW1lbWJlcm9mZiA9IE1YT2Zmc2V0VG9NZW1iZXJPZmZzZXQob2Zmc2V0KTsKKwkJ ZmxhZ3NvZmYgPSBNWE9mZnNldFRvRmxhZ3NPZmZzZXQob2Zmc2V0KTsKKwkJYnNoaWZ0ID0g TVhPZmZzZXRUb0ZsYWdzQml0U2hpZnQob2Zmc2V0KTsKKworCQlpZiAocGFnZW5vICE9IHBy ZXZfcGFnZW5vKQorCQl7CisJCQlidWYgPSBTbHJ1V3JpdGVTd2l0Y2hQYWdlKHN0YXRlLT5t ZW1iZXJzLCBwYWdlbm8pOworCQkJcHJldl9wYWdlbm8gPSBwYWdlbm87CisJCX0KKworCQlt ZW1iZXJwdHIgPSAoVHJhbnNhY3Rpb25JZCAqKSAoYnVmICsgbWVtYmVyb2ZmKTsKKworCQkq bWVtYmVycHRyID0gbWVtYmVyc1tpXS54aWQ7CisKKwkJZmxhZ3NwdHIgPSAodWludDMyICop IChidWYgKyBmbGFnc29mZik7CisKKwkJZmxhZ3N2YWwgPSAqZmxhZ3NwdHI7CisJCWZsYWdz dmFsICY9IH4oKCgxIDw8IE1YQUNUX01FTUJFUl9CSVRTX1BFUl9YQUNUKSAtIDEpIDw8IGJz aGlmdCk7CisJCWZsYWdzdmFsIHw9IChtZW1iZXJzW2ldLnN0YXR1cyA8PCBic2hpZnQpOwor CQkqZmxhZ3NwdHIgPSBmbGFnc3ZhbDsKKwl9Cit9CisKK3ZvaWQKK0ZyZWVNdWx0aVhhY3RX cml0ZShNdWx0aVhhY3RXcml0ZXIgKnN0YXRlKQoreworCUZyZWVTbHJ1V3JpdGUoc3RhdGUt Pm9mZnNldCk7CisJRnJlZVNscnVXcml0ZShzdGF0ZS0+bWVtYmVycyk7CisKKwlwZnJlZShz dGF0ZSk7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX3VwZ3JhZGUvbXVsdGl4YWN0X25l dy5oIGIvc3JjL2Jpbi9wZ191cGdyYWRlL211bHRpeGFjdF9uZXcuaApuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZjY2ZTZhZjdlNDUKLS0tIC9kZXYvbnVsbAor KysgYi9zcmMvYmluL3BnX3VwZ3JhZGUvbXVsdGl4YWN0X25ldy5oCkBAIC0wLDAgKzEsMjMg QEAKKy8qCisgKiBtdWx0aXhhY3RfbmV3LmgKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMjUs IFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKiBzcmMvYmluL3BnX3Vw Z3JhZGUvbXVsdGl4YWN0X25ldy5oCisgKi8KKyNpbmNsdWRlICJhY2Nlc3MvbXVsdGl4YWN0 LmgiCisKKyNpbmNsdWRlICJzbHJ1X2lvLmgiCisKK3R5cGVkZWYgc3RydWN0IE11bHRpWGFj dFdyaXRlcgoreworCVNscnVTZWdTdGF0ZSAqb2Zmc2V0OworCVNscnVTZWdTdGF0ZSAqbWVt YmVyczsKK30gTXVsdGlYYWN0V3JpdGVyOworCitleHRlcm4gTXVsdGlYYWN0V3JpdGVyICpB bGxvY011bHRpWGFjdFdyaXRlKGNvbnN0IGNoYXIgKnBnZGF0YSwKKwkJCQkJCQkJCQkJTXVs dGlYYWN0SWQgZmlyc3RNdWx0aSwKKwkJCQkJCQkJCQkJTXVsdGlYYWN0T2Zmc2V0IGZpcnN0 T2Zmc2V0KTsKK2V4dGVybiB2b2lkIFJlY29yZE5ld011bHRpWGFjdChNdWx0aVhhY3RXcml0 ZXIgKnN0YXRlLCBNdWx0aVhhY3RPZmZzZXQgb2Zmc2V0LAorCQkJCQkJCSAgIE11bHRpWGFj dElkIG11bHRpLCBpbnQgbm1lbWJlcnMsCisJCQkJCQkJICAgTXVsdGlYYWN0TWVtYmVyICpt ZW1iZXJzKTsKK2V4dGVybiB2b2lkIEZyZWVNdWx0aVhhY3RXcml0ZShNdWx0aVhhY3RXcml0 ZXIgKndyaXRlcik7CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX3VwZ3JhZGUvbXVsdGl4YWN0 X29sZC5jIGIvc3JjL2Jpbi9wZ191cGdyYWRlL211bHRpeGFjdF9vbGQuYwpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNzBhZTg4ZDk3ZjQKLS0tIC9kZXYvbnVs bAorKysgYi9zcmMvYmluL3BnX3VwZ3JhZGUvbXVsdGl4YWN0X29sZC5jCkBAIC0wLDAgKzEs Mjk3IEBACisvKgorICogbXVsdGl4YWN0X29sZC5jCisgKgorICogRnVuY3Rpb25zIHRvIHJl YWQgcHJlLXYxOSBtdWx0aXhhY3RzCisgKgorICogQ29weXJpZ2h0IChjKSAyMDI1LCBQb3N0 Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICogc3JjL2Jpbi9wZ191cGdyYWRl L211bHRpeGFjdF9vbGQuYworICovCisKKyNpbmNsdWRlICJwb3N0Z3Jlc19mZS5oIgorCisj aW5jbHVkZSAibXVsdGl4YWN0X29sZC5oIgorI2luY2x1ZGUgInBnX3VwZ3JhZGUuaCIKKwor LyoKKyAqIE5PVEU6IGJlbG93IGFyZSBhIGJ1bmNoIG9mIGRlZmluaXRpb25zIGFuZCBzaW1w bGUgc3R0YWljIGlubGluZSBmdW5jdGlvbnMKKyAqIHRoYXQgYXJlIGNvcHktcGFzdGVkIGZy b20gbXVsdGl4YWN0LmMgZnJvbSB2ZXJzaW9uIDE4LiAgVGhlIG9ubHkgZGlmZmVyZW5jZQor ICogaXMgdGhhdCB3ZSB1c2UgdGhlIE9sZE11bHRpWGFjdE9mZnNldCB0eXBlIGVxdWFsIHRv IHVpbnQzMiBpbnN0ZWFkIG9mCisgKiBNdWx0aVhhY3RPZmZzZXQgd2hpY2ggYmVjYW1lIHVp bnQ2NC4KKyAqLworCisvKiBXZSBuZWVkIGZvdXIgYnl0ZXMgcGVyIG9mZnNldCBhbmQgOCBi eXRlcyBwZXIgYmFzZSBmb3IgZWFjaCBwYWdlLiAqLworI2RlZmluZSBNVUxUSVhBQ1RfT0ZG U0VUU19QRVJfUEFHRSAoQkxDS1NaIC8gc2l6ZW9mKE9sZE11bHRpWGFjdE9mZnNldCkpCisK K3N0YXRpYyBpbmxpbmUgaW50NjQKK011bHRpWGFjdElkVG9PZmZzZXRQYWdlKE11bHRpWGFj dElkIG11bHRpKQoreworCXJldHVybiBtdWx0aSAvIE1VTFRJWEFDVF9PRkZTRVRTX1BFUl9Q QUdFOworfQorCitzdGF0aWMgaW5saW5lIGludAorTXVsdGlYYWN0SWRUb09mZnNldEVudHJ5 KE11bHRpWGFjdElkIG11bHRpKQoreworCXJldHVybiBtdWx0aSAlIE1VTFRJWEFDVF9PRkZT RVRTX1BFUl9QQUdFOworfQorCisvKgorICogVGhlIHNpdHVhdGlvbiBmb3IgbWVtYmVycyBp cyBhIGJpdCBtb3JlIGNvbXBsZXg6IHdlIHN0b3JlIG9uZSBieXRlIG9mCisgKiBhZGRpdGlv bmFsIGZsYWcgYml0cyBmb3IgZWFjaCBUcmFuc2FjdGlvbklkLiAgVG8gZG8gdGhpcyB3aXRo b3V0IGdldHRpbmcKKyAqIGludG8gYWxpZ25tZW50IGlzc3Vlcywgd2Ugc3RvcmUgZm91ciBi eXRlcyBvZiBmbGFncywgYW5kIHRoZW4gdGhlCisgKiBjb3JyZXNwb25kaW5nIDQgWGlkcy4g IEVhY2ggc3VjaCA1LXdvcmQgKDIwLWJ5dGUpIHNldCB3ZSBjYWxsIGEgImdyb3VwIiwgYW5k CisgKiBhcmUgc3RvcmVkIGFzIGEgd2hvbGUgaW4gcGFnZXMuICBUaHVzLCB3aXRoIDhrQiBC TENLU1osIHdlIGtlZXAgNDA5IGdyb3VwcworICogcGVyIHBhZ2UuICBUaGlzIHdhc3RlcyAx MiBieXRlcyBwZXIgcGFnZSwgYnV0IHRoYXQncyBPSyAtLSBzaW1wbGljaXR5IChhbmQKKyAq IHBlcmZvcm1hbmNlKSB0cnVtcHMgc3BhY2UgZWZmaWNpZW5jeSBoZXJlLgorICoKKyAqIE5v dGUgdGhhdCB0aGUgIm9mZnNldCIgbWFjcm9zIHdvcmsgd2l0aCBieXRlIG9mZnNldCwgbm90 IGFycmF5IGluZGV4ZXMsIHNvCisgKiBhcml0aG1ldGljIG11c3QgYmUgZG9uZSB1c2luZyAi Y2hhciAqIiBwb2ludGVycy4KKyAqLworLyogV2UgbmVlZCBlaWdodCBiaXRzIHBlciB4YWN0 LCBzbyBvbmUgeGFjdCBmaXRzIGluIGEgYnl0ZSAqLworI2RlZmluZSBNWEFDVF9NRU1CRVJf QklUU19QRVJfWEFDVAkJCTgKKyNkZWZpbmUgTVhBQ1RfTUVNQkVSX0ZMQUdTX1BFUl9CWVRF CQkJMQorI2RlZmluZSBNWEFDVF9NRU1CRVJfWEFDVF9CSVRNQVNLCSgoMSA8PCBNWEFDVF9N RU1CRVJfQklUU19QRVJfWEFDVCkgLSAxKQorCisvKiBob3cgbWFueSBmdWxsIGJ5dGVzIG9m IGZsYWdzIGFyZSB0aGVyZSBpbiBhIGdyb3VwPyAqLworI2RlZmluZSBNVUxUSVhBQ1RfRkxB R0JZVEVTX1BFUl9HUk9VUAkJNAorI2RlZmluZSBNVUxUSVhBQ1RfTUVNQkVSU19QRVJfTUVN QkVSR1JPVVAJXAorCShNVUxUSVhBQ1RfRkxBR0JZVEVTX1BFUl9HUk9VUCAqIE1YQUNUX01F TUJFUl9GTEFHU19QRVJfQllURSkKKy8qIHNpemUgaW4gYnl0ZXMgb2YgYSBjb21wbGV0ZSBn cm91cCAqLworI2RlZmluZSBNVUxUSVhBQ1RfTUVNQkVSR1JPVVBfU0laRSBcCisJKHNpemVv ZihUcmFuc2FjdGlvbklkKSAqIE1VTFRJWEFDVF9NRU1CRVJTX1BFUl9NRU1CRVJHUk9VUCAr IE1VTFRJWEFDVF9GTEFHQllURVNfUEVSX0dST1VQKQorI2RlZmluZSBNVUxUSVhBQ1RfTUVN QkVSR1JPVVBTX1BFUl9QQUdFIChCTENLU1ogLyBNVUxUSVhBQ1RfTUVNQkVSR1JPVVBfU0la RSkKKyNkZWZpbmUgTVVMVElYQUNUX01FTUJFUlNfUEVSX1BBR0UJXAorCShNVUxUSVhBQ1Rf TUVNQkVSR1JPVVBTX1BFUl9QQUdFICogTVVMVElYQUNUX01FTUJFUlNfUEVSX01FTUJFUkdS T1VQKQorCisvKiBwYWdlIGluIHdoaWNoIGEgbWVtYmVyIGlzIHRvIGJlIGZvdW5kICovCitz dGF0aWMgaW5saW5lIGludDY0CitNWE9mZnNldFRvTWVtYmVyUGFnZShPbGRNdWx0aVhhY3RP ZmZzZXQgb2Zmc2V0KQoreworCXJldHVybiBvZmZzZXQgLyBNVUxUSVhBQ1RfTUVNQkVSU19Q RVJfUEFHRTsKK30KKworLyogTG9jYXRpb24gKGJ5dGUgb2Zmc2V0IHdpdGhpbiBwYWdlKSBv ZiBmbGFnIHdvcmQgZm9yIGEgZ2l2ZW4gbWVtYmVyICovCitzdGF0aWMgaW5saW5lIGludAor TVhPZmZzZXRUb0ZsYWdzT2Zmc2V0KE11bHRpWGFjdE9mZnNldCBvZmZzZXQpCit7CisJT2xk TXVsdGlYYWN0T2Zmc2V0IGdyb3VwID0gb2Zmc2V0IC8gTVVMVElYQUNUX01FTUJFUlNfUEVS X01FTUJFUkdST1VQOworCWludAkJCWdyb3Vwb25wZyA9IGdyb3VwICUgTVVMVElYQUNUX01F TUJFUkdST1VQU19QRVJfUEFHRTsKKwlpbnQJCQlieXRlb2ZmID0gZ3JvdXBvbnBnICogTVVM VElYQUNUX01FTUJFUkdST1VQX1NJWkU7CisKKwlyZXR1cm4gYnl0ZW9mZjsKK30KKworLyog TG9jYXRpb24gKGJ5dGUgb2Zmc2V0IHdpdGhpbiBwYWdlKSBvZiBUcmFuc2FjdGlvbklkIG9m IGdpdmVuIG1lbWJlciAqLworc3RhdGljIGlubGluZSBpbnQKK01YT2Zmc2V0VG9NZW1iZXJP ZmZzZXQoT2xkTXVsdGlYYWN0T2Zmc2V0IG9mZnNldCkKK3sKKwlpbnQJCQltZW1iZXJfaW5f Z3JvdXAgPSBvZmZzZXQgJSBNVUxUSVhBQ1RfTUVNQkVSU19QRVJfTUVNQkVSR1JPVVA7CisK KwlyZXR1cm4gTVhPZmZzZXRUb0ZsYWdzT2Zmc2V0KG9mZnNldCkgKworCQlNVUxUSVhBQ1Rf RkxBR0JZVEVTX1BFUl9HUk9VUCArCisJCW1lbWJlcl9pbl9ncm91cCAqIHNpemVvZihUcmFu c2FjdGlvbklkKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK01YT2Zmc2V0VG9GbGFnc0Jp dFNoaWZ0KE9sZE11bHRpWGFjdE9mZnNldCBvZmZzZXQpCit7CisJaW50CQkJbWVtYmVyX2lu X2dyb3VwID0gb2Zmc2V0ICUgTVVMVElYQUNUX01FTUJFUlNfUEVSX01FTUJFUkdST1VQOwor CWludAkJCWJzaGlmdCA9IG1lbWJlcl9pbl9ncm91cCAqIE1YQUNUX01FTUJFUl9CSVRTX1BF Ul9YQUNUOworCisJcmV0dXJuIGJzaGlmdDsKK30KKworLyoKKyAqIENvbnN0cnVjdCByZWFk ZXIgb2Ygb2xkIG11bHRpeGFjdHMuCisgKgorICogUmV0dXJucyB0aGUgbWFsbG9jZWQgbWVt b3J5IHVzZWQgYnkgdGhlIGFsbCBvdGhlciBjYWxscyBpbiB0aGlzIG1vZHVsZS4KKyAqLwor T2xkTXVsdGlYYWN0UmVhZGVyICoKK0FsbG9jT2xkTXVsdGlYYWN0UmVhZChjaGFyICpwZ2Rh dGEsIE11bHRpWGFjdElkIG5leHRNdWx0aSwKKwkJCQkJICBPbGRNdWx0aVhhY3RPZmZzZXQg bmV4dE9mZnNldCkKK3sKKwlPbGRNdWx0aVhhY3RSZWFkZXIgKnN0YXRlID0gc3RhdGUgPSBw Z19tYWxsb2Moc2l6ZW9mKCpzdGF0ZSkpOworCWNoYXIJCWRpcltNQVhQR1BBVEhdID0gezB9 OworCisJc3RhdGUtPm5leHRNWGFjdCA9IG5leHRNdWx0aTsKKwlzdGF0ZS0+bmV4dE9mZnNl dCA9IG5leHRPZmZzZXQ7CisKKwlwZ19zcHJpbnRmKGRpciwgIiVzL3BnX211bHRpeGFjdC9v ZmZzZXRzIiwgcGdkYXRhKTsKKwlzdGF0ZS0+b2Zmc2V0ID0gQWxsb2NTbHJ1UmVhZChkaXIp OworCisJcGdfc3ByaW50ZihkaXIsICIlcy9wZ19tdWx0aXhhY3QvbWVtYmVycyIsIHBnZGF0 YSk7CisJc3RhdGUtPm1lbWJlcnMgPSBBbGxvY1NscnVSZWFkKGRpcik7CisKKwlyZXR1cm4g c3RhdGU7Cit9CisKKy8qCisgKiBUaGlzIGlzIGEgc2ltcGxpZmllZCB2ZXJzaW9uIG9mIHRo ZSBHZXRNdWx0aVhhY3RJZE1lbWJlcnMoKSBzZXJ2ZXIgZnVuY3Rpb24uCisgKgorICogLSBP bmx5IHJldHVybiB0aGUgdXBkYXRpbmcgbWVtYmVyLCBpZiBhbnkuIFVwZ3JhZGUgb25seSBj YXJlcyBhYm91dCB0aGUKKyAqICAgdXBkYXRlcnMuIElmIHRoZXJlIGlzIG5vIHVwZGF0aW5n IG1lbWJlciwgcmV0dXJuIHRoZSBmaXJzdCBsb2NraW5nLW9ubHkKKyAqICAgbWVtYmVyLiBX ZSBkb24ndCBoYXZlIGFueSB3YXkgdG8gcmVwcmVzZW50ICJubyBtZW1iZXJzIiwgYnV0IHdl IGFsc28gZG9uJ3QKKyAqICAgbmVlZCB0byBwcmVzZXJ2ZSBhbGwgdGhlIGxvY2tpbmcgbWVt YmVycy4KKyAqCisgKiAtIFdlIGRvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQgbG9ja2luZyBh bmQgc29tZSBjb3JuZXIgY2FzZXMgYmVjYXVzZSB0aGVyZSdzCisgKiAgIG5vIGNvbmN1cnJl bnQgYWN0aXZpdHkuCisgKi8KK3ZvaWQKK0dldE9sZE11bHRpWGFjdElkU2luZ2xlTWVtYmVy KE9sZE11bHRpWGFjdFJlYWRlciAqc3RhdGUsIE11bHRpWGFjdElkIG11bHRpLAorCQkJCQkJ CSAgVHJhbnNhY3Rpb25JZCAqcmVzdWx0LCBNdWx0aVhhY3RTdGF0dXMgKnN0YXR1cykKK3sK KwlNdWx0aVhhY3RJZCBuZXh0TVhhY3QsCisJCQkJbmV4dE9mZnNldCwKKwkJCQl0bXBNWGFj dDsKKwlpbnQ2NAkJcGFnZW5vLAorCQkJCXByZXZfcGFnZW5vOworCWludAkJCWVudHJ5bm8s CisJCQkJbGVuZ3RoOworCWNoYXIJICAgKmJ1ZjsKKwlPbGRNdWx0aVhhY3RPZmZzZXQgKm9m ZnB0ciwKKwkJCQlvZmZzZXQ7CisJVHJhbnNhY3Rpb25JZCByZXN1bHRfeGlkID0gSW52YWxp ZFRyYW5zYWN0aW9uSWQ7CisJYm9vbAkJcmVzdWx0X2lzdXBkYXRlID0gZmFsc2U7CisKKwlu ZXh0TVhhY3QgPSBzdGF0ZS0+bmV4dE1YYWN0OworCW5leHRPZmZzZXQgPSBzdGF0ZS0+bmV4 dE9mZnNldDsKKworCS8qCisJICogU2VlIEdldE11bHRpWGFjdElkTWVtYmVycyBpbiBtdWx0 aXhhY3QuYworCSAqCisJICogRmluZCBvdXQgdGhlIG9mZnNldCBhdCB3aGljaCB3ZSBuZWVk IHRvIHN0YXJ0IHJlYWRpbmcgTXVsdGlYYWN0TWVtYmVycworCSAqIGFuZCB0aGUgbnVtYmVy IG9mIG1lbWJlcnMgaW4gdGhlIG11bHRpeGFjdC4gIFdlIGRldGVybWluZSB0aGUgbGF0dGVy IGFzCisJICogdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGlzIG11bHRpeGFjdCdzIHN0YXJ0 aW5nIG9mZnNldCBhbmQgdGhlIG5leHQKKwkgKiBvbmUncy4gIEhvd2V2ZXIsIHRoZXJlIGFy ZSBzb21lIGNvcm5lciBjYXNlcyB0byB3b3JyeSBhYm91dDoKKwkgKgorCSAqIDEuIFRoaXMg bXVsdGl4YWN0IG1heSBiZSB0aGUgbGF0ZXN0IG9uZSBjcmVhdGVkLCBpbiB3aGljaCBjYXNl IHRoZXJlIGlzCisJICogbm8gbmV4dCBvbmUgdG8gbG9vayBhdC4gIEluIHRoaXMgY2FzZSB0 aGUgbmV4dE9mZnNldCB2YWx1ZSB3ZSBqdXN0CisJICogc2F2ZWQgaXMgdGhlIGNvcnJlY3Qg ZW5kcG9pbnQuCisJICoKKwkgKiAyLiBUaGUgbmV4dCBtdWx0aXhhY3QgbWF5IHN0aWxsIGJl IGluIHByb2Nlc3Mgb2YgYmVpbmcgZmlsbGVkIGluLi4uCisJICogVGhpcyBjYW5ub3QgaGFw cGVuIGR1cmluZyB1cGdyYWRlLgorCSAqCisJICogMy4gQmVjYXVzZSBHZXROZXdNdWx0aVhh Y3RJZCBpbmNyZW1lbnRzIG9mZnNldCB6ZXJvIHRvIG9mZnNldCBvbmUgdG8KKwkgKiBoYW5k bGUgY2FzZSAjMiwgdGhlcmUgaXMgYW4gYW1iaWd1aXR5IG5lYXIgdGhlIHBvaW50IG9mIG9m ZnNldAorCSAqIHdyYXBhcm91bmQuICBJZiB3ZSBzZWUgbmV4dCBtdWx0aXhhY3QncyBvZmZz ZXQgaXMgb25lLCBpcyB0aGF0IG91cgorCSAqIG11bHRpeGFjdCdzIGFjdHVhbCBlbmRwb2lu dCwgb3IgZGlkIGl0IGVuZCBhdCB6ZXJvIHdpdGggYSBzdWJzZXF1ZW50CisJICogaW5jcmVt ZW50PyAgV2UgaGFuZGxlIHRoaXMgdXNpbmcgdGhlIGtub3dsZWRnZSB0aGF0IGlmIHRoZSB6 ZXJvJ3RoCisJICogbWVtYmVyIHNsb3Qgd2Fzbid0IGZpbGxlZCwgaXQnbGwgY29udGFpbiB6 ZXJvLCBhbmQgemVybyBpc24ndCBhIHZhbGlkCisJICogdHJhbnNhY3Rpb24gSUQgc28gaXQg Y2FuJ3QgYmUgYSBtdWx0aXhhY3QgbWVtYmVyLiAgVGhlcmVmb3JlLCBpZiB3ZQorCSAqIHJl YWQgYSB6ZXJvIGZyb20gdGhlIG1lbWJlcnMgYXJyYXksIGp1c3QgaWdub3JlIGl0LgorCSAq LworCisJcGFnZW5vID0gTXVsdGlYYWN0SWRUb09mZnNldFBhZ2UobXVsdGkpOworCWVudHJ5 bm8gPSBNdWx0aVhhY3RJZFRvT2Zmc2V0RW50cnkobXVsdGkpOworCisJYnVmID0gU2xydVJl YWRTd2l0Y2hQYWdlKHN0YXRlLT5vZmZzZXQsIHBhZ2Vubyk7CisJb2ZmcHRyID0gKE9sZE11 bHRpWGFjdE9mZnNldCAqKSBidWY7CisJb2ZmcHRyICs9IGVudHJ5bm87CisJb2Zmc2V0ID0g Km9mZnB0cjsKKworCUFzc2VydChvZmZzZXQgIT0gMCk7CisKKwkvKgorCSAqIFVzZSB0aGUg c2FtZSBpbmNyZW1lbnQgcnVsZSBhcyBHZXROZXdNdWx0aVhhY3RJZCgpLCB0aGF0IGlzLCBk b24ndAorCSAqIGhhbmRsZSB3cmFwYXJvdW5kIGV4cGxpY2l0bHkgdW50aWwgbmVlZGVkLgor CSAqLworCXRtcE1YYWN0ID0gbXVsdGkgKyAxOworCisJaWYgKG5leHRNWGFjdCA9PSB0bXBN WGFjdCkKKwl7CisJCS8qIENvcm5lciBjYXNlIDE6IHRoZXJlIGlzIG5vIG5leHQgbXVsdGl4 YWN0ICovCisJCWxlbmd0aCA9IG5leHRPZmZzZXQgLSBvZmZzZXQ7CisJfQorCWVsc2UKKwl7 CisJCU9sZE11bHRpWGFjdE9mZnNldCBuZXh0TVhPZmZzZXQ7CisKKwkJLyogaGFuZGxlIHdy YXBhcm91bmQgaWYgbmVlZGVkICovCisJCWlmICh0bXBNWGFjdCA8IEZpcnN0TXVsdGlYYWN0 SWQpCisJCQl0bXBNWGFjdCA9IEZpcnN0TXVsdGlYYWN0SWQ7CisKKwkJcHJldl9wYWdlbm8g PSBwYWdlbm87CisKKwkJcGFnZW5vID0gTXVsdGlYYWN0SWRUb09mZnNldFBhZ2UodG1wTVhh Y3QpOworCQllbnRyeW5vID0gTXVsdGlYYWN0SWRUb09mZnNldEVudHJ5KHRtcE1YYWN0KTsK KworCQlpZiAocGFnZW5vICE9IHByZXZfcGFnZW5vKQorCQkJYnVmID0gU2xydVJlYWRTd2l0 Y2hQYWdlKHN0YXRlLT5vZmZzZXQsIHBhZ2Vubyk7CisKKwkJb2ZmcHRyID0gKE9sZE11bHRp WGFjdE9mZnNldCAqKSBidWY7CisJCW9mZnB0ciArPSBlbnRyeW5vOworCQluZXh0TVhPZmZz ZXQgPSAqb2ZmcHRyOworCisJCS8qCisJCSAqIENvcm5lciBjYXNlIDI6IG5leHQgbXVsdGl4 YWN0IGlzIHN0aWxsIGJlaW5nIGZpbGxlZCBpbiwgdGhpcyBtdXN0CisJCSAqIG5vdCBoYXBw ZW4gZHVyaW5nIHVwZ3JhZGUuCisJCSAqLworCQlBc3NlcnQobmV4dE1YT2Zmc2V0ICE9IDAp OworCisJCWxlbmd0aCA9IG5leHRNWE9mZnNldCAtIG9mZnNldDsKKwl9CisKKwlwcmV2X3Bh Z2VubyA9IC0xOworCWZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyssIG9mZnNldCsr KQorCXsKKwkJVHJhbnNhY3Rpb25JZCAqeGFjdHB0cjsKKwkJdWludDMyCSAgICpmbGFnc3B0 cjsKKwkJaW50CQkJZmxhZ3NvZmY7CisJCWludAkJCWJzaGlmdDsKKwkJaW50CQkJbWVtYmVy b2ZmOworCQlNdWx0aVhhY3RTdGF0dXMgc3Q7CisKKwkJcGFnZW5vID0gTVhPZmZzZXRUb01l bWJlclBhZ2Uob2Zmc2V0KTsKKwkJbWVtYmVyb2ZmID0gTVhPZmZzZXRUb01lbWJlck9mZnNl dChvZmZzZXQpOworCisJCWlmIChwYWdlbm8gIT0gcHJldl9wYWdlbm8pCisJCXsKKwkJCWJ1 ZiA9IFNscnVSZWFkU3dpdGNoUGFnZShzdGF0ZS0+bWVtYmVycywgcGFnZW5vKTsKKwkJCXBy ZXZfcGFnZW5vID0gcGFnZW5vOworCQl9CisKKwkJeGFjdHB0ciA9IChUcmFuc2FjdGlvbklk ICopIChidWYgKyBtZW1iZXJvZmYpOworCQlpZiAoIVRyYW5zYWN0aW9uSWRJc1ZhbGlkKCp4 YWN0cHRyKSkKKwkJeworCQkJLyogQ29ybmVyIGNhc2UgMzogd2UgbXVzdCBiZSBsb29raW5n IGF0IHVudXNlZCBzbG90IHplcm8gKi8KKwkJCUFzc2VydChvZmZzZXQgPT0gMCk7CisJCQlj b250aW51ZTsKKwkJfQorCisJCWZsYWdzb2ZmID0gTVhPZmZzZXRUb0ZsYWdzT2Zmc2V0KG9m ZnNldCk7CisJCWJzaGlmdCA9IE1YT2Zmc2V0VG9GbGFnc0JpdFNoaWZ0KG9mZnNldCk7CisJ CWZsYWdzcHRyID0gKHVpbnQzMiAqKSAoYnVmICsgZmxhZ3NvZmYpOworCisJCXN0ID0gKCpm bGFnc3B0ciA+PiBic2hpZnQpICYgTVhBQ1RfTUVNQkVSX1hBQ1RfQklUTUFTSzsKKworCQkv KiBWZXJpZnkgdGhhdCB0aGVyZSBpcyBhIHNpbmdsZSB1cGRhdGUgWGlkIGFtb25nIHRoZSBn aXZlbiBtZW1iZXJzLiAqLworCQlpZiAoSVNVUERBVEVfZnJvbV9teHN0YXR1cyhzdCkpCisJ CXsKKwkJCWlmIChyZXN1bHRfaXN1cGRhdGUpCisJCQkJcGdfZmF0YWwoIm11bHRpeGFjdCAl dSBoYXMgbW9yZSB0aGFuIG9uZSB1cGRhdGluZyBtZW1iZXIiLAorCQkJCQkJIG11bHRpKTsK KwkJCXJlc3VsdF94aWQgPSAqeGFjdHB0cjsKKwkJCXJlc3VsdF9pc3VwZGF0ZSA9IHRydWU7 CisJCX0KKwkJZWxzZSBpZiAoIVRyYW5zYWN0aW9uSWRJc1ZhbGlkKHJlc3VsdF94aWQpKQor CQkJcmVzdWx0X3hpZCA9ICp4YWN0cHRyOworCX0KKworCS8qIEEgbXVsdGl4aWQgd2l0aCB6 ZXJvIG1lbWJlcnMgc2hvdWxkIG5vdCBoYXBwZW4gKi8KKwlBc3NlcnQoVHJhbnNhY3Rpb25J ZElzVmFsaWQocmVzdWx0X3hpZCkpOworCisJKnJlc3VsdCA9IHJlc3VsdF94aWQ7CisJKnN0 YXR1cyA9IHJlc3VsdF9pc3VwZGF0ZSA/IE11bHRpWGFjdFN0YXR1c1VwZGF0ZSA6CisJCU11 bHRpWGFjdFN0YXR1c0ZvcktleVNoYXJlOworfQorCisvKgorICogRnJlZXMgdGhlIG1hbGxv Y2VkIHJlYWRlci4KKyAqLwordm9pZAorRnJlZU9sZE11bHRpWGFjdFJlYWRlcihPbGRNdWx0 aVhhY3RSZWFkZXIgKnN0YXRlKQoreworCUZyZWVTbHJ1UmVhZChzdGF0ZS0+b2Zmc2V0KTsK KwlGcmVlU2xydVJlYWQoc3RhdGUtPm1lbWJlcnMpOworCisJcGZyZWUoc3RhdGUpOworfQpk aWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ191cGdyYWRlL211bHRpeGFjdF9vbGQuaCBiL3NyYy9i aW4vcGdfdXBncmFkZS9tdWx0aXhhY3Rfb2xkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwMDAuLjhlYjVhZjJjY2FmCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2Jp bi9wZ191cGdyYWRlL211bHRpeGFjdF9vbGQuaApAQCAtMCwwICsxLDI5IEBACisvKgorICog bXVsdGl4YWN0X29sZC5oCisgKgorICogQ29weXJpZ2h0IChjKSAyMDI1LCBQb3N0Z3JlU1FM IEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICogc3JjL2Jpbi9wZ191cGdyYWRlL211bHRp eGFjdF9vbGQuaAorICovCisKKyNpbmNsdWRlICJhY2Nlc3MvbXVsdGl4YWN0LmgiCisjaW5j bHVkZSAic2xydV9pby5oIgorCit0eXBlZGVmIHVpbnQzMiBPbGRNdWx0aVhhY3RPZmZzZXQ7 CisKK3R5cGVkZWYgc3RydWN0IE9sZE11bHRpWGFjdFJlYWRlcgoreworCU11bHRpWGFjdElk IG5leHRNWGFjdDsKKwlPbGRNdWx0aVhhY3RPZmZzZXQgbmV4dE9mZnNldDsKKworCVNscnVT ZWdTdGF0ZSAqb2Zmc2V0OworCVNscnVTZWdTdGF0ZSAqbWVtYmVyczsKK30gT2xkTXVsdGlY YWN0UmVhZGVyOworCitleHRlcm4gT2xkTXVsdGlYYWN0UmVhZGVyICpBbGxvY09sZE11bHRp WGFjdFJlYWQoY2hhciAqcGdkYXRhLAorCQkJCQkJCQkJCQkJIE11bHRpWGFjdElkIG5leHRN dWx0aSwKKwkJCQkJCQkJCQkJCSBPbGRNdWx0aVhhY3RPZmZzZXQgbmV4dE9mZnNldCk7Citl eHRlcm4gdm9pZCBHZXRPbGRNdWx0aVhhY3RJZFNpbmdsZU1lbWJlcihPbGRNdWx0aVhhY3RS ZWFkZXIgKnN0YXRlLAorCQkJCQkJCQkJCSAgTXVsdGlYYWN0SWQgbXVsdGksCisJCQkJCQkJ CQkJICBUcmFuc2FjdGlvbklkICpyZXN1bHQsCisJCQkJCQkJCQkJICBNdWx0aVhhY3RTdGF0 dXMgKnN0YXR1cyk7CitleHRlcm4gdm9pZCBGcmVlT2xkTXVsdGlYYWN0UmVhZGVyKE9sZE11 bHRpWGFjdFJlYWRlciAqcmVhZGVyKTsKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfdXBncmFk ZS9wZ191cGdyYWRlLmMgYi9zcmMvYmluL3BnX3VwZ3JhZGUvcGdfdXBncmFkZS5jCmluZGV4 IDQ5MGU5OGZhMjZmLi4wZmRkMDVjMTI3YyAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ191cGdy YWRlL3BnX3VwZ3JhZGUuYworKysgYi9zcmMvYmluL3BnX3VwZ3JhZGUvcGdfdXBncmFkZS5j CkBAIC00OCw2ICs0OCw4IEBACiAjaW5jbHVkZSAiY29tbW9uL2xvZ2dpbmcuaCIKICNpbmNs dWRlICJjb21tb24vcmVzdHJpY3RlZF90b2tlbi5oIgogI2luY2x1ZGUgImZlX3V0aWxzL3N0 cmluZ191dGlscy5oIgorI2luY2x1ZGUgIm11bHRpeGFjdF9vbGQuaCIKKyNpbmNsdWRlICJt dWx0aXhhY3RfbmV3LmgiCiAjaW5jbHVkZSAicGdfdXBncmFkZS5oIgogCiAvKgpAQCAtNzY5 LDYgKzc3MSw4MSBAQCBjb3B5X3N1YmRpcl9maWxlcyhjb25zdCBjaGFyICpvbGRfc3ViZGly LCBjb25zdCBjaGFyICpuZXdfc3ViZGlyKQogCWNoZWNrX29rKCk7CiB9CiAKKy8qCisgKiBD b252ZXJ0IHBnX211bHRpeGFjdC9vZmZzZXQgYW5kIC9tZW1iZXJzIHRvIG5ldyBmb3JtYXQg d2l0aCA2NC1iaXQgb2Zmc2V0cy4KKyAqLworc3RhdGljIHZvaWQKK2NvbnZlcnRfbXVsdGl4 YWN0cyhNdWx0aVhhY3RJZCAqbmV3X254dG11bHRpLCBNdWx0aVhhY3RPZmZzZXQgKm5ld19u eHRteG9mZikKK3sKKwlNdWx0aVhhY3RJZCBvbGRlc3RfbXVsdGksCisJCQkJbmV4dF9tdWx0 aTsKKwlPbGRNdWx0aVhhY3RSZWFkZXIgKm9sZF9yZWFkZXI7CisJTXVsdGlYYWN0V3JpdGVy ICpuZXdfd3JpdGVyOworCU11bHRpWGFjdE9mZnNldCBuZXh0X29mZnNldDsKKworCS8qCisJ ICogVGhlIHJhbmdlIG9mIHZhbGlkIG11bHRpIFhJRHMgaXMgdW5jaGFuZ2VkIGJ5IHRoZSBj b252ZXJzaW9uICh0aGV5IGFyZQorCSAqIHJlZmVyZW5jZWQgZnJvbSB0aGUgaGVhcCB0YWJs ZXMpLCBidXQgdGhlIG1lbWJlcnMgU0xSVSBpcyByZXdyaXR0ZW4gdG8KKwkgKiBzdGFydCBm cm9tIG9mZnNldCAxLgorCSAqLworCW9sZGVzdF9tdWx0aSA9IG9sZF9jbHVzdGVyLmNvbnRy b2xkYXRhLmNoa3BudF9vbGRzdE11bHRpOworCW5leHRfbXVsdGkgPSBvbGRfY2x1c3Rlci5j b250cm9sZGF0YS5jaGtwbnRfbnh0bXVsdGk7CisJbmV4dF9vZmZzZXQgPSAxOworCisJb2xk X3JlYWRlciA9IEFsbG9jT2xkTXVsdGlYYWN0UmVhZChvbGRfY2x1c3Rlci5wZ2RhdGEsCisJ CQkJCQkJCQkgICBvbGRfY2x1c3Rlci5jb250cm9sZGF0YS5jaGtwbnRfbnh0bXVsdGksCisJ CQkJCQkJCQkgICBvbGRfY2x1c3Rlci5jb250cm9sZGF0YS5jaGtwbnRfbnh0bXhvZmYpOwor CW5ld193cml0ZXIgPSBBbGxvY011bHRpWGFjdFdyaXRlKG5ld19jbHVzdGVyLnBnZGF0YSwK KwkJCQkJCQkJCSBvbGRlc3RfbXVsdGksIG5leHRfb2Zmc2V0KTsKKworCS8qIGhhbmRsZSB3 cmFwYXJvdW5kICovCisJaWYgKG5leHRfbXVsdGkgPCBGaXJzdE11bHRpWGFjdElkKQorCQlu ZXh0X211bHRpID0gRmlyc3RNdWx0aVhhY3RJZDsKKworCS8qCisJICogUmVhZCBtdWx0aXhp ZHMgZnJvbSBvbGQgZmlsZXMgb25lIGJ5IG9uZSwgYW5kIHdyaXRlIHRoZW0gYmFjayBpbiB0 aGUKKwkgKiBuZXcgZm9ybWF0LgorCSAqLworCWZvciAoTXVsdGlYYWN0SWQgbXVsdGkgPSBv bGRlc3RfbXVsdGk7IG11bHRpICE9IG5leHRfbXVsdGk7KQorCXsKKwkJVHJhbnNhY3Rpb25J ZCB4aWQ7CisJCU11bHRpWGFjdFN0YXR1cyBzdGF0dXM7CisJCU11bHRpWGFjdE1lbWJlciBt ZW1iZXI7CisKKwkJLyoKKwkJICogUmVhZCB0aGUgb2xkIG11bHRpeGlkLiAgVGhlIGxvY2tp bmctb25seSBYSURzIHRoYXQgbWF5IGJlIHBhcnQgb2YKKwkJICogbXVsdGkteGlkcyBkb24n dCBtYXR0ZXIgYWZ0ZXIgdXBncmFkZSwgYXMgdGhlcmUgY2FuIGJlIG5vCisJCSAqIHRyYW5z YWN0aW9ucyBydW5uaW5nIGFjcm9zcyB1cGdyYWRlLiAgU28gYXMgYSBsaXR0bGUgb3B0aW1p emF0aW9uLAorCQkgKiB3ZSBvbmx5IHJlYWQgb25lIG1lbWJlciBmcm9tIGVhY2ggbXVsdGl4 aWQ6IHRoZSBvbmUgdXBkYXRpbmcgb25lLAorCQkgKiBvciBpZiB0aGVyZSB3YXMgbm8gdXBk YXRlLCBhcmJpdHJhcmlseSB0aGUgZmlyc3QgbG9ja2luZyB4aWQuCisJCSAqLworCQlHZXRP bGRNdWx0aVhhY3RJZFNpbmdsZU1lbWJlcihvbGRfcmVhZGVyLCBtdWx0aSwgJnhpZCwgJnN0 YXR1cyk7CisKKwkJLyogV3JpdGUgaXQgb3V0IGluIG5ldyBmb3JtYXQgKi8KKwkJbWVtYmVy LnhpZCA9IHhpZDsKKwkJbWVtYmVyLnN0YXR1cyA9IHN0YXR1czsKKwkJUmVjb3JkTmV3TXVs dGlYYWN0KG5ld193cml0ZXIsIG5leHRfb2Zmc2V0LCBtdWx0aSwgMSwgJm1lbWJlcik7CisK KwkJbmV4dF9vZmZzZXQgKz0gMTsKKwkJbXVsdGkrKzsKKwkJLyogaGFuZGxlIHdyYXBhcm91 bmQgKi8KKwkJaWYgKG11bHRpIDwgRmlyc3RNdWx0aVhhY3RJZCkKKwkJCW11bHRpID0gRmly c3RNdWx0aVhhY3RJZDsKKwl9CisKKwkvKgorCSAqIFVwZGF0ZSB0aGUgbmV4dE1YYWN0L09m ZnNldCB2YWx1ZXMgaW4gdGhlIGNvbnRyb2wgZmlsZSB0byBtYXRjaCB3aGF0IHdlCisJICog d3JvdGUuICBUaGUgbmV4dE1YYWN0IGlzIHVuY2hhbmdlZCwgYnV0IG5leHRPZmZzZXQgd2ls bCBiZSBkaWZmZXJlbnQuCisJICovCisJQXNzZXJ0KG5leHRfbXVsdGkgPT0gb2xkX2NsdXN0 ZXIuY29udHJvbGRhdGEuY2hrcG50X254dG11bHRpKTsKKwkqbmV3X254dG11bHRpID0gbmV4 dF9tdWx0aTsKKwkqbmV3X254dG14b2ZmID0gbmV4dF9vZmZzZXQ7CisKKwkvKiBSZWxlYXNl IHJlc291cmNlcyAqLworCUZyZWVNdWx0aVhhY3RXcml0ZShuZXdfd3JpdGVyKTsKKwlGcmVl T2xkTXVsdGlYYWN0UmVhZGVyKG9sZF9yZWFkZXIpOworfQorCiBzdGF0aWMgdm9pZAogY29w eV94YWN0X3hsb2dfeGlkKHZvaWQpCiB7CkBAIC04MTYsOCArODkzLDI5IEBAIGNvcHlfeGFj dF94bG9nX3hpZCh2b2lkKQogCWlmIChvbGRfY2x1c3Rlci5jb250cm9sZGF0YS5jYXRfdmVy ID49IE1VTFRJWEFDVF9GT1JNQVRDSEFOR0VfQ0FUX1ZFUiAmJgogCQluZXdfY2x1c3Rlci5j b250cm9sZGF0YS5jYXRfdmVyID49IE1VTFRJWEFDVF9GT1JNQVRDSEFOR0VfQ0FUX1ZFUikK IAl7Ci0JCWNvcHlfc3ViZGlyX2ZpbGVzKCJwZ19tdWx0aXhhY3Qvb2Zmc2V0cyIsICJwZ19t dWx0aXhhY3Qvb2Zmc2V0cyIpOwotCQljb3B5X3N1YmRpcl9maWxlcygicGdfbXVsdGl4YWN0 L21lbWJlcnMiLCAicGdfbXVsdGl4YWN0L21lbWJlcnMiKTsKKwkJTXVsdGlYYWN0SWQgbmV3 X254dG11bHRpID0gb2xkX2NsdXN0ZXIuY29udHJvbGRhdGEuY2hrcG50X254dG11bHRpOwor CQlNdWx0aVhhY3RPZmZzZXQgbmV3X254dG14b2ZmID0gb2xkX2NsdXN0ZXIuY29udHJvbGRh dGEuY2hrcG50X254dG14b2ZmOworCisJCS8qCisJCSAqIElmIHRoZSBvbGQgc2VydmVyIGlz IGJlZm9yZSB0aGUKKwkJICogTVVMVElYQUNUT0ZGU0VUX0ZPUk1BVENIQU5HRV9DQVRfVkVS IGl0IG11c3QgaGF2ZSAzMi1iaXQgbXVsdGl4aWQKKwkJICogb2Zmc2V0cywgdGh1cyBpdCBz aG91bGQgYmUgY29udmVydGVkLgorCQkgKi8KKwkJaWYgKG9sZF9jbHVzdGVyLmNvbnRyb2xk YXRhLmNhdF92ZXIgPCBNVUxUSVhBQ1RPRkZTRVRfRk9STUFUQ0hBTkdFX0NBVF9WRVIgJiYK KwkJCW5ld19jbHVzdGVyLmNvbnRyb2xkYXRhLmNhdF92ZXIgPj0gTVVMVElYQUNUT0ZGU0VU X0ZPUk1BVENIQU5HRV9DQVRfVkVSKQorCQl7CisJCQlyZW1vdmVfbmV3X3N1YmRpcigicGdf bXVsdGl4YWN0L21lbWJlcnMiLCBmYWxzZSk7CisJCQlyZW1vdmVfbmV3X3N1YmRpcigicGdf bXVsdGl4YWN0L29mZnNldHMiLCBmYWxzZSk7CisKKwkJCXByZXBfc3RhdHVzKCJDb252ZXJ0 aW5nIHBnX211bHRpeGFjdC9vZmZzZXRzIHRvIDY0LWJpdCIpOworCQkJY29udmVydF9tdWx0 aXhhY3RzKCZuZXdfbnh0bXVsdGksICZuZXdfbnh0bXhvZmYpOworCQkJY2hlY2tfb2soKTsK KwkJfQorCQllbHNlCisJCXsKKwkJCWNvcHlfc3ViZGlyX2ZpbGVzKCJwZ19tdWx0aXhhY3Qv b2Zmc2V0cyIsICJwZ19tdWx0aXhhY3Qvb2Zmc2V0cyIpOworCQkJY29weV9zdWJkaXJfZmls ZXMoInBnX211bHRpeGFjdC9tZW1iZXJzIiwgInBnX211bHRpeGFjdC9tZW1iZXJzIik7CisJ CX0KIAogCQlwcmVwX3N0YXR1cygiU2V0dGluZyBuZXh0IG11bHRpeGFjdCBJRCBhbmQgb2Zm c2V0IGZvciBuZXcgY2x1c3RlciIpOwogCkBAIC04MjYsMTAgKzkyNCw4IEBAIGNvcHlfeGFj dF94bG9nX3hpZCh2b2lkKQogCQkgKiBjb3VudGVycyBoZXJlIGFuZCB0aGUgb2xkZXN0IG11 bHRpIHByZXNlbnQgb24gc3lzdGVtLgogCQkgKi8KIAkJZXhlY19wcm9nKFVUSUxJVFlfTE9H X0ZJTEUsIE5VTEwsIHRydWUsIHRydWUsCi0JCQkJICAiXCIlcy9wZ19yZXNldHdhbFwiIC1P ICV1IC1tICV1LCV1IFwiJXNcIiIsCi0JCQkJICBuZXdfY2x1c3Rlci5iaW5kaXIsCi0JCQkJ ICBvbGRfY2x1c3Rlci5jb250cm9sZGF0YS5jaGtwbnRfbnh0bXhvZmYsCi0JCQkJICBvbGRf Y2x1c3Rlci5jb250cm9sZGF0YS5jaGtwbnRfbnh0bXVsdGksCisJCQkJICAiXCIlcy9wZ19y ZXNldHdhbFwiIC1PICUiIFBSSXU2NCAiIC1tICV1LCV1IFwiJXNcIiIsCisJCQkJICBuZXdf Y2x1c3Rlci5iaW5kaXIsIG5ld19ueHRteG9mZiwgbmV3X254dG11bHRpLAogCQkJCSAgb2xk X2NsdXN0ZXIuY29udHJvbGRhdGEuY2hrcG50X29sZHN0TXVsdGksCiAJCQkJICBuZXdfY2x1 c3Rlci5wZ2RhdGEpOwogCQljaGVja19vaygpOwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ191 cGdyYWRlL3BnX3VwZ3JhZGUuaCBiL3NyYy9iaW4vcGdfdXBncmFkZS9wZ191cGdyYWRlLmgK aW5kZXggZTg2MzM2ZjRiZTkuLjEyN2IyY2IwMGZhIDEwMDY0NAotLS0gYS9zcmMvYmluL3Bn X3VwZ3JhZGUvcGdfdXBncmFkZS5oCisrKyBiL3NyYy9iaW4vcGdfdXBncmFkZS9wZ191cGdy YWRlLmgKQEAgLTExNCw2ICsxMTQsMTEgQEAgZXh0ZXJuIGNoYXIgKm91dHB1dF9maWxlc1td OwogICovCiAjZGVmaW5lIE1VTFRJWEFDVF9GT1JNQVRDSEFOR0VfQ0FUX1ZFUiAyMDEzMDEy MzEKIAorLyoKKyAqIFN3aWN0aCBmcm9tIDMyLWJpdCB0byA2NC1iaXQgZm9yIG11bHRpeGlk IG9mZnNldHMuCisgKi8KKyNkZWZpbmUgTVVMVElYQUNUT0ZGU0VUX0ZPUk1BVENIQU5HRV9D QVRfVkVSIDk5OTk5OTk5OQorCiAvKgogICogbGFyZ2Ugb2JqZWN0IGNodW5rIHNpemUgYWRk ZWQgdG8gcGdfY29udHJvbGRhdGEsCiAgKiBjb21taXQgNWY5M2MzNzgwNWU3NDg1NDg4NDgw OTE2YjQ1ODVlMDk4ZDNjYzg4MwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ191cGdyYWRlL3Ns cnVfaW8uYyBiL3NyYy9iaW4vcGdfdXBncmFkZS9zbHJ1X2lvLmMKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjJhMDYyNGVhOGI4Ci0tLSAvZGV2L251bGwKKysr IGIvc3JjL2Jpbi9wZ191cGdyYWRlL3NscnVfaW8uYwpAQCAtMCwwICsxLDIzOSBAQAorLyoK KyAqIHNscnVfaW8uYworICoKKyAqIFJvdXRpbmVzIGZvciByZWFkaW5nIGFuZCB3cml0aW5n IFNMUlUgZmlsZXMgZHVyaW5nIHVwZ3JhZGUuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDI1 LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICogc3JjL2Jpbi9wZ191 cGdyYWRlL3NscnVfaW8uYworICovCisKKyNpbmNsdWRlICJwb3N0Z3Jlc19mZS5oIgorCisj aW5jbHVkZSA8ZmNudGwuaD4KKworI2luY2x1ZGUgImNvbW1vbi9mZV9tZW11dGlscy5oIgor I2luY2x1ZGUgImNvbW1vbi9maWxlX3Blcm0uaCIKKyNpbmNsdWRlICJjb21tb24vZmlsZV91 dGlscy5oIgorI2luY2x1ZGUgInBvcnQvcGdfaW92ZWMuaCIKKyNpbmNsdWRlICJwZ191cGdy YWRlLmgiCisjaW5jbHVkZSAic2xydV9pby5oIgorCisvKgorICogU3RhdGUgZm9yIHJlYWRp bmcgb3Igd3JpdGluZyBhbiBTTFJVLCB3aXRoIGEgb25lIHBhZ2UgYnVmZmVyLgorICovCit0 eXBlZGVmIHN0cnVjdCBTbHJ1U2VnU3RhdGUKK3sKKwlib29sCQl3cml0aW5nOworCWJvb2wJ CWxvbmdfc2VnbWVudF9uYW1lczsKKworCWNoYXIJICAgKmRpcjsKKwljaGFyCSAgICpmbjsK KwlpbnQJCQlmZDsKKwlpbnQ2NAkJc2Vnbm87CisJdWludDY0CQlwYWdlbm87CisKKwlQR0Fs aWduZWRCbG9jayBidWY7Cit9IFNscnVTZWdTdGF0ZTsKKworc3RhdGljIGlubGluZSBTbHJ1 U2VnU3RhdGUgKgorQWxsb2NTbHJ1U2VnU3RhdGUoY2hhciAqZGlyKQoreworCVNscnVTZWdT dGF0ZSAqc3RhdGUgPSBwZ19tYWxsb2Moc2l6ZW9mKCpzdGF0ZSkpOworCisJc3RhdGUtPnNl Z25vID0gLTE7CisJc3RhdGUtPnBhZ2VubyA9IDA7CisJc3RhdGUtPmRpciA9IHBzdHJkdXAo ZGlyKTsKKwlzdGF0ZS0+ZmQgPSAtMTsKKwlzdGF0ZS0+Zm4gPSBOVUxMOworCisJcmV0dXJu IHN0YXRlOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK1NscnVGbHVzaChTbHJ1U2VnU3Rh dGUgKnN0YXRlKQoreworCXN0cnVjdCBpb3ZlYyBpb3ZlYyA9IHsKKwkJLmlvdl9iYXNlID0g JnN0YXRlLT5idWYsCisJCS5pb3ZfbGVuID0gQkxDS1NaLAorCX07CisJb2ZmX3QJCW9mZnNl dDsKKworCWlmIChzdGF0ZS0+c2Vnbm8gPT0gLTEpCisJCXJldHVybjsKKworCW9mZnNldCA9 IChzdGF0ZS0+cGFnZW5vICUgU0xSVV9QQUdFU19QRVJfU0VHTUVOVCkgKiBCTENLU1o7CisK KwlpZiAocGdfcHdyaXRldl93aXRoX3JldHJ5KHN0YXRlLT5mZCwgJmlvdmVjLCAxLCBvZmZz ZXQpIDwgMCkKKwkJcGdfZmF0YWwoImNvdWxkIG5vdCB3cml0ZSBmaWxlIFwiJXNcIjogJW0i LCBzdGF0ZS0+Zm4pOworfQorCisvKgorICogQ3JlYXRlIHNscnUgcmVhZGVyIGZvciBkaXIu CisgKgorICogUmV0dXJucyB0aGUgbWFsbG9jZWQgbWVtb3J5IHVzZWQgYnkgdGhlIGFsbCBv dGhlciByZWFkIGNhbGxzIGluIHRoaXMgbW9kdWxlLgorICovCitTbHJ1U2VnU3RhdGUgKgor QWxsb2NTbHJ1UmVhZChjaGFyICpkaXIpCit7CisJU2xydVNlZ1N0YXRlICpzdGF0ZSA9IEFs bG9jU2xydVNlZ1N0YXRlKGRpcik7CisKKwlzdGF0ZS0+d3JpdGluZyA9IGZhbHNlOworCisJ cmV0dXJuIHN0YXRlOworfQorCisvKgorICogT3BlbiBnaXZlbiBwYWdlIGZvciByZWFkaW5n LgorICoKKyAqIFJlYWRpbmcgY2FuIGJlIGRvbmUgaW4gcmFuZG9tIG9yZGVyLgorICovCitj aGFyICoKK1NscnVSZWFkU3dpdGNoUGFnZShTbHJ1U2VnU3RhdGUgKnN0YXRlLCB1aW50NjQg cGFnZW5vKQoreworCWludDY0CQlzZWdubzsKKworCUFzc2VydCghc3RhdGUtPndyaXRpbmcp OwkvKiByZWFkIG9ubHkgbW9kZSAqLworCisJaWYgKHN0YXRlLT5zZWdubyAhPSAtMSAmJiBw YWdlbm8gPT0gc3RhdGUtPnBhZ2VubykKKwkJcmV0dXJuIHN0YXRlLT5idWYuZGF0YTsKKwor CXNlZ25vID0gcGFnZW5vIC8gU0xSVV9QQUdFU19QRVJfU0VHTUVOVDsKKwlpZiAoc2Vnbm8g IT0gc3RhdGUtPnNlZ25vKQorCXsKKwkJaWYgKHN0YXRlLT5zZWdubyAhPSAtMSkKKwkJewor CQkJY2xvc2Uoc3RhdGUtPmZkKTsKKwkJCXN0YXRlLT5mZCA9IC0xOworCisJCQlwZ19mcmVl KHN0YXRlLT5mbik7CisJCQlzdGF0ZS0+Zm4gPSBOVUxMOworCQl9CisKKwkJLyogT3BlbiBu ZXcgc2VnbWVudCAqLworCQlzdGF0ZS0+Zm4gPSBwc3ByaW50ZigiJXMvJTA0WCIsIHN0YXRl LT5kaXIsICh1bnNpZ25lZCBpbnQpIHNlZ25vKTsKKwkJaWYgKChzdGF0ZS0+ZmQgPSBvcGVu KHN0YXRlLT5mbiwgT19SRE9OTFkgfCBQR19CSU5BUlksIDApKSA8IDApCisJCQlwZ19mYXRh bCgiY291bGQgbm90IG9wZW4gZmlsZSBcIiVzXCI6ICVtIiwgc3RhdGUtPmZuKTsKKwl9CisK KwlzdGF0ZS0+c2Vnbm8gPSBzZWdubzsKKworCXsKKwkJc3RydWN0IGlvdmVjIGlvdmVjID0g eworCQkJLmlvdl9iYXNlID0gJnN0YXRlLT5idWYsCisJCQkuaW92X2xlbiA9IEJMQ0tTWiwK KwkJfTsKKwkJb2ZmX3QJCW9mZnNldCA9IChwYWdlbm8gJSBTTFJVX1BBR0VTX1BFUl9TRUdN RU5UKSAqIEJMQ0tTWjsKKworCQlpZiAocGdfcHJlYWR2KHN0YXRlLT5mZCwgJmlvdmVjLCAx LCBvZmZzZXQpIDwgMCkKKwkJCXBnX2ZhdGFsKCJjb3VsZCBub3QgcmVhZCBmaWxlIFwiJXNc IjogJW0iLCBzdGF0ZS0+Zm4pOworCisJCXN0YXRlLT5wYWdlbm8gPSBwYWdlbm87CisJfQor CisJcmV0dXJuIHN0YXRlLT5idWYuZGF0YTsKK30KKworLyoKKyAqIEZyZWVzIHRoZSBtYWxs b2NlZCByZWFkZXIuCisgKi8KK3ZvaWQKK0ZyZWVTbHJ1UmVhZChTbHJ1U2VnU3RhdGUgKnN0 YXRlKQoreworCUFzc2VydCghc3RhdGUtPndyaXRpbmcpOwkvKiByZWFkIG9ubHkgbW9kZSAq LworCisJY2xvc2Uoc3RhdGUtPmZkKTsKKwlwZ19mcmVlKHN0YXRlKTsKK30KKworLyoKKyAq IE9wZW4gdGhlIGdpdmVuIHBhZ2UgZm9yIHdyaXRpbmcuCisgKgorICogTk9URTogVGhpcyB1 c2VzIE9fRVhDTCB3aGVuIHN0ZXBwaW5nIHRvIGEgbmV3IHNlZ21lbnQsIHNvIHRoaXMgYXNz dW1lcyB0aGF0CisgKiBlYWNoIHNlZ21lbnQgaXMgd3JpdHRlbiBpbiBmdWxsIGJlZm9yZSBt b3Zpbmcgb24gdG8gbmV4dCBvbmUuICBUaGlzCisgKiBsaW1pdGF0aW9uIHdvdWxkIGJlIGVh c3kgdG8gbGlmdCBpZiBuZWVkZWQsIGJ1dCBpdCBmaXRzIHRoZSB1c2FnZSBwYXR0ZXJuIG9m CisgKiBjdXJyZW50IGNhbGxlcnMuCisgKi8KK2NoYXIgKgorU2xydVdyaXRlU3dpdGNoUGFn ZShTbHJ1U2VnU3RhdGUgKnN0YXRlLCB1aW50NjQgcGFnZW5vKQoreworCWludDY0CQlzZWdu byA9IHBhZ2VubyAvIFNMUlVfUEFHRVNfUEVSX1NFR01FTlQ7CisJb2ZmX3QJCW9mZnNldDsK KworCWlmIChzdGF0ZS0+c2Vnbm8gIT0gLTEgJiYgcGFnZW5vID09IHN0YXRlLT5wYWdlbm8p CisJCXJldHVybiBzdGF0ZS0+YnVmLmRhdGE7CisKKwlzZWdubyA9IHBhZ2VubyAvIFNMUlVf UEFHRVNfUEVSX1NFR01FTlQ7CisJb2Zmc2V0ID0gKHBhZ2VubyAlIFNMUlVfUEFHRVNfUEVS X1NFR01FTlQpICogQkxDS1NaOworCisJU2xydUZsdXNoKHN0YXRlKTsKKwltZW1zZXQoc3Rh dGUtPmJ1Zi5kYXRhLCAwLCBCTENLU1opOworCisJaWYgKHNlZ25vICE9IHN0YXRlLT5zZWdu bykKKwl7CisJCWlmIChzdGF0ZS0+c2Vnbm8gIT0gLTEpCisJCXsKKwkJCWNsb3NlKHN0YXRl LT5mZCk7CisJCQlzdGF0ZS0+ZmQgPSAtMTsKKworCQkJcGdfZnJlZShzdGF0ZS0+Zm4pOwor CQkJc3RhdGUtPmZuID0gTlVMTDsKKwkJfQorCisJCS8qIENyZWF0ZSB0aGUgc2VnbWVudCAq LworCQlpZiAoc3RhdGUtPmxvbmdfc2VnbWVudF9uYW1lcykKKwkJeworCQkJQXNzZXJ0KHNl Z25vID49IDAgJiYgc2Vnbm8gPD0gSU5UNjRDT05TVCgweEZGRkZGRkZGRkZGRkZGRikpOwor CQkJc3RhdGUtPmZuID0gcHNwcmludGYoIiVzLyUwMTUiIFBSSVg2NCwgc3RhdGUtPmRpciwg c2Vnbm8pOworCQl9CisJCWVsc2UKKwkJeworCQkJQXNzZXJ0KHNlZ25vID49IDAgJiYgc2Vn bm8gPD0gSU5UNjRDT05TVCgweEZGRkZGRikpOworCQkJc3RhdGUtPmZuID0gcHNwcmludGYo IiVzLyUwNFgiLCBzdGF0ZS0+ZGlyLCAodW5zaWduZWQgaW50KSBzZWdubyk7CisJCX0KKwor CQlpZiAoKHN0YXRlLT5mZCA9IG9wZW4oc3RhdGUtPmZuLCBPX1JEV1IgfCBPX0NSRUFUIHwg T19FWENMIHwgUEdfQklOQVJZLAorCQkJCQkJCSAgcGdfZmlsZV9jcmVhdGVfbW9kZSkpIDwg MCkKKwkJeworCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBjcmVhdGUgZmlsZSBcIiVzXCI6ICVt Iiwgc3RhdGUtPmZuKTsKKwkJfQorCisJCXN0YXRlLT5zZWdubyA9IHNlZ25vOworCisJCWlm IChvZmZzZXQgPiAwICYmIHBnX3B3cml0ZV96ZXJvcyhzdGF0ZS0+ZmQsIG9mZnNldCwgMCkg PCAwKQorCQkJcGdfZmF0YWwoImNvdWxkIG5vdCB3cml0ZSBmaWxlIFwiJXNcIjogJW0iLCBz dGF0ZS0+Zm4pOworCX0KKworCXN0YXRlLT5wYWdlbm8gPSBwYWdlbm87CisKKwlyZXR1cm4g c3RhdGUtPmJ1Zi5kYXRhOworfQorCisvKgorICogQ3JlYXRlIHNscnUgd3JpdGVyIGZvciBk aXIuCisgKgorICogUmV0dXJucyB0aGUgbWFsbG9jZWQgbWVtb3J5IHVzZWQgYnkgdGhlIGFs bCBvdGhlciB3cml0ZSBjYWxscyBpbiB0aGlzIG1vZHVsZS4KKyAqLworU2xydVNlZ1N0YXRl ICoKK0FsbG9jU2xydVdyaXRlKGNoYXIgKmRpciwgYm9vbCBsb25nX3NlZ21lbnRfbmFtZXMp Cit7CisJU2xydVNlZ1N0YXRlICpzdGF0ZSA9IEFsbG9jU2xydVNlZ1N0YXRlKGRpcik7CisK KwlzdGF0ZS0+d3JpdGluZyA9IHRydWU7CisJc3RhdGUtPmxvbmdfc2VnbWVudF9uYW1lcyA9 IGxvbmdfc2VnbWVudF9uYW1lczsKKworCXJldHVybiBzdGF0ZTsKK30KKworLyoKKyAqIEZy ZWVzIHRoZSBtYWxsb2NlZCB3cml0ZXIuCisgKi8KK3ZvaWQKK0ZyZWVTbHJ1V3JpdGUoU2xy dVNlZ1N0YXRlICpzdGF0ZSkKK3sKKwlBc3NlcnQoc3RhdGUtPndyaXRpbmcpOworCisJU2xy dUZsdXNoKHN0YXRlKTsKKworCWNsb3NlKHN0YXRlLT5mZCk7CisJcGdfZnJlZShzdGF0ZSk7 Cit9CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX3VwZ3JhZGUvc2xydV9pby5oIGIvc3JjL2Jp bi9wZ191cGdyYWRlL3NscnVfaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwMC4uMjk1ZmQwYmViYzQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmluL3BnX3Vw Z3JhZGUvc2xydV9pby5oCkBAIC0wLDAgKzEsMjMgQEAKKy8qCisgKiBzbHJ1X2lvLmgKKyAq CisgKiBDb3B5cmlnaHQgKGMpIDIwMjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50 IEdyb3VwCisgKiBzcmMvYmluL3BnX3VwZ3JhZGUvc2xydV9pby5oCisgKi8KKworLyoKKyAq IFNlZSBhY2Nlc3Mvc2xydS5oCisgKgorICogQ29weSBoZXJlLCBzaW5jZSBzbHJ1LmggY291 bGQgbm90IGJlIGluY2x1ZGVkIGluIGZlIGNvZGUuCisgKi8KKyNkZWZpbmUgU0xSVV9QQUdF U19QRVJfU0VHTUVOVCAzMgorCit0eXBlZGVmIHN0cnVjdCBTbHJ1U2VnU3RhdGUgU2xydVNl Z1N0YXRlOworCitleHRlcm4gU2xydVNlZ1N0YXRlICpBbGxvY1NscnVSZWFkKGNoYXIgKmRp cik7CitleHRlcm4gY2hhciAqU2xydVJlYWRTd2l0Y2hQYWdlKFNscnVTZWdTdGF0ZSAqc3Rh dGUsIHVpbnQ2NCBwYWdlbm8pOworZXh0ZXJuIHZvaWQgRnJlZVNscnVSZWFkKFNscnVTZWdT dGF0ZSAqc3RhdGUpOworCitleHRlcm4gU2xydVNlZ1N0YXRlICpBbGxvY1NscnVXcml0ZShj aGFyICpkaXIsIGJvb2wgbG9uZ19zZWdtZW50X25hbWVzKTsKK2V4dGVybiBjaGFyICpTbHJ1 V3JpdGVTd2l0Y2hQYWdlKFNscnVTZWdTdGF0ZSAqc3RhdGUsIHVpbnQ2NCBwYWdlbm8pOwor ZXh0ZXJuIHZvaWQgRnJlZVNscnVXcml0ZShTbHJ1U2VnU3RhdGUgKnN0YXRlKTsKZGlmZiAt LWdpdCBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0IGIvc3JjL3Rvb2xzL3Bn aW5kZW50L3R5cGVkZWZzLmxpc3QKaW5kZXggNDMyNTA5Mjc3YzkuLjkzOTJiYjcyOWI5IDEw MDY0NAotLS0gYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAorKysgYi9zcmMv dG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdApAQCAtMTcyNSw2ICsxNzI1LDcgQEAgTXVs dGlYYWN0TWVtYmVyCiBNdWx0aVhhY3RPZmZzZXQKIE11bHRpWGFjdFN0YXRlRGF0YQogTXVs dGlYYWN0U3RhdHVzCitNdWx0aVhhY3RXcml0ZXIKIE11bHRpcmFuZ2VJT0RhdGEKIE11bHRp cmFuZ2VQYXJzZVN0YXRlCiBNdWx0aXJhbmdlVHlwZQpAQCAtMTgwOCw2ICsxODA5LDcgQEAg T2Zmc2V0VmFyTm9kZXNfY29udGV4dAogT2lkCiBPaWRPcHRpb25zCiBPa2V5c1N0YXRlCitP bGRNdWx0aVhhY3RSZWFkZXIKIE9sZFRvTmV3TWFwcGluZwogT2xkVG9OZXdNYXBwaW5nRGF0 YQogT25Db21taXRBY3Rpb24KQEAgLTI4MDQsNiArMjgwNiw3IEBAIFNscnVDdGxEYXRhCiBT bHJ1RXJyb3JDYXVzZQogU2xydVBhZ2VTdGF0dXMKIFNscnVTY2FuQ2FsbGJhY2sKK1NscnVT ZWdTdGF0ZQogU2xydVNoYXJlZAogU2xydVNoYXJlZERhdGEKIFNscnVXcml0ZUFsbAotLSAK Mi40Ny4zCgo= --------------wdQFSa6hjCyS1wBv3Joac30h Content-Type: text/x-patch; charset=UTF-8; name="v22-0003-Add-test-for-64-bit-mxoff-in-pg_resetwal.patch" Content-Disposition: attachment; filename="v22-0003-Add-test-for-64-bit-mxoff-in-pg_resetwal.patch" Content-Transfer-Encoding: base64 RnJvbSAzZmI4N2FkYzVmN2M0ZDk0MDYwYjQ4MTMxMjc2MzVhZjY0NmI0NmI2IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbSBPcmxvdiA8b3Jsb3ZtZ0BnbWFpbC5jb20+ CkRhdGU6IFR1ZSwgMjggT2N0IDIwMjUgMTk6MDg6MjYgKzAzMDAKU3ViamVjdDogW1BBVENI IHYyMiAzLzVdIEFkZCB0ZXN0IGZvciA2NC1iaXQgbXhvZmYgaW4gcGdfcmVzZXR3YWwKCi0t LQogc3JjL2Jpbi9wZ19yZXNldHdhbC9tZXNvbi5idWlsZCAgICB8ICAgMSArCiBzcmMvYmlu L3BnX3Jlc2V0d2FsL3QvMDAzX214b2ZmLnBsIHwgMTcwICsrKysrKysrKysrKysrKysrKysr KysrKysrKysrCiAyIGZpbGVzIGNoYW5nZWQsIDE3MSBpbnNlcnRpb25zKCspCiBjcmVhdGUg bW9kZSAxMDA2NDQgc3JjL2Jpbi9wZ19yZXNldHdhbC90LzAwM19teG9mZi5wbAoKZGlmZiAt LWdpdCBhL3NyYy9iaW4vcGdfcmVzZXR3YWwvbWVzb24uYnVpbGQgYi9zcmMvYmluL3BnX3Jl c2V0d2FsL21lc29uLmJ1aWxkCmluZGV4IDI5MDgzMmIyMjk5Li4xZTJkZmIzOGE1YiAxMDA2 NDQKLS0tIGEvc3JjL2Jpbi9wZ19yZXNldHdhbC9tZXNvbi5idWlsZAorKysgYi9zcmMvYmlu L3BnX3Jlc2V0d2FsL21lc29uLmJ1aWxkCkBAIC0yNSw2ICsyNSw3IEBAIHRlc3RzICs9IHsK ICAgICAndGVzdHMnOiBbCiAgICAgICAndC8wMDFfYmFzaWMucGwnLAogICAgICAgJ3QvMDAy X2NvcnJ1cHRlZC5wbCcsCisgICAgICAndC8wMDNfbXhvZmYucGwnLAogICAgIF0sCiAgIH0s CiB9CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX3Jlc2V0d2FsL3QvMDAzX214b2ZmLnBsIGIv c3JjL2Jpbi9wZ19yZXNldHdhbC90LzAwM19teG9mZi5wbApuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwMC4uM2MxYjdmYTFkMzMKLS0tIC9kZXYvbnVsbAorKysgYi9z cmMvYmluL3BnX3Jlc2V0d2FsL3QvMDAzX214b2ZmLnBsCkBAIC0wLDAgKzEsMTcwIEBACisK KyMgQ29weXJpZ2h0IChjKSAyMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBH cm91cAorCit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzIEZBVEFMID0+ICdhbGwnOworCit1 c2UgTWF0aDo6QmlnSW50OwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXI7Cit1c2Ug UG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM7Cit1c2UgVGVzdDo6TW9yZTsKKworc3ViIG14YWN0 X2VhdGVyCit7CisJbXkgJG5vZGUgPSBzaGlmdDsKKwlteSAkdGJsID0gc2hpZnQ7CisKKwkk bm9kZS0+c3RhcnQ7CisJJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiQ1JFQVRF IFRBQkxFICR7dGJsfSAoSSBJTlQgUFJJTUFSWSBLRVksIE5fVVBEQVRFRCBJTlQpICIgLgor CQkiICAgICAgIFdJVEggKEFVVE9WQUNVVU1fRU5BQkxFRD1GQUxTRSk7IiAuCisJCSJJTlNF UlQgSU5UTyAke3RibH0gU0VMRUNUIEcsIDAgRlJPTSBHRU5FUkFURV9TRVJJRVMoMSwgNTAp IEc7Iik7CisKKwkjIGNvbnN1bWUgYXJvdW5kIDEwayBtdWx0aXhhY3Qtb2Zmc2V0ZnMKKwlt eSAkbmNsaWVudHMgPSAxMDsKKwlteSAkdXBkYXRlX2V2ZXJ5ID0gNzU7CisJbXkgQGNvbm5l Y3Rpb25zID0gKCk7CisKKwlmb3IgKDAuLiRuY2xpZW50cykKKwl7CisJCW15ICRjb25uID0g JG5vZGUtPmJhY2tncm91bmRfcHNxbCgncG9zdGdyZXMnKTsKKwkJJGNvbm4tPnF1ZXJ5X3Nh ZmUoIkJFR0lOIik7CisKKwkJcHVzaChAY29ubmVjdGlvbnMsICRjb25uKTsKKwl9CisKKwlm b3IgKG15ICRpID0gMDsgJGkgPCAxMDAwOyAkaSsrKQorCXsKKwkJbXkgJGNvbm4gPSAkY29u bmVjdGlvbnNbJGkgJSAkbmNsaWVudHNdOworCisJCSRjb25uLT5xdWVyeV9zYWZlKCJDT01N SVQ7Iik7CisJCSRjb25uLT5xdWVyeV9zYWZlKCJCRUdJTiIpOworCisJCWlmICgkaSAlICR1 cGRhdGVfZXZlcnkgPT0gMCkKKwkJeworCQkJJGNvbm4tPnF1ZXJ5X3NhZmUoCisJCQkJIlVQ REFURSAke3RibH0gU0VUICIgLgorCQkJCSJOX1VQREFURUQgPSBOX1VQREFURUQgKyAxICIg LgorCQkJCSJXSEVSRSBJID0gJHtpfSAlIDUwIik7CisJCX0KKwkJZWxzZQorCQl7CisJCQkk Y29ubi0+cXVlcnlfc2FmZSgKKwkJCQkiU0VMRUNUICogRlJPTSAke3RibH0gRk9SIEtFWSBT SEFSRSIpOworCQl9CisJfQorCisJZm9yIG15ICRjb25uIChAY29ubmVjdGlvbnMpCisJewor CQkkY29ubi0+cXVpdCgpOworCX0KKworCSRub2RlLT5zdG9wOworfQorCitzdWIgbmV4dF9t eG9mZgoreworCW15ICRub2RlID0gc2hpZnQ7CisJbXkgKCRzdGRvdXQsICRzdGRlcnIpID0K KwkgIHJ1bl9jb21tYW5kKFsgJ3BnX2NvbnRyb2xkYXRhJywgJG5vZGUtPmRhdGFfZGlyIF0p OworCW15IEBjb250cm9sX2RhdGEgPSBzcGxpdCgiXG4iLCAkc3Rkb3V0KTsKKwlteSAkbmV4 dF9teG9mZiA9IHVuZGVmOworCisJZm9yZWFjaCAoQGNvbnRyb2xfZGF0YSkKKwl7CisJCWlm ICgkXyA9fiAvXkxhdGVzdCBjaGVja3BvaW50J3MgTmV4dE11bHRpT2Zmc2V0OlxzKiguKikk L21nKQorCQl7CisJCQkkbmV4dF9teG9mZiA9ICQxOworCQkJbGFzdDsKKwkJfQorCX0KKwlk aWUgIk5leHRNdWx0aU9mZnNldCBub3QgZm91bmQgaW4gY29udHJvbCBmaWxlXG4iCisJCXVu bGVzcyBkZWZpbmVkKCRuZXh0X214b2ZmKTsKKworCXJldHVybiAkbmV4dF9teG9mZjsKK30K Kworc3ViIHJlc2V0X214b2ZmCit7CisJbXkgJG5vZGUgPSBzaGlmdDsKKwlteSAkb2Zmc2V0 ID0gc2hpZnQ7CisJCSRvZmZzZXQgPSBNYXRoOjpCaWdJbnQtPm5ldygkb2Zmc2V0KTsKKwor CSMgR2V0IGJsb2NrIHNpemUKKwlteSAkb3V0ID0gKHJ1bl9jb21tYW5kKFsgJ3BnX3Jlc2V0 d2FsJywgJy0tZHJ5LXJ1bicsICRub2RlLT5kYXRhX2RpciBdKSlbMF07CisJCSRvdXQgPX4g L15EYXRhYmFzZSBibG9jayBzaXplOiAqKFxkKykkL20gb3IgZGllOworCW15ICRibGNrc3og PSAkMTsKKworCSMgUmVzZXQgdG8gbmV3IG9mZnNldAorCW15IEBjbWQgPSAoJ3BnX3Jlc2V0 d2FsJywgJy0tcGdkYXRhJyA9PiAkbm9kZS0+ZGF0YV9kaXIpOworCXB1c2ggQGNtZCwgJy0t bXVsdGl4YWN0LW9mZnNldCcgPT4gJG9mZnNldC0+YXNfaGV4KCk7CisJY29tbWFuZF9vayhc QGNtZCwgJ3NldCBvbGRlc3QgbXVsdGl4YWN0LW9mZnNldCcpOworCisJIyBGaWxsIGVtcHR5 IHBnX211bHRpeGFjdC9tZW1iZXJzIHNlZ21lbnQKKwlteSAkbXVsdCA9IDMyICogaW50KCRi bGNrc3ogLyAyMCkgKiA0OworCW15ICRzZWduYW1lID0gc3ByaW50ZiAiJTAxNVgiLCAkb2Zm c2V0IC8gJG11bHQ7CisKKwlteSBAZGQgPSAoJ2RkJyk7CisJcHVzaCBAZGQsICJpZj0vZGV2 L3plcm8iOworCXB1c2ggQGRkLCAib2Y9IiAuICRub2RlLT5kYXRhX2RpciAuICIvcGdfbXVs dGl4YWN0L21lbWJlcnMvIiAuICRzZWduYW1lOworCXB1c2ggQGRkLCAiYnM9JGJsY2tzeiI7 CisJcHVzaCBAZGQsICJjb3VudD0zMiI7CisJY29tbWFuZF9vayhcQGRkLCAnZmlsbCBlbXB0 eSBtdWx0aXhhY3QtbWVtYmVycycpOworfQorCitteSAoJG9mZjEsICRvZmYyKTsKKworIyBz dGFydCBmcm9tIGRlZmF1bHRzCitteSAkbm9kZTEgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVz dGVyLT5uZXcoJ25vZGUxJyk7Ciskbm9kZTEtPmluaXQ7Ciskb2ZmMSA9IG5leHRfbXhvZmYo JG5vZGUxKTsKK214YWN0X2VhdGVyKCRub2RlMSwgIkZPTyIpOworJG9mZjIgPSBuZXh0X214 b2ZmKCRub2RlMSk7Citub3RlICI+IHN0YXJ0IGZyb20gJG9mZjEsIGZpbmlzaGVkIGF0ICRv ZmYyXG4iOworCisjIHN0YXJ0IGZyb20gYmVmb3JlIDMyLWJpdCB3cmFwYXJvdW5kCitteSAk bm9kZTIgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ25vZGUyJyk7Ciskbm9k ZTItPmluaXQ7CityZXNldF9teG9mZigkbm9kZTIsIDB4RkZGRjAwMDApOworJG9mZjEgPSBu ZXh0X214b2ZmKCRub2RlMik7CitteGFjdF9lYXRlcigkbm9kZTIsICJGT08iKTsKKyRvZmYy ID0gbmV4dF9teG9mZigkbm9kZTIpOworbm90ZSAiPiBzdGFydCBmcm9tICRvZmYxLCBmaW5p c2hlZCBhdCAkb2ZmMlxuIjsKKworIyBzdGFydCBuZWFyIDMyLWJpdCB3cmFwYXJvdW5kCitt eSAkbm9kZTMgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ25vZGUzJyk7Cisk bm9kZTMtPmluaXQ7CityZXNldF9teG9mZigkbm9kZTMsIDB4RkZGRkVDNzcpOworJG9mZjEg PSBuZXh0X214b2ZmKCRub2RlMyk7CitteGFjdF9lYXRlcigkbm9kZTMsICJGT08iKTsKKyRv ZmYyID0gbmV4dF9teG9mZigkbm9kZTMpOworbm90ZSAiPiBzdGFydCBmcm9tICRvZmYxLCBm aW5pc2hlZCBhdCAkb2ZmMlxuIjsKKworIyBzdGFydCBvdmVyIDMyLWJpdCB3cmFwYXJvdW5k CitteSAkbm9kZTQgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ25vZGU0Jyk7 Ciskbm9kZTQtPmluaXQ7CityZXNldF9teG9mZigkbm9kZTQsICcweEZGRkZGRkZGMDAwMCcp OworJG9mZjEgPSBuZXh0X214b2ZmKCRub2RlNCk7CitteGFjdF9lYXRlcigkbm9kZTQsICJG T08iKTsKKyRvZmYyID0gbmV4dF9teG9mZigkbm9kZTMpOworbm90ZSAiPiBzdGFydCBmcm9t ICRvZmYxLCBmaW5pc2hlZCBhdCAkb2ZmMlxuIjsKKworIyBjaGVjayBpbnZhcmlhbnQKKyRu b2RlMS0+c3RhcnQ7Ciskbm9kZTItPnN0YXJ0OworJG5vZGUzLT5zdGFydDsKKyRub2RlNC0+ c3RhcnQ7CisKK215ICR2YXIxID0gJG5vZGUxLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgJ1RB QkxFIEZPTycpOworbXkgJHZhcjIgPSAkbm9kZTItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAn VEFCTEUgRk9PJyk7CitteSAkdmFyMyA9ICRub2RlMy0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICdUQUJMRSBGT08nKTsKK215ICR2YXI0ID0gJG5vZGU0LT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgJ1RBQkxFIEZPTycpOworb2soJHZhcjEgZXEgJHZhcjIgZXEgJHZhcjMgZXEgJHZhcjQs CisJJ2NoZWNrIHRhYmxlIGludmFyaWFudCBpbiBhbGwgbm9kZXMnKTsKKworJG5vZGU0LT5z dG9wOworJG5vZGUzLT5zdG9wOworJG5vZGUyLT5zdG9wOworJG5vZGUxLT5zdG9wOworCitk b25lX3Rlc3RpbmcoKTsKLS0gCjIuNDcuMwoK --------------wdQFSa6hjCyS1wBv3Joac30h Content-Type: text/x-patch; charset=UTF-8; name="v22-0004-TEST-bump-catversion.patch" Content-Disposition: attachment; filename="v22-0004-TEST-bump-catversion.patch" Content-Transfer-Encoding: base64 RnJvbSBmYjc3ZGQ1NWMzNjE1MTRjMzQxOWFiZTQ3YThmYzNjMGMzNzI5ODEzIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbSBPcmxvdiA8b3Jsb3ZtZ0BnbWFpbC5jb20+ CkRhdGU6IEZyaSwgMjQgT2N0IDIwMjUgMTE6NDc6NTAgKzAzMDAKU3ViamVjdDogW1BBVENI IHYyMiA0LzVdIFRFU1Q6IGJ1bXAgY2F0dmVyc2lvbgoKVG8gYXZvaWQgY29uc3RhbnQgQ0Yt Ym90IGNvbXBsYWlucywgbWFrZSBjYXR2ZXJzaW9uIGJ1bXAgaW4gYSBzZXBhcmF0ZQpjb21t aXQuCgpOT1RFOiBrZWVwIGl0IGluIHN5bmMgd2l0aCBNVUxUSVhBQ1RPRkZTRVRfRk9STUFU Q0hBTkdFX0NBVF9WRVIKLS0tCiBzcmMvaW5jbHVkZS9jYXRhbG9nL2NhdHZlcnNpb24uaCB8 IDIgKy0KIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQoK ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvY2F0dmVyc2lvbi5oIGIvc3JjL2lu Y2x1ZGUvY2F0YWxvZy9jYXR2ZXJzaW9uLmgKaW5kZXggNTkzYWVkN2ZlMjEuLjZhMTNmYTNj ZGIwIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRhbG9nL2NhdHZlcnNpb24uaAorKysg Yi9zcmMvaW5jbHVkZS9jYXRhbG9nL2NhdHZlcnNpb24uaApAQCAtNTcsNiArNTcsNiBAQAog ICovCiAKIC8qCQkJCQkJCXl5eXltbWRkTiAqLwotI2RlZmluZSBDQVRBTE9HX1ZFUlNJT05f Tk8JMjAyNTExMDUxCisjZGVmaW5lIENBVEFMT0dfVkVSU0lPTl9OTwk5OTk5OTk5OTkKIAog I2VuZGlmCi0tIAoyLjQ3LjMKCg== --------------wdQFSa6hjCyS1wBv3Joac30h Content-Type: text/x-patch; charset=UTF-8; name="v22-0005-TEST-Add-test-for-64-bit-mxoff-in-pg_upgrade.patch" Content-Disposition: attachment; filename*0="v22-0005-TEST-Add-test-for-64-bit-mxoff-in-pg_upgrade.patch" Content-Transfer-Encoding: base64 RnJvbSA3MzQ0MjdjZWMyYzExN2ZkNjYxNmFhMjM3YmZlY2NkMzBhMWVjNzc3IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbSBPcmxvdiA8b3Jsb3ZtZ0BnbWFpbC5jb20+ CkRhdGU6IFdlZCwgMjkgT2N0IDIwMjUgMTQ6MTk6NTYgKzAzMDAKU3ViamVjdDogW1BBVENI IHYyMiA1LzVdIFRFU1Q6IEFkZCB0ZXN0IGZvciA2NC1iaXQgbXhvZmYgaW4gcGdfdXBncmFk ZQoKLS0tCiBzcmMvYmluL3BnX3VwZ3JhZGUvdC8wMDdfbXhvZmYucGwgfCA0NjEgKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrCiAxIGZpbGUgY2hhbmdlZCwgNDYxIGluc2VydGlv bnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmluL3BnX3VwZ3JhZGUvdC8wMDdfbXhv ZmYucGwKCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX3VwZ3JhZGUvdC8wMDdfbXhvZmYucGwg Yi9zcmMvYmluL3BnX3VwZ3JhZGUvdC8wMDdfbXhvZmYucGwKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMDAuLjI2ZmQ2ZTljNWQwCi0tLSAvZGV2L251bGwKKysrIGIv c3JjL2Jpbi9wZ191cGdyYWRlL3QvMDA3X214b2ZmLnBsCkBAIC0wLDAgKzEsNDYxIEBACisK KyMgQ29weXJpZ2h0IChjKSAyMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBH cm91cAorCit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzIEZBVEFMID0+ICdhbGwnOworCit1 c2UgTWF0aDo6QmlnSW50OwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXI7Cit1c2Ug UG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM7Cit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6QWRqdXN0 RHVtcDsKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpBZGp1c3RVcGdyYWRlOwordXNlIFRlc3Q6 Ok1vcmU7CisKKyMgVGhpcyB0ZXN0IGludm9sdmVzIGRpZmZlcmVudCBtdWx0aXRyYW5zYWN0 aW9uIHN0YXRlcywgc2ltaWxhcmx5IHRvIHRoYXQgb2YKKyMgMDAyX3BnX3VwZ3JhZGUucGwu CisKK3VubGVzcyAoZGVmaW5lZCgkRU5We29sZGluc3RhbGx9KSkKK3sKKwlwbGFuIHNraXBf YWxsID0+ICd0byBydW4gdGVzdCBzZXQgb2xkaW5zdGFsbCBlbnZpcm9ubWVudCB2YXJpYWJs ZSB0byB0aGUgcHJlIDY0LWJpdCBteG9mZiBjbHVzdGVyJzsKK30KKworIyBUZW1wIGRpciBm b3IgYSBkdW1wcy4KK215ICR0ZW1wZGlyID0gUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM6OnRl bXBkaXI7CisKKyMgQ2FuIGJlIGNoYW5nZWQgdG8gdGVzdCB0aGUgb3RoZXIgbW9kZXMuCitt eSAkbW9kZSA9ICRFTlZ7UEdfVEVTVF9QR19VUEdSQURFX01PREV9IHx8ICctLWNvcHknOwor CisjIEdldCBOZXh0TXVsdGlPZmZzZXQuCitzdWIgbmV4dF9teG9mZgoreworCW15ICRub2Rl ID0gc2hpZnQ7CisKKwlteSAkcGdfY29udHJvbGRhdGFfcGF0aCA9CisJCWRlZmluZWQoJG5v ZGUtPmluc3RhbGxfcGF0aCkgPworCQkJJG5vZGUtPmluc3RhbGxfcGF0aCAuICcvYmluL3Bn X2NvbnRyb2xkYXRhJyA6CisJCQkncGdfY29udHJvbGRhdGEnOworCW15ICgkc3Rkb3V0LCAk c3RkZXJyKSA9IHJ1bl9jb21tYW5kKFsgJHBnX2NvbnRyb2xkYXRhX3BhdGgsCisJCQkJCQkJ CQkJCSRub2RlLT5kYXRhX2RpciBdKTsKKwlteSBAY29udHJvbF9kYXRhID0gc3BsaXQoIlxu IiwgJHN0ZG91dCk7CisJbXkgJG5leHRfbXhvZmYgPSB1bmRlZjsKKworCWZvcmVhY2ggKEBj b250cm9sX2RhdGEpCisJeworCQlpZiAoJF8gPX4gL15MYXRlc3QgY2hlY2twb2ludCdzIE5l eHRNdWx0aU9mZnNldDpccyooLiopJC9tZykKKwkJeworCQkJJG5leHRfbXhvZmYgPSAkMTsK KwkJCWxhc3Q7CisJCX0KKwl9CisJZGllICJOZXh0TXVsdGlPZmZzZXQgbm90IGZvdW5kIGlu IGNvbnRyb2wgZmlsZVxuIgorCQl1bmxlc3MgZGVmaW5lZCgkbmV4dF9teG9mZik7CisKKwly ZXR1cm4gJG5leHRfbXhvZmY7Cit9CisKKyMgQ29uc3VtZSBhcm91bmQgMTBrIG9mIG14b2Zm c2V0cy4KK3N1YiBteGFjdF9lYXRlcgoreworCW15ICRub2RlID0gc2hpZnQ7CisJbXkgJHRi bCA9ICdGT08nOworCisJbXkgKCRteG9mZjEsICRteG9mZjIpOworCisJJG14b2ZmMSA9IG5l eHRfbXhvZmYoJG5vZGUpOworCSRub2RlLT5zdGFydDsKKwkkbm9kZS0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsCisJCSJDUkVBVEUgVEFCTEUgJHt0Ymx9IChJIElOVCBQUklNQVJZIEtFWSwg Tl9VUERBVEVEIElOVCkgIiAuCisJCSIgICAgICAgV0lUSCAoQVVUT1ZBQ1VVTV9FTkFCTEVE PUZBTFNFKTsiIC4KKwkJIklOU0VSVCBJTlRPICR7dGJsfSBTRUxFQ1QgRywgMCBGUk9NIEdF TkVSQVRFX1NFUklFUygxLCA1MCkgRzsiKTsKKworCSMgY29uc3VtZSBhcm91bmQgMTBrIG14 b2ZmCisJbXkgJG5jbGllbnRzID0gMTA7CisJbXkgJHVwZGF0ZV9ldmVyeSA9IDc1OworCW15 IEBjb25uZWN0aW9ucyA9ICgpOworCisJZm9yICgwLi4kbmNsaWVudHMpCisJeworCQlteSAk Y29ubiA9ICRub2RlLT5iYWNrZ3JvdW5kX3BzcWwoJ3Bvc3RncmVzJyk7CisJCSRjb25uLT5x dWVyeV9zYWZlKCJCRUdJTiIpOworCisJCXB1c2goQGNvbm5lY3Rpb25zLCAkY29ubik7CisJ fQorCisJZm9yIChteSAkaSA9IDA7ICRpIDwgMTAwMDsgJGkrKykKKwl7CisJCW15ICRjb25u ID0gJGNvbm5lY3Rpb25zWyRpICUgJG5jbGllbnRzXTsKKworCQkkY29ubi0+cXVlcnlfc2Fm ZSgiQ09NTUlUOyIpOworCQkkY29ubi0+cXVlcnlfc2FmZSgiQkVHSU4iKTsKKworCQlpZiAo JGkgJSAkdXBkYXRlX2V2ZXJ5ID09IDApCisJCXsKKwkJCSRjb25uLT5xdWVyeV9zYWZlKAor CQkJCSJVUERBVEUgJHt0Ymx9IFNFVCAiIC4KKwkJCQkiTl9VUERBVEVEID0gTl9VUERBVEVE ICsgMSAiIC4KKwkJCQkiV0hFUkUgSSA9ICR7aX0gJSA1MCIpOworCQl9CisJCWVsc2UKKwkJ eworCQkJJGNvbm4tPnF1ZXJ5X3NhZmUoCisJCQkJIlNFTEVDVCAqIEZST00gJHt0Ymx9IEZP UiBLRVkgU0hBUkUiKTsKKwkJfQorCX0KKworCWZvciBteSAkY29ubiAoQGNvbm5lY3Rpb25z KQorCXsKKwkJJGNvbm4tPnF1aXQoKTsKKwl9CisKKwkkbm9kZS0+c3RvcDsKKwkkbXhvZmYy ID0gbmV4dF9teG9mZigkbm9kZSk7CisKKwlyZXR1cm4gJG14b2ZmMSwgJG14b2ZmMjsKK30K KworIyBDb25zdW1lIGFyb3VuZCAyTSBvZiBteG9mZnNldHMuCitzdWIgbXhhY3RfaHVnZV9l YXRlcgoreworCW15ICRub2RlID0gc2hpZnQ7CisJbXkgJHRibCA9ICdGT08nOworCisJbXkg KCRteG9mZjEsICRteG9mZjIpOworCisJJG14b2ZmMSA9IG5leHRfbXhvZmYoJG5vZGUpOwor CSRub2RlLT5zdGFydDsKKwkkbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJDUkVB VEUgVEFCTEUgJHt0Ymx9IChJIElOVCBQUklNQVJZIEtFWSwgTl9VUERBVEVEIElOVCkgIiAu CisJCSIgICAgICAgV0lUSCAoQVVUT1ZBQ1VVTV9FTkFCTEVEPUZBTFNFKTsiIC4KKwkJIklO U0VSVCBJTlRPICR7dGJsfSBTRUxFQ1QgRywgMCBGUk9NIEdFTkVSQVRFX1NFUklFUygxLCA1 MCkgRzsiKTsKKworCSMgY29uc3VtZSBhcm91bmQgMU0gbXhvZmYKKwlteSAkbmNsaWVudHMg PSAxMDsKKwlteSAkdXBkYXRlX2V2ZXJ5ID0gOTU7CisJbXkgQGNvbm5lY3Rpb25zID0gKCk7 CisJbXkgJHRpbWVvdXQgPSAxMCAqICRQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczo6dGltZW91 dF9kZWZhdWx0OworCisJZm9yICgwLi4kbmNsaWVudHMpCisJeworCQlteSAkY29ubiA9ICRu b2RlLT5iYWNrZ3JvdW5kX3BzcWwoJ3Bvc3RncmVzJywKKwkJCQkJCQkJCQkgIHRpbWVvdXQg PT4gJHRpbWVvdXQpOworCQkkY29ubi0+cXVlcnlfc2FmZSgiQkVHSU4iKTsKKworCQlwdXNo KEBjb25uZWN0aW9ucywgJGNvbm4pOworCX0KKworCSMgSXQncyBhIGxvbmcgcHJvY2Vzcywg YmV0dGVyIHRvIHRlbGwgYWJvdXQgcHJvZ3Jlc3MuCisJbXkgJG5fc3RlcHMgPSAyMDBfMDAw OworCW15ICRzdGVwID0gaW50KCRuX3N0ZXBzIC8gMTApOworCisJZGlhZyAiXG5zdGFydCB0 byBjb25zdW1lIG14b2Zmc2V0cyAuLi5cbiI7CisJZm9yIChteSAkaSA9IDA7ICRpIDwgJG5f c3RlcHM7ICRpKyspCisJeworCQlteSAkY29ubiA9ICRjb25uZWN0aW9uc1skaSAlICRuY2xp ZW50c107CisKKwkJJGNvbm4tPnF1ZXJ5X3NhZmUoIkNPTU1JVDsiKTsKKwkJJGNvbm4tPnF1 ZXJ5X3NhZmUoIkJFR0lOIik7CisKKwkJaWYgKCRpICUgJHVwZGF0ZV9ldmVyeSA9PSAwKQor CQl7CisJCQkjIFBlcmZvcm0gc29tZSBub24ta2V5IFVQREFURXMgdG9vLCB0byBleGVyY2lz ZSBkaWZmZXJlbnQgbXVsdGl4YWN0CisJCQkjIG1lbWJlciBzdGF0dXNlcy4KKwkJCSRjb25u LT5xdWVyeV9zYWZlKAorCQkJCSJVUERBVEUgJHt0Ymx9IFNFVCAiIC4KKwkJCQkiTl9VUERB VEVEID0gTl9VUERBVEVEICsgMSAiIC4KKwkJCQkiV0hFUkUgSSA9ICR7aX0gJSA1MCIpOwor CQl9CisJCWVsc2UKKwkJeworCQkJJGNvbm4tPnF1ZXJ5X3NhZmUoCisJCQkJIlNFTEVDVCAq IEZST00gJHt0Ymx9ICIgLgorCQkJCSJUQUJMRVNBTVBMRSBTWVNURU0gKDg1KSAiIC4KKwkJ CQkiRk9SIEtFWSBTSEFSRSIpOworCQl9CisKKwkJaWYgKCRpICUgJHN0ZXAgPT0gMCkKKwkJ eworCQkJbXkgJGRvbmUgPSBpbnQoKCRpIC8gJG5fc3RlcHMpICogMTAwKTsKKwkJCWRpYWcg IiRkb25lJSBkb25lLi4uIjsKKwkJfQorCX0KKworCWZvciBteSAkY29ubiAoQGNvbm5lY3Rp b25zKQorCXsKKwkJJGNvbm4tPnF1aXQoKTsKKwl9CisKKwkkbm9kZS0+c3RvcDsKKwkkbXhv ZmYyID0gbmV4dF9teG9mZigkbm9kZSk7CisKKwlyZXR1cm4gJG14b2ZmMSwgJG14b2ZmMjsK K30KKworIyBTZXQgb2xkZXN0IG11bHRpeGFjdC1vZmZzZXQKK3N1YiByZXNldF9teG9mZgor eworCW15ICRub2RlID0gc2hpZnQ7CisJbXkgJG9mZnNldCA9IHNoaWZ0OworCisJbXkgJHBn X3Jlc2V0d2FsX3BhdGggPSAkbm9kZS0+aW5zdGFsbF9wYXRoIC4gJy9iaW4vcGdfcmVzZXR3 YWwnOworCisJIyBHZXQgYmxvY2sgc2l6ZQorCW15ICRvdXQgPSAocnVuX2NvbW1hbmQoWyAk cGdfcmVzZXR3YWxfcGF0aCwgJy0tZHJ5LXJ1bicsCisJCQkJCQkJICRub2RlLT5kYXRhX2Rp ciBdKSlbMF07CisJCSRvdXQgPX4gL15EYXRhYmFzZSBibG9jayBzaXplOiAqKFxkKykkL20g b3IgZGllOworCW15ICRibGNrc3ogPSAkMTsKKworCSMgUmVzZXQgdG8gbmV3IG9mZnNldAor CW15IEBjbWQgPSAoJHBnX3Jlc2V0d2FsX3BhdGgsICctLXBnZGF0YScgPT4gJG5vZGUtPmRh dGFfZGlyKTsKKwlwdXNoIEBjbWQsICctLW11bHRpeGFjdC1vZmZzZXQnID0+ICRvZmZzZXQ7 CisJY29tbWFuZF9vayhcQGNtZCwgJ3NldCBvbGRlc3QgbXVsdGl4YWN0LW9mZnNldCcpOwor CisJIyBGaWxsIGVtcHR5IHBnX211bHRpeGFjdC9tZW1iZXJzIHNlZ21lbnQKKwlteSAkbXVs dCA9IDMyICogaW50KCRibGNrc3ogLyAyMCkgKiA0OworCW15ICRzZWduYW1lID0gc3ByaW50 ZiAiJTA0WCIsICRvZmZzZXQgLyAkbXVsdDsKKworCW15IEBkZCA9ICgnZGQnKTsKKwlwdXNo IEBkZCwgImlmPS9kZXYvemVybyI7CisJcHVzaCBAZGQsICJvZj0iIC4gJG5vZGUtPmRhdGFf ZGlyIC4gIi9wZ19tdWx0aXhhY3QvbWVtYmVycy8iIC4gJHNlZ25hbWU7CisJcHVzaCBAZGQs ICJicz0kYmxja3N6IjsKKwlwdXNoIEBkZCwgImNvdW50PTMyIjsKKwljb21tYW5kX29rKFxA ZGQsICdmaWxsIGVtcHR5IG11bHRpeGFjdC1tZW1iZXJzJyk7Cit9CisKK3N1YiBnZXRfZHVt cF9mb3JfY29tcGFyaXNvbgoreworCW15ICgkbm9kZSwgJGRiLCAkZmlsZV9wcmVmaXgsICRh ZGp1c3RfY2hpbGRfY29sdW1ucykgPSBAXzsKKworCW15ICRkdW1wZmlsZSA9ICR0ZW1wZGly IC4gJy8nIC4gJGZpbGVfcHJlZml4IC4gJy5zcWwnOworCW15ICRkdW1wX2FkanVzdGVkID0g IiR7ZHVtcGZpbGV9X2FkanVzdGVkIjsKKworCW9wZW4obXkgJGRoLCAnPicsICRkdW1wX2Fk anVzdGVkKQorCSAgfHwgZGllICJjb3VsZCBub3Qgb3BlbiAkZHVtcF9hZGp1c3RlZCBmb3Ig d3JpdGluZyAkISI7CisKKwkkbm9kZS0+cnVuX2xvZygKKwkJWworCQkJJ3BnX2R1bXAnLCAn LS1uby1zeW5jJywKKwkJCSctLXJlc3RyaWN0LWtleScgPT4gJ3Rlc3QnLAorCQkJJy1kJyA9 PiAkbm9kZS0+Y29ubnN0cigkZGIpLAorCQkJJy1mJyA9PiAkZHVtcGZpbGUKKwkJXSk7CisK KwlwcmludCAkZGggYWRqdXN0X3JlZ3Jlc3NfZHVtcGZpbGUoc2x1cnBfZmlsZSgkZHVtcGZp bGUpLAorCQkkYWRqdXN0X2NoaWxkX2NvbHVtbnMpOworCWNsb3NlKCRkaCk7CisKKwlyZXR1 cm4gJGR1bXBfYWRqdXN0ZWQ7Cit9CisKKyMgTWFpbiB0ZXN0IHdvcmtob3JzZSByb3V0aW5l LgorIyBNYWtlIHBnX3VwZ3JhZGUsIGR1bXAgZGF0YSBhbmQgY29tcGFyZSBpdC4KK3N1YiBy dW5fdGVzdAoreworCW15ICR0YWcgPSBzaGlmdDsKKwlteSAkb2xkbm9kZSA9IHNoaWZ0Owor CW15ICRuZXdub2RlID0gc2hpZnQ7CisKKwljb21tYW5kX29rKAorCQlbCisJCQkncGdfdXBn cmFkZScsICctLW5vLXN5bmMnLAorCQkJJy0tb2xkLWRhdGFkaXInID0+ICRvbGRub2RlLT5k YXRhX2RpciwKKwkJCSctLW5ldy1kYXRhZGlyJyA9PiAkbmV3bm9kZS0+ZGF0YV9kaXIsCisJ CQknLS1vbGQtYmluZGlyJyA9PiAkb2xkbm9kZS0+Y29uZmlnX2RhdGEoJy0tYmluZGlyJyks CisJCQknLS1uZXctYmluZGlyJyA9PiAkbmV3bm9kZS0+Y29uZmlnX2RhdGEoJy0tYmluZGly JyksCisJCQknLS1zb2NrZXRkaXInID0+ICRuZXdub2RlLT5ob3N0LAorCQkJJy0tb2xkLXBv cnQnID0+ICRvbGRub2RlLT5wb3J0LAorCQkJJy0tbmV3LXBvcnQnID0+ICRuZXdub2RlLT5w b3J0LAorCQkJJG1vZGUsCisJCV0sCisJCSdydW4gb2YgcGdfdXBncmFkZSBmb3IgbmV3IGlu c3RhbmNlJyk7CisJb2soICEtZCAkbmV3bm9kZS0+ZGF0YV9kaXIgLiAiL3BnX3VwZ3JhZGVf b3V0cHV0LmQiLAorCQkicGdfdXBncmFkZV9vdXRwdXQuZC8gcmVtb3ZlZCBhZnRlciBwZ191 cGdyYWRlIHN1Y2Nlc3MiKTsKKworCSRvbGRub2RlLT5zdGFydDsKKwlteSAkc3JjX2R1bXAg PQorCQlnZXRfZHVtcF9mb3JfY29tcGFyaXNvbigkb2xkbm9kZSwgJ3Bvc3RncmVzJywKKwkJ CQkJCQkJIm9sZG5vZGVfJHt0YWd9X2R1bXAiLCAwKTsKKwkkb2xkbm9kZS0+c3RvcDsKKwor CSRuZXdub2RlLT5zdGFydDsKKwlteSAkZHN0X2R1bXAgPQorCQlnZXRfZHVtcF9mb3JfY29t cGFyaXNvbigkbmV3bm9kZSwgJ3Bvc3RncmVzJywKKwkJCQkJCQkJIm5ld25vZGVfJHt0YWd9 X2R1bXAiLCAwKTsKKwkkbmV3bm9kZS0+c3RvcDsKKworCWNvbXBhcmVfZmlsZXMoJHNyY19k dW1wLCAkZHN0X2R1bXAsCisJCSdkdW1wIG91dHB1dHMgZnJvbSBvcmlnaW5hbCBhbmQgcmVz dG9yZWQgcmVncmVzc2lvbiBkYXRhYmFzZXMgbWF0Y2gnKTsKK30KKworc3ViIHRvX2hleAor eworCW15ICRhcmcgPSBzaGlmdDsKKworCSRhcmcgPSBNYXRoOjpCaWdJbnQtPm5ldygkYXJn KTsKKwkkYXJnID0gJGFyZy0+YXNfaGV4KCk7CisKKwlyZXR1cm4gJGFyZzsKK30KKworIyBj YXNlICMxOiBzdGFydCBvbGQgbm9kZSBmcm9tIGRlZmF1bHRzCit7CisJbXkgJHRhZyA9IDE7 CisJbXkgJG9sZCA9CisJCVBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygib2xkbm9k ZSR7dGFnfSIsCisJCQkJCQkJCQkgICBpbnN0YWxsX3BhdGggPT4gJEVOVntvbGRpbnN0YWxs fSk7CisJJG9sZC0+aW5pdChleHRyYSA9PiBbJy1rJ10pOworCisJbXkgKCRzdGFydF9teG9m ZiwgJGZpbmlzaF9teG9mZikgPSBteGFjdF9lYXRlcigkb2xkKTsKKworCW15ICRuZXcgPSBQ b3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoIm5ld25vZGUke3RhZ30iKTsKKwkkbmV3 LT5pbml0OworCisJcnVuX3Rlc3QoJHRhZywgJG9sZCwgJG5ldyk7CisKKwkkc3RhcnRfbXhv ZmYgPSB0b19oZXgoJHN0YXJ0X214b2ZmKTsKKwkkZmluaXNoX214b2ZmID0gdG9faGV4KCRm aW5pc2hfbXhvZmYpOworCisJbXkgJG5leHRfbXhvZmYgPSB0b19oZXgobmV4dF9teG9mZigk bmV3KSk7CisKKwlub3RlICI+Pj4gY2FzZSAjJHt0YWd9XG4iIC4KKwkJICIgb2xkbm9kZSBt eG9mZiBmcm9tICR7c3RhcnRfbXhvZmZ9IHRvICR7ZmluaXNoX214b2ZmfVxuIiAuCisJCSAi IG5ld25vZGUgbXhvZmYgJHtuZXh0X214b2ZmfVxuIjsKK30KKworIyBjYXNlICMyOiBzdGFy dCBvbGQgbm9kZSBmcm9tIGJlZm9yZSAzMi1iaXQgd3JhcGFyb3VuZAoreworCW15ICR0YWcg PSAyOworCW15ICRvbGQgPQorCQlQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoIm9s ZG5vZGUke3RhZ30iLAorCQkJCQkJCQkJICAgaW5zdGFsbF9wYXRoID0+ICRFTlZ7b2xkaW5z dGFsbH0pOworCisJJG9sZC0+aW5pdChleHRyYSA9PiBbJy1rJ10pOworCXJlc2V0X214b2Zm KCRvbGQsIDB4RkZGRjAwMDApOworCisJbXkgKCRzdGFydF9teG9mZiwgJGZpbmlzaF9teG9m ZikgPSBteGFjdF9lYXRlcigkb2xkKTsKKworCW15ICRuZXcgPSBQb3N0Z3JlU1FMOjpUZXN0 OjpDbHVzdGVyLT5uZXcoIm5ld25vZGUke3RhZ30iKTsKKwkkbmV3LT5pbml0OworCisJcnVu X3Rlc3QoJHRhZywgJG9sZCwgJG5ldyk7CisKKwkkc3RhcnRfbXhvZmYgPSB0b19oZXgoJHN0 YXJ0X214b2ZmKTsKKwkkZmluaXNoX214b2ZmID0gdG9faGV4KCRmaW5pc2hfbXhvZmYpOwor CisJbXkgJG5leHRfbXhvZmYgPSB0b19oZXgobmV4dF9teG9mZigkbmV3KSk7CisKKwlub3Rl ICI+Pj4gY2FzZSAjJHt0YWd9XG4iIC4KKwkJICIgb2xkbm9kZSBteG9mZiBmcm9tICR7c3Rh cnRfbXhvZmZ9IHRvICR7ZmluaXNoX214b2ZmfVxuIiAuCisJCSAiIG5ld25vZGUgbXhvZmYg JHtuZXh0X214b2ZmfVxuIjsKK30KKworIyBjYXNlICMzOiBzdGFydCBvbGQgbm9kZSBuZWFy IDMyLWJpdCB3cmFwYXJvdW5kIGFuZCByZWFjaCB3cmFwYXJvdW5kIHN0YXRlLgoreworCW15 ICR0YWcgPSAzOworCW15ICRvbGQgPQorCQlQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5u ZXcoIm9sZG5vZGUke3RhZ30iLAorCQkJCQkJCQkJICAgaW5zdGFsbF9wYXRoID0+ICRFTlZ7 b2xkaW5zdGFsbH0pOworCisJJG9sZC0+aW5pdChleHRyYSA9PiBbJy1rJ10pOworCisJcmVz ZXRfbXhvZmYoJG9sZCwgMHhGRkZGRUM3Nyk7CisJbXkgKCRzdGFydF9teG9mZiwgJGZpbmlz aF9teG9mZikgPSBteGFjdF9lYXRlcigkb2xkKTsKKworCW15ICRuZXcgPSBQb3N0Z3JlU1FM OjpUZXN0OjpDbHVzdGVyLT5uZXcoIm5ld25vZGUke3RhZ30iKTsKKwkkbmV3LT5pbml0Owor CisJcnVuX3Rlc3QoJHRhZywgJG9sZCwgJG5ldyk7CisKKwkkc3RhcnRfbXhvZmYgPSB0b19o ZXgoJHN0YXJ0X214b2ZmKTsKKwkkZmluaXNoX214b2ZmID0gdG9faGV4KCRmaW5pc2hfbXhv ZmYpOworCisJbXkgJG5leHRfbXhvZmYgPSB0b19oZXgobmV4dF9teG9mZigkbmV3KSk7CisK Kwlub3RlICI+Pj4gY2FzZSAjJHt0YWd9XG4iIC4KKwkJICIgb2xkbm9kZSBteG9mZiBmcm9t ICR7c3RhcnRfbXhvZmZ9IHRvICR7ZmluaXNoX214b2ZmfVxuIiAuCisJCSAiIG5ld25vZGUg bXhvZmYgJHtuZXh0X214b2ZmfVxuIjsKK30KKworIyBjYXNlICM0OiBzdGFydCBvbGQgbm9k ZSBmcm9tIGRlZmF1bHRzCit7CisJbXkgJHRhZyA9IDQ7CisJbXkgJG9sZCA9CisJCVBvc3Rn cmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygib2xkbm9kZSR7dGFnfSIsCisJCQkJCQkJCQkg ICBpbnN0YWxsX3BhdGggPT4gJEVOVntvbGRpbnN0YWxsfSk7CisKKwkkb2xkLT5pbml0KGV4 dHJhID0+IFsnLWsnXSk7CisKKwlkaWFnICJ0ZXN0ICMke3RhZ30gZm9yIG11bHRpcGxlIG14 b2ZmIHNlZ21lbnRzIjsKKwlteSAoJHN0YXJ0X214b2ZmLCAkZmluaXNoX214b2ZmKSA9IG14 YWN0X2h1Z2VfZWF0ZXIoJG9sZCk7CisKKwlteSAkbmV3ID0gUG9zdGdyZVNRTDo6VGVzdDo6 Q2x1c3Rlci0+bmV3KCJuZXdub2RlJHt0YWd9Iik7CisJJG5ldy0+aW5pdDsKKworCXJ1bl90 ZXN0KCR0YWcsICRvbGQsICRuZXcpOworCisJJHN0YXJ0X214b2ZmID0gdG9faGV4KCRzdGFy dF9teG9mZik7CisJJGZpbmlzaF9teG9mZiA9IHRvX2hleCgkZmluaXNoX214b2ZmKTsKKwor CW15ICRuZXh0X214b2ZmID0gdG9faGV4KG5leHRfbXhvZmYoJG5ldykpOworCisJbm90ZSAi Pj4+IGNhc2UgIyR7dGFnfVxuIiAuCisJCSAiIG9sZG5vZGUgbXhvZmYgZnJvbSAke3N0YXJ0 X214b2ZmfSB0byAke2ZpbmlzaF9teG9mZn1cbiIgLgorCQkgIiBuZXdub2RlIG14b2ZmICR7 bmV4dF9teG9mZn1cbiI7Cit9CisKKyMgY2FzZSAjNTogc3RhcnQgb2xkIG5vZGUgZnJvbSBi ZWZvcmUgMzItYml0IHdyYXBhcm91bmQKK3sKKwlteSAkdGFnID0gNTsKKwlteSAkb2xkID0K KwkJUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCJvbGRub2RlJHt0YWd9IiwKKwkJ CQkJCQkJCSAgIGluc3RhbGxfcGF0aCA9PiAkRU5We29sZGluc3RhbGx9KTsKKworCSRvbGQt PmluaXQoZXh0cmEgPT4gWyctayddKTsKKwlyZXNldF9teG9mZigkb2xkLCAweEZGRkYwMDAw KTsKKworCWRpYWcgInRlc3QgIyR7dGFnfSBmb3IgbXVsdGlwbGUgbXhvZmYgc2VnbWVudHMi OworCW15ICgkc3RhcnRfbXhvZmYsICRmaW5pc2hfbXhvZmYpID0gbXhhY3RfaHVnZV9lYXRl cigkb2xkKTsKKworCW15ICRuZXcgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXco Im5ld25vZGUke3RhZ30iKTsKKwkkbmV3LT5pbml0OworCisJcnVuX3Rlc3QoJHRhZywgJG9s ZCwgJG5ldyk7CisKKwkkc3RhcnRfbXhvZmYgPSB0b19oZXgoJHN0YXJ0X214b2ZmKTsKKwkk ZmluaXNoX214b2ZmID0gdG9faGV4KCRmaW5pc2hfbXhvZmYpOworCisJbXkgJG5leHRfbXhv ZmYgPSB0b19oZXgobmV4dF9teG9mZigkbmV3KSk7CisKKwlub3RlICI+Pj4gY2FzZSAjJHt0 YWd9XG4iIC4KKwkJICIgb2xkbm9kZSBteG9mZiBmcm9tICR7c3RhcnRfbXhvZmZ9IHRvICR7 ZmluaXNoX214b2ZmfVxuIiAuCisJCSAiIG5ld25vZGUgbXhvZmYgJHtuZXh0X214b2ZmfVxu IjsKK30KKworIyBjYXNlICM2OiBzdGFydCBvbGQgbm9kZSBuZWFyIDMyLWJpdCB3cmFwYXJv dW5kIGFuZCByZWFjaCB3cmFwYXJvdW5kIHN0YXRlLgoreworCW15ICR0YWcgPSA2OworCW15 ICRvbGQgPQorCQlQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoIm9sZG5vZGUke3Rh Z30iLAorCQkJCQkJCQkJICAgaW5zdGFsbF9wYXRoID0+ICRFTlZ7b2xkaW5zdGFsbH0pOwor CisJJG9sZC0+aW5pdChleHRyYSA9PiBbJy1rJ10pOworCisJcmVzZXRfbXhvZmYoJG9sZCwg MHhGRkZGRkZGRiAtIDFfMDAwXzAwMCk7CisJbXkgKCRzdGFydF9teG9mZiwgJGZpbmlzaF9t eG9mZikgPSBteGFjdF9odWdlX2VhdGVyKCRvbGQpOworCisJZGlhZyAidGVzdCAjJHt0YWd9 IGZvciBtdWx0aXBsZSBteG9mZiBzZWdtZW50cyI7CisJbXkgJG5ldyA9IFBvc3RncmVTUUw6 OlRlc3Q6OkNsdXN0ZXItPm5ldygibmV3bm9kZSR7dGFnfSIpOworCSRuZXctPmluaXQ7CisK KwlydW5fdGVzdCgkdGFnLCAkb2xkLCAkbmV3KTsKKworCSRzdGFydF9teG9mZiA9IHRvX2hl eCgkc3RhcnRfbXhvZmYpOworCSRmaW5pc2hfbXhvZmYgPSB0b19oZXgoJGZpbmlzaF9teG9m Zik7CisKKwlteSAkbmV4dF9teG9mZiA9IHRvX2hleChuZXh0X214b2ZmKCRuZXcpKTsKKwor CW5vdGUgIj4+PiBjYXNlICMke3RhZ31cbiIgLgorCQkgIiBvbGRub2RlIG14b2ZmIGZyb20g JHtzdGFydF9teG9mZn0gdG8gJHtmaW5pc2hfbXhvZmZ9XG4iIC4KKwkJICIgbmV3bm9kZSBt eG9mZiAke25leHRfbXhvZmZ9XG4iOworfQorCitkb25lX3Rlc3RpbmcoKTsKLS0gCjIuNDcu MwoK --------------wdQFSa6hjCyS1wBv3Joac30h--