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 1qqXAF-00ArPD-9w for pgsql-hackers@arkaria.postgresql.org; Wed, 11 Oct 2023 11:14:08 +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 1qqXAD-00F8AX-8L for pgsql-hackers@arkaria.postgresql.org; Wed, 11 Oct 2023 11:14:06 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1qqX99-00F51F-Gf for pgsql-hackers@lists.postgresql.org; Wed, 11 Oct 2023 11:13:00 +0000 Received: from meesny.iki.fi ([195.140.195.201]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1qqX93-001SrK-Sx for pgsql-hackers@postgresql.org; Wed, 11 Oct 2023 11:12:59 +0000 Received: from [192.168.1.115] (dsl-hkibng22-54f8db-125.dhcp.inet.fi [84.248.219.125]) (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 meesny.iki.fi (Postfix) with ESMTPSA id 4S599H4n3xzyTl; Wed, 11 Oct 2023 14:12:48 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=iki.fi; s=meesny; t=1697022772; 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=cVuJDTBMPeRnPDOiWgKRbtlNT4tcKruq3zO/0l2We1A=; b=R20imdm6q4knLIqtaD2daHhezipDOgnAIj/dvbPfyuzTXTau+WMp/8cgsDxQ6WKy1ItmjJ OVsnhlVLa1Yqe2Zor4kGMtxU/kn73DD/BymtdvzmH+HEClSEr2bbTdKjqw9d26QWDB81ij 3yIVHYz2k6qiSDKB4rxRetK5IVYZuBU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=iki.fi; s=meesny; t=1697022772; 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=cVuJDTBMPeRnPDOiWgKRbtlNT4tcKruq3zO/0l2We1A=; b=E+21NtNQKosPHjjSNVa+QJcjyK2B+D/26+8LObDUVZXCXRSb61rRoPhATECahHCBtBSfCU zYIkVIzDNe+k9DGO6mpkvpj7UfVLsQ6FycUqstgHg0Iref33BPQZivBeae0N+jj9EDByXI hGlDrs7pZSw/EnBQlviDmzvp2HBku64= ARC-Authentication-Results: i=1; ORIGINATING; auth=pass smtp.auth=hlinnaka smtp.mailfrom=hlinnaka@iki.fi ARC-Seal: i=1; s=meesny; d=iki.fi; t=1697022772; a=rsa-sha256; cv=none; b=FK3hlAhrydnxVj0ru7HeaPE+h1V3eIXV01WqHErWiE4Yk3clm6+X8ppEU1CV9W0c5Q1f68 dDjR0VuNhzvHro/61JPdN7E4SHc5At+C2eDw1AUElfKit9bgZcfKQCz5ZR3obd01ebuNt4 5BMlYXaiScNx2i/w/7U9RmtJ7OzMnoQ= Content-Type: multipart/mixed; boundary="------------ASkMfd1hzOyZblVTgMzqak1d" Message-ID: <119551e6-60f6-49b2-ae04-a382a89f900c@iki.fi> Date: Wed, 11 Oct 2023 14:12:47 +0300 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird From: Heikki Linnakangas Subject: Re: Refactoring backend fork+exec code To: Andres Freund , Tristan Partin Cc: pgsql-hackers , Thomas Munro References: <7a59b073-5b5b-151e-7ed3-8b01ff7ce9ef@iki.fi> <20230710225043.svl7fqxecwshwc7a@awork3.anarazel.de> Content-Language: en-US In-Reply-To: <20230710225043.svl7fqxecwshwc7a@awork3.anarazel.de> 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. --------------ASkMfd1hzOyZblVTgMzqak1d Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit I updated this patch set, addressing some of the straightforward comments from Tristan and Andres, and did some more cleanups, commenting etc. Works on Windows now. Replies to some of the individual comments below: On 11/07/2023 00:07, Tristan Partin wrote: >> @@ -4498,15 +4510,19 @@ postmaster_forkexec(int argc, char *argv[]) >> * returns the pid of the fork/exec'd process, or -1 on failure >> */ >> static pid_t >> -backend_forkexec(Port *port) >> +backend_forkexec(Port *port, CAC_state cac) >> { >> - char *av[4]; >> + char *av[5]; >> int ac = 0; >> + char cacbuf[10]; >> >> av[ac++] = "postgres"; >> av[ac++] = "--forkbackend"; >> av[ac++] = NULL; /* filled in by internal_forkexec */ >> >> + snprintf(cacbuf, sizeof(cacbuf), "%d", (int) cac); >> + av[ac++] = cacbuf; > > Might be worth a sanity check that there wasn't any truncation into > cacbuf, which is an impossibility as the code is written, but still > useful for catching a future developer error. > > Is it worth adding a command line option at all instead of having the > naked positional argument? It would help anybody who might read the > command line what the seemingly random integer stands for. +1. This gets refactored away in the last patch though. In the last patch, I used a child process name instead of an integer precisely because it looks nicer in "ps". I wonder if we should add more command line arguments, just for informational purposes. Autovacuum worker process could display the database name it's connected to, for example. I don't know how important the command line is on Windows, is it displayed by tools that people care about? On 11/07/2023 01:50, Andres Freund wrote: > On 2023-06-18 14:22:33 +0300, Heikki Linnakangas wrote: >> From 0cb6f8d665980d30a5d2a29013000744f16bf813 Mon Sep 17 00:00:00 2001 >> From: Heikki Linnakangas >> Date: Sun, 18 Jun 2023 11:00:21 +0300 >> Subject: [PATCH 3/9] Refactor CreateSharedMemoryAndSemaphores. >> >> Moves InitProcess calls a little later in EXEC_BACKEND case. > > What's the reason for this part? The point is that with this commit, InitProcess() is called at same place in EXEC_BACKEND mode and !EXEC_BACKEND. It feels more consistent that way. > ISTM that we'd really want to get away from plastering duplicated > InitProcess() etc everywhere. Sure, we could do more to reduce the duplication. I think this is a step in the right direction, though. >> From 65384b9a6cfb3b9b589041526216e0f64d64bea5 Mon Sep 17 00:00:00 2001 >> From: Heikki Linnakangas >> Date: Sun, 18 Jun 2023 13:56:44 +0300 >> Subject: [PATCH 8/9] Introduce ClientSocket, rename some funcs >> >> - Move more of the work on a client socket to the child process. >> >> - Reduce the amount of data that needs to be passed from postmaster to >> child. (Used to pass a full Port struct, although most of the fields were >> empty. Now we pass the much slimmer ClientSocket.) > > I think there might be extensions accessing Port. Not sure if it's worth > worrying about, but ... That's OK. Port still exists, it's just created a little later. It will be initialized by the time extensions might look at it. >> +const PMChildEntry entry_kinds[] = { >> + {"backend", BackendMain, true}, >> + >> + {"autovacuum launcher", AutoVacLauncherMain, true}, >> + {"autovacuum worker", AutoVacWorkerMain, true}, >> + {"bgworker", BackgroundWorkerMain, true}, >> + {"syslogger", SysLoggerMain, false}, >> + >> + {"startup", StartupProcessMain, true}, >> + {"bgwriter", BackgroundWriterMain, true}, >> + {"archiver", PgArchiverMain, true}, >> + {"checkpointer", CheckpointerMain, true}, >> + {"wal_writer", WalWriterMain, true}, >> + {"wal_receiver", WalReceiverMain, true}, >> +}; > > I'd assign them with the PostmasterChildType as index, so there's no danger of > getting out of order. > > const PMChildEntry entry_kinds = { > [PMC_AV_LAUNCHER] = {"autovacuum launcher", AutoVacLauncherMain, true}, > ... > } > > or such should work. Nice, I didn't know about that syntax! Changed it that way. > I'd also use designated initializers for the fields, it's otherwise hard to > know what true means etc. I think with one boolean and the struct declaration nearby, it's fine. If this becomes more complex in the future, with more fields, I agree. > I think it might be good to put more into array. If we e.g. knew whether a > particular child type is a backend-like, and aux process or syslogger, we > could avoid the duplicated InitAuxiliaryProcess(), > MemoryContextDelete(PostmasterContext) etc calls everywhere. I agree we could do more refactoring here. I don't agree with adding more to this struct though. I'm trying to limit the code in launch_backend.c to hiding the differences between EXEC_BACKEND and !EXEC_BACKEND. In EXEC_BACKEND mode, it restores the child process to the same state as it is after fork() in !EXEC_BACKEND mode. Any other initialization steps belong elsewhere. Some of the steps between InitPostmasterChild() and the *Main() functions could probably be moved around and refactored. I didn't think hard about that. I think that can be done separately as follow-up patch. >> +/* Save critical backend variables into the BackendParameters struct */ >> +#ifndef WIN32 >> +static bool >> +save_backend_variables(BackendParameters *param, ClientSocket *client_sock) >> +#else > > There's so much of this kind of thing. Could we hide it in a struct or such > instead of needing ifdefs everywhere? A lot of #ifdefs you mean? I agree launch_backend.c has a lot of those. I haven't come up with any good ideas on reducing them, unfortunately. -- Heikki Linnakangas Neon (https://neon.tech) --------------ASkMfd1hzOyZblVTgMzqak1d Content-Type: text/x-patch; charset=UTF-8; name="v2-0001-Pass-background-worker-entry-in-the-parameter-fil.patch" Content-Disposition: attachment; filename*0="v2-0001-Pass-background-worker-entry-in-the-parameter-fil.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSBmNDgxNzJiYjcxNmRlZGUzNTRhYjZjZDY4Zjg0Nzc5YTZlNjM2NzhhIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFdlZCwgMTEgT2N0IDIwMjMgMTM6MzU6MjAgKzAzMDAK U3ViamVjdDogW1BBVENIIHYyIDEvNl0gUGFzcyBiYWNrZ3JvdW5kIHdvcmtlciBlbnRyeSBp biB0aGUgcGFyYW1ldGVyIGZpbGUKClRoaXMgbWFrZXMgaXQgcG9zc2libGUgdG8gbW92ZSBJ bml0UHJvY2VzcyBsYXRlciBpbiBTdWJQb3N0bWFzdGVyTWFpbgooaW4gbmV4dCBjb21taXQp LCBhcyB3ZSBkb24ndCBuZWVkIGFuIGx3bG9jayBhbmQgaGVuY2UgYSBQR1BST0MgZW50cnkK dG8gZ2V0IHRoZSBiYWNrZ3JvdW5kIHdvcmtlciBlbnRyeSBhbnltb3JlLgoKUmV2aWV3ZWQt Ynk6IFRyaXN0YW4gUGFydGluLCBBbmRyZXMgRnJldW5kCkRpc2N1c3Npb246IGh0dHBzOi8v d3d3LnBvc3RncmVzcWwub3JnL21lc3NhZ2UtaWQvN2E1OWIwNzMtNWI1Yi0xNTFlLTdlZDMt OGIwMWZmN2NlOWVmQGlraS5maQotLS0KIHNyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYmd3b3Jr ZXIuYyAgICAgICAgICAgfCAyMSAtLS0tLS0tLS0tLQogc3JjL2JhY2tlbmQvcG9zdG1hc3Rl ci9wb3N0bWFzdGVyLmMgICAgICAgICB8IDM5ICsrKysrKysrKysrKysrLS0tLS0tLQogc3Jj L2luY2x1ZGUvcG9zdG1hc3Rlci9iZ3dvcmtlcl9pbnRlcm5hbHMuaCB8ICA0IC0tLQogMyBm aWxlcyBjaGFuZ2VkLCAyNiBpbnNlcnRpb25zKCspLCAzOCBkZWxldGlvbnMoLSkKCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2Jnd29ya2VyLmMgYi9zcmMvYmFja2Vu ZC9wb3N0bWFzdGVyL2Jnd29ya2VyLmMKaW5kZXggNDhhOTkyNDUyN2UuLmIzYzJlNjViYTlm IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2Jnd29ya2VyLmMKKysrIGIv c3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9iZ3dvcmtlci5jCkBAIC02MzEsMjcgKzYzMSw2IEBA IFJlc2V0QmFja2dyb3VuZFdvcmtlckNyYXNoVGltZXModm9pZCkKIAl9CiB9CiAKLSNpZmRl ZiBFWEVDX0JBQ0tFTkQKLS8qCi0gKiBJbiBFWEVDX0JBQ0tFTkQgbW9kZSwgd29ya2VycyB1 c2UgdGhpcyB0byByZXRyaWV2ZSB0aGVpciBkZXRhaWxzIGZyb20KLSAqIHNoYXJlZCBtZW1v cnkuCi0gKi8KLUJhY2tncm91bmRXb3JrZXIgKgotQmFja2dyb3VuZFdvcmtlckVudHJ5KGlu dCBzbG90bm8pCi17Ci0Jc3RhdGljIEJhY2tncm91bmRXb3JrZXIgbXlFbnRyeTsKLQlCYWNr Z3JvdW5kV29ya2VyU2xvdCAqc2xvdDsKLQotCUFzc2VydChzbG90bm8gPCBCYWNrZ3JvdW5k V29ya2VyRGF0YS0+dG90YWxfc2xvdHMpOwotCXNsb3QgPSAmQmFja2dyb3VuZFdvcmtlckRh dGEtPnNsb3Rbc2xvdG5vXTsKLQlBc3NlcnQoc2xvdC0+aW5fdXNlKTsKLQotCS8qIG11c3Qg Y29weSB0aGlzIGluIGNhc2Ugd2UgZG9uJ3QgaW50ZW5kIHRvIHJldGFpbiBzaG1lbSBhY2Nl c3MgKi8KLQltZW1jcHkoJm15RW50cnksICZzbG90LT53b3JrZXIsIHNpemVvZiBteUVudHJ5 KTsKLQlyZXR1cm4gJm15RW50cnk7Ci19Ci0jZW5kaWYKLQogLyoKICAqIENvbXBsYWluIGFi b3V0IHRoZSBCYWNrZ3JvdW5kV29ya2VyIGRlZmluaXRpb24gdXNpbmcgZXJyb3IgbGV2ZWwg ZWxldmVsLgogICogUmV0dXJuIHRydWUgaWYgaXQgbG9va3Mgb2ssIGZhbHNlIGlmIG5vdCAo dW5sZXNzIGVsZXZlbCA+PSBFUlJPUiwgaW4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Bv c3RtYXN0ZXIvcG9zdG1hc3Rlci5jIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9wb3N0bWFz dGVyLmMKaW5kZXggMjgyZTY0ODY5NDguLmU1NWYzYTE1MmFhIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9wb3N0bWFzdGVyL3Bvc3RtYXN0ZXIuYworKysgYi9zcmMvYmFja2VuZC9wb3N0 bWFzdGVyL3Bvc3RtYXN0ZXIuYwpAQCAtNTQwLDYgKzU0MCw4IEBAIHR5cGVkZWYgc3RydWN0 CiAjZW5kaWYKIAljaGFyCQlteV9leGVjX3BhdGhbTUFYUEdQQVRIXTsKIAljaGFyCQlwa2ds aWJfcGF0aFtNQVhQR1BBVEhdOworCisJQmFja2dyb3VuZFdvcmtlciBNeUJnd29ya2VyRW50 cnk7CiB9IEJhY2tlbmRQYXJhbWV0ZXJzOwogCiBzdGF0aWMgdm9pZCByZWFkX2JhY2tlbmRf dmFyaWFibGVzKGNoYXIgKmlkLCBQb3J0ICpwb3J0KTsKQEAgLTQ4MzEsNyArNDgzMyw3IEBA IFN1YlBvc3RtYXN0ZXJNYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJCXN0cmNtcChh cmd2WzFdLCAiLS1mb3JrYXZsYXVuY2hlciIpID09IDAgfHwKIAkJc3RyY21wKGFyZ3ZbMV0s ICItLWZvcmthdndvcmtlciIpID09IDAgfHwKIAkJc3RyY21wKGFyZ3ZbMV0sICItLWZvcmth dXgiKSA9PSAwIHx8Ci0JCXN0cm5jbXAoYXJndlsxXSwgIi0tZm9ya2Jnd29ya2VyPSIsIDE1 KSA9PSAwKQorCQlzdHJuY21wKGFyZ3ZbMV0sICItLWZvcmtiZ3dvcmtlciIsIDE0KSA9PSAw KQogCQlQR1NoYXJlZE1lbW9yeVJlQXR0YWNoKCk7CiAJZWxzZQogCQlQR1NoYXJlZE1lbW9y eU5vUmVBdHRhY2goKTsKQEAgLTQ5NjIsMTAgKzQ5NjQsOCBAQCBTdWJQb3N0bWFzdGVyTWFp bihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCiAJCUF1dG9WYWNXb3JrZXJNYWluKGFyZ2Mg LSAyLCBhcmd2ICsgMik7CS8qIGRvZXMgbm90IHJldHVybiAqLwogCX0KLQlpZiAoc3RybmNt cChhcmd2WzFdLCAiLS1mb3JrYmd3b3JrZXI9IiwgMTUpID09IDApCisJaWYgKHN0cm5jbXAo YXJndlsxXSwgIi0tZm9ya2Jnd29ya2VyIiwgMTQpID09IDApCiAJewotCQlpbnQJCQlzaG1l bV9zbG90OwotCiAJCS8qIGRvIHRoaXMgYXMgZWFybHkgYXMgcG9zc2libGU7IGluIHBhcnRp Y3VsYXIsIGJlZm9yZSBJbml0UHJvY2VzcygpICovCiAJCUlzQmFja2dyb3VuZFdvcmtlciA9 IHRydWU7CiAKQEAgLTQ5NzgsMTEgKzQ5NzgsNyBAQCBTdWJQb3N0bWFzdGVyTWFpbihpbnQg YXJnYywgY2hhciAqYXJndltdKQogCQkvKiBBdHRhY2ggcHJvY2VzcyB0byBzaGFyZWQgZGF0 YSBzdHJ1Y3R1cmVzICovCiAJCUNyZWF0ZVNoYXJlZE1lbW9yeUFuZFNlbWFwaG9yZXMoKTsK IAotCQkvKiBGZXRjaCBNeUJnd29ya2VyRW50cnkgZnJvbSBzaGFyZWQgbWVtb3J5ICovCi0J CXNobWVtX3Nsb3QgPSBhdG9pKGFyZ3ZbMV0gKyAxNSk7Ci0JCU15Qmd3b3JrZXJFbnRyeSA9 IEJhY2tncm91bmRXb3JrZXJFbnRyeShzaG1lbV9zbG90KTsKLQotCQlCYWNrZ3JvdW5kV29y a2VyTWFpbigpOworCQlTdGFydEJhY2tncm91bmRXb3JrZXIoKTsKIAl9CiAJaWYgKHN0cmNt cChhcmd2WzFdLCAiLS1mb3JrbG9nIikgPT0gMCkKIAl7CkBAIC01NjM0LDEzICs1NjMwLDE0 IEBAIEJhY2tncm91bmRXb3JrZXJVbmJsb2NrU2lnbmFscyh2b2lkKQogCiAjaWZkZWYgRVhF Q19CQUNLRU5ECiBzdGF0aWMgcGlkX3QKLWJnd29ya2VyX2ZvcmtleGVjKGludCBzaG1lbV9z bG90KQorYmd3b3JrZXJfZm9ya2V4ZWMoQmFja2dyb3VuZFdvcmtlciAqd29ya2VyKQogewog CWNoYXIJICAgKmF2WzEwXTsKIAlpbnQJCQlhYyA9IDA7CiAJY2hhcgkJZm9ya2F2W01BWFBH UEFUSF07CisJcGlkX3QJCXJlc3VsdDsKIAotCXNucHJpbnRmKGZvcmthdiwgTUFYUEdQQVRI LCAiLS1mb3JrYmd3b3JrZXI9JWQiLCBzaG1lbV9zbG90KTsKKwlzbnByaW50Zihmb3JrYXYs IE1BWFBHUEFUSCwgIi0tZm9ya2Jnd29ya2VyIik7CiAKIAlhdlthYysrXSA9ICJwb3N0Z3Jl cyI7CiAJYXZbYWMrK10gPSBmb3JrYXY7CkBAIC01NjQ5LDcgKzU2NDYsMTEgQEAgYmd3b3Jr ZXJfZm9ya2V4ZWMoaW50IHNobWVtX3Nsb3QpCiAKIAlBc3NlcnQoYWMgPCBsZW5ndGhvZihh dikpOwogCi0JcmV0dXJuIHBvc3RtYXN0ZXJfZm9ya2V4ZWMoYWMsIGF2KTsKKwlNeUJnd29y a2VyRW50cnkgPSB3b3JrZXI7CisJcmVzdWx0ID0gcG9zdG1hc3Rlcl9mb3JrZXhlYyhhYywg YXYpOworCU15Qmd3b3JrZXJFbnRyeSA9IE5VTEw7CisKKwlyZXR1cm4gcmVzdWx0OwogfQog I2VuZGlmCiAKQEAgLTU2OTAsNyArNTY5MSw3IEBAIGRvX3N0YXJ0X2Jnd29ya2VyKFJlZ2lz dGVyZWRCZ1dvcmtlciAqcncpCiAJCQkJCQkJIHJ3LT5yd193b3JrZXIuYmd3X25hbWUpKSk7 CiAKICNpZmRlZiBFWEVDX0JBQ0tFTkQKLQlzd2l0Y2ggKCh3b3JrZXJfcGlkID0gYmd3b3Jr ZXJfZm9ya2V4ZWMocnctPnJ3X3NobWVtX3Nsb3QpKSkKKwlzd2l0Y2ggKCh3b3JrZXJfcGlk ID0gYmd3b3JrZXJfZm9ya2V4ZWMoJnJ3LT5yd193b3JrZXIpKSkKICNlbHNlCiAJc3dpdGNo ICgod29ya2VyX3BpZCA9IGZvcmtfcHJvY2VzcygpKSkKICNlbmRpZgpAQCAtNjA5MCw2ICs2 MDkxLDExIEBAIHNhdmVfYmFja2VuZF92YXJpYWJsZXMoQmFja2VuZFBhcmFtZXRlcnMgKnBh cmFtLCBQb3J0ICpwb3J0LAogCiAJc3RybGNweShwYXJhbS0+cGtnbGliX3BhdGgsIHBrZ2xp Yl9wYXRoLCBNQVhQR1BBVEgpOwogCisJaWYgKE15Qmd3b3JrZXJFbnRyeSkKKwkJbWVtY3B5 KCZwYXJhbS0+TXlCZ3dvcmtlckVudHJ5LCBNeUJnd29ya2VyRW50cnksIHNpemVvZihCYWNr Z3JvdW5kV29ya2VyKSk7CisJZWxzZQorCQltZW1zZXQoJnBhcmFtLT5NeUJnd29ya2VyRW50 cnksIDAsIHNpemVvZihCYWNrZ3JvdW5kV29ya2VyKSk7CisKIAlyZXR1cm4gdHJ1ZTsKIH0K IApAQCAtNjMxOCw2ICs2MzI0LDEzIEBAIHJlc3RvcmVfYmFja2VuZF92YXJpYWJsZXMoQmFj a2VuZFBhcmFtZXRlcnMgKnBhcmFtLCBQb3J0ICpwb3J0KQogCiAJc3RybGNweShwa2dsaWJf cGF0aCwgcGFyYW0tPnBrZ2xpYl9wYXRoLCBNQVhQR1BBVEgpOwogCisJaWYgKHBhcmFtLT5N eUJnd29ya2VyRW50cnkuYmd3X25hbWVbMF0gIT0gJ1wwJykKKwl7CisJCU15Qmd3b3JrZXJF bnRyeSA9IChCYWNrZ3JvdW5kV29ya2VyICopCisJCQlNZW1vcnlDb250ZXh0QWxsb2MoVG9w TWVtb3J5Q29udGV4dCwgc2l6ZW9mKEJhY2tncm91bmRXb3JrZXIpKTsKKwkJbWVtY3B5KE15 Qmd3b3JrZXJFbnRyeSwgJnBhcmFtLT5NeUJnd29ya2VyRW50cnksIHNpemVvZihCYWNrZ3Jv dW5kV29ya2VyKSk7CisJfQorCiAJLyoKIAkgKiBXZSBuZWVkIHRvIHJlc3RvcmUgZmQuYydz IGNvdW50cyBvZiBleHRlcm5hbGx5LW9wZW5lZCBGRHM7IHRvIGF2b2lkCiAJICogY29uZnVz aW9uLCBiZSBzdXJlIHRvIGRvIHRoaXMgYWZ0ZXIgcmVzdG9yaW5nIG1heF9zYWZlX2Zkcy4g IChOb3RlOgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcG9zdG1hc3Rlci9iZ3dvcmtlcl9p bnRlcm5hbHMuaCBiL3NyYy9pbmNsdWRlL3Bvc3RtYXN0ZXIvYmd3b3JrZXJfaW50ZXJuYWxz LmgKaW5kZXggMDlkZjA1NGZjY2UuLjMyM2YxZTA3MjkxIDEwMDY0NAotLS0gYS9zcmMvaW5j bHVkZS9wb3N0bWFzdGVyL2Jnd29ya2VyX2ludGVybmFscy5oCisrKyBiL3NyYy9pbmNsdWRl L3Bvc3RtYXN0ZXIvYmd3b3JrZXJfaW50ZXJuYWxzLmgKQEAgLTU3LDggKzU3LDQgQEAgZXh0 ZXJuIHZvaWQgUmVzZXRCYWNrZ3JvdW5kV29ya2VyQ3Jhc2hUaW1lcyh2b2lkKTsKIC8qIEVu dHJ5IHBvaW50IGZvciBiYWNrZ3JvdW5kIHdvcmtlciBwcm9jZXNzZXMgKi8KIGV4dGVybiB2 b2lkIEJhY2tncm91bmRXb3JrZXJNYWluKHZvaWQpIHBnX2F0dHJpYnV0ZV9ub3JldHVybigp OwogCi0jaWZkZWYgRVhFQ19CQUNLRU5ECi1leHRlcm4gQmFja2dyb3VuZFdvcmtlciAqQmFj a2dyb3VuZFdvcmtlckVudHJ5KGludCBzbG90bm8pOwotI2VuZGlmCi0KICNlbmRpZgkJCQkJ CQkvKiBCR1dPUktFUl9JTlRFUk5BTFNfSCAqLwotLSAKMi4zOS4yCgo= --------------ASkMfd1hzOyZblVTgMzqak1d Content-Type: text/x-patch; charset=UTF-8; name="v2-0002-Refactor-CreateSharedMemoryAndSemaphores.patch" Content-Disposition: attachment; filename="v2-0002-Refactor-CreateSharedMemoryAndSemaphores.patch" Content-Transfer-Encoding: base64 RnJvbSAwM2Y1M2FiOTIwODI0MGY0NWI3ZWM5MGJjNDM1YzgxZmUxMTQwNjcxIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFdlZCwgMTEgT2N0IDIwMjMgMTM6MzY6MTYgKzAzMDAK U3ViamVjdDogW1BBVENIIHYyIDIvNl0gUmVmYWN0b3IgQ3JlYXRlU2hhcmVkTWVtb3J5QW5k U2VtYXBob3Jlcy4KClRoZSBvcmRlciBvZiBwcm9jZXNzIGluaXRpYWxpemF0aW9uIHN0ZXBz IGlzIG5vdyBtb3JlIGNvbnNpc3RlbnQKYmV0d2VlbiAhRVhFQ19CQUNLRU5EIGFuZCBFWEVD X0JBQ0tFTkQgbW9kZXMuIEluaXRQcm9jZXNzKCkgaXMgY2FsbGVkCmF0IHRoZSBzYW1lIHBs YWNlIGluIGVpdGhlciBtb2RlLiBJbiBFWEVDX0JBQ0tFTkQgbW9kZSwgdGhlcmUncyBhbgpl eHRyYSBBdHRhY2hTaGFyZWRNZW1vcnlBbmRTZW1hcGhvcmVzKCkgY2FsbCwgd2hpY2ggaXMg YSBuby1vcCBpbgohRVhFQ19CQUNLRU5EIG1vZGUuIFRoaXMgcmVkdWNlcyB0aGUgbnVtYmVy IG9mICIjaWZkZWYgRVhFQ19CQUNLRU5EIgpibG9ja3MuCgpGb3IgY2xhcml0eSwgaGF2ZSBz ZXBhcmF0ZSBmdW5jdGlvbnMgZm9yICpjcmVhdGluZyogdGhlIHNoYXJlZCBtZW1vcnkKYW5k IHNlbWFwaG9yZXMsIGF0IHBvc3RtYXN0ZXIgb3Igc2luZ2xlLXVzZXIgYmFja2VuZCBzdGFy dHVwLCBhbmQKZm9yICphdHRhY2hpbmcqIHRvIGV4aXN0aW5nIHNoYXJlZCBtZW1vcnkgc3Ry dWN0dXJlcyBpbiBFWEVDX0JBQ0tFTkQKY2FzZS4KCkkgZmluZCBpdCBwcmV0dHkgY29uZnVz aW5nIGluIGFsbCB0aGUgKlNobWVtSW5pdCgpIGZ1bmN0aW9ucyB0b28gdGhhdAp0aGV5IGFy ZSBjYWxsZWQgaW4gdHdvIGRpZmZlcmVudCBjb250ZXh0czogaW4gcG9zdG1hc3RlciB3aGVu IGNyZWF0aW5nCnRoZSBzaG1lbSBzdHJ1Y3RzLCBhbmQgaW4gdGhlIGNoaWxkIHByb2Nlc3Mg aW4gRVhFQ19CQUNLRU5EIHdoZW4KYXR0YWNoaW5nIHRvIHRoZSBhbHJlYWR5IGV4aXN0aW5n IHN0cnVjdHMuIEJ1dCB0aGlzIGNvbW1pdCBkb2Vzbid0CmNoYW5nZSB0aGF0LgoKUmV2aWV3 ZWQtYnk6IFRyaXN0YW4gUGFydGluLCBBbmRyZXMgRnJldW5kCkRpc2N1c3Npb246IGh0dHBz Oi8vd3d3LnBvc3RncmVzcWwub3JnL21lc3NhZ2UtaWQvN2E1OWIwNzMtNWI1Yi0xNTFlLTdl ZDMtOGIwMWZmN2NlOWVmQGlraS5maQotLS0KIHNyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYXV0 b3ZhY3V1bS5jICAgfCAyMiArKysrKystLS0tLS0KIHNyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIv YXV4cHJvY2Vzcy5jICAgfCAgOCArKy0tLQogc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9iZ3dv cmtlci5jICAgICB8IDExICsrKy0tLQogc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9wb3N0bWFz dGVyLmMgICB8IDQ4ICsrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogc3JjL2JhY2tlbmQv cmVwbGljYXRpb24vd2FscmVjZWl2ZXIuYyB8ICAzICstCiBzcmMvYmFja2VuZC9zdG9yYWdl L2lwYy9pcGNpLmMgICAgICAgIHwgMTIgKysrKysrKwogc3JjL2JhY2tlbmQvc3RvcmFnZS9s bWdyL3Byb2MuYyAgICAgICB8ICAyICstCiBzcmMvaW5jbHVkZS9zdG9yYWdlL2lwYy5oICAg ICAgICAgICAgIHwgIDEgKwogOCBmaWxlcyBjaGFuZ2VkLCA0NCBpbnNlcnRpb25zKCspLCA2 MyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2F1 dG92YWN1dW0uYyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYXV0b3ZhY3V1bS5jCmluZGV4 IDMyN2VhMGQ0NWFkLi4xN2YyYjM2YjI4YSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcG9z dG1hc3Rlci9hdXRvdmFjdXVtLmMKKysrIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9hdXRv dmFjdXVtLmMKQEAgLTQ3NiwxNCArNDc2LDEzIEBAIEF1dG9WYWNMYXVuY2hlck1haW4oaW50 IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAlwcXNpZ25hbChTSUdDSExELCBTSUdfREZMKTsKIAog CS8qCi0JICogQ3JlYXRlIGEgcGVyLWJhY2tlbmQgUEdQUk9DIHN0cnVjdCBpbiBzaGFyZWQg bWVtb3J5LCBleGNlcHQgaW4gdGhlCi0JICogRVhFQ19CQUNLRU5EIGNhc2Ugd2hlcmUgdGhp cyB3YXMgZG9uZSBpbiBTdWJQb3N0bWFzdGVyTWFpbi4gV2UgbXVzdCBkbwotCSAqIHRoaXMg YmVmb3JlIHdlIGNhbiB1c2UgTFdMb2NrcyAoYW5kIGluIHRoZSBFWEVDX0JBQ0tFTkQgY2Fz ZSB3ZSBhbHJlYWR5Ci0JICogaGFkIHRvIGRvIHNvbWUgc3R1ZmYgd2l0aCBMV0xvY2tzKS4K KwkgKiBDcmVhdGUgYSBwZXItYmFja2VuZCBQR1BST0Mgc3RydWN0IGluIHNoYXJlZCBtZW1v cnkuICBXZSBtdXN0IGRvIHRoaXMKKwkgKiBiZWZvcmUgd2UgY2FuIHVzZSBMV0xvY2tzLgog CSAqLwotI2lmbmRlZiBFWEVDX0JBQ0tFTkQKIAlJbml0UHJvY2VzcygpOwotI2VuZGlmCisK KwkvKiBBdHRhY2ggcHJvY2VzcyB0byBzaGFyZWQgZGF0YSBzdHJ1Y3R1cmVzICovCisJQXR0 YWNoU2hhcmVkTWVtb3J5QW5kU2VtYXBob3JlcygpOwogCiAJLyogRWFybHkgaW5pdGlhbGl6 YXRpb24gKi8KIAlCYXNlSW5pdCgpOwpAQCAtMTU0OCwxNCArMTU0NywxMyBAQCBBdXRvVmFj V29ya2VyTWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCXBxc2lnbmFsKFNJR0NITEQs IFNJR19ERkwpOwogCiAJLyoKLQkgKiBDcmVhdGUgYSBwZXItYmFja2VuZCBQR1BST0Mgc3Ry dWN0IGluIHNoYXJlZCBtZW1vcnksIGV4Y2VwdCBpbiB0aGUKLQkgKiBFWEVDX0JBQ0tFTkQg Y2FzZSB3aGVyZSB0aGlzIHdhcyBkb25lIGluIFN1YlBvc3RtYXN0ZXJNYWluLiBXZSBtdXN0 IGRvCi0JICogdGhpcyBiZWZvcmUgd2UgY2FuIHVzZSBMV0xvY2tzIChhbmQgaW4gdGhlIEVY RUNfQkFDS0VORCBjYXNlIHdlIGFscmVhZHkKLQkgKiBoYWQgdG8gZG8gc29tZSBzdHVmZiB3 aXRoIExXTG9ja3MpLgorCSAqIENyZWF0ZSBhIHBlci1iYWNrZW5kIFBHUFJPQyBzdHJ1Y3Qg aW4gc2hhcmVkIG1lbW9yeS4gIFdlIG11c3QgZG8gdGhpcworCSAqIGJlZm9yZSB3ZSBjYW4g dXNlIExXTG9ja3MuCiAJICovCi0jaWZuZGVmIEVYRUNfQkFDS0VORAogCUluaXRQcm9jZXNz KCk7Ci0jZW5kaWYKKworCS8qIEF0dGFjaCBwcm9jZXNzIHRvIHNoYXJlZCBkYXRhIHN0cnVj dHVyZXMgKi8KKwlBdHRhY2hTaGFyZWRNZW1vcnlBbmRTZW1hcGhvcmVzKCk7CiAKIAkvKiBF YXJseSBpbml0aWFsaXphdGlvbiAqLwogCUJhc2VJbml0KCk7CmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9wb3N0bWFzdGVyL2F1eHByb2Nlc3MuYyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0 ZXIvYXV4cHJvY2Vzcy5jCmluZGV4IGNhZTZmZWIzNTYyLi41MzZkOWEyYjNlNCAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9hdXhwcm9jZXNzLmMKKysrIGIvc3JjL2Jh Y2tlbmQvcG9zdG1hc3Rlci9hdXhwcm9jZXNzLmMKQEAgLTk3LDEyICs5NywxMiBAQCBBdXhp bGlhcnlQcm9jZXNzTWFpbihBdXhQcm9jVHlwZSBhdXh0eXBlKQogCSAqLwogCiAJLyoKLQkg KiBDcmVhdGUgYSBQR1BST0Mgc28gd2UgY2FuIHVzZSBMV0xvY2tzLiAgSW4gdGhlIEVYRUNf QkFDS0VORCBjYXNlLCB0aGlzCi0JICogd2FzIGFscmVhZHkgZG9uZSBieSBTdWJQb3N0bWFz dGVyTWFpbigpLgorCSAqIENyZWF0ZSBhIFBHUFJPQyBzbyB3ZSBjYW4gdXNlIExXTG9ja3Mu CiAJICovCi0jaWZuZGVmIEVYRUNfQkFDS0VORAogCUluaXRBdXhpbGlhcnlQcm9jZXNzKCk7 Ci0jZW5kaWYKKworCS8qIEF0dGFjaCBwcm9jZXNzIHRvIHNoYXJlZCBkYXRhIHN0cnVjdHVy ZXMgKi8KKwlBdHRhY2hTaGFyZWRNZW1vcnlBbmRTZW1hcGhvcmVzKCk7CiAKIAlCYXNlSW5p dCgpOwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2Jnd29ya2VyLmMg Yi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2Jnd29ya2VyLmMKaW5kZXggYjNjMmU2NWJhOWYu LjE1NDM1OTY1YmY4IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2Jnd29y a2VyLmMKKysrIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9iZ3dvcmtlci5jCkBAIC04MTAs MTQgKzgxMCwxMyBAQCBCYWNrZ3JvdW5kV29ya2VyTWFpbih2b2lkKQogCVBHX2V4Y2VwdGlv bl9zdGFjayA9ICZsb2NhbF9zaWdqbXBfYnVmOwogCiAJLyoKLQkgKiBDcmVhdGUgYSBwZXIt YmFja2VuZCBQR1BST0Mgc3RydWN0IGluIHNoYXJlZCBtZW1vcnksIGV4Y2VwdCBpbiB0aGUK LQkgKiBFWEVDX0JBQ0tFTkQgY2FzZSB3aGVyZSB0aGlzIHdhcyBkb25lIGluIFN1YlBvc3Rt YXN0ZXJNYWluLiBXZSBtdXN0IGRvCi0JICogdGhpcyBiZWZvcmUgd2UgY2FuIHVzZSBMV0xv Y2tzIChhbmQgaW4gdGhlIEVYRUNfQkFDS0VORCBjYXNlIHdlIGFscmVhZHkKLQkgKiBoYWQg dG8gZG8gc29tZSBzdHVmZiB3aXRoIExXTG9ja3MpLgorCSAqIENyZWF0ZSBhIHBlci1iYWNr ZW5kIFBHUFJPQyBzdHJ1Y3QgaW4gc2hhcmVkIG1lbW9yeS4gIFdlIG11c3QgZG8gdGhpcwor CSAqIGJlZm9yZSB3ZSBjYW4gdXNlIExXTG9ja3MuCiAJICovCi0jaWZuZGVmIEVYRUNfQkFD S0VORAogCUluaXRQcm9jZXNzKCk7Ci0jZW5kaWYKKworCS8qIEF0dGFjaCBwcm9jZXNzIHRv IHNoYXJlZCBkYXRhIHN0cnVjdHVyZXMgKi8KKwlBdHRhY2hTaGFyZWRNZW1vcnlBbmRTZW1h cGhvcmVzKCk7CiAKIAkvKgogCSAqIEVhcmx5IGluaXRpYWxpemF0aW9uLgpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9wb3N0bWFzdGVyLmMgYi9zcmMvYmFja2VuZC9w b3N0bWFzdGVyL3Bvc3RtYXN0ZXIuYwppbmRleCBlNTVmM2ExNTJhYS4uMTNlYmY3YWM0ZGUg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcG9zdG1hc3Rlci5jCisrKyBi L3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcG9zdG1hc3Rlci5jCkBAIC00MDk3LDE1ICs0MDk3 LDYgQEAgQmFja2VuZFN0YXJ0dXAoUG9ydCAqcG9ydCkKIAkJLyogUGVyZm9ybSBhZGRpdGlv bmFsIGluaXRpYWxpemF0aW9uIGFuZCBjb2xsZWN0IHN0YXJ0dXAgcGFja2V0ICovCiAJCUJh Y2tlbmRJbml0aWFsaXplKHBvcnQpOwogCi0JCS8qCi0JCSAqIENyZWF0ZSBhIHBlci1iYWNr ZW5kIFBHUFJPQyBzdHJ1Y3QgaW4gc2hhcmVkIG1lbW9yeS4gV2UgbXVzdCBkbwotCQkgKiB0 aGlzIGJlZm9yZSB3ZSBjYW4gdXNlIExXTG9ja3MuIEluIHRoZSAhRVhFQ19CQUNLRU5EIGNh c2UgKGhlcmUpCi0JCSAqIHRoaXMgY291bGQgYmUgZGVsYXllZCBhIGJpdCBmdXJ0aGVyLCBi dXQgRVhFQ19CQUNLRU5EIG5lZWRzIHRvIGRvCi0JCSAqIHN0dWZmIHdpdGggTFdMb2NrcyBi ZWZvcmUgUG9zdGdyZXNNYWluKCksIHNvIHdlIGRvIGl0IGhlcmUgYXMgd2VsbAotCQkgKiBm b3Igc3ltbWV0cnkuCi0JCSAqLwotCQlJbml0UHJvY2VzcygpOwotCiAJCS8qIEFuZCBydW4g dGhlIGJhY2tlbmQgKi8KIAkJQmFja2VuZFJ1bihwb3J0KTsKIAl9CkBAIC00NDE2LDYgKzQ0 MDcsMTUgQEAgQmFja2VuZEluaXRpYWxpemUoUG9ydCAqcG9ydCkKIHN0YXRpYyB2b2lkCiBC YWNrZW5kUnVuKFBvcnQgKnBvcnQpCiB7CisJLyoKKwkgKiBDcmVhdGUgYSBwZXItYmFja2Vu ZCBQR1BST0Mgc3RydWN0IGluIHNoYXJlZCBtZW1vcnkuICBXZSBtdXN0IGRvIHRoaXMKKwkg KiBiZWZvcmUgd2UgY2FuIHVzZSBMV0xvY2tzIChpbiBBdHRhY2hTaGFyZWRNZW1vcnlBbmRT ZW1hcGhvcmVzKS4KKwkgKi8KKwlJbml0UHJvY2VzcygpOworCisJLyogQXR0YWNoIHByb2Nl c3MgdG8gc2hhcmVkIGRhdGEgc3RydWN0dXJlcyAqLworCUF0dGFjaFNoYXJlZE1lbW9yeUFu ZFNlbWFwaG9yZXMoKTsKKwogCS8qCiAJICogTWFrZSBzdXJlIHdlIGFyZW4ndCBpbiBQb3N0 bWFzdGVyQ29udGV4dCBhbnltb3JlLiAgKFdlIGNhbid0IGRlbGV0ZSBpdAogCSAqIGp1c3Qg eWV0LCB0aG91Z2gsIGJlY2F1c2UgSW5pdFBvc3RncmVzIHdpbGwgbmVlZCB0aGUgSEJBIGRh dGEuKQpAQCAtNDkxMSwxMiArNDkxMSw2IEBAIFN1YlBvc3RtYXN0ZXJNYWluKGludCBhcmdj LCBjaGFyICphcmd2W10pCiAJCS8qIFJlc3RvcmUgYmFzaWMgc2hhcmVkIG1lbW9yeSBwb2lu dGVycyAqLwogCQlJbml0U2htZW1BY2Nlc3MoVXNlZFNobWVtU2VnQWRkcik7CiAKLQkJLyog TmVlZCBhIFBHUFJPQyB0byBydW4gQ3JlYXRlU2hhcmVkTWVtb3J5QW5kU2VtYXBob3JlcyAq LwotCQlJbml0UHJvY2VzcygpOwotCi0JCS8qIEF0dGFjaCBwcm9jZXNzIHRvIHNoYXJlZCBk YXRhIHN0cnVjdHVyZXMgKi8KLQkJQ3JlYXRlU2hhcmVkTWVtb3J5QW5kU2VtYXBob3Jlcygp OwotCiAJCS8qIEFuZCBydW4gdGhlIGJhY2tlbmQgKi8KIAkJQmFja2VuZFJ1bigmcG9ydCk7 CQkvKiBkb2VzIG5vdCByZXR1cm4gKi8KIAl9CkBAIC00OTI5LDEyICs0OTIzLDYgQEAgU3Vi UG9zdG1hc3Rlck1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAkJLyogUmVzdG9yZSBi YXNpYyBzaGFyZWQgbWVtb3J5IHBvaW50ZXJzICovCiAJCUluaXRTaG1lbUFjY2VzcyhVc2Vk U2htZW1TZWdBZGRyKTsKIAotCQkvKiBOZWVkIGEgUEdQUk9DIHRvIHJ1biBDcmVhdGVTaGFy ZWRNZW1vcnlBbmRTZW1hcGhvcmVzICovCi0JCUluaXRBdXhpbGlhcnlQcm9jZXNzKCk7Ci0K LQkJLyogQXR0YWNoIHByb2Nlc3MgdG8gc2hhcmVkIGRhdGEgc3RydWN0dXJlcyAqLwotCQlD cmVhdGVTaGFyZWRNZW1vcnlBbmRTZW1hcGhvcmVzKCk7Ci0KIAkJYXV4dHlwZSA9IGF0b2ko YXJndlszXSk7CiAJCUF1eGlsaWFyeVByb2Nlc3NNYWluKGF1eHR5cGUpOwkvKiBkb2VzIG5v dCByZXR1cm4gKi8KIAl9CkBAIC00OTQzLDEyICs0OTMxLDYgQEAgU3ViUG9zdG1hc3Rlck1h aW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAkJLyogUmVzdG9yZSBiYXNpYyBzaGFyZWQg bWVtb3J5IHBvaW50ZXJzICovCiAJCUluaXRTaG1lbUFjY2VzcyhVc2VkU2htZW1TZWdBZGRy KTsKIAotCQkvKiBOZWVkIGEgUEdQUk9DIHRvIHJ1biBDcmVhdGVTaGFyZWRNZW1vcnlBbmRT ZW1hcGhvcmVzICovCi0JCUluaXRQcm9jZXNzKCk7Ci0KLQkJLyogQXR0YWNoIHByb2Nlc3Mg dG8gc2hhcmVkIGRhdGEgc3RydWN0dXJlcyAqLwotCQlDcmVhdGVTaGFyZWRNZW1vcnlBbmRT ZW1hcGhvcmVzKCk7Ci0KIAkJQXV0b1ZhY0xhdW5jaGVyTWFpbihhcmdjIC0gMiwgYXJndiAr IDIpOwkvKiBkb2VzIG5vdCByZXR1cm4gKi8KIAl9CiAJaWYgKHN0cmNtcChhcmd2WzFdLCAi LS1mb3JrYXZ3b3JrZXIiKSA9PSAwKQpAQCAtNDk1NiwxMiArNDkzOCw2IEBAIFN1YlBvc3Rt YXN0ZXJNYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJCS8qIFJlc3RvcmUgYmFzaWMg c2hhcmVkIG1lbW9yeSBwb2ludGVycyAqLwogCQlJbml0U2htZW1BY2Nlc3MoVXNlZFNobWVt U2VnQWRkcik7CiAKLQkJLyogTmVlZCBhIFBHUFJPQyB0byBydW4gQ3JlYXRlU2hhcmVkTWVt b3J5QW5kU2VtYXBob3JlcyAqLwotCQlJbml0UHJvY2VzcygpOwotCi0JCS8qIEF0dGFjaCBw cm9jZXNzIHRvIHNoYXJlZCBkYXRhIHN0cnVjdHVyZXMgKi8KLQkJQ3JlYXRlU2hhcmVkTWVt b3J5QW5kU2VtYXBob3JlcygpOwotCiAJCUF1dG9WYWNXb3JrZXJNYWluKGFyZ2MgLSAyLCBh cmd2ICsgMik7CS8qIGRvZXMgbm90IHJldHVybiAqLwogCX0KIAlpZiAoc3RybmNtcChhcmd2 WzFdLCAiLS1mb3JrYmd3b3JrZXIiLCAxNCkgPT0gMCkKQEAgLTQ5NzIsMTIgKzQ5NDgsNiBA QCBTdWJQb3N0bWFzdGVyTWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCQkvKiBSZXN0 b3JlIGJhc2ljIHNoYXJlZCBtZW1vcnkgcG9pbnRlcnMgKi8KIAkJSW5pdFNobWVtQWNjZXNz KFVzZWRTaG1lbVNlZ0FkZHIpOwogCi0JCS8qIE5lZWQgYSBQR1BST0MgdG8gcnVuIENyZWF0 ZVNoYXJlZE1lbW9yeUFuZFNlbWFwaG9yZXMgKi8KLQkJSW5pdFByb2Nlc3MoKTsKLQotCQkv KiBBdHRhY2ggcHJvY2VzcyB0byBzaGFyZWQgZGF0YSBzdHJ1Y3R1cmVzICovCi0JCUNyZWF0 ZVNoYXJlZE1lbW9yeUFuZFNlbWFwaG9yZXMoKTsKLQogCQlTdGFydEJhY2tncm91bmRXb3Jr ZXIoKTsKIAl9CiAJaWYgKHN0cmNtcChhcmd2WzFdLCAiLS1mb3JrbG9nIikgPT0gMCkKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3dhbHJlY2VpdmVyLmMgYi9zcmMv YmFja2VuZC9yZXBsaWNhdGlvbi93YWxyZWNlaXZlci5jCmluZGV4IGZlZmY3MDk0MzUxLi4w NzM2NjhkNGYyZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vd2FscmVj ZWl2ZXIuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi93YWxyZWNlaXZlci5jCkBA IC0xOTQsNyArMTk0LDcgQEAgV2FsUmVjZWl2ZXJNYWluKHZvaWQpCiAJVGltZUxpbmVJRAlz dGFydHBvaW50VExJOwogCVRpbWVMaW5lSUQJcHJpbWFyeVRMSTsKIAlib29sCQlmaXJzdF9z dHJlYW07Ci0JV2FsUmN2RGF0YSAqd2FscmN2ID0gV2FsUmN2OworCVdhbFJjdkRhdGEgKndh bHJjdjsKIAlUaW1lc3RhbXBUeiBub3c7CiAJY2hhcgkgICAqZXJyOwogCWNoYXIJICAgKnNl bmRlcl9ob3N0ID0gTlVMTDsKQEAgLTIwNCw2ICsyMDQsNyBAQCBXYWxSZWNlaXZlck1haW4o dm9pZCkKIAkgKiBXYWxSY3Ygc2hvdWxkIGJlIHNldCB1cCBhbHJlYWR5IChpZiB3ZSBhcmUg YSBiYWNrZW5kLCB3ZSBpbmhlcml0IHRoaXMKIAkgKiBieSBmb3JrKCkgb3IgRVhFQ19CQUNL RU5EIG1lY2hhbmlzbSBmcm9tIHRoZSBwb3N0bWFzdGVyKS4KIAkgKi8KKwl3YWxyY3YgPSBX YWxSY3Y7CiAJQXNzZXJ0KHdhbHJjdiAhPSBOVUxMKTsKIAogCS8qCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9zdG9yYWdlL2lwYy9pcGNpLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lw Yy9pcGNpLmMKaW5kZXggYTNkOGVhY2I4ZGMuLjRmMzFjZWNhMDczIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9zdG9yYWdlL2lwYy9pcGNpLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFn ZS9pcGMvaXBjaS5jCkBAIC0xNzEsNiArMTcxLDE4IEBAIENhbGN1bGF0ZVNobWVtU2l6ZShp bnQgKm51bV9zZW1hcGhvcmVzKQogICogY2hlY2sgSXNVbmRlclBvc3RtYXN0ZXIsIHJhdGhl ciB0aGFuIEVYRUNfQkFDS0VORCwgdG8gZGV0ZWN0IHRoaXMgY2FzZS4KICAqIFRoaXMgaXMg YSBiaXQgY29kZS13YXN0ZWZ1bCBhbmQgY291bGQgYmUgY2xlYW5lZCB1cC4pCiAgKi8KK3Zv aWQKK0F0dGFjaFNoYXJlZE1lbW9yeUFuZFNlbWFwaG9yZXModm9pZCkKK3sKKwkvKiBJbml0 UHJvY2VzcyBtdXN0J3ZlIGJlZW4gY2FsbGVkIGFscmVhZHkgKi8KKwlBc3NlcnQoTXlQcm9j ICE9IE5VTEwpOworCisJLyogSW5pdCAhRVhFQ19CQUNLRU5EIG1vZGUsIHdlIGluaGVyaXRl ZCBldmVyeXRoaW5nIHRocm91Z2ggdGhlIGZvcmsgKi8KKyNpZmRlZiBFWEVDX0JBQ0tFTkQK KwlDcmVhdGVTaGFyZWRNZW1vcnlBbmRTZW1hcGhvcmVzKCk7CisjZW5kaWYKK30KKwogdm9p ZAogQ3JlYXRlU2hhcmVkTWVtb3J5QW5kU2VtYXBob3Jlcyh2b2lkKQogewpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL3Byb2MuYyBiL3NyYy9iYWNrZW5kL3N0b3Jh Z2UvbG1nci9wcm9jLmMKaW5kZXggNWI2NjNhMjk5N2MuLmMxZDI1OWIxNDA1IDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvcHJvYy5jCisrKyBiL3NyYy9iYWNrZW5k L3N0b3JhZ2UvbG1nci9wcm9jLmMKQEAgLTQ2OCw3ICs0NjgsNyBAQCBJbml0UHJvY2Vzcyh2 b2lkKQogICoKICAqIFRoaXMgaXMgc2VwYXJhdGUgZnJvbSBJbml0UHJvY2VzcyBiZWNhdXNl IHdlIGNhbid0IGFjcXVpcmUgTFdMb2NrcyB1bnRpbAogICogd2UndmUgY3JlYXRlZCBhIFBH UFJPQywgYnV0IGluIHRoZSBFWEVDX0JBQ0tFTkQgY2FzZSBQcm9jQXJyYXlBZGQgd29uJ3QK LSAqIHdvcmsgdW50aWwgYWZ0ZXIgd2UndmUgZG9uZSBDcmVhdGVTaGFyZWRNZW1vcnlBbmRT ZW1hcGhvcmVzLgorICogd29yayB1bnRpbCBhZnRlciB3ZSd2ZSBkb25lIEF0dGFjaFNoYXJl ZE1lbW9yeUFuZFNlbWFwaG9yZXMuCiAgKi8KIHZvaWQKIEluaXRQcm9jZXNzUGhhc2UyKHZv aWQpCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdlL2lwYy5oIGIvc3JjL2luY2x1 ZGUvc3RvcmFnZS9pcGMuaAppbmRleCA4ODhjMDhiMzA2Ny4uZTc1NjU2ZjUyNDIgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvaXBjLmgKKysrIGIvc3JjL2luY2x1ZGUvc3Rv cmFnZS9pcGMuaApAQCAtNzksNiArNzksNyBAQCBleHRlcm4gUEdETExJTVBPUlQgc2htZW1f c3RhcnR1cF9ob29rX3R5cGUgc2htZW1fc3RhcnR1cF9ob29rOwogCiBleHRlcm4gU2l6ZSBD YWxjdWxhdGVTaG1lbVNpemUoaW50ICpudW1fc2VtYXBob3Jlcyk7CiBleHRlcm4gdm9pZCBD cmVhdGVTaGFyZWRNZW1vcnlBbmRTZW1hcGhvcmVzKHZvaWQpOworZXh0ZXJuIHZvaWQgQXR0 YWNoU2hhcmVkTWVtb3J5QW5kU2VtYXBob3Jlcyh2b2lkKTsKIGV4dGVybiB2b2lkIEluaXRp YWxpemVTaG1lbUdVQ3Modm9pZCk7CiAKICNlbmRpZgkJCQkJCQkvKiBJUENfSCAqLwotLSAK Mi4zOS4yCgo= --------------ASkMfd1hzOyZblVTgMzqak1d Content-Type: text/x-patch; charset=UTF-8; name="v2-0003-Pass-CAC-as-argument-to-backend-process.patch" Content-Disposition: attachment; filename="v2-0003-Pass-CAC-as-argument-to-backend-process.patch" Content-Transfer-Encoding: base64 RnJvbSAwNDczZjczMmZjM2NhODk0ZGZkZjZlOTgyOTc1ODJlZjEwZmVhN2Q4IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFdlZCwgMTEgT2N0IDIwMjMgMTM6Mzg6MDAgKzAzMDAK U3ViamVjdDogW1BBVENIIHYyIDMvNl0gUGFzcyBDQUMgYXMgYXJndW1lbnQgdG8gYmFja2Vu ZCBwcm9jZXNzLgoKV2UgdXNlZCB0byBzbXVnZ2xlIGl0IHRvIHRoZSBjaGlsZCBwcm9jZXNz IGluIHRoZSBQb3J0IHN0cnVjdCwgYnV0IGl0IHNlZW1zCmJldHRlciB0byBwYXNzIGl0IGRv d24gYXMgYSBzZXBhcmF0ZSBhcmd1bWVudC4KClJldmlld2VkLWJ5OiBUcmlzdGFuIFBhcnRp biwgQW5kcmVzIEZyZXVuZApEaXNjdXNzaW9uOiBodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9y Zy9tZXNzYWdlLWlkLzdhNTliMDczLTViNWItMTUxZS03ZWQzLThiMDFmZjdjZTllZkBpa2ku ZmkKLS0tCiBzcmMvYmFja2VuZC9wb3N0bWFzdGVyL3Bvc3RtYXN0ZXIuYyB8IDQzICsrKysr KysrKysrKysrKysrKysrKy0tLS0tLS0tCiBzcmMvaW5jbHVkZS9saWJwcS9saWJwcS1iZS5o ICAgICAgICB8IDEyIC0tLS0tLS0tCiAyIGZpbGVzIGNoYW5nZWQsIDMxIGluc2VydGlvbnMo KyksIDI0IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0 ZXIvcG9zdG1hc3Rlci5jIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9wb3N0bWFzdGVyLmMK aW5kZXggMTNlYmY3YWM0ZGUuLjkzNjgyOGRmMDEwIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9wb3N0bWFzdGVyL3Bvc3RtYXN0ZXIuYworKysgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVy L3Bvc3RtYXN0ZXIuYwpAQCAtNDE4LDcgKzQxOCwxOCBAQCBzdGF0aWMgdm9pZCBIYW5kbGVD aGlsZENyYXNoKGludCBwaWQsIGludCBleGl0c3RhdHVzLCBjb25zdCBjaGFyICpwcm9jbmFt ZSk7CiBzdGF0aWMgdm9pZCBMb2dDaGlsZEV4aXQoaW50IGxldiwgY29uc3QgY2hhciAqcHJv Y25hbWUsCiAJCQkJCQkgaW50IHBpZCwgaW50IGV4aXRzdGF0dXMpOwogc3RhdGljIHZvaWQg UG9zdG1hc3RlclN0YXRlTWFjaGluZSh2b2lkKTsKLXN0YXRpYyB2b2lkIEJhY2tlbmRJbml0 aWFsaXplKFBvcnQgKnBvcnQpOworCit0eXBlZGVmIGVudW0gQ0FDX3N0YXRlCit7CisJQ0FD X09LLAorCUNBQ19TVEFSVFVQLAorCUNBQ19TSFVURE9XTiwKKwlDQUNfUkVDT1ZFUlksCisJ Q0FDX05PVENPTlNJU1RFTlQsCisJQ0FDX1RPT01BTlkKK30gQ0FDX3N0YXRlOworCitzdGF0 aWMgdm9pZCBCYWNrZW5kSW5pdGlhbGl6ZShQb3J0ICpwb3J0LCBDQUNfc3RhdGUgY2FjKTsK IHN0YXRpYyB2b2lkIEJhY2tlbmRSdW4oUG9ydCAqcG9ydCkgcGdfYXR0cmlidXRlX25vcmV0 dXJuKCk7CiBzdGF0aWMgdm9pZCBFeGl0UG9zdG1hc3RlcihpbnQgc3RhdHVzKSBwZ19hdHRy aWJ1dGVfbm9yZXR1cm4oKTsKIHN0YXRpYyBpbnQJU2VydmVyTG9vcCh2b2lkKTsKQEAgLTQ3 NSw3ICs0ODYsNyBAQCB0eXBlZGVmIHN0cnVjdAogfSB3aW4zMl9kZWFkY2hpbGRfd2FpdGlu Zm87CiAjZW5kaWYJCQkJCQkJLyogV0lOMzIgKi8KIAotc3RhdGljIHBpZF90IGJhY2tlbmRf Zm9ya2V4ZWMoUG9ydCAqcG9ydCk7CitzdGF0aWMgcGlkX3QgYmFja2VuZF9mb3JrZXhlYyhQ b3J0ICpwb3J0LCBDQUNfc3RhdGUgY2FjKTsKIHN0YXRpYyBwaWRfdCBpbnRlcm5hbF9mb3Jr ZXhlYyhpbnQgYXJnYywgY2hhciAqYXJndltdLCBQb3J0ICpwb3J0KTsKIAogLyogVHlwZSBm b3IgYSBzb2NrZXQgdGhhdCBjYW4gYmUgaW5oZXJpdGVkIHRvIGEgY2xpZW50IHByb2Nlc3Mg Ki8KQEAgLTQwMzcsNiArNDA0OCw3IEBAIEJhY2tlbmRTdGFydHVwKFBvcnQgKnBvcnQpCiB7 CiAJQmFja2VuZCAgICAqYm47CQkJCS8qIGZvciBiYWNrZW5kIGNsZWFudXAgKi8KIAlwaWRf dAkJcGlkOworCUNBQ19zdGF0ZQljYWM7CiAKIAkvKgogCSAqIENyZWF0ZSBiYWNrZW5kIGRh dGEgc3RydWN0dXJlLiAgQmV0dGVyIGJlZm9yZSB0aGUgZm9yaygpIHNvIHdlIGNhbgpAQCAt NDA2OCw4ICs0MDgwLDggQEAgQmFja2VuZFN0YXJ0dXAoUG9ydCAqcG9ydCkKIAlibi0+Y2Fu Y2VsX2tleSA9IE15Q2FuY2VsS2V5OwogCiAJLyogUGFzcyBkb3duIGNhbkFjY2VwdENvbm5l Y3Rpb25zIHN0YXRlICovCi0JcG9ydC0+Y2FuQWNjZXB0Q29ubmVjdGlvbnMgPSBjYW5BY2Nl cHRDb25uZWN0aW9ucyhCQUNLRU5EX1RZUEVfTk9STUFMKTsKLQlibi0+ZGVhZF9lbmQgPSAo cG9ydC0+Y2FuQWNjZXB0Q29ubmVjdGlvbnMgIT0gQ0FDX09LKTsKKwljYWMgPSBjYW5BY2Nl cHRDb25uZWN0aW9ucyhCQUNLRU5EX1RZUEVfTk9STUFMKTsKKwlibi0+ZGVhZF9lbmQgPSAo Y2FjICE9IENBQ19PSyk7CiAKIAkvKgogCSAqIFVubGVzcyBpdCdzIGEgZGVhZF9lbmQgY2hp bGQsIGFzc2lnbiBpdCBhIGNoaWxkIHNsb3QgbnVtYmVyCkBAIC00MDgzLDcgKzQwOTUsNyBA QCBCYWNrZW5kU3RhcnR1cChQb3J0ICpwb3J0KQogCWJuLT5iZ3dvcmtlcl9ub3RpZnkgPSBm YWxzZTsKIAogI2lmZGVmIEVYRUNfQkFDS0VORAotCXBpZCA9IGJhY2tlbmRfZm9ya2V4ZWMo cG9ydCk7CisJcGlkID0gYmFja2VuZF9mb3JrZXhlYyhwb3J0LCBjYWMpOwogI2Vsc2UJCQkJ CQkJLyogIUVYRUNfQkFDS0VORCAqLwogCXBpZCA9IGZvcmtfcHJvY2VzcygpOwogCWlmIChw aWQgPT0gMCkJCQkJLyogY2hpbGQgKi8KQEAgLTQwOTUsNyArNDEwNyw3IEBAIEJhY2tlbmRT dGFydHVwKFBvcnQgKnBvcnQpCiAJCUNsb3NlUG9zdG1hc3RlclBvcnRzKGZhbHNlKTsKIAog CQkvKiBQZXJmb3JtIGFkZGl0aW9uYWwgaW5pdGlhbGl6YXRpb24gYW5kIGNvbGxlY3Qgc3Rh cnR1cCBwYWNrZXQgKi8KLQkJQmFja2VuZEluaXRpYWxpemUocG9ydCk7CisJCUJhY2tlbmRJ bml0aWFsaXplKHBvcnQsIGNhYyk7CiAKIAkJLyogQW5kIHJ1biB0aGUgYmFja2VuZCAqLwog CQlCYWNrZW5kUnVuKHBvcnQpOwpAQCAtNDE4Miw3ICs0MTk0LDcgQEAgcmVwb3J0X2Zvcmtf ZmFpbHVyZV90b19jbGllbnQoUG9ydCAqcG9ydCwgaW50IGVycm51bSkKICAqIGJ1dCBoYXZl IG5vdCB5ZXQgc2V0IHVwIG1vc3Qgb2Ygb3VyIGxvY2FsIHBvaW50ZXJzIHRvIHNobWVtIHN0 cnVjdHVyZXMuCiAgKi8KIHN0YXRpYyB2b2lkCi1CYWNrZW5kSW5pdGlhbGl6ZShQb3J0ICpw b3J0KQorQmFja2VuZEluaXRpYWxpemUoUG9ydCAqcG9ydCwgQ0FDX3N0YXRlIGNhYykKIHsK IAlpbnQJCQlzdGF0dXM7CiAJaW50CQkJcmV0OwpAQCAtNDMxNSw3ICs0MzI3LDcgQEAgQmFj a2VuZEluaXRpYWxpemUoUG9ydCAqcG9ydCkKIAkgKiBub3cgaW5zdGVhZCBvZiB3YXN0aW5n IGN5Y2xlcyBvbiBhbiBhdXRoZW50aWNhdGlvbiBleGNoYW5nZS4gKFRoaXMgYWxzbwogCSAq IGFsbG93cyBhIHBnX3BpbmcgdXRpbGl0eSB0byBiZSB3cml0dGVuLikKIAkgKi8KLQlzd2l0 Y2ggKHBvcnQtPmNhbkFjY2VwdENvbm5lY3Rpb25zKQorCXN3aXRjaCAoY2FjKQogCXsKIAkJ Y2FzZSBDQUNfU1RBUlRVUDoKIAkJCWVyZXBvcnQoRkFUQUwsCkBAIC00NDYwLDE1ICs0NDcy LDE5IEBAIHBvc3RtYXN0ZXJfZm9ya2V4ZWMoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKICAq IHJldHVybnMgdGhlIHBpZCBvZiB0aGUgZm9yay9leGVjJ2QgcHJvY2Vzcywgb3IgLTEgb24g ZmFpbHVyZQogICovCiBzdGF0aWMgcGlkX3QKLWJhY2tlbmRfZm9ya2V4ZWMoUG9ydCAqcG9y dCkKK2JhY2tlbmRfZm9ya2V4ZWMoUG9ydCAqcG9ydCwgQ0FDX3N0YXRlIGNhYykKIHsKLQlj aGFyCSAgICphdls0XTsKKwljaGFyCSAgICphdls1XTsKIAlpbnQJCQlhYyA9IDA7CisJY2hh cgkJY2FjYnVmWzEwXTsKIAogCWF2W2FjKytdID0gInBvc3RncmVzIjsKIAlhdlthYysrXSA9 ICItLWZvcmtiYWNrZW5kIjsKIAlhdlthYysrXSA9IE5VTEw7CQkJLyogZmlsbGVkIGluIGJ5 IGludGVybmFsX2ZvcmtleGVjICovCiAKKwlzbnByaW50ZihjYWNidWYsIHNpemVvZihjYWNi dWYpLCAiJWQiLCAoaW50KSBjYWMpOworCWF2W2FjKytdID0gY2FjYnVmOworCiAJYXZbYWNd ID0gTlVMTDsKIAlBc3NlcnQoYWMgPCBsZW5ndGhvZihhdikpOwogCkBAIC00ODcyLDcgKzQ4 ODgsMTAgQEAgU3ViUG9zdG1hc3Rlck1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAkv KiBSdW4gYmFja2VuZCBvciBhcHByb3ByaWF0ZSBjaGlsZCAqLwogCWlmIChzdHJjbXAoYXJn dlsxXSwgIi0tZm9ya2JhY2tlbmQiKSA9PSAwKQogCXsKLQkJQXNzZXJ0KGFyZ2MgPT0gMyk7 CQkvKiBzaG91bGRuJ3QgYmUgYW55IG1vcmUgYXJncyAqLworCQlDQUNfc3RhdGUJY2FjOwor CisJCUFzc2VydChhcmdjID09IDQpOworCQljYWMgPSAoQ0FDX3N0YXRlKSBhdG9pKGFyZ3Zb M10pOwogCiAJCS8qCiAJCSAqIE5lZWQgdG8gcmVpbml0aWFsaXplIHRoZSBTU0wgbGlicmFy eSBpbiB0aGUgYmFja2VuZCwgc2luY2UgdGhlCkBAIC00OTA2LDcgKzQ5MjUsNyBAQCBTdWJQ b3N0bWFzdGVyTWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCQkgKiBQR1BST0Mgc2xv dHMsIHdlIGhhdmUgYWxyZWFkeSBpbml0aWFsaXplZCBsaWJwcSBhbmQgYXJlIGFibGUgdG8K IAkJICogcmVwb3J0IHRoZSBlcnJvciB0byB0aGUgY2xpZW50LgogCQkgKi8KLQkJQmFja2Vu ZEluaXRpYWxpemUoJnBvcnQpOworCQlCYWNrZW5kSW5pdGlhbGl6ZSgmcG9ydCwgY2FjKTsK IAogCQkvKiBSZXN0b3JlIGJhc2ljIHNoYXJlZCBtZW1vcnkgcG9pbnRlcnMgKi8KIAkJSW5p dFNobWVtQWNjZXNzKFVzZWRTaG1lbVNlZ0FkZHIpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1 ZGUvbGlicHEvbGlicHEtYmUuaCBiL3NyYy9pbmNsdWRlL2xpYnBxL2xpYnBxLWJlLmgKaW5k ZXggYTBiNzRjODA5NWYuLjMzNWNiMmRlNDRhIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9s aWJwcS9saWJwcS1iZS5oCisrKyBiL3NyYy9pbmNsdWRlL2xpYnBxL2xpYnBxLWJlLmgKQEAg LTU4LDE3ICs1OCw2IEBAIHR5cGVkZWYgc3RydWN0CiAjaW5jbHVkZSAibGlicHEvcHFjb21t LmgiCiAKIAotdHlwZWRlZiBlbnVtIENBQ19zdGF0ZQotewotCUNBQ19PSywKLQlDQUNfU1RB UlRVUCwKLQlDQUNfU0hVVERPV04sCi0JQ0FDX1JFQ09WRVJZLAotCUNBQ19OT1RDT05TSVNU RU5ULAotCUNBQ19UT09NQU5ZCi19IENBQ19zdGF0ZTsKLQotCiAvKgogICogR1NTQVBJIHNw ZWNpZmljIHN0YXRlIGluZm9ybWF0aW9uCiAgKi8KQEAgLTE1Niw3ICsxNDUsNiBAQCB0eXBl ZGVmIHN0cnVjdCBQb3J0CiAJaW50CQkJcmVtb3RlX2hvc3RuYW1lX3Jlc29sdjsgLyogc2Vl IGFib3ZlICovCiAJaW50CQkJcmVtb3RlX2hvc3RuYW1lX2VycmNvZGU7CS8qIHNlZSBhYm92 ZSAqLwogCWNoYXIJICAgKnJlbW90ZV9wb3J0OwkvKiB0ZXh0IHJlcCBvZiByZW1vdGUgcG9y dCAqLwotCUNBQ19zdGF0ZQljYW5BY2NlcHRDb25uZWN0aW9uczsJLyogcG9zdG1hc3RlciBj b25uZWN0aW9uIHN0YXR1cyAqLwogCiAJLyoKIAkgKiBJbmZvcm1hdGlvbiB0aGF0IG5lZWRz IHRvIGJlIHNhdmVkIGZyb20gdGhlIHN0YXJ0dXAgcGFja2V0IGFuZCBwYXNzZWQKLS0gCjIu MzkuMgoK --------------ASkMfd1hzOyZblVTgMzqak1d Content-Type: text/x-patch; charset=UTF-8; name="v2-0004-Remove-ConnCreate-and-ConnFree-and-allocate-Port-.patch" Content-Disposition: attachment; filename*0="v2-0004-Remove-ConnCreate-and-ConnFree-and-allocate-Port-.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSAxNDVmZTQ3Yzc4OGIwZTAyZDRiMGU4MjdjZmFhMzJmZTliMDRkZmUzIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFdlZCwgMTEgT2N0IDIwMjMgMTM6Mzg6MDYgKzAzMDAK U3ViamVjdDogW1BBVENIIHYyIDQvNl0gUmVtb3ZlIENvbm5DcmVhdGUgYW5kIENvbm5GcmVl LCBhbmQgYWxsb2NhdGUgUG9ydCBpbgogc3RhY2suCgpCeSBhbGxvY2F0aW5nIFBvcnQgaW4g c3RhY2ssIHdlIGRvbid0IG5lZWQgdG8gZGVhbCB3aXRoIG91dC1vZi1tZW1vcnkKZXJyb3Jz LCB3aGljaCBtYWtlcyB0aGUgY29kZSBhIGxpdHRsZSBsZXNzIHZlcmJvc2UuCgpYWFg6IFRo aXMgc2hvdWxkIHBlcmhhcHMgYmUgc3F1YXNoZWQgd2l0aCB0aGUgbmV4dCBjb21taXQuIEl0 IGNoYW5nZXMKaG93IHRoZSBQb3J0IHN0cnVjdHVyZSBpcyBhbGxvY2F0ZWQgYWdhaW4uIEJ1 dCBtYXliZSBpdCdzIGVhc2llciB0bwpyZXZpZXcgc2VwYXJhdGVseS4KClJldmlld2VkLWJ5 OiBUcmlzdGFuIFBhcnRpbiwgQW5kcmVzIEZyZXVuZApEaXNjdXNzaW9uOiBodHRwczovL3d3 dy5wb3N0Z3Jlc3FsLm9yZy9tZXNzYWdlLWlkLzdhNTliMDczLTViNWItMTUxZS03ZWQzLThi MDFmZjdjZTllZkBpa2kuZmkKLS0tCiBzcmMvYmFja2VuZC9wb3N0bWFzdGVyL3Bvc3RtYXN0 ZXIuYyB8IDY4ICsrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBzcmMvYmFja2VuZC90 Y29wL3Bvc3RncmVzLmMgICAgICAgICB8ICAyICstCiAyIGZpbGVzIGNoYW5nZWQsIDExIGlu c2VydGlvbnMoKyksIDU5IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L3Bvc3RtYXN0ZXIvcG9zdG1hc3Rlci5jIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9wb3N0 bWFzdGVyLmMKaW5kZXggOTM2ODI4ZGYwMTAuLmZmNTJiOWFjZjM1IDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9wb3N0bWFzdGVyL3Bvc3RtYXN0ZXIuYworKysgYi9zcmMvYmFja2VuZC9w b3N0bWFzdGVyL3Bvc3RtYXN0ZXIuYwpAQCAtMzk5LDggKzM5OSw2IEBAIHN0YXRpYyB2b2lk IENsb3NlU2VydmVyUG9ydHMoaW50IHN0YXR1cywgRGF0dW0gYXJnKTsKIHN0YXRpYyB2b2lk IHVubGlua19leHRlcm5hbF9waWRfZmlsZShpbnQgc3RhdHVzLCBEYXR1bSBhcmcpOwogc3Rh dGljIHZvaWQgZ2V0SW5zdGFsbGF0aW9uUGF0aHMoY29uc3QgY2hhciAqYXJndjApOwogc3Rh dGljIHZvaWQgY2hlY2tDb250cm9sRmlsZSh2b2lkKTsKLXN0YXRpYyBQb3J0ICpDb25uQ3Jl YXRlKGludCBzZXJ2ZXJGZCk7Ci1zdGF0aWMgdm9pZCBDb25uRnJlZShQb3J0ICpwb3J0KTsK IHN0YXRpYyB2b2lkIGhhbmRsZV9wbV9wbXNpZ25hbF9zaWduYWwoU0lHTkFMX0FSR1MpOwog c3RhdGljIHZvaWQgaGFuZGxlX3BtX2NoaWxkX2V4aXRfc2lnbmFsKFNJR05BTF9BUkdTKTsK IHN0YXRpYyB2b2lkIGhhbmRsZV9wbV9yZWxvYWRfcmVxdWVzdF9zaWduYWwoU0lHTkFMX0FS R1MpOwpAQCAtMTc3MiwyMCArMTc3MCwxOCBAQCBTZXJ2ZXJMb29wKHZvaWQpCiAKIAkJCWlm IChldmVudHNbaV0uZXZlbnRzICYgV0xfU09DS0VUX0FDQ0VQVCkKIAkJCXsKLQkJCQlQb3J0 CSAgICpwb3J0OworCQkJCVBvcnQJCXBvcnQ7CiAKLQkJCQlwb3J0ID0gQ29ubkNyZWF0ZShl dmVudHNbaV0uZmQpOwotCQkJCWlmIChwb3J0KQotCQkJCXsKLQkJCQkJQmFja2VuZFN0YXJ0 dXAocG9ydCk7CisJCQkJbWVtc2V0KCZwb3J0LCAwLCBzaXplb2YocG9ydCkpOworCQkJCWlm IChTdHJlYW1Db25uZWN0aW9uKGV2ZW50c1tpXS5mZCwgJnBvcnQpID09IFNUQVRVU19PSykK KwkJCQkJQmFja2VuZFN0YXJ0dXAoJnBvcnQpOwogCi0JCQkJCS8qCi0JCQkJCSAqIFdlIG5v IGxvbmdlciBuZWVkIHRoZSBvcGVuIHNvY2tldCBvciBwb3J0IHN0cnVjdHVyZSBpbgotCQkJ CQkgKiB0aGlzIHByb2Nlc3MKLQkJCQkJICovCi0JCQkJCVN0cmVhbUNsb3NlKHBvcnQtPnNv Y2spOwotCQkJCQlDb25uRnJlZShwb3J0KTsKLQkJCQl9CisJCQkJLyoKKwkJCQkgKiBXZSBu byBsb25nZXIgbmVlZCB0aGUgb3BlbiBzb2NrZXQgb3IgcG9ydCBzdHJ1Y3R1cmUgaW4gdGhp cworCQkJCSAqIHByb2Nlc3MKKwkJCQkgKi8KKwkJCQlpZiAocG9ydC5zb2NrICE9IFBHSU5W QUxJRF9TT0NLRVQpCisJCQkJCVN0cmVhbUNsb3NlKHBvcnQuc29jayk7CiAJCQl9CiAJCX0K IApAQCAtMjQ0Nyw1MCArMjQ0Myw2IEBAIGNhbkFjY2VwdENvbm5lY3Rpb25zKGludCBiYWNr ZW5kX3R5cGUpCiAJcmV0dXJuIHJlc3VsdDsKIH0KIAotCi0vKgotICogQ29ubkNyZWF0ZSAt LSBjcmVhdGUgYSBsb2NhbCBjb25uZWN0aW9uIGRhdGEgc3RydWN0dXJlCi0gKgotICogUmV0 dXJucyBOVUxMIG9uIGZhaWx1cmUsIG90aGVyIHRoYW4gb3V0LW9mLW1lbW9yeSB3aGljaCBp cyBmYXRhbC4KLSAqLwotc3RhdGljIFBvcnQgKgotQ29ubkNyZWF0ZShpbnQgc2VydmVyRmQp Ci17Ci0JUG9ydAkgICAqcG9ydDsKLQotCWlmICghKHBvcnQgPSAoUG9ydCAqKSBjYWxsb2Mo MSwgc2l6ZW9mKFBvcnQpKSkpCi0JewotCQllcmVwb3J0KExPRywKLQkJCQkoZXJyY29kZShF UlJDT0RFX09VVF9PRl9NRU1PUlkpLAotCQkJCSBlcnJtc2coIm91dCBvZiBtZW1vcnkiKSkp OwotCQlFeGl0UG9zdG1hc3RlcigxKTsKLQl9Ci0KLQlpZiAoU3RyZWFtQ29ubmVjdGlvbihz ZXJ2ZXJGZCwgcG9ydCkgIT0gU1RBVFVTX09LKQotCXsKLQkJaWYgKHBvcnQtPnNvY2sgIT0g UEdJTlZBTElEX1NPQ0tFVCkKLQkJCVN0cmVhbUNsb3NlKHBvcnQtPnNvY2spOwotCQlDb25u RnJlZShwb3J0KTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCi0JcmV0dXJuIHBvcnQ7Ci19Ci0K LQotLyoKLSAqIENvbm5GcmVlIC0tIGZyZWUgYSBsb2NhbCBjb25uZWN0aW9uIGRhdGEgc3Ry dWN0dXJlCi0gKgotICogQ2FsbGVyIGhhcyBhbHJlYWR5IGNsb3NlZCB0aGUgc29ja2V0IGlm IGFueSwgc28gdGhlcmUncyBub3QgbXVjaAotICogdG8gZG8gaGVyZS4KLSAqLwotc3RhdGlj IHZvaWQKLUNvbm5GcmVlKFBvcnQgKnBvcnQpCi17Ci0JZnJlZShwb3J0KTsKLX0KLQotCiAv KgogICogQ2xvc2VQb3N0bWFzdGVyUG9ydHMgLS0gY2xvc2UgYWxsIHRoZSBwb3N0bWFzdGVy J3Mgb3BlbiBzb2NrZXRzCiAgKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdGNvcC9wb3N0 Z3Jlcy5jIGIvc3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5jCmluZGV4IGYzYzlmMWY5YmFi Li5kY2E1ZWI3ODI5NyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5j CisrKyBiL3NyYy9iYWNrZW5kL3Rjb3AvcG9zdGdyZXMuYwpAQCAtNDIxNyw3ICs0MjE3LDcg QEAgUG9zdGdyZXNNYWluKGNvbnN0IGNoYXIgKmRibmFtZSwgY29uc3QgY2hhciAqdXNlcm5h bWUpCiAJLyoKIAkgKiBJZiB0aGUgUG9zdG1hc3RlckNvbnRleHQgaXMgc3RpbGwgYXJvdW5k LCByZWN5Y2xlIHRoZSBzcGFjZTsgd2UgZG9uJ3QKIAkgKiBuZWVkIGl0IGFueW1vcmUgYWZ0 ZXIgSW5pdFBvc3RncmVzIGNvbXBsZXRlcy4gIE5vdGUgdGhpcyBkb2VzIG5vdCB0cmFzaAot CSAqICpNeVByb2NQb3J0LCBiZWNhdXNlIENvbm5DcmVhdGUoKSBhbGxvY2F0ZWQgdGhhdCBz cGFjZSB3aXRoIG1hbGxvYygpCisJICogKk15UHJvY1BvcnQsIGJlY2F1c2UgdGhhdCBzcGFj ZSBpcyBhbGxvY2F0ZWQgaW4gc3RhY2sKIAkgKiAuLi4gZWxzZSB3ZSdkIG5lZWQgdG8gY29w eSB0aGUgUG9ydCBkYXRhIGZpcnN0LiAgQWxzbywgc3Vic2lkaWFyeSBkYXRhCiAJICogc3Vj aCBhcyB0aGUgdXNlcm5hbWUgaXNuJ3QgbG9zdCBlaXRoZXI7IHNlZSBQcm9jZXNzU3RhcnR1 cFBhY2tldCgpLgogCSAqLwotLSAKMi4zOS4yCgo= --------------ASkMfd1hzOyZblVTgMzqak1d Content-Type: text/x-patch; charset=UTF-8; name="v2-0005-Introduce-ClientSocket-rename-some-funcs.patch" Content-Disposition: attachment; filename="v2-0005-Introduce-ClientSocket-rename-some-funcs.patch" Content-Transfer-Encoding: base64 RnJvbSBhYmZlZmQ5ZWUwMTEyYzA5NWQ0OWQzOTc5YzA0ZDljYjE2YWY5NGViIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFdlZCwgMTEgT2N0IDIwMjMgMTM6Mzg6MTAgKzAzMDAK U3ViamVjdDogW1BBVENIIHYyIDUvNl0gSW50cm9kdWNlIENsaWVudFNvY2tldCwgcmVuYW1l IHNvbWUgZnVuY3MKCi0gTW92ZSBtb3JlIG9mIHRoZSB3b3JrIG9uIGEgY2xpZW50IHNvY2tl dCB0byB0aGUgY2hpbGQgcHJvY2Vzcy4KCi0gUmVkdWNlIHRoZSBhbW91bnQgb2YgZGF0YSB0 aGF0IG5lZWRzIHRvIGJlIHBhc3NlZCBmcm9tIHBvc3RtYXN0ZXIgdG8KICBjaGlsZC4gKFVz ZWQgdG8gcGFzcyBhIGZ1bGwgUG9ydCBzdHJ1Y3QsIGFsdGhvdWdoIG1vc3Qgb2YgdGhlIGZp ZWxkcyB3ZXJlCiAgZW1wdHkuIE5vdyB3ZSBwYXNzIHRoZSBtdWNoIHNsaW1tZXIgQ2xpZW50 U29ja2V0LikKClJldmlld2VkLWJ5OiBUcmlzdGFuIFBhcnRpbiwgQW5kcmVzIEZyZXVuZApE aXNjdXNzaW9uOiBodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9tZXNzYWdlLWlkLzdhNTli MDczLTViNWItMTUxZS03ZWQzLThiMDFmZjdjZTllZkBpa2kuZmkKLS0tCiBzcmMvYmFja2Vu ZC9saWJwcS9wcWNvbW0uYyAgICAgICAgICB8ICA5MyArKysrKysrKystLS0tLS0tLQogc3Jj L2JhY2tlbmQvcG9zdG1hc3Rlci9wb3N0bWFzdGVyLmMgfCAxNDkgKysrKysrKysrKysrKysr LS0tLS0tLS0tLS0tLQogc3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5jICAgICAgICAgfCAg IDUgKy0KIHNyYy9pbmNsdWRlL2xpYnBxL2xpYnBxLWJlLmggICAgICAgIHwgIDE5ICsrLS0K IHNyYy9pbmNsdWRlL2xpYnBxL2xpYnBxLmggICAgICAgICAgIHwgICA2ICstCiBzcmMvdG9v bHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCAgICB8ICAgMSArCiA2IGZpbGVzIGNoYW5nZWQs IDE0OSBpbnNlcnRpb25zKCspLCAxMjQgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvbGlicHEvcHFjb21tLmMgYi9zcmMvYmFja2VuZC9saWJwcS9wcWNvbW0uYwpp bmRleCA1MjI1ODRlNTk3OC4uOTNjYTNiMWI4YzEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L2xpYnBxL3BxY29tbS5jCisrKyBiL3NyYy9iYWNrZW5kL2xpYnBxL3BxY29tbS5jCkBAIC0y OSw5ICsyOSw5IEBACiAgKiBJTlRFUkZBQ0UgUk9VVElORVMKICAqCiAgKiBzZXR1cC90ZWFy ZG93bjoKLSAqCQlTdHJlYW1TZXJ2ZXJQb3J0CS0gT3BlbiBwb3N0bWFzdGVyJ3Mgc2VydmVy IHBvcnQKLSAqCQlTdHJlYW1Db25uZWN0aW9uCS0gQ3JlYXRlIG5ldyBjb25uZWN0aW9uIHdp dGggY2xpZW50Ci0gKgkJU3RyZWFtQ2xvc2UJCQktIENsb3NlIGEgY2xpZW50L2JhY2tlbmQg Y29ubmVjdGlvbgorICoJCUxpc3RlblNlcnZlclBvcnQJLSBPcGVuIHBvc3RtYXN0ZXIncyBz ZXJ2ZXIgcG9ydAorICoJCUFjY2VwdENsaWVudENvbm5lY3Rpb24gLSBDcmVhdGUgbmV3IGNv bm5lY3Rpb24gd2l0aCBjbGllbnQKKyAqCQlTdHJlYW1Db25uZWN0aW9uCS0gSW5pdGlhbGl6 ZSBhIGNsaWVudCBjb25uZWN0aW9uCiAgKgkJVG91Y2hTb2NrZXRGaWxlcwktIFByb3RlY3Qg c29ja2V0IGZpbGVzIGFnYWluc3QgL3RtcCBjbGVhbmVycwogICoJCXBxX2luaXQJCQktIGlu aXRpYWxpemUgbGlicHEgYXQgYmFja2VuZCBzdGFydHVwCiAgKgkJc29ja2V0X2NvbW1fcmVz ZXQJLSByZXNldCBsaWJwcSBkdXJpbmcgZXJyb3IgcmVjb3ZlcnkKQEAgLTMwNCw3ICszMDQs NyBAQCBzb2NrZXRfY2xvc2UoaW50IGNvZGUsIERhdHVtIGFyZykKIAogCiAvKgotICogU3Ry ZWFtU2VydmVyUG9ydCAtLSBvcGVuIGEgImxpc3RlbmluZyIgcG9ydCB0byBhY2NlcHQgY29u bmVjdGlvbnMuCisgKiBMaXN0ZW5TZXJ2ZXJQb3J0IC0tIG9wZW4gYSAibGlzdGVuaW5nIiBw b3J0IHRvIGFjY2VwdCBjb25uZWN0aW9ucy4KICAqCiAgKiBmYW1pbHkgc2hvdWxkIGJlIEFG X1VOSVggb3IgQUZfVU5TUEVDOyBwb3J0TnVtYmVyIGlzIHRoZSBwb3J0IG51bWJlci4KICAq IEZvciBBRl9VTklYIHBvcnRzLCBob3N0TmFtZSBzaG91bGQgYmUgTlVMTCBhbmQgdW5peFNv Y2tldERpciBtdXN0IGJlCkBAIC0zMTksNyArMzE5LDcgQEAgc29ja2V0X2Nsb3NlKGludCBj b2RlLCBEYXR1bSBhcmcpCiAgKiBSRVRVUk5TOiBTVEFUVVNfT0sgb3IgU1RBVFVTX0VSUk9S CiAgKi8KIGludAotU3RyZWFtU2VydmVyUG9ydChpbnQgZmFtaWx5LCBjb25zdCBjaGFyICpo b3N0TmFtZSwgdW5zaWduZWQgc2hvcnQgcG9ydE51bWJlciwKK0xpc3RlblNlcnZlclBvcnQo aW50IGZhbWlseSwgY29uc3QgY2hhciAqaG9zdE5hbWUsIHVuc2lnbmVkIHNob3J0IHBvcnRO dW1iZXIsCiAJCQkJIGNvbnN0IGNoYXIgKnVuaXhTb2NrZXREaXIsCiAJCQkJIHBnc29ja2V0 IExpc3RlblNvY2tldHNbXSwgaW50ICpOdW1MaXN0ZW5Tb2NrZXRzLCBpbnQgTWF4TGlzdGVu KQogewpAQCAtNjg1LDggKzY4NSw5IEBAIFNldHVwX0FGX1VOSVgoY29uc3QgY2hhciAqc29j a19wYXRoKQogCiAKIC8qCi0gKiBTdHJlYW1Db25uZWN0aW9uIC0tIGNyZWF0ZSBhIG5ldyBj b25uZWN0aW9uIHdpdGggY2xpZW50IHVzaW5nCi0gKgkJc2VydmVyIHBvcnQuICBTZXQgcG9y dC0+c29jayB0byB0aGUgRkQgb2YgdGhlIG5ldyBjb25uZWN0aW9uLgorICogQWNjZXB0Q2xp ZW50Q29ubmVjdGlvbiAtLSBhY2NlcHQgYSBuZXcgY29ubmVjdGlvbiB3aXRoIGNsaWVudCB1 c2luZworICoJCXNlcnZlciBwb3J0LiAgRmlsbHMgKmNsaWVudF9zb2NrIHdpdGggdGhlIEZE IGFuZCBlbmRwb2ludCBpbmZvCisgKgkJb2YgdGhlIG5ldyBjb25uZWN0aW9uLgogICoKICAq IEFTU1VNRTogdGhhdCB0aGlzIGRvZXNuJ3QgbmVlZCB0byBiZSBub24tYmxvY2tpbmcgYmVj YXVzZQogICoJCXRoZSBQb3N0bWFzdGVyIHdhaXRzIGZvciB0aGUgc29ja2V0IHRvIGJlIHJl YWR5IHRvIGFjY2VwdCgpLgpAQCAtNjk0LDEzICs2OTUsMTMgQEAgU2V0dXBfQUZfVU5JWChj b25zdCBjaGFyICpzb2NrX3BhdGgpCiAgKiBSRVRVUk5TOiBTVEFUVVNfT0sgb3IgU1RBVFVT X0VSUk9SCiAgKi8KIGludAotU3RyZWFtQ29ubmVjdGlvbihwZ3NvY2tldCBzZXJ2ZXJfZmQs IFBvcnQgKnBvcnQpCitBY2NlcHRDbGllbnRDb25uZWN0aW9uKHBnc29ja2V0IHNlcnZlcl9m ZCwgQ2xpZW50U29ja2V0ICpjbGllbnRfc29jaykKIHsKIAkvKiBhY2NlcHQgY29ubmVjdGlv biBhbmQgZmlsbCBpbiB0aGUgY2xpZW50IChyZW1vdGUpIGFkZHJlc3MgKi8KLQlwb3J0LT5y YWRkci5zYWxlbiA9IHNpemVvZihwb3J0LT5yYWRkci5hZGRyKTsKLQlpZiAoKHBvcnQtPnNv Y2sgPSBhY2NlcHQoc2VydmVyX2ZkLAotCQkJCQkJCSAoc3RydWN0IHNvY2thZGRyICopICZw b3J0LT5yYWRkci5hZGRyLAotCQkJCQkJCSAmcG9ydC0+cmFkZHIuc2FsZW4pKSA9PSBQR0lO VkFMSURfU09DS0VUKQorCWNsaWVudF9zb2NrLT5yYWRkci5zYWxlbiA9IHNpemVvZihjbGll bnRfc29jay0+cmFkZHIuYWRkcik7CisJaWYgKChjbGllbnRfc29jay0+c29jayA9IGFjY2Vw dChzZXJ2ZXJfZmQsCisJCQkJCQkJCQkoc3RydWN0IHNvY2thZGRyICopICZjbGllbnRfc29j ay0+cmFkZHIuYWRkciwKKwkJCQkJCQkJCSZjbGllbnRfc29jay0+cmFkZHIuc2FsZW4pKSA9 PSBQR0lOVkFMSURfU09DS0VUKQogCXsKIAkJZXJlcG9ydChMT0csCiAJCQkJKGVycmNvZGVf Zm9yX3NvY2tldF9hY2Nlc3MoKSwKQEAgLTcxOCwxMCArNzE5LDEwIEBAIFN0cmVhbUNvbm5l Y3Rpb24ocGdzb2NrZXQgc2VydmVyX2ZkLCBQb3J0ICpwb3J0KQogCX0KIAogCS8qIGZpbGwg aW4gdGhlIHNlcnZlciAobG9jYWwpIGFkZHJlc3MgKi8KLQlwb3J0LT5sYWRkci5zYWxlbiA9 IHNpemVvZihwb3J0LT5sYWRkci5hZGRyKTsKLQlpZiAoZ2V0c29ja25hbWUocG9ydC0+c29j aywKLQkJCQkJKHN0cnVjdCBzb2NrYWRkciAqKSAmcG9ydC0+bGFkZHIuYWRkciwKLQkJCQkJ JnBvcnQtPmxhZGRyLnNhbGVuKSA8IDApCisJY2xpZW50X3NvY2stPmxhZGRyLnNhbGVuID0g c2l6ZW9mKGNsaWVudF9zb2NrLT5sYWRkci5hZGRyKTsKKwlpZiAoZ2V0c29ja25hbWUoY2xp ZW50X3NvY2stPnNvY2ssCisJCQkJCShzdHJ1Y3Qgc29ja2FkZHIgKikgJmNsaWVudF9zb2Nr LT5sYWRkci5hZGRyLAorCQkJCQkmY2xpZW50X3NvY2stPmxhZGRyLnNhbGVuKSA8IDApCiAJ ewogCQllcmVwb3J0KExPRywKIAkJCQkoZXJybXNnKCIlcygpIGZhaWxlZDogJW0iLCAiZ2V0 c29ja25hbWUiKSkpOwpAQCAtNzI5LDcgKzczMCw3IEBAIFN0cmVhbUNvbm5lY3Rpb24ocGdz b2NrZXQgc2VydmVyX2ZkLCBQb3J0ICpwb3J0KQogCX0KIAogCS8qIHNlbGVjdCBOT0RFTEFZ IGFuZCBLRUVQQUxJVkUgb3B0aW9ucyBpZiBpdCdzIGEgVENQIGNvbm5lY3Rpb24gKi8KLQlp ZiAocG9ydC0+bGFkZHIuYWRkci5zc19mYW1pbHkgIT0gQUZfVU5JWCkKKwlpZiAoY2xpZW50 X3NvY2stPmxhZGRyLmFkZHIuc3NfZmFtaWx5ICE9IEFGX1VOSVgpCiAJewogCQlpbnQJCQlv bjsKICNpZmRlZiBXSU4zMgpAQCAtNzQwLDcgKzc0MSw3IEBAIFN0cmVhbUNvbm5lY3Rpb24o cGdzb2NrZXQgc2VydmVyX2ZkLCBQb3J0ICpwb3J0KQogCiAjaWZkZWYJVENQX05PREVMQVkK IAkJb24gPSAxOwotCQlpZiAoc2V0c29ja29wdChwb3J0LT5zb2NrLCBJUFBST1RPX1RDUCwg VENQX05PREVMQVksCisJCWlmIChzZXRzb2Nrb3B0KGNsaWVudF9zb2NrLT5zb2NrLCBJUFBS T1RPX1RDUCwgVENQX05PREVMQVksCiAJCQkJCSAgIChjaGFyICopICZvbiwgc2l6ZW9mKG9u KSkgPCAwKQogCQl7CiAJCQllcmVwb3J0KExPRywKQEAgLTc0OSw3ICs3NTAsNyBAQCBTdHJl YW1Db25uZWN0aW9uKHBnc29ja2V0IHNlcnZlcl9mZCwgUG9ydCAqcG9ydCkKIAkJfQogI2Vu ZGlmCiAJCW9uID0gMTsKLQkJaWYgKHNldHNvY2tvcHQocG9ydC0+c29jaywgU09MX1NPQ0tF VCwgU09fS0VFUEFMSVZFLAorCQlpZiAoc2V0c29ja29wdChjbGllbnRfc29jay0+c29jaywg U09MX1NPQ0tFVCwgU09fS0VFUEFMSVZFLAogCQkJCQkgICAoY2hhciAqKSAmb24sIHNpemVv ZihvbikpIDwgMCkKIAkJewogCQkJZXJlcG9ydChMT0csCkBAIC03ODEsNyArNzgyLDcgQEAg U3RyZWFtQ29ubmVjdGlvbihwZ3NvY2tldCBzZXJ2ZXJfZmQsIFBvcnQgKnBvcnQpCiAJCSAq IGh0dHBzOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvYmI3MzY1NDklMjh2 PXZzLjg1JTI5LmFzcHgKIAkJICovCiAJCW9wdGxlbiA9IHNpemVvZihvbGRvcHQpOwotCQlp ZiAoZ2V0c29ja29wdChwb3J0LT5zb2NrLCBTT0xfU09DS0VULCBTT19TTkRCVUYsIChjaGFy ICopICZvbGRvcHQsCisJCWlmIChnZXRzb2Nrb3B0KGNsaWVudF9zb2NrLT5zb2NrLCBTT0xf U09DS0VULCBTT19TTkRCVUYsIChjaGFyICopICZvbGRvcHQsCiAJCQkJCSAgICZvcHRsZW4p IDwgMCkKIAkJewogCQkJZXJlcG9ydChMT0csCkBAIC03OTEsNyArNzkyLDcgQEAgU3RyZWFt Q29ubmVjdGlvbihwZ3NvY2tldCBzZXJ2ZXJfZmQsIFBvcnQgKnBvcnQpCiAJCW5ld29wdCA9 IFBRX1NFTkRfQlVGRkVSX1NJWkUgKiA0OwogCQlpZiAob2xkb3B0IDwgbmV3b3B0KQogCQl7 Ci0JCQlpZiAoc2V0c29ja29wdChwb3J0LT5zb2NrLCBTT0xfU09DS0VULCBTT19TTkRCVUYs IChjaGFyICopICZuZXdvcHQsCisJCQlpZiAoc2V0c29ja29wdChjbGllbnRfc29jay0+c29j aywgU09MX1NPQ0tFVCwgU09fU05EQlVGLCAoY2hhciAqKSAmbmV3b3B0LAogCQkJCQkJICAg c2l6ZW9mKG5ld29wdCkpIDwgMCkKIAkJCXsKIAkJCQllcmVwb3J0KExPRywKQEAgLTgwMCwx MyArODAxLDM0IEBAIFN0cmVhbUNvbm5lY3Rpb24ocGdzb2NrZXQgc2VydmVyX2ZkLCBQb3J0 ICpwb3J0KQogCQkJfQogCQl9CiAjZW5kaWYKKwl9CisJcmV0dXJuIFNUQVRVU19PSzsKK30K KworLyoKKyAqIFN0cmVhbUNvbm5lY3Rpb24gLS0gY3JlYXRlIGEgbmV3IGNvbm5lY3Rpb24g ZnJvbSB0aGUgZ2l2ZW4gc29ja2V0LgorICoKKyAqIFRoaXMgcnVucyBpbiB0aGUgYmFja2Vu ZCBwcm9jZXNzLgorICovCitQb3J0ICoKK1N0cmVhbUNvbm5lY3Rpb24oQ2xpZW50U29ja2V0 ICpjbGllbnRfc29jaykKK3sKKwlQb3J0CSAgICpwb3J0OworCisJcG9ydCA9IHBhbGxvYzAo c2l6ZW9mKFBvcnQpKTsKKwlwb3J0LT5zb2NrID0gY2xpZW50X3NvY2stPnNvY2s7CisJcG9y dC0+bGFkZHIgPSBjbGllbnRfc29jay0+bGFkZHI7CisJcG9ydC0+cmFkZHIgPSBjbGllbnRf c29jay0+cmFkZHI7CiAKKwkvKiBBcHBseSB0aGUgY3VycmVudCBrZWVwYWxpdmUgcGFyYW1l dGVycyBpZiBpdCdzIGEgVENQIGNvbm5lY3Rpb24gKi8KKwlpZiAocG9ydC0+bGFkZHIuYWRk ci5zc19mYW1pbHkgIT0gQUZfVU5JWCkKKwl7CiAJCS8qCi0JCSAqIEFsc28gYXBwbHkgdGhl IGN1cnJlbnQga2VlcGFsaXZlIHBhcmFtZXRlcnMuICBJZiB3ZSBmYWlsIHRvIHNldCBhCi0J CSAqIHBhcmFtZXRlciwgZG9uJ3QgZXJyb3Igb3V0LCBiZWNhdXNlIHRoZXNlIGFyZW4ndCB1 bml2ZXJzYWxseQotCQkgKiBzdXBwb3J0ZWQuICAoTm90ZTogeW91IG1pZ2h0IHRoaW5rIHdl IG5lZWQgdG8gcmVzZXQgdGhlIEdVQwotCQkgKiB2YXJpYWJsZXMgdG8gMCBpbiBzdWNoIGEg Y2FzZSwgYnV0IGl0J3Mgbm90IG5lY2Vzc2FyeSBiZWNhdXNlIHRoZQotCQkgKiBzaG93IGhv b2tzIGZvciB0aGVzZSB2YXJpYWJsZXMgcmVwb3J0IHRoZSB0cnV0aCBhbnl3YXkuKQorCQkg KiBJZiB3ZSBmYWlsIHRvIHNldCBhIHBhcmFtZXRlciwgZG9uJ3QgZXJyb3Igb3V0LCBiZWNh dXNlIHRoZXNlCisJCSAqIGFyZW4ndCB1bml2ZXJzYWxseSBzdXBwb3J0ZWQuICAoTm90ZTog eW91IG1pZ2h0IHRoaW5rIHdlIG5lZWQgdG8KKwkJICogcmVzZXQgdGhlIEdVQyB2YXJpYWJs ZXMgdG8gMCBpbiBzdWNoIGEgY2FzZSwgYnV0IGl0J3Mgbm90IG5lY2Vzc2FyeQorCQkgKiBi ZWNhdXNlIHRoZSBzaG93IGhvb2tzIGZvciB0aGVzZSB2YXJpYWJsZXMgcmVwb3J0IHRoZSB0 cnV0aAorCQkgKiBhbnl3YXkuKQogCQkgKi8KIAkJKHZvaWQpIHBxX3NldGtlZXBhbGl2ZXNp ZGxlKHRjcF9rZWVwYWxpdmVzX2lkbGUsIHBvcnQpOwogCQkodm9pZCkgcHFfc2V0a2VlcGFs aXZlc2ludGVydmFsKHRjcF9rZWVwYWxpdmVzX2ludGVydmFsLCBwb3J0KTsKQEAgLTgxNCwy NCArODM2LDcgQEAgU3RyZWFtQ29ubmVjdGlvbihwZ3NvY2tldCBzZXJ2ZXJfZmQsIFBvcnQg KnBvcnQpCiAJCSh2b2lkKSBwcV9zZXR0Y3B1c2VydGltZW91dCh0Y3BfdXNlcl90aW1lb3V0 LCBwb3J0KTsKIAl9CiAKLQlyZXR1cm4gU1RBVFVTX09LOwotfQotCi0vKgotICogU3RyZWFt Q2xvc2UgLS0gY2xvc2UgYSBjbGllbnQvYmFja2VuZCBjb25uZWN0aW9uCi0gKgotICogTk9U RTogdGhpcyBpcyBOT1QgdXNlZCB0byB0ZXJtaW5hdGUgYSBzZXNzaW9uOyBpdCBpcyBqdXN0 IHVzZWQgdG8gcmVsZWFzZQotICogdGhlIGZpbGUgZGVzY3JpcHRvciBpbiBhIHByb2Nlc3Mg dGhhdCBzaG91bGQgbm8gbG9uZ2VyIGhhdmUgdGhlIHNvY2tldAotICogb3Blbi4gIChGb3Ig ZXhhbXBsZSwgdGhlIHBvc3RtYXN0ZXIgY2FsbHMgdGhpcyBhZnRlciBwYXNzaW5nIG93bmVy c2hpcAotICogb2YgdGhlIGNvbm5lY3Rpb24gdG8gYSBjaGlsZCBwcm9jZXNzLikgIEl0IGlz IGV4cGVjdGVkIHRoYXQgc29tZW9uZSBlbHNlCi0gKiBzdGlsbCBoYXMgdGhlIHNvY2tldCBv cGVuLiAgU28sIHdlIG9ubHkgd2FudCB0byBjbG9zZSB0aGUgZGVzY3JpcHRvciwKLSAqIHdl IGRvIE5PVCB3YW50IHRvIHNlbmQgYW55dGhpbmcgdG8gdGhlIGZhciBlbmQuCi0gKi8KLXZv aWQKLVN0cmVhbUNsb3NlKHBnc29ja2V0IHNvY2spCi17Ci0JaWYgKGNsb3Nlc29ja2V0KHNv Y2spICE9IDApCi0JCWVsb2coTE9HLCAiY291bGQgbm90IGNsb3NlIGNsaWVudCBvciBsaXN0 ZW4gc29ja2V0OiAlbSIpOworCXJldHVybiBwb3J0OwogfQogCiAvKgpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9wb3N0bWFzdGVyLmMgYi9zcmMvYmFja2VuZC9wb3N0 bWFzdGVyL3Bvc3RtYXN0ZXIuYwppbmRleCBmZjUyYjlhY2YzNS4uMWIxYTQ0ZTNlYTggMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcG9zdG1hc3Rlci5jCisrKyBiL3Ny Yy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcG9zdG1hc3Rlci5jCkBAIC00MjcsMTUgKzQyNywxNSBA QCB0eXBlZGVmIGVudW0gQ0FDX3N0YXRlCiAJQ0FDX1RPT01BTlkKIH0gQ0FDX3N0YXRlOwog Ci1zdGF0aWMgdm9pZCBCYWNrZW5kSW5pdGlhbGl6ZShQb3J0ICpwb3J0LCBDQUNfc3RhdGUg Y2FjKTsKLXN0YXRpYyB2b2lkIEJhY2tlbmRSdW4oUG9ydCAqcG9ydCkgcGdfYXR0cmlidXRl X25vcmV0dXJuKCk7CitzdGF0aWMgdm9pZCBCYWNrZW5kSW5pdGlhbGl6ZShDbGllbnRTb2Nr ZXQgKmNsaWVudF9zb2NrLCBDQUNfc3RhdGUgY2FjKTsKK3N0YXRpYyB2b2lkIEJhY2tlbmRS dW4odm9pZCkgcGdfYXR0cmlidXRlX25vcmV0dXJuKCk7CiBzdGF0aWMgdm9pZCBFeGl0UG9z dG1hc3RlcihpbnQgc3RhdHVzKSBwZ19hdHRyaWJ1dGVfbm9yZXR1cm4oKTsKIHN0YXRpYyBp bnQJU2VydmVyTG9vcCh2b2lkKTsKLXN0YXRpYyBpbnQJQmFja2VuZFN0YXJ0dXAoUG9ydCAq cG9ydCk7CitzdGF0aWMgaW50CUJhY2tlbmRTdGFydHVwKENsaWVudFNvY2tldCAqcG9ydCk7 CiBzdGF0aWMgaW50CVByb2Nlc3NTdGFydHVwUGFja2V0KFBvcnQgKnBvcnQsIGJvb2wgc3Ns X2RvbmUsIGJvb2wgZ3NzX2RvbmUpOwogc3RhdGljIHZvaWQgU2VuZE5lZ290aWF0ZVByb3Rv Y29sVmVyc2lvbihMaXN0ICp1bnJlY29nbml6ZWRfcHJvdG9jb2xfb3B0aW9ucyk7CiBzdGF0 aWMgdm9pZCBwcm9jZXNzQ2FuY2VsUmVxdWVzdChQb3J0ICpwb3J0LCB2b2lkICpwa3QpOwot c3RhdGljIHZvaWQgcmVwb3J0X2ZvcmtfZmFpbHVyZV90b19jbGllbnQoUG9ydCAqcG9ydCwg aW50IGVycm51bSk7CitzdGF0aWMgdm9pZCByZXBvcnRfZm9ya19mYWlsdXJlX3RvX2NsaWVu dChDbGllbnRTb2NrZXQgKmNsaWVudF9zb2NrLCBpbnQgZXJybnVtKTsKIHN0YXRpYyBDQUNf c3RhdGUgY2FuQWNjZXB0Q29ubmVjdGlvbnMoaW50IGJhY2tlbmRfdHlwZSk7CiBzdGF0aWMg Ym9vbCBSYW5kb21DYW5jZWxLZXkoaW50MzIgKmNhbmNlbF9rZXkpOwogc3RhdGljIHZvaWQg c2lnbmFsX2NoaWxkKHBpZF90IHBpZCwgaW50IHNpZ25hbCk7CkBAIC00ODQsOCArNDg0LDgg QEAgdHlwZWRlZiBzdHJ1Y3QKIH0gd2luMzJfZGVhZGNoaWxkX3dhaXRpbmZvOwogI2VuZGlm CQkJCQkJCS8qIFdJTjMyICovCiAKLXN0YXRpYyBwaWRfdCBiYWNrZW5kX2ZvcmtleGVjKFBv cnQgKnBvcnQsIENBQ19zdGF0ZSBjYWMpOwotc3RhdGljIHBpZF90IGludGVybmFsX2Zvcmtl eGVjKGludCBhcmdjLCBjaGFyICphcmd2W10sIFBvcnQgKnBvcnQpOworc3RhdGljIHBpZF90 IGJhY2tlbmRfZm9ya2V4ZWMoQ2xpZW50U29ja2V0ICpjbGllbnRfc29jaywgQ0FDX3N0YXRl IGNhYyk7CitzdGF0aWMgcGlkX3QgaW50ZXJuYWxfZm9ya2V4ZWMoaW50IGFyZ2MsIGNoYXIg KmFyZ3ZbXSwgQ2xpZW50U29ja2V0ICpjbGllbnRfc29jayk7CiAKIC8qIFR5cGUgZm9yIGEg c29ja2V0IHRoYXQgY2FuIGJlIGluaGVyaXRlZCB0byBhIGNsaWVudCBwcm9jZXNzICovCiAj aWZkZWYgV0lOMzIKQEAgLTUwNCw4ICs1MDQsOCBAQCB0eXBlZGVmIGludCBJbmhlcml0YWJs ZVNvY2tldDsKICAqLwogdHlwZWRlZiBzdHJ1Y3QKIHsKLQlQb3J0CQlwb3J0OwotCUluaGVy aXRhYmxlU29ja2V0IHBvcnRzb2NrZXQ7CisJQ2xpZW50U29ja2V0IGNsaWVudF9zb2NrOwor CUluaGVyaXRhYmxlU29ja2V0IHNlcmlhbGl6ZWRfc29jazsKIAljaGFyCQlEYXRhRGlyW01B WFBHUEFUSF07CiAJaW50MzIJCU15Q2FuY2VsS2V5OwogCWludAkJCU15UE1DaGlsZFNsb3Q7 CkBAIC01NTMsMTMgKzU1MywxMyBAQCB0eXBlZGVmIHN0cnVjdAogCUJhY2tncm91bmRXb3Jr ZXIgTXlCZ3dvcmtlckVudHJ5OwogfSBCYWNrZW5kUGFyYW1ldGVyczsKIAotc3RhdGljIHZv aWQgcmVhZF9iYWNrZW5kX3ZhcmlhYmxlcyhjaGFyICppZCwgUG9ydCAqcG9ydCk7Ci1zdGF0 aWMgdm9pZCByZXN0b3JlX2JhY2tlbmRfdmFyaWFibGVzKEJhY2tlbmRQYXJhbWV0ZXJzICpw YXJhbSwgUG9ydCAqcG9ydCk7CitzdGF0aWMgdm9pZCByZWFkX2JhY2tlbmRfdmFyaWFibGVz KGNoYXIgKmlkLCBDbGllbnRTb2NrZXQgKmNsaWVudF9zb2NrKTsKK3N0YXRpYyB2b2lkIHJl c3RvcmVfYmFja2VuZF92YXJpYWJsZXMoQmFja2VuZFBhcmFtZXRlcnMgKnBhcmFtLCBDbGll bnRTb2NrZXQgKmNsaWVudF9zb2NrKTsKIAogI2lmbmRlZiBXSU4zMgotc3RhdGljIGJvb2wg c2F2ZV9iYWNrZW5kX3ZhcmlhYmxlcyhCYWNrZW5kUGFyYW1ldGVycyAqcGFyYW0sIFBvcnQg KnBvcnQpOworc3RhdGljIGJvb2wgc2F2ZV9iYWNrZW5kX3ZhcmlhYmxlcyhCYWNrZW5kUGFy YW1ldGVycyAqcGFyYW0sIENsaWVudFNvY2tldCAqY2xpZW50X3NvY2spOwogI2Vsc2UKLXN0 YXRpYyBib29sIHNhdmVfYmFja2VuZF92YXJpYWJsZXMoQmFja2VuZFBhcmFtZXRlcnMgKnBh cmFtLCBQb3J0ICpwb3J0LAorc3RhdGljIGJvb2wgc2F2ZV9iYWNrZW5kX3ZhcmlhYmxlcyhC YWNrZW5kUGFyYW1ldGVycyAqcGFyYW0sIENsaWVudFNvY2tldCAqY2xpZW50X3NvY2ssCiAJ CQkJCQkJCSAgIEhBTkRMRSBjaGlsZFByb2Nlc3MsIHBpZF90IGNoaWxkUGlkKTsKICNlbmRp ZgogCkBAIC0xMjE5LDE0ICsxMjE5LDE0IEBAIFBvc3RtYXN0ZXJNYWluKGludCBhcmdjLCBj aGFyICphcmd2W10pCiAJCQljaGFyCSAgICpjdXJob3N0ID0gKGNoYXIgKikgbGZpcnN0KGwp OwogCiAJCQlpZiAoc3RyY21wKGN1cmhvc3QsICIqIikgPT0gMCkKLQkJCQlzdGF0dXMgPSBT dHJlYW1TZXJ2ZXJQb3J0KEFGX1VOU1BFQywgTlVMTCwKKwkJCQlzdGF0dXMgPSBMaXN0ZW5T ZXJ2ZXJQb3J0KEFGX1VOU1BFQywgTlVMTCwKIAkJCQkJCQkJCQkgICh1bnNpZ25lZCBzaG9y dCkgUG9zdFBvcnROdW1iZXIsCiAJCQkJCQkJCQkJICBOVUxMLAogCQkJCQkJCQkJCSAgTGlz dGVuU29ja2V0cywKIAkJCQkJCQkJCQkgICZOdW1MaXN0ZW5Tb2NrZXRzLAogCQkJCQkJCQkJ CSAgTUFYTElTVEVOKTsKIAkJCWVsc2UKLQkJCQlzdGF0dXMgPSBTdHJlYW1TZXJ2ZXJQb3J0 KEFGX1VOU1BFQywgY3VyaG9zdCwKKwkJCQlzdGF0dXMgPSBMaXN0ZW5TZXJ2ZXJQb3J0KEFG X1VOU1BFQywgY3VyaG9zdCwKIAkJCQkJCQkJCQkgICh1bnNpZ25lZCBzaG9ydCkgUG9zdFBv cnROdW1iZXIsCiAJCQkJCQkJCQkJICBOVUxMLAogCQkJCQkJCQkJCSAgTGlzdGVuU29ja2V0 cywKQEAgLTEzMjAsNyArMTMyMCw3IEBAIFBvc3RtYXN0ZXJNYWluKGludCBhcmdjLCBjaGFy ICphcmd2W10pCiAJCXsKIAkJCWNoYXIJICAgKnNvY2tldGRpciA9IChjaGFyICopIGxmaXJz dChsKTsKIAotCQkJc3RhdHVzID0gU3RyZWFtU2VydmVyUG9ydChBRl9VTklYLCBOVUxMLAor CQkJc3RhdHVzID0gTGlzdGVuU2VydmVyUG9ydChBRl9VTklYLCBOVUxMLAogCQkJCQkJCQkJ ICAodW5zaWduZWQgc2hvcnQpIFBvc3RQb3J0TnVtYmVyLAogCQkJCQkJCQkJICBzb2NrZXRk aXIsCiAJCQkJCQkJCQkgIExpc3RlblNvY2tldHMsCkBAIC0xNTAwLDcgKzE1MDAsNyBAQCBD bG9zZVNlcnZlclBvcnRzKGludCBzdGF0dXMsIERhdHVtIGFyZykKIAkgKiBjb25kaXRpb24g aWYgYSBuZXcgcG9zdG1hc3RlciB3YW50cyB0byByZS11c2UgdGhlIFRDUCBwb3J0IG51bWJl ci4KIAkgKi8KIAlmb3IgKGkgPSAwOyBpIDwgTnVtTGlzdGVuU29ja2V0czsgaSsrKQotCQlT dHJlYW1DbG9zZShMaXN0ZW5Tb2NrZXRzW2ldKTsKKwkJY2xvc2Vzb2NrZXQoTGlzdGVuU29j a2V0c1tpXSk7CiAJTnVtTGlzdGVuU29ja2V0cyA9IDA7CiAKIAkvKgpAQCAtMTc3MCwxOCAr MTc3MCwyMCBAQCBTZXJ2ZXJMb29wKHZvaWQpCiAKIAkJCWlmIChldmVudHNbaV0uZXZlbnRz ICYgV0xfU09DS0VUX0FDQ0VQVCkKIAkJCXsKLQkJCQlQb3J0CQlwb3J0OworCQkJCUNsaWVu dFNvY2tldCBzOwogCi0JCQkJbWVtc2V0KCZwb3J0LCAwLCBzaXplb2YocG9ydCkpOwotCQkJ CWlmIChTdHJlYW1Db25uZWN0aW9uKGV2ZW50c1tpXS5mZCwgJnBvcnQpID09IFNUQVRVU19P SykKLQkJCQkJQmFja2VuZFN0YXJ0dXAoJnBvcnQpOworCQkJCWlmIChBY2NlcHRDbGllbnRD b25uZWN0aW9uKGV2ZW50c1tpXS5mZCwgJnMpID09IFNUQVRVU19PSykKKwkJCQkJQmFja2Vu ZFN0YXJ0dXAoJnMpOwogCiAJCQkJLyoKIAkJCQkgKiBXZSBubyBsb25nZXIgbmVlZCB0aGUg b3BlbiBzb2NrZXQgb3IgcG9ydCBzdHJ1Y3R1cmUgaW4gdGhpcwogCQkJCSAqIHByb2Nlc3MK IAkJCQkgKi8KLQkJCQlpZiAocG9ydC5zb2NrICE9IFBHSU5WQUxJRF9TT0NLRVQpCi0JCQkJ CVN0cmVhbUNsb3NlKHBvcnQuc29jayk7CisJCQkJaWYgKHMuc29jayAhPSBQR0lOVkFMSURf U09DS0VUKQorCQkJCXsKKwkJCQkJaWYgKGNsb3Nlc29ja2V0KHMuc29jaykgIT0gMCkKKwkJ CQkJCWVsb2coTE9HLCAiY291bGQgbm90IGNsb3NlIGNsaWVudCBzb2NrZXQ6ICVtIik7CisJ CQkJfQogCQkJfQogCQl9CiAKQEAgLTIxNDYsMTEgKzIxNDgsNyBAQCByZXRyeTE6CiAKIAkv KgogCSAqIE5vdyBmZXRjaCBwYXJhbWV0ZXJzIG91dCBvZiBzdGFydHVwIHBhY2tldCBhbmQg c2F2ZSB0aGVtIGludG8gdGhlIFBvcnQKLQkgKiBzdHJ1Y3R1cmUuICBBbGwgZGF0YSBzdHJ1 Y3R1cmVzIGF0dGFjaGVkIHRvIHRoZSBQb3J0IHN0cnVjdCBtdXN0IGJlCi0JICogYWxsb2Nh dGVkIGluIFRvcE1lbW9yeUNvbnRleHQgc28gdGhhdCB0aGV5IHdpbGwgcmVtYWluIGF2YWls YWJsZSBpbiBhCi0JICogcnVubmluZyBiYWNrZW5kIChldmVuIGFmdGVyIFBvc3RtYXN0ZXJD b250ZXh0IGlzIGRlc3Ryb3llZCkuICBXZSBuZWVkCi0JICogbm90IHdvcnJ5IGFib3V0IGxl YWtpbmcgdGhpcyBzdG9yYWdlIG9uIGZhaWx1cmUsIHNpbmNlIHdlIGFyZW4ndCBpbiB0aGUK LQkgKiBwb3N0bWFzdGVyIHByb2Nlc3MgYW55bW9yZS4KKwkgKiBzdHJ1Y3R1cmUuCiAJICov CiAJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhUb3BNZW1vcnlDb250ZXh0 KTsKIApAQCAtMjI4Niw3ICsyMjg0LDcgQEAgcmV0cnkxOgogCQlwb3J0LT5kYXRhYmFzZV9u YW1lWzBdID0gJ1wwJzsKIAogCS8qCi0JICogRG9uZSBwdXR0aW5nIHN0dWZmIGluIFRvcE1l bW9yeUNvbnRleHQuCisJICogRG9uZSBmaWxsaW5nIHRoZSBQb3J0IHN0cnVjdHVyZQogCSAq LwogCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKIApAQCAtMjQ5MCw3ICsy NDg4LDEwIEBAIENsb3NlUG9zdG1hc3RlclBvcnRzKGJvb2wgYW1fc3lzbG9nZ2VyKQogCWlm IChMaXN0ZW5Tb2NrZXRzKQogCXsKIAkJZm9yIChpbnQgaSA9IDA7IGkgPCBOdW1MaXN0ZW5T b2NrZXRzOyBpKyspCi0JCQlTdHJlYW1DbG9zZShMaXN0ZW5Tb2NrZXRzW2ldKTsKKwkJewor CQkJaWYgKGNsb3Nlc29ja2V0KExpc3RlblNvY2tldHNbaV0pICE9IDApCisJCQkJZWxvZyhM T0csICJjb3VsZCBub3QgY2xvc2UgbGlzdGVuIHNvY2tldDogJW0iKTsKKwkJfQogCQlwZnJl ZShMaXN0ZW5Tb2NrZXRzKTsKIAl9CiAJTnVtTGlzdGVuU29ja2V0cyA9IDA7CkBAIC0zOTk2 LDcgKzM5OTcsNyBAQCBUZXJtaW5hdGVDaGlsZHJlbihpbnQgc2lnbmFsKQogICogTm90ZTog aWYgeW91IGNoYW5nZSB0aGlzIGNvZGUsIGFsc28gY29uc2lkZXIgU3RhcnRBdXRvdmFjdXVt V29ya2VyLgogICovCiBzdGF0aWMgaW50Ci1CYWNrZW5kU3RhcnR1cChQb3J0ICpwb3J0KQor QmFja2VuZFN0YXJ0dXAoQ2xpZW50U29ja2V0ICpjbGllbnRfc29jaykKIHsKIAlCYWNrZW5k ICAgICpibjsJCQkJLyogZm9yIGJhY2tlbmQgY2xlYW51cCAqLwogCXBpZF90CQlwaWQ7CkBA IC00MDQ3LDcgKzQwNDgsNyBAQCBCYWNrZW5kU3RhcnR1cChQb3J0ICpwb3J0KQogCWJuLT5i Z3dvcmtlcl9ub3RpZnkgPSBmYWxzZTsKIAogI2lmZGVmIEVYRUNfQkFDS0VORAotCXBpZCA9 IGJhY2tlbmRfZm9ya2V4ZWMocG9ydCwgY2FjKTsKKwlwaWQgPSBiYWNrZW5kX2ZvcmtleGVj KGNsaWVudF9zb2NrLCBjYWMpOwogI2Vsc2UJCQkJCQkJLyogIUVYRUNfQkFDS0VORCAqLwog CXBpZCA9IGZvcmtfcHJvY2VzcygpOwogCWlmIChwaWQgPT0gMCkJCQkJLyogY2hpbGQgKi8K QEAgLTQwNTksMTAgKzQwNjAsMTAgQEAgQmFja2VuZFN0YXJ0dXAoUG9ydCAqcG9ydCkKIAkJ Q2xvc2VQb3N0bWFzdGVyUG9ydHMoZmFsc2UpOwogCiAJCS8qIFBlcmZvcm0gYWRkaXRpb25h bCBpbml0aWFsaXphdGlvbiBhbmQgY29sbGVjdCBzdGFydHVwIHBhY2tldCAqLwotCQlCYWNr ZW5kSW5pdGlhbGl6ZShwb3J0LCBjYWMpOworCQlCYWNrZW5kSW5pdGlhbGl6ZShjbGllbnRf c29jaywgY2FjKTsKIAogCQkvKiBBbmQgcnVuIHRoZSBiYWNrZW5kICovCi0JCUJhY2tlbmRS dW4ocG9ydCk7CisJCUJhY2tlbmRSdW4oKTsKIAl9CiAjZW5kaWYJCQkJCQkJLyogRVhFQ19C QUNLRU5EICovCiAKQEAgLTQwNzcsMTQgKzQwNzgsMTQgQEAgQmFja2VuZFN0YXJ0dXAoUG9y dCAqcG9ydCkKIAkJZXJybm8gPSBzYXZlX2Vycm5vOwogCQllcmVwb3J0KExPRywKIAkJCQko ZXJybXNnKCJjb3VsZCBub3QgZm9yayBuZXcgcHJvY2VzcyBmb3IgY29ubmVjdGlvbjogJW0i KSkpOwotCQlyZXBvcnRfZm9ya19mYWlsdXJlX3RvX2NsaWVudChwb3J0LCBzYXZlX2Vycm5v KTsKKwkJcmVwb3J0X2ZvcmtfZmFpbHVyZV90b19jbGllbnQoY2xpZW50X3NvY2ssIHNhdmVf ZXJybm8pOwogCQlyZXR1cm4gU1RBVFVTX0VSUk9SOwogCX0KIAogCS8qIGluIHBhcmVudCwg c3VjY2Vzc2Z1bCBmb3JrICovCiAJZXJlcG9ydChERUJVRzIsCiAJCQkoZXJybXNnX2ludGVy bmFsKCJmb3JrZWQgbmV3IGJhY2tlbmQsIHBpZD0lZCBzb2NrZXQ9JWQiLAotCQkJCQkJCSAo aW50KSBwaWQsIChpbnQpIHBvcnQtPnNvY2spKSk7CisJCQkJCQkJIChpbnQpIHBpZCwgKGlu dCkgY2xpZW50X3NvY2stPnNvY2spKSk7CiAKIAkvKgogCSAqIEV2ZXJ5dGhpbmcncyBiZWVu IHN1Y2Nlc3NmdWwsIGl0J3Mgc2FmZSB0byBhZGQgdGhpcyBiYWNrZW5kIHRvIG91ciBsaXN0 CkBAIC00MTExLDcgKzQxMTIsNyBAQCBCYWNrZW5kU3RhcnR1cChQb3J0ICpwb3J0KQogICog aXQncyBub3QgdXAgYW5kIHJ1bm5pbmcuCiAgKi8KIHN0YXRpYyB2b2lkCi1yZXBvcnRfZm9y a19mYWlsdXJlX3RvX2NsaWVudChQb3J0ICpwb3J0LCBpbnQgZXJybnVtKQorcmVwb3J0X2Zv cmtfZmFpbHVyZV90b19jbGllbnQoQ2xpZW50U29ja2V0ICpjbGllbnRfc29jaywgaW50IGVy cm51bSkKIHsKIAljaGFyCQlidWZmZXJbMTAwMF07CiAJaW50CQkJcmM7CkBAIC00MTIyLDEz ICs0MTIzLDEzIEBAIHJlcG9ydF9mb3JrX2ZhaWx1cmVfdG9fY2xpZW50KFBvcnQgKnBvcnQs IGludCBlcnJudW0pCiAJCQkgc3RyZXJyb3IoZXJybnVtKSk7CiAKIAkvKiBTZXQgcG9ydCB0 byBub24tYmxvY2tpbmcuICBEb24ndCBkbyBzZW5kKCkgaWYgdGhpcyBmYWlscyAqLwotCWlm ICghcGdfc2V0X25vYmxvY2socG9ydC0+c29jaykpCisJaWYgKCFwZ19zZXRfbm9ibG9jayhj bGllbnRfc29jay0+c29jaykpCiAJCXJldHVybjsKIAogCS8qIFdlJ2xsIHJldHJ5IGFmdGVy IEVJTlRSLCBidXQgaWdub3JlIGFsbCBvdGhlciBmYWlsdXJlcyAqLwogCWRvCiAJewotCQly YyA9IHNlbmQocG9ydC0+c29jaywgYnVmZmVyLCBzdHJsZW4oYnVmZmVyKSArIDEsIDApOwor CQlyYyA9IHNlbmQoY2xpZW50X3NvY2stPnNvY2ssIGJ1ZmZlciwgc3RybGVuKGJ1ZmZlcikg KyAxLCAwKTsKIAl9IHdoaWxlIChyYyA8IDAgJiYgZXJybm8gPT0gRUlOVFIpOwogfQogCkBA IC00MTQ2LDE2ICs0MTQ3LDI4IEBAIHJlcG9ydF9mb3JrX2ZhaWx1cmVfdG9fY2xpZW50KFBv cnQgKnBvcnQsIGludCBlcnJudW0pCiAgKiBidXQgaGF2ZSBub3QgeWV0IHNldCB1cCBtb3N0 IG9mIG91ciBsb2NhbCBwb2ludGVycyB0byBzaG1lbSBzdHJ1Y3R1cmVzLgogICovCiBzdGF0 aWMgdm9pZAotQmFja2VuZEluaXRpYWxpemUoUG9ydCAqcG9ydCwgQ0FDX3N0YXRlIGNhYykK K0JhY2tlbmRJbml0aWFsaXplKENsaWVudFNvY2tldCAqY2xpZW50X3NvY2ssIENBQ19zdGF0 ZSBjYWMpCiB7CiAJaW50CQkJc3RhdHVzOwogCWludAkJCXJldDsKKwlQb3J0CSAgICpwb3J0 OwogCWNoYXIJCXJlbW90ZV9ob3N0W05JX01BWEhPU1RdOwogCWNoYXIJCXJlbW90ZV9wb3J0 W05JX01BWFNFUlZdOwogCVN0cmluZ0luZm9EYXRhIHBzX2RhdGE7CisJTWVtb3J5Q29udGV4 dCBvbGRjb250ZXh0OwogCi0JLyogU2F2ZSBwb3J0IGV0Yy4gZm9yIHBzIHN0YXR1cyAqLwor CS8qCisJICogQ3JlYXRlIHRoZSBQb3J0IHN0cnVjdHVyZS4KKwkgKgorCSAqIFRoZSBQb3J0 IHN0cnVjdHVyZSBhbmQgYWxsIGRhdGEgc3RydWN0dXJlcyBhdHRhY2hlZCB0byBpdCBhcmUg YWxsb2NhdGVkCisJICogaW4gVG9wTWVtb3J5Q29udGV4dCwgc28gdGhhdCB0aGV5IHN1cnZp dmUgaW50byBQb3N0Z3Jlc01haW4gZXhlY3V0aW9uLgorCSAqIFdlIG5lZWQgbm90IHdvcnJ5 IGFib3V0IGxlYWtpbmcgdGhpcyBzdG9yYWdlIG9uIGZhaWx1cmUsIHNpbmNlIHdlCisJICog YXJlbid0IGluIHRoZSBwb3N0bWFzdGVyIHByb2Nlc3MgYW55bW9yZS4KKwkgKi8KKwlvbGRj b250ZXh0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKFRvcE1lbW9yeUNvbnRleHQpOworCXBv cnQgPSBTdHJlYW1Db25uZWN0aW9uKGNsaWVudF9zb2NrKTsKIAlNeVByb2NQb3J0ID0gcG9y dDsKKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7CiAKIAkvKiBUZWxsIGZk LmMgYWJvdXQgdGhlIGxvbmctbGl2ZWQgRkQgYXNzb2NpYXRlZCB3aXRoIHRoZSBwb3J0ICov CiAJUmVzZXJ2ZUV4dGVybmFsRkQoKTsKQEAgLTQyMTYsOCArNDIyOSw5IEBAIEJhY2tlbmRJ bml0aWFsaXplKFBvcnQgKnBvcnQsIENBQ19zdGF0ZSBjYWMpCiAJICogU2F2ZSByZW1vdGVf aG9zdCBhbmQgcmVtb3RlX3BvcnQgaW4gcG9ydCBzdHJ1Y3R1cmUgKGFmdGVyIHRoaXMsIHRo ZXkKIAkgKiB3aWxsIGFwcGVhciBpbiBsb2dfbGluZV9wcmVmaXggZGF0YSBmb3IgbG9nIG1l c3NhZ2VzKS4KIAkgKi8KLQlwb3J0LT5yZW1vdGVfaG9zdCA9IHN0cmR1cChyZW1vdGVfaG9z dCk7Ci0JcG9ydC0+cmVtb3RlX3BvcnQgPSBzdHJkdXAocmVtb3RlX3BvcnQpOworCW9sZGNv bnRleHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oVG9wTWVtb3J5Q29udGV4dCk7CisJcG9y dC0+cmVtb3RlX2hvc3QgPSBwc3RyZHVwKHJlbW90ZV9ob3N0KTsKKwlwb3J0LT5yZW1vdGVf cG9ydCA9IHBzdHJkdXAocmVtb3RlX3BvcnQpOwogCiAJLyogQW5kIG5vdyB3ZSBjYW4gaXNz dWUgdGhlIExvZ19jb25uZWN0aW9ucyBtZXNzYWdlLCBpZiB3YW50ZWQgKi8KIAlpZiAoTG9n X2Nvbm5lY3Rpb25zKQpAQCAtNDI0OCw3ICs0MjYyLDggQEAgQmFja2VuZEluaXRpYWxpemUo UG9ydCAqcG9ydCwgQ0FDX3N0YXRlIGNhYykKIAkJcmV0ID09IDAgJiYKIAkJc3Ryc3BuKHJl bW90ZV9ob3N0LCAiMDEyMzQ1Njc4OS4iKSA8IHN0cmxlbihyZW1vdGVfaG9zdCkgJiYKIAkJ c3Ryc3BuKHJlbW90ZV9ob3N0LCAiMDEyMzQ1Njc4OUFCQ0RFRmFiY2RlZjoiKSA8IHN0cmxl bihyZW1vdGVfaG9zdCkpCi0JCXBvcnQtPnJlbW90ZV9ob3N0bmFtZSA9IHN0cmR1cChyZW1v dGVfaG9zdCk7CisJCXBvcnQtPnJlbW90ZV9ob3N0bmFtZSA9IHBzdHJkdXAocmVtb3RlX2hv c3QpOworCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKIAogCS8qCiAJICog UmVhZHkgdG8gYmVnaW4gY2xpZW50IGludGVyYWN0aW9uLiAgV2Ugd2lsbCBnaXZlIHVwIGFu ZCBfZXhpdCgxKSBhZnRlcgpAQCAtNDM2OSw3ICs0Mzg0LDcgQEAgQmFja2VuZEluaXRpYWxp emUoUG9ydCAqcG9ydCwgQ0FDX3N0YXRlIGNhYykKICAqCQlEb2Vzbid0IHJldHVybiBhdCBh bGwuCiAgKi8KIHN0YXRpYyB2b2lkCi1CYWNrZW5kUnVuKFBvcnQgKnBvcnQpCitCYWNrZW5k UnVuKHZvaWQpCiB7CiAJLyoKIAkgKiBDcmVhdGUgYSBwZXItYmFja2VuZCBQR1BST0Mgc3Ry dWN0IGluIHNoYXJlZCBtZW1vcnkuICBXZSBtdXN0IGRvIHRoaXMKQEAgLTQzODYsNyArNDQw MSw3IEBAIEJhY2tlbmRSdW4oUG9ydCAqcG9ydCkKIAkgKi8KIAlNZW1vcnlDb250ZXh0U3dp dGNoVG8oVG9wTWVtb3J5Q29udGV4dCk7CiAKLQlQb3N0Z3Jlc01haW4ocG9ydC0+ZGF0YWJh c2VfbmFtZSwgcG9ydC0+dXNlcl9uYW1lKTsKKwlQb3N0Z3Jlc01haW4oTXlQcm9jUG9ydC0+ ZGF0YWJhc2VfbmFtZSwgTXlQcm9jUG9ydC0+dXNlcl9uYW1lKTsKIH0KIAogCkBAIC00NDA3 LDExICs0NDIyLDExIEBAIEJhY2tlbmRSdW4oUG9ydCAqcG9ydCkKIHBpZF90CiBwb3N0bWFz dGVyX2ZvcmtleGVjKGludCBhcmdjLCBjaGFyICphcmd2W10pCiB7Ci0JUG9ydAkJcG9ydDsK KwlDbGllbnRTb2NrZXQgY2xpZW50X3NvY2s7CiAKLQkvKiBUaGlzIGVudHJ5IHBvaW50IHBh c3NlcyBkdW1teSB2YWx1ZXMgZm9yIHRoZSBQb3J0IHZhcmlhYmxlcyAqLwotCW1lbXNldCgm cG9ydCwgMCwgc2l6ZW9mKHBvcnQpKTsKLQlyZXR1cm4gaW50ZXJuYWxfZm9ya2V4ZWMoYXJn YywgYXJndiwgJnBvcnQpOworCS8qIFRoaXMgZW50cnkgcG9pbnQgZG9lc24ndCBwYXNzIGEg Y2xpZW50IHNvY2tldCAqLworCW1lbXNldCgmY2xpZW50X3NvY2ssIDAsIHNpemVvZihDbGll bnRTb2NrZXQpKTsKKwlyZXR1cm4gaW50ZXJuYWxfZm9ya2V4ZWMoYXJnYywgYXJndiwgJmNs aWVudF9zb2NrKTsKIH0KIAogLyoKQEAgLTQ0MjQsNyArNDQzOSw3IEBAIHBvc3RtYXN0ZXJf Zm9ya2V4ZWMoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKICAqIHJldHVybnMgdGhlIHBpZCBv ZiB0aGUgZm9yay9leGVjJ2QgcHJvY2Vzcywgb3IgLTEgb24gZmFpbHVyZQogICovCiBzdGF0 aWMgcGlkX3QKLWJhY2tlbmRfZm9ya2V4ZWMoUG9ydCAqcG9ydCwgQ0FDX3N0YXRlIGNhYykK K2JhY2tlbmRfZm9ya2V4ZWMoQ2xpZW50U29ja2V0ICpjbGllbnRfc29jaywgQ0FDX3N0YXRl IGNhYykKIHsKIAljaGFyCSAgICphdls1XTsKIAlpbnQJCQlhYyA9IDA7CkBAIC00NDQwLDcg KzQ0NTUsNyBAQCBiYWNrZW5kX2ZvcmtleGVjKFBvcnQgKnBvcnQsIENBQ19zdGF0ZSBjYWMp CiAJYXZbYWNdID0gTlVMTDsKIAlBc3NlcnQoYWMgPCBsZW5ndGhvZihhdikpOwogCi0JcmV0 dXJuIGludGVybmFsX2ZvcmtleGVjKGFjLCBhdiwgcG9ydCk7CisJcmV0dXJuIGludGVybmFs X2ZvcmtleGVjKGFjLCBhdiwgY2xpZW50X3NvY2spOwogfQogCiAjaWZuZGVmIFdJTjMyCkBA IC00NDUyLDcgKzQ0NjcsNyBAQCBiYWNrZW5kX2ZvcmtleGVjKFBvcnQgKnBvcnQsIENBQ19z dGF0ZSBjYWMpCiAgKiAtIGZvcmsoKTpzLCBhbmQgdGhlbiBleGVjKCk6cyB0aGUgY2hpbGQg cHJvY2VzcwogICovCiBzdGF0aWMgcGlkX3QKLWludGVybmFsX2ZvcmtleGVjKGludCBhcmdj LCBjaGFyICphcmd2W10sIFBvcnQgKnBvcnQpCitpbnRlcm5hbF9mb3JrZXhlYyhpbnQgYXJn YywgY2hhciAqYXJndltdLCBDbGllbnRTb2NrZXQgKmNsaWVudF9zb2NrKQogewogCXN0YXRp YyB1bnNpZ25lZCBsb25nIHRtcEJhY2tlbmRGaWxlTnVtID0gMDsKIAlwaWRfdAkJcGlkOwpA QCAtNDQ2MCw3ICs0NDc1LDcgQEAgaW50ZXJuYWxfZm9ya2V4ZWMoaW50IGFyZ2MsIGNoYXIg KmFyZ3ZbXSwgUG9ydCAqcG9ydCkKIAlCYWNrZW5kUGFyYW1ldGVycyBwYXJhbTsKIAlGSUxF CSAgICpmcDsKIAotCWlmICghc2F2ZV9iYWNrZW5kX3ZhcmlhYmxlcygmcGFyYW0sIHBvcnQp KQorCWlmICghc2F2ZV9iYWNrZW5kX3ZhcmlhYmxlcygmcGFyYW0sIGNsaWVudF9zb2NrKSkK IAkJcmV0dXJuIC0xOwkJCQkvKiBsb2cgbWFkZSBieSBzYXZlX2JhY2tlbmRfdmFyaWFibGVz ICovCiAKIAkvKiBDYWxjdWxhdGUgbmFtZSBmb3IgdGVtcCBmaWxlICovCkBAIC00NzU4LDcg KzQ3NzMsNyBAQCByZXRyeToKIHZvaWQKIFN1YlBvc3RtYXN0ZXJNYWluKGludCBhcmdjLCBj aGFyICphcmd2W10pCiB7Ci0JUG9ydAkJcG9ydDsKKwlDbGllbnRTb2NrZXQgY2xpZW50X3Nv Y2s7CiAKIAkvKiBJbiBFWEVDX0JBQ0tFTkQgY2FzZSB3ZSB3aWxsIG5vdCBoYXZlIGluaGVy aXRlZCB0aGVzZSBzZXR0aW5ncyAqLwogCUlzUG9zdG1hc3RlckVudmlyb25tZW50ID0gdHJ1 ZTsKQEAgLTQ3NzIsOCArNDc4Nyw4IEBAIFN1YlBvc3RtYXN0ZXJNYWluKGludCBhcmdjLCBj aGFyICphcmd2W10pCiAJCWVsb2coRkFUQUwsICJpbnZhbGlkIHN1YnBvc3RtYXN0ZXIgaW52 b2NhdGlvbiIpOwogCiAJLyogUmVhZCBpbiB0aGUgdmFyaWFibGVzIGZpbGUgKi8KLQltZW1z ZXQoJnBvcnQsIDAsIHNpemVvZihQb3J0KSk7Ci0JcmVhZF9iYWNrZW5kX3ZhcmlhYmxlcyhh cmd2WzJdLCAmcG9ydCk7CisJbWVtc2V0KCZjbGllbnRfc29jaywgMCwgc2l6ZW9mKENsaWVu dFNvY2tldCkpOworCXJlYWRfYmFja2VuZF92YXJpYWJsZXMoYXJndlsyXSwgJmNsaWVudF9z b2NrKTsKIAogCS8qIENsb3NlIHRoZSBwb3N0bWFzdGVyJ3Mgc29ja2V0cyAoYXMgc29vbiBh cyB3ZSBrbm93IHRoZW0pICovCiAJQ2xvc2VQb3N0bWFzdGVyUG9ydHMoc3RyY21wKGFyZ3Zb MV0sICItLWZvcmtsb2ciKSA9PSAwKTsKQEAgLTQ4NzcsMTMgKzQ4OTIsMTMgQEAgU3ViUG9z dG1hc3Rlck1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAkJICogUEdQUk9DIHNsb3Rz LCB3ZSBoYXZlIGFscmVhZHkgaW5pdGlhbGl6ZWQgbGlicHEgYW5kIGFyZSBhYmxlIHRvCiAJ CSAqIHJlcG9ydCB0aGUgZXJyb3IgdG8gdGhlIGNsaWVudC4KIAkJICovCi0JCUJhY2tlbmRJ bml0aWFsaXplKCZwb3J0LCBjYWMpOworCQlCYWNrZW5kSW5pdGlhbGl6ZSgmY2xpZW50X3Nv Y2ssIGNhYyk7CiAKIAkJLyogUmVzdG9yZSBiYXNpYyBzaGFyZWQgbWVtb3J5IHBvaW50ZXJz ICovCiAJCUluaXRTaG1lbUFjY2VzcyhVc2VkU2htZW1TZWdBZGRyKTsKIAogCQkvKiBBbmQg cnVuIHRoZSBiYWNrZW5kICovCi0JCUJhY2tlbmRSdW4oJnBvcnQpOwkJLyogZG9lcyBub3Qg cmV0dXJuICovCisJCUJhY2tlbmRSdW4oKTsJCQkvKiBkb2VzIG5vdCByZXR1cm4gKi8KIAl9 CiAJaWYgKHN0cmNtcChhcmd2WzFdLCAiLS1mb3JrYXV4IikgPT0gMCkKIAl7CkBAIC01OTY1 LDE1ICs1OTgwLDE1IEBAIHN0YXRpYyB2b2lkIHJlYWRfaW5oZXJpdGFibGVfc29ja2V0KFNP Q0tFVCAqZGVzdCwgSW5oZXJpdGFibGVTb2NrZXQgKnNyYyk7CiAvKiBTYXZlIGNyaXRpY2Fs IGJhY2tlbmQgdmFyaWFibGVzIGludG8gdGhlIEJhY2tlbmRQYXJhbWV0ZXJzIHN0cnVjdCAq LwogI2lmbmRlZiBXSU4zMgogc3RhdGljIGJvb2wKLXNhdmVfYmFja2VuZF92YXJpYWJsZXMo QmFja2VuZFBhcmFtZXRlcnMgKnBhcmFtLCBQb3J0ICpwb3J0KQorc2F2ZV9iYWNrZW5kX3Zh cmlhYmxlcyhCYWNrZW5kUGFyYW1ldGVycyAqcGFyYW0sIENsaWVudFNvY2tldCAqY2xpZW50 X3NvY2spCiAjZWxzZQogc3RhdGljIGJvb2wKLXNhdmVfYmFja2VuZF92YXJpYWJsZXMoQmFj a2VuZFBhcmFtZXRlcnMgKnBhcmFtLCBQb3J0ICpwb3J0LAorc2F2ZV9iYWNrZW5kX3Zhcmlh YmxlcyhCYWNrZW5kUGFyYW1ldGVycyAqcGFyYW0sIENsaWVudFNvY2tldCAqY2xpZW50X3Nv Y2ssCiAJCQkJCSAgIEhBTkRMRSBjaGlsZFByb2Nlc3MsIHBpZF90IGNoaWxkUGlkKQogI2Vu ZGlmCiB7Ci0JbWVtY3B5KCZwYXJhbS0+cG9ydCwgcG9ydCwgc2l6ZW9mKFBvcnQpKTsKLQlp ZiAoIXdyaXRlX2luaGVyaXRhYmxlX3NvY2tldCgmcGFyYW0tPnBvcnRzb2NrZXQsIHBvcnQt PnNvY2ssIGNoaWxkUGlkKSkKKwltZW1jcHkoJnBhcmFtLT5jbGllbnRfc29jaywgY2xpZW50 X3NvY2ssIHNpemVvZihDbGllbnRTb2NrZXQpKTsKKwlpZiAoIXdyaXRlX2luaGVyaXRhYmxl X3NvY2tldCgmcGFyYW0tPnNlcmlhbGl6ZWRfc29jaywgY2xpZW50X3NvY2stPnNvY2ssIGNo aWxkUGlkKSkKIAkJcmV0dXJuIGZhbHNlOwogCiAJc3RybGNweShwYXJhbS0+RGF0YURpciwg RGF0YURpciwgTUFYUEdQQVRIKTsKQEAgLTYxMzUsNyArNjE1MCw3IEBAIHJlYWRfaW5oZXJp dGFibGVfc29ja2V0KFNPQ0tFVCAqZGVzdCwgSW5oZXJpdGFibGVTb2NrZXQgKnNyYykKICNl bmRpZgogCiBzdGF0aWMgdm9pZAotcmVhZF9iYWNrZW5kX3ZhcmlhYmxlcyhjaGFyICppZCwg UG9ydCAqcG9ydCkKK3JlYWRfYmFja2VuZF92YXJpYWJsZXMoY2hhciAqaWQsIENsaWVudFNv Y2tldCAqY2xpZW50X3NvY2spCiB7CiAJQmFja2VuZFBhcmFtZXRlcnMgcGFyYW07CiAKQEAg LTYyMDIsMTUgKzYyMTcsMTUgQEAgcmVhZF9iYWNrZW5kX3ZhcmlhYmxlcyhjaGFyICppZCwg UG9ydCAqcG9ydCkKIAl9CiAjZW5kaWYKIAotCXJlc3RvcmVfYmFja2VuZF92YXJpYWJsZXMo JnBhcmFtLCBwb3J0KTsKKwlyZXN0b3JlX2JhY2tlbmRfdmFyaWFibGVzKCZwYXJhbSwgY2xp ZW50X3NvY2spOwogfQogCiAvKiBSZXN0b3JlIGNyaXRpY2FsIGJhY2tlbmQgdmFyaWFibGVz IGZyb20gdGhlIEJhY2tlbmRQYXJhbWV0ZXJzIHN0cnVjdCAqLwogc3RhdGljIHZvaWQKLXJl c3RvcmVfYmFja2VuZF92YXJpYWJsZXMoQmFja2VuZFBhcmFtZXRlcnMgKnBhcmFtLCBQb3J0 ICpwb3J0KQorcmVzdG9yZV9iYWNrZW5kX3ZhcmlhYmxlcyhCYWNrZW5kUGFyYW1ldGVycyAq cGFyYW0sIENsaWVudFNvY2tldCAqY2xpZW50X3NvY2spCiB7Ci0JbWVtY3B5KHBvcnQsICZw YXJhbS0+cG9ydCwgc2l6ZW9mKFBvcnQpKTsKLQlyZWFkX2luaGVyaXRhYmxlX3NvY2tldCgm cG9ydC0+c29jaywgJnBhcmFtLT5wb3J0c29ja2V0KTsKKwltZW1jcHkoY2xpZW50X3NvY2ss ICZwYXJhbS0+Y2xpZW50X3NvY2ssIHNpemVvZihDbGllbnRTb2NrZXQpKTsKKwlyZWFkX2lu aGVyaXRhYmxlX3NvY2tldCgmY2xpZW50X3NvY2stPnNvY2ssICZwYXJhbS0+c2VyaWFsaXpl ZF9zb2NrKTsKIAogCVNldERhdGFEaXIocGFyYW0tPkRhdGFEaXIpOwogCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC90Y29wL3Bvc3RncmVzLmMgYi9zcmMvYmFja2VuZC90Y29wL3Bvc3Rn cmVzLmMKaW5kZXggZGNhNWViNzgyOTcuLjA4N2ExYjQzZDdhIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC90Y29wL3Bvc3RncmVzLmMKKysrIGIvc3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jl cy5jCkBAIC00MjE2LDEwICs0MjE2LDcgQEAgUG9zdGdyZXNNYWluKGNvbnN0IGNoYXIgKmRi bmFtZSwgY29uc3QgY2hhciAqdXNlcm5hbWUpCiAKIAkvKgogCSAqIElmIHRoZSBQb3N0bWFz dGVyQ29udGV4dCBpcyBzdGlsbCBhcm91bmQsIHJlY3ljbGUgdGhlIHNwYWNlOyB3ZSBkb24n dAotCSAqIG5lZWQgaXQgYW55bW9yZSBhZnRlciBJbml0UG9zdGdyZXMgY29tcGxldGVzLiAg Tm90ZSB0aGlzIGRvZXMgbm90IHRyYXNoCi0JICogKk15UHJvY1BvcnQsIGJlY2F1c2UgdGhh dCBzcGFjZSBpcyBhbGxvY2F0ZWQgaW4gc3RhY2sKLQkgKiAuLi4gZWxzZSB3ZSdkIG5lZWQg dG8gY29weSB0aGUgUG9ydCBkYXRhIGZpcnN0LiAgQWxzbywgc3Vic2lkaWFyeSBkYXRhCi0J ICogc3VjaCBhcyB0aGUgdXNlcm5hbWUgaXNuJ3QgbG9zdCBlaXRoZXI7IHNlZSBQcm9jZXNz U3RhcnR1cFBhY2tldCgpLgorCSAqIG5lZWQgaXQgYW55bW9yZSBhZnRlciBJbml0UG9zdGdy ZXMgY29tcGxldGVzLgogCSAqLwogCWlmIChQb3N0bWFzdGVyQ29udGV4dCkKIAl7CmRpZmYg LS1naXQgYS9zcmMvaW5jbHVkZS9saWJwcS9saWJwcS1iZS5oIGIvc3JjL2luY2x1ZGUvbGli cHEvbGlicHEtYmUuaAppbmRleCAzMzVjYjJkZTQ0YS4uOWI2ZDhmYzU1NzEgMTAwNjQ0Ci0t LSBhL3NyYy9pbmNsdWRlL2xpYnBxL2xpYnBxLWJlLmgKKysrIGIvc3JjL2luY2x1ZGUvbGli cHEvbGlicHEtYmUuaApAQCAtMTEwLDEyICsxMTAsOSBAQCB0eXBlZGVmIHN0cnVjdCBDbGll bnRDb25uZWN0aW9uSW5mbwogfSBDbGllbnRDb25uZWN0aW9uSW5mbzsKIAogLyoKLSAqIFRo aXMgaXMgdXNlZCBieSB0aGUgcG9zdG1hc3RlciBpbiBpdHMgY29tbXVuaWNhdGlvbiB3aXRo IGZyb250ZW5kcy4gIEl0Ci0gKiBjb250YWlucyBhbGwgc3RhdGUgaW5mb3JtYXRpb24gbmVl ZGVkIGR1cmluZyB0aGlzIGNvbW11bmljYXRpb24gYmVmb3JlIHRoZQotICogYmFja2VuZCBp cyBydW4uICBUaGUgUG9ydCBzdHJ1Y3R1cmUgaXMga2VwdCBpbiBtYWxsb2MnZCBtZW1vcnkg YW5kIGlzCi0gKiBzdGlsbCBhdmFpbGFibGUgd2hlbiBhIGJhY2tlbmQgaXMgcnVubmluZyAo c2VlIE15UHJvY1BvcnQpLiAgVGhlIGRhdGEKLSAqIGl0IHBvaW50cyB0byBtdXN0IGFsc28g YmUgbWFsbG9jJ2QsIG9yIGVsc2UgcGFsbG9jJ2QgaW4gVG9wTWVtb3J5Q29udGV4dCwKLSAq IHNvIHRoYXQgaXQgc3Vydml2ZXMgaW50byBQb3N0Z3Jlc01haW4gZXhlY3V0aW9uIQorICog VGhlIFBvcnQgc3RydWN0dXJlIGhvbGRzIHN0YXRlIGluZm9ybWF0aW9uIGFib3V0IGEgY2xp ZW50IGNvbm5lY3Rpb24gaW4gYQorICogYmFja2VuZCBwcm9jZXNzLiAgSXQgaXMgYXZhaWxh YmxlIGluIHRoZSBnbG9iYWwgdmFyaWFibGUgTXlQcm9jUG9ydC4gIFRoZQorICogc3RydWN0 IGFuZCBhbGwgdGhlIGRhdGEgaXQgcG9pbnRzIGFyZSBrZXB0IGluIFRvcE1lbW9yeUNvbnRl eHQuCiAgKgogICogcmVtb3RlX2hvc3RuYW1lIGlzIHNldCBpZiB3ZSBkaWQgYSBzdWNjZXNz ZnVsIHJldmVyc2UgbG9va3VwIG9mIHRoZQogICogY2xpZW50J3MgSVAgYWRkcmVzcyBkdXJp bmcgY29ubmVjdGlvbiBzZXR1cC4KQEAgLTIxNyw2ICsyMTQsMTYgQEAgdHlwZWRlZiBzdHJ1 Y3QgUG9ydAogI2VuZGlmCiB9IFBvcnQ7CiAKKy8qCisgKiBDbGllbnRTb2NrZXQgaG9sZHMg YSBzb2NrZXQgZm9yIGFuIGFjY2VwdGVkIGNvbm5lY3Rpb24sIGFsb25nIHdpdGggdGhlCisg KiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZW5kcG9pbnRzLgorICovCit0eXBlZGVmIHN0cnVj dCBDbGllbnRTb2NrZXQgeworCXBnc29ja2V0CXNvY2s7CQkJLyogRmlsZSBkZXNjcmlwdG9y ICovCisJU29ja0FkZHIJbGFkZHI7CQkJLyogbG9jYWwgYWRkciAocG9zdG1hc3RlcikgKi8K KwlTb2NrQWRkcglyYWRkcjsJCQkvKiByZW1vdGUgYWRkciAoY2xpZW50KSAqLworfSBDbGll bnRTb2NrZXQ7CisKICNpZmRlZiBVU0VfU1NMCiAvKgogICoJSGFyZGNvZGVkIERIIHBhcmFt ZXRlcnMsIHVzZWQgaW4gZXBoZW1lcmFsIERIIGtleWluZy4gIChTZWUgYWxzbwpkaWZmIC0t Z2l0IGEvc3JjL2luY2x1ZGUvbGlicHEvbGlicHEuaCBiL3NyYy9pbmNsdWRlL2xpYnBxL2xp YnBxLmgKaW5kZXggYTYxMDRkOGNkMDIuLjg4OWU4NmE3ZjYxIDEwMDY0NAotLS0gYS9zcmMv aW5jbHVkZS9saWJwcS9saWJwcS5oCisrKyBiL3NyYy9pbmNsdWRlL2xpYnBxL2xpYnBxLmgK QEAgLTY0LDExICs2NCwxMSBAQCBleHRlcm4gUEdETExJTVBPUlQgV2FpdEV2ZW50U2V0ICpG ZUJlV2FpdFNldDsKICNkZWZpbmUgRmVCZVdhaXRTZXRMYXRjaFBvcyAxCiAjZGVmaW5lIEZl QmVXYWl0U2V0TkV2ZW50cyAzCiAKLWV4dGVybiBpbnQJU3RyZWFtU2VydmVyUG9ydChpbnQg ZmFtaWx5LCBjb25zdCBjaGFyICpob3N0TmFtZSwKK2V4dGVybiBpbnQJTGlzdGVuU2VydmVy UG9ydChpbnQgZmFtaWx5LCBjb25zdCBjaGFyICpob3N0TmFtZSwKIAkJCQkJCQkgdW5zaWdu ZWQgc2hvcnQgcG9ydE51bWJlciwgY29uc3QgY2hhciAqdW5peFNvY2tldERpciwKIAkJCQkJ CQkgcGdzb2NrZXQgTGlzdGVuU29ja2V0W10sIGludCAqTnVtTGlzdGVuU29ja2V0cywgaW50 IE1heExpc3Rlbik7Ci1leHRlcm4gaW50CVN0cmVhbUNvbm5lY3Rpb24ocGdzb2NrZXQgc2Vy dmVyX2ZkLCBQb3J0ICpwb3J0KTsKLWV4dGVybiB2b2lkIFN0cmVhbUNsb3NlKHBnc29ja2V0 IHNvY2spOworZXh0ZXJuIGludAlBY2NlcHRDbGllbnRDb25uZWN0aW9uKHBnc29ja2V0IHNl cnZlcl9mZCwgQ2xpZW50U29ja2V0ICpjbGllbnRfc29jayk7CitleHRlcm4gUG9ydCAqU3Ry ZWFtQ29ubmVjdGlvbihDbGllbnRTb2NrZXQgKmNsaWVudF9zb2NrKTsKIGV4dGVybiB2b2lk IFRvdWNoU29ja2V0RmlsZXModm9pZCk7CiBleHRlcm4gdm9pZCBSZW1vdmVTb2NrZXRGaWxl cyh2b2lkKTsKIGV4dGVybiB2b2lkIHBxX2luaXQodm9pZCk7CmRpZmYgLS1naXQgYS9zcmMv dG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2luZGVudC90eXBl ZGVmcy5saXN0CmluZGV4IDhkZTkwYzQ5NTg1Li43OGE5ZTBlYmJjOCAxMDA2NDQKLS0tIGEv c3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5k ZW50L3R5cGVkZWZzLmxpc3QKQEAgLTM4MCw2ICszODAsNyBAQCBDbGllbnRDZXJ0TW9kZQog Q2xpZW50Q2VydE5hbWUKIENsaWVudENvbm5lY3Rpb25JbmZvCiBDbGllbnREYXRhCitDbGll bnRTb2NrZXQKIENsb25lUHRyVHlwZQogQ2xvc2VQb3J0YWxTdG10CiBDbG9zZVB0clR5cGUK LS0gCjIuMzkuMgoK --------------ASkMfd1hzOyZblVTgMzqak1d Content-Type: text/x-patch; charset=UTF-8; name="v2-0006-Refactor-postmaster-child-process-launching.patch" Content-Disposition: attachment; filename*0="v2-0006-Refactor-postmaster-child-process-launching.patch" Content-Transfer-Encoding: base64 RnJvbSAyZDFhNWExYjIwZTk0OTExMjI4MTQzYWU2OGRhN2VlMDIxMGRlNDI0IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFdlZCwgMTEgT2N0IDIwMjMgMTM6Mzg6NDIgKzAzMDAK U3ViamVjdDogW1BBVENIIHYyIDYvNl0gUmVmYWN0b3IgcG9zdG1hc3RlciBjaGlsZCBwcm9j ZXNzIGxhdW5jaGluZwoKLSBNb3ZlIGNvZGUgcmVsYXRlZCB0byBsYXVuY2hpbmcgYmFja2Vu ZCBwcm9jZXNzZXMgdG8gbmV3IHNvdXJjZSBmaWxlLAogIGxhdW5jaF9iYWNrZW5kLmMKCi0g SW50cm9kdWNlIG5ldyBwb3N0bWFzdGVyX2NoaWxkX2xhdW5jaCgpIGZ1bmN0aW9uIHRoYXQg ZGVhbHMgd2l0aCB0aGUKICBkaWZmZXJlbmNlcyBiZXR3ZWVuIEVYRUNfQkFDS0VORCBhbmQg Zm9yayBtb2RlLgoKLSBSZWZhY3RvciB0aGUgbWVjaGFuaXNtIG9mIHBhc3NpbmcgaW5mb3Jt YXRpb24gZnJvbSB0aGUgcGFyZW50IHRvCiAgY2hpbGQgcHJvY2Vzcy4gSW5zdGVhZCBvZiB1 c2luZyBkaWZmZXJlbnQgY29tbWFuZC1saW5lIGFyZ3VtZW50cyB3aGVuCiAgbGF1bmNoaW5n IHRoZSBjaGlsZCBwcm9jZXNzIGluIEVYRUNfQkFDS0VORCBtb2RlLCBwYXNzIGEKICB2YXJp YWJsZS1sZW5ndGggYmxvYiBvZiBkYXRhIGFsb25nIHdpdGggYWxsIHRoZSBnbG9iYWwgdmFy aWFibGVzLiBUaGUKICBjb250ZW50cyBvZiB0aGF0IGJsb2IgZGVwZW5kcyBvbiB0aGUga2lu ZCBvZiBjaGlsZCBwcm9jZXNzIGJlaW5nCiAgbGF1bmNoZWQuIEluICFFWEVDX0JBQ0tFTkQg bW9kZSwgd2UgdXNlIHRoZSBzYW1lIGJsb2IsIGJ1dCBpdCdzIHNpbXBseQogIGluaGVyaXRl ZCBmcm9tIHRoZSBwYXJlbnQgdG8gY2hpbGQgcHJvY2Vzcy4KClJldmlld2VkLWJ5OiBUcmlz dGFuIFBhcnRpbiwgQW5kcmVzIEZyZXVuZApEaXNjdXNzaW9uOiBodHRwczovL3d3dy5wb3N0 Z3Jlc3FsLm9yZy9tZXNzYWdlLWlkLzdhNTliMDczLTViNWItMTUxZS03ZWQzLThiMDFmZjdj ZTllZkBpa2kuZmkKLS0tCiBzcmMvYmFja2VuZC9wb3N0bWFzdGVyL01ha2VmaWxlICAgICAg ICAgICAgIHwgICAgMiArLQogc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9hdXRvdmFjdXVtLmMg ICAgICAgICB8ICAxNzMgKy0tCiBzcmMvYmFja2VuZC9wb3N0bWFzdGVyL2F1eHByb2Nlc3Mu YyAgICAgICAgIHwgICA3MiArLQogc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9iZ3dvcmtlci5j ICAgICAgICAgICB8ICAgMTQgKy0KIHNyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYmd3cml0ZXIu YyAgICAgICAgICAgfCAgICA5ICstCiBzcmMvYmFja2VuZC9wb3N0bWFzdGVyL2NoZWNrcG9p bnRlci5jICAgICAgIHwgICAgOSArLQogc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9mb3JrX3By b2Nlc3MuYyAgICAgICB8ICAxMjYgLS0KIHNyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvbGF1bmNo X2JhY2tlbmQuYyAgICAgfCAxMjcyICsrKysrKysrKysrKysrKwogc3JjL2JhY2tlbmQvcG9z dG1hc3Rlci9tZXNvbi5idWlsZCAgICAgICAgICB8ICAgIDIgKy0KIHNyYy9iYWNrZW5kL3Bv c3RtYXN0ZXIvcGdhcmNoLmMgICAgICAgICAgICAgfCAgICA5ICstCiBzcmMvYmFja2VuZC9w b3N0bWFzdGVyL3Bvc3RtYXN0ZXIuYyAgICAgICAgIHwgMTU1NyArKystLS0tLS0tLS0tLS0t LS0tCiBzcmMvYmFja2VuZC9wb3N0bWFzdGVyL3N0YXJ0dXAuYyAgICAgICAgICAgIHwgICAg OSArLQogc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9zeXNsb2dnZXIuYyAgICAgICAgICB8ICAy NzUgKystLQogc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci93YWx3cml0ZXIuYyAgICAgICAgICB8 ICAgIDkgKy0KIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbGF1bmNoZXIuYyAg fCAgICAxIC0KIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3dhbHJlY2VpdmVyLmMgICAgICAg fCAgICA5ICstCiBzcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9zaG1lbS5jICAgICAgICAgICAg IHwgICAgMiArCiBzcmMvYmFja2VuZC91dGlscy9pbml0L2dsb2JhbHMuYyAgICAgICAgICAg IHwgICAgMSArCiBzcmMvYmFja2VuZC91dGlscy9pbml0L21pc2Npbml0LmMgICAgICAgICAg IHwgIDEzMyAtLQogc3JjL2luY2x1ZGUvbGlicHEvbGlicHEtYmUuaCAgICAgICAgICAgICAg ICB8ICAgMTEgKy0KIHNyYy9pbmNsdWRlL21pc2NhZG1pbi5oICAgICAgICAgICAgICAgICAg ICAgfCAgICAxIC0KIHNyYy9pbmNsdWRlL3Bvc3RtYXN0ZXIvYXV0b3ZhY3V1bS5oICAgICAg ICAgfCAgIDEyICstCiBzcmMvaW5jbHVkZS9wb3N0bWFzdGVyL2F1eHByb2Nlc3MuaCAgICAg ICAgIHwgICAgNCArLQogc3JjL2luY2x1ZGUvcG9zdG1hc3Rlci9iZ3dvcmtlcl9pbnRlcm5h bHMuaCB8ICAgIDIgKy0KIHNyYy9pbmNsdWRlL3Bvc3RtYXN0ZXIvYmd3cml0ZXIuaCAgICAg ICAgICAgfCAgICA0ICstCiBzcmMvaW5jbHVkZS9wb3N0bWFzdGVyL2ZvcmtfcHJvY2Vzcy5o ICAgICAgIHwgICAxNyAtCiBzcmMvaW5jbHVkZS9wb3N0bWFzdGVyL3BnYXJjaC5oICAgICAg ICAgICAgIHwgICAgMiArLQogc3JjL2luY2x1ZGUvcG9zdG1hc3Rlci9wb3N0bWFzdGVyLmgg ICAgICAgICB8ICAgNDQgKy0KIHNyYy9pbmNsdWRlL3Bvc3RtYXN0ZXIvc3RhcnR1cC5oICAg ICAgICAgICAgfCAgICAyICstCiBzcmMvaW5jbHVkZS9wb3N0bWFzdGVyL3N5c2xvZ2dlci5o ICAgICAgICAgIHwgICAgNCArLQogc3JjL2luY2x1ZGUvcG9zdG1hc3Rlci93YWx3cml0ZXIu aCAgICAgICAgICB8ICAgIDIgKy0KIHNyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3dhbHJlY2Vp dmVyLmggICAgICAgfCAgICAyICstCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlz dCAgICAgICAgICAgIHwgICAgMiArCiAzMyBmaWxlcyBjaGFuZ2VkLCAxNzg5IGluc2VydGlv bnMoKyksIDIwMDQgZGVsZXRpb25zKC0pCiBkZWxldGUgbW9kZSAxMDA2NDQgc3JjL2JhY2tl bmQvcG9zdG1hc3Rlci9mb3JrX3Byb2Nlc3MuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9i YWNrZW5kL3Bvc3RtYXN0ZXIvbGF1bmNoX2JhY2tlbmQuYwogZGVsZXRlIG1vZGUgMTAwNjQ0 IHNyYy9pbmNsdWRlL3Bvc3RtYXN0ZXIvZm9ya19wcm9jZXNzLmgKCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9wb3N0bWFzdGVyL01ha2VmaWxlIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rl ci9NYWtlZmlsZQppbmRleCAwNDc0NDhiMzRlYi4uZmM4OGY1YmFlMGIgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvTWFrZWZpbGUKKysrIGIvc3JjL2JhY2tlbmQvcG9z dG1hc3Rlci9NYWtlZmlsZQpAQCAtMTgsOCArMTgsOCBAQCBPQkpTID0gXAogCWJnd29ya2Vy Lm8gXAogCWJnd3JpdGVyLm8gXAogCWNoZWNrcG9pbnRlci5vIFwKLQlmb3JrX3Byb2Nlc3Mu byBcCiAJaW50ZXJydXB0Lm8gXAorCWxhdW5jaF9iYWNrZW5kLm8gXAogCXBnYXJjaC5vIFwK IAlwb3N0bWFzdGVyLm8gXAogCXN0YXJ0dXAubyBcCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9wb3N0bWFzdGVyL2F1dG92YWN1dW0uYyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYXV0 b3ZhY3V1bS5jCmluZGV4IDE3ZjJiMzZiMjhhLi5hNmZmZTc3NDliZSAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9hdXRvdmFjdXVtLmMKKysrIGIvc3JjL2JhY2tlbmQv cG9zdG1hc3Rlci9hdXRvdmFjdXVtLmMKQEAgLTg0LDcgKzg0LDYgQEAKICNpbmNsdWRlICJu b2Rlcy9tYWtlZnVuY3MuaCIKICNpbmNsdWRlICJwZ3N0YXQuaCIKICNpbmNsdWRlICJwb3N0 bWFzdGVyL2F1dG92YWN1dW0uaCIKLSNpbmNsdWRlICJwb3N0bWFzdGVyL2ZvcmtfcHJvY2Vz cy5oIgogI2luY2x1ZGUgInBvc3RtYXN0ZXIvaW50ZXJydXB0LmgiCiAjaW5jbHVkZSAicG9z dG1hc3Rlci9wb3N0bWFzdGVyLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9idWZtZ3IuaCIKQEAg LTMxNSwxMyArMzE0LDYgQEAgc3RhdGljIFdvcmtlckluZm8gTXlXb3JrZXJJbmZvID0gTlVM TDsKIC8qIFBJRCBvZiBsYXVuY2hlciwgdmFsaWQgb25seSBpbiB3b3JrZXIgd2hpbGUgc2h1 dHRpbmcgZG93biAqLwogaW50CQkJQXV0b3ZhY3V1bUxhdW5jaGVyUGlkID0gMDsKIAotI2lm ZGVmIEVYRUNfQkFDS0VORAotc3RhdGljIHBpZF90IGF2bGF1bmNoZXJfZm9ya2V4ZWModm9p ZCk7Ci1zdGF0aWMgcGlkX3QgYXZ3b3JrZXJfZm9ya2V4ZWModm9pZCk7Ci0jZW5kaWYKLU5P Tl9FWEVDX1NUQVRJQyB2b2lkIEF1dG9WYWNXb3JrZXJNYWluKGludCBhcmdjLCBjaGFyICph cmd2W10pIHBnX2F0dHJpYnV0ZV9ub3JldHVybigpOwotTk9OX0VYRUNfU1RBVElDIHZvaWQg QXV0b1ZhY0xhdW5jaGVyTWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKSBwZ19hdHRyaWJ1 dGVfbm9yZXR1cm4oKTsKLQogc3RhdGljIE9pZAlkb19zdGFydF93b3JrZXIodm9pZCk7CiBz dGF0aWMgdm9pZCBIYW5kbGVBdXRvVmFjTGF1bmNoZXJJbnRlcnJ1cHRzKHZvaWQpOwogc3Rh dGljIHZvaWQgQXV0b1ZhY0xhdW5jaGVyU2h1dGRvd24odm9pZCkgcGdfYXR0cmlidXRlX25v cmV0dXJuKCk7CkBAIC0zNjUsODUgKzM1NywyMSBAQCBzdGF0aWMgdm9pZCBhdmxfc2lndXNy Ml9oYW5kbGVyKFNJR05BTF9BUkdTKTsKICAqCQkJCQkgIEFVVE9WQUNVVU0gTEFVTkNIRVIg Q09ERQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqLwogCi0jaWZkZWYgRVhFQ19CQUNLRU5ECiAvKgotICog Zm9ya2V4ZWMgcm91dGluZSBmb3IgdGhlIGF1dG92YWN1dW0gbGF1bmNoZXIgcHJvY2Vzcy4K LSAqCi0gKiBGb3JtYXQgdXAgdGhlIGFyZ2xpc3QsIHRoZW4gZm9yayBhbmQgZXhlYy4KLSAq Lwotc3RhdGljIHBpZF90Ci1hdmxhdW5jaGVyX2ZvcmtleGVjKHZvaWQpCi17Ci0JY2hhcgkg ICAqYXZbMTBdOwotCWludAkJCWFjID0gMDsKLQotCWF2W2FjKytdID0gInBvc3RncmVzIjsK LQlhdlthYysrXSA9ICItLWZvcmthdmxhdW5jaGVyIjsKLQlhdlthYysrXSA9IE5VTEw7CQkJ LyogZmlsbGVkIGluIGJ5IHBvc3RtYXN0ZXJfZm9ya2V4ZWMgKi8KLQlhdlthY10gPSBOVUxM OwotCi0JQXNzZXJ0KGFjIDwgbGVuZ3Rob2YoYXYpKTsKLQotCXJldHVybiBwb3N0bWFzdGVy X2ZvcmtleGVjKGFjLCBhdik7Ci19Ci0KLS8qCi0gKiBXZSBuZWVkIHRoaXMgc2V0IGZyb20g dGhlIG91dHNpZGUsIGJlZm9yZSBJbml0UHJvY2VzcyBpcyBjYWxsZWQKKyAqIE1haW4gbG9v cCBmb3IgdGhlIGF1dG92YWN1dW0gbGF1bmNoZXIgcHJvY2Vzcy4KICAqLwogdm9pZAotQXV0 b3ZhY3V1bUxhdW5jaGVySUFtKHZvaWQpCi17Ci0JYW1fYXV0b3ZhY3V1bV9sYXVuY2hlciA9 IHRydWU7Ci19Ci0jZW5kaWYKLQotLyoKLSAqIE1haW4gZW50cnkgcG9pbnQgZm9yIGF1dG92 YWN1dW0gbGF1bmNoZXIgcHJvY2VzcywgdG8gYmUgY2FsbGVkIGZyb20gdGhlCi0gKiBwb3N0 bWFzdGVyLgotICovCi1pbnQKLVN0YXJ0QXV0b1ZhY0xhdW5jaGVyKHZvaWQpCitBdXRvVmFj TGF1bmNoZXJNYWluKGNoYXIgKnN0YXJ0dXBfZGF0YSwgc2l6ZV90IHN0YXJ0dXBfZGF0YV9s ZW4pCiB7Ci0JcGlkX3QJCUF1dG9WYWNQSUQ7CisJc2lnam1wX2J1Zglsb2NhbF9zaWdqbXBf YnVmOwogCi0jaWZkZWYgRVhFQ19CQUNLRU5ECi0Jc3dpdGNoICgoQXV0b1ZhY1BJRCA9IGF2 bGF1bmNoZXJfZm9ya2V4ZWMoKSkpCi0jZWxzZQotCXN3aXRjaCAoKEF1dG9WYWNQSUQgPSBm b3JrX3Byb2Nlc3MoKSkpCi0jZW5kaWYKKwkvKiBSZWxlYXNlIHBvc3RtYXN0ZXIncyB3b3Jr aW5nIG1lbW9yeSBjb250ZXh0ICovCisJaWYgKFBvc3RtYXN0ZXJDb250ZXh0KQogCXsKLQkJ Y2FzZSAtMToKLQkJCWVyZXBvcnQoTE9HLAotCQkJCQkoZXJybXNnKCJjb3VsZCBub3QgZm9y ayBhdXRvdmFjdXVtIGxhdW5jaGVyIHByb2Nlc3M6ICVtIikpKTsKLQkJCXJldHVybiAwOwot Ci0jaWZuZGVmIEVYRUNfQkFDS0VORAotCQljYXNlIDA6Ci0JCQkvKiBpbiBwb3N0bWFzdGVy IGNoaWxkIC4uLiAqLwotCQkJSW5pdFBvc3RtYXN0ZXJDaGlsZCgpOwotCi0JCQkvKiBDbG9z ZSB0aGUgcG9zdG1hc3RlcidzIHNvY2tldHMgKi8KLQkJCUNsb3NlUG9zdG1hc3RlclBvcnRz KGZhbHNlKTsKLQotCQkJQXV0b1ZhY0xhdW5jaGVyTWFpbigwLCBOVUxMKTsKLQkJCWJyZWFr OwotI2VuZGlmCi0JCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gKGludCkgQXV0b1ZhY1BJRDsKKwkJ TWVtb3J5Q29udGV4dERlbGV0ZShQb3N0bWFzdGVyQ29udGV4dCk7CisJCVBvc3RtYXN0ZXJD b250ZXh0ID0gTlVMTDsKIAl9CiAKLQkvKiBzaG91bGRuJ3QgZ2V0IGhlcmUgKi8KLQlyZXR1 cm4gMDsKLX0KLQotLyoKLSAqIE1haW4gbG9vcCBmb3IgdGhlIGF1dG92YWN1dW0gbGF1bmNo ZXIgcHJvY2Vzcy4KLSAqLwotTk9OX0VYRUNfU1RBVElDIHZvaWQKLUF1dG9WYWNMYXVuY2hl ck1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKLXsKLQlzaWdqbXBfYnVmCWxvY2FsX3Np Z2ptcF9idWY7Ci0KIAlhbV9hdXRvdmFjdXVtX2xhdW5jaGVyID0gdHJ1ZTsKIAogCU15QmFj a2VuZFR5cGUgPSBCX0FVVE9WQUNfTEFVTkNIRVI7CkBAIC00NzUsNiArNDAzLDkgQEAgQXV0 b1ZhY0xhdW5jaGVyTWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCXBxc2lnbmFsKFNJ R0ZQRSwgRmxvYXRFeGNlcHRpb25IYW5kbGVyKTsKIAlwcXNpZ25hbChTSUdDSExELCBTSUdf REZMKTsKIAorCS8qIGF1dG92YWN1dW0gbmVlZHMgdGhpcyBzZXQgYmVmb3JlIGNhbGxpbmcg SW5pdFByb2Nlc3MgKi8KKwlhbV9hdXRvdmFjdXVtX2xhdW5jaGVyID0gdHJ1ZTsKKwogCS8q CiAJICogQ3JlYXRlIGEgcGVyLWJhY2tlbmQgUEdQUk9DIHN0cnVjdCBpbiBzaGFyZWQgbWVt b3J5LiAgV2UgbXVzdCBkbyB0aGlzCiAJICogYmVmb3JlIHdlIGNhbiB1c2UgTFdMb2Nrcy4K QEAgLTE0MzUsODcgKzEzNjYsMjIgQEAgYXZsX3NpZ3VzcjJfaGFuZGxlcihTSUdOQUxfQVJH UykKICAqCQkJCQkgIEFVVE9WQUNVVU0gV09SS0VSIENPREUKICAqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8K IAotI2lmZGVmIEVYRUNfQkFDS0VORAotLyoKLSAqIGZvcmtleGVjIHJvdXRpbmVzIGZvciB0 aGUgYXV0b3ZhY3V1bSB3b3JrZXIuCi0gKgotICogRm9ybWF0IHVwIHRoZSBhcmdsaXN0LCB0 aGVuIGZvcmsgYW5kIGV4ZWMuCi0gKi8KLXN0YXRpYyBwaWRfdAotYXZ3b3JrZXJfZm9ya2V4 ZWModm9pZCkKLXsKLQljaGFyCSAgICphdlsxMF07Ci0JaW50CQkJYWMgPSAwOwotCi0JYXZb YWMrK10gPSAicG9zdGdyZXMiOwotCWF2W2FjKytdID0gIi0tZm9ya2F2d29ya2VyIjsKLQlh dlthYysrXSA9IE5VTEw7CQkJLyogZmlsbGVkIGluIGJ5IHBvc3RtYXN0ZXJfZm9ya2V4ZWMg Ki8KLQlhdlthY10gPSBOVUxMOwotCi0JQXNzZXJ0KGFjIDwgbGVuZ3Rob2YoYXYpKTsKLQot CXJldHVybiBwb3N0bWFzdGVyX2ZvcmtleGVjKGFjLCBhdik7Ci19Ci0KIC8qCi0gKiBXZSBu ZWVkIHRoaXMgc2V0IGZyb20gdGhlIG91dHNpZGUsIGJlZm9yZSBJbml0UHJvY2VzcyBpcyBj YWxsZWQKKyAqIEF1dG9WYWNXb3JrZXJNYWluCiAgKi8KIHZvaWQKLUF1dG92YWN1dW1Xb3Jr ZXJJQW0odm9pZCkKK0F1dG9WYWNXb3JrZXJNYWluKGNoYXIgKnN0YXJ0dXBfZGF0YSwgc2l6 ZV90IHN0YXJ0dXBfZGF0YV9sZW4pCiB7Ci0JYW1fYXV0b3ZhY3V1bV93b3JrZXIgPSB0cnVl OwotfQotI2VuZGlmCi0KLS8qCi0gKiBNYWluIGVudHJ5IHBvaW50IGZvciBhdXRvdmFjdXVt IHdvcmtlciBwcm9jZXNzLgotICoKLSAqIFRoaXMgY29kZSBpcyBoZWF2aWx5IGJhc2VkIG9u IHBnYXJjaC5jLCBxLnYuCi0gKi8KLWludAotU3RhcnRBdXRvVmFjV29ya2VyKHZvaWQpCi17 Ci0JcGlkX3QJCXdvcmtlcl9waWQ7CisJc2lnam1wX2J1Zglsb2NhbF9zaWdqbXBfYnVmOwor CU9pZAkJCWRiaWQ7CiAKLSNpZmRlZiBFWEVDX0JBQ0tFTkQKLQlzd2l0Y2ggKCh3b3JrZXJf cGlkID0gYXZ3b3JrZXJfZm9ya2V4ZWMoKSkpCi0jZWxzZQotCXN3aXRjaCAoKHdvcmtlcl9w aWQgPSBmb3JrX3Byb2Nlc3MoKSkpCi0jZW5kaWYKKwkvKiBSZWxlYXNlIHBvc3RtYXN0ZXIn cyB3b3JraW5nIG1lbW9yeSBjb250ZXh0ICovCisJaWYgKFBvc3RtYXN0ZXJDb250ZXh0KQog CXsKLQkJY2FzZSAtMToKLQkJCWVyZXBvcnQoTE9HLAotCQkJCQkoZXJybXNnKCJjb3VsZCBu b3QgZm9yayBhdXRvdmFjdXVtIHdvcmtlciBwcm9jZXNzOiAlbSIpKSk7Ci0JCQlyZXR1cm4g MDsKLQotI2lmbmRlZiBFWEVDX0JBQ0tFTkQKLQkJY2FzZSAwOgotCQkJLyogaW4gcG9zdG1h c3RlciBjaGlsZCAuLi4gKi8KLQkJCUluaXRQb3N0bWFzdGVyQ2hpbGQoKTsKLQotCQkJLyog Q2xvc2UgdGhlIHBvc3RtYXN0ZXIncyBzb2NrZXRzICovCi0JCQlDbG9zZVBvc3RtYXN0ZXJQ b3J0cyhmYWxzZSk7Ci0KLQkJCUF1dG9WYWNXb3JrZXJNYWluKDAsIE5VTEwpOwotCQkJYnJl YWs7Ci0jZW5kaWYKLQkJZGVmYXVsdDoKLQkJCXJldHVybiAoaW50KSB3b3JrZXJfcGlkOwor CQlNZW1vcnlDb250ZXh0RGVsZXRlKFBvc3RtYXN0ZXJDb250ZXh0KTsKKwkJUG9zdG1hc3Rl ckNvbnRleHQgPSBOVUxMOwogCX0KIAotCS8qIHNob3VsZG4ndCBnZXQgaGVyZSAqLwotCXJl dHVybiAwOwotfQotCi0vKgotICogQXV0b1ZhY1dvcmtlck1haW4KLSAqLwotTk9OX0VYRUNf U1RBVElDIHZvaWQKLUF1dG9WYWNXb3JrZXJNYWluKGludCBhcmdjLCBjaGFyICphcmd2W10p Ci17Ci0Jc2lnam1wX2J1Zglsb2NhbF9zaWdqbXBfYnVmOwotCU9pZAkJCWRiaWQ7Ci0KIAlh bV9hdXRvdmFjdXVtX3dvcmtlciA9IHRydWU7CiAKIAlNeUJhY2tlbmRUeXBlID0gQl9BVVRP VkFDX1dPUktFUjsKQEAgLTE1NDYsNiArMTQxMiw5IEBAIEF1dG9WYWNXb3JrZXJNYWluKGlu dCBhcmdjLCBjaGFyICphcmd2W10pCiAJcHFzaWduYWwoU0lHRlBFLCBGbG9hdEV4Y2VwdGlv bkhhbmRsZXIpOwogCXBxc2lnbmFsKFNJR0NITEQsIFNJR19ERkwpOwogCisJLyogYXV0b3Zh Y3V1bSBuZWVkcyB0aGlzIHNldCBiZWZvcmUgY2FsbGluZyBJbml0UHJvY2VzcyAqLworCWFt X2F1dG92YWN1dW1fd29ya2VyID0gdHJ1ZTsKKwogCS8qCiAJICogQ3JlYXRlIGEgcGVyLWJh Y2tlbmQgUEdQUk9DIHN0cnVjdCBpbiBzaGFyZWQgbWVtb3J5LiAgV2UgbXVzdCBkbyB0aGlz CiAJICogYmVmb3JlIHdlIGNhbiB1c2UgTFdMb2Nrcy4KZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL3Bvc3RtYXN0ZXIvYXV4cHJvY2Vzcy5jIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9h dXhwcm9jZXNzLmMKaW5kZXggNTM2ZDlhMmIzZTQuLjVjMmI2MjhiZjlkIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2F1eHByb2Nlc3MuYworKysgYi9zcmMvYmFja2Vu ZC9wb3N0bWFzdGVyL2F1eHByb2Nlc3MuYwpAQCAtNDYsNDUgKzQ2LDIzIEBAIEF1eFByb2NU eXBlIE15QXV4UHJvY1R5cGUgPSBOb3RBbkF1eFByb2Nlc3M7CS8qIGRlY2xhcmVkIGluIG1p c2NhZG1pbi5oICovCiAKIAogLyoKLSAqCSBBdXhpbGlhcnlQcm9jZXNzTWFpbgorICoJIEF1 eGlsaWFyeVByb2Nlc3NJbml0CiAgKgotICoJIFRoZSBtYWluIGVudHJ5IHBvaW50IGZvciBh dXhpbGlhcnkgcHJvY2Vzc2VzLCBzdWNoIGFzIHRoZSBiZ3dyaXRlciwKKyAqCSBDb21tb24g aW5pdGlhbGl6YXRpb24gY29kZSBmb3IgYXV4aWxpYXJ5IHByb2Nlc3Nlcywgc3VjaCBhcyB0 aGUgYmd3cml0ZXIsCiAgKgkgd2Fsd3JpdGVyLCB3YWxyZWNlaXZlciwgYm9vdHN0cmFwcGVy IGFuZCB0aGUgc2hhcmVkIG1lbW9yeSBjaGVja2VyIGNvZGUuCi0gKgotICoJIFRoaXMgY29k ZSBpcyBoZXJlIGp1c3QgYmVjYXVzZSBvZiBoaXN0b3JpY2FsIHJlYXNvbnMuCiAgKi8KIHZv aWQKLUF1eGlsaWFyeVByb2Nlc3NNYWluKEF1eFByb2NUeXBlIGF1eHR5cGUpCitBdXhpbGlh cnlQcm9jZXNzSW5pdCh2b2lkKQogewotCUFzc2VydChJc1VuZGVyUG9zdG1hc3Rlcik7Ci0K LQlNeUF1eFByb2NUeXBlID0gYXV4dHlwZTsKLQotCXN3aXRjaCAoTXlBdXhQcm9jVHlwZSkK KwkvKiBSZWxlYXNlIHBvc3RtYXN0ZXIncyB3b3JraW5nIG1lbW9yeSBjb250ZXh0ICovCisJ aWYgKFBvc3RtYXN0ZXJDb250ZXh0KQogCXsKLQkJY2FzZSBTdGFydHVwUHJvY2VzczoKLQkJ CU15QmFja2VuZFR5cGUgPSBCX1NUQVJUVVA7Ci0JCQlicmVhazsKLQkJY2FzZSBBcmNoaXZl clByb2Nlc3M6Ci0JCQlNeUJhY2tlbmRUeXBlID0gQl9BUkNISVZFUjsKLQkJCWJyZWFrOwot CQljYXNlIEJnV3JpdGVyUHJvY2VzczoKLQkJCU15QmFja2VuZFR5cGUgPSBCX0JHX1dSSVRF UjsKLQkJCWJyZWFrOwotCQljYXNlIENoZWNrcG9pbnRlclByb2Nlc3M6Ci0JCQlNeUJhY2tl bmRUeXBlID0gQl9DSEVDS1BPSU5URVI7Ci0JCQlicmVhazsKLQkJY2FzZSBXYWxXcml0ZXJQ cm9jZXNzOgotCQkJTXlCYWNrZW5kVHlwZSA9IEJfV0FMX1dSSVRFUjsKLQkJCWJyZWFrOwot CQljYXNlIFdhbFJlY2VpdmVyUHJvY2VzczoKLQkJCU15QmFja2VuZFR5cGUgPSBCX1dBTF9S RUNFSVZFUjsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJZWxvZyhQQU5JQywgInVucmVj b2duaXplZCBwcm9jZXNzIHR5cGU6ICVkIiwgKGludCkgTXlBdXhQcm9jVHlwZSk7Ci0JCQlN eUJhY2tlbmRUeXBlID0gQl9JTlZBTElEOworCQlNZW1vcnlDb250ZXh0RGVsZXRlKFBvc3Rt YXN0ZXJDb250ZXh0KTsKKwkJUG9zdG1hc3RlckNvbnRleHQgPSBOVUxMOwogCX0KIAorCUFz c2VydChJc1VuZGVyUG9zdG1hc3Rlcik7CisKIAlpbml0X3BzX2Rpc3BsYXkoTlVMTCk7CiAK IAlTZXRQcm9jZXNzaW5nTW9kZShCb290c3RyYXBQcm9jZXNzaW5nKTsKQEAgLTEyNSw3ICsx MDMsNiBAQCBBdXhpbGlhcnlQcm9jZXNzTWFpbihBdXhQcm9jVHlwZSBhdXh0eXBlKQogCSAq LwogCUNyZWF0ZUF1eFByb2Nlc3NSZXNvdXJjZU93bmVyKCk7CiAKLQogCS8qIEluaXRpYWxp emUgYmFja2VuZCBzdGF0dXMgaW5mb3JtYXRpb24gKi8KIAlwZ3N0YXRfYmVpbml0KCk7CiAJ cGdzdGF0X2Jlc3RhcnQoKTsKQEAgLTEzNCwzNyArMTExLDYgQEAgQXV4aWxpYXJ5UHJvY2Vz c01haW4oQXV4UHJvY1R5cGUgYXV4dHlwZSkKIAliZWZvcmVfc2htZW1fZXhpdChTaHV0ZG93 bkF1eGlsaWFyeVByb2Nlc3MsIDApOwogCiAJU2V0UHJvY2Vzc2luZ01vZGUoTm9ybWFsUHJv Y2Vzc2luZyk7Ci0KLQlzd2l0Y2ggKE15QXV4UHJvY1R5cGUpCi0JewotCQljYXNlIFN0YXJ0 dXBQcm9jZXNzOgotCQkJU3RhcnR1cFByb2Nlc3NNYWluKCk7Ci0JCQlwcm9jX2V4aXQoMSk7 Ci0KLQkJY2FzZSBBcmNoaXZlclByb2Nlc3M6Ci0JCQlQZ0FyY2hpdmVyTWFpbigpOwotCQkJ cHJvY19leGl0KDEpOwotCi0JCWNhc2UgQmdXcml0ZXJQcm9jZXNzOgotCQkJQmFja2dyb3Vu ZFdyaXRlck1haW4oKTsKLQkJCXByb2NfZXhpdCgxKTsKLQotCQljYXNlIENoZWNrcG9pbnRl clByb2Nlc3M6Ci0JCQlDaGVja3BvaW50ZXJNYWluKCk7Ci0JCQlwcm9jX2V4aXQoMSk7Ci0K LQkJY2FzZSBXYWxXcml0ZXJQcm9jZXNzOgotCQkJV2FsV3JpdGVyTWFpbigpOwotCQkJcHJv Y19leGl0KDEpOwotCi0JCWNhc2UgV2FsUmVjZWl2ZXJQcm9jZXNzOgotCQkJV2FsUmVjZWl2 ZXJNYWluKCk7Ci0JCQlwcm9jX2V4aXQoMSk7Ci0KLQkJZGVmYXVsdDoKLQkJCWVsb2coUEFO SUMsICJ1bnJlY29nbml6ZWQgcHJvY2VzcyB0eXBlOiAlZCIsIChpbnQpIE15QXV4UHJvY1R5 cGUpOwotCQkJcHJvY19leGl0KDEpOwotCX0KIH0KIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL3Bvc3RtYXN0ZXIvYmd3b3JrZXIuYyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIv Ymd3b3JrZXIuYwppbmRleCAxNTQzNTk2NWJmOC4uOTkxMDY5MTI1NWUgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYmd3b3JrZXIuYworKysgYi9zcmMvYmFja2VuZC9w b3N0bWFzdGVyL2Jnd29ya2VyLmMKQEAgLTcyMywxNyArNzIzLDI3IEBAIGJnd29ya2VyX2Rp ZShTSUdOQUxfQVJHUykKICAqIE1haW4gZW50cnkgcG9pbnQgZm9yIGJhY2tncm91bmQgd29y a2VyIHByb2Nlc3Nlcy4KICAqLwogdm9pZAotQmFja2dyb3VuZFdvcmtlck1haW4odm9pZCkK K0JhY2tncm91bmRXb3JrZXJNYWluKGNoYXIgKnN0YXJ0dXBfZGF0YSwgc2l6ZV90IHN0YXJ0 dXBfZGF0YV9sZW4pCiB7CiAJc2lnam1wX2J1Zglsb2NhbF9zaWdqbXBfYnVmOwotCUJhY2tn cm91bmRXb3JrZXIgKndvcmtlciA9IE15Qmd3b3JrZXJFbnRyeTsKKwlCYWNrZ3JvdW5kV29y a2VyICp3b3JrZXI7CiAJYmd3b3JrZXJfbWFpbl90eXBlIGVudHJ5cHQ7CiAKKwkvKiBSZWxl YXNlIHBvc3RtYXN0ZXIncyB3b3JraW5nIG1lbW9yeSBjb250ZXh0ICovCisJaWYgKFBvc3Rt YXN0ZXJDb250ZXh0KQorCXsKKwkJTWVtb3J5Q29udGV4dERlbGV0ZShQb3N0bWFzdGVyQ29u dGV4dCk7CisJCVBvc3RtYXN0ZXJDb250ZXh0ID0gTlVMTDsKKwl9CisKKwlBc3NlcnQoc3Rh cnR1cF9kYXRhX2xlbiA9PSBzaXplb2YoQmFja2dyb3VuZFdvcmtlcikpOworCXdvcmtlciA9 IChCYWNrZ3JvdW5kV29ya2VyICopIHN0YXJ0dXBfZGF0YTsKIAlpZiAod29ya2VyID09IE5V TEwpCiAJCWVsb2coRkFUQUwsICJ1bmFibGUgdG8gZmluZCBiZ3dvcmtlciBlbnRyeSIpOwog CiAJSXNCYWNrZ3JvdW5kV29ya2VyID0gdHJ1ZTsKIAorCU15Qmd3b3JrZXJFbnRyeSA9IHdv cmtlcjsKIAlNeUJhY2tlbmRUeXBlID0gQl9CR19XT1JLRVI7CiAJaW5pdF9wc19kaXNwbGF5 KHdvcmtlci0+Ymd3X25hbWUpOwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wb3N0bWFz dGVyL2Jnd3JpdGVyLmMgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2Jnd3JpdGVyLmMKaW5k ZXggZjJlNGYyM2Q5ZmMuLmI4YjUwNWIyNWZkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9w b3N0bWFzdGVyL2Jnd3JpdGVyLmMKKysrIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9iZ3dy aXRlci5jCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSAibGlicHEvcHFzaWduYWwuaCIK ICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJwZ3N0YXQuaCIKKyNpbmNsdWRl ICJwb3N0bWFzdGVyL2F1eHByb2Nlc3MuaCIKICNpbmNsdWRlICJwb3N0bWFzdGVyL2Jnd3Jp dGVyLmgiCiAjaW5jbHVkZSAicG9zdG1hc3Rlci9pbnRlcnJ1cHQuaCIKICNpbmNsdWRlICJz dG9yYWdlL2J1Zl9pbnRlcm5hbHMuaCIKQEAgLTg4LDEzICs4OSwxOSBAQCBzdGF0aWMgWExv Z1JlY1B0ciBsYXN0X3NuYXBzaG90X2xzbiA9IEludmFsaWRYTG9nUmVjUHRyOwogICogYmFz aWMgZXhlY3V0aW9uIGVudmlyb25tZW50LCBidXQgbm90IGVuYWJsZWQgc2lnbmFscyB5ZXQu CiAgKi8KIHZvaWQKLUJhY2tncm91bmRXcml0ZXJNYWluKHZvaWQpCitCYWNrZ3JvdW5kV3Jp dGVyTWFpbihjaGFyICpzdGFydHVwX2RhdGEsIHNpemVfdCBzdGFydHVwX2RhdGFfbGVuKQog ewogCXNpZ2ptcF9idWYJbG9jYWxfc2lnam1wX2J1ZjsKIAlNZW1vcnlDb250ZXh0IGJnd3Jp dGVyX2NvbnRleHQ7CiAJYm9vbAkJcHJldl9oaWJlcm5hdGU7CiAJV3JpdGViYWNrQ29udGV4 dCB3Yl9jb250ZXh0OwogCisJQXNzZXJ0KHN0YXJ0dXBfZGF0YV9sZW4gPT0gMCk7CisKKwlN eUF1eFByb2NUeXBlID0gQmdXcml0ZXJQcm9jZXNzOworCU15QmFja2VuZFR5cGUgPSBCX0JH X1dSSVRFUjsKKwlBdXhpbGlhcnlQcm9jZXNzSW5pdCgpOworCiAJLyoKIAkgKiBQcm9wZXJs eSBhY2NlcHQgb3IgaWdub3JlIHNpZ25hbHMgdGhhdCBtaWdodCBiZSBzZW50IHRvIHVzLgog CSAqLwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9jaGVja3BvaW50ZXIu YyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvY2hlY2twb2ludGVyLmMKaW5kZXggYWNlOTg5 M2Q5NTcuLmU2MTcwNjZjMzg1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVy L2NoZWNrcG9pbnRlci5jCisrKyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvY2hlY2twb2lu dGVyLmMKQEAgLTQyLDYgKzQyLDcgQEAKICNpbmNsdWRlICJsaWJwcS9wcXNpZ25hbC5oIgog I2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgInBnc3RhdC5oIgorI2luY2x1ZGUg InBvc3RtYXN0ZXIvYXV4cHJvY2Vzcy5oIgogI2luY2x1ZGUgInBvc3RtYXN0ZXIvYmd3cml0 ZXIuaCIKICNpbmNsdWRlICJwb3N0bWFzdGVyL2ludGVycnVwdC5oIgogI2luY2x1ZGUgInJl cGxpY2F0aW9uL3N5bmNyZXAuaCIKQEAgLTE3OCwxMSArMTc5LDE3IEBAIHN0YXRpYyB2b2lk IFJlcUNoZWNrcG9pbnRIYW5kbGVyKFNJR05BTF9BUkdTKTsKICAqIGJhc2ljIGV4ZWN1dGlv biBlbnZpcm9ubWVudCwgYnV0IG5vdCBlbmFibGVkIHNpZ25hbHMgeWV0LgogICovCiB2b2lk Ci1DaGVja3BvaW50ZXJNYWluKHZvaWQpCitDaGVja3BvaW50ZXJNYWluKGNoYXIgKnN0YXJ0 dXBfZGF0YSwgc2l6ZV90IHN0YXJ0dXBfZGF0YV9sZW4pCiB7CiAJc2lnam1wX2J1Zglsb2Nh bF9zaWdqbXBfYnVmOwogCU1lbW9yeUNvbnRleHQgY2hlY2twb2ludGVyX2NvbnRleHQ7CiAK KwlBc3NlcnQoc3RhcnR1cF9kYXRhX2xlbiA9PSAwKTsKKworCU15QXV4UHJvY1R5cGUgPSBD aGVja3BvaW50ZXJQcm9jZXNzOworCU15QmFja2VuZFR5cGUgPSBCX0NIRUNLUE9JTlRFUjsK KwlBdXhpbGlhcnlQcm9jZXNzSW5pdCgpOworCiAJQ2hlY2twb2ludGVyU2htZW0tPmNoZWNr cG9pbnRlcl9waWQgPSBNeVByb2NQaWQ7CiAKIAkvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvcG9zdG1hc3Rlci9mb3JrX3Byb2Nlc3MuYyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIv Zm9ya19wcm9jZXNzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZmOWMyNzY1 ZDY4Li4wMDAwMDAwMDAwMAotLS0gYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2ZvcmtfcHJv Y2Vzcy5jCisrKyAvZGV2L251bGwKQEAgLTEsMTI2ICswLDAgQEAKLS8qCi0gKiBmb3JrX3By b2Nlc3MuYwotICoJIEEgc2ltcGxlIHdyYXBwZXIgb24gdG9wIG9mIGZvcmsoKS4gVGhpcyBk b2VzIG5vdCBoYW5kbGUgdGhlCi0gKgkgRVhFQ19CQUNLRU5EIGNhc2U7IGl0IG1pZ2h0IGJl IGV4dGVuZGVkIHRvIGRvIHNvLCBidXQgaXQgd291bGQgYmUKLSAqCSBjb25zaWRlcmFibHkg bW9yZSBjb21wbGV4LgotICoKLSAqIENvcHlyaWdodCAoYykgMTk5Ni0yMDIzLCBQb3N0Z3Jl U1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAotICoKLSAqIElERU5USUZJQ0FUSU9OCi0g KgkgIHNyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvZm9ya19wcm9jZXNzLmMKLSAqLwotI2luY2x1 ZGUgInBvc3RncmVzLmgiCi0KLSNpbmNsdWRlIDxmY250bC5oPgotI2luY2x1ZGUgPHNpZ25h bC5oPgotI2luY2x1ZGUgPHRpbWUuaD4KLSNpbmNsdWRlIDxzeXMvc3RhdC5oPgotI2luY2x1 ZGUgPHN5cy90aW1lLmg+Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0KLSNpbmNsdWRlICJsaWJw cS9wcXNpZ25hbC5oIgotI2luY2x1ZGUgInBvc3RtYXN0ZXIvZm9ya19wcm9jZXNzLmgiCi0K LSNpZm5kZWYgV0lOMzIKLS8qCi0gKiBXcmFwcGVyIGZvciBmb3JrKCkuIFJldHVybiB2YWx1 ZXMgYXJlIHRoZSBzYW1lIGFzIHRob3NlIGZvciBmb3JrKCk6Ci0gKiAtMSBpZiB0aGUgZm9y ayBmYWlsZWQsIDAgaW4gdGhlIGNoaWxkIHByb2Nlc3MsIGFuZCB0aGUgUElEIG9mIHRoZQot ICogY2hpbGQgaW4gdGhlIHBhcmVudCBwcm9jZXNzLiAgU2lnbmFscyBhcmUgYmxvY2tlZCB3 aGlsZSBmb3JraW5nLCBzbwotICogdGhlIGNoaWxkIG11c3QgdW5ibG9jay4KLSAqLwotcGlk X3QKLWZvcmtfcHJvY2Vzcyh2b2lkKQotewotCXBpZF90CQlyZXN1bHQ7Ci0JY29uc3QgY2hh ciAqb29tZmlsZW5hbWU7Ci0Jc2lnc2V0X3QJc2F2ZV9tYXNrOwotCi0jaWZkZWYgTElOVVhf UFJPRklMRQotCXN0cnVjdCBpdGltZXJ2YWwgcHJvZl9pdGltZXI7Ci0jZW5kaWYKLQotCS8q Ci0JICogRmx1c2ggc3RkaW8gY2hhbm5lbHMganVzdCBiZWZvcmUgZm9yaywgdG8gYXZvaWQg ZG91YmxlLW91dHB1dCBwcm9ibGVtcy4KLQkgKi8KLQlmZmx1c2goTlVMTCk7Ci0KLSNpZmRl ZiBMSU5VWF9QUk9GSUxFCi0KLQkvKgotCSAqIExpbnV4J3MgZm9yaygpIHJlc2V0cyB0aGUg cHJvZmlsaW5nIHRpbWVyIGluIHRoZSBjaGlsZCBwcm9jZXNzLiBJZiB3ZQotCSAqIHdhbnQg dG8gcHJvZmlsZSBjaGlsZCBwcm9jZXNzZXMgdGhlbiB3ZSBuZWVkIHRvIHNhdmUgYW5kIHJl c3RvcmUgdGhlCi0JICogdGltZXIgc2V0dGluZy4gIFRoaXMgaXMgYSB3YXN0ZSBvZiB0aW1l IGlmIG5vdCBwcm9maWxpbmcsIGhvd2V2ZXIsIHNvCi0JICogb25seSBkbyBpdCBpZiBjb21t YW5kZWQgYnkgc3BlY2lmaWMgLURMSU5VWF9QUk9GSUxFIHN3aXRjaC4KLQkgKi8KLQlnZXRp dGltZXIoSVRJTUVSX1BST0YsICZwcm9mX2l0aW1lcik7Ci0jZW5kaWYKLQotCS8qCi0JICog V2Ugc3RhcnQgcG9zdG1hc3RlciBjaGlsZHJlbiB3aXRoIHNpZ25hbHMgYmxvY2tlZC4gIFRo aXMgYWxsb3dzIHRoZW0gdG8KLQkgKiBpbnN0YWxsIHRoZWlyIG93biBoYW5kbGVycyBiZWZv cmUgdW5ibG9ja2luZywgdG8gYXZvaWQgcmFjZXMgd2hlcmUgdGhleQotCSAqIG1pZ2h0IHJ1 biB0aGUgcG9zdG1hc3RlcidzIGhhbmRsZXIgYW5kIG1pc3MgYW4gaW1wb3J0YW50IGNvbnRy b2wKLQkgKiBzaWduYWwuIFdpdGggbW9yZSBhbmFseXNpcyB0aGlzIGNvdWxkIHBvdGVudGlh bGx5IGJlIHJlbGF4ZWQuCi0JICovCi0Jc2lncHJvY21hc2soU0lHX1NFVE1BU0ssICZCbG9j a1NpZywgJnNhdmVfbWFzayk7Ci0JcmVzdWx0ID0gZm9yaygpOwotCWlmIChyZXN1bHQgPT0g MCkKLQl7Ci0JCS8qIGZvcmsgc3VjY2VlZGVkLCBpbiBjaGlsZCAqLwotI2lmZGVmIExJTlVY X1BST0ZJTEUKLQkJc2V0aXRpbWVyKElUSU1FUl9QUk9GLCAmcHJvZl9pdGltZXIsIE5VTEwp OwotI2VuZGlmCi0KLQkJLyoKLQkJICogQnkgZGVmYXVsdCwgTGludXggdGVuZHMgdG8ga2ls bCB0aGUgcG9zdG1hc3RlciBpbiBvdXQtb2YtbWVtb3J5Ci0JCSAqIHNpdHVhdGlvbnMsIGJl Y2F1c2UgaXQgYmxhbWVzIHRoZSBwb3N0bWFzdGVyIGZvciB0aGUgc3VtIG9mIGNoaWxkCi0J CSAqIHByb2Nlc3Mgc2l6ZXMgKmluY2x1ZGluZyBzaGFyZWQgbWVtb3J5Ki4gIChUaGlzIGlz IHVuYmVsaWV2YWJseQotCQkgKiBzdHVwaWQsIGJ1dCB0aGUga2VybmVsIGhhY2tlcnMgc2Vl bSB1bmludGVyZXN0ZWQgaW4gaW1wcm92aW5nIGl0LikKLQkJICogVGhlcmVmb3JlIGl0J3Mg b2Z0ZW4gYSBnb29kIGlkZWEgdG8gcHJvdGVjdCB0aGUgcG9zdG1hc3RlciBieQotCQkgKiBz ZXR0aW5nIGl0cyBPT00gc2NvcmUgYWRqdXN0bWVudCBuZWdhdGl2ZSAod2hpY2ggaGFzIHRv IGJlIGRvbmUgaW4KLQkJICogYSByb290LW93bmVkIHN0YXJ0dXAgc2NyaXB0KS4gIFNpbmNl IHRoZSBhZGp1c3RtZW50IGlzIGluaGVyaXRlZCBieQotCQkgKiBjaGlsZCBwcm9jZXNzZXMs IHRoaXMgd291bGQgb3JkaW5hcmlseSBtZWFuIHRoYXQgYWxsIHRoZQotCQkgKiBwb3N0bWFz dGVyJ3MgY2hpbGRyZW4gYXJlIGVxdWFsbHkgcHJvdGVjdGVkIGFnYWluc3QgT09NIGtpbGws IHdoaWNoCi0JCSAqIGlzIG5vdCBzdWNoIGEgZ29vZCBpZGVhLiAgU28gd2UgcHJvdmlkZSB0 aGlzIGNvZGUgdG8gYWxsb3cgdGhlCi0JCSAqIGNoaWxkcmVuIHRvIGNoYW5nZSB0aGVpciBP T00gc2NvcmUgYWRqdXN0bWVudHMgYWdhaW4uICBCb3RoIHRoZQotCQkgKiBmaWxlIG5hbWUg dG8gd3JpdGUgdG8gYW5kIHRoZSB2YWx1ZSB0byB3cml0ZSBhcmUgY29udHJvbGxlZCBieQot CQkgKiBlbnZpcm9ubWVudCB2YXJpYWJsZXMsIHdoaWNoIGNhbiBiZSBzZXQgYnkgdGhlIHNh bWUgc3RhcnR1cCBzY3JpcHQKLQkJICogdGhhdCBkaWQgdGhlIG9yaWdpbmFsIGFkanVzdG1l bnQuCi0JCSAqLwotCQlvb21maWxlbmFtZSA9IGdldGVudigiUEdfT09NX0FESlVTVF9GSUxF Iik7Ci0KLQkJaWYgKG9vbWZpbGVuYW1lICE9IE5VTEwpCi0JCXsKLQkJCS8qCi0JCQkgKiBV c2Ugb3BlbigpIG5vdCBzdGRpbywgdG8gZW5zdXJlIHdlIGNvbnRyb2wgdGhlIG9wZW4gZmxh Z3MuIFNvbWUKLQkJCSAqIExpbnV4IHNlY3VyaXR5IGVudmlyb25tZW50cyByZWplY3QgYW55 dGhpbmcgYnV0IE9fV1JPTkxZLgotCQkJICovCi0JCQlpbnQJCQlmZCA9IG9wZW4ob29tZmls ZW5hbWUsIE9fV1JPTkxZLCAwKTsKLQotCQkJLyogV2UgaWdub3JlIGFsbCBlcnJvcnMgKi8K LQkJCWlmIChmZCA+PSAwKQotCQkJewotCQkJCWNvbnN0IGNoYXIgKm9vbXZhbHVlID0gZ2V0 ZW52KCJQR19PT01fQURKVVNUX1ZBTFVFIik7Ci0JCQkJaW50CQkJcmM7Ci0KLQkJCQlpZiAo b29tdmFsdWUgPT0gTlVMTCkJLyogc3VwcGx5IGEgdXNlZnVsIGRlZmF1bHQgKi8KLQkJCQkJ b29tdmFsdWUgPSAiMCI7Ci0KLQkJCQlyYyA9IHdyaXRlKGZkLCBvb212YWx1ZSwgc3RybGVu KG9vbXZhbHVlKSk7Ci0JCQkJKHZvaWQpIHJjOwotCQkJCWNsb3NlKGZkKTsKLQkJCX0KLQkJ fQotCi0JCS8qIGRvIHBvc3QtZm9yayBpbml0aWFsaXphdGlvbiBmb3IgcmFuZG9tIG51bWJl ciBnZW5lcmF0aW9uICovCi0JCXBnX3N0cm9uZ19yYW5kb21faW5pdCgpOwotCX0KLQllbHNl Ci0JewotCQkvKiBpbiBwYXJlbnQsIHJlc3RvcmUgc2lnbmFsIG1hc2sgKi8KLQkJc2lncHJv Y21hc2soU0lHX1NFVE1BU0ssICZzYXZlX21hc2ssIE5VTEwpOwotCX0KLQotCXJldHVybiBy ZXN1bHQ7Ci19Ci0KLSNlbmRpZgkJCQkJCQkvKiAhIFdJTjMyICovCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9wb3N0bWFzdGVyL2xhdW5jaF9iYWNrZW5kLmMgYi9zcmMvYmFja2VuZC9w b3N0bWFzdGVyL2xhdW5jaF9iYWNrZW5kLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMDAuLmZhYzY1OGJhNjg3Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2JhY2tl bmQvcG9zdG1hc3Rlci9sYXVuY2hfYmFja2VuZC5jCkBAIC0wLDAgKzEsMTI3MiBAQAorLyot LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogbGF1bmNoX2JhY2tlbmQuYworICoJICBGdW5j dGlvbnMgZm9yIGxhdW5jaGluZyBiYWNrZW5kcyBhbmQgb3RoZXIgcG9zdG1hc3RlciBjaGls ZAorICoJICBwcm9jZXNzZXMuCisgKgorICogT24gVW5peCBzeXN0ZW1zLCBhIG5ldyBjaGls ZCBwcm9jZXNzIGlzIGxhdW5jaGVkIHdpdGggZm9yaygpLiAgSXQgaW5oZXJpdHMKKyAqIGFs bCB0aGUgZ2xvYmFsIHZhcmlhYmxlcyBhbmQgZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgaGFkIGJl ZW4gaW5pdGlhbGl6ZWQgaW4KKyAqIHRoZSBwb3N0bWFzdGVyLiAgQWZ0ZXIgZm9ya2luZywg dGhlIGNoaWxkIHByb2Nlc3MgY2xvc2VzIHRoZSBmaWxlCisgKiBkZXNjcmlwdG9ycyB0aGF0 IGFyZSBub3QgbmVlZGVkIGluIHRoZSBjaGlsZCBwcm9jZXNzLCBhbmQgc2V0cyB1cCB0aGUK KyAqIG1lY2hhbmlzbSB0byBkZXRlY3QgZGVhdGggb2YgdGhlIHBhcmVudCBwb3N0bWFzdGVy IHByb2Nlc3MsIGV0Yy4gIEFmdGVyCisgKiB0aGF0LCBpdCBjYWxscyB0aGUgcmlnaHQgTWFp biBmdW5jdGlvbiBkZXBlbmRpbmcgb24gdGhlIGtpbmQgb2YgY2hpbGQKKyAqIHByb2Nlc3Mu CisgKgorICogSW4gRVhFQ19CQUNLRU5EIG1vZGUsIHdoaWNoIGlzIHVzZWQgb24gV2luZG93 cyBidXQgY2FuIGJlIGVuYWJsZWQgb24gb3RoZXIKKyAqIHBsYXRmb3JtcyBmb3IgdGVzdGlu ZywgdGhlIGNoaWxkIHByb2Nlc3MgaXMgbGF1bmNoZWQgYnkgZm9yaygpICsgZXhlYygpIChv cgorICogQ3JlYXRlUHJvY2VzcygpIG9uIFdpbmRvd3MpLiAgSXQgZG9lcyBub3QgaW5oZXJp dCB0aGUgc3RhdGUgZnJvbSB0aGUKKyAqIHBvc3RtYXN0ZXIsIHNvIGl0IG5lZWRzIHRvIHJl LWF0dGFjaCB0byB0aGUgc2hhcmVkIG1lbW9yeSwgcmUtaW5pdGlhbGl6ZQorICogZ2xvYmFs IHZhcmlhYmxlcywgcmUtbG9hZCB0aGUgY29uZmlnIGZpbGUgZXRjLgorICoKKyAqCisgKiBQ b3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAyMywgUG9zdGdyZVNRTCBHbG9iYWwgRGV2 ZWxvcG1lbnQgR3JvdXAKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50 cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhCisgKgorICoKKyAqIElERU5USUZJ Q0FUSU9OCisgKgkgIHNyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvbGF1bmNoX2JhY2tlbmQuYwor ICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKyNpbmNsdWRlICJwb3N0Z3Jlcy5o IgorCisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CisjaW5jbHVk ZSA8dGltZS5oPgorI2luY2x1ZGUgPHN5cy93YWl0Lmg+CisjaW5jbHVkZSA8c3lzL3N0YXQu aD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNs dWRlIDxzeXMvcGFyYW0uaD4KKyNpbmNsdWRlIDxuZXRkYi5oPgorI2luY2x1ZGUgPGxpbWl0 cy5oPgorCisjaW5jbHVkZSAiYWNjZXNzL3RyYW5zYW0uaCIKKyNpbmNsdWRlICJhY2Nlc3Mv eGxvZy5oIgorI2luY2x1ZGUgImNvbW1vbi9maWxlX3V0aWxzLmgiCisjaW5jbHVkZSAibGli cHEvbGlicHEtYmUuaCIKKyNpbmNsdWRlICJsaWJwcS9wcXNpZ25hbC5oIgorI2luY2x1ZGUg Im1pc2NhZG1pbi5oIgorI2luY2x1ZGUgIm5vZGVzL3F1ZXJ5anVtYmxlLmgiCisjaW5jbHVk ZSAicG9ydC5oIgorI2luY2x1ZGUgInBvc3RtYXN0ZXIvYXV0b3ZhY3V1bS5oIgorI2luY2x1 ZGUgInBvc3RtYXN0ZXIvYXV4cHJvY2Vzcy5oIgorI2luY2x1ZGUgInBvc3RtYXN0ZXIvYmd3 b3JrZXJfaW50ZXJuYWxzLmgiCisjaW5jbHVkZSAicG9zdG1hc3Rlci9iZ3dyaXRlci5oIgor I2luY2x1ZGUgInBvc3RtYXN0ZXIvaW50ZXJydXB0LmgiCisjaW5jbHVkZSAicG9zdG1hc3Rl ci9wZ2FyY2guaCIKKyNpbmNsdWRlICJwb3N0bWFzdGVyL3Bvc3RtYXN0ZXIuaCIKKyNpbmNs dWRlICJwb3N0bWFzdGVyL3N0YXJ0dXAuaCIKKyNpbmNsdWRlICJwb3N0bWFzdGVyL3N5c2xv Z2dlci5oIgorI2luY2x1ZGUgInBvc3RtYXN0ZXIvd2Fsd3JpdGVyLmgiCisjaW5jbHVkZSAi cmVwbGljYXRpb24vd2FscmVjZWl2ZXIuaCIKKyNpbmNsdWRlICJzdG9yYWdlL2ZkLmgiCisj aW5jbHVkZSAic3RvcmFnZS9pcGMuaCIKKyNpbmNsdWRlICJzdG9yYWdlL3BnX3NobWVtLmgi CisjaW5jbHVkZSAic3RvcmFnZS9wbXNpZ25hbC5oIgorI2luY2x1ZGUgInN0b3JhZ2UvcHJv Yy5oIgorI2luY2x1ZGUgInRjb3AvdGNvcHByb3QuaCIKKyNpbmNsdWRlICJ1dGlscy9idWls dGlucy5oIgorI2luY2x1ZGUgInV0aWxzL2RhdGV0aW1lLmgiCisjaW5jbHVkZSAidXRpbHMv Z3VjLmgiCisjaW5jbHVkZSAidXRpbHMvbWVtdXRpbHMuaCIKKyNpbmNsdWRlICJ1dGlscy9w c19zdGF0dXMuaCIKKyNpbmNsdWRlICJ1dGlscy90aW1lb3V0LmgiCisjaW5jbHVkZSAidXRp bHMvdGltZXN0YW1wLmgiCisKKyNpZmRlZiBFWEVDX0JBQ0tFTkQKKyNpbmNsdWRlICJzdG9y YWdlL3NwaW4uaCIKKyNlbmRpZgorCisKKy8qIFR5cGUgZm9yIGEgc29ja2V0IHRoYXQgY2Fu IGJlIGluaGVyaXRlZCB0byBhIGNsaWVudCBwcm9jZXNzICovCisjaWZkZWYgV0lOMzIKK3R5 cGVkZWYgc3RydWN0Cit7CisJU09DS0VUCQlvcmlnc29ja2V0OwkJLyogT3JpZ2luYWwgc29j a2V0IHZhbHVlLCBvciBQR0lOVkFMSURfU09DS0VUCisJCQkJCQkJCSAqIGlmIG5vdCBhIHNv Y2tldCAqLworCVdTQVBST1RPQ09MX0lORk8gd3NhaW5mbzsKK30gSW5oZXJpdGFibGVTb2Nr ZXQ7CisjZWxzZQordHlwZWRlZiBpbnQgSW5oZXJpdGFibGVTb2NrZXQ7CisjZW5kaWYKKwor I2lmZGVmIEVYRUNfQkFDS0VORAorCisvKgorICogU3RydWN0dXJlIGNvbnRhaW5zIGFsbCBn bG9iYWwgdmFyaWFibGVzIHBhc3NlZCB0byBleGVjOmVkIGJhY2tlbmRzCisgKi8KK3R5cGVk ZWYgc3RydWN0Cit7CisJY2hhcgkJRGF0YURpcltNQVhQR1BBVEhdOworCWludDMyCQlNeUNh bmNlbEtleTsKKwlpbnQJCQlNeVBNQ2hpbGRTbG90OworI2lmbmRlZiBXSU4zMgorCXVuc2ln bmVkIGxvbmcgVXNlZFNobWVtU2VnSUQ7CisjZWxzZQorCXZvaWQJICAgKlNobWVtUHJvdGVj dGl2ZVJlZ2lvbjsKKwlIQU5ETEUJCVVzZWRTaG1lbVNlZ0lEOworI2VuZGlmCisJdm9pZAkg ICAqVXNlZFNobWVtU2VnQWRkcjsKKwlzbG9ja190ICAgICpTaG1lbUxvY2s7CisJVmFyaWFi bGVDYWNoZSBTaG1lbVZhcmlhYmxlQ2FjaGU7CisJc3RydWN0IGJrZW5kICpTaG1lbUJhY2tl bmRBcnJheTsKKyNpZm5kZWYgSEFWRV9TUElOTE9DS1MKKwlQR1NlbWFwaG9yZSAqU3Bpbmxv Y2tTZW1hQXJyYXk7CisjZW5kaWYKKwlpbnQJCQlOYW1lZExXTG9ja1RyYW5jaGVSZXF1ZXN0 czsKKwlOYW1lZExXTG9ja1RyYW5jaGUgKk5hbWVkTFdMb2NrVHJhbmNoZUFycmF5OworCUxX TG9ja1BhZGRlZCAqTWFpbkxXTG9ja0FycmF5OworCXNsb2NrX3QgICAgKlByb2NTdHJ1Y3RM b2NrOworCVBST0NfSERSICAgKlByb2NHbG9iYWw7CisJUEdQUk9DCSAgICpBdXhpbGlhcnlQ cm9jczsKKwlQR1BST0MJICAgKlByZXBhcmVkWGFjdFByb2NzOworCVBNU2lnbmFsRGF0YSAq UE1TaWduYWxTdGF0ZTsKKwlwaWRfdAkJUG9zdG1hc3RlclBpZDsKKwlUaW1lc3RhbXBUeiBQ Z1N0YXJ0VGltZTsKKwlUaW1lc3RhbXBUeiBQZ1JlbG9hZFRpbWU7CisJcGdfdGltZV90CWZp cnN0X3N5c2xvZ2dlcl9maWxlX3RpbWU7CisJYm9vbAkJcmVkaXJlY3Rpb25fZG9uZTsKKwli b29sCQlJc0JpbmFyeVVwZ3JhZGU7CisJYm9vbAkJcXVlcnlfaWRfZW5hYmxlZDsKKwlpbnQJ CQltYXhfc2FmZV9mZHM7CisJaW50CQkJTWF4QmFja2VuZHM7CisjaWZkZWYgV0lOMzIKKwlI QU5ETEUJCVBvc3RtYXN0ZXJIYW5kbGU7CisJSEFORExFCQlpbml0aWFsX3NpZ25hbF9waXBl OworCUhBTkRMRQkJc3lzbG9nUGlwZVsyXTsKKyNlbHNlCisJaW50CQkJcG9zdG1hc3Rlcl9h bGl2ZV9mZHNbMl07CisJaW50CQkJc3lzbG9nUGlwZVsyXTsKKyNlbmRpZgorCWNoYXIJCW15 X2V4ZWNfcGF0aFtNQVhQR1BBVEhdOworCWNoYXIJCXBrZ2xpYl9wYXRoW01BWFBHUEFUSF07 CisKKwkvKgorCSAqIFRoZXNlIGFyZSBvbmx5IHVzZWQgYnkgYmFja2VuZCBwcm9jZXNzZXMs IGJ1dCBpdCdzIGhlcmUgYmVjYXVzZSBwYXNzaW5nCisJICogYSBzb2NrZXQgbmVlZHMgc29t ZSBzcGVjaWFsIGhhbmRsaW5nIG9uIFdpbmRvd3MuICdjbGllbnRfc29jaycgaXMgYW4KKwkg KiBleHBsaWNpdCBhcmd1bWVudCB0byBwb3N0bWFzdGVyX2NoaWxkX2xhdW5jaCwgYnV0IGlz IHN0b3JlZCBpbgorCSAqIE15Q2xpZW50U29ja2V0IGluIHRoZSBjaGlsZCBwcm9jZXNzLgor CSAqLworCUNsaWVudFNvY2tldCBjbGllbnRfc29jazsKKwlJbmhlcml0YWJsZVNvY2tldCBp bmhfc29jazsKKworCXNpemVfdAkJc3RhcnR1cF9kYXRhX2xlbjsKKwkvKiBzdGFydHVwIGRh dGEgZm9sbG93cyAqLworCWNoYXIJCXN0YXJ0dXBfZGF0YVtGTEVYSUJMRV9BUlJBWV9NRU1C RVJdOworfSBCYWNrZW5kUGFyYW1ldGVyczsKKworI2RlZmluZSBTaXplT2ZCYWNrZW5kUGFy YW1ldGVycyhzdGFydHVwX2RhdGFfbGVuKSAob2Zmc2V0b2YoQmFja2VuZFBhcmFtZXRlcnMs IHN0YXJ0dXBfZGF0YSkgKyBzdGFydHVwX2RhdGFfbGVuKQorCitzdGF0aWMgdm9pZCByZWFk X2JhY2tlbmRfdmFyaWFibGVzKGNoYXIgKmlkLCBjaGFyICoqc3RhcnR1cF9kYXRhLCBzaXpl X3QgKnN0YXJ0dXBfZGF0YV9sZW4pOworc3RhdGljIHZvaWQgcmVzdG9yZV9iYWNrZW5kX3Zh cmlhYmxlcyhCYWNrZW5kUGFyYW1ldGVycyAqcGFyYW0pOworCitzdGF0aWMgYm9vbCBzYXZl X2JhY2tlbmRfdmFyaWFibGVzKEJhY2tlbmRQYXJhbWV0ZXJzICpwYXJhbSwgQ2xpZW50U29j a2V0ICpjbGllbnRfc29jaywKKyNpZmRlZiBXSU4zMgorCQkJCQkJCQkgICBIQU5ETEUgY2hp bGRQcm9jZXNzLCBwaWRfdCBjaGlsZFBpZCwKKyNlbmRpZgorCQkJCQkJCQkgICBjaGFyICpz dGFydHVwX2RhdGEsIHNpemVfdCBzdGFydHVwX2RhdGFfbGVuKTsKKworI2VuZGlmCQkJCQkJ CS8qIEVYRUNfQkFDS0VORCAqLworCitzdGF0aWMgdm9pZCBJbml0UG9zdG1hc3RlckNoaWxk KGJvb2wgYW1fc3lzbG9nZ2VyKTsKKworCisjaWZkZWYgRVhFQ19CQUNLRU5ECitzdGF0aWMg cGlkX3QgaW50ZXJuYWxfZm9ya2V4ZWMoY29uc3QgY2hhciAqbWFpbl9mbl9uYW1lLCBjaGFy ICpzdGFydHVwX2RhdGEsIHNpemVfdCBzdGFydHVwX2RhdGFfbGVuLCBDbGllbnRTb2NrZXQg KmNsaWVudF9zb2NrKTsKKyNlbmRpZgkJCQkJCQkvKiBFWEVDX0JBQ0tFTkQgKi8KKworI2lm bmRlZiBXSU4zMgorc3RhdGljIHBpZF90IGZvcmtfcHJvY2Vzcyh2b2lkKTsKKyNlbmRpZgor CisvKgorICogSW5mb3JtYXRpb24gbmVlZGVkIHRvIGxhdW5jaCBkaWZmZXJlbnQga2luZHMg b2YgY2hpbGQgcHJvY2Vzc2VzLgorICovCitzdGF0aWMgY29uc3Qgc3RydWN0Cit7CisJY29u c3QgY2hhciAqbmFtZTsKKwl2b2lkCQkoKm1haW5fZm4pIChjaGFyICpzdGFydHVwX2RhdGEs IHNpemVfdCBzdGFydHVwX2RhdGFfbGVuKTsKKwlib29sCQlzaG1lbV9hdHRhY2g7Cit9CQkJ ZW50cnlfa2luZHNbXSA9IHsKKwlbUE1DX0JBQ0tFTkRdID0geyJiYWNrZW5kIiwgQmFja2Vu ZE1haW4sIHRydWV9LAorCisJW1BNQ19BVl9MQVVOQ0hFUl0gPSB7ImF1dG92YWN1dW0gbGF1 bmNoZXIiLCBBdXRvVmFjTGF1bmNoZXJNYWluLCB0cnVlfSwKKwlbUE1DX0FWX1dPUktFUl0g PSB7ImF1dG92YWN1dW0gd29ya2VyIiwgQXV0b1ZhY1dvcmtlck1haW4sIHRydWV9LAorCVtQ TUNfQkdXT1JLRVJdID0geyJiZ3dvcmtlciIsIEJhY2tncm91bmRXb3JrZXJNYWluLCB0cnVl fSwKKwlbUE1DX1NZU0xPR0dFUl0gPSB7InN5c2xvZ2dlciIsIFN5c0xvZ2dlck1haW4sIGZh bHNlfSwKKworCVtQTUNfU1RBUlRVUF0gPSB7InN0YXJ0dXAiLCBTdGFydHVwUHJvY2Vzc01h aW4sIHRydWV9LAorCVtQTUNfQkdXUklURVJdID0geyJiZ3dyaXRlciIsIEJhY2tncm91bmRX cml0ZXJNYWluLCB0cnVlfSwKKwlbUE1DX0FSQ0hJVkVSXSA9IHsiYXJjaGl2ZXIiLCBQZ0Fy Y2hpdmVyTWFpbiwgdHJ1ZX0sCisJW1BNQ19DSEVDS1BPSU5URVJdID0geyJjaGVja3BvaW50 ZXIiLCBDaGVja3BvaW50ZXJNYWluLCB0cnVlfSwKKwlbUE1DX1dBTF9XUklURVJdID0geyJ3 YWxfd3JpdGVyIiwgV2FsV3JpdGVyTWFpbiwgdHJ1ZX0sCisJW1BNQ19XQUxfUkVDRUlWRVJd ID0geyJ3YWxfcmVjZWl2ZXIiLCBXYWxSZWNlaXZlck1haW4sIHRydWV9LAorfTsKKworY29u c3QgY2hhciAqCitQb3N0bWFzdGVyQ2hpbGROYW1lKFBvc3RtYXN0ZXJDaGlsZFR5cGUgY2hp bGRfdHlwZSkKK3sKKwlBc3NlcnQoY2hpbGRfdHlwZSA+PSAwICYmIGNoaWxkX3R5cGUgPCBs ZW5ndGhvZihlbnRyeV9raW5kcykpOworCXJldHVybiBlbnRyeV9raW5kc1tjaGlsZF90eXBl XS5uYW1lOworfQorCisvKgorICogU3RhcnQgYSBuZXcgcG9zdG1hc3RlciBjaGlsZCBwcm9j ZXNzLgorICoKKyAqIFRoZSBjaGlsZCBwcm9jZXNzIHdpbGwgYmUgcmVzdG9yZWQgdG8gcm91 Z2hseSB0aGUgc2FtZSBzdGF0ZSwgd2hldGhlcgorICogRVhFQ19CQUNLRU5EIGlzIHVzZWQg b3Igbm90OiBpdCB3aWxsIGJlIGF0dGFjaGVkIHRvIHNoYXJlZCBtZW1vcnksIGFuZCBmZHMK KyAqIGFuZCBvdGhlciByZXNvdXJjZXMgdGhhdCB3ZSd2ZSBpbmhlcml0ZWQgZnJvbSBwb3N0 bWFzdGVyIHRoYXQgYXJlIG5vdAorICogbmVlZGVkIGluIGEgY2hpbGQgcHJvY2VzcyBoYXZl IGJlZW4gY2xvc2VkLgorICoKKyAqICdzdGFydHVwX2RhdGEnIGlzIGFuIG9wdGlvbmFsIGNv bnRpZ3VvdXMgY2h1bmsgb2YgZGF0YSB0aGF0IGlzIHBhc3NlZCB0bworICogdGhlIGNoaWxk IHByb2Nlc3MuCisgKi8KK3BpZF90Citwb3N0bWFzdGVyX2NoaWxkX2xhdW5jaChQb3N0bWFz dGVyQ2hpbGRUeXBlIGNoaWxkX3R5cGUsIGNoYXIgKnN0YXJ0dXBfZGF0YSwgc2l6ZV90IHN0 YXJ0dXBfZGF0YV9sZW4sIENsaWVudFNvY2tldCAqY2xpZW50X3NvY2spCit7CisJcGlkX3QJ CXBpZDsKKworCUFzc2VydChjaGlsZF90eXBlID49IDAgJiYgY2hpbGRfdHlwZSA8IGxlbmd0 aG9mKGVudHJ5X2tpbmRzKSk7CisJQXNzZXJ0KElzUG9zdG1hc3RlckVudmlyb25tZW50ICYm ICFJc1VuZGVyUG9zdG1hc3Rlcik7CisKKyNpZmRlZiBFWEVDX0JBQ0tFTkQKKwlwaWQgPSBp bnRlcm5hbF9mb3JrZXhlYyhlbnRyeV9raW5kc1tjaGlsZF90eXBlXS5uYW1lLCBzdGFydHVw X2RhdGEsIHN0YXJ0dXBfZGF0YV9sZW4sIGNsaWVudF9zb2NrKTsKKwkvKiB0aGUgY2hpbGQg cHJvY2VzcyB3aWxsIGFycml2ZSBpbiBTdWJQb3N0bWFzdGVyTWFpbiAqLworI2Vsc2UJCQkJ CQkJLyogIUVYRUNfQkFDS0VORCAqLworCXBpZCA9IGZvcmtfcHJvY2VzcygpOworCWlmIChw aWQgPT0gMCkJCQkJLyogY2hpbGQgKi8KKwl7CisJCS8qIERldGFuZ2xlIGZyb20gcG9zdG1h c3RlciAqLworCQlJbml0UG9zdG1hc3RlckNoaWxkKGNoaWxkX3R5cGUgPT0gUE1DX1NZU0xP R0dFUik7CisKKwkJLyoKKwkJICogQmVmb3JlIGJsb3dpbmcgYXdheSBQb3N0bWFzdGVyQ29u dGV4dCAoaW4gdGhlIE1haW4gZnVuY3Rpb24pLCBzYXZlCisJCSAqIHRoZSBzdGFydHVwIGRh dGEuCisJCSAqLworCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8oVG9wTWVtb3J5Q29udGV4dCk7 CisJCWlmIChzdGFydHVwX2RhdGEgIT0gTlVMTCkKKwkJeworCQkJY2hhcgkgICAqY3AgPSBw YWxsb2Moc3RhcnR1cF9kYXRhX2xlbik7CisKKwkJCW1lbWNweShjcCwgc3RhcnR1cF9kYXRh LCBzdGFydHVwX2RhdGFfbGVuKTsKKwkJCXN0YXJ0dXBfZGF0YSA9IGNwOworCQl9CisKKwkJ aWYgKGNsaWVudF9zb2NrKQorCQl7CisJCQlNeUNsaWVudFNvY2tldCA9IHBhbGxvYyhzaXpl b2YoQ2xpZW50U29ja2V0KSk7CisJCQltZW1jcHkoTXlDbGllbnRTb2NrZXQsIGNsaWVudF9z b2NrLCBzaXplb2YoQ2xpZW50U29ja2V0KSk7CisJCX0KKworCQllbnRyeV9raW5kc1tjaGls ZF90eXBlXS5tYWluX2ZuKHN0YXJ0dXBfZGF0YSwgc3RhcnR1cF9kYXRhX2xlbik7CisJCUFz c2VydChmYWxzZSk7CisJfQorI2VuZGlmCQkJCQkJCS8qIEVYRUNfQkFDS0VORCAqLworCXJl dHVybiBwaWQ7Cit9CisKKyNpZm5kZWYgV0lOMzIKKy8qCisgKiBXcmFwcGVyIGZvciBmb3Jr KCkuICBQZXJmb3JtcyBpbml0aWFsaXphdGlvbiBzdGVwcyB0aGF0IGFyZSB0aGUgc2FtZSBp bgorICogIUVYRUNfQkFDS0VORCBhbmQgRVhFQ19CQUNLRU5EIG1vZGVzLgorICoKKyAqIFJl dHVybiB2YWx1ZXMgYXJlIHRoZSBzYW1lIGFzIHRob3NlIGZvciBmb3JrKCk6IC0xIGlmIHRo ZSBmb3JrIGZhaWxlZCwgMCBpbgorICogdGhlIGNoaWxkIHByb2Nlc3MsIGFuZCB0aGUgUElE IG9mIHRoZSBjaGlsZCBpbiB0aGUgcGFyZW50IHByb2Nlc3MuICBTaWduYWxzCisgKiBhcmUg YmxvY2tlZCB3aGlsZSBmb3JraW5nLCBzbyB0aGUgY2hpbGQgbXVzdCB1bmJsb2NrLgorICov CitzdGF0aWMgcGlkX3QKK2ZvcmtfcHJvY2Vzcyh2b2lkKQoreworCXBpZF90CQlyZXN1bHQ7 CisJY29uc3QgY2hhciAqb29tZmlsZW5hbWU7CisJc2lnc2V0X3QJc2F2ZV9tYXNrOworCisj aWZkZWYgTElOVVhfUFJPRklMRQorCXN0cnVjdCBpdGltZXJ2YWwgcHJvZl9pdGltZXI7Cisj ZW5kaWYKKworCS8qCisJICogRmx1c2ggc3RkaW8gY2hhbm5lbHMganVzdCBiZWZvcmUgZm9y aywgdG8gYXZvaWQgZG91YmxlLW91dHB1dCBwcm9ibGVtcy4KKwkgKi8KKwlmZmx1c2goTlVM TCk7CisKKyNpZmRlZiBMSU5VWF9QUk9GSUxFCisKKwkvKgorCSAqIExpbnV4J3MgZm9yaygp IHJlc2V0cyB0aGUgcHJvZmlsaW5nIHRpbWVyIGluIHRoZSBjaGlsZCBwcm9jZXNzLiBJZiB3 ZQorCSAqIHdhbnQgdG8gcHJvZmlsZSBjaGlsZCBwcm9jZXNzZXMgdGhlbiB3ZSBuZWVkIHRv IHNhdmUgYW5kIHJlc3RvcmUgdGhlCisJICogdGltZXIgc2V0dGluZy4gIFRoaXMgaXMgYSB3 YXN0ZSBvZiB0aW1lIGlmIG5vdCBwcm9maWxpbmcsIGhvd2V2ZXIsIHNvCisJICogb25seSBk byBpdCBpZiBjb21tYW5kZWQgYnkgc3BlY2lmaWMgLURMSU5VWF9QUk9GSUxFIHN3aXRjaC4K KwkgKi8KKwlnZXRpdGltZXIoSVRJTUVSX1BST0YsICZwcm9mX2l0aW1lcik7CisjZW5kaWYK KworCS8qCisJICogV2Ugc3RhcnQgcG9zdG1hc3RlciBjaGlsZHJlbiB3aXRoIHNpZ25hbHMg YmxvY2tlZC4gIFRoaXMgYWxsb3dzIHRoZW0gdG8KKwkgKiBpbnN0YWxsIHRoZWlyIG93biBo YW5kbGVycyBiZWZvcmUgdW5ibG9ja2luZywgdG8gYXZvaWQgcmFjZXMgd2hlcmUgdGhleQor CSAqIG1pZ2h0IHJ1biB0aGUgcG9zdG1hc3RlcidzIGhhbmRsZXIgYW5kIG1pc3MgYW4gaW1w b3J0YW50IGNvbnRyb2wKKwkgKiBzaWduYWwuIFdpdGggbW9yZSBhbmFseXNpcyB0aGlzIGNv dWxkIHBvdGVudGlhbGx5IGJlIHJlbGF4ZWQuCisJICovCisJc2lncHJvY21hc2soU0lHX1NF VE1BU0ssICZCbG9ja1NpZywgJnNhdmVfbWFzayk7CisJcmVzdWx0ID0gZm9yaygpOworCWlm IChyZXN1bHQgPT0gMCkKKwl7CisJCS8qIGZvcmsgc3VjY2VlZGVkLCBpbiBjaGlsZCAqLwor I2lmZGVmIExJTlVYX1BST0ZJTEUKKwkJc2V0aXRpbWVyKElUSU1FUl9QUk9GLCAmcHJvZl9p dGltZXIsIE5VTEwpOworI2VuZGlmCisKKwkJLyoKKwkJICogQnkgZGVmYXVsdCwgTGludXgg dGVuZHMgdG8ga2lsbCB0aGUgcG9zdG1hc3RlciBpbiBvdXQtb2YtbWVtb3J5CisJCSAqIHNp dHVhdGlvbnMsIGJlY2F1c2UgaXQgYmxhbWVzIHRoZSBwb3N0bWFzdGVyIGZvciB0aGUgc3Vt IG9mIGNoaWxkCisJCSAqIHByb2Nlc3Mgc2l6ZXMgKmluY2x1ZGluZyBzaGFyZWQgbWVtb3J5 Ki4gIChUaGlzIGlzIHVuYmVsaWV2YWJseQorCQkgKiBzdHVwaWQsIGJ1dCB0aGUga2VybmVs IGhhY2tlcnMgc2VlbSB1bmludGVyZXN0ZWQgaW4gaW1wcm92aW5nIGl0LikKKwkJICogVGhl cmVmb3JlIGl0J3Mgb2Z0ZW4gYSBnb29kIGlkZWEgdG8gcHJvdGVjdCB0aGUgcG9zdG1hc3Rl ciBieQorCQkgKiBzZXR0aW5nIGl0cyBPT00gc2NvcmUgYWRqdXN0bWVudCBuZWdhdGl2ZSAo d2hpY2ggaGFzIHRvIGJlIGRvbmUgaW4KKwkJICogYSByb290LW93bmVkIHN0YXJ0dXAgc2Ny aXB0KS4gIFNpbmNlIHRoZSBhZGp1c3RtZW50IGlzIGluaGVyaXRlZCBieQorCQkgKiBjaGls ZCBwcm9jZXNzZXMsIHRoaXMgd291bGQgb3JkaW5hcmlseSBtZWFuIHRoYXQgYWxsIHRoZQor CQkgKiBwb3N0bWFzdGVyJ3MgY2hpbGRyZW4gYXJlIGVxdWFsbHkgcHJvdGVjdGVkIGFnYWlu c3QgT09NIGtpbGwsIHdoaWNoCisJCSAqIGlzIG5vdCBzdWNoIGEgZ29vZCBpZGVhLiAgU28g d2UgcHJvdmlkZSB0aGlzIGNvZGUgdG8gYWxsb3cgdGhlCisJCSAqIGNoaWxkcmVuIHRvIGNo YW5nZSB0aGVpciBPT00gc2NvcmUgYWRqdXN0bWVudHMgYWdhaW4uICBCb3RoIHRoZQorCQkg KiBmaWxlIG5hbWUgdG8gd3JpdGUgdG8gYW5kIHRoZSB2YWx1ZSB0byB3cml0ZSBhcmUgY29u dHJvbGxlZCBieQorCQkgKiBlbnZpcm9ubWVudCB2YXJpYWJsZXMsIHdoaWNoIGNhbiBiZSBz ZXQgYnkgdGhlIHNhbWUgc3RhcnR1cCBzY3JpcHQKKwkJICogdGhhdCBkaWQgdGhlIG9yaWdp bmFsIGFkanVzdG1lbnQuCisJCSAqLworCQlvb21maWxlbmFtZSA9IGdldGVudigiUEdfT09N X0FESlVTVF9GSUxFIik7CisKKwkJaWYgKG9vbWZpbGVuYW1lICE9IE5VTEwpCisJCXsKKwkJ CS8qCisJCQkgKiBVc2Ugb3BlbigpIG5vdCBzdGRpbywgdG8gZW5zdXJlIHdlIGNvbnRyb2wg dGhlIG9wZW4gZmxhZ3MuIFNvbWUKKwkJCSAqIExpbnV4IHNlY3VyaXR5IGVudmlyb25tZW50 cyByZWplY3QgYW55dGhpbmcgYnV0IE9fV1JPTkxZLgorCQkJICovCisJCQlpbnQJCQlmZCA9 IG9wZW4ob29tZmlsZW5hbWUsIE9fV1JPTkxZLCAwKTsKKworCQkJLyogV2UgaWdub3JlIGFs bCBlcnJvcnMgKi8KKwkJCWlmIChmZCA+PSAwKQorCQkJeworCQkJCWNvbnN0IGNoYXIgKm9v bXZhbHVlID0gZ2V0ZW52KCJQR19PT01fQURKVVNUX1ZBTFVFIik7CisJCQkJaW50CQkJcmM7 CisKKwkJCQlpZiAob29tdmFsdWUgPT0gTlVMTCkJLyogc3VwcGx5IGEgdXNlZnVsIGRlZmF1 bHQgKi8KKwkJCQkJb29tdmFsdWUgPSAiMCI7CisKKwkJCQlyYyA9IHdyaXRlKGZkLCBvb212 YWx1ZSwgc3RybGVuKG9vbXZhbHVlKSk7CisJCQkJKHZvaWQpIHJjOworCQkJCWNsb3NlKGZk KTsKKwkJCX0KKwkJfQorCisJCS8qIGRvIHBvc3QtZm9yayBpbml0aWFsaXphdGlvbiBmb3Ig cmFuZG9tIG51bWJlciBnZW5lcmF0aW9uICovCisJCXBnX3N0cm9uZ19yYW5kb21faW5pdCgp OworCX0KKwllbHNlCisJeworCQkvKiBpbiBwYXJlbnQsIHJlc3RvcmUgc2lnbmFsIG1hc2sg Ki8KKwkJc2lncHJvY21hc2soU0lHX1NFVE1BU0ssICZzYXZlX21hc2ssIE5VTEwpOworCX0K KworCXJldHVybiByZXN1bHQ7Cit9CisKKyNlbmRpZgkJCQkJCQkvKiAhV0lOMzIgKi8KKwor I2lmZGVmIEVYRUNfQkFDS0VORAorI2lmbmRlZiBXSU4zMgorCisvKgorICogaW50ZXJuYWxf Zm9ya2V4ZWMgbm9uLXdpbjMyIGltcGxlbWVudGF0aW9uCisgKgorICogLSB3cml0ZXMgb3V0 IGJhY2tlbmQgdmFyaWFibGVzIHRvIHRoZSBwYXJhbWV0ZXIgZmlsZQorICogLSBmb3JrKCk6 cywgYW5kIHRoZW4gZXhlYygpOnMgdGhlIGNoaWxkIHByb2Nlc3MKKyAqLworc3RhdGljIHBp ZF90CitpbnRlcm5hbF9mb3JrZXhlYyhjb25zdCBjaGFyICplbnRyeV9uYW1lLCBjaGFyICpz dGFydHVwX2RhdGEsIHNpemVfdCBzdGFydHVwX2RhdGFfbGVuLCBDbGllbnRTb2NrZXQgKmNs aWVudF9zb2NrKQoreworCXN0YXRpYyB1bnNpZ25lZCBsb25nIHRtcEJhY2tlbmRGaWxlTnVt ID0gMDsKKwlwaWRfdAkJcGlkOworCWNoYXIJCXRtcGZpbGVuYW1lW01BWFBHUEFUSF07CisJ c2l6ZV90CQlwYXJhbXN6OworCUJhY2tlbmRQYXJhbWV0ZXJzICpwYXJhbTsKKwlGSUxFCSAg ICpmcDsKKwljaGFyCSAgICphcmd2WzRdOworCWNoYXIJCWZvcmthdltNQVhQR1BBVEhdOwor CisJcGFyYW1zeiA9IFNpemVPZkJhY2tlbmRQYXJhbWV0ZXJzKHN0YXJ0dXBfZGF0YV9sZW4p OworCXBhcmFtID0gcGFsbG9jKHBhcmFtc3opOworCWlmICghc2F2ZV9iYWNrZW5kX3Zhcmlh YmxlcyhwYXJhbSwgY2xpZW50X3NvY2ssIHN0YXJ0dXBfZGF0YSwgc3RhcnR1cF9kYXRhX2xl bikpCisJeworCQlwZnJlZShwYXJhbSk7CisJCXJldHVybiAtMTsJCQkJLyogbG9nIG1hZGUg Ynkgc2F2ZV9iYWNrZW5kX3ZhcmlhYmxlcyAqLworCX0KKworCS8qIENhbGN1bGF0ZSBuYW1l IGZvciB0ZW1wIGZpbGUgKi8KKwlzbnByaW50Zih0bXBmaWxlbmFtZSwgTUFYUEdQQVRILCAi JXMvJXMuYmFja2VuZF92YXIuJWQuJWx1IiwKKwkJCSBQR19URU1QX0ZJTEVTX0RJUiwgUEdf VEVNUF9GSUxFX1BSRUZJWCwKKwkJCSBNeVByb2NQaWQsICsrdG1wQmFja2VuZEZpbGVOdW0p OworCisJLyogT3BlbiBmaWxlICovCisJZnAgPSBBbGxvY2F0ZUZpbGUodG1wZmlsZW5hbWUs IFBHX0JJTkFSWV9XKTsKKwlpZiAoIWZwKQorCXsKKwkJLyoKKwkJICogQXMgaW4gT3BlblRl bXBvcmFyeUZpbGVJblRhYmxlc3BhY2UsIHRyeSB0byBtYWtlIHRoZSB0ZW1wLWZpbGUKKwkJ ICogZGlyZWN0b3J5LCBpZ25vcmluZyBlcnJvcnMuCisJCSAqLworCQkodm9pZCkgTWFrZVBH RGlyZWN0b3J5KFBHX1RFTVBfRklMRVNfRElSKTsKKworCQlmcCA9IEFsbG9jYXRlRmlsZSh0 bXBmaWxlbmFtZSwgUEdfQklOQVJZX1cpOworCQlpZiAoIWZwKQorCQl7CisJCQllcmVwb3J0 KExPRywKKwkJCQkJKGVycmNvZGVfZm9yX2ZpbGVfYWNjZXNzKCksCisJCQkJCSBlcnJtc2co ImNvdWxkIG5vdCBjcmVhdGUgZmlsZSBcIiVzXCI6ICVtIiwKKwkJCQkJCQl0bXBmaWxlbmFt ZSkpKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCX0KKworCWlmIChmd3JpdGUocGFyYW0sIHBh cmFtc3osIDEsIGZwKSAhPSAxKQorCXsKKwkJZXJlcG9ydChMT0csCisJCQkJKGVycmNvZGVf Zm9yX2ZpbGVfYWNjZXNzKCksCisJCQkJIGVycm1zZygiY291bGQgbm90IHdyaXRlIHRvIGZp bGUgXCIlc1wiOiAlbSIsIHRtcGZpbGVuYW1lKSkpOworCQlGcmVlRmlsZShmcCk7CisJCXJl dHVybiAtMTsKKwl9CisKKwkvKiBSZWxlYXNlIGZpbGUgKi8KKwlpZiAoRnJlZUZpbGUoZnAp KQorCXsKKwkJZXJlcG9ydChMT0csCisJCQkJKGVycmNvZGVfZm9yX2ZpbGVfYWNjZXNzKCks CisJCQkJIGVycm1zZygiY291bGQgbm90IHdyaXRlIHRvIGZpbGUgXCIlc1wiOiAlbSIsIHRt cGZpbGVuYW1lKSkpOworCQlyZXR1cm4gLTE7CisJfQorCisJLyogc2V0IHVwIGFyZ3YgcHJv cGVybHkgKi8KKwlhcmd2WzBdID0gInBvc3RncmVzIjsKKwlzbnByaW50Zihmb3JrYXYsIE1B WFBHUEFUSCwgIi0tZm9ya2NoaWxkPSVzIiwgZW50cnlfbmFtZSk7CisJYXJndlsxXSA9IGZv cmthdjsKKwkvKiBJbnNlcnQgdGVtcCBmaWxlIG5hbWUgYWZ0ZXIgLS1mb3JrY2hpbGQgYXJn dW1lbnQgKi8KKwlhcmd2WzJdID0gdG1wZmlsZW5hbWU7CisJYXJndlszXSA9IE5VTEw7CisK KwkvKiBGaXJlIG9mZiBleGVjdiBpbiBjaGlsZCAqLworCWlmICgocGlkID0gZm9ya19wcm9j ZXNzKCkpID09IDApCisJeworCQlpZiAoZXhlY3YocG9zdGdyZXNfZXhlY19wYXRoLCBhcmd2 KSA8IDApCisJCXsKKwkJCWVyZXBvcnQoTE9HLAorCQkJCQkoZXJybXNnKCJjb3VsZCBub3Qg ZXhlY3V0ZSBzZXJ2ZXIgcHJvY2VzcyBcIiVzXCI6ICVtIiwKKwkJCQkJCQlwb3N0Z3Jlc19l eGVjX3BhdGgpKSk7CisJCQkvKiBXZSdyZSBhbHJlYWR5IGluIHRoZSBjaGlsZCBwcm9jZXNz IGhlcmUsIGNhbid0IHJldHVybiAqLworCQkJZXhpdCgxKTsKKwkJfQorCX0KKworCXJldHVy biBwaWQ7CQkJCQkvKiBQYXJlbnQgcmV0dXJucyBwaWQsIG9yIC0xIG9uIGZvcmsgZmFpbHVy ZSAqLworfQorI2Vsc2UJCQkJCQkJLyogV0lOMzIgKi8KKworLyoKKyAqIGludGVybmFsX2Zv cmtleGVjIHdpbjMyIGltcGxlbWVudGF0aW9uCisgKgorICogLSBzdGFydHMgYmFja2VuZCB1 c2luZyBDcmVhdGVQcm9jZXNzKCksIGluIHN1c3BlbmRlZCBzdGF0ZQorICogLSB3cml0ZXMg b3V0IGJhY2tlbmQgdmFyaWFibGVzIHRvIHRoZSBwYXJhbWV0ZXIgZmlsZQorICoJLSBkdXJp bmcgdGhpcywgZHVwbGljYXRlcyBoYW5kbGVzIGFuZCBzb2NrZXRzIHJlcXVpcmVkIGZvcgor ICoJICBpbmhlcml0YW5jZSBpbnRvIHRoZSBuZXcgcHJvY2VzcworICogLSByZXN1bWVzIGV4 ZWN1dGlvbiBvZiB0aGUgbmV3IHByb2Nlc3Mgb25jZSB0aGUgYmFja2VuZCBwYXJhbWV0ZXIK KyAqCSBmaWxlIGlzIGNvbXBsZXRlLgorICovCitzdGF0aWMgcGlkX3QKK2ludGVybmFsX2Zv cmtleGVjKGNvbnN0IGNoYXIgKmVudHJ5X25hbWUsIGNoYXIgKnN0YXJ0dXBfZGF0YSwgc2l6 ZV90IHN0YXJ0dXBfZGF0YV9sZW4sIENsaWVudFNvY2tldCAqY2xpZW50X3NvY2spCit7CisJ aW50CQkJcmV0cnlfY291bnQgPSAwOworCVNUQVJUVVBJTkZPIHNpOworCVBST0NFU1NfSU5G T1JNQVRJT04gcGk7CisJY2hhcgkJY21kTGluZVtNQVhQR1BBVEggKiAyXTsKKwlIQU5ETEUJ CXBhcmFtSGFuZGxlOworCUJhY2tlbmRQYXJhbWV0ZXJzICpwYXJhbTsKKwlTRUNVUklUWV9B VFRSSUJVVEVTIHNhOworCXNpemVfdAkJcGFyYW1zejsKKwljaGFyCQlwYXJhbUhhbmRsZVN0 clszMl07CisJaW50CQkJbDsKKworCXBhcmFtc3ogPSBTaXplT2ZCYWNrZW5kUGFyYW1ldGVy cyhzdGFydHVwX2RhdGFfbGVuKTsKKworCS8qIFJlc3VtZSBoZXJlIGlmIHdlIG5lZWQgdG8g cmV0cnkgKi8KK3JldHJ5OgorCisJLyogU2V0IHVwIHNoYXJlZCBtZW1vcnkgZm9yIHBhcmFt ZXRlciBwYXNzaW5nICovCisJWmVyb01lbW9yeSgmc2EsIHNpemVvZihzYSkpOworCXNhLm5M ZW5ndGggPSBzaXplb2Yoc2EpOworCXNhLmJJbmhlcml0SGFuZGxlID0gVFJVRTsKKwlwYXJh bUhhbmRsZSA9IENyZWF0ZUZpbGVNYXBwaW5nKElOVkFMSURfSEFORExFX1ZBTFVFLAorCQkJ CQkJCQkJJnNhLAorCQkJCQkJCQkJUEFHRV9SRUFEV1JJVEUsCisJCQkJCQkJCQkwLAorCQkJ CQkJCQkJcGFyYW1zeiwKKwkJCQkJCQkJCU5VTEwpOworCWlmIChwYXJhbUhhbmRsZSA9PSBJ TlZBTElEX0hBTkRMRV9WQUxVRSkKKwl7CisJCWVyZXBvcnQoTE9HLAorCQkJCShlcnJtc2co ImNvdWxkIG5vdCBjcmVhdGUgYmFja2VuZCBwYXJhbWV0ZXIgZmlsZSBtYXBwaW5nOiBlcnJv ciBjb2RlICVsdSIsCisJCQkJCQlHZXRMYXN0RXJyb3IoKSkpKTsKKwkJcmV0dXJuIC0xOwor CX0KKwlwYXJhbSA9IE1hcFZpZXdPZkZpbGUocGFyYW1IYW5kbGUsIEZJTEVfTUFQX1dSSVRF LCAwLCAwLCBwYXJhbXN6KTsKKwlpZiAoIXBhcmFtKQorCXsKKwkJZXJlcG9ydChMT0csCisJ CQkJKGVycm1zZygiY291bGQgbm90IG1hcCBiYWNrZW5kIHBhcmFtZXRlciBtZW1vcnk6IGVy cm9yIGNvZGUgJWx1IiwKKwkJCQkJCUdldExhc3RFcnJvcigpKSkpOworCQlDbG9zZUhhbmRs ZShwYXJhbUhhbmRsZSk7CisJCXJldHVybiAtMTsKKwl9CisKKwkvKiBGb3JtYXQgdGhlIGNt ZCBsaW5lICovCisjaWZkZWYgX1dJTjY0CisJc3ByaW50ZihwYXJhbUhhbmRsZVN0ciwgIiVs bHUiLCAoTE9OR19QVFIpIHBhcmFtSGFuZGxlKTsKKyNlbHNlCisJc3ByaW50ZihwYXJhbUhh bmRsZVN0ciwgIiVsdSIsIChEV09SRCkgcGFyYW1IYW5kbGUpOworI2VuZGlmCisJbCA9IHNu cHJpbnRmKGNtZExpbmUsIHNpemVvZihjbWRMaW5lKSAtIDEsICJcIiVzXCIgLS1mb3JrY2hp bGQ9XCIlc1wiICVzIiwKKwkJCQkgcG9zdGdyZXNfZXhlY19wYXRoLCBlbnRyeV9uYW1lLCBw YXJhbUhhbmRsZVN0cik7CisJaWYgKGwgPj0gc2l6ZW9mKGNtZExpbmUpKQorCXsKKwkJZXJl cG9ydChMT0csCisJCQkJKGVycm1zZygic3VicHJvY2VzcyBjb21tYW5kIGxpbmUgdG9vIGxv bmciKSkpOworCQlVbm1hcFZpZXdPZkZpbGUocGFyYW0pOworCQlDbG9zZUhhbmRsZShwYXJh bUhhbmRsZSk7CisJCXJldHVybiAtMTsKKwl9CisKKwltZW1zZXQoJnBpLCAwLCBzaXplb2Yo cGkpKTsKKwltZW1zZXQoJnNpLCAwLCBzaXplb2Yoc2kpKTsKKwlzaS5jYiA9IHNpemVvZihz aSk7CisKKwkvKgorCSAqIENyZWF0ZSB0aGUgc3VicHJvY2VzcyBpbiBhIHN1c3BlbmRlZCBz dGF0ZS4gVGhpcyB3aWxsIGJlIHJlc3VtZWQgbGF0ZXIsCisJICogb25jZSB3ZSBoYXZlIHdy aXR0ZW4gb3V0IHRoZSBwYXJhbWV0ZXIgZmlsZS4KKwkgKi8KKwlpZiAoIUNyZWF0ZVByb2Nl c3MoTlVMTCwgY21kTGluZSwgTlVMTCwgTlVMTCwgVFJVRSwgQ1JFQVRFX1NVU1BFTkRFRCwK KwkJCQkJICAgTlVMTCwgTlVMTCwgJnNpLCAmcGkpKQorCXsKKwkJZXJlcG9ydChMT0csCisJ CQkJKGVycm1zZygiQ3JlYXRlUHJvY2VzcygpIGNhbGwgZmFpbGVkOiAlbSAoZXJyb3IgY29k ZSAlbHUpIiwKKwkJCQkJCUdldExhc3RFcnJvcigpKSkpOworCQlVbm1hcFZpZXdPZkZpbGUo cGFyYW0pOworCQlDbG9zZUhhbmRsZShwYXJhbUhhbmRsZSk7CisJCXJldHVybiAtMTsKKwl9 CisKKwlpZiAoIXNhdmVfYmFja2VuZF92YXJpYWJsZXMocGFyYW0sIGNsaWVudF9zb2NrLCBw aS5oUHJvY2VzcywgcGkuZHdQcm9jZXNzSWQsIHN0YXJ0dXBfZGF0YSwgc3RhcnR1cF9kYXRh X2xlbikpCisJeworCQkvKgorCQkgKiBsb2cgbWFkZSBieSBzYXZlX2JhY2tlbmRfdmFyaWFi bGVzLCBidXQgd2UgaGF2ZSB0byBjbGVhbiB1cCB0aGUKKwkJICogbWVzcyB3aXRoIHRoZSBo YWxmLXN0YXJ0ZWQgcHJvY2VzcworCQkgKi8KKwkJaWYgKCFUZXJtaW5hdGVQcm9jZXNzKHBp LmhQcm9jZXNzLCAyNTUpKQorCQkJZXJlcG9ydChMT0csCisJCQkJCShlcnJtc2dfaW50ZXJu YWwoImNvdWxkIG5vdCB0ZXJtaW5hdGUgdW5zdGFydGVkIHByb2Nlc3M6IGVycm9yIGNvZGUg JWx1IiwKKwkJCQkJCQkJCSBHZXRMYXN0RXJyb3IoKSkpKTsKKwkJQ2xvc2VIYW5kbGUocGku aFByb2Nlc3MpOworCQlDbG9zZUhhbmRsZShwaS5oVGhyZWFkKTsKKwkJVW5tYXBWaWV3T2ZG aWxlKHBhcmFtKTsKKwkJQ2xvc2VIYW5kbGUocGFyYW1IYW5kbGUpOworCQlyZXR1cm4gLTE7 CQkJCS8qIGxvZyBtYWRlIGJ5IHNhdmVfYmFja2VuZF92YXJpYWJsZXMgKi8KKwl9CisKKwkv KiBEcm9wIHRoZSBwYXJhbWV0ZXIgc2hhcmVkIG1lbW9yeSB0aGF0IGlzIG5vdyBpbmhlcml0 ZWQgdG8gdGhlIGJhY2tlbmQgKi8KKwlpZiAoIVVubWFwVmlld09mRmlsZShwYXJhbSkpCisJ CWVyZXBvcnQoTE9HLAorCQkJCShlcnJtc2coImNvdWxkIG5vdCB1bm1hcCB2aWV3IG9mIGJh Y2tlbmQgcGFyYW1ldGVyIGZpbGU6IGVycm9yIGNvZGUgJWx1IiwKKwkJCQkJCUdldExhc3RF cnJvcigpKSkpOworCWlmICghQ2xvc2VIYW5kbGUocGFyYW1IYW5kbGUpKQorCQllcmVwb3J0 KExPRywKKwkJCQkoZXJybXNnKCJjb3VsZCBub3QgY2xvc2UgaGFuZGxlIHRvIGJhY2tlbmQg cGFyYW1ldGVyIGZpbGU6IGVycm9yIGNvZGUgJWx1IiwKKwkJCQkJCUdldExhc3RFcnJvcigp KSkpOworCisJLyoKKwkgKiBSZXNlcnZlIHRoZSBtZW1vcnkgcmVnaW9uIHVzZWQgYnkgb3Vy IG1haW4gc2hhcmVkIG1lbW9yeSBzZWdtZW50IGJlZm9yZQorCSAqIHdlIHJlc3VtZSB0aGUg Y2hpbGQgcHJvY2Vzcy4gIE5vcm1hbGx5IHRoaXMgc2hvdWxkIHN1Y2NlZWQsIGJ1dCBpZiBB U0xSCisJICogaXMgYWN0aXZlIHRoZW4gaXQgbWlnaHQgc29tZXRpbWVzIGZhaWwgZHVlIHRv IHRoZSBzdGFjayBvciBoZWFwIGhhdmluZworCSAqIGdvdHRlbiBtYXBwZWQgaW50byB0aGF0 IHJhbmdlLiAgSW4gdGhhdCBjYXNlLCBqdXN0IHRlcm1pbmF0ZSB0aGUKKwkgKiBwcm9jZXNz IGFuZCByZXRyeS4KKwkgKi8KKwlpZiAoIXBnd2luMzJfUmVzZXJ2ZVNoYXJlZE1lbW9yeVJl Z2lvbihwaS5oUHJvY2VzcykpCisJeworCQkvKiBwZ3dpbjMyX1Jlc2VydmVTaGFyZWRNZW1v cnlSZWdpb24gYWxyZWFkeSBtYWRlIGEgbG9nIGVudHJ5ICovCisJCWlmICghVGVybWluYXRl UHJvY2VzcyhwaS5oUHJvY2VzcywgMjU1KSkKKwkJCWVyZXBvcnQoTE9HLAorCQkJCQkoZXJy bXNnX2ludGVybmFsKCJjb3VsZCBub3QgdGVybWluYXRlIHByb2Nlc3MgdGhhdCBmYWlsZWQg dG8gcmVzZXJ2ZSBtZW1vcnk6IGVycm9yIGNvZGUgJWx1IiwKKwkJCQkJCQkJCSBHZXRMYXN0 RXJyb3IoKSkpKTsKKwkJQ2xvc2VIYW5kbGUocGkuaFByb2Nlc3MpOworCQlDbG9zZUhhbmRs ZShwaS5oVGhyZWFkKTsKKwkJaWYgKCsrcmV0cnlfY291bnQgPCAxMDApCisJCQlnb3RvIHJl dHJ5OworCQllcmVwb3J0KExPRywKKwkJCQkoZXJybXNnKCJnaXZpbmcgdXAgYWZ0ZXIgdG9v IG1hbnkgdHJpZXMgdG8gcmVzZXJ2ZSBzaGFyZWQgbWVtb3J5IiksCisJCQkJIGVycmhpbnQo IlRoaXMgbWlnaHQgYmUgY2F1c2VkIGJ5IEFTTFIgb3IgYW50aXZpcnVzIHNvZnR3YXJlLiIp KSk7CisJCXJldHVybiAtMTsKKwl9CisKKwkvKgorCSAqIE5vdyB0aGF0IHRoZSBiYWNrZW5k IHZhcmlhYmxlcyBhcmUgd3JpdHRlbiBvdXQsIHdlIHN0YXJ0IHRoZSBjaGlsZAorCSAqIHRo cmVhZCBzbyBpdCBjYW4gc3RhcnQgaW5pdGlhbGl6aW5nIHdoaWxlIHdlIHNldCB1cCB0aGUg cmVzdCBvZiB0aGUKKwkgKiBwYXJlbnQgc3RhdGUuCisJICovCisJaWYgKFJlc3VtZVRocmVh ZChwaS5oVGhyZWFkKSA9PSAtMSkKKwl7CisJCWlmICghVGVybWluYXRlUHJvY2VzcyhwaS5o UHJvY2VzcywgMjU1KSkKKwkJeworCQkJZXJlcG9ydChMT0csCisJCQkJCShlcnJtc2dfaW50 ZXJuYWwoImNvdWxkIG5vdCB0ZXJtaW5hdGUgdW5zdGFydGFibGUgcHJvY2VzczogZXJyb3Ig Y29kZSAlbHUiLAorCQkJCQkJCQkJIEdldExhc3RFcnJvcigpKSkpOworCQkJQ2xvc2VIYW5k bGUocGkuaFByb2Nlc3MpOworCQkJQ2xvc2VIYW5kbGUocGkuaFRocmVhZCk7CisJCQlyZXR1 cm4gLTE7CisJCX0KKwkJQ2xvc2VIYW5kbGUocGkuaFByb2Nlc3MpOworCQlDbG9zZUhhbmRs ZShwaS5oVGhyZWFkKTsKKwkJZXJlcG9ydChMT0csCisJCQkJKGVycm1zZ19pbnRlcm5hbCgi Y291bGQgbm90IHJlc3VtZSB0aHJlYWQgb2YgdW5zdGFydGVkIHByb2Nlc3M6IGVycm9yIGNv ZGUgJWx1IiwKKwkJCQkJCQkJIEdldExhc3RFcnJvcigpKSkpOworCQlyZXR1cm4gLTE7CisJ fQorCisJcGd3aW4zMl9yZWdpc3Rlcl9kZWFkY2hpbGRfY2FsbGJhY2socGkuaFByb2Nlc3Ms IHBpLmR3UHJvY2Vzc0lkKTsKKworCS8qIERvbid0IGNsb3NlIHBpLmhQcm9jZXNzIGhlcmUg LSB3YWl0cGlkKCkgbmVlZHMgYWNjZXNzIHRvIGl0ICovCisJQ2xvc2VIYW5kbGUocGkuaFRo cmVhZCk7CisKKwlyZXR1cm4gcGkuZHdQcm9jZXNzSWQ7Cit9CisjZW5kaWYJCQkJCQkJLyog V0lOMzIgKi8KKworLyoKKyAqIFN1YlBvc3RtYXN0ZXJNYWluIC0tIEdldCB0aGUgZm9yay9l eGVjJ2QgcHJvY2VzcyBpbnRvIGEgc3RhdGUgZXF1aXZhbGVudAorICoJCQl0byB3aGF0IGl0 IHdvdWxkIGJlIGlmIHdlJ2Qgc2ltcGx5IGZvcmtlZCBvbiBVbml4LCBhbmQgdGhlbgorICoJ CQlkaXNwYXRjaCB0byB0aGUgYXBwcm9wcmlhdGUgcGxhY2UuCisgKgorICogVGhlIGZpcnN0 IHR3byBjb21tYW5kIGxpbmUgYXJndW1lbnRzIGFyZSBleHBlY3RlZCB0byBiZSAiLS1mb3Jr Y2hpbGQ9PG5hbWU+IiwKKyAqIHdoZXJlIDxuYW1lPiBpbmRpY2F0ZXMgd2hpY2ggcG9zdG1h c3RlciBjaGlsZCB3ZSBhcmUgdG8gYmVjb21lLCBhbmQKKyAqIHRoZSBuYW1lIG9mIGEgdmFy aWFibGVzIGZpbGUgdGhhdCB3ZSBjYW4gcmVhZCB0byBsb2FkIGRhdGEgdGhhdCB3b3VsZAor ICogaGF2ZSBiZWVuIGluaGVyaXRlZCBieSBmb3JrKCkgb24gVW5peC4KKyAqLwordm9pZAor U3ViUG9zdG1hc3Rlck1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwlQb3N0bWFz dGVyQ2hpbGRUeXBlIGNoaWxkX3R5cGU7CisJY2hhcgkgICAqc3RhcnR1cF9kYXRhOworCXNp emVfdAkJc3RhcnR1cF9kYXRhX2xlbjsKKwljaGFyCSAgICplbnRyeV9uYW1lOworCWJvb2wJ CWZvdW5kID0gZmFsc2U7CisKKwkvKiBJbiBFWEVDX0JBQ0tFTkQgY2FzZSB3ZSB3aWxsIG5v dCBoYXZlIGluaGVyaXRlZCB0aGVzZSBzZXR0aW5ncyAqLworCUlzUG9zdG1hc3RlckVudmly b25tZW50ID0gdHJ1ZTsKKwl3aGVyZVRvU2VuZE91dHB1dCA9IERlc3ROb25lOworCisJLyog U2V0dXAgZXNzZW50aWFsIHN1YnN5c3RlbXMgKHRvIGVuc3VyZSBlbG9nKCkgYmVoYXZlcyBz YW5lbHkpICovCisJSW5pdGlhbGl6ZUdVQ09wdGlvbnMoKTsKKworCS8qIENoZWNrIHdlIGdv dCBhcHByb3ByaWF0ZSBhcmdzICovCisJaWYgKGFyZ2MgIT0gMykKKwkJZWxvZyhGQVRBTCwg ImludmFsaWQgc3VicG9zdG1hc3RlciBpbnZvY2F0aW9uIik7CisKKwlpZiAoc3RybmNtcChh cmd2WzFdLCAiLS1mb3JrY2hpbGQ9IiwgMTIpICE9IDApCisJCWVsb2coRkFUQUwsICJpbnZh bGlkIHN1YnBvc3RtYXN0ZXIgaW52b2NhdGlvbiAoLS1mb3JrY2hpbGQgYXJndW1lbnQgbWlz c2luZykiKTsKKwllbnRyeV9uYW1lID0gYXJndlsxXSArIDEyOworCWZvdW5kID0gZmFsc2U7 CisJZm9yIChpbnQgaWR4ID0gMDsgaWR4IDwgbGVuZ3Rob2YoZW50cnlfa2luZHMpOyBpZHgr KykKKwl7CisJCWlmIChzdHJjbXAoZW50cnlfa2luZHNbaWR4XS5uYW1lLCBlbnRyeV9uYW1l KSA9PSAwKQorCQl7CisJCQljaGlsZF90eXBlID0gaWR4OworCQkJZm91bmQgPSB0cnVlOwor CQkJYnJlYWs7CisJCX0KKwl9CisJaWYgKCFmb3VuZCkKKwkJZWxvZyhFUlJPUiwgInVua25v d24gY2hpbGQga2luZCAlcyIsIGVudHJ5X25hbWUpOworCisJLyogUmVhZCBpbiB0aGUgdmFy aWFibGVzIGZpbGUgKi8KKwlyZWFkX2JhY2tlbmRfdmFyaWFibGVzKGFyZ3ZbMl0sICZzdGFy dHVwX2RhdGEsICZzdGFydHVwX2RhdGFfbGVuKTsKKworCS8qIFNldHVwIGFzIHBvc3RtYXN0 ZXIgY2hpbGQgKi8KKwlJbml0UG9zdG1hc3RlckNoaWxkKGNoaWxkX3R5cGUgPT0gUE1DX1NZ U0xPR0dFUik7CisKKwkvKgorCSAqIElmIGFwcHJvcHJpYXRlLCBwaHlzaWNhbGx5IHJlLWF0 dGFjaCB0byBzaGFyZWQgbWVtb3J5IHNlZ21lbnQuIFdlIHdhbnQKKwkgKiB0byBkbyB0aGlz IGJlZm9yZSBnb2luZyBhbnkgZnVydGhlciB0byBlbnN1cmUgdGhhdCB3ZSBjYW4gYXR0YWNo IGF0IHRoZQorCSAqIHNhbWUgYWRkcmVzcyB0aGUgcG9zdG1hc3RlciB1c2VkLiAgT24gdGhl IG90aGVyIGhhbmQsIGlmIHdlIGNob29zZSBub3QKKwkgKiB0byByZS1hdHRhY2gsIHdlIG1h eSBoYXZlIG90aGVyIGNsZWFudXAgdG8gZG8uCisJICoKKwkgKiBJZiB0ZXN0aW5nIEVYRUNf QkFDS0VORCBvbiBMaW51eCwgeW91IHNob3VsZCBydW4gdGhpcyBhcyByb290IGJlZm9yZQor CSAqIHN0YXJ0aW5nIHRoZSBwb3N0bWFzdGVyOgorCSAqCisJICogc3lzY3RsIC13IGtlcm5l bC5yYW5kb21pemVfdmFfc3BhY2U9MAorCSAqCisJICogVGhpcyBwcmV2ZW50cyB1c2luZyBy YW5kb21pemVkIHN0YWNrIGFuZCBjb2RlIGFkZHJlc3NlcyB0aGF0IGNhdXNlIHRoZQorCSAq IGNoaWxkIHByb2Nlc3MncyBtZW1vcnkgbWFwIHRvIGJlIGRpZmZlcmVudCBmcm9tIHRoZSBw YXJlbnQncywgbWFraW5nIGl0CisJICogc29tZXRpbWVzIGltcG9zc2libGUgdG8gYXR0YWNo IHRvIHNoYXJlZCBtZW1vcnkgYXQgdGhlIGRlc2lyZWQgYWRkcmVzcy4KKwkgKiBSZXR1cm4g dGhlIHNldHRpbmcgdG8gaXRzIG9sZCB2YWx1ZSAodXN1YWxseSAnMScgb3IgJzInKSB3aGVu IGZpbmlzaGVkLgorCSAqLworCWlmIChlbnRyeV9raW5kc1tjaGlsZF90eXBlXS5zaG1lbV9h dHRhY2gpCisJCVBHU2hhcmVkTWVtb3J5UmVBdHRhY2goKTsKKwllbHNlCisJCVBHU2hhcmVk TWVtb3J5Tm9SZUF0dGFjaCgpOworCisJLyogUmVhZCBpbiByZW1haW5pbmcgR1VDIHZhcmlh YmxlcyAqLworCXJlYWRfbm9uZGVmYXVsdF92YXJpYWJsZXMoKTsKKworCS8qCisJICogQ2hl Y2sgdGhhdCB0aGUgZGF0YSBkaXJlY3RvcnkgbG9va3MgdmFsaWQsIHdoaWNoIHdpbGwgYWxz byBjaGVjayB0aGUKKwkgKiBwcml2aWxlZ2VzIG9uIHRoZSBkYXRhIGRpcmVjdG9yeSBhbmQg dXBkYXRlIG91ciB1bWFzayBhbmQgZmlsZS9ncm91cAorCSAqIHZhcmlhYmxlcyBmb3IgY3Jl YXRpbmcgZmlsZXMgbGF0ZXIuICBOb3RlOiB0aGlzIHNob3VsZCByZWFsbHkgYmUgZG9uZQor CSAqIGJlZm9yZSB3ZSBjcmVhdGUgYW55IGZpbGVzIG9yIGRpcmVjdG9yaWVzLgorCSAqLwor CWNoZWNrRGF0YURpcigpOworCisJLyoKKwkgKiAocmUtKXJlYWQgY29udHJvbCBmaWxlLCBh cyBpdCBjb250YWlucyBjb25maWcuIFRoZSBwb3N0bWFzdGVyIHdpbGwKKwkgKiBhbHJlYWR5 IGhhdmUgcmVhZCB0aGlzLCBidXQgdGhpcyBwcm9jZXNzIGRvZXNuJ3Qga25vdyBhYm91dCB0 aGF0LgorCSAqLworCUxvY2FsUHJvY2Vzc0NvbnRyb2xGaWxlKGZhbHNlKTsKKworCS8qCisJ ICogUmVsb2FkIGFueSBsaWJyYXJpZXMgdGhhdCB3ZXJlIHByZWxvYWRlZCBieSB0aGUgcG9z dG1hc3Rlci4gIFNpbmNlIHdlCisJICogZXhlYydkIHRoaXMgcHJvY2VzcywgdGhvc2UgbGli cmFyaWVzIGRpZG4ndCBjb21lIGFsb25nIHdpdGggdXM7IGJ1dCB3ZQorCSAqIHNob3VsZCBs b2FkIHRoZW0gaW50byBhbGwgY2hpbGQgcHJvY2Vzc2VzIHRvIGJlIGNvbnNpc3RlbnQgd2l0 aCB0aGUKKwkgKiBub24tRVhFQ19CQUNLRU5EIGJlaGF2aW9yLgorCSAqLworCXByb2Nlc3Nf c2hhcmVkX3ByZWxvYWRfbGlicmFyaWVzKCk7CisKKwkvKiBSZXN0b3JlIGJhc2ljIHNoYXJl ZCBtZW1vcnkgcG9pbnRlcnMgKi8KKwlpZiAoVXNlZFNobWVtU2VnQWRkciAhPSBOVUxMKQor CQlJbml0U2htZW1BY2Nlc3MoVXNlZFNobWVtU2VnQWRkcik7CisKKwkvKiBSdW4gYmFja2Vu ZCBvciBhcHByb3ByaWF0ZSBjaGlsZCAqLworCWVudHJ5X2tpbmRzW2NoaWxkX3R5cGVdLm1h aW5fZm4oc3RhcnR1cF9kYXRhLCBzdGFydHVwX2RhdGFfbGVuKTsKKworCWFib3J0KCk7CQkJ CQkvKiBzaG91bGRuJ3QgZ2V0IGhlcmUgKi8KK30KKyNlbmRpZgkJCQkJCQkvKiBFWEVDX0JB Q0tFTkQgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoJY29tbW9uIHByb2Nlc3Mgc3RhcnR1cCBj b2RlCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworLyoKKyAqIEluaXRpYWxpemUgdGhlIGJhc2lj IGVudmlyb25tZW50IGZvciBhIHBvc3RtYXN0ZXIgY2hpbGQKKyAqCisgKiBTaG91bGQgYmUg Y2FsbGVkIGFzIGVhcmx5IGFzIHBvc3NpYmxlIGFmdGVyIHRoZSBjaGlsZCdzIHN0YXJ0dXAu IEhvd2V2ZXIsCisgKiBvbiBFWEVDX0JBQ0tFTkQgYnVpbGRzIGl0IGRvZXMgbmVlZCB0byBi ZSBhZnRlciByZWFkX2JhY2tlbmRfdmFyaWFibGVzKCkuCisgKi8KK3N0YXRpYyB2b2lkCitJ bml0UG9zdG1hc3RlckNoaWxkKGJvb2wgYW1fc3lzbG9nZ2VyKQoreworCS8qIENsb3NlIHRo ZSBwb3N0bWFzdGVyJ3Mgc29ja2V0cyAoYXMgc29vbiBhcyB3ZSBrbm93IHRoZW0pICovCisJ Q2xvc2VQb3N0bWFzdGVyUG9ydHMoYW1fc3lzbG9nZ2VyKTsKKworCUlzVW5kZXJQb3N0bWFz dGVyID0gdHJ1ZTsJLyogd2UgYXJlIGEgcG9zdG1hc3RlciBzdWJwcm9jZXNzIG5vdyAqLwor CisJLyoKKwkgKiBTdGFydCBvdXIgd2luMzIgc2lnbmFsIGltcGxlbWVudGF0aW9uLiBUaGlz IGhhcyB0byBiZSBkb25lIGFmdGVyIHdlCisJICogcmVhZCB0aGUgYmFja2VuZCB2YXJpYWJs ZXMsIGJlY2F1c2Ugd2UgbmVlZCB0byBwaWNrIHVwIHRoZSBzaWduYWwgcGlwZQorCSAqIGZy b20gdGhlIHBhcmVudCBwcm9jZXNzLgorCSAqLworI2lmZGVmIFdJTjMyCisJcGd3aW4zMl9z aWduYWxfaW5pdGlhbGl6ZSgpOworI2VuZGlmCisKKwkvKgorCSAqIFNldCByZWZlcmVuY2Ug cG9pbnQgZm9yIHN0YWNrLWRlcHRoIGNoZWNraW5nLiAgVGhpcyBtaWdodCBzZWVtCisJICog cmVkdW5kYW50IGluICFFWEVDX0JBQ0tFTkQgYnVpbGRzOyBidXQgaXQncyBub3QgYmVjYXVz ZSB0aGUgcG9zdG1hc3RlcgorCSAqIGxhdW5jaGVzIGl0cyBjaGlsZHJlbiBmcm9tIHNpZ25h bCBoYW5kbGVycywgc28gd2UgbWlnaHQgYmUgcnVubmluZyBvbgorCSAqIGFuIGFsdGVybmF0 aXZlIHN0YWNrLiBYWFggc3RpbGwgdHJ1ZT8KKwkgKi8KKwkodm9pZCkgc2V0X3N0YWNrX2Jh c2UoKTsKKworCUluaXRQcm9jZXNzR2xvYmFscygpOworCisJLyoKKwkgKiBtYWtlIHN1cmUg c3RkZXJyIGlzIGluIGJpbmFyeSBtb2RlIGJlZm9yZSBhbnl0aGluZyBjYW4gcG9zc2libHkg YmUKKwkgKiB3cml0dGVuIHRvIGl0LCBpbiBjYXNlIGl0J3MgYWN0dWFsbHkgdGhlIHN5c2xv Z2dlciBwaXBlLCBzbyB0aGUgcGlwZQorCSAqIGNodW5raW5nIHByb3RvY29sIGlzbid0IGRp c3R1cmJlZC4gTm9uLWxvZ3BpcGUgZGF0YSBnZXRzIHRyYW5zbGF0ZWQgb24KKwkgKiByZWRp cmVjdGlvbiAoZS5nLiB2aWEgcGdfY3RsIC1sKSBhbnl3YXkuCisJICovCisjaWZkZWYgV0lO MzIKKwlfc2V0bW9kZShmaWxlbm8oc3RkZXJyKSwgX09fQklOQVJZKTsKKyNlbmRpZgorCisJ LyogV2UgZG9uJ3Qgd2FudCB0aGUgcG9zdG1hc3RlcidzIHByb2NfZXhpdCgpIGhhbmRsZXJz ICovCisJb25fZXhpdF9yZXNldCgpOworCisJLyogSW4gRVhFQ19CQUNLRU5EIGNhc2Ugd2Ug d2lsbCBub3QgaGF2ZSBpbmhlcml0ZWQgQmxvY2tTaWcgZXRjIHZhbHVlcyAqLworI2lmZGVm IEVYRUNfQkFDS0VORAorCXBxaW5pdG1hc2soKTsKKyNlbmRpZgorCisJLyogSW5pdGlhbGl6 ZSBwcm9jZXNzLWxvY2FsIGxhdGNoIHN1cHBvcnQgKi8KKwlJbml0aWFsaXplTGF0Y2hTdXBw b3J0KCk7CisJSW5pdFByb2Nlc3NMb2NhbExhdGNoKCk7CisJSW5pdGlhbGl6ZUxhdGNoV2Fp dFNldCgpOworCisJLyoKKwkgKiBJZiBwb3NzaWJsZSwgbWFrZSB0aGlzIHByb2Nlc3MgYSBn cm91cCBsZWFkZXIsIHNvIHRoYXQgdGhlIHBvc3RtYXN0ZXIKKwkgKiBjYW4gc2lnbmFsIGFu eSBjaGlsZCBwcm9jZXNzZXMgdG9vLiBOb3QgYWxsIHByb2Nlc3NlcyB3aWxsIGhhdmUKKwkg KiBjaGlsZHJlbiwgYnV0IGZvciBjb25zaXN0ZW5jeSB3ZSBtYWtlIGFsbCBwb3N0bWFzdGVy IGNoaWxkIHByb2Nlc3NlcyBkbworCSAqIHRoaXMuCisJICovCisjaWZkZWYgSEFWRV9TRVRT SUQKKwlpZiAoc2V0c2lkKCkgPCAwKQorCQllbG9nKEZBVEFMLCAic2V0c2lkKCkgZmFpbGVk OiAlbSIpOworI2VuZGlmCisKKwkvKgorCSAqIEV2ZXJ5IHBvc3RtYXN0ZXIgY2hpbGQgcHJv Y2VzcyBpcyBleHBlY3RlZCB0byByZXNwb25kIHByb21wdGx5IHRvCisJICogU0lHUVVJVCBh dCBhbGwgdGltZXMuICBUaGVyZWZvcmUgd2UgY2VudHJhbGx5IHJlbW92ZSBTSUdRVUlUIGZy b20KKwkgKiBCbG9ja1NpZyBhbmQgaW5zdGFsbCBhIHN1aXRhYmxlIHNpZ25hbCBoYW5kbGVy LiAgKENsaWVudC1mYWNpbmcKKwkgKiBwcm9jZXNzZXMgbWF5IGNob29zZSB0byByZXBsYWNl IHRoaXMgZGVmYXVsdCBjaG9pY2Ugb2YgaGFuZGxlciB3aXRoCisJICogcXVpY2tkaWUoKS4p ICBBbGwgb3RoZXIgYmxvY2thYmxlIHNpZ25hbHMgcmVtYWluIGJsb2NrZWQgZm9yIG5vdy4K KwkgKi8KKwlwcXNpZ25hbChTSUdRVUlULCBTaWduYWxIYW5kbGVyRm9yQ3Jhc2hFeGl0KTsK KworCXNpZ2RlbHNldCgmQmxvY2tTaWcsIFNJR1FVSVQpOworCXNpZ3Byb2NtYXNrKFNJR19T RVRNQVNLLCAmQmxvY2tTaWcsIE5VTEwpOworCisJLyogUmVxdWVzdCBhIHNpZ25hbCBpZiB0 aGUgcG9zdG1hc3RlciBkaWVzLCBpZiBwb3NzaWJsZS4gKi8KKwlQb3N0bWFzdGVyRGVhdGhT aWduYWxJbml0KCk7CisKKwkvKiBEb24ndCBnaXZlIHRoZSBwaXBlIHRvIHN1YnByb2dyYW1z IHRoYXQgd2UgZXhlY3V0ZS4gKi8KKyNpZm5kZWYgV0lOMzIKKwlpZiAoZmNudGwocG9zdG1h c3Rlcl9hbGl2ZV9mZHNbUE9TVE1BU1RFUl9GRF9XQVRDSF0sIEZfU0VURkQsIEZEX0NMT0VY RUMpIDwgMCkKKwkJZXJlcG9ydChGQVRBTCwKKwkJCQkoZXJyY29kZV9mb3Jfc29ja2V0X2Fj Y2VzcygpLAorCQkJCSBlcnJtc2dfaW50ZXJuYWwoImNvdWxkIG5vdCBzZXQgcG9zdG1hc3Rl ciBkZWF0aCBtb25pdG9yaW5nIHBpcGUgdG8gRkRfQ0xPRVhFQyBtb2RlOiAlbSIpKSk7Cisj ZW5kaWYKK30KKworLyoKKyAqIEluaXRpYWxpemUgdGhlIGJhc2ljIGVudmlyb25tZW50IGZv ciBhIHN0YW5kYWxvbmUgcHJvY2Vzcy4KKyAqCisgKiBhcmd2MCBoYXMgdG8gYmUgc3VpdGFi bGUgdG8gZmluZCB0aGUgcHJvZ3JhbSdzIGV4ZWN1dGFibGUuCisgKi8KK3ZvaWQKK0luaXRT dGFuZGFsb25lUHJvY2Vzcyhjb25zdCBjaGFyICphcmd2MCkKK3sKKwlBc3NlcnQoIUlzUG9z dG1hc3RlckVudmlyb25tZW50KTsKKworCU15QmFja2VuZFR5cGUgPSBCX1NUQU5EQUxPTkVf QkFDS0VORDsKKworCS8qCisJICogU3RhcnQgb3VyIHdpbjMyIHNpZ25hbCBpbXBsZW1lbnRh dGlvbgorCSAqLworI2lmZGVmIFdJTjMyCisJcGd3aW4zMl9zaWduYWxfaW5pdGlhbGl6ZSgp OworI2VuZGlmCisKKwlJbml0UHJvY2Vzc0dsb2JhbHMoKTsKKworCS8qIEluaXRpYWxpemUg cHJvY2Vzcy1sb2NhbCBsYXRjaCBzdXBwb3J0ICovCisJSW5pdGlhbGl6ZUxhdGNoU3VwcG9y dCgpOworCUluaXRQcm9jZXNzTG9jYWxMYXRjaCgpOworCUluaXRpYWxpemVMYXRjaFdhaXRT ZXQoKTsKKworCS8qCisJICogRm9yIGNvbnNpc3RlbmN5IHdpdGggSW5pdFBvc3RtYXN0ZXJD aGlsZCwgaW5pdGlhbGl6ZSBzaWduYWwgbWFzayBoZXJlLgorCSAqIEJ1dCB3ZSBkb24ndCB1 bmJsb2NrIFNJR1FVSVQgb3IgcHJvdmlkZSBhIGRlZmF1bHQgaGFuZGxlciBmb3IgaXQuCisJ ICovCisJcHFpbml0bWFzaygpOworCXNpZ3Byb2NtYXNrKFNJR19TRVRNQVNLLCAmQmxvY2tT aWcsIE5VTEwpOworCisJLyogQ29tcHV0ZSBwYXRocywgbm8gcG9zdG1hc3RlciB0byBpbmhl cml0IGZyb20gKi8KKwlpZiAobXlfZXhlY19wYXRoWzBdID09ICdcMCcpCisJeworCQlpZiAo ZmluZF9teV9leGVjKGFyZ3YwLCBteV9leGVjX3BhdGgpIDwgMCkKKwkJCWVsb2coRkFUQUws ICIlczogY291bGQgbm90IGxvY2F0ZSBteSBvd24gZXhlY3V0YWJsZSBwYXRoIiwKKwkJCQkg YXJndjApOworCX0KKworCWlmIChwa2dsaWJfcGF0aFswXSA9PSAnXDAnKQorCQlnZXRfcGtn bGliX3BhdGgobXlfZXhlY19wYXRoLCBwa2dsaWJfcGF0aCk7Cit9CisKKworI2lmZGVmIEVY RUNfQkFDS0VORAorCisvKgorICogVGhlIGZvbGxvd2luZyBuZWVkIHRvIGJlIGF2YWlsYWJs ZSB0byB0aGUgc2F2ZS9yZXN0b3JlX2JhY2tlbmRfdmFyaWFibGVzCisgKiBmdW5jdGlvbnMu ICBUaGV5IGFyZSBtYXJrZWQgTk9OX0VYRUNfU1RBVElDIGluIHRoZWlyIGhvbWUgbW9kdWxl cy4KKyAqLworZXh0ZXJuIHNsb2NrX3QgKlNobWVtTG9jazsKK2V4dGVybiBzbG9ja190ICpQ cm9jU3RydWN0TG9jazsKK2V4dGVybiBQR1BST0MgKkF1eGlsaWFyeVByb2NzOworZXh0ZXJu IFBNU2lnbmFsRGF0YSAqUE1TaWduYWxTdGF0ZTsKK2V4dGVybiBwZ190aW1lX3QgZmlyc3Rf c3lzbG9nZ2VyX2ZpbGVfdGltZTsKK2V4dGVybiBzdHJ1Y3QgYmtlbmQgKlNobWVtQmFja2Vu ZEFycmF5OworZXh0ZXJuIGJvb2wgcmVkaXJlY3Rpb25fZG9uZTsKKworI2lmbmRlZiBXSU4z MgorI2RlZmluZSB3cml0ZV9pbmhlcml0YWJsZV9zb2NrZXQoZGVzdCwgc3JjLCBjaGlsZHBp ZCkgKCgqKGRlc3QpID0gKHNyYykpLCB0cnVlKQorI2RlZmluZSByZWFkX2luaGVyaXRhYmxl X3NvY2tldChkZXN0LCBzcmMpICgqKGRlc3QpID0gKihzcmMpKQorI2Vsc2UKK3N0YXRpYyBi b29sIHdyaXRlX2R1cGxpY2F0ZWRfaGFuZGxlKEhBTkRMRSAqZGVzdCwgSEFORExFIHNyYywg SEFORExFIGNoaWxkKTsKK3N0YXRpYyBib29sIHdyaXRlX2luaGVyaXRhYmxlX3NvY2tldChJ bmhlcml0YWJsZVNvY2tldCAqZGVzdCwgU09DS0VUIHNyYywKKwkJCQkJCQkJCSBwaWRfdCBj aGlsZFBpZCk7CitzdGF0aWMgdm9pZCByZWFkX2luaGVyaXRhYmxlX3NvY2tldChTT0NLRVQg KmRlc3QsIEluaGVyaXRhYmxlU29ja2V0ICpzcmMpOworI2VuZGlmCisKKworLyogU2F2ZSBj cml0aWNhbCBiYWNrZW5kIHZhcmlhYmxlcyBpbnRvIHRoZSBCYWNrZW5kUGFyYW1ldGVycyBz dHJ1Y3QgKi8KK3N0YXRpYyBib29sCitzYXZlX2JhY2tlbmRfdmFyaWFibGVzKEJhY2tlbmRQ YXJhbWV0ZXJzICpwYXJhbSwgQ2xpZW50U29ja2V0ICpjbGllbnRfc29jaywKKyNpZmRlZiBX SU4zMgorCQkJCQkgICBIQU5ETEUgY2hpbGRQcm9jZXNzLCBwaWRfdCBjaGlsZFBpZCwKKyNl bmRpZgorCQkJCQkgICBjaGFyICpzdGFydHVwX2RhdGEsIHNpemVfdCBzdGFydHVwX2RhdGFf bGVuKQoreworCWlmIChjbGllbnRfc29jaykKKwkJbWVtY3B5KCZwYXJhbS0+Y2xpZW50X3Nv Y2ssIGNsaWVudF9zb2NrLCBzaXplb2YoQ2xpZW50U29ja2V0KSk7CisJZWxzZQorCQltZW1z ZXQoJnBhcmFtLT5jbGllbnRfc29jaywgMCwgc2l6ZW9mKENsaWVudFNvY2tldCkpOworCWlm ICghd3JpdGVfaW5oZXJpdGFibGVfc29ja2V0KCZwYXJhbS0+aW5oX3NvY2ssCisJCQkJCQkJ CSAgY2xpZW50X3NvY2sgPyBjbGllbnRfc29jay0+c29jayA6IFBHSU5WQUxJRF9TT0NLRVQs CisJCQkJCQkJCSAgY2hpbGRQaWQpKQorCQlyZXR1cm4gZmFsc2U7CisKKwlzdHJsY3B5KHBh cmFtLT5EYXRhRGlyLCBEYXRhRGlyLCBNQVhQR1BBVEgpOworCisJcGFyYW0tPk15Q2FuY2Vs S2V5ID0gTXlDYW5jZWxLZXk7CisJcGFyYW0tPk15UE1DaGlsZFNsb3QgPSBNeVBNQ2hpbGRT bG90OworCisjaWZkZWYgV0lOMzIKKwlwYXJhbS0+U2htZW1Qcm90ZWN0aXZlUmVnaW9uID0g U2htZW1Qcm90ZWN0aXZlUmVnaW9uOworI2VuZGlmCisJcGFyYW0tPlVzZWRTaG1lbVNlZ0lE ID0gVXNlZFNobWVtU2VnSUQ7CisJcGFyYW0tPlVzZWRTaG1lbVNlZ0FkZHIgPSBVc2VkU2ht ZW1TZWdBZGRyOworCisJcGFyYW0tPlNobWVtTG9jayA9IFNobWVtTG9jazsKKwlwYXJhbS0+ U2htZW1WYXJpYWJsZUNhY2hlID0gU2htZW1WYXJpYWJsZUNhY2hlOworCXBhcmFtLT5TaG1l bUJhY2tlbmRBcnJheSA9IFNobWVtQmFja2VuZEFycmF5OworCisjaWZuZGVmIEhBVkVfU1BJ TkxPQ0tTCisJcGFyYW0tPlNwaW5sb2NrU2VtYUFycmF5ID0gU3BpbmxvY2tTZW1hQXJyYXk7 CisjZW5kaWYKKwlwYXJhbS0+TmFtZWRMV0xvY2tUcmFuY2hlUmVxdWVzdHMgPSBOYW1lZExX TG9ja1RyYW5jaGVSZXF1ZXN0czsKKwlwYXJhbS0+TmFtZWRMV0xvY2tUcmFuY2hlQXJyYXkg PSBOYW1lZExXTG9ja1RyYW5jaGVBcnJheTsKKwlwYXJhbS0+TWFpbkxXTG9ja0FycmF5ID0g TWFpbkxXTG9ja0FycmF5OworCXBhcmFtLT5Qcm9jU3RydWN0TG9jayA9IFByb2NTdHJ1Y3RM b2NrOworCXBhcmFtLT5Qcm9jR2xvYmFsID0gUHJvY0dsb2JhbDsKKwlwYXJhbS0+QXV4aWxp YXJ5UHJvY3MgPSBBdXhpbGlhcnlQcm9jczsKKwlwYXJhbS0+UHJlcGFyZWRYYWN0UHJvY3Mg PSBQcmVwYXJlZFhhY3RQcm9jczsKKwlwYXJhbS0+UE1TaWduYWxTdGF0ZSA9IFBNU2lnbmFs U3RhdGU7CisKKwlwYXJhbS0+UG9zdG1hc3RlclBpZCA9IFBvc3RtYXN0ZXJQaWQ7CisJcGFy YW0tPlBnU3RhcnRUaW1lID0gUGdTdGFydFRpbWU7CisJcGFyYW0tPlBnUmVsb2FkVGltZSA9 IFBnUmVsb2FkVGltZTsKKwlwYXJhbS0+Zmlyc3Rfc3lzbG9nZ2VyX2ZpbGVfdGltZSA9IGZp cnN0X3N5c2xvZ2dlcl9maWxlX3RpbWU7CisKKwlwYXJhbS0+cmVkaXJlY3Rpb25fZG9uZSA9 IHJlZGlyZWN0aW9uX2RvbmU7CisJcGFyYW0tPklzQmluYXJ5VXBncmFkZSA9IElzQmluYXJ5 VXBncmFkZTsKKwlwYXJhbS0+cXVlcnlfaWRfZW5hYmxlZCA9IHF1ZXJ5X2lkX2VuYWJsZWQ7 CisJcGFyYW0tPm1heF9zYWZlX2ZkcyA9IG1heF9zYWZlX2ZkczsKKworCXBhcmFtLT5NYXhC YWNrZW5kcyA9IE1heEJhY2tlbmRzOworCisjaWZkZWYgV0lOMzIKKwlwYXJhbS0+UG9zdG1h c3RlckhhbmRsZSA9IFBvc3RtYXN0ZXJIYW5kbGU7CisJaWYgKCF3cml0ZV9kdXBsaWNhdGVk X2hhbmRsZSgmcGFyYW0tPmluaXRpYWxfc2lnbmFsX3BpcGUsCisJCQkJCQkJCSBwZ3dpbjMy X2NyZWF0ZV9zaWduYWxfbGlzdGVuZXIoY2hpbGRQaWQpLAorCQkJCQkJCQkgY2hpbGRQcm9j ZXNzKSkKKwkJcmV0dXJuIGZhbHNlOworI2Vsc2UKKwltZW1jcHkoJnBhcmFtLT5wb3N0bWFz dGVyX2FsaXZlX2ZkcywgJnBvc3RtYXN0ZXJfYWxpdmVfZmRzLAorCQkgICBzaXplb2YocG9z dG1hc3Rlcl9hbGl2ZV9mZHMpKTsKKyNlbmRpZgorCisJbWVtY3B5KCZwYXJhbS0+c3lzbG9n UGlwZSwgJnN5c2xvZ1BpcGUsIHNpemVvZihzeXNsb2dQaXBlKSk7CisKKwlzdHJsY3B5KHBh cmFtLT5teV9leGVjX3BhdGgsIG15X2V4ZWNfcGF0aCwgTUFYUEdQQVRIKTsKKworCXN0cmxj cHkocGFyYW0tPnBrZ2xpYl9wYXRoLCBwa2dsaWJfcGF0aCwgTUFYUEdQQVRIKTsKKworCXBh cmFtLT5zdGFydHVwX2RhdGFfbGVuID0gc3RhcnR1cF9kYXRhX2xlbjsKKwltZW1jcHkocGFy YW0tPnN0YXJ0dXBfZGF0YSwgc3RhcnR1cF9kYXRhLCBzdGFydHVwX2RhdGFfbGVuKTsKKwor CXJldHVybiB0cnVlOworfQorCisKKyNpZmRlZiBXSU4zMgorLyoKKyAqIER1cGxpY2F0ZSBh IGhhbmRsZSBmb3IgdXNhZ2UgaW4gYSBjaGlsZCBwcm9jZXNzLCBhbmQgd3JpdGUgdGhlIGNo aWxkCisgKiBwcm9jZXNzIGluc3RhbmNlIG9mIHRoZSBoYW5kbGUgdG8gdGhlIHBhcmFtZXRl ciBmaWxlLgorICovCitzdGF0aWMgYm9vbAord3JpdGVfZHVwbGljYXRlZF9oYW5kbGUoSEFO RExFICpkZXN0LCBIQU5ETEUgc3JjLCBIQU5ETEUgY2hpbGRQcm9jZXNzKQoreworCUhBTkRM RQkJaENoaWxkID0gSU5WQUxJRF9IQU5ETEVfVkFMVUU7CisKKwlpZiAoIUR1cGxpY2F0ZUhh bmRsZShHZXRDdXJyZW50UHJvY2VzcygpLAorCQkJCQkJIHNyYywKKwkJCQkJCSBjaGlsZFBy b2Nlc3MsCisJCQkJCQkgJmhDaGlsZCwKKwkJCQkJCSAwLAorCQkJCQkJIFRSVUUsCisJCQkJ CQkgRFVQTElDQVRFX0NMT1NFX1NPVVJDRSB8IERVUExJQ0FURV9TQU1FX0FDQ0VTUykpCisJ eworCQllcmVwb3J0KExPRywKKwkJCQkoZXJybXNnX2ludGVybmFsKCJjb3VsZCBub3QgZHVw bGljYXRlIGhhbmRsZSB0byBiZSB3cml0dGVuIHRvIGJhY2tlbmQgcGFyYW1ldGVyIGZpbGU6 IGVycm9yIGNvZGUgJWx1IiwKKwkJCQkJCQkJIEdldExhc3RFcnJvcigpKSkpOworCQlyZXR1 cm4gZmFsc2U7CisJfQorCisJKmRlc3QgPSBoQ2hpbGQ7CisJcmV0dXJuIHRydWU7Cit9CisK Ky8qCisgKiBEdXBsaWNhdGUgYSBzb2NrZXQgZm9yIHVzYWdlIGluIGEgY2hpbGQgcHJvY2Vz cywgYW5kIHdyaXRlIHRoZSByZXN1bHRpbmcKKyAqIHN0cnVjdHVyZSB0byB0aGUgcGFyYW1l dGVyIGZpbGUuCisgKiBUaGlzIGlzIHJlcXVpcmVkIGJlY2F1c2UgYSBudW1iZXIgb2YgTFNQ cyAoTGF5ZXJlZCBTZXJ2aWNlIFByb3ZpZGVycykgdmVyeQorICogY29tbW9uIG9uIFdpbmRv d3MgKGFudGl2aXJ1cywgZmlyZXdhbGxzLCBkb3dubG9hZCBtYW5hZ2VycyBldGMpIGJyZWFr CisgKiBzdHJhaWdodCBzb2NrZXQgaW5oZXJpdGFuY2UuCisgKi8KK3N0YXRpYyBib29sCit3 cml0ZV9pbmhlcml0YWJsZV9zb2NrZXQoSW5oZXJpdGFibGVTb2NrZXQgKmRlc3QsIFNPQ0tF VCBzcmMsIHBpZF90IGNoaWxkcGlkKQoreworCWRlc3QtPm9yaWdzb2NrZXQgPSBzcmM7CisJ aWYgKHNyYyAhPSAwICYmIHNyYyAhPSBQR0lOVkFMSURfU09DS0VUKQorCXsKKwkJLyogQWN0 dWFsIHNvY2tldCAqLworCQlpZiAoV1NBRHVwbGljYXRlU29ja2V0KHNyYywgY2hpbGRwaWQs ICZkZXN0LT53c2FpbmZvKSAhPSAwKQorCQl7CisJCQllcmVwb3J0KExPRywKKwkJCQkJKGVy cm1zZygiY291bGQgbm90IGR1cGxpY2F0ZSBzb2NrZXQgJWQgZm9yIHVzZSBpbiBiYWNrZW5k OiBlcnJvciBjb2RlICVkIiwKKwkJCQkJCQkoaW50KSBzcmMsIFdTQUdldExhc3RFcnJvcigp KSkpOworCQkJcmV0dXJuIGZhbHNlOworCQl9CisJfQorCXJldHVybiB0cnVlOworfQorCisv KgorICogUmVhZCBhIGR1cGxpY2F0ZSBzb2NrZXQgc3RydWN0dXJlIGJhY2ssIGFuZCBnZXQg dGhlIHNvY2tldCBkZXNjcmlwdG9yLgorICovCitzdGF0aWMgdm9pZAorcmVhZF9pbmhlcml0 YWJsZV9zb2NrZXQoU09DS0VUICpkZXN0LCBJbmhlcml0YWJsZVNvY2tldCAqc3JjKQorewor CVNPQ0tFVAkJczsKKworCWlmIChzcmMtPm9yaWdzb2NrZXQgPT0gUEdJTlZBTElEX1NPQ0tF VCB8fCBzcmMtPm9yaWdzb2NrZXQgPT0gMCkKKwl7CisJCS8qIE5vdCBhIHJlYWwgc29ja2V0 ISAqLworCQkqZGVzdCA9IHNyYy0+b3JpZ3NvY2tldDsKKwl9CisJZWxzZQorCXsKKwkJLyog QWN0dWFsIHNvY2tldCwgc28gY3JlYXRlIGZyb20gc3RydWN0dXJlICovCisJCXMgPSBXU0FT b2NrZXQoRlJPTV9QUk9UT0NPTF9JTkZPLAorCQkJCQkgIEZST01fUFJPVE9DT0xfSU5GTywK KwkJCQkJICBGUk9NX1BST1RPQ09MX0lORk8sCisJCQkJCSAgJnNyYy0+d3NhaW5mbywKKwkJ CQkJICAwLAorCQkJCQkgIDApOworCQlpZiAocyA9PSBJTlZBTElEX1NPQ0tFVCkKKwkJewor CQkJd3JpdGVfc3RkZXJyKCJjb3VsZCBub3QgY3JlYXRlIGluaGVyaXRlZCBzb2NrZXQ6IGVy cm9yIGNvZGUgJWRcbiIsCisJCQkJCQkgV1NBR2V0TGFzdEVycm9yKCkpOworCQkJZXhpdCgx KTsKKwkJfQorCQkqZGVzdCA9IHM7CisKKwkJLyoKKwkJICogVG8gbWFrZSBzdXJlIHdlIGRv bid0IGdldCB0d28gcmVmZXJlbmNlcyB0byB0aGUgc2FtZSBzb2NrZXQsIGNsb3NlCisJCSAq IHRoZSBvcmlnaW5hbCBvbmUuIChUaGlzIHdvdWxkIGhhcHBlbiB3aGVuIGluaGVyaXRhbmNl IGFjdHVhbGx5CisJCSAqIHdvcmtzLi4KKwkJICovCisJCWNsb3Nlc29ja2V0KHNyYy0+b3Jp Z3NvY2tldCk7CisJfQorfQorI2VuZGlmCisKK3N0YXRpYyB2b2lkCityZWFkX2JhY2tlbmRf dmFyaWFibGVzKGNoYXIgKmlkLCBjaGFyICoqc3RhcnR1cF9kYXRhLCBzaXplX3QgKnN0YXJ0 dXBfZGF0YV9sZW4pCit7CisJQmFja2VuZFBhcmFtZXRlcnMgcGFyYW07CisKKyNpZm5kZWYg V0lOMzIKKwkvKiBOb24td2luMzIgaW1wbGVtZW50YXRpb24gcmVhZHMgZnJvbSBmaWxlICov CisJRklMRQkgICAqZnA7CisKKwkvKiBPcGVuIGZpbGUgKi8KKwlmcCA9IEFsbG9jYXRlRmls ZShpZCwgUEdfQklOQVJZX1IpOworCWlmICghZnApCisJeworCQl3cml0ZV9zdGRlcnIoImNv dWxkIG5vdCBvcGVuIGJhY2tlbmQgdmFyaWFibGVzIGZpbGUgXCIlc1wiOiAlc1xuIiwKKwkJ CQkJIGlkLCBzdHJlcnJvcihlcnJubykpOworCQlleGl0KDEpOworCX0KKworCWlmIChmcmVh ZCgmcGFyYW0sIHNpemVvZihwYXJhbSksIDEsIGZwKSAhPSAxKQorCXsKKwkJd3JpdGVfc3Rk ZXJyKCJjb3VsZCBub3QgcmVhZCBmcm9tIGJhY2tlbmQgdmFyaWFibGVzIGZpbGUgXCIlc1wi OiAlc1xuIiwKKwkJCQkJIGlkLCBzdHJlcnJvcihlcnJubykpOworCQlleGl0KDEpOworCX0K KworCS8qIHJlYWQgc3RhcnR1cCBkYXRhICovCisJKnN0YXJ0dXBfZGF0YV9sZW4gPSBwYXJh bS5zdGFydHVwX2RhdGFfbGVuOworCWlmIChwYXJhbS5zdGFydHVwX2RhdGFfbGVuID4gMCkK Kwl7CisJCSpzdGFydHVwX2RhdGEgPSBwYWxsb2MoKnN0YXJ0dXBfZGF0YV9sZW4pOworCQlp ZiAoZnJlYWQoKnN0YXJ0dXBfZGF0YSwgKnN0YXJ0dXBfZGF0YV9sZW4sIDEsIGZwKSAhPSAx KQorCQl7CisJCQl3cml0ZV9zdGRlcnIoImNvdWxkIG5vdCByZWFkIHN0YXJ0dXAgZGF0YSBm cm9tIGJhY2tlbmQgdmFyaWFibGVzIGZpbGUgXCIlc1wiOiAlc1xuIiwKKwkJCQkJCSBpZCwg c3RyZXJyb3IoZXJybm8pKTsKKwkJCWV4aXQoMSk7CisJCX0KKwl9CisJZWxzZQorCQkqc3Rh cnR1cF9kYXRhID0gTlVMTDsKKworCS8qIFJlbGVhc2UgZmlsZSAqLworCUZyZWVGaWxlKGZw KTsKKwlpZiAodW5saW5rKGlkKSAhPSAwKQorCXsKKwkJd3JpdGVfc3RkZXJyKCJjb3VsZCBu b3QgcmVtb3ZlIGZpbGUgXCIlc1wiOiAlc1xuIiwKKwkJCQkJIGlkLCBzdHJlcnJvcihlcnJu bykpOworCQlleGl0KDEpOworCX0KKyNlbHNlCisJLyogV2luMzIgdmVyc2lvbiB1c2VzIG1h cHBlZCBmaWxlICovCisJSEFORExFCQlwYXJhbUhhbmRsZTsKKwlCYWNrZW5kUGFyYW1ldGVy cyAqZmlsZXA7CisKKyNpZmRlZiBfV0lONjQKKwlwYXJhbUhhbmRsZSA9IChIQU5ETEUpIF9h dG9pNjQoaWQpOworI2Vsc2UKKwlwYXJhbUhhbmRsZSA9IChIQU5ETEUpIGF0b2woaWQpOwor I2VuZGlmCisJZmlsZXAgPSBNYXBWaWV3T2ZGaWxlKHBhcmFtSGFuZGxlLCBGSUxFX01BUF9S RUFELCAwLCAwLCAwKTsKKwlpZiAoIWZpbGVwKQorCXsKKwkJd3JpdGVfc3RkZXJyKCJjb3Vs ZCBub3QgbWFwIHZpZXcgb2YgYmFja2VuZCB2YXJpYWJsZXM6IGVycm9yIGNvZGUgJWx1XG4i LAorCQkJCQkgR2V0TGFzdEVycm9yKCkpOworCQlleGl0KDEpOworCX0KKworCW1lbWNweSgm cGFyYW0sIGZpbGVwLCBzaXplb2YoQmFja2VuZFBhcmFtZXRlcnMpKTsKKworCS8qIHJlYWQg c3RhcnR1cCBkYXRhICovCisJKnN0YXJ0dXBfZGF0YV9sZW4gPSBwYXJhbS5zdGFydHVwX2Rh dGFfbGVuOworCWlmIChwYXJhbS5zdGFydHVwX2RhdGFfbGVuID4gMCkKKwl7CisJCSpzdGFy dHVwX2RhdGEgPSBwYWxsb2MocGFyYW0uc3RhcnR1cF9kYXRhX2xlbik7CisJCW1lbWNweSgq c3RhcnR1cF9kYXRhLCBmaWxlcC0+c3RhcnR1cF9kYXRhLCBwYXJhbS5zdGFydHVwX2RhdGFf bGVuKTsKKwl9CisJZWxzZQorCQkqc3RhcnR1cF9kYXRhID0gTlVMTDsKKworCWlmICghVW5t YXBWaWV3T2ZGaWxlKGZpbGVwKSkKKwl7CisJCXdyaXRlX3N0ZGVycigiY291bGQgbm90IHVu bWFwIHZpZXcgb2YgYmFja2VuZCB2YXJpYWJsZXM6IGVycm9yIGNvZGUgJWx1XG4iLAorCQkJ CQkgR2V0TGFzdEVycm9yKCkpOworCQlleGl0KDEpOworCX0KKworCWlmICghQ2xvc2VIYW5k bGUocGFyYW1IYW5kbGUpKQorCXsKKwkJd3JpdGVfc3RkZXJyKCJjb3VsZCBub3QgY2xvc2Ug aGFuZGxlIHRvIGJhY2tlbmQgcGFyYW1ldGVyIHZhcmlhYmxlczogZXJyb3IgY29kZSAlbHVc biIsCisJCQkJCSBHZXRMYXN0RXJyb3IoKSk7CisJCWV4aXQoMSk7CisJfQorI2VuZGlmCisK KwlyZXN0b3JlX2JhY2tlbmRfdmFyaWFibGVzKCZwYXJhbSk7Cit9CisKKy8qIFJlc3RvcmUg Y3JpdGljYWwgYmFja2VuZCB2YXJpYWJsZXMgZnJvbSB0aGUgQmFja2VuZFBhcmFtZXRlcnMg c3RydWN0ICovCitzdGF0aWMgdm9pZAorcmVzdG9yZV9iYWNrZW5kX3ZhcmlhYmxlcyhCYWNr ZW5kUGFyYW1ldGVycyAqcGFyYW0pCit7CisJaWYgKHBhcmFtLT5jbGllbnRfc29jay5zb2Nr ICE9IFBHSU5WQUxJRF9TT0NLRVQpCisJeworCQlNeUNsaWVudFNvY2tldCA9IE1lbW9yeUNv bnRleHRBbGxvYyhUb3BNZW1vcnlDb250ZXh0LCBzaXplb2YoQ2xpZW50U29ja2V0KSk7CisJ CW1lbWNweShNeUNsaWVudFNvY2tldCwgJnBhcmFtLT5jbGllbnRfc29jaywgc2l6ZW9mKENs aWVudFNvY2tldCkpOworCQlyZWFkX2luaGVyaXRhYmxlX3NvY2tldCgmTXlDbGllbnRTb2Nr ZXQtPnNvY2ssICZwYXJhbS0+aW5oX3NvY2spOworCX0KKworCVNldERhdGFEaXIocGFyYW0t PkRhdGFEaXIpOworCisJTXlDYW5jZWxLZXkgPSBwYXJhbS0+TXlDYW5jZWxLZXk7CisJTXlQ TUNoaWxkU2xvdCA9IHBhcmFtLT5NeVBNQ2hpbGRTbG90OworCisjaWZkZWYgV0lOMzIKKwlT aG1lbVByb3RlY3RpdmVSZWdpb24gPSBwYXJhbS0+U2htZW1Qcm90ZWN0aXZlUmVnaW9uOwor I2VuZGlmCisJVXNlZFNobWVtU2VnSUQgPSBwYXJhbS0+VXNlZFNobWVtU2VnSUQ7CisJVXNl ZFNobWVtU2VnQWRkciA9IHBhcmFtLT5Vc2VkU2htZW1TZWdBZGRyOworCisJU2htZW1Mb2Nr ID0gcGFyYW0tPlNobWVtTG9jazsKKwlTaG1lbVZhcmlhYmxlQ2FjaGUgPSBwYXJhbS0+U2ht ZW1WYXJpYWJsZUNhY2hlOworCVNobWVtQmFja2VuZEFycmF5ID0gcGFyYW0tPlNobWVtQmFj a2VuZEFycmF5OworCisjaWZuZGVmIEhBVkVfU1BJTkxPQ0tTCisJU3BpbmxvY2tTZW1hQXJy YXkgPSBwYXJhbS0+U3BpbmxvY2tTZW1hQXJyYXk7CisjZW5kaWYKKwlOYW1lZExXTG9ja1Ry YW5jaGVSZXF1ZXN0cyA9IHBhcmFtLT5OYW1lZExXTG9ja1RyYW5jaGVSZXF1ZXN0czsKKwlO YW1lZExXTG9ja1RyYW5jaGVBcnJheSA9IHBhcmFtLT5OYW1lZExXTG9ja1RyYW5jaGVBcnJh eTsKKwlNYWluTFdMb2NrQXJyYXkgPSBwYXJhbS0+TWFpbkxXTG9ja0FycmF5OworCVByb2NT dHJ1Y3RMb2NrID0gcGFyYW0tPlByb2NTdHJ1Y3RMb2NrOworCVByb2NHbG9iYWwgPSBwYXJh bS0+UHJvY0dsb2JhbDsKKwlBdXhpbGlhcnlQcm9jcyA9IHBhcmFtLT5BdXhpbGlhcnlQcm9j czsKKwlQcmVwYXJlZFhhY3RQcm9jcyA9IHBhcmFtLT5QcmVwYXJlZFhhY3RQcm9jczsKKwlQ TVNpZ25hbFN0YXRlID0gcGFyYW0tPlBNU2lnbmFsU3RhdGU7CisKKwlQb3N0bWFzdGVyUGlk ID0gcGFyYW0tPlBvc3RtYXN0ZXJQaWQ7CisJUGdTdGFydFRpbWUgPSBwYXJhbS0+UGdTdGFy dFRpbWU7CisJUGdSZWxvYWRUaW1lID0gcGFyYW0tPlBnUmVsb2FkVGltZTsKKwlmaXJzdF9z eXNsb2dnZXJfZmlsZV90aW1lID0gcGFyYW0tPmZpcnN0X3N5c2xvZ2dlcl9maWxlX3RpbWU7 CisKKwlyZWRpcmVjdGlvbl9kb25lID0gcGFyYW0tPnJlZGlyZWN0aW9uX2RvbmU7CisJSXNC aW5hcnlVcGdyYWRlID0gcGFyYW0tPklzQmluYXJ5VXBncmFkZTsKKwlxdWVyeV9pZF9lbmFi bGVkID0gcGFyYW0tPnF1ZXJ5X2lkX2VuYWJsZWQ7CisJbWF4X3NhZmVfZmRzID0gcGFyYW0t Pm1heF9zYWZlX2ZkczsKKworCU1heEJhY2tlbmRzID0gcGFyYW0tPk1heEJhY2tlbmRzOwor CisjaWZkZWYgV0lOMzIKKwlQb3N0bWFzdGVySGFuZGxlID0gcGFyYW0tPlBvc3RtYXN0ZXJI YW5kbGU7CisJcGd3aW4zMl9pbml0aWFsX3NpZ25hbF9waXBlID0gcGFyYW0tPmluaXRpYWxf c2lnbmFsX3BpcGU7CisjZWxzZQorCW1lbWNweSgmcG9zdG1hc3Rlcl9hbGl2ZV9mZHMsICZw YXJhbS0+cG9zdG1hc3Rlcl9hbGl2ZV9mZHMsCisJCSAgIHNpemVvZihwb3N0bWFzdGVyX2Fs aXZlX2ZkcykpOworI2VuZGlmCisKKwltZW1jcHkoJnN5c2xvZ1BpcGUsICZwYXJhbS0+c3lz bG9nUGlwZSwgc2l6ZW9mKHN5c2xvZ1BpcGUpKTsKKworCXN0cmxjcHkobXlfZXhlY19wYXRo LCBwYXJhbS0+bXlfZXhlY19wYXRoLCBNQVhQR1BBVEgpOworCisJc3RybGNweShwa2dsaWJf cGF0aCwgcGFyYW0tPnBrZ2xpYl9wYXRoLCBNQVhQR1BBVEgpOworCisJLyoKKwkgKiBXZSBu ZWVkIHRvIHJlc3RvcmUgZmQuYydzIGNvdW50cyBvZiBleHRlcm5hbGx5LW9wZW5lZCBGRHM7 IHRvIGF2b2lkCisJICogY29uZnVzaW9uLCBiZSBzdXJlIHRvIGRvIHRoaXMgYWZ0ZXIgcmVz dG9yaW5nIG1heF9zYWZlX2Zkcy4gIChOb3RlOgorCSAqIEJhY2tlbmRJbml0aWFsaXplIHdp bGwgaGFuZGxlIHRoaXMgZm9yIGNsaWVudF9zb2NrLT5zb2NrLikKKwkgKi8KKyNpZm5kZWYg V0lOMzIKKwlpZiAocG9zdG1hc3Rlcl9hbGl2ZV9mZHNbMF0gPj0gMCkKKwkJUmVzZXJ2ZUV4 dGVybmFsRkQoKTsKKwlpZiAocG9zdG1hc3Rlcl9hbGl2ZV9mZHNbMV0gPj0gMCkKKwkJUmVz ZXJ2ZUV4dGVybmFsRkQoKTsKKyNlbmRpZgorfQorCisjZW5kaWYJCQkJCQkJLyogRVhFQ19C QUNLRU5EICovCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL21lc29uLmJ1 aWxkIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9tZXNvbi5idWlsZAppbmRleCBjZGE5MjFm ZDEwYi4uODlmZjExYmViMGEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIv bWVzb24uYnVpbGQKKysrIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9tZXNvbi5idWlsZApA QCAtNiw4ICs2LDggQEAgYmFja2VuZF9zb3VyY2VzICs9IGZpbGVzKAogICAnYmd3b3JrZXIu YycsCiAgICdiZ3dyaXRlci5jJywKICAgJ2NoZWNrcG9pbnRlci5jJywKLSAgJ2ZvcmtfcHJv Y2Vzcy5jJywKICAgJ2ludGVycnVwdC5jJywKKyAgJ2xhdW5jaF9iYWNrZW5kLmMnLAogICAn cGdhcmNoLmMnLAogICAncG9zdG1hc3Rlci5jJywKICAgJ3N0YXJ0dXAuYycsCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3BnYXJjaC5jIGIvc3JjL2JhY2tlbmQvcG9z dG1hc3Rlci9wZ2FyY2guYwppbmRleCA0NmFmMzQ5NTY0NC4uYjgyZDY2ZmFiNTIgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcGdhcmNoLmMKKysrIGIvc3JjL2JhY2tl bmQvcG9zdG1hc3Rlci9wZ2FyY2guYwpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgImxp Yi9iaW5hcnloZWFwLmgiCiAjaW5jbHVkZSAibGlicHEvcHFzaWduYWwuaCIKICNpbmNsdWRl ICJwZ3N0YXQuaCIKKyNpbmNsdWRlICJwb3N0bWFzdGVyL2F1eHByb2Nlc3MuaCIKICNpbmNs dWRlICJwb3N0bWFzdGVyL2ludGVycnVwdC5oIgogI2luY2x1ZGUgInBvc3RtYXN0ZXIvcGdh cmNoLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9mZC5oIgpAQCAtMjExLDggKzIxMiwxNCBAQCBQ Z0FyY2hDYW5SZXN0YXJ0KHZvaWQpCiAKIC8qIE1haW4gZW50cnkgcG9pbnQgZm9yIGFyY2hp dmVyIHByb2Nlc3MgKi8KIHZvaWQKLVBnQXJjaGl2ZXJNYWluKHZvaWQpCitQZ0FyY2hpdmVy TWFpbihjaGFyICpzdGFydHVwX2RhdGEsIHNpemVfdCBzdGFydHVwX2RhdGFfbGVuKQogewor CUFzc2VydChzdGFydHVwX2RhdGFfbGVuID09IDApOworCisJTXlBdXhQcm9jVHlwZSA9IEFy Y2hpdmVyUHJvY2VzczsKKwlNeUJhY2tlbmRUeXBlID0gQl9BUkNISVZFUjsKKwlBdXhpbGlh cnlQcm9jZXNzSW5pdCgpOworCiAJLyoKIAkgKiBJZ25vcmUgYWxsIHNpZ25hbHMgdXN1YWxs eSBib3VuZCB0byBzb21lIGFjdGlvbiBpbiB0aGUgcG9zdG1hc3RlciwKIAkgKiBleGNlcHQg Zm9yIFNJR0hVUCwgU0lHVEVSTSwgU0lHVVNSMSwgU0lHVVNSMiwgYW5kIFNJR1FVSVQuCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3Bvc3RtYXN0ZXIuYyBiL3NyYy9i YWNrZW5kL3Bvc3RtYXN0ZXIvcG9zdG1hc3Rlci5jCmluZGV4IDFiMWE0NGUzZWE4Li4xMGE0 ZDk1NDBjNCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9wb3N0bWFzdGVy LmMKKysrIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9wb3N0bWFzdGVyLmMKQEAgLTIsOSAr Miw5IEBACiAgKgogICogcG9zdG1hc3Rlci5jCiAgKgkgIFRoaXMgcHJvZ3JhbSBhY3RzIGFz IGEgY2xlYXJpbmcgaG91c2UgZm9yIHJlcXVlc3RzIHRvIHRoZQotICoJICBQT1NUR1JFUyBz eXN0ZW0uICBGcm9udGVuZCBwcm9ncmFtcyBzZW5kIGEgc3RhcnR1cCBtZXNzYWdlCi0gKgkg IHRvIHRoZSBQb3N0bWFzdGVyIGFuZCB0aGUgcG9zdG1hc3RlciB1c2VzIHRoZSBpbmZvIGlu IHRoZQotICoJICBtZXNzYWdlIHRvIHNldHVwIGEgYmFja2VuZCBwcm9jZXNzLgorICoJICBQ T1NUR1JFUyBzeXN0ZW0uICBGcm9udGVuZCBwcm9ncmFtcyBjb25uZWN0IHRvIHRoZSBQb3N0 bWFzdGVyLAorICoJICBhbmQgcG9zdG1hc3RlciBmb3JrcyBhIG5ldyBiYWNrZW5kIHByb2Nl c3MgdG8gaGFuZGxlIHRoZQorICoJICBjb25uZWN0aW9uLgogICoKICAqCSAgVGhlIHBvc3Rt YXN0ZXIgYWxzbyBtYW5hZ2VzIHN5c3RlbS13aWRlIG9wZXJhdGlvbnMgc3VjaCBhcwogICoJ ICBzdGFydHVwIGFuZCBzaHV0ZG93bi4gVGhlIHBvc3RtYXN0ZXIgaXRzZWxmIGRvZXNuJ3Qg ZG8gdGhvc2UKQEAgLTExMCw3ICsxMTAsNiBAQAogI2luY2x1ZGUgInBvc3RtYXN0ZXIvYXV0 b3ZhY3V1bS5oIgogI2luY2x1ZGUgInBvc3RtYXN0ZXIvYXV4cHJvY2Vzcy5oIgogI2luY2x1 ZGUgInBvc3RtYXN0ZXIvYmd3b3JrZXJfaW50ZXJuYWxzLmgiCi0jaW5jbHVkZSAicG9zdG1h c3Rlci9mb3JrX3Byb2Nlc3MuaCIKICNpbmNsdWRlICJwb3N0bWFzdGVyL2ludGVycnVwdC5o IgogI2luY2x1ZGUgInBvc3RtYXN0ZXIvcGdhcmNoLmgiCiAjaW5jbHVkZSAicG9zdG1hc3Rl ci9wb3N0bWFzdGVyLmgiCkBAIC0xMzIsMTAgKzEzMSw2IEBACiAjaW5jbHVkZSAidXRpbHMv dGltZXN0YW1wLmgiCiAjaW5jbHVkZSAidXRpbHMvdmFybGVuYS5oIgogCi0jaWZkZWYgRVhF Q19CQUNLRU5ECi0jaW5jbHVkZSAic3RvcmFnZS9zcGluLmgiCi0jZW5kaWYKLQogCiAvKgog ICogUG9zc2libGUgdHlwZXMgb2YgYSBiYWNrZW5kLiBCZXlvbmQgYmVpbmcgdGhlIHBvc3Np YmxlIGJrZW5kX3R5cGUgdmFsdWVzIGluCkBAIC0xODgsNyArMTgzLDcgQEAgdHlwZWRlZiBz dHJ1Y3QgYmtlbmQKIHN0YXRpYyBkbGlzdF9oZWFkIEJhY2tlbmRMaXN0ID0gRExJU1RfU1RB VElDX0lOSVQoQmFja2VuZExpc3QpOwogCiAjaWZkZWYgRVhFQ19CQUNLRU5ECi1zdGF0aWMg QmFja2VuZCAqU2htZW1CYWNrZW5kQXJyYXk7CitCYWNrZW5kICAgICpTaG1lbUJhY2tlbmRB cnJheTsKICNlbmRpZgogCiBCYWNrZ3JvdW5kV29ya2VyICpNeUJnd29ya2VyRW50cnkgPSBO VUxMOwpAQCAtNDEzLDcgKzQwOCw3IEBAIHN0YXRpYyB2b2lkIFN0YXJ0dXBQYWNrZXRUaW1l b3V0SGFuZGxlcih2b2lkKTsKIHN0YXRpYyB2b2lkIENsZWFudXBCYWNrZW5kKGludCBwaWQs IGludCBleGl0c3RhdHVzKTsKIHN0YXRpYyBib29sIENsZWFudXBCYWNrZ3JvdW5kV29ya2Vy KGludCBwaWQsIGludCBleGl0c3RhdHVzKTsKIHN0YXRpYyB2b2lkIEhhbmRsZUNoaWxkQ3Jh c2goaW50IHBpZCwgaW50IGV4aXRzdGF0dXMsIGNvbnN0IGNoYXIgKnByb2NuYW1lKTsKLXN0 YXRpYyB2b2lkIExvZ0NoaWxkRXhpdChpbnQgbGV2LCBjb25zdCBjaGFyICpwcm9jbmFtZSwK K3N0YXRpYyB2b2lkIExvZ0NoaWxkRXhpdChpbnQgbGV2LCBjb25zdCBjaGFyICpwcm9jbmFt QmFja2VuZEluaXRpYWxpemVlLAogCQkJCQkJIGludCBwaWQsIGludCBleGl0c3RhdHVzKTsK IHN0YXRpYyB2b2lkIFBvc3RtYXN0ZXJTdGF0ZU1hY2hpbmUodm9pZCk7CiAKQEAgLTQyOCw3 ICs0MjMsNiBAQCB0eXBlZGVmIGVudW0gQ0FDX3N0YXRlCiB9IENBQ19zdGF0ZTsKIAogc3Rh dGljIHZvaWQgQmFja2VuZEluaXRpYWxpemUoQ2xpZW50U29ja2V0ICpjbGllbnRfc29jaywg Q0FDX3N0YXRlIGNhYyk7Ci1zdGF0aWMgdm9pZCBCYWNrZW5kUnVuKHZvaWQpIHBnX2F0dHJp YnV0ZV9ub3JldHVybigpOwogc3RhdGljIHZvaWQgRXhpdFBvc3RtYXN0ZXIoaW50IHN0YXR1 cykgcGdfYXR0cmlidXRlX25vcmV0dXJuKCk7CiBzdGF0aWMgaW50CVNlcnZlckxvb3Aodm9p ZCk7CiBzdGF0aWMgaW50CUJhY2tlbmRTdGFydHVwKENsaWVudFNvY2tldCAqcG9ydCk7CkBA IC00NDksNyArNDQzLDcgQEAgc3RhdGljIGludAlDb3VudENoaWxkcmVuKGludCB0YXJnZXQp Owogc3RhdGljIGJvb2wgYXNzaWduX2JhY2tlbmRsaXN0X2VudHJ5KFJlZ2lzdGVyZWRCZ1dv cmtlciAqcncpOwogc3RhdGljIHZvaWQgbWF5YmVfc3RhcnRfYmd3b3JrZXJzKHZvaWQpOwog c3RhdGljIGJvb2wgQ3JlYXRlT3B0c0ZpbGUoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSwgY2hh ciAqZnVsbHByb2duYW1lKTsKLXN0YXRpYyBwaWRfdCBTdGFydENoaWxkUHJvY2VzcyhBdXhQ cm9jVHlwZSB0eXBlKTsKK3N0YXRpYyBwaWRfdCBTdGFydENoaWxkUHJvY2VzcyhQb3N0bWFz dGVyQ2hpbGRUeXBlIHR5cGUpOwogc3RhdGljIHZvaWQgU3RhcnRBdXRvdmFjdXVtV29ya2Vy KHZvaWQpOwogc3RhdGljIHZvaWQgTWF5YmVTdGFydFdhbFJlY2VpdmVyKHZvaWQpOwogc3Rh dGljIHZvaWQgSW5pdFBvc3RtYXN0ZXJEZWF0aFdhdGNoSGFuZGxlKHZvaWQpOwpAQCAtNDg0 LDk1ICs0NzgsMTkgQEAgdHlwZWRlZiBzdHJ1Y3QKIH0gd2luMzJfZGVhZGNoaWxkX3dhaXRp bmZvOwogI2VuZGlmCQkJCQkJCS8qIFdJTjMyICovCiAKLXN0YXRpYyBwaWRfdCBiYWNrZW5k X2ZvcmtleGVjKENsaWVudFNvY2tldCAqY2xpZW50X3NvY2ssIENBQ19zdGF0ZSBjYWMpOwot c3RhdGljIHBpZF90IGludGVybmFsX2ZvcmtleGVjKGludCBhcmdjLCBjaGFyICphcmd2W10s IENsaWVudFNvY2tldCAqY2xpZW50X3NvY2spOwotCi0vKiBUeXBlIGZvciBhIHNvY2tldCB0 aGF0IGNhbiBiZSBpbmhlcml0ZWQgdG8gYSBjbGllbnQgcHJvY2VzcyAqLwotI2lmZGVmIFdJ TjMyCi10eXBlZGVmIHN0cnVjdAotewotCVNPQ0tFVAkJb3JpZ3NvY2tldDsJCS8qIE9yaWdp bmFsIHNvY2tldCB2YWx1ZSwgb3IgUEdJTlZBTElEX1NPQ0tFVAotCQkJCQkJCQkgKiBpZiBu b3QgYSBzb2NrZXQgKi8KLQlXU0FQUk9UT0NPTF9JTkZPIHdzYWluZm87Ci19IEluaGVyaXRh YmxlU29ja2V0OwotI2Vsc2UKLXR5cGVkZWYgaW50IEluaGVyaXRhYmxlU29ja2V0OwotI2Vu ZGlmCi0KLS8qCi0gKiBTdHJ1Y3R1cmUgY29udGFpbnMgYWxsIHZhcmlhYmxlcyBwYXNzZWQg dG8gZXhlYzplZCBiYWNrZW5kcwotICovCi10eXBlZGVmIHN0cnVjdAotewotCUNsaWVudFNv Y2tldCBjbGllbnRfc29jazsKLQlJbmhlcml0YWJsZVNvY2tldCBzZXJpYWxpemVkX3NvY2s7 Ci0JY2hhcgkJRGF0YURpcltNQVhQR1BBVEhdOwotCWludDMyCQlNeUNhbmNlbEtleTsKLQlp bnQJCQlNeVBNQ2hpbGRTbG90OwotI2lmbmRlZiBXSU4zMgotCXVuc2lnbmVkIGxvbmcgVXNl ZFNobWVtU2VnSUQ7Ci0jZWxzZQotCXZvaWQJICAgKlNobWVtUHJvdGVjdGl2ZVJlZ2lvbjsK LQlIQU5ETEUJCVVzZWRTaG1lbVNlZ0lEOwotI2VuZGlmCi0Jdm9pZAkgICAqVXNlZFNobWVt U2VnQWRkcjsKLQlzbG9ja190ICAgICpTaG1lbUxvY2s7Ci0JVmFyaWFibGVDYWNoZSBTaG1l bVZhcmlhYmxlQ2FjaGU7Ci0JQmFja2VuZCAgICAqU2htZW1CYWNrZW5kQXJyYXk7Ci0jaWZu ZGVmIEhBVkVfU1BJTkxPQ0tTCi0JUEdTZW1hcGhvcmUgKlNwaW5sb2NrU2VtYUFycmF5Owot I2VuZGlmCi0JaW50CQkJTmFtZWRMV0xvY2tUcmFuY2hlUmVxdWVzdHM7Ci0JTmFtZWRMV0xv Y2tUcmFuY2hlICpOYW1lZExXTG9ja1RyYW5jaGVBcnJheTsKLQlMV0xvY2tQYWRkZWQgKk1h aW5MV0xvY2tBcnJheTsKLQlzbG9ja190ICAgICpQcm9jU3RydWN0TG9jazsKLQlQUk9DX0hE UiAgICpQcm9jR2xvYmFsOwotCVBHUFJPQwkgICAqQXV4aWxpYXJ5UHJvY3M7Ci0JUEdQUk9D CSAgICpQcmVwYXJlZFhhY3RQcm9jczsKLQlQTVNpZ25hbERhdGEgKlBNU2lnbmFsU3RhdGU7 Ci0JcGlkX3QJCVBvc3RtYXN0ZXJQaWQ7Ci0JVGltZXN0YW1wVHogUGdTdGFydFRpbWU7Ci0J VGltZXN0YW1wVHogUGdSZWxvYWRUaW1lOwotCXBnX3RpbWVfdAlmaXJzdF9zeXNsb2dnZXJf ZmlsZV90aW1lOwotCWJvb2wJCXJlZGlyZWN0aW9uX2RvbmU7Ci0JYm9vbAkJSXNCaW5hcnlV cGdyYWRlOwotCWJvb2wJCXF1ZXJ5X2lkX2VuYWJsZWQ7Ci0JaW50CQkJbWF4X3NhZmVfZmRz OwotCWludAkJCU1heEJhY2tlbmRzOwotI2lmZGVmIFdJTjMyCi0JSEFORExFCQlQb3N0bWFz dGVySGFuZGxlOwotCUhBTkRMRQkJaW5pdGlhbF9zaWduYWxfcGlwZTsKLQlIQU5ETEUJCXN5 c2xvZ1BpcGVbMl07Ci0jZWxzZQotCWludAkJCXBvc3RtYXN0ZXJfYWxpdmVfZmRzWzJdOwot CWludAkJCXN5c2xvZ1BpcGVbMl07Ci0jZW5kaWYKLQljaGFyCQlteV9leGVjX3BhdGhbTUFY UEdQQVRIXTsKLQljaGFyCQlwa2dsaWJfcGF0aFtNQVhQR1BBVEhdOwotCi0JQmFja2dyb3Vu ZFdvcmtlciBNeUJnd29ya2VyRW50cnk7Ci19IEJhY2tlbmRQYXJhbWV0ZXJzOwotCi1zdGF0 aWMgdm9pZCByZWFkX2JhY2tlbmRfdmFyaWFibGVzKGNoYXIgKmlkLCBDbGllbnRTb2NrZXQg KmNsaWVudF9zb2NrKTsKLXN0YXRpYyB2b2lkIHJlc3RvcmVfYmFja2VuZF92YXJpYWJsZXMo QmFja2VuZFBhcmFtZXRlcnMgKnBhcmFtLCBDbGllbnRTb2NrZXQgKmNsaWVudF9zb2NrKTsK LQotI2lmbmRlZiBXSU4zMgotc3RhdGljIGJvb2wgc2F2ZV9iYWNrZW5kX3ZhcmlhYmxlcyhC YWNrZW5kUGFyYW1ldGVycyAqcGFyYW0sIENsaWVudFNvY2tldCAqY2xpZW50X3NvY2spOwot I2Vsc2UKLXN0YXRpYyBib29sIHNhdmVfYmFja2VuZF92YXJpYWJsZXMoQmFja2VuZFBhcmFt ZXRlcnMgKnBhcmFtLCBDbGllbnRTb2NrZXQgKmNsaWVudF9zb2NrLAotCQkJCQkJCQkgICBI QU5ETEUgY2hpbGRQcm9jZXNzLCBwaWRfdCBjaGlsZFBpZCk7Ci0jZW5kaWYKLQogc3RhdGlj IHZvaWQgU2htZW1CYWNrZW5kQXJyYXlBZGQoQmFja2VuZCAqYm4pOwogc3RhdGljIHZvaWQg U2htZW1CYWNrZW5kQXJyYXlSZW1vdmUoQmFja2VuZCAqYm4pOwogI2VuZGlmCQkJCQkJCS8q IEVYRUNfQkFDS0VORCAqLwogCi0jZGVmaW5lIFN0YXJ0dXBEYXRhQmFzZSgpCQlTdGFydENo aWxkUHJvY2VzcyhTdGFydHVwUHJvY2VzcykKLSNkZWZpbmUgU3RhcnRBcmNoaXZlcigpCQkJ U3RhcnRDaGlsZFByb2Nlc3MoQXJjaGl2ZXJQcm9jZXNzKQotI2RlZmluZSBTdGFydEJhY2tn cm91bmRXcml0ZXIoKSBTdGFydENoaWxkUHJvY2VzcyhCZ1dyaXRlclByb2Nlc3MpCi0jZGVm aW5lIFN0YXJ0Q2hlY2twb2ludGVyKCkJCVN0YXJ0Q2hpbGRQcm9jZXNzKENoZWNrcG9pbnRl clByb2Nlc3MpCi0jZGVmaW5lIFN0YXJ0V2FsV3JpdGVyKCkJCVN0YXJ0Q2hpbGRQcm9jZXNz KFdhbFdyaXRlclByb2Nlc3MpCi0jZGVmaW5lIFN0YXJ0V2FsUmVjZWl2ZXIoKQkJU3RhcnRD aGlsZFByb2Nlc3MoV2FsUmVjZWl2ZXJQcm9jZXNzKQorI2RlZmluZSBTdGFydHVwRGF0YUJh c2UoKQkJU3RhcnRDaGlsZFByb2Nlc3MoUE1DX1NUQVJUVVApCisjZGVmaW5lIFN0YXJ0QXJj aGl2ZXIoKQkJCVN0YXJ0Q2hpbGRQcm9jZXNzKFBNQ19BUkNISVZFUikKKyNkZWZpbmUgU3Rh cnRCYWNrZ3JvdW5kV3JpdGVyKCkgU3RhcnRDaGlsZFByb2Nlc3MoUE1DX0JHV1JJVEVSKQor I2RlZmluZSBTdGFydENoZWNrcG9pbnRlcigpCQlTdGFydENoaWxkUHJvY2VzcyhQTUNfQ0hF Q0tQT0lOVEVSKQorI2RlZmluZSBTdGFydFdhbFdyaXRlcigpCQlTdGFydENoaWxkUHJvY2Vz cyhQTUNfV0FMX1dSSVRFUikKKyNkZWZpbmUgU3RhcnRXYWxSZWNlaXZlcigpCQlTdGFydENo aWxkUHJvY2VzcyhQTUNfV0FMX1JFQ0VJVkVSKQorCisjZGVmaW5lIFN0YXJ0QXV0b1ZhY0xh dW5jaGVyKCkJU3RhcnRDaGlsZFByb2Nlc3MoUE1DX0FWX0xBVU5DSEVSKTsKKyNkZWZpbmUg U3RhcnRBdXRvVmFjV29ya2VyKCkJU3RhcnRDaGlsZFByb2Nlc3MoUE1DX0FWX1dPUktFUik7 CiAKIC8qIE1hY3JvcyB0byBjaGVjayBleGl0IHN0YXR1cyBvZiBhIGNoaWxkIHByb2Nlc3Mg Ki8KICNkZWZpbmUgRVhJVF9TVEFUVVNfMChzdCkgICgoc3QpID09IDApCkBAIC0xMTE1LDEx ICsxMDMzLDExIEBAIFBvc3RtYXN0ZXJNYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAK IAkvKgogCSAqIENsZWFuIG91dCB0aGUgdGVtcCBkaXJlY3RvcnkgdXNlZCB0byB0cmFuc21p dCBwYXJhbWV0ZXJzIHRvIGNoaWxkCi0JICogcHJvY2Vzc2VzIChzZWUgaW50ZXJuYWxfZm9y a2V4ZWMsIGJlbG93KS4gIFdlIG11c3QgZG8gdGhpcyBiZWZvcmUKLQkgKiBsYXVuY2hpbmcg YW55IGNoaWxkIHByb2Nlc3NlcywgZWxzZSB3ZSBoYXZlIGEgcmFjZSBjb25kaXRpb246IHdl IGNvdWxkCi0JICogcmVtb3ZlIGEgcGFyYW1ldGVyIGZpbGUgYmVmb3JlIHRoZSBjaGlsZCBj YW4gcmVhZCBpdC4gIEl0IHNob3VsZCBiZQotCSAqIHNhZmUgdG8gZG8gc28gbm93LCBiZWNh dXNlIHdlIHZlcmlmaWVkIGVhcmxpZXIgdGhhdCB0aGVyZSBhcmUgbm8KLQkgKiBjb25mbGlj dGluZyBQb3N0Z3JlcyBwcm9jZXNzZXMgaW4gdGhpcyBkYXRhIGRpcmVjdG9yeS4KKwkgKiBw cm9jZXNzZXMgKHNlZSBpbnRlcm5hbF9mb3JrZXhlYykuICBXZSBtdXN0IGRvIHRoaXMgYmVm b3JlIGxhdW5jaGluZworCSAqIGFueSBjaGlsZCBwcm9jZXNzZXMsIGVsc2Ugd2UgaGF2ZSBh IHJhY2UgY29uZGl0aW9uOiB3ZSBjb3VsZCByZW1vdmUgYQorCSAqIHBhcmFtZXRlciBmaWxl IGJlZm9yZSB0aGUgY2hpbGQgY2FuIHJlYWQgaXQuICBJdCBzaG91bGQgYmUgc2FmZSB0byBk bworCSAqIHNvIG5vdywgYmVjYXVzZSB3ZSB2ZXJpZmllZCBlYXJsaWVyIHRoYXQgdGhlcmUg YXJlIG5vIGNvbmZsaWN0aW5nCisJICogUG9zdGdyZXMgcHJvY2Vzc2VzIGluIHRoaXMgZGF0 YSBkaXJlY3RvcnkuCiAJICovCiAJUmVtb3ZlUGdUZW1wRmlsZXNJbkRpcihQR19URU1QX0ZJ TEVTX0RJUiwgdHJ1ZSwgZmFsc2UpOwogI2VuZGlmCkBAIC0zOTg5LDYgKzM5MDcsMTEgQEAg VGVybWluYXRlQ2hpbGRyZW4oaW50IHNpZ25hbCkKIAkJc2lnbmFsX2NoaWxkKFBnQXJjaFBJ RCwgc2lnbmFsKTsKIH0KIAordHlwZWRlZiBzdHJ1Y3QgQmFja2VuZFN0YXJ0dXBJbmZvCit7 CisJQ0FDX3N0YXRlCWNhbkFjY2VwdENvbm5lY3Rpb25zOworfQkJCUJhY2tlbmRTdGFydHVw SW5mbzsKKwogLyoKICAqIEJhY2tlbmRTdGFydHVwIC0tIHN0YXJ0IGJhY2tlbmQgcHJvY2Vz cwogICoKQEAgLTQwMDEsNyArMzkyNCw3IEBAIEJhY2tlbmRTdGFydHVwKENsaWVudFNvY2tl dCAqY2xpZW50X3NvY2spCiB7CiAJQmFja2VuZCAgICAqYm47CQkJCS8qIGZvciBiYWNrZW5k IGNsZWFudXAgKi8KIAlwaWRfdAkJcGlkOwotCUNBQ19zdGF0ZQljYWM7CisJQmFja2VuZFN0 YXJ0dXBJbmZvIGluZm87CiAKIAkvKgogCSAqIENyZWF0ZSBiYWNrZW5kIGRhdGEgc3RydWN0 dXJlLiAgQmV0dGVyIGJlZm9yZSB0aGUgZm9yaygpIHNvIHdlIGNhbgpAQCAtNDAzMCwxMSAr Mzk1MywxMCBAQCBCYWNrZW5kU3RhcnR1cChDbGllbnRTb2NrZXQgKmNsaWVudF9zb2NrKQog CQlyZXR1cm4gU1RBVFVTX0VSUk9SOwogCX0KIAotCWJuLT5jYW5jZWxfa2V5ID0gTXlDYW5j ZWxLZXk7Ci0KIAkvKiBQYXNzIGRvd24gY2FuQWNjZXB0Q29ubmVjdGlvbnMgc3RhdGUgKi8K LQljYWMgPSBjYW5BY2NlcHRDb25uZWN0aW9ucyhCQUNLRU5EX1RZUEVfTk9STUFMKTsKLQli bi0+ZGVhZF9lbmQgPSAoY2FjICE9IENBQ19PSyk7CisJaW5mby5jYW5BY2NlcHRDb25uZWN0 aW9ucyA9IGNhbkFjY2VwdENvbm5lY3Rpb25zKEJBQ0tFTkRfVFlQRV9OT1JNQUwpOworCWJu LT5kZWFkX2VuZCA9IChpbmZvLmNhbkFjY2VwdENvbm5lY3Rpb25zICE9IENBQ19PSyk7CisJ Ym4tPmNhbmNlbF9rZXkgPSBNeUNhbmNlbEtleTsKIAogCS8qCiAJICogVW5sZXNzIGl0J3Mg YSBkZWFkX2VuZCBjaGlsZCwgYXNzaWduIGl0IGEgY2hpbGQgc2xvdCBudW1iZXIKQEAgLTQw NDcsMjYgKzM5NjksNyBAQCBCYWNrZW5kU3RhcnR1cChDbGllbnRTb2NrZXQgKmNsaWVudF9z b2NrKQogCS8qIEhhc24ndCBhc2tlZCB0byBiZSBub3RpZmllZCBhYm91dCBhbnkgYmd3b3Jr ZXJzIHlldCAqLwogCWJuLT5iZ3dvcmtlcl9ub3RpZnkgPSBmYWxzZTsKIAotI2lmZGVmIEVY RUNfQkFDS0VORAotCXBpZCA9IGJhY2tlbmRfZm9ya2V4ZWMoY2xpZW50X3NvY2ssIGNhYyk7 Ci0jZWxzZQkJCQkJCQkvKiAhRVhFQ19CQUNLRU5EICovCi0JcGlkID0gZm9ya19wcm9jZXNz KCk7Ci0JaWYgKHBpZCA9PSAwKQkJCQkvKiBjaGlsZCAqLwotCXsKLQkJLyogRGV0YW5nbGUg ZnJvbSBwb3N0bWFzdGVyICovCi0JCUluaXRQb3N0bWFzdGVyQ2hpbGQoKTsKLQotCQkvKiBD bG9zZSB0aGUgcG9zdG1hc3RlcidzIHNvY2tldHMgKi8KLQkJQ2xvc2VQb3N0bWFzdGVyUG9y dHMoZmFsc2UpOwotCi0JCS8qIFBlcmZvcm0gYWRkaXRpb25hbCBpbml0aWFsaXphdGlvbiBh bmQgY29sbGVjdCBzdGFydHVwIHBhY2tldCAqLwotCQlCYWNrZW5kSW5pdGlhbGl6ZShjbGll bnRfc29jaywgY2FjKTsKLQotCQkvKiBBbmQgcnVuIHRoZSBiYWNrZW5kICovCi0JCUJhY2tl bmRSdW4oKTsKLQl9Ci0jZW5kaWYJCQkJCQkJLyogRVhFQ19CQUNLRU5EICovCi0KKwlwaWQg PSBwb3N0bWFzdGVyX2NoaWxkX2xhdW5jaChQTUNfQkFDS0VORCwgKGNoYXIgKikgJmluZm8s IHNpemVvZihpbmZvKSwgY2xpZW50X3NvY2spOwogCWlmIChwaWQgPCAwKQogCXsKIAkJLyog aW4gcGFyZW50LCBmb3JrIGZhaWxlZCAqLwpAQCAtNDEwMyw2ICs0MDA2LDYxIEBAIEJhY2tl bmRTdGFydHVwKENsaWVudFNvY2tldCAqY2xpZW50X3NvY2spCiAJcmV0dXJuIFNUQVRVU19P SzsKIH0KIAordm9pZAorQmFja2VuZE1haW4oY2hhciAqc3RhcnR1cF9kYXRhLCBzaXplX3Qg c3RhcnR1cF9kYXRhX2xlbikKK3sKKwlCYWNrZW5kU3RhcnR1cEluZm8gKmluZm8gPSAoQmFj a2VuZFN0YXJ0dXBJbmZvICopIHN0YXJ0dXBfZGF0YTsKKworCUFzc2VydChzdGFydHVwX2Rh dGFfbGVuID09IHNpemVvZihCYWNrZW5kU3RhcnR1cEluZm8pKTsKKwlBc3NlcnQoTXlDbGll bnRTb2NrZXQgIT0gTlVMTCk7CisKKyNpZmRlZiBFWEVDX0JBQ0tFTkQKKworCS8qCisJICog TmVlZCB0byByZWluaXRpYWxpemUgdGhlIFNTTCBsaWJyYXJ5IGluIHRoZSBiYWNrZW5kLCBz aW5jZSB0aGUgY29udGV4dAorCSAqIHN0cnVjdHVyZXMgY29udGFpbiBmdW5jdGlvbiBwb2lu dGVycyBhbmQgY2Fubm90IGJlIHBhc3NlZCB0aHJvdWdoIHRoZQorCSAqIHBhcmFtZXRlciBm aWxlLgorCSAqCisJICogSWYgZm9yIHNvbWUgcmVhc29uIHJlbG9hZCBmYWlscyAobWF5YmUg dGhlIHVzZXIgaW5zdGFsbGVkIGJyb2tlbiBrZXkKKwkgKiBmaWxlcyksIHNvbGRpZXIgb24g d2l0aG91dCBTU0w7IHRoYXQncyBiZXR0ZXIgdGhhbiBhbGwgY29ubmVjdGlvbnMKKwkgKiBi ZWNvbWluZyBpbXBvc3NpYmxlLgorCSAqCisJICogWFhYIHNob3VsZCB3ZSBkbyB0aGlzIGlu IGFsbCBjaGlsZCBwcm9jZXNzZXM/ICBGb3IgdGhlIG1vbWVudCBpdCdzCisJICogZW5vdWdo IHRvIGRvIGl0IGluIGJhY2tlbmQgY2hpbGRyZW4uCisJICovCisjaWZkZWYgVVNFX1NTTAor CWlmIChFbmFibGVTU0wpCisJeworCQlpZiAoc2VjdXJlX2luaXRpYWxpemUoZmFsc2UpID09 IDApCisJCQlMb2FkZWRTU0wgPSB0cnVlOworCQllbHNlCisJCQllcmVwb3J0KExPRywKKwkJ CQkJKGVycm1zZygiU1NMIGNvbmZpZ3VyYXRpb24gY291bGQgbm90IGJlIGxvYWRlZCBpbiBj aGlsZCBwcm9jZXNzIikpKTsKKwl9CisjZW5kaWYKKyNlbmRpZgorCisJLyogUGVyZm9ybSBh ZGRpdGlvbmFsIGluaXRpYWxpemF0aW9uIGFuZCBjb2xsZWN0IHN0YXJ0dXAgcGFja2V0ICov CisJQmFja2VuZEluaXRpYWxpemUoTXlDbGllbnRTb2NrZXQsIGluZm8tPmNhbkFjY2VwdENv bm5lY3Rpb25zKTsKKworCS8qCisJICogQ3JlYXRlIGEgcGVyLWJhY2tlbmQgUEdQUk9DIHN0 cnVjdCBpbiBzaGFyZWQgbWVtb3J5LiAgV2UgbXVzdCBkbyB0aGlzCisJICogYmVmb3JlIHdl IGNhbiB1c2UgTFdMb2Nrcy4KKwkgKi8KKwlJbml0UHJvY2VzcygpOworCisJLyogQXR0YWNo IHByb2Nlc3MgdG8gc2hhcmVkIGRhdGEgc3RydWN0dXJlcyAqLworCUF0dGFjaFNoYXJlZE1l bW9yeUFuZFNlbWFwaG9yZXMoKTsKKworCS8qCisJICogTWFrZSBzdXJlIHdlIGFyZW4ndCBp biBQb3N0bWFzdGVyQ29udGV4dCBhbnltb3JlLiAgKFdlIGNhbid0IGRlbGV0ZSBpdAorCSAq IGp1c3QgeWV0LCB0aG91Z2gsIGJlY2F1c2UgSW5pdFBvc3RncmVzIHdpbGwgbmVlZCB0aGUg SEJBIGRhdGEuKQorCSAqLworCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhUb3BNZW1vcnlDb250 ZXh0KTsKKworCVBvc3RncmVzTWFpbihNeVByb2NQb3J0LT5kYXRhYmFzZV9uYW1lLCBNeVBy b2NQb3J0LT51c2VyX25hbWUpOworfQorCiAvKgogICogVHJ5IHRvIHJlcG9ydCBiYWNrZW5k IGZvcmsoKSBmYWlsdXJlIHRvIGNsaWVudCBiZWZvcmUgd2UgY2xvc2UgdGhlCiAgKiBjb25u ZWN0aW9uLiAgU2luY2Ugd2UgZG8gbm90IGNhcmUgdG8gcmlzayBibG9ja2luZyB0aGUgcG9z dG1hc3RlciBvbgpAQCAtNDM3OCw3MzIgKzQzMzYsMTYxIEBAIEJhY2tlbmRJbml0aWFsaXpl KENsaWVudFNvY2tldCAqY2xpZW50X3NvY2ssIENBQ19zdGF0ZSBjYWMpCiAKIAogLyoKLSAq IEJhY2tlbmRSdW4gLS0gc2V0IHVwIHRoZSBiYWNrZW5kJ3MgYXJndW1lbnQgbGlzdCBhbmQg aW52b2tlIFBvc3RncmVzTWFpbigpCisgKiBFeGl0UG9zdG1hc3RlciAtLSBjbGVhbnVwCiAg KgotICogcmV0dXJuczoKLSAqCQlEb2Vzbid0IHJldHVybiBhdCBhbGwuCisgKiBEbyBOT1Qg Y2FsbCBleGl0KCkgZGlyZWN0bHkgLS0tIGFsd2F5cyBnbyB0aHJvdWdoIGhlcmUhCiAgKi8K IHN0YXRpYyB2b2lkCi1CYWNrZW5kUnVuKHZvaWQpCitFeGl0UG9zdG1hc3RlcihpbnQgc3Rh dHVzKQogeworI2lmZGVmIEhBVkVfUFRIUkVBRF9JU19USFJFQURFRF9OUAorCiAJLyoKLQkg KiBDcmVhdGUgYSBwZXItYmFja2VuZCBQR1BST0Mgc3RydWN0IGluIHNoYXJlZCBtZW1vcnku ICBXZSBtdXN0IGRvIHRoaXMKLQkgKiBiZWZvcmUgd2UgY2FuIHVzZSBMV0xvY2tzIChpbiBB dHRhY2hTaGFyZWRNZW1vcnlBbmRTZW1hcGhvcmVzKS4KKwkgKiBUaGVyZSBpcyBubyBrbm93 biBjYXVzZSBmb3IgYSBwb3N0bWFzdGVyIHRvIGJlY29tZSBtdWx0aXRocmVhZGVkIGFmdGVy CisJICogc3RhcnR1cC4gIFJlY2hlY2sgdG8gYWNjb3VudCBmb3IgdGhlIHBvc3NpYmlsaXR5 IG9mIHVua25vd24gY2F1c2VzLgorCSAqIFRoaXMgbWVzc2FnZSB1c2VzIExPRyBsZXZlbCwg YmVjYXVzZSBhbiB1bmNsZWFuIHNodXRkb3duIGF0IHRoaXMgcG9pbnQKKwkgKiB3b3VsZCB1 c3VhbGx5IG5vdCBsb29rIG11Y2ggZGlmZmVyZW50IGZyb20gYSBjbGVhbiBzaHV0ZG93bi4K IAkgKi8KLQlJbml0UHJvY2VzcygpOworCWlmIChwdGhyZWFkX2lzX3RocmVhZGVkX25wKCkg IT0gMCkKKwkJZXJlcG9ydChMT0csCisJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlRFUk5BTF9F UlJPUiksCisJCQkJIGVycm1zZ19pbnRlcm5hbCgicG9zdG1hc3RlciBiZWNhbWUgbXVsdGl0 aHJlYWRlZCIpLAorCQkJCSBlcnJkZXRhaWwoIlBsZWFzZSByZXBvcnQgdGhpcyB0byA8JXM+ LiIsIFBBQ0tBR0VfQlVHUkVQT1JUKSkpOworI2VuZGlmCiAKLQkvKiBBdHRhY2ggcHJvY2Vz cyB0byBzaGFyZWQgZGF0YSBzdHJ1Y3R1cmVzICovCi0JQXR0YWNoU2hhcmVkTWVtb3J5QW5k U2VtYXBob3JlcygpOworCS8qIHNob3VsZCBjbGVhbnVwIHNoYXJlZCBtZW1vcnkgYW5kIGtp bGwgYWxsIGJhY2tlbmRzICovCiAKIAkvKgotCSAqIE1ha2Ugc3VyZSB3ZSBhcmVuJ3QgaW4g UG9zdG1hc3RlckNvbnRleHQgYW55bW9yZS4gIChXZSBjYW4ndCBkZWxldGUgaXQKLQkgKiBq dXN0IHlldCwgdGhvdWdoLCBiZWNhdXNlIEluaXRQb3N0Z3JlcyB3aWxsIG5lZWQgdGhlIEhC QSBkYXRhLikKKwkgKiBOb3Qgc3VyZSBvZiB0aGUgc2VtYW50aWNzIGhlcmUuICBXaGVuIHRo ZSBQb3N0bWFzdGVyIGRpZXMsIHNob3VsZCB0aGUKKwkgKiBiYWNrZW5kcyBhbGwgYmUga2ls bGVkPyBwcm9iYWJseSBub3QuCisJICoKKwkgKiBNVVNUCQktLSB2YWRpbSAwNS0xMC0xOTk5 CiAJICovCi0JTWVtb3J5Q29udGV4dFN3aXRjaFRvKFRvcE1lbW9yeUNvbnRleHQpOwotCi0J UG9zdGdyZXNNYWluKE15UHJvY1BvcnQtPmRhdGFiYXNlX25hbWUsIE15UHJvY1BvcnQtPnVz ZXJfbmFtZSk7Ci19Ci0KLQotI2lmZGVmIEVYRUNfQkFDS0VORAotCi0vKgotICogcG9zdG1h c3Rlcl9mb3JrZXhlYyAtLSBmb3JrIGFuZCBleGVjIGEgcG9zdG1hc3RlciBzdWJwcm9jZXNz Ci0gKgotICogVGhlIGNhbGxlciBtdXN0IGhhdmUgc2V0IHVwIHRoZSBhcmd2IGFycmF5IGFs cmVhZHksIGV4Y2VwdCBmb3IgYXJndlsyXQotICogd2hpY2ggd2lsbCBiZSBmaWxsZWQgd2l0 aCB0aGUgbmFtZSBvZiB0aGUgdGVtcCB2YXJpYWJsZSBmaWxlLgotICoKLSAqIFJldHVybnMg dGhlIGNoaWxkIHByb2Nlc3MgUElELCBvciAtMSBvbiBmb3JrIGZhaWx1cmUgKGEgc3VpdGFi bGUgZXJyb3IKLSAqIG1lc3NhZ2UgaGFzIGJlZW4gbG9nZ2VkIG9uIGZhaWx1cmUpLgotICoK LSAqIEFsbCB1c2VzIG9mIHRoaXMgcm91dGluZSB3aWxsIGRpc3BhdGNoIHRvIFN1YlBvc3Rt YXN0ZXJNYWluIGluIHRoZQotICogY2hpbGQgcHJvY2Vzcy4KLSAqLwotcGlkX3QKLXBvc3Rt YXN0ZXJfZm9ya2V4ZWMoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKLXsKLQlDbGllbnRTb2Nr ZXQgY2xpZW50X3NvY2s7Ci0KLQkvKiBUaGlzIGVudHJ5IHBvaW50IGRvZXNuJ3QgcGFzcyBh IGNsaWVudCBzb2NrZXQgKi8KLQltZW1zZXQoJmNsaWVudF9zb2NrLCAwLCBzaXplb2YoQ2xp ZW50U29ja2V0KSk7Ci0JcmV0dXJuIGludGVybmFsX2ZvcmtleGVjKGFyZ2MsIGFyZ3YsICZj bGllbnRfc29jayk7Ci19Ci0KLS8qCi0gKiBiYWNrZW5kX2ZvcmtleGVjIC0tIGZvcmsvZXhl YyBvZmYgYSBiYWNrZW5kIHByb2Nlc3MKLSAqCi0gKiBTb21lIG9wZXJhdGluZyBzeXN0ZW1z IChXSU4zMikgZG9uJ3QgaGF2ZSBmb3JrKCkgc28gd2UgaGF2ZSB0byBzaW11bGF0ZQotICog aXQgYnkgc3RvcmluZyBwYXJhbWV0ZXJzIHRoYXQgbmVlZCB0byBiZSBwYXNzZWQgdG8gdGhl IGNoaWxkIGFuZAotICogdGhlbiBjcmVhdGUgYSBuZXcgY2hpbGQgcHJvY2Vzcy4KLSAqCi0g KiByZXR1cm5zIHRoZSBwaWQgb2YgdGhlIGZvcmsvZXhlYydkIHByb2Nlc3MsIG9yIC0xIG9u IGZhaWx1cmUKLSAqLwotc3RhdGljIHBpZF90Ci1iYWNrZW5kX2ZvcmtleGVjKENsaWVudFNv Y2tldCAqY2xpZW50X3NvY2ssIENBQ19zdGF0ZSBjYWMpCi17Ci0JY2hhcgkgICAqYXZbNV07 Ci0JaW50CQkJYWMgPSAwOwotCWNoYXIJCWNhY2J1ZlsxMF07CiAKLQlhdlthYysrXSA9ICJw b3N0Z3JlcyI7Ci0JYXZbYWMrK10gPSAiLS1mb3JrYmFja2VuZCI7Ci0JYXZbYWMrK10gPSBO VUxMOwkJCS8qIGZpbGxlZCBpbiBieSBpbnRlcm5hbF9mb3JrZXhlYyAqLwotCi0Jc25wcmlu dGYoY2FjYnVmLCBzaXplb2YoY2FjYnVmKSwgIiVkIiwgKGludCkgY2FjKTsKLQlhdlthYysr XSA9IGNhY2J1ZjsKLQotCWF2W2FjXSA9IE5VTEw7Ci0JQXNzZXJ0KGFjIDwgbGVuZ3Rob2Yo YXYpKTsKLQotCXJldHVybiBpbnRlcm5hbF9mb3JrZXhlYyhhYywgYXYsIGNsaWVudF9zb2Nr KTsKKwlwcm9jX2V4aXQoc3RhdHVzKTsKIH0KIAotI2lmbmRlZiBXSU4zMgotCiAvKgotICog aW50ZXJuYWxfZm9ya2V4ZWMgbm9uLXdpbjMyIGltcGxlbWVudGF0aW9uCi0gKgotICogLSB3 cml0ZXMgb3V0IGJhY2tlbmQgdmFyaWFibGVzIHRvIHRoZSBwYXJhbWV0ZXIgZmlsZQotICog LSBmb3JrKCk6cywgYW5kIHRoZW4gZXhlYygpOnMgdGhlIGNoaWxkIHByb2Nlc3MKKyAqIEhh bmRsZSBwbXNpZ25hbCBjb25kaXRpb25zIHJlcHJlc2VudGluZyByZXF1ZXN0cyBmcm9tIGJh Y2tlbmRzLAorICogYW5kIGNoZWNrIGZvciBwcm9tb3RlIGFuZCBsb2dyb3RhdGUgcmVxdWVz dHMgZnJvbSBwZ19jdGwuCiAgKi8KLXN0YXRpYyBwaWRfdAotaW50ZXJuYWxfZm9ya2V4ZWMo aW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSwgQ2xpZW50U29ja2V0ICpjbGllbnRfc29jaykKK3N0 YXRpYyB2b2lkCitwcm9jZXNzX3BtX3Btc2lnbmFsKHZvaWQpCiB7Ci0Jc3RhdGljIHVuc2ln bmVkIGxvbmcgdG1wQmFja2VuZEZpbGVOdW0gPSAwOwotCXBpZF90CQlwaWQ7Ci0JY2hhcgkJ dG1wZmlsZW5hbWVbTUFYUEdQQVRIXTsKLQlCYWNrZW5kUGFyYW1ldGVycyBwYXJhbTsKLQlG SUxFCSAgICpmcDsKLQotCWlmICghc2F2ZV9iYWNrZW5kX3ZhcmlhYmxlcygmcGFyYW0sIGNs aWVudF9zb2NrKSkKLQkJcmV0dXJuIC0xOwkJCQkvKiBsb2cgbWFkZSBieSBzYXZlX2JhY2tl bmRfdmFyaWFibGVzICovCisJcGVuZGluZ19wbV9wbXNpZ25hbCA9IGZhbHNlOwogCi0JLyog Q2FsY3VsYXRlIG5hbWUgZm9yIHRlbXAgZmlsZSAqLwotCXNucHJpbnRmKHRtcGZpbGVuYW1l LCBNQVhQR1BBVEgsICIlcy8lcy5iYWNrZW5kX3Zhci4lZC4lbHUiLAotCQkJIFBHX1RFTVBf RklMRVNfRElSLCBQR19URU1QX0ZJTEVfUFJFRklYLAotCQkJIE15UHJvY1BpZCwgKyt0bXBC YWNrZW5kRmlsZU51bSk7CisJZXJlcG9ydChERUJVRzIsCisJCQkoZXJybXNnX2ludGVybmFs KCJwb3N0bWFzdGVyIHJlY2VpdmVkIHBtc2lnbmFsIHNpZ25hbCIpKSk7CiAKLQkvKiBPcGVu IGZpbGUgKi8KLQlmcCA9IEFsbG9jYXRlRmlsZSh0bXBmaWxlbmFtZSwgUEdfQklOQVJZX1cp OwotCWlmICghZnApCisJLyoKKwkgKiBSRUNPVkVSWV9TVEFSVEVEIGFuZCBCRUdJTl9IT1Rf U1RBTkRCWSBzaWduYWxzIGFyZSBpZ25vcmVkIGluCisJICogdW5leHBlY3RlZCBzdGF0ZXMu IElmIHRoZSBzdGFydHVwIHByb2Nlc3MgcXVpY2tseSBzdGFydHMgdXAsIGNvbXBsZXRlcwor CSAqIHJlY292ZXJ5LCBleGl0cywgd2UgbWlnaHQgcHJvY2VzcyB0aGUgZGVhdGggb2YgdGhl IHN0YXJ0dXAgcHJvY2VzcworCSAqIGZpcnN0LiBXZSBkb24ndCB3YW50IHRvIGdvIGJhY2sg dG8gcmVjb3ZlcnkgaW4gdGhhdCBjYXNlLgorCSAqLworCWlmIChDaGVja1Bvc3RtYXN0ZXJT aWduYWwoUE1TSUdOQUxfUkVDT1ZFUllfU1RBUlRFRCkgJiYKKwkJcG1TdGF0ZSA9PSBQTV9T VEFSVFVQICYmIFNodXRkb3duID09IE5vU2h1dGRvd24pCiAJeworCQkvKiBXQUwgcmVkbyBo YXMgc3RhcnRlZC4gV2UncmUgb3V0IG9mIHJlaW5pdGlhbGl6YXRpb24uICovCisJCUZhdGFs RXJyb3IgPSBmYWxzZTsKKwkJQWJvcnRTdGFydFRpbWUgPSAwOworCiAJCS8qCi0JCSAqIEFz IGluIE9wZW5UZW1wb3JhcnlGaWxlSW5UYWJsZXNwYWNlLCB0cnkgdG8gbWFrZSB0aGUgdGVt cC1maWxlCi0JCSAqIGRpcmVjdG9yeSwgaWdub3JpbmcgZXJyb3JzLgorCQkgKiBTdGFydCB0 aGUgYXJjaGl2ZXIgaWYgd2UncmUgcmVzcG9uc2libGUgZm9yIChyZS0pYXJjaGl2aW5nIHJl Y2VpdmVkCisJCSAqIGZpbGVzLgogCQkgKi8KLQkJKHZvaWQpIE1ha2VQR0RpcmVjdG9yeShQ R19URU1QX0ZJTEVTX0RJUik7CisJCUFzc2VydChQZ0FyY2hQSUQgPT0gMCk7CisJCWlmIChY TG9nQXJjaGl2aW5nQWx3YXlzKCkpCisJCQlQZ0FyY2hQSUQgPSBTdGFydEFyY2hpdmVyKCk7 CiAKLQkJZnAgPSBBbGxvY2F0ZUZpbGUodG1wZmlsZW5hbWUsIFBHX0JJTkFSWV9XKTsKLQkJ aWYgKCFmcCkKKwkJLyoKKwkJICogSWYgd2UgYXJlbid0IHBsYW5uaW5nIHRvIGVudGVyIGhv dCBzdGFuZGJ5IG1vZGUgbGF0ZXIsIHRyZWF0CisJCSAqIFJFQ09WRVJZX1NUQVJURUQgYXMg bWVhbmluZyB3ZSdyZSBvdXQgb2Ygc3RhcnR1cCwgYW5kIHJlcG9ydCBzdGF0dXMKKwkJICog YWNjb3JkaW5nbHkuCisJCSAqLworCQlpZiAoIUVuYWJsZUhvdFN0YW5kYnkpCiAJCXsKLQkJ CWVyZXBvcnQoTE9HLAotCQkJCQkoZXJyY29kZV9mb3JfZmlsZV9hY2Nlc3MoKSwKLQkJCQkJ IGVycm1zZygiY291bGQgbm90IGNyZWF0ZSBmaWxlIFwiJXNcIjogJW0iLAotCQkJCQkJCXRt cGZpbGVuYW1lKSkpOwotCQkJcmV0dXJuIC0xOworCQkJQWRkVG9EYXRhRGlyTG9ja0ZpbGUo TE9DS19GSUxFX0xJTkVfUE1fU1RBVFVTLCBQTV9TVEFUVVNfU1RBTkRCWSk7CisjaWZkZWYg VVNFX1NZU1RFTUQKKwkJCXNkX25vdGlmeSgwLCAiUkVBRFk9MSIpOworI2VuZGlmCiAJCX0K KworCQlwbVN0YXRlID0gUE1fUkVDT1ZFUlk7CiAJfQogCi0JaWYgKGZ3cml0ZSgmcGFyYW0s IHNpemVvZihwYXJhbSksIDEsIGZwKSAhPSAxKQorCWlmIChDaGVja1Bvc3RtYXN0ZXJTaWdu YWwoUE1TSUdOQUxfQkVHSU5fSE9UX1NUQU5EQlkpICYmCisJCXBtU3RhdGUgPT0gUE1fUkVD T1ZFUlkgJiYgU2h1dGRvd24gPT0gTm9TaHV0ZG93bikKIAl7CiAJCWVyZXBvcnQoTE9HLAot CQkJCShlcnJjb2RlX2Zvcl9maWxlX2FjY2VzcygpLAotCQkJCSBlcnJtc2coImNvdWxkIG5v dCB3cml0ZSB0byBmaWxlIFwiJXNcIjogJW0iLCB0bXBmaWxlbmFtZSkpKTsKLQkJRnJlZUZp bGUoZnApOwotCQlyZXR1cm4gLTE7CisJCQkJKGVycm1zZygiZGF0YWJhc2Ugc3lzdGVtIGlz IHJlYWR5IHRvIGFjY2VwdCByZWFkLW9ubHkgY29ubmVjdGlvbnMiKSkpOworCisJCS8qIFJl cG9ydCBzdGF0dXMgKi8KKwkJQWRkVG9EYXRhRGlyTG9ja0ZpbGUoTE9DS19GSUxFX0xJTkVf UE1fU1RBVFVTLCBQTV9TVEFUVVNfUkVBRFkpOworI2lmZGVmIFVTRV9TWVNURU1ECisJCXNk X25vdGlmeSgwLCAiUkVBRFk9MSIpOworI2VuZGlmCisKKwkJcG1TdGF0ZSA9IFBNX0hPVF9T VEFOREJZOworCQljb25uc0FsbG93ZWQgPSB0cnVlOworCisJCS8qIFNvbWUgd29ya2VycyBt YXkgYmUgc2NoZWR1bGVkIHRvIHN0YXJ0IG5vdyAqLworCQlTdGFydFdvcmtlck5lZWRlZCA9 IHRydWU7CiAJfQogCi0JLyogUmVsZWFzZSBmaWxlICovCi0JaWYgKEZyZWVGaWxlKGZwKSkK KwkvKiBQcm9jZXNzIGJhY2tncm91bmQgd29ya2VyIHN0YXRlIGNoYW5nZXMuICovCisJaWYg KENoZWNrUG9zdG1hc3RlclNpZ25hbChQTVNJR05BTF9CQUNLR1JPVU5EX1dPUktFUl9DSEFO R0UpKQogCXsKLQkJZXJlcG9ydChMT0csCi0JCQkJKGVycmNvZGVfZm9yX2ZpbGVfYWNjZXNz KCksCi0JCQkJIGVycm1zZygiY291bGQgbm90IHdyaXRlIHRvIGZpbGUgXCIlc1wiOiAlbSIs IHRtcGZpbGVuYW1lKSkpOwotCQlyZXR1cm4gLTE7CisJCS8qIEFjY2VwdCBuZXcgd29ya2Vy IHJlcXVlc3RzIG9ubHkgaWYgbm90IHN0b3BwaW5nLiAqLworCQlCYWNrZ3JvdW5kV29ya2Vy U3RhdGVDaGFuZ2UocG1TdGF0ZSA8IFBNX1NUT1BfQkFDS0VORFMpOworCQlTdGFydFdvcmtl ck5lZWRlZCA9IHRydWU7CiAJfQogCi0JLyogTWFrZSBzdXJlIGNhbGxlciBzZXQgdXAgYXJn diBwcm9wZXJseSAqLwotCUFzc2VydChhcmdjID49IDMpOwotCUFzc2VydChhcmd2W2FyZ2Nd ID09IE5VTEwpOwotCUFzc2VydChzdHJuY21wKGFyZ3ZbMV0sICItLWZvcmsiLCA2KSA9PSAw KTsKLQlBc3NlcnQoYXJndlsyXSA9PSBOVUxMKTsKLQotCS8qIEluc2VydCB0ZW1wIGZpbGUg bmFtZSBhZnRlciAtLWZvcmsgYXJndW1lbnQgKi8KLQlhcmd2WzJdID0gdG1wZmlsZW5hbWU7 CisJaWYgKFN0YXJ0V29ya2VyTmVlZGVkIHx8IEhhdmVDcmFzaGVkV29ya2VyKQorCQltYXli ZV9zdGFydF9iZ3dvcmtlcnMoKTsKIAotCS8qIEZpcmUgb2ZmIGV4ZWN2IGluIGNoaWxkICov Ci0JaWYgKChwaWQgPSBmb3JrX3Byb2Nlc3MoKSkgPT0gMCkKKwkvKiBUZWxsIHN5c2xvZ2dl ciB0byByb3RhdGUgbG9nZmlsZSBpZiByZXF1ZXN0ZWQgKi8KKwlpZiAoU3lzTG9nZ2VyUElE ICE9IDApCiAJewotCQlpZiAoZXhlY3YocG9zdGdyZXNfZXhlY19wYXRoLCBhcmd2KSA8IDAp CisJCWlmIChDaGVja0xvZ3JvdGF0ZVNpZ25hbCgpKQogCQl7Ci0JCQllcmVwb3J0KExPRywK LQkJCQkJKGVycm1zZygiY291bGQgbm90IGV4ZWN1dGUgc2VydmVyIHByb2Nlc3MgXCIlc1wi OiAlbSIsCi0JCQkJCQkJcG9zdGdyZXNfZXhlY19wYXRoKSkpOwotCQkJLyogV2UncmUgYWxy ZWFkeSBpbiB0aGUgY2hpbGQgcHJvY2VzcyBoZXJlLCBjYW4ndCByZXR1cm4gKi8KLQkJCWV4 aXQoMSk7CisJCQlzaWduYWxfY2hpbGQoU3lzTG9nZ2VyUElELCBTSUdVU1IxKTsKKwkJCVJl bW92ZUxvZ3JvdGF0ZVNpZ25hbEZpbGVzKCk7CisJCX0KKwkJZWxzZSBpZiAoQ2hlY2tQb3N0 bWFzdGVyU2lnbmFsKFBNU0lHTkFMX1JPVEFURV9MT0dGSUxFKSkKKwkJeworCQkJc2lnbmFs X2NoaWxkKFN5c0xvZ2dlclBJRCwgU0lHVVNSMSk7CiAJCX0KIAl9CiAKLQlyZXR1cm4gcGlk OwkJCQkJLyogUGFyZW50IHJldHVybnMgcGlkLCBvciAtMSBvbiBmb3JrIGZhaWx1cmUgKi8K LX0KLSNlbHNlCQkJCQkJCS8qIFdJTjMyICovCi0KLS8qCi0gKiBpbnRlcm5hbF9mb3JrZXhl YyB3aW4zMiBpbXBsZW1lbnRhdGlvbgotICoKLSAqIC0gc3RhcnRzIGJhY2tlbmQgdXNpbmcg Q3JlYXRlUHJvY2VzcygpLCBpbiBzdXNwZW5kZWQgc3RhdGUKLSAqIC0gd3JpdGVzIG91dCBi YWNrZW5kIHZhcmlhYmxlcyB0byB0aGUgcGFyYW1ldGVyIGZpbGUKLSAqCS0gZHVyaW5nIHRo aXMsIGR1cGxpY2F0ZXMgaGFuZGxlcyBhbmQgc29ja2V0cyByZXF1aXJlZCBmb3IKLSAqCSAg aW5oZXJpdGFuY2UgaW50byB0aGUgbmV3IHByb2Nlc3MKLSAqIC0gcmVzdW1lcyBleGVjdXRp b24gb2YgdGhlIG5ldyBwcm9jZXNzIG9uY2UgdGhlIGJhY2tlbmQgcGFyYW1ldGVyCi0gKgkg ZmlsZSBpcyBjb21wbGV0ZS4KLSAqLwotc3RhdGljIHBpZF90Ci1pbnRlcm5hbF9mb3JrZXhl YyhpbnQgYXJnYywgY2hhciAqYXJndltdLCBQb3J0ICpwb3J0KQotewotCWludAkJCXJldHJ5 X2NvdW50ID0gMDsKLQlTVEFSVFVQSU5GTyBzaTsKLQlQUk9DRVNTX0lORk9STUFUSU9OIHBp OwotCWludAkJCWk7Ci0JaW50CQkJajsKLQljaGFyCQljbWRMaW5lW01BWFBHUEFUSCAqIDJd OwotCUhBTkRMRQkJcGFyYW1IYW5kbGU7Ci0JQmFja2VuZFBhcmFtZXRlcnMgKnBhcmFtOwot CVNFQ1VSSVRZX0FUVFJJQlVURVMgc2E7Ci0JY2hhcgkJcGFyYW1IYW5kbGVTdHJbMzJdOwot CXdpbjMyX2RlYWRjaGlsZF93YWl0aW5mbyAqY2hpbGRpbmZvOwotCi0JLyogTWFrZSBzdXJl IGNhbGxlciBzZXQgdXAgYXJndiBwcm9wZXJseSAqLwotCUFzc2VydChhcmdjID49IDMpOwot CUFzc2VydChhcmd2W2FyZ2NdID09IE5VTEwpOwotCUFzc2VydChzdHJuY21wKGFyZ3ZbMV0s ICItLWZvcmsiLCA2KSA9PSAwKTsKLQlBc3NlcnQoYXJndlsyXSA9PSBOVUxMKTsKLQotCS8q IFJlc3VtZSBoZXJlIGlmIHdlIG5lZWQgdG8gcmV0cnkgKi8KLXJldHJ5OgotCi0JLyogU2V0 IHVwIHNoYXJlZCBtZW1vcnkgZm9yIHBhcmFtZXRlciBwYXNzaW5nICovCi0JWmVyb01lbW9y eSgmc2EsIHNpemVvZihzYSkpOwotCXNhLm5MZW5ndGggPSBzaXplb2Yoc2EpOwotCXNhLmJJ bmhlcml0SGFuZGxlID0gVFJVRTsKLQlwYXJhbUhhbmRsZSA9IENyZWF0ZUZpbGVNYXBwaW5n KElOVkFMSURfSEFORExFX1ZBTFVFLAotCQkJCQkJCQkJJnNhLAotCQkJCQkJCQkJUEFHRV9S RUFEV1JJVEUsCi0JCQkJCQkJCQkwLAotCQkJCQkJCQkJc2l6ZW9mKEJhY2tlbmRQYXJhbWV0 ZXJzKSwKLQkJCQkJCQkJCU5VTEwpOwotCWlmIChwYXJhbUhhbmRsZSA9PSBJTlZBTElEX0hB TkRMRV9WQUxVRSkKKwlpZiAoQ2hlY2tQb3N0bWFzdGVyU2lnbmFsKFBNU0lHTkFMX1NUQVJU X0FVVE9WQUNfTEFVTkNIRVIpICYmCisJCVNodXRkb3duIDw9IFNtYXJ0U2h1dGRvd24gJiYg cG1TdGF0ZSA8IFBNX1NUT1BfQkFDS0VORFMpCiAJewotCQllcmVwb3J0KExPRywKLQkJCQko ZXJybXNnKCJjb3VsZCBub3QgY3JlYXRlIGJhY2tlbmQgcGFyYW1ldGVyIGZpbGUgbWFwcGlu ZzogZXJyb3IgY29kZSAlbHUiLAotCQkJCQkJR2V0TGFzdEVycm9yKCkpKSk7Ci0JCXJldHVy biAtMTsKKwkJLyoKKwkJICogU3RhcnQgb25lIGl0ZXJhdGlvbiBvZiB0aGUgYXV0b3ZhY3V1 bSBkYWVtb24sIGV2ZW4gaWYgYXV0b3ZhY3V1bWluZworCQkgKiBpcyBub21pbmFsbHkgbm90 IGVuYWJsZWQuICBUaGlzIGlzIHNvIHdlIGNhbiBoYXZlIGFuIGFjdGl2ZSBkZWZlbnNlCisJ CSAqIGFnYWluc3QgdHJhbnNhY3Rpb24gSUQgd3JhcGFyb3VuZC4gIFdlIHNldCBhIGZsYWcg Zm9yIHRoZSBtYWluIGxvb3AKKwkJICogdG8gZG8gaXQgcmF0aGVyIHRoYW4gdHJ5aW5nIHRv IGRvIGl0IGhlcmUgLS0tIHRoaXMgaXMgYmVjYXVzZSB0aGUKKwkJICogYXV0b3ZhYyBwcm9j ZXNzIGl0c2VsZiBtYXkgc2VuZCB0aGUgc2lnbmFsLCBhbmQgd2Ugd2FudCB0byBoYW5kbGUK KwkJICogdGhhdCBieSBsYXVuY2hpbmcgYW5vdGhlciBpdGVyYXRpb24gYXMgc29vbiBhcyB0 aGUgY3VycmVudCBvbmUKKwkJICogY29tcGxldGVzLgorCQkgKi8KKwkJc3RhcnRfYXV0b3Zh Y19sYXVuY2hlciA9IHRydWU7CiAJfQogCi0JcGFyYW0gPSBNYXBWaWV3T2ZGaWxlKHBhcmFt SGFuZGxlLCBGSUxFX01BUF9XUklURSwgMCwgMCwgc2l6ZW9mKEJhY2tlbmRQYXJhbWV0ZXJz KSk7Ci0JaWYgKCFwYXJhbSkKKwlpZiAoQ2hlY2tQb3N0bWFzdGVyU2lnbmFsKFBNU0lHTkFM X1NUQVJUX0FVVE9WQUNfV09SS0VSKSAmJgorCQlTaHV0ZG93biA8PSBTbWFydFNodXRkb3du ICYmIHBtU3RhdGUgPCBQTV9TVE9QX0JBQ0tFTkRTKQogCXsKLQkJZXJlcG9ydChMT0csCi0J CQkJKGVycm1zZygiY291bGQgbm90IG1hcCBiYWNrZW5kIHBhcmFtZXRlciBtZW1vcnk6IGVy cm9yIGNvZGUgJWx1IiwKLQkJCQkJCUdldExhc3RFcnJvcigpKSkpOwotCQlDbG9zZUhhbmRs ZShwYXJhbUhhbmRsZSk7Ci0JCXJldHVybiAtMTsKKwkJLyogVGhlIGF1dG92YWN1dW0gbGF1 bmNoZXIgd2FudHMgdXMgdG8gc3RhcnQgYSB3b3JrZXIgcHJvY2Vzcy4gKi8KKwkJU3RhcnRB dXRvdmFjdXVtV29ya2VyKCk7CiAJfQogCi0JLyogSW5zZXJ0IHRlbXAgZmlsZSBuYW1lIGFm dGVyIC0tZm9yayBhcmd1bWVudCAqLwotI2lmZGVmIF9XSU42NAotCXNwcmludGYocGFyYW1I YW5kbGVTdHIsICIlbGx1IiwgKExPTkdfUFRSKSBwYXJhbUhhbmRsZSk7Ci0jZWxzZQotCXNw cmludGYocGFyYW1IYW5kbGVTdHIsICIlbHUiLCAoRFdPUkQpIHBhcmFtSGFuZGxlKTsKLSNl bmRpZgotCWFyZ3ZbMl0gPSBwYXJhbUhhbmRsZVN0cjsKLQotCS8qIEZvcm1hdCB0aGUgY21k IGxpbmUgKi8KLQljbWRMaW5lW3NpemVvZihjbWRMaW5lKSAtIDFdID0gJ1wwJzsKLQljbWRM aW5lW3NpemVvZihjbWRMaW5lKSAtIDJdID0gJ1wwJzsKLQlzbnByaW50ZihjbWRMaW5lLCBz aXplb2YoY21kTGluZSkgLSAxLCAiXCIlc1wiIiwgcG9zdGdyZXNfZXhlY19wYXRoKTsKLQlp ID0gMDsKLQl3aGlsZSAoYXJndlsrK2ldICE9IE5VTEwpCi0JewotCQlqID0gc3RybGVuKGNt ZExpbmUpOwotCQlzbnByaW50ZihjbWRMaW5lICsgaiwgc2l6ZW9mKGNtZExpbmUpIC0gMSAt IGosICIgXCIlc1wiIiwgYXJndltpXSk7Ci0JfQotCWlmIChjbWRMaW5lW3NpemVvZihjbWRM aW5lKSAtIDJdICE9ICdcMCcpCisJaWYgKENoZWNrUG9zdG1hc3RlclNpZ25hbChQTVNJR05B TF9TVEFSVF9XQUxSRUNFSVZFUikpCiAJewotCQllcmVwb3J0KExPRywKLQkJCQkoZXJybXNn KCJzdWJwcm9jZXNzIGNvbW1hbmQgbGluZSB0b28gbG9uZyIpKSk7Ci0JCVVubWFwVmlld09m RmlsZShwYXJhbSk7Ci0JCUNsb3NlSGFuZGxlKHBhcmFtSGFuZGxlKTsKLQkJcmV0dXJuIC0x OwotCX0KLQotCW1lbXNldCgmcGksIDAsIHNpemVvZihwaSkpOwotCW1lbXNldCgmc2ksIDAs IHNpemVvZihzaSkpOwotCXNpLmNiID0gc2l6ZW9mKHNpKTsKLQotCS8qCi0JICogQ3JlYXRl IHRoZSBzdWJwcm9jZXNzIGluIGEgc3VzcGVuZGVkIHN0YXRlLiBUaGlzIHdpbGwgYmUgcmVz dW1lZCBsYXRlciwKLQkgKiBvbmNlIHdlIGhhdmUgd3JpdHRlbiBvdXQgdGhlIHBhcmFtZXRl ciBmaWxlLgotCSAqLwotCWlmICghQ3JlYXRlUHJvY2VzcyhOVUxMLCBjbWRMaW5lLCBOVUxM LCBOVUxMLCBUUlVFLCBDUkVBVEVfU1VTUEVOREVELAotCQkJCQkgICBOVUxMLCBOVUxMLCAm c2ksICZwaSkpCi0JewotCQllcmVwb3J0KExPRywKLQkJCQkoZXJybXNnKCJDcmVhdGVQcm9j ZXNzKCkgY2FsbCBmYWlsZWQ6ICVtIChlcnJvciBjb2RlICVsdSkiLAotCQkJCQkJR2V0TGFz dEVycm9yKCkpKSk7Ci0JCVVubWFwVmlld09mRmlsZShwYXJhbSk7Ci0JCUNsb3NlSGFuZGxl KHBhcmFtSGFuZGxlKTsKLQkJcmV0dXJuIC0xOwotCX0KLQotCWlmICghc2F2ZV9iYWNrZW5k X3ZhcmlhYmxlcyhwYXJhbSwgcG9ydCwgcGkuaFByb2Nlc3MsIHBpLmR3UHJvY2Vzc0lkKSkK LQl7Ci0JCS8qCi0JCSAqIGxvZyBtYWRlIGJ5IHNhdmVfYmFja2VuZF92YXJpYWJsZXMsIGJ1 dCB3ZSBoYXZlIHRvIGNsZWFuIHVwIHRoZQotCQkgKiBtZXNzIHdpdGggdGhlIGhhbGYtc3Rh cnRlZCBwcm9jZXNzCi0JCSAqLwotCQlpZiAoIVRlcm1pbmF0ZVByb2Nlc3MocGkuaFByb2Nl c3MsIDI1NSkpCi0JCQllcmVwb3J0KExPRywKLQkJCQkJKGVycm1zZ19pbnRlcm5hbCgiY291 bGQgbm90IHRlcm1pbmF0ZSB1bnN0YXJ0ZWQgcHJvY2VzczogZXJyb3IgY29kZSAlbHUiLAot CQkJCQkJCQkJIEdldExhc3RFcnJvcigpKSkpOwotCQlDbG9zZUhhbmRsZShwaS5oUHJvY2Vz cyk7Ci0JCUNsb3NlSGFuZGxlKHBpLmhUaHJlYWQpOwotCQlVbm1hcFZpZXdPZkZpbGUocGFy YW0pOwotCQlDbG9zZUhhbmRsZShwYXJhbUhhbmRsZSk7Ci0JCXJldHVybiAtMTsJCQkJLyog bG9nIG1hZGUgYnkgc2F2ZV9iYWNrZW5kX3ZhcmlhYmxlcyAqLwotCX0KLQotCS8qIERyb3Ag dGhlIHBhcmFtZXRlciBzaGFyZWQgbWVtb3J5IHRoYXQgaXMgbm93IGluaGVyaXRlZCB0byB0 aGUgYmFja2VuZCAqLwotCWlmICghVW5tYXBWaWV3T2ZGaWxlKHBhcmFtKSkKLQkJZXJlcG9y dChMT0csCi0JCQkJKGVycm1zZygiY291bGQgbm90IHVubWFwIHZpZXcgb2YgYmFja2VuZCBw YXJhbWV0ZXIgZmlsZTogZXJyb3IgY29kZSAlbHUiLAotCQkJCQkJR2V0TGFzdEVycm9yKCkp KSk7Ci0JaWYgKCFDbG9zZUhhbmRsZShwYXJhbUhhbmRsZSkpCi0JCWVyZXBvcnQoTE9HLAot CQkJCShlcnJtc2coImNvdWxkIG5vdCBjbG9zZSBoYW5kbGUgdG8gYmFja2VuZCBwYXJhbWV0 ZXIgZmlsZTogZXJyb3IgY29kZSAlbHUiLAotCQkJCQkJR2V0TGFzdEVycm9yKCkpKSk7Ci0K LQkvKgotCSAqIFJlc2VydmUgdGhlIG1lbW9yeSByZWdpb24gdXNlZCBieSBvdXIgbWFpbiBz aGFyZWQgbWVtb3J5IHNlZ21lbnQgYmVmb3JlCi0JICogd2UgcmVzdW1lIHRoZSBjaGlsZCBw cm9jZXNzLiAgTm9ybWFsbHkgdGhpcyBzaG91bGQgc3VjY2VlZCwgYnV0IGlmIEFTTFIKLQkg KiBpcyBhY3RpdmUgdGhlbiBpdCBtaWdodCBzb21ldGltZXMgZmFpbCBkdWUgdG8gdGhlIHN0 YWNrIG9yIGhlYXAgaGF2aW5nCi0JICogZ290dGVuIG1hcHBlZCBpbnRvIHRoYXQgcmFuZ2Uu ICBJbiB0aGF0IGNhc2UsIGp1c3QgdGVybWluYXRlIHRoZQotCSAqIHByb2Nlc3MgYW5kIHJl dHJ5LgotCSAqLwotCWlmICghcGd3aW4zMl9SZXNlcnZlU2hhcmVkTWVtb3J5UmVnaW9uKHBp LmhQcm9jZXNzKSkKLQl7Ci0JCS8qIHBnd2luMzJfUmVzZXJ2ZVNoYXJlZE1lbW9yeVJlZ2lv biBhbHJlYWR5IG1hZGUgYSBsb2cgZW50cnkgKi8KLQkJaWYgKCFUZXJtaW5hdGVQcm9jZXNz KHBpLmhQcm9jZXNzLCAyNTUpKQotCQkJZXJlcG9ydChMT0csCi0JCQkJCShlcnJtc2dfaW50 ZXJuYWwoImNvdWxkIG5vdCB0ZXJtaW5hdGUgcHJvY2VzcyB0aGF0IGZhaWxlZCB0byByZXNl cnZlIG1lbW9yeTogZXJyb3IgY29kZSAlbHUiLAotCQkJCQkJCQkJIEdldExhc3RFcnJvcigp KSkpOwotCQlDbG9zZUhhbmRsZShwaS5oUHJvY2Vzcyk7Ci0JCUNsb3NlSGFuZGxlKHBpLmhU aHJlYWQpOwotCQlpZiAoKytyZXRyeV9jb3VudCA8IDEwMCkKLQkJCWdvdG8gcmV0cnk7Ci0J CWVyZXBvcnQoTE9HLAotCQkJCShlcnJtc2coImdpdmluZyB1cCBhZnRlciB0b28gbWFueSB0 cmllcyB0byByZXNlcnZlIHNoYXJlZCBtZW1vcnkiKSwKLQkJCQkgZXJyaGludCgiVGhpcyBt aWdodCBiZSBjYXVzZWQgYnkgQVNMUiBvciBhbnRpdmlydXMgc29mdHdhcmUuIikpKTsKLQkJ cmV0dXJuIC0xOwotCX0KLQotCS8qCi0JICogTm93IHRoYXQgdGhlIGJhY2tlbmQgdmFyaWFi bGVzIGFyZSB3cml0dGVuIG91dCwgd2Ugc3RhcnQgdGhlIGNoaWxkCi0JICogdGhyZWFkIHNv IGl0IGNhbiBzdGFydCBpbml0aWFsaXppbmcgd2hpbGUgd2Ugc2V0IHVwIHRoZSByZXN0IG9m IHRoZQotCSAqIHBhcmVudCBzdGF0ZS4KLQkgKi8KLQlpZiAoUmVzdW1lVGhyZWFkKHBpLmhU aHJlYWQpID09IC0xKQotCXsKLQkJaWYgKCFUZXJtaW5hdGVQcm9jZXNzKHBpLmhQcm9jZXNz LCAyNTUpKQotCQl7Ci0JCQllcmVwb3J0KExPRywKLQkJCQkJKGVycm1zZ19pbnRlcm5hbCgi Y291bGQgbm90IHRlcm1pbmF0ZSB1bnN0YXJ0YWJsZSBwcm9jZXNzOiBlcnJvciBjb2RlICVs dSIsCi0JCQkJCQkJCQkgR2V0TGFzdEVycm9yKCkpKSk7Ci0JCQlDbG9zZUhhbmRsZShwaS5o UHJvY2Vzcyk7Ci0JCQlDbG9zZUhhbmRsZShwaS5oVGhyZWFkKTsKLQkJCXJldHVybiAtMTsK LQkJfQotCQlDbG9zZUhhbmRsZShwaS5oUHJvY2Vzcyk7Ci0JCUNsb3NlSGFuZGxlKHBpLmhU aHJlYWQpOwotCQllcmVwb3J0KExPRywKLQkJCQkoZXJybXNnX2ludGVybmFsKCJjb3VsZCBu b3QgcmVzdW1lIHRocmVhZCBvZiB1bnN0YXJ0ZWQgcHJvY2VzczogZXJyb3IgY29kZSAlbHUi LAotCQkJCQkJCQkgR2V0TGFzdEVycm9yKCkpKSk7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQkv KgotCSAqIFF1ZXVlIGEgd2FpdGVyIHRvIHNpZ25hbCB3aGVuIHRoaXMgY2hpbGQgZGllcy4g VGhlIHdhaXQgd2lsbCBiZSBoYW5kbGVkCi0JICogYXV0b21hdGljYWxseSBieSBhbiBvcGVy YXRpbmcgc3lzdGVtIHRocmVhZCBwb29sLiAgVGhlIG1lbW9yeSB3aWxsIGJlCi0JICogZnJl ZWQgYnkgYSBsYXRlciBjYWxsIHRvIHdhaXRwaWQoKS4KLQkgKi8KLQljaGlsZGluZm8gPSBw YWxsb2Moc2l6ZW9mKHdpbjMyX2RlYWRjaGlsZF93YWl0aW5mbykpOwotCWNoaWxkaW5mby0+ cHJvY0hhbmRsZSA9IHBpLmhQcm9jZXNzOwotCWNoaWxkaW5mby0+cHJvY0lkID0gcGkuZHdQ cm9jZXNzSWQ7Ci0KLQlpZiAoIVJlZ2lzdGVyV2FpdEZvclNpbmdsZU9iamVjdCgmY2hpbGRp bmZvLT53YWl0SGFuZGxlLAotCQkJCQkJCQkJIHBpLmhQcm9jZXNzLAotCQkJCQkJCQkJIHBn d2luMzJfZGVhZGNoaWxkX2NhbGxiYWNrLAotCQkJCQkJCQkJIGNoaWxkaW5mbywKLQkJCQkJ CQkJCSBJTkZJTklURSwKLQkJCQkJCQkJCSBXVF9FWEVDVVRFT05MWU9OQ0UgfCBXVF9FWEVD VVRFSU5XQUlUVEhSRUFEKSkKLQkJZXJlcG9ydChGQVRBTCwKLQkJCQkoZXJybXNnX2ludGVy bmFsKCJjb3VsZCBub3QgcmVnaXN0ZXIgcHJvY2VzcyBmb3Igd2FpdDogZXJyb3IgY29kZSAl bHUiLAotCQkJCQkJCQkgR2V0TGFzdEVycm9yKCkpKSk7Ci0KLQkvKiBEb24ndCBjbG9zZSBw aS5oUHJvY2VzcyBoZXJlIC0gd2FpdHBpZCgpIG5lZWRzIGFjY2VzcyB0byBpdCAqLwotCi0J Q2xvc2VIYW5kbGUocGkuaFRocmVhZCk7Ci0KLQlyZXR1cm4gcGkuZHdQcm9jZXNzSWQ7Ci19 Ci0jZW5kaWYJCQkJCQkJLyogV0lOMzIgKi8KLQotCi0vKgotICogU3ViUG9zdG1hc3Rlck1h aW4gLS0gR2V0IHRoZSBmb3JrL2V4ZWMnZCBwcm9jZXNzIGludG8gYSBzdGF0ZSBlcXVpdmFs ZW50Ci0gKgkJCXRvIHdoYXQgaXQgd291bGQgYmUgaWYgd2UnZCBzaW1wbHkgZm9ya2VkIG9u IFVuaXgsIGFuZCB0aGVuCi0gKgkJCWRpc3BhdGNoIHRvIHRoZSBhcHByb3ByaWF0ZSBwbGFj ZS4KLSAqCi0gKiBUaGUgZmlyc3QgdHdvIGNvbW1hbmQgbGluZSBhcmd1bWVudHMgYXJlIGV4 cGVjdGVkIHRvIGJlICItLWZvcmtGT08iCi0gKiAod2hlcmUgRk9PIGluZGljYXRlcyB3aGlj aCBwb3N0bWFzdGVyIGNoaWxkIHdlIGFyZSB0byBiZWNvbWUpLCBhbmQKLSAqIHRoZSBuYW1l IG9mIGEgdmFyaWFibGVzIGZpbGUgdGhhdCB3ZSBjYW4gcmVhZCB0byBsb2FkIGRhdGEgdGhh dCB3b3VsZAotICogaGF2ZSBiZWVuIGluaGVyaXRlZCBieSBmb3JrKCkgb24gVW5peC4gIFJl bWFpbmluZyBhcmd1bWVudHMgZ28gdG8gdGhlCi0gKiBzdWJwcm9jZXNzIEZvb01haW4oKSBy b3V0aW5lLgotICovCi12b2lkCi1TdWJQb3N0bWFzdGVyTWFpbihpbnQgYXJnYywgY2hhciAq YXJndltdKQotewotCUNsaWVudFNvY2tldCBjbGllbnRfc29jazsKLQotCS8qIEluIEVYRUNf QkFDS0VORCBjYXNlIHdlIHdpbGwgbm90IGhhdmUgaW5oZXJpdGVkIHRoZXNlIHNldHRpbmdz ICovCi0JSXNQb3N0bWFzdGVyRW52aXJvbm1lbnQgPSB0cnVlOwotCXdoZXJlVG9TZW5kT3V0 cHV0ID0gRGVzdE5vbmU7Ci0KLQkvKiBTZXR1cCBlc3NlbnRpYWwgc3Vic3lzdGVtcyAodG8g ZW5zdXJlIGVsb2coKSBiZWhhdmVzIHNhbmVseSkgKi8KLQlJbml0aWFsaXplR1VDT3B0aW9u cygpOwotCi0JLyogQ2hlY2sgd2UgZ290IGFwcHJvcHJpYXRlIGFyZ3MgKi8KLQlpZiAoYXJn YyA8IDMpCi0JCWVsb2coRkFUQUwsICJpbnZhbGlkIHN1YnBvc3RtYXN0ZXIgaW52b2NhdGlv biIpOwotCi0JLyogUmVhZCBpbiB0aGUgdmFyaWFibGVzIGZpbGUgKi8KLQltZW1zZXQoJmNs aWVudF9zb2NrLCAwLCBzaXplb2YoQ2xpZW50U29ja2V0KSk7Ci0JcmVhZF9iYWNrZW5kX3Zh cmlhYmxlcyhhcmd2WzJdLCAmY2xpZW50X3NvY2spOwotCi0JLyogQ2xvc2UgdGhlIHBvc3Rt YXN0ZXIncyBzb2NrZXRzIChhcyBzb29uIGFzIHdlIGtub3cgdGhlbSkgKi8KLQlDbG9zZVBv c3RtYXN0ZXJQb3J0cyhzdHJjbXAoYXJndlsxXSwgIi0tZm9ya2xvZyIpID09IDApOwotCi0J LyogU2V0dXAgYXMgcG9zdG1hc3RlciBjaGlsZCAqLwotCUluaXRQb3N0bWFzdGVyQ2hpbGQo KTsKLQotCS8qCi0JICogSWYgYXBwcm9wcmlhdGUsIHBoeXNpY2FsbHkgcmUtYXR0YWNoIHRv IHNoYXJlZCBtZW1vcnkgc2VnbWVudC4gV2Ugd2FudAotCSAqIHRvIGRvIHRoaXMgYmVmb3Jl IGdvaW5nIGFueSBmdXJ0aGVyIHRvIGVuc3VyZSB0aGF0IHdlIGNhbiBhdHRhY2ggYXQgdGhl Ci0JICogc2FtZSBhZGRyZXNzIHRoZSBwb3N0bWFzdGVyIHVzZWQuICBPbiB0aGUgb3RoZXIg aGFuZCwgaWYgd2UgY2hvb3NlIG5vdAotCSAqIHRvIHJlLWF0dGFjaCwgd2UgbWF5IGhhdmUg b3RoZXIgY2xlYW51cCB0byBkby4KLQkgKgotCSAqIElmIHRlc3RpbmcgRVhFQ19CQUNLRU5E IG9uIExpbnV4LCB5b3Ugc2hvdWxkIHJ1biB0aGlzIGFzIHJvb3QgYmVmb3JlCi0JICogc3Rh cnRpbmcgdGhlIHBvc3RtYXN0ZXI6Ci0JICoKLQkgKiBzeXNjdGwgLXcga2VybmVsLnJhbmRv bWl6ZV92YV9zcGFjZT0wCi0JICoKLQkgKiBUaGlzIHByZXZlbnRzIHVzaW5nIHJhbmRvbWl6 ZWQgc3RhY2sgYW5kIGNvZGUgYWRkcmVzc2VzIHRoYXQgY2F1c2UgdGhlCi0JICogY2hpbGQg cHJvY2VzcydzIG1lbW9yeSBtYXAgdG8gYmUgZGlmZmVyZW50IGZyb20gdGhlIHBhcmVudCdz LCBtYWtpbmcgaXQKLQkgKiBzb21ldGltZXMgaW1wb3NzaWJsZSB0byBhdHRhY2ggdG8gc2hh cmVkIG1lbW9yeSBhdCB0aGUgZGVzaXJlZCBhZGRyZXNzLgotCSAqIFJldHVybiB0aGUgc2V0 dGluZyB0byBpdHMgb2xkIHZhbHVlICh1c3VhbGx5ICcxJyBvciAnMicpIHdoZW4gZmluaXNo ZWQuCi0JICovCi0JaWYgKHN0cmNtcChhcmd2WzFdLCAiLS1mb3JrYmFja2VuZCIpID09IDAg fHwKLQkJc3RyY21wKGFyZ3ZbMV0sICItLWZvcmthdmxhdW5jaGVyIikgPT0gMCB8fAotCQlz dHJjbXAoYXJndlsxXSwgIi0tZm9ya2F2d29ya2VyIikgPT0gMCB8fAotCQlzdHJjbXAoYXJn dlsxXSwgIi0tZm9ya2F1eCIpID09IDAgfHwKLQkJc3RybmNtcChhcmd2WzFdLCAiLS1mb3Jr Ymd3b3JrZXIiLCAxNCkgPT0gMCkKLQkJUEdTaGFyZWRNZW1vcnlSZUF0dGFjaCgpOwotCWVs c2UKLQkJUEdTaGFyZWRNZW1vcnlOb1JlQXR0YWNoKCk7Ci0KLQkvKiBhdXRvdmFjdXVtIG5l ZWRzIHRoaXMgc2V0IGJlZm9yZSBjYWxsaW5nIEluaXRQcm9jZXNzICovCi0JaWYgKHN0cmNt cChhcmd2WzFdLCAiLS1mb3JrYXZsYXVuY2hlciIpID09IDApCi0JCUF1dG92YWN1dW1MYXVu Y2hlcklBbSgpOwotCWlmIChzdHJjbXAoYXJndlsxXSwgIi0tZm9ya2F2d29ya2VyIikgPT0g MCkKLQkJQXV0b3ZhY3V1bVdvcmtlcklBbSgpOwotCi0JLyogUmVhZCBpbiByZW1haW5pbmcg R1VDIHZhcmlhYmxlcyAqLwotCXJlYWRfbm9uZGVmYXVsdF92YXJpYWJsZXMoKTsKLQotCS8q Ci0JICogQ2hlY2sgdGhhdCB0aGUgZGF0YSBkaXJlY3RvcnkgbG9va3MgdmFsaWQsIHdoaWNo IHdpbGwgYWxzbyBjaGVjayB0aGUKLQkgKiBwcml2aWxlZ2VzIG9uIHRoZSBkYXRhIGRpcmVj dG9yeSBhbmQgdXBkYXRlIG91ciB1bWFzayBhbmQgZmlsZS9ncm91cAotCSAqIHZhcmlhYmxl cyBmb3IgY3JlYXRpbmcgZmlsZXMgbGF0ZXIuICBOb3RlOiB0aGlzIHNob3VsZCByZWFsbHkg YmUgZG9uZQotCSAqIGJlZm9yZSB3ZSBjcmVhdGUgYW55IGZpbGVzIG9yIGRpcmVjdG9yaWVz LgotCSAqLwotCWNoZWNrRGF0YURpcigpOwotCi0JLyoKLQkgKiAocmUtKXJlYWQgY29udHJv bCBmaWxlLCBhcyBpdCBjb250YWlucyBjb25maWcuIFRoZSBwb3N0bWFzdGVyIHdpbGwKLQkg KiBhbHJlYWR5IGhhdmUgcmVhZCB0aGlzLCBidXQgdGhpcyBwcm9jZXNzIGRvZXNuJ3Qga25v dyBhYm91dCB0aGF0LgotCSAqLwotCUxvY2FsUHJvY2Vzc0NvbnRyb2xGaWxlKGZhbHNlKTsK LQotCS8qCi0JICogUmVsb2FkIGFueSBsaWJyYXJpZXMgdGhhdCB3ZXJlIHByZWxvYWRlZCBi eSB0aGUgcG9zdG1hc3Rlci4gIFNpbmNlIHdlCi0JICogZXhlYydkIHRoaXMgcHJvY2Vzcywg dGhvc2UgbGlicmFyaWVzIGRpZG4ndCBjb21lIGFsb25nIHdpdGggdXM7IGJ1dCB3ZQotCSAq IHNob3VsZCBsb2FkIHRoZW0gaW50byBhbGwgY2hpbGQgcHJvY2Vzc2VzIHRvIGJlIGNvbnNp c3RlbnQgd2l0aCB0aGUKLQkgKiBub24tRVhFQ19CQUNLRU5EIGJlaGF2aW9yLgotCSAqLwot CXByb2Nlc3Nfc2hhcmVkX3ByZWxvYWRfbGlicmFyaWVzKCk7Ci0KLQkvKiBSdW4gYmFja2Vu ZCBvciBhcHByb3ByaWF0ZSBjaGlsZCAqLwotCWlmIChzdHJjbXAoYXJndlsxXSwgIi0tZm9y a2JhY2tlbmQiKSA9PSAwKQotCXsKLQkJQ0FDX3N0YXRlCWNhYzsKLQotCQlBc3NlcnQoYXJn YyA9PSA0KTsKLQkJY2FjID0gKENBQ19zdGF0ZSkgYXRvaShhcmd2WzNdKTsKLQotCQkvKgot CQkgKiBOZWVkIHRvIHJlaW5pdGlhbGl6ZSB0aGUgU1NMIGxpYnJhcnkgaW4gdGhlIGJhY2tl bmQsIHNpbmNlIHRoZQotCQkgKiBjb250ZXh0IHN0cnVjdHVyZXMgY29udGFpbiBmdW5jdGlv biBwb2ludGVycyBhbmQgY2Fubm90IGJlIHBhc3NlZAotCQkgKiB0aHJvdWdoIHRoZSBwYXJh bWV0ZXIgZmlsZS4KLQkJICoKLQkJICogSWYgZm9yIHNvbWUgcmVhc29uIHJlbG9hZCBmYWls cyAobWF5YmUgdGhlIHVzZXIgaW5zdGFsbGVkIGJyb2tlbgotCQkgKiBrZXkgZmlsZXMpLCBz b2xkaWVyIG9uIHdpdGhvdXQgU1NMOyB0aGF0J3MgYmV0dGVyIHRoYW4gYWxsCi0JCSAqIGNv bm5lY3Rpb25zIGJlY29taW5nIGltcG9zc2libGUuCi0JCSAqCi0JCSAqIFhYWCBzaG91bGQg d2UgZG8gdGhpcyBpbiBhbGwgY2hpbGQgcHJvY2Vzc2VzPyAgRm9yIHRoZSBtb21lbnQgaXQn cwotCQkgKiBlbm91Z2ggdG8gZG8gaXQgaW4gYmFja2VuZCBjaGlsZHJlbi4KLQkJICovCi0j aWZkZWYgVVNFX1NTTAotCQlpZiAoRW5hYmxlU1NMKQotCQl7Ci0JCQlpZiAoc2VjdXJlX2lu aXRpYWxpemUoZmFsc2UpID09IDApCi0JCQkJTG9hZGVkU1NMID0gdHJ1ZTsKLQkJCWVsc2UK LQkJCQllcmVwb3J0KExPRywKLQkJCQkJCShlcnJtc2coIlNTTCBjb25maWd1cmF0aW9uIGNv dWxkIG5vdCBiZSBsb2FkZWQgaW4gY2hpbGQgcHJvY2VzcyIpKSk7Ci0JCX0KLSNlbmRpZgot Ci0JCS8qCi0JCSAqIFBlcmZvcm0gYWRkaXRpb25hbCBpbml0aWFsaXphdGlvbiBhbmQgY29s bGVjdCBzdGFydHVwIHBhY2tldC4KLQkJICoKLQkJICogV2Ugd2FudCB0byBkbyB0aGlzIGJl Zm9yZSBJbml0UHJvY2VzcygpIGZvciBhIGNvdXBsZSBvZiByZWFzb25zOiAxLgotCQkgKiBz byB0aGF0IHdlIGFyZW4ndCBlYXRpbmcgdXAgYSBQR1BST0Mgc2xvdCB3aGlsZSB3YWl0aW5n IG9uIHRoZQotCQkgKiBjbGllbnQuIDIuIHNvIHRoYXQgaWYgSW5pdFByb2Nlc3MoKSBmYWls cyBkdWUgdG8gYmVpbmcgb3V0IG9mCi0JCSAqIFBHUFJPQyBzbG90cywgd2UgaGF2ZSBhbHJl YWR5IGluaXRpYWxpemVkIGxpYnBxIGFuZCBhcmUgYWJsZSB0bwotCQkgKiByZXBvcnQgdGhl IGVycm9yIHRvIHRoZSBjbGllbnQuCi0JCSAqLwotCQlCYWNrZW5kSW5pdGlhbGl6ZSgmY2xp ZW50X3NvY2ssIGNhYyk7Ci0KLQkJLyogUmVzdG9yZSBiYXNpYyBzaGFyZWQgbWVtb3J5IHBv aW50ZXJzICovCi0JCUluaXRTaG1lbUFjY2VzcyhVc2VkU2htZW1TZWdBZGRyKTsKLQotCQkv KiBBbmQgcnVuIHRoZSBiYWNrZW5kICovCi0JCUJhY2tlbmRSdW4oKTsJCQkvKiBkb2VzIG5v dCByZXR1cm4gKi8KLQl9Ci0JaWYgKHN0cmNtcChhcmd2WzFdLCAiLS1mb3JrYXV4IikgPT0g MCkKLQl7Ci0JCUF1eFByb2NUeXBlIGF1eHR5cGU7Ci0KLQkJQXNzZXJ0KGFyZ2MgPT0gNCk7 Ci0KLQkJLyogUmVzdG9yZSBiYXNpYyBzaGFyZWQgbWVtb3J5IHBvaW50ZXJzICovCi0JCUlu aXRTaG1lbUFjY2VzcyhVc2VkU2htZW1TZWdBZGRyKTsKLQotCQlhdXh0eXBlID0gYXRvaShh cmd2WzNdKTsKLQkJQXV4aWxpYXJ5UHJvY2Vzc01haW4oYXV4dHlwZSk7CS8qIGRvZXMgbm90 IHJldHVybiAqLwotCX0KLQlpZiAoc3RyY21wKGFyZ3ZbMV0sICItLWZvcmthdmxhdW5jaGVy IikgPT0gMCkKLQl7Ci0JCS8qIFJlc3RvcmUgYmFzaWMgc2hhcmVkIG1lbW9yeSBwb2ludGVy cyAqLwotCQlJbml0U2htZW1BY2Nlc3MoVXNlZFNobWVtU2VnQWRkcik7Ci0KLQkJQXV0b1Zh Y0xhdW5jaGVyTWFpbihhcmdjIC0gMiwgYXJndiArIDIpOwkvKiBkb2VzIG5vdCByZXR1cm4g Ki8KLQl9Ci0JaWYgKHN0cmNtcChhcmd2WzFdLCAiLS1mb3JrYXZ3b3JrZXIiKSA9PSAwKQot CXsKLQkJLyogUmVzdG9yZSBiYXNpYyBzaGFyZWQgbWVtb3J5IHBvaW50ZXJzICovCi0JCUlu aXRTaG1lbUFjY2VzcyhVc2VkU2htZW1TZWdBZGRyKTsKLQotCQlBdXRvVmFjV29ya2VyTWFp bihhcmdjIC0gMiwgYXJndiArIDIpOwkvKiBkb2VzIG5vdCByZXR1cm4gKi8KLQl9Ci0JaWYg KHN0cm5jbXAoYXJndlsxXSwgIi0tZm9ya2Jnd29ya2VyIiwgMTQpID09IDApCi0JewotCQkv KiBkbyB0aGlzIGFzIGVhcmx5IGFzIHBvc3NpYmxlOyBpbiBwYXJ0aWN1bGFyLCBiZWZvcmUg SW5pdFByb2Nlc3MoKSAqLwotCQlJc0JhY2tncm91bmRXb3JrZXIgPSB0cnVlOwotCi0JCS8q IFJlc3RvcmUgYmFzaWMgc2hhcmVkIG1lbW9yeSBwb2ludGVycyAqLwotCQlJbml0U2htZW1B Y2Nlc3MoVXNlZFNobWVtU2VnQWRkcik7Ci0KLQkJU3RhcnRCYWNrZ3JvdW5kV29ya2VyKCk7 Ci0JfQotCWlmIChzdHJjbXAoYXJndlsxXSwgIi0tZm9ya2xvZyIpID09IDApCi0JewotCQkv KiBEbyBub3Qgd2FudCB0byBhdHRhY2ggdG8gc2hhcmVkIG1lbW9yeSAqLwotCi0JCVN5c0xv Z2dlck1haW4oYXJnYywgYXJndik7CS8qIGRvZXMgbm90IHJldHVybiAqLwotCX0KLQotCWFi b3J0KCk7CQkJCQkvKiBzaG91bGRuJ3QgZ2V0IGhlcmUgKi8KLX0KLSNlbmRpZgkJCQkJCQkv KiBFWEVDX0JBQ0tFTkQgKi8KLQotCi0vKgotICogRXhpdFBvc3RtYXN0ZXIgLS0gY2xlYW51 cAotICoKLSAqIERvIE5PVCBjYWxsIGV4aXQoKSBkaXJlY3RseSAtLS0gYWx3YXlzIGdvIHRo cm91Z2ggaGVyZSEKLSAqLwotc3RhdGljIHZvaWQKLUV4aXRQb3N0bWFzdGVyKGludCBzdGF0 dXMpCi17Ci0jaWZkZWYgSEFWRV9QVEhSRUFEX0lTX1RIUkVBREVEX05QCi0KLQkvKgotCSAq IFRoZXJlIGlzIG5vIGtub3duIGNhdXNlIGZvciBhIHBvc3RtYXN0ZXIgdG8gYmVjb21lIG11 bHRpdGhyZWFkZWQgYWZ0ZXIKLQkgKiBzdGFydHVwLiAgUmVjaGVjayB0byBhY2NvdW50IGZv ciB0aGUgcG9zc2liaWxpdHkgb2YgdW5rbm93biBjYXVzZXMuCi0JICogVGhpcyBtZXNzYWdl IHVzZXMgTE9HIGxldmVsLCBiZWNhdXNlIGFuIHVuY2xlYW4gc2h1dGRvd24gYXQgdGhpcyBw b2ludAotCSAqIHdvdWxkIHVzdWFsbHkgbm90IGxvb2sgbXVjaCBkaWZmZXJlbnQgZnJvbSBh IGNsZWFuIHNodXRkb3duLgotCSAqLwotCWlmIChwdGhyZWFkX2lzX3RocmVhZGVkX25wKCkg IT0gMCkKLQkJZXJlcG9ydChMT0csCi0JCQkJKGVycmNvZGUoRVJSQ09ERV9JTlRFUk5BTF9F UlJPUiksCi0JCQkJIGVycm1zZ19pbnRlcm5hbCgicG9zdG1hc3RlciBiZWNhbWUgbXVsdGl0 aHJlYWRlZCIpLAotCQkJCSBlcnJkZXRhaWwoIlBsZWFzZSByZXBvcnQgdGhpcyB0byA8JXM+ LiIsIFBBQ0tBR0VfQlVHUkVQT1JUKSkpOwotI2VuZGlmCi0KLQkvKiBzaG91bGQgY2xlYW51 cCBzaGFyZWQgbWVtb3J5IGFuZCBraWxsIGFsbCBiYWNrZW5kcyAqLwotCi0JLyoKLQkgKiBO b3Qgc3VyZSBvZiB0aGUgc2VtYW50aWNzIGhlcmUuICBXaGVuIHRoZSBQb3N0bWFzdGVyIGRp ZXMsIHNob3VsZCB0aGUKLQkgKiBiYWNrZW5kcyBhbGwgYmUga2lsbGVkPyBwcm9iYWJseSBu b3QuCi0JICoKLQkgKiBNVVNUCQktLSB2YWRpbSAwNS0xMC0xOTk5Ci0JICovCi0KLQlwcm9j X2V4aXQoc3RhdHVzKTsKLX0KLQotLyoKLSAqIEhhbmRsZSBwbXNpZ25hbCBjb25kaXRpb25z IHJlcHJlc2VudGluZyByZXF1ZXN0cyBmcm9tIGJhY2tlbmRzLAotICogYW5kIGNoZWNrIGZv ciBwcm9tb3RlIGFuZCBsb2dyb3RhdGUgcmVxdWVzdHMgZnJvbSBwZ19jdGwuCi0gKi8KLXN0 YXRpYyB2b2lkCi1wcm9jZXNzX3BtX3Btc2lnbmFsKHZvaWQpCi17Ci0JcGVuZGluZ19wbV9w bXNpZ25hbCA9IGZhbHNlOwotCi0JZXJlcG9ydChERUJVRzIsCi0JCQkoZXJybXNnX2ludGVy bmFsKCJwb3N0bWFzdGVyIHJlY2VpdmVkIHBtc2lnbmFsIHNpZ25hbCIpKSk7Ci0KLQkvKgot CSAqIFJFQ09WRVJZX1NUQVJURUQgYW5kIEJFR0lOX0hPVF9TVEFOREJZIHNpZ25hbHMgYXJl IGlnbm9yZWQgaW4KLQkgKiB1bmV4cGVjdGVkIHN0YXRlcy4gSWYgdGhlIHN0YXJ0dXAgcHJv Y2VzcyBxdWlja2x5IHN0YXJ0cyB1cCwgY29tcGxldGVzCi0JICogcmVjb3ZlcnksIGV4aXRz LCB3ZSBtaWdodCBwcm9jZXNzIHRoZSBkZWF0aCBvZiB0aGUgc3RhcnR1cCBwcm9jZXNzCi0J ICogZmlyc3QuIFdlIGRvbid0IHdhbnQgdG8gZ28gYmFjayB0byByZWNvdmVyeSBpbiB0aGF0 IGNhc2UuCi0JICovCi0JaWYgKENoZWNrUG9zdG1hc3RlclNpZ25hbChQTVNJR05BTF9SRUNP VkVSWV9TVEFSVEVEKSAmJgotCQlwbVN0YXRlID09IFBNX1NUQVJUVVAgJiYgU2h1dGRvd24g PT0gTm9TaHV0ZG93bikKLQl7Ci0JCS8qIFdBTCByZWRvIGhhcyBzdGFydGVkLiBXZSdyZSBv dXQgb2YgcmVpbml0aWFsaXphdGlvbi4gKi8KLQkJRmF0YWxFcnJvciA9IGZhbHNlOwotCQlB Ym9ydFN0YXJ0VGltZSA9IDA7Ci0KLQkJLyoKLQkJICogU3RhcnQgdGhlIGFyY2hpdmVyIGlm IHdlJ3JlIHJlc3BvbnNpYmxlIGZvciAocmUtKWFyY2hpdmluZyByZWNlaXZlZAotCQkgKiBm aWxlcy4KLQkJICovCi0JCUFzc2VydChQZ0FyY2hQSUQgPT0gMCk7Ci0JCWlmIChYTG9nQXJj aGl2aW5nQWx3YXlzKCkpCi0JCQlQZ0FyY2hQSUQgPSBTdGFydEFyY2hpdmVyKCk7Ci0KLQkJ LyoKLQkJICogSWYgd2UgYXJlbid0IHBsYW5uaW5nIHRvIGVudGVyIGhvdCBzdGFuZGJ5IG1v ZGUgbGF0ZXIsIHRyZWF0Ci0JCSAqIFJFQ09WRVJZX1NUQVJURUQgYXMgbWVhbmluZyB3ZSdy ZSBvdXQgb2Ygc3RhcnR1cCwgYW5kIHJlcG9ydCBzdGF0dXMKLQkJICogYWNjb3JkaW5nbHku Ci0JCSAqLwotCQlpZiAoIUVuYWJsZUhvdFN0YW5kYnkpCi0JCXsKLQkJCUFkZFRvRGF0YURp ckxvY2tGaWxlKExPQ0tfRklMRV9MSU5FX1BNX1NUQVRVUywgUE1fU1RBVFVTX1NUQU5EQlkp OwotI2lmZGVmIFVTRV9TWVNURU1ECi0JCQlzZF9ub3RpZnkoMCwgIlJFQURZPTEiKTsKLSNl bmRpZgotCQl9Ci0KLQkJcG1TdGF0ZSA9IFBNX1JFQ09WRVJZOwotCX0KLQotCWlmIChDaGVj a1Bvc3RtYXN0ZXJTaWduYWwoUE1TSUdOQUxfQkVHSU5fSE9UX1NUQU5EQlkpICYmCi0JCXBt U3RhdGUgPT0gUE1fUkVDT1ZFUlkgJiYgU2h1dGRvd24gPT0gTm9TaHV0ZG93bikKLQl7Ci0J CWVyZXBvcnQoTE9HLAotCQkJCShlcnJtc2coImRhdGFiYXNlIHN5c3RlbSBpcyByZWFkeSB0 byBhY2NlcHQgcmVhZC1vbmx5IGNvbm5lY3Rpb25zIikpKTsKLQotCQkvKiBSZXBvcnQgc3Rh dHVzICovCi0JCUFkZFRvRGF0YURpckxvY2tGaWxlKExPQ0tfRklMRV9MSU5FX1BNX1NUQVRV UywgUE1fU1RBVFVTX1JFQURZKTsKLSNpZmRlZiBVU0VfU1lTVEVNRAotCQlzZF9ub3RpZnko MCwgIlJFQURZPTEiKTsKLSNlbmRpZgotCi0JCXBtU3RhdGUgPSBQTV9IT1RfU1RBTkRCWTsK LQkJY29ubnNBbGxvd2VkID0gdHJ1ZTsKLQotCQkvKiBTb21lIHdvcmtlcnMgbWF5IGJlIHNj aGVkdWxlZCB0byBzdGFydCBub3cgKi8KLQkJU3RhcnRXb3JrZXJOZWVkZWQgPSB0cnVlOwot CX0KLQotCS8qIFByb2Nlc3MgYmFja2dyb3VuZCB3b3JrZXIgc3RhdGUgY2hhbmdlcy4gKi8K LQlpZiAoQ2hlY2tQb3N0bWFzdGVyU2lnbmFsKFBNU0lHTkFMX0JBQ0tHUk9VTkRfV09SS0VS X0NIQU5HRSkpCi0JewotCQkvKiBBY2NlcHQgbmV3IHdvcmtlciByZXF1ZXN0cyBvbmx5IGlm IG5vdCBzdG9wcGluZy4gKi8KLQkJQmFja2dyb3VuZFdvcmtlclN0YXRlQ2hhbmdlKHBtU3Rh dGUgPCBQTV9TVE9QX0JBQ0tFTkRTKTsKLQkJU3RhcnRXb3JrZXJOZWVkZWQgPSB0cnVlOwot CX0KLQotCWlmIChTdGFydFdvcmtlck5lZWRlZCB8fCBIYXZlQ3Jhc2hlZFdvcmtlcikKLQkJ bWF5YmVfc3RhcnRfYmd3b3JrZXJzKCk7Ci0KLQkvKiBUZWxsIHN5c2xvZ2dlciB0byByb3Rh dGUgbG9nZmlsZSBpZiByZXF1ZXN0ZWQgKi8KLQlpZiAoU3lzTG9nZ2VyUElEICE9IDApCi0J ewotCQlpZiAoQ2hlY2tMb2dyb3RhdGVTaWduYWwoKSkKLQkJewotCQkJc2lnbmFsX2NoaWxk KFN5c0xvZ2dlclBJRCwgU0lHVVNSMSk7Ci0JCQlSZW1vdmVMb2dyb3RhdGVTaWduYWxGaWxl cygpOwotCQl9Ci0JCWVsc2UgaWYgKENoZWNrUG9zdG1hc3RlclNpZ25hbChQTVNJR05BTF9S T1RBVEVfTE9HRklMRSkpCi0JCXsKLQkJCXNpZ25hbF9jaGlsZChTeXNMb2dnZXJQSUQsIFNJ R1VTUjEpOwotCQl9Ci0JfQotCi0JaWYgKENoZWNrUG9zdG1hc3RlclNpZ25hbChQTVNJR05B TF9TVEFSVF9BVVRPVkFDX0xBVU5DSEVSKSAmJgotCQlTaHV0ZG93biA8PSBTbWFydFNodXRk b3duICYmIHBtU3RhdGUgPCBQTV9TVE9QX0JBQ0tFTkRTKQotCXsKLQkJLyoKLQkJICogU3Rh cnQgb25lIGl0ZXJhdGlvbiBvZiB0aGUgYXV0b3ZhY3V1bSBkYWVtb24sIGV2ZW4gaWYgYXV0 b3ZhY3V1bWluZwotCQkgKiBpcyBub21pbmFsbHkgbm90IGVuYWJsZWQuICBUaGlzIGlzIHNv IHdlIGNhbiBoYXZlIGFuIGFjdGl2ZSBkZWZlbnNlCi0JCSAqIGFnYWluc3QgdHJhbnNhY3Rp b24gSUQgd3JhcGFyb3VuZC4gIFdlIHNldCBhIGZsYWcgZm9yIHRoZSBtYWluIGxvb3AKLQkJ ICogdG8gZG8gaXQgcmF0aGVyIHRoYW4gdHJ5aW5nIHRvIGRvIGl0IGhlcmUgLS0tIHRoaXMg aXMgYmVjYXVzZSB0aGUKLQkJICogYXV0b3ZhYyBwcm9jZXNzIGl0c2VsZiBtYXkgc2VuZCB0 aGUgc2lnbmFsLCBhbmQgd2Ugd2FudCB0byBoYW5kbGUKLQkJICogdGhhdCBieSBsYXVuY2hp bmcgYW5vdGhlciBpdGVyYXRpb24gYXMgc29vbiBhcyB0aGUgY3VycmVudCBvbmUKLQkJICog Y29tcGxldGVzLgotCQkgKi8KLQkJc3RhcnRfYXV0b3ZhY19sYXVuY2hlciA9IHRydWU7Ci0J fQotCi0JaWYgKENoZWNrUG9zdG1hc3RlclNpZ25hbChQTVNJR05BTF9TVEFSVF9BVVRPVkFD X1dPUktFUikgJiYKLQkJU2h1dGRvd24gPD0gU21hcnRTaHV0ZG93biAmJiBwbVN0YXRlIDwg UE1fU1RPUF9CQUNLRU5EUykKLQl7Ci0JCS8qIFRoZSBhdXRvdmFjdXVtIGxhdW5jaGVyIHdh bnRzIHVzIHRvIHN0YXJ0IGEgd29ya2VyIHByb2Nlc3MuICovCi0JCVN0YXJ0QXV0b3ZhY3V1 bVdvcmtlcigpOwotCX0KLQotCWlmIChDaGVja1Bvc3RtYXN0ZXJTaWduYWwoUE1TSUdOQUxf U1RBUlRfV0FMUkVDRUlWRVIpKQotCXsKLQkJLyogU3RhcnR1cCBQcm9jZXNzIHdhbnRzIHVz IHRvIHN0YXJ0IHRoZSB3YWxyZWNlaXZlciBwcm9jZXNzLiAqLwotCQkvKiBTdGFydCBpbW1l ZGlhdGVseSBpZiBwb3NzaWJsZSwgZWxzZSByZW1lbWJlciByZXF1ZXN0IGZvciBsYXRlci4g Ki8KLQkJV2FsUmVjZWl2ZXJSZXF1ZXN0ZWQgPSB0cnVlOwotCQlNYXliZVN0YXJ0V2FsUmVj ZWl2ZXIoKTsKKwkJLyogU3RhcnR1cCBQcm9jZXNzIHdhbnRzIHVzIHRvIHN0YXJ0IHRoZSB3 YWxyZWNlaXZlciBwcm9jZXNzLiAqLworCQkvKiBTdGFydCBpbW1lZGlhdGVseSBpZiBwb3Nz aWJsZSwgZWxzZSByZW1lbWJlciByZXF1ZXN0IGZvciBsYXRlci4gKi8KKwkJV2FsUmVjZWl2 ZXJSZXF1ZXN0ZWQgPSB0cnVlOworCQlNYXliZVN0YXJ0V2FsUmVjZWl2ZXIoKTsKIAl9CiAK IAkvKgpAQCAtNTI0MCw5MyArNDYyNywyMyBAQCBDb3VudENoaWxkcmVuKGludCB0YXJnZXQp CiAgKiB0byBzdGFydCBzdWJwcm9jZXNzLgogICovCiBzdGF0aWMgcGlkX3QKLVN0YXJ0Q2hp bGRQcm9jZXNzKEF1eFByb2NUeXBlIHR5cGUpCitTdGFydENoaWxkUHJvY2VzcyhQb3N0bWFz dGVyQ2hpbGRUeXBlIHR5cGUpCiB7CiAJcGlkX3QJCXBpZDsKIAotI2lmZGVmIEVYRUNfQkFD S0VORAotCXsKLQkJY2hhcgkgICAqYXZbMTBdOwotCQlpbnQJCQlhYyA9IDA7Ci0JCWNoYXIJ CXR5cGVidWZbMzJdOwotCi0JCS8qCi0JCSAqIFNldCB1cCBjb21tYW5kLWxpbmUgYXJndW1l bnRzIGZvciBzdWJwcm9jZXNzCi0JCSAqLwotCQlhdlthYysrXSA9ICJwb3N0Z3JlcyI7Ci0J CWF2W2FjKytdID0gIi0tZm9ya2F1eCI7Ci0JCWF2W2FjKytdID0gTlVMTDsJCS8qIGZpbGxl ZCBpbiBieSBwb3N0bWFzdGVyX2ZvcmtleGVjICovCi0KLQkJc25wcmludGYodHlwZWJ1Ziwg c2l6ZW9mKHR5cGVidWYpLCAiJWQiLCB0eXBlKTsKLQkJYXZbYWMrK10gPSB0eXBlYnVmOwot Ci0JCWF2W2FjXSA9IE5VTEw7Ci0JCUFzc2VydChhYyA8IGxlbmd0aG9mKGF2KSk7Ci0KLQkJ cGlkID0gcG9zdG1hc3Rlcl9mb3JrZXhlYyhhYywgYXYpOwotCX0KLSNlbHNlCQkJCQkJCS8q ICFFWEVDX0JBQ0tFTkQgKi8KLQlwaWQgPSBmb3JrX3Byb2Nlc3MoKTsKLQotCWlmIChwaWQg PT0gMCkJCQkJLyogY2hpbGQgKi8KLQl7Ci0JCUluaXRQb3N0bWFzdGVyQ2hpbGQoKTsKLQot CQkvKiBDbG9zZSB0aGUgcG9zdG1hc3RlcidzIHNvY2tldHMgKi8KLQkJQ2xvc2VQb3N0bWFz dGVyUG9ydHMoZmFsc2UpOwotCi0JCS8qIFJlbGVhc2UgcG9zdG1hc3RlcidzIHdvcmtpbmcg bWVtb3J5IGNvbnRleHQgKi8KLQkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKFRvcE1lbW9yeUNv bnRleHQpOwotCQlNZW1vcnlDb250ZXh0RGVsZXRlKFBvc3RtYXN0ZXJDb250ZXh0KTsKLQkJ UG9zdG1hc3RlckNvbnRleHQgPSBOVUxMOwotCi0JCUF1eGlsaWFyeVByb2Nlc3NNYWluKHR5 cGUpOyAvKiBkb2VzIG5vdCByZXR1cm4gKi8KLQl9Ci0jZW5kaWYJCQkJCQkJLyogRVhFQ19C QUNLRU5EICovCi0KKwlwaWQgPSBwb3N0bWFzdGVyX2NoaWxkX2xhdW5jaCh0eXBlLCBOVUxM LCAwLCBOVUxMKTsKIAlpZiAocGlkIDwgMCkKIAl7CiAJCS8qIGluIHBhcmVudCwgZm9yayBm YWlsZWQgKi8KLQkJaW50CQkJc2F2ZV9lcnJubyA9IGVycm5vOwotCi0JCWVycm5vID0gc2F2 ZV9lcnJubzsKLQkJc3dpdGNoICh0eXBlKQotCQl7Ci0JCQljYXNlIFN0YXJ0dXBQcm9jZXNz OgotCQkJCWVyZXBvcnQoTE9HLAotCQkJCQkJKGVycm1zZygiY291bGQgbm90IGZvcmsgc3Rh cnR1cCBwcm9jZXNzOiAlbSIpKSk7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIEFyY2hpdmVyUHJv Y2VzczoKLQkJCQllcmVwb3J0KExPRywKLQkJCQkJCShlcnJtc2coImNvdWxkIG5vdCBmb3Jr IGFyY2hpdmVyIHByb2Nlc3M6ICVtIikpKTsKLQkJCQlicmVhazsKLQkJCWNhc2UgQmdXcml0 ZXJQcm9jZXNzOgotCQkJCWVyZXBvcnQoTE9HLAotCQkJCQkJKGVycm1zZygiY291bGQgbm90 IGZvcmsgYmFja2dyb3VuZCB3cml0ZXIgcHJvY2VzczogJW0iKSkpOwotCQkJCWJyZWFrOwot CQkJY2FzZSBDaGVja3BvaW50ZXJQcm9jZXNzOgotCQkJCWVyZXBvcnQoTE9HLAotCQkJCQkJ KGVycm1zZygiY291bGQgbm90IGZvcmsgY2hlY2twb2ludGVyIHByb2Nlc3M6ICVtIikpKTsK LQkJCQlicmVhazsKLQkJCWNhc2UgV2FsV3JpdGVyUHJvY2VzczoKLQkJCQllcmVwb3J0KExP RywKLQkJCQkJCShlcnJtc2coImNvdWxkIG5vdCBmb3JrIFdBTCB3cml0ZXIgcHJvY2Vzczog JW0iKSkpOwotCQkJCWJyZWFrOwotCQkJY2FzZSBXYWxSZWNlaXZlclByb2Nlc3M6Ci0JCQkJ ZXJlcG9ydChMT0csCi0JCQkJCQkoZXJybXNnKCJjb3VsZCBub3QgZm9yayBXQUwgcmVjZWl2 ZXIgcHJvY2VzczogJW0iKSkpOwotCQkJCWJyZWFrOwotCQkJZGVmYXVsdDoKLQkJCQllcmVw b3J0KExPRywKLQkJCQkJCShlcnJtc2coImNvdWxkIG5vdCBmb3JrIHByb2Nlc3M6ICVtIikp KTsKLQkJCQlicmVhazsKLQkJfQorCQkvKiBYWFg6IHRyYW5zbGF0aW9uPyAqLworCQllcmVw b3J0KExPRywKKwkJCQkoZXJybXNnKCJjb3VsZCBub3QgZm9yayAlcyBwcm9jZXNzOiAlbSIs IFBvc3RtYXN0ZXJDaGlsZE5hbWUodHlwZSkpKSk7CiAKIAkJLyoKIAkJICogZm9yayBmYWls dXJlIGlzIGZhdGFsIGR1cmluZyBzdGFydHVwLCBidXQgdGhlcmUncyBubyBuZWVkIHRvIGNo b2tlCiAJCSAqIGltbWVkaWF0ZWx5IGlmIHN0YXJ0aW5nIG90aGVyIGNoaWxkIHR5cGVzIGZh aWxzLgogCQkgKi8KLQkJaWYgKHR5cGUgPT0gU3RhcnR1cFByb2Nlc3MpCisJCWlmICh0eXBl ID09IFBNQ19TVEFSVFVQKQogCQkJRXhpdFBvc3RtYXN0ZXIoMSk7CiAJCXJldHVybiAwOwog CX0KQEAgLTU1ODQsMzIgKzQ5MDEsNiBAQCBCYWNrZ3JvdW5kV29ya2VyVW5ibG9ja1NpZ25h bHModm9pZCkKIAlzaWdwcm9jbWFzayhTSUdfU0VUTUFTSywgJlVuQmxvY2tTaWcsIE5VTEwp OwogfQogCi0jaWZkZWYgRVhFQ19CQUNLRU5ECi1zdGF0aWMgcGlkX3QKLWJnd29ya2VyX2Zv cmtleGVjKEJhY2tncm91bmRXb3JrZXIgKndvcmtlcikKLXsKLQljaGFyCSAgICphdlsxMF07 Ci0JaW50CQkJYWMgPSAwOwotCWNoYXIJCWZvcmthdltNQVhQR1BBVEhdOwotCXBpZF90CQly ZXN1bHQ7Ci0KLQlzbnByaW50Zihmb3JrYXYsIE1BWFBHUEFUSCwgIi0tZm9ya2Jnd29ya2Vy Iik7Ci0KLQlhdlthYysrXSA9ICJwb3N0Z3JlcyI7Ci0JYXZbYWMrK10gPSBmb3JrYXY7Ci0J YXZbYWMrK10gPSBOVUxMOwkJCS8qIGZpbGxlZCBpbiBieSBwb3N0bWFzdGVyX2ZvcmtleGVj ICovCi0JYXZbYWNdID0gTlVMTDsKLQotCUFzc2VydChhYyA8IGxlbmd0aG9mKGF2KSk7Ci0K LQlNeUJnd29ya2VyRW50cnkgPSB3b3JrZXI7Ci0JcmVzdWx0ID0gcG9zdG1hc3Rlcl9mb3Jr ZXhlYyhhYywgYXYpOwotCU15Qmd3b3JrZXJFbnRyeSA9IE5VTEw7Ci0KLQlyZXR1cm4gcmVz dWx0OwotfQotI2VuZGlmCi0KIC8qCiAgKiBTdGFydCBhIG5ldyBiZ3dvcmtlci4KICAqIFN0 YXJ0aW5nIHRpbWUgY29uZGl0aW9ucyBtdXN0IGhhdmUgYmVlbiBjaGVja2VkIGFscmVhZHku CkBAIC01NjQ2LDY1ICs0OTM3LDMyIEBAIGRvX3N0YXJ0X2Jnd29ya2VyKFJlZ2lzdGVyZWRC Z1dvcmtlciAqcncpCiAJCQkoZXJybXNnX2ludGVybmFsKCJzdGFydGluZyBiYWNrZ3JvdW5k IHdvcmtlciBwcm9jZXNzIFwiJXNcIiIsCiAJCQkJCQkJIHJ3LT5yd193b3JrZXIuYmd3X25h bWUpKSk7CiAKLSNpZmRlZiBFWEVDX0JBQ0tFTkQKLQlzd2l0Y2ggKCh3b3JrZXJfcGlkID0g Ymd3b3JrZXJfZm9ya2V4ZWMoJnJ3LT5yd193b3JrZXIpKSkKLSNlbHNlCi0Jc3dpdGNoICgo d29ya2VyX3BpZCA9IGZvcmtfcHJvY2VzcygpKSkKLSNlbmRpZgorCXdvcmtlcl9waWQgPSBw b3N0bWFzdGVyX2NoaWxkX2xhdW5jaChQTUNfQkdXT1JLRVIsIChjaGFyICopICZydy0+cndf d29ya2VyLCBzaXplb2YoQmFja2dyb3VuZFdvcmtlciksIE5VTEwpOworCWlmICh3b3JrZXJf cGlkID09IC0xKQogCXsKLQkJY2FzZSAtMToKLQkJCS8qIGluIHBvc3RtYXN0ZXIsIGZvcmsg ZmFpbGVkIC4uLiAqLwotCQkJZXJlcG9ydChMT0csCi0JCQkJCShlcnJtc2coImNvdWxkIG5v dCBmb3JrIHdvcmtlciBwcm9jZXNzOiAlbSIpKSk7Ci0JCQkvKiB1bmRvIHdoYXQgYXNzaWdu X2JhY2tlbmRsaXN0X2VudHJ5IGRpZCAqLwotCQkJUmVsZWFzZVBvc3RtYXN0ZXJDaGlsZFNs b3QocnctPnJ3X2NoaWxkX3Nsb3QpOwotCQkJcnctPnJ3X2NoaWxkX3Nsb3QgPSAwOwotCQkJ cGZyZWUocnctPnJ3X2JhY2tlbmQpOwotCQkJcnctPnJ3X2JhY2tlbmQgPSBOVUxMOwotCQkJ LyogbWFyayBlbnRyeSBhcyBjcmFzaGVkLCBzbyB3ZSdsbCB0cnkgYWdhaW4gbGF0ZXIgKi8K LQkJCXJ3LT5yd19jcmFzaGVkX2F0ID0gR2V0Q3VycmVudFRpbWVzdGFtcCgpOwotCQkJYnJl YWs7Ci0KLSNpZm5kZWYgRVhFQ19CQUNLRU5ECi0JCWNhc2UgMDoKLQkJCS8qIGluIHBvc3Rt YXN0ZXIgY2hpbGQgLi4uICovCi0JCQlJbml0UG9zdG1hc3RlckNoaWxkKCk7Ci0KLQkJCS8q IENsb3NlIHRoZSBwb3N0bWFzdGVyJ3Mgc29ja2V0cyAqLwotCQkJQ2xvc2VQb3N0bWFzdGVy UG9ydHMoZmFsc2UpOwotCi0JCQkvKgotCQkJICogQmVmb3JlIGJsb3dpbmcgYXdheSBQb3N0 bWFzdGVyQ29udGV4dCwgc2F2ZSB0aGlzIGJnd29ya2VyJ3MKLQkJCSAqIGRhdGEgd2hlcmUg aXQgY2FuIGZpbmQgaXQuCi0JCQkgKi8KLQkJCU15Qmd3b3JrZXJFbnRyeSA9IChCYWNrZ3Jv dW5kV29ya2VyICopCi0JCQkJTWVtb3J5Q29udGV4dEFsbG9jKFRvcE1lbW9yeUNvbnRleHQs IHNpemVvZihCYWNrZ3JvdW5kV29ya2VyKSk7Ci0JCQltZW1jcHkoTXlCZ3dvcmtlckVudHJ5 LCAmcnctPnJ3X3dvcmtlciwgc2l6ZW9mKEJhY2tncm91bmRXb3JrZXIpKTsKLQotCQkJLyog UmVsZWFzZSBwb3N0bWFzdGVyJ3Mgd29ya2luZyBtZW1vcnkgY29udGV4dCAqLwotCQkJTWVt b3J5Q29udGV4dFN3aXRjaFRvKFRvcE1lbW9yeUNvbnRleHQpOwotCQkJTWVtb3J5Q29udGV4 dERlbGV0ZShQb3N0bWFzdGVyQ29udGV4dCk7Ci0JCQlQb3N0bWFzdGVyQ29udGV4dCA9IE5V TEw7Ci0KLQkJCUJhY2tncm91bmRXb3JrZXJNYWluKCk7CisJCS8qIGluIHBvc3RtYXN0ZXIs IGZvcmsgZmFpbGVkIC4uLiAqLworCQllcmVwb3J0KExPRywKKwkJCQkoZXJybXNnKCJjb3Vs ZCBub3QgZm9yayB3b3JrZXIgcHJvY2VzczogJW0iKSkpOworCQkvKiB1bmRvIHdoYXQgYXNz aWduX2JhY2tlbmRsaXN0X2VudHJ5IGRpZCAqLworCQlSZWxlYXNlUG9zdG1hc3RlckNoaWxk U2xvdChydy0+cndfY2hpbGRfc2xvdCk7CisJCXJ3LT5yd19jaGlsZF9zbG90ID0gMDsKKwkJ cGZyZWUocnctPnJ3X2JhY2tlbmQpOworCQlydy0+cndfYmFja2VuZCA9IE5VTEw7CisJCS8q IG1hcmsgZW50cnkgYXMgY3Jhc2hlZCwgc28gd2UnbGwgdHJ5IGFnYWluIGxhdGVyICovCisJ CXJ3LT5yd19jcmFzaGVkX2F0ID0gR2V0Q3VycmVudFRpbWVzdGFtcCgpOworCQlyZXR1cm4g ZmFsc2U7CisJfQogCi0JCQlleGl0KDEpOwkJCS8qIHNob3VsZCBub3QgZ2V0IGhlcmUgKi8K LQkJCWJyZWFrOwotI2VuZGlmCi0JCWRlZmF1bHQ6Ci0JCQkvKiBpbiBwb3N0bWFzdGVyLCBm b3JrIHN1Y2Nlc3NmdWwgLi4uICovCi0JCQlydy0+cndfcGlkID0gd29ya2VyX3BpZDsKLQkJ CXJ3LT5yd19iYWNrZW5kLT5waWQgPSBydy0+cndfcGlkOwotCQkJUmVwb3J0QmFja2dyb3Vu ZFdvcmtlclBJRChydyk7Ci0JCQkvKiBhZGQgbmV3IHdvcmtlciB0byBsaXN0cyBvZiBiYWNr ZW5kcyAqLwotCQkJZGxpc3RfcHVzaF9oZWFkKCZCYWNrZW5kTGlzdCwgJnJ3LT5yd19iYWNr ZW5kLT5lbGVtKTsKKwkvKiBpbiBwb3N0bWFzdGVyLCBmb3JrIHN1Y2Nlc3NmdWwgLi4uICov CisJcnctPnJ3X3BpZCA9IHdvcmtlcl9waWQ7CisJcnctPnJ3X2JhY2tlbmQtPnBpZCA9IHJ3 LT5yd19waWQ7CisJUmVwb3J0QmFja2dyb3VuZFdvcmtlclBJRChydyk7CisJLyogYWRkIG5l dyB3b3JrZXIgdG8gbGlzdHMgb2YgYmFja2VuZHMgKi8KKwlkbGlzdF9wdXNoX2hlYWQoJkJh Y2tlbmRMaXN0LCAmcnctPnJ3X2JhY2tlbmQtPmVsZW0pOwogI2lmZGVmIEVYRUNfQkFDS0VO RAotCQkJU2htZW1CYWNrZW5kQXJyYXlBZGQocnctPnJ3X2JhY2tlbmQpOworCVNobWVtQmFj a2VuZEFycmF5QWRkKHJ3LT5yd19iYWNrZW5kKTsKICNlbmRpZgotCQkJcmV0dXJuIHRydWU7 Ci0JfQotCi0JcmV0dXJuIGZhbHNlOworCXJldHVybiB0cnVlOwogfQogCiAvKgpAQCAtNTk1 NiwzNTEgKzUyMTQsNiBAQCBQb3N0bWFzdGVyTWFya1BJREZvcldvcmtlck5vdGlmeShpbnQg cGlkKQogCiAjaWZkZWYgRVhFQ19CQUNLRU5ECiAKLS8qCi0gKiBUaGUgZm9sbG93aW5nIG5l ZWQgdG8gYmUgYXZhaWxhYmxlIHRvIHRoZSBzYXZlL3Jlc3RvcmVfYmFja2VuZF92YXJpYWJs ZXMKLSAqIGZ1bmN0aW9ucy4gIFRoZXkgYXJlIG1hcmtlZCBOT05fRVhFQ19TVEFUSUMgaW4g dGhlaXIgaG9tZSBtb2R1bGVzLgotICovCi1leHRlcm4gc2xvY2tfdCAqU2htZW1Mb2NrOwot ZXh0ZXJuIHNsb2NrX3QgKlByb2NTdHJ1Y3RMb2NrOwotZXh0ZXJuIFBHUFJPQyAqQXV4aWxp YXJ5UHJvY3M7Ci1leHRlcm4gUE1TaWduYWxEYXRhICpQTVNpZ25hbFN0YXRlOwotZXh0ZXJu IHBnX3RpbWVfdCBmaXJzdF9zeXNsb2dnZXJfZmlsZV90aW1lOwotCi0jaWZuZGVmIFdJTjMy Ci0jZGVmaW5lIHdyaXRlX2luaGVyaXRhYmxlX3NvY2tldChkZXN0LCBzcmMsIGNoaWxkcGlk KSAoKCooZGVzdCkgPSAoc3JjKSksIHRydWUpCi0jZGVmaW5lIHJlYWRfaW5oZXJpdGFibGVf c29ja2V0KGRlc3QsIHNyYykgKCooZGVzdCkgPSAqKHNyYykpCi0jZWxzZQotc3RhdGljIGJv b2wgd3JpdGVfZHVwbGljYXRlZF9oYW5kbGUoSEFORExFICpkZXN0LCBIQU5ETEUgc3JjLCBI QU5ETEUgY2hpbGQpOwotc3RhdGljIGJvb2wgd3JpdGVfaW5oZXJpdGFibGVfc29ja2V0KElu aGVyaXRhYmxlU29ja2V0ICpkZXN0LCBTT0NLRVQgc3JjLAotCQkJCQkJCQkJIHBpZF90IGNo aWxkUGlkKTsKLXN0YXRpYyB2b2lkIHJlYWRfaW5oZXJpdGFibGVfc29ja2V0KFNPQ0tFVCAq ZGVzdCwgSW5oZXJpdGFibGVTb2NrZXQgKnNyYyk7Ci0jZW5kaWYKLQotCi0vKiBTYXZlIGNy aXRpY2FsIGJhY2tlbmQgdmFyaWFibGVzIGludG8gdGhlIEJhY2tlbmRQYXJhbWV0ZXJzIHN0 cnVjdCAqLwotI2lmbmRlZiBXSU4zMgotc3RhdGljIGJvb2wKLXNhdmVfYmFja2VuZF92YXJp YWJsZXMoQmFja2VuZFBhcmFtZXRlcnMgKnBhcmFtLCBDbGllbnRTb2NrZXQgKmNsaWVudF9z b2NrKQotI2Vsc2UKLXN0YXRpYyBib29sCi1zYXZlX2JhY2tlbmRfdmFyaWFibGVzKEJhY2tl bmRQYXJhbWV0ZXJzICpwYXJhbSwgQ2xpZW50U29ja2V0ICpjbGllbnRfc29jaywKLQkJCQkJ ICAgSEFORExFIGNoaWxkUHJvY2VzcywgcGlkX3QgY2hpbGRQaWQpCi0jZW5kaWYKLXsKLQlt ZW1jcHkoJnBhcmFtLT5jbGllbnRfc29jaywgY2xpZW50X3NvY2ssIHNpemVvZihDbGllbnRT b2NrZXQpKTsKLQlpZiAoIXdyaXRlX2luaGVyaXRhYmxlX3NvY2tldCgmcGFyYW0tPnNlcmlh bGl6ZWRfc29jaywgY2xpZW50X3NvY2stPnNvY2ssIGNoaWxkUGlkKSkKLQkJcmV0dXJuIGZh bHNlOwotCi0Jc3RybGNweShwYXJhbS0+RGF0YURpciwgRGF0YURpciwgTUFYUEdQQVRIKTsK LQotCXBhcmFtLT5NeUNhbmNlbEtleSA9IE15Q2FuY2VsS2V5OwotCXBhcmFtLT5NeVBNQ2hp bGRTbG90ID0gTXlQTUNoaWxkU2xvdDsKLQotI2lmZGVmIFdJTjMyCi0JcGFyYW0tPlNobWVt UHJvdGVjdGl2ZVJlZ2lvbiA9IFNobWVtUHJvdGVjdGl2ZVJlZ2lvbjsKLSNlbmRpZgotCXBh cmFtLT5Vc2VkU2htZW1TZWdJRCA9IFVzZWRTaG1lbVNlZ0lEOwotCXBhcmFtLT5Vc2VkU2ht ZW1TZWdBZGRyID0gVXNlZFNobWVtU2VnQWRkcjsKLQotCXBhcmFtLT5TaG1lbUxvY2sgPSBT aG1lbUxvY2s7Ci0JcGFyYW0tPlNobWVtVmFyaWFibGVDYWNoZSA9IFNobWVtVmFyaWFibGVD YWNoZTsKLQlwYXJhbS0+U2htZW1CYWNrZW5kQXJyYXkgPSBTaG1lbUJhY2tlbmRBcnJheTsK LQotI2lmbmRlZiBIQVZFX1NQSU5MT0NLUwotCXBhcmFtLT5TcGlubG9ja1NlbWFBcnJheSA9 IFNwaW5sb2NrU2VtYUFycmF5OwotI2VuZGlmCi0JcGFyYW0tPk5hbWVkTFdMb2NrVHJhbmNo ZVJlcXVlc3RzID0gTmFtZWRMV0xvY2tUcmFuY2hlUmVxdWVzdHM7Ci0JcGFyYW0tPk5hbWVk TFdMb2NrVHJhbmNoZUFycmF5ID0gTmFtZWRMV0xvY2tUcmFuY2hlQXJyYXk7Ci0JcGFyYW0t Pk1haW5MV0xvY2tBcnJheSA9IE1haW5MV0xvY2tBcnJheTsKLQlwYXJhbS0+UHJvY1N0cnVj dExvY2sgPSBQcm9jU3RydWN0TG9jazsKLQlwYXJhbS0+UHJvY0dsb2JhbCA9IFByb2NHbG9i YWw7Ci0JcGFyYW0tPkF1eGlsaWFyeVByb2NzID0gQXV4aWxpYXJ5UHJvY3M7Ci0JcGFyYW0t PlByZXBhcmVkWGFjdFByb2NzID0gUHJlcGFyZWRYYWN0UHJvY3M7Ci0JcGFyYW0tPlBNU2ln bmFsU3RhdGUgPSBQTVNpZ25hbFN0YXRlOwotCi0JcGFyYW0tPlBvc3RtYXN0ZXJQaWQgPSBQ b3N0bWFzdGVyUGlkOwotCXBhcmFtLT5QZ1N0YXJ0VGltZSA9IFBnU3RhcnRUaW1lOwotCXBh cmFtLT5QZ1JlbG9hZFRpbWUgPSBQZ1JlbG9hZFRpbWU7Ci0JcGFyYW0tPmZpcnN0X3N5c2xv Z2dlcl9maWxlX3RpbWUgPSBmaXJzdF9zeXNsb2dnZXJfZmlsZV90aW1lOwotCi0JcGFyYW0t PnJlZGlyZWN0aW9uX2RvbmUgPSByZWRpcmVjdGlvbl9kb25lOwotCXBhcmFtLT5Jc0JpbmFy eVVwZ3JhZGUgPSBJc0JpbmFyeVVwZ3JhZGU7Ci0JcGFyYW0tPnF1ZXJ5X2lkX2VuYWJsZWQg PSBxdWVyeV9pZF9lbmFibGVkOwotCXBhcmFtLT5tYXhfc2FmZV9mZHMgPSBtYXhfc2FmZV9m ZHM7Ci0KLQlwYXJhbS0+TWF4QmFja2VuZHMgPSBNYXhCYWNrZW5kczsKLQotI2lmZGVmIFdJ TjMyCi0JcGFyYW0tPlBvc3RtYXN0ZXJIYW5kbGUgPSBQb3N0bWFzdGVySGFuZGxlOwotCWlm ICghd3JpdGVfZHVwbGljYXRlZF9oYW5kbGUoJnBhcmFtLT5pbml0aWFsX3NpZ25hbF9waXBl LAotCQkJCQkJCQkgcGd3aW4zMl9jcmVhdGVfc2lnbmFsX2xpc3RlbmVyKGNoaWxkUGlkKSwK LQkJCQkJCQkJIGNoaWxkUHJvY2VzcykpCi0JCXJldHVybiBmYWxzZTsKLSNlbHNlCi0JbWVt Y3B5KCZwYXJhbS0+cG9zdG1hc3Rlcl9hbGl2ZV9mZHMsICZwb3N0bWFzdGVyX2FsaXZlX2Zk cywKLQkJICAgc2l6ZW9mKHBvc3RtYXN0ZXJfYWxpdmVfZmRzKSk7Ci0jZW5kaWYKLQotCW1l bWNweSgmcGFyYW0tPnN5c2xvZ1BpcGUsICZzeXNsb2dQaXBlLCBzaXplb2Yoc3lzbG9nUGlw ZSkpOwotCi0Jc3RybGNweShwYXJhbS0+bXlfZXhlY19wYXRoLCBteV9leGVjX3BhdGgsIE1B WFBHUEFUSCk7Ci0KLQlzdHJsY3B5KHBhcmFtLT5wa2dsaWJfcGF0aCwgcGtnbGliX3BhdGgs IE1BWFBHUEFUSCk7Ci0KLQlpZiAoTXlCZ3dvcmtlckVudHJ5KQotCQltZW1jcHkoJnBhcmFt LT5NeUJnd29ya2VyRW50cnksIE15Qmd3b3JrZXJFbnRyeSwgc2l6ZW9mKEJhY2tncm91bmRX b3JrZXIpKTsKLQllbHNlCi0JCW1lbXNldCgmcGFyYW0tPk15Qmd3b3JrZXJFbnRyeSwgMCwg c2l6ZW9mKEJhY2tncm91bmRXb3JrZXIpKTsKLQotCXJldHVybiB0cnVlOwotfQotCi0KLSNp ZmRlZiBXSU4zMgotLyoKLSAqIER1cGxpY2F0ZSBhIGhhbmRsZSBmb3IgdXNhZ2UgaW4gYSBj aGlsZCBwcm9jZXNzLCBhbmQgd3JpdGUgdGhlIGNoaWxkCi0gKiBwcm9jZXNzIGluc3RhbmNl IG9mIHRoZSBoYW5kbGUgdG8gdGhlIHBhcmFtZXRlciBmaWxlLgotICovCi1zdGF0aWMgYm9v bAotd3JpdGVfZHVwbGljYXRlZF9oYW5kbGUoSEFORExFICpkZXN0LCBIQU5ETEUgc3JjLCBI QU5ETEUgY2hpbGRQcm9jZXNzKQotewotCUhBTkRMRQkJaENoaWxkID0gSU5WQUxJRF9IQU5E TEVfVkFMVUU7Ci0KLQlpZiAoIUR1cGxpY2F0ZUhhbmRsZShHZXRDdXJyZW50UHJvY2Vzcygp LAotCQkJCQkJIHNyYywKLQkJCQkJCSBjaGlsZFByb2Nlc3MsCi0JCQkJCQkgJmhDaGlsZCwK LQkJCQkJCSAwLAotCQkJCQkJIFRSVUUsCi0JCQkJCQkgRFVQTElDQVRFX0NMT1NFX1NPVVJD RSB8IERVUExJQ0FURV9TQU1FX0FDQ0VTUykpCi0JewotCQllcmVwb3J0KExPRywKLQkJCQko ZXJybXNnX2ludGVybmFsKCJjb3VsZCBub3QgZHVwbGljYXRlIGhhbmRsZSB0byBiZSB3cml0 dGVuIHRvIGJhY2tlbmQgcGFyYW1ldGVyIGZpbGU6IGVycm9yIGNvZGUgJWx1IiwKLQkJCQkJ CQkJIEdldExhc3RFcnJvcigpKSkpOwotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JKmRlc3Qg PSBoQ2hpbGQ7Ci0JcmV0dXJuIHRydWU7Ci19Ci0KLS8qCi0gKiBEdXBsaWNhdGUgYSBzb2Nr ZXQgZm9yIHVzYWdlIGluIGEgY2hpbGQgcHJvY2VzcywgYW5kIHdyaXRlIHRoZSByZXN1bHRp bmcKLSAqIHN0cnVjdHVyZSB0byB0aGUgcGFyYW1ldGVyIGZpbGUuCi0gKiBUaGlzIGlzIHJl cXVpcmVkIGJlY2F1c2UgYSBudW1iZXIgb2YgTFNQcyAoTGF5ZXJlZCBTZXJ2aWNlIFByb3Zp ZGVycykgdmVyeQotICogY29tbW9uIG9uIFdpbmRvd3MgKGFudGl2aXJ1cywgZmlyZXdhbGxz LCBkb3dubG9hZCBtYW5hZ2VycyBldGMpIGJyZWFrCi0gKiBzdHJhaWdodCBzb2NrZXQgaW5o ZXJpdGFuY2UuCi0gKi8KLXN0YXRpYyBib29sCi13cml0ZV9pbmhlcml0YWJsZV9zb2NrZXQo SW5oZXJpdGFibGVTb2NrZXQgKmRlc3QsIFNPQ0tFVCBzcmMsIHBpZF90IGNoaWxkcGlkKQot ewotCWRlc3QtPm9yaWdzb2NrZXQgPSBzcmM7Ci0JaWYgKHNyYyAhPSAwICYmIHNyYyAhPSBQ R0lOVkFMSURfU09DS0VUKQotCXsKLQkJLyogQWN0dWFsIHNvY2tldCAqLwotCQlpZiAoV1NB RHVwbGljYXRlU29ja2V0KHNyYywgY2hpbGRwaWQsICZkZXN0LT53c2FpbmZvKSAhPSAwKQot CQl7Ci0JCQllcmVwb3J0KExPRywKLQkJCQkJKGVycm1zZygiY291bGQgbm90IGR1cGxpY2F0 ZSBzb2NrZXQgJWQgZm9yIHVzZSBpbiBiYWNrZW5kOiBlcnJvciBjb2RlICVkIiwKLQkJCQkJ CQkoaW50KSBzcmMsIFdTQUdldExhc3RFcnJvcigpKSkpOwotCQkJcmV0dXJuIGZhbHNlOwot CQl9Ci0JfQotCXJldHVybiB0cnVlOwotfQotCi0vKgotICogUmVhZCBhIGR1cGxpY2F0ZSBz b2NrZXQgc3RydWN0dXJlIGJhY2ssIGFuZCBnZXQgdGhlIHNvY2tldCBkZXNjcmlwdG9yLgot ICovCi1zdGF0aWMgdm9pZAotcmVhZF9pbmhlcml0YWJsZV9zb2NrZXQoU09DS0VUICpkZXN0 LCBJbmhlcml0YWJsZVNvY2tldCAqc3JjKQotewotCVNPQ0tFVAkJczsKLQotCWlmIChzcmMt Pm9yaWdzb2NrZXQgPT0gUEdJTlZBTElEX1NPQ0tFVCB8fCBzcmMtPm9yaWdzb2NrZXQgPT0g MCkKLQl7Ci0JCS8qIE5vdCBhIHJlYWwgc29ja2V0ISAqLwotCQkqZGVzdCA9IHNyYy0+b3Jp Z3NvY2tldDsKLQl9Ci0JZWxzZQotCXsKLQkJLyogQWN0dWFsIHNvY2tldCwgc28gY3JlYXRl IGZyb20gc3RydWN0dXJlICovCi0JCXMgPSBXU0FTb2NrZXQoRlJPTV9QUk9UT0NPTF9JTkZP LAotCQkJCQkgIEZST01fUFJPVE9DT0xfSU5GTywKLQkJCQkJICBGUk9NX1BST1RPQ09MX0lO Rk8sCi0JCQkJCSAgJnNyYy0+d3NhaW5mbywKLQkJCQkJICAwLAotCQkJCQkgIDApOwotCQlp ZiAocyA9PSBJTlZBTElEX1NPQ0tFVCkKLQkJewotCQkJd3JpdGVfc3RkZXJyKCJjb3VsZCBu b3QgY3JlYXRlIGluaGVyaXRlZCBzb2NrZXQ6IGVycm9yIGNvZGUgJWRcbiIsCi0JCQkJCQkg V1NBR2V0TGFzdEVycm9yKCkpOwotCQkJZXhpdCgxKTsKLQkJfQotCQkqZGVzdCA9IHM7Ci0K LQkJLyoKLQkJICogVG8gbWFrZSBzdXJlIHdlIGRvbid0IGdldCB0d28gcmVmZXJlbmNlcyB0 byB0aGUgc2FtZSBzb2NrZXQsIGNsb3NlCi0JCSAqIHRoZSBvcmlnaW5hbCBvbmUuIChUaGlz IHdvdWxkIGhhcHBlbiB3aGVuIGluaGVyaXRhbmNlIGFjdHVhbGx5Ci0JCSAqIHdvcmtzLi4K LQkJICovCi0JCWNsb3Nlc29ja2V0KHNyYy0+b3JpZ3NvY2tldCk7Ci0JfQotfQotI2VuZGlm Ci0KLXN0YXRpYyB2b2lkCi1yZWFkX2JhY2tlbmRfdmFyaWFibGVzKGNoYXIgKmlkLCBDbGll bnRTb2NrZXQgKmNsaWVudF9zb2NrKQotewotCUJhY2tlbmRQYXJhbWV0ZXJzIHBhcmFtOwot Ci0jaWZuZGVmIFdJTjMyCi0JLyogTm9uLXdpbjMyIGltcGxlbWVudGF0aW9uIHJlYWRzIGZy b20gZmlsZSAqLwotCUZJTEUJICAgKmZwOwotCi0JLyogT3BlbiBmaWxlICovCi0JZnAgPSBB bGxvY2F0ZUZpbGUoaWQsIFBHX0JJTkFSWV9SKTsKLQlpZiAoIWZwKQotCXsKLQkJd3JpdGVf c3RkZXJyKCJjb3VsZCBub3Qgb3BlbiBiYWNrZW5kIHZhcmlhYmxlcyBmaWxlIFwiJXNcIjog JXNcbiIsCi0JCQkJCSBpZCwgc3RyZXJyb3IoZXJybm8pKTsKLQkJZXhpdCgxKTsKLQl9Ci0K LQlpZiAoZnJlYWQoJnBhcmFtLCBzaXplb2YocGFyYW0pLCAxLCBmcCkgIT0gMSkKLQl7Ci0J CXdyaXRlX3N0ZGVycigiY291bGQgbm90IHJlYWQgZnJvbSBiYWNrZW5kIHZhcmlhYmxlcyBm aWxlIFwiJXNcIjogJXNcbiIsCi0JCQkJCSBpZCwgc3RyZXJyb3IoZXJybm8pKTsKLQkJZXhp dCgxKTsKLQl9Ci0KLQkvKiBSZWxlYXNlIGZpbGUgKi8KLQlGcmVlRmlsZShmcCk7Ci0JaWYg KHVubGluayhpZCkgIT0gMCkKLQl7Ci0JCXdyaXRlX3N0ZGVycigiY291bGQgbm90IHJlbW92 ZSBmaWxlIFwiJXNcIjogJXNcbiIsCi0JCQkJCSBpZCwgc3RyZXJyb3IoZXJybm8pKTsKLQkJ ZXhpdCgxKTsKLQl9Ci0jZWxzZQotCS8qIFdpbjMyIHZlcnNpb24gdXNlcyBtYXBwZWQgZmls ZSAqLwotCUhBTkRMRQkJcGFyYW1IYW5kbGU7Ci0JQmFja2VuZFBhcmFtZXRlcnMgKnBhcmFt cDsKLQotI2lmZGVmIF9XSU42NAotCXBhcmFtSGFuZGxlID0gKEhBTkRMRSkgX2F0b2k2NChp ZCk7Ci0jZWxzZQotCXBhcmFtSGFuZGxlID0gKEhBTkRMRSkgYXRvbChpZCk7Ci0jZW5kaWYK LQlwYXJhbXAgPSBNYXBWaWV3T2ZGaWxlKHBhcmFtSGFuZGxlLCBGSUxFX01BUF9SRUFELCAw LCAwLCAwKTsKLQlpZiAoIXBhcmFtcCkKLQl7Ci0JCXdyaXRlX3N0ZGVycigiY291bGQgbm90 IG1hcCB2aWV3IG9mIGJhY2tlbmQgdmFyaWFibGVzOiBlcnJvciBjb2RlICVsdVxuIiwKLQkJ CQkJIEdldExhc3RFcnJvcigpKTsKLQkJZXhpdCgxKTsKLQl9Ci0KLQltZW1jcHkoJnBhcmFt LCBwYXJhbXAsIHNpemVvZihCYWNrZW5kUGFyYW1ldGVycykpOwotCi0JaWYgKCFVbm1hcFZp ZXdPZkZpbGUocGFyYW1wKSkKLQl7Ci0JCXdyaXRlX3N0ZGVycigiY291bGQgbm90IHVubWFw IHZpZXcgb2YgYmFja2VuZCB2YXJpYWJsZXM6IGVycm9yIGNvZGUgJWx1XG4iLAotCQkJCQkg R2V0TGFzdEVycm9yKCkpOwotCQlleGl0KDEpOwotCX0KLQotCWlmICghQ2xvc2VIYW5kbGUo cGFyYW1IYW5kbGUpKQotCXsKLQkJd3JpdGVfc3RkZXJyKCJjb3VsZCBub3QgY2xvc2UgaGFu ZGxlIHRvIGJhY2tlbmQgcGFyYW1ldGVyIHZhcmlhYmxlczogZXJyb3IgY29kZSAlbHVcbiIs Ci0JCQkJCSBHZXRMYXN0RXJyb3IoKSk7Ci0JCWV4aXQoMSk7Ci0JfQotI2VuZGlmCi0KLQly ZXN0b3JlX2JhY2tlbmRfdmFyaWFibGVzKCZwYXJhbSwgY2xpZW50X3NvY2spOwotfQotCi0v KiBSZXN0b3JlIGNyaXRpY2FsIGJhY2tlbmQgdmFyaWFibGVzIGZyb20gdGhlIEJhY2tlbmRQ YXJhbWV0ZXJzIHN0cnVjdCAqLwotc3RhdGljIHZvaWQKLXJlc3RvcmVfYmFja2VuZF92YXJp YWJsZXMoQmFja2VuZFBhcmFtZXRlcnMgKnBhcmFtLCBDbGllbnRTb2NrZXQgKmNsaWVudF9z b2NrKQotewotCW1lbWNweShjbGllbnRfc29jaywgJnBhcmFtLT5jbGllbnRfc29jaywgc2l6 ZW9mKENsaWVudFNvY2tldCkpOwotCXJlYWRfaW5oZXJpdGFibGVfc29ja2V0KCZjbGllbnRf c29jay0+c29jaywgJnBhcmFtLT5zZXJpYWxpemVkX3NvY2spOwotCi0JU2V0RGF0YURpcihw YXJhbS0+RGF0YURpcik7Ci0KLQlNeUNhbmNlbEtleSA9IHBhcmFtLT5NeUNhbmNlbEtleTsK LQlNeVBNQ2hpbGRTbG90ID0gcGFyYW0tPk15UE1DaGlsZFNsb3Q7Ci0KLSNpZmRlZiBXSU4z MgotCVNobWVtUHJvdGVjdGl2ZVJlZ2lvbiA9IHBhcmFtLT5TaG1lbVByb3RlY3RpdmVSZWdp b247Ci0jZW5kaWYKLQlVc2VkU2htZW1TZWdJRCA9IHBhcmFtLT5Vc2VkU2htZW1TZWdJRDsK LQlVc2VkU2htZW1TZWdBZGRyID0gcGFyYW0tPlVzZWRTaG1lbVNlZ0FkZHI7Ci0KLQlTaG1l bUxvY2sgPSBwYXJhbS0+U2htZW1Mb2NrOwotCVNobWVtVmFyaWFibGVDYWNoZSA9IHBhcmFt LT5TaG1lbVZhcmlhYmxlQ2FjaGU7Ci0JU2htZW1CYWNrZW5kQXJyYXkgPSBwYXJhbS0+U2ht ZW1CYWNrZW5kQXJyYXk7Ci0KLSNpZm5kZWYgSEFWRV9TUElOTE9DS1MKLQlTcGlubG9ja1Nl bWFBcnJheSA9IHBhcmFtLT5TcGlubG9ja1NlbWFBcnJheTsKLSNlbmRpZgotCU5hbWVkTFdM b2NrVHJhbmNoZVJlcXVlc3RzID0gcGFyYW0tPk5hbWVkTFdMb2NrVHJhbmNoZVJlcXVlc3Rz OwotCU5hbWVkTFdMb2NrVHJhbmNoZUFycmF5ID0gcGFyYW0tPk5hbWVkTFdMb2NrVHJhbmNo ZUFycmF5OwotCU1haW5MV0xvY2tBcnJheSA9IHBhcmFtLT5NYWluTFdMb2NrQXJyYXk7Ci0J UHJvY1N0cnVjdExvY2sgPSBwYXJhbS0+UHJvY1N0cnVjdExvY2s7Ci0JUHJvY0dsb2JhbCA9 IHBhcmFtLT5Qcm9jR2xvYmFsOwotCUF1eGlsaWFyeVByb2NzID0gcGFyYW0tPkF1eGlsaWFy eVByb2NzOwotCVByZXBhcmVkWGFjdFByb2NzID0gcGFyYW0tPlByZXBhcmVkWGFjdFByb2Nz OwotCVBNU2lnbmFsU3RhdGUgPSBwYXJhbS0+UE1TaWduYWxTdGF0ZTsKLQotCVBvc3RtYXN0 ZXJQaWQgPSBwYXJhbS0+UG9zdG1hc3RlclBpZDsKLQlQZ1N0YXJ0VGltZSA9IHBhcmFtLT5Q Z1N0YXJ0VGltZTsKLQlQZ1JlbG9hZFRpbWUgPSBwYXJhbS0+UGdSZWxvYWRUaW1lOwotCWZp cnN0X3N5c2xvZ2dlcl9maWxlX3RpbWUgPSBwYXJhbS0+Zmlyc3Rfc3lzbG9nZ2VyX2ZpbGVf dGltZTsKLQotCXJlZGlyZWN0aW9uX2RvbmUgPSBwYXJhbS0+cmVkaXJlY3Rpb25fZG9uZTsK LQlJc0JpbmFyeVVwZ3JhZGUgPSBwYXJhbS0+SXNCaW5hcnlVcGdyYWRlOwotCXF1ZXJ5X2lk X2VuYWJsZWQgPSBwYXJhbS0+cXVlcnlfaWRfZW5hYmxlZDsKLQltYXhfc2FmZV9mZHMgPSBw YXJhbS0+bWF4X3NhZmVfZmRzOwotCi0JTWF4QmFja2VuZHMgPSBwYXJhbS0+TWF4QmFja2Vu ZHM7Ci0KLSNpZmRlZiBXSU4zMgotCVBvc3RtYXN0ZXJIYW5kbGUgPSBwYXJhbS0+UG9zdG1h c3RlckhhbmRsZTsKLQlwZ3dpbjMyX2luaXRpYWxfc2lnbmFsX3BpcGUgPSBwYXJhbS0+aW5p dGlhbF9zaWduYWxfcGlwZTsKLSNlbHNlCi0JbWVtY3B5KCZwb3N0bWFzdGVyX2FsaXZlX2Zk cywgJnBhcmFtLT5wb3N0bWFzdGVyX2FsaXZlX2ZkcywKLQkJICAgc2l6ZW9mKHBvc3RtYXN0 ZXJfYWxpdmVfZmRzKSk7Ci0jZW5kaWYKLQotCW1lbWNweSgmc3lzbG9nUGlwZSwgJnBhcmFt LT5zeXNsb2dQaXBlLCBzaXplb2Yoc3lzbG9nUGlwZSkpOwotCi0Jc3RybGNweShteV9leGVj X3BhdGgsIHBhcmFtLT5teV9leGVjX3BhdGgsIE1BWFBHUEFUSCk7Ci0KLQlzdHJsY3B5KHBr Z2xpYl9wYXRoLCBwYXJhbS0+cGtnbGliX3BhdGgsIE1BWFBHUEFUSCk7Ci0KLQlpZiAocGFy YW0tPk15Qmd3b3JrZXJFbnRyeS5iZ3dfbmFtZVswXSAhPSAnXDAnKQotCXsKLQkJTXlCZ3dv cmtlckVudHJ5ID0gKEJhY2tncm91bmRXb3JrZXIgKikKLQkJCU1lbW9yeUNvbnRleHRBbGxv YyhUb3BNZW1vcnlDb250ZXh0LCBzaXplb2YoQmFja2dyb3VuZFdvcmtlcikpOwotCQltZW1j cHkoTXlCZ3dvcmtlckVudHJ5LCAmcGFyYW0tPk15Qmd3b3JrZXJFbnRyeSwgc2l6ZW9mKEJh Y2tncm91bmRXb3JrZXIpKTsKLQl9Ci0KLQkvKgotCSAqIFdlIG5lZWQgdG8gcmVzdG9yZSBm ZC5jJ3MgY291bnRzIG9mIGV4dGVybmFsbHktb3BlbmVkIEZEczsgdG8gYXZvaWQKLQkgKiBj b25mdXNpb24sIGJlIHN1cmUgdG8gZG8gdGhpcyBhZnRlciByZXN0b3JpbmcgbWF4X3NhZmVf ZmRzLiAgKE5vdGU6Ci0JICogQmFja2VuZEluaXRpYWxpemUgd2lsbCBoYW5kbGUgdGhpcyBm b3IgcG9ydC0+c29jay4pCi0JICovCi0jaWZuZGVmIFdJTjMyCi0JaWYgKHBvc3RtYXN0ZXJf YWxpdmVfZmRzWzBdID49IDApCi0JCVJlc2VydmVFeHRlcm5hbEZEKCk7Ci0JaWYgKHBvc3Rt YXN0ZXJfYWxpdmVfZmRzWzFdID49IDApCi0JCVJlc2VydmVFeHRlcm5hbEZEKCk7Ci0jZW5k aWYKLX0KLQotCiBTaXplCiBTaG1lbUJhY2tlbmRBcnJheVNpemUodm9pZCkKIHsKQEAgLTY0 MjIsNiArNTMzNSwzMiBAQCBwZ3dpbjMyX2RlYWRjaGlsZF9jYWxsYmFjayhQVk9JRCBscFBh cmFtZXRlciwgQk9PTEVBTiBUaW1lck9yV2FpdEZpcmVkKQogCS8qIFF1ZXVlIFNJR0NITEQg c2lnbmFsLiAqLwogCXBnX3F1ZXVlX3NpZ25hbChTSUdDSExEKTsKIH0KKworLyoKKyAqIFF1 ZXVlIGEgd2FpdGVyIHRvIHNpZ25hbCB3aGVuIHRoaXMgY2hpbGQgZGllcy4gVGhlIHdhaXQg d2lsbCBiZSBoYW5kbGVkCisgKiBhdXRvbWF0aWNhbGx5IGJ5IGFuIG9wZXJhdGluZyBzeXN0 ZW0gdGhyZWFkIHBvb2wuICBUaGUgbWVtb3J5IHdpbGwgYmUKKyAqIGZyZWVkIGJ5IGEgbGF0 ZXIgY2FsbCB0byB3YWl0cGlkKCkuCisgKi8KK3ZvaWQKK3Bnd2luMzJfcmVnaXN0ZXJfZGVh ZGNoaWxkX2NhbGxiYWNrKEhBTkRMRSBwcm9jSGFuZGxlLCBEV09SRCBwcm9jSWQpCit7CisJ d2luMzJfZGVhZGNoaWxkX3dhaXRpbmZvICpjaGlsZGluZm87CisKKwljaGlsZGluZm8gPSBw YWxsb2Moc2l6ZW9mKHdpbjMyX2RlYWRjaGlsZF93YWl0aW5mbykpOworCWNoaWxkaW5mby0+ cHJvY0hhbmRsZSA9IHByb2NIYW5kbGU7CisJY2hpbGRpbmZvLT5wcm9jSWQgPSBwcm9jSWQ7 CisKKwlpZiAoIVJlZ2lzdGVyV2FpdEZvclNpbmdsZU9iamVjdCgmY2hpbGRpbmZvLT53YWl0 SGFuZGxlLAorCQkJCQkJCQkJIHByb2NIYW5kbGUsCisJCQkJCQkJCQkgcGd3aW4zMl9kZWFk Y2hpbGRfY2FsbGJhY2ssCisJCQkJCQkJCQkgY2hpbGRpbmZvLAorCQkJCQkJCQkJIElORklO SVRFLAorCQkJCQkJCQkJIFdUX0VYRUNVVEVPTkxZT05DRSB8IFdUX0VYRUNVVEVJTldBSVRU SFJFQUQpKQorCQllcmVwb3J0KEZBVEFMLAorCQkJCShlcnJtc2dfaW50ZXJuYWwoImNvdWxk IG5vdCByZWdpc3RlciBwcm9jZXNzIGZvciB3YWl0OiBlcnJvciBjb2RlICVsdSIsCisJCQkJ CQkJCSBHZXRMYXN0RXJyb3IoKSkpKTsKK30KKwogI2VuZGlmCQkJCQkJCS8qIFdJTjMyICov CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3N0YXJ0dXAuYyBi L3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvc3RhcnR1cC5jCmluZGV4IGVmYzI1ODA1MzZhLi4w ZGIwODQzYWI4ZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9zdGFydHVw LmMKKysrIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9zdGFydHVwLmMKQEAgLTI1LDYgKzI1 LDcgQEAKICNpbmNsdWRlICJsaWJwcS9wcXNpZ25hbC5oIgogI2luY2x1ZGUgIm1pc2NhZG1p bi5oIgogI2luY2x1ZGUgInBnc3RhdC5oIgorI2luY2x1ZGUgInBvc3RtYXN0ZXIvYXV4cHJv Y2Vzcy5oIgogI2luY2x1ZGUgInBvc3RtYXN0ZXIvaW50ZXJydXB0LmgiCiAjaW5jbHVkZSAi cG9zdG1hc3Rlci9zdGFydHVwLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9pcGMuaCIKQEAgLTIy Nyw4ICsyMjgsMTQgQEAgU3RhcnR1cFByb2NFeGl0KGludCBjb2RlLCBEYXR1bSBhcmcpCiAg KiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKi8KIHZvaWQKLVN0YXJ0 dXBQcm9jZXNzTWFpbih2b2lkKQorU3RhcnR1cFByb2Nlc3NNYWluKGNoYXIgKnN0YXJ0dXBf ZGF0YSwgc2l6ZV90IHN0YXJ0dXBfZGF0YV9sZW4pCiB7CisJQXNzZXJ0KHN0YXJ0dXBfZGF0 YV9sZW4gPT0gMCk7CisKKwlNeUF1eFByb2NUeXBlID0gU3RhcnR1cFByb2Nlc3M7CisJTXlC YWNrZW5kVHlwZSA9IEJfU1RBUlRVUDsKKwlBdXhpbGlhcnlQcm9jZXNzSW5pdCgpOworCiAJ LyogQXJyYW5nZSB0byBjbGVhbiB1cCBhdCBzdGFydHVwIHByb2Nlc3MgZXhpdCAqLwogCW9u X3NobWVtX2V4aXQoU3RhcnR1cFByb2NFeGl0LCAwKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvcG9zdG1hc3Rlci9zeXNsb2dnZXIuYyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIv c3lzbG9nZ2VyLmMKaW5kZXggODU4YTJmNmIyYjkuLmRlNDViOTU2NWZlIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3N5c2xvZ2dlci5jCisrKyBiL3NyYy9iYWNrZW5k L3Bvc3RtYXN0ZXIvc3lzbG9nZ2VyLmMKQEAgLTM5LDcgKzM5LDYgQEAKICNpbmNsdWRlICJw Z3N0YXQuaCIKICNpbmNsdWRlICJwZ3RpbWUuaCIKICNpbmNsdWRlICJwb3J0L3BnX2JpdHV0 aWxzLmgiCi0jaW5jbHVkZSAicG9zdG1hc3Rlci9mb3JrX3Byb2Nlc3MuaCIKICNpbmNsdWRl ICJwb3N0bWFzdGVyL2ludGVycnVwdC5oIgogI2luY2x1ZGUgInBvc3RtYXN0ZXIvcG9zdG1h c3Rlci5oIgogI2luY2x1ZGUgInBvc3RtYXN0ZXIvc3lzbG9nZ2VyLmgiCkBAIC01MCw2ICs0 OSw3IEBACiAjaW5jbHVkZSAic3RvcmFnZS9wZ19zaG1lbS5oIgogI2luY2x1ZGUgInRjb3Av dGNvcHByb3QuaCIKICNpbmNsdWRlICJ1dGlscy9ndWMuaCIKKyNpbmNsdWRlICJ1dGlscy9t ZW11dGlscy5oIgogI2luY2x1ZGUgInV0aWxzL3BzX3N0YXR1cy5oIgogI2luY2x1ZGUgInV0 aWxzL3RpbWVzdGFtcC5oIgogCkBAIC0xMzQsMTAgKzEzNCw3IEBAIHN0YXRpYyB2b2xhdGls ZSBzaWdfYXRvbWljX3Qgcm90YXRpb25fcmVxdWVzdGVkID0gZmFsc2U7CiAjaWZkZWYgRVhF Q19CQUNLRU5ECiBzdGF0aWMgaW50CXN5c2xvZ2dlcl9mZGdldChGSUxFICpmaWxlKTsKIHN0 YXRpYyBGSUxFICpzeXNsb2dnZXJfZmRvcGVuKGludCBmZCk7Ci1zdGF0aWMgcGlkX3Qgc3lz bG9nZ2VyX2ZvcmtleGVjKHZvaWQpOwotc3RhdGljIHZvaWQgc3lzbG9nZ2VyX3BhcnNlQXJn cyhpbnQgYXJnYywgY2hhciAqYXJndltdKTsKICNlbmRpZgotTk9OX0VYRUNfU1RBVElDIHZv aWQgU3lzTG9nZ2VyTWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKSBwZ19hdHRyaWJ1dGVf bm9yZXR1cm4oKTsKIHN0YXRpYyB2b2lkIHByb2Nlc3NfcGlwZV9pbnB1dChjaGFyICpsb2di dWZmZXIsIGludCAqYnl0ZXNfaW5fbG9nYnVmZmVyKTsKIHN0YXRpYyB2b2lkIGZsdXNoX3Bp cGVfaW5wdXQoY2hhciAqbG9nYnVmZmVyLCBpbnQgKmJ5dGVzX2luX2xvZ2J1ZmZlcik7CiBz dGF0aWMgRklMRSAqbG9nZmlsZV9vcGVuKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjb25zdCBj aGFyICptb2RlLApAQCAtMTU2LDEzICsxNTMsMTkgQEAgc3RhdGljIHZvaWQgc2V0X25leHRf cm90YXRpb25fdGltZSh2b2lkKTsKIHN0YXRpYyB2b2lkIHNpZ1VzcjFIYW5kbGVyKFNJR05B TF9BUkdTKTsKIHN0YXRpYyB2b2lkIHVwZGF0ZV9tZXRhaW5mb19kYXRhZmlsZSh2b2lkKTsK IAordHlwZWRlZiBzdHJ1Y3QKK3sKKwlpbnQJCQlzeXNsb2dGaWxlOworCWludAkJCWNzdmxv Z0ZpbGU7CisJaW50CQkJanNvbmxvZ0ZpbGU7Cit9IHN5c2xvZ2dlcl9zdGFydHVwX2RhdGE7 CiAKIC8qCiAgKiBNYWluIGVudHJ5IHBvaW50IGZvciBzeXNsb2dnZXIgcHJvY2VzcwogICog YXJnYy9hcmd2IHBhcmFtZXRlcnMgYXJlIHZhbGlkIG9ubHkgaW4gRVhFQ19CQUNLRU5EIGNh c2UuCiAgKi8KLU5PTl9FWEVDX1NUQVRJQyB2b2lkCi1TeXNMb2dnZXJNYWluKGludCBhcmdj LCBjaGFyICphcmd2W10pCit2b2lkCitTeXNMb2dnZXJNYWluKGNoYXIgKnN0YXJ0dXBfZGF0 YSwgc2l6ZV90IHN0YXJ0dXBfZGF0YV9sZW4pCiB7CiAjaWZuZGVmIFdJTjMyCiAJY2hhcgkJ bG9nYnVmZmVyW1JFQURfQlVGX1NJWkVdOwpAQCAtMTc0LDExICsxNzcsMzQgQEAgU3lzTG9n Z2VyTWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCXBnX3RpbWVfdAlub3c7CiAJV2Fp dEV2ZW50U2V0ICp3ZXM7CiAKLQlub3cgPSBNeVN0YXJ0VGltZTsKKwkvKiBSZWxlYXNlIHBv c3RtYXN0ZXIncyB3b3JraW5nIG1lbW9yeSBjb250ZXh0ICovCisJaWYgKFBvc3RtYXN0ZXJD b250ZXh0KQorCXsKKwkJTWVtb3J5Q29udGV4dERlbGV0ZShQb3N0bWFzdGVyQ29udGV4dCk7 CisJCVBvc3RtYXN0ZXJDb250ZXh0ID0gTlVMTDsKKwl9CiAKKwkvKgorCSAqIFJlLW9wZW4g dGhlIGVycm9yIG91dHB1dCBmaWxlcyB0aGF0IHdlcmUgb3BlbmVkIGJ5IFN5c0xvZ2dlcl9T dGFydCgpLgorCSAqCisJICogV2UgZXhwZWN0IHRoaXMgd2lsbCBhbHdheXMgc3VjY2VlZCwg d2hpY2ggaXMgdG9vIG9wdGltaXN0aWMsIGJ1dCBpZiBpdAorCSAqIGZhaWxzIHRoZXJlJ3Mg bm90IGEgbG90IHdlIGNhbiBkbyB0byByZXBvcnQgdGhlIHByb2JsZW0gYW55d2F5LiAgQXMK KwkgKiBjb2RlZCwgd2UnbGwganVzdCBjcmFzaCBvbiBhIG51bGwgcG9pbnRlciBkZXJlZmVy ZW5jZSBhZnRlciBmYWlsdXJlLi4uCisJICovCiAjaWZkZWYgRVhFQ19CQUNLRU5ECi0Jc3lz bG9nZ2VyX3BhcnNlQXJncyhhcmdjLCBhcmd2KTsKLSNlbmRpZgkJCQkJCQkvKiBFWEVDX0JB Q0tFTkQgKi8KKwl7CisJCXN5c2xvZ2dlcl9zdGFydHVwX2RhdGEgKmluZm8gPSAoc3lzbG9n Z2VyX3N0YXJ0dXBfZGF0YSAqKSBzdGFydHVwX2RhdGE7CisKKwkJQXNzZXJ0KHN0YXJ0dXBf ZGF0YV9sZW4gPT0gc2l6ZW9mKCppbmZvKSk7CisJCXN5c2xvZ0ZpbGUgPSBzeXNsb2dnZXJf ZmRvcGVuKGluZm8tPnN5c2xvZ0ZpbGUpOworCQljc3Zsb2dGaWxlID0gc3lzbG9nZ2VyX2Zk b3BlbihpbmZvLT5jc3Zsb2dGaWxlKTsKKwkJanNvbmxvZ0ZpbGUgPSBzeXNsb2dnZXJfZmRv cGVuKGluZm8tPmpzb25sb2dGaWxlKTsKKwl9CisjZWxzZQorCUFzc2VydChzdGFydHVwX2Rh dGFfbGVuID09IDApOworI2VuZGlmCisKKwlub3cgPSBNeVN0YXJ0VGltZTsKIAogCU15QmFj a2VuZFR5cGUgPSBCX0xPR0dFUjsKIAlpbml0X3BzX2Rpc3BsYXkoTlVMTCk7CkBAIC01Njgs NiArNTk0LDkgQEAgU3lzTG9nZ2VyX1N0YXJ0KHZvaWQpCiB7CiAJcGlkX3QJCXN5c2xvZ2dl clBpZDsKIAljaGFyCSAgICpmaWxlbmFtZTsKKyNpZmRlZiBFWEVDX0JBQ0tFTkQKKwlzeXNs b2dnZXJfc3RhcnR1cF9kYXRhIHN0YXJ0dXBfZGF0YTsKKyNlbmRpZgkJCQkJCQkvKiBFWEVD X0JBQ0tFTkQgKi8KIAogCWlmICghTG9nZ2luZ19jb2xsZWN0b3IpCiAJCXJldHVybiAwOwpA QCAtNjY3LDExMiArNjk2LDk1IEBAIFN5c0xvZ2dlcl9TdGFydCh2b2lkKQogCX0KIAogI2lm ZGVmIEVYRUNfQkFDS0VORAotCXN3aXRjaCAoKHN5c2xvZ2dlclBpZCA9IHN5c2xvZ2dlcl9m b3JrZXhlYygpKSkKKwlzdGFydHVwX2RhdGEuc3lzbG9nRmlsZSA9IHN5c2xvZ2dlcl9mZGdl dChzeXNsb2dGaWxlKTsKKwlzdGFydHVwX2RhdGEuY3N2bG9nRmlsZSA9IHN5c2xvZ2dlcl9m ZGdldChjc3Zsb2dGaWxlKTsKKwlzdGFydHVwX2RhdGEuanNvbmxvZ0ZpbGUgPSBzeXNsb2dn ZXJfZmRnZXQoanNvbmxvZ0ZpbGUpOworCXN5c2xvZ2dlclBpZCA9IHBvc3RtYXN0ZXJfY2hp bGRfbGF1bmNoKFBNQ19TWVNMT0dHRVIsIChjaGFyICopICZzdGFydHVwX2RhdGEsIHNpemVv ZihzdGFydHVwX2RhdGEpLCBOVUxMKTsKICNlbHNlCi0Jc3dpdGNoICgoc3lzbG9nZ2VyUGlk ID0gZm9ya19wcm9jZXNzKCkpKQotI2VuZGlmCi0JewotCQljYXNlIC0xOgotCQkJZXJlcG9y dChMT0csCi0JCQkJCShlcnJtc2coImNvdWxkIG5vdCBmb3JrIHN5c3RlbSBsb2dnZXI6ICVt IikpKTsKLQkJCXJldHVybiAwOwotCi0jaWZuZGVmIEVYRUNfQkFDS0VORAotCQljYXNlIDA6 Ci0JCQkvKiBpbiBwb3N0bWFzdGVyIGNoaWxkIC4uLiAqLwotCQkJSW5pdFBvc3RtYXN0ZXJD aGlsZCgpOwotCi0JCQkvKiBDbG9zZSB0aGUgcG9zdG1hc3RlcidzIHNvY2tldHMgKi8KLQkJ CUNsb3NlUG9zdG1hc3RlclBvcnRzKHRydWUpOwotCi0JCQkvKiBEcm9wIG91ciBjb25uZWN0 aW9uIHRvIHBvc3RtYXN0ZXIncyBzaGFyZWQgbWVtb3J5LCBhcyB3ZWxsICovCi0JCQlkc21f ZGV0YWNoX2FsbCgpOwotCQkJUEdTaGFyZWRNZW1vcnlEZXRhY2goKTsKKwlzeXNsb2dnZXJQ aWQgPSBwb3N0bWFzdGVyX2NoaWxkX2xhdW5jaChQTUNfU1lTTE9HR0VSLCBOVUxMLCAwLCBO VUxMKTsKKyNlbmRpZgkJCQkJCQkvKiBFWEVDX0JBQ0tFTkQgKi8KIAotCQkJLyogZG8gdGhl IHdvcmsgKi8KLQkJCVN5c0xvZ2dlck1haW4oMCwgTlVMTCk7Ci0JCQlicmVhazsKLSNlbmRp ZgorCWlmIChzeXNsb2dnZXJQaWQgPT0gLTEpCisJeworCQllcmVwb3J0KExPRywKKwkJCQko ZXJybXNnKCJjb3VsZCBub3QgZm9yayBzeXN0ZW0gbG9nZ2VyOiAlbSIpKSk7CisJCXJldHVy biAwOworCX0KIAotCQlkZWZhdWx0OgotCQkJLyogc3VjY2VzcywgaW4gcG9zdG1hc3RlciAq LworCS8qIHN1Y2Nlc3MsIGluIHBvc3RtYXN0ZXIgKi8KIAotCQkJLyogbm93IHdlIHJlZGly ZWN0IHN0ZGVyciwgaWYgbm90IGRvbmUgYWxyZWFkeSAqLwotCQkJaWYgKCFyZWRpcmVjdGlv bl9kb25lKQotCQkJeworCS8qIG5vdyB3ZSByZWRpcmVjdCBzdGRlcnIsIGlmIG5vdCBkb25l IGFscmVhZHkgKi8KKwlpZiAoIXJlZGlyZWN0aW9uX2RvbmUpCisJewogI2lmZGVmIFdJTjMy Ci0JCQkJaW50CQkJZmQ7CisJCWludAkJCWZkOwogI2VuZGlmCiAKLQkJCQkvKgotCQkJCSAq IExlYXZlIGEgYnJlYWRjcnVtYiB0cmFpbCB3aGVuIHJlZGlyZWN0aW5nLCBpbiBjYXNlIHRo ZSB1c2VyCi0JCQkJICogZm9yZ2V0cyB0aGF0IHJlZGlyZWN0aW9uIGlzIGFjdGl2ZSBhbmQg bG9va3Mgb25seSBhdCB0aGUKLQkJCQkgKiBvcmlnaW5hbCBzdGRlcnIgdGFyZ2V0IGZpbGUu Ci0JCQkJICovCi0JCQkJZXJlcG9ydChMT0csCi0JCQkJCQkoZXJybXNnKCJyZWRpcmVjdGlu ZyBsb2cgb3V0cHV0IHRvIGxvZ2dpbmcgY29sbGVjdG9yIHByb2Nlc3MiKSwKLQkJCQkJCSBl cnJoaW50KCJGdXR1cmUgbG9nIG91dHB1dCB3aWxsIGFwcGVhciBpbiBkaXJlY3RvcnkgXCIl c1wiLiIsCi0JCQkJCQkJCSBMb2dfZGlyZWN0b3J5KSkpOworCQkvKgorCQkgKiBMZWF2ZSBh IGJyZWFkY3J1bWIgdHJhaWwgd2hlbiByZWRpcmVjdGluZywgaW4gY2FzZSB0aGUgdXNlciBm b3JnZXRzCisJCSAqIHRoYXQgcmVkaXJlY3Rpb24gaXMgYWN0aXZlIGFuZCBsb29rcyBvbmx5 IGF0IHRoZSBvcmlnaW5hbCBzdGRlcnIKKwkJICogdGFyZ2V0IGZpbGUuCisJCSAqLworCQll cmVwb3J0KExPRywKKwkJCQkoZXJybXNnKCJyZWRpcmVjdGluZyBsb2cgb3V0cHV0IHRvIGxv Z2dpbmcgY29sbGVjdG9yIHByb2Nlc3MiKSwKKwkJCQkgZXJyaGludCgiRnV0dXJlIGxvZyBv dXRwdXQgd2lsbCBhcHBlYXIgaW4gZGlyZWN0b3J5IFwiJXNcIi4iLAorCQkJCQkJIExvZ19k aXJlY3RvcnkpKSk7CiAKICNpZm5kZWYgV0lOMzIKLQkJCQlmZmx1c2goc3Rkb3V0KTsKLQkJ CQlpZiAoZHVwMihzeXNsb2dQaXBlWzFdLCBTVERPVVRfRklMRU5PKSA8IDApCi0JCQkJCWVy ZXBvcnQoRkFUQUwsCi0JCQkJCQkJKGVycmNvZGVfZm9yX2ZpbGVfYWNjZXNzKCksCi0JCQkJ CQkJIGVycm1zZygiY291bGQgbm90IHJlZGlyZWN0IHN0ZG91dDogJW0iKSkpOwotCQkJCWZm bHVzaChzdGRlcnIpOwotCQkJCWlmIChkdXAyKHN5c2xvZ1BpcGVbMV0sIFNUREVSUl9GSUxF Tk8pIDwgMCkKLQkJCQkJZXJlcG9ydChGQVRBTCwKLQkJCQkJCQkoZXJyY29kZV9mb3JfZmls ZV9hY2Nlc3MoKSwKLQkJCQkJCQkgZXJybXNnKCJjb3VsZCBub3QgcmVkaXJlY3Qgc3RkZXJy OiAlbSIpKSk7Ci0JCQkJLyogTm93IHdlIGFyZSBkb25lIHdpdGggdGhlIHdyaXRlIGVuZCBv ZiB0aGUgcGlwZS4gKi8KLQkJCQljbG9zZShzeXNsb2dQaXBlWzFdKTsKLQkJCQlzeXNsb2dQ aXBlWzFdID0gLTE7CisJCWZmbHVzaChzdGRvdXQpOworCQlpZiAoZHVwMihzeXNsb2dQaXBl WzFdLCBTVERPVVRfRklMRU5PKSA8IDApCisJCQllcmVwb3J0KEZBVEFMLAorCQkJCQkoZXJy Y29kZV9mb3JfZmlsZV9hY2Nlc3MoKSwKKwkJCQkJIGVycm1zZygiY291bGQgbm90IHJlZGly ZWN0IHN0ZG91dDogJW0iKSkpOworCQlmZmx1c2goc3RkZXJyKTsKKwkJaWYgKGR1cDIoc3lz bG9nUGlwZVsxXSwgU1RERVJSX0ZJTEVOTykgPCAwKQorCQkJZXJlcG9ydChGQVRBTCwKKwkJ CQkJKGVycmNvZGVfZm9yX2ZpbGVfYWNjZXNzKCksCisJCQkJCSBlcnJtc2coImNvdWxkIG5v dCByZWRpcmVjdCBzdGRlcnI6ICVtIikpKTsKKwkJLyogTm93IHdlIGFyZSBkb25lIHdpdGgg dGhlIHdyaXRlIGVuZCBvZiB0aGUgcGlwZS4gKi8KKwkJY2xvc2Uoc3lzbG9nUGlwZVsxXSk7 CisJCXN5c2xvZ1BpcGVbMV0gPSAtMTsKICNlbHNlCiAKLQkJCQkvKgotCQkJCSAqIG9wZW4g dGhlIHBpcGUgaW4gYmluYXJ5IG1vZGUgYW5kIG1ha2Ugc3VyZSBzdGRlcnIgaXMgYmluYXJ5 Ci0JCQkJICogYWZ0ZXIgaXQncyBiZWVuIGR1cCdlZCBpbnRvLCB0byBhdm9pZCBkaXN0dXJi aW5nIHRoZSBwaXBlCi0JCQkJICogY2h1bmtpbmcgcHJvdG9jb2wuCi0JCQkJICovCi0JCQkJ ZmZsdXNoKHN0ZGVycik7Ci0JCQkJZmQgPSBfb3Blbl9vc2ZoYW5kbGUoKGludHB0cl90KSBz eXNsb2dQaXBlWzFdLAotCQkJCQkJCQkJIF9PX0FQUEVORCB8IF9PX0JJTkFSWSk7Ci0JCQkJ aWYgKGR1cDIoZmQsIFNUREVSUl9GSUxFTk8pIDwgMCkKLQkJCQkJZXJlcG9ydChGQVRBTCwK LQkJCQkJCQkoZXJyY29kZV9mb3JfZmlsZV9hY2Nlc3MoKSwKLQkJCQkJCQkgZXJybXNnKCJj b3VsZCBub3QgcmVkaXJlY3Qgc3RkZXJyOiAlbSIpKSk7Ci0JCQkJY2xvc2UoZmQpOwotCQkJ CV9zZXRtb2RlKFNUREVSUl9GSUxFTk8sIF9PX0JJTkFSWSk7CisJCS8qCisJCSAqIG9wZW4g dGhlIHBpcGUgaW4gYmluYXJ5IG1vZGUgYW5kIG1ha2Ugc3VyZSBzdGRlcnIgaXMgYmluYXJ5 IGFmdGVyCisJCSAqIGl0J3MgYmVlbiBkdXAnZWQgaW50bywgdG8gYXZvaWQgZGlzdHVyYmlu ZyB0aGUgcGlwZSBjaHVua2luZworCQkgKiBwcm90b2NvbC4KKwkJICovCisJCWZmbHVzaChz dGRlcnIpOworCQlmZCA9IF9vcGVuX29zZmhhbmRsZSgoaW50cHRyX3QpIHN5c2xvZ1BpcGVb MV0sCisJCQkJCQkJIF9PX0FQUEVORCB8IF9PX0JJTkFSWSk7CisJCWlmIChkdXAyKGZkLCBT VERFUlJfRklMRU5PKSA8IDApCisJCQllcmVwb3J0KEZBVEFMLAorCQkJCQkoZXJyY29kZV9m b3JfZmlsZV9hY2Nlc3MoKSwKKwkJCQkJIGVycm1zZygiY291bGQgbm90IHJlZGlyZWN0IHN0 ZGVycjogJW0iKSkpOworCQljbG9zZShmZCk7CisJCV9zZXRtb2RlKFNUREVSUl9GSUxFTk8s IF9PX0JJTkFSWSk7CiAKLQkJCQkvKgotCQkJCSAqIE5vdyB3ZSBhcmUgZG9uZSB3aXRoIHRo ZSB3cml0ZSBlbmQgb2YgdGhlIHBpcGUuCi0JCQkJICogQ2xvc2VIYW5kbGUoKSBtdXN0IG5v dCBiZSBjYWxsZWQgYmVjYXVzZSB0aGUgcHJlY2VkaW5nCi0JCQkJICogY2xvc2UoKSBjbG9z ZXMgdGhlIHVuZGVybHlpbmcgaGFuZGxlLgotCQkJCSAqLwotCQkJCXN5c2xvZ1BpcGVbMV0g PSAwOworCQkvKgorCQkgKiBOb3cgd2UgYXJlIGRvbmUgd2l0aCB0aGUgd3JpdGUgZW5kIG9m IHRoZSBwaXBlLiAgQ2xvc2VIYW5kbGUoKSBtdXN0CisJCSAqIG5vdCBiZSBjYWxsZWQgYmVj YXVzZSB0aGUgcHJlY2VkaW5nIGNsb3NlKCkgY2xvc2VzIHRoZSB1bmRlcmx5aW5nCisJCSAq IGhhbmRsZS4KKwkJICovCisJCXN5c2xvZ1BpcGVbMV0gPSAwOwogI2VuZGlmCi0JCQkJcmVk aXJlY3Rpb25fZG9uZSA9IHRydWU7Ci0JCQl9Ci0KLQkJCS8qIHBvc3RtYXN0ZXIgd2lsbCBu ZXZlciB3cml0ZSB0aGUgZmlsZShzKTsgY2xvc2UgJ2VtICovCi0JCQlmY2xvc2Uoc3lzbG9n RmlsZSk7Ci0JCQlzeXNsb2dGaWxlID0gTlVMTDsKLQkJCWlmIChjc3Zsb2dGaWxlICE9IE5V TEwpCi0JCQl7Ci0JCQkJZmNsb3NlKGNzdmxvZ0ZpbGUpOwotCQkJCWNzdmxvZ0ZpbGUgPSBO VUxMOwotCQkJfQotCQkJaWYgKGpzb25sb2dGaWxlICE9IE5VTEwpCi0JCQl7Ci0JCQkJZmNs b3NlKGpzb25sb2dGaWxlKTsKLQkJCQlqc29ubG9nRmlsZSA9IE5VTEw7Ci0JCQl9Ci0JCQly ZXR1cm4gKGludCkgc3lzbG9nZ2VyUGlkOworCQlyZWRpcmVjdGlvbl9kb25lID0gdHJ1ZTsK IAl9CiAKLQkvKiB3ZSBzaG91bGQgbmV2ZXIgcmVhY2ggaGVyZSAqLwotCXJldHVybiAwOwor CS8qIHBvc3RtYXN0ZXIgd2lsbCBuZXZlciB3cml0ZSB0aGUgZmlsZShzKTsgY2xvc2UgJ2Vt ICovCisJZmNsb3NlKHN5c2xvZ0ZpbGUpOworCXN5c2xvZ0ZpbGUgPSBOVUxMOworCWlmIChj c3Zsb2dGaWxlICE9IE5VTEwpCisJeworCQlmY2xvc2UoY3N2bG9nRmlsZSk7CisJCWNzdmxv Z0ZpbGUgPSBOVUxMOworCX0KKwlpZiAoanNvbmxvZ0ZpbGUgIT0gTlVMTCkKKwl7CisJCWZj bG9zZShqc29ubG9nRmlsZSk7CisJCWpzb25sb2dGaWxlID0gTlVMTDsKKwl9CisJcmV0dXJu IChpbnQpIHN5c2xvZ2dlclBpZDsKIH0KIAogCkBAIC04MzEsNjkgKzg0Myw2IEBAIHN5c2xv Z2dlcl9mZG9wZW4oaW50IGZkKQogCiAJcmV0dXJuIGZpbGU7CiB9Ci0KLS8qCi0gKiBzeXNs b2dnZXJfZm9ya2V4ZWMoKSAtCi0gKgotICogRm9ybWF0IHVwIHRoZSBhcmdsaXN0IGZvciwg dGhlbiBmb3JrIGFuZCBleGVjLCBhIHN5c2xvZ2dlciBwcm9jZXNzCi0gKi8KLXN0YXRpYyBw aWRfdAotc3lzbG9nZ2VyX2ZvcmtleGVjKHZvaWQpCi17Ci0JY2hhcgkgICAqYXZbMTBdOwot CWludAkJCWFjID0gMDsKLQljaGFyCQlmaWxlbm9idWZbMzJdOwotCWNoYXIJCWNzdmZpbGVu b2J1ZlszMl07Ci0JY2hhcgkJanNvbmZpbGVub2J1ZlszMl07Ci0KLQlhdlthYysrXSA9ICJw b3N0Z3JlcyI7Ci0JYXZbYWMrK10gPSAiLS1mb3JrbG9nIjsKLQlhdlthYysrXSA9IE5VTEw7 CQkJLyogZmlsbGVkIGluIGJ5IHBvc3RtYXN0ZXJfZm9ya2V4ZWMgKi8KLQotCS8qIHN0YXRp YyB2YXJpYWJsZXMgKHRob3NlIG5vdCBwYXNzZWQgYnkgd3JpdGVfYmFja2VuZF92YXJpYWJs ZXMpICovCi0Jc25wcmludGYoZmlsZW5vYnVmLCBzaXplb2YoZmlsZW5vYnVmKSwgIiVkIiwK LQkJCSBzeXNsb2dnZXJfZmRnZXQoc3lzbG9nRmlsZSkpOwotCWF2W2FjKytdID0gZmlsZW5v YnVmOwotCXNucHJpbnRmKGNzdmZpbGVub2J1Ziwgc2l6ZW9mKGNzdmZpbGVub2J1ZiksICIl ZCIsCi0JCQkgc3lzbG9nZ2VyX2ZkZ2V0KGNzdmxvZ0ZpbGUpKTsKLQlhdlthYysrXSA9IGNz dmZpbGVub2J1ZjsKLQlzbnByaW50Zihqc29uZmlsZW5vYnVmLCBzaXplb2YoanNvbmZpbGVu b2J1ZiksICIlZCIsCi0JCQkgc3lzbG9nZ2VyX2ZkZ2V0KGpzb25sb2dGaWxlKSk7Ci0JYXZb YWMrK10gPSBqc29uZmlsZW5vYnVmOwotCi0JYXZbYWNdID0gTlVMTDsKLQlBc3NlcnQoYWMg PCBsZW5ndGhvZihhdikpOwotCi0JcmV0dXJuIHBvc3RtYXN0ZXJfZm9ya2V4ZWMoYWMsIGF2 KTsKLX0KLQotLyoKLSAqIHN5c2xvZ2dlcl9wYXJzZUFyZ3MoKSAtCi0gKgotICogRXh0cmFj dCBkYXRhIGZyb20gdGhlIGFyZ2xpc3QgZm9yIGV4ZWMnZWQgc3lzbG9nZ2VyIHByb2Nlc3MK LSAqLwotc3RhdGljIHZvaWQKLXN5c2xvZ2dlcl9wYXJzZUFyZ3MoaW50IGFyZ2MsIGNoYXIg KmFyZ3ZbXSkKLXsKLQlpbnQJCQlmZDsKLQotCUFzc2VydChhcmdjID09IDYpOwotCWFyZ3Yg Kz0gMzsKLQotCS8qCi0JICogUmUtb3BlbiB0aGUgZXJyb3Igb3V0cHV0IGZpbGVzIHRoYXQg d2VyZSBvcGVuZWQgYnkgU3lzTG9nZ2VyX1N0YXJ0KCkuCi0JICoKLQkgKiBXZSBleHBlY3Qg dGhpcyB3aWxsIGFsd2F5cyBzdWNjZWVkLCB3aGljaCBpcyB0b28gb3B0aW1pc3RpYywgYnV0 IGlmIGl0Ci0JICogZmFpbHMgdGhlcmUncyBub3QgYSBsb3Qgd2UgY2FuIGRvIHRvIHJlcG9y dCB0aGUgcHJvYmxlbSBhbnl3YXkuICBBcwotCSAqIGNvZGVkLCB3ZSdsbCBqdXN0IGNyYXNo IG9uIGEgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlIGFmdGVyIGZhaWx1cmUuLi4KLQkgKi8K LQlmZCA9IGF0b2koKmFyZ3YrKyk7Ci0Jc3lzbG9nRmlsZSA9IHN5c2xvZ2dlcl9mZG9wZW4o ZmQpOwotCWZkID0gYXRvaSgqYXJndisrKTsKLQljc3Zsb2dGaWxlID0gc3lzbG9nZ2VyX2Zk b3BlbihmZCk7Ci0JZmQgPSBhdG9pKCphcmd2KyspOwotCWpzb25sb2dGaWxlID0gc3lzbG9n Z2VyX2Zkb3BlbihmZCk7Ci19CiAjZW5kaWYJCQkJCQkJLyogRVhFQ19CQUNLRU5EICovCiAK IApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci93YWx3cml0ZXIuYyBiL3Ny Yy9iYWNrZW5kL3Bvc3RtYXN0ZXIvd2Fsd3JpdGVyLmMKaW5kZXggMjY2ZmJjMjMzOTkuLjg4 NmM4YmQ4ZjZhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3dhbHdyaXRl ci5jCisrKyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvd2Fsd3JpdGVyLmMKQEAgLTQ4LDYg KzQ4LDcgQEAKICNpbmNsdWRlICJsaWJwcS9wcXNpZ25hbC5oIgogI2luY2x1ZGUgIm1pc2Nh ZG1pbi5oIgogI2luY2x1ZGUgInBnc3RhdC5oIgorI2luY2x1ZGUgInBvc3RtYXN0ZXIvYXV4 cHJvY2Vzcy5oIgogI2luY2x1ZGUgInBvc3RtYXN0ZXIvaW50ZXJydXB0LmgiCiAjaW5jbHVk ZSAicG9zdG1hc3Rlci93YWx3cml0ZXIuaCIKICNpbmNsdWRlICJzdG9yYWdlL2J1Zm1nci5o IgpAQCAtODgsMTMgKzg5LDE5IEBAIHN0YXRpYyB2b2lkIEhhbmRsZVdhbFdyaXRlckludGVy cnVwdHModm9pZCk7CiAgKiBiYXNpYyBleGVjdXRpb24gZW52aXJvbm1lbnQsIGJ1dCBub3Qg ZW5hYmxlZCBzaWduYWxzIHlldC4KICAqLwogdm9pZAotV2FsV3JpdGVyTWFpbih2b2lkKQor V2FsV3JpdGVyTWFpbihjaGFyICpzdGFydHVwX2RhdGEsIHNpemVfdCBzdGFydHVwX2RhdGFf bGVuKQogewogCXNpZ2ptcF9idWYJbG9jYWxfc2lnam1wX2J1ZjsKIAlNZW1vcnlDb250ZXh0 IHdhbHdyaXRlcl9jb250ZXh0OwogCWludAkJCWxlZnRfdGlsbF9oaWJlcm5hdGU7CiAJYm9v bAkJaGliZXJuYXRpbmc7CiAKKwlBc3NlcnQoc3RhcnR1cF9kYXRhX2xlbiA9PSAwKTsKKwor CU15QXV4UHJvY1R5cGUgPSBXYWxXcml0ZXJQcm9jZXNzOworCU15QmFja2VuZFR5cGUgPSBC X1dBTF9XUklURVI7CisJQXV4aWxpYXJ5UHJvY2Vzc0luaXQoKTsKKwogCS8qCiAJICogUHJv cGVybHkgYWNjZXB0IG9yIGlnbm9yZSBzaWduYWxzIHRoZSBwb3N0bWFzdGVyIG1pZ2h0IHNl bmQgdXMKIAkgKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNh bC9sYXVuY2hlci5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9sYXVuY2hl ci5jCmluZGV4IDUwMTkxMGI0NDU0Li5hNDA5OGMyM2IyYiAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9sYXVuY2hlci5jCisrKyBiL3NyYy9iYWNrZW5k L3JlcGxpY2F0aW9uL2xvZ2ljYWwvbGF1bmNoZXIuYwpAQCAtMzAsNyArMzAsNiBAQAogI2lu Y2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgInBnc3RhdC5oIgogI2luY2x1ZGUgInBv c3RtYXN0ZXIvYmd3b3JrZXIuaCIKLSNpbmNsdWRlICJwb3N0bWFzdGVyL2ZvcmtfcHJvY2Vz cy5oIgogI2luY2x1ZGUgInBvc3RtYXN0ZXIvaW50ZXJydXB0LmgiCiAjaW5jbHVkZSAicG9z dG1hc3Rlci9wb3N0bWFzdGVyLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vbG9naWNhbGxh dW5jaGVyLmgiCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi93YWxyZWNl aXZlci5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vd2FscmVjZWl2ZXIuYwppbmRleCAw NzM2NjhkNGYyZS4uMGQ0YmRkOTc2ZGIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxp Y2F0aW9uL3dhbHJlY2VpdmVyLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vd2Fs cmVjZWl2ZXIuYwpAQCAtNjUsNiArNjUsNyBAQAogI2luY2x1ZGUgImxpYnBxL3Bxc2lnbmFs LmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAicGdzdGF0LmgiCisjaW5j bHVkZSAicG9zdG1hc3Rlci9hdXhwcm9jZXNzLmgiCiAjaW5jbHVkZSAicG9zdG1hc3Rlci9p bnRlcnJ1cHQuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi93YWxyZWNlaXZlci5oIgogI2lu Y2x1ZGUgInJlcGxpY2F0aW9uL3dhbHNlbmRlci5oIgpAQCAtMTg0LDcgKzE4NSw3IEBAIFBy b2Nlc3NXYWxSY3ZJbnRlcnJ1cHRzKHZvaWQpCiAKIC8qIE1haW4gZW50cnkgcG9pbnQgZm9y IHdhbHJlY2VpdmVyIHByb2Nlc3MgKi8KIHZvaWQKLVdhbFJlY2VpdmVyTWFpbih2b2lkKQor V2FsUmVjZWl2ZXJNYWluKGNoYXIgKnN0YXJ0dXBfZGF0YSwgc2l6ZV90IHN0YXJ0dXBfZGF0 YV9sZW4pCiB7CiAJY2hhcgkJY29ubmluZm9bTUFYQ09OTklORk9dOwogCWNoYXIJICAgKnRt cF9jb25uaW5mbzsKQEAgLTIwMCw2ICsyMDEsMTIgQEAgV2FsUmVjZWl2ZXJNYWluKHZvaWQp CiAJY2hhcgkgICAqc2VuZGVyX2hvc3QgPSBOVUxMOwogCWludAkJCXNlbmRlcl9wb3J0ID0g MDsKIAorCUFzc2VydChzdGFydHVwX2RhdGFfbGVuID09IDApOworCisJTXlBdXhQcm9jVHlw ZSA9IFdhbFJlY2VpdmVyUHJvY2VzczsKKwlNeUJhY2tlbmRUeXBlID0gQl9XQUxfUkVDRUlW RVI7CisJQXV4aWxpYXJ5UHJvY2Vzc0luaXQoKTsKKwogCS8qCiAJICogV2FsUmN2IHNob3Vs ZCBiZSBzZXQgdXAgYWxyZWFkeSAoaWYgd2UgYXJlIGEgYmFja2VuZCwgd2UgaW5oZXJpdCB0 aGlzCiAJICogYnkgZm9yaygpIG9yIEVYRUNfQkFDS0VORCBtZWNoYW5pc20gZnJvbSB0aGUg cG9zdG1hc3RlcikuCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9zaG1l bS5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvc2htZW0uYwppbmRleCA1NDY1ZmExOTY0 Ni4uZDY1ZDQ2MTM0MGMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3No bWVtLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvc2htZW0uYwpAQCAtMTQ0LDYg KzE0NCw4IEBAIEluaXRTaG1lbUFsbG9jYXRpb24odm9pZCkKIAkvKgogCSAqIEluaXRpYWxp emUgU2htZW1WYXJpYWJsZUNhY2hlIGZvciB0cmFuc2FjdGlvbiBtYW5hZ2VyLiAoVGhpcyBk b2Vzbid0CiAJICogcmVhbGx5IGJlbG9uZyBoZXJlLCBidXQgbm90IHdvcnRoIG1vdmluZy4p CisJICoKKwkgKiBYWFg6IHdlIHJlYWxseSBzaG91bGQgbW92ZSB0aGlzCiAJICovCiAJU2ht ZW1WYXJpYWJsZUNhY2hlID0gKFZhcmlhYmxlQ2FjaGUpCiAJCVNobWVtQWxsb2Moc2l6ZW9m KCpTaG1lbVZhcmlhYmxlQ2FjaGUpKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxz L2luaXQvZ2xvYmFscy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9nbG9iYWxzLmMKaW5k ZXggMDExZWMxODAxNWEuLmU3ZGRlMWI0ZTFmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91 dGlscy9pbml0L2dsb2JhbHMuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9pbml0L2dsb2Jh bHMuYwpAQCAtNDQsNiArNDQsNyBAQCB2b2xhdGlsZSB1aW50MzIgQ3JpdFNlY3Rpb25Db3Vu dCA9IDA7CiBpbnQJCQlNeVByb2NQaWQ7CiBwZ190aW1lX3QJTXlTdGFydFRpbWU7CiBUaW1l c3RhbXBUeiBNeVN0YXJ0VGltZXN0YW1wOworc3RydWN0IENsaWVudFNvY2tldCAqTXlDbGll bnRTb2NrZXQ7CiBzdHJ1Y3QgUG9ydCAqTXlQcm9jUG9ydDsKIGludDMyCQlNeUNhbmNlbEtl eTsKIGludAkJCU15UE1DaGlsZFNsb3Q7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGls cy9pbml0L21pc2Npbml0LmMgYi9zcmMvYmFja2VuZC91dGlscy9pbml0L21pc2Npbml0LmMK aW5kZXggMWU2NzFjNTYwYzguLmM4MDIyMjExMmIzIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC91dGlscy9pbml0L21pc2Npbml0LmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9t aXNjaW5pdC5jCkBAIC04NSwxMzkgKzg1LDYgQEAgYm9vbAkJSWdub3JlU3lzdGVtSW5kZXhl cyA9IGZhbHNlOwogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiAKLS8qCi0gKiBJbml0aWFsaXplIHRo ZSBiYXNpYyBlbnZpcm9ubWVudCBmb3IgYSBwb3N0bWFzdGVyIGNoaWxkCi0gKgotICogU2hv dWxkIGJlIGNhbGxlZCBhcyBlYXJseSBhcyBwb3NzaWJsZSBhZnRlciB0aGUgY2hpbGQncyBz dGFydHVwLiBIb3dldmVyLAotICogb24gRVhFQ19CQUNLRU5EIGJ1aWxkcyBpdCBkb2VzIG5l ZWQgdG8gYmUgYWZ0ZXIgcmVhZF9iYWNrZW5kX3ZhcmlhYmxlcygpLgotICovCi12b2lkCi1J bml0UG9zdG1hc3RlckNoaWxkKHZvaWQpCi17Ci0JSXNVbmRlclBvc3RtYXN0ZXIgPSB0cnVl OwkvKiB3ZSBhcmUgYSBwb3N0bWFzdGVyIHN1YnByb2Nlc3Mgbm93ICovCi0KLQkvKgotCSAq IFN0YXJ0IG91ciB3aW4zMiBzaWduYWwgaW1wbGVtZW50YXRpb24uIFRoaXMgaGFzIHRvIGJl IGRvbmUgYWZ0ZXIgd2UKLQkgKiByZWFkIHRoZSBiYWNrZW5kIHZhcmlhYmxlcywgYmVjYXVz ZSB3ZSBuZWVkIHRvIHBpY2sgdXAgdGhlIHNpZ25hbCBwaXBlCi0JICogZnJvbSB0aGUgcGFy ZW50IHByb2Nlc3MuCi0JICovCi0jaWZkZWYgV0lOMzIKLQlwZ3dpbjMyX3NpZ25hbF9pbml0 aWFsaXplKCk7Ci0jZW5kaWYKLQotCS8qCi0JICogU2V0IHJlZmVyZW5jZSBwb2ludCBmb3Ig c3RhY2stZGVwdGggY2hlY2tpbmcuICBUaGlzIG1pZ2h0IHNlZW0KLQkgKiByZWR1bmRhbnQg aW4gIUVYRUNfQkFDS0VORCBidWlsZHM7IGJ1dCBpdCdzIG5vdCBiZWNhdXNlIHRoZSBwb3N0 bWFzdGVyCi0JICogbGF1bmNoZXMgaXRzIGNoaWxkcmVuIGZyb20gc2lnbmFsIGhhbmRsZXJz LCBzbyB3ZSBtaWdodCBiZSBydW5uaW5nIG9uCi0JICogYW4gYWx0ZXJuYXRpdmUgc3RhY2su Ci0JICovCi0JKHZvaWQpIHNldF9zdGFja19iYXNlKCk7Ci0KLQlJbml0UHJvY2Vzc0dsb2Jh bHMoKTsKLQotCS8qCi0JICogbWFrZSBzdXJlIHN0ZGVyciBpcyBpbiBiaW5hcnkgbW9kZSBi ZWZvcmUgYW55dGhpbmcgY2FuIHBvc3NpYmx5IGJlCi0JICogd3JpdHRlbiB0byBpdCwgaW4g Y2FzZSBpdCdzIGFjdHVhbGx5IHRoZSBzeXNsb2dnZXIgcGlwZSwgc28gdGhlIHBpcGUKLQkg KiBjaHVua2luZyBwcm90b2NvbCBpc24ndCBkaXN0dXJiZWQuIE5vbi1sb2dwaXBlIGRhdGEg Z2V0cyB0cmFuc2xhdGVkIG9uCi0JICogcmVkaXJlY3Rpb24gKGUuZy4gdmlhIHBnX2N0bCAt bCkgYW55d2F5LgotCSAqLwotI2lmZGVmIFdJTjMyCi0JX3NldG1vZGUoZmlsZW5vKHN0ZGVy ciksIF9PX0JJTkFSWSk7Ci0jZW5kaWYKLQotCS8qIFdlIGRvbid0IHdhbnQgdGhlIHBvc3Rt YXN0ZXIncyBwcm9jX2V4aXQoKSBoYW5kbGVycyAqLwotCW9uX2V4aXRfcmVzZXQoKTsKLQot CS8qIEluIEVYRUNfQkFDS0VORCBjYXNlIHdlIHdpbGwgbm90IGhhdmUgaW5oZXJpdGVkIEJs b2NrU2lnIGV0YyB2YWx1ZXMgKi8KLSNpZmRlZiBFWEVDX0JBQ0tFTkQKLQlwcWluaXRtYXNr KCk7Ci0jZW5kaWYKLQotCS8qIEluaXRpYWxpemUgcHJvY2Vzcy1sb2NhbCBsYXRjaCBzdXBw b3J0ICovCi0JSW5pdGlhbGl6ZUxhdGNoU3VwcG9ydCgpOwotCUluaXRQcm9jZXNzTG9jYWxM YXRjaCgpOwotCUluaXRpYWxpemVMYXRjaFdhaXRTZXQoKTsKLQotCS8qCi0JICogSWYgcG9z c2libGUsIG1ha2UgdGhpcyBwcm9jZXNzIGEgZ3JvdXAgbGVhZGVyLCBzbyB0aGF0IHRoZSBw b3N0bWFzdGVyCi0JICogY2FuIHNpZ25hbCBhbnkgY2hpbGQgcHJvY2Vzc2VzIHRvby4gTm90 IGFsbCBwcm9jZXNzZXMgd2lsbCBoYXZlCi0JICogY2hpbGRyZW4sIGJ1dCBmb3IgY29uc2lz dGVuY3kgd2UgbWFrZSBhbGwgcG9zdG1hc3RlciBjaGlsZCBwcm9jZXNzZXMgZG8KLQkgKiB0 aGlzLgotCSAqLwotI2lmZGVmIEhBVkVfU0VUU0lECi0JaWYgKHNldHNpZCgpIDwgMCkKLQkJ ZWxvZyhGQVRBTCwgInNldHNpZCgpIGZhaWxlZDogJW0iKTsKLSNlbmRpZgotCi0JLyoKLQkg KiBFdmVyeSBwb3N0bWFzdGVyIGNoaWxkIHByb2Nlc3MgaXMgZXhwZWN0ZWQgdG8gcmVzcG9u ZCBwcm9tcHRseSB0bwotCSAqIFNJR1FVSVQgYXQgYWxsIHRpbWVzLiAgVGhlcmVmb3JlIHdl IGNlbnRyYWxseSByZW1vdmUgU0lHUVVJVCBmcm9tCi0JICogQmxvY2tTaWcgYW5kIGluc3Rh bGwgYSBzdWl0YWJsZSBzaWduYWwgaGFuZGxlci4gIChDbGllbnQtZmFjaW5nCi0JICogcHJv Y2Vzc2VzIG1heSBjaG9vc2UgdG8gcmVwbGFjZSB0aGlzIGRlZmF1bHQgY2hvaWNlIG9mIGhh bmRsZXIgd2l0aAotCSAqIHF1aWNrZGllKCkuKSAgQWxsIG90aGVyIGJsb2NrYWJsZSBzaWdu YWxzIHJlbWFpbiBibG9ja2VkIGZvciBub3cuCi0JICovCi0JcHFzaWduYWwoU0lHUVVJVCwg U2lnbmFsSGFuZGxlckZvckNyYXNoRXhpdCk7Ci0KLQlzaWdkZWxzZXQoJkJsb2NrU2lnLCBT SUdRVUlUKTsKLQlzaWdwcm9jbWFzayhTSUdfU0VUTUFTSywgJkJsb2NrU2lnLCBOVUxMKTsK LQotCS8qIFJlcXVlc3QgYSBzaWduYWwgaWYgdGhlIHBvc3RtYXN0ZXIgZGllcywgaWYgcG9z c2libGUuICovCi0JUG9zdG1hc3RlckRlYXRoU2lnbmFsSW5pdCgpOwotCi0JLyogRG9uJ3Qg Z2l2ZSB0aGUgcGlwZSB0byBzdWJwcm9ncmFtcyB0aGF0IHdlIGV4ZWN1dGUuICovCi0jaWZu ZGVmIFdJTjMyCi0JaWYgKGZjbnRsKHBvc3RtYXN0ZXJfYWxpdmVfZmRzW1BPU1RNQVNURVJf RkRfV0FUQ0hdLCBGX1NFVEZELCBGRF9DTE9FWEVDKSA8IDApCi0JCWVyZXBvcnQoRkFUQUws Ci0JCQkJKGVycmNvZGVfZm9yX3NvY2tldF9hY2Nlc3MoKSwKLQkJCQkgZXJybXNnX2ludGVy bmFsKCJjb3VsZCBub3Qgc2V0IHBvc3RtYXN0ZXIgZGVhdGggbW9uaXRvcmluZyBwaXBlIHRv IEZEX0NMT0VYRUMgbW9kZTogJW0iKSkpOwotI2VuZGlmCi19Ci0KLS8qCi0gKiBJbml0aWFs aXplIHRoZSBiYXNpYyBlbnZpcm9ubWVudCBmb3IgYSBzdGFuZGFsb25lIHByb2Nlc3MuCi0g KgotICogYXJndjAgaGFzIHRvIGJlIHN1aXRhYmxlIHRvIGZpbmQgdGhlIHByb2dyYW0ncyBl eGVjdXRhYmxlLgotICovCi12b2lkCi1Jbml0U3RhbmRhbG9uZVByb2Nlc3MoY29uc3QgY2hh ciAqYXJndjApCi17Ci0JQXNzZXJ0KCFJc1Bvc3RtYXN0ZXJFbnZpcm9ubWVudCk7Ci0KLQlN eUJhY2tlbmRUeXBlID0gQl9TVEFOREFMT05FX0JBQ0tFTkQ7Ci0KLQkvKgotCSAqIFN0YXJ0 IG91ciB3aW4zMiBzaWduYWwgaW1wbGVtZW50YXRpb24KLQkgKi8KLSNpZmRlZiBXSU4zMgot CXBnd2luMzJfc2lnbmFsX2luaXRpYWxpemUoKTsKLSNlbmRpZgotCi0JSW5pdFByb2Nlc3NH bG9iYWxzKCk7Ci0KLQkvKiBJbml0aWFsaXplIHByb2Nlc3MtbG9jYWwgbGF0Y2ggc3VwcG9y dCAqLwotCUluaXRpYWxpemVMYXRjaFN1cHBvcnQoKTsKLQlJbml0UHJvY2Vzc0xvY2FsTGF0 Y2goKTsKLQlJbml0aWFsaXplTGF0Y2hXYWl0U2V0KCk7Ci0KLQkvKgotCSAqIEZvciBjb25z aXN0ZW5jeSB3aXRoIEluaXRQb3N0bWFzdGVyQ2hpbGQsIGluaXRpYWxpemUgc2lnbmFsIG1h c2sgaGVyZS4KLQkgKiBCdXQgd2UgZG9uJ3QgdW5ibG9jayBTSUdRVUlUIG9yIHByb3ZpZGUg YSBkZWZhdWx0IGhhbmRsZXIgZm9yIGl0LgotCSAqLwotCXBxaW5pdG1hc2soKTsKLQlzaWdw cm9jbWFzayhTSUdfU0VUTUFTSywgJkJsb2NrU2lnLCBOVUxMKTsKLQotCS8qIENvbXB1dGUg cGF0aHMsIG5vIHBvc3RtYXN0ZXIgdG8gaW5oZXJpdCBmcm9tICovCi0JaWYgKG15X2V4ZWNf cGF0aFswXSA9PSAnXDAnKQotCXsKLQkJaWYgKGZpbmRfbXlfZXhlYyhhcmd2MCwgbXlfZXhl Y19wYXRoKSA8IDApCi0JCQllbG9nKEZBVEFMLCAiJXM6IGNvdWxkIG5vdCBsb2NhdGUgbXkg b3duIGV4ZWN1dGFibGUgcGF0aCIsCi0JCQkJIGFyZ3YwKTsKLQl9Ci0KLQlpZiAocGtnbGli X3BhdGhbMF0gPT0gJ1wwJykKLQkJZ2V0X3BrZ2xpYl9wYXRoKG15X2V4ZWNfcGF0aCwgcGtn bGliX3BhdGgpOwotfQotCiB2b2lkCiBTd2l0Y2hUb1NoYXJlZExhdGNoKHZvaWQpCiB7CmRp ZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9saWJwcS9saWJwcS1iZS5oIGIvc3JjL2luY2x1ZGUv bGlicHEvbGlicHEtYmUuaAppbmRleCA5YjZkOGZjNTU3MS4uOTU5ZmVlYmEwMjUgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL2xpYnBxL2xpYnBxLWJlLmgKKysrIGIvc3JjL2luY2x1ZGUv bGlicHEvbGlicHEtYmUuaApAQCAtMTMyLDEwICsxMzIsMTEgQEAgdHlwZWRlZiBzdHJ1Y3Qg Q2xpZW50Q29ubmVjdGlvbkluZm8KIHR5cGVkZWYgc3RydWN0IFBvcnQKIHsKIAlwZ3NvY2tl dAlzb2NrOwkJCS8qIEZpbGUgZGVzY3JpcHRvciAqLwotCWJvb2wJCW5vYmxvY2s7CQkvKiBp cyB0aGUgc29ja2V0IGluIG5vbi1ibG9ja2luZyBtb2RlPyAqLwotCVByb3RvY29sVmVyc2lv biBwcm90bzsJCS8qIEZFL0JFIHByb3RvY29sIHZlcnNpb24gKi8KIAlTb2NrQWRkcglsYWRk cjsJCQkvKiBsb2NhbCBhZGRyIChwb3N0bWFzdGVyKSAqLwogCVNvY2tBZGRyCXJhZGRyOwkJ CS8qIHJlbW90ZSBhZGRyIChjbGllbnQpICovCisKKwlib29sCQlub2Jsb2NrOwkJLyogaXMg dGhlIHNvY2tldCBpbiBub24tYmxvY2tpbmcgbW9kZT8gKi8KKwlQcm90b2NvbFZlcnNpb24g cHJvdG87CQkvKiBGRS9CRSBwcm90b2NvbCB2ZXJzaW9uICovCiAJY2hhcgkgICAqcmVtb3Rl X2hvc3Q7CS8qIG5hbWUgKG9yIGlwIGFkZHIpIG9mIHJlbW90ZSBob3N0ICovCiAJY2hhcgkg ICAqcmVtb3RlX2hvc3RuYW1lOwkvKiBuYW1lIChub3QgaXAgYWRkcikgb2YgcmVtb3RlIGhv c3QsIGlmCiAJCQkJCQkJCQkgKiBhdmFpbGFibGUgKi8KQEAgLTIxOCwxMSArMjE5LDEzIEBA IHR5cGVkZWYgc3RydWN0IFBvcnQKICAqIENsaWVudFNvY2tldCBob2xkcyBhIHNvY2tldCBm b3IgYW4gYWNjZXB0ZWQgY29ubmVjdGlvbiwgYWxvbmcgd2l0aCB0aGUKICAqIGluZm9ybWF0 aW9uIGFib3V0IHRoZSBlbmRwb2ludHMuCiAgKi8KLXR5cGVkZWYgc3RydWN0IENsaWVudFNv Y2tldCB7CitzdHJ1Y3QgQ2xpZW50U29ja2V0Cit7CiAJcGdzb2NrZXQJc29jazsJCQkvKiBG aWxlIGRlc2NyaXB0b3IgKi8KIAlTb2NrQWRkcglsYWRkcjsJCQkvKiBsb2NhbCBhZGRyIChw b3N0bWFzdGVyKSAqLwogCVNvY2tBZGRyCXJhZGRyOwkJCS8qIHJlbW90ZSBhZGRyIChjbGll bnQpICovCi19IENsaWVudFNvY2tldDsKK307Cit0eXBlZGVmIHN0cnVjdCBDbGllbnRTb2Nr ZXQgQ2xpZW50U29ja2V0OwogCiAjaWZkZWYgVVNFX1NTTAogLyoKZGlmZiAtLWdpdCBhL3Ny Yy9pbmNsdWRlL21pc2NhZG1pbi5oIGIvc3JjL2luY2x1ZGUvbWlzY2FkbWluLmgKaW5kZXgg MWNjMzcxMmMwZmYuLmE2MDMyM2NlZmNhIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9taXNj YWRtaW4uaAorKysgYi9zcmMvaW5jbHVkZS9taXNjYWRtaW4uaApAQCAtMzE3LDcgKzMxNyw2 IEBAIGV4dGVybiBpbnQJdHJhY2VfcmVjb3ZlcnkoaW50IHRyYWNlX2xldmVsKTsKIGV4dGVy biBQR0RMTElNUE9SVCBjaGFyICpEYXRhYmFzZVBhdGg7CiAKIC8qIG5vdyBpbiB1dGlscy9p bml0L21pc2Npbml0LmMgKi8KLWV4dGVybiB2b2lkIEluaXRQb3N0bWFzdGVyQ2hpbGQodm9p ZCk7CiBleHRlcm4gdm9pZCBJbml0U3RhbmRhbG9uZVByb2Nlc3MoY29uc3QgY2hhciAqYXJn djApOwogZXh0ZXJuIHZvaWQgSW5pdFByb2Nlc3NMb2NhbExhdGNoKHZvaWQpOwogZXh0ZXJu IHZvaWQgU3dpdGNoVG9TaGFyZWRMYXRjaCh2b2lkKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL3Bvc3RtYXN0ZXIvYXV0b3ZhY3V1bS5oIGIvc3JjL2luY2x1ZGUvcG9zdG1hc3Rlci9h dXRvdmFjdXVtLmgKaW5kZXggNjVhZmQxZWExZTguLmI2YjMzOGE0OTcxIDEwMDY0NAotLS0g YS9zcmMvaW5jbHVkZS9wb3N0bWFzdGVyL2F1dG92YWN1dW0uaAorKysgYi9zcmMvaW5jbHVk ZS9wb3N0bWFzdGVyL2F1dG92YWN1dW0uaApAQCAtNTUsMjAgKzU1LDE0IEBAIGV4dGVybiBi b29sIElzQXV0b1ZhY3V1bVdvcmtlclByb2Nlc3Modm9pZCk7CiAjZGVmaW5lIElzQW55QXV0 b1ZhY3V1bVByb2Nlc3MoKSBcCiAJKElzQXV0b1ZhY3V1bUxhdW5jaGVyUHJvY2VzcygpIHx8 IElzQXV0b1ZhY3V1bVdvcmtlclByb2Nlc3MoKSkKIAotLyogRnVuY3Rpb25zIHRvIHN0YXJ0 IGF1dG92YWN1dW0gcHJvY2VzcywgY2FsbGVkIGZyb20gcG9zdG1hc3RlciAqLworLyogY2Fs bGVkIGZyb20gcG9zdG1hc3RlciBhdCBzZXJ2ZXIgc3RhcnR1cCAqLwogZXh0ZXJuIHZvaWQg YXV0b3ZhY19pbml0KHZvaWQpOwotZXh0ZXJuIGludAlTdGFydEF1dG9WYWNMYXVuY2hlcih2 b2lkKTsKLWV4dGVybiBpbnQJU3RhcnRBdXRvVmFjV29ya2VyKHZvaWQpOwogCiAvKiBjYWxs ZWQgZnJvbSBwb3N0bWFzdGVyIHdoZW4gYSB3b3JrZXIgY291bGQgbm90IGJlIGZvcmtlZCAq LwogZXh0ZXJuIHZvaWQgQXV0b1ZhY1dvcmtlckZhaWxlZCh2b2lkKTsKIAotI2lmZGVmIEVY RUNfQkFDS0VORAotZXh0ZXJuIHZvaWQgQXV0b1ZhY0xhdW5jaGVyTWFpbihpbnQgYXJnYywg Y2hhciAqYXJndltdKSBwZ19hdHRyaWJ1dGVfbm9yZXR1cm4oKTsKLWV4dGVybiB2b2lkIEF1 dG9WYWNXb3JrZXJNYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pIHBnX2F0dHJpYnV0ZV9u b3JldHVybigpOwotZXh0ZXJuIHZvaWQgQXV0b3ZhY3V1bVdvcmtlcklBbSh2b2lkKTsKLWV4 dGVybiB2b2lkIEF1dG92YWN1dW1MYXVuY2hlcklBbSh2b2lkKTsKLSNlbmRpZgorZXh0ZXJu IHZvaWQgQXV0b1ZhY0xhdW5jaGVyTWFpbihjaGFyICpzdGFydHVwX2RhdGEsIHNpemVfdCBz dGFydHVwX2RhdGFfbGVuKSBwZ19hdHRyaWJ1dGVfbm9yZXR1cm4oKTsKK2V4dGVybiB2b2lk IEF1dG9WYWNXb3JrZXJNYWluKGNoYXIgKnN0YXJ0dXBfZGF0YSwgc2l6ZV90IHN0YXJ0dXBf ZGF0YV9sZW4pIHBnX2F0dHJpYnV0ZV9ub3JldHVybigpOwogCiBleHRlcm4gYm9vbCBBdXRv VmFjdXVtUmVxdWVzdFdvcmsoQXV0b1ZhY3V1bVdvcmtJdGVtVHlwZSB0eXBlLAogCQkJCQkJ CQkgIE9pZCByZWxhdGlvbklkLCBCbG9ja051bWJlciBibGtubyk7CmRpZmYgLS1naXQgYS9z cmMvaW5jbHVkZS9wb3N0bWFzdGVyL2F1eHByb2Nlc3MuaCBiL3NyYy9pbmNsdWRlL3Bvc3Rt YXN0ZXIvYXV4cHJvY2Vzcy5oCmluZGV4IDVjMmQ2NTI3ZmY2Li43NTM5NGNhMDE1NSAxMDA2 NDQKLS0tIGEvc3JjL2luY2x1ZGUvcG9zdG1hc3Rlci9hdXhwcm9jZXNzLmgKKysrIGIvc3Jj L2luY2x1ZGUvcG9zdG1hc3Rlci9hdXhwcm9jZXNzLmgKQEAgLTEzLDggKzEzLDYgQEAKICNp Zm5kZWYgQVVYUFJPQ0VTU19ICiAjZGVmaW5lIEFVWFBST0NFU1NfSAogCi0jaW5jbHVkZSAi bWlzY2FkbWluLmgiCi0KLWV4dGVybiB2b2lkIEF1eGlsaWFyeVByb2Nlc3NNYWluKEF1eFBy b2NUeXBlIGF1eHR5cGUpIHBnX2F0dHJpYnV0ZV9ub3JldHVybigpOworZXh0ZXJuIHZvaWQg QXV4aWxpYXJ5UHJvY2Vzc0luaXQodm9pZCk7CiAKICNlbmRpZgkJCQkJCQkvKiBBVVhQUk9D RVNTX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3Bvc3RtYXN0ZXIvYmd3b3JrZXJf aW50ZXJuYWxzLmggYi9zcmMvaW5jbHVkZS9wb3N0bWFzdGVyL2Jnd29ya2VyX2ludGVybmFs cy5oCmluZGV4IDMyM2YxZTA3MjkxLi40MDU1ZDJmNTYyNiAxMDA2NDQKLS0tIGEvc3JjL2lu Y2x1ZGUvcG9zdG1hc3Rlci9iZ3dvcmtlcl9pbnRlcm5hbHMuaAorKysgYi9zcmMvaW5jbHVk ZS9wb3N0bWFzdGVyL2Jnd29ya2VyX2ludGVybmFscy5oCkBAIC01NSw2ICs1NSw2IEBAIGV4 dGVybiB2b2lkIEZvcmdldFVuc3RhcnRlZEJhY2tncm91bmRXb3JrZXJzKHZvaWQpOwogZXh0 ZXJuIHZvaWQgUmVzZXRCYWNrZ3JvdW5kV29ya2VyQ3Jhc2hUaW1lcyh2b2lkKTsKIAogLyog RW50cnkgcG9pbnQgZm9yIGJhY2tncm91bmQgd29ya2VyIHByb2Nlc3NlcyAqLwotZXh0ZXJu IHZvaWQgQmFja2dyb3VuZFdvcmtlck1haW4odm9pZCkgcGdfYXR0cmlidXRlX25vcmV0dXJu KCk7CitleHRlcm4gdm9pZCBCYWNrZ3JvdW5kV29ya2VyTWFpbihjaGFyICpzdGFydHVwX2Rh dGEsIHNpemVfdCBzdGFydHVwX2RhdGFfbGVuKSBwZ19hdHRyaWJ1dGVfbm9yZXR1cm4oKTsK IAogI2VuZGlmCQkJCQkJCS8qIEJHV09SS0VSX0lOVEVSTkFMU19IICovCmRpZmYgLS1naXQg YS9zcmMvaW5jbHVkZS9wb3N0bWFzdGVyL2Jnd3JpdGVyLmggYi9zcmMvaW5jbHVkZS9wb3N0 bWFzdGVyL2Jnd3JpdGVyLmgKaW5kZXggYTY2NzIyODczZjQuLmVlNTRmYzQwMWVmIDEwMDY0 NAotLS0gYS9zcmMvaW5jbHVkZS9wb3N0bWFzdGVyL2Jnd3JpdGVyLmgKKysrIGIvc3JjL2lu Y2x1ZGUvcG9zdG1hc3Rlci9iZ3dyaXRlci5oCkBAIC0yNyw4ICsyNyw4IEBAIGV4dGVybiBQ R0RMTElNUE9SVCBpbnQgQ2hlY2tQb2ludFRpbWVvdXQ7CiBleHRlcm4gUEdETExJTVBPUlQg aW50IENoZWNrUG9pbnRXYXJuaW5nOwogZXh0ZXJuIFBHRExMSU1QT1JUIGRvdWJsZSBDaGVj a1BvaW50Q29tcGxldGlvblRhcmdldDsKIAotZXh0ZXJuIHZvaWQgQmFja2dyb3VuZFdyaXRl ck1haW4odm9pZCkgcGdfYXR0cmlidXRlX25vcmV0dXJuKCk7Ci1leHRlcm4gdm9pZCBDaGVj a3BvaW50ZXJNYWluKHZvaWQpIHBnX2F0dHJpYnV0ZV9ub3JldHVybigpOworZXh0ZXJuIHZv aWQgQmFja2dyb3VuZFdyaXRlck1haW4oY2hhciAqc3RhcnR1cF9kYXRhLCBzaXplX3Qgc3Rh cnR1cF9kYXRhX2xlbikgcGdfYXR0cmlidXRlX25vcmV0dXJuKCk7CitleHRlcm4gdm9pZCBD aGVja3BvaW50ZXJNYWluKGNoYXIgKnN0YXJ0dXBfZGF0YSwgc2l6ZV90IHN0YXJ0dXBfZGF0 YV9sZW4pIHBnX2F0dHJpYnV0ZV9ub3JldHVybigpOwogCiBleHRlcm4gdm9pZCBSZXF1ZXN0 Q2hlY2twb2ludChpbnQgZmxhZ3MpOwogZXh0ZXJuIHZvaWQgQ2hlY2twb2ludFdyaXRlRGVs YXkoaW50IGZsYWdzLCBkb3VibGUgcHJvZ3Jlc3MpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1 ZGUvcG9zdG1hc3Rlci9mb3JrX3Byb2Nlc3MuaCBiL3NyYy9pbmNsdWRlL3Bvc3RtYXN0ZXIv Zm9ya19wcm9jZXNzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEyZGVjYzgx MzNiLi4wMDAwMDAwMDAwMAotLS0gYS9zcmMvaW5jbHVkZS9wb3N0bWFzdGVyL2ZvcmtfcHJv Y2Vzcy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotLyotLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCi0gKgotICogZm9ya19wcm9jZXNzLmgKLSAqCSAgRXhwb3J0cyBmcm9tIHBvc3Rt YXN0ZXIvZm9ya19wcm9jZXNzLmMuCi0gKgotICogQ29weXJpZ2h0IChjKSAxOTk2LTIwMjMs IFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCi0gKgotICogc3JjL2luY2x1 ZGUvcG9zdG1hc3Rlci9mb3JrX3Byb2Nlc3MuaAotICoKLSAqLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQotICovCi0jaWZuZGVmIEZPUktfUFJPQ0VTU19ICi0jZGVmaW5lIEZPUktfUFJPQ0VTU19I Ci0KLWV4dGVybiBwaWRfdCBmb3JrX3Byb2Nlc3Modm9pZCk7Ci0KLSNlbmRpZgkJCQkJCQkv KiBGT1JLX1BST0NFU1NfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcG9zdG1hc3Rl ci9wZ2FyY2guaCBiL3NyYy9pbmNsdWRlL3Bvc3RtYXN0ZXIvcGdhcmNoLmgKaW5kZXggM2Jk NGZhYzcxZTUuLjU3N2ZjMTRlMWQwIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9wb3N0bWFz dGVyL3BnYXJjaC5oCisrKyBiL3NyYy9pbmNsdWRlL3Bvc3RtYXN0ZXIvcGdhcmNoLmgKQEAg LTI5LDcgKzI5LDcgQEAKIGV4dGVybiBTaXplIFBnQXJjaFNobWVtU2l6ZSh2b2lkKTsKIGV4 dGVybiB2b2lkIFBnQXJjaFNobWVtSW5pdCh2b2lkKTsKIGV4dGVybiBib29sIFBnQXJjaENh blJlc3RhcnQodm9pZCk7Ci1leHRlcm4gdm9pZCBQZ0FyY2hpdmVyTWFpbih2b2lkKSBwZ19h dHRyaWJ1dGVfbm9yZXR1cm4oKTsKK2V4dGVybiB2b2lkIFBnQXJjaGl2ZXJNYWluKGNoYXIg KnN0YXJ0dXBfZGF0YSwgc2l6ZV90IHN0YXJ0dXBfZGF0YV9sZW4pIHBnX2F0dHJpYnV0ZV9u b3JldHVybigpOwogZXh0ZXJuIHZvaWQgUGdBcmNoV2FrZXVwKHZvaWQpOwogZXh0ZXJuIHZv aWQgUGdBcmNoRm9yY2VEaXJTY2FuKHZvaWQpOwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS9wb3N0bWFzdGVyL3Bvc3RtYXN0ZXIuaCBiL3NyYy9pbmNsdWRlL3Bvc3RtYXN0ZXIvcG9z dG1hc3Rlci5oCmluZGV4IDNiMzg4OWM1OGMwLi4xZGJiNWM5OTFmNSAxMDA2NDQKLS0tIGEv c3JjL2luY2x1ZGUvcG9zdG1hc3Rlci9wb3N0bWFzdGVyLmgKKysrIGIvc3JjL2luY2x1ZGUv cG9zdG1hc3Rlci9wb3N0bWFzdGVyLmgKQEAgLTU4LDE0ICs1OCw1MiBAQCBleHRlcm4gaW50 CU1heExpdmVQb3N0bWFzdGVyQ2hpbGRyZW4odm9pZCk7CiAKIGV4dGVybiBib29sIFBvc3Rt YXN0ZXJNYXJrUElERm9yV29ya2VyTm90aWZ5KGludCk7CiAKLSNpZmRlZiBFWEVDX0JBQ0tF TkQKLWV4dGVybiBwaWRfdCBwb3N0bWFzdGVyX2ZvcmtleGVjKGludCBhcmdjLCBjaGFyICph cmd2W10pOwotZXh0ZXJuIHZvaWQgU3ViUG9zdG1hc3Rlck1haW4oaW50IGFyZ2MsIGNoYXIg KmFyZ3ZbXSkgcGdfYXR0cmlidXRlX25vcmV0dXJuKCk7CitleHRlcm4gdm9pZCBCYWNrZW5k TWFpbihjaGFyICpzdGFydHVwX2RhdGEsIHNpemVfdCBzdGFydHVwX2RhdGFfbGVuKTsKIAor I2lmZGVmIEVYRUNfQkFDS0VORAogZXh0ZXJuIFNpemUgU2htZW1CYWNrZW5kQXJyYXlTaXpl KHZvaWQpOwogZXh0ZXJuIHZvaWQgU2htZW1CYWNrZW5kQXJyYXlBbGxvY2F0aW9uKHZvaWQp OwogI2VuZGlmCiAKKy8qIGluIGxhdW5jaF9iYWNrZW5kLmMgKi8KKworLyogdGhpcyBiZXR0 ZXIgbWF0Y2ggdGhlIGxpc3QgaW4gbGF1bmNoX2JhY2tlbmQuYyAqLwordHlwZWRlZiBlbnVt IFBvc3RtYXN0ZXJDaGlsZFR5cGUKK3sKKwlQTUNfQkFDS0VORCA9IDAsCisJUE1DX0FWX0xB VU5DSEVSLAorCVBNQ19BVl9XT1JLRVIsCisJUE1DX0JHV09SS0VSLAorCVBNQ19TWVNMT0dH RVIsCisKKwkvKgorCSAqIHNvLWNhbGxlZCAiYXV4IHByb2Nlc3NlcyIuICBUaGVzZSBhY2Nl c3Mgc2hhcmVkIG1lbW9yeSwgYnV0IGFyZSBub3QKKwkgKiBhdHRhY2hlZCB0byBhbnkgcGFy dGljdWxhciBkYXRhYmFzZS4gIE9ubHkgb25lIG9mIGVhY2ggb2YgdGhlc2UgY2FuIGJlCisJ ICogcnVubmluZyBhdCBhIHRpbWUuCisJICovCisJUE1DX1NUQVJUVVAsCisJUE1DX0JHV1JJ VEVSLAorCVBNQ19BUkNISVZFUiwKKwlQTUNfQ0hFQ0tQT0lOVEVSLAorCVBNQ19XQUxfV1JJ VEVSLAorCVBNQ19XQUxfUkVDRUlWRVIsCit9IFBvc3RtYXN0ZXJDaGlsZFR5cGU7CisKKy8q IGRlZmluZWQgaW4gbGlicHEtYmUuaCAqLworZXh0ZXJuIHN0cnVjdCBDbGllbnRTb2NrZXQg Kk15Q2xpZW50U29ja2V0OworCitleHRlcm4gcGlkX3QgcG9zdG1hc3Rlcl9jaGlsZF9sYXVu Y2goUG9zdG1hc3RlckNoaWxkVHlwZSBjaGlsZF90eXBlLCBjaGFyICpzdGFydHVwX2RhdGEs IHNpemVfdCBzdGFydHVwX2RhdGFfbGVuLCBzdHJ1Y3QgQ2xpZW50U29ja2V0ICpzb2NrKTsK KworI2lmZGVmIEVYRUNfQkFDS0VORAorZXh0ZXJuIHZvaWQgU3ViUG9zdG1hc3Rlck1haW4o aW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkgcGdfYXR0cmlidXRlX25vcmV0dXJuKCk7CisjZW5k aWYKKworI2lmZGVmIFdJTjMyCitleHRlcm4gdm9pZCBwZ3dpbjMyX3JlZ2lzdGVyX2RlYWRj aGlsZF9jYWxsYmFjayhIQU5ETEUgcHJvY0hhbmRsZSwgRFdPUkQgcHJvY0lkKTsKKyNlbmRp ZgorCitjb25zdCBjaGFyICpQb3N0bWFzdGVyQ2hpbGROYW1lKFBvc3RtYXN0ZXJDaGlsZFR5 cGUgY2hpbGRfdHlwZSk7CisKIC8qCiAgKiBOb3RlOiBNQVhfQkFDS0VORFMgaXMgbGltaXRl ZCB0byAyXjE4LTEgYmVjYXVzZSB0aGF0J3MgdGhlIHdpZHRoIHJlc2VydmVkCiAgKiBmb3Ig YnVmZmVyIHJlZmVyZW5jZXMgaW4gYnVmX2ludGVybmFscy5oLiAgVGhpcyBsaW1pdGF0aW9u IGNvdWxkIGJlIGxpZnRlZApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcG9zdG1hc3Rlci9z dGFydHVwLmggYi9zcmMvaW5jbHVkZS9wb3N0bWFzdGVyL3N0YXJ0dXAuaAppbmRleCA2YTJl NGM0NTI2Yi4uZWM4ODUwNjNhYWIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3Bvc3RtYXN0 ZXIvc3RhcnR1cC5oCisrKyBiL3NyYy9pbmNsdWRlL3Bvc3RtYXN0ZXIvc3RhcnR1cC5oCkBA IC0yNiw3ICsyNiw3IEBACiBleHRlcm4gUEdETExJTVBPUlQgaW50IGxvZ19zdGFydHVwX3By b2dyZXNzX2ludGVydmFsOwogCiBleHRlcm4gdm9pZCBIYW5kbGVTdGFydHVwUHJvY0ludGVy cnVwdHModm9pZCk7Ci1leHRlcm4gdm9pZCBTdGFydHVwUHJvY2Vzc01haW4odm9pZCkgcGdf YXR0cmlidXRlX25vcmV0dXJuKCk7CitleHRlcm4gdm9pZCBTdGFydHVwUHJvY2Vzc01haW4o Y2hhciAqc3RhcnR1cF9kYXRhLCBzaXplX3Qgc3RhcnR1cF9kYXRhX2xlbikgcGdfYXR0cmli dXRlX25vcmV0dXJuKCk7CiBleHRlcm4gdm9pZCBQcmVSZXN0b3JlQ29tbWFuZCh2b2lkKTsK IGV4dGVybiB2b2lkIFBvc3RSZXN0b3JlQ29tbWFuZCh2b2lkKTsKIGV4dGVybiBib29sIElz UHJvbW90ZVNpZ25hbGVkKHZvaWQpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcG9zdG1h c3Rlci9zeXNsb2dnZXIuaCBiL3NyYy9pbmNsdWRlL3Bvc3RtYXN0ZXIvc3lzbG9nZ2VyLmgK aW5kZXggMzRkYTc3OGYxZWYuLjdkYzQxYjMwZTdjIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVk ZS9wb3N0bWFzdGVyL3N5c2xvZ2dlci5oCisrKyBiL3NyYy9pbmNsdWRlL3Bvc3RtYXN0ZXIv c3lzbG9nZ2VyLmgKQEAgLTg2LDkgKzg2LDcgQEAgZXh0ZXJuIGludAlTeXNMb2dnZXJfU3Rh cnQodm9pZCk7CiAKIGV4dGVybiB2b2lkIHdyaXRlX3N5c2xvZ2dlcl9maWxlKGNvbnN0IGNo YXIgKmJ1ZmZlciwgaW50IGNvdW50LCBpbnQgZGVzdGluYXRpb24pOwogCi0jaWZkZWYgRVhF Q19CQUNLRU5ECi1leHRlcm4gdm9pZCBTeXNMb2dnZXJNYWluKGludCBhcmdjLCBjaGFyICph cmd2W10pIHBnX2F0dHJpYnV0ZV9ub3JldHVybigpOwotI2VuZGlmCitleHRlcm4gdm9pZCBT eXNMb2dnZXJNYWluKGNoYXIgKnN0YXJ0dXBfZGF0YSwgc2l6ZV90IHN0YXJ0dXBfZGF0YV9s ZW4pIHBnX2F0dHJpYnV0ZV9ub3JldHVybigpOwogCiBleHRlcm4gYm9vbCBDaGVja0xvZ3Jv dGF0ZVNpZ25hbCh2b2lkKTsKIGV4dGVybiB2b2lkIFJlbW92ZUxvZ3JvdGF0ZVNpZ25hbEZp bGVzKHZvaWQpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcG9zdG1hc3Rlci93YWx3cml0 ZXIuaCBiL3NyYy9pbmNsdWRlL3Bvc3RtYXN0ZXIvd2Fsd3JpdGVyLmgKaW5kZXggNmViYTdh ZDc5Y2YuLjk5YjdjYzA3ZmIyIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9wb3N0bWFzdGVy L3dhbHdyaXRlci5oCisrKyBiL3NyYy9pbmNsdWRlL3Bvc3RtYXN0ZXIvd2Fsd3JpdGVyLmgK QEAgLTE4LDYgKzE4LDYgQEAKIGV4dGVybiBQR0RMTElNUE9SVCBpbnQgV2FsV3JpdGVyRGVs YXk7CiBleHRlcm4gUEdETExJTVBPUlQgaW50IFdhbFdyaXRlckZsdXNoQWZ0ZXI7CiAKLWV4 dGVybiB2b2lkIFdhbFdyaXRlck1haW4odm9pZCkgcGdfYXR0cmlidXRlX25vcmV0dXJuKCk7 CitleHRlcm4gdm9pZCBXYWxXcml0ZXJNYWluKGNoYXIgKnN0YXJ0dXBfZGF0YSwgc2l6ZV90 IHN0YXJ0dXBfZGF0YV9sZW4pIHBnX2F0dHJpYnV0ZV9ub3JldHVybigpOwogCiAjZW5kaWYJ CQkJCQkJLyogX1dBTFdSSVRFUl9IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9yZXBs aWNhdGlvbi93YWxyZWNlaXZlci5oIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vd2FscmVj ZWl2ZXIuaAppbmRleCAyODE2MjZmYTZmNS4uOTJkZWFkNGRiN2IgMTAwNjQ0Ci0tLSBhL3Ny Yy9pbmNsdWRlL3JlcGxpY2F0aW9uL3dhbHJlY2VpdmVyLmgKKysrIGIvc3JjL2luY2x1ZGUv cmVwbGljYXRpb24vd2FscmVjZWl2ZXIuaApAQCAtNDU3LDcgKzQ1Nyw3IEBAIHdhbHJjdl9j bGVhcl9yZXN1bHQoV2FsUmN2RXhlY1Jlc3VsdCAqd2FscmVzKQogfQogCiAvKiBwcm90b3R5 cGVzIGZvciBmdW5jdGlvbnMgaW4gd2FscmVjZWl2ZXIuYyAqLwotZXh0ZXJuIHZvaWQgV2Fs UmVjZWl2ZXJNYWluKHZvaWQpIHBnX2F0dHJpYnV0ZV9ub3JldHVybigpOworZXh0ZXJuIHZv aWQgV2FsUmVjZWl2ZXJNYWluKGNoYXIgKnN0YXJ0dXBfZGF0YSwgc2l6ZV90IHN0YXJ0dXBf ZGF0YV9sZW4pIHBnX2F0dHJpYnV0ZV9ub3JldHVybigpOwogZXh0ZXJuIHZvaWQgUHJvY2Vz c1dhbFJjdkludGVycnVwdHModm9pZCk7CiBleHRlcm4gdm9pZCBXYWxSY3ZGb3JjZVJlcGx5 KHZvaWQpOwogCmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlz dCBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CmluZGV4IDc4YTllMGViYmM4 Li5lY2M0ZWEwZWU5YyAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZz Lmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTIxMTEs NiArMjExMSw3IEBAIFBvcnRhbFN0cmF0ZWd5CiBQb3N0UGFyc2VDb2x1bW5SZWZIb29rCiBQ b3N0Z3Jlc1BvbGxpbmdTdGF0dXNUeXBlCiBQb3N0aW5nSXRlbQorUG9zdG1hc3RlckNoaWxk VHlwZQogUHJlUGFyc2VDb2x1bW5SZWZIb29rCiBQcmVkQ2xhc3MKIFByZWRJdGVySW5mbwpA QCAtMzc3OCw2ICszNzc5LDcgQEAgc3Vic3RpdHV0ZV9hY3R1YWxfcGFyYW1ldGVyc19jb250 ZXh0CiBzdWJzdGl0dXRlX2FjdHVhbF9zcmZfcGFyYW1ldGVyc19jb250ZXh0CiBzdWJzdGl0 dXRlX3Bodl9yZWxpZHNfY29udGV4dAogc3ltYm9sCitzeXNsb2dnZXJfc3RhcnR1cF9kYXRh CiB0YWJsZXNwYWNlaW5mbwogdGVTZWN0aW9uCiB0ZW1wX3RhYmxlc3BhY2VzX2V4dHJhCi0t IAoyLjM5LjIKCg== --------------ASkMfd1hzOyZblVTgMzqak1d--