Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vUnH2-007bps-1H for pgsql-hackers@arkaria.postgresql.org; Sun, 14 Dec 2025 14:40:37 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vUnGz-00DIyv-1d for pgsql-hackers@arkaria.postgresql.org; Sun, 14 Dec 2025 14:40:34 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vUnGy-00DIyk-2g for pgsql-hackers@lists.postgresql.org; Sun, 14 Dec 2025 14:40:33 +0000 Received: from mail-ed1-x52d.google.com ([2a00:1450:4864:20::52d]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vUnGv-000dIa-31 for pgsql-hackers@lists.postgresql.org; Sun, 14 Dec 2025 14:40:32 +0000 Received: by mail-ed1-x52d.google.com with SMTP id 4fb4d7f45d1cf-6418b55f86dso3682020a12.1 for ; Sun, 14 Dec 2025 06:40:29 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=jeltef.nl; s=google; t=1765723227; x=1766328027; darn=lists.postgresql.org; h=mime-version:from:to:subject:message-id:date:from:to:cc:subject :date:message-id:reply-to; bh=9UWskzdKzBPKDhPJ+qz/tQMXxByx3SaEMMkZEK8S8qI=; b=f2RKnUuIS2O80Kh1bHVfZ7VOUor6D6bn6OCBAqOC8GYS+nHr22s3pa3lRC1txkMLLK 6deT5iIKRrwiaE+y+Eqk6nDYtsIsqcp3Skf5CAhIkwuuSdZM4mzIHL/OpAEsuE3utV1P JcuxxjWqnU1z55h/SJnF4YMmVVcdD1DrWN6zrTfEse+9JCWwT9YPAuq13DBuztzbJYL8 WjVy9/fQ98yQGmh1JwW5Y5eIpdfufwHk9js6HOB7ACtXVHmXWZLX2E1tIV1blUF6LM8Z XXqWOoGl88SUJovsoEsQWSdCb7LP8X01hIskozUuD42PB/pk0dw2qOOhZlneygZtpkCU N/Sw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765723227; x=1766328027; h=mime-version:from:to:subject:message-id:date:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=9UWskzdKzBPKDhPJ+qz/tQMXxByx3SaEMMkZEK8S8qI=; b=kNQ9PxmnQkrvHeJIj9hnfhF8bzVzxE5WsQ7pkR4CH6uPYT5wVZxiFcg+RfPqP5Wlut bTaFaVnvnH6En1Ku4NsRlmhna38QyOQvVCpBT7w7AeGJ1JS9B5yppcOUHlhm2Pj8++lr m8t6Upfk5N2uGejk92SYNFRbql4rUevnQd0a7n1HB7AASBV7XXlY+mXwBPqiK+0M+ZqF seasFOuN7opPCZpaBUbvm8j4hVYa6V60sxqe/T2Yyydt0Uw42QkdP3Yp9SBiEzOLVzoE ArC4k0vVoQ0GFrrEhNtDamIEcNwfFNaE3WbsxyfhVUdk1A1hBdeCu5p3vc8CmBUXhwJX SQsA== X-Gm-Message-State: AOJu0YxZ0ZkAL7IkQz6znTul6AWLwpWRxzNJDBssJVy5e3PCmTHoQe0U SenVXUxOVvox/PxV+zW49cM74Fbkv+R02t8oLpMNsm9n8AuZl/W5VrWskO5ppuP9a43JJ4a6bak V0IFf X-Gm-Gg: AY/fxX4JTsyWMhRZhRR4nqJAAsTFfXo77U5nZqmaegv6o6ZiJLrWF8TAusm4ZEwDNpr YLSKNA1Qwg1bzyTckxKrw/zPp9wLxqa4tioLiLf2xhb59IJdQ7zerrqP3x0wyjbJbeZn0GGJynm 7BpmFovFqelGVmo1YKAlVJb+TsYyOSwZw7141v53j1iw4PcaihD1HM9BOEXj6GirzAOF6oyuNHP oYqb+RtIJIA/2T00uCmiGoC68KnjvL72XmaIGwIhwd7RvneXdk55s/G/wQctsALPiE4r3JGB+0u 8NgqlHoUctFtdPfO6Lb2nUUsrn6C1t7pMysDj/W1MaN3/nvPST/fYbm7ylAdg7XZQSvrH43N9sF T0f9aHl/gWsS399V76dswHCj/LC9s7mtubc/3OZt7s7OPj70e2FOHjUlKNSR4SJgg5u+eQyTBZN qsT8Zogl80EPQf703irm31JEIn/ZqwEkL8AgA= X-Google-Smtp-Source: AGHT+IGvOYyK+PD5a8M9r/aZbN4YbKbcybY7kx6eSMIGsKt4wJmQS2kvy4RnxAUXLz4QnXrHWwb5Ow== X-Received: by 2002:a05:6402:274a:b0:640:b814:bb81 with SMTP id 4fb4d7f45d1cf-6499b334ab2mr7347713a12.32.1765723226925; Sun, 14 Dec 2025 06:40:26 -0800 (PST) Received: from localhost (145-53-221-196.fixed.kpn.net. [145.53.221.196]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-6498210de23sm10997934a12.28.2025.12.14.06.40.25 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sun, 14 Dec 2025 06:40:25 -0800 (PST) Content-Type: multipart/mixed; boundary=84474801bac0d4c19e3f64fe96d489dcf64d3294e4a935afd50bd2590437 Date: Sun, 14 Dec 2025 15:40:25 +0100 Message-Id: Subject: Don't use the deprecated and insecure PQcancel in our frontend tools anymore To: "PostgreSQL Hackers" , "Alvaro Herrera" , "Jacob Champion" From: "Jelte Fennema-Nio" MIME-Version: 1.0 X-TUID: ro+I1W5zn3AY List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --84474801bac0d4c19e3f64fe96d489dcf64d3294e4a935afd50bd2590437 Content-Type: multipart/alternative; boundary=b5816ae2fb201dcb607c56953e55a0e9fa96efbcee89bb0815c354c33f6b --b5816ae2fb201dcb607c56953e55a0e9fa96efbcee89bb0815c354c33f6b Content-Transfer-Encoding: quoted-printable Content-Disposition: inline Content-Type: text/plain; charset=UTF-8; format=Flowed A bunch of frontend tools, including psql, still used PQcancel to send cancel requests to the server. That function is insecure, because it does not use encryption to send the cancel request. This starts using the new cancellation APIs (introduced in 61461a300) for all these frontend tools. These APIs use the same encryption settings as the connection that's being cancelled. Since these APIs are not signal-safe this required a refactor to not send the cancel request in a signal handler anymore, but instead using a dedicated thread. Similar logic was already used for Windows anyway, so this also has the benefit that it makes the cancel logic more uniform across our supported platforms. Because this is fixing a security issue, it would be nice if we could backport it. I'm not sure that's realistic though, given the size/complexity of the change. I'm curious what others think about that. To be clear, I'm only really talking about backporting to PG17 and PG18 because those contain the new cancellation APIs in libpq. Backporting to even older versions would also require backporting the new cancellation APIs in libpq, which seems like a no-go. A possible follow up improvement to pg_dump would be to use threads for its parallel workers on UNIX as well. Then the Windows and Unix implementations would get even more aligned. I started looking into that, but that quickly became quite a big refactor, touching a lot of code unrelated to cancellation. So it seems better to do that in a separate follow-on patch if people are interested. --b5816ae2fb201dcb607c56953e55a0e9fa96efbcee89bb0815c354c33f6b-- --84474801bac0d4c19e3f64fe96d489dcf64d3294e4a935afd50bd2590437 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v1-0001-Move-Windows-pthread-compatibility-functions-to-s.patch Content-Type: text/x-patch; charset=utf-8; name=v1-0001-Move-Windows-pthread-compatibility-functions-to-s.patch RnJvbSAwYTFkM2I1ODk0NTAyYTI1YTJjNWVkNWEyODMyNTFlMzI5NmFlNDEzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKZWx0ZSBGZW5uZW1hLU5pbyA8cG9zdGdyZXNAamVsdGVmLm5s PgpEYXRlOiBTYXQsIDEzIERlYyAyMDI1IDE4OjE4OjEzICswMTAwClN1YmplY3Q6IFtQQVRDSCB2 MSAxLzJdIE1vdmUgV2luZG93cyBwdGhyZWFkIGNvbXBhdGliaWxpdHkgZnVuY3Rpb25zIHRvCiBz cmMvcG9ydAoKVGhpcyBpcyBpbiBwcmVwYXJhdGlvbiBvZiBhIGZvbGxvdy11cCBjb21taXQgd2hp Y2ggd2lsbCBzdGFydCB0byB1c2UKdGhlc2UgZnVuY3Rpb25zIGluIG1vcmUgcGxhY2VzIHRoYW4g anVzdCBsaWJwcS4KLS0tCiBjb25maWd1cmUuYWMgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHwgMSArCiBzcmMvaW50ZXJmYWNlcy9saWJwcS9NYWtlZmlsZSAgICAgICAgICAgICAg ICAgIHwgMSAtCiBzcmMvaW50ZXJmYWNlcy9saWJwcS9tZXNvbi5idWlsZCAgICAgICAgICAgICAg IHwgMiArLQogc3JjL3BvcnQvbWVzb24uYnVpbGQgICAgICAgICAgICAgICAgICAgICAgICAgICB8 IDEgKwogc3JjL3tpbnRlcmZhY2VzL2xpYnBxID0+IHBvcnR9L3B0aHJlYWQtd2luMzIuYyB8IDUg KysrLS0KIDUgZmlsZXMgY2hhbmdlZCwgNiBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQog cmVuYW1lIHNyYy97aW50ZXJmYWNlcy9saWJwcSA9PiBwb3J0fS9wdGhyZWFkLXdpbjMyLmMgKDk0 JSkKCmRpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKaW5kZXggNGJhMzk2 N2RiMGYuLmU3M2UxMjg3YmY0IDEwMDY0NAotLS0gYS9jb25maWd1cmUuYWMKKysrIGIvY29uZmln dXJlLmFjCkBAIC0xODg3LDYgKzE4ODcsNyBAQCBpZiB0ZXN0ICIkUE9SVE5BTUUiID0gIndpbjMy IjsgdGhlbgogICBBQ19MSUJPQkooZGlybW9kKQogICBBQ19MSUJPQkooa2lsbCkKICAgQUNfTElC T0JKKG9wZW4pCisgIEFDX0xJQk9CSihwdGhyZWFkLXdpbjMyKQogICBBQ19MSUJPQkooc3lzdGVt KQogICBBQ19MSUJPQkood2luMzJjb21tb24pCiAgIEFDX0xJQk9CSih3aW4zMmRsb3BlbikKZGlm ZiAtLWdpdCBhL3NyYy9pbnRlcmZhY2VzL2xpYnBxL01ha2VmaWxlIGIvc3JjL2ludGVyZmFjZXMv bGlicHEvTWFrZWZpbGUKaW5kZXggOWZlMzIxMTQ3ZmMuLjk4Y2ZlNDJkYjM0IDEwMDY0NAotLS0g YS9zcmMvaW50ZXJmYWNlcy9saWJwcS9NYWtlZmlsZQorKysgYi9zcmMvaW50ZXJmYWNlcy9saWJw cS9NYWtlZmlsZQpAQCAtNzUsNyArNzUsNiBAQCBlbmRpZgogCiBpZmVxICgkKFBPUlROQU1FKSwg d2luMzIpCiBPQkpTICs9IFwKLQlwdGhyZWFkLXdpbjMyLm8gXAogCXdpbjMyLm8KIGVuZGlmCiAK ZGlmZiAtLWdpdCBhL3NyYy9pbnRlcmZhY2VzL2xpYnBxL21lc29uLmJ1aWxkIGIvc3JjL2ludGVy ZmFjZXMvbGlicHEvbWVzb24uYnVpbGQKaW5kZXggYjI1OWM5OThmYTIuLmViOGJmN2I0NWJmIDEw MDY0NAotLS0gYS9zcmMvaW50ZXJmYWNlcy9saWJwcS9tZXNvbi5idWlsZAorKysgYi9zcmMvaW50 ZXJmYWNlcy9saWJwcS9tZXNvbi5idWlsZApAQCAtMjAsNyArMjAsNyBAQCBsaWJwcV9zb3VyY2Vz ID0gZmlsZXMoCiBsaWJwcV9zb19zb3VyY2VzID0gW10gIyBmb3Igc2hhcmVkIGxpYiwgaW4gYWRk aXRpb24gdG8gdGhlIGFib3ZlCiAKIGlmIGhvc3Rfc3lzdGVtID09ICd3aW5kb3dzJwotICBsaWJw cV9zb3VyY2VzICs9IGZpbGVzKCdwdGhyZWFkLXdpbjMyLmMnLCAnd2luMzIuYycpCisgIGxpYnBx X3NvdXJjZXMgKz0gZmlsZXMoJ3dpbjMyLmMnKQogICBsaWJwcV9zb19zb3VyY2VzICs9IHJjX2xp Yl9nZW4ucHJvY2Vzcyh3aW4zMnZlcl9yYywgZXh0cmFfYXJnczogWwogICAgICctLU5BTUUnLCAn bGlicHEnLAogICAgICctLUZJTEVERVNDJywgJ1Bvc3RncmVTUUwgQWNjZXNzIExpYnJhcnknLF0p CmRpZmYgLS1naXQgYS9zcmMvcG9ydC9tZXNvbi5idWlsZCBiL3NyYy9wb3J0L21lc29uLmJ1aWxk CmluZGV4IGZjN2IwNTlmZWU1Li5jMWU1M2E5YTM0MSAxMDA2NDQKLS0tIGEvc3JjL3BvcnQvbWVz b24uYnVpbGQKKysrIGIvc3JjL3BvcnQvbWVzb24uYnVpbGQKQEAgLTMxLDYgKzMxLDcgQEAgaWYg aG9zdF9zeXN0ZW0gPT0gJ3dpbmRvd3MnCiAgICAgJ2Rpcm1vZC5jJywKICAgICAna2lsbC5jJywK ICAgICAnb3Blbi5jJywKKyAgICAncHRocmVhZC13aW4zMi5jJywKICAgICAnc3lzdGVtLmMnLAog ICAgICd3aW4zMmNvbW1vbi5jJywKICAgICAnd2luMzJkbG9wZW4uYycsCmRpZmYgLS1naXQgYS9z cmMvaW50ZXJmYWNlcy9saWJwcS9wdGhyZWFkLXdpbjMyLmMgYi9zcmMvcG9ydC9wdGhyZWFkLXdp bjMyLmMKc2ltaWxhcml0eSBpbmRleCA5NCUKcmVuYW1lIGZyb20gc3JjL2ludGVyZmFjZXMvbGli cHEvcHRocmVhZC13aW4zMi5jCnJlbmFtZSB0byBzcmMvcG9ydC9wdGhyZWFkLXdpbjMyLmMKaW5k ZXggZGI3NWQ0OTFiOTAuLmYzZTVlMDhjYjA5IDEwMDY0NAotLS0gYS9zcmMvaW50ZXJmYWNlcy9s aWJwcS9wdGhyZWFkLXdpbjMyLmMKKysrIGIvc3JjL3BvcnQvcHRocmVhZC13aW4zMi5jCkBAIC00 LDEzICs0LDE0IEBACiAqCSBwYXJ0aWFsIHB0aHJlYWQgaW1wbGVtZW50YXRpb24gZm9yIHdpbjMy CiAqCiAqIENvcHlyaWdodCAoYykgMjAwNC0yMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9w bWVudCBHcm91cAorKgogKiBJREVOVElGSUNBVElPTgotKglzcmMvaW50ZXJmYWNlcy9saWJwcS9w dGhyZWFkLXdpbjMyLmMKKyoJc3JjL3BvcnQvcHRocmVhZC13aW4zMi5jCiAqCiAqLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQogKi8KIAotI2luY2x1ZGUgInBvc3RncmVzX2ZlLmgiCisjaW5jbHVkZSAiYy5oIgog CiAjaW5jbHVkZSAicHRocmVhZC13aW4zMi5oIgogCgpiYXNlLWNvbW1pdDogYzVhZTA3YTkwYTBm MzU5NGU1MDUzYTI2ZjNjOTliMDQxZGY0MjdkMwotLSAKMi41Mi4wCgo= --84474801bac0d4c19e3f64fe96d489dcf64d3294e4a935afd50bd2590437 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v1-0002-Don-t-use-the-deprecated-and-insecure-PQcancel-in.patch Content-Type: text/x-patch; charset=utf-8; name=v1-0002-Don-t-use-the-deprecated-and-insecure-PQcancel-in.patch RnJvbSBkOTZkNTYyMDlmNGY5ZjAwMjFjYjEyNjA2YjM4MWI5MDkwMThhMmI5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKZWx0ZSBGZW5uZW1hLU5pbyA8cG9zdGdyZXNAamVsdGVmLm5s PgpEYXRlOiBTYXQsIDEzIERlYyAyMDI1IDEzOjA1OjUwICswMTAwClN1YmplY3Q6IFtQQVRDSCB2 MSAyLzJdIERvbid0IHVzZSB0aGUgZGVwcmVjYXRlZCBhbmQgaW5zZWN1cmUgUFFjYW5jZWwgaW4g b3VyCiBmcm9udGVuZCB0b29scyBhbnltb3JlCgpBIGJ1bmNoIG9mIGZyb250ZW5kIHRvb2xzLCBp bmNsdWRpbmcgcHNxbCwgc3RpbGwgdXNlZCBQUWNhbmNlbCB0byBzZW5kCmNhbmNlbCByZXF1ZXN0 cyB0byB0aGUgc2VydmVyLiBUaGF0IGZ1bmN0aW9uIGlzIGluc2VjdXJlLCBiZWNhdXNlIGl0CmRv ZXMgbm90IHVzZSBlbmNyeXB0aW9uIHRvIHNlbmQgdGhlIGNhbmNlbCByZXF1ZXN0LiBUaGlzIHN0 YXJ0cyB1c2luZwp0aGUgbmV3IGNhbmNlbGxhdGlvbiBBUElzIChpbnRyb2R1Y2VkIGluIDYxNDYx YTMwMCkgZm9yIGFsbCB0aGVzZQpmcm9udGVuZCB0b29scy4gVGhlc2UgQVBJcyB1c2UgdGhlIHNh bWUgZW5jcnlwdGlvbiBzZXR0aW5ncyBhcyB0aGUKY29ubmVjdGlvbiB0aGF0J3MgYmVpbmcgY2Fu Y2VsbGVkLiBTaW5jZSB0aGVzZSBBUElzIGFyZSBub3Qgc2lnbmFsLXNhZmUKdGhpcyByZXF1aXJl ZCBhIHJlZmFjdG9yIHRvIG5vdCBzZW5kIHRoZSBjYW5jZWwgcmVxdWVzdCBpbiBhIHNpZ25hbApo YW5kbGVyIGFueW1vcmUsIGJ1dCBpbnN0ZWFkIHVzaW5nIGEgZGVkaWNhdGVkIHRocmVhZC4gU2lt aWxhciBsb2dpYyB3YXMKYWxyZWFkeSB1c2VkIGZvciBXaW5kb3dzIGFueXdheSwgc28gdGhpcyBh bHNvIGhhcyB0aGUgYmVuZWZpdCB0aGF0IGl0Cm1ha2VzIHRoZSBjYW5jZWwgbG9naWMgbW9yZSB1 bmlmb3JtIGFjcm9zcyBvdXIgc3VwcG9ydGVkIHBsYXRmb3Jtcy4KLS0tCiBtZXNvbi5idWlsZCAg ICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDIgKy0KIHNyYy9iaW4vcGdfZHVtcC9NYWtlZmls ZSAgICAgICAgICAgICB8ICAgMiArLQogc3JjL2Jpbi9wZ19kdW1wL21lc29uLmJ1aWxkICAgICAg ICAgIHwgICAyICsKIHNyYy9iaW4vcGdfZHVtcC9wYXJhbGxlbC5jICAgICAgICAgICB8IDQwMSAr KysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0KIHNyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJj aGl2ZXIuYyB8ICAgMiArLQogc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5oIHwg ICA4ICstCiBzcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2RiLmMgICAgICAgfCAgIDcgKy0KIHNy Yy9mZV91dGlscy9NYWtlZmlsZSAgICAgICAgICAgICAgICB8ICAgMiArLQogc3JjL2ZlX3V0aWxz L2NhbmNlbC5jICAgICAgICAgICAgICAgIHwgMzE0ICsrKysrKysrKysrKystLS0tLS0tLQogOSBm aWxlcyBjaGFuZ2VkLCA0MTUgaW5zZXJ0aW9ucygrKSwgMzI1IGRlbGV0aW9ucygtKQoKZGlmZiAt LWdpdCBhL21lc29uLmJ1aWxkIGIvbWVzb24uYnVpbGQKaW5kZXggMTI1NjA5NGZhNTcuLjIwMmM3 YzVkZGE0IDEwMDY0NAotLS0gYS9tZXNvbi5idWlsZAorKysgYi9tZXNvbi5idWlsZApAQCAtMzMz Nyw3ICszMzM3LDcgQEAgZnJvbnRlbmRfY29kZSA9IGRlY2xhcmVfZGVwZW5kZW5jeSgKICAgaW5j bHVkZV9kaXJlY3RvcmllczogW3Bvc3RncmVzX2luY10sCiAgIGxpbmtfd2l0aDogW2ZlX3V0aWxz LCBjb21tb25fc3RhdGljLCBwZ3BvcnRfc3RhdGljXSwKICAgc291cmNlczogZ2VuZXJhdGVkX2hl YWRlcnNfc3RhbXAsCi0gIGRlcGVuZGVuY2llczogW29zX2RlcHMsIGxpYmludGxdLAorICBkZXBl bmRlbmNpZXM6IFtvc19kZXBzLCBsaWJpbnRsLCB0aHJlYWRfZGVwXSwKICkKIAogYmFja2VuZF9i b3RoX2RlcHMgKz0gWwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL01ha2VmaWxlIGIvc3Jj L2Jpbi9wZ19kdW1wL01ha2VmaWxlCmluZGV4IGZhNzk1ODgzZTlmLi4wNTAwZWIyMWIwZCAxMDA2 NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL01ha2VmaWxlCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9N YWtlZmlsZQpAQCAtMjEsNyArMjEsNyBAQCBleHBvcnQgTFo0CiBleHBvcnQgWlNURAogZXhwb3J0 IHdpdGhfaWN1CiAKLW92ZXJyaWRlIENQUEZMQUdTIDo9IC1JJChsaWJwcV9zcmNkaXIpICQoQ1BQ RkxBR1MpCitvdmVycmlkZSBDUFBGTEFHUyA6PSAtSSQobGlicHFfc3JjZGlyKSAtSSQodG9wX3Ny Y2Rpcikvc3JjL3BvcnQgJChDUFBGTEFHUykKIExERkxBR1NfSU5URVJOQUwgKz0gLUwkKHRvcF9i dWlsZGRpcikvc3JjL2ZlX3V0aWxzIC1scGdmZXV0aWxzICQobGlicHFfcGdwb3J0KQogCiBPQkpT ID0gXApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL21lc29uLmJ1aWxkIGIvc3JjL2Jpbi9w Z19kdW1wL21lc29uLmJ1aWxkCmluZGV4IGYzYzY2OWY0ODRlLi5hYzIxMzBhZmRmZSAxMDA2NDQK LS0tIGEvc3JjL2Jpbi9wZ19kdW1wL21lc29uLmJ1aWxkCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9t ZXNvbi5idWlsZApAQCAtMjIsNiArMjIsOCBAQCBwZ19kdW1wX2NvbW1vbl9zb3VyY2VzID0gZmls ZXMoCiBwZ19kdW1wX2NvbW1vbiA9IHN0YXRpY19saWJyYXJ5KCdsaWJwZ2R1bXBfY29tbW9uJywK ICAgcGdfZHVtcF9jb21tb25fc291cmNlcywKICAgY19wY2g6IHBjaF9wb3N0Z3Jlc19mZV9oLAor ICAjIHBvcnQgbmVlZHMgdG8gYmUgaW4gaW5jbHVkZSBwYXRoIGR1ZSB0byBwdGhyZWFkLXdpbjMy LmgKKyAgaW5jbHVkZV9kaXJlY3RvcmllczogWycuLi8uLi9wb3J0J10sCiAgIGRlcGVuZGVuY2ll czogW2Zyb250ZW5kX2NvZGUsIGxpYnBxLCBsejQsIHpsaWIsIHpzdGRdLAogICBrd2FyZ3M6IGlu dGVybmFsX2xpYl9hcmdzLAogKQpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BhcmFsbGVs LmMgYi9zcmMvYmluL3BnX2R1bXAvcGFyYWxsZWwuYwppbmRleCAwODZhZGNkYzUwMi4uZjM0ZTk2 NTEwOTkgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wYXJhbGxlbC5jCisrKyBiL3NyYy9i aW4vcGdfZHVtcC9wYXJhbGxlbC5jCkBAIC01OCw4ICs1OCwxMiBAQAogI2luY2x1ZGUgPHNpZ25h bC5oPgogI2luY2x1ZGUgPHVuaXN0ZC5oPgogI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8 cHRocmVhZC5oPgorI2Vsc2UKKyNpbmNsdWRlICJwdGhyZWFkLXdpbjMyLmgiCiAjZW5kaWYKIAor I2luY2x1ZGUgImNvbW1vbi9sb2dnaW5nLmgiCiAjaW5jbHVkZSAiZmVfdXRpbHMvc3RyaW5nX3V0 aWxzLmgiCiAjaW5jbHVkZSAicGFyYWxsZWwuaCIKICNpbmNsdWRlICJwZ19iYWNrdXBfdXRpbHMu aCIKQEAgLTE2Nyw2ICsxNzEsNyBAQCB0eXBlZGVmIHN0cnVjdCBEdW1wU2lnbmFsSW5mb3JtYXRp b24KIAlBcmNoaXZlSGFuZGxlICpteUFIOwkJLyogZGF0YWJhc2UgY29ubmVjdGlvbiB0byBpc3N1 ZSBjYW5jZWwgZm9yICovCiAJUGFyYWxsZWxTdGF0ZSAqcHN0YXRlOwkJLyogcGFyYWxsZWwgc3Rh dGUsIGlmIGFueSAqLwogCWJvb2wJCWhhbmRsZXJfc2V0OwkvKiBzaWduYWwgaGFuZGxlciBzZXQg dXAgaW4gdGhpcyBwcm9jZXNzPyAqLworCWJvb2wJCWNhbmNlbF9yZXF1ZXN0ZWQ7CS8qIGNhbmNl bCByZXF1ZXN0ZWQgdmlhIHNpZ25hbD8gKi8KICNpZm5kZWYgV0lOMzIKIAlib29sCQlhbV93b3Jr ZXI7CQkvKiBhbSBJIGEgd29ya2VyIHByb2Nlc3M/ICovCiAjZW5kaWYKQEAgLTE3NCw4ICsxNzks MTggQEAgdHlwZWRlZiBzdHJ1Y3QgRHVtcFNpZ25hbEluZm9ybWF0aW9uCiAKIHN0YXRpYyB2b2xh dGlsZSBEdW1wU2lnbmFsSW5mb3JtYXRpb24gc2lnbmFsX2luZm87CiAKLSNpZmRlZiBXSU4zMgot c3RhdGljIENSSVRJQ0FMX1NFQ1RJT04gc2lnbmFsX2luZm9fbG9jazsKKy8qCisgKiBNdXRleCBw cm90ZWN0aW5nIHNpZ25hbF9pbmZvIGR1cmluZyBjYW5jZWwgb3BlcmF0aW9ucy4KKyAqLworc3Rh dGljIHB0aHJlYWRfbXV0ZXhfdCBzaWduYWxfaW5mb19sb2NrOworCisjaWZuZGVmIFdJTjMyCisv KgorICogT24gVW5peCwgd2UgdXNlIGEgc2VsZi1waXBlIHRvIHdha2UgdXAgYSBjYW5jZWwgdGhy ZWFkIGZyb20gdGhlIHNpZ25hbAorICogaGFuZGxlciwgc2luY2UgaXQncyBub3Qgc2FmZSB0byBj YWxsIFBRY2FuY2VsQmxvY2tpbmcgZnJvbSBhIHNpZ25hbCBoYW5kbGVyLgorICovCitzdGF0aWMg aW50CWNhbmNlbF9waXBlWzJdID0gey0xLCAtMX07CitzdGF0aWMgcHRocmVhZF90IGNhbmNlbF90 aHJlYWQ7CiAjZW5kaWYKIAogLyoKQEAgLTIwOSw2ICsyMjQsNyBAQCBzdGF0aWMgdm9pZCBXYWl0 Rm9yVGVybWluYXRpbmdXb3JrZXJzKFBhcmFsbGVsU3RhdGUgKnBzdGF0ZSk7CiBzdGF0aWMgdm9p ZCBzZXRfY2FuY2VsX2hhbmRsZXIodm9pZCk7CiBzdGF0aWMgdm9pZCBzZXRfY2FuY2VsX3BzdGF0 ZShQYXJhbGxlbFN0YXRlICpwc3RhdGUpOwogc3RhdGljIHZvaWQgc2V0X2NhbmNlbF9zbG90X2Fy Y2hpdmUoUGFyYWxsZWxTbG90ICpzbG90LCBBcmNoaXZlSGFuZGxlICpBSCk7CitzdGF0aWMgdm9p ZCBTdG9wV29ya2Vycyh2b2lkKTsKIHN0YXRpYyB2b2lkIFJ1bldvcmtlcihBcmNoaXZlSGFuZGxl ICpBSCwgUGFyYWxsZWxTbG90ICpzbG90KTsKIHN0YXRpYyBpbnQJR2V0SWRsZVdvcmtlcihQYXJh bGxlbFN0YXRlICpwc3RhdGUpOwogc3RhdGljIGJvb2wgSGFzRXZlcnlXb3JrZXJUZXJtaW5hdGVk KFBhcmFsbGVsU3RhdGUgKnBzdGF0ZSk7CkBAIC00MTAsMzIgKzQyNiw5IEBAIFNodXRkb3duV29y a2Vyc0hhcmQoUGFyYWxsZWxTdGF0ZSAqcHN0YXRlKQogCS8qCiAJICogRm9yY2UgZWFybHkgdGVy bWluYXRpb24gb2YgYW55IGNvbW1hbmRzIGN1cnJlbnRseSBpbiBwcm9ncmVzcy4KIAkgKi8KLSNp Zm5kZWYgV0lOMzIKLQkvKiBPbiBub24tV2luZG93cywgc2VuZCBTSUdURVJNIHRvIGVhY2ggd29y a2VyIHByb2Nlc3MuICovCi0JZm9yIChpID0gMDsgaSA8IHBzdGF0ZS0+bnVtV29ya2VyczsgaSsr KQotCXsKLQkJcGlkX3QJCXBpZCA9IHBzdGF0ZS0+cGFyYWxsZWxTbG90W2ldLnBpZDsKLQotCQlp ZiAocGlkICE9IDApCi0JCQlraWxsKHBpZCwgU0lHVEVSTSk7Ci0JfQotI2Vsc2UKLQotCS8qCi0J ICogT24gV2luZG93cywgc2VuZCBxdWVyeSBjYW5jZWxzIGRpcmVjdGx5IHRvIHRoZSB3b3JrZXJz JyBiYWNrZW5kcy4gIFVzZQotCSAqIGEgY3JpdGljYWwgc2VjdGlvbiB0byBlbnN1cmUgd29ya2Vy IHRocmVhZHMgZG9uJ3QgY2hhbmdlIHN0YXRlLgotCSAqLwotCUVudGVyQ3JpdGljYWxTZWN0aW9u KCZzaWduYWxfaW5mb19sb2NrKTsKLQlmb3IgKGkgPSAwOyBpIDwgcHN0YXRlLT5udW1Xb3JrZXJz OyBpKyspCi0JewotCQlBcmNoaXZlSGFuZGxlICpBSCA9IHBzdGF0ZS0+cGFyYWxsZWxTbG90W2ld LkFIOwotCQljaGFyCQllcnJidWZbMV07Ci0KLQkJaWYgKEFIICE9IE5VTEwgJiYgQUgtPmNvbm5D YW5jZWwgIT0gTlVMTCkKLQkJCSh2b2lkKSBQUWNhbmNlbChBSC0+Y29ubkNhbmNlbCwgZXJyYnVm LCBzaXplb2YoZXJyYnVmKSk7Ci0JfQotCUxlYXZlQ3JpdGljYWxTZWN0aW9uKCZzaWduYWxfaW5m b19sb2NrKTsKLSNlbmRpZgorCXB0aHJlYWRfbXV0ZXhfbG9jaygmc2lnbmFsX2luZm9fbG9jayk7 CisJU3RvcFdvcmtlcnMoKTsKKwlwdGhyZWFkX211dGV4X3VubG9jaygmc2lnbmFsX2luZm9fbG9j ayk7CiAKIAkvKiBOb3cgd2FpdCBmb3IgdGhlbSB0byB0ZXJtaW5hdGUuICovCiAJV2FpdEZvclRl cm1pbmF0aW5nV29ya2Vycyhwc3RhdGUpOwpAQCAtNTE5LDc0ICs1MTIsNTQgQEAgV2FpdEZvclRl cm1pbmF0aW5nV29ya2VycyhQYXJhbGxlbFN0YXRlICpwc3RhdGUpCiAgKiBjb3VsZCBsZWF2ZSBh IFNRTCBjb21tYW5kIChlLmcuLCBDUkVBVEUgSU5ERVggb24gYSBsYXJnZSB0YWJsZSkgcnVubmlu ZwogICogZm9yIGEgbG9uZyB0aW1lLiAgSW5zdGVhZCwgd2UgdHJ5IHRvIHNlbmQgYSBjYW5jZWwg cmVxdWVzdCBhbmQgdGhlbiBkaWUuCiAgKiBwZ19kdW1wIHByb2JhYmx5IGRvZXNuJ3QgcmVhbGx5 IG5lZWQgdGhpcywgYnV0IHdlIG1pZ2h0IGFzIHdlbGwgdXNlIGl0Ci0gKiB0aGVyZSB0b28uICBO b3RlIHRoYXQgc2VuZGluZyB0aGUgY2FuY2VsIGRpcmVjdGx5IGZyb20gdGhlIHNpZ25hbCBoYW5k bGVyCi0gKiBpcyBzYWZlIGJlY2F1c2UgUFFjYW5jZWwoKSBpcyB3cml0dGVuIHRvIG1ha2UgaXQg c28uCisgKiB0aGVyZSB0b28uCiAgKgotICogSW4gcGFyYWxsZWwgb3BlcmF0aW9uIG9uIFVuaXgs IGVhY2ggcHJvY2VzcyBpcyByZXNwb25zaWJsZSBmb3IgY2FuY2VsaW5nCi0gKiBpdHMgb3duIGNv bm5lY3Rpb24gKHRoaXMgbXVzdCBiZSBzbyBiZWNhdXNlIG5vYm9keSBlbHNlIGhhcyBhY2Nlc3Mg dG8gaXQpLgotICogRnVydGhlcm1vcmUsIHRoZSBsZWFkZXIgcHJvY2VzcyBzaG91bGQgYXR0ZW1w dCB0byBmb3J3YXJkIGl0cyBzaWduYWwgdG8KLSAqIGVhY2ggY2hpbGQuICBJbiBzaW1wbGUgbWFu dWFsIHVzZSBvZiBwZ19kdW1wL3BnX3Jlc3RvcmUsIGZvcndhcmRpbmcgaXNuJ3QKLSAqIG5lZWRl ZCBiZWNhdXNlIHR5cGluZyBjb250cm9sLUMgYXQgdGhlIGNvbnNvbGUgd291bGQgZGVsaXZlciBT SUdJTlQgdG8KLSAqIGV2ZXJ5IG1lbWJlciBvZiB0aGUgdGVybWluYWwgcHJvY2VzcyBncm91cCAt LS0gYnV0IGluIG90aGVyIHNjZW5hcmlvcyBpdAotICogbWlnaHQgYmUgdGhhdCBvbmx5IHRoZSBs ZWFkZXIgZ2V0cyBzaWduYWxlZC4KKyAqIE9uIFVuaXgsIHRoZSBzaWduYWwgaGFuZGxlciB3YWtl cyB1cCBhIGRlZGljYXRlZCBjYW5jZWwgdGhyZWFkIHZpYSBhCisgKiBzZWxmLXBpcGUsIHdoaWNo IHRoZW4gc2VuZHMgdGhlIGNhbmNlbCBhbmQgY2FsbHMgX2V4aXQoKS4gIFRoaXMgdGhyZWFkIGFs c28KKyAqIGZvcndhcmRzIHRoZSBzaWduYWwgdG8gZWFjaCBjaGlsZCBzbyB0aGV5IGNhbiBhbHNv IGNhbmNlbCB0aGVpciBxdWVyaWVzLiBJbgorICogc2ltcGxlIG1hbnVhbCB1c2Ugb2YgcGdfZHVt cC9wZ19yZXN0b3JlLCBmb3J3YXJkaW5nIGlzbid0IG5lZWRlZCBiZWNhdXNlCisgKiB0eXBpbmcg Y29udHJvbC1DIGF0IHRoZSBjb25zb2xlIHdvdWxkIGRlbGl2ZXIgU0lHSU5UIHRvIGV2ZXJ5IG1l bWJlciBvZiB0aGUKKyAqIHRlcm1pbmFsIHByb2Nlc3MgZ3JvdXAgLS0tIGJ1dCBpbiBvdGhlciBz Y2VuYXJpb3MgaXQgbWlnaHQgYmUgdGhhdCBvbmx5IHRoZQorICogbGVhZGVyIGdldHMgc2lnbmFs ZWQuCiAgKgogICogT24gV2luZG93cywgdGhlIGNhbmNlbCBoYW5kbGVyIHJ1bnMgaW4gYSBzZXBh cmF0ZSB0aHJlYWQsIGJlY2F1c2UgdGhhdCdzCiAgKiBob3cgU2V0Q29uc29sZUN0cmxIYW5kbGVy IHdvcmtzLiAgV2UgbWFrZSBpdCBzdG9wIHdvcmtlciB0aHJlYWRzLCBzZW5kCiAgKiBjYW5jZWxz IG9uIGFsbCBhY3RpdmUgY29ubmVjdGlvbnMsIGFuZCB0aGVuIHJldHVybiBGQUxTRSwgd2hpY2gg d2lsbCBhbGxvdwogICogdGhlIHByb2Nlc3MgdG8gZGllLiAgRm9yIHNhZmV0eSdzIHNha2UsIHdl IHVzZSBhIGNyaXRpY2FsIHNlY3Rpb24gdG8KLSAqIHByb3RlY3QgdGhlIFBHY2FuY2VsIHN0cnVj dHVyZXMgYWdhaW5zdCBiZWluZyBjaGFuZ2VkIHdoaWxlIHRoZSBzaWduYWwKKyAqIHByb3RlY3Qg dGhlIFBHY2FuY2VsQ29ubiBzdHJ1Y3R1cmVzIGFnYWluc3QgYmVpbmcgY2hhbmdlZCB3aGlsZSB0 aGUgc2lnbmFsCiAgKiB0aHJlYWQgcnVucy4KICAqLwogCi0jaWZuZGVmIFdJTjMyCi0KIC8qCi0g KiBTaWduYWwgaGFuZGxlciAoVW5peCBvbmx5KQorICogQ2FuY2VsIGFsbCBhY3RpdmUgcXVlcmll cyBhbmQgcHJpbnQgdGVybWluYXRpb24gbWVzc2FnZS4KICAqLwogc3RhdGljIHZvaWQKLXNpZ1Rl cm1IYW5kbGVyKFNJR05BTF9BUkdTKQorQ2FuY2VsQmFja2VuZHModm9pZCkKIHsKLQlpbnQJCQlp OwotCWNoYXIJCWVycmJ1ZlsxXTsKKwlwdGhyZWFkX211dGV4X2xvY2soJnNpZ25hbF9pbmZvX2xv Y2spOwogCi0JLyoKLQkgKiBTb21lIHBsYXRmb3JtcyBhbGxvdyBkZWxpdmVyeSBvZiBuZXcgc2ln bmFscyB0byBpbnRlcnJ1cHQgYW4gYWN0aXZlCi0JICogc2lnbmFsIGhhbmRsZXIuICBUaGF0IGNv dWxkIG11Y2sgdXAgb3VyIGF0dGVtcHQgdG8gc2VuZCBQUWNhbmNlbCwgc28KLQkgKiBkaXNhYmxl IHRoZSBzaWduYWxzIHRoYXQgc2V0X2NhbmNlbF9oYW5kbGVyIGVuYWJsZWQuCi0JICovCi0JcHFz aWduYWwoU0lHSU5ULCBTSUdfSUdOKTsKLQlwcXNpZ25hbChTSUdURVJNLCBTSUdfSUdOKTsKLQlw cXNpZ25hbChTSUdRVUlULCBTSUdfSUdOKTsKKwlzaWduYWxfaW5mby5jYW5jZWxfcmVxdWVzdGVk ID0gdHJ1ZTsKIAogCS8qCi0JICogSWYgd2UncmUgaW4gdGhlIGxlYWRlciwgZm9yd2FyZCBzaWdu YWwgdG8gYWxsIHdvcmtlcnMuICAoSXQgc2VlbXMgYmVzdAotCSAqIHRvIGRvIHRoaXMgYmVmb3Jl IFBRY2FuY2VsOyBraWxsaW5nIHRoZSBsZWFkZXIgdHJhbnNhY3Rpb24gd2lsbCByZXN1bHQKLQkg KiBpbiBpbnZhbGlkLXNuYXBzaG90IGVycm9ycyBmcm9tIGFjdGl2ZSB3b3JrZXJzLCB3aGljaCBt YXliZSB3ZSBjYW4KLQkgKiBxdWlldCBieSBraWxsaW5nIHdvcmtlcnMgZmlyc3QuKSAgSWdub3Jl IGFueSBlcnJvcnMuCisJICogU3RvcCB3b3JrZXJzIGZpcnN0IHRvIGF2b2lkIGludmFsaWQtc25h cHNob3QgZXJyb3JzIGlmIHRoZSBsZWFkZXIKKwkgKiBjYW5jZWxzIGJlZm9yZSB3b3JrZXJzLgog CSAqLwotCWlmIChzaWduYWxfaW5mby5wc3RhdGUgIT0gTlVMTCkKLQl7Ci0JCWZvciAoaSA9IDA7 IGkgPCBzaWduYWxfaW5mby5wc3RhdGUtPm51bVdvcmtlcnM7IGkrKykKLQkJewotCQkJcGlkX3QJ CXBpZCA9IHNpZ25hbF9pbmZvLnBzdGF0ZS0+cGFyYWxsZWxTbG90W2ldLnBpZDsKKwlTdG9wV29y a2VycygpOwogCi0JCQlpZiAocGlkICE9IDApCi0JCQkJa2lsbChwaWQsIFNJR1RFUk0pOwotCQl9 Ci0JfQorCWlmIChzaWduYWxfaW5mby5teUFIICE9IE5VTEwgJiYgc2lnbmFsX2luZm8ubXlBSC0+ Y2FuY2VsQ29ubiAhPSBOVUxMKQorCQkodm9pZCkgUFFjYW5jZWxCbG9ja2luZyhzaWduYWxfaW5m by5teUFILT5jYW5jZWxDb25uKTsKIAotCS8qCi0JICogU2VuZCBRdWVyeUNhbmNlbCBpZiB3ZSBo YXZlIGEgY29ubmVjdGlvbiB0byBzZW5kIHRvLiAgSWdub3JlIGVycm9ycywKLQkgKiB0aGVyZSdz IG5vdCBtdWNoIHdlIGNhbiBkbyBhYm91dCB0aGVtIGFueXdheS4KLQkgKi8KLQlpZiAoc2lnbmFs X2luZm8ubXlBSCAhPSBOVUxMICYmIHNpZ25hbF9pbmZvLm15QUgtPmNvbm5DYW5jZWwgIT0gTlVM TCkKLQkJKHZvaWQpIFBRY2FuY2VsKHNpZ25hbF9pbmZvLm15QUgtPmNvbm5DYW5jZWwsIGVycmJ1 Ziwgc2l6ZW9mKGVycmJ1ZikpOworCXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZzaWduYWxfaW5mb19s b2NrKTsKIAogCS8qCi0JICogUmVwb3J0IHdlJ3JlIHF1aXR0aW5nLCB1c2luZyBub3RoaW5nIG1v cmUgY29tcGxpY2F0ZWQgdGhhbiB3cml0ZSgyKS4KLQkgKiBXaGVuIGluIHBhcmFsbGVsIG9wZXJh dGlvbiwgb25seSB0aGUgbGVhZGVyIHByb2Nlc3Mgc2hvdWxkIGRvIHRoaXMuCisJICogUHJpbnQg dGVybWluYXRpb24gbWVzc2FnZS4gSW4gcGFyYWxsZWwgb3BlcmF0aW9uLCBvbmx5IHRoZSBsZWFk ZXIKKwkgKiBzaG91bGQgcHJpbnQgdGhpcy4gT24gV2luZG93cywgd29ya2VycyBhcmUgdGhyZWFk cyBpbiB0aGUgc2FtZSBwcm9jZXNzCisJICogYW5kIHRoZSBjb25zb2xlIGhhbmRsZXIgb25seSBy dW5zIGluIHRoZSBsZWFkZXIgY29udGV4dCwgc28gd2UgY2FuCisJICogYWx3YXlzIHByaW50IGl0 LgogCSAqLworI2lmbmRlZiBXSU4zMgogCWlmICghc2lnbmFsX2luZm8uYW1fd29ya2VyKQorI2Vu ZGlmCiAJewogCQlpZiAocHJvZ25hbWUpCiAJCXsKQEAgLTU5NSwxNzIgKzU2OCwyMDMgQEAgc2ln VGVybUhhbmRsZXIoU0lHTkFMX0FSR1MpCiAJCX0KIAkJd3JpdGVfc3RkZXJyKCJ0ZXJtaW5hdGVk IGJ5IHVzZXJcbiIpOwogCX0KLQotCS8qCi0JICogQW5kIGRpZSwgdXNpbmcgX2V4aXQoKSBub3Qg ZXhpdCgpIGJlY2F1c2UgdGhlIGxhdHRlciB3aWxsIGludm9rZSBhdGV4aXQKLQkgKiBoYW5kbGVy cyB0aGF0IGNhbiBmYWlsIGlmIHdlIGludGVycnVwdGVkIHJlbGF0ZWQgY29kZS4KLQkgKi8KLQlf ZXhpdCgxKTsKIH0KIAogLyoKLSAqIEVuYWJsZSBjYW5jZWwgaW50ZXJydXB0IGhhbmRsZXIsIGlm IG5vdCBhbHJlYWR5IGRvbmUuCisgKiBTdG9wIGFsbCB3b3JrZXIgcHJvY2Vzc2VzL3RocmVhZHMu CisgKgorICogT24gVW5peCwgc2VuZCBTSUdURVJNIHRvIGVhY2ggd29ya2VyIHByb2Nlc3M7IHRo ZWlyIHNpZ25hbCBoYW5kbGVycyB3aWxsCisgKiBzZW5kIGNhbmNlbCByZXF1ZXN0cyB0byB0aGVp ciBiYWNrZW5kcy4KKyAqCisgKiBPbiBXaW5kb3dzLCB3b3JrZXJzIGFyZSB0aHJlYWRzIGluIHRo ZSBzYW1lIHByb2Nlc3MsIHNvIHdlIHNlbmQgY2FuY2VsCisgKiByZXF1ZXN0cyBkaXJlY3RseSB0 byB0aGVpciBiYWNrZW5kcy4KKyAqCisgKiBDYWxsZXIgbXVzdCBob2xkIHNpZ25hbF9pbmZvX2xv Y2suCiAgKi8KIHN0YXRpYyB2b2lkCi1zZXRfY2FuY2VsX2hhbmRsZXIodm9pZCkKK1N0b3BXb3Jr ZXJzKHZvaWQpCiB7Ci0JLyoKLQkgKiBXaGVuIGZvcmtpbmcsIHNpZ25hbF9pbmZvLmhhbmRsZXJf c2V0IHdpbGwgcHJvcGFnYXRlIGludG8gdGhlIG5ldwotCSAqIHByb2Nlc3MsIGJ1dCB0aGF0J3Mg ZmluZSBiZWNhdXNlIHRoZSBzaWduYWwgaGFuZGxlciBzdGF0ZSBkb2VzIHRvby4KLQkgKi8KLQlp ZiAoIXNpZ25hbF9pbmZvLmhhbmRsZXJfc2V0KQorCWludAkJCWk7CisKKwlpZiAoc2lnbmFsX2lu Zm8ucHN0YXRlID09IE5VTEwpCisJCXJldHVybjsKKworCWZvciAoaSA9IDA7IGkgPCBzaWduYWxf aW5mby5wc3RhdGUtPm51bVdvcmtlcnM7IGkrKykKIAl7Ci0JCXNpZ25hbF9pbmZvLmhhbmRsZXJf c2V0ID0gdHJ1ZTsKKyNpZm5kZWYgV0lOMzIKKwkJcGlkX3QJCXBpZCA9IHNpZ25hbF9pbmZvLnBz dGF0ZS0+cGFyYWxsZWxTbG90W2ldLnBpZDsKKworCQlpZiAocGlkICE9IDApCisJCQlraWxsKHBp ZCwgU0lHVEVSTSk7CisjZWxzZQorCQlBcmNoaXZlSGFuZGxlICpBSCA9IHNpZ25hbF9pbmZvLnBz dGF0ZS0+cGFyYWxsZWxTbG90W2ldLkFIOwogCi0JCXBxc2lnbmFsKFNJR0lOVCwgc2lnVGVybUhh bmRsZXIpOwotCQlwcXNpZ25hbChTSUdURVJNLCBzaWdUZXJtSGFuZGxlcik7Ci0JCXBxc2lnbmFs KFNJR1FVSVQsIHNpZ1Rlcm1IYW5kbGVyKTsKKwkJaWYgKEFIICE9IE5VTEwgJiYgQUgtPmNhbmNl bENvbm4gIT0gTlVMTCkKKwkJCSh2b2lkKSBQUWNhbmNlbEJsb2NraW5nKEFILT5jYW5jZWxDb25u KTsKKyNlbmRpZgogCX0KIH0KIAotI2Vsc2UJCQkJCQkJLyogV0lOMzIgKi8KKyNpZmRlZiBXSU4z MgogCiAvKgogICogQ29uc29sZSBpbnRlcnJ1cHQgaGFuZGxlciAtLS0gcnVucyBpbiBhIG5ld2x5 LXN0YXJ0ZWQgdGhyZWFkLgogICoKLSAqIEFmdGVyIHN0b3BwaW5nIG90aGVyIHRocmVhZHMgYW5k IHNlbmRpbmcgY2FuY2VsIHJlcXVlc3RzIG9uIGFsbCBvcGVuCi0gKiBjb25uZWN0aW9ucywgd2Ug cmV0dXJuIEZBTFNFIHdoaWNoIHdpbGwgYWxsb3cgdGhlIGRlZmF1bHQgRXhpdFByb2Nlc3MoKQot ICogYWN0aW9uIHRvIGJlIHRha2VuLgorICogU2VuZCBjYW5jZWwgcmVxdWVzdHMgb24gYWxsIG9w ZW4gY29ubmVjdGlvbnMgYW5kIHJldHVybiBGQUxTRSB0byBhbGxvdworICogdGhlIGRlZmF1bHQg RXhpdFByb2Nlc3MoKSBhY3Rpb24gdG8gdGVybWluYXRlIHRoZSBwcm9jZXNzLgogICovCiBzdGF0 aWMgQk9PTCBXSU5BUEkKIGNvbnNvbGVIYW5kbGVyKERXT1JEIGR3Q3RybFR5cGUpCiB7Ci0JaW50 CQkJaTsKLQljaGFyCQllcnJidWZbMV07Ci0KIAlpZiAoZHdDdHJsVHlwZSA9PSBDVFJMX0NfRVZF TlQgfHwKIAkJZHdDdHJsVHlwZSA9PSBDVFJMX0JSRUFLX0VWRU5UKQogCXsKLQkJLyogQ3JpdGlj YWwgc2VjdGlvbiBwcmV2ZW50cyBjaGFuZ2luZyBkYXRhIHdlIGxvb2sgYXQgaGVyZSAqLwotCQlF bnRlckNyaXRpY2FsU2VjdGlvbigmc2lnbmFsX2luZm9fbG9jayk7CisJCUNhbmNlbEJhY2tlbmRz KCk7CisJfQogCi0JCS8qCi0JCSAqIElmIGluIHBhcmFsbGVsIG1vZGUsIHN0b3Agd29ya2VyIHRo cmVhZHMgYW5kIHNlbmQgUXVlcnlDYW5jZWwgdG8KLQkJICogdGhlaXIgY29ubmVjdGVkIGJhY2tl bmRzLiAgVGhlIG1haW4gcG9pbnQgb2Ygc3RvcHBpbmcgdGhlIHdvcmtlcgotCQkgKiB0aHJlYWRz IGlzIHRvIGtlZXAgdGhlbSBmcm9tIHJlcG9ydGluZyB0aGUgcXVlcnkgY2FuY2VscyBhcyBlcnJv cnMsCi0JCSAqIHdoaWNoIHdvdWxkIGNsdXR0ZXIgdGhlIHVzZXIncyBzY3JlZW4uICBXZSBuZWVk bid0IHN0b3AgdGhlIGxlYWRlcgotCQkgKiB0aHJlYWQgc2luY2UgaXQgd29uJ3QgYmUgZG9pbmcg bXVjaCBhbnl3YXkuICBEbyB0aGlzIGJlZm9yZQotCQkgKiBjYW5jZWxpbmcgdGhlIG1haW4gdHJh bnNhY3Rpb24sIGVsc2Ugd2UgbWlnaHQgZ2V0IGludmFsaWQtc25hcHNob3QKLQkJICogZXJyb3Jz IHJlcG9ydGVkIGJlZm9yZSB3ZSBjYW4gc3RvcCB0aGUgd29ya2Vycy4gIElnbm9yZSBlcnJvcnMs Ci0JCSAqIHRoZXJlJ3Mgbm90IG11Y2ggd2UgY2FuIGRvIGFib3V0IHRoZW0gYW55d2F5LgotCQkg Ki8KLQkJaWYgKHNpZ25hbF9pbmZvLnBzdGF0ZSAhPSBOVUxMKQorCS8qIEFsd2F5cyByZXR1cm4g RkFMU0UgdG8gYWxsb3cgc2lnbmFsIGhhbmRsaW5nIHRvIGNvbnRpbnVlICovCisJcmV0dXJuIEZB TFNFOworfQorCisjZWxzZQkJCQkJCQkvKiAhV0lOMzIgKi8KKworLyoKKyAqIENhbmNlbCB0aHJl YWQgbWFpbiBmdW5jdGlvbi4gV2FpdHMgZm9yIHRoZSBzaWduYWwgaGFuZGxlciB0byB3cml0ZSB0 byB0aGUKKyAqIHBpcGUsIHRoZW4gY2FuY2VscyBiYWNrZW5kcyBhbmQgY2FsbHMgX2V4aXQoKS4K KyAqLworc3RhdGljIHZvaWQgKgorY2FuY2VsX3RocmVhZF9tYWluKHZvaWQgKmFyZykKK3sKKwlm b3IgKDs7KQorCXsKKwkJY2hhcgkJYnVmWzE2XTsKKwkJc3NpemVfdAkJcmM7CisKKwkJLyogV2Fp dCBmb3Igc2lnbmFsIGhhbmRsZXIgdG8gd2FrZSB1cyB1cCAqLworCQlyYyA9IHJlYWQoY2FuY2Vs X3BpcGVbMF0sIGJ1Ziwgc2l6ZW9mKGJ1ZikpOworCQlpZiAocmMgPD0gMCkKIAkJewotCQkJZm9y IChpID0gMDsgaSA8IHNpZ25hbF9pbmZvLnBzdGF0ZS0+bnVtV29ya2VyczsgaSsrKQotCQkJewot CQkJCVBhcmFsbGVsU2xvdCAqc2xvdCA9ICYoc2lnbmFsX2luZm8ucHN0YXRlLT5wYXJhbGxlbFNs b3RbaV0pOwotCQkJCUFyY2hpdmVIYW5kbGUgKkFIID0gc2xvdC0+QUg7Ci0JCQkJSEFORExFCQlo VGhyZWFkID0gKEhBTkRMRSkgc2xvdC0+aFRocmVhZDsKLQotCQkJCS8qCi0JCQkJICogVXNpbmcg VGVybWluYXRlVGhyZWFkIGhlcmUgbWF5IGxlYXZlIHNvbWUgcmVzb3VyY2VzIGxlYWtlZCwKLQkJ CQkgKiBidXQgaXQgZG9lc24ndCBtYXR0ZXIgc2luY2Ugd2UncmUgYWJvdXQgdG8gZW5kIHRoZSB3 aG9sZQotCQkJCSAqIHByb2Nlc3MuCi0JCQkJICovCi0JCQkJaWYgKGhUaHJlYWQgIT0gSU5WQUxJ RF9IQU5ETEVfVkFMVUUpCi0JCQkJCVRlcm1pbmF0ZVRocmVhZChoVGhyZWFkLCAwKTsKLQotCQkJ CWlmIChBSCAhPSBOVUxMICYmIEFILT5jb25uQ2FuY2VsICE9IE5VTEwpCi0JCQkJCSh2b2lkKSBQ UWNhbmNlbChBSC0+Y29ubkNhbmNlbCwgZXJyYnVmLCBzaXplb2YoZXJyYnVmKSk7Ci0JCQl9CisJ CQlpZiAoZXJybm8gPT0gRUlOVFIpCisJCQkJY29udGludWU7CisJCQkvKiBQaXBlIGNsb3NlZCBv ciBlcnJvciAtIGV4aXQgdGhyZWFkICovCisJCQlicmVhazsKIAkJfQogCi0JCS8qCi0JCSAqIFNl bmQgUXVlcnlDYW5jZWwgdG8gbGVhZGVyIGNvbm5lY3Rpb24sIGlmIGVuYWJsZWQuICBJZ25vcmUg ZXJyb3JzLAotCQkgKiB0aGVyZSdzIG5vdCBtdWNoIHdlIGNhbiBkbyBhYm91dCB0aGVtIGFueXdh eS4KLQkJICovCi0JCWlmIChzaWduYWxfaW5mby5teUFIICE9IE5VTEwgJiYgc2lnbmFsX2luZm8u bXlBSC0+Y29ubkNhbmNlbCAhPSBOVUxMKQotCQkJKHZvaWQpIFBRY2FuY2VsKHNpZ25hbF9pbmZv Lm15QUgtPmNvbm5DYW5jZWwsCi0JCQkJCQkJZXJyYnVmLCBzaXplb2YoZXJyYnVmKSk7Ci0KLQkJ TGVhdmVDcml0aWNhbFNlY3Rpb24oJnNpZ25hbF9pbmZvX2xvY2spOworCQlDYW5jZWxCYWNrZW5k cygpOwogCiAJCS8qCi0JCSAqIFJlcG9ydCB3ZSdyZSBxdWl0dGluZywgdXNpbmcgbm90aGluZyBt b3JlIGNvbXBsaWNhdGVkIHRoYW4KLQkJICogd3JpdGUoMikuICAoV2UgbWlnaHQgYmUgYWJsZSB0 byBnZXQgYXdheSB3aXRoIHVzaW5nIHBnX2xvZ18qKCkKLQkJICogaGVyZSwgYnV0IHNpbmNlIHdl IHRlcm1pbmF0ZWQgb3RoZXIgdGhyZWFkcyB1bmNsZWFubHkgYWJvdmUsIGl0Ci0JCSAqIHNlZW1z IGJldHRlciB0byBhc3N1bWUgYXMgbGl0dGxlIGFzIHBvc3NpYmxlLikKKwkJICogQW5kIGRpZSwg dXNpbmcgX2V4aXQoKSBub3QgZXhpdCgpIGJlY2F1c2UgdGhlIGxhdHRlciB3aWxsIGludm9rZQor CQkgKiBhdGV4aXQgaGFuZGxlcnMgdGhhdCBjYW4gZmFpbCBpZiB3ZSBpbnRlcnJ1cHRlZCByZWxh dGVkIGNvZGUuCiAJCSAqLwotCQlpZiAocHJvZ25hbWUpCi0JCXsKLQkJCXdyaXRlX3N0ZGVycihw cm9nbmFtZSk7Ci0JCQl3cml0ZV9zdGRlcnIoIjogIik7Ci0JCX0KLQkJd3JpdGVfc3RkZXJyKCJ0 ZXJtaW5hdGVkIGJ5IHVzZXJcbiIpOworCQlfZXhpdCgxKTsKIAl9CiAKLQkvKiBBbHdheXMgcmV0 dXJuIEZBTFNFIHRvIGFsbG93IHNpZ25hbCBoYW5kbGluZyB0byBjb250aW51ZSAqLwotCXJldHVy biBGQUxTRTsKKwlyZXR1cm4gTlVMTDsKIH0KIAorLyoKKyAqIFNpZ25hbCBoYW5kbGVyIChVbml4 IG9ubHkpLiAgV2FrZXMgdXAgdGhlIGNhbmNlbCB0aHJlYWQgYnkgd3JpdGluZyB0byB0aGUKKyAq IHBpcGUuCisgKi8KK3N0YXRpYyB2b2lkCitzaWdUZXJtSGFuZGxlcihTSUdOQUxfQVJHUykKK3sK KwlpbnQJCQlzYXZlX2Vycm5vID0gZXJybm87CisJY2hhcgkJYyA9IDE7CisKKwkvKiBXYWtlIHVw IHRoZSBjYW5jZWwgdGhyZWFkIC0gd3JpdGUoKSBpcyBhc3luYy1zaWduYWwtc2FmZSAqLworCWlm IChjYW5jZWxfcGlwZVsxXSA+PSAwKQorCQkodm9pZCkgd3JpdGUoY2FuY2VsX3BpcGVbMV0sICZj LCAxKTsKKworCWVycm5vID0gc2F2ZV9lcnJubzsKK30KKworI2VuZGlmCQkJCQkJCS8qIFdJTjMy ICovCisKIC8qCiAgKiBFbmFibGUgY2FuY2VsIGludGVycnVwdCBoYW5kbGVyLCBpZiBub3QgYWxy ZWFkeSBkb25lLgogICovCiBzdGF0aWMgdm9pZAogc2V0X2NhbmNlbF9oYW5kbGVyKHZvaWQpCiB7 Ci0JaWYgKCFzaWduYWxfaW5mby5oYW5kbGVyX3NldCkKKwlpZiAoc2lnbmFsX2luZm8uaGFuZGxl cl9zZXQpCisJCXJldHVybjsKKworCXNpZ25hbF9pbmZvLmhhbmRsZXJfc2V0ID0gdHJ1ZTsKKwor CXB0aHJlYWRfbXV0ZXhfaW5pdCgmc2lnbmFsX2luZm9fbG9jaywgTlVMTCk7CisKKyNpZmRlZiBX SU4zMgorCVNldENvbnNvbGVDdHJsSGFuZGxlcihjb25zb2xlSGFuZGxlciwgVFJVRSk7CisjZWxz ZQorCisJLyoKKwkgKiBTZXQgdXAgdGhlIHNlbGYtcGlwZSBmb3IgY29tbXVuaWNhdGlvbiBiZXR3 ZWVuIHNpZ25hbCBoYW5kbGVyIGFuZAorCSAqIGNhbmNlbCB0aHJlYWQuICBXZSB1c2UgYSBwaXBl IGJlY2F1c2Ugd3JpdGUoKSBpcyBhc3luYy1zaWduYWwtc2FmZS4KKwkgKi8KKwlpZiAocGlwZShj YW5jZWxfcGlwZSkgPCAwKQogCXsKLQkJc2lnbmFsX2luZm8uaGFuZGxlcl9zZXQgPSB0cnVlOwor CQlwZ19sb2dfZXJyb3IoImNvdWxkIG5vdCBjcmVhdGUgcGlwZSBmb3IgY2FuY2VsOiAlbSIpOwor CQlleGl0KDEpOworCX0KIAotCQlJbml0aWFsaXplQ3JpdGljYWxTZWN0aW9uKCZzaWduYWxfaW5m b19sb2NrKTsKKwkvKgorCSAqIENyZWF0ZSBhIHRocmVhZCB0byBoYW5kbGUgY2FuY2VsIHJlcXVl c3RzLiAgVGhlIHNpZ25hbCBoYW5kbGVyIHdpbGwKKwkgKiB3cml0ZSB0byB0aGUgcGlwZSB0byB3 YWtlIHVwIHRoaXMgdGhyZWFkLgorCSAqLworCXsKKwkJaW50CQkJcmM7CiAKLQkJU2V0Q29uc29s ZUN0cmxIYW5kbGVyKGNvbnNvbGVIYW5kbGVyLCBUUlVFKTsKKwkJcmMgPSBwdGhyZWFkX2NyZWF0 ZSgmY2FuY2VsX3RocmVhZCwgTlVMTCwgY2FuY2VsX3RocmVhZF9tYWluLCBOVUxMKTsKKwkJaWYg KHJjICE9IDApCisJCXsKKwkJCXBnX2xvZ19lcnJvcigiY291bGQgbm90IGNyZWF0ZSBjYW5jZWwg dGhyZWFkOiAlcyIsIHN0cmVycm9yKHJjKSk7CisJCQlleGl0KDEpOworCQl9CiAJfQotfQogCi0j ZW5kaWYJCQkJCQkJLyogV0lOMzIgKi8KKwlwcXNpZ25hbChTSUdJTlQsIHNpZ1Rlcm1IYW5kbGVy KTsKKwlwcXNpZ25hbChTSUdURVJNLCBzaWdUZXJtSGFuZGxlcik7CisJcHFzaWduYWwoU0lHUVVJ VCwgc2lnVGVybUhhbmRsZXIpOworI2VuZGlmCit9CiAKIAogLyoKICAqIHNldF9hcmNoaXZlX2Nh bmNlbF9pbmZvCiAgKgotICogRmlsbCBBSC0+Y29ubkNhbmNlbCB3aXRoIGNhbmNlbGxhdGlvbiBp bmZvIGZvciB0aGUgc3BlY2lmaWVkIGRhdGFiYXNlCisgKiBGaWxsIEFILT5jYW5jZWxDb25uIHdp dGggY2FuY2VsbGF0aW9uIGluZm8gZm9yIHRoZSBzcGVjaWZpZWQgZGF0YWJhc2UKICAqIGNvbm5l Y3Rpb247IG9yIGNsZWFyIGl0IGlmIGNvbm4gaXMgTlVMTC4KICAqLwogdm9pZAogc2V0X2FyY2hp dmVfY2FuY2VsX2luZm8oQXJjaGl2ZUhhbmRsZSAqQUgsIFBHY29ubiAqY29ubikKIHsKLQlQR2Nh bmNlbCAgICpvbGRDb25uQ2FuY2VsOworCVBHY2FuY2VsQ29ubiAqb2xkQ2FuY2VsQ29ubjsKIAog CS8qCi0JICogQWN0aXZhdGUgdGhlIGludGVycnVwdCBoYW5kbGVyIGlmIHdlIGRpZG4ndCB5ZXQg aW4gdGhpcyBwcm9jZXNzLiAgT24KLQkgKiBXaW5kb3dzLCB0aGlzIGFsc28gaW5pdGlhbGl6ZXMg c2lnbmFsX2luZm9fbG9jazsgdGhlcmVmb3JlIGl0J3MKLQkgKiBpbXBvcnRhbnQgdGhhdCB0aGlz IGhhcHBlbiBhdCBsZWFzdCBvbmNlIGJlZm9yZSB3ZSBmb3JrIG9mZiBhbnkKLQkgKiB0aHJlYWRz LgorCSAqIEFjdGl2YXRlIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciBpZiB3ZSBkaWRuJ3QgeWV0IGlu IHRoaXMgcHJvY2Vzcy4gIFRoaXMKKwkgKiBhbHNvIGluaXRpYWxpemVzIHNpZ25hbF9pbmZvX2xv Y2s7IHRoZXJlZm9yZSBpdCdzIGltcG9ydGFudCB0aGF0IHRoaXMKKwkgKiBoYXBwZW4gYXQgbGVh c3Qgb25jZSBiZWZvcmUgd2UgZm9yayBvZmYgYW55IHRocmVhZHMuCiAJICovCiAJc2V0X2NhbmNl bF9oYW5kbGVyKCk7CiAKIAkvKgotCSAqIE9uIFVuaXgsIHdlIGFzc3VtZSB0aGF0IHN0b3Jpbmcg YSBwb2ludGVyIHZhbHVlIGlzIGF0b21pYyB3aXRoIHJlc3BlY3QKLQkgKiB0byBhbnkgcG9zc2li bGUgc2lnbmFsIGludGVycnVwdC4gIE9uIFdpbmRvd3MsIHVzZSBhIGNyaXRpY2FsIHNlY3Rpb24u CisJICogVXNlIG11dGV4IHRvIHByZXZlbnQgdGhlIGNhbmNlbCBoYW5kbGVyIGZyb20gdXNpbmcg dGhlIHBvaW50ZXIgd2hpbGUKKwkgKiB3ZSdyZSBjaGFuZ2luZyBpdC4KIAkgKi8KLQotI2lmZGVm IFdJTjMyCi0JRW50ZXJDcml0aWNhbFNlY3Rpb24oJnNpZ25hbF9pbmZvX2xvY2spOwotI2VuZGlm CisJcHRocmVhZF9tdXRleF9sb2NrKCZzaWduYWxfaW5mb19sb2NrKTsKIAogCS8qIEZyZWUgdGhl IG9sZCBvbmUgaWYgd2UgaGF2ZSBvbmUgKi8KLQlvbGRDb25uQ2FuY2VsID0gQUgtPmNvbm5DYW5j ZWw7CisJb2xkQ2FuY2VsQ29ubiA9IEFILT5jYW5jZWxDb25uOwogCS8qIGJlIHN1cmUgaW50ZXJy dXB0IGhhbmRsZXIgZG9lc24ndCB1c2UgcG9pbnRlciB3aGlsZSBmcmVlaW5nICovCi0JQUgtPmNv bm5DYW5jZWwgPSBOVUxMOworCUFILT5jYW5jZWxDb25uID0gTlVMTDsKIAotCWlmIChvbGRDb25u Q2FuY2VsICE9IE5VTEwpCi0JCVBRZnJlZUNhbmNlbChvbGRDb25uQ2FuY2VsKTsKKwlpZiAob2xk Q2FuY2VsQ29ubiAhPSBOVUxMKQorCQlQUWNhbmNlbEZpbmlzaChvbGRDYW5jZWxDb25uKTsKIAog CS8qIFNldCB0aGUgbmV3IG9uZSBpZiBzcGVjaWZpZWQgKi8KIAlpZiAoY29ubikKLQkJQUgtPmNv bm5DYW5jZWwgPSBQUWdldENhbmNlbChjb25uKTsKKwkJQUgtPmNhbmNlbENvbm4gPSBQUWNhbmNl bENyZWF0ZShjb25uKTsKIAogCS8qCiAJICogT24gVW5peCwgdGhlcmUncyBvbmx5IGV2ZXIgb25l IGFjdGl2ZSBBcmNoaXZlSGFuZGxlIHBlciBwcm9jZXNzLCBzbyB3ZQpAQCAtNzc2LDQ5ICs3ODAs MzUgQEAgc2V0X2FyY2hpdmVfY2FuY2VsX2luZm8oQXJjaGl2ZUhhbmRsZSAqQUgsIFBHY29ubiAq Y29ubikKIAkJc2lnbmFsX2luZm8ubXlBSCA9IEFIOwogI2VuZGlmCiAKLSNpZmRlZiBXSU4zMgot CUxlYXZlQ3JpdGljYWxTZWN0aW9uKCZzaWduYWxfaW5mb19sb2NrKTsKLSNlbmRpZgorCXB0aHJl YWRfbXV0ZXhfdW5sb2NrKCZzaWduYWxfaW5mb19sb2NrKTsKIH0KIAogLyoKICAqIHNldF9jYW5j ZWxfcHN0YXRlCiAgKgogICogU2V0IHNpZ25hbF9pbmZvLnBzdGF0ZSB0byBwb2ludCB0byB0aGUg c3BlY2lmaWVkIFBhcmFsbGVsU3RhdGUsIGlmIGFueS4KLSAqIFdlIG5lZWQgdGhpcyBtYWlubHkg dG8gaGF2ZSBhbiBpbnRlcmxvY2sgYWdhaW5zdCBXaW5kb3dzIHNpZ25hbCB0aHJlYWQuCisgKiBX ZSBuZWVkIHRoaXMgbWFpbmx5IHRvIGhhdmUgYW4gaW50ZXJsb2NrIGFnYWluc3QgdGhlIGNhbmNl bCBoYW5kbGVyIHRocmVhZC4KICAqLwogc3RhdGljIHZvaWQKIHNldF9jYW5jZWxfcHN0YXRlKFBh cmFsbGVsU3RhdGUgKnBzdGF0ZSkKIHsKLSNpZmRlZiBXSU4zMgotCUVudGVyQ3JpdGljYWxTZWN0 aW9uKCZzaWduYWxfaW5mb19sb2NrKTsKLSNlbmRpZgotCisJcHRocmVhZF9tdXRleF9sb2NrKCZz aWduYWxfaW5mb19sb2NrKTsKIAlzaWduYWxfaW5mby5wc3RhdGUgPSBwc3RhdGU7Ci0KLSNpZmRl ZiBXSU4zMgotCUxlYXZlQ3JpdGljYWxTZWN0aW9uKCZzaWduYWxfaW5mb19sb2NrKTsKLSNlbmRp ZgorCXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZzaWduYWxfaW5mb19sb2NrKTsKIH0KIAogLyoKICAq IHNldF9jYW5jZWxfc2xvdF9hcmNoaXZlCiAgKgogICogU2V0IFBhcmFsbGVsU2xvdCdzIEFIIGZp ZWxkIHRvIHBvaW50IHRvIHRoZSBzcGVjaWZpZWQgYXJjaGl2ZSwgaWYgYW55LgotICogV2UgbmVl ZCB0aGlzIG1haW5seSB0byBoYXZlIGFuIGludGVybG9jayBhZ2FpbnN0IFdpbmRvd3Mgc2lnbmFs IHRocmVhZC4KKyAqIFdlIG5lZWQgdGhpcyBtYWlubHkgdG8gaGF2ZSBhbiBpbnRlcmxvY2sgYWdh aW5zdCB0aGUgY2FuY2VsIGhhbmRsZXIgdGhyZWFkLgogICovCiBzdGF0aWMgdm9pZAogc2V0X2Nh bmNlbF9zbG90X2FyY2hpdmUoUGFyYWxsZWxTbG90ICpzbG90LCBBcmNoaXZlSGFuZGxlICpBSCkK IHsKLSNpZmRlZiBXSU4zMgotCUVudGVyQ3JpdGljYWxTZWN0aW9uKCZzaWduYWxfaW5mb19sb2Nr KTsKLSNlbmRpZgotCisJcHRocmVhZF9tdXRleF9sb2NrKCZzaWduYWxfaW5mb19sb2NrKTsKIAlz bG90LT5BSCA9IEFIOwotCi0jaWZkZWYgV0lOMzIKLQlMZWF2ZUNyaXRpY2FsU2VjdGlvbigmc2ln bmFsX2luZm9fbG9jayk7Ci0jZW5kaWYKKwlwdGhyZWFkX211dGV4X3VubG9jaygmc2lnbmFsX2lu Zm9fbG9jayk7CiB9CiAKIApAQCAtOTMzLDcgKzkyMyw3IEBAIFBhcmFsbGVsQmFja3VwU3RhcnQo QXJjaGl2ZUhhbmRsZSAqQUgpCiAKIAkvKgogCSAqIFRlbXBvcmFyaWx5IGRpc2FibGUgcXVlcnkg Y2FuY2VsbGF0aW9uIG9uIHRoZSBsZWFkZXIgY29ubmVjdGlvbi4gIFRoaXMKLQkgKiBlbnN1cmVz IHRoYXQgY2hpbGQgcHJvY2Vzc2VzIHdvbid0IGluaGVyaXQgdmFsaWQgQUgtPmNvbm5DYW5jZWwK KwkgKiBlbnN1cmVzIHRoYXQgY2hpbGQgcHJvY2Vzc2VzIHdvbid0IGluaGVyaXQgdmFsaWQgQUgt PmNhbmNlbENvbm4KIAkgKiBzZXR0aW5ncyBhbmQgdGh1cyB3b24ndCB0cnkgdG8gaXNzdWUgY2Fu Y2VscyBhZ2FpbnN0IHRoZSBsZWFkZXIncwogCSAqIGNvbm5lY3Rpb24uICBObyBoYXJtIGlzIGRv bmUgaWYgd2UgZmFpbCB3aGlsZSBpdCdzIGRpc2FibGVkLCBiZWNhdXNlCiAJICogdGhlIGxlYWRl ciBjb25uZWN0aW9uIGlzIGlkbGUgYXQgdGhpcyBwb2ludCBhbnl3YXkuCkBAIC05OTEsNiArOTgx LDE3IEBAIFBhcmFsbGVsQmFja3VwU3RhcnQoQXJjaGl2ZUhhbmRsZSAqQUgpCiAJCQkvKiBpbnN0 cnVjdCBzaWduYWwgaGFuZGxlciB0aGF0IHdlJ3JlIGluIGEgd29ya2VyIG5vdyAqLwogCQkJc2ln bmFsX2luZm8uYW1fd29ya2VyID0gdHJ1ZTsKIAorCQkJLyoKKwkJCSAqIFJlc2V0IGNhbmNlbCBo YW5kbGVyIHN0YXRlIHNvIHRoYXQgdGhlIHdvcmtlciB3aWxsIHNldCB1cCBpdHMKKwkJCSAqIG93 biBjYW5jZWwgdGhyZWFkIHdoZW4gaXQgY2FsbHMgc2V0X2FyY2hpdmVfY2FuY2VsX2luZm8oKS4K KwkJCSAqIFRocmVhZHMgZG9uJ3Qgc3Vydml2ZSBmb3JrKCksIHNvIHdlIGNhbid0IHVzZSB0aGUg bGVhZGVyJ3MuCisJCQkgKiBBbHNvIGNsb3NlIHRoZSBpbmhlcml0ZWQgcGlwZSBmZHMuCisJCQkg Ki8KKwkJCXNpZ25hbF9pbmZvLmhhbmRsZXJfc2V0ID0gZmFsc2U7CisJCQljbG9zZShjYW5jZWxf cGlwZVswXSk7CisJCQljbG9zZShjYW5jZWxfcGlwZVsxXSk7CisJCQljYW5jZWxfcGlwZVswXSA9 IGNhbmNlbF9waXBlWzFdID0gLTE7CisKIAkJCS8qIGNsb3NlIHJlYWQgZW5kIG9mIFdvcmtlciAt PiBMZWFkZXIgKi8KIAkJCWNsb3Nlc29ja2V0KHBpcGVXTVtQSVBFX1JFQURdKTsKIAkJCS8qIGNs b3NlIHdyaXRlIGVuZCBvZiBMZWFkZXIgLT4gV29ya2VyICovCkBAIC0xNDA3LDggKzE0MDgsMTgg QEAgTGlzdGVuVG9Xb3JrZXJzKEFyY2hpdmVIYW5kbGUgKkFILCBQYXJhbGxlbFN0YXRlICpwc3Rh dGUsIGJvb2wgZG9fd2FpdCkKIAogCWlmICghbXNnKQogCXsKLQkJLyogSWYgZG9fd2FpdCBpcyB0 cnVlLCB3ZSBtdXN0IGhhdmUgZGV0ZWN0ZWQgRU9GIG9uIHNvbWUgc29ja2V0ICovCi0JCWlmIChk b193YWl0KQorCQkvKgorCQkgKiBJZiBkb193YWl0IGlzIHRydWUsIHdlIG11c3QgaGF2ZSBkZXRl Y3RlZCBFT0Ygb24gc29tZSBzb2NrZXQuIElmCisJCSAqIGl0J3MgZHVlIHRvIGEgY2FuY2VsIHJl cXVlc3QsIHRoYXQncyBleHBlY3RlZCwgb3RoZXJ3aXNlIGl0J3MgYQorCQkgKiBwcm9ibGVtLgor CQkgKi8KKwkJYm9vbAkJY2FuY2VsX3JlcXVlc3RlZDsKKworCQlwdGhyZWFkX211dGV4X2xvY2so JnNpZ25hbF9pbmZvX2xvY2spOworCQljYW5jZWxfcmVxdWVzdGVkID0gc2lnbmFsX2luZm8uY2Fu Y2VsX3JlcXVlc3RlZDsKKwkJcHRocmVhZF9tdXRleF91bmxvY2soJnNpZ25hbF9pbmZvX2xvY2sp OworCisJCWlmIChkb193YWl0ICYmICFjYW5jZWxfcmVxdWVzdGVkKQogCQkJcGdfZmF0YWwoImEg d29ya2VyIHByb2Nlc3MgZGllZCB1bmV4cGVjdGVkbHkiKTsKIAkJcmV0dXJuIGZhbHNlOwogCX0K ZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuYyBiL3NyYy9i aW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuYwppbmRleCA0YTYzZjczOTJhZS4uNGYwMGMz ZjAyMGIgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuYwor KysgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMKQEAgLTUxNjEsNyArNTE2 MSw3IEBAIENsb25lQXJjaGl2ZShBcmNoaXZlSGFuZGxlICpBSCkKIAogCS8qIFRoZSBjbG9uZSB3 aWxsIGhhdmUgaXRzIG93biBjb25uZWN0aW9uLCBzbyBkaXNyZWdhcmQgY29ubmVjdGlvbiBzdGF0 ZSAqLwogCWNsb25lLT5jb25uZWN0aW9uID0gTlVMTDsKLQljbG9uZS0+Y29ubkNhbmNlbCA9IE5V TEw7CisJY2xvbmUtPmNhbmNlbENvbm4gPSBOVUxMOwogCWNsb25lLT5jdXJyVXNlciA9IE5VTEw7 CiAJY2xvbmUtPmN1cnJTY2hlbWEgPSBOVUxMOwogCWNsb25lLT5jdXJyVGFibGVBbSA9IE5VTEw7 CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmggYi9zcmMv YmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmgKaW5kZXggMzI1YjUzZmM5YmQuLmY3YTI2 MDY4M2RiIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmgK KysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5oCkBAIC0yODgsOCArMjg4 LDEyIEBAIHN0cnVjdCBfYXJjaGl2ZUhhbmRsZQogCWNoYXIJICAgKnNhdmVkUGFzc3dvcmQ7CS8q IHBhc3N3b3JkIGZvciByb3B0LT51c2VybmFtZSwgaWYga25vd24gKi8KIAljaGFyCSAgICp1c2Vf cm9sZTsKIAlQR2Nvbm4JICAgKmNvbm5lY3Rpb247Ci0JLyogSWYgY29ubkNhbmNlbCBpc24ndCBO VUxMLCBTSUdJTlQgaGFuZGxlciB3aWxsIHNlbmQgYSBjYW5jZWwgKi8KLQlQR2NhbmNlbCAgICp2 b2xhdGlsZSBjb25uQ2FuY2VsOworCisJLyoKKwkgKiBJZiBjb25uQ2FuY2VsIGlzbid0IE5VTEws IFNJR0lOVCBoYW5kbGVyIHdpbGwgdHJpZ2dlciB0aGUgY2FuY2VsIHRocmVhZAorCSAqIHNlbmQg YSBjYW5jZWwuCisJICovCisJUEdjYW5jZWxDb25uICpjYW5jZWxDb25uOwogCiAJaW50CQkJY29u bmVjdFRvREI7CS8qIEZsYWcgdG8gaW5kaWNhdGUgaWYgZGlyZWN0IERCIGNvbm5lY3Rpb24gaXMK IAkJCQkJCQkJICogcmVxdWlyZWQgKi8KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19i YWNrdXBfZGIuYyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfZGIuYwppbmRleCA1YzM0OTI3 OWJlYi4uMGNjMjlhOGFhNzAgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBf ZGIuYworKysgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2RiLmMKQEAgLTg0LDcgKzg0LDcg QEAgUmVjb25uZWN0VG9TZXJ2ZXIoQXJjaGl2ZUhhbmRsZSAqQUgsIGNvbnN0IGNoYXIgKmRibmFt ZSkKIAogCS8qCiAJICogTm90ZTogd2Ugd2FudCB0byBlc3RhYmxpc2ggdGhlIG5ldyBjb25uZWN0 aW9uLCBhbmQgaW4gcGFydGljdWxhciB1cGRhdGUKLQkgKiBBcmNoaXZlSGFuZGxlJ3MgY29ubkNh bmNlbCwgYmVmb3JlIGNsb3Npbmcgb2xkIGNvbm5lY3Rpb24uICBPdGhlcndpc2UKKwkgKiBBcmNo aXZlSGFuZGxlJ3MgY2FuY2VsQ29ubiwgYmVmb3JlIGNsb3Npbmcgb2xkIGNvbm5lY3Rpb24uICBP dGhlcndpc2UKIAkgKiBhbiBpbGwtdGltZWQgU0lHSU5UIGNvdWxkIHRyeSB0byBhY2Nlc3MgYSBk ZWFkIGNvbm5lY3Rpb24uCiAJICovCiAJQUgtPmNvbm5lY3Rpb24gPSBOVUxMOwkJLyogZG9kZ2Ug ZXJyb3IgY2hlY2sgaW4gQ29ubmVjdERhdGFiYXNlQWh4ICovCkBAIC0xNjQsMTIgKzE2NCwxMSBA QCB2b2lkCiBEaXNjb25uZWN0RGF0YWJhc2UoQXJjaGl2ZSAqQUhYKQogewogCUFyY2hpdmVIYW5k bGUgKkFIID0gKEFyY2hpdmVIYW5kbGUgKikgQUhYOwotCWNoYXIJCWVycmJ1ZlsxXTsKIAogCWlm ICghQUgtPmNvbm5lY3Rpb24pCiAJCXJldHVybjsKIAotCWlmIChBSC0+Y29ubkNhbmNlbCkKKwlp ZiAoQUgtPmNhbmNlbENvbm4pCiAJewogCQkvKgogCQkgKiBJZiB3ZSBoYXZlIGFuIGFjdGl2ZSBx dWVyeSwgc2VuZCBhIGNhbmNlbCBiZWZvcmUgY2xvc2luZywgaWdub3JpbmcKQEAgLTE3Nyw3ICsx NzYsNyBAQCBEaXNjb25uZWN0RGF0YWJhc2UoQXJjaGl2ZSAqQUhYKQogCQkgKiBoZWxwZnVsIGR1 cmluZyBwZ19mYXRhbCgpLgogCQkgKi8KIAkJaWYgKFBRdHJhbnNhY3Rpb25TdGF0dXMoQUgtPmNv bm5lY3Rpb24pID09IFBRVFJBTlNfQUNUSVZFKQotCQkJKHZvaWQpIFBRY2FuY2VsKEFILT5jb25u Q2FuY2VsLCBlcnJidWYsIHNpemVvZihlcnJidWYpKTsKKwkJCSh2b2lkKSBQUWNhbmNlbEJsb2Nr aW5nKEFILT5jYW5jZWxDb25uKTsKIAogCQkvKgogCQkgKiBQcmV2ZW50IHNpZ25hbCBoYW5kbGVy IGZyb20gc2VuZGluZyBhIGNhbmNlbCBhZnRlciB0aGlzLgpkaWZmIC0tZ2l0IGEvc3JjL2ZlX3V0 aWxzL01ha2VmaWxlIGIvc3JjL2ZlX3V0aWxzL01ha2VmaWxlCmluZGV4IGI5ZmQ1NjZmZjg3Li5l ZWUwODRlOGVkMCAxMDA2NDQKLS0tIGEvc3JjL2ZlX3V0aWxzL01ha2VmaWxlCisrKyBiL3NyYy9m ZV91dGlscy9NYWtlZmlsZQpAQCAtMTcsNyArMTcsNyBAQCBzdWJkaXIgPSBzcmMvZmVfdXRpbHMK IHRvcF9idWlsZGRpciA9IC4uLy4uCiBpbmNsdWRlICQodG9wX2J1aWxkZGlyKS9zcmMvTWFrZWZp bGUuZ2xvYmFsCiAKLW92ZXJyaWRlIENQUEZMQUdTIDo9IC1ERlJPTlRFTkQgLUkkKGxpYnBxX3Ny Y2RpcikgJChDUFBGTEFHUykKK292ZXJyaWRlIENQUEZMQUdTIDo9IC1ERlJPTlRFTkQgLUkkKGxp YnBxX3NyY2RpcikgLUkkKHRvcF9zcmNkaXIpL3NyYy9wb3J0ICQoQ1BQRkxBR1MpCiAKIE9CSlMg PSBcCiAJYXJjaGl2ZS5vIFwKZGlmZiAtLWdpdCBhL3NyYy9mZV91dGlscy9jYW5jZWwuYyBiL3Ny Yy9mZV91dGlscy9jYW5jZWwuYwppbmRleCBmNDM0NzE4ZWFjOC4uYzFjNWI3MDU1YTggMTAwNjQ0 Ci0tLSBhL3NyYy9mZV91dGlscy9jYW5jZWwuYworKysgYi9zcmMvZmVfdXRpbHMvY2FuY2VsLmMK QEAgLTE2LDkgKzE2LDE3IEBACiAKICNpbmNsdWRlICJwb3N0Z3Jlc19mZS5oIgogCisjaW5jbHVk ZSA8c2lnbmFsLmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAKKyNpZmRlZiBXSU4zMgorI2luY2x1 ZGUgInB0aHJlYWQtd2luMzIuaCIKKyNlbHNlCisjaW5jbHVkZSA8cHRocmVhZC5oPgorI2VuZGlm CisKICNpbmNsdWRlICJjb21tb24vY29ubmVjdC5oIgorI2luY2x1ZGUgImNvbW1vbi9sb2dnaW5n LmgiCiAjaW5jbHVkZSAiZmVfdXRpbHMvY2FuY2VsLmgiCiAjaW5jbHVkZSAiZmVfdXRpbHMvc3Ry aW5nX3V0aWxzLmgiCiAKQEAgLTM2LDExICs0NCwyMiBAQAogCQkodm9pZCkgcmNfOyBcCiAJfSB3 aGlsZSAoMCkKIAorCisvKgorICogQ2FuY2VsIGNvbm5lY3Rpb24gdGhhdCBzaG91bGQgYmUgdXNl ZCB0byBzZW5kIGNhbmNlbCByZXF1ZXN0cy4KKyAqLworc3RhdGljIFBHY2FuY2VsQ29ubiAqY2Fu Y2VsQ29ubiA9IE5VTEw7CisKKy8qCisgKiBHZW5lcmF0aW9uIGNvdW50ZXIgZm9yIGNhbmNlbENv bm4uIEluY3JlbWVudGVkIGVhY2ggdGltZSBjYW5jZWxDb25uIGlzCisgKiBjaGFuZ2VkLiBVc2Vk IHRvIGRldGVjdCBpZiBjYW5jZWxDb25uIHdhcyByZXBsYWNlZCB3aGlsZSB3ZSB3ZXJlIHVzaW5n IGl0LgorICovCitzdGF0aWMgdWludDY0IGNhbmNlbENvbm5HZW5lcmF0aW9uID0gMDsKKwogLyoK LSAqIENvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gbmVlZGVkIHRvIGNhbmNlbCBhIHF1ZXJ5 IGlzc3VlZCBmcm9tCi0gKiBhIGRhdGFiYXNlIGNvbm5lY3Rpb24gdG8gdGhlIGJhY2tlbmQuCisg KiBNdXRleCBwcm90ZWN0aW5nIGNhbmNlbENvbm4gYW5kIGNhbmNlbENvbm5HZW5lcmF0aW9uLgog ICovCi1zdGF0aWMgUEdjYW5jZWwgKnZvbGF0aWxlIGNhbmNlbENvbm4gPSBOVUxMOworc3RhdGlj IHB0aHJlYWRfbXV0ZXhfdCBjYW5jZWxDb25uTG9jayA9IFBUSFJFQURfTVVURVhfSU5JVElBTEla RVI7CiAKIC8qCiAgKiBQcmVkZXRlcm1pbmVkIGxvY2FsaXplZCBlcnJvciBzdHJpbmdzIC0tLSBu ZWVkZWQgdG8gYXZvaWQgdHJ5aW5nCkBAIC01OCwxODYgKzc3LDI0MSBAQCBzdGF0aWMgY29uc3Qg Y2hhciAqY2FuY2VsX25vdF9zZW50X21zZyA9IE5VTEw7CiAgKi8KIHZvbGF0aWxlIHNpZ19hdG9t aWNfdCBDYW5jZWxSZXF1ZXN0ZWQgPSBmYWxzZTsKIAotI2lmZGVmIFdJTjMyCi1zdGF0aWMgQ1JJ VElDQUxfU0VDVElPTiBjYW5jZWxDb25uTG9jazsKLSNlbmRpZgotCiAvKgogICogQWRkaXRpb25h bCBjYWxsYmFjayBmb3IgY2FuY2VsbGF0aW9ucy4KICAqLwogc3RhdGljIHZvaWQgKCpjYW5jZWxf Y2FsbGJhY2spICh2b2lkKSA9IE5VTEw7CiAKKyNpZm5kZWYgV0lOMzIKKy8qCisgKiBPbiBVbml4 LCB3ZSB1c2UgYSBzZWxmLXBpcGUgdG8gd2FrZSB1cCB0aGUgY2FuY2VsIHRocmVhZCBmcm9tIHRo ZSBzaWduYWwKKyAqIGhhbmRsZXIsIHNpbmNlIHB0aHJlYWRfY29uZF9zaWduYWwoKSBpcyBub3Qg YXN5bmMtc2lnbmFsLXNhZmUuCisgKi8KK3N0YXRpYyBpbnQJY2FuY2VsX3BpcGVbMl0gPSB7LTEs IC0xfTsKK3N0YXRpYyBwdGhyZWFkX3QgY2FuY2VsX3RocmVhZDsKKyNlbmRpZgorCiAKIC8qCi0g KiBTZXRDYW5jZWxDb25uCi0gKgotICogU2V0IGNhbmNlbENvbm4gdG8gcG9pbnQgdG8gdGhlIGN1 cnJlbnQgZGF0YWJhc2UgY29ubmVjdGlvbi4KKyAqIFNlbmQgYSBjYW5jZWwgcmVxdWVzdCB0byB0 aGUgY29ubmVjdGlvbiwgaWYgb25lIGlzIHNldC4KICAqLwotdm9pZAotU2V0Q2FuY2VsQ29ubihQ R2Nvbm4gKmNvbm4pCitzdGF0aWMgdm9pZAorU2VuZENhbmNlbFJlcXVlc3Qodm9pZCkKIHsKLQlQ R2NhbmNlbCAgICpvbGRDYW5jZWxDb25uOworCVBHY2FuY2VsQ29ubiAqY2M7CisJdWludDY0CQln ZW5lcmF0aW9uOworCWJvb2wJCXB1dENvbm5lY3Rpb25CYWNrID0gZmFsc2U7CisKKwkvKgorCSAq IFdlIHRha2UgdGhlIGNhbmNlbCBjb25uZWN0aW9uIG91dCBvZiB0aGUgZ2xvYmFsLiBUaGlzIGVu c3VyZXMgdGhhdAorCSAqIFJlc2V0Q2FuY2VsQ29ubiBvciBTZXRDYW5jZWxDb25uIHdvbid0IGZy ZWUgaXQgd2hpbGUgd2UncmUgdXNpbmcgaXQuCisJICovCisJcHRocmVhZF9tdXRleF9sb2NrKCZj YW5jZWxDb25uTG9jayk7CisJY2MgPSBjYW5jZWxDb25uOworCWdlbmVyYXRpb24gPSBjYW5jZWxD b25uR2VuZXJhdGlvbjsKKwljYW5jZWxDb25uID0gTlVMTDsKKwlwdGhyZWFkX211dGV4X3VubG9j aygmY2FuY2VsQ29ubkxvY2spOwogCi0jaWZkZWYgV0lOMzIKLQlFbnRlckNyaXRpY2FsU2VjdGlv bigmY2FuY2VsQ29ubkxvY2spOwotI2VuZGlmCisJaWYgKGNjID09IE5VTEwpCisJCXJldHVybjsK IAotCS8qIEZyZWUgdGhlIG9sZCBvbmUgaWYgd2UgaGF2ZSBvbmUgKi8KLQlvbGRDYW5jZWxDb25u ID0gY2FuY2VsQ29ubjsKKwl3cml0ZV9zdGRlcnIoY2FuY2VsX3NlbnRfbXNnKTsKIAotCS8qIGJl IHN1cmUgaGFuZGxlX3NpZ2ludCBkb2Vzbid0IHVzZSBwb2ludGVyIHdoaWxlIGZyZWVpbmcgKi8K LQljYW5jZWxDb25uID0gTlVMTDsKKwlpZiAoIVBRY2FuY2VsQmxvY2tpbmcoY2MpKQorCXsKKwkJ Y2hhcgkgICAqZXJybXNnID0gUFFjYW5jZWxFcnJvck1lc3NhZ2UoY2MpOwogCi0JaWYgKG9sZENh bmNlbENvbm4gIT0gTlVMTCkKLQkJUFFmcmVlQ2FuY2VsKG9sZENhbmNlbENvbm4pOworCQl3cml0 ZV9zdGRlcnIoY2FuY2VsX25vdF9zZW50X21zZyk7CisJCWlmIChlcnJtc2cpCisJCQl3cml0ZV9z dGRlcnIoZXJybXNnKTsKKwl9CisJLyogUmVzZXQgZm9yIHBvc3NpYmxlIHJldXNlICovCisJUFFj YW5jZWxSZXNldChjYyk7CisKKwkvKgorCSAqIFB1dCB0aGUgY2FuY2VsIGNvbm5lY3Rpb24gYmFj ayBpZiBpdCB3YXNuJ3QgcmVwbGFjZWQgd2hpbGUgd2Ugd2VyZQorCSAqIHVzaW5nIGl0LgorCSAq LworCXB0aHJlYWRfbXV0ZXhfbG9jaygmY2FuY2VsQ29ubkxvY2spOworCWlmIChjYW5jZWxDb25u R2VuZXJhdGlvbiA9PSBnZW5lcmF0aW9uKQorCXsKKwkJLyogR2VuZXJhdGlvbiB1bmNoYW5nZWQs IHB1dCBpdCBiYWNrIGZvciByZXVzZSAqLworCQljYW5jZWxDb25uID0gY2M7CisJCXB1dENvbm5l Y3Rpb25CYWNrID0gdHJ1ZTsKKwl9CisJcHRocmVhZF9tdXRleF91bmxvY2soJmNhbmNlbENvbm5M b2NrKTsKIAotCWNhbmNlbENvbm4gPSBQUWdldENhbmNlbChjb25uKTsKKwkvKiBJZiBpdCB3YXMg cmVwbGFjZWQsIHdlIGZyZWUgaXQsIGJlY2F1c2Ugd2Ugd2VyZSB0aGUgbGFzdCB1c2VyICovCisJ aWYgKCFwdXRDb25uZWN0aW9uQmFjaykKKwkJUFFjYW5jZWxGaW5pc2goY2MpOworfQogCi0jaWZk ZWYgV0lOMzIKLQlMZWF2ZUNyaXRpY2FsU2VjdGlvbigmY2FuY2VsQ29ubkxvY2spOwotI2VuZGlm CisKKy8qCisgKiBIZWxwZXIgdG8gcmVwbGFjZSBjYW5jZWxDb25uIHdpdGggYSBuZXcgdmFsdWUu CisgKi8KK3N0YXRpYyB2b2lkCitTZXRDYW5jZWxDb25uSW50ZXJuYWwoUEdjYW5jZWxDb25uICpu ZXdDYW5jZWxDb25uKQoreworCVBHY2FuY2VsQ29ubiAqb2xkQ2FuY2VsQ29ubjsKKworCXB0aHJl YWRfbXV0ZXhfbG9jaygmY2FuY2VsQ29ubkxvY2spOworCW9sZENhbmNlbENvbm4gPSBjYW5jZWxD b25uOworCWNhbmNlbENvbm4gPSBuZXdDYW5jZWxDb25uOworCWNhbmNlbENvbm5HZW5lcmF0aW9u Kys7CisJcHRocmVhZF9tdXRleF91bmxvY2soJmNhbmNlbENvbm5Mb2NrKTsKKworCWlmIChvbGRD YW5jZWxDb25uICE9IE5VTEwpCisJCVBRY2FuY2VsRmluaXNoKG9sZENhbmNlbENvbm4pOworfQor CisvKgorICogU2V0Q2FuY2VsQ29ubgorICoKKyAqIFNldCBjYW5jZWxDb25uIHRvIHBvaW50IHRv IGEgY2FuY2VsIGNvbm5lY3Rpb24gZm9yIHRoZSBnaXZlbiBkYXRhYmFzZQorICogY29ubmVjdGlv bi4gVGhpcyBjcmVhdGVzIGEgbmV3IFBHY2FuY2VsQ29ubiB0aGF0IGNhbiBiZSB1c2VkIHRvIHNl bmQKKyAqIGNhbmNlbCByZXF1ZXN0cy4KKyAqLwordm9pZAorU2V0Q2FuY2VsQ29ubihQR2Nvbm4g KmNvbm4pCit7CisJU2V0Q2FuY2VsQ29ubkludGVybmFsKFBRY2FuY2VsQ3JlYXRlKGNvbm4pKTsK IH0KIAogLyoKICAqIFJlc2V0Q2FuY2VsQ29ubgogICoKLSAqIEZyZWUgdGhlIGN1cnJlbnQgY2Fu Y2VsIGNvbm5lY3Rpb24sIGlmIGFueSwgYW5kIHNldCB0byBOVUxMLgorICogQ2xlYXIgY2FuY2Vs Q29ubiwgcHJldmVudGluZyBhbnkgcGVuZGluZyBjYW5jZWwgZnJvbSBiZWluZyBzZW50LgogICov CiB2b2lkCiBSZXNldENhbmNlbENvbm4odm9pZCkKIHsKLQlQR2NhbmNlbCAgICpvbGRDYW5jZWxD b25uOworCVNldENhbmNlbENvbm5JbnRlcm5hbChOVUxMKTsKK30KIAotI2lmZGVmIFdJTjMyCi0J RW50ZXJDcml0aWNhbFNlY3Rpb24oJmNhbmNlbENvbm5Mb2NrKTsKLSNlbmRpZgogCi0Jb2xkQ2Fu Y2VsQ29ubiA9IGNhbmNlbENvbm47CisjaWZkZWYgV0lOMzIKKy8qCisgKiBDb25zb2xlIGNvbnRy b2wgaGFuZGxlciBmb3IgV2luZG93cy4KKyAqCisgKiBUaGlzIHJ1bnMgaW4gYSBzZXBhcmF0ZSB0 aHJlYWQgY3JlYXRlZCBieSB0aGUgT1MsIHNvIHdlIGNhbiBzYWZlbHkgY2FsbAorICogdGhlIGJs b2NraW5nIGNhbmNlbCBBUEkgZGlyZWN0bHkuCisgKi8KK3N0YXRpYyBCT09MIFdJTkFQSQorY29u c29sZUhhbmRsZXIoRFdPUkQgZHdDdHJsVHlwZSkKK3sKKwlpZiAoZHdDdHJsVHlwZSA9PSBDVFJM X0NfRVZFTlQgfHwKKwkJZHdDdHJsVHlwZSA9PSBDVFJMX0JSRUFLX0VWRU5UKQorCXsKKwkJQ2Fu Y2VsUmVxdWVzdGVkID0gdHJ1ZTsKIAotCS8qIGJlIHN1cmUgaGFuZGxlX3NpZ2ludCBkb2Vzbid0 IHVzZSBwb2ludGVyIHdoaWxlIGZyZWVpbmcgKi8KLQljYW5jZWxDb25uID0gTlVMTDsKKwkJaWYg KGNhbmNlbF9jYWxsYmFjayAhPSBOVUxMKQorCQkJY2FuY2VsX2NhbGxiYWNrKCk7CiAKLQlpZiAo b2xkQ2FuY2VsQ29ubiAhPSBOVUxMKQotCQlQUWZyZWVDYW5jZWwob2xkQ2FuY2VsQ29ubik7CisJ CVNlbmRDYW5jZWxSZXF1ZXN0KCk7CiAKLSNpZmRlZiBXSU4zMgotCUxlYXZlQ3JpdGljYWxTZWN0 aW9uKCZjYW5jZWxDb25uTG9jayk7Ci0jZW5kaWYKKwkJcmV0dXJuIFRSVUU7CisJfQorCWVsc2UK KwkJLyogUmV0dXJuIEZBTFNFIGZvciBhbnkgc2lnbmFscyBub3QgYmVpbmcgaGFuZGxlZCAqLwor CQlyZXR1cm4gRkFMU0U7CiB9CiAKKyNlbHNlCQkJCQkJCS8qICFXSU4zMiAqLwogCiAvKgotICog Q29kZSB0byBzdXBwb3J0IHF1ZXJ5IGNhbmNlbGxhdGlvbgotICoKLSAqIE5vdGUgdGhhdCBzZW5k aW5nIHRoZSBjYW5jZWwgZGlyZWN0bHkgZnJvbSB0aGUgc2lnbmFsIGhhbmRsZXIgaXMgc2FmZQot ICogYmVjYXVzZSBQUWNhbmNlbCgpIGlzIHdyaXR0ZW4gdG8gbWFrZSBpdCBzby4gIFdlIHVzZSB3 cml0ZSgpIHRvIHJlcG9ydAotICogdG8gc3RkZXJyIGJlY2F1c2UgaXQncyBiZXR0ZXIgdG8gdXNl IHNpbXBsZSBmYWNpbGl0aWVzIGluIGEgc2lnbmFsCi0gKiBoYW5kbGVyLgotICoKLSAqIE9uIFdp bmRvd3MsIHRoZSBzaWduYWwgY2FuY2VsaW5nIGhhcHBlbnMgb24gYSBzZXBhcmF0ZSB0aHJlYWQs IGJlY2F1c2UKLSAqIHRoYXQncyBob3cgU2V0Q29uc29sZUN0cmxIYW5kbGVyIHdvcmtzLiAgVGhl IFBRY2FuY2VsIGZ1bmN0aW9uIGlzIHNhZmUKLSAqIGZvciB0aGlzICh1bmxpa2UgUFFyZXF1ZXN0 Q2FuY2VsKS4gIEhvd2V2ZXIsIGEgQ1JJVElDQUxfU0VDVElPTiBpcyByZXF1aXJlZAotICogdG8g cHJvdGVjdCB0aGUgUEdjYW5jZWwgc3RydWN0dXJlIGFnYWluc3QgYmVpbmcgY2hhbmdlZCB3aGls ZSB0aGUgc2lnbmFsCi0gKiB0aHJlYWQgaXMgdXNpbmcgaXQuCisgKiBDYW5jZWwgdGhyZWFkIG1h aW4gZnVuY3Rpb24uIFdhaXRzIGZvciB0aGUgc2lnbmFsIGhhbmRsZXIgdG8gd3JpdGUgdG8gdGhl CisgKiBwaXBlLCB0aGVuIHNlbmRzIGEgY2FuY2VsIHJlcXVlc3QuCiAgKi8KK3N0YXRpYyB2b2lk ICoKK2NhbmNlbF90aHJlYWRfbWFpbih2b2lkICphcmcpCit7CisJZm9yICg7OykKKwl7CisJCWNo YXIJCWJ1ZlsxNl07CisJCXNzaXplX3QJCXJjOwogCi0jaWZuZGVmIFdJTjMyCisJCS8qIFdhaXQg Zm9yIHNpZ25hbCBoYW5kbGVyIHRvIHdha2UgdXMgdXAgKi8KKwkJcmMgPSByZWFkKGNhbmNlbF9w aXBlWzBdLCBidWYsIHNpemVvZihidWYpKTsKKwkJaWYgKHJjIDw9IDApCisJCXsKKwkJCWlmIChl cnJubyA9PSBFSU5UUikKKwkJCQljb250aW51ZTsKKwkJCS8qIFBpcGUgY2xvc2VkIG9yIGVycm9y IC0gZXhpdCB0aHJlYWQgKi8KKwkJCWJyZWFrOworCQl9CisKKwkJU2VuZENhbmNlbFJlcXVlc3Qo KTsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KIAogLyoKLSAqIGhhbmRsZV9zaWdpbnQKLSAqCi0g KiBIYW5kbGUgaW50ZXJydXB0IHNpZ25hbHMgYnkgY2FuY2VsaW5nIHRoZSBjdXJyZW50IGNvbW1h bmQsIGlmIGNhbmNlbENvbm4KLSAqIGlzIHNldC4KKyAqIFNpZ25hbCBoYW5kbGVyIGZvciBTSUdJ TlQuIFNldHMgQ2FuY2VsUmVxdWVzdGVkIGFuZCB3YWtlcyB1cCB0aGUgY2FuY2VsCisgKiB0aHJl YWQgYnkgd3JpdGluZyB0byB0aGUgcGlwZS4KICAqLwogc3RhdGljIHZvaWQKIGhhbmRsZV9zaWdp bnQoU0lHTkFMX0FSR1MpCiB7Ci0JY2hhcgkJZXJyYnVmWzI1Nl07CisJaW50CQkJc2F2ZV9lcnJu byA9IGVycm5vOworCWNoYXIJCWMgPSAxOwogCiAJQ2FuY2VsUmVxdWVzdGVkID0gdHJ1ZTsKIAog CWlmIChjYW5jZWxfY2FsbGJhY2sgIT0gTlVMTCkKIAkJY2FuY2VsX2NhbGxiYWNrKCk7CiAKLQkv KiBTZW5kIFF1ZXJ5Q2FuY2VsIGlmIHdlIGFyZSBwcm9jZXNzaW5nIGEgZGF0YWJhc2UgcXVlcnkg Ki8KLQlpZiAoY2FuY2VsQ29ubiAhPSBOVUxMKQotCXsKLQkJaWYgKFBRY2FuY2VsKGNhbmNlbENv bm4sIGVycmJ1Ziwgc2l6ZW9mKGVycmJ1ZikpKQotCQl7Ci0JCQl3cml0ZV9zdGRlcnIoY2FuY2Vs X3NlbnRfbXNnKTsKLQkJfQotCQllbHNlCi0JCXsKLQkJCXdyaXRlX3N0ZGVycihjYW5jZWxfbm90 X3NlbnRfbXNnKTsKLQkJCXdyaXRlX3N0ZGVycihlcnJidWYpOwotCQl9Ci0JfQorCS8qIFdha2Ug dXAgdGhlIGNhbmNlbCB0aHJlYWQgLSB3cml0ZSgpIGlzIGFzeW5jLXNpZ25hbC1zYWZlICovCisJ aWYgKGNhbmNlbF9waXBlWzFdID49IDApCisJCSh2b2lkKSB3cml0ZShjYW5jZWxfcGlwZVsxXSwg JmMsIDEpOworCisJZXJybm8gPSBzYXZlX2Vycm5vOwogfQogCisjZW5kaWYJCQkJCQkJLyogV0lO MzIgKi8KKworCiAvKgogICogc2V0dXBfY2FuY2VsX2hhbmRsZXIKICAqCi0gKiBSZWdpc3RlciBx dWVyeSBjYW5jZWxsYXRpb24gY2FsbGJhY2sgZm9yIFNJR0lOVC4KKyAqIFNldCB1cCBoYW5kbGVy IGZvciBTSUdJTlQgKFVuaXgpIG9yIGNvbnNvbGUgZXZlbnRzIChXaW5kb3dzKSB0byBzZW5kIGEK KyAqIGNhbmNlbCByZXF1ZXN0IHRvIHRoZSBzZXJ2ZXIuIEFsc28gc2V0cyB1cCB0aGUgaW5mcmFz dHJ1Y3R1cmUgdG8gc2VuZAorICogY2FuY2VsIHJlcXVlc3RzIGFzeW5jaHJvbm91c2x5LgogICov CiB2b2lkCiBzZXR1cF9jYW5jZWxfaGFuZGxlcih2b2lkICgqcXVlcnlfY2FuY2VsX2NhbGxiYWNr KSAodm9pZCkpCiB7CisjaWZuZGVmIFdJTjMyCisJaW50CQkJcmM7CisjZW5kaWYKIAljYW5jZWxf Y2FsbGJhY2sgPSBxdWVyeV9jYW5jZWxfY2FsbGJhY2s7Ci0JY2FuY2VsX3NlbnRfbXNnID0gXygi Q2FuY2VsIHJlcXVlc3Qgc2VudFxuIik7CisJY2FuY2VsX3NlbnRfbXNnID0gXygiU2VuZGluZyBj YW5jZWwgcmVxdWVzdFxuIik7CiAJY2FuY2VsX25vdF9zZW50X21zZyA9IF8oIkNvdWxkIG5vdCBz ZW5kIGNhbmNlbCByZXF1ZXN0OiAiKTsKIAotCXBxc2lnbmFsKFNJR0lOVCwgaGFuZGxlX3NpZ2lu dCk7Ci19Ci0KLSNlbHNlCQkJCQkJCS8qIFdJTjMyICovCi0KLXN0YXRpYyBCT09MIFdJTkFQSQot Y29uc29sZUhhbmRsZXIoRFdPUkQgZHdDdHJsVHlwZSkKLXsKLQljaGFyCQllcnJidWZbMjU2XTsK KyNpZmRlZiBXSU4zMgorCVNldENvbnNvbGVDdHJsSGFuZGxlcihjb25zb2xlSGFuZGxlciwgVFJV RSk7CisjZWxzZQogCi0JaWYgKGR3Q3RybFR5cGUgPT0gQ1RSTF9DX0VWRU5UIHx8Ci0JCWR3Q3Ry bFR5cGUgPT0gQ1RSTF9CUkVBS19FVkVOVCkKKwkvKgorCSAqIFNldCB1cCB0aGUgc2VsZi1waXBl IGZvciBjb21tdW5pY2F0aW9uIGJldHdlZW4gc2lnbmFsIGhhbmRsZXIgYW5kCisJICogY2FuY2Vs IHRocmVhZC4gV2UgdXNlIGEgcGlwZSBiZWNhdXNlIHdyaXRlKCkgaXMgYXN5bmMtc2lnbmFsLXNh ZmUuCisJICovCisJaWYgKHBpcGUoY2FuY2VsX3BpcGUpIDwgMCkKIAl7Ci0JCUNhbmNlbFJlcXVl c3RlZCA9IHRydWU7Ci0KLQkJaWYgKGNhbmNlbF9jYWxsYmFjayAhPSBOVUxMKQotCQkJY2FuY2Vs X2NhbGxiYWNrKCk7Ci0KLQkJLyogU2VuZCBRdWVyeUNhbmNlbCBpZiB3ZSBhcmUgcHJvY2Vzc2lu ZyBhIGRhdGFiYXNlIHF1ZXJ5ICovCi0JCUVudGVyQ3JpdGljYWxTZWN0aW9uKCZjYW5jZWxDb25u TG9jayk7Ci0JCWlmIChjYW5jZWxDb25uICE9IE5VTEwpCi0JCXsKLQkJCWlmIChQUWNhbmNlbChj YW5jZWxDb25uLCBlcnJidWYsIHNpemVvZihlcnJidWYpKSkKLQkJCXsKLQkJCQl3cml0ZV9zdGRl cnIoY2FuY2VsX3NlbnRfbXNnKTsKLQkJCX0KLQkJCWVsc2UKLQkJCXsKLQkJCQl3cml0ZV9zdGRl cnIoY2FuY2VsX25vdF9zZW50X21zZyk7Ci0JCQkJd3JpdGVfc3RkZXJyKGVycmJ1Zik7Ci0JCQl9 Ci0JCX0KLQotCQlMZWF2ZUNyaXRpY2FsU2VjdGlvbigmY2FuY2VsQ29ubkxvY2spOwotCi0JCXJl dHVybiBUUlVFOworCQlwZ19sb2dfZXJyb3IoImNvdWxkIG5vdCBjcmVhdGUgcGlwZSBmb3IgY2Fu Y2VsOiAlbSIpOworCQlleGl0KDEpOwogCX0KLQllbHNlCi0JCS8qIFJldHVybiBGQUxTRSBmb3Ig YW55IHNpZ25hbHMgbm90IGJlaW5nIGhhbmRsZWQgKi8KLQkJcmV0dXJuIEZBTFNFOwotfQogCi12 b2lkCi1zZXR1cF9jYW5jZWxfaGFuZGxlcih2b2lkICgqY2FsbGJhY2spICh2b2lkKSkKLXsKLQlj YW5jZWxfY2FsbGJhY2sgPSBjYWxsYmFjazsKLQljYW5jZWxfc2VudF9tc2cgPSBfKCJDYW5jZWwg cmVxdWVzdCBzZW50XG4iKTsKLQljYW5jZWxfbm90X3NlbnRfbXNnID0gXygiQ291bGQgbm90IHNl bmQgY2FuY2VsIHJlcXVlc3Q6ICIpOworCS8qIFN0YXJ0IHRoZSBjYW5jZWwgdGhyZWFkIGlmIG5v dCBhbHJlYWR5IHJ1bm5pbmcgKi8KIAotCUluaXRpYWxpemVDcml0aWNhbFNlY3Rpb24oJmNhbmNl bENvbm5Mb2NrKTsKKwlyYyA9IHB0aHJlYWRfY3JlYXRlKCZjYW5jZWxfdGhyZWFkLCBOVUxMLCBj YW5jZWxfdGhyZWFkX21haW4sIE5VTEwpOworCWlmIChyYyAhPSAwKQorCXsKKwkJcGdfbG9nX2Vy cm9yKCJjb3VsZCBub3QgY3JlYXRlIGNhbmNlbCB0aHJlYWQ6ICVzIiwgc3RyZXJyb3IocmMpKTsK KwkJZXhpdCgxKTsKKwl9CiAKLQlTZXRDb25zb2xlQ3RybEhhbmRsZXIoY29uc29sZUhhbmRsZXIs IFRSVUUpOworCXBxc2lnbmFsKFNJR0lOVCwgaGFuZGxlX3NpZ2ludCk7CisjZW5kaWYKIH0KLQot I2VuZGlmCQkJCQkJCS8qIFdJTjMyICovCi0tIAoyLjUyLjAKCg== --84474801bac0d4c19e3f64fe96d489dcf64d3294e4a935afd50bd2590437--