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 1w2Rhh-000IUl-0u for pgsql-hackers@arkaria.postgresql.org; Tue, 17 Mar 2026 10:31:13 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w2Rhg-000CRG-0j for pgsql-hackers@arkaria.postgresql.org; Tue, 17 Mar 2026 10:31:12 +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 1w2Rhf-000CR4-1n for pgsql-hackers@lists.postgresql.org; Tue, 17 Mar 2026 10:31:11 +0000 Received: from mail-ed1-x535.google.com ([2a00:1450:4864:20::535]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w2Rha-00000000AUF-0F33 for pgsql-hackers@lists.postgresql.org; Tue, 17 Mar 2026 10:31:10 +0000 Received: by mail-ed1-x535.google.com with SMTP id 4fb4d7f45d1cf-6644a3029b3so6405909a12.0 for ; Tue, 17 Mar 2026 03:31:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=jeltef.nl; s=google; t=1773743466; x=1774348266; darn=lists.postgresql.org; h=in-reply-to:references:mime-version:from:to:subject:cc:message-id :date:from:to:cc:subject:date:message-id:reply-to; bh=v6WuSeA4f8bJJQY6lN7Nw/k+WZCBTxxncWDDGtZnAK8=; b=UrcFQOLtjm3uo9wHttr1tAeZWVCuq+RJ71KIF3Xdnotmwc94uSSlfBayyEK6502i7s hdXzxEMngu/CrRpCNs6wd7Z8xrRm0y3kTJJz8DCPNFcilOGhUvP2Prl4J+SCoszwdjQx WzinMFnPQqhqsLq7aGfd4N/d1GxyHenVg1MyO7kRJdRQMJ8Vwgu+kygXC6YqjIAveDXw BymZbrTipiHVj66hSCEwgfqBUtep818ZhgyT3MWpyc2kHlRiSZ9zKLnRNL/w7ZEhiUBO 9dsXLJztvLrjmFqSKQ+RbU3DhYX+LHOcA5EVoZf+TGFupvomL9XcdgCZufkeuosrpIxU XYXA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1773743466; x=1774348266; h=in-reply-to:references:mime-version:from:to:subject:cc:message-id :date:x-gm-gg:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=v6WuSeA4f8bJJQY6lN7Nw/k+WZCBTxxncWDDGtZnAK8=; b=NpBF80Vuh/eagY0hbxNMBwKJEavzCK3/7umIY4KDgDHUtDan2pJqRkzeBJQ/tFsPlZ DGB/kkF6RFtMFuQmHlBRifUPsWpjiXXAYxauczdmuKFZgMyoKnBcDL0K5KuVB9QFZKpz unbpFJ87/byXuJmGuny0tj+r+j/rNCRoaC1xpc6iwiW/s6FqRYZckD6axRF3DVjrphhe T455cxatbq5zwGtKYOXGyEfIlqQEDEo84Ex846BwjTAAFpdX4+PTjlVr5Dt2vijWaPnV dtD7uAQfxunxM6SbEU+D2fVZjFI+tMFIlChsvbd5nkAj6G2I7MJyGODnviqqasN5CVEh OAwg== X-Gm-Message-State: AOJu0YyMy5nTirKLq4TqG/dXNfHJ+9Rwl+84U3l4qV8Qz9DDPzTDN14+ p/gUxowFmky7IEKqJyAFOZptNPx6WnbrzzKCWKb56bBTo49iy2vf1OJXGLXbbHFANHA= X-Gm-Gg: ATEYQzxTX15NYn5lyZh/oepRnH5bodh1dxQHilRwyoj998ZkRMFFPB6RLNcqqCBRl3w DmbwR5a/0fMRVp6UrigSNMqrrd1urfXF++jhVi99k0rtA8F7Z1jfLlv8qiOk+P9Feif+LMjWMFy A3I7aVu/Fq6cv8wChUHWL4hP2rB91RUNs5p6CqDJRR/+Jf0wSbCFRsGLhq9wXurHHxkwu6ifEdW ZIPrHe8xFCj8Nc6w1EjxkF9gp8RbccV3cGFnp2s/IsroyKiQd9CvTw0t2Vrw9wsYGE9IkDKl/FR QWm5WAOH0g9wlC/IgCePVzKRiXgX/gAMFsoZ6zsznp+rj97k0NEk58GOV2pRjTBhkLkDkwOpa0+ N788xF2Lv3BKhIPMIQa0NuxVeITUdZP54XnUhC1W+06T5SMKjR7JcK1aHIxJxFTskn3qXNR9Pme 2C3aP0asZR2NctYj5xtrelQo/gR7n+sO7NqrvqBGkvgNP2AhYwNi1qcZeGehg= X-Received: by 2002:a05:6402:26d0:b0:665:f13a:9006 with SMTP id 4fb4d7f45d1cf-665f13a9298mr3569210a12.8.1773743465789; Tue, 17 Mar 2026 03:31:05 -0700 (PDT) Received: from localhost (145-53-221-196.fixed.kpn.net. [145.53.221.196]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-665180ddaeasm3462638a12.19.2026.03.17.03.31.04 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 17 Mar 2026 03:31:05 -0700 (PDT) Content-Type: multipart/mixed; boundary=10040660db950fb953ebdc18175e4815e8f8e944d0cfaf7b25853fb674c8 Date: Tue, 17 Mar 2026 11:31:04 +0100 Message-Id: Cc: "PostgreSQL Hackers" , "Alvaro Herrera" , "Jacob Champion" Subject: Re: Don't use the deprecated and insecure PQcancel in our frontend tools anymore To: "Heikki Linnakangas" From: "Jelte Fennema-Nio" MIME-Version: 1.0 References: <88dfe280-ba29-4943-95b8-63abc9f3f771@iki.fi> <9d7ba3ac-d660-483e-8f68-9096a2464e90@iki.fi> In-Reply-To: X-TUID: +Uk5euiaLzfA List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --10040660db950fb953ebdc18175e4815e8f8e944d0cfaf7b25853fb674c8 Content-Type: multipart/alternative; boundary=c3410619cbc9d5f36e7abea47a55601c0965d09420724d84c07345bcae99 --c3410619cbc9d5f36e7abea47a55601c0965d09420724d84c07345bcae99 Content-Transfer-Encoding: quoted-printable Content-Disposition: inline Content-Type: text/plain; charset=UTF-8; format=Flowed On Mon, 16 Mar 2026 at 10:57, Heikki Linnakangas wrote: > +1. With a little extra effort, the cancellation can be made abortable > too, so that you don't need to wait for the TCP timeout. I.e when > ResetCancelConn() is called, the cancellation thread can immediately > call PQcancelReset(). I agree we could do that, but I don't think we should. Then we'd be getting into the exact situation where psql doesn't wait for an already in-flight cancel request to be processed by the server before sending the next query. i.e. while this would be fine if there's a network issue, it would be bad if the server is just slow to respond to the cancel request (e.g. because there's a PgBouncer in the middle that hasn't forwarded the request yet). > One a different topic, is there any guarantee on which thread will > receive the SIGINT? It matters because psql's cancel callback sometimes > calls longjmp(), which assumes that the signal handler is executed in > the main thread. Good point, I had thought about whether this mattered, but hadn't considered the callbacks. Attached is v7 that makes sure the signal is always handled by the main thread by blocking SIGINT before creating the cancel thread. I manually tested that this works by sending signals to specific threads using htop, and logging thread the id from the signal handler. Before this change the thread id would be from different threads, after this change it's always from the same one.=20 --c3410619cbc9d5f36e7abea47a55601c0965d09420724d84c07345bcae99-- --10040660db950fb953ebdc18175e4815e8f8e944d0cfaf7b25853fb674c8 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v7-0001-Move-Windows-pthread-compatibility-functions-to-s.patch Content-Type: text/x-patch; charset=utf-8; name=v7-0001-Move-Windows-pthread-compatibility-functions-to-s.patch RnJvbSBiYTIzNDVmNWIzYmQ4ODVhYzZkZDlkMGM1MWY0OTAyMTRiYzQwMjRkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKZWx0ZSBGZW5uZW1hLU5pbyA8cG9zdGdyZXNAamVsdGVmLm5s PgpEYXRlOiBTYXQsIDEzIERlYyAyMDI1IDE4OjE4OjEzICswMTAwClN1YmplY3Q6IFtQQVRDSCB2 NyAxLzNdIE1vdmUgV2luZG93cyBwdGhyZWFkIGNvbXBhdGliaWxpdHkgZnVuY3Rpb25zIHRvCiBz cmMvcG9ydAoKVGhpcyBpcyBpbiBwcmVwYXJhdGlvbiBvZiBhIGZvbGxvdy11cCBjb21taXQgd2hp Y2ggd2lsbCBzdGFydCB0byB1c2UKdGhlc2UgZnVuY3Rpb25zIGluIG1vcmUgcGxhY2VzIHRoYW4g anVzdCBsaWJwcS4KLS0tCiBjb25maWd1cmUuYWMgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHwgMSArCiBzcmMvaW50ZXJmYWNlcy9saWJwcS9NYWtlZmlsZSAgICAgICAgICAgICAg ICAgIHwgMSAtCiBzcmMvaW50ZXJmYWNlcy9saWJwcS9tZXNvbi5idWlsZCAgICAgICAgICAgICAg IHwgMiArLQogc3JjL3BvcnQvbWVzb24uYnVpbGQgICAgICAgICAgICAgICAgICAgICAgICAgICB8 IDEgKwogc3JjL3tpbnRlcmZhY2VzL2xpYnBxID0+IHBvcnR9L3B0aHJlYWQtd2luMzIuYyB8IDQg KystLQogNSBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCiBy ZW5hbWUgc3JjL3tpbnRlcmZhY2VzL2xpYnBxID0+IHBvcnR9L3B0aHJlYWQtd2luMzIuYyAoOTQl KQoKZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYwppbmRleCBmZWFkOWE2 Y2U5OS4uN2NmMGQ4YzMxNjAgMTAwNjQ0Ci0tLSBhL2NvbmZpZ3VyZS5hYworKysgYi9jb25maWd1 cmUuYWMKQEAgLTE5NDMsNiArMTk0Myw3IEBAIGlmIHRlc3QgIiRQT1JUTkFNRSIgPSAid2luMzIi OyB0aGVuCiAgIEFDX0xJQk9CSihkaXJtb2QpCiAgIEFDX0xJQk9CSihraWxsKQogICBBQ19MSUJP Qkoob3BlbikKKyAgQUNfTElCT0JKKHB0aHJlYWQtd2luMzIpCiAgIEFDX0xJQk9CSihzeXN0ZW0p CiAgIEFDX0xJQk9CSih3aW4zMmNvbW1vbikKICAgQUNfTElCT0JKKHdpbjMyZGxvcGVuKQpkaWZm IC0tZ2l0IGEvc3JjL2ludGVyZmFjZXMvbGlicHEvTWFrZWZpbGUgYi9zcmMvaW50ZXJmYWNlcy9s aWJwcS9NYWtlZmlsZQppbmRleCAwOTYzOTk1ZWVkNC4uZDZjZmIwMGQ2NTUgMTAwNjQ0Ci0tLSBh L3NyYy9pbnRlcmZhY2VzL2xpYnBxL01ha2VmaWxlCisrKyBiL3NyYy9pbnRlcmZhY2VzL2xpYnBx L01ha2VmaWxlCkBAIC03NSw3ICs3NSw2IEBAIGVuZGlmCiAKIGlmZXEgKCQoUE9SVE5BTUUpLCB3 aW4zMikKIE9CSlMgKz0gXAotCXB0aHJlYWQtd2luMzIubyBcCiAJd2luMzIubwogZW5kaWYKIApk aWZmIC0tZ2l0IGEvc3JjL2ludGVyZmFjZXMvbGlicHEvbWVzb24uYnVpbGQgYi9zcmMvaW50ZXJm YWNlcy9saWJwcS9tZXNvbi5idWlsZAppbmRleCBiMGFlNzIxNjdhMS4uYjk0OTc4MGI4NWIgMTAw NjQ0Ci0tLSBhL3NyYy9pbnRlcmZhY2VzL2xpYnBxL21lc29uLmJ1aWxkCisrKyBiL3NyYy9pbnRl cmZhY2VzL2xpYnBxL21lc29uLmJ1aWxkCkBAIC0yMCw3ICsyMCw3IEBAIGxpYnBxX3NvdXJjZXMg PSBmaWxlcygKIGxpYnBxX3NvX3NvdXJjZXMgPSBbXSAjIGZvciBzaGFyZWQgbGliLCBpbiBhZGRp dGlvbiB0byB0aGUgYWJvdmUKIAogaWYgaG9zdF9zeXN0ZW0gPT0gJ3dpbmRvd3MnCi0gIGxpYnBx X3NvdXJjZXMgKz0gZmlsZXMoJ3B0aHJlYWQtd2luMzIuYycsICd3aW4zMi5jJykKKyAgbGlicHFf c291cmNlcyArPSBmaWxlcygnd2luMzIuYycpCiAgIGxpYnBxX3NvX3NvdXJjZXMgKz0gcmNfbGli X2dlbi5wcm9jZXNzKHdpbjMydmVyX3JjLCBleHRyYV9hcmdzOiBbCiAgICAgJy0tTkFNRScsICds aWJwcScsCiAgICAgJy0tRklMRURFU0MnLCAnUG9zdGdyZVNRTCBBY2Nlc3MgTGlicmFyeScsXSkK ZGlmZiAtLWdpdCBhL3NyYy9wb3J0L21lc29uLmJ1aWxkIGIvc3JjL3BvcnQvbWVzb24uYnVpbGQK aW5kZXggNzI5NmY4ZTNjMDMuLmEwZmMxM2E1ZTYyIDEwMDY0NAotLS0gYS9zcmMvcG9ydC9tZXNv bi5idWlsZAorKysgYi9zcmMvcG9ydC9tZXNvbi5idWlsZApAQCAtMzIsNiArMzIsNyBAQCBpZiBo b3N0X3N5c3RlbSA9PSAnd2luZG93cycKICAgICAnZGlybW9kLmMnLAogICAgICdraWxsLmMnLAog ICAgICdvcGVuLmMnLAorICAgICdwdGhyZWFkLXdpbjMyLmMnLAogICAgICdzeXN0ZW0uYycsCiAg ICAgJ3dpbjMyY29tbW9uLmMnLAogICAgICd3aW4zMmRsb3Blbi5jJywKZGlmZiAtLWdpdCBhL3Ny Yy9pbnRlcmZhY2VzL2xpYnBxL3B0aHJlYWQtd2luMzIuYyBiL3NyYy9wb3J0L3B0aHJlYWQtd2lu MzIuYwpzaW1pbGFyaXR5IGluZGV4IDk0JQpyZW5hbWUgZnJvbSBzcmMvaW50ZXJmYWNlcy9saWJw cS9wdGhyZWFkLXdpbjMyLmMKcmVuYW1lIHRvIHNyYy9wb3J0L3B0aHJlYWQtd2luMzIuYwppbmRl eCBjZjY2Mjg0ZjAwNy4uNDhkNjhiNjkzYTcgMTAwNjQ0Ci0tLSBhL3NyYy9pbnRlcmZhY2VzL2xp YnBxL3B0aHJlYWQtd2luMzIuYworKysgYi9zcmMvcG9ydC9wdGhyZWFkLXdpbjMyLmMKQEAgLTUs MTIgKzUsMTIgQEAKICoKICogQ29weXJpZ2h0IChjKSAyMDA0LTIwMjYsIFBvc3RncmVTUUwgR2xv YmFsIERldmVsb3BtZW50IEdyb3VwCiAqIElERU5USUZJQ0FUSU9OCi0qCXNyYy9pbnRlcmZhY2Vz L2xpYnBxL3B0aHJlYWQtd2luMzIuYworKglzcmMvcG9ydC9wdGhyZWFkLXdpbjMyLmMKICoKICot LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCiAqLwogCi0jaW5jbHVkZSAicG9zdGdyZXNfZmUuaCIKKyNpbmNsdWRl ICJjLmgiCiAKICNpbmNsdWRlICJwdGhyZWFkLXdpbjMyLmgiCiAKCmJhc2UtY29tbWl0OiAxODJj ZGY1YWVhZjdiMzRhMjg4YTEzNWQ2NmYyODkzZGMyODhhMjRlCi0tIAoyLjUzLjAKCg== --10040660db950fb953ebdc18175e4815e8f8e944d0cfaf7b25853fb674c8 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v7-0002-Don-t-use-deprecated-and-insecure-PQcancel-psql-a.patch Content-Type: text/x-patch; charset=utf-8; name=v7-0002-Don-t-use-deprecated-and-insecure-PQcancel-psql-a.patch RnJvbSA3NGRkZGZmNTlhMWFiOTlmYmFkMjE2NDZjYmY1M2YxYmEwZDk2ZDdlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKZWx0ZSBGZW5uZW1hLU5pbyA8cG9zdGdyZXNAamVsdGVmLm5s PgpEYXRlOiBTYXQsIDEzIERlYyAyMDI1IDEzOjA1OjUwICswMTAwClN1YmplY3Q6IFtQQVRDSCB2 NyAyLzNdIERvbid0IHVzZSBkZXByZWNhdGVkIGFuZCBpbnNlY3VyZSBQUWNhbmNlbCBwc3FsIGFu ZAogb3RoZXIgdG9vbHMgYW55bW9yZQoKQWxsIG9mIG91ciBmcm9udGVuZCB0b29scyB0aGF0IHVz ZWQgb3VyIGZlX3V0aWxzIHRvIGNhbmNlbCBxdWVyaWVzLAppbmNsdWRpbmcgcHNxbCwgc3RpbGwg dXNlZCBQUWNhbmNlbCB0byBzZW5kIGNhbmNlbCByZXF1ZXN0cyB0byB0aGUKc2VydmVyLiBUaGF0 IGZ1bmN0aW9uIGlzIGluc2VjdXJlLCBiZWNhdXNlIGl0IGRvZXMgbm90IHVzZSBlbmNyeXB0aW9u IHRvCnNlbmQgdGhlIGNhbmNlbCByZXF1ZXN0LiBUaGlzIHN0YXJ0cyB1c2luZyB0aGUgbmV3IGNh bmNlbGxhdGlvbiBBUElzCihpbnRyb2R1Y2VkIGluIDYxNDYxYTMwMCkgZm9yIGFsbCB0aGVzZSBm cm9udGVuZCB0b29scy4gVGhlc2UgQVBJcyB1c2UKdGhlIHNhbWUgZW5jcnlwdGlvbiBzZXR0aW5n cyBhcyB0aGUgY29ubmVjdGlvbiB0aGF0J3MgYmVpbmcgY2FuY2VsbGVkLgpTaW5jZSB0aGVzZSBB UElzIGFyZSBub3Qgc2lnbmFsLXNhZmUgdGhpcyByZXF1aXJlZCBhIHJlZmFjdG9yIHRvIG5vdApz ZW5kIHRoZSBjYW5jZWwgcmVxdWVzdCBpbiBhIHNpZ25hbCBoYW5kbGVyIGFueW1vcmUsIGJ1dCBp bnN0ZWFkIHVzaW5nIGEKZGVkaWNhdGVkIHRocmVhZC4gU2ltaWxhciBsb2dpYyB3YXMgYWxyZWFk eSB1c2VkIGZvciBXaW5kb3dzIGFueXdheSwgc28KdGhpcyBhbHNvIGhhcyB0aGUgYmVuZWZpdCB0 aGF0IGl0IG1ha2VzIHRoZSBjYW5jZWwgbG9naWMgbW9yZSB1bmlmb3JtCmFjcm9zcyBvdXIgc3Vw cG9ydGVkIHBsYXRmb3Jtcy4KClRoZSBjYWxscyB0byBQUWNhbmNlbCBpbiBwZ19kdW1wIGFyZSBz dGlsbCBrZXB0IGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4KYSBsYXRlciBjb21taXQuIFRoZSByZWFz b24gZm9yIHRoYXQgaXMgdGhhdCB0aGF0IGNvZGUgZG9lcyBub3QgdXNlCnRoZSBoZWxwZXJzIGZy b20gZmVfdXRpbHMgdG8gY2FuY2VsIHF1ZXJpZXMsIGFuZCBpbnN0ZWFkIGltcGxlbWVudHMgaXRz Cm93biBsb2dpYy4KLS0tCiBtZXNvbi5idWlsZCAgICAgICAgICAgICAgICAgICB8ICAgMiArLQog c3JjL2ZlX3V0aWxzL01ha2VmaWxlICAgICAgICAgfCAgIDIgKy0KIHNyYy9mZV91dGlscy9jYW5j ZWwuYyAgICAgICAgIHwgMzcwICsrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0KIHNy Yy9pbmNsdWRlL2ZlX3V0aWxzL2NhbmNlbC5oIHwgICA0IC0KIDQgZmlsZXMgY2hhbmdlZCwgMjU3 IGluc2VydGlvbnMoKyksIDEyMSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9tZXNvbi5idWls ZCBiL21lc29uLmJ1aWxkCmluZGV4IDQ2YmQ2YjE0NjhhLi5iMGIyZWIzOWE0MSAxMDA2NDQKLS0t IGEvbWVzb24uYnVpbGQKKysrIGIvbWVzb24uYnVpbGQKQEAgLTM1MjgsNyArMzUyOCw3IEBAIGZy b250ZW5kX2NvZGUgPSBkZWNsYXJlX2RlcGVuZGVuY3koCiAgIGluY2x1ZGVfZGlyZWN0b3JpZXM6 IFtwb3N0Z3Jlc19pbmNdLAogICBsaW5rX3dpdGg6IFtmZV91dGlscywgY29tbW9uX3N0YXRpYywg cGdwb3J0X3N0YXRpY10sCiAgIHNvdXJjZXM6IGdlbmVyYXRlZF9oZWFkZXJzX3N0YW1wLAotICBk ZXBlbmRlbmNpZXM6IFtvc19kZXBzLCBsaWJpbnRsXSwKKyAgZGVwZW5kZW5jaWVzOiBbb3NfZGVw cywgbGliaW50bCwgdGhyZWFkX2RlcF0sCiApCiAKIGJhY2tlbmRfYm90aF9kZXBzICs9IFsKZGlm ZiAtLWdpdCBhL3NyYy9mZV91dGlscy9NYWtlZmlsZSBiL3NyYy9mZV91dGlscy9NYWtlZmlsZQpp bmRleCBjYmZiZjkzYWM2OS4uODA5YWIyMWNjMGMgMTAwNjQ0Ci0tLSBhL3NyYy9mZV91dGlscy9N YWtlZmlsZQorKysgYi9zcmMvZmVfdXRpbHMvTWFrZWZpbGUKQEAgLTE3LDcgKzE3LDcgQEAgc3Vi ZGlyID0gc3JjL2ZlX3V0aWxzCiB0b3BfYnVpbGRkaXIgPSAuLi8uLgogaW5jbHVkZSAkKHRvcF9i dWlsZGRpcikvc3JjL01ha2VmaWxlLmdsb2JhbAogCi1vdmVycmlkZSBDUFBGTEFHUyA6PSAtREZS T05URU5EIC1JJChsaWJwcV9zcmNkaXIpICQoQ1BQRkxBR1MpCitvdmVycmlkZSBDUFBGTEFHUyA6 PSAtREZST05URU5EIC1JJChsaWJwcV9zcmNkaXIpIC1JJCh0b3Bfc3JjZGlyKS9zcmMvcG9ydCAk KENQUEZMQUdTKQogCiBPQkpTID0gXAogCWFyY2hpdmUubyBcCmRpZmYgLS1naXQgYS9zcmMvZmVf dXRpbHMvY2FuY2VsLmMgYi9zcmMvZmVfdXRpbHMvY2FuY2VsLmMKaW5kZXggZTZiNzU0MzlmNTYu LjdjYWI4MjM1YjM0IDEwMDY0NAotLS0gYS9zcmMvZmVfdXRpbHMvY2FuY2VsLmMKKysrIGIvc3Jj L2ZlX3V0aWxzL2NhbmNlbC5jCkBAIC0yLDkgKzIsMzggQEAKICAqCiAgKiBRdWVyeSBjYW5jZWxs YXRpb24gc3VwcG9ydCBmb3IgZnJvbnRlbmQgY29kZQogICoKLSAqIEFzc29ydGVkIHV0aWxpdHkg ZnVuY3Rpb25zIHRvIGNvbnRyb2wgcXVlcnkgY2FuY2VsbGF0aW9uIHdpdGggc2lnbmFsCi0gKiBo YW5kbGVyIGZvciBTSUdJTlQuCisgKiBUaGlzIG1vZHVsZSBwcm92aWRlcyBTSUdJTlQvQ3RybC1D IGhhbmRsaW5nIGZvciBmcm9udGVuZCB0b29scyB0aGF0IG5lZWQKKyAqIHRvIGNhbmNlbCBxdWVy aWVzIHJ1bm5pbmcgb24gdGhlIHNlcnZlci4gIEl0IGNvbWJpbmVzIHRocmVlIGNvbXBsZXRlbHkK KyAqIGluZGVwZW5kZW50IG1lY2hhbmlzbXMsIGFueSBjb21iaW5hdGlvbiBvZiB3aGljaCBjYW4g YmUgdXNlZCBieSBhIGNhbGxlcjoKICAqCisgKiAxLiBTZXJ2ZXIgY2FuY2VsIHJlcXVlc3QgLS0g T2Z0ZW4gd2hhdCBhcHBsaWNhdGlvbnMgbmVlZC4gV2hlbiBhIHF1ZXJ5IGlzCisgKiAgICBydW5u aW5nLCBhbmQgdGhlIG1haW4gdGhyZWFkIGlzIHdhaXRpbmcgZm9yIHRoZSByZXN1bHQgb2YgdGhh dCBxdWVyeSBpbiBhCisgKiAgICBibG9ja2luZyBtYW5uZXIsIHdlIHdhbnQgU0lHSU5UL0N0cmwt QyB0byBjYW5jZWwgdGhhdCBxdWVyeS4gVGhpcyBjYW4gYmUKKyAqICAgIGRvbmUgYnkgaGF2aW5n IHRoZSBhcHBsaWNhdGlvbiBjYWxsIFNldENhbmNlbENvbm4oKSB0byByZWdpc3RlciB0aGUKKyAq ICAgIGNvbm5lY3Rpb24gdGhhdCBpcyBydW5uaW5nIHRoZSBxdWVyeSwgcHJpb3IgdG8gd2FpdGlu ZyBmb3IgdGhlIHJlc3VsdC4KKyAqICAgIFdoZW4gU0lHSU5UL0N0cmwtQyBpcyByZWNlaXZlZCBh IGNhbmNlbCByZXF1ZXN0IGZvciB0aGlzIGNvbm5lY3Rpb24gd2lsbAorICogICAgdGhlbiBiZSBz ZW50IHRvIHRoZSBzZXJ2ZXIgZnJvbSBhIHNlcGFyYXRlIHRocmVhZC4gVGhhdCBpbiB0dXJuIHdp bGwgdGhlbgorICogICAgKGFzc3VtaW5nIGEgY28tb3BlcmF0aW5nIHNlcnZlcikgY2F1c2UgdGhl IHNlcnZlciB0byBjYW5jZWwgdGhlIHF1ZXJ5IGFuZAorICogICAgc2VuZCBhbiBlcnJvciB0byB0 aGUgd2FpdGluZyBjbGllbnQgb24gdGhlIG1haW4gdGhyZWFkLiBUaGUgY2FuY2VsCisgKiAgICBj b25uZWN0aW9uIGlzIGEgcHJvY2Vzcy13aWRlIGdsb2JhbCwgc28gb25seSBvbmUgY29ubmVjdGlv biBjYW4gYmUgdGhlCisgKiAgICBjYW5jZWwgdGFyZ2V0IGF0IGEgdGltZS4gUmVzZXRDYW5jZWxD b25uKCkgY2FuIGJlIHVzZWQgdG8gdW5yZWdpc3RlciB0aGUKKyAqICAgIGNvbm5lY3Rpb24gYWdh aW4sIHByZXZlbnRpbmcgc2VuZGluZyBhIGNhbmNlbCByZXF1ZXN0IGlmIFNJR0lOVC9DdHJsLUMg aXMKKyAqICAgIHJlY2VpdmVkIGFmdGVyIGJsb2NraW5nIHdhaXQgaGFzIGFscmVhZHkgY29tcGxl dGVkLgorICoKKyAqIDIuIENhbmNlbFJlcXVlc3RlZCBmbGFnIC0tIEEgbW9yZSBpbnZvbHZlZCBi dXQgYWxzbyBtdWNoIG1vcmUgZmxleGlibGUgd2F5CisgKiAgICBvZiBjYW5jZWxsaW5nLiBBIHZv bGF0aWxlIHNpZ19hdG9taWNfdCBDYW5jZWxSZXF1ZXN0ZWQgZmxhZyBpcyBzZXQgdG8KKyAqICAg IHRydWUgd2hlbmV2ZXIgU0lHSU5UIGlzIHJlY2VpdmVkLiBUaGlzIG1lYW5zIHRoYXQgdGhlIGFw cGxpY2F0aW9uIGNvZGUKKyAqICAgIGNhbiBmdWxseSBjb250cm9sIHdoYXQgaXQgZG9lcyB3aXRo IHRoaXMgZmxhZy4gVGhlIHByaW1hcnkgdXNlY2FzZSBmb3IKKyAqICAgIHRoaXMgaXMgd2hlbiB0 aGUgYXBwbGljYXRpb24gY29kZSBpcyBub3QgYmxvY2tlZCAoaW5kZWZpbml0ZWx5KSwgYnV0Cisg KiAgICBuZWVkcyB0byB0YWtlIGFuIGFjdGlvbiB3aGVuIEN0cmwtQyBpcyBwcmVzc2VkLCBzdWNo IGFzIGJyZWFrIG91dCBvZiBhCisgKiAgICBsb25nIHJ1bm5pbmcgbG9vcC4KKyAqCisgKiAzLiBD YW5jZWwgY2FsbGJhY2sgLS0gVGhlIG1vc3QgY29tcGxleCB3YXkgb2YgaGFuZGxpbmcgYSBzaWdp bnQuIEFuIG9wdGlvbmFsCisgKiAgICBmdW5jdGlvbiBwb2ludGVyIHJlZ2lzdGVyZWQgdmlhIHNl dHVwX2NhbmNlbF9oYW5kbGVyKCkuICBJZiBzZXQsIGl0IGlzCisgKiAgICBjYWxsZWQgZGlyZWN0 bHkgZnJvbSB0aGUgc2lnbmFsIGhhbmRsZXIsIHNvIGl0IG11c3QgYmUgYXN5bmMtc2lnbmFsLXNh ZmUuCisgKiAgICBXcml0aW5nIGFzeW5jLXNpZ25hbC1zYWZlIGNvZGUgaXMgbm90IGVhc3ksIHNv IHRoaXMgaXMgb25seSByZWNvbW1lbmRlZAorICogICAgYXMgYSBsYXN0IHJlc29ydC4gcHNxbCB1 c2VzIHRoaXMgdG8gbG9uZ2ptcCBiYWNrIHRvIHRoZSBtYWluIGxvb3Agd2hlbiBubworICogICAg cXVlcnkgaXMgYWN0aXZlLgogICoKICAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDI2 LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAogICogUG9ydGlvbnMgQ29weXJp Z2h0IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKQEAg LTE2LDkgKzQ1LDIxIEBACiAKICNpbmNsdWRlICJwb3N0Z3Jlc19mZS5oIgogCisjaW5jbHVkZSA8 c2lnbmFsLmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAKKyNpZm5kZWYgV0lOMzIKKyNpbmNsdWRl IDxmY250bC5oPgorI2VuZGlmCisKKyNpZmRlZiBXSU4zMgorI2luY2x1ZGUgInB0aHJlYWQtd2lu MzIuaCIKKyNlbHNlCisjaW5jbHVkZSA8cHRocmVhZC5oPgorI2VuZGlmCisKICNpbmNsdWRlICJj b21tb24vY29ubmVjdC5oIgorI2luY2x1ZGUgImNvbW1vbi9sb2dnaW5nLmgiCiAjaW5jbHVkZSAi ZmVfdXRpbHMvY2FuY2VsLmgiCiAjaW5jbHVkZSAiZmVfdXRpbHMvc3RyaW5nX3V0aWxzLmgiCiAK QEAgLTM2LDExICs3NywxOSBAQAogCQkodm9pZCkgcmNfOyBcCiAJfSB3aGlsZSAoMCkKIAorCiAv KgotICogQ29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiBuZWVkZWQgdG8gY2FuY2VsIGEgcXVl cnkgaXNzdWVkIGZyb20KLSAqIGEgZGF0YWJhc2UgY29ubmVjdGlvbiB0byB0aGUgYmFja2VuZC4K KyAqIENhbmNlbCBjb25uZWN0aW9uIHRoYXQgc2hvdWxkIGJlIHVzZWQgdG8gc2VuZCBjYW5jZWwg cmVxdWVzdHMuCiAgKi8KLXN0YXRpYyBQR2NhbmNlbCAqdm9sYXRpbGUgY2FuY2VsQ29ubiA9IE5V TEw7CitzdGF0aWMgUEdjYW5jZWxDb25uICpjYW5jZWxDb25uID0gTlVMTDsKKworLyoKKyAqIE11 dGV4IHByb3RlY3RpbmcgY2FuY2VsQ29ubi4gIEhlbGQgYnkgU2VuZENhbmNlbFJlcXVlc3QoKSBm b3IgdGhlIGVudGlyZQorICogZHVyYXRpb24gb2YgdGhlIGNhbmNlbCAoaW5jbHVkaW5nIHRoZSBi bG9ja2luZyBuZXR3b3JrIEkvTyksIHNvIHRoYXQKKyAqIFNldENhbmNlbENvbm4oKS9SZXNldENh bmNlbENvbm4oKSBvbiB0aGUgbWFpbiB0aHJlYWQgd2lsbCB3YWl0IGZvciB0aGUKKyAqIGNhbmNl bCB0byBmaW5pc2ggYmVmb3JlIHJlcGxhY2luZyBvciBmcmVlaW5nIGNhbmNlbENvbm4uCisgKi8K K3N0YXRpYyBwdGhyZWFkX211dGV4X3QgY2FuY2VsQ29ubkxvY2sgPSBQVEhSRUFEX01VVEVYX0lO SVRJQUxJWkVSOwogCiAvKgogICogUHJlZGV0ZXJtaW5lZCBsb2NhbGl6ZWQgZXJyb3Igc3RyaW5n cyAtLS0gbmVlZGVkIHRvIGF2b2lkIHRyeWluZwpAQCAtNTgsMTg2ICsxMDcsMjc3IEBAIHN0YXRp YyBjb25zdCBjaGFyICpjYW5jZWxfbm90X3NlbnRfbXNnID0gTlVMTDsKICAqLwogdm9sYXRpbGUg c2lnX2F0b21pY190IENhbmNlbFJlcXVlc3RlZCA9IGZhbHNlOwogCi0jaWZkZWYgV0lOMzIKLXN0 YXRpYyBDUklUSUNBTF9TRUNUSU9OIGNhbmNlbENvbm5Mb2NrOwotI2VuZGlmCi0KIC8qCiAgKiBB ZGRpdGlvbmFsIGNhbGxiYWNrIGZvciBjYW5jZWxsYXRpb25zLgogICovCiBzdGF0aWMgdm9pZCAo KmNhbmNlbF9jYWxsYmFjaykgKHZvaWQpID0gTlVMTDsKIAorI2lmbmRlZiBXSU4zMgorLyoKKyAq IE9uIFVuaXgsIHRoZSBTSUdJTlQgc2lnbmFsIGhhbmRsZXIgY2Fubm90IGNhbGwgUFFjYW5jZWxC bG9ja2luZygpIGRpcmVjdGx5CisgKiBiZWNhdXNlIGl0IGlzIG5vdCBhc3luYy1zaWduYWwtc2Fm ZS4gIEluc3RlYWQsIHdlIHVzZSBhIHBpcGUgdG8gd2FrZSBhCisgKiBkZWRpY2F0ZWQgY2FuY2Vs IHRocmVhZDogdGhlIHNpZ25hbCBoYW5kbGVyIHdyaXRlcyBhIGJ5dGUgdG8gdGhlIHBpcGUsIGFu ZAorICogdGhlIGNhbmNlbCB0aHJlYWQncyBibG9ja2luZyByZWFkKCkgcmV0dXJucywgdHJpZ2dl cmluZyB0aGUgYWN0dWFsIGNhbmNlbAorICogcmVxdWVzdC4KKyAqLworc3RhdGljIGludAljYW5j ZWxfcGlwZVsyXSA9IHstMSwgLTF9Oworc3RhdGljIHB0aHJlYWRfdCBjYW5jZWxfdGhyZWFkOwor I2VuZGlmCisKIAogLyoKLSAqIFNldENhbmNlbENvbm4KKyAqIFNlbmQgYSBjYW5jZWwgcmVxdWVz dCB0byB0aGUgY29ubmVjdGlvbiwgaWYgb25lIGlzIHNldC4KICAqCi0gKiBTZXQgY2FuY2VsQ29u biB0byBwb2ludCB0byB0aGUgY3VycmVudCBkYXRhYmFzZSBjb25uZWN0aW9uLgorICogQ2FsbGVk IGZyb20gdGhlIGNhbmNlbCB0aHJlYWQgKFVuaXgpIG9yIHRoZSBjb25zb2xlIGhhbmRsZXIgdGhy ZWFkCisgKiAoV2luZG93cyksIG5ldmVyIGZyb20gdGhlIHNpZ25hbCBoYW5kbGVyIGl0c2VsZi4K KyAqCisgKiBXZSBob2xkIGNhbmNlbENvbm5Mb2NrIGZvciB0aGUgZW50aXJlIGR1cmF0aW9uLCBz byB0aGF0IHRoZSBtYWluIHRocmVhZCdzCisgKiBTZXRDYW5jZWxDb25uKCkvUmVzZXRDYW5jZWxD b25uKCkgd2lsbCBibG9jayB1bnRpbCB3ZSdyZSBkb25lLgogICovCi12b2lkCi1TZXRDYW5jZWxD b25uKFBHY29ubiAqY29ubikKK3N0YXRpYyB2b2lkCitTZW5kQ2FuY2VsUmVxdWVzdCh2b2lkKQog ewotCVBHY2FuY2VsICAgKm9sZENhbmNlbENvbm47CisJUEdjYW5jZWxDb25uICpjYzsKIAotI2lm ZGVmIFdJTjMyCi0JRW50ZXJDcml0aWNhbFNlY3Rpb24oJmNhbmNlbENvbm5Mb2NrKTsKLSNlbmRp ZgorCXB0aHJlYWRfbXV0ZXhfbG9jaygmY2FuY2VsQ29ubkxvY2spOworCWNjID0gY2FuY2VsQ29u bjsKKwlpZiAoY2MgPT0gTlVMTCkKKwl7CisJCWdvdG8gZG9uZTsKKwl9CiAKLQkvKiBGcmVlIHRo ZSBvbGQgb25lIGlmIHdlIGhhdmUgb25lICovCi0Jb2xkQ2FuY2VsQ29ubiA9IGNhbmNlbENvbm47 CisJd3JpdGVfc3RkZXJyKGNhbmNlbF9zZW50X21zZyk7CiAKLQkvKiBiZSBzdXJlIGhhbmRsZV9z aWdpbnQgZG9lc24ndCB1c2UgcG9pbnRlciB3aGlsZSBmcmVlaW5nICovCi0JY2FuY2VsQ29ubiA9 IE5VTEw7CisJaWYgKCFQUWNhbmNlbEJsb2NraW5nKGNjKSkKKwl7CisJCWNoYXIJICAgKmVycm1z ZyA9IFBRY2FuY2VsRXJyb3JNZXNzYWdlKGNjKTsKIAotCWlmIChvbGRDYW5jZWxDb25uICE9IE5V TEwpCi0JCVBRZnJlZUNhbmNlbChvbGRDYW5jZWxDb25uKTsKKwkJd3JpdGVfc3RkZXJyKGNhbmNl bF9ub3Rfc2VudF9tc2cpOworCQlpZiAoZXJybXNnKQorCQkJd3JpdGVfc3RkZXJyKGVycm1zZyk7 CisJfQorCS8qIFJlc2V0IGZvciBwb3NzaWJsZSByZXVzZSAqLworCVBRY2FuY2VsUmVzZXQoY2Mp OwogCi0JY2FuY2VsQ29ubiA9IFBRZ2V0Q2FuY2VsKGNvbm4pOworZG9uZToKIAotI2lmZGVmIFdJ TjMyCi0JTGVhdmVDcml0aWNhbFNlY3Rpb24oJmNhbmNlbENvbm5Mb2NrKTsKKyNpZm5kZWYgV0lO MzIKKwl7CisJCS8qCisJCSAqIERyYWluIGFueSBwZW5kaW5nIGJ5dGVzIGZyb20gdGhlIGNhbmNl bCBwaXBlLiBTbyB0aGF0IFNJR0lOVHMKKwkJICogcmVjZWl2ZWQgd2hpbGUgd2Ugd2VyZSBhbHJl YWR5IGNhbmNlbGxpbmcgZG9uJ3QgY2F1c2UgdGhlIGNhbmNlbAorCQkgKiB0aHJlYWQgdG8gd2Fr ZSB1cCBhZ2FpbiBhbmQgY2FuY2VsIGEgc3Vic2VxdWVudCBxdWVyeS4KKwkJICovCisJCWNoYXIJ CWJ1ZlsxNl07CisKKwkJZmNudGwoY2FuY2VsX3BpcGVbMF0sIEZfU0VURkwsIE9fTk9OQkxPQ0sp OworCQl3aGlsZSAocmVhZChjYW5jZWxfcGlwZVswXSwgYnVmLCBzaXplb2YoYnVmKSkgPiAwKQor CQl7CisJCQkvKiBsb29wIHVudGlsIHBpcGUgaXMgZnVsbHkgZHJhaW5lZCAqLworCQl9CisJCWZj bnRsKGNhbmNlbF9waXBlWzBdLCBGX1NFVEZMLCAwKTsKKwl9CiAjZW5kaWYKKworCXB0aHJlYWRf bXV0ZXhfdW5sb2NrKCZjYW5jZWxDb25uTG9jayk7CisJcmV0dXJuOworfQorCisKKy8qCisgKiBI ZWxwZXIgdG8gcmVwbGFjZSBjYW5jZWxDb25uIHdpdGggYSBuZXcgdmFsdWUuCisgKgorICogVGFr ZXMgY2FuY2VsQ29ubkxvY2ssIHdoaWNoIGFsc28gd2FpdHMgZm9yIGFueSBpbi1mbGlnaHQgY2Fu Y2VsIHJlcXVlc3QKKyAqIHRvIGZpbmlzaCwgc2luY2UgU2VuZENhbmNlbFJlcXVlc3QoKSBob2xk cyB0aGUgc2FtZSBsb2NrIHdoaWxlIHNlbmRpbmcuCisgKi8KK3N0YXRpYyB2b2lkCitTZXRDYW5j ZWxDb25uSW50ZXJuYWwoUEdjYW5jZWxDb25uICpuZXdDYW5jZWxDb25uKQoreworCVBHY2FuY2Vs Q29ubiAqb2xkQ2FuY2VsQ29ubjsKKworCXB0aHJlYWRfbXV0ZXhfbG9jaygmY2FuY2VsQ29ubkxv Y2spOworCW9sZENhbmNlbENvbm4gPSBjYW5jZWxDb25uOworCWNhbmNlbENvbm4gPSBuZXdDYW5j ZWxDb25uOworCXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZjYW5jZWxDb25uTG9jayk7CisKKwlpZiAo b2xkQ2FuY2VsQ29ubiAhPSBOVUxMKQorCQlQUWNhbmNlbEZpbmlzaChvbGRDYW5jZWxDb25uKTsK K30KKworLyoKKyAqIFNldENhbmNlbENvbm4KKyAqCisgKiBTZXQgY2FuY2VsQ29ubiB0byBwb2lu dCB0byBhIGNhbmNlbCBjb25uZWN0aW9uIGZvciB0aGUgZ2l2ZW4gZGF0YWJhc2UKKyAqIGNvbm5l Y3Rpb24uIFRoaXMgY3JlYXRlcyBhIG5ldyBQR2NhbmNlbENvbm4gdGhhdCBjYW4gYmUgdXNlZCB0 byBzZW5kCisgKiBjYW5jZWwgcmVxdWVzdHMuCisgKi8KK3ZvaWQKK1NldENhbmNlbENvbm4oUEdj b25uICpjb25uKQoreworCVNldENhbmNlbENvbm5JbnRlcm5hbChQUWNhbmNlbENyZWF0ZShjb25u KSk7CiB9CiAKIC8qCiAgKiBSZXNldENhbmNlbENvbm4KICAqCi0gKiBGcmVlIHRoZSBjdXJyZW50 IGNhbmNlbCBjb25uZWN0aW9uLCBpZiBhbnksIGFuZCBzZXQgdG8gTlVMTC4KKyAqIENsZWFyIGNh bmNlbENvbm4sIHByZXZlbnRpbmcgYW55IHBlbmRpbmcgY2FuY2VsIGZyb20gYmVpbmcgc2VudC4K KyAqIFdhaXRzIGZvciBhbnkgaW4tZmxpZ2h0IGNhbmNlbCByZXF1ZXN0IHRvIGNvbXBsZXRlIGZp cnN0LgogICovCiB2b2lkCiBSZXNldENhbmNlbENvbm4odm9pZCkKIHsKLQlQR2NhbmNlbCAgICpv bGRDYW5jZWxDb25uOworCVNldENhbmNlbENvbm5JbnRlcm5hbChOVUxMKTsKK30KIAotI2lmZGVm IFdJTjMyCi0JRW50ZXJDcml0aWNhbFNlY3Rpb24oJmNhbmNlbENvbm5Mb2NrKTsKLSNlbmRpZgog Ci0Jb2xkQ2FuY2VsQ29ubiA9IGNhbmNlbENvbm47CisjaWZkZWYgV0lOMzIKKy8qCisgKiBDb25z b2xlIGNvbnRyb2wgaGFuZGxlciBmb3IgV2luZG93cy4KKyAqCisgKiBUaGlzIHJ1bnMgaW4gYSBz ZXBhcmF0ZSB0aHJlYWQgY3JlYXRlZCBieSB0aGUgT1MsIHNvIHdlIGNhbiBzYWZlbHkgY2FsbAor ICogdGhlIGJsb2NraW5nIGNhbmNlbCBBUEkgZGlyZWN0bHkuCisgKi8KK3N0YXRpYyBCT09MIFdJ TkFQSQorY29uc29sZUhhbmRsZXIoRFdPUkQgZHdDdHJsVHlwZSkKK3sKKwlpZiAoZHdDdHJsVHlw ZSA9PSBDVFJMX0NfRVZFTlQgfHwKKwkJZHdDdHJsVHlwZSA9PSBDVFJMX0JSRUFLX0VWRU5UKQor CXsKKwkJQ2FuY2VsUmVxdWVzdGVkID0gdHJ1ZTsKIAotCS8qIGJlIHN1cmUgaGFuZGxlX3NpZ2lu dCBkb2Vzbid0IHVzZSBwb2ludGVyIHdoaWxlIGZyZWVpbmcgKi8KLQljYW5jZWxDb25uID0gTlVM TDsKKwkJaWYgKGNhbmNlbF9jYWxsYmFjayAhPSBOVUxMKQorCQkJY2FuY2VsX2NhbGxiYWNrKCk7 CiAKLQlpZiAob2xkQ2FuY2VsQ29ubiAhPSBOVUxMKQotCQlQUWZyZWVDYW5jZWwob2xkQ2FuY2Vs Q29ubik7CisJCVNlbmRDYW5jZWxSZXF1ZXN0KCk7CiAKLSNpZmRlZiBXSU4zMgotCUxlYXZlQ3Jp dGljYWxTZWN0aW9uKCZjYW5jZWxDb25uTG9jayk7Ci0jZW5kaWYKKwkJcmV0dXJuIFRSVUU7CisJ fQorCWVsc2UKKwkJLyogUmV0dXJuIEZBTFNFIGZvciBhbnkgc2lnbmFscyBub3QgYmVpbmcgaGFu ZGxlZCAqLworCQlyZXR1cm4gRkFMU0U7CiB9CiAKKyNlbHNlCQkJCQkJCS8qICFXSU4zMiAqLwog CiAvKgotICogQ29kZSB0byBzdXBwb3J0IHF1ZXJ5IGNhbmNlbGxhdGlvbgotICoKLSAqIE5vdGUg dGhhdCBzZW5kaW5nIHRoZSBjYW5jZWwgZGlyZWN0bHkgZnJvbSB0aGUgc2lnbmFsIGhhbmRsZXIg aXMgc2FmZQotICogYmVjYXVzZSBQUWNhbmNlbCgpIGlzIHdyaXR0ZW4gdG8gbWFrZSBpdCBzby4g IFdlIHVzZSB3cml0ZSgpIHRvIHJlcG9ydAotICogdG8gc3RkZXJyIGJlY2F1c2UgaXQncyBiZXR0 ZXIgdG8gdXNlIHNpbXBsZSBmYWNpbGl0aWVzIGluIGEgc2lnbmFsCi0gKiBoYW5kbGVyLgotICoK LSAqIE9uIFdpbmRvd3MsIHRoZSBzaWduYWwgY2FuY2VsaW5nIGhhcHBlbnMgb24gYSBzZXBhcmF0 ZSB0aHJlYWQsIGJlY2F1c2UKLSAqIHRoYXQncyBob3cgU2V0Q29uc29sZUN0cmxIYW5kbGVyIHdv cmtzLiAgVGhlIFBRY2FuY2VsIGZ1bmN0aW9uIGlzIHNhZmUKLSAqIGZvciB0aGlzICh1bmxpa2Ug UFFyZXF1ZXN0Q2FuY2VsKS4gIEhvd2V2ZXIsIGEgQ1JJVElDQUxfU0VDVElPTiBpcyByZXF1aXJl ZAotICogdG8gcHJvdGVjdCB0aGUgUEdjYW5jZWwgc3RydWN0dXJlIGFnYWluc3QgYmVpbmcgY2hh bmdlZCB3aGlsZSB0aGUgc2lnbmFsCi0gKiB0aHJlYWQgaXMgdXNpbmcgaXQuCisgKiBDYW5jZWwg dGhyZWFkIG1haW4gZnVuY3Rpb24uIFdhaXRzIGZvciB0aGUgc2lnbmFsIGhhbmRsZXIgdG8gd3Jp dGUgdG8gdGhlCisgKiBwaXBlLCB0aGVuIHNlbmRzIGEgY2FuY2VsIHJlcXVlc3QuCiAgKi8KK3N0 YXRpYyB2b2lkICoKK2NhbmNlbF90aHJlYWRfbWFpbih2b2lkICphcmcpCit7CisJZm9yICg7OykK Kwl7CisJCWNoYXIJCWJ1ZlsxNl07CisJCXNzaXplX3QJCXJjOwogCi0jaWZuZGVmIFdJTjMyCisJ CS8qIFdhaXQgZm9yIHNpZ25hbCBoYW5kbGVyIHRvIHdha2UgdXMgdXAgKGJsb2NraW5nIHJlYWQp ICovCisJCXJjID0gcmVhZChjYW5jZWxfcGlwZVswXSwgYnVmLCBzaXplb2YoYnVmKSk7CisJCWlm IChyYyA8PSAwKQorCQl7CisJCQlpZiAoZXJybm8gPT0gRUlOVFIpCisJCQkJY29udGludWU7CisJ CQkvKiBQaXBlIGNsb3NlZCBvciBlcnJvciAtIGV4aXQgdGhyZWFkICovCisJCQlicmVhazsKKwkJ fQorCisJCVNlbmRDYW5jZWxSZXF1ZXN0KCk7CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CiAKIC8q Ci0gKiBoYW5kbGVfc2lnaW50Ci0gKgotICogSGFuZGxlIGludGVycnVwdCBzaWduYWxzIGJ5IGNh bmNlbGluZyB0aGUgY3VycmVudCBjb21tYW5kLCBpZiBjYW5jZWxDb25uCi0gKiBpcyBzZXQuCisg KiBTaWduYWwgaGFuZGxlciBmb3IgU0lHSU5ULiBTZXRzIENhbmNlbFJlcXVlc3RlZCBhbmQgd2Fr ZXMgdXAgdGhlIGNhbmNlbAorICogdGhyZWFkIGJ5IHdyaXRpbmcgdG8gdGhlIHBpcGUuCiAgKi8K IHN0YXRpYyB2b2lkCiBoYW5kbGVfc2lnaW50KFNJR05BTF9BUkdTKQogewotCWNoYXIJCWVycmJ1 ZlsyNTZdOworCWludAkJCXNhdmVfZXJybm8gPSBlcnJubzsKKwljaGFyCQljID0gMTsKIAogCUNh bmNlbFJlcXVlc3RlZCA9IHRydWU7CiAKIAlpZiAoY2FuY2VsX2NhbGxiYWNrICE9IE5VTEwpCiAJ CWNhbmNlbF9jYWxsYmFjaygpOwogCi0JLyogU2VuZCBRdWVyeUNhbmNlbCBpZiB3ZSBhcmUgcHJv Y2Vzc2luZyBhIGRhdGFiYXNlIHF1ZXJ5ICovCi0JaWYgKGNhbmNlbENvbm4gIT0gTlVMTCkKKwkv KiBXYWtlIHVwIHRoZSBjYW5jZWwgdGhyZWFkIC0gd3JpdGUoKSBpcyBhc3luYy1zaWduYWwtc2Fm ZSAqLworCWlmIChjYW5jZWxfcGlwZVsxXSA+PSAwKQogCXsKLQkJaWYgKFBRY2FuY2VsKGNhbmNl bENvbm4sIGVycmJ1Ziwgc2l6ZW9mKGVycmJ1ZikpKQotCQl7Ci0JCQl3cml0ZV9zdGRlcnIoY2Fu Y2VsX3NlbnRfbXNnKTsKLQkJfQotCQllbHNlCi0JCXsKLQkJCXdyaXRlX3N0ZGVycihjYW5jZWxf bm90X3NlbnRfbXNnKTsKLQkJCXdyaXRlX3N0ZGVycihlcnJidWYpOwotCQl9CisJCWludAkJCXJj ID0gd3JpdGUoY2FuY2VsX3BpcGVbMV0sICZjLCAxKTsKKworCQkodm9pZCkgcmM7CiAJfQorCisJ ZXJybm8gPSBzYXZlX2Vycm5vOwogfQogCisjZW5kaWYJCQkJCQkJLyogV0lOMzIgKi8KKworCiAv KgogICogc2V0dXBfY2FuY2VsX2hhbmRsZXIKICAqCi0gKiBSZWdpc3RlciBxdWVyeSBjYW5jZWxs YXRpb24gY2FsbGJhY2sgZm9yIFNJR0lOVC4KKyAqIFNldCB1cCBoYW5kbGVyIGZvciBTSUdJTlQg KFVuaXgpIG9yIGNvbnNvbGUgZXZlbnRzIChXaW5kb3dzKSB0byBzZW5kIGEKKyAqIGNhbmNlbCBy ZXF1ZXN0IHRvIHRoZSBzZXJ2ZXIuCisgKgorICogVGhlIG9wdGlvbmFsIGNhbGxiYWNrIGlzIGlu dm9rZWQgZGlyZWN0bHkgZnJvbSB0aGUgc2lnbmFsIGhhbmRsZXIgY29udGV4dAorICogb24gZXZl cnkgU0lHSU5UIChvbiBVbml4KSwgc28gaXQgbXVzdCBiZSBhc3luYy1zaWduYWwtc2FmZS4KICAq Lwogdm9pZAogc2V0dXBfY2FuY2VsX2hhbmRsZXIodm9pZCAoKnF1ZXJ5X2NhbmNlbF9jYWxsYmFj aykgKHZvaWQpKQogewogCWNhbmNlbF9jYWxsYmFjayA9IHF1ZXJ5X2NhbmNlbF9jYWxsYmFjazsK LQljYW5jZWxfc2VudF9tc2cgPSBfKCJDYW5jZWwgcmVxdWVzdCBzZW50XG4iKTsKKwljYW5jZWxf c2VudF9tc2cgPSBfKCJTZW5kaW5nIGNhbmNlbCByZXF1ZXN0XG4iKTsKIAljYW5jZWxfbm90X3Nl bnRfbXNnID0gXygiQ291bGQgbm90IHNlbmQgY2FuY2VsIHJlcXVlc3Q6ICIpOwogCi0JcHFzaWdu YWwoU0lHSU5ULCBoYW5kbGVfc2lnaW50KTsKLX0KLQotI2Vsc2UJCQkJCQkJLyogV0lOMzIgKi8K KyNpZmRlZiBXSU4zMgorCVNldENvbnNvbGVDdHJsSGFuZGxlcihjb25zb2xlSGFuZGxlciwgVFJV RSk7CisjZWxzZQogCi1zdGF0aWMgQk9PTCBXSU5BUEkKLWNvbnNvbGVIYW5kbGVyKERXT1JEIGR3 Q3RybFR5cGUpCi17Ci0JY2hhcgkJZXJyYnVmWzI1Nl07CisJLyoKKwkgKiBDcmVhdGUgdGhlIHBp cGUgYW5kIGNhbmNlbCB0aHJlYWQgKHNlZSBjb21tZW50IG9uIGNhbmNlbF9waXBlIGFib3ZlKS4K KwkgKi8KKwlpZiAocGlwZShjYW5jZWxfcGlwZSkgPCAwKQorCXsKKwkJcGdfbG9nX2Vycm9yKCJj b3VsZCBub3QgY3JlYXRlIHBpcGUgZm9yIGNhbmNlbDogJW0iKTsKKwkJZXhpdCgxKTsKKwl9CiAK LQlpZiAoZHdDdHJsVHlwZSA9PSBDVFJMX0NfRVZFTlQgfHwKLQkJZHdDdHJsVHlwZSA9PSBDVFJM X0JSRUFLX0VWRU5UKQorCS8qCisJICogTWFrZSB0aGUgd3JpdGUgZW5kIG5vbi1ibG9ja2luZywg c28gdGhhdCB0aGUgc2lnbmFsIGhhbmRsZXIgd29uJ3QgYmxvY2sKKwkgKiBpZiB0aGUgcGlwZSBi dWZmZXIgaXMgZnVsbCAod2hpY2ggaXMgdmVyeSB1bmxpa2VseSBpbiBwcmFjdGljZSBidXQKKwkg KiBwb3NzaWJsZSBpbiB0aGVvcnkpLgorCSAqLworCWZjbnRsKGNhbmNlbF9waXBlWzFdLCBGX1NF VEZMLCBPX05PTkJMT0NLKTsKKworCS8qCisJICogQmxvY2sgU0lHSU5UIGJlZm9yZSBjcmVhdGlu ZyB0aGUgY2FuY2VsIHRocmVhZCwgc28gdGhhdCBpdCBpbmhlcml0cyBhCisJICogc2lnbmFsIG1h c2sgd2l0aCBTSUdJTlQgYmxvY2tlZC4gVGhpcyBlbnN1cmVzIFNJR0lOVCBpcyBhbHdheXMKKwkg KiBkZWxpdmVyZWQgdG8gdGhlIG1haW4gdGhyZWFkLCB3aGljaCBtYXR0ZXJzIGJlY2F1c2Ugc29t ZSBjYW5jZWwKKwkgKiBjYWxsYmFja3MgKGUuZy4gcHNxbCdzKSBjYWxsIHNpZ2xvbmdqbXAoKSBi YWNrIHRvIGEgc2lnc2V0am1wKCkgb24gdGhlCisJICogbWFpbiB0aHJlYWQncyBzdGFjay4KKwkg Ki8KIAl7Ci0JCUNhbmNlbFJlcXVlc3RlZCA9IHRydWU7CisJCXNpZ3NldF90CXNpZ2ludF9zaWdz ZXQ7CisJCWludAkJCXJjOwogCi0JCWlmIChjYW5jZWxfY2FsbGJhY2sgIT0gTlVMTCkKLQkJCWNh bmNlbF9jYWxsYmFjaygpOworCQlzaWdlbXB0eXNldCgmc2lnaW50X3NpZ3NldCk7CisJCXNpZ2Fk ZHNldCgmc2lnaW50X3NpZ3NldCwgU0lHSU5UKTsKKwkJcHRocmVhZF9zaWdtYXNrKFNJR19CTE9D SywgJnNpZ2ludF9zaWdzZXQsIE5VTEwpOwogCi0JCS8qIFNlbmQgUXVlcnlDYW5jZWwgaWYgd2Ug YXJlIHByb2Nlc3NpbmcgYSBkYXRhYmFzZSBxdWVyeSAqLwotCQlFbnRlckNyaXRpY2FsU2VjdGlv bigmY2FuY2VsQ29ubkxvY2spOwotCQlpZiAoY2FuY2VsQ29ubiAhPSBOVUxMKQotCQl7Ci0JCQlp ZiAoUFFjYW5jZWwoY2FuY2VsQ29ubiwgZXJyYnVmLCBzaXplb2YoZXJyYnVmKSkpCi0JCQl7Ci0J CQkJd3JpdGVfc3RkZXJyKGNhbmNlbF9zZW50X21zZyk7Ci0JCQl9Ci0JCQllbHNlCi0JCQl7Ci0J CQkJd3JpdGVfc3RkZXJyKGNhbmNlbF9ub3Rfc2VudF9tc2cpOwotCQkJCXdyaXRlX3N0ZGVycihl cnJidWYpOwotCQkJfQotCQl9CisJCXJjID0gcHRocmVhZF9jcmVhdGUoJmNhbmNlbF90aHJlYWQs IE5VTEwsIGNhbmNlbF90aHJlYWRfbWFpbiwgTlVMTCk7CiAKLQkJTGVhdmVDcml0aWNhbFNlY3Rp b24oJmNhbmNlbENvbm5Mb2NrKTsKKwkJcHRocmVhZF9zaWdtYXNrKFNJR19VTkJMT0NLLCAmc2ln aW50X3NpZ3NldCwgTlVMTCk7CiAKLQkJcmV0dXJuIFRSVUU7CisJCWlmIChyYyAhPSAwKQorCQl7 CisJCQlwZ19sb2dfZXJyb3IoImNvdWxkIG5vdCBjcmVhdGUgY2FuY2VsIHRocmVhZDogJXMiLCBz dHJlcnJvcihyYykpOworCQkJZXhpdCgxKTsKKwkJfQogCX0KLQllbHNlCi0JCS8qIFJldHVybiBG QUxTRSBmb3IgYW55IHNpZ25hbHMgbm90IGJlaW5nIGhhbmRsZWQgKi8KLQkJcmV0dXJuIEZBTFNF OwotfQogCi12b2lkCi1zZXR1cF9jYW5jZWxfaGFuZGxlcih2b2lkICgqY2FsbGJhY2spICh2b2lk KSkKLXsKLQljYW5jZWxfY2FsbGJhY2sgPSBjYWxsYmFjazsKLQljYW5jZWxfc2VudF9tc2cgPSBf KCJDYW5jZWwgcmVxdWVzdCBzZW50XG4iKTsKLQljYW5jZWxfbm90X3NlbnRfbXNnID0gXygiQ291 bGQgbm90IHNlbmQgY2FuY2VsIHJlcXVlc3Q6ICIpOwotCi0JSW5pdGlhbGl6ZUNyaXRpY2FsU2Vj dGlvbigmY2FuY2VsQ29ubkxvY2spOwotCi0JU2V0Q29uc29sZUN0cmxIYW5kbGVyKGNvbnNvbGVI YW5kbGVyLCBUUlVFKTsKKwlwcXNpZ25hbChTSUdJTlQsIGhhbmRsZV9zaWdpbnQpOworI2VuZGlm CiB9Ci0KLSNlbmRpZgkJCQkJCQkvKiBXSU4zMiAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUv ZmVfdXRpbHMvY2FuY2VsLmggYi9zcmMvaW5jbHVkZS9mZV91dGlscy9jYW5jZWwuaAppbmRleCBl MTc0ZmI4M2I5Mi4uOGFmYjJkNzc4YmYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2ZlX3V0aWxz L2NhbmNlbC5oCisrKyBiL3NyYy9pbmNsdWRlL2ZlX3V0aWxzL2NhbmNlbC5oCkBAIC0yMywxMCAr MjMsNiBAQCBleHRlcm4gUEdETExJTVBPUlQgdm9sYXRpbGUgc2lnX2F0b21pY190IENhbmNlbFJl cXVlc3RlZDsKIGV4dGVybiB2b2lkIFNldENhbmNlbENvbm4oUEdjb25uICpjb25uKTsKIGV4dGVy biB2b2lkIFJlc2V0Q2FuY2VsQ29ubih2b2lkKTsKIAotLyoKLSAqIEEgY2FsbGJhY2sgY2FuIGJl IG9wdGlvbmFsbHkgc2V0IHVwIHRvIGJlIGNhbGxlZCBhdCBjYW5jZWxsYXRpb24KLSAqIHRpbWUu Ci0gKi8KIGV4dGVybiB2b2lkIHNldHVwX2NhbmNlbF9oYW5kbGVyKHZvaWQgKCpxdWVyeV9jYW5j ZWxfY2FsbGJhY2spICh2b2lkKSk7CiAKICNlbmRpZgkJCQkJCQkvKiBDQU5DRUxfSCAqLwotLSAK Mi41My4wCgo= --10040660db950fb953ebdc18175e4815e8f8e944d0cfaf7b25853fb674c8 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v7-0003-pg_dump-Don-t-use-the-deprecated-and-insecure-PQc.patch Content-Type: text/x-patch; charset=utf-8; name=v7-0003-pg_dump-Don-t-use-the-deprecated-and-insecure-PQc.patch RnJvbSBkMjg0MjRlYWI3NjAwMDg1NTkyMjM4ODVlODU1YzE5N2ZhNWZlMTRkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKZWx0ZSBGZW5uZW1hLU5pbyA8cG9zdGdyZXNAamVsdGVmLm5s PgpEYXRlOiBTdW4sIDggRmViIDIwMjYgMTk6MDA6MTIgKzAxMDAKU3ViamVjdDogW1BBVENIIHY3 IDMvM10gcGdfZHVtcDogRG9uJ3QgdXNlIHRoZSBkZXByZWNhdGVkIGFuZCBpbnNlY3VyZQogUFFj YW5jZWwKCnBnX2R1bXAgc3RpbGwgdXNlZCBQUWNhbmNlbCB0byBzZW5kIGNhbmNlbCByZXF1ZXN0 cyB0byB0aGUgc2VydmVyIHdoZW4KdGhlIGR1bXAgd2FzIGNhbmNlbGxlZC4gVGhhdCBsaWJwcSBm dW5jdGlvbiBpcyBpbnNlY3VyZSwgYmVjYXVzZSBpdCBkb2VzCm5vdCB1c2UgZW5jcnlwdGlvbiB0 byBzZW5kIHRoZSBjYW5jZWwgcmVxdWVzdC4gVGhpcyBjb21taXQgc3RhcnRzIHVzaW5nIHRoZSBu ZXcKY2FuY2VsbGF0aW9uIEFQSXMgKGludHJvZHVjZWQgaW4gNjE0NjFhMzAwKSBpbiBwZ19kdW1w LiBUaGVzZSBBUElzIHVzZQp0aGUgc2FtZSBlbmNyeXB0aW9uIHNldHRpbmdzIGFzIHRoZSBjb25u ZWN0aW9uIHRoYXQncyBiZWluZyBjYW5jZWxsZWQuClNpbmNlIHRoZXNlIEFQSXMgYXJlIG5vdCBz aWduYWwtc2FmZSB0aGlzIHJlcXVpcmVkIGEgcmVmYWN0b3IgdG8gbm90CnNlbmQgdGhlIGNhbmNl bCByZXF1ZXN0IGluIGEgc2lnbmFsIGhhbmRsZXIgYW55bW9yZSwgYnV0IGluc3RlYWQgdXNpbmcg YQpkZWRpY2F0ZWQgdGhyZWFkLiBXaW5kb3dzIHdhcyBhbHJlYWR5IGRvaW5nIHRoYXQgdG9vLCBz byBub3cgdGhlIHBhdGhzCmNhbiBzaGFyZSBzb21lIGNvZGUuIFRoZXJlJ3Mgc3RpbGwgcXVpdGUg YSBiaXQgb2YgYmVoYXZpb3VyYWwgZGlmZmVyZW5jZQp0aG91Z2gsIGJlY2F1c2UgdGhlIHBnX2R1 bXAgaXMgdXNpbmcgdGhyZWFkcyBmb3IgcGFyYWxsZWxpc20gb24gV2luZG93cywKYnV0IHByb2Nl c3NlcyBvbiBVbml4ZXMuCi0tLQogc3JjL2Jpbi9wZ19kdW1wL01ha2VmaWxlICAgICAgICAgICAg IHwgICAyICstCiBzcmMvYmluL3BnX2R1bXAvbWVzb24uYnVpbGQgICAgICAgICAgfCAgIDIgKwog c3JjL2Jpbi9wZ19kdW1wL3BhcmFsbGVsLmMgICAgICAgICAgIHwgNDA2ICsrKysrKysrKysrKysr LS0tLS0tLS0tLS0tLQogc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5jIHwgICAy ICstCiBzcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmggfCAgIDggKy0KIHNyYy9i aW4vcGdfZHVtcC9wZ19iYWNrdXBfZGIuYyAgICAgICB8ICAgNyArLQogNiBmaWxlcyBjaGFuZ2Vk LCAyMjUgaW5zZXJ0aW9ucygrKSwgMjAyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9i aW4vcGdfZHVtcC9NYWtlZmlsZSBiL3NyYy9iaW4vcGdfZHVtcC9NYWtlZmlsZQppbmRleCA3OTA3 M2IwYTBlYS4uZjc2MzQ2YzRmNmMgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9NYWtlZmls ZQorKysgYi9zcmMvYmluL3BnX2R1bXAvTWFrZWZpbGUKQEAgLTIxLDcgKzIxLDcgQEAgZXhwb3J0 IExaNAogZXhwb3J0IFpTVEQKIGV4cG9ydCB3aXRoX2ljdQogCi1vdmVycmlkZSBDUFBGTEFHUyA6 PSAtSSQobGlicHFfc3JjZGlyKSAkKENQUEZMQUdTKQorb3ZlcnJpZGUgQ1BQRkxBR1MgOj0gLUkk KGxpYnBxX3NyY2RpcikgLUkkKHRvcF9zcmNkaXIpL3NyYy9wb3J0ICQoQ1BQRkxBR1MpCiBMREZM QUdTX0lOVEVSTkFMICs9IC1MJCh0b3BfYnVpbGRkaXIpL3NyYy9mZV91dGlscyAtbHBnZmV1dGls cyAkKGxpYnBxX3BncG9ydCkKIAogT0JKUyA9IFwKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVt cC9tZXNvbi5idWlsZCBiL3NyYy9iaW4vcGdfZHVtcC9tZXNvbi5idWlsZAppbmRleCA3YzlhNDc1 OTYzYi4uYzc3MmNkMGUyYzAgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9tZXNvbi5idWls ZAorKysgYi9zcmMvYmluL3BnX2R1bXAvbWVzb24uYnVpbGQKQEAgLTIyLDYgKzIyLDggQEAgcGdf ZHVtcF9jb21tb25fc291cmNlcyA9IGZpbGVzKAogcGdfZHVtcF9jb21tb24gPSBzdGF0aWNfbGli cmFyeSgnbGlicGdkdW1wX2NvbW1vbicsCiAgIHBnX2R1bXBfY29tbW9uX3NvdXJjZXMsCiAgIGNf cGNoOiBwY2hfcG9zdGdyZXNfZmVfaCwKKyAgIyBwb3J0IG5lZWRzIHRvIGJlIGluIGluY2x1ZGUg cGF0aCBkdWUgdG8gcHRocmVhZC13aW4zMi5oCisgIGluY2x1ZGVfZGlyZWN0b3JpZXM6IFsnLi4v Li4vcG9ydCddLAogICBkZXBlbmRlbmNpZXM6IFtmcm9udGVuZF9jb2RlLCBsaWJwcSwgbHo0LCB6 bGliLCB6c3RkXSwKICAga3dhcmdzOiBpbnRlcm5hbF9saWJfYXJncywKICkKZGlmZiAtLWdpdCBh L3NyYy9iaW4vcGdfZHVtcC9wYXJhbGxlbC5jIGIvc3JjL2Jpbi9wZ19kdW1wL3BhcmFsbGVsLmMK aW5kZXggYTI4NTYxZmJkODQuLmVkYzgwMGQ5YzkwIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1 bXAvcGFyYWxsZWwuYworKysgYi9zcmMvYmluL3BnX2R1bXAvcGFyYWxsZWwuYwpAQCAtNTgsOCAr NTgsMTIgQEAKICNpbmNsdWRlIDxzaWduYWwuaD4KICNpbmNsdWRlIDx1bmlzdGQuaD4KICNpbmNs dWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHB0aHJlYWQuaD4KKyNlbHNlCisjaW5jbHVkZSAicHRo cmVhZC13aW4zMi5oIgogI2VuZGlmCiAKKyNpbmNsdWRlICJjb21tb24vbG9nZ2luZy5oIgogI2lu Y2x1ZGUgImZlX3V0aWxzL3N0cmluZ191dGlscy5oIgogI2luY2x1ZGUgInBhcmFsbGVsLmgiCiAj aW5jbHVkZSAicGdfYmFja3VwX3V0aWxzLmgiCkBAIC0xNjcsNiArMTcxLDcgQEAgdHlwZWRlZiBz dHJ1Y3QgRHVtcFNpZ25hbEluZm9ybWF0aW9uCiAJQXJjaGl2ZUhhbmRsZSAqbXlBSDsJCS8qIGRh dGFiYXNlIGNvbm5lY3Rpb24gdG8gaXNzdWUgY2FuY2VsIGZvciAqLwogCVBhcmFsbGVsU3RhdGUg KnBzdGF0ZTsJCS8qIHBhcmFsbGVsIHN0YXRlLCBpZiBhbnkgKi8KIAlib29sCQloYW5kbGVyX3Nl dDsJLyogc2lnbmFsIGhhbmRsZXIgc2V0IHVwIGluIHRoaXMgcHJvY2Vzcz8gKi8KKwlib29sCQlj YW5jZWxfcmVxdWVzdGVkOwkvKiBjYW5jZWwgcmVxdWVzdGVkIHZpYSBzaWduYWw/ICovCiAjaWZu ZGVmIFdJTjMyCiAJYm9vbAkJYW1fd29ya2VyOwkJLyogYW0gSSBhIHdvcmtlciBwcm9jZXNzPyAq LwogI2VuZGlmCkBAIC0xNzQsOCArMTc5LDIwIEBAIHR5cGVkZWYgc3RydWN0IER1bXBTaWduYWxJ bmZvcm1hdGlvbgogCiBzdGF0aWMgdm9sYXRpbGUgRHVtcFNpZ25hbEluZm9ybWF0aW9uIHNpZ25h bF9pbmZvOwogCi0jaWZkZWYgV0lOMzIKLXN0YXRpYyBDUklUSUNBTF9TRUNUSU9OIHNpZ25hbF9p bmZvX2xvY2s7CisvKgorICogTXV0ZXggcHJvdGVjdGluZyBzaWduYWxfaW5mbyBkdXJpbmcgY2Fu Y2VsIG9wZXJhdGlvbnMuCisgKi8KK3N0YXRpYyBwdGhyZWFkX211dGV4X3Qgc2lnbmFsX2luZm9f bG9jazsKKworI2lmbmRlZiBXSU4zMgorLyoKKyAqIE9uIFVuaXgsIHRoZSBzaWduYWwgaGFuZGxl ciBjYW5ub3QgY2FsbCBQUWNhbmNlbEJsb2NraW5nKCkgZGlyZWN0bHkgYmVjYXVzZQorICogaXQg aXMgbm90IGFzeW5jLXNpZ25hbC1zYWZlLiAgSW5zdGVhZCwgd2UgdXNlIGEgcGlwZSB0byB3YWtl IGEgZGVkaWNhdGVkCisgKiBjYW5jZWwgdGhyZWFkOiB0aGUgc2lnbmFsIGhhbmRsZXIgd3JpdGVz IGEgYnl0ZSB0byB0aGUgcGlwZSwgYW5kIHRoZSBjYW5jZWwKKyAqIHRocmVhZCdzIGJsb2NraW5n IHJlYWQoKSByZXR1cm5zLCB0cmlnZ2VyaW5nIHRoZSBhY3R1YWwgY2FuY2VsIHJlcXVlc3RzLgor ICovCitzdGF0aWMgaW50CWNhbmNlbF9waXBlWzJdID0gey0xLCAtMX07CitzdGF0aWMgcHRocmVh ZF90IGNhbmNlbF90aHJlYWQ7CiAjZW5kaWYKIAogLyoKQEAgLTIwOSw2ICsyMjYsNyBAQCBzdGF0 aWMgdm9pZCBXYWl0Rm9yVGVybWluYXRpbmdXb3JrZXJzKFBhcmFsbGVsU3RhdGUgKnBzdGF0ZSk7 CiBzdGF0aWMgdm9pZCBzZXRfY2FuY2VsX2hhbmRsZXIodm9pZCk7CiBzdGF0aWMgdm9pZCBzZXRf Y2FuY2VsX3BzdGF0ZShQYXJhbGxlbFN0YXRlICpwc3RhdGUpOwogc3RhdGljIHZvaWQgc2V0X2Nh bmNlbF9zbG90X2FyY2hpdmUoUGFyYWxsZWxTbG90ICpzbG90LCBBcmNoaXZlSGFuZGxlICpBSCk7 CitzdGF0aWMgdm9pZCBTdG9wV29ya2Vycyh2b2lkKTsKIHN0YXRpYyB2b2lkIFJ1bldvcmtlcihB cmNoaXZlSGFuZGxlICpBSCwgUGFyYWxsZWxTbG90ICpzbG90KTsKIHN0YXRpYyBpbnQJR2V0SWRs ZVdvcmtlcihQYXJhbGxlbFN0YXRlICpwc3RhdGUpOwogc3RhdGljIGJvb2wgSGFzRXZlcnlXb3Jr ZXJUZXJtaW5hdGVkKFBhcmFsbGVsU3RhdGUgKnBzdGF0ZSk7CkBAIC00MjQsMzIgKzQ0Miw5IEBA IFNodXRkb3duV29ya2Vyc0hhcmQoUGFyYWxsZWxTdGF0ZSAqcHN0YXRlKQogCS8qCiAJICogRm9y Y2UgZWFybHkgdGVybWluYXRpb24gb2YgYW55IGNvbW1hbmRzIGN1cnJlbnRseSBpbiBwcm9ncmVz cy4KIAkgKi8KLSNpZm5kZWYgV0lOMzIKLQkvKiBPbiBub24tV2luZG93cywgc2VuZCBTSUdURVJN IHRvIGVhY2ggd29ya2VyIHByb2Nlc3MuICovCi0JZm9yIChpID0gMDsgaSA8IHBzdGF0ZS0+bnVt V29ya2VyczsgaSsrKQotCXsKLQkJcGlkX3QJCXBpZCA9IHBzdGF0ZS0+cGFyYWxsZWxTbG90W2ld LnBpZDsKLQotCQlpZiAocGlkICE9IDApCi0JCQlraWxsKHBpZCwgU0lHVEVSTSk7Ci0JfQotI2Vs c2UKLQotCS8qCi0JICogT24gV2luZG93cywgc2VuZCBxdWVyeSBjYW5jZWxzIGRpcmVjdGx5IHRv IHRoZSB3b3JrZXJzJyBiYWNrZW5kcy4gIFVzZQotCSAqIGEgY3JpdGljYWwgc2VjdGlvbiB0byBl bnN1cmUgd29ya2VyIHRocmVhZHMgZG9uJ3QgY2hhbmdlIHN0YXRlLgotCSAqLwotCUVudGVyQ3Jp dGljYWxTZWN0aW9uKCZzaWduYWxfaW5mb19sb2NrKTsKLQlmb3IgKGkgPSAwOyBpIDwgcHN0YXRl LT5udW1Xb3JrZXJzOyBpKyspCi0JewotCQlBcmNoaXZlSGFuZGxlICpBSCA9IHBzdGF0ZS0+cGFy YWxsZWxTbG90W2ldLkFIOwotCQljaGFyCQllcnJidWZbMV07Ci0KLQkJaWYgKEFIICE9IE5VTEwg JiYgQUgtPmNvbm5DYW5jZWwgIT0gTlVMTCkKLQkJCSh2b2lkKSBQUWNhbmNlbChBSC0+Y29ubkNh bmNlbCwgZXJyYnVmLCBzaXplb2YoZXJyYnVmKSk7Ci0JfQotCUxlYXZlQ3JpdGljYWxTZWN0aW9u KCZzaWduYWxfaW5mb19sb2NrKTsKLSNlbmRpZgorCXB0aHJlYWRfbXV0ZXhfbG9jaygmc2lnbmFs X2luZm9fbG9jayk7CisJU3RvcFdvcmtlcnMoKTsKKwlwdGhyZWFkX211dGV4X3VubG9jaygmc2ln bmFsX2luZm9fbG9jayk7CiAKIAkvKiBOb3cgd2FpdCBmb3IgdGhlbSB0byB0ZXJtaW5hdGUuICov CiAJV2FpdEZvclRlcm1pbmF0aW5nV29ya2Vycyhwc3RhdGUpOwpAQCAtNTMzLDc0ICs1MjgsNTQg QEAgV2FpdEZvclRlcm1pbmF0aW5nV29ya2VycyhQYXJhbGxlbFN0YXRlICpwc3RhdGUpCiAgKiBj b3VsZCBsZWF2ZSBhIFNRTCBjb21tYW5kIChlLmcuLCBDUkVBVEUgSU5ERVggb24gYSBsYXJnZSB0 YWJsZSkgcnVubmluZwogICogZm9yIGEgbG9uZyB0aW1lLiAgSW5zdGVhZCwgd2UgdHJ5IHRvIHNl bmQgYSBjYW5jZWwgcmVxdWVzdCBhbmQgdGhlbiBkaWUuCiAgKiBwZ19kdW1wIHByb2JhYmx5IGRv ZXNuJ3QgcmVhbGx5IG5lZWQgdGhpcywgYnV0IHdlIG1pZ2h0IGFzIHdlbGwgdXNlIGl0Ci0gKiB0 aGVyZSB0b28uICBOb3RlIHRoYXQgc2VuZGluZyB0aGUgY2FuY2VsIGRpcmVjdGx5IGZyb20gdGhl IHNpZ25hbCBoYW5kbGVyCi0gKiBpcyBzYWZlIGJlY2F1c2UgUFFjYW5jZWwoKSBpcyB3cml0dGVu IHRvIG1ha2UgaXQgc28uCisgKiB0aGVyZSB0b28uCiAgKgotICogSW4gcGFyYWxsZWwgb3BlcmF0 aW9uIG9uIFVuaXgsIGVhY2ggcHJvY2VzcyBpcyByZXNwb25zaWJsZSBmb3IgY2FuY2VsaW5nCi0g KiBpdHMgb3duIGNvbm5lY3Rpb24gKHRoaXMgbXVzdCBiZSBzbyBiZWNhdXNlIG5vYm9keSBlbHNl IGhhcyBhY2Nlc3MgdG8gaXQpLgotICogRnVydGhlcm1vcmUsIHRoZSBsZWFkZXIgcHJvY2VzcyBz aG91bGQgYXR0ZW1wdCB0byBmb3J3YXJkIGl0cyBzaWduYWwgdG8KLSAqIGVhY2ggY2hpbGQuICBJ biBzaW1wbGUgbWFudWFsIHVzZSBvZiBwZ19kdW1wL3BnX3Jlc3RvcmUsIGZvcndhcmRpbmcgaXNu J3QKLSAqIG5lZWRlZCBiZWNhdXNlIHR5cGluZyBjb250cm9sLUMgYXQgdGhlIGNvbnNvbGUgd291 bGQgZGVsaXZlciBTSUdJTlQgdG8KLSAqIGV2ZXJ5IG1lbWJlciBvZiB0aGUgdGVybWluYWwgcHJv Y2VzcyBncm91cCAtLS0gYnV0IGluIG90aGVyIHNjZW5hcmlvcyBpdAotICogbWlnaHQgYmUgdGhh dCBvbmx5IHRoZSBsZWFkZXIgZ2V0cyBzaWduYWxlZC4KKyAqIE9uIFVuaXgsIHRoZSBzaWduYWwg aGFuZGxlciB3YWtlcyB1cCBhIGRlZGljYXRlZCBjYW5jZWwgdGhyZWFkIHZpYSBhCisgKiBzZWxm LXBpcGUsIHdoaWNoIHRoZW4gc2VuZHMgdGhlIGNhbmNlbCBhbmQgY2FsbHMgX2V4aXQoKS4gIFRo aXMgdGhyZWFkIGFsc28KKyAqIGZvcndhcmRzIHRoZSBzaWduYWwgdG8gZWFjaCBjaGlsZCBzbyB0 aGV5IGNhbiBhbHNvIGNhbmNlbCB0aGVpciBxdWVyaWVzLiBJbgorICogc2ltcGxlIG1hbnVhbCB1 c2Ugb2YgcGdfZHVtcC9wZ19yZXN0b3JlLCBmb3J3YXJkaW5nIGlzbid0IG5lZWRlZCBiZWNhdXNl CisgKiB0eXBpbmcgY29udHJvbC1DIGF0IHRoZSBjb25zb2xlIHdvdWxkIGRlbGl2ZXIgU0lHSU5U IHRvIGV2ZXJ5IG1lbWJlciBvZiB0aGUKKyAqIHRlcm1pbmFsIHByb2Nlc3MgZ3JvdXAgLS0tIGJ1 dCBpbiBvdGhlciBzY2VuYXJpb3MgaXQgbWlnaHQgYmUgdGhhdCBvbmx5IHRoZQorICogbGVhZGVy IGdldHMgc2lnbmFsZWQuCiAgKgogICogT24gV2luZG93cywgdGhlIGNhbmNlbCBoYW5kbGVyIHJ1 bnMgaW4gYSBzZXBhcmF0ZSB0aHJlYWQsIGJlY2F1c2UgdGhhdCdzCiAgKiBob3cgU2V0Q29uc29s ZUN0cmxIYW5kbGVyIHdvcmtzLiAgV2UgbWFrZSBpdCBzdG9wIHdvcmtlciB0aHJlYWRzLCBzZW5k CiAgKiBjYW5jZWxzIG9uIGFsbCBhY3RpdmUgY29ubmVjdGlvbnMsIGFuZCB0aGVuIHJldHVybiBG QUxTRSwgd2hpY2ggd2lsbCBhbGxvdwogICogdGhlIHByb2Nlc3MgdG8gZGllLiAgRm9yIHNhZmV0 eSdzIHNha2UsIHdlIHVzZSBhIGNyaXRpY2FsIHNlY3Rpb24gdG8KLSAqIHByb3RlY3QgdGhlIFBH Y2FuY2VsIHN0cnVjdHVyZXMgYWdhaW5zdCBiZWluZyBjaGFuZ2VkIHdoaWxlIHRoZSBzaWduYWwK KyAqIHByb3RlY3QgdGhlIFBHY2FuY2VsQ29ubiBzdHJ1Y3R1cmVzIGFnYWluc3QgYmVpbmcgY2hh bmdlZCB3aGlsZSB0aGUgc2lnbmFsCiAgKiB0aHJlYWQgcnVucy4KICAqLwogCi0jaWZuZGVmIFdJ TjMyCi0KIC8qCi0gKiBTaWduYWwgaGFuZGxlciAoVW5peCBvbmx5KQorICogQ2FuY2VsIGFsbCBh Y3RpdmUgcXVlcmllcyBhbmQgcHJpbnQgdGVybWluYXRpb24gbWVzc2FnZS4KICAqLwogc3RhdGlj IHZvaWQKLXNpZ1Rlcm1IYW5kbGVyKFNJR05BTF9BUkdTKQorQ2FuY2VsQmFja2VuZHModm9pZCkK IHsKLQlpbnQJCQlpOwotCWNoYXIJCWVycmJ1ZlsxXTsKKwlwdGhyZWFkX211dGV4X2xvY2soJnNp Z25hbF9pbmZvX2xvY2spOwogCi0JLyoKLQkgKiBTb21lIHBsYXRmb3JtcyBhbGxvdyBkZWxpdmVy eSBvZiBuZXcgc2lnbmFscyB0byBpbnRlcnJ1cHQgYW4gYWN0aXZlCi0JICogc2lnbmFsIGhhbmRs ZXIuICBUaGF0IGNvdWxkIG11Y2sgdXAgb3VyIGF0dGVtcHQgdG8gc2VuZCBQUWNhbmNlbCwgc28K LQkgKiBkaXNhYmxlIHRoZSBzaWduYWxzIHRoYXQgc2V0X2NhbmNlbF9oYW5kbGVyIGVuYWJsZWQu Ci0JICovCi0JcHFzaWduYWwoU0lHSU5ULCBTSUdfSUdOKTsKLQlwcXNpZ25hbChTSUdURVJNLCBT SUdfSUdOKTsKLQlwcXNpZ25hbChTSUdRVUlULCBTSUdfSUdOKTsKKwlzaWduYWxfaW5mby5jYW5j ZWxfcmVxdWVzdGVkID0gdHJ1ZTsKIAogCS8qCi0JICogSWYgd2UncmUgaW4gdGhlIGxlYWRlciwg Zm9yd2FyZCBzaWduYWwgdG8gYWxsIHdvcmtlcnMuICAoSXQgc2VlbXMgYmVzdAotCSAqIHRvIGRv IHRoaXMgYmVmb3JlIFBRY2FuY2VsOyBraWxsaW5nIHRoZSBsZWFkZXIgdHJhbnNhY3Rpb24gd2ls bCByZXN1bHQKLQkgKiBpbiBpbnZhbGlkLXNuYXBzaG90IGVycm9ycyBmcm9tIGFjdGl2ZSB3b3Jr ZXJzLCB3aGljaCBtYXliZSB3ZSBjYW4KLQkgKiBxdWlldCBieSBraWxsaW5nIHdvcmtlcnMgZmly c3QuKSAgSWdub3JlIGFueSBlcnJvcnMuCisJICogU3RvcCB3b3JrZXJzIGZpcnN0IHRvIGF2b2lk IGludmFsaWQtc25hcHNob3QgZXJyb3JzIGlmIHRoZSBsZWFkZXIKKwkgKiBjYW5jZWxzIGJlZm9y ZSB3b3JrZXJzLgogCSAqLwotCWlmIChzaWduYWxfaW5mby5wc3RhdGUgIT0gTlVMTCkKLQl7Ci0J CWZvciAoaSA9IDA7IGkgPCBzaWduYWxfaW5mby5wc3RhdGUtPm51bVdvcmtlcnM7IGkrKykKLQkJ ewotCQkJcGlkX3QJCXBpZCA9IHNpZ25hbF9pbmZvLnBzdGF0ZS0+cGFyYWxsZWxTbG90W2ldLnBp ZDsKKwlTdG9wV29ya2VycygpOwogCi0JCQlpZiAocGlkICE9IDApCi0JCQkJa2lsbChwaWQsIFNJ R1RFUk0pOwotCQl9Ci0JfQorCWlmIChzaWduYWxfaW5mby5teUFIICE9IE5VTEwgJiYgc2lnbmFs X2luZm8ubXlBSC0+Y2FuY2VsQ29ubiAhPSBOVUxMKQorCQkodm9pZCkgUFFjYW5jZWxCbG9ja2lu ZyhzaWduYWxfaW5mby5teUFILT5jYW5jZWxDb25uKTsKIAotCS8qCi0JICogU2VuZCBRdWVyeUNh bmNlbCBpZiB3ZSBoYXZlIGEgY29ubmVjdGlvbiB0byBzZW5kIHRvLiAgSWdub3JlIGVycm9ycywK LQkgKiB0aGVyZSdzIG5vdCBtdWNoIHdlIGNhbiBkbyBhYm91dCB0aGVtIGFueXdheS4KLQkgKi8K LQlpZiAoc2lnbmFsX2luZm8ubXlBSCAhPSBOVUxMICYmIHNpZ25hbF9pbmZvLm15QUgtPmNvbm5D YW5jZWwgIT0gTlVMTCkKLQkJKHZvaWQpIFBRY2FuY2VsKHNpZ25hbF9pbmZvLm15QUgtPmNvbm5D YW5jZWwsIGVycmJ1Ziwgc2l6ZW9mKGVycmJ1ZikpOworCXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZz aWduYWxfaW5mb19sb2NrKTsKIAogCS8qCi0JICogUmVwb3J0IHdlJ3JlIHF1aXR0aW5nLCB1c2lu ZyBub3RoaW5nIG1vcmUgY29tcGxpY2F0ZWQgdGhhbiB3cml0ZSgyKS4KLQkgKiBXaGVuIGluIHBh cmFsbGVsIG9wZXJhdGlvbiwgb25seSB0aGUgbGVhZGVyIHByb2Nlc3Mgc2hvdWxkIGRvIHRoaXMu CisJICogUHJpbnQgdGVybWluYXRpb24gbWVzc2FnZS4gSW4gcGFyYWxsZWwgb3BlcmF0aW9uLCBv bmx5IHRoZSBsZWFkZXIKKwkgKiBzaG91bGQgcHJpbnQgdGhpcy4gT24gV2luZG93cywgd29ya2Vy cyBhcmUgdGhyZWFkcyBpbiB0aGUgc2FtZSBwcm9jZXNzCisJICogYW5kIHRoZSBjb25zb2xlIGhh bmRsZXIgb25seSBydW5zIGluIHRoZSBsZWFkZXIgY29udGV4dCwgc28gd2UgY2FuCisJICogYWx3 YXlzIHByaW50IGl0LgogCSAqLworI2lmbmRlZiBXSU4zMgogCWlmICghc2lnbmFsX2luZm8uYW1f d29ya2VyKQorI2VuZGlmCiAJewogCQlpZiAocHJvZ25hbWUpCiAJCXsKQEAgLTYwOSwxNzIgKzU4 NCwyMDggQEAgc2lnVGVybUhhbmRsZXIoU0lHTkFMX0FSR1MpCiAJCX0KIAkJd3JpdGVfc3RkZXJy KCJ0ZXJtaW5hdGVkIGJ5IHVzZXJcbiIpOwogCX0KLQotCS8qCi0JICogQW5kIGRpZSwgdXNpbmcg X2V4aXQoKSBub3QgZXhpdCgpIGJlY2F1c2UgdGhlIGxhdHRlciB3aWxsIGludm9rZSBhdGV4aXQK LQkgKiBoYW5kbGVycyB0aGF0IGNhbiBmYWlsIGlmIHdlIGludGVycnVwdGVkIHJlbGF0ZWQgY29k ZS4KLQkgKi8KLQlfZXhpdCgxKTsKIH0KIAogLyoKLSAqIEVuYWJsZSBjYW5jZWwgaW50ZXJydXB0 IGhhbmRsZXIsIGlmIG5vdCBhbHJlYWR5IGRvbmUuCisgKiBTdG9wIGFsbCB3b3JrZXIgcHJvY2Vz c2VzL3RocmVhZHMuCisgKgorICogT24gVW5peCwgc2VuZCBTSUdURVJNIHRvIGVhY2ggd29ya2Vy IHByb2Nlc3M7IHRoZWlyIHNpZ25hbCBoYW5kbGVycyB3aWxsCisgKiBzZW5kIGNhbmNlbCByZXF1 ZXN0cyB0byB0aGVpciBiYWNrZW5kcy4KKyAqCisgKiBPbiBXaW5kb3dzLCB3b3JrZXJzIGFyZSB0 aHJlYWRzIGluIHRoZSBzYW1lIHByb2Nlc3MsIHNvIHdlIHNlbmQgY2FuY2VsCisgKiByZXF1ZXN0 cyBkaXJlY3RseSB0byB0aGVpciBiYWNrZW5kcy4KKyAqCisgKiBDYWxsZXIgbXVzdCBob2xkIHNp Z25hbF9pbmZvX2xvY2suCiAgKi8KIHN0YXRpYyB2b2lkCi1zZXRfY2FuY2VsX2hhbmRsZXIodm9p ZCkKK1N0b3BXb3JrZXJzKHZvaWQpCiB7Ci0JLyoKLQkgKiBXaGVuIGZvcmtpbmcsIHNpZ25hbF9p bmZvLmhhbmRsZXJfc2V0IHdpbGwgcHJvcGFnYXRlIGludG8gdGhlIG5ldwotCSAqIHByb2Nlc3Ms IGJ1dCB0aGF0J3MgZmluZSBiZWNhdXNlIHRoZSBzaWduYWwgaGFuZGxlciBzdGF0ZSBkb2VzIHRv by4KLQkgKi8KLQlpZiAoIXNpZ25hbF9pbmZvLmhhbmRsZXJfc2V0KQorCWludAkJCWk7CisKKwlp ZiAoc2lnbmFsX2luZm8ucHN0YXRlID09IE5VTEwpCisJCXJldHVybjsKKworCWZvciAoaSA9IDA7 IGkgPCBzaWduYWxfaW5mby5wc3RhdGUtPm51bVdvcmtlcnM7IGkrKykKIAl7Ci0JCXNpZ25hbF9p bmZvLmhhbmRsZXJfc2V0ID0gdHJ1ZTsKKyNpZm5kZWYgV0lOMzIKKwkJcGlkX3QJCXBpZCA9IHNp Z25hbF9pbmZvLnBzdGF0ZS0+cGFyYWxsZWxTbG90W2ldLnBpZDsKIAotCQlwcXNpZ25hbChTSUdJ TlQsIHNpZ1Rlcm1IYW5kbGVyKTsKLQkJcHFzaWduYWwoU0lHVEVSTSwgc2lnVGVybUhhbmRsZXIp OwotCQlwcXNpZ25hbChTSUdRVUlULCBzaWdUZXJtSGFuZGxlcik7CisJCWlmIChwaWQgIT0gMCkK KwkJCWtpbGwocGlkLCBTSUdURVJNKTsKKyNlbHNlCisJCUFyY2hpdmVIYW5kbGUgKkFIID0gc2ln bmFsX2luZm8ucHN0YXRlLT5wYXJhbGxlbFNsb3RbaV0uQUg7CisKKwkJaWYgKEFIICE9IE5VTEwg JiYgQUgtPmNhbmNlbENvbm4gIT0gTlVMTCkKKwkJCSh2b2lkKSBQUWNhbmNlbEJsb2NraW5nKEFI LT5jYW5jZWxDb25uKTsKKyNlbmRpZgogCX0KIH0KIAotI2Vsc2UJCQkJCQkJLyogV0lOMzIgKi8K KyNpZmRlZiBXSU4zMgogCiAvKgogICogQ29uc29sZSBpbnRlcnJ1cHQgaGFuZGxlciAtLS0gcnVu cyBpbiBhIG5ld2x5LXN0YXJ0ZWQgdGhyZWFkLgogICoKLSAqIEFmdGVyIHN0b3BwaW5nIG90aGVy IHRocmVhZHMgYW5kIHNlbmRpbmcgY2FuY2VsIHJlcXVlc3RzIG9uIGFsbCBvcGVuCi0gKiBjb25u ZWN0aW9ucywgd2UgcmV0dXJuIEZBTFNFIHdoaWNoIHdpbGwgYWxsb3cgdGhlIGRlZmF1bHQgRXhp dFByb2Nlc3MoKQotICogYWN0aW9uIHRvIGJlIHRha2VuLgorICogU2VuZCBjYW5jZWwgcmVxdWVz dHMgb24gYWxsIG9wZW4gY29ubmVjdGlvbnMgYW5kIHJldHVybiBGQUxTRSB0byBhbGxvdworICog dGhlIGRlZmF1bHQgRXhpdFByb2Nlc3MoKSBhY3Rpb24gdG8gdGVybWluYXRlIHRoZSBwcm9jZXNz LgogICovCiBzdGF0aWMgQk9PTCBXSU5BUEkKIGNvbnNvbGVIYW5kbGVyKERXT1JEIGR3Q3RybFR5 cGUpCiB7Ci0JaW50CQkJaTsKLQljaGFyCQllcnJidWZbMV07Ci0KIAlpZiAoZHdDdHJsVHlwZSA9 PSBDVFJMX0NfRVZFTlQgfHwKIAkJZHdDdHJsVHlwZSA9PSBDVFJMX0JSRUFLX0VWRU5UKQogCXsK LQkJLyogQ3JpdGljYWwgc2VjdGlvbiBwcmV2ZW50cyBjaGFuZ2luZyBkYXRhIHdlIGxvb2sgYXQg aGVyZSAqLwotCQlFbnRlckNyaXRpY2FsU2VjdGlvbigmc2lnbmFsX2luZm9fbG9jayk7CisJCUNh bmNlbEJhY2tlbmRzKCk7CisJfQogCi0JCS8qCi0JCSAqIElmIGluIHBhcmFsbGVsIG1vZGUsIHN0 b3Agd29ya2VyIHRocmVhZHMgYW5kIHNlbmQgUXVlcnlDYW5jZWwgdG8KLQkJICogdGhlaXIgY29u bmVjdGVkIGJhY2tlbmRzLiAgVGhlIG1haW4gcG9pbnQgb2Ygc3RvcHBpbmcgdGhlIHdvcmtlcgot CQkgKiB0aHJlYWRzIGlzIHRvIGtlZXAgdGhlbSBmcm9tIHJlcG9ydGluZyB0aGUgcXVlcnkgY2Fu Y2VscyBhcyBlcnJvcnMsCi0JCSAqIHdoaWNoIHdvdWxkIGNsdXR0ZXIgdGhlIHVzZXIncyBzY3Jl ZW4uICBXZSBuZWVkbid0IHN0b3AgdGhlIGxlYWRlcgotCQkgKiB0aHJlYWQgc2luY2UgaXQgd29u J3QgYmUgZG9pbmcgbXVjaCBhbnl3YXkuICBEbyB0aGlzIGJlZm9yZQotCQkgKiBjYW5jZWxpbmcg dGhlIG1haW4gdHJhbnNhY3Rpb24sIGVsc2Ugd2UgbWlnaHQgZ2V0IGludmFsaWQtc25hcHNob3QK LQkJICogZXJyb3JzIHJlcG9ydGVkIGJlZm9yZSB3ZSBjYW4gc3RvcCB0aGUgd29ya2Vycy4gIEln bm9yZSBlcnJvcnMsCi0JCSAqIHRoZXJlJ3Mgbm90IG11Y2ggd2UgY2FuIGRvIGFib3V0IHRoZW0g YW55d2F5LgotCQkgKi8KLQkJaWYgKHNpZ25hbF9pbmZvLnBzdGF0ZSAhPSBOVUxMKQorCS8qIEFs d2F5cyByZXR1cm4gRkFMU0UgdG8gYWxsb3cgc2lnbmFsIGhhbmRsaW5nIHRvIGNvbnRpbnVlICov CisJcmV0dXJuIEZBTFNFOworfQorCisjZWxzZQkJCQkJCQkvKiAhV0lOMzIgKi8KKworLyoKKyAq IENhbmNlbCB0aHJlYWQgbWFpbiBmdW5jdGlvbi4gV2FpdHMgZm9yIHRoZSBzaWduYWwgaGFuZGxl ciB0byB3cml0ZSB0byB0aGUKKyAqIHBpcGUsIHRoZW4gY2FuY2VscyBiYWNrZW5kcyBhbmQgY2Fs bHMgX2V4aXQoKS4KKyAqLworc3RhdGljIHZvaWQgKgorY2FuY2VsX3RocmVhZF9tYWluKHZvaWQg KmFyZykKK3sKKwlmb3IgKDs7KQorCXsKKwkJY2hhcgkJYnVmWzE2XTsKKwkJc3NpemVfdAkJcmM7 CisKKwkJLyogV2FpdCBmb3Igc2lnbmFsIGhhbmRsZXIgdG8gd2FrZSB1cyB1cCAqLworCQlyYyA9 IHJlYWQoY2FuY2VsX3BpcGVbMF0sIGJ1Ziwgc2l6ZW9mKGJ1ZikpOworCQlpZiAocmMgPD0gMCkK IAkJewotCQkJZm9yIChpID0gMDsgaSA8IHNpZ25hbF9pbmZvLnBzdGF0ZS0+bnVtV29ya2Vyczsg aSsrKQotCQkJewotCQkJCVBhcmFsbGVsU2xvdCAqc2xvdCA9ICYoc2lnbmFsX2luZm8ucHN0YXRl LT5wYXJhbGxlbFNsb3RbaV0pOwotCQkJCUFyY2hpdmVIYW5kbGUgKkFIID0gc2xvdC0+QUg7Ci0J CQkJSEFORExFCQloVGhyZWFkID0gKEhBTkRMRSkgc2xvdC0+aFRocmVhZDsKLQotCQkJCS8qCi0J CQkJICogVXNpbmcgVGVybWluYXRlVGhyZWFkIGhlcmUgbWF5IGxlYXZlIHNvbWUgcmVzb3VyY2Vz IGxlYWtlZCwKLQkJCQkgKiBidXQgaXQgZG9lc24ndCBtYXR0ZXIgc2luY2Ugd2UncmUgYWJvdXQg dG8gZW5kIHRoZSB3aG9sZQotCQkJCSAqIHByb2Nlc3MuCi0JCQkJICovCi0JCQkJaWYgKGhUaHJl YWQgIT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpCi0JCQkJCVRlcm1pbmF0ZVRocmVhZChoVGhyZWFk LCAwKTsKLQotCQkJCWlmIChBSCAhPSBOVUxMICYmIEFILT5jb25uQ2FuY2VsICE9IE5VTEwpCi0J CQkJCSh2b2lkKSBQUWNhbmNlbChBSC0+Y29ubkNhbmNlbCwgZXJyYnVmLCBzaXplb2YoZXJyYnVm KSk7Ci0JCQl9CisJCQlpZiAoZXJybm8gPT0gRUlOVFIpCisJCQkJY29udGludWU7CisJCQkvKiBQ aXBlIGNsb3NlZCBvciBlcnJvciAtIGV4aXQgdGhyZWFkICovCisJCQlicmVhazsKIAkJfQogCisJ CUNhbmNlbEJhY2tlbmRzKCk7CisKIAkJLyoKLQkJICogU2VuZCBRdWVyeUNhbmNlbCB0byBsZWFk ZXIgY29ubmVjdGlvbiwgaWYgZW5hYmxlZC4gIElnbm9yZSBlcnJvcnMsCi0JCSAqIHRoZXJlJ3Mg bm90IG11Y2ggd2UgY2FuIGRvIGFib3V0IHRoZW0gYW55d2F5LgorCQkgKiBBbmQgZGllLCB1c2lu ZyBfZXhpdCgpIG5vdCBleGl0KCkgYmVjYXVzZSB0aGUgbGF0dGVyIHdpbGwgaW52b2tlCisJCSAq IGF0ZXhpdCBoYW5kbGVycyB0aGF0IGNhbiBmYWlsIGlmIHdlIGludGVycnVwdGVkIHJlbGF0ZWQg Y29kZS4KIAkJICovCi0JCWlmIChzaWduYWxfaW5mby5teUFIICE9IE5VTEwgJiYgc2lnbmFsX2lu Zm8ubXlBSC0+Y29ubkNhbmNlbCAhPSBOVUxMKQotCQkJKHZvaWQpIFBRY2FuY2VsKHNpZ25hbF9p bmZvLm15QUgtPmNvbm5DYW5jZWwsCi0JCQkJCQkJZXJyYnVmLCBzaXplb2YoZXJyYnVmKSk7CisJ CV9leGl0KDEpOworCX0KIAotCQlMZWF2ZUNyaXRpY2FsU2VjdGlvbigmc2lnbmFsX2luZm9fbG9j ayk7CisJcmV0dXJuIE5VTEw7Cit9CiAKLQkJLyoKLQkJICogUmVwb3J0IHdlJ3JlIHF1aXR0aW5n LCB1c2luZyBub3RoaW5nIG1vcmUgY29tcGxpY2F0ZWQgdGhhbgotCQkgKiB3cml0ZSgyKS4gIChX ZSBtaWdodCBiZSBhYmxlIHRvIGdldCBhd2F5IHdpdGggdXNpbmcgcGdfbG9nXyooKQotCQkgKiBo ZXJlLCBidXQgc2luY2Ugd2UgdGVybWluYXRlZCBvdGhlciB0aHJlYWRzIHVuY2xlYW5seSBhYm92 ZSwgaXQKLQkJICogc2VlbXMgYmV0dGVyIHRvIGFzc3VtZSBhcyBsaXR0bGUgYXMgcG9zc2libGUu KQotCQkgKi8KLQkJaWYgKHByb2duYW1lKQotCQl7Ci0JCQl3cml0ZV9zdGRlcnIocHJvZ25hbWUp OwotCQkJd3JpdGVfc3RkZXJyKCI6ICIpOwotCQl9Ci0JCXdyaXRlX3N0ZGVycigidGVybWluYXRl ZCBieSB1c2VyXG4iKTsKKy8qCisgKiBTaWduYWwgaGFuZGxlciAoVW5peCBvbmx5KS4gIFdha2Vz IHVwIHRoZSBjYW5jZWwgdGhyZWFkIGJ5IHdyaXRpbmcgdG8gdGhlCisgKiBwaXBlLgorICovCitz dGF0aWMgdm9pZAorc2lnVGVybUhhbmRsZXIoU0lHTkFMX0FSR1MpCit7CisJaW50CQkJc2F2ZV9l cnJubyA9IGVycm5vOworCWNoYXIJCWMgPSAxOworCisJLyogV2FrZSB1cCB0aGUgY2FuY2VsIHRo cmVhZCAtIHdyaXRlKCkgaXMgYXN5bmMtc2lnbmFsLXNhZmUgKi8KKwlpZiAoY2FuY2VsX3BpcGVb MV0gPj0gMCkKKwl7CisJCWludAkJCXJjID0gd3JpdGUoY2FuY2VsX3BpcGVbMV0sICZjLCAxKTsK KworCQkodm9pZCkgcmM7CiAJfQogCi0JLyogQWx3YXlzIHJldHVybiBGQUxTRSB0byBhbGxvdyBz aWduYWwgaGFuZGxpbmcgdG8gY29udGludWUgKi8KLQlyZXR1cm4gRkFMU0U7CisJZXJybm8gPSBz YXZlX2Vycm5vOwogfQogCisjZW5kaWYJCQkJCQkJLyogV0lOMzIgKi8KKwogLyoKICAqIEVuYWJs ZSBjYW5jZWwgaW50ZXJydXB0IGhhbmRsZXIsIGlmIG5vdCBhbHJlYWR5IGRvbmUuCiAgKi8KIHN0 YXRpYyB2b2lkCiBzZXRfY2FuY2VsX2hhbmRsZXIodm9pZCkKIHsKLQlpZiAoIXNpZ25hbF9pbmZv LmhhbmRsZXJfc2V0KQorCWlmIChzaWduYWxfaW5mby5oYW5kbGVyX3NldCkKKwkJcmV0dXJuOwor CisJc2lnbmFsX2luZm8uaGFuZGxlcl9zZXQgPSB0cnVlOworCisJcHRocmVhZF9tdXRleF9pbml0 KCZzaWduYWxfaW5mb19sb2NrLCBOVUxMKTsKKworI2lmZGVmIFdJTjMyCisJU2V0Q29uc29sZUN0 cmxIYW5kbGVyKGNvbnNvbGVIYW5kbGVyLCBUUlVFKTsKKyNlbHNlCisKKwkvKgorCSAqIENyZWF0 ZSB0aGUgcGlwZSBhbmQgY2FuY2VsIHRocmVhZCAoc2VlIGNvbW1lbnQgb24gY2FuY2VsX3BpcGUg YWJvdmUpLgorCSAqLworCWlmIChwaXBlKGNhbmNlbF9waXBlKSA8IDApCiAJewotCQlzaWduYWxf aW5mby5oYW5kbGVyX3NldCA9IHRydWU7CisJCXBnX2xvZ19lcnJvcigiY291bGQgbm90IGNyZWF0 ZSBwaXBlIGZvciBjYW5jZWw6ICVtIik7CisJCWV4aXQoMSk7CisJfQogCi0JCUluaXRpYWxpemVD cml0aWNhbFNlY3Rpb24oJnNpZ25hbF9pbmZvX2xvY2spOworCS8qCisJICogTWFrZSB0aGUgd3Jp dGUgZW5kIG5vbi1ibG9ja2luZywgc28gdGhhdCB0aGUgc2lnbmFsIGhhbmRsZXIgd29uJ3QgYmxv Y2sKKwkgKiBpZiB0aGUgcGlwZSBidWZmZXIgaXMgZnVsbCAod2hpY2ggaXMgdmVyeSB1bmxpa2Vs eSBpbiBwcmFjdGljZSBidXQKKwkgKiBwb3NzaWJsZSBpbiB0aGVvcnkpLgorCSAqLworCWZjbnRs KGNhbmNlbF9waXBlWzFdLCBGX1NFVEZMLCBPX05PTkJMT0NLKTsKIAotCQlTZXRDb25zb2xlQ3Ry bEhhbmRsZXIoY29uc29sZUhhbmRsZXIsIFRSVUUpOworCXsKKwkJaW50CQkJcmMgPSBwdGhyZWFk X2NyZWF0ZSgmY2FuY2VsX3RocmVhZCwgTlVMTCwgY2FuY2VsX3RocmVhZF9tYWluLCBOVUxMKTsK KworCQlpZiAocmMgIT0gMCkKKwkJeworCQkJcGdfbG9nX2Vycm9yKCJjb3VsZCBub3QgY3JlYXRl IGNhbmNlbCB0aHJlYWQ6ICVzIiwgc3RyZXJyb3IocmMpKTsKKwkJCWV4aXQoMSk7CisJCX0KIAl9 Ci19CiAKLSNlbmRpZgkJCQkJCQkvKiBXSU4zMiAqLworCXBxc2lnbmFsKFNJR0lOVCwgc2lnVGVy bUhhbmRsZXIpOworCXBxc2lnbmFsKFNJR1RFUk0sIHNpZ1Rlcm1IYW5kbGVyKTsKKwlwcXNpZ25h bChTSUdRVUlULCBzaWdUZXJtSGFuZGxlcik7CisjZW5kaWYKK30KIAogCiAvKgogICogc2V0X2Fy Y2hpdmVfY2FuY2VsX2luZm8KICAqCi0gKiBGaWxsIEFILT5jb25uQ2FuY2VsIHdpdGggY2FuY2Vs bGF0aW9uIGluZm8gZm9yIHRoZSBzcGVjaWZpZWQgZGF0YWJhc2UKKyAqIEZpbGwgQUgtPmNhbmNl bENvbm4gd2l0aCBjYW5jZWxsYXRpb24gaW5mbyBmb3IgdGhlIHNwZWNpZmllZCBkYXRhYmFzZQog ICogY29ubmVjdGlvbjsgb3IgY2xlYXIgaXQgaWYgY29ubiBpcyBOVUxMLgogICovCiB2b2lkCiBz ZXRfYXJjaGl2ZV9jYW5jZWxfaW5mbyhBcmNoaXZlSGFuZGxlICpBSCwgUEdjb25uICpjb25uKQog ewotCVBHY2FuY2VsICAgKm9sZENvbm5DYW5jZWw7CisJUEdjYW5jZWxDb25uICpvbGRDYW5jZWxD b25uOwogCiAJLyoKLQkgKiBBY3RpdmF0ZSB0aGUgaW50ZXJydXB0IGhhbmRsZXIgaWYgd2UgZGlk bid0IHlldCBpbiB0aGlzIHByb2Nlc3MuICBPbgotCSAqIFdpbmRvd3MsIHRoaXMgYWxzbyBpbml0 aWFsaXplcyBzaWduYWxfaW5mb19sb2NrOyB0aGVyZWZvcmUgaXQncwotCSAqIGltcG9ydGFudCB0 aGF0IHRoaXMgaGFwcGVuIGF0IGxlYXN0IG9uY2UgYmVmb3JlIHdlIGZvcmsgb2ZmIGFueQotCSAq IHRocmVhZHMuCisJICogQWN0aXZhdGUgdGhlIGludGVycnVwdCBoYW5kbGVyIGlmIHdlIGRpZG4n dCB5ZXQgaW4gdGhpcyBwcm9jZXNzLiAgVGhpcworCSAqIGFsc28gaW5pdGlhbGl6ZXMgc2lnbmFs X2luZm9fbG9jazsgdGhlcmVmb3JlIGl0J3MgaW1wb3J0YW50IHRoYXQgdGhpcworCSAqIGhhcHBl biBhdCBsZWFzdCBvbmNlIGJlZm9yZSB3ZSBmb3JrIG9mZiBhbnkgdGhyZWFkcy4KIAkgKi8KIAlz ZXRfY2FuY2VsX2hhbmRsZXIoKTsKIAogCS8qCi0JICogT24gVW5peCwgd2UgYXNzdW1lIHRoYXQg c3RvcmluZyBhIHBvaW50ZXIgdmFsdWUgaXMgYXRvbWljIHdpdGggcmVzcGVjdAotCSAqIHRvIGFu eSBwb3NzaWJsZSBzaWduYWwgaW50ZXJydXB0LiAgT24gV2luZG93cywgdXNlIGEgY3JpdGljYWwg c2VjdGlvbi4KKwkgKiBVc2UgbXV0ZXggdG8gcHJldmVudCB0aGUgY2FuY2VsIGhhbmRsZXIgZnJv bSB1c2luZyB0aGUgcG9pbnRlciB3aGlsZQorCSAqIHdlJ3JlIGNoYW5naW5nIGl0LgogCSAqLwot Ci0jaWZkZWYgV0lOMzIKLQlFbnRlckNyaXRpY2FsU2VjdGlvbigmc2lnbmFsX2luZm9fbG9jayk7 Ci0jZW5kaWYKKwlwdGhyZWFkX211dGV4X2xvY2soJnNpZ25hbF9pbmZvX2xvY2spOwogCiAJLyog RnJlZSB0aGUgb2xkIG9uZSBpZiB3ZSBoYXZlIG9uZSAqLwotCW9sZENvbm5DYW5jZWwgPSBBSC0+ Y29ubkNhbmNlbDsKKwlvbGRDYW5jZWxDb25uID0gQUgtPmNhbmNlbENvbm47CiAJLyogYmUgc3Vy ZSBpbnRlcnJ1cHQgaGFuZGxlciBkb2Vzbid0IHVzZSBwb2ludGVyIHdoaWxlIGZyZWVpbmcgKi8K LQlBSC0+Y29ubkNhbmNlbCA9IE5VTEw7CisJQUgtPmNhbmNlbENvbm4gPSBOVUxMOwogCi0JaWYg KG9sZENvbm5DYW5jZWwgIT0gTlVMTCkKLQkJUFFmcmVlQ2FuY2VsKG9sZENvbm5DYW5jZWwpOwor CWlmIChvbGRDYW5jZWxDb25uICE9IE5VTEwpCisJCVBRY2FuY2VsRmluaXNoKG9sZENhbmNlbENv bm4pOwogCiAJLyogU2V0IHRoZSBuZXcgb25lIGlmIHNwZWNpZmllZCAqLwogCWlmIChjb25uKQot CQlBSC0+Y29ubkNhbmNlbCA9IFBRZ2V0Q2FuY2VsKGNvbm4pOworCQlBSC0+Y2FuY2VsQ29ubiA9 IFBRY2FuY2VsQ3JlYXRlKGNvbm4pOwogCiAJLyoKIAkgKiBPbiBVbml4LCB0aGVyZSdzIG9ubHkg ZXZlciBvbmUgYWN0aXZlIEFyY2hpdmVIYW5kbGUgcGVyIHByb2Nlc3MsIHNvIHdlCkBAIC03OTAs NDkgKzgwMSwzNSBAQCBzZXRfYXJjaGl2ZV9jYW5jZWxfaW5mbyhBcmNoaXZlSGFuZGxlICpBSCwg UEdjb25uICpjb25uKQogCQlzaWduYWxfaW5mby5teUFIID0gQUg7CiAjZW5kaWYKIAotI2lmZGVm IFdJTjMyCi0JTGVhdmVDcml0aWNhbFNlY3Rpb24oJnNpZ25hbF9pbmZvX2xvY2spOwotI2VuZGlm CisJcHRocmVhZF9tdXRleF91bmxvY2soJnNpZ25hbF9pbmZvX2xvY2spOwogfQogCiAvKgogICog c2V0X2NhbmNlbF9wc3RhdGUKICAqCiAgKiBTZXQgc2lnbmFsX2luZm8ucHN0YXRlIHRvIHBvaW50 IHRvIHRoZSBzcGVjaWZpZWQgUGFyYWxsZWxTdGF0ZSwgaWYgYW55LgotICogV2UgbmVlZCB0aGlz IG1haW5seSB0byBoYXZlIGFuIGludGVybG9jayBhZ2FpbnN0IFdpbmRvd3Mgc2lnbmFsIHRocmVh ZC4KKyAqIFdlIG5lZWQgdGhpcyBtYWlubHkgdG8gaGF2ZSBhbiBpbnRlcmxvY2sgYWdhaW5zdCB0 aGUgY2FuY2VsIGhhbmRsZXIgdGhyZWFkLgogICovCiBzdGF0aWMgdm9pZAogc2V0X2NhbmNlbF9w c3RhdGUoUGFyYWxsZWxTdGF0ZSAqcHN0YXRlKQogewotI2lmZGVmIFdJTjMyCi0JRW50ZXJDcml0 aWNhbFNlY3Rpb24oJnNpZ25hbF9pbmZvX2xvY2spOwotI2VuZGlmCi0KKwlwdGhyZWFkX211dGV4 X2xvY2soJnNpZ25hbF9pbmZvX2xvY2spOwogCXNpZ25hbF9pbmZvLnBzdGF0ZSA9IHBzdGF0ZTsK LQotI2lmZGVmIFdJTjMyCi0JTGVhdmVDcml0aWNhbFNlY3Rpb24oJnNpZ25hbF9pbmZvX2xvY2sp OwotI2VuZGlmCisJcHRocmVhZF9tdXRleF91bmxvY2soJnNpZ25hbF9pbmZvX2xvY2spOwogfQog CiAvKgogICogc2V0X2NhbmNlbF9zbG90X2FyY2hpdmUKICAqCiAgKiBTZXQgUGFyYWxsZWxTbG90 J3MgQUggZmllbGQgdG8gcG9pbnQgdG8gdGhlIHNwZWNpZmllZCBhcmNoaXZlLCBpZiBhbnkuCi0g KiBXZSBuZWVkIHRoaXMgbWFpbmx5IHRvIGhhdmUgYW4gaW50ZXJsb2NrIGFnYWluc3QgV2luZG93 cyBzaWduYWwgdGhyZWFkLgorICogV2UgbmVlZCB0aGlzIG1haW5seSB0byBoYXZlIGFuIGludGVy bG9jayBhZ2FpbnN0IHRoZSBjYW5jZWwgaGFuZGxlciB0aHJlYWQuCiAgKi8KIHN0YXRpYyB2b2lk CiBzZXRfY2FuY2VsX3Nsb3RfYXJjaGl2ZShQYXJhbGxlbFNsb3QgKnNsb3QsIEFyY2hpdmVIYW5k bGUgKkFIKQogewotI2lmZGVmIFdJTjMyCi0JRW50ZXJDcml0aWNhbFNlY3Rpb24oJnNpZ25hbF9p bmZvX2xvY2spOwotI2VuZGlmCi0KKwlwdGhyZWFkX211dGV4X2xvY2soJnNpZ25hbF9pbmZvX2xv Y2spOwogCXNsb3QtPkFIID0gQUg7Ci0KLSNpZmRlZiBXSU4zMgotCUxlYXZlQ3JpdGljYWxTZWN0 aW9uKCZzaWduYWxfaW5mb19sb2NrKTsKLSNlbmRpZgorCXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZz aWduYWxfaW5mb19sb2NrKTsKIH0KIAogCkBAIC05NDcsNyArOTQ0LDcgQEAgUGFyYWxsZWxCYWNr dXBTdGFydChBcmNoaXZlSGFuZGxlICpBSCkKIAogCS8qCiAJICogVGVtcG9yYXJpbHkgZGlzYWJs ZSBxdWVyeSBjYW5jZWxsYXRpb24gb24gdGhlIGxlYWRlciBjb25uZWN0aW9uLiAgVGhpcwotCSAq IGVuc3VyZXMgdGhhdCBjaGlsZCBwcm9jZXNzZXMgd29uJ3QgaW5oZXJpdCB2YWxpZCBBSC0+Y29u bkNhbmNlbAorCSAqIGVuc3VyZXMgdGhhdCBjaGlsZCBwcm9jZXNzZXMgd29uJ3QgaW5oZXJpdCB2 YWxpZCBBSC0+Y2FuY2VsQ29ubgogCSAqIHNldHRpbmdzIGFuZCB0aHVzIHdvbid0IHRyeSB0byBp c3N1ZSBjYW5jZWxzIGFnYWluc3QgdGhlIGxlYWRlcidzCiAJICogY29ubmVjdGlvbi4gIE5vIGhh cm0gaXMgZG9uZSBpZiB3ZSBmYWlsIHdoaWxlIGl0J3MgZGlzYWJsZWQsIGJlY2F1c2UKIAkgKiB0 aGUgbGVhZGVyIGNvbm5lY3Rpb24gaXMgaWRsZSBhdCB0aGlzIHBvaW50IGFueXdheS4KQEAgLTEw MDUsNiArMTAwMiwxNyBAQCBQYXJhbGxlbEJhY2t1cFN0YXJ0KEFyY2hpdmVIYW5kbGUgKkFIKQog CQkJLyogaW5zdHJ1Y3Qgc2lnbmFsIGhhbmRsZXIgdGhhdCB3ZSdyZSBpbiBhIHdvcmtlciBub3cg Ki8KIAkJCXNpZ25hbF9pbmZvLmFtX3dvcmtlciA9IHRydWU7CiAKKwkJCS8qCisJCQkgKiBSZXNl dCBjYW5jZWwgaGFuZGxlciBzdGF0ZSBzbyB0aGF0IHRoZSB3b3JrZXIgd2lsbCBzZXQgdXAgaXRz CisJCQkgKiBvd24gY2FuY2VsIHRocmVhZCB3aGVuIGl0IGNhbGxzIHNldF9hcmNoaXZlX2NhbmNl bF9pbmZvKCkuCisJCQkgKiBUaHJlYWRzIGRvbid0IHN1cnZpdmUgZm9yaygpLCBzbyB3ZSBjYW4n dCB1c2UgdGhlIGxlYWRlcidzLgorCQkJICogQWxzbyBjbG9zZSB0aGUgaW5oZXJpdGVkIHBpcGUg ZmRzLgorCQkJICovCisJCQlzaWduYWxfaW5mby5oYW5kbGVyX3NldCA9IGZhbHNlOworCQkJY2xv c2UoY2FuY2VsX3BpcGVbMF0pOworCQkJY2xvc2UoY2FuY2VsX3BpcGVbMV0pOworCQkJY2FuY2Vs X3BpcGVbMF0gPSBjYW5jZWxfcGlwZVsxXSA9IC0xOworCiAJCQkvKiBjbG9zZSByZWFkIGVuZCBv ZiBXb3JrZXIgLT4gTGVhZGVyICovCiAJCQljbG9zZXNvY2tldChwaXBlV01bUElQRV9SRUFEXSk7 CiAJCQkvKiBjbG9zZSB3cml0ZSBlbmQgb2YgTGVhZGVyIC0+IFdvcmtlciAqLwpAQCAtMTQyMSw4 ICsxNDI5LDE4IEBAIExpc3RlblRvV29ya2VycyhBcmNoaXZlSGFuZGxlICpBSCwgUGFyYWxsZWxT dGF0ZSAqcHN0YXRlLCBib29sIGRvX3dhaXQpCiAKIAlpZiAoIW1zZykKIAl7Ci0JCS8qIElmIGRv X3dhaXQgaXMgdHJ1ZSwgd2UgbXVzdCBoYXZlIGRldGVjdGVkIEVPRiBvbiBzb21lIHNvY2tldCAq LwotCQlpZiAoZG9fd2FpdCkKKwkJLyoKKwkJICogSWYgZG9fd2FpdCBpcyB0cnVlLCB3ZSBtdXN0 IGhhdmUgZGV0ZWN0ZWQgRU9GIG9uIHNvbWUgc29ja2V0LiBJZgorCQkgKiBpdCdzIGR1ZSB0byBh IGNhbmNlbCByZXF1ZXN0LCB0aGF0J3MgZXhwZWN0ZWQsIG90aGVyd2lzZSBpdCdzIGEKKwkJICog cHJvYmxlbS4KKwkJICovCisJCWJvb2wJCWNhbmNlbF9yZXF1ZXN0ZWQ7CisKKwkJcHRocmVhZF9t dXRleF9sb2NrKCZzaWduYWxfaW5mb19sb2NrKTsKKwkJY2FuY2VsX3JlcXVlc3RlZCA9IHNpZ25h bF9pbmZvLmNhbmNlbF9yZXF1ZXN0ZWQ7CisJCXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZzaWduYWxf aW5mb19sb2NrKTsKKworCQlpZiAoZG9fd2FpdCAmJiAhY2FuY2VsX3JlcXVlc3RlZCkKIAkJCXBn X2ZhdGFsKCJhIHdvcmtlciBwcm9jZXNzIGRpZWQgdW5leHBlY3RlZGx5Iik7CiAJCXJldHVybiBm YWxzZTsKIAl9CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVy LmMgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMKaW5kZXggMjcxYTJjM2U0 ODEuLjM2MTVkNDljY2UyIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2Fy Y2hpdmVyLmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5jCkBAIC01 MjA5LDcgKzUyMDksNyBAQCBDbG9uZUFyY2hpdmUoQXJjaGl2ZUhhbmRsZSAqQUgpCiAKIAkvKiBU aGUgY2xvbmUgd2lsbCBoYXZlIGl0cyBvd24gY29ubmVjdGlvbiwgc28gZGlzcmVnYXJkIGNvbm5l Y3Rpb24gc3RhdGUgKi8KIAljbG9uZS0+Y29ubmVjdGlvbiA9IE5VTEw7Ci0JY2xvbmUtPmNvbm5D YW5jZWwgPSBOVUxMOworCWNsb25lLT5jYW5jZWxDb25uID0gTlVMTDsKIAljbG9uZS0+Y3VyclVz ZXIgPSBOVUxMOwogCWNsb25lLT5jdXJyU2NoZW1hID0gTlVMTDsKIAljbG9uZS0+Y3VyclRhYmxl QW0gPSBOVUxMOwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZl ci5oIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5oCmluZGV4IDM2NTA3M2Iz ZWFlLi41NGU0MDk5YmU1MyAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9h cmNoaXZlci5oCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuaApAQCAt Mjg4LDggKzI4OCwxMiBAQCBzdHJ1Y3QgX2FyY2hpdmVIYW5kbGUKIAljaGFyCSAgICpzYXZlZFBh c3N3b3JkOwkvKiBwYXNzd29yZCBmb3Igcm9wdC0+dXNlcm5hbWUsIGlmIGtub3duICovCiAJY2hh cgkgICAqdXNlX3JvbGU7CiAJUEdjb25uCSAgICpjb25uZWN0aW9uOwotCS8qIElmIGNvbm5DYW5j ZWwgaXNuJ3QgTlVMTCwgU0lHSU5UIGhhbmRsZXIgd2lsbCBzZW5kIGEgY2FuY2VsICovCi0JUEdj YW5jZWwgICAqdm9sYXRpbGUgY29ubkNhbmNlbDsKKworCS8qCisJICogSWYgY2FuY2VsQ29ubiBp c24ndCBOVUxMLCBTSUdJTlQgaGFuZGxlciB3aWxsIHRyaWdnZXIgdGhlIGNhbmNlbCB0aHJlYWQK KwkgKiB0byBzZW5kIGEgY2FuY2VsLgorCSAqLworCVBHY2FuY2VsQ29ubiAqY2FuY2VsQ29ubjsK IAogCWludAkJCWNvbm5lY3RUb0RCOwkvKiBGbGFnIHRvIGluZGljYXRlIGlmIGRpcmVjdCBEQiBj b25uZWN0aW9uIGlzCiAJCQkJCQkJCSAqIHJlcXVpcmVkICovCmRpZmYgLS1naXQgYS9zcmMvYmlu L3BnX2R1bXAvcGdfYmFja3VwX2RiLmMgYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2RiLmMK aW5kZXggNWMzNDkyNzliZWIuLjBjYzI5YThhYTcwIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1 bXAvcGdfYmFja3VwX2RiLmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9kYi5jCkBA IC04NCw3ICs4NCw3IEBAIFJlY29ubmVjdFRvU2VydmVyKEFyY2hpdmVIYW5kbGUgKkFILCBjb25z dCBjaGFyICpkYm5hbWUpCiAKIAkvKgogCSAqIE5vdGU6IHdlIHdhbnQgdG8gZXN0YWJsaXNoIHRo ZSBuZXcgY29ubmVjdGlvbiwgYW5kIGluIHBhcnRpY3VsYXIgdXBkYXRlCi0JICogQXJjaGl2ZUhh bmRsZSdzIGNvbm5DYW5jZWwsIGJlZm9yZSBjbG9zaW5nIG9sZCBjb25uZWN0aW9uLiAgT3RoZXJ3 aXNlCisJICogQXJjaGl2ZUhhbmRsZSdzIGNhbmNlbENvbm4sIGJlZm9yZSBjbG9zaW5nIG9sZCBj b25uZWN0aW9uLiAgT3RoZXJ3aXNlCiAJICogYW4gaWxsLXRpbWVkIFNJR0lOVCBjb3VsZCB0cnkg dG8gYWNjZXNzIGEgZGVhZCBjb25uZWN0aW9uLgogCSAqLwogCUFILT5jb25uZWN0aW9uID0gTlVM TDsJCS8qIGRvZGdlIGVycm9yIGNoZWNrIGluIENvbm5lY3REYXRhYmFzZUFoeCAqLwpAQCAtMTY0 LDEyICsxNjQsMTEgQEAgdm9pZAogRGlzY29ubmVjdERhdGFiYXNlKEFyY2hpdmUgKkFIWCkKIHsK IAlBcmNoaXZlSGFuZGxlICpBSCA9IChBcmNoaXZlSGFuZGxlICopIEFIWDsKLQljaGFyCQllcnJi dWZbMV07CiAKIAlpZiAoIUFILT5jb25uZWN0aW9uKQogCQlyZXR1cm47CiAKLQlpZiAoQUgtPmNv bm5DYW5jZWwpCisJaWYgKEFILT5jYW5jZWxDb25uKQogCXsKIAkJLyoKIAkJICogSWYgd2UgaGF2 ZSBhbiBhY3RpdmUgcXVlcnksIHNlbmQgYSBjYW5jZWwgYmVmb3JlIGNsb3NpbmcsIGlnbm9yaW5n CkBAIC0xNzcsNyArMTc2LDcgQEAgRGlzY29ubmVjdERhdGFiYXNlKEFyY2hpdmUgKkFIWCkKIAkJ ICogaGVscGZ1bCBkdXJpbmcgcGdfZmF0YWwoKS4KIAkJICovCiAJCWlmIChQUXRyYW5zYWN0aW9u U3RhdHVzKEFILT5jb25uZWN0aW9uKSA9PSBQUVRSQU5TX0FDVElWRSkKLQkJCSh2b2lkKSBQUWNh bmNlbChBSC0+Y29ubkNhbmNlbCwgZXJyYnVmLCBzaXplb2YoZXJyYnVmKSk7CisJCQkodm9pZCkg UFFjYW5jZWxCbG9ja2luZyhBSC0+Y2FuY2VsQ29ubik7CiAKIAkJLyoKIAkJICogUHJldmVudCBz aWduYWwgaGFuZGxlciBmcm9tIHNlbmRpbmcgYSBjYW5jZWwgYWZ0ZXIgdGhpcy4KLS0gCjIuNTMu MAoK --10040660db950fb953ebdc18175e4815e8f8e944d0cfaf7b25853fb674c8--