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 1w7GTs-00584Q-1s for pgsql-hackers@arkaria.postgresql.org; Mon, 30 Mar 2026 17:32:52 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w7GTr-00583R-0T for pgsql-hackers@arkaria.postgresql.org; Mon, 30 Mar 2026 17:32:51 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1w7GTq-00583J-2M for pgsql-hackers@lists.postgresql.org; Mon, 30 Mar 2026 17:32:51 +0000 Received: from mail-qt1-x835.google.com ([2607:f8b0:4864:20::835]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w7GTo-0000000226N-20eh for pgsql-hackers@lists.postgresql.org; Mon, 30 Mar 2026 17:32:50 +0000 Received: by mail-qt1-x835.google.com with SMTP id d75a77b69052e-509069a7a7fso46581cf.0 for ; Mon, 30 Mar 2026 10:32:48 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1774891967; cv=none; d=google.com; s=arc-20240605; b=cK882D+w6sABlqU7sLKkuGYhmXb+xZJij7+17CP8MwEWnrHW742vXnFs7E0dMObE0p Rz5/BK4O8rwjjSnHfzFaB+0t8xkGO4XnNHqlvQXg21hQrLNcZUT75en6xZR6nRiSYsup P4rTkfQHeQe/ZdX5AoO4MmCu0REnxKLc+bIohYPIu16FvUvzDn95mOIF2eMnTuEt5740 6ElQV0v4ndFFWQGF1a0S4yWyRs9epAwIhT13rBoUkrt1HiIFfsRJgE2RLuiA49pvnxC/ cgOqfVej+cNCoHYKW1DtDqUbK2JFa/hP6mjBTRiGE3DA9CoS/0tkt7ilsIBBqeebBJdI /Kqg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=PuT2VrHp7rQZLn7FYybqiG3u1N6dqxinB1ZHqII6MuU=; fh=U43DneXOTMpBmONTZuSx309qNZ/7Ib6aNJZE+qrU2EA=; b=TK3E9EjE/RSjKRJE5WufodIB1LSjOi+TesYqPe97aX9xP3aVwlxlwCMyijqrRrNd0E VBLLpjuI2+bJqHmZlGI7EYZikutXRJMdknT4hROK1PxSjgi50F2cPj12hw1p5gwdmHpJ solFjzaxsJ7Io16xVMsVbnupixtzswdBkPcdCOCIUE9yUSvIMGStXSmoFGRj1bgyTFfs zsRPiR5lL9ZTYe/DSUKIoLsAf3tXHrJYhGhjrQ8TmHEt6kJNm/3sEyep4rHCGa5SjGzS oUan2HvRPEFyxh3OBFOmpvaMjtYrthK3GEOh5frV5RUtEAYd+aZZf4FCBPkozTC5mLvM YEbA==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1774891967; x=1775496767; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=PuT2VrHp7rQZLn7FYybqiG3u1N6dqxinB1ZHqII6MuU=; b=nRGrbfy/NwqrMkokramYfm/xW4QviV1n3Wz/eakn9mHo+jci8xQtzexOiXPmny/hjp 2F1RspwUcUumOSW0dV7UFBmDTOZ3OWWH8JBB9XIX6OIxmH0eKPN2y2BjHVdmo8GIjfra EHujRF2VniVfVGafeN/QmgNED6NZiR0uiDMqihNiFbTc/42XLQ7819E2iohfYFrFf6UR olZcvSVyXNS/gUo2tPgZdW/LV0CdKp81+yUnyVF3Xy3iY1dfH662koCCPoNWdcYC+mp1 Y7as6BcJyRFBB7x6Fim18vle3vIzqBvYsv8k+6rgSS1mx26YFdHiWSrciVu1oBqhLe3Z KdwA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774891967; x=1775496767; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=PuT2VrHp7rQZLn7FYybqiG3u1N6dqxinB1ZHqII6MuU=; b=seR9xhnd07757fW3zj0+k9ZSRSDlFaT838EQ1XHC8fTl86Aw9gNH2C7ZTsxKp4WGy0 KINWVho2j/RljwTX2kUVtHJHX1uJKJw5kgpzLEdtt1oOclYJWKd+C7ZPPwjkhsBCJlEq UoUNUXYAmxpVvSbHavnsSHKv2kT+uX3+OsiN6/sbUuT7lP34l+Ix411fmiynS0Ug1+0u Odqwgi6r5jFG2dEGMIkIxipztf5GXajnIjvzjIZr2smA8FHR2LW4KGr9+NaniHYkNJ/2 PV1aeuhD+SYt+Y0bbj/nLFXHLSod2NKMrW96ytw/+W2bRjWX4zFmhgsSidjaYXCnMtlX 6dAg== X-Gm-Message-State: AOJu0YyZe+2Qqy3Muen0em7v0DjLw7TJyae+OkkaqtKSjNkznb6JbxfN Brz/Uk1Dt30bRBuuFZvqQfMaGCdVYXw4OFo5fD90l1nyVbaZtuH2+dNe+vIQttT8mGRWUbwTQ3X S+YvGImdhxC3PnBlUkohEhluiscov0Nt5ber88CHSzxvI4j2hvOMKBVaA4j0= X-Gm-Gg: ATEYQzyZnr2FGNTyThxod4r+Fx/xtV9PuxMyvi+TeDM6slNov6mexSV0iVlmkwzDpCF QJYZAjdGKDNnWRgN5cJY/7HsGjgDiVL/M72Hhoa7CIrQbhyDCQgFgWEpGyFzbmX1TZT/sh9PzCh Vo2t6HueQMUWafZVmkciJ2k2dkIQuDHGC+ARURgaM+c8y6d5KPuKWG+twl1fOdWvE0R1FZvseRQ 2J4HN0N9SJTv4lwONGNPs10/eA2Yj2iA/rBtfgxlrqisw8wlnxruUu0S8qReBnuak3Ca1TjyXz0 BokM+rMFM+TFa0LpWgUPFpI+VKMUJuQli5H78MBtni7DT/ExZg== X-Received: by 2002:a05:622a:8d0f:b0:509:15b6:f69f with SMTP id d75a77b69052e-50d2d41d66emr656161cf.2.1774891966100; Mon, 30 Mar 2026 10:32:46 -0700 (PDT) MIME-Version: 1.0 References: <69c7bad1.050a0220.346c9.c80cSMTPIN_ADDED_BROKEN@mx.google.com> In-Reply-To: From: Hannu Krosing Date: Mon, 30 Mar 2026 19:32:34 +0200 X-Gm-Features: AQROBzB3oqJ2Ilh4L6rho9noDHE1w-nZgEyCRjwUh_l6OxDxlLh3-sSYeO05g04 Message-ID: Subject: Re: Patch: dumping tables data in multiple chunks in pg_dump To: PostgreSQL Hackers Cc: David Rowley , Michael Banck , Ashutosh Bapat , Nathan Bossart Content-Type: multipart/mixed; boundary="0000000000002857fc064e413d9e" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000002857fc064e413d9e Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Now the dependencies on chunks should also behave correctly On Sun, Mar 29, 2026 at 11:49=E2=80=AFPM Hannu Krosing = wrote: > > Fixing a off-by-one error in copying over dependencies > > > On Sat, Mar 28, 2026 at 4:33=E2=80=AFPM Hannu Krosing = wrote: > > > > The above > > > > "Or it can be almost 200 GB if the page has just pointers to 1GB TOAST = items." > > > > should read > > > > "Or it can be almost 200 GB *for a single page* if the page has just > > pointers to 1GB TOAST items." > > > > > > On Sat, Mar 28, 2026 at 4:32=E2=80=AFPM Hannu Krosing wrote: > > > > > > The issue is that currently the value is given in "main table pages" > > > and it would be somewhat deceptive, or at least confusing, to try to > > > express this in any other unit. > > > > > > As I explained in the commit message: > > > > > > ---------8<-------------------8<-------------------8<---------------- > > > This --max-table-segment-pages number specifically applies to main ta= ble > > > pages which does not guarantee anything about output size. > > > The output could be empty if there are no live tuples in the page ran= ge. > > > Or it can be almost 200 GB if the page has just pointers to 1GB TOAST= items. > > > ---------8<-------------------8<-------------------8<---------------- > > > > > > And I can think of no cheap and reliable way to change that equation. > > > > > > I'll be very happy if you have any good ideas for either improving th= e > > > flag name, or even propose a way to better estimate the resulting dum= p > > > file size so we could give the chunk size in better units > > > > > > --- > > > Hannu > > > > > > > > > > > > > > > > > > On Sat, Mar 28, 2026 at 12:26=E2=80=AFPM Michael Banck wrote: > > > > > > > > Hi, > > > > > > > > On Tue, Jan 13, 2026 at 03:27:25PM +1300, David Rowley wrote: > > > > > Perhaps --max-table-segment-pages is a better name than > > > > > --huge-table-chunk-pages as it's quite subjective what the minimu= m > > > > > number of pages required to make a table "huge". > > > > > > > > I'm not sure that's better - without looking at the documentation, > > > > people might confuse segment here with the 1GB split of tables into > > > > segments. As pg_dump is a very common and basic user tool, I don't = think > > > > implementation details like pages/page sizes and blocks should be p= art > > > > of its UX. > > > > > > > > Can't we just make it a storage size, like '10GB' and then rename i= t to > > > > --table-parallel-threshold or something? I agree it's bikeshedding,= but > > > > I personally don't like either --max-table-segment-pages or > > > > --huge-table-chunk-pages. > > > > > > > > > > > > Michael --0000000000002857fc064e413d9e Content-Type: application/x-patch; name="v16-0001-Add-max-table-segment-pages-option-to-pg_dump-fo.patch" Content-Disposition: attachment; filename="v16-0001-Add-max-table-segment-pages-option-to-pg_dump-fo.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mndgtlo60 RnJvbSBiMGQyN2IzMmMxN2QxZTA5Zjk0ODRhODFiM2QzYzM1ODFkMTkwYWRiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBIYW5udSBLcm9zaW5nIDxoYW5udWtAZ29vZ2xlLmNvbT4KRGF0 ZTogTW9uLCAzMCBNYXIgMjAyNiAxOToyODo0NSArMDIwMApTdWJqZWN0OiBbUEFUQ0ggdjE2XSBB ZGQgLS1tYXgtdGFibGUtc2VnbWVudC1wYWdlcyBvcHRpb24gdG8gcGdfZHVtcCBmb3IKIHBhcmFs bGVsIHRhYmxlIGR1bXBpbmcuCgpUaGlzIHBhdGNoIGludHJvZHVjZXMgdGhlIGFiaWxpdHkgdG8g c3BsaXQgbGFyZ2UgaGVhcCB0YWJsZXMgaW50byBzZWdtZW50cwpiYXNlZCBvbiBhIHNwZWNpZmll ZCBudW1iZXIgb2YgcGFnZXMuIFRoZXNlIHNlZ21lbnRzIGNhbiB0aGVuIGJlIGR1bXBlZCBpbgpw YXJhbGxlbCB1c2luZyB0aGUgZXhpc3Rpbmcgam9icyBpbmZyYXN0cnVjdHVyZSwgc2lnbmlmaWNh bnRseSByZWR1Y2luZwp0aGUgdGltZSByZXF1aXJlZCB0byBkdW1wIHZlcnkgbGFyZ2UgdGFibGVz LgoKVGhpcyAtLW1heC10YWJsZS1zZWdtZW50LXBhZ2VzIG51bWJlciBzcGVjaWZpY2FsbHkgYXBw bGllcyB0byBtYWluIHRhYmxlCnBhZ2VzIHdoaWNoIGRvZXMgbm90IGd1YXJhbnRlZSBhbnl0aGlu ZyBhYm91dCBvdXRwdXQgc2l6ZS4KVGhlIG91dHB1dCBjb3VsZCBiZSBlbXB0eSBpZiB0aGVyZSBh cmUgbm8gbGl2ZSB0dXBsZXMgaW4gdGhlIHBhZ2UgcmFuZ2UuCk9yIGl0IGNhbiBiZSBhbG1vc3Qg MjAwIEdCIGlmIHRoZSBwYWdlIGhhcyBqdXN0IHBvaW50ZXJzIHRvIDFHQiBUT0FTVCBpdGVtcy4K ClRoZSBpbXBsZW1lbnRhdGlvbiB1c2VzIGN0aWQtYmFzZWQgcmFuZ2UgcXVlcmllcyAoZS5nLiwg V0hFUkUgY3RpZCA+PQonKHN0YXJ0UGFnZSwxKScgQU5EIGN0aWQgPCAnKGVuZFBhZ2UrMSwwKScp IHRvIGV4dHJhY3Qgc3BlY2lmaWMgY2h1bmtzIG9mCnRoZSByZWxhdGlvbi4KClRoaXMgaXMgb25s eSBlZmZlY3RpdmVseSBzdXBwb3J0ZWQgZm9yIFBvc3RncmVTUUwgdmVyc2lvbiAxNCsgdGhvdWdo IGl0IGRvZXMKd29yayBpbmVmZmljaWVudGx5IG9uIGVhcmxpZXIgdmVyc2lvbnMKClRoZSBwYXRj aCBvbmx5IHN1cHBvcnRzICJoZWFwIiBhY2Nlc3MgbWV0aG9kIGFzIG90aGVycyBtYXkgbm90IGV2 ZW4gaGF2ZSB0aGUKY3RpZCBjb2x1bW4KLS0tCiBkb2Mvc3JjL3NnbWwvcmVmL3BnX2R1bXAuc2dt bCAgICAgICAgICAgICB8ICAyNCArKysKIHNyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXAuaCAgICAg ICAgICAgICAgIHwgICAyICsKIHNyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuYyAg ICAgIHwgIDkyICsrKysrKysrKystCiBzcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVy LmggICAgICB8ICAxMiArLQogc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYyAgICAgICAgICAgICAg ICAgfCAxNzcgKysrKysrKysrKysrKysrKystLS0tLQogc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAu aCAgICAgICAgICAgICAgICAgfCAgMjIgKystCiBzcmMvYmluL3BnX2R1bXAvdC8wMDRfcGdfZHVt cF9wYXJhbGxlbC5wbCB8ICAzMSArKysrCiBzcmMvZmVfdXRpbHMvb3B0aW9uX3V0aWxzLmMgICAg ICAgICAgICAgICB8ICA1NSArKysrKysrCiBzcmMvaW5jbHVkZS9mZV91dGlscy9vcHRpb25fdXRp bHMuaCAgICAgICB8ICAgMyArCiA5IGZpbGVzIGNoYW5nZWQsIDM2OCBpbnNlcnRpb25zKCspLCA1 MCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvcmVmL3BnX2R1bXAuc2dt bCBiL2RvYy9zcmMvc2dtbC9yZWYvcGdfZHVtcC5zZ21sCmluZGV4IDdmNTM4ZTkwMTk0Li41ZjA1 NmJiNGFmNiAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3JlZi9wZ19kdW1wLnNnbWwKKysrIGIv ZG9jL3NyYy9zZ21sL3JlZi9wZ19kdW1wLnNnbWwKQEAgLTEwNjYsNiArMTA2NiwzMCBAQCBQb3N0 Z3JlU1FMIGRvY3VtZW50YXRpb24KICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgIDwvdmFybGlzdGVu dHJ5PgogCisgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICA8dGVybT48b3B0aW9uPi0tbWF4LXRh YmxlLXNlZ21lbnQtcGFnZXM9PHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPm5wYWdlczwv cmVwbGFjZWFibGU+PC9vcHRpb24+PC90ZXJtPgorICAgICAgPGxpc3RpdGVtPgorICAgICAgIDxw YXJhPgorICAgICAgICBEdW1wIGRhdGEgaW4gc2VnbWVudHMgYmFzZWQgb24gbnVtYmVyIG9mIHBh Z2VzIGluIHRoZSBtYWluIHJlbGF0aW9uLgorICAgICAgICBJZiB0aGUgbnVtYmVyIG9mIGRhdGEg cGFnZXMgaW4gdGhlIHJlbGF0aW9uIGlzIG1vcmUgdGhhbiA8cmVwbGFjZWFibGUgY2xhc3M9InBh cmFtZXRlciI+bnBhZ2VzPC9yZXBsYWNlYWJsZT4gCisgICAgICAgIHRoZSBkYXRhIGlzIHNwbGl0 IGludG8gc2VnbWVudHMgYmFzZWQgb24gdGhhdCBudW1iZXIgb2YgcGFnZXMuCisgICAgICAgIElu ZGl2aWR1YWwgc2VnbWVudHMgY2FuIGJlIGR1bXBlZCBpbiBwYXJhbGxlbC4KKyAgICAgICA8L3Bh cmE+CisKKyAgICAgICA8bm90ZT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICBUaGUgb3B0aW9u IDxvcHRpb24+LS1tYXgtdGFibGUtc2VnbWVudC1wYWdlczwvb3B0aW9uPiBpcyBhcHBsaWVkIHRv IG9ubHkgcGFnZXMKKyAgICAgICAgIGluIHRoZSBtYWluIGhlYXAgYW5kIGlmIHRoZSB0YWJsZSBo YXMgYSBsYXJnZSBUT0FTVGVkIHBhcnQgdGhpcyBoYXMgdG8gYmUKKyAgICAgICAgIHRha2VuIGlu dG8gYWNjb3VudCB3aGVuIGRlY2lkaW5nIG9uIHRoZSBudW1iZXIgb2YgcGFnZXMgdG8gdXNlLgor ICAgICAgICAgSW4gdGhlIGV4dHJlbWUgY2FzZSBhIHNpbmdsZSA4a0IgaGVhcCBwYWdlIGNhbiBo YXZlIH4yMDAgdG9hc3QgcG9pbnRlcnMgZWFjaCAKKyAgICAgICAgIGNvcnJlc3BvbmRpbmcgdG8g MUdCIG9mIGRhdGEuIElmIHRoaXMgZGF0YSBpcyBhbHNvIG5vbi1jb21wcmVzc2libGUgdGhlbiBh IAorICAgICAgICAgc2luZ2xlLXBhZ2Ugc2VnbWVudCBjYW4gZHVtcCBhcyAyMDBHQiBmaWxlLgor ICAgICAgICA8L3BhcmE+CisgICAgICAgPC9ub3RlPgorCisgICAgICA8L2xpc3RpdGVtPgorICAg ICA8L3Zhcmxpc3RlbnRyeT4KKwogICAgICA8dmFybGlzdGVudHJ5PgogICAgICAgPHRlcm0+PG9w dGlvbj4tLW5vLWNvbW1lbnRzPC9vcHRpb24+PC90ZXJtPgogICAgICAgPGxpc3RpdGVtPgpkaWZm IC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cC5oIGIvc3JjL2Jpbi9wZ19kdW1wL3Bn X2JhY2t1cC5oCmluZGV4IGZkYTkxMmJhMGE5Li4xMTg2M2ExOTE1ZiAxMDA2NDQKLS0tIGEvc3Jj L2Jpbi9wZ19kdW1wL3BnX2JhY2t1cC5oCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXAu aApAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgImNvbW1vbi9maWxlX3V0aWxzLmgiCiAjaW5j bHVkZSAiZmVfdXRpbHMvc2ltcGxlX2xpc3QuaCIKICNpbmNsdWRlICJsaWJwcS1mZS5oIgorI2lu Y2x1ZGUgInN0b3JhZ2UvYmxvY2suaCIKIAogCiB0eXBlZGVmIGVudW0gdHJpdmFsdWUKQEAgLTE3 OSw2ICsxODAsNyBAQCB0eXBlZGVmIHN0cnVjdCBfZHVtcE9wdGlvbnMKIAlib29sCQlhY2xzU2tp cDsKIAljb25zdCBjaGFyICpsb2NrV2FpdFRpbWVvdXQ7CiAJaW50CQkJZHVtcF9pbnNlcnRzOwkv KiAwID0gQ09QWSwgb3RoZXJ3aXNlIHJvd3MgcGVyIElOU0VSVCAqLworCUJsb2NrTnVtYmVyCW1h eF90YWJsZV9zZWdtZW50X3BhZ2VzOyAvKiBjaHVuayB3aGVuIHJlbHBhZ2VzIGlzIGFib3ZlIHRo aXMgKi8KIAogCS8qIGZsYWdzIGZvciB2YXJpb3VzIGNvbW1hbmQtbGluZSBsb25nIG9wdGlvbnMg Ki8KIAlpbnQJCQlkaXNhYmxlX2RvbGxhcl9xdW90aW5nOwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9w Z19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5jIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9h cmNoaXZlci5jCmluZGV4IDI3MWEyYzNlNDgxLi5lMzJiZDgxNDljYiAxMDA2NDQKLS0tIGEvc3Jj L2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9w Z19iYWNrdXBfYXJjaGl2ZXIuYwpAQCAtNDQsNiArNDQsNyBAQAogI2luY2x1ZGUgInBnX2JhY2t1 cF9hcmNoaXZlci5oIgogI2luY2x1ZGUgInBnX2JhY2t1cF9kYi5oIgogI2luY2x1ZGUgInBnX2Jh Y2t1cF91dGlscy5oIgorI2luY2x1ZGUgInN0b3JhZ2UvYmxvY2suaCIKIAogI2RlZmluZSBURVhU X0RVTVBfSEVBREVSICItLVxuLS0gUG9zdGdyZVNRTCBkYXRhYmFzZSBkdW1wXG4tLVxuXG4iCiAj ZGVmaW5lIFRFWFRfRFVNUEFMTF9IRUFERVIgIi0tXG4tLSBQb3N0Z3JlU1FMIGRhdGFiYXNlIGNs dXN0ZXIgZHVtcFxuLS1cblxuIgpAQCAtMTU0LDYgKzE1NSw3IEBAIEluaXREdW1wT3B0aW9ucyhE dW1wT3B0aW9ucyAqb3B0cykKIAlvcHRzLT5kdW1wU2NoZW1hID0gdHJ1ZTsKIAlvcHRzLT5kdW1w RGF0YSA9IHRydWU7CiAJb3B0cy0+ZHVtcFN0YXRpc3RpY3MgPSBmYWxzZTsKKwlvcHRzLT5tYXhf dGFibGVfc2VnbWVudF9wYWdlcyA9IEludmFsaWRCbG9ja051bWJlcjsKIH0KIAogLyoKQEAgLTE5 OTUsNiArMTk5NywyOCBAQCBfbW92ZUJlZm9yZShUb2NFbnRyeSAqcG9zLCBUb2NFbnRyeSAqdGUp CiAJcG9zLT5wcmV2ID0gdGU7CiB9CiAKKy8qCisgKiBBZGQgYSBkZXBlbmRlbmN5IGlkIHRvIGEg RGVwZW5kZW5jeUxpc3Qgb2JqZWN0CisgKiBUaGlzIGlzIGN1cnJlbnRseSB1c2VkIGZvciBjb2xs ZWN0aW5nIHJldmVyc2UgCisgKiBkZXBlbmRlbmNpZXMgZm9yIGNodW5rZWQgZGF0YSBkdW1wIAor ICoKKyAqIE5vdGU6IGR1cGxpY2F0ZSBkZXBlbmRlbmNpZXMgYXJlIGN1cnJlbnRseSBub3QgZWxp bWluYXRlZAorICovCit2b2lkCithZGRTdGFuZGFsb25lRGVwZW5kZW5jeShEZXBlbmRlbmN5TGlz dCAqZG9iaiwgRHVtcElkIHJlZklkKQoreworCXBnX2xvZ193YXJuaW5nKCJBZGRpbmcgZGVwOiBs aXN0ICVwICsgZGVwICV1IiwgKHZvaWQgKikgZG9iai0+ZGVwZW5kZW5jaWVzLCByZWZJZCk7CisJ aWYgKGRvYmotPm5EZXBzID49IGRvYmotPmFsbG9jRGVwcykKKwl7CisJCWRvYmotPmFsbG9jRGVw cyA9IChkb2JqLT5hbGxvY0RlcHMgPD0gMCkgPyAxNiA6IGRvYmotPmFsbG9jRGVwcyAqIDI7CisJ CWRvYmotPmRlcGVuZGVuY2llcyA9IHBnX3JlYWxsb2NfYXJyYXkoZG9iai0+ZGVwZW5kZW5jaWVz LAorCQkJCQkJCQkJCQkgIER1bXBJZCwgZG9iai0+YWxsb2NEZXBzKTsKKwkJcGdfbG9nX3dhcm5p bmcoIlJlYWxsb2NlZCBsaXN0ICVwIHRvIHNpemUgJWQiLCAodm9pZCAqKSBkb2JqLT5kZXBlbmRl bmNpZXMsIGRvYmotPmFsbG9jRGVwcyk7CisJfQorCXBnX2xvZ193YXJuaW5nKCJBZGRlZCBkZXA6 IGxpc3QgJXAgKyBkZXAgJXUiLCAodm9pZCAqKSBkb2JqLT5kZXBlbmRlbmNpZXMsIHJlZklkKTsK Kwlkb2JqLT5kZXBlbmRlbmNpZXNbZG9iai0+bkRlcHMrK10gPSByZWZJZDsKK30KKwogLyoKICAq IEJ1aWxkIGluZGV4IGFycmF5cyBmb3IgdGhlIFRPQyBsaXN0CiAgKgpAQCAtMjAxNCw2ICsyMDM4 LDcgQEAgYnVpbGRUb2NFbnRyeUFycmF5cyhBcmNoaXZlSGFuZGxlICpBSCkKIAogCUFILT50b2Nz QnlEdW1wSWQgPSBwZ19tYWxsb2MwX2FycmF5KFRvY0VudHJ5ICosIChtYXhEdW1wSWQgKyAxKSk7 CiAJQUgtPnRhYmxlRGF0YUlkID0gcGdfbWFsbG9jMF9hcnJheShEdW1wSWQsIChtYXhEdW1wSWQg KyAxKSk7CisJQUgtPnRhYmxlRGF0YUNodW5rSWRzID0gcGdfbWFsbG9jMF9hcnJheShEZXBlbmRl bmN5TGlzdCwgKG1heER1bXBJZCArIDEpKTsKIAogCWZvciAodGUgPSBBSC0+dG9jLT5uZXh0OyB0 ZSAhPSBBSC0+dG9jOyB0ZSA9IHRlLT5uZXh0KQogCXsKQEAgLTIwMjksOCArMjA1NCwxMiBAQCBi dWlsZFRvY0VudHJ5QXJyYXlzKEFyY2hpdmVIYW5kbGUgKkFIKQogCQkgKiBUT0MgZW50cnkgdGhh dCBoYXMgYSBEQVRBIGl0ZW0uICBXZSBjb21wdXRlIHRoaXMgYnkgcmV2ZXJzaW5nIHRoZQogCQkg KiBUQUJMRSBEQVRBIGl0ZW0ncyBkZXBlbmRlbmN5LCBrbm93aW5nIHRoYXQgYSBUQUJMRSBEQVRB IGl0ZW0gaGFzCiAJCSAqIGp1c3Qgb25lIGRlcGVuZGVuY3kgYW5kIGl0IGlzIHRoZSBUQUJMRSBp dGVtLgorCQkgKgorCQkgKiBGb3IgY2h1bmtlZCB0YWJsZSBkYXRhLCB0aGUgVEFCTEUgREFUQSBp dGVtIGhhcyBhIGRlc2NyaXB0aW9uIGxpa2UKKwkJICogIlRBQkxFIERBVEEgKHBhZ2VzIDEwMDox OTkpIiwgYW5kIHdlIGNvbGxlY3QgYWxsIHN1Y2ggaXRlbXMgYXMKKwkJICogcmV2ZXJzZSBkZXBl bmRlbmNpZXMgZm9yIHRoZSBwYXJlbnQgdGFibGUncyBlbnRyeSBpbiB0YWJsZURhdGFDaHVua0lk cy4KIAkJICovCi0JCWlmIChzdHJjbXAodGUtPmRlc2MsICJUQUJMRSBEQVRBIikgPT0gMCAmJiB0 ZS0+bkRlcHMgPiAwKQorCQlpZiAoc3RybmNtcCh0ZS0+ZGVzYywgIlRBQkxFIERBVEEiLCAxMCkg PT0gMCAmJiB0ZS0+bkRlcHMgPiAwKQogCQl7CiAJCQlEdW1wSWQJCXRhYmxlSWQgPSB0ZS0+ZGVw ZW5kZW5jaWVzWzBdOwogCkBAIC0yMDQyLDcgKzIwNzEsMTQgQEAgYnVpbGRUb2NFbnRyeUFycmF5 cyhBcmNoaXZlSGFuZGxlICpBSCkKIAkJCWlmICh0YWJsZUlkIDw9IDAgfHwgdGFibGVJZCA+IG1h eER1bXBJZCkKIAkJCQlwZ19mYXRhbCgiYmFkIHRhYmxlIGR1bXBJZCBmb3IgVEFCTEUgREFUQSBp dGVtIik7CiAKLQkJCUFILT50YWJsZURhdGFJZFt0YWJsZUlkXSA9IHRlLT5kdW1wSWQ7CisJCQlp ZiAodGUtPmRlc2NbMTBdID09ICdcMCcpIC8qIHRlLT5kZXNjID09ICJUQUJMRSBEQVRBIiAqLwor CQkJCUFILT50YWJsZURhdGFJZFt0YWJsZUlkXSA9IHRlLT5kdW1wSWQ7CisJCQllbHNlCisJCQl7 CisJCQkJLyogQ2h1bmtlZCB0YWJsZSBkYXRhLCB0aGUgZGVzY3JpcHRpb24gaXMgIlRBQkxFIERB VEEgKHBhZ2VzICV1OiV1KSIgKi8KKwkJCQlhZGRTdGFuZGFsb25lRGVwZW5kZW5jeSgmKEFILT50 YWJsZURhdGFDaHVua0lkc1t0YWJsZUlkXSksIHRlLT5kdW1wSWQpOworCQkJCXBnX2xvZ19kZWJ1 ZygiQWRkZWQgY2h1bmtlZCB0YWJsZSBkYXRhIGRlcGVuZGVuY3k6IHRhYmxlSWQgJXUgKyBjaHVu a0lkICV1IiwKKwkJCQkJCQkgdGFibGVJZCwgdGUtPmR1bXBJZCk7fQogCQl9CiAJfQogfQpAQCAt Mjc4NSw3ICsyODIxLDcgQEAgUmVhZFRvYyhBcmNoaXZlSGFuZGxlICpBSCkKIAkJCQlzdHJjbXAo dGUtPmRlc2MsICJBQ0wiKSA9PSAwIHx8CiAJCQkJc3RyY21wKHRlLT5kZXNjLCAiQUNMIExBTkdV QUdFIikgPT0gMCkKIAkJCQl0ZS0+c2VjdGlvbiA9IFNFQ1RJT05fTk9ORTsKLQkJCWVsc2UgaWYg KHN0cmNtcCh0ZS0+ZGVzYywgIlRBQkxFIERBVEEiKSA9PSAwIHx8CisJCQllbHNlIGlmIChzdHJu Y21wKHRlLT5kZXNjLCAiVEFCTEUgREFUQSIsIDEwKSA9PSAwIHx8CiAJCQkJCSBzdHJjbXAodGUt PmRlc2MsICJCTE9CUyIpID09IDAgfHwKIAkJCQkJIHN0cmNtcCh0ZS0+ZGVzYywgIkJMT0IgQ09N TUVOVFMiKSA9PSAwKQogCQkJCXRlLT5zZWN0aW9uID0gU0VDVElPTl9EQVRBOwpAQCAtMzAxNSw3 ICszMDUxLDcgQEAgX3RvY0VudHJ5UmVxdWlyZWQoVG9jRW50cnkgKnRlLCB0ZVNlY3Rpb24gY3Vy U2VjdGlvbiwgQXJjaGl2ZUhhbmRsZSAqQUgpCiAJICogYXNzb2NpYXRlZCBwZ19zaGRlcGVuZCBy b3dzLiBUaGlzIGlzIGZhc3RlciB0byByZXN0b3JlIHRoYW4gdGhlCiAJICogZXF1aXZhbGVudCBz ZXQgb2YgbGFyZ2Ugb2JqZWN0IGNvbW1hbmRzLgogCSAqLwotCWlmIChyb3B0LT5iaW5hcnlfdXBn cmFkZSAmJiBzdHJjbXAodGUtPmRlc2MsICJUQUJMRSBEQVRBIikgPT0gMCAmJgorCWlmIChyb3B0 LT5iaW5hcnlfdXBncmFkZSAmJiBzdHJuY21wKHRlLT5kZXNjLCAiVEFCTEUgREFUQSIsIDEwKSA9 PSAwICYmCiAJCSh0ZS0+Y2F0YWxvZ0lkLm9pZCA9PSBMYXJnZU9iamVjdE1ldGFkYXRhUmVsYXRp b25JZCB8fAogCQkgdGUtPmNhdGFsb2dJZC5vaWQgPT0gU2hhcmVkRGVwZW5kUmVsYXRpb25JZCkp CiAJCXJldHVybiBSRVFfREFUQTsKQEAgLTMyNDYsNyArMzI4Miw3IEBAIF90b2NFbnRyeVJlcXVp cmVkKFRvY0VudHJ5ICp0ZSwgdGVTZWN0aW9uIGN1clNlY3Rpb24sIEFyY2hpdmVIYW5kbGUgKkFI KQogCQlpZiAocm9wdC0+c2VsVHlwZXMpCiAJCXsKIAkJCWlmIChzdHJjbXAodGUtPmRlc2MsICJU QUJMRSIpID09IDAgfHwKLQkJCQlzdHJjbXAodGUtPmRlc2MsICJUQUJMRSBEQVRBIikgPT0gMCB8 fAorCQkJCXN0cm5jbXAodGUtPmRlc2MsICJUQUJMRSBEQVRBIiwgMTApID09IDAgfHwKIAkJCQlz dHJjbXAodGUtPmRlc2MsICJWSUVXIikgPT0gMCB8fAogCQkJCXN0cmNtcCh0ZS0+ZGVzYywgIkZP UkVJR04gVEFCTEUiKSA9PSAwIHx8CiAJCQkJc3RyY21wKHRlLT5kZXNjLCAiTUFURVJJQUxJWkVE IFZJRVciKSA9PSAwIHx8CkBAIC01MDE3LDYgKzUwNTMsMTIgQEAgZml4X2RlcGVuZGVuY2llcyhB cmNoaXZlSGFuZGxlICpBSCkKICAqIHRoYXQgcGFyYWxsZWwgcmVzdG9yZSB3aWxsIHByaW9yaXRp emUgbGFyZ2VyIGpvYnMgKGluZGV4IGJ1aWxkcywgRksKICAqIGNvbnN0cmFpbnQgY2hlY2tzLCBl dGMpIG92ZXIgc21hbGxlciBvbmVzLCBhdm9pZGluZyBzaXR1YXRpb25zIHdoZXJlIHdlCiAgKiBl bmQgYSByZXN0b3JlIHdpdGggb25seSBvbmUgYWN0aXZlIGpvYiB3b3JraW5nIG9uIGEgbGFyZ2Ug dGFibGUuCisgKgorICogSW4gY2FzZSBvZiBjaHVua2VkIGR1bXBzLCB3ZSBjaGFuZ2UgdGhlIGRl cGVuZW5jeSBvbiB0YWJsZSB3aXRoIGRlcGVkZW5jeQorICogb24gdGhlIGZpcnN0IGNodW5rIG9m IGRhdGEgYW5kIGFkZCB0aGUgcmVtYWluZ2kgY2h1bmsgaWRzLCBpZiBhbnksIHRvIHRoZSAKKyAq IGVuZCBvZiBkZXBlbmNlbmN5IGxpc3QKKyAqIHdlIGFsc28gY2FsY3VsYXRlIHRoZSBmdWxsRGF0 YUxlbmd0aCBhcyB0aGUgc3VtIG9mIHRoZSBsZW5ndGhzIG9mIGNodW5rCisgKiBkYXRhIGl0ZW1z IGFuZCB1c2UgdGhhdCB0byBzZXQgdGhlIGl0ZW0ncyBkYXRhTGVuZ3RoLgogICovCiBzdGF0aWMg dm9pZAogcmVwb2ludF90YWJsZV9kZXBlbmRlbmNpZXMoQXJjaGl2ZUhhbmRsZSAqQUgpCkBAIC01 MDMyLDggKzUwNzQsOSBAQCByZXBvaW50X3RhYmxlX2RlcGVuZGVuY2llcyhBcmNoaXZlSGFuZGxl ICpBSCkKIAkJZm9yIChpID0gMDsgaSA8IHRlLT5uRGVwczsgaSsrKQogCQl7CiAJCQlvbGRkZXAg PSB0ZS0+ZGVwZW5kZW5jaWVzW2ldOwotCQkJaWYgKG9sZGRlcCA8PSBBSC0+bWF4RHVtcElkICYm Ci0JCQkJQUgtPnRhYmxlRGF0YUlkW29sZGRlcF0gIT0gMCkKKwkJCWlmIChvbGRkZXAgPiBBSC0+ bWF4RHVtcElkKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKEFILT50YWJsZURhdGFJZFtvbGRkZXBd ICE9IDApCiAJCQl7CiAJCQkJRHVtcElkCQl0YWJsZWRhdGFpZCA9IEFILT50YWJsZURhdGFJZFtv bGRkZXBdOwogCQkJCVRvY0VudHJ5ICAgKnRhYmxlZGF0YXRlID0gQUgtPnRvY3NCeUR1bXBJZFt0 YWJsZWRhdGFpZF07CkBAIC01MDQzLDYgKzUwODYsMzkgQEAgcmVwb2ludF90YWJsZV9kZXBlbmRl bmNpZXMoQXJjaGl2ZUhhbmRsZSAqQUgpCiAJCQkJcGdfbG9nX2RlYnVnKCJ0cmFuc2ZlcnJpbmcg ZGVwZW5kZW5jeSAlZCAtPiAlZCB0byAlZCIsCiAJCQkJCQkJIHRlLT5kdW1wSWQsIG9sZGRlcCwg dGFibGVkYXRhaWQpOwogCQkJfQorCQkJZWxzZSBpZiAoQUgtPnRhYmxlRGF0YUNodW5rSWRzW29s ZGRlcF0ubkRlcHMgPiAwKQorCQkJeworCQkJCWludAkJCWo7CisJCQkJRHVtcElkCQljaHVua2Rh dGFpZDsKKwkJCQl1aW50NjQJCWZ1bGxEYXRhTGVuZ3RoOworCQkJCURlcGVuZGVuY3lMaXN0ICpk ZXBsaXN0ID0gJkFILT50YWJsZURhdGFDaHVua0lkc1tvbGRkZXBdOworCisJCQkJLyogZmlyc3Qg aW4gbGlzdCByZXBsYWNlcyB0aGUgZGVwZW5kZW5jeSBvbiB0YWJsZSAqLworCQkJCWNodW5rZGF0 YWlkID0gZGVwbGlzdC0+ZGVwZW5kZW5jaWVzWzBdOworCQkJCXRlLT5kZXBlbmRlbmNpZXNbaV0g PSBjaHVua2RhdGFpZDsKKwkJCQlmdWxsRGF0YUxlbmd0aCA9IEFILT50b2NzQnlEdW1wSWRbY2h1 bmtkYXRhaWRdLT5kYXRhTGVuZ3RoOworCQkJCXBnX2xvZ19kZWJ1ZygidHJhbnNmZXJyaW5nIGNo dW5rIGxpc3QgJWQgLT4gJWQgdG8gJWQiLAorCQkJCQkJCSB0ZS0+ZHVtcElkLCBvbGRkZXAsIGNo dW5rZGF0YWlkKTsKKworCQkJCWlmIChkZXBsaXN0LT5uRGVwcyA+IDEpCisJCQkJeworCQkJCQkv KiBtYWtlIHNwYWNlICovCisJCQkJCXRlLT5kZXBlbmRlbmNpZXMgPSBwZ19yZWFsbG9jX2FycmF5 KHRlLT5kZXBlbmRlbmNpZXMsCisJCQkJCQkJCQkJCQkgIER1bXBJZCwKKwkJCQkJCQkJCQkJCSAg dGUtPm5EZXBzICsgZGVwbGlzdC0+bkRlcHMgLSAxKTsKKworCQkJCQkvKiB0aGUgcmVzdCBhcmUg YXBwZW5kZWQgdG8gZGVwZW5kZW5jaWVzICovCisJCQkJCWZvciAoaiA9IDE7IGogPCBkZXBsaXN0 LT5uRGVwczsgaisrKQorCQkJCQl7CisJCQkJCQljaHVua2RhdGFpZCA9IGRlcGxpc3QtPmRlcGVu ZGVuY2llc1tqXTsKKwkJCQkJCXRlLT5kZXBlbmRlbmNpZXNbdGUtPm5EZXBzKytdID0gY2h1bmtk YXRhaWQ7CisJCQkJCQlmdWxsRGF0YUxlbmd0aCArPSBBSC0+dG9jc0J5RHVtcElkW2NodW5rZGF0 YWlkXS0+ZGF0YUxlbmd0aDsKKwkJCQkJCXBnX2xvZ19kZWJ1ZygiYWRkaW5nIGNodW5rIGxpc3Qg JWQgLT4gJWQgdG8gJWQiLAorCQkJCQkJCQkJdGUtPmR1bXBJZCwgb2xkZGVwLCBjaHVua2RhdGFp ZCk7CisJCQkJCX0KKwkJCQl9CisJCQkJdGUtPmRhdGFMZW5ndGggPSBNYXgodGUtPmRhdGFMZW5n dGgsIGZ1bGxEYXRhTGVuZ3RoKTsKKwkJCX0KIAkJfQogCX0KIH0KQEAgLTUwOTYsNyArNTE3Miw3 IEBAIGlkZW50aWZ5X2xvY2tpbmdfZGVwZW5kZW5jaWVzKEFyY2hpdmVIYW5kbGUgKkFILCBUb2NF bnRyeSAqdGUpCiAJCUR1bXBJZAkJZGVwaWQgPSB0ZS0+ZGVwZW5kZW5jaWVzW2ldOwogCiAJCWlm IChkZXBpZCA8PSBBSC0+bWF4RHVtcElkICYmIEFILT50b2NzQnlEdW1wSWRbZGVwaWRdICE9IE5V TEwgJiYKLQkJCSgoc3RyY21wKEFILT50b2NzQnlEdW1wSWRbZGVwaWRdLT5kZXNjLCAiVEFCTEUg REFUQSIpID09IDApIHx8CisJCQkoKHN0cm5jbXAoQUgtPnRvY3NCeUR1bXBJZFtkZXBpZF0tPmRl c2MsICJUQUJMRSBEQVRBIiwgMTApID09IDApIHx8CiAJCQkgc3RyY21wKEFILT50b2NzQnlEdW1w SWRbZGVwaWRdLT5kZXNjLCAiVEFCTEUiKSA9PSAwKSkKIAkJCWxvY2tpZHNbbmxvY2tpZHMrK10g PSBkZXBpZDsKIAl9CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hp dmVyLmggYi9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmgKaW5kZXggMzY1MDcz YjNlYWUuLmNmYTNlYTFiYmQ2IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3Vw X2FyY2hpdmVyLmgKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5oCkBA IC0xNzksNiArMTc5LDEzIEBAIHR5cGVkZWYgZW51bQogCU9VVFBVVF9PVEhFUkRBVEEsCQkJLyog d3JpdGluZyBkYXRhIGFzIElOU0VSVCBjb21tYW5kcyAqLwogfSBBcmNoaXZlck91dHB1dDsKIAor dHlwZWRlZiBzdHJ1Y3QgX0RlcGVuZGVuY3lMaXN0Cit7CisJRHVtcElkCSAgICpkZXBlbmRlbmNp ZXM7CS8qIGR1bXBJZHMgb2Ygb2JqZWN0cyB0aGlzIG9uZSBkZXBlbmRzIG9uICovCisJaW50CQkJ bkRlcHM7CQkJLyogbnVtYmVyIG9mIHZhbGlkIGRlcGVuZGVuY2llcyAqLworCWludAkJCWFsbG9j RGVwczsJCS8qIGFsbG9jYXRlZCBzaXplIG9mIGRlcGVuZGVuY2llc1tdICovCit9IERlcGVuZGVu Y3lMaXN0OworCiAvKgogICogRm9yIGhpc3RvcmljYWwgcmVhc29ucywgQUNMIGl0ZW1zIGFyZSBp bnRlcnNwZXJzZWQgd2l0aCBldmVyeXRoaW5nIGVsc2UgaW4KICAqIGEgZHVtcCBmaWxlJ3MgVE9D OyB0eXBpY2FsbHkgdGhleSdyZSByaWdodCBhZnRlciB0aGUgb2JqZWN0IHRoZXkncmUgZm9yLgpA QCAtMzExLDYgKzMxOCw3IEBAIHN0cnVjdCBfYXJjaGl2ZUhhbmRsZQogCS8qIGFycmF5cyBjcmVh dGVkIGFmdGVyIHRoZSBUT0MgbGlzdCBpcyBjb21wbGV0ZTogKi8KIAlzdHJ1Y3QgX3RvY0VudHJ5 ICoqdG9jc0J5RHVtcElkOwkvKiBUT0NzIGluZGV4ZWQgYnkgZHVtcElkICovCiAJRHVtcElkCSAg ICp0YWJsZURhdGFJZDsJLyogVEFCTEUgREFUQSBpZHMsIGluZGV4ZWQgYnkgdGFibGUgZHVtcElk ICovCisJRGVwZW5kZW5jeUxpc3QgKnRhYmxlRGF0YUNodW5rSWRzOyAvKiBkZXBlbmRlbmNpZXMg aW5kZXhlZCBieSBkdW1wSWQgKi8KIAogCXN0cnVjdCBfdG9jRW50cnkgKmN1cnJUb2M7CS8qIFVz ZWQgd2hlbiBkdW1waW5nIGRhdGEgKi8KIAlwZ19jb21wcmVzc19zcGVjaWZpY2F0aW9uIGNvbXBy ZXNzaW9uX3NwZWM7IC8qIFJlcXVlc3RlZCBzcGVjaWZpY2F0aW9uIGZvcgpAQCAtMzc3LDcgKzM4 NSw3IEBAIHN0cnVjdCBfdG9jRW50cnkKIAlzaXplX3QJCWRlZm5MZW47CQkvKiBsZW5ndGggb2Yg ZHVtcGVkIGRlZmluaXRpb24gKi8KIAogCS8qIHdvcmtpbmcgc3RhdGUgd2hpbGUgZHVtcGluZy9y ZXN0b3JpbmcgKi8KLQlwZ29mZl90CQlkYXRhTGVuZ3RoOwkJLyogaXRlbSdzIGRhdGEgc2l6ZTsg MCBpZiBub25lIG9yIHVua25vd24gKi8KKwl1aW50NjQJCWRhdGFMZW5ndGg7CQkvKiBpdGVtJ3Mg ZGF0YSBzaXplOyAwIGlmIG5vbmUgb3IgdW5rbm93biAqLwogCWludAkJCXJlcXM7CQkJLyogZG8g d2UgbmVlZCBzY2hlbWEgYW5kL29yIGRhdGEgb2Ygb2JqZWN0CiAJCQkJCQkJCSAqIChSRVFfKiBi aXQgbWFzaykgKi8KIAlib29sCQljcmVhdGVkOwkJLyogc2V0IGZvciBEQVRBIG1lbWJlciBpZiBU QUJMRSB3YXMgY3JlYXRlZCAqLwpAQCAtNDM3LDYgKzQ0NSw4IEBAIGV4dGVybiBpbnQJVG9jSURS ZXF1aXJlZChBcmNoaXZlSGFuZGxlICpBSCwgRHVtcElkIGlkKTsKIFRvY0VudHJ5ICAgKmdldFRv Y0VudHJ5QnlEdW1wSWQoQXJjaGl2ZUhhbmRsZSAqQUgsIER1bXBJZCBpZCk7CiBleHRlcm4gYm9v bCBjaGVja1NlZWsoRklMRSAqZnApOwogCitleHRlcm4gdm9pZCBhZGRTdGFuZGFsb25lRGVwZW5k ZW5jeShEZXBlbmRlbmN5TGlzdCAqZG9iaiwgRHVtcElkIHJlZklkKTsKKwogI2RlZmluZSBhcHBl bmRTdHJpbmdMaXRlcmFsQUhYKGJ1ZixzdHIsQUgpIFwKIAlhcHBlbmRTdHJpbmdMaXRlcmFsKGJ1 Ziwgc3RyLCAoQUgpLT5wdWJsaWMuZW5jb2RpbmcsIChBSCktPnB1YmxpYy5zdGRfc3RyaW5ncykK IApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYyBiL3NyYy9iaW4vcGdfZHVt cC9wZ19kdW1wLmMKaW5kZXggNWQxZjc2ODJmMTEuLjFlN2Q5YTNmN2YzIDEwMDY0NAotLS0gYS9z cmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMK QEAgLTUzNSw2ICs1MzUsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJeyJleGNs dWRlLWV4dGVuc2lvbiIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAxN30sCiAJCXsic2VxdWVu Y2UtZGF0YSIsIG5vX2FyZ3VtZW50LCAmZG9wdC5zZXF1ZW5jZV9kYXRhLCAxfSwKIAkJeyJyZXN0 cmljdC1rZXkiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgMjV9LAorCQl7Im1heC10YWJsZS1z ZWdtZW50LXBhZ2VzIiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsIDI2fSwKIAogCQl7TlVMTCwg MCwgTlVMTCwgMH0KIAl9OwpAQCAtNzk5LDYgKzgwMCwxMiBAQCBtYWluKGludCBhcmdjLCBjaGFy ICoqYXJndikKIAkJCQlkb3B0LnJlc3RyaWN0X2tleSA9IHBnX3N0cmR1cChvcHRhcmcpOwogCQkJ CWJyZWFrOwogCisJCQljYXNlIDI2OgorCQkJCWlmICghb3B0aW9uX3BhcnNlX3VpbnQzMihvcHRh cmcsICItLW1heC10YWJsZS1zZWdtZW50LXBhZ2VzIiwgMSwgTWF4QmxvY2tOdW1iZXIsCisJCQkJ CQkJCQkgICZkb3B0Lm1heF90YWJsZV9zZWdtZW50X3BhZ2VzKSkKKwkJCQkJZXhpdF9uaWNlbHko MSk7CisJCQkJYnJlYWs7CisKIAkJCWRlZmF1bHQ6CiAJCQkJLyogZ2V0b3B0X2xvbmcgYWxyZWFk eSBlbWl0dGVkIGEgY29tcGxhaW50ICovCiAJCQkJcGdfbG9nX2Vycm9yX2hpbnQoIlRyeSBcIiVz IC0taGVscFwiIGZvciBtb3JlIGluZm9ybWF0aW9uLiIsIHByb2duYW1lKTsKQEAgLTEzNDQsNiAr MTM1MSw5IEBAIGhlbHAoY29uc3QgY2hhciAqcHJvZ25hbWUpCiAJcHJpbnRmKF8oIiAgLS1leHRy YS1mbG9hdC1kaWdpdHM9TlVNICAgICBvdmVycmlkZSBkZWZhdWx0IHNldHRpbmcgZm9yIGV4dHJh X2Zsb2F0X2RpZ2l0c1xuIikpOwogCXByaW50ZihfKCIgIC0tZmlsdGVyPUZJTEVOQU1FICAgICAg ICAgICAgaW5jbHVkZSBvciBleGNsdWRlIG9iamVjdHMgYW5kIGRhdGEgZnJvbSBkdW1wXG4iCiAJ CQkgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlZCBvbiBleHByZXNzaW9ucyBp biBGSUxFTkFNRVxuIikpOworCXByaW50ZihfKCIgIC0tbWF4LXRhYmxlLXNlZ21lbnQtcGFnZXM9 TlVNUEFHRVNcbiIKKwkJICAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWJl ciBvZiBtYWluIHRhYmxlIHBhZ2VzIGFib3ZlIHdoaWNoIGRhdGEgaXMgXG4iCisJCQkgIiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjb3BpZWQgb3V0IGluIGNodW5rcywgYWxzbyBkZXRl cm1pbmVzIHRoZSBjaHVuayBzaXplXG4iKSk7CiAJcHJpbnRmKF8oIiAgLS1pZi1leGlzdHMgICAg ICAgICAgICAgICAgICB1c2UgSUYgRVhJU1RTIHdoZW4gZHJvcHBpbmcgb2JqZWN0c1xuIikpOwog CXByaW50ZihfKCIgIC0taW5jbHVkZS1mb3JlaWduLWRhdGE9UEFUVEVSTlxuIgogCQkJICIgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZSBkYXRhIG9mIGZvcmVpZ24gdGFibGVz IG9uIGZvcmVpZ25cbiIKQEAgLTIzOTYsNyArMjQwNiw3IEBAIGR1bXBUYWJsZURhdGFfY29weShB cmNoaXZlICpmb3V0LCBjb25zdCB2b2lkICpkY29udGV4dCkKIAkgKiBkdW1waW5nIGFuIG9sZCBw Z19sYXJnZW9iamVjdF9tZXRhZGF0YSBkZWZpbmVkIFdJVEggT0lEUy4gIEZvciBvdGhlcgogCSAq IGNhc2VzIGEgc2ltcGxlIENPUFkgc3VmZmljZXMuCiAJICovCi0JaWYgKHRkaW5mby0+ZmlsdGVy Y29uZCB8fCB0YmluZm8tPnJlbGtpbmQgPT0gUkVMS0lORF9GT1JFSUdOX1RBQkxFIHx8CisJaWYg KHRkaW5mby0+ZmlsdGVyY29uZCB8fCBpc19zZWdtZW50KHRkaW5mbykgfHwgdGJpbmZvLT5yZWxr aW5kID09IFJFTEtJTkRfRk9SRUlHTl9UQUJMRSB8fAogCQkoZm91dC0+ZG9wdC0+YmluYXJ5X3Vw Z3JhZGUgJiYgZm91dC0+cmVtb3RlVmVyc2lvbiA8IDEyMDAwMCAmJgogCQkgdGJpbmZvLT5kb2Jq LmNhdElkLm9pZCA9PSBMYXJnZU9iamVjdE1ldGFkYXRhUmVsYXRpb25JZCkpCiAJewpAQCAtMjQx NCw5ICsyNDI0LDM3IEBAIGR1bXBUYWJsZURhdGFfY29weShBcmNoaXZlICpmb3V0LCBjb25zdCB2 b2lkICpkY29udGV4dCkKIAkJZWxzZQogCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocSwgIiogIik7 CiAKLQkJYXBwZW5kUFFFeHBCdWZmZXIocSwgIkZST00gJXMgJXMpIFRPIHN0ZG91dDsiLAorCQlh cHBlbmRQUUV4cEJ1ZmZlcihxLCAiRlJPTSAlcyAlcyIsCiAJCQkJCQkgIGZtdFF1YWxpZmllZER1 bXBhYmxlKHRiaW5mbyksCiAJCQkJCQkgIHRkaW5mby0+ZmlsdGVyY29uZCA/IHRkaW5mby0+Zmls dGVyY29uZCA6ICIiKTsKKwkJLyogSWYgaXQncyBhIHNlZ21lbnQsIHdlIG5lZWQgdG8gYWRkIGEg ZmlsdGVyIGNvbmRpdGlvbiB0byBzZWxlY3QgdGhlCisJCSAqIHJpZ2h0IHBhZ2UgcmFuZ2UgCisJ CSAqIC0gZm9yIGZpcnN0IHNlZ21lbnQgd2UgYWRkICJjdGlkIDwgKGVuZFBhZ2UrMSwgMCkiIAor CQkgKiAgIGZpcnN0IHNlZ21lbnQgaXMgdGhlIG9uZSB3aXRoIHN0YXJ0UGFnZSA9PSAwCisJCSAq IC0gZm9yIGxhc3Qgc2VnbWVudCB3ZSBhZGQgImN0aWQgPj0gKHN0YXJ0UGFnZSwgMSkiCisJCSAq ICAgbGFzdCBzZWdtZW50IGlzIHRoZSBvbmUgd2l0aCBlbmRQYWdlID09IEludmFsaWRCbG9ja051 bWJlcgorCQkgKiAgIHdlIGxlYXZlIHRvIHVwcGVyIGJvdW5kIG9wZW4gZm9yIHRoZSBjYXNlIHdo ZXJlIG1vcmUgcGFnZXMgCisJCSAqICAgd2VyZSBhZGRlZCBhZnRlciB3ZSBtZWFzdXJlZCAKKwkJ ICogLSBmb3IgbWlkZGxlIHNlZ21lbnRzIHdlIGFkZCAKKwkJICogICAiY3RpZCA+PSAoc3RhcnRQ YWdlLCAxKSBBTkQgY3RpZCA8IChlbmRQYWdlKzEsIDApIgorCQkgKgorCQkgKiAiY3RpZCA8IChl bmRQYWdlKzEsIDApIiBpbnN0ZWFkIG9mICJjdGlkIDw9IChlbmRQYWdlLCBtYXh0dXBsZSkiCisJ CSAqIHdhcyBjaG9zZW4gYXMgcmFuZ2UgZW5kIHNvIHRoYXQgd2UgZG8gbm90IGhhdmUgdG8gZXN0 aW1hdGUgdGhlIG1heHR1cGxlCisJCSAqIAorCQkgKi8KKwkJaWYgKGlzX3NlZ21lbnQodGRpbmZv KSkKKwkJeworCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocSwgdGRpbmZvLT5maWx0ZXJjb25kPyIg QU5EICI6IiBXSEVSRSAiKTsKKwkJCWlmKHRkaW5mby0+c3RhcnRQYWdlID09IDApCisJCQkJYXBw ZW5kUFFFeHBCdWZmZXIocSwgImN0aWQgPCAnKCV1LDApJyIsIHRkaW5mby0+ZW5kUGFnZSsxKTsJ CQkKKwkJCWVsc2UgaWYodGRpbmZvLT5lbmRQYWdlICE9IEludmFsaWRCbG9ja051bWJlcikKKwkJ CQlhcHBlbmRQUUV4cEJ1ZmZlcihxLCAiY3RpZCA+PSAnKCV1LDEpJyBBTkQgY3RpZCA8ICcoJXUs MCknIiwKKwkJCQkJCQkJIHRkaW5mby0+c3RhcnRQYWdlLCB0ZGluZm8tPmVuZFBhZ2UrMSk7CisJ CQllbHNlCisJCQkJYXBwZW5kUFFFeHBCdWZmZXIocSwgImN0aWQgPj0gJygldSwxKSciLCB0ZGlu Zm8tPnN0YXJ0UGFnZSk7CisJCX0KKworCQlhcHBlbmRQUUV4cEJ1ZmZlcihxLCAiKSBUTyBzdGRv dXQ7Iik7CiAJfQogCWVsc2UKIAl7CkBAIC0yNDI0LDYgKzI0NjIsMTAgQEAgZHVtcFRhYmxlRGF0 YV9jb3B5KEFyY2hpdmUgKmZvdXQsIGNvbnN0IHZvaWQgKmRjb250ZXh0KQogCQkJCQkJICBmbXRR dWFsaWZpZWREdW1wYWJsZSh0YmluZm8pLAogCQkJCQkJICBjb2x1bW5fbGlzdCk7CiAJfQorCisJ aWYgKGlzX3NlZ21lbnQodGRpbmZvKSkKKwkJcGdfbG9nX2RlYnVnKCJDSFVOS0lORzogZGF0YSBx dWVyeTogJXMiLCBxLT5kYXRhKTsKKwkKIAlyZXMgPSBFeGVjdXRlU3FsUXVlcnkoZm91dCwgcS0+ ZGF0YSwgUEdSRVNfQ09QWV9PVVQpOwogCVBRY2xlYXIocmVzKTsKIAlkZXN0cm95UFFFeHBCdWZm ZXIoY2xpc3RCdWYpOwpAQCAtMjkxOSw0MiArMjk2MSw4OSBAQCBkdW1wVGFibGVEYXRhKEFyY2hp dmUgKmZvdXQsIGNvbnN0IFRhYmxlRGF0YUluZm8gKnRkaW5mbykKIAl7CiAJCVRvY0VudHJ5ICAg KnRlOwogCi0JCXRlID0gQXJjaGl2ZUVudHJ5KGZvdXQsIHRkaW5mby0+ZG9iai5jYXRJZCwgdGRp bmZvLT5kb2JqLmR1bXBJZCwKLQkJCQkJCSAgQVJDSElWRV9PUFRTKC50YWcgPSB0YmluZm8tPmRv YmoubmFtZSwKLQkJCQkJCQkJCSAgIC5uYW1lc3BhY2UgPSB0YmluZm8tPmRvYmoubmFtZXNwYWNl LT5kb2JqLm5hbWUsCi0JCQkJCQkJCQkgICAub3duZXIgPSB0YmluZm8tPnJvbG5hbWUsCi0JCQkJ CQkJCQkgICAuZGVzY3JpcHRpb24gPSAiVEFCTEUgREFUQSIsCi0JCQkJCQkJCQkgICAuc2VjdGlv biA9IFNFQ1RJT05fREFUQSwKLQkJCQkJCQkJCSAgIC5jcmVhdGVTdG10ID0gdGREZWZuLAotCQkJ CQkJCQkJICAgLmNvcHlTdG10ID0gY29weVN0bXQsCi0JCQkJCQkJCQkgICAuZGVwcyA9ICYodGJp bmZvLT5kb2JqLmR1bXBJZCksCi0JCQkJCQkJCQkgICAubkRlcHMgPSAxLAotCQkJCQkJCQkJICAg LmR1bXBGbiA9IGR1bXBGbiwKLQkJCQkJCQkJCSAgIC5kdW1wQXJnID0gdGRpbmZvKSk7Ci0KLQkJ LyoKLQkJICogU2V0IHRoZSBUb2NFbnRyeSdzIGRhdGFMZW5ndGggaW4gY2FzZSB3ZSBhcmUgZG9p bmcgYSBwYXJhbGxlbCBkdW1wCi0JCSAqIGFuZCB3YW50IHRvIG9yZGVyIGR1bXAgam9icyBieSB0 YWJsZSBzaXplLiAgV2UgY2hvb3NlIHRvIG1lYXN1cmUKLQkJICogZGF0YUxlbmd0aCBpbiB0YWJs ZSBwYWdlcyAoaW5jbHVkaW5nIFRPQVNUIHBhZ2VzKSBkdXJpbmcgZHVtcCwgc28KLQkJICogbm8g c2NhbGluZyBpcyBuZWVkZWQuCi0JCSAqCi0JCSAqIEhvd2V2ZXIsIHJlbHBhZ2VzIGlzIGRlY2xh cmVkIGFzICJpbnRlZ2VyIiBpbiBwZ19jbGFzcywgYW5kIGhlbmNlCi0JCSAqIGFsc28gaW4gVGFi bGVJbmZvLCBidXQgaXQncyByZWFsbHkgQmxvY2tOdW1iZXIgYS9rL2EgdW5zaWduZWQgaW50Lgot CQkgKiBDYXN0IHNvIHRoYXQgd2UgZ2V0IHRoZSByaWdodCBpbnRlcnByZXRhdGlvbiBvZiB0YWJs ZSBzaXplcwotCQkgKiBleGNlZWRpbmcgSU5UX01BWCBwYWdlcy4KKwkJLyogZGF0YSBjaHVua2lu ZyB3b3JrcyBvZmYgcmVscGFnZXMsIHdoaWNoIGFyZSBjb21wdXRlZCBleGFjdGx5IHVzaW5nCisJ CSAqIHBnX3JlbGF0aW9uX3NpemUoKSB3aGVuIC0tbWF4LXRhYmxlLXNlZ21lbnQtcGFnZXMgd2Fz IHNldAorCQkgKiAKKwkJICogV2UgYWxzbyBkb24ndCBjaHVuayBpZiB0YWJsZSBhY2Nlc3MgbWV0 aG9kIGlzIG5vdCAiaGVhcCIKKwkJICogVE9ETzogd2UgbWF5IGFkZCBjaHVua2luZyBmb3Igb3Ro ZXIgYWNjZXNzIG1ldGhvZHMgbGF0ZXIsIG1heWJlIAorCQkgKiBiYXNlZCBvbiBwcmltYXJ5IGtl eSB0cmFuZ2VzCiAJCSAqLwotCQl0ZS0+ZGF0YUxlbmd0aCA9IChCbG9ja051bWJlcikgdGJpbmZv LT5yZWxwYWdlczsKLQkJdGUtPmRhdGFMZW5ndGggKz0gKEJsb2NrTnVtYmVyKSB0YmluZm8tPnRv YXN0cGFnZXM7CisJCWlmICh0YmluZm8tPnJlbHBhZ2VzIDw9IGRvcHQtPm1heF90YWJsZV9zZWdt ZW50X3BhZ2VzIHx8IAorCQkJc3RyY21wKHRiaW5mby0+YW1uYW1lLCAiaGVhcCIpICE9IDApCisJ CXsKKwkJCXRlID0gQXJjaGl2ZUVudHJ5KGZvdXQsIHRkaW5mby0+ZG9iai5jYXRJZCwgdGRpbmZv LT5kb2JqLmR1bXBJZCwKKwkJCQkJCQlBUkNISVZFX09QVFMoLnRhZyA9IHRiaW5mby0+ZG9iai5u YW1lLAorCQkJCQkJCQkJCS5uYW1lc3BhY2UgPSB0YmluZm8tPmRvYmoubmFtZXNwYWNlLT5kb2Jq Lm5hbWUsCisJCQkJCQkJCQkJLm93bmVyID0gdGJpbmZvLT5yb2xuYW1lLAorCQkJCQkJCQkJCS5k ZXNjcmlwdGlvbiA9ICJUQUJMRSBEQVRBIiwKKwkJCQkJCQkJCQkuc2VjdGlvbiA9IFNFQ1RJT05f REFUQSwKKwkJCQkJCQkJCQkuY3JlYXRlU3RtdCA9IHRkRGVmbiwKKwkJCQkJCQkJCQkuY29weVN0 bXQgPSBjb3B5U3RtdCwKKwkJCQkJCQkJCQkuZGVwcyA9ICYodGJpbmZvLT5kb2JqLmR1bXBJZCks CisJCQkJCQkJCQkJLm5EZXBzID0gMSwKKwkJCQkJCQkJCQkuZHVtcEZuID0gZHVtcEZuLAorCQkJ CQkJCQkJCS5kdW1wQXJnID0gdGRpbmZvKSk7CiAKLQkJLyoKLQkJICogSWYgcGdvZmZfdCBpcyBv bmx5IDMyIGJpdHMgd2lkZSwgdGhlIGFib3ZlIHJlZmluZW1lbnQgaXMgdXNlbGVzcywKLQkJICog YW5kIGluc3RlYWQgd2UnZCBiZXR0ZXIgd29ycnkgYWJvdXQgaW50ZWdlciBvdmVyZmxvdy4gIENs YW1wIHRvCi0JCSAqIElOVF9NQVggaWYgdGhlIGNvcnJlY3QgcmVzdWx0IGV4Y2VlZHMgdGhhdC4K LQkJICovCi0JCWlmIChzaXplb2YodGUtPmRhdGFMZW5ndGgpID09IDQgJiYKLQkJCSh0YmluZm8t PnJlbHBhZ2VzIDwgMCB8fCB0YmluZm8tPnRvYXN0cGFnZXMgPCAwIHx8Ci0JCQkgdGUtPmRhdGFM ZW5ndGggPCAwKSkKLQkJCXRlLT5kYXRhTGVuZ3RoID0gSU5UX01BWDsKKwkJCS8qCisJCQkgKiBT ZXQgdGhlIFRvY0VudHJ5J3MgZGF0YUxlbmd0aCBpbiBjYXNlIHdlIGFyZSBkb2luZyBhIHBhcmFs bGVsIGR1bXAKKwkJCSAqIGFuZCB3YW50IHRvIG9yZGVyIGR1bXAgam9icyBieSB0YWJsZSBzaXpl LiAgV2UgY2hvb3NlIHRvIG1lYXN1cmUKKwkJCSAqIGRhdGFMZW5ndGggaW4gdGFibGUgcGFnZXMg KGluY2x1ZGluZyBUT0FTVCBwYWdlcykgZHVyaW5nIGR1bXAsIHNvCisJCQkgKiBubyBzY2FsaW5n IGlzIG5lZWRlZC4KKwkJCSAqCisJCQkgKiBXaGlsZSBwZ19jbGFzcy5yZWxwYWdlcyB3aGljaCBz dG9yZXMgQmxvY2tOdW1iZXIsIGEvay9hIHVuc2lnbmVkIGludCwKKwkJCSAqIGlzIGRlY2xhcmVk IGFzICJpbnRlZ2VyIiB3ZSBjb252ZXJ0IGl0IGJhY2sgYW5kIHN0b3JlIGl0IGFzIAorCQkJICog QmxvY2tOdW1iZXIgaW4gVGFibGVJbmZvLgorCQkJICogQW5kIGRhdGFMZW5naHQgaXMgcGdvZmZf dCAobG9uZyBpbnQpIHNvIGRvZXMgbm93IG92ZXJmbG93IGZvcgorCQkJICogMiB4IFVJTlQzMl9N QVggCisJCQkgKi8KKwkJCXRlLT5kYXRhTGVuZ3RoID0gdGJpbmZvLT5yZWxwYWdlczsKKwkJCXRl LT5kYXRhTGVuZ3RoICs9IHRiaW5mby0+dG9hc3RwYWdlczsKKwkJfQorCQllbHNlCisJCXsKKwkJ CXVpbnQ2NCBjdXJyZW50X2NodW5rX3N0YXJ0ID0gMDsKKwkJCVBRRXhwQnVmZmVyIGNodW5rX2Rl c2MgPSBjcmVhdGVQUUV4cEJ1ZmZlcigpOworCisJCQl3aGlsZSAoY3VycmVudF9jaHVua19zdGFy dCA8IHRiaW5mby0+cmVscGFnZXMpCisJCQl7CisJCQkJVGFibGVEYXRhSW5mbyAqY2h1bmtfdGRp bmZvID0gKFRhYmxlRGF0YUluZm8gKikgcGdfbWFsbG9jKHNpemVvZihUYWJsZURhdGFJbmZvKSk7 CisKKwkJCQltZW1jcHkoY2h1bmtfdGRpbmZvLCB0ZGluZm8sIHNpemVvZihUYWJsZURhdGFJbmZv KSk7CisJCQkJQXNzaWduRHVtcElkKCZjaHVua190ZGluZm8tPmRvYmopOworCQkJCWFkZE9iamVj dERlcGVuZGVuY3koJmNodW5rX3RkaW5mby0+ZG9iaiwgdGJpbmZvLT5kb2JqLmR1bXBJZCk7CisJ CQkJY2h1bmtfdGRpbmZvLT5zdGFydFBhZ2UgPSAoQmxvY2tOdW1iZXIpIGN1cnJlbnRfY2h1bmtf c3RhcnQ7CisJCQkJY2h1bmtfdGRpbmZvLT5lbmRQYWdlID0gY2h1bmtfdGRpbmZvLT5zdGFydFBh Z2UgKyBkb3B0LT5tYXhfdGFibGVfc2VnbWVudF9wYWdlcyAtIDE7CisJCQkJCisJCQkJY3VycmVu dF9jaHVua19zdGFydCArPSBkb3B0LT5tYXhfdGFibGVfc2VnbWVudF9wYWdlczsKKwkJCQlpZiAo Y3VycmVudF9jaHVua19zdGFydCA+PSB0YmluZm8tPnJlbHBhZ2VzKQorCQkJCQljaHVua190ZGlu Zm8tPmVuZFBhZ2UgPSBJbnZhbGlkQmxvY2tOdW1iZXI7IC8qIGxhc3QgY2h1bmsgaXMgZm9yICJh bGwgdGhlIHJlc3QiICovCisKKwkJCQlwcmludGZQUUV4cEJ1ZmZlcihjaHVua19kZXNjLCAiVEFC TEUgREFUQSAocGFnZXMgJXU6JXUpIiwgY2h1bmtfdGRpbmZvLT5zdGFydFBhZ2UsIGNodW5rX3Rk aW5mby0+ZW5kUGFnZSk7CisKKwkJCQl0ZSA9IEFyY2hpdmVFbnRyeShmb3V0LCBjaHVua190ZGlu Zm8tPmRvYmouY2F0SWQsIGNodW5rX3RkaW5mby0+ZG9iai5kdW1wSWQsCisJCQkJCQkJQVJDSElW RV9PUFRTKC50YWcgPSB0YmluZm8tPmRvYmoubmFtZSwKKwkJCQkJCQkJCQkubmFtZXNwYWNlID0g dGJpbmZvLT5kb2JqLm5hbWVzcGFjZS0+ZG9iai5uYW1lLAorCQkJCQkJCQkJCS5vd25lciA9IHRi aW5mby0+cm9sbmFtZSwKKwkJCQkJCQkJCQkuZGVzY3JpcHRpb24gPSBjaHVua19kZXNjLT5kYXRh LAorCQkJCQkJCQkJCS5zZWN0aW9uID0gU0VDVElPTl9EQVRBLAorCQkJCQkJCQkJCS5jcmVhdGVT dG10ID0gdGREZWZuLAorCQkJCQkJCQkJCS5jb3B5U3RtdCA9IGNvcHlTdG10LAorCQkJCQkJCQkJ CS5kZXBzID0gJih0YmluZm8tPmRvYmouZHVtcElkKSwKKwkJCQkJCQkJCQkubkRlcHMgPSAxLAor CQkJCQkJCQkJCS5kdW1wRm4gPSBkdW1wRm4sCisJCQkJCQkJCQkJLmR1bXBBcmcgPSBjaHVua190 ZGluZm8pKTsKKworCQkJCWlmKGNodW5rX3RkaW5mby0+ZW5kUGFnZSA9PSBJbnZhbGlkQmxvY2tO dW1iZXIpCisJCQkJCXRlLT5kYXRhTGVuZ3RoID0gdGJpbmZvLT5yZWxwYWdlcyAtIGNodW5rX3Rk aW5mby0+c3RhcnRQYWdlOworCQkJCWVsc2UKKwkJCQkJdGUtPmRhdGFMZW5ndGggPSBkb3B0LT5t YXhfdGFibGVfc2VnbWVudF9wYWdlczsKKwkJCQkvKiBsZXQncyBhc3N1bWUgdG9hc3QgcGFnZXMg ZGlzdHJpYnV0ZSBldmVubHkgYW1vbmcgY2h1bmtzICovCisJCQkJaWYodGJpbmZvLT5yZWxwYWdl cykKKwkJCQkJdGUtPmRhdGFMZW5ndGggKz0gdGUtPmRhdGFMZW5ndGggKiB0YmluZm8tPnRvYXN0 cGFnZXMgLyB0YmluZm8tPnJlbHBhZ2VzOworCQkJfQorCisJCQlkZXN0cm95UFFFeHBCdWZmZXIo Y2h1bmtfZGVzYyk7CisJCX0KIAl9CiAKIAlkZXN0cm95UFFFeHBCdWZmZXIoY29weUJ1Zik7CkBA IC0zMDgxLDYgKzMxNzAsOCBAQCBtYWtlVGFibGVEYXRhSW5mbyhEdW1wT3B0aW9ucyAqZG9wdCwg VGFibGVJbmZvICp0YmluZm8pCiAJdGRpbmZvLT5kb2JqLm5hbWVzcGFjZSA9IHRiaW5mby0+ZG9i ai5uYW1lc3BhY2U7CiAJdGRpbmZvLT50ZHRhYmxlID0gdGJpbmZvOwogCXRkaW5mby0+ZmlsdGVy Y29uZCA9IE5VTEw7CS8qIG1pZ2h0IGdldCBzZXQgbGF0ZXIgKi8KKwl0ZGluZm8tPnN0YXJ0UGFn ZSA9IEludmFsaWRCbG9ja051bWJlcjsgLyogd2UgdXNlIHRoaXMgYXMgaW5kaWNhdGlvbiB0aGF0 IG5vIGNodW5raW5nIGlzIG5lZWRlZCAqLworCXRkaW5mby0+ZW5kUGFnZSA9IEludmFsaWRCbG9j a051bWJlcjsKIAlhZGRPYmplY3REZXBlbmRlbmN5KCZ0ZGluZm8tPmRvYmosIHRiaW5mby0+ZG9i ai5kdW1wSWQpOwogCiAJLyogQSBUYWJsZURhdGFJbmZvIGNvbnRhaW5zIGRhdGEsIG9mIGNvdXJz ZSAqLwpAQCAtNzM0Nyw4ICs3NDM4LDE2IEBAIGdldFRhYmxlcyhBcmNoaXZlICpmb3V0LCBpbnQg Km51bVRhYmxlcykKIAkJCQkJCSAiYy5yZWxuYW1lc3BhY2UsIGMucmVsa2luZCwgYy5yZWx0eXBl LCAiCiAJCQkJCQkgImMucmVsb3duZXIsICIKIAkJCQkJCSAiYy5yZWxjaGVja3MsICIKLQkJCQkJ CSAiYy5yZWxoYXNpbmRleCwgYy5yZWxoYXNydWxlcywgYy5yZWxwYWdlcywgIgotCQkJCQkJICJj LnJlbHR1cGxlcywgYy5yZWxhbGx2aXNpYmxlLCAiKTsKKwkJCQkJCSAiYy5yZWxoYXNpbmRleCwg Yy5yZWxoYXNydWxlcywgIik7CisKKwkvKiBmZXRjaCBjdXJyZW50IHJlbGF0aW9uIHNpemUgaWYg Y2h1bmtpbmcgaXMgcmVxdWVzdGVkICovCisJaWYoZG9wdC0+bWF4X3RhYmxlX3NlZ21lbnRfcGFn ZXMgIT0gSW52YWxpZEJsb2NrTnVtYmVyKQorCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwg InBnX3JlbGF0aW9uX3NpemUoYy5vaWQpL2N1cnJlbnRfc2V0dGluZygnYmxvY2tfc2l6ZScpOjpp bnQgQVMgcmVscGFnZXMsICIpOworCWVsc2UKKwkJLyogcGdfY2xhc3MucmVscGFnZXMgc3RvcmVz IEJsb2NrTnVtYmVyICh1aW50MzIpIGluIGFuIGludCBmaWVsZCwgY29udmVydCB0byBvaWQgdG8g Z2V0IHVuc2lnbmVkIGludCBvdXQgKi8KKwkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocXVlcnksICJj LnJlbHBhZ2VzOjpvaWQsICIpOworCisJYXBwZW5kUFFFeHBCdWZmZXJTdHIocXVlcnksICJjLnJl bHR1cGxlcywgYy5yZWxhbGx2aXNpYmxlLCAiKTsKIAogCWlmIChmb3V0LT5yZW1vdGVWZXJzaW9u ID49IDE4MDAwMCkKIAkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocXVlcnksICJjLnJlbGFsbGZyb3pl biwgIik7CkBAIC03NTg5LDcgKzc2ODgsNyBAQCBnZXRUYWJsZXMoQXJjaGl2ZSAqZm91dCwgaW50 ICpudW1UYWJsZXMpCiAJCXRibGluZm9baV0ubmNoZWNrID0gYXRvaShQUWdldHZhbHVlKHJlcywg aSwgaV9yZWxjaGVja3MpKTsKIAkJdGJsaW5mb1tpXS5oYXNpbmRleCA9IChzdHJjbXAoUFFnZXR2 YWx1ZShyZXMsIGksIGlfcmVsaGFzaW5kZXgpLCAidCIpID09IDApOwogCQl0YmxpbmZvW2ldLmhh c3J1bGVzID0gKHN0cmNtcChQUWdldHZhbHVlKHJlcywgaSwgaV9yZWxoYXNydWxlcyksICJ0Iikg PT0gMCk7Ci0JCXRibGluZm9baV0ucmVscGFnZXMgPSBhdG9pKFBRZ2V0dmFsdWUocmVzLCBpLCBp X3JlbHBhZ2VzKSk7CisJCXRibGluZm9baV0ucmVscGFnZXMgPSBzdHJ0b3VsKFBRZ2V0dmFsdWUo cmVzLCBpLCBpX3JlbHBhZ2VzKSwgTlVMTCwgMTApOwogCQlpZiAoUFFnZXRpc251bGwocmVzLCBp LCBpX3RvYXN0cGFnZXMpKQogCQkJdGJsaW5mb1tpXS50b2FzdHBhZ2VzID0gMDsKIAkJZWxzZQpk aWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuaCBiL3NyYy9iaW4vcGdfZHVtcC9w Z19kdW1wLmgKaW5kZXggNWE2NzI2ZDhiMTIuLjg0ZTY4MmQ1ODVmIDEwMDY0NAotLS0gYS9zcmMv YmluL3BnX2R1bXAvcGdfZHVtcC5oCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmgKQEAg LTE2LDYgKzE2LDcgQEAKIAogI2luY2x1ZGUgInBnX2JhY2t1cC5oIgogI2luY2x1ZGUgImNhdGFs b2cvcGdfcHVibGljYXRpb25fZC5oIgorI2luY2x1ZGUgInN0b3JhZ2UvYmxvY2suaCIKIAogCiAj ZGVmaW5lIG9pZGNtcCh4LHkpICggKCh4KSA8ICh5KSA/IC0xIDogKCh4KSA+ICh5KSkgPyAgMSA6 IDApICkKQEAgLTMzNSw3ICszMzYsMTEgQEAgdHlwZWRlZiBzdHJ1Y3QgX3RhYmxlSW5mbwogCU9p ZAkJCW93bmluZ190YWI7CQkvKiBPSUQgb2YgdGFibGUgb3duaW5nIHNlcXVlbmNlICovCiAJaW50 CQkJb3duaW5nX2NvbDsJCS8qIGF0dHIgIyBvZiBjb2x1bW4gb3duaW5nIHNlcXVlbmNlICovCiAJ Ym9vbAkJaXNfaWRlbnRpdHlfc2VxdWVuY2U7Ci0JaW50MzIJCXJlbHBhZ2VzOwkJLyogdGFibGUn cyBzaXplIGluIHBhZ2VzIChmcm9tIHBnX2NsYXNzKSAqLworCUJsb2NrTnVtYmVyCXJlbHBhZ2Vz OwkJLyogdGFibGUncyBzaXplIGluIHBhZ2VzIChmcm9tIHBnX2NsYXNzKSAKKwkgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICogY29udmVydGVkIHRvIHVuc2lnbmVkIGludGVnZXIKKwkJCQkJ CQkJICogd2hlbiAtLW1heC10YWJsZS1zZWdtZW50LXBhZ2VzIGlzIHNldAorCQkJCQkJCQkgKiB0 aGUgY29tcHV0ZWQgZnJvbSBwZ19yZWxhdGlvbl9zaXplKCkKKwkgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICovCiAJaW50CQkJdG9hc3RwYWdlczsJCS8qIHRvYXN0IHRhYmxlJ3Mgc2l6ZSBp biBwYWdlcywgaWYgYW55ICovCiAKIAlib29sCQlpbnRlcmVzdGluZzsJLyogdHJ1ZSBpZiBuZWVk IHRvIGNvbGxlY3QgbW9yZSBkYXRhICovCkBAIC00MTMsOCArNDE4LDIxIEBAIHR5cGVkZWYgc3Ry dWN0IF90YWJsZURhdGFJbmZvCiAJRHVtcGFibGVPYmplY3QgZG9iajsKIAlUYWJsZUluZm8gICp0 ZHRhYmxlOwkJLyogbGluayB0byB0YWJsZSB0byBkdW1wICovCiAJY2hhcgkgICAqZmlsdGVyY29u ZDsJCS8qIFdIRVJFIGNvbmRpdGlvbiB0byBsaW1pdCByb3dzIGR1bXBlZCAqLworCS8qIHN0YXJ0 UGFnZSBhbmQgZW5kUGFnZSB0byBzdXBwb3J0IHNlZ21lbnRlZCBkdW1wICovCisJQmxvY2tOdW1i ZXIJc3RhcnRQYWdlOwkJLyogQXMgd2UgYWx3YXlzIGtub3cgdGhlIGxvd2VzdCBzZWdtZW50IHBh Z2UKKwkJCQkJCQkJICogbnVtYmVyIHdlIGNhbiB1c2UgSW52YWxpZEJsb2NrTnVtYmVyIGhlcmUK KwkJCQkJCQkJICogdG8gcmVjb2duaXplIG5vIHNlZ21lbnRpbmcgY2FzZS4KKwkJCQkJCQkJICog V2hlbiAwIGZvciB0aGUgZmlyc3QgcGFnZSBvZiBmaXJzdAorCQkJCQkJCQkgKiBzZWdtZW50IHdl IGNhbiBvbWl0IGluIHJhbmdlIHF1ZXJ5ICovCisJQmxvY2tOdW1iZXIJZW5kUGFnZTsJCS8qIGxh c3QgcGFnZSBpbiBzZWdtZW50IGZvciBwYWdlLXJhbmdlIGR1bXAsCisJICAgICAgICAgICAgICAg ICAgICAJCSAqIHN0YXJ0UGFnZSttYXhfdGFibGVfc2VnbWVudF9wYWdlcy0xIGZvciAKKwkJCQkJ CQkJICogbW9zdCBzZWdtZW50cywgYnV0IEludmFsaWRCbG9ja051bWJlciBmb3IKKwkJCQkJCQkJ ICogdGhlIGxhc3Qgb25lIHRvIGluZGljYXRlIG9wZW4gcmFuZ2UKKwkJCQkJCQkJICovCiB9IFRh YmxlRGF0YUluZm87CiAKKyNkZWZpbmUgaXNfc2VnbWVudCh0ZGlwdHIpICgodGRpcHRyKS0+c3Rh cnRQYWdlICE9IEludmFsaWRCbG9ja051bWJlcikKKwogdHlwZWRlZiBzdHJ1Y3QgX2luZHhJbmZv CiB7CiAJRHVtcGFibGVPYmplY3QgZG9iajsKQEAgLTQ0OSw3ICs0NjcsNyBAQCB0eXBlZGVmIHN0 cnVjdCBfcmVsU3RhdHNJbmZvCiB7CiAJRHVtcGFibGVPYmplY3QgZG9iajsKIAlPaWQJCQlyZWxp ZDsKLQlpbnQzMgkJcmVscGFnZXM7CisJQmxvY2tOdW1iZXIJcmVscGFnZXM7CiAJY2hhcgkgICAq cmVsdHVwbGVzOwogCWludDMyCQlyZWxhbGx2aXNpYmxlOwogCWludDMyCQlyZWxhbGxmcm96ZW47 CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvdC8wMDRfcGdfZHVtcF9wYXJhbGxlbC5wbCBi L3NyYy9iaW4vcGdfZHVtcC90LzAwNF9wZ19kdW1wX3BhcmFsbGVsLnBsCmluZGV4IDczOGYzNGIx YzFiLi40ZjM1YWVlZDliOSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3QvMDA0X3BnX2R1 bXBfcGFyYWxsZWwucGwKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3QvMDA0X3BnX2R1bXBfcGFyYWxs ZWwucGwKQEAgLTExLDYgKzExLDcgQEAgdXNlIFRlc3Q6Ok1vcmU7CiBteSAkZGJuYW1lMSA9ICdy ZWdyZXNzaW9uX3NyYyc7CiBteSAkZGJuYW1lMiA9ICdyZWdyZXNzaW9uX2Rlc3QxJzsKIG15ICRk Ym5hbWUzID0gJ3JlZ3Jlc3Npb25fZGVzdDInOworbXkgJGRibmFtZTQgPSAncmVncmVzc2lvbl9k ZXN0Myc7CiAKIG15ICRub2RlID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCdtYWlu Jyk7CiAkbm9kZS0+aW5pdDsKQEAgLTIxLDYgKzIyLDcgQEAgbXkgJGJhY2t1cGRpciA9ICRub2Rl LT5iYWNrdXBfZGlyOwogJG5vZGUtPnJ1bl9sb2coWyAnY3JlYXRlZGInLCAkZGJuYW1lMSBdKTsK ICRub2RlLT5ydW5fbG9nKFsgJ2NyZWF0ZWRiJywgJGRibmFtZTIgXSk7CiAkbm9kZS0+cnVuX2xv ZyhbICdjcmVhdGVkYicsICRkYm5hbWUzIF0pOworJG5vZGUtPnJ1bl9sb2coWyAnY3JlYXRlZGIn LCAkZGJuYW1lNCBdKTsKIAogJG5vZGUtPnNhZmVfcHNxbCgKIAkkZGJuYW1lMSwKQEAgLTg3LDQg Kzg5LDMzIEBAICRub2RlLT5jb21tYW5kX29rKAogCV0sCiAJJ3BhcmFsbGVsIHJlc3RvcmUgYXMg aW5zZXJ0cycpOwogCiskbm9kZS0+Y29tbWFuZF9vaygKKwlbCisJCSdwZ19kdW1wJywKKwkJJy0t Zm9ybWF0JyA9PiAnZGlyZWN0b3J5JywKKwkJJy0tbWF4LXRhYmxlLXNlZ21lbnQtcGFnZXMnID0+ IDIsCisJCSctLW5vLXN5bmMnLAorCQknLS1qb2JzJyA9PiAyLAorCQknLS1maWxlJyA9PiAiJGJh Y2t1cGRpci9kdW1wMyIsCisJCSRub2RlLT5jb25uc3RyKCRkYm5hbWUxKSwKKwldLAorCSdwYXJh bGxlbCBkdW1wIHdpdGggY2h1bmtzIG9mIHR3byBoZWFwIHBhZ2VzJyk7CisKKyRub2RlLT5jb21t YW5kX29rKAorCVsKKwkJJ3BnX3Jlc3RvcmUnLCAnLS12ZXJib3NlJywKKwkJJy0tZGJuYW1lJyA9 PiAkbm9kZS0+Y29ubnN0cigkZGJuYW1lNCksCisJCSctLWpvYnMnID0+IDMsCisJCSIkYmFja3Vw ZGlyL2R1bXAzIiwKKwldLAorCSdwYXJhbGxlbCByZXN0b3JlIHdpdGggY2h1bmtzIG9mIHR3byBo ZWFwIHBhZ2VzJyk7CisKK215ICR0YWJsZSA9ICd0cGxhaW4nOworbXkgJHRhYmxlaGFzaF9xdWVy eSA9ICJTRUxFQ1QgJyR0YWJsZScsIHN1bShoYXNodGV4dCh0Ojp0ZXh0KSksIGNvdW50KCopIEZS T00gJHRhYmxlIEFTIHQiOworCitteSAkcmVzdWx0XzEgPSAkbm9kZS0+c2FmZV9wc3FsKCRkYm5h bWUxLCAkdGFibGVoYXNoX3F1ZXJ5KTsKK215ICRyZXN1bHRfNCA9ICRub2RlLT5zYWZlX3BzcWwo JGRibmFtZTQsICR0YWJsZWhhc2hfcXVlcnkpOworCitpcygkcmVzdWx0XzQsICRyZXN1bHRfMSwg Ikhhc2ggY2hlY2sgZm9yICR0YWJsZTogcmVzdG9yZWQgZGIgKCRyZXN1bHRfNCkgdnMgb3JpZ2lu YWwgZGIgKCRyZXN1bHRfMSkiKTsKKwogZG9uZV90ZXN0aW5nKCk7CmRpZmYgLS1naXQgYS9zcmMv ZmVfdXRpbHMvb3B0aW9uX3V0aWxzLmMgYi9zcmMvZmVfdXRpbHMvb3B0aW9uX3V0aWxzLmMKaW5k ZXggOGQwNjU5YzExNjQuLmE1MTZkOGM4NmE5IDEwMDY0NAotLS0gYS9zcmMvZmVfdXRpbHMvb3B0 aW9uX3V0aWxzLmMKKysrIGIvc3JjL2ZlX3V0aWxzL29wdGlvbl91dGlscy5jCkBAIC04Myw2ICs4 Myw2MSBAQCBvcHRpb25fcGFyc2VfaW50KGNvbnN0IGNoYXIgKm9wdGFyZywgY29uc3QgY2hhciAq b3B0bmFtZSwKIAlyZXR1cm4gdHJ1ZTsKIH0KIAorLyoKKyAqIG9wdGlvbl9wYXJzZV91aW50MzIK KyAqCisgKiBQYXJzZSB1bnNpZ25lZCBpbnRlZ2VyIHZhbHVlIGZvciBhbiBvcHRpb24uICBJZiB0 aGUgcGFyc2luZyBpcyBzdWNjZXNzZnVsLAorICogcmV0dXJucyB0cnVlIGFuZCBzdG9yZXMgdGhl IHJlc3VsdCBpbiAqcmVzdWx0IGlmIHRoYXQncyBnaXZlbjsKKyAqIGlmIHBhcnNpbmcgZmFpbHMs IHJldHVybnMgZmFsc2UuCisgKi8KK2Jvb2wKK29wdGlvbl9wYXJzZV91aW50MzIoY29uc3QgY2hh ciAqb3B0YXJnLCBjb25zdCBjaGFyICpvcHRuYW1lLAorCQkJCSB1aW50MzIgbWluX3JhbmdlLCB1 aW50MzIgbWF4X3JhbmdlLAorCQkJCSB1aW50MzIgKnJlc3VsdCkKK3sKKwljaGFyCSAgIAkJKmVu ZHB0cjsKKwl1bnNpZ25lZCBsb25nCXZhbDsKKworCS8qIEZhaWwgaWYgdGhlcmUgaXMgYSBtaW51 cyBzaWduIGF0IHRoZSBzdGFydCBvZiB2YWx1ZSAqLworCXdoaWxlKGlzc3BhY2UoKHVuc2lnbmVk IGNoYXIpICpvcHRhcmcpKQorCQlvcHRhcmcrKzsKKwlpZigqb3B0YXJnID09ICctJykKKwl7CisJ CXBnX2xvZ19lcnJvcigidmFsdWUgXCIlc1wiIGZvciBvcHRpb24gJXMgY2FuIG5vdCBiZSBuZWdh dGl2ZSIsCisJCQkJCW9wdGFyZywgb3B0bmFtZSk7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwll cnJubyA9IDA7CisJdmFsID0gc3RydG91bChvcHRhcmcsICZlbmRwdHIsIDEwKTsKKworCS8qCisJ ICogU2tpcCBhbnkgdHJhaWxpbmcgd2hpdGVzcGFjZTsgaWYgYW55dGhpbmcgYnV0IHdoaXRlc3Bh Y2UgcmVtYWlucyBiZWZvcmUKKwkgKiB0aGUgdGVybWluYXRpbmcgY2hhcmFjdGVyLCBmYWlsLgor CSAqLworCXdoaWxlICgqZW5kcHRyICE9ICdcMCcgJiYgaXNzcGFjZSgodW5zaWduZWQgY2hhcikg KmVuZHB0cikpCisJCWVuZHB0cisrOworCisJaWYgKCplbmRwdHIgIT0gJ1wwJykKKwl7CisJCXBn X2xvZ19lcnJvcigiaW52YWxpZCB2YWx1ZSBcIiVzXCIgZm9yIG9wdGlvbiAlcyIsCisJCQkJCSBv cHRhcmcsIG9wdG5hbWUpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJLyogYXMgbWluX3Jhbmdl IGFuZCBtYXhfcmFuZ2UgYXJlIHVpbnQzMiB0aGVuIHRoZSByYW5nZSBjaGVjayB3aWxsCisJICog Y2F0Y2ggdGhlIGNhc2Ugd2hlcmUgdW5zaWduZWQgbG9uZyB2YWwgaXMgb3V0c2lkZSAzMiBiaXQg cmFuZ2UgKi8KKwlpZiAoZXJybm8gPT0gRVJBTkdFIHx8IHZhbCA8IG1pbl9yYW5nZSB8fCB2YWwg PiBtYXhfcmFuZ2UpCisJeworCQlwZ19sb2dfZXJyb3IoIiVzIG5vdCBpbiByYW5nZSAldS4uJXUi LCBvcHRuYW1lLCBtaW5fcmFuZ2UsIG1heF9yYW5nZSk7CisJCXJldHVybiBmYWxzZTsKKwl9CisK KwlpZiAocmVzdWx0KQorCQkqcmVzdWx0ID0gKHVpbnQzMikgdmFsOworCXJldHVybiB0cnVlOwor fQorCiAvKgogICogUHJvdmlkZSBzdHJpY3RseSBoYXJtb25pemVkIGhhbmRsaW5nIG9mIHRoZSAt LXN5bmMtbWV0aG9kIG9wdGlvbi4KICAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvZmVfdXRp bHMvb3B0aW9uX3V0aWxzLmggYi9zcmMvaW5jbHVkZS9mZV91dGlscy9vcHRpb25fdXRpbHMuaApp bmRleCBkOTc1ZGI3N2FmMi4uNjdmZDM2NTBkN2EgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2Zl X3V0aWxzL29wdGlvbl91dGlscy5oCisrKyBiL3NyYy9pbmNsdWRlL2ZlX3V0aWxzL29wdGlvbl91 dGlscy5oCkBAIC0yMiw2ICsyMiw5IEBAIGV4dGVybiB2b2lkIGhhbmRsZV9oZWxwX3ZlcnNpb25f b3B0cyhpbnQgYXJnYywgY2hhciAqYXJndltdLAogZXh0ZXJuIGJvb2wgb3B0aW9uX3BhcnNlX2lu dChjb25zdCBjaGFyICpvcHRhcmcsIGNvbnN0IGNoYXIgKm9wdG5hbWUsCiAJCQkJCQkJIGludCBt aW5fcmFuZ2UsIGludCBtYXhfcmFuZ2UsCiAJCQkJCQkJIGludCAqcmVzdWx0KTsKK2V4dGVybiBi b29sIG9wdGlvbl9wYXJzZV91aW50MzIoY29uc3QgY2hhciAqb3B0YXJnLCBjb25zdCBjaGFyICpv cHRuYW1lLAorCQkJCQkJCSB1aW50MzIgbWluX3JhbmdlLCB1aW50MzIgbWF4X3JhbmdlLAorCQkJ CQkJCSB1aW50MzIgKnJlc3VsdCk7CiBleHRlcm4gYm9vbCBwYXJzZV9zeW5jX21ldGhvZChjb25z dCBjaGFyICpvcHRhcmcsCiAJCQkJCQkJICBEYXRhRGlyU3luY01ldGhvZCAqc3luY19tZXRob2Qp OwogZXh0ZXJuIHZvaWQgY2hlY2tfbXV0X2V4Y2xfb3B0c19pbnRlcm5hbChpbnQgbiwuLi4pOwot LSAKMi41My4wLjEwMTguZzJiYjBlNTEyNDMtZ29vZwoK --0000000000002857fc064e413d9e--