Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1kmcZ3-0005kp-3r for pgsql-hackers@arkaria.postgresql.org; Tue, 08 Dec 2020 12:57:57 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1kmcZ2-0004OC-1U for pgsql-hackers@arkaria.postgresql.org; Tue, 08 Dec 2020 12:57:56 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1kmcZ1-0004O5-LB for pgsql-hackers@lists.postgresql.org; Tue, 08 Dec 2020 12:57:55 +0000 Received: from mail-pl1-x62e.google.com ([2607:f8b0:4864:20::62e]) by magus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1kmcYx-0000yi-Cg for pgsql-hackers@postgresql.org; Tue, 08 Dec 2020 12:57:55 +0000 Received: by mail-pl1-x62e.google.com with SMTP id r4so2811573pls.11 for ; Tue, 08 Dec 2020 04:57:50 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:from:date:message-id:subject:to; bh=CzGQNwPTOQKJiKmhgOcUenVvqTBwpQ2euW0kmNXbNzY=; b=S+b9PPvtbHLpb/2S35Hec9MXGKdQdKBjF7xYJpYU1FQxwim6DE1M0s48TPKzcu8bWQ fMypMRM1k06kcWTAF9XtqSzMPNDSeRRZ09UbkEVsif8z191v9VZXQfg480FgWQU6Ojz8 TT+h5Zs7WFrKZ1GQ5XQD9HubOP9VCdQeqVHbCAed60eheqwj8QxHfQXYvVooooxi/SR9 r4wCwxaXLIVXgIsGO1KvFUh56GdJ14F8Ef96KRkTgKLQ6ErnvYz0q17eITNlW4k8TQfZ EyByVlSqYaCPES35JeHHpGS6GzkYwIJ/iU4OZ+fC3Y3yNlIr0h6XP9iN4NixCmTM5mp2 XsNw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:from:date:message-id:subject:to; bh=CzGQNwPTOQKJiKmhgOcUenVvqTBwpQ2euW0kmNXbNzY=; b=FkgjD8jZtPZAJbQ7PIJaTccsRkisswIouPOMRvl4pkxaug93/HPLi37OJlY2wwpal9 IY8DehyTtpLLyyIBjUvJ1uHGSH9K4W1+a3sNbJeRvkBBG4gNQJA/jBkTUuUpW5NDY2vQ HVKign5zINnv8jJwFQH1pVd4x1VkgwPAFuxYe2r7DaLOq1jPYLF3nTXQyYzn3sYveysv gTrBMw0bQDrvmYc5m7j5mHXZM23AcLm7/4ZhwSb55ZzGqjyXXiEf5eWqf9Fa3PBPZwMv +bTiZH64TsfHiGQ4oaCRV23LUFO3XS1AADRwt49qPU19KgIBld0Ih+aD+urBy5K6B8bE MNoA== X-Gm-Message-State: AOAM533UUXihNwqvoIFya31C5qk7hA7nxUyRXpQcFzAbpDuI6dao5bc2 Gw6CK4h8esRMJnyoYL7xRSdbVGaGT/IVgsGhfXK9sPu4Q7M= X-Google-Smtp-Source: ABdhPJy9hHmWKzJFXzIYme7InF3LNa6mlOWRE3U4ucfFu9IyQTGPKPU+vOLb1yhFUQrBIJizQzcBvezfkGJTfQdr3Y8= X-Received: by 2002:a17:902:fe17:b029:da:799a:8bfd with SMTP id g23-20020a170902fe17b02900da799a8bfdmr21079628plj.10.1607432268779; Tue, 08 Dec 2020 04:57:48 -0800 (PST) MIME-Version: 1.0 From: Bharath Rupireddy Date: Tue, 8 Dec 2020 18:27:37 +0530 Message-ID: Subject: New Table Access Methods for Multi and Single Inserts To: PostgreSQL-development , Andres Freund , Luc Vlaming Content-Type: multipart/mixed; boundary="0000000000006257f105b5f37d65" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk --0000000000006257f105b5f37d65 Content-Type: text/plain; charset="UTF-8" Hi, Currently, for any component (such as COPY, CTAS[1], CREATE/REFRESH Mat View[1], INSERT INTO SELECTs[2]) multi insert logic such as buffer slots allocation, maintenance, decision to flush and clean up, need to be implemented outside the table_multi_insert() API. The main problem is that it fails to take into consideration the underlying storage engine capabilities, for more details of this point refer to a discussion in multi inserts in CTAS thread[1]. This also creates a lot of duplicate code which is more error prone and not maintainable. More importantly, in another thread [3] @Andres Freund suggested to have table insert APIs in such a way that they look more like 'scan' APIs i.e. insert_begin, insert, insert_end. The main advantages doing this are(quoting from his statement in [3]) - "more importantly it'd allow an AM to optimize operations across multiple inserts, which is important for column stores." I propose to introduce new table access methods for both multi and single inserts based on the prototype suggested by Andres in [3]. Main design goal of these new APIs is to give flexibility to tableam developers in implementing multi insert logic dependent on the underlying storage engine. Below are the APIs. I suggest to have a look at v1-0001-New-Table-AMs-for-Multi-and-Single-Inserts.patch for details of the new data structure and the API functionality. Note that temporarily I used XX_v2, we can change it later. TableInsertState* table_insert_begin(initial_args); void table_insert_v2(TableInsertState *state, TupleTableSlot *slot); void table_multi_insert_v2(TableInsertState *state, TupleTableSlot *slot); void table_multi_insert_flush(TableInsertState *state); void table_insert_end(TableInsertState *state); I'm attaching a few patches(just to show that these APIs work, avoids a lot of duplicate code and makes life easier). Better commenting can be added later. If these APIs and patches look okay, we can even consider replacing them in other places such as nodeModifyTable.c and so on. v1-0001-New-Table-AMs-for-Multi-and-Single-Inserts.patch ---> introduces new table access methods for multi and single inserts. Also implements/rearranges the outside code for heap am into these new APIs. v1-0002-CTAS-and-REFRESH-Mat-View-With-New-Multi-Insert-Table-AM.patch ---> adds new multi insert table access methods to CREATE TABLE AS, CREATE MATERIALIZED VIEW and REFRESH MATERIALIZED VIEW. v1-0003-ATRewriteTable-With-New-Single-Insert-Table-AM.patch ---> adds new single insert table access method to ALTER TABLE rewrite table code. v1-0004-COPY-With-New-Multi-and-Single-Insert-Table-AM.patch ---> adds new single and multi insert table access method to COPY code. Thoughts? Many thanks to Robert, Vignesh and Dilip for offlist discussion. [1] - https://www.postgresql.org/message-id/4eee0730-f6ec-e72d-3477-561643f4b327%40swarm64.com [2] - https://www.postgresql.org/message-id/20201124020020.GK24052%40telsasoft.com [3] - https://www.postgresql.org/message-id/20200924024128.kyk3r5g7dnu3fxxx%40alap3.anarazel.de With Regards, Bharath Rupireddy. EnterpriseDB: http://www.enterprisedb.com --0000000000006257f105b5f37d65 Content-Type: application/octet-stream; name="v1-0001-New-Table-AMs-for-Multi-and-Single-Inserts.patch" Content-Disposition: attachment; filename="v1-0001-New-Table-AMs-for-Multi-and-Single-Inserts.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kiftb4140 RnJvbSA4ZGQ1NGExMzFkMjc2NTFmMzY1ODdhNzg0ZTBlZWRhZGZkZjRlZTVhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBCaGFyYXRoIFJ1cGlyZWRkeSA8YmhhcmF0aC5ydXBpcmVkZHlA ZW50ZXJwcmlzZWRiLmNvbT4KRGF0ZTogVHVlLCA4IERlYyAyMDIwIDEyOjAyOjMxICswNTMwClN1 YmplY3Q6IFtQQVRDSCB2MV0gTmV3IFRhYmxlIEFNcyBmb3IgTXVsdGkgYW5kIFNpbmdsZSBJbnNl cnRzCgpUaGlzIHBhdGNoIGludHJvZHVjZXMgbmV3IHRhYmxlIGFjY2VzcyBtZXRob2RzIGZvciBt dWx0aSBhbmQKc2luZ2xlIGluc2VydHMuIEFsc28gaW1wbGVtZW50cy9yZWFycmFuZ2VzIHRoZSBv dXRzaWRlIGNvZGUgZm9yCmhlYXAgYW0gaW50byB0aGVzZSBuZXcgQVBJcy4KCk1haW4gZGVzaWdu IGdvYWwgb2YgdGhlc2UgbmV3IEFQSXMgaXMgdG8gZ2l2ZSBmbGV4aWJpbGl0eSB0bwp0YWJsZWFt IGRldmVsb3BlcnMgaW4gaW1wbGVtZW50aW5nIG11bHRpIGluc2VydCBsb2dpYyBkZXBlbmRlbnQg b24KdGhlIHVuZGVybHlpbmcgc3RvcmFnZSBlbmdpbmUuIEN1cnJlbnRseSwgZm9yIGFsbCB0aGUg dW5kZXJseWluZwpzdG9yYWdlIGVuZ2luZXMsIHdlIGZvbGxvdyB0aGUgc2FtZSBtdWx0aSBpbnNl cnQgbG9naWMgc3VjaCBhcyB3aGVuCmFuZCBob3cgdG8gZmx1c2ggdGhlIGJ1ZmZlcmVkIHR1cGxl cywgdHVwbGUgc2l6ZSBjYWxjdWxhdGlvbiwgYW5kCnRoaXMgbG9naWMgZG9lc24ndCB0YWtlIGlu dG8gYWNjb3VudCB0aGUgdW5kZXJseWluZyBzdG9yYWdlIGVuZ2luZQpjYXBhYmlsaXRpZXMuCgpX ZSBjYW4gYWxzbyBhdm9pZCBkdXBsaWNhdGluZyBtdWx0aSBpbnNlcnQgY29kZSAoZm9yIGV4aXN0 aW5nIENPUFksCmFuZCB1cGNvbWluZyBDVEFTLCBDUkVBVEUvUkVGUkVTSCBNQVQgVklFVyBhbmQg SU5TRVJUIFNFTEVDVHMpLiBXZQpjYW4gYWxzbyBtb3ZlIGJ1bGsgaW5zZXJ0IHN0YXRlIGFsbG9j YXRpb24gYW5kIGRlYWxsb2NhdGlvbiBpbnNpZGUKdGhlc2UgQVBJcy4KLS0tCiBzcmMvYmFja2Vu ZC9hY2Nlc3MvaGVhcC9oZWFwYW0uYyAgICAgICAgIHwgMjQ1ICsrKysrKysrKysrKysrKysrKysr KysrCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jIHwgICA1ICsKIHNy Yy9iYWNrZW5kL2FjY2Vzcy90YWJsZS90YWJsZWFtYXBpLmMgICAgfCAgIDcgKwogc3JjL2JhY2tl bmQvZXhlY3V0b3IvZXhlY1R1cGxlcy5jICAgICAgICB8ICA4MyArKysrKysrLQogc3JjL2luY2x1 ZGUvYWNjZXNzL2hlYXBhbS5oICAgICAgICAgICAgICB8ICAxMSArCiBzcmMvaW5jbHVkZS9hY2Nl c3MvdGFibGVhbS5oICAgICAgICAgICAgIHwgMTIwICsrKysrKysrKysrCiBzcmMvaW5jbHVkZS9l eGVjdXRvci90dXB0YWJsZS5oICAgICAgICAgIHwgICAxICsKIDcgZmlsZXMgY2hhbmdlZCwgNDcx IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9h Y2Nlc3MvaGVhcC9oZWFwYW0uYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbS5jCmlu ZGV4IGE5NTgzZjMxMDMuLjQ4YzkzY2NjZTcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vz cy9oZWFwL2hlYXBhbS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbS5jCkBA IC02Niw2ICs2Niw3IEBACiAjaW5jbHVkZSAidXRpbHMvZGF0dW0uaCIKICNpbmNsdWRlICJ1dGls cy9pbnZhbC5oIgogI2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgorI2luY2x1ZGUgInV0aWxz L21lbXV0aWxzLmgiCiAjaW5jbHVkZSAidXRpbHMvcmVsY2FjaGUuaCIKICNpbmNsdWRlICJ1dGls cy9zbmFwbWdyLmgiCiAjaW5jbHVkZSAidXRpbHMvc3BjY2FjaGUuaCIKQEAgLTIzNzEsNiArMjM3 MiwyNTAgQEAgaGVhcF9tdWx0aV9pbnNlcnQoUmVsYXRpb24gcmVsYXRpb24sIFR1cGxlVGFibGVT bG90ICoqc2xvdHMsIGludCBudHVwbGVzLAogCXBnc3RhdF9jb3VudF9oZWFwX2luc2VydChyZWxh dGlvbiwgbnR1cGxlcyk7CiB9CiAKKy8qCisgKiBBbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBUYWJs ZUluc2VydFN0YXRlLgorICoKKyAqIElmIGFsbG9jX2Jpc3RhdGUgaXMgdHJ1ZSwgdGhlbiBidWxr IGluc2VydCBzdGF0ZSBpcyBhbGxvY2F0ZWQsIG90aGVyd2lzZSBub3QKKyAqCisgKiBGb3Igc2lu Z2xlIGluc2VydHM6CisgKiAgMSkgU3BlY2lmeSBhbGxvY19iaXN0YXRlIGFzIGZhbHNlLCB0aGVu IG11bHRpIGluc2VydCBzdGF0ZSBpcyBOVUxMLgorICogIDIpIG1pX21heF9zbG90cyBhbmQgbWlf bWF4X3NpemUgYXJlIGlnbm9yZWQsIGJ1dCBnb29kIHRvIHNwZWNpZnkgbmVnYXRpdmUKKyAqIAkg ICB2YWx1ZXMuCisgKgorICogRm9yIG11bHRpIGluc2VydHM6CisgKiAgMSkgU3BlY2lmeSBpc19t dWx0aSBhcyB0cnVlLCB0aGVuIG11bHRpIGluc2VydCBzdGF0ZSBpcyBhbGxjb2F0ZWQuCisgKiAg MikgU3BlY2lmeSBtaV9tYXhfc2xvdHMgPiAwIGkuZS4gdGhlIG51bWJlciBvZiBzbG90cyB0byBi dWZmZXIuCisgKiAJICAgbWlfbWF4X3Nsb3RzIDw9IDAgaXMgaW52YWxpZC4KKyAqICAzKSBTcGVj aWZ5IG1pX21heF9zaXplID4gMCBpLmUuIHRoZSB0b3RhbCB0dXBsZSBzaXplIChpbiBieXRlcykg dGhlCisgKiAJICAgYnVmZmVyZWQgc2xvdHMgY2FuIGhvbGQgdW50aWwgZmx1c2guCisgKiAgNCkg Rmx1c2ggdGhlIGJ1ZmZlcnMgZWl0aGVyIGlmIGFsbCB0aGUgbWlfbWF4X3Nsb3RzIGFyZSBmaWxs ZWQgb3IgaWYgdGhlCisgKiAJICAgdG90YWwgdHVwbGUgc2l6ZSBvZiB0aGUgc28gZmFyIGJ1ZmZl cmVkIHNsb3RzIGlzID49IG1pX21heF9zaXplLiBJZgorICoJICAgbWlfbWF4X3NpemUgPD0gMCwg dGhlbiBmbHVzaCB0aGUgYnVmZmVycyBvbmx5IHdoZW4gYWxsIHRoZSBtaV9tYXhfc2xvdHMKKyAq CSAgIGFyZSBmaWxsZWQuCisgKgorICogIE90aGVyIGlucHV0IHBhcmFtZXRlcnMgaS5lLiByZWxh dGlvbiwgY29tbWFuZCBpZCwgb3B0aW9ucyBhcmUgY29tbW9uIGZvcgorICogIGJvdGggc2luZ2xl IGFuZCBtdWx0aSBpbnNlcnRzLgorICovCitUYWJsZUluc2VydFN0YXRlKiBoZWFwX2luc2VydF9i ZWdpbihSZWxhdGlvbiByZWwsIENvbW1hbmRJZCBjaWQsIGludCBvcHRpb25zLAorCQkJCQkJCQkJ Ym9vbCBhbGxvY19iaXN0YXRlLCBib29sIGlzX211bHRpLAorCQkJCQkJCQkJaW50MzIgbWlfbWF4 X3Nsb3RzLCBpbnQ2NCBtaV9tYXhfc2l6ZSkKK3sKKwlUYWJsZUluc2VydFN0YXRlICpzdGF0ZSA9 IE5VTEw7CisKKwlzdGF0ZSA9IHBhbGxvYzAoc2l6ZW9mKFRhYmxlSW5zZXJ0U3RhdGUpKTsKKwor CXN0YXRlLT5yZWwgPSByZWw7CisJc3RhdGUtPmNpZCA9IGNpZDsKKwlzdGF0ZS0+b3B0aW9ucyA9 IG9wdGlvbnM7CisKKwlpZiAoYWxsb2NfYmlzdGF0ZSkKKwkJc3RhdGUtPmJpc3RhdGUgPSBHZXRC dWxrSW5zZXJ0U3RhdGUoKTsKKwllbHNlCisJCXN0YXRlLT5iaXN0YXRlID0gTlVMTDsKKworCWlm IChpc19tdWx0aSkKKwl7CisJCWlmIChtaV9tYXhfc2xvdHMgPiAwKQorCQl7CisJCQlzdGF0ZS0+ bWlzdGF0ZSA9IHBhbGxvYzAoc2l6ZW9mKFRhYmxlTXVsdGlJbnNlcnRTdGF0ZSkpOworCQkJc3Rh dGUtPm1pc3RhdGUtPnNsb3RzID0KKwkJCQkJCQlwYWxsb2MwKHNpemVvZihUdXBsZVRhYmxlU2xv dCAqKSAqIG1pX21heF9zbG90cyk7CisJCQlzdGF0ZS0+bWlzdGF0ZS0+bWF4X3Nsb3RzID0gbWlf bWF4X3Nsb3RzOworCQkJc3RhdGUtPm1pc3RhdGUtPm1heF9zaXplID0gbWlfbWF4X3NpemU7CisJ CQlzdGF0ZS0+bWlzdGF0ZS0+Y3VyX3Nsb3RzID0gMDsKKwkJCXN0YXRlLT5taXN0YXRlLT5jdXJf c2l6ZSA9IDA7CisJCQlzdGF0ZS0+bWlzdGF0ZS0+Y3VyX3R1cF9zaXplID0gLTE7CisJCQlzdGF0 ZS0+bWlzdGF0ZS0+Y2xlYXJfc2xvdHMgPSB0cnVlOworCQkJc3RhdGUtPm1pc3RhdGUtPmZsdXNo ZWQJPSBmYWxzZTsKKworCQkJLyoKKwkJCSAqIENyZWF0ZSBhIHRlbXBvcmFyeSBtZW1vcnkgY29u dGV4dCBzbyB0aGF0IHdlIGNhbiByZXNldCBvbmNlIHBlcgorCQkJICogbXVsdGkgaW5zZXJ0IGJh dGNoLgorCQkJICovCisJCQlzdGF0ZS0+bWlzdGF0ZS0+Y29udGV4dCA9CisJCQkJCQkJQWxsb2NT ZXRDb250ZXh0Q3JlYXRlKEN1cnJlbnRNZW1vcnlDb250ZXh0LAorCQkJCQkJCQkJCQkJICAiaGVh cF9tdWx0aV9pbnNlcnQiLAorCQkJCQkJCQkJCQkJICBBTExPQ1NFVF9ERUZBVUxUX1NJWkVTKTsK KwkJfQorCQllbHNlCisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX0lO VkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJIGVycm1zZygiaW52YWxpZCBudW1iZXIgb2Yg c2xvdHMgc3BlY2lmaWVkIGZvciBoZWFwIG11bHRpIGluc2VydHMiKSkpOworCX0KKwllbHNlCisJ CXN0YXRlLT5taXN0YXRlID0gTlVMTDsKKworCXJldHVybiBzdGF0ZTsKK30KKworLyogSW5zZXJ0 IGEgdHVwbGUgZnJvbSBhIHNsb3QgaW50byB0YWJsZSBBTSByb3V0aW5lLiAqLwordm9pZCBoZWFw X2luc2VydF92MihUYWJsZUluc2VydFN0YXRlICpzdGF0ZSwgVHVwbGVUYWJsZVNsb3QgKnNsb3Qp Cit7CisJYm9vbAkJc2hvdWxkRnJlZSA9IHRydWU7CisJSGVhcFR1cGxlCXR1cGxlID0gRXhlY0Zl dGNoU2xvdEhlYXBUdXBsZShzbG90LCB0cnVlLCAmc2hvdWxkRnJlZSk7CisKKwkvKiBVcGRhdGUg dGhlIHR1cGxlIHdpdGggdGFibGUgb2lkICovCisJc2xvdC0+dHRzX3RhYmxlT2lkID0gUmVsYXRp b25HZXRSZWxpZChzdGF0ZS0+cmVsKTsKKwl0dXBsZS0+dF90YWJsZU9pZCA9IHNsb3QtPnR0c190 YWJsZU9pZDsKKworCS8qIFBlcmZvcm0gdGhlIGluc2VydGlvbiwgYW5kIGNvcHkgdGhlIHJlc3Vs dGluZyBJdGVtUG9pbnRlciAqLworCWhlYXBfaW5zZXJ0KHN0YXRlLT5yZWwsIHR1cGxlLCBzdGF0 ZS0+Y2lkLCBzdGF0ZS0+b3B0aW9ucywgc3RhdGUtPmJpc3RhdGUpOworCUl0ZW1Qb2ludGVyQ29w eSgmdHVwbGUtPnRfc2VsZiwgJnNsb3QtPnR0c190aWQpOworCisJaWYgKHNob3VsZEZyZWUpCisJ CXBmcmVlKHR1cGxlKTsKK30KKworLyoKKyAqIEJ1ZmZlciB0aGUgaW5wdXQgc2xvdHMgYW5kIGlu c2VydCB0aGUgdHVwbGVzIGZyb20gdGhlIGJ1ZmZlcmVkIHNsb3RzIGF0IGEKKyAqIHRpbWUgaW50 byBhIHRhYmxlLgorICoKKyAqIENvbXB1dGUgdGhlIHNpemUgb2YgdGhlIHR1cGxlIG9ubHkgaWYg bWlfbWF4X3NpemUgaS5lLiB0aGUgdG90YWwgdHVwbGUgc2l6ZQorICogKGluIGJ5dGVzKSB0aGUg YnVmZmVyZWQgc2xvdHMgY2FuIGhvbGQgdW50aWwgZmx1c2ggaXMgc3BlY2lmaWVkIGFuZCB0aGUK KyAqIGN1cnJlbnQgdHVwbGUgc2l6ZSBpLmUuIGN1cl90dXBfc2l6ZSBpcyBub3Qga25vd24uCisg KgorICogRmx1c2ggdGhlIHR1cGxlcyBmcm9tIHRoZSBidWZmZXJlZCBzbG90cyBpbnRvIHRoZSB0 YWJsZToKKyAqICAxKSBlaXRoZXIgaWYgYWxsIHRoZSBzbG90cyBhcmUgZmlsbGVkIHVwCisgKiAg Mikgb3IgaWYgdGhlIG1pX21heF9zaXplIGlzIHNwZWNpZmllZCBhbmQgdGhlIHRvdGFsIHR1cGxl IHNpemUgb2YgdGhlCisgKiAJICAgY3VycmVudGx5IGJ1ZmZlcmVkIHNsb3RzIGFyZSA+PSBtaV9t YXhfc2l6ZS4KKyAqLwordm9pZCBoZWFwX211bHRpX2luc2VydF92MihUYWJsZUluc2VydFN0YXRl ICpzdGF0ZSwgVHVwbGVUYWJsZVNsb3QgKnNsb3QpCit7CisJVHVwbGVUYWJsZVNsb3QgICpiYXRj aHNsb3Q7CisKKwlBc3NlcnQoc3RhdGUtPm1pc3RhdGUgIT0gTlVMTCk7CisJQXNzZXJ0KHN0YXRl LT5taXN0YXRlLT5zbG90cyAhPSBOVUxMKTsKKworCWlmIChzdGF0ZS0+bWlzdGF0ZS0+c2xvdHNb c3RhdGUtPm1pc3RhdGUtPmN1cl9zbG90c10gPT0gTlVMTCkKKwkJc3RhdGUtPm1pc3RhdGUtPnNs b3RzW3N0YXRlLT5taXN0YXRlLT5jdXJfc2xvdHNdID0KKwkJCQkJCQkJCQl0YWJsZV9zbG90X2Ny ZWF0ZShzdGF0ZS0+cmVsLCBOVUxMKTsKKworCWJhdGNoc2xvdCA9IHN0YXRlLT5taXN0YXRlLT5z bG90c1tzdGF0ZS0+bWlzdGF0ZS0+Y3VyX3Nsb3RzXTsKKworCUV4ZWNDb3B5U2xvdChiYXRjaHNs b3QsIHNsb3QpOworCisJLyogUmVzZXQgdGhlIGZsdXNoIHN0YXRlIGlmIHByZXZpb3VzbHkgc2V0 LiAqLworCWlmIChzdGF0ZS0+bWlzdGF0ZS0+Zmx1c2hlZCkKKwkJc3RhdGUtPm1pc3RhdGUtPmZs dXNoZWQgPSBmYWxzZTsKKworCS8qIENvbXB1dGUgdGhlIHR1cGxlIHNpemUgb25seSBpZiBhc2tl ZCB0byBkbyBzby4gKi8KKwlpZiAoc3RhdGUtPm1pc3RhdGUtPm1heF9zaXplID4gMCAmJiBzdGF0 ZS0+bWlzdGF0ZS0+Y3VyX3R1cF9zaXplIDw9IDApCisJeworCQkvKiBXZSBhcmUgaGVyZSB3aGVu IHRoZSB0dXBsZSBzaXplIGlzIG5vdCBrbm93biBpbiB0aGUgY2FsbGVyLiAqLworCQlTaXplIHN6 OworCisJCS8qCisJCSAqIENhbGN1bGF0ZSB0aGUgdHVwbGUgc2l6ZSBhZnRlciB0aGUgb3JpZ2lu YWwgc2xvdCBpcyBjb3BpZWQuIEJlY2F1c2UKKwkJICogdGhlIGNvcGllZCBzbG90IHR5cGUgYW5k IHRoZSB0dXBsZSBzaXplIG1heSBjaGFuZ2UuCisJCSAqLworCQlzeiA9IEdldFR1cGxlU2l6ZShi YXRjaHNsb3QsIHN0YXRlLT5taXN0YXRlLT5tYXhfc2l6ZSk7CisKKwkJc3RhdGUtPm1pc3RhdGUt PmN1cl9zbG90cysrOworCQlzdGF0ZS0+bWlzdGF0ZS0+Y3VyX3NpemUgKz0gc3o7CisKKwl9CisJ ZWxzZSBpZiAoc3RhdGUtPm1pc3RhdGUtPm1heF9zaXplID4gMCAmJiBzdGF0ZS0+bWlzdGF0ZS0+ Y3VyX3R1cF9zaXplID4gMCkKKwl7CisJCS8qIFR1cGxlIHNpemUgaXMga25vd24gaW4gdGhlIGNh bGxlciwganVzdCB1c2UgYW5kIHJlc2V0IGl0LiAqLworCQlzdGF0ZS0+bWlzdGF0ZS0+Y3VyX3Ns b3RzKys7CisJCXN0YXRlLT5taXN0YXRlLT5jdXJfc2l6ZSArPSBzdGF0ZS0+bWlzdGF0ZS0+Y3Vy X3R1cF9zaXplOworCQlzdGF0ZS0+bWlzdGF0ZS0+Y3VyX3R1cF9zaXplID0gLTE7CisJfQorCisJ aWYgKHN0YXRlLT5taXN0YXRlLT5jdXJfc2xvdHMgPj0gc3RhdGUtPm1pc3RhdGUtPm1heF9zbG90 cyB8fAorCQlzdGF0ZS0+bWlzdGF0ZS0+Y3VyX3NpemUgPj0gc3RhdGUtPm1pc3RhdGUtPm1heF9z aXplKQorCXsKKwkJaGVhcF9tdWx0aV9pbnNlcnRfZmx1c2goc3RhdGUpOworCX0KK30KKworLyoK KyAqIEZsdXNoIHRoZSB0dXBsZXMgZnJvbSBidWZmZXJlZCBzbG90cyBpZiBhbnkuCisgKgorICog VGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZnVsIGluIGNhc2VzLCB3aGVyZSBvbmUgb2YgdGhlIHBh cnRpdGlvbiBjYW4gbm90IHVzZQorICogbXVsdGkgaW5zZXJ0cyBidXQgb3RoZXJzIGNhbiBhbmQg dGhleSBoYXZlIGJ1ZmZlcmVkIGZldyBzbG90cyBzbyBmYXIsIHdoaWNoCisgKiBuZWVkIHRvIGJl IGZsdXNoZWQgZm9yIHZpc2liaWxpdHksIGJlZm9yZSB0aGUgcGFydGl0aW9uIHRoYXQgZG9lc24n dCBzdXBwb3J0CisgKiBjYW4gcHJvY2VlZCB3aXRoIHNpbmdsZSBpbnNlcnRzLgorICovCit2b2lk IGhlYXBfbXVsdGlfaW5zZXJ0X2ZsdXNoKFRhYmxlSW5zZXJ0U3RhdGUgKnN0YXRlKQoreworCUFz c2VydChzdGF0ZS0+bWlzdGF0ZSAhPSBOVUxMKTsKKworCWlmIChzdGF0ZS0+bWlzdGF0ZS0+Y3Vy X3Nsb3RzID4gMCkKKwl7CisJCU1lbW9yeUNvbnRleHQgb2xkY29udGV4dDsKKworCQlvbGRjb250 ZXh0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKHN0YXRlLT5taXN0YXRlLT5jb250ZXh0KTsKKwor CQloZWFwX211bHRpX2luc2VydChzdGF0ZS0+cmVsLCBzdGF0ZS0+bWlzdGF0ZS0+c2xvdHMsCisJ CQkJCQlzdGF0ZS0+bWlzdGF0ZS0+Y3VyX3Nsb3RzLCBzdGF0ZS0+Y2lkLAorCQkJCQkJc3RhdGUt Pm9wdGlvbnMsIHN0YXRlLT5iaXN0YXRlKTsKKworCQlNZW1vcnlDb250ZXh0UmVzZXQoc3RhdGUt Pm1pc3RhdGUtPmNvbnRleHQpOworCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7 CisKKwkJLyoKKwkJICogRG8gbm90IGNsZWFyIHRoZSBzbG90cyBhbHdheXMuIFNvbWV0aW1lcyBj YWxsZXJzIG1heSB3YW50IHRoZSBzbG90cworCQkgKiBmb3IgaW5kZXggaW5zZXJ0aW9ucyBvciBh ZnRlciByb3cgdHJpZ2dlciBleGVjdXRpb25zIGluIHdoaWNoIGNhc2UKKwkJICogdGhleSBoYXZl IHRvIGNsZWFyIHRoZSB0dXBsZXMgYmVmb3JlIHVzaW5nIGZvciB0aGUgbmV4dCBpbnNlcnQKKwkJ ICogYmF0Y2guCisJCSAqLworCQlpZiAoc3RhdGUtPm1pc3RhdGUtPmNsZWFyX3Nsb3RzKQorCQl7 CisJCQlpbnQgaTsKKworCQkJZm9yIChpID0gMDsgaSA8IHN0YXRlLT5taXN0YXRlLT5jdXJfc2xv dHM7IGkrKykKKwkJCQlFeGVjQ2xlYXJUdXBsZShzdGF0ZS0+bWlzdGF0ZS0+c2xvdHNbaV0pOwor CQl9CisKKwkJc3RhdGUtPm1pc3RhdGUtPmN1cl9zbG90cyA9IDA7CisJCXN0YXRlLT5taXN0YXRl LT5jdXJfc2l6ZSA9IDA7CisJCXN0YXRlLT5taXN0YXRlLT5jdXJfdHVwX3NpemUgPSAtMTsKKwkJ c3RhdGUtPm1pc3RhdGUtPmZsdXNoZWQgPSB0cnVlOworCX0KKwllbHNlCisJCXN0YXRlLT5taXN0 YXRlLT5mbHVzaGVkID0gZmFsc2U7Cit9CisKKy8qCisgKiBDbGVhbiB1cCB0aGUgVGFibGVJbnNl cnRTdGF0ZS4KKyAqCisgKiBGb3IgbXVsdGkgaW5zZXJ0cywgZW5zdXJlIHRvIGZsdXNoIGFsbCB0 aGUgcmVtYWluaW5nIGJ1ZmZlcnMgd2l0aAorICogaGVhcF9tdWx0aV9pbnNlcnRfZmx1c2ggYmVm b3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4gQnVmZmVyZWQgc2xvdHMgYXJlCisgKiBkcm9wcGVk LCBzaG9ydC1saXZlZCBtZW1vcnkgY29udGV4dCBpcyBkZWx0ZWQgYW5kIG1pc3RhdGUgaXMgZnJl ZWQgdXAuCisgKgorICogRnJlZSB1cCB0aGUgYnVsayBpbnNlcnQgc3RhdGUgdXNpbmcgRnJlZUJ1 bGtJbnNlcnRTdGF0ZSgpIGlmIGV4aXN0cy4KKyAqCisgKiBGcmVlIHVwIFRhYmxlSW5zZXJ0U3Rh dGUuCisgKi8KK3ZvaWQgaGVhcF9pbnNlcnRfZW5kKFRhYmxlSW5zZXJ0U3RhdGUgKnN0YXRlKQor eworCWlmIChzdGF0ZS0+bWlzdGF0ZSkKKwl7CisJCWludCBpOworCisJCS8qCisJCSAqIEVuc3Vy ZSB0byBmbHVzaCBhbGwgdGhlIHJlbWFpbmluZyBidWZmZXJzIHdpdGgKKwkJICogaGVhcF9tdWx0 aV9pbnNlcnRfZmx1c2ggYmVmb3JlIGNhbGxpbmcgaGVhcF9pbnNlcnRfZW5kLgorCQkgKi8KKwkJ QXNzZXJ0KHN0YXRlLT5taXN0YXRlLT5jdXJfc2xvdHMgPT0gMCk7CisKKwkJZm9yIChpID0gMDsg aSA8IHN0YXRlLT5taXN0YXRlLT5tYXhfc2xvdHMgJiYgc3RhdGUtPm1pc3RhdGUtPnNsb3RzW2ld ICE9IE5VTEw7IGkrKykKKwkJCUV4ZWNEcm9wU2luZ2xlVHVwbGVUYWJsZVNsb3Qoc3RhdGUtPm1p c3RhdGUtPnNsb3RzW2ldKTsKKworCQlpZiAoc3RhdGUtPm1pc3RhdGUtPmNvbnRleHQpCisJCQlN ZW1vcnlDb250ZXh0RGVsZXRlKHN0YXRlLT5taXN0YXRlLT5jb250ZXh0KTsKKworCQlwZnJlZShz dGF0ZS0+bWlzdGF0ZS0+c2xvdHMpOworCQlwZnJlZShzdGF0ZS0+bWlzdGF0ZSk7CisJfQorCisJ aWYgKHN0YXRlLT5iaXN0YXRlKQorCQlGcmVlQnVsa0luc2VydFN0YXRlKHN0YXRlLT5iaXN0YXRl KTsKKworCXBmcmVlKHN0YXRlKTsKK30KKwogLyoKICAqCXNpbXBsZV9oZWFwX2luc2VydCAtIGlu c2VydCBhIHR1cGxlCiAgKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVh cGFtX2hhbmRsZXIuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMK aW5kZXggM2VlYTIxNWI4NS4uZWIzZGExMmQ5YyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNj ZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9o ZWFwYW1faGFuZGxlci5jCkBAIC0yNTU0LDYgKzI1NTQsMTEgQEAgc3RhdGljIGNvbnN0IFRhYmxl QW1Sb3V0aW5lIGhlYXBhbV9tZXRob2RzID0gewogCS50dXBsZV9pbnNlcnRfc3BlY3VsYXRpdmUg PSBoZWFwYW1fdHVwbGVfaW5zZXJ0X3NwZWN1bGF0aXZlLAogCS50dXBsZV9jb21wbGV0ZV9zcGVj dWxhdGl2ZSA9IGhlYXBhbV90dXBsZV9jb21wbGV0ZV9zcGVjdWxhdGl2ZSwKIAkubXVsdGlfaW5z ZXJ0ID0gaGVhcF9tdWx0aV9pbnNlcnQsCisJLnR1cGxlX2luc2VydF9iZWdpbiA9IGhlYXBfaW5z ZXJ0X2JlZ2luLAorCS50dXBsZV9pbnNlcnRfdjIgPSBoZWFwX2luc2VydF92MiwKKwkubXVsdGlf aW5zZXJ0X3YyID0gaGVhcF9tdWx0aV9pbnNlcnRfdjIsCisJLm11bHRpX2luc2VydF9mbHVzaCA9 IGhlYXBfbXVsdGlfaW5zZXJ0X2ZsdXNoLAorCS50dXBsZV9pbnNlcnRfZW5kID0gaGVhcF9pbnNl cnRfZW5kLAogCS50dXBsZV9kZWxldGUgPSBoZWFwYW1fdHVwbGVfZGVsZXRlLAogCS50dXBsZV91 cGRhdGUgPSBoZWFwYW1fdHVwbGVfdXBkYXRlLAogCS50dXBsZV9sb2NrID0gaGVhcGFtX3R1cGxl X2xvY2ssCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdGFibGUvdGFibGVhbWFwaS5j IGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RhYmxlL3RhYmxlYW1hcGkuYwppbmRleCA1OGRlMDc0M2Jh Li42YmVjMDY1OWU0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdGFibGUvdGFibGVh bWFwaS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90YWJsZS90YWJsZWFtYXBpLmMKQEAgLTc4 LDYgKzc4LDEzIEBAIEdldFRhYmxlQW1Sb3V0aW5lKE9pZCBhbWhhbmRsZXIpCiAJQXNzZXJ0KHJv dXRpbmUtPnR1cGxlX2NvbXBsZXRlX3NwZWN1bGF0aXZlICE9IE5VTEwpOwogCiAJQXNzZXJ0KHJv dXRpbmUtPm11bHRpX2luc2VydCAhPSBOVUxMKTsKKworCUFzc2VydChyb3V0aW5lLT50dXBsZV9p bnNlcnRfYmVnaW4gIT0gTlVMTCk7CisJQXNzZXJ0KHJvdXRpbmUtPnR1cGxlX2luc2VydF92MiAh PSBOVUxMKTsKKwlBc3NlcnQocm91dGluZS0+bXVsdGlfaW5zZXJ0X3YyICE9IE5VTEwpOworCUFz c2VydChyb3V0aW5lLT5tdWx0aV9pbnNlcnRfZmx1c2ggIT0gTlVMTCk7CisJQXNzZXJ0KHJvdXRp bmUtPnR1cGxlX2luc2VydF9lbmQgIT0gTlVMTCk7CisKIAlBc3NlcnQocm91dGluZS0+dHVwbGVf ZGVsZXRlICE9IE5VTEwpOwogCUFzc2VydChyb3V0aW5lLT50dXBsZV91cGRhdGUgIT0gTlVMTCk7 CiAJQXNzZXJ0KHJvdXRpbmUtPnR1cGxlX2xvY2sgIT0gTlVMTCk7CmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9leGVjdXRvci9leGVjVHVwbGVzLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVj VHVwbGVzLmMKaW5kZXggNGM5MGFjNTIzNi4uZjkzYjFhNDlhOCAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvZXhlY3V0b3IvZXhlY1R1cGxlcy5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4 ZWNUdXBsZXMuYwpAQCAtMTU5LDcgKzE1OSwxMSBAQCB0dHNfdmlydHVhbF9tYXRlcmlhbGl6ZShU dXBsZVRhYmxlU2xvdCAqc2xvdCkKIAlpZiAoVFRTX1NIT1VMREZSRUUoc2xvdCkpCiAJCXJldHVy bjsKIAotCS8qIGNvbXB1dGUgc2l6ZSBvZiBtZW1vcnkgcmVxdWlyZWQgKi8KKwkvKgorCSAqIENv bXB1dGUgc2l6ZSBvZiBtZW1vcnkgcmVxdWlyZWQuIFRoaXMgc2l6ZSBjYWxjdWxhdGlvbiBjb2Rl IGlzIGFsc28KKwkgKiBiZWluZyB1c2VkIGluIEdldFR1cGxlU2l6ZSgpLCBoZW5jZSBlbnN1cmUg dG8gaGF2ZSB0aGUgc2FtZSBjaGFuZ2VzIG9yCisJICogZml4ZXMgaGVyZSBhbmQgYWxzbyB0aGVy ZS4KKwkgKi8KIAlmb3IgKGludCBuYXR0ID0gMDsgbmF0dCA8IGRlc2MtPm5hdHRzOyBuYXR0Kysp CiAJewogCQlGb3JtX3BnX2F0dHJpYnV0ZSBhdHQgPSBUdXBsZURlc2NBdHRyKGRlc2MsIG5hdHQp OwpAQCAtMTIzOSw2ICsxMjQzLDgzIEBAIEV4ZWNEcm9wU2luZ2xlVHVwbGVUYWJsZVNsb3QoVHVw bGVUYWJsZVNsb3QgKnNsb3QpCiAJcGZyZWUoc2xvdCk7CiB9CiAKKy8qCisgKiBHZXRUdXBsZVNp emUgLSBDb21wdXRlIHRoZSB0dXBsZSBzaXplIGdpdmVuIGEgdGFibGUgc2xvdC4KKyAqCisgKiBG b3IgaGVhcCB0dXBsZSwgYnVmZmVyIHR1cGxlIGFuZCBtaW5pbWFsIHR1cGxlIHNsb3QgdHlwZXMg cmV0dXJuIHRoZSBhY3R1YWwKKyAqIHR1cGxlIHNpemUgdGhhdCBleGlzdHMuIEZvciB2aXJ0dWFs IHR1cGxlLCB0aGUgc2l6ZSBpcyBjYWxjdWxhdGVkIGFzIHRoZQorICogc2xvdCBkb2VzIG5vdCBo YXZlIHRoZSB0dXBsZSBzaXplLiBJZiB0aGUgY29tcHV0ZWQgc2l6ZSBleGNlZWRzIHRoZSBnaXZl bgorICogbWF4c2l6ZSBmb3IgdGhlIHZpcnR1YWwgdHVwbGUsIHRoaXMgZnVuY3Rpb24gZXhpdHMs IG5vdCBpbnZlc3RpbmcgdGltZSBpbgorICogZnVydGhlciB1bm5lY2Vzc2FyeSBjYWxjdWxhdGlv bi4KKyAqCisgKiBJbXBvcnRhbnQgTm90ZXM6CisgKiAxKSBTaXplIGNhbGN1bGF0aW9uIGNvZGUg Zm9yIHZpcnR1YWwgc2xvdHMgaXMgYmVpbmcgdXNlZCBmcm9tCisgKiAJICB0dHNfdmlydHVhbF9t YXRlcmlhbGl6ZSgpLCBoZW5jZSBlbnN1cmUgdG8gaGF2ZSB0aGUgc2FtZSBjaGFuZ2VzIG9yIGZp eGVzCisgKiAJICBoZXJlIGFuZCBhbHNvIHRoZXJlLgorICogMikgQ3VycmVudGx5LCBHZXRUdXBs ZVNpemUoKSBoYW5kbGVzIHRoZSBleGlzdGluZyBoZWFwLCBidWZmZXIsIG1pbm1hbCBhbmQKKyAq IAkgIHZpcnR1YWwgc2xvdHMuIEVuc3VyZSB0byBhZGQgcmVsYXRlZCBjb2RlIGluIGNhc2UgYW55 IG5ldyBzbG90IHR5cGUgaXMKKyAqICAgIGludHJvZHVjZWQuCisgKi8KK2lubGluZSBTaXplCitH ZXRUdXBsZVNpemUoVHVwbGVUYWJsZVNsb3QgKnNsb3QsIFNpemUgbWF4c2l6ZSkKK3sKKwlTaXpl IHN6ID0gMDsKKwlIZWFwVHVwbGUgdHVwbGUgPSBOVUxMOworCisJaWYgKFRUU19JU19IRUFQVFVQ TEUoc2xvdCkpCisJCXR1cGxlID0gKChIZWFwVHVwbGVUYWJsZVNsb3QgKikgc2xvdCktPnR1cGxl OworCWVsc2UgaWYoVFRTX0lTX0JVRkZFUlRVUExFKHNsb3QpKQorCQl0dXBsZSA9ICgoQnVmZmVy SGVhcFR1cGxlVGFibGVTbG90ICopIHNsb3QpLT5iYXNlLnR1cGxlOworCWVsc2UgaWYoVFRTX0lT X01JTklNQUxUVVBMRShzbG90KSkKKwkJdHVwbGUgPSAoKE1pbmltYWxUdXBsZVRhYmxlU2xvdCAq KSBzbG90KS0+dHVwbGU7CisJZWxzZSBpZihUVFNfSVNfVklSVFVBTChzbG90KSkKKwl7CisJCS8q CisJCSAqIFNpemUgY2FsY3VsYXRpb24gY29kZSBpcyBiZWluZyB1c2VkIGZyb20gdHRzX3ZpcnR1 YWxfbWF0ZXJpYWxpemUoKS4KKwkJICogRW5zdXJlIHRvIGhhdmUgdGhlIHNhbWUgY2hhbmdlcyBv ciBmaXhlcyBoZXJlIGFuZCBhbHNvIGluCisJCSAqIHR0c192aXJ0dWFsX21hdGVyaWFsaXplKCku CisJCSAqLworCQlUdXBsZURlc2MJZGVzYyA9IHNsb3QtPnR0c190dXBsZURlc2NyaXB0b3I7CisK KwkJZm9yIChpbnQgbmF0dCA9IDA7IG5hdHQgPCBkZXNjLT5uYXR0czsgbmF0dCsrKQorCQl7CisJ CQlGb3JtX3BnX2F0dHJpYnV0ZSBhdHQgPSBUdXBsZURlc2NBdHRyKGRlc2MsIG5hdHQpOworCQkJ RGF0dW0JCXZhbDsKKworCQkJaWYgKGF0dC0+YXR0Ynl2YWwpCisJCQkJc3ogKz0gYXR0LT5hdHRs ZW47CisKKwkJCWlmIChzbG90LT50dHNfaXNudWxsW25hdHRdKQorCQkJCWNvbnRpbnVlOworCisJ CQl2YWwgPSBzbG90LT50dHNfdmFsdWVzW25hdHRdOworCisJCQlpZiAoYXR0LT5hdHRsZW4gPT0g LTEgJiYKKwkJCQlWQVJBVFRfSVNfRVhURVJOQUxfRVhQQU5ERUQoRGF0dW1HZXRQb2ludGVyKHZh bCkpKQorCQkJeworCQkJCXN6ID0gYXR0X2FsaWduX25vbWluYWwoc3osIGF0dC0+YXR0YWxpZ24p OworCQkJCXN6ICs9IEVPSF9nZXRfZmxhdF9zaXplKERhdHVtR2V0RU9IUCh2YWwpKTsKKwkJCX0K KwkJCWVsc2UKKwkJCXsKKwkJCQlzeiA9IGF0dF9hbGlnbl9ub21pbmFsKHN6LCBhdHQtPmF0dGFs aWduKTsKKwkJCQlzeiA9IGF0dF9hZGRsZW5ndGhfZGF0dW0oc3osIGF0dC0+YXR0bGVuLCB2YWwp OworCQkJfQorCisJCQkvKgorCQkJICogV2UgYXJlIG5vdCBpbnRlcmVzdGVkIGluIHByb2NlZWRp bmcgZnVydGhlciBpZiB0aGUgY29tcHV0ZWQgc2l6ZQorCQkJICogY3Jvc3NlcyBtYXhzaXplIGxp bWl0IHRoYXQgd2UgYXJlIGxvb2tpbmcgZm9yLgorCQkJICovCisJCQlpZiAobWF4c2l6ZSAhPSAw ICYmIHN6ID49IG1heHNpemUpCisJCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAodHVwbGUgIT0g TlVMTCAmJiAhVFRTX0lTX1ZJUlRVQUwoc2xvdCkpCisJCXN6ID0gdHVwbGUtPnRfbGVuOworCisJ cmV0dXJuIHN6OworfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKgkJCQkgIHR1cGxlIHRhYmxlIHNsb3QgYWNj ZXNzb3IgZnVuY3Rpb25zCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgg Yi9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgKaW5kZXggNTRiMmViNzM3OC4uZDkzOGVmYmJj NSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oCisrKyBiL3NyYy9pbmNs dWRlL2FjY2Vzcy9oZWFwYW0uaApAQCAtMTM5LDYgKzEzOSwxNyBAQCBleHRlcm4gdm9pZCBoZWFw X2luc2VydChSZWxhdGlvbiByZWxhdGlvbiwgSGVhcFR1cGxlIHR1cCwgQ29tbWFuZElkIGNpZCwK IGV4dGVybiB2b2lkIGhlYXBfbXVsdGlfaW5zZXJ0KFJlbGF0aW9uIHJlbGF0aW9uLCBzdHJ1Y3Qg VHVwbGVUYWJsZVNsb3QgKipzbG90cywKIAkJCQkJCQkgIGludCBudHVwbGVzLCBDb21tYW5kSWQg Y2lkLCBpbnQgb3B0aW9ucywKIAkJCQkJCQkgIEJ1bGtJbnNlcnRTdGF0ZSBiaXN0YXRlKTsKKwor ZXh0ZXJuIFRhYmxlSW5zZXJ0U3RhdGUqIGhlYXBfaW5zZXJ0X2JlZ2luKFJlbGF0aW9uIHJlbCwg Q29tbWFuZElkIGNpZCwKKwkJCQkJCQkJCQkgICBpbnQgb3B0aW9ucywgYm9vbCBhbGxvY19iaXN0 YXRlLAorCQkJCQkJCQkJCSAgIGJvb2wgaXNfbXVsdGksIGludDMyIG1pX21heF9zbG90cywKKwkJ CQkJCQkJCQkgICBpbnQ2NCBtaV9tYXhfc2l6ZSk7CitleHRlcm4gdm9pZCBoZWFwX2luc2VydF92 MihUYWJsZUluc2VydFN0YXRlICpzdGF0ZSwgVHVwbGVUYWJsZVNsb3QgKnNsb3QpOworZXh0ZXJu IHZvaWQgaGVhcF9tdWx0aV9pbnNlcnRfdjIoVGFibGVJbnNlcnRTdGF0ZSAqc3RhdGUsCisJCQkJ CQkJCSBUdXBsZVRhYmxlU2xvdCAqc2xvdCk7CitleHRlcm4gdm9pZCBoZWFwX211bHRpX2luc2Vy dF9mbHVzaChUYWJsZUluc2VydFN0YXRlICpzdGF0ZSk7CitleHRlcm4gdm9pZCBoZWFwX2luc2Vy dF9lbmQoVGFibGVJbnNlcnRTdGF0ZSAqc3RhdGUpOworCiBleHRlcm4gVE1fUmVzdWx0IGhlYXBf ZGVsZXRlKFJlbGF0aW9uIHJlbGF0aW9uLCBJdGVtUG9pbnRlciB0aWQsCiAJCQkJCQkJIENvbW1h bmRJZCBjaWQsIFNuYXBzaG90IGNyb3NzY2hlY2ssIGJvb2wgd2FpdCwKIAkJCQkJCQkgc3RydWN0 IFRNX0ZhaWx1cmVEYXRhICp0bWZkLCBib29sIGNoYW5naW5nUGFydCk7CmRpZmYgLS1naXQgYS9z cmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxlYW0u aAppbmRleCAzODdlYjM0YTYxLi42MGQ0Y2Q4YzhiIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9h Y2Nlc3MvdGFibGVhbS5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmgKQEAgLTEy OCw2ICsxMjgsODAgQEAgdHlwZWRlZiBzdHJ1Y3QgVE1fRmFpbHVyZURhdGEKIAlib29sCQl0cmF2 ZXJzZWQ7CiB9IFRNX0ZhaWx1cmVEYXRhOwogCisvKiBIb2xkcyB0aGUgbXVsdGkgaW5zZXJ0IHJl bGF0ZWQgaW5mb3JtYXRpb24uICovCit0eXBlZGVmIHN0cnVjdCBUYWJsZU11bHRpSW5zZXJ0U3Rh dGUKK3sKKwkvKiBTd2l0Y2ggdG8gc2hvcnQtbGl2ZWQgbWVtb3J5IGNvbnRleHQgYmVmb3JlIGZs dXNoaW5nLiAqLworCU1lbW9yeUNvbnRleHQgICAgICAgY29udGV4dDsKKworCS8qIEFycmF5IG9m IGJ1ZmZlcmVkIHNsb3RzLiAqLworCVR1cGxlVGFibGVTbG90ICAgICAgKipzbG90czsKKworCS8q IE1heGltdW0gbnVtYmVyIG9mIHNsb3RzIHRoYXQgY2FuIGJlIGJ1ZmZlcmVkLiAqLworCWludDMy ICAgICAgICAgICAgICAgbWF4X3Nsb3RzOworCisJLyogTnVtYmVyIG9mIHNsb3RzIHRoYXQgYXJl IGN1cnJlbnRseSBidWZmZXJlZC4gKi8KKwlpbnQzMiAgICAgICAgICAgICAgIGN1cl9zbG90czsK KworCS8qCisJICogTWF4aW11bSBzaXplIChpbiBieXRlcykgb2YgYWxsIHRoZSB0dXBsZXMgdGhh dCBhIHNpbmdsZSBiYXRjaCBvZgorCSAqIGJ1ZmZlcmVkIHNsb3RzIGNhbiBob2xkLiBUaGlzIHBh cmFtZXRlciBpcyBvcHRpb25hbC4KKwkgKi8KKwlpbnQ2NCAgICAgICAgICAgICAgIG1heF9zaXpl OworCisJLyoKKwkgKiBUb3RhbCB0dXBsZSBzaXplIChpbiBieXRlcykgb2YgdGhlIHNsb3RzIHRo YXQgYXJlIGN1cnJlbnRseSBidWZmZXJlZC4gSWYKKwkgKiBtYXhfc2l6ZSBpcyBzcGVjaWZpZWQs IHRoZW4gZmx1c2ggdGhlIGJ1ZmZlcmVkIHNsb3RzIHdoZW4gY3VyX3NpemUgPj0KKwkgKiBtYXhf c2l6ZS4KKwkgKi8KKwlpbnQ2NCAgICAgICAgICAgICAgIGN1cl9zaXplOworCisJLyoKKwkgKiBD dXJyZW50IHR1cGxlIHNpemUgKGluIGJ5dGVzKS4gU2V0IHRoaXMgZWFjaCB0aW1lIGJlZm9yZSBj YWxsaW5nCisJICogdGFibGVfbXVsdGlfaW5zZXJ0X3YyLCBpZiB0aGUgdHVwbGUgc2l6ZSBpcyBr bm93biAoYXMgaW4gdGhlIGNhc2Ugb2YKKwkgKiBDT1BZIHdoZXJlIGVhY2ggdHVwbGUgc2l6ZSBr bm93biBhZnRlciBwYXJzaW5nIHRoZSBpbnB1dCBsaW5lcykuCisJICogdGFibGVfbXVsdGlfaW5z ZXJ0X3YyIHdpbGwgbm90IGNhbGN1bGF0ZSB0aGUgdHVwbGUgc2l6ZSBhZ2FpbiB0byBhZGQgdG8K KwkgKiBjdXJfc2l6ZSwgaXQganVzdCB1c2VzIHRoaXMgdmFsdWUuIHRhYmxlX211bHRpX2luc2Vy dF92MiB3aWxsIHNldCBpdCB0bworCSAqIC0xIGFmdGVyIGl0IHVzZXMuIERlZmF1bHQgaXMgLTEu CisJICovCisJaW50NjQgICAgICAgICAgICAgICBjdXJfdHVwX3NpemU7CisKKwkvKgorCSAqIFdo ZXRoZXIgdG8gY2xlYXIgdGhlIGJ1ZmZlcmVkIHNsb3RzIGFmdGVyIGVhY2ggZmx1c2g/IElmIHRo ZSByZWxhdGlvbgorCSAqIGhhcyBpbmRleGVzIG9yIGFmdGVyIHJvdyB0cmlnZ2VycywgdGhlIGJ1 ZmZlcmVkIHNsb3RzIGFyZSByZXF1aXJlZAorCSAqIG91dHNpZGUgdGFibGVfbXVsdGlfaW5zZXJ0 X3YyKCksIGluIHdoaWNoIGNhc2UsIGNsZWFuIHRoZW0gaW4gdGhlIGNhbGxlcgorCSAqIHVzaW5n IEV4ZWNDbGVhclR1cGxlKCkgb3V0c2lkZSB0aGUgdGFibGVfbXVsdGlfaW5zZXJ0X3YyLiBJZiB0 cnVlLAorCSAqIHdoaWNoIGlzIGRlZmF1bHQsIHRhYmxlX211bHRpX2luc2VydF92MigpIHdpbGwg Y2xlYXIgdGhlIHNsb3RzLgorCSAqCisJICogSXQgaXMgZ29vZCB0byBzZXQgY2xlYXJfc2xvdHMg KGJ5IGxvb2tpbmcgYXQgd2hldGhlciB0aGUgdGFibGUgaXMgaGF2aW5nCisJICogYW55IGluZGV4 ZXMgb3IgYWZ0ZXIgcm93IHRyaWdnZXJzKSBhdCB0aGUgYmVnaW5uaW5nIG9mIG11bHRpIGluc2Vy dAorCSAqIG9wZXJhdGlvbi4gSXQgaXMgYmV0dGVyIHRvIHNldCBpdCB0byBmYWxzZSBmb3IgdGhl IGZpbmFsIGZsdXNoIGJlZm9yZQorCSAqIGVuZGluZyB0aGUgbXVsdGkgaW5zZXJ0IG9wZXJhdGlv bi4gVGhpcyBpcyB0byBzYXZlIEV4ZWNDbGVhclR1cGxlIGNvc3QKKwkgKiB3aGlsZSBmbHVzaGlu ZyBhcyB0aGUgYnVmZmVyZWQgc2xvdHMgd2lsbCBhbnl3YXlzIGJlIGRyb3BwZWQgaW4gdGhlIGVu ZAorCSAqIG9wZXJhdGlvbi4KKwkgKi8KKwlib29sICAgICAgICAgICAgICAgIGNsZWFyX3Nsb3Rz OworCisJLyoKKwkgKiBJbml0aWFsbHkgZmFsc2UsIHNldCB0byB0cnVlIGJ5IHRhYmxlX211bHRp X2luc2VydCB3aGVuZXZlciBpdCBmbHVzaGVzCisJICogdGhlIGJ1ZmZlcmVkIHNsb3RzLiBDYWxs ZXIgY2FuIHVzZSB0aGlzIGZsYWcgdG8gaW5zZXJ0IGludG8gaW5kZXhlcyBvcgorCSAqIGV4ZWN1 dGUgYWZ0ZXIgcm93IHRyaWdnZXJzIGFuZCBzbyBvbiBpZiBhbnkuCisJICovCisJYm9vbAkJCQlm bHVzaGVkOworfSBUYWJsZU11bHRpSW5zZXJ0U3RhdGU7CisKKy8qIEhvbGRzIHRoZSB0YWJsZSBp bnNlcnQgc3RhdGUuICovCit0eXBlZGVmIHN0cnVjdCBUYWJsZUluc2VydFN0YXRlCit7CisJUmVs YXRpb24gICAgICAgICAgICAgICAgcmVsOworCS8qIEJ1bGsgaW5zZXJ0IHN0YXRlIGlmIHJlcXVl c3RlZCwgb3RoZXJ3aXNlIE5VTEwuICovCisJc3RydWN0IEJ1bGtJbnNlcnRTdGF0ZURhdGEgICAg ICpiaXN0YXRlOworCS8qIE11bGl0IGluc2VydCBzdGF0ZSBpZiByZXF1ZXN0ZWQsIG90aGVyd2lz ZSBOVUxMLiAqLworCXN0cnVjdCBUYWJsZU11bHRpSW5zZXJ0U3RhdGUgICAqbWlzdGF0ZTsKKwlD b21tYW5kSWQgICAgICAgICAgICAgICBjaWQ7CisJaW50ICAgICAgICAgICAgICAgICAgICAgb3B0 aW9uczsKK31UYWJsZUluc2VydFN0YXRlOworCiAvKiAib3B0aW9ucyIgZmxhZyBiaXRzIGZvciB0 YWJsZV90dXBsZV9pbnNlcnQgKi8KIC8qIFRBQkxFX0lOU0VSVF9TS0lQX1dBTCB3YXMgMHgwMDAx OyBSZWxhdGlvbk5lZWRzV0FMKCkgbm93IGdvdmVybnMgKi8KICNkZWZpbmUgVEFCTEVfSU5TRVJU X1NLSVBfRlNNCQkweDAwMDIKQEAgLTM3Niw2ICs0NTAsMTkgQEAgdHlwZWRlZiBzdHJ1Y3QgVGFi bGVBbVJvdXRpbmUKIAl2b2lkCQkoKm11bHRpX2luc2VydCkgKFJlbGF0aW9uIHJlbCwgVHVwbGVU YWJsZVNsb3QgKipzbG90cywgaW50IG5zbG90cywKIAkJCQkJCQkJIENvbW1hbmRJZCBjaWQsIGlu dCBvcHRpb25zLCBzdHJ1Y3QgQnVsa0luc2VydFN0YXRlRGF0YSAqYmlzdGF0ZSk7CiAKKwlUYWJs ZUluc2VydFN0YXRlKiAoKnR1cGxlX2luc2VydF9iZWdpbikgKFJlbGF0aW9uIHJlbCwgQ29tbWFu ZElkIGNpZCwKKwkJCQkJCQkJCQkJIGludCBvcHRpb25zLCBib29sIGFsbG9jX2Jpc3RhdGUsCisJ CQkJCQkJCQkJCSBib29sIGlzX211bHRpLCBpbnQzMiBtaV9tYXhfc2xvdHMsCisJCQkJCQkJCQkJ CSBpbnQ2NCBtaV9tYXhfc2l6ZSk7CisKKwl2b2lkICgqdHVwbGVfaW5zZXJ0X3YyKSAoVGFibGVJ bnNlcnRTdGF0ZSAqc3RhdGUsIFR1cGxlVGFibGVTbG90ICpzbG90KTsKKworCXZvaWQgKCptdWx0 aV9pbnNlcnRfdjIpIChUYWJsZUluc2VydFN0YXRlICpzdGF0ZSwgVHVwbGVUYWJsZVNsb3QgKnNs b3QpOworCisJdm9pZCAoKm11bHRpX2luc2VydF9mbHVzaCkgKFRhYmxlSW5zZXJ0U3RhdGUgKnN0 YXRlKTsKKworCXZvaWQgKCp0dXBsZV9pbnNlcnRfZW5kKSAoVGFibGVJbnNlcnRTdGF0ZSAqc3Rh dGUpOworCiAJLyogc2VlIHRhYmxlX3R1cGxlX2RlbGV0ZSgpIGZvciByZWZlcmVuY2UgYWJvdXQg cGFyYW1ldGVycyAqLwogCVRNX1Jlc3VsdAkoKnR1cGxlX2RlbGV0ZSkgKFJlbGF0aW9uIHJlbCwK IAkJCQkJCQkJIEl0ZW1Qb2ludGVyIHRpZCwKQEAgLTEyMzcsNiArMTMyNCwzOSBAQCB0YWJsZV9t dWx0aV9pbnNlcnQoUmVsYXRpb24gcmVsLCBUdXBsZVRhYmxlU2xvdCAqKnNsb3RzLCBpbnQgbnNs b3RzLAogCQkJCQkJCQkgIGNpZCwgb3B0aW9ucywgYmlzdGF0ZSk7CiB9CiAKK3N0YXRpYyBpbmxp bmUgVGFibGVJbnNlcnRTdGF0ZSoKK3RhYmxlX2luc2VydF9iZWdpbihSZWxhdGlvbiByZWwsIENv bW1hbmRJZCBjaWQsIGludCBvcHRpb25zLAorCQkJCSAgIGJvb2wgYWxsb2NfYmlzdGF0ZSwgYm9v bCBpc19tdWx0aSwgaW50MzIgbWlfbWF4X3Nsb3RzLAorCQkJCSAgIGludDY0IG1pX21heF9zaXpl KQoreworCXJldHVybiByZWwtPnJkX3RhYmxlYW0tPnR1cGxlX2luc2VydF9iZWdpbihyZWwsIGNp ZCwgb3B0aW9ucywgYWxsb2NfYmlzdGF0ZSwKKwkJCQkJCQkJCQlpc19tdWx0aSwgbWlfbWF4X3Ns b3RzLCBtaV9tYXhfc2l6ZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAordGFibGVfaW5zZXJ0 X3YyKFRhYmxlSW5zZXJ0U3RhdGUgKnN0YXRlLCBUdXBsZVRhYmxlU2xvdCAqc2xvdCkKK3sKKwlz dGF0ZS0+cmVsLT5yZF90YWJsZWFtLT50dXBsZV9pbnNlcnRfdjIoc3RhdGUsIHNsb3QpOworfQor CitzdGF0aWMgaW5saW5lIHZvaWQKK3RhYmxlX211bHRpX2luc2VydF92MihUYWJsZUluc2VydFN0 YXRlICpzdGF0ZSwgVHVwbGVUYWJsZVNsb3QgKnNsb3QpCit7CisJc3RhdGUtPnJlbC0+cmRfdGFi bGVhbS0+bXVsdGlfaW5zZXJ0X3YyKHN0YXRlLCBzbG90KTsKK30KKworc3RhdGljIGlubGluZSB2 b2lkCit0YWJsZV9tdWx0aV9pbnNlcnRfZmx1c2goVGFibGVJbnNlcnRTdGF0ZSAqc3RhdGUpCit7 CisJc3RhdGUtPnJlbC0+cmRfdGFibGVhbS0+bXVsdGlfaW5zZXJ0X2ZsdXNoKHN0YXRlKTsKK30K Kworc3RhdGljIGlubGluZSB2b2lkCit0YWJsZV9pbnNlcnRfZW5kKFRhYmxlSW5zZXJ0U3RhdGUg KnN0YXRlKQoreworCXN0YXRlLT5yZWwtPnJkX3RhYmxlYW0tPnR1cGxlX2luc2VydF9lbmQoc3Rh dGUpOworfQorCiAvKgogICogRGVsZXRlIGEgdHVwbGUuCiAgKgpkaWZmIC0tZ2l0IGEvc3JjL2lu Y2x1ZGUvZXhlY3V0b3IvdHVwdGFibGUuaCBiL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL3R1cHRhYmxl LmgKaW5kZXggZjdkZjcwYjVhYi4uZDdjMjg0ZDhlMyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUv ZXhlY3V0b3IvdHVwdGFibGUuaAorKysgYi9zcmMvaW5jbHVkZS9leGVjdXRvci90dXB0YWJsZS5o CkBAIC0zMzAsNiArMzMwLDcgQEAgZXh0ZXJuIHZvaWQgc2xvdF9nZXRtaXNzaW5nYXR0cnMoVHVw bGVUYWJsZVNsb3QgKnNsb3QsIGludCBzdGFydEF0dE51bSwKIAkJCQkJCQkJIGludCBsYXN0QXR0 TnVtKTsKIGV4dGVybiB2b2lkIHNsb3RfZ2V0c29tZWF0dHJzX2ludChUdXBsZVRhYmxlU2xvdCAq c2xvdCwgaW50IGF0dG51bSk7CiAKK2V4dGVybiBTaXplIEdldFR1cGxlU2l6ZShUdXBsZVRhYmxl U2xvdCAqc2xvdCwgU2l6ZSBtYXhzaXplKTsKIAogI2lmbmRlZiBGUk9OVEVORAogCi0tIAoyLjI1 LjEKCg== --0000000000006257f105b5f37d65 Content-Type: application/octet-stream; name="v1-0003-ATRewriteTable-With-New-Single-Insert-Table-AM.patch" Content-Disposition: attachment; filename="v1-0003-ATRewriteTable-With-New-Single-Insert-Table-AM.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kiftb41e2 RnJvbSA3MjM1MWY3ZGJmMDM1M2VjMWZjZDhiYjE0YTE1NjM4MDZlYjYyMjE4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBCaGFyYXRoIFJ1cGlyZWRkeSA8YmhhcmF0aC5ydXBpcmVkZHlA ZW50ZXJwcmlzZWRiLmNvbT4KRGF0ZTogVHVlLCA4IERlYyAyMDIwIDEyOjIwOjE3ICswNTMwClN1 YmplY3Q6IFtQQVRDSCB2MV0gQVRSZXdyaXRlVGFibGUgV2l0aCBOZXcgU2luZ2xlIEluc2VydCBU YWJsZSBBTQoKVGhpcyBwYXRjaCBhZGRzIG5ldyBzaW5nbGUgaW5zZXJ0IHRhYmxlIGFjY2VzcyBt ZXRob2QgdG8gQUxURVIgVEFCTEUKcmV3cml0ZSB0YWJsZSBjb2RlLgotLS0KIHNyYy9iYWNrZW5k L2NvbW1hbmRzL3RhYmxlY21kcy5jIHwgMjggKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLQog MSBmaWxlIGNoYW5nZWQsIDEyIGluc2VydGlvbnMoKyksIDE2IGRlbGV0aW9ucygtKQoKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jIGIvc3JjL2JhY2tlbmQvY29t bWFuZHMvdGFibGVjbWRzLmMKaW5kZXggNDZmMTYzN2U3Ny4uODBmMDEzMDM2ZSAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMKKysrIGIvc3JjL2JhY2tlbmQvY29t bWFuZHMvdGFibGVjbWRzLmMKQEAgLTUxODIsMTAgKzUxODIsOCBAQCBBVFJld3JpdGVUYWJsZShB bHRlcmVkVGFibGVJbmZvICp0YWIsIE9pZCBPSUROZXdIZWFwLCBMT0NLTU9ERSBsb2NrbW9kZSkK IAlpbnQJCQlpOwogCUxpc3RDZWxsICAgKmw7CiAJRVN0YXRlCSAgICplc3RhdGU7Ci0JQ29tbWFu ZElkCW15Y2lkOwotCUJ1bGtJbnNlcnRTdGF0ZSBiaXN0YXRlOwotCWludAkJCXRpX29wdGlvbnM7 CiAJRXhwclN0YXRlICAqcGFydHF1YWxzdGF0ZSA9IE5VTEw7CisJVGFibGVJbnNlcnRTdGF0ZSAq aXN0YXRlID0gTlVMTDsKIAogCS8qCiAJICogT3BlbiB0aGUgcmVsYXRpb24ocykuICBXZSBoYXZl IHN1cmVseSBhbHJlYWR5IGxvY2tlZCB0aGUgZXhpc3RpbmcKQEAgLTUyMDYsMTYgKzUyMDQsMTMg QEAgQVRSZXdyaXRlVGFibGUoQWx0ZXJlZFRhYmxlSW5mbyAqdGFiLCBPaWQgT0lETmV3SGVhcCwg TE9DS01PREUgbG9ja21vZGUpCiAJICovCiAJaWYgKG5ld3JlbCkKIAl7Ci0JCW15Y2lkID0gR2V0 Q3VycmVudENvbW1hbmRJZCh0cnVlKTsKLQkJYmlzdGF0ZSA9IEdldEJ1bGtJbnNlcnRTdGF0ZSgp OwotCQl0aV9vcHRpb25zID0gVEFCTEVfSU5TRVJUX1NLSVBfRlNNOwotCX0KLQllbHNlCi0Jewot CQkvKiBrZWVwIGNvbXBpbGVyIHF1aWV0IGFib3V0IHVzaW5nIHRoZXNlIHVuaW5pdGlhbGl6ZWQg Ki8KLQkJbXljaWQgPSAwOwotCQliaXN0YXRlID0gTlVMTDsKLQkJdGlfb3B0aW9ucyA9IDA7CisJ CWlzdGF0ZSA9IHRhYmxlX2luc2VydF9iZWdpbihuZXdyZWwsCisJCQkJCQkJCQlHZXRDdXJyZW50 Q29tbWFuZElkKHRydWUpLAorCQkJCQkJCQkJVEFCTEVfSU5TRVJUX1NLSVBfRlNNLAorCQkJCQkJ CQkJdHJ1ZSwKKwkJCQkJCQkJCWZhbHNlLAorCQkJCQkJCQkJLTEsCisJCQkJCQkJCQktMSk7CiAJ fQogCiAJLyoKQEAgLTU1MTAsOCArNTUwNSw3IEBAIEFUUmV3cml0ZVRhYmxlKEFsdGVyZWRUYWJs ZUluZm8gKnRhYiwgT2lkIE9JRE5ld0hlYXAsIExPQ0tNT0RFIGxvY2ttb2RlKQogCiAJCQkvKiBX cml0ZSB0aGUgdHVwbGUgb3V0IHRvIHRoZSBuZXcgcmVsYXRpb24gKi8KIAkJCWlmIChuZXdyZWwp Ci0JCQkJdGFibGVfdHVwbGVfaW5zZXJ0KG5ld3JlbCwgaW5zZXJ0c2xvdCwgbXljaWQsCi0JCQkJ CQkJCSAgIHRpX29wdGlvbnMsIGJpc3RhdGUpOworCQkJCXRhYmxlX2luc2VydF92Mihpc3RhdGUs IGluc2VydHNsb3QpOwogCiAJCQlSZXNldEV4cHJDb250ZXh0KGVjb250ZXh0KTsKIApAQCAtNTUz Miw3ICs1NTI2LDkgQEAgQVRSZXdyaXRlVGFibGUoQWx0ZXJlZFRhYmxlSW5mbyAqdGFiLCBPaWQg T0lETmV3SGVhcCwgTE9DS01PREUgbG9ja21vZGUpCiAJdGFibGVfY2xvc2Uob2xkcmVsLCBOb0xv Y2spOwogCWlmIChuZXdyZWwpCiAJewotCQlGcmVlQnVsa0luc2VydFN0YXRlKGJpc3RhdGUpOwor CQlpbnQgdGlfb3B0aW9ucyA9IGlzdGF0ZS0+b3B0aW9uczsKKworCQl0YWJsZV9pbnNlcnRfZW5k KGlzdGF0ZSk7CiAKIAkJdGFibGVfZmluaXNoX2J1bGtfaW5zZXJ0KG5ld3JlbCwgdGlfb3B0aW9u cyk7CiAKLS0gCjIuMjUuMQoK --0000000000006257f105b5f37d65 Content-Type: application/octet-stream; name="v1-0004-COPY-With-New-Multi-and-Single-Insert-Table-AM.patch" Content-Disposition: attachment; filename="v1-0004-COPY-With-New-Multi-and-Single-Insert-Table-AM.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kiftb41h3 RnJvbSA1OWJkN2RlMTk3NjIyNDFmYTUzZWVkNmY2NDUxMGYwMjIzNDViMTRiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBCaGFyYXRoIFJ1cGlyZWRkeSA8YmhhcmF0aC5ydXBpcmVkZHlA ZW50ZXJwcmlzZWRiLmNvbT4KRGF0ZTogVHVlLCA4IERlYyAyMDIwIDEzOjAxOjMyICswNTMwClN1 YmplY3Q6IFtQQVRDSCB2MV0gQ09QWSBXaXRoIE5ldyBNdWx0aSBhbmQgU2luZ2xlIEluc2VydCBU YWJsZSBBTQoKVGhpcyBwYXRjaCBhZGRzIG5ldyBzaW5nbGUgYW5kIG11bHRpIGluc2VydCB0YWJs ZSBhY2Nlc3MgbWV0aG9kIHRvCkNPUFkgY29kZS4KLS0tCiBzcmMvYmFja2VuZC9jb21tYW5kcy9j b3B5ZnJvbS5jIHwgNDgzICsrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAxIGZpbGUg Y2hhbmdlZCwgMTYzIGluc2VydGlvbnMoKyksIDMyMCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5ZnJvbS5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMv Y29weWZyb20uYwppbmRleCAxYjE0ZTlhNmViLi44Mzc2YWYzMmY1IDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9jb21tYW5kcy9jb3B5ZnJvbS5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2Nv cHlmcm9tLmMKQEAgLTQ1LDEwICs0NSwxMCBAQAogI2luY2x1ZGUgInV0aWxzL3NuYXBtZ3IuaCIK IAogLyoKLSAqIE5vIG1vcmUgdGhhbiB0aGlzIG1hbnkgdHVwbGVzIHBlciBDb3B5TXVsdGlJbnNl cnRCdWZmZXIKKyAqIE5vIG1vcmUgdGhhbiB0aGlzIG1hbnkgdHVwbGVzIHBlciBtdWx0aSBpbnNl cnQgYnVmZmVyCiAgKgogICogQ2F1dGlvbjogRG9uJ3QgbWFrZSB0aGlzIHRvbyBiaWcsIGFzIHdl IGNvdWxkIGVuZCB1cCB3aXRoIHRoaXMgbWFueQotICogQ29weU11bHRpSW5zZXJ0QnVmZmVyIGl0 ZW1zIHN0b3JlZCBpbiBDb3B5TXVsdGlJbnNlcnRJbmZvJ3MKKyAqIG11bHRpIGluc2VydCBidWZm ZXIgaXRlbXMgc3RvcmVkIGluIENvcHlNdWx0aUluc2VydEluZm8ncwogICogbXVsdGlJbnNlcnRC dWZmZXJzIGxpc3QuICBJbmNyZWFzaW5nIHRoaXMgY2FuIGNhdXNlIHF1YWRyYXRpYyBncm93dGgg aW4KICAqIG1lbW9yeSByZXF1aXJlbWVudHMgZHVyaW5nIGNvcGllcyBpbnRvIHBhcnRpdGlvbmVk IHRhYmxlcyB3aXRoIGEgbGFyZ2UKICAqIG51bWJlciBvZiBwYXJ0aXRpb25zLgpAQCAtNjcsMzEg KzY3LDExIEBACiAvKiBTdG9yZXMgbXVsdGktaW5zZXJ0IGRhdGEgcmVsYXRlZCB0byBhIHNpbmds ZSByZWxhdGlvbiBpbiBDb3B5RnJvbS4gKi8KIHR5cGVkZWYgc3RydWN0IENvcHlNdWx0aUluc2Vy dEJ1ZmZlcgogewotCVR1cGxlVGFibGVTbG90ICpzbG90c1tNQVhfQlVGRkVSRURfVFVQTEVTXTsg LyogQXJyYXkgdG8gc3RvcmUgdHVwbGVzICovCi0JUmVzdWx0UmVsSW5mbyAqcmVzdWx0UmVsSW5m bzsJLyogUmVzdWx0UmVsSW5mbyBmb3IgJ3JlbGlkJyAqLwotCUJ1bGtJbnNlcnRTdGF0ZSBiaXN0 YXRlOwkvKiBCdWxrSW5zZXJ0U3RhdGUgZm9yIHRoaXMgcmVsICovCi0JaW50CQkJbnVzZWQ7CQkJ LyogbnVtYmVyIG9mICdzbG90cycgY29udGFpbmluZyB0dXBsZXMgKi8KLQl1aW50NjQJCWxpbmVu b3NbTUFYX0JVRkZFUkVEX1RVUExFU107CS8qIExpbmUgIyBvZiB0dXBsZSBpbiBjb3B5Ci0JCQkJ CQkJCQkJCQkgKiBzdHJlYW0gKi8KKwlUYWJsZUluc2VydFN0YXRlICppc3RhdGU7CisJLyogTGlu ZSAjIG9mIHR1cGxlIGluIGNvcHkgc3RyZWFtLiAqLworCXVpbnQ2NAkJbGluZW5vc1tNQVhfQlVG RkVSRURfVFVQTEVTXTsKIH0gQ29weU11bHRpSW5zZXJ0QnVmZmVyOwogCi0vKgotICogU3RvcmVz IG9uZSBvciBtYW55IENvcHlNdWx0aUluc2VydEJ1ZmZlcnMgYW5kIGRldGFpbHMgYWJvdXQgdGhl IHNpemUgYW5kCi0gKiBudW1iZXIgb2YgdHVwbGVzIHdoaWNoIGFyZSBzdG9yZWQgaW4gdGhlbS4g IFRoaXMgYWxsb3dzIG11bHRpcGxlIGJ1ZmZlcnMgdG8KLSAqIGV4aXN0IGF0IG9uY2Ugd2hlbiBD T1BZaW5nIGludG8gYSBwYXJ0aXRpb25lZCB0YWJsZS4KLSAqLwotdHlwZWRlZiBzdHJ1Y3QgQ29w eU11bHRpSW5zZXJ0SW5mbwotewotCUxpc3QJICAgKm11bHRpSW5zZXJ0QnVmZmVyczsgLyogTGlz dCBvZiB0cmFja2VkIENvcHlNdWx0aUluc2VydEJ1ZmZlcnMgKi8KLQlpbnQJCQlidWZmZXJlZFR1 cGxlczsgLyogbnVtYmVyIG9mIHR1cGxlcyBidWZmZXJlZCBvdmVyIGFsbCBidWZmZXJzICovCi0J aW50CQkJYnVmZmVyZWRCeXRlczsJLyogbnVtYmVyIG9mIGJ5dGVzIGZyb20gYWxsIGJ1ZmZlcmVk IHR1cGxlcyAqLwotCUNvcHlGcm9tU3RhdGUJY3N0YXRlOwkJCS8qIENvcHkgc3RhdGUgZm9yIHRo aXMgQ29weU11bHRpSW5zZXJ0SW5mbyAqLwotCUVTdGF0ZQkgICAqZXN0YXRlOwkJCS8qIEV4ZWN1 dG9yIHN0YXRlIHVzZWQgZm9yIENPUFkgKi8KLQlDb21tYW5kSWQJbXljaWQ7CQkJLyogQ29tbWFu ZCBJZCB1c2VkIGZvciBDT1BZICovCi0JaW50CQkJdGlfb3B0aW9uczsJCS8qIHRhYmxlIGluc2Vy dCBvcHRpb25zICovCi19IENvcHlNdWx0aUluc2VydEluZm87Ci0KLQogLyogbm9uLWV4cG9ydCBm dW5jdGlvbiBwcm90b3R5cGVzICovCiBzdGF0aWMgY2hhciAqbGltaXRfcHJpbnRvdXRfbGVuZ3Ro KGNvbnN0IGNoYXIgKnN0cik7CiAKQEAgLTIwNCwyMjcgKzE4NCwxMzAgQEAgbGltaXRfcHJpbnRv dXRfbGVuZ3RoKGNvbnN0IGNoYXIgKnN0cikKIAlyZXR1cm4gcmVzOwogfQogCi0vKgotICogQWxs b2NhdGUgbWVtb3J5IGFuZCBpbml0aWFsaXplIGEgbmV3IENvcHlNdWx0aUluc2VydEJ1ZmZlciBm b3IgdGhpcwotICogUmVzdWx0UmVsSW5mby4KLSAqLwotc3RhdGljIENvcHlNdWx0aUluc2VydEJ1 ZmZlciAqCi1Db3B5TXVsdGlJbnNlcnRCdWZmZXJJbml0KFJlc3VsdFJlbEluZm8gKnJyaSkKK3N0 YXRpYyB2b2lkCitJbml0Q29weU11bHRpSW5zZXJ0QnVmZmVySW5mbyhMaXN0ICoqbWlycmksIFJl c3VsdFJlbEluZm8gKnJyaSwKKwkJCQkJCQkgIENvbW1hbmRJZCBteWNpZCwgaW50IHRpX29wdGlv bnMpCiB7CiAJQ29weU11bHRpSW5zZXJ0QnVmZmVyICpidWZmZXI7CisJVHJpZ2dlckRlc2MgKnRy aWdkZXNjID0gcnJpLT5yaV9UcmlnRGVzYzsKIAotCWJ1ZmZlciA9IChDb3B5TXVsdGlJbnNlcnRC dWZmZXIgKikgcGFsbG9jKHNpemVvZihDb3B5TXVsdGlJbnNlcnRCdWZmZXIpKTsKLQltZW1zZXQo YnVmZmVyLT5zbG90cywgMCwgc2l6ZW9mKFR1cGxlVGFibGVTbG90ICopICogTUFYX0JVRkZFUkVE X1RVUExFUyk7Ci0JYnVmZmVyLT5yZXN1bHRSZWxJbmZvID0gcnJpOwotCWJ1ZmZlci0+YmlzdGF0 ZSA9IEdldEJ1bGtJbnNlcnRTdGF0ZSgpOwotCWJ1ZmZlci0+bnVzZWQgPSAwOwotCi0JcmV0dXJu IGJ1ZmZlcjsKLX0KKwlidWZmZXIgPSAoQ29weU11bHRpSW5zZXJ0QnVmZmVyICopIHBhbGxvYzAo c2l6ZW9mKENvcHlNdWx0aUluc2VydEJ1ZmZlcikpOwogCi0vKgotICogTWFrZSBhIG5ldyBidWZm ZXIgZm9yIHRoaXMgUmVzdWx0UmVsSW5mby4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkCi1Db3B5 TXVsdGlJbnNlcnRJbmZvU2V0dXBCdWZmZXIoQ29weU11bHRpSW5zZXJ0SW5mbyAqbWlpbmZvLAot CQkJCQkJCSAgIFJlc3VsdFJlbEluZm8gKnJyaSkKLXsKLQlDb3B5TXVsdGlJbnNlcnRCdWZmZXIg KmJ1ZmZlcjsKKwlidWZmZXItPmlzdGF0ZSA9IHRhYmxlX2luc2VydF9iZWdpbihycmktPnJpX1Jl bGF0aW9uRGVzYywKKwkJCQkJCQkJCQlteWNpZCwKKwkJCQkJCQkJCQl0aV9vcHRpb25zLAorCQkJ CQkJCQkJCXRydWUsCisJCQkJCQkJCQkJdHJ1ZSwKKwkJCQkJCQkJCQlNQVhfQlVGRkVSRURfVFVQ TEVTLAorCQkJCQkJCQkJCU1BWF9CVUZGRVJFRF9CWVRFUyk7CiAKLQlidWZmZXIgPSBDb3B5TXVs dGlJbnNlcnRCdWZmZXJJbml0KHJyaSk7CisJaWYgKHJyaS0+cmlfTnVtSW5kaWNlcyB8fAorCQko dHJpZ2Rlc2MgJiYgKHRyaWdkZXNjLT50cmlnX2luc2VydF9hZnRlcl9yb3cgfHwKKwkJdHJpZ2Rl c2MtPnRyaWdfaW5zZXJ0X25ld190YWJsZSkpKQorCQlidWZmZXItPmlzdGF0ZS0+bWlzdGF0ZS0+ Y2xlYXJfc2xvdHMgPSBmYWxzZTsKIAotCS8qIFNldHVwIGJhY2stbGluayBzbyB3ZSBjYW4gZWFz aWx5IGZpbmQgdGhpcyBidWZmZXIgYWdhaW4gKi8KIAlycmktPnJpX0NvcHlNdWx0aUluc2VydEJ1 ZmZlciA9IGJ1ZmZlcjsKLQkvKiBSZWNvcmQgdGhhdCB3ZSdyZSB0cmFja2luZyB0aGlzIGJ1ZmZl ciAqLwotCW1paW5mby0+bXVsdGlJbnNlcnRCdWZmZXJzID0gbGFwcGVuZChtaWluZm8tPm11bHRp SW5zZXJ0QnVmZmVycywgYnVmZmVyKTsKLX0KLQotLyoKLSAqIEluaXRpYWxpemUgYW4gYWxyZWFk eSBhbGxvY2F0ZWQgQ29weU11bHRpSW5zZXJ0SW5mby4KLSAqCi0gKiBJZiBycmkgaXMgYSBub24t cGFydGl0aW9uZWQgdGFibGUgdGhlbiBhIENvcHlNdWx0aUluc2VydEJ1ZmZlciBpcyBzZXQgdXAK LSAqIGZvciB0aGF0IHRhYmxlLgotICovCi1zdGF0aWMgdm9pZAotQ29weU11bHRpSW5zZXJ0SW5m b0luaXQoQ29weU11bHRpSW5zZXJ0SW5mbyAqbWlpbmZvLCBSZXN1bHRSZWxJbmZvICpycmksCi0J CQkJCQlDb3B5RnJvbVN0YXRlIGNzdGF0ZSwgRVN0YXRlICplc3RhdGUsIENvbW1hbmRJZCBteWNp ZCwKLQkJCQkJCWludCB0aV9vcHRpb25zKQotewotCW1paW5mby0+bXVsdGlJbnNlcnRCdWZmZXJz ID0gTklMOwotCW1paW5mby0+YnVmZmVyZWRUdXBsZXMgPSAwOwotCW1paW5mby0+YnVmZmVyZWRC eXRlcyA9IDA7Ci0JbWlpbmZvLT5jc3RhdGUgPSBjc3RhdGU7Ci0JbWlpbmZvLT5lc3RhdGUgPSBl c3RhdGU7Ci0JbWlpbmZvLT5teWNpZCA9IG15Y2lkOwotCW1paW5mby0+dGlfb3B0aW9ucyA9IHRp X29wdGlvbnM7CiAKLQkvKgotCSAqIE9ubHkgc2V0dXAgdGhlIGJ1ZmZlciB3aGVuIG5vdCBkZWFs aW5nIHdpdGggYSBwYXJ0aXRpb25lZCB0YWJsZS4KLQkgKiBCdWZmZXJzIGZvciBwYXJ0aXRpb25l ZCB0YWJsZXMgd2lsbCBqdXN0IGJlIHNldHVwIHdoZW4gd2UgbmVlZCB0byBzZW5kCi0JICogdHVw bGVzIHRoZWlyIHdheSBmb3IgdGhlIGZpcnN0IHRpbWUuCi0JICovCi0JaWYgKHJyaS0+cmlfUmVs YXRpb25EZXNjLT5yZF9yZWwtPnJlbGtpbmQgIT0gUkVMS0lORF9QQVJUSVRJT05FRF9UQUJMRSkK LQkJQ29weU11bHRpSW5zZXJ0SW5mb1NldHVwQnVmZmVyKG1paW5mbywgcnJpKTsKKwkqbWlycmkg PSBsYXBwZW5kKCptaXJyaSwgcnJpKTsKIH0KIAotLyoKLSAqIFJldHVybnMgdHJ1ZSBpZiB0aGUg YnVmZmVycyBhcmUgZnVsbAotICovCi1zdGF0aWMgaW5saW5lIGJvb2wKLUNvcHlNdWx0aUluc2Vy dEluZm9Jc0Z1bGwoQ29weU11bHRpSW5zZXJ0SW5mbyAqbWlpbmZvKQotewotCWlmIChtaWluZm8t PmJ1ZmZlcmVkVHVwbGVzID49IE1BWF9CVUZGRVJFRF9UVVBMRVMgfHwKLQkJbWlpbmZvLT5idWZm ZXJlZEJ5dGVzID49IE1BWF9CVUZGRVJFRF9CWVRFUykKLQkJcmV0dXJuIHRydWU7Ci0JcmV0dXJu IGZhbHNlOwotfQotCi0vKgotICogUmV0dXJucyB0cnVlIGlmIHdlIGhhdmUgbm8gYnVmZmVyZWQg dHVwbGVzCi0gKi8KLXN0YXRpYyBpbmxpbmUgYm9vbAotQ29weU11bHRpSW5zZXJ0SW5mb0lzRW1w dHkoQ29weU11bHRpSW5zZXJ0SW5mbyAqbWlpbmZvKQotewotCXJldHVybiBtaWluZm8tPmJ1ZmZl cmVkVHVwbGVzID09IDA7Ci19Ci0KLS8qCi0gKiBXcml0ZSB0aGUgdHVwbGVzIHN0b3JlZCBpbiAn YnVmZmVyJyBvdXQgdG8gdGhlIHRhYmxlLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQKLUNvcHlN dWx0aUluc2VydEJ1ZmZlckZsdXNoKENvcHlNdWx0aUluc2VydEluZm8gKm1paW5mbywKLQkJCQkJ CSAgIENvcHlNdWx0aUluc2VydEJ1ZmZlciAqYnVmZmVyKQorc3RhdGljIHZvaWQKK0hhbmRsZUFm dGVyUm93RXZlbnRzKFJlc3VsdFJlbEluZm8gKnJyaSwgRVN0YXRlICplc3RhdGUsCisJCQkJCSBD b3B5RnJvbVN0YXRlIGNzdGF0ZSwgaW50MzIgY3VyX3Nsb3RzKQogewotCU1lbW9yeUNvbnRleHQg b2xkY29udGV4dDsKLQlpbnQJCQlpOwotCXVpbnQ2NAkJc2F2ZV9jdXJfbGluZW5vOwotCUNvcHlG cm9tU3RhdGUJY3N0YXRlID0gbWlpbmZvLT5jc3RhdGU7Ci0JRVN0YXRlCSAgICplc3RhdGUgPSBt aWluZm8tPmVzdGF0ZTsKLQlDb21tYW5kSWQJbXljaWQgPSBtaWluZm8tPm15Y2lkOwotCWludAkJ CXRpX29wdGlvbnMgPSBtaWluZm8tPnRpX29wdGlvbnM7CisJaW50IGk7CisJQ29weU11bHRpSW5z ZXJ0QnVmZmVyICpidWZmZXIgPSBycmktPnJpX0NvcHlNdWx0aUluc2VydEJ1ZmZlcjsKKwlUYWJs ZUluc2VydFN0YXRlICppc3RhdGUgPSBidWZmZXItPmlzdGF0ZTsKKwl1aW50NjQJCXNhdmVfY3Vy X2xpbmVubyA9IGNzdGF0ZS0+Y3VyX2xpbmVubzsKIAlib29sCQlsaW5lX2J1Zl92YWxpZCA9IGNz dGF0ZS0+bGluZV9idWZfdmFsaWQ7Ci0JaW50CQkJbnVzZWQgPSBidWZmZXItPm51c2VkOwotCVJl c3VsdFJlbEluZm8gKnJlc3VsdFJlbEluZm8gPSBidWZmZXItPnJlc3VsdFJlbEluZm87Ci0JVHVw bGVUYWJsZVNsb3QgKipzbG90cyA9IGJ1ZmZlci0+c2xvdHM7CiAKLQkvKgotCSAqIFByaW50IGVy cm9yIGNvbnRleHQgaW5mb3JtYXRpb24gY29ycmVjdGx5LCBpZiBvbmUgb2YgdGhlIG9wZXJhdGlv bnMKLQkgKiBiZWxvdyBmYWlsLgotCSAqLwogCWNzdGF0ZS0+bGluZV9idWZfdmFsaWQgPSBmYWxz ZTsKLQlzYXZlX2N1cl9saW5lbm8gPSBjc3RhdGUtPmN1cl9saW5lbm87Ci0KLQkvKgotCSAqIHRh YmxlX211bHRpX2luc2VydCBtYXkgbGVhayBtZW1vcnksIHNvIHN3aXRjaCB0byBzaG9ydC1saXZl ZCBtZW1vcnkKLQkgKiBjb250ZXh0IGJlZm9yZSBjYWxsaW5nIGl0LgotCSAqLwotCW9sZGNvbnRl eHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oR2V0UGVyVHVwbGVNZW1vcnlDb250ZXh0KGVzdGF0 ZSkpOwotCXRhYmxlX211bHRpX2luc2VydChyZXN1bHRSZWxJbmZvLT5yaV9SZWxhdGlvbkRlc2Ms Ci0JCQkJCSAgIHNsb3RzLAotCQkJCQkgICBudXNlZCwKLQkJCQkJICAgbXljaWQsCi0JCQkJCSAg IHRpX29wdGlvbnMsCi0JCQkJCSAgIGJ1ZmZlci0+YmlzdGF0ZSk7Ci0JTWVtb3J5Q29udGV4dFN3 aXRjaFRvKG9sZGNvbnRleHQpOwotCi0JZm9yIChpID0gMDsgaSA8IG51c2VkOyBpKyspCisJZm9y IChpID0gMDsgaSA8IGN1cl9zbG90czsgaSsrKQogCXsKIAkJLyoKLQkJICogSWYgdGhlcmUgYXJl IGFueSBpbmRleGVzLCB1cGRhdGUgdGhlbSBmb3IgYWxsIHRoZSBpbnNlcnRlZCB0dXBsZXMsCi0J CSAqIGFuZCBydW4gQUZURVIgUk9XIElOU0VSVCB0cmlnZ2Vycy4KLQkJICovCi0JCWlmIChyZXN1 bHRSZWxJbmZvLT5yaV9OdW1JbmRpY2VzID4gMCkKKwkJKiBJZiB0aGVyZSBhcmUgYW55IGluZGV4 ZXMsIHVwZGF0ZSB0aGVtIGZvciBhbGwgdGhlIGluc2VydGVkIHR1cGxlcywKKwkJKiBhbmQgcnVu IEFGVEVSIFJPVyBJTlNFUlQgdHJpZ2dlcnMuCisJCSovCisJCWlmIChycmktPnJpX051bUluZGlj ZXMgPiAwKQogCQl7Ci0JCQlMaXN0CSAgICpyZWNoZWNrSW5kZXhlczsKKwkJCUxpc3QgICAgICAg KnJlY2hlY2tJbmRleGVzOwogCiAJCQljc3RhdGUtPmN1cl9saW5lbm8gPSBidWZmZXItPmxpbmVu b3NbaV07CiAJCQlyZWNoZWNrSW5kZXhlcyA9Ci0JCQkJRXhlY0luc2VydEluZGV4VHVwbGVzKHJl c3VsdFJlbEluZm8sCi0JCQkJCQkJCQkgIGJ1ZmZlci0+c2xvdHNbaV0sIGVzdGF0ZSwgZmFsc2Us IE5VTEwsCi0JCQkJCQkJCQkgIE5JTCk7Ci0JCQlFeGVjQVJJbnNlcnRUcmlnZ2Vycyhlc3RhdGUs IHJlc3VsdFJlbEluZm8sCi0JCQkJCQkJCSBzbG90c1tpXSwgcmVjaGVja0luZGV4ZXMsCisJCQkJ CUV4ZWNJbnNlcnRJbmRleFR1cGxlcyhycmksCisJCQkJCQkJCQkJICBpc3RhdGUtPm1pc3RhdGUt PnNsb3RzW2ldLCBlc3RhdGUsCisJCQkJCQkJCQkJICBmYWxzZSwKKwkJCQkJCQkJCQkgIE5VTEws CisJCQkJCQkJCQkJICBOVUxMKTsKKworCQkJRXhlY0FSSW5zZXJ0VHJpZ2dlcnMoZXN0YXRlLAor CQkJCQkJCQkgcnJpLAorCQkJCQkJCQkgaXN0YXRlLT5taXN0YXRlLT5zbG90c1tpXSwKKwkJCQkJ CQkJIHJlY2hlY2tJbmRleGVzLAogCQkJCQkJCQkgY3N0YXRlLT50cmFuc2l0aW9uX2NhcHR1cmUp OworCiAJCQlsaXN0X2ZyZWUocmVjaGVja0luZGV4ZXMpOwogCQl9CiAKIAkJLyoKLQkJICogVGhl cmUncyBubyBpbmRleGVzLCBidXQgc2VlIGlmIHdlIG5lZWQgdG8gcnVuIEFGVEVSIFJPVyBJTlNF UlQKLQkJICogdHJpZ2dlcnMgYW55d2F5LgotCQkgKi8KLQkJZWxzZSBpZiAocmVzdWx0UmVsSW5m by0+cmlfVHJpZ0Rlc2MgIT0gTlVMTCAmJgotCQkJCSAocmVzdWx0UmVsSW5mby0+cmlfVHJpZ0Rl c2MtPnRyaWdfaW5zZXJ0X2FmdGVyX3JvdyB8fAotCQkJCSAgcmVzdWx0UmVsSW5mby0+cmlfVHJp Z0Rlc2MtPnRyaWdfaW5zZXJ0X25ld190YWJsZSkpCisJCSogVGhlcmUncyBubyBpbmRleGVzLCBi dXQgc2VlIGlmIHdlIG5lZWQgdG8gcnVuIEFGVEVSIFJPVyBJTlNFUlQKKwkJKiB0cmlnZ2VycyBh bnl3YXkuCisJCSovCisJCWVsc2UgaWYgKHJyaS0+cmlfVHJpZ0Rlc2MgIT0gTlVMTCAmJgorCQkJ CShycmktPnJpX1RyaWdEZXNjLT50cmlnX2luc2VydF9hZnRlcl9yb3cgfHwKKwkJCQkgcnJpLT5y aV9UcmlnRGVzYy0+dHJpZ19pbnNlcnRfbmV3X3RhYmxlKSkKIAkJewogCQkJY3N0YXRlLT5jdXJf bGluZW5vID0gYnVmZmVyLT5saW5lbm9zW2ldOwotCQkJRXhlY0FSSW5zZXJ0VHJpZ2dlcnMoZXN0 YXRlLCByZXN1bHRSZWxJbmZvLAotCQkJCQkJCQkgc2xvdHNbaV0sIE5JTCwgY3N0YXRlLT50cmFu c2l0aW9uX2NhcHR1cmUpOworCQkJRXhlY0FSSW5zZXJ0VHJpZ2dlcnMoZXN0YXRlLAorCQkJCQkJ CQkgcnJpLAorCQkJCQkJCQkgaXN0YXRlLT5taXN0YXRlLT5zbG90c1tpXSwKKwkJCQkJCQkJIE5V TEwsCisJCQkJCQkJCSBjc3RhdGUtPnRyYW5zaXRpb25fY2FwdHVyZSk7CiAJCX0KIAotCQlFeGVj Q2xlYXJUdXBsZShzbG90c1tpXSk7CisJCUV4ZWNDbGVhclR1cGxlKGlzdGF0ZS0+bWlzdGF0ZS0+ c2xvdHNbaV0pOwogCX0KIAotCS8qIE1hcmsgdGhhdCBhbGwgc2xvdHMgYXJlIGZyZWUgKi8KLQli dWZmZXItPm51c2VkID0gMDsKLQogCS8qIHJlc2V0IGN1cl9saW5lbm8gYW5kIGxpbmVfYnVmX3Zh bGlkIHRvIHdoYXQgdGhleSB3ZXJlICovCiAJY3N0YXRlLT5saW5lX2J1Zl92YWxpZCA9IGxpbmVf YnVmX3ZhbGlkOwogCWNzdGF0ZS0+Y3VyX2xpbmVubyA9IHNhdmVfY3VyX2xpbmVubzsKIH0KIAot LyoKLSAqIERyb3AgdXNlZCBzbG90cyBhbmQgZnJlZSBtZW1iZXIgZm9yIHRoaXMgYnVmZmVyLgot ICoKLSAqIFRoZSBidWZmZXIgbXVzdCBiZSBmbHVzaGVkIGJlZm9yZSBjbGVhbnVwLgotICovCi1z dGF0aWMgaW5saW5lIHZvaWQKLUNvcHlNdWx0aUluc2VydEJ1ZmZlckNsZWFudXAoQ29weU11bHRp SW5zZXJ0SW5mbyAqbWlpbmZvLAotCQkJCQkJCSBDb3B5TXVsdGlJbnNlcnRCdWZmZXIgKmJ1ZmZl cikKK3N0YXRpYyB2b2lkCitDb3B5TXVsdGlJbnNlcnRCdWZmZXJUdXBsZShSZXN1bHRSZWxJbmZv ICpycmksIFR1cGxlVGFibGVTbG90ICpzbG90LAorCQkJCQkgICBDb3B5RnJvbVN0YXRlIGNzdGF0 ZSwgRVN0YXRlICplc3RhdGUpCiB7Ci0JaW50CQkJaTsKLQotCS8qIEVuc3VyZSBidWZmZXIgd2Fz IGZsdXNoZWQgKi8KLQlBc3NlcnQoYnVmZmVyLT5udXNlZCA9PSAwKTsKLQotCS8qIFJlbW92ZSBi YWNrLWxpbmsgdG8gb3Vyc2VsZiAqLwotCWJ1ZmZlci0+cmVzdWx0UmVsSW5mby0+cmlfQ29weU11 bHRpSW5zZXJ0QnVmZmVyID0gTlVMTDsKLQotCUZyZWVCdWxrSW5zZXJ0U3RhdGUoYnVmZmVyLT5i aXN0YXRlKTsKKwlDb3B5TXVsdGlJbnNlcnRCdWZmZXIgKmJ1ZmZlciA9IHJyaS0+cmlfQ29weU11 bHRpSW5zZXJ0QnVmZmVyOworCVRhYmxlSW5zZXJ0U3RhdGUgKmlzdGF0ZSA9IGJ1ZmZlci0+aXN0 YXRlOworCWludDMyIGN1cl9zbG90cyA9IGlzdGF0ZS0+bWlzdGF0ZS0+Y3VyX3Nsb3RzOwogCi0J LyogU2luY2Ugd2Ugb25seSBjcmVhdGUgc2xvdHMgb24gZGVtYW5kLCBqdXN0IGRyb3AgdGhlIG5v bi1udWxsIG9uZXMuICovCi0JZm9yIChpID0gMDsgaSA8IE1BWF9CVUZGRVJFRF9UVVBMRVMgJiYg YnVmZmVyLT5zbG90c1tpXSAhPSBOVUxMOyBpKyspCi0JCUV4ZWNEcm9wU2luZ2xlVHVwbGVUYWJs ZVNsb3QoYnVmZmVyLT5zbG90c1tpXSk7CisJYnVmZmVyLT5saW5lbm9zW2lzdGF0ZS0+bWlzdGF0 ZS0+Y3VyX3Nsb3RzXSA9IGNzdGF0ZS0+Y3VyX2xpbmVubzsKKwlpc3RhdGUtPm1pc3RhdGUtPmN1 cl90dXBfc2l6ZSA9IGNzdGF0ZS0+bGluZV9idWYubGVuOwogCi0JdGFibGVfZmluaXNoX2J1bGtf aW5zZXJ0KGJ1ZmZlci0+cmVzdWx0UmVsSW5mby0+cmlfUmVsYXRpb25EZXNjLAotCQkJCQkJCSBt aWluZm8tPnRpX29wdGlvbnMpOworCXRhYmxlX211bHRpX2luc2VydF92MihidWZmZXItPmlzdGF0 ZSwgc2xvdCk7CiAKLQlwZnJlZShidWZmZXIpOworCWlmIChpc3RhdGUtPm1pc3RhdGUtPmZsdXNo ZWQpCisJCUhhbmRsZUFmdGVyUm93RXZlbnRzKHJyaSwgZXN0YXRlLCBjc3RhdGUsIGN1cl9zbG90 cyk7CiB9CiAKLS8qCi0gKiBXcml0ZSBvdXQgYWxsIHN0b3JlZCB0dXBsZXMgaW4gYWxsIGJ1ZmZl cnMgb3V0IHRvIHRoZSB0YWJsZXMuCi0gKgotICogT25jZSBmbHVzaGVkIHdlIGFsc28gdHJpbSB0 aGUgdHJhY2tlZCBidWZmZXJzIGxpc3QgZG93biB0byBzaXplIGJ5IHJlbW92aW5nCi0gKiB0aGUg YnVmZmVycyBjcmVhdGVkIGVhcmxpZXN0IGZpcnN0LgotICoKLSAqIENhbGxlcnMgc2hvdWxkIHBh c3MgJ2N1cnJfcnJpJyBpcyB0aGUgUmVzdWx0UmVsSW5mbyB0aGF0J3MgY3VycmVudGx5IGJlaW5n Ci0gKiB1c2VkLiAgV2hlbiBjbGVhbmluZyB1cCBvbGQgYnVmZmVycyB3ZSdsbCBuZXZlciByZW1v dmUgdGhlIG9uZSBmb3IKLSAqICdjdXJyX3JyaScuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZAot Q29weU11bHRpSW5zZXJ0SW5mb0ZsdXNoKENvcHlNdWx0aUluc2VydEluZm8gKm1paW5mbywgUmVz dWx0UmVsSW5mbyAqY3Vycl9ycmkpCitzdGF0aWMgdm9pZAorQ29weU11bGl0SW5zZXJ0Rmx1c2hC dWZmZXJzKExpc3QgKiptaXJyaSwgUmVzdWx0UmVsSW5mbyAqY3Vycl9ycmksCisJCQkJCQkJQ29w eUZyb21TdGF0ZSBjc3RhdGUsIEVTdGF0ZSAqZXN0YXRlKQogewogCUxpc3RDZWxsICAgKmxjOwog Ci0JZm9yZWFjaChsYywgbWlpbmZvLT5tdWx0aUluc2VydEJ1ZmZlcnMpCisJZm9yZWFjaChsYywg Km1pcnJpKQogCXsKLQkJQ29weU11bHRpSW5zZXJ0QnVmZmVyICpidWZmZXIgPSAoQ29weU11bHRp SW5zZXJ0QnVmZmVyICopIGxmaXJzdChsYyk7CisJCVJlc3VsdFJlbEluZm8gKnJyaSA9IGxmaXJz dChsYyk7CisJCUNvcHlNdWx0aUluc2VydEJ1ZmZlciAqYnVmZmVyID0gcnJpLT5yaV9Db3B5TXVs dGlJbnNlcnRCdWZmZXI7CisJCVRhYmxlSW5zZXJ0U3RhdGUgKmlzdGF0ZSA9IGJ1ZmZlci0+aXN0 YXRlOworCQlpbnQzMiBjdXJfc2xvdHMgPSBpc3RhdGUtPm1pc3RhdGUtPmN1cl9zbG90czsKIAot CQlDb3B5TXVsdGlJbnNlcnRCdWZmZXJGbHVzaChtaWluZm8sIGJ1ZmZlcik7Ci0JfQorCQl0YWJs ZV9tdWx0aV9pbnNlcnRfZmx1c2goaXN0YXRlKTsKIAotCW1paW5mby0+YnVmZmVyZWRUdXBsZXMg PSAwOwotCW1paW5mby0+YnVmZmVyZWRCeXRlcyA9IDA7CisJCWlmIChpc3RhdGUtPm1pc3RhdGUt PmZsdXNoZWQpCisJCQlIYW5kbGVBZnRlclJvd0V2ZW50cyhycmksIGVzdGF0ZSwgY3N0YXRlLCBj dXJfc2xvdHMpOworCX0KIAogCS8qCiAJICogVHJpbSB0aGUgbGlzdCBvZiB0cmFja2VkIGJ1ZmZl cnMgZG93biBpZiBpdCBleGNlZWRzIHRoZSBsaW1pdC4gIEhlcmUgd2UKQEAgLTQzMiw4NyArMzE1 LDYyIEBAIENvcHlNdWx0aUluc2VydEluZm9GbHVzaChDb3B5TXVsdGlJbnNlcnRJbmZvICptaWlu Zm8sIFJlc3VsdFJlbEluZm8gKmN1cnJfcnJpKQogCSAqIGxpa2VseSB0aGF0IHRoZXNlIG9sZGVy IG9uZXMgd2lsbCBiZSBuZWVkZWQgdGhhbiB0aGUgb25lcyB0aGF0IHdlcmUKIAkgKiBqdXN0IGNy ZWF0ZWQuCiAJICovCi0Jd2hpbGUgKGxpc3RfbGVuZ3RoKG1paW5mby0+bXVsdGlJbnNlcnRCdWZm ZXJzKSA+IE1BWF9QQVJUSVRJT05fQlVGRkVSUykKKwl3aGlsZSAobGlzdF9sZW5ndGgoKm1pcnJp KSA+IE1BWF9QQVJUSVRJT05fQlVGRkVSUykKIAl7CisJCVJlc3VsdFJlbEluZm8gKnJyaTsKIAkJ Q29weU11bHRpSW5zZXJ0QnVmZmVyICpidWZmZXI7CisJCVRhYmxlSW5zZXJ0U3RhdGUgKmlzdGF0 ZTsKKwkJaW50IHRpX29wdGlvbnM7CiAKLQkJYnVmZmVyID0gKENvcHlNdWx0aUluc2VydEJ1ZmZl ciAqKSBsaW5pdGlhbChtaWluZm8tPm11bHRpSW5zZXJ0QnVmZmVycyk7CisJCXJyaSA9IChSZXN1 bHRSZWxJbmZvICopIGxpbml0aWFsKCptaXJyaSk7CiAKIAkJLyoKIAkJICogV2UgbmV2ZXIgd2Fu dCB0byByZW1vdmUgdGhlIGJ1ZmZlciB0aGF0J3MgY3VycmVudGx5IGJlaW5nIHVzZWQsIHNvCiAJ CSAqIGlmIHdlIGhhcHBlbiB0byBmaW5kIHRoYXQgdGhlbiBtb3ZlIGl0IHRvIHRoZSBlbmQgb2Yg dGhlIGxpc3QuCiAJCSAqLwotCQlpZiAoYnVmZmVyLT5yZXN1bHRSZWxJbmZvID09IGN1cnJfcnJp KQorCQlpZiAocnJpID09IGN1cnJfcnJpKQogCQl7Ci0JCQltaWluZm8tPm11bHRpSW5zZXJ0QnVm ZmVycyA9IGxpc3RfZGVsZXRlX2ZpcnN0KG1paW5mby0+bXVsdGlJbnNlcnRCdWZmZXJzKTsKLQkJ CW1paW5mby0+bXVsdGlJbnNlcnRCdWZmZXJzID0gbGFwcGVuZChtaWluZm8tPm11bHRpSW5zZXJ0 QnVmZmVycywgYnVmZmVyKTsKLQkJCWJ1ZmZlciA9IChDb3B5TXVsdGlJbnNlcnRCdWZmZXIgKikg bGluaXRpYWwobWlpbmZvLT5tdWx0aUluc2VydEJ1ZmZlcnMpOworCQkJKm1pcnJpID0gbGlzdF9k ZWxldGVfZmlyc3QoKm1pcnJpKTsKKwkJCSptaXJyaSA9IGxhcHBlbmQoKm1pcnJpLCBycmkpOwor CQkJcnJpID0gKFJlc3VsdFJlbEluZm8gKikgbGluaXRpYWwoKm1pcnJpKTsKIAkJfQogCi0JCUNv cHlNdWx0aUluc2VydEJ1ZmZlckNsZWFudXAobWlpbmZvLCBidWZmZXIpOwotCQltaWluZm8tPm11 bHRpSW5zZXJ0QnVmZmVycyA9IGxpc3RfZGVsZXRlX2ZpcnN0KG1paW5mby0+bXVsdGlJbnNlcnRC dWZmZXJzKTsKLQl9Ci19CisJCWJ1ZmZlciA9IHJyaS0+cmlfQ29weU11bHRpSW5zZXJ0QnVmZmVy OworCQlpc3RhdGUgPSBidWZmZXItPmlzdGF0ZTsKKwkJaXN0YXRlLT5taXN0YXRlLT5jbGVhcl9z bG90cyA9IHRydWU7CisJCXRpX29wdGlvbnMgPSBpc3RhdGUtPm9wdGlvbnM7CiAKLS8qCi0gKiBD bGVhbnVwIGFsbG9jYXRlZCBidWZmZXJzIGFuZCBmcmVlIG1lbW9yeQotICovCi1zdGF0aWMgaW5s aW5lIHZvaWQKLUNvcHlNdWx0aUluc2VydEluZm9DbGVhbnVwKENvcHlNdWx0aUluc2VydEluZm8g Km1paW5mbykKLXsKLQlMaXN0Q2VsbCAgICpsYzsKKwkJdGFibGVfaW5zZXJ0X2VuZChpc3RhdGUp OwogCi0JZm9yZWFjaChsYywgbWlpbmZvLT5tdWx0aUluc2VydEJ1ZmZlcnMpCi0JCUNvcHlNdWx0 aUluc2VydEJ1ZmZlckNsZWFudXAobWlpbmZvLCBsZmlyc3QobGMpKTsKKwkJdGFibGVfZmluaXNo X2J1bGtfaW5zZXJ0KHJyaS0+cmlfUmVsYXRpb25EZXNjLCB0aV9vcHRpb25zKTsKIAotCWxpc3Rf ZnJlZShtaWluZm8tPm11bHRpSW5zZXJ0QnVmZmVycyk7CisJCSptaXJyaSA9IGxpc3RfZGVsZXRl X2ZpcnN0KCptaXJyaSk7CisJfQogfQogCi0vKgotICogR2V0IHRoZSBuZXh0IFR1cGxlVGFibGVT bG90IHRoYXQgdGhlIG5leHQgdHVwbGUgc2hvdWxkIGJlIHN0b3JlZCBpbi4KLSAqCi0gKiBDYWxs ZXJzIG11c3QgZW5zdXJlIHRoYXQgdGhlIGJ1ZmZlciBpcyBub3QgZnVsbC4KLSAqCi0gKiBOb3Rl OiAnbWlpbmZvJyBpcyB1bnVzZWQgYnV0IGhhcyBiZWVuIGluY2x1ZGVkIGZvciBjb25zaXN0ZW5j eSB3aXRoIHRoZQotICogb3RoZXIgZnVuY3Rpb25zIGluIHRoaXMgYXJlYS4KLSAqLwotc3RhdGlj IGlubGluZSBUdXBsZVRhYmxlU2xvdCAqCi1Db3B5TXVsdGlJbnNlcnRJbmZvTmV4dEZyZWVTbG90 KENvcHlNdWx0aUluc2VydEluZm8gKm1paW5mbywKLQkJCQkJCQkJUmVzdWx0UmVsSW5mbyAqcnJp KQorc3RhdGljIHZvaWQKK0NvcHlNdWxpdEluc2VydERyb3BCdWZmZXJzKExpc3QgKm1pcnJpKQog ewotCUNvcHlNdWx0aUluc2VydEJ1ZmZlciAqYnVmZmVyID0gcnJpLT5yaV9Db3B5TXVsdGlJbnNl cnRCdWZmZXI7Ci0JaW50CQkJbnVzZWQgPSBidWZmZXItPm51c2VkOwotCi0JQXNzZXJ0KGJ1ZmZl ciAhPSBOVUxMKTsKLQlBc3NlcnQobnVzZWQgPCBNQVhfQlVGRkVSRURfVFVQTEVTKTsKKwlMaXN0 Q2VsbCAgICpsYzsKIAotCWlmIChidWZmZXItPnNsb3RzW251c2VkXSA9PSBOVUxMKQotCQlidWZm ZXItPnNsb3RzW251c2VkXSA9IHRhYmxlX3Nsb3RfY3JlYXRlKHJyaS0+cmlfUmVsYXRpb25EZXNj LCBOVUxMKTsKLQlyZXR1cm4gYnVmZmVyLT5zbG90c1tudXNlZF07Ci19CisJZm9yZWFjaChsYywg bWlycmkpCisJeworCQlpbnQgdGlfb3B0aW9uczsKKwkJUmVzdWx0UmVsSW5mbyAqcnJpID0gbGZp cnN0KGxjKTsKKwkJQ29weU11bHRpSW5zZXJ0QnVmZmVyICpidWZmZXIgPSBycmktPnJpX0NvcHlN dWx0aUluc2VydEJ1ZmZlcjsKKwkJVGFibGVJbnNlcnRTdGF0ZSAqaXN0YXRlID0gYnVmZmVyLT5p c3RhdGU7CiAKLS8qCi0gKiBSZWNvcmQgdGhlIHByZXZpb3VzbHkgcmVzZXJ2ZWQgVHVwbGVUYWJs ZVNsb3QgdGhhdCB3YXMgcmVzZXJ2ZWQgYnkKLSAqIENvcHlNdWx0aUluc2VydEluZm9OZXh0RnJl ZVNsb3QgYXMgYmVpbmcgY29uc3VtZWQuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZAotQ29weU11 bHRpSW5zZXJ0SW5mb1N0b3JlKENvcHlNdWx0aUluc2VydEluZm8gKm1paW5mbywgUmVzdWx0UmVs SW5mbyAqcnJpLAotCQkJCQkJIFR1cGxlVGFibGVTbG90ICpzbG90LCBpbnQgdHVwbGVuLCB1aW50 NjQgbGluZW5vKQotewotCUNvcHlNdWx0aUluc2VydEJ1ZmZlciAqYnVmZmVyID0gcnJpLT5yaV9D b3B5TXVsdGlJbnNlcnRCdWZmZXI7CisJCWlzdGF0ZS0+bWlzdGF0ZS0+Y2xlYXJfc2xvdHMgPSB0 cnVlOworCQl0aV9vcHRpb25zID0gaXN0YXRlLT5vcHRpb25zOwogCi0JQXNzZXJ0KGJ1ZmZlciAh PSBOVUxMKTsKLQlBc3NlcnQoc2xvdCA9PSBidWZmZXItPnNsb3RzW2J1ZmZlci0+bnVzZWRdKTsK KwkJdGFibGVfaW5zZXJ0X2VuZChpc3RhdGUpOwogCi0JLyogU3RvcmUgdGhlIGxpbmUgbnVtYmVy IHNvIHdlIGNhbiBwcm9wZXJseSByZXBvcnQgYW55IGVycm9ycyBsYXRlciAqLwotCWJ1ZmZlci0+ bGluZW5vc1tidWZmZXItPm51c2VkXSA9IGxpbmVubzsKKwkJdGFibGVfZmluaXNoX2J1bGtfaW5z ZXJ0KHJyaS0+cmlfUmVsYXRpb25EZXNjLCB0aV9vcHRpb25zKTsKIAotCS8qIFJlY29yZCB0aGlz IHNsb3QgYXMgYmVpbmcgdXNlZCAqLwotCWJ1ZmZlci0+bnVzZWQrKzsKKwkJcGZyZWUoYnVmZmVy KTsKKwl9CiAKLQkvKiBVcGRhdGUgaG93IG1hbnkgdHVwbGVzIGFyZSBzdG9yZWQgYW5kIHRoZWly IHNpemUgKi8KLQltaWluZm8tPmJ1ZmZlcmVkVHVwbGVzKys7Ci0JbWlpbmZvLT5idWZmZXJlZEJ5 dGVzICs9IHR1cGxlbjsKKwlsaXN0X2ZyZWUobWlycmkpOwogfQogCiAvKgpAQCAtNTI3LDIwICsz ODUsMjAgQEAgQ29weUZyb20oQ29weUZyb21TdGF0ZSBjc3RhdGUpCiAJRVN0YXRlCSAgICplc3Rh dGUgPSBDcmVhdGVFeGVjdXRvclN0YXRlKCk7IC8qIGZvciBFeGVjQ29uc3RyYWludHMoKSAqLwog CU1vZGlmeVRhYmxlU3RhdGUgKm10c3RhdGU7CiAJRXhwckNvbnRleHQgKmVjb250ZXh0OwotCVR1 cGxlVGFibGVTbG90ICpzaW5nbGVzbG90ID0gTlVMTDsKKwlUdXBsZVRhYmxlU2xvdCAqc2xvdCA9 IE5VTEw7CiAJTWVtb3J5Q29udGV4dCBvbGRjb250ZXh0ID0gQ3VycmVudE1lbW9yeUNvbnRleHQ7 CiAKIAlQYXJ0aXRpb25UdXBsZVJvdXRpbmcgKnByb3V0ZSA9IE5VTEw7CiAJRXJyb3JDb250ZXh0 Q2FsbGJhY2sgZXJyY2FsbGJhY2s7CiAJQ29tbWFuZElkCW15Y2lkID0gR2V0Q3VycmVudENvbW1h bmRJZCh0cnVlKTsKIAlpbnQJCQl0aV9vcHRpb25zID0gMDsgLyogc3RhcnQgd2l0aCBkZWZhdWx0 IG9wdGlvbnMgZm9yIGluc2VydCAqLwotCUJ1bGtJbnNlcnRTdGF0ZSBiaXN0YXRlID0gTlVMTDsK IAlDb3B5SW5zZXJ0TWV0aG9kIGluc2VydE1ldGhvZDsKLQlDb3B5TXVsdGlJbnNlcnRJbmZvIG11 bHRpSW5zZXJ0SW5mbyA9IHswfTsJLyogcGFjaWZ5IGNvbXBpbGVyICovCiAJdWludDY0CQlwcm9j ZXNzZWQgPSAwOwogCWJvb2wJCWhhc19iZWZvcmVfaW5zZXJ0X3Jvd190cmlnOwogCWJvb2wJCWhh c19pbnN0ZWFkX2luc2VydF9yb3dfdHJpZzsKIAlib29sCQlsZWFmcGFydF91c2VfbXVsdGlfaW5z ZXJ0ID0gZmFsc2U7CisJTGlzdAkgICAqbXVsdGlfaW5zZXJ0X3JyaXMgPSBOVUxMOworCVRhYmxl SW5zZXJ0U3RhdGUgKmlzdGF0ZSA9IE5VTEw7CiAKIAlBc3NlcnQoY3N0YXRlLT5yZWwpOwogCUFz c2VydChsaXN0X2xlbmd0aChjc3RhdGUtPnJhbmdlX3RhYmxlKSA9PSAxKTsKQEAgLTcyMyw3ICs1 ODEsNyBAQCBDb3B5RnJvbShDb3B5RnJvbVN0YXRlIGNzdGF0ZSkKIAkJICogRm9yIHBhcnRpdGlv bmVkIHRhYmxlcyB3ZSBjYW4ndCBzdXBwb3J0IG11bHRpLWluc2VydHMgd2hlbiB0aGVyZQogCQkg KiBhcmUgYW55IHN0YXRlbWVudCBsZXZlbCBpbnNlcnQgdHJpZ2dlcnMuIEl0IG1pZ2h0IGJlIHBv c3NpYmxlIHRvCiAJCSAqIGFsbG93IHBhcnRpdGlvbmVkIHRhYmxlcyB3aXRoIHN1Y2ggdHJpZ2dl cnMgaW4gdGhlIGZ1dHVyZSwgYnV0IGZvcgotCQkgKiBub3csIENvcHlNdWx0aUluc2VydEluZm9G bHVzaCBleHBlY3RzIHRoYXQgYW55IGJlZm9yZSByb3cgaW5zZXJ0CisJCSAqIG5vdywgQ29weU11 bGl0SW5zZXJ0Rmx1c2hCdWZmZXJzIGV4cGVjdHMgdGhhdCBhbnkgYmVmb3JlIHJvdyBpbnNlcnQK IAkJICogYW5kIHN0YXRlbWVudCBsZXZlbCBpbnNlcnQgdHJpZ2dlcnMgYXJlIG9uIHRoZSBzYW1l IHJlbGF0aW9uLgogCQkgKi8KIAkJaW5zZXJ0TWV0aG9kID0gQ0lNX1NJTkdMRTsKQEAgLTc3MSwy MiArNjI5LDIyIEBAIENvcHlGcm9tKENvcHlGcm9tU3RhdGUgY3N0YXRlKQogCQllbHNlCiAJCQlp bnNlcnRNZXRob2QgPSBDSU1fTVVMVEk7CiAKLQkJQ29weU11bHRpSW5zZXJ0SW5mb0luaXQoJm11 bHRpSW5zZXJ0SW5mbywgcmVzdWx0UmVsSW5mbywgY3N0YXRlLAotCQkJCQkJCQllc3RhdGUsIG15 Y2lkLCB0aV9vcHRpb25zKTsKKwkJLyoKKwkJKiBPbmx5IHNldHVwIHRoZSBidWZmZXIgd2hlbiBu b3QgZGVhbGluZyB3aXRoIGEgcGFydGl0aW9uZWQgdGFibGUuCisJCSogQnVmZmVycyBmb3IgcGFy dGl0aW9uZWQgdGFibGVzIHdpbGwganVzdCBiZSBzZXR1cCB3aGVuIHdlIG5lZWQgdG8KKwkJKiBz ZW5kIHR1cGxlcyB0aGVpciB3YXkgZm9yIHRoZSBmaXJzdCB0aW1lLgorCQkqLworCQlpZiAoIXBy b3V0ZSkKKwkJCUluaXRDb3B5TXVsdGlJbnNlcnRCdWZmZXJJbmZvKCZtdWx0aV9pbnNlcnRfcnJp cywgcmVzdWx0UmVsSW5mbywKKwkJCQkJCQkJCQkgIG15Y2lkLCB0aV9vcHRpb25zKTsKIAl9CiAK IAkvKgotCSAqIElmIG5vdCB1c2luZyBiYXRjaCBtb2RlICh3aGljaCBhbGxvY2F0ZXMgc2xvdHMg YXMgbmVlZGVkKSBzZXQgdXAgYQotCSAqIHR1cGxlIHNsb3QgdG9vLiBXaGVuIGluc2VydGluZyBp bnRvIGEgcGFydGl0aW9uZWQgdGFibGUsIHdlIGFsc28gbmVlZAotCSAqIG9uZSwgZXZlbiBpZiB3 ZSBtaWdodCBiYXRjaCBpbnNlcnQsIHRvIHJlYWQgdGhlIHR1cGxlIGluIHRoZSByb290Ci0JICog cGFydGl0aW9uJ3MgZm9ybS4KKwkgKiBTZXQgdXAgYSB0dXBsZSBzbG90IHRvIHdoaWNoIHRoZSBp bnB1dCBkYXRhIGZyb20gY29weSBzdHJlYW0gaXMgcmVhZAorCSAqIGludG8gYW5kIHVzZWQgZm9y IGluc2VydHMgaW50byB0YWJsZS4KIAkgKi8KLQlpZiAoaW5zZXJ0TWV0aG9kID09IENJTV9TSU5H TEUgfHwgaW5zZXJ0TWV0aG9kID09IENJTV9NVUxUSV9DT05ESVRJT05BTCkKLQl7Ci0JCXNpbmds ZXNsb3QgPSB0YWJsZV9zbG90X2NyZWF0ZShyZXN1bHRSZWxJbmZvLT5yaV9SZWxhdGlvbkRlc2Ms Ci0JCQkJCQkJCQkgICAmZXN0YXRlLT5lc190dXBsZVRhYmxlKTsKLQkJYmlzdGF0ZSA9IEdldEJ1 bGtJbnNlcnRTdGF0ZSgpOwotCX0KKwlzbG90ID0gdGFibGVfc2xvdF9jcmVhdGUocmVzdWx0UmVs SW5mby0+cmlfUmVsYXRpb25EZXNjLAorCQkJCQkJCQkJJmVzdGF0ZS0+ZXNfdHVwbGVUYWJsZSk7 CiAKIAloYXNfYmVmb3JlX2luc2VydF9yb3dfdHJpZyA9IChyZXN1bHRSZWxJbmZvLT5yaV9Ucmln RGVzYyAmJgogCQkJCQkJCQkgIHJlc3VsdFJlbEluZm8tPnJpX1RyaWdEZXNjLT50cmlnX2luc2Vy dF9iZWZvcmVfcm93KTsKQEAgLTgyNCwxOSArNjgyLDggQEAgQ29weUZyb20oQ29weUZyb21TdGF0 ZSBjc3RhdGUpCiAJCVJlc2V0UGVyVHVwbGVFeHByQ29udGV4dChlc3RhdGUpOwogCiAJCS8qIHNl bGVjdCBzbG90IHRvIChpbml0aWFsbHkpIGxvYWQgcm93IGludG8gKi8KLQkJaWYgKGluc2VydE1l dGhvZCA9PSBDSU1fU0lOR0xFIHx8IHByb3V0ZSkKLQkJewotCQkJbXlzbG90ID0gc2luZ2xlc2xv dDsKLQkJCUFzc2VydChteXNsb3QgIT0gTlVMTCk7Ci0JCX0KLQkJZWxzZQotCQl7Ci0JCQlBc3Nl cnQocmVzdWx0UmVsSW5mbyA9PSB0YXJnZXRfcmVzdWx0UmVsSW5mbyk7Ci0JCQlBc3NlcnQoaW5z ZXJ0TWV0aG9kID09IENJTV9NVUxUSSk7Ci0KLQkJCW15c2xvdCA9IENvcHlNdWx0aUluc2VydElu Zm9OZXh0RnJlZVNsb3QoJm11bHRpSW5zZXJ0SW5mbywKLQkJCQkJCQkJCQkJCQkgcmVzdWx0UmVs SW5mbyk7Ci0JCX0KKwkJbXlzbG90ID0gc2xvdDsKKwkJQXNzZXJ0KG15c2xvdCAhPSBOVUxMKTsK IAogCQkvKgogCQkgKiBTd2l0Y2ggdG8gcGVyLXR1cGxlIGNvbnRleHQgYmVmb3JlIGNhbGxpbmcg TmV4dENvcHlGcm9tLCB3aGljaCBkb2VzCkBAIC05MDQsMjEgKzc1MSwyMiBAQCBDb3B5RnJvbShD b3B5RnJvbVN0YXRlIGNzdGF0ZSkKIAkJCQlpZiAobGVhZnBhcnRfdXNlX211bHRpX2luc2VydCkK IAkJCQl7CiAJCQkJCWlmIChyZXN1bHRSZWxJbmZvLT5yaV9Db3B5TXVsdGlJbnNlcnRCdWZmZXIg PT0gTlVMTCkKLQkJCQkJCUNvcHlNdWx0aUluc2VydEluZm9TZXR1cEJ1ZmZlcigmbXVsdGlJbnNl cnRJbmZvLAotCQkJCQkJCQkJCQkJCSAgIHJlc3VsdFJlbEluZm8pOworCQkJCQkJSW5pdENvcHlN dWx0aUluc2VydEJ1ZmZlckluZm8oJm11bHRpX2luc2VydF9ycmlzLAorCQkJCQkJCQkJCQkJCSAg cmVzdWx0UmVsSW5mbywgbXljaWQsCisJCQkJCQkJCQkJCQkJICB0aV9vcHRpb25zKTsKIAkJCQl9 Ci0JCQkJZWxzZSBpZiAoaW5zZXJ0TWV0aG9kID09IENJTV9NVUxUSV9DT05ESVRJT05BTCAmJgot CQkJCQkJICFDb3B5TXVsdGlJbnNlcnRJbmZvSXNFbXB0eSgmbXVsdGlJbnNlcnRJbmZvKSkKKwkJ CQllbHNlIGlmIChpbnNlcnRNZXRob2QgPT0gQ0lNX01VTFRJX0NPTkRJVElPTkFMKQogCQkJCXsK IAkJCQkJLyoKIAkJCQkJICogRmx1c2ggcGVuZGluZyBpbnNlcnRzIGlmIHRoaXMgcGFydGl0aW9u IGNhbid0IHVzZQogCQkJCQkgKiBiYXRjaGluZywgc28gcm93cyBhcmUgdmlzaWJsZSB0byB0cmln Z2VycyBldGMuCiAJCQkJCSAqLwotCQkJCQlDb3B5TXVsdGlJbnNlcnRJbmZvRmx1c2goJm11bHRp SW5zZXJ0SW5mbywgcmVzdWx0UmVsSW5mbyk7CisJCQkJCUNvcHlNdWxpdEluc2VydEZsdXNoQnVm ZmVycygmbXVsdGlfaW5zZXJ0X3JyaXMsCisJCQkJCQkJCQkJCQlyZXN1bHRSZWxJbmZvLCBjc3Rh dGUsIGVzdGF0ZSk7CiAJCQkJfQogCi0JCQkJaWYgKGJpc3RhdGUgIT0gTlVMTCkKLQkJCQkJUmVs ZWFzZUJ1bGtJbnNlcnRTdGF0ZVBpbihiaXN0YXRlKTsKKwkJCQlpZiAoaXN0YXRlICYmIGlzdGF0 ZS0+YmlzdGF0ZSkKKwkJCQkJUmVsZWFzZUJ1bGtJbnNlcnRTdGF0ZVBpbihpc3RhdGUtPmJpc3Rh dGUpOwogCQkJCXByZXZSZXN1bHRSZWxJbmZvID0gcmVzdWx0UmVsSW5mbzsKIAkJCX0KIApAQCAt OTYwLDggKzgwOCw4IEBAIENvcHlGcm9tKENvcHlGcm9tU3RhdGUgY3N0YXRlKQogCQkJCS8qIG5v IG90aGVyIHBhdGggYXZhaWxhYmxlIGZvciBwYXJ0aXRpb25lZCB0YWJsZSAqLwogCQkJCUFzc2Vy dChpbnNlcnRNZXRob2QgPT0gQ0lNX01VTFRJX0NPTkRJVElPTkFMKTsKIAotCQkJCWJhdGNoc2xv dCA9IENvcHlNdWx0aUluc2VydEluZm9OZXh0RnJlZVNsb3QoJm11bHRpSW5zZXJ0SW5mbywKLQkJ CQkJCQkJCQkJCQkJCXJlc3VsdFJlbEluZm8pOworCQkJCWJhdGNoc2xvdCA9IHRhYmxlX3Nsb3Rf Y3JlYXRlKHJlc3VsdFJlbEluZm8tPnJpX1JlbGF0aW9uRGVzYywKKwkJCQkJCQkJCQkJICAmZXN0 YXRlLT5lc190dXBsZVRhYmxlKTsKIAogCQkJCWlmIChtYXAgIT0gTlVMTCkKIAkJCQkJbXlzbG90 ID0gZXhlY3V0ZV9hdHRyX21hcF9zbG90KG1hcC0+YXR0ck1hcCwgbXlzbG90LApAQCAtMTAzMywy NCArODgxLDkgQEAgQ29weUZyb20oQ29weUZyb21TdGF0ZSBjc3RhdGUpCiAJCQkJLyogU3RvcmUg dGhlIHNsb3QgaW4gdGhlIG11bHRpLWluc2VydCBidWZmZXIsIHdoZW4gZW5hYmxlZC4gKi8KIAkJ CQlpZiAoaW5zZXJ0TWV0aG9kID09IENJTV9NVUxUSSB8fCBsZWFmcGFydF91c2VfbXVsdGlfaW5z ZXJ0KQogCQkJCXsKLQkJCQkJLyoKLQkJCQkJICogVGhlIHNsb3QgcHJldmlvdXNseSBtaWdodCBw b2ludCBpbnRvIHRoZSBwZXItdHVwbGUKLQkJCQkJICogY29udGV4dC4gRm9yIGJhdGNoaW5nIGl0 IG5lZWRzIHRvIGJlIGxvbmdlciBsaXZlZC4KLQkJCQkJICovCi0JCQkJCUV4ZWNNYXRlcmlhbGl6 ZVNsb3QobXlzbG90KTsKLQogCQkJCQkvKiBBZGQgdGhpcyB0dXBsZSB0byB0aGUgdHVwbGUgYnVm ZmVyICovCi0JCQkJCUNvcHlNdWx0aUluc2VydEluZm9TdG9yZSgmbXVsdGlJbnNlcnRJbmZvLAot CQkJCQkJCQkJCQkgcmVzdWx0UmVsSW5mbywgbXlzbG90LAotCQkJCQkJCQkJCQkgY3N0YXRlLT5s aW5lX2J1Zi5sZW4sCi0JCQkJCQkJCQkJCSBjc3RhdGUtPmN1cl9saW5lbm8pOwotCi0JCQkJCS8q Ci0JCQkJCSAqIElmIGVub3VnaCBpbnNlcnRzIGhhdmUgcXVldWVkIHVwLCB0aGVuIGZsdXNoIGFs bAotCQkJCQkgKiBidWZmZXJzIG91dCB0byB0aGVpciB0YWJsZXMuCi0JCQkJCSAqLwotCQkJCQlp ZiAoQ29weU11bHRpSW5zZXJ0SW5mb0lzRnVsbCgmbXVsdGlJbnNlcnRJbmZvKSkKLQkJCQkJCUNv cHlNdWx0aUluc2VydEluZm9GbHVzaCgmbXVsdGlJbnNlcnRJbmZvLCByZXN1bHRSZWxJbmZvKTsK KwkJCQkJQ29weU11bHRpSW5zZXJ0QnVmZmVyVHVwbGUocmVzdWx0UmVsSW5mbywgbXlzbG90LCBj c3RhdGUsCisJCQkJCQkJCQkJCSAgIGVzdGF0ZSk7CiAJCQkJfQogCQkJCWVsc2UKIAkJCQl7CkBA IC0xMDc2LDkgKzkwOSwyMSBAQCBDb3B5RnJvbShDb3B5RnJvbVN0YXRlIGNzdGF0ZSkKIAkJCQkJ fQogCQkJCQllbHNlCiAJCQkJCXsKKwkJCQkJCWlmICghaXN0YXRlKQorCQkJCQkJeworCQkJCQkJ CWlzdGF0ZSA9IHRhYmxlX2luc2VydF9iZWdpbihyZXN1bHRSZWxJbmZvLT5yaV9SZWxhdGlvbkRl c2MsCisJCQkJCQkJCQkJCQkJCW15Y2lkLAorCQkJCQkJCQkJCQkJCQl0aV9vcHRpb25zLAorCQkJ CQkJCQkJCQkJCQl0cnVlLAorCQkJCQkJCQkJCQkJCQlmYWxzZSwKKwkJCQkJCQkJCQkJCQkJLTEs CisJCQkJCQkJCQkJCQkJCS0xKTsKKwkJCQkJCX0KKworCQkJCQkJaXN0YXRlLT5yZWwgPSByZXN1 bHRSZWxJbmZvLT5yaV9SZWxhdGlvbkRlc2M7CisKIAkJCQkJCS8qIE9LLCBzdG9yZSB0aGUgdHVw bGUgYW5kIGNyZWF0ZSBpbmRleCBlbnRyaWVzIGZvciBpdCAqLwotCQkJCQkJdGFibGVfdHVwbGVf aW5zZXJ0KHJlc3VsdFJlbEluZm8tPnJpX1JlbGF0aW9uRGVzYywKLQkJCQkJCQkJCQkgICBteXNs b3QsIG15Y2lkLCB0aV9vcHRpb25zLCBiaXN0YXRlKTsKKwkJCQkJCXRhYmxlX2luc2VydF92Mihp c3RhdGUsIG15c2xvdCk7CiAKIAkJCQkJCWlmIChyZXN1bHRSZWxJbmZvLT5yaV9OdW1JbmRpY2Vz ID4gMCkKIAkJCQkJCQlyZWNoZWNrSW5kZXhlcyA9IEV4ZWNJbnNlcnRJbmRleFR1cGxlcyhyZXN1 bHRSZWxJbmZvLApAQCAtMTEwOCwxNiArOTUzLDE0IEBAIENvcHlGcm9tKENvcHlGcm9tU3RhdGUg Y3N0YXRlKQogCiAJLyogRmx1c2ggYW55IHJlbWFpbmluZyBidWZmZXJlZCB0dXBsZXMgKi8KIAlp ZiAoaW5zZXJ0TWV0aG9kICE9IENJTV9TSU5HTEUpCi0JewotCQlpZiAoIUNvcHlNdWx0aUluc2Vy dEluZm9Jc0VtcHR5KCZtdWx0aUluc2VydEluZm8pKQotCQkJQ29weU11bHRpSW5zZXJ0SW5mb0Zs dXNoKCZtdWx0aUluc2VydEluZm8sIE5VTEwpOwotCX0KKwkJQ29weU11bGl0SW5zZXJ0Rmx1c2hC dWZmZXJzKCZtdWx0aV9pbnNlcnRfcnJpcywgcmVzdWx0UmVsSW5mbywKKwkJCQkJCQkJCWNzdGF0 ZSwgZXN0YXRlKTsKIAogCS8qIERvbmUsIGNsZWFuIHVwICovCiAJZXJyb3JfY29udGV4dF9zdGFj ayA9IGVycmNhbGxiYWNrLnByZXZpb3VzOwogCi0JaWYgKGJpc3RhdGUgIT0gTlVMTCkKLQkJRnJl ZUJ1bGtJbnNlcnRTdGF0ZShiaXN0YXRlKTsKKwlpZiAoaXN0YXRlKQorCQl0YWJsZV9pbnNlcnRf ZW5kKGlzdGF0ZSk7CiAKIAlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7CiAKQEAg LTExNDQsNyArOTg3LDcgQEAgQ29weUZyb20oQ29weUZyb21TdGF0ZSBjc3RhdGUpCiAKIAkvKiBU ZWFyIGRvd24gdGhlIG11bHRpLWluc2VydCBidWZmZXIgZGF0YSAqLwogCWlmIChpbnNlcnRNZXRo b2QgIT0gQ0lNX1NJTkdMRSkKLQkJQ29weU11bHRpSW5zZXJ0SW5mb0NsZWFudXAoJm11bHRpSW5z ZXJ0SW5mbyk7CisJCUNvcHlNdWxpdEluc2VydERyb3BCdWZmZXJzKG11bHRpX2luc2VydF9ycmlz KTsKIAogCS8qIENsb3NlIGFsbCB0aGUgcGFydGl0aW9uZWQgdGFibGVzLCBsZWFmIHBhcnRpdGlv bnMsIGFuZCB0aGVpciBpbmRpY2VzICovCiAJaWYgKHByb3V0ZSkKLS0gCjIuMjUuMQoK --0000000000006257f105b5f37d65 Content-Type: application/octet-stream; name="v1-0002-CTAS-and-REFRESH-Mat-View-With-New-Multi-Insert-Table-AM.patch" Content-Disposition: attachment; filename="v1-0002-CTAS-and-REFRESH-Mat-View-With-New-Multi-Insert-Table-AM.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kiftb41b1 RnJvbSBlNzc3NTEwZjMyM2MwOTgzOWE2ZGQ5MjUzYTMyN2Y1ZGQ0MTcyYThiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBCaGFyYXRoIFJ1cGlyZWRkeSA8YmhhcmF0aC5ydXBpcmVkZHlA ZW50ZXJwcmlzZWRiLmNvbT4KRGF0ZTogVHVlLCA4IERlYyAyMDIwIDEyOjE0OjIyICswNTMwClN1 YmplY3Q6IFtQQVRDSCB2MV0gQ1RBUyBhbmQgUkVGUkVTSCBNYXQgVmlldyBXaXRoIE5ldyBNdWx0 aSBJbnNlcnQgVGFibGUgQU0KClRoaXMgcGF0Y2ggYWRkcyBuZXcgbXVsdGkgaW5zZXJ0IHRhYmxl IGFjY2VzcyBtZXRob2RzIHRvCkNSRUFURSBUQUJMRSBBUywgQ1JFQVRFIE1BVEVSSUFMSVpFRCBW SUVXIGFuZCBSRUZSRVNIIE1BVEVSSUFMSVpFRApWSUVXLgotLS0KIHNyYy9iYWNrZW5kL2NvbW1h bmRzL2NyZWF0ZWFzLmMgfCA1NyArKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0KIHNy Yy9iYWNrZW5kL2NvbW1hbmRzL21hdHZpZXcuYyAgfCA0MyArKysrKysrKysrKysrKy0tLS0tLS0t LS0tCiAyIGZpbGVzIGNoYW5nZWQsIDU5IGluc2VydGlvbnMoKyksIDQxIGRlbGV0aW9ucygtKQoK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NyZWF0ZWFzLmMgYi9zcmMvYmFja2Vu ZC9jb21tYW5kcy9jcmVhdGVhcy5jCmluZGV4IDZiZjZjNWEzMTAuLjQ1ODBjYmFlMWQgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NyZWF0ZWFzLmMKKysrIGIvc3JjL2JhY2tlbmQv Y29tbWFuZHMvY3JlYXRlYXMuYwpAQCAtNTgsOSArNTgsNyBAQCB0eXBlZGVmIHN0cnVjdAogCS8q IFRoZXNlIGZpZWxkcyBhcmUgZmlsbGVkIGJ5IGludG9yZWxfc3RhcnR1cDogKi8KIAlSZWxhdGlv bglyZWw7CQkJLyogcmVsYXRpb24gdG8gd3JpdGUgdG8gKi8KIAlPYmplY3RBZGRyZXNzIHJlbGFk ZHI7CQkvKiBhZGRyZXNzIG9mIHJlbCwgZm9yIEV4ZWNDcmVhdGVUYWJsZUFzICovCi0JQ29tbWFu ZElkCW91dHB1dF9jaWQ7CQkvKiBjbWluIHRvIGluc2VydCBpbiBvdXRwdXQgdHVwbGVzICovCi0J aW50CQkJdGlfb3B0aW9uczsJCS8qIHRhYmxlX3R1cGxlX2luc2VydCBwZXJmb3JtYW5jZSBvcHRp b25zICovCi0JQnVsa0luc2VydFN0YXRlIGJpc3RhdGU7CS8qIGJ1bGsgaW5zZXJ0IHN0YXRlICov CisJVGFibGVJbnNlcnRTdGF0ZSAqaXN0YXRlOwkvKiBpbnNlcnQgc3RhdGUgKi8KIH0gRFJfaW50 b3JlbDsKIAogLyogdXRpbGl0eSBmdW5jdGlvbnMgZm9yIENUQVMgZGVmaW5pdGlvbiBjcmVhdGlv biAqLwpAQCAtNTIzLDIyICs1MjEsMjggQEAgaW50b3JlbF9zdGFydHVwKERlc3RSZWNlaXZlciAq c2VsZiwgaW50IG9wZXJhdGlvbiwgVHVwbGVEZXNjIHR5cGVpbmZvKQogCWlmIChpc19tYXR2aWV3 ICYmICFpbnRvLT5za2lwRGF0YSkKIAkJU2V0TWF0Vmlld1BvcHVsYXRlZFN0YXRlKGludG9SZWxh dGlvbkRlc2MsIHRydWUpOwogCi0JLyoKLQkgKiBGaWxsIHByaXZhdGUgZmllbGRzIG9mIG15U3Rh dGUgZm9yIHVzZSBieSBsYXRlciByb3V0aW5lcwotCSAqLwotCW15U3RhdGUtPnJlbCA9IGludG9S ZWxhdGlvbkRlc2M7Ci0JbXlTdGF0ZS0+cmVsYWRkciA9IGludG9SZWxhdGlvbkFkZHI7Ci0JbXlT dGF0ZS0+b3V0cHV0X2NpZCA9IEdldEN1cnJlbnRDb21tYW5kSWQodHJ1ZSk7Ci0JbXlTdGF0ZS0+ dGlfb3B0aW9ucyA9IFRBQkxFX0lOU0VSVF9TS0lQX0ZTTTsKLQogCS8qCiAJICogSWYgV0lUSCBO TyBEQVRBIGlzIHNwZWNpZmllZCwgdGhlcmUgaXMgbm8gbmVlZCB0byBzZXQgdXAgdGhlIHN0YXRl IGZvcgotCSAqIGJ1bGsgaW5zZXJ0cyBhcyB0aGVyZSBhcmUgbm8gdHVwbGVzIHRvIGluc2VydC4K KwkgKiBidWxrIGluc2VydHMgYW5kIG11bHRpIGluc2VydHMgYXMgdGhlcmUgYXJlIG5vIHR1cGxl cyB0byBpbnNlcnQuCiAJICovCiAJaWYgKCFpbnRvLT5za2lwRGF0YSkKLQkJbXlTdGF0ZS0+Ymlz dGF0ZSA9IEdldEJ1bGtJbnNlcnRTdGF0ZSgpOworCXsKKwkJbXlTdGF0ZS0+aXN0YXRlID0gdGFi bGVfaW5zZXJ0X2JlZ2luKGludG9SZWxhdGlvbkRlc2MsCisJCQkJCQkJCQkJCSBHZXRDdXJyZW50 Q29tbWFuZElkKHRydWUpLAorCQkJCQkJCQkJCQkgVEFCTEVfSU5TRVJUX1NLSVBfRlNNLAorCQkJ CQkJCQkJCQkgdHJ1ZSwKKwkJCQkJCQkJCQkJIHRydWUsCisJCQkJCQkJCQkJCSAxMDAwLCAvKiBU byBjaGFuZ2UgaXQgdG8gYSBtYWNybyAqLworCQkJCQkJCQkJCQkgNjU1MzUpOyAvKiBUbyBjaGFu Z2UgaXQgdG8gYSBtYWNybyAqLworCX0KIAllbHNlCi0JCW15U3RhdGUtPmJpc3RhdGUgPSBOVUxM OworCQlteVN0YXRlLT5pc3RhdGUgPSBOVUxMOworCisJLyoKKwkgKiBGaWxsIHByaXZhdGUgZmll bGRzIG9mIG15U3RhdGUgZm9yIHVzZSBieSBsYXRlciByb3V0aW5lcworCSAqLworCW15U3RhdGUt PnJlbCA9IGludG9SZWxhdGlvbkRlc2M7CisJbXlTdGF0ZS0+cmVsYWRkciA9IGludG9SZWxhdGlv bkFkZHI7CiAKIAkvKgogCSAqIFZhbGlkIHNtZ3JfdGFyZ2Jsb2NrIGltcGxpZXMgc29tZXRoaW5n IGFscmVhZHkgd3JvdGUgdG8gdGhlIHJlbGF0aW9uLgpAQCAtNTY2LDExICs1NzAsNyBAQCBpbnRv cmVsX3JlY2VpdmUoVHVwbGVUYWJsZVNsb3QgKnNsb3QsIERlc3RSZWNlaXZlciAqc2VsZikKIAkJ ICogd291bGQgbm90IGJlIGNoZWFwIGVpdGhlci4gVGhpcyBhbHNvIGRvZXNuJ3QgYWxsb3cgYWNj ZXNzaW5nIHBlci1BTQogCQkgKiBkYXRhIChzYXkgYSB0dXBsZSdzIHhtaW4pLCBidXQgc2luY2Ug d2UgZG9uJ3QgZG8gdGhhdCBoZXJlLi4uCiAJCSAqLwotCQl0YWJsZV90dXBsZV9pbnNlcnQobXlT dGF0ZS0+cmVsLAotCQkJCQkJICAgc2xvdCwKLQkJCQkJCSAgIG15U3RhdGUtPm91dHB1dF9jaWQs Ci0JCQkJCQkgICBteVN0YXRlLT50aV9vcHRpb25zLAotCQkJCQkJICAgbXlTdGF0ZS0+YmlzdGF0 ZSk7CisJCXRhYmxlX211bHRpX2luc2VydF92MihteVN0YXRlLT5pc3RhdGUsIHNsb3QpOwogCX0K IAogCS8qIFdlIGtub3cgdGhpcyBpcyBhIG5ld2x5IGNyZWF0ZWQgcmVsYXRpb24sIHNvIHRoZXJl IGFyZSBubyBpbmRleGVzICovCkBAIC01ODUsMTIgKzU4NSwyMyBAQCBzdGF0aWMgdm9pZAogaW50 b3JlbF9zaHV0ZG93bihEZXN0UmVjZWl2ZXIgKnNlbGYpCiB7CiAJRFJfaW50b3JlbCAqbXlTdGF0 ZSA9IChEUl9pbnRvcmVsICopIHNlbGY7Ci0JSW50b0NsYXVzZSAqaW50byA9IG15U3RhdGUtPmlu dG87CisJaW50CQkJdGlfb3B0aW9uczsKIAotCWlmICghaW50by0+c2tpcERhdGEpCisJaWYgKCFt eVN0YXRlLT5pbnRvLT5za2lwRGF0YSkKIAl7Ci0JCUZyZWVCdWxrSW5zZXJ0U3RhdGUobXlTdGF0 ZS0+YmlzdGF0ZSk7Ci0JCXRhYmxlX2ZpbmlzaF9idWxrX2luc2VydChteVN0YXRlLT5yZWwsIG15 U3RhdGUtPnRpX29wdGlvbnMpOworCQl0aV9vcHRpb25zID0gbXlTdGF0ZS0+aXN0YXRlLT5vcHRp b25zOworCisJCS8qCisJCSAqIERvIG5vdCBsZXQgY2xlYXJpbmcgYnVmZmVyZWQgc2xvdHMgd2hp bGUgZmx1c2hpbmcgYXMgdGhleSB3aWxsIGJlCisJCSAqIGFueXdheXMgZHJvcHBlZCBieSB0YWJs ZV9pbnNlcnRfZW5kLgorCQkgKi8KKwkJbXlTdGF0ZS0+aXN0YXRlLT5taXN0YXRlLT5jbGVhcl9z bG90cyA9IGZhbHNlOworCisJCXRhYmxlX211bHRpX2luc2VydF9mbHVzaChteVN0YXRlLT5pc3Rh dGUpOworCisJCXRhYmxlX2luc2VydF9lbmQobXlTdGF0ZS0+aXN0YXRlKTsKKworCQl0YWJsZV9m aW5pc2hfYnVsa19pbnNlcnQobXlTdGF0ZS0+cmVsLCB0aV9vcHRpb25zKTsKIAl9CiAKIAkvKiBj bG9zZSByZWwsIGJ1dCBrZWVwIGxvY2sgdW50aWwgY29tbWl0ICovCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9jb21tYW5kcy9tYXR2aWV3LmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9tYXR2aWV3 LmMKaW5kZXggY2ZjNjM5MTVmMy4uNjEwYzdlZGU3OCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv Y29tbWFuZHMvbWF0dmlldy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL21hdHZpZXcuYwpA QCAtNTIsMTAgKzUyLDcgQEAgdHlwZWRlZiBzdHJ1Y3QKIAlEZXN0UmVjZWl2ZXIgcHViOwkJCS8q IHB1YmxpY2x5LWtub3duIGZ1bmN0aW9uIHBvaW50ZXJzICovCiAJT2lkCQkJdHJhbnNpZW50b2lk OwkvKiBPSUQgb2YgbmV3IGhlYXAgaW50byB3aGljaCB0byBzdG9yZSAqLwogCS8qIFRoZXNlIGZp ZWxkcyBhcmUgZmlsbGVkIGJ5IHRyYW5zaWVudHJlbF9zdGFydHVwOiAqLwotCVJlbGF0aW9uCXRy YW5zaWVudHJlbDsJLyogcmVsYXRpb24gdG8gd3JpdGUgdG8gKi8KLQlDb21tYW5kSWQJb3V0cHV0 X2NpZDsJCS8qIGNtaW4gdG8gaW5zZXJ0IGluIG91dHB1dCB0dXBsZXMgKi8KLQlpbnQJCQl0aV9v cHRpb25zOwkJLyogdGFibGVfdHVwbGVfaW5zZXJ0IHBlcmZvcm1hbmNlIG9wdGlvbnMgKi8KLQlC dWxrSW5zZXJ0U3RhdGUgYmlzdGF0ZTsJLyogYnVsayBpbnNlcnQgc3RhdGUgKi8KKwlUYWJsZUlu c2VydFN0YXRlICppc3RhdGU7CS8qIGluc2VydCBzdGF0ZSAqLwogfSBEUl90cmFuc2llbnRyZWw7 CiAKIHN0YXRpYyBpbnQJbWF0dmlld19tYWludGVuYW5jZV9kZXB0aCA9IDA7CkBAIC00NjYsMTAg KzQ2MywxMyBAQCB0cmFuc2llbnRyZWxfc3RhcnR1cChEZXN0UmVjZWl2ZXIgKnNlbGYsIGludCBv cGVyYXRpb24sIFR1cGxlRGVzYyB0eXBlaW5mbykKIAkvKgogCSAqIEZpbGwgcHJpdmF0ZSBmaWVs ZHMgb2YgbXlTdGF0ZSBmb3IgdXNlIGJ5IGxhdGVyIHJvdXRpbmVzCiAJICovCi0JbXlTdGF0ZS0+ dHJhbnNpZW50cmVsID0gdHJhbnNpZW50cmVsOwotCW15U3RhdGUtPm91dHB1dF9jaWQgPSBHZXRD dXJyZW50Q29tbWFuZElkKHRydWUpOwotCW15U3RhdGUtPnRpX29wdGlvbnMgPSBUQUJMRV9JTlNF UlRfU0tJUF9GU00gfCBUQUJMRV9JTlNFUlRfRlJPWkVOOwotCW15U3RhdGUtPmJpc3RhdGUgPSBH ZXRCdWxrSW5zZXJ0U3RhdGUoKTsKKwlteVN0YXRlLT5pc3RhdGUgPSB0YWJsZV9pbnNlcnRfYmVn aW4odHJhbnNpZW50cmVsLAorCQkJCQkJCQkJCSBHZXRDdXJyZW50Q29tbWFuZElkKHRydWUpLAor CQkJCQkJCQkJCSBUQUJMRV9JTlNFUlRfU0tJUF9GU00gfCBUQUJMRV9JTlNFUlRfRlJPWkVOLAor CQkJCQkJCQkJCSB0cnVlLAorCQkJCQkJCQkJCSB0cnVlLAorCQkJCQkJCQkJCSAxMDAwLCAvKiBU byBjaGFuZ2UgaXQgdG8gYSBtYWNybyAqLworCQkJCQkJCQkJCSA2NTUzNSk7IC8qIFRvIGNoYW5n ZSBpdCB0byBhIG1hY3JvICovCiAKIAkvKgogCSAqIFZhbGlkIHNtZ3JfdGFyZ2Jsb2NrIGltcGxp ZXMgc29tZXRoaW5nIGFscmVhZHkgd3JvdGUgdG8gdGhlIHJlbGF0aW9uLgpAQCAtNDk0LDEyICs0 OTQsNyBAQCB0cmFuc2llbnRyZWxfcmVjZWl2ZShUdXBsZVRhYmxlU2xvdCAqc2xvdCwgRGVzdFJl Y2VpdmVyICpzZWxmKQogCSAqIGNoZWFwIGVpdGhlci4gVGhpcyBhbHNvIGRvZXNuJ3QgYWxsb3cg YWNjZXNzaW5nIHBlci1BTSBkYXRhIChzYXkgYQogCSAqIHR1cGxlJ3MgeG1pbiksIGJ1dCBzaW5j ZSB3ZSBkb24ndCBkbyB0aGF0IGhlcmUuLi4KIAkgKi8KLQotCXRhYmxlX3R1cGxlX2luc2VydCht eVN0YXRlLT50cmFuc2llbnRyZWwsCi0JCQkJCSAgIHNsb3QsCi0JCQkJCSAgIG15U3RhdGUtPm91 dHB1dF9jaWQsCi0JCQkJCSAgIG15U3RhdGUtPnRpX29wdGlvbnMsCi0JCQkJCSAgIG15U3RhdGUt PmJpc3RhdGUpOworCXRhYmxlX211bHRpX2luc2VydF92MihteVN0YXRlLT5pc3RhdGUsIHNsb3Qp OwogCiAJLyogV2Uga25vdyB0aGlzIGlzIGEgbmV3bHkgY3JlYXRlZCByZWxhdGlvbiwgc28gdGhl cmUgYXJlIG5vIGluZGV4ZXMgKi8KIApAQCAtNTEzLDE0ICs1MDgsMjYgQEAgc3RhdGljIHZvaWQK IHRyYW5zaWVudHJlbF9zaHV0ZG93bihEZXN0UmVjZWl2ZXIgKnNlbGYpCiB7CiAJRFJfdHJhbnNp ZW50cmVsICpteVN0YXRlID0gKERSX3RyYW5zaWVudHJlbCAqKSBzZWxmOworCWludAkJCXRpX29w dGlvbnM7CisJUmVsYXRpb24JdHJhbnNpZW50cmVsOworCisJdGlfb3B0aW9ucyA9IG15U3RhdGUt PmlzdGF0ZS0+b3B0aW9uczsKKwl0cmFuc2llbnRyZWwgPSBteVN0YXRlLT5pc3RhdGUtPnJlbDsK KworCS8qCisJICogRG8gbm90IGxldCBjbGVhcmluZyBidWZmZXJlZCBzbG90cyB3aGlsZSBmbHVz aGluZyBhcyB0aGV5IHdpbGwgYmUKKwkgKiBhbnl3YXlzIGRyb3BwZWQgYnkgdGFibGVfaW5zZXJ0 X2VuZC4KKwkgKi8KKwlteVN0YXRlLT5pc3RhdGUtPm1pc3RhdGUtPmNsZWFyX3Nsb3RzID0gZmFs c2U7CisKKwl0YWJsZV9tdWx0aV9pbnNlcnRfZmx1c2gobXlTdGF0ZS0+aXN0YXRlKTsKIAotCUZy ZWVCdWxrSW5zZXJ0U3RhdGUobXlTdGF0ZS0+YmlzdGF0ZSk7CisJdGFibGVfaW5zZXJ0X2VuZCht eVN0YXRlLT5pc3RhdGUpOwogCi0JdGFibGVfZmluaXNoX2J1bGtfaW5zZXJ0KG15U3RhdGUtPnRy YW5zaWVudHJlbCwgbXlTdGF0ZS0+dGlfb3B0aW9ucyk7CisJdGFibGVfZmluaXNoX2J1bGtfaW5z ZXJ0KHRyYW5zaWVudHJlbCwgdGlfb3B0aW9ucyk7CiAKIAkvKiBjbG9zZSB0cmFuc2llbnRyZWws IGJ1dCBrZWVwIGxvY2sgdW50aWwgY29tbWl0ICovCi0JdGFibGVfY2xvc2UobXlTdGF0ZS0+dHJh bnNpZW50cmVsLCBOb0xvY2spOwotCW15U3RhdGUtPnRyYW5zaWVudHJlbCA9IE5VTEw7CisJdGFi bGVfY2xvc2UodHJhbnNpZW50cmVsLCBOb0xvY2spOwogfQogCiAvKgotLSAKMi4yNS4xCgo= --0000000000006257f105b5f37d65--