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 1t4gsv-001leD-C3 for pgsql-hackers@arkaria.postgresql.org; Sat, 26 Oct 2024 13:31:17 +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 1t4gss-00952X-1I for pgsql-hackers@arkaria.postgresql.org; Sat, 26 Oct 2024 13:31:14 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1t4gsr-00952P-9r for pgsql-hackers@lists.postgresql.org; Sat, 26 Oct 2024 13:31:14 +0000 Received: from mail-lj1-x235.google.com ([2a00:1450:4864:20::235]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1t4gsk-002xeW-5b for pgsql-hackers@postgresql.org; Sat, 26 Oct 2024 13:31:12 +0000 Received: by mail-lj1-x235.google.com with SMTP id 38308e7fff4ca-2fb51f39394so29236861fa.2 for ; Sat, 26 Oct 2024 06:31:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1729949463; x=1730554263; 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=9s/KuxzO//wJsmG3Yk72TNV+HhFjoi5hW0N4615FiIs=; b=T2LbMOxgMw29gs54Xtb6k6HFa/YP4RY9EydkC4TBY2asdife1ZiOPqGo70VRYEZL1m kmyIlpzepQ53RIK2nbSR0MCZC8BHEzLT/OpKWpoi2gnUId0p6tSHK0ygljbi62x2XyYg uJaJNUd1dJASEbTRaEDd1Lt0ljexOEKRzmWzPwypI9foYm3b5j2rgfvDv4wXWJOM8JNu yQ+7j3eyxMXTPyacEyhD6sjNUS2dRloOGEZKGrHw3Gxi1zZzklWTCCnNW0RiwkSCJ+0S WvUHdP5YpEzMBXwgy6ZpXcXqDgRoNSZ6KyHUvLUotMhSetCMGuWJcy7LEbxO5Ow1Xla7 4uCA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1729949463; x=1730554263; 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=9s/KuxzO//wJsmG3Yk72TNV+HhFjoi5hW0N4615FiIs=; b=fWHfmrDGHLJM6+bMQ74VRr4BAAR5kYTpFJrqS2l9AEEg3zW+rolxvGPGAQ0lPAJi2v PLMFc0P067nFnKSa4PCnGoemhSx0Z16mO29KK3jUzZFamo7XP2a+56LuFOZbQJjbTBdM xS0vbFRK96/S9VgDh/awBrwxRFF20fq3jzwI9zxg4Tdiv1DbZOg7idrE0dz5B9Bf4R2W Hmcu7PEhF8TNYdBty6td6Z6znbbjZDRVMQTxMuA4DrSzXnUxDo7pYl3+wAPo0D1Cnng4 i8RNNiDU0CQ93S1qAnqSHvhCyo91YxOI/wcA1VOjku8SxhqMFX/IlQPuUEGNWG7VM+g7 m57w== X-Forwarded-Encrypted: i=1; AJvYcCVegzbGED6VajYzcfdSNeyanIQJKAOIigamrn6RzRgWCNdMslIqIlLySR+ALVerFmGf0Hm0n3KgPmAMfvkY@postgresql.org X-Gm-Message-State: AOJu0YwY204ugTOgjiuamg+jaBWSciVni4KKWHT3PcQdY/UzIfaRs/Cv tKxnijp7JcSql6NLj/FhDKCY19Jx2j4NAZVoFDdQ1OUoeCdYtuWrsl5AsksrXpHcNP/7cHVjMsW 4l17WWb2qRzQt+LMImI/gXMbtVtc= X-Google-Smtp-Source: AGHT+IF34SBxfzhZ+vDV/lXGtZMbeJS7IhkYSG1LFZltT/2b1bsTHZFCxrF5iOlYSaHhB3lrFmPLBMx5VCAdTw70P+U= X-Received: by 2002:a05:651c:b09:b0:2fb:4951:18a with SMTP id 38308e7fff4ca-2fcbe0b5bc8mr10086641fa.37.1729949463055; Sat, 26 Oct 2024 06:31:03 -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> <229c4f7219ed164088dadc935df21e1cf125e191.camel@j-davis.com> <23a29125a2d07f96d49f97c31fcdb09a7f0ff6c1.camel@j-davis.com> In-Reply-To: From: Bharath Rupireddy Date: Sat, 26 Oct 2024 06:30:50 -0700 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="00000000000039bd1c0625613fb8" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000039bd1c0625613fb8 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi, Thanks for looking into this. On Thu, Aug 29, 2024 at 12:29=E2=80=AFPM Jeff Davis wro= te: > > I believe we need the branching in the caller anyway: > > 1. If there is a BEFORE row trigger with a volatile function, the > visibility rules[1] mean that the function should see changes from all > the rows inserted so far this command, which won't work if they are > still in the buffer. > > 2. Similarly, for an INSTEAD OF row trigger, the visibility rules say > that the function should see all previous rows inserted. > > 3. If there are volatile functions in the target list or WHERE clause, > the same visibility semantics apply. > > 4. If there's a "RETURNING ctid" clause, we need to either come up with > a way to return the tuples after flushing, or we need to use the > single-tuple path. (Similarly in the future when we support UPDATE ... > RETURNING, as Matthias pointed out.) > > If we need two paths in each caller anyway, it seems cleaner to just > wrap the check for tuple_modify_buffer_insert in > table_modify_buffer_enabled(). > > We could perhaps use a one path and then force a batch size of one or > something, which is an alternative, but we have to be careful not to > introduce a regression (and it still requires a solution for #4). I chose to branch in the caller e.g. if there's a volatile function SELECT query of REFRESH MATERIALIZED VIEW, the caller goes table_tuple_insert() path, else multi-insert path. I am posting the new v24 patch set organized as follows: 0001 introducing the new table AM, 0002 optimizing CTAS, CMV and RMV, 0003 using the new table AM for COPY ... FROM. I, for now, discarded the INSERT INTO ... SELECT and Logical Replication Apply patches, the idea is to take the basic stuff forward. I reworked structure names, members and function names, reworded comments, addressed review comments in the v24 patches. Please have a look. --=20 Bharath Rupireddy PostgreSQL Contributors Team RDS Open Source Databases Amazon Web Services: https://aws.amazon.com --00000000000039bd1c0625613fb8 Content-Type: application/octet-stream; name="v24-0002-Optimize-CTAS-CMV-RMV-with-new-multi-inserts-tab.patch" Content-Disposition: attachment; filename="v24-0002-Optimize-CTAS-CMV-RMV-with-new-multi-inserts-tab.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m2q76pek1 RnJvbSAwOTZkZjdhNzU4YjBiN2NmMDBiOTliZTllNGZmYWRmMTVjZWVmNTM1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBCaGFyYXRoIFJ1cGlyZWRkeSA8cnVwaXJlZGRAYW1hem9uLmNv bT4KRGF0ZTogU2F0LCAyNiBPY3QgMjAyNCAxMjozNTo1MSArMDAwMApTdWJqZWN0OiBbUEFUQ0gg djI0IDIvNF0gT3B0aW1pemUgQ1RBUy9DTVYvUk1WIHdpdGggbmV3IG11bHRpLWluc2VydHMgdGFi bGUgQU0KClRoaXMgY29tbWl0IG9wdGltaXplcyB0aGUgZm9sbG93aW5nIGNvbW1hbmRzIGZvciBo ZWFwIEFNIHVzaW5nIG5ldwptdWx0aS1pbnNlcnRzIHRhYmxlIEFNIGFkZGVkIGJ5IGNvbW1pdCA8 PENIQU5HRV9NRT4+OgotIENSRUFURSBUQUJMRSBBUwotIENSRUFURSBNQVRFUklBTElaRUQgVklF VwotIFJFRlJFU0ggTUFURVJJQUxJWkVEIFZJRVcKClRlc3Rpbmcgc2hvd3MgdGhhdCBwZXJmb3Jt YW5jZSBvZiBDVEFTLCBDTVYsIFJNViBpcyBpbXByb3ZlZCBieQo8PFRPX0ZJTEw+PiByZXNwZWN0 aXZlbHkgb24gPDxUT19GSUxMPj4gc3lzdGVtLgpmCkF1dGhvcjogQmhhcmF0aCBSdXBpcmVkZHkK UmV2aWV3ZWQtYnk6IEplZmYgRGF2aXMKRGlzY3Vzc2lvbjogaHR0cHM6Ly93d3cucG9zdGdyZXNx bC5vcmcvbWVzc2FnZS1pZC8yMDIwMDkyNDAyNDEyOC5reWszcjVnN2RudTNmeHh4QGFsYXAzLmFu YXJhemVsLmRlCkRpc2N1c3Npb246IGh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3JnL21lc3NhZ2Ut aWQvQ0FMajJBQ1ZpOWVUUllSJTNEZ2RjYTV3eHRqM0trXzlxOXFWY2N4c1MxaG5nVEdPQ2pQd1El NDBtYWlsLmdtYWlsLmNvbQpEaXNjdXNzaW9uOiBodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9t ZXNzYWdlLWlkLzg2MzMxNzFjYjAzNGFhZmMyNjBmZGYzN2RmMDRiNmM3NzlhYTFlMmYuY2FtZWwl NDBqLWRhdmlzLmNvbQotLS0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2NyZWF0ZWFzLmMgfCAgNjAg KysrKysrKysrKysrKystLS0tCiBzcmMvYmFja2VuZC9jb21tYW5kcy9tYXR2aWV3LmMgIHwgMTA2 ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tCiBzcmMvaW5jbHVkZS9jb21tYW5kcy9t YXR2aWV3LmggIHwgICAzICsKIDMgZmlsZXMgY2hhbmdlZCwgMTQ3IGluc2VydGlvbnMoKyksIDIy IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NyZWF0ZWFz LmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9jcmVhdGVhcy5jCmluZGV4IDY4ZWMxMjJkYmYuLjBh ZmZhZGY0MDQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NyZWF0ZWFzLmMKKysr IGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvY3JlYXRlYXMuYwpAQCAtMzgsNiArMzgsNyBAQAogI2lu Y2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgIm5vZGVzL21ha2VmdW5jcy5oIgogI2luY2x1 ZGUgIm5vZGVzL25vZGVGdW5jcy5oIgorI2luY2x1ZGUgIm9wdGltaXplci9vcHRpbWl6ZXIuaCIK ICNpbmNsdWRlICJyZXdyaXRlL3Jld3JpdGVIYW5kbGVyLmgiCiAjaW5jbHVkZSAidGNvcC90Y29w cHJvdC5oIgogI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCkBAIC01Niw2ICs1NywxMiBAQCB0 eXBlZGVmIHN0cnVjdAogCUNvbW1hbmRJZAlvdXRwdXRfY2lkOwkJLyogY21pbiB0byBpbnNlcnQg aW4gb3V0cHV0IHR1cGxlcyAqLwogCWludAkJCXRpX29wdGlvbnM7CQkvKiB0YWJsZV90dXBsZV9p bnNlcnQgcGVyZm9ybWFuY2Ugb3B0aW9ucyAqLwogCUJ1bGtJbnNlcnRTdGF0ZSBiaXN0YXRlOwkv KiBidWxrIGluc2VydCBzdGF0ZSAqLworCisJLyogVGFibGUgbW9kaWZ5IHN0YXRlLiBOVUxMIGlm IG11bHRpLWluc2VydHMgaXNuJ3Qgc3VwcG9ydGVkLiAqLworCVRhYmxlTW9kaWZ5U3RhdGUgKm1z dGF0ZTsKKworCS8qIFRydWUgaWYgU0VMRUNUIHF1ZXJ5IGNvbnRhaW5zIHZvbGF0aWxlIGZ1bmN0 aW9ucyAqLworCWJvb2wJCXZvbGF0aWxlX2Z1bmNzOwogfSBEUl9pbnRvcmVsOwogCiAvKiB1dGls aXR5IGZ1bmN0aW9ucyBmb3IgQ1RBUyBkZWZpbml0aW9uIGNyZWF0aW9uICovCkBAIC0zMTMsNiAr MzIwLDEwIEBAIEV4ZWNDcmVhdGVUYWJsZUFzKFBhcnNlU3RhdGUgKnBzdGF0ZSwgQ3JlYXRlVGFi bGVBc1N0bXQgKnN0bXQsCiAJCXBsYW4gPSBwZ19wbGFuX3F1ZXJ5KHF1ZXJ5LCBwc3RhdGUtPnBf c291cmNldGV4dCwKIAkJCQkJCQkgQ1VSU09SX09QVF9QQVJBTExFTF9PSywgcGFyYW1zKTsKIAor CQkvKiBDaGVjayBpZiB0aGUgU0VMRUNUIHF1ZXJ5IGhhcyBhbnkgdm9sYXRpbGUgZnVuY3Rpb25z ICovCisJCSgoRFJfaW50b3JlbCAqKSBkZXN0KS0+dm9sYXRpbGVfZnVuY3MgPQorCQkJY29udGFp bl92b2xhdGlsZV9mdW5jdGlvbnNfYWZ0ZXJfcGxhbm5pbmcoKEV4cHIgKikgcXVlcnkpOworCiAJ CS8qCiAJCSAqIFVzZSBhIHNuYXBzaG90IHdpdGggYW4gdXBkYXRlZCBjb21tYW5kIElEIHRvIGVu c3VyZSB0aGlzIHF1ZXJ5IHNlZXMKIAkJICogcmVzdWx0cyBvZiBhbnkgcHJldmlvdXNseSBleGVj dXRlZCBxdWVyaWVzLiAgKFRoaXMgY291bGQgb25seQpAQCAtNTQ4LDE2ICs1NTksMzIgQEAgaW50 b3JlbF9zdGFydHVwKERlc3RSZWNlaXZlciAqc2VsZiwgaW50IG9wZXJhdGlvbiwgVHVwbGVEZXNj IHR5cGVpbmZvKQogCW15U3RhdGUtPnJlbCA9IGludG9SZWxhdGlvbkRlc2M7CiAJbXlTdGF0ZS0+ cmVsYWRkciA9IGludG9SZWxhdGlvbkFkZHI7CiAJbXlTdGF0ZS0+b3V0cHV0X2NpZCA9IEdldEN1 cnJlbnRDb21tYW5kSWQodHJ1ZSk7Ci0JbXlTdGF0ZS0+dGlfb3B0aW9ucyA9IFRBQkxFX0lOU0VS VF9TS0lQX0ZTTTsKKwlteVN0YXRlLT50aV9vcHRpb25zID0gVEFCTEVfSU5TRVJUX1NLSVBfRlNN IHwKKwkJVEFCTEVfSU5TRVJUX0JBU19CVUxLV1JJVEU7CisJbXlTdGF0ZS0+bXN0YXRlID0gTlVM TDsKKwlteVN0YXRlLT5iaXN0YXRlID0gTlVMTDsKIAogCS8qCiAJICogSWYgV0lUSCBOTyBEQVRB IGlzIHNwZWNpZmllZCwgdGhlcmUgaXMgbm8gbmVlZCB0byBzZXQgdXAgdGhlIHN0YXRlIGZvcgot CSAqIGJ1bGsgaW5zZXJ0cyBhcyB0aGVyZSBhcmUgbm8gdHVwbGVzIHRvIGluc2VydC4KKwkgKiBt dWx0aSBvciBidWxrIGluc2VydHMgYXMgdGhlcmUgYXJlIG5vIHR1cGxlcyB0byBpbnNlcnQuCiAJ ICovCiAJaWYgKCFpbnRvLT5za2lwRGF0YSkKLQkJbXlTdGF0ZS0+YmlzdGF0ZSA9IEdldEJ1bGtJ bnNlcnRTdGF0ZSgpOwotCWVsc2UKLQkJbXlTdGF0ZS0+YmlzdGF0ZSA9IE5VTEw7CisJeworCQlp ZiAoVGFibGVNb2RpZnlJc011bHRpSW5zZXJ0c1N1cHBvcnRlZChteVN0YXRlLT5yZWwsCisJCQkJ CQkJCQkJCSAgIG15U3RhdGUtPnZvbGF0aWxlX2Z1bmNzKSkKKwkJeworCQkJbXlTdGF0ZS0+bXN0 YXRlID0gdGFibGVfbW9kaWZ5X2JlZ2luKG15U3RhdGUtPnJlbCwKKwkJCQkJCQkJCQkJCSBteVN0 YXRlLT5vdXRwdXRfY2lkLAorCQkJCQkJCQkJCQkJIG15U3RhdGUtPnRpX29wdGlvbnMsCisJCQkJ CQkJCQkJCQkgTlVMTCwJLyogTXVsdGktaW5zZXJ0IGJ1ZmZlcgorCQkJCQkJCQkJCQkJCQkgKiBm bHVzaCBjYWxsYmFjayAqLworCQkJCQkJCQkJCQkJIE5VTEwpOyAvKiBNdWx0aS1pbnNlcnQgYnVm ZmVyCisJCQkJCQkJCQkJCQkJCSAqIGZsdXNoIGNhbGxiYWNrCisJCQkJCQkJCQkJCQkJCSAqIGNv bnRleHQgKi8KKwkJfQorCQllbHNlCisJCQlteVN0YXRlLT5iaXN0YXRlID0gR2V0QnVsa0luc2Vy dFN0YXRlKCk7CisJfQogCiAJLyoKIAkgKiBWYWxpZCBzbWdyX3RhcmdibG9jayBpbXBsaWVzIHNv bWV0aGluZyBhbHJlYWR5IHdyb3RlIHRvIHRoZSByZWxhdGlvbi4KQEAgLTU4NSwxMSArNjEyLDE1 IEBAIGludG9yZWxfcmVjZWl2ZShUdXBsZVRhYmxlU2xvdCAqc2xvdCwgRGVzdFJlY2VpdmVyICpz ZWxmKQogCQkgKiB3b3VsZCBub3QgYmUgY2hlYXAgZWl0aGVyLiBUaGlzIGFsc28gZG9lc24ndCBh bGxvdyBhY2Nlc3NpbmcgcGVyLUFNCiAJCSAqIGRhdGEgKHNheSBhIHR1cGxlJ3MgeG1pbiksIGJ1 dCBzaW5jZSB3ZSBkb24ndCBkbyB0aGF0IGhlcmUuLi4KIAkJICovCi0JCXRhYmxlX3R1cGxlX2lu c2VydChteVN0YXRlLT5yZWwsCi0JCQkJCQkgICBzbG90LAotCQkJCQkJICAgbXlTdGF0ZS0+b3V0 cHV0X2NpZCwKLQkJCQkJCSAgIG15U3RhdGUtPnRpX29wdGlvbnMsCi0JCQkJCQkgICBteVN0YXRl LT5iaXN0YXRlKTsKKworCQlpZiAobXlTdGF0ZS0+bXN0YXRlICE9IE5VTEwpCisJCQl0YWJsZV9t b2RpZnlfYnVmZmVyX2luc2VydChteVN0YXRlLT5tc3RhdGUsIHNsb3QpOworCQllbHNlCisJCQl0 YWJsZV90dXBsZV9pbnNlcnQobXlTdGF0ZS0+cmVsLAorCQkJCQkJCSAgIHNsb3QsCisJCQkJCQkJ ICAgbXlTdGF0ZS0+b3V0cHV0X2NpZCwKKwkJCQkJCQkgICBteVN0YXRlLT50aV9vcHRpb25zLAor CQkJCQkJCSAgIG15U3RhdGUtPmJpc3RhdGUpOwogCX0KIAogCS8qIFdlIGtub3cgdGhpcyBpcyBh IG5ld2x5IGNyZWF0ZWQgcmVsYXRpb24sIHNvIHRoZXJlIGFyZSBubyBpbmRleGVzICovCkBAIC02 MDgsOCArNjM5LDEzIEBAIGludG9yZWxfc2h1dGRvd24oRGVzdFJlY2VpdmVyICpzZWxmKQogCiAJ aWYgKCFpbnRvLT5za2lwRGF0YSkKIAl7Ci0JCUZyZWVCdWxrSW5zZXJ0U3RhdGUobXlTdGF0ZS0+ YmlzdGF0ZSk7Ci0JCXRhYmxlX2ZpbmlzaF9idWxrX2luc2VydChteVN0YXRlLT5yZWwsIG15U3Rh dGUtPnRpX29wdGlvbnMpOworCQlpZiAobXlTdGF0ZS0+bXN0YXRlICE9IE5VTEwpCisJCQl0YWJs ZV9tb2RpZnlfZW5kKG15U3RhdGUtPm1zdGF0ZSk7CisJCWVsc2UKKwkJeworCQkJRnJlZUJ1bGtJ bnNlcnRTdGF0ZShteVN0YXRlLT5iaXN0YXRlKTsKKwkJCXRhYmxlX2ZpbmlzaF9idWxrX2luc2Vy dChteVN0YXRlLT5yZWwsIG15U3RhdGUtPnRpX29wdGlvbnMpOworCQl9CiAJfQogCiAJLyogY2xv c2UgcmVsLCBidXQga2VlcCBsb2NrIHVudGlsIGNvbW1pdCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvY29tbWFuZHMvbWF0dmlldy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvbWF0dmlldy5j CmluZGV4IDAxMDA5Nzg3M2QuLmZhNDk1ZWM1MzMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL21hdHZpZXcuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9tYXR2aWV3LmMKQEAg LTMwLDcgKzMwLDkgQEAKICNpbmNsdWRlICJjb21tYW5kcy90YWJsZXNwYWNlLmgiCiAjaW5jbHVk ZSAiZXhlY3V0b3IvZXhlY3V0b3IuaCIKICNpbmNsdWRlICJleGVjdXRvci9zcGkuaCIKKyNpbmNs dWRlICJmb3JlaWduL2Zkd2FwaS5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgorI2luY2x1ZGUg Im9wdGltaXplci9vcHRpbWl6ZXIuaCIKICNpbmNsdWRlICJwZ3N0YXQuaCIKICNpbmNsdWRlICJy ZXdyaXRlL3Jld3JpdGVIYW5kbGVyLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9sbWdyLmgiCkBAIC01 MSw2ICs1MywxMiBAQCB0eXBlZGVmIHN0cnVjdAogCUNvbW1hbmRJZAlvdXRwdXRfY2lkOwkJLyog Y21pbiB0byBpbnNlcnQgaW4gb3V0cHV0IHR1cGxlcyAqLwogCWludAkJCXRpX29wdGlvbnM7CQkv KiB0YWJsZV90dXBsZV9pbnNlcnQgcGVyZm9ybWFuY2Ugb3B0aW9ucyAqLwogCUJ1bGtJbnNlcnRT dGF0ZSBiaXN0YXRlOwkvKiBidWxrIGluc2VydCBzdGF0ZSAqLworCisJLyogVGFibGUgbW9kaWZ5 IHN0YXRlLiBOVUxMIGlmIG11bHRpLWluc2VydHMgaXNuJ3Qgc3VwcG9ydGVkLiAqLworCVRhYmxl TW9kaWZ5U3RhdGUgKm1zdGF0ZTsKKworCS8qIFRydWUgaWYgU0VMRUNUIHF1ZXJ5IGNvbnRhaW5z IHZvbGF0aWxlIGZ1bmN0aW9ucyAqLworCWJvb2wJCXZvbGF0aWxlX2Z1bmNzOwogfSBEUl90cmFu c2llbnRyZWw7CiAKIHN0YXRpYyBpbnQJbWF0dmlld19tYWludGVuYW5jZV9kZXB0aCA9IDA7CkBA IC00MjgsNiArNDM2LDEyIEBAIHJlZnJlc2hfbWF0dmlld19kYXRhZmlsbChEZXN0UmVjZWl2ZXIg KmRlc3QsIFF1ZXJ5ICpxdWVyeSwKIAkvKiBQbGFuIHRoZSBxdWVyeSB3aGljaCB3aWxsIGdlbmVy YXRlIGRhdGEgZm9yIHRoZSByZWZyZXNoLiAqLwogCXBsYW4gPSBwZ19wbGFuX3F1ZXJ5KHF1ZXJ5 LCBxdWVyeVN0cmluZywgQ1VSU09SX09QVF9QQVJBTExFTF9PSywgTlVMTCk7CiAKKwkvKgorCSAq IENoZWNrIGlmIHRoZSBzdG9yZWQgTUFURVJJQUxJWkVEIFZJRVcgcXVlcnkgaGFzIGFueSB2b2xh dGlsZSBmdW5jdGlvbnMuCisJICovCisJKChEUl90cmFuc2llbnRyZWwgKikgZGVzdCktPnZvbGF0 aWxlX2Z1bmNzID0KKwkJY29udGFpbl92b2xhdGlsZV9mdW5jdGlvbnNfYWZ0ZXJfcGxhbm5pbmco KEV4cHIgKikgcXVlcnkpOworCiAJLyoKIAkgKiBVc2UgYSBzbmFwc2hvdCB3aXRoIGFuIHVwZGF0 ZWQgY29tbWFuZCBJRCB0byBlbnN1cmUgdGhpcyBxdWVyeSBzZWVzCiAJICogcmVzdWx0cyBvZiBh bnkgcHJldmlvdXNseSBleGVjdXRlZCBxdWVyaWVzLiAgKFRoaXMgY291bGQgb25seSBtYXR0ZXIg aWYKQEAgLTQ5Miw4ICs1MDYsMjYgQEAgdHJhbnNpZW50cmVsX3N0YXJ0dXAoRGVzdFJlY2VpdmVy ICpzZWxmLCBpbnQgb3BlcmF0aW9uLCBUdXBsZURlc2MgdHlwZWluZm8pCiAJICovCiAJbXlTdGF0 ZS0+dHJhbnNpZW50cmVsID0gdHJhbnNpZW50cmVsOwogCW15U3RhdGUtPm91dHB1dF9jaWQgPSBH ZXRDdXJyZW50Q29tbWFuZElkKHRydWUpOwotCW15U3RhdGUtPnRpX29wdGlvbnMgPSBUQUJMRV9J TlNFUlRfU0tJUF9GU00gfCBUQUJMRV9JTlNFUlRfRlJPWkVOOwotCW15U3RhdGUtPmJpc3RhdGUg PSBHZXRCdWxrSW5zZXJ0U3RhdGUoKTsKKwlteVN0YXRlLT50aV9vcHRpb25zID0gVEFCTEVfSU5T RVJUX1NLSVBfRlNNIHwKKwkJVEFCTEVfSU5TRVJUX0ZST1pFTiB8CisJCVRBQkxFX0lOU0VSVF9C QVNfQlVMS1dSSVRFOworCW15U3RhdGUtPmJpc3RhdGUgPSBOVUxMOworCW15U3RhdGUtPm1zdGF0 ZSA9IE5VTEw7CisKKwkvKiBTZXQgdXAgdGhlIHN0YXRlIGZvciBtdWx0aSBvciBidWxrIGluc2Vy dHMgKi8KKwlpZiAoVGFibGVNb2RpZnlJc011bHRpSW5zZXJ0c1N1cHBvcnRlZChteVN0YXRlLT50 cmFuc2llbnRyZWwsCisJCQkJCQkJCQkJICAgbXlTdGF0ZS0+dm9sYXRpbGVfZnVuY3MpKQorCXsK KwkJbXlTdGF0ZS0+bXN0YXRlID0gdGFibGVfbW9kaWZ5X2JlZ2luKG15U3RhdGUtPnRyYW5zaWVu dHJlbCwKKwkJCQkJCQkJCQkJIG15U3RhdGUtPm91dHB1dF9jaWQsCisJCQkJCQkJCQkJCSBteVN0 YXRlLT50aV9vcHRpb25zLAorCQkJCQkJCQkJCQkgTlVMTCwJLyogTXVsdGktaW5zZXJ0IGJ1ZmZl cgorCQkJCQkJCQkJCQkJCSAqIGZsdXNoIGNhbGxiYWNrICovCisJCQkJCQkJCQkJCSBOVUxMKTsg LyogTXVsdGktaW5zZXJ0IGJ1ZmZlcgorCQkJCQkJCQkJCQkJCSAqIGZsdXNoIGNhbGxiYWNrIGNv bnRleHQgKi8KKwl9CisJZWxzZQorCQlteVN0YXRlLT5iaXN0YXRlID0gR2V0QnVsa0luc2VydFN0 YXRlKCk7CiAKIAkvKgogCSAqIFZhbGlkIHNtZ3JfdGFyZ2Jsb2NrIGltcGxpZXMgc29tZXRoaW5n IGFscmVhZHkgd3JvdGUgdG8gdGhlIHJlbGF0aW9uLgpAQCAtNTE5LDExICs1NTEsMTQgQEAgdHJh bnNpZW50cmVsX3JlY2VpdmUoVHVwbGVUYWJsZVNsb3QgKnNsb3QsIERlc3RSZWNlaXZlciAqc2Vs ZikKIAkgKiB0dXBsZSdzIHhtaW4pLCBidXQgc2luY2Ugd2UgZG9uJ3QgZG8gdGhhdCBoZXJlLi4u CiAJICovCiAKLQl0YWJsZV90dXBsZV9pbnNlcnQobXlTdGF0ZS0+dHJhbnNpZW50cmVsLAotCQkJ CQkgICBzbG90LAotCQkJCQkgICBteVN0YXRlLT5vdXRwdXRfY2lkLAotCQkJCQkgICBteVN0YXRl LT50aV9vcHRpb25zLAotCQkJCQkgICBteVN0YXRlLT5iaXN0YXRlKTsKKwlpZiAobXlTdGF0ZS0+ bXN0YXRlICE9IE5VTEwpCisJCXRhYmxlX21vZGlmeV9idWZmZXJfaW5zZXJ0KG15U3RhdGUtPm1z dGF0ZSwgc2xvdCk7CisJZWxzZQorCQl0YWJsZV90dXBsZV9pbnNlcnQobXlTdGF0ZS0+dHJhbnNp ZW50cmVsLAorCQkJCQkJICAgc2xvdCwKKwkJCQkJCSAgIG15U3RhdGUtPm91dHB1dF9jaWQsCisJ CQkJCQkgICBteVN0YXRlLT50aV9vcHRpb25zLAorCQkJCQkJICAgbXlTdGF0ZS0+YmlzdGF0ZSk7 CiAKIAkvKiBXZSBrbm93IHRoaXMgaXMgYSBuZXdseSBjcmVhdGVkIHJlbGF0aW9uLCBzbyB0aGVy ZSBhcmUgbm8gaW5kZXhlcyAqLwogCkBAIC01MzgsOSArNTczLDEzIEBAIHRyYW5zaWVudHJlbF9z aHV0ZG93bihEZXN0UmVjZWl2ZXIgKnNlbGYpCiB7CiAJRFJfdHJhbnNpZW50cmVsICpteVN0YXRl ID0gKERSX3RyYW5zaWVudHJlbCAqKSBzZWxmOwogCi0JRnJlZUJ1bGtJbnNlcnRTdGF0ZShteVN0 YXRlLT5iaXN0YXRlKTsKLQotCXRhYmxlX2ZpbmlzaF9idWxrX2luc2VydChteVN0YXRlLT50cmFu c2llbnRyZWwsIG15U3RhdGUtPnRpX29wdGlvbnMpOworCWlmIChteVN0YXRlLT5tc3RhdGUgIT0g TlVMTCkKKwkJdGFibGVfbW9kaWZ5X2VuZChteVN0YXRlLT5tc3RhdGUpOworCWVsc2UKKwl7CisJ CUZyZWVCdWxrSW5zZXJ0U3RhdGUobXlTdGF0ZS0+YmlzdGF0ZSk7CisJCXRhYmxlX2ZpbmlzaF9i dWxrX2luc2VydChteVN0YXRlLT50cmFuc2llbnRyZWwsIG15U3RhdGUtPnRpX29wdGlvbnMpOwor CX0KIAogCS8qIGNsb3NlIHRyYW5zaWVudHJlbCwgYnV0IGtlZXAgbG9jayB1bnRpbCBjb21taXQg Ki8KIAl0YWJsZV9jbG9zZShteVN0YXRlLT50cmFuc2llbnRyZWwsIE5vTG9jayk7CkBAIC05ODQs MyArMTAyMyw1MCBAQCBDbG9zZU1hdFZpZXdJbmNyZW1lbnRhbE1haW50ZW5hbmNlKHZvaWQpCiAJ bWF0dmlld19tYWludGVuYW5jZV9kZXB0aC0tOwogCUFzc2VydChtYXR2aWV3X21haW50ZW5hbmNl X2RlcHRoID49IDApOwogfQorCisvKgorICogQ2hlY2sgaWYgbXVsdGktaW5zZXJ0cyBpcyBzdXBw b3J0ZWQuCisgKgorICogSXQncyBnZW5lcmFsbHkgbW9yZSBlZmZpY2llbnQgdG8gcHJlcGFyZSBh IGJ1bmNoIG9mIHR1cGxlcyBmb3IgaW5zZXJ0aW9uLAorICogYW5kIGluc2VydCB0aGVtIGluIG9u ZSBtdWx0aS1pbnNlcnRzIGNhbGwsIHRoYW4gY2FsbAorICogdGFibGVfdHVwbGVfaW5zZXJ0KCkg c2VwYXJhdGVseSBmb3IgZXZlcnkgdHVwbGUuIEhvd2V2ZXIsIHRoZXJlIGFyZSBhCisgKiBudW1i ZXIgb2YgcmVhc29ucyB3aHkgd2UgbWlnaHQgbm90IGJlIGFibGUgdG8gZG8gdGhpcy4gSW4gZ2Vu ZXJhbCwgY2FuJ3QKKyAqIHN1cHBvcnQgbXVsdGktaW5zZXJ0cyBpbiB0aGUgZm9sbG93aW5nIGNh c2VzOgorICoKKyAqIFdoZW4gdGhlcmUgYXJlIGFueSBCRUZPUkUvSU5TVEVBRCBPRiB0cmlnZ2Vy cyBvbiB0aGUgdGFibGUgb3IgYW55IHZvbGF0aWxlCisgKiBmdW5jdGlvbnMvZXhwcmVzc2lvbnMg aW4gdGhlIFNFTEVDVCBxdWVyeS4gU3VjaCB0cmlnZ2VycyBvciB2b2xhdGlsZQorICogZXhwcmVz c2lvbnMgbWlnaHQgcXVlcnkgdGhlIHRhYmxlIHdlJ3JlIGluc2VydGluZyBpbnRvIGFuZCBhY3Qg ZGlmZmVyZW50bHkKKyAqIGlmIHRoZSB0dXBsZXMgdGhhdCBoYXZlIGFscmVhZHkgYmVlbiBwcm9j ZXNzZWQgYW5kIHByZXBhcmVkIGZvciBpbnNlcnRpb24KKyAqIGFyZSBub3QgdGhlcmUuCisgKgor ICogV2hlbiBpbnNlcnRpbmcgaW50byBwYXJ0aXRpb25lZCB0YWJsZS4gRm9yIHBhcnRpdGlvbmVk IHRhYmxlcywgd2UgbWF5IHN0aWxsCisgKiBiZSBhYmxlIHRvIHBlcmZvcm0gbXVsdGktaW5zZXJ0 cy4gSG93ZXZlciwgdGhlIHBvc3NpYmlsaXR5IG9mIHRoaXMgZGVwZW5kcworICogb24gd2hpY2gg dHlwZXMgb2YgdHJpZ2dlcnMgZXhpc3Qgb24gdGhlIHBhcnRpdGlvbi4gV2UgbXVzdCBkaXNhYmxl CisgKiBtdWx0aS1pbnNlcnRzIGlmIHRoZSBwYXJ0aXRpb24gaXMgYSBmb3JlaWduIHRhYmxlIHRo YXQgY2FuJ3QgdXNlIGJhdGNoaW5nIG9yCisgKiBpdCBoYXMgYW55IGJlZm9yZSByb3cgaW5zZXJ0 IG9yIGluc2VydCBpbnN0ZWFkIHRyaWdnZXJzIChzYW1lIGFzIHdlIGNoZWNrZWQKKyAqIGFib3Zl IGZvciB0aGUgcGFyZW50IHRhYmxlKS4gV2UgcmVhbGx5IGNhbid0IGtub3cgYWxsIHRoZXNlIHVu bGVzcyB3ZSBzdGFydAorICogaW5zZXJ0aW5nIHR1cGxlcyBpbnRvIHRoZSByZXNwZWN0aXZlIHBh cnRpdGlvbnMuIFdlIGNhbiBoYXZlIGFuIGludGVybWVkaWF0ZQorICogaW5zZXJ0IHN0YXRlIHRv IHNob3cgdGhlIGludGVudCB0byBkbyBtdWx0aS1pbnNlcnRzIGFuZCBsYXRlciBkZXRlcm1pbmUg aWYKKyAqIHdlIGNhbiB1c2UgbXVsdGktaW5zZXJ0cyBmb3IgdGhlIHBhcnRpdGlvbiBiZWluZyBp bnNlcnRlZCBpbnRvLgorICoKKyAqIFdoZW4gaW5zZXJ0aW5nIGludG8gZm9yZWlnbiB0YWJsZS4g Rm9yIGZvcmVpZ24gdGFibGVzLCB3ZSBtYXkgc3RpbGwgYmUgYWJsZQorICogdG8gZG8gbXVsdGkt aW5zZXJ0cyBpZiB0aGUgRkRXIHN1cHBvcnRzIGJhdGNoaW5nLgorICovCitib29sCitUYWJsZU1v ZGlmeUlzTXVsdGlJbnNlcnRzU3VwcG9ydGVkKFJlbGF0aW9uIHJlbCwgYm9vbCB2b2xhdGlsZV9m dW5jcykKK3sKKwlpZiAodm9sYXRpbGVfZnVuY3MpCisJCXJldHVybiBmYWxzZTsKKworCS8qCisJ ICogRm9yIENSRUFURSBUQUJMRSBBUywgQ1JFQVRFIE1BVEVSSUFMSVpFRCBWSUVXLCBSRUZSRVNI IE1BVEVSSUFMSVpFRAorCSAqIFZJRVcsIHdlIHJlYWxseSBjYW4ndCBoYXZlIHRyaWdnZXJzIG9y IGNhbid0IGNyZWF0ZSB0YWJsZSBhcworCSAqIHBhcnRpdGlvbmVkIG9yIGZvcmVpZ24uIFNvLCB3 ZSB3aWxsIGFzc2VydC4KKwkgKi8KKwlBc3NlcnQocmVsLT50cmlnZGVzYyA9PSBOVUxMKTsKKwlB c3NlcnQocmVsLT5yZF9yZWwtPnJlbGtpbmQgIT0gUkVMS0lORF9QQVJUSVRJT05FRF9UQUJMRSk7 CisJQXNzZXJ0KHJlbC0+cmRfcmVsLT5yZWxraW5kICE9IFJFTEtJTkRfRk9SRUlHTl9UQUJMRSk7 CisKKwkvKiBDYW4gc3VwcG9ydCBtdWx0aS1pbnNlcnRzICovCisJcmV0dXJuIHRydWU7Cit9CmRp ZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jb21tYW5kcy9tYXR2aWV3LmggYi9zcmMvaW5jbHVkZS9j b21tYW5kcy9tYXR2aWV3LmgKaW5kZXggYzg4MTFlOGZjNy4uMjhhYmQ3Yjg5YiAxMDA2NDQKLS0t IGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvbWF0dmlldy5oCisrKyBiL3NyYy9pbmNsdWRlL2NvbW1h bmRzL21hdHZpZXcuaApAQCAtMzMsNCArMzMsNyBAQCBleHRlcm4gRGVzdFJlY2VpdmVyICpDcmVh dGVUcmFuc2llbnRSZWxEZXN0UmVjZWl2ZXIoT2lkIHRyYW5zaWVudG9pZCk7CiAKIGV4dGVybiBi b29sIE1hdFZpZXdJbmNyZW1lbnRhbE1haW50ZW5hbmNlSXNFbmFibGVkKHZvaWQpOwogCitleHRl cm4gYm9vbCBUYWJsZU1vZGlmeUlzTXVsdGlJbnNlcnRzU3VwcG9ydGVkKFJlbGF0aW9uIHJlbCwK KwkJCQkJCQkJCQkJICAgYm9vbCB2b2xhdGlsZV9mdW5jcyk7CisKICNlbmRpZgkJCQkJCQkvKiBN QVRWSUVXX0ggKi8KLS0gCjIuNDAuMQoK --00000000000039bd1c0625613fb8 Content-Type: application/octet-stream; name="v24-0001-Introduce-new-table-AM-for-multi-inserts.patch" Content-Disposition: attachment; filename="v24-0001-Introduce-new-table-AM-for-multi-inserts.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m2q76pe30 RnJvbSBhZjIxYTI2YTgzYjRlZmRiNWE3M2QxYmEwMGUwM2Q1MTM4Mjk1ZGVkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBCaGFyYXRoIFJ1cGlyZWRkeSA8cnVwaXJlZGRAYW1hem9uLmNv bT4KRGF0ZTogU2F0LCAyNiBPY3QgMjAyNCAxMjozNTowOCArMDAwMApTdWJqZWN0OiBbUEFUQ0gg djI0IDEvNF0gSW50cm9kdWNlIG5ldyB0YWJsZSBBTSBmb3IgbXVsdGktaW5zZXJ0cwoKVW50aWwg bm93LCBpdCdzIHRoZSBDT1BZIC4uLiBGUk9NIGNvbW1hbmQgdXNpbmcgbXVsdGkgaW5zZXJ0cwoo aS5lLiBidWZmZXIgc29tZSB0dXBsZXMgYW5kIGluc2VydHMgdGhlbSB0byB0YWJsZSBhdCBvbmNl KS4KQmFzaWMgaWRlYSBvZiBtdWx0aS1pbnNlcnRzIGlzIHRoYXQgbGVzcyBXQUwgYW5kIHJlZHVj ZWQgYnVmZmVyCmxvY2tpbmcuIE11bHRpLWluc2VydHMgaXMgZmFzdGVyIHRoYW4gY2FsbGluZyBo ZWFwX2luc2VydCgpIGluIGEKbG9vcCwgYmVjYXVzZSB3aGVuIG11bHRpcGxlIHR1cGxlcyBjYW4g YmUgaW5zZXJ0ZWQgb24gYSBzaW5nbGUKcGFnZSwgd2UgY2FuIHdyaXRlIGp1c3QgYSBzaW5nbGUg V0FMIHJlY29yZCBjb3ZlcmluZyBhbGwgb2YgdGhlbSwKYW5kIG9ubHkgbmVlZCB0byBsb2NrL3Vu bG9jayB0aGUgcGFnZSBvbmNlLgoKVmFyaW91cyBvdGhlciBjb21tYW5kcyBjYW4gYmVuZWZpdCBm cm9tIHRoaXMgbXVsdGktaW5zZXJ0cyBsb2dpYwpbUmV1c2FibGVdLgoKQWxzbywgdGhlcmUncyBh IG5lZWQgdG8gaGF2ZSB0aGVzZSBtdWx0aS1pbnNlcnRzIEFNcyAoQWNjZXNzCk1ldGhvZHMpIGFz IHNjYW4tbGlrZSBBUEkgW1VzYWJpbGl0eV0uIFdpdGggdGhpcywgdmFyaW91cyB0YWJsZQpBTXMg Y2FuIGRlZmluZSB0aGVpciBvd24gYnVmZmVyaW5nIGFuZCBmbHVzaGluZyBzdHJhdGVneQpbRmxl eGliaWxpdHldIGJhc2VkIG9uIHRoZSB3YXkgdGhleSBzdG9yZSB0aGUgZGF0YSBpbiB0aGUKdW5k ZXJseWluZyBzdG9yYWdlIChlLmcuIGNvbHVtbmFyKS4KCkF1dGhvcjogQmhhcmF0aCBSdXBpcmVk ZHkKUmV2aWV3ZWQtYnk6IEplZmYgRGF2aXMKRGlzY3Vzc2lvbjogaHR0cHM6Ly93d3cucG9zdGdy ZXNxbC5vcmcvbWVzc2FnZS1pZC8yMDIwMDkyNDAyNDEyOC5reWszcjVnN2RudTNmeHh4QGFsYXAz LmFuYXJhemVsLmRlCkRpc2N1c3Npb246IGh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3JnL21lc3Nh Z2UtaWQvQ0FMajJBQ1ZpOWVUUllSJTNEZ2RjYTV3eHRqM0trXzlxOXFWY2N4c1MxaG5nVEdPQ2pQ d1ElNDBtYWlsLmdtYWlsLmNvbQpEaXNjdXNzaW9uOiBodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9y Zy9tZXNzYWdlLWlkLzg2MzMxNzFjYjAzNGFhZmMyNjBmZGYzN2RmMDRiNmM3NzlhYTFlMmYuY2Ft ZWwlNDBqLWRhdmlzLmNvbQotLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbS5jICAg ICAgICAgfCAyMDkgKysrKysrKysrKysrKysrKysrKysrKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9o ZWFwL2hlYXBhbV9oYW5kbGVyLmMgfCAgIDYgKwogc3JjL2JhY2tlbmQvYWNjZXNzL3RhYmxlL3Rh YmxlYW1hcGkuYyAgICB8ICAgNSArCiBzcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmggICAgICAg ICAgICAgIHwgIDM4ICsrKysrCiBzcmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5oICAgICAgICAg ICAgIHwgIDgxICsrKysrKysrKwogc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgICAg ICAgICB8ICAgMyArCiA2IGZpbGVzIGNoYW5nZWQsIDM0MSBpbnNlcnRpb25zKCspLCAxIGRlbGV0 aW9uKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtLmMgYi9z cmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW0uYwppbmRleCA3NWZmOWU3Mzg4Li4xNDI2Y2Q0 MGM2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW0uYworKysgYi9z cmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW0uYwpAQCAtNTAsNiArNTAsNyBAQAogI2luY2x1 ZGUgInN0b3JhZ2UvcHJvY2FycmF5LmgiCiAjaW5jbHVkZSAidXRpbHMvZGF0dW0uaCIKICNpbmNs dWRlICJ1dGlscy9pbnZhbC5oIgorI2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCiAjaW5jbHVk ZSAidXRpbHMvc3BjY2FjaGUuaCIKIAogCkBAIC0xMDIsNyArMTAzLDcgQEAgc3RhdGljIGludAli b3R0b211cF9zb3J0X2FuZF9zaHJpbmsoVE1fSW5kZXhEZWxldGVPcCAqZGVsc3RhdGUpOwogc3Rh dGljIFhMb2dSZWNQdHIgbG9nX2hlYXBfbmV3X2NpZChSZWxhdGlvbiByZWxhdGlvbiwgSGVhcFR1 cGxlIHR1cCk7CiBzdGF0aWMgSGVhcFR1cGxlIEV4dHJhY3RSZXBsaWNhSWRlbnRpdHkoUmVsYXRp b24gcmVsYXRpb24sIEhlYXBUdXBsZSB0cCwgYm9vbCBrZXlfcmVxdWlyZWQsCiAJCQkJCQkJCQkJ Ym9vbCAqY29weSk7Ci0KK3N0YXRpYyB2b2lkIGhlYXBfbW9kaWZ5X2luc2VydF9lbmQoVGFibGVN b2RpZnlTdGF0ZSAqc3RhdGUpOwogCiAvKgogICogRWFjaCB0dXBsZSBsb2NrIG1vZGUgaGFzIGEg Y29ycmVzcG9uZGluZyBoZWF2eXdlaWdodCBsb2NrLCBhbmQgb25lIG9yIHR3bwpAQCAtMjYwMyw2 ICsyNjA0LDIxMiBAQCBoZWFwX211bHRpX2luc2VydChSZWxhdGlvbiByZWxhdGlvbiwgVHVwbGVU YWJsZVNsb3QgKipzbG90cywgaW50IG50dXBsZXMsCiAJcGdzdGF0X2NvdW50X2hlYXBfaW5zZXJ0 KHJlbGF0aW9uLCBudHVwbGVzKTsKIH0KIAorLyoKKyAqIEluaXRpYWxpemUgaGVhcCBtb2RpZnkg c3RhdGUuCisgKi8KK1RhYmxlTW9kaWZ5U3RhdGUgKgoraGVhcF9tb2RpZnlfYmVnaW4oUmVsYXRp b24gcmVsLAorCQkJCSAgQ29tbWFuZElkIGNpZCwKKwkJCQkgIGludCBvcHRpb25zLAorCQkJCSAg VGFibGVNb2RpZnlCdWZmZXJGbHVzaENiIGJ1ZmZlcl9mbHVzaF9jYiwKKwkJCQkgIHZvaWQgKmJ1 ZmZlcl9mbHVzaF9jdHgpCit7CisJVGFibGVNb2RpZnlTdGF0ZSAqc3RhdGU7CisJTWVtb3J5Q29u dGV4dCBjb250ZXh0OworCU1lbW9yeUNvbnRleHQgb2xkY29udGV4dDsKKworCWNvbnRleHQgPSBB bGxvY1NldENvbnRleHRDcmVhdGUoVG9wVHJhbnNhY3Rpb25Db250ZXh0LAorCQkJCQkJCQkJImhl YXBfbW9kaWZ5IG1lbW9yeSBjb250ZXh0IiwKKwkJCQkJCQkJCUFMTE9DU0VUX0RFRkFVTFRfU0la RVMpOworCisJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhjb250ZXh0KTsKKwlz dGF0ZSA9IHBhbGxvYzAoc2l6ZW9mKFRhYmxlTW9kaWZ5U3RhdGUpKTsKKwlzdGF0ZS0+cmVsID0g cmVsOworCXN0YXRlLT5tZW1fY3R4ID0gY29udGV4dDsKKwlzdGF0ZS0+Y2lkID0gY2lkOworCXN0 YXRlLT5vcHRpb25zID0gb3B0aW9uczsKKwlzdGF0ZS0+YnVmZmVyX2ZsdXNoX2NiID0gYnVmZmVy X2ZsdXNoX2NiOworCXN0YXRlLT5idWZmZXJfZmx1c2hfY3R4ID0gYnVmZmVyX2ZsdXNoX2N0eDsK KwlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7CisKKwlyZXR1cm4gc3RhdGU7Cit9 CisKKy8qCisgKiBTdG9yZSBwYXNzZWQtaW4gdHVwbGUgaW50byBpbi1tZW1vcnkgYnVmZmVyZWQg c2xvdHMuIFdoZW4gZnVsbCwgaW5zZXJ0CisgKiBtdWx0aXBsZSB0dXBsZXMgZnJvbSB0aGUgYnVm ZmVycyBpbnRvIGhlYXAuCisgKi8KK3ZvaWQKK2hlYXBfbW9kaWZ5X2J1ZmZlcl9pbnNlcnQoVGFi bGVNb2RpZnlTdGF0ZSAqc3RhdGUsCisJCQkJCQkgIFR1cGxlVGFibGVTbG90ICpzbG90KQorewor CVR1cGxlVGFibGVTbG90ICpkc3RzbG90OworCUhlYXBJbnNlcnRTdGF0ZSAqaXN0YXRlOworCUhl YXBNdWx0aUluc2VydFN0YXRlICptaXN0YXRlOworCU1lbW9yeUNvbnRleHQgb2xkY29udGV4dDsK KworCW9sZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oc3RhdGUtPm1lbV9jdHgpOwor CisJLyogRmlyc3QgdGltZSB0aHJvdWdoLCBpbml0aWFsaXplIGhlYXAgaW5zZXJ0IHN0YXRlICov CisJaWYgKHN0YXRlLT5kYXRhID09IE5VTEwpCisJeworCQlpc3RhdGUgPSAoSGVhcEluc2VydFN0 YXRlICopIHBhbGxvYzAoc2l6ZW9mKEhlYXBJbnNlcnRTdGF0ZSkpOworCQlpc3RhdGUtPmJpc3Rh dGUgPSBOVUxMOworCQlpc3RhdGUtPm1pc3RhdGUgPSBOVUxMOworCQlzdGF0ZS0+ZGF0YSA9IGlz dGF0ZTsKKwkJbWlzdGF0ZSA9CisJCQkoSGVhcE11bHRpSW5zZXJ0U3RhdGUgKikgcGFsbG9jMChz aXplb2YoSGVhcE11bHRpSW5zZXJ0U3RhdGUpKTsKKwkJbWlzdGF0ZS0+c2xvdHMgPQorCQkJKFR1 cGxlVGFibGVTbG90ICoqKSBwYWxsb2MwKHNpemVvZihUdXBsZVRhYmxlU2xvdCAqKSAqIEhFQVBf TUFYX0JVRkZFUkVEX1NMT1RTKTsKKwkJaXN0YXRlLT5taXN0YXRlID0gbWlzdGF0ZTsKKworCQkv KgorCQkgKiBoZWFwX211bHRpX2luc2VydCgpIGNhbiBsZWFrIG1lbW9yeS4gU28gc3dpdGNoIHRv IHRoaXMgbWVtb3J5CisJCSAqIGNvbnRleHQgYmVmb3JlIGV2ZXJ5IGhlYXBfbXVsdGlfaW5zZXJ0 KCkgY2FsbCBhbmQgcmVzZXQgd2hlbgorCQkgKiBmaW5pc2hlZC4KKwkJICovCisJCW1pc3RhdGUt Pm1lbV9jdHggPSBBbGxvY1NldENvbnRleHRDcmVhdGUoQ3VycmVudE1lbW9yeUNvbnRleHQsCisJ CQkJCQkJCQkJCQkgImhlYXBfbXVsdGlfaW5zZXJ0IG1lbW9yeSBjb250ZXh0IiwKKwkJCQkJCQkJ CQkJCSBBTExPQ1NFVF9ERUZBVUxUX1NJWkVTKTsKKworCQlpZiAoKHN0YXRlLT5vcHRpb25zICYg VEFCTEVfSU5TRVJUX0JBU19CVUxLV1JJVEUpICE9IDApCisJCQlpc3RhdGUtPmJpc3RhdGUgPSBH ZXRCdWxrSW5zZXJ0U3RhdGUoKTsKKwl9CisKKwlpc3RhdGUgPSAoSGVhcEluc2VydFN0YXRlICop IHN0YXRlLT5kYXRhOworCUFzc2VydChpc3RhdGUtPm1pc3RhdGUgIT0gTlVMTCk7CisJbWlzdGF0 ZSA9IGlzdGF0ZS0+bWlzdGF0ZTsKKwlkc3RzbG90ID0gbWlzdGF0ZS0+c2xvdHNbbWlzdGF0ZS0+ Y3VyX3Nsb3RzXTsKKworCWlmIChkc3RzbG90ID09IE5VTEwpCisJeworCQkvKgorCQkgKiBXZSB1 c2UgdmlydHVhbCB0dXBsZSBzbG90cyBidWZmZXJlZCBzbG90cyBmb3IgbGV2ZXJhZ2luZyB0aGUK KwkJICogb3B0aW1pemF0aW9uIGl0IHByb3ZpZGVzIHRvIG1pbmltaXplIHBoeXNpY2FsIGRhdGEg Y29weWluZy4gVGhlCisJCSAqIHZpcnR1YWwgc2xvdCBnZXRzIG1hdGVyaWFsaXplZCB3aGVuIHdl IGNvcHkgKHZpYSBiZWxvdworCQkgKiBFeGVjQ29weVNsb3QpIHRoZSB0dXBsZXMgZnJvbSB0aGUg c291cmNlIHNsb3Qgd2hpY2ggY2FuIGJlIG9mIGFueQorCQkgKiB0eXBlLiBUaGlzIHdheSwgaXQg aXMgZW5zdXJlZCB0aGF0IHRoZSB0dXBsZSBzdG9yYWdlIGRvZXNuJ3QgZGVwZW5kCisJCSAqIG9u IGV4dGVybmFsIG1lbW9yeSwgYmVjYXVzZSBhbGwgdGhlIGRhdHVtcyB0aGF0IGFyZW4ndCBwYXNz ZWQgYnkKKwkJICogdmFsdWUgYXJlIGNvcGllZCBpbnRvIHRoZSBzbG90J3MgbWVtb3J5IGNvbnRl eHQuCisJCSAqLworCQlkc3RzbG90ID0gTWFrZVR1cGxlVGFibGVTbG90KFJlbGF0aW9uR2V0RGVz Y3Ioc3RhdGUtPnJlbCksCisJCQkJCQkJCQkgJlRUU09wc1ZpcnR1YWwpOworCisJCW1pc3RhdGUt PnNsb3RzW21pc3RhdGUtPmN1cl9zbG90c10gPSBkc3RzbG90OworCX0KKworCUFzc2VydChUVFNf SVNfVklSVFVBTChkc3RzbG90KSk7CisKKwkvKgorCSAqIE5vdGUgdGhhdCB0aGUgY29weSBjbGVh cnMgdGhlIHByZXZpb3VzIGRlc3RpbmF0aW9uIHNsb3QgY29udGVudHMsIHNvIG5vCisJICogbmVl ZCB0byBleHBsaWNpdGx5IEV4ZWNDbGVhclR1cGxlKCkgaGVyZS4KKwkgKi8KKwlFeGVjQ29weVNs b3QoZHN0c2xvdCwgc2xvdCk7CisKKwltaXN0YXRlLT5jdXJfc2xvdHMrKzsKKworCWlmIChtaXN0 YXRlLT5jdXJfc2xvdHMgPj0gSEVBUF9NQVhfQlVGRkVSRURfU0xPVFMpCisJCWhlYXBfbW9kaWZ5 X2J1ZmZlcl9mbHVzaChzdGF0ZSk7CisKKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4 dCk7Cit9CisKKy8qCisgKiBJbnNlcnQgbXVsdGlwbGUgdHVwbGVzIGZyb20gaW4tbWVtb3J5IGJ1 ZmZlcmVkIHNsb3RzIGludG8gaGVhcC4KKyAqLwordm9pZAoraGVhcF9tb2RpZnlfYnVmZmVyX2Zs dXNoKFRhYmxlTW9kaWZ5U3RhdGUgKnN0YXRlKQoreworCUhlYXBJbnNlcnRTdGF0ZSAqaXN0YXRl OworCUhlYXBNdWx0aUluc2VydFN0YXRlICptaXN0YXRlOworCU1lbW9yeUNvbnRleHQgb2xkY29u dGV4dDsKKworCS8qIFF1aWNrIGV4aXQgaWYgd2UgaGF2ZW4ndCBpbnNlcnRlZCBhbnl0aGluZyB5 ZXQgKi8KKwlpZiAoc3RhdGUtPmRhdGEgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJaXN0YXRlID0g KEhlYXBJbnNlcnRTdGF0ZSAqKSBzdGF0ZS0+ZGF0YTsKKwlBc3NlcnQoaXN0YXRlLT5taXN0YXRl ICE9IE5VTEwpOworCW1pc3RhdGUgPSBpc3RhdGUtPm1pc3RhdGU7CisKKwkvKiBRdWljayBleGl0 IGlmIHdlIGhhdmUgZmx1c2hlZCBhbHJlYWR5ICovCisJaWYgKG1pc3RhdGUtPmN1cl9zbG90cyA9 PSAwKQorCQlyZXR1cm47CisKKwkvKgorCSAqIGhlYXBfbXVsdGlfaW5zZXJ0KCkgY2FuIGxlYWsg bWVtb3J5LCBzbyBzd2l0Y2ggdG8gc2hvcnQtbGl2ZWQgbWVtb3J5CisJICogY29udGV4dCBiZWZv cmUgY2FsbGluZyBpdC4KKwkgKi8KKwlvbGRjb250ZXh0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRv KG1pc3RhdGUtPm1lbV9jdHgpOworCWhlYXBfbXVsdGlfaW5zZXJ0KHN0YXRlLT5yZWwsCisJCQkJ CSAgbWlzdGF0ZS0+c2xvdHMsCisJCQkJCSAgbWlzdGF0ZS0+Y3VyX3Nsb3RzLAorCQkJCQkgIHN0 YXRlLT5jaWQsCisJCQkJCSAgc3RhdGUtPm9wdGlvbnMsCisJCQkJCSAgaXN0YXRlLT5iaXN0YXRl KTsKKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7CisJTWVtb3J5Q29udGV4dFJl c2V0KG1pc3RhdGUtPm1lbV9jdHgpOworCisJLyoKKwkgKiBJbnZva2UgY2FsbGVyLXN1cHBsaWVk IGJ1ZmZlciBmbHVzaCBjYWxsYmFjayBhZnRlciBpbnNlcnRpbmcgcm93cyBmcm9tCisJICogdGhl IGJ1ZmZlcnMgdG8gaGVhcC4KKwkgKi8KKwlpZiAoc3RhdGUtPmJ1ZmZlcl9mbHVzaF9jYiAhPSBO VUxMKQorCXsKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBtaXN0YXRlLT5jdXJfc2xvdHM7IGkrKykK KwkJeworCQkJc3RhdGUtPmJ1ZmZlcl9mbHVzaF9jYihzdGF0ZS0+YnVmZmVyX2ZsdXNoX2N0eCwK KwkJCQkJCQkJICAgbWlzdGF0ZS0+c2xvdHNbaV0pOworCQl9CisJfQorCisJbWlzdGF0ZS0+Y3Vy X3Nsb3RzID0gMDsKK30KKworLyoKKyAqIEhlYXAgaW5zZXJ0IHNwZWNpZmljIGZ1bmN0aW9uIHVz ZWQgZm9yIHBlcmZvcm1pbmcgd29yayBhdCB0aGUgZW5kIGxpa2UKKyAqIGZsdXNoaW5nIHJlbWFp bmluZyBidWZmZXJlZCB0dXBsZXMsIGNsZWFuaW5nIHVwIHRoZSBpbnNlcnQgc3RhdGUgYW5kIHR1 cGxlCisgKiB0YWJsZSBzbG90cyB1c2VkIGZvciBidWZmZXJlZCB0dXBsZXMgZXRjLgorICovCitz dGF0aWMgdm9pZAoraGVhcF9tb2RpZnlfaW5zZXJ0X2VuZChUYWJsZU1vZGlmeVN0YXRlICpzdGF0 ZSkKK3sKKwlIZWFwSW5zZXJ0U3RhdGUgKmlzdGF0ZTsKKworCS8qIFF1aWNrIGV4aXQgaWYgd2Ug aGF2ZW4ndCBpbnNlcnRlZCBhbnl0aGluZyB5ZXQgKi8KKwlpZiAoc3RhdGUtPmRhdGEgPT0gTlVM TCkKKwkJcmV0dXJuOworCisJaXN0YXRlID0gKEhlYXBJbnNlcnRTdGF0ZSAqKSBzdGF0ZS0+ZGF0 YTsKKworCWlmIChpc3RhdGUtPm1pc3RhdGUgIT0gTlVMTCkKKwl7CisJCUhlYXBNdWx0aUluc2Vy dFN0YXRlICptaXN0YXRlID0gaXN0YXRlLT5taXN0YXRlOworCisJCWhlYXBfbW9kaWZ5X2J1ZmZl cl9mbHVzaChzdGF0ZSk7CisKKwkJQXNzZXJ0KG1pc3RhdGUtPmN1cl9zbG90cyA9PSAwKTsKKwor CQlmb3IgKGludCBpID0gMDsgaSA8IEhFQVBfTUFYX0JVRkZFUkVEX1NMT1RTICYmIG1pc3RhdGUt PnNsb3RzW2ldICE9IE5VTEw7IGkrKykKKwkJCUV4ZWNEcm9wU2luZ2xlVHVwbGVUYWJsZVNsb3Qo bWlzdGF0ZS0+c2xvdHNbaV0pOworCisJCU1lbW9yeUNvbnRleHREZWxldGUobWlzdGF0ZS0+bWVt X2N0eCk7CisJfQorCisJaWYgKGlzdGF0ZS0+YmlzdGF0ZSAhPSBOVUxMKQorCQlGcmVlQnVsa0lu c2VydFN0YXRlKGlzdGF0ZS0+YmlzdGF0ZSk7Cit9CisKKy8qCisgKiBDbGVhbiBoZWFwIG1vZGlm eSBzdGF0ZS4KKyAqLwordm9pZAoraGVhcF9tb2RpZnlfZW5kKFRhYmxlTW9kaWZ5U3RhdGUgKnN0 YXRlKQoreworCWhlYXBfbW9kaWZ5X2luc2VydF9lbmQoc3RhdGUpOworCU1lbW9yeUNvbnRleHRE ZWxldGUoc3RhdGUtPm1lbV9jdHgpOworfQorCiAvKgogICoJc2ltcGxlX2hlYXBfaW5zZXJ0IC0g aW5zZXJ0IGEgdHVwbGUKICAqCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9o ZWFwYW1faGFuZGxlci5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIu YwppbmRleCBhOGQ5NWUwZjFjLi5kMmVmNmI0Yjc4IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9h Y2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFw L2hlYXBhbV9oYW5kbGVyLmMKQEAgLTI2NDQsNiArMjY0NCwxMiBAQCBzdGF0aWMgY29uc3QgVGFi bGVBbVJvdXRpbmUgaGVhcGFtX21ldGhvZHMgPSB7CiAJLnR1cGxlX2luc2VydF9zcGVjdWxhdGl2 ZSA9IGhlYXBhbV90dXBsZV9pbnNlcnRfc3BlY3VsYXRpdmUsCiAJLnR1cGxlX2NvbXBsZXRlX3Nw ZWN1bGF0aXZlID0gaGVhcGFtX3R1cGxlX2NvbXBsZXRlX3NwZWN1bGF0aXZlLAogCS5tdWx0aV9p bnNlcnQgPSBoZWFwX211bHRpX2luc2VydCwKKworCS50dXBsZV9tb2RpZnlfYmVnaW4gPSBoZWFw X21vZGlmeV9iZWdpbiwKKwkudHVwbGVfbW9kaWZ5X2J1ZmZlcl9pbnNlcnQgPSBoZWFwX21vZGlm eV9idWZmZXJfaW5zZXJ0LAorCS50dXBsZV9tb2RpZnlfYnVmZmVyX2ZsdXNoID0gaGVhcF9tb2Rp ZnlfYnVmZmVyX2ZsdXNoLAorCS50dXBsZV9tb2RpZnlfZW5kID0gaGVhcF9tb2RpZnlfZW5kLAor CiAJLnR1cGxlX2RlbGV0ZSA9IGhlYXBhbV90dXBsZV9kZWxldGUsCiAJLnR1cGxlX3VwZGF0ZSA9 IGhlYXBhbV90dXBsZV91cGRhdGUsCiAJLnR1cGxlX2xvY2sgPSBoZWFwYW1fdHVwbGVfbG9jaywK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90YWJsZS90YWJsZWFtYXBpLmMgYi9zcmMv YmFja2VuZC9hY2Nlc3MvdGFibGUvdGFibGVhbWFwaS5jCmluZGV4IGU5YjU5ODI1NmYuLjc3MmYy OWIxYjUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90YWJsZS90YWJsZWFtYXBpLmMK KysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RhYmxlL3RhYmxlYW1hcGkuYwpAQCAtOTcsNiArOTcs MTEgQEAgR2V0VGFibGVBbVJvdXRpbmUoT2lkIGFtaGFuZGxlcikKIAlBc3NlcnQocm91dGluZS0+ c2Nhbl9zYW1wbGVfbmV4dF9ibG9jayAhPSBOVUxMKTsKIAlBc3NlcnQocm91dGluZS0+c2Nhbl9z YW1wbGVfbmV4dF90dXBsZSAhPSBOVUxMKTsKIAorCUFzc2VydChyb3V0aW5lLT50dXBsZV9tb2Rp ZnlfYmVnaW4gIT0gTlVMTCk7CisJQXNzZXJ0KHJvdXRpbmUtPnR1cGxlX21vZGlmeV9idWZmZXJf aW5zZXJ0ICE9IE5VTEwpOworCUFzc2VydChyb3V0aW5lLT50dXBsZV9tb2RpZnlfYnVmZmVyX2Zs dXNoICE9IE5VTEwpOworCUFzc2VydChyb3V0aW5lLT50dXBsZV9tb2RpZnlfZW5kICE9IE5VTEwp OworCiAJcmV0dXJuIHJvdXRpbmU7CiB9CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vz cy9oZWFwYW0uaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaAppbmRleCBiOTUxNDY2Y2Vk Li5iOTQwNGJiODNkIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgKKysr IGIvc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oCkBAIC0yNzIsNiArMjcyLDMzIEBAIHR5cGVk ZWYgZW51bQogCVBSVU5FX1ZBQ1VVTV9DTEVBTlVQLAkJLyogVkFDVVVNIDJuZCBoZWFwIHBhc3Mg Ki8KIH0gUHJ1bmVSZWFzb247CiAKKy8qCisgKiBNYXhpbXVtIG51bWJlciBvZiBzbG90cyB0aGF0 IG11bHRpLWluc2VydCBidWZmZXJzIGNhbiBob2xkLgorICoKKyAqIENhdXRpb246IERvbid0IG1h a2UgdGhpcyB0b28gYmlnLCBhcyB3ZSBjb3VsZCBlbmQgdXAgd2l0aCB0aGlzIG1hbnkgdHVwbGVz CisgKiBzdG9yZWQgaW4gbXVsdGkgaW5zZXJ0IGJ1ZmZlci4KKyAqLworI2RlZmluZSBIRUFQX01B WF9CVUZGRVJFRF9TTE9UUwkJMTAwMAorCit0eXBlZGVmIHN0cnVjdCBIZWFwTXVsdGlJbnNlcnRT dGF0ZQoreworCS8qIEFycmF5IG9mIGJ1ZmZlcmVkIHNsb3RzICovCisJVHVwbGVUYWJsZVNsb3Qg KipzbG90czsKKworCS8qIE51bWJlciBvZiBidWZmZXJlZCBzbG90cyBjdXJyZW50bHkgaGVsZCAq LworCWludAkJCWN1cl9zbG90czsKKworCS8qIE1lbW9yeSBjb250ZXh0IGZvciBkZWFsaW5nIHdp dGggbXVsdGkgaW5zZXJ0cyAqLworCU1lbW9yeUNvbnRleHQgbWVtX2N0eDsKK30gSGVhcE11bHRp SW5zZXJ0U3RhdGU7CisKK3R5cGVkZWYgc3RydWN0IEhlYXBJbnNlcnRTdGF0ZQoreworCXN0cnVj dCBCdWxrSW5zZXJ0U3RhdGVEYXRhICpiaXN0YXRlOworCUhlYXBNdWx0aUluc2VydFN0YXRlICpt aXN0YXRlOworfSBIZWFwSW5zZXJ0U3RhdGU7CisKKwogLyogLS0tLS0tLS0tLS0tLS0tLQogICoJ CWZ1bmN0aW9uIHByb3RvdHlwZXMgZm9yIGhlYXAgYWNjZXNzIG1ldGhvZAogICoKQEAgLTMyMiw2 ICszNDksMTcgQEAgZXh0ZXJuIHZvaWQgaGVhcF9pbnNlcnQoUmVsYXRpb24gcmVsYXRpb24sIEhl YXBUdXBsZSB0dXAsIENvbW1hbmRJZCBjaWQsCiBleHRlcm4gdm9pZCBoZWFwX211bHRpX2luc2Vy dChSZWxhdGlvbiByZWxhdGlvbiwgc3RydWN0IFR1cGxlVGFibGVTbG90ICoqc2xvdHMsCiAJCQkJ CQkJICBpbnQgbnR1cGxlcywgQ29tbWFuZElkIGNpZCwgaW50IG9wdGlvbnMsCiAJCQkJCQkJICBC dWxrSW5zZXJ0U3RhdGUgYmlzdGF0ZSk7CisKK2V4dGVybiBUYWJsZU1vZGlmeVN0YXRlICpoZWFw X21vZGlmeV9iZWdpbihSZWxhdGlvbiByZWwsCisJCQkJCQkJCQkJICAgQ29tbWFuZElkIGNpZCwK KwkJCQkJCQkJCQkgICBpbnQgb3B0aW9ucywKKwkJCQkJCQkJCQkgICBUYWJsZU1vZGlmeUJ1ZmZl ckZsdXNoQ2IgYnVmZmVyX2ZsdXNoX2NiLAorCQkJCQkJCQkJCSAgIHZvaWQgKmJ1ZmZlcl9mbHVz aF9jdHgpOworZXh0ZXJuIHZvaWQgaGVhcF9tb2RpZnlfYnVmZmVyX2luc2VydChUYWJsZU1vZGlm eVN0YXRlICpzdGF0ZSwKKwkJCQkJCQkJCSAgVHVwbGVUYWJsZVNsb3QgKnNsb3QpOworZXh0ZXJu IHZvaWQgaGVhcF9tb2RpZnlfYnVmZmVyX2ZsdXNoKFRhYmxlTW9kaWZ5U3RhdGUgKnN0YXRlKTsK K2V4dGVybiB2b2lkIGhlYXBfbW9kaWZ5X2VuZChUYWJsZU1vZGlmeVN0YXRlICpzdGF0ZSk7CisK IGV4dGVybiBUTV9SZXN1bHQgaGVhcF9kZWxldGUoUmVsYXRpb24gcmVsYXRpb24sIEl0ZW1Qb2lu dGVyIHRpZCwKIAkJCQkJCQkgQ29tbWFuZElkIGNpZCwgU25hcHNob3QgY3Jvc3NjaGVjaywgYm9v bCB3YWl0LAogCQkJCQkJCSBzdHJ1Y3QgVE1fRmFpbHVyZURhdGEgKnRtZmQsIGJvb2wgY2hhbmdp bmdQYXJ0KTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmggYi9zcmMv aW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5oCmluZGV4IGFkYjQ3OGE5M2MuLjU3YjcxZWVmMzggMTAw NjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmgKKysrIGIvc3JjL2luY2x1ZGUv YWNjZXNzL3RhYmxlYW0uaApAQCAtMjU0LDExICsyNTQsNDIgQEAgdHlwZWRlZiBzdHJ1Y3QgVE1f SW5kZXhEZWxldGVPcAogCVRNX0luZGV4U3RhdHVzICpzdGF0dXM7CiB9IFRNX0luZGV4RGVsZXRl T3A7CiAKK3N0cnVjdCBUYWJsZU1vZGlmeVN0YXRlOworCisvKiBDYWxsYmFjayBpbnZva2VkIHVw b24gZmx1c2hpbmcgZWFjaCBidWZmZXJlZCB0dXBsZSAqLwordHlwZWRlZiB2b2lkICgqVGFibGVN b2RpZnlCdWZmZXJGbHVzaENiKSAodm9pZCAqY29udGV4dCwKKwkJCQkJCQkJCQkgIFR1cGxlVGFi bGVTbG90ICpzbG90KTsKKworLyogSG9sZHMgdGFibGUgbW9kaWZ5IHN0YXRlICovCit0eXBlZGVm IHN0cnVjdCBUYWJsZU1vZGlmeVN0YXRlCit7CisJLyogVGhlc2UgZmllbGRzIGFyZSB1c2VkIGZv ciBpbnNlcnRzIGZvciBub3cgKi8KKworCVJlbGF0aW9uCXJlbDsJCQkvKiBSZWxhdGlvbiB0byBp bnNlcnQgdG8gKi8KKwlDb21tYW5kSWQJY2lkOwkJCS8qIENvbW1hbmQgSUQgZm9yIGluc2VydCAq LworCWludAkJCW9wdGlvbnM7CQkvKiBUQUJMRV9JTlNFUlQgb3B0aW9ucyAqLworCisJLyogTWVt b3J5IGNvbnRleHQgZm9yIGRlYWxpbmcgd2l0aCBtb2RpZnkgc3RhdGUgdmFyaWFibGVzICovCisJ TWVtb3J5Q29udGV4dCBtZW1fY3R4OworCisJLyogRmx1c2ggY2FsbGJhY2sgYW5kIGl0cyBjb250 ZXh0IHVzZWQgZm9yIG11bHRpIGluc2VydHMgKi8KKwlUYWJsZU1vZGlmeUJ1ZmZlckZsdXNoQ2Ig YnVmZmVyX2ZsdXNoX2NiOworCXZvaWQJICAgKmJ1ZmZlcl9mbHVzaF9jdHg7CisKKwkvKiBUYWJs ZSBBTSBzcGVjaWZpYyBkYXRhICovCisJdm9pZAkgICAqZGF0YTsKK30gVGFibGVNb2RpZnlTdGF0 ZTsKKwogLyogIm9wdGlvbnMiIGZsYWcgYml0cyBmb3IgdGFibGVfdHVwbGVfaW5zZXJ0ICovCiAv KiBUQUJMRV9JTlNFUlRfU0tJUF9XQUwgd2FzIDB4MDAwMTsgUmVsYXRpb25OZWVkc1dBTCgpIG5v dyBnb3Zlcm5zICovCiAjZGVmaW5lIFRBQkxFX0lOU0VSVF9TS0lQX0ZTTQkJMHgwMDAyCiAjZGVm aW5lIFRBQkxFX0lOU0VSVF9GUk9aRU4JCQkweDAwMDQKICNkZWZpbmUgVEFCTEVfSU5TRVJUX05P X0xPR0lDQUwJCTB4MDAwOAorLyoKKyAqIFVzZSBCQVNfQlVMS1dSSVRFIGJ1ZmZlciBhY2Nlc3Mg c3RyYXRlZ3kuIDB4MDAxMCBpcyBmb3IKKyAqIEhFQVBfSU5TRVJUX1NQRUNVTEFUSVZFLgorICov CisjZGVmaW5lIFRBQkxFX0lOU0VSVF9CQVNfQlVMS1dSSVRFCTB4MDAyMAogCiAvKiBmbGFnIGJp dHMgZm9yIHRhYmxlX3R1cGxlX2xvY2sgKi8KIC8qIEZvbGxvdyB0dXBsZXMgd2hvc2UgdXBkYXRl IGlzIGluIHByb2dyZXNzIGlmIGxvY2sgbW9kZXMgZG9uJ3QgY29uZmxpY3QgICovCkBAIC01Nzcs NiArNjA4LDIxIEBAIHR5cGVkZWYgc3RydWN0IFRhYmxlQW1Sb3V0aW5lCiAJdm9pZAkJKCpmaW5p c2hfYnVsa19pbnNlcnQpIChSZWxhdGlvbiByZWwsIGludCBvcHRpb25zKTsKIAogCisJLyogLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisJICogVGFibGUgTW9kaWZ5IHJlbGF0ZWQgZnVuY3Rpb25zLgorCSAqIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorCSAqLworCVRhYmxlTW9kaWZ5U3RhdGUgKigqdHVwbGVfbW9kaWZ5X2Jl Z2luKSAoUmVsYXRpb24gcmVsLAorCQkJCQkJCQkJCQkgQ29tbWFuZElkIGNpZCwKKwkJCQkJCQkJ CQkJIGludCBvcHRpb25zLAorCQkJCQkJCQkJCQkgVGFibGVNb2RpZnlCdWZmZXJGbHVzaENiIGJ1 ZmZlcl9mbHVzaF9jYiwKKwkJCQkJCQkJCQkJIHZvaWQgKmJ1ZmZlcl9mbHVzaF9jdHgpOworCXZv aWQJCSgqdHVwbGVfbW9kaWZ5X2J1ZmZlcl9pbnNlcnQpIChUYWJsZU1vZGlmeVN0YXRlICpzdGF0 ZSwKKwkJCQkJCQkJCQkJICAgVHVwbGVUYWJsZVNsb3QgKnNsb3QpOworCXZvaWQJCSgqdHVwbGVf bW9kaWZ5X2J1ZmZlcl9mbHVzaCkgKFRhYmxlTW9kaWZ5U3RhdGUgKnN0YXRlKTsKKwl2b2lkCQko KnR1cGxlX21vZGlmeV9lbmQpIChUYWJsZU1vZGlmeVN0YXRlICpzdGF0ZSk7CisKKwogCS8qIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQogCSAqIERETCByZWxhdGVkIGZ1bmN0aW9uYWxpdHkuCiAJICogLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCkBAIC0xNjA4LDYgKzE2NTQsNDEgQEAgdGFibGVfZmluaXNoX2J1bGtfaW5zZXJ0 KFJlbGF0aW9uIHJlbCwgaW50IG9wdGlvbnMpCiAJCXJlbC0+cmRfdGFibGVhbS0+ZmluaXNoX2J1 bGtfaW5zZXJ0KHJlbCwgb3B0aW9ucyk7CiB9CiAKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVGFi bGUgTW9kaWZ5IHJlbGF0ZWQgZnVuY3Rpb25zLgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KK3N0 YXRpYyBpbmxpbmUgVGFibGVNb2RpZnlTdGF0ZSAqCit0YWJsZV9tb2RpZnlfYmVnaW4oUmVsYXRp b24gcmVsLAorCQkJCSAgIENvbW1hbmRJZCBjaWQsCisJCQkJICAgaW50IG9wdGlvbnMsCisJCQkJ ICAgVGFibGVNb2RpZnlCdWZmZXJGbHVzaENiIGJ1ZmZlcl9mbHVzaF9jYiwKKwkJCQkgICB2b2lk ICpidWZmZXJfZmx1c2hfY3R4KQoreworCXJldHVybiByZWwtPnJkX3RhYmxlYW0tPnR1cGxlX21v ZGlmeV9iZWdpbihyZWwsCisJCQkJCQkJCQkJCSAgIGNpZCwKKwkJCQkJCQkJCQkJICAgb3B0aW9u cywKKwkJCQkJCQkJCQkJICAgYnVmZmVyX2ZsdXNoX2NiLAorCQkJCQkJCQkJCQkgICBidWZmZXJf Zmx1c2hfY3R4KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCit0YWJsZV9tb2RpZnlfYnVmZmVy X2luc2VydChUYWJsZU1vZGlmeVN0YXRlICpzdGF0ZSwgVHVwbGVUYWJsZVNsb3QgKnNsb3QpCit7 CisJc3RhdGUtPnJlbC0+cmRfdGFibGVhbS0+dHVwbGVfbW9kaWZ5X2J1ZmZlcl9pbnNlcnQoc3Rh dGUsIHNsb3QpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3RhYmxlX21vZGlmeV9idWZmZXJf Zmx1c2goVGFibGVNb2RpZnlTdGF0ZSAqc3RhdGUpCit7CisJc3RhdGUtPnJlbC0+cmRfdGFibGVh bS0+dHVwbGVfbW9kaWZ5X2J1ZmZlcl9mbHVzaChzdGF0ZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUg dm9pZAordGFibGVfbW9kaWZ5X2VuZChUYWJsZU1vZGlmeVN0YXRlICpzdGF0ZSkKK3sKKwlzdGF0 ZS0+cmVsLT5yZF90YWJsZWFtLT50dXBsZV9tb2RpZnlfZW5kKHN0YXRlKTsKK30KIAogLyogLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCiAgKiBEREwgcmVsYXRlZCBmdW5jdGlvbmFsaXR5LgpkaWZmIC0tZ2l0IGEv c3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlw ZWRlZnMubGlzdAppbmRleCAxNzFhN2RkNWQyLi5lN2RkZjI5YzE2IDEwMDY0NAotLS0gYS9zcmMv dG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAorKysgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlw ZWRlZnMubGlzdApAQCAtMTE0Nyw2ICsxMTQ3LDggQEAgSGVhZGxpbmVKc29uU3RhdGUKIEhlYWRs aW5lUGFyc2VkVGV4dAogSGVhZGxpbmVXb3JkRW50cnkKIEhlYXBDaGVja0NvbnRleHQKK0hlYXBJ bnNlcnRTdGF0ZQorSGVhcE11bHRpSW5zZXJ0U3RhdGUKIEhlYXBQYWdlRnJlZXplCiBIZWFwU2Nh bkRlc2MKIEhlYXBUdXBsZQpAQCAtMjg3Myw2ICsyODc1LDcgQEAgVGFibGVGdW5jU2NhblN0YXRl CiBUYWJsZUZ1bmNUeXBlCiBUYWJsZUluZm8KIFRhYmxlTGlrZUNsYXVzZQorVGFibGVNb2RpZnlT dGF0ZQogVGFibGVTYW1wbGVDbGF1c2UKIFRhYmxlU2NhbkRlc2MKIFRhYmxlU2NhbkRlc2NEYXRh Ci0tIAoyLjQwLjEKCg== --00000000000039bd1c0625613fb8 Content-Type: application/octet-stream; name="v24-0003-Use-new-multi-inserts-table-AM-for-COPY-.-FROM.patch" Content-Disposition: attachment; filename="v24-0003-Use-new-multi-inserts-table-AM-for-COPY-.-FROM.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m2q76pem2 RnJvbSBmZDY0ZjAwNzA5MmY0YTcxZDYxYWExZjMzNDczOTBkYTA1YzI0NjBjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBCaGFyYXRoIFJ1cGlyZWRkeSA8cnVwaXJlZGRAYW1hem9uLmNv bT4KRGF0ZTogU2F0LCAyNiBPY3QgMjAyNCAxMjozNzoxNCArMDAwMApTdWJqZWN0OiBbUEFUQ0gg djI0IDMvNF0gVXNlIG5ldyBtdWx0aS1pbnNlcnRzIHRhYmxlIEFNIGZvciBDT1BZIC4uLiBGUk9N CgpUaGlzIGNvbW1pdCB1c2VzIHRoZSBuZXcgbXVsdGktaW5zZXJ0cyB0YWJsZSBBTSBhZGRlZCBi eSBjb21taXQKPDxDSEFOR0VfTUU+PiBmb3IgQ09QWSAuLi4gRlJPTSBjb21tYW5kLgoKQXV0aG9y OiBCaGFyYXRoIFJ1cGlyZWRkeQpSZXZpZXdlZC1ieTogSmVmZiBEYXZpcwpEaXNjdXNzaW9uOiBo dHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9tZXNzYWdlLWlkL0NBTGoyQUNWaTllVFJZUiUzRGdk Y2E1d3h0ajNLa185cTlxVmNjeHNTMWhuZ1RHT0NqUHdRJTQwbWFpbC5nbWFpbC5jb20KRGlzY3Vz c2lvbjogaHR0cHM6Ly93d3cucG9zdGdyZXNxbC5vcmcvbWVzc2FnZS1pZC84NjMzMTcxY2IwMzRh YWZjMjYwZmRmMzdkZjA0YjZjNzc5YWExZTJmLmNhbWVsJTQwai1kYXZpcy5jb20KLS0tCiBzcmMv YmFja2VuZC9jb21tYW5kcy9jb3B5ZnJvbS5jICAgICAgICAgIHwgMjU0ICsrKysrKysrKysrKysr Ky0tLS0tLS0tCiBzcmMvaW5jbHVkZS9jb21tYW5kcy9jb3B5ZnJvbV9pbnRlcm5hbC5oIHwgICA0 ICstCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCAgICAgICAgIHwgICAxICsKIDMg ZmlsZXMgY2hhbmdlZCwgMTcxIGluc2VydGlvbnMoKyksIDg4IGRlbGV0aW9ucygtKQoKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHlmcm9tLmMgYi9zcmMvYmFja2VuZC9jb21t YW5kcy9jb3B5ZnJvbS5jCmluZGV4IDA3Y2JkNWQyMmIuLjE4ZmI2MDljYmUgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHlmcm9tLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFu ZHMvY29weWZyb20uYwpAQCAtNzQsMTQgKzc0LDI3IEBACiAgKi8KICNkZWZpbmUgTUFYX1BBUlRJ VElPTl9CVUZGRVJTCTMyCiAKKy8qIENvbnRleHQgZm9yIG11bHRpLWluc2VydHMgYnVmZmVyIGZs dXNoIGNhbGxiYWNrICovCit0eXBlZGVmIHN0cnVjdCBNdWx0aUluc2VydEJ1ZmZlckZsdXNoQ3R4 Cit7CisJQ29weUZyb21TdGF0ZSBjc3RhdGU7CisJUmVzdWx0UmVsSW5mbyAqcmVzdWx0UmVsSW5m bzsKKwlFU3RhdGUJICAgKmVzdGF0ZTsKK30gTXVsdGlJbnNlcnRCdWZmZXJGbHVzaEN0eDsKKwog LyogU3RvcmVzIG11bHRpLWluc2VydCBkYXRhIHJlbGF0ZWQgdG8gYSBzaW5nbGUgcmVsYXRpb24g aW4gQ29weUZyb20uICovCiB0eXBlZGVmIHN0cnVjdCBDb3B5TXVsdGlJbnNlcnRCdWZmZXIKIHsK LQlUdXBsZVRhYmxlU2xvdCAqc2xvdHNbTUFYX0JVRkZFUkVEX1RVUExFU107IC8qIEFycmF5IHRv IHN0b3JlIHR1cGxlcyAqLworCVRhYmxlTW9kaWZ5U3RhdGUgKm1zdGF0ZTsJLyogVGFibGUgaW5z ZXJ0IHN0YXRlOyBOVUxMIGlmIGZvcmVpZ24gdGFibGUgKi8KKwlUdXBsZVRhYmxlU2xvdCAqKnNs b3RzOwkJLyogQXJyYXkgdG8gc3RvcmUgdHVwbGVzICovCiAJUmVzdWx0UmVsSW5mbyAqcmVzdWx0 UmVsSW5mbzsJLyogUmVzdWx0UmVsSW5mbyBmb3IgJ3JlbGlkJyAqLwotCUJ1bGtJbnNlcnRTdGF0 ZSBiaXN0YXRlOwkvKiBCdWxrSW5zZXJ0U3RhdGUgZm9yIHRoaXMgcmVsIGlmIHBsYWluCi0JCQkJ CQkJCSAqIHRhYmxlOyBOVUxMIGlmIGZvcmVpZ24gdGFibGUgKi8KKwlUdXBsZVRhYmxlU2xvdCAq bWlzbG90OwkJLyogU2xvdCB1c2VkIGZvciBtdWx0aS1pbnNlcnRzICovCisJTXVsdGlJbnNlcnRC dWZmZXJGbHVzaEN0eCAqbWlidWZmZXJjdHg7IC8qIE11bHRpLWluc2VydHMgYnVmZmVyIGZsdXNo CisJCQkJCQkJCQkJCSAqIGNhbGxiYWNrIGNvbnRleHQgKi8KIAlpbnQJCQludXNlZDsJCQkvKiBu dW1iZXIgb2YgJ3Nsb3RzJyBjb250YWluaW5nIHR1cGxlcyAqLworCWludAkJCWN1cnJzbG90bm87 CQkvKiBDdXJyZW50IGJ1ZmZlcmVkIHNsb3QgbnVtYmVyIHRoYXQncyBiZWluZworCQkJCQkJCQkg KiBmbHVzaGVkOyBVc2VkIHRvIGdldCBjb3JyZWN0IGN1cl9saW5lbm8gZm9yCisJCQkJCQkJCSAq IGVycm9ycyB3aGlsZSBpbiBmbHVzaCBjYWxsYmFjay4gKi8KIAl1aW50NjQJCWxpbmVub3NbTUFY X0JVRkZFUkVEX1RVUExFU107CS8qIExpbmUgIyBvZiB0dXBsZSBpbiBjb3B5CiAJCQkJCQkJCQkJ CQkgKiBzdHJlYW0gKi8KIH0gQ29weU11bHRpSW5zZXJ0QnVmZmVyOwpAQCAtMjE2LDE5ICsyMjks OTYgQEAgQ29weUxpbWl0UHJpbnRvdXRMZW5ndGgoY29uc3QgY2hhciAqc3RyKQogCXJldHVybiBy ZXM7CiB9CiAKKy8qCisgKiBJbXBsZW1lbnRzIGZvciBtdWx0aS1pbnNlcnRzIGJ1ZmZlciBmbHVz aCBjYWxsYmFjaworICogaS5lLiBUYWJsZU1vZGlmeUVuZENhbGxiYWNrLgorICoKKyAqIE5COiBD YWxsZXIgbXVzdCB0YWtlIGNhcmUgb2Ygb3BlbmluZyBhbmQgY2xvc2luZyB0aGUgaW5kaWNlcy4K KyAqLworc3RhdGljIHZvaWQKK011bHRpSW5zZXJ0QnVmZmVyRmx1c2hDYih2b2lkICpjb250ZXh0 LCBUdXBsZVRhYmxlU2xvdCAqc2xvdCkKK3sKKwlNdWx0aUluc2VydEJ1ZmZlckZsdXNoQ3R4ICpt aWJ1ZmZlcmN0eCA9IChNdWx0aUluc2VydEJ1ZmZlckZsdXNoQ3R4ICopIGNvbnRleHQ7CisJQ29w eUZyb21TdGF0ZSBjc3RhdGUgPSBtaWJ1ZmZlcmN0eC0+Y3N0YXRlOworCVJlc3VsdFJlbEluZm8g KnJlc3VsdFJlbEluZm8gPSBtaWJ1ZmZlcmN0eC0+cmVzdWx0UmVsSW5mbzsKKwlFU3RhdGUJICAg KmVzdGF0ZSA9IG1pYnVmZmVyY3R4LT5lc3RhdGU7CisJQ29weU11bHRpSW5zZXJ0QnVmZmVyICpi dWZmZXIgPSByZXN1bHRSZWxJbmZvLT5yaV9Db3B5TXVsdGlJbnNlcnRCdWZmZXI7CisKKwkvKgor CSAqIElmIHRoZXJlIGFyZSBhbnkgaW5kZXhlcywgdXBkYXRlIHRoZW0gZm9yIGFsbCB0aGUgaW5z ZXJ0ZWQgdHVwbGVzLCBhbmQKKwkgKiBydW4gQUZURVIgUk9XIElOU0VSVCB0cmlnZ2Vycy4KKwkg Ki8KKwlpZiAocmVzdWx0UmVsSW5mby0+cmlfTnVtSW5kaWNlcyA+IDApCisJeworCQlMaXN0CSAg ICpyZWNoZWNrSW5kZXhlczsKKworCQljc3RhdGUtPmN1cl9saW5lbm8gPSBidWZmZXItPmxpbmVu b3NbYnVmZmVyLT5jdXJyc2xvdG5vKytdOworCQlyZWNoZWNrSW5kZXhlcyA9CisJCQlFeGVjSW5z ZXJ0SW5kZXhUdXBsZXMocmVzdWx0UmVsSW5mbywKKwkJCQkJCQkJICBzbG90LCBlc3RhdGUsIGZh bHNlLAorCQkJCQkJCQkgIGZhbHNlLCBOVUxMLCBOSUwsIGZhbHNlKTsKKworCQlFeGVjQVJJbnNl cnRUcmlnZ2Vycyhlc3RhdGUsIHJlc3VsdFJlbEluZm8sCisJCQkJCQkJIHNsb3QsIHJlY2hlY2tJ bmRleGVzLAorCQkJCQkJCSBjc3RhdGUtPnRyYW5zaXRpb25fY2FwdHVyZSk7CisKKwkJbGlzdF9m cmVlKHJlY2hlY2tJbmRleGVzKTsKKwl9CisKKwkvKgorCSAqIFRoZXJlJ3Mgbm8gaW5kZXhlcywg YnV0IHNlZSBpZiB3ZSBuZWVkIHRvIHJ1biBBRlRFUiBST1cgSU5TRVJUIHRyaWdnZXJzCisJICog YW55d2F5LgorCSAqLworCWVsc2UgaWYgKHJlc3VsdFJlbEluZm8tPnJpX1RyaWdEZXNjICE9IE5V TEwgJiYKKwkJCSAocmVzdWx0UmVsSW5mby0+cmlfVHJpZ0Rlc2MtPnRyaWdfaW5zZXJ0X2FmdGVy X3JvdyB8fAorCQkJICByZXN1bHRSZWxJbmZvLT5yaV9UcmlnRGVzYy0+dHJpZ19pbnNlcnRfbmV3 X3RhYmxlKSkKKwl7CisJCWNzdGF0ZS0+Y3VyX2xpbmVubyA9IGJ1ZmZlci0+bGluZW5vc1tidWZm ZXItPmN1cnJzbG90bm8rK107CisKKwkJRXhlY0FSSW5zZXJ0VHJpZ2dlcnMoZXN0YXRlLCByZXN1 bHRSZWxJbmZvLAorCQkJCQkJCSBzbG90LCBOSUwsCisJCQkJCQkJIGNzdGF0ZS0+dHJhbnNpdGlv bl9jYXB0dXJlKTsKKwl9CisKKwlBc3NlcnQoYnVmZmVyLT5jdXJyc2xvdG5vIDw9IGJ1ZmZlci0+ bnVzZWQpOworfQorCiAvKgogICogQWxsb2NhdGUgbWVtb3J5IGFuZCBpbml0aWFsaXplIGEgbmV3 IENvcHlNdWx0aUluc2VydEJ1ZmZlciBmb3IgdGhpcwogICogUmVzdWx0UmVsSW5mby4KICAqLwog c3RhdGljIENvcHlNdWx0aUluc2VydEJ1ZmZlciAqCi1Db3B5TXVsdGlJbnNlcnRCdWZmZXJJbml0 KFJlc3VsdFJlbEluZm8gKnJyaSkKK0NvcHlNdWx0aUluc2VydEJ1ZmZlckluaXQoQ29weU11bHRp SW5zZXJ0SW5mbyAqbWlpbmZvLCBSZXN1bHRSZWxJbmZvICpycmksCisJCQkJCQkgIENvcHlGcm9t U3RhdGUgY3N0YXRlLCBFU3RhdGUgKmVzdGF0ZSkKIHsKIAlDb3B5TXVsdGlJbnNlcnRCdWZmZXIg KmJ1ZmZlcjsKIAogCWJ1ZmZlciA9IChDb3B5TXVsdGlJbnNlcnRCdWZmZXIgKikgcGFsbG9jKHNp emVvZihDb3B5TXVsdGlJbnNlcnRCdWZmZXIpKTsKLQltZW1zZXQoYnVmZmVyLT5zbG90cywgMCwg c2l6ZW9mKFR1cGxlVGFibGVTbG90ICopICogTUFYX0JVRkZFUkVEX1RVUExFUyk7CisKKwlpZiAo cnJpLT5yaV9GZHdSb3V0aW5lID09IE5VTEwpCisJeworCQlidWZmZXItPm1pYnVmZmVyY3R4ID0K KwkJCShNdWx0aUluc2VydEJ1ZmZlckZsdXNoQ3R4ICopIHBhbGxvYyhzaXplb2YoTXVsdGlJbnNl cnRCdWZmZXJGbHVzaEN0eCkpOworCQlidWZmZXItPm1pYnVmZmVyY3R4LT5jc3RhdGUgPSBjc3Rh dGU7CisJCWJ1ZmZlci0+bWlidWZmZXJjdHgtPnJlc3VsdFJlbEluZm8gPSBycmk7CisJCWJ1ZmZl ci0+bWlidWZmZXJjdHgtPmVzdGF0ZSA9IGVzdGF0ZTsKKworCQlidWZmZXItPm1zdGF0ZSA9IHRh YmxlX21vZGlmeV9iZWdpbihycmktPnJpX1JlbGF0aW9uRGVzYywKKwkJCQkJCQkJCQkJbWlpbmZv LT5teWNpZCwKKwkJCQkJCQkJCQkJbWlpbmZvLT50aV9vcHRpb25zLAorCQkJCQkJCQkJCQlNdWx0 aUluc2VydEJ1ZmZlckZsdXNoQ2IsCisJCQkJCQkJCQkJCWJ1ZmZlci0+bWlidWZmZXJjdHgpOwor CisJCWJ1ZmZlci0+c2xvdHMgPSBOVUxMOworCX0KKwllbHNlCisJeworCQlidWZmZXItPm1zdGF0 ZSA9IE5VTEw7CisJCWJ1ZmZlci0+c2xvdHMgPSBwYWxsb2MwKHNpemVvZihUdXBsZVRhYmxlU2xv dCAqKSAqIE1BWF9CVUZGRVJFRF9UVVBMRVMpOworCX0KKworCWJ1ZmZlci0+bWlzbG90ID0gTlVM TDsKIAlidWZmZXItPnJlc3VsdFJlbEluZm8gPSBycmk7Ci0JYnVmZmVyLT5iaXN0YXRlID0gKHJy aS0+cmlfRmR3Um91dGluZSA9PSBOVUxMKSA/IEdldEJ1bGtJbnNlcnRTdGF0ZSgpIDogTlVMTDsK IAlidWZmZXItPm51c2VkID0gMDsKIAogCXJldHVybiBidWZmZXI7CkBAIC0yMzksMTEgKzMyOSwx MiBAQCBDb3B5TXVsdGlJbnNlcnRCdWZmZXJJbml0KFJlc3VsdFJlbEluZm8gKnJyaSkKICAqLwog c3RhdGljIGlubGluZSB2b2lkCiBDb3B5TXVsdGlJbnNlcnRJbmZvU2V0dXBCdWZmZXIoQ29weU11 bHRpSW5zZXJ0SW5mbyAqbWlpbmZvLAotCQkJCQkJCSAgIFJlc3VsdFJlbEluZm8gKnJyaSkKKwkJ CQkJCQkgICBSZXN1bHRSZWxJbmZvICpycmksIENvcHlGcm9tU3RhdGUgY3N0YXRlLAorCQkJCQkJ CSAgIEVTdGF0ZSAqZXN0YXRlKQogewogCUNvcHlNdWx0aUluc2VydEJ1ZmZlciAqYnVmZmVyOwog Ci0JYnVmZmVyID0gQ29weU11bHRpSW5zZXJ0QnVmZmVySW5pdChycmkpOworCWJ1ZmZlciA9IENv cHlNdWx0aUluc2VydEJ1ZmZlckluaXQobWlpbmZvLCBycmksIGNzdGF0ZSwgZXN0YXRlKTsKIAog CS8qIFNldHVwIGJhY2stbGluayBzbyB3ZSBjYW4gZWFzaWx5IGZpbmQgdGhpcyBidWZmZXIgYWdh aW4gKi8KIAlycmktPnJpX0NvcHlNdWx0aUluc2VydEJ1ZmZlciA9IGJ1ZmZlcjsKQEAgLTI3Niw3 ICszNjcsNyBAQCBDb3B5TXVsdGlJbnNlcnRJbmZvSW5pdChDb3B5TXVsdGlJbnNlcnRJbmZvICpt aWluZm8sIFJlc3VsdFJlbEluZm8gKnJyaSwKIAkgKiB0dXBsZXMgdGhlaXIgd2F5IGZvciB0aGUg Zmlyc3QgdGltZS4KIAkgKi8KIAlpZiAocnJpLT5yaV9SZWxhdGlvbkRlc2MtPnJkX3JlbC0+cmVs a2luZCAhPSBSRUxLSU5EX1BBUlRJVElPTkVEX1RBQkxFKQotCQlDb3B5TXVsdGlJbnNlcnRJbmZv U2V0dXBCdWZmZXIobWlpbmZvLCBycmkpOworCQlDb3B5TXVsdGlJbnNlcnRJbmZvU2V0dXBCdWZm ZXIobWlpbmZvLCBycmksIGNzdGF0ZSwgZXN0YXRlKTsKIH0KIAogLyoKQEAgLTMyMCw4ICs0MTEs NiBAQCBDb3B5TXVsdGlJbnNlcnRCdWZmZXJGbHVzaChDb3B5TXVsdGlJbnNlcnRJbmZvICptaWlu Zm8sCiAJCWludAkJCWJhdGNoX3NpemUgPSByZXN1bHRSZWxJbmZvLT5yaV9CYXRjaFNpemU7CiAJ CWludAkJCXNlbnQgPSAwOwogCi0JCUFzc2VydChidWZmZXItPmJpc3RhdGUgPT0gTlVMTCk7Ci0K IAkJLyogRW5zdXJlIHRoYXQgdGhlIEZEVyBzdXBwb3J0cyBiYXRjaGluZyBhbmQgaXQncyBlbmFi bGVkICovCiAJCUFzc2VydChyZXN1bHRSZWxJbmZvLT5yaV9GZHdSb3V0aW5lLT5FeGVjRm9yZWln bkJhdGNoSW5zZXJ0KTsKIAkJQXNzZXJ0KGJhdGNoX3NpemUgPiAxKTsKQEAgLTM5MywxMyArNDgy LDggQEAgQ29weU11bHRpSW5zZXJ0QnVmZmVyRmx1c2goQ29weU11bHRpSW5zZXJ0SW5mbyAqbWlp bmZvLAogCX0KIAllbHNlCiAJewotCQlDb21tYW5kSWQJbXljaWQgPSBtaWluZm8tPm15Y2lkOwot CQlpbnQJCQl0aV9vcHRpb25zID0gbWlpbmZvLT50aV9vcHRpb25zOwogCQlib29sCQlsaW5lX2J1 Zl92YWxpZCA9IGNzdGF0ZS0+bGluZV9idWZfdmFsaWQ7CiAJCXVpbnQ2NAkJc2F2ZV9jdXJfbGlu ZW5vID0gY3N0YXRlLT5jdXJfbGluZW5vOwotCQlNZW1vcnlDb250ZXh0IG9sZGNvbnRleHQ7Ci0K LQkJQXNzZXJ0KGJ1ZmZlci0+YmlzdGF0ZSAhPSBOVUxMKTsKIAogCQkvKgogCQkgKiBQcmludCBl cnJvciBjb250ZXh0IGluZm9ybWF0aW9uIGNvcnJlY3RseSwgaWYgb25lIG9mIHRoZSBvcGVyYXRp b25zCkBAIC00MDcsNTYgKzQ5MSwxOCBAQCBDb3B5TXVsdGlJbnNlcnRCdWZmZXJGbHVzaChDb3B5 TXVsdGlJbnNlcnRJbmZvICptaWluZm8sCiAJCSAqLwogCQljc3RhdGUtPmxpbmVfYnVmX3ZhbGlk ID0gZmFsc2U7CiAKLQkJLyoKLQkJICogdGFibGVfbXVsdGlfaW5zZXJ0IG1heSBsZWFrIG1lbW9y eSwgc28gc3dpdGNoIHRvIHNob3J0LWxpdmVkIG1lbW9yeQotCQkgKiBjb250ZXh0IGJlZm9yZSBj YWxsaW5nIGl0LgotCQkgKi8KLQkJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhH ZXRQZXJUdXBsZU1lbW9yeUNvbnRleHQoZXN0YXRlKSk7Ci0JCXRhYmxlX211bHRpX2luc2VydChy ZXN1bHRSZWxJbmZvLT5yaV9SZWxhdGlvbkRlc2MsCi0JCQkJCQkgICBzbG90cywKLQkJCQkJCSAg IG51c2VkLAotCQkJCQkJICAgbXljaWQsCi0JCQkJCQkgICB0aV9vcHRpb25zLAotCQkJCQkJICAg YnVmZmVyLT5iaXN0YXRlKTsKLQkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRleHQpOwor CQlBc3NlcnQoYnVmZmVyLT5jdXJyc2xvdG5vIDw9IGJ1ZmZlci0+bnVzZWQpOworCQlidWZmZXIt PmN1cnJzbG90bm8gPSAwOwogCi0JCWZvciAoaSA9IDA7IGkgPCBudXNlZDsgaSsrKQotCQl7Ci0J CQkvKgotCQkJICogSWYgdGhlcmUgYXJlIGFueSBpbmRleGVzLCB1cGRhdGUgdGhlbSBmb3IgYWxs IHRoZSBpbnNlcnRlZAotCQkJICogdHVwbGVzLCBhbmQgcnVuIEFGVEVSIFJPVyBJTlNFUlQgdHJp Z2dlcnMuCi0JCQkgKi8KLQkJCWlmIChyZXN1bHRSZWxJbmZvLT5yaV9OdW1JbmRpY2VzID4gMCkK LQkJCXsKLQkJCQlMaXN0CSAgICpyZWNoZWNrSW5kZXhlczsKLQotCQkJCWNzdGF0ZS0+Y3VyX2xp bmVubyA9IGJ1ZmZlci0+bGluZW5vc1tpXTsKLQkJCQlyZWNoZWNrSW5kZXhlcyA9Ci0JCQkJCUV4 ZWNJbnNlcnRJbmRleFR1cGxlcyhyZXN1bHRSZWxJbmZvLAotCQkJCQkJCQkJCSAgYnVmZmVyLT5z bG90c1tpXSwgZXN0YXRlLCBmYWxzZSwKLQkJCQkJCQkJCQkgIGZhbHNlLCBOVUxMLCBOSUwsIGZh bHNlKTsKLQkJCQlFeGVjQVJJbnNlcnRUcmlnZ2Vycyhlc3RhdGUsIHJlc3VsdFJlbEluZm8sCi0J CQkJCQkJCQkgc2xvdHNbaV0sIHJlY2hlY2tJbmRleGVzLAotCQkJCQkJCQkJIGNzdGF0ZS0+dHJh bnNpdGlvbl9jYXB0dXJlKTsKLQkJCQlsaXN0X2ZyZWUocmVjaGVja0luZGV4ZXMpOwotCQkJfQor CQl0YWJsZV9tb2RpZnlfYnVmZmVyX2ZsdXNoKGJ1ZmZlci0+bXN0YXRlKTsKIAotCQkJLyoKLQkJ CSAqIFRoZXJlJ3Mgbm8gaW5kZXhlcywgYnV0IHNlZSBpZiB3ZSBuZWVkIHRvIHJ1biBBRlRFUiBS T1cgSU5TRVJUCi0JCQkgKiB0cmlnZ2VycyBhbnl3YXkuCi0JCQkgKi8KLQkJCWVsc2UgaWYgKHJl c3VsdFJlbEluZm8tPnJpX1RyaWdEZXNjICE9IE5VTEwgJiYKLQkJCQkJIChyZXN1bHRSZWxJbmZv LT5yaV9UcmlnRGVzYy0+dHJpZ19pbnNlcnRfYWZ0ZXJfcm93IHx8Ci0JCQkJCSAgcmVzdWx0UmVs SW5mby0+cmlfVHJpZ0Rlc2MtPnRyaWdfaW5zZXJ0X25ld190YWJsZSkpCi0JCQl7Ci0JCQkJY3N0 YXRlLT5jdXJfbGluZW5vID0gYnVmZmVyLT5saW5lbm9zW2ldOwotCQkJCUV4ZWNBUkluc2VydFRy aWdnZXJzKGVzdGF0ZSwgcmVzdWx0UmVsSW5mbywKLQkJCQkJCQkJCSBzbG90c1tpXSwgTklMLAot CQkJCQkJCQkJIGNzdGF0ZS0+dHJhbnNpdGlvbl9jYXB0dXJlKTsKLQkJCX0KKwkJQXNzZXJ0KGJ1 ZmZlci0+Y3VycnNsb3RubyA8PSBidWZmZXItPm51c2VkKTsKKwkJYnVmZmVyLT5jdXJyc2xvdG5v ID0gMDsKIAotCQkJRXhlY0NsZWFyVHVwbGUoc2xvdHNbaV0pOwotCQl9CisJCS8qCisJCSAqIElu ZGV4ZXMgYXJlIHVwZGF0ZWQgYW5kIEFGVEVSIFJPVyBJTlNFUlQgdHJpZ2dlcnMgKGlmIGFueSkg YXJlIHJ1bgorCQkgKiBpbiB0aGUgZmx1c2ggY2FsbGJhY2sgQ29weU1vZGlmeUJ1ZmZlckZsdXNo Q2FsbGJhY2suCisJCSAqLwogCiAJCS8qIFVwZGF0ZSB0aGUgcm93IGNvdW50ZXIgYW5kIHByb2dy ZXNzIG9mIHRoZSBDT1BZIGNvbW1hbmQgKi8KIAkJKnByb2Nlc3NlZCArPSBudXNlZDsKQEAgLTQ5 MiwxOSArNTM4LDE4IEBAIENvcHlNdWx0aUluc2VydEJ1ZmZlckNsZWFudXAoQ29weU11bHRpSW5z ZXJ0SW5mbyAqbWlpbmZvLAogCiAJaWYgKHJlc3VsdFJlbEluZm8tPnJpX0Zkd1JvdXRpbmUgPT0g TlVMTCkKIAl7Ci0JCUFzc2VydChidWZmZXItPmJpc3RhdGUgIT0gTlVMTCk7Ci0JCUZyZWVCdWxr SW5zZXJ0U3RhdGUoYnVmZmVyLT5iaXN0YXRlKTsKKwkJdGFibGVfbW9kaWZ5X2VuZChidWZmZXIt Pm1zdGF0ZSk7CisJCUV4ZWNEcm9wU2luZ2xlVHVwbGVUYWJsZVNsb3QoYnVmZmVyLT5taXNsb3Qp OworCQlwZnJlZShidWZmZXItPm1pYnVmZmVyY3R4KTsKIAl9CiAJZWxzZQotCQlBc3NlcnQoYnVm ZmVyLT5iaXN0YXRlID09IE5VTEwpOwotCi0JLyogU2luY2Ugd2Ugb25seSBjcmVhdGUgc2xvdHMg b24gZGVtYW5kLCBqdXN0IGRyb3AgdGhlIG5vbi1udWxsIG9uZXMuICovCi0JZm9yIChpID0gMDsg aSA8IE1BWF9CVUZGRVJFRF9UVVBMRVMgJiYgYnVmZmVyLT5zbG90c1tpXSAhPSBOVUxMOyBpKysp Ci0JCUV4ZWNEcm9wU2luZ2xlVHVwbGVUYWJsZVNsb3QoYnVmZmVyLT5zbG90c1tpXSk7CisJewor CQkvKiBTaW5jZSB3ZSBvbmx5IGNyZWF0ZSBzbG90cyBvbiBkZW1hbmQsIGp1c3QgZHJvcCB0aGUg bm9uLW51bGwgb25lcy4gKi8KKwkJZm9yIChpID0gMDsgaSA8IE1BWF9CVUZGRVJFRF9UVVBMRVMg JiYgYnVmZmVyLT5zbG90c1tpXSAhPSBOVUxMOyBpKyspCisJCQlFeGVjRHJvcFNpbmdsZVR1cGxl VGFibGVTbG90KGJ1ZmZlci0+c2xvdHNbaV0pOwogCi0JaWYgKHJlc3VsdFJlbEluZm8tPnJpX0Zk d1JvdXRpbmUgPT0gTlVMTCkKLQkJdGFibGVfZmluaXNoX2J1bGtfaW5zZXJ0KHJlc3VsdFJlbElu Zm8tPnJpX1JlbGF0aW9uRGVzYywKLQkJCQkJCQkJIG1paW5mby0+dGlfb3B0aW9ucyk7CisJCXBm cmVlKGJ1ZmZlci0+c2xvdHMpOworCX0KIAogCXBmcmVlKGJ1ZmZlcik7CiB9CkBAIC01OTgsMTUg KzY0MywzNiBAQCBDb3B5TXVsdGlJbnNlcnRJbmZvTmV4dEZyZWVTbG90KENvcHlNdWx0aUluc2Vy dEluZm8gKm1paW5mbywKIHsKIAlDb3B5TXVsdGlJbnNlcnRCdWZmZXIgKmJ1ZmZlciA9IHJyaS0+ cmlfQ29weU11bHRpSW5zZXJ0QnVmZmVyOwogCWludAkJCW51c2VkOworCVR1cGxlVGFibGVTbG90 ICpzbG90OwogCiAJQXNzZXJ0KGJ1ZmZlciAhPSBOVUxMKTsKIAlBc3NlcnQoYnVmZmVyLT5udXNl ZCA8IE1BWF9CVUZGRVJFRF9UVVBMRVMpOwogCiAJbnVzZWQgPSBidWZmZXItPm51c2VkOwogCi0J aWYgKGJ1ZmZlci0+c2xvdHNbbnVzZWRdID09IE5VTEwpCi0JCWJ1ZmZlci0+c2xvdHNbbnVzZWRd ID0gdGFibGVfc2xvdF9jcmVhdGUocnJpLT5yaV9SZWxhdGlvbkRlc2MsIE5VTEwpOwotCXJldHVy biBidWZmZXItPnNsb3RzW251c2VkXTsKKwlpZiAocnJpLT5yaV9GZHdSb3V0aW5lID09IE5VTEwp CisJeworCQlpZiAoYnVmZmVyLT5taXNsb3QgPT0gTlVMTCkKKwkJeworCQkJYnVmZmVyLT5taXNs b3QgPSBNYWtlVHVwbGVUYWJsZVNsb3QoUmVsYXRpb25HZXREZXNjcihycmktPnJpX1JlbGF0aW9u RGVzYyksCisJCQkJCQkJCQkJCQkmVFRTT3BzVmlydHVhbCk7CisJCX0KKworCQkvKiBDYWxsZXIg bXVzdCBjbGVhciB0aGUgc2xvdCAqLworCQlzbG90ID0gYnVmZmVyLT5taXNsb3Q7CisJfQorCWVs c2UKKwl7CisJCWlmIChidWZmZXItPnNsb3RzW251c2VkXSA9PSBOVUxMKQorCQl7CisJCQlzbG90 ID0gdGFibGVfc2xvdF9jcmVhdGUocnJpLT5yaV9SZWxhdGlvbkRlc2MsIE5VTEwpOworCQkJYnVm ZmVyLT5zbG90c1tudXNlZF0gPSBzbG90OworCQl9CisJCWVsc2UKKwkJCXNsb3QgPSBidWZmZXIt PnNsb3RzW251c2VkXTsKKwl9CisKKwlyZXR1cm4gc2xvdDsKIH0KIAogLyoKQEAgLTYyMCw3ICs2 ODYsMTEgQEAgQ29weU11bHRpSW5zZXJ0SW5mb1N0b3JlKENvcHlNdWx0aUluc2VydEluZm8gKm1p aW5mbywgUmVzdWx0UmVsSW5mbyAqcnJpLAogCUNvcHlNdWx0aUluc2VydEJ1ZmZlciAqYnVmZmVy ID0gcnJpLT5yaV9Db3B5TXVsdGlJbnNlcnRCdWZmZXI7CiAKIAlBc3NlcnQoYnVmZmVyICE9IE5V TEwpOwotCUFzc2VydChzbG90ID09IGJ1ZmZlci0+c2xvdHNbYnVmZmVyLT5udXNlZF0pOworCisj aWZkZWYgVVNFX0FTU0VSVF9DSEVDS0lORworCWlmIChycmktPnJpX0Zkd1JvdXRpbmUgIT0gTlVM TCkKKwkJQXNzZXJ0KHNsb3QgPT0gYnVmZmVyLT5zbG90c1tidWZmZXItPm51c2VkXSk7CisjZW5k aWYKIAogCS8qIFN0b3JlIHRoZSBsaW5lIG51bWJlciBzbyB3ZSBjYW4gcHJvcGVybHkgcmVwb3J0 IGFueSBlcnJvcnMgbGF0ZXIgKi8KIAlidWZmZXItPmxpbmVub3NbYnVmZmVyLT5udXNlZF0gPSBs aW5lbm87CkBAIC02MjgsNiArNjk4LDIyIEBAIENvcHlNdWx0aUluc2VydEluZm9TdG9yZShDb3B5 TXVsdGlJbnNlcnRJbmZvICptaWluZm8sIFJlc3VsdFJlbEluZm8gKnJyaSwKIAkvKiBSZWNvcmQg dGhpcyBzbG90IGFzIGJlaW5nIHVzZWQgKi8KIAlidWZmZXItPm51c2VkKys7CiAKKwlpZiAocnJp LT5yaV9GZHdSb3V0aW5lID09IE5VTEwpCisJeworCQlBc3NlcnQoc2xvdCA9PSBidWZmZXItPm1p c2xvdCk7CisJCWJ1ZmZlci0+Y3VycnNsb3RubyA9IDA7CisKKwkJdGFibGVfbW9kaWZ5X2J1ZmZl cl9pbnNlcnQoYnVmZmVyLT5tc3RhdGUsIHNsb3QpOworCX0KKwllbHNlCisJeworCQkvKgorCQkg KiBUaGUgc2xvdCBwcmV2aW91c2x5IG1pZ2h0IHBvaW50IGludG8gdGhlIHBlci10dXBsZSBjb250 ZXh0LiBGb3IKKwkJICogYmF0Y2hpbmcgaXQgbmVlZHMgdG8gYmUgbG9uZ2VyIGxpdmVkLgorCQkg Ki8KKwkJRXhlY01hdGVyaWFsaXplU2xvdChzbG90KTsKKwl9CisKIAkvKiBVcGRhdGUgaG93IG1h bnkgdHVwbGVzIGFyZSBzdG9yZWQgYW5kIHRoZWlyIHNpemUgKi8KIAltaWluZm8tPmJ1ZmZlcmVk VHVwbGVzKys7CiAJbWlpbmZvLT5idWZmZXJlZEJ5dGVzICs9IHR1cGxlbjsKQEAgLTg0MSw3ICs5 MjcsNyBAQCBDb3B5RnJvbShDb3B5RnJvbVN0YXRlIGNzdGF0ZSkKIAkvKgogCSAqIEl0J3MgZ2Vu ZXJhbGx5IG1vcmUgZWZmaWNpZW50IHRvIHByZXBhcmUgYSBidW5jaCBvZiB0dXBsZXMgZm9yCiAJ ICogaW5zZXJ0aW9uLCBhbmQgaW5zZXJ0IHRoZW0gaW4gb25lCi0JICogdGFibGVfbXVsdGlfaW5z ZXJ0KCkvRXhlY0ZvcmVpZ25CYXRjaEluc2VydCgpIGNhbGwsIHRoYW4gY2FsbAorCSAqIHRhYmxl X21vZGlmeV9idWZmZXJfaW5zZXJ0KCkvRXhlY0ZvcmVpZ25CYXRjaEluc2VydCgpIGNhbGwsIHRo YW4gY2FsbAogCSAqIHRhYmxlX3R1cGxlX2luc2VydCgpL0V4ZWNGb3JlaWduSW5zZXJ0KCkgc2Vw YXJhdGVseSBmb3IgZXZlcnkgdHVwbGUuCiAJICogSG93ZXZlciwgdGhlcmUgYXJlIGEgbnVtYmVy IG9mIHJlYXNvbnMgd2h5IHdlIG1pZ2h0IG5vdCBiZSBhYmxlIHRvIGRvCiAJICogdGhpcy4gIFRo ZXNlIGFyZSBleHBsYWluZWQgYmVsb3cuCkBAIC05MjUsNyArMTAxMSw4IEBAIENvcHlGcm9tKENv cHlGcm9tU3RhdGUgY3N0YXRlKQogCQkJaW5zZXJ0TWV0aG9kID0gQ0lNX01VTFRJOwogCiAJCUNv cHlNdWx0aUluc2VydEluZm9Jbml0KCZtdWx0aUluc2VydEluZm8sIHJlc3VsdFJlbEluZm8sIGNz dGF0ZSwKLQkJCQkJCQkJZXN0YXRlLCBteWNpZCwgdGlfb3B0aW9ucyk7CisJCQkJCQkJCWVzdGF0 ZSwgbXljaWQsCisJCQkJCQkJCXRpX29wdGlvbnMgfCBUQUJMRV9JTlNFUlRfQkFTX0JVTEtXUklU RSk7CiAJfQogCiAJLyoKQEAgLTEwOTQsNyArMTE4MSw4IEBAIENvcHlGcm9tKENvcHlGcm9tU3Rh dGUgY3N0YXRlKQogCQkJCXsKIAkJCQkJaWYgKHJlc3VsdFJlbEluZm8tPnJpX0NvcHlNdWx0aUlu c2VydEJ1ZmZlciA9PSBOVUxMKQogCQkJCQkJQ29weU11bHRpSW5zZXJ0SW5mb1NldHVwQnVmZmVy KCZtdWx0aUluc2VydEluZm8sCi0JCQkJCQkJCQkJCQkJICAgcmVzdWx0UmVsSW5mbyk7CisJCQkJ CQkJCQkJCQkJICAgcmVzdWx0UmVsSW5mbywgY3N0YXRlLAorCQkJCQkJCQkJCQkJCSAgIGVzdGF0 ZSk7CiAJCQkJfQogCQkJCWVsc2UgaWYgKGluc2VydE1ldGhvZCA9PSBDSU1fTVVMVElfQ09ORElU SU9OQUwgJiYKIAkJCQkJCSAhQ29weU11bHRpSW5zZXJ0SW5mb0lzRW1wdHkoJm11bHRpSW5zZXJ0 SW5mbykpCkBAIC0xMjI0LDEyICsxMzEyLDYgQEAgQ29weUZyb20oQ29weUZyb21TdGF0ZSBjc3Rh dGUpCiAJCQkJLyogU3RvcmUgdGhlIHNsb3QgaW4gdGhlIG11bHRpLWluc2VydCBidWZmZXIsIHdo ZW4gZW5hYmxlZC4gKi8KIAkJCQlpZiAoaW5zZXJ0TWV0aG9kID09IENJTV9NVUxUSSB8fCBsZWFm cGFydF91c2VfbXVsdGlfaW5zZXJ0KQogCQkJCXsKLQkJCQkJLyoKLQkJCQkJICogVGhlIHNsb3Qg cHJldmlvdXNseSBtaWdodCBwb2ludCBpbnRvIHRoZSBwZXItdHVwbGUKLQkJCQkJICogY29udGV4 dC4gRm9yIGJhdGNoaW5nIGl0IG5lZWRzIHRvIGJlIGxvbmdlciBsaXZlZC4KLQkJCQkJICovCi0J CQkJCUV4ZWNNYXRlcmlhbGl6ZVNsb3QobXlzbG90KTsKLQogCQkJCQkvKiBBZGQgdGhpcyB0dXBs ZSB0byB0aGUgdHVwbGUgYnVmZmVyICovCiAJCQkJCUNvcHlNdWx0aUluc2VydEluZm9TdG9yZSgm bXVsdGlJbnNlcnRJbmZvLAogCQkJCQkJCQkJCQkgcmVzdWx0UmVsSW5mbywgbXlzbG90LApkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvY29weWZyb21faW50ZXJuYWwuaCBiL3NyYy9p bmNsdWRlL2NvbW1hbmRzL2NvcHlmcm9tX2ludGVybmFsLmgKaW5kZXggY2FkNTJmY2M3OC4uMTRh ZGRiYzZmNiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvY29weWZyb21faW50ZXJu YWwuaAorKysgYi9zcmMvaW5jbHVkZS9jb21tYW5kcy9jb3B5ZnJvbV9pbnRlcm5hbC5oCkBAIC00 Niw5ICs0Niw5IEBAIHR5cGVkZWYgZW51bSBFb2xUeXBlCiB0eXBlZGVmIGVudW0gQ29weUluc2Vy dE1ldGhvZAogewogCUNJTV9TSU5HTEUsCQkJCQkvKiB1c2UgdGFibGVfdHVwbGVfaW5zZXJ0IG9y IEV4ZWNGb3JlaWduSW5zZXJ0ICovCi0JQ0lNX01VTFRJLAkJCQkJLyogYWx3YXlzIHVzZSB0YWJs ZV9tdWx0aV9pbnNlcnQgb3IKKwlDSU1fTVVMVEksCQkJCQkvKiBhbHdheXMgdXNlIHRhYmxlX21v ZGlmeV9idWZmZXJfaW5zZXJ0IG9yCiAJCQkJCQkJCSAqIEV4ZWNGb3JlaWduQmF0Y2hJbnNlcnQg Ki8KLQlDSU1fTVVMVElfQ09ORElUSU9OQUwsCQkvKiB1c2UgdGFibGVfbXVsdGlfaW5zZXJ0IG9y CisJQ0lNX01VTFRJX0NPTkRJVElPTkFMLAkJLyogdXNlIHRhYmxlX21vZGlmeV9idWZmZXJfaW5z ZXJ0IG9yCiAJCQkJCQkJCSAqIEV4ZWNGb3JlaWduQmF0Y2hJbnNlcnQgb25seSBpZiB2YWxpZCAq LwogfSBDb3B5SW5zZXJ0TWV0aG9kOwogCmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQv dHlwZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CmluZGV4IGU3 ZGRmMjljMTYuLmJmMjFlNDNjZTEgMTAwNjQ0Ci0tLSBhL3NyYy90b29scy9wZ2luZGVudC90eXBl ZGVmcy5saXN0CisrKyBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CkBAIC0xNjY0 LDYgKzE2NjQsNyBAQCBNb25vdG9uaWNGdW5jdGlvbgogTW9ycGhPcGFxdWUKIE1zZ1R5cGUKIE11 bHRpQXNzaWduUmVmCitNdWx0aUluc2VydEJ1ZmZlckZsdXNoQ3R4CiBNdWx0aVNvcnRTdXBwb3J0 CiBNdWx0aVNvcnRTdXBwb3J0RGF0YQogTXVsdGlYYWN0SWQKLS0gCjIuNDAuMQoK --00000000000039bd1c0625613fb8--