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 1rrwWN-003jJX-J3 for pgsql-hackers@arkaria.postgresql.org; Wed, 03 Apr 2024 09:03:04 +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 1rrwWM-00H4SG-7H for pgsql-hackers@arkaria.postgresql.org; Wed, 03 Apr 2024 09:03:02 +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 1rrwWL-00H4S8-HQ for pgsql-hackers@lists.postgresql.org; Wed, 03 Apr 2024 09:03:01 +0000 Received: from mail-lj1-x22e.google.com ([2a00:1450:4864:20::22e]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1rrwWI-000KX2-GY for pgsql-hackers@postgresql.org; Wed, 03 Apr 2024 09:03:00 +0000 Received: by mail-lj1-x22e.google.com with SMTP id 38308e7fff4ca-2d6fd3cfaa6so84866091fa.2 for ; Wed, 03 Apr 2024 02:02:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1712134976; x=1712739776; darn=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=cq2xnqTImCRToUZWvO7r1v8ZbOLowTkyZzVVyjb/9Sc=; b=cKB1oLJ+qpeWDdzPanRA6V2YRTT4Hb6yrRqOfAVBmOIEXYPP0i4nbHXDa2vHRE+vNn 2kiXEljKohrV3aXdANVYCe90PY0kKLJE0Wa6X2XMYdRfzMFJR1E2+MZZAzHYRAzbQd6C 4uhE4N11+a6gpQItpIJr2nA18E04MTr1cd7XwlO8/JsK3zmqoagNrgAZtfvMcqWWcu5t wXdLlmks9J2iX+xtO7TjqMPFUw9lvR3k36MwzJdZIDTPWZHXHpcbbbs5zNrExsPq5D97 Nm6oRQkvyKPn+p98dCVdXG1J+y60q9WnpClFyWVKu77dQPqFPvdyLYWGdnhUsis1p48A n0uQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1712134976; x=1712739776; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=cq2xnqTImCRToUZWvO7r1v8ZbOLowTkyZzVVyjb/9Sc=; b=tsE4cvsFbNRQ3/LPIkP8W3ZQNHUxsBxutbmLpFY42jWUuZK+3ct+eYKy2cP0O0YCpC 7dbea47mK83YKpkcp1fsV22s8Lb+dgJz82Exdk860JuO0EELQ0aR1L/tx0JQMtKExfDr c2hsuEJxD59VXPOltoKsauu8DYFX4BIeG073Dz+Tdv2CHCPnz6GTk1FsjKnEwl8YLf67 WXe+daUeyPQxomaWDkN4cgFtuSy14+mNGvYcSXV2fzcin88wEXH5QF9eTRqbKYFI1/N5 Dr1G0y1I7j4S5kk3/nGwYaXbGAlVAXOzr9+jPFLwaKxlLG3AYG3vPKh18wc55Eq9Lwh5 9I5A== X-Forwarded-Encrypted: i=1; AJvYcCWxS3M/ATWdZ/FUpGCMNR7lY/UdOYpLKMDE+1ny3j73R6j0tFq1JHfMUoPnGd4WTFGb2rkMFOg41LaiEUECNosuIT6vqdeqD+cRAurf X-Gm-Message-State: AOJu0Yy2+4ZFAgI3dSPBIidjYUync4ChFmHtiY0d9hjDSsA1qFwCyU2y PUuJd/CFY5KhUD9IqxyYBtUp/4DlBhfo+SKQ2WwFvZ/jIJmQUMKtFSfR6aZW+NOyD5wINg9z/1l egJH4GInl1t1P1VPQguxK5FG68s0= X-Google-Smtp-Source: AGHT+IFyTqvO2NRmOu4n7l8pFxsqeievh/KLjxdo7IjnjaGhfTbZBDDd8EQ9Lp0gk5EhdSEstokKd3lgK/amfqMalVE= X-Received: by 2002:a05:651c:1a06:b0:2d4:908e:4cc4 with SMTP id by6-20020a05651c1a0600b002d4908e4cc4mr1714351ljb.4.1712134975728; Wed, 03 Apr 2024 02:02:55 -0700 (PDT) MIME-Version: 1.0 References: <20230603223824.o7iyochli2dwwi7k@alap3.anarazel.de> <6be6f58815dc0844fbe058edf56b4e735a6efc1c.camel@j-davis.com> <2280bf7241119bb88cbe0fe5eb36490cbd04c0c0.camel@j-davis.com> <12f1a2d8dd3b6305c0354f1c701f44b7be5e54eb.camel@j-davis.com> <8633171cb034aafc260fdf37df04b6c779aa1e2f.camel@j-davis.com> In-Reply-To: <8633171cb034aafc260fdf37df04b6c779aa1e2f.camel@j-davis.com> From: Bharath Rupireddy Date: Wed, 3 Apr 2024 14:32:43 +0530 Message-ID: Subject: Re: New Table Access Methods for Multi and Single Inserts To: Jeff Davis Cc: Masahiko Sawada , PostgreSQL-development , Andres Freund , Dilip Kumar , Luc Vlaming , Justin Pryzby , Michael Paquier , Matthias van de Meent , Alexander Korotkov Content-Type: multipart/mixed; boundary="00000000000009455d06152d7d74" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000009455d06152d7d74 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Wed, Apr 3, 2024 at 1:10=E2=80=AFAM Jeff Davis wrote= : > > On Sun, 2024-03-31 at 21:18 +0530, Bharath Rupireddy wrote: > > if (table_modify_buffer_insert() is defined) > > table_modify_buffer_insert(...); > > else > > { > > myState->bistate =3D GetBulkInsertState(); > > table_tuple_insert(...); > > } > > We can't alloc/free the bulk insert state for every insert call. I see > two options: > > * Each caller needs to support two code paths: if the buffered insert > APIs are defined, then use those; otherwise the caller needs to manage > the bulk insert state itself and call the plain insert API. > > * Have default implementation for the new API methods, so that the > default for the begin method would allocate the bulk insert state, and > the default for the buffered insert method would be to call plain > insert using the bulk insert state. > > I'd prefer the latter, at least in the long term. But I haven't really > thought through the details, so perhaps we'd need to use the former. I too prefer the latter so that the caller doesn't have to have two paths. The new API can just transparently fallback to single inserts. I've implemented that in the attached v17 patch. I also tested the default APIs manually, but I'll see if I can add some tests to it the default API. > > > After we have these new APIs fully in place and used by COPY, what > > > will > > > happen to those other APIs? Will they be deprecated or will there > > > be a > > > reason to keep them? > > > > Deprecated perhaps? > > Including Alexander on this thread, because he's making changes to the > multi-insert API. We need some consensus on where we are going with > these APIs before we make more changes, and what incremental steps make > sense in v17. > > Here's where I think this API should go: > > 1. Have table_modify_begin/end and table_modify_buffer_insert, like > those that are implemented in your patch. > > 2. Add some kind of flush callback that will be called either while the > tuples are being flushed or after the tuples are flushed (but before > they are freed by the AM). (Aside: do we need to call it while the > tuples are being flushed to get the right visibility semantics for > after-row triggers?) > > 3. Add table_modify_buffer_{update|delete} APIs. > > 4. Some kind of API tweaks to help manage memory when modifying > pertitioned tables, so that the buffering doesn't get out of control. > Perhaps just reporting memory usage and allowing the caller to force > flushes would be enough. > > 5. Use these new methods for CREATE/REFRESH MATERIALIZED VIEW. This is > fairly straightforward, I believe, and handled by your patch. Indexes > are (re)built afterward, and no triggers are possible. > > 6. Use these new methods for CREATE TABLE ... AS. This is fairly > straightforward, I believe, and handled by your patch. No indexes or > triggers are possible. > > 7. Use these new methods for COPY. We have to be careful to avoid > regressions for the heap method, because it's already managing its own > buffers. If the AM manages the buffering, then it may require > additional copying of slots, which could be a disadvantage. To solve > this, we may need some minor API tweaks to avoid copying when the > caller guarantees that the memory will not be freed to early, or > perhaps expose the AM's memory context to copyfrom.c. Another thing to > consider is that the buffering in copyfrom.c is also used for FDWs, so > that buffering code path needs to be preserved in copyfrom.c even if > not used for AMs. > > 8. Use these new methods for INSERT INTO ... SELECT. One potential > challenge here is that execution nodes are not always run to > completion, so we need to be sure that the flush isn't forgotten in > that case. > > 9. Use these new methods for DELETE, UPDATE, and MERGE. MERGE can use > the buffer_insert/update/delete APIs; we don't need a separate merge > method. This probably requires that the AM maintain 3 separate buffers > to distinguish different kinds of changes at flush time (obviously > these can be initialized lazily to avoid overhead when not being used). > > 10. Use these new methods for logical apply. > > 11. Deprecate the multi_insert API. > > Thoughts on this plan? Does your patch make sense in v17 as a stepping > stone, or should we try to make all of these API changes together in > v18? I'd like to see the new multi insert API (as proposed in the v17 patches) for PG17 if possible. The basic idea with these new APIs is to let the AM implementers choose the right buffered insert strategy (one can choose the AM specific slot type to buffer the tuples, choose the AM specific memory and flushing decisions etc.). Another advantage with these new multi insert API is that the CREATE MATERIALIZED VIEW, REFRESH MATERIALIZED VIEW, CREATE TABLE AS commands for heap AM got faster by 62.54%, 68.87%, 74.31% or 2.67, 3.21, 3.89 times respectively. The performance improvement in REFRESH MATERIALIZED VIEW can benefit customers running analytical workloads on postgres. I'm fine if we gradually add more infrastructure to support COPY, INSERT INTO SELECT, Logical Replication Apply, Table Rewrites in future releases. I'm sure it requires a lot more thoughts and time. > Also, a sample AM code would be a huge benefit here. Writing a real AM > is hard, but perhaps we can at least have an example one to demonstrate > how to use these APIs? The heap AM implements this new API. Also, there's a default implementation for the new API falling back on to single inserts. Aren't these sufficient to help AM implementers to come up with their own implementations? -- Bharath Rupireddy PostgreSQL Contributors Team RDS Open Source Databases Amazon Web Services: https://aws.amazon.com --00000000000009455d06152d7d74 Content-Type: application/x-patch; name="v17-0001-Introduce-new-table-modify-access-methods.patch" Content-Disposition: attachment; filename="v17-0001-Introduce-new-table-modify-access-methods.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lujk8enm0 RnJvbSA0ZTM0OWEwZDg3N2E0OGZmNDA2OGY3NzZlNjVkY2ZlYzQ5ZTk2MzU2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBCaGFyYXRoIFJ1cGlyZWRkeSA8YmhhcmF0aC5ydXBpcmVkZHlm b3Jwb3N0Z3Jlc0BnbWFpbC5jb20+CkRhdGU6IFdlZCwgMyBBcHIgMjAyNCAwODozNjo1MCArMDAw MApTdWJqZWN0OiBbUEFUQ0ggdjE3IDEvMl0gSW50cm9kdWNlIG5ldyB0YWJsZSBtb2RpZnkgYWNj ZXNzIG1ldGhvZHMKCi0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtLmMgICAgICAg ICB8IDE4OSArKysrKysrKysrKysrKysrKysrKysrLQogc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAv aGVhcGFtX2hhbmRsZXIuYyB8ICAgNSArCiBzcmMvYmFja2VuZC9hY2Nlc3MvdGFibGUvdGFibGVh bS5jICAgICAgIHwgIDg2ICsrKysrKysrKysrCiBzcmMvYmFja2VuZC9hY2Nlc3MvdGFibGUvdGFi bGVhbWFwaS5jICAgIHwgICA4ICsKIHNyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaCAgICAgICAg ICAgICAgfCAgNDEgKysrKysKIHNyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmggICAgICAgICAg ICAgfCAxMDYgKysrKysrKysrKysrKwogc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3Qg ICAgICAgICB8ICAgMyArCiA3IGZpbGVzIGNoYW5nZWQsIDQzNyBpbnNlcnRpb25zKCspLCAxIGRl bGV0aW9uKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtLmMg Yi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW0uYwppbmRleCBiNjYxZDk4MTFlLi42OWY4 YzU5N2Q4IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW0uYworKysg Yi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW0uYwpAQCAtNjQsNiArNjQsNyBAQAogI2lu Y2x1ZGUgInN0b3JhZ2Uvc3RhbmRieS5oIgogI2luY2x1ZGUgInV0aWxzL2RhdHVtLmgiCiAjaW5j bHVkZSAidXRpbHMvaW52YWwuaCIKKyNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgogI2luY2x1 ZGUgInV0aWxzL3JlbGNhY2hlLmgiCiAjaW5jbHVkZSAidXRpbHMvc25hcG1nci5oIgogI2luY2x1 ZGUgInV0aWxzL3NwY2NhY2hlLmgiCkBAIC0xMDcsNyArMTA4LDggQEAgc3RhdGljIGludAlib3R0 b211cF9zb3J0X2FuZF9zaHJpbmsoVE1fSW5kZXhEZWxldGVPcCAqZGVsc3RhdGUpOwogc3RhdGlj IFhMb2dSZWNQdHIgbG9nX2hlYXBfbmV3X2NpZChSZWxhdGlvbiByZWxhdGlvbiwgSGVhcFR1cGxl IHR1cCk7CiBzdGF0aWMgSGVhcFR1cGxlIEV4dHJhY3RSZXBsaWNhSWRlbnRpdHkoUmVsYXRpb24g cmVsYXRpb24sIEhlYXBUdXBsZSB0cCwgYm9vbCBrZXlfcmVxdWlyZWQsCiAJCQkJCQkJCQkJYm9v bCAqY29weSk7Ci0KK3N0YXRpYyB2b2lkIGhlYXBfbW9kaWZ5X2J1ZmZlcl9mbHVzaChUYWJsZU1v ZGlmeVN0YXRlICpzdGF0ZSk7CitzdGF0aWMgdm9pZCBoZWFwX21vZGlmeV9pbnNlcnRfZW5kKFRh YmxlTW9kaWZ5U3RhdGUgKnN0YXRlKTsKIAogLyoKICAqIEVhY2ggdHVwbGUgbG9jayBtb2RlIGhh cyBhIGNvcnJlc3BvbmRpbmcgaGVhdnl3ZWlnaHQgbG9jaywgYW5kIG9uZSBvciB0d28KQEAgLTI0 NDEsNiArMjQ0MywxOTEgQEAgaGVhcF9tdWx0aV9pbnNlcnQoUmVsYXRpb24gcmVsYXRpb24sIFR1 cGxlVGFibGVTbG90ICoqc2xvdHMsIGludCBudHVwbGVzLAogCSppbnNlcnRfaW5kZXhlcyA9IHRy dWU7CiB9CiAKKy8qCisgKiBJbml0aWFsaXplIGhlYXAgbW9kaWZ5IHN0YXRlLgorICovCitUYWJs ZU1vZGlmeVN0YXRlICoKK2hlYXBfbW9kaWZ5X2JlZ2luKFJlbGF0aW9uIHJlbCwgaW50IG1vZGlm eV9mbGFncywgQ29tbWFuZElkIGNpZCwKKwkJCQkgIGludCBvcHRpb25zKQoreworCVRhYmxlTW9k aWZ5U3RhdGUgKnN0YXRlOworCU1lbW9yeUNvbnRleHQgY29udGV4dDsKKwlNZW1vcnlDb250ZXh0 IG9sZGNvbnRleHQ7CisKKwljb250ZXh0ID0gQWxsb2NTZXRDb250ZXh0Q3JlYXRlKEN1cnJlbnRN ZW1vcnlDb250ZXh0LAorCQkJCQkJCQkJImhlYXBfbW9kaWZ5IG1lbW9yeSBjb250ZXh0IiwKKwkJ CQkJCQkJCUFMTE9DU0VUX0RFRkFVTFRfU0laRVMpOworCisJb2xkY29udGV4dCA9IE1lbW9yeUNv bnRleHRTd2l0Y2hUbyhjb250ZXh0KTsKKwlzdGF0ZSA9IHBhbGxvYzAoc2l6ZW9mKFRhYmxlTW9k aWZ5U3RhdGUpKTsKKwlzdGF0ZS0+cmVsID0gcmVsOworCXN0YXRlLT5tb2RpZnlfZmxhZ3MgPSBt b2RpZnlfZmxhZ3M7CisJc3RhdGUtPm1jdHggPSBjb250ZXh0OworCXN0YXRlLT5jaWQgPSBjaWQ7 CisJc3RhdGUtPm9wdGlvbnMgPSBvcHRpb25zOworCXN0YXRlLT5pbnNlcnRfaW5kZXhlcyA9IGZh bHNlOworCXN0YXRlLT5tb2RpZnlfZW5kX2NiID0gTlVMTDsJLyogVG8gYmUgaW5zdGFsbGVkIGxh emlseSAqLworCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKKworCXJldHVybiBz dGF0ZTsKK30KKworLyoKKyAqIFN0b3JlIHBhc3NlZC1pbiB0dXBsZSBpbnRvIGluLW1lbW9yeSBi dWZmZXJlZCBzbG90cy4gV2hlbiBmdWxsLCBpbnNlcnQKKyAqIG11bHRpcGxlIHR1cGxlcyBmcm9t IHRoZSBidWZmZXJzIGludG8gaGVhcC4KKyAqLwordm9pZAoraGVhcF9tb2RpZnlfYnVmZmVyX2lu c2VydChUYWJsZU1vZGlmeVN0YXRlICpzdGF0ZSwKKwkJCQkJCSAgVHVwbGVUYWJsZVNsb3QgKnNs b3QpCit7CisJVHVwbGVUYWJsZVNsb3QgKmRzdHNsb3Q7CisJSGVhcEluc2VydFN0YXRlICppc3Rh dGU7CisJSGVhcE11bHRpSW5zZXJ0U3RhdGUgKm1pc3RhdGU7CisJTWVtb3J5Q29udGV4dCBvbGRj b250ZXh0OworCisJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhzdGF0ZS0+bWN0 eCk7CisKKwkvKiBGaXJzdCB0aW1lIHRocm91Z2gsIGluaXRpYWxpemUgaGVhcCBpbnNlcnQgc3Rh dGUgKi8KKwlpZiAoc3RhdGUtPmRhdGEgPT0gTlVMTCkKKwl7CisJCWlzdGF0ZSA9IChIZWFwSW5z ZXJ0U3RhdGUgKikgcGFsbG9jMChzaXplb2YoSGVhcEluc2VydFN0YXRlKSk7CisJCWlzdGF0ZS0+ YmlzdGF0ZSA9IE5VTEw7CisJCWlzdGF0ZS0+bWlzdGF0ZSA9IE5VTEw7CisJCXN0YXRlLT5kYXRh ID0gaXN0YXRlOworCisJCWlmICgoc3RhdGUtPm1vZGlmeV9mbGFncyAmIFRNX0ZMQUdfTVVMVElf SU5TRVJUUykgIT0gMCkKKwkJeworCQkJbWlzdGF0ZSA9IChIZWFwTXVsdGlJbnNlcnRTdGF0ZSAq KSBwYWxsb2MwKHNpemVvZihIZWFwTXVsdGlJbnNlcnRTdGF0ZSkpOworCQkJbWlzdGF0ZS0+c2xv dHMgPSAoVHVwbGVUYWJsZVNsb3QgKiopIHBhbGxvYzAoc2l6ZW9mKFR1cGxlVGFibGVTbG90ICop ICogSEVBUF9NQVhfQlVGRkVSRURfU0xPVFMpOworCQkJaXN0YXRlLT5taXN0YXRlID0gbWlzdGF0 ZTsKKwkJfQorCisJCWlmICgoc3RhdGUtPm1vZGlmeV9mbGFncyAmIFRNX0ZMQUdfQkFTX0JVTEtX UklURSkgIT0gMCkKKwkJCWlzdGF0ZS0+YmlzdGF0ZSA9IEdldEJ1bGtJbnNlcnRTdGF0ZSgpOwor CisJCXN0YXRlLT5tb2RpZnlfZW5kX2NiID0gaGVhcF9tb2RpZnlfaW5zZXJ0X2VuZDsKKwl9CisK Kwlpc3RhdGUgPSAoSGVhcEluc2VydFN0YXRlICopIHN0YXRlLT5kYXRhOworCUFzc2VydChpc3Rh dGUtPm1pc3RhdGUgIT0gTlVMTCk7CisJbWlzdGF0ZSA9IGlzdGF0ZS0+bWlzdGF0ZTsKKwlBc3Nl cnQoaXN0YXRlLT5iaXN0YXRlICE9IE5VTEwpOworCisJZHN0c2xvdCA9IG1pc3RhdGUtPnNsb3Rz W21pc3RhdGUtPmN1cl9zbG90c107CisJaWYgKGRzdHNsb3QgPT0gTlVMTCkKKwl7CisJCS8qCisJ CSAqIFdlIHVzZSB2aXJ0dWFsIHR1cGxlIHNsb3RzIGJ1ZmZlcmVkIHNsb3RzIGZvciBsZXZlcmFn aW5nIHRoZQorCQkgKiBvcHRpbWl6YXRpb24gaXQgcHJvdmlkZXMgdG8gbWluaW1pemUgcGh5c2lj YWwgZGF0YSBjb3B5aW5nLiBUaGUKKwkJICogdmlydHVhbCBzbG90IGdldHMgbWF0ZXJpYWxpemVk IHdoZW4gd2UgY29weSAodmlhIGJlbG93CisJCSAqIEV4ZWNDb3B5U2xvdCkgdGhlIHR1cGxlcyBm cm9tIHRoZSBzb3VyY2Ugc2xvdCB3aGljaCBjYW4gYmUgb2YgYW55CisJCSAqIHR5cGUuIFRoaXMg d2F5LCBpdCBpcyBlbnN1cmVkIHRoYXQgdGhlIHR1cGxlIHN0b3JhZ2UgZG9lc24ndCBkZXBlbmQK KwkJICogb24gZXh0ZXJuYWwgbWVtb3J5LCBiZWNhdXNlIGFsbCB0aGUgZGF0dW1zIHRoYXQgYXJl bid0IHBhc3NlZCBieQorCQkgKiB2YWx1ZSBhcmUgY29waWVkIGludG8gdGhlIHNsb3QncyBtZW1v cnkgY29udGV4dC4KKwkJICovCisJCWRzdHNsb3QgPSBNYWtlVHVwbGVUYWJsZVNsb3QoUmVsYXRp b25HZXREZXNjcihzdGF0ZS0+cmVsKSwKKwkJCQkJCQkJCSAmVFRTT3BzVmlydHVhbCk7CisJCW1p c3RhdGUtPnNsb3RzW21pc3RhdGUtPmN1cl9zbG90c10gPSBkc3RzbG90OworCX0KKworCUV4ZWND bGVhclR1cGxlKGRzdHNsb3QpOworCUV4ZWNDb3B5U2xvdChkc3RzbG90LCBzbG90KTsKKworCW1p c3RhdGUtPmN1cl9zbG90cysrOworCisJLyoKKwkgKiBNZW1vcnkgYWxsb2NhdGVkIGZvciB0aGUg d2hvbGUgdHVwbGUgaXMgaW4gc2xvdCdzIG1lbW9yeSBjb250ZXh0LCBzbworCSAqIHVzZSBpdCBr ZWVwIHRyYWNrIG9mIHRoZSB0b3RhbCBzcGFjZSBvY2N1cGllZCBieSBhbGwgYnVmZmVyZWQgdHVw bGVzLgorCSAqLworCWlmIChUVFNfU0hPVUxERlJFRShkc3RzbG90KSkKKwkJbWlzdGF0ZS0+Y3Vy X3NpemUgKz0gTWVtb3J5Q29udGV4dE1lbUFsbG9jYXRlZChkc3RzbG90LT50dHNfbWN4dCwgZmFs c2UpOworCisJaWYgKG1pc3RhdGUtPmN1cl9zbG90cyA+PSBIRUFQX01BWF9CVUZGRVJFRF9TTE9U UyB8fAorCQltaXN0YXRlLT5jdXJfc2l6ZSA+PSBIRUFQX01BWF9CVUZGRVJFRF9CWVRFUykKKwkJ aGVhcF9tb2RpZnlfYnVmZmVyX2ZsdXNoKHN0YXRlKTsKKworCU1lbW9yeUNvbnRleHRTd2l0Y2hU byhvbGRjb250ZXh0KTsKK30KKworLyoKKyAqIEluc2VydCBtdWx0aXBsZSB0dXBsZXMgZnJvbSBp bi1tZW1vcnkgYnVmZmVyZWQgc2xvdHMgaW50byBoZWFwLgorICovCitzdGF0aWMgdm9pZAoraGVh cF9tb2RpZnlfYnVmZmVyX2ZsdXNoKFRhYmxlTW9kaWZ5U3RhdGUgKnN0YXRlKQoreworCUhlYXBJ bnNlcnRTdGF0ZSAqaXN0YXRlOworCUhlYXBNdWx0aUluc2VydFN0YXRlICptaXN0YXRlOworCU1l bW9yeUNvbnRleHQgb2xkY29udGV4dDsKKworCS8qIFF1aWNrIGV4aXQgaWYgd2UgaGF2ZW4ndCBp bnNlcnRlZCBhbnl0aGluZyB5ZXQgKi8KKwlpZiAoc3RhdGUtPmRhdGEgPT0gTlVMTCkKKwkJcmV0 dXJuOworCisJaXN0YXRlID0gKEhlYXBJbnNlcnRTdGF0ZSAqKSBzdGF0ZS0+ZGF0YTsKKwlBc3Nl cnQoaXN0YXRlLT5taXN0YXRlICE9IE5VTEwpOworCW1pc3RhdGUgPSBpc3RhdGUtPm1pc3RhdGU7 CisJQXNzZXJ0KGlzdGF0ZS0+YmlzdGF0ZSAhPSBOVUxMKTsKKworCWlmIChtaXN0YXRlLT5jdXJf c2xvdHMgPT0gMCkKKwkJcmV0dXJuOworCisJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0 Y2hUbyhzdGF0ZS0+bWN0eCk7CisKKwloZWFwX211bHRpX2luc2VydChzdGF0ZS0+cmVsLCBtaXN0 YXRlLT5zbG90cywgbWlzdGF0ZS0+Y3VyX3Nsb3RzLAorCQkJCQkgIHN0YXRlLT5jaWQsIHN0YXRl LT5vcHRpb25zLCBpc3RhdGUtPmJpc3RhdGUsCisJCQkJCSAgJnN0YXRlLT5pbnNlcnRfaW5kZXhl cyk7CisKKwltaXN0YXRlLT5jdXJfc2xvdHMgPSAwOworCW1pc3RhdGUtPmN1cl9zaXplID0gMDsK KworCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKK30KKworLyoKKyAqIEhlYXAg aW5zZXJ0IHNwZWNpZmljIGNhbGxiYWNrIHVzZWQgZm9yIHBlcmZvcm1pbmcgd29yayBhdCB0aGUg ZW5kIGxpa2UKKyAqIGZsdXNoaW5nIGJ1ZmZlcmVkIHR1cGxlcyBpZiBhbnksIGNsZWFuaW5nIHVw IHRoZSBpbnNlcnQgc3RhdGUgYW5kIGJ1ZmZlcmVkCisgKiBzbG90cy4KKyAqLworc3RhdGljIHZv aWQKK2hlYXBfbW9kaWZ5X2luc2VydF9lbmQoVGFibGVNb2RpZnlTdGF0ZSAqc3RhdGUpCit7CisJ SGVhcEluc2VydFN0YXRlICppc3RhdGU7CisKKwkvKiBRdWljayBleGl0IGlmIHdlIGhhdmVuJ3Qg aW5zZXJ0ZWQgYW55dGhpbmcgeWV0ICovCisJaWYgKHN0YXRlLT5kYXRhID09IE5VTEwpCisJCXJl dHVybjsKKworCWlzdGF0ZSA9IChIZWFwSW5zZXJ0U3RhdGUgKikgc3RhdGUtPmRhdGE7CisKKwlp ZiAoaXN0YXRlLT5taXN0YXRlICE9IE5VTEwpCisJeworCQlIZWFwTXVsdGlJbnNlcnRTdGF0ZSAq bWlzdGF0ZSA9IGlzdGF0ZS0+bWlzdGF0ZTsKKworCQloZWFwX21vZGlmeV9idWZmZXJfZmx1c2go c3RhdGUpOworCisJCUFzc2VydChtaXN0YXRlLT5jdXJfc2xvdHMgPT0gMCAmJgorCQkJICAgbWlz dGF0ZS0+Y3VyX3NpemUgPT0gMCk7CisKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBIRUFQX01BWF9C VUZGRVJFRF9TTE9UUyAmJiBtaXN0YXRlLT5zbG90c1tpXSAhPSBOVUxMOyBpKyspCisJCQlFeGVj RHJvcFNpbmdsZVR1cGxlVGFibGVTbG90KG1pc3RhdGUtPnNsb3RzW2ldKTsKKwl9CisKKwlpZiAo aXN0YXRlLT5iaXN0YXRlICE9IE5VTEwpCisJCUZyZWVCdWxrSW5zZXJ0U3RhdGUoaXN0YXRlLT5i aXN0YXRlKTsKK30KKworLyoKKyAqIENsZWFuIGhlYXAgbW9kaWZ5IHN0YXRlLgorICovCit2b2lk CitoZWFwX21vZGlmeV9lbmQoVGFibGVNb2RpZnlTdGF0ZSAqc3RhdGUpCit7CisJaWYgKHN0YXRl LT5tb2RpZnlfZW5kX2NiICE9IE5VTEwpCisJCXN0YXRlLT5tb2RpZnlfZW5kX2NiKHN0YXRlKTsK KworCU1lbW9yeUNvbnRleHREZWxldGUoc3RhdGUtPm1jdHgpOworfQorCiAvKgogICoJc2ltcGxl X2hlYXBfaW5zZXJ0IC0gaW5zZXJ0IGEgdHVwbGUKICAqCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAv aGVhcGFtX2hhbmRsZXIuYwppbmRleCBjODYwMDBkMjQ1Li5mM2FhMjk4NTFkIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jCisrKyBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMKQEAgLTI2MzgsNiArMjYzOCwxMSBAQCBz dGF0aWMgY29uc3QgVGFibGVBbVJvdXRpbmUgaGVhcGFtX21ldGhvZHMgPSB7CiAJLnR1cGxlX2lu c2VydF9zcGVjdWxhdGl2ZSA9IGhlYXBhbV90dXBsZV9pbnNlcnRfc3BlY3VsYXRpdmUsCiAJLnR1 cGxlX2NvbXBsZXRlX3NwZWN1bGF0aXZlID0gaGVhcGFtX3R1cGxlX2NvbXBsZXRlX3NwZWN1bGF0 aXZlLAogCS5tdWx0aV9pbnNlcnQgPSBoZWFwX211bHRpX2luc2VydCwKKworCS50dXBsZV9tb2Rp ZnlfYmVnaW4gPSBoZWFwX21vZGlmeV9iZWdpbiwKKwkudHVwbGVfbW9kaWZ5X2J1ZmZlcl9pbnNl cnQgPSBoZWFwX21vZGlmeV9idWZmZXJfaW5zZXJ0LAorCS50dXBsZV9tb2RpZnlfZW5kID0gaGVh cF9tb2RpZnlfZW5kLAorCiAJLnR1cGxlX2RlbGV0ZSA9IGhlYXBhbV90dXBsZV9kZWxldGUsCiAJ LnR1cGxlX3VwZGF0ZSA9IGhlYXBhbV90dXBsZV91cGRhdGUsCiAJLnR1cGxlX2xvY2sgPSBoZWFw YW1fdHVwbGVfbG9jaywKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90YWJsZS90YWJs ZWFtLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdGFibGUvdGFibGVhbS5jCmluZGV4IDgwNWQyMjJj ZWIuLjRjN2I1NDMzZWMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90YWJsZS90YWJs ZWFtLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RhYmxlL3RhYmxlYW0uYwpAQCAtMjEsNiAr MjEsNyBAQAogCiAjaW5jbHVkZSA8bWF0aC5oPgogCisjaW5jbHVkZSAiYWNjZXNzL2hlYXBhbS5o IgkJLyoganVzdCBmb3IgQnVsa0luc2VydFN0YXRlICovCiAjaW5jbHVkZSAiYWNjZXNzL3N5bmNz Y2FuLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3RhYmxlYW0uaCIKICNpbmNsdWRlICJhY2Nlc3MveGFj dC5oIgpAQCAtMjksNiArMzAsNyBAQAogI2luY2x1ZGUgInN0b3JhZ2UvYnVmbWdyLmgiCiAjaW5j bHVkZSAic3RvcmFnZS9zaG1lbS5oIgogI2luY2x1ZGUgInN0b3JhZ2Uvc21nci5oIgorI2luY2x1 ZGUgInV0aWxzL21lbXV0aWxzLmgiCiAKIC8qCiAgKiBDb25zdGFudHMgdG8gY29udHJvbCB0aGUg YmVoYXZpb3Igb2YgYmxvY2sgYWxsb2NhdGlvbiB0byBwYXJhbGxlbCB3b3JrZXJzCkBAIC00OCw2 ICs1MCw3IEBACiBjaGFyCSAgICpkZWZhdWx0X3RhYmxlX2FjY2Vzc19tZXRob2QgPSBERUZBVUxU X1RBQkxFX0FDQ0VTU19NRVRIT0Q7CiBib29sCQlzeW5jaHJvbml6ZV9zZXFzY2FucyA9IHRydWU7 CiAKK3N0YXRpYyB2b2lkIGRlZmF1bHRfdGFibGVfbW9kaWZ5X2luc2VydF9lbmQoVGFibGVNb2Rp ZnlTdGF0ZSAqc3RhdGUpOwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBTbG90IGZ1bmN0 aW9ucy4KQEAgLTc3MiwzICs3NzUsODYgQEAgdGFibGVfYmxvY2tfcmVsYXRpb25fZXN0aW1hdGVf c2l6ZShSZWxhdGlvbiByZWwsIGludDMyICphdHRyX3dpZHRocywKIAllbHNlCiAJCSphbGx2aXNm cmFjID0gKGRvdWJsZSkgcmVsYWxsdmlzaWJsZSAvIGN1cnBhZ2VzOwogfQorCisvKgorICogSW5p dGlhbGl6ZSBkZWZhdWx0IHRhYmxlIG1vZGlmeSBzdGF0ZS4KKyAqLworVGFibGVNb2RpZnlTdGF0 ZSAqCitkZWZhdWx0X3RhYmxlX21vZGlmeV9iZWdpbihSZWxhdGlvbiByZWwsIGludCBtb2RpZnlf ZmxhZ3MsIENvbW1hbmRJZCBjaWQsCisJCQkJCQkgICBpbnQgb3B0aW9ucykKK3sKKwlUYWJsZU1v ZGlmeVN0YXRlICpzdGF0ZTsKKwlNZW1vcnlDb250ZXh0IGNvbnRleHQ7CisJTWVtb3J5Q29udGV4 dCBvbGRjb250ZXh0OworCisJY29udGV4dCA9IEFsbG9jU2V0Q29udGV4dENyZWF0ZShDdXJyZW50 TWVtb3J5Q29udGV4dCwKKwkJCQkJCQkJCSJkZWZhdWx0X3RhYmxlX21vZGlmeSBtZW1vcnkgY29u dGV4dCIsCisJCQkJCQkJCQlBTExPQ1NFVF9ERUZBVUxUX1NJWkVTKTsKKworCW9sZGNvbnRleHQg PSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oY29udGV4dCk7CisJc3RhdGUgPSBwYWxsb2MwKHNpemVv ZihUYWJsZU1vZGlmeVN0YXRlKSk7CisJc3RhdGUtPnJlbCA9IHJlbDsKKwlzdGF0ZS0+bW9kaWZ5 X2ZsYWdzID0gbW9kaWZ5X2ZsYWdzOworCXN0YXRlLT5tY3R4ID0gY29udGV4dDsKKwlzdGF0ZS0+ Y2lkID0gY2lkOworCXN0YXRlLT5vcHRpb25zID0gb3B0aW9uczsKKwlzdGF0ZS0+aW5zZXJ0X2lu ZGV4ZXMgPSBmYWxzZTsKKwlzdGF0ZS0+bW9kaWZ5X2VuZF9jYiA9IE5VTEw7CS8qIFRvIGJlIGlu c3RhbGxlZCBsYXppbHkgKi8KKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7CisK KwlyZXR1cm4gc3RhdGU7Cit9CisKKy8qCisgKiBEZWZhdWx0IHRhYmxlIG1vZGlmeSBpbXBsZW1l bnRhdGlvbiBmb3IgaW5zZXJ0cy4KKyAqLwordm9pZAorZGVmYXVsdF90YWJsZV9tb2RpZnlfYnVm ZmVyX2luc2VydChUYWJsZU1vZGlmeVN0YXRlICpzdGF0ZSwKKwkJCQkJCQkJICAgVHVwbGVUYWJs ZVNsb3QgKnNsb3QpCit7CisJTWVtb3J5Q29udGV4dCBvbGRjb250ZXh0OworCisJb2xkY29udGV4 dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhzdGF0ZS0+bWN0eCk7CisKKwkvKiBGaXJzdCB0aW1l IHRocm91Z2gsIGluaXRpYWxpemUgZGVmYXVsdCB0YWJsZSBtb2RpZnkgc3RhdGUgKi8KKwlpZiAo c3RhdGUtPmRhdGEgPT0gTlVMTCkKKwl7CisJCWlmICgoc3RhdGUtPm1vZGlmeV9mbGFncyAmIFRN X0ZMQUdfQkFTX0JVTEtXUklURSkgIT0gMCkKKwkJCXN0YXRlLT5kYXRhID0gKEJ1bGtJbnNlcnRT dGF0ZSkgR2V0QnVsa0luc2VydFN0YXRlKCk7CisKKwkJc3RhdGUtPm1vZGlmeV9lbmRfY2IgPSBk ZWZhdWx0X3RhYmxlX21vZGlmeV9pbnNlcnRfZW5kOworCX0KKworCS8qIEZhbGxiYWNrIHRvIHRh YmxlIEFNIHNpbmdsZSBpbnNlcnQgcm91dGluZSAqLworCXRhYmxlX3R1cGxlX2luc2VydChzdGF0 ZS0+cmVsLAorCQkJCQkgICBzbG90LAorCQkJCQkgICBzdGF0ZS0+Y2lkLAorCQkJCQkgICBzdGF0 ZS0+b3B0aW9ucywKKwkJCQkJICAgKEJ1bGtJbnNlcnRTdGF0ZSkgc3RhdGUtPmRhdGEsCisJCQkJ CSAgICZzdGF0ZS0+aW5zZXJ0X2luZGV4ZXMpOworCisJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9s ZGNvbnRleHQpOworfQorCisvKgorICogRGVmYXVsdCB0YWJsZSBtb2RpZnkgaW5zZXJ0IHNwZWNp ZmljIGNhbGxiYWNrIHVzZWQgZm9yIHBlcmZvcm1pbmcgd29yayBhdAorICogdGhlIGVuZCBsaWtl IGNsZWFuaW5nIHVwIHRoZSBidWxrIGluc2VydCBzdGF0ZS4KKyAqLworc3RhdGljIHZvaWQKK2Rl ZmF1bHRfdGFibGVfbW9kaWZ5X2luc2VydF9lbmQoVGFibGVNb2RpZnlTdGF0ZSAqc3RhdGUpCit7 CisJaWYgKHN0YXRlLT5kYXRhICE9IE5VTEwpCisJCUZyZWVCdWxrSW5zZXJ0U3RhdGUoKEJ1bGtJ bnNlcnRTdGF0ZSkgc3RhdGUtPmRhdGEpOworfQorCisvKgorICogQ2xlYW4gZGVmYXVsdCB0YWJs ZSBtb2RpZnkgc3RhdGUuCisgKi8KK3ZvaWQKK2RlZmF1bHRfdGFibGVfbW9kaWZ5X2VuZChUYWJs ZU1vZGlmeVN0YXRlICpzdGF0ZSkKK3sKKwlpZiAoc3RhdGUtPm1vZGlmeV9lbmRfY2IgIT0gTlVM TCkKKwkJc3RhdGUtPm1vZGlmeV9lbmRfY2Ioc3RhdGUpOworCisJTWVtb3J5Q29udGV4dERlbGV0 ZShzdGF0ZS0+bWN0eCk7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdGFibGUv dGFibGVhbWFwaS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RhYmxlL3RhYmxlYW1hcGkuYwppbmRl eCA1NWI4Y2FlYWRmLi45YzA5NWI5M2U3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3Mv dGFibGUvdGFibGVhbWFwaS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90YWJsZS90YWJsZWFt YXBpLmMKQEAgLTk1LDYgKzk1LDE0IEBAIEdldFRhYmxlQW1Sb3V0aW5lKE9pZCBhbWhhbmRsZXIp CiAJQXNzZXJ0KHJvdXRpbmUtPnNjYW5fc2FtcGxlX25leHRfYmxvY2sgIT0gTlVMTCk7CiAJQXNz ZXJ0KHJvdXRpbmUtPnNjYW5fc2FtcGxlX25leHRfdHVwbGUgIT0gTlVMTCk7CiAKKwkvKiBvcHRp b25hbCwgYnV0IGVpdGhlciBhbGwgb2YgdGhlbSBhcmUgZGVmaW5lZCBvciBub25lLiAqLworCUFz c2VydCgocm91dGluZS0+dHVwbGVfbW9kaWZ5X2JlZ2luID09IE5VTEwgJiYKKwkJCXJvdXRpbmUt PnR1cGxlX21vZGlmeV9idWZmZXJfaW5zZXJ0ID09IE5VTEwgJiYKKwkJCXJvdXRpbmUtPnR1cGxl X21vZGlmeV9lbmQgPT0gTlVMTCkgfHwKKwkJICAgKHJvdXRpbmUtPnR1cGxlX21vZGlmeV9iZWdp biAhPSBOVUxMICYmCisJCQlyb3V0aW5lLT50dXBsZV9tb2RpZnlfYnVmZmVyX2luc2VydCAhPSBO VUxMICYmCisJCQlyb3V0aW5lLT50dXBsZV9tb2RpZnlfZW5kICE9IE5VTEwpKTsKKwogCXJldHVy biByb3V0aW5lOwogfQogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgg Yi9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgKaW5kZXggYjYzMmZlOTUzYy4uYjM1YmE1NTA5 YiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oCisrKyBiL3NyYy9pbmNs dWRlL2FjY2Vzcy9oZWFwYW0uaApAQCAtMjM2LDYgKzIzNiwzNiBAQCBodHN2X2dldF92YWxpZF9z dGF0dXMoaW50IHN0YXR1cykKIAlyZXR1cm4gKEhUU1ZfUmVzdWx0KSBzdGF0dXM7CiB9CiAKKy8q CisgKiBNYXhpbXVtIG51bWJlciBvZiBzbG90cyB0aGF0IG11bHRpLWluc2VydCBidWZmZXJzIGNh biBob2xkLgorICoKKyAqIENhdXRpb246IERvbid0IG1ha2UgdGhpcyB0b28gYmlnLCBhcyB3ZSBj b3VsZCBlbmQgdXAgd2l0aCB0aGlzIG1hbnkgdHVwbGVzCisgKiBzdG9yZWQgaW4gbXVsdGkgaW5z ZXJ0IGJ1ZmZlci4KKyAqLworI2RlZmluZSBIRUFQX01BWF9CVUZGRVJFRF9TTE9UUwkJMTAwMAor CisvKiBNYXhpbXVtIHNpemUgb2YgYWxsIHR1cGxlcyB0aGF0IG11bHRpLWluc2VydCBidWZmZXJz IGNhbiBob2xkICovCisjZGVmaW5lIEhFQVBfTUFYX0JVRkZFUkVEX0JZVEVTCQk2NTUzNQorCit0 eXBlZGVmIHN0cnVjdCBIZWFwTXVsdGlJbnNlcnRTdGF0ZQoreworCS8qIEFycmF5IG9mIGJ1ZmZl cmVkIHNsb3RzICovCisJVHVwbGVUYWJsZVNsb3QgKipzbG90czsKKworCS8qIE51bWJlciBvZiBi dWZmZXJlZCBzbG90cyBjdXJyZW50bHkgaGVsZCAqLworCWludAkJCWN1cl9zbG90czsKKworCS8q IEFwcHJveGltYXRlIHNpemUgb2YgYWxsIHR1cGxlcyBjdXJyZW50bHkgaGVsZCBpbiBidWZmZXJl ZCBzbG90cyAqLworCVNpemUJCWN1cl9zaXplOworfSBIZWFwTXVsdGlJbnNlcnRTdGF0ZTsKKwor dHlwZWRlZiBzdHJ1Y3QgSGVhcEluc2VydFN0YXRlCit7CisJc3RydWN0IEJ1bGtJbnNlcnRTdGF0 ZURhdGEgKmJpc3RhdGU7CisJSGVhcE11bHRpSW5zZXJ0U3RhdGUgKm1pc3RhdGU7Cit9IEhlYXBJ bnNlcnRTdGF0ZTsKKworCiAvKiAtLS0tLS0tLS0tLS0tLS0tCiAgKgkJZnVuY3Rpb24gcHJvdG90 eXBlcyBmb3IgaGVhcCBhY2Nlc3MgbWV0aG9kCiAgKgpAQCAtMjg2LDYgKzMxNiwxNyBAQCBleHRl cm4gdm9pZCBoZWFwX2luc2VydChSZWxhdGlvbiByZWxhdGlvbiwgSGVhcFR1cGxlIHR1cCwgQ29t bWFuZElkIGNpZCwKIGV4dGVybiB2b2lkIGhlYXBfbXVsdGlfaW5zZXJ0KFJlbGF0aW9uIHJlbGF0 aW9uLCBzdHJ1Y3QgVHVwbGVUYWJsZVNsb3QgKipzbG90cywKIAkJCQkJCQkgIGludCBudHVwbGVz LCBDb21tYW5kSWQgY2lkLCBpbnQgb3B0aW9ucywKIAkJCQkJCQkgIEJ1bGtJbnNlcnRTdGF0ZSBi aXN0YXRlLCBib29sICppbnNlcnRfaW5kZXhlcyk7CisKK2V4dGVybiBUYWJsZU1vZGlmeVN0YXRl ICpoZWFwX21vZGlmeV9iZWdpbihSZWxhdGlvbiByZWwsCisJCQkJCQkJCQkJICAgaW50IG1vZGlm eV9mbGFncywKKwkJCQkJCQkJCQkgICBDb21tYW5kSWQgY2lkLAorCQkJCQkJCQkJCSAgIGludCBv cHRpb25zKTsKKworZXh0ZXJuIHZvaWQgaGVhcF9tb2RpZnlfYnVmZmVyX2luc2VydChUYWJsZU1v ZGlmeVN0YXRlICpzdGF0ZSwKKwkJCQkJCQkJCSAgVHVwbGVUYWJsZVNsb3QgKnNsb3QpOworCitl eHRlcm4gdm9pZCBoZWFwX21vZGlmeV9lbmQoVGFibGVNb2RpZnlTdGF0ZSAqc3RhdGUpOworCiBl eHRlcm4gVE1fUmVzdWx0IGhlYXBfZGVsZXRlKFJlbGF0aW9uIHJlbGF0aW9uLCBJdGVtUG9pbnRl ciB0aWQsCiAJCQkJCQkJIENvbW1hbmRJZCBjaWQsIFNuYXBzaG90IGNyb3NzY2hlY2ssIGludCBv cHRpb25zLAogCQkJCQkJCSBzdHJ1Y3QgVE1fRmFpbHVyZURhdGEgKnRtZmQsIGJvb2wgY2hhbmdp bmdQYXJ0LApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxlYW0uaCBiL3NyYy9p bmNsdWRlL2FjY2Vzcy90YWJsZWFtLmgKaW5kZXggMmMxYTU0MDE1NS4uNzFiODIzYWY2NiAxMDA2 NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxlYW0uaAorKysgYi9zcmMvaW5jbHVkZS9h Y2Nlc3MvdGFibGVhbS5oCkBAIC0yNDgsNiArMjQ4LDM1IEBAIHR5cGVkZWYgc3RydWN0IFRNX0lu ZGV4RGVsZXRlT3AKIAlUTV9JbmRleFN0YXR1cyAqc3RhdHVzOwogfSBUTV9JbmRleERlbGV0ZU9w OwogCisvKiBUYWJsZSBtb2RpZnkgZmxhZ3MgKi8KKworLyogVXNlIG11bHRpIGluc2VydHMsIGku ZS4gYnVmZmVyIG11bHRpcGxlIHR1cGxlcyBhbmQgaW5zZXJ0IHRoZW0gYXQgb25jZSAqLworI2Rl ZmluZSBUTV9GTEFHX01VTFRJX0lOU0VSVFMJMHgwMDAwMDEKKworLyogVXNlIEJBU19CVUxLV1JJ VEUgYnVmZmVyIGFjY2VzcyBzdHJhdGVneSAqLworI2RlZmluZSBUTV9GTEFHX0JBU19CVUxLV1JJ VEUJMHgwMDAwMDIKKworc3RydWN0IFRhYmxlTW9kaWZ5U3RhdGU7CisKKy8qIFRhYmxlIEFNIHNw ZWNpZmljIGNhbGxiYWNrIHRoYXQgZ2V0cyBjYWxsZWQgaW4gdGFibGVfbW9kaWZ5X2VuZCgpICov Cit0eXBlZGVmIHZvaWQgKCpUYWJsZU1vZGlmeUVuZENQKSAoc3RydWN0IFRhYmxlTW9kaWZ5U3Rh dGUgKnN0YXRlKTsKKworLyogSG9sZHMgdGFibGUgbW9kaWZ5IHN0YXRlICovCit0eXBlZGVmIHN0 cnVjdCBUYWJsZU1vZGlmeVN0YXRlCit7CisJUmVsYXRpb24JcmVsOworCWludAkJCW1vZGlmeV9m bGFnczsKKwlNZW1vcnlDb250ZXh0IG1jdHg7CisJQ29tbWFuZElkCWNpZDsKKwlpbnQJCQlvcHRp b25zOworCWJvb2wJCWluc2VydF9pbmRleGVzOworCisJLyogVGFibGUgQU0gc3BlY2lmaWMgZGF0 YSBzdGFydHMgaGVyZSAqLworCXZvaWQJICAgKmRhdGE7CisKKwlUYWJsZU1vZGlmeUVuZENQIG1v ZGlmeV9lbmRfY2I7Cit9IFRhYmxlTW9kaWZ5U3RhdGU7CisKIC8qICJvcHRpb25zIiBmbGFnIGJp dHMgZm9yIHRhYmxlX3R1cGxlX2luc2VydCAqLwogLyogVEFCTEVfSU5TRVJUX1NLSVBfV0FMIHdh cyAweDAwMDE7IFJlbGF0aW9uTmVlZHNXQUwoKSBub3cgZ292ZXJucyAqLwogI2RlZmluZSBUQUJM RV9JTlNFUlRfU0tJUF9GU00JCTB4MDAwMgpAQCAtNTg0LDYgKzYxMywxOCBAQCB0eXBlZGVmIHN0 cnVjdCBUYWJsZUFtUm91dGluZQogCXZvaWQJCSgqZmluaXNoX2J1bGtfaW5zZXJ0KSAoUmVsYXRp b24gcmVsLCBpbnQgb3B0aW9ucyk7CiAKIAorCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAqIFRhYmxl IE1vZGlmeSByZWxhdGVkIGZ1bmN0aW9ucy4KKwkgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkgKi8KKwlU YWJsZU1vZGlmeVN0YXRlICooKnR1cGxlX21vZGlmeV9iZWdpbikgKFJlbGF0aW9uIHJlbCwKKwkJ CQkJCQkJCQkJIGludCBtb2RpZnlfZmxhZ3MsCisJCQkJCQkJCQkJCSBDb21tYW5kSWQgY2lkLAor CQkJCQkJCQkJCQkgaW50IG9wdGlvbnMpOworCXZvaWQJCSgqdHVwbGVfbW9kaWZ5X2J1ZmZlcl9p bnNlcnQpIChUYWJsZU1vZGlmeVN0YXRlICpzdGF0ZSwKKwkJCQkJCQkJCQkJICAgVHVwbGVUYWJs ZVNsb3QgKnNsb3QpOworCXZvaWQJCSgqdHVwbGVfbW9kaWZ5X2VuZCkgKFRhYmxlTW9kaWZ5U3Rh dGUgKnN0YXRlKTsKKwogCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCSAqIERETCByZWxhdGVkIGZ1bmN0 aW9uYWxpdHkuCiAJICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xNjA0LDYgKzE2NDUsNzEgQEAgdGFi bGVfZmluaXNoX2J1bGtfaW5zZXJ0KFJlbGF0aW9uIHJlbCwgaW50IG9wdGlvbnMpCiAJCXJlbC0+ cmRfdGFibGVhbS0+ZmluaXNoX2J1bGtfaW5zZXJ0KHJlbCwgb3B0aW9ucyk7CiB9CiAKKy8qIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorICogVGFibGUgTW9kaWZ5IHJlbGF0ZWQgZnVuY3Rpb25zLgorICogLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgKi8KK2V4dGVybiBUYWJsZU1vZGlmeVN0YXRlICpkZWZhdWx0X3RhYmxl X21vZGlmeV9iZWdpbihSZWxhdGlvbiByZWwsIGludCBtb2RpZnlfZmxhZ3MsCisJCQkJCQkJCQkJ CQkJQ29tbWFuZElkIGNpZCwgaW50IG9wdGlvbnMpOworZXh0ZXJuIHZvaWQJZGVmYXVsdF90YWJs ZV9tb2RpZnlfYnVmZmVyX2luc2VydChUYWJsZU1vZGlmeVN0YXRlICpzdGF0ZSwKKwkJCQkJCQkJ CQkJICAgVHVwbGVUYWJsZVNsb3QgKnNsb3QpOworZXh0ZXJuIHZvaWQgZGVmYXVsdF90YWJsZV9t b2RpZnlfZW5kKFRhYmxlTW9kaWZ5U3RhdGUgKnN0YXRlKTsKKworc3RhdGljIGlubGluZSBUYWJs ZU1vZGlmeVN0YXRlICoKK3RhYmxlX21vZGlmeV9iZWdpbihSZWxhdGlvbiByZWwsIGludCBtb2Rp ZnlfZmxhZ3MsIENvbW1hbmRJZCBjaWQsIGludCBvcHRpb25zKQoreworCWlmIChyZWwtPnJkX3Rh YmxlYW0gJiYKKwkJcmVsLT5yZF90YWJsZWFtLT50dXBsZV9tb2RpZnlfYmVnaW4gIT0gTlVMTCkK Kwl7CisJCXJldHVybiByZWwtPnJkX3RhYmxlYW0tPnR1cGxlX21vZGlmeV9iZWdpbihyZWwsIG1v ZGlmeV9mbGFncywKKwkJCQkJCQkJCQkJCSAgIGNpZCwgb3B0aW9ucyk7CisJfQorCWVsc2UgaWYg KHJlbC0+cmRfdGFibGVhbSAmJgorCQkJIHJlbC0+cmRfdGFibGVhbS0+dHVwbGVfbW9kaWZ5X2Jl Z2luID09IE5VTEwpCisJeworCQkvKiBGYWxsYmFjayB0byBhIGRlZmF1bHQgaW1wbGVtZW50YXRp b24gKi8KKwkJcmV0dXJuIGRlZmF1bHRfdGFibGVfbW9kaWZ5X2JlZ2luKHJlbCwgbW9kaWZ5X2Zs YWdzLAorCQkJCQkJCQkJCSAgY2lkLCBvcHRpb25zKTsKKwl9CisJZWxzZQorCQlBc3NlcnQoZmFs c2UpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3RhYmxlX21vZGlmeV9idWZmZXJfaW5zZXJ0 KFRhYmxlTW9kaWZ5U3RhdGUgKnN0YXRlLCBUdXBsZVRhYmxlU2xvdCAqc2xvdCkKK3sKKwlpZiAo c3RhdGUtPnJlbC0+cmRfdGFibGVhbSAmJgorCQlzdGF0ZS0+cmVsLT5yZF90YWJsZWFtLT50dXBs ZV9tb2RpZnlfYnVmZmVyX2luc2VydCAhPSBOVUxMKQorCXsKKwkJc3RhdGUtPnJlbC0+cmRfdGFi bGVhbS0+dHVwbGVfbW9kaWZ5X2J1ZmZlcl9pbnNlcnQoc3RhdGUsIHNsb3QpOworCX0KKwllbHNl IGlmIChzdGF0ZS0+cmVsLT5yZF90YWJsZWFtICYmCisJCQkgc3RhdGUtPnJlbC0+cmRfdGFibGVh bS0+dHVwbGVfbW9kaWZ5X2J1ZmZlcl9pbnNlcnQgPT0gTlVMTCkKKwl7CisJCS8qIEZhbGxiYWNr IHRvIGEgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiAqLworCQlkZWZhdWx0X3RhYmxlX21vZGlmeV9i dWZmZXJfaW5zZXJ0KHN0YXRlLCBzbG90KTsKKwl9CisJZWxzZQorCQlBc3NlcnQoZmFsc2UpOwor fQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3RhYmxlX21vZGlmeV9lbmQoVGFibGVNb2RpZnlTdGF0 ZSAqc3RhdGUpCit7CisJaWYgKHN0YXRlLT5yZWwtPnJkX3RhYmxlYW0gJiYKKwkJc3RhdGUtPnJl bC0+cmRfdGFibGVhbS0+dHVwbGVfbW9kaWZ5X2VuZCAhPSBOVUxMKQorCXsKKwkJc3RhdGUtPnJl bC0+cmRfdGFibGVhbS0+dHVwbGVfbW9kaWZ5X2VuZChzdGF0ZSk7CisJfQorCWVsc2UgaWYgKHN0 YXRlLT5yZWwtPnJkX3RhYmxlYW0gJiYKKwkJCSBzdGF0ZS0+cmVsLT5yZF90YWJsZWFtLT50dXBs ZV9tb2RpZnlfZW5kID09IE5VTEwpCisJeworCQkvKiBGYWxsYmFjayB0byBhIGRlZmF1bHQgaW1w bGVtZW50YXRpb24gKi8KKwkJZGVmYXVsdF90YWJsZV9tb2RpZnlfZW5kKHN0YXRlKTsKKwl9CisJ ZWxzZQorCQlBc3NlcnQoZmFsc2UpOworfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIERETCBy ZWxhdGVkIGZ1bmN0aW9uYWxpdHkuCmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlw ZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CmluZGV4IDJiMDFh MzA4MWUuLmVkYWE0ZDI2ZjAgMTAwNjQ0Ci0tLSBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVm cy5saXN0CisrKyBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CkBAIC0xMTIzLDYg KzExMjMsOCBAQCBIZWFkbGluZUpzb25TdGF0ZQogSGVhZGxpbmVQYXJzZWRUZXh0CiBIZWFkbGlu ZVdvcmRFbnRyeQogSGVhcENoZWNrQ29udGV4dAorSGVhcEluc2VydFN0YXRlCitIZWFwTXVsdGlJ bnNlcnRTdGF0ZQogSGVhcFBhZ2VGcmVlemUKIEhlYXBTY2FuRGVzYwogSGVhcFR1cGxlCkBAIC0y ODE0LDYgKzI4MTYsNyBAQCBUYWJsZUZ1bmNTY2FuCiBUYWJsZUZ1bmNTY2FuU3RhdGUKIFRhYmxl SW5mbwogVGFibGVMaWtlQ2xhdXNlCitUYWJsZU1vZGlmeVN0YXRlCiBUYWJsZVNhbXBsZUNsYXVz ZQogVGFibGVTY2FuRGVzYwogVGFibGVTY2FuRGVzY0RhdGEKLS0gCjIuMzQuMQoK --00000000000009455d06152d7d74 Content-Type: application/x-patch; name="v17-0002-Optimize-CTAS-CMV-RMV-with-multi-inserts.patch" Content-Disposition: attachment; filename="v17-0002-Optimize-CTAS-CMV-RMV-with-multi-inserts.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lujk8hvz1 RnJvbSAzNTYwYTQ5ZTY3Nzc0Zjk2ZmIyZTcxMjg0NWMzNzBhMThmOWM3YTc3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBCaGFyYXRoIFJ1cGlyZWRkeSA8YmhhcmF0aC5ydXBpcmVkZHlm b3Jwb3N0Z3Jlc0BnbWFpbC5jb20+CkRhdGU6IFdlZCwgMyBBcHIgMjAyNCAwODozNzoyMSArMDAw MApTdWJqZWN0OiBbUEFUQ0ggdjE3IDIvMl0gT3B0aW1pemUgQ1RBUywgQ01WLCBSTVYgd2l0aCBt dWx0aSBpbnNlcnRzCgotLS0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2NyZWF0ZWFzLmMgfCAyNyAr KysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL21hdHZpZXcu YyAgfCAyNiArKysrKysrKystLS0tLS0tLS0tLS0tLS0tLQogMiBmaWxlcyBjaGFuZ2VkLCAxOCBp bnNlcnRpb25zKCspLCAzNSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9j b21tYW5kcy9jcmVhdGVhcy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvY3JlYXRlYXMuYwppbmRl eCBhZmQzZGFjZTA3Li4wMGMxMjcxZjkzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5k cy9jcmVhdGVhcy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NyZWF0ZWFzLmMKQEAgLTUz LDkgKzUzLDcgQEAgdHlwZWRlZiBzdHJ1Y3QKIAkvKiBUaGVzZSBmaWVsZHMgYXJlIGZpbGxlZCBi eSBpbnRvcmVsX3N0YXJ0dXA6ICovCiAJUmVsYXRpb24JcmVsOwkJCS8qIHJlbGF0aW9uIHRvIHdy aXRlIHRvICovCiAJT2JqZWN0QWRkcmVzcyByZWxhZGRyOwkJLyogYWRkcmVzcyBvZiByZWwsIGZv ciBFeGVjQ3JlYXRlVGFibGVBcyAqLwotCUNvbW1hbmRJZAlvdXRwdXRfY2lkOwkJLyogY21pbiB0 byBpbnNlcnQgaW4gb3V0cHV0IHR1cGxlcyAqLwotCWludAkJCXRpX29wdGlvbnM7CQkvKiB0YWJs ZV90dXBsZV9pbnNlcnQgcGVyZm9ybWFuY2Ugb3B0aW9ucyAqLwotCUJ1bGtJbnNlcnRTdGF0ZSBi aXN0YXRlOwkvKiBidWxrIGluc2VydCBzdGF0ZSAqLworCVRhYmxlTW9kaWZ5U3RhdGUgKm1zdGF0 ZTsJLyogdGFibGUgaW5zZXJ0IHN0YXRlICovCiB9IERSX2ludG9yZWw7CiAKIC8qIHV0aWxpdHkg ZnVuY3Rpb25zIGZvciBDVEFTIGRlZmluaXRpb24gY3JlYXRpb24gKi8KQEAgLTU1MiwxNyArNTUw LDE5IEBAIGludG9yZWxfc3RhcnR1cChEZXN0UmVjZWl2ZXIgKnNlbGYsIGludCBvcGVyYXRpb24s IFR1cGxlRGVzYyB0eXBlaW5mbykKIAkgKi8KIAlteVN0YXRlLT5yZWwgPSBpbnRvUmVsYXRpb25E ZXNjOwogCW15U3RhdGUtPnJlbGFkZHIgPSBpbnRvUmVsYXRpb25BZGRyOwotCW15U3RhdGUtPm91 dHB1dF9jaWQgPSBHZXRDdXJyZW50Q29tbWFuZElkKHRydWUpOwotCW15U3RhdGUtPnRpX29wdGlv bnMgPSBUQUJMRV9JTlNFUlRfU0tJUF9GU007CiAKIAkvKgogCSAqIElmIFdJVEggTk8gREFUQSBp cyBzcGVjaWZpZWQsIHRoZXJlIGlzIG5vIG5lZWQgdG8gc2V0IHVwIHRoZSBzdGF0ZSBmb3IKIAkg KiBidWxrIGluc2VydHMgYXMgdGhlcmUgYXJlIG5vIHR1cGxlcyB0byBpbnNlcnQuCiAJICovCiAJ aWYgKCFpbnRvLT5za2lwRGF0YSkKLQkJbXlTdGF0ZS0+YmlzdGF0ZSA9IEdldEJ1bGtJbnNlcnRT dGF0ZSgpOworCQlteVN0YXRlLT5tc3RhdGUgPSB0YWJsZV9tb2RpZnlfYmVnaW4oaW50b1JlbGF0 aW9uRGVzYywKKwkJCQkJCQkJCQkJIFRNX0ZMQUdfTVVMVElfSU5TRVJUUyB8CisJCQkJCQkJCQkJ CSBUTV9GTEFHX0JBU19CVUxLV1JJVEUsCisJCQkJCQkJCQkJCSBHZXRDdXJyZW50Q29tbWFuZElk KHRydWUpLAorCQkJCQkJCQkJCQkgVEFCTEVfSU5TRVJUX1NLSVBfRlNNKTsKIAllbHNlCi0JCW15 U3RhdGUtPmJpc3RhdGUgPSBOVUxMOworCQlteVN0YXRlLT5tc3RhdGUgPSBOVUxMOwogCiAJLyoK IAkgKiBWYWxpZCBzbWdyX3RhcmdibG9jayBpbXBsaWVzIHNvbWV0aGluZyBhbHJlYWR5IHdyb3Rl IHRvIHRoZSByZWxhdGlvbi4KQEAgLTU3OCw3ICs1NzgsNiBAQCBzdGF0aWMgYm9vbAogaW50b3Jl bF9yZWNlaXZlKFR1cGxlVGFibGVTbG90ICpzbG90LCBEZXN0UmVjZWl2ZXIgKnNlbGYpCiB7CiAJ RFJfaW50b3JlbCAqbXlTdGF0ZSA9IChEUl9pbnRvcmVsICopIHNlbGY7Ci0JYm9vbAkJaW5zZXJ0 SW5kZXhlczsKIAogCS8qIE5vdGhpbmcgdG8gaW5zZXJ0IGlmIFdJVEggTk8gREFUQSBpcyBzcGVj aWZpZWQuICovCiAJaWYgKCFteVN0YXRlLT5pbnRvLT5za2lwRGF0YSkKQEAgLTU5MSwxMiArNTkw LDcgQEAgaW50b3JlbF9yZWNlaXZlKFR1cGxlVGFibGVTbG90ICpzbG90LCBEZXN0UmVjZWl2ZXIg KnNlbGYpCiAJCSAqIHdvdWxkIG5vdCBiZSBjaGVhcCBlaXRoZXIuIFRoaXMgYWxzbyBkb2Vzbid0 IGFsbG93IGFjY2Vzc2luZyBwZXItQU0KIAkJICogZGF0YSAoc2F5IGEgdHVwbGUncyB4bWluKSwg YnV0IHNpbmNlIHdlIGRvbid0IGRvIHRoYXQgaGVyZS4uLgogCQkgKi8KLQkJdGFibGVfdHVwbGVf aW5zZXJ0KG15U3RhdGUtPnJlbCwKLQkJCQkJCSAgIHNsb3QsCi0JCQkJCQkgICBteVN0YXRlLT5v dXRwdXRfY2lkLAotCQkJCQkJICAgbXlTdGF0ZS0+dGlfb3B0aW9ucywKLQkJCQkJCSAgIG15U3Rh dGUtPmJpc3RhdGUsCi0JCQkJCQkgICAmaW5zZXJ0SW5kZXhlcyk7CisJCXRhYmxlX21vZGlmeV9i dWZmZXJfaW5zZXJ0KG15U3RhdGUtPm1zdGF0ZSwgc2xvdCk7CiAJfQogCiAJLyogV2Uga25vdyB0 aGlzIGlzIGEgbmV3bHkgY3JlYXRlZCByZWxhdGlvbiwgc28gdGhlcmUgYXJlIG5vIGluZGV4ZXMg Ki8KQEAgLTYxNCwxMCArNjA4LDcgQEAgaW50b3JlbF9zaHV0ZG93bihEZXN0UmVjZWl2ZXIgKnNl bGYpCiAJSW50b0NsYXVzZSAqaW50byA9IG15U3RhdGUtPmludG87CiAKIAlpZiAoIWludG8tPnNr aXBEYXRhKQotCXsKLQkJRnJlZUJ1bGtJbnNlcnRTdGF0ZShteVN0YXRlLT5iaXN0YXRlKTsKLQkJ dGFibGVfZmluaXNoX2J1bGtfaW5zZXJ0KG15U3RhdGUtPnJlbCwgbXlTdGF0ZS0+dGlfb3B0aW9u cyk7Ci0JfQorCQl0YWJsZV9tb2RpZnlfZW5kKG15U3RhdGUtPm1zdGF0ZSk7CiAKIAkvKiBjbG9z ZSByZWwsIGJ1dCBrZWVwIGxvY2sgdW50aWwgY29tbWl0ICovCiAJdGFibGVfY2xvc2UobXlTdGF0 ZS0+cmVsLCBOb0xvY2spOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvbWF0dmll dy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvbWF0dmlldy5jCmluZGV4IDllYzEzZDA5ODQuLmYw M2FhMWNmZjMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL21hdHZpZXcuYworKysg Yi9zcmMvYmFja2VuZC9jb21tYW5kcy9tYXR2aWV3LmMKQEAgLTQ4LDkgKzQ4LDcgQEAgdHlwZWRl ZiBzdHJ1Y3QKIAlPaWQJCQl0cmFuc2llbnRvaWQ7CS8qIE9JRCBvZiBuZXcgaGVhcCBpbnRvIHdo aWNoIHRvIHN0b3JlICovCiAJLyogVGhlc2UgZmllbGRzIGFyZSBmaWxsZWQgYnkgdHJhbnNpZW50 cmVsX3N0YXJ0dXA6ICovCiAJUmVsYXRpb24JdHJhbnNpZW50cmVsOwkvKiByZWxhdGlvbiB0byB3 cml0ZSB0byAqLwotCUNvbW1hbmRJZAlvdXRwdXRfY2lkOwkJLyogY21pbiB0byBpbnNlcnQgaW4g b3V0cHV0IHR1cGxlcyAqLwotCWludAkJCXRpX29wdGlvbnM7CQkvKiB0YWJsZV90dXBsZV9pbnNl cnQgcGVyZm9ybWFuY2Ugb3B0aW9ucyAqLwotCUJ1bGtJbnNlcnRTdGF0ZSBiaXN0YXRlOwkvKiBi dWxrIGluc2VydCBzdGF0ZSAqLworCVRhYmxlTW9kaWZ5U3RhdGUgKm1zdGF0ZTsJLyogdGFibGUg aW5zZXJ0IHN0YXRlICovCiB9IERSX3RyYW5zaWVudHJlbDsKIAogc3RhdGljIGludAltYXR2aWV3 X21haW50ZW5hbmNlX2RlcHRoID0gMDsKQEAgLTQ1OCw5ICs0NTYsMTIgQEAgdHJhbnNpZW50cmVs X3N0YXJ0dXAoRGVzdFJlY2VpdmVyICpzZWxmLCBpbnQgb3BlcmF0aW9uLCBUdXBsZURlc2MgdHlw ZWluZm8pCiAJICogRmlsbCBwcml2YXRlIGZpZWxkcyBvZiBteVN0YXRlIGZvciB1c2UgYnkgbGF0 ZXIgcm91dGluZXMKIAkgKi8KIAlteVN0YXRlLT50cmFuc2llbnRyZWwgPSB0cmFuc2llbnRyZWw7 Ci0JbXlTdGF0ZS0+b3V0cHV0X2NpZCA9IEdldEN1cnJlbnRDb21tYW5kSWQodHJ1ZSk7Ci0JbXlT dGF0ZS0+dGlfb3B0aW9ucyA9IFRBQkxFX0lOU0VSVF9TS0lQX0ZTTSB8IFRBQkxFX0lOU0VSVF9G Uk9aRU47Ci0JbXlTdGF0ZS0+YmlzdGF0ZSA9IEdldEJ1bGtJbnNlcnRTdGF0ZSgpOworCW15U3Rh dGUtPm1zdGF0ZSA9IHRhYmxlX21vZGlmeV9iZWdpbih0cmFuc2llbnRyZWwsCisJCQkJCQkJCQkJ IFRNX0ZMQUdfTVVMVElfSU5TRVJUUyB8CisJCQkJCQkJCQkJIFRNX0ZMQUdfQkFTX0JVTEtXUklU RSwKKwkJCQkJCQkJCQkgR2V0Q3VycmVudENvbW1hbmRJZCh0cnVlKSwKKwkJCQkJCQkJCQkgVEFC TEVfSU5TRVJUX1NLSVBfRlNNIHwKKwkJCQkJCQkJCQkgVEFCTEVfSU5TRVJUX0ZST1pFTik7CiAK IAkvKgogCSAqIFZhbGlkIHNtZ3JfdGFyZ2Jsb2NrIGltcGxpZXMgc29tZXRoaW5nIGFscmVhZHkg d3JvdGUgdG8gdGhlIHJlbGF0aW9uLgpAQCAtNDc2LDcgKzQ3Nyw2IEBAIHN0YXRpYyBib29sCiB0 cmFuc2llbnRyZWxfcmVjZWl2ZShUdXBsZVRhYmxlU2xvdCAqc2xvdCwgRGVzdFJlY2VpdmVyICpz ZWxmKQogewogCURSX3RyYW5zaWVudHJlbCAqbXlTdGF0ZSA9IChEUl90cmFuc2llbnRyZWwgKikg c2VsZjsKLQlib29sCQlpbnNlcnRJbmRleGVzOwogCiAJLyoKIAkgKiBOb3RlIHRoYXQgdGhlIGlu cHV0IHNsb3QgbWlnaHQgbm90IGJlIG9mIHRoZSB0eXBlIG9mIHRoZSB0YXJnZXQKQEAgLTQ4Niwx MyArNDg2LDcgQEAgdHJhbnNpZW50cmVsX3JlY2VpdmUoVHVwbGVUYWJsZVNsb3QgKnNsb3QsIERl c3RSZWNlaXZlciAqc2VsZikKIAkgKiBjaGVhcCBlaXRoZXIuIFRoaXMgYWxzbyBkb2Vzbid0IGFs bG93IGFjY2Vzc2luZyBwZXItQU0gZGF0YSAoc2F5IGEKIAkgKiB0dXBsZSdzIHhtaW4pLCBidXQg c2luY2Ugd2UgZG9uJ3QgZG8gdGhhdCBoZXJlLi4uCiAJICovCi0KLQl0YWJsZV90dXBsZV9pbnNl cnQobXlTdGF0ZS0+dHJhbnNpZW50cmVsLAotCQkJCQkgICBzbG90LAotCQkJCQkgICBteVN0YXRl LT5vdXRwdXRfY2lkLAotCQkJCQkgICBteVN0YXRlLT50aV9vcHRpb25zLAotCQkJCQkgICBteVN0 YXRlLT5iaXN0YXRlLAotCQkJCQkgICAmaW5zZXJ0SW5kZXhlcyk7CisJdGFibGVfbW9kaWZ5X2J1 ZmZlcl9pbnNlcnQobXlTdGF0ZS0+bXN0YXRlLCBzbG90KTsKIAogCS8qIFdlIGtub3cgdGhpcyBp cyBhIG5ld2x5IGNyZWF0ZWQgcmVsYXRpb24sIHNvIHRoZXJlIGFyZSBubyBpbmRleGVzICovCiAK QEAgLTUwNyw5ICs1MDEsNyBAQCB0cmFuc2llbnRyZWxfc2h1dGRvd24oRGVzdFJlY2VpdmVyICpz ZWxmKQogewogCURSX3RyYW5zaWVudHJlbCAqbXlTdGF0ZSA9IChEUl90cmFuc2llbnRyZWwgKikg c2VsZjsKIAotCUZyZWVCdWxrSW5zZXJ0U3RhdGUobXlTdGF0ZS0+YmlzdGF0ZSk7Ci0KLQl0YWJs ZV9maW5pc2hfYnVsa19pbnNlcnQobXlTdGF0ZS0+dHJhbnNpZW50cmVsLCBteVN0YXRlLT50aV9v cHRpb25zKTsKKwl0YWJsZV9tb2RpZnlfZW5kKG15U3RhdGUtPm1zdGF0ZSk7CiAKIAkvKiBjbG9z ZSB0cmFuc2llbnRyZWwsIGJ1dCBrZWVwIGxvY2sgdW50aWwgY29tbWl0ICovCiAJdGFibGVfY2xv c2UobXlTdGF0ZS0+dHJhbnNpZW50cmVsLCBOb0xvY2spOwotLSAKMi4zNC4xCgo= --00000000000009455d06152d7d74--