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 1rUM3V-00ANkM-UV for pgsql-hackers@arkaria.postgresql.org; Mon, 29 Jan 2024 07:27:46 +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 1rUM3U-00CBw7-0q for pgsql-hackers@arkaria.postgresql.org; Mon, 29 Jan 2024 07:27:44 +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 1rUM3T-00CBvx-AB for pgsql-hackers@lists.postgresql.org; Mon, 29 Jan 2024 07:27:43 +0000 Received: from mail-lj1-x234.google.com ([2a00:1450:4864:20::234]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1rUM3Q-003vcd-98 for pgsql-hackers@postgresql.org; Mon, 29 Jan 2024 07:27:41 +0000 Received: by mail-lj1-x234.google.com with SMTP id 38308e7fff4ca-2cf1524cb17so29183271fa.2 for ; Sun, 28 Jan 2024 23:27:40 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1706513258; x=1707118058; 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=+yGcQhnkO6w/thLccV2BKx0gaa4XJYVvIlu5823nL6Q=; b=kdhS5X92wseHpWrqY8ML+9Zz6icekI4io3sU+lCHWti4DavJX/PNhJiWWx0ACktLkb 9c7rfUp3Fa6ffbzC7puMejSIwAuQ+SvT2zvl+lpoX/vLFwfkaJ3hfNJ0CXPkar3ddz+s NXOFIXVWpg14d1ioa9/GXfT+iaqrWyEycwYRT15vUj5GGIH2knF//yq8e809/X/nCNgm rlSZ/FxwXPfXXibOPKgEKluaqd8WKzirpO7+UXIOoTSvtQMBV57YkkA8T0JxGOIvPGSG OQM65KpytgNNIlSc83gCdJcFU+i0UTWLnplApmcbJmhNib4E7JSbv6YGdMaFOpDN4BEu Ln+g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1706513258; x=1707118058; 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=+yGcQhnkO6w/thLccV2BKx0gaa4XJYVvIlu5823nL6Q=; b=smqSbihhascTehoSQMuJMaQv7PYrLOf6QANz1wILk6uzA5Y//DBEZfyPWqVNM2OQdG yzRhbNyo8PGLCw87Us6Tx80U4t60u+TarSBVkY3VDmMMHm5rzNN3Ks2Ro6Q0g76o1MfA WUjxxxZoefzUfq4wvRxSoIx3V209XN9KsmgLBF1ZCKbRZVp/cNpRoOlCeMYsq9iCVFO6 iX8C1jPtsU/RCXurhp+dA+1cQjrxJQlHPfZDur0qtF86wLdoFjVRta2jLPDZLHDltd2Y 6gryXvxZz7TrWT5/MmcEkG75ulY6FgWG6G159lnFWqr+dUIaBWgX6MF5/Q1mlPEGuGd4 ICpA== X-Gm-Message-State: AOJu0Yz6HoqYV+Ttyd6sJRI+1Dx4TaMLLuIOcP5AT7WzbZNl/YiUW02p U5ocqf49UwhbtcXrW/6Ra8CSIw2tHspJu6qtN1pF6dVemuML9JDLE2SkyqFjh8tnUvgS11wQY1F W9p52FhQq+tnzgRJ8m1yggZVcKYbcyKIu X-Google-Smtp-Source: AGHT+IGMYkciu/9BU1wm5k6INnwAyLUXeyBBTKo8pHqSHNv0+gWqFYK9wyn5aFsoL111dUuj7zQvjVPvqIOBwQw4qMM= X-Received: by 2002:a05:651c:b8c:b0:2cf:425b:59ee with SMTP id bg12-20020a05651c0b8c00b002cf425b59eemr3103704ljb.24.1706513258057; Sun, 28 Jan 2024 23:27:38 -0800 (PST) MIME-Version: 1.0 References: <20230603223824.o7iyochli2dwwi7k@alap3.anarazel.de> In-Reply-To: From: Bharath Rupireddy Date: Mon, 29 Jan 2024 12:57:00 +0530 Message-ID: Subject: Re: New Table Access Methods for Multi and Single Inserts To: PostgreSQL-development Cc: Andres Freund , Dilip Kumar , Luc Vlaming , Justin Pryzby , Jeff Davis , Michael Paquier , Matthias van de Meent Content-Type: multipart/mixed; boundary="0000000000008d2b29061010943f" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000008d2b29061010943f Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Wed, Jan 17, 2024 at 10:57=E2=80=AFPM Bharath Rupireddy wrote: > > Thank you. I'm attaching v8 patch-set here which includes use of new > insert TAMs for COPY FROM. With this, postgres not only will have the > new TAM for inserts, but they also can make the following commands > faster - CREATE TABLE AS, SELECT INTO, CREATE MATERIALIZED VIEW, > REFRESH MATERIALIZED VIEW and COPY FROM. I'll perform some testing in > the coming days and post the results here, until then I appreciate any > feedback on the patches. > > I've also added this proposal to CF - > https://commitfest.postgresql.org/47/4777/. Some of the tests related to Incremental Sort added by a recent commit 0452b461bc4 in aggregates.sql are failing when the multi inserts feature is used for CTAS (like done in 0002 patch). I'm not so sure if it's because of the reduction in the CTAS execution times. Execution time for table 'btg' created with CREATE TABLE AS added by commit 0452b461bc4 with single inserts is 25.3 msec, with multi inserts is 17.7 msec. This means that the multi inserts are about 1.43 times or 30.04% faster than the single inserts. Couple of ways to make these tests pick Incremental Sort as expected - 1) CLUSTER btg USING abc; or 2) increase the number of rows in table btg to 100K from 10K. FWIW, if I reduce the number of rows in the table from 10K to 1K, the Incremental Sort won't get picked on HEAD with CTAS using single inserts. Hence, I chose option (2) to fix the issue. Please find the attached v9 patch set. [1] -- Engage incremental sort explain (COSTS OFF) SELECT x,y FROM btg GROUP BY x,y,z,w; - QUERY PLAN -------------------------------------------------- + QUERY PLAN +------------------------------ Group Group Key: x, y, z, w - -> Incremental Sort + -> Sort Sort Key: x, y, z, w - Presorted Key: x, y - -> Index Scan using btg_x_y_idx on btg -(6 rows) + -> Seq Scan on btg +(5 rows) -- Bharath Rupireddy PostgreSQL Contributors Team RDS Open Source Databases Amazon Web Services: https://aws.amazon.com --0000000000008d2b29061010943f Content-Type: application/x-patch; name="v9-0001-New-TAMs-for-inserts.patch" Content-Disposition: attachment; filename="v9-0001-New-TAMs-for-inserts.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lryjepkd0 RnJvbSBhODQxMDdlNDk4ZmZkZGM1NmVmNGZiYjIwN2Q2YmE2ZTgyNzE3OTAxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBCaGFyYXRoIFJ1cGlyZWRkeSA8YmhhcmF0aC5ydXBpcmVkZHlm b3Jwb3N0Z3Jlc0BnbWFpbC5jb20+CkRhdGU6IE1vbiwgMjkgSmFuIDIwMjQgMDU6Mzk6NTUgKzAw MDAKU3ViamVjdDogW1BBVENIIHY5IDEvNF0gTmV3IFRBTXMgZm9yIGluc2VydHMKCi0tLQogc3Jj L2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtLmMgICAgICAgICB8IDIyNCArKysrKysrKysrKysr KysrKysrKysrKwogc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYyB8ICAg OSArCiBzcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmggICAgICAgICAgICAgIHwgIDQ5ICsrKysr CiBzcmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5oICAgICAgICAgICAgIHwgMTQzICsrKysrKysr KysrKysrKwogNCBmaWxlcyBjaGFuZ2VkLCA0MjUgaW5zZXJ0aW9ucygrKQoKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hl YXAvaGVhcGFtLmMKaW5kZXggNzA3NDYwYTUzNi4uN2RmMzA1MzgwZSAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hl YXAvaGVhcGFtLmMKQEAgLTY4LDYgKzY4LDcgQEAKICNpbmNsdWRlICJ1dGlscy9kYXR1bS5oIgog I2luY2x1ZGUgInV0aWxzL2ludmFsLmgiCiAjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCisj aW5jbHVkZSAidXRpbHMvbWVtdXRpbHMuaCIKICNpbmNsdWRlICJ1dGlscy9yZWxjYWNoZS5oIgog I2luY2x1ZGUgInV0aWxzL3NuYXBtZ3IuaCIKICNpbmNsdWRlICJ1dGlscy9zcGNjYWNoZS5oIgpA QCAtMjQ0Niw2ICsyNDQ3LDIyOSBAQCBoZWFwX211bHRpX2luc2VydChSZWxhdGlvbiByZWxhdGlv biwgVHVwbGVUYWJsZVNsb3QgKipzbG90cywgaW50IG50dXBsZXMsCiAJcGdzdGF0X2NvdW50X2hl YXBfaW5zZXJ0KHJlbGF0aW9uLCBudHVwbGVzKTsKIH0KIAorLyoKKyAqIEluaXRpYWxpemUgc3Rh dGUgcmVxdWlyZWQgZm9yIGFuIGluc2VydCBhIHNpbmdsZSB0dXBsZSBvciBtdWx0aXBsZSB0dXBs ZXMKKyAqIGludG8gYSBoZWFwLgorICovCitUYWJsZUluc2VydFN0YXRlICoKK2hlYXBfaW5zZXJ0 X2JlZ2luKFJlbGF0aW9uIHJlbCwgQ29tbWFuZElkIGNpZCwgaW50IGFtX2ZsYWdzLCBpbnQgaW5z ZXJ0X2ZsYWdzKQoreworCVRhYmxlSW5zZXJ0U3RhdGUgKnRpc3RhdGU7CisKKwl0aXN0YXRlID0g cGFsbG9jMChzaXplb2YoVGFibGVJbnNlcnRTdGF0ZSkpOworCXRpc3RhdGUtPnJlbCA9IHJlbDsK Kwl0aXN0YXRlLT5jaWQgPSBjaWQ7CisJdGlzdGF0ZS0+YW1fZmxhZ3MgPSBhbV9mbGFnczsKKwl0 aXN0YXRlLT5pbnNlcnRfZmxhZ3MgPSBpbnNlcnRfZmxhZ3M7CisKKwlpZiAoKGFtX2ZsYWdzICYg VEFCTEVBTV9NVUxUSV9JTlNFUlRTKSAhPSAwIHx8CisJCShhbV9mbGFncyAmIFRBQkxFQU1fQlVM S1dSSVRFX0JVRkZFUl9BQ0NFU1NfU1RSQVRFR1kpKQorCQl0aXN0YXRlLT5hbV9kYXRhID0gcGFs bG9jMChzaXplb2YoSGVhcEluc2VydFN0YXRlKSk7CisKKwlpZiAoKGFtX2ZsYWdzICYgVEFCTEVB TV9NVUxUSV9JTlNFUlRTKSAhPSAwKQorCXsKKwkJSGVhcE11bHRpSW5zZXJ0U3RhdGUgKm1pc3Rh dGU7CisKKwkJbWlzdGF0ZSA9IHBhbGxvYzAoc2l6ZW9mKEhlYXBNdWx0aUluc2VydFN0YXRlKSk7 CisJCW1pc3RhdGUtPnNsb3RzID0gcGFsbG9jMChzaXplb2YoVHVwbGVUYWJsZVNsb3QgKikgKiBI RUFQX01BWF9CVUZGRVJFRF9TTE9UUyk7CisKKwkJbWlzdGF0ZS0+Y29udGV4dCA9IEFsbG9jU2V0 Q29udGV4dENyZWF0ZShDdXJyZW50TWVtb3J5Q29udGV4dCwKKwkJCQkJCQkJCQkJCSAiaGVhcF9t dWx0aV9pbnNlcnRfdjIgbWVtb3J5IGNvbnRleHQiLAorCQkJCQkJCQkJCQkJIEFMTE9DU0VUX0RF RkFVTFRfU0laRVMpOworCisJCSgoSGVhcEluc2VydFN0YXRlICopIHRpc3RhdGUtPmFtX2RhdGEp LT5taXN0YXRlID0gbWlzdGF0ZTsKKwl9CisKKwlpZiAoKGFtX2ZsYWdzICYgVEFCTEVBTV9CVUxL V1JJVEVfQlVGRkVSX0FDQ0VTU19TVFJBVEVHWSkgIT0gMCkKKwkJKChIZWFwSW5zZXJ0U3RhdGUg KikgdGlzdGF0ZS0+YW1fZGF0YSktPmJpc3RhdGUgPSBHZXRCdWxrSW5zZXJ0U3RhdGUoKTsKKwor CXJldHVybiB0aXN0YXRlOworfQorCisvKgorICogSW5zZXJ0IGEgc2luZ2xlIHR1cGxlIGludG8g YSBoZWFwLgorICovCit2b2lkCitoZWFwX2luc2VydF92MihUYWJsZUluc2VydFN0YXRlICogc3Rh dGUsIFR1cGxlVGFibGVTbG90ICpzbG90KQoreworCWJvb2wJCXNob3VsZEZyZWUgPSB0cnVlOwor CUhlYXBUdXBsZQl0dXBsZSA9IEV4ZWNGZXRjaFNsb3RIZWFwVHVwbGUoc2xvdCwgdHJ1ZSwgJnNo b3VsZEZyZWUpOworCUJ1bGtJbnNlcnRTdGF0ZSBiaXN0YXRlID0gTlVMTDsKKworCUFzc2VydChz dGF0ZS0+YW1fZGF0YSAhPSBOVUxMICYmCisJCSAgICgoSGVhcEluc2VydFN0YXRlICopIHN0YXRl LT5hbV9kYXRhKS0+bWlzdGF0ZSA9PSBOVUxMKTsKKworCS8qIFVwZGF0ZSB0dXBsZSB3aXRoIHRh YmxlIG9pZCAqLworCXNsb3QtPnR0c190YWJsZU9pZCA9IFJlbGF0aW9uR2V0UmVsaWQoc3RhdGUt PnJlbCk7CisJdHVwbGUtPnRfdGFibGVPaWQgPSBzbG90LT50dHNfdGFibGVPaWQ7CisKKwlpZiAo c3RhdGUtPmFtX2RhdGEgIT0gTlVMTCAmJgorCQkoKEhlYXBJbnNlcnRTdGF0ZSAqKSBzdGF0ZS0+ YW1fZGF0YSktPmJpc3RhdGUgIT0gTlVMTCkKKwkJYmlzdGF0ZSA9ICgoSGVhcEluc2VydFN0YXRl ICopIHN0YXRlLT5hbV9kYXRhKS0+YmlzdGF0ZTsKKworCS8qIFBlcmZvcm0gaW5zZXJ0aW9uLCBh bmQgY29weSB0aGUgcmVzdWx0aW5nIEl0ZW1Qb2ludGVyICovCisJaGVhcF9pbnNlcnQoc3RhdGUt PnJlbCwgdHVwbGUsIHN0YXRlLT5jaWQsIHN0YXRlLT5pbnNlcnRfZmxhZ3MsCisJCQkJYmlzdGF0 ZSk7CisJSXRlbVBvaW50ZXJDb3B5KCZ0dXBsZS0+dF9zZWxmLCAmc2xvdC0+dHRzX3RpZCk7CisK KwlpZiAoc2hvdWxkRnJlZSkKKwkJcGZyZWUodHVwbGUpOworfQorCisvKgorICogQ3JlYXRlL3Jl dHVybiBuZXh0IGZyZWUgc2xvdCBmcm9tIG11bHRpLWluc2VydCBidWZmZXJlZCBzbG90cyBhcnJh eS4KKyAqLworVHVwbGVUYWJsZVNsb3QgKgoraGVhcF9tdWx0aV9pbnNlcnRfbmV4dF9mcmVlX3Ns b3QoVGFibGVJbnNlcnRTdGF0ZSAqIHN0YXRlKQoreworCVR1cGxlVGFibGVTbG90ICpzbG90Owor CUhlYXBNdWx0aUluc2VydFN0YXRlICptaXN0YXRlOworCisJQXNzZXJ0KHN0YXRlLT5hbV9kYXRh ICE9IE5VTEwgJiYKKwkJICAgKChIZWFwSW5zZXJ0U3RhdGUgKikgc3RhdGUtPmFtX2RhdGEpLT5t aXN0YXRlICE9IE5VTEwpOworCisJbWlzdGF0ZSA9ICgoSGVhcEluc2VydFN0YXRlICopIHN0YXRl LT5hbV9kYXRhKS0+bWlzdGF0ZTsKKwlzbG90ID0gbWlzdGF0ZS0+c2xvdHNbbWlzdGF0ZS0+Y3Vy X3Nsb3RzXTsKKworCWlmIChzbG90ID09IE5VTEwpCisJeworCQlzbG90ID0gdGFibGVfc2xvdF9j cmVhdGUoc3RhdGUtPnJlbCwgTlVMTCk7CisJCW1pc3RhdGUtPnNsb3RzW21pc3RhdGUtPmN1cl9z bG90c10gPSBzbG90OworCX0KKwllbHNlCisJCUV4ZWNDbGVhclR1cGxlKHNsb3QpOworCisJcmV0 dXJuIHNsb3Q7Cit9CisKKy8qCisgKiBTdG9yZSBwYXNzZWQtaW4gdHVwbGUgaW50byBpbi1tZW1v cnkgYnVmZmVyZWQgc2xvdHMuIFdoZW4gZnVsbCwgaW5zZXJ0CisgKiBtdWx0aXBsZSB0dXBsZXMg ZnJvbSB0aGUgYnVmZmVycyBpbnRvIGhlYXAuCisgKi8KK3ZvaWQKK2hlYXBfbXVsdGlfaW5zZXJ0 X3YyKFRhYmxlSW5zZXJ0U3RhdGUgKiBzdGF0ZSwgVHVwbGVUYWJsZVNsb3QgKnNsb3QpCit7CisJ VHVwbGVUYWJsZVNsb3QgKmRzdHNsb3Q7CisJSGVhcE11bHRpSW5zZXJ0U3RhdGUgKm1pc3RhdGU7 CisKKwlBc3NlcnQoc3RhdGUtPmFtX2RhdGEgIT0gTlVMTCAmJgorCQkgICAoKEhlYXBJbnNlcnRT dGF0ZSAqKSBzdGF0ZS0+YW1fZGF0YSktPm1pc3RhdGUgIT0gTlVMTCk7CisKKwltaXN0YXRlID0g KChIZWFwSW5zZXJ0U3RhdGUgKikgc3RhdGUtPmFtX2RhdGEpLT5taXN0YXRlOworCWRzdHNsb3Qg PSBtaXN0YXRlLT5zbG90c1ttaXN0YXRlLT5jdXJfc2xvdHNdOworCisJaWYgKGRzdHNsb3QgPT0g TlVMTCkKKwl7CisJCWRzdHNsb3QgPSB0YWJsZV9zbG90X2NyZWF0ZShzdGF0ZS0+cmVsLCBOVUxM KTsKKwkJbWlzdGF0ZS0+c2xvdHNbbWlzdGF0ZS0+Y3VyX3Nsb3RzXSA9IGRzdHNsb3Q7CisJfQor CisJLyoKKwkgKiBDYWxsZXIgbWF5IGhhdmUgZ290IHRoZSBzbG90IHVzaW5nIGhlYXBfbXVsdGlf aW5zZXJ0X25leHRfZnJlZV9zbG90LAorCSAqIGZpbGxlZCBpdCBhbmQgcGFzc2VkLiBTbywgc2tp cCBjb3B5aW5nIGluIHN1Y2ggYSBjYXNlLgorCSAqLworCWlmICgoc3RhdGUtPmFtX2ZsYWdzICYg VEFCTEVBTV9TS0lQX01VTFRJX0lOU0VSVFNfRkxVU0gpID09IDApCisJeworCQlFeGVjQ2xlYXJU dXBsZShkc3RzbG90KTsKKwkJRXhlY0NvcHlTbG90KGRzdHNsb3QsIHNsb3QpOworCX0KKwllbHNl CisJCUFzc2VydChkc3RzbG90ID09IHNsb3QpOworCisJbWlzdGF0ZS0+Y3VyX3Nsb3RzKys7CisK KwkvKgorCSAqIFdoZW4gcGFzc2VkLWluIHNsb3QgaXMgYWxyZWFkeSBtYXRlcmlhbGl6ZWQsIG1l bW9yeSBhbGxvY2F0ZWQgaW4gc2xvdCdzCisJICogbWVtb3J5IGNvbnRleHQgaXMgYSBjbG9zZSBh cHByb3hpbWF0aW9uIGZvciB1cyB0byB0cmFjayB0aGUgcmVxdWlyZWQKKwkgKiBzcGFjZSBmb3Ig dGhlIHR1cGxlIGluIHNsb3QuCisJICoKKwkgKiBGb3Igbm9uLW1hdGVyaWFsaXplZCBzbG90cywg dGhlIGZsdXNoaW5nIGRlY2lzaW9uIGhhcHBlbnMgc29sZWx5IG9uIHRoZQorCSAqIG51bWJlciBv ZiB0dXBsZXMgc3RvcmVkIGluIHRoZSBidWZmZXIuCisJICovCisJaWYgKFRUU19TSE9VTERGUkVF KHNsb3QpKQorCQltaXN0YXRlLT5jdXJfc2l6ZSArPSBNZW1vcnlDb250ZXh0TWVtQWxsb2NhdGVk KHNsb3QtPnR0c19tY3h0LCBmYWxzZSk7CisKKwlpZiAoKHN0YXRlLT5hbV9mbGFncyAmIFRBQkxF QU1fU0tJUF9NVUxUSV9JTlNFUlRTX0ZMVVNIKSA9PSAwICYmCisJCShtaXN0YXRlLT5jdXJfc2xv dHMgPj0gSEVBUF9NQVhfQlVGRkVSRURfU0xPVFMgfHwKKwkJIG1pc3RhdGUtPmN1cl9zaXplID49 IEhFQVBfTUFYX0JVRkZFUkVEX0JZVEVTKSkKKwkJaGVhcF9tdWx0aV9pbnNlcnRfZmx1c2goc3Rh dGUpOworfQorCisvKgorICogUmV0dXJuIHBvaW50ZXIgdG8gbXVsdGktaW5zZXJ0IGJ1ZmZlcmVk IHNsb3RzIGFycmF5IGFuZCBudW1iZXIgb2YgY3VycmVudGx5CisgKiBvY2N1cGllZCBzbG90cy4K KyAqLworVHVwbGVUYWJsZVNsb3QgKioKK2hlYXBfbXVsdGlfaW5zZXJ0X3Nsb3RzKFRhYmxlSW5z ZXJ0U3RhdGUgKiBzdGF0ZSwgaW50ICpudW1fc2xvdHMpCit7CisJSGVhcE11bHRpSW5zZXJ0U3Rh dGUgKm1pc3RhdGU7CisKKwltaXN0YXRlID0gKChIZWFwSW5zZXJ0U3RhdGUgKikgc3RhdGUtPmFt X2RhdGEpLT5taXN0YXRlOworCSpudW1fc2xvdHMgPSBtaXN0YXRlLT5jdXJfc2xvdHM7CisKKwly ZXR1cm4gbWlzdGF0ZS0+c2xvdHM7Cit9CisKKy8qCisgKiBJbnNlcnQgbXVsdGlwbGUgdHVwbGVz IGZyb20gaW4tbWVtb3J5IGJ1ZmZlcmVkIHNsb3RzIGludG8gaGVhcC4KKyAqLwordm9pZAoraGVh cF9tdWx0aV9pbnNlcnRfZmx1c2goVGFibGVJbnNlcnRTdGF0ZSAqIHN0YXRlKQoreworCUhlYXBN dWx0aUluc2VydFN0YXRlICptaXN0YXRlOworCUJ1bGtJbnNlcnRTdGF0ZSBiaXN0YXRlID0gTlVM TDsKKwlNZW1vcnlDb250ZXh0IG9sZGNvbnRleHQ7CisKKwltaXN0YXRlID0gKChIZWFwSW5zZXJ0 U3RhdGUgKikgc3RhdGUtPmFtX2RhdGEpLT5taXN0YXRlOworCisJaWYgKHN0YXRlLT5hbV9kYXRh ICE9IE5VTEwgJiYKKwkJKChIZWFwSW5zZXJ0U3RhdGUgKikgc3RhdGUtPmFtX2RhdGEpLT5iaXN0 YXRlICE9IE5VTEwpCisJCWJpc3RhdGUgPSAoKEhlYXBJbnNlcnRTdGF0ZSAqKSBzdGF0ZS0+YW1f ZGF0YSktPmJpc3RhdGU7CisKKwlvbGRjb250ZXh0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKG1p c3RhdGUtPmNvbnRleHQpOworCWhlYXBfbXVsdGlfaW5zZXJ0KHN0YXRlLT5yZWwsIG1pc3RhdGUt PnNsb3RzLCBtaXN0YXRlLT5jdXJfc2xvdHMsCisJCQkJCSAgc3RhdGUtPmNpZCwgc3RhdGUtPmlu c2VydF9mbGFncywgYmlzdGF0ZSk7CisJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRleHQp OworCU1lbW9yeUNvbnRleHRSZXNldChtaXN0YXRlLT5jb250ZXh0KTsKKworCW1pc3RhdGUtPmN1 cl9zbG90cyA9IDA7CisJbWlzdGF0ZS0+Y3VyX3NpemUgPSAwOworfQorCisvKgorICogQ2xlYW4g dXAgc3RhdGUgdXNlZCB0byBpbnNlcnQgYSBzaW5nbGUgb3IgbXVsdGlwbGUgdHVwbGVzIGludG8g YSBoZWFwLgorICovCit2b2lkCitoZWFwX2luc2VydF9lbmQoVGFibGVJbnNlcnRTdGF0ZSAqIHN0 YXRlKQoreworCWlmIChzdGF0ZS0+YW1fZGF0YSAhPSBOVUxMICYmCisJCSgoSGVhcEluc2VydFN0 YXRlICopIHN0YXRlLT5hbV9kYXRhKS0+bWlzdGF0ZSAhPSBOVUxMKQorCXsKKwkJSGVhcE11bHRp SW5zZXJ0U3RhdGUgKm1pc3RhdGUgPQorCQkJKChIZWFwSW5zZXJ0U3RhdGUgKikgc3RhdGUtPmFt X2RhdGEpLT5taXN0YXRlOworCisJCS8qIEluc2VydCByZW1haW5pbmcgdHVwbGVzIGZyb20gbXVs dGktaW5zZXJ0IGJ1ZmZlcnMgKi8KKwkJaWYgKG1pc3RhdGUtPmN1cl9zbG90cyA+IDAgfHwgbWlz dGF0ZS0+Y3VyX3NpemUgPiAwKQorCQkJaGVhcF9tdWx0aV9pbnNlcnRfZmx1c2goc3RhdGUpOwor CisJCU1lbW9yeUNvbnRleHREZWxldGUobWlzdGF0ZS0+Y29udGV4dCk7CisKKwkJZm9yIChpbnQg aSA9IDA7IGkgPCBIRUFQX01BWF9CVUZGRVJFRF9TTE9UUyAmJiBtaXN0YXRlLT5zbG90c1tpXSAh PSBOVUxMOyBpKyspCisJCQlFeGVjRHJvcFNpbmdsZVR1cGxlVGFibGVTbG90KG1pc3RhdGUtPnNs b3RzW2ldKTsKKworCQlwZnJlZShtaXN0YXRlKTsKKwkJKChIZWFwSW5zZXJ0U3RhdGUgKikgc3Rh dGUtPmFtX2RhdGEpLT5taXN0YXRlID0gTlVMTDsKKwl9CisKKwlpZiAoc3RhdGUtPmFtX2RhdGEg IT0gTlVMTCAmJgorCQkoKEhlYXBJbnNlcnRTdGF0ZSAqKSBzdGF0ZS0+YW1fZGF0YSktPmJpc3Rh dGUgIT0gTlVMTCkKKwkJRnJlZUJ1bGtJbnNlcnRTdGF0ZSgoKEhlYXBJbnNlcnRTdGF0ZSAqKSBz dGF0ZS0+YW1fZGF0YSktPmJpc3RhdGUpOworCisJcGZyZWUoc3RhdGUtPmFtX2RhdGEpOworCXN0 YXRlLT5hbV9kYXRhID0gTlVMTDsKKwlwZnJlZShzdGF0ZSk7Cit9CisKIC8qCiAgKglzaW1wbGVf aGVhcF9pbnNlcnQgLSBpbnNlcnQgYSB0dXBsZQogICoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9o ZWFwYW1faGFuZGxlci5jCmluZGV4IGQxNWEwMmIyYmUuLjc5NTE3NzgxMmQgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMKKysrIGIvc3JjL2JhY2tl bmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYwpAQCAtMjU2NCw2ICsyNTY0LDE1IEBAIHN0 YXRpYyBjb25zdCBUYWJsZUFtUm91dGluZSBoZWFwYW1fbWV0aG9kcyA9IHsKIAkudHVwbGVfaW5z ZXJ0X3NwZWN1bGF0aXZlID0gaGVhcGFtX3R1cGxlX2luc2VydF9zcGVjdWxhdGl2ZSwKIAkudHVw bGVfY29tcGxldGVfc3BlY3VsYXRpdmUgPSBoZWFwYW1fdHVwbGVfY29tcGxldGVfc3BlY3VsYXRp dmUsCiAJLm11bHRpX2luc2VydCA9IGhlYXBfbXVsdGlfaW5zZXJ0LAorCisJLnR1cGxlX2luc2Vy dF9iZWdpbiA9IGhlYXBfaW5zZXJ0X2JlZ2luLAorCS50dXBsZV9pbnNlcnRfdjIgPSBoZWFwX2lu c2VydF92MiwKKwkudHVwbGVfbXVsdGlfaW5zZXJ0X25leHRfZnJlZV9zbG90ID0gaGVhcF9tdWx0 aV9pbnNlcnRfbmV4dF9mcmVlX3Nsb3QsCisJLnR1cGxlX211bHRpX2luc2VydF92MiA9IGhlYXBf bXVsdGlfaW5zZXJ0X3YyLAorCS50dXBsZV9tdWx0aV9pbnNlcnRfc2xvdHMgPSBoZWFwX211bHRp X2luc2VydF9zbG90cywKKwkudHVwbGVfbXVsdGlfaW5zZXJ0X2ZsdXNoID0gaGVhcF9tdWx0aV9p bnNlcnRfZmx1c2gsCisJLnR1cGxlX2luc2VydF9lbmQgPSBoZWFwX2luc2VydF9lbmQsCisKIAku dHVwbGVfZGVsZXRlID0gaGVhcGFtX3R1cGxlX2RlbGV0ZSwKIAkudHVwbGVfdXBkYXRlID0gaGVh cGFtX3R1cGxlX3VwZGF0ZSwKIAkudHVwbGVfbG9jayA9IGhlYXBhbV90dXBsZV9sb2NrLApkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNz L2hlYXBhbS5oCmluZGV4IDRiMTMzZjY4NTkuLjA1M2JlMTgxMTAgMTAwNjQ0Ci0tLSBhL3NyYy9p bmNsdWRlL2FjY2Vzcy9oZWFwYW0uaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgK QEAgLTIyNSw2ICsyMjUsNDAgQEAgaHRzdl9nZXRfdmFsaWRfc3RhdHVzKGludCBzdGF0dXMpCiAJ cmV0dXJuIChIVFNWX1Jlc3VsdCkgc3RhdHVzOwogfQogCisvKgorICogTWF4aW11bSBudW1iZXIg b2Ygc2xvdHMgdGhhdCBtdWx0aS1pbnNlcnQgYnVmZmVycyBjYW4gaG9sZC4KKyAqCisgKiBDYXV0 aW9uOiBEb24ndCBtYWtlIHRoaXMgdG9vIGJpZywgYXMgd2UgY291bGQgZW5kIHVwIHdpdGggdGhp cyBtYW55IHR1cGxlcworICogc3RvcmVkIGluIG11bHRpIGluc2VydCBidWZmZXIuIEZvciBpbnN0 YW5jZSwgaW5jcmVhc2luZyB0aGlzIGNhbiBjYXVzZQorICogcXVhZHJhdGljIGdyb3d0aCBpbiBt ZW1vcnkgcmVxdWlyZW1lbnRzIGR1cmluZyBjb3BpZXMgaW50byBwYXJ0aXRpb25lZAorICogdGFi bGVzIHdpdGggYSBsYXJnZSBudW1iZXIgb2YgcGFydGl0aW9ucy4KKyAqLworI2RlZmluZSBIRUFQ X01BWF9CVUZGRVJFRF9TTE9UUwkJMTAwMAorCisvKiBNYXhpbXVtIHNpemUgb2YgYWxsIHR1cGxl cyB0aGF0IG11bHRpLWluc2VydCBidWZmZXJzIGNhbiBob2xkICovCisjZGVmaW5lIEhFQVBfTUFY X0JVRkZFUkVEX0JZVEVTCQk2NTUzNQorCit0eXBlZGVmIHN0cnVjdCBIZWFwTXVsdGlJbnNlcnRT dGF0ZQoreworCS8qIE1lbW9yeSBjb250ZXh0IHRvIHVzZSBmb3IgZmx1c2hpbmcgbXVsdGktaW5z ZXJ0IGJ1ZmZlcnMgKi8KKwlNZW1vcnlDb250ZXh0IGNvbnRleHQ7CisKKwkvKiBBcnJheSBvZiBi dWZmZXJlZCBzbG90cyAqLworCVR1cGxlVGFibGVTbG90ICoqc2xvdHM7CisKKwkvKiBOdW1iZXIg b2Ygc2xvdHMgdGhhdCBtdWx0aS1pbnNlcnQgYnVmZmVycyBjdXJyZW50bHkgaG9sZCAqLworCWlu dAkJCWN1cl9zbG90czsKKworCS8qIFNpemUgb2YgYWxsIHR1cGxlcyB0aGF0IG11bHRpLWluc2Vy dCBidWZmZXJzIGN1cnJlbnRseSBob2xkICovCisJU2l6ZQkJY3VyX3NpemU7Cit9CQkJSGVhcE11 bHRpSW5zZXJ0U3RhdGU7CisKK3R5cGVkZWYgc3RydWN0IEhlYXBJbnNlcnRTdGF0ZQoreworCXN0 cnVjdCBCdWxrSW5zZXJ0U3RhdGVEYXRhICpiaXN0YXRlOworCUhlYXBNdWx0aUluc2VydFN0YXRl ICptaXN0YXRlOworfQkJCUhlYXBJbnNlcnRTdGF0ZTsKKwogLyogLS0tLS0tLS0tLS0tLS0tLQog ICoJCWZ1bmN0aW9uIHByb3RvdHlwZXMgZm9yIGhlYXAgYWNjZXNzIG1ldGhvZAogICoKQEAgLTI3 NSw2ICszMDksMjEgQEAgZXh0ZXJuIHZvaWQgaGVhcF9pbnNlcnQoUmVsYXRpb24gcmVsYXRpb24s IEhlYXBUdXBsZSB0dXAsIENvbW1hbmRJZCBjaWQsCiBleHRlcm4gdm9pZCBoZWFwX211bHRpX2lu c2VydChSZWxhdGlvbiByZWxhdGlvbiwgc3RydWN0IFR1cGxlVGFibGVTbG90ICoqc2xvdHMsCiAJ CQkJCQkJICBpbnQgbnR1cGxlcywgQ29tbWFuZElkIGNpZCwgaW50IG9wdGlvbnMsCiAJCQkJCQkJ ICBCdWxrSW5zZXJ0U3RhdGUgYmlzdGF0ZSk7CisKK2V4dGVybiBUYWJsZUluc2VydFN0YXRlICog aGVhcF9pbnNlcnRfYmVnaW4oUmVsYXRpb24gcmVsLAorCQkJCQkJCQkJCQlDb21tYW5kSWQgY2lk LAorCQkJCQkJCQkJCQlpbnQgYW1fZmxhZ3MsCisJCQkJCQkJCQkJCWludCBpbnNlcnRfZmxhZ3Mp OworZXh0ZXJuIHZvaWQgaGVhcF9pbnNlcnRfdjIoVGFibGVJbnNlcnRTdGF0ZSAqIHN0YXRlLAor CQkJCQkJICAgVHVwbGVUYWJsZVNsb3QgKnNsb3QpOworZXh0ZXJuIFR1cGxlVGFibGVTbG90ICpo ZWFwX211bHRpX2luc2VydF9uZXh0X2ZyZWVfc2xvdChUYWJsZUluc2VydFN0YXRlICogc3RhdGUp OworZXh0ZXJuIHZvaWQgaGVhcF9tdWx0aV9pbnNlcnRfdjIoVGFibGVJbnNlcnRTdGF0ZSAqIHN0 YXRlLAorCQkJCQkJCQkgVHVwbGVUYWJsZVNsb3QgKnNsb3QpOworZXh0ZXJuIFR1cGxlVGFibGVT bG90ICoqaGVhcF9tdWx0aV9pbnNlcnRfc2xvdHMoVGFibGVJbnNlcnRTdGF0ZSAqIHN0YXRlLAor CQkJCQkJCQkJCQkJaW50ICpudW1fc2xvdHMpOworZXh0ZXJuIHZvaWQgaGVhcF9tdWx0aV9pbnNl cnRfZmx1c2goVGFibGVJbnNlcnRTdGF0ZSAqIHN0YXRlKTsKK2V4dGVybiB2b2lkIGhlYXBfaW5z ZXJ0X2VuZChUYWJsZUluc2VydFN0YXRlICogc3RhdGUpOworCiBleHRlcm4gVE1fUmVzdWx0IGhl YXBfZGVsZXRlKFJlbGF0aW9uIHJlbGF0aW9uLCBJdGVtUG9pbnRlciB0aWQsCiAJCQkJCQkJIENv bW1hbmRJZCBjaWQsIFNuYXBzaG90IGNyb3NzY2hlY2ssIGJvb2wgd2FpdCwKIAkJCQkJCQkgc3Ry dWN0IFRNX0ZhaWx1cmVEYXRhICp0bWZkLCBib29sIGNoYW5naW5nUGFydCk7CmRpZmYgLS1naXQg YS9zcmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxl YW0uaAppbmRleCA1Zjg0NzQ4NzFkLi44ZmNhZjZmZTVhIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVk ZS9hY2Nlc3MvdGFibGVhbS5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmgKQEAg LTI0Nyw2ICsyNDcsNDMgQEAgdHlwZWRlZiBzdHJ1Y3QgVE1fSW5kZXhEZWxldGVPcAogCVRNX0lu ZGV4U3RhdHVzICpzdGF0dXM7CiB9IFRNX0luZGV4RGVsZXRlT3A7CiAKKy8qIFVzZSBtdWx0aSBp bnNlcnRzLCBpLmUuIGJ1ZmZlciBtdWx0aXBsZSB0dXBsZXMgYW5kIGluc2VydCB0aGVtIGF0IG9u Y2UgKi8KKyNkZWZpbmUgVEFCTEVBTV9NVUxUSV9JTlNFUlRTIDB4MDAwMDAxCisKKy8qIFVzZSBC QVNfQlVMS1dSSVRFIGJ1ZmZlciBhY2Nlc3Mgc3RyYXRlZ3kgKi8KKyNkZWZpbmUgVEFCTEVBTV9C VUxLV1JJVEVfQlVGRkVSX0FDQ0VTU19TVFJBVEVHWSAweDAwMDAwMgorCisvKgorICogU2tpcCBm bHVzaGluZyBidWZmZXJlZCB0dXBsZXMgYXV0b21hdGljYWxseS4gUmVzcG9uc2liaWxpdHkgbGll cyB3aXRoIHRoZQorICogY2FsbGVyIHRvIGZsdXNoIHRoZSBidWZmZXJlZCB0dXBsZXMuCisgKi8K KyNkZWZpbmUgVEFCTEVBTV9TS0lQX01VTFRJX0lOU0VSVFNfRkxVU0ggMHgwMDAwMDQKKworCisv KiBIb2xkcyB0YWJsZSBpbnNlcnQgc3RhdGUuICovCit0eXBlZGVmIHN0cnVjdCBUYWJsZUluc2Vy dFN0YXRlCit7CisJLyogVGFibGUgQU0tYWdub3N0aWMgZGF0YSBzdGFydHMgaGVyZSAqLworCisJ UmVsYXRpb24JcmVsOwkJCS8qIFRhcmdldCByZWxhdGlvbiAqLworCisJLyoKKwkgKiBDb21tYW5k IElEIGZvciB0aGlzIGluc2VydGlvbi4gSWYgcmVxdWlyZWQsIGNoYW5nZSB0aGlzIGZvciBlYWNo IHBhc3MKKwkgKiBvZiBpbnNlcnQgZnVuY3Rpb25zLgorCSAqLworCUNvbW1hbmRJZAljaWQ7CisK KwkvKiBUYWJsZSBBTSBvcHRpb25zIChUQUJMRUFNX1hYWCBtYWNyb3MpICovCisJaW50CQkJYW1f ZmxhZ3M7CisKKwkvKiB0YWJsZV90dXBsZV9pbnNlcnQgcGVyZm9ybWFuY2Ugb3B0aW9ucyAoVEFC TEVfSU5TRVJUX1hYWCBtYWNyb3MpICovCisJaW50CQkJaW5zZXJ0X2ZsYWdzOworCisJLyogVGFi bGUgQU0gc3BlY2lmaWMgZGF0YSBzdGFydHMgaGVyZSAqLworCisJdm9pZAkgICAqYW1fZGF0YTsK K30JCQlUYWJsZUluc2VydFN0YXRlOworCiAvKiAib3B0aW9ucyIgZmxhZyBiaXRzIGZvciB0YWJs ZV90dXBsZV9pbnNlcnQgKi8KIC8qIFRBQkxFX0lOU0VSVF9TS0lQX1dBTCB3YXMgMHgwMDAxOyBS ZWxhdGlvbk5lZWRzV0FMKCkgbm93IGdvdmVybnMgKi8KICNkZWZpbmUgVEFCTEVfSU5TRVJUX1NL SVBfRlNNCQkweDAwMDIKQEAgLTUyMiw2ICs1NTksMjAgQEAgdHlwZWRlZiBzdHJ1Y3QgVGFibGVB bVJvdXRpbmUKIAl2b2lkCQkoKm11bHRpX2luc2VydCkgKFJlbGF0aW9uIHJlbCwgVHVwbGVUYWJs ZVNsb3QgKipzbG90cywgaW50IG5zbG90cywKIAkJCQkJCQkJIENvbW1hbmRJZCBjaWQsIGludCBv cHRpb25zLCBzdHJ1Y3QgQnVsa0luc2VydFN0YXRlRGF0YSAqYmlzdGF0ZSk7CiAKKwlUYWJsZUlu c2VydFN0YXRlICooKnR1cGxlX2luc2VydF9iZWdpbikgKFJlbGF0aW9uIHJlbCwKKwkJCQkJCQkJ CQkJIENvbW1hbmRJZCBjaWQsCisJCQkJCQkJCQkJCSBpbnQgYW1fZmxhZ3MsCisJCQkJCQkJCQkJ CSBpbnQgaW5zZXJ0X2ZsYWdzKTsKKwl2b2lkCQkoKnR1cGxlX2luc2VydF92MikgKFRhYmxlSW5z ZXJ0U3RhdGUgKiBzdGF0ZSwKKwkJCQkJCQkJCVR1cGxlVGFibGVTbG90ICpzbG90KTsKKwl2b2lk CQkoKnR1cGxlX211bHRpX2luc2VydF92MikgKFRhYmxlSW5zZXJ0U3RhdGUgKiBzdGF0ZSwKKwkJ CQkJCQkJCQkgIFR1cGxlVGFibGVTbG90ICpzbG90KTsKKwlUdXBsZVRhYmxlU2xvdCAqKCp0dXBs ZV9tdWx0aV9pbnNlcnRfbmV4dF9mcmVlX3Nsb3QpIChUYWJsZUluc2VydFN0YXRlICogc3RhdGUp OworCVR1cGxlVGFibGVTbG90ICoqKCp0dXBsZV9tdWx0aV9pbnNlcnRfc2xvdHMpIChUYWJsZUlu c2VydFN0YXRlICogc3RhdGUsCisJCQkJCQkJCQkJCQkgIGludCAqbnVtX3Nsb3RzKTsKKwl2b2lk CQkoKnR1cGxlX211bHRpX2luc2VydF9mbHVzaCkgKFRhYmxlSW5zZXJ0U3RhdGUgKiBzdGF0ZSk7 CisJdm9pZAkJKCp0dXBsZV9pbnNlcnRfZW5kKSAoVGFibGVJbnNlcnRTdGF0ZSAqIHN0YXRlKTsK KwogCS8qIHNlZSB0YWJsZV90dXBsZV9kZWxldGUoKSBmb3IgcmVmZXJlbmNlIGFib3V0IHBhcmFt ZXRlcnMgKi8KIAlUTV9SZXN1bHQJKCp0dXBsZV9kZWxldGUpIChSZWxhdGlvbiByZWwsCiAJCQkJ CQkJCSBJdGVtUG9pbnRlciB0aWQsCkBAIC0xNDU2LDYgKzE1MDcsOTggQEAgdGFibGVfbXVsdGlf aW5zZXJ0KFJlbGF0aW9uIHJlbCwgVHVwbGVUYWJsZVNsb3QgKipzbG90cywgaW50IG5zbG90cywK IAkJCQkJCQkJICBjaWQsIG9wdGlvbnMsIGJpc3RhdGUpOwogfQogCitzdGF0aWMgaW5saW5lIFRh YmxlSW5zZXJ0U3RhdGUgKgordGFibGVfaW5zZXJ0X2JlZ2luKFJlbGF0aW9uIHJlbCwgQ29tbWFu ZElkIGNpZCwgaW50IGFtX2ZsYWdzLAorCQkJCSAgIGludCBpbnNlcnRfZmxhZ3MpCit7CisJaWYg KHJlbC0+cmRfdGFibGVhbSAmJiByZWwtPnJkX3RhYmxlYW0tPnR1cGxlX2luc2VydF9iZWdpbikK KwkJcmV0dXJuIHJlbC0+cmRfdGFibGVhbS0+dHVwbGVfaW5zZXJ0X2JlZ2luKHJlbCwgY2lkLCBh bV9mbGFncywKKwkJCQkJCQkJCQkJCSAgIGluc2VydF9mbGFncyk7CisJZWxzZQorCQllcmVwb3J0 KEVSUk9SLAorCQkJCWVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAorCQkJ CWVycm1zZygidGFibGVfaW5zZXJ0X2JlZ2luIGFjY2VzcyBtZXRob2QgaXMgbm90IGltcGxlbWVu dGVkIGZvciByZWxhdGlvbiBcIiVzXCIiLAorCQkJCQkgICBSZWxhdGlvbkdldFJlbGF0aW9uTmFt ZShyZWwpKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAordGFibGVfdHVwbGVfaW5zZXJ0X3Yy KFRhYmxlSW5zZXJ0U3RhdGUgKiBzdGF0ZSwgVHVwbGVUYWJsZVNsb3QgKnNsb3QpCit7CisJaWYg KHN0YXRlLT5yZWwtPnJkX3RhYmxlYW0gJiYKKwkJc3RhdGUtPnJlbC0+cmRfdGFibGVhbS0+dHVw bGVfaW5zZXJ0X3YyKQorCQlzdGF0ZS0+cmVsLT5yZF90YWJsZWFtLT50dXBsZV9pbnNlcnRfdjIo c3RhdGUsIHNsb3QpOworCWVsc2UKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQllcnJjb2RlKEVSUkNP REVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKKwkJCQllcnJtc2coInRhYmxlX3R1cGxlX2luc2Vy dF92MiBhY2Nlc3MgbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZCBmb3IgcmVsYXRpb24gXCIlc1wi IiwKKwkJCQkJICAgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUoc3RhdGUtPnJlbCkpKTsKK30KKwor c3RhdGljIGlubGluZSB2b2lkCit0YWJsZV9tdWx0aV9pbnNlcnRfdjIoVGFibGVJbnNlcnRTdGF0 ZSAqIHN0YXRlLCBUdXBsZVRhYmxlU2xvdCAqc2xvdCkKK3sKKwlpZiAoc3RhdGUtPnJlbC0+cmRf dGFibGVhbSAmJgorCQlzdGF0ZS0+cmVsLT5yZF90YWJsZWFtLT50dXBsZV9tdWx0aV9pbnNlcnRf djIpCisJCXN0YXRlLT5yZWwtPnJkX3RhYmxlYW0tPnR1cGxlX211bHRpX2luc2VydF92MihzdGF0 ZSwgc2xvdCk7CisJZWxzZQorCQllcmVwb3J0KEVSUk9SLAorCQkJCWVycmNvZGUoRVJSQ09ERV9G RUFUVVJFX05PVF9TVVBQT1JURUQpLAorCQkJCWVycm1zZygidGFibGVfbXVsdGlfaW5zZXJ0X3Yy IGFjY2VzcyBtZXRob2QgaXMgbm90IGltcGxlbWVudGVkIGZvciByZWxhdGlvbiBcIiVzXCIiLAor CQkJCQkgICBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShzdGF0ZS0+cmVsKSkpOworfQorCitzdGF0 aWMgaW5saW5lIFR1cGxlVGFibGVTbG90ICoKK3RhYmxlX211bHRpX2luc2VydF9uZXh0X2ZyZWVf c2xvdChUYWJsZUluc2VydFN0YXRlICogc3RhdGUpCit7CisJaWYgKHN0YXRlLT5yZWwtPnJkX3Rh YmxlYW0gJiYKKwkJc3RhdGUtPnJlbC0+cmRfdGFibGVhbS0+dHVwbGVfbXVsdGlfaW5zZXJ0X25l eHRfZnJlZV9zbG90KQorCQlyZXR1cm4gc3RhdGUtPnJlbC0+cmRfdGFibGVhbS0+dHVwbGVfbXVs dGlfaW5zZXJ0X25leHRfZnJlZV9zbG90KHN0YXRlKTsKKwllbHNlCisJCWVyZXBvcnQoRVJST1Is CisJCQkJZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCisJCQkJZXJybXNn KCJ0YWJsZV9tdWx0aV9pbnNlcnRfbmV4dF9mcmVlX3Nsb3QgYWNjZXNzIG1ldGhvZCBpcyBub3Qg aW1wbGVtZW50ZWQgZm9yIHJlbGF0aW9uIFwiJXNcIiIsCisJCQkJCSAgIFJlbGF0aW9uR2V0UmVs YXRpb25OYW1lKHN0YXRlLT5yZWwpKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgVHVwbGVUYWJsZVNs b3QgKioKK3RhYmxlX211bHRpX2luc2VydF9zbG90cyhUYWJsZUluc2VydFN0YXRlICogc3RhdGUs IGludCAqbnVtX3Nsb3RzKQoreworCWlmIChzdGF0ZS0+cmVsLT5yZF90YWJsZWFtICYmCisJCXN0 YXRlLT5yZWwtPnJkX3RhYmxlYW0tPnR1cGxlX211bHRpX2luc2VydF9zbG90cykKKwkJcmV0dXJu IHN0YXRlLT5yZWwtPnJkX3RhYmxlYW0tPnR1cGxlX211bHRpX2luc2VydF9zbG90cyhzdGF0ZSwg bnVtX3Nsb3RzKTsKKwllbHNlCisJCWVyZXBvcnQoRVJST1IsCisJCQkJZXJyY29kZShFUlJDT0RF X0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCisJCQkJZXJybXNnKCJ0YWJsZV9tdWx0aV9pbnNlcnRf c2xvdHMgYWNjZXNzIG1ldGhvZCBpcyBub3QgaW1wbGVtZW50ZWQgZm9yIHJlbGF0aW9uIFwiJXNc IiIsCisJCQkJCSAgIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHN0YXRlLT5yZWwpKSk7Cit9CisK K3N0YXRpYyBpbmxpbmUgdm9pZAordGFibGVfbXVsdGlfaW5zZXJ0X2ZsdXNoKFRhYmxlSW5zZXJ0 U3RhdGUgKiBzdGF0ZSkKK3sKKwlpZiAoc3RhdGUtPnJlbC0+cmRfdGFibGVhbSAmJgorCQlzdGF0 ZS0+cmVsLT5yZF90YWJsZWFtLT50dXBsZV9tdWx0aV9pbnNlcnRfZmx1c2gpCisJCXN0YXRlLT5y ZWwtPnJkX3RhYmxlYW0tPnR1cGxlX211bHRpX2luc2VydF9mbHVzaChzdGF0ZSk7CisJZWxzZQor CQllcmVwb3J0KEVSUk9SLAorCQkJCWVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JU RUQpLAorCQkJCWVycm1zZygidGFibGVfbXVsdGlfaW5zZXJ0X2ZsdXNoIGFjY2VzcyBtZXRob2Qg aXMgbm90IGltcGxlbWVudGVkIGZvciByZWxhdGlvbiBcIiVzXCIiLAorCQkJCQkgICBSZWxhdGlv bkdldFJlbGF0aW9uTmFtZShzdGF0ZS0+cmVsKSkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQK K3RhYmxlX2luc2VydF9lbmQoVGFibGVJbnNlcnRTdGF0ZSAqIHN0YXRlKQoreworCWlmIChzdGF0 ZS0+cmVsLT5yZF90YWJsZWFtICYmCisJCXN0YXRlLT5yZWwtPnJkX3RhYmxlYW0tPnR1cGxlX2lu c2VydF9lbmQpCisJCXN0YXRlLT5yZWwtPnJkX3RhYmxlYW0tPnR1cGxlX2luc2VydF9lbmQoc3Rh dGUpOworCWVsc2UKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQllcnJjb2RlKEVSUkNPREVfRkVBVFVS RV9OT1RfU1VQUE9SVEVEKSwKKwkJCQllcnJtc2coInRhYmxlX2luc2VydF9lbmQgYWNjZXNzIG1l dGhvZCBpcyBub3QgaW1wbGVtZW50ZWQgZm9yIHJlbGF0aW9uIFwiJXNcIiIsCisJCQkJCSAgIFJl bGF0aW9uR2V0UmVsYXRpb25OYW1lKHN0YXRlLT5yZWwpKSk7Cit9CisKIC8qCiAgKiBEZWxldGUg YSB0dXBsZS4KICAqCi0tIAoyLjM0LjEKCg== --0000000000008d2b29061010943f Content-Type: application/x-patch; name="v9-0003-Optimize-RMV-with-multi-inserts.patch" Content-Disposition: attachment; filename="v9-0003-Optimize-RMV-with-multi-inserts.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lryjewpb2 RnJvbSAxYzNlZWEzZDBhYzY5ZjU5MGNhNjQxZDBlZmFlYWEwNTg1YTdhODUwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBCaGFyYXRoIFJ1cGlyZWRkeSA8YmhhcmF0aC5ydXBpcmVkZHlm b3Jwb3N0Z3Jlc0BnbWFpbC5jb20+CkRhdGU6IE1vbiwgMjkgSmFuIDIwMjQgMDU6NTg6MzMgKzAw MDAKU3ViamVjdDogW1BBVENIIHY5IDMvNF0gT3B0aW1pemUgUk1WIHdpdGggbXVsdGkgaW5zZXJ0 cwoKLS0tCiBzcmMvYmFja2VuZC9jb21tYW5kcy9tYXR2aWV3LmMgfCAzNCArKysrKysrKysrKyst LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgMTIgaW5zZXJ0aW9ucygrKSwg MjIgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvbWF0dmll dy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvbWF0dmlldy5jCmluZGV4IDFkY2ZiZTg3OWIuLmY4 NGM3OWY1ZjAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL21hdHZpZXcuYworKysg Yi9zcmMvYmFja2VuZC9jb21tYW5kcy9tYXR2aWV3LmMKQEAgLTUyLDEwICs1Miw3IEBAIHR5cGVk ZWYgc3RydWN0CiAJRGVzdFJlY2VpdmVyIHB1YjsJCQkvKiBwdWJsaWNseS1rbm93biBmdW5jdGlv biBwb2ludGVycyAqLwogCU9pZAkJCXRyYW5zaWVudG9pZDsJLyogT0lEIG9mIG5ldyBoZWFwIGlu dG8gd2hpY2ggdG8gc3RvcmUgKi8KIAkvKiBUaGVzZSBmaWVsZHMgYXJlIGZpbGxlZCBieSB0cmFu c2llbnRyZWxfc3RhcnR1cDogKi8KLQlSZWxhdGlvbgl0cmFuc2llbnRyZWw7CS8qIHJlbGF0aW9u IHRvIHdyaXRlIHRvICovCi0JQ29tbWFuZElkCW91dHB1dF9jaWQ7CQkvKiBjbWluIHRvIGluc2Vy dCBpbiBvdXRwdXQgdHVwbGVzICovCi0JaW50CQkJdGlfb3B0aW9uczsJCS8qIHRhYmxlX3R1cGxl X2luc2VydCBwZXJmb3JtYW5jZSBvcHRpb25zICovCi0JQnVsa0luc2VydFN0YXRlIGJpc3RhdGU7 CS8qIGJ1bGsgaW5zZXJ0IHN0YXRlICovCisJVGFibGVJbnNlcnRTdGF0ZSAqdGlfc3RhdGU7IC8q IHRhYmxlIGluc2VydCBzdGF0ZSAqLwogfSBEUl90cmFuc2llbnRyZWw7CiAKIHN0YXRpYyBpbnQJ bWF0dmlld19tYWludGVuYW5jZV9kZXB0aCA9IDA7CkBAIC00NTcsMTMgKzQ1NCwxMyBAQCB0cmFu c2llbnRyZWxfc3RhcnR1cChEZXN0UmVjZWl2ZXIgKnNlbGYsIGludCBvcGVyYXRpb24sIFR1cGxl RGVzYyB0eXBlaW5mbykKIAogCXRyYW5zaWVudHJlbCA9IHRhYmxlX29wZW4obXlTdGF0ZS0+dHJh bnNpZW50b2lkLCBOb0xvY2spOwogCi0JLyoKLQkgKiBGaWxsIHByaXZhdGUgZmllbGRzIG9mIG15 U3RhdGUgZm9yIHVzZSBieSBsYXRlciByb3V0aW5lcwotCSAqLwotCW15U3RhdGUtPnRyYW5zaWVu dHJlbCA9IHRyYW5zaWVudHJlbDsKLQlteVN0YXRlLT5vdXRwdXRfY2lkID0gR2V0Q3VycmVudENv bW1hbmRJZCh0cnVlKTsKLQlteVN0YXRlLT50aV9vcHRpb25zID0gVEFCTEVfSU5TRVJUX1NLSVBf RlNNIHwgVEFCTEVfSU5TRVJUX0ZST1pFTjsKLQlteVN0YXRlLT5iaXN0YXRlID0gR2V0QnVsa0lu c2VydFN0YXRlKCk7CisJLyogRmlsbCBwcml2YXRlIGZpZWxkcyBvZiBteVN0YXRlIGZvciB1c2Ug YnkgbGF0ZXIgcm91dGluZXMgKi8KKwlteVN0YXRlLT50aV9zdGF0ZSA9IHRhYmxlX2luc2VydF9i ZWdpbih0cmFuc2llbnRyZWwsCisJCQkJCQkJCQkJICAgR2V0Q3VycmVudENvbW1hbmRJZCh0cnVl KSwKKwkJCQkJCQkJCQkgICBUQUJMRUFNX01VTFRJX0lOU0VSVFMgfAorCQkJCQkJCQkJCSAgIFRB QkxFQU1fQlVMS1dSSVRFX0JVRkZFUl9BQ0NFU1NfU1RSQVRFR1ksCisJCQkJCQkJCQkJICAgVEFC TEVfSU5TRVJUX1NLSVBfRlNNIHwKKwkJCQkJCQkJCQkgICBUQUJMRV9JTlNFUlRfRlJPWkVOKTsK IAogCS8qCiAJICogVmFsaWQgc21ncl90YXJnYmxvY2sgaW1wbGllcyBzb21ldGhpbmcgYWxyZWFk eSB3cm90ZSB0byB0aGUgcmVsYXRpb24uCkBAIC00ODgsMTIgKzQ4NSw3IEBAIHRyYW5zaWVudHJl bF9yZWNlaXZlKFR1cGxlVGFibGVTbG90ICpzbG90LCBEZXN0UmVjZWl2ZXIgKnNlbGYpCiAJICog Y2hlYXAgZWl0aGVyLiBUaGlzIGFsc28gZG9lc24ndCBhbGxvdyBhY2Nlc3NpbmcgcGVyLUFNIGRh dGEgKHNheSBhCiAJICogdHVwbGUncyB4bWluKSwgYnV0IHNpbmNlIHdlIGRvbid0IGRvIHRoYXQg aGVyZS4uLgogCSAqLwotCi0JdGFibGVfdHVwbGVfaW5zZXJ0KG15U3RhdGUtPnRyYW5zaWVudHJl bCwKLQkJCQkJICAgc2xvdCwKLQkJCQkJICAgbXlTdGF0ZS0+b3V0cHV0X2NpZCwKLQkJCQkJICAg bXlTdGF0ZS0+dGlfb3B0aW9ucywKLQkJCQkJICAgbXlTdGF0ZS0+YmlzdGF0ZSk7CisJdGFibGVf bXVsdGlfaW5zZXJ0X3YyKG15U3RhdGUtPnRpX3N0YXRlLCBzbG90KTsKIAogCS8qIFdlIGtub3cg dGhpcyBpcyBhIG5ld2x5IGNyZWF0ZWQgcmVsYXRpb24sIHNvIHRoZXJlIGFyZSBubyBpbmRleGVz ICovCiAKQEAgLTUwNywxNCArNDk5LDEyIEBAIHN0YXRpYyB2b2lkCiB0cmFuc2llbnRyZWxfc2h1 dGRvd24oRGVzdFJlY2VpdmVyICpzZWxmKQogewogCURSX3RyYW5zaWVudHJlbCAqbXlTdGF0ZSA9 IChEUl90cmFuc2llbnRyZWwgKikgc2VsZjsKKwlSZWxhdGlvbgl0cmFuc2llbnRyZWwgPSBteVN0 YXRlLT50aV9zdGF0ZS0+cmVsOwogCi0JRnJlZUJ1bGtJbnNlcnRTdGF0ZShteVN0YXRlLT5iaXN0 YXRlKTsKLQotCXRhYmxlX2ZpbmlzaF9idWxrX2luc2VydChteVN0YXRlLT50cmFuc2llbnRyZWws IG15U3RhdGUtPnRpX29wdGlvbnMpOworCXRhYmxlX2luc2VydF9lbmQobXlTdGF0ZS0+dGlfc3Rh dGUpOwogCiAJLyogY2xvc2UgdHJhbnNpZW50cmVsLCBidXQga2VlcCBsb2NrIHVudGlsIGNvbW1p dCAqLwotCXRhYmxlX2Nsb3NlKG15U3RhdGUtPnRyYW5zaWVudHJlbCwgTm9Mb2NrKTsKLQlteVN0 YXRlLT50cmFuc2llbnRyZWwgPSBOVUxMOworCXRhYmxlX2Nsb3NlKHRyYW5zaWVudHJlbCwgTm9M b2NrKTsKIH0KIAogLyoKLS0gCjIuMzQuMQoK --0000000000008d2b29061010943f Content-Type: application/x-patch; name="v9-0002-Optimize-CTAS-with-multi-inserts.patch" Content-Disposition: attachment; filename="v9-0002-Optimize-CTAS-with-multi-inserts.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lryjeupr1 RnJvbSA4OTEwNDdjNGIyMGFhYjJjNmQyNTE4N2I0NWI3NzVlZTlkNzFmYjQ4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBCaGFyYXRoIFJ1cGlyZWRkeSA8YmhhcmF0aC5ydXBpcmVkZHlm b3Jwb3N0Z3Jlc0BnbWFpbC5jb20+CkRhdGU6IE1vbiwgMjkgSmFuIDIwMjQgMDU6NTc6NTkgKzAw MDAKU3ViamVjdDogW1BBVENIIHY5IDIvNF0gT3B0aW1pemUgQ1RBUyB3aXRoIG11bHRpIGluc2Vy dHMKCi0tLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvY3JlYXRlYXMuYyAgICAgICAgICB8IDI1ICsr KysrKysrKy0tLS0tLS0tLS0tLS0tLQogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9hZ2dyZWdh dGVzLm91dCB8ICAyICstCiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9hZ2dyZWdhdGVzLnNxbCAgICAg IHwgIDIgKy0KIDMgZmlsZXMgY2hhbmdlZCwgMTEgaW5zZXJ0aW9ucygrKSwgMTggZGVsZXRpb25z KC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvY3JlYXRlYXMuYyBiL3NyYy9i YWNrZW5kL2NvbW1hbmRzL2NyZWF0ZWFzLmMKaW5kZXggMTZhMmZlNjVlNi4uM2EwMmVhOTU3OCAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvY3JlYXRlYXMuYworKysgYi9zcmMvYmFj a2VuZC9jb21tYW5kcy9jcmVhdGVhcy5jCkBAIC01OCw5ICs1OCw3IEBAIHR5cGVkZWYgc3RydWN0 CiAJLyogVGhlc2UgZmllbGRzIGFyZSBmaWxsZWQgYnkgaW50b3JlbF9zdGFydHVwOiAqLwogCVJl bGF0aW9uCXJlbDsJCQkvKiByZWxhdGlvbiB0byB3cml0ZSB0byAqLwogCU9iamVjdEFkZHJlc3Mg cmVsYWRkcjsJCS8qIGFkZHJlc3Mgb2YgcmVsLCBmb3IgRXhlY0NyZWF0ZVRhYmxlQXMgKi8KLQlD b21tYW5kSWQJb3V0cHV0X2NpZDsJCS8qIGNtaW4gdG8gaW5zZXJ0IGluIG91dHB1dCB0dXBsZXMg Ki8KLQlpbnQJCQl0aV9vcHRpb25zOwkJLyogdGFibGVfdHVwbGVfaW5zZXJ0IHBlcmZvcm1hbmNl IG9wdGlvbnMgKi8KLQlCdWxrSW5zZXJ0U3RhdGUgYmlzdGF0ZTsJLyogYnVsayBpbnNlcnQgc3Rh dGUgKi8KKwlUYWJsZUluc2VydFN0YXRlICp0aV9zdGF0ZTsgLyogdGFibGUgaW5zZXJ0IHN0YXRl ICovCiB9IERSX2ludG9yZWw7CiAKIC8qIHV0aWxpdHkgZnVuY3Rpb25zIGZvciBDVEFTIGRlZmlu aXRpb24gY3JlYXRpb24gKi8KQEAgLTU1NywxNyArNTU1LDE5IEBAIGludG9yZWxfc3RhcnR1cChE ZXN0UmVjZWl2ZXIgKnNlbGYsIGludCBvcGVyYXRpb24sIFR1cGxlRGVzYyB0eXBlaW5mbykKIAkg Ki8KIAlteVN0YXRlLT5yZWwgPSBpbnRvUmVsYXRpb25EZXNjOwogCW15U3RhdGUtPnJlbGFkZHIg PSBpbnRvUmVsYXRpb25BZGRyOwotCW15U3RhdGUtPm91dHB1dF9jaWQgPSBHZXRDdXJyZW50Q29t bWFuZElkKHRydWUpOwotCW15U3RhdGUtPnRpX29wdGlvbnMgPSBUQUJMRV9JTlNFUlRfU0tJUF9G U007CiAKIAkvKgogCSAqIElmIFdJVEggTk8gREFUQSBpcyBzcGVjaWZpZWQsIHRoZXJlIGlzIG5v IG5lZWQgdG8gc2V0IHVwIHRoZSBzdGF0ZSBmb3IKIAkgKiBidWxrIGluc2VydHMgYXMgdGhlcmUg YXJlIG5vIHR1cGxlcyB0byBpbnNlcnQuCiAJICovCiAJaWYgKCFpbnRvLT5za2lwRGF0YSkKLQkJ bXlTdGF0ZS0+YmlzdGF0ZSA9IEdldEJ1bGtJbnNlcnRTdGF0ZSgpOworCQlteVN0YXRlLT50aV9z dGF0ZSA9IHRhYmxlX2luc2VydF9iZWdpbihpbnRvUmVsYXRpb25EZXNjLAorCQkJCQkJCQkJCQkg ICBHZXRDdXJyZW50Q29tbWFuZElkKHRydWUpLAorCQkJCQkJCQkJCQkgICBUQUJMRUFNX01VTFRJ X0lOU0VSVFMgfAorCQkJCQkJCQkJCQkgICBUQUJMRUFNX0JVTEtXUklURV9CVUZGRVJfQUNDRVNT X1NUUkFURUdZLAorCQkJCQkJCQkJCQkgICBUQUJMRV9JTlNFUlRfU0tJUF9GU00pOwogCWVsc2UK LQkJbXlTdGF0ZS0+YmlzdGF0ZSA9IE5VTEw7CisJCW15U3RhdGUtPnRpX3N0YXRlID0gTlVMTDsK IAogCS8qCiAJICogVmFsaWQgc21ncl90YXJnYmxvY2sgaW1wbGllcyBzb21ldGhpbmcgYWxyZWFk eSB3cm90ZSB0byB0aGUgcmVsYXRpb24uCkBAIC01OTUsMTEgKzU5NSw3IEBAIGludG9yZWxfcmVj ZWl2ZShUdXBsZVRhYmxlU2xvdCAqc2xvdCwgRGVzdFJlY2VpdmVyICpzZWxmKQogCQkgKiB3b3Vs ZCBub3QgYmUgY2hlYXAgZWl0aGVyLiBUaGlzIGFsc28gZG9lc24ndCBhbGxvdyBhY2Nlc3Npbmcg cGVyLUFNCiAJCSAqIGRhdGEgKHNheSBhIHR1cGxlJ3MgeG1pbiksIGJ1dCBzaW5jZSB3ZSBkb24n dCBkbyB0aGF0IGhlcmUuLi4KIAkJICovCi0JCXRhYmxlX3R1cGxlX2luc2VydChteVN0YXRlLT5y ZWwsCi0JCQkJCQkgICBzbG90LAotCQkJCQkJICAgbXlTdGF0ZS0+b3V0cHV0X2NpZCwKLQkJCQkJ CSAgIG15U3RhdGUtPnRpX29wdGlvbnMsCi0JCQkJCQkgICBteVN0YXRlLT5iaXN0YXRlKTsKKwkJ dGFibGVfbXVsdGlfaW5zZXJ0X3YyKG15U3RhdGUtPnRpX3N0YXRlLCBzbG90KTsKIAl9CiAKIAkv KiBXZSBrbm93IHRoaXMgaXMgYSBuZXdseSBjcmVhdGVkIHJlbGF0aW9uLCBzbyB0aGVyZSBhcmUg bm8gaW5kZXhlcyAqLwpAQCAtNjE3LDEwICs2MTMsNyBAQCBpbnRvcmVsX3NodXRkb3duKERlc3RS ZWNlaXZlciAqc2VsZikKIAlJbnRvQ2xhdXNlICppbnRvID0gbXlTdGF0ZS0+aW50bzsKIAogCWlm ICghaW50by0+c2tpcERhdGEpCi0JewotCQlGcmVlQnVsa0luc2VydFN0YXRlKG15U3RhdGUtPmJp c3RhdGUpOwotCQl0YWJsZV9maW5pc2hfYnVsa19pbnNlcnQobXlTdGF0ZS0+cmVsLCBteVN0YXRl LT50aV9vcHRpb25zKTsKLQl9CisJCXRhYmxlX2luc2VydF9lbmQobXlTdGF0ZS0+dGlfc3RhdGUp OwogCiAJLyogY2xvc2UgcmVsLCBidXQga2VlcCBsb2NrIHVudGlsIGNvbW1pdCAqLwogCXRhYmxl X2Nsb3NlKG15U3RhdGUtPnJlbCwgTm9Mb2NrKTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jl c3MvZXhwZWN0ZWQvYWdncmVnYXRlcy5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2Fn Z3JlZ2F0ZXMub3V0CmluZGV4IDdhNzNjMTkzMTQuLjI4ODlmZDMxNWQgMTAwNjQ0Ci0tLSBhL3Ny Yy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvYWdncmVnYXRlcy5vdXQKKysrIGIvc3JjL3Rlc3QvcmVn cmVzcy9leHBlY3RlZC9hZ2dyZWdhdGVzLm91dApAQCAtMjczNCw3ICsyNzM0LDcgQEAgQ1JFQVRF IFRBQkxFIGJ0ZyBBUyBTRUxFQ1QKICAgaSAlIDEwMCBBUyB5LAogICAnYWJjJyB8fCBpICUgMTAg QVMgeiwKICAgaSBBUyB3Ci1GUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDAwKSBBUyBpOworRlJP TSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwMDApIEFTIGk7CiBDUkVBVEUgSU5ERVggYnRnX3hfeV9p ZHggT04gYnRnKHgseSk7CiBBTkFMWVpFIGJ0ZzsKIC0tIEdST1VQIEJZIG9wdGltaXphdGlvbiBi eSByZW9yZGVyIGNvbHVtbnMgYnkgZnJlcXVlbmN5CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdy ZXNzL3NxbC9hZ2dyZWdhdGVzLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2FnZ3JlZ2F0ZXMu c3FsCmluZGV4IDkxNmRiZjkwOGYuLjk5Zjg5MGJiODUgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3Jl Z3Jlc3Mvc3FsL2FnZ3JlZ2F0ZXMuc3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2FnZ3Jl Z2F0ZXMuc3FsCkBAIC0xMTg3LDcgKzExODcsNyBAQCBDUkVBVEUgVEFCTEUgYnRnIEFTIFNFTEVD VAogICBpICUgMTAwIEFTIHksCiAgICdhYmMnIHx8IGkgJSAxMCBBUyB6LAogICBpIEFTIHcKLUZS T00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMDApIEFTIGk7CitGUk9NIGdlbmVyYXRlX3Nlcmllcygx LDEwMDAwMCkgQVMgaTsKIENSRUFURSBJTkRFWCBidGdfeF95X2lkeCBPTiBidGcoeCx5KTsKIEFO QUxZWkUgYnRnOwogCi0tIAoyLjM0LjEKCg== --0000000000008d2b29061010943f Content-Type: application/x-patch; name="v9-0004-Use-new-multi-insert-TAM-for-COPY-FROM.patch" Content-Disposition: attachment; filename="v9-0004-Use-new-multi-insert-TAM-for-COPY-FROM.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lryjeyvg3 RnJvbSA1MzhjNTE1NjE3YTMyMDAwN2Q4Yjc2ZmI0OGVmZDc1MjQyNjQxNDI4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBCaGFyYXRoIFJ1cGlyZWRkeSA8YmhhcmF0aC5ydXBpcmVkZHlm b3Jwb3N0Z3Jlc0BnbWFpbC5jb20+CkRhdGU6IE1vbiwgMjkgSmFuIDIwMjQgMDU6NTk6MTIgKzAw MDAKU3ViamVjdDogW1BBVENIIHY5IDQvNF0gVXNlIG5ldyBtdWx0aSBpbnNlcnQgVEFNIGZvciBD T1BZIEZST00KCi0tLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weWZyb20uYyB8IDkyICsrKysr KysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDUwIGluc2VydGlv bnMoKyksIDQyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRz L2NvcHlmcm9tLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5ZnJvbS5jCmluZGV4IDFmZTcw YjkxMzMuLjhhYmYzM2FhOTcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHlm cm9tLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weWZyb20uYwpAQCAtNzcsMTAgKzc3 LDkgQEAKIC8qIFN0b3JlcyBtdWx0aS1pbnNlcnQgZGF0YSByZWxhdGVkIHRvIGEgc2luZ2xlIHJl bGF0aW9uIGluIENvcHlGcm9tLiAqLwogdHlwZWRlZiBzdHJ1Y3QgQ29weU11bHRpSW5zZXJ0QnVm ZmVyCiB7Ci0JVHVwbGVUYWJsZVNsb3QgKnNsb3RzW01BWF9CVUZGRVJFRF9UVVBMRVNdOyAvKiBB cnJheSB0byBzdG9yZSB0dXBsZXMgKi8KKwlUYWJsZUluc2VydFN0YXRlICp0aV9zdGF0ZTsgLyog VGFibGUgaW5zZXJ0IHN0YXRlOyBOVUxMIGlmIGZvcmVpZ24gdGFibGUgKi8KKwlUdXBsZVRhYmxl U2xvdCAqKnNsb3RzOwkJLyogQXJyYXkgdG8gc3RvcmUgdHVwbGVzICovCiAJUmVzdWx0UmVsSW5m byAqcmVzdWx0UmVsSW5mbzsJLyogUmVzdWx0UmVsSW5mbyBmb3IgJ3JlbGlkJyAqLwotCUJ1bGtJ bnNlcnRTdGF0ZSBiaXN0YXRlOwkvKiBCdWxrSW5zZXJ0U3RhdGUgZm9yIHRoaXMgcmVsIGlmIHBs YWluCi0JCQkJCQkJCSAqIHRhYmxlOyBOVUxMIGlmIGZvcmVpZ24gdGFibGUgKi8KIAlpbnQJCQlu dXNlZDsJCQkvKiBudW1iZXIgb2YgJ3Nsb3RzJyBjb250YWluaW5nIHR1cGxlcyAqLwogCXVpbnQ2 NAkJbGluZW5vc1tNQVhfQlVGRkVSRURfVFVQTEVTXTsJLyogTGluZSAjIG9mIHR1cGxlIGluIGNv cHkKIAkJCQkJCQkJCQkJCSAqIHN0cmVhbSAqLwpAQCAtMjIzLDE0ICsyMjIsMzEgQEAgbGltaXRf cHJpbnRvdXRfbGVuZ3RoKGNvbnN0IGNoYXIgKnN0cikKICAqIFJlc3VsdFJlbEluZm8uCiAgKi8K IHN0YXRpYyBDb3B5TXVsdGlJbnNlcnRCdWZmZXIgKgotQ29weU11bHRpSW5zZXJ0QnVmZmVySW5p dChSZXN1bHRSZWxJbmZvICpycmkpCitDb3B5TXVsdGlJbnNlcnRCdWZmZXJJbml0KENvcHlNdWx0 aUluc2VydEluZm8gKm1paW5mbywgUmVzdWx0UmVsSW5mbyAqcnJpKQogewogCUNvcHlNdWx0aUlu c2VydEJ1ZmZlciAqYnVmZmVyOwogCiAJYnVmZmVyID0gKENvcHlNdWx0aUluc2VydEJ1ZmZlciAq KSBwYWxsb2Moc2l6ZW9mKENvcHlNdWx0aUluc2VydEJ1ZmZlcikpOwotCW1lbXNldChidWZmZXIt PnNsb3RzLCAwLCBzaXplb2YoVHVwbGVUYWJsZVNsb3QgKikgKiBNQVhfQlVGRkVSRURfVFVQTEVT KTsKKworCWlmIChycmktPnJpX0Zkd1JvdXRpbmUgPT0gTlVMTCkKKwl7CisJCWludAkJCW51bV9z bG90czsKKworCQlidWZmZXItPnRpX3N0YXRlID0gdGFibGVfaW5zZXJ0X2JlZ2luKHJyaS0+cmlf UmVsYXRpb25EZXNjLAorCQkJCQkJCQkJCQkgIG1paW5mby0+bXljaWQsCisJCQkJCQkJCQkJCSAg VEFCTEVBTV9NVUxUSV9JTlNFUlRTIHwKKwkJCQkJCQkJCQkJICBUQUJMRUFNX0JVTEtXUklURV9C VUZGRVJfQUNDRVNTX1NUUkFURUdZIHwKKwkJCQkJCQkJCQkJICBUQUJMRUFNX1NLSVBfTVVMVElf SU5TRVJUU19GTFVTSCwKKwkJCQkJCQkJCQkJICBtaWluZm8tPnRpX29wdGlvbnMpOworCQlidWZm ZXItPnNsb3RzID0gdGFibGVfbXVsdGlfaW5zZXJ0X3Nsb3RzKGJ1ZmZlci0+dGlfc3RhdGUsICZu dW1fc2xvdHMpOworCX0KKwllbHNlCisJeworCQlidWZmZXItPnNsb3RzID0gcGFsbG9jMChzaXpl b2YoVHVwbGVUYWJsZVNsb3QgKikgKiBNQVhfQlVGRkVSRURfVFVQTEVTKTsKKwkJYnVmZmVyLT50 aV9zdGF0ZSA9IE5VTEw7CisJfQorCiAJYnVmZmVyLT5yZXN1bHRSZWxJbmZvID0gcnJpOwotCWJ1 ZmZlci0+YmlzdGF0ZSA9IChycmktPnJpX0Zkd1JvdXRpbmUgPT0gTlVMTCkgPyBHZXRCdWxrSW5z ZXJ0U3RhdGUoKSA6IE5VTEw7CiAJYnVmZmVyLT5udXNlZCA9IDA7CiAKIAlyZXR1cm4gYnVmZmVy OwpAQCAtMjQ1LDcgKzI2MSw3IEBAIENvcHlNdWx0aUluc2VydEluZm9TZXR1cEJ1ZmZlcihDb3B5 TXVsdGlJbnNlcnRJbmZvICptaWluZm8sCiB7CiAJQ29weU11bHRpSW5zZXJ0QnVmZmVyICpidWZm ZXI7CiAKLQlidWZmZXIgPSBDb3B5TXVsdGlJbnNlcnRCdWZmZXJJbml0KHJyaSk7CisJYnVmZmVy ID0gQ29weU11bHRpSW5zZXJ0QnVmZmVySW5pdChtaWluZm8sIHJyaSk7CiAKIAkvKiBTZXR1cCBi YWNrLWxpbmsgc28gd2UgY2FuIGVhc2lseSBmaW5kIHRoaXMgYnVmZmVyIGFnYWluICovCiAJcnJp LT5yaV9Db3B5TXVsdGlJbnNlcnRCdWZmZXIgPSBidWZmZXI7CkBAIC0zMjIsOCArMzM4LDYgQEAg Q29weU11bHRpSW5zZXJ0QnVmZmVyRmx1c2goQ29weU11bHRpSW5zZXJ0SW5mbyAqbWlpbmZvLAog CQlpbnQJCQliYXRjaF9zaXplID0gcmVzdWx0UmVsSW5mby0+cmlfQmF0Y2hTaXplOwogCQlpbnQJ CQlzZW50ID0gMDsKIAotCQlBc3NlcnQoYnVmZmVyLT5iaXN0YXRlID09IE5VTEwpOwotCiAJCS8q IEVuc3VyZSB0aGF0IHRoZSBGRFcgc3VwcG9ydHMgYmF0Y2hpbmcgYW5kIGl0J3MgZW5hYmxlZCAq LwogCQlBc3NlcnQocmVzdWx0UmVsSW5mby0+cmlfRmR3Um91dGluZS0+RXhlY0ZvcmVpZ25CYXRj aEluc2VydCk7CiAJCUFzc2VydChiYXRjaF9zaXplID4gMSk7CkBAIC0zOTUsMTMgKzQwOSw4IEBA IENvcHlNdWx0aUluc2VydEJ1ZmZlckZsdXNoKENvcHlNdWx0aUluc2VydEluZm8gKm1paW5mbywK IAl9CiAJZWxzZQogCXsKLQkJQ29tbWFuZElkCW15Y2lkID0gbWlpbmZvLT5teWNpZDsKLQkJaW50 CQkJdGlfb3B0aW9ucyA9IG1paW5mby0+dGlfb3B0aW9uczsKIAkJYm9vbAkJbGluZV9idWZfdmFs aWQgPSBjc3RhdGUtPmxpbmVfYnVmX3ZhbGlkOwogCQl1aW50NjQJCXNhdmVfY3VyX2xpbmVubyA9 IGNzdGF0ZS0+Y3VyX2xpbmVubzsKLQkJTWVtb3J5Q29udGV4dCBvbGRjb250ZXh0OwotCi0JCUFz c2VydChidWZmZXItPmJpc3RhdGUgIT0gTlVMTCk7CiAKIAkJLyoKIAkJICogUHJpbnQgZXJyb3Ig Y29udGV4dCBpbmZvcm1hdGlvbiBjb3JyZWN0bHksIGlmIG9uZSBvZiB0aGUgb3BlcmF0aW9ucwpA QCAtNDA5LDE4ICs0MTgsNyBAQCBDb3B5TXVsdGlJbnNlcnRCdWZmZXJGbHVzaChDb3B5TXVsdGlJ bnNlcnRJbmZvICptaWluZm8sCiAJCSAqLwogCQljc3RhdGUtPmxpbmVfYnVmX3ZhbGlkID0gZmFs c2U7CiAKLQkJLyoKLQkJICogdGFibGVfbXVsdGlfaW5zZXJ0IG1heSBsZWFrIG1lbW9yeSwgc28g c3dpdGNoIHRvIHNob3J0LWxpdmVkIG1lbW9yeQotCQkgKiBjb250ZXh0IGJlZm9yZSBjYWxsaW5n IGl0LgotCQkgKi8KLQkJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhHZXRQZXJU dXBsZU1lbW9yeUNvbnRleHQoZXN0YXRlKSk7Ci0JCXRhYmxlX211bHRpX2luc2VydChyZXN1bHRS ZWxJbmZvLT5yaV9SZWxhdGlvbkRlc2MsCi0JCQkJCQkgICBzbG90cywKLQkJCQkJCSAgIG51c2Vk LAotCQkJCQkJICAgbXljaWQsCi0JCQkJCQkgICB0aV9vcHRpb25zLAotCQkJCQkJICAgYnVmZmVy LT5iaXN0YXRlKTsKLQkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRleHQpOworCQl0YWJs ZV9tdWx0aV9pbnNlcnRfZmx1c2goYnVmZmVyLT50aV9zdGF0ZSk7CiAKIAkJZm9yIChpID0gMDsg aSA8IG51c2VkOyBpKyspCiAJCXsKQEAgLTQzNSw3ICs0MzMsNyBAQCBDb3B5TXVsdGlJbnNlcnRC dWZmZXJGbHVzaChDb3B5TXVsdGlJbnNlcnRJbmZvICptaWluZm8sCiAJCQkJY3N0YXRlLT5jdXJf bGluZW5vID0gYnVmZmVyLT5saW5lbm9zW2ldOwogCQkJCXJlY2hlY2tJbmRleGVzID0KIAkJCQkJ RXhlY0luc2VydEluZGV4VHVwbGVzKHJlc3VsdFJlbEluZm8sCi0JCQkJCQkJCQkJICBidWZmZXIt PnNsb3RzW2ldLCBlc3RhdGUsIGZhbHNlLAorCQkJCQkJCQkJCSAgc2xvdHNbaV0sIGVzdGF0ZSwg ZmFsc2UsCiAJCQkJCQkJCQkJICBmYWxzZSwgTlVMTCwgTklMLCBmYWxzZSk7CiAJCQkJRXhlY0FS SW5zZXJ0VHJpZ2dlcnMoZXN0YXRlLCByZXN1bHRSZWxJbmZvLAogCQkJCQkJCQkJIHNsb3RzW2ld LCByZWNoZWNrSW5kZXhlcywKQEAgLTQ5MywyMCArNDkxLDE1IEBAIENvcHlNdWx0aUluc2VydEJ1 ZmZlckNsZWFudXAoQ29weU11bHRpSW5zZXJ0SW5mbyAqbWlpbmZvLAogCXJlc3VsdFJlbEluZm8t PnJpX0NvcHlNdWx0aUluc2VydEJ1ZmZlciA9IE5VTEw7CiAKIAlpZiAocmVzdWx0UmVsSW5mby0+ cmlfRmR3Um91dGluZSA9PSBOVUxMKQotCXsKLQkJQXNzZXJ0KGJ1ZmZlci0+YmlzdGF0ZSAhPSBO VUxMKTsKLQkJRnJlZUJ1bGtJbnNlcnRTdGF0ZShidWZmZXItPmJpc3RhdGUpOwotCX0KKwkJdGFi bGVfaW5zZXJ0X2VuZChidWZmZXItPnRpX3N0YXRlKTsKIAllbHNlCi0JCUFzc2VydChidWZmZXIt PmJpc3RhdGUgPT0gTlVMTCk7Ci0KLQkvKiBTaW5jZSB3ZSBvbmx5IGNyZWF0ZSBzbG90cyBvbiBk ZW1hbmQsIGp1c3QgZHJvcCB0aGUgbm9uLW51bGwgb25lcy4gKi8KLQlmb3IgKGkgPSAwOyBpIDwg TUFYX0JVRkZFUkVEX1RVUExFUyAmJiBidWZmZXItPnNsb3RzW2ldICE9IE5VTEw7IGkrKykKLQkJ RXhlY0Ryb3BTaW5nbGVUdXBsZVRhYmxlU2xvdChidWZmZXItPnNsb3RzW2ldKTsKKwl7CisJCS8q IFNpbmNlIHdlIG9ubHkgY3JlYXRlIHNsb3RzIG9uIGRlbWFuZCwganVzdCBkcm9wIHRoZSBub24t bnVsbCBvbmVzLiAqLworCQlmb3IgKGkgPSAwOyBpIDwgTUFYX0JVRkZFUkVEX1RVUExFUyAmJiBi dWZmZXItPnNsb3RzW2ldICE9IE5VTEw7IGkrKykKKwkJCUV4ZWNEcm9wU2luZ2xlVHVwbGVUYWJs ZVNsb3QoYnVmZmVyLT5zbG90c1tpXSk7CiAKLQlpZiAocmVzdWx0UmVsSW5mby0+cmlfRmR3Um91 dGluZSA9PSBOVUxMKQotCQl0YWJsZV9maW5pc2hfYnVsa19pbnNlcnQocmVzdWx0UmVsSW5mby0+ cmlfUmVsYXRpb25EZXNjLAotCQkJCQkJCQkgbWlpbmZvLT50aV9vcHRpb25zKTsKKwkJcGZyZWUo YnVmZmVyLT5zbG90cyk7CisJfQogCiAJcGZyZWUoYnVmZmVyKTsKIH0KQEAgLTU5MywxMyArNTg2 LDI1IEBAIENvcHlNdWx0aUluc2VydEluZm9OZXh0RnJlZVNsb3QoQ29weU11bHRpSW5zZXJ0SW5m byAqbWlpbmZvLAogewogCUNvcHlNdWx0aUluc2VydEJ1ZmZlciAqYnVmZmVyID0gcnJpLT5yaV9D b3B5TXVsdGlJbnNlcnRCdWZmZXI7CiAJaW50CQkJbnVzZWQgPSBidWZmZXItPm51c2VkOworCVR1 cGxlVGFibGVTbG90ICpzbG90OwogCiAJQXNzZXJ0KGJ1ZmZlciAhPSBOVUxMKTsKIAlBc3NlcnQo bnVzZWQgPCBNQVhfQlVGRkVSRURfVFVQTEVTKTsKIAotCWlmIChidWZmZXItPnNsb3RzW251c2Vk XSA9PSBOVUxMKQotCQlidWZmZXItPnNsb3RzW251c2VkXSA9IHRhYmxlX3Nsb3RfY3JlYXRlKHJy aS0+cmlfUmVsYXRpb25EZXNjLCBOVUxMKTsKLQlyZXR1cm4gYnVmZmVyLT5zbG90c1tudXNlZF07 CisJaWYgKHJyaS0+cmlfRmR3Um91dGluZSA9PSBOVUxMKQorCQlzbG90ID0gdGFibGVfbXVsdGlf aW5zZXJ0X25leHRfZnJlZV9zbG90KGJ1ZmZlci0+dGlfc3RhdGUpOworCWVsc2UKKwl7CisJCWlm IChidWZmZXItPnNsb3RzW251c2VkXSA9PSBOVUxMKQorCQl7CisJCQlzbG90ID0gdGFibGVfc2xv dF9jcmVhdGUocnJpLT5yaV9SZWxhdGlvbkRlc2MsIE5VTEwpOworCQkJYnVmZmVyLT5zbG90c1tu dXNlZF0gPSBzbG90OworCQl9CisJCWVsc2UKKwkJCXNsb3QgPSBidWZmZXItPnNsb3RzW251c2Vk XTsKKwl9CisKKwlyZXR1cm4gc2xvdDsKIH0KIAogLyoKQEAgLTYxNSw2ICs2MjAsOSBAQCBDb3B5 TXVsdGlJbnNlcnRJbmZvU3RvcmUoQ29weU11bHRpSW5zZXJ0SW5mbyAqbWlpbmZvLCBSZXN1bHRS ZWxJbmZvICpycmksCiAJQXNzZXJ0KGJ1ZmZlciAhPSBOVUxMKTsKIAlBc3NlcnQoc2xvdCA9PSBi dWZmZXItPnNsb3RzW2J1ZmZlci0+bnVzZWRdKTsKIAorCWlmIChycmktPnJpX0Zkd1JvdXRpbmUg PT0gTlVMTCkKKwkJdGFibGVfbXVsdGlfaW5zZXJ0X3YyKGJ1ZmZlci0+dGlfc3RhdGUsIHNsb3Qp OworCiAJLyogU3RvcmUgdGhlIGxpbmUgbnVtYmVyIHNvIHdlIGNhbiBwcm9wZXJseSByZXBvcnQg YW55IGVycm9ycyBsYXRlciAqLwogCWJ1ZmZlci0+bGluZW5vc1tidWZmZXItPm51c2VkXSA9IGxp bmVubzsKIAotLSAKMi4zNC4xCgo= --0000000000008d2b29061010943f--