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 1s7933-003vUQ-0w for pgsql-hackers@arkaria.postgresql.org; Wed, 15 May 2024 07:27:38 +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 1s7923-00B6po-CE for pgsql-hackers@arkaria.postgresql.org; Wed, 15 May 2024 07:26:35 +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.94.2) (envelope-from ) id 1s7922-00B6pg-Pu for pgsql-hackers@lists.postgresql.org; Wed, 15 May 2024 07:26:35 +0000 Received: from mail-lj1-x22e.google.com ([2a00:1450:4864:20::22e]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1s791y-000KLm-H3 for pgsql-hackers@postgresql.org; Wed, 15 May 2024 07:26:34 +0000 Received: by mail-lj1-x22e.google.com with SMTP id 38308e7fff4ca-2e0a34b2899so97137271fa.3 for ; Wed, 15 May 2024 00:26:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1715757990; x=1716362790; 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=5Tgl+TwQ3De3WnU1U7HXvIY80CAMtVyBqbHdgcZO42M=; b=hF/dRNIZtWu9e5S3agBtj5qIlaqmbpYmbI2KiMrAJ7U6Se/qAuA78HLSKqgPt1/pF2 PtK0lWiAyMDMqTHDVj6/KBOF0n2LPtX8O43IQ6wRKF/R+52qFBZC9ucN16RYS5Roxplu ctE7nLQB5DPAlFYrTMt2UL5HC0Z5a4DaclE7k7GyFmcYwYzUVxzpSpHqBCfysk62VkUG VlhHU+kkOxWHWsGrqk6nRHhCXU00Wx4hJjCcjBOzYEDPfcVRI0D/0qtgGuussGu8JQ+c c0mfb7pDCAThXql+LrB1C2U7gRLISyxWQYpC9nt/TCrxMIj1vLvZXdYUTq2EebdqcEYS MUNA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1715757990; x=1716362790; 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=5Tgl+TwQ3De3WnU1U7HXvIY80CAMtVyBqbHdgcZO42M=; b=R4e4OOaTdtE6JUIAw/dsJupsrPH8rZevfFqxgAz96HYqhjYzZSyjLAVTQnQ86IzjDT eylkPpZE0s+45Jai/SRCdL5q4bLGFRW0WM/4SE9IUEqdz9oDPSutDAS7vjfn+4abBbtw 537BcTJobn9D4JpbdyhdO52zQ1kfontaCtoE1D3/TxBNpvGXi7zM63QMB3Sc1xd0fn87 G16qC92UgMHDrt3JXA/X6ynDgxeJR/01kajCSTkevF3HaEkzK7/q6dOQ4k9EqLJFesQE ib71KDr2K69EmqwVf3eW1j7TrUNrv+UOz7hu5IAyNKWwwaHbKYntdYyFtMmAiwLcqUIl cjSw== X-Forwarded-Encrypted: i=1; AJvYcCXEOoWkCv2qCGyBqBvhy3PxgcEqDfKFtgSC3JIJS/Tf3TyErrcPriTb7Vy3iNwrGOXZMtb3yHu8TAULYqPdlOXeFhINV2GYQu28NWsZ X-Gm-Message-State: AOJu0YyhMXHee7o0VkAC1p9vk0wkO0jE8ShdQqS+r5kcDG7CFgSypX9l cFXsypqCbzkCh+tyEQ7UYw9G0k83zgPSv3idcx34pwcc1V0k0PDKcx+ttw5QuqGlalgTz2CPfzP FlNQINtlXekKHIjehcz2INFehhWg= X-Google-Smtp-Source: AGHT+IHzKC4pQbugMFK8uHG+Vco5dABuGdHLXL8jmnN2VSU2+DcHNQO1x8c5UL/94C0B1giZMCCqBzgLjHMHKjBnoEM= X-Received: by 2002:a2e:859:0:b0:2e5:4171:1808 with SMTP id 38308e7fff4ca-2e541711898mr111937031fa.51.1715757990070; Wed, 15 May 2024 00:26:30 -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: From: Bharath Rupireddy Date: Wed, 15 May 2024 12:56:17 +0530 Message-ID: Subject: Re: Introduce new multi insert Table AM and improve performance of various SQL commands with it for Heap AM 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="00000000000084f79d06187909b6" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000084f79d06187909b6 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Mon, Apr 29, 2024 at 11:36=E2=80=AFAM Bharath Rupireddy wrote: > > Please see the attached v20 patch set. It looks like with the use of the new multi insert table access method (TAM) for COPY (v20-0005), pgbench regressed about 35% [1]. The reason is that the memory-based flushing decision the new TAM takes [2] differs from that of what the COPY does today with table_multi_insert. The COPY with table_multi_insert, maintains exact size of the tuples in CopyFromState after it does the line parsing. For instance, the tuple size of a table with two integer columns is 8 (4+4) bytes here. The new TAM relies on the memory occupied by the slot's memory context which holds the actual tuple as a good approximation for the tuple size. But, this memory context size also includes a tuple header, so the size here is not just 8 (4+4) bytes but more. Because of this, the buffers get flushed sooner than that of the existing COPY with table_multi_insert AM causing regression in pgbench which uses COPY extensively. The new TAM aren't designed to be able to receive tuple sizes from the callers, even if we do that, the API doesn't look generic. Here are couple of ideas to get away with this: 1. Try to get the actual tuple sizes excluding header sizes for each column in the new TAM. 2. Try not to use the new TAM for COPY in which case the table_multi_insert stays forever. 3. Try passing a flag to tell the new TAM that the caller does the flushing and no need for an internal flushing. I haven't explored the idea (1) in depth yet. If we find a way to do so, it looks to me that we are going backwards since we need to strip off headers for each column of a row for all of the rows. I suspect this would cost a bit more and may not solve the regression. With an eventual goal to get rid of table_multi_insert, (3) may not be a better choice. (3) seems reasonable to implement and reduce the regression. I did so in the attached v21 patches. A new flag TM_SKIP_INTERNAL_BUFFER_FLUSH is introduced in v21 patch, when specified, no internal flushing is done, the caller has to flush the buffered tuples using table_modify_buffer_flush(). Check the test results [3] HEAD 2.948 s, PATCHED 2.946 s. v21 also adds code to maintain tuple size for virtual tuple slots. This helps make better memory-based flushing decisions in the new TAM. Thoughts? [1] HEAD: done in 2.84 s (drop tables 0.00 s, create tables 0.01 s, client-side generate 1.99 s, vacuum 0.21 s, primary keys 0.62 s). done in 2.78 s (drop tables 0.00 s, create tables 0.01 s, client-side generate 1.88 s, vacuum 0.21 s, primary keys 0.69 s). done in 2.97 s (drop tables 0.00 s, create tables 0.01 s, client-side generate 2.07 s, vacuum 0.21 s, primary keys 0.69 s). done in 2.86 s (drop tables 0.00 s, create tables 0.01 s, client-side generate 1.96 s, vacuum 0.21 s, primary keys 0.69 s). done in 2.90 s (drop tables 0.00 s, create tables 0.01 s, client-side generate 2.05 s, vacuum 0.21 s, primary keys 0.64 s). done in 2.83 s (drop tables 0.00 s, create tables 0.01 s, client-side generate 1.96 s, vacuum 0.21 s, primary keys 0.66 s). done in 2.80 s (drop tables 0.00 s, create tables 0.01 s, client-side generate 1.95 s, vacuum 0.20 s, primary keys 0.63 s). done in 2.79 s (drop tables 0.00 s, create tables 0.01 s, client-side generate 1.89 s, vacuum 0.21 s, primary keys 0.69 s). done in 3.75 s (drop tables 0.00 s, create tables 0.01 s, client-side generate 2.17 s, vacuum 0.32 s, primary keys 1.25 s). done in 3.86 s (drop tables 0.00 s, create tables 0.08 s, client-side generate 2.97 s, vacuum 0.21 s, primary keys 0.59 s). AVG done in 2.948 s v20 PATCHED: done in 3.94 s (drop tables 0.00 s, create tables 0.01 s, client-side generate 3.12 s, vacuum 0.19 s, primary keys 0.62 s). done in 4.04 s (drop tables 0.00 s, create tables 0.01 s, client-side generate 3.22 s, vacuum 0.20 s, primary keys 0.61 s). done in 3.98 s (drop tables 0.00 s, create tables 0.01 s, client-side generate 3.16 s, vacuum 0.20 s, primary keys 0.61 s). done in 4.04 s (drop tables 0.00 s, create tables 0.01 s, client-side generate 3.16 s, vacuum 0.20 s, primary keys 0.67 s). done in 3.98 s (drop tables 0.00 s, create tables 0.01 s, client-side generate 3.16 s, vacuum 0.20 s, primary keys 0.61 s). done in 4.00 s (drop tables 0.00 s, create tables 0.01 s, client-side generate 3.17 s, vacuum 0.20 s, primary keys 0.63 s). done in 4.43 s (drop tables 0.00 s, create tables 0.01 s, client-side generate 3.24 s, vacuum 0.21 s, primary keys 0.98 s). done in 4.16 s (drop tables 0.00 s, create tables 0.01 s, client-side generate 3.36 s, vacuum 0.20 s, primary keys 0.59 s). done in 3.62 s (drop tables 0.00 s, create tables 0.01 s, client-side generate 2.83 s, vacuum 0.20 s, primary keys 0.58 s). done in 3.67 s (drop tables 0.00 s, create tables 0.01 s, client-side generate 2.84 s, vacuum 0.21 s, primary keys 0.61 s). AVG done in 3.986 s [2] + /* + * Memory allocated for the whole tuple is in slot's memory context, s= o + * use it keep track of the total space occupied by all buffered tuple= s. + */ + if (TTS_SHOULDFREE(slot)) + mistate->cur_size +=3D MemoryContextMemAllocated(slot->tts_mcxt, f= alse); + + if (mistate->cur_slots >=3D HEAP_MAX_BUFFERED_SLOTS || + mistate->cur_size >=3D HEAP_MAX_BUFFERED_BYTES) + heap_modify_buffer_flush(state); [3] v21 PATCHED: done in 2.92 s (drop tables 0.00 s, create tables 0.01 s, client-side generate 2.12 s, vacuum 0.21 s, primary keys 0.59 s). done in 2.89 s (drop tables 0.00 s, create tables 0.01 s, client-side generate 2.07 s, vacuum 0.21 s, primary keys 0.61 s). done in 2.89 s (drop tables 0.00 s, create tables 0.01 s, client-side generate 2.05 s, vacuum 0.21 s, primary keys 0.62 s). done in 2.90 s (drop tables 0.00 s, create tables 0.01 s, client-side generate 2.07 s, vacuum 0.21 s, primary keys 0.62 s). done in 2.80 s (drop tables 0.00 s, create tables 0.01 s, client-side generate 2.00 s, vacuum 0.21 s, primary keys 0.59 s). done in 2.84 s (drop tables 0.00 s, create tables 0.01 s, client-side generate 2.04 s, vacuum 0.20 s, primary keys 0.60 s). done in 2.84 s (drop tables 0.00 s, create tables 0.01 s, client-side generate 2.03 s, vacuum 0.20 s, primary keys 0.59 s). done in 2.85 s (drop tables 0.00 s, create tables 0.01 s, client-side generate 2.04 s, vacuum 0.20 s, primary keys 0.60 s). done in 3.48 s (drop tables 0.00 s, create tables 0.01 s, client-side generate 2.44 s, vacuum 0.23 s, primary keys 0.80 s). done in 3.05 s (drop tables 0.00 s, create tables 0.01 s, client-side generate 2.28 s, vacuum 0.21 s, primary keys 0.55 s). AVG done in 2.946 s -- Bharath Rupireddy PostgreSQL Contributors Team RDS Open Source Databases Amazon Web Services: https://aws.amazon.com --00000000000084f79d06187909b6 Content-Type: application/octet-stream; name="v21-0001-Introduce-new-Table-Access-Methods-for-single-an.patch" Content-Disposition: attachment; filename="v21-0001-Introduce-new-Table-Access-Methods-for-single-an.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lw7hllrn0 RnJvbSA1MzY2MTZhYWVkYWI1NjAwODRlNjlhM2MzODlmZDJiYzJlMWQ0ODljIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBCaGFyYXRoIFJ1cGlyZWRkeSA8YmhhcmF0aC5ydXBpcmVkZHlm b3Jwb3N0Z3Jlc0BnbWFpbC5jb20+CkRhdGU6IFdlZCwgMTUgTWF5IDIwMjQgMDU6NDI6MzggKzAw MDAKU3ViamVjdDogW1BBVENIIHYyMSAxLzVdIEludHJvZHVjZSBuZXcgVGFibGUgQWNjZXNzIE1l dGhvZHMgZm9yIHNpbmdsZSBhbmQKIG11bHRpIGluc2VydHMKCi0tLQogc3JjL2JhY2tlbmQvYWNj ZXNzL2hlYXAvaGVhcGFtLmMgICAgICAgICB8IDIwNiArKysrKysrKysrKysrKysrKysrKysrLQog c3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYyB8ICAgNiArCiBzcmMvYmFj a2VuZC9hY2Nlc3MvdGFibGUvdGFibGVhbS5jICAgICAgIHwgIDk3ICsrKysrKysrKysrCiBzcmMv YmFja2VuZC9hY2Nlc3MvdGFibGUvdGFibGVhbWFwaS5jICAgIHwgIDEwICsrCiBzcmMvYmFja2Vu ZC9leGVjdXRvci9leGVjVHVwbGVzLmMgICAgICAgIHwgICA0ICsKIHNyYy9pbmNsdWRlL2FjY2Vz cy9oZWFwYW0uaCAgICAgICAgICAgICAgfCAgNDQgKysrKysKIHNyYy9pbmNsdWRlL2FjY2Vzcy90 YWJsZWFtLmggICAgICAgICAgICAgfCAxNTEgKysrKysrKysrKysrKysrKysKIHNyYy9pbmNsdWRl L2V4ZWN1dG9yL3R1cHRhYmxlLmggICAgICAgICAgfCAgIDYgKwogc3JjL3Rvb2xzL3BnaW5kZW50 L3R5cGVkZWZzLmxpc3QgICAgICAgICB8ICAgMyArCiA5IGZpbGVzIGNoYW5nZWQsIDUyNiBpbnNl cnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNz L2hlYXAvaGVhcGFtLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW0uYwppbmRleCA0 YmUwZGVlNGRlLi5iMTRiMzM3OWFhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVh cC9oZWFwYW0uYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW0uYwpAQCAtNjQs NiArNjQsNyBAQAogI2luY2x1ZGUgInN0b3JhZ2Uvc3RhbmRieS5oIgogI2luY2x1ZGUgInV0aWxz L2RhdHVtLmgiCiAjaW5jbHVkZSAidXRpbHMvaW52YWwuaCIKKyNpbmNsdWRlICJ1dGlscy9tZW11 dGlscy5oIgogI2luY2x1ZGUgInV0aWxzL3JlbGNhY2hlLmgiCiAjaW5jbHVkZSAidXRpbHMvc25h cG1nci5oIgogI2luY2x1ZGUgInV0aWxzL3NwY2NhY2hlLmgiCkBAIC0xMTIsNyArMTEzLDcgQEAg c3RhdGljIGludAlib3R0b211cF9zb3J0X2FuZF9zaHJpbmsoVE1fSW5kZXhEZWxldGVPcCAqZGVs c3RhdGUpOwogc3RhdGljIFhMb2dSZWNQdHIgbG9nX2hlYXBfbmV3X2NpZChSZWxhdGlvbiByZWxh dGlvbiwgSGVhcFR1cGxlIHR1cCk7CiBzdGF0aWMgSGVhcFR1cGxlIEV4dHJhY3RSZXBsaWNhSWRl bnRpdHkoUmVsYXRpb24gcmVsYXRpb24sIEhlYXBUdXBsZSB0cCwgYm9vbCBrZXlfcmVxdWlyZWQs CiAJCQkJCQkJCQkJYm9vbCAqY29weSk7Ci0KK3N0YXRpYyB2b2lkIGhlYXBfbW9kaWZ5X2luc2Vy dF9lbmRfY2FsbGJhY2soVGFibGVNb2RpZnlTdGF0ZSAqc3RhdGUpOwogCiAvKgogICogRWFjaCB0 dXBsZSBsb2NrIG1vZGUgaGFzIGEgY29ycmVzcG9uZGluZyBoZWF2eXdlaWdodCBsb2NrLCBhbmQg b25lIG9yIHR3bwpAQCAtMjYwOCw2ICsyNjA5LDIwOSBAQCBoZWFwX211bHRpX2luc2VydChSZWxh dGlvbiByZWxhdGlvbiwgVHVwbGVUYWJsZVNsb3QgKipzbG90cywgaW50IG50dXBsZXMsCiAJcGdz dGF0X2NvdW50X2hlYXBfaW5zZXJ0KHJlbGF0aW9uLCBudHVwbGVzKTsKIH0KIAorLyoKKyAqIElu aXRpYWxpemUgaGVhcCBtb2RpZnkgc3RhdGUuCisgKi8KK1RhYmxlTW9kaWZ5U3RhdGUgKgoraGVh cF9tb2RpZnlfYmVnaW4oUmVsYXRpb24gcmVsLCBpbnQgbW9kaWZ5X2ZsYWdzLAorCQkJCSAgQ29t bWFuZElkIGNpZCwgaW50IG9wdGlvbnMsCisJCQkJICBUYWJsZU1vZGlmeUJ1ZmZlckZsdXNoQ2Fs bGJhY2sgbW9kaWZ5X2J1ZmZlcl9mbHVzaF9jYWxsYmFjaywKKwkJCQkgIHZvaWQgKm1vZGlmeV9i dWZmZXJfZmx1c2hfY29udGV4dCkKK3sKKwlUYWJsZU1vZGlmeVN0YXRlICpzdGF0ZTsKKwlNZW1v cnlDb250ZXh0IGNvbnRleHQ7CisJTWVtb3J5Q29udGV4dCBvbGRjb250ZXh0OworCisJY29udGV4 dCA9IEFsbG9jU2V0Q29udGV4dENyZWF0ZShUb3BUcmFuc2FjdGlvbkNvbnRleHQsCisJCQkJCQkJ CQkiaGVhcF9tb2RpZnkgbWVtb3J5IGNvbnRleHQiLAorCQkJCQkJCQkJQUxMT0NTRVRfREVGQVVM VF9TSVpFUyk7CisKKwlvbGRjb250ZXh0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKGNvbnRleHQp OworCXN0YXRlID0gcGFsbG9jMChzaXplb2YoVGFibGVNb2RpZnlTdGF0ZSkpOworCXN0YXRlLT5y ZWwgPSByZWw7CisJc3RhdGUtPm1vZGlmeV9mbGFncyA9IG1vZGlmeV9mbGFnczsKKwlzdGF0ZS0+ bWVtX2N4dCA9IGNvbnRleHQ7CisJc3RhdGUtPmNpZCA9IGNpZDsKKwlzdGF0ZS0+b3B0aW9ucyA9 IG9wdGlvbnM7CisJc3RhdGUtPm1vZGlmeV9idWZmZXJfZmx1c2hfY2FsbGJhY2sgPSBtb2RpZnlf YnVmZmVyX2ZsdXNoX2NhbGxiYWNrOworCXN0YXRlLT5tb2RpZnlfYnVmZmVyX2ZsdXNoX2NvbnRl eHQgPSBtb2RpZnlfYnVmZmVyX2ZsdXNoX2NvbnRleHQ7CisJc3RhdGUtPm1vZGlmeV9lbmRfY2Fs bGJhY2sgPSBOVUxMOwkvKiBUbyBiZSBpbnN0YWxsZWQgbGF6aWx5ICovCisJTWVtb3J5Q29udGV4 dFN3aXRjaFRvKG9sZGNvbnRleHQpOworCisJcmV0dXJuIHN0YXRlOworfQorCisvKgorICogU3Rv cmUgcGFzc2VkLWluIHR1cGxlIGludG8gaW4tbWVtb3J5IGJ1ZmZlcmVkIHNsb3RzLiBXaGVuIGZ1 bGwsIGluc2VydAorICogbXVsdGlwbGUgdHVwbGVzIGZyb20gdGhlIGJ1ZmZlcnMgaW50byBoZWFw LgorICovCit2b2lkCitoZWFwX21vZGlmeV9idWZmZXJfaW5zZXJ0KFRhYmxlTW9kaWZ5U3RhdGUg KnN0YXRlLAorCQkJCQkJICBUdXBsZVRhYmxlU2xvdCAqc2xvdCkKK3sKKwlUdXBsZVRhYmxlU2xv dCAqZHN0c2xvdDsKKwlIZWFwSW5zZXJ0U3RhdGUgKmlzdGF0ZTsKKwlIZWFwTXVsdGlJbnNlcnRT dGF0ZSAqbWlzdGF0ZTsKKwlNZW1vcnlDb250ZXh0IG9sZGNvbnRleHQ7CisKKwlvbGRjb250ZXh0 ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKHN0YXRlLT5tZW1fY3h0KTsKKworCS8qIEZpcnN0IHRp bWUgdGhyb3VnaCwgaW5pdGlhbGl6ZSBoZWFwIGluc2VydCBzdGF0ZSAqLworCWlmIChzdGF0ZS0+ ZGF0YSA9PSBOVUxMKQorCXsKKwkJaXN0YXRlID0gKEhlYXBJbnNlcnRTdGF0ZSAqKSBwYWxsb2Mw KHNpemVvZihIZWFwSW5zZXJ0U3RhdGUpKTsKKwkJaXN0YXRlLT5iaXN0YXRlID0gTlVMTDsKKwkJ aXN0YXRlLT5taXN0YXRlID0gTlVMTDsKKwkJc3RhdGUtPmRhdGEgPSBpc3RhdGU7CisKKwkJaWYg KChzdGF0ZS0+bW9kaWZ5X2ZsYWdzICYgVE1fRkxBR19NVUxUSV9JTlNFUlRTKSAhPSAwKQorCQl7 CisJCQltaXN0YXRlID0gKEhlYXBNdWx0aUluc2VydFN0YXRlICopIHBhbGxvYzAoc2l6ZW9mKEhl YXBNdWx0aUluc2VydFN0YXRlKSk7CisJCQltaXN0YXRlLT5zbG90cyA9IChUdXBsZVRhYmxlU2xv dCAqKikgcGFsbG9jMChzaXplb2YoVHVwbGVUYWJsZVNsb3QgKikgKiBIRUFQX01BWF9CVUZGRVJF RF9TTE9UUyk7CisJCQlpc3RhdGUtPm1pc3RhdGUgPSBtaXN0YXRlOworCQkJbWlzdGF0ZS0+bWVt X2N4dCA9IEFsbG9jU2V0Q29udGV4dENyZWF0ZShDdXJyZW50TWVtb3J5Q29udGV4dCwKKwkJCQkJ CQkJCQkJCQkgImhlYXBfbXVsdGlfaW5zZXJ0IG1lbW9yeSBjb250ZXh0IiwKKwkJCQkJCQkJCQkJ CQkgQUxMT0NTRVRfREVGQVVMVF9TSVpFUyk7CisJCX0KKworCQlpZiAoKHN0YXRlLT5tb2RpZnlf ZmxhZ3MgJiBUTV9GTEFHX0JBU19CVUxLV1JJVEUpICE9IDApCisJCQlpc3RhdGUtPmJpc3RhdGUg PSBHZXRCdWxrSW5zZXJ0U3RhdGUoKTsKKworCQlzdGF0ZS0+bW9kaWZ5X2VuZF9jYWxsYmFjayA9 IGhlYXBfbW9kaWZ5X2luc2VydF9lbmRfY2FsbGJhY2s7CisJfQorCisJaXN0YXRlID0gKEhlYXBJ bnNlcnRTdGF0ZSAqKSBzdGF0ZS0+ZGF0YTsKKwlBc3NlcnQoaXN0YXRlLT5taXN0YXRlICE9IE5V TEwpOworCW1pc3RhdGUgPSBpc3RhdGUtPm1pc3RhdGU7CisKKwlkc3RzbG90ID0gbWlzdGF0ZS0+ c2xvdHNbbWlzdGF0ZS0+Y3VyX3Nsb3RzXTsKKwlpZiAoZHN0c2xvdCA9PSBOVUxMKQorCXsKKwkJ LyoKKwkJICogV2UgdXNlIHZpcnR1YWwgdHVwbGUgc2xvdHMgYnVmZmVyZWQgc2xvdHMgZm9yIGxl dmVyYWdpbmcgdGhlCisJCSAqIG9wdGltaXphdGlvbiBpdCBwcm92aWRlcyB0byBtaW5pbWl6ZSBw aHlzaWNhbCBkYXRhIGNvcHlpbmcuIFRoZQorCQkgKiB2aXJ0dWFsIHNsb3QgZ2V0cyBtYXRlcmlh bGl6ZWQgd2hlbiB3ZSBjb3B5ICh2aWEgYmVsb3cKKwkJICogRXhlY0NvcHlTbG90KSB0aGUgdHVw bGVzIGZyb20gdGhlIHNvdXJjZSBzbG90IHdoaWNoIGNhbiBiZSBvZiBhbnkKKwkJICogdHlwZS4g VGhpcyB3YXksIGl0IGlzIGVuc3VyZWQgdGhhdCB0aGUgdHVwbGUgc3RvcmFnZSBkb2Vzbid0IGRl cGVuZAorCQkgKiBvbiBleHRlcm5hbCBtZW1vcnksIGJlY2F1c2UgYWxsIHRoZSBkYXR1bXMgdGhh dCBhcmVuJ3QgcGFzc2VkIGJ5CisJCSAqIHZhbHVlIGFyZSBjb3BpZWQgaW50byB0aGUgc2xvdCdz IG1lbW9yeSBjb250ZXh0LgorCQkgKi8KKwkJZHN0c2xvdCA9IE1ha2VUdXBsZVRhYmxlU2xvdChS ZWxhdGlvbkdldERlc2NyKHN0YXRlLT5yZWwpLAorCQkJCQkJCQkJICZUVFNPcHNWaXJ0dWFsKTsK KwkJbWlzdGF0ZS0+c2xvdHNbbWlzdGF0ZS0+Y3VyX3Nsb3RzXSA9IGRzdHNsb3Q7CisJfQorCisJ QXNzZXJ0KFRUU19JU19WSVJUVUFMKGRzdHNsb3QpKTsKKworCS8qCisJICogTm90ZSB0aGF0IHRo ZSBjb3B5IGNsZWFycyB0aGUgcHJldmlvdXMgZGVzdGluYXRpb24gc2xvdCBjb250ZW50cywgc28K KwkgKiB0aGVyZSdzIG5vIG5lZWQgb2YgZXhwbGljaXQgRXhlY0NsZWFyVHVwbGUgaGVyZS4KKwkg Ki8KKwlFeGVjQ29weVNsb3QoZHN0c2xvdCwgc2xvdCk7CisKKwltaXN0YXRlLT5jdXJfc2xvdHMr KzsKKwltaXN0YXRlLT5jdXJfc2l6ZSArPSAoKFZpcnR1YWxUdXBsZVRhYmxlU2xvdCAqKSBkc3Rz bG90KS0+c3o7CisKKwlpZiAoKHN0YXRlLT5tb2RpZnlfZmxhZ3MgJiBUTV9TS0lQX0lOVEVSTkFM X0JVRkZFUl9GTFVTSCkgPT0gMCAmJgorCQkobWlzdGF0ZS0+Y3VyX3Nsb3RzID49IEhFQVBfTUFY X0JVRkZFUkVEX1NMT1RTIHx8CisJCSBtaXN0YXRlLT5jdXJfc2l6ZSA+PSBIRUFQX01BWF9CVUZG RVJFRF9CWVRFUykpCisJCWhlYXBfbW9kaWZ5X2J1ZmZlcl9mbHVzaChzdGF0ZSk7CisKKwlNZW1v cnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7Cit9CisKKy8qCisgKiBJbnNlcnQgbXVsdGlw bGUgdHVwbGVzIGZyb20gaW4tbWVtb3J5IGJ1ZmZlcmVkIHNsb3RzIGludG8gaGVhcC4KKyAqLwor dm9pZAoraGVhcF9tb2RpZnlfYnVmZmVyX2ZsdXNoKFRhYmxlTW9kaWZ5U3RhdGUgKnN0YXRlKQor eworCUhlYXBJbnNlcnRTdGF0ZSAqaXN0YXRlOworCUhlYXBNdWx0aUluc2VydFN0YXRlICptaXN0 YXRlOworCU1lbW9yeUNvbnRleHQgb2xkY29udGV4dDsKKworCS8qIFF1aWNrIGV4aXQgaWYgd2Ug aGF2ZW4ndCBpbnNlcnRlZCBhbnl0aGluZyB5ZXQgKi8KKwlpZiAoc3RhdGUtPmRhdGEgPT0gTlVM TCkKKwkJcmV0dXJuOworCisJaXN0YXRlID0gKEhlYXBJbnNlcnRTdGF0ZSAqKSBzdGF0ZS0+ZGF0 YTsKKwlBc3NlcnQoaXN0YXRlLT5taXN0YXRlICE9IE5VTEwpOworCW1pc3RhdGUgPSBpc3RhdGUt Pm1pc3RhdGU7CisKKwkvKiBRdWljayBleGl0IGlmIHdlIGhhdmUgZmx1c2hlZCBhbHJlYWR5ICov CisJaWYgKG1pc3RhdGUtPmN1cl9zbG90cyA9PSAwKQorCQlyZXR1cm47CisKKwkvKgorCSAqIGhl YXBfbXVsdGlfaW5zZXJ0IG1heSBsZWFrIG1lbW9yeSwgc28gc3dpdGNoIHRvIHNob3J0LWxpdmVk IG1lbW9yeQorCSAqIGNvbnRleHQgYmVmb3JlIGNhbGxpbmcgaXQuCisJICovCisJb2xkY29udGV4 dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhtaXN0YXRlLT5tZW1fY3h0KTsKKworCWhlYXBfbXVs dGlfaW5zZXJ0KHN0YXRlLT5yZWwsIG1pc3RhdGUtPnNsb3RzLCBtaXN0YXRlLT5jdXJfc2xvdHMs CisJCQkJCSAgc3RhdGUtPmNpZCwgc3RhdGUtPm9wdGlvbnMsIGlzdGF0ZS0+YmlzdGF0ZSk7CisK KwlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7CisJTWVtb3J5Q29udGV4dFJlc2V0 KG1pc3RhdGUtPm1lbV9jeHQpOworCisJaWYgKHN0YXRlLT5tb2RpZnlfYnVmZmVyX2ZsdXNoX2Nh bGxiYWNrICE9IE5VTEwpCisJeworCQlmb3IgKGludCBpID0gMDsgaSA8IG1pc3RhdGUtPmN1cl9z bG90czsgaSsrKQorCQkJc3RhdGUtPm1vZGlmeV9idWZmZXJfZmx1c2hfY2FsbGJhY2soc3RhdGUt Pm1vZGlmeV9idWZmZXJfZmx1c2hfY29udGV4dCwKKwkJCQkJCQkJCQkJCW1pc3RhdGUtPnNsb3Rz W2ldKTsKKwl9CisKKwltaXN0YXRlLT5jdXJfc2xvdHMgPSAwOworCW1pc3RhdGUtPmN1cl9zaXpl ID0gMDsKK30KKworLyoKKyAqIEhlYXAgaW5zZXJ0IHNwZWNpZmljIGNhbGxiYWNrIHVzZWQgZm9y IHBlcmZvcm1pbmcgd29yayBhdCB0aGUgZW5kIGxpa2UKKyAqIGZsdXNoaW5nIGJ1ZmZlcmVkIHR1 cGxlcyBpZiBhbnksIGNsZWFuaW5nIHVwIHRoZSBpbnNlcnQgc3RhdGUgYW5kIGJ1ZmZlcmVkCisg KiBzbG90cy4KKyAqLworc3RhdGljIHZvaWQKK2hlYXBfbW9kaWZ5X2luc2VydF9lbmRfY2FsbGJh Y2soVGFibGVNb2RpZnlTdGF0ZSAqc3RhdGUpCit7CisJSGVhcEluc2VydFN0YXRlICppc3RhdGU7 CisKKwkvKiBRdWljayBleGl0IGlmIHdlIGhhdmVuJ3QgaW5zZXJ0ZWQgYW55dGhpbmcgeWV0ICov CisJaWYgKHN0YXRlLT5kYXRhID09IE5VTEwpCisJCXJldHVybjsKKworCWlzdGF0ZSA9IChIZWFw SW5zZXJ0U3RhdGUgKikgc3RhdGUtPmRhdGE7CisKKwlpZiAoaXN0YXRlLT5taXN0YXRlICE9IE5V TEwpCisJeworCQlIZWFwTXVsdGlJbnNlcnRTdGF0ZSAqbWlzdGF0ZSA9IGlzdGF0ZS0+bWlzdGF0 ZTsKKworCQloZWFwX21vZGlmeV9idWZmZXJfZmx1c2goc3RhdGUpOworCisJCUFzc2VydChtaXN0 YXRlLT5jdXJfc2xvdHMgPT0gMCAmJgorCQkJICAgbWlzdGF0ZS0+Y3VyX3NpemUgPT0gMCk7CisK KwkJZm9yIChpbnQgaSA9IDA7IGkgPCBIRUFQX01BWF9CVUZGRVJFRF9TTE9UUyAmJiBtaXN0YXRl LT5zbG90c1tpXSAhPSBOVUxMOyBpKyspCisJCQlFeGVjRHJvcFNpbmdsZVR1cGxlVGFibGVTbG90 KG1pc3RhdGUtPnNsb3RzW2ldKTsKKworCQlNZW1vcnlDb250ZXh0RGVsZXRlKG1pc3RhdGUtPm1l bV9jeHQpOworCX0KKworCWlmIChpc3RhdGUtPmJpc3RhdGUgIT0gTlVMTCkKKwkJRnJlZUJ1bGtJ bnNlcnRTdGF0ZShpc3RhdGUtPmJpc3RhdGUpOworfQorCisvKgorICogQ2xlYW4gaGVhcCBtb2Rp Znkgc3RhdGUuCisgKi8KK3ZvaWQKK2hlYXBfbW9kaWZ5X2VuZChUYWJsZU1vZGlmeVN0YXRlICpz dGF0ZSkKK3sKKwlpZiAoc3RhdGUtPm1vZGlmeV9lbmRfY2FsbGJhY2sgIT0gTlVMTCkKKwkJc3Rh dGUtPm1vZGlmeV9lbmRfY2FsbGJhY2soc3RhdGUpOworCisJTWVtb3J5Q29udGV4dERlbGV0ZShz dGF0ZS0+bWVtX2N4dCk7Cit9CisKIC8qCiAgKglzaW1wbGVfaGVhcF9pbnNlcnQgLSBpbnNlcnQg YSB0dXBsZQogICoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9o YW5kbGVyLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jCmluZGV4 IDZmOGIxYjc5MjkuLmVkYTBjNzNhMTYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9o ZWFwL2hlYXBhbV9oYW5kbGVyLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFt X2hhbmRsZXIuYwpAQCAtMjYxNSw2ICsyNjE1LDEyIEBAIHN0YXRpYyBjb25zdCBUYWJsZUFtUm91 dGluZSBoZWFwYW1fbWV0aG9kcyA9IHsKIAkudHVwbGVfaW5zZXJ0X3NwZWN1bGF0aXZlID0gaGVh cGFtX3R1cGxlX2luc2VydF9zcGVjdWxhdGl2ZSwKIAkudHVwbGVfY29tcGxldGVfc3BlY3VsYXRp dmUgPSBoZWFwYW1fdHVwbGVfY29tcGxldGVfc3BlY3VsYXRpdmUsCiAJLm11bHRpX2luc2VydCA9 IGhlYXBfbXVsdGlfaW5zZXJ0LAorCisJLnR1cGxlX21vZGlmeV9iZWdpbiA9IGhlYXBfbW9kaWZ5 X2JlZ2luLAorCS50dXBsZV9tb2RpZnlfYnVmZmVyX2luc2VydCA9IGhlYXBfbW9kaWZ5X2J1ZmZl cl9pbnNlcnQsCisJLnR1cGxlX21vZGlmeV9idWZmZXJfZmx1c2ggPSBoZWFwX21vZGlmeV9idWZm ZXJfZmx1c2gsCisJLnR1cGxlX21vZGlmeV9lbmQgPSBoZWFwX21vZGlmeV9lbmQsCisKIAkudHVw bGVfZGVsZXRlID0gaGVhcGFtX3R1cGxlX2RlbGV0ZSwKIAkudHVwbGVfdXBkYXRlID0gaGVhcGFt X3R1cGxlX3VwZGF0ZSwKIAkudHVwbGVfbG9jayA9IGhlYXBhbV90dXBsZV9sb2NrLApkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RhYmxlL3RhYmxlYW0uYyBiL3NyYy9iYWNrZW5kL2Fj Y2Vzcy90YWJsZS90YWJsZWFtLmMKaW5kZXggZTU3YTBiN2VhMy4uMzVhM2U0M2M1OSAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RhYmxlL3RhYmxlYW0uYworKysgYi9zcmMvYmFja2Vu ZC9hY2Nlc3MvdGFibGUvdGFibGVhbS5jCkBAIC0yMSw2ICsyMSw3IEBACiAKICNpbmNsdWRlIDxt YXRoLmg+CiAKKyNpbmNsdWRlICJhY2Nlc3MvaGVhcGFtLmgiCQkvKiBqdXN0IGZvciBCdWxrSW5z ZXJ0U3RhdGUgKi8KICNpbmNsdWRlICJhY2Nlc3Mvc3luY3NjYW4uaCIKICNpbmNsdWRlICJhY2Nl c3MvdGFibGVhbS5oIgogI2luY2x1ZGUgImFjY2Vzcy94YWN0LmgiCkBAIC0yOSw2ICszMCw3IEBA CiAjaW5jbHVkZSAic3RvcmFnZS9idWZtZ3IuaCIKICNpbmNsdWRlICJzdG9yYWdlL3NobWVtLmgi CiAjaW5jbHVkZSAic3RvcmFnZS9zbWdyLmgiCisjaW5jbHVkZSAidXRpbHMvbWVtdXRpbHMuaCIK IAogLyoKICAqIENvbnN0YW50cyB0byBjb250cm9sIHRoZSBiZWhhdmlvciBvZiBibG9jayBhbGxv Y2F0aW9uIHRvIHBhcmFsbGVsIHdvcmtlcnMKQEAgLTQ4LDYgKzUwLDcgQEAKIGNoYXIJICAgKmRl ZmF1bHRfdGFibGVfYWNjZXNzX21ldGhvZCA9IERFRkFVTFRfVEFCTEVfQUNDRVNTX01FVEhPRDsK IGJvb2wJCXN5bmNocm9uaXplX3NlcXNjYW5zID0gdHJ1ZTsKIAorc3RhdGljIHZvaWQgZGVmYXVs dF90YWJsZV9tb2RpZnlfaW5zZXJ0X2VuZF9jYWxsYmFjayhUYWJsZU1vZGlmeVN0YXRlICpzdGF0 ZSk7CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIFNsb3QgZnVuY3Rpb25zLgpAQCAtNzU2 LDMgKzc1OSw5NyBAQCB0YWJsZV9ibG9ja19yZWxhdGlvbl9lc3RpbWF0ZV9zaXplKFJlbGF0aW9u IHJlbCwgaW50MzIgKmF0dHJfd2lkdGhzLAogCWVsc2UKIAkJKmFsbHZpc2ZyYWMgPSAoZG91Ymxl KSByZWxhbGx2aXNpYmxlIC8gY3VycGFnZXM7CiB9CisKKy8qCisgKiBJbml0aWFsaXplIGRlZmF1 bHQgdGFibGUgbW9kaWZ5IHN0YXRlLgorICovCitUYWJsZU1vZGlmeVN0YXRlICoKK2RlZmF1bHRf dGFibGVfbW9kaWZ5X2JlZ2luKFJlbGF0aW9uIHJlbCwgaW50IG1vZGlmeV9mbGFncywKKwkJCQkJ CSAgIENvbW1hbmRJZCBjaWQsIGludCBvcHRpb25zLAorCQkJCQkJICAgVGFibGVNb2RpZnlCdWZm ZXJGbHVzaENhbGxiYWNrIG1vZGlmeV9idWZmZXJfZmx1c2hfY2FsbGJhY2ssCisJCQkJCQkgICB2 b2lkICptb2RpZnlfYnVmZmVyX2ZsdXNoX2NvbnRleHQpCit7CisJVGFibGVNb2RpZnlTdGF0ZSAq c3RhdGU7CisJTWVtb3J5Q29udGV4dCBjb250ZXh0OworCU1lbW9yeUNvbnRleHQgb2xkY29udGV4 dDsKKworCWNvbnRleHQgPSBBbGxvY1NldENvbnRleHRDcmVhdGUoQ3VycmVudE1lbW9yeUNvbnRl eHQsCisJCQkJCQkJCQkiZGVmYXVsdF90YWJsZV9tb2RpZnkgbWVtb3J5IGNvbnRleHQiLAorCQkJ CQkJCQkJQUxMT0NTRVRfREVGQVVMVF9TSVpFUyk7CisKKwlvbGRjb250ZXh0ID0gTWVtb3J5Q29u dGV4dFN3aXRjaFRvKGNvbnRleHQpOworCXN0YXRlID0gcGFsbG9jMChzaXplb2YoVGFibGVNb2Rp ZnlTdGF0ZSkpOworCXN0YXRlLT5yZWwgPSByZWw7CisJc3RhdGUtPm1vZGlmeV9mbGFncyA9IG1v ZGlmeV9mbGFnczsKKwlzdGF0ZS0+bWVtX2N4dCA9IGNvbnRleHQ7CisJc3RhdGUtPmNpZCA9IGNp ZDsKKwlzdGF0ZS0+b3B0aW9ucyA9IG9wdGlvbnM7CisJc3RhdGUtPm1vZGlmeV9idWZmZXJfZmx1 c2hfY2FsbGJhY2sgPSBtb2RpZnlfYnVmZmVyX2ZsdXNoX2NhbGxiYWNrOworCXN0YXRlLT5tb2Rp ZnlfYnVmZmVyX2ZsdXNoX2NvbnRleHQgPSBtb2RpZnlfYnVmZmVyX2ZsdXNoX2NvbnRleHQ7CisJ c3RhdGUtPm1vZGlmeV9lbmRfY2FsbGJhY2sgPSBOVUxMOwkvKiBUbyBiZSBpbnN0YWxsZWQgbGF6 aWx5ICovCisJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRleHQpOworCisJcmV0dXJuIHN0 YXRlOworfQorCisvKgorICogRGVmYXVsdCB0YWJsZSBtb2RpZnkgaW1wbGVtZW50YXRpb24gZm9y IGluc2VydHMuCisgKi8KK3ZvaWQKK2RlZmF1bHRfdGFibGVfbW9kaWZ5X2J1ZmZlcl9pbnNlcnQo VGFibGVNb2RpZnlTdGF0ZSAqc3RhdGUsCisJCQkJCQkJCSAgIFR1cGxlVGFibGVTbG90ICpzbG90 KQoreworCU1lbW9yeUNvbnRleHQgb2xkY29udGV4dDsKKworCW9sZGNvbnRleHQgPSBNZW1vcnlD b250ZXh0U3dpdGNoVG8oc3RhdGUtPm1lbV9jeHQpOworCisJLyogRmlyc3QgdGltZSB0aHJvdWdo LCBpbml0aWFsaXplIGRlZmF1bHQgdGFibGUgbW9kaWZ5IHN0YXRlICovCisJaWYgKHN0YXRlLT5k YXRhID09IE5VTEwpCisJeworCQlpZiAoKHN0YXRlLT5tb2RpZnlfZmxhZ3MgJiBUTV9GTEFHX0JB U19CVUxLV1JJVEUpICE9IDApCisJCQlzdGF0ZS0+ZGF0YSA9IChCdWxrSW5zZXJ0U3RhdGUpIEdl dEJ1bGtJbnNlcnRTdGF0ZSgpOworCisJCXN0YXRlLT5tb2RpZnlfZW5kX2NhbGxiYWNrID0gZGVm YXVsdF90YWJsZV9tb2RpZnlfaW5zZXJ0X2VuZF9jYWxsYmFjazsKKwl9CisKKwkvKiBGYWxsYmFj ayB0byB0YWJsZSBBTSBzaW5nbGUgaW5zZXJ0IHJvdXRpbmUgKi8KKwl0YWJsZV90dXBsZV9pbnNl cnQoc3RhdGUtPnJlbCwKKwkJCQkJICAgc2xvdCwKKwkJCQkJICAgc3RhdGUtPmNpZCwKKwkJCQkJ ICAgc3RhdGUtPm9wdGlvbnMsCisJCQkJCSAgIChCdWxrSW5zZXJ0U3RhdGUpIHN0YXRlLT5kYXRh KTsKKworCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKK30KKworLyoKKyAqIERl ZmF1bHQgdGFibGUgbW9kaWZ5IGltcGxlbWVudGF0aW9uIGZvciBmbHVzaC4KKyAqLwordm9pZAor ZGVmYXVsdF90YWJsZV9tb2RpZnlfYnVmZmVyX2ZsdXNoKFRhYmxlTW9kaWZ5U3RhdGUgKnN0YXRl KQoreworCS8qIG5vLW9wICovCit9CisKKy8qCisgKiBEZWZhdWx0IHRhYmxlIG1vZGlmeSBpbnNl cnQgc3BlY2lmaWMgY2FsbGJhY2sgdXNlZCBmb3IgcGVyZm9ybWluZyB3b3JrIGF0CisgKiB0aGUg ZW5kIGxpa2UgY2xlYW5pbmcgdXAgdGhlIGJ1bGsgaW5zZXJ0IHN0YXRlLgorICovCitzdGF0aWMg dm9pZAorZGVmYXVsdF90YWJsZV9tb2RpZnlfaW5zZXJ0X2VuZF9jYWxsYmFjayhUYWJsZU1vZGlm eVN0YXRlICpzdGF0ZSkKK3sKKwlpZiAoc3RhdGUtPmRhdGEgIT0gTlVMTCkKKwkJRnJlZUJ1bGtJ bnNlcnRTdGF0ZSgoQnVsa0luc2VydFN0YXRlKSBzdGF0ZS0+ZGF0YSk7Cit9CisKKy8qCisgKiBD bGVhbiBkZWZhdWx0IHRhYmxlIG1vZGlmeSBzdGF0ZS4KKyAqLwordm9pZAorZGVmYXVsdF90YWJs ZV9tb2RpZnlfZW5kKFRhYmxlTW9kaWZ5U3RhdGUgKnN0YXRlKQoreworCWlmIChzdGF0ZS0+bW9k aWZ5X2VuZF9jYWxsYmFjayAhPSBOVUxMKQorCQlzdGF0ZS0+bW9kaWZ5X2VuZF9jYWxsYmFjayhz dGF0ZSk7CisKKwlNZW1vcnlDb250ZXh0RGVsZXRlKHN0YXRlLT5tZW1fY3h0KTsKK30KZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90YWJsZS90YWJsZWFtYXBpLmMgYi9zcmMvYmFja2Vu ZC9hY2Nlc3MvdGFibGUvdGFibGVhbWFwaS5jCmluZGV4IGNlNjM3YTVhNWQuLjk2YWM5NTFhZjYg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90YWJsZS90YWJsZWFtYXBpLmMKKysrIGIv c3JjL2JhY2tlbmQvYWNjZXNzL3RhYmxlL3RhYmxlYW1hcGkuYwpAQCAtOTcsNiArOTcsMTYgQEAg R2V0VGFibGVBbVJvdXRpbmUoT2lkIGFtaGFuZGxlcikKIAlBc3NlcnQocm91dGluZS0+c2Nhbl9z YW1wbGVfbmV4dF9ibG9jayAhPSBOVUxMKTsKIAlBc3NlcnQocm91dGluZS0+c2Nhbl9zYW1wbGVf bmV4dF90dXBsZSAhPSBOVUxMKTsKIAorCS8qIG9wdGlvbmFsLCBidXQgZWl0aGVyIGFsbCBvZiB0 aGVtIGFyZSBkZWZpbmVkIG9yIG5vbmUuICovCisJQXNzZXJ0KChyb3V0aW5lLT50dXBsZV9tb2Rp ZnlfYmVnaW4gPT0gTlVMTCAmJgorCQkJcm91dGluZS0+dHVwbGVfbW9kaWZ5X2J1ZmZlcl9pbnNl cnQgPT0gTlVMTCAmJgorCQkJcm91dGluZS0+dHVwbGVfbW9kaWZ5X2J1ZmZlcl9mbHVzaCA9PSBO VUxMICYmCisJCQlyb3V0aW5lLT50dXBsZV9tb2RpZnlfZW5kID09IE5VTEwpIHx8CisJCSAgIChy b3V0aW5lLT50dXBsZV9tb2RpZnlfYmVnaW4gIT0gTlVMTCAmJgorCQkJcm91dGluZS0+dHVwbGVf bW9kaWZ5X2J1ZmZlcl9pbnNlcnQgIT0gTlVMTCAmJgorCQkJcm91dGluZS0+dHVwbGVfbW9kaWZ5 X2J1ZmZlcl9mbHVzaCAhPSBOVUxMICYmCisJCQlyb3V0aW5lLT50dXBsZV9tb2RpZnlfZW5kICE9 IE5VTEwpKTsKKwogCXJldHVybiByb3V0aW5lOwogfQogCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9leGVjdXRvci9leGVjVHVwbGVzLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjVHVwbGVz LmMKaW5kZXggMDBkYzMzOTYxNS4uZTAyMjI4ODU4YSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv ZXhlY3V0b3IvZXhlY1R1cGxlcy5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNUdXBs ZXMuYwpAQCAtOTcsNiArOTcsNyBAQCBjb25zdCBUdXBsZVRhYmxlU2xvdE9wcyBUVFNPcHNCdWZm ZXJIZWFwVHVwbGU7CiBzdGF0aWMgdm9pZAogdHRzX3ZpcnR1YWxfaW5pdChUdXBsZVRhYmxlU2xv dCAqc2xvdCkKIHsKKwkoKFZpcnR1YWxUdXBsZVRhYmxlU2xvdCAqKSBzbG90KS0+c3ogPSAwOwog fQogCiBzdGF0aWMgdm9pZApAQCAtMTEzLDYgKzExNCw3IEBAIHR0c192aXJ0dWFsX2NsZWFyKFR1 cGxlVGFibGVTbG90ICpzbG90KQogCiAJCXBmcmVlKHZzbG90LT5kYXRhKTsKIAkJdnNsb3QtPmRh dGEgPSBOVUxMOworCQl2c2xvdC0+c3ogPSAwOwogCiAJCXNsb3QtPnR0c19mbGFncyAmPSB+VFRT X0ZMQUdfU0hPVUxERlJFRTsKIAl9CkBAIC0yMTIsNiArMjE0LDggQEAgdHRzX3ZpcnR1YWxfbWF0 ZXJpYWxpemUoVHVwbGVUYWJsZVNsb3QgKnNsb3QpCiAJCX0KIAl9CiAKKwl2c2xvdC0+c3ogPSBz ejsKKwogCS8qIGFsbCBkYXRhIGlzIGJ5dmFsICovCiAJaWYgKHN6ID09IDApCiAJCXJldHVybjsK ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaCBiL3NyYy9pbmNsdWRlL2Fj Y2Vzcy9oZWFwYW0uaAppbmRleCBjNDdhNTA0NWNlLi5jMTBlYmJiNWVhIDEwMDY0NAotLS0gYS9z cmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBh bS5oCkBAIC0yNzEsNiArMjcxLDM4IEBAIHR5cGVkZWYgZW51bQogCVBSVU5FX1ZBQ1VVTV9DTEVB TlVQLAkJLyogVkFDVVVNIDJuZCBoZWFwIHBhc3MgKi8KIH0gUHJ1bmVSZWFzb247CiAKKy8qCisg KiBNYXhpbXVtIG51bWJlciBvZiBzbG90cyB0aGF0IG11bHRpLWluc2VydCBidWZmZXJzIGNhbiBo b2xkLgorICoKKyAqIENhdXRpb246IERvbid0IG1ha2UgdGhpcyB0b28gYmlnLCBhcyB3ZSBjb3Vs ZCBlbmQgdXAgd2l0aCB0aGlzIG1hbnkgdHVwbGVzCisgKiBzdG9yZWQgaW4gbXVsdGkgaW5zZXJ0 IGJ1ZmZlci4KKyAqLworI2RlZmluZSBIRUFQX01BWF9CVUZGRVJFRF9TTE9UUwkJMTAwMAorCisv KiBNYXhpbXVtIHNpemUgb2YgYWxsIHR1cGxlcyB0aGF0IG11bHRpLWluc2VydCBidWZmZXJzIGNh biBob2xkICovCisjZGVmaW5lIEhFQVBfTUFYX0JVRkZFUkVEX0JZVEVTCQk2NTUzNQorCit0eXBl ZGVmIHN0cnVjdCBIZWFwTXVsdGlJbnNlcnRTdGF0ZQoreworCS8qIEFycmF5IG9mIGJ1ZmZlcmVk IHNsb3RzICovCisJVHVwbGVUYWJsZVNsb3QgKipzbG90czsKKworCS8qIE51bWJlciBvZiBidWZm ZXJlZCBzbG90cyBjdXJyZW50bHkgaGVsZCAqLworCWludAkJCWN1cl9zbG90czsKKworCS8qIEFw cHJveGltYXRlIHNpemUgb2YgYWxsIHR1cGxlcyBjdXJyZW50bHkgaGVsZCBpbiBidWZmZXJlZCBz bG90cyAqLworCVNpemUJCWN1cl9zaXplOworCisJTWVtb3J5Q29udGV4dCBtZW1fY3h0OworfSBI ZWFwTXVsdGlJbnNlcnRTdGF0ZTsKKwordHlwZWRlZiBzdHJ1Y3QgSGVhcEluc2VydFN0YXRlCit7 CisJc3RydWN0IEJ1bGtJbnNlcnRTdGF0ZURhdGEgKmJpc3RhdGU7CisJSGVhcE11bHRpSW5zZXJ0 U3RhdGUgKm1pc3RhdGU7Cit9IEhlYXBJbnNlcnRTdGF0ZTsKKworCiAvKiAtLS0tLS0tLS0tLS0t LS0tCiAgKgkJZnVuY3Rpb24gcHJvdG90eXBlcyBmb3IgaGVhcCBhY2Nlc3MgbWV0aG9kCiAgKgpA QCAtMzIxLDYgKzM1MywxOCBAQCBleHRlcm4gdm9pZCBoZWFwX2luc2VydChSZWxhdGlvbiByZWxh dGlvbiwgSGVhcFR1cGxlIHR1cCwgQ29tbWFuZElkIGNpZCwKIGV4dGVybiB2b2lkIGhlYXBfbXVs dGlfaW5zZXJ0KFJlbGF0aW9uIHJlbGF0aW9uLCBzdHJ1Y3QgVHVwbGVUYWJsZVNsb3QgKipzbG90 cywKIAkJCQkJCQkgIGludCBudHVwbGVzLCBDb21tYW5kSWQgY2lkLCBpbnQgb3B0aW9ucywKIAkJ CQkJCQkgIEJ1bGtJbnNlcnRTdGF0ZSBiaXN0YXRlKTsKKworZXh0ZXJuIFRhYmxlTW9kaWZ5U3Rh dGUgKmhlYXBfbW9kaWZ5X2JlZ2luKFJlbGF0aW9uIHJlbCwKKwkJCQkJCQkJCQkgICBpbnQgbW9k aWZ5X2ZsYWdzLAorCQkJCQkJCQkJCSAgIENvbW1hbmRJZCBjaWQsCisJCQkJCQkJCQkJICAgaW50 IG9wdGlvbnMsCisJCQkJCQkJCQkJICAgVGFibGVNb2RpZnlCdWZmZXJGbHVzaENhbGxiYWNrIG1v ZGlmeV9idWZmZXJfZmx1c2hfY2FsbGJhY2ssCisJCQkJCQkJCQkJICAgdm9pZCAqbW9kaWZ5X2J1 ZmZlcl9mbHVzaF9jb250ZXh0KTsKK2V4dGVybiB2b2lkIGhlYXBfbW9kaWZ5X2J1ZmZlcl9pbnNl cnQoVGFibGVNb2RpZnlTdGF0ZSAqc3RhdGUsCisJCQkJCQkJCQkgIFR1cGxlVGFibGVTbG90ICpz bG90KTsKK2V4dGVybiB2b2lkIGhlYXBfbW9kaWZ5X2J1ZmZlcl9mbHVzaChUYWJsZU1vZGlmeVN0 YXRlICpzdGF0ZSk7CitleHRlcm4gdm9pZCBoZWFwX21vZGlmeV9lbmQoVGFibGVNb2RpZnlTdGF0 ZSAqc3RhdGUpOworCiBleHRlcm4gVE1fUmVzdWx0IGhlYXBfZGVsZXRlKFJlbGF0aW9uIHJlbGF0 aW9uLCBJdGVtUG9pbnRlciB0aWQsCiAJCQkJCQkJIENvbW1hbmRJZCBjaWQsIFNuYXBzaG90IGNy b3NzY2hlY2ssIGJvb2wgd2FpdCwKIAkJCQkJCQkgc3RydWN0IFRNX0ZhaWx1cmVEYXRhICp0bWZk LCBib29sIGNoYW5naW5nUGFydCk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvdGFi bGVhbS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxlYW0uaAppbmRleCA4ZTU4M2I0NWNkLi5k OWIyZjRlMDNhIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5oCisrKyBi L3NyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmgKQEAgLTI1NSw2ICsyNTUsNDggQEAgdHlwZWRl ZiBzdHJ1Y3QgVE1fSW5kZXhEZWxldGVPcAogCVRNX0luZGV4U3RhdHVzICpzdGF0dXM7CiB9IFRN X0luZGV4RGVsZXRlT3A7CiAKKy8qIFRhYmxlIG1vZGlmeSBmbGFncyAqLworCisvKiBVc2UgbXVs dGkgaW5zZXJ0cywgaS5lLiBidWZmZXIgbXVsdGlwbGUgdHVwbGVzIGFuZCBpbnNlcnQgdGhlbSBh dCBvbmNlICovCisjZGVmaW5lIFRNX0ZMQUdfTVVMVElfSU5TRVJUUwkweDAwMDAwMQorCisvKiBV c2UgQkFTX0JVTEtXUklURSBidWZmZXIgYWNjZXNzIHN0cmF0ZWd5ICovCisjZGVmaW5lIFRNX0ZM QUdfQkFTX0JVTEtXUklURQkweDAwMDAwMgorCisvKgorICogU2tpcCBpbnRlcm5hbCBmbHVzaCBv ZiBidWZmZXJlZCB0dXBsZXMuIENhbGxlciBuZWVkcyB0byBmbHVzaCB2aWEKKyAqIHRhYmxlX21v ZGlmeV9idWZmZXJfZmx1c2goKS4KKyAqLworI2RlZmluZSBUTV9TS0lQX0lOVEVSTkFMX0JVRkZF Ul9GTFVTSCAgMHgwMDAwMDQKKworc3RydWN0IFRhYmxlTW9kaWZ5U3RhdGU7CisKKy8qIENhbGxi YWNrIGludm9rZWQgZm9yIGVhY2ggdHVwbGUgdGhhdCBnZXRzIGZsdXNoZWQgdG8gZGlzayBmcm9t IGJ1ZmZlciAqLwordHlwZWRlZiB2b2lkICgqVGFibGVNb2RpZnlCdWZmZXJGbHVzaENhbGxiYWNr KSAodm9pZCAqY29udGV4dCwKKwkJCQkJCQkJCQkJCVR1cGxlVGFibGVTbG90ICpzbG90KTsKKwor LyogVGFibGUgQU0gc3BlY2lmaWMgY2FsbGJhY2sgdGhhdCBnZXRzIGNhbGxlZCBpbiB0YWJsZV9t b2RpZnlfZW5kKCkgKi8KK3R5cGVkZWYgdm9pZCAoKlRhYmxlTW9kaWZ5RW5kQ2FsbGJhY2spIChz dHJ1Y3QgVGFibGVNb2RpZnlTdGF0ZSAqc3RhdGUpOworCisvKiBIb2xkcyB0YWJsZSBtb2RpZnkg c3RhdGUgKi8KK3R5cGVkZWYgc3RydWN0IFRhYmxlTW9kaWZ5U3RhdGUKK3sKKwlSZWxhdGlvbgly ZWw7CisJaW50CQkJbW9kaWZ5X2ZsYWdzOworCU1lbW9yeUNvbnRleHQgbWVtX2N4dDsKKwlDb21t YW5kSWQJY2lkOworCWludAkJCW9wdGlvbnM7CisKKwkvKiBGbHVzaCBjYWxsYmFjayBhbmQgaXRz IGNvbnRleHQgKi8KKwlUYWJsZU1vZGlmeUJ1ZmZlckZsdXNoQ2FsbGJhY2sgbW9kaWZ5X2J1ZmZl cl9mbHVzaF9jYWxsYmFjazsKKwl2b2lkCSAgICptb2RpZnlfYnVmZmVyX2ZsdXNoX2NvbnRleHQ7 CisKKwkvKiBUYWJsZSBBTSBzcGVjaWZpYyBkYXRhICovCisJdm9pZAkgICAqZGF0YTsKKworCVRh YmxlTW9kaWZ5RW5kQ2FsbGJhY2sgbW9kaWZ5X2VuZF9jYWxsYmFjazsKK30gVGFibGVNb2RpZnlT dGF0ZTsKKwogLyogIm9wdGlvbnMiIGZsYWcgYml0cyBmb3IgdGFibGVfdHVwbGVfaW5zZXJ0ICov CiAvKiBUQUJMRV9JTlNFUlRfU0tJUF9XQUwgd2FzIDB4MDAwMTsgUmVsYXRpb25OZWVkc1dBTCgp IG5vdyBnb3Zlcm5zICovCiAjZGVmaW5lIFRBQkxFX0lOU0VSVF9TS0lQX0ZTTQkJMHgwMDAyCkBA IC01NzgsNiArNjIwLDIxIEBAIHR5cGVkZWYgc3RydWN0IFRhYmxlQW1Sb3V0aW5lCiAJdm9pZAkJ KCpmaW5pc2hfYnVsa19pbnNlcnQpIChSZWxhdGlvbiByZWwsIGludCBvcHRpb25zKTsKIAogCisJ LyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisJICogVGFibGUgTW9kaWZ5IHJlbGF0ZWQgZnVuY3Rpb25zLgor CSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorCSAqLworCVRhYmxlTW9kaWZ5U3RhdGUgKigqdHVwbGVfbW9k aWZ5X2JlZ2luKSAoUmVsYXRpb24gcmVsLAorCQkJCQkJCQkJCQkgaW50IG1vZGlmeV9mbGFncywK KwkJCQkJCQkJCQkJIENvbW1hbmRJZCBjaWQsCisJCQkJCQkJCQkJCSBpbnQgb3B0aW9ucywKKwkJ CQkJCQkJCQkJIFRhYmxlTW9kaWZ5QnVmZmVyRmx1c2hDYWxsYmFjayBtb2RpZnlfYnVmZmVyX2Zs dXNoX2NhbGxiYWNrLAorCQkJCQkJCQkJCQkgdm9pZCAqbW9kaWZ5X2J1ZmZlcl9mbHVzaF9jb250 ZXh0KTsKKwl2b2lkCQkoKnR1cGxlX21vZGlmeV9idWZmZXJfaW5zZXJ0KSAoVGFibGVNb2RpZnlT dGF0ZSAqc3RhdGUsCisJCQkJCQkJCQkJCSAgIFR1cGxlVGFibGVTbG90ICpzbG90KTsKKwl2b2lk CQkoKnR1cGxlX21vZGlmeV9idWZmZXJfZmx1c2gpIChUYWJsZU1vZGlmeVN0YXRlICpzdGF0ZSk7 CisJdm9pZAkJKCp0dXBsZV9tb2RpZnlfZW5kKSAoVGFibGVNb2RpZnlTdGF0ZSAqc3RhdGUpOwor CiAJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAJICogRERMIHJlbGF0ZWQgZnVuY3Rpb25hbGl0eS4KIAkg KiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KQEAgLTE2MDksNiArMTY2NiwxMDAgQEAgdGFibGVfZmluaXNoX2J1 bGtfaW5zZXJ0KFJlbGF0aW9uIHJlbCwgaW50IG9wdGlvbnMpCiAJCXJlbC0+cmRfdGFibGVhbS0+ ZmluaXNoX2J1bGtfaW5zZXJ0KHJlbCwgb3B0aW9ucyk7CiB9CiAKKy8qIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorICogVGFibGUgTW9kaWZ5IHJlbGF0ZWQgZnVuY3Rpb25zLgorICogLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgKi8KK2V4dGVybiBUYWJsZU1vZGlmeVN0YXRlICpkZWZhdWx0X3RhYmxlX21vZGlmeV9iZWdp bihSZWxhdGlvbiByZWwsIGludCBtb2RpZnlfZmxhZ3MsCisJCQkJCQkJCQkJCQkJQ29tbWFuZElk IGNpZCwgaW50IG9wdGlvbnMsCisJCQkJCQkJCQkJCQkJVGFibGVNb2RpZnlCdWZmZXJGbHVzaENh bGxiYWNrIG1vZGlmeV9idWZmZXJfZmx1c2hfY2FsbGJhY2ssCisJCQkJCQkJCQkJCQkJdm9pZCAq bW9kaWZ5X2J1ZmZlcl9mbHVzaF9jb250ZXh0KTsKK2V4dGVybiB2b2lkIGRlZmF1bHRfdGFibGVf bW9kaWZ5X2J1ZmZlcl9pbnNlcnQoVGFibGVNb2RpZnlTdGF0ZSAqc3RhdGUsCisJCQkJCQkJCQkJ CSAgIFR1cGxlVGFibGVTbG90ICpzbG90KTsKK2V4dGVybiB2b2lkIGRlZmF1bHRfdGFibGVfbW9k aWZ5X2J1ZmZlcl9mbHVzaChUYWJsZU1vZGlmeVN0YXRlICpzdGF0ZSk7CitleHRlcm4gdm9pZCBk ZWZhdWx0X3RhYmxlX21vZGlmeV9lbmQoVGFibGVNb2RpZnlTdGF0ZSAqc3RhdGUpOworCitzdGF0 aWMgaW5saW5lIFRhYmxlTW9kaWZ5U3RhdGUgKgordGFibGVfbW9kaWZ5X2JlZ2luKFJlbGF0aW9u IHJlbCwgaW50IG1vZGlmeV9mbGFncywgQ29tbWFuZElkIGNpZCwgaW50IG9wdGlvbnMsCisJCQkJ ICAgVGFibGVNb2RpZnlCdWZmZXJGbHVzaENhbGxiYWNrIG1vZGlmeV9idWZmZXJfZmx1c2hfY2Fs bGJhY2ssCisJCQkJICAgdm9pZCAqbW9kaWZ5X2J1ZmZlcl9mbHVzaF9jb250ZXh0KQoreworCWlm IChyZWwtPnJkX3RhYmxlYW0gJiYKKwkJcmVsLT5yZF90YWJsZWFtLT50dXBsZV9tb2RpZnlfYmVn aW4gIT0gTlVMTCkKKwl7CisJCXJldHVybiByZWwtPnJkX3RhYmxlYW0tPnR1cGxlX21vZGlmeV9i ZWdpbihyZWwsIG1vZGlmeV9mbGFncywKKwkJCQkJCQkJCQkJCSAgIGNpZCwgb3B0aW9ucywKKwkJ CQkJCQkJCQkJCSAgIG1vZGlmeV9idWZmZXJfZmx1c2hfY2FsbGJhY2ssCisJCQkJCQkJCQkJCQkg ICBtb2RpZnlfYnVmZmVyX2ZsdXNoX2NvbnRleHQpOworCX0KKwllbHNlIGlmIChyZWwtPnJkX3Rh YmxlYW0gJiYKKwkJCSByZWwtPnJkX3RhYmxlYW0tPnR1cGxlX21vZGlmeV9iZWdpbiA9PSBOVUxM KQorCXsKKwkJLyogRmFsbGJhY2sgdG8gYSBkZWZhdWx0IGltcGxlbWVudGF0aW9uICovCisJCXJl dHVybiBkZWZhdWx0X3RhYmxlX21vZGlmeV9iZWdpbihyZWwsIG1vZGlmeV9mbGFncywKKwkJCQkJ CQkJCQkgIGNpZCwgb3B0aW9ucywKKwkJCQkJCQkJCQkgIG1vZGlmeV9idWZmZXJfZmx1c2hfY2Fs bGJhY2ssCisJCQkJCQkJCQkJICBtb2RpZnlfYnVmZmVyX2ZsdXNoX2NvbnRleHQpOworCX0KKwll bHNlCisJCUFzc2VydChmYWxzZSk7CisKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGlubGlu ZSB2b2lkCit0YWJsZV9tb2RpZnlfYnVmZmVyX2luc2VydChUYWJsZU1vZGlmeVN0YXRlICpzdGF0 ZSwgVHVwbGVUYWJsZVNsb3QgKnNsb3QpCit7CisJaWYgKHN0YXRlLT5yZWwtPnJkX3RhYmxlYW0g JiYKKwkJc3RhdGUtPnJlbC0+cmRfdGFibGVhbS0+dHVwbGVfbW9kaWZ5X2J1ZmZlcl9pbnNlcnQg IT0gTlVMTCkKKwl7CisJCXN0YXRlLT5yZWwtPnJkX3RhYmxlYW0tPnR1cGxlX21vZGlmeV9idWZm ZXJfaW5zZXJ0KHN0YXRlLCBzbG90KTsKKwl9CisJZWxzZSBpZiAoc3RhdGUtPnJlbC0+cmRfdGFi bGVhbSAmJgorCQkJIHN0YXRlLT5yZWwtPnJkX3RhYmxlYW0tPnR1cGxlX21vZGlmeV9idWZmZXJf aW5zZXJ0ID09IE5VTEwpCisJeworCQkvKiBGYWxsYmFjayB0byBhIGRlZmF1bHQgaW1wbGVtZW50 YXRpb24gKi8KKwkJZGVmYXVsdF90YWJsZV9tb2RpZnlfYnVmZmVyX2luc2VydChzdGF0ZSwgc2xv dCk7CisJfQorCWVsc2UKKwkJQXNzZXJ0KGZhbHNlKTsKK30KKworc3RhdGljIGlubGluZSB2b2lk Cit0YWJsZV9tb2RpZnlfYnVmZmVyX2ZsdXNoKFRhYmxlTW9kaWZ5U3RhdGUgKnN0YXRlKQorewor CWlmIChzdGF0ZS0+cmVsLT5yZF90YWJsZWFtICYmCisJCXN0YXRlLT5yZWwtPnJkX3RhYmxlYW0t PnR1cGxlX21vZGlmeV9idWZmZXJfZmx1c2ggIT0gTlVMTCkKKwl7CisJCXN0YXRlLT5yZWwtPnJk X3RhYmxlYW0tPnR1cGxlX21vZGlmeV9idWZmZXJfZmx1c2goc3RhdGUpOworCX0KKwllbHNlIGlm IChzdGF0ZS0+cmVsLT5yZF90YWJsZWFtICYmCisJCQkgc3RhdGUtPnJlbC0+cmRfdGFibGVhbS0+ dHVwbGVfbW9kaWZ5X2J1ZmZlcl9mbHVzaCA9PSBOVUxMKQorCXsKKwkJLyogRmFsbGJhY2sgdG8g YSBkZWZhdWx0IGltcGxlbWVudGF0aW9uICovCisJCWRlZmF1bHRfdGFibGVfbW9kaWZ5X2J1ZmZl cl9mbHVzaChzdGF0ZSk7CisJfQorCWVsc2UKKwkJQXNzZXJ0KGZhbHNlKTsKK30KKworc3RhdGlj IGlubGluZSB2b2lkCit0YWJsZV9tb2RpZnlfZW5kKFRhYmxlTW9kaWZ5U3RhdGUgKnN0YXRlKQor eworCWlmIChzdGF0ZS0+cmVsLT5yZF90YWJsZWFtICYmCisJCXN0YXRlLT5yZWwtPnJkX3RhYmxl YW0tPnR1cGxlX21vZGlmeV9lbmQgIT0gTlVMTCkKKwl7CisJCXN0YXRlLT5yZWwtPnJkX3RhYmxl YW0tPnR1cGxlX21vZGlmeV9lbmQoc3RhdGUpOworCX0KKwllbHNlIGlmIChzdGF0ZS0+cmVsLT5y ZF90YWJsZWFtICYmCisJCQkgc3RhdGUtPnJlbC0+cmRfdGFibGVhbS0+dHVwbGVfbW9kaWZ5X2Vu ZCA9PSBOVUxMKQorCXsKKwkJLyogRmFsbGJhY2sgdG8gYSBkZWZhdWx0IGltcGxlbWVudGF0aW9u ICovCisJCWRlZmF1bHRfdGFibGVfbW9kaWZ5X2VuZChzdGF0ZSk7CisJfQorCWVsc2UKKwkJQXNz ZXJ0KGZhbHNlKTsKK30KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBEREwgcmVsYXRlZCBmdW5j dGlvbmFsaXR5LgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvZXhlY3V0b3IvdHVwdGFibGUuaCBi L3NyYy9pbmNsdWRlL2V4ZWN1dG9yL3R1cHRhYmxlLmgKaW5kZXggYjgyNjU1ZTdlNS4uNjk0MDky MTA3OCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvZXhlY3V0b3IvdHVwdGFibGUuaAorKysgYi9z cmMvaW5jbHVkZS9leGVjdXRvci90dXB0YWJsZS5oCkBAIC0yNDcsNiArMjQ3LDEyIEBAIHR5cGVk ZWYgc3RydWN0IFZpcnR1YWxUdXBsZVRhYmxlU2xvdAogCiAJVHVwbGVUYWJsZVNsb3QgYmFzZTsK IAorCS8qCisJICogVG90YWwgc2l6ZSBvZiBhbGwgYXR0cmlidXRlcyB0aGF0IHRoaXMgdmlydHVh bCBzbG90IGhvbGRzLiBDb21wdXRlZCBhbmQKKwkgKiBzZXQgZHVyaW5nIHNsb3QgbWF0ZXJpYWxp emF0aW9uLgorCSAqLworCVNpemUJCXN6OworCiAJY2hhcgkgICAqZGF0YTsJCQkvKiBkYXRhIGZv ciBtYXRlcmlhbGl6ZWQgc2xvdHMgKi8KIH0gVmlydHVhbFR1cGxlVGFibGVTbG90OwogCmRpZmYg LS1naXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2lu ZGVudC90eXBlZGVmcy5saXN0CmluZGV4IDJiODNjMzQwZmIuLjZiZmVjNDQ3NmIgMTAwNjQ0Ci0t LSBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3NyYy90b29scy9wZ2lu ZGVudC90eXBlZGVmcy5saXN0CkBAIC0xMTQwLDYgKzExNDAsOCBAQCBIZWFkbGluZUpzb25TdGF0 ZQogSGVhZGxpbmVQYXJzZWRUZXh0CiBIZWFkbGluZVdvcmRFbnRyeQogSGVhcENoZWNrQ29udGV4 dAorSGVhcEluc2VydFN0YXRlCitIZWFwTXVsdGlJbnNlcnRTdGF0ZQogSGVhcFBhZ2VGcmVlemUK IEhlYXBTY2FuRGVzYwogSGVhcFR1cGxlCkBAIC0yODYwLDYgKzI4NjIsNyBAQCBUYWJsZUZ1bmNT Y2FuU3RhdGUKIFRhYmxlRnVuY1R5cGUKIFRhYmxlSW5mbwogVGFibGVMaWtlQ2xhdXNlCitUYWJs ZU1vZGlmeVN0YXRlCiBUYWJsZVNhbXBsZUNsYXVzZQogVGFibGVTY2FuRGVzYwogVGFibGVTY2Fu RGVzY0RhdGEKLS0gCjIuMzQuMQoK --00000000000084f79d06187909b6 Content-Type: application/octet-stream; name="v21-0002-Optimize-CTAS-CMV-RMV-and-TABLE-REWRITES-with-mu.patch" Content-Disposition: attachment; filename="v21-0002-Optimize-CTAS-CMV-RMV-and-TABLE-REWRITES-with-mu.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lw7hlobu1 RnJvbSBiYzU1NGVjNDUxNDYxY2MyZGZiZGVmZmYwNGIxNzFkMWIyY2UyZmRjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBCaGFyYXRoIFJ1cGlyZWRkeSA8YmhhcmF0aC5ydXBpcmVkZHlm b3Jwb3N0Z3Jlc0BnbWFpbC5jb20+CkRhdGU6IFdlZCwgMTUgTWF5IDIwMjQgMDU6NDI6NTggKzAw MDAKU3ViamVjdDogW1BBVENIIHYyMSAyLzVdIE9wdGltaXplIENUQVMsIENNViwgUk1WIGFuZCBU QUJMRSBSRVdSSVRFUyB3aXRoIG11bHRpCiBpbnNlcnRzCgotLS0KIHNyYy9iYWNrZW5kL2NvbW1h bmRzL2NyZWF0ZWFzLmMgIHwgMjcgKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tCiBzcmMvYmFj a2VuZC9jb21tYW5kcy9tYXR2aWV3LmMgICB8IDI2ICsrKysrKysrKysrLS0tLS0tLS0tLS0tLS0t CiBzcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYyB8IDMxICsrKysrKysrKysrLS0tLS0t LS0tLS0tLS0tLS0tLS0KIDMgZmlsZXMgY2hhbmdlZCwgMzMgaW5zZXJ0aW9ucygrKSwgNTEgZGVs ZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvY3JlYXRlYXMuYyBi L3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NyZWF0ZWFzLmMKaW5kZXggNjIwNTBmNGRjNS4uMmQ2ZmZm YmYwNyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvY3JlYXRlYXMuYworKysgYi9z cmMvYmFja2VuZC9jb21tYW5kcy9jcmVhdGVhcy5jCkBAIC01Myw5ICs1Myw3IEBAIHR5cGVkZWYg c3RydWN0CiAJLyogVGhlc2UgZmllbGRzIGFyZSBmaWxsZWQgYnkgaW50b3JlbF9zdGFydHVwOiAq LwogCVJlbGF0aW9uCXJlbDsJCQkvKiByZWxhdGlvbiB0byB3cml0ZSB0byAqLwogCU9iamVjdEFk ZHJlc3MgcmVsYWRkcjsJCS8qIGFkZHJlc3Mgb2YgcmVsLCBmb3IgRXhlY0NyZWF0ZVRhYmxlQXMg Ki8KLQlDb21tYW5kSWQJb3V0cHV0X2NpZDsJCS8qIGNtaW4gdG8gaW5zZXJ0IGluIG91dHB1dCB0 dXBsZXMgKi8KLQlpbnQJCQl0aV9vcHRpb25zOwkJLyogdGFibGVfdHVwbGVfaW5zZXJ0IHBlcmZv cm1hbmNlIG9wdGlvbnMgKi8KLQlCdWxrSW5zZXJ0U3RhdGUgYmlzdGF0ZTsJLyogYnVsayBpbnNl cnQgc3RhdGUgKi8KKwlUYWJsZU1vZGlmeVN0YXRlICptc3RhdGU7CS8qIHRhYmxlIGluc2VydCBz dGF0ZSAqLwogfSBEUl9pbnRvcmVsOwogCiAvKiB1dGlsaXR5IGZ1bmN0aW9ucyBmb3IgQ1RBUyBk ZWZpbml0aW9uIGNyZWF0aW9uICovCkBAIC01NTIsMTcgKzU1MCwyMSBAQCBpbnRvcmVsX3N0YXJ0 dXAoRGVzdFJlY2VpdmVyICpzZWxmLCBpbnQgb3BlcmF0aW9uLCBUdXBsZURlc2MgdHlwZWluZm8p CiAJICovCiAJbXlTdGF0ZS0+cmVsID0gaW50b1JlbGF0aW9uRGVzYzsKIAlteVN0YXRlLT5yZWxh ZGRyID0gaW50b1JlbGF0aW9uQWRkcjsKLQlteVN0YXRlLT5vdXRwdXRfY2lkID0gR2V0Q3VycmVu dENvbW1hbmRJZCh0cnVlKTsKLQlteVN0YXRlLT50aV9vcHRpb25zID0gVEFCTEVfSU5TRVJUX1NL SVBfRlNNOwogCiAJLyoKIAkgKiBJZiBXSVRIIE5PIERBVEEgaXMgc3BlY2lmaWVkLCB0aGVyZSBp cyBubyBuZWVkIHRvIHNldCB1cCB0aGUgc3RhdGUgZm9yCiAJICogYnVsayBpbnNlcnRzIGFzIHRo ZXJlIGFyZSBubyB0dXBsZXMgdG8gaW5zZXJ0LgogCSAqLwogCWlmICghaW50by0+c2tpcERhdGEp Ci0JCW15U3RhdGUtPmJpc3RhdGUgPSBHZXRCdWxrSW5zZXJ0U3RhdGUoKTsKKwkJbXlTdGF0ZS0+ bXN0YXRlID0gdGFibGVfbW9kaWZ5X2JlZ2luKGludG9SZWxhdGlvbkRlc2MsCisJCQkJCQkJCQkJ CSBUTV9GTEFHX01VTFRJX0lOU0VSVFMgfAorCQkJCQkJCQkJCQkgVE1fRkxBR19CQVNfQlVMS1dS SVRFLAorCQkJCQkJCQkJCQkgR2V0Q3VycmVudENvbW1hbmRJZCh0cnVlKSwKKwkJCQkJCQkJCQkJ IFRBQkxFX0lOU0VSVF9TS0lQX0ZTTSwKKwkJCQkJCQkJCQkJIE5VTEwsCisJCQkJCQkJCQkJCSBO VUxMKTsKIAllbHNlCi0JCW15U3RhdGUtPmJpc3RhdGUgPSBOVUxMOworCQlteVN0YXRlLT5tc3Rh dGUgPSBOVUxMOwogCiAJLyoKIAkgKiBWYWxpZCBzbWdyX3RhcmdibG9jayBpbXBsaWVzIHNvbWV0 aGluZyBhbHJlYWR5IHdyb3RlIHRvIHRoZSByZWxhdGlvbi4KQEAgLTU5MCwxMSArNTkyLDcgQEAg aW50b3JlbF9yZWNlaXZlKFR1cGxlVGFibGVTbG90ICpzbG90LCBEZXN0UmVjZWl2ZXIgKnNlbGYp CiAJCSAqIHdvdWxkIG5vdCBiZSBjaGVhcCBlaXRoZXIuIFRoaXMgYWxzbyBkb2Vzbid0IGFsbG93 IGFjY2Vzc2luZyBwZXItQU0KIAkJICogZGF0YSAoc2F5IGEgdHVwbGUncyB4bWluKSwgYnV0IHNp bmNlIHdlIGRvbid0IGRvIHRoYXQgaGVyZS4uLgogCQkgKi8KLQkJdGFibGVfdHVwbGVfaW5zZXJ0 KG15U3RhdGUtPnJlbCwKLQkJCQkJCSAgIHNsb3QsCi0JCQkJCQkgICBteVN0YXRlLT5vdXRwdXRf Y2lkLAotCQkJCQkJICAgbXlTdGF0ZS0+dGlfb3B0aW9ucywKLQkJCQkJCSAgIG15U3RhdGUtPmJp c3RhdGUpOworCQl0YWJsZV9tb2RpZnlfYnVmZmVyX2luc2VydChteVN0YXRlLT5tc3RhdGUsIHNs b3QpOwogCX0KIAogCS8qIFdlIGtub3cgdGhpcyBpcyBhIG5ld2x5IGNyZWF0ZWQgcmVsYXRpb24s IHNvIHRoZXJlIGFyZSBubyBpbmRleGVzICovCkBAIC02MTIsMTAgKzYxMCw3IEBAIGludG9yZWxf c2h1dGRvd24oRGVzdFJlY2VpdmVyICpzZWxmKQogCUludG9DbGF1c2UgKmludG8gPSBteVN0YXRl LT5pbnRvOwogCiAJaWYgKCFpbnRvLT5za2lwRGF0YSkKLQl7Ci0JCUZyZWVCdWxrSW5zZXJ0U3Rh dGUobXlTdGF0ZS0+YmlzdGF0ZSk7Ci0JCXRhYmxlX2ZpbmlzaF9idWxrX2luc2VydChteVN0YXRl LT5yZWwsIG15U3RhdGUtPnRpX29wdGlvbnMpOwotCX0KKwkJdGFibGVfbW9kaWZ5X2VuZChteVN0 YXRlLT5tc3RhdGUpOwogCiAJLyogY2xvc2UgcmVsLCBidXQga2VlcCBsb2NrIHVudGlsIGNvbW1p dCAqLwogCXRhYmxlX2Nsb3NlKG15U3RhdGUtPnJlbCwgTm9Mb2NrKTsKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL2NvbW1hbmRzL21hdHZpZXcuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL21hdHZp ZXcuYwppbmRleCA2ZDA5Yjc1NTU2Li5iYjk3ZTJmYTVmIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9jb21tYW5kcy9tYXR2aWV3LmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvbWF0dmlldy5j CkBAIC00OCw5ICs0OCw3IEBAIHR5cGVkZWYgc3RydWN0CiAJT2lkCQkJdHJhbnNpZW50b2lkOwkv KiBPSUQgb2YgbmV3IGhlYXAgaW50byB3aGljaCB0byBzdG9yZSAqLwogCS8qIFRoZXNlIGZpZWxk cyBhcmUgZmlsbGVkIGJ5IHRyYW5zaWVudHJlbF9zdGFydHVwOiAqLwogCVJlbGF0aW9uCXRyYW5z aWVudHJlbDsJLyogcmVsYXRpb24gdG8gd3JpdGUgdG8gKi8KLQlDb21tYW5kSWQJb3V0cHV0X2Np ZDsJCS8qIGNtaW4gdG8gaW5zZXJ0IGluIG91dHB1dCB0dXBsZXMgKi8KLQlpbnQJCQl0aV9vcHRp b25zOwkJLyogdGFibGVfdHVwbGVfaW5zZXJ0IHBlcmZvcm1hbmNlIG9wdGlvbnMgKi8KLQlCdWxr SW5zZXJ0U3RhdGUgYmlzdGF0ZTsJLyogYnVsayBpbnNlcnQgc3RhdGUgKi8KKwlUYWJsZU1vZGlm eVN0YXRlICptc3RhdGU7CS8qIHRhYmxlIGluc2VydCBzdGF0ZSAqLwogfSBEUl90cmFuc2llbnRy ZWw7CiAKIHN0YXRpYyBpbnQJbWF0dmlld19tYWludGVuYW5jZV9kZXB0aCA9IDA7CkBAIC00NTgs OSArNDU2LDE0IEBAIHRyYW5zaWVudHJlbF9zdGFydHVwKERlc3RSZWNlaXZlciAqc2VsZiwgaW50 IG9wZXJhdGlvbiwgVHVwbGVEZXNjIHR5cGVpbmZvKQogCSAqIEZpbGwgcHJpdmF0ZSBmaWVsZHMg b2YgbXlTdGF0ZSBmb3IgdXNlIGJ5IGxhdGVyIHJvdXRpbmVzCiAJICovCiAJbXlTdGF0ZS0+dHJh bnNpZW50cmVsID0gdHJhbnNpZW50cmVsOwotCW15U3RhdGUtPm91dHB1dF9jaWQgPSBHZXRDdXJy ZW50Q29tbWFuZElkKHRydWUpOwotCW15U3RhdGUtPnRpX29wdGlvbnMgPSBUQUJMRV9JTlNFUlRf U0tJUF9GU00gfCBUQUJMRV9JTlNFUlRfRlJPWkVOOwotCW15U3RhdGUtPmJpc3RhdGUgPSBHZXRC dWxrSW5zZXJ0U3RhdGUoKTsKKwlteVN0YXRlLT5tc3RhdGUgPSB0YWJsZV9tb2RpZnlfYmVnaW4o dHJhbnNpZW50cmVsLAorCQkJCQkJCQkJCSBUTV9GTEFHX01VTFRJX0lOU0VSVFMgfAorCQkJCQkJ CQkJCSBUTV9GTEFHX0JBU19CVUxLV1JJVEUsCisJCQkJCQkJCQkJIEdldEN1cnJlbnRDb21tYW5k SWQodHJ1ZSksCisJCQkJCQkJCQkJIFRBQkxFX0lOU0VSVF9TS0lQX0ZTTSB8CisJCQkJCQkJCQkJ IFRBQkxFX0lOU0VSVF9GUk9aRU4sCisJCQkJCQkJCQkJIE5VTEwsCisJCQkJCQkJCQkJIE5VTEwp OwogCiAJLyoKIAkgKiBWYWxpZCBzbWdyX3RhcmdibG9jayBpbXBsaWVzIHNvbWV0aGluZyBhbHJl YWR5IHdyb3RlIHRvIHRoZSByZWxhdGlvbi4KQEAgLTQ4NSwxMiArNDg4LDcgQEAgdHJhbnNpZW50 cmVsX3JlY2VpdmUoVHVwbGVUYWJsZVNsb3QgKnNsb3QsIERlc3RSZWNlaXZlciAqc2VsZikKIAkg KiBjaGVhcCBlaXRoZXIuIFRoaXMgYWxzbyBkb2Vzbid0IGFsbG93IGFjY2Vzc2luZyBwZXItQU0g ZGF0YSAoc2F5IGEKIAkgKiB0dXBsZSdzIHhtaW4pLCBidXQgc2luY2Ugd2UgZG9uJ3QgZG8gdGhh dCBoZXJlLi4uCiAJICovCi0KLQl0YWJsZV90dXBsZV9pbnNlcnQobXlTdGF0ZS0+dHJhbnNpZW50 cmVsLAotCQkJCQkgICBzbG90LAotCQkJCQkgICBteVN0YXRlLT5vdXRwdXRfY2lkLAotCQkJCQkg ICBteVN0YXRlLT50aV9vcHRpb25zLAotCQkJCQkgICBteVN0YXRlLT5iaXN0YXRlKTsKKwl0YWJs ZV9tb2RpZnlfYnVmZmVyX2luc2VydChteVN0YXRlLT5tc3RhdGUsIHNsb3QpOwogCiAJLyogV2Ug a25vdyB0aGlzIGlzIGEgbmV3bHkgY3JlYXRlZCByZWxhdGlvbiwgc28gdGhlcmUgYXJlIG5vIGlu ZGV4ZXMgKi8KIApAQCAtNTA1LDkgKzUwMyw3IEBAIHRyYW5zaWVudHJlbF9zaHV0ZG93bihEZXN0 UmVjZWl2ZXIgKnNlbGYpCiB7CiAJRFJfdHJhbnNpZW50cmVsICpteVN0YXRlID0gKERSX3RyYW5z aWVudHJlbCAqKSBzZWxmOwogCi0JRnJlZUJ1bGtJbnNlcnRTdGF0ZShteVN0YXRlLT5iaXN0YXRl KTsKLQotCXRhYmxlX2ZpbmlzaF9idWxrX2luc2VydChteVN0YXRlLT50cmFuc2llbnRyZWwsIG15 U3RhdGUtPnRpX29wdGlvbnMpOworCXRhYmxlX21vZGlmeV9lbmQobXlTdGF0ZS0+bXN0YXRlKTsK IAogCS8qIGNsb3NlIHRyYW5zaWVudHJlbCwgYnV0IGtlZXAgbG9jayB1bnRpbCBjb21taXQgKi8K IAl0YWJsZV9jbG9zZShteVN0YXRlLT50cmFuc2llbnRyZWwsIE5vTG9jayk7CmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRz L3RhYmxlY21kcy5jCmluZGV4IDc5YzljMDMxODMuLmJmNjQ0OWU5NTcgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRz L3RhYmxlY21kcy5jCkBAIC01OTczLDEwICs1OTczLDggQEAgQVRSZXdyaXRlVGFibGUoQWx0ZXJl ZFRhYmxlSW5mbyAqdGFiLCBPaWQgT0lETmV3SGVhcCwgTE9DS01PREUgbG9ja21vZGUpCiAJaW50 CQkJaTsKIAlMaXN0Q2VsbCAgICpsOwogCUVTdGF0ZQkgICAqZXN0YXRlOwotCUNvbW1hbmRJZAlt eWNpZDsKLQlCdWxrSW5zZXJ0U3RhdGUgYmlzdGF0ZTsKLQlpbnQJCQl0aV9vcHRpb25zOwogCUV4 cHJTdGF0ZSAgKnBhcnRxdWFsc3RhdGUgPSBOVUxMOworCVRhYmxlTW9kaWZ5U3RhdGUgKm1zdGF0 ZSA9IE5VTEw7CiAKIAkvKgogCSAqIE9wZW4gdGhlIHJlbGF0aW9uKHMpLiAgV2UgaGF2ZSBzdXJl bHkgYWxyZWFkeSBsb2NrZWQgdGhlIGV4aXN0aW5nCkBAIC01OTk1LDE4ICs1OTkzLDE1IEBAIEFU UmV3cml0ZVRhYmxlKEFsdGVyZWRUYWJsZUluZm8gKnRhYiwgT2lkIE9JRE5ld0hlYXAsIExPQ0tN T0RFIGxvY2ttb2RlKQogCSAqIFByZXBhcmUgYSBCdWxrSW5zZXJ0U3RhdGUgYW5kIG9wdGlvbnMg Zm9yIHRhYmxlX3R1cGxlX2luc2VydC4gIFRoZSBGU00KIAkgKiBpcyBlbXB0eSwgc28gZG9uJ3Qg Ym90aGVyIHVzaW5nIGl0LgogCSAqLwotCWlmIChuZXdyZWwpCisJaWYgKG5ld3JlbCAmJiBtc3Rh dGUgPT0gTlVMTCkKIAl7Ci0JCW15Y2lkID0gR2V0Q3VycmVudENvbW1hbmRJZCh0cnVlKTsKLQkJ YmlzdGF0ZSA9IEdldEJ1bGtJbnNlcnRTdGF0ZSgpOwotCQl0aV9vcHRpb25zID0gVEFCTEVfSU5T RVJUX1NLSVBfRlNNOwotCX0KLQllbHNlCi0JewotCQkvKiBrZWVwIGNvbXBpbGVyIHF1aWV0IGFi b3V0IHVzaW5nIHRoZXNlIHVuaW5pdGlhbGl6ZWQgKi8KLQkJbXljaWQgPSAwOwotCQliaXN0YXRl ID0gTlVMTDsKLQkJdGlfb3B0aW9ucyA9IDA7CisJCW1zdGF0ZSA9IHRhYmxlX21vZGlmeV9iZWdp bihuZXdyZWwsCisJCQkJCQkJCQlUTV9GTEFHX01VTFRJX0lOU0VSVFMgfAorCQkJCQkJCQkJVE1f RkxBR19CQVNfQlVMS1dSSVRFLAorCQkJCQkJCQkJR2V0Q3VycmVudENvbW1hbmRJZCh0cnVlKSwK KwkJCQkJCQkJCVRBQkxFX0lOU0VSVF9TS0lQX0ZTTSwKKwkJCQkJCQkJCU5VTEwsCisJCQkJCQkJ CQlOVUxMKTsKIAl9CiAKIAkvKgpAQCAtNjMwNCw4ICs2Mjk5LDcgQEAgQVRSZXdyaXRlVGFibGUo QWx0ZXJlZFRhYmxlSW5mbyAqdGFiLCBPaWQgT0lETmV3SGVhcCwgTE9DS01PREUgbG9ja21vZGUp CiAKIAkJCS8qIFdyaXRlIHRoZSB0dXBsZSBvdXQgdG8gdGhlIG5ldyByZWxhdGlvbiAqLwogCQkJ aWYgKG5ld3JlbCkKLQkJCQl0YWJsZV90dXBsZV9pbnNlcnQobmV3cmVsLCBpbnNlcnRzbG90LCBt eWNpZCwKLQkJCQkJCQkJICAgdGlfb3B0aW9ucywgYmlzdGF0ZSk7CisJCQkJdGFibGVfbW9kaWZ5 X2J1ZmZlcl9pbnNlcnQobXN0YXRlLCBpbnNlcnRzbG90KTsKIAogCQkJUmVzZXRFeHByQ29udGV4 dChlY29udGV4dCk7CiAKQEAgLTYzMjYsMTAgKzYzMjAsNyBAQCBBVFJld3JpdGVUYWJsZShBbHRl cmVkVGFibGVJbmZvICp0YWIsIE9pZCBPSUROZXdIZWFwLCBMT0NLTU9ERSBsb2NrbW9kZSkKIAl0 YWJsZV9jbG9zZShvbGRyZWwsIE5vTG9jayk7CiAJaWYgKG5ld3JlbCkKIAl7Ci0JCUZyZWVCdWxr SW5zZXJ0U3RhdGUoYmlzdGF0ZSk7Ci0KLQkJdGFibGVfZmluaXNoX2J1bGtfaW5zZXJ0KG5ld3Jl bCwgdGlfb3B0aW9ucyk7Ci0KKwkJdGFibGVfbW9kaWZ5X2VuZChtc3RhdGUpOwogCQl0YWJsZV9j bG9zZShuZXdyZWwsIE5vTG9jayk7CiAJfQogfQotLSAKMi4zNC4xCgo= --00000000000084f79d06187909b6 Content-Type: application/octet-stream; name="v21-0003-Optimize-INSERT-INTO-.-SELECT-with-multi-inserts.patch" Content-Disposition: attachment; filename="v21-0003-Optimize-INSERT-INTO-.-SELECT-with-multi-inserts.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lw7hlr6b2 RnJvbSA4MDE5NmVlZDVhMzUyNzcwZjdhMTg5M2ZmYTIyZDk4MDE1NjliZjE2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBCaGFyYXRoIFJ1cGlyZWRkeSA8YmhhcmF0aC5ydXBpcmVkZHlm b3Jwb3N0Z3Jlc0BnbWFpbC5jb20+CkRhdGU6IFdlZCwgMTUgTWF5IDIwMjQgMDU6NDM6MjUgKzAw MDAKU3ViamVjdDogW1BBVENIIHYyMSAzLzVdIE9wdGltaXplIElOU0VSVCBJTlRPIC4uLiBTRUxF Q1Qgd2l0aCBtdWx0aSBpbnNlcnRzCgotLS0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNb2Rp ZnlUYWJsZS5jIHwgMTcwICsrKysrKysrKysrKysrKysrKysrKystLS0KIHNyYy90b29scy9wZ2lu ZGVudC90eXBlZGVmcy5saXN0ICAgICAgIHwgICAxICsKIDIgZmlsZXMgY2hhbmdlZCwgMTUzIGlu c2VydGlvbnMoKyksIDE4IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4 ZWN1dG9yL25vZGVNb2RpZnlUYWJsZS5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1vZGlm eVRhYmxlLmMKaW5kZXggY2VlNjBkMzY1OS4uY2QwNDRjOWRlZSAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvZXhlY3V0b3Ivbm9kZU1vZGlmeVRhYmxlLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0 b3Ivbm9kZU1vZGlmeVRhYmxlLmMKQEAgLTExNCw2ICsxMTQsMTggQEAgdHlwZWRlZiBzdHJ1Y3Qg VXBkYXRlQ29udGV4dAogCUxvY2tUdXBsZU1vZGUgbG9ja21vZGU7CiB9IFVwZGF0ZUNvbnRleHQ7 CiAKK3R5cGVkZWYgc3RydWN0IEluc2VydE1vZGlmeUJ1ZmZlckZsdXNoQ29udGV4dAoreworCVJl c3VsdFJlbEluZm8gKnJlc3VsdFJlbEluZm87CisJRVN0YXRlCSAgICplc3RhdGU7CisJTW9kaWZ5 VGFibGVTdGF0ZSAqbXRzdGF0ZTsKK30gSW5zZXJ0TW9kaWZ5QnVmZmVyRmx1c2hDb250ZXh0Owor CitzdGF0aWMgSW5zZXJ0TW9kaWZ5QnVmZmVyRmx1c2hDb250ZXh0ICppbnNlcnRfbW9kaWZ5X2J1 ZmZlcl9mbHVzaF9jb250ZXh0ID0gTlVMTDsKK3N0YXRpYyBUYWJsZU1vZGlmeVN0YXRlICp0YWJs ZV9tb2RpZnlfc3RhdGUgPSBOVUxMOworCitzdGF0aWMgdm9pZCBJbnNlcnRNb2RpZnlCdWZmZXJG bHVzaENhbGxiYWNrKHZvaWQgKmNvbnRleHQsCisJCQkJCQkJCQkJCVR1cGxlVGFibGVTbG90ICpz bG90KTsKIAogc3RhdGljIHZvaWQgRXhlY0JhdGNoSW5zZXJ0KE1vZGlmeVRhYmxlU3RhdGUgKm10 c3RhdGUsCiAJCQkJCQkJUmVzdWx0UmVsSW5mbyAqcmVzdWx0UmVsSW5mbywKQEAgLTcyNiw2ICs3 MzgsNTUgQEAgRXhlY0dldFVwZGF0ZU5ld1R1cGxlKFJlc3VsdFJlbEluZm8gKnJlbGluZm8sCiAJ cmV0dXJuIEV4ZWNQcm9qZWN0KG5ld1Byb2opOwogfQogCitzdGF0aWMgdm9pZAorSW5zZXJ0TW9k aWZ5QnVmZmVyRmx1c2hDYWxsYmFjayh2b2lkICpjb250ZXh0LCBUdXBsZVRhYmxlU2xvdCAqc2xv dCkKK3sKKwlJbnNlcnRNb2RpZnlCdWZmZXJGbHVzaENvbnRleHQgKmN0eCA9IChJbnNlcnRNb2Rp ZnlCdWZmZXJGbHVzaENvbnRleHQgKikgY29udGV4dDsKKwlSZXN1bHRSZWxJbmZvICpyZXN1bHRS ZWxJbmZvID0gY3R4LT5yZXN1bHRSZWxJbmZvOworCUVTdGF0ZQkgICAqZXN0YXRlID0gY3R4LT5l c3RhdGU7CisJTW9kaWZ5VGFibGVTdGF0ZSAqbXRzdGF0ZSA9IGN0eC0+bXRzdGF0ZTsKKworCS8q IFF1aWNrIGV4aXQgaWYgbm8gaW5kZXhlcyBvciBubyB0cmlnZ2VycyAqLworCWlmICghKHJlc3Vs dFJlbEluZm8tPnJpX051bUluZGljZXMgPiAwIHx8CisJCSAgKHJlc3VsdFJlbEluZm8tPnJpX1Ry aWdEZXNjICE9IE5VTEwgJiYKKwkJICAgKHJlc3VsdFJlbEluZm8tPnJpX1RyaWdEZXNjLT50cmln X2luc2VydF9hZnRlcl9yb3cgfHwKKwkJCXJlc3VsdFJlbEluZm8tPnJpX1RyaWdEZXNjLT50cmln X2luc2VydF9uZXdfdGFibGUpKSkpCisJCXJldHVybjsKKworCS8qIENhbGxlciBtdXN0IHRha2Ug Y2FyZSBvZiBvcGVuaW5nIGFuZCBjbG9zaW5nIHRoZSBpbmRpY2VzICovCisKKwkvKgorCSAqIElm IHRoZXJlIGFyZSBhbnkgaW5kZXhlcywgdXBkYXRlIHRoZW0gZm9yIGFsbCB0aGUgaW5zZXJ0ZWQg dHVwbGVzLCBhbmQKKwkgKiBydW4gQUZURVIgUk9XIElOU0VSVCB0cmlnZ2Vycy4KKwkgKi8KKwlp ZiAocmVzdWx0UmVsSW5mby0+cmlfTnVtSW5kaWNlcyA+IDApCisJeworCQlMaXN0CSAgICpyZWNo ZWNrSW5kZXhlczsKKworCQlyZWNoZWNrSW5kZXhlcyA9CisJCQlFeGVjSW5zZXJ0SW5kZXhUdXBs ZXMocmVzdWx0UmVsSW5mbywKKwkJCQkJCQkJICBzbG90LCBlc3RhdGUsIGZhbHNlLAorCQkJCQkJ CQkgIGZhbHNlLCBOVUxMLCBOSUwsIGZhbHNlKTsKKwkJRXhlY0FSSW5zZXJ0VHJpZ2dlcnMoZXN0 YXRlLCByZXN1bHRSZWxJbmZvLAorCQkJCQkJCSBzbG90LCByZWNoZWNrSW5kZXhlcywKKwkJCQkJ CQkgbXRzdGF0ZS0+bXRfdHJhbnNpdGlvbl9jYXB0dXJlKTsKKwkJbGlzdF9mcmVlKHJlY2hlY2tJ bmRleGVzKTsKKwl9CisKKwkvKgorCSAqIFRoZXJlJ3Mgbm8gaW5kZXhlcywgYnV0IHNlZSBpZiB3 ZSBuZWVkIHRvIHJ1biBBRlRFUiBST1cgSU5TRVJUIHRyaWdnZXJzCisJICogYW55d2F5LgorCSAq LworCWVsc2UgaWYgKHJlc3VsdFJlbEluZm8tPnJpX1RyaWdEZXNjICE9IE5VTEwgJiYKKwkJCSAo cmVzdWx0UmVsSW5mby0+cmlfVHJpZ0Rlc2MtPnRyaWdfaW5zZXJ0X2FmdGVyX3JvdyB8fAorCQkJ ICByZXN1bHRSZWxJbmZvLT5yaV9UcmlnRGVzYy0+dHJpZ19pbnNlcnRfbmV3X3RhYmxlKSkKKwl7 CisJCUV4ZWNBUkluc2VydFRyaWdnZXJzKGVzdGF0ZSwgcmVzdWx0UmVsSW5mbywKKwkJCQkJCQkg c2xvdCwgTklMLAorCQkJCQkJCSBtdHN0YXRlLT5tdF90cmFuc2l0aW9uX2NhcHR1cmUpOworCX0K K30KKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQogICoJCUV4ZWNJbnNlcnQKICAqCkBAIC03NTEsNyArODEyLDggQEAg RXhlY0luc2VydChNb2RpZnlUYWJsZUNvbnRleHQgKmNvbnRleHQsCiAJCSAgIFR1cGxlVGFibGVT bG90ICpzbG90LAogCQkgICBib29sIGNhblNldFRhZywKIAkJICAgVHVwbGVUYWJsZVNsb3QgKipp bnNlcnRlZF90dXBsZSwKLQkJICAgUmVzdWx0UmVsSW5mbyAqKmluc2VydF9kZXN0cmVsKQorCQkg ICBSZXN1bHRSZWxJbmZvICoqaW5zZXJ0X2Rlc3RyZWwsCisJCSAgIGJvb2wgY2FuTXVsdGlJbnNl cnQpCiB7CiAJTW9kaWZ5VGFibGVTdGF0ZSAqbXRzdGF0ZSA9IGNvbnRleHQtPm10c3RhdGU7CiAJ RVN0YXRlCSAgICplc3RhdGUgPSBjb250ZXh0LT5lc3RhdGU7CkBAIC03NjQsNiArODI2LDcgQEAg RXhlY0luc2VydChNb2RpZnlUYWJsZUNvbnRleHQgKmNvbnRleHQsCiAJT25Db25mbGljdEFjdGlv biBvbmNvbmZsaWN0ID0gbm9kZS0+b25Db25mbGljdEFjdGlvbjsKIAlQYXJ0aXRpb25UdXBsZVJv dXRpbmcgKnByb3V0ZSA9IG10c3RhdGUtPm10X3BhcnRpdGlvbl90dXBsZV9yb3V0aW5nOwogCU1l bW9yeUNvbnRleHQgb2xkQ29udGV4dDsKKwlib29sCQlhcl9pbnNlcnRfdHJpZ2dlcnNfZXhlY3V0 ZWQgPSBmYWxzZTsKIAogCS8qCiAJICogSWYgdGhlIGlucHV0IHJlc3VsdCByZWxhdGlvbiBpcyBh IHBhcnRpdGlvbmVkIHRhYmxlLCBmaW5kIHRoZSBsZWFmCkBAIC0xMTI2LDE3ICsxMTg5LDUzIEBA IEV4ZWNJbnNlcnQoTW9kaWZ5VGFibGVDb250ZXh0ICpjb250ZXh0LAogCQl9CiAJCWVsc2UKIAkJ ewotCQkJLyogaW5zZXJ0IHRoZSB0dXBsZSBub3JtYWxseSAqLwotCQkJdGFibGVfdHVwbGVfaW5z ZXJ0KHJlc3VsdFJlbGF0aW9uRGVzYywgc2xvdCwKLQkJCQkJCQkgICBlc3RhdGUtPmVzX291dHB1 dF9jaWQsCi0JCQkJCQkJICAgMCwgTlVMTCk7CisJCQlpZiAoY2FuTXVsdGlJbnNlcnQgJiYKKwkJ CQlwcm91dGUgPT0gTlVMTCAmJgorCQkJCXJlc3VsdFJlbEluZm8tPnJpX1dpdGhDaGVja09wdGlv bnMgPT0gTklMICYmCisJCQkJcmVzdWx0UmVsSW5mby0+cmlfcHJvamVjdFJldHVybmluZyA9PSBO VUxMKQorCQkJeworCQkJCWlmIChpbnNlcnRfbW9kaWZ5X2J1ZmZlcl9mbHVzaF9jb250ZXh0ID09 IE5VTEwpCisJCQkJeworCQkJCQlpbnNlcnRfbW9kaWZ5X2J1ZmZlcl9mbHVzaF9jb250ZXh0ID0K KwkJCQkJCShJbnNlcnRNb2RpZnlCdWZmZXJGbHVzaENvbnRleHQgKikgcGFsbG9jMChzaXplb2Yo SW5zZXJ0TW9kaWZ5QnVmZmVyRmx1c2hDb250ZXh0KSk7CisJCQkJCWluc2VydF9tb2RpZnlfYnVm ZmVyX2ZsdXNoX2NvbnRleHQtPnJlc3VsdFJlbEluZm8gPSByZXN1bHRSZWxJbmZvOworCQkJCQlp bnNlcnRfbW9kaWZ5X2J1ZmZlcl9mbHVzaF9jb250ZXh0LT5lc3RhdGUgPSBlc3RhdGU7CisJCQkJ CWluc2VydF9tb2RpZnlfYnVmZmVyX2ZsdXNoX2NvbnRleHQtPm10c3RhdGUgPSBtdHN0YXRlOwor CQkJCX0KIAotCQkJLyogaW5zZXJ0IGluZGV4IGVudHJpZXMgZm9yIHR1cGxlICovCi0JCQlpZiAo cmVzdWx0UmVsSW5mby0+cmlfTnVtSW5kaWNlcyA+IDApCi0JCQkJcmVjaGVja0luZGV4ZXMgPSBF eGVjSW5zZXJ0SW5kZXhUdXBsZXMocmVzdWx0UmVsSW5mbywKLQkJCQkJCQkJCQkJCQkgICBzbG90 LCBlc3RhdGUsIGZhbHNlLAotCQkJCQkJCQkJCQkJCSAgIGZhbHNlLCBOVUxMLCBOSUwsCi0JCQkJ CQkJCQkJCQkJICAgZmFsc2UpOworCQkJCWlmICh0YWJsZV9tb2RpZnlfc3RhdGUgPT0gTlVMTCkK KwkJCQl7CisJCQkJCXRhYmxlX21vZGlmeV9zdGF0ZSA9IHRhYmxlX21vZGlmeV9iZWdpbihyZXN1 bHRSZWxJbmZvLT5yaV9SZWxhdGlvbkRlc2MsCisJCQkJCQkJCQkJCQkJCQlUTV9GTEFHX01VTFRJ X0lOU0VSVFMsCisJCQkJCQkJCQkJCQkJCQllc3RhdGUtPmVzX291dHB1dF9jaWQsCisJCQkJCQkJ CQkJCQkJCQkwLAorCQkJCQkJCQkJCQkJCQkJSW5zZXJ0TW9kaWZ5QnVmZmVyRmx1c2hDYWxsYmFj aywKKwkJCQkJCQkJCQkJCQkJCWluc2VydF9tb2RpZnlfYnVmZmVyX2ZsdXNoX2NvbnRleHQpOwor CQkJCX0KKworCQkJCXRhYmxlX21vZGlmeV9idWZmZXJfaW5zZXJ0KHRhYmxlX21vZGlmeV9zdGF0 ZSwgc2xvdCk7CisJCQkJYXJfaW5zZXJ0X3RyaWdnZXJzX2V4ZWN1dGVkID0gdHJ1ZTsKKwkJCX0K KwkJCWVsc2UKKwkJCXsKKwkJCQkvKiBpbnNlcnQgdGhlIHR1cGxlIG5vcm1hbGx5ICovCisJCQkJ dGFibGVfdHVwbGVfaW5zZXJ0KHJlc3VsdFJlbGF0aW9uRGVzYywgc2xvdCwKKwkJCQkJCQkJICAg ZXN0YXRlLT5lc19vdXRwdXRfY2lkLAorCQkJCQkJCQkgICAwLCBOVUxMKTsKKworCQkJCS8qIGlu c2VydCBpbmRleCBlbnRyaWVzIGZvciB0dXBsZSAqLworCQkJCWlmIChyZXN1bHRSZWxJbmZvLT5y aV9OdW1JbmRpY2VzID4gMCkKKwkJCQkJcmVjaGVja0luZGV4ZXMgPSBFeGVjSW5zZXJ0SW5kZXhU dXBsZXMocmVzdWx0UmVsSW5mbywKKwkJCQkJCQkJCQkJCQkJICAgc2xvdCwgZXN0YXRlLCBmYWxz ZSwKKwkJCQkJCQkJCQkJCQkJICAgZmFsc2UsIE5VTEwsIE5JTCwKKwkJCQkJCQkJCQkJCQkJICAg ZmFsc2UpOworCisJCQkJRXhlY0FSSW5zZXJ0VHJpZ2dlcnMoZXN0YXRlLCByZXN1bHRSZWxJbmZv LCBzbG90LCByZWNoZWNrSW5kZXhlcywKKwkJCQkJCQkJCSBtdHN0YXRlLT5tdF90cmFuc2l0aW9u X2NhcHR1cmUpOworCisJCQkJbGlzdF9mcmVlKHJlY2hlY2tJbmRleGVzKTsKKwkJCQlhcl9pbnNl cnRfdHJpZ2dlcnNfZXhlY3V0ZWQgPSB0cnVlOworCQkJfQogCQl9CiAJfQogCkBAIC0xMTcwLDEw ICsxMjY5LDEyIEBAIEV4ZWNJbnNlcnQoTW9kaWZ5VGFibGVDb250ZXh0ICpjb250ZXh0LAogCX0K IAogCS8qIEFGVEVSIFJPVyBJTlNFUlQgVHJpZ2dlcnMgKi8KLQlFeGVjQVJJbnNlcnRUcmlnZ2Vy cyhlc3RhdGUsIHJlc3VsdFJlbEluZm8sIHNsb3QsIHJlY2hlY2tJbmRleGVzLAotCQkJCQkJIGFy X2luc2VydF90cmlnX3Rjcyk7Ci0KLQlsaXN0X2ZyZWUocmVjaGVja0luZGV4ZXMpOworCWlmICgh YXJfaW5zZXJ0X3RyaWdnZXJzX2V4ZWN1dGVkKQorCXsKKwkJRXhlY0FSSW5zZXJ0VHJpZ2dlcnMo ZXN0YXRlLCByZXN1bHRSZWxJbmZvLCBzbG90LCByZWNoZWNrSW5kZXhlcywKKwkJCQkJCQkgYXJf aW5zZXJ0X3RyaWdfdGNzKTsKKwkJbGlzdF9mcmVlKHJlY2hlY2tJbmRleGVzKTsKKwl9CiAKIAkv KgogCSAqIENoZWNrIGFueSBXSVRIIENIRUNLIE9QVElPTiBjb25zdHJhaW50cyBmcm9tIHBhcmVu dCB2aWV3cy4gIFdlIGFyZQpAQCAtMTg2OSw3ICsxOTcwLDcgQEAgRXhlY0Nyb3NzUGFydGl0aW9u VXBkYXRlKE1vZGlmeVRhYmxlQ29udGV4dCAqY29udGV4dCwKIAkvKiBUdXBsZSByb3V0aW5nIHN0 YXJ0cyBmcm9tIHRoZSByb290IHRhYmxlLiAqLwogCWNvbnRleHQtPmNwVXBkYXRlUmV0dXJuaW5n U2xvdCA9CiAJCUV4ZWNJbnNlcnQoY29udGV4dCwgbXRzdGF0ZS0+cm9vdFJlc3VsdFJlbEluZm8s IHNsb3QsIGNhblNldFRhZywKLQkJCQkgICBpbnNlcnRlZF90dXBsZSwgaW5zZXJ0X2Rlc3RyZWwp OworCQkJCSAgIGluc2VydGVkX3R1cGxlLCBpbnNlcnRfZGVzdHJlbCwgZmFsc2UpOwogCiAJLyoK IAkgKiBSZXNldCB0aGUgdHJhbnNpdGlvbiBzdGF0ZSB0aGF0IG1heSBwb3NzaWJseSBoYXZlIGJl ZW4gd3JpdHRlbiBieQpAQCAtMzM2NCw3ICszNDY1LDcgQEAgRXhlY01lcmdlTm90TWF0Y2hlZChN b2RpZnlUYWJsZUNvbnRleHQgKmNvbnRleHQsIFJlc3VsdFJlbEluZm8gKnJlc3VsdFJlbEluZm8s CiAJCQkJbXRzdGF0ZS0+bXRfbWVyZ2VfYWN0aW9uID0gYWN0aW9uOwogCiAJCQkJcnNsb3QgPSBF eGVjSW5zZXJ0KGNvbnRleHQsIG10c3RhdGUtPnJvb3RSZXN1bHRSZWxJbmZvLAotCQkJCQkJCQkg ICBuZXdzbG90LCBjYW5TZXRUYWcsIE5VTEwsIE5VTEwpOworCQkJCQkJCQkgICBuZXdzbG90LCBj YW5TZXRUYWcsIE5VTEwsIE5VTEwsIGZhbHNlKTsKIAkJCQltdHN0YXRlLT5tdF9tZXJnZV9pbnNl cnRlZCArPSAxOwogCQkJCWJyZWFrOwogCQkJY2FzZSBDTURfTk9USElORzoKQEAgLTM3NDksNiAr Mzg1MCwxMCBAQCBFeGVjTW9kaWZ5VGFibGUoUGxhblN0YXRlICpwc3RhdGUpCiAJSGVhcFR1cGxl RGF0YSBvbGR0dXBkYXRhOwogCUhlYXBUdXBsZQlvbGR0dXBsZTsKIAlJdGVtUG9pbnRlciB0dXBs ZWlkOworCWJvb2wJCWNhbk11bHRpSW5zZXJ0ID0gZmFsc2U7CisKKwl0YWJsZV9tb2RpZnlfc3Rh dGUgPSBOVUxMOworCWluc2VydF9tb2RpZnlfYnVmZmVyX2ZsdXNoX2NvbnRleHQgPSBOVUxMOwog CiAJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKIApAQCAtMzg0NCw2ICszOTQ5LDEwIEBAIEV4ZWNN b2RpZnlUYWJsZShQbGFuU3RhdGUgKnBzdGF0ZSkKIAkJaWYgKFR1cElzTnVsbChjb250ZXh0LnBs YW5TbG90KSkKIAkJCWJyZWFrOwogCisJCWlmIChvcGVyYXRpb24gPT0gQ01EX0lOU0VSVCAmJgor CQkJbm9kZVRhZyhzdWJwbGFuc3RhdGUpID09IFRfU2VxU2NhblN0YXRlKQorCQkJY2FuTXVsdGlJ bnNlcnQgPSB0cnVlOworCiAJCS8qCiAJCSAqIFdoZW4gdGhlcmUgYXJlIG11bHRpcGxlIHJlc3Vs dCByZWxhdGlvbnMsIGVhY2ggdHVwbGUgY29udGFpbnMgYQogCQkgKiBqdW5rIGNvbHVtbiB0aGF0 IGdpdmVzIHRoZSBPSUQgb2YgdGhlIHJlbCBmcm9tIHdoaWNoIGl0IGNhbWUuCkBAIC00MDU3LDcg KzQxNjYsNyBAQCBFeGVjTW9kaWZ5VGFibGUoUGxhblN0YXRlICpwc3RhdGUpCiAJCQkJCUV4ZWNJ bml0SW5zZXJ0UHJvamVjdGlvbihub2RlLCByZXN1bHRSZWxJbmZvKTsKIAkJCQlzbG90ID0gRXhl Y0dldEluc2VydE5ld1R1cGxlKHJlc3VsdFJlbEluZm8sIGNvbnRleHQucGxhblNsb3QpOwogCQkJ CXNsb3QgPSBFeGVjSW5zZXJ0KCZjb250ZXh0LCByZXN1bHRSZWxJbmZvLCBzbG90LAotCQkJCQkJ CQkgIG5vZGUtPmNhblNldFRhZywgTlVMTCwgTlVMTCk7CisJCQkJCQkJCSAgbm9kZS0+Y2FuU2V0 VGFnLCBOVUxMLCBOVUxMLCBjYW5NdWx0aUluc2VydCk7CiAJCQkJYnJlYWs7CiAKIAkJCWNhc2Ug Q01EX1VQREFURToKQEAgLTQxMTYsNiArNDIyNSwxNyBAQCBFeGVjTW9kaWZ5VGFibGUoUGxhblN0 YXRlICpwc3RhdGUpCiAJCQlyZXR1cm4gc2xvdDsKIAl9CiAKKwlpZiAodGFibGVfbW9kaWZ5X3N0 YXRlICE9IE5VTEwpCisJeworCQlBc3NlcnQob3BlcmF0aW9uID09IENNRF9JTlNFUlQpOworCisJ CXRhYmxlX21vZGlmeV9lbmQodGFibGVfbW9kaWZ5X3N0YXRlKTsKKwkJdGFibGVfbW9kaWZ5X3N0 YXRlID0gTlVMTDsKKworCQlwZnJlZShpbnNlcnRfbW9kaWZ5X2J1ZmZlcl9mbHVzaF9jb250ZXh0 KTsKKwkJaW5zZXJ0X21vZGlmeV9idWZmZXJfZmx1c2hfY29udGV4dCA9IE5VTEw7CisJfQorCiAJ LyoKIAkgKiBJbnNlcnQgcmVtYWluaW5nIHR1cGxlcyBmb3IgYmF0Y2ggaW5zZXJ0LgogCSAqLwpA QCAtNDIyOCw2ICs0MzQ4LDkgQEAgRXhlY0luaXRNb2RpZnlUYWJsZShNb2RpZnlUYWJsZSAqbm9k ZSwgRVN0YXRlICplc3RhdGUsIGludCBlZmxhZ3MpCiAJbXRzdGF0ZS0+bXRfbWVyZ2VfdXBkYXRl ZCA9IDA7CiAJbXRzdGF0ZS0+bXRfbWVyZ2VfZGVsZXRlZCA9IDA7CiAKKwl0YWJsZV9tb2RpZnlf c3RhdGUgPSBOVUxMOworCWluc2VydF9tb2RpZnlfYnVmZmVyX2ZsdXNoX2NvbnRleHQgPSBOVUxM OworCiAJLyotLS0tLS0tLS0tCiAJICogUmVzb2x2ZSB0aGUgdGFyZ2V0IHJlbGF0aW9uLiBUaGlz IGlzIHRoZSBzYW1lIGFzOgogCSAqCkBAIC00NjgxLDYgKzQ4MDQsMTcgQEAgRXhlY0VuZE1vZGlm eVRhYmxlKE1vZGlmeVRhYmxlU3RhdGUgKm5vZGUpCiB7CiAJaW50CQkJaTsKIAorCWlmICh0YWJs ZV9tb2RpZnlfc3RhdGUgIT0gTlVMTCkKKwl7CisJCUFzc2VydChub2RlLT5vcGVyYXRpb24gPT0g Q01EX0lOU0VSVCk7CisKKwkJdGFibGVfbW9kaWZ5X2VuZCh0YWJsZV9tb2RpZnlfc3RhdGUpOwor CQl0YWJsZV9tb2RpZnlfc3RhdGUgPSBOVUxMOworCisJCXBmcmVlKGluc2VydF9tb2RpZnlfYnVm ZmVyX2ZsdXNoX2NvbnRleHQpOworCQlpbnNlcnRfbW9kaWZ5X2J1ZmZlcl9mbHVzaF9jb250ZXh0 ID0gTlVMTDsKKwl9CisKIAkvKgogCSAqIEFsbG93IGFueSBGRFdzIHRvIHNodXQgZG93bgogCSAq LwpkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9v bHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAppbmRleCA2YmZlYzQ0NzZiLi41ZTNlOTAwY2I4IDEw MDY0NAotLS0gYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAorKysgYi9zcmMvdG9v bHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdApAQCAtMTE3OSw2ICsxMTc5LDcgQEAgSW1wb3J0Rm9y ZWlnblNjaGVtYV9mdW5jdGlvbgogSW1wb3J0UXVhbAogSW5Qcm9ncmVzc0VudAogSW5Qcm9ncmVz c0lPCitJbnNlcnRNb2RpZnlCdWZmZXJGbHVzaENvbnRleHQKIEluY2x1ZGVXYWwKIEluY2x1c2lv bk9wYXF1ZQogSW5jcmVtZW50VmFyU3VibGV2ZWxzVXBfY29udGV4dAotLSAKMi4zNC4xCgo= --00000000000084f79d06187909b6 Content-Type: application/octet-stream; name="v21-0004-Optimize-Logical-Replication-apply-with-multi-in.patch" Content-Disposition: attachment; filename="v21-0004-Optimize-Logical-Replication-apply-with-multi-in.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lw7hltxa3 RnJvbSAzZWJlMjgwNDUyMTc3NzhiYjE0NWZmMTJjOTFlNTkzYjk0MGU0ODE4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBCaGFyYXRoIFJ1cGlyZWRkeSA8YmhhcmF0aC5ydXBpcmVkZHlm b3Jwb3N0Z3Jlc0BnbWFpbC5jb20+CkRhdGU6IFdlZCwgMTUgTWF5IDIwMjQgMDU6NDM6NDggKzAw MDAKU3ViamVjdDogW1BBVENIIHYyMSA0LzVdIE9wdGltaXplIExvZ2ljYWwgUmVwbGljYXRpb24g YXBwbHkgd2l0aCBtdWx0aSBpbnNlcnRzCgotLS0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNS ZXBsaWNhdGlvbi5jICAgfCAgMzkgKysrCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2Fs L3Byb3RvLmMgIHwgIDI0ICsrCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3dvcmtl ci5jIHwgMzUxICsrKysrKysrKysrKysrKysrKysrKystCiBzcmMvaW5jbHVkZS9leGVjdXRvci9l eGVjdXRvci5oICAgICAgICAgIHwgICA0ICsKIHNyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2xvZ2lj YWxwcm90by5oICAgfCAgIDIgKwogc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgICAg ICAgICB8ICAgMiArCiA2IGZpbGVzIGNoYW5nZWQsIDQwOSBpbnNlcnRpb25zKCspLCAxMyBkZWxl dGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUmVwbGljYXRp b24uYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNSZXBsaWNhdGlvbi5jCmluZGV4IGQwYTg5 Y2Q1NzcuLmZhZTEzNzU1MzcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNS ZXBsaWNhdGlvbi5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNSZXBsaWNhdGlvbi5j CkBAIC01NDQsNiArNTQ0LDQ1IEBAIEV4ZWNTaW1wbGVSZWxhdGlvbkluc2VydChSZXN1bHRSZWxJ bmZvICpyZXN1bHRSZWxJbmZvLAogCX0KIH0KIAordm9pZAorRXhlY1JlbGF0aW9uTXVsdGlJbnNl cnQoVGFibGVNb2RpZnlTdGF0ZSAqTXVsdGlJbnNlcnRTdGF0ZSwKKwkJCQkJCVJlc3VsdFJlbElu Zm8gKnJlc3VsdFJlbEluZm8sCisJCQkJCQlFU3RhdGUgKmVzdGF0ZSwgVHVwbGVUYWJsZVNsb3Qg KnNsb3QpCit7CisJYm9vbAkJc2tpcF90dXBsZSA9IGZhbHNlOworCVJlbGF0aW9uCXJlbCA9IHJl c3VsdFJlbEluZm8tPnJpX1JlbGF0aW9uRGVzYzsKKworCS8qIEZvciBub3cgd2Ugc3VwcG9ydCBv bmx5IHRhYmxlcy4gKi8KKwlBc3NlcnQocmVsLT5yZF9yZWwtPnJlbGtpbmQgPT0gUkVMS0lORF9S RUxBVElPTik7CisKKwlDaGVja0NtZFJlcGxpY2FJZGVudGl0eShyZWwsIENNRF9JTlNFUlQpOwor CisJLyogQkVGT1JFIFJPVyBJTlNFUlQgVHJpZ2dlcnMgKi8KKwlpZiAocmVzdWx0UmVsSW5mby0+ cmlfVHJpZ0Rlc2MgJiYKKwkJcmVzdWx0UmVsSW5mby0+cmlfVHJpZ0Rlc2MtPnRyaWdfaW5zZXJ0 X2JlZm9yZV9yb3cpCisJeworCQlpZiAoIUV4ZWNCUkluc2VydFRyaWdnZXJzKGVzdGF0ZSwgcmVz dWx0UmVsSW5mbywgc2xvdCkpCisJCQlza2lwX3R1cGxlID0gdHJ1ZTsJLyogImRvIG5vdGhpbmci ICovCisJfQorCisJaWYgKCFza2lwX3R1cGxlKQorCXsKKwkJLyogQ29tcHV0ZSBzdG9yZWQgZ2Vu ZXJhdGVkIGNvbHVtbnMgKi8KKwkJaWYgKHJlbC0+cmRfYXR0LT5jb25zdHIgJiYKKwkJCXJlbC0+ cmRfYXR0LT5jb25zdHItPmhhc19nZW5lcmF0ZWRfc3RvcmVkKQorCQkJRXhlY0NvbXB1dGVTdG9y ZWRHZW5lcmF0ZWQocmVzdWx0UmVsSW5mbywgZXN0YXRlLCBzbG90LAorCQkJCQkJCQkJICAgQ01E X0lOU0VSVCk7CisKKwkJLyogQ2hlY2sgdGhlIGNvbnN0cmFpbnRzIG9mIHRoZSB0dXBsZSAqLwor CQlpZiAocmVsLT5yZF9hdHQtPmNvbnN0cikKKwkJCUV4ZWNDb25zdHJhaW50cyhyZXN1bHRSZWxJ bmZvLCBzbG90LCBlc3RhdGUpOworCQlpZiAocmVsLT5yZF9yZWwtPnJlbGlzcGFydGl0aW9uKQor CQkJRXhlY1BhcnRpdGlvbkNoZWNrKHJlc3VsdFJlbEluZm8sIHNsb3QsIGVzdGF0ZSwgdHJ1ZSk7 CisKKwkJdGFibGVfbW9kaWZ5X2J1ZmZlcl9pbnNlcnQoTXVsdGlJbnNlcnRTdGF0ZSwgc2xvdCk7 CisJfQorfQorCiAvKgogICogRmluZCB0aGUgc2VhcmNoc2xvdCB0dXBsZSBhbmQgdXBkYXRlIGl0 IHdpdGggZGF0YSBpbiB0aGUgc2xvdCwKICAqIHVwZGF0ZSB0aGUgaW5kZXhlcywgYW5kIGV4ZWN1 dGUgYW55IGNvbnN0cmFpbnRzIGFuZCBwZXItcm93IHRyaWdnZXJzLgpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9wcm90by5jIGIvc3JjL2JhY2tlbmQvcmVwbGlj YXRpb24vbG9naWNhbC9wcm90by5jCmluZGV4IDk1YzA5Yzk1MTYuLjQ2ZDM4YWViZDIgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcHJvdG8uYworKysgYi9zcmMv YmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Byb3RvLmMKQEAgLTQyNyw2ICs0MjcsMzAgQEAg bG9naWNhbHJlcF93cml0ZV9pbnNlcnQoU3RyaW5nSW5mbyBvdXQsIFRyYW5zYWN0aW9uSWQgeGlk LCBSZWxhdGlvbiByZWwsCiAJbG9naWNhbHJlcF93cml0ZV90dXBsZShvdXQsIHJlbCwgbmV3c2xv dCwgYmluYXJ5LCBjb2x1bW5zKTsKIH0KIAorTG9naWNhbFJlcFJlbElkCitsb2dpY2FscmVwX3Jl YWRfcmVsaWQoU3RyaW5nSW5mbyBpbikKK3sKKwlMb2dpY2FsUmVwUmVsSWQgcmVsaWQ7CisKKwkv KiByZWFkIHRoZSByZWxhdGlvbiBpZCAqLworCXJlbGlkID0gcHFfZ2V0bXNnaW50KGluLCA0KTsK KworCXJldHVybiByZWxpZDsKK30KKwordm9pZAorbG9naWNhbHJlcF9yZWFkX2luc2VydF92MihT dHJpbmdJbmZvIGluLCBMb2dpY2FsUmVwVHVwbGVEYXRhICpuZXd0dXApCit7CisJY2hhcgkJYWN0 aW9uOworCisJYWN0aW9uID0gcHFfZ2V0bXNnYnl0ZShpbik7CisJaWYgKGFjdGlvbiAhPSAnTicp CisJCWVsb2coRVJST1IsICJleHBlY3RlZCBuZXcgdHVwbGUgYnV0IGdvdCAlZCIsCisJCQkgYWN0 aW9uKTsKKworCWxvZ2ljYWxyZXBfcmVhZF90dXBsZShpbiwgbmV3dHVwKTsKK30KKwogLyoKICAq IFJlYWQgSU5TRVJUIGZyb20gc3RyZWFtLgogICoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Jl cGxpY2F0aW9uL2xvZ2ljYWwvd29ya2VyLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dp Y2FsL3dvcmtlci5jCmluZGV4IGI1YTgwZmUzZTguLmQ2Mjc3MmY1OTAgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvd29ya2VyLmMKKysrIGIvc3JjL2JhY2tlbmQv cmVwbGljYXRpb24vbG9naWNhbC93b3JrZXIuYwpAQCAtMTQ4LDcgKzE0OCw2IEBACiAjaW5jbHVk ZSA8dW5pc3RkLmg+CiAKICNpbmNsdWRlICJhY2Nlc3MvdGFibGUuaCIKLSNpbmNsdWRlICJhY2Nl c3MvdGFibGVhbS5oIgogI2luY2x1ZGUgImFjY2Vzcy90d29waGFzZS5oIgogI2luY2x1ZGUgImFj Y2Vzcy94YWN0LmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9pbmRleGluZy5oIgpAQCAtNDE2LDYgKzQx NSwzMCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcmVzZXRfYXBwbHlfZXJyb3JfY29udGV4dF9pbmZv KHZvaWQpOwogc3RhdGljIFRyYW5zQXBwbHlBY3Rpb24gZ2V0X3RyYW5zYWN0aW9uX2FwcGx5X2Fj dGlvbihUcmFuc2FjdGlvbklkIHhpZCwKIAkJCQkJCQkJCQkJCQkgUGFyYWxsZWxBcHBseVdvcmtl ckluZm8gKip3aW5mbyk7CiAKK3R5cGVkZWYgZW51bSBMUk11bHRpSW5zZXJ0UmV0dXJuU3RhdHVz Cit7CisJTFJfTVVMVElfSU5TRVJUX05PTkUgPSAwLAorCUxSX01VTFRJX0lOU0VSVF9SRUxfU0tJ UFBFRCwKKwlMUl9NVUxUSV9JTlNFUlRfRElTQUxMT1dFRCwKKwlMUl9NVUxUSV9JTlNFUlRfRE9O RSwKK30gTFJNdWx0aUluc2VydFJldHVyblN0YXR1czsKKworc3RhdGljIFRhYmxlTW9kaWZ5U3Rh dGUgKk11bHRpSW5zZXJ0U3RhdGUgPSBOVUxMOworc3RhdGljIExvZ2ljYWxSZXBSZWxNYXBFbnRy eSAqTGFzdFJlbCA9IE5VTEw7CitzdGF0aWMgTG9naWNhbFJlcFJlbElkIExhc3RNdWx0aUluc2Vy dFJlbElkID0gSW52YWxpZE9pZDsKK3N0YXRpYyBBcHBseUV4ZWN1dGlvbkRhdGEgKkxhc3RFRGF0 YSA9IE5VTEw7CitzdGF0aWMgVHVwbGVUYWJsZVNsb3QgKkxhc3RSZW1vdGVTbG90ID0gTlVMTDsK KwordHlwZWRlZiBzdHJ1Y3QgTFJNb2RpZnlCdWZmZXJGbHVzaENvbnRleHQKK3sKKwlSZXN1bHRS ZWxJbmZvICpyZXN1bHRSZWxJbmZvOworCUVTdGF0ZQkgICAqZXN0YXRlOworfSBMUk1vZGlmeUJ1 ZmZlckZsdXNoQ29udGV4dDsKKworc3RhdGljIExSTW9kaWZ5QnVmZmVyRmx1c2hDb250ZXh0ICpt b2RpZnlfYnVmZmVyX2ZsdXNoX2NvbnRleHQgPSBOVUxMOworc3RhdGljIHZvaWQgTFJNb2RpZnlC dWZmZXJGbHVzaENhbGxiYWNrKHZvaWQgKmNvbnRleHQsIFR1cGxlVGFibGVTbG90ICpzbG90KTsK K3N0YXRpYyB2b2lkIEZpbmlzaE11bHRpSW5zZXJ0cyh2b2lkKTsKKwogLyoKICAqIEZvcm0gdGhl IG9yaWdpbiBuYW1lIGZvciB0aGUgc3Vic2NyaXB0aW9uLgogICoKQEAgLTEwMTcsNiArMTA0MCw4 IEBAIGFwcGx5X2hhbmRsZV9jb21taXQoU3RyaW5nSW5mbyBzKQogewogCUxvZ2ljYWxSZXBDb21t aXREYXRhIGNvbW1pdF9kYXRhOwogCisJRmluaXNoTXVsdGlJbnNlcnRzKCk7CisKIAlsb2dpY2Fs cmVwX3JlYWRfY29tbWl0KHMsICZjb21taXRfZGF0YSk7CiAKIAlpZiAoY29tbWl0X2RhdGEuY29t bWl0X2xzbiAhPSByZW1vdGVfZmluYWxfbHNuKQpAQCAtMTA0Myw2ICsxMDY4LDggQEAgYXBwbHlf aGFuZGxlX2JlZ2luX3ByZXBhcmUoU3RyaW5nSW5mbyBzKQogewogCUxvZ2ljYWxSZXBQcmVwYXJl ZFR4bkRhdGEgYmVnaW5fZGF0YTsKIAorCUZpbmlzaE11bHRpSW5zZXJ0cygpOworCiAJLyogVGFi bGVzeW5jIHNob3VsZCBuZXZlciByZWNlaXZlIHByZXBhcmUuICovCiAJaWYgKGFtX3RhYmxlc3lu Y193b3JrZXIoKSkKIAkJZXJlcG9ydChFUlJPUiwKQEAgLTExMDksNiArMTEzNiw4IEBAIGFwcGx5 X2hhbmRsZV9wcmVwYXJlKFN0cmluZ0luZm8gcykKIHsKIAlMb2dpY2FsUmVwUHJlcGFyZWRUeG5E YXRhIHByZXBhcmVfZGF0YTsKIAorCUZpbmlzaE11bHRpSW5zZXJ0cygpOworCiAJbG9naWNhbHJl cF9yZWFkX3ByZXBhcmUocywgJnByZXBhcmVfZGF0YSk7CiAKIAlpZiAocHJlcGFyZV9kYXRhLnBy ZXBhcmVfbHNuICE9IHJlbW90ZV9maW5hbF9sc24pCkBAIC0xMTcxLDYgKzEyMDAsOCBAQCBhcHBs eV9oYW5kbGVfY29tbWl0X3ByZXBhcmVkKFN0cmluZ0luZm8gcykKIAlMb2dpY2FsUmVwQ29tbWl0 UHJlcGFyZWRUeG5EYXRhIHByZXBhcmVfZGF0YTsKIAljaGFyCQlnaWRbR0lEU0laRV07CiAKKwlG aW5pc2hNdWx0aUluc2VydHMoKTsKKwogCWxvZ2ljYWxyZXBfcmVhZF9jb21taXRfcHJlcGFyZWQo cywgJnByZXBhcmVfZGF0YSk7CiAJc2V0X2FwcGx5X2Vycm9yX2NvbnRleHRfeGFjdChwcmVwYXJl X2RhdGEueGlkLCBwcmVwYXJlX2RhdGEuY29tbWl0X2xzbik7CiAKQEAgLTEyMjAsNiArMTI1MSw4 IEBAIGFwcGx5X2hhbmRsZV9yb2xsYmFja19wcmVwYXJlZChTdHJpbmdJbmZvIHMpCiAJTG9naWNh bFJlcFJvbGxiYWNrUHJlcGFyZWRUeG5EYXRhIHJvbGxiYWNrX2RhdGE7CiAJY2hhcgkJZ2lkW0dJ RFNJWkVdOwogCisJRmluaXNoTXVsdGlJbnNlcnRzKCk7CisKIAlsb2dpY2FscmVwX3JlYWRfcm9s bGJhY2tfcHJlcGFyZWQocywgJnJvbGxiYWNrX2RhdGEpOwogCXNldF9hcHBseV9lcnJvcl9jb250 ZXh0X3hhY3Qocm9sbGJhY2tfZGF0YS54aWQsIHJvbGxiYWNrX2RhdGEucm9sbGJhY2tfZW5kX2xz bik7CiAKQEAgLTEyNzcsNiArMTMxMCw4IEBAIGFwcGx5X2hhbmRsZV9zdHJlYW1fcHJlcGFyZShT dHJpbmdJbmZvIHMpCiAJLyogU2F2ZSB0aGUgbWVzc2FnZSBiZWZvcmUgaXQgaXMgY29uc3VtZWQu ICovCiAJU3RyaW5nSW5mb0RhdGEgb3JpZ2luYWxfbXNnID0gKnM7CiAKKwlGaW5pc2hNdWx0aUlu c2VydHMoKTsKKwogCWlmIChpbl9zdHJlYW1lZF90cmFuc2FjdGlvbikKIAkJZXJlcG9ydChFUlJP UiwKIAkJCQkoZXJyY29kZShFUlJDT0RFX1BST1RPQ09MX1ZJT0xBVElPTiksCkBAIC0xMzA0LDYg KzEzMzksOCBAQCBhcHBseV9oYW5kbGVfc3RyZWFtX3ByZXBhcmUoU3RyaW5nSW5mbyBzKQogCQkJ YXBwbHlfc3Bvb2xlZF9tZXNzYWdlcyhNeUxvZ2ljYWxSZXBXb3JrZXItPnN0cmVhbV9maWxlc2V0 LAogCQkJCQkJCQkgICBwcmVwYXJlX2RhdGEueGlkLCBwcmVwYXJlX2RhdGEucHJlcGFyZV9sc24p OwogCisJCQlGaW5pc2hNdWx0aUluc2VydHMoKTsKKwogCQkJLyogTWFyayB0aGUgdHJhbnNhY3Rp b24gYXMgcHJlcGFyZWQuICovCiAJCQlhcHBseV9oYW5kbGVfcHJlcGFyZV9pbnRlcm5hbCgmcHJl cGFyZV9kYXRhKTsKIApAQCAtMTQwNyw2ICsxNDQ0LDggQEAgYXBwbHlfaGFuZGxlX3N0cmVhbV9w cmVwYXJlKFN0cmluZ0luZm8gcykKIHN0YXRpYyB2b2lkCiBhcHBseV9oYW5kbGVfb3JpZ2luKFN0 cmluZ0luZm8gcykKIHsKKwlGaW5pc2hNdWx0aUluc2VydHMoKTsKKwogCS8qCiAJICogT1JJR0lO IG1lc3NhZ2UgY2FuIG9ubHkgY29tZSBpbnNpZGUgc3RyZWFtaW5nIHRyYW5zYWN0aW9uIG9yIGlu c2lkZQogCSAqIHJlbW90ZSB0cmFuc2FjdGlvbiBhbmQgYmVmb3JlIGFueSBhY3R1YWwgd3JpdGVz LgpAQCAtMTQ3Myw2ICsxNTEyLDggQEAgYXBwbHlfaGFuZGxlX3N0cmVhbV9zdGFydChTdHJpbmdJ bmZvIHMpCiAJLyogU2F2ZSB0aGUgbWVzc2FnZSBiZWZvcmUgaXQgaXMgY29uc3VtZWQuICovCiAJ U3RyaW5nSW5mb0RhdGEgb3JpZ2luYWxfbXNnID0gKnM7CiAKKwlGaW5pc2hNdWx0aUluc2VydHMo KTsKKwogCWlmIChpbl9zdHJlYW1lZF90cmFuc2FjdGlvbikKIAkJZXJlcG9ydChFUlJPUiwKIAkJ CQkoZXJyY29kZShFUlJDT0RFX1BST1RPQ09MX1ZJT0xBVElPTiksCkBAIC0xNjI4LDYgKzE2Njks OCBAQCBhcHBseV9oYW5kbGVfc3RyZWFtX3N0b3AoU3RyaW5nSW5mbyBzKQogCVBhcmFsbGVsQXBw bHlXb3JrZXJJbmZvICp3aW5mbzsKIAlUcmFuc0FwcGx5QWN0aW9uIGFwcGx5X2FjdGlvbjsKIAor CUZpbmlzaE11bHRpSW5zZXJ0cygpOworCiAJaWYgKCFpbl9zdHJlYW1lZF90cmFuc2FjdGlvbikK IAkJZXJlcG9ydChFUlJPUiwKIAkJCQkoZXJyY29kZShFUlJDT0RFX1BST1RPQ09MX1ZJT0xBVElP TiksCkBAIC0xODIxLDYgKzE4NjQsOCBAQCBhcHBseV9oYW5kbGVfc3RyZWFtX2Fib3J0KFN0cmlu Z0luZm8gcykKIAlTdHJpbmdJbmZvRGF0YSBvcmlnaW5hbF9tc2cgPSAqczsKIAlib29sCQl0b3Bs ZXZlbF94YWN0OwogCisJRmluaXNoTXVsdGlJbnNlcnRzKCk7CisKIAlpZiAoaW5fc3RyZWFtZWRf dHJhbnNhY3Rpb24pCiAJCWVyZXBvcnQoRVJST1IsCiAJCQkJKGVycmNvZGUoRVJSQ09ERV9QUk9U T0NPTF9WSU9MQVRJT04pLApAQCAtMjEzOCw2ICsyMTgzLDggQEAgYXBwbHlfaGFuZGxlX3N0cmVh bV9jb21taXQoU3RyaW5nSW5mbyBzKQogCS8qIFNhdmUgdGhlIG1lc3NhZ2UgYmVmb3JlIGl0IGlz IGNvbnN1bWVkLiAqLwogCVN0cmluZ0luZm9EYXRhIG9yaWdpbmFsX21zZyA9ICpzOwogCisJRmlu aXNoTXVsdGlJbnNlcnRzKCk7CisKIAlpZiAoaW5fc3RyZWFtZWRfdHJhbnNhY3Rpb24pCiAJCWVy ZXBvcnQoRVJST1IsCiAJCQkJKGVycmNvZGUoRVJSQ09ERV9QUk9UT0NPTF9WSU9MQVRJT04pLApA QCAtMjE1OSw2ICsyMjA2LDggQEAgYXBwbHlfaGFuZGxlX3N0cmVhbV9jb21taXQoU3RyaW5nSW5m byBzKQogCQkJYXBwbHlfc3Bvb2xlZF9tZXNzYWdlcyhNeUxvZ2ljYWxSZXBXb3JrZXItPnN0cmVh bV9maWxlc2V0LCB4aWQsCiAJCQkJCQkJCSAgIGNvbW1pdF9kYXRhLmNvbW1pdF9sc24pOwogCisJ CQlGaW5pc2hNdWx0aUluc2VydHMoKTsKKwogCQkJYXBwbHlfaGFuZGxlX2NvbW1pdF9pbnRlcm5h bCgmY29tbWl0X2RhdGEpOwogCiAJCQkvKiBVbmxpbmsgdGhlIGZpbGVzIHdpdGggc2VyaWFsaXpl ZCBjaGFuZ2VzIGFuZCBzdWJ4YWN0IGluZm8uICovCkBAIC0yMzAyLDYgKzIzNTEsOCBAQCBhcHBs eV9oYW5kbGVfcmVsYXRpb24oU3RyaW5nSW5mbyBzKQogewogCUxvZ2ljYWxSZXBSZWxhdGlvbiAq cmVsOwogCisJRmluaXNoTXVsdGlJbnNlcnRzKCk7CisKIAlpZiAoaGFuZGxlX3N0cmVhbWVkX3Ry YW5zYWN0aW9uKExPR0lDQUxfUkVQX01TR19SRUxBVElPTiwgcykpCiAJCXJldHVybjsKIApAQCAt MjMyNSw2ICsyMzc2LDggQEAgYXBwbHlfaGFuZGxlX3R5cGUoU3RyaW5nSW5mbyBzKQogewogCUxv Z2ljYWxSZXBUeXAgdHlwOwogCisJRmluaXNoTXVsdGlJbnNlcnRzKCk7CisKIAlpZiAoaGFuZGxl X3N0cmVhbWVkX3RyYW5zYWN0aW9uKExPR0lDQUxfUkVQX01TR19UWVBFLCBzKSkKIAkJcmV0dXJu OwogCkBAIC0yMzYzLDE2ICsyNDE2LDEyNiBAQCBUYXJnZXRQcml2aWxlZ2VzQ2hlY2soUmVsYXRp b24gcmVsLCBBY2xNb2RlIG1vZGUpCiAJCQkJCQlSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWwp KSkpOwogfQogCi0vKgotICogSGFuZGxlIElOU0VSVCBtZXNzYWdlLgotICovCitzdGF0aWMgdm9p ZAorRmluaXNoTXVsdGlJbnNlcnRzKHZvaWQpCit7CisJTG9naWNhbFJlcE1zZ1R5cGUgc2F2ZWRf Y29tbWFuZDsKKworCWlmIChNdWx0aUluc2VydFN0YXRlID09IE5VTEwpCisJCXJldHVybjsKKwor CUFzc2VydChPaWRJc1ZhbGlkKExhc3RNdWx0aUluc2VydFJlbElkKSk7CisJQXNzZXJ0KExhc3RF RGF0YSAhPSBOVUxMKTsKKworCS8qIFNldCByZWxhdGlvbiBmb3IgZXJyb3IgY2FsbGJhY2sgKi8K KwlhcHBseV9lcnJvcl9jYWxsYmFja19hcmcucmVsID0gTGFzdFJlbDsKKworCS8qIFNldCBjdXJy ZW50IGNvbW1hbmQgZm9yIGVycm9yIGNhbGxiYWNrICovCisJc2F2ZWRfY29tbWFuZCA9IGFwcGx5 X2Vycm9yX2NhbGxiYWNrX2FyZy5jb21tYW5kOworCWFwcGx5X2Vycm9yX2NhbGxiYWNrX2FyZy5j b21tYW5kID0gTE9HSUNBTF9SRVBfTVNHX0lOU0VSVDsKKworCUV4ZWNEcm9wU2luZ2xlVHVwbGVU YWJsZVNsb3QoTGFzdFJlbW90ZVNsb3QpOworCUxhc3RSZW1vdGVTbG90ID0gTlVMTDsKKworCXRh YmxlX21vZGlmeV9lbmQoTXVsdGlJbnNlcnRTdGF0ZSk7CisJTXVsdGlJbnNlcnRTdGF0ZSA9IE5V TEw7CisJTGFzdE11bHRpSW5zZXJ0UmVsSWQgPSBJbnZhbGlkT2lkOworCisJcGZyZWUobW9kaWZ5 X2J1ZmZlcl9mbHVzaF9jb250ZXh0KTsKKwltb2RpZnlfYnVmZmVyX2ZsdXNoX2NvbnRleHQgPSBO VUxMOworCisJRXhlY0Nsb3NlSW5kaWNlcyhMYXN0RURhdGEtPnRhcmdldFJlbEluZm8pOworCisJ ZmluaXNoX2VkYXRhKExhc3RFRGF0YSk7CisJTGFzdEVEYXRhID0gTlVMTDsKKworCS8qIFJlc2V0 IHJlbGF0aW9uIGZvciBlcnJvciBjYWxsYmFjayAqLworCWFwcGx5X2Vycm9yX2NhbGxiYWNrX2Fy Zy5yZWwgPSBOVUxMOworCisJLyogUmVzZXQgdGhlIGN1cnJlbnQgY29tbWFuZCAqLworCWFwcGx5 X2Vycm9yX2NhbGxiYWNrX2FyZy5jb21tYW5kID0gc2F2ZWRfY29tbWFuZDsKKworCWxvZ2ljYWxy ZXBfcmVsX2Nsb3NlKExhc3RSZWwsIE5vTG9jayk7CisJTGFzdFJlbCA9IE5VTEw7CisKKwllbmRf cmVwbGljYXRpb25fc3RlcCgpOworfQogCiBzdGF0aWMgdm9pZAotYXBwbHlfaGFuZGxlX2luc2Vy dChTdHJpbmdJbmZvIHMpCitMUk1vZGlmeUJ1ZmZlckZsdXNoQ2FsbGJhY2sodm9pZCAqY29udGV4 dCwgVHVwbGVUYWJsZVNsb3QgKnNsb3QpCit7CisJTFJNb2RpZnlCdWZmZXJGbHVzaENvbnRleHQg KmN0eCA9IChMUk1vZGlmeUJ1ZmZlckZsdXNoQ29udGV4dCAqKSBjb250ZXh0OworCVJlc3VsdFJl bEluZm8gKnJlc3VsdFJlbEluZm8gPSBjdHgtPnJlc3VsdFJlbEluZm87CisJRVN0YXRlCSAgICpl c3RhdGUgPSBjdHgtPmVzdGF0ZTsKKwlMb2dpY2FsUmVwTXNnVHlwZSBzYXZlZF9jb21tYW5kOwor CisJLyogUXVpY2sgZXhpdCBpZiBubyBpbmRleGVzIG9yIG5vIHRyaWdnZXJzICovCisJaWYgKCEo cmVzdWx0UmVsSW5mby0+cmlfTnVtSW5kaWNlcyA+IDAgfHwKKwkJICAocmVzdWx0UmVsSW5mby0+ cmlfVHJpZ0Rlc2MgIT0gTlVMTCAmJgorCQkgICAocmVzdWx0UmVsSW5mby0+cmlfVHJpZ0Rlc2Mt PnRyaWdfaW5zZXJ0X2FmdGVyX3JvdyB8fAorCQkJcmVzdWx0UmVsSW5mby0+cmlfVHJpZ0Rlc2Mt PnRyaWdfaW5zZXJ0X25ld190YWJsZSkpKSkKKwkJcmV0dXJuOworCisJLyogU2V0IHJlbGF0aW9u IGZvciBlcnJvciBjYWxsYmFjayAqLworCWFwcGx5X2Vycm9yX2NhbGxiYWNrX2FyZy5yZWwgPSBM YXN0UmVsOworCisJLyogU2V0IGN1cnJlbnQgY29tbWFuZCBmb3IgZXJyb3IgY2FsbGJhY2sgKi8K KwlzYXZlZF9jb21tYW5kID0gYXBwbHlfZXJyb3JfY2FsbGJhY2tfYXJnLmNvbW1hbmQ7CisJYXBw bHlfZXJyb3JfY2FsbGJhY2tfYXJnLmNvbW1hbmQgPSBMT0dJQ0FMX1JFUF9NU0dfSU5TRVJUOwor CisJLyogQ2FsbGVyIG11c3QgdGFrZSBjYXJlIG9mIG9wZW5pbmcgYW5kIGNsb3NpbmcgdGhlIGlu ZGljZXMgKi8KKworCS8qCisJICogSWYgdGhlcmUgYXJlIGFueSBpbmRleGVzLCB1cGRhdGUgdGhl bSBmb3IgYWxsIHRoZSBpbnNlcnRlZCB0dXBsZXMsIGFuZAorCSAqIHJ1biBBRlRFUiBST1cgSU5T RVJUIHRyaWdnZXJzLgorCSAqLworCWlmIChyZXN1bHRSZWxJbmZvLT5yaV9OdW1JbmRpY2VzID4g MCkKKwl7CisJCUxpc3QJICAgKnJlY2hlY2tJbmRleGVzOworCisJCXJlY2hlY2tJbmRleGVzID0K KwkJCUV4ZWNJbnNlcnRJbmRleFR1cGxlcyhyZXN1bHRSZWxJbmZvLAorCQkJCQkJCQkgIHNsb3Qs IGVzdGF0ZSwgZmFsc2UsCisJCQkJCQkJCSAgZmFsc2UsIE5VTEwsIE5JTCwgZmFsc2UpOworCisJ CUV4ZWNBUkluc2VydFRyaWdnZXJzKGVzdGF0ZSwgcmVzdWx0UmVsSW5mbywKKwkJCQkJCQkgc2xv dCwgcmVjaGVja0luZGV4ZXMsCisJCQkJCQkJIE5VTEwpOworCisJCWxpc3RfZnJlZShyZWNoZWNr SW5kZXhlcyk7CisJfQorCisJLyoKKwkgKiBUaGVyZSdzIG5vIGluZGV4ZXMsIGJ1dCBzZWUgaWYg d2UgbmVlZCB0byBydW4gQUZURVIgUk9XIElOU0VSVCB0cmlnZ2VycworCSAqIGFueXdheS4KKwkg Ki8KKwllbHNlIGlmIChyZXN1bHRSZWxJbmZvLT5yaV9UcmlnRGVzYyAhPSBOVUxMICYmCisJCQkg KHJlc3VsdFJlbEluZm8tPnJpX1RyaWdEZXNjLT50cmlnX2luc2VydF9hZnRlcl9yb3cgfHwKKwkJ CSAgcmVzdWx0UmVsSW5mby0+cmlfVHJpZ0Rlc2MtPnRyaWdfaW5zZXJ0X25ld190YWJsZSkpCisJ eworCQlFeGVjQVJJbnNlcnRUcmlnZ2Vycyhlc3RhdGUsIHJlc3VsdFJlbEluZm8sCisJCQkJCQkJ IHNsb3QsIE5JTCwKKwkJCQkJCQkgTlVMTCk7CisJfQorCisJLyoKKwkgKiBYWFggd2Ugc2hvdWxk IGluIHRoZW9yeSBwYXNzIGEgVHJhbnNpdGlvbkNhcHR1cmVTdGF0ZSBvYmplY3QgdG8gdGhlCisJ ICogYWJvdmUgdG8gY2FwdHVyZSB0cmFuc2l0aW9uIHR1cGxlcywgYnV0IGFmdGVyIHN0YXRlbWVu dCB0cmlnZ2VycyBkb24ndAorCSAqIGFjdHVhbGx5IGdldCBmaXJlZCBieSByZXBsaWNhdGlvbiB5 ZXQgYW55d2F5CisJICovCisKKwkvKiBSZXNldCByZWxhdGlvbiBmb3IgZXJyb3IgY2FsbGJhY2sg Ki8KKwlhcHBseV9lcnJvcl9jYWxsYmFja19hcmcucmVsID0gTlVMTDsKKworCS8qIFJlc2V0IHRo ZSBjdXJyZW50IGNvbW1hbmQgKi8KKwlhcHBseV9lcnJvcl9jYWxsYmFja19hcmcuY29tbWFuZCA9 IHNhdmVkX2NvbW1hbmQ7Cit9CisKK3N0YXRpYyBMUk11bHRpSW5zZXJ0UmV0dXJuU3RhdHVzCitk b19tdWx0aV9pbnNlcnRzKFN0cmluZ0luZm8gcywgTG9naWNhbFJlcFJlbElkICpyZWxpZCkKIHsK IAlMb2dpY2FsUmVwUmVsTWFwRW50cnkgKnJlbDsKIAlMb2dpY2FsUmVwVHVwbGVEYXRhIG5ld3R1 cDsKLQlMb2dpY2FsUmVwUmVsSWQgcmVsaWQ7CiAJVXNlckNvbnRleHQgdWN4dDsKIAlBcHBseUV4 ZWN1dGlvbkRhdGEgKmVkYXRhOwogCUVTdGF0ZQkgICAqZXN0YXRlOwpAQCAtMjM4MCwxNyArMjU0 MywxNDMgQEAgYXBwbHlfaGFuZGxlX2luc2VydChTdHJpbmdJbmZvIHMpCiAJTWVtb3J5Q29udGV4 dCBvbGRjdHg7CiAJYm9vbAkJcnVuX2FzX293bmVyOwogCisJaWYgKE11bHRpSW5zZXJ0U3RhdGUg PT0gTlVMTCkKKwkJYmVnaW5fcmVwbGljYXRpb25fc3RlcCgpOworCisJKnJlbGlkID0gbG9naWNh bHJlcF9yZWFkX3JlbGlkKHMpOworCisJaWYgKE11bHRpSW5zZXJ0U3RhdGUgIT0gTlVMTCAmJgor CQkoTGFzdE11bHRpSW5zZXJ0UmVsSWQgIT0gSW52YWxpZE9pZCAmJgorCQkgKnJlbGlkICE9IElu dmFsaWRPaWQgJiYKKwkJIExhc3RNdWx0aUluc2VydFJlbElkICE9ICpyZWxpZCkpCisJCUZpbmlz aE11bHRpSW5zZXJ0cygpOworCisJaWYgKE11bHRpSW5zZXJ0U3RhdGUgPT0gTlVMTCkKKwkJcmVs ID0gbG9naWNhbHJlcF9yZWxfb3BlbigqcmVsaWQsIFJvd0V4Y2x1c2l2ZUxvY2spOworCWVsc2UK KwkJcmVsID0gTGFzdFJlbDsKKworCWlmICghc2hvdWxkX2FwcGx5X2NoYW5nZXNfZm9yX3JlbChy ZWwpKQorCXsKKwkJQXNzZXJ0KE11bHRpSW5zZXJ0U3RhdGUgPT0gTlVMTCk7CisKKwkJLyoKKwkJ ICogVGhlIHJlbGF0aW9uIGNhbid0IGJlY29tZSBpbnRlcmVzdGluZyBpbiB0aGUgbWlkZGxlIG9m IHRoZQorCQkgKiB0cmFuc2FjdGlvbiBzbyBpdCdzIHNhZmUgdG8gdW5sb2NrIGl0LgorCQkgKi8K KwkJbG9naWNhbHJlcF9yZWxfY2xvc2UocmVsLCBSb3dFeGNsdXNpdmVMb2NrKTsKKwkJZW5kX3Jl cGxpY2F0aW9uX3N0ZXAoKTsKKwkJcmV0dXJuIExSX01VTFRJX0lOU0VSVF9SRUxfU0tJUFBFRDsK Kwl9CisKKwkvKiBGb3IgYSBwYXJ0aXRpb25lZCB0YWJsZSwgbGV0J3Mgbm90IGRvIG11bHRpIGlu c2VydHMuICovCisJaWYgKHJlbC0+bG9jYWxyZWwtPnJkX3JlbC0+cmVsa2luZCA9PSBSRUxLSU5E X1BBUlRJVElPTkVEX1RBQkxFKQorCXsKKwkJQXNzZXJ0KE11bHRpSW5zZXJ0U3RhdGUgPT0gTlVM TCk7CisKKwkJLyoKKwkJICogVGhlIHJlbGF0aW9uIGNhbid0IGJlY29tZSBpbnRlcmVzdGluZyBp biB0aGUgbWlkZGxlIG9mIHRoZQorCQkgKiB0cmFuc2FjdGlvbiBzbyBpdCdzIHNhZmUgdG8gdW5s b2NrIGl0LgorCQkgKi8KKwkJbG9naWNhbHJlcF9yZWxfY2xvc2UocmVsLCBSb3dFeGNsdXNpdmVM b2NrKTsKKwkJZW5kX3JlcGxpY2F0aW9uX3N0ZXAoKTsKKwkJcmV0dXJuIExSX01VTFRJX0lOU0VS VF9ESVNBTExPV0VEOworCX0KKwogCS8qCi0JICogUXVpY2sgcmV0dXJuIGlmIHdlIGFyZSBza2lw cGluZyBkYXRhIG1vZGlmaWNhdGlvbiBjaGFuZ2VzIG9yIGhhbmRsaW5nCi0JICogc3RyZWFtZWQg dHJhbnNhY3Rpb25zLgorCSAqIE1ha2Ugc3VyZSB0aGF0IGFueSB1c2VyLXN1cHBsaWVkIGNvZGUg cnVucyBhcyB0aGUgdGFibGUgb3duZXIsIHVubGVzcworCSAqIHRoZSB1c2VyIGhhcyBvcHRlZCBv dXQgb2YgdGhhdCBiZWhhdmlvci4KIAkgKi8KLQlpZiAoaXNfc2tpcHBpbmdfY2hhbmdlcygpIHx8 Ci0JCWhhbmRsZV9zdHJlYW1lZF90cmFuc2FjdGlvbihMT0dJQ0FMX1JFUF9NU0dfSU5TRVJULCBz KSkKLQkJcmV0dXJuOworCXJ1bl9hc19vd25lciA9IE15U3Vic2NyaXB0aW9uLT5ydW5hc293bmVy OworCWlmICghcnVuX2FzX293bmVyKQorCQlTd2l0Y2hUb1VudHJ1c3RlZFVzZXIocmVsLT5sb2Nh bHJlbC0+cmRfcmVsLT5yZWxvd25lciwgJnVjeHQpOworCisJLyogU2V0IHJlbGF0aW9uIGZvciBl cnJvciBjYWxsYmFjayAqLworCWFwcGx5X2Vycm9yX2NhbGxiYWNrX2FyZy5yZWwgPSByZWw7CisK KwlpZiAoTXVsdGlJbnNlcnRTdGF0ZSA9PSBOVUxMKQorCXsKKwkJb2xkY3R4ID0gTWVtb3J5Q29u dGV4dFN3aXRjaFRvKFRvcFRyYW5zYWN0aW9uQ29udGV4dCk7CisKKwkJLyogSW5pdGlhbGl6ZSB0 aGUgZXhlY3V0b3Igc3RhdGUuICovCisJCUxhc3RFRGF0YSA9IGVkYXRhID0gY3JlYXRlX2VkYXRh X2Zvcl9yZWxhdGlvbihyZWwpOworCQllc3RhdGUgPSBlZGF0YS0+ZXN0YXRlOworCisJCUxhc3RS ZW1vdGVTbG90ID0gcmVtb3Rlc2xvdCA9IE1ha2VUdXBsZVRhYmxlU2xvdChSZWxhdGlvbkdldERl c2NyKHJlbC0+bG9jYWxyZWwpLAorCQkJCQkJCQkJCQkJCQkgJlRUU09wc1ZpcnR1YWwpOworCisJ CW1vZGlmeV9idWZmZXJfZmx1c2hfY29udGV4dCA9IChMUk1vZGlmeUJ1ZmZlckZsdXNoQ29udGV4 dCAqKSBwYWxsb2Moc2l6ZW9mKExSTW9kaWZ5QnVmZmVyRmx1c2hDb250ZXh0KSk7CisJCW1vZGlm eV9idWZmZXJfZmx1c2hfY29udGV4dC0+cmVzdWx0UmVsSW5mbyA9IGVkYXRhLT50YXJnZXRSZWxJ bmZvOworCQltb2RpZnlfYnVmZmVyX2ZsdXNoX2NvbnRleHQtPmVzdGF0ZSA9IGVzdGF0ZTsKKwor CQlNdWx0aUluc2VydFN0YXRlID0gdGFibGVfbW9kaWZ5X2JlZ2luKGVkYXRhLT50YXJnZXRSZWxJ bmZvLT5yaV9SZWxhdGlvbkRlc2MsCisJCQkJCQkJCQkJCSAgVE1fRkxBR19NVUxUSV9JTlNFUlRT IHwKKwkJCQkJCQkJCQkJICBUTV9GTEFHX0JBU19CVUxLV1JJVEUsCisJCQkJCQkJCQkJCSAgR2V0 Q3VycmVudENvbW1hbmRJZCh0cnVlKSwKKwkJCQkJCQkJCQkJICAwLAorCQkJCQkJCQkJCQkgIExS TW9kaWZ5QnVmZmVyRmx1c2hDYWxsYmFjaywKKwkJCQkJCQkJCQkJICBtb2RpZnlfYnVmZmVyX2Zs dXNoX2NvbnRleHQpOworCQlMYXN0UmVsID0gcmVsOworCQlMYXN0TXVsdGlJbnNlcnRSZWxJZCA9 ICpyZWxpZDsKKworCQkvKiBXZSBtdXN0IG9wZW4gaW5kZXhlcyBoZXJlLiAqLworCQlFeGVjT3Bl bkluZGljZXMoZWRhdGEtPnRhcmdldFJlbEluZm8sIGZhbHNlKTsKKworCQlNZW1vcnlDb250ZXh0 U3dpdGNoVG8ob2xkY3R4KTsKKwl9CisJZWxzZQorCXsKKwkJQ29tbWFuZElkCWNpZDsKKworCQll ZGF0YSA9IExhc3RFRGF0YTsKKwkJZXN0YXRlID0gZWRhdGEtPmVzdGF0ZTsKKwkJUmVzZXRFeHBy Q29udGV4dChHZXRQZXJUdXBsZUV4cHJDb250ZXh0KGVzdGF0ZSkpOworCQlFeGVjQ2xlYXJUdXBs ZShMYXN0UmVtb3RlU2xvdCk7CisJCXJlbW90ZXNsb3QgPSBMYXN0UmVtb3RlU2xvdDsKKwkJY2lk ID0gR2V0Q3VycmVudENvbW1hbmRJZCh0cnVlKTsKKwkJTXVsdGlJbnNlcnRTdGF0ZS0+Y2lkID0g Y2lkOworCQllc3RhdGUtPmVzX291dHB1dF9jaWQgPSBjaWQ7CisJfQorCisJLyogUHJvY2VzcyBh bmQgc3RvcmUgcmVtb3RlIHR1cGxlIGluIHRoZSBzbG90ICovCisJbG9naWNhbHJlcF9yZWFkX2lu c2VydF92MihzLCAmbmV3dHVwKTsKKwlvbGRjdHggPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oR2V0 UGVyVHVwbGVNZW1vcnlDb250ZXh0KGVzdGF0ZSkpOworCXNsb3Rfc3RvcmVfZGF0YShyZW1vdGVz bG90LCByZWwsICZuZXd0dXApOworCXNsb3RfZmlsbF9kZWZhdWx0cyhyZWwsIGVzdGF0ZSwgcmVt b3Rlc2xvdCk7CisJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGN0eCk7CisKKwlUYXJnZXRQcml2 aWxlZ2VzQ2hlY2soZWRhdGEtPnRhcmdldFJlbEluZm8tPnJpX1JlbGF0aW9uRGVzYywgQUNMX0lO U0VSVCk7CisJRXhlY1JlbGF0aW9uTXVsdGlJbnNlcnQoTXVsdGlJbnNlcnRTdGF0ZSwgZWRhdGEt PnRhcmdldFJlbEluZm8sIGVzdGF0ZSwgcmVtb3Rlc2xvdCk7CisKKwkvKiBSZXNldCByZWxhdGlv biBmb3IgZXJyb3IgY2FsbGJhY2sgKi8KKwlhcHBseV9lcnJvcl9jYWxsYmFja19hcmcucmVsID0g TlVMTDsKKworCWlmICghcnVuX2FzX293bmVyKQorCQlSZXN0b3JlVXNlckNvbnRleHQoJnVjeHQp OworCisJQXNzZXJ0KE11bHRpSW5zZXJ0U3RhdGUgIT0gTlVMTCk7CisKKwlDb21tYW5kQ291bnRl ckluY3JlbWVudCgpOworCisJcmV0dXJuIExSX01VTFRJX0lOU0VSVF9ET05FOworfQorCitzdGF0 aWMgYm9vbAorZG9fc2luZ2xlX2luc2VydHMoU3RyaW5nSW5mbyBzLCBMb2dpY2FsUmVwUmVsSWQg cmVsaWQpCit7CisJTG9naWNhbFJlcFJlbE1hcEVudHJ5ICpyZWw7CisJTG9naWNhbFJlcFR1cGxl RGF0YSBuZXd0dXA7CisJVXNlckNvbnRleHQgdWN4dDsKKwlBcHBseUV4ZWN1dGlvbkRhdGEgKmVk YXRhOworCUVTdGF0ZQkgICAqZXN0YXRlOworCVR1cGxlVGFibGVTbG90ICpyZW1vdGVzbG90Owor CU1lbW9yeUNvbnRleHQgb2xkY3R4OworCWJvb2wJCXJ1bl9hc19vd25lcjsKKworCUFzc2VydChy ZWxpZCAhPSBJbnZhbGlkT2lkKTsKIAogCWJlZ2luX3JlcGxpY2F0aW9uX3N0ZXAoKTsKIAotCXJl bGlkID0gbG9naWNhbHJlcF9yZWFkX2luc2VydChzLCAmbmV3dHVwKTsKIAlyZWwgPSBsb2dpY2Fs cmVwX3JlbF9vcGVuKHJlbGlkLCBSb3dFeGNsdXNpdmVMb2NrKTsKIAlpZiAoIXNob3VsZF9hcHBs eV9jaGFuZ2VzX2Zvcl9yZWwocmVsKSkKIAl7CkBAIC0yNDAwLDcgKzI2ODksNyBAQCBhcHBseV9o YW5kbGVfaW5zZXJ0KFN0cmluZ0luZm8gcykKIAkJICovCiAJCWxvZ2ljYWxyZXBfcmVsX2Nsb3Nl KHJlbCwgUm93RXhjbHVzaXZlTG9jayk7CiAJCWVuZF9yZXBsaWNhdGlvbl9zdGVwKCk7Ci0JCXJl dHVybjsKKwkJcmV0dXJuIGZhbHNlOwogCX0KIAogCS8qCkBAIC0yNDIyLDYgKzI3MTEsNyBAQCBh cHBseV9oYW5kbGVfaW5zZXJ0KFN0cmluZ0luZm8gcykKIAkJCQkJCQkJCQkmVFRTT3BzVmlydHVh bCk7CiAKIAkvKiBQcm9jZXNzIGFuZCBzdG9yZSByZW1vdGUgdHVwbGUgaW4gdGhlIHNsb3QgKi8K Kwlsb2dpY2FscmVwX3JlYWRfaW5zZXJ0X3YyKHMsICZuZXd0dXApOwogCW9sZGN0eCA9IE1lbW9y eUNvbnRleHRTd2l0Y2hUbyhHZXRQZXJUdXBsZU1lbW9yeUNvbnRleHQoZXN0YXRlKSk7CiAJc2xv dF9zdG9yZV9kYXRhKHJlbW90ZXNsb3QsIHJlbCwgJm5ld3R1cCk7CiAJc2xvdF9maWxsX2RlZmF1 bHRzKHJlbCwgZXN0YXRlLCByZW1vdGVzbG90KTsKQEAgLTI0NDYsNiArMjczNiwzNSBAQCBhcHBs eV9oYW5kbGVfaW5zZXJ0KFN0cmluZ0luZm8gcykKIAlsb2dpY2FscmVwX3JlbF9jbG9zZShyZWws IE5vTG9jayk7CiAKIAllbmRfcmVwbGljYXRpb25fc3RlcCgpOworCisJcmV0dXJuIHRydWU7Cit9 CisKKy8qCisgKiBIYW5kbGUgSU5TRVJUIG1lc3NhZ2UuCisgKi8KK3N0YXRpYyB2b2lkCithcHBs eV9oYW5kbGVfaW5zZXJ0KFN0cmluZ0luZm8gcykKK3sKKwlMUk11bHRpSW5zZXJ0UmV0dXJuU3Rh dHVzIG1pX3N0YXR1czsKKwlMb2dpY2FsUmVwUmVsSWQgcmVsaWQ7CisKKwkvKgorCSAqIFF1aWNr IHJldHVybiBpZiB3ZSBhcmUgc2tpcHBpbmcgZGF0YSBtb2RpZmljYXRpb24gY2hhbmdlcyBvciBo YW5kbGluZworCSAqIHN0cmVhbWVkIHRyYW5zYWN0aW9ucy4KKwkgKi8KKwlpZiAoaXNfc2tpcHBp bmdfY2hhbmdlcygpIHx8CisJCWhhbmRsZV9zdHJlYW1lZF90cmFuc2FjdGlvbihMT0dJQ0FMX1JF UF9NU0dfSU5TRVJULCBzKSkKKwkJcmV0dXJuOworCisJbWlfc3RhdHVzID0gZG9fbXVsdGlfaW5z ZXJ0cyhzLCAmcmVsaWQpOworCWlmIChtaV9zdGF0dXMgPT0gTFJfTVVMVElfSU5TRVJUX1JFTF9T S0lQUEVEIHx8CisJCW1pX3N0YXR1cyA9PSBMUl9NVUxUSV9JTlNFUlRfRE9ORSkKKwkJcmV0dXJu OworCisJZG9fc2luZ2xlX2luc2VydHMocywgcmVsaWQpOworCisJcmV0dXJuOwogfQogCiAvKgpA QCAtMjUzMiw2ICsyODUxLDggQEAgYXBwbHlfaGFuZGxlX3VwZGF0ZShTdHJpbmdJbmZvIHMpCiAJ TWVtb3J5Q29udGV4dCBvbGRjdHg7CiAJYm9vbAkJcnVuX2FzX293bmVyOwogCisJRmluaXNoTXVs dGlJbnNlcnRzKCk7CisKIAkvKgogCSAqIFF1aWNrIHJldHVybiBpZiB3ZSBhcmUgc2tpcHBpbmcg ZGF0YSBtb2RpZmljYXRpb24gY2hhbmdlcyBvciBoYW5kbGluZwogCSAqIHN0cmVhbWVkIHRyYW5z YWN0aW9ucy4KQEAgLTI3MTMsNiArMzAzNCw4IEBAIGFwcGx5X2hhbmRsZV9kZWxldGUoU3RyaW5n SW5mbyBzKQogCU1lbW9yeUNvbnRleHQgb2xkY3R4OwogCWJvb2wJCXJ1bl9hc19vd25lcjsKIAor CUZpbmlzaE11bHRpSW5zZXJ0cygpOworCiAJLyoKIAkgKiBRdWljayByZXR1cm4gaWYgd2UgYXJl IHNraXBwaW5nIGRhdGEgbW9kaWZpY2F0aW9uIGNoYW5nZXMgb3IgaGFuZGxpbmcKIAkgKiBzdHJl YW1lZCB0cmFuc2FjdGlvbnMuCkBAIC0zMTU0LDYgKzM0NzcsOCBAQCBhcHBseV9oYW5kbGVfdHJ1 bmNhdGUoU3RyaW5nSW5mbyBzKQogCUxpc3RDZWxsICAgKmxjOwogCUxPQ0tNT0RFCWxvY2ttb2Rl ID0gQWNjZXNzRXhjbHVzaXZlTG9jazsKIAorCUZpbmlzaE11bHRpSW5zZXJ0cygpOworCiAJLyoK IAkgKiBRdWljayByZXR1cm4gaWYgd2UgYXJlIHNraXBwaW5nIGRhdGEgbW9kaWZpY2F0aW9uIGNo YW5nZXMgb3IgaGFuZGxpbmcKIAkgKiBzdHJlYW1lZCB0cmFuc2FjdGlvbnMuCmRpZmYgLS1naXQg YS9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjdXRvci5oIGIvc3JjL2luY2x1ZGUvZXhlY3V0b3Iv ZXhlY3V0b3IuaAppbmRleCA5NzcwNzUyZWEzLi44ZjEwZWE5NzdiIDEwMDY0NAotLS0gYS9zcmMv aW5jbHVkZS9leGVjdXRvci9leGVjdXRvci5oCisrKyBiL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4 ZWN1dG9yLmgKQEAgLTE0LDYgKzE0LDcgQEAKICNpZm5kZWYgRVhFQ1VUT1JfSAogI2RlZmluZSBF WEVDVVRPUl9ICiAKKyNpbmNsdWRlICJhY2Nlc3MvdGFibGVhbS5oIgogI2luY2x1ZGUgImV4ZWN1 dG9yL2V4ZWNkZXNjLmgiCiAjaW5jbHVkZSAiZm1nci5oIgogI2luY2x1ZGUgIm5vZGVzL2xvY2tv cHRpb25zLmgiCkBAIC02NTYsNiArNjU3LDkgQEAgZXh0ZXJuIGJvb2wgUmVsYXRpb25GaW5kUmVw bFR1cGxlU2VxKFJlbGF0aW9uIHJlbCwgTG9ja1R1cGxlTW9kZSBsb2NrbW9kZSwKIAogZXh0ZXJu IHZvaWQgRXhlY1NpbXBsZVJlbGF0aW9uSW5zZXJ0KFJlc3VsdFJlbEluZm8gKnJlc3VsdFJlbElu Zm8sCiAJCQkJCQkJCQkgRVN0YXRlICplc3RhdGUsIFR1cGxlVGFibGVTbG90ICpzbG90KTsKK2V4 dGVybiB2b2lkIEV4ZWNSZWxhdGlvbk11bHRpSW5zZXJ0KFRhYmxlTW9kaWZ5U3RhdGUgKk11bHRp SW5zZXJ0U3RhdGUsCisJCQkJCQkJCQlSZXN1bHRSZWxJbmZvICpyZXN1bHRSZWxJbmZvLAorCQkJ CQkJCQkJRVN0YXRlICplc3RhdGUsIFR1cGxlVGFibGVTbG90ICpzbG90KTsKIGV4dGVybiB2b2lk IEV4ZWNTaW1wbGVSZWxhdGlvblVwZGF0ZShSZXN1bHRSZWxJbmZvICpyZXN1bHRSZWxJbmZvLAog CQkJCQkJCQkJIEVTdGF0ZSAqZXN0YXRlLCBFUFFTdGF0ZSAqZXBxc3RhdGUsCiAJCQkJCQkJCQkg VHVwbGVUYWJsZVNsb3QgKnNlYXJjaHNsb3QsIFR1cGxlVGFibGVTbG90ICpzbG90KTsKZGlmZiAt LWdpdCBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2xvZ2ljYWxwcm90by5oIGIvc3JjL2luY2x1 ZGUvcmVwbGljYXRpb24vbG9naWNhbHByb3RvLmgKaW5kZXggYzQwOTYzOGEyZS4uM2YzYTdmMGEz MSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vbG9naWNhbHByb3RvLmgKKysr IGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vbG9naWNhbHByb3RvLmgKQEAgLTIyNiw2ICsyMjYs OCBAQCBleHRlcm4gdm9pZCBsb2dpY2FscmVwX3dyaXRlX2luc2VydChTdHJpbmdJbmZvIG91dCwg VHJhbnNhY3Rpb25JZCB4aWQsCiAJCQkJCQkJCQlSZWxhdGlvbiByZWwsCiAJCQkJCQkJCQlUdXBs ZVRhYmxlU2xvdCAqbmV3c2xvdCwKIAkJCQkJCQkJCWJvb2wgYmluYXJ5LCBCaXRtYXBzZXQgKmNv bHVtbnMpOworZXh0ZXJuIExvZ2ljYWxSZXBSZWxJZCBsb2dpY2FscmVwX3JlYWRfcmVsaWQoU3Ry aW5nSW5mbyBpbik7CitleHRlcm4gdm9pZCBsb2dpY2FscmVwX3JlYWRfaW5zZXJ0X3YyKFN0cmlu Z0luZm8gaW4sIExvZ2ljYWxSZXBUdXBsZURhdGEgKm5ld3R1cCk7CiBleHRlcm4gTG9naWNhbFJl cFJlbElkIGxvZ2ljYWxyZXBfcmVhZF9pbnNlcnQoU3RyaW5nSW5mbyBpbiwgTG9naWNhbFJlcFR1 cGxlRGF0YSAqbmV3dHVwKTsKIGV4dGVybiB2b2lkIGxvZ2ljYWxyZXBfd3JpdGVfdXBkYXRlKFN0 cmluZ0luZm8gb3V0LCBUcmFuc2FjdGlvbklkIHhpZCwKIAkJCQkJCQkJCVJlbGF0aW9uIHJlbCwK ZGlmZiAtLWdpdCBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0IGIvc3JjL3Rvb2xz L3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKaW5kZXggNWUzZTkwMGNiOC4uODQ2MzM0MzMyNSAxMDA2 NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xz L3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTE0NjgsNiArMTQ2OCw4IEBAIExQVEhSRUFEX1NU QVJUX1JPVVRJTkUKIExQVFNUUgogTFBWT0lECiBMUFdTVFIKK0xSTW9kaWZ5QnVmZmVyRmx1c2hD b250ZXh0CitMUk11bHRpSW5zZXJ0UmV0dXJuU3RhdHVzCiBMU0VHCiBMVUlECiBMVlJlbFN0YXRl Ci0tIAoyLjM0LjEKCg== --00000000000084f79d06187909b6 Content-Type: application/octet-stream; name="v21-0005-Use-new-multi-insert-Table-AM-for-COPY-FROM.patch" Content-Disposition: attachment; filename="v21-0005-Use-new-multi-insert-Table-AM-for-COPY-FROM.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lw7hlwpw4 RnJvbSA1NjhhMDM2MWI1YjI1YzVhNDAxMmYyMWVjMmVhY2ZmMGU0OWU5NWE1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBCaGFyYXRoIFJ1cGlyZWRkeSA8YmhhcmF0aC5ydXBpcmVkZHlm b3Jwb3N0Z3Jlc0BnbWFpbC5jb20+CkRhdGU6IFdlZCwgMTUgTWF5IDIwMjQgMDU6NTY6MzMgKzAw MDAKU3ViamVjdDogW1BBVENIIHYyMSA1LzVdIFVzZSBuZXcgbXVsdGkgaW5zZXJ0IFRhYmxlIEFN IGZvciBDT1BZIEZST00KCi0tLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weWZyb20uYyAgICAg ICAgICB8IDIzNiArKysrKysrKysrKysrKystLS0tLS0tLQogc3JjL2luY2x1ZGUvY29tbWFuZHMv Y29weWZyb21faW50ZXJuYWwuaCB8ICAgNCArLQogc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZz Lmxpc3QgICAgICAgICB8ICAgMSArCiAzIGZpbGVzIGNoYW5nZWQsIDE2MCBpbnNlcnRpb25zKCsp LCA4MSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5 ZnJvbS5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weWZyb20uYwppbmRleCBjZTRkNjJlNzA3 Li5iZjU2ZGQyM2Y3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5ZnJvbS5j CisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHlmcm9tLmMKQEAgLTcxLDE0ICs3MSwyNSBA QAogLyogVHJpbSB0aGUgbGlzdCBvZiBidWZmZXJzIGJhY2sgZG93biB0byB0aGlzIG51bWJlciBh ZnRlciBmbHVzaGluZyAqLwogI2RlZmluZSBNQVhfUEFSVElUSU9OX0JVRkZFUlMJMzIKIAordHlw ZWRlZiBzdHJ1Y3QgQ29weU1vZGlmeUJ1ZmZlckZsdXNoQ29udGV4dAoreworCUNvcHlGcm9tU3Rh dGUgY3N0YXRlOworCVJlc3VsdFJlbEluZm8gKnJlc3VsdFJlbEluZm87CisJRVN0YXRlCSAgICpl c3RhdGU7Cit9IENvcHlNb2RpZnlCdWZmZXJGbHVzaENvbnRleHQ7CisKIC8qIFN0b3JlcyBtdWx0 aS1pbnNlcnQgZGF0YSByZWxhdGVkIHRvIGEgc2luZ2xlIHJlbGF0aW9uIGluIENvcHlGcm9tLiAq LwogdHlwZWRlZiBzdHJ1Y3QgQ29weU11bHRpSW5zZXJ0QnVmZmVyCiB7Ci0JVHVwbGVUYWJsZVNs b3QgKnNsb3RzW01BWF9CVUZGRVJFRF9UVVBMRVNdOyAvKiBBcnJheSB0byBzdG9yZSB0dXBsZXMg Ki8KKwlUYWJsZU1vZGlmeVN0YXRlICptc3RhdGU7CS8qIFRhYmxlIGluc2VydCBzdGF0ZTsgTlVM TCBpZiBmb3JlaWduIHRhYmxlICovCisJVHVwbGVUYWJsZVNsb3QgKipzbG90czsJCS8qIEFycmF5 IHRvIHN0b3JlIHR1cGxlcyAqLwogCVJlc3VsdFJlbEluZm8gKnJlc3VsdFJlbEluZm87CS8qIFJl c3VsdFJlbEluZm8gZm9yICdyZWxpZCcgKi8KLQlCdWxrSW5zZXJ0U3RhdGUgYmlzdGF0ZTsJLyog QnVsa0luc2VydFN0YXRlIGZvciB0aGlzIHJlbCBpZiBwbGFpbgotCQkJCQkJCQkgKiB0YWJsZTsg TlVMTCBpZiBmb3JlaWduIHRhYmxlICovCisJVHVwbGVUYWJsZVNsb3QgKm11bHRpc2xvdDsKKwlD b3B5TW9kaWZ5QnVmZmVyRmx1c2hDb250ZXh0ICptb2RpZnlfYnVmZmVyX2ZsdXNoX2NvbnRleHQ7 CiAJaW50CQkJbnVzZWQ7CQkJLyogbnVtYmVyIG9mICdzbG90cycgY29udGFpbmluZyB0dXBsZXMg Ki8KKwlpbnQJCQljdXJyc2xvdG5vOwkJLyogQ3VycmVudCBidWZmZXJlZCBzbG90IG51bWJlciB0 aGF0J3MgYmVpbmcKKwkJCQkJCQkJICogZmx1c2hlZDsgVXNlZCB0byBnZXQgY29ycmVjdCBjdXJf bGluZW5vIGZvcgorCQkJCQkJCQkgKiBlcnJvcnMgd2hpbGUgaW4gZmx1c2ggY2FsbGJhY2suICov CiAJdWludDY0CQlsaW5lbm9zW01BWF9CVUZGRVJFRF9UVVBMRVNdOwkvKiBMaW5lICMgb2YgdHVw bGUgaW4gY29weQogCQkJCQkJCQkJCQkJICogc3RyZWFtICovCiB9IENvcHlNdWx0aUluc2VydEJ1 ZmZlcjsKQEAgLTk5LDYgKzExMCw3IEBAIHR5cGVkZWYgc3RydWN0IENvcHlNdWx0aUluc2VydElu Zm8KIAlpbnQJCQl0aV9vcHRpb25zOwkJLyogdGFibGUgaW5zZXJ0IG9wdGlvbnMgKi8KIH0gQ29w eU11bHRpSW5zZXJ0SW5mbzsKIAorc3RhdGljIHZvaWQgQ29weU1vZGlmeUJ1ZmZlckZsdXNoQ2Fs bGJhY2sodm9pZCAqY29udGV4dCwgVHVwbGVUYWJsZVNsb3QgKnNsb3QpOwogCiAvKiBub24tZXhw b3J0IGZ1bmN0aW9uIHByb3RvdHlwZXMgKi8KIHN0YXRpYyB2b2lkIENsb3NlUGlwZUZyb21Qcm9n cmFtKENvcHlGcm9tU3RhdGUgY3N0YXRlKTsKQEAgLTIxOCwxNCArMjMwLDM5IEBAIENvcHlMaW1p dFByaW50b3V0TGVuZ3RoKGNvbnN0IGNoYXIgKnN0cikKICAqIFJlc3VsdFJlbEluZm8uCiAgKi8K IHN0YXRpYyBDb3B5TXVsdGlJbnNlcnRCdWZmZXIgKgotQ29weU11bHRpSW5zZXJ0QnVmZmVySW5p dChSZXN1bHRSZWxJbmZvICpycmkpCitDb3B5TXVsdGlJbnNlcnRCdWZmZXJJbml0KENvcHlNdWx0 aUluc2VydEluZm8gKm1paW5mbywgUmVzdWx0UmVsSW5mbyAqcnJpLAorCQkJCQkJICBDb3B5RnJv bVN0YXRlIGNzdGF0ZSwgRVN0YXRlICplc3RhdGUpCiB7CiAJQ29weU11bHRpSW5zZXJ0QnVmZmVy ICpidWZmZXI7CiAKIAlidWZmZXIgPSAoQ29weU11bHRpSW5zZXJ0QnVmZmVyICopIHBhbGxvYyhz aXplb2YoQ29weU11bHRpSW5zZXJ0QnVmZmVyKSk7Ci0JbWVtc2V0KGJ1ZmZlci0+c2xvdHMsIDAs IHNpemVvZihUdXBsZVRhYmxlU2xvdCAqKSAqIE1BWF9CVUZGRVJFRF9UVVBMRVMpOworCisJaWYg KHJyaS0+cmlfRmR3Um91dGluZSA9PSBOVUxMKQorCXsKKwkJYnVmZmVyLT5tb2RpZnlfYnVmZmVy X2ZsdXNoX2NvbnRleHQgPSAoQ29weU1vZGlmeUJ1ZmZlckZsdXNoQ29udGV4dCAqKSBwYWxsb2Mo c2l6ZW9mKENvcHlNb2RpZnlCdWZmZXJGbHVzaENvbnRleHQpKTsKKwkJYnVmZmVyLT5tb2RpZnlf YnVmZmVyX2ZsdXNoX2NvbnRleHQtPmNzdGF0ZSA9IGNzdGF0ZTsKKwkJYnVmZmVyLT5tb2RpZnlf YnVmZmVyX2ZsdXNoX2NvbnRleHQtPnJlc3VsdFJlbEluZm8gPSBycmk7CisJCWJ1ZmZlci0+bW9k aWZ5X2J1ZmZlcl9mbHVzaF9jb250ZXh0LT5lc3RhdGUgPSBlc3RhdGU7CisKKwkJYnVmZmVyLT5t c3RhdGUgPSB0YWJsZV9tb2RpZnlfYmVnaW4ocnJpLT5yaV9SZWxhdGlvbkRlc2MsCisJCQkJCQkJ CQkJCVRNX0ZMQUdfTVVMVElfSU5TRVJUUyB8CisJCQkJCQkJCQkJCVRNX0ZMQUdfQkFTX0JVTEtX UklURSB8CisJCQkJCQkJCQkJCVRNX1NLSVBfSU5URVJOQUxfQlVGRkVSX0ZMVVNILAorCQkJCQkJ CQkJCQltaWluZm8tPm15Y2lkLAorCQkJCQkJCQkJCQltaWluZm8tPnRpX29wdGlvbnMsCisJCQkJ CQkJCQkJCUNvcHlNb2RpZnlCdWZmZXJGbHVzaENhbGxiYWNrLAorCQkJCQkJCQkJCQlidWZmZXIt Pm1vZGlmeV9idWZmZXJfZmx1c2hfY29udGV4dCk7CisJCWJ1ZmZlci0+c2xvdHMgPSBOVUxMOwor CQlidWZmZXItPm11bHRpc2xvdCA9IE5VTEw7CisJfQorCWVsc2UKKwl7CisJCWJ1ZmZlci0+bXN0 YXRlID0gTlVMTDsKKwkJYnVmZmVyLT5zbG90cyA9IHBhbGxvYzAoc2l6ZW9mKFR1cGxlVGFibGVT bG90ICopICogTUFYX0JVRkZFUkVEX1RVUExFUyk7CisJCWJ1ZmZlci0+bXVsdGlzbG90ID0gTlVM TDsKKwl9CisKIAlidWZmZXItPnJlc3VsdFJlbEluZm8gPSBycmk7Ci0JYnVmZmVyLT5iaXN0YXRl ID0gKHJyaS0+cmlfRmR3Um91dGluZSA9PSBOVUxMKSA/IEdldEJ1bGtJbnNlcnRTdGF0ZSgpIDog TlVMTDsKIAlidWZmZXItPm51c2VkID0gMDsKIAogCXJldHVybiBidWZmZXI7CkBAIC0yMzYsMTEg KzI3MywxMiBAQCBDb3B5TXVsdGlJbnNlcnRCdWZmZXJJbml0KFJlc3VsdFJlbEluZm8gKnJyaSkK ICAqLwogc3RhdGljIGlubGluZSB2b2lkCiBDb3B5TXVsdGlJbnNlcnRJbmZvU2V0dXBCdWZmZXIo Q29weU11bHRpSW5zZXJ0SW5mbyAqbWlpbmZvLAotCQkJCQkJCSAgIFJlc3VsdFJlbEluZm8gKnJy aSkKKwkJCQkJCQkgICBSZXN1bHRSZWxJbmZvICpycmksIENvcHlGcm9tU3RhdGUgY3N0YXRlLAor CQkJCQkJCSAgIEVTdGF0ZSAqZXN0YXRlKQogewogCUNvcHlNdWx0aUluc2VydEJ1ZmZlciAqYnVm ZmVyOwogCi0JYnVmZmVyID0gQ29weU11bHRpSW5zZXJ0QnVmZmVySW5pdChycmkpOworCWJ1ZmZl ciA9IENvcHlNdWx0aUluc2VydEJ1ZmZlckluaXQobWlpbmZvLCBycmksIGNzdGF0ZSwgZXN0YXRl KTsKIAogCS8qIFNldHVwIGJhY2stbGluayBzbyB3ZSBjYW4gZWFzaWx5IGZpbmQgdGhpcyBidWZm ZXIgYWdhaW4gKi8KIAlycmktPnJpX0NvcHlNdWx0aUluc2VydEJ1ZmZlciA9IGJ1ZmZlcjsKQEAg LTI3Myw3ICszMTEsNyBAQCBDb3B5TXVsdGlJbnNlcnRJbmZvSW5pdChDb3B5TXVsdGlJbnNlcnRJ bmZvICptaWluZm8sIFJlc3VsdFJlbEluZm8gKnJyaSwKIAkgKiB0dXBsZXMgdGhlaXIgd2F5IGZv ciB0aGUgZmlyc3QgdGltZS4KIAkgKi8KIAlpZiAocnJpLT5yaV9SZWxhdGlvbkRlc2MtPnJkX3Jl bC0+cmVsa2luZCAhPSBSRUxLSU5EX1BBUlRJVElPTkVEX1RBQkxFKQotCQlDb3B5TXVsdGlJbnNl cnRJbmZvU2V0dXBCdWZmZXIobWlpbmZvLCBycmkpOworCQlDb3B5TXVsdGlJbnNlcnRJbmZvU2V0 dXBCdWZmZXIobWlpbmZvLCBycmksIGNzdGF0ZSwgZXN0YXRlKTsKIH0KIAogLyoKQEAgLTMxNyw4 ICszNTUsNiBAQCBDb3B5TXVsdGlJbnNlcnRCdWZmZXJGbHVzaChDb3B5TXVsdGlJbnNlcnRJbmZv ICptaWluZm8sCiAJCWludAkJCWJhdGNoX3NpemUgPSByZXN1bHRSZWxJbmZvLT5yaV9CYXRjaFNp emU7CiAJCWludAkJCXNlbnQgPSAwOwogCi0JCUFzc2VydChidWZmZXItPmJpc3RhdGUgPT0gTlVM TCk7Ci0KIAkJLyogRW5zdXJlIHRoYXQgdGhlIEZEVyBzdXBwb3J0cyBiYXRjaGluZyBhbmQgaXQn cyBlbmFibGVkICovCiAJCUFzc2VydChyZXN1bHRSZWxJbmZvLT5yaV9GZHdSb3V0aW5lLT5FeGVj Rm9yZWlnbkJhdGNoSW5zZXJ0KTsKIAkJQXNzZXJ0KGJhdGNoX3NpemUgPiAxKTsKQEAgLTM5MCwx MyArNDI2LDggQEAgQ29weU11bHRpSW5zZXJ0QnVmZmVyRmx1c2goQ29weU11bHRpSW5zZXJ0SW5m byAqbWlpbmZvLAogCX0KIAllbHNlCiAJewotCQlDb21tYW5kSWQJbXljaWQgPSBtaWluZm8tPm15 Y2lkOwotCQlpbnQJCQl0aV9vcHRpb25zID0gbWlpbmZvLT50aV9vcHRpb25zOwogCQlib29sCQls aW5lX2J1Zl92YWxpZCA9IGNzdGF0ZS0+bGluZV9idWZfdmFsaWQ7CiAJCXVpbnQ2NAkJc2F2ZV9j dXJfbGluZW5vID0gY3N0YXRlLT5jdXJfbGluZW5vOwotCQlNZW1vcnlDb250ZXh0IG9sZGNvbnRl eHQ7Ci0KLQkJQXNzZXJ0KGJ1ZmZlci0+YmlzdGF0ZSAhPSBOVUxMKTsKIAogCQkvKgogCQkgKiBQ cmludCBlcnJvciBjb250ZXh0IGluZm9ybWF0aW9uIGNvcnJlY3RseSwgaWYgb25lIG9mIHRoZSBv cGVyYXRpb25zCkBAIC00MDQsNTYgKzQzNSwxOCBAQCBDb3B5TXVsdGlJbnNlcnRCdWZmZXJGbHVz aChDb3B5TXVsdGlJbnNlcnRJbmZvICptaWluZm8sCiAJCSAqLwogCQljc3RhdGUtPmxpbmVfYnVm X3ZhbGlkID0gZmFsc2U7CiAKLQkJLyoKLQkJICogdGFibGVfbXVsdGlfaW5zZXJ0IG1heSBsZWFr IG1lbW9yeSwgc28gc3dpdGNoIHRvIHNob3J0LWxpdmVkIG1lbW9yeQotCQkgKiBjb250ZXh0IGJl Zm9yZSBjYWxsaW5nIGl0LgotCQkgKi8KLQkJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0 Y2hUbyhHZXRQZXJUdXBsZU1lbW9yeUNvbnRleHQoZXN0YXRlKSk7Ci0JCXRhYmxlX211bHRpX2lu c2VydChyZXN1bHRSZWxJbmZvLT5yaV9SZWxhdGlvbkRlc2MsCi0JCQkJCQkgICBzbG90cywKLQkJ CQkJCSAgIG51c2VkLAotCQkJCQkJICAgbXljaWQsCi0JCQkJCQkgICB0aV9vcHRpb25zLAotCQkJ CQkJICAgYnVmZmVyLT5iaXN0YXRlKTsKLQkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRl eHQpOworCQlBc3NlcnQoYnVmZmVyLT5jdXJyc2xvdG5vIDw9IGJ1ZmZlci0+bnVzZWQpOworCQli dWZmZXItPmN1cnJzbG90bm8gPSAwOwogCi0JCWZvciAoaSA9IDA7IGkgPCBudXNlZDsgaSsrKQot CQl7Ci0JCQkvKgotCQkJICogSWYgdGhlcmUgYXJlIGFueSBpbmRleGVzLCB1cGRhdGUgdGhlbSBm b3IgYWxsIHRoZSBpbnNlcnRlZAotCQkJICogdHVwbGVzLCBhbmQgcnVuIEFGVEVSIFJPVyBJTlNF UlQgdHJpZ2dlcnMuCi0JCQkgKi8KLQkJCWlmIChyZXN1bHRSZWxJbmZvLT5yaV9OdW1JbmRpY2Vz ID4gMCkKLQkJCXsKLQkJCQlMaXN0CSAgICpyZWNoZWNrSW5kZXhlczsKLQotCQkJCWNzdGF0ZS0+ Y3VyX2xpbmVubyA9IGJ1ZmZlci0+bGluZW5vc1tpXTsKLQkJCQlyZWNoZWNrSW5kZXhlcyA9Ci0J CQkJCUV4ZWNJbnNlcnRJbmRleFR1cGxlcyhyZXN1bHRSZWxJbmZvLAotCQkJCQkJCQkJCSAgYnVm ZmVyLT5zbG90c1tpXSwgZXN0YXRlLCBmYWxzZSwKLQkJCQkJCQkJCQkgIGZhbHNlLCBOVUxMLCBO SUwsIGZhbHNlKTsKLQkJCQlFeGVjQVJJbnNlcnRUcmlnZ2Vycyhlc3RhdGUsIHJlc3VsdFJlbElu Zm8sCi0JCQkJCQkJCQkgc2xvdHNbaV0sIHJlY2hlY2tJbmRleGVzLAotCQkJCQkJCQkJIGNzdGF0 ZS0+dHJhbnNpdGlvbl9jYXB0dXJlKTsKLQkJCQlsaXN0X2ZyZWUocmVjaGVja0luZGV4ZXMpOwot CQkJfQorCQl0YWJsZV9tb2RpZnlfYnVmZmVyX2ZsdXNoKGJ1ZmZlci0+bXN0YXRlKTsKIAotCQkJ LyoKLQkJCSAqIFRoZXJlJ3Mgbm8gaW5kZXhlcywgYnV0IHNlZSBpZiB3ZSBuZWVkIHRvIHJ1biBB RlRFUiBST1cgSU5TRVJUCi0JCQkgKiB0cmlnZ2VycyBhbnl3YXkuCi0JCQkgKi8KLQkJCWVsc2Ug aWYgKHJlc3VsdFJlbEluZm8tPnJpX1RyaWdEZXNjICE9IE5VTEwgJiYKLQkJCQkJIChyZXN1bHRS ZWxJbmZvLT5yaV9UcmlnRGVzYy0+dHJpZ19pbnNlcnRfYWZ0ZXJfcm93IHx8Ci0JCQkJCSAgcmVz dWx0UmVsSW5mby0+cmlfVHJpZ0Rlc2MtPnRyaWdfaW5zZXJ0X25ld190YWJsZSkpCi0JCQl7Ci0J CQkJY3N0YXRlLT5jdXJfbGluZW5vID0gYnVmZmVyLT5saW5lbm9zW2ldOwotCQkJCUV4ZWNBUklu c2VydFRyaWdnZXJzKGVzdGF0ZSwgcmVzdWx0UmVsSW5mbywKLQkJCQkJCQkJCSBzbG90c1tpXSwg TklMLAotCQkJCQkJCQkJIGNzdGF0ZS0+dHJhbnNpdGlvbl9jYXB0dXJlKTsKLQkJCX0KKwkJQXNz ZXJ0KGJ1ZmZlci0+Y3VycnNsb3RubyA8PSBidWZmZXItPm51c2VkKTsKKwkJYnVmZmVyLT5jdXJy c2xvdG5vID0gMDsKIAotCQkJRXhlY0NsZWFyVHVwbGUoc2xvdHNbaV0pOwotCQl9CisJCS8qCisJ CSAqIEluZGV4ZXMgYXJlIHVwZGF0ZWQgYW5kIEFGVEVSIFJPVyBJTlNFUlQgdHJpZ2dlcnMgKGlm IGFueSkgYXJlIHJ1bgorCQkgKiBpbiB0aGUgZmx1c2ggY2FsbGJhY2sgQ29weU1vZGlmeUJ1ZmZl ckZsdXNoQ2FsbGJhY2suCisJCSAqLwogCiAJCS8qIFVwZGF0ZSB0aGUgcm93IGNvdW50ZXIgYW5k IHByb2dyZXNzIG9mIHRoZSBDT1BZIGNvbW1hbmQgKi8KIAkJKnByb2Nlc3NlZCArPSBudXNlZDsK QEAgLTQ2OSw2ICs0NjIsNjAgQEAgQ29weU11bHRpSW5zZXJ0QnVmZmVyRmx1c2goQ29weU11bHRp SW5zZXJ0SW5mbyAqbWlpbmZvLAogCWJ1ZmZlci0+bnVzZWQgPSAwOwogfQogCitzdGF0aWMgdm9p ZAorQ29weU1vZGlmeUJ1ZmZlckZsdXNoQ2FsbGJhY2sodm9pZCAqY29udGV4dCwgVHVwbGVUYWJs ZVNsb3QgKnNsb3QpCit7CisJQ29weU1vZGlmeUJ1ZmZlckZsdXNoQ29udGV4dCAqY3R4ID0gKENv cHlNb2RpZnlCdWZmZXJGbHVzaENvbnRleHQgKikgY29udGV4dDsKKwlDb3B5RnJvbVN0YXRlIGNz dGF0ZSA9IGN0eC0+Y3N0YXRlOworCVJlc3VsdFJlbEluZm8gKnJlc3VsdFJlbEluZm8gPSBjdHgt PnJlc3VsdFJlbEluZm87CisJRVN0YXRlCSAgICplc3RhdGUgPSBjdHgtPmVzdGF0ZTsKKwlDb3B5 TXVsdGlJbnNlcnRCdWZmZXIgKmJ1ZmZlciA9IHJlc3VsdFJlbEluZm8tPnJpX0NvcHlNdWx0aUlu c2VydEJ1ZmZlcjsKKworCS8qIFF1aWNrIGV4aXQgaWYgbm8gaW5kZXhlcyBvciBubyB0cmlnZ2Vy cyAqLworCWlmICghKHJlc3VsdFJlbEluZm8tPnJpX051bUluZGljZXMgPiAwIHx8CisJCSAgKHJl c3VsdFJlbEluZm8tPnJpX1RyaWdEZXNjICE9IE5VTEwgJiYKKwkJICAgKHJlc3VsdFJlbEluZm8t PnJpX1RyaWdEZXNjLT50cmlnX2luc2VydF9hZnRlcl9yb3cgfHwKKwkJCXJlc3VsdFJlbEluZm8t PnJpX1RyaWdEZXNjLT50cmlnX2luc2VydF9uZXdfdGFibGUpKSkpCisJCXJldHVybjsKKworCS8q IENhbGxlciBtdXN0IHRha2UgY2FyZSBvZiBvcGVuaW5nIGFuZCBjbG9zaW5nIHRoZSBpbmRpY2Vz ICovCisKKwkvKgorCSAqIElmIHRoZXJlIGFyZSBhbnkgaW5kZXhlcywgdXBkYXRlIHRoZW0gZm9y IGFsbCB0aGUgaW5zZXJ0ZWQgdHVwbGVzLCBhbmQKKwkgKiBydW4gQUZURVIgUk9XIElOU0VSVCB0 cmlnZ2Vycy4KKwkgKi8KKwlpZiAocmVzdWx0UmVsSW5mby0+cmlfTnVtSW5kaWNlcyA+IDApCisJ eworCQlMaXN0CSAgICpyZWNoZWNrSW5kZXhlczsKKworCQljc3RhdGUtPmN1cl9saW5lbm8gPSBi dWZmZXItPmxpbmVub3NbYnVmZmVyLT5jdXJyc2xvdG5vKytdOworCQlyZWNoZWNrSW5kZXhlcyA9 CisJCQlFeGVjSW5zZXJ0SW5kZXhUdXBsZXMocmVzdWx0UmVsSW5mbywKKwkJCQkJCQkJICBzbG90 LCBlc3RhdGUsIGZhbHNlLAorCQkJCQkJCQkgIGZhbHNlLCBOVUxMLCBOSUwsIGZhbHNlKTsKKwkJ RXhlY0FSSW5zZXJ0VHJpZ2dlcnMoZXN0YXRlLCByZXN1bHRSZWxJbmZvLAorCQkJCQkJCSBzbG90 LCByZWNoZWNrSW5kZXhlcywKKwkJCQkJCQkgY3N0YXRlLT50cmFuc2l0aW9uX2NhcHR1cmUpOwor CQlsaXN0X2ZyZWUocmVjaGVja0luZGV4ZXMpOworCX0KKworCS8qCisJICogVGhlcmUncyBubyBp bmRleGVzLCBidXQgc2VlIGlmIHdlIG5lZWQgdG8gcnVuIEFGVEVSIFJPVyBJTlNFUlQgdHJpZ2dl cnMKKwkgKiBhbnl3YXkuCisJICovCisJZWxzZSBpZiAocmVzdWx0UmVsSW5mby0+cmlfVHJpZ0Rl c2MgIT0gTlVMTCAmJgorCQkJIChyZXN1bHRSZWxJbmZvLT5yaV9UcmlnRGVzYy0+dHJpZ19pbnNl cnRfYWZ0ZXJfcm93IHx8CisJCQkgIHJlc3VsdFJlbEluZm8tPnJpX1RyaWdEZXNjLT50cmlnX2lu c2VydF9uZXdfdGFibGUpKQorCXsKKwkJY3N0YXRlLT5jdXJfbGluZW5vID0gYnVmZmVyLT5saW5l bm9zW2J1ZmZlci0+Y3VycnNsb3RubysrXTsKKwkJRXhlY0FSSW5zZXJ0VHJpZ2dlcnMoZXN0YXRl LCByZXN1bHRSZWxJbmZvLAorCQkJCQkJCSBzbG90LCBOSUwsCisJCQkJCQkJIGNzdGF0ZS0+dHJh bnNpdGlvbl9jYXB0dXJlKTsKKwl9CisKKwlBc3NlcnQoYnVmZmVyLT5jdXJyc2xvdG5vIDw9IGJ1 ZmZlci0+bnVzZWQpOworfQorCiAvKgogICogRHJvcCB1c2VkIHNsb3RzIGFuZCBmcmVlIG1lbWJl ciBmb3IgdGhpcyBidWZmZXIuCiAgKgpAQCAtNDg5LDE5ICs1MzYsMTggQEAgQ29weU11bHRpSW5z ZXJ0QnVmZmVyQ2xlYW51cChDb3B5TXVsdGlJbnNlcnRJbmZvICptaWluZm8sCiAKIAlpZiAocmVz dWx0UmVsSW5mby0+cmlfRmR3Um91dGluZSA9PSBOVUxMKQogCXsKLQkJQXNzZXJ0KGJ1ZmZlci0+ YmlzdGF0ZSAhPSBOVUxMKTsKLQkJRnJlZUJ1bGtJbnNlcnRTdGF0ZShidWZmZXItPmJpc3RhdGUp OworCQl0YWJsZV9tb2RpZnlfZW5kKGJ1ZmZlci0+bXN0YXRlKTsKKwkJRXhlY0Ryb3BTaW5nbGVU dXBsZVRhYmxlU2xvdChidWZmZXItPm11bHRpc2xvdCk7CisJCXBmcmVlKGJ1ZmZlci0+bW9kaWZ5 X2J1ZmZlcl9mbHVzaF9jb250ZXh0KTsKIAl9CiAJZWxzZQotCQlBc3NlcnQoYnVmZmVyLT5iaXN0 YXRlID09IE5VTEwpOwotCi0JLyogU2luY2Ugd2Ugb25seSBjcmVhdGUgc2xvdHMgb24gZGVtYW5k LCBqdXN0IGRyb3AgdGhlIG5vbi1udWxsIG9uZXMuICovCi0JZm9yIChpID0gMDsgaSA8IE1BWF9C VUZGRVJFRF9UVVBMRVMgJiYgYnVmZmVyLT5zbG90c1tpXSAhPSBOVUxMOyBpKyspCi0JCUV4ZWNE cm9wU2luZ2xlVHVwbGVUYWJsZVNsb3QoYnVmZmVyLT5zbG90c1tpXSk7CisJeworCQkvKiBTaW5j ZSB3ZSBvbmx5IGNyZWF0ZSBzbG90cyBvbiBkZW1hbmQsIGp1c3QgZHJvcCB0aGUgbm9uLW51bGwg b25lcy4gKi8KKwkJZm9yIChpID0gMDsgaSA8IE1BWF9CVUZGRVJFRF9UVVBMRVMgJiYgYnVmZmVy LT5zbG90c1tpXSAhPSBOVUxMOyBpKyspCisJCQlFeGVjRHJvcFNpbmdsZVR1cGxlVGFibGVTbG90 KGJ1ZmZlci0+c2xvdHNbaV0pOwogCi0JaWYgKHJlc3VsdFJlbEluZm8tPnJpX0Zkd1JvdXRpbmUg PT0gTlVMTCkKLQkJdGFibGVfZmluaXNoX2J1bGtfaW5zZXJ0KHJlc3VsdFJlbEluZm8tPnJpX1Jl bGF0aW9uRGVzYywKLQkJCQkJCQkJIG1paW5mby0+dGlfb3B0aW9ucyk7CisJCXBmcmVlKGJ1ZmZl ci0+c2xvdHMpOworCX0KIAogCXBmcmVlKGJ1ZmZlcik7CiB9CkBAIC01ODgsMTMgKzYzNCwzMiBA QCBDb3B5TXVsdGlJbnNlcnRJbmZvTmV4dEZyZWVTbG90KENvcHlNdWx0aUluc2VydEluZm8gKm1p aW5mbywKIHsKIAlDb3B5TXVsdGlJbnNlcnRCdWZmZXIgKmJ1ZmZlciA9IHJyaS0+cmlfQ29weU11 bHRpSW5zZXJ0QnVmZmVyOwogCWludAkJCW51c2VkID0gYnVmZmVyLT5udXNlZDsKKwlUdXBsZVRh YmxlU2xvdCAqc2xvdDsKIAogCUFzc2VydChidWZmZXIgIT0gTlVMTCk7CiAJQXNzZXJ0KG51c2Vk IDwgTUFYX0JVRkZFUkVEX1RVUExFUyk7CiAKLQlpZiAoYnVmZmVyLT5zbG90c1tudXNlZF0gPT0g TlVMTCkKLQkJYnVmZmVyLT5zbG90c1tudXNlZF0gPSB0YWJsZV9zbG90X2NyZWF0ZShycmktPnJp X1JlbGF0aW9uRGVzYywgTlVMTCk7Ci0JcmV0dXJuIGJ1ZmZlci0+c2xvdHNbbnVzZWRdOworCWlm IChycmktPnJpX0Zkd1JvdXRpbmUgPT0gTlVMTCkKKwl7CisJCWlmIChidWZmZXItPm11bHRpc2xv dCA9PSBOVUxMKQorCQkJYnVmZmVyLT5tdWx0aXNsb3QgPSBNYWtlVHVwbGVUYWJsZVNsb3QoUmVs YXRpb25HZXREZXNjcihycmktPnJpX1JlbGF0aW9uRGVzYyksCisJCQkJCQkJCQkJCQkgICAmVFRT T3BzVmlydHVhbCk7CisKKwkJLyogQ2FsbGVyIG11c3QgY2xlYXIgdGhlIHNsb3QgKi8KKwkJc2xv dCA9IGJ1ZmZlci0+bXVsdGlzbG90OworCX0KKwllbHNlCisJeworCQlpZiAoYnVmZmVyLT5zbG90 c1tudXNlZF0gPT0gTlVMTCkKKwkJeworCQkJc2xvdCA9IHRhYmxlX3Nsb3RfY3JlYXRlKHJyaS0+ cmlfUmVsYXRpb25EZXNjLCBOVUxMKTsKKwkJCWJ1ZmZlci0+c2xvdHNbbnVzZWRdID0gc2xvdDsK KwkJfQorCQllbHNlCisJCQlzbG90ID0gYnVmZmVyLT5zbG90c1tudXNlZF07CisJfQorCisJcmV0 dXJuIHNsb3Q7CiB9CiAKIC8qCkBAIC02MDgsNyArNjczLDExIEBAIENvcHlNdWx0aUluc2VydElu Zm9TdG9yZShDb3B5TXVsdGlJbnNlcnRJbmZvICptaWluZm8sIFJlc3VsdFJlbEluZm8gKnJyaSwK IAlDb3B5TXVsdGlJbnNlcnRCdWZmZXIgKmJ1ZmZlciA9IHJyaS0+cmlfQ29weU11bHRpSW5zZXJ0 QnVmZmVyOwogCiAJQXNzZXJ0KGJ1ZmZlciAhPSBOVUxMKTsKLQlBc3NlcnQoc2xvdCA9PSBidWZm ZXItPnNsb3RzW2J1ZmZlci0+bnVzZWRdKTsKKworI2lmZGVmIFVTRV9BU1NFUlRfQ0hFQ0tJTkcK KwlpZiAocnJpLT5yaV9GZHdSb3V0aW5lICE9IE5VTEwpCisJCUFzc2VydChzbG90ID09IGJ1ZmZl ci0+c2xvdHNbYnVmZmVyLT5udXNlZF0pOworI2VuZGlmCiAKIAkvKiBTdG9yZSB0aGUgbGluZSBu dW1iZXIgc28gd2UgY2FuIHByb3Blcmx5IHJlcG9ydCBhbnkgZXJyb3JzIGxhdGVyICovCiAJYnVm ZmVyLT5saW5lbm9zW2J1ZmZlci0+bnVzZWRdID0gbGluZW5vOwpAQCAtNjE2LDYgKzY4NSwxNCBA QCBDb3B5TXVsdGlJbnNlcnRJbmZvU3RvcmUoQ29weU11bHRpSW5zZXJ0SW5mbyAqbWlpbmZvLCBS ZXN1bHRSZWxJbmZvICpycmksCiAJLyogUmVjb3JkIHRoaXMgc2xvdCBhcyBiZWluZyB1c2VkICov CiAJYnVmZmVyLT5udXNlZCsrOwogCisJaWYgKHJyaS0+cmlfRmR3Um91dGluZSA9PSBOVUxMKQor CXsKKwkJQXNzZXJ0KHNsb3QgPT0gYnVmZmVyLT5tdWx0aXNsb3QpOworCQlidWZmZXItPmN1cnJz bG90bm8gPSAwOworCisJCXRhYmxlX21vZGlmeV9idWZmZXJfaW5zZXJ0KGJ1ZmZlci0+bXN0YXRl LCBzbG90KTsKKwl9CisKIAkvKiBVcGRhdGUgaG93IG1hbnkgdHVwbGVzIGFyZSBzdG9yZWQgYW5k IHRoZWlyIHNpemUgKi8KIAltaWluZm8tPmJ1ZmZlcmVkVHVwbGVzKys7CiAJbWlpbmZvLT5idWZm ZXJlZEJ5dGVzICs9IHR1cGxlbjsKQEAgLTgzMCw3ICs5MDcsNyBAQCBDb3B5RnJvbShDb3B5RnJv bVN0YXRlIGNzdGF0ZSkKIAkvKgogCSAqIEl0J3MgZ2VuZXJhbGx5IG1vcmUgZWZmaWNpZW50IHRv IHByZXBhcmUgYSBidW5jaCBvZiB0dXBsZXMgZm9yCiAJICogaW5zZXJ0aW9uLCBhbmQgaW5zZXJ0 IHRoZW0gaW4gb25lCi0JICogdGFibGVfbXVsdGlfaW5zZXJ0KCkvRXhlY0ZvcmVpZ25CYXRjaElu c2VydCgpIGNhbGwsIHRoYW4gY2FsbAorCSAqIHRhYmxlX21vZGlmeV9idWZmZXJfaW5zZXJ0KCkv RXhlY0ZvcmVpZ25CYXRjaEluc2VydCgpIGNhbGwsIHRoYW4gY2FsbAogCSAqIHRhYmxlX3R1cGxl X2luc2VydCgpL0V4ZWNGb3JlaWduSW5zZXJ0KCkgc2VwYXJhdGVseSBmb3IgZXZlcnkgdHVwbGUu CiAJICogSG93ZXZlciwgdGhlcmUgYXJlIGEgbnVtYmVyIG9mIHJlYXNvbnMgd2h5IHdlIG1pZ2h0 IG5vdCBiZSBhYmxlIHRvIGRvCiAJICogdGhpcy4gIFRoZXNlIGFyZSBleHBsYWluZWQgYmVsb3cu CkBAIC0xMDgwLDcgKzExNTcsOCBAQCBDb3B5RnJvbShDb3B5RnJvbVN0YXRlIGNzdGF0ZSkKIAkJ CQl7CiAJCQkJCWlmIChyZXN1bHRSZWxJbmZvLT5yaV9Db3B5TXVsdGlJbnNlcnRCdWZmZXIgPT0g TlVMTCkKIAkJCQkJCUNvcHlNdWx0aUluc2VydEluZm9TZXR1cEJ1ZmZlcigmbXVsdGlJbnNlcnRJ bmZvLAotCQkJCQkJCQkJCQkJCSAgIHJlc3VsdFJlbEluZm8pOworCQkJCQkJCQkJCQkJCSAgIHJl c3VsdFJlbEluZm8sIGNzdGF0ZSwKKwkJCQkJCQkJCQkJCQkgICBlc3RhdGUpOwogCQkJCX0KIAkJ CQllbHNlIGlmIChpbnNlcnRNZXRob2QgPT0gQ0lNX01VTFRJX0NPTkRJVElPTkFMICYmCiAJCQkJ CQkgIUNvcHlNdWx0aUluc2VydEluZm9Jc0VtcHR5KCZtdWx0aUluc2VydEluZm8pKQpkaWZmIC0t Z2l0IGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvY29weWZyb21faW50ZXJuYWwuaCBiL3NyYy9pbmNs dWRlL2NvbW1hbmRzL2NvcHlmcm9tX2ludGVybmFsLmgKaW5kZXggY2FkNTJmY2M3OC4uMTRhZGRi YzZmNiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvY29weWZyb21faW50ZXJuYWwu aAorKysgYi9zcmMvaW5jbHVkZS9jb21tYW5kcy9jb3B5ZnJvbV9pbnRlcm5hbC5oCkBAIC00Niw5 ICs0Niw5IEBAIHR5cGVkZWYgZW51bSBFb2xUeXBlCiB0eXBlZGVmIGVudW0gQ29weUluc2VydE1l dGhvZAogewogCUNJTV9TSU5HTEUsCQkJCQkvKiB1c2UgdGFibGVfdHVwbGVfaW5zZXJ0IG9yIEV4 ZWNGb3JlaWduSW5zZXJ0ICovCi0JQ0lNX01VTFRJLAkJCQkJLyogYWx3YXlzIHVzZSB0YWJsZV9t dWx0aV9pbnNlcnQgb3IKKwlDSU1fTVVMVEksCQkJCQkvKiBhbHdheXMgdXNlIHRhYmxlX21vZGlm eV9idWZmZXJfaW5zZXJ0IG9yCiAJCQkJCQkJCSAqIEV4ZWNGb3JlaWduQmF0Y2hJbnNlcnQgKi8K LQlDSU1fTVVMVElfQ09ORElUSU9OQUwsCQkvKiB1c2UgdGFibGVfbXVsdGlfaW5zZXJ0IG9yCisJ Q0lNX01VTFRJX0NPTkRJVElPTkFMLAkJLyogdXNlIHRhYmxlX21vZGlmeV9idWZmZXJfaW5zZXJ0 IG9yCiAJCQkJCQkJCSAqIEV4ZWNGb3JlaWduQmF0Y2hJbnNlcnQgb25seSBpZiB2YWxpZCAqLwog fSBDb3B5SW5zZXJ0TWV0aG9kOwogCmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlw ZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CmluZGV4IDg0NjMz NDMzMjUuLjc0NTAxOTE1M2QgMTAwNjQ0Ci0tLSBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVm cy5saXN0CisrKyBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CkBAIC00OTMsNiAr NDkzLDcgQEAgQ29weUhlYWRlckNob2ljZQogQ29weUluc2VydE1ldGhvZAogQ29weUxvZ1ZlcmJv c2l0eUNob2ljZQogQ29weU1ldGhvZAorQ29weU1vZGlmeUJ1ZmZlckZsdXNoQ29udGV4dAogQ29w eU11bHRpSW5zZXJ0QnVmZmVyCiBDb3B5TXVsdGlJbnNlcnRJbmZvCiBDb3B5T25FcnJvckNob2lj ZQotLSAKMi4zNC4xCgo= --00000000000084f79d06187909b6--