Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1tB08F-001LwC-BY for pgsql-bugs@arkaria.postgresql.org; Tue, 12 Nov 2024 23:17:11 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1tB07D-00A1iH-JW for pgsql-bugs@arkaria.postgresql.org; Tue, 12 Nov 2024 23:16:08 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1tB07C-00A1hu-Pz for pgsql-bugs@lists.postgresql.org; Tue, 12 Nov 2024 23:16:07 +0000 Received: from mail-pf1-x431.google.com ([2607:f8b0:4864:20::431]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1tB075-001ZO7-Gg for pgsql-bugs@postgresql.org; Tue, 12 Nov 2024 23:16:05 +0000 Received: by mail-pf1-x431.google.com with SMTP id d2e1a72fcca58-7205b6f51f3so5116351b3a.1 for ; Tue, 12 Nov 2024 15:15:59 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=j-davis-com.20230601.gappssmtp.com; s=20230601; t=1731453358; x=1732058158; darn=postgresql.org; h=mime-version:user-agent:references:in-reply-to:date:cc:to:from :subject:message-id:from:to:cc:subject:date:message-id:reply-to; bh=qjIP9Xk5jtB0IGK3P/ts2Ni/P58tRTzuzndKKKE+9z8=; b=2jZP6swhMCc7+5kVp40eBun4+j5PwcNXPCjf/C9Np4EkrtZMFXEO9nTeDsc2u0rxEu SoIpaxTrAUmXiVXUP52x/omiKZHizW74+cRCue+/f6APB+502SbponBe4hEHBUE+mR0s IaVsaRiwtw4FgFCx8rce3wX9cqjdSQ5Wqk//Fd7VnXxF2rEcN4BWyFyeN+D0kQZ5TqXv BRrwD/lYhRt7zh7Ki5UB6zWz3rX1D7INJpDtVw8qcaQ8pvxsIZGApzfsjQjbPaVtqwSP JtzFojyzpRrxBIsO6wuYTExeRvBUL/05nJtFkd9MQAvEaTb1o+drHvvS+sPsiaK/P9yM i7gw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1731453358; x=1732058158; h=mime-version:user-agent:references:in-reply-to:date:cc:to:from :subject:message-id:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=qjIP9Xk5jtB0IGK3P/ts2Ni/P58tRTzuzndKKKE+9z8=; b=LBQIOlwEhZTnGp3NeH1GAazyQaZ4E8ET+FpV1TGANDyQjqlHt6YBYgySrXjgb4huHo FloI96DrHtcuLuQpmI0m+g/y6Fn1e3q4uwGGMf2VNSrsDdwnwLGDbGbro0slfwELw1ev WKADavdxjejYJcR4VJKEE2xuYG9Kf8AW+p2CH1Gex8InKRJbkapVvVIrF/ZjuE9UGBP6 iNJoyh0+U/QnM0tbvonOW1j4kBJztSAzk7Uevk2l8slJNeUc+IliCklbxP+6cQr/wcqN e5xHdxC6M5lXZ5sRbU+mdFRL5tvMQUWYhOZYda0PmEfZ4JimPDEJcW3UHFK18Xo9LHQM YYwQ== X-Gm-Message-State: AOJu0Yyqrf/8LlI9yq5KJ1pNTDGBIhMU2OzSSiuoSGjKIyy+Tveytsqi X5SGEyeNA/Y3MEaTNGUz2l13QoB46du956uyoV1rCPy84Be5mVD32BerZaRiQw/Eej4hkO7FOiU = X-Google-Smtp-Source: AGHT+IENISfuxakMvSHN789NiPQEgZUt92a3ZQ/MAV0VJi0cNvnGn1AY/i3XIZYCKK8wydof7dunAg== X-Received: by 2002:aa7:88d2:0:b0:71e:e3:608 with SMTP id d2e1a72fcca58-724133a03b9mr20096809b3a.26.1731453357625; Tue, 12 Nov 2024 15:15:57 -0800 (PST) Received: from [172.24.2.43] ([12.126.244.130]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-724079a403fsm12208271b3a.105.2024.11.12.15.15.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 Nov 2024 15:15:56 -0800 (PST) Message-ID: Subject: Re: HashAgg degenerate case From: Jeff Davis To: Andres Freund Cc: pgsql-bugs@postgresql.org Date: Tue, 12 Nov 2024 15:15:55 -0800 In-Reply-To: <3btw7dgj56k5samfzyrxnqdoiocbiycp44osza3iahzn3jqdro@ecxairlbdzqx> References: <4tbbgdqqxvmy37fk75p36azkovyhrjhnul46lntj52jlobphf3@nxaqlaqupg2l> <33bcc1ef6c4acf80f4fb87c4d9d284c61abb3652.camel@j-davis.com> <8c60e698428962f33fdfbfab2206eedba09029fc.camel@j-davis.com> <3btw7dgj56k5samfzyrxnqdoiocbiycp44osza3iahzn3jqdro@ecxairlbdzqx> Content-Type: multipart/mixed; boundary="=-xJ8scdrwohU67i1VLzyR" User-Agent: Evolution 3.44.4-0ubuntu2 MIME-Version: 1.0 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --=-xJ8scdrwohU67i1VLzyR Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Tue, 2024-11-12 at 10:48 -0500, Andres Freund wrote: > That assumes the bucket array is a significant portion of the memory > usage - > but that's not a given, right? TupleHashEntryData is 24 bytes, and a the smallest firstTuple (an integer key and that's it) is 20 bytes plus palloc overhead. So even if the hash table is perfectly full, it can still be ~50% of total memory usage. The fraction can of course be smaller with compound grouping keys and multiple aggregates, but it is still likely to be a significant fraction. For example: create table big(i int, j int); insert into big select g, 1 from generate_series(1,10000000) g; vacuum freeze analyze big; checkpoint; set hash_mem_multiplier =3D 1; set work_mem =3D '430MB'; explain analyze select count(*) from (select i from big group by i) s; At peak, it uses ~630MB total (exceeding the memory limit by 40%), of which ~400MB is in the metacxt. The hashtab has a size of 16777216 and 5896580 members. Due to the cases that cause grow_threshold to be set to zero, the bucket array is often about 3X the number of members just after growing. And if the bucket array consumes most or all of the available memory, that crowds out memory for the next batch, which may recursively spill with a very sparse bucket array. That makes it all the more important that we get that memory usage of the bucket array under control. A silver lining is that smaller hash tables often perform better, so restricting batch size doesn't necessarily cause a regression and may even improve things. I've known this since I originally wrote the disk- based HashAgg, and perhaps we should explore this more. While I'm looking, I also see a couple other areas of potential improvement: * can we reduce the size of TupleHashEntryData by having only one pointer? * it looks like we should be even more aggressive about partitioning widely. Sometimes a larger work mem creates a smaller number of partitions, and it can end up recursing more and producing more total batches > The former seems entirely non-viable on performance grounds. Yeah, I think that was discussed during the original feature development. > =C2=A0 The latter might > be ok, but I'm vary on code complexity grounds. I attached a proof of concept patch, and it does add some complexity, but it's not terrible. If tuplehash is going to be used for large hash tables, I don't think we can hide the doubling nature from the caller forever, assuming that the caller can do something about it (like spill). > What about simply checking whether the bucket array was a significant > portion > of the memory usage at spill time and recreating the hashtable > instead of > resetting IFF it was? I think that would basically solve the degenerate case, but: (a) if "significant" means ~40%, then it will trigger recreation for a lot of cases, and it re-raises the questions about performance regressions; and (b) it doesn't correct the problem where we grow the hashtable just to hold one additional element, causing it to exceed the available memory and not be able to actually use those new buckets. (c) it doesn't prevent overshooting the memory limit by a significant amount A slightly better approach might be to recreate the hashtable if the last batch had a hashtable that is less than 10% filled or something, which will hopefully avoid problem (a). >=20 > I doubt any change around this ought to be backpatched. The > likelihood of > regressions seems to high. Perhaps there's some low-risk change we can make, like having a higher minimum number of groups before spilling, or something like that? I can move this discussion to -hackers until we sort it out. Regards, Jeff Davis --=-xJ8scdrwohU67i1VLzyR Content-Disposition: attachment; filename="v1-0001-simplehash-add-grow_ok-to-API.patch" Content-Type: text/x-patch; name="v1-0001-simplehash-add-grow_ok-to-API.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 RnJvbSBkYzJkOTk3YzFhMWFiZmJlYjA5YmE1YjYzZTBjZWM3ZGYxMDVlOGM1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKZWZmIERhdmlzIDxqZWZmQGotZGF2aXMuY29tPgpEYXRlOiBN b24sIDExIE5vdiAyMDI0IDEzOjU2OjU5IC0wODAwClN1YmplY3Q6IFtQQVRDSCB2MSAxLzJdIHNp bXBsZWhhc2g6IGFkZCAiZ3Jvd19vayIgdG8gQVBJLgoKQWxsb3dzIG1lbW9yeS1zZW5zaXRpdmUg Y2FsbGVycyB0byBhZGQgYW4gZWxlbWVudCBpZmYgaXQgd2lsbCBub3QKY2F1c2UgdGhlIGJ1Y2tl dCBhcnJheSB0byBncm93LgoKV2l0aG91dCB0aGlzIEFQSSwgY2FsbGVycyBzdWNoIGFzIEhhc2hB Z2cgY2Fubm90IGNvbnRyb2wgbWVtb3J5IHVzYWdlCmluY3JlbWVudGFsbHkgYmVjYXVzZSBoYXNo IHRhYmxlIGdyb3d0aCBtZWFucyB0aGF0IHRoZSBzaXplIGRvdWJsZXMuCi0tLQogc3JjL2luY2x1 ZGUvbGliL3NpbXBsZWhhc2guaCB8IDM1ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0t LS0tCiAxIGZpbGUgY2hhbmdlZCwgMzAgaW5zZXJ0aW9ucygrKSwgNSBkZWxldGlvbnMoLSkKCmRp ZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9saWIvc2ltcGxlaGFzaC5oIGIvc3JjL2luY2x1ZGUvbGli L3NpbXBsZWhhc2guaAppbmRleCAzZTFiMWY5NDYxLi4wYmIzYTFjMWUyIDEwMDY0NAotLS0gYS9z cmMvaW5jbHVkZS9saWIvc2ltcGxlaGFzaC5oCisrKyBiL3NyYy9pbmNsdWRlL2xpYi9zaW1wbGVo YXNoLmgKQEAgLTExNSw2ICsxMTUsNyBAQAogI2RlZmluZSBTSF9SRVNFVCBTSF9NQUtFX05BTUUo cmVzZXQpCiAjZGVmaW5lIFNIX0lOU0VSVCBTSF9NQUtFX05BTUUoaW5zZXJ0KQogI2RlZmluZSBT SF9JTlNFUlRfSEFTSCBTSF9NQUtFX05BTUUoaW5zZXJ0X2hhc2gpCisjZGVmaW5lIFNIX0lOU0VS VF9FWFQgU0hfTUFLRV9OQU1FKGluc2VydF9leHQpCiAjZGVmaW5lIFNIX0RFTEVURV9JVEVNIFNI X01BS0VfTkFNRShkZWxldGVfaXRlbSkKICNkZWZpbmUgU0hfREVMRVRFIFNIX01BS0VfTkFNRShk ZWxldGUpCiAjZGVmaW5lIFNIX0xPT0tVUCBTSF9NQUtFX05BTUUobG9va3VwKQpAQCAtMTM1LDcg KzEzNiw3IEBACiAjZGVmaW5lIFNIX0RJU1RBTkNFX0ZST01fT1BUSU1BTCBTSF9NQUtFX05BTUUo ZGlzdGFuY2UpCiAjZGVmaW5lIFNIX0lOSVRJQUxfQlVDS0VUIFNIX01BS0VfTkFNRShpbml0aWFs X2J1Y2tldCkKICNkZWZpbmUgU0hfRU5UUllfSEFTSCBTSF9NQUtFX05BTUUoZW50cnlfaGFzaCkK LSNkZWZpbmUgU0hfSU5TRVJUX0hBU0hfSU5URVJOQUwgU0hfTUFLRV9OQU1FKGluc2VydF9oYXNo X2ludGVybmFsKQorI2RlZmluZSBTSF9JTlNFUlRfRVhUX0lOVEVSTkFMIFNIX01BS0VfTkFNRShp bnNlcnRfZXh0X2ludGVybmFsKQogI2RlZmluZSBTSF9MT09LVVBfSEFTSF9JTlRFUk5BTCBTSF9N QUtFX05BTUUobG9va3VwX2hhc2hfaW50ZXJuYWwpCiAKIC8qIGdlbmVyYXRlIGZvcndhcmQgZGVj bGFyYXRpb25zIG5lY2Vzc2FyeSB0byB1c2UgdGhlIGhhc2ggdGFibGUgKi8KQEAgLTIxNyw2ICsy MTgsMTMgQEAgU0hfU0NPUEUJU0hfRUxFTUVOVF9UWVBFICpTSF9JTlNFUlQoU0hfVFlQRSAqIHRi LCBTSF9LRVlfVFlQRSBrZXksIGJvb2wgKmZvdW5kKTsKIFNIX1NDT1BFCVNIX0VMRU1FTlRfVFlQ RSAqU0hfSU5TRVJUX0hBU0goU0hfVFlQRSAqIHRiLCBTSF9LRVlfVFlQRSBrZXksCiAJCQkJCQkJ CQkJCXVpbnQzMiBoYXNoLCBib29sICpmb3VuZCk7CiAKKy8qCisgKiA8ZWxlbWVudD4gKjxwcmVm aXg+X2luc2VydF9leHQoPHByZWZpeD5faGFzaCAqdGIsIDxrZXk+IGtleSwgdWludDMyIGhhc2gs CisgKiAJCQkJCQkJCSAgYm9vbCBncm93X29rLCBib29sICpmb3VuZCkKKyAqLworU0hfU0NPUEUJ U0hfRUxFTUVOVF9UWVBFICpTSF9JTlNFUlRfRVhUKFNIX1RZUEUgKiB0YiwgU0hfS0VZX1RZUEUg a2V5LAorCQkJCQkJCQkJCSAgIHVpbnQzMiBoYXNoLCBib29sIGdyb3dfb2ssIGJvb2wgKmZvdW5k KTsKKwogLyogPGVsZW1lbnQ+ICo8cHJlZml4Pl9sb29rdXAoPHByZWZpeD5faGFzaCAqdGIsIDxr ZXk+IGtleSkgKi8KIFNIX1NDT1BFCVNIX0VMRU1FTlRfVFlQRSAqU0hfTE9PS1VQKFNIX1RZUEUg KiB0YiwgU0hfS0VZX1RZUEUga2V5KTsKIApAQCAtNjA2LDcgKzYxNCw4IEBAIFNIX0dST1coU0hf VFlQRSAqIHRiLCB1aW50NjQgbmV3c2l6ZSkKICAqIGludG8gaXRzIHdyYXBwZXIgZnVuY3Rpb25z IGV2ZW4gaWYgU0hfU0NPUEUgaXMgZXh0ZXJuLgogICovCiBzdGF0aWMgaW5saW5lIFNIX0VMRU1F TlRfVFlQRSAqCi1TSF9JTlNFUlRfSEFTSF9JTlRFUk5BTChTSF9UWVBFICogdGIsIFNIX0tFWV9U WVBFIGtleSwgdWludDMyIGhhc2gsIGJvb2wgKmZvdW5kKQorU0hfSU5TRVJUX0VYVF9JTlRFUk5B TChTSF9UWVBFICogdGIsIFNIX0tFWV9UWVBFIGtleSwgdWludDMyIGhhc2gsIGJvb2wgZ3Jvd19v aywKKwkJCQkJICAgYm9vbCAqZm91bmQpCiB7CiAJdWludDMyCQlzdGFydGVsZW07CiAJdWludDMy CQljdXJlbGVtOwpAQCAtNjI5LDYgKzYzOCw5IEBAIHJlc3RhcnQ6CiAJCWlmICh1bmxpa2VseSh0 Yi0+c2l6ZSA9PSBTSF9NQVhfU0laRSkpCiAJCQlzaF9lcnJvcigiaGFzaCB0YWJsZSBzaXplIGV4 Y2VlZGVkIik7CiAKKwkJaWYgKCFncm93X29rKQorCQkJcmV0dXJuIE5VTEw7CisKIAkJLyoKIAkJ ICogV2hlbiBvcHRpbWl6aW5nLCBpdCBjYW4gYmUgdmVyeSB1c2VmdWwgdG8gcHJpbnQgdGhlc2Ug b3V0LgogCQkgKi8KQEAgLTc3OCw3ICs3OTAsNyBAQCBTSF9JTlNFUlQoU0hfVFlQRSAqIHRiLCBT SF9LRVlfVFlQRSBrZXksIGJvb2wgKmZvdW5kKQogewogCXVpbnQzMgkJaGFzaCA9IFNIX0hBU0hf S0VZKHRiLCBrZXkpOwogCi0JcmV0dXJuIFNIX0lOU0VSVF9IQVNIX0lOVEVSTkFMKHRiLCBrZXks IGhhc2gsIGZvdW5kKTsKKwlyZXR1cm4gU0hfSU5TRVJUX0VYVF9JTlRFUk5BTCh0Yiwga2V5LCBo YXNoLCB0cnVlLCBmb3VuZCk7CiB9CiAKIC8qCkBAIC03ODksNyArODAxLDIwIEBAIFNIX0lOU0VS VChTSF9UWVBFICogdGIsIFNIX0tFWV9UWVBFIGtleSwgYm9vbCAqZm91bmQpCiBTSF9TQ09QRQlT SF9FTEVNRU5UX1RZUEUgKgogU0hfSU5TRVJUX0hBU0goU0hfVFlQRSAqIHRiLCBTSF9LRVlfVFlQ RSBrZXksIHVpbnQzMiBoYXNoLCBib29sICpmb3VuZCkKIHsKLQlyZXR1cm4gU0hfSU5TRVJUX0hB U0hfSU5URVJOQUwodGIsIGtleSwgaGFzaCwgZm91bmQpOworCXJldHVybiBTSF9JTlNFUlRfRVhU X0lOVEVSTkFMKHRiLCBrZXksIGhhc2gsIHRydWUsIGZvdW5kKTsKK30KKworLyoKKyAqIEluc2Vy dCB0aGUga2V5IGludG8gdGhlIGhhc2gtdGFibGUgdXNpbmcgYW4gYWxyZWFkeS1jYWxjdWxhdGVk IGhhc2guIFNldAorICogKmZvdW5kIHRvIHRydWUgaWYgdGhlIGtleSBhbHJlYWR5IGV4aXN0cywg ZmFsc2Ugb3RoZXJ3aXNlLiBJZiBncm93aW5nIGlzCisgKiBuZWNlc3NhcnksIGFuZCBhbmQgIWdy b3dfb2ssIHJldHVybiBOVUxMOyBvdGhlcndpc2UgcmV0dXJucyB0aGUgaGFzaC10YWJsZQorICog ZW50cnkuCisgKi8KK1NIX1NDT1BFCVNIX0VMRU1FTlRfVFlQRSAqCitTSF9JTlNFUlRfRVhUKFNI X1RZUEUgKiB0YiwgU0hfS0VZX1RZUEUga2V5LCB1aW50MzIgaGFzaCwgYm9vbCBncm93X29rLAor CQkJICBib29sICpmb3VuZCkKK3sKKwlyZXR1cm4gU0hfSU5TRVJUX0VYVF9JTlRFUk5BTCh0Yiwg a2V5LCBoYXNoLCBncm93X29rLCBmb3VuZCk7CiB9CiAKIC8qCkBAIC0xMjAyLDUgKzEyMjcsNSBA QCBTSF9TVEFUKFNIX1RZUEUgKiB0YikKICN1bmRlZiBTSF9QUkVWCiAjdW5kZWYgU0hfRElTVEFO Q0VfRlJPTV9PUFRJTUFMCiAjdW5kZWYgU0hfRU5UUllfSEFTSAotI3VuZGVmIFNIX0lOU0VSVF9I QVNIX0lOVEVSTkFMCisjdW5kZWYgU0hfSU5TRVJUX0VYVF9JTlRFUk5BTAogI3VuZGVmIFNIX0xP T0tVUF9IQVNIX0lOVEVSTkFMCi0tIAoyLjM0LjEKCg== --=-xJ8scdrwohU67i1VLzyR Content-Disposition: attachment; filename*0=v1-0002-HashAgg-avoid-unexpected-hash-table-growth-near-m.pat; filename*1=ch Content-Type: text/x-patch; name="v1-0002-HashAgg-avoid-unexpected-hash-table-growth-near-m.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 RnJvbSBkZWYyNTE2MmFjYWNlOWI5ZmRiMzJiMTg2NWNjYzAzN2RlM2I2OWMxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKZWZmIERhdmlzIDxqZWZmQGotZGF2aXMuY29tPgpEYXRlOiBN b24sIDExIE5vdiAyMDI0IDIxOjI4OjMxIC0wODAwClN1YmplY3Q6IFtQQVRDSCB2MSAyLzJdIEhh c2hBZ2c6IGF2b2lkIHVuZXhwZWN0ZWQgaGFzaCB0YWJsZSBncm93dGggbmVhcgogbWVtb3J5IGxp bWl0LgoKV2hlbiB0aGUgc2ltcGxlaGFzaCB0YWJsZSBzaXplIGlzIGFscmVhZHkgYSBzaWduaWZp Y2FudCBmcmFjdGlvbiBvZgp0aGUgbWVtb3J5LCBhbmQgZ3Jvd2luZyBpdCB3b3VsZCByaXNrIGV4 Y2VlZGluZyB0aGUgbWVtb3J5IGxpbWl0LCB0aGVuCmVudGVyIGEgbW9kZSBpbiB3aGljaCBuZXcg Z3JvdXBzIGNhbiBiZSBhZGRlZCBpZmYgdGhlcmUncyByb29tIGluIHRoZQpleGlzdGluZyBidWNr ZXQgYXJyYXkgKGkuZS4gaXQgd291bGRuJ3QgdHJpZ2dlciBTSF9HUk9XKCkpLgotLS0KIHNyYy9i YWNrZW5kL2V4ZWN1dG9yL2V4ZWNHcm91cGluZy5jIHwgNjEgKysrKysrKysrKysrKysrKysrKysr KysrLS0tLS0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVBZ2cuYyAgICAgIHwgNjEgKysrKysr KysrKysrKysrKysrKysrKystLS0tLS0KIHNyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWN1dG9yLmgg ICAgIHwgMTEgKysrKy0tCiBzcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaCAgICAgICB8ICAz ICstCiA0IGZpbGVzIGNoYW5nZWQsIDExMSBpbnNlcnRpb25zKCspLCAyNSBkZWxldGlvbnMoLSkK CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjR3JvdXBpbmcuYyBiL3NyYy9i YWNrZW5kL2V4ZWN1dG9yL2V4ZWNHcm91cGluZy5jCmluZGV4IDc3NGU0ZGU4ODIuLjQ0ZGM0OGM5 ODEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNHcm91cGluZy5jCisrKyBi L3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNHcm91cGluZy5jCkBAIC0yNSw3ICsyNSw4IEBAIHN0 YXRpYyBpbmxpbmUgdWludDMyIFR1cGxlSGFzaFRhYmxlSGFzaF9pbnRlcm5hbChzdHJ1Y3QgdHVw bGVoYXNoX2hhc2ggKnRiLAogCQkJCQkJCQkJCQkJIGNvbnN0IE1pbmltYWxUdXBsZSB0dXBsZSk7 CiBzdGF0aWMgaW5saW5lIFR1cGxlSGFzaEVudHJ5IExvb2t1cFR1cGxlSGFzaEVudHJ5X2ludGVy bmFsKFR1cGxlSGFzaFRhYmxlIGhhc2h0YWJsZSwKIAkJCQkJCQkJCQkJCQkJICAgVHVwbGVUYWJs ZVNsb3QgKnNsb3QsCi0JCQkJCQkJCQkJCQkJCSAgIGJvb2wgKmlzbmV3LCB1aW50MzIgaGFzaCk7 CisJCQkJCQkJCQkJCQkJCSAgIGJvb2wgZ3Jvd19vaywgYm9vbCAqaXNuZXcsCisJCQkJCQkJCQkJ CQkJCSAgIHVpbnQzMiBoYXNoKTsKIAogLyoKICAqIERlZmluZSBwYXJhbWV0ZXJzIGZvciB0dXBs ZSBoYXNoIHRhYmxlIGNvZGUgZ2VuZXJhdGlvbi4gVGhlIGludGVyZmFjZSBpcwpAQCAtMzIwLDcg KzMyMSw0MiBAQCBMb29rdXBUdXBsZUhhc2hFbnRyeShUdXBsZUhhc2hUYWJsZSBoYXNodGFibGUs IFR1cGxlVGFibGVTbG90ICpzbG90LAogCWhhc2h0YWJsZS0+Y3VyX2VxX2Z1bmMgPSBoYXNodGFi bGUtPnRhYl9lcV9mdW5jOwogCiAJbG9jYWxfaGFzaCA9IFR1cGxlSGFzaFRhYmxlSGFzaF9pbnRl cm5hbChoYXNodGFibGUtPmhhc2h0YWIsIE5VTEwpOwotCWVudHJ5ID0gTG9va3VwVHVwbGVIYXNo RW50cnlfaW50ZXJuYWwoaGFzaHRhYmxlLCBzbG90LCBpc25ldywgbG9jYWxfaGFzaCk7CisJZW50 cnkgPSBMb29rdXBUdXBsZUhhc2hFbnRyeV9pbnRlcm5hbChoYXNodGFibGUsIHNsb3QsIHRydWUs IGlzbmV3LAorCQkJCQkJCQkJCSAgbG9jYWxfaGFzaCk7CisKKwlpZiAoaGFzaCAhPSBOVUxMKQor CQkqaGFzaCA9IGxvY2FsX2hhc2g7CisKKwlBc3NlcnQoZW50cnkgPT0gTlVMTCB8fCBlbnRyeS0+ aGFzaCA9PSBsb2NhbF9oYXNoKTsKKworCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRDb250ZXh0 KTsKKworCXJldHVybiBlbnRyeTsKK30KKworLyoKKyAqIExpa2UgTG9va3VwVHVwbGVIYXNoRW50 cnksIGJ1dCBhbGxvd3Mgc3BlY2lmeWluZyBncm93X29rIHRvIGZhbHNlLCB3aGljaAorICogcHJl dmVudHMgYSBuZXcgZW50cnkgZnJvbSBncm93aW5nIHRoZSBpbnRlcm5hbCBidWNrZXQgYXJyYXku CisgKi8KK1R1cGxlSGFzaEVudHJ5CitMb29rdXBUdXBsZUhhc2hFbnRyeUV4dChUdXBsZUhhc2hU YWJsZSBoYXNodGFibGUsIFR1cGxlVGFibGVTbG90ICpzbG90LAorCQkJCQkJYm9vbCBncm93X29r LCBib29sICppc25ldywgdWludDMyICpoYXNoKQoreworCVR1cGxlSGFzaEVudHJ5IGVudHJ5Owor CU1lbW9yeUNvbnRleHQgb2xkQ29udGV4dDsKKwl1aW50MzIJCWxvY2FsX2hhc2g7CisKKwkvKiBO ZWVkIHRvIHJ1biB0aGUgaGFzaCBmdW5jdGlvbnMgaW4gc2hvcnQtbGl2ZWQgY29udGV4dCAqLwor CW9sZENvbnRleHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oaGFzaHRhYmxlLT50ZW1wY3h0KTsK KworCS8qIHNldCB1cCBkYXRhIG5lZWRlZCBieSBoYXNoIGFuZCBtYXRjaCBmdW5jdGlvbnMgKi8K KwloYXNodGFibGUtPmlucHV0c2xvdCA9IHNsb3Q7CisJaGFzaHRhYmxlLT5pbl9oYXNoX2Z1bmNz ID0gaGFzaHRhYmxlLT50YWJfaGFzaF9mdW5jczsKKwloYXNodGFibGUtPmN1cl9lcV9mdW5jID0g aGFzaHRhYmxlLT50YWJfZXFfZnVuYzsKKworCWxvY2FsX2hhc2ggPSBUdXBsZUhhc2hUYWJsZUhh c2hfaW50ZXJuYWwoaGFzaHRhYmxlLT5oYXNodGFiLCBOVUxMKTsKKwllbnRyeSA9IExvb2t1cFR1 cGxlSGFzaEVudHJ5X2ludGVybmFsKGhhc2h0YWJsZSwgc2xvdCwgZ3Jvd19vaywgaXNuZXcsCisJ CQkJCQkJCQkJICBsb2NhbF9oYXNoKTsKIAogCWlmIChoYXNoICE9IE5VTEwpCiAJCSpoYXNoID0g bG9jYWxfaGFzaDsKQEAgLTM1NiwxMSArMzkyLDEyIEBAIFR1cGxlSGFzaFRhYmxlSGFzaChUdXBs ZUhhc2hUYWJsZSBoYXNodGFibGUsIFR1cGxlVGFibGVTbG90ICpzbG90KQogCiAvKgogICogQSB2 YXJpYW50IG9mIExvb2t1cFR1cGxlSGFzaEVudHJ5IGZvciBjYWxsZXJzIHRoYXQgaGF2ZSBhbHJl YWR5IGNvbXB1dGVkCi0gKiB0aGUgaGFzaCB2YWx1ZS4KKyAqIHRoZSBoYXNoIHZhbHVlLiBBbHNv IGFsbG93cyBzcGVjaWZ5aW5nIGdyb3dfb2sgdG8gZmFsc2UsIHdoaWNoIHByZXZlbnRzIGEKKyAq IG5ldyBlbnRyeSBmcm9tIGdyb3dpbmcgdGhlIGludGVybmFsIGJ1Y2tldCBhcnJheS4KICAqLwog VHVwbGVIYXNoRW50cnkKLUxvb2t1cFR1cGxlSGFzaEVudHJ5SGFzaChUdXBsZUhhc2hUYWJsZSBo YXNodGFibGUsIFR1cGxlVGFibGVTbG90ICpzbG90LAotCQkJCQkJIGJvb2wgKmlzbmV3LCB1aW50 MzIgaGFzaCkKK0xvb2t1cFR1cGxlSGFzaEVudHJ5SGFzaEV4dChUdXBsZUhhc2hUYWJsZSBoYXNo dGFibGUsIFR1cGxlVGFibGVTbG90ICpzbG90LAorCQkJCQkJCWJvb2wgZ3Jvd19vaywgYm9vbCAq aXNuZXcsIHVpbnQzMiBoYXNoKQogewogCVR1cGxlSGFzaEVudHJ5IGVudHJ5OwogCU1lbW9yeUNv bnRleHQgb2xkQ29udGV4dDsKQEAgLTM3Myw3ICs0MTAsOCBAQCBMb29rdXBUdXBsZUhhc2hFbnRy eUhhc2goVHVwbGVIYXNoVGFibGUgaGFzaHRhYmxlLCBUdXBsZVRhYmxlU2xvdCAqc2xvdCwKIAlo YXNodGFibGUtPmluX2hhc2hfZnVuY3MgPSBoYXNodGFibGUtPnRhYl9oYXNoX2Z1bmNzOwogCWhh c2h0YWJsZS0+Y3VyX2VxX2Z1bmMgPSBoYXNodGFibGUtPnRhYl9lcV9mdW5jOwogCi0JZW50cnkg PSBMb29rdXBUdXBsZUhhc2hFbnRyeV9pbnRlcm5hbChoYXNodGFibGUsIHNsb3QsIGlzbmV3LCBo YXNoKTsKKwllbnRyeSA9IExvb2t1cFR1cGxlSGFzaEVudHJ5X2ludGVybmFsKGhhc2h0YWJsZSwg c2xvdCwgZ3Jvd19vaywgaXNuZXcsCisJCQkJCQkJCQkJICBoYXNoKTsKIAlBc3NlcnQoZW50cnkg PT0gTlVMTCB8fCBlbnRyeS0+aGFzaCA9PSBoYXNoKTsKIAogCU1lbW9yeUNvbnRleHRTd2l0Y2hU byhvbGRDb250ZXh0KTsKQEAgLTQ5MCwxMiArNTI4LDE1IEBAIFR1cGxlSGFzaFRhYmxlSGFzaF9p bnRlcm5hbChzdHJ1Y3QgdHVwbGVoYXNoX2hhc2ggKnRiLAogICogc28gdGhhdCB3ZSBjYW4gYXZv aWQgc3dpdGNoaW5nIHRoZSBtZW1vcnkgY29udGV4dCBtdWx0aXBsZSB0aW1lcyBmb3IKICAqIExv b2t1cFR1cGxlSGFzaEVudHJ5LgogICoKKyAqIElmIGdyb3dfb2sgaXMgZmFsc2UsIHJldHVybnMg TlVMTCBpZiBhZGRpbmcgYSBuZXcgZW50cnkgd291bGQgY2F1c2UgdGhlCisgKiBpbnRlcm5hbCB0 dXBsZWhhc2ggYnVja2V0IGFycmF5IHRvIGdyb3cgKHRoYXQgaXMsIHRvIGRvdWJsZSBpbiBzaXpl KS4KKyAqCiAgKiBOQjogVGhpcyBmdW5jdGlvbiBtYXkgb3IgbWF5IG5vdCBjaGFuZ2UgdGhlIG1l bW9yeSBjb250ZXh0LiBDYWxsZXIgaXMKICAqIGV4cGVjdGVkIHRvIGNoYW5nZSBpdCBiYWNrLgog ICovCiBzdGF0aWMgaW5saW5lIFR1cGxlSGFzaEVudHJ5CiBMb29rdXBUdXBsZUhhc2hFbnRyeV9p bnRlcm5hbChUdXBsZUhhc2hUYWJsZSBoYXNodGFibGUsIFR1cGxlVGFibGVTbG90ICpzbG90LAot CQkJCQkJCSAgYm9vbCAqaXNuZXcsIHVpbnQzMiBoYXNoKQorCQkJCQkJCSAgYm9vbCBncm93X29r LCBib29sICppc25ldywgdWludDMyIGhhc2gpCiB7CiAJVHVwbGVIYXNoRW50cnlEYXRhICplbnRy eTsKIAlib29sCQlmb3VuZDsKQEAgLTUwNSwxMSArNTQ2LDExIEBAIExvb2t1cFR1cGxlSGFzaEVu dHJ5X2ludGVybmFsKFR1cGxlSGFzaFRhYmxlIGhhc2h0YWJsZSwgVHVwbGVUYWJsZVNsb3QgKnNs b3QsCiAKIAlpZiAoaXNuZXcpCiAJewotCQllbnRyeSA9IHR1cGxlaGFzaF9pbnNlcnRfaGFzaCho YXNodGFibGUtPmhhc2h0YWIsIGtleSwgaGFzaCwgJmZvdW5kKTsKKwkJZW50cnkgPSB0dXBsZWhh c2hfaW5zZXJ0X2V4dChoYXNodGFibGUtPmhhc2h0YWIsIGtleSwgaGFzaCwgZ3Jvd19vaywKKwkJ CQkJCQkJCSAmZm91bmQpOwogCi0JCWlmIChmb3VuZCkKKwkJaWYgKGVudHJ5ID09IE5VTEwgfHwg Zm91bmQpCiAJCXsKLQkJCS8qIGZvdW5kIHByZS1leGlzdGluZyBlbnRyeSAqLwogCQkJKmlzbmV3 ID0gZmFsc2U7CiAJCX0KIAkJZWxzZQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Iv bm9kZUFnZy5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUFnZy5jCmluZGV4IDUzZWFkNzdl Y2UuLjIyMWNlZTFjZDUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVBZ2cu YworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlQWdnLmMKQEAgLTE0OTQsNiArMTQ5NCw3 IEBAIGJ1aWxkX2hhc2hfdGFibGVzKEFnZ1N0YXRlICphZ2dzdGF0ZSkKIAl9CiAKIAlhZ2dzdGF0 ZS0+aGFzaF9uZ3JvdXBzX2N1cnJlbnQgPSAwOworCWFnZ3N0YXRlLT5oYXNoX2dyb3dfb2sgPSB0 cnVlOwogfQogCiAvKgpAQCAtMTg2MSw2ICsxODYyLDE5IEBAIGhhc2hfYWdnX2NoZWNrX2xpbWl0 cyhBZ2dTdGF0ZSAqYWdnc3RhdGUpCiAJU2l6ZQkJaGFzaGtleV9tZW0gPSBNZW1vcnlDb250ZXh0 TWVtQWxsb2NhdGVkKGFnZ3N0YXRlLT5oYXNoY29udGV4dC0+ZWN4dF9wZXJfdHVwbGVfbWVtb3J5 LAogCQkJCQkJCQkJCQkJCQl0cnVlKTsKIAorCS8qCisJICogVGhlIGJ1Y2tldCBhcnJheSBpcyBz dG9yZWQgaW4gaGFzaF9tZXRhY3h0LCBhbmQgZWFjaCB0aW1lIGl0IGdyb3dzLCBpdAorCSAqIGRv dWJsZXMuIElmIGRvdWJsaW5nIHRoZSBidWNrZXQgYXJyYXkgd291bGQgcHV0IHVzIG92ZXIgdGhl IG1lbW9yeQorCSAqIGxpbWl0LCB0aGVuIHdlIG11c3Qgc2V0IGhhc2hfZ3Jvd19vayB0byBmYWxz ZSB0byBwcmV2ZW50IGl0LgorCSAqCisJICogV2hlbiBtdWx0aXBsZSBncm91cGluZyBzZXRzIGFy ZSBpbnZvbHZlZCwgdGhpcyBjYWxjdWxhdGlvbiBpcyBvdmVybHkKKwkgKiBjb25zZXJ2YXRpdmUs IGJlY2F1c2UgZ3Jvd2luZyBhIHNpbmdsZSBoYXNodGFibGUgd2lsbCBub3QgZG91YmxlIHRoZQor CSAqIG92ZXJhbGwgbWV0YV9tZW0uIEJ1dCB0aGF0IG9ubHkgYWZmZWN0cyB0aGUgZmlyc3QgYmF0 Y2g7IHN1YnNlcXVlbnQKKwkgKiBiYXRjaGVzIG9ubHkgZGVhbCB3aXRoIGEgc2luZ2xlIGdyb3Vw aW5nIHNldCBhdCBhIHRpbWUuCisJICovCisJaWYgKG1ldGFfbWVtICogMiArIGhhc2hrZXlfbWVt ID4gYWdnc3RhdGUtPmhhc2hfbWVtX2xpbWl0KQorCQlhZ2dzdGF0ZS0+aGFzaF9ncm93X29rID0g ZmFsc2U7CisKIAkvKgogCSAqIERvbid0IHNwaWxsIHVubGVzcyB0aGVyZSdzIGF0IGxlYXN0IG9u ZSBncm91cCBpbiB0aGUgaGFzaCB0YWJsZSBzbyB3ZQogCSAqIGNhbiBiZSBzdXJlIHRvIG1ha2Ug cHJvZ3Jlc3MgZXZlbiBpbiBlZGdlIGNhc2VzLgpAQCAtMjEwMyw3ICsyMTE3LDcgQEAgbG9va3Vw X2hhc2hfZW50cmllcyhBZ2dTdGF0ZSAqYWdnc3RhdGUpCiAJCUFnZ1N0YXRlUGVySGFzaCBwZXJo YXNoID0gJmFnZ3N0YXRlLT5wZXJoYXNoW3NldG5vXTsKIAkJVHVwbGVIYXNoVGFibGUgaGFzaHRh YmxlID0gcGVyaGFzaC0+aGFzaHRhYmxlOwogCQlUdXBsZVRhYmxlU2xvdCAqaGFzaHNsb3QgPSBw ZXJoYXNoLT5oYXNoc2xvdDsKLQkJVHVwbGVIYXNoRW50cnkgZW50cnk7CisJCVR1cGxlSGFzaEVu dHJ5IGVudHJ5ID0gTlVMTDsKIAkJdWludDMyCQloYXNoOwogCQlib29sCQlpc25ldyA9IGZhbHNl OwogCQlib29sCSAgICpwX2lzbmV3OwpAQCAtMjExNiwxNiArMjEzMCwyNSBAQCBsb29rdXBfaGFz aF9lbnRyaWVzKEFnZ1N0YXRlICphZ2dzdGF0ZSkKIAkJCQkJCSAgb3V0ZXJzbG90LAogCQkJCQkJ ICBoYXNoc2xvdCk7CiAKLQkJZW50cnkgPSBMb29rdXBUdXBsZUhhc2hFbnRyeShoYXNodGFibGUs IGhhc2hzbG90LAotCQkJCQkJCQkJIHBfaXNuZXcsICZoYXNoKTsKLQotCQlpZiAoZW50cnkgIT0g TlVMTCkKKwkJZW50cnkgPSBMb29rdXBUdXBsZUhhc2hFbnRyeUV4dChoYXNodGFibGUsIGhhc2hz bG90LAorCQkJCQkJCQkJCWFnZ3N0YXRlLT5oYXNoX2dyb3dfb2ssCisJCQkJCQkJCQkJcF9pc25l dywgJmhhc2gpOworCQlpZiAoZW50cnkpCiAJCXsKIAkJCWlmIChpc25ldykKIAkJCQlpbml0aWFs aXplX2hhc2hfZW50cnkoYWdnc3RhdGUsIGhhc2h0YWJsZSwgZW50cnkpOwogCQkJcGVyZ3JvdXBb c2V0bm9dID0gZW50cnktPmFkZGl0aW9uYWw7CiAJCX0KLQkJZWxzZQorCQllbHNlIGlmICghYWdn c3RhdGUtPmhhc2hfc3BpbGxfbW9kZSkKKwkJeworCQkJLyoKKwkJCSAqIE5ldyBlbnRyeSB3b3Vs ZCBncm93IGhhc2ggdGFibGUgYnVja2V0IGFycmF5LCBhbmQgbWF5IHB1dCB1cworCQkJICogb3Zl ciB0aGUgbWVtb3J5IGxpbWl0LgorCQkJICovCisJCQloYXNoX2FnZ19lbnRlcl9zcGlsbF9tb2Rl KGFnZ3N0YXRlKTsKKwkJfQorCisJCWlmICghZW50cnkpCiAJCXsKIAkJCUhhc2hBZ2dTcGlsbCAq c3BpbGwgPSAmYWdnc3RhdGUtPmhhc2hfc3BpbGxzW3NldG5vXTsKIAkJCVR1cGxlVGFibGVTbG90 ICpzbG90ID0gYWdnc3RhdGUtPnRtcGNvbnRleHQtPmVjeHRfb3V0ZXJ0dXBsZTsKQEAgLTI2MjYs NiArMjY0OSw3IEBAIGFnZ19yZWZpbGxfaGFzaF90YWJsZShBZ2dTdGF0ZSAqYWdnc3RhdGUpCiAJ CVJlc2V0VHVwbGVIYXNoVGFibGUoYWdnc3RhdGUtPnBlcmhhc2hbc2V0bm9dLmhhc2h0YWJsZSk7 CiAKIAlhZ2dzdGF0ZS0+aGFzaF9uZ3JvdXBzX2N1cnJlbnQgPSAwOworCWFnZ3N0YXRlLT5oYXNo X2dyb3dfb2sgPSB0cnVlOwogCiAJLyoKIAkgKiBJbiBBR0dfTUlYRUQgbW9kZSwgaGFzaCBhZ2dy ZWdhdGlvbiBoYXBwZW5zIGluIHBoYXNlIDEgYW5kIHRoZSBvdXRwdXQKQEAgLTI2NTYsNyArMjY4 MCw3IEBAIGFnZ19yZWZpbGxfaGFzaF90YWJsZShBZ2dTdGF0ZSAqYWdnc3RhdGUpCiAJewogCQlU dXBsZVRhYmxlU2xvdCAqc3BpbGxzbG90ID0gYWdnc3RhdGUtPmhhc2hfc3BpbGxfcnNsb3Q7CiAJ CVR1cGxlVGFibGVTbG90ICpoYXNoc2xvdCA9IHBlcmhhc2gtPmhhc2hzbG90OwotCQlUdXBsZUhh c2hFbnRyeSBlbnRyeTsKKwkJVHVwbGVIYXNoRW50cnkgZW50cnkgPSBOVUxMOwogCQlNaW5pbWFs VHVwbGUgdHVwbGU7CiAJCXVpbnQzMgkJaGFzaDsKIAkJYm9vbAkJaXNuZXcgPSBmYWxzZTsKQEAg LTI2NzQsMTcgKzI2OTgsMjggQEAgYWdnX3JlZmlsbF9oYXNoX3RhYmxlKEFnZ1N0YXRlICphZ2dz dGF0ZSkKIAkJcHJlcGFyZV9oYXNoX3Nsb3QocGVyaGFzaCwKIAkJCQkJCSAgYWdnc3RhdGUtPnRt cGNvbnRleHQtPmVjeHRfb3V0ZXJ0dXBsZSwKIAkJCQkJCSAgaGFzaHNsb3QpOwotCQllbnRyeSA9 IExvb2t1cFR1cGxlSGFzaEVudHJ5SGFzaChwZXJoYXNoLT5oYXNodGFibGUsIGhhc2hzbG90LAot CQkJCQkJCQkJCSBwX2lzbmV3LCBoYXNoKTsKIAotCQlpZiAoZW50cnkgIT0gTlVMTCkKKwkJZW50 cnkgPSBMb29rdXBUdXBsZUhhc2hFbnRyeUhhc2hFeHQocGVyaGFzaC0+aGFzaHRhYmxlLCBoYXNo c2xvdCwKKwkJCQkJCQkJCQkJdHJ1ZSwgcF9pc25ldywKKwkJCQkJCQkJCQkJaGFzaCk7CisKKwkJ aWYgKGVudHJ5KQogCQl7CiAJCQlpZiAoaXNuZXcpCiAJCQkJaW5pdGlhbGl6ZV9oYXNoX2VudHJ5 KGFnZ3N0YXRlLCBwZXJoYXNoLT5oYXNodGFibGUsIGVudHJ5KTsKIAkJCWFnZ3N0YXRlLT5oYXNo X3Blcmdyb3VwW2JhdGNoLT5zZXRub10gPSBlbnRyeS0+YWRkaXRpb25hbDsKIAkJCWFkdmFuY2Vf YWdncmVnYXRlcyhhZ2dzdGF0ZSk7CiAJCX0KLQkJZWxzZQorCQllbHNlIGlmICghYWdnc3RhdGUt Pmhhc2hfc3BpbGxfbW9kZSkKKwkJeworCQkJLyoKKwkJCSAqIE5ldyBlbnRyeSB3b3VsZCBncm93 IGhhc2ggdGFibGUgYnVja2V0IGFycmF5LCBhbmQgbWF5IHB1dCB1cworCQkJICogb3ZlciB0aGUg bWVtb3J5IGxpbWl0LgorCQkJICovCisJCQloYXNoX2FnZ19lbnRlcl9zcGlsbF9tb2RlKGFnZ3N0 YXRlKTsKKwkJfQorCisJCWlmICghZW50cnkpCiAJCXsKIAkJCWlmICghc3BpbGxfaW5pdGlhbGl6 ZWQpCiAJCQl7CkBAIC0yNzIzLDYgKzI3NTgsNyBAQCBhZ2dfcmVmaWxsX2hhc2hfdGFibGUoQWdn U3RhdGUgKmFnZ3N0YXRlKQogCWVsc2UKIAkJaGFzaF9hZ2dfdXBkYXRlX21ldHJpY3MoYWdnc3Rh dGUsIHRydWUsIDApOwogCisJYWdnc3RhdGUtPmhhc2hfZ3Jvd19vayA9IHRydWU7CiAJYWdnc3Rh dGUtPmhhc2hfc3BpbGxfbW9kZSA9IGZhbHNlOwogCiAJLyogcHJlcGFyZSB0byB3YWxrIHRoZSBm aXJzdCBoYXNoIHRhYmxlICovCkBAIC0zMDgyLDYgKzMxMTgsNyBAQCBoYXNoYWdnX2ZpbmlzaF9p bml0aWFsX3NwaWxscyhBZ2dTdGF0ZSAqYWdnc3RhdGUpCiAKIAloYXNoX2FnZ191cGRhdGVfbWV0 cmljcyhhZ2dzdGF0ZSwgZmFsc2UsIHRvdGFsX25wYXJ0aXRpb25zKTsKIAlhZ2dzdGF0ZS0+aGFz aF9zcGlsbF9tb2RlID0gZmFsc2U7CisJYWdnc3RhdGUtPmhhc2hfZ3Jvd19vayA9IHRydWU7CiB9 CiAKIC8qCkBAIC0zMjI1LDYgKzMyNjIsNyBAQCBFeGVjSW5pdEFnZyhBZ2cgKm5vZGUsIEVTdGF0 ZSAqZXN0YXRlLCBpbnQgZWZsYWdzKQogCWFnZ3N0YXRlLT5ncnBfZmlyc3RUdXBsZSA9IE5VTEw7 CiAJYWdnc3RhdGUtPnNvcnRfaW4gPSBOVUxMOwogCWFnZ3N0YXRlLT5zb3J0X291dCA9IE5VTEw7 CisJYWdnc3RhdGUtPmhhc2hfZ3Jvd19vayA9IHRydWU7CiAKIAkvKgogCSAqIHBoYXNlc1swXSBh bHdheXMgZXhpc3RzLCBidXQgaXMgZHVtbXkgaW4gc29ydGVkL3BsYWluIG1vZGUKQEAgLTQ0NDks NiArNDQ4Nyw3IEBAIEV4ZWNSZVNjYW5BZ2coQWdnU3RhdGUgKm5vZGUpCiAJewogCQloYXNoYWdn X3Jlc2V0X3NwaWxsX3N0YXRlKG5vZGUpOwogCisJCW5vZGUtPmhhc2hfZ3Jvd19vayA9IHRydWU7 CiAJCW5vZGUtPmhhc2hfZXZlcl9zcGlsbGVkID0gZmFsc2U7CiAJCW5vZGUtPmhhc2hfc3BpbGxf bW9kZSA9IGZhbHNlOwogCQlub2RlLT5oYXNoX25ncm91cHNfY3VycmVudCA9IDA7CmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjdXRvci5oIGIvc3JjL2luY2x1ZGUvZXhlY3V0 b3IvZXhlY3V0b3IuaAppbmRleCA2OWMzZWJmZjAwLi4xMDBmYWNkMTU1IDEwMDY0NAotLS0gYS9z cmMvaW5jbHVkZS9leGVjdXRvci9leGVjdXRvci5oCisrKyBiL3NyYy9pbmNsdWRlL2V4ZWN1dG9y L2V4ZWN1dG9yLmgKQEAgLTE1MiwxMSArMTUyLDE2IEBAIGV4dGVybiBUdXBsZUhhc2hUYWJsZSBC dWlsZFR1cGxlSGFzaFRhYmxlRXh0KFBsYW5TdGF0ZSAqcGFyZW50LAogZXh0ZXJuIFR1cGxlSGFz aEVudHJ5IExvb2t1cFR1cGxlSGFzaEVudHJ5KFR1cGxlSGFzaFRhYmxlIGhhc2h0YWJsZSwKIAkJ CQkJCQkJCQkgICBUdXBsZVRhYmxlU2xvdCAqc2xvdCwKIAkJCQkJCQkJCQkgICBib29sICppc25l dywgdWludDMyICpoYXNoKTsKK2V4dGVybiBUdXBsZUhhc2hFbnRyeSBMb29rdXBUdXBsZUhhc2hF bnRyeUV4dChUdXBsZUhhc2hUYWJsZSBoYXNodGFibGUsCisJCQkJCQkJCQkJCSAgVHVwbGVUYWJs ZVNsb3QgKnNsb3QsCisJCQkJCQkJCQkJCSAgYm9vbCBncm93X29rLCBib29sICppc25ldywKKwkJ CQkJCQkJCQkJICB1aW50MzIgKmhhc2gpOwogZXh0ZXJuIHVpbnQzMiBUdXBsZUhhc2hUYWJsZUhh c2goVHVwbGVIYXNoVGFibGUgaGFzaHRhYmxlLAogCQkJCQkJCQkgVHVwbGVUYWJsZVNsb3QgKnNs b3QpOwotZXh0ZXJuIFR1cGxlSGFzaEVudHJ5IExvb2t1cFR1cGxlSGFzaEVudHJ5SGFzaChUdXBs ZUhhc2hUYWJsZSBoYXNodGFibGUsCi0JCQkJCQkJCQkJCSAgIFR1cGxlVGFibGVTbG90ICpzbG90 LAotCQkJCQkJCQkJCQkgICBib29sICppc25ldywgdWludDMyIGhhc2gpOworZXh0ZXJuIFR1cGxl SGFzaEVudHJ5IExvb2t1cFR1cGxlSGFzaEVudHJ5SGFzaEV4dChUdXBsZUhhc2hUYWJsZSBoYXNo dGFibGUsCisJCQkJCQkJCQkJCQkgIFR1cGxlVGFibGVTbG90ICpzbG90LAorCQkJCQkJCQkJCQkJ ICBib29sIGdyb3dfb2ssIGJvb2wgKmlzbmV3LAorCQkJCQkJCQkJCQkJICB1aW50MzIgaGFzaCk7 CiBleHRlcm4gVHVwbGVIYXNoRW50cnkgRmluZFR1cGxlSGFzaEVudHJ5KFR1cGxlSGFzaFRhYmxl IGhhc2h0YWJsZSwKIAkJCQkJCQkJCQkgVHVwbGVUYWJsZVNsb3QgKnNsb3QsCiAJCQkJCQkJCQkJ IEV4cHJTdGF0ZSAqZXFjb21wLApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25v ZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaAppbmRleCAxODJhNjk1NmJiLi4w YzI1ZDcwNmY5IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaAorKysg Yi9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaApAQCAtMjU0Myw2ICsyNTQzLDcgQEAgdHlw ZWRlZiBzdHJ1Y3QgQWdnU3RhdGUKIAlUdXBsZVRhYmxlU2xvdCAqaGFzaF9zcGlsbF9yc2xvdDsJ LyogZm9yIHJlYWRpbmcgc3BpbGwgZmlsZXMgKi8KIAlUdXBsZVRhYmxlU2xvdCAqaGFzaF9zcGls bF93c2xvdDsJLyogZm9yIHdyaXRpbmcgc3BpbGwgZmlsZXMgKi8KIAlMaXN0CSAgICpoYXNoX2Jh dGNoZXM7CS8qIGhhc2ggYmF0Y2hlcyByZW1haW5pbmcgdG8gYmUgcHJvY2Vzc2VkICovCisJYm9v bAkgICAgaGFzaF9ncm93X29rOwogCWJvb2wJCWhhc2hfZXZlcl9zcGlsbGVkOwkvKiBldmVyIHNw aWxsZWQgZHVyaW5nIHRoaXMgZXhlY3V0aW9uPyAqLwogCWJvb2wJCWhhc2hfc3BpbGxfbW9kZTsJ Lyogd2UgaGl0IGEgbGltaXQgZHVyaW5nIHRoZSBjdXJyZW50IGJhdGNoCiAJCQkJCQkJCQkgKiBh bmQgd2UgbXVzdCBub3QgY3JlYXRlIG5ldyBncm91cHMgKi8KQEAgLTI1NjIsNyArMjU2Myw3IEBA IHR5cGVkZWYgc3RydWN0IEFnZ1N0YXRlCiAJCQkJCQkJCQkJICogcGVyLWdyb3VwIHBvaW50ZXJz ICovCiAKIAkvKiBzdXBwb3J0IGZvciBldmFsdWF0aW9uIG9mIGFnZyBpbnB1dCBleHByZXNzaW9u czogKi8KLSNkZWZpbmUgRklFTEROT19BR0dTVEFURV9BTExfUEVSR1JPVVBTIDUzCisjZGVmaW5l IEZJRUxETk9fQUdHU1RBVEVfQUxMX1BFUkdST1VQUyA1NAogCUFnZ1N0YXRlUGVyR3JvdXAgKmFs bF9wZXJncm91cHM7CS8qIGFycmF5IG9mIGZpcnN0IC0+cGVyZ3JvdXBzLCB0aGFuCiAJCQkJCQkJ CQkJICogLT5oYXNoX3Blcmdyb3VwICovCiAJU2hhcmVkQWdnSW5mbyAqc2hhcmVkX2luZm87IC8q IG9uZSBlbnRyeSBwZXIgd29ya2VyICovCi0tIAoyLjM0LjEKCg== --=-xJ8scdrwohU67i1VLzyR--